[med-svn] [crux] 03/05: New upstream version 3.1

Andreas Tille tille at debian.org
Tue Dec 5 12:44:08 UTC 2017


This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository crux.

commit e02afacb34c834e07ec4926b4b9bdafb27a71a4f
Author: Andreas Tille <tille at debian.org>
Date:   Tue Dec 5 13:20:39 2017 +0100

    New upstream version 3.1
---
 AUTHORS                                            |      5 +
 CMakeLists.txt                                     |    163 +
 COPYRIGHT                                          |      1 +
 CPackConfig.cmake                                  |     68 +
 CPackSourceConfig.cmake                            |     73 +
 INSTALL                                            |     34 +
 Makefile                                           |    472 +
 NEWS                                               |      2 +
 README                                             |      8 +
 .../Linux/ZIP/crux-3.1.Linux.x86_64/doc/Makefile   |    207 +
 .../doc/assign-confidence.html                     |    147 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/barista.html     |    163 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/bullseye.html    |    158 +
 .../crux-3.1.Linux.x86_64/doc/cascade-search.html  |    215 +
 .../crux-3.1.Linux.x86_64/doc/cmake_install.cmake  |     38 +
 .../doc/comet-options/activation_method.html       |     23 +
 .../doc/comet-options/add_A_alanine.html           |     15 +
 .../doc/comet-options/add_B_user_amino_acid.html   |     19 +
 .../doc/comet-options/add_C_cysteine.html          |     21 +
 .../doc/comet-options/add_Cterm_peptide.html       |     15 +
 .../doc/comet-options/add_Cterm_protein.html       |     15 +
 .../doc/comet-options/add_D_aspartic_acid.html     |     15 +
 .../doc/comet-options/add_E_glutamic_acid.html     |     15 +
 .../doc/comet-options/add_F_phenylalanine.html     |     15 +
 .../doc/comet-options/add_G_glycine.html           |     15 +
 .../doc/comet-options/add_H_histidine.html         |     15 +
 .../doc/comet-options/add_I_isoleucine.html        |     15 +
 .../doc/comet-options/add_J_user_amino_acid.html   |     19 +
 .../doc/comet-options/add_K_lysine.html            |     15 +
 .../doc/comet-options/add_L_leucine.html           |     15 +
 .../doc/comet-options/add_M_methionine.html        |     15 +
 .../doc/comet-options/add_N_asparagine.html        |     15 +
 .../doc/comet-options/add_Nterm_peptide.html       |     15 +
 .../doc/comet-options/add_Nterm_protein.html       |     15 +
 .../doc/comet-options/add_O_ornithine.html         |     15 +
 .../doc/comet-options/add_P_proline.html           |     15 +
 .../doc/comet-options/add_Q_glutamine.html         |     15 +
 .../doc/comet-options/add_R_arginine.html          |     15 +
 .../doc/comet-options/add_S_serine.html            |     15 +
 .../doc/comet-options/add_T_threonine.html         |     15 +
 .../doc/comet-options/add_U_user_amino_acid.html   |     19 +
 .../doc/comet-options/add_V_valine.html            |     15 +
 .../doc/comet-options/add_W_tryptophan.html        |     15 +
 .../doc/comet-options/add_X_user_amino_acid.html   |     19 +
 .../doc/comet-options/add_Y_tyrosine.html          |     15 +
 .../doc/comet-options/add_Z_user_amino_acid.html   |     19 +
 .../doc/comet-options/allowed_missed_cleavage.html |     18 +
 .../doc/comet-options/clear_mz_range.html          |     24 +
 .../doc/comet-options/clip_nterm_methionine.html   |     22 +
 .../doc/comet-options/combined.html                |     23 +
 .../doc/comet-options/comet.params                 |    160 +
 .../doc/comet-options/content.html                 |      1 +
 .../doc/comet-options/convertCometPHPs.py          |     55 +
 .../doc/comet-options/database_name.html           |     21 +
 .../doc/comet-options/decoy_prefix.html            |     22 +
 .../doc/comet-options/decoy_search.html            |     29 +
 .../doc/comet-options/digest_mass_range.html       |     23 +
 .../doc/comet-options/footer.html                  |      1 +
 .../doc/comet-options/fragment_bin_offset.html     |     31 +
 .../doc/comet-options/fragment_bin_tol.html        |     30 +
 .../doc/comet-options/head.html                    |      1 +
 .../doc/comet-options/index.html                   |      1 +
 .../doc/comet-options/isotope_error.html           |     28 +
 .../doc/comet-options/mass_type_fragment.html      |     20 +
 .../doc/comet-options/mass_type_parent.html        |     20 +
 .../doc/comet-options/max_fragment_charge.html     |     28 +
 .../doc/comet-options/max_precursor_charge.html    |     18 +
 .../max_variable_mods_in_peptide.html              |     18 +
 .../doc/comet-options/minimum_intensity.html       |     23 +
 .../doc/comet-options/minimum_peaks.html           |     21 +
 .../doc/comet-options/ms_level.html                |     20 +
 .../comet-options/nucleotide_reading_frame.html    |     28 +
 .../doc/comet-options/num_enzyme_termini.html      |     28 +
 .../doc/comet-options/num_output_lines.html        |     26 +
 .../doc/comet-options/num_results.html             |     22 +
 .../doc/comet-options/num_threads.html             |     20 +
 .../doc/comet-options/output_outfiles.html         |     16 +
 .../doc/comet-options/output_pepxmlfile.html       |     16 +
 .../doc/comet-options/output_percolatorfile.html   |     19 +
 .../doc/comet-options/output_sqtfile.html          |     16 +
 .../doc/comet-options/output_sqtstream.html        |     19 +
 .../doc/comet-options/output_suffix.html           |     25 +
 .../doc/comet-options/output_txtfile.html          |     52 +
 .../doc/comet-options/override_charge.html         |     25 +
 .../doc/comet-options/peptide_mass_tolerance.html  |     17 +
 .../doc/comet-options/peptide_mass_units.html      |     20 +
 .../doc/comet-options/precursor_charge.html        |     30 +
 .../doc/comet-options/print_expect_score.html      |     24 +
 .../doc/comet-options/remove_precursor_peak.html   |     25 +
 .../comet-options/remove_precursor_tolerance.html  |     19 +
 .../doc/comet-options/require_variable_mod.html    |     22 +
 .../crux-3.1.Linux.x86_64/doc/comet-options/runall |     24 +
 .../doc/comet-options/sample_enzyme_number.html    |     22 +
 .../doc/comet-options/scan_range.html              |     23 +
 .../doc/comet-options/search_enzyme_number.html    |     46 +
 .../doc/comet-options/show_fragment_ions.html      |     20 +
 .../doc/comet-options/skip_researching.html        |     25 +
 .../doc/comet-options/spectrum_batch_size.html     |     28 +
 .../comet-options/theoretical_fragment_ions.html   |     32 +
 .../doc/comet-options/topmenu.html                 |      1 +
 .../doc/comet-options/use_A_ions.html              |     18 +
 .../doc/comet-options/use_B_ions.html              |     18 +
 .../doc/comet-options/use_C_ions.html              |     18 +
 .../doc/comet-options/use_NL_ions.html             |     18 +
 .../doc/comet-options/use_X_ions.html              |     18 +
 .../doc/comet-options/use_Y_ions.html              |     18 +
 .../doc/comet-options/use_Z_ions.html              |     18 +
 .../doc/comet-options/use_sparse_matrix.html       |     26 +
 .../doc/comet-options/variable_mod01.html          |     62 +
 .../doc/comet-options/variable_mod02.html          |     48 +
 .../doc/comet-options/variable_mod03.html          |     48 +
 .../doc/comet-options/variable_mod04.html          |     48 +
 .../doc/comet-options/variable_mod05.html          |     48 +
 .../doc/comet-options/variable_mod06.html          |     48 +
 .../doc/comet-options/variable_mod07.html          |     48 +
 .../doc/comet-options/variable_mod08.html          |     48 +
 .../doc/comet-options/variable_mod09.html          |     48 +
 .../Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet.html |    297 +
 .../doc/commands/bullseye_standalone_to_crux.html  |     74 +
 .../doc/commands/hardklor_standalone_to_crux.html  |    127 +
 .../crux-3.1.Linux.x86_64/doc/contributors.html    |    177 +
 .../crux-3.1.Linux.x86_64/doc/create-docs.cmake    |    127 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/create-docs.html |    125 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/default.params   |   1832 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/demos/demo1.sh   |     34 +
 .../crux-3.1.Linux.x86_64/doc/demos/tsv2html.py    |     77 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/deploy-to-web.sh |      9 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/download.html    |    741 +
 .../doc/example-files/default.params               |   1676 +
 .../doc/example-files/demo.ms2                     |  54667 ++++
 .../doc/example-files/search.target.txt            |    721 +
 .../doc/example-files/small-yeast.fasta            |    165 +
 .../doc/example-files/target.sqt                   |     33 +
 .../crux-3.1.Linux.x86_64/doc/extract-columns.html |    131 +
 .../crux-3.1.Linux.x86_64/doc/extract-rows.html    |    134 +
 .../Linux/ZIP/crux-3.1.Linux.x86_64/doc/faq.html   |    638 +
 .../doc/file-formats/barista-xml-format.html       |    249 +
 .../doc/file-formats/fasta-format.html             |    169 +
 .../doc/file-formats/features.html                 |    398 +
 .../doc/file-formats/ms2-format.html               |    283 +
 .../doc/file-formats/parameter-file.html           |    129 +
 .../doc/file-formats/sample.fasta                  |     17 +
 .../doc/file-formats/sqt-format.html               |    329 +
 .../doc/file-formats/txt-format.html               |   1363 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/fileformats.html |    387 +
 .../doc/generate-peptides.html                     |    166 +
 .../doc/get-ms2-spectrum.html                      |    143 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/glossary.html    |    165 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/hardklor.html    |    168 +
 .../doc/images/crux-logo-skyline.png               |    Bin 0 -> 6860 bytes
 .../doc/images/crux-logo-text.png                  |    Bin 0 -> 7409 bytes
 .../crux-3.1.Linux.x86_64/doc/images/crux-logo.png |    Bin 0 -> 20294 bytes
 .../doc/images/hamburger-menu.png                  |    Bin 0 -> 124 bytes
 .../crux-3.1.Linux.x86_64/doc/images/linkicon.png  |    Bin 0 -> 688 bytes
 .../crux-3.1.Linux.x86_64/doc/images/schematic.png |    Bin 0 -> 427892 bytes
 .../doc/images/stored-xcorr.png                    |    Bin 0 -> 5136 bytes
 .../doc/images/tutorialicon.png                    |    Bin 0 -> 1134 bytes
 .../Linux/ZIP/crux-3.1.Linux.x86_64/doc/index.html |    390 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/make-pin.html    |    139 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/mstoolkit.html   |    129 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/param-medic.html |    146 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/param-table.html |    678 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/percolator.html  |    209 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/pipeline.html    |    460 +
 .../doc/predict-peptide-ions.html                  |    141 +
 .../doc/print-processed-spectra.html               |    141 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/psm-convert.html |    142 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/q-ranker.html    |    160 +
 .../crux-3.1.Linux.x86_64/doc/read-tide-index.html |    128 +
 .../crux-3.1.Linux.x86_64/doc/release-notes.html   |   1849 +
 .../Linux/ZIP/crux-3.1.Linux.x86_64/doc/runall     |     28 +
 .../doc/search-for-xlinks.html                     |    256 +
 .../crux-3.1.Linux.x86_64/doc/sort-by-column.html  |    133 +
 .../crux-3.1.Linux.x86_64/doc/spectral-counts.html |    152 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/stat-column.html |    132 +
 .../Linux/ZIP/crux-3.1.Linux.x86_64/doc/styles.css |    570 +
 .../crux-3.1.Linux.x86_64/doc/subtract-index.html  |    138 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/template.html    |    105 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/tide-index.html  |    177 +
 .../ZIP/crux-3.1.Linux.x86_64/doc/tide-search.html |    204 +
 .../doc/tutorials/customizedsearch.html            |    299 +
 .../doc/tutorials/gettingstarted.html              |    218 +
 .../doc/tutorials/install.html                     |    805 +
 .../doc/tutorials/search.html                      |    422 +
 .../doc/tutorials/spectralcounts.html              |    182 +
 .../doc/xlink-assign-ions.html                     |    145 +
 .../doc/xlink-score-spectrum.html                  |    158 +
 .../Linux/ZIP/crux-3.1.Linux.x86_64/license.txt    |     12 +
 cmake_install.cmake                                |     58 +
 crux_version.h                                     |      1 +
 crux_version.h.txt                                 |      1 +
 debian/changelog                                   |      5 -
 debian/compat                                      |      1 -
 debian/control                                     |     24 -
 debian/copyright                                   |     17 -
 debian/rules                                       |      7 -
 debian/source/format                               |      1 -
 debian/upstream/metadata                           |     21 -
 debian/watch                                       |      3 -
 doc/Doxyfile                                       |   1551 +
 doc/PWIZ_README                                    |    142 +
 doc/crux-report.doc                                |    Bin 0 -> 61952 bytes
 doc/logo/README                                    |      1 +
 doc/logo/crux-cmyk.eps                             |    Bin 0 -> 613534 bytes
 doc/logo/crux-rgb.eps                              |    Bin 0 -> 612666 bytes
 doc/logo/crux.ai                                   |    456 +
 doc/logo/crux.png                                  |    Bin 0 -> 38669 bytes
 doc/logo/crux.psd                                  |    Bin 0 -> 603834 bytes
 .../design-transfer-agreement-454896-en_US.pdf     |    Bin 0 -> 29229 bytes
 doc/logs/README                                    |     12 +
 doc/logs/analyze-log.py                            |     48 +
 doc/logs/downloads.txt                             |    926 +
 doc/user/CMakeLists.txt                            |     29 +
 doc/user/Makefile                                  |    207 +
 doc/user/assign-confidence.html                    |    147 +
 doc/user/barista.html                              |    163 +
 doc/user/bullseye.html                             |    158 +
 doc/user/cascade-search.html                       |    215 +
 doc/user/cmake_install.cmake                       |     38 +
 doc/user/comet-options/activation_method.html      |     23 +
 doc/user/comet-options/add_A_alanine.html          |     15 +
 doc/user/comet-options/add_B_user_amino_acid.html  |     19 +
 doc/user/comet-options/add_C_cysteine.html         |     21 +
 doc/user/comet-options/add_Cterm_peptide.html      |     15 +
 doc/user/comet-options/add_Cterm_protein.html      |     15 +
 doc/user/comet-options/add_D_aspartic_acid.html    |     15 +
 doc/user/comet-options/add_E_glutamic_acid.html    |     15 +
 doc/user/comet-options/add_F_phenylalanine.html    |     15 +
 doc/user/comet-options/add_G_glycine.html          |     15 +
 doc/user/comet-options/add_H_histidine.html        |     15 +
 doc/user/comet-options/add_I_isoleucine.html       |     15 +
 doc/user/comet-options/add_J_user_amino_acid.html  |     19 +
 doc/user/comet-options/add_K_lysine.html           |     15 +
 doc/user/comet-options/add_L_leucine.html          |     15 +
 doc/user/comet-options/add_M_methionine.html       |     15 +
 doc/user/comet-options/add_N_asparagine.html       |     15 +
 doc/user/comet-options/add_Nterm_peptide.html      |     15 +
 doc/user/comet-options/add_Nterm_protein.html      |     15 +
 doc/user/comet-options/add_O_ornithine.html        |     15 +
 doc/user/comet-options/add_P_proline.html          |     15 +
 doc/user/comet-options/add_Q_glutamine.html        |     15 +
 doc/user/comet-options/add_R_arginine.html         |     15 +
 doc/user/comet-options/add_S_serine.html           |     15 +
 doc/user/comet-options/add_T_threonine.html        |     15 +
 doc/user/comet-options/add_U_user_amino_acid.html  |     19 +
 doc/user/comet-options/add_V_valine.html           |     15 +
 doc/user/comet-options/add_W_tryptophan.html       |     15 +
 doc/user/comet-options/add_X_user_amino_acid.html  |     19 +
 doc/user/comet-options/add_Y_tyrosine.html         |     15 +
 doc/user/comet-options/add_Z_user_amino_acid.html  |     19 +
 .../comet-options/allowed_missed_cleavage.html     |     18 +
 doc/user/comet-options/clear_mz_range.html         |     24 +
 doc/user/comet-options/clip_nterm_methionine.html  |     22 +
 doc/user/comet-options/combined.html               |     23 +
 doc/user/comet-options/comet.params                |    160 +
 doc/user/comet-options/content.html                |      1 +
 doc/user/comet-options/convertCometPHPs.py         |     55 +
 doc/user/comet-options/database_name.html          |     21 +
 doc/user/comet-options/decoy_prefix.html           |     22 +
 doc/user/comet-options/decoy_search.html           |     29 +
 doc/user/comet-options/digest_mass_range.html      |     23 +
 doc/user/comet-options/footer.html                 |      1 +
 doc/user/comet-options/fragment_bin_offset.html    |     31 +
 doc/user/comet-options/fragment_bin_tol.html       |     30 +
 doc/user/comet-options/head.html                   |      1 +
 doc/user/comet-options/index.html                  |      1 +
 doc/user/comet-options/isotope_error.html          |     28 +
 doc/user/comet-options/mass_type_fragment.html     |     20 +
 doc/user/comet-options/mass_type_parent.html       |     20 +
 doc/user/comet-options/max_fragment_charge.html    |     28 +
 doc/user/comet-options/max_precursor_charge.html   |     18 +
 .../max_variable_mods_in_peptide.html              |     18 +
 doc/user/comet-options/minimum_intensity.html      |     23 +
 doc/user/comet-options/minimum_peaks.html          |     21 +
 doc/user/comet-options/ms_level.html               |     20 +
 .../comet-options/nucleotide_reading_frame.html    |     28 +
 doc/user/comet-options/num_enzyme_termini.html     |     28 +
 doc/user/comet-options/num_output_lines.html       |     26 +
 doc/user/comet-options/num_results.html            |     22 +
 doc/user/comet-options/num_threads.html            |     20 +
 doc/user/comet-options/output_outfiles.html        |     16 +
 doc/user/comet-options/output_pepxmlfile.html      |     16 +
 doc/user/comet-options/output_percolatorfile.html  |     19 +
 doc/user/comet-options/output_sqtfile.html         |     16 +
 doc/user/comet-options/output_sqtstream.html       |     19 +
 doc/user/comet-options/output_suffix.html          |     25 +
 doc/user/comet-options/output_txtfile.html         |     52 +
 doc/user/comet-options/override_charge.html        |     25 +
 doc/user/comet-options/peptide_mass_tolerance.html |     17 +
 doc/user/comet-options/peptide_mass_units.html     |     20 +
 doc/user/comet-options/precursor_charge.html       |     30 +
 doc/user/comet-options/print_expect_score.html     |     24 +
 doc/user/comet-options/remove_precursor_peak.html  |     25 +
 .../comet-options/remove_precursor_tolerance.html  |     19 +
 doc/user/comet-options/require_variable_mod.html   |     22 +
 doc/user/comet-options/runall                      |     24 +
 doc/user/comet-options/sample_enzyme_number.html   |     22 +
 doc/user/comet-options/scan_range.html             |     23 +
 doc/user/comet-options/search_enzyme_number.html   |     46 +
 doc/user/comet-options/show_fragment_ions.html     |     20 +
 doc/user/comet-options/skip_researching.html       |     25 +
 doc/user/comet-options/spectrum_batch_size.html    |     28 +
 .../comet-options/theoretical_fragment_ions.html   |     32 +
 doc/user/comet-options/topmenu.html                |      1 +
 doc/user/comet-options/use_A_ions.html             |     18 +
 doc/user/comet-options/use_B_ions.html             |     18 +
 doc/user/comet-options/use_C_ions.html             |     18 +
 doc/user/comet-options/use_NL_ions.html            |     18 +
 doc/user/comet-options/use_X_ions.html             |     18 +
 doc/user/comet-options/use_Y_ions.html             |     18 +
 doc/user/comet-options/use_Z_ions.html             |     18 +
 doc/user/comet-options/use_sparse_matrix.html      |     26 +
 doc/user/comet-options/variable_mod01.html         |     62 +
 doc/user/comet-options/variable_mod02.html         |     48 +
 doc/user/comet-options/variable_mod03.html         |     48 +
 doc/user/comet-options/variable_mod04.html         |     48 +
 doc/user/comet-options/variable_mod05.html         |     48 +
 doc/user/comet-options/variable_mod06.html         |     48 +
 doc/user/comet-options/variable_mod07.html         |     48 +
 doc/user/comet-options/variable_mod08.html         |     48 +
 doc/user/comet-options/variable_mod09.html         |     48 +
 doc/user/comet.html                                |    297 +
 doc/user/commands/bullseye_standalone_to_crux.html |     74 +
 doc/user/commands/hardklor_standalone_to_crux.html |    127 +
 doc/user/contributors.html                         |    177 +
 doc/user/create-docs.cmake                         |    127 +
 doc/user/create-docs.html                          |    125 +
 doc/user/default.params                            |   1832 +
 doc/user/demos/demo1.sh                            |     34 +
 doc/user/demos/tsv2html.py                         |     77 +
 doc/user/deploy-to-web.sh                          |      9 +
 doc/user/download.html                             |    741 +
 doc/user/example-files/default.params              |   1676 +
 doc/user/example-files/demo.ms2                    |  54667 ++++
 doc/user/example-files/search.target.txt           |    721 +
 doc/user/example-files/small-yeast.fasta           |    165 +
 doc/user/example-files/target.sqt                  |     33 +
 doc/user/extract-columns.html                      |    131 +
 doc/user/extract-rows.html                         |    134 +
 doc/user/faq.html                                  |    638 +
 doc/user/file-formats/barista-xml-format.html      |    249 +
 doc/user/file-formats/fasta-format.html            |    169 +
 doc/user/file-formats/features.html                |    398 +
 doc/user/file-formats/ms2-format.html              |    283 +
 doc/user/file-formats/parameter-file.html          |    129 +
 doc/user/file-formats/sample.fasta                 |     17 +
 doc/user/file-formats/sqt-format.html              |    329 +
 doc/user/file-formats/txt-format.html              |   1363 +
 doc/user/fileformats.html                          |    387 +
 doc/user/generate-peptides.html                    |    166 +
 doc/user/get-ms2-spectrum.html                     |    143 +
 doc/user/glossary.html                             |    165 +
 doc/user/hardklor.html                             |    168 +
 doc/user/images/crux-logo-skyline.png              |    Bin 0 -> 6860 bytes
 doc/user/images/crux-logo-text.png                 |    Bin 0 -> 7409 bytes
 doc/user/images/crux-logo.png                      |    Bin 0 -> 20294 bytes
 doc/user/images/hamburger-menu.png                 |    Bin 0 -> 124 bytes
 doc/user/images/linkicon.png                       |    Bin 0 -> 688 bytes
 doc/user/images/schematic.png                      |    Bin 0 -> 427892 bytes
 doc/user/images/stored-xcorr.png                   |    Bin 0 -> 5136 bytes
 doc/user/images/tutorialicon.png                   |    Bin 0 -> 1134 bytes
 doc/user/index.html                                |    390 +
 doc/user/make-pin.html                             |    139 +
 doc/user/mstoolkit.html                            |    129 +
 doc/user/param-medic.html                          |    146 +
 doc/user/param-table.html                          |    678 +
 doc/user/percolator.html                           |    209 +
 doc/user/pipeline.html                             |    460 +
 doc/user/predict-peptide-ions.html                 |    141 +
 doc/user/print-processed-spectra.html              |    141 +
 doc/user/psm-convert.html                          |    142 +
 doc/user/q-ranker.html                             |    160 +
 doc/user/read-tide-index.html                      |    128 +
 doc/user/release-notes.html                        |   1849 +
 doc/user/runall                                    |     28 +
 doc/user/search-for-xlinks.html                    |    256 +
 doc/user/sort-by-column.html                       |    133 +
 doc/user/spectral-counts.html                      |    152 +
 doc/user/stat-column.html                          |    132 +
 doc/user/styles.css                                |    570 +
 doc/user/subtract-index.html                       |    138 +
 doc/user/template.html                             |    105 +
 doc/user/tide-index.html                           |    177 +
 doc/user/tide-search.html                          |    204 +
 doc/user/tutorials/customizedsearch.html           |    299 +
 doc/user/tutorials/gettingstarted.html             |    218 +
 doc/user/tutorials/install.html                    |    805 +
 doc/user/tutorials/search.html                     |    422 +
 doc/user/tutorials/spectralcounts.html             |    182 +
 doc/user/xlink-assign-ions.html                    |    145 +
 doc/user/xlink-score-spectrum.html                 |    158 +
 ext/CMakeLists.txt                                 |    342 +
 ext/Makefile                                       |    267 +
 ext/build-comet.cmake                              |     10 +
 ext/build_pwiz.cmake                               |     77 +
 ext/cmake_install.cmake                            |     34 +
 ext/create_links.sh                                |     44 +
 ext/download-pwiz-tarball.sh                       |     18 +
 ext/download_gflags.cmake                          |     66 +
 ext/download_pbuffers.cmake                        |     65 +
 ext/download_pwiz.cmake                            |    103 +
 ext/fdstream.hpp                                   |    184 +
 ext/patch-comet.cmake                              |     73 +
 .../XSD/mac_xdr_fix/xdr-stream-extraction.hxx      |    308 +
 .../XSD/mac_xdr_fix/xdr-stream-insertion.hxx       |    277 +
 ext/patches/boost/asio.hpp                         |    121 +
 ext/patches/boost/asio/async_result.hpp            |     96 +
 ext/patches/boost/asio/basic_datagram_socket.hpp   |    951 +
 ext/patches/boost/asio/basic_deadline_timer.hpp    |    520 +
 ext/patches/boost/asio/basic_io_object.hpp         |    242 +
 ext/patches/boost/asio/basic_raw_socket.hpp        |    942 +
 ext/patches/boost/asio/basic_seq_packet_socket.hpp |    567 +
 ext/patches/boost/asio/basic_serial_port.hpp       |    697 +
 ext/patches/boost/asio/basic_signal_set.hpp        |    386 +
 ext/patches/boost/asio/basic_socket.hpp            |   1520 +
 ext/patches/boost/asio/basic_socket_acceptor.hpp   |   1138 +
 ext/patches/boost/asio/basic_socket_iostream.hpp   |    288 +
 ext/patches/boost/asio/basic_socket_streambuf.hpp  |    569 +
 ext/patches/boost/asio/basic_stream_socket.hpp     |    854 +
 ext/patches/boost/asio/basic_streambuf.hpp         |    371 +
 ext/patches/boost/asio/basic_streambuf_fwd.hpp     |     35 +
 ext/patches/boost/asio/basic_waitable_timer.hpp    |    521 +
 ext/patches/boost/asio/buffer.hpp                  |   2241 +
 ext/patches/boost/asio/buffered_read_stream.hpp    |    246 +
 .../boost/asio/buffered_read_stream_fwd.hpp        |     27 +
 ext/patches/boost/asio/buffered_stream.hpp         |    260 +
 ext/patches/boost/asio/buffered_stream_fwd.hpp     |     27 +
 ext/patches/boost/asio/buffered_write_stream.hpp   |    238 +
 .../boost/asio/buffered_write_stream_fwd.hpp       |     27 +
 ext/patches/boost/asio/buffers_iterator.hpp        |    483 +
 ext/patches/boost/asio/completion_condition.hpp    |    220 +
 ext/patches/boost/asio/connect.hpp                 |    825 +
 ext/patches/boost/asio/coroutine.hpp               |    330 +
 ext/patches/boost/asio/datagram_socket_service.hpp |    434 +
 ext/patches/boost/asio/deadline_timer.hpp          |     42 +
 ext/patches/boost/asio/deadline_timer_service.hpp  |    173 +
 ext/patches/boost/asio/detail/addressof.hpp        |     40 +
 ext/patches/boost/asio/detail/array.hpp            |     40 +
 ext/patches/boost/asio/detail/array_fwd.hpp        |     34 +
 ext/patches/boost/asio/detail/assert.hpp           |     32 +
 ext/patches/boost/asio/detail/atomic_count.hpp     |     47 +
 .../asio/detail/base_from_completion_cond.hpp      |     70 +
 ext/patches/boost/asio/detail/bind_handler.hpp     |    491 +
 .../boost/asio/detail/buffer_resize_guard.hpp      |     68 +
 .../boost/asio/detail/buffer_sequence_adapter.hpp  |    385 +
 .../boost/asio/detail/buffered_stream_storage.hpp  |    128 +
 ext/patches/boost/asio/detail/call_stack.hpp       |    127 +
 .../boost/asio/detail/chrono_time_traits.hpp       |    192 +
 .../boost/asio/detail/completion_handler.hpp       |     83 +
 ext/patches/boost/asio/detail/config.hpp           |    906 +
 .../boost/asio/detail/consuming_buffers.hpp        |    294 +
 ext/patches/boost/asio/detail/cstdint.hpp          |     48 +
 ext/patches/boost/asio/detail/date_time_fwd.hpp    |     34 +
 .../boost/asio/detail/deadline_timer_service.hpp   |    229 +
 ext/patches/boost/asio/detail/dependent_type.hpp   |     38 +
 ext/patches/boost/asio/detail/descriptor_ops.hpp   |    119 +
 .../boost/asio/detail/descriptor_read_op.hpp       |    121 +
 .../boost/asio/detail/descriptor_write_op.hpp      |    121 +
 ext/patches/boost/asio/detail/dev_poll_reactor.hpp |    212 +
 ext/patches/boost/asio/detail/epoll_reactor.hpp    |    244 +
 ext/patches/boost/asio/detail/event.hpp            |     50 +
 .../asio/detail/eventfd_select_interrupter.hpp     |     85 +
 ext/patches/boost/asio/detail/fd_set_adapter.hpp   |     41 +
 ext/patches/boost/asio/detail/fenced_block.hpp     |     78 +
 ext/patches/boost/asio/detail/function.hpp         |     40 +
 .../boost/asio/detail/gcc_arm_fenced_block.hpp     |     91 +
 .../boost/asio/detail/gcc_hppa_fenced_block.hpp    |     68 +
 .../boost/asio/detail/gcc_sync_fenced_block.hpp    |     65 +
 .../boost/asio/detail/gcc_x86_fenced_block.hpp     |     99 +
 .../boost/asio/detail/handler_alloc_helpers.hpp    |     82 +
 .../boost/asio/detail/handler_cont_helpers.hpp     |     45 +
 .../boost/asio/detail/handler_invoke_helpers.hpp   |     57 +
 ext/patches/boost/asio/detail/handler_tracking.hpp |    161 +
 .../asio/detail/handler_type_requirements.hpp      |    490 +
 ext/patches/boost/asio/detail/hash_map.hpp         |    333 +
 .../asio/detail/impl/buffer_sequence_adapter.ipp   |    120 +
 .../boost/asio/detail/impl/descriptor_ops.ipp      |    453 +
 .../boost/asio/detail/impl/dev_poll_reactor.hpp    |     80 +
 .../boost/asio/detail/impl/dev_poll_reactor.ipp    |    447 +
 .../boost/asio/detail/impl/epoll_reactor.hpp       |     78 +
 .../boost/asio/detail/impl/epoll_reactor.ipp       |    664 +
 .../detail/impl/eventfd_select_interrupter.ipp     |    167 +
 .../boost/asio/detail/impl/handler_tracking.ipp    |    307 +
 .../boost/asio/detail/impl/kqueue_reactor.hpp      |     82 +
 .../boost/asio/detail/impl/kqueue_reactor.ipp      |    465 +
 .../asio/detail/impl/pipe_select_interrupter.ipp   |    126 +
 ext/patches/boost/asio/detail/impl/posix_event.ipp |     49 +
 ext/patches/boost/asio/detail/impl/posix_mutex.ipp |     48 +
 .../boost/asio/detail/impl/posix_thread.ipp        |     76 +
 .../boost/asio/detail/impl/posix_tss_ptr.ipp       |     48 +
 .../detail/impl/reactive_descriptor_service.ipp    |    210 +
 .../detail/impl/reactive_serial_port_service.ipp   |    153 +
 .../detail/impl/reactive_socket_service_base.ipp   |    269 +
 .../asio/detail/impl/resolver_service_base.ipp     |    132 +
 .../boost/asio/detail/impl/select_reactor.hpp      |     89 +
 .../boost/asio/detail/impl/select_reactor.ipp      |    315 +
 .../boost/asio/detail/impl/service_registry.hpp    |     90 +
 .../boost/asio/detail/impl/service_registry.ipp    |    190 +
 .../boost/asio/detail/impl/signal_set_service.ipp  |    649 +
 ext/patches/boost/asio/detail/impl/socket_ops.ipp  |   3395 +
 .../asio/detail/impl/socket_select_interrupter.ipp |    177 +
 .../boost/asio/detail/impl/strand_service.hpp      |    120 +
 .../boost/asio/detail/impl/strand_service.ipp      |    178 +
 .../boost/asio/detail/impl/task_io_service.hpp     |     80 +
 .../boost/asio/detail/impl/task_io_service.ipp     |    476 +
 ext/patches/boost/asio/detail/impl/throw_error.ipp |     47 +
 .../boost/asio/detail/impl/timer_queue_ptime.ipp   |     86 +
 .../boost/asio/detail/impl/timer_queue_set.ipp     |    103 +
 ext/patches/boost/asio/detail/impl/win_event.ipp   |     69 +
 .../asio/detail/impl/win_iocp_handle_service.ipp   |    527 +
 .../boost/asio/detail/impl/win_iocp_io_service.hpp |    132 +
 .../boost/asio/detail/impl/win_iocp_io_service.ipp |    540 +
 .../detail/impl/win_iocp_serial_port_service.ipp   |    182 +
 .../detail/impl/win_iocp_socket_service_base.ipp   |    730 +
 ext/patches/boost/asio/detail/impl/win_mutex.ipp   |     80 +
 .../asio/detail/impl/win_object_handle_service.ipp |    446 +
 .../boost/asio/detail/impl/win_static_mutex.ipp    |    120 +
 ext/patches/boost/asio/detail/impl/win_thread.ipp  |    141 +
 ext/patches/boost/asio/detail/impl/win_tss_ptr.ipp |     59 +
 .../detail/impl/winrt_ssocket_service_base.ipp     |    614 +
 .../asio/detail/impl/winrt_timer_scheduler.hpp     |     81 +
 .../asio/detail/impl/winrt_timer_scheduler.ipp     |    124 +
 .../boost/asio/detail/impl/winsock_init.ipp        |     84 +
 ext/patches/boost/asio/detail/io_control.hpp       |    136 +
 ext/patches/boost/asio/detail/keyword_tss_ptr.hpp  |     72 +
 ext/patches/boost/asio/detail/kqueue_reactor.hpp   |    221 +
 ext/patches/boost/asio/detail/limits.hpp           |     26 +
 .../boost/asio/detail/local_free_on_block_exit.hpp |     59 +
 .../boost/asio/detail/macos_fenced_block.hpp       |     63 +
 ext/patches/boost/asio/detail/mutex.hpp            |     50 +
 ext/patches/boost/asio/detail/noncopyable.hpp      |     45 +
 ext/patches/boost/asio/detail/null_event.hpp       |     90 +
 .../boost/asio/detail/null_fenced_block.hpp        |     47 +
 ext/patches/boost/asio/detail/null_mutex.hpp       |     66 +
 ext/patches/boost/asio/detail/null_reactor.hpp     |     69 +
 .../boost/asio/detail/null_signal_blocker.hpp      |     71 +
 .../boost/asio/detail/null_socket_service.hpp      |    499 +
 .../boost/asio/detail/null_static_mutex.hpp        |     62 +
 ext/patches/boost/asio/detail/null_thread.hpp      |     63 +
 ext/patches/boost/asio/detail/null_tss_ptr.hpp     |     70 +
 ext/patches/boost/asio/detail/object_pool.hpp      |    148 +
 .../boost/asio/detail/old_win_sdk_compat.hpp       |    216 +
 ext/patches/boost/asio/detail/op_queue.hpp         |    158 +
 ext/patches/boost/asio/detail/operation.hpp        |     40 +
 .../boost/asio/detail/pipe_select_interrupter.hpp  |     91 +
 ext/patches/boost/asio/detail/pop_options.hpp      |    105 +
 ext/patches/boost/asio/detail/posix_event.hpp      |    128 +
 .../boost/asio/detail/posix_fd_set_adapter.hpp     |    120 +
 ext/patches/boost/asio/detail/posix_mutex.hpp      |     78 +
 .../boost/asio/detail/posix_signal_blocker.hpp     |     87 +
 .../boost/asio/detail/posix_static_mutex.hpp       |     66 +
 ext/patches/boost/asio/detail/posix_thread.hpp     |    107 +
 ext/patches/boost/asio/detail/posix_tss_ptr.hpp    |     81 +
 ext/patches/boost/asio/detail/push_options.hpp     |    138 +
 .../asio/detail/reactive_descriptor_service.hpp    |    324 +
 .../boost/asio/detail/reactive_null_buffers_op.hpp |     90 +
 .../asio/detail/reactive_serial_port_service.hpp   |    236 +
 .../asio/detail/reactive_socket_accept_op.hpp      |    138 +
 .../asio/detail/reactive_socket_connect_op.hpp     |    108 +
 .../boost/asio/detail/reactive_socket_recv_op.hpp  |    125 +
 .../asio/detail/reactive_socket_recvfrom_op.hpp    |    135 +
 .../asio/detail/reactive_socket_recvmsg_op.hpp     |    127 +
 .../boost/asio/detail/reactive_socket_send_op.hpp  |    122 +
 .../asio/detail/reactive_socket_sendto_op.hpp      |    125 +
 .../boost/asio/detail/reactive_socket_service.hpp  |    459 +
 .../asio/detail/reactive_socket_service_base.hpp   |    452 +
 ext/patches/boost/asio/detail/reactor.hpp          |     32 +
 ext/patches/boost/asio/detail/reactor_fwd.hpp      |     42 +
 ext/patches/boost/asio/detail/reactor_op.hpp       |     63 +
 ext/patches/boost/asio/detail/reactor_op_queue.hpp |    170 +
 ext/patches/boost/asio/detail/regex_fwd.hpp        |     35 +
 .../boost/asio/detail/resolve_endpoint_op.hpp      |    123 +
 ext/patches/boost/asio/detail/resolve_op.hpp       |    133 +
 ext/patches/boost/asio/detail/resolver_service.hpp |    131 +
 .../boost/asio/detail/resolver_service_base.hpp    |    131 +
 ext/patches/boost/asio/detail/scoped_lock.hpp      |    103 +
 ext/patches/boost/asio/detail/scoped_ptr.hpp       |     81 +
 .../boost/asio/detail/select_interrupter.hpp       |     48 +
 ext/patches/boost/asio/detail/select_reactor.hpp   |    221 +
 ext/patches/boost/asio/detail/service_registry.hpp |    158 +
 ext/patches/boost/asio/detail/shared_ptr.hpp       |     40 +
 ext/patches/boost/asio/detail/signal_blocker.hpp   |     46 +
 ext/patches/boost/asio/detail/signal_handler.hpp   |     84 +
 ext/patches/boost/asio/detail/signal_init.hpp      |     49 +
 ext/patches/boost/asio/detail/signal_op.hpp        |     51 +
 .../boost/asio/detail/signal_set_service.hpp       |    218 +
 ext/patches/boost/asio/detail/socket_holder.hpp    |    100 +
 ext/patches/boost/asio/detail/socket_ops.hpp       |    336 +
 ext/patches/boost/asio/detail/socket_option.hpp    |    318 +
 .../asio/detail/socket_select_interrupter.hpp      |     93 +
 ext/patches/boost/asio/detail/socket_types.hpp     |    406 +
 .../boost/asio/detail/solaris_fenced_block.hpp     |     63 +
 ext/patches/boost/asio/detail/static_mutex.hpp     |     54 +
 ext/patches/boost/asio/detail/std_event.hpp        |    178 +
 ext/patches/boost/asio/detail/std_mutex.hpp        |     75 +
 ext/patches/boost/asio/detail/std_static_mutex.hpp |     83 +
 ext/patches/boost/asio/detail/std_thread.hpp       |     67 +
 ext/patches/boost/asio/detail/strand_service.hpp   |    144 +
 ext/patches/boost/asio/detail/task_io_service.hpp  |    203 +
 .../asio/detail/task_io_service_operation.hpp      |     78 +
 .../asio/detail/task_io_service_thread_info.hpp    |     42 +
 ext/patches/boost/asio/detail/thread.hpp           |     58 +
 ext/patches/boost/asio/detail/thread_info_base.hpp |     93 +
 ext/patches/boost/asio/detail/throw_error.hpp      |     55 +
 ext/patches/boost/asio/detail/throw_exception.hpp  |     53 +
 ext/patches/boost/asio/detail/timer_queue.hpp      |    334 +
 ext/patches/boost/asio/detail/timer_queue_base.hpp |     70 +
 .../boost/asio/detail/timer_queue_ptime.hpp        |     95 +
 ext/patches/boost/asio/detail/timer_queue_set.hpp  |     68 +
 ext/patches/boost/asio/detail/timer_scheduler.hpp  |     35 +
 .../boost/asio/detail/timer_scheduler_fwd.hpp      |     42 +
 ext/patches/boost/asio/detail/tss_ptr.hpp          |     71 +
 ext/patches/boost/asio/detail/type_traits.hpp      |     60 +
 .../boost/asio/detail/variadic_templates.hpp       |     63 +
 ext/patches/boost/asio/detail/wait_handler.hpp     |     85 +
 ext/patches/boost/asio/detail/wait_op.hpp          |     47 +
 ext/patches/boost/asio/detail/weak_ptr.hpp         |     40 +
 ext/patches/boost/asio/detail/win_event.hpp        |    128 +
 .../boost/asio/detail/win_fd_set_adapter.hpp       |    151 +
 ext/patches/boost/asio/detail/win_fenced_block.hpp |     91 +
 .../boost/asio/detail/win_iocp_handle_read_op.hpp  |    111 +
 .../boost/asio/detail/win_iocp_handle_service.hpp  |    324 +
 .../boost/asio/detail/win_iocp_handle_write_op.hpp |    103 +
 .../boost/asio/detail/win_iocp_io_service.hpp      |    317 +
 .../boost/asio/detail/win_iocp_null_buffers_op.hpp |    121 +
 .../boost/asio/detail/win_iocp_operation.hpp       |     97 +
 .../boost/asio/detail/win_iocp_overlapped_op.hpp   |     90 +
 .../boost/asio/detail/win_iocp_overlapped_ptr.hpp  |    146 +
 .../asio/detail/win_iocp_serial_port_service.hpp   |    230 +
 .../asio/detail/win_iocp_socket_accept_op.hpp      |    167 +
 .../asio/detail/win_iocp_socket_connect_op.hpp     |    126 +
 .../boost/asio/detail/win_iocp_socket_recv_op.hpp  |    117 +
 .../asio/detail/win_iocp_socket_recvfrom_op.hpp    |    125 +
 .../asio/detail/win_iocp_socket_recvmsg_op.hpp     |    118 +
 .../boost/asio/detail/win_iocp_socket_send_op.hpp  |    111 +
 .../boost/asio/detail/win_iocp_socket_service.hpp  |    527 +
 .../asio/detail/win_iocp_socket_service_base.hpp   |    526 +
 .../boost/asio/detail/win_iocp_thread_info.hpp     |     36 +
 ext/patches/boost/asio/detail/win_mutex.hpp        |     80 +
 .../asio/detail/win_object_handle_service.hpp      |    185 +
 ext/patches/boost/asio/detail/win_static_mutex.hpp |     76 +
 ext/patches/boost/asio/detail/win_thread.hpp       |    141 +
 ext/patches/boost/asio/detail/win_tss_ptr.hpp      |     81 +
 ext/patches/boost/asio/detail/wince_thread.hpp     |    118 +
 .../boost/asio/detail/winrt_async_manager.hpp      |    296 +
 ext/patches/boost/asio/detail/winrt_async_op.hpp   |     67 +
 ext/patches/boost/asio/detail/winrt_resolve_op.hpp |    119 +
 .../boost/asio/detail/winrt_resolver_service.hpp   |    185 +
 .../boost/asio/detail/winrt_socket_connect_op.hpp  |     92 +
 .../boost/asio/detail/winrt_socket_recv_op.hpp     |    112 +
 .../boost/asio/detail/winrt_socket_send_op.hpp     |    103 +
 .../boost/asio/detail/winrt_ssocket_service.hpp    |    234 +
 .../asio/detail/winrt_ssocket_service_base.hpp     |    357 +
 .../boost/asio/detail/winrt_timer_scheduler.hpp    |    133 +
 ext/patches/boost/asio/detail/winrt_utils.hpp      |    108 +
 ext/patches/boost/asio/detail/winsock_init.hpp     |    130 +
 ext/patches/boost/asio/detail/wrapped_handler.hpp  |    293 +
 ext/patches/boost/asio/error.hpp                   |    336 +
 ext/patches/boost/asio/generic/basic_endpoint.hpp  |    195 +
 .../boost/asio/generic/datagram_protocol.hpp       |    125 +
 ext/patches/boost/asio/generic/detail/endpoint.hpp |    135 +
 .../boost/asio/generic/detail/impl/endpoint.ipp    |    111 +
 ext/patches/boost/asio/generic/raw_protocol.hpp    |    123 +
 .../boost/asio/generic/seq_packet_protocol.hpp     |    124 +
 ext/patches/boost/asio/generic/stream_protocol.hpp |    129 +
 ext/patches/boost/asio/handler_alloc_hook.hpp      |     83 +
 .../boost/asio/handler_continuation_hook.hpp       |     56 +
 ext/patches/boost/asio/handler_invoke_hook.hpp     |     87 +
 ext/patches/boost/asio/handler_type.hpp            |    114 +
 ext/patches/boost/asio/high_resolution_timer.hpp   |     65 +
 .../boost/asio/impl/buffered_read_stream.hpp       |    360 +
 .../boost/asio/impl/buffered_write_stream.hpp      |    340 +
 ext/patches/boost/asio/impl/connect.hpp            |    430 +
 ext/patches/boost/asio/impl/error.ipp              |    130 +
 ext/patches/boost/asio/impl/handler_alloc_hook.ipp |     79 +
 ext/patches/boost/asio/impl/io_service.hpp         |    156 +
 ext/patches/boost/asio/impl/io_service.ipp         |    157 +
 ext/patches/boost/asio/impl/read.hpp               |    755 +
 ext/patches/boost/asio/impl/read_at.hpp            |    812 +
 ext/patches/boost/asio/impl/read_until.hpp         |   1149 +
 ext/patches/boost/asio/impl/serial_port_base.hpp   |     61 +
 ext/patches/boost/asio/impl/serial_port_base.ipp   |    556 +
 ext/patches/boost/asio/impl/spawn.hpp              |    338 +
 ext/patches/boost/asio/impl/src.cpp                |     25 +
 ext/patches/boost/asio/impl/src.hpp                |     73 +
 ext/patches/boost/asio/impl/use_future.hpp         |    174 +
 ext/patches/boost/asio/impl/write.hpp              |    767 +
 ext/patches/boost/asio/impl/write_at.hpp           |    827 +
 ext/patches/boost/asio/io_service.hpp              |    772 +
 ext/patches/boost/asio/ip/address.hpp              |    202 +
 ext/patches/boost/asio/ip/address_v4.hpp           |    243 +
 ext/patches/boost/asio/ip/address_v6.hpp           |    248 +
 ext/patches/boost/asio/ip/basic_endpoint.hpp       |    265 +
 ext/patches/boost/asio/ip/basic_resolver.hpp       |    270 +
 ext/patches/boost/asio/ip/basic_resolver_entry.hpp |     96 +
 .../boost/asio/ip/basic_resolver_iterator.hpp      |    262 +
 ext/patches/boost/asio/ip/basic_resolver_query.hpp |    246 +
 ext/patches/boost/asio/ip/detail/endpoint.hpp      |    141 +
 ext/patches/boost/asio/ip/detail/impl/endpoint.ipp |    206 +
 ext/patches/boost/asio/ip/detail/socket_option.hpp |    571 +
 ext/patches/boost/asio/ip/host_name.hpp            |     44 +
 ext/patches/boost/asio/ip/icmp.hpp                 |    117 +
 ext/patches/boost/asio/ip/impl/address.hpp         |     55 +
 ext/patches/boost/asio/ip/impl/address.ipp         |    228 +
 ext/patches/boost/asio/ip/impl/address_v4.hpp      |     55 +
 ext/patches/boost/asio/ip/impl/address_v4.ipp      |    180 +
 ext/patches/boost/asio/ip/impl/address_v6.hpp      |     55 +
 ext/patches/boost/asio/ip/impl/address_v6.ipp      |    300 +
 ext/patches/boost/asio/ip/impl/basic_endpoint.hpp  |     57 +
 ext/patches/boost/asio/ip/impl/host_name.ipp       |     56 +
 ext/patches/boost/asio/ip/multicast.hpp            |    193 +
 ext/patches/boost/asio/ip/resolver_query_base.hpp  |    132 +
 ext/patches/boost/asio/ip/resolver_service.hpp     |    178 +
 ext/patches/boost/asio/ip/tcp.hpp                  |    157 +
 ext/patches/boost/asio/ip/udp.hpp                  |    113 +
 ext/patches/boost/asio/ip/unicast.hpp              |     72 +
 ext/patches/boost/asio/ip/v6_only.hpp              |     71 +
 ext/patches/boost/asio/is_read_buffered.hpp        |     61 +
 ext/patches/boost/asio/is_write_buffered.hpp       |     61 +
 ext/patches/boost/asio/local/basic_endpoint.hpp    |    241 +
 ext/patches/boost/asio/local/connect_pair.hpp      |    106 +
 ext/patches/boost/asio/local/datagram_protocol.hpp |     82 +
 ext/patches/boost/asio/local/detail/endpoint.hpp   |    135 +
 .../boost/asio/local/detail/impl/endpoint.ipp      |    130 +
 ext/patches/boost/asio/local/stream_protocol.hpp   |     92 +
 ext/patches/boost/asio/placeholders.hpp            |    125 +
 ext/patches/boost/asio/posix/basic_descriptor.hpp  |    492 +
 .../boost/asio/posix/basic_stream_descriptor.hpp   |    364 +
 ext/patches/boost/asio/posix/descriptor_base.hpp   |     99 +
 ext/patches/boost/asio/posix/stream_descriptor.hpp |     39 +
 .../boost/asio/posix/stream_descriptor_service.hpp |    262 +
 ext/patches/boost/asio/raw_socket_service.hpp      |    434 +
 ext/patches/boost/asio/read.hpp                    |    633 +
 ext/patches/boost/asio/read_at.hpp                 |    666 +
 ext/patches/boost/asio/read_until.hpp              |    925 +
 .../boost/asio/seq_packet_socket_service.hpp       |    382 +
 ext/patches/boost/asio/serial_port.hpp             |     38 +
 ext/patches/boost/asio/serial_port_base.hpp        |    169 +
 ext/patches/boost/asio/serial_port_service.hpp     |    255 +
 ext/patches/boost/asio/signal_set.hpp              |     30 +
 ext/patches/boost/asio/signal_set_service.hpp      |    136 +
 ext/patches/boost/asio/socket_acceptor_service.hpp |    304 +
 ext/patches/boost/asio/socket_base.hpp             |    522 +
 ext/patches/boost/asio/spawn.hpp                   |    267 +
 ext/patches/boost/asio/ssl.hpp                     |     30 +
 ext/patches/boost/asio/ssl/basic_context.hpp       |     42 +
 ext/patches/boost/asio/ssl/context.hpp             |    789 +
 ext/patches/boost/asio/ssl/context_base.hpp        |    169 +
 ext/patches/boost/asio/ssl/context_service.hpp     |     42 +
 .../asio/ssl/detail/buffered_handshake_op.hpp      |    112 +
 ext/patches/boost/asio/ssl/detail/engine.hpp       |    166 +
 ext/patches/boost/asio/ssl/detail/handshake_op.hpp |     70 +
 ext/patches/boost/asio/ssl/detail/impl/engine.ipp  |    328 +
 .../boost/asio/ssl/detail/impl/openssl_init.ipp    |    147 +
 ext/patches/boost/asio/ssl/detail/io.hpp           |    349 +
 ext/patches/boost/asio/ssl/detail/openssl_init.hpp |    103 +
 .../boost/asio/ssl/detail/openssl_types.hpp        |     28 +
 .../boost/asio/ssl/detail/password_callback.hpp    |     74 +
 ext/patches/boost/asio/ssl/detail/read_op.hpp      |     75 +
 ext/patches/boost/asio/ssl/detail/shutdown_op.hpp  |     62 +
 ext/patches/boost/asio/ssl/detail/stream_core.hpp  |    128 +
 .../boost/asio/ssl/detail/verify_callback.hpp      |     70 +
 ext/patches/boost/asio/ssl/detail/write_op.hpp     |     75 +
 ext/patches/boost/asio/ssl/error.hpp               |     72 +
 ext/patches/boost/asio/ssl/impl/context.hpp        |     73 +
 ext/patches/boost/asio/ssl/impl/context.ipp        |    952 +
 ext/patches/boost/asio/ssl/impl/error.ipp          |     59 +
 .../boost/asio/ssl/impl/rfc2818_verification.ipp   |    168 +
 ext/patches/boost/asio/ssl/impl/src.hpp            |     28 +
 ext/patches/boost/asio/ssl/old/basic_context.hpp   |    436 +
 ext/patches/boost/asio/ssl/old/context_service.hpp |    176 +
 .../ssl/old/detail/openssl_context_service.hpp     |    388 +
 .../asio/ssl/old/detail/openssl_operation.hpp      |    526 +
 .../asio/ssl/old/detail/openssl_stream_service.hpp |    573 +
 ext/patches/boost/asio/ssl/old/stream.hpp          |    503 +
 ext/patches/boost/asio/ssl/old/stream_service.hpp  |    186 +
 .../boost/asio/ssl/rfc2818_verification.hpp        |    102 +
 ext/patches/boost/asio/ssl/stream.hpp              |    758 +
 ext/patches/boost/asio/ssl/stream_base.hpp         |     54 +
 ext/patches/boost/asio/ssl/stream_service.hpp      |     42 +
 ext/patches/boost/asio/ssl/verify_context.hpp      |     75 +
 ext/patches/boost/asio/ssl/verify_mode.hpp         |     65 +
 ext/patches/boost/asio/steady_timer.hpp            |     63 +
 ext/patches/boost/asio/strand.hpp                  |    253 +
 ext/patches/boost/asio/stream_socket_service.hpp   |    378 +
 ext/patches/boost/asio/streambuf.hpp               |     35 +
 ext/patches/boost/asio/system_timer.hpp            |     59 +
 ext/patches/boost/asio/time_traits.hpp             |     90 +
 ext/patches/boost/asio/unyield.hpp                 |     21 +
 ext/patches/boost/asio/use_future.hpp              |     94 +
 ext/patches/boost/asio/version.hpp                 |     23 +
 ext/patches/boost/asio/wait_traits.hpp             |     43 +
 ext/patches/boost/asio/waitable_timer_service.hpp  |    170 +
 ext/patches/boost/asio/windows/basic_handle.hpp    |    283 +
 .../boost/asio/windows/basic_object_handle.hpp     |    180 +
 .../asio/windows/basic_random_access_handle.hpp    |    378 +
 .../boost/asio/windows/basic_stream_handle.hpp     |    361 +
 ext/patches/boost/asio/windows/object_handle.hpp   |     40 +
 .../boost/asio/windows/object_handle_service.hpp   |    179 +
 ext/patches/boost/asio/windows/overlapped_ptr.hpp  |    118 +
 .../boost/asio/windows/random_access_handle.hpp    |     39 +
 .../asio/windows/random_access_handle_service.hpp  |    222 +
 ext/patches/boost/asio/windows/stream_handle.hpp   |     39 +
 .../boost/asio/windows/stream_handle_service.hpp   |    220 +
 ext/patches/boost/asio/write.hpp                   |    620 +
 ext/patches/boost/asio/write_at.hpp                |    672 +
 ext/patches/boost/asio/yield.hpp                   |     23 +
 ext/patches/comet/Comet.sln                        |     81 +
 ext/patches/comet/Comet.vcxproj                    |    206 +
 ext/patches/comet/CometSearch/CometSearch.vcxproj  |    201 +
 .../comet/CometSearch/CometSearchManager.cpp       |   2108 +
 ext/patches/comet/MSToolkit/MSToolkitLite.vcxproj  |    257 +
 ext/patches/comet/MSToolkit/RAWReader.cpp          |    672 +
 ext/patches/google-gflags/libgflags.vcxproj        |    214 +
 .../protobuf/io/zero_copy_stream_impl_lite.cc      |    392 +
 .../protobuf/vsprojects/libprotobuf-lite.vcxproj   |    163 +
 .../protobuf/vsprojects/libprotobuf.vcxproj        |    209 +
 .../protobuf/vsprojects/libprotobuf.vcxproj.old    |   1624 +
 ext/patches/protobuf/vsprojects/libprotoc.vcxproj  |    200 +
 .../protobuf/vsprojects/libprotoc.vcxproj.old      |   1600 +
 ext/patches/protobuf/vsprojects/lite-test.vcxproj  |    253 +
 ext/patches/protobuf/vsprojects/protoc.vcxproj     |    170 +
 ext/patches/protobuf/vsprojects/protoc.vcxproj.old |   1328 +
 .../protobuf/vsprojects/test_plugin.vcxproj        |    197 +
 ext/patches/protobuf/vsprojects/tests.vcxproj      |    446 +
 ext/post_install_pwiz.cmake                        |     62 +
 install_manifest.txt                               |    189 +
 license.txt                                        |     12 +
 make-version-header.cmake                          |     24 +
 src/CMakeLists.txt                                 |    445 +
 src/Makefile                                       |   3111 +
 src/Makefile.mzidentml                             |     44 +
 src/app/AssignConfidenceApplication.cpp            |   1247 +
 src/app/AssignConfidenceApplication.h              |    177 +
 src/app/CascadeSearchApplication.cpp               |    228 +
 src/app/CascadeSearchApplication.h                 |     89 +
 src/app/CometApplication.cpp                       |    546 +
 src/app/CometApplication.h                         |    102 +
 src/app/ComputeQValues.cpp                         |    275 +
 src/app/ComputeQValues.h                           |     98 +
 src/app/ComputeQValuesLegacy.h                     |     46 +
 src/app/CreateDocs.cpp                             |    598 +
 src/app/CreateDocs.h                               |     52 +
 src/app/CruxApplication.cpp                        |    245 +
 src/app/CruxApplication.h                          |    159 +
 src/app/CruxApplicationList.cpp                    |    227 +
 src/app/CruxApplicationList.h                      |    103 +
 src/app/ExtractColumns.cpp                         |    134 +
 src/app/ExtractColumns.h                           |     70 +
 src/app/ExtractRows.cpp                            |    188 +
 src/app/ExtractRows.h                              |     70 +
 src/app/GeneratePeptides.cpp                       |    607 +
 src/app/GeneratePeptides.h                         |    154 +
 src/app/GetMs2Spectrum.cpp                         |    185 +
 src/app/GetMs2Spectrum.h                           |     86 +
 src/app/MakePinApplication.cpp                     |    241 +
 src/app/MakePinApplication.h                       |     88 +
 src/app/PSMConvertApplication.cpp                  |    209 +
 src/app/PSMConvertApplication.h                    |     72 +
 src/app/ParamMedicApplication.cpp                  |    658 +
 src/app/ParamMedicApplication.h                    |    165 +
 src/app/PercolatorAdapter.cpp                      |    556 +
 src/app/PercolatorAdapter.h                        |    140 +
 src/app/PercolatorApplication.cpp                  |    601 +
 src/app/PercolatorApplication.h                    |     91 +
 src/app/Pipeline.cpp                               |    341 +
 src/app/Pipeline.h                                 |     41 +
 src/app/PredictPeptideIons.cpp                     |    226 +
 src/app/PredictPeptideIons.h                       |     78 +
 src/app/PrintProcessedSpectra.cpp                  |    183 +
 src/app/PrintProcessedSpectra.h                    |     93 +
 src/app/PrintVersion.cpp                           |     72 +
 src/app/PrintVersion.h                             |     57 +
 src/app/ReadSpectrumRecordsApplication.cpp         |     91 +
 src/app/ReadSpectrumRecordsApplication.h           |     70 +
 src/app/ReadTideIndex.cpp                          |    153 +
 src/app/ReadTideIndex.h                            |     81 +
 src/app/SortColumn.cpp                             |    369 +
 src/app/SortColumn.h                               |    109 +
 src/app/SpectralCounts.cpp                         |   1148 +
 src/app/SpectralCounts.h                           |    189 +
 src/app/StatColumn.cpp                             |    178 +
 src/app/StatColumn.h                               |     77 +
 src/app/SubtractIndexApplication.cpp               |    288 +
 src/app/SubtractIndexApplication.h                 |     88 +
 src/app/TideIndexApplication.cpp                   |    938 +
 src/app/TideIndexApplication.h                     |    245 +
 src/app/TideMatchSet.cpp                           |    647 +
 src/app/TideMatchSet.h                             |    221 +
 src/app/TideSearchApplication.cpp                  |   1409 +
 src/app/TideSearchApplication.h                    |    278 +
 src/app/bullseye/CKronik2.cpp                      |    797 +
 src/app/bullseye/CKronik2.h                        |    340 +
 src/app/bullseye/CMakeLists.txt                    |     48 +
 src/app/bullseye/CruxBullseyeApplication.cpp       |    263 +
 src/app/bullseye/CruxBullseyeApplication.h         |     85 +
 src/app/bullseye/Makefile                          |    288 +
 src/app/bullseye/Makefile.bullseye                 |     18 +
 src/app/bullseye/bullseye.cpp                      |    465 +
 src/app/bullseye/cmake_install.cmake               |     34 +
 src/app/bullseye/libbullseye.a                     |    Bin 0 -> 156158 bytes
 src/app/hardklor/CAveragine.cpp                    |    306 +
 src/app/hardklor/CAveragine.h                      |    101 +
 src/app/hardklor/CHardklor.cpp                     |   2280 +
 src/app/hardklor/CHardklor.h                       |    153 +
 src/app/hardklor/CHardklor2.cpp                    |   1484 +
 src/app/hardklor/CHardklor2.h                      |    119 +
 src/app/hardklor/CHardklorParser.cpp               |    547 +
 src/app/hardklor/CHardklorParser.h                 |     42 +
 src/app/hardklor/CHardklorProtein.cpp              |     73 +
 src/app/hardklor/CHardklorProtein.h                |     42 +
 src/app/hardklor/CHardklorSetting.cpp              |    198 +
 src/app/hardklor/CHardklorSetting.h                |     90 +
 src/app/hardklor/CHardklorVariant.cpp              |    100 +
 src/app/hardklor/CHardklorVariant.h                |     43 +
 src/app/hardklor/CMakeLists.txt                    |     60 +
 src/app/hardklor/CMercury8.cpp                     |   1112 +
 src/app/hardklor/CMercury8.h                       |     77 +
 src/app/hardklor/CModelLibrary.cpp                 |    119 +
 src/app/hardklor/CModelLibrary.h                   |     40 +
 src/app/hardklor/CNoiseReduction.cpp               |   1626 +
 src/app/hardklor/CNoiseReduction.h                 |     73 +
 src/app/hardklor/CPeriodicTable.cpp                |     94 +
 src/app/hardklor/CPeriodicTable.h                  |     40 +
 src/app/hardklor/CSettings.cpp                     |    169 +
 src/app/hardklor/CSettings.h                       |     56 +
 src/app/hardklor/CSpecAnalyze.cpp                  |    858 +
 src/app/hardklor/CSpecAnalyze.h                    |     77 +
 src/app/hardklor/CSplitSpectrum.cpp                |    812 +
 src/app/hardklor/CSplitSpectrum.h                  |     56 +
 src/app/hardklor/CruxHardklorApplication.cpp       |    308 +
 src/app/hardklor/CruxHardklorApplication.h         |     88 +
 src/app/hardklor/FFT-HK.cpp                        |    227 +
 src/app/hardklor/FFT-HK.h                          |     20 +
 src/app/hardklor/FFT.cpp                           |    121 +
 src/app/hardklor/FFT.h                             |     20 +
 src/app/hardklor/Hardklor.dat                      |    109 +
 src/app/hardklor/Hardklor2008.aps                  |    Bin 0 -> 390820 bytes
 src/app/hardklor/Hardklor2008.rc                   |     55 +
 src/app/hardklor/Hardklor2008.vcproj               |    370 +
 src/app/hardklor/HardklorTypes.h                   |    140 +
 src/app/hardklor/Makefile                          |    720 +
 src/app/hardklor/Makefile.hardklor                 |     94 +
 src/app/hardklor/README.txt                        |     53 +
 src/app/hardklor/S2N.cpp                           |    340 +
 src/app/hardklor/S2N.h                             |     16 +
 src/app/hardklor/Smooth.cpp                        |    179 +
 src/app/hardklor/Smooth.h                          |     15 +
 src/app/hardklor/SpecAnalyzeSupport.cpp            |    266 +
 src/app/hardklor/SpecAnalyzeSupport.h              |    136 +
 src/app/hardklor/cmake_install.cmake               |     34 +
 src/app/hardklor/libhardklor.a                     |    Bin 0 -> 629654 bytes
 src/app/hardklor/mercury.h                         |     27 +
 src/app/hardklor/resource.h                        |     17 +
 src/app/hardklor/resource1.h                       |     16 +
 src/app/q-value.cpp                                |     31 +
 src/app/q-value.h                                  |     56 +
 src/app/qranker-barista/Barista.cpp                |   2895 +
 src/app/qranker-barista/Barista.h                  |    200 +
 src/app/qranker-barista/BipartiteGraph.cpp         |    106 +
 src/app/qranker-barista/BipartiteGraph.h           |     38 +
 src/app/qranker-barista/CMakeLists.txt             |     53 +
 src/app/qranker-barista/CruxParser.cpp             |    177 +
 src/app/qranker-barista/CruxParser.h               |     78 +
 src/app/qranker-barista/DataSetCrux.cpp            |   1369 +
 src/app/qranker-barista/DataSetCrux.h              |    141 +
 src/app/qranker-barista/Makefile                   |    558 +
 src/app/qranker-barista/NeuralNet.cpp              |    809 +
 src/app/qranker-barista/NeuralNet.h                |    152 +
 src/app/qranker-barista/PSMScores.cpp              |    225 +
 src/app/qranker-barista/PSMScores.h                |     44 +
 src/app/qranker-barista/PepRanker.cpp              |   1431 +
 src/app/qranker-barista/PepRanker.h                |    149 +
 src/app/qranker-barista/PepScores.cpp              |    226 +
 src/app/qranker-barista/PepScores.h                |     45 +
 src/app/qranker-barista/ProtScores.cpp             |    917 +
 src/app/qranker-barista/ProtScores.h               |     78 +
 src/app/qranker-barista/QRanker.cpp                |   1281 +
 src/app/qranker-barista/QRanker.h                  |    143 +
 src/app/qranker-barista/SQTParser.cpp              |   2156 +
 src/app/qranker-barista/SQTParser.h                |    250 +
 src/app/qranker-barista/SpecFeatures.cpp           |    499 +
 src/app/qranker-barista/SpecFeatures.h             |     97 +
 src/app/qranker-barista/TabDelimParser.cpp         |    777 +
 src/app/qranker-barista/TabDelimParser.h           |    105 +
 src/app/qranker-barista/barista.html               |    215 +
 src/app/qranker-barista/cmake_install.cmake        |     34 +
 src/app/qranker-barista/libbarista.a               |    Bin 0 -> 1298230 bytes
 src/app/tide/CMakeLists.txt                        |    126 +
 src/app/tide/Makefile                              |    720 +
 src/app/tide/abspath.cc                            |     12 +
 src/app/tide/abspath.h                             |      8 +
 src/app/tide/active_peptide_queue.cc               |    347 +
 src/app/tide/active_peptide_queue.h                |    158 +
 src/app/tide/cmake_install.cmake                   |     34 +
 src/app/tide/compiler.h                            |    208 +
 src/app/tide/crux_sp_spectrum.cc                   |    283 +
 src/app/tide/crux_sp_spectrum.h                    |    149 +
 src/app/tide/fifo_alloc.cc                         |    172 +
 src/app/tide/fifo_alloc.h                          |    152 +
 src/app/tide/fixed_cap_array.h                     |     80 +
 src/app/tide/index_settings.cc                     |     75 +
 src/app/tide/libtide-support.a                     |    Bin 0 -> 810966 bytes
 src/app/tide/make_peptides.cc                      |    765 +
 src/app/tide/mass_constants.cc                     |    272 +
 src/app/tide/mass_constants.h                      |    118 +
 src/app/tide/max_mz.cc                             |      9 +
 src/app/tide/max_mz.h                              |     75 +
 src/app/tide/mman.c                                |    180 +
 src/app/tide/mman.h                                |     55 +
 src/app/tide/mod_coder.h                           |     38 +
 src/app/tide/modifications.h                       |    352 +
 src/app/tide/peptide.cc                            |    281 +
 src/app/tide/peptide.h                             |    244 +
 src/app/tide/peptide_mods3.cc                      |    498 +
 src/app/tide/peptide_peaks.cc                      |     97 +
 src/app/tide/protobuf/header.proto                 |     81 +
 src/app/tide/protobuf/peptides.proto               |     50 +
 src/app/tide/protobuf/raw_proteins.proto           |     10 +
 src/app/tide/protobuf/results.proto                |     30 +
 src/app/tide/protobuf/spectrum.proto               |     25 +
 src/app/tide/protobuf/view_ms1_cmds.proto          |     12 +
 src/app/tide/protoobj/header.pb.cc                 |   3408 +
 src/app/tide/protoobj/header.pb.h                  |   2404 +
 src/app/tide/protoobj/header_pb2.py                |    570 +
 src/app/tide/protoobj/peptides.pb.cc               |   1389 +
 src/app/tide/protoobj/peptides.pb.h                |    843 +
 src/app/tide/protoobj/peptides_pb2.py              |    242 +
 src/app/tide/protoobj/raw_proteins.pb.cc           |    467 +
 src/app/tide/protoobj/raw_proteins.pb.h            |    367 +
 src/app/tide/protoobj/raw_proteins_pb2.py          |     80 +
 src/app/tide/protoobj/results.pb.cc                |   1077 +
 src/app/tide/protoobj/results.pb.h                 |    669 +
 src/app/tide/protoobj/results_pb2.py               |    184 +
 src/app/tide/protoobj/spectrum.pb.cc               |    675 +
 src/app/tide/protoobj/spectrum.pb.h                |    410 +
 src/app/tide/protoobj/spectrum_pb2.py              |    114 +
 src/app/tide/records.h                             |    249 +
 src/app/tide/records_to_vector-inl.h               |     49 +
 src/app/tide/sp_scorer.cc                          |    123 +
 src/app/tide/sp_scorer.h                           |    107 +
 src/app/tide/spectrum_collection.cc                |    218 +
 src/app/tide/spectrum_collection.h                 |    122 +
 src/app/tide/spectrum_preprocess.h                 |    203 +
 src/app/tide/spectrum_preprocess2.cc               |    563 +
 src/app/tide/theoretical_peak_pair.h               |     69 +
 src/app/tide/theoretical_peak_set.h                |    790 +
 src/app/xlink/AccurateMonoMass.cpp                 |    157 +
 src/app/xlink/CMakeLists.txt                       |     61 +
 src/app/xlink/LinearPeptide.cpp                    |    245 +
 src/app/xlink/LinearPeptide.h                      |    145 +
 src/app/xlink/LinkedIonSeries.cpp                  |    294 +
 src/app/xlink/LinkedIonSeries.h                    |    139 +
 src/app/xlink/LinkedPeptide.cpp                    |    459 +
 src/app/xlink/LinkedPeptide.h                      |    255 +
 src/app/xlink/Makefile                             |    909 +
 src/app/xlink/README                               |     62 +
 src/app/xlink/SearchForXLinks.cpp                  |    285 +
 src/app/xlink/SearchForXLinks.h                    |     93 +
 src/app/xlink/SelfLoopPeptide.cpp                  |    351 +
 src/app/xlink/SelfLoopPeptide.h                    |    148 +
 src/app/xlink/Weibull.cpp                          |    211 +
 src/app/xlink/Weibull.h                            |     42 +
 src/app/xlink/XHHC_Peptide.cpp                     |    238 +
 src/app/xlink/XHHC_Peptide.h                       |    135 +
 src/app/xlink/XLink.cpp                            |    221 +
 src/app/xlink/XLink.h                              |    107 +
 src/app/xlink/XLinkBondMap.cpp                     |    176 +
 src/app/xlink/XLinkBondMap.h                       |    114 +
 src/app/xlink/XLinkDatabase.cpp                    |    592 +
 src/app/xlink/XLinkDatabase.h                      |    144 +
 src/app/xlink/XLinkIonSeriesCache.cpp              |    141 +
 src/app/xlink/XLinkIonSeriesCache.h                |     29 +
 src/app/xlink/XLinkMatch.cpp                       |    398 +
 src/app/xlink/XLinkMatch.h                         |    152 +
 src/app/xlink/XLinkMatchCollection.cpp             |    444 +
 src/app/xlink/XLinkMatchCollection.h               |    169 +
 src/app/xlink/XLinkPeptide.cpp                     |    726 +
 src/app/xlink/XLinkPeptide.h                       |    252 +
 src/app/xlink/XLinkScorer.cpp                      |    209 +
 src/app/xlink/XLinkScorer.h                        |     87 +
 src/app/xlink/XLinkSite.cpp                        |    175 +
 src/app/xlink/XLinkSite.h                          |     79 +
 src/app/xlink/XLinkablePeptide.cpp                 |    742 +
 src/app/xlink/XLinkablePeptide.h                   |    284 +
 src/app/xlink/XLinkablePeptideIterator.cpp         |     83 +
 src/app/xlink/XLinkablePeptideIterator.h           |     76 +
 src/app/xlink/XLinkablePeptideIteratorTopN.cpp     |    169 +
 src/app/xlink/XLinkablePeptideIteratorTopN.h       |     83 +
 src/app/xlink/cmake_install.cmake                  |     34 +
 src/app/xlink/libxlink.a                           |    Bin 0 -> 1224536 bytes
 src/app/xlink/spectacle.pl                         |    331 +
 src/app/xlink/xhhc.cpp                             |    405 +
 src/app/xlink/xhhc.h                               |    111 +
 src/app/xlink/xhhc_all.ms2                         | 291285 ++++++++++++++++++
 src/app/xlink/xhhc_predict_peptide_ions.cpp        |    121 +
 src/app/xlink/xhhc_score_peptide_spectrum.cpp      |    417 +
 src/app/xlink/xhhc_score_peptide_spectrum.h        |     29 +
 src/app/xlink/xhhc_scorer.cpp                      |    441 +
 src/app/xlink/xhhc_scorer.h                        |    146 +
 src/app/xlink/xhhc_search.cpp                      |    580 +
 src/app/xlink/xlink_assign_ions.cpp                |    286 +
 src/app/xlink/xlink_assign_ions.h                  |     31 +
 src/app/xlink/xlink_compute_qvalues.cpp            |    282 +
 src/app/xlink/xlink_compute_qvalues.h              |      8 +
 src/app/xlink/xlink_predict_peptide_ions.cpp       |    381 +
 src/app/xlink/xlink_search.cpp                     |    403 +
 src/app/xlink/xlink_search.h                       |     15 +
 src/cmake_install.cmake                            |     62 +
 src/crux                                           |    Bin 0 -> 22906480 bytes
 src/crux-main.cpp                                  |    114 +
 src/crux-main.h                                    |     17 +
 src/io/DelimitedFile.cpp                           |    825 +
 src/io/DelimitedFile.h                             |    474 +
 src/io/DelimitedFileReader.cpp                     |    504 +
 src/io/DelimitedFileReader.h                       |    293 +
 src/io/DelimitedFileWriter.cpp                     |    168 +
 src/io/DelimitedFileWriter.h                       |    128 +
 src/io/HTMLWriter.cpp                              |     14 +
 src/io/HTMLWriter.h                                |     18 +
 src/io/LineFileReader.cpp                          |    156 +
 src/io/LineFileReader.h                            |     97 +
 src/io/MSToolkitSpectrumCollection.cpp             |    150 +
 src/io/MSToolkitSpectrumCollection.h               |     63 +
 src/io/MatchCollectionParser.cpp                   |    211 +
 src/io/MatchCollectionParser.h                     |     70 +
 src/io/MatchColumns.cpp                            |    138 +
 src/io/MatchColumns.h                              |    129 +
 src/io/MatchFileReader.cpp                         |    403 +
 src/io/MatchFileReader.h                           |    146 +
 src/io/MatchFileWriter.cpp                         |    432 +
 src/io/MatchFileWriter.h                           |    110 +
 src/io/MzIdentMLReader.cpp                         |    361 +
 src/io/MzIdentMLReader.h                           |    107 +
 src/io/MzIdentMLWriter.cpp                         |    829 +
 src/io/MzIdentMLWriter.h                           |    267 +
 src/io/OutputFiles.cpp                             |    767 +
 src/io/OutputFiles.h                               |    158 +
 src/io/PMCDelimitedFileWriter.cpp                  |    709 +
 src/io/PMCDelimitedFileWriter.h                    |    213 +
 src/io/PMCPepXMLWriter.cpp                         |    142 +
 src/io/PMCPepXMLWriter.h                           |     65 +
 src/io/PMCSQTWriter.cpp                            |    160 +
 src/io/PMCSQTWriter.h                              |     63 +
 src/io/PSMReader.cpp                               |     29 +
 src/io/PSMReader.h                                 |     40 +
 src/io/PSMWriter.cpp                               |     11 +
 src/io/PSMWriter.h                                 |     36 +
 src/io/PWIZSpectrumCollection.cpp                  |    274 +
 src/io/PWIZSpectrumCollection.h                    |     82 +
 src/io/PepXMLReader.cpp                            |    606 +
 src/io/PepXMLReader.h                              |    198 +
 src/io/PepXMLWriter.cpp                            |    463 +
 src/io/PepXMLWriter.h                              |    139 +
 src/io/PinWriter.cpp                               |    295 +
 src/io/PinWriter.h                                 |     90 +
 src/io/SQTReader.cpp                               |    407 +
 src/io/SQTReader.h                                 |    126 +
 src/io/SQTWriter.cpp                               |    239 +
 src/io/SQTWriter.h                                 |     59 +
 src/io/SpectrumCollection.cpp                      |    260 +
 src/io/SpectrumCollection.h                        |    143 +
 src/io/SpectrumCollectionFactory.cpp               |     46 +
 src/io/SpectrumCollectionFactory.h                 |     30 +
 src/io/SpectrumRecordWriter.cpp                    |    195 +
 src/io/SpectrumRecordWriter.h                      |     64 +
 src/io/carp.cpp                                    |    138 +
 src/io/carp.h                                      |    153 +
 src/libcrux-support.a                              |    Bin 0 -> 6144426 bytes
 src/model/AbstractMatch.cpp                        |    142 +
 src/model/AbstractMatch.h                          |    104 +
 src/model/Database.cpp                             |    836 +
 src/model/Database.h                               |    347 +
 src/model/DatabasePeptideIterator.cpp              |    342 +
 src/model/DatabasePeptideIterator.h                |     68 +
 src/model/DatabaseProteinIterator.cpp              |     81 +
 src/model/DatabaseProteinIterator.h                |     64 +
 src/model/FilteredSpectrumChargeIterator.cpp       |    145 +
 src/model/FilteredSpectrumChargeIterator.h         |     81 +
 src/model/GeneratePeptidesIterator.cpp             |     63 +
 src/model/GeneratePeptidesIterator.h               |     41 +
 src/model/Ion.cpp                                  |   1132 +
 src/model/Ion.h                                    |    473 +
 src/model/IonConstraint.cpp                        |    473 +
 src/model/IonConstraint.h                          |    214 +
 src/model/IonFilteredIterator.cpp                  |    108 +
 src/model/IonFilteredIterator.h                    |     70 +
 src/model/IonSeries.cpp                            |   1231 +
 src/model/IonSeries.h                              |    354 +
 src/model/Match.cpp                                |   1110 +
 src/model/Match.h                                  |    459 +
 src/model/MatchCollection.cpp                      |   1407 +
 src/model/MatchCollection.h                        |    387 +
 src/model/MatchCollectionIterator.cpp              |      0
 src/model/MatchCollectionIterator.h                |      0
 src/model/MatchIterator.cpp                        |    133 +
 src/model/MatchIterator.h                          |     83 +
 src/model/Modification.cpp                         |    572 +
 src/model/Modification.h                           |    131 +
 src/model/ModifiedPeptidesIterator.cpp             |    238 +
 src/model/ModifiedPeptidesIterator.h               |     75 +
 src/model/Peak.cpp                                 |    136 +
 src/model/Peak.h                                   |    109 +
 src/model/Peptide.cpp                              |   1275 +
 src/model/Peptide.h                                |    490 +
 src/model/PeptideConstraint.cpp                    |    317 +
 src/model/PeptideConstraint.h                      |    200 +
 src/model/PeptideIterator.h                        |     64 +
 src/model/PeptideMatch.cpp                         |    135 +
 src/model/PeptideMatch.h                           |    102 +
 src/model/PeptideSrc.cpp                           |    514 +
 src/model/PeptideSrc.h                             |    189 +
 src/model/PostProcessProtein.cpp                   |    142 +
 src/model/PostProcessProtein.h                     |    105 +
 src/model/Protein.cpp                              |    940 +
 src/model/Protein.h                                |    347 +
 src/model/ProteinIndex.cpp                         |    174 +
 src/model/ProteinIndex.h                           |     75 +
 src/model/ProteinIndexIterator.cpp                 |    128 +
 src/model/ProteinIndexIterator.h                   |     65 +
 src/model/ProteinMatch.cpp                         |     93 +
 src/model/ProteinMatch.h                           |     84 +
 src/model/ProteinMatchCollection.cpp               |    279 +
 src/model/ProteinMatchCollection.h                 |    161 +
 src/model/ProteinPeptideIterator.cpp               |    525 +
 src/model/ProteinPeptideIterator.h                 |    180 +
 src/model/Scorer.cpp                               |   1682 +
 src/model/Scorer.h                                 |    504 +
 src/model/Spectrum.cpp                             |    971 +
 src/model/Spectrum.h                               |    375 +
 src/model/SpectrumMatch.cpp                        |    103 +
 src/model/SpectrumMatch.h                          |    101 +
 src/model/SpectrumZState.cpp                       |    167 +
 src/model/SpectrumZState.h                         |    134 +
 src/model/match_objects.h                          |     36 +
 src/model/objects.h                                |    811 +
 src/parameter.cpp                                  |    947 +
 src/parameter.h                                    |    266 +
 src/util/Alphabet.cpp                              |     56 +
 src/util/Alphabet.h                                |     31 +
 src/util/AminoAcidUtil.cpp                         |    107 +
 src/util/AminoAcidUtil.h                           |     18 +
 src/util/ArgParser.cpp                             |    127 +
 src/util/ArgParser.h                               |     47 +
 src/util/CacheableMass.cpp                         |     85 +
 src/util/CacheableMass.h                           |     68 +
 src/util/CarpStreamBuf.cpp                         |    101 +
 src/util/CarpStreamBuf.h                           |     72 +
 src/util/FileUtils.cpp                             |     86 +
 src/util/FileUtils.h                               |     28 +
 src/util/GlobalParams.cpp                          |    197 +
 src/util/GlobalParams.h                            |     97 +
 src/util/MathUtil.cpp                              |     20 +
 src/util/MathUtil.h                                |     15 +
 src/util/Params.cpp                                |   2849 +
 src/util/Params.h                                  |    399 +
 src/util/StringUtils.cpp                           |    139 +
 src/util/StringUtils.h                             |    167 +
 src/util/WinCrux.cpp                               |    193 +
 src/util/WinCrux.h                                 |     65 +
 src/util/crux-utils.cpp                            |   1669 +
 src/util/crux-utils.h                              |    483 +
 src/util/linked_list.cpp                           |    370 +
 src/util/linked_list.h                             |    145 +
 src/util/mass.cpp                                  |    307 +
 src/util/mass.h                                    |    132 +
 src/util/modifications.cpp                         |    993 +
 src/util/modifications.h                           |    419 +
 src/util/peptide_modifications.cpp                 |    814 +
 src/util/peptide_modifications.h                   |    160 +
 src/util/utils.cpp                                 |    469 +
 src/util/utils.h                                   |    247 +
 src/util/windirent.h                               |    369 +
 1273 files changed, 685777 insertions(+), 79 deletions(-)

diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..72c573e
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,5 @@
+Crux was developed in the Department of Genome Sciences at the
+University of Washington under the leadership of Dr. William S. Noble
+and guidance of Dr. Michael J. MacCoss.  For a detailed list of Crux
+contributors, see doc/user/contributors.html.
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..4c43f82
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,163 @@
+project(crux)
+cmake_minimum_required(VERSION 2.8.4)
+cmake_policy(VERSION 2.8.4)
+
+set (CRUX_VERSION_MAJOR "3")
+set (CRUX_VERSION_MINOR "1")
+set (CRUX_VERSION ${CRUX_VERSION_MAJOR}.${CRUX_VERSION_MINOR})
+
+message(
+  "-- Creating build files for Crux ${CRUX_VERSION} for system ${CMAKE_SYSTEM} " 
+  "(short name ${CMAKE_SYSTEM_NAME})"
+)
+
+add_subdirectory(doc/user)
+add_subdirectory(ext)
+add_subdirectory(src)
+
+# Only process smoke tests directory if it exiists
+if (EXISTS "${CMAKE_SOURCE_DIR}/test/smoke-tests/runall")
+  add_subdirectory(test/smoke-tests)
+endif (EXISTS "${CMAKE_SOURCE_DIR}/test/smoke-tests/runall")
+
+# Only process performance tests directory if it exiists
+if (EXISTS "${CMAKE_SOURCE_DIR}/test/performance-tests/runall")
+  add_subdirectory(test/performance-tests)
+endif (EXISTS "${CMAKE_SOURCE_DIR}/test/performance-tests/runall")
+
+install(FILES license.txt DESTINATION .)
+
+add_custom_target(
+  deep-clean
+  COMMAND ${CMAKE_COMMAND} --build . --target clean
+  COMMAND ${CMAKE_COMMAND} -E remove CMakeCache.txt
+  COMMAND ${CMAKE_COMMAND} -E remove_directory ext/build
+  COMMAND ${CMAKE_COMMAND} -E remove_directory ext/downloads
+  COMMAND ${CMAKE_COMMAND} -E remove_directory ext/include/CometSearch
+  COMMAND ${CMAKE_COMMAND} -E remove_directory ext/include/MSToolkit
+  COMMAND ${CMAKE_COMMAND} -E remove_directory ext/include/boost
+  COMMAND ${CMAKE_COMMAND} -E remove_directory ext/include/gflags-2.1.2
+  COMMAND ${CMAKE_COMMAND} -E remove_directory ext/include/google
+  COMMAND ${CMAKE_COMMAND} -E remove_directory ext/include/pwiz
+  COMMAND ${CMAKE_COMMAND} -E remove_directory ext/include/xercesc
+  COMMAND ${CMAKE_COMMAND} -E remove_directory ext/include/xsd
+  COMMAND ${CMAKE_COMMAND} -E remove_directory ext/lib/pkgconfig
+  COMMAND ${CMAKE_COMMAND} -E remove ext/lib/*.a
+  COMMAND ${CMAKE_COMMAND} -E remove ext/lib/*.la
+  COMMAND ${CMAKE_COMMAND} -E remove ext/lib/*.lib
+  COMMAND ${CMAKE_COMMAND} -E remove_directory ext/share
+  COMMENT "Cleaning project tree."
+  COMMENT "Deleting all files for external tools."
+)
+
+add_custom_target(
+  externals-only 
+  COMMAND ${CMAKE_MAKE_PROGRAM}
+  WORKING_DIRECTORY ext
+  COMMENT "Building only external dependendcies."
+)
+
+add_custom_target(
+  no-externals 
+  COMMAND ${CMAKE_MAKE_PROGRAM} crux  xlink-score-spectrum xlink-assign-ions 
+  WORKING_DIRECTORY src
+  COMMENT "Not building external dependendcies."
+)
+
+# a custom target for obtaining the SVN revision number
+add_custom_target(crux_version ALL DEPENDS crux_version_header )
+
+# creates crux_version.h using cmake script
+add_custom_command(
+    OUTPUT crux_version_header 
+    ${CMAKE_CURRENT_BINARY_DIR}/crux_version.h
+    COMMAND 
+      ${CMAKE_COMMAND} 
+        -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
+        -DCRUX_VERSION=${CRUX_VERSION}
+        -P ${CMAKE_CURRENT_SOURCE_DIR}/make-version-header.cmake
+)
+
+add_dependencies(barista comet)
+add_dependencies(bullseye hardklor)
+add_dependencies(comet ProteoWizard)
+add_dependencies(crux barista)
+add_dependencies(crux bullseye)
+add_dependencies(crux crux-support)
+add_dependencies(crux hardklor)
+add_dependencies(crux percolator)
+add_dependencies(crux tide-support)
+add_dependencies(crux xlink)
+add_dependencies(crux-support crux_version)
+add_dependencies(crux-support percolator)
+add_dependencies(hardklor comet)
+add_dependencies(percolator comet)
+add_dependencies(tide-support comet)
+add_dependencies(tide-support protobuf-2.5.0)
+add_dependencies(tide-support gflags-2.1.2)
+add_dependencies(xlink comet)
+add_dependencies(xlink percolator)
+add_dependencies(xlink ProteoWizard)
+add_dependencies(create-docs crux)
+
+# build a CPack driven installer package
+include (InstallRequiredSystemLibraries)
+
+if (WIN32 AND NOT CYGWIN)
+  # If windows build we need to select 32/64 bit platform
+  if (CMAKE_GENERATOR MATCHES "^.*Win64$")
+    SET(BUILD_PROCESSOR "AMD64")
+  else (CMAKE_GENERATOR MATCHES "^.*Win64$")
+    SET(BUILD_PROCESSOR "i386")
+  endif (CMAKE_GENERATOR MATCHES "^.*Win64$")
+else (WIN32 AND NOT CYGWIN)
+  SET(BUILD_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR})
+endif (WIN32 AND NOT CYGWIN)
+
+set (CPACK_GENERATOR ZIP)
+set (CPACK_SOURCE_GENERATOR TGZ)
+set (CPACK_PACKAGE_VERSION_MAJOR ${CRUX_VERSION_MAJOR})
+set (CPACK_PACKAGE_VERSION_MINOR ${CRUX_VERSION_MINOR})
+set (CRUX_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR})
+set(CPACK_PACKAGE_FILE_NAME
+  ${CMAKE_PROJECT_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CMAKE_SYSTEM_NAME}.${BUILD_PROCESSOR})
+set(CPACK_SOURCE_PACKAGE_FILE_NAME
+  "${CMAKE_PROJECT_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.Source")
+set (
+ CPACK_SOURCE_IGNORE_FILES 
+   /\\\\..*$;
+   \\\\./_CPack_Packages/;
+   /benchmark/;
+   /bin/;
+   /results/;
+   /doc/developer/;
+   /doc/guispec/;
+   /doc/mods/;
+   /doc/user/download/;
+   /doc/user/open_source_download/;
+   /test/;
+   /src/CruxGui/;
+   /ext/bin/;
+   /ext/build/;
+   /ext/downloads/;
+   /ext/include/;
+   /ext/lib/;
+   /ext/share/;
+   /src/python/;
+   /CMakeCache.txt$;
+   /CMakeFiles/;
+   \\\\.gz$;
+   \\\\.swp$;
+   \\\\.zip$;
+   ${CPACK_SOURCE_IGNORE_FILES}
+)
+
+# Generate checksum files for binary and source packages.
+add_custom_target(
+  checksum
+ 	COMMAND ${CMAKE_COMMAND} -E  md5sum ${CPACK_PACKAGE_FILE_NAME}.zip > ${CPACK_PACKAGE_FILE_NAME}.zip.md5sum.txt
+ 	COMMAND ${CMAKE_COMMAND} -E  md5sum ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz > ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz.md5sum.txt
+  COMMENT "Creating checksum files."
+)
+
+include (CPack)
diff --git a/COPYRIGHT b/COPYRIGHT
new file mode 100644
index 0000000..6f01e99
--- /dev/null
+++ b/COPYRIGHT
@@ -0,0 +1 @@
+Crux is Copyright 2007-2016 University of Washington
diff --git a/CPackConfig.cmake b/CPackConfig.cmake
new file mode 100644
index 0000000..63d9364
--- /dev/null
+++ b/CPackConfig.cmake
@@ -0,0 +1,68 @@
+# This file will be configured to contain variables for CPack. These variables
+# should be set in the CMake list file of the project before CPack module is
+# included. The list of available CPACK_xxx variables and their associated
+# documentation may be obtained using
+#  cpack --help-variable-list
+#
+# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME)
+# and some are specific to a generator
+# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables
+# usually begin with CPACK_<GENNAME>_xxxx.
+
+
+SET(CPACK_BINARY_BUNDLE "")
+SET(CPACK_BINARY_CYGWIN "")
+SET(CPACK_BINARY_DEB "")
+SET(CPACK_BINARY_DRAGNDROP "")
+SET(CPACK_BINARY_NSIS "")
+SET(CPACK_BINARY_OSXX11 "")
+SET(CPACK_BINARY_PACKAGEMAKER "")
+SET(CPACK_BINARY_RPM "")
+SET(CPACK_BINARY_STGZ "")
+SET(CPACK_BINARY_TBZ2 "")
+SET(CPACK_BINARY_TGZ "")
+SET(CPACK_BINARY_TZ "")
+SET(CPACK_BINARY_WIX "")
+SET(CPACK_BINARY_ZIP "")
+SET(CPACK_CMAKE_GENERATOR "Unix Makefiles")
+SET(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE")
+SET(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE")
+SET(CPACK_GENERATOR "ZIP")
+SET(CPACK_INSTALL_CMAKE_PROJECTS "/data/TeamCity/buildAgent/work/779d99b0241b2175;crux;ALL;/")
+SET(CPACK_INSTALL_PREFIX "/usr/local")
+SET(CPACK_MODULE_PATH "")
+SET(CPACK_NSIS_DISPLAY_NAME "crux 3.1.1")
+SET(CPACK_NSIS_INSTALLER_ICON_CODE "")
+SET(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "")
+SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES")
+SET(CPACK_NSIS_PACKAGE_NAME "crux 3.1.1")
+SET(CPACK_OUTPUT_CONFIG_FILE "/data/TeamCity/buildAgent/work/779d99b0241b2175/CPackConfig.cmake")
+SET(CPACK_PACKAGE_DEFAULT_LOCATION "/")
+SET(CPACK_PACKAGE_DESCRIPTION_FILE "/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/share/cmake-2.8/Templates/CPack.GenericDescription.txt")
+SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "crux built using CMake")
+SET(CPACK_PACKAGE_FILE_NAME "crux-3.1.Linux.x86_64")
+SET(CPACK_PACKAGE_INSTALL_DIRECTORY "crux 3.1.1")
+SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "crux 3.1.1")
+SET(CPACK_PACKAGE_NAME "crux")
+SET(CPACK_PACKAGE_RELOCATABLE "true")
+SET(CPACK_PACKAGE_VENDOR "Humanity")
+SET(CPACK_PACKAGE_VERSION "3.1.1")
+SET(CPACK_PACKAGE_VERSION_MAJOR "3")
+SET(CPACK_PACKAGE_VERSION_MINOR "1")
+SET(CPACK_PACKAGE_VERSION_PATCH "1")
+SET(CPACK_RESOURCE_FILE_LICENSE "/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/share/cmake-2.8/Templates/CPack.GenericLicense.txt")
+SET(CPACK_RESOURCE_FILE_README "/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/share/cmake-2.8/Templates/CPack.GenericDescription.txt")
+SET(CPACK_RESOURCE_FILE_WELCOME "/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/share/cmake-2.8/Templates/CPack.GenericWelcome.txt")
+SET(CPACK_SET_DESTDIR "OFF")
+SET(CPACK_SOURCE_CYGWIN "")
+SET(CPACK_SOURCE_GENERATOR "TGZ")
+SET(CPACK_SOURCE_IGNORE_FILES "/\\..*$;\\./_CPack_Packages/;/benchmark/;/bin/;/results/;/doc/developer/;/doc/guispec/;/doc/mods/;/doc/user/download/;/doc/user/open_source_download/;/test/;/src/CruxGui/;/ext/bin/;/ext/build/;/ext/downloads/;/ext/include/;/ext/lib/;/ext/share/;/src/python/;/CMakeCache.txt$;/CMakeFiles/;\\.gz$;\\.swp$;\\.zip$")
+SET(CPACK_SOURCE_OUTPUT_CONFIG_FILE "/data/TeamCity/buildAgent/work/779d99b0241b2175/CPackSourceConfig.cmake")
+SET(CPACK_SOURCE_PACKAGE_FILE_NAME "crux-3.1.Source")
+SET(CPACK_SOURCE_TBZ2 "")
+SET(CPACK_SOURCE_TGZ "")
+SET(CPACK_SOURCE_TZ "")
+SET(CPACK_SOURCE_ZIP "")
+SET(CPACK_SYSTEM_NAME "Linux")
+SET(CPACK_TOPLEVEL_TAG "Linux")
+SET(CPACK_WIX_SIZEOF_VOID_P "8")
diff --git a/CPackSourceConfig.cmake b/CPackSourceConfig.cmake
new file mode 100644
index 0000000..6e99ba6
--- /dev/null
+++ b/CPackSourceConfig.cmake
@@ -0,0 +1,73 @@
+# This file will be configured to contain variables for CPack. These variables
+# should be set in the CMake list file of the project before CPack module is
+# included. The list of available CPACK_xxx variables and their associated
+# documentation may be obtained using
+#  cpack --help-variable-list
+#
+# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME)
+# and some are specific to a generator
+# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables
+# usually begin with CPACK_<GENNAME>_xxxx.
+
+
+SET(CPACK_BINARY_BUNDLE "")
+SET(CPACK_BINARY_CYGWIN "")
+SET(CPACK_BINARY_DEB "")
+SET(CPACK_BINARY_DRAGNDROP "")
+SET(CPACK_BINARY_NSIS "")
+SET(CPACK_BINARY_OSXX11 "")
+SET(CPACK_BINARY_PACKAGEMAKER "")
+SET(CPACK_BINARY_RPM "")
+SET(CPACK_BINARY_STGZ "")
+SET(CPACK_BINARY_TBZ2 "")
+SET(CPACK_BINARY_TGZ "")
+SET(CPACK_BINARY_TZ "")
+SET(CPACK_BINARY_WIX "")
+SET(CPACK_BINARY_ZIP "")
+SET(CPACK_CMAKE_GENERATOR "Unix Makefiles")
+SET(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE")
+SET(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE")
+SET(CPACK_GENERATOR "TGZ")
+SET(CPACK_IGNORE_FILES "/\\..*$;\\./_CPack_Packages/;/benchmark/;/bin/;/results/;/doc/developer/;/doc/guispec/;/doc/mods/;/doc/user/download/;/doc/user/open_source_download/;/test/;/src/CruxGui/;/ext/bin/;/ext/build/;/ext/downloads/;/ext/include/;/ext/lib/;/ext/share/;/src/python/;/CMakeCache.txt$;/CMakeFiles/;\\.gz$;\\.swp$;\\.zip$")
+SET(CPACK_INSTALLED_DIRECTORIES "/data/TeamCity/buildAgent/work/779d99b0241b2175;/")
+SET(CPACK_INSTALL_CMAKE_PROJECTS "")
+SET(CPACK_INSTALL_PREFIX "/usr/local")
+SET(CPACK_MODULE_PATH "")
+SET(CPACK_NSIS_DISPLAY_NAME "crux 3.1.1")
+SET(CPACK_NSIS_INSTALLER_ICON_CODE "")
+SET(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "")
+SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES")
+SET(CPACK_NSIS_PACKAGE_NAME "crux 3.1.1")
+SET(CPACK_OUTPUT_CONFIG_FILE "/data/TeamCity/buildAgent/work/779d99b0241b2175/CPackConfig.cmake")
+SET(CPACK_PACKAGE_DEFAULT_LOCATION "/")
+SET(CPACK_PACKAGE_DESCRIPTION_FILE "/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/share/cmake-2.8/Templates/CPack.GenericDescription.txt")
+SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "crux built using CMake")
+SET(CPACK_PACKAGE_FILE_NAME "crux-3.1.Source")
+SET(CPACK_PACKAGE_INSTALL_DIRECTORY "crux 3.1.1")
+SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "crux 3.1.1")
+SET(CPACK_PACKAGE_NAME "crux")
+SET(CPACK_PACKAGE_RELOCATABLE "true")
+SET(CPACK_PACKAGE_VENDOR "Humanity")
+SET(CPACK_PACKAGE_VERSION "3.1.1")
+SET(CPACK_PACKAGE_VERSION_MAJOR "3")
+SET(CPACK_PACKAGE_VERSION_MINOR "1")
+SET(CPACK_PACKAGE_VERSION_PATCH "1")
+SET(CPACK_RESOURCE_FILE_LICENSE "/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/share/cmake-2.8/Templates/CPack.GenericLicense.txt")
+SET(CPACK_RESOURCE_FILE_README "/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/share/cmake-2.8/Templates/CPack.GenericDescription.txt")
+SET(CPACK_RESOURCE_FILE_WELCOME "/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/share/cmake-2.8/Templates/CPack.GenericWelcome.txt")
+SET(CPACK_SET_DESTDIR "OFF")
+SET(CPACK_SOURCE_CYGWIN "")
+SET(CPACK_SOURCE_GENERATOR "TGZ")
+SET(CPACK_SOURCE_IGNORE_FILES "/\\..*$;\\./_CPack_Packages/;/benchmark/;/bin/;/results/;/doc/developer/;/doc/guispec/;/doc/mods/;/doc/user/download/;/doc/user/open_source_download/;/test/;/src/CruxGui/;/ext/bin/;/ext/build/;/ext/downloads/;/ext/include/;/ext/lib/;/ext/share/;/src/python/;/CMakeCache.txt$;/CMakeFiles/;\\.gz$;\\.swp$;\\.zip$")
+SET(CPACK_SOURCE_INSTALLED_DIRECTORIES "/data/TeamCity/buildAgent/work/779d99b0241b2175;/")
+SET(CPACK_SOURCE_OUTPUT_CONFIG_FILE "/data/TeamCity/buildAgent/work/779d99b0241b2175/CPackSourceConfig.cmake")
+SET(CPACK_SOURCE_PACKAGE_FILE_NAME "crux-3.1.Source")
+SET(CPACK_SOURCE_TBZ2 "")
+SET(CPACK_SOURCE_TGZ "")
+SET(CPACK_SOURCE_TOPLEVEL_TAG "Linux-Source")
+SET(CPACK_SOURCE_TZ "")
+SET(CPACK_SOURCE_ZIP "")
+SET(CPACK_STRIP_FILES "")
+SET(CPACK_SYSTEM_NAME "Linux")
+SET(CPACK_TOPLEVEL_TAG "Linux-Source")
+SET(CPACK_WIX_SIZEOF_VOID_P "8")
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..f0a6721
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,34 @@
+Full directions for installing Crux can be found in doc/users/install-tutorial.html.
+
+Building Crux from source requires a C++ compiler and standard libraries. It
+also requires the programs 'cmake' and 'svn'. To build Crux from a source 
+distribution or a copy checked out from the SVN repository:
+
+1. Run 'cmake .'. This generates all the final 'Makefile' from the 'CMakeLists.txt'.
+   See text below for a description of some useful 'cmake' options.
+2. Run 'make'. This will build Crux. Crux depends on the Proteowizard libraries
+   (http://proteowizard.sourceforge.net). These will automatically be obtained
+   from the Proteowizard SVN repository.
+3. Run 'make install'.
+
+The 'cmake' program accepts several command line options. These are described
+in the CMake documentation, available at http://www.cmake.org.  Three of the
+most useful options are described below.
+
+By default CMake will install Crux in /usr/local. To specify a different
+installation directory use:
+
+cmake -DCMAKE_INSTALL_PREFIX:PATH=<install directory> .
+
+where you should replace '<install directory>' with the full path to the
+root directory where Crux should be installed.
+
+By default CMake will perform a non-debug build of Crux. To turn on debugging
+symbols use:
+
+cmake -DCMAKE_BUILD_TYPE=Debug .
+
+By default CMake will hide most of the processing messages from the compiler
+and linker.  To turn on 'verbose' messages use:
+
+cmake -DCMAKE_VERBOSE_MAKEFILE=ON .
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..d76e09d
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,472 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 2.8
+
+# Default target executed when no arguments are given to make.
+default_target: all
+.PHONY : default_target
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+# A target that is always out of date.
+cmake_force:
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake
+
+# The command to remove a file.
+RM = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The program to use to edit the cache.
+CMAKE_EDIT_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target edit_cache
+edit_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+.PHONY : edit_cache/fast
+
+# Special rule for the target install
+install: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install
+
+# Special rule for the target install
+install/fast: preinstall/fast
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install/fast
+
+# Special rule for the target install/local
+install/local: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local
+
+# Special rule for the target install/local
+install/local/fast: install/local
+.PHONY : install/local/fast
+
+# Special rule for the target install/strip
+install/strip: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip
+
+# Special rule for the target install/strip
+install/strip/fast: install/strip
+.PHONY : install/strip/fast
+
+# Special rule for the target list_install_components
+list_install_components:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
+.PHONY : list_install_components
+
+# Special rule for the target list_install_components
+list_install_components/fast: list_install_components
+.PHONY : list_install_components/fast
+
+# Special rule for the target package
+package: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackConfig.cmake
+.PHONY : package
+
+# Special rule for the target package
+package/fast: package
+.PHONY : package/fast
+
+# Special rule for the target package_source
+package_source:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool for source..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackSourceConfig.cmake /data/TeamCity/buildAgent/work/779d99b0241b2175/CPackSourceConfig.cmake
+.PHONY : package_source
+
+# Special rule for the target package_source
+package_source/fast: package_source
+.PHONY : package_source/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+.PHONY : rebuild_cache/fast
+
+# The main all target
+all: cmake_check_build_system
+	$(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles/progress.marks
+	$(MAKE) -f CMakeFiles/Makefile2 all
+	$(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+	$(MAKE) -f CMakeFiles/Makefile2 clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+	$(MAKE) -f CMakeFiles/Makefile2 preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+	$(MAKE) -f CMakeFiles/Makefile2 preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+	$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+.PHONY : depend
+
+#=============================================================================
+# Target rules for targets named checksum
+
+# Build rule for target.
+checksum: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 checksum
+.PHONY : checksum
+
+# fast build rule for target.
+checksum/fast:
+	$(MAKE) -f CMakeFiles/checksum.dir/build.make CMakeFiles/checksum.dir/build
+.PHONY : checksum/fast
+
+#=============================================================================
+# Target rules for targets named crux_version
+
+# Build rule for target.
+crux_version: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 crux_version
+.PHONY : crux_version
+
+# fast build rule for target.
+crux_version/fast:
+	$(MAKE) -f CMakeFiles/crux_version.dir/build.make CMakeFiles/crux_version.dir/build
+.PHONY : crux_version/fast
+
+#=============================================================================
+# Target rules for targets named deep-clean
+
+# Build rule for target.
+deep-clean: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 deep-clean
+.PHONY : deep-clean
+
+# fast build rule for target.
+deep-clean/fast:
+	$(MAKE) -f CMakeFiles/deep-clean.dir/build.make CMakeFiles/deep-clean.dir/build
+.PHONY : deep-clean/fast
+
+#=============================================================================
+# Target rules for targets named externals-only
+
+# Build rule for target.
+externals-only: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 externals-only
+.PHONY : externals-only
+
+# fast build rule for target.
+externals-only/fast:
+	$(MAKE) -f CMakeFiles/externals-only.dir/build.make CMakeFiles/externals-only.dir/build
+.PHONY : externals-only/fast
+
+#=============================================================================
+# Target rules for targets named no-externals
+
+# Build rule for target.
+no-externals: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 no-externals
+.PHONY : no-externals
+
+# fast build rule for target.
+no-externals/fast:
+	$(MAKE) -f CMakeFiles/no-externals.dir/build.make CMakeFiles/no-externals.dir/build
+.PHONY : no-externals/fast
+
+#=============================================================================
+# Target rules for targets named create-docs
+
+# Build rule for target.
+create-docs: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 create-docs
+.PHONY : create-docs
+
+# fast build rule for target.
+create-docs/fast:
+	$(MAKE) -f doc/user/CMakeFiles/create-docs.dir/build.make doc/user/CMakeFiles/create-docs.dir/build
+.PHONY : create-docs/fast
+
+#=============================================================================
+# Target rules for targets named ProteoWizard
+
+# Build rule for target.
+ProteoWizard: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 ProteoWizard
+.PHONY : ProteoWizard
+
+# fast build rule for target.
+ProteoWizard/fast:
+	$(MAKE) -f ext/CMakeFiles/ProteoWizard.dir/build.make ext/CMakeFiles/ProteoWizard.dir/build
+.PHONY : ProteoWizard/fast
+
+#=============================================================================
+# Target rules for targets named comet
+
+# Build rule for target.
+comet: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 comet
+.PHONY : comet
+
+# fast build rule for target.
+comet/fast:
+	$(MAKE) -f ext/CMakeFiles/comet.dir/build.make ext/CMakeFiles/comet.dir/build
+.PHONY : comet/fast
+
+#=============================================================================
+# Target rules for targets named gflags-2.1.2
+
+# Build rule for target.
+gflags-2.1.2: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 gflags-2.1.2
+.PHONY : gflags-2.1.2
+
+# fast build rule for target.
+gflags-2.1.2/fast:
+	$(MAKE) -f ext/CMakeFiles/gflags-2.1.2.dir/build.make ext/CMakeFiles/gflags-2.1.2.dir/build
+.PHONY : gflags-2.1.2/fast
+
+#=============================================================================
+# Target rules for targets named percolator
+
+# Build rule for target.
+percolator: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 percolator
+.PHONY : percolator
+
+# fast build rule for target.
+percolator/fast:
+	$(MAKE) -f ext/CMakeFiles/percolator.dir/build.make ext/CMakeFiles/percolator.dir/build
+.PHONY : percolator/fast
+
+#=============================================================================
+# Target rules for targets named protobuf-2.5.0
+
+# Build rule for target.
+protobuf-2.5.0: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 protobuf-2.5.0
+.PHONY : protobuf-2.5.0
+
+# fast build rule for target.
+protobuf-2.5.0/fast:
+	$(MAKE) -f ext/CMakeFiles/protobuf-2.5.0.dir/build.make ext/CMakeFiles/protobuf-2.5.0.dir/build
+.PHONY : protobuf-2.5.0/fast
+
+#=============================================================================
+# Target rules for targets named crux
+
+# Build rule for target.
+crux: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 crux
+.PHONY : crux
+
+# fast build rule for target.
+crux/fast:
+	$(MAKE) -f src/CMakeFiles/crux.dir/build.make src/CMakeFiles/crux.dir/build
+.PHONY : crux/fast
+
+#=============================================================================
+# Target rules for targets named crux-support
+
+# Build rule for target.
+crux-support: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 crux-support
+.PHONY : crux-support
+
+# fast build rule for target.
+crux-support/fast:
+	$(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/build
+.PHONY : crux-support/fast
+
+#=============================================================================
+# Target rules for targets named bullseye
+
+# Build rule for target.
+bullseye: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 bullseye
+.PHONY : bullseye
+
+# fast build rule for target.
+bullseye/fast:
+	$(MAKE) -f src/app/bullseye/CMakeFiles/bullseye.dir/build.make src/app/bullseye/CMakeFiles/bullseye.dir/build
+.PHONY : bullseye/fast
+
+#=============================================================================
+# Target rules for targets named hardklor
+
+# Build rule for target.
+hardklor: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 hardklor
+.PHONY : hardklor
+
+# fast build rule for target.
+hardklor/fast:
+	$(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/build
+.PHONY : hardklor/fast
+
+#=============================================================================
+# Target rules for targets named barista
+
+# Build rule for target.
+barista: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 barista
+.PHONY : barista
+
+# fast build rule for target.
+barista/fast:
+	$(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/build
+.PHONY : barista/fast
+
+#=============================================================================
+# Target rules for targets named xlink
+
+# Build rule for target.
+xlink: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 xlink
+.PHONY : xlink
+
+# fast build rule for target.
+xlink/fast:
+	$(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/build
+.PHONY : xlink/fast
+
+#=============================================================================
+# Target rules for targets named tide-support
+
+# Build rule for target.
+tide-support: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 tide-support
+.PHONY : tide-support
+
+# fast build rule for target.
+tide-support/fast:
+	$(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/build
+.PHONY : tide-support/fast
+
+#=============================================================================
+# Target rules for targets named smoke-tests
+
+# Build rule for target.
+smoke-tests: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 smoke-tests
+.PHONY : smoke-tests
+
+# fast build rule for target.
+smoke-tests/fast:
+	$(MAKE) -f test/smoke-tests/CMakeFiles/smoke-tests.dir/build.make test/smoke-tests/CMakeFiles/smoke-tests.dir/build
+.PHONY : smoke-tests/fast
+
+#=============================================================================
+# Target rules for targets named performance-tests
+
+# Build rule for target.
+performance-tests: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 performance-tests
+.PHONY : performance-tests
+
+# fast build rule for target.
+performance-tests/fast:
+	$(MAKE) -f test/performance-tests/CMakeFiles/performance-tests.dir/build.make test/performance-tests/CMakeFiles/performance-tests.dir/build
+.PHONY : performance-tests/fast
+
+# Help Target
+help:
+	@echo "The following are some of the valid targets for this Makefile:"
+	@echo "... all (the default if no target is provided)"
+	@echo "... clean"
+	@echo "... depend"
+	@echo "... checksum"
+	@echo "... crux_version"
+	@echo "... deep-clean"
+	@echo "... edit_cache"
+	@echo "... externals-only"
+	@echo "... install"
+	@echo "... install/local"
+	@echo "... install/strip"
+	@echo "... list_install_components"
+	@echo "... no-externals"
+	@echo "... package"
+	@echo "... package_source"
+	@echo "... rebuild_cache"
+	@echo "... create-docs"
+	@echo "... ProteoWizard"
+	@echo "... comet"
+	@echo "... gflags-2.1.2"
+	@echo "... percolator"
+	@echo "... protobuf-2.5.0"
+	@echo "... crux"
+	@echo "... crux-support"
+	@echo "... bullseye"
+	@echo "... hardklor"
+	@echo "... barista"
+	@echo "... xlink"
+	@echo "... tide-support"
+	@echo "... smoke-tests"
+	@echo "... performance-tests"
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+	$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..b4e3c63
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,2 @@
+For Crux news please see the release notes linked from the Crux home page in
+doc/user/crux.html or at http://noble.gs.washington.edu/proj/crux.
diff --git a/README b/README
new file mode 100644
index 0000000..88fbd7b
--- /dev/null
+++ b/README
@@ -0,0 +1,8 @@
+For a gentle introduction to Crux, please see the Crux home page at
+doc/user/crux.html or at http://noble.gs.washington.edu/proj/crux/.
+
+For installation instructions, see the installation tutorial linked
+from the Crux home pages listed above.
+
+Crux source code can be found in the src/c subdirectory.
+
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/Makefile b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/Makefile
new file mode 100644
index 0000000..0f38c7b
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/Makefile
@@ -0,0 +1,207 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 2.8
+
+# Default target executed when no arguments are given to make.
+default_target: all
+.PHONY : default_target
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+# A target that is always out of date.
+cmake_force:
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake
+
+# The command to remove a file.
+RM = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The program to use to edit the cache.
+CMAKE_EDIT_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target edit_cache
+edit_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+.PHONY : edit_cache/fast
+
+# Special rule for the target install
+install: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install
+
+# Special rule for the target install
+install/fast: preinstall/fast
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install/fast
+
+# Special rule for the target install/local
+install/local: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local
+
+# Special rule for the target install/local
+install/local/fast: install/local
+.PHONY : install/local/fast
+
+# Special rule for the target install/strip
+install/strip: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip
+
+# Special rule for the target install/strip
+install/strip/fast: install/strip
+.PHONY : install/strip/fast
+
+# Special rule for the target list_install_components
+list_install_components:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
+.PHONY : list_install_components
+
+# Special rule for the target list_install_components
+list_install_components/fast: list_install_components
+.PHONY : list_install_components/fast
+
+# Special rule for the target package
+package: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackConfig.cmake
+.PHONY : package
+
+# Special rule for the target package
+package/fast: package
+.PHONY : package/fast
+
+# Special rule for the target package_source
+package_source:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool for source..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackSourceConfig.cmake /data/TeamCity/buildAgent/work/779d99b0241b2175/CPackSourceConfig.cmake
+.PHONY : package_source
+
+# Special rule for the target package_source
+package_source/fast: package_source
+.PHONY : package_source/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+.PHONY : rebuild_cache/fast
+
+# The main all target
+all: cmake_check_build_system
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles /data/TeamCity/buildAgent/work/779d99b0241b2175/doc/user/CMakeFiles/progress.marks
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 doc/user/all
+	$(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 doc/user/clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 doc/user/preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 doc/user/preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+.PHONY : depend
+
+# Convenience name for target.
+doc/user/CMakeFiles/create-docs.dir/rule:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 doc/user/CMakeFiles/create-docs.dir/rule
+.PHONY : doc/user/CMakeFiles/create-docs.dir/rule
+
+# Convenience name for target.
+create-docs: doc/user/CMakeFiles/create-docs.dir/rule
+.PHONY : create-docs
+
+# fast build rule for target.
+create-docs/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f doc/user/CMakeFiles/create-docs.dir/build.make doc/user/CMakeFiles/create-docs.dir/build
+.PHONY : create-docs/fast
+
+# Help Target
+help:
+	@echo "The following are some of the valid targets for this Makefile:"
+	@echo "... all (the default if no target is provided)"
+	@echo "... clean"
+	@echo "... depend"
+	@echo "... create-docs"
+	@echo "... edit_cache"
+	@echo "... install"
+	@echo "... install/local"
+	@echo "... install/strip"
+	@echo "... list_install_components"
+	@echo "... package"
+	@echo "... package_source"
+	@echo "... rebuild_cache"
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/assign-confidence.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/assign-confidence.html
new file mode 100644
index 0000000..8249447
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/assign-confidence.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>assign-confidence</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>assign-confidence</h1>
+<h2>Usage:</h2>
+<p><code>crux assign-confidence [options] <target input>+</code></p>
+<h2>Description:</h2>
+<p>Given target and decoy scores, estimate a q-value for each target score. The q-value is analogous to a p-value but incorporates false discovery rate multiple testing correction. The q-value associated with a score threshold T is defined as the minimal false discovery rate (FDR) at which a score of T is deemed significant. In this setting, the q-value accounts for the fact that we are analyzing a large collection of scores. For confidence estimation afficionados, please note that this  [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>target input+</code> – One or more files, each containing a collection of peptide-spectrum matches (PSMs) in <a href="../file-formats/txt-format.html">tab-delimited text</a>, <a href="http://tools.proteomecenter.org/wiki/index.php?title=Formats:pepXML">PepXML</a>, or <a href="http://www.psidev.info/mzidentml">mzIdentML</a> format. In tab-delimited text format, only the specified score column is required. However if --estimation-method is tdc, then the columns "scan" and [...]
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>assign-confidence.target.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited text file</a> that contains the targets, sorted by score. The file will contain one new column, named "<method> q-value", where <method> is either "tdc" or "mix-max".</li>
+  <li><code>assign-confidence.log.txt</code> – a log file containing a copy of all messages that were printed to stderr.</li>
+  <li><code>assign-confidence.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>assign-confidence options</h3>
+<ul>
+  <li class="nobullet"><code>--estimation-method mix-max|tdc|peptide-level</code> – Specify the method used to estimate q-values.  The mix-max procedure or target-decoy competition apply to PSMs. The peptide-level option eliminates any PSM for which there exists a better scoring PSM involving the same peptide, and then uses decoys to assign confidence estimates. Default = <code>tdc</code>.</li>
+  <li class="nobullet"><code>--score <string></code> – Specify the column (for tab-delimited input) or tag (for XML input) used as input to the q-value estimation procedure. If this parameter is unspecified, then the program searches for "xcorr score", "evalue" (comet), "exact p-value" score fields in this order in the input file.  Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--sidak T|F</code> – Adjust the score using the Sidak adjustment and reports them in a new column in the output file. Note that this adjustment only makes sense if the given scores are p-values, and that it requires the presence of the "distinct matches/spectrum" feature for each PSM. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--combine-charge-states T|F</code> – Specify this parameter to T in order to combine charge states with peptide sequencesin peptide-centric search. Works only if estimation-method = peptide-level. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--combine-modified-peptides T|F</code> – Specify this parameter to T in order to treat peptides carrying different or no modifications as being the same. Works only if estimation = peptide-level. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--list-of-files T|F</code> – Specify that the search results are provided as lists of files, rather than as individual files. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/barista.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/barista.html
new file mode 100644
index 0000000..f5b1d92
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/barista.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>barista</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>barista</h1>
+<h2>Usage:</h2>
+<p><code>crux barista [options] <database> <fragmentation spectra> <search results></code></p>
+<h2>Description:</h2>
+<p>Barista is a protein identification algorithm that combines two different tasks–peptide-spectrum match (PSM) verification and protein inference–into a single learning algorithm. The program requires three inputs: a set of MS2 spectra, a protein database, and the results of searching the spectra against the database. Barista produces as output three ranked lists of proteins, peptides and PSMs, based on how likely the proteins and peptides are to be present in the sample and [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>database</code> – The program requires the FASTA format protein database files against which the search was performed. The protein database input may be a concatenated database or separate target and decoy databases; the latter is supported with the --separate-searches option, described below. In either case, Barista distinguishes between target and decoy proteins based on the presence of a decoy prefix on the sequence identifiers (see the --decoy-prefix option, below). [...]
+  <li><code>fragmentation spectra</code> – The fragmentation spectra must be provided in <a href="../file-formats/ms2-format.html">MS2</a>, mzXML, or MGF format.</li>
+  <li><code>search results</code> – Search results in the <a href="../file-formats/txt-format.html">tab-delimited text format</a> produced by Crux or in <a href="../file-formats/sqt-format.html">SQT format</a>. Like the spectra, the search results can be provided as a single file, a list of files or a directory of files. Note, however, that the input mode for spectra and for search results must be the same; i.e., if you provide a list of files for the spectra, then you must also pr [...]
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>barista.xml</code> – an <a href="../file-formats/barista-xml-format.html">XML file</a> that contains four information about proteins, subset proteins, peptides, and PSMs.</li>
+  <li><code>barista.target.proteins.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited file</a> containing a ranked list of groups of indistinguishable target proteins with associated Barista scores and q-values and with peptides that contributed to the identification of the protein group.</li>
+  <li><code>barista.target.subset-proteins.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited file</a> containing groups of indistinguishable proteins.</li>
+  <li><code>barista.target.peptides.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited file</a> containing a ranked list of target peptides with the associated Barista scores and q-values.</li>
+  <li><code>barista.target.psm.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited file format</a> containing a ranked list of target peptide-spectrum matches with the associated Barista scores and q-values.</li>
+  <li><code>barista.log.txt</code> – a file where the program reports its progress.</li>
+  <li><code>barista.params.txt</code> – a file with the values of all the options given to the current run.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>barista options</h3>
+<ul>
+  <li class="nobullet"><code>--separate-searches <string></code> – If the target and decoy searches were run separately, rather than using a concatenated database, then the program will assume that the database search results provided as a required argument are from the target database search. This option then allows the user to specify the location of the decoy search results. Like the required arguments, these search results can be provided as a single file, a list of files [...]
+  <li class="nobullet"><code>--skip-cleanup T|F</code> – Analysis begins with a pre-processsing step that creates a set of lookup tables which are then used during training. Normally, these lookup tables are deleted at the end of the analysis, but setting this option to T prevents the deletion of these tables. Subsequently, analyses can be repeated more efficiently by specifying the --re-run option. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--re-run <string></code> – Re-run a previous analysis using a previously computed set of lookup tables. For this option to work, the --skip-cleanup option must have been set to true when the program was run the first time. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--use-spec-features T|F</code> – Use an enriched feature set, including separate features for each ion type. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--optimization protein|peptide|psm</code> – Specifies whether to do optimization at the protein, peptide or psm level. Default = <code>protein</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Enzymatic digestion</h3>
+<ul>
+  <li class="nobullet"><code>--enzyme no-enzyme|trypsin|trypsin/p|chymotrypsin|elastase|clostripain|cyanogen-bromide|iodosobenzoate|proline-endopeptidase|staph-protease|asp-n|lys-c|lys-n|arg-c|glu-c|pepsin-a|elastase-trypsin-chymotrypsin|custom-enzyme</code> – Specify the enzyme used to digest the proteins in silico. Available enzymes (with the corresponding digestion rules indicated in parentheses) include no-enzyme ([X]|[X]), trypsin ([RK]|{P}), trypsin/p ([RK]|[]), chymotrypsin  [...]
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pepxml-output T|F</code> – Output a pepXML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--txt-output T|F</code> – Output a tab-delimited results file to the output directory. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--list-of-files T|F</code> – Specify that the search results are provided as lists of files, rather than as individual files. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--feature-file-out T|F</code> – Output the computed features in <a href="../file-formats/features.html">tab-delimited text format</a>. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/bullseye.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/bullseye.html
new file mode 100644
index 0000000..e73bf1e
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/bullseye.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>bullseye</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>bullseye</h1>
+<h2>Usage:</h2>
+<p><code>crux bullseye [options] <MS1 spectra> <MS2 spectra></code></p>
+<h2>Description:</h2>
+<p>Bullseye assigns high resolution precursor m/z values to fragmentation (MS2) spectra. Bullseye uses the Hardklör algorithm to identify persistent isotope distributions (PPIDs) in precursor (MS1) scans. For each PPID, MS2 scans that occur within a specified time and m/z range are assigned the average monoisotopic m/z from the PPID assigned as the precursor m/z. A detailed description of the Bullseye algorithm is given in </p><quote>Hsieh EJ, Hoopmann MR, Maclean B, MacCoss MJ. <a  [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>MS1 spectra</code> – The name of a file from which to parse high-resolution spectra of intact peptides. The file may be in MS1 (.ms1), binary MS1 (.bms1), compressed MS1 (.cms1), or mzXML (.mzXML) format. Bullseye will search for PPIDs in these spectra.</li>
+  <li><code>MS2 spectra</code> – The name of a file from which to parse peptide fragmentation spectra. The file may be in MS2 (.ms2), binary MS2 (.bms2), compressed MS2 (.cms2) or mzXML (.mzXML) format. Bullseye will assign high-resolution precursor masses to these spectra.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>bullseye.pid.<format></code> – a file containing the fragmentation spectra for which accurate masses were successfully inferred. Unless otherwise specified (with the --spectrum-format option), the output file format is ".ms2". Note that if the output format is ".ms2," then a single spectrum may have multiple "Z" lines, each indicating a charge state and accurate mass. In addition, Bullseye inserts an "I" line (for charge-dependent analysis) corresponding to each "Z" lin [...]
+  <li><code>bullseye.no-pid.<format></code> – a file containing the fragmentation spectra for which accurate masses were not inferred.</li>
+  <li><code>hardklor.mono.txt</code> – a tab-delimited text file containing one line for each isotope distribution, as described <a href="hardklor.html">here</a>.</li>
+  <li><code>bullseye.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>bullseye.log.txt</code> – a log file containing a copy of all messages that were printed to standard error.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Identifying PPIDs in MS1 spectra</h3>
+<ul>
+  <li class="nobullet"><code>--max-persist <float></code> – Ignore PPIDs that persist for longer than this length of time in the MS1 spectra. The unit of time is whatever unit is used in your data file (usually minutes). These PPIDs are considered contaminants. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--persist-tolerance <float></code> – Set the mass tolerance (+/-ppm) for finding PPIDs in consecutive MS1 scans. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--gap-tolerance <integer></code> – Allowed gap size when checking for PPIDs across consecutive MS1 scans. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--scan-tolerance <integer></code> – Total number of MS1 scans over which a PPID must be observed to be considered real. Gaps in persistence are allowed by setting --gap-tolerance. Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--bullseye-max-mass <float></code> – Only consider PPIDs below this maximum mass in daltons. Default = <code>8000</code>.</li>
+  <li class="nobullet"><code>--bullseye-min-mass <float></code> – Only consider PPIDs above this minimum mass in daltons. Default = <code>600</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Matching PPIDs to MS2 spectra</h3>
+<ul>
+  <li class="nobullet"><code>--exact-match T|F</code> – When true, require an exact match (as defined by --exact-tolerance) between the center of the precursor isolation window in the MS2 scan and the base isotopic peak of the PPID. If this option is set to false and no exact match is observed, then attempt to match using a wider m/z tolerance. This wider tolerance is calculated using the PPID's monoisotopic mass and charge (the higher the charge, the smaller the window). Default = [...]
+  <li class="nobullet"><code>--exact-tolerance <float></code> – Set the tolerance (+/-ppm) for --exact-match. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--retention-tolerance <float></code> – Set the tolerance (+/-units) around the retention time over which a PPID can be matches to the MS2 spectrum. The unit of time is whatever unit is used in your data file (usually minutes). Default = <code>0.5</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--spectrum-format |ms2|bms2|cms2|mgf</code> – The format to write the output spectra to. If empty, the spectra will be output in the same format as the MS2 input. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/cascade-search.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/cascade-search.html
new file mode 100644
index 0000000..718f198
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/cascade-search.html
@@ -0,0 +1,215 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>cascade-search</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>cascade-search</h1>
+<h2>Usage:</h2>
+<p><code>crux cascade-search [options] <tide spectra file>+ <database-series></code></p>
+<h2>Description:</h2>
+<p>Cascade-search is a general procedure for incorporating information about peptide groups into the database search and confidence estimation procedure. Peptides may be grouped according to, for example, their enzymatic properties (zero, one, or two enzymatic termini) or the presence of different types of numbers of variable modifications. The algorithm works on a series of databases, each corresponding to a different peptide group. The database is searched in series, and after each sea [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>tide spectra file+</code> – The name of one or more files from which to parse the fragmentation spectra, in any of the file formats supported by ProteoWizard. Alternatively, the argument may be one or more binary spectrum files produced by a previous run of crux tide-search using the store-spectra parameter.</li>
+  <li><code>database-series</code> – A comma-separated list of databases, each generated by tide-index. Cascade-search will search the given spectra against these databases in the given order.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>cascade-search.target.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited text file</a> containing the target PSMs accepted at a pre-defined fdr.</li>
+  <li><code>cascade-search.log.txt</code> – a log file containing a copy of all messages that were printed to stderr.</li>
+  <li><code>cascade-search.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>cascade-search options</h3>
+<ul>
+  <li class="nobullet"><code>--q-value-threshold <float></code> – The q-value threshold used by cascade search. Each spectrum identified in one search with q-value less than this threshold will be excluded from all subsequent searches. Default = <code>0.01</code>.</li>
+  <li class="nobullet"><code>--estimation-method mix-max|tdc|peptide-level</code> – Specify the method used to estimate q-values.  The mix-max procedure or target-decoy competition apply to PSMs. The peptide-level option eliminates any PSM for which there exists a better scoring PSM involving the same peptide, and then uses decoys to assign confidence estimates. Default = <code>tdc</code>.</li>
+  <li class="nobullet"><code>--score <string></code> – Specify the column (for tab-delimited input) or tag (for XML input) used as input to the q-value estimation procedure. If this parameter is unspecified, then the program searches for "xcorr score", "evalue" (comet), "exact p-value" score fields in this order in the input file.  Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--sidak T|F</code> – Adjust the score using the Sidak adjustment and reports them in a new column in the output file. Note that this adjustment only makes sense if the given scores are p-values, and that it requires the presence of the "distinct matches/spectrum" feature for each PSM. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--combine-charge-states T|F</code> – Specify this parameter to T in order to combine charge states with peptide sequencesin peptide-centric search. Works only if estimation-method = peptide-level. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--combine-modified-peptides T|F</code> – Specify this parameter to T in order to treat peptides carrying different or no modifications as being the same. Works only if estimation = peptide-level. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Precursor selection</h3>
+<ul>
+  <li class="nobullet"><code>--precursor-window <float></code> – Tolerance used for matching peptides to spectra. Peptides must be within +/- 'precursor-window' of the spectrum value. The precursor window units depend upon precursor-window-type. Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--auto-precursor-window false|warn|fail</code> – Automatically estimate optimal value for the precursor-window parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--precursor-window-type mass|mz|ppm</code> – Specify the units for the window that is used to select peptides around the precursor mass location (mass, mz, ppm). The magnitude of the window is defined by the precursor-window option, and candidate peptides must fall within this window. For the mass window-type, the spectrum precursor m+h value is converted to mass, and the window is defined as that mass +/- precursor-window. If the m+h value is not avail [...]
+  <li class="nobullet"><code>--max-precursor-charge <integer></code> – The maximum charge state of a spectra to consider in search. Default = <code>5</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search parameters</h3>
+<ul>
+  <li class="nobullet"><code>--spectrum-min-mz <float></code> – The lowest spectrum m/z to search in the ms2 file. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--spectrum-max-mz <float></code> – The highest spectrum m/z to search in the ms2 file. Default = <code>1e+09</code>.</li>
+  <li class="nobullet"><code>--min-peaks <integer></code> – The minimum number of peaks a spectrum must have for it to be searched. Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--spectrum-charge 1|2|3|all</code> – The spectrum charges to search. With 'all' every spectrum will be searched and spectra with multiple charge states will be searched once at each charge state. With 1, 2, or 3 only spectra with that charge state will be searched. Default = <code>all</code>.</li>
+  <li class="nobullet"><code>--scan-number <string></code> – A single scan number or a range of numbers to be searched. Range should be specified as 'first-last' which will include scans 'first' and 'last'. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--compute-sp T|F</code> – Compute the preliminary score Sp for all candidate peptides. Report this score in the output, along with the corresponding rank, the number of matched ions and the total number of ions. This option is recommended if results are to be analyzed by Percolator or Barista. If sqt-output is enabled, then compute-sp is automatically enabled and cannot be overridden. Note that the Sp computation requires re-processing each observed spe [...]
+  <li class="nobullet"><code>--remove-precursor-peak T|F</code> – If true, all peaks around the precursor m/z will be removed, within a range specified by the --remove-precursor-tolerance option. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--remove-precursor-tolerance <float></code> – This parameter specifies the tolerance (in Th) around each precursor m/z that is removed when the --remove-precursor-peak option is invoked. Default = <code>1.5</code>.</li>
+  <li class="nobullet"><code>--exact-p-value T|F</code> – Enable the calculation of exact p-values for the XCorr score as described in <a href="http://www.ncbi.nlm.nih.gov/pubmed/24895379">this article</a>. Calculation of p-values increases the running time but increases the number of identifications at a fixed confidence threshold. The p-values will be reported in a new column with header "exact p-value", and the "xcorr score" column will be replaced with a "refactored xcorr" colu [...]
+  <li class="nobullet"><code>--use-neutral-loss-peaks T|F</code> – Controls whether neutral loss ions are considered in the search. Two types of neutral losses are included and are applied only to singly charged b- and y-ions: loss of ammonia (NH3, 17.0086343 Da) and H2O (18.0091422). Each neutral loss peak has intensity 1/5 of the primary peak. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--use-flanking-peaks T|F</code> – Include flanking peaks around singly charged b and y theoretical ions. Each flanking peak occurs in the adjacent m/z bin and has half the intensity of the primary peak. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mz-bin-width <float></code> – Before calculation of the XCorr score, the m/z axes of the observed and theoretical spectra are discretized. This parameter specifies the size of each bin. The exact formula for computing the discretized m/z value is floor((x/mz-bin-width) + 1.0 - mz-bin-offset), where x is the observed m/z value. For low resolution ion trap ms/ms data 1.0005079 and for high resolution ms/ms 0.02 is recommended. Default = <code>1.00 [...]
+  <li class="nobullet"><code>--auto-mz-bin-width false|warn|fail</code> – Automatically estimate optimal value for the mz-bin-width parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mz-bin-offset <float></code> – In the discretization of the m/z axes of the observed and theoretical spectra, this parameter specifies the location of the left edge of the first bin, relative to mass = 0 (i.e., mz-bin-offset = 0.xx means the left edge of the first bin will be located at +0.xx Da). Default = <code>0.4</code>.</li>
+  <li class="nobullet"><code>--peptide-centric-search T|F</code> – Carries out a peptide-centric search. For each peptide the top-scoring spectra are reported, in contrast to the standard spectrum-centric search where the top-scoring peptides are reported. Note that in this case the "xcorr rank" column will contain the rank of the given spectrum with respect to the given candidate peptide, rather than vice versa (which is the default). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--isotope-error <string></code> – List of positive, non-zero integers. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--skip-preprocessing T|F</code> – Skip preprocessing steps on spectra. Default = F. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>CPU threads</h3>
+<ul>
+  <li class="nobullet"><code>--num-threads <integer></code> – 0=poll CPU to set num threads; else specify num threads directly. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>param-medic options</h3>
+<ul>
+  <li class="nobullet"><code>--pm-min-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>400</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-frag-mz <float></code> – Minimum fragment m/z value to use in measurement error estimation. Default = <code>150</code>.</li>
+  <li class="nobullet"><code>--pm-max-frag-mz <float></code> – Maximum fragment m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-scan-frag-peaks <integer></code> – Minimum fragment peaks an MS/MS scan must contain to be used in measurement error estimation. Default = <code>40</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-delta-ppm <float></code> – Maximum ppm distance between precursor m/z values to consider two scans potentially generated by the same peptide for measurement error estimation. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--pm-charge <integer></code> – Precursor charge state to consider MS/MS spectra from, in measurement error estimation. Ideally, this should be the most frequently occurring charge state in the given data. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--pm-top-n-frag-peaks <integer></code> – Number of most-intense fragment peaks to consider for measurement error estimation, per MS/MS spectrum. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--pm-pair-top-n-frag-peaks <integer></code> – Number of fragment peaks per spectrum pair to be used in fragment error estimation. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--pm-min-common-frag-peaks <integer></code> – Number of the most-intense peaks that two spectra must share in order to potentially be generated by the same peptide, for measurement error estimation. Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--pm-max-scan-separation <integer></code> – Maximum number of scans two spectra can be separated by in order to be considered potentially generated by the same peptide, for measurement error estimation. Default = <code>1000</code>.</li>
+  <li class="nobullet"><code>--pm-min-peak-pairs <integer></code> – Minimum number of peak pairs (for precursor or fragment) that must be successfully paired in order to attempt to estimate measurement error distribution. Default = <code>100</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--list-of-files T|F</code> – Specify that the search results are provided as lists of files, rather than as individual files. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--store-spectra <string></code> – Specify the name of the file where the binarized fragmentation spectra will be stored. Subsequent runs of crux tide-search will execute more quickly if provided with the spectra in binary format. The filename is specified relative to the current working directory, not the Crux output directory (as specified by --output-dir). This option is not valid if multiple input spectrum files are given. Default = <code><e [...]
+  <li class="nobullet"><code>--store-index <string></code> – When providing a FASTA file as the index, the generated binary index will be stored at the given path. This option has no effect if a binary index is provided as the index. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--concat T|F</code> – When set to T, target and decoy search results are reported in a single file, and only the top-scoring N matches (as specified via --top-match) are reported for each spectrum, irrespective of whether the matches involve target or decoy peptides. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--print-search-progress <integer></code> – Show search progress by printing every n spectra searched. Set to 0 to show no search progress. Default = <code>1000</code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+  <li class="nobullet"><code>--use-z-line T|F</code> – Specify whether, when parsing an MS2 spectrum file, Crux obtains the precursor mass information from the "S" line or the "Z" line.  Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--txt-output T|F</code> – Output a tab-delimited results file to the output directory. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--sqt-output T|F</code> – Outputs an SQT results file to the output directory. Note that if sqt-output is enabled, then compute-sp is automatically enabled and cannot be overridden. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pepxml-output T|F</code> – Output a pepXML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mzid-output T|F</code> – Output an mzIdentML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pin-output T|F</code> – Output a Percolator input (PIN) file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--file-column T|F</code> – Include the file column in tab-delimited output. Default = <code>true</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/cmake_install.cmake b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/cmake_install.cmake
new file mode 100644
index 0000000..f038400
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/cmake_install.cmake
@@ -0,0 +1,38 @@
+# Install script for directory: /data/TeamCity/buildAgent/work/779d99b0241b2175/doc/user
+
+# Set the install prefix
+IF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+  SET(CMAKE_INSTALL_PREFIX "/usr/local")
+ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+  IF(BUILD_TYPE)
+    STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+  ELSE(BUILD_TYPE)
+    SET(CMAKE_INSTALL_CONFIG_NAME "Release")
+  ENDIF(BUILD_TYPE)
+  MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+
+# Set the component getting installed.
+IF(NOT CMAKE_INSTALL_COMPONENT)
+  IF(COMPONENT)
+    MESSAGE(STATUS "Install component: \"${COMPONENT}\"")
+    SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+  ELSE(COMPONENT)
+    SET(CMAKE_INSTALL_COMPONENT)
+  ENDIF(COMPONENT)
+ENDIF(NOT CMAKE_INSTALL_COMPONENT)
+
+# Install shared libraries without execute permission?
+IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+  SET(CMAKE_INSTALL_SO_NO_EXE "0")
+ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+
+IF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified")
+  FILE(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/doc" TYPE DIRECTORY FILES "/data/TeamCity/buildAgent/work/779d99b0241b2175/doc/user/." REGEX "/CMakeLists\\.txt$" EXCLUDE REGEX "/download$" EXCLUDE)
+ENDIF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified")
+
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/activation_method.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/activation_method.html
new file mode 100644
index 0000000..f21a03d
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/activation_method.html
@@ -0,0 +1,23 @@
+<html><head><title>comet parameter: activation_method</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: activation_method</h2>
+
+         <ul>
+         <li>This parameter specifies which scan types are searched.
+         <li>If "ALL" is specified, no filtering based on the activation method
+         is applied.
+         <li>If any other allowed entry is chosen, only spectra with activation
+         method matching the specified entry are searched.
+         <li>This parameter is valid only for mzXML, mzML and mz5 input.
+         <li>Allowed values are: ALL, CID, ECD, ETD, PQD, HCD, IRMPD
+         <li>The default value is "ALL" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>activation_method = ALL</tt>
+         <br><tt>activation_method = CID</tt>
+         <br><tt>activation_method = ETD</tt>
+         <br><tt>activation_method = HCD</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_A_alanine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_A_alanine.html
new file mode 100644
index 0000000..392f658
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_A_alanine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_A_alanine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_A_alanine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue A.
+         <li>The specified mass is added to the unmodified mass of A.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_A_alanine = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_B_user_amino_acid.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_B_user_amino_acid.html
new file mode 100644
index 0000000..1a74ce3
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_B_user_amino_acid.html
@@ -0,0 +1,19 @@
+<html><head><title>comet parameter: add_B_user_amino_acid</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_B_user_amino_acid</h2>
+
+         <ul>
+         <li>This parameter allows users to define their own custom residue. Just
+             encode the letter 'B' in the input FASTA file and specify its mass here.
+         <li>The letter 'B' has no default mass.  So the mass entered here will
+             be its residue mass.
+         <li>The default value is "0.0" if this parameter is missing.  If any peptide
+             contains the letter 'B' while this parameter value is set to 0.0, that
+             peptide will not be analyzed.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_B_user_amino_acid = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_C_cysteine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_C_cysteine.html
new file mode 100644
index 0000000..757e1be
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_C_cysteine.html
@@ -0,0 +1,21 @@
+<html><head><title>comet parameter: add_C_cysteine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_C_cysteine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue C.
+         <li>The specified mass is added to the unmodified mass of C.
+         <li>The default value is "0.0" if this parameter is missing.
+         If Comet was compiled for
+         <a href="noble.gs.washington.edu/proj/crux/">Crux</a> compatibility,
+         the default value is "57.021464".
+         Note that in the example parameter file produced by Comet using the "-p"
+         command line option, this parameter entry has a value of 57.021464 for
+         cysteine carbamidomethylation.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_C_cysteine = 57.021464</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Cterm_peptide.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Cterm_peptide.html
new file mode 100644
index 0000000..f796288
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Cterm_peptide.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_Cterm_peptide</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_Cterm_peptide</h2>
+
+         <ul>
+         <li>Specify a static modification to the C-terminus of all peptides.
+         <li>The specified mass is added to the unmodified C-terminal mass (mass of OH or 17.00274).
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_Cterm_peptide = 14.01</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Cterm_protein.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Cterm_protein.html
new file mode 100644
index 0000000..1d617e0
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Cterm_protein.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_Cterm_protein</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_Cterm_protein</h2>
+
+         <ul>
+         <li>Specify a static modification to the C-terminal peptide of each protein entry.
+         <li>The specified mass is added to the unmodified C-terminal mass (mass of OH or 17.00274).
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_Cterm_protein = 14.01</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_D_aspartic_acid.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_D_aspartic_acid.html
new file mode 100644
index 0000000..dc85968
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_D_aspartic_acid.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_D_aspartic_acid</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_D_aspartic_acid</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue D.
+         <li>The specified mass is added to the unmodified mass of D.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_D_cysteine = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_E_glutamic_acid.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_E_glutamic_acid.html
new file mode 100644
index 0000000..d95b244
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_E_glutamic_acid.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_E_glutamic_acid</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_E_glutamic_acid</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue E.
+         <li>The specified mass is added to the unmodified mass of E.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_E_cysteine = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_F_phenylalanine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_F_phenylalanine.html
new file mode 100644
index 0000000..82952d4
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_F_phenylalanine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_F_phenylalanine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_F_phenylalanine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue F.
+         <li>The specified mass is added to the unmodified mass of F.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_F_phenylalanine = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_G_glycine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_G_glycine.html
new file mode 100644
index 0000000..62d8a24
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_G_glycine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_G_glycine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_G_glycine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue G.
+         <li>The specified mass is added to the unmodified mass of G.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_G_cysteine = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_H_histidine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_H_histidine.html
new file mode 100644
index 0000000..8984a28
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_H_histidine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_H_histidine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_H_histidine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue H.
+         <li>The specified mass is added to the unmodified mass of H.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_H_histidine = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_I_isoleucine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_I_isoleucine.html
new file mode 100644
index 0000000..90d6de0
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_I_isoleucine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_I_isoleucine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_I_isoleucine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue I.
+         <li>The specified mass is added to the unmodified mass of I.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_I_isoleucine = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_J_user_amino_acid.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_J_user_amino_acid.html
new file mode 100644
index 0000000..3806f3a
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_J_user_amino_acid.html
@@ -0,0 +1,19 @@
+<html><head><title>comet parameter: add_J_user_amino_acid</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_J_user_amino_acid</h2>
+
+         <ul>
+         <li>This parameter allows users to define their own custom residue. Just
+             encode the letter 'J' in the input FASTA file and specify its mass here.
+         <li>The letter 'J' has no default mass.  So the mass entered here will
+             be its residue mass.
+         <li>The default value is "0.0" if this parameter is missing.  If any peptide
+             contains the letter 'J' while this parameter value is set to 0.0, that
+             peptide will not be analyzed.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_J_user_amino_acid = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_K_lysine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_K_lysine.html
new file mode 100644
index 0000000..a52206d
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_K_lysine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_K_lysine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_K_lysine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue K.
+         <li>The specified mass is added to the unmodified mass of K.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_K_lysine = 14.01</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_L_leucine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_L_leucine.html
new file mode 100644
index 0000000..58d84bf
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_L_leucine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_L_leucine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_L_leucine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue L.
+         <li>The specified mass is added to the unmodified mass of L.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_L_leucine = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_M_methionine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_M_methionine.html
new file mode 100644
index 0000000..2abd014
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_M_methionine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_M_methionine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_M_methionine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue M.
+         <li>The specified mass is added to the unmodified mass of M.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_M_methionine = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_N_asparagine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_N_asparagine.html
new file mode 100644
index 0000000..a296025
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_N_asparagine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_N_asparagine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_N_asparagine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue N.
+         <li>The specified mass is added to the unmodified mass of N.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_N_cysteine = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Nterm_peptide.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Nterm_peptide.html
new file mode 100644
index 0000000..617217d
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Nterm_peptide.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_Nterm_peptide</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_Nterm_peptide</h2>
+
+         <ul>
+         <li>Specify a static modification to the N-terminus of all peptides.
+         <li>The specified mass is added to the unmodified N-terminal mass (mass of H or 1.007825).
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_Nterm_peptide = 14.01</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Nterm_protein.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Nterm_protein.html
new file mode 100644
index 0000000..3f41d87
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Nterm_protein.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_Nterm_protein</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_Nterm_protein</h2>
+
+         <ul>
+         <li>Specify a static modification to the N-terminal peptide of each protein entry.
+         <li>The specified mass is added to the unmodified N-terminal mass (mass of H or 1.007825).
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_Nterm_protein = 14.01</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_O_ornithine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_O_ornithine.html
new file mode 100644
index 0000000..32b3b38
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_O_ornithine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_O_ornithine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_O_ornithine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue O.
+         <li>The specified mass is added to the unmodified mass of O.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_O_ornithine = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_P_proline.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_P_proline.html
new file mode 100644
index 0000000..c27daf0
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_P_proline.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_P_proline</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_P_proline</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue P.
+         <li>The specified mass is added to the unmodified mass of P.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_P_proline = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Q_glutamine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Q_glutamine.html
new file mode 100644
index 0000000..37227f2
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Q_glutamine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_Q_glutamine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_Q_glutamine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue Q.
+         <li>The specified mass is added to the unmodified mass of Q.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_Q_glutamine = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_R_arginine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_R_arginine.html
new file mode 100644
index 0000000..d668719
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_R_arginine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_R_arginine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_R_arginine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue R.
+         <li>The specified mass is added to the unmodified mass of R.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_R_arginine = 28.03</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_S_serine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_S_serine.html
new file mode 100644
index 0000000..6f7b93e
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_S_serine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_S_serine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_S_serine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue S.
+         <li>The specified mass is added to the unmodified mass of s.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_S_serine = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_T_threonine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_T_threonine.html
new file mode 100644
index 0000000..68aef74
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_T_threonine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_T_threonine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_T_threonine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue T.
+         <li>The specified mass is added to the unmodified mass of T.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_T_threonine = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_U_user_amino_acid.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_U_user_amino_acid.html
new file mode 100644
index 0000000..ab71e4a
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_U_user_amino_acid.html
@@ -0,0 +1,19 @@
+<html><head><title>comet parameter: add_U_user_amino_acid</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_U_user_amino_acid</h2>
+
+         <ul>
+         <li>This parameter allows users to define their own custom residue. Just
+             encode the letter 'U' in the input FASTA file and specify its mass here.
+         <li>The letter 'U' has no default mass.  So the mass entered here will
+             be its residue mass.
+         <li>The default value is "0.0" if this parameter is missing.  If any peptide
+             contains the letter 'U' while this parameter value is set to 0.0, that
+             peptide will not be analyzed.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_U_user_amino_acid = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_V_valine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_V_valine.html
new file mode 100644
index 0000000..5749b4c
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_V_valine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_V_valine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_V_valine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue V.
+         <li>The specified mass is added to the unmodified mass of V.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_V_valine = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_W_tryptophan.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_W_tryptophan.html
new file mode 100644
index 0000000..ee0558b
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_W_tryptophan.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_W_tryptophan</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_W_tryptophan</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue W.
+         <li>The specified mass is added to the unmodified mass of W.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_W_tryptophan = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_X_user_amino_acid.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_X_user_amino_acid.html
new file mode 100644
index 0000000..6309a5a
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_X_user_amino_acid.html
@@ -0,0 +1,19 @@
+<html><head><title>comet parameter: add_X_user_amino_acid</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_X_user_amino_acid</h2>
+
+         <ul>
+         <li>This parameter allows users to define their own custom residue. Just
+             encode the letter 'X' in the input FASTA file and specify its mass here.
+         <li>The letter 'X' has no default mass.  So the mass entered here will
+             be its residue mass.
+         <li>The default value is "0.0" if this parameter is missing.  If any peptide
+             contains the letter 'X' while this parameter value is set to 0.0, that
+             peptide will not be analyzed.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_X_user_amino_acid = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Y_tyrosine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Y_tyrosine.html
new file mode 100644
index 0000000..d1eb52d
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Y_tyrosine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_Y_tyrosine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_Y_tyrosine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue Y.
+         <li>The specified mass is added to the unmodified mass of Y.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_Y_tyrosine = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Z_user_amino_acid.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Z_user_amino_acid.html
new file mode 100644
index 0000000..dc0d808
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/add_Z_user_amino_acid.html
@@ -0,0 +1,19 @@
+<html><head><title>comet parameter: add_Z_user_amino_acid</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_Z_user_amino_acid</h2>
+
+         <ul>
+         <li>This parameter allows users to define their own custom residue. Just
+             encode the letter 'Z' in the input FASTA file and specify its mass here.
+         <li>The letter 'Z' has no default mass.  So the mass entered here will
+             be its residue mass.
+         <li>The default value is "0.0" if this parameter is missing.  If any peptide
+             contains the letter 'Z' while this parameter value is set to 0.0, that
+             peptide will not be analyzed.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_Z_user_amino_acid = 100.8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/allowed_missed_cleavage.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/allowed_missed_cleavage.html
new file mode 100644
index 0000000..7a03d24
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/allowed_missed_cleavage.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: allowed_missed_cleavage</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: allowed_missed_cleavage</h2>
+
+         <ul>
+         <li>Number of allowed missed enzyme cleavages in a peptide.
+         <li>Parameter is not applied of the no-enzyme option is specified
+         in the <a href="search_enzyme_number.php">search_enzyme_number</a>
+         parameter.
+         <li>The default value is "2" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>allowed_missed_cleavage = 0</tt>     <i>for no missed cleavages</i>
+         <br><tt>allowed_missed_cleavage = 2</tt>     <i>allow two missed cleavages</i>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/clear_mz_range.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/clear_mz_range.html
new file mode 100644
index 0000000..6845854
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/clear_mz_range.html
@@ -0,0 +1,24 @@
+<html><head><title>comet parameter: clear_mz_range</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: clear_mz_range</h2>
+
+         <ul>
+         <li>This parameter is intended for iTRAQ/TMT type data where one might
+         want to remove the reporter ion signals in the MS/MS spectra prior to searching.
+         <li>Defines the m/z range to clear out in each MS/MS spectra
+         <li>This parameter has two decimal values.
+         <li>The first value is the lower mass cutoff and the second value is
+         the high mass cutoff.
+         <li>Valid values are two decimal numbers where the first number must
+         be less or equal to the second number.
+         <li>All peaks between the two decimal values are cleared out.
+         <li>The default value is "0.0 0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>clear_mz_range = 0.0 0.0</tt>     <i>parameter is ignored</i>
+         <br><tt>clear_mz_range = 112.5 121.5</tt>     <i>ignore all peaks between 112.5 and 121.5 m/z for iTRAQ 8-plex</i>
+         <br><tt>clear_mz_range = 125.5 131.5</tt>     <i>ignore all peaks between 125.5 and 131.5 m/z for TMT</i>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/clip_nterm_methionine.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/clip_nterm_methionine.html
new file mode 100644
index 0000000..82826fb
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/clip_nterm_methionine.html
@@ -0,0 +1,22 @@
+<html><head><title>comet parameter: clip_nterm_methionine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: clip_nterm_methionine</h2>
+
+         <ul>
+         <li>This parameter controls whether Comet will automatically remove
+         the N-terminal methionine from a sequence entry.
+         <li>If set to 0, the sequence is analyzed as-is.
+         <li>If set to 1, any sequence with an N-terminal methionine will be
+         analyzed as-is as well as with the methionine removed.  This means
+         that any N-terminal modifications will also apply (if appropriate)
+         to the peptide that is generated after the removal of the methionine.
+         <li>Valid values are 0 and 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>clip_nterm_methionine = 0</tt>
+         <br><tt>clip_nterm_methionine = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/combined.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/combined.html
new file mode 100644
index 0000000..f21a03d
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/combined.html
@@ -0,0 +1,23 @@
+<html><head><title>comet parameter: activation_method</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: activation_method</h2>
+
+         <ul>
+         <li>This parameter specifies which scan types are searched.
+         <li>If "ALL" is specified, no filtering based on the activation method
+         is applied.
+         <li>If any other allowed entry is chosen, only spectra with activation
+         method matching the specified entry are searched.
+         <li>This parameter is valid only for mzXML, mzML and mz5 input.
+         <li>Allowed values are: ALL, CID, ECD, ETD, PQD, HCD, IRMPD
+         <li>The default value is "ALL" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>activation_method = ALL</tt>
+         <br><tt>activation_method = CID</tt>
+         <br><tt>activation_method = ETD</tt>
+         <br><tt>activation_method = HCD</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/comet.params b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/comet.params
new file mode 100644
index 0000000..b7105d5
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/comet.params
@@ -0,0 +1,160 @@
+# comet_version 2013.02 rev. 0
+# Comet MS/MS search engine parameters file.
+# Everything following the '#' symbol is treated as a comment.
+
+database_name = /some/path/db.fasta
+decoy_search = 0                       # 0=no (default), 1=concatenated search, 2=separate search
+
+num_threads = 0                        # 0=poll CPU to set num threads; else specify num threads directly (max 32)
+
+#
+# masses
+#
+peptide_mass_tolerance = 3.00
+peptide_mass_units = 0                 # 0=amu, 1=mmu, 2=ppm
+mass_type_parent = 1                   # 0=average masses, 1=monoisotopic masses
+mass_type_fragment = 1                 # 0=average masses, 1=monoisotopic masses
+precursor_tolerance_type = 0           # 0=MH+ (default), 1=precursor m/z
+isotope_error = 0                      # 0=off, 1=on -1/0/1/2/3 (standard C13 error), 2= -8/-4/0/4/8 (for +4/+8 labeling)
+
+#
+# search enzyme
+#
+search_enzyme_number = 1               # choose from list at end of this params file
+num_enzyme_termini = 2                 # valid values are 1 (semi-digested), 2 (fully digested, default), 8 N-term, 9 C-term
+allowed_missed_cleavage = 2            # maximum value is 5; for enzyme search
+
+#
+# Up to 6 variable modifications are supported
+# format:  <mass> <residues> <0=variable/1=binary> <max mods per a peptide>
+#     e.g. 79.966331 STY 0 3
+#
+variable_mod1 = 15.9949 M 0 3
+variable_mod2 = 0.0 X 0 3
+variable_mod3 = 0.0 X 0 3
+variable_mod4 = 0.0 X 0 3
+variable_mod5 = 0.0 X 0 3
+variable_mod6 = 0.0 X 0 3
+max_variable_mods_in_peptide = 5
+
+#
+# fragment ions
+#
+# ion trap ms/ms:  1.0005 tolerance, 0.4 offset (mono masses), theoretical_fragment_ions = 1
+# high res ms/ms:    0.02 tolerance, 0.0 offset (mono masses), theoretical_fragment_ions = 0
+#
+fragment_bin_tol = 1.0005              # binning to use on fragment ions
+fragment_bin_offset = 0.4              # offset position to start the binning (0.0 to 1.0)
+theoretical_fragment_ions = 1          # 0=default peak shape, 1=M peak only
+use_A_ions = 0
+use_B_ions = 1
+use_C_ions = 0
+use_X_ions = 0
+use_Y_ions = 1
+use_Z_ions = 0
+use_NL_ions = 1                        # 0=no, 1=yes to consider NH3/H2O neutral loss peaks
+use_sparse_matrix = 0
+
+#
+# output
+#
+output_sqtstream = 0                   # 0=no, 1=yes  write sqt to standard output
+output_sqtfile = 0                     # 0=no, 1=yes  write sqt file
+output_txtfile = 0                     # 0=no, 1=yes  write tab-delimited txt file
+output_pepxmlfile = 1                  # 0=no, 1=yes  write pep.xml file
+output_pinxmlfile = 0                  # 0=no, 1=yes  write pin.xml file
+output_outfiles = 0                    # 0=no, 1=yes  write .out files
+print_expect_score = 1                 # 0=no, 1=yes to replace Sp with expect in out & sqt
+num_output_lines = 5                   # num peptide results to show
+show_fragment_ions = 0                 # 0=no, 1=yes for out files only
+
+sample_enzyme_number = 1               # Sample enzyme which is possibly different than the one applied to the search.
+                                       # Used to calculate NTT & NMC in pepXML output (default=1 for trypsin).
+
+#
+# mzXML parameters
+#
+scan_range = 0 0                       # start and scan scan range to search; 0 as 1st entry ignores parameter
+precursor_charge = 0 0                 # precursor charge range to analyze; does not override mzXML charge; 0 as 1st entry ignores parameter
+ms_level = 2                           # MS level to analyze, valid are levels 2 (default) or 3
+activation_method = ALL                # activation method; used if activation method set; allowed ALL, CID, ECD, ETD, PQD, HCD, IRMPD
+
+#
+# misc parameters
+#
+digest_mass_range = 600.0 5000.0       # MH+ peptide mass range to analyze
+num_results = 50                       # number of search hits to store internally
+skip_researching = 1                   # for '.out' file output only, 0=search everything again (default), 1=don't search if .out exists
+max_fragment_charge = 3                # set maximum fragment charge state to analyze (allowed max 5)
+max_precursor_charge = 6               # set maximum precursor charge state to analyze (allowed max 9)
+nucleotide_reading_frame = 0           # 0=proteinDB, 1-6, 7=forward three, 8=reverse three, 9=all six
+clip_nterm_methionine = 0              # 0=leave sequences as-is; 1=also consider sequence w/o N-term methionine
+spectrum_batch_size = 0                # max. # of spectra to search at a time; 0 to search the entire scan range in one loop
+decoy_prefix = DECOY_                  # decoy entries are denoted by this string which is pre-pended to each protein accession
+
+#
+# spectral processing
+#
+minimum_peaks = 10                     # minimum num. of peaks in spectrum to search (default 10)
+minimum_intensity = 0                  # minimum intensity value to read in
+remove_precursor_peak = 0              # 0=no, 1=yes, 2=all charge reduced precursor peaks (for ETD)
+remove_precursor_tolerance = 1.5       # +- Da tolerance for precursor removal
+clear_mz_range = 0.0 0.0               # for iTRAQ/TMT type data; will clear out all peaks in the specified m/z range
+
+#
+# additional modifications
+#
+
+variable_C_terminus = 0.0
+variable_N_terminus = 0.0
+variable_C_terminus_distance = -1      # -1=all peptides, 0=protein terminus, 1-N = maximum offset from C-terminus
+variable_N_terminus_distance = -1      # -1=all peptides, 0=protein terminus, 1-N = maximum offset from N-terminus
+
+add_Cterm_peptide = 0.0
+add_Nterm_peptide = 0.0
+add_Cterm_protein = 0.0
+add_Nterm_protein = 0.0
+
+add_G_glycine = 0.0000                 # added to G - avg.  57.0513, mono.  57.02146
+add_A_alanine = 0.0000                 # added to A - avg.  71.0779, mono.  71.03711
+add_S_serine = 0.0000                  # added to S - avg.  87.0773, mono.  87.03203
+add_P_proline = 0.0000                 # added to P - avg.  97.1152, mono.  97.05276
+add_V_valine = 0.0000                  # added to V - avg.  99.1311, mono.  99.06841
+add_T_threonine = 0.0000               # added to T - avg. 101.1038, mono. 101.04768
+add_C_cysteine = 57.021464             # added to C - avg. 103.1429, mono. 103.00918
+add_L_leucine = 0.0000                 # added to L - avg. 113.1576, mono. 113.08406
+add_I_isoleucine = 0.0000              # added to I - avg. 113.1576, mono. 113.08406
+add_N_asparagine = 0.0000              # added to N - avg. 114.1026, mono. 114.04293
+add_D_aspartic_acid = 0.0000           # added to D - avg. 115.0874, mono. 115.02694
+add_Q_glutamine = 0.0000               # added to Q - avg. 128.1292, mono. 128.05858
+add_K_lysine = 0.0000                  # added to K - avg. 128.1723, mono. 128.09496
+add_E_glutamic_acid = 0.0000           # added to E - avg. 129.1140, mono. 129.04259
+add_M_methionine = 0.0000              # added to M - avg. 131.1961, mono. 131.04048
+add_O_ornithine = 0.0000               # added to O - avg. 132.1610, mono  132.08988
+add_H_histidine = 0.0000               # added to H - avg. 137.1393, mono. 137.05891
+add_F_phenylalanine = 0.0000           # added to F - avg. 147.1739, mono. 147.06841
+add_R_arginine = 0.0000                # added to R - avg. 156.1857, mono. 156.10111
+add_Y_tyrosine = 0.0000                # added to Y - avg. 163.0633, mono. 163.06333
+add_W_tryptophan = 0.0000              # added to W - avg. 186.0793, mono. 186.07931
+add_B_user_amino_acid = 0.0000         # added to B - avg.   0.0000, mono.   0.00000
+add_J_user_amino_acid = 0.0000         # added to J - avg.   0.0000, mono.   0.00000
+add_U_user_amino_acid = 0.0000         # added to U - avg.   0.0000, mono.   0.00000
+add_X_user_amino_acid = 0.0000         # added to X - avg.   0.0000, mono.   0.00000
+add_Z_user_amino_acid = 0.0000         # added to Z - avg.   0.0000, mono.   0.00000
+
+#
+# COMET_ENZYME_INFO _must_ be at the end of this parameters file
+#
+[COMET_ENZYME_INFO]
+0.  No_enzyme              0      -           -
+1.  Trypsin                1      KR          P
+2.  Trypsin/P              1      KR          -
+3.  Lys_C                  1      K           P
+4.  Lys_N                  0      K           -
+5.  Arg_C                  1      R           P
+6.  Asp_N                  0      D           -
+7.  CNBr                   1      M           -
+8.  Glu_C                  1      DE          P
+9.  PepsinA                1      FL          P
+10. Chymotrypsin           1      FWYL        P
+
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/content.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/content.html
new file mode 100644
index 0000000..62b274f
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/content.html
@@ -0,0 +1 @@
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/convertCometPHPs.py b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/convertCometPHPs.py
new file mode 100644
index 0000000..bc19af5
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/convertCometPHPs.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+# AUTHOR: William Stafford Noble
+# CREATE DATE: May Day, 2013
+import sys
+
+USAGE = """USAGE: convertCometPHP.py <php file>
+
+  This is a goofy little helper script that takes as input one of the
+  parameter PHP files distributed with Jimmy Eng's Comet search
+  engine, strips off some of the unnecessary text, adds HTML headers
+  and prints the result to standard output.  The idea is to allow
+  automatic incorporation of any changes Jimmy makes to his
+  documentation into Crux.  This is brittle, because it's based on
+  hand-designed parsing code.  A better solution would be for Jimmy to
+  store his parameter docs in, say, XML, and then use an existing
+  parser.
+
+"""
+
+# Parse the command line.
+if (len(sys.argv) != 2):
+  sys.stderr.write(USAGE)
+  exit(1)
+phpFileName = sys.argv[1]
+
+phpFile = open(phpFileName, "r")
+
+# Find the start of the interesting section.
+for line in phpFile:
+  if ("<h2>" in line):
+
+    # Get the name of the parameter.
+    words = line.rstrip().split()
+    if ((len(words) != 3) or 
+        (words[0] != "<h2>Comet") or 
+        (words[2][-5:] != "</h2>")):
+      sys.stderr.write("Can't parse %s." % line)
+      sys.exit(1)
+    parameter = words[2][:-5]
+
+    # Print the HTML header.
+    sys.stdout.write("<html><head><title>comet parameter: %s</title>\n" % parameter)
+    sys.stdout.write("<link href=\"../crux.css\" rel=\"styleSheet\" type=\"text/css\">\n")
+    sys.stdout.write("</title><body>\n")
+    sys.stdout.write("<h2>Comet parameter: %s</h2>\n" % parameter)
+    break
+
+# Print the body of the file.
+for line in phpFile:
+  if "</div" in line:
+    break
+  sys.stdout.write(line)
+phpFile.close()
+
+sys.stdout.write("</body></html>\n")
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/database_name.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/database_name.html
new file mode 100644
index 0000000..3517f6f
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/database_name.html
@@ -0,0 +1,21 @@
+<html><head><title>comet parameter: database_name</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: database_name</h2>
+
+         <ul>
+         <li>A full or relative path to the sequence database, in FASTA format, to search. Example databases
+         include RefSeq or UniProt.
+         <li>Database can contain amino acid sequences or nucleic acid sequences.  If sequences are amino acid
+         sequences, set the parameter "nucleotide_reading_frame = 0".  If the sequences are nucleic acid
+         sequences, you must instruct Comet to translate these to amino acid sequences.  Do this by setting
+         "nucleotide_reading_frame" to a value between 1 and 9.
+         <li>There is no default value if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>database_name = /usr/local/db/yeast.fasta</tt>
+         <br><tt>database_name = c:\local\db\yeast.fasta</tt>
+         <br><tt>database_name = yeast.fasta</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/decoy_prefix.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/decoy_prefix.html
new file mode 100644
index 0000000..0780628
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/decoy_prefix.html
@@ -0,0 +1,22 @@
+<html><head><title>comet parameter: decoy_prefix</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: decoy_prefix</h2>
+
+         <ul>
+         <li>This parameter specifies the prefix string that is pre-pended to
+         the protein identifier and reported for decoy hits.
+         <li>This parameter is only valid when a <a href="decoy_search.php">decoy_search</a>
+         is performed.
+         <li>For example, if the prefix parameter is set to "decoy_prefix = reverse_",
+         a match to a decoy peptide from protein "ALBU_HUMAN" would return
+         "reverse_ALBU_HUMAN" as the protein identifier.
+         <li>The default value is "DECOY_" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>decoy_prefix = DECOY_</tt>
+         <br><tt>decoy_prefix = rev_</tt>
+         <br><tt>decoy_prefix = --any_string_you_want_without_spaces--</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/decoy_search.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/decoy_search.html
new file mode 100644
index 0000000..ebf7962
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/decoy_search.html
@@ -0,0 +1,29 @@
+<html><head><title>comet parameter: decoy_search</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: decoy_search</h2>
+
+         <ul>
+         <li>This parameter controls whether or not an internal decoy search is performed.
+         <li>Comet generates decoys by reversing each target peptide sequence, keeping the
+             N-terminal or C-terminal amino acid in place (depending on the "sense" value of the
+             digestion enzyme specified by <a href="search_enzyme_number.php">search_enzyme_number</a>).
+             For example, peptide DIGSESTK becomes decoy peptide TSESGIDK for a tryptic search
+             and peptide DVINHKGGA becomes DAGGKHNIV for an Asp-N search.
+         <li>Valid parameter values are 0, 1, or 2:
+            <ul>
+            <li>0 = no decoy search (default)
+            <li>1 = concatenated decoy search.  Target and decoy entries will be scored against
+            each other and a single result is performed for each spectrum query.
+            <li>2 = separate decoy search.  Target and decoy entries will be scored separately
+            and separate target and decoy search results will be reported.
+            </ul>
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>decoy_search = 0</tt>
+         <br><tt>decoy_search = 1</tt>
+         <br><tt>decoy_search = 2</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/digest_mass_range.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/digest_mass_range.html
new file mode 100644
index 0000000..f225dcf
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/digest_mass_range.html
@@ -0,0 +1,23 @@
+<html><head><title>comet parameter: digest_mass_range</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: digest_mass_range</h2>
+
+         <ul>
+         <li>Defines the mass range of peptides to search (based on MH+ or the singly
+         protonated mass).
+         <li>This parameter has two decimal values.
+         <li>The first value is the lower mass cutoff and the second value is
+         the high mass cutoff.
+         <li>Only spectra with experimental MH+ masses in within the defined
+         mass ranges are searched.
+         <li>Valid values are two decimal numbers where the first number must
+         be less or equal to the second number.
+         <li>The default value is "0.0 10000.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>digest_mass_range = 600.0 5000.0</tt>     <i>search only 600.0 to 5000.0 mass range</i>
+         <br><tt>digest_mass_range = 0.0 6500.0</tt>     <i>search all spectra with peptide masses between 0.0 and 6000.0</i>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/footer.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/footer.html
new file mode 100644
index 0000000..62b274f
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/footer.html
@@ -0,0 +1 @@
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/fragment_bin_offset.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/fragment_bin_offset.html
new file mode 100644
index 0000000..052ca15
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/fragment_bin_offset.html
@@ -0,0 +1,31 @@
+<html><head><title>comet parameter: fragment_bin_offset</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: fragment_bin_offset</h2>
+
+         <ul>
+         <li>This parameter controls how each fragment bin of size <a href="fragment_bin_tol.php">fragment_bin_tol</a>
+         is defined in terms of where each bin starts.
+         <li>For example, assume a <a href="fragment_bin_tol.php">fragment_bin_tol</a> of 1.0.  Most intuitively,
+         the fragment bins would be 0.0 to 1.0, 1.0 to 2.0, 2.0 to 3.0, etc.
+         This set of bins corresponds to a fragment_bin_offset of 0.0.  However,
+         consider if we set fragment_bin_offset to 0.5; this would cause the
+         bins to be 0.5 to 1.5, 1.5 to 2.5, 2.5 to 3.5, etc.
+         <li>So this fragment_bin_offset gives one a mechanism to define
+         where each bin starts and is centered.
+         <li>For ion trap data with a <a href="fragment_bin_tol.php">fragment_bin_tol</a> of 1.0005,
+         it is recommended to set fragment_bin_offset to 0.4.
+         <li>For high-res MS/MS data, one might use a <a href="fragment_bin_tol.php">fragment_bin_tol</a> of 0.02
+         and a corresponding fragment_bin_offset of 0.0.
+         <li>Allowed values are between 0.0 and 1.0.  The actual offset value is
+         scaled by the <a href="fragment_bin_tol.php">fragment_bin_tol</a> value.
+         <li>I know this is esoteric and any normal user should not give this
+         parameter any thought beyond using the recommended settings.
+         <li>The default value is "0.4" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>fragment_bin_offset = 0.4</tt>
+         <br><tt>fragment_bin_offset = 0.0</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/fragment_bin_tol.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/fragment_bin_tol.html
new file mode 100644
index 0000000..4ab7e38
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/fragment_bin_tol.html
@@ -0,0 +1,30 @@
+<html><head><title>comet parameter: fragment_bin_tol</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: fragment_bin_tol</h2>
+
+         <ul>
+         <li>This parameter controls the bin size associated with fragment ions.
+         <li>The bin size defines the mass width associated with a single MS/MS peak
+         as it is stored internally in an array element.
+         <li>Although it's not explicitly a fragment ion tolerance, it's probably
+         easiest to think of it as such.
+         <li>Note, there is a direct correlation between the value selected for
+         the fragment_bin_tol and the memory used in a search.  The lower the
+         fragment_bin_tol setting, the more memory a search will use.  A test of
+         4,515 query spectra used ~700MB RAM with a 0.4 fragment_bin_tol value,
+         ~1.5GB RAM with a 0.10 value, and ~9GB RAM with a 0.01 value.  For small
+         fragment_bin_tol values where computer memory becomes an issue, either
+         set <a href="use_sparse_matrix.php">use_sparse_matrix</a> to true and/or
+         make use of the <a href="spectrum_batch_size.php">spectrum_batch_size</a>
+         parameter
+         <li>The minimum allowed value is 0.01.
+         <li>The default value is "1.0005" if the parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>fragment_bin_tol = 1.0005</tt>
+         <br><tt>fragment_bin_tol = 0.4</tt>
+         <br><tt>fragment_bin_tol = 0.02</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/head.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/head.html
new file mode 100644
index 0000000..62b274f
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/head.html
@@ -0,0 +1 @@
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/index.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/index.html
new file mode 100644
index 0000000..62b274f
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/index.html
@@ -0,0 +1 @@
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/isotope_error.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/isotope_error.html
new file mode 100644
index 0000000..4409115
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/isotope_error.html
@@ -0,0 +1,28 @@
+<html><head><title>comet parameter: isotope_error</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: isotope_error</h2>
+
+         <ul>
+         <li>This parameter controls whether the <a href="peptide_mass_tolerance.php">peptide_mass_tolerance</a>
+         takes into account possible isotope errors in the precursor mass measurement.
+         <li>It is possible that an accurately read precursor mass is not measured on the monoisotopic
+         peak of a precursor isotopic pattern. In these cases, the precursor mass is measured on the
+         first isotope peak (one C13 atom) or possibly even the second or third isotope peak. To address
+         this problem, this "isotope_error" parameter allows you to perform an accurate mass search
+         (say 10 ppm) even if the precursor mass measurement is off by one or more C13 offsets.
+         <li>Valid values are 0, 1, and 2:
+            <ul>
+            <li>0 performs no isotope error searches
+            <li>1 searches -1, 0, +1, +2, and +3 isotope offsets
+            <li>2 searches -8, -4, 0, +4, +8 isotope offsets (for +4/+8 stable isotope labeling)
+            </ul>
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>isotope_error = 0</tt>
+         <br><tt>isotope_error = 1</tt>
+         <br><tt>isotope_error = 2</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/mass_type_fragment.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/mass_type_fragment.html
new file mode 100644
index 0000000..469c36d
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/mass_type_fragment.html
@@ -0,0 +1,20 @@
+<html><head><title>comet parameter: mass_type_fragment</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: mass_type_fragment</h2>
+
+         <ul>
+         <li>Controls the mass type, average or monoisotopic, applied to fragment ion calculations.
+         <li>Valid values are 0 or 1:
+            <ul>
+            <li>0 for average masses
+            <li>1 for monoisotopic masses
+            </ul>
+         <li>The default value is "1" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>mass_type_fragment = 0</tt>
+         <br><tt>mass_type_fragment = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/mass_type_parent.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/mass_type_parent.html
new file mode 100644
index 0000000..c242786
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/mass_type_parent.html
@@ -0,0 +1,20 @@
+<html><head><title>comet parameter: mass_type_parent</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: mass_type_parent</h2>
+
+         <ul>
+         <li>Controls the mass type, average or monoisotopic, applied to peptide mass calculations.
+         <li>Valid values are 0 or 1:
+            <ul>
+            <li>0 for average masses
+            <li>1 for monoisotopic masses
+            </ul>
+         <li>The default value is "1" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>mass_type_parent = 0</tt>
+         <br><tt>mass_type_parent = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/max_fragment_charge.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/max_fragment_charge.html
new file mode 100644
index 0000000..0e6dee4
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/max_fragment_charge.html
@@ -0,0 +1,28 @@
+<html><head><title>comet parameter: max_fragment_charge</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: max_fragment_charge</h2>
+
+         <ul>
+         <li>This parameter sets the maximum fragment charge state that will
+         be considered in the analysis.
+         <li>Typically, the fragment charge state range that is analyzed is
+         from 1+ to one charge less than the precursor charge state.
+         <li>For high precursor charge states (i.e. 6+), the default behavior
+         would analyze fragment ions with 1+ through 5+ charges on them.  This
+         parameter is a mechanism to limit the fragment charge range that is
+         analyzed.
+         <li>For example, if max_fragment_charge is set to 3 then the maximum
+         fragment charge state that will be analyzed is 3+.  However, the default
+         rule will still limit 1+ and 2+ precursor ions to only have 
+         1+ fragments considered.  And similarly 3+ precursors will still only
+         have 1+ and 2+ fragments considered.
+         <li>Valid values are any non-zero integer.
+         <li>The default value is "3" if this parameter is missing.  A maximum
+         allowed value of "5" is enforced for this parameter.
+         </ul>
+
+         <p>Example:
+         <br><tt>max_fragment_charge = 3</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/max_precursor_charge.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/max_precursor_charge.html
new file mode 100644
index 0000000..269cd79
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/max_precursor_charge.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: max_precursor_charge</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: max_precursor_charge</h2>
+
+         <ul>
+         <li>This parameter defines the maximum precursor charge state that
+         will be analyzed.
+         <li>Only spectra with this number of precursor charges or less will be searched.
+         <li>Valid values are any integer greater than 1.
+         <li>The default value is "6" if this parameter is missing.  A maximum
+         allowed value of "9" is enforced for this parameter.
+         </ul>
+
+         <p>Example:
+         <br><tt>max_precursor_charge = 5</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/max_variable_mods_in_peptide.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/max_variable_mods_in_peptide.html
new file mode 100644
index 0000000..edcbcd7
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/max_variable_mods_in_peptide.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: max_variable_mods_in_peptide</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: max_variable_mods_in_peptide</h2>
+
+         <ul>
+         <li>Specifies the total/maximum number of residues that can be modified in a peptide.
+         <li>As opposed to specifying the maximum number of variable modifications for each
+             of the 6 possible variable modifications, this entry limits the global number
+             of variable mods possible in each peptide.
+         <li>The default value is "10" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>max_variable_mods_in_peptide = 6</tt>
+         <br><tt>max_variable_mods_in_peptide = 10</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/minimum_intensity.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/minimum_intensity.html
new file mode 100644
index 0000000..f0c1fe5
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/minimum_intensity.html
@@ -0,0 +1,23 @@
+<html><head><title>comet parameter: minimum_intensity</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: minimum_intensity</h2>
+
+         <ul>
+         <li>A floating point number indicating the minimum intensity value
+         for input the input peaks.
+         <li>If an experimental MS/MS peak intensity is less than this value,
+         it will not be read in and used in the analysis.
+         <li>This is one mechanism to get rid of systemmatic background noise
+         that has a near contant peak intensity.
+         <li>If a peak does not pass this minimum intensity threshold, it will
+         also not be counted towards the <a href="minimum_peaks.php">minimum_peaks</a>
+         parameter.
+         <li>Valid values are any floating point number.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>minimum_intensity = 100.0</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/minimum_peaks.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/minimum_peaks.html
new file mode 100644
index 0000000..0650c83
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/minimum_peaks.html
@@ -0,0 +1,21 @@
+<html><head><title>comet parameter: minimum_peaks</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: minimum_peaks</h2>
+
+         <ul>
+         <li>An integer value indicating the minimum number of m/z-intensity pairs
+         that must be present in a spectrum before it is searched.
+         <li>This parameter can be used to avoid searching nearly sparse spectra
+         that will not likely yield an indentification.
+         <li>This parameter is checked against the spectrum after
+         <a href="clear_mz_range.php">clear_mz_range</a> is applied but before
+         any other spectral processing occurs (i.e.  <a href="remove_precursor_peak.php">remove_precursor_peak</a>).
+         <li>Valid values are any integer number.
+         <li>The default value is "10" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>minimum_peaks = 10</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/ms_level.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/ms_level.html
new file mode 100644
index 0000000..16d19b1
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/ms_level.html
@@ -0,0 +1,20 @@
+<html><head><title>comet parameter: ms_level</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: ms_level</h2>
+
+         <ul>
+         <li>This parameter specifies which scans are searched.
+         <li>An input value of 2 will search MS/MS scans.
+         <li>An input value of 3 will search MS3 scans.
+         <li>This parameter is only valid for mzXML, mzML, and mz5 input files.
+         <li>Allowed values are 2 or 3.
+         <li>The default value is "2" if this parameter is missing or any value
+         other than 2 or 3 is entered.
+         </ul>
+
+         <p>Example:
+         <br><tt>ms_level = 2</tt>
+         <br><tt>ms_level = 3</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/nucleotide_reading_frame.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/nucleotide_reading_frame.html
new file mode 100644
index 0000000..4b5b6c3
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/nucleotide_reading_frame.html
@@ -0,0 +1,28 @@
+<html><head><title>comet parameter: nucleotide_reading_frame</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: nucleotide_reading_frame</h2>
+
+         <ul>
+         <li>This parameter is used to search nucleotide sequence databases.
+         <li>It controls how the nucleotides are translated specifically
+         which sets of reading frames are translated.
+         <li>Valid values are 0 through 9.
+         <li>Set this parameter to 0 for a protein sequence database.
+         <li>Set this parameter to 1 to search the 1st forward reading frame.
+         <li>Set this parameter to 2 to search the 2nd forward reading frame.
+         <li>Set this parameter to 3 to search the 3rd forward reading frame.
+         <li>Set this parameter to 4 to search the 1st reverse reading frame.
+         <li>Set this parameter to 5 to search the 2nd reverse reading frame.
+         <li>Set this parameter to 6 to search the 3rd reverse reading frame.
+         <li>Set this parameter to 7 to search all 3 forward reading frames.
+         <li>Set this parameter to 8 to search all 3 reverse reading frames.
+         <li>Set this parameter to 9 to search all 6 reading frames.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>nucleotide_reading_frame = 0</tt>
+         <br><tt>nucleotide_reading_frame = 9</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/num_enzyme_termini.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/num_enzyme_termini.html
new file mode 100644
index 0000000..2af8498
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/num_enzyme_termini.html
@@ -0,0 +1,28 @@
+<html><head><title>comet parameter: num_enzyme_termini</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: num_enzyme_termini</h2>
+
+         <ul>
+         <li>This parameter specifies the number of enzyme termini a peptide must
+         have.
+         <li>For example, if trypsin were specified as the search enzyme, only 
+         fully tryptic peptides would be analyzed if "num_enzyme_termini = 2"
+         whereas semi-tryptic peptides would be analyzed if "num_enzyme_termini = 1".
+         <li>This parameter is unused if a no-enzyme search is specified.
+         <li>Valid values are 1, 2, 8, 9.
+         <li>Set this parameter to 1 for a semi-enzyme search.
+         <li>Set this parameter to 2 for a full-enzyme search.
+         <li>Set this parameter to 8 for a semi-enzyme search, unspecific cleavage on peptide's N-terminus.
+         <li>Set this parameter to 9 for a semi-enzyme search, unspecific cleavage on peptide's C-terminus.
+         <li>The default value is "2" if this parameter is missing.
+         </ul>
+
+
+         <p>Example:
+         <br><tt>num_enzyme_termini = 1</tt>
+         <br><tt>num_enzyme_termini = 2</tt> 
+         <br><tt>num_enzyme_termini = 8</tt> 
+         <br><tt>num_enzyme_termini = 9</tt> 
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/num_output_lines.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/num_output_lines.html
new file mode 100644
index 0000000..39b1bdc
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/num_output_lines.html
@@ -0,0 +1,26 @@
+<html><head><title>comet parameter: num_output_lines</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: num_output_lines</h2>
+
+         <ul>
+         <li>This parameter controls the number of search result
+         hits (peptides) that are reported for each spectrum query.
+         <li>If you are only interested in seeing one top hit each
+         per query, set this value to 1.
+         <li>This parameter value cannot be larger than the value
+         entered for "<a href="num_results.php">num_results</a>"
+         which itself is limited to a maximum value of 100.
+         <li>This parameter does not apply to the text output as
+         defined by "<a href="output_txtfile.php">output_txtfile</a>".
+         <li>Valid values are any positive integer 1 or greater.
+         <li>If a value less than 1 is entered, this parameter is set to 1.
+         <li>The default value is "10" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>num_output_lines = 1</tt>
+         <br><tt>num_output_lines = 5</tt>
+         <br><tt>num_output_lines = 10</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/num_results.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/num_results.html
new file mode 100644
index 0000000..8cffff2
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/num_results.html
@@ -0,0 +1,22 @@
+<html><head><title>comet parameter: num_results</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: num_results</h2>
+
+         <ul>
+         <li>This parameter controls the number of peptide search results that
+         are stored internally.
+         <li>Depending on what post-processing tools are used, one may want to
+         set this to the same value as <a href="num_output_lines.php">num_output_lines</a>.
+         <li>When this parameter is set to a value greater than
+         <a href="num_output_lines.php">num_output_lines</a>, it allows
+         the SpRank value to span a larger range which may be helpful for
+         tools like PeptideProphet or Percolator (not likely though).
+         <li>Valid values are any integer between 1 and 100.
+         <li>The default value is "100" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>num_results = 50</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/num_threads.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/num_threads.html
new file mode 100644
index 0000000..2eb596f
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/num_threads.html
@@ -0,0 +1,20 @@
+<html><head><title>comet parameter: num_threads</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: num_threads</h2>
+
+         <ul>
+         <li>This parameter controls the number of processing threads that will be spawned for a search.
+         Ideally the number of threads is set to the same value as the number of CPU cores available.
+         <li>Valid values range for this parameter are numbers ranging from 0 to 64.
+         <li>A value of 0 will cause Comet to poll the system and launch the same number of threads
+         as CPU cores.
+         <li>To set an explicit thread count, enter any value between 1 and 64.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>num_threads = 0</tt>
+         <br><tt>num_threads = 8</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_outfiles.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_outfiles.html
new file mode 100644
index 0000000..5c10786
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_outfiles.html
@@ -0,0 +1,16 @@
+<html><head><title>comet parameter: output_outfiles</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: output_outfiles</h2>
+
+         <ul>
+         <li>Controls whether to output search results as individual .out files.
+         <li>Valid values are 0 (do not output) or 1 (output).
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>output_outfiles = 0</tt>
+         <br><tt>output_outfiles = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_pepxmlfile.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_pepxmlfile.html
new file mode 100644
index 0000000..25980bd
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_pepxmlfile.html
@@ -0,0 +1,16 @@
+<html><head><title>comet parameter: output_pepxmlfile</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: output_pepxmlfile</h2>
+
+         <ul>
+         <li>Controls whether to output search results in a pepXML file.
+         <li>Valid values are 0 (do not output) or 1 (output).
+         <li>The default value is "1" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>output_pepxmlfile = 0</tt>
+         <br><tt>output_pepxmlfile = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_percolatorfile.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_percolatorfile.html
new file mode 100644
index 0000000..aca9843
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_percolatorfile.html
@@ -0,0 +1,19 @@
+<html><head><title>comet parameter: output_percolatorfile</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: output_percolatorfile</h2>
+
+         <ul>
+         <li>Controls whether to output search results in a <a href="http://per-colator.com">Percolator's</a>
+         tab-delimited input format.
+         <li>Valid values are 0 (do not output) or 1 (output).
+         <li>The default value is "0" if this parameter is missing.
+         <li>The created file will have a ".tsv" file extension.
+         <li>This parameter replaces the now defunct "output_pinxmlfile".
+         </ul>
+
+         <p>Example:
+         <br><tt>output_percolatorfile = 0</tt>
+         <br><tt>output_percolatorfile = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_sqtfile.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_sqtfile.html
new file mode 100644
index 0000000..5a18492
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_sqtfile.html
@@ -0,0 +1,16 @@
+<html><head><title>comet parameter: output_sqtfile</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: output_sqtfile</h2>
+
+         <ul>
+         <li>Controls whether to output search results into an SQT file (.sqt).
+         <li>Valid values are 0 (do not output) or 1 (output).
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>output_sqtfile = 0</tt>
+         <br><tt>output_sqtfile = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_sqtstream.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_sqtstream.html
new file mode 100644
index 0000000..8ed1505
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_sqtstream.html
@@ -0,0 +1,19 @@
+<html><head><title>comet parameter: output_sqtstream</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: output_sqtstream</h2>
+
+         <ul>
+         <li>Controls whether to output search results to standard out
+         (i.e. to the screen unless otherwise directed) in SQT format.
+         <li>Just the search results (M and L lines and not any H lines)
+         are output to standard out.
+         <li>Valid values are 0 (do not output) or 1 (output).
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>output_sqtstream = 0</tt>
+         <br><tt>output_sqtstream = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_suffix.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_suffix.html
new file mode 100644
index 0000000..dca2425
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_suffix.html
@@ -0,0 +1,25 @@
+<html><head><title>comet parameter: output_suffix</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: output_suffix</h2>
+
+         <ul>
+         <li>This parameter specifies the suffix string that is appended to
+         the base output name for the pep.xml, pin.xml, txt and sqt output files.
+         <li>Use this parameter to give output files a unique suffix base name.
+         <li>For example, if the output_suffix parameter is set to
+         "output_suffix = _000", then a search of the file base.mzXML
+         will generate output files named base_000.pep.xml, base_000.pin.xml,
+         base_000.txt, and/or base_000.sqt.
+         <li>Note that using this parameter could break downstream tools that
+         expect the output base name to be the same as the input file base name.
+         <li>The default value is blank if this parameter is missing i.e.
+         base.mzXML will generate base.pep.xml.
+         </ul>
+
+         <p>Example:
+         <br><tt>output_suffix = </tt>
+         <br><tt>output_suffix = _some_suffix</tt>
+         <br><tt>output_suffix = any_string_you_want_without_spaces</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_txtfile.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_txtfile.html
new file mode 100644
index 0000000..390b363
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/output_txtfile.html
@@ -0,0 +1,52 @@
+<html><head><title>comet parameter: output_txtfile</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: output_txtfile</h2>
+
+         <ul>
+         <li>Controls whether to output search results into a tab-delimited text file (.txt).
+         <li>Valid values are 0 (do not output) or 1 (output).
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>output_txtfile = 0</tt>
+         <br><tt>output_txtfile = 1</tt>
+
+         <p>Here's snippet of sample output below.  The first line of the output file is a
+         header line which contains the Comet version, search start time/date, and search
+         database.  The second line contains the column headers.  Only the top hit for each
+         search is reported in the text output; the parameter
+         "<a href="num_output_lines.php">num_output_lines</a>" does not apply to the text output.
+
+<pre>CometVersion 2013.02 rev. 0   100  10/04/2013, 08:37:09 AM  /net/pr/vol1/ProteomicsResource/dbase/SGD/SGDyeast.fasta.20101117
+scan  charge  exp_neutral_mass  calc_neutral_mass  e-value  xcorr  delta_cn  sp_score  ions_matched  ions_total  plain_peptide  peptide  prev_aa  next_aa  protein  duplicate_protein_count
+5129  1  599.9698  602.3136  1.73E+01  0.6847  0.0995  44.3  4  8  DAKNR  R.DAKNR.I   R  I  YML019W  0
+5385  1  601.3290  603.3228  1.73E+01  0.5316  0.1905  70.9  3  8  NLTEK  R.NLTEK.T   R  T  YBL024W  1
+5496  1  601.3358  599.3755  1.67E+01  0.4527  0.1315  6.6   2  8  VVNIR  R.VVNIR.L   R  L  YJL012C  0
+5430  1  602.3329  605.2591  2.33E+01  0.4222  0.0854  73.2  4  8  DVGCR  K.DVGCR.I   K  I  YER085C  0
+5829  1  616.4184  615.3414  5.26E+01  0.4321  0.0658  8.5   2  8  KPPMK  -.KPPM*K.Q  -  Q  DECOY__YBR025C  2
+
+</pre></p>
+
+         <p>Comet's text output is different if Comet was compiled for
+         <a href="noble.gs.washington.edu/proj/crux/">Crux</a> compatibility.
+         Here's the example text output if you are running Comet in Crux.
+         Note that up to 5 hits per spectrum are reported and there is just
+         a single column header line.
+
+<pre>scan  charge  spectrum precursor m/z  spectrum neutral mass  matches/spectrum  peptide mass  e-value  xcorr score  xcorr rank  delta_cn  sp score  sp rank  b/y ions matched  b/y ions total  sequence  flanking aa  protein id
+5129  1  600.9771  599.9698  5440  602.3136  1.73E+01  0.6847  1  0.0995  44.3   19  4  8   DAKNR   RI  YML019W
+5129  1  600.9771  599.9698  5440  602.3249  1.96E+01  0.6714  2  0.1016  46.1   17  5  10  RTGGGR  RI  YGR054W
+5129  1  600.9771  599.9698  5440  602.3136  1.99E+01  0.6698  3  0.1131  77.6   6   5  8   NISNR   KV  YMR033W
+5129  1  600.9771  599.9698  5440  601.2820  2.16E+01  0.6612  4  0.1240  38.6   22  4  8   EPSNR   RD  YPL161C
+5129  1  600.9771  599.9698  5440  600.3231  0.00E+00  0.6532  5  0.1389  104.6  3   6  8   IESPR   KM  YLL021W
+5385  1  602.3363  601.3290  6518  603.3228  1.73E+01  0.5316  1  0.1905  70.9   2   3  8   NLTEK   RT  YBL024W
+5385  1  602.3363  601.3290  6518  600.3707  1.86E+01  0.5249  2  0.2022  31.0   8   3  8   ARNIK   KT  DECOY_YIL159W
+5385  1  602.3363  601.3290  6518  602.3249  2.02E+01  0.5173  3  0.2134  47.4   4   3  8   ARNSR   KI  DECOY_YLL040C
+5385  1  602.3363  601.3290  6518  601.3184  2.19E+01  0.5100  4  0.2148  7.1    19  2  10  GAVNNK  KS  DECOY_YMR125W
+5385  1  602.3363  601.3290  6518  599.4119  0.00E+00  0.5091  5  0.2148  28.3   9   3  8   ALLKR   RI  YML107C
+</pre></p>
+
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/override_charge.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/override_charge.html
new file mode 100644
index 0000000..b93b267
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/override_charge.html
@@ -0,0 +1,25 @@
+<html><head><title>comet parameter: override_charge</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: override_charge</h2>
+
+         <ul>
+         <li>This parameter specifies the whether to override existing precursor
+         charge state information when present in the files with the charge
+         range specified by the
+         "<a href="precursor_charge.php">precursor_charge</a>" parameter.
+         <li>Valid values are 0 and 1.
+         <li>To keep any known charge state values in the input files,
+         set the value to 0.
+         <li>To ignore any known charge values in the input files and instead
+         use the charge state range specified by the
+         "<a href="precursor_charge.php">precursor_charge</a>" parameter,
+         set the value to 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>override_charge = 0</tt>
+         <br><tt>override_charge = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/peptide_mass_tolerance.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/peptide_mass_tolerance.html
new file mode 100644
index 0000000..d795294
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/peptide_mass_tolerance.html
@@ -0,0 +1,17 @@
+<html><head><title>comet parameter: peptide_mass_tolerance</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: peptide_mass_tolerance</h2>
+
+         <ul>
+         <li>This parameter controls the mass tolerance value.
+         <li>The mass tolerance is set at +/- the specified number i.e. an entered value of "1.0" applies a -1.0 to +1.0 tolerance.
+         <li>The units of the mass tolerance is controlled by the parameter "<a href="peptide_mass_units.php">peptide_mass_units</a>".
+         <li>The default value is "1.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>peptide_mass_tolerance = 3.0</tt>
+         <br><tt>peptide_mass_tolerance = 10.0</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/peptide_mass_units.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/peptide_mass_units.html
new file mode 100644
index 0000000..f2483a2
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/peptide_mass_units.html
@@ -0,0 +1,20 @@
+<html><head><title>comet parameter: peptide_mass_units</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: peptide_mass_units</h2>
+
+         <ul>
+         <li>This parameter controls the units applied to the <a href="peptide_mass_tolerance.php">peptide_mass_tolerance</a> parameter.
+         <li>Valid values are 0, 1, and 2.
+         <li>Set this parameter to 0 for amu.
+         <li>Set this parameter to 1 for mmu.
+         <li>Set this parameter to 2 for ppm.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>peptide_mass_units = 0</tt>
+         <br><tt>peptide_mass_units = 1</tt>
+         <br><tt>peptide_mass_units = 2</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/precursor_charge.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/precursor_charge.html
new file mode 100644
index 0000000..752671a
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/precursor_charge.html
@@ -0,0 +1,30 @@
+<html><head><title>comet parameter: precursor_charge</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: precursor_charge</h2>
+
+         <ul>
+         <li>This parameter specifies the precursor charge range to search.
+         <li>This parameter expects to integer values as input.
+         <li>If the first input value is 0 then this parameter is ignored and all charge
+         states are searched
+         <li>Only in the case where a spectrum does not have a precursor charge will all charges
+         in the specified charge range be searched.
+         <li>If the first input value is not 0 then all charge states between (and inclusive of)
+         the first and second input values are searched.  Again, only for those spectra with no
+         specified precursor charge state.
+         <li>If a precursor charge is present for a particular spectrum, this parameter will
+         not override that charge state and that spectrum will always be searched.
+         <li>With the default "0 0" values and a spectrum with no precursor charge, Comet will
+         either search the spectrum as a 1+ or a 2+/3+.
+         <li>The default value is "0 0" if this parameter is missing.
+
+         </ul>
+
+         <p>Example:
+         <br><tt>precursor_charge = 0 0</tt>     <i>search all charge ranges</i>
+         <br><tt>precursor_charge = 0 2</tt>     <i>search all charge ranges (because first entry is 0)</i>
+         <br><tt>precursor_charge = 2 6</tt>     <i>search 2+ to 6+ precursors</i>
+         <br><tt>precursor_charge = 3 3</tt>     <i>search 3+ precursors</i>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/print_expect_score.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/print_expect_score.html
new file mode 100644
index 0000000..122ad18
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/print_expect_score.html
@@ -0,0 +1,24 @@
+<html><head><title>comet parameter: print_expect_score</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: print_expect_score</h2>
+
+         <ul>
+         <li>A boolean flag this determines whether or not the expectation
+         score (E-value) is reported in .out and SQT formats.  Note that the
+         E-value is always reported in pepXML output.
+         <li>This parameter is only pertinant for results reported in .out and SQT formats.
+         <li>If expect scores are chosen to be reported (i.e. value set to 1), they will replace
+         the number reported for the traditional "spscore" i.e. "spscore" will
+         be replaced by an E-value.  Also an expectation value histogram will
+         be output at the end of each .out file; this histogram is not present
+         for SQT output.
+         <li>Valid values are 0 and 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>print_expect_score = 0</tt>
+         <br><tt>print_expect_score = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/remove_precursor_peak.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/remove_precursor_peak.html
new file mode 100644
index 0000000..dab6a7a
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/remove_precursor_peak.html
@@ -0,0 +1,25 @@
+<html><head><title>comet parameter: remove_precursor_peak</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: remove_precursor_peak</h2>
+
+         <ul>
+         <li>This parameter controls excluding/removing any precursor signals
+         from the input MS/MS spectrum.
+         <li>An input value of 0 will not perform any precursor removal.
+         <li>An input value of 1 will remove all peaks around the precursor m/z.
+         <li>An input value of 2 will remove all charge reduced precursor peaks
+         as expected to be present for ETD/ECD spectra.
+         <li>This parameter works in conjuction with
+         <a href="remove_precursor_tolerance.php">remove_precursor_tolerance</a>
+         to specify the tolerance around each precuror m/z that will be removed.
+         <li>Valid values are 0, 1, and 2.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>remove_precursor_peak = 0</tt>
+         <br><tt>remove_precursor_peak = 1</tt>
+         <br><tt>remove_precursor_peak = 2</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/remove_precursor_tolerance.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/remove_precursor_tolerance.html
new file mode 100644
index 0000000..857d504
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/remove_precursor_tolerance.html
@@ -0,0 +1,19 @@
+<html><head><title>comet parameter: remove_precursor_tolerance</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: remove_precursor_tolerance</h2>
+
+         <ul>
+         <li>This parameter specifies the mass tolerance around each precursor m/z
+         that would be removed when the <a href="remove_precursor_peak.php">remove_precursor_peak</a>
+         option is invoked.
+         <li>The mass tolerance units is in Da (or Th if you prefer).
+         <li>Any non-negative, non-zero floating point number is valid.
+         <li>The default value is "1.5" if this parameter is missing.
+         </ul>
+
+        <p>Example:
+         <br><tt>remove_precursor_tolerance = 0.75</tt>
+         <br><tt>remove_precursor_tolerance = 1.5</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/require_variable_mod.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/require_variable_mod.html
new file mode 100644
index 0000000..eeef8ed
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/require_variable_mod.html
@@ -0,0 +1,22 @@
+<html><head><title>comet parameter: require_variable_mod</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: require_variable_mod</h2>
+
+         <ul>
+         <li>This parameter takes in one input value.
+         <li>The input value is an integer that controls whether the analyzed peptides
+             must contain at least one variable modification i.e. force all reported peptides
+             to have a variable modifiation.
+             <ul>
+             <li>0 = consider both modified and unmodified peptides (default)
+             <li>1 = analyze only peptides that contain a variable modification
+             </ul>
+         </ul>
+
+         <p>Example:
+         <br><tt>require_variable_mod = 0</tt>     ... <i>modifications not required</i>
+         <br><tt>require_variable_mod = 1</tt>     ... <i>peptides must contain a variable modification</i>
+
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/runall b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/runall
new file mode 100644
index 0000000..b2ec284
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/runall
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+
+
+# The parameters files are in the binary release of comet, in a file
+# called paramters_<release>.zip.
+
+to_remove=`ls *.html | grep -v index.html | grep -v header.html | grep -v footer.html | grep -v topmenu.html | grep -v head.html` 
+
+rm $to_remove
+
+rm -rf ~/tmp
+mkdir ~/tmp
+svn checkout svn://svn.code.sf.net/p/comet-ms/code/www/parameters/parameters_201501 ~/tmp/comet-params
+
+files=`ls ~/tmp/comet-params/*.php`
+
+for file in $files; do
+  if [[ -e $file ]]; then # Some symlinks point to missing files.
+    echo Converting $file
+    basename=`basename $file`
+    ./convertCometPHPs.py $file > ${basename%.php}.html
+  fi
+done
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/sample_enzyme_number.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/sample_enzyme_number.html
new file mode 100644
index 0000000..14beb94
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/sample_enzyme_number.html
@@ -0,0 +1,22 @@
+<html><head><title>comet parameter: sample_enzyme_number</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: sample_enzyme_number</h2>
+
+         <ul>
+         <li>This parameter is relevant only for pepXML output i.e. when
+         <a href="output_pepxmlfile.php">output_pepxmlfile</a> is set to 1.
+         <li>The pepXML format encodes the enzyme that is applied to the sample
+         i.e. trypsin.  This enzyme is written to the "sample_enzyme" element.
+         <li>The sample enzyme could be different from the search enzyme i.e.
+         the sample enzyme is "trypsin" yet the search enzyme is "No-enzyme"
+         for a non-specific search.  Hence the need for this separate parameter.
+         <li>Valid values are any integer represented in the enzyme list.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>sample_enzyme_number = 1</tt>
+         <br><tt>sample_enzyme_number = 3</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/scan_range.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/scan_range.html
new file mode 100644
index 0000000..28f0989
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/scan_range.html
@@ -0,0 +1,23 @@
+<html><head><title>comet parameter: scan_range</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: scan_range</h2>
+
+         <ul>
+         <li>Defines the scan range to search.  Only spectra within (and inclusive) of the specified
+         scan range are searched.
+         <li>This parameter works only with mzXML and mzML inputs files.
+         <li>Two digits are specified for this parameter.  The first digit is the start scan and the
+         second digit is the end scan.
+         <li>When the start scan is set to 0, this parameter setting is ignored irrespective of what
+         the end scan is set to.
+         <li>When the end scan is less than the start scan, this parameter setting is ignored.
+         <li>The default value is "0 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>scan_range = 0 0</tt>     <i>search all scans</i>
+         <br><tt>scan_range = 0 1000</tt>     <i>search all scans (because first entry is 0)</i>
+         <br><tt>scan_range = 1000 1500</tt>     <i>search only scans 1000 to 1500</i>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/search_enzyme_number.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/search_enzyme_number.html
new file mode 100644
index 0000000..09da2d8
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/search_enzyme_number.html
@@ -0,0 +1,46 @@
+<html><head><title>comet parameter: search_enzyme_number</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: search_enzyme_number</h2>
+
+         <ul>
+         <li>The search enzyme is specified by this parameter.
+         <li>The list of search enzymes is specified at the end of the comet.params file
+         beginning with the line <tt>[COMET_ENZYME_INFO]</tt>.  The actual enzyme list and
+         digestion parameters are read here.  So one can edit/add/delete enzyme definitions
+         simply be changing the enzyme information.
+         <li>This parameter works in conjection with the <a href="num_enzyme_termini.php">num_enzyme_termini</a>
+         parameter to define the cleavage rule for fully-digested vs. semi-digested search options.
+         <li>This parameter works in conjection with the <a href="allowed_missed_cleavage.php">allowed_missed_cleavage</a>
+         parameter to define the miss cleavage rule.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>search_enzyme_number = 0</tt>     <i>typically no-enzyme</i>
+         <br><tt>search_enzyme_number = 1</tt>     <i>typically trypsin</i></p>
+
+
+         <li>The format of the parameter definition looks like the following:
+         <p><pre>[COMET_ENZYME_INFO]
+0.  No_enzyme              0      -           -
+1.  Trypsin                1      KR          P
+2.  Trypsin/P              1      KR          -
+3.  Lys_C                  1      K           P
+4.  Lys_N                  0      K           -
+5.  Arg_C                  1      R           P
+6.  Asp_N                  0      D           -
+7.  CNBr                   1      M           -
+8.  Glu_C                  1      DE          P
+9.  PepsinA                1      FL          P
+10. Chymotrypsin           1      FWYL        P</pre></p>
+
+         <p>The first column of the parameter definition is the enzyme number. This number list
+         must start from 0 and sequentially increase by 1.  The second column is the enzyme name;
+         no spaces are allowed in this name field.  The third column is the digestion "sense"
+         i.e. a value of "0" specifies cleavage N-teriminal to (before) the specified residues
+         in column 4 and a value of "1" specifies cleavage C-terminal to (after) the specified
+         residues in column 4.  Column 4 contains the residue(s) that the enzyme cleaves at.
+         Column 5 contains the flanking residue(s) that negate cleavage.
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/show_fragment_ions.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/show_fragment_ions.html
new file mode 100644
index 0000000..bb1f1cc
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/show_fragment_ions.html
@@ -0,0 +1,20 @@
+<html><head><title>comet parameter: show_fragment_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: show_fragment_ions</h2>
+
+         <ul>
+         <li>This parameter affects .out files only i.e.
+         <a href="output_outfiles.php">output_outfiles</a> set to 1.
+         <li>This parameter controls whether or not the theoretical
+         fragment ion masses for the top peptide hit are calculated
+         and dislayed at the end of an .out file.
+         <li>Valid values are 0 and 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>show_fragment_ions = 0</tt>
+         <br><tt>show_fragment_ions = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/skip_researching.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/skip_researching.html
new file mode 100644
index 0000000..4a2957b
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/skip_researching.html
@@ -0,0 +1,25 @@
+<html><head><title>comet parameter: skip_researching</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: skip_researching</h2>
+
+         <ul>
+         <li>This parameter is valid only when <a href="output_outfiles.php">output_outfiles</a> is set
+         to 1 and each of
+         <a href="output_pepxmlfile.php">output_pepxmlfile</a>,
+         <a href="output_sqtfile.php">output_sqtfile</a>, and
+         <a href="output_sqtstream.php">output_sqtstream</a>  are set to 0.
+         <li>When .out files only are set to be exported, this parameter will look to see if
+         an .out file already exists for each query spectrum.  If so, it will not re-search
+         that particular spectrum.
+         <li>When set to 0, all spectra are re-searched.  When set to 1, the search is skipped
+         for those spectra where an .out file already exists.
+         <li>Valid values are 0 and 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>skip_researching = 0</tt>
+         <br><tt>skip_researching = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/spectrum_batch_size.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/spectrum_batch_size.html
new file mode 100644
index 0000000..760fe14
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/spectrum_batch_size.html
@@ -0,0 +1,28 @@
+<html><head><title>comet parameter: spectrum_batch_size</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: spectrum_batch_size</h2>
+
+         <ul>
+         <li>When this parameter is set to a non-zero value, say 5000, this causes Comet
+         to load and search about 5000 spectra at a time, looping through sets of 5000
+         spectra until all data have been analyzed.
+         <li>This parameter was implemented to simplify searching large datasets that
+         might not fit into memory if searched all at once.
+         <li>The loaded batch sizes might be a little larger than the specified parameter
+         value (i.e. 5014 spectra loaded when the parameter is set to 5000) due to both
+         threading and potential charge state considerations when precursor charge state
+         is not known.
+         <li>Valid values are 0 or any positive integer.
+         <li>Set this parameter to 0 to load and search all spectra at once.
+         <li>Set this parameter to any other positive integer to loop through searching
+         this number of spectra at a time until all spectra have been analyzed.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>spectrum_batch_size = 0</tt>
+         <br><tt>spectrum_batch_size = 1000</tt>
+         <br><tt>spectrum_batch_size = 5000</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/theoretical_fragment_ions.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/theoretical_fragment_ions.html
new file mode 100644
index 0000000..60b57d4
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/theoretical_fragment_ions.html
@@ -0,0 +1,32 @@
+<html><head><title>comet parameter: theoretical_fragment_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: theoretical_fragment_ions</h2>
+
+         <ul>
+         <li>This parameter specifies how theoretical fragment ion peaks are
+         represented.
+         <li>Even though Comet does not generate/store a theoretical spectrum,
+         it does calculate fragment ion masses and this parameter controls how
+         the acquired spectrum intensities at these theoretical mass locations
+         contribute to the correlation score.
+         <li>A value of 0 indicates that the fast correlation score will be
+         a sum of the intensities at each theortical fragment mass bin and half
+         the intensity of each flanking bin.
+         <li>A value of 1 indicates that the fast correlation score will be
+         the sum of the intensities at each theoretical fragment mass bin.
+         <li>For extremely coarse <a href="fragment_bin_tol.php">fragment_bin_tol</a>
+         values such as the historical ~1 Da bins, a theoretical_fragment_ions
+         value of 1 is optimal.
+         <li>But for narrower bins, such as ~0.3 for ion trap data or ~0.03 for
+         high-res MS/MS spectra, a value of 0 is optimal to incorporate
+         intensities from the flanking bins.
+         <li>Allowed values are 0 or 1.
+         <li>The default value is "1" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>theoretical_fragment_ions = 0</tt>
+         <br><tt>theoretical_fragment_ions = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/topmenu.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/topmenu.html
new file mode 100644
index 0000000..62b274f
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/topmenu.html
@@ -0,0 +1 @@
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_A_ions.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_A_ions.html
new file mode 100644
index 0000000..2eb9a48
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_A_ions.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: use_A_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: use_A_ions</h2>
+
+         <ul>
+         <li>Controls whether or not A-ions are considered in the search.
+         <li>Valid values are 0 and 1.
+         <li>To not use A-ions, set the value to 0.
+         <li>To use A-ions, set the value to 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>use_A_ions = 0</tt>
+         <br><tt>use_A_ions = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_B_ions.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_B_ions.html
new file mode 100644
index 0000000..ad78694
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_B_ions.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: use_B_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: use_B_ions</h2>
+
+         <ul>
+         <li>Controls whether or not B-ions are considered in the search.
+         <li>Valid values are 0 and 1.
+         <li>To not use B-ions, set the value to 0.
+         <li>To use B-ions, set the value to 1.
+         <li>The default value is "1" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>use_B_ions = 0</tt>
+         <br><tt>use_B_ions = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_C_ions.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_C_ions.html
new file mode 100644
index 0000000..c2a7eb6
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_C_ions.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: use_C_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: use_C_ions</h2>
+
+         <ul>
+         <li>Controls whether or not C-ions are considered in the search.
+         <li>Valid values are 0 and 1.
+         <li>To not use C-ions, set the value to 0.
+         <li>To use C-ions, set the value to 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>use_C_ions = 0</tt>
+         <br><tt>use_C_ions = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_NL_ions.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_NL_ions.html
new file mode 100644
index 0000000..fe88f3d
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_NL_ions.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: use_NL_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: use_NL_ions</h2>
+
+         <ul>
+         <li>Controls whether or not neutral loss ions (-NH3 and -H2O from b- and y-ions) are considered in the search.
+         <li>Valid values are 0 and 1.
+         <li>To not use neutral loss ions, set the value to 0.
+         <li>To use neutral loss ions, set the value to 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>use_NL_ions = 0</tt>
+         <br><tt>use_NL_ions = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_X_ions.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_X_ions.html
new file mode 100644
index 0000000..cf91b63
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_X_ions.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: use_X_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: use_X_ions</h2>
+
+         <ul>
+         <li>Controls whether or not X-ions are considered in the search.
+         <li>Valid values are 0 and 1.
+         <li>To not use X-ions, set the value to 0.
+         <li>To use X-ions, set the value to 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>use_X_ions = 0</tt>
+         <br><tt>use_X_ions = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_Y_ions.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_Y_ions.html
new file mode 100644
index 0000000..83ed9dc
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_Y_ions.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: use_Y_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: use_Y_ions</h2>
+
+         <ul>
+         <li>Controls whether or not Y-ions are considered in the search.
+         <li>Valid values are 0 and 1.
+         <li>To not use Y-ions, set the value to 0.
+         <li>To use Y-ions, set the value to 1.
+         <li>The default value is "1" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>use_Y_ions = 0</tt>
+         <br><tt>use_Y_ions = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_Z_ions.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_Z_ions.html
new file mode 100644
index 0000000..6e9c5f2
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_Z_ions.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: use_Z_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: use_Z_ions</h2>
+
+         <ul>
+         <li>Controls whether or not Z-dot ions are considered in the search.
+         <li>Valid values are 0 and 1.
+         <li>To not use Z-dot ions, set the value to 0.
+         <li>To use Z-dot ions, set the value to 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>use_Z_ions = 0</tt>
+         <br><tt>use_Z_ions = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_sparse_matrix.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_sparse_matrix.html
new file mode 100644
index 0000000..ef9f1e4
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/use_sparse_matrix.html
@@ -0,0 +1,26 @@
+<html><head><title>comet parameter: use_sparse_matrix</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: use_sparse_matrix</h2>
+
+         <ul>
+         <li>Controls whether or not internal sparse matrix data representation is used.
+         <li>The sparse matrix data representation will use a <em>significantly</em> smaller amount
+         of memory/RAM for small <a href="fragment_bin_tol.php">fragment_bin_tol</a> settings such
+         as 0.05 or 0.01.  We're talking going from tens of GB (gigabytes) down to a few hundred
+         megabytes (MB)!
+         <li>In this release, the sparse matrix searches will always be slower than the classical
+         data representation (i.e. use_sparse_matrix = 0).  So it should be used only when
+         memory is an issue.  Alternately, the <a href="spectrum_batch_size.php">spectrum_batch_size</a>
+         parameter can also be used to mitigate memory issues.
+         <li>Valid values are 0 and 1.
+         <li>To not use sparse matrix, set the value to 0.
+         <li>To use sparse matrix, set the value to 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>use_sparse_matrix = 0</tt>
+         <br><tt>use_sparse_matrix = 1</tt>
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod01.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod01.html
new file mode 100644
index 0000000..4940708
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod01.html
@@ -0,0 +1,62 @@
+<html><head><title>comet parameter: variable_mod01</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod01</h2>
+
+         <ul>
+         <li>This parameter specifies the 1st of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies whichprotein terminus the distance constraint is applied to:
+                <ul>
+                <li>0 = protein N-terminus
+                <li>1 = protein C-terminus
+                <li>2 = peptide N-terminus
+                <li>3 = peptide C-terminus
+                </ul>
+            <li>The seventh entry specifies whether peptides are must contain this modification
+                <ul>
+                <li>0 = not forced to be present
+                <li>1 = modification is required 
+                </ul>
+
+            </ul>
+         <li>In the output, this first modification is encoded with the character '*' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod01 = 15.9949 M 0 3 -1 0 0</tt>
+         <br><tt>variable_mod01 = 79.966331 STY 0 3 -1 0 0</tt>     ... <i>possible phosphorylation on any S, T, Y residue</i>
+         <br><tt>variable_mod01 = 79.966331 STY 0 3 -1 0 1</tt>     ... <i>force peptide IDs to contain at least one phosphorylation mod</i>
+         <br><tt>variable_mod01 = 42.010565 nK 0 3 -1 0 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod01 = 15.994915 n 0 3 0 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod01 = 28.0 c 0 3 8 1 0</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod01 = -17.026549 Q 0 1 0 2</tt>     ... <i>cyclization of N-terminal glutamine to form pyroglutamic acid (elimination of NH3)</i>
+         <br><tt>variable_mod01 = -18.010565 E 0 1 0 2</tt>     ... <i>cyclization of N-terminal glutamic acid to form pyroglutamic acid (elimination of H2O)</i>
+
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod02.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod02.html
new file mode 100644
index 0000000..31107c7
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod02.html
@@ -0,0 +1,48 @@
+<html><head><title>comet parameter: variable_mod02</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod02</h2>
+
+         <ul>
+         <li>This parameter specifies the 2nd of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies which protein terminus the distance constraint is applied to N-terminus (0) or C-terminus (1).
+            </ul>
+         <li>In the output, this first modification is encoded with the character '#' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod02 = 15.9949 M 0 3 -1 0</tt>
+         <br><tt>variable_mod02 = 79.966331 STY 0 3 -1 0</tt>
+         <br><tt>variable_mod02 = 42.010565 nK 0 3 -1 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod02 = 15.994915 n 0 3 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod02 = 28.0 c 0 3 8 1</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod02 = -17.02549 Q 0 1 0 0</tt>     ... <i>protein N-terminal Q eliminating NH3 to form N-terminal pyrolidone carboxylic acid</i>
+
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod03.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod03.html
new file mode 100644
index 0000000..76b8f5d
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod03.html
@@ -0,0 +1,48 @@
+<html><head><title>comet parameter: variable_mod03</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod03</h2>
+
+         <ul>
+         <li>This parameter specifies the 3rd of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies which protein terminus the distance constraint is applied to N-terminus (0) or C-terminus (1).
+            </ul>
+         <li>In the output, this first modification is encoded with the character '@' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod03 = 15.9949 M 0 3 -1 0</tt>
+         <br><tt>variable_mod03 = 79.966331 STY 0 3 -1 0</tt>
+         <br><tt>variable_mod03 = 42.010565 nK 0 3 -1 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod03 = 15.994915 n 0 3 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod03 = 28.0 c 0 3 8 1</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod03 = -17.02549 Q 0 1 0 0</tt>     ... <i>protein N-terminal Q eliminating NH3 to form N-terminal pyrolidone carboxylic acid</i>
+
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod04.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod04.html
new file mode 100644
index 0000000..8548a34
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod04.html
@@ -0,0 +1,48 @@
+<html><head><title>comet parameter: variable_mod04</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod04</h2>
+
+         <ul>
+         <li>This parameter specifies the 4th of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies which protein terminus the distance constraint is applied to N-terminus (0) or C-terminus (1).
+            </ul>
+         <li>In the output, this first modification is encoded with the character '^' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod04 = 15.9949 M 0 3 -1 0</tt>
+         <br><tt>variable_mod04 = 79.966331 STY 0 3 -1 0</tt>
+         <br><tt>variable_mod04 = 42.010565 nK 0 3 -1 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod04 = 15.994915 n 0 3 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod04 = 28.0 c 0 3 8 1</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod04 = -17.02549 Q 0 1 0 0</tt>     ... <i>protein N-terminal Q eliminating NH3 to form N-terminal pyrolidone carboxylic acid</i>
+
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod05.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod05.html
new file mode 100644
index 0000000..fa5d180
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod05.html
@@ -0,0 +1,48 @@
+<html><head><title>comet parameter: variable_mod05</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod05</h2>
+
+         <ul>
+         <li>This parameter specifies the 5th of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies which protein terminus the distance constraint is applied to N-terminus (0) or C-terminus (1).
+            </ul>
+         <li>In the output, this first modification is encoded with the character '~' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod05 = 15.9949 M 0 3 -1 0</tt>
+         <br><tt>variable_mod05 = 79.966331 STY 0 3 -1 0</tt>
+         <br><tt>variable_mod05 = 42.010565 nK 0 3 -1 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod05 = 15.994915 n 0 3 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod05 = 28.0 c 0 3 8 1</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod05 = -17.02549 Q 0 1 0 0</tt>     ... <i>protein N-terminal Q eliminating NH3 to form N-terminal pyrolidone carboxylic acid</i>
+
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod06.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod06.html
new file mode 100644
index 0000000..cad626d
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod06.html
@@ -0,0 +1,48 @@
+<html><head><title>comet parameter: variable_mod06</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod06</h2>
+
+         <ul>
+         <li>This parameter specifies the 6th of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies which protein terminus the distance constraint is applied to N-terminus (0) or C-terminus (1).
+            </ul>
+         <li>In the output, this first modification is encoded with the character '$' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod06 = 15.9949 M 0 3 -1 0</tt>
+         <br><tt>variable_mod06 = 79.966331 STY 0 3 -1 0</tt>
+         <br><tt>variable_mod06 = 42.010565 nK 0 3 -1 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod06 = 15.994915 n 0 3 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod06 = 28.0 c 0 3 8 1</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod06 = -17.02549 Q 0 1 0 0</tt>     ... <i>protein N-terminal Q eliminating NH3 to form N-terminal pyrolidone carboxylic acid</i>
+
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod07.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod07.html
new file mode 100644
index 0000000..c976fb1
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod07.html
@@ -0,0 +1,48 @@
+<html><head><title>comet parameter: variable_mod07</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod07</h2>
+
+         <ul>
+         <li>This parameter specifies the 7th of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies which protein terminus the distance constraint is applied to N-terminus (0) or C-terminus (1).
+            </ul>
+         <li>In the output, this first modification is encoded with the character '%' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod07 = 15.9949 M 0 3 -1 0</tt>
+         <br><tt>variable_mod07 = 79.966331 STY 0 3 -1 0</tt>
+         <br><tt>variable_mod07 = 42.010565 nK 0 3 -1 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod07 = 15.994915 n 0 3 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod07 = 28.0 c 0 3 8 1</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod07 = -17.02549 Q 0 1 0 0</tt>     ... <i>protein N-terminal Q eliminating NH3 to form N-terminal pyrolidone carboxylic acid</i>
+
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod08.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod08.html
new file mode 100644
index 0000000..34aae4e
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod08.html
@@ -0,0 +1,48 @@
+<html><head><title>comet parameter: variable_mod08</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod08</h2>
+
+         <ul>
+         <li>This parameter specifies the 8th of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies which protein terminus the distance constraint is applied to N-terminus (0) or C-terminus (1).
+            </ul>
+         <li>In the output, this first modification is encoded with the character '!' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod08 = 15.9949 M 0 3 -1 0</tt>
+         <br><tt>variable_mod08 = 79.966331 STY 0 3 -1 0</tt>
+         <br><tt>variable_mod08 = 42.010565 nK 0 3 -1 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod08 = 15.994915 n 0 3 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod08 = 28.0 c 0 3 8 1</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod08 = -17.02549 Q 0 1 0 0</tt>     ... <i>protein N-terminal Q eliminating NH3 to form N-terminal pyrolidone carboxylic acid</i>
+
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod09.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod09.html
new file mode 100644
index 0000000..8c2d93d
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet-options/variable_mod09.html
@@ -0,0 +1,48 @@
+<html><head><title>comet parameter: variable_mod09</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod09</h2>
+
+         <ul>
+         <li>This parameter specifies the 9th of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies which protein terminus the distance constraint is applied to N-terminus (0) or C-terminus (1).
+            </ul>
+         <li>In the output, this first modification is encoded with the character '+' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod09 = 15.9949 M 0 3 -1 0</tt>
+         <br><tt>variable_mod09 = 79.966331 STY 0 3 -1 0</tt>
+         <br><tt>variable_mod09 = 42.010565 nK 0 3 -1 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod09 = 15.994915 n 0 3 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod09 = 28.0 c 0 3 8 1</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod09 = -17.02549 Q 0 1 0 0</tt>     ... <i>protein N-terminal Q eliminating NH3 to form N-terminal pyrolidone carboxylic acid</i>
+
+
+</body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet.html
new file mode 100644
index 0000000..2537eaa
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/comet.html
@@ -0,0 +1,297 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>comet</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>comet</h1>
+<h2>Usage:</h2>
+<p><code>crux comet [options] <input spectra>+ <database_name></code></p>
+<h2>Description:</h2>
+<p>This command searches a protein database with a set of spectra, assigning peptide sequences to the observed spectra. This search engine was developed by Jimmy Eng at the University of Washington Proteomics Resource.</p><p>Although its history goes back two decades, the Comet search engine was first made publicly available in August 2012 on SourceForge. Comet is multithreaded and supports multiple input and output formats.</p><blockquote><a href="http://onlinelibrary.wiley.com/doi/10.1 [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>input spectra+</code> – The name of the file from which to parse the spectra. Valid formats include mzXML, mzML, mz5, raw, ms2, and cms2. Files in mzML or mzXML may be compressed with gzip. RAW files can be parsed only under windows and if the appropriate libraries were included at compile time.</li>
+  <li><code>database_name</code> – A full or relative path to the sequence database, in FASTA format, to search. Example databases include RefSeq or UniProt.  The database can contain amino acid sequences or nucleic acid sequences. If sequences are amino acid sequences, set the parameter "nucleotide_reading_frame = 0". If the sequences are nucleic acid sequences, you must instruct Comet to translate these to amino acid sequences. Do this by setting nucleotide_reading_frame" to a va [...]
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>comet.target.txt</code> – a tab-delimited text file containing the target PSMs. See <a href="../file-formats/txt-format.html">txt file format</a> for a list of the fields.</li>
+  <li><code>comet.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>comet.log.txt</code> – a log file containing a copy of all messages that were printed to standard error.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Database</h3>
+<ul>
+  <li class="nobullet"><code>--decoy_search <integer></code> – 0=no, 1=concatenated search, 2=separate search. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>CPU threads</h3>
+<ul>
+  <li class="nobullet"><code>--num_threads <integer></code> – 0=poll CPU to set num threads; else specify num threads directly. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Masses</h3>
+<ul>
+  <li class="nobullet"><code>--peptide_mass_tolerance <float></code> – Controls the mass tolerance value.  The mass tolerance is set at +/- the specified number i.e. an entered value of "1.0" applies a -1.0 to +1.0 tolerance. The units of the mass tolerance is controlled by the parameter "peptide_mass_units".  Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--auto_peptide_mass_tolerance false|warn|fail</code> – Automatically estimate optimal value for the peptide_mass_tolerancel parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--peptide_mass_units <integer></code> – 0=amu, 1=mmu, 2=ppm. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--mass_type_parent <integer></code> – 0=average masses, 1=monoisotopic masses. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--mass_type_fragment <integer></code> – 0=average masses, 1=monoisotopic masses. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--precursor_tolerance_type <integer></code> – 0=singly charged peptide mass, 1=precursor m/z. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--isotope_error <integer></code> – 0=off, 1=on -1/0/1/2/3 (standard C13 error), 2=-8/-4/0/4/8 (for +4/+8 labeling). Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search enzyme</h3>
+<ul>
+  <li class="nobullet"><code>--search_enzyme_number <integer></code> – Specify a search enzyme from the end of the parameter file. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--num_enzyme_termini <integer></code> – valid values are 1 (semi-digested), 2 (fully digested), 8 N-term, 9 C-term. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--allowed_missed_cleavage <integer></code> – Maximum value is 5; for enzyme search. Default = <code>2</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Fragment ions</h3>
+<ul>
+  <li class="nobullet"><code>--fragment_bin_tol <float></code> – Binning to use on fragment ions. Default = <code>1.000507</code>.</li>
+  <li class="nobullet"><code>--fragment_bin_offset <float></code> – Offset position to start the binning (0.0 to 1.0). Default = <code>0.4</code>.</li>
+  <li class="nobullet"><code>--auto_fragment_bin_tol false|warn|fail</code> – Automatically estimate optimal value for the fragment_bin_tol parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--theoretical_fragment_ions <integer></code> – 0=default peak shape, 1=M peak only. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--use_A_ions <integer></code> – Controls whether or not A-ions are considered in the search (0 - no, 1 - yes). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--use_B_ions <integer></code> – Controls whether or not B-ions are considered in the search (0 - no, 1 - yes). Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--use_C_ions <integer></code> – Controls whether or not C-ions are considered in the search (0 - no, 1 - yes). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--use_X_ions <integer></code> – Controls whether or not X-ions are considered in the search (0 - no, 1 - yes). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--use_Y_ions <integer></code> – Controls whether or not Y-ions are considered in the search (0 - no, 1 - yes). Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--use_Z_ions <integer></code> – Controls whether or not Z-ions are considered in the search (0 - no, 1 - yes). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--use_NL_ions <integer></code> – 0=no, 1= yes to consider NH3/H2O neutral loss peak. Default = <code>1</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>mzXML/mzML parameters</h3>
+<ul>
+  <li class="nobullet"><code>--scan_range <string></code> – Start and scan scan range to search; 0 as first entry ignores parameter. Default = <code>0 0</code>.</li>
+  <li class="nobullet"><code>--precursor_charge <string></code> – Precursor charge range to analyze; does not override mzXML charge; 0 as first entry ignores parameter. Default = <code>0 0</code>.</li>
+  <li class="nobullet"><code>--override_charge <integer></code> – Specifies the whether to override existing precursor charge state information when present in the files with the charge range specified by the "precursor_charge" parameter. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--ms_level <integer></code> – MS level to analyze, valid are levels 2 or 3. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--activation_method ALL|CID|ECD|ETD|PQD|HCD|IRMPD</code> – Specifies which scan types are searched. Default = <code>ALL</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Miscellaneous parameters</h3>
+<ul>
+  <li class="nobullet"><code>--digest_mass_range <string></code> – MH+ peptide mass range to analyze. Default = <code>600.0 5000.0</code>.</li>
+  <li class="nobullet"><code>--num_results <integer></code> – Number of search hits to store internally. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--skip_researching <integer></code> – For '.out' file output only, 0=search everything again, 1=don't search if .out exists. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--max_fragment_charge <integer></code> – Set maximum fragment charge state to analyze (allowed max 5). Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--max_precursor_charge <integer></code> – Set maximum precursor charge state to analyze (allowed max 9). Default = <code>6</code>.</li>
+  <li class="nobullet"><code>--nucleotide_reading_frame <integer></code> – 0=proteinDB, 1-6, 7=forward three, 8=reverse three, 9=all six. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--clip_nterm_methionine <integer></code> – 0=leave sequences as-is; 1=also consider sequence w/o N-term methionine. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--spectrum_batch_size <integer></code> – Maximum number of spectra to search at a time; 0 to search the entire scan range in one loop. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--decoy_prefix <string></code> – Specifies the prefix of the protein names that indicates a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--output_suffix <string></code> – Specifies the suffix string that is appended to the base output name for the pep.xml, pin.xml, txt and sqt output files. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--mass_offsets <string></code> – Specifies one or more mass offsets to apply. This value(s) are effectively subtracted from each precursor mass such that peptides that are smaller than the precursor mass by the offset value can still be matched to the respective spectrum. Default = <code><empty></code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Spectral processing</h3>
+<ul>
+  <li class="nobullet"><code>--minimum_peaks <integer></code> – Minimum number of peaks in spectrum to search. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--minimum_intensity <float></code> – Minimum intensity value to read in. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--remove_precursor_peak <integer></code> – 0=no, 1=yes, 2=all charge reduced precursor peaks (for ETD). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--remove_precursor_tolerance <float></code> – +- Da tolerance for precursor removal. Default = <code>1.5</code>.</li>
+  <li class="nobullet"><code>--clear_mz_range <string></code> – For iTRAQ/TMT type data; will clear out all peaks in the specified m/z range. Default = <code>0.0 0.0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Variable modifications</h3>
+<ul>
+  <li class="nobullet"><code>--variable_mod01 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod02 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod03 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod04 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod05 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod06 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod07 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod08 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod09 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--max_variable_mods_in_peptide <integer></code> – Specifies the total/maximum number of residues that can be modified in a peptide. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--require_variable_mod <integer></code> – Controls whether the analyzed peptides must contain at least one variable modification. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Static modifications</h3>
+<ul>
+  <li class="nobullet"><code>--add_Cterm_peptide <float></code> – Specifiy a static modification to the c-terminus of all peptides. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Nterm_peptide <float></code> – Specify a static modification to the n-terminus of all peptides. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Cterm_protein <float></code> – Specify a static modification to the c-terminal peptide of each protein. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Nterm_protein <float></code> – Specify a static modification to the n-terminal peptide of each protein. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_A_alanine <float></code> – Specify a static modification to the residue A. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_B_user_amino_acid <float></code> – Specify a static modification to the residue B. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_C_cysteine <float></code> – Specify a static modification to the residue C. Default = <code>57.021464</code>.</li>
+  <li class="nobullet"><code>--add_D_aspartic_acid <float></code> – Specify a static modification to the residue D. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_E_glutamic_acid <float></code> – Specify a static modification to the residue E. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_F_phenylalanine <float></code> – Specify a static modification to the residue F. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_G_glycine <float></code> – Specify a static modification to the residue G. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_H_histidine <float></code> – Specify a static modification to the residue H. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_I_isoleucine <float></code> – Specify a static modification to the residue I. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_J_user_amino_acid <float></code> – Specify a static modification to the residue J. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_K_lysine <float></code> – Specify a static modification to the residue K. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_L_leucine <float></code> – Specify a static modification to the residue L. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_M_methionine <float></code> – Specify a static modification to the residue M. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_N_asparagine <float></code> – Specify a static modification to the residue N. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_O_ornithine <float></code> – Specify a static modification to the residue O. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_P_proline <float></code> – Specify a static modification to the residue P. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Q_glutamine <float></code> – Specify a static modification to the residue Q. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_R_arginine <float></code> – Specify a static modification to the residue R. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_S_serine <float></code> – Specify a static modification to the residue S. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_T_threonine <float></code> – Specify a static modification to the residue T. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_U_selenocysteine <float></code> – Specify a static modification to the residue U. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_V_valine <float></code> – Specify a static modification to the residue V. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_W_tryptophan <float></code> – Specify a static modification to the residue W. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_X_user_amino_acid <float></code> – Specify a static modification to the residue X. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Y_tyrosine <float></code> – Specify a static modification to the residue Y. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Z_user_amino_acid <float></code> – Specify a static modification to the residue Z. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>param-medic options</h3>
+<ul>
+  <li class="nobullet"><code>--pm-min-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>400</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-frag-mz <float></code> – Minimum fragment m/z value to use in measurement error estimation. Default = <code>150</code>.</li>
+  <li class="nobullet"><code>--pm-max-frag-mz <float></code> – Maximum fragment m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-scan-frag-peaks <integer></code> – Minimum fragment peaks an MS/MS scan must contain to be used in measurement error estimation. Default = <code>40</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-delta-ppm <float></code> – Maximum ppm distance between precursor m/z values to consider two scans potentially generated by the same peptide for measurement error estimation. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--pm-charge <integer></code> – Precursor charge state to consider MS/MS spectra from, in measurement error estimation. Ideally, this should be the most frequently occurring charge state in the given data. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--pm-top-n-frag-peaks <integer></code> – Number of most-intense fragment peaks to consider for measurement error estimation, per MS/MS spectrum. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--pm-pair-top-n-frag-peaks <integer></code> – Number of fragment peaks per spectrum pair to be used in fragment error estimation. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--pm-min-common-frag-peaks <integer></code> – Number of the most-intense peaks that two spectra must share in order to potentially be generated by the same peptide, for measurement error estimation. Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--pm-max-scan-separation <integer></code> – Maximum number of scans two spectra can be separated by in order to be considered potentially generated by the same peptide, for measurement error estimation. Default = <code>1000</code>.</li>
+  <li class="nobullet"><code>--pm-min-peak-pairs <integer></code> – Minimum number of peak pairs (for precursor or fragment) that must be successfully paired in order to attempt to estimate measurement error distribution. Default = <code>100</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--output_sqtfile <integer></code> – 0=no, 1=yes  write sqt file. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--output_txtfile <integer></code> – 0=no, 1=yes  write tab-delimited text file. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--output_pepxmlfile <integer></code> – 0=no, 1=yes  write pep.xml file. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--output_percolatorfile <integer></code> – 0=no, 1=yes write percolator file. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--output_outfiles <integer></code> – 0=no, 1=yes  write .out files. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--print_expect_score <integer></code> – 0=no, 1=yes to replace Sp with expect in out & sqt. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--num_output_lines <integer></code> – num peptide results to show. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--show_fragment_ions <integer></code> – 0=no, 1=yes for out files only. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--sample_enzyme_number <integer></code> – Sample enzyme which is possibly different than the one applied to the search. Used to calculate NTT & NMC in pepXML output. Default = <code>1</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/commands/bullseye_standalone_to_crux.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/commands/bullseye_standalone_to_crux.html
new file mode 100644
index 0000000..382c4d2
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/commands/bullseye_standalone_to_crux.html
@@ -0,0 +1,74 @@
+    <table border="1">
+      <tr>
+        <td><b>Bullseye Parameter</b></td>
+        <td><b>crux bullseye parameter</b></td>
+        <td><b>datatype</b></td>
+        <td><b>default</b></td>
+
+      </tr>
+      <tr>
+        <td>-c</td>
+        <td>--max-persist</td>
+        <td>double</td>
+        <td>2.0</td>
+      </tr>
+
+      <tr>
+        <td>-e</td>
+        <td>--exact-match</td>
+        <td>boolean</td>
+        <td>false</td>
+      </tr>
+      <tr>
+
+        <td>-g</td>
+        <td>--gap-tolerance</td>
+        <td>integer</td>
+        <td>1</td>
+      </tr>
+      <tr>
+        <td>-m</td>
+
+        <td>--max-mass</td>
+        <td>double</td>
+        <td>8000.0</td>
+      </tr>
+      <tr>
+        <td>-n</td>
+        <td>--min-mass</td>
+
+        <td>double</td>
+        <td>600.0</td>
+      </tr>
+      <tr>
+        <td>-p</td>
+        <td>--exact-tolerance</td>
+        <td>double</td>
+
+        <td>10.0</td>
+      </tr>
+      <tr>
+        <td>-r</td>
+        <td>--persist-tolerance</td>
+        <td>double</td>
+        <td>10.0</td>
+
+      </tr>
+      <tr>
+        <td>-s</td>
+        <td>--scan-tolerance</td>
+        <td>integer</td>
+        <td>3</td>
+      </tr>
+
+      </tr>
+      <tr>
+        <td>-t</td>
+        <td>--retention-tolerance</td>
+        <td>float</td>
+        <td>0.5</td>
+      </tr>
+
+      
+    </table>
+    
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/commands/hardklor_standalone_to_crux.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/commands/hardklor_standalone_to_crux.html
new file mode 100644
index 0000000..553064e
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/commands/hardklor_standalone_to_crux.html
@@ -0,0 +1,127 @@
+    <table border="1">
+  <tr>
+    <td><b>Hardklör parameter</b></td>
+    <td><b>crux hardklor parameter</b></td>
+    <td><b>datatype</b></td>
+    <td><b>default</b></td>
+    
+  </tr>
+  <tr>
+    <td>-a</td>
+    <td>--hardklor-algorithm</td>
+    <td>string</td>
+    <td>fast-fewesst-peptides</td>
+  </tr>
+  
+  <tr>
+    <td>-cdm</td>
+    <td>--cdm</td>
+    <td>char</td>
+    <td>Q</td>
+  </tr>
+  <tr>
+    <td>-chMin</td>
+    <td>--min-charge</td>
+    <td>integer</td>
+    <td>1</td>
+  </tr>
+  <tr>
+    <td>-chMax</td>
+    <td>--max-charge</td>
+    <td>integer</td>
+    <td>5</td>
+  </tr>
+  <tr>
+    <td>-corr</td>
+    <td>--corr</td>
+        <td>double</td>
+    <td>0.85</td>
+  </tr>
+  <tr>
+    <td>-d</td>
+    <td>--depth</td>
+    <td>integer</td>
+    
+    <td>3</td>
+  </tr>
+  <tr>
+    <td>-da</td>
+    <td>--distribution-area</td>
+    <td>boolean</td>
+    <td>F</td>
+    
+  </tr>
+  <tr>
+    <td>-m</td>
+    <td>--averagine-mod</td>
+    <td>string</td>
+    <td>Empty string</td>
+  </tr>
+  <tr>
+    <td>-mF</td>
+    <td>--mzxml-filter</td>
+    <td>string</td>
+    <td>none</td>
+  </tr>
+  <tr>
+    <td>-p</td>
+    <td>--max-p</td>
+    <td>integer</td>
+    <td>10</td>
+  </tr>
+  <tr>
+    <td>-res</td>
+    <td>--resolution</td>
+    <td>float</td>
+    <td>100000</td>
+  </tr>
+  <tr>
+    <td>-res</td>
+    <td>--instrument</td>
+    <td>string</td>
+    <td>fticr</td>
+  </tr>
+  <tr>
+    <td>-sc</td>
+    <td>--scan-number</td>
+    <td>number range</td>
+    <td>search all</td>
+  </tr>
+  <tr>
+    <td>-sl</td>
+    <td>--sensitivity</td>
+    <td>0|1|2|3</td>
+    <td>2</td>
+  </tr>
+  <tr>
+    <td>-sn</td>
+    <td>--signal-to-noise</td>
+    <td>float</td>
+    <td>1.0</td>
+  </tr>
+  <tr>
+    <td>-snWin</td>
+    <td>--sn-window</td>
+    <td>float</td>
+    <td>250.0</td>
+  </tr>
+  <tr>
+    <td>-snWin</td>
+    <td>--static-sn</td>
+    <td>boolean</td>
+    <td>true</td>
+  </tr>
+  <tr>
+    <td>-w</td>
+    <td>--mz-window</td>
+    <td>double-double</td>
+    <td>0-max</td>
+  </tr>
+  <tr>
+    <td>-win</td>
+    <td>--max-width</td>
+    <td>float</td>
+    <td>4.0</td>
+  </tr>
+    </table>
+    
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/contributors.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/contributors.html
new file mode 100644
index 0000000..3c7e5f1
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/contributors.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux contributors</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="index.html">Home</a></li>
+			    <li><a href="download.html">Download</a></li>
+			    <li><a href="fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>Crux contributors</h2>
+		<p>
+		The current Crux development team consists of the following people:</p>
+
+		<ul>
+
+		<li>
+		Charles Grant, February 2008—present</li>
+
+		<li>
+		Sean McIlwain, January 2009—present</li>
+
+		<li>
+		Kaipo Tamura, October 2012—present</li>
+
+		<li>
+		J. Jeffry Howbert, October 2011—present</li>
+
+		<li>
+		Alice Cheng, March 2014—present</li>
+
+		</ul>
+
+		<p>
+		Former Crux contributors include</p>
+
+		<ul>
+
+		<li>
+		Chris Park, June 2006—August 2007</li>
+
+		<li>
+		Aaron Klammer, June 2006—June 2008</li>
+
+		<li>
+		Lukas Käll, November 2007—July 2008</li>
+
+		<li>
+		Michael Mathews, June 2010—December 2010</li>
+
+		<li>
+		Benjamin Diament, July 2010—September 2011</li>
+
+		<li>
+		Kha Nguyen, April 2011—July 2011</li>
+
+		<li>
+		Manijeh Naseri, January 2012—September 2012</li>
+
+		<li>
+		Marina Spivak, September 2009—September 2012</li>
+
+		<li>
+		Barbara Frewen, October 2007—September 2014</li>
+
+		<li>
+		Attila Kertesz-Farkas, September 2013—September 2015</li>
+
+		<li>
+		Jared Moore, September 2015—June 2016</li>
+
+		<li>
+		Atul Pai, September 2015—June 2016</li>
+
+		<li>
+		Zijin Zhang, September 2015—June 2016</li>
+
+		</ul>
+
+		<p>
+		The Crux project is overseen and directed by Michael MacCoss and
+		William Stafford Noble.</p>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/create-docs.cmake b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/create-docs.cmake
new file mode 100644
index 0000000..5c98f75
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/create-docs.cmake
@@ -0,0 +1,127 @@
+# This script generates the documentation for the Crux commands using the
+# 'crux create-docs' command.
+
+# Create the list of documents to create
+execute_process(
+  COMMAND ${CRUX_PATH} create-docs --no-analytics T list
+  RESULT_VARIABLE status
+  OUTPUT_VARIABLE doc_list 
+  ERROR_VARIABLE error_message
+)
+if (NOT ${status} EQUAL 0)
+  message(
+    FATAL_ERROR
+    "Unable to create list of documents " 
+    "\nError message: ${error_message}"
+    "\nCreation of documents failed."
+  )
+endif (NOT ${status} EQUAL 0)
+
+# Documents are separated by newlines, convert to CMake list
+STRING(REGEX REPLACE "\n" ";" doc_list "${doc_list}")
+
+# Generate each document
+foreach (doc ${doc_list})
+  execute_process(
+    COMMAND ${CRUX_PATH} create-docs --no-analytics T ${doc}
+      RESULT_VARIABLE status
+      ERROR_VARIABLE error_message
+      OUTPUT_FILE "${doc}.html"
+  )
+  if (NOT ${status} EQUAL 0)
+    message(
+      FATAL_ERROR
+      "Unable to generate ${doc}.html" 
+      "\nError message: ${error_message}"
+      "\nCreation of documents failed."
+    )
+  endif (NOT ${status} EQUAL 0)
+  message(STATUS "Created ${doc}.html")
+  if (NOT ${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
+    # If building out of source copy doc files back to 
+    # source doc directory.
+    execute_process(
+      COMMAND ${CMAKE_COMMAND} 
+        -E copy ${doc}.html ${DOC_DIR}
+        RESULT_VARIABLE status
+        ERROR_VARIABLE error_message
+    )
+    if (NOT ${status} EQUAL 0)
+      message(
+        FATAL_ERROR
+        "Unable to copy ${doc}.html to ${DOC_DIR}" 
+        "\nError message: ${error_message}"
+        "\nCreation of documents failed."
+      )
+    endif (NOT ${status} EQUAL 0)
+  endif (NOT ${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
+endforeach (doc ${doc_list})
+
+# Create the parameter table
+execute_process(
+  COMMAND ${CRUX_PATH} create-docs --no-analytics T param-table
+    RESULT_VARIABLE status
+    ERROR_VARIABLE error_message
+    OUTPUT_FILE param-table.html
+)
+if (NOT ${status} EQUAL 0)
+  message(
+    FATAL_ERROR
+    "Unable to generate param-table.html" 
+    "\nError message: ${error_message}"
+    "\nCreation of param-table failed."
+  )
+endif (NOT ${status} EQUAL 0)
+message(STATUS "Created param-table.html")
+if (NOT ${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
+  # If building out of source copy doc files back to 
+  # source doc directory.
+  execute_process(
+    COMMAND ${CMAKE_COMMAND} 
+      -E copy param-table.html ${DOC_DIR}
+      RESULT_VARIABLE status
+      ERROR_VARIABLE error_message
+  )
+  if (NOT ${status} EQUAL 0)
+    message(
+      FATAL_ERROR
+      "Unable to copy param-table.html to ${DOC_DIR}" 
+      "\nError message: ${error_message}"
+      "\nCreation of param-table failed."
+    )
+  endif (NOT ${status} EQUAL 0)
+endif (NOT ${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
+# Create the default.params file
+execute_process(
+  COMMAND ${CRUX_PATH} create-docs --no-analytics T default-params
+    RESULT_VARIABLE status
+    ERROR_VARIABLE error_message
+    OUTPUT_FILE default.params
+)
+if (NOT ${status} EQUAL 0)
+  message(
+    FATAL_ERROR
+    "Unable to generate default.params"
+    "\nError message: ${error_message}"
+    "\nCreation of default.params failed."
+  )
+endif (NOT ${status} EQUAL 0)
+message(STATUS "Created default.params")
+if (NOT ${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
+  # If building out of source copy doc files back to 
+  # source doc directory.
+  execute_process(
+    COMMAND ${CMAKE_COMMAND} 
+      -E copy default.params ${DOC_DIR}
+      RESULT_VARIABLE status
+      ERROR_VARIABLE error_message
+  )
+  if (NOT ${status} EQUAL 0)
+    message(
+      FATAL_ERROR
+      "Unable to copy default.params to ${DOC_DIR}" 
+      "\nError message: ${error_message}"
+      "\nCreation of param-table failed."
+    )
+  endif (NOT ${status} EQUAL 0)
+endif (NOT ${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/create-docs.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/create-docs.html
new file mode 100644
index 0000000..47fa916
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/create-docs.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>create-docs</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>create-docs</h1>
+<h2>Usage:</h2>
+<p><code>crux create-docs [options] <tool-name></code></p>
+<h2>Description:</h2>
+<p>This command prints to standard output an HTML formatted version of the documentation for a specified Crux command.</p>
+<h2>Input:</h2>
+<ul>
+  <li><code>tool-name</code> – Specifies the Crux tool to generate documentation for. If the value is 'list', then a list of available tools will be given. If the value is 'default-params', then a default parameter file will be given.If the value is 'param-table' then a table will be printed showing which parameters are associated with which commands.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – The command prints to standard output the HTML documentation for the specified Crux tool.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<p>This command does not support any optional parameters.</p>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/default.params b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/default.params
new file mode 100644
index 0000000..3791557
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/default.params
@@ -0,0 +1,1832 @@
+################################################################################
+# Sample parameter file
+#
+# On each line, anything after a '#' will be ignored.
+# The format is:
+#
+# <parameter-name>=<value>
+#
+################################################################################
+
+# Crux parameter file (generated by Crux version 3.1)
+# Full documentation available at http://cruxtoolkit.sourceforge.net/
+# comet_version 2016.01 rev. 1
+# Everything following the '#' symbol is treated as a comment.
+
+# Path where pin file will be written instead of make-pin.pin.
+# It is optional for make-pin
+output-file=
+
+# Specify the verbosity of the current processes. Each level prints the
+# following messages, including all those at lower verbosity levels: 0-fatal
+# errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of
+# execution, 40-more progress information, 50-debug info, 60-detailed debug
+# info.
+# Available for all crux programs.
+verbosity=30
+
+# A file containing parameters. 
+# Available for all crux programs. Any options specified on the command line
+# will override values in the parameter file.
+parameter-file=
+
+# Replace existing files if true or fail when trying to overwrite a file if
+# false.
+# Available for all crux programs.  Applies to parameter file as well as index,
+# search, and analysis output files.
+overwrite=false
+
+# The minimum length of peptides to consider.
+# Used from the command line or parameter file by crux-generate-peptides, and
+# crux tide-index.
+min-length=6
+
+# The maximum length of peptides to consider.
+# Available from command line or parameter file for crux-generate-peptides, crux
+# tide-index. 
+max-length=50
+
+# The minimum mass (in Da) of peptides to consider.
+# Available from command line or parameter file for crux-generate-peptides and
+# crux tide-index. 
+min-mass=200
+
+# The maximum mass (in Da) of peptides to consider.
+# Available from command line or parameter file for crux-generate-peptides and
+# crux tide-index. 
+max-mass=7200
+
+# The minimum number of peaks a spectrum must have for it to be searched.
+# Available for tide-search.
+min-peaks=20
+
+# Specify the enzyme used to digest the proteins in silico. Available enzymes
+# (with the corresponding digestion rules indicated in parentheses) include
+# no-enzyme ([X]|[X]), trypsin ([RK]|{P}), trypsin/p ([RK]|[]), chymotrypsin
+# ([FWYL]|{P}), elastase ([ALIV]|{P}), clostripain ([R]|[]), cyanogen-bromide
+# ([M]|[]), iodosobenzoate ([W]|[]), proline-endopeptidase ([P]|[]),
+# staph-protease ([E]|[]), asp-n ([]|[D]), lys-c ([K]|{P}), lys-n ([]|[K]),
+# arg-c ([R]|{P}), glu-c ([DE]|{P}), pepsin-a ([FL]|{P}),
+# elastase-trypsin-chymotrypsin ([ALIVKRWFY]|{P}). Specifying --enzyme no-enzyme
+# yields a non-enzymatic digest. Warning: the resulting index may be quite
+# large.
+# Available for crux-generate-peptides and crux tide-index.
+enzyme=trypsin
+
+# Specify rules for in silico digestion of protein sequences. Overrides the
+# enzyme option. Two lists of residues are given enclosed in square brackets or
+# curly braces and separated by a |. The first list contains residues
+# required/prohibited before the cleavage site and the second list is residues
+# after the cleavage site. If the residues are required for digestion, they are
+# in square brackets, '[' and ']'. If the residues prevent digestion, then they
+# are enclosed in curly braces, '{' and '}'. Use X to indicate all residues. For
+# example, trypsin cuts after R or K but not before P which is represented as
+# [RK]|{P}. AspN cuts after any residue but only before D which is represented
+# as [X]|[D].
+# 
+custom-enzyme=
+
+# Specify whether every peptide in the database must have two enzymatic termini
+# (full-digest) or if peptides with only one enzymatic terminus are also
+# included (partial-digest).
+# Available for crux-generate-peptides and crux tide-index.
+digestion=full-digest
+
+# Maximum number of missed cleavages per peptide to allow in enzymatic
+# digestion.
+# Available from command line or parameter file for crux-generate-peptides. When
+# used with enzyme=<trypsin|elastase|chymotrypsin> includes peptides containing
+# one or more potential cleavage sites.
+missed-cleavages=0
+
+# Tolerance used for matching peptides to spectra. Peptides must be within +/-
+# 'precursor-window' of the spectrum value. The precursor window units depend
+# upon precursor-window-type.
+# Available for tide-search and crux-generate-peptides.
+precursor-window=3
+
+# Specify the units for the window that is used to select peptides around the
+# precursor mass location (mass, mz, ppm). The magnitude of the window is
+# defined by the precursor-window option, and candidate peptides must fall
+# within this window. For the mass window-type, the spectrum precursor m+h value
+# is converted to mass, and the window is defined as that mass +/-
+# precursor-window. If the m+h value is not available, then the mass is
+# calculated from the precursor m/z and provided charge. The peptide mass is
+# computed as the sum of the average amino acid masses plus 18 Da for the
+# terminal OH group. The mz window-type calculates the window as spectrum
+# precursor m/z +/- precursor-window and then converts the resulting m/z range
+# to the peptide mass range using the precursor charge. For the
+# parts-per-million (ppm) window-type, the spectrum mass is calculated as in the
+# mass type. The lower bound of the mass window is then defined as the spectrum
+# mass / (1.0 + (precursor-window / 1000000)) and the upper bound is defined as
+# spectrum mass / (1.0 - (precursor-window / 1000000)).
+# Available for search-for-xlinks and tide-search.
+precursor-window-type=mass
+
+# Automatically estimate optimal value for the precursor-window parameter from
+# the spectra themselves. false=no estimation, warn=try to estimate but use the
+# default value in case of failure, fail=try to estimate and quit in case of
+# failure.
+# Available for tide-search.
+auto-precursor-window=false
+
+# Specify the parser to use for reading in MS/MS spectra.
+# Available for search-for-xlinks.
+spectrum-parser=pwiz
+
+# Specify whether, when parsing an MS2 spectrum file, Crux obtains the precursor
+# mass information from the "S" line or the "Z" line. 
+# Available when spectrum-parser = pwiz.
+use-z-line=true
+
+# When creating decoy peptides using decoy-format=shuffle or
+# decoy-format=peptide-reverse, this option specifies whether the N-terminal and
+# C-terminal amino acids are kept in place or allowed to be shuffled or
+# reversed. For a target peptide "EAMPK" with decoy-format=peptide-reverse,
+# setting keep-terminal-aminos to "NC" will yield "EPMAK"; setting it to "C"
+# will yield "PMAEK"; setting it to "N" will yield "EKPMA"; and setting it to
+# "none" will yield "KPMAE".
+# Available for tide-index.
+keep-terminal-aminos=NC
+
+# Create in the output directory a text file listing of all the peptides in the
+# database, along with their neutral masses, one per line. If decoys are
+# generated, then a second file will be created containing the decoy peptides.
+# Decoys that also appear in the target database are marked with an asterisk in
+# a third column.
+# Available for tide-index.
+peptide-list=false
+
+# Stop after the specified pre-processing step.
+# Available for print-processed-spectra.
+stop-after=xcorr
+
+# Specify the output units for processed spectra.
+# Available for print-processed-spectra
+output-units=bin
+
+# Outputs an SQT results file to the output directory. Note that if sqt-output
+# is enabled, then compute-sp is automatically enabled and cannot be overridden.
+# Available for tide-search.
+sqt-output=false
+
+# Output an mzIdentML results file to the output directory.
+# Available for tide-search, percolator.
+mzid-output=false
+
+# Output a Percolator input (PIN) file to the output directory.
+# Available for tide-search.
+pin-output=false
+
+# Output a Percolator pout.xml format results file to the output directory.
+# Available for percolator.
+pout-output=false
+
+# Output a pepXML results file to the output directory.
+# Available for tide-search, q-ranker, barista, percolator.
+pepxml-output=false
+
+# Output a tab-delimited results file to the output directory.
+# Available for tide-search, percolator, q-ranker, barista.
+txt-output=true
+
+# Compute the preliminary score Sp for all candidate peptides. Report this score
+# in the output, along with the corresponding rank, the number of matched ions
+# and the total number of ions. This option is recommended if results are to be
+# analyzed by Percolator or Barista. If sqt-output is enabled, then compute-sp
+# is automatically enabled and cannot be overridden. Note that the Sp
+# computation requires re-processing each observed spectrum, so turning on this
+# switch involves significant computational overhead.
+# Available for tide-search.
+compute-sp=false
+
+# Estimate the parameters of the score distribution for each spectrum by fitting
+# to a Weibull distribution, and compute a p-value for each xlink product. This
+# option is only available when use-old-xlink=F.
+# Currently only implemented for XCORR.
+compute-p-values=false
+
+# A single scan number or a range of numbers to be searched. Range should be
+# specified as 'first-last' which will include scans 'first' and 'last'.
+# The search range x-y is inclusive of x and y.
+scan-number=
+
+# Before calculation of the XCorr score, the m/z axes of the observed and
+# theoretical spectra are discretized. This parameter specifies the size of each
+# bin. The exact formula for computing the discretized m/z value is
+# floor((x/mz-bin-width) + 1.0 - mz-bin-offset), where x is the observed m/z
+# value. For low resolution ion trap ms/ms data 1.0005079 and for high
+# resolution ms/ms 0.02 is recommended.
+# Available for tide-search and xlink-assign-ions.
+mz-bin-width=1.0005079
+
+# In the discretization of the m/z axes of the observed and theoretical spectra,
+# this parameter specifies the location of the left edge of the first bin,
+# relative to mass = 0 (i.e., mz-bin-offset = 0.xx means the left edge of the
+# first bin will be located at +0.xx Da).
+# Available for tide-search.
+mz-bin-offset=0.4
+
+# Automatically estimate optimal value for the mz-bin-width parameter from the
+# spectra themselves. false=no estimation, warn=try to estimate but use the
+# default value in case of failure, fail=try to estimate and quit in case of
+# failure.
+# Available for tide-search.
+auto-mz-bin-width=false
+
+# Include flanking peaks around singly charged b and y theoretical ions. Each
+# flanking peak occurs in the adjacent m/z bin and has half the intensity of the
+# primary peak.
+# Available for the tide-search and search-for-xlinks commands.
+use-flanking-peaks=false
+
+# The lowest spectrum m/z to search in the ms2 file.
+# Available for tide-search.
+spectrum-min-mz=0
+
+# The highest spectrum m/z to search in the ms2 file.
+# Available for tide-search.
+spectrum-max-mz=1e+09
+
+# The spectrum charges to search. With 'all' every spectrum will be searched and
+# spectra with multiple charge states will be searched once at each charge
+# state. With 1, 2, or 3 only spectra with that charge state will be searched.
+# Used by tide-search.
+spectrum-charge=all
+
+# The fileroot string will be added as a prefix to all output file names.
+# Available for all commands that produce an output directory.
+fileroot=
+
+# The name of the directory where output files will be created.
+# Available for most commands.
+output-dir=crux-output
+
+# The name of the directory where temporary files will be created. If this
+# parameter is blank, then the system temporary directory will be used
+# Available for tide-index.
+temp-dir=
+
+# Specify the number of matches to report for each spectrum.
+# Available for tide-search and crux percolator
+top-match=5
+
+# When given a unsigned integer value seeds the random number generator with
+# that value. When given the string "time" seeds the random number generator
+# with the system time.
+# Available for all Crux commands.
+seed=1
+
+# Specify which isotopes to use in calculating fragment ion mass.
+# Used by crux-predict-peptide-ions.
+fragment-mass=mono
+
+# Specify the type of isotopic masses to use when calculating the peptide mass.
+# Used from command line or parameter file by crux-generate-peptides.
+isotopic-mass=mono
+
+# The minimum number of modifications that can be applied to a single peptide.
+# Available for tide-index.
+min-mods=0
+
+# The maximum number of modifications that can be applied to a single peptide.
+# Available for tide-index.
+max-mods=255
+
+# The maximum number of modified amino acids that can appear in one peptide.
+# Each aa can be modified multiple times.
+# 
+max-aas-modified=255
+
+# Specify how sequence modifications are reported in various output files. Each
+# modification is reported as a number enclosed in square braces following the
+# modified residue; however, the number may correspond to one of three different
+# masses: (1) 'mod-only' reports the value of the mass shift induced by the
+# modification; (2) 'total' reports the mass of the residue with the
+# modification (residue mass plus modification mass); (3) 'separate' is the same
+# as 'mod-only', but multiple modifications to a single amino acid are reported
+# as a comma-separated list of values. For example, suppose amino acid D has an
+# unmodified mass of 115 as well as two moifications of masses +14 and +2. In
+# this case, the amino acid would be reported as D[16] with 'mod-only', D[131]
+# with 'total', and D[14,2] with 'separate'.
+# Available for generate-peptides.
+mod-mass-format=mod-only
+
+# Consider a-ions in the search? Note that an a-ion is equivalent to a neutral
+# loss of CO from the b-ion.  Peak height is 10 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-a-ions=false
+
+# Consider b-ions in the search? Peak height is 50 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-b-ions=true
+
+# Consider c-ions in the search? Peak height is 50 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-c-ions=false
+
+# Consider x-ions in the search? Peak height is 10 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-x-ions=false
+
+# Consider y-ions in the search? Peak height is 50 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-y-ions=true
+
+# Consider z-ions in the search? Peak height is 50 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-z-ions=false
+
+# Set the precision for scores written to sqt and text files.
+# Available for all commands.
+precision=8
+
+# Set the precision for masses and m/z written to sqt and .txt files. Note that
+# this parameter only takes effect when specified in the parameter file.
+# Available for all commands.
+mass-precision=4
+
+# Show search progress by printing every n spectra searched. Set to 0 to show no
+# search progress.
+# Available for tide-search
+print-search-progress=1000
+
+# Specify the type of target-decoy search. Using 'auto', percolator attempts to
+# detect the search type automatically.  Using 'separate' specifies two
+# searches: one against target and one against decoy protein db. Using
+# 'concatenated' specifies a single search on concatenated target-decoy protein
+# db.
+# Available for percolator
+search-input=auto
+
+# When given a unsigned integer value seeds the random number generator with
+# that value. When given the string "time" seeds the random number generator
+# with the system time.
+# Available for all percolator
+percolator-seed=1
+
+# Output the computed features in tab-delimited text format.
+# Available for percolator and q-ranker.
+feature-file-out=false
+
+# Include decoys (PSMs, peptides, and/or proteins) in the XML output.
+# Available for crux percolator
+decoy-xml-output=false
+
+# Specifies the prefix of the protein names that indicate a decoy.
+# Available for percolator
+decoy-prefix=decoy_
+
+# Output final weights to a file named "percolator.weights.txt".
+# Available for crux percolator
+output-weights=false
+
+# Read initial weights from the given file (one per line).
+# Available for crux percolator
+init-weights=
+
+# Only train Percolator on a subset of PSMs, and use the resulting score vector
+# to evaluate the other PSMs. Recommended when analyzing huge numbers (>1
+# million) of PSMs. When set to 0, all PSMs are used for training as normal.
+# Available for crux percolator
+subset-max-train=0
+
+# Penalty for mistakes made on positive examples. If this value is set to 0,
+# then it is set via cross validation over the values {0.1, 1, 10}, selecting
+# the value that yields the largest number of PSMs identified at the q-value
+# threshold set via the --test-fdr parameter.
+# Available for crux percolator
+c-pos=0
+
+# Penalty for mistake made on negative examples. If not specified, then this
+# value is set by cross validation over {0.1, 1, 10}.
+# Available for crux percolator
+c-neg=0
+
+# False discovery rate threshold to define positive examples in training.
+# Available for crux percolator
+train-fdr=0.01
+
+# False discovery rate threshold used in selecting hyperparameters during
+# internal cross-validation and for reporting the final results.
+# Available for crux percolator.
+test-fdr=0.01
+
+# Apply the specified threshold to PSM, peptide and protein probabilities to
+# obtain a faster estimate of the alpha, beta and gamma parameters.
+# Available for crux percolator.
+fido-fast-gridsearch=0
+
+# Do not approximate the posterior distribution by allowing large graph
+# components to be split into subgraphs. The splitting is done by duplicating
+# peptides with low probabilities. Splitting continues until the number of
+# possible configurations of each subgraph is below 2^18
+# Available for crux percolator
+fido-no-split-large-components=false
+
+# To speed up inference, proteins for which none of the associated peptides has
+# a probability exceeding the specified threshold will be assigned probability =
+# 0.
+# Available for crux percolator
+fido-protein-truncation-threshold=0.01
+
+# Use target-decoy competition to assign q-values and PEPs. When set to F, the
+# mix-max method, which estimates the proportion pi0 of incorrect target PSMs,
+# is used instead.
+# Available for crux percolator
+tdc=true
+
+# Maximum number of iterations for training.
+# Available for crux percolator
+maxiter=10
+
+# Quicker execution by reduced internal cross-validation.
+# Available for crux percolator
+quick-validation=false
+
+# In its initial round of training, Percolator uses one feature to induce a
+# ranking of PSMs. By default, Percolator will select the feature that produces
+# the largest set of target PSMs at a specified FDR threshold (cf. --train-fdr).
+# This option allows the user to specify which feature is used for the initial
+# ranking, using the name as a string. The name can be preceded by a hyphen
+# (e.g. "-XCorr") to indicate that a lower value is better.
+# Available for crux percolator
+default-direction=
+
+# Use unit normalization (i.e., linearly rescale each PSM's feature vector to
+# have a Euclidean length of 1), instead of standard deviation normalization.
+# Available for crux percolator.
+unitnorm=false
+
+# Measure performance on test set each iteration.
+# Available for crux percolator.
+test-each-iteration=false
+
+# When set to T, interpret the input file as a PIN file.
+# Available for crux percolator.
+feature-file-in=false
+
+# Use the picked protein-level FDR to infer protein probabilities, provide the
+# fasta file as the argument to this flag.
+# Available for crux percolator
+picked-protein=
+
+# Type of enzyme
+# Available for crux percolator
+protein-enzyme=trypsin
+
+# By default, if the peptides associated with protein A are a proper subset of
+# the peptides associated with protein B, then protein A is eliminated and all
+# the peptides are considered as evidence for protein B. Note that this
+# filtering is done based on the complete set of peptides in the database, not
+# based on the identified peptides in the search results. Alternatively, if this
+# option is set and if all of the identified peptides associated with protein B
+# are also associated with protein A, then Percolator will report a
+# comma-separated list of protein IDs, where the full-length protein B is first
+# in the list and the fragment protein A is listed second. Not available for
+# Fido.
+# Available for crux percolator
+protein-report-fragments=false
+
+# If multiple database proteins contain exactly the same set of peptides, then
+# Percolator will randomly discard all but one of the proteins. If this option
+# is set, then the IDs of these duplicated proteins will be reported as a
+# comma-separated list. Not available for Fido.
+# Available for crux percolator
+protein-report-duplicates=false
+
+# Use the Fido algorithm to infer protein probabilities. Must be true to use any
+# of the Fido options.
+# Available for crux percolator
+protein=false
+
+# Specify the probability with which a present protein emits an associated
+# peptide. Set by grid search (see --fido-gridsearch-depth parameter) if not
+# specified.
+# Available for crux percolator if --protein T is set.
+fido-alpha=0
+
+# Specify the probability of the creation of a peptide from noise. Set by grid
+# search (see --fido-gridsearch-depth parameter) if not specified.
+# Available for crux percolator if --protein T is set.
+fido-beta=0
+
+# Specify the prior probability that a protein is present in the sample. Set by
+# grid search (see --fido-gridsearch-depth parameter) if not specified.
+# Available for crux percolator if --protein T is set.
+fido-gamma=0
+
+# Estimate empirical p-values and q-values for proteins using target-decoy
+# analysis.
+# Available for crux percolator if --protein T is set.
+fido-empirical-protein-q=false
+
+# Set depth of the grid search for alpha, beta and gamma estimation.
+# Available for crux percolator if --protein T is set.
+fido-gridsearch-depth=0
+
+# Q-value threshold that will be used in the computation of the MSE and ROC AUC
+# score in the grid search.
+# Available for crux percolator if --protein T is set.
+fido-gridsearch-mse-threshold=0.05
+
+# By default, Percolator will examine the learned weights for each feature, and
+# if the weight appears to be problematic, then percolator will discard the
+# learned weights and instead employ a previously trained, static score vector.
+# This switch allows this error checking to be overriden.
+# Available for crux percolator.
+override=false
+
+# Use retention time features calculated as in "Improving tandem mass spectrum
+# identification using peptide retention time prediction across diverse
+# chromatography conditions" by Klammer AA, Yi X, MacCoss MJ and Noble WS.
+# (Analytical Chemistry. 2007 Aug 15;79(16):6111-8.).
+# Available for crux percolator
+klammer=false
+
+# Do not remove redundant peptides; keep all PSMs and exclude peptide level
+# probability.
+# Available for crux percolator
+only-psms=false
+
+# Include a decoy version of every peptide by shuffling or reversing the target
+# sequence or protein. In shuffle or peptide-reverse mode, each peptide is
+# either reversed or shuffled, leaving the N-terminal and C-terminal amino acids
+# in place. Note that peptides appear multiple times in the target database are
+# only shuffled once. In peptide-reverse mode, palindromic peptides are
+# shuffled. Also, if a shuffled peptide produces an overlap with the target or
+# decoy database, then the peptide is re-shuffled up to 5 times. Note that,
+# despite this repeated shuffling, homopolymers will appear in both the target
+# and decoy database. The protein-reverse mode reverses the entire protein
+# sequence, irrespective of the composite peptides.
+# Available for tide-index
+decoy-format=shuffle
+
+# Expression for static and variable mass modifications to include. Specify a
+# comma-separated list of modification sequences of the form:
+# C+57.02146,2M+15.9949,1STY+79.966331,...
+# Available for tide-index
+mods-spec=C+57.02146
+
+# Specifies N-terminal static and variable mass modifications on peptides.
+# Specify a comma-separated list of N-terminal modification sequences of the
+# form: 1E-18.0106,C-17.0265
+# Available for tide-index
+nterm-peptide-mods-spec=
+
+# Specifies C-terminal static and variable mass modifications on peptides.
+# Specify a comma-separated list of C-terminal modification sequences of the
+# form: X+21.9819
+# Available for tide-index
+cterm-peptide-mods-spec=
+
+# Specify the name of the file where the binarized fragmentation spectra will be
+# stored. Subsequent runs of crux tide-search will execute more quickly if
+# provided with the spectra in binary format. The filename is specified relative
+# to the current working directory, not the Crux output directory (as specified
+# by --output-dir). This option is not valid if multiple input spectrum files
+# are given.
+# Available for tide-search
+store-spectra=
+
+# Enable the calculation of exact p-values for the XCorr score. Calculation of
+# p-values increases the running time but increases the number of
+# identifications at a fixed confidence threshold. The p-values will be reported
+# in a new column with header "exact p-value", and the "xcorr score" column will
+# be replaced with a "refactored xcorr" column. Note that, currently, p-values
+# can only be computed when the mz-bin-width parameter is set to its default
+# value. Variable and static mods are allowed on non-terminal residues in
+# conjunction with p-value computation, but currently only static mods are
+# allowed on the N-terminus, and no mods on the C-terminus.
+# Available for tide-search
+exact-p-value=false
+
+# When providing a FASTA file as the index, the generated binary index will be
+# stored at the given path. This option has no effect if a binary index is
+# provided as the index.
+# Available for tide-search
+store-index=
+
+# When set to T, target and decoy search results are reported in a single file,
+# and only the top-scoring N matches (as specified via --top-match) are reported
+# for each spectrum, irrespective of whether the matches involve target or decoy
+# peptides.
+# Available for tide-search
+concat=false
+
+# Include the file column in tab-delimited output.
+# Available for tide-search
+file-column=true
+
+# If true, all peaks around the precursor m/z will be removed, within a range
+# specified by the --remove-precursor-tolerance option.
+# Available for tide-search.
+remove-precursor-peak=false
+
+# This parameter specifies the tolerance (in Th) around each precursor m/z that
+# is removed when the --remove-precursor-peak option is invoked.
+# Available for print-processed spectra and tide-search.
+remove-precursor-tolerance=1.5
+
+# When set to T, for each protein that begins with methionine, tide-index will
+# put two copies of the leading peptide into the index, with and without the
+# N-terminal methionine.
+# Available for tide-index.
+clip-nterm-methionine=false
+
+# Prevent duplicate peptides between the target and decoy databases. When set to
+# "F", the program keeps all target and previously generated decoy peptides in
+# memory. A shuffled decoy will be re-shuffled multiple times to avoid
+# duplication. If a non-duplicated peptide cannot be generated, the decoy is
+# skipped entirely. When set to "T", every decoy is added to the database
+# without checking for duplication. This option reduces the memory requirements
+# significantly.
+# Available for tide-index.
+allow-dups=false
+
+# Controls whether neutral loss ions are considered in the search. Two types of
+# neutral losses are included and are applied only to singly charged b- and
+# y-ions: loss of ammonia (NH3, 17.0086343 Da) and H2O (18.0091422). Each
+# neutral loss peak has intensity 1/5 of the primary peak.
+# Available for tide-search.
+use-neutral-loss-peaks=true
+
+# The maximum charge state of a spectra to consider in search.
+# Available for tide-search.
+max-precursor-charge=5
+
+# Carries out a peptide-centric search. For each peptide the top-scoring spectra
+# are reported, in contrast to the standard spectrum-centric search where the
+# top-scoring peptides are reported. Note that in this case the "xcorr rank"
+# column will contain the rank of the given spectrum with respect to the given
+# candidate peptide, rather than vice versa (which is the default).
+# Available for tide-search.
+peptide-centric-search=false
+
+# Skip preprocessing steps on spectra. Default = F.
+# Available for tide-search
+skip-preprocessing=false
+
+# List of positive, non-zero integers.
+# Isotope errors to include. Specify a comma-separated list of isotope errors of
+# the form: 1,2,3,...Available for tide-search
+isotope-error=
+
+# 0=poll CPU to set num threads; else specify num threads directly.
+# Available for tide-search tab-delimited files only.
+num-threads=0
+
+# Analysis begins with a pre-processsing step that creates a set of lookup
+# tables which are then used during training. Normally, these lookup tables are
+# deleted at the end of the analysis, but setting this option to T prevents the
+# deletion of these tables. Subsequently, analyses can be repeated more
+# efficiently by specifying the --re-run option.
+# Available for q-ranker and barista.
+skip-cleanup=false
+
+# Re-run a previous analysis using a previously computed set of lookup tables.
+# For this option to work, the --skip-cleanup option must have been set to true
+# when the program was run the first time.
+# Available for q-ranker and barista.
+re-run=
+
+# Use an enriched feature set, including separate features for each ion type.
+# Available for q-ranker and barista.
+use-spec-features=true
+
+# If the target and decoy searches were run separately, rather than using a
+# concatenated database, then the program will assume that the database search
+# results provided as a required argument are from the target database search.
+# This option then allows the user to specify the location of the decoy search
+# results. Like the required arguments, these search results can be provided as
+# a single file, a list of files or a directory. However, the choice (file, list
+# or directory) must be consistent for the MS2 files and the target and decoy
+# tab-delimited files. Also, if the MS2 and tab-delimited files are provided in
+# directories, then Q-ranker will use the MS2 filename (foo.ms2) to identify
+# corresponding target and decoy tab-delimited files with names like
+# foo*.target.txt and foo*.decoy.txt. This naming convention allows the target
+# and decoy txt files to reside in the same directory.
+# Available for q-ranker and barista.
+separate-searches=
+
+# Specify that the search results are provided as lists of files, rather than as
+# individual files.
+# Available for barista and percolator.
+list-of-files=false
+
+# Specifies whether to do optimization at the protein, peptide or psm level.
+# Available for barista.
+optimization=protein
+
+# Specify the method used to estimate q-values.  The mix-max procedure or
+# target-decoy competition apply to PSMs. The peptide-level option eliminates
+# any PSM for which there exists a better scoring PSM involving the same
+# peptide, and then uses decoys to assign confidence estimates.
+# Used by assign-confidence.
+estimation-method=tdc
+
+# Adjust the score using the Sidak adjustment and reports them in a new column
+# in the output file. Note that this adjustment only makes sense if the given
+# scores are p-values, and that it requires the presence of the "distinct
+# matches/spectrum" feature for each PSM.
+# Used by assign-confidence.
+sidak=false
+
+# Specify the column (for tab-delimited input) or tag (for XML input) used as
+# input to the q-value estimation procedure. If this parameter is unspecified,
+# then the program searches for "xcorr score", "evalue" (comet), "exact p-value"
+# score fields in this order in the input file. 
+# Used by assign-confidence.
+score=
+
+# Specify this parameter to T in order to combine charge states with peptide
+# sequencesin peptide-centric search. Works only if estimation-method =
+# peptide-level.
+# Used by assign-confidence.
+combine-charge-states=false
+
+# Specify this parameter to T in order to treat peptides carrying different or
+# no modifications as being the same. Works only if estimation = peptide-level.
+# Used by assign-confidence.
+combine-modified-peptides=false
+
+# The q-value threshold used by cascade search. Each spectrum identified in one
+# search with q-value less than this threshold will be excluded from all
+# subsequent searches.
+# Used by Cascade-Search
+q-value-threshold=0.01
+
+# Predict the specified primary ion series. 'a' indicates a-ions only, 'b'
+# indicates b-ions only, 'y' indicates y-ions only, 'by' indicates both b and y,
+# 'bya' indicates b, y, and a.
+# Only available for crux-predict-peptide-ions. Set automatically to 'by' for
+# searching.
+primary-ions=by
+
+# Predict the precursor ions, and all associated ions (neutral losses, multiple
+# charge states) consistent with the other specified options.
+# Only available for crux-predict-peptide-ions.
+precursor-ions=false
+
+# Predict the given number of isotope peaks (0|1|2).
+# Only available for crux-predict-peptide-ion.  Automatically set to 0 for Sp
+# scoring and 1 for xcorr scoring.
+isotope=0
+
+# Predict flanking peaks for b- and y ions.
+# Only available for crux-predict-peptide-ion.
+flanking=false
+
+# Predict theoretical ions up to max charge state (1, 2, ... ,6) or up to the
+# charge state of the peptide ("peptide"). If the max-ion-charge is greater than
+# the charge state of the peptide, then the maximum is the peptide charge. 
+# Available for predict-peptide-ions and search-for-xlinks. Set to 'peptide' for
+# search.
+max-ion-charge=peptide
+
+# Include among the predicted peaks b/y ions with up to n losses of nh3. For
+# example, for --nh3 2, predict a peak for each b- and y-ion with the loss of
+# one nh3 group and predict a second peak for each b- and y-ion with the loss of
+# two nh3 groups. These peaks will have 1 and 2, respectively, in the NH3 column
+# of the output.
+# Only available for crux-predict-peptide-ions.
+nh3=0
+
+# Include in the predicted peaks, b/y ions with the loss of 1 to n water
+# molecules. See --nh3 for an example.
+# Only available for crux-predict-peptide-ions.
+h2o=0
+
+# The name of the file in FASTA format.
+# Option for spectral-counts
+protein-database=
+
+# Type of analysis to make on the match results: (RAW|NSAF|dNSAF|SIN|EMPAI).
+# With exception of the RAW metric, the database of sequences need to be
+# provided using --protein-database.
+# Available for spectral-counts.  RAW is raw counts, NSAF is Normalized Spectral
+# Abundance Factor, dNSAF is Distributed Spectral Abundance Factor, SIN is
+# Spectral Index Normalized and EMPAI is Exponentially Modified Protein
+# Abundance Index
+measure=NSAF
+
+# Ignore peptides that map to multiple proteins.
+# Available for spectral-counts.
+unique-mapping=false
+
+# Quantification at protein or peptide level.
+# Available for spectral-counts and either NSAF and SIN.
+quant-level=protein
+
+# Perform a parsimony analysis on the proteins, and report a "parsimony rank"
+# column in the output file. This column contains integers indicating the
+# protein's rank in a list sorted by spectral counts. If the parsimony analysis
+# results in two proteins being merged, then their parsimony rank is the same.
+# In such a case, the rank is assigned based on the largest spectral count of
+# any protein in the merged meta-protein. The "simple" parsimony algorithm only
+# merges two proteins A and B if the peptides identified in protein A are the
+# same as or a subset of the peptides identified in protein B. The "greedy"
+# parsimony algorithm does additional merging, using the peptide q-values to
+# greedily assign each peptide to a single protein.
+# Available for spectral-counts.
+parsimony=none
+
+# Determines what type of threshold to use when filtering matches. none : read
+# all matches, qvalue : use calculated q-value from percolator or q-ranker,
+# custom : use --custom-threshold-name and --custom-threshold-min parameters.
+# used for crux spectral-counts
+threshold-type=qvalue
+
+# Only consider PSMs with a threshold value. By default, q-values are
+# thresholded using a specified threshold value. This behavior can be changed
+# using the --custom-threshold and --threshold-min parameters.
+# Available for spectral-counts. All PSMs with higher (or lower) than this will
+# be ignored.
+threshold=0.01
+
+# Specify which field to apply the threshold to. The direction of the threshold
+# (<= or >=) is governed by --custom-threshold-min. By default, the threshold
+# applies to the q-value, specified by "percolator q-value", "q-ranker q-value",
+# "decoy q-value (xcorr)", or "barista q-value".
+# Available for spectral-counts.
+custom-threshold-name=
+
+# When selecting matches with a custom threshold, custom-threshold-min
+# determines whether to filter matches with custom-threshold-name values that
+# are greater-than or equal (F) or less-than or equal (T) than the threshold.
+# Available for spectral-counts.
+custom-threshold-min=true
+
+# MS2 file corresponding to the psm file. Required to measure the SIN. Ignored
+# for NSAF, dNSAF and EMPAI.
+# Available for spectral-counts with measure=SIN.
+input-ms2=
+
+# Use mzid's passThreshold attribute to filter matches.
+# Used when parsing mzIdentML files.
+mzid-use-pass-threshold=false
+
+# Change the mass of all amino acids 'A' by the given amount.
+# 
+A=0
+
+# Change the mass of all amino acids 'C' by the given amount.
+# 
+C=57.021464
+
+# Change the mass of all amino acids 'D' by the given amount.
+# 
+D=0
+
+# Change the mass of all amino acids 'E' by the given amount.
+# 
+E=0
+
+# Change the mass of all amino acids 'F' by the given amount.
+# 
+F=0
+
+# Change the mass of all amino acids 'G' by the given amount.
+# 
+G=0
+
+# Change the mass of all amino acids 'H' by the given amount.
+# 
+H=0
+
+# Change the mass of all amino acids 'I' by the given amount.
+# 
+I=0
+
+# Change the mass of all amino acids 'K' by the given amount.
+# 
+K=0
+
+# Change the mass of all amino acids 'L' by the given amount.
+# 
+L=0
+
+# Change the mass of all amino acids 'M' by the given amount.
+# 
+M=0
+
+# Change the mass of all amino acids 'N' by the given amount.
+# 
+N=0
+
+# Change the mass of all amino acids 'P' by the given amount.
+# 
+P=0
+
+# Change the mass of all amino acids 'Q' by the given amount.
+# 
+Q=0
+
+# Change the mass of all amino acids 'R' by the given amount.
+# 
+R=0
+
+# Change the mass of all amino acids 'S' by the given amount.
+# 
+S=0
+
+# Change the mass of all amino acids 'T' by the given amount.
+# 
+T=0
+
+# Change the mass of all amino acids 'V' by the given amount.
+# 
+V=0
+
+# Change the mass of all amino acids 'W' by the given amount.
+# 
+W=0
+
+# Change the mass of all amino acids 'Y' by the given amount.
+# 
+Y=0
+
+# Legal values are auto, tsv, sqt, pepxml or mzidentml format.
+# option, for psm-convert
+input-format=auto
+
+# Whether matches/ion are distinct (as opposed to total).
+# option, for psm-convert.
+distinct-matches=true
+
+# Rather than the spectrum, output summary statistics to standard output. Each
+# statistic is placed on a separate line, in the format <name>:<value> (e.g.
+# "TIC:1000.0").
+# Available only for crux-get-ms2-spectrum.  Does not affect contents of the
+# output file.
+stats=false
+
+# write out the weibull training points for thespectrum,charge
+# Available for crux search-for-xlinks
+write-weibull-points=false
+
+# Print the theoretical spectrum
+# Available for xlink-predict-peptide-ions.
+print-theoretical-spectrum=false
+
+# Use the old version of xlink-searching algorithm. When false, a new version of
+# the code is run. The new version supports variable modifications and can
+# handle more complex databases. This new code is still in development and
+# should be considered a beta release.
+# Available for search-for-xlinks program.
+use-old-xlink=true
+
+# Score method for xlink {composite, modification, concatenated}.
+# Available for xlink-score-spectrum.
+xlink-score-method=composite
+
+# Provides a list of isotopic windows to search. For example, -1,0,1 will search
+# in three disjoint windows: (1) precursor_mass - neutron_mass +/- window, (2)
+# precursor_mass +/- window, and (3) precursor_mass + neutron_mass +/- window.
+# The window size is defined from the precursor-window and precursor-window-type
+# parameters. This option is only available when use-old-xlink=F.
+# Used for crux search-for-xlinks
+isotope-windows=0
+
+# Top-n open-mod peptides to consider in the second pass, value of 0 will search
+# all candiates.
+# Available for crux search-for-xlinks
+xlink-top-n=250
+
+# If there is no cross-link candidate found, then don't bother looking for
+# linear, self-loop, and dead-link candidates.
+# Available for crux search-for-xlinks program.
+require-xlink-candidate=false
+
+# Include linear peptides in the search.
+# Available for crux search-for-xlinks program.
+xlink-include-linears=true
+
+# Include dead-end peptides in the search.
+# Available for crux search-for-xlinks program.
+xlink-include-deadends=true
+
+# Include self-loop peptides in the search.
+# Available for crux search-for-xlinks program.
+xlink-include-selfloops=true
+
+# Include intra-protein cross-link candiates within the search.
+# Available for crux search-for-xlinks program.
+xlink-include-intra=true
+
+# Include inter-protein cross-link candidates within the search.
+# Available for crux search-for-xlinks program.
+xlink-include-inter=true
+
+# Include crosslink candidates that are both inter and intra.
+# Available for crux search-for-xlinks program.
+xlink-include-inter-intra=true
+
+# List of amino acids for which the cross-linker can prevent cleavage. This
+# option is only available when use-old-xlink=F.
+# Available for search-for-xlinks program.
+xlink-prevents-cleavage=K
+
+# Specify the maximum number of modifications allowed on a crosslinked peptide.
+# This option is only available when use-old-xlink=F.
+# Available for crux search-for-xlinks
+max-xlink-mods=255
+
+# Search decoy peptides within +/- precursor-window-weibull of the precursor
+# mass. The resulting scores are used only for fitting the Weibull distribution
+# Available for crux search-for-xlinks. 
+precursor-window-weibull=20
+
+# Window type to use in conjunction with the precursor-window-weibull parameter.
+# Available for crux search-for-xlinks
+precursor-window-type-weibull=mass
+
+# Keep shuffling and collecting XCorr scores until the minimum number of points
+# for weibull fitting (using targets and decoys) is achieved.
+# Available for crux search-for-xlinks
+min-weibull-points=4000
+
+# Determines which spectral feature detection algorithm to use. Different
+# results are possible with each algorithm, and there are pros and cons to each.
+# Available for crux hardklor
+hardklor-algorithm=version1
+
+# Defines alternative averagine models in the analysis that incorporate
+# additional atoms and/or isotopic enrichments. Modifications are represented as
+# text strings. Inclusion of additional atoms in the model is done using by
+# entering an atomic formula, such as: PO2 or Cl. Inclusion of isotopic
+# enrichment to the model is done by specifying the percent enrichment (as a
+# decimal) followed by the atom being enriched and an index of the isotope. For
+# example, 0.75H1 specifies 75% enrichment of the first heavy isotope of
+# hydrogen. In other words, 75% deuterium enrichment. Two or more modifications
+# can be combined into the same model, and separated by spaces: B2 0.5B1
+# Available for crux hardklor
+averagine-mod=
+
+# Boxcar averaging is a sliding window that averages n adjacent spectra prior to
+# feature detection. Averaging generally improves the signal-to-noise ratio of
+# features in the spectra, as well as improving the shape of isotopic envelopes.
+# However, averaging will also change the observed peak intensities. Averaging
+# with too wide a window will increase the occurrence of overlapping features
+# and broaden the chromatographic profiles of observed features. The number
+# specified is the total adjacent scans to be combined, centered on the scan
+# being analyzed. Therefore, an odd number is recommended to center the boxcar
+# window. For example, a value of 3 would produce an average of the scan of
+# interest, plus one scan on each side. A value of 0 disables boxcar averaging.
+# Available for crux hardklor
+boxcar-averaging=0
+
+# This parameter is only functional when boxcar-averaging is used. The filter
+# will remove any peaks not seen in n scans in the boxcar window. The effect is
+# to reduce peak accumulation due to noise and reduce chromatographic broadening
+# of peaks. Caution should be used as over-filtering can occur. The suggested
+# number of scans to set for filtering should be equal to or less than the
+# boxcar-averaging window size. A value of 0 disables filtering.
+# Available for crux hardklor
+boxcar-filter=0
+
+# This parameter is only functional when boxcar-filter is used. The value
+# specifies the mass tolerance in ppm for declaring a peak the same prior to
+# filtering across all scans in the boxcar window.
+# Available for crux hardklor
+boxcar-filter-ppm=10
+
+# Indicates whether the data contain profile or centroided peaks.
+# Available for crux hardklor
+centroided=false
+
+# Choose the charge state determination method.
+# Available for crux hardklor
+cdm=Q
+
+# Specifies the minimum charge state to allow when finding spectral features. It
+# is best to set this value to the lowest assumed charge state to be present. If
+# set higher than actual charge states that are present, those features will not
+# be identified or incorrectly assigned a different charge state and mass.
+# Available for crux hardklor
+min-charge=1
+
+# Specifies the maximum charge state to allow when finding spectral features. It
+# is best to set this value to a practical number (i.e. do not set it to 20 when
+# doing a tryptic shotgun analysis). If set higher than actual charge states
+# that are present, the algorithm will perform significantly slower without any
+# improvement in results.
+# Available for crux hardklor
+max-charge=5
+
+# Sets the correlation threshold (cosine similarity) for accepting each
+# predicted feature.
+# Available for crux hardklor
+corr=0.85
+
+# Sets the depth of combinatorial analysis. For a given set of peaks in a
+# spectrum, search for up to this number of combined peptides that explain the
+# observed peaks. The analysis stops before depth is reached if the current
+# number of deconvolved features explains the observed peaks with a correlation
+# score above the threshold defined with the correlation parameter.
+# Available for crux hardklor
+depth=3
+
+# When reporting each feature, report abundance as the sum of all isotope peaks.
+# The value reported is the estimate of the correct peak heights based on the
+# averagine model scaled to the observed peak heights.
+# Available for crux hardklor
+distribution-area=false
+
+# Specifies an ASCII text file that defines symbols for the periodic table.
+# Available for crux hardklor
+hardklor-data-file=
+
+# Indicates the type of instrument used to collect data. This parameter,
+# combined with the resolution parameter, define how spectra will be centroided
+# (if you provide profile spectra) and the accuracy when aligning observed peaks
+# to the models.
+# Available for crux hardklor
+instrument=fticr
+
+# Specifies an ASCII text file that can be read to override the natural isotope
+# abundances for all elements.
+# Available for crux hardklor
+isotope-data-file=
+
+# Specifies the maximum number of models to build for a set of peaks being
+# analyzed. Regardless of the setting, the number of models will never exceed
+# the number of peaks in the current set. However, as many of the low abundance
+# peaks are noise or tail ends of distributions, defining models for them is
+# detrimental to the analysis.
+# Available for crux hardklor
+max-features=10
+
+# Filters the spectra prior to analysis for the requested MS/MS level. For
+# example, if the data contain MS and MS/MS spectra, setting mzxml-filter = 1
+# will analyze only the MS scan events. Setting mzxml-filter = 2 will analyze
+# only the MS/MS scan events.
+# Available for crux hardklor
+mzxml-filter=1
+
+# Constrains the search in each spectrum to signals below this value in
+# Thomsons. Setting to 0 disables this feature.
+# Available for crux hardklor
+mz-max=0
+
+# Constrains the search in each spectrum to signals above this value in
+# Thomsons. Setting to 0 disables this feature.
+# Available for crux hardklor
+mz-min=0
+
+# Only used when algorithm = version1. Defines the maximum window size in
+# Thomsons to analyze when deconvolving peaks in a spectrum into features.
+# Available for crux hardklor
+mz-window=4
+
+# Specifies the resolution of the instrument at 400 m/z for the data being
+# analyzed.
+# Available for crux hardklor
+resolution=100000
+
+# Used to restrict analysis to spectra with scan numbers below this parameter
+# value. A value of 0 disables this feature.
+# Available for crux hardklor
+scan-range-max=0
+
+# Used to restrict analysis to spectra with scan numbers above this parameter
+# value. A value of 0 disables this feature.
+# Available for crux hardklor
+scan-range-min=0
+
+# Set the sensitivity level. There are four levels: 0 (low), 1 (moderate), 2
+# (high), and 3 (max). Increasing the sensitivity will increase computation
+# time, but will also yield more isotope distributions.
+# Available for crux hardklor
+sensitivity=2
+
+# Filters spectra to remove peaks below this signal-to-noise ratio prior to
+# finding features.
+# Available for crux hardklor
+signal-to-noise=1
+
+# Uses Savitzky-Golay smoothing on profile peak data prior to centroiding the
+# spectra. This parameter is recommended for low resolution spectra only.
+# Smoothing data causes peak depression and broadening. Only use odd numbers for
+# the degree of smoothing (as it defines a window centered on each data point).
+# Higher values will produce smoother peaks, but with greater depression and
+# broadening. Setting this parameter to 0 disables smoothing.
+# Available for crux hardklor
+smooth=0
+
+# Set the signal-to-noise window length (in m/z). Because noise may be
+# non-uniform across a spectrum, this value adjusts the segment size considered
+# when calculating a signal-over-noise ratio.
+# Available for crux hardklor
+sn-window=250
+
+# Applies the lowest noise threshold of any sn_window across the entire mass
+# range for a spectrum. Setting this parameter to 0 turns off this feature, and
+# different noise thresholds will be used for each local mass window in a
+# spectrum.
+# Available for crux hardklor
+static-sn=true
+
+# Ignore PPIDs that persist for longer than this length of time in the MS1
+# spectra. The unit of time is whatever unit is used in your data file (usually
+# minutes). These PPIDs are considered contaminants.
+# Available for crux bullseye
+max-persist=2
+
+# When true, require an exact match (as defined by --exact-tolerance) between
+# the center of the precursor isolation window in the MS2 scan and the base
+# isotopic peak of the PPID. If this option is set to false and no exact match
+# is observed, then attempt to match using a wider m/z tolerance. This wider
+# tolerance is calculated using the PPID's monoisotopic mass and charge (the
+# higher the charge, the smaller the window).
+# Available for crux bullseye
+exact-match=false
+
+# Allowed gap size when checking for PPIDs across consecutive MS1 scans.
+# Available for crux bullseye
+gap-tolerance=1
+
+# Only consider PPIDs above this minimum mass in daltons.
+# Available for crux bullseye
+bullseye-min-mass=600
+
+# Only consider PPIDs below this maximum mass in daltons.
+# Available for crux bullseye
+bullseye-max-mass=8000
+
+# Set the tolerance (+/-ppm) for --exact-match.
+# Available for crux bullseye
+exact-tolerance=10
+
+# Set the mass tolerance (+/-ppm) for finding PPIDs in consecutive MS1 scans.
+# Available for crux bullseye
+persist-tolerance=10
+
+# Total number of MS1 scans over which a PPID must be observed to be considered
+# real. Gaps in persistence are allowed by setting --gap-tolerance.
+# Available for crux bullseye
+scan-tolerance=3
+
+# Set the tolerance (+/-units) around the retention time over which a PPID can
+# be matches to the MS2 spectrum. The unit of time is whatever unit is used in
+# your data file (usually minutes).
+# Available for crux bullseye
+retention-tolerance=0.5
+
+# The format to write the output spectra to. If empty, the spectra will be
+# output in the same format as the MS2 input.
+# Available for crux bullseye
+spectrum-format=
+
+# Sort in ascending (T) or descending (F) order.
+# Available for sort-by-column
+ascending=true
+
+# Specify the input and output delimiter to use when processing the delimited
+# file.  The argument can be either a single character or the keyword 'tab.'
+# Available for the delimited utility programs.
+delimiter=tab
+
+# Print the header line of the file, in addition to the columns that match.
+# Available for crux extract-columns and extract-rows
+header=true
+
+# Specifies the data type of the column, either an integer (int), a floating
+# point number (real), or a string.
+# Available for crux extract-rows
+column-type=string
+
+# Specify the operator that is used to compare an entry in the specified column
+# to the value given on the command line.
+# Available for crux extract-rows
+comparison=eq
+
+# Run the Bullseye algorithm on the given MS data, using it to assign
+# high-resolution precursor values to the MS/MS data. If a spectrum file ends
+# with .ms2 or .cms2, matching .ms1/.cms1 files will be used as the MS1 file.
+# Otherwise, it is assumed that the spectrum file contains both MS1 and MS2
+# scans.
+# Available for crux pipeline
+bullseye=false
+
+# Specify which search engine to use.
+# Available for crux pipeline
+search-engine=tide-search
+
+# Specify which post-processor to apply to the search results.
+# Available for crux pipeline
+post-processor=percolator
+
+# Minimum precursor m/z value to use in measurement error estimation.
+# Available for param-medic and tide-search and comet
+pm-min-precursor-mz=400
+
+# Minimum precursor m/z value to use in measurement error estimation.
+# Available for param-medic and tide-search and comet
+pm-max-precursor-mz=1800
+
+# Minimum fragment m/z value to use in measurement error estimation.
+# Available for param-medic and tide-search and comet
+pm-min-frag-mz=150
+
+# Maximum fragment m/z value to use in measurement error estimation.
+# Available for param-medic and tide-search and comet
+pm-max-frag-mz=1800
+
+# Minimum fragment peaks an MS/MS scan must contain to be used in measurement
+# error estimation.
+# Available for param-medic and tide-search and comet
+pm-min-scan-frag-peaks=40
+
+# Maximum ppm distance between precursor m/z values to consider two scans
+# potentially generated by the same peptide for measurement error estimation.
+# Available for param-medic and tide-search and comet
+pm-max-precursor-delta-ppm=50
+
+# Precursor charge state to consider MS/MS spectra from, in measurement error
+# estimation. Ideally, this should be the most frequently occurring charge state
+# in the given data.
+# Available for param-medic and tide-search and comet
+pm-charge=2
+
+# Number of most-intense fragment peaks to consider for measurement error
+# estimation, per MS/MS spectrum.
+# Available for param-medic and tide-search and comet
+pm-top-n-frag-peaks=30
+
+# Number of fragment peaks per spectrum pair to be used in fragment error
+# estimation.
+# Available for param-medic and tide-search and comet
+pm-pair-top-n-frag-peaks=5
+
+# Number of the most-intense peaks that two spectra must share in order to
+# potentially be generated by the same peptide, for measurement error
+# estimation.
+# Available for param-medic and tide-search and comet
+pm-min-common-frag-peaks=20
+
+# Maximum number of scans two spectra can be separated by in order to be
+# considered potentially generated by the same peptide, for measurement error
+# estimation.
+# Available for param-medic and tide-search and comet
+pm-max-scan-separation=1000
+
+# Minimum number of peak pairs (for precursor or fragment) that must be
+# successfully paired in order to attempt to estimate measurement error
+# distribution.
+# Available for param-medic and tide-search and comet
+pm-min-peak-pairs=100
+
+# Consider modifications on any amino acid in aa list with at most
+# max-per-peptide in one peptide. The parameter takes the form
+# <mass change>:<aa list>:<max per
+# peptide>:<prevents cleavage>:<prevents cross-link>. This parameter
+# may be included with different values multiple times so long as the
+# total number of mod, cmod, and nmod parameters does not exceed 11. The
+# "prevents cleavage" and "prevents cross-link" arguments are optional
+# T/F arguments for describing whether the modification prevents
+# enzymatic cleavage of cross-linking, respectively. This option is only
+# available when use-old-xlink=F. Note that this parameter only takes
+# effect when specified in the parameter file.
+# Available for search-for-xlinks.
+mod=NO MODS
+
+# Specify a variable modification to apply to N-terminus of peptides. 
+# <mass change>:<max distance from protein n-term (-1 for no max)> Note
+# that this parameter only takes effect when specified in the parameter
+# file.
+# Available for search-for-xlinks.
+nmod=NO MODS
+
+# Specify a variable modification to apply to C-terminus of peptides.
+# <mass change>:<max distance from protein c-term (-1 for no max)>. Note
+# that this parameter only takes effect when specified in the parameter
+# file.
+# Available for search-for-xlinks.
+cmod=NO MODS
+
+####################
+# Comet Parameters #
+####################
+# 0=no, 1=concatenated search, 2=separate search.
+# Available for comet.
+decoy_search=0
+
+# 0=poll CPU to set num threads; else specify num threads directly.
+# Available for comet.
+num_threads=0
+
+# Controls the mass tolerance value.  The mass tolerance is set at +/- the
+# specified number i.e. an entered value of "1.0" applies a -1.0 to +1.0
+# tolerance. The units of the mass tolerance is controlled by the parameter
+# "peptide_mass_units". 
+# Available for comet.
+peptide_mass_tolerance=3
+
+# 0=amu, 1=mmu, 2=ppm.
+# Available for comet.
+peptide_mass_units=0
+
+# Automatically estimate optimal value for the peptide_mass_tolerancel parameter
+# from the spectra themselves. false=no estimation, warn=try to estimate but use
+# the default value in case of failure, fail=try to estimate and quit in case of
+# failure.
+# Available for comet.
+auto_peptide_mass_tolerance=false
+
+# 0=average masses, 1=monoisotopic masses.
+# Available for comet.
+mass_type_parent=1
+
+# 0=average masses, 1=monoisotopic masses.
+# Available for comet.
+mass_type_fragment=1
+
+# 0=singly charged peptide mass, 1=precursor m/z.
+# Available for comet.
+precursor_tolerance_type=0
+
+# 0=off, 1=on -1/0/1/2/3 (standard C13 error), 2=-8/-4/0/4/8 (for +4/+8
+# labeling).
+# Available for comet.
+isotope_error=0
+
+# Specify a search enzyme from the end of the parameter file.
+# Available for comet.
+search_enzyme_number=1
+
+# valid values are 1 (semi-digested), 2 (fully digested), 8 N-term, 9 C-term.
+# Available for comet.
+num_enzyme_termini=2
+
+# Maximum value is 5; for enzyme search.
+# Available for comet.
+allowed_missed_cleavage=2
+
+# Binning to use on fragment ions.
+# Available for comet.
+fragment_bin_tol=1.000507
+
+# Offset position to start the binning (0.0 to 1.0).
+# Available for comet.
+fragment_bin_offset=0.4
+
+# Automatically estimate optimal value for the fragment_bin_tol parameter from
+# the spectra themselves. false=no estimation, warn=try to estimate but use the
+# default value in case of failure, fail=try to estimate and quit in case of
+# failure.
+# Available for comet.
+auto_fragment_bin_tol=false
+
+# 0=default peak shape, 1=M peak only.
+# Available for comet.
+theoretical_fragment_ions=1
+
+# Controls whether or not A-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_A_ions=0
+
+# Controls whether or not B-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_B_ions=1
+
+# Controls whether or not C-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_C_ions=0
+
+# Controls whether or not X-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_X_ions=0
+
+# Controls whether or not Y-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_Y_ions=1
+
+# Controls whether or not Z-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_Z_ions=0
+
+# 0=no, 1= yes to consider NH3/H2O neutral loss peak.
+# Available for comet.
+use_NL_ions=1
+
+# 0=no, 1=yes  write sqt file.
+# Available for comet.
+output_sqtfile=0
+
+# 0=no, 1=yes  write tab-delimited text file.
+# Available for comet.
+output_txtfile=1
+
+# 0=no, 1=yes  write pep.xml file.
+# Available for comet.
+output_pepxmlfile=1
+
+# 0=no, 1=yes write percolator file.
+# Available for comet.
+output_percolatorfile=0
+
+# 0=no, 1=yes  write .out files.
+# Available for comet.
+output_outfiles=0
+
+# 0=no, 1=yes to replace Sp with expect in out & sqt.
+# Available for comet.
+print_expect_score=1
+
+# num peptide results to show.
+# Available for comet.
+num_output_lines=5
+
+# 0=no, 1=yes for out files only.
+# Available for comet.
+show_fragment_ions=0
+
+# Sample enzyme which is possibly different than the one applied to the search.
+# Used to calculate NTT & NMC in pepXML output.
+# Available for comet. 
+sample_enzyme_number=1
+
+# Start and scan scan range to search; 0 as first entry ignores parameter.
+# Available for comet.
+scan_range=0 0
+
+# Precursor charge range to analyze; does not override mzXML charge; 0 as first
+# entry ignores parameter.
+# Available for comet.
+precursor_charge=0 0
+
+# Specifies the whether to override existing precursor charge state information
+# when present in the files with the charge range specified by the
+# "precursor_charge" parameter.
+# Available for comet.
+override_charge=0
+
+# MS level to analyze, valid are levels 2 or 3.
+# Available for comet. 
+ms_level=2
+
+# Specifies which scan types are searched.
+# Available for comet. 
+activation_method=ALL
+
+# MH+ peptide mass range to analyze.
+# Available for comet.
+digest_mass_range=600.0 5000.0
+
+# Number of search hits to store internally.
+# Available for comet.
+num_results=50
+
+# For '.out' file output only, 0=search everything again, 1=don't search if .out
+# exists.
+# Available for comet.
+skip_researching=1
+
+# Set maximum fragment charge state to analyze (allowed max 5).
+# Available for comet.
+max_fragment_charge=3
+
+# Set maximum precursor charge state to analyze (allowed max 9).
+# Available for comet.
+max_precursor_charge=6
+
+# 0=proteinDB, 1-6, 7=forward three, 8=reverse three, 9=all six.
+# Available for comet.
+nucleotide_reading_frame=0
+
+# 0=leave sequences as-is; 1=also consider sequence w/o N-term methionine.
+# Available for comet.
+clip_nterm_methionine=0
+
+# Maximum number of spectra to search at a time; 0 to search the entire scan
+# range in one loop.
+# Available for comet.
+spectrum_batch_size=0
+
+# Specifies the prefix of the protein names that indicates a decoy.
+# Available for comet.
+decoy_prefix=decoy_
+
+# Specifies the suffix string that is appended to the base output name for the
+# pep.xml, pin.xml, txt and sqt output files.
+# Available for comet.
+output_suffix=
+
+# Specifies one or more mass offsets to apply. This value(s) are effectively
+# subtracted from each precursor mass such that peptides that are smaller than
+# the precursor mass by the offset value can still be matched to the respective
+# spectrum.
+# Available for comet.
+mass_offsets=
+
+# Minimum number of peaks in spectrum to search.
+# Available for comet.
+minimum_peaks=10
+
+# Minimum intensity value to read in.
+# Available for comet. 
+minimum_intensity=0
+
+# 0=no, 1=yes, 2=all charge reduced precursor peaks (for ETD).
+# Available for comet. 
+remove_precursor_peak=0
+
+# +- Da tolerance for precursor removal.
+# Available for comet. 
+remove_precursor_tolerance=1.5
+
+# For iTRAQ/TMT type data; will clear out all peaks in the specified m/z range.
+# Available for comet.
+clear_mz_range=0.0 0.0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod01=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod02=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod03=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod04=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod05=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod06=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod07=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod08=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod09=0.0 null 0 4 -1 0 0
+
+# Specifies the total/maximum number of residues that can be modified in a
+# peptide.
+# Available for comet.
+max_variable_mods_in_peptide=5
+
+# Controls whether the analyzed peptides must contain at least one variable
+# modification.
+# Available for comet.
+require_variable_mod=0
+
+# Specifiy a static modification to the c-terminus of all peptides.
+# Available for comet.
+add_Cterm_peptide=0
+
+# Specify a static modification to the n-terminus of all peptides.
+# Available for comet.
+add_Nterm_peptide=0
+
+# Specify a static modification to the c-terminal peptide of each protein.
+# Available for comet.
+add_Cterm_protein=0
+
+# Specify a static modification to the n-terminal peptide of each protein.
+# Available for comet.
+add_Nterm_protein=0
+
+# Specify a static modification to the residue A.
+# Available for comet.
+add_A_alanine=0
+
+# Specify a static modification to the residue B.
+# Available for comet.
+add_B_user_amino_acid=0
+
+# Specify a static modification to the residue C.
+# Available for comet.
+add_C_cysteine=57.021464
+
+# Specify a static modification to the residue D.
+# Available for comet.
+add_D_aspartic_acid=0
+
+# Specify a static modification to the residue E.
+# Available for comet.
+add_E_glutamic_acid=0
+
+# Specify a static modification to the residue F.
+# Available for comet.
+add_F_phenylalanine=0
+
+# Specify a static modification to the residue G.
+# Available for comet.
+add_G_glycine=0
+
+# Specify a static modification to the residue H.
+# Available for comet.
+add_H_histidine=0
+
+# Specify a static modification to the residue I.
+# Available for comet.
+add_I_isoleucine=0
+
+# Specify a static modification to the residue J.
+# Available for comet.
+add_J_user_amino_acid=0
+
+# Specify a static modification to the residue K.
+# Available for comet.
+add_K_lysine=0
+
+# Specify a static modification to the residue L.
+# Available for comet.
+add_L_leucine=0
+
+# Specify a static modification to the residue M.
+# Available for comet.
+add_M_methionine=0
+
+# Specify a static modification to the residue N.
+# Available for comet.
+add_N_asparagine=0
+
+# Specify a static modification to the residue O.
+# Available for comet.
+add_O_ornithine=0
+
+# Specify a static modification to the residue P.
+# Available for comet.
+add_P_proline=0
+
+# Specify a static modification to the residue Q.
+# Available for comet.
+add_Q_glutamine=0
+
+# Specify a static modification to the residue R.
+# Available for comet.
+add_R_arginine=0
+
+# Specify a static modification to the residue S.
+# Available for comet.
+add_S_serine=0
+
+# Specify a static modification to the residue T.
+# Available for comet.
+add_T_threonine=0
+
+# Specify a static modification to the residue U.
+# Available for comet.
+add_U_selenocysteine=0
+
+# Specify a static modification to the residue V.
+# Available for comet.
+add_V_valine=0
+
+# Specify a static modification to the residue W.
+# Available for comet.
+add_W_tryptophan=0
+
+# Specify a static modification to the residue X.
+# Available for comet.
+add_X_user_amino_acid=0
+
+# Specify a static modification to the residue Y.
+# Available for comet.
+add_Y_tyrosine=0
+
+# Specify a static modification to the residue Z.
+# Available for comet.
+add_Z_user_amino_acid=0
+
+#
+# COMET_ENZYME_INFO _must_ be at the end of this parameters file
+#
+[COMET_ENZYME_INFO]
+0.  No_enzyme                      0  -          -
+1.  Trypsin                        1  KR         P
+2.  Trypsin/P                      1  KR         -
+3.  Lys_C                          1  K          P
+4.  Lys_N                          0  K          -
+5.  Arg_C                          1  R          P
+6.  Asp_N                          0  D          -
+7.  CNBr                           1  M          -
+8.  Glu_C                          1  DE         P
+9.  PepsinA                        1  FL         P
+10. Chymotrypsin                   1  FWYL       P
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/demos/demo1.sh b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/demos/demo1.sh
new file mode 100644
index 0000000..7c90a03
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/demos/demo1.sh
@@ -0,0 +1,34 @@
+#!/bin/bash -x
+# AUTHOR: WSN
+# CREATE DATE: 18 December 2013, Tokyo Narita airport
+
+# This file implements the commands described in ../search-tutorial.html.
+
+if [[ -e ../../../src/crux ]]; then
+  CRUX=../../../src/crux
+else
+  CRUX=../../../release/src/crux
+fi    
+    
+rm -rf yeast-index crux-output
+chmod +x ./tsv2html.py
+cp ../example-files/demo.ms2 .
+cp ../example-files/small-yeast.fasta .
+
+$CRUX tide-index small-yeast.fasta yeast-index
+
+$CRUX tide-search --compute-sp T demo.ms2 yeast-index
+$CRUX sort-by-column --column-type real --ascending F \
+      crux-output/tide-search.target.txt "xcorr score" \
+      > crux-output/tide-search.target.sort.txt
+head -11 crux-output/tide-search.target.sort.txt \
+     | ./tsv2html.py - \
+     > crux-output/tide-search.target.sort.html
+
+$CRUX percolator crux-output/tide-search.target.txt 
+$CRUX sort-by-column --column-type real --ascending F \
+      crux-output/percolator.target.psms.txt "percolator score" \
+      > crux-output/percolator.target.psms.sort.txt
+head -11 crux-output/percolator.target.psms.sort.txt \
+     | ./tsv2html.py - \
+     > crux-output/percolator.target.psms.sort.html
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/demos/tsv2html.py b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/demos/tsv2html.py
new file mode 100644
index 0000000..06914a1
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/demos/tsv2html.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+# AUTHOR: William Stafford Noble
+# CREATE DATE: 13 Sep 2015
+import sys
+
+USAGE = """USAGE: tsv2html.py [options] <tab-delimited file>
+
+  Convert a tab-delimited text file an HTML table.  Use "-" to read
+  from stdin.
+
+  Options:
+    --title <string>   
+    --table-only
+"""
+
+title = ""
+tableOnly = False
+
+# Parse the command line.
+sys.argv = sys.argv[1:]
+while (len(sys.argv) > 1):
+  nextArg = sys.argv[0]
+  sys.argv = sys.argv[1:]
+  if (nextArg == "--title"):
+    title = sys.argv[1]
+    sys.argv = sys.argv[1:]
+  elif (nextArg == "--table-only"):
+    tableOnly = True
+  else:
+    sys.stderr.write("Invalid option (%s).\n" % nextArg)
+    sys.exit(1)
+if (len(sys.argv) != 1):
+  sys.stderr.write(USAGE)
+  sys.exit(1)
+tsvFileName = sys.argv[0]
+
+# Open the input file.
+if (tsvFileName == "-"):
+  tsvFile = sys.stdin
+else:
+  tsvFile = open(tsvFileName, "r")
+
+# Print the header.
+if (not tableOnly):
+  sys.stdout.write("<html>\n")
+  sys.stdout.write("<head>\n")
+  if (title != ""):
+    sys.stdout.write("<title>%s</title>\n" % title)
+  sys.stdout.write("</head>\n")
+  sys.stdout.write("<body bgcolor=\"#ffffff\">\n")
+  if (title != ""):
+    sys.stdout.write("<h1>%s</h1>" % title)
+sys.stdout.write("<table border cellspacing=0>\n")
+
+# Read and display header row
+fields = tsvFile.readline().rstrip().split("\t")
+for field in fields:
+  sys.stdout.write("<td><b>%s</b></td>" % field)
+sys.stdout.write("</tr>\n")
+
+# Process lines.
+for line in tsvFile:
+
+  fields = line.rstrip().split("\t")
+  sys.stdout.write("<tr>\n")
+  for field in fields:
+    if (field == ""):
+      field = "&nbsp"
+    sys.stdout.write("<td>%s</td>" % field)
+  sys.stdout.write("</tr>\n")
+tsvFile.close()
+
+# Print tail info.
+sys.stdout.write("</table>\n")
+if not tableOnly:
+  sys.stdout.write("</body>\n")
+  sys.stdout.write("</html>\n")
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/deploy-to-web.sh b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/deploy-to-web.sh
new file mode 100644
index 0000000..4fcfe88
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/deploy-to-web.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+scp *.html charlesegrant at web.sourceforge.net:/home/project-web/cruxtoolkit/htdocs
+scp *.png charlesegrant at web.sourceforge.net:/home/project-web/cruxtoolkit/htdocs
+scp *.gif charlesegrant at web.sourceforge.net:/home/project-web/cruxtoolkit/htdocs
+scp crux.html charlesegrant at web.sourceforge.net:/home/project-web/cruxtoolkit/htdocs/index.html
+scp crux.css charlesegrant at web.sourceforge.net:/home/project-web/cruxtoolkit/htdocs
+scp -r data charlesegrant at web.sourceforge.net:/home/project-web/cruxtoolkit/htdocs
+scp -r demos charlesegrant at web.sourceforge.net:/home/project-web/cruxtoolkit/htdocs
+scp -r download charlesegrant at web.sourceforge.net:/home/project-web/cruxtoolkit/htdocs
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/download.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/download.html
new file mode 100644
index 0000000..5b6fa90
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/download.html
@@ -0,0 +1,741 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Download Crux</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull    = $('.btn');
+        menu    = $('nav ul');
+        menuHeight  = menu.height();
+
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+<style type="text/css">
+.inset {
+  position:relative;
+  left:20px;
+}
+
+.lic-div {
+  border:1px solid black;
+  height:150px;
+  width:600px;
+  margin-left:10px;
+  margin-top:10px;
+  margin-bottom:10px;
+  overflow-y:scroll;
+  overflow-x:hidden;
+}
+  p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Arial; min-height: 11.0px}
+  p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 14.0px Arial}
+  p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.0px Arial}
+  p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.0px Arial; min-height: 11.0px}
+  p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px Arial}
+  p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px Arial; min-height: 14.0px}
+  p.p7 {margin: 0.0px 0.0px 0.0px 18.0px; text-align: justify; text-indent: -18.0px; font: 10.0px Arial}
+  p.p8 {margin: 0.0px 0.0px 0.0px 13.5px; text-align: justify; text-indent: -13.5px; font: 10.0px Arial}
+  p.p9 {margin: 0.0px 0.0px 0.0px 18.0px; text-align: justify; text-indent: -18.0px; font: 10.0px Arial; min-height: 11.0px}
+  p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Arial}
+  p.p11 {margin: 0.0px 0.0px 0.0px 14.2px; font: 10.0px Arial}
+  p.p12 {margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 36.0px; font: 10.0px Arial; min-height: 11.0px}
+  p.p13 {margin: 0.0px 0.0px 0.0px 18.0px; font: 10.0px Arial; min-height: 11.0px}
+  p.p14 {margin: 0.0px 0.0px 0.0px 36.0px; font: 10.0px Arial}
+  p.p15 {margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 36.0px; font: 10.0px Arial}
+  p.p16 {margin: 0.0px 0.0px 0.0px 36.0px; font: 10.0px Arial; min-height: 11.0px}
+  p.p17 {margin: 0.0px 0.0px 0.0px 31.5px; text-indent: -31.5px; font: 10.0px Arial}
+  p.p18 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.0px Verdana; min-height: 12.0px}
+  p.p19 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.0px 'Times New Roman'; min-height: 11.0px}
+  p.p20 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 12.0px Arial}
+  p.p21 {margin: 0.0px 0.0px 0.0px 0.0px; font: 7.0px Arial; min-height: 7.0px}
+  li.li3 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.0px Arial}
+  span.Apple-tab-span {white-space:pre}
+  ol.ol1 {list-style-type: decimal}
+  .page-wrap:after { /*hacky just for download page. content is all over the place need this to fix footer*/
+  content: "";
+  display: none;  
+  }
+</style>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="index.html">Home</a></li>
+          <li><a href="download.html">Download</a></li>
+          <li><a href="fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content">
+    <!-- START CONTENT -->
+		
+<form action="http://noble.gs.washington.edu/crux-downloads/download.php" method="post">
+
+<h2> Get Crux Toolkit (3 steps)</H2>    
+<div class="inset">
+
+<H3> Step 1, Choose Download Type: </H3>
+<UL>
+<SELECT NAME="downloadtype">
+  <optgroup label="For End Users">
+  <OPTION value="Linux32">   Linux 32 bit binaries (NO vendor reader support)</OPTION>
+  <OPTION value="Linux64">   Linux 64 bit binaries (NO vendor reader support)</OPTION>
+  <OPTION value="OSX">   Macintosh binaries (NO vendor reader support)</OPTION>
+  <OPTION value="Windows64">   Windows 64-bit(includes vendor reader support)</OPTION>
+  <OPTION value="Windows32">   Windows 32-bit(includes vendor reader support)</OPTION>
+  </optgroup>
+  <optgroup label="For Developers">
+  <OPTION value="Source">   Source, CMake build (includes vendor reader support)</OPTION>
+   </optgroup>
+</SELECT>
+
+</UL>
+
+<H3> Step 2, Read License Agreements</H3>
+
+Crux is covered by an 
+<a href="http://www.apache.org/licenses/LICENSE-2.0" >Apache license</a>
+but depends on several libraries that have other licences.
+You must read and agree to these other licenses before downloading Crux.
+<ul>
+  <li>ProteoWizard Core:</li>
+<div class="lic-div">
+ADDENDUM TO APACHE LICENSE
+
+<p>To the best of our ability we deliver this software to you under the Apache 2.0 License listed below (the source code is available in the ProteoWizard project).  This software does, however, depend on other software libraries which place further restrictions on its use and redistribution.  By accepting the license terms for this software, you agree to comply with the restrictions imposed on you by the license agreements of the software libraries on which it depends:</p>
+
+<p>
+<B>Agilent Mass Hunter Data Access Component Library <br />
+Waters Raw Data Access Component Library <br />
+Bruker CompassXtract <br />
+Thermo-Scientific MSFileReader Library <br />
+Waters Raw Data Access Component Library <br />
+AB Sciex WIFF Reader Library </B><br /><br />
+
+ 
+NOTE:  If you do not plan to redistribute this software yourself, then you are the "end-user" in the above agreements.</p>
+
+<hr />
+<p>Apache License - Covers Core ProteoWizard Tools and Library<br></br>Version 2.0, January 2004<br></br>
+<a href="http://www.apache.org/licenses/">http://www.apache.org/licenses/</a> </p>
+<p>TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION</p>
+<p><strong><a name="definitions">1. Definitions</a></strong>.</p>
+<p>"License" shall mean the terms and conditions for use, reproduction, and
+distribution as defined by Sections 1 through 9 of this document.</p>
+<p>"Licensor" shall mean the copyright owner or entity authorized by the
+copyright owner that is granting the License.</p>
+<p>"Legal Entity" shall mean the union of the acting entity and all other
+entities that control, are controlled by, or are under common control with
+that entity. For the purposes of this definition, "control" means (i) the
+power, direct or indirect, to cause the direction or management of such
+entity, whether by contract or otherwise, or (ii) ownership of fifty
+percent (50%) or more of the outstanding shares, or (iii) beneficial
+ownership of such entity.</p>
+<p>"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.</p>
+<p>"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation source,
+and configuration files.</p>
+<p>"Object" form shall mean any form resulting from mechanical transformation
+or translation of a Source form, including but not limited to compiled
+object code, generated documentation, and conversions to other media types.</p>
+<p>"Work" shall mean the work of authorship, whether in Source or Object form,
+made available under the License, as indicated by a copyright notice that
+is included in or attached to the work (an example is provided in the
+Appendix below).</p>
+<p>"Derivative Works" shall mean any work, whether in Source or Object form,
+that is based on (or derived from) the Work and for which the editorial
+revisions, annotations, elaborations, or other modifications represent, as
+a whole, an original work of authorship. For the purposes of this License,
+Derivative Works shall not include works that remain separable from, or
+merely link (or bind by name) to the interfaces of, the Work and Derivative
+Works thereof.</p>
+<p>"Contribution" shall mean any work of authorship, including the original
+version of the Work and any modifications or additions to that Work or
+Derivative Works thereof, that is intentionally submitted to Licensor for
+inclusion in the Work by the copyright owner or by an individual or Legal
+Entity authorized to submit on behalf of the copyright owner. For the
+purposes of this definition, "submitted" means any form of electronic,
+verbal, or written communication sent to the Licensor or its
+representatives, including but not limited to communication on electronic
+mailing lists, source code control systems, and issue tracking systems that
+are managed by, or on behalf of, the Licensor for the purpose of discussing
+and improving the Work, but excluding communication that is conspicuously
+marked or otherwise designated in writing by the copyright owner as "Not a
+Contribution."</p>
+<p>"Contributor" shall mean Licensor and any individual or Legal Entity on
+behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.</p>
+<p><strong><a name="copyright">2. Grant of Copyright License</a></strong>. Subject to the
+terms and conditions of this License, each Contributor hereby grants to You
+a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+copyright license to reproduce, prepare Derivative Works of, publicly
+display, publicly perform, sublicense, and distribute the Work and such
+Derivative Works in Source or Object form.</p>
+<p><strong><a name="patent">3. Grant of Patent License</a></strong>. Subject to the terms
+and conditions of this License, each Contributor hereby grants to You a
+perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+(except as stated in this section) patent license to make, have made, use,
+offer to sell, sell, import, and otherwise transfer the Work, where such
+license applies only to those patent claims licensable by such Contributor
+that are necessarily infringed by their Contribution(s) alone or by
+combination of their Contribution(s) with the Work to which such
+Contribution(s) was submitted. If You institute patent litigation against
+any entity (including a cross-claim or counterclaim in a lawsuit) alleging
+that the Work or a Contribution incorporated within the Work constitutes
+direct or contributory patent infringement, then any patent licenses
+granted to You under this License for that Work shall terminate as of the
+date such litigation is filed.</p>
+<p><strong><a name="redistribution">4. Redistribution</a></strong>. You may reproduce and
+distribute copies of the Work or Derivative Works thereof in any medium,
+with or without modifications, and in Source or Object form, provided that
+You meet the following conditions:</p>
+<ol>
+<li>
+<p>You must give any other recipients of the Work or Derivative Works a
+copy of this License; and</p>
+</li>
+<li>
+<p>You must cause any modified files to carry prominent notices stating
+that You changed the files; and</p>
+</li>
+<li>
+<p>You must retain, in the Source form of any Derivative Works that You
+distribute, all copyright, patent, trademark, and attribution notices from
+the Source form of the Work, excluding those notices that do not pertain to
+any part of the Derivative Works; and</p>
+</li>
+<li>
+<p>If the Work includes a "NOTICE" text file as part of its distribution,
+then any Derivative Works that You distribute must include a readable copy
+of the attribution notices contained within such NOTICE file, excluding
+those notices that do not pertain to any part of the Derivative Works, in
+at least one of the following places: within a NOTICE text file distributed
+as part of the Derivative Works; within the Source form or documentation,
+if provided along with the Derivative Works; or, within a display generated
+by the Derivative Works, if and wherever such third-party notices normally
+appear. The contents of the NOTICE file are for informational purposes only
+and do not modify the License. You may add Your own attribution notices
+within Derivative Works that You distribute, alongside or as an addendum to
+the NOTICE text from the Work, provided that such additional attribution
+notices cannot be construed as modifying the License.
+You may add Your own copyright statement to Your modifications and may
+provide additional or different license terms and conditions for use,
+reproduction, or distribution of Your modifications, or for any such
+Derivative Works as a whole, provided Your use, reproduction, and
+distribution of the Work otherwise complies with the conditions stated in
+this License.</p>
+</li>
+</ol>
+<p><strong><a name="contributions">5. Submission of Contributions</a></strong>. Unless You
+explicitly state otherwise, any Contribution intentionally submitted for
+inclusion in the Work by You to the Licensor shall be under the terms and
+conditions of this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify the
+terms of any separate license agreement you may have executed with Licensor
+regarding such Contributions.</p>
+<p><strong><a name="trademarks">6. Trademarks</a></strong>. This License does not grant
+permission to use the trade names, trademarks, service marks, or product
+names of the Licensor, except as required for reasonable and customary use
+in describing the origin of the Work and reproducing the content of the
+NOTICE file.</p>
+<p><strong><a name="no-warranty">7. Disclaimer of Warranty</a></strong>. Unless required by
+applicable law or agreed to in writing, Licensor provides the Work (and
+each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including,
+without limitation, any warranties or conditions of TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You
+are solely responsible for determining the appropriateness of using or
+redistributing the Work and assume any risks associated with Your exercise
+of permissions under this License.</p>
+<p><strong><a name="no-liability">8. Limitation of Liability</a></strong>. In no event and
+under no legal theory, whether in tort (including negligence), contract, or
+otherwise, unless required by applicable law (such as deliberate and
+grossly negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special,
+incidental, or consequential damages of any character arising as a result
+of this License or out of the use or inability to use the Work (including
+but not limited to damages for loss of goodwill, work stoppage, computer
+failure or malfunction, or any and all other commercial damages or losses),
+even if such Contributor has been advised of the possibility of such
+damages.</p>
+<p><strong><a name="additional">9. Accepting Warranty or Additional Liability</a></strong>.
+While redistributing the Work or Derivative Works thereof, You may choose
+to offer, and charge a fee for, acceptance of support, warranty, indemnity,
+or other liability obligations and/or rights consistent with this License.
+However, in accepting such obligations, You may act only on Your own behalf
+and on Your sole responsibility, not on behalf of any other Contributor,
+and only if You agree to indemnify, defend, and hold each Contributor
+harmless for any liability incurred by, or claims asserted against, such
+Contributor by reason of your accepting any such warranty or additional
+liability.</p>
+<HR />
+</div>
+    <li>AB Sciex WiffReader</li>
+<div class="lic-div">
+
+<p class="p1"><br></p>
+<p class="p2"><b>AB Sciex LLC</b></p>
+<p class="p2"><b>END USER BETA SOFTWARE LICENSE AGREEMENT</b></p>
+<p class="p2"><b>and</b></p>
+<p class="p2"><b>LIMITED DEVELOPER LICENSE</b></p>
+<p class="p2"><i>WIFF Reader Distributable Beta SDK</i></p>
+<p class="p1"><br></p>
+<p class="p1"><br></p>
+<p class="p3"><b>NOTICE TO USER: PLEASE READ THIS DOCUMENT CAREFULLY.<span class="Apple-converted-space">  </span>THIS IS THE CONTRACT BETWEEN YOU AND AB SCIEX REGARDING THIS SOFTWARE PRODUCT.<span class="Apple-converted-space">  </span>THIS AGREEMENT INCLUDES LICENSE TERMS AND RESTRICTIONS, WARRANTY AND LIABILITY DISCLAIMERS, AND LIMITATIONS.</b></p>
+<p class="p4"><b></b><br></p>
+<p class="p3"><b>YOUR INSTALLATION AND USE OF THIS AB SCIEX SDK IS SUBJECT TO THE TERMS AND CONDITIONS CONTAINED IN THIS END USER SOFTWARE LICENSE AGREEMENT.</b></p>
+<p class="p4"><b></b><br></p>
+<p class="p3">This AB Sciex End User Software License Agreement (EULA) and Limited Developer & Redistribution License accompanies this AB Sciex WIFF Reader Distributable Beta SDK product ("Software") and related explanatory materials ("Documentation"). The term "SDK" also includes any upgrades, modified versions, updates, additions and copies of the SDK licensed to you by AB Sciex.<span class="Apple-converted-space">  </span>The term “AB Sciex,” as used in this License, means AB Scie [...]
+<p class="p4"><br></p>
+<p class="p4"><br></p>
+<p class="p5"><b>Third Party Products</b></p>
+<p class="p3">This Software may include software products licensed by third party provider(s). In addition, the Software may enable you to run multiple instances of third-party software and application programs. You are responsible for reviewing and complying with any licenses necessary to use any such third-party software.<span class="Apple-converted-space">  </span>Such licenses may be included in your AB Sciex installation package.</p>
+<p class="p4"><br></p>
+<p class="p5"><b>TITLE</b></p>
+<p class="p3">Title, ownership rights and intellectual property rights in and to the Software and Documentation shall at all times remain with AB Sciex and its subsidiaries, and their suppliers.<span class="Apple-converted-space">  </span>All rights not specifically granted by this License, including Federal and international copyrights, are reserved by AB Sciex or their respective owners.</p>
+<p class="p6"><b></b><br></p>
+<p class="p5"><b>COPYRIGHT</b></p>
+<p class="p3">The Software, including its structure, organization, code, user interface and associated Documentation, is a proprietary product of AB Sciex or its suppliers, and is protected by international laws of copyright. The law provides for civil and criminal penalties for anyone in violation of the laws of copyright.</p>
+<p class="p4"><br></p>
+<p class="p5"><b>LICENSE</b></p>
+<p class="p3"><b>Use of the Software</b></p>
+<ol class="ol1">
+  <li class="li3">As a Developer License, AB Sciex grants to you one (1) personal, nontransferable, nonexclusive, license to use copies of the Software and install such Software on your machine(s) for your single concurrent internal use.</li>
+</ol>
+<p class="p7">2.<span class="Apple-tab-span"> </span>You may make one copy of the Software in machine-readable form solely for backup or archival purposes.<span class="Apple-converted-space">  </span>You must reproduce on any such copy all copyright notices and any other proprietary legends found on the original.<span class="Apple-converted-space">  </span>You may not make any other copies of the Software.</p>
+<p class="p7">3.<span class="Apple-tab-span"> </span>From time to time, AB Sciex may change the terms of this Agreement.<span class="Apple-converted-space">  </span>AB Sciex will notify you of such change.<span class="Apple-converted-space">  </span>Your continued use of the Software will indicate your agreement to the change.</p>
+<p class="p4"><br></p>
+<p class="p3"><b>Use Restrictions</b></p>
+<p class="p7">1.<span class="Apple-converted-space">  </span>You may not use the Software, Documentation, or any associated documentation, in whole or in part, except as expressly permitted in this Agreement.</p>
+<p class="p7">2.<span class="Apple-converted-space">  </span>You may not sublicense, copy, merge, modify, sell, resell, rent, lease, assign, transfer (except temporarily in the event of a computer malfunction or as expressly permitted under the Section “Use of the Software”), or distribute this license or the Software, or create derivative works based on the Software (except as outlined in the Distribution Rights below), or any part thereof or any interest therein. <span class="Apple-con [...]
+<p class="p7">3.<span class="Apple-converted-space">  </span>You may not reverse assemble, decompile, modify, create any derivative works, or otherwise attempt, cause, or permit any reverse engineering of the Software or any part thereof.</p>
+<p class="p8">4.<span class="Apple-converted-space">  </span>You acknowledge that the Software in human-readable (source code) form, including its structure, sequence, and organization, is and remains the confidential trade secret of AB Sciex.<span class="Apple-converted-space">  </span>You agree that you shall not attempt, cause or permit the reverse engineering, modification, decompiliation, disassembly of the Software to any human readable or perceivable form, or creation of any deriv [...]
+<p class="p8">5.<span class="Apple-converted-space">  </span>You may not remove any proprietary, copyright, trade secret or warning legend from the Software or any Documentation and you acknowledge that the Software in human-readable (source code) form, including its structure, sequence, and organization, is and remains the confidential trade secret of AB Sciex.</p>
+<p class="p7">6.<span class="Apple-converted-space">  </span>You agree to comply fully with all export laws and restrictions and regulations of the United States or applicable foreign agencies or authorities.<span class="Apple-converted-space">  </span>You agree that you will not export or reexport, directly or indirectly, the Software into any country prohibited by the United States Export Administration Act and the regulations thereunder or other applicable United States law.</p>
+<p class="p9"><br></p>
+<p class="p10"><b>Distribution of the Distributable Components (DCs)</b></p>
+<p class="p10">1.<span class="Apple-converted-space">  </span><b>Distributable Components.</b> The Software contains Distributable Components that you are permitted<span class="Apple-converted-space"> </span></p>
+<p class="p11">to distribute for non-commercial purposes provided that: (a) the Distributable Components are bundled as part of, and for the sole purpose of running programs developed by you and supplied by you; and (b) you comply with all other terms in this EULA.<span class="Apple-converted-space">  </span>As used herein commercial purposes include, but are not limited to, charging a purchase price, license fee, maintenance fee, subscription fee, or providing software incorporating Dis [...]
+<p class="p1"><br></p>
+<p class="p10">2.<span class="Apple-converted-space">  </span><b>Right to Use and Distribute.</b> The code and text files listed in Appendix A are “Distributable<span class="Apple-converted-space"> </span></p>
+<p class="p10"><span class="Apple-converted-space">     </span>Components”.<span class="Apple-converted-space">  </span>All other code and text files of the Software are not distributable.</p>
+<p class="p12"><br></p>
+<p class="p10">3.<span class="Apple-converted-space">  </span><b>Third Party Distribution.</b> You may not permit distributors of your programs or end users of your<span class="Apple-converted-space">     </span></p>
+<p class="p10"><span class="Apple-converted-space">     </span>programs to copy and distribute the Distributable Components as part of those or their programs.</p>
+<p class="p13"><br></p>
+<p class="p10">4. <b>Distribution Requirements, General.</b> For any Distributable Component you distribute, you must:</p>
+<p class="p14">(a) embed the license key in your program such that it is obscured from end users seeing it.<span class="Apple-converted-space">  </span>In the event that your program is open source, this license key must not be part of the open source;</p>
+<p class="p15">(b) add significant primary functionality to it in your programs;</p>
+<p class="p14">(c) for any Distributable Component having a filename extension of .lib, distribute only the results of running such Distributable Component through a linker with your program;</p>
+<p class="p14">(d) distribute Distributable Components included in a setup program only as part of that setup program without modification;</p>
+<p class="p14">(e) require distributors and external end users to agree to terms that protect it at least as much as this EULA; and</p>
+<p class="p15">(f) display your valid copyright notice on your programs.</p>
+<p class="p16"><br></p>
+<p class="p17">5. <b>Distribution Requirement, Indemnification.<span class="Apple-converted-space">  </span></b>For any Distributable Component you distribute, you must and you hereby agree to: indemnify, defend, and hold harmless AB Sciex from any and all claims and costs, including attorneys’ fees, related to the distribution or use of your programs.</p>
+<p class="p16"><br></p>
+<p class="p10">6.<span class="Apple-converted-space">  </span><b>Distribution Restrictions.</b> You may not:</p>
+<p class="p15">(a) alter any copyright, trademark or patent notice in the Distributable Component;</p>
+<p class="p14">(b) use AB Sciex or AB Sciex’s trademarks in your programs’ names or in a way that suggests your programs come from or are endorsed by AB Sciex;</p>
+<p class="p15">(c) include Distributable Components in malicious, deceptive or unlawful programs; or</p>
+<p class="p14">(d) modify or distribute the source code of any Distributable Component so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that (i) the code be disclosed or distributed in source code form; and/or (ii) others have the right to modify it.</p>
+<p class="p4"><br></p>
+<p class="p3"><b>Trial</b></p>
+<p class="p3">If this license is granted on a trial basis, you are hereby notified that license management software may be included to automatically cause the Software to cease functioning at the end of the trial period.</p>
+<p class="p4"><br></p>
+<p class="p3"><b>Termination</b></p>
+<p class="p3">You may terminate this Agreement by discontinuing use of the Software, removing all copies from your computers and storage media, and returning the Software and Documentation, and all copies thereof, to AB Sciex.<span class="Apple-converted-space">  </span>AB Sciex may terminate this Agreement if you fail to comply with all of its terms, in which case you agree to discontinue using the Software, remove all copies from your computers and storage media, and return the Softwar [...]
+<p class="p4"><b></b><br></p>
+<p class="p3"><b>U.S. Government End Users</b></p>
+<p class="p3">The Software is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire the Software with only those rights set forth herein.<span class="Apple-converted-space"> </span></p>
+<p class="p4"><b></b><br></p>
+<p class="p3"><b>European Community End Users</b></p>
+<p class="p3">If this Software is used within a country of the European Community, nothing in this Agreement shall be construed as restricting any rights available under the European Community Software Directive, O.J. Eur. Comm. (No. L. 122) 42 (1991).</p>
+<p class="p4"><br></p>
+<p class="p3"><b>Regulated Uses</b></p>
+<p class="p3">You acknowledge that the Software has not been cleared, approved, registered or otherwise qualified (collectively, “Approval”) by AB Sciex<b> </b>with any regulatory agency, including without limitation for use in diagnostic or therapeutic procedures or any other use requiring compliance with any federal or state law regulating diagnostic or therapeutic products, blood products, medical devices or any similar product (hereafter collectively referred to as "federal or state  [...]
+<p class="p4"><b></b><br></p>
+<p class="p5"><b>NO WARRANTY and LIMITATION OF REMEDIES</b></p>
+<p class="p3">AB SCIEX MAKES NO WARRANTIES OF ANY KIND WHATSOEVER, EXPRESS OR IMPLIED, WITH RESPECT TO THE SOFTWARE OR DOCUMENTATION, INCLUDING BUT NOT LIMITED TO WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE OR MERCHANTABILITY OR THAT THE SOFTWARE OR DOCUMENTATION IS NON-INFRINGING.<span class="Apple-converted-space">  </span>ALL OTHER WARRANTIES ARE EXPRESSLY DISCLAIMED.<span class="Apple-converted-space">  </span>WITHOUT LIMITING THE GENERALITY OF THE FOREGOING, AB SCIEX MAKES NO WAR [...]
+<p class="p4"><br></p>
+<p class="p5"><b>Limitation of Liability</b></p>
+<p class="p3">IN NO EVENT SHALL AB SCIEX OR ITS AGENTS, CONSULTANTS, CONTRACTORS OR SUPPLIERS BE RESPONSIBLE OR LIABLE, WHETHER IN CONTRACT, TORT, WARRANTY OR UNDER ANY STATUTE (INCLUDING WITHOUT LIMITATION ANY TRADE PRACTICE, UNFAIR COMPETITION OR OTHER STATUTE OF SIMILAR IMPORT) OR ON ANY OTHER BASIS FOR SPECIAL, INDIRECT, INCIDENTAL, MULTIPLE, PUNITIVE, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE POSSESSION OR USE OF, OR THE INABILITY TO USE, THE SOFTWARE OR DOCUMENTATION, EVEN IF AB  [...]
+<p class="p4"><br></p>
+<p class="p3">Some states, countries or jurisdictions limit the scope of or preclude limitations or exclusion of remedies or damages, or of liability, such as liability for gross negligence or willful misconduct, as or to the extent set forth above, OR do not allow implied warranties TO BE EXCLUDED.<span class="Apple-converted-space">  </span>In such states, countries or jurisdictions, the limitation or exclusion of warranties, remedies, damages or liability set forth above may not apply [...]
+<p class="p4"><br></p>
+<p class="p5"><b>GENERAL</b></p>
+<p class="p3">This Agreement shall be governed by laws of the Commonwealth of Massachusetts, U.S.A., exclusive of its conflict of laws provisions.<span class="Apple-converted-space">  </span>This Agreement shall not be governed by the United Nations Convention on Contracts for the International Sale of Goods.<span class="Apple-converted-space">  </span>This Agreement contains the complete agreement between the parties with respect to the subject matter hereof, and supersedes all prior or [...]
+<p class="p18"><br></p>
+<p class="p19"><br></p>
+<p class="p3">Unpublished rights reserved under the copyright laws of the United States.</p>
+<p class="p3">AB Sciex LLC, 500 Old Connecticut Path, Framingham, MA 01701 U.S.A.</p>
+<p class="p4"><br></p>
+<p class="p3">For Research Use Only. Not for use in diagnostic procedures.<span class="Apple-converted-space">  </span>The trademarks mentioned herein are the property of AB Sciex Pte. Ltd. or their respective owners.<span class="Apple-converted-space">  </span>AB SCIEX™ is being used under license.</p>
+<p class="p3">© 2012 AB SCIEX</p>
+<p class="p20"><b>APPENDIX A</b></p>
+<p class="p20"><b>DISTRIBUTABLE COMPONENTS OF THE SOFTWARE</b></p>
+<p class="p21"><br></p>
+<p class="p10">Clearcore2.Compression.dll</p>
+<p class="p10">Clearcore2.Data.AnalystDataProvider.dll</p>
+<p class="p10">Clearcore2.Data.CommonInterfaces.dll</p>
+<p class="p10">Clearcore2.Data.dll</p>
+<p class="p10">Clearcore2.Data.WiffReader.dll</p>
+<p class="p10">Clearcore2.InternalRawXYProcessing.dll</p>
+<p class="p10">Clearcore2.Muni.dll</p>
+<p class="p10">Clearcore2.ProjectUtilities.dll</p>
+<p class="p10">Clearcore2.RawXYProcessing.dll</p>
+<p class="p10">Clearcore2.StructuredStorage.dll</p>
+<p class="p10">Clearcore2.Utility.dll</p>
+<p class="p1"><br></p>
+</div>
+    <li>Agilent MHDAC</li>
+<div class="lic-div">
+<strong><p>END-USER LICENSE TERMS FOR AGILENT MHDAC</p></strong>
+<strong>
+<p>AGILENT TECHNOLOGIES, INC. SOFTWARE LICENSE TERMS <strong>FOR THE MASSHUNTER DATA ACCESS COMPONENT RUNTIME VERSION</strong></p>
+</strong>
+<p><strong>ATTENTION:  USE OF THE SOFTWARE IS SUBJECT TO THE LICENSE TERMS SET FORTH BELOW.</strong></p>
+<p>IF YOU DO NOT AGREE TO THESE LICENSE TERMS, THEN (A) DO NOT INSTALL OR USE THE SOFTWARE, AND (B) YOU MAY RETURN THE SOFTWARE FOR A FULL REFUND, OR, IF THE SOFTWARE IS SUPPLIED AS PART OF ANOTHER PRODUCT, YOU MAY RETURN THE ENTIRE PRODUCT FOR A FULL REFUND. NOTWITHSTANDING ANYTHING TO THE CONTRARY IN THIS NOTICE, INSTALLING OR OTHERWISE USING THE SOFTWARE INDICATES YOUR ACCEPTANCE OF THESE TERMS. </p>
+<p>AGILENT SOFTWARE LICENSE TERMS</p>
+<p><strong><u>Software</u></strong>.  “Software” means the Masshunter Data Access Component Runtime computer program in object code format.</p>
+<p><strong><u>License Grant</u></strong>.  Agilent grants you a non-exclusive, non-transferable license to (a) use one copy of the Software for internal purposes in accordance with these License Terms and the documentation provided with the Software or (b) to distribute the Software for non-commercial purposes only and only bundled as part of, and for the sole purpose of running, products supplied by you.  This Software is licensed for internal concurrent or network use of an unlimited n [...]
+<p><strong><u>License Restrictions</u></strong>.  You may make copies or adaptations of the Software only for archival purposes or only when copying or adaptation is an essential step in the authorized use of the Software. You must reproduce all copyright notices in the original Software on all permitted copies or adaptations.  You may not offer or provide unrestricted access to this Software on any public or distributed network.</p>
+<p><strong><u>Upgrades</u></strong>.  This license does not entitle you to receive upgrades, updates or technical support.  Such services may be purchased separately.  </p>
+<p><strong><u>Ownership</u></strong>. <strong> </strong>The Software and all copies thereof are owned and copyrighted by Agilent.  Agilent retains all right, title and interest in the Software.  Agilent and its third party suppliers may protect their rights in the Software in the event of any violation of these License Terms.<strong><u></u></strong></p>
+<p><strong><u>No Disassembly</u></strong>. <strong> </strong>You may not disassemble, decompile or otherwise modify the Software without written authorization from Agilent, except as permitted by law.  Upon request, you will provide Agilent with reasonably detailed information regarding any permitted disassembly, decompilation or modification.</p>
+<p><strong><u>High Risk Activities</u></strong>.<strong>  </strong>The Software is not specifically designed, manufactured or intended for use in the planning, construction, maintenance or direct operation of a nuclear facility, nor for use in on line control or fail safe operation of aircraft navigation, control or communication systems, weapon systems or direct life support systems. </p>
+<p><strong><u>Termination</u></strong>.  Agilent may terminate your license upon notice for breach of these License Terms.  Upon termination, you must immediately destroy all copies of the Software.<strong><u></u></strong></p>
+<p><strong><u>No Warranty</u></strong>. THIS SOFTWARE IS LICENSED "AS IS" AND WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
+</p>
+<p><strong><u>Limitation of Liability</u></strong>. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL AGILENT BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF OR RELATED TO THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF AGILENT HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. In no event will Agilent's liability to you, whether in contract [...]
+<p><strong><u>Export Requirements</u></strong>.  If you export, re-export or import Software, technology or technical data licensed hereunder, you assume responsibility for complying with applicable laws and regulations and for obtaining required export and import authorizations.  Agilent may terminate this license immediately if you are in violation of any applicable laws or regulations.</p>
+<p><strong><u>U.S. Government Restricted Rights</u></strong>.<strong>  </strong>Software and technical data rights granted to the federal government include only those rights customarily provided to end user customers.  Agilent provides this customary commercial license in Software and technical data pursuant to FAR 12.211 (Technical Data) and 12.212 (Computer Software) and, for the Department of Defense, DFARS 252.227-7015 (Technical Data – Commercial Items) and DFARS 227.7202-3 (Rights [...]
+<hr />
+
+
+</div>
+    <li>Bruker CompassXtract</li>
+    <div class="lic-div">
+<div class=WordSection1>
+  <p style='text-autospace:none'><b><span style='font-family:
+Helvetica;'>SOFTWARE LICENSE AGREEMENT for <span class=SpellE>CompassXtract</span> and <span
+class=SpellE>CompassXtract</span> Libraries</span></b></p>
+  <p style='text-autospace:none'><span class=SpellE><span style='font-family:Helvetica;'>Bruker</span></span><span style='font-family:
+Helvetica;'> <span
+class=SpellE>Daltonik</span> GmbH (hereinafter referred to as
+    "Licensor") has developed the <span class=SpellE>CompassXtract</span> software program (hereinafter referred to as "<span class=SpellE>CompassXtract</span>"),
+    which consists of documentation and individual <span class=SpellE>CompassXtract</span> libraries (hereinafter referred to as "<span class=SpellE>CompassXtract</span> <b>Libraries"). </b>These license terms constitute an agreement (hereinafter referred to as
+    "Agreement") between you and Licensor and shall be the legal basis
+    for any non-commercial usage of Licensor's <span class=SpellE>CompassXtract</span>.
+    These license terms also apply to any updates or supplements for <span
+class=SpellE>CompassXtract</span> or separable parts of <span class=SpellE>CompassXtract</span> such as <span class=SpellE>CompassXtract</span> Libraries, unless other terms
+    accompany those items, in which case those terms apply<span class=GramE>.
</span>You
+    may only use <span class=SpellE>CompassXtract</span> as a whole, if you have
+    downloaded it from Licensor's Webserver at http://www.bdal.de/compassxtract and
+    accepted this Agreement as binding between Licensor and you. However, <span
+class=GramE>certain individual <span class=SpellE>CompassXtract</span> Libraries might be conveyed to you by others</span>. In both cases, you may
+    only legally use <span class=SpellE>CompassXtract</span> or any of the <span
+class=SpellE>CompassXtract</span> Libraries conveyed to you after having
+    accepted this Agreement as binding between Licensor and you.</span></p>
+  <p style='text-autospace:none'><b><span style='font-family:
+Helvetica;'>1. Purpose of <span class=SpellE>CompassXtract</span> and License</span></b></p>
+  <p style='text-autospace:none'><span class=SpellE><span style='font-family:Helvetica;'>CompassXtract</span></span><span style='font-family:Helvetica;'> is provided as it is, in a trial and development stage, not yet marketable and
+    without any warranties regarding fitness for any purpose whatsoever. It may
+    contain errors and defects. The aim and purpose of providing it free of charge
+    and under the terms of this Agreement is to discover such errors and defects.
+    It is, inter alia but not limited to, not designed, manufactured or intended
+    for any use requiring fail-safe performance in which the failure of <span
+class=SpellE>CompassXtract</span> could lead to death, personal injury or
+    physical and environmental damage, such as the operation of medical facilities.
+    Nor is it, inter alia but not limited to, designed to perform any queries or
+    operations which might require reliable results and/or which might be the basis
+    for business and/or medical decisions. You agree not to use <span class=SpellE>CompassXtract</span> in connection with any such activities.</span></p>
+  <p style='text-autospace:none'><b><span style='font-family:
+Helvetica;'>2. Rights
+    Granted</span></b></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>You may
+    install and use <span class=SpellE>CompassXtract</span> on any of your
+    computing devices.</span></p>
+  <p style='text-autospace:none'><b><span style='font-family:
+Helvetica;'>3. Use
+    Restrictions</span></b></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>3.1 You may
+    not decompile, disassemble, reverse engineer or modify <span class=SpellE>CompassXtract</span>.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>3.2 You may
+    not distribute <span class=SpellE>CompassXtract</span> to others, breach of
+    which terminates the rights granted under this agreement. This also applies to
+    any integration or implementation of <span class=SpellE>CompassXtract</span> to
+    software developed by you or by others on your behalf (hereinafter referred to
+    as Own <b>Software) </b>or any distribution of which <span class=SpellE>CompassXtract</span> is <span class=GramE>part of.</span> However, you may distribute Own <span
+class=GramE>Software which requires the usage of</span> or links to <span
+class=SpellE>CompassXtract</span> Libraries if you comply with the requirements
+    set down in Section 4 of this Agreement.</span></p>
+  <p style='text-autospace:none'><b><span style='font-family:
+Helvetica;'>4.
+    Requirements for Distribution of your own Software using <span class=SpellE>CompassXtract</span> Libraries</span></b></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>You may only
+    distribute <span class=SpellE>CompassXtract</span> Libraries to others if all
+    of the following conditions are met: 4.1 <span class=GramE>You</span> distribute <span class=SpellE>CompassXtract</span> Libraries as part of Own
+    Software which you license to third parties</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>(<span
+class=GramE>hereinafter</span> "Your <b>Licensees");
</b>4.2
+    Your Own Software requires all the <span class=SpellE>CompassXtract</span> Libraries distributed by you in order to function</span></p>
+  <p style='text-autospace:none'><span class=GramE><span style='font-family:Helvetica;'>properly</span></span><span style='font-family:
+Helvetica;'> when used by
+    Your Licensees;</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>4.3 You
+    provide to Your Licensee a URL to Licensor's Webserver at
+    http://www.bdal.de/compassxtract and require Your Licensees, as condition for
+    being granted the right to use your Own Software, to acquire the usage rights
+    for <span class=SpellE>CompassXtract</span> directly from Licensor by agreeing
+    to the terms of this Agreement, which you distribute in unmodified form with
+    your Own Software.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>4.4 In your
+    Own Software's "About" box the following text is displayed: "This software uses <span class=SpellE>CompassXtract</span> software. <span class=GramE>Copyright $copy;
+    2011 by <span class=SpellE>Bruker</span> <span class=SpellE>Daltonik</span> GmbH.</span> All rights reserved."</span></p>
+  <p style='text-autospace:none'><b><span style='font-family:
+Helvetica;'>5.
+    Restrictions for Distribution of your own Products</span></b></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>5.1 You may
+    not use the Licensor's trademarks in a way that suggests your software
+    components and/or programs are provided by or are endorsed by the Licensor.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>5.2 You may
+    not commercially exploit <span class=SpellE>CompassXtract</span>, <span
+class=SpellE>CompassXtract</span> Libraries or products that require the usage
+    of or link to <span class=SpellE>CompassXtract</span> or <span class=SpellE>CompassXtract</span> Libraries. Commercial exploitation includes, but is not limited to, charging a
+    purchase price, license fee, maintenance fee, or subscription fee.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>5.3 Your
+    rights to <span class=SpellE>CompassXtract</span> do not include any license,
+    right, power or authority to subject <span class=SpellE>CompassXtract</span> in
+    whole or in part to any of the terms of an Excluded License. <b>"Excluded
+    License" </b>means any license that requires as a condition of use,
+    modification and/or distribution of software that such software or other
+    software combined and/or distributed with such software shall be (a) disclosed
+    or distributed in source code form; or (b) licensed for the purpose of making
+    derivative works. Without limiting the foregoing obligation, you are
+    specifically prohibited from distributing <span class=SpellE>CompassXtract</span> or <span class=SpellE>CompassXtract</span> Libraries with any software that is
+    subject to the General Public License (GPL) or similar license in a manner that
+    would create a combined work.</span></p>
+  <p style='text-autospace:none'><b><span style='font-family:
+Helvetica;'>6. Liability</span></b></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>6.1 As
+    Licensor delivers the software for free, Licensor is not liable for any kind of
+    damage, direct or indirect, which may arise due to simple negligence (Section
+    521 German Civil Code). In the event, that there should be – for whatever
+    reason – a statutory liability of Licensor for simple <span class=SpellE>negliegence</span>,
+    the aforementioned exclusion of liability applies nevertheless, but with the
+    exception of damages to life, body or health.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>6.2 You
+    indemnify, defend and hold harmless the Licensor from any liability claims,
+    including attorney fees, of third parties in connection with your usage of <span
+class=SpellE>CompassXtract</span> as well as the distribution of your Own <span
+class=GramE>Software which</span> requires usage of or links to <span
+class=SpellE>CompassXtract</span> Libraries and other circumstances for which
+    you are responsible.</span></p>
+  <p style='text-autospace:none'><b><span style='font-family:
+Helvetica;'>7. Additional
+    Terms Applicable to <span class=SpellE>CompassXtract</span></span></b></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>7.1 <span
+class=SpellE>CompassXtract</span> is licensed, not sold. This License only
+    gives you some rights to use <span class=SpellE>CompassXtract</span> and the <span
+class=SpellE>CompassXtract</span> Libraries; the Licensor reserves all other
+    rights. Unless applicable law gives you more rights despite this limitation,
+    you may use <span class=SpellE>CompassXtract</span> and the <span class=SpellE>CompassXtract</span> Libraries only as expressly permitted in this License.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>7.2 Licensor
+    has no obligation to fix, update, supplement or support <span class=SpellE>CompassXtract</span> and/or the <span class=SpellE>CompassXtract</span> Libraries.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>7.3 Your
+    rights under this License terminate automatically if you breach this License in
+    any way. Termination of this License will not affect any of your obligations or
+    liabilities arising prior to termination. The following sections of this
+    License shall survive termination: 3.1, 3.2, 5.1, 5.2, 5.3, 6.1<span
+class=GramE>.,</span> 6.2.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>7.4 No
+    subsidiary agreements of this Agreement have been made. Supplements and
+    amendments to this Agreement must be made in writing as prescribed by law in
+    order to be valid. The requirement of written form under this Agreement may be
+    waived in writing only.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>7.5 This
+    Agreement is governed by German law to the exclusion of the UN Convention on
+    Contracts for the International Sale of Goods. If you are a consumer, this does
+    not apply if legal provisions, in particular consumer protection legislation,
+    conflict with this choice. The courts of Bremen shall have exclusive
+    jurisdiction. If you are not a merchant, a legal entity under public law or a
+    public-law special fund in the sense Section 38 of the German Code of Civil
+    Procedure (ZPO), the <span class=GramE>agreement on the place of jurisdiction
+    is replaced by the legal provisions</span>.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>7.6 If
+    individual provisions of this Agreement are or become invalid or contain a <span
+class=GramE>gap which</span> needs to be filled, the validity of the remaining
+    provisions of the Agreement will not be affected thereby. The Parties hereby
+    undertake to substitute the invalid or lacking provision with a valid <span
+class=GramE>provision which</span> comes closest to the documented intentions
+    of the Parties.</span></p>
+</div>
+    </div>
+    <li>Thermo msFileReader</li>
+    <div class="lic-div">
+<p><strong>SOFTWARE LICENSE AGREEMENT (“License”) FOR MSFileReader</strong></p>
+<p>These License terms are an agreement between you and Thermo Finnigan LLC ("Licensor"). They apply to Licensor’s MSFileReader software program (“Software”), which includes documentation and any media on which you received it. These terms also apply to any updates or supplements for this Software, unless other terms accompany those items, in which case those terms apply. <strong>If you use this Software, you accept this License. If you do not accept this Lice [...]
+<p>1. Rights Granted:</p>
+<p>1.1. You may install and use this Software on any of your computing devices.</p>
+<p>1.2. You may distribute this Software to others, but only in combination with other software components and/or programs that you provide. </p>
+<p>2.  Use Restrictions:</p>
+<p>2.1. You may not decompile, disassemble, reverse engineer or modify this Software.</p>
+<p>3. Distribution Requirements:</p>
+<p>If you distribute this Software to others, you agree to:</p>
+<p>3.1. Indemnify, defend and hold harmless the Licensor from any claims, including attorneys’ fees, related to the distribution or use of this Software;</p>
+<p>3.2. Display the following text in your software’s “About” box: “MSFileReader file reading tool. Copyright © 2009 by Thermo Fisher Scientific, Inc. All rights reserved.”;</p>
+<p>3.3. Require your end users to agree to a license agreement that prohibits them from redistributing this Software to others.</p>
+<p>4.  Distribution Restrictions:</p>
+<p>4.1. You may not use the Licensor’s trademarks in a way that suggests your software components and/or programs are provided by or are endorsed by the Licensor; and</p>
+<p>4.2. You may not <a name="OLE_LINK1" id="OLE_LINK1">commercially exploit </a>this Software or products that incorporate this Software. Commercial exploitation includes, but is not limited to, charging a purchase price, license fee, maintenance fee, or subscription fee.</p>
+<p>4.3. Your rights to this Software do not include any license, right, power or authority to subject this Software in whole or in part to any of the terms of an Excluded License. "Excluded License" means any license that requires as a condition of use, modification and/or distribution of software subject to the Excluded License, that such software or other software combined and/or distributed with such software be (a) disclosed or distributed in source code form; or (b) licens [...]
+<p>5.  Additional Terms Applicable to Software:</p>
+<p>5.1. This Software is licensed, not sold. This License only gives you some rights to use this Software; the Licensor reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use this Software only as expressly permitted in this License.</p>
+<p>5.2. Licensor has no obligation to fix, update, supplement or support this Software.</p>
+<p>5.3. This Software is not designed, manufactured or intended for any use requiring fail-safe performance in which the failure of this Software could lead to death, serious personal injury or severe physical and environmental damage (“High Risk Activities”), such as the operation of aircraft, medical or nuclear facilities. You agree not to use, or license the use of, this Software in connection with any High Risk Activities.</p>
+<p>5.4. Your rights under this License terminate automatically if you breach this License in any way. Termination of this License will not affect any of your obligations or liabilities arising prior to termination. The following sections of this License shall survive termination: 2.1, 3.1, 3.2, 3.3, 4.1, 4.2, 4.3, 5.1, 5.2, 5.3, 5.5, 5.6, 5.7, 5.8, and 5.9.</p>
+<p>5.5. This Software is subject to United States export laws and regulations. You agree to comply with all domestic and international export laws and regulations that apply to this Software. These laws include restrictions on destinations, end users and end use.</p>
+<p>5.6. This License shall be construed and controlled by the laws of the State of California, U.S.A., without regard to conflicts of law. You consent to the jurisdiction of the state and federal courts situated in the State of California in any action arising under this License. The application of the U.N. Convention on Contracts for the International Sale of Goods to this License is hereby expressly excluded. If any provision of this License shall be deemed unenforceable or contrary to [...]
+<p>5.7. THIS SOFTWARE IS LICENSED "AS IS". YOU BEAR ALL RISKS OF USING IT. LICENSOR GIVES NO EXPRESS WARRANTIES, REPRESENTATIONS OR GUARANTEES.  YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS LICENSE CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, LICENSOR EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.</p>
+<p>5.8. LICENSOR’S LIABILITY TO YOU FOR DIRECT DAMAGES ARISING UNDER THIS LICENSE IS LIMITED TO U.S. $1.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES, EVEN IF LICENSOR IS EXPRESSLY MADE AWARE OF THE POSSIBILITY THEREOF OR IS NEGLIGENT. THIS LIMITATION APPLIES TO ANYTHING RELATED TO THIS SOFTWARE, SERVICES, CONTENT (INCLUDING CODE) ON THIRD PARTY INTERNET SITES, OR THIRD PARTY PROGRAMS, AND CLAIMS FOR BREACH  [...]
+<p>5.9. Use, duplication or disclosure of this Software by the U.S. Government is subject to the restricted rights applicable to commercial computer software (under FAR 52.227019 and DFARS 252.227-7013 or parallel regulations). The manufacturer for this purpose is Thermo Finnigan LLC, 355 River Oaks Parkway, San Jose, California 95134, U.S.A.</p>
+    </div>
+    <li>Waters WRDAC</li>
+    <div class="lic-div">
+<p align="center"><strong>END-USER SOFTWARE LICENSE TERMS FOR WATERS WRDAC SOFTWARE</strong></p>
+<p>Waters grants you a nonexclusive and terminable license to (i) use the software to perform internal information and data processing in connection with Waters and other non-Waters instrumentation products for non-commercial purposes only and (ii) distribute the software as part of the ProteoWizard Software version 2.1 for non-commercial purposes only.   You may not incorporate the software into a commercial application nor charge any fee for the software.  The software is protected by  [...]
+<p>THE SOFTWARE IS PROVIDED “AS IS” AND WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED, BY STATUTE OR OTHERWISE, REGARDING THE WRDAC, INCLUDING WITHOUT LIMITATION THE WARRANTIES OF NON-INFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE AND MERCHANTABILITY.  Waters shall not be liable for any direct, indirect, special, consequential or punitive damages of any kind arising out of or in connection with the software.  In the event that the foregoing disclaimers are not effective under appl [...]
+<p>You agree to comply fully with all relevant export laws and regulations of the United States ("Export Laws") to ensure that the software is (a) not exported directly or indirectly in violation of Export Laws and (b) not intended to be used for any purposes prohibited by the Export Laws. If you are a branch of the United States government, you shall have "restricted rights" to use, duplicate, or disclose the software as set forth in subdivision (c)(1)(ii) of Rights  [...]
+<p> </p>
+</div>
+</ul>
+
+<br />
+<H3> Step 3, Click below to agree to Licenses and get Crux</H3>
+
+<div style="width:600px;margin-left:10px;margin-top:10px;margin-bottom:10px;border:1px solid black;">
+The most recent build of Crux is temporarily unavailable for OS X.
+If you need a copy of Crux for OS X, please download release 3.0.
+</div>
+
+<input 
+  type="submit"
+  name="release_button"
+  value="I agree to the licensing terms, download release 3.0 of Crux"
+/>
+<br/>
+<input 
+  type="submit" 
+  name="daily_button"
+  value="I agree to the licensing terms, download the most recent build of Crux"
+/>
+</form>
+
+<br>
+<br>
+<br>
+
+    <p>
+Note that you can access the most recent source code from the Crux main development
+trunk using the following Git command:<br>
+<code>   git clone https://github.com/crux-toolkit/crux-toolkit.git crux-toolkit</code></p>
+
+  <!-- END CONTENT -->
+    </div>
+  </div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+  
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/example-files/default.params b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/example-files/default.params
new file mode 100644
index 0000000..5e447aa
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/example-files/default.params
@@ -0,0 +1,1676 @@
+################################################################################
+# Sample parameter file
+#
+# On each line, anything after a '#' will be ignored.
+# The format is:
+#
+# <parameter-name>=<value>
+#
+################################################################################
+
+# Crux parameter file (generated by Crux version 2.1)
+# Full documentation available at http://cruxtoolkit.sourceforge.net/
+# comet_version 2016.01 rev. 1
+# Everything following the '#' symbol is treated as a comment.
+
+# Path where pin file will be written instead of make-pin.pin.
+# It is optional for make-pin
+output-file=
+
+# Specify the verbosity of the current processes. Each level prints the
+# following messages, including all those at lower verbosity levels: 0-fatal
+# errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of
+# execution, 40-more progress information, 50-debug info, 60-detailed debug
+# info.
+# Available for all crux programs.
+verbosity=30
+
+# A file containing parameters. 
+# Available for all crux programs. Any options specified on the command line
+# will override values in the parameter file.
+parameter-file=
+
+# Replace existing files if true or fail when trying to overwrite a file if
+# false.
+# Available for all crux programs.  Applies to parameter file as well as index,
+# search, and analysis output files.
+overwrite=false
+
+# The minimum length of peptides to consider.
+# Used from the command line or parameter file by crux-generate-peptides, and
+# crux tide-index.
+min-length=6
+
+# The maximum length of peptides to consider.
+# Available from command line or parameter file for crux-generate-peptides, crux
+# tide-index. 
+max-length=50
+
+# The minimum mass (in Da) of peptides to consider.
+# Available from command line or parameter file for crux-generate-peptides and
+# crux tide-index. 
+min-mass=200
+
+# The maximum mass (in Da) of peptides to consider.
+# Available from command line or parameter file for crux-generate-peptides and
+# crux tide-index. 
+max-mass=7200
+
+# The minimum number of peaks a spectrum must have for it to be searched.
+# Available for tide-search.
+min-peaks=20
+
+# Specify the enzyme used to digest the proteins in silico. Available enzymes
+# (with the corresponding digestion rules indicated in parentheses) include
+# no-enzyme ([X]|[X]), trypsin ([RK]|{P}), trypsin/p ([RK]|[]), chymotrypsin
+# ([FWYL]|{P}), elastase ([ALIV]|{P}), clostripain ([R]|[]), cyanogen-bromide
+# ([M]|[]), iodosobenzoate ([W]|[]), proline-endopeptidase ([P]|[]),
+# staph-protease ([E]|[]), asp-n ([]|[D]), lys-c ([K]|{P}), lys-n ([]|[K]),
+# arg-c ([R]|{P}), glu-c ([DE]|{P}), pepsin-a ([FL]|{P}),
+# elastase-trypsin-chymotrypsin ([ALIVKRWFY]|{P}). Specifying --enzyme no-enzyme
+# yields a non-enzymatic digest. Warning: the resulting index may be quite
+# large.
+# Available for crux-generate-peptides and crux tide-index.
+enzyme=trypsin
+
+# Specify rules for in silico digestion of protein sequences. Overrides the
+# enzyme option. Two lists of residues are given enclosed in square brackets or
+# curly braces and separated by a |. The first list contains residues
+# required/prohibited before the cleavage site and the second list is residues
+# after the cleavage site. If the residues are required for digestion, they are
+# in square brackets, '[' and ']'. If the residues prevent digestion, then they
+# are enclosed in curly braces, '{' and '}'. Use X to indicate all residues. For
+# example, trypsin cuts after R or K but not before P which is represented as
+# [RK]|{P}. AspN cuts after any residue but only before D which is represented
+# as [X]|[D].
+# 
+custom-enzyme=
+
+# Specify whether every peptide in the database must have two enzymatic termini
+# (full-digest) or if peptides with only one enzymatic terminus are also
+# included (partial-digest).
+# Available for crux-generate-peptides and crux tide-index.
+digestion=full-digest
+
+# Maximum number of missed cleavages per peptide to allow in enzymatic
+# digestion.
+# Available from command line or parameter file for crux-generate-peptides. When
+# used with enzyme=<trypsin|elastase|chymotrypsin> includes peptides containing
+# one or more potential cleavage sites.
+missed-cleavages=0
+
+# Tolerance used for matching peptides to spectra. Peptides must be within +/-
+# 'precursor-window' of the spectrum value. The precursor window units depend
+# upon precursor-window-type.
+# Available for tide-search and crux-generate-peptides.
+precursor-window=3
+
+# Specify the units for the window that is used to select peptides around the
+# precursor mass location (mass, mz, ppm). The magnitude of the window is
+# defined by the precursor-window option, and candidate peptides must fall
+# within this window. For the mass window-type, the spectrum precursor m+h value
+# is converted to mass, and the window is defined as that mass +/-
+# precursor-window. If the m+h value is not available, then the mass is
+# calculated from the precursor m/z and provided charge. The peptide mass is
+# computed as the sum of the average amino acid masses plus 18 Da for the
+# terminal OH group. The mz window-type calculates the window as spectrum
+# precursor m/z +/- precursor-window and then converts the resulting m/z range
+# to the peptide mass range using the precursor charge. For the
+# parts-per-million (ppm) window-type, the spectrum mass is calculated as in the
+# mass type. The lower bound of the mass window is then defined as the spectrum
+# mass / (1.0 + (precursor-window / 1000000)) and the upper bound is defined as
+# spectrum mass / (1.0 - (precursor-window / 1000000)).
+# Available for search-for-xlinks and tide-search.
+precursor-window-type=mass
+
+# Specify the parser to use for reading in MS/MS spectra.
+# Available for search-for-xlinks.
+spectrum-parser=pwiz
+
+# Specify whether, when parsing an MS2 spectrum file, Crux obtains the precursor
+# mass information from the "S" line or the "Z" line. 
+# Available when spectrum-parser = pwiz.
+use-z-line=true
+
+# When creating decoy peptides using decoy-format=shuffle or
+# decoy-format=peptide-reverse, this option specifies whether the N-terminal and
+# C-terminal amino acids are kept in place or allowed to be shuffled or
+# reversed. For a target peptide "EAMPK" with decoy-format=peptide-reverse,
+# setting keep-terminal-aminos to "NC" will yield "EPMAK"; setting it to "C"
+# will yield "PMAEK"; setting it to "N" will yield "EKPMA"; and setting it to
+# "none" will yield "KPMAE".
+# Available for tide-index.
+keep-terminal-aminos=NC
+
+# Create in the output directory a text file listing of all the peptides in the
+# database, along with their neutral masses, one per line. If decoys are
+# generated, then a second file will be created containing the decoy peptides.
+# Decoys that also appear in the target database are marked with an asterisk in
+# a third column.
+# Available for tide-index.
+peptide-list=false
+
+# Stop after the specified pre-processing step.
+# Available for print-processed-spectra.
+stop-after=xcorr
+
+# Specify the output units for processed spectra.
+# Available for print-processed-spectra
+output-units=bin
+
+# Outputs an SQT results file to the output directory. Note that if sqt-output
+# is enabled, then compute-sp is automatically enabled and cannot be overridden.
+# Available for tide-search.
+sqt-output=false
+
+# Output an mzIdentML results file to the output directory.
+# Available for tide-search, percolator.
+mzid-output=false
+
+# Output a Percolator input (PIN) file to the output directory.
+# Available for tide-search.
+pin-output=false
+
+# Output a Percolator pout.xml format results file to the output directory.
+# Available for percolator.
+pout-output=false
+
+# Output a pepXML results file to the output directory.
+# Available for tide-search, q-ranker, barista, percolator.
+pepxml-output=false
+
+# Output a tab-delimited results file to the output directory.
+# Available for tide-search, percolator, q-ranker, barista.
+txt-output=true
+
+# Compute the preliminary score Sp for all candidate peptides. Report this score
+# in the output, along with the corresponding rank, the number of matched ions
+# and the total number of ions. This option is recommended if results are to be
+# analyzed by Percolator or Barista. If sqt-output is enabled, then compute-sp
+# is automatically enabled and cannot be overridden. Note that the Sp
+# computation requires re-processing each observed spectrum, so turning on this
+# switch involves significant computational overhead.
+# Available for tide-search.
+compute-sp=false
+
+# Estimate the parameters of the score distribution for each spectrum by fitting
+# to a Weibull distribution, and compute a p-value for each xlink product. This
+# option is only available when use-old-xlink=F.
+# Currently only implemented for XCORR.
+compute-p-values=false
+
+# A single scan number or a range of numbers to be searched. Range should be
+# specified as 'first-last' which will include scans 'first' and 'last'.
+# The search range x-y is inclusive of x and y.
+scan-number=
+
+# Before calculation of the XCorr score, the m/z axes of the observed and
+# theoretical spectra are discretized. This parameter specifies the size of each
+# bin. The exact formula is floor((x/mz-bin-width) + 1.0 - mz-bin-offset), where
+# x is the observed m/z value. For low resolution ion trap ms/ms data 1.0005079
+# and for high resolution ms/ms 0.02 is recommended.
+# Available for tide-search and xlink-assign-ions.
+mz-bin-width=1.0005079
+
+# In the discretization of the m/z axes of the observed and theoretical spectra,
+# this parameter specifies the location of the left edge of the first bin,
+# relative to mass = 0 (i.e., mz-bin-offset = 0.xx means the left edge of the
+# first bin will be located at +0.xx Da).
+# Available for tide-search.
+mz-bin-offset=0.4
+
+# Include flanking peaks around singly charged b and y theoretical ions. Each
+# flanking peak occurs in the adjacent m/z bin and has half the intensity of the
+# primary peak.
+# Available for the tide-search and search-for-xlinks commands.
+use-flanking-peaks=false
+
+# The lowest spectrum m/z to search in the ms2 file.
+# Available for tide-search.
+spectrum-min-mz=0
+
+# The highest spectrum m/z to search in the ms2 file.
+# Available for tide-search.
+spectrum-max-mz=1e+009
+
+# The spectrum charges to search. With 'all' every spectrum will be searched and
+# spectra with multiple charge states will be searched once at each charge
+# state. With 1, 2, or 3 only spectra with that charge state will be searched.
+# Used by tide-search.
+spectrum-charge=all
+
+# The fileroot string will be added as a prefix to all output file names.
+# Available for all commands that produce an output directory.
+fileroot=
+
+# The name of the directory where output files will be created.
+# Available for most commands.
+output-dir=crux-output
+
+# Specify the number of matches to report for each spectrum.
+# Available for tide-search and crux percolator
+top-match=5
+
+# When given a unsigned integer value seeds the random number generator with
+# that value. When given the string "time" seeds the random number generator
+# with the system time.
+# Available for all Crux commands.
+seed=1
+
+# Specify which isotopes to use in calculating fragment ion mass.
+# Used by crux-predict-peptide-ions.
+fragment-mass=mono
+
+# Specify the type of isotopic masses to use when calculating the peptide mass.
+# Used from command line or parameter file by crux-generate-peptides.
+isotopic-mass=mono
+
+# The minimum number of modifications that can be applied to a single peptide.
+# Available for tide-index.
+min-mods=0
+
+# The maximum number of modifications that can be applied to a single peptide.
+# Available for tide-index.
+max-mods=255
+
+# Specify how sequence modifications are reported in various output files. Each
+# modification is reported as a number enclosed in square braces following the
+# modified residue; however, the number may correspond to one of three different
+# masses: (1) 'mod-only' reports the value of the mass shift induced by the
+# modification; (2) 'total' reports the mass of the residue with the
+# modification (residue mass plus modification mass); (3) 'separate' is the same
+# as 'mod-only', but multiple modifications to a single amino acid are reported
+# as a comma-separated list of values. For example, suppose amino acid D has an
+# unmodified mass of 115 as well as two moifications of masses +14 and +2. In
+# this case, the amino acid would be reported as D[16] with 'mod-only', D[131]
+# with 'total', and D[14,2] with 'separate'.
+# Available for generate-peptides.
+mod-mass-format=mod-only
+
+# Consider a-ions in the search? Note that an a-ion is equivalent to a neutral
+# loss of CO from the b-ion.  Peak height is 10 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-a-ions=false
+
+# Consider b-ions in the search? Peak height is 50 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-b-ions=true
+
+# Consider c-ions in the search? Peak height is 50 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-c-ions=false
+
+# Consider x-ions in the search? Peak height is 10 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-x-ions=false
+
+# Consider y-ions in the search? Peak height is 50 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-y-ions=true
+
+# Consider z-ions in the search? Peak height is 50 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-z-ions=false
+
+# Set the precision for scores written to sqt and text files. Note that this
+# parameter only takes effect when specified in the parameter file.
+# Available percolator.
+precision=8
+
+# Set the precision for masses and m/z written to sqt and .txt files. Note that
+# this parameter only takes effect when specified in the parameter file.
+# Available for all commands.
+mass-precision=4
+
+# Show search progress by printing every n spectra searched. Set to 0 to show no
+# search progress.
+# Available for tide-search
+print-search-progress=1000
+
+# When given a unsigned integer value seeds the random number generator with
+# that value. When given the string "time" seeds the random number generator
+# with the system time.
+# Available for all percolator
+percolator-seed=1
+
+# Output the computed features in tab-delimited text format.
+# Available for percolator and q-ranker.
+feature-file-out=false
+
+# Include decoys (PSMs, peptides, and/or proteins) in the XML output.
+# Available for crux percolator
+decoy-xml-output=false
+
+# Specifies the prefix of the protein names that indicate a decoy.
+# Available for percolator
+decoy-prefix=decoy_
+
+# Output final weights to a file named "percolator.weights.txt".
+# Available for crux percolator
+output-weights=false
+
+# Read initial weights from the given file (one per line).
+# Available for crux percolator 
+init-weights=
+
+# Penalty for mistakes made on positive examples. If this value is not
+# specified, then it is set via cross validation over the values {0.1, 1, 10},
+# selecting the value that yields the largest number of PSMs identified at the
+# q-value threshold set via the --test-fdr parameter.
+# Available for crux percolator
+c-pos=0.01
+
+# Penalty for mistake made on negative examples. This parameter requires the
+# c-pos is set explicitly; otherwise, --c-neg will have no effect. If not
+# specified, then this value is set by cross validation over {0.1, 1, 10}.
+# Available for crux percolator
+c-neg=0
+
+# False discovery rate threshold to define positive examples in training.
+# Available for crux percolator
+train-fdr=0.01
+
+# False discovery rate threshold used in selecting hyperparameters during
+# internal cross-validation and for reporting the final results.
+# Available for crux percolator.
+test-fdr=0.01
+
+# Apply the specified threshold to PSM, peptide and protein probabilities to
+# obtain a faster estimate of the alpha, beta and gamma parameters.
+# Available for crux percolator.
+fido-fast-gridsearch=0
+
+# Approximate the posterior distribution by allowing large graph components to
+# be split into subgraphs. The splitting is done by duplicating peptides with
+# low probabilities. Splitting continues until the number of possible
+# configurations of each subgraph is below 2^18
+# Available for crux percolator
+fido-split-large-components=false
+
+# To speed up inference, proteins for which none of the associated peptides has
+# a probability exceeding the specified threshold will be assigned probability =
+# 0.
+# Available for crux percolator
+fido-protein-truncation-threshold=0.01
+
+# Replace the target-decoy competition with the method qvality to assign
+# q-values and PEPs. Note that this option only has an effect if the input PSMs
+# are from separate target and decoy searches.
+# Available for crux percolator
+post-processing-qvality=false
+
+# Maximum number of iterations for training.
+# Available for crux percolator
+maxiter=10
+
+# Quicker execution by reduced internal cross-validation.
+# Available for crux percolator
+quick-validation=false
+
+# In its initial round of training, Percolator uses one feature to induce a
+# ranking of PSMs. By default, Percolator will select the feature that produces
+# the largest set of target PSMs at a specified FDR threshold (cf. --train-fdr).
+# This option allows the user to specify which feature is used for the initial
+# ranking, using the name as a string. The name can be preceded by a hyphen
+# (e.g. "-XCorr") to indicate that a lower value is better.
+# Available for crux percolator
+default-direction=
+
+# Use unit normalization (i.e., linearly rescale each PSM's feature vector to
+# have a Euclidean length of 1), instead of standard deviation normalization.
+# Available for crux percolator.
+unitnorm=false
+
+# Measure performance on test set each iteration.
+# Available for crux percolator.
+test-each-iteration=false
+
+# When set to T, interpret the input file as a PIN file.
+# Available for crux percolator.
+feature-file-in=false
+
+# Use the Fido algorithm to infer protein probabilities. Must be true to use any
+# of the Fido options.
+# Available for crux percolator
+protein=false
+
+# Specify the probability with which a present protein emits an associated
+# peptide. Set by grid search (see --fido-gridsearch-depth parameter) if not
+# specified.
+# Available for crux percolator if --protein T is set.
+fido-alpha=0
+
+# Specify the probability of the creation of a peptide from noise. Set by grid
+# search (see --fido-gridsearch-depth parameter) if not specified.
+# Available for crux percolator if --protein T is set.
+fido-beta=0
+
+# Specify the prior probability that a protein is present in the sample. Set by
+# grid search (see --fido-gridsearch-depth parameter) if not specified.
+# Available for crux percolator if --protein T is set.
+fido-gamma=0
+
+# Use pi_0 value when calculating empirical q-values
+# Available for crux percolator if --protein T is set.
+fido-protein-level-pi0=false
+
+# Estimate empirical p-values and q-values for proteins using target-decoy
+# analysis.
+# Available for crux percolator if --protein T is set.
+fido-empirical-protein-q=false
+
+# Set depth of the grid search for alpha, beta and gamma estimation.
+# Available for crux percolator if --protein T is set.
+fido-gridsearch-depth=0
+
+# Use target-decoy competition to assign q-values and PEPs.
+# Available for crux percolator
+post-processing-tdc=false
+
+# Q-value threshold that will be used in the computation of the MSE and ROC AUC
+# score in the grid search.
+# Available for crux percolator if --protein T is set.
+fido-gridsearch-mse-threshold=0.05
+
+# By default, Percolator will examine the learned weights for each feature, and
+# if the weight appears to be problematic, then percolator will discard the
+# learned weights and instead employ a previously trained, static score vector.
+# This switch allows this error checking to be overriden.
+# Available for crux percolator.
+override=false
+
+# Use retention time features calculated as in "Improving tandem mass spectrum
+# identification using peptide retention time prediction across diverse
+# chromatography conditions" by Klammer AA, Yi X, MacCoss MJ and Noble WS.
+# (Analytical Chemistry. 2007 Aug 15;79(16):6111-8.).
+# Available for crux percolator
+klammer=false
+
+# Do not remove redundant peptides; keep all PSMs and exclude peptide level
+# probability.
+# Available for crux percolator
+only-psms=false
+
+# Include a decoy version of every peptide by shuffling or reversing the target
+# sequence or protein. In shuffle or peptide-reverse mode, each peptide is
+# either reversed or shuffled, leaving the N-terminal and C-terminal amino acids
+# in place. Note that peptides appear multiple times in the target database are
+# only shuffled once. In peptide-reverse mode, palindromic peptides are
+# shuffled. Also, if a shuffled peptide produces an overlap with the target or
+# decoy database, then the peptide is re-shuffled up to 5 times. Note that,
+# despite this repeated shuffling, homopolymers will appear in both the target
+# and decoy database. The protein-reverse mode reverses the entire protein
+# sequence, irrespective of the composite peptides.
+# Available for tide-index
+decoy-format=shuffle
+
+# Expression for static and variable mass modifications to include. Specify a
+# comma-separated list of modification sequences of the form:
+# C+57.02146,2M+15.9949,1STY+79.966331,...
+# Available for tide-index
+mods-spec=C+57.02146
+
+# Specifies N-terminal static and variable mass modifications on peptides.
+# Specify a comma-separated list of N-terminal modification sequences of the
+# form: 1E-18.0106,C-17.0265
+# Available for tide-index
+nterm-peptide-mods-spec=
+
+# Specifies C-terminal static and variable mass modifications on peptides.
+# Specify a comma-separated list of C-terminal modification sequences of the
+# form: X+21.9819
+# Available for tide-index
+cterm-peptide-mods-spec=
+
+# Specify the name of the file where the binarized fragmentation spectra will be
+# stored. Subsequent runs of crux tide-search will execute more quickly if
+# provided with the spectra in binary format. The filename is specified relative
+# to the current working directory, not the Crux output directory (as specified
+# by --output-dir). This option is not valid if multiple input spectrum files
+# are given.
+# Available for tide-search
+store-spectra=
+
+# Enable the calculation of exact p-values for the XCorr score. Calculation of
+# p-values increases the running time but increases the number of
+# identifications at a fixed confidence threshold. The p-values will be reported
+# in a new column with header "exact p-value", and the "xcorr score" column will
+# be replaced with a "refactored xcorr" column. Note that, currently, p-values
+# can only be computed when the mz-bin-width parameter is set to its default
+# value. Variable and static mods are allowed on non-terminal residues in
+# conjunction with p-value computation, but currently only static mods are
+# allowed on the N-terminus, and no mods on the C-terminus.
+# Available for tide-search
+exact-p-value=false
+
+# When providing a FASTA file as the index, the generated binary index will be
+# stored at the given path. This option has no effect if a binary index is
+# provided as the index.
+# Available for tide-search
+store-index=
+
+# When set to T, target and decoy search results are reported in a single file,
+# and only the top-scoring N matches (as specified via --top-match) are reported
+# for each spectrum, irrespective of whether the matches involve target or decoy
+# peptides.
+# Available for tide-search
+concat=false
+
+# Include the file column in tab-delimited output.
+# Available for tide-search
+file-column=true
+
+# If true, all peaks around the precursor m/z will be removed, within a range
+# specified by the --remove-precursor-tolerance option.
+# Available for tide-search.
+remove-precursor-peak=false
+
+# This parameter specifies the tolerance (in Th) around each precursor m/z that
+# is removed when the --remove-precursor-peak option is invoked.
+# Available for print-processed spectra and tide-search.
+remove-precursor-tolerance=1.5
+
+# When set to T, for each protein that begins with methionine, tide-index will
+# put two copies of the leading peptide into the index, with and without the
+# N-terminal methionine.
+# Available for tide-index.
+clip-nterm-methionine=false
+
+# Prevent duplicate peptides between the target and decoy databases. When set to
+# "F", the program keeps all target and previously generated decoy peptides in
+# memory. A shuffled decoy will be re-shuffled multiple times to avoid
+# duplication. If a non-duplicated peptide cannot be generated, the decoy is
+# skipped entirely. When set to "T", every decoy is added to the database
+# without checking for duplication. This option reduces the memory requirements
+# significantly. Default = F.
+# Available for tide-index.
+allow-dups=false
+
+# Controls whether neutral loss ions are considered in the search. Two types of
+# neutral losses are included and are applied only to singly charged b- and
+# y-ions: loss of ammonia (NH3, 17.0086343 Da) and H2O (18.0091422). Each
+# neutral loss peak has intensity 1/5 of the primary peak.
+# Available for tide-search.
+use-neutral-loss-peaks=true
+
+# The maximum charge state of a spectra to consider in search.
+# Available for tide-search.
+max-precursor-charge=5
+
+# Carries out a peptide-centric search. For each peptide the top-scoring spectra
+# are reported, in contrast to the standard spectrum-centric search where the
+# top-scoring peptides are reported. Note that in this case the "xcorr rank"
+# column will contain the rank of the given spectrum with respect to the given
+# candidate peptide, rather than vice versa (which is the default).
+# Available for tide-search.
+peptide-centric-search=false
+
+# 0=poll CPU to set num threads; else specify num threads directly.
+# Available for tide-search tab-delimited files only.
+num-threads=0
+
+# Analysis begins with a pre-processsing step that creates a set of lookup
+# tables which are then used during training. Normally, these lookup tables are
+# deleted at the end of the analysis, but setting this option to T prevents the
+# deletion of these tables. Subsequently, analyses can be repeated more
+# efficiently by specifying the --re-run option.
+# Available for q-ranker and barista.
+skip-cleanup=false
+
+# Re-run a previous analysis using a previously computed set of lookup tables.
+# For this option to work, the --skip-cleanup option must have been set to true
+# when the program was run the first time.
+# Available for q-ranker and barista.
+re-run=
+
+# Use an enriched feature set, including separate features for each ion type.
+# Available for q-ranker and barista.
+use-spec-features=true
+
+# If the target and decoy searches were run separately, rather than using a
+# concatenated database, then the program will assume that the database search
+# results provided as a required argument are from the target database search.
+# This option then allows the user to specify the location of the decoy search
+# results. Like the required arguments, these search results can be provided as
+# a single file, a list of files or a directory. However, the choice (file, list
+# or directory) must be consistent for the MS2 files and the target and decoy
+# tab-delimited files. Also, if the MS2 and tab-delimited files are provided in
+# directories, then Q-ranker will use the MS2 filename (foo.ms2) to identify
+# corresponding target and decoy tab-delimited files with names like
+# foo*.target.txt and foo*.decoy.txt. This naming convention allows the target
+# and decoy txt files to reside in the same directory.
+# Available for q-ranker and barista.
+separate-searches=
+
+# Specify that the search results are provided as lists of files, rather than as
+# individual files.
+# Available for barista and percolator.
+list-of-files=false
+
+# Specifies whether to do optimization at the protein, peptide or psm level.
+# Available for barista.
+optimization=protein
+
+# Specify the method used to estimate q-values: the mix-max procedure or
+# target-decoy competition. peptide-level is applied for spectrum-centric
+# search. Eliminates any PSMS for which there exists a better scoring PSM
+# involving the same peptide. 
+# Used by assign-confidence.
+estimation-method=tdc
+
+# Adjust the score using the Sidak adjustment and reports them in a new column
+# in the output file. Note that this adjustment only makes sense if the given
+# scores are p-values, and that it requires the presence of the "distinct
+# matches/spectrum" feature for each PSM.
+# Used by assign-confidence.
+sidak=false
+
+# Specify the column (for tab-delimited input) or tag (for XML input) used as
+# input to the q-value estimation procedure. If this parameter is unspecified,
+# then assign-confidence tries to seach for "xcorr score", "evalue" (comet),
+# "exact p-value" score fields in this order in the input file. 
+# Used by assign-confidence.
+score=
+
+# Specify this parameter to T in order to combine charge states with peptide
+# sequencesin peptide-centric search. Works only if peptide-level=T.
+# Used by assign-confidence.
+combine-charge-states=false
+
+# Specify this parameter to T in order to treat peptides carrying different or
+# no modifications as being the same. Works only if peptide-level=T.
+# Used by assign-confidence.
+combine-modified-peptides=false
+
+# The q-value threshold used by cascade search. Spectra identified with q-value
+# less than this threshold in one search will be excluded from all subsequent
+# searches.
+# Used by Cascade-Search
+q-value-threshold=0.01
+
+# Predict the specified primary ion series. 'a' indicates a-ions only, 'b'
+# indicates b-ions only, 'y' indicates y-ions only, 'by' indicates both b and y,
+# 'bya' indicates b, y, and a.
+# Only available for crux-predict-peptide-ions. Set automatically to 'by' for
+# searching.
+primary-ions=by
+
+# Predict the precursor ions, and all associated ions (neutral losses, multiple
+# charge states) consistent with the other specified options.
+# Only available for crux-predict-peptide-ions.
+precursor-ions=false
+
+# Predict the given number of isotope peaks (0|1|2).
+# Only available for crux-predict-peptide-ion.  Automatically set to 0 for Sp
+# scoring and 1 for xcorr scoring.
+isotope=0
+
+# Predict flanking peaks for b- and y ions.
+# Only available for crux-predict-peptide-ion.
+flanking=false
+
+# Predict theoretical ions up to max charge state (1, 2, ... ,6) or up to the
+# charge state of the peptide ("peptide"). If the max-ion-charge is greater than
+# the charge state of the peptide, then the maximum is the peptide charge. 
+# Available for predict-peptide-ions and search-for-xlinks. Set to 'peptide' for
+# search.
+max-ion-charge=peptide
+
+# Include among the predicted peaks b/y ions with up to n losses of nh3. For
+# example, for --nh3 2, predict a peak for each b- and y-ion with the loss of
+# one nh3 group and predict a second peak for each b- and y-ion with the loss of
+# two nh3 groups. These peaks will have 1 and 2, respectively, in the NH3 column
+# of the output.
+# Only available for crux-predict-peptide-ions.
+nh3=0
+
+# Include in the predicted peaks, b/y ions with the loss of 1 to n water
+# molecules. See --nh3 for an example.
+# Only available for crux-predict-peptide-ions.
+h2o=0
+
+# The name of the file in FASTA format.
+# Option for spectral-counts
+protein-database=
+
+# Type of analysis to make on the match results: (RAW|NSAF|dNSAF|SIN|EMPAI).
+# With exception of the RAW metric, the database of sequences need to be
+# provided using --protein-database.
+# Available for spectral-counts.  RAW is raw counts, NSAF is Normalized Spectral
+# Abundance Factor, dNSAF is Distributed Spectral Abundance Factor, SIN is
+# Spectral Index Normalized and EMPAI is Exponentially Modified Protein
+# Abundance Index
+measure=NSAF
+
+# Ignore peptides that map to multiple proteins.
+# Available for spectral-counts.
+unique-mapping=false
+
+# Quantification at protein or peptide level.
+# Available for spectral-counts and either NSAF and SIN.
+quant-level=protein
+
+# Perform a parsimony analysis on the proteins, and report a "parsimony rank"
+# column in the output file. This column contains integers indicating the
+# protein's rank in a list sorted by spectral counts. If the parsimony analysis
+# results in two proteins being merged, then their parsimony rank is the same.
+# In such a case, the rank is assigned based on the largest spectral count of
+# any protein in the merged meta-protein. The "simple" parsimony algorithm only
+# merges two proteins A and B if the peptides identified in protein A are the
+# same as or a subset of the peptides identified in protein B. The "greedy"
+# parsimony algorithm does additional merging, using the peptide q-values to
+# greedily assign each peptide to a single protein.
+# Available for spectral-counts.
+parsimony=none
+
+# Determines what type of threshold to use when filtering matches. none : read
+# all matches, qvalue : use calculated q-value from percolator or q-ranker,
+# custom : use --custom-threshold-name and --custom-threshold-min parameters.
+# used for crux spectral-counts
+threshold-type=qvalue
+
+# Only consider PSMs with a threshold value. By default, q-values are
+# thresholded using a specified threshold value. This behavior can be changed
+# using the --custom-threshold and --threshold-min parameters.
+# Available for spectral-counts. All PSMs with higher (or lower) than this will
+# be ignored.
+threshold=0.01
+
+# Specify which field to apply the threshold to. The direction of the threshold
+# (<= or >=) is governed by --custom-threshold-min. By default, the threshold
+# applies to the q-value, specified by "percolator q-value", "q-ranker q-value",
+# "decoy q-value (xcorr)", or "barista q-value".
+# Available for spectral-counts.
+custom-threshold-name=
+
+# When selecting matches with a custom threshold, custom-threshold-min
+# determines whether to filter matches with custom-threshold-name values that
+# are greater-than or equal (F) or less-than or equal (T) than the threshold.
+# Available for spectral-counts.
+custom-threshold-min=true
+
+# MS2 file corresponding to the psm file. Required to measure the SIN. Ignored
+# for NSAF, dNSAF and EMPAI.
+# Available for spectral-counts with measure=SIN.
+input-ms2=
+
+# Use mzid's passThreshold attribute to filter matches.
+# Used when parsing mzIdentML files.
+mzid-use-pass-threshold=false
+
+# Change the mass of all amino acids 'A' by the given amount.
+# 
+A=0
+
+# Change the mass of all amino acids 'C' by the given amount.
+# 
+C=57.021464
+
+# Change the mass of all amino acids 'D' by the given amount.
+# 
+D=0
+
+# Change the mass of all amino acids 'E' by the given amount.
+# 
+E=0
+
+# Change the mass of all amino acids 'F' by the given amount.
+# 
+F=0
+
+# Change the mass of all amino acids 'G' by the given amount.
+# 
+G=0
+
+# Change the mass of all amino acids 'H' by the given amount.
+# 
+H=0
+
+# Change the mass of all amino acids 'I' by the given amount.
+# 
+I=0
+
+# Change the mass of all amino acids 'K' by the given amount.
+# 
+K=0
+
+# Change the mass of all amino acids 'L' by the given amount.
+# 
+L=0
+
+# Change the mass of all amino acids 'M' by the given amount.
+# 
+M=0
+
+# Change the mass of all amino acids 'N' by the given amount.
+# 
+N=0
+
+# Change the mass of all amino acids 'P' by the given amount.
+# 
+P=0
+
+# Change the mass of all amino acids 'Q' by the given amount.
+# 
+Q=0
+
+# Change the mass of all amino acids 'R' by the given amount.
+# 
+R=0
+
+# Change the mass of all amino acids 'S' by the given amount.
+# 
+S=0
+
+# Change the mass of all amino acids 'T' by the given amount.
+# 
+T=0
+
+# Change the mass of all amino acids 'V' by the given amount.
+# 
+V=0
+
+# Change the mass of all amino acids 'W' by the given amount.
+# 
+W=0
+
+# Change the mass of all amino acids 'Y' by the given amount.
+# 
+Y=0
+
+# Legal values are auto, tsv, sqt, pin, pepxml or mzidentml format.
+# option, for psm-convert
+input-format=auto
+
+# Whether matches/ion are distinct (as opposed to total).
+# option, for psm-convert.
+distinct-matches=true
+
+# Rather than the spectrum, output summary statistics to standard output. Each
+# statistic is placed on a separate line, in the format <name>:<value> (e.g.
+# "TIC:1000.0").
+# Available only for crux-get-ms2-spectrum.  Does not affect contents of the
+# output file.
+stats=false
+
+# Print the theoretical spectrum
+# Available for xlink-predict-peptide-ions.
+print-theoretical-spectrum=false
+
+# Use the old version of xlink-searching algorithm. When false, a new version of
+# the code is run. The new version supports variable modifications and can
+# handle more complex databases. This new code is still in development and
+# should be considered a beta release.
+# Available for search-for-xlinks program.
+use-old-xlink=true
+
+# Score method for xlink {composite, modification, concatenated}.
+# Available for xlink-score-spectrum.
+xlink-score-method=composite
+
+# Provides a list of isotopic windows to search. For example, -1,0,1 will search
+# in three disjoint windows: (1) precursor_mass - neutron_mass +/- window, (2)
+# precursor_mass +/- window, and (3) precursor_mass + neutron_mass +/- window.
+# The window size is defined from the precursor-window and precursor-window-type
+# parameters. This option is only available when use-old-xlink=F.
+# Used for crux search-for-xlinks
+isotope-windows=0
+
+# Include linear peptides in the search.
+# Available for crux search-for-xlinks program.
+xlink-include-linears=true
+
+# Include dead-end peptides in the search.
+# Available for crux search-for-xlinks program.
+xlink-include-deadends=true
+
+# Include self-loop peptides in the search.
+# Available for crux search-for-xlinks program.
+xlink-include-selfloops=true
+
+# Include intra-protein cross-link candiates within the search.
+# Available for crux search-for-xlinks program.
+xlink-include-intra=true
+
+# Include inter-protein cross-link candidates within the search.
+# Available for crux search-for-xlinks program.
+xlink-include-inter=true
+
+# Include crosslink candidates that are both inter and intra.
+# Available for crux search-for-xlinks program.
+xlink-include-inter-intra=true
+
+# List of amino acids for which the cross-linker can prevent cleavage. This
+# option is only available when use-old-xlink=F.
+# Available for search-for-xlinks program.
+xlink-prevents-cleavage=K
+
+# Specify the maximum number of modifications allowed on a crosslinked peptide.
+# This option is only available when use-old-xlink=F.
+# Available for crux search-for-xlinks
+max-xlink-mods=0
+
+# Search decoy peptides within +/- precursor-window-weibull of the precursor
+# mass. The resulting scores are used only for fitting the Weibull distribution
+# Available for crux search-for-xlinks. 
+precursor-window-weibull=20
+
+# Window type to use in conjunction with the precursor-window-weibull parameter.
+# Available for crux search-for-xlinks
+precursor-window-type-weibull=mass
+
+# Keep shuffling and collecting XCorr scores until the minimum number of points
+# for weibull fitting (using targets and decoys) is achieved.
+# Available for crux search-for-xlinks
+min-weibull-points=4000
+
+# Determines which spectral feature detection algorithm to use. Different
+# results are possible with each algorithm, and there are pros and cons to each.
+# Available for crux hardklor
+hardklor-algorithm=version1
+
+# Defines alternative averagine models in the analysis that incorporate
+# additional atoms and/or isotopic enrichments. Modifications are represented as
+# text strings. Inclusion of additional atoms in the model is done using by
+# entering an atomic formula, such as: PO2 or Cl. Inclusion of isotopic
+# enrichment to the model is done by specifying the percent enrichment (as a
+# decimal) followed by the atom being enriched and an index of the isotope. For
+# example, 0.75H1 specifies 75% enrichment of the first heavy isotope of
+# hydrogen. In other words, 75% deuterium enrichment. Two or more modifications
+# can be combined into the same model, and separated by spaces: B2 0.5B1
+# Available for crux hardklor
+averagine-mod=
+
+# Boxcar averaging is a sliding window that averages n adjacent spectra prior to
+# feature detection. Averaging generally improves the signal-to-noise ratio of
+# features in the spectra, as well as improving the shape of isotopic envelopes.
+# However, averaging will also change the observed peak intensities. Averaging
+# with too wide a window will increase the occurrence of overlapping features
+# and broaden the chromatographic profiles of observed features. The number
+# specified is the total adjacent scans to be combined, centered on the scan
+# being analyzed. Therefore, an odd number is recommended to center the boxcar
+# window. For example, a value of 3 would produce an average of the scan of
+# interest, plus one scan on each side. A value of 0 disables boxcar averaging.
+# Available for crux hardklor
+boxcar-averaging=0
+
+# This parameter is only functional when boxcar-averaging is used. The filter
+# will remove any peaks not seen in n scans in the boxcar window. The effect is
+# to reduce peak accumulation due to noise and reduce chromatographic broadening
+# of peaks. Caution should be used as over-filtering can occur. The suggested
+# number of scans to set for filtering should be equal to or less than the
+# boxcar-averaging window size. A value of 0 disables filtering.
+# Available for crux hardklor
+boxcar-filter=0
+
+# This parameter is only functional when boxcar-filter is used. The value
+# specifies the mass tolerance in ppm for declaring a peak the same prior to
+# filtering across all scans in the boxcar window.
+# Available for crux hardklor
+boxcar-filter-ppm=10
+
+# Indicates whether the data contain profile or centroided peaks.
+# Available for crux hardklor
+centroided=false
+
+# Choose the charge state determination method.
+# Available for crux hardklor
+cdm=Q
+
+# Specifies the minimum charge state to allow when finding spectral features. It
+# is best to set this value to the lowest assumed charge state to be present. If
+# set higher than actual charge states that are present, those features will not
+# be identified or incorrectly assigned a different charge state and mass.
+# Available for crux hardklor
+min-charge=1
+
+# Specifies the maximum charge state to allow when finding spectral features. It
+# is best to set this value to a practical number (i.e. do not set it to 20 when
+# doing a tryptic shotgun analysis). If set higher than actual charge states
+# that are present, the algorithm will perform significantly slower without any
+# improvement in results.
+# Available for crux hardklor
+max-charge=5
+
+# Sets the correlation threshold (cosine similarity) for accepting each
+# predicted feature.
+# Available for crux hardklor
+corr=0.85
+
+# Sets the depth of combinatorial analysis. For a given set of peaks in a
+# spectrum, search for up to this number of combined peptides that explain the
+# observed peaks. The analysis stops before depth is reached if the current
+# number of deconvolved features explains the observed peaks with a correlation
+# score above the threshold defined with the correlation parameter.
+# Available for crux hardklor
+depth=3
+
+# When reporting each feature, report abundance as the sum of all isotope peaks.
+# The value reported is the estimate of the correct peak heights based on the
+# averagine model scaled to the observed peak heights.
+# Available for crux hardklor
+distribution-area=false
+
+# Specifies an ASCII text file that defines symbols for the periodic table.
+# Available for crux hardklor
+hardklor-data-file=
+
+# Indicates the type of instrument used to collect data. This parameter,
+# combined with the resolution parameter, define how spectra will be centroided
+# (if you provide profile spectra) and the accuracy when aligning observed peaks
+# to the models.
+# Available for crux hardklor
+instrument=fticr
+
+# Specifies an ASCII text file that can be read to override the natural isotope
+# abundances for all elements.
+# Available for crux hardklor
+isotope-data-file=
+
+# Specifies the maximum number of models to build for a set of peaks being
+# analyzed. Regardless of the setting, the number of models will never exceed
+# the number of peaks in the current set. However, as many of the low abundance
+# peaks are noise or tail ends of distributions, defining models for them is
+# detrimental to the analysis.
+# Available for crux hardklor
+max-features=10
+
+# Filters the spectra prior to analysis for the requested MS/MS level. For
+# example, if the data contain MS and MS/MS spectra, setting mzxml-filter = 1
+# will analyze only the MS scan events. Setting mzxml-filter = 2 will analyze
+# only the MS/MS scan events.
+# Available for crux hardklor
+mzxml-filter=1
+
+# Constrains the search in each spectrum to signals below this value in
+# Thomsons. Setting to 0 disables this feature.
+# Available for crux hardklor
+mz-max=0
+
+# Constrains the search in each spectrum to signals above this value in
+# Thomsons. Setting to 0 disables this feature.
+# Available for crux hardklor
+mz-min=0
+
+# Only used when algorithm = version1. Defines the maximum window size in
+# Thomsons to analyze when deconvolving peaks in a spectrum into features.
+# Available for crux hardklor
+mz-window=4
+
+# Specifies the resolution of the instrument at 400 m/z for the data being
+# analyzed.
+# Available for crux hardklor
+resolution=100000
+
+# Used to restrict analysis to spectra with scan numbers below this parameter
+# value. A value of 0 disables this feature.
+# Available for crux hardklor
+scan-range-max=0
+
+# Used to restrict analysis to spectra with scan numbers above this parameter
+# value. A value of 0 disables this feature.
+# Available for crux hardklor
+scan-range-min=0
+
+# Set the sensitivity level. There are four levels: 0 (low), 1 (moderate), 2
+# (high), and 3 (max). Increasing the sensitivity will increase computation
+# time, but will also yield more isotope distributions.
+# Available for crux hardklor
+sensitivity=2
+
+# Filters spectra to remove peaks below this signal-to-noise ratio prior to
+# finding features.
+# Available for crux hardklor
+signal-to-noise=1
+
+# Uses Savitzky-Golay smoothing on profile peak data prior to centroiding the
+# spectra. This parameter is recommended for low resolution spectra only.
+# Smoothing data causes peak depression and broadening. Only use odd numbers for
+# the degree of smoothing (as it defines a window centered on each data point).
+# Higher values will produce smoother peaks, but with greater depression and
+# broadening. Setting this parameter to 0 disables smoothing.
+# Available for crux hardklor
+smooth=0
+
+# Set the signal-to-noise window length (in m/z). Because noise may be
+# non-uniform across a spectrum, this value adjusts the segment size considered
+# when calculating a signal-over-noise ratio.
+# Available for crux hardklor
+sn-window=250
+
+# Applies the lowest noise threshold of any sn_window across the entire mass
+# range for a spectrum. Setting this parameter to 0 turns off this feature, and
+# different noise thresholds will be used for each local mass window in a
+# spectrum.
+# Available for crux hardklor
+static-sn=true
+
+# Ignore PPIDs that persist for longer than this length of time in the MS1
+# spectra. The unit of time is whatever unit is used in your data file (usually
+# minutes). These PPIDs are considered contaminants.
+# Available for crux bullseye
+max-persist=2
+
+# When true, require an exact match (as defined by --exact-tolerance) between
+# the center of the precursor isolation window in the MS2 scan and the base
+# isotopic peak of the PPID. If this option is set to false and no exact match
+# is observed, then attempt to match using a wider m/z tolerance. This wider
+# tolerance is calculated using the PPID's monoisotopic mass and charge (the
+# higher the charge, the smaller the window).
+# Available for crux bullseye
+exact-match=false
+
+# Allowed gap size when checking for PPIDs across consecutive MS1 scans.
+# Available for crux bullseye
+gap-tolerance=1
+
+# Only consider PPIDs above this minimum mass in daltons.
+# Available for crux bullseye
+bullseye-min-mass=600
+
+# Only consider PPIDs below this maximum mass in daltons.
+# Available for crux bullseye
+bullseye-max-mass=8000
+
+# Set the tolerance (+/-ppm) for --exact-match.
+# Available for crux bullseye
+exact-tolerance=10
+
+# Set the mass tolerance (+/-ppm) for finding PPIDs in consecutive MS1 scans.
+# Available for crux bullseye
+persist-tolerance=10
+
+# Total number of MS1 scans over which a PPID must be observed to be considered
+# real. Gaps in persistence are allowed by setting --gap-tolerance.
+# Available for crux bullseye
+scan-tolerance=3
+
+# Set the tolerance (+/-units) around the retention time over which a PPID can
+# be matches to the MS2 spectrum. The unit of time is whatever unit is used in
+# your data file (usually minutes).
+# Available for crux bullseye
+retention-tolerance=0.5
+
+# The format to write the output spectra to. If empty, the spectra will be
+# output in the same format as the MS2 input.
+# Available for crux bullseye
+spectrum-format=
+
+# Sort in ascending (T) or descending (F) order.
+# Available for sort-by-column
+ascending=true
+
+# Specify the input and output delimiter to use when processing the delimited
+# file.  The argument can be either a single character or the keyword 'tab.'
+# Available for the delimited utility programs.
+delimiter=tab
+
+# Print the header line of the file, in addition to the columns that match.
+# Available for crux extract-columns and extract-rows
+header=true
+
+# Specifies the data type of the column, either an integer (int), a floating
+# point number (real), or a string.
+# Available for crux extract-rows
+column-type=string
+
+# Specify the operator that is used to compare an entry in the specified column
+# to the value given on the command line.
+# Available for crux extract-rows
+comparison=eq
+
+# Run the Bullseye algorithm on the given MS data, using it to assign
+# high-resolution precursor values to the MS/MS data. If a spectrum file ends
+# with .ms2 or .cms2, matching .ms1/.cms1 files will be used as the MS1 file.
+# Otherwise, it is assumed that the spectrum file contains both MS1 and MS2
+# scans.
+# Available for crux pipeline
+bullseye=false
+
+# Specify which search engine to use.
+# Available for crux pipeline
+search-engine=tide-search
+
+# Specify which post-processor to apply to the search results.
+# Available for crux pipeline
+post-processor=percolator
+
+# Consider modifications on any amino acid in aa list with at most
+# max-per-peptide in one peptide. The parameter takes the form
+# [[html:<mass change>:<aa list>:<max per
+# peptide>:<prevents cleavage>:<prevents cross-link>]].
+# This parameter may be included with different values multiple times so
+# long as the total number of mod, cmod, and nmod parameters does not
+# exceed 11. The "prevents cleavage" and "prevents cross-link" arguments
+# are optional T/F arguments for describing whether the modification
+# prevents enzymatic cleavage of cross-linking, respectively. This
+# option is only available when use-old-xlink=F. Note that this
+# parameter only takes effect when specified in the parameter file.
+# Available for search-for-xlinks.
+mod=NO MODS
+
+# Specify a variable modification to apply to N-terminus of peptides. 
+# <mass change>:<max distance from protein n-term (-1 for no max)> Note
+# that this parameter only takes effect when specified in the parameter
+# file.
+# Available for search-for-xlinks.
+nmod=NO MODS
+
+# Specify a variable modification to apply to C-terminus of peptides.
+# <mass change>:<max distance from protein c-term (-1 for no max)>. Note
+# that this parameter only takes effect when specified in the parameter
+# file.
+# Available for search-for-xlinks.
+cmod=NO MODS
+
+####################
+# Comet Parameters #
+####################
+# 0=no, 1=concatenated search, 2=separate search.
+# Available for comet.
+decoy_search=0
+
+# 0=poll CPU to set num threads; else specify num threads directly.
+# Available for comet.
+num_threads=0
+
+# Controls the mass tolerance value.  The mass tolerance is set at +/- the
+# specified number i.e. an entered value of "1.0" applies a -1.0 to +1.0
+# tolerance. The units of the mass tolerance is controlled by the parameter
+# "peptide_mass_units". 
+# Available for comet.
+peptide_mass_tolerance=3
+
+# 0=amu, 1=mmu, 2=ppm.
+# Available for comet.
+peptide_mass_units=0
+
+# 0=average masses, 1=monoisotopic masses.
+# Available for comet.
+mass_type_parent=1
+
+# 0=average masses, 1=monoisotopic masses.
+# Available for comet.
+mass_type_fragment=1
+
+# 0=singly charged peptide mass, 1=precursor m/z.
+# Available for comet.
+precursor_tolerance_type=0
+
+# 0=off, 1=on -1/0/1/2/3 (standard C13 error), 2=-8/-4/0/4/8 (for +4/+8
+# labeling).
+# Available for comet.
+isotope_error=0
+
+# Specify a search enzyme from the end of the parameter file.
+# Available for comet.
+search_enzyme_number=1
+
+# valid values are 1 (semi-digested), 2 (fully digested), 8 N-term, 9 C-term.
+# Available for comet.
+num_enzyme_termini=2
+
+# Maximum value is 5; for enzyme search.
+# Available for comet.
+allowed_missed_cleavage=2
+
+# Binning to use on fragment ions.
+# Available for comet.
+fragment_bin_tol=1.000507
+
+# Offset position to start the binning (0.0 to 1.0).
+# Available for comet.
+fragment_bin_offset=0.4
+
+# 0=default peak shape, 1=M peak only.
+# Available for comet.
+theoretical_fragment_ions=1
+
+# Controls whether or not A-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_A_ions=0
+
+# Controls whether or not B-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_B_ions=1
+
+# Controls whether or not C-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_C_ions=0
+
+# Controls whether or not X-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_X_ions=0
+
+# Controls whether or not Y-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_Y_ions=1
+
+# Controls whether or not Z-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_Z_ions=0
+
+# 0=no, 1= yes to consider NH3/H2O neutral loss peak.
+# Available for comet.
+use_NL_ions=1
+
+# 0=no, 1=yes  write sqt file.
+# Available for comet.
+output_sqtfile=0
+
+# 0=no, 1=yes  write tab-delimited text file.
+# Available for comet.
+output_txtfile=1
+
+# 0=no, 1=yes  write pep.xml file.
+# Available for comet.
+output_pepxmlfile=1
+
+# 0=no, 1=yes write percolator file.
+# Available for comet.
+output_percolatorfile=0
+
+# 0=no, 1=yes  write .out files.
+# Available for comet.
+output_outfiles=0
+
+# 0=no, 1=yes to replace Sp with expect in out & sqt.
+# Available for comet.
+print_expect_score=1
+
+# num peptide results to show.
+# Available for comet.
+num_output_lines=5
+
+# 0=no, 1=yes for out files only.
+# Available for comet.
+show_fragment_ions=0
+
+# Sample enzyme which is possibly different than the one applied to the search.
+# Used to calculate NTT & NMC in pepXML output.
+# Available for comet. 
+sample_enzyme_number=1
+
+# Start and scan scan range to search; 0 as first entry ignores parameter.
+# Available for comet.
+scan_range=0 0
+
+# Precursor charge range to analyze; does not override mzXML charge; 0 as first
+# entry ignores parameter.
+# Available for comet.
+precursor_charge=0 0
+
+# Specifies the whether to override existing precursor charge state information
+# when present in the files with the charge range specified by the
+# "precursor_charge" parameter.
+# Available for comet.
+override_charge=0
+
+# MS level to analyze, valid are levels 2 or 3.
+# Available for comet. 
+ms_level=2
+
+# Specifies which scan types are searched.
+# Available for comet. 
+activation_method=ALL
+
+# MH+ peptide mass range to analyze.
+# Available for comet.
+digest_mass_range=600.0 5000.0
+
+# Number of search hits to store internally.
+# Available for comet.
+num_results=50
+
+# For '.out' file output only, 0=search everything again, 1=don't search if .out
+# exists.
+# Available for comet.
+skip_researching=1
+
+# Set maximum fragment charge state to analyze (allowed max 5).
+# Available for comet.
+max_fragment_charge=3
+
+# Set maximum precursor charge state to analyze (allowed max 9).
+# Available for comet.
+max_precursor_charge=6
+
+# 0=proteinDB, 1-6, 7=forward three, 8=reverse three, 9=all six.
+# Available for comet.
+nucleotide_reading_frame=0
+
+# 0=leave sequences as-is; 1=also consider sequence w/o N-term methionine.
+# Available for comet.
+clip_nterm_methionine=0
+
+# Maximum number of spectra to search at a time; 0 to search the entire scan
+# range in one loop.
+# Available for comet.
+spectrum_batch_size=0
+
+# Specifies the prefix of the protein names that indicates a decoy.
+# Available for comet.
+decoy_prefix=decoy_
+
+# Specifies the suffix string that is appended to the base output name for the
+# pep.xml, pin.xml, txt and sqt output files.
+# Available for comet.
+output_suffix=
+
+# Specifies one or more mass offsets to apply. This value(s) are effectively
+# subtracted from each precursor mass such that peptides that are smaller than
+# the precursor mass by the offset value can still be matched to the respective
+# spectrum.
+# Available for comet.
+mass_offsets=
+
+# Minimum number of peaks in spectrum to search.
+# Available for comet.
+minimum_peaks=10
+
+# Minimum intensity value to read in.
+# Available for comet. 
+minimum_intensity=0
+
+# 0=no, 1=yes, 2=all charge reduced precursor peaks (for ETD).
+# Available for comet. 
+remove_precursor_peak=0
+
+# +- Da tolerance for precursor removal.
+# Available for comet. 
+remove_precursor_tolerance=1.5
+
+# For iTRAQ/TMT type data; will clear out all peaks in the specified m/z range.
+# Available for comet.
+clear_mz_range=0.0 0.0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod01=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod02=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod03=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod04=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod05=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod06=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod07=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod08=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod09=0.0 null 0 4 -1 0 0
+
+# Specifies the total/maximum number of residues that can be modified in a
+# peptide.
+# Available for comet.
+max_variable_mods_in_peptide=5
+
+# Controls whether the analyzed peptides must contain at least one variable
+# modification.
+# Available for comet.
+require_variable_mod=0
+
+# Specifiy a static modification to the c-terminus of all peptides.
+# Available for comet.
+add_Cterm_peptide=0
+
+# Specify a static modification to the n-terminus of all peptides.
+# Available for comet.
+add_Nterm_peptide=0
+
+# Specify a static modification to the c-terminal peptide of each protein.
+# Available for comet.
+add_Cterm_protein=0
+
+# Specify a static modification to the n-terminal peptide of each protein.
+# Available for comet.
+add_Nterm_protein=0
+
+# Specify a static modification to the residue A.
+# Available for comet.
+add_A_alanine=0
+
+# Specify a static modification to the residue B.
+# Available for comet.
+add_B_user_amino_acid=0
+
+# Specify a static modification to the residue C.
+# Available for comet.
+add_C_cysteine=57.021464
+
+# Specify a static modification to the residue D.
+# Available for comet.
+add_D_aspartic_acid=0
+
+# Specify a static modification to the residue E.
+# Available for comet.
+add_E_glutamic_acid=0
+
+# Specify a static modification to the residue F.
+# Available for comet.
+add_F_phenylalanine=0
+
+# Specify a static modification to the residue G.
+# Available for comet.
+add_G_glycine=0
+
+# Specify a static modification to the residue H.
+# Available for comet.
+add_H_histidine=0
+
+# Specify a static modification to the residue I.
+# Available for comet.
+add_I_isoleucine=0
+
+# Specify a static modification to the residue J.
+# Available for comet.
+add_J_user_amino_acid=0
+
+# Specify a static modification to the residue K.
+# Available for comet.
+add_K_lysine=0
+
+# Specify a static modification to the residue L.
+# Available for comet.
+add_L_leucine=0
+
+# Specify a static modification to the residue M.
+# Available for comet.
+add_M_methionine=0
+
+# Specify a static modification to the residue N.
+# Available for comet.
+add_N_asparagine=0
+
+# Specify a static modification to the residue O.
+# Available for comet.
+add_O_ornithine=0
+
+# Specify a static modification to the residue P.
+# Available for comet.
+add_P_proline=0
+
+# Specify a static modification to the residue Q.
+# Available for comet.
+add_Q_glutamine=0
+
+# Specify a static modification to the residue R.
+# Available for comet.
+add_R_arginine=0
+
+# Specify a static modification to the residue S.
+# Available for comet.
+add_S_serine=0
+
+# Specify a static modification to the residue T.
+# Available for comet.
+add_T_threonine=0
+
+# Specify a static modification to the residue U.
+# Available for comet.
+add_U_selenocysteine=0
+
+# Specify a static modification to the residue V.
+# Available for comet.
+add_V_valine=0
+
+# Specify a static modification to the residue W.
+# Available for comet.
+add_W_tryptophan=0
+
+# Specify a static modification to the residue X.
+# Available for comet.
+add_X_user_amino_acid=0
+
+# Specify a static modification to the residue Y.
+# Available for comet.
+add_Y_tyrosine=0
+
+# Specify a static modification to the residue Z.
+# Available for comet.
+add_Z_user_amino_acid=0
+
+#
+# COMET_ENZYME_INFO _must_ be at the end of this parameters file
+#
+[COMET_ENZYME_INFO]
+0.  No_enzyme                      0  -          -
+1.  Trypsin                        1  KR         P
+2.  Trypsin/P                      1  KR         -
+3.  Lys_C                          1  K          P
+4.  Lys_N                          0  K          -
+5.  Arg_C                          1  R          P
+6.  Asp_N                          0  D          -
+7.  CNBr                           1  M          -
+8.  Glu_C                          1  DE         P
+9.  PepsinA                        1  FL         P
+10. Chymotrypsin                   1  FWYL       P
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/example-files/demo.ms2 b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/example-files/demo.ms2
new file mode 100644
index 0000000..9359011
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/example-files/demo.ms2
@@ -0,0 +1,54667 @@
+H	CreationDate	2/14/2007 6:19:18 PM
+H	Extractor	MakeMS2
+H	ExtractorVersion	1.0
+H	Comments	MakeMS2 written by Michael J. MacCoss, 2004
+H	ExtractorOptions	MS2/MS1
+S	10	10	636.34
+Z	2	1271.67
+187.4 12.5
+193.1 19.5
+194.3 13.7
+198.3 29.8
+199.1 12.2
+208.3 23.1
+208.9 11.4
+210.3 11.8
+213.0 3.3
+214.5 4.3
+216.1 32.8
+219.1 11.2
+221.0 14.3
+222.1 64.0
+225.1 16.6
+226.0 31.6
+228.3 7.2
+229.1 8.5
+230.5 58.2
+231.2 236.1
+232.2 75.8
+233.6 2.4
+234.2 51.4
+235.1 5.6
+236.3 30.2
+239.7 14.4
+241.3 34.8
+242.3 14.2
+244.3 9.0
+245.2 7.5
+247.9 4.4
+250.5 26.5
+253.0 15.9
+254.2 33.1
+255.1 20.2
+258.3 14.8
+259.2 73.2
+260.3 6.3
+263.0 12.5
+269.4 10.8
+271.1 55.2
+271.7 5.2
+275.2 51.5
+276.3 555.4
+277.4 41.8
+278.1 10.2
+282.2 12.1
+284.3 13.8
+287.3 9.9
+290.2 52.6
+293.2 3.1
+301.2 13.5
+303.1 4.6
+305.3 53.0
+306.2 26.8
+307.2 21.6
+308.3 2.8
+309.3 22.9
+311.5 20.2
+317.6 17.2
+319.3 29.6
+320.5 12.1
+321.3 31.6
+328.2 11.5
+333.4 11.6
+337.2 18.1
+338.0 63.4
+349.3 25.8
+351.5 1.8
+353.4 10.6
+355.2 121.5
+356.3 17.7
+357.4 4.0
+363.1 27.4
+367.6 19.4
+371.4 17.4
+372.4 111.4
+373.3 138.7
+374.4 49.4
+375.5 42.1
+379.5 20.3
+382.5 10.0
+383.5 5.8
+385.3 39.8
+386.3 4.8
+388.5 3.9
+390.4 437.2
+391.4 110.1
+392.4 68.2
+393.5 20.3
+394.3 36.5
+395.4 13.4
+396.5 41.7
+397.6 10.0
+398.2 3.1
+400.1 24.0
+402.4 20.9
+403.3 21.0
+404.2 3.7
+407.2 9.6
+408.3 23.7
+409.5 33.5
+410.3 6.1
+413.3 62.0
+414.4 16.9
+416.2 11.0
+418.3 18.9
+420.3 20.2
+422.5 23.8
+424.4 28.5
+429.6 11.6
+430.4 32.7
+431.3 40.6
+432.4 6.8
+435.4 19.6
+436.5 24.9
+437.8 13.7
+440.4 16.1
+444.6 17.6
+447.1 109.6
+448.1 34.3
+449.3 227.9
+450.4 134.7
+452.7 14.3
+453.5 2.3
+457.6 12.8
+458.5 123.3
+461.0 22.2
+462.5 30.7
+463.5 36.3
+466.2 15.0
+466.9 36.1
+468.0 139.5
+469.6 14.6
+470.3 21.1
+476.3 479.4
+477.0 248.6
+477.9 72.4
+479.0 91.0
+481.7 5.6
+483.5 4.2
+485.6 5.5
+486.6 4.2
+488.7 67.1
+489.4 3.6
+490.2 6.1
+492.6 6.4
+494.9 58.0
+495.5 15.1
+497.3 99.4
+498.1 6.9
+499.5 4.6
+501.2 18.0
+502.3 31.8
+503.3 7.3
+503.9 4.2
+505.5 9.9
+513.3 20.7
+514.5 36.9
+515.5 28.9
+516.3 20.7
+517.3 59.0
+521.6 14.5
+523.6 67.1
+524.2 3.2
+525.5 34.5
+529.3 11.0
+530.9 6.6
+532.4 110.4
+533.5 10.2
+534.6 21.0
+535.3 20.6
+537.9 43.3
+539.1 25.2
+542.4 10.3
+543.3 9.6
+544.2 71.9
+544.9 55.9
+545.6 7.3
+547.6 20.2
+549.6 129.6
+550.3 518.5
+551.5 153.7
+552.5 6.7
+554.5 304.3
+555.4 45.6
+556.2 176.3
+556.8 53.1
+557.5 25.6
+558.4 54.3
+559.7 118.6
+560.8 6.0
+562.0 156.8
+563.1 1040.5
+563.9 179.8
+564.7 50.3
+566.6 33.8
+568.3 387.6
+568.9 348.9
+569.9 72.3
+571.2 49.1
+572.4 76.2
+573.6 42.9
+575.1 50.9
+576.3 120.4
+577.4 150.8
+578.1 87.4
+580.1 77.5
+580.9 29.9
+582.1 34.4
+583.3 5.9
+584.5 826.2
+585.6 197.4
+586.4 8.9
+587.0 3.4
+589.4 12.4
+590.2 24.8
+591.4 23.0
+592.5 60.1
+594.3 182.3
+595.5 243.9
+596.6 271.3
+597.3 38.7
+598.6 81.9
+599.5 9.8
+600.4 3.2
+601.2 55.8
+602.2 53.0
+603.2 8.7
+605.0 74.0
+605.9 55.7
+609.3 80.8
+610.3 367.5
+611.1 133.1
+611.8 66.9
+613.0 131.3
+614.4 185.9
+615.9 22.0
+617.4 223.9
+618.7 990.1
+619.6 727.2
+620.7 90.7
+623.4 693.1
+624.3 157.1
+625.8 278.3
+626.7 521.0
+627.7 3854.2
+628.5 2042.5
+629.3 597.9
+630.3 38.2
+638.5 2.6
+640.5 54.4
+642.5 11.8
+643.3 23.2
+644.3 2.6
+649.5 5.7
+650.5 6.6
+651.6 13.9
+652.4 23.8
+657.4 10.6
+658.1 8.2
+659.5 5.7
+660.4 122.6
+661.5 367.9
+662.3 3.6
+666.0 6.1
+667.2 4.8
+669.6 22.6
+671.5 15.6
+674.6 10.1
+678.4 373.3
+679.5 185.4
+680.5 6.2
+686.3 6.5
+687.3 38.8
+688.4 94.1
+689.4 16.3
+690.7 52.0
+691.6 43.5
+692.5 13.8
+693.3 48.3
+703.0 55.9
+704.3 7.4
+705.4 77.2
+706.4 49.0
+707.8 33.5
+708.8 132.6
+709.6 90.3
+710.7 17.0
+720.2 11.6
+722.4 179.7
+723.6 166.2
+725.5 22.1
+726.8 15.2
+732.6 12.9
+733.5 66.6
+739.5 97.6
+741.4 16.9
+744.6 5.4
+745.4 2.6
+747.7 107.8
+748.6 43.0
+749.5 17.3
+750.6 53.6
+753.3 18.2
+760.4 14.7
+761.0 18.2
+763.2 37.4
+764.4 17.1
+766.0 45.1
+767.1 47.4
+769.3 82.2
+770.4 14.3
+771.4 4.3
+772.5 3.2
+775.2 65.0
+776.1 40.2
+777.5 9.5
+779.4 18.2
+780.6 35.9
+781.3 5.7
+784.4 31.1
+787.6 21.5
+788.5 44.3
+790.2 95.6
+791.0 35.5
+794.7 30.5
+796.8 32.0
+798.7 323.1
+799.5 110.9
+800.7 8.9
+801.4 32.1
+802.9 1.4
+803.9 129.8
+805.5 94.0
+806.5 24.5
+808.0 17.3
+809.0 22.3
+810.5 16.0
+813.1 42.6
+815.5 23.7
+816.1 6.3
+817.1 14.9
+818.5 5.7
+820.6 21.8
+822.6 1.8
+823.4 101.8
+824.5 247.3
+825.4 326.9
+826.4 271.9
+827.7 42.4
+831.6 56.0
+832.9 75.3
+833.9 189.3
+834.5 80.6
+835.6 3.4
+836.9 26.8
+837.7 34.6
+840.7 15.0
+842.3 480.7
+843.0 22.7
+843.6 109.0
+845.4 42.4
+846.6 29.2
+847.4 20.3
+849.0 45.6
+850.7 8.4
+853.8 79.2
+854.5 76.2
+855.2 19.9
+858.4 43.1
+859.4 9.6
+861.7 192.2
+862.9 71.3
+863.8 35.6
+864.5 128.5
+865.7 29.0
+867.2 122.4
+868.0 56.4
+869.3 9.5
+870.9 591.0
+871.8 75.9
+875.0 10.2
+876.2 272.9
+876.9 78.0
+877.7 56.8
+880.7 184.5
+881.9 66.9
+882.5 1306.4
+883.6 762.1
+884.9 245.4
+886.0 159.6
+887.3 15.5
+888.8 10.0
+890.3 10.7
+891.7 23.4
+894.3 2.7
+895.8 26.0
+899.5 25.9
+905.7 7.1
+916.7 22.0
+918.2 18.5
+926.8 6.1
+927.6 44.0
+934.6 18.7
+936.2 21.2
+938.0 9.5
+943.7 6.5
+945.7 8.0
+949.8 48.1
+951.5 167.0
+952.5 276.1
+953.6 115.7
+954.7 37.9
+956.0 11.6
+960.0 16.8
+960.7 71.5
+961.7 34.5
+963.8 50.4
+964.5 10.8
+967.6 79.6
+968.5 39.0
+969.7 28.1
+972.8 28.8
+974.3 31.7
+978.8 124.0
+979.6 195.8
+980.7 81.9
+981.6 50.0
+982.7 25.0
+985.1 50.1
+986.1 9.1
+987.1 2.0
+992.6 13.3
+996.5 5201.5
+997.5 2112.9
+998.6 532.2
+999.3 4.1
+1002.7 24.6
+1003.4 27.9
+1004.6 45.1
+1006.7 40.5
+1007.5 27.7
+1009.7 5.0
+1013.4 5.6
+1017.0 7.0
+1020.5 23.9
+1021.6 88.4
+1022.6 93.6
+1023.7 3.5
+1027.3 11.2
+1029.7 10.9
+1031.8 14.0
+1038.6 234.8
+1039.6 122.5
+1040.6 52.8
+1045.5 15.0
+1047.7 47.1
+1055.7 38.2
+1056.9 11.7
+1063.1 31.2
+1064.5 13.0
+1066.5 3.9
+1074.4 12.8
+1089.9 43.4
+1090.7 84.3
+1094.7 2.7
+1098.5 6.6
+1099.7 16.7
+1107.4 50.2
+1108.7 51.8
+1109.6 50.7
+1110.7 17.3
+1112.7 32.4
+1117.7 64.1
+1119.7 28.5
+1120.8 44.2
+1125.5 303.8
+1126.5 272.1
+1127.6 91.6
+1134.5 17.4
+1135.3 18.9
+1136.7 34.5
+1143.5 85.1
+1144.4 126.7
+1145.4 27.5
+1153.7 8.6
+1154.6 65.3
+1155.7 27.5
+1156.8 20.0
+1168.9 9.5
+1196.2 61.7
+1197.0 14.5
+1284.5 23.4
+S	11	11	745.27
+Z	2	1489.53
+225.2 3.2
+228.2 4.1
+234.1 35.6
+235.2 17.1
+236.3 1.6
+241.2 21.5
+242.3 30.5
+243.1 17.8
+244.3 7.9
+245.1 23.1
+246.1 3.9
+260.2 52.7
+261.5 25.2
+262.2 147.8
+263.3 12.9
+270.2 37.9
+272.5 1.8
+274.4 5.6
+281.3 11.5
+282.3 3.5
+283.2 2.5
+286.4 1.1
+296.2 8.0
+297.6 4.1
+298.2 11.9
+299.4 7.8
+305.3 3.4
+308.3 4.7
+309.5 10.3
+311.3 10.3
+312.2 12.0
+316.3 43.0
+317.4 389.2
+318.1 5.3
+321.7 9.0
+325.4 2.8
+326.2 3.7
+326.9 10.6
+328.4 8.3
+330.3 11.5
+336.4 4.3
+338.1 12.3
+339.2 20.9
+340.3 5.7
+341.1 2.7
+341.9 18.2
+343.5 6.3
+344.3 13.7
+345.3 3.0
+346.7 7.7
+348.2 3.8
+352.2 5.8
+357.2 130.6
+358.3 19.1
+359.7 6.5
+360.6 2.7
+361.2 0.9
+362.5 5.5
+367.9 13.7
+373.1 4.3
+375.2 375.2
+376.3 27.9
+385.3 4.8
+386.4 16.4
+389.4 4.4
+390.3 14.0
+391.1 2.6
+393.1 2.4
+394.0 1.7
+394.6 13.3
+398.4 24.6
+399.4 2.3
+403.2 37.3
+403.9 4.7
+406.3 4.6
+407.2 7.3
+410.3 4.0
+415.2 1.7
+416.4 399.5
+417.2 48.4
+418.3 18.9
+421.3 50.3
+422.4 5.5
+424.2 3.9
+425.3 27.8
+428.8 20.4
+431.3 49.1
+432.5 8.1
+433.7 10.9
+434.6 5.5
+439.2 19.1
+440.4 11.2
+441.4 6.8
+443.4 3.8
+444.1 9.0
+445.3 1.8
+446.2 17.6
+447.9 21.2
+450.4 18.2
+452.0 5.1
+453.0 3.5
+454.1 4.9
+455.6 6.0
+456.6 6.3
+457.3 3.2
+459.2 44.6
+460.6 7.2
+465.2 4.3
+466.5 4.9
+468.1 15.6
+470.3 12.8
+471.2 6.9
+474.2 55.4
+475.4 13.5
+476.1 24.6
+477.0 8.9
+482.3 3.8
+483.6 3.9
+486.4 29.9
+487.3 31.3
+488.3 2.4
+498.1 9.1
+502.8 14.0
+504.3 208.6
+505.4 30.5
+508.5 17.1
+510.1 10.7
+513.7 10.3
+515.4 1.1
+516.9 31.4
+518.1 15.5
+519.6 17.3
+521.3 7.1
+522.2 4.1
+523.2 16.3
+524.3 16.8
+525.8 13.9
+526.5 42.6
+527.4 43.9
+528.4 22.0
+532.2 5.3
+534.9 23.9
+535.8 10.0
+537.0 10.1
+539.3 6.3
+540.3 8.1
+543.0 9.0
+544.4 479.7
+545.2 83.8
+546.3 5.3
+547.7 42.9
+548.4 12.3
+549.2 6.0
+550.6 14.8
+551.5 11.2
+554.2 2.1
+556.1 35.4
+557.3 40.6
+558.1 48.5
+559.2 23.8
+560.2 5.4
+561.3 24.6
+562.4 35.9
+565.5 7.5
+569.4 1.4
+570.1 14.6
+571.4 9.7
+572.5 4.7
+573.3 9.4
+574.1 9.3
+575.3 7.8
+576.4 6.7
+577.2 4.2
+578.1 84.2
+579.0 1.7
+581.1 11.9
+583.7 28.3
+585.1 22.6
+585.9 20.7
+587.3 74.9
+588.3 19.4
+589.5 4.4
+591.0 17.6
+593.5 10.2
+597.0 12.0
+598.5 33.8
+601.0 24.8
+603.6 2.0
+605.2 184.5
+605.9 126.9
+606.5 112.7
+607.2 25.4
+608.8 5.0
+609.9 6.3
+610.7 18.5
+611.6 12.6
+613.7 9.9
+615.0 249.9
+616.1 20.9
+617.5 34.9
+618.5 14.1
+619.4 7.6
+620.2 3.7
+624.2 17.7
+625.6 590.5
+626.7 83.9
+627.6 22.7
+628.7 5.3
+629.4 17.1
+630.6 20.3
+631.3 26.5
+631.9 9.5
+634.7 22.4
+637.4 5.0
+639.6 53.4
+640.4 22.4
+641.1 25.9
+642.0 34.9
+644.3 81.0
+645.4 3.0
+647.4 17.8
+648.8 12.6
+651.5 38.6
+652.8 9.7
+655.1 25.8
+655.9 15.0
+657.4 633.0
+658.5 188.4
+659.3 8.4
+660.2 33.9
+660.9 26.5
+662.4 25.8
+663.4 65.6
+664.1 35.2
+665.5 45.2
+666.5 24.8
+667.6 9.6
+669.1 101.9
+670.4 42.1
+671.2 19.8
+673.3 6.2
+674.4 18.3
+675.1 36.7
+676.4 72.2
+678.1 4.9
+679.2 107.3
+680.0 25.2
+682.5 3.9
+683.8 14.3
+685.3 27.6
+686.2 679.8
+687.3 181.3
+688.5 52.7
+689.4 21.6
+691.1 0.9
+692.6 30.8
+693.6 37.2
+694.2 9.0
+695.6 18.3
+697.0 53.9
+698.2 61.4
+699.4 49.0
+700.5 18.9
+701.6 52.5
+702.8 15.0
+704.3 632.2
+705.4 116.8
+706.3 3.2
+707.5 24.2
+708.3 40.8
+709.3 27.4
+710.1 45.4
+710.9 16.6
+711.6 28.5
+712.5 13.5
+713.5 16.5
+714.3 63.2
+715.3 55.2
+716.4 19.8
+718.4 114.5
+719.3 167.3
+720.1 18.7
+720.8 1.6
+721.6 9.8
+722.8 103.7
+724.4 57.1
+726.5 51.1
+727.4 60.8
+728.2 241.6
+729.1 71.8
+730.0 54.9
+731.5 20.2
+732.5 132.5
+733.3 12.2
+734.1 37.8
+734.8 33.0
+735.8 225.7
+736.5 409.0
+737.9 47.8
+738.7 15.6
+745.8 1.5
+747.9 9.6
+750.2 5.3
+751.7 7.8
+754.9 20.7
+755.7 6.4
+759.3 5.7
+760.2 16.3
+760.9 25.1
+762.5 5.6
+764.0 23.6
+767.9 8.8
+768.6 30.2
+769.9 37.4
+770.5 11.7
+772.2 37.9
+773.1 13.0
+775.8 13.4
+776.7 3.5
+779.2 21.0
+780.7 32.4
+785.2 1.5
+786.5 1448.9
+787.5 219.8
+788.3 6.5
+789.9 30.3
+793.2 3.7
+794.4 13.4
+795.8 37.7
+797.1 45.6
+797.8 50.2
+798.6 36.3
+799.7 61.2
+800.7 41.5
+803.5 30.2
+804.9 26.4
+806.0 12.9
+807.2 55.1
+808.3 5.3
+808.9 27.9
+810.2 7.7
+811.5 34.0
+812.5 15.7
+813.4 1.9
+814.4 35.2
+815.4 150.0
+816.3 229.8
+817.3 36.2
+820.1 12.5
+820.7 40.3
+821.9 10.4
+823.3 43.5
+824.0 24.7
+825.8 20.6
+826.8 28.7
+827.8 5.9
+829.2 57.8
+830.2 34.0
+832.4 151.6
+833.4 331.5
+834.4 100.2
+835.2 6.3
+835.9 10.2
+838.7 26.7
+839.4 30.5
+840.9 11.7
+841.7 16.3
+843.2 88.6
+844.2 13.4
+845.3 34.6
+846.0 3.8
+847.2 37.2
+849.6 41.2
+850.6 15.1
+851.9 13.7
+853.2 25.3
+854.0 27.3
+854.9 29.1
+856.5 12.3
+857.4 45.9
+859.7 17.4
+861.3 14.3
+862.1 13.0
+863.4 34.5
+864.2 56.4
+866.1 43.1
+867.2 43.6
+867.9 6.0
+868.5 28.1
+869.4 11.4
+870.5 26.5
+871.2 10.4
+872.4 25.0
+873.2 62.9
+874.1 51.3
+874.9 22.7
+877.1 33.3
+877.8 2.1
+878.7 5.3
+879.6 2.4
+881.8 32.2
+882.5 6.4
+883.6 35.1
+885.5 541.3
+886.6 118.3
+888.2 66.5
+889.4 14.6
+890.3 9.2
+891.0 0.8
+893.5 89.2
+894.7 37.3
+897.2 85.5
+898.5 38.1
+900.5 18.7
+901.6 54.8
+902.3 71.3
+903.0 40.7
+904.3 24.2
+905.4 43.1
+907.3 1.7
+908.7 30.1
+909.5 9.3
+910.5 27.6
+911.6 25.3
+912.7 23.3
+913.6 23.6
+914.5 4.8
+916.2 24.8
+916.8 10.6
+917.9 74.2
+918.7 33.6
+920.0 41.5
+921.7 45.6
+922.6 89.8
+923.8 44.7
+925.0 106.0
+926.4 71.7
+927.5 51.0
+928.4 241.7
+929.4 235.1
+930.6 74.1
+931.5 14.5
+933.4 13.0
+935.6 36.5
+937.7 382.5
+938.5 22.6
+939.3 24.0
+940.0 5.5
+942.9 16.4
+943.8 20.0
+945.0 38.1
+946.4 462.6
+947.3 123.6
+948.2 48.4
+949.2 22.3
+950.1 8.1
+952.9 29.3
+954.4 31.3
+957.1 22.9
+960.5 4.5
+961.5 23.7
+963.4 15.5
+964.2 30.4
+965.3 39.5
+967.4 8.9
+968.3 57.9
+969.4 10.0
+970.2 2.5
+971.7 10.7
+972.7 25.5
+973.4 15.8
+974.9 5.9
+975.9 26.2
+977.2 11.8
+980.1 65.4
+981.0 4.8
+981.9 15.7
+982.6 26.7
+983.2 9.5
+986.5 803.6
+987.6 162.3
+989.2 12.9
+990.4 12.3
+991.5 92.3
+992.4 8.1
+994.7 1.5
+995.6 18.4
+998.0 14.7
+1000.0 20.4
+1001.9 9.4
+1003.1 68.8
+1004.3 34.5
+1005.1 8.8
+1006.0 34.1
+1009.4 9.7
+1011.5 2.6
+1012.5 61.9
+1013.2 21.0
+1014.1 13.9
+1014.9 20.2
+1015.7 6.2
+1016.6 4.4
+1018.6 5.1
+1019.2 11.2
+1021.9 3.0
+1022.9 5.1
+1024.6 39.0
+1025.4 13.5
+1026.2 6.5
+1027.1 13.3
+1029.2 29.8
+1034.1 18.9
+1034.7 21.1
+1036.1 20.9
+1038.1 11.0
+1038.9 23.5
+1040.7 20.0
+1041.6 22.5
+1042.6 7.7
+1045.6 9.5
+1050.2 16.4
+1053.2 21.5
+1054.0 3.9
+1056.5 142.5
+1057.8 69.0
+1058.5 15.6
+1059.6 18.5
+1060.8 3.8
+1061.7 7.2
+1062.5 28.0
+1064.5 16.0
+1065.6 12.1
+1067.6 142.0
+1068.6 59.0
+1069.9 43.9
+1070.6 7.0
+1071.6 24.5
+1074.4 591.8
+1075.4 72.5
+1078.7 10.2
+1079.3 6.6
+1081.3 60.8
+1082.3 18.7
+1084.2 10.3
+1088.5 26.4
+1089.9 15.0
+1091.4 11.6
+1095.5 24.9
+1097.5 120.5
+1098.7 52.5
+1103.9 12.6
+1104.6 15.2
+1106.0 0.9
+1109.3 3.9
+1113.5 12.1
+1115.6 741.9
+1116.6 163.5
+1117.3 13.8
+1118.7 3.6
+1121.3 1.5
+1127.5 0.9
+1133.8 8.9
+1134.8 1.3
+1136.6 3.6
+1138.6 17.5
+1140.4 3.7
+1142.0 3.4
+1145.7 5.9
+1148.4 1.4
+1149.5 14.7
+1154.4 58.6
+1155.5 204.0
+1156.4 101.4
+1157.5 14.3
+1160.6 2.5
+1162.8 4.1
+1163.5 8.4
+1164.7 7.4
+1169.9 3.1
+1173.4 940.8
+1174.6 99.0
+1175.2 14.4
+1178.4 1.9
+1183.8 4.2
+1188.6 8.9
+1189.8 5.2
+1193.1 14.9
+1193.8 8.2
+1195.4 16.0
+1201.8 18.0
+1203.2 20.8
+1204.6 8.7
+1206.0 35.7
+1208.6 9.9
+1210.7 151.8
+1211.8 51.9
+1212.7 67.1
+1213.8 30.6
+1214.6 12.3
+1215.7 17.0
+1224.6 7.9
+1228.7 468.9
+1230.4 658.5
+1231.5 144.2
+1240.0 11.7
+1242.7 45.9
+1243.8 16.8
+1253.8 17.2
+1255.0 7.9
+1255.8 14.4
+1259.7 15.5
+1273.1 5.9
+1275.9 10.5
+1277.1 7.8
+1283.3 4.7
+1296.5 19.2
+1299.5 13.0
+1307.4 6.1
+1308.4 21.3
+1313.0 1.7
+1313.8 5.5
+1315.4 3.6
+1316.8 22.3
+1323.9 1.5
+1325.5 40.5
+1326.3 75.9
+1327.8 7.1
+1332.3 7.5
+1335.2 8.2
+1336.5 12.2
+1338.4 9.2
+1339.8 2.2
+1341.6 46.8
+1342.8 42.9
+1343.5 648.4
+1344.6 213.9
+1372.5 13.3
+1388.8 9.4
+1396.2 4.1
+1411.6 11.2
+1412.2 11.4
+1425.5 11.3
+1433.8 6.9
+1449.8 6.7
+1451.3 12.2
+S	12	12	472.56
+I	ID	75
+I	RTime	3.4861
+Z	3	1415.66
+141.0 1.7
+144.2 1.6
+145.0 0.8
+147.0 3.5
+152.2 1.2
+158.2 1.7
+166.2 1.7
+169.1 7.5
+171.2 2.2
+173.2 1.6
+175.0 9.0
+176.2 0.8
+181.0 1.2
+186.3 1.6
+187.0 1.0
+188.2 1.0
+189.1 10.8
+193.2 1.6
+195.1 5.0
+201.3 1.6
+208.3 1.7
+209.1 1.1
+212.0 1.7
+213.0 3.5
+216.1 1.2
+219.7 1.2
+223.2 8.0
+226.1 3.7
+227.2 0.8
+228.3 4.9
+232.2 9.8
+233.2 3.2
+234.1 2.4
+237.6 2.5
+238.2 5.9
+241.3 2.0
+242.5 5.0
+244.8 0.8
+246.2 1.0
+248.2 3.7
+249.4 1.0
+252.2 3.5
+253.2 3.4
+258.2 3.9
+261.4 4.9
+262.1 3.5
+270.1 5.0
+271.3 6.0
+273.0 5.0
+274.2 7.0
+275.3 5.1
+277.3 1.2
+277.9 2.2
+281.3 2.5
+281.9 1.2
+283.2 1.6
+284.0 2.5
+291.0 1.3
+294.3 9.6
+295.3 1.6
+296.6 5.3
+298.2 3.0
+299.3 3.7
+301.1 4.0
+302.4 4.1
+303.7 1.5
+304.5 1.8
+310.1 26.7
+311.4 6.6
+313.3 0.8
+314.2 2.0
+315.4 2.2
+316.2 9.3
+317.2 5.0
+318.1 5.5
+325.3 5.0
+327.2 3.7
+331.3 1.0
+332.2 3.0
+338.3 1.5
+341.5 5.6
+343.7 10.6
+344.4 1.2
+345.3 7.5
+350.2 1.7
+351.2 2.0
+351.9 4.3
+355.9 5.5
+357.1 2.5
+361.4 1.8
+362.8 4.9
+363.7 6.5
+366.9 3.5
+367.5 5.8
+368.4 1.7
+370.0 19.3
+370.7 2.0
+371.6 3.9
+372.4 116.4
+373.0 7.5
+374.3 8.5
+377.3 2.7
+382.7 7.5
+384.3 3.5
+385.6 3.2
+386.3 3.0
+389.3 2.5
+391.5 7.1
+393.6 4.5
+394.3 1.0
+395.6 0.8
+398.3 1.7
+400.9 25.1
+401.7 4.8
+403.3 5.5
+403.9 6.9
+406.7 1.7
+408.0 18.7
+408.9 4.0
+410.8 8.8
+411.5 3.5
+412.2 2.0
+413.3 9.5
+414.5 32.0
+415.3 4.9
+416.0 2.0
+416.8 7.6
+417.7 2.5
+418.5 1.7
+419.4 5.0
+420.4 4.6
+421.2 1.5
+422.7 5.0
+423.4 36.0
+424.3 16.2
+425.5 12.1
+426.8 2.4
+428.0 13.5
+428.9 31.6
+430.1 3.7
+431.3 0.8
+432.0 8.5
+434.4 1105.3
+436.0 13.6
+437.5 25.1
+438.8 20.5
+440.0 18.1
+441.7 6.5
+443.0 16.0
+444.0 11.8
+446.1 6.6
+447.6 5.8
+448.4 8.0
+451.2 61.4
+452.3 18.2
+453.1 21.7
+454.4 57.0
+455.4 57.5
+456.4 29.0
+457.5 25.5
+458.6 26.2
+459.4 4.5
+460.7 55.4
+461.4 7.5
+462.0 1.7
+463.2 103.0
+463.9 50.7
+464.8 21.8
+465.5 9.3
+467.0 10.3
+474.3 5.1
+478.5 2.7
+480.0 4.5
+480.6 2.0
+483.1 2.2
+484.4 4.0
+487.8 13.1
+488.5 26.2
+489.4 2.5
+490.5 6.5
+493.5 1.8
+498.7 20.2
+505.5 7.5
+506.3 16.3
+514.4 7.3
+519.3 2.7
+521.2 2.0
+523.3 1.2
+525.5 2.0
+527.0 2.2
+527.8 13.3
+528.5 3.7
+530.6 11.3
+531.9 1.7
+534.0 3.2
+534.7 5.0
+539.2 1.7
+540.4 2.9
+542.2 17.0
+542.8 24.2
+543.5 4.0
+545.3 14.6
+549.2 79.0
+549.8 51.7
+550.6 30.5
+552.0 16.2
+553.0 48.0
+555.5 7.0
+558.1 22.6
+560.2 4.9
+561.4 2.5
+562.4 6.1
+563.9 26.0
+564.5 2.0
+565.9 1.2
+569.7 8.0
+570.7 20.3
+573.0 4.5
+574.2 4.1
+577.5 13.1
+579.7 5.5
+584.2 15.8
+585.3 12.8
+587.6 5.3
+589.9 5.1
+590.7 1.8
+592.4 4.0
+593.8 6.5
+594.6 2.0
+595.5 1.0
+596.4 2.7
+598.5 3.2
+599.8 3.2
+600.6 10.0
+601.6 2.4
+602.3 10.3
+605.0 9.3
+607.1 16.1
+608.0 24.7
+610.3 1.6
+611.6 4.6
+612.3 2.0
+613.6 28.5
+615.0 14.6
+616.1 1.6
+617.3 2.7
+619.4 11.1
+620.6 17.8
+621.6 36.2
+622.6 6.5
+625.7 12.3
+626.4 17.1
+627.1 8.6
+628.1 7.3
+628.8 13.5
+630.3 18.8
+631.0 10.1
+632.0 9.3
+634.4 7.0
+636.4 2.2
+641.3 4.1
+645.2 3.7
+648.5 7.3
+650.5 12.8
+651.4 3.7
+654.6 4.0
+655.3 1.6
+659.9 3.4
+660.8 9.0
+669.7 8.8
+672.8 3.2
+683.5 1.8
+684.3 3.7
+685.4 2.7
+692.3 12.8
+693.1 4.5
+696.4 7.4
+697.4 1.5
+698.7 7.1
+700.6 20.5
+701.5 1.7
+702.5 7.9
+703.6 0.8
+713.9 4.0
+716.4 3.7
+718.4 2.0
+719.6 1.2
+721.1 4.9
+722.6 2.5
+725.6 2.4
+727.7 4.0
+728.4 5.5
+733.4 7.0
+734.0 2.2
+735.3 2.0
+740.5 2.9
+748.4 1.3
+749.2 1.2
+753.4 0.8
+754.6 1.1
+759.3 1.7
+761.5 5.8
+765.4 4.6
+769.2 3.5
+770.6 3.5
+779.8 4.8
+782.2 12.3
+783.4 2.7
+788.3 2.7
+789.6 6.4
+791.2 0.8
+796.7 5.5
+797.6 4.6
+798.4 9.1
+799.4 1.1
+803.5 3.5
+805.2 10.8
+807.0 1.6
+814.4 2.4
+815.6 14.8
+816.6 3.7
+817.5 1.0
+839.2 1.2
+840.8 4.8
+850.7 1.3
+900.1 2.0
+909.5 1.6
+910.4 2.2
+927.5 2.4
+958.2 1.0
+S	13	13	717.06
+I	ID	193
+I	RTime	9.5441
+Z	1	717.06
+228.0 1.8
+246.1 2.2
+260.2 1.2
+275.3 2.2
+276.4 1.7
+283.0 1.2
+284.3 4.3
+294.2 3.2
+295.6 1.7
+296.3 1.5
+309.5 1.5
+311.3 1.8
+317.5 2.2
+322.2 2.2
+324.1 3.0
+325.2 2.4
+326.6 5.5
+329.2 1.2
+330.5 2.7
+331.3 8.8
+337.4 4.5
+338.0 1.2
+341.4 1.2
+353.7 0.8
+359.0 0.8
+369.3 7.9
+370.9 7.1
+389.4 9.3
+394.5 3.2
+396.2 2.2
+401.2 2.0
+405.2 3.4
+406.2 2.0
+410.3 1.7
+411.8 1.5
+413.2 3.2
+416.6 1.3
+425.6 4.5
+428.8 0.6
+429.5 2.0
+430.5 4.0
+440.8 2.9
+442.1 2.9
+447.3 1.5
+448.9 2.5
+454.0 1.2
+457.4 7.5
+458.5 14.3
+463.5 5.3
+475.4 15.8
+478.4 3.0
+480.6 5.1
+481.4 1.6
+494.3 1.1
+500.4 2.2
+501.4 4.5
+502.4 20.8
+508.0 2.5
+509.3 2.0
+515.1 1.0
+517.3 4.6
+519.3 2.2
+520.4 1.2
+525.0 12.1
+531.6 1.5
+539.5 1.8
+542.6 1.8
+543.4 1.7
+552.2 1.8
+553.1 7.8
+556.4 2.0
+559.2 1.2
+567.4 3.5
+570.4 2.5
+577.3 2.9
+579.4 2.7
+588.5 3.7
+594.6 3.5
+601.1 3.0
+602.2 7.5
+604.6 1.0
+610.0 5.1
+625.4 4.5
+655.8 3.2
+657.7 1.2
+663.6 3.5
+664.4 1.6
+665.5 7.0
+672.2 5.4
+673.9 3.0
+675.3 2.5
+680.5 1.2
+681.3 9.0
+682.6 16.2
+686.6 11.3
+687.4 2.4
+691.4 4.4
+698.4 44.4
+699.5 46.5
+700.3 15.8
+1037.4 2.5
+S	14	14	559.10
+I	ID	188
+I	RTime	9.2816
+Z	2	1117.19
+Z	3	1675.28
+158.0 3.9
+191.8 1.3
+210.3 1.2
+232.5 5.1
+233.8 2.7
+240.2 1.1
+243.3 2.7
+244.1 3.2
+251.3 8.8
+252.3 10.1
+253.3 2.7
+254.3 1.6
+258.2 5.3
+260.2 3.4
+261.1 1.7
+262.4 1.2
+265.2 1.7
+267.8 2.0
+271.4 5.1
+273.1 4.5
+274.0 3.4
+275.2 3.7
+276.0 3.7
+280.2 5.8
+282.1 1.5
+286.2 2.9
+290.1 1.7
+291.2 52.2
+292.2 6.6
+296.5 3.4
+297.2 3.4
+308.3 2.2
+309.7 1.5
+313.2 2.7
+317.9 2.7
+319.2 4.9
+332.3 1.2
+333.2 4.5
+338.3 1.2
+339.0 1.8
+344.9 1.6
+353.3 2.2
+357.4 2.0
+358.3 3.0
+366.5 3.5
+370.1 2.7
+386.2 8.8
+387.3 3.5
+388.6 5.0
+390.1 1.2
+391.3 2.7
+394.1 2.2
+395.3 7.4
+396.1 5.4
+398.3 1.6
+402.5 2.0
+403.2 6.0
+404.1 2.5
+407.6 1.2
+412.2 14.6
+413.2 12.3
+418.4 2.0
+424.2 1.3
+430.7 20.0
+431.4 5.1
+440.4 2.2
+441.5 6.3
+442.3 5.5
+444.3 1.2
+452.2 1.7
+454.2 2.9
+455.6 1.2
+456.2 1.8
+458.9 3.7
+476.1 1.5
+479.3 2.5
+480.9 1.6
+485.6 1.5
+487.6 3.0
+490.3 2.9
+491.3 2.7
+497.5 1.2
+502.0 3.7
+507.2 6.5
+513.3 1.2
+522.3 3.2
+524.5 6.6
+525.3 16.2
+527.3 3.0
+529.2 4.3
+530.4 8.8
+537.4 5.3
+540.3 29.2
+541.4 85.4
+542.4 39.5
+549.7 29.7
+550.3 29.6
+581.5 4.1
+605.1 2.4
+646.0 5.6
+659.6 14.6
+660.5 4.9
+682.0 4.0
+687.9 3.5
+689.3 1.6
+710.3 8.3
+711.5 3.2
+738.3 11.1
+757.0 1.8
+781.5 4.6
+801.2 2.5
+802.1 4.0
+821.1 2.4
+825.7 1.0
+839.4 4.6
+840.6 2.0
+852.5 3.2
+859.8 3.7
+866.8 5.3
+867.4 1.2
+868.5 1.6
+931.5 1.2
+962.6 1.7
+970.5 1.2
+971.4 1.8
+980.4 8.6
+S	15	15	732.13
+Z	2	1463.25
+209.0 62.5
+210.3 12.8
+216.0 87.0
+220.1 58.0
+224.9 4.9
+226.1 418.2
+227.0 68.3
+227.9 46.7
+229.2 13.3
+231.1 12.7
+238.1 209.1
+239.2 15.0
+244.1 953.8
+245.2 90.0
+245.9 20.4
+252.3 8.8
+255.3 38.8
+260.2 9.4
+262.1 35.0
+270.0 10.9
+275.8 21.8
+277.4 6.3
+279.1 12.7
+280.2 49.8
+284.1 96.8
+285.7 23.5
+289.9 64.6
+291.4 10.6
+294.3 153.7
+295.2 80.3
+297.3 23.9
+298.2 74.2
+301.3 11.2
+308.2 252.6
+309.2 52.8
+310.2 20.6
+313.4 36.5
+314.6 49.3
+315.2 27.5
+318.1 30.8
+323.3 10.5
+325.3 253.2
+326.2 209.0
+327.1 37.3
+331.2 48.2
+338.6 16.5
+340.2 21.9
+341.2 7.7
+343.2 2857.2
+344.2 253.6
+345.2 41.9
+350.0 10.8
+351.1 3.7
+356.2 6.2
+360.8 8.4
+367.1 74.5
+369.3 59.3
+371.1 6.3
+376.0 25.8
+381.2 7.2
+384.1 307.5
+385.2 118.1
+386.1 5.9
+389.0 8.0
+389.9 6.1
+394.2 22.3
+395.3 71.0
+400.2 6.4
+402.0 10.6
+403.2 22.7
+404.2 10.4
+407.3 325.1
+408.3 75.3
+412.2 170.1
+413.2 155.1
+414.1 4.3
+414.9 9.1
+417.0 13.2
+419.2 15.4
+420.6 29.9
+421.4 54.7
+424.3 10.3
+430.2 588.5
+431.2 119.3
+439.1 30.1
+440.2 7.5
+444.3 7.2
+448.0 19.6
+449.0 36.7
+454.2 36.9
+455.1 18.1
+456.3 17.8
+457.1 17.3
+458.6 7.8
+465.3 132.4
+466.2 322.5
+467.2 53.9
+468.2 54.3
+474.2 17.9
+475.4 7.4
+476.1 12.7
+477.1 30.4
+483.1 679.8
+484.2 692.7
+485.3 53.3
+485.9 31.8
+486.5 6.9
+494.4 6.8
+499.1 14.2
+500.1 18.1
+501.3 453.1
+502.3 30.3
+504.5 41.4
+505.4 79.1
+514.2 7.8
+515.2 146.0
+516.0 29.1
+517.1 22.6
+518.7 25.5
+520.1 209.5
+521.2 28.8
+522.0 32.5
+523.7 8.5
+529.6 16.2
+533.4 17.7
+538.3 27.6
+539.1 9.7
+539.8 15.8
+540.5 15.7
+548.3 18.6
+549.3 52.6
+551.9 9.9
+553.7 19.8
+556.1 100.3
+557.2 32.7
+558.3 4.4
+559.6 42.5
+560.9 8.8
+562.2 19.8
+566.1 38.6
+569.1 110.5
+570.1 54.8
+571.6 14.3
+572.6 35.4
+574.3 106.9
+575.9 17.3
+576.5 31.6
+577.3 4.2
+579.4 56.8
+580.3 43.7
+581.1 12.0
+582.8 8.5
+584.8 54.5
+586.4 59.0
+587.2 69.3
+588.4 29.0
+590.5 19.8
+593.4 9.8
+595.2 18.3
+596.6 88.4
+597.2 318.0
+598.2 116.9
+599.1 7.4
+600.4 17.3
+602.0 99.0
+602.9 127.0
+604.3 87.5
+605.1 117.9
+607.2 12.8
+608.3 6.6
+610.1 199.6
+610.9 104.3
+611.6 52.8
+613.4 36.3
+614.3 555.2
+615.2 1289.6
+616.2 245.1
+617.2 73.3
+619.2 3.9
+619.9 53.4
+627.5 10.8
+628.1 8.7
+628.8 8.0
+632.2 2729.6
+633.2 510.8
+634.3 288.8
+635.6 20.3
+636.9 15.2
+639.7 12.2
+641.4 77.8
+642.0 11.4
+644.7 24.7
+647.1 14.5
+650.8 22.4
+651.6 62.2
+652.7 28.1
+656.0 15.9
+657.4 143.4
+658.3 19.9
+660.3 100.4
+661.0 12.4
+664.2 11.7
+666.0 86.3
+667.2 13.8
+667.9 6.6
+671.4 30.3
+674.5 112.4
+675.7 60.9
+676.3 15.5
+677.4 25.2
+679.8 34.1
+681.5 38.0
+684.1 16.0
+685.2 38.6
+687.3 30.5
+688.1 3.3
+689.2 120.7
+693.0 23.6
+694.8 48.7
+695.5 61.6
+696.3 68.0
+699.9 28.8
+700.9 12.3
+702.6 19.0
+703.6 23.9
+704.9 81.2
+705.9 44.6
+707.0 12.3
+708.5 11.8
+713.1 30.3
+714.2 349.6
+714.9 157.3
+715.6 79.4
+716.5 27.0
+717.1 36.1
+719.0 22.8
+721.1 39.7
+723.0 664.5
+724.0 35.0
+747.5 36.4
+749.6 10.9
+752.4 25.8
+753.6 15.5
+755.9 9.4
+761.4 27.0
+767.2 5.3
+777.7 10.3
+778.3 20.1
+779.0 5.2
+784.9 70.9
+786.0 22.1
+789.3 10.4
+793.5 14.5
+794.7 48.5
+795.8 35.2
+797.3 16.0
+799.4 8.0
+802.3 10.1
+805.4 56.8
+806.2 53.0
+809.0 15.2
+811.1 23.9
+813.5 21.9
+814.2 36.8
+814.9 8.2
+823.4 28.3
+825.5 33.0
+826.1 21.2
+827.6 37.2
+830.1 91.4
+831.4 4774.0
+832.4 2128.7
+833.5 355.7
+835.3 13.3
+838.3 11.7
+841.4 135.1
+842.2 67.1
+846.6 3.6
+857.1 40.0
+858.1 39.1
+859.3 37.1
+862.3 10.4
+869.7 19.3
+870.3 9.7
+876.4 6.9
+878.7 28.1
+879.5 7.1
+880.6 22.7
+883.6 5.0
+884.5 6.3
+885.4 6.7
+886.4 38.3
+887.5 42.1
+888.5 29.7
+890.6 95.4
+893.0 12.2
+894.9 108.0
+897.9 115.9
+898.6 74.7
+899.3 3.5
+901.5 28.2
+908.6 11.4
+909.6 54.2
+915.4 68.1
+916.0 8.0
+920.0 13.0
+922.6 50.3
+925.4 119.2
+926.3 255.8
+927.3 27.0
+928.2 42.5
+932.2 32.7
+940.1 24.3
+941.1 14.4
+943.5 269.9
+944.5 98.2
+945.2 65.6
+948.4 6.6
+950.1 12.5
+956.0 8.4
+957.5 8.7
+958.5 44.0
+959.3 34.3
+962.4 2770.6
+963.6 1265.8
+964.5 397.8
+967.0 41.3
+969.6 73.2
+970.4 18.5
+975.7 83.5
+976.7 203.4
+978.3 44.2
+983.3 6.3
+984.5 16.6
+985.4 355.6
+986.7 45.5
+988.6 17.6
+989.5 82.8
+991.6 4.7
+994.6 22.0
+996.2 24.4
+998.3 36.8
+1000.5 34.1
+1006.4 25.5
+1009.6 51.7
+1010.6 41.8
+1016.3 6.3
+1021.5 35.2
+1025.2 30.8
+1028.7 30.5
+1033.4 1399.9
+1034.4 663.5
+1035.2 128.1
+1035.9 30.9
+1036.8 9.0
+1038.6 87.3
+1039.6 78.0
+1040.4 66.2
+1041.6 10.6
+1045.7 57.6
+1049.5 9.1
+1053.2 21.4
+1054.4 9.6
+1056.3 197.2
+1057.2 185.9
+1058.0 32.4
+1058.7 12.9
+1067.6 26.3
+1068.4 5.3
+1074.3 15.0
+1075.3 22.7
+1076.3 4.6
+1084.3 9.1
+1102.6 87.5
+1103.6 59.0
+1104.7 13.1
+1109.3 21.5
+1117.5 42.7
+1118.6 24.4
+1120.5 5633.0
+1121.5 3299.1
+1122.5 1097.2
+1123.2 62.0
+1131.4 35.9
+1140.5 6.7
+1143.4 13.3
+1146.9 15.9
+1151.3 59.5
+1152.4 346.8
+1153.5 27.9
+1154.6 38.1
+1158.2 5.2
+1169.4 484.9
+1170.4 101.2
+1182.2 36.2
+1183.5 13.1
+1185.9 30.4
+1186.6 17.5
+1187.6 13.2
+1188.5 16.9
+1201.7 29.5
+1202.8 34.4
+1204.0 3.9
+1216.4 6.9
+1218.9 37.0
+1219.5 2418.4
+1220.6 1664.6
+1221.6 357.5
+1238.4 50.2
+1288.2 47.0
+1291.6 4.9
+1298.1 5.8
+1299.4 193.6
+1300.3 49.2
+1309.2 16.2
+1314.5 21.6
+1316.4 352.0
+1317.5 205.8
+1318.6 105.0
+1334.4 21.1
+1403.8 33.0
+1409.2 22.8
+1412.6 7.0
+1437.9 11.0
+S	16	16	713.07
+I	ID	228
+I	RTime	11.2582
+Z	1	713.07
+247.0 5.1
+248.3 1.8
+252.2 1.3
+254.2 1.3
+255.4 1.0
+257.4 2.7
+258.4 2.5
+275.3 2.5
+290.0 1.8
+292.1 4.6
+293.2 1.6
+299.2 0.8
+309.3 4.5
+326.3 2.0
+329.3 2.2
+333.2 2.2
+339.2 1.5
+352.4 1.3
+366.1 1.1
+367.0 2.5
+368.3 3.4
+380.2 7.0
+382.4 6.3
+383.2 1.2
+384.3 1.0
+386.0 2.4
+391.3 3.7
+397.1 2.0
+400.1 3.0
+404.4 4.3
+411.4 2.7
+424.4 3.0
+434.4 1.3
+438.3 6.6
+443.1 5.0
+445.1 2.0
+449.5 1.3
+453.5 1.0
+454.2 2.0
+456.5 6.5
+457.7 2.5
+459.2 1.8
+470.4 7.0
+471.6 6.8
+476.4 1.3
+479.0 2.0
+485.4 2.0
+487.1 2.7
+490.4 0.8
+494.3 2.5
+495.9 6.0
+496.6 4.9
+498.3 7.5
+498.9 2.2
+499.6 5.6
+503.3 3.4
+504.2 4.6
+505.3 2.5
+507.3 4.0
+512.5 2.9
+520.6 2.4
+522.3 2.4
+525.2 2.7
+528.3 1.8
+536.3 1.2
+538.3 3.2
+548.0 1.0
+549.1 2.2
+551.2 7.4
+557.2 1.3
+560.5 3.0
+561.5 1.2
+566.4 12.6
+567.0 9.6
+573.3 1.6
+575.1 1.5
+576.4 2.0
+583.3 2.2
+584.6 4.5
+585.4 1.3
+592.0 4.5
+594.3 4.0
+598.3 5.0
+603.5 2.0
+606.2 5.0
+614.5 2.2
+616.2 1.6
+621.1 3.9
+622.1 1.3
+636.1 1.5
+644.6 2.0
+652.4 7.0
+653.2 1.5
+660.0 9.1
+668.3 1.6
+669.3 1.3
+677.8 12.8
+678.5 12.0
+682.5 5.1
+688.1 2.0
+694.3 10.8
+695.3 48.0
+696.5 23.2
+703.5 3.0
+870.5 1.1
+916.4 0.8
+923.3 4.9
+939.7 2.2
+S	17	17	495.25
+I	ID	76
+I	RTime	3.5071
+Z	2	989.49
+145.3 1.3
+147.1 13.3
+153.0 0.8
+154.4 1.0
+171.2 0.8
+173.0 11.3
+175.3 1.3
+182.2 0.8
+183.3 0.8
+185.0 2.0
+200.4 4.5
+201.1 10.6
+202.1 1.2
+204.9 1.0
+207.2 3.5
+208.1 2.5
+215.2 3.5
+218.1 0.8
+219.2 1.7
+226.2 1.3
+230.4 3.2
+235.1 8.6
+236.1 4.1
+240.1 2.2
+241.0 2.4
+247.9 2.7
+249.4 10.5
+252.0 0.8
+255.0 1.3
+257.3 12.3
+259.2 1.0
+260.1 2.7
+268.3 5.4
+272.1 3.9
+274.0 1.2
+275.2 48.7
+276.5 1.3
+280.1 3.2
+285.2 1.1
+286.0 3.2
+289.3 6.0
+295.1 2.0
+299.2 1.6
+303.3 1.7
+304.3 5.8
+311.4 4.4
+312.2 2.7
+315.3 3.0
+316.3 1.2
+321.5 2.2
+323.2 4.0
+329.0 11.6
+332.8 2.7
+334.9 2.0
+338.5 4.5
+342.4 1.7
+349.6 1.1
+352.1 6.0
+357.3 11.1
+364.3 2.2
+365.1 2.2
+366.2 2.9
+368.2 4.8
+376.2 2.0
+377.6 17.0
+381.2 5.5
+382.3 1.2
+382.9 1.2
+384.1 3.7
+386.4 47.7
+387.3 19.5
+389.2 7.9
+390.4 11.1
+395.1 16.3
+395.8 12.8
+400.0 13.1
+401.1 4.1
+402.6 2.0
+404.0 8.8
+406.0 1.2
+407.1 3.2
+409.5 7.9
+413.6 9.8
+414.3 2.7
+415.5 1.8
+418.1 15.0
+418.9 4.9
+421.7 13.1
+424.6 3.7
+425.4 1.2
+426.5 3.5
+427.5 1.7
+428.6 2.2
+429.3 2.5
+431.0 57.2
+433.4 7.5
+435.4 1.7
+438.4 20.0
+441.2 16.2
+442.2 3.4
+443.5 1.7
+444.3 1.5
+445.7 6.3
+447.0 2.2
+448.2 6.0
+451.1 23.7
+452.3 10.0
+453.4 2.2
+455.1 22.2
+456.5 11.0
+457.3 0.8
+459.7 52.0
+461.5 14.1
+462.3 17.8
+463.4 30.2
+464.5 5.6
+465.5 5.4
+468.0 8.5
+468.9 7.9
+470.0 7.5
+471.9 21.5
+473.2 14.1
+474.7 6.5
+475.8 8.3
+476.8 18.6
+477.6 36.9
+478.8 26.5
+479.8 12.3
+482.4 20.7
+483.3 25.3
+484.4 11.6
+486.2 108.5
+486.8 47.5
+487.5 17.3
+494.9 10.1
+496.7 8.5
+498.9 10.0
+509.0 5.5
+510.9 1.3
+515.2 9.6
+516.3 3.7
+520.1 1.1
+522.1 2.4
+523.4 6.5
+524.6 3.5
+527.7 11.6
+528.7 17.6
+529.4 1.1
+530.5 30.7
+541.2 10.5
+544.4 2.7
+548.2 3.5
+551.1 1.2
+553.7 1.7
+559.4 10.3
+561.3 3.0
+564.5 3.2
+569.2 6.4
+570.4 2.0
+571.6 5.6
+572.2 2.5
+573.2 2.7
+575.2 7.0
+579.1 19.2
+580.4 23.5
+581.5 1.6
+582.2 1.7
+583.6 5.6
+585.4 2.5
+588.0 13.8
+590.4 21.2
+591.0 2.5
+593.0 10.8
+596.2 1.3
+598.3 1.5
+600.2 14.5
+602.6 1.6
+604.2 2.5
+604.9 1.3
+605.5 3.7
+606.4 12.6
+612.3 1.2
+616.6 6.0
+618.1 7.0
+621.0 5.5
+625.2 1.1
+627.2 6.9
+633.5 12.1
+639.0 1.3
+642.7 1.5
+643.5 17.2
+644.7 2.5
+647.1 3.2
+652.4 4.6
+655.7 16.0
+657.4 7.8
+660.3 7.8
+661.4 51.0
+662.5 5.5
+663.3 0.8
+664.4 12.6
+665.5 4.5
+673.5 5.3
+675.4 2.2
+676.4 3.0
+679.1 5.5
+682.5 4.6
+683.7 4.4
+684.4 1.7
+686.1 1.1
+688.5 1.7
+691.6 2.9
+696.1 2.9
+697.4 4.0
+698.4 12.8
+701.0 12.3
+704.3 13.3
+709.3 4.1
+712.3 1.7
+713.6 4.1
+714.6 4.0
+715.2 66.9
+716.2 12.0
+718.7 1.8
+729.3 1.6
+743.2 3.2
+748.5 1.8
+750.6 6.3
+753.4 1.7
+754.5 23.7
+755.3 7.3
+760.4 4.6
+771.1 3.2
+772.1 9.8
+773.3 4.3
+774.4 2.5
+775.3 14.8
+780.5 3.5
+789.3 19.8
+790.3 6.8
+796.4 3.2
+800.5 2.0
+801.3 1.7
+802.5 2.2
+814.8 1.0
+816.8 5.3
+818.7 1.6
+819.7 0.8
+826.7 2.0
+828.6 1.5
+830.4 1.2
+832.4 2.5
+839.5 1.2
+841.0 3.9
+842.4 1.6
+843.3 22.7
+844.3 3.5
+851.6 6.5
+860.5 4.0
+861.5 3.7
+862.7 3.0
+900.4 1.7
+929.3 0.8
+975.4 2.5
+S	18	18	1032.40
+Z	3	3095.18
+293.1 9.5
+295.0 1.3
+296.5 1.6
+301.3 2.6
+308.0 6.4
+311.2 0.7
+312.0 2.9
+316.1 3.9
+325.2 69.4
+326.3 6.0
+329.4 1.9
+330.2 6.4
+340.0 3.9
+341.1 6.3
+342.2 19.3
+343.1 4.3
+344.1 1.1
+345.2 1.1
+346.4 1.1
+351.5 3.5
+354.5 9.1
+355.3 2.8
+355.9 1.1
+358.2 4.0
+359.1 7.3
+360.1 6.6
+364.6 4.4
+366.5 1.1
+368.3 6.0
+369.4 2.2
+370.6 7.6
+371.3 41.1
+372.3 10.7
+374.3 3.5
+375.1 1.4
+377.0 0.7
+379.3 6.0
+383.2 0.9
+385.2 21.6
+387.0 2.1
+389.3 39.1
+390.5 1.0
+395.0 2.3
+398.4 0.7
+399.3 3.0
+400.2 3.2
+402.3 1.5
+403.1 13.6
+405.0 0.9
+406.2 8.7
+407.9 1.9
+411.2 5.2
+412.2 4.9
+413.1 39.1
+414.0 7.1
+415.1 1.3
+416.3 2.0
+420.4 0.8
+422.1 6.5
+423.1 3.9
+424.0 2.7
+425.0 4.6
+426.5 1.2
+427.2 7.4
+429.3 3.8
+430.3 3.1
+431.3 15.1
+432.5 2.2
+435.5 2.4
+436.3 2.1
+439.0 9.0
+441.0 8.6
+442.3 3.5
+443.2 2.9
+445.3 0.8
+446.3 1.6
+447.4 2.1
+452.1 5.6
+453.2 19.9
+454.0 15.8
+455.4 1.8
+457.9 4.2
+459.7 4.1
+462.3 4.2
+463.8 1.6
+464.4 5.7
+465.1 4.0
+466.1 1.1
+468.3 6.4
+470.1 7.0
+470.8 1.7
+472.2 5.3
+473.2 10.0
+474.1 1.6
+474.8 1.2
+476.0 0.9
+476.9 5.1
+478.3 2.1
+480.4 1.0
+481.3 1.8
+482.2 7.2
+485.2 8.4
+486.4 10.1
+487.1 8.3
+488.2 4.1
+489.3 2.5
+490.3 4.3
+490.9 2.7
+492.2 2.0
+494.2 29.3
+495.2 1.6
+497.5 7.8
+498.3 2.9
+499.2 2.2
+500.6 3.2
+501.4 7.4
+502.2 12.8
+504.1 53.6
+505.3 6.7
+507.7 1.3
+509.1 7.1
+510.6 1.5
+511.2 2.5
+512.1 8.7
+514.3 2.3
+515.2 13.6
+516.1 0.5
+517.3 1.3
+519.5 2.4
+520.2 2.4
+521.3 1.3
+523.1 0.8
+524.0 39.1
+525.1 28.0
+526.0 3.6
+528.1 12.0
+528.9 2.7
+530.0 12.1
+531.2 10.1
+532.1 21.2
+532.8 2.5
+533.7 2.1
+534.5 12.0
+535.3 18.1
+536.7 1.0
+537.5 1.7
+541.2 5.6
+542.2 9.5
+543.2 4.2
+544.3 1.2
+545.3 2.3
+546.4 2.4
+547.5 1.8
+550.3 1.8
+551.2 9.1
+552.2 3.2
+553.4 0.6
+554.5 5.2
+555.2 2.9
+556.1 5.8
+558.1 1.4
+559.2 5.6
+560.2 1.8
+562.3 2.7
+563.0 1.0
+564.1 7.4
+565.1 1.4
+566.4 1.6
+567.3 4.3
+568.7 2.5
+572.0 284.6
+573.0 24.1
+573.8 4.3
+575.1 6.5
+576.3 0.7
+577.5 0.8
+579.1 3.3
+581.0 13.8
+583.3 19.4
+584.2 4.8
+585.1 19.2
+586.0 3.6
+587.3 2.8
+588.1 5.4
+589.2 2.7
+591.3 15.4
+592.8 13.7
+593.6 7.4
+595.3 3.6
+598.0 6.4
+599.1 14.3
+599.9 7.3
+601.3 47.7
+602.3 7.8
+603.3 9.0
+607.1 42.2
+607.9 24.3
+609.3 7.6
+610.9 8.6
+611.6 17.3
+614.2 5.8
+615.6 16.5
+616.5 5.0
+617.2 5.8
+618.2 122.9
+619.3 40.4
+620.4 15.8
+621.2 6.1
+621.9 0.8
+622.5 2.8
+623.7 10.5
+624.5 4.0
+625.4 9.9
+626.2 1.0
+627.1 9.2
+629.6 15.8
+631.4 8.3
+632.9 18.2
+634.3 2.6
+635.3 7.2
+636.2 6.8
+637.1 4.2
+638.3 25.7
+639.2 7.2
+640.3 10.3
+642.1 20.6
+643.0 8.9
+645.0 48.9
+646.0 4.7
+647.1 14.1
+648.4 8.7
+649.3 17.1
+650.3 29.3
+653.0 4.3
+654.2 1.6
+655.4 10.9
+657.5 40.0
+658.3 3.8
+659.0 9.7
+660.5 9.3
+661.3 5.1
+662.9 22.9
+663.7 8.4
+665.5 32.9
+666.3 61.9
+667.1 22.5
+668.4 5.9
+669.8 15.6
+670.9 25.1
+671.6 3.1
+672.7 17.5
+673.6 0.5
+674.2 7.2
+675.2 15.0
+676.0 8.4
+677.1 1.1
+678.1 6.8
+679.2 11.3
+680.5 14.7
+681.5 6.8
+682.1 2.7
+683.8 11.8
+685.3 6.0
+686.3 6.5
+687.3 12.9
+688.1 19.7
+689.2 431.2
+690.2 76.0
+691.4 32.0
+692.3 12.4
+693.3 12.4
+694.5 11.0
+696.0 13.4
+697.5 30.4
+698.3 24.4
+699.4 6.8
+700.2 9.3
+702.4 3.7
+703.2 18.3
+704.1 2.1
+705.3 13.3
+706.6 59.5
+707.3 20.0
+708.2 11.6
+709.5 2.9
+710.2 6.9
+711.2 7.5
+712.6 18.0
+713.3 1.6
+714.3 27.3
+715.7 16.5
+716.5 14.1
+717.6 4.5
+718.4 16.2
+719.2 8.0
+720.4 4.2
+721.3 7.7
+722.5 12.1
+723.2 31.1
+724.1 0.6
+724.9 5.3
+726.4 24.0
+727.3 11.4
+728.3 13.0
+729.4 18.3
+730.0 2.3
+731.2 4.5
+732.5 2.5
+733.8 26.1
+734.6 0.3
+735.7 2.3
+736.8 20.8
+737.4 41.2
+738.4 25.4
+739.3 12.5
+740.2 1.2
+741.3 0.7
+742.4 1.2
+743.4 1.4
+744.6 5.7
+745.9 11.7
+747.3 11.1
+748.5 2.1
+749.2 0.8
+750.2 0.8
+751.1 8.9
+753.1 52.4
+754.3 44.1
+755.3 21.9
+756.3 14.2
+756.9 28.1
+758.4 12.3
+759.9 24.2
+760.5 1.9
+762.1 108.5
+763.0 28.2
+764.1 29.6
+765.2 9.3
+766.5 9.4
+769.0 140.0
+770.1 75.9
+771.0 641.7
+772.4 15.2
+773.1 2.8
+774.1 36.7
+775.3 14.1
+778.0 2929.8
+778.9 351.2
+779.5 56.3
+780.4 16.6
+781.3 11.5
+782.3 6.5
+783.4 19.6
+785.0 10.7
+786.4 7.3
+787.5 45.4
+788.6 31.6
+790.7 12.6
+791.4 12.9
+792.1 66.1
+793.0 2.1
+794.0 14.9
+795.3 13.7
+796.2 4.5
+797.3 10.5
+798.4 7.3
+799.3 14.6
+800.0 9.5
+801.0 20.7
+802.3 118.4
+803.3 51.3
+804.3 7.8
+805.4 7.1
+806.3 20.3
+807.3 6.4
+808.4 2.5
+809.5 9.9
+810.3 83.1
+811.7 23.3
+812.6 20.5
+813.4 4.9
+814.0 2.4
+814.7 12.7
+816.0 16.3
+816.8 5.4
+818.1 16.9
+819.3 90.5
+820.2 82.9
+821.4 35.6
+822.3 43.5
+823.3 14.6
+824.3 28.7
+825.3 3.2
+826.0 15.2
+827.2 38.3
+828.1 98.0
+828.9 17.7
+830.1 12.9
+831.0 0.3
+831.7 8.8
+832.8 134.4
+833.5 174.8
+834.5 16.1
+835.6 5.5
+836.6 8.1
+837.4 17.0
+838.2 3.1
+839.2 28.4
+840.2 50.2
+841.6 527.5
+842.4 485.3
+843.4 32.0
+844.3 6.3
+845.3 24.9
+846.0 16.0
+846.8 7.8
+847.8 63.5
+848.9 37.9
+849.9 6.0
+851.1 22.8
+851.9 0.3
+852.5 5.1
+853.3 1.9
+854.1 9.9
+856.5 10.5
+857.8 27.4
+858.6 3.3
+860.2 21.8
+861.2 8.2
+862.0 4.0
+863.2 72.5
+864.2 29.3
+865.3 19.4
+866.2 26.0
+867.3 15.7
+868.0 15.2
+868.8 5.8
+869.6 10.0
+870.6 6.5
+871.7 6.2
+872.5 0.6
+874.6 13.2
+875.6 18.0
+877.0 49.4
+878.3 25.3
+879.4 30.0
+880.9 88.1
+881.8 33.0
+883.5 71.0
+884.4 51.4
+885.5 17.9
+887.1 6.6
+887.8 4.7
+888.4 16.9
+889.4 1.0
+890.7 10.5
+891.3 16.6
+892.6 19.3
+893.4 21.5
+894.3 51.3
+895.4 31.3
+897.3 6.5
+898.3 15.2
+899.2 78.4
+900.2 4.3
+901.0 14.3
+902.5 26.9
+903.6 28.7
+904.2 7.6
+905.0 2.1
+905.9 1.2
+907.4 18.0
+909.1 17.5
+910.3 16.2
+911.1 44.4
+912.2 126.0
+913.3 31.3
+914.6 36.7
+915.6 9.8
+916.4 20.6
+917.3 118.0
+918.4 52.8
+919.9 20.6
+920.6 12.1
+921.6 25.6
+922.8 28.5
+924.0 47.5
+925.6 23.1
+926.3 40.3
+927.0 34.2
+927.8 4.3
+929.3 7.8
+931.0 123.3
+932.0 54.4
+933.2 27.8
+934.6 50.3
+935.7 59.9
+936.5 13.8
+937.3 13.1
+938.2 9.0
+940.0 2960.4
+941.0 830.9
+942.8 60.1
+944.4 35.8
+945.4 111.7
+946.5 28.3
+949.6 31.8
+950.9 30.1
+951.5 15.9
+952.2 44.1
+954.0 230.6
+954.7 120.8
+955.4 43.4
+956.3 46.0
+957.2 21.5
+958.4 41.5
+959.2 49.6
+960.0 25.9
+960.8 36.5
+961.7 27.4
+962.7 25.0
+963.4 8.6
+964.5 11.4
+965.7 13.1
+966.7 10.0
+968.0 206.1
+969.0 31.4
+970.2 28.1
+971.0 8.6
+971.7 8.1
+972.7 6.9
+974.0 64.2
+975.0 12.3
+977.0 1056.7
+977.9 313.5
+979.2 216.3
+980.3 0.4
+981.4 11.8
+982.5 24.5
+983.5 17.4
+984.4 25.9
+985.3 14.8
+986.3 14.6
+987.3 21.5
+988.5 20.3
+989.6 18.8
+991.0 41.7
+991.8 36.8
+992.7 18.2
+993.8 25.6
+995.5 176.3
+996.4 488.0
+997.7 92.3
+998.9 83.0
+999.9 35.7
+1000.7 96.0
+1001.4 35.5
+1002.1 53.1
+1003.5 12.6
+1004.8 233.1
+1005.8 261.2
+1007.0 22.1
+1007.9 63.8
+1009.5 40.8
+1010.5 31.0
+1011.5 122.8
+1012.9 430.7
+1014.3 280.2
+1015.6 61.5
+1016.7 31.5
+1017.6 30.1
+1018.5 31.5
+1019.5 88.7
+1020.3 111.8
+1021.6 179.2
+1022.4 93.9
+1023.0 107.8
+1024.0 14.3
+1025.8 3.3
+1029.6 3.2
+1034.0 10.2
+1039.8 1.8
+1042.4 4.4
+1043.2 7.1
+1044.6 8.6
+1045.4 15.9
+1046.0 3.5
+1046.8 3.2
+1048.0 2.7
+1049.1 5.6
+1049.9 14.3
+1051.3 1.6
+1052.1 4.6
+1054.6 8.9
+1057.5 24.3
+1058.5 1.0
+1059.4 5.0
+1060.3 1.4
+1061.0 2.3
+1062.4 10.9
+1063.1 5.2
+1064.2 6.1
+1066.5 2.6
+1067.7 24.4
+1068.8 13.2
+1070.0 35.6
+1071.4 11.8
+1072.1 15.1
+1073.5 2.5
+1075.4 6.7
+1077.3 35.9
+1078.4 18.9
+1080.9 9.9
+1081.6 5.9
+1082.3 7.0
+1083.2 12.9
+1084.9 12.2
+1086.0 14.4
+1087.3 41.7
+1088.1 20.6
+1089.4 114.1
+1090.3 40.5
+1091.7 0.9
+1094.7 5.1
+1095.9 3.8
+1097.3 3.4
+1098.0 4.6
+1099.4 14.4
+1100.2 10.3
+1101.4 7.0
+1103.4 8.4
+1104.3 24.3
+1105.9 10.2
+1107.1 2.9
+1108.7 66.3
+1109.4 17.9
+1110.5 12.9
+1111.3 7.8
+1112.1 15.6
+1113.5 6.2
+1114.3 1.7
+1115.6 2.7
+1116.5 6.4
+1117.3 2.1
+1118.7 7.3
+1121.5 4.3
+1122.6 39.2
+1123.5 16.0
+1124.6 6.7
+1125.6 23.9
+1126.6 4.3
+1127.4 5.9
+1128.3 4.1
+1129.4 5.0
+1130.1 9.8
+1130.9 12.5
+1132.3 29.9
+1133.4 14.7
+1134.4 4.3
+1136.4 5.2
+1137.8 21.1
+1139.2 24.3
+1140.2 19.6
+1141.1 34.3
+1142.4 771.0
+1143.4 300.8
+1144.4 44.7
+1145.4 13.9
+1146.7 26.2
+1147.6 47.3
+1148.3 4.6
+1149.4 25.9
+1150.5 4.1
+1152.4 3.0
+1153.0 2.9
+1154.4 16.4
+1155.2 6.4
+1156.9 11.8
+1158.5 19.5
+1159.4 0.4
+1160.3 6.2
+1161.2 10.1
+1163.2 3.8
+1164.4 10.3
+1165.8 44.7
+1166.4 88.3
+1167.4 11.6
+1168.1 3.2
+1169.3 20.1
+1170.4 13.8
+1172.5 9.6
+1173.4 6.5
+1175.8 26.5
+1176.8 4.7
+1178.5 4.1
+1179.6 10.7
+1180.3 17.9
+1181.4 24.8
+1182.4 10.1
+1183.2 16.5
+1184.0 56.6
+1185.3 139.0
+1186.3 80.5
+1187.2 46.9
+1188.3 22.0
+1189.3 33.6
+1190.5 16.0
+1191.2 1.5
+1192.2 6.1
+1193.1 3.0
+1194.3 50.3
+1194.9 99.3
+1196.1 9.8
+1196.8 9.9
+1198.2 311.6
+1199.3 194.8
+1200.4 39.6
+1201.2 6.3
+1202.2 5.9
+1202.9 20.3
+1203.6 622.5
+1204.6 210.9
+1205.9 28.4
+1206.8 4.7
+1207.5 1.3
+1208.7 9.2
+1209.8 25.5
+1210.9 6.6
+1213.3 243.9
+1214.4 75.6
+1216.2 1368.4
+1217.2 623.5
+1218.2 159.5
+1219.2 28.7
+1219.9 4.6
+1220.5 1.0
+1221.5 5.3
+1223.3 62.4
+1224.3 32.0
+1225.5 40.5
+1226.2 22.0
+1227.6 36.6
+1228.3 9.0
+1229.9 40.9
+1230.9 36.3
+1231.8 1.9
+1233.4 14.4
+1234.1 5.1
+1237.2 5.1
+1239.0 236.3
+1240.0 147.1
+1241.4 65.2
+1242.2 37.3
+1243.2 9.6
+1244.7 10.9
+1245.8 7.9
+1247.3 123.1
+1248.1 132.7
+1248.9 12.3
+1249.5 4.2
+1251.8 4.0
+1253.4 6.8
+1256.4 6.8
+1258.5 7.9
+1259.7 1.9
+1260.8 9.7
+1262.1 27.6
+1263.3 25.5
+1264.6 9.4
+1265.4 24.5
+1266.7 5.5
+1267.5 2.7
+1268.2 13.1
+1269.6 12.5
+1271.5 2.4
+1272.1 19.5
+1272.9 15.7
+1273.9 18.6
+1274.8 29.5
+1276.0 9.6
+1277.1 2.1
+1278.5 1.7
+1279.3 5.8
+1280.5 6.8
+1281.9 22.9
+1283.0 100.2
+1283.6 162.9
+1284.5 4.0
+1285.2 2.5
+1286.6 13.5
+1287.6 56.7
+1288.3 17.2
+1289.4 10.7
+1290.3 3.2
+1291.7 5.0
+1293.5 4.4
+1294.4 19.1
+1296.0 90.6
+1296.9 74.9
+1298.7 14.1
+1299.4 5.5
+1300.4 17.8
+1301.6 8.3
+1302.5 12.5
+1305.6 2.6
+1306.8 10.5
+1307.8 13.6
+1310.2 17.8
+1311.7 7.7
+1313.0 8.2
+1313.6 10.2
+1314.4 1.2
+1315.5 12.7
+1316.6 16.8
+1317.8 6.0
+1318.6 23.5
+1319.4 33.4
+1321.4 1.9
+1322.3 5.6
+1323.0 8.2
+1324.2 4.9
+1327.8 44.7
+1328.7 65.1
+1329.5 39.7
+1330.5 18.6
+1331.7 1.0
+1333.2 0.8
+1334.4 8.4
+1335.1 3.9
+1336.2 6.8
+1337.4 11.1
+1338.3 9.7
+1340.1 8.7
+1341.8 0.6
+1343.2 0.8
+1344.5 3.2
+1345.6 25.6
+1346.4 5.5
+1347.3 6.0
+1348.6 3.4
+1350.4 1.0
+1352.5 8.8
+1353.6 71.7
+1354.4 56.3
+1355.4 2.2
+1356.6 6.2
+1357.8 11.2
+1358.5 21.5
+1360.8 30.0
+1362.3 107.9
+1363.2 57.6
+1364.2 7.6
+1366.4 1.9
+1367.2 1.9
+1368.2 5.1
+1369.9 7.1
+1370.8 2.6
+1372.1 2.0
+1373.8 1.6
+1375.2 12.9
+1376.4 24.4
+1377.6 19.8
+1378.2 9.6
+1379.4 12.9
+1380.6 16.5
+1385.5 2.6
+1386.7 2.7
+1387.5 10.0
+1389.0 3.1
+1389.6 2.2
+1390.8 11.7
+1391.5 10.3
+1392.6 9.2
+1393.4 6.1
+1394.3 81.6
+1395.4 59.8
+1396.4 26.3
+1397.4 6.7
+1398.6 8.5
+1400.0 8.3
+1401.1 7.4
+1402.4 17.1
+1403.4 4.4
+1404.2 0.8
+1405.3 12.5
+1406.4 6.9
+1407.4 8.6
+1408.7 22.2
+1409.5 11.3
+1412.3 421.3
+1413.4 272.1
+1414.4 64.0
+1415.7 13.7
+1417.3 15.1
+1418.1 72.5
+1419.1 51.5
+1420.2 4.6
+1421.6 0.7
+1423.6 8.8
+1424.7 5.0
+1426.3 43.1
+1427.0 51.9
+1427.7 16.8
+1428.6 4.5
+1429.5 4.0
+1430.3 1.8
+1432.0 8.3
+1433.7 13.2
+1434.9 2.0
+1436.0 9.4
+1437.4 7.8
+1438.2 3.7
+1439.1 6.6
+1441.1 9.9
+1442.0 2.9
+1443.0 12.3
+1444.1 11.5
+1445.1 3.6
+1445.8 0.6
+1446.5 0.9
+1447.5 6.4
+1449.0 9.5
+1451.5 1.7
+1452.1 4.7
+1456.2 2.1
+1457.5 22.2
+1458.3 9.4
+1459.1 0.6
+1460.6 7.2
+1461.9 9.6
+1464.4 9.8
+1465.3 14.2
+1465.9 62.1
+1467.0 32.4
+1468.1 5.3
+1469.3 0.7
+1471.5 3.0
+1474.4 72.0
+1475.1 223.1
+1476.1 29.9
+1478.4 0.7
+1481.6 19.8
+1482.5 3.7
+1483.4 1.3
+1485.1 16.9
+1486.0 4.6
+1487.9 1.8
+1489.0 7.3
+1490.5 11.9
+1491.4 1.4
+1492.6 7.4
+1493.7 10.9
+1494.7 6.3
+1495.3 4.2
+1498.4 1.5
+1499.2 1.6
+1504.3 14.6
+1505.5 13.7
+1506.3 7.5
+1507.3 0.9
+1508.1 1.1
+1508.7 2.0
+1510.9 12.8
+1512.8 8.7
+1514.5 1.9
+1515.2 1.8
+1516.2 1.6
+1517.3 2.7
+1518.2 20.7
+1519.1 65.3
+1520.1 19.7
+1521.1 17.7
+1522.4 283.9
+1523.4 140.1
+1524.4 73.5
+1525.6 4.6
+1526.7 87.1
+1527.6 317.1
+1528.5 124.5
+1529.6 54.8
+1530.6 15.0
+1531.6 2.9
+1532.2 3.1
+1536.5 28.2
+1537.4 47.6
+1538.6 2.6
+1540.4 910.7
+1541.4 620.5
+1542.4 198.7
+1543.4 37.6
+1544.4 1.5
+1545.5 0.5
+1547.8 0.9
+1554.4 677.2
+1555.5 403.9
+1556.5 123.8
+1557.4 10.5
+1558.6 3.4
+1561.1 0.7
+1564.3 6.4
+1565.4 4.0
+1567.4 6.7
+1570.6 3.5
+1571.6 6.5
+1572.6 2.3
+1573.9 3.6
+1574.6 7.6
+1576.4 5.8
+1577.5 4.3
+1578.7 3.4
+1579.6 6.2
+1581.5 16.4
+1584.8 6.1
+1587.4 4.2
+1588.5 22.6
+1591.5 5.6
+1595.6 3.9
+1596.5 2.0
+1597.5 3.0
+1598.2 3.3
+1599.7 6.9
+1600.8 1.6
+1602.4 0.7
+1603.5 9.3
+1609.4 7.0
+1610.5 8.4
+1612.3 2.3
+1613.6 2.9
+1614.6 8.9
+1615.8 1.3
+1619.1 10.6
+1620.5 4.2
+1621.3 1.6
+1624.7 7.4
+1625.8 2.2
+1627.9 3.3
+1628.5 9.5
+1629.5 4.5
+1633.1 3.0
+1634.4 3.1
+1635.3 12.3
+1638.4 4.1
+1640.8 1.8
+1641.7 4.0
+1643.3 1.6
+1650.4 3.7
+1654.4 5.8
+1656.6 15.7
+1657.6 12.2
+1658.3 5.4
+1661.1 10.1
+1662.2 5.2
+1663.1 8.5
+1665.4 27.5
+1666.1 7.3
+1666.8 16.0
+1667.6 10.6
+1670.6 3.1
+1672.5 8.8
+1673.7 12.8
+1676.5 3.5
+1677.8 1.5
+1680.8 2.8
+1682.4 27.7
+1683.6 19.3
+1685.2 2.9
+1686.8 13.2
+1687.5 4.5
+1689.4 20.5
+1690.5 15.1
+1691.4 9.4
+1692.4 6.0
+1694.4 2.9
+1696.4 3.7
+1699.9 1.4
+1705.5 8.9
+1710.2 4.8
+1712.8 3.6
+1713.4 0.7
+1714.7 2.8
+1716.5 7.1
+1718.1 10.3
+1722.0 3.9
+1722.7 6.7
+1723.6 0.7
+1725.0 2.1
+1730.2 4.5
+1732.4 1.3
+1733.5 8.4
+1734.7 2.1
+1736.2 1.6
+1737.6 8.2
+1739.7 3.3
+1741.1 12.7
+1742.4 2.0
+1748.1 4.7
+1749.6 21.2
+1750.5 1.1
+1751.3 3.5
+1754.1 4.1
+1756.9 4.9
+1757.7 6.7
+1764.5 2.4
+1766.4 5.3
+1767.3 1.0
+1770.4 26.5
+1771.3 37.7
+1772.3 16.9
+1773.0 12.9
+1773.7 4.5
+1775.0 7.1
+1782.3 2.7
+1788.3 51.5
+1789.0 9.0
+1789.8 34.9
+1790.9 10.5
+1791.8 7.1
+1793.9 4.9
+1796.3 4.4
+1800.5 1.0
+1805.9 0.8
+1807.5 5.0
+1810.7 1.0
+1815.2 3.8
+1823.5 1.6
+1834.4 3.1
+1835.4 5.5
+1839.5 3.6
+1840.5 1.2
+1847.8 1.0
+1851.6 3.3
+1852.5 3.1
+1856.5 1.1
+1863.7 5.1
+1864.8 4.0
+1866.0 1.1
+1868.7 38.0
+1870.0 35.5
+1871.2 15.4
+1871.8 8.3
+1878.4 5.8
+1879.7 1.7
+1881.5 14.5
+1882.5 18.4
+1883.5 5.7
+1884.3 3.0
+1885.0 5.8
+1885.8 3.9
+1889.6 4.5
+1892.3 5.1
+1894.7 4.7
+1898.4 5.7
+1906.1 2.1
+1906.8 7.8
+1907.7 4.3
+1918.5 8.0
+1919.7 0.9
+1927.4 9.3
+1934.2 74.7
+1935.1 11.4
+1935.8 35.7
+1936.5 3.2
+1937.2 6.3
+1937.9 9.9
+1952.6 52.2
+1953.7 56.6
+1954.7 21.8
+1977.6 7.6
+1984.7 2.9
+1986.9 1.2
+1989.8 0.4
+1993.1 2.4
+S	19	19	604.29
+I	ID	78
+I	RTime	3.6262
+Z	2	1207.57
+Z	3	1810.85
+182.8 2.5
+186.8 1.5
+188.0 1.2
+192.2 1.7
+194.9 0.8
+199.8 3.0
+204.1 2.7
+210.1 4.9
+212.0 1.5
+215.4 1.3
+219.3 1.7
+223.8 1.7
+228.1 6.6
+229.6 3.7
+234.4 1.7
+240.1 5.6
+242.1 1.3
+248.1 4.1
+254.4 6.0
+255.1 4.0
+258.2 7.8
+261.9 3.7
+266.2 1.8
+272.3 17.5
+273.4 2.5
+276.4 1.5
+280.1 2.2
+284.7 5.0
+285.4 3.9
+286.1 2.9
+287.2 3.0
+290.2 19.8
+290.9 2.2
+296.2 1.3
+299.1 4.0
+301.2 1.2
+306.6 4.0
+311.2 2.7
+312.0 1.5
+314.8 6.5
+317.2 4.6
+318.5 2.4
+321.4 3.0
+324.2 7.0
+325.3 5.0
+329.0 8.8
+335.2 0.8
+341.2 2.9
+342.1 35.7
+343.2 15.1
+354.3 4.0
+355.3 1.2
+356.1 1.8
+364.4 1.0
+366.0 3.5
+369.2 8.0
+372.3 2.5
+373.3 3.0
+374.4 1.8
+383.5 3.0
+384.2 4.1
+387.0 9.3
+390.6 1.3
+392.3 8.1
+395.1 1.8
+396.4 3.5
+397.1 1.2
+399.3 4.3
+401.4 9.6
+402.3 3.0
+404.2 1.3
+412.2 1.2
+413.1 1.6
+414.2 23.7
+415.4 5.4
+419.1 3.5
+424.0 3.5
+425.4 1.7
+430.2 5.4
+432.5 1.2
+434.3 7.4
+438.2 3.4
+440.2 10.1
+441.2 5.9
+442.2 6.0
+444.2 4.0
+447.2 2.0
+455.1 5.9
+457.5 3.7
+458.3 13.0
+462.3 13.3
+463.9 1.0
+465.8 2.5
+469.4 1.7
+471.2 31.5
+472.2 12.6
+472.9 5.8
+476.5 16.8
+482.0 5.8
+488.3 3.5
+489.5 2.2
+490.4 11.8
+493.3 1.7
+494.2 8.5
+495.0 4.1
+504.2 3.2
+505.0 7.8
+511.4 2.2
+512.2 4.9
+514.1 5.5
+515.2 5.4
+516.0 4.4
+520.1 4.5
+522.3 2.4
+523.2 3.9
+524.2 3.5
+525.8 3.7
+527.8 1.7
+530.0 2.5
+532.3 4.5
+534.5 7.0
+536.5 2.5
+538.1 2.0
+538.8 6.6
+541.0 4.4
+542.1 2.7
+543.2 4.5
+544.5 9.3
+547.5 164.0
+549.9 20.5
+551.7 16.6
+552.5 1.8
+553.5 3.7
+558.3 8.6
+560.2 11.5
+560.9 4.1
+562.5 9.6
+564.0 3.9
+564.9 4.8
+566.2 8.5
+567.9 6.0
+569.2 20.0
+570.1 3.2
+572.2 4.6
+573.8 8.3
+574.8 2.7
+576.7 9.3
+579.7 2.9
+580.9 10.6
+584.8 4.6
+585.7 22.3
+586.5 95.5
+587.2 58.5
+588.4 5.9
+589.2 11.0
+591.9 4.0
+595.5 31.8
+623.3 1.6
+624.3 4.0
+653.5 3.2
+696.4 5.3
+698.8 6.0
+701.4 1.7
+702.2 4.4
+719.3 18.7
+720.2 8.1
+721.3 10.1
+735.9 6.0
+737.4 20.1
+738.2 5.0
+739.6 3.5
+743.3 1.7
+749.1 1.3
+753.5 5.8
+754.7 1.2
+755.6 2.7
+759.4 2.9
+776.4 10.0
+777.3 7.4
+778.1 4.5
+794.1 7.0
+794.8 5.0
+832.8 3.5
+834.2 1.6
+849.6 7.6
+866.4 103.0
+867.5 42.7
+873.4 2.9
+874.3 10.8
+875.5 1.2
+882.6 1.7
+891.4 2.0
+892.7 4.9
+906.5 1.2
+923.5 18.0
+924.4 13.1
+950.2 8.3
+967.7 1.7
+980.7 1.7
+981.4 2.0
+990.3 1.5
+1004.5 1.7
+1008.1 9.0
+1008.8 2.0
+1023.5 4.1
+1038.2 1.0
+1044.5 1.7
+1060.1 4.5
+1072.5 2.0
+1089.6 3.0
+1093.2 3.2
+1186.1 2.2
+S	20	20	450.90
+I	ID	73
+I	RTime	3.3791
+Z	2	900.79
+155.1 3.7
+163.0 1.0
+167.0 5.3
+197.0 2.9
+201.0 1.8
+212.1 1.0
+231.0 2.2
+241.3 1.7
+243.3 2.2
+257.1 2.2
+266.1 0.8
+295.4 1.3
+307.1 0.8
+308.2 1.2
+309.2 1.5
+318.8 1.6
+323.0 120.9
+326.1 2.2
+326.9 2.5
+330.1 2.4
+332.2 2.0
+336.1 2.7
+339.1 0.8
+341.3 0.6
+342.2 6.4
+343.8 5.1
+345.6 4.9
+347.0 1.6
+355.1 3.7
+358.3 7.0
+360.6 8.3
+363.6 3.9
+366.2 1.7
+375.0 1.6
+376.9 1.3
+378.8 1.0
+383.9 4.1
+386.3 6.5
+387.2 1.8
+388.4 7.5
+391.1 3.9
+392.3 3.2
+396.5 8.8
+397.3 8.5
+398.4 41.4
+400.9 5.6
+405.8 5.0
+406.4 9.3
+407.2 1.3
+408.9 2.7
+412.8 5.3
+414.3 10.1
+415.1 20.7
+423.3 1.2
+424.9 9.8
+425.8 10.5
+427.7 6.4
+428.4 4.5
+431.1 8.3
+432.6 24.7
+433.9 71.0
+435.2 27.0
+439.1 9.1
+441.5 22.1
+442.3 41.0
+451.0 3.0
+514.3 1.7
+515.0 6.0
+523.1 5.4
+549.3 6.3
+553.7 9.0
+559.3 4.9
+560.9 2.0
+562.4 3.4
+567.7 4.5
+570.4 2.0
+574.8 1.7
+577.8 18.7
+588.9 4.6
+597.0 9.0
+613.6 1.5
+627.5 1.2
+644.5 2.0
+645.2 2.2
+651.3 2.7
+685.6 2.7
+698.5 3.0
+702.5 1.6
+705.3 2.9
+714.6 2.4
+722.0 1.7
+732.3 1.2
+739.5 2.5
+740.7 4.0
+773.4 4.3
+813.4 4.0
+S	21	21	805.00
+I	ID	192
+I	RTime	9.4760
+Z	1	805.00
+258.3 2.0
+273.0 1.3
+283.4 2.5
+284.2 1.6
+289.2 1.7
+309.3 3.9
+320.4 1.3
+325.6 2.5
+332.2 1.6
+345.9 2.9
+353.5 2.4
+357.3 2.0
+363.3 2.0
+368.2 1.3
+381.3 6.0
+384.1 4.0
+388.5 3.5
+395.4 1.2
+396.7 2.0
+397.5 1.2
+398.4 1.2
+402.5 1.8
+403.5 2.2
+412.8 2.2
+423.6 2.5
+424.3 1.2
+425.5 10.3
+427.3 9.0
+429.8 1.8
+434.7 1.2
+446.3 2.4
+470.5 2.9
+471.4 3.5
+480.5 5.0
+488.4 3.5
+491.7 2.0
+498.2 1.2
+512.4 5.5
+515.9 2.7
+518.3 2.5
+530.5 1.3
+533.2 1.2
+535.3 7.0
+536.5 5.4
+537.4 9.8
+539.5 7.0
+546.3 2.4
+547.5 6.4
+561.2 1.8
+576.4 2.0
+581.5 1.3
+588.2 3.2
+589.2 5.0
+590.2 26.2
+590.9 1.2
+591.5 5.0
+598.7 1.2
+611.1 3.5
+617.3 2.5
+627.3 6.3
+640.4 0.8
+647.4 5.5
+658.6 2.9
+661.3 2.4
+675.5 4.9
+676.3 2.7
+677.5 1.6
+679.4 1.3
+683.4 4.9
+688.6 3.0
+690.4 2.0
+699.4 2.5
+726.3 2.7
+744.7 2.9
+748.8 3.2
+750.6 3.4
+752.5 5.0
+770.5 8.3
+774.4 3.2
+785.6 1.3
+786.5 3.5
+787.5 23.1
+788.5 3.7
+795.5 2.7
+S	22	22	1489.85
+Z	1	1489.85
+416.2 15.0
+423.9 3.7
+425.3 5.5
+427.3 1.1
+429.3 15.6
+431.2 4.7
+439.3 1.6
+441.0 13.3
+443.3 2.3
+444.3 14.8
+449.2 2.3
+450.2 7.9
+452.4 29.2
+454.4 2.8
+455.2 3.3
+456.1 8.1
+458.2 4.5
+462.6 3.1
+464.3 5.1
+466.3 0.9
+467.3 1.3
+468.0 2.5
+469.2 3.5
+470.1 3.2
+471.4 15.4
+473.3 1.8
+474.2 8.2
+475.4 4.5
+476.3 4.8
+477.3 2.9
+481.1 3.2
+482.3 5.3
+484.6 6.7
+485.3 1.7
+486.4 4.4
+487.3 26.7
+488.3 1.4
+490.5 6.6
+491.3 4.8
+492.3 9.5
+493.0 9.1
+495.6 3.3
+496.4 5.1
+498.3 6.7
+501.3 1.1
+504.5 20.8
+506.1 10.0
+509.1 29.4
+511.4 8.0
+512.3 2.4
+513.6 10.3
+517.3 1.4
+519.4 7.2
+523.1 6.9
+524.6 2.8
+526.6 35.6
+527.4 50.1
+528.4 10.8
+530.1 6.7
+531.2 2.1
+534.2 2.6
+535.4 7.2
+536.3 33.7
+537.3 5.3
+538.3 4.1
+539.6 4.6
+540.2 6.9
+541.1 19.0
+542.4 15.0
+543.4 5.2
+544.4 59.8
+545.3 1.6
+546.3 1.5
+547.1 5.3
+548.4 1.4
+552.4 26.7
+553.4 5.8
+554.4 32.0
+555.2 7.0
+556.2 6.9
+557.3 25.5
+558.2 6.1
+560.0 1.7
+561.2 2.0
+562.7 6.1
+563.5 2.7
+568.1 12.0
+569.6 19.6
+570.3 35.5
+571.2 21.1
+572.3 43.4
+573.2 12.9
+574.1 5.1
+577.3 1.4
+581.3 6.5
+582.3 18.3
+583.3 7.3
+584.2 7.5
+585.3 13.3
+586.4 7.9
+587.1 34.6
+588.2 13.4
+590.3 2.9
+596.6 11.0
+597.3 2.1
+598.1 3.5
+599.2 11.1
+600.2 12.5
+602.8 9.7
+603.5 12.4
+604.7 8.4
+605.5 7.5
+606.7 3.6
+607.6 1.5
+608.4 8.0
+612.5 14.1
+613.3 3.9
+614.5 12.4
+615.5 1.5
+617.1 15.7
+619.7 3.2
+622.3 26.8
+623.5 8.3
+624.6 16.1
+626.3 11.9
+627.1 1.9
+628.5 6.2
+631.2 1.9
+633.2 12.3
+634.4 14.4
+637.4 5.7
+638.4 4.0
+640.3 42.8
+641.2 29.2
+642.2 19.9
+643.2 6.1
+644.4 2.5
+646.1 1.8
+647.2 3.1
+650.3 12.6
+651.4 19.4
+652.3 33.9
+653.4 14.1
+654.5 6.0
+655.2 14.1
+656.4 10.4
+657.5 191.8
+658.9 8.5
+660.5 8.2
+664.2 1.8
+665.2 7.3
+666.8 3.7
+667.5 15.0
+668.6 28.5
+669.3 119.4
+670.4 13.8
+671.3 22.3
+673.3 3.3
+674.2 16.7
+676.2 14.8
+679.2 2.4
+680.6 6.4
+681.5 9.0
+682.8 21.3
+683.5 14.2
+684.4 1.2
+685.4 33.1
+686.4 128.7
+687.3 44.6
+689.5 3.3
+692.4 1.0
+695.6 3.9
+696.5 24.2
+697.4 11.6
+698.3 9.6
+699.4 34.6
+700.3 27.4
+701.5 18.0
+702.7 12.3
+703.6 8.8
+704.4 45.4
+705.3 2.3
+706.1 2.0
+708.4 6.1
+709.5 9.2
+710.4 13.5
+711.3 12.1
+713.4 71.1
+714.6 22.7
+715.7 6.4
+716.5 10.9
+717.5 7.9
+718.7 10.6
+719.5 16.2
+720.2 2.2
+722.6 8.7
+723.4 9.7
+724.3 3.4
+725.2 5.0
+726.2 7.0
+727.3 4.2
+728.4 7.3
+729.3 3.7
+730.6 5.1
+731.2 14.0
+732.5 2.7
+734.2 8.6
+735.3 10.2
+736.0 4.0
+737.1 6.6
+737.8 1.8
+738.5 2.5
+739.3 12.3
+740.3 15.1
+742.6 11.6
+743.5 30.3
+744.4 1.8
+745.4 6.1
+746.5 2.2
+749.5 8.4
+750.3 0.9
+751.5 8.5
+752.7 17.7
+754.4 51.9
+755.3 2.8
+756.5 6.3
+757.2 3.5
+760.0 5.6
+761.2 8.4
+763.4 10.1
+764.3 18.2
+766.5 5.5
+767.4 6.5
+768.5 41.7
+769.3 12.1
+770.3 27.5
+771.4 5.1
+772.5 10.4
+773.4 8.3
+775.7 3.6
+777.0 1.5
+779.2 15.9
+780.7 12.8
+781.6 38.3
+782.5 23.2
+783.4 8.3
+785.0 16.0
+785.7 10.3
+786.5 166.3
+787.5 8.7
+788.2 16.3
+789.6 3.0
+790.5 2.9
+794.3 5.0
+795.7 7.8
+796.3 10.5
+797.3 28.9
+798.3 85.0
+799.4 30.7
+800.3 15.8
+801.2 2.2
+803.5 5.4
+804.7 8.3
+805.5 8.6
+806.8 5.4
+807.7 3.3
+808.5 3.4
+809.4 3.8
+810.5 19.1
+811.5 15.5
+812.5 27.6
+813.5 6.9
+814.3 36.5
+815.5 194.8
+816.5 118.4
+821.3 3.5
+822.6 6.4
+823.3 4.8
+824.2 7.3
+825.6 3.5
+826.6 8.8
+827.3 27.0
+828.4 16.9
+829.3 18.7
+830.4 14.3
+831.3 2.3
+832.3 3.3
+833.4 71.3
+837.2 17.9
+838.2 8.1
+839.4 17.4
+840.3 8.8
+841.7 2.3
+842.6 11.1
+843.6 12.8
+844.4 11.3
+846.8 7.5
+847.4 4.3
+849.7 3.7
+850.7 6.0
+851.7 7.6
+854.7 4.4
+855.7 9.0
+856.5 21.4
+857.5 32.9
+858.4 1.4
+859.5 2.1
+860.5 24.0
+861.6 13.1
+864.6 1.1
+865.4 10.4
+866.4 21.4
+867.7 10.3
+868.8 11.0
+870.0 4.8
+871.5 12.7
+873.5 19.3
+876.4 7.3
+878.2 7.7
+879.7 3.8
+880.4 3.5
+882.4 2.1
+883.6 45.0
+884.4 14.5
+885.5 61.9
+890.5 5.1
+891.3 3.3
+892.8 11.1
+893.5 18.6
+894.6 14.7
+895.5 8.8
+896.3 33.2
+897.7 6.1
+898.6 7.7
+900.4 1.1
+901.4 70.7
+902.6 10.7
+903.5 2.8
+906.7 5.4
+909.3 9.1
+910.4 49.0
+911.5 122.2
+912.6 8.7
+913.5 8.3
+914.3 7.9
+915.6 11.8
+916.3 0.9
+918.3 2.1
+920.6 1.8
+922.3 7.7
+925.5 13.3
+926.3 14.9
+927.8 38.8
+928.5 177.7
+929.4 160.9
+930.0 0.9
+931.5 6.3
+936.7 7.3
+937.5 24.0
+938.5 15.4
+939.6 7.4
+940.6 4.0
+942.5 14.2
+943.5 16.5
+944.6 4.5
+945.8 7.4
+946.5 106.3
+951.0 15.4
+951.8 2.1
+953.3 4.7
+954.7 23.0
+955.4 7.4
+956.4 13.6
+957.5 18.1
+958.3 8.0
+960.5 13.3
+961.6 7.8
+963.1 8.5
+964.4 3.3
+966.6 3.7
+967.3 14.1
+968.4 9.8
+969.6 10.0
+970.4 5.3
+971.2 8.4
+972.5 10.7
+973.5 35.5
+975.5 4.4
+979.6 4.7
+980.4 2.5
+981.3 11.4
+982.0 4.2
+982.7 5.2
+983.7 13.0
+984.7 6.6
+986.0 32.7
+986.6 147.5
+988.7 2.3
+989.4 10.8
+991.2 8.0
+993.6 4.5
+994.5 7.0
+995.6 2.8
+997.3 1.8
+998.3 5.0
+999.3 1.9
+1000.1 1.7
+1001.7 5.7
+1003.4 26.9
+1006.2 4.6
+1008.6 12.7
+1009.5 20.3
+1011.6 2.8
+1012.4 7.1
+1013.5 3.6
+1014.6 13.2
+1021.1 23.9
+1022.0 24.3
+1023.4 6.7
+1025.1 9.1
+1026.6 10.9
+1027.7 24.4
+1028.5 11.2
+1029.4 13.1
+1030.4 16.6
+1031.3 7.6
+1033.6 1.6
+1037.4 3.1
+1038.5 32.0
+1039.5 58.2
+1040.3 2.9
+1041.2 8.7
+1042.1 13.1
+1042.9 2.7
+1043.5 4.9
+1044.9 16.2
+1047.0 6.6
+1048.0 14.1
+1048.6 1.4
+1051.5 1.8
+1056.0 26.6
+1056.6 68.5
+1057.6 53.7
+1058.8 6.7
+1059.5 10.2
+1060.5 19.9
+1064.6 3.2
+1065.9 23.4
+1066.5 12.0
+1067.4 8.0
+1069.6 3.2
+1071.3 11.1
+1072.4 3.9
+1074.5 63.8
+1075.9 5.4
+1078.6 2.3
+1081.1 3.0
+1082.4 7.5
+1083.5 31.3
+1084.6 13.3
+1085.7 8.5
+1086.5 5.7
+1091.0 5.7
+1093.5 4.1
+1094.5 5.3
+1095.9 19.6
+1096.6 5.0
+1097.5 31.7
+1098.6 9.9
+1100.8 8.3
+1101.6 7.3
+1102.5 17.1
+1103.7 10.1
+1110.4 4.7
+1111.2 11.3
+1112.5 15.0
+1113.6 6.0
+1115.7 67.4
+1116.7 5.3
+1117.4 7.5
+1119.8 12.4
+1120.6 23.2
+1121.6 7.9
+1126.7 3.4
+1127.5 9.8
+1128.4 11.3
+1129.5 7.9
+1132.0 1.9
+1133.8 4.1
+1134.6 2.0
+1137.7 31.5
+1138.6 71.1
+1139.4 6.1
+1143.0 0.9
+1145.3 6.4
+1145.9 4.9
+1149.7 1.8
+1151.6 3.9
+1152.6 10.4
+1155.6 161.6
+1156.6 117.5
+1159.4 2.7
+1160.7 3.0
+1165.6 2.8
+1168.7 6.0
+1169.5 1.2
+1173.6 135.1
+1177.1 11.1
+1178.4 12.9
+1184.4 4.7
+1185.5 2.6
+1186.9 5.6
+1189.7 3.0
+1192.4 3.3
+1194.5 29.8
+1195.5 42.8
+1196.3 10.9
+1196.9 5.2
+1197.8 2.8
+1199.5 1.6
+1202.5 9.8
+1205.6 2.4
+1206.8 3.4
+1208.3 3.3
+1209.2 5.9
+1212.6 64.1
+1213.4 73.8
+1215.4 14.1
+1226.5 10.2
+1227.9 6.7
+1228.6 72.7
+1229.5 5.7
+1230.6 128.8
+1241.1 8.7
+1241.7 12.6
+1245.4 8.9
+1256.6 3.0
+1262.4 1.0
+1268.8 5.6
+1281.7 7.9
+1290.3 12.1
+1291.6 7.5
+1298.5 9.8
+1299.8 3.9
+1307.8 60.1
+1308.6 52.4
+1309.7 3.9
+1323.7 1.2
+1325.8 79.7
+1326.5 75.3
+1327.1 7.1
+1343.5 91.9
+1356.4 2.0
+1357.6 13.0
+1360.6 8.6
+1361.5 11.0
+1371.9 1.9
+1373.8 5.9
+1375.6 50.3
+1383.8 3.2
+1385.5 4.8
+1398.8 5.4
+1416.7 3.8
+1425.7 5.1
+1427.5 11.2
+1428.6 9.1
+1432.5 3.2
+1436.6 5.6
+1445.7 66.5
+1453.5 17.5
+1454.5 80.0
+1455.5 110.0
+1456.3 3.5
+1457.0 11.8
+1471.9 425.8
+1472.8 1185.9
+S	23	23	805.00
+I	ID	229
+I	RTime	11.3068
+Z	1	805.00
+237.3 3.5
+254.9 2.0
+270.1 1.5
+273.6 4.5
+275.3 0.8
+276.4 1.2
+285.3 0.8
+300.3 4.6
+310.2 0.8
+332.1 3.2
+338.3 1.1
+339.2 3.2
+343.1 1.6
+354.4 6.9
+359.2 3.2
+364.1 1.1
+372.4 2.0
+377.2 3.2
+381.4 10.3
+382.3 1.8
+383.0 0.8
+386.3 1.1
+387.0 1.6
+388.3 2.5
+389.4 1.6
+395.3 6.9
+403.5 5.0
+409.0 1.6
+413.4 1.1
+416.3 1.2
+417.1 2.2
+427.0 2.5
+429.7 1.8
+431.5 1.2
+436.3 2.5
+438.1 4.1
+439.4 2.2
+441.8 2.2
+450.4 2.5
+452.4 2.0
+453.1 2.7
+470.6 2.4
+471.4 1.6
+472.5 1.2
+474.3 3.5
+479.6 1.1
+480.3 6.0
+482.0 5.8
+484.4 1.1
+485.2 2.2
+486.2 10.0
+488.1 2.5
+489.2 4.0
+490.5 2.7
+494.3 4.4
+496.0 1.6
+498.3 4.4
+502.2 7.5
+503.1 1.8
+511.4 3.5
+512.2 4.3
+513.2 2.2
+516.3 2.0
+522.9 3.5
+527.7 2.7
+529.2 2.9
+530.1 10.8
+531.1 4.6
+534.2 4.0
+536.3 5.0
+537.6 2.5
+539.4 1.2
+541.3 2.5
+548.3 7.0
+549.4 1.1
+550.4 6.5
+552.6 0.8
+556.3 2.0
+568.3 5.5
+569.2 2.4
+570.3 0.8
+575.9 3.0
+585.4 1.0
+588.0 4.9
+589.0 4.5
+589.8 5.1
+590.5 15.5
+591.4 4.0
+592.6 3.7
+610.4 3.2
+616.2 2.5
+617.7 1.2
+622.5 3.2
+629.3 2.7
+635.5 1.7
+638.4 2.2
+640.1 1.3
+644.0 2.4
+647.4 3.4
+654.5 2.2
+658.1 7.0
+659.4 2.5
+664.5 1.6
+669.3 1.5
+670.9 3.9
+673.4 5.0
+675.7 1.2
+676.3 2.0
+686.3 1.3
+696.0 1.8
+699.4 3.7
+700.4 4.4
+705.2 3.7
+706.4 3.9
+713.9 3.7
+719.7 1.7
+724.4 0.8
+731.4 10.1
+735.5 1.7
+740.4 2.0
+751.1 2.2
+752.7 5.5
+756.7 1.3
+760.5 5.4
+767.5 2.0
+773.0 1.3
+773.6 2.2
+786.8 40.7
+787.5 13.0
+788.5 5.0
+841.3 1.7
+955.5 2.5
+1000.8 3.7
+1024.5 2.5
+1041.8 2.7
+1138.6 1.7
+1249.6 2.2
+1316.4 6.5
+S	24	24	830.62
+I	ID	75
+I	RTime	3.4651
+Z	3	2489.84
+398.0 1.5
+410.7 2.5
+428.2 3.0
+446.2 8.6
+474.2 3.2
+497.3 5.0
+557.4 2.2
+568.3 1.7
+570.1 3.2
+582.3 1.8
+587.8 1.3
+613.6 12.0
+625.8 5.0
+629.3 13.5
+629.9 2.0
+632.3 5.3
+637.3 2.0
+655.6 2.2
+666.9 2.4
+677.1 12.8
+689.6 11.1
+697.6 17.7
+702.2 3.2
+719.5 38.2
+723.3 1.7
+725.3 7.0
+736.8 22.7
+753.7 3.5
+758.8 39.4
+764.8 7.1
+776.9 2.7
+778.9 38.2
+779.8 26.2
+783.7 819.0
+784.6 6.3
+785.4 2.7
+786.1 2.0
+788.5 7.8
+791.0 11.0
+791.7 6.8
+792.6 1.2
+793.7 11.6
+797.2 14.6
+799.1 5.1
+802.8 8.3
+804.3 3.7
+807.6 4.0
+808.9 3.7
+811.8 3.2
+812.8 6.8
+814.9 12.6
+858.3 4.6
+877.6 2.5
+883.3 22.2
+896.6 4.4
+901.8 19.5
+911.4 2.9
+921.5 13.0
+932.0 4.0
+953.2 8.3
+958.7 129.3
+959.5 18.2
+972.4 4.5
+982.1 6.3
+983.1 3.2
+987.5 15.1
+1006.5 13.6
+1007.2 4.1
+1009.2 4.0
+1024.7 2.4
+1033.3 7.0
+1038.4 20.0
+1039.3 9.6
+1042.8 3.4
+1044.5 113.5
+1045.5 13.0
+1061.8 3.7
+1116.7 5.4
+1168.6 1.6
+1186.9 3.9
+1207.0 3.0
+1301.5 4.5
+1388.4 3.2
+1419.0 1.5
+1437.8 1.2
+1712.7 1.7
+S	25	25	745.55
+Z	2	1490.09
+217.0 7.3
+226.2 4.1
+230.2 11.5
+234.2 3.2
+235.2 12.9
+237.3 4.9
+241.1 12.2
+244.9 45.1
+246.2 34.5
+252.3 6.4
+254.1 29.7
+254.9 15.0
+257.9 6.3
+259.3 11.1
+260.4 67.5
+261.1 33.1
+261.9 67.0
+265.9 17.6
+270.3 23.3
+271.0 13.9
+274.2 3.9
+278.3 9.5
+281.2 6.4
+282.3 32.5
+285.3 2.8
+288.5 18.1
+290.1 7.4
+296.2 33.8
+297.2 26.7
+301.2 5.1
+306.1 6.0
+312.3 7.2
+313.2 10.5
+316.0 22.1
+317.4 372.3
+320.2 54.4
+321.2 8.2
+322.2 13.7
+325.9 8.9
+327.1 22.3
+329.3 46.7
+330.3 12.0
+331.7 43.4
+332.4 95.4
+333.3 20.6
+340.2 4.8
+343.2 20.3
+344.2 16.4
+345.1 18.1
+346.2 12.3
+347.4 11.1
+354.0 2.9
+355.1 17.0
+356.4 43.0
+357.2 222.0
+358.2 87.5
+359.3 24.0
+361.3 9.6
+363.3 20.9
+367.5 37.6
+370.4 20.1
+375.3 378.0
+376.0 7.7
+379.3 4.1
+384.2 16.4
+385.3 7.3
+392.4 4.8
+393.4 7.9
+396.3 24.5
+397.3 43.6
+398.4 4.5
+400.2 18.6
+402.4 24.4
+403.3 8.4
+408.3 7.9
+409.2 13.0
+412.5 37.6
+414.3 4.6
+416.4 155.2
+417.5 24.3
+420.1 15.8
+421.3 17.6
+422.4 20.0
+423.4 27.4
+424.3 53.2
+425.4 6.3
+426.2 29.4
+428.7 6.4
+430.4 29.8
+431.2 24.9
+438.2 5.8
+439.0 23.0
+442.4 58.4
+444.0 53.0
+445.4 123.4
+446.3 60.2
+447.8 11.3
+448.5 14.6
+452.6 16.4
+453.2 20.9
+454.5 2.7
+456.0 30.2
+457.4 28.5
+459.2 47.5
+462.0 8.6
+463.6 33.6
+466.3 39.0
+467.0 30.4
+467.9 26.6
+470.0 55.3
+470.7 9.3
+471.3 5.1
+473.3 13.8
+474.3 48.2
+476.2 10.2
+477.7 37.6
+482.6 18.4
+483.6 38.7
+485.2 13.1
+487.3 48.0
+490.4 8.3
+492.3 19.5
+493.1 32.8
+497.5 18.8
+499.4 13.5
+500.5 29.2
+501.5 21.7
+502.2 15.2
+504.2 302.7
+505.3 29.5
+508.4 8.3
+509.3 20.8
+510.7 110.4
+511.6 4.7
+512.4 10.7
+513.0 15.8
+515.1 28.0
+516.7 30.7
+518.5 11.4
+521.4 121.0
+523.3 7.7
+525.5 22.0
+526.3 62.8
+527.3 65.1
+529.5 51.2
+531.1 42.7
+532.6 45.8
+533.4 2.8
+534.3 40.8
+534.9 57.2
+535.5 2.4
+540.6 45.1
+542.6 10.1
+544.4 362.0
+545.4 48.3
+548.2 5.2
+551.1 2.3
+552.8 12.6
+553.4 99.7
+554.3 24.7
+556.5 68.9
+557.3 28.5
+558.7 29.8
+560.1 16.0
+561.6 2.2
+562.5 14.9
+563.7 5.5
+565.6 26.2
+567.8 10.8
+568.5 14.9
+569.7 28.0
+570.4 77.3
+571.5 12.8
+572.6 8.4
+576.4 22.4
+577.9 156.0
+578.7 17.9
+580.1 33.4
+581.0 46.4
+582.2 108.1
+584.4 34.7
+585.4 30.4
+586.4 12.1
+587.2 12.7
+588.3 59.4
+589.3 60.5
+591.2 9.1
+592.4 63.0
+593.2 30.5
+594.4 63.6
+595.5 6.4
+596.5 29.1
+597.5 39.0
+598.3 139.3
+600.5 78.8
+601.8 38.4
+604.5 37.2
+605.4 104.0
+606.2 46.2
+606.9 66.1
+608.9 39.7
+609.7 23.5
+610.4 25.5
+611.1 25.2
+613.4 68.6
+614.1 45.2
+615.3 96.2
+616.3 21.5
+617.8 91.6
+619.8 48.1
+622.3 7.0
+623.3 5.9
+624.3 47.4
+627.8 54.3
+628.9 19.4
+630.3 107.4
+631.5 39.7
+632.5 9.2
+633.5 59.4
+634.5 40.4
+637.2 14.2
+640.4 23.6
+641.3 249.5
+642.3 38.2
+643.6 19.9
+644.5 60.6
+645.6 13.5
+646.6 114.0
+647.5 17.9
+648.4 59.7
+649.5 10.7
+652.2 83.9
+655.6 7.9
+657.5 587.2
+658.6 9.2
+659.5 7.0
+660.4 12.9
+662.9 39.2
+663.6 43.3
+664.3 22.4
+666.5 52.4
+667.5 13.5
+668.4 202.7
+669.2 19.0
+670.6 21.7
+671.7 64.7
+672.4 117.4
+673.9 204.8
+674.9 21.9
+676.1 34.6
+678.0 50.6
+681.7 28.3
+682.4 93.2
+683.1 36.8
+684.2 21.6
+685.5 181.7
+686.3 496.8
+687.5 104.6
+688.2 56.1
+689.5 27.1
+691.3 56.6
+693.4 138.1
+694.4 49.1
+695.7 15.7
+697.8 67.6
+698.5 12.2
+700.0 133.1
+700.9 79.1
+701.8 22.3
+702.8 82.0
+704.3 554.6
+705.3 61.1
+706.0 762.7
+707.0 46.0
+707.7 2.3
+709.7 84.9
+710.3 181.2
+711.4 429.4
+712.4 101.4
+713.7 99.2
+714.9 106.7
+716.5 213.5
+717.7 132.5
+719.1 518.0
+720.3 400.3
+721.3 296.7
+722.0 151.3
+722.7 34.0
+724.2 265.0
+725.2 408.8
+726.0 247.4
+727.3 283.2
+728.2 407.5
+729.4 119.5
+731.0 197.8
+731.8 62.8
+732.6 311.7
+733.8 250.0
+735.8 573.3
+736.5 284.0
+737.4 75.9
+738.4 2.6
+750.5 48.2
+751.4 86.1
+755.7 8.9
+761.3 40.9
+762.1 16.0
+763.0 56.4
+764.5 156.7
+765.5 23.8
+766.3 30.8
+768.0 124.2
+768.8 35.5
+769.6 28.3
+770.4 5.0
+771.9 23.1
+772.9 81.4
+773.6 16.3
+774.7 4.4
+775.5 64.6
+777.5 562.9
+778.5 337.9
+779.4 84.8
+782.1 21.6
+783.3 58.2
+785.1 32.1
+786.5 1071.4
+787.3 70.0
+788.3 4.9
+789.4 75.3
+790.9 25.3
+793.6 52.6
+795.0 40.9
+796.3 49.2
+797.3 28.4
+798.1 107.5
+799.7 193.8
+800.8 90.1
+802.6 32.3
+803.6 25.9
+804.4 37.7
+806.5 17.3
+808.2 45.7
+809.1 78.6
+809.8 65.9
+813.3 19.1
+815.3 218.8
+816.3 93.4
+817.8 92.2
+820.7 13.8
+823.8 182.6
+824.6 38.5
+825.9 112.3
+827.2 7.0
+828.0 115.1
+828.9 40.1
+830.8 45.7
+833.0 236.6
+833.9 1.8
+835.1 55.1
+835.9 18.5
+838.7 80.2
+840.1 25.3
+843.3 38.1
+845.7 37.1
+847.6 7.9
+848.5 180.7
+849.5 20.4
+850.3 59.0
+851.1 18.7
+852.4 286.2
+853.5 95.4
+855.5 108.1
+857.2 52.2
+857.8 52.3
+860.1 30.7
+861.8 121.2
+864.0 153.2
+865.0 118.8
+865.8 73.6
+867.0 29.3
+867.8 30.2
+868.6 69.3
+869.7 46.1
+871.7 46.0
+873.4 55.5
+874.8 59.4
+875.9 54.0
+877.3 113.6
+877.9 13.9
+880.1 40.2
+881.0 113.2
+881.7 112.0
+882.7 20.7
+883.7 154.9
+885.5 271.5
+886.5 82.9
+889.1 101.4
+890.6 303.1
+891.6 144.9
+892.6 35.7
+893.7 52.1
+894.4 116.9
+896.7 127.1
+897.6 12.4
+898.3 100.5
+899.4 68.6
+900.6 183.6
+901.6 15.1
+902.4 83.8
+903.2 63.5
+904.2 76.2
+905.7 17.3
+908.3 93.2
+909.0 67.6
+911.6 139.0
+912.4 16.7
+913.4 110.2
+915.6 49.8
+916.4 24.9
+919.1 12.7
+921.2 13.2
+921.8 58.3
+922.5 54.4
+924.4 13.1
+925.6 14.0
+928.5 328.9
+929.6 99.1
+930.7 144.5
+931.5 50.3
+932.6 14.5
+935.7 31.0
+938.0 68.2
+939.5 2.7
+940.3 89.9
+941.3 37.4
+942.6 61.3
+943.4 5.0
+944.3 36.6
+945.7 69.4
+946.5 302.3
+947.8 286.4
+949.1 82.7
+950.1 84.5
+951.2 132.7
+952.7 309.3
+953.8 233.3
+954.7 73.5
+955.9 33.3
+957.1 75.8
+958.1 91.4
+959.6 134.0
+960.9 26.9
+961.9 130.3
+962.7 31.7
+963.5 19.9
+965.1 101.1
+966.2 101.1
+968.0 31.5
+969.3 80.1
+970.6 72.2
+976.1 49.1
+976.7 29.0
+978.1 60.2
+980.0 32.3
+983.1 68.4
+984.4 41.9
+985.4 38.5
+986.6 563.5
+987.8 136.3
+988.7 40.4
+989.5 24.6
+990.4 14.4
+991.4 75.5
+993.3 20.2
+994.7 4.5
+996.5 60.7
+997.4 68.5
+998.3 41.7
+999.4 16.0
+1000.2 32.0
+1000.8 23.9
+1002.0 26.1
+1003.1 125.8
+1004.9 13.6
+1007.2 60.4
+1009.3 98.5
+1010.1 139.5
+1011.2 53.9
+1012.4 77.2
+1013.9 37.1
+1015.6 94.8
+1016.5 73.4
+1018.5 337.8
+1019.4 75.1
+1020.3 55.4
+1021.8 17.4
+1022.5 54.3
+1025.2 37.6
+1026.8 11.4
+1027.4 34.5
+1029.5 139.5
+1030.4 28.4
+1031.6 97.8
+1034.3 38.7
+1040.0 35.5
+1041.4 26.2
+1043.2 86.3
+1044.0 10.9
+1044.7 110.1
+1045.5 20.2
+1047.7 105.5
+1048.4 20.4
+1049.5 61.6
+1050.3 44.1
+1051.0 13.7
+1052.4 21.3
+1054.7 30.7
+1056.4 237.3
+1057.7 1048.3
+1058.6 98.7
+1062.5 75.5
+1063.8 87.3
+1065.8 31.7
+1066.8 52.7
+1067.7 194.9
+1068.6 64.3
+1069.6 134.8
+1070.6 33.3
+1071.4 25.5
+1074.4 417.2
+1075.6 104.4
+1077.7 30.5
+1081.8 74.7
+1084.7 36.2
+1085.6 14.4
+1086.8 3.3
+1095.4 92.8
+1096.0 8.8
+1096.7 16.2
+1097.7 99.8
+1098.5 79.1
+1100.7 6.7
+1103.0 49.6
+1104.5 36.1
+1106.3 23.0
+1110.8 19.9
+1113.0 37.2
+1113.7 66.1
+1114.5 42.1
+1115.6 394.2
+1116.6 57.8
+1118.2 72.2
+1123.1 40.6
+1125.4 11.4
+1128.8 18.8
+1131.1 124.3
+1131.7 11.9
+1133.2 64.8
+1138.5 11.1
+1139.7 49.0
+1141.5 8.6
+1142.6 33.8
+1148.1 22.4
+1148.8 4.4
+1154.0 78.4
+1154.8 119.8
+1155.8 176.0
+1156.5 116.8
+1157.8 81.3
+1158.9 48.8
+1159.9 45.6
+1162.7 19.4
+1167.3 4.8
+1172.4 6.3
+1173.5 526.1
+1174.5 35.2
+1176.4 3.5
+1180.4 48.6
+1181.7 40.0
+1187.8 9.8
+1191.7 28.7
+1199.6 13.1
+1202.7 38.3
+1207.4 65.6
+1208.9 18.8
+1210.6 85.3
+1211.5 76.9
+1212.3 28.8
+1214.5 5.1
+1227.7 93.4
+1228.7 358.5
+1229.4 35.1
+1230.4 383.2
+1231.1 59.3
+1231.9 58.7
+1235.6 79.8
+1238.7 25.5
+1242.7 22.1
+1243.8 29.1
+1247.6 24.3
+1252.7 29.5
+1254.6 12.1
+1255.8 5.9
+1257.8 26.6
+1260.2 14.9
+1260.9 8.9
+1263.3 32.6
+1274.8 21.3
+1276.3 5.4
+1277.3 3.9
+1280.7 31.0
+1284.5 22.8
+1287.7 11.8
+1293.1 111.2
+1293.9 9.7
+1306.9 20.4
+1308.9 27.1
+1325.6 84.2
+1326.7 32.1
+1327.6 10.2
+1330.9 19.0
+1336.9 24.9
+1337.5 29.4
+1341.6 104.2
+1342.8 150.6
+1343.6 355.9
+1344.5 119.6
+1369.6 118.4
+1370.5 220.5
+1371.6 84.4
+1372.5 11.8
+1384.8 14.6
+1386.7 13.8
+1388.9 19.5
+1426.2 3.3
+1437.8 31.8
+1450.9 11.2
+1471.9 18.6
+1478.4 13.6
+S	26	26	692.38
+Z	2	1383.75
+199.2 33.2
+200.2 21.3
+202.3 150.5
+204.3 20.9
+208.2 37.4
+209.2 46.9
+214.3 29.8
+215.2 50.9
+216.2 42.0
+217.2 295.2
+218.1 61.8
+224.2 84.9
+226.0 257.7
+226.7 32.4
+228.3 57.9
+229.1 28.4
+231.2 71.6
+235.2 17.5
+237.0 74.7
+240.5 81.2
+241.3 23.7
+242.3 217.7
+243.5 57.8
+244.3 301.7
+245.3 137.7
+246.4 47.1
+247.3 93.0
+251.4 32.2
+252.5 40.7
+254.3 19.7
+256.2 27.8
+257.4 60.7
+259.2 43.3
+260.3 158.5
+261.3 265.6
+262.3 2054.6
+263.2 143.7
+264.2 38.6
+270.1 99.4
+275.4 121.1
+277.2 69.4
+279.7 19.2
+283.4 18.8
+284.3 57.4
+287.4 17.7
+288.4 116.0
+289.3 83.5
+290.3 12.6
+292.2 65.0
+299.1 101.5
+300.2 104.3
+302.5 105.2
+304.5 19.0
+305.3 20.5
+308.1 96.3
+311.2 31.3
+313.1 30.3
+314.5 89.0
+315.3 256.7
+316.5 20.5
+317.3 95.4
+318.2 33.3
+319.1 63.4
+320.4 57.1
+322.4 12.9
+324.4 29.2
+325.4 50.1
+326.1 204.3
+327.3 80.6
+329.3 158.9
+331.0 44.5
+332.2 95.2
+333.2 26.7
+334.2 56.5
+336.0 74.8
+337.3 52.6
+338.3 69.1
+339.2 49.4
+341.5 28.1
+343.4 282.0
+345.4 25.8
+346.4 74.0
+348.3 24.7
+349.3 44.9
+350.6 35.8
+352.4 98.1
+353.3 209.3
+354.4 253.5
+355.3 63.7
+356.3 41.4
+359.1 56.7
+360.2 142.9
+361.4 91.1
+362.5 55.3
+363.6 117.0
+364.4 305.0
+365.5 111.3
+366.6 52.2
+367.7 110.3
+369.6 19.2
+371.4 1132.1
+372.3 790.3
+373.4 1449.6
+374.2 227.8
+374.9 26.0
+376.4 47.4
+377.5 17.4
+378.4 52.9
+382.3 65.1
+383.2 61.0
+389.2 866.0
+390.4 2977.9
+391.7 227.6
+397.6 32.5
+400.7 108.7
+401.5 70.4
+402.8 26.8
+404.1 19.7
+405.3 230.9
+407.5 58.3
+408.2 32.8
+409.6 27.1
+410.4 61.1
+411.5 13.4
+412.2 86.0
+413.5 39.5
+418.5 41.6
+419.7 27.2
+420.4 134.2
+422.6 25.9
+423.9 60.7
+426.4 323.7
+427.4 123.8
+429.4 204.4
+432.6 185.1
+433.5 108.3
+435.4 78.4
+439.5 73.0
+441.3 25.2
+442.6 71.4
+443.4 113.4
+444.4 439.4
+445.3 170.9
+446.3 217.7
+447.4 428.9
+448.2 156.1
+448.9 44.4
+449.6 135.7
+450.5 52.3
+453.4 61.2
+454.2 82.3
+455.2 95.0
+456.6 53.8
+458.4 118.3
+459.5 66.8
+461.5 13220.4
+462.5 2236.7
+463.5 219.9
+464.4 68.1
+465.5 74.4
+466.2 31.3
+467.3 59.6
+468.7 113.8
+470.5 182.9
+471.7 163.9
+472.6 239.3
+473.5 97.6
+474.7 129.2
+475.4 37.2
+476.2 272.6
+477.5 86.6
+479.4 459.0
+481.4 79.3
+483.6 103.4
+486.2 214.0
+487.4 101.6
+489.7 238.5
+490.5 18.7
+491.4 266.9
+493.5 39.2
+496.5 85.7
+497.3 22.7
+498.6 429.6
+500.3 717.0
+501.6 60.1
+502.8 70.6
+503.6 58.3
+504.4 29.2
+505.9 50.8
+507.4 57.8
+508.6 16.7
+509.6 20.7
+510.4 139.6
+511.8 223.4
+512.7 62.4
+513.3 14.5
+514.2 55.9
+514.8 111.6
+517.3 171.1
+518.4 1610.4
+519.5 199.8
+520.4 56.2
+521.6 53.1
+522.3 26.6
+523.2 33.9
+524.6 21.9
+525.5 28.8
+527.3 157.9
+528.2 14.4
+529.6 24.8
+530.3 92.8
+531.5 358.0
+532.1 150.2
+533.6 169.8
+534.7 181.5
+536.3 1259.0
+537.5 436.6
+539.4 266.6
+541.7 145.1
+542.5 85.4
+544.2 64.6
+545.6 108.9
+546.5 132.7
+547.5 170.8
+548.5 118.9
+549.4 78.4
+550.4 212.0
+551.7 251.6
+553.5 111.9
+556.6 205.8
+557.6 341.2
+558.4 311.4
+559.4 189.3
+560.1 56.4
+560.9 23.3
+561.6 107.8
+562.5 260.8
+564.9 67.0
+565.7 72.4
+566.4 397.4
+567.2 19.0
+568.5 59.0
+569.9 76.4
+570.7 198.8
+571.6 206.1
+574.5 5603.9
+575.4 603.9
+576.2 260.1
+577.1 164.5
+578.1 41.7
+578.9 119.4
+579.6 146.7
+580.6 140.4
+581.5 54.3
+583.5 384.0
+584.4 620.3
+585.6 293.7
+588.6 479.3
+589.4 58.3
+590.7 158.7
+591.6 50.7
+593.3 277.2
+594.5 32.0
+597.0 2684.3
+597.7 2456.7
+599.2 478.1
+600.5 204.9
+601.6 76.0
+602.5 40.8
+603.6 51.8
+604.8 193.6
+606.2 9517.2
+607.2 306.8
+608.2 189.5
+610.1 98.3
+610.7 248.5
+611.6 81.9
+612.3 28.8
+613.9 399.5
+615.4 261.0
+616.1 168.0
+617.4 204.4
+618.4 393.3
+619.4 323.5
+620.3 143.0
+621.3 142.5
+622.5 20.0
+623.1 51.5
+624.2 26.8
+624.9 573.9
+627.8 79.3
+628.7 214.0
+630.6 35.5
+631.5 92.2
+632.5 168.6
+633.5 587.4
+634.5 377.2
+635.4 123.5
+636.6 221.0
+637.5 344.4
+638.3 112.0
+639.9 365.6
+640.9 12.7
+641.5 278.4
+642.2 515.9
+643.3 117.9
+644.6 319.3
+645.6 2026.0
+646.5 669.5
+647.7 281.7
+649.1 146.4
+649.7 15.0
+650.8 193.6
+651.5 1939.8
+652.4 805.2
+653.2 496.0
+654.9 119.6
+655.6 38.0
+656.7 122.6
+657.3 17.6
+658.9 159.5
+659.8 382.9
+660.6 280.9
+661.3 1017.7
+662.3 286.9
+664.2 100.2
+665.5 303.5
+666.2 571.7
+667.3 41.5
+668.4 195.0
+669.4 1013.5
+670.6 566.8
+672.0 1126.4
+674.1 2914.0
+674.8 2798.2
+675.7 580.0
+676.9 160.9
+677.9 302.1
+678.7 482.8
+679.7 101.9
+680.9 1093.5
+681.9 2826.7
+683.2 18998.4
+684.4 997.6
+685.1 22.2
+686.2 36.6
+694.6 35.3
+696.2 69.0
+697.2 27.0
+698.4 87.4
+702.6 643.3
+703.4 222.8
+704.5 210.7
+706.5 103.0
+707.3 23.9
+708.5 146.0
+711.7 63.8
+713.5 35.4
+714.4 222.8
+715.4 17.1
+716.4 102.4
+717.3 16.0
+720.5 463.9
+721.4 266.5
+723.8 109.4
+726.6 17.3
+728.1 945.5
+728.8 95.7
+730.5 42.4
+731.7 307.6
+732.6 4516.1
+733.6 1358.7
+734.6 422.0
+735.7 134.8
+736.8 42.1
+738.4 576.2
+739.4 461.5
+740.5 48.1
+742.9 39.6
+745.6 108.2
+746.3 76.5
+747.7 97.0
+749.9 186.8
+750.6 812.8
+751.5 197.4
+752.5 122.1
+753.2 78.6
+754.4 9.4
+755.5 310.0
+756.4 160.2
+757.5 139.2
+758.2 107.8
+759.5 120.8
+763.6 19.5
+765.9 68.4
+768.4 103.9
+770.5 25.7
+771.6 119.2
+773.3 998.8
+774.4 504.8
+775.6 192.4
+776.7 62.8
+777.9 41.1
+778.8 37.5
+779.6 10.9
+781.4 16.3
+782.7 135.4
+783.7 93.0
+784.7 247.9
+786.5 237.2
+787.6 133.3
+788.7 18.0
+790.4 32.2
+791.4 1907.2
+792.4 1448.3
+798.1 201.5
+798.8 90.6
+799.7 69.7
+801.2 50.8
+802.6 89.0
+803.5 204.8
+804.5 70.0
+807.7 318.7
+809.4 2201.9
+810.5 752.4
+811.5 15.4
+812.4 180.7
+815.6 48.6
+816.6 65.5
+818.6 55.6
+819.7 32.1
+821.1 201.3
+821.8 255.6
+823.1 89.1
+825.3 142.2
+827.8 30.4
+829.0 60.3
+829.8 317.0
+831.6 118.2
+832.9 27.2
+833.7 21.7
+834.6 55.8
+835.8 170.7
+836.6 54.2
+837.9 77.3
+839.8 15.3
+842.4 45.2
+843.6 101.2
+844.6 316.3
+845.2 117.7
+847.1 499.9
+847.7 5861.0
+848.7 2049.5
+849.7 282.2
+851.5 75.2
+852.7 109.5
+854.3 115.8
+855.9 234.9
+858.6 123.8
+859.8 77.6
+860.7 239.9
+861.5 35.6
+862.5 194.0
+868.5 34.7
+869.5 226.5
+870.4 39.6
+871.7 53.0
+872.3 83.5
+873.7 743.2
+875.6 47.8
+877.5 222.0
+878.3 198.1
+879.0 184.4
+880.3 155.9
+881.7 110.0
+886.4 1432.0
+887.0 15.9
+887.6 736.2
+888.4 16.5
+890.9 97.9
+891.8 107.7
+893.7 66.0
+894.3 51.8
+895.8 138.1
+897.8 134.7
+899.9 113.4
+900.7 47.1
+902.1 123.4
+903.9 119.6
+904.5 4122.5
+905.5 1092.7
+906.6 361.8
+908.1 539.0
+908.8 51.0
+909.4 69.3
+910.0 67.3
+910.8 62.7
+913.5 95.6
+915.6 453.1
+917.3 3033.1
+918.7 34.9
+919.6 50.1
+920.7 70.6
+921.8 210.1
+922.5 5217.3
+923.5 2416.5
+924.8 297.4
+925.6 79.0
+926.6 100.8
+927.8 15.7
+928.4 51.1
+929.4 51.6
+930.9 213.8
+931.8 333.4
+933.5 289.0
+934.8 103.1
+935.9 106.0
+937.0 134.3
+937.8 156.4
+938.6 176.8
+939.8 509.0
+940.7 94.8
+941.6 21.6
+942.6 17.3
+944.9 128.0
+945.8 208.5
+946.9 155.3
+947.9 50.0
+948.5 24.7
+949.5 168.0
+950.8 56.2
+951.8 94.2
+953.8 20.9
+954.9 37.1
+957.7 781.4
+958.8 112.7
+959.8 47.2
+961.6 20.6
+964.1 16.7
+965.7 147.3
+969.2 143.3
+974.3 71.5
+975.5 1509.9
+976.6 790.5
+977.8 226.2
+978.8 211.2
+980.7 18.2
+981.7 157.2
+986.9 113.8
+988.4 58.6
+989.5 107.5
+990.2 21.8
+992.8 301.4
+993.6 2054.1
+994.7 9098.2
+995.8 3178.5
+996.9 330.9
+997.9 164.8
+998.8 20.9
+999.4 101.5
+1002.5 45.5
+1003.9 276.5
+1004.6 31.6
+1006.8 35.8
+1008.7 113.5
+1009.5 140.2
+1010.6 249.8
+1011.7 107.0
+1012.8 104.4
+1019.6 97.4
+1020.7 121.3
+1021.7 17.3
+1024.6 89.2
+1028.0 40.4
+1029.9 39.9
+1030.6 53.5
+1032.8 40.3
+1033.7 74.3
+1034.5 83.2
+1037.2 102.9
+1038.7 179.0
+1043.9 27.4
+1047.1 177.4
+1049.7 211.1
+1050.5 103.1
+1051.6 196.3
+1052.4 28.5
+1059.6 11.1
+1060.9 196.3
+1061.7 22.0
+1062.9 86.2
+1063.6 47.1
+1064.6 141.3
+1065.6 48.6
+1068.0 95.4
+1068.8 307.8
+1070.0 37.9
+1070.9 205.0
+1073.3 58.0
+1075.7 35.1
+1078.1 131.3
+1079.9 114.5
+1080.6 59.1
+1082.7 335.3
+1083.8 291.2
+1085.0 69.4
+1085.7 393.7
+1086.5 266.5
+1088.6 109.6
+1090.7 148.3
+1091.7 56.7
+1093.6 107.5
+1095.7 42.5
+1097.6 50.4
+1099.8 16.3
+1103.6 708.2
+1104.5 195.9
+1105.4 204.2
+1106.0 16.5
+1107.6 190.1
+1108.9 41.9
+1109.9 60.6
+1115.9 23.5
+1120.5 88.0
+1121.7 2597.0
+1122.8 1955.7
+1123.8 2421.1
+1124.9 1024.3
+1125.7 104.9
+1126.4 26.5
+1128.8 47.5
+1132.1 61.6
+1133.7 112.4
+1134.3 47.7
+1138.5 20.6
+1139.8 56.9
+1141.0 20.8
+1142.9 106.5
+1144.9 43.5
+1148.9 100.5
+1150.0 104.1
+1151.5 49.1
+1152.9 199.6
+1153.7 90.6
+1154.8 72.4
+1160.8 61.7
+1161.7 66.9
+1165.3 127.8
+1165.9 99.2
+1166.6 45.6
+1167.9 119.0
+1175.7 73.3
+1178.2 218.9
+1179.0 180.2
+1179.9 214.2
+1180.7 193.5
+1181.8 39.8
+1185.7 31.8
+1188.7 136.3
+1192.7 339.3
+1193.9 527.7
+1197.7 55.6
+1198.8 367.9
+1199.8 97.4
+1207.9 64.0
+1209.0 79.1
+1210.8 5928.8
+1211.8 3043.2
+1212.9 139.1
+1216.7 89.7
+1218.7 399.9
+1219.6 51.1
+1233.7 301.4
+1235.6 66.9
+1236.6 766.0
+1237.9 920.7
+1238.8 321.3
+1240.1 23.9
+1245.9 38.7
+1253.7 25.0
+1254.8 49.8
+1256.0 37.3
+1282.7 29.4
+1325.0 17.3
+1377.0 55.7
+1382.8 32.5
+S	27	27	732.55
+Z	2	1464.09
+209.3 26.2
+210.3 7.4
+215.1 7.3
+216.3 26.2
+220.3 29.1
+221.4 4.3
+226.2 240.6
+227.1 105.1
+228.4 28.9
+229.4 16.1
+231.3 14.9
+233.4 8.5
+234.2 25.2
+235.5 2.3
+238.2 133.0
+239.2 19.5
+240.2 22.1
+241.1 6.2
+244.2 584.4
+245.2 53.9
+246.2 18.5
+248.3 13.3
+249.3 3.4
+252.4 8.9
+254.0 4.8
+255.3 52.8
+256.3 13.9
+257.4 15.9
+258.8 9.3
+260.4 22.6
+261.4 27.7
+262.3 3.3
+263.2 7.1
+265.3 6.2
+266.3 3.7
+269.3 10.6
+270.3 31.2
+272.2 7.1
+273.5 7.9
+274.3 6.3
+275.3 3.1
+276.4 37.7
+277.5 15.2
+279.3 46.5
+280.4 9.5
+281.2 11.1
+282.2 13.4
+283.4 9.5
+284.2 47.5
+285.2 24.2
+286.2 26.5
+287.4 4.6
+288.5 27.3
+289.7 28.1
+290.5 7.9
+291.6 13.8
+294.4 169.4
+295.3 12.4
+296.5 8.1
+297.5 23.6
+298.4 17.2
+299.8 21.1
+300.4 16.3
+301.4 13.1
+302.4 5.1
+303.3 7.4
+304.4 14.2
+305.3 29.7
+306.5 22.6
+307.4 9.2
+308.4 95.0
+310.2 11.4
+311.2 22.1
+313.4 3.8
+315.3 37.4
+316.3 38.2
+317.4 2.9
+318.3 17.4
+319.4 25.4
+320.2 5.2
+323.2 5.2
+325.3 128.1
+326.3 129.3
+328.2 162.3
+329.3 58.1
+330.4 8.4
+331.5 5.8
+333.4 9.5
+334.3 9.1
+336.5 5.1
+339.2 17.0
+341.4 33.7
+343.3 1655.7
+344.3 139.3
+345.2 14.1
+347.5 4.7
+349.5 23.2
+350.6 15.4
+351.2 22.0
+352.6 2.5
+353.5 8.2
+354.9 21.1
+357.3 46.4
+358.3 40.4
+359.6 18.7
+360.8 18.2
+362.2 4.2
+363.2 18.6
+367.5 45.5
+369.2 55.7
+370.2 25.1
+371.0 16.8
+371.8 3.6
+372.6 24.7
+373.4 14.5
+374.4 32.2
+375.2 54.6
+376.0 21.7
+377.2 15.3
+379.3 10.1
+380.8 15.3
+381.5 27.3
+382.4 4.3
+383.6 23.5
+384.4 202.6
+385.5 13.1
+386.5 29.9
+387.7 5.8
+389.3 76.9
+390.5 31.0
+391.8 20.9
+392.5 49.4
+393.8 10.4
+394.5 3.7
+395.4 87.3
+396.3 32.3
+397.4 19.7
+398.3 17.1
+399.3 31.7
+400.5 44.6
+401.5 25.2
+402.4 36.1
+403.2 12.7
+404.0 4.1
+405.4 4.3
+407.5 519.4
+408.4 85.2
+409.4 26.9
+410.4 7.4
+412.4 151.3
+413.4 159.6
+414.5 54.4
+415.4 12.1
+416.5 15.4
+417.6 23.4
+418.4 9.4
+419.6 7.4
+420.5 36.9
+421.4 19.8
+423.5 45.1
+424.4 28.6
+425.6 41.8
+426.8 16.6
+427.5 17.9
+428.6 6.4
+429.5 27.6
+430.3 319.2
+431.5 260.0
+432.4 24.6
+433.5 8.0
+434.5 5.4
+435.5 17.2
+436.3 8.3
+437.6 12.8
+438.4 38.3
+439.4 14.7
+440.6 22.1
+441.3 145.3
+442.3 99.3
+443.3 23.6
+444.5 26.5
+447.3 13.0
+448.3 20.2
+449.5 13.4
+450.5 21.9
+451.4 37.2
+452.6 5.6
+453.4 22.9
+454.4 11.1
+455.3 44.2
+456.5 54.2
+457.4 22.4
+458.1 4.8
+459.1 5.1
+459.8 7.9
+462.6 12.2
+463.4 3.2
+464.7 13.7
+465.7 27.9
+466.5 157.9
+467.4 45.4
+468.6 16.0
+470.1 9.3
+471.4 42.4
+472.6 32.7
+473.5 13.6
+474.7 56.8
+475.6 17.4
+476.4 31.7
+477.4 25.8
+479.5 2.7
+480.7 43.2
+483.3 459.6
+484.3 257.2
+485.3 53.0
+488.2 397.7
+489.1 40.2
+490.4 53.3
+491.2 28.7
+492.6 22.5
+493.8 4.5
+496.6 25.7
+498.2 36.3
+499.1 29.3
+501.2 355.9
+502.4 35.3
+503.4 24.7
+504.3 11.8
+505.8 2.9
+507.0 38.3
+508.1 19.8
+509.6 4.4
+510.7 39.6
+511.6 30.0
+512.6 38.7
+513.8 23.3
+514.8 9.6
+515.4 137.3
+516.6 39.3
+517.5 6.6
+518.6 63.7
+520.4 211.0
+521.5 114.1
+522.2 27.1
+523.6 26.6
+524.4 25.1
+525.4 29.0
+526.2 36.7
+527.5 53.6
+528.8 16.3
+529.7 18.9
+530.9 17.8
+532.0 50.8
+533.0 44.4
+533.6 42.7
+534.4 14.8
+535.5 13.3
+536.5 760.7
+537.5 248.2
+538.5 114.9
+539.5 62.0
+540.4 23.5
+541.7 8.4
+542.6 62.8
+543.5 4.7
+544.6 14.8
+545.6 153.4
+546.6 97.3
+547.8 46.9
+548.8 7.8
+549.7 48.3
+550.6 47.3
+551.5 19.4
+552.5 50.7
+553.7 39.7
+554.4 1.8
+555.6 90.4
+556.4 127.9
+557.4 30.1
+559.2 35.2
+560.0 22.9
+561.1 11.8
+561.9 40.0
+562.7 4.1
+563.8 59.5
+565.0 33.9
+566.7 89.5
+567.8 96.0
+568.6 36.5
+569.5 88.6
+570.5 72.4
+572.2 50.2
+573.1 29.4
+574.3 43.2
+575.5 67.6
+577.1 36.0
+577.9 32.6
+578.9 85.4
+579.8 57.9
+580.6 26.3
+581.5 16.0
+582.7 6.4
+583.9 44.6
+584.6 101.2
+585.7 65.3
+586.6 20.2
+587.4 57.9
+588.5 35.8
+589.5 98.1
+590.5 15.5
+591.5 12.4
+592.6 32.9
+593.3 23.2
+594.5 30.3
+595.2 29.0
+596.7 51.7
+597.4 378.2
+598.5 62.0
+599.4 47.0
+600.8 16.8
+601.8 86.0
+602.6 136.5
+603.6 78.3
+604.4 90.4
+605.8 35.6
+607.5 56.5
+608.2 13.8
+609.1 38.7
+610.7 233.9
+611.5 8.8
+612.2 25.9
+613.2 6.5
+614.4 295.0
+615.4 1083.7
+616.5 205.5
+617.7 102.6
+618.7 131.7
+619.8 38.4
+620.5 26.2
+621.7 22.5
+622.7 51.8
+624.0 324.4
+624.7 424.6
+625.8 60.5
+626.8 53.1
+627.9 32.8
+628.7 14.4
+629.8 35.6
+630.4 24.9
+631.4 77.9
+632.4 1287.3
+633.5 295.1
+634.6 15.1
+635.3 33.0
+636.9 51.5
+638.0 61.6
+638.7 15.0
+640.3 35.9
+641.3 24.2
+642.4 39.5
+643.7 13.2
+644.4 29.8
+645.4 19.2
+646.6 52.1
+647.5 60.3
+648.6 38.5
+649.6 236.0
+650.5 35.5
+651.8 152.7
+652.6 106.1
+653.6 13.8
+654.3 14.2
+655.5 78.8
+656.2 83.0
+657.4 71.3
+658.3 12.0
+659.0 47.9
+659.8 17.5
+660.8 69.1
+662.0 47.4
+663.3 77.6
+664.0 15.6
+665.4 200.7
+666.5 202.1
+667.3 94.6
+668.4 62.4
+669.6 74.5
+670.7 80.7
+671.7 99.6
+672.7 35.8
+673.9 40.0
+675.3 97.8
+676.9 76.9
+678.0 87.5
+678.7 115.0
+679.8 98.6
+680.7 76.2
+681.9 112.3
+682.7 46.2
+683.6 129.8
+684.7 61.6
+685.7 56.2
+686.8 83.4
+687.6 65.4
+688.5 91.1
+689.3 31.5
+690.5 109.4
+691.8 66.9
+692.6 37.1
+693.4 71.0
+694.3 63.2
+695.1 134.4
+696.0 113.7
+696.7 202.6
+697.6 353.0
+698.7 127.5
+699.9 121.4
+700.8 123.8
+701.6 69.8
+702.8 72.4
+704.6 2411.3
+706.3 273.0
+707.6 100.0
+708.5 383.8
+709.4 166.9
+710.1 335.9
+711.2 360.4
+712.1 124.7
+713.3 338.7
+714.2 201.9
+714.9 399.8
+715.9 151.7
+716.6 248.5
+717.7 116.2
+718.9 120.9
+719.6 220.0
+720.6 129.2
+722.0 591.1
+723.0 950.1
+723.8 131.5
+725.1 17.1
+725.8 21.0
+726.8 10.5
+728.1 3.3
+731.8 4.7
+736.1 6.3
+736.8 15.8
+738.4 49.7
+739.6 10.1
+741.6 4.5
+742.6 23.5
+743.6 60.1
+744.4 18.0
+745.4 41.1
+746.3 49.7
+747.7 49.9
+748.7 60.1
+749.7 175.3
+751.6 42.2
+752.8 60.6
+753.6 77.3
+754.6 113.7
+755.7 67.0
+756.6 52.6
+757.7 7.9
+758.9 21.3
+760.1 47.4
+760.7 35.0
+761.7 32.6
+763.3 43.0
+764.0 30.6
+765.0 47.7
+765.6 582.9
+766.6 116.9
+767.6 46.4
+769.1 29.6
+770.3 57.0
+771.2 63.5
+772.7 43.6
+773.6 20.2
+774.9 26.8
+776.1 47.7
+777.3 76.1
+778.7 379.7
+779.7 172.5
+780.6 49.0
+781.7 2.4
+782.7 47.5
+783.9 62.4
+784.6 1.6
+785.7 24.0
+786.4 34.8
+787.4 82.3
+788.5 32.8
+789.7 19.6
+790.6 38.2
+791.4 110.0
+792.4 59.8
+793.5 85.7
+794.5 70.2
+795.5 225.8
+796.5 112.1
+797.6 24.9
+799.0 21.1
+799.9 32.4
+801.0 22.2
+801.9 7.2
+802.8 70.6
+803.7 52.5
+804.8 30.6
+806.1 224.4
+806.7 269.5
+807.3 253.2
+808.3 147.0
+809.4 6.0
+810.1 25.9
+810.8 73.2
+811.7 62.6
+812.7 88.6
+813.4 113.4
+814.8 82.2
+815.7 31.7
+816.8 40.6
+818.0 31.1
+818.7 18.8
+819.6 31.3
+821.6 64.9
+822.6 31.5
+823.6 81.1
+824.6 20.1
+825.6 65.3
+826.7 50.4
+828.2 34.5
+830.1 50.3
+831.7 3459.2
+832.8 1108.2
+834.1 16.0
+835.1 57.9
+836.6 74.3
+837.7 15.5
+838.8 28.2
+839.5 22.2
+840.1 14.6
+841.5 39.5
+843.0 889.3
+843.8 133.6
+844.4 57.8
+845.2 29.2
+846.5 36.7
+847.7 63.5
+849.0 54.4
+850.0 57.4
+851.4 41.4
+852.8 84.8
+853.7 40.2
+855.0 109.2
+855.6 80.2
+856.4 41.9
+857.5 94.2
+858.8 124.9
+859.7 56.0
+861.0 47.5
+861.8 130.9
+862.8 240.3
+863.8 227.0
+864.8 115.1
+866.1 76.1
+866.8 87.7
+867.9 43.0
+868.9 26.0
+869.7 22.4
+871.0 98.6
+872.0 16.7
+872.8 42.3
+873.9 16.5
+874.7 37.3
+875.8 115.0
+876.6 66.8
+878.6 203.1
+879.7 69.4
+880.5 145.8
+881.3 77.2
+881.9 60.0
+882.7 37.0
+883.5 44.1
+884.4 85.7
+885.4 24.7
+886.5 105.5
+887.2 8.1
+888.2 56.1
+889.3 71.5
+890.3 272.0
+891.2 228.0
+892.1 102.8
+892.8 36.0
+893.7 4.2
+894.8 13.6
+895.7 16.3
+896.9 43.8
+898.0 93.6
+899.2 70.8
+900.0 259.3
+901.1 71.2
+901.7 56.5
+903.0 54.3
+904.2 37.2
+904.9 3.1
+906.7 289.4
+907.6 169.2
+908.6 343.5
+909.6 142.3
+910.7 18.0
+911.5 76.3
+912.3 118.9
+913.0 118.7
+914.5 154.0
+915.4 29.6
+916.1 15.2
+917.1 70.9
+918.0 23.3
+918.6 207.5
+919.3 216.3
+920.5 432.2
+921.4 393.5
+922.5 81.6
+923.7 88.5
+924.8 74.8
+925.6 374.8
+926.8 334.5
+928.1 188.8
+929.0 94.4
+929.7 55.3
+930.4 24.3
+931.2 46.5
+932.3 22.8
+933.5 49.4
+934.1 6.6
+934.8 16.5
+936.1 34.3
+937.0 28.1
+937.8 14.9
+938.8 39.0
+939.7 201.9
+940.5 37.9
+941.2 16.3
+942.5 24.7
+943.5 184.5
+944.7 165.5
+945.7 125.1
+946.8 39.0
+947.9 20.4
+948.7 22.8
+950.0 33.9
+950.9 3.2
+952.4 32.5
+953.2 10.1
+954.0 21.9
+955.3 43.9
+956.1 87.2
+956.8 103.1
+957.6 17.8
+958.7 76.3
+959.6 29.2
+960.8 25.0
+962.7 2297.0
+963.8 678.0
+965.0 163.5
+965.9 42.2
+966.6 27.0
+967.2 45.8
+968.3 78.2
+969.3 53.5
+970.2 127.3
+971.2 54.6
+971.8 53.7
+972.9 163.1
+973.7 165.7
+975.1 278.1
+975.8 90.8
+976.4 152.2
+977.5 204.5
+978.2 48.3
+979.1 87.9
+980.5 33.6
+981.5 36.9
+982.4 113.9
+983.4 59.3
+984.3 118.5
+985.2 37.7
+985.9 38.8
+986.7 17.1
+987.6 38.6
+988.8 56.5
+990.1 81.8
+992.7 48.9
+993.8 38.3
+994.6 17.6
+996.1 53.8
+997.0 22.7
+998.0 28.5
+999.7 45.1
+1000.4 17.1
+1001.7 26.1
+1002.8 22.5
+1003.7 54.0
+1004.4 8.3
+1005.1 52.8
+1005.7 12.8
+1006.6 26.5
+1007.7 85.3
+1008.7 116.9
+1009.5 33.3
+1010.5 3.3
+1011.8 59.6
+1012.9 101.7
+1013.9 50.2
+1014.6 24.8
+1015.6 7.7
+1016.2 5.5
+1017.9 18.7
+1019.4 52.0
+1020.8 1201.0
+1021.7 609.2
+1022.7 256.2
+1023.9 49.6
+1024.6 13.2
+1025.3 10.6
+1026.4 27.4
+1027.7 16.7
+1029.1 43.8
+1030.0 65.3
+1030.7 47.9
+1031.5 48.6
+1032.5 26.4
+1033.8 1314.2
+1034.8 465.8
+1035.7 17.5
+1037.0 61.0
+1037.7 82.0
+1038.7 205.8
+1039.7 83.0
+1040.6 25.3
+1041.2 26.4
+1042.0 9.9
+1042.9 6.0
+1044.1 31.8
+1044.9 7.7
+1046.0 14.6
+1046.7 26.6
+1047.6 13.7
+1048.2 42.4
+1049.1 16.9
+1050.4 13.6
+1051.5 22.0
+1052.7 45.2
+1054.7 204.7
+1055.7 78.4
+1056.7 337.7
+1057.6 156.0
+1058.7 67.9
+1059.9 26.6
+1062.3 52.6
+1063.8 6.9
+1064.7 11.5
+1067.1 14.4
+1067.8 12.2
+1068.7 20.4
+1069.9 47.8
+1070.6 19.4
+1073.7 77.4
+1074.8 24.3
+1075.9 28.1
+1076.9 17.7
+1077.8 17.2
+1079.0 47.5
+1080.0 2.9
+1080.7 13.8
+1081.7 26.0
+1082.9 14.5
+1084.1 3.2
+1085.0 7.5
+1086.1 36.2
+1086.9 89.3
+1087.7 53.8
+1089.3 21.9
+1090.7 73.1
+1091.8 33.2
+1092.8 6.0
+1094.1 19.9
+1094.8 2.8
+1095.6 20.8
+1098.7 2.9
+1100.7 33.3
+1101.5 14.3
+1102.9 120.2
+1103.9 57.6
+1104.6 2.8
+1107.0 9.6
+1108.6 15.5
+1109.7 10.8
+1111.6 3.2
+1112.8 10.5
+1113.6 3.4
+1114.7 13.4
+1115.7 8.0
+1116.4 11.9
+1117.8 33.0
+1118.8 26.2
+1120.8 4139.8
+1121.9 1637.9
+1122.6 52.1
+1123.7 15.0
+1124.4 5.1
+1125.1 14.4
+1125.8 3.0
+1126.8 19.4
+1127.7 4.9
+1130.5 20.1
+1132.0 8.6
+1133.8 350.8
+1134.9 163.0
+1135.9 100.9
+1136.8 62.1
+1137.8 72.1
+1138.9 20.4
+1139.7 27.2
+1141.8 28.9
+1142.7 5.1
+1143.9 4.5
+1144.6 8.1
+1145.7 14.6
+1146.6 19.3
+1147.8 16.1
+1149.2 4.1
+1151.6 68.2
+1152.7 104.4
+1153.9 33.2
+1155.8 58.8
+1156.9 50.0
+1157.7 60.0
+1158.7 17.2
+1160.2 23.8
+1163.7 24.9
+1166.1 9.6
+1168.4 6.2
+1169.7 260.7
+1170.8 132.2
+1172.8 10.2
+1173.6 5.4
+1174.7 64.4
+1176.0 20.6
+1176.9 14.3
+1177.8 12.2
+1183.1 21.2
+1183.8 23.3
+1184.7 59.8
+1185.5 118.9
+1187.0 26.2
+1187.8 10.9
+1190.8 9.9
+1192.0 64.3
+1193.1 9.3
+1194.0 3.9
+1194.8 6.7
+1195.9 6.3
+1197.9 4.7
+1199.1 19.4
+1199.7 15.5
+1201.1 53.3
+1201.8 198.2
+1202.8 148.0
+1203.9 59.6
+1204.9 11.8
+1206.0 6.8
+1206.9 3.8
+1212.2 10.0
+1212.9 5.5
+1213.8 7.0
+1215.2 24.6
+1216.1 36.2
+1216.8 17.1
+1218.0 14.7
+1219.8 1945.0
+1220.9 722.2
+1222.1 7.8
+1224.7 5.3
+1225.7 2.8
+1226.3 11.9
+1227.7 7.7
+1228.9 10.5
+1230.1 6.5
+1230.8 3.6
+1231.9 5.8
+1234.1 18.9
+1235.7 87.2
+1236.9 89.5
+1238.0 17.7
+1240.9 2.2
+1241.8 2.8
+1246.9 50.9
+1248.0 34.9
+1249.1 15.9
+1249.9 13.8
+1251.9 8.4
+1252.6 12.7
+1258.1 17.0
+1259.7 11.3
+1260.9 16.0
+1266.9 20.8
+1268.4 7.9
+1269.8 23.7
+1270.8 68.5
+1271.8 8.0
+1273.4 8.7
+1277.4 7.6
+1278.7 17.1
+1279.7 19.8
+1280.8 13.4
+1281.9 25.4
+1286.5 25.7
+1287.3 15.6
+1287.9 46.1
+1289.0 10.2
+1290.0 28.3
+1291.9 21.6
+1293.9 7.3
+1295.8 4.3
+1296.8 26.3
+1297.7 114.4
+1298.8 127.3
+1299.9 82.5
+1300.8 63.1
+1305.2 4.4
+1305.8 15.7
+1309.0 2.3
+1309.8 27.7
+1310.8 3.2
+1313.7 64.1
+1314.8 470.6
+1315.9 261.2
+1316.8 276.3
+1317.8 243.9
+1318.8 2.4
+1326.1 5.8
+1326.9 3.9
+1330.3 4.8
+1331.0 8.7
+1332.0 3.0
+1334.2 5.2
+1335.1 18.9
+1338.0 16.1
+1340.5 11.1
+1342.5 5.0
+1343.7 7.8
+1346.1 7.6
+1354.0 3.5
+1358.6 13.6
+1361.9 5.9
+1363.3 12.6
+1368.5 4.0
+1370.9 16.5
+1371.5 4.3
+1375.9 2.2
+1378.1 15.9
+1381.0 29.2
+1388.8 3.4
+1391.7 31.5
+1393.4 3.6
+1403.9 2.9
+1408.0 6.6
+1411.0 3.4
+1415.9 7.0
+1419.2 5.2
+1424.3 6.5
+1433.8 2.7
+1458.2 4.1
+1470.1 13.4
+S	28	28	613.26
+Z	2	1225.51
+175.1 37.6
+177.0 57.3
+178.2 2.9
+181.8 1.0
+183.2 8.6
+186.1 10.8
+187.1 22.2
+189.3 0.8
+192.2 3.6
+195.2 6.1
+197.0 0.8
+198.2 8.6
+199.2 5.0
+200.4 3.4
+201.1 14.8
+202.3 1.2
+203.0 1.9
+204.2 6.3
+205.1 6.8
+206.3 6.0
+207.3 5.1
+208.2 2.7
+209.1 0.7
+210.3 7.8
+211.0 5.2
+212.2 2.0
+213.2 1.3
+214.2 26.9
+215.4 12.2
+216.1 17.8
+217.3 2.7
+218.5 4.8
+219.2 0.6
+221.3 7.0
+223.1 17.2
+224.3 23.5
+226.2 40.9
+227.6 3.5
+230.1 34.2
+231.5 3.6
+232.4 12.4
+234.3 7.9
+236.3 2.4
+238.0 10.1
+239.2 9.7
+242.2 8.1
+243.0 2.8
+244.4 15.9
+245.2 6.7
+246.0 6.4
+248.1 68.5
+249.1 26.9
+250.2 14.3
+252.1 6.0
+253.2 12.5
+254.1 69.2
+255.4 31.9
+256.9 7.4
+258.1 1.0
+260.1 14.9
+261.2 5.8
+262.2 16.9
+263.4 3.6
+265.9 16.4
+267.1 40.8
+268.3 16.1
+269.2 13.5
+270.2 2.1
+271.3 50.7
+272.3 10.7
+273.2 6.0
+274.3 49.6
+275.2 22.0
+276.4 18.4
+277.4 29.7
+278.2 23.6
+279.5 1.1
+280.1 11.5
+281.3 33.7
+282.2 12.9
+283.2 18.1
+284.2 5.2
+285.2 8.9
+287.2 37.5
+288.4 1.9
+289.1 8.3
+290.4 3.2
+291.5 2.4
+292.2 5.2
+293.5 2.6
+295.2 3.5
+296.3 10.1
+296.9 1.9
+298.3 3.7
+299.2 69.1
+300.3 8.1
+301.3 16.4
+302.2 46.7
+303.1 50.5
+304.1 47.2
+305.4 14.0
+306.2 10.8
+307.4 10.6
+308.4 1.6
+309.7 5.6
+313.4 20.7
+314.5 5.7
+315.3 4.2
+316.1 5.7
+317.2 5.0
+319.2 285.1
+320.3 40.9
+321.3 39.4
+322.2 12.0
+323.3 217.6
+325.3 18.4
+326.2 10.2
+327.3 8.1
+328.0 1.0
+330.3 2.3
+331.5 2.2
+333.3 9.8
+334.3 4.3
+336.2 3.1
+337.3 31.5
+338.4 230.4
+339.4 12.9
+340.3 7.1
+341.4 47.7
+342.6 7.2
+343.4 44.9
+344.4 23.9
+345.3 0.8
+346.6 7.3
+347.4 0.6
+348.5 11.6
+349.3 65.1
+351.3 5.0
+352.3 4.5
+353.3 3.4
+354.5 17.3
+355.1 51.9
+356.3 50.4
+357.1 108.4
+358.3 36.5
+359.6 3.1
+360.4 11.0
+361.5 32.9
+362.5 6.2
+363.4 7.3
+364.4 2.6
+365.6 3.9
+366.4 12.1
+367.3 10.3
+368.4 4.7
+369.3 4.8
+371.3 7.1
+372.3 7.5
+373.1 7.6
+374.4 36.5
+376.4 106.9
+377.3 28.6
+378.4 12.0
+379.4 27.1
+380.1 1.1
+383.3 0.5
+384.1 3.1
+385.4 5.9
+386.4 19.9
+387.1 12.3
+389.2 68.0
+390.3 4.6
+391.5 1.7
+392.5 39.4
+393.5 11.7
+394.4 76.7
+395.4 5.1
+396.7 27.4
+397.5 14.9
+399.0 8.2
+400.5 2.3
+401.6 5.9
+402.5 13.7
+404.3 15.2
+406.3 5.3
+408.4 2.1
+410.3 5.0
+411.3 1.4
+412.3 55.5
+414.3 163.6
+415.2 4.9
+417.2 230.2
+418.3 29.7
+419.2 9.9
+420.3 5.6
+421.8 25.6
+422.4 146.4
+423.3 8.8
+424.0 5.7
+425.4 5.5
+427.3 20.9
+428.6 17.2
+429.4 9.2
+430.4 21.9
+431.4 29.1
+432.2 12.4
+433.6 18.8
+434.4 173.6
+437.4 2.0
+439.3 19.9
+440.4 94.5
+441.4 30.4
+442.3 7.6
+443.4 14.8
+444.3 20.1
+445.3 43.4
+447.3 103.8
+448.3 20.0
+449.5 3.6
+450.4 2.2
+451.4 3.1
+453.4 2.9
+454.3 12.4
+454.9 10.4
+457.4 57.8
+458.4 57.2
+459.3 16.0
+460.5 49.5
+461.6 33.0
+462.3 170.3
+463.3 194.5
+464.4 49.6
+465.4 10.7
+466.3 14.7
+467.4 1.5
+468.4 17.6
+470.4 7.1
+471.4 11.7
+472.5 21.4
+473.2 3.5
+475.9 19.3
+477.3 10.0
+478.6 3.7
+479.3 21.0
+480.3 46.6
+481.2 75.2
+482.5 11.1
+483.4 20.5
+484.4 12.0
+485.7 5.0
+486.4 7.0
+487.3 13.6
+490.0 93.0
+491.3 9.0
+492.4 8.1
+493.9 32.9
+494.6 8.9
+495.6 5.7
+496.5 9.8
+497.6 26.2
+498.8 24.3
+499.6 73.5
+500.4 47.5
+501.3 130.1
+502.8 52.5
+503.5 4.4
+504.6 2.1
+505.4 7.7
+507.7 169.1
+508.5 43.2
+509.2 9.0
+511.0 119.2
+512.1 51.5
+513.4 33.0
+514.2 35.3
+515.7 75.0
+516.6 485.4
+517.5 100.2
+518.7 67.3
+519.8 12.3
+521.2 10.4
+522.4 22.8
+523.4 3.3
+525.5 664.7
+526.5 19.2
+528.0 133.6
+528.9 21.9
+530.3 67.6
+531.2 72.1
+532.3 99.6
+533.7 74.5
+534.6 163.8
+535.5 61.3
+536.7 16.5
+537.4 73.5
+538.1 107.8
+539.1 16.1
+542.2 127.6
+543.1 112.1
+544.6 36.7
+546.2 154.6
+547.1 99.7
+548.2 164.4
+549.4 44.1
+551.2 687.6
+551.9 280.3
+552.6 45.8
+553.8 37.0
+554.5 165.7
+555.4 71.9
+556.4 66.5
+557.4 11.3
+560.1 1530.3
+561.0 238.0
+562.6 52.1
+563.6 26.4
+564.8 3.9
+565.7 17.6
+566.5 9.2
+567.8 25.1
+569.0 1838.6
+570.3 86.9
+571.1 24.6
+571.7 5.0
+572.7 26.8
+573.5 14.1
+574.2 13.9
+575.5 3.1
+577.6 102.1
+578.4 149.1
+579.4 283.9
+580.5 79.3
+581.9 18.7
+583.5 28.3
+584.5 94.4
+585.6 9.5
+586.4 75.1
+587.2 189.4
+588.4 97.1
+589.2 36.7
+590.6 34.0
+591.3 27.6
+592.4 8.9
+593.6 2.4
+594.4 127.2
+595.7 1138.9
+596.5 985.4
+597.5 587.4
+598.2 2.9
+599.0 1.3
+600.1 1.6
+602.4 15.6
+603.2 46.0
+604.5 2469.7
+605.6 73.1
+606.5 8.8
+607.1 13.6
+608.0 6.4
+609.1 1.8
+610.8 2.2
+616.6 14.3
+619.3 3.6
+620.9 9.6
+621.5 8.1
+622.5 1.7
+625.6 5.7
+629.6 0.8
+630.5 1.5
+631.3 6.5
+638.1 1.9
+639.4 4.2
+640.3 2.6
+642.4 25.8
+643.1 3.0
+646.4 2.2
+647.5 8.5
+648.3 0.9
+654.7 5.3
+655.4 2.6
+656.4 20.9
+657.2 35.6
+658.3 15.1
+659.4 4.1
+660.3 53.0
+661.4 10.4
+664.7 1.6
+665.5 1.0
+668.6 12.8
+672.3 2.5
+674.3 71.0
+675.4 66.4
+676.5 5.4
+678.3 328.1
+679.4 89.9
+680.1 5.4
+681.3 3.1
+682.4 1.3
+686.3 2.6
+688.5 3.5
+689.4 4.1
+690.5 21.0
+692.2 47.1
+693.5 12.7
+701.6 7.7
+706.5 21.5
+707.6 14.2
+709.5 5.1
+710.4 2.1
+711.5 7.3
+712.4 4.0
+713.2 2.7
+714.4 2.4
+715.4 0.6
+716.4 1.3
+717.9 1.2
+727.4 40.5
+728.5 58.3
+729.3 19.8
+731.6 18.5
+732.6 4.3
+734.1 0.6
+734.7 1.6
+736.5 5.3
+737.6 4.8
+740.8 4.9
+741.7 6.3
+743.7 4.6
+745.4 116.3
+746.4 57.1
+747.4 7.9
+748.6 4.5
+749.4 1.0
+758.4 3.6
+761.3 64.3
+763.3 98.1
+764.5 26.6
+765.8 4.2
+767.6 2.9
+771.5 3.9
+772.6 4.1
+775.6 5.5
+776.5 5.8
+779.5 435.9
+780.6 162.0
+787.2 11.7
+788.5 7.8
+789.6 10.7
+797.4 6.4
+798.4 5.7
+799.7 12.5
+804.7 8.0
+805.4 13.1
+807.5 13.5
+811.7 9.5
+813.3 4.9
+814.5 28.7
+815.4 32.2
+816.3 20.7
+817.4 7.7
+818.6 6.9
+819.6 8.3
+822.7 4.9
+824.5 9.7
+825.4 5.1
+830.8 5.4
+832.4 82.2
+833.5 113.2
+834.5 14.9
+835.3 2.7
+836.6 8.4
+841.6 2.3
+845.4 2.1
+849.2 4.7
+850.4 97.7
+851.5 41.3
+853.8 7.0
+854.5 1.1
+855.6 0.3
+856.6 1.3
+857.5 1.6
+858.3 5.2
+859.6 2.9
+860.4 1.6
+861.3 3.0
+862.5 2.3
+864.6 4.6
+865.2 3.0
+867.5 6.2
+868.4 7.1
+869.2 2.9
+871.3 10.3
+872.5 10.0
+873.5 9.4
+874.7 6.7
+875.5 2.3
+876.4 2.3
+878.4 5.4
+879.7 3.8
+885.2 17.8
+886.4 2.9
+889.7 51.9
+890.5 98.4
+891.4 33.4
+892.4 9.3
+894.5 2.9
+902.8 4.0
+903.9 9.6
+904.5 17.5
+905.5 5.9
+906.6 13.8
+907.6 297.9
+908.5 156.4
+909.1 1.4
+910.7 1.2
+911.4 3.9
+916.7 14.9
+918.7 2.1
+921.5 20.6
+922.5 15.5
+933.6 2.7
+935.2 8.7
+935.8 2.5
+936.6 9.5
+938.5 2.2
+941.8 5.9
+943.4 10.9
+944.1 2.3
+946.4 18.7
+948.5 3.7
+955.5 5.4
+956.7 4.3
+960.5 27.3
+961.5 41.2
+962.6 20.8
+963.9 12.3
+966.8 5.7
+969.2 9.3
+972.2 2.6
+973.4 35.1
+974.8 10.2
+978.5 416.2
+979.5 198.1
+987.5 0.8
+990.5 32.6
+991.5 47.8
+992.5 9.6
+994.7 1.9
+1003.6 1.0
+1004.7 4.3
+1005.7 2.3
+1006.6 13.0
+1008.1 38.3
+1008.9 31.1
+1012.5 0.9
+1013.7 1.6
+1014.5 13.8
+1015.7 5.0
+1021.1 5.0
+1022.8 3.2
+1023.6 7.9
+1029.6 2.7
+1030.5 36.6
+1031.4 59.0
+1032.6 98.3
+1033.5 43.3
+1036.6 5.6
+1037.8 4.6
+1043.6 1.1
+1045.6 17.3
+1047.0 3.1
+1049.5 766.8
+1050.5 351.8
+1051.3 1.9
+1053.4 1.7
+1054.5 12.1
+1055.4 14.7
+1060.4 4.7
+1062.5 1.2
+1063.5 1.5
+1074.6 10.6
+1075.9 4.9
+1079.4 5.3
+1080.7 3.0
+1086.6 2.0
+1091.9 0.9
+1104.9 4.0
+1111.5 2.5
+1118.8 1.7
+1120.5 2.4
+1122.7 1.8
+1127.9 1.6
+S	29	29	614.26
+Z	2	1227.51
+177.1 12.2
+180.2 1.9
+184.9 1.8
+198.0 1.7
+200.4 1.8
+207.4 1.4
+214.0 2.6
+215.0 3.6
+216.5 4.6
+217.3 1.7
+220.1 1.8
+221.2 8.9
+222.3 5.5
+223.3 11.9
+224.1 3.0
+227.1 0.7
+231.2 3.2
+238.6 1.5
+239.9 2.5
+248.2 10.9
+250.9 1.3
+251.8 2.3
+267.1 25.2
+268.1 16.3
+269.1 26.8
+270.2 22.9
+271.0 1.7
+272.4 0.7
+274.3 4.7
+276.2 5.0
+277.1 1.1
+281.9 10.5
+283.0 6.7
+284.2 18.6
+285.1 13.7
+285.8 0.6
+287.2 14.1
+288.2 0.9
+291.1 6.0
+297.2 3.7
+298.1 1.2
+298.9 2.5
+300.0 4.9
+300.9 9.8
+302.1 20.9
+302.7 0.4
+304.4 1.0
+307.2 4.9
+308.5 2.4
+315.3 1.7
+319.2 82.8
+320.4 16.3
+321.2 1.9
+323.3 9.1
+326.1 0.6
+327.1 1.5
+330.2 0.8
+331.4 1.3
+333.2 4.0
+336.2 0.5
+337.5 1.9
+339.4 2.5
+340.9 6.7
+349.0 3.6
+350.2 8.4
+352.2 1.3
+355.1 52.3
+356.1 166.8
+357.1 228.1
+358.1 149.7
+359.1 88.0
+362.2 0.2
+367.7 3.4
+371.1 11.7
+372.2 10.5
+373.1 13.7
+373.9 17.7
+375.0 1.9
+376.1 33.0
+377.0 12.8
+377.7 3.0
+378.4 1.5
+379.2 3.2
+380.5 2.7
+381.4 7.5
+385.6 4.3
+386.4 1.1
+389.0 2.5
+392.6 2.7
+395.0 1.1
+399.0 2.2
+401.3 7.4
+402.4 7.5
+404.2 7.8
+405.3 0.9
+412.3 7.9
+413.3 1.4
+416.2 1.6
+418.2 3.2
+419.0 3.2
+420.1 1.8
+423.3 2.5
+424.3 1.2
+427.3 4.4
+429.4 3.8
+431.1 10.3
+432.3 10.5
+437.1 14.9
+439.5 1.1
+440.4 3.0
+442.4 3.9
+444.3 8.6
+445.4 9.1
+446.3 7.5
+447.3 41.3
+448.2 12.9
+451.7 3.4
+455.0 4.2
+455.7 7.9
+458.9 13.0
+463.4 62.3
+464.3 11.8
+465.0 6.1
+465.9 6.0
+468.3 4.9
+469.8 5.2
+472.4 9.4
+475.4 4.8
+477.7 8.5
+478.5 1.0
+481.2 14.0
+483.2 5.1
+484.3 2.4
+485.7 10.4
+487.3 3.3
+488.0 7.7
+489.5 13.3
+490.7 26.3
+492.3 7.9
+493.2 3.9
+494.4 3.9
+496.7 6.2
+497.3 3.0
+498.6 6.5
+499.3 23.5
+500.2 13.1
+501.3 5.8
+502.9 23.4
+504.1 5.0
+505.3 1.9
+505.9 19.8
+507.2 20.7
+508.3 23.9
+509.5 5.5
+510.1 2.6
+510.9 8.3
+511.6 31.5
+512.8 1.0
+514.2 17.8
+515.0 4.7
+516.4 133.8
+517.3 51.3
+517.9 14.2
+518.9 5.7
+520.1 16.7
+523.1 2.0
+525.1 104.6
+526.0 90.9
+527.3 24.1
+528.5 35.4
+530.2 35.2
+531.5 17.0
+532.5 8.6
+533.8 19.0
+534.5 46.1
+535.3 21.2
+536.4 1.3
+537.5 33.2
+538.4 25.8
+540.7 5.3
+542.2 33.2
+543.0 45.6
+544.3 20.3
+546.1 54.1
+546.8 44.5
+547.5 16.6
+548.2 31.0
+549.5 21.1
+551.2 139.9
+551.9 114.6
+553.1 12.3
+554.0 11.2
+554.8 4.3
+555.6 14.7
+556.3 15.0
+560.1 477.5
+560.8 87.0
+561.5 64.1
+563.0 9.9
+564.4 2.2
+565.5 7.2
+568.8 416.1
+569.5 311.0
+570.5 20.3
+571.4 14.1
+572.6 11.2
+573.7 6.2
+574.4 4.6
+575.6 4.1
+576.7 6.2
+578.1 28.5
+579.5 34.6
+580.3 22.8
+581.1 18.0
+582.6 4.5
+584.1 19.2
+585.2 12.9
+586.7 66.3
+587.4 33.1
+588.2 79.4
+589.4 9.8
+590.4 11.7
+592.0 24.0
+593.3 1.3
+595.6 270.7
+596.4 136.5
+597.4 23.5
+598.3 24.0
+599.2 10.0
+600.5 6.8
+601.4 8.5
+602.3 2.7
+604.5 886.0
+605.5 270.8
+606.5 10.8
+607.4 7.1
+608.3 4.1
+614.3 11.1
+619.4 1.9
+621.3 2.9
+622.7 2.1
+623.4 1.1
+630.4 1.3
+632.2 1.6
+635.4 1.0
+639.4 5.4
+640.5 2.8
+642.4 2.7
+643.3 4.9
+644.5 5.4
+649.2 1.4
+651.9 4.3
+656.6 3.6
+657.3 13.6
+658.5 6.4
+660.5 17.5
+661.4 3.4
+674.2 16.6
+675.3 7.9
+676.4 6.0
+678.2 50.3
+679.3 32.6
+680.3 7.7
+681.0 3.6
+681.6 3.3
+685.0 4.4
+688.4 7.4
+690.3 9.9
+691.4 0.8
+692.5 27.4
+694.6 5.8
+695.4 1.8
+697.0 2.0
+701.1 7.2
+702.8 3.6
+706.5 16.7
+707.3 7.1
+710.2 2.2
+711.5 3.5
+712.2 1.6
+717.4 9.4
+718.5 4.7
+720.6 1.8
+724.4 1.9
+725.7 0.6
+727.4 20.9
+728.4 22.6
+729.4 17.5
+731.5 0.7
+734.9 6.7
+735.6 5.4
+736.3 2.1
+743.9 4.5
+745.3 45.9
+746.4 24.5
+747.6 8.8
+748.4 3.0
+750.6 1.7
+758.5 2.1
+760.1 3.6
+761.4 9.7
+763.4 40.4
+764.6 15.3
+765.6 0.3
+770.5 3.8
+773.5 1.4
+774.5 3.5
+778.6 4.2
+779.6 82.4
+780.4 38.1
+781.5 23.2
+782.4 2.0
+786.6 1.7
+788.3 6.2
+789.5 4.0
+796.0 7.1
+796.7 1.7
+798.5 1.8
+799.2 7.1
+800.2 11.6
+806.6 9.1
+811.8 9.4
+814.4 3.7
+815.2 14.5
+816.5 6.4
+818.6 10.3
+820.4 1.9
+822.6 6.3
+828.5 3.8
+829.3 5.6
+832.4 18.7
+833.3 19.3
+834.3 3.3
+835.5 4.2
+839.6 3.7
+846.9 9.6
+849.4 3.3
+850.5 44.6
+851.6 7.6
+852.5 7.0
+858.4 2.7
+860.8 2.5
+865.8 3.5
+867.8 1.5
+871.6 4.8
+872.4 0.5
+873.3 7.6
+874.1 4.4
+875.6 2.6
+878.8 2.1
+884.5 1.4
+885.5 1.3
+886.5 2.5
+887.5 7.3
+889.5 15.7
+890.5 33.1
+891.6 13.1
+903.2 10.5
+904.6 6.8
+907.6 96.8
+908.5 33.3
+909.6 28.2
+912.6 1.5
+916.4 4.1
+920.8 9.4
+921.7 2.7
+923.2 1.4
+927.4 2.2
+935.6 7.7
+944.2 5.6
+946.2 9.9
+946.8 3.1
+948.5 8.4
+951.4 1.8
+952.5 2.4
+954.3 3.0
+955.7 0.9
+956.5 5.8
+958.4 4.4
+960.6 2.3
+961.3 5.5
+963.4 1.0
+964.7 9.3
+968.6 4.4
+972.8 1.6
+973.6 2.8
+974.8 4.5
+978.4 113.2
+979.5 73.7
+980.4 23.2
+981.6 1.9
+990.2 2.1
+991.8 5.4
+992.6 8.2
+993.4 1.6
+1003.0 1.3
+1008.7 19.7
+1009.5 15.9
+1014.1 10.1
+1015.5 8.2
+1016.6 2.3
+1022.6 2.5
+1027.7 1.0
+1030.2 0.5
+1031.6 17.2
+1032.4 20.0
+1033.4 10.5
+1034.5 4.2
+1049.0 6.6
+1049.6 210.7
+1050.6 148.9
+1051.7 13.8
+1052.4 0.5
+1054.8 8.4
+1055.8 3.5
+1056.7 4.0
+1073.7 3.9
+1092.3 2.0
+1101.2 2.2
+1102.2 0.9
+1203.6 4.2
+S	30	30	715.07
+I	ID	215
+I	RTime	10.6204
+Z	1	715.07
+244.5 1.3
+247.9 1.6
+257.1 1.5
+262.1 1.6
+264.3 1.2
+271.9 3.5
+275.3 1.1
+283.1 2.0
+287.3 4.8
+289.4 2.0
+290.3 2.9
+307.1 3.5
+311.2 4.6
+342.2 1.5
+343.3 2.7
+357.4 2.7
+372.2 1.2
+376.1 2.5
+379.2 1.5
+385.3 7.0
+386.0 1.2
+412.4 2.0
+423.7 5.0
+426.2 1.6
+427.4 2.7
+429.0 1.2
+439.3 1.1
+444.1 1.5
+445.4 2.7
+447.1 2.4
+450.3 2.9
+453.4 1.2
+455.1 11.0
+456.2 2.7
+457.1 5.0
+471.3 4.0
+472.3 5.3
+476.3 8.3
+481.6 2.2
+483.5 3.7
+486.3 5.9
+493.1 2.5
+498.4 8.3
+500.2 12.5
+501.3 4.3
+505.2 2.0
+516.5 1.1
+522.4 5.5
+523.1 4.0
+524.5 1.2
+534.5 4.0
+537.7 4.1
+543.8 1.5
+550.0 5.8
+551.3 2.2
+553.6 2.2
+554.5 3.5
+555.4 5.6
+557.2 2.9
+558.1 5.1
+559.4 2.7
+561.3 2.2
+568.1 4.0
+580.1 1.2
+585.3 2.5
+587.2 3.0
+592.8 3.7
+602.3 1.7
+610.5 1.8
+616.7 1.3
+618.3 4.4
+636.0 1.7
+641.7 2.5
+647.2 2.7
+649.4 1.7
+650.5 5.0
+651.4 4.0
+653.5 3.5
+657.8 3.7
+658.5 2.0
+660.6 1.2
+663.3 2.0
+664.1 2.2
+670.9 13.3
+671.7 2.7
+674.9 5.4
+682.5 5.1
+684.2 2.0
+685.3 14.0
+686.0 2.2
+696.4 30.5
+697.4 30.8
+698.3 11.1
+699.6 7.3
+705.4 4.3
+706.6 19.5
+S	31	31	501.22
+Z	3	1501.64
+147.1 1.4
+152.1 6.4
+153.1 1.1
+156.0 0.8
+159.1 1.8
+169.2 0.6
+177.0 1.6
+187.2 0.9
+189.2 2.2
+192.0 0.7
+203.1 2.8
+206.4 4.2
+210.1 0.8
+212.2 1.4
+214.3 0.7
+215.3 2.2
+217.5 1.1
+223.1 0.4
+225.3 2.1
+226.3 2.8
+228.2 1.2
+229.4 4.9
+230.9 4.0
+232.2 2.7
+233.3 2.3
+235.2 2.0
+244.2 0.7
+246.3 5.3
+248.1 5.9
+251.2 1.0
+257.3 0.4
+258.1 4.2
+259.0 1.1
+261.2 0.7
+262.1 0.9
+266.3 1.1
+267.3 0.6
+268.2 4.1
+274.3 1.9
+276.2 19.2
+277.3 2.7
+284.0 0.6
+285.2 2.1
+287.3 5.4
+288.3 1.0
+291.3 1.8
+294.2 2.2
+296.2 4.4
+301.0 2.1
+302.2 14.2
+305.9 1.3
+309.2 0.6
+311.6 4.2
+314.4 0.8
+315.3 0.8
+317.0 1.6
+319.2 4.9
+320.3 0.4
+322.4 2.2
+328.3 1.5
+330.2 11.2
+331.0 41.9
+331.9 6.2
+333.5 8.1
+334.5 0.7
+335.9 2.2
+338.2 0.6
+339.3 9.5
+339.9 8.7
+341.0 5.1
+342.2 2.9
+343.0 2.0
+344.5 13.3
+346.2 5.2
+346.8 4.2
+348.3 2.6
+348.9 5.6
+349.8 0.8
+351.7 3.1
+353.4 28.7
+354.2 3.2
+355.0 1.1
+357.4 4.5
+358.3 0.9
+360.4 10.1
+362.0 32.1
+366.4 1.5
+372.3 2.9
+373.5 5.1
+376.3 16.5
+377.2 1.0
+378.2 0.5
+380.6 2.1
+381.3 41.4
+383.1 2.4
+386.7 4.7
+387.4 2.1
+388.6 0.6
+389.6 9.6
+390.6 32.0
+394.5 21.3
+395.3 11.5
+398.2 17.8
+402.3 3.8
+403.5 56.2
+404.5 10.2
+406.2 0.6
+410.1 9.3
+412.3 27.6
+413.0 5.1
+414.5 2.1
+415.8 6.8
+416.5 1.6
+417.3 5.5
+418.0 16.5
+418.8 4.9
+420.1 13.7
+421.6 7.3
+423.5 14.0
+424.2 8.4
+425.1 0.4
+425.7 3.7
+427.4 44.3
+428.5 2.9
+429.2 5.7
+430.1 3.3
+430.8 5.2
+432.0 63.7
+433.1 15.2
+434.9 5.2
+436.5 11.3
+437.9 3.1
+439.2 5.8
+441.1 39.9
+442.1 8.7
+442.9 3.4
+444.3 15.0
+445.1 27.1
+446.0 11.7
+447.1 10.5
+448.4 4.9
+449.6 11.6
+450.5 6.7
+451.2 18.4
+452.3 4.0
+453.5 3.0
+454.4 19.1
+455.5 6.6
+456.2 3.6
+457.6 16.1
+458.5 29.8
+459.3 8.7
+460.4 11.2
+462.0 6.7
+463.3 91.2
+464.4 21.5
+465.3 28.0
+466.1 27.4
+467.0 23.2
+468.1 10.6
+468.8 16.2
+470.1 20.5
+471.1 25.2
+471.9 37.0
+472.8 7.6
+474.0 36.8
+475.0 67.5
+475.8 37.6
+476.9 13.4
+477.7 30.0
+478.5 1.2
+479.4 5.0
+480.6 6.7
+481.3 3.2
+482.4 33.4
+483.3 129.3
+484.3 79.6
+485.4 3.8
+486.6 3.9
+487.3 7.3
+488.6 29.6
+489.4 1168.4
+490.6 14.1
+491.4 28.0
+492.2 68.7
+493.2 15.6
+494.5 34.2
+495.8 4.1
+496.5 7.6
+500.3 14.1
+502.4 4.0
+503.1 2.0
+506.7 4.6
+509.1 2.8
+510.7 10.6
+511.5 9.0
+514.6 8.2
+516.1 5.8
+518.3 7.2
+519.0 17.6
+520.2 23.2
+521.0 15.7
+521.9 6.0
+523.4 1.9
+524.2 0.7
+525.4 5.1
+526.2 1.1
+531.4 4.3
+532.0 4.8
+534.3 70.6
+535.5 15.2
+536.3 8.7
+538.6 1.0
+539.4 3.0
+540.0 0.8
+541.4 1.9
+544.6 2.9
+545.8 6.6
+548.1 3.5
+551.5 8.1
+552.7 2.0
+554.3 14.8
+555.4 15.5
+556.4 0.7
+558.2 3.2
+559.3 0.9
+560.8 13.7
+563.4 13.1
+565.9 2.1
+567.7 1.6
+568.9 5.3
+571.3 17.2
+572.2 0.5
+573.3 1.8
+574.4 6.2
+575.5 1.4
+576.2 14.0
+577.4 3.7
+578.4 3.1
+580.5 9.0
+581.9 8.4
+583.2 0.6
+584.9 24.8
+586.4 1.5
+588.6 1.4
+590.6 1.3
+592.1 10.3
+594.5 25.0
+595.4 15.2
+596.6 10.9
+598.2 0.6
+598.9 2.7
+599.6 1.5
+600.6 3.6
+603.4 6.0
+604.4 41.7
+605.4 19.4
+607.7 5.7
+609.3 6.0
+612.2 7.9
+613.5 25.7
+614.3 11.8
+616.3 0.8
+617.0 2.9
+618.7 11.4
+620.3 11.6
+621.4 45.7
+622.6 8.4
+623.8 33.2
+624.6 32.9
+625.6 5.2
+626.3 1.1
+627.6 15.8
+628.3 4.6
+629.4 0.8
+630.9 4.8
+631.7 17.7
+632.5 2.0
+633.3 1.9
+634.8 4.5
+635.5 9.6
+636.3 4.3
+637.3 1.8
+639.3 6.1
+640.0 29.1
+641.0 24.8
+642.3 6.2
+643.2 5.3
+646.3 2.1
+647.3 2.4
+649.2 38.0
+650.1 9.8
+650.9 3.1
+653.1 7.8
+654.3 3.3
+655.2 2.6
+657.0 7.7
+658.5 0.4
+659.6 3.8
+660.6 21.3
+661.5 6.3
+663.0 33.3
+664.1 14.7
+665.2 8.8
+666.5 2.3
+668.9 12.7
+670.1 0.9
+671.2 1.0
+673.3 8.3
+674.0 5.6
+675.2 3.9
+676.7 6.3
+677.5 5.5
+678.4 41.6
+679.4 25.5
+680.0 0.2
+681.1 1.0
+682.6 1.8
+684.0 6.0
+685.0 2.1
+685.9 7.1
+688.7 1.5
+689.9 4.8
+690.5 5.4
+691.4 2.1
+696.3 4.6
+697.5 14.5
+698.3 9.7
+699.1 1.2
+700.4 2.6
+701.4 1.3
+702.2 1.0
+705.5 6.3
+706.5 68.8
+707.6 21.5
+709.4 2.2
+712.2 0.9
+715.4 11.0
+717.4 2.3
+722.3 49.6
+723.3 14.5
+725.5 4.9
+726.5 7.0
+734.4 1.4
+735.7 1.2
+737.5 2.7
+740.2 1.3
+743.4 3.9
+745.4 3.6
+747.5 2.7
+748.6 1.8
+749.2 2.1
+752.3 3.4
+755.7 0.6
+761.4 23.4
+762.4 15.9
+763.5 0.6
+767.4 2.3
+773.1 1.1
+778.9 1.6
+779.5 32.7
+780.5 23.0
+782.3 3.0
+787.1 1.7
+794.6 0.9
+805.4 5.8
+815.7 1.4
+821.6 2.2
+823.4 12.4
+824.4 4.3
+825.3 2.2
+826.7 1.3
+827.6 3.6
+829.0 1.2
+831.5 1.9
+832.5 2.0
+833.4 5.9
+836.3 1.5
+839.4 9.0
+841.6 1.0
+842.6 2.5
+847.1 6.1
+848.5 4.2
+849.4 0.8
+850.5 5.1
+853.3 1.7
+857.2 1.7
+862.2 1.0
+862.9 1.4
+863.6 2.4
+865.5 5.2
+867.0 0.2
+867.7 1.6
+868.5 3.4
+872.6 18.3
+873.6 1.9
+875.6 1.4
+876.4 1.9
+880.5 6.7
+883.7 1.4
+885.8 2.1
+888.9 0.9
+890.4 7.6
+892.0 0.4
+892.7 1.3
+893.7 1.9
+907.9 1.2
+910.3 3.6
+916.6 5.0
+918.6 0.5
+935.5 0.9
+937.7 3.0
+951.9 0.9
+969.7 1.1
+S	32	32	1032.79
+Z	3	3096.35
+303.4 2.7
+307.3 1.1
+317.1 0.7
+325.3 5.1
+326.3 2.6
+330.4 7.7
+338.9 2.9
+341.2 2.4
+342.1 2.3
+343.3 1.3
+369.5 2.6
+372.2 4.9
+380.2 1.2
+387.5 4.8
+389.2 2.2
+390.5 0.3
+397.3 1.8
+407.0 1.8
+411.4 6.3
+412.3 1.9
+413.2 2.4
+415.3 4.3
+423.3 1.5
+431.6 1.3
+437.2 0.5
+442.4 2.1
+443.2 3.8
+451.3 2.2
+453.3 2.0
+454.1 2.1
+466.0 3.7
+469.6 6.0
+470.5 0.9
+476.4 0.9
+480.6 2.4
+485.3 7.6
+487.1 0.5
+494.7 7.6
+497.5 2.6
+499.2 0.2
+501.7 2.8
+504.4 9.1
+509.2 1.3
+512.1 0.7
+512.9 1.8
+514.2 1.9
+524.3 4.4
+525.1 4.5
+526.4 2.3
+527.4 2.8
+528.4 1.5
+530.4 3.5
+534.5 1.6
+535.3 3.4
+543.5 0.5
+544.7 1.0
+551.8 2.8
+552.4 0.5
+553.8 2.4
+558.1 0.6
+559.4 4.4
+567.3 1.2
+572.0 29.2
+572.9 3.8
+575.4 1.3
+578.0 4.9
+580.3 2.2
+582.3 3.7
+583.3 0.8
+584.0 1.6
+585.5 0.4
+590.6 1.0
+601.4 0.9
+605.5 0.4
+607.8 23.8
+608.5 6.2
+616.1 1.6
+617.5 1.2
+618.6 8.7
+619.4 4.8
+620.6 0.6
+624.2 3.6
+629.3 1.2
+631.3 1.0
+634.0 2.7
+638.7 2.8
+640.3 1.3
+645.6 1.6
+653.7 2.0
+655.3 1.9
+657.0 1.2
+665.6 0.7
+666.3 4.6
+673.0 1.0
+674.4 7.7
+675.5 1.4
+683.4 4.0
+687.5 1.8
+689.4 36.5
+690.4 18.5
+691.3 2.4
+693.4 8.6
+696.6 2.9
+698.9 3.2
+703.2 0.5
+704.2 2.5
+706.7 7.0
+707.4 5.3
+710.2 2.4
+711.3 6.4
+712.9 2.9
+713.6 5.3
+714.5 4.9
+719.1 4.2
+725.9 0.9
+727.6 2.0
+729.4 2.7
+731.3 1.3
+736.5 3.3
+737.6 8.3
+742.2 1.8
+744.7 3.4
+746.1 3.7
+748.0 2.9
+749.2 6.2
+750.4 1.4
+752.0 0.5
+753.4 4.7
+758.2 2.5
+759.4 2.3
+762.3 26.0
+763.2 0.7
+764.3 6.3
+765.3 8.8
+769.4 18.4
+770.8 33.5
+771.4 19.3
+772.2 19.7
+773.8 3.9
+778.0 288.9
+778.7 256.3
+779.7 13.6
+780.6 2.8
+782.4 6.1
+784.2 1.7
+785.4 4.8
+794.4 3.2
+796.3 4.6
+799.2 3.7
+802.6 26.7
+803.5 7.9
+806.2 7.6
+810.6 10.5
+814.6 3.3
+815.7 0.6
+817.4 1.1
+820.8 2.0
+821.5 1.3
+822.1 1.1
+823.3 3.7
+824.3 9.3
+826.4 1.8
+827.5 5.8
+828.7 0.3
+833.4 38.0
+834.0 2.9
+836.8 0.8
+840.6 1.0
+842.3 82.2
+843.3 27.5
+845.5 6.6
+847.0 0.3
+848.2 6.3
+849.2 3.0
+850.2 4.9
+854.1 1.1
+855.5 4.4
+858.3 2.8
+859.1 0.7
+861.6 5.4
+863.6 5.0
+864.5 2.5
+867.1 1.8
+868.7 1.4
+869.5 5.2
+870.4 3.3
+874.2 5.3
+878.3 11.4
+879.7 9.6
+880.5 2.9
+881.5 5.1
+882.3 1.1
+883.6 4.6
+884.7 3.7
+886.4 0.6
+888.7 3.2
+889.9 12.0
+890.5 1.8
+892.2 4.1
+893.6 2.3
+894.2 4.0
+895.8 6.5
+896.8 1.4
+898.7 2.8
+899.7 7.2
+900.6 0.2
+901.4 1.2
+902.5 7.2
+905.8 3.8
+907.5 3.9
+911.2 4.1
+912.6 9.0
+914.3 0.5
+915.4 6.5
+917.5 16.1
+918.6 13.7
+919.5 3.5
+922.8 15.9
+923.6 3.3
+925.2 1.6
+926.3 3.1
+927.7 10.0
+928.6 0.5
+929.3 3.6
+930.6 1.9
+931.6 19.5
+932.4 17.1
+933.2 5.0
+934.1 4.1
+935.7 2.6
+936.4 3.1
+937.2 3.7
+938.2 4.2
+940.3 359.4
+941.3 143.9
+942.4 14.0
+943.7 4.7
+944.8 6.8
+946.0 18.6
+947.2 12.0
+948.1 8.5
+950.8 2.4
+952.2 8.9
+953.0 12.0
+956.1 15.1
+957.2 21.3
+958.0 1.3
+959.3 7.9
+960.7 12.4
+962.4 14.2
+963.5 7.4
+964.9 5.0
+966.6 7.4
+967.8 20.4
+968.9 12.1
+970.5 3.4
+971.4 1.3
+972.3 0.9
+973.8 3.8
+974.6 26.3
+975.5 5.3
+977.3 118.0
+978.1 85.3
+979.1 16.3
+980.0 24.1
+980.6 2.8
+981.6 3.2
+982.2 5.6
+983.3 3.8
+984.1 17.6
+984.9 8.3
+985.9 3.8
+986.7 0.6
+987.5 3.8
+988.9 2.5
+990.6 13.4
+991.4 4.6
+992.5 12.5
+993.6 16.5
+994.4 1.7
+995.8 9.8
+996.8 21.2
+997.9 9.7
+998.6 30.1
+999.3 24.4
+1000.0 7.3
+1000.7 14.8
+1001.6 8.8
+1002.3 18.4
+1003.3 22.4
+1003.9 31.6
+1005.0 2.7
+1006.1 0.8
+1007.5 14.1
+1009.5 23.5
+1010.2 26.4
+1010.9 13.7
+1011.5 21.9
+1013.4 16.2
+1014.4 25.7
+1015.4 23.8
+1016.7 24.5
+1017.6 10.2
+1018.6 14.7
+1020.4 2.1
+1022.3 9.3
+1022.9 5.9
+1028.6 1.5
+1029.6 3.3
+1033.7 5.9
+1035.0 10.0
+1042.1 4.6
+1043.8 3.9
+1048.9 9.8
+1050.4 4.4
+1051.6 0.4
+1052.2 4.2
+1057.7 0.8
+1059.8 3.5
+1067.8 1.3
+1068.4 3.4
+1069.4 2.6
+1070.6 1.4
+1072.2 5.5
+1075.3 1.2
+1075.9 0.6
+1077.3 6.1
+1078.2 9.1
+1078.8 0.4
+1079.5 2.8
+1083.7 0.4
+1085.0 11.7
+1087.5 2.4
+1088.3 1.3
+1089.8 7.5
+1090.6 13.3
+1095.2 2.4
+1097.4 0.8
+1105.7 0.9
+1108.6 12.9
+1114.0 4.8
+1114.7 3.6
+1117.1 9.1
+1119.5 1.2
+1123.7 3.8
+1125.0 0.8
+1126.7 3.3
+1130.4 4.1
+1131.7 2.3
+1133.2 6.4
+1133.8 6.3
+1137.7 0.4
+1138.6 5.4
+1142.5 72.0
+1143.6 68.3
+1144.5 2.6
+1145.6 11.0
+1146.3 4.0
+1148.3 13.5
+1150.8 2.7
+1154.5 2.0
+1158.5 27.1
+1159.3 15.2
+1161.2 6.2
+1162.0 9.8
+1162.7 2.5
+1164.3 4.4
+1166.2 10.1
+1167.6 20.2
+1168.9 1.6
+1169.6 2.2
+1171.7 1.8
+1174.4 3.3
+1178.2 3.6
+1179.1 7.5
+1180.2 0.9
+1181.0 0.8
+1183.6 3.8
+1185.2 4.4
+1186.2 14.8
+1188.3 4.8
+1194.5 22.4
+1195.7 12.9
+1197.5 6.4
+1198.4 22.3
+1199.2 47.5
+1200.5 14.1
+1201.7 4.7
+1203.8 27.7
+1204.5 47.9
+1205.6 17.3
+1206.6 5.7
+1207.6 11.9
+1208.7 1.3
+1211.3 1.5
+1213.3 22.4
+1214.0 7.4
+1214.6 12.8
+1216.4 183.6
+1217.6 105.5
+1218.7 15.9
+1219.5 10.7
+1220.4 0.7
+1221.6 4.2
+1225.7 4.0
+1227.8 1.9
+1233.6 13.4
+1234.3 3.1
+1235.5 4.9
+1238.3 2.2
+1239.4 19.5
+1240.1 29.0
+1240.7 4.8
+1242.8 14.4
+1244.8 0.5
+1247.0 6.9
+1247.6 9.6
+1248.2 31.7
+1249.2 4.8
+1250.6 9.6
+1255.5 3.7
+1256.1 2.2
+1258.8 0.4
+1260.3 2.8
+1262.8 11.9
+1265.5 1.9
+1267.0 4.0
+1271.8 1.2
+1273.3 3.9
+1274.3 5.0
+1275.7 2.0
+1277.7 21.4
+1278.6 8.3
+1283.7 20.7
+1284.4 8.1
+1291.8 1.6
+1296.5 28.6
+1297.6 5.9
+1298.5 12.8
+1300.7 4.4
+1302.7 4.9
+1306.6 3.3
+1307.5 0.6
+1309.3 6.1
+1310.1 4.4
+1311.8 4.8
+1313.7 1.6
+1314.6 1.0
+1316.8 0.5
+1318.1 8.8
+1320.0 12.3
+1322.6 0.6
+1324.3 3.1
+1326.0 3.6
+1328.2 12.7
+1328.9 2.5
+1329.7 14.4
+1331.7 5.6
+1333.3 50.7
+1334.4 10.0
+1335.6 1.6
+1336.2 7.3
+1338.2 4.8
+1340.0 6.5
+1342.0 64.2
+1342.7 68.2
+1344.7 4.1
+1345.8 3.8
+1350.9 1.4
+1353.4 1.6
+1354.2 3.5
+1355.6 27.0
+1356.3 9.5
+1357.0 1.4
+1358.6 5.6
+1362.0 11.7
+1362.9 21.4
+1363.9 8.9
+1365.4 0.9
+1369.4 11.1
+1374.7 3.5
+1377.3 6.1
+1379.7 1.5
+1381.3 6.0
+1384.7 2.8
+1389.1 0.8
+1390.6 1.3
+1391.4 5.9
+1394.6 13.1
+1395.5 3.2
+1396.2 20.7
+1397.6 8.0
+1406.8 10.6
+1408.7 2.0
+1410.0 13.4
+1411.0 2.3
+1412.1 14.1
+1412.7 38.4
+1413.6 43.7
+1414.8 16.0
+1416.0 7.7
+1416.9 2.3
+1418.5 13.6
+1419.2 9.8
+1420.4 6.6
+1422.0 7.3
+1425.0 6.8
+1425.7 3.4
+1428.0 9.6
+1431.8 12.2
+1433.6 3.2
+1434.9 3.5
+1436.5 5.8
+1437.2 4.5
+1439.3 1.3
+1440.2 14.4
+1441.7 0.8
+1445.1 0.5
+1447.1 7.3
+1449.5 1.5
+1453.9 8.8
+1457.0 0.4
+1457.8 1.3
+1461.2 1.0
+1461.8 0.2
+1463.5 5.1
+1464.2 10.0
+1465.8 5.7
+1469.5 0.5
+1470.6 6.6
+1471.7 3.1
+1472.5 8.9
+1473.8 10.1
+1474.7 16.9
+1475.5 2.5
+1476.2 19.9
+1477.2 0.4
+1480.4 2.0
+1488.7 4.9
+1489.5 3.8
+1491.1 4.3
+1492.5 8.5
+1505.8 1.5
+1508.8 0.3
+1516.9 0.6
+1518.7 1.8
+1519.7 1.1
+1520.7 7.4
+1522.7 21.7
+1523.7 17.9
+1524.8 4.8
+1525.9 0.2
+1527.7 2.0
+1536.8 9.9
+1538.7 2.2
+1540.6 148.2
+1541.6 82.9
+1542.6 68.0
+1543.8 19.3
+1544.7 0.5
+1553.1 1.3
+1554.8 61.6
+1555.6 55.8
+1556.7 36.8
+1557.8 15.1
+1564.6 4.5
+1571.7 2.5
+1573.5 1.9
+1577.6 0.3
+1582.1 1.8
+1582.8 1.8
+1584.1 1.8
+1585.9 2.3
+1602.7 2.2
+1619.6 4.8
+1620.4 2.9
+1624.5 9.0
+1627.0 2.8
+1629.4 0.5
+1633.8 1.1
+1636.7 2.8
+1658.3 0.7
+1665.9 3.0
+1682.6 7.7
+1683.8 4.3
+1688.9 2.2
+1701.9 1.1
+1703.6 2.9
+1715.9 1.2
+1716.9 0.5
+1718.9 1.1
+1721.1 1.2
+1725.9 4.0
+1734.0 4.6
+1740.2 1.3
+1747.8 2.0
+1756.0 1.1
+1759.8 0.8
+1763.0 3.2
+1766.7 10.5
+1783.7 0.3
+1785.2 0.7
+1789.9 0.7
+1791.4 0.3
+1799.1 5.3
+1800.1 9.1
+1801.7 1.3
+1812.5 0.7
+1840.0 0.5
+1864.8 3.3
+1875.4 2.8
+1879.1 2.8
+1881.7 7.2
+1882.7 3.2
+1883.9 4.8
+1896.4 3.5
+1901.9 3.5
+1903.1 1.4
+1904.0 1.6
+1911.6 4.3
+1912.3 2.8
+1913.0 7.0
+1913.7 4.9
+1915.8 2.1
+1934.2 1.8
+1935.7 3.9
+1936.9 1.0
+1943.9 3.6
+1948.3 1.1
+1949.0 0.3
+1952.8 5.2
+1954.4 4.8
+1955.2 1.0
+1973.6 2.6
+1974.5 1.6
+S	33	33	433.79
+I	ID	58
+I	RTime	2.6604
+Z	2	866.57
+Z	3	1299.35
+140.8 1.3
+150.9 2.2
+171.2 3.0
+198.8 4.5
+216.5 4.0
+235.0 2.4
+240.2 5.3
+247.2 4.4
+249.0 3.0
+257.1 2.0
+258.9 1.6
+271.1 1.8
+274.8 6.3
+277.4 1.8
+279.6 1.5
+282.6 3.9
+287.6 4.3
+288.6 5.0
+289.3 3.2
+293.1 5.0
+299.3 2.2
+303.5 2.7
+305.0 3.9
+306.0 6.0
+306.9 2.2
+316.0 2.0
+319.1 1.6
+321.0 10.1
+322.0 6.6
+323.0 1.7
+326.1 5.5
+327.2 6.4
+329.3 1.7
+335.0 10.3
+336.0 1.0
+336.8 1.0
+338.6 9.1
+343.0 25.6
+344.0 16.0
+345.1 43.0
+348.9 1.6
+355.0 11.8
+358.3 3.0
+359.2 2.7
+360.8 24.7
+362.0 15.3
+362.7 18.2
+365.0 1.2
+366.6 11.5
+373.3 1.6
+374.5 7.1
+378.8 1.2
+381.0 2.0
+382.4 6.9
+386.7 5.6
+389.9 4.1
+397.9 16.7
+399.4 8.8
+401.1 3.0
+403.4 1.0
+406.8 0.8
+408.0 16.7
+413.2 12.0
+413.9 0.8
+415.0 27.2
+416.1 6.0
+417.0 10.6
+421.4 11.5
+423.8 11.1
+425.6 8.1
+434.8 1.7
+468.3 1.7
+476.9 8.0
+480.4 1.5
+483.7 5.5
+486.2 21.5
+490.8 17.0
+496.3 5.0
+497.0 6.9
+501.1 3.7
+505.4 20.2
+508.2 9.8
+509.5 9.8
+512.6 17.3
+514.7 6.1
+520.4 5.1
+523.4 7.3
+525.0 10.3
+527.4 15.3
+529.8 6.5
+535.8 4.4
+538.6 57.7
+559.1 4.3
+572.1 6.4
+582.1 15.1
+596.3 3.4
+682.5 3.5
+711.0 3.9
+S	34	34	750.92
+Z	2	1500.83
+213.1 1.9
+216.1 8.9
+218.0 0.5
+223.3 3.1
+225.2 1.1
+226.4 5.2
+228.3 9.3
+229.2 4.8
+230.5 9.8
+231.3 12.5
+238.6 4.5
+239.3 3.1
+240.1 0.7
+241.2 10.9
+243.1 1.0
+244.2 1.4
+248.3 4.0
+253.3 1.1
+254.3 4.6
+255.2 2.0
+256.2 10.5
+257.3 0.8
+258.2 16.0
+258.9 2.4
+265.2 0.4
+266.2 10.0
+268.1 2.1
+268.9 13.2
+270.4 4.5
+271.4 6.4
+272.4 7.2
+273.1 2.3
+274.2 1.2
+276.3 108.7
+277.3 11.9
+282.2 6.8
+284.4 2.7
+285.2 0.7
+286.2 5.0
+287.3 28.2
+288.3 11.1
+292.2 2.1
+293.1 2.4
+293.7 6.8
+297.3 7.7
+299.3 17.7
+301.4 1.5
+303.2 6.9
+310.2 1.6
+311.3 6.2
+313.4 5.6
+314.5 10.5
+315.1 8.4
+316.2 2.8
+317.2 8.1
+319.1 13.5
+320.3 9.4
+324.2 9.4
+326.2 2.5
+327.2 12.3
+328.4 13.6
+330.1 6.4
+330.9 4.3
+332.5 1.6
+335.3 7.4
+336.2 2.7
+337.6 3.2
+338.3 4.6
+339.4 6.7
+340.3 10.2
+341.2 2.3
+342.3 2.8
+344.6 5.2
+346.2 9.1
+350.6 6.5
+351.3 2.0
+352.7 2.5
+356.6 6.8
+358.3 24.4
+359.5 8.8
+360.7 2.6
+361.5 4.0
+364.2 3.3
+367.1 5.1
+368.2 6.2
+369.4 6.7
+370.6 9.3
+372.3 15.2
+373.1 26.8
+374.4 11.8
+376.2 31.4
+377.3 17.4
+382.5 3.4
+384.4 13.5
+385.7 20.2
+386.4 21.2
+387.5 4.2
+388.5 1.0
+389.5 5.0
+390.4 49.9
+391.4 9.4
+392.5 2.7
+395.4 8.2
+396.4 6.5
+398.4 6.8
+399.3 5.6
+400.3 5.1
+402.4 7.7
+403.3 2.6
+405.5 6.8
+406.5 0.5
+410.1 11.3
+411.4 1.3
+412.2 5.3
+413.3 5.7
+414.5 1.8
+415.3 5.0
+417.6 0.6
+418.2 0.6
+419.3 2.5
+420.4 12.5
+421.3 6.4
+422.4 20.9
+427.2 2.5
+428.2 8.4
+429.3 16.8
+430.5 7.2
+431.4 15.8
+432.3 7.4
+434.5 2.9
+435.2 15.8
+438.1 3.0
+439.6 10.2
+440.3 17.1
+442.6 5.4
+443.6 9.3
+445.2 17.4
+446.3 7.0
+447.5 28.2
+449.1 3.9
+451.3 2.8
+452.4 8.0
+453.6 1.6
+455.3 21.2
+456.3 19.6
+458.1 6.7
+458.8 0.4
+459.5 2.2
+461.5 4.6
+462.2 5.0
+463.3 90.9
+464.3 11.0
+465.5 11.4
+466.5 1.5
+469.2 7.0
+470.2 18.9
+471.4 8.3
+473.5 19.6
+474.6 11.2
+475.9 18.8
+476.6 1.6
+477.6 11.0
+480.3 4.1
+483.8 17.5
+484.8 14.5
+485.6 31.9
+486.3 13.2
+487.1 8.3
+489.0 2.2
+491.4 2.6
+492.4 2.7
+495.6 8.7
+496.4 1.7
+497.4 4.9
+498.7 4.6
+500.5 9.1
+502.4 26.4
+503.5 4.7
+504.9 12.9
+505.5 5.1
+508.5 30.5
+509.5 13.6
+512.3 5.2
+513.7 6.5
+514.5 5.6
+515.3 4.6
+516.1 12.1
+516.7 12.9
+518.6 12.0
+520.1 8.2
+522.4 5.4
+523.5 5.0
+526.5 38.1
+527.4 13.1
+528.5 20.7
+529.7 2.9
+530.5 13.2
+531.3 11.1
+532.5 21.9
+533.4 33.4
+534.4 35.1
+535.5 9.7
+536.6 12.6
+537.4 8.6
+538.6 4.3
+539.6 13.0
+541.8 17.8
+542.5 3.4
+543.3 10.9
+545.3 22.2
+546.1 22.4
+547.9 15.9
+548.6 93.6
+549.6 29.0
+550.4 8.4
+551.6 10.0
+553.1 17.7
+554.5 20.0
+555.1 15.3
+556.2 9.0
+557.8 17.4
+558.9 16.1
+560.3 23.0
+561.6 2.2
+562.4 7.3
+563.4 25.6
+566.5 21.5
+567.5 2.8
+568.2 1.9
+569.0 27.8
+570.6 11.3
+571.4 21.6
+572.6 28.4
+573.4 2.7
+574.0 8.3
+575.5 6.0
+576.7 25.0
+577.4 31.3
+578.2 13.2
+578.9 30.5
+579.5 12.4
+580.9 33.4
+581.9 14.5
+583.5 12.9
+584.3 4.5
+585.9 47.9
+586.6 14.1
+587.4 35.0
+589.3 47.8
+590.8 13.9
+592.1 53.8
+593.5 8.8
+594.4 84.6
+595.4 30.4
+596.4 5.5
+598.4 74.0
+599.3 20.5
+600.3 38.1
+601.3 36.5
+602.0 17.6
+603.3 60.2
+604.4 22.7
+605.4 8.2
+606.7 18.7
+607.5 12.5
+609.4 41.4
+610.5 23.3
+611.6 17.5
+612.2 9.2
+613.2 23.0
+614.1 11.7
+614.8 17.7
+615.4 9.5
+616.1 7.1
+618.4 122.0
+619.0 85.6
+619.7 32.3
+620.6 14.7
+621.3 65.8
+622.1 41.6
+623.1 12.0
+624.2 28.7
+625.5 21.8
+627.4 186.4
+628.1 158.0
+629.2 16.9
+630.4 39.9
+631.3 77.9
+632.1 94.0
+633.2 31.1
+634.1 28.2
+635.6 34.1
+636.6 47.7
+637.8 22.5
+639.2 28.7
+640.3 63.4
+641.5 35.8
+642.5 21.5
+643.9 35.4
+645.4 132.7
+646.7 43.9
+648.2 288.1
+649.1 133.6
+650.0 23.2
+650.7 6.2
+651.5 0.9
+652.5 6.0
+654.1 510.7
+655.1 233.2
+656.4 16.8
+657.4 20.2
+658.4 6.0
+659.5 18.5
+660.4 48.3
+661.6 40.3
+662.9 499.4
+663.6 377.2
+664.7 25.3
+665.6 78.4
+666.3 14.1
+667.6 9.8
+668.4 44.1
+669.2 16.1
+670.4 47.0
+671.4 74.1
+672.1 234.9
+672.7 213.5
+674.6 53.7
+675.9 61.3
+676.9 94.5
+677.7 96.9
+678.4 217.3
+679.7 52.1
+680.4 47.4
+681.4 22.8
+683.5 163.2
+684.6 162.7
+685.6 128.5
+686.8 46.1
+687.5 59.6
+688.7 140.1
+689.6 91.9
+690.4 51.8
+691.6 67.5
+692.9 42.2
+694.1 34.7
+695.2 25.5
+696.1 13.8
+697.4 666.9
+698.1 564.9
+698.9 95.5
+699.6 123.3
+700.7 19.8
+701.7 34.2
+702.7 21.2
+703.5 53.1
+704.7 38.6
+705.5 82.1
+706.6 956.8
+707.5 142.9
+708.2 56.9
+709.4 7.6
+710.7 135.1
+711.9 377.7
+712.6 553.7
+713.6 126.2
+714.7 53.7
+715.5 103.4
+716.6 37.1
+717.5 24.0
+718.1 4.9
+719.4 54.2
+720.3 87.3
+721.3 22.2
+722.3 162.8
+723.0 35.2
+723.7 83.0
+724.8 131.9
+725.6 48.1
+726.7 10.0
+727.4 88.4
+728.4 156.4
+729.3 115.3
+730.0 33.7
+731.2 56.4
+732.0 232.2
+733.3 741.4
+734.3 273.4
+735.9 72.4
+736.9 68.0
+738.0 40.2
+739.0 29.1
+740.4 345.9
+741.2 469.6
+741.9 1000.8
+742.6 1266.6
+743.7 32.5
+744.5 8.5
+747.8 1.8
+752.4 3.5
+753.7 2.4
+756.2 6.0
+757.0 9.7
+761.2 22.7
+761.8 2.9
+763.5 6.9
+764.6 20.2
+765.4 22.0
+766.3 9.9
+767.2 11.3
+768.5 2.9
+769.4 43.2
+770.6 28.1
+771.5 10.8
+772.3 2.7
+776.7 2.3
+777.8 3.9
+778.7 26.8
+779.4 141.4
+780.3 60.3
+781.5 8.2
+783.4 5.2
+785.3 4.3
+786.4 3.4
+787.4 24.4
+788.4 12.8
+789.2 0.5
+790.0 4.9
+791.6 4.7
+792.3 3.4
+793.6 10.5
+794.8 8.9
+795.8 1.5
+796.6 17.7
+797.7 35.8
+798.5 1.7
+799.6 9.7
+800.5 31.3
+801.9 13.6
+802.7 15.9
+805.5 28.6
+806.7 39.5
+807.5 7.9
+809.6 13.2
+811.2 3.5
+813.7 9.3
+815.5 4.6
+816.2 11.0
+818.4 7.1
+820.7 5.5
+823.5 90.9
+824.5 53.5
+825.5 4.1
+826.2 3.9
+827.3 4.3
+828.0 11.7
+829.2 7.3
+830.4 10.3
+832.3 4.6
+834.2 8.3
+836.9 14.7
+838.5 21.1
+839.6 2.0
+841.8 12.3
+842.6 3.2
+843.9 10.1
+844.6 16.5
+845.8 24.1
+846.6 2.2
+848.6 0.9
+850.3 9.5
+851.4 7.7
+852.3 11.8
+853.1 13.9
+854.5 1.0
+855.4 6.7
+860.7 3.9
+861.5 9.4
+862.6 10.1
+863.5 32.4
+864.5 14.8
+867.2 14.5
+868.4 2.0
+869.8 7.1
+871.4 36.3
+872.5 21.6
+873.3 2.5
+875.3 4.9
+877.3 6.8
+878.7 25.2
+879.8 33.3
+880.4 55.3
+881.4 33.9
+882.6 1.4
+883.4 6.2
+884.3 2.3
+885.5 11.1
+886.5 11.8
+887.8 11.2
+889.3 66.2
+890.5 46.9
+891.5 67.4
+892.5 5.9
+894.6 4.7
+895.5 8.3
+896.7 68.5
+897.9 69.9
+898.7 24.4
+899.6 3.5
+901.5 8.1
+902.7 16.7
+903.6 8.1
+905.7 21.0
+907.3 116.0
+908.4 5.6
+909.4 2.5
+910.4 7.0
+911.9 16.5
+913.3 26.6
+915.5 25.2
+916.1 2.8
+917.6 4.2
+919.1 3.4
+920.0 6.2
+921.7 10.5
+923.7 11.2
+924.5 7.0
+925.4 21.6
+926.9 4.1
+931.3 0.8
+932.5 13.7
+933.4 7.3
+935.7 5.6
+936.5 26.1
+938.2 20.3
+939.0 1.4
+940.7 3.2
+943.2 16.8
+947.8 5.3
+949.2 16.8
+950.0 7.9
+950.6 24.0
+951.6 23.0
+952.9 7.6
+954.3 2.8
+957.1 2.5
+960.7 21.8
+961.5 6.7
+962.5 9.1
+963.6 2.4
+964.4 5.2
+965.6 13.3
+966.7 26.3
+967.5 103.9
+968.6 106.4
+969.5 29.0
+970.2 15.7
+971.4 2.3
+972.8 25.7
+973.8 17.7
+975.5 4.5
+976.3 2.0
+978.4 26.9
+979.6 14.6
+980.7 2.1
+983.2 7.3
+984.5 15.7
+986.5 8.2
+987.2 3.9
+988.1 11.8
+989.4 4.3
+990.5 2.6
+991.5 1.5
+992.3 10.3
+993.4 14.9
+994.9 11.8
+996.3 20.1
+997.8 14.6
+998.7 1.4
+1002.9 17.1
+1003.5 18.1
+1004.6 25.4
+1005.7 0.8
+1006.9 5.0
+1007.6 13.8
+1008.6 15.7
+1010.2 14.3
+1011.5 2.0
+1012.3 1.1
+1013.5 7.7
+1015.8 15.1
+1016.5 8.1
+1017.9 18.5
+1019.7 11.0
+1020.4 55.1
+1021.4 57.5
+1022.4 38.5
+1024.1 10.8
+1024.9 8.5
+1025.6 16.8
+1026.6 8.1
+1027.7 4.3
+1028.8 4.9
+1029.6 3.8
+1030.7 8.6
+1031.5 39.8
+1032.6 27.6
+1033.6 5.3
+1036.8 20.2
+1037.9 35.2
+1038.6 123.4
+1039.4 94.6
+1040.1 25.1
+1040.7 15.5
+1041.6 19.4
+1042.6 17.7
+1043.8 80.8
+1044.6 4.8
+1045.5 8.0
+1047.2 8.2
+1049.0 12.4
+1049.7 52.3
+1050.5 8.5
+1051.2 6.8
+1052.6 10.8
+1054.4 61.9
+1055.7 24.6
+1056.6 11.3
+1057.7 3.9
+1058.7 10.0
+1060.3 0.6
+1061.8 7.1
+1062.7 3.3
+1064.5 5.4
+1067.3 4.1
+1071.3 11.9
+1072.7 12.9
+1073.7 13.4
+1077.3 4.0
+1078.3 6.7
+1079.0 8.3
+1079.6 2.5
+1085.0 12.6
+1086.3 6.9
+1088.7 3.6
+1089.4 1.0
+1090.8 16.6
+1091.7 4.5
+1092.8 5.4
+1093.6 5.8
+1094.4 13.0
+1095.6 36.3
+1096.7 27.4
+1097.8 19.2
+1099.2 1.4
+1102.7 6.7
+1107.1 36.9
+1107.8 43.4
+1108.6 47.7
+1109.6 23.6
+1110.5 11.3
+1111.5 200.0
+1112.7 127.1
+1113.7 5.1
+1115.3 5.7
+1116.1 2.8
+1116.7 3.0
+1118.3 9.9
+1119.3 1.0
+1122.5 2.7
+1123.6 4.6
+1124.6 3.6
+1125.5 162.2
+1126.6 132.2
+1127.6 25.6
+1131.7 2.2
+1132.8 12.3
+1133.7 7.5
+1134.8 7.9
+1135.7 9.1
+1136.9 28.1
+1137.6 15.9
+1138.4 6.0
+1139.5 1.5
+1142.6 10.9
+1143.6 14.0
+1144.6 3.8
+1147.3 3.9
+1150.5 1.4
+1155.8 2.9
+1156.4 1.1
+1157.8 1.5
+1159.7 13.4
+1160.4 3.2
+1161.2 8.7
+1162.8 9.3
+1163.7 0.4
+1165.7 8.0
+1166.7 1.4
+1167.7 4.0
+1169.0 10.5
+1169.8 4.9
+1170.6 7.6
+1171.9 4.1
+1172.8 5.1
+1173.7 2.5
+1177.0 15.5
+1178.3 7.6
+1179.7 5.8
+1181.0 2.6
+1181.6 1.0
+1183.3 4.2
+1184.6 8.5
+1187.0 8.1
+1188.6 4.7
+1190.0 14.0
+1190.8 2.5
+1192.5 9.9
+1194.7 2.9
+1196.0 32.1
+1196.7 60.1
+1197.5 14.2
+1198.1 4.8
+1199.6 4.1
+1201.9 1.6
+1203.6 2.0
+1205.6 6.0
+1207.5 34.1
+1208.6 39.9
+1209.6 7.5
+1217.1 1.9
+1225.5 291.8
+1226.6 179.9
+1227.7 59.3
+1228.8 8.7
+1229.9 6.1
+1235.6 0.9
+1236.6 6.9
+1237.7 7.2
+1239.9 7.2
+1240.8 4.6
+1241.7 5.1
+1243.9 1.3
+1245.7 4.0
+1247.5 3.9
+1249.5 4.5
+1253.7 50.9
+1254.7 27.6
+1255.8 19.7
+1257.6 4.9
+1259.5 7.4
+1266.6 10.7
+1268.3 4.9
+1269.8 2.9
+1275.6 4.5
+1277.4 5.6
+1278.1 5.7
+1281.9 1.6
+1285.8 6.6
+1294.7 39.0
+1295.8 34.3
+1296.8 7.0
+1297.9 7.7
+1323.5 3.7
+1324.2 4.7
+1325.1 9.8
+1325.8 1.4
+1326.9 4.2
+1327.6 3.0
+1330.4 3.2
+1337.5 3.3
+1346.3 4.4
+1354.6 10.4
+1355.8 5.3
+1362.7 3.9
+1372.4 3.6
+1379.3 11.2
+1382.6 0.8
+1384.5 4.0
+1442.0 3.3
+S	35	35	709.07
+I	ID	217
+I	RTime	10.7439
+Z	1	709.07
+198.2 4.0
+213.0 1.3
+241.1 1.3
+246.0 3.0
+250.9 1.0
+260.1 2.5
+262.1 2.2
+267.9 1.7
+285.8 2.5
+291.0 24.3
+293.8 1.6
+304.1 2.2
+320.2 5.0
+321.3 4.5
+329.3 2.0
+329.9 3.7
+364.2 1.1
+390.8 3.5
+415.2 1.7
+416.5 4.9
+418.4 3.9
+428.3 2.5
+433.4 4.5
+437.2 1.8
+439.5 1.2
+440.7 8.8
+441.4 1.7
+452.1 5.0
+458.3 7.0
+467.0 1.7
+472.3 1.2
+478.4 2.9
+483.2 1.8
+495.2 10.3
+502.3 1.7
+505.2 2.0
+525.1 2.7
+529.0 2.5
+541.3 1.8
+545.2 4.5
+546.4 2.7
+558.3 7.5
+561.4 0.8
+564.2 1.2
+568.5 2.0
+573.0 6.3
+587.6 4.0
+590.3 2.5
+594.3 2.2
+597.0 1.2
+601.8 3.9
+602.5 11.8
+603.5 11.1
+604.2 3.7
+613.5 4.4
+630.4 2.0
+635.3 4.3
+637.5 4.3
+651.3 9.8
+651.9 4.4
+653.2 1.2
+662.0 4.5
+667.4 4.3
+677.2 5.9
+678.4 4.5
+690.4 33.2
+691.5 8.3
+692.5 2.2
+693.4 3.7
+699.8 25.7
+701.0 4.5
+762.6 2.2
+827.1 3.0
+893.4 1.7
+1113.8 4.0
+1127.7 1.6
+1241.5 1.3
+S	36	36	427.38
+I	ID	80
+I	RTime	3.7051
+Z	2	853.75
+126.9 4.9
+129.1 12.8
+138.0 1.0
+140.1 0.8
+141.1 2.9
+146.9 3.2
+150.8 2.7
+155.1 21.7
+171.2 1.2
+175.1 2.2
+178.1 1.2
+184.1 0.8
+188.2 1.2
+191.2 2.9
+200.3 1.2
+201.3 2.2
+203.0 1.2
+204.3 1.0
+208.3 1.2
+210.4 2.5
+212.8 1.6
+218.1 4.9
+219.0 3.4
+224.1 1.3
+226.0 2.0
+232.0 6.5
+233.0 1.1
+234.2 2.9
+235.1 0.8
+237.1 2.0
+239.2 3.2
+247.8 1.2
+249.0 7.1
+250.0 1.2
+251.3 4.4
+252.0 3.2
+253.2 1.2
+254.8 1.5
+256.0 2.7
+258.0 3.2
+261.4 1.8
+264.3 3.2
+265.1 2.2
+267.1 6.0
+269.0 37.2
+269.7 0.8
+271.1 1.3
+272.0 4.5
+273.1 2.5
+277.1 5.8
+281.1 13.3
+282.2 7.5
+283.3 3.0
+286.9 12.1
+289.3 1.2
+290.3 4.3
+294.3 2.0
+295.4 1.8
+297.0 8.6
+298.1 8.6
+299.2 30.0
+300.2 41.7
+301.2 4.8
+303.2 3.5
+304.0 2.7
+307.2 1.2
+309.3 1.2
+310.3 2.7
+312.2 16.2
+313.2 4.3
+317.9 9.1
+318.6 12.3
+319.3 5.5
+320.7 2.7
+322.3 3.4
+325.3 6.9
+326.3 4.0
+327.3 1.7
+329.0 2.4
+330.8 5.3
+334.4 2.0
+336.4 3.0
+342.2 2.0
+347.3 1.5
+348.6 7.0
+349.7 55.4
+350.3 8.1
+351.0 1.3
+353.7 2.2
+354.4 5.3
+355.2 1.7
+357.1 1.7
+358.7 4.5
+360.0 1.6
+361.2 3.2
+362.6 193.6
+363.3 31.1
+364.6 1.6
+367.4 11.5
+368.2 3.9
+368.9 16.0
+370.3 6.4
+371.3 1.7
+373.5 1.0
+375.3 4.8
+377.6 2.5
+379.9 2.2
+381.2 15.5
+382.1 4.6
+383.3 3.7
+384.3 28.3
+386.5 3.7
+387.3 2.0
+389.1 5.5
+390.3 4.9
+391.2 18.5
+392.2 48.5
+393.5 5.9
+395.3 16.8
+396.1 10.1
+397.1 14.3
+398.1 22.5
+400.1 5.5
+401.0 1.7
+402.4 7.0
+403.7 10.1
+404.8 11.8
+405.8 8.3
+407.9 3.5
+409.2 97.5
+410.5 28.2
+411.3 26.5
+412.1 0.8
+412.7 3.2
+415.0 8.3
+415.9 2.7
+418.0 117.6
+419.0 39.0
+419.8 4.6
+420.7 0.8
+426.6 2.7
+439.6 1.5
+441.8 5.6
+444.9 2.0
+450.5 19.8
+451.3 1.5
+459.3 2.5
+466.2 1.0
+467.4 3.5
+474.4 1.7
+475.4 1.2
+476.3 5.4
+480.1 2.5
+481.4 1.6
+483.4 1.0
+489.1 3.4
+501.4 2.9
+503.4 2.0
+504.8 6.0
+505.6 5.4
+507.1 2.5
+516.6 8.3
+524.4 2.4
+528.4 20.7
+529.3 6.5
+530.5 1.1
+535.8 9.6
+538.9 7.3
+546.7 1.6
+550.2 1.7
+552.5 2.0
+554.0 3.0
+555.4 3.0
+564.5 1.7
+571.5 2.0
+572.4 5.8
+579.5 1.7
+580.5 1.1
+585.4 22.2
+586.1 1.6
+591.9 3.0
+594.3 1.2
+600.1 3.7
+601.3 3.0
+604.2 3.0
+605.3 1.7
+608.4 3.0
+611.3 8.3
+612.3 2.7
+613.5 0.8
+635.2 12.6
+640.2 0.8
+651.3 2.5
+653.2 2.5
+661.2 4.0
+667.4 1.8
+668.6 1.5
+678.4 2.0
+680.1 1.6
+682.3 1.7
+689.4 7.8
+690.3 7.1
+691.1 1.0
+693.2 4.0
+697.4 2.2
+698.5 144.5
+699.4 21.1
+700.3 15.8
+706.1 7.0
+707.3 10.0
+708.0 3.2
+715.3 4.4
+716.1 2.9
+726.3 0.8
+S	37	37	652.34
+Z	2	1303.67
+195.2 1.2
+197.4 0.8
+201.1 27.2
+208.2 1.7
+211.0 3.7
+212.8 0.5
+215.1 5.1
+220.3 0.8
+225.1 7.5
+227.0 0.8
+229.1 41.7
+230.0 1.3
+239.0 2.2
+239.9 1.2
+241.3 3.0
+242.0 11.3
+243.1 13.8
+247.2 2.5
+254.2 1.2
+257.4 3.4
+258.0 1.1
+260.2 3.5
+261.1 4.9
+265.1 1.7
+268.0 3.0
+272.2 10.8
+273.1 4.1
+274.2 3.2
+275.1 10.8
+276.3 4.0
+279.1 1.7
+281.0 1.1
+282.1 1.5
+283.1 0.8
+287.2 1.0
+288.2 2.5
+293.1 1.3
+294.3 1.1
+295.2 24.2
+301.2 0.6
+305.1 0.6
+306.0 0.6
+308.2 3.4
+309.1 0.8
+312.1 2.2
+313.2 0.8
+315.1 0.8
+317.2 2.0
+318.1 0.6
+321.9 2.2
+324.0 1.0
+325.1 0.6
+326.4 1.2
+328.1 1.3
+330.1 3.0
+331.3 0.8
+339.2 1.0
+340.1 3.7
+341.2 0.8
+342.0 0.6
+343.3 1.3
+346.2 20.7
+347.3 2.0
+353.1 3.2
+355.3 1.6
+356.1 6.1
+358.0 353.5
+359.1 2.7
+360.3 8.3
+361.3 1.5
+362.0 1.0
+363.2 1.2
+365.9 2.0
+372.3 2.0
+383.0 2.0
+384.1 2.0
+386.5 0.8
+388.1 0.8
+389.6 2.4
+393.2 2.2
+394.2 1.0
+395.2 0.8
+397.3 1.1
+398.8 0.8
+399.4 1.1
+400.4 1.7
+406.1 16.8
+410.2 1.0
+411.2 1.0
+412.2 2.0
+413.2 1.2
+414.3 2.9
+415.4 2.7
+416.3 1.8
+417.1 2.2
+419.1 2.5
+421.5 1.2
+422.4 2.2
+424.2 49.5
+425.3 11.8
+426.1 77.1
+426.9 2.0
+428.0 1.2
+429.3 1.7
+432.3 2.0
+435.3 13.0
+436.4 0.8
+437.4 1.7
+438.2 0.5
+438.9 2.2
+440.6 0.8
+441.2 5.8
+442.4 13.1
+443.1 113.5
+444.2 1.5
+445.2 11.5
+446.4 9.3
+447.3 1.0
+448.4 1.8
+451.1 0.8
+452.5 5.0
+453.2 21.0
+455.2 4.3
+456.2 8.3
+457.3 4.8
+458.2 3.2
+459.2 12.3
+460.4 2.4
+461.1 1.5
+463.3 2.5
+466.3 4.1
+468.2 4.0
+469.2 5.4
+471.1 2062.6
+471.8 8.5
+473.2 14.6
+474.2 5.9
+475.0 3.2
+476.2 1.3
+477.4 1.3
+479.4 3.9
+480.3 2.9
+481.4 5.1
+483.9 10.1
+485.2 3.9
+486.2 6.8
+487.1 1.2
+488.3 2.2
+489.2 2.5
+489.9 1.0
+491.3 3.0
+495.2 2.5
+496.1 1.2
+499.2 3.7
+500.0 2.2
+501.2 3.2
+502.0 10.3
+503.1 5.3
+504.0 2.7
+504.7 1.7
+506.0 0.8
+508.3 10.1
+510.1 1.5
+511.2 2.2
+512.4 1.8
+513.2 3.7
+514.4 6.0
+519.2 7.5
+520.1 8.8
+521.2 3.2
+522.1 4.1
+523.1 5.5
+524.1 2.0
+526.3 1.7
+526.9 0.6
+528.0 3.9
+529.4 7.0
+530.1 2.7
+532.0 8.5
+533.2 3.5
+533.8 5.5
+535.2 4.4
+536.5 2.5
+537.4 31.2
+538.8 9.1
+539.8 3.0
+541.0 3.2
+542.9 3.4
+545.0 2.7
+546.3 10.8
+550.0 3.2
+551.6 2.2
+552.5 10.0
+554.1 7.0
+555.0 5.0
+556.2 3.4
+557.1 1.2
+559.2 11.3
+560.3 18.2
+561.3 6.5
+562.2 4.0
+563.2 13.1
+564.6 7.3
+565.5 3.2
+566.5 4.3
+567.3 0.8
+568.1 5.5
+569.4 4.5
+570.7 8.8
+572.1 36.7
+573.0 11.8
+573.9 4.5
+575.0 0.6
+576.1 3.9
+576.7 5.3
+577.4 4.0
+578.5 6.6
+579.2 8.8
+580.2 3.5
+581.4 5.5
+582.2 0.8
+583.1 2.4
+584.3 1.3
+585.2 5.5
+586.0 4.0
+587.3 10.1
+588.6 4.8
+589.5 4.5
+591.3 7.1
+592.1 5.9
+593.2 3.5
+594.0 1.7
+595.1 2.9
+596.2 10.3
+596.9 0.6
+598.3 21.6
+599.2 37.5
+600.0 16.1
+601.5 2.5
+604.0 1.5
+604.7 1.6
+605.5 1.6
+606.1 7.5
+606.9 14.6
+607.7 4.0
+608.5 11.3
+609.5 3.4
+610.9 3.2
+612.3 9.3
+613.4 4.4
+614.2 2.5
+615.2 3.7
+616.0 16.3
+617.2 106.5
+618.3 30.7
+619.6 13.1
+620.9 6.4
+622.1 7.0
+623.3 7.0
+624.3 5.0
+625.1 9.3
+626.2 11.8
+627.2 1.0
+628.3 13.5
+629.3 10.8
+630.2 18.7
+631.2 29.3
+632.2 11.0
+633.4 72.8
+634.2 139.8
+635.1 53.9
+636.2 8.1
+638.2 6.8
+638.9 83.0
+639.7 19.2
+640.6 32.5
+642.1 100.1
+643.2 88.5
+644.3 16.0
+645.1 5.4
+646.0 2.0
+653.8 2.5
+657.4 1.2
+658.7 2.9
+660.4 4.5
+661.8 1.2
+663.8 0.6
+667.2 10.8
+668.2 9.3
+669.2 3.4
+670.8 1.0
+671.5 1.0
+674.9 4.9
+679.2 4.0
+680.8 1.3
+682.4 8.8
+683.2 1.3
+685.2 49.0
+686.4 32.2
+687.4 36.0
+688.6 3.2
+690.2 2.0
+691.2 3.2
+692.3 20.7
+693.4 7.3
+695.3 1.2
+698.8 1.8
+703.3 1.3
+704.2 1.8
+705.8 0.6
+710.3 2.9
+712.1 8.6
+713.1 1.8
+716.2 1.1
+718.7 1.7
+719.4 4.8
+720.6 5.1
+721.4 0.8
+722.4 2.2
+723.4 1.1
+725.2 1.3
+726.4 2.4
+727.0 3.2
+728.0 2.9
+729.2 5.5
+730.3 72.6
+731.4 19.5
+732.3 10.1
+735.0 2.2
+736.0 1.6
+737.3 1.0
+738.2 1.2
+739.3 7.6
+741.1 2.4
+741.8 2.0
+742.4 13.1
+743.7 9.8
+744.7 12.5
+745.4 1.8
+746.4 0.8
+752.7 6.9
+753.9 1.6
+755.2 6.6
+756.3 0.8
+759.6 1.2
+761.1 1.2
+762.2 1.8
+767.6 2.2
+770.1 3.0
+771.3 0.5
+773.2 0.8
+775.3 1.7
+778.4 1.3
+779.4 1.6
+781.4 1.5
+782.3 4.5
+783.9 1.3
+784.7 1.2
+787.4 29.0
+788.2 9.6
+788.8 11.3
+790.7 2.9
+791.4 5.1
+792.2 3.2
+796.5 3.2
+797.3 6.8
+797.9 1.7
+798.6 0.8
+799.9 3.5
+804.5 0.6
+805.4 4.9
+806.2 4.0
+806.9 1.6
+808.4 1.2
+810.3 1.8
+811.7 1.2
+813.3 2.2
+816.4 1.2
+817.6 2.0
+818.4 5.5
+819.8 1.5
+820.4 2.2
+822.2 4.0
+823.5 1.3
+824.4 1.7
+825.3 2.7
+826.3 3.2
+827.2 3.4
+829.4 7.0
+830.6 14.3
+831.2 3.2
+831.8 8.3
+832.7 6.3
+834.1 3.5
+835.3 3.2
+838.1 3.7
+839.1 1.7
+840.7 3.4
+841.5 4.6
+842.3 3.0
+844.2 1.2
+845.3 3.4
+846.5 8.1
+847.1 1.7
+848.2 0.8
+849.2 4.4
+852.6 1.2
+853.5 2.9
+854.4 0.8
+855.3 1.2
+856.5 1.3
+857.2 10.6
+858.3 5.3
+859.4 23.5
+861.0 6.0
+862.3 7.3
+863.5 2.0
+864.7 2.2
+866.6 0.8
+867.3 1.0
+868.6 3.2
+869.2 7.0
+870.3 12.8
+870.9 12.8
+872.1 2.7
+872.8 2.2
+876.3 1.0
+878.1 4.0
+879.1 1.0
+881.2 0.6
+884.3 3.7
+885.2 0.8
+887.8 2.2
+889.2 6.9
+890.3 2.5
+890.9 2.0
+892.3 2.5
+893.3 1.2
+895.5 0.6
+896.6 4.3
+897.4 2.5
+898.3 0.8
+899.2 2.7
+900.1 0.8
+902.5 3.2
+903.4 3.7
+904.8 3.7
+905.5 2.5
+906.3 1.0
+909.5 7.4
+910.5 3.0
+911.9 3.5
+912.9 1.2
+914.5 4.1
+915.3 1.7
+916.6 2.7
+918.9 2.5
+919.8 2.0
+921.7 1.2
+923.1 2.7
+923.9 1.0
+925.0 2.5
+927.4 1.0
+928.5 4.8
+929.7 1.7
+931.3 3.9
+932.3 2.9
+933.3 1.7
+938.3 4.0
+940.4 1.0
+941.4 3.5
+942.3 2.4
+943.6 1.5
+944.7 3.0
+945.4 8.1
+949.1 27.2
+950.4 13.5
+951.2 1.2
+952.1 1.2
+953.7 1.7
+956.1 33.2
+957.2 12.6
+958.4 14.3
+961.3 1.7
+963.2 1.2
+964.1 1.0
+965.4 0.8
+968.2 2.2
+970.9 1.5
+974.3 30.6
+975.5 16.5
+976.4 2.5
+977.4 4.0
+978.2 10.0
+979.1 4.8
+981.0 1.3
+983.3 1.3
+984.7 3.0
+985.4 1.3
+986.4 2.9
+989.4 2.0
+993.0 0.6
+997.5 0.8
+999.4 1.3
+1002.2 0.8
+1005.2 4.4
+1006.3 3.5
+1007.5 1.2
+1009.3 3.5
+1010.1 2.7
+1010.9 1.5
+1014.7 7.3
+1015.4 4.5
+1017.4 2.5
+1018.6 3.4
+1021.2 1.0
+1022.3 1.0
+1024.3 2.7
+1026.4 3.5
+1027.2 13.8
+1028.1 6.8
+1029.4 5.9
+1030.4 2.2
+1032.3 5.4
+1033.3 3.7
+1034.4 1.0
+1035.4 1.2
+1036.4 1.7
+1037.1 1.2
+1037.7 3.4
+1041.8 3.0
+1042.4 2.7
+1043.4 4.1
+1044.3 8.3
+1045.3 10.0
+1046.6 2.9
+1051.4 0.8
+1055.5 5.1
+1056.5 1.6
+1057.4 6.6
+1058.4 6.6
+1059.5 1.2
+1060.5 2.7
+1062.4 55.7
+1063.5 31.8
+1064.4 1.7
+1069.1 7.0
+1072.3 8.3
+1073.4 11.6
+1074.5 13.1
+1075.4 3.7
+1077.4 4.1
+1078.6 0.8
+1085.2 2.4
+1087.7 0.8
+1099.5 1.7
+1102.1 2.2
+1110.0 1.1
+1114.1 1.7
+1116.4 1.2
+1117.3 1.3
+1120.1 1.2
+1125.1 1.0
+1126.4 5.0
+1128.4 1.1
+1129.5 2.2
+1137.4 7.1
+1138.4 2.2
+1139.1 2.2
+1140.2 2.5
+1141.4 0.6
+1149.2 1.1
+1150.2 2.0
+1155.1 24.5
+1156.3 10.6
+1157.5 1.2
+1158.2 2.5
+1159.4 2.0
+1188.4 1.2
+1189.4 0.8
+1190.5 1.1
+1200.0 1.0
+1228.2 1.1
+1262.4 1.0
+1264.7 0.6
+1265.5 1.8
+S	38	38	1032.39
+Z	3	3095.15
+311.9 1.6
+324.3 1.5
+325.4 25.1
+326.3 5.1
+341.0 6.6
+342.2 5.3
+344.5 6.8
+354.0 2.6
+355.4 2.4
+356.3 1.1
+359.1 5.3
+367.6 5.7
+369.2 0.7
+371.2 4.4
+388.1 2.1
+389.4 4.9
+395.3 7.8
+397.2 4.9
+402.0 2.3
+408.2 5.3
+409.5 6.3
+411.4 1.0
+413.2 16.1
+415.3 29.5
+435.5 2.1
+452.9 11.1
+454.3 1.0
+467.8 8.5
+470.3 8.0
+478.3 2.8
+485.2 3.2
+490.1 1.3
+494.0 5.8
+498.4 11.4
+501.2 6.1
+504.5 14.9
+505.4 7.9
+509.6 3.0
+512.1 1.6
+517.8 1.7
+519.4 13.9
+524.6 2.3
+525.6 2.4
+526.5 0.9
+542.0 8.2
+552.4 21.6
+554.7 10.3
+556.3 0.9
+563.3 7.0
+565.9 2.7
+572.0 73.9
+573.0 25.7
+580.0 11.9
+583.2 12.5
+590.0 11.8
+591.4 1.2
+594.4 4.3
+600.2 6.9
+601.4 11.5
+602.2 10.8
+607.9 15.1
+613.3 7.6
+615.3 4.1
+616.2 0.9
+618.4 39.2
+619.6 2.4
+621.2 13.5
+622.4 2.1
+623.3 5.6
+625.4 5.6
+626.5 4.3
+630.1 2.7
+632.0 3.6
+633.6 1.3
+635.6 3.2
+639.4 8.2
+643.6 7.8
+646.4 1.6
+650.7 19.7
+652.7 1.6
+655.4 4.6
+658.0 7.2
+662.9 7.8
+664.0 2.9
+664.9 12.4
+666.4 38.6
+667.2 1.8
+679.9 5.3
+683.3 4.3
+688.1 8.2
+689.5 115.5
+690.4 40.1
+692.4 6.4
+693.0 6.6
+696.1 5.8
+698.2 5.3
+705.7 9.5
+707.1 31.6
+709.1 1.2
+711.8 3.9
+714.3 6.0
+715.3 11.8
+716.5 3.3
+717.4 2.4
+718.3 2.9
+719.5 0.4
+720.6 9.0
+721.6 11.6
+722.3 2.8
+725.3 4.7
+728.9 4.1
+730.3 8.1
+731.4 3.1
+736.9 9.9
+737.6 36.1
+738.4 7.3
+741.3 1.8
+744.6 7.3
+745.7 14.3
+746.5 2.3
+753.4 5.3
+754.4 9.6
+755.2 8.5
+757.3 5.5
+758.5 5.9
+760.5 11.2
+761.9 34.5
+762.6 27.6
+764.2 12.8
+766.3 2.2
+769.2 24.3
+770.8 202.5
+771.5 105.3
+772.1 27.4
+778.2 974.5
+779.1 93.8
+780.0 2.0
+782.5 15.2
+783.3 5.7
+786.6 1.4
+791.5 2.6
+795.6 2.2
+796.7 5.8
+800.6 5.1
+802.4 17.2
+803.5 3.4
+805.7 5.0
+806.3 8.8
+808.4 6.7
+810.5 12.1
+811.3 3.9
+812.5 8.1
+813.7 7.1
+814.7 15.5
+818.3 4.4
+819.8 7.5
+820.5 3.8
+821.2 8.1
+824.9 3.9
+826.6 8.5
+827.2 5.7
+830.3 4.6
+831.8 3.7
+833.1 76.9
+834.5 10.0
+836.0 6.8
+836.7 2.0
+838.3 6.1
+839.7 11.1
+842.1 323.9
+843.2 74.2
+845.6 8.2
+846.5 5.0
+847.7 6.6
+848.4 1.6
+850.5 19.4
+852.1 1.2
+853.5 2.5
+854.5 9.7
+858.5 10.7
+859.8 11.8
+861.4 6.5
+866.4 11.4
+867.6 7.7
+868.5 3.5
+872.9 5.5
+874.6 5.1
+875.4 4.4
+876.7 11.3
+879.2 5.7
+881.3 17.2
+882.0 7.2
+883.2 12.0
+884.3 43.6
+885.0 4.1
+887.4 8.7
+888.9 20.6
+890.6 5.1
+891.6 8.0
+893.9 20.8
+895.3 30.0
+896.0 2.7
+897.3 3.9
+900.3 23.2
+901.1 8.6
+902.1 1.2
+903.2 5.2
+904.3 26.6
+905.7 2.0
+906.6 7.0
+907.9 8.9
+911.3 15.6
+912.1 8.8
+913.2 9.9
+914.3 5.9
+915.8 2.1
+916.6 1.3
+917.5 42.6
+918.6 35.3
+920.2 2.1
+922.1 11.8
+924.4 32.5
+925.6 13.8
+926.6 4.7
+927.6 13.6
+931.0 44.3
+931.9 33.8
+932.6 30.4
+933.4 6.5
+935.1 7.6
+936.6 3.6
+937.9 4.2
+940.2 849.5
+941.2 290.7
+942.5 71.8
+943.4 20.9
+944.1 0.5
+945.2 9.2
+947.2 8.9
+948.0 16.1
+951.6 8.9
+952.6 9.3
+953.4 4.0
+954.3 5.4
+955.3 8.6
+956.0 12.7
+956.8 25.8
+958.9 18.0
+960.7 16.5
+962.1 14.7
+963.1 6.3
+964.2 18.7
+965.2 15.9
+966.9 10.4
+967.5 10.3
+969.0 30.5
+969.7 3.4
+970.7 12.3
+971.4 3.6
+972.0 26.2
+972.8 7.2
+973.8 23.0
+975.1 7.9
+975.7 5.2
+977.0 230.3
+977.7 231.4
+978.6 78.7
+979.6 42.2
+980.6 13.8
+981.3 5.5
+982.2 26.3
+983.2 6.1
+985.9 19.5
+988.1 12.5
+988.8 2.3
+989.9 3.2
+991.7 15.1
+992.5 19.1
+993.2 6.1
+994.3 63.5
+995.3 20.3
+996.1 36.3
+996.9 41.3
+997.8 19.7
+999.2 43.9
+1000.0 27.1
+1001.4 39.3
+1002.0 32.5
+1003.7 49.6
+1004.8 44.3
+1005.6 73.5
+1006.3 18.6
+1007.0 11.7
+1009.4 22.3
+1010.5 65.0
+1011.3 8.7
+1012.8 26.6
+1013.8 19.7
+1014.6 24.6
+1016.1 22.1
+1017.0 5.1
+1017.6 44.6
+1018.8 15.1
+1019.8 53.1
+1020.6 0.7
+1021.7 37.0
+1022.6 13.1
+1023.8 11.3
+1035.0 5.9
+1037.4 0.5
+1046.7 1.9
+1048.8 3.3
+1049.6 1.5
+1055.8 2.3
+1066.0 10.5
+1066.7 12.6
+1067.5 1.2
+1069.4 29.6
+1070.6 7.2
+1078.5 6.8
+1079.7 12.9
+1080.7 5.4
+1084.5 6.8
+1087.7 8.5
+1088.5 11.9
+1089.8 86.6
+1090.7 1.4
+1091.6 9.2
+1094.0 1.7
+1097.1 1.0
+1098.1 2.3
+1099.5 3.1
+1100.4 2.3
+1103.8 18.3
+1106.1 16.8
+1107.7 6.1
+1108.9 31.2
+1109.9 21.6
+1114.1 26.6
+1115.2 6.5
+1117.5 7.6
+1124.5 13.7
+1126.2 17.3
+1131.4 3.4
+1133.4 3.3
+1135.0 8.1
+1138.2 9.9
+1138.9 1.5
+1139.6 9.7
+1142.6 269.7
+1143.7 182.0
+1144.7 31.4
+1145.4 2.3
+1146.9 6.4
+1148.0 13.5
+1148.7 27.7
+1149.4 25.5
+1150.6 10.9
+1158.6 97.5
+1159.3 16.0
+1164.4 14.8
+1166.4 41.2
+1167.1 18.7
+1168.9 50.2
+1169.6 2.5
+1170.7 3.8
+1173.2 1.7
+1178.6 2.0
+1179.3 6.2
+1182.7 2.4
+1184.0 2.8
+1185.7 9.0
+1190.8 1.8
+1194.2 90.2
+1195.2 34.3
+1195.9 1.2
+1196.9 5.0
+1198.0 6.4
+1198.6 110.0
+1199.6 47.2
+1200.4 44.0
+1201.0 5.1
+1203.8 120.8
+1204.6 138.4
+1205.2 25.9
+1205.8 6.3
+1206.9 19.2
+1207.9 6.8
+1210.0 5.8
+1211.5 5.9
+1212.3 9.7
+1213.6 87.4
+1214.7 30.3
+1216.5 451.2
+1217.5 259.8
+1218.7 52.1
+1219.7 19.8
+1222.8 3.5
+1226.6 4.7
+1227.2 6.4
+1230.1 13.0
+1231.3 8.7
+1233.0 16.7
+1236.8 9.6
+1237.8 3.1
+1239.1 52.8
+1239.9 77.7
+1240.7 19.4
+1242.1 48.0
+1243.7 3.4
+1245.6 4.6
+1247.8 94.4
+1248.9 32.4
+1249.8 3.1
+1250.5 3.5
+1257.4 7.7
+1260.5 6.0
+1261.6 8.0
+1265.3 12.3
+1266.5 9.9
+1268.4 15.1
+1271.7 4.2
+1273.9 27.5
+1274.7 8.0
+1276.0 11.2
+1277.3 25.4
+1277.9 6.9
+1281.4 1.1
+1283.1 88.6
+1283.8 39.3
+1284.6 8.3
+1288.0 8.4
+1290.6 6.3
+1293.6 8.5
+1295.2 13.2
+1296.1 13.5
+1297.3 44.7
+1298.3 12.6
+1299.9 5.0
+1305.9 9.5
+1308.6 20.4
+1309.7 2.8
+1313.7 7.7
+1314.5 7.9
+1316.1 28.6
+1318.8 40.9
+1319.7 28.8
+1320.5 7.8
+1324.8 28.2
+1325.8 4.4
+1327.4 7.9
+1328.7 38.6
+1329.4 39.9
+1330.6 6.9
+1331.9 24.1
+1333.2 150.8
+1334.3 5.2
+1337.8 9.2
+1339.4 12.3
+1340.6 25.9
+1342.3 247.6
+1343.9 32.0
+1346.7 6.7
+1351.2 13.9
+1352.3 12.1
+1353.6 39.7
+1355.7 89.4
+1356.7 9.0
+1362.9 57.2
+1363.7 15.0
+1369.1 4.6
+1371.7 9.9
+1372.9 3.8
+1375.3 1.6
+1375.9 5.6
+1381.8 15.1
+1389.5 12.4
+1392.6 2.1
+1394.5 47.6
+1396.1 13.0
+1396.9 5.4
+1398.1 24.9
+1399.6 15.0
+1404.1 1.8
+1405.5 1.1
+1406.5 4.7
+1408.8 5.6
+1409.6 4.6
+1412.0 18.8
+1412.6 94.7
+1413.8 124.3
+1414.8 33.8
+1415.7 4.6
+1417.3 15.3
+1418.1 35.6
+1418.9 31.6
+1420.7 20.3
+1421.5 3.0
+1422.6 9.1
+1424.1 17.0
+1426.2 3.1
+1426.9 3.3
+1427.8 11.2
+1428.4 12.7
+1429.8 5.9
+1431.3 36.4
+1432.4 7.0
+1436.1 5.5
+1437.1 9.0
+1440.0 34.3
+1441.0 20.5
+1445.0 8.5
+1446.0 7.6
+1448.8 6.8
+1451.2 4.0
+1455.2 2.5
+1458.2 4.0
+1459.1 14.1
+1462.3 5.9
+1464.6 3.4
+1466.0 5.1
+1467.7 1.6
+1470.7 10.8
+1473.2 10.5
+1475.4 118.0
+1476.3 29.5
+1477.4 8.9
+1480.3 1.0
+1484.1 4.3
+1486.6 8.9
+1489.3 8.5
+1492.3 5.4
+1499.3 4.1
+1506.8 7.9
+1518.7 11.7
+1520.4 13.0
+1522.7 113.0
+1523.7 99.8
+1524.8 28.2
+1530.4 4.6
+1535.6 3.6
+1537.7 17.6
+1539.0 7.8
+1540.7 279.2
+1541.7 200.9
+1542.8 70.3
+1543.6 15.8
+1546.6 6.3
+1554.7 194.0
+1555.8 205.0
+1556.7 35.4
+1557.7 33.0
+1571.9 2.3
+1577.8 6.7
+1587.2 1.0
+1588.3 3.5
+1589.8 6.2
+1603.0 2.7
+1620.0 3.4
+1627.6 9.8
+1628.6 4.3
+1629.9 5.1
+1631.4 1.2
+1632.9 2.0
+1642.6 1.8
+1646.7 4.6
+1655.1 2.7
+1657.2 10.5
+1664.7 2.6
+1665.6 10.2
+1666.4 1.6
+1672.0 2.7
+1682.8 7.1
+1685.8 6.4
+1687.1 8.3
+1692.3 14.2
+1694.1 4.6
+1703.1 7.3
+1708.5 3.9
+1710.9 4.6
+1712.9 3.0
+1716.4 4.3
+1719.4 4.3
+1748.5 4.8
+1762.5 3.1
+1764.0 2.3
+1766.6 4.5
+1770.9 5.8
+1783.9 2.1
+1789.7 3.5
+1794.8 4.4
+1799.2 9.0
+1800.6 1.7
+1805.4 8.7
+1808.2 7.2
+1811.3 2.4
+1828.9 8.8
+1832.3 5.8
+1854.4 3.1
+1855.3 2.5
+1865.1 6.8
+1865.8 8.0
+1866.6 3.5
+1875.1 3.9
+1881.7 16.9
+1882.8 8.2
+1895.1 14.0
+1897.3 4.3
+1902.2 21.0
+1910.1 0.9
+1912.8 6.8
+1934.9 3.3
+1935.9 11.6
+1937.2 7.2
+1943.9 3.8
+1952.8 35.0
+1954.1 25.4
+1955.0 7.3
+1973.2 10.3
+S	39	39	613.13
+Z	2	1225.25
+175.1 7.9
+177.2 19.8
+179.2 0.2
+181.2 0.3
+186.2 1.1
+187.1 3.0
+195.4 1.2
+197.0 0.5
+198.0 4.4
+202.2 2.8
+206.3 1.7
+207.4 0.3
+209.3 0.5
+210.2 0.8
+212.2 0.9
+214.2 10.1
+215.2 1.4
+216.1 7.5
+221.0 5.7
+222.0 2.5
+223.1 5.1
+224.3 0.8
+226.2 8.4
+227.3 1.6
+229.2 3.8
+230.2 6.8
+231.4 3.1
+233.3 4.4
+234.4 1.5
+236.4 0.4
+239.1 2.6
+240.1 0.2
+241.9 1.5
+244.2 0.7
+244.8 1.6
+245.8 3.1
+248.2 11.7
+249.4 1.9
+250.0 0.8
+251.0 0.8
+252.1 1.3
+253.1 1.1
+254.2 24.5
+255.2 3.2
+257.4 6.7
+260.1 5.2
+261.3 2.2
+265.0 2.0
+266.1 1.7
+267.2 6.6
+268.2 8.6
+268.9 9.2
+270.1 3.0
+271.3 2.7
+273.2 1.0
+274.3 20.0
+275.3 1.7
+276.2 4.9
+277.1 4.9
+278.1 4.4
+280.3 0.6
+281.5 6.9
+282.1 1.1
+283.2 1.7
+284.2 1.3
+285.0 6.1
+286.0 4.2
+287.2 12.6
+288.3 4.4
+291.2 7.2
+292.2 1.2
+295.4 0.6
+296.2 2.9
+297.4 5.5
+298.2 2.5
+301.1 7.0
+302.2 22.4
+303.1 4.4
+305.2 2.2
+306.0 2.1
+307.1 1.3
+308.4 0.6
+311.2 0.6
+312.2 7.6
+313.2 4.4
+314.5 2.0
+316.5 0.6
+319.2 120.8
+320.2 19.4
+322.5 6.4
+323.1 39.4
+324.0 1.8
+325.2 4.3
+327.2 2.2
+329.0 0.7
+330.1 6.6
+333.3 0.9
+334.3 1.2
+335.3 1.8
+336.9 1.3
+337.5 2.2
+338.2 7.5
+339.0 1.2
+341.2 13.7
+343.3 10.7
+344.4 5.0
+347.4 1.2
+349.0 5.6
+353.3 0.5
+355.0 39.5
+356.2 35.0
+357.1 68.9
+358.0 13.4
+359.0 3.2
+360.0 3.6
+361.1 3.4
+362.5 0.3
+364.5 4.8
+369.3 1.2
+371.1 4.1
+372.1 0.4
+373.3 3.1
+374.3 12.8
+375.2 5.6
+376.2 51.0
+377.5 4.6
+385.4 1.9
+386.3 4.9
+389.5 1.7
+390.1 3.4
+391.4 4.5
+392.3 15.1
+394.3 7.4
+395.5 2.3
+396.4 5.0
+399.5 0.9
+401.0 5.8
+402.1 1.3
+404.6 1.9
+409.5 3.4
+410.4 4.1
+411.3 1.7
+412.4 5.6
+413.5 2.8
+414.4 2.0
+415.9 5.4
+416.8 1.3
+418.0 5.8
+420.3 3.1
+422.3 25.1
+423.5 4.6
+425.6 0.4
+427.2 3.6
+428.0 0.7
+429.2 1.6
+430.2 3.7
+431.3 9.8
+432.1 4.0
+432.8 6.6
+434.6 0.5
+437.1 1.3
+438.5 1.6
+439.7 9.3
+440.5 11.3
+441.4 8.6
+442.7 2.7
+443.5 7.0
+444.7 7.7
+445.5 13.9
+447.1 38.7
+448.1 16.1
+449.4 1.1
+450.5 1.8
+454.6 12.1
+455.8 16.3
+457.0 14.6
+458.2 6.7
+460.2 19.1
+461.1 6.4
+462.1 1.2
+463.3 48.6
+464.2 10.0
+465.0 5.6
+466.2 13.0
+467.7 8.2
+469.9 2.0
+470.6 5.9
+472.4 5.9
+473.9 18.4
+475.5 2.5
+476.6 3.4
+477.4 7.0
+478.4 5.6
+480.2 5.5
+481.1 31.2
+482.6 8.0
+483.3 4.2
+484.2 6.2
+486.3 2.5
+487.2 10.6
+489.7 12.7
+490.5 6.1
+491.3 5.7
+492.6 4.5
+493.7 15.0
+494.4 10.1
+495.2 3.2
+496.3 11.4
+498.3 10.8
+499.5 24.8
+500.5 3.9
+501.3 10.1
+502.1 5.3
+502.7 22.9
+503.4 13.2
+504.8 1.4
+506.1 1.4
+507.1 13.5
+508.1 60.3
+509.4 30.3
+510.8 13.6
+511.5 19.4
+512.5 14.2
+513.3 6.4
+514.2 12.8
+516.2 144.8
+517.1 92.2
+518.6 31.6
+519.7 12.1
+520.7 2.5
+521.8 2.1
+522.5 2.1
+523.3 4.8
+524.8 39.3
+525.5 179.0
+526.4 5.1
+527.9 56.4
+528.9 11.7
+530.2 30.2
+531.4 19.9
+532.3 29.6
+533.5 4.1
+534.5 31.8
+535.4 31.5
+536.7 8.3
+537.9 22.2
+539.0 4.5
+539.6 5.2
+540.3 0.7
+541.0 1.0
+542.2 63.8
+542.8 79.3
+544.0 2.2
+545.6 17.1
+546.3 60.6
+547.0 36.2
+548.3 63.5
+549.3 25.5
+551.2 243.5
+551.9 67.6
+552.9 26.9
+554.5 59.5
+555.6 12.8
+556.5 29.7
+557.5 6.8
+560.0 691.8
+560.9 39.3
+561.6 4.6
+562.6 15.4
+563.5 16.1
+564.3 6.3
+565.0 6.6
+566.4 7.0
+567.7 1.8
+569.0 607.3
+570.1 17.9
+570.9 6.6
+571.5 4.3
+572.3 4.5
+573.1 5.1
+573.9 6.1
+574.5 4.3
+577.2 12.4
+577.8 28.8
+578.5 34.6
+579.4 11.3
+580.3 10.0
+581.0 12.9
+582.4 6.3
+584.1 7.2
+584.8 10.1
+585.7 5.9
+586.8 43.9
+587.5 66.2
+588.6 11.0
+589.3 15.9
+590.2 18.4
+591.3 12.8
+592.0 3.5
+594.2 84.1
+595.0 6.5
+595.7 465.1
+596.5 186.5
+597.4 140.5
+598.9 6.3
+599.8 10.3
+600.6 16.8
+602.6 17.5
+603.4 142.0
+604.5 901.3
+606.0 1.4
+607.1 2.1
+608.4 0.5
+609.5 1.5
+613.8 4.1
+617.6 4.3
+621.4 14.1
+622.4 2.0
+625.6 1.0
+630.0 4.2
+631.4 2.7
+633.7 0.7
+635.4 2.0
+637.3 1.1
+640.3 3.9
+641.6 3.1
+642.5 1.5
+643.3 5.7
+644.0 6.9
+646.2 2.8
+647.4 4.6
+649.3 7.2
+650.8 1.7
+652.7 9.7
+656.6 15.1
+657.5 6.3
+658.4 3.8
+660.0 18.0
+661.5 12.3
+663.4 8.2
+669.4 4.3
+670.4 0.3
+672.6 11.2
+674.2 23.2
+675.2 9.8
+676.2 11.0
+678.4 99.5
+679.4 38.9
+680.1 6.9
+683.5 9.1
+688.1 13.9
+689.3 13.9
+690.4 1.5
+692.1 21.1
+693.3 7.2
+694.4 0.6
+695.1 0.3
+695.9 6.3
+697.6 6.6
+701.4 1.5
+702.2 1.9
+703.2 1.2
+704.6 2.7
+707.4 6.9
+708.5 6.0
+710.4 10.6
+711.1 2.2
+715.4 1.0
+716.3 1.2
+721.0 4.8
+726.4 7.7
+727.3 20.7
+728.4 8.2
+729.4 7.3
+731.4 8.1
+732.8 11.5
+733.6 0.8
+734.4 2.4
+735.3 5.9
+736.2 8.7
+736.9 6.1
+738.3 0.6
+739.2 2.6
+743.2 0.8
+745.3 42.4
+746.5 26.9
+747.4 3.2
+748.3 2.8
+749.3 1.0
+754.0 1.0
+755.8 0.7
+756.5 1.4
+758.8 6.6
+761.4 11.2
+762.5 3.4
+763.3 27.2
+764.2 3.6
+769.2 7.0
+771.3 0.7
+772.4 3.4
+773.2 3.8
+777.2 15.1
+778.8 38.6
+779.4 130.5
+780.5 47.8
+781.5 0.4
+782.9 3.1
+783.9 0.8
+784.5 1.0
+787.1 0.4
+789.4 0.3
+790.1 0.6
+791.5 3.7
+795.6 1.9
+797.4 11.9
+800.4 4.9
+801.3 3.2
+804.6 1.9
+805.8 1.3
+810.1 7.2
+811.6 6.1
+814.5 6.1
+815.2 23.9
+815.8 4.7
+816.4 4.6
+817.3 0.5
+818.9 3.2
+821.5 1.7
+822.7 0.4
+828.5 3.8
+832.4 48.1
+833.4 21.9
+834.4 12.9
+835.5 6.4
+838.6 1.7
+842.7 1.0
+846.4 0.6
+849.7 3.3
+850.3 29.7
+851.4 17.4
+852.6 0.5
+853.9 7.4
+855.6 2.3
+860.5 3.6
+861.9 5.9
+863.6 1.4
+864.9 5.7
+865.6 0.9
+867.2 4.1
+869.2 2.8
+872.4 4.2
+873.5 1.6
+875.5 2.0
+879.6 0.7
+880.8 6.1
+886.3 4.2
+887.7 0.4
+888.3 1.3
+889.5 21.2
+890.5 59.9
+891.5 30.7
+893.2 0.6
+895.1 7.1
+900.4 1.5
+901.5 7.2
+903.0 2.7
+904.4 7.1
+905.4 4.3
+907.4 136.9
+908.5 48.3
+921.0 4.6
+921.6 1.6
+922.8 2.3
+926.8 3.7
+927.5 1.6
+929.0 4.0
+932.0 2.2
+935.5 0.4
+936.6 12.8
+938.1 1.7
+940.9 1.0
+942.9 2.5
+945.3 4.6
+946.4 12.2
+949.4 5.6
+956.1 0.3
+960.5 5.2
+961.4 4.0
+962.7 8.1
+966.1 10.9
+966.9 1.8
+967.8 1.4
+969.4 1.2
+970.8 3.0
+972.9 11.8
+973.5 5.4
+974.5 7.1
+975.6 8.9
+978.4 117.9
+979.6 54.6
+990.4 20.4
+991.1 18.3
+992.4 4.9
+993.4 3.3
+1004.4 4.6
+1008.3 12.9
+1009.6 4.2
+1013.6 2.0
+1014.3 3.6
+1015.6 3.1
+1016.6 4.1
+1020.4 3.4
+1021.6 8.1
+1023.7 1.4
+1025.0 1.6
+1027.8 4.5
+1030.4 3.6
+1031.6 12.8
+1032.5 44.6
+1033.4 15.6
+1037.3 3.3
+1038.0 1.5
+1038.9 2.7
+1044.8 1.1
+1047.6 1.8
+1049.5 245.9
+1050.6 133.8
+1054.6 23.6
+1055.5 10.2
+1056.7 2.9
+1061.4 3.0
+1069.5 1.6
+1074.5 1.2
+1076.4 0.9
+1079.4 0.3
+1095.4 3.2
+1103.6 2.0
+1104.5 6.7
+1112.7 0.4
+1120.6 2.4
+1155.5 0.4
+1198.8 3.3
+S	40	40	636.37
+Z	2	1271.73
+191.1 1.4
+192.2 11.0
+194.3 3.6
+198.3 10.7
+199.3 2.5
+206.9 2.4
+208.9 3.5
+215.2 3.5
+216.4 2.4
+222.2 6.2
+224.1 4.4
+225.4 10.2
+226.2 4.5
+227.5 4.7
+228.3 0.5
+229.4 2.5
+230.2 2.8
+231.2 42.7
+232.3 4.2
+234.3 17.7
+235.2 2.8
+236.4 5.6
+237.2 2.6
+240.3 4.2
+241.3 4.9
+242.9 8.1
+243.6 1.1
+248.0 2.4
+249.6 3.1
+252.3 2.9
+254.1 1.4
+257.2 4.9
+258.1 4.7
+259.3 20.5
+260.4 6.4
+262.3 3.8
+267.2 2.6
+271.1 1.3
+273.0 1.0
+274.2 6.0
+275.2 9.8
+276.2 138.2
+277.4 20.1
+278.2 7.9
+279.1 1.9
+280.0 4.0
+281.4 2.8
+282.0 0.8
+285.3 2.7
+286.2 7.4
+287.4 13.4
+291.0 6.0
+292.3 12.4
+293.3 3.2
+294.3 6.3
+297.3 2.9
+300.0 1.2
+302.2 1.6
+303.2 9.4
+304.2 7.3
+305.0 8.1
+306.2 41.2
+308.1 1.3
+309.2 7.8
+310.7 3.5
+311.5 4.0
+313.4 2.3
+314.8 8.6
+319.5 18.5
+324.4 1.8
+325.1 1.5
+326.3 11.6
+327.4 16.2
+328.3 17.0
+331.4 5.1
+333.2 0.6
+335.6 6.1
+336.6 13.7
+338.5 0.7
+341.1 7.1
+344.4 9.5
+345.3 11.7
+348.1 6.4
+349.5 4.4
+350.2 4.7
+351.2 8.6
+352.5 1.6
+353.2 2.9
+355.6 7.3
+356.4 13.8
+357.4 15.4
+359.5 1.6
+361.8 12.1
+363.4 6.7
+365.4 5.9
+372.2 21.2
+373.3 12.1
+374.3 17.3
+375.1 1.5
+375.9 12.2
+377.2 14.8
+378.3 7.8
+379.8 5.9
+383.4 5.1
+385.4 5.0
+386.1 8.9
+388.5 18.6
+390.4 64.7
+391.4 10.8
+392.5 12.9
+394.0 7.0
+396.4 25.4
+400.2 7.6
+402.3 3.8
+403.6 6.3
+404.3 6.5
+407.2 6.6
+409.3 4.1
+410.4 4.2
+411.2 2.7
+412.2 4.1
+413.3 11.9
+414.9 31.4
+415.7 7.3
+418.4 8.4
+420.5 1.5
+421.5 2.0
+424.2 17.4
+427.5 8.3
+428.5 7.5
+429.4 7.0
+430.4 6.7
+431.3 2.9
+432.2 11.2
+433.2 3.9
+434.6 11.4
+436.5 8.0
+437.4 28.6
+438.6 1.8
+440.3 23.6
+441.2 3.3
+442.2 10.9
+444.4 5.3
+445.4 6.7
+446.6 9.2
+447.5 21.7
+449.3 62.3
+450.4 78.4
+452.0 4.7
+453.1 6.3
+454.7 5.0
+455.7 4.1
+457.3 8.1
+458.4 22.0
+459.2 6.2
+461.2 9.2
+462.6 1.2
+463.6 3.9
+464.9 16.1
+466.4 15.9
+467.2 4.8
+468.5 7.2
+470.3 3.0
+472.6 28.4
+474.1 5.8
+474.8 4.8
+475.4 7.7
+476.5 4.7
+478.6 6.5
+479.7 17.8
+482.5 6.6
+483.6 10.7
+485.2 11.7
+486.1 7.4
+487.1 2.1
+488.1 13.0
+488.9 4.5
+489.6 5.5
+490.3 36.1
+491.7 11.5
+492.5 37.2
+493.4 21.4
+495.7 9.2
+496.9 18.5
+498.7 14.9
+499.5 2.4
+500.1 46.4
+501.1 3.9
+502.4 12.6
+503.6 14.1
+504.2 7.0
+505.5 35.7
+506.4 9.9
+507.5 48.4
+508.4 18.5
+509.6 48.0
+510.4 75.4
+511.4 54.5
+512.5 6.2
+513.4 16.1
+514.5 11.6
+516.2 51.1
+517.6 2.9
+518.4 15.8
+519.6 15.9
+520.5 12.9
+521.8 5.1
+523.4 53.6
+524.4 66.6
+526.6 27.5
+527.7 26.9
+528.7 15.8
+529.4 0.5
+530.3 0.8
+531.2 19.7
+532.5 13.7
+533.4 8.0
+536.1 12.8
+536.9 13.3
+539.8 2.4
+540.6 7.3
+541.3 17.8
+543.8 17.4
+544.7 16.7
+545.3 10.6
+546.5 23.4
+547.4 3.9
+548.6 17.4
+549.8 20.0
+550.5 144.5
+551.5 56.5
+552.6 4.8
+553.2 2.8
+553.8 46.7
+554.8 80.6
+556.2 9.7
+557.2 23.6
+558.1 10.4
+559.5 23.3
+560.4 27.0
+561.1 15.7
+562.7 198.8
+563.4 90.0
+564.2 20.3
+565.4 35.5
+566.5 32.7
+568.4 153.6
+569.2 69.7
+570.1 39.8
+570.8 6.5
+572.1 30.1
+573.1 51.2
+574.6 22.8
+575.6 17.3
+576.2 68.0
+577.3 31.8
+578.2 34.8
+579.6 15.0
+581.2 31.5
+582.5 51.2
+584.5 196.4
+585.5 75.2
+586.2 24.6
+587.3 6.0
+588.1 16.9
+589.3 8.4
+591.2 32.2
+592.6 45.7
+594.2 94.8
+595.4 32.4
+596.0 20.0
+596.7 122.9
+597.8 49.9
+598.8 18.8
+600.1 202.2
+600.7 149.6
+601.5 59.0
+602.9 67.9
+604.1 29.1
+605.0 68.1
+605.8 34.8
+606.6 44.3
+607.5 12.3
+608.2 44.9
+609.3 173.1
+610.3 197.7
+611.0 82.5
+612.0 36.5
+613.8 41.9
+615.0 51.2
+615.8 30.0
+617.3 110.8
+618.7 335.2
+619.6 373.5
+620.5 56.2
+621.6 45.3
+622.3 29.6
+623.3 15.1
+623.9 24.9
+624.5 30.5
+625.4 31.9
+626.2 199.2
+627.3 794.6
+628.2 1452.4
+629.1 133.3
+630.5 5.5
+631.2 1.8
+632.0 3.0
+643.3 15.8
+644.5 4.4
+645.6 1.4
+646.6 3.7
+647.5 3.5
+648.6 12.9
+650.7 12.0
+652.2 5.4
+658.5 5.3
+660.4 17.1
+661.4 112.3
+663.4 363.4
+664.7 91.3
+665.7 5.4
+666.6 5.1
+667.7 43.1
+668.6 15.1
+669.6 12.3
+670.5 12.1
+672.2 2.2
+675.4 14.1
+678.4 164.6
+679.6 30.4
+680.5 6.8
+686.1 11.9
+687.1 20.6
+688.3 13.4
+689.5 17.7
+691.0 14.9
+692.8 18.6
+695.7 3.8
+697.6 7.1
+701.6 18.8
+704.0 18.0
+705.4 40.6
+706.6 22.0
+708.4 1.8
+709.3 10.3
+710.5 16.6
+713.8 3.9
+717.4 1.5
+718.5 10.5
+719.4 2.8
+722.6 108.4
+723.6 10.5
+724.7 27.9
+725.6 2.0
+726.6 9.9
+728.4 29.5
+729.6 4.9
+730.8 12.2
+731.4 8.2
+732.2 18.0
+733.0 6.2
+734.0 14.7
+736.4 25.6
+737.1 27.5
+738.3 20.1
+739.4 21.2
+740.4 23.6
+741.5 2.5
+742.3 8.7
+743.4 16.6
+745.0 4.1
+745.6 26.0
+746.4 2.6
+748.4 8.5
+749.9 1.9
+754.7 7.7
+755.5 6.9
+756.7 6.0
+758.4 7.0
+759.0 2.9
+759.7 0.6
+760.5 6.6
+761.7 31.3
+762.6 49.3
+763.6 27.1
+764.8 35.8
+766.0 6.5
+766.8 9.8
+767.6 20.0
+769.0 10.2
+770.7 7.2
+771.7 9.6
+772.8 6.9
+775.5 1.3
+776.2 1.3
+777.9 3.6
+778.8 14.6
+779.9 17.3
+780.7 6.4
+781.6 34.3
+782.8 9.5
+783.8 10.9
+785.8 30.8
+786.6 22.8
+787.3 33.0
+788.2 34.7
+789.2 23.5
+790.5 2.8
+796.6 1.5
+799.0 11.7
+799.7 14.5
+801.8 21.7
+802.7 1.0
+805.6 5.8
+806.7 20.7
+809.6 5.8
+810.7 17.6
+812.4 10.7
+813.5 7.0
+815.0 11.2
+816.4 9.3
+817.2 12.1
+818.6 3.4
+819.5 2.1
+820.6 12.5
+821.9 6.9
+822.5 2.6
+823.3 43.4
+824.6 21.7
+825.6 75.7
+826.6 60.8
+827.6 15.6
+829.5 8.4
+831.9 2.6
+832.6 1.2
+833.6 4.6
+834.8 29.9
+836.1 44.7
+836.9 4.6
+838.0 8.8
+839.2 2.8
+840.4 5.3
+841.3 31.9
+841.9 0.8
+843.8 234.0
+844.7 54.2
+845.8 17.2
+846.7 65.8
+847.9 19.9
+850.3 9.7
+852.7 9.2
+853.9 9.6
+856.7 5.5
+858.2 10.4
+861.3 7.5
+863.7 17.9
+864.6 15.6
+866.4 37.8
+868.0 13.7
+868.7 6.3
+869.8 1.1
+873.6 4.6
+874.8 19.3
+875.5 8.6
+876.7 15.3
+877.9 5.3
+878.6 33.6
+879.4 13.4
+880.6 36.5
+881.9 28.5
+882.5 228.3
+883.6 123.4
+884.6 54.8
+885.6 4.1
+887.9 2.6
+891.8 3.1
+893.3 7.8
+894.2 5.7
+894.9 25.5
+895.6 28.5
+896.4 1.3
+897.1 4.4
+898.3 7.9
+899.8 0.9
+900.6 3.5
+901.9 3.8
+904.7 2.8
+905.7 3.6
+906.7 27.1
+908.6 4.1
+909.4 4.6
+914.3 7.4
+916.8 13.1
+917.6 3.4
+920.8 4.5
+923.5 19.0
+924.9 6.4
+925.6 3.8
+932.8 11.2
+934.6 7.3
+935.5 6.6
+936.4 5.9
+939.8 4.1
+942.4 12.2
+945.7 3.9
+947.4 6.8
+950.5 2.5
+951.6 0.7
+952.5 2.8
+960.0 4.1
+960.8 7.5
+961.7 12.7
+963.6 32.4
+964.7 10.4
+965.5 4.3
+967.4 38.2
+968.4 19.6
+969.7 32.5
+974.7 1.9
+976.5 15.4
+978.1 16.1
+979.1 81.0
+979.8 67.7
+980.7 38.8
+981.8 16.8
+982.6 11.5
+985.3 1.0
+986.6 9.2
+987.7 13.1
+988.5 1.1
+989.6 1.7
+991.9 4.9
+992.9 2.3
+994.6 3.0
+996.6 1018.8
+997.6 475.9
+998.8 146.4
+1000.0 2.9
+1002.7 5.8
+1003.4 3.6
+1005.9 6.6
+1007.7 11.4
+1010.4 15.0
+1014.4 0.6
+1015.5 1.8
+1016.7 6.5
+1020.5 24.3
+1021.7 8.4
+1025.7 5.7
+1029.5 2.9
+1030.9 10.1
+1033.8 0.9
+1034.9 3.6
+1038.0 37.9
+1038.7 37.3
+1039.6 34.1
+1040.7 6.1
+1043.4 5.1
+1044.3 1.7
+1047.8 12.3
+1052.5 5.6
+1056.9 4.8
+1062.8 10.7
+1063.7 9.1
+1064.9 7.8
+1070.0 4.4
+1071.7 4.6
+1072.8 2.4
+1073.5 3.9
+1076.7 2.2
+1079.9 12.1
+1080.8 1.5
+1081.7 14.4
+1086.8 3.9
+1087.9 3.9
+1090.2 7.3
+1091.7 4.4
+1092.6 1.0
+1097.7 16.7
+1098.7 16.7
+1099.4 6.5
+1102.5 11.9
+1107.5 10.5
+1108.6 37.3
+1109.8 2.3
+1110.5 0.9
+1113.6 9.6
+1117.9 15.9
+1119.6 5.4
+1120.7 10.7
+1121.6 2.8
+1125.4 58.1
+1126.2 95.3
+1127.0 44.8
+1127.9 27.4
+1133.9 1.1
+1135.8 6.6
+1137.5 2.7
+1138.7 3.8
+1139.4 2.6
+1143.6 36.5
+1144.7 15.9
+1150.5 14.5
+1151.5 5.5
+1153.6 6.5
+1154.8 24.1
+1156.8 0.5
+1169.0 5.3
+1178.7 3.1
+1213.1 12.1
+1215.0 4.6
+S	41	41	1003.84
+Z	2	2006.67
+292.3 9.7
+294.3 39.7
+295.3 14.3
+297.4 8.8
+298.1 7.6
+301.3 11.1
+305.1 3.6
+306.2 9.5
+307.6 1.8
+308.5 6.8
+309.3 2.7
+310.2 6.3
+312.4 12.3
+313.0 12.3
+315.4 11.1
+316.1 10.4
+324.4 23.1
+325.3 10.0
+326.1 35.4
+327.4 9.8
+329.5 11.5
+330.2 10.7
+332.1 2.2
+337.4 10.5
+338.3 1.8
+339.2 6.2
+342.3 2.2
+350.2 9.5
+351.1 6.6
+352.5 10.0
+353.1 2.9
+354.4 3.6
+355.5 12.9
+357.3 4.7
+360.6 3.4
+361.3 15.4
+362.4 1.2
+364.3 5.4
+366.4 3.8
+368.4 4.0
+369.6 36.0
+371.3 2.9
+375.2 6.1
+381.3 5.0
+384.4 9.9
+386.3 84.8
+387.1 4.6
+390.9 8.3
+392.5 7.3
+394.5 14.8
+395.9 16.1
+398.3 1.5
+402.2 27.8
+407.3 64.3
+408.6 9.1
+409.2 7.4
+410.2 24.8
+411.5 16.8
+412.5 19.5
+414.2 46.9
+417.4 5.1
+418.2 3.3
+420.4 14.7
+421.5 19.0
+423.1 6.3
+424.4 2.4
+425.3 2.2
+427.1 2.1
+428.3 1.6
+429.4 10.3
+431.3 1.8
+436.4 2.2
+437.2 20.2
+438.3 31.9
+439.3 23.6
+440.2 8.3
+440.9 1.2
+441.5 8.8
+442.2 6.9
+444.2 8.0
+445.5 3.0
+446.4 7.6
+449.5 4.1
+452.1 10.7
+454.5 8.2
+455.2 26.3
+456.1 13.5
+457.4 2.1
+459.3 24.3
+461.3 2.5
+464.4 3.9
+465.4 42.5
+468.9 9.2
+472.4 35.0
+473.2 28.1
+474.5 4.3
+481.3 3.8
+482.5 29.1
+483.2 3.8
+485.4 38.5
+487.4 3.4
+489.4 9.2
+493.3 25.7
+495.4 8.8
+496.4 5.8
+498.5 8.1
+499.5 5.4
+500.5 14.3
+501.1 6.5
+503.3 15.7
+504.2 20.7
+507.2 10.0
+508.4 11.3
+512.3 10.2
+513.5 42.6
+514.5 10.2
+515.4 11.1
+517.5 8.5
+520.4 518.8
+521.4 176.0
+522.5 7.7
+523.9 15.0
+524.7 4.5
+526.6 20.3
+527.3 2.6
+528.5 33.4
+529.5 45.8
+530.1 10.7
+532.9 20.2
+533.6 5.6
+536.5 15.5
+537.5 3.4
+539.2 28.2
+541.2 3.9
+542.6 13.1
+543.4 11.7
+544.6 36.3
+545.4 10.9
+546.3 6.6
+547.4 20.6
+549.2 56.1
+550.5 13.4
+551.3 6.4
+554.7 13.5
+556.6 2.2
+557.3 35.0
+558.6 42.4
+559.5 9.1
+560.3 9.7
+561.5 11.0
+564.4 1.9
+565.3 2.2
+566.4 2.8
+568.5 20.1
+571.0 6.6
+573.6 4.4
+574.4 17.3
+575.4 18.6
+576.3 8.4
+577.4 13.0
+580.5 27.7
+582.2 35.7
+585.4 26.9
+586.8 49.2
+587.5 3.1
+588.2 36.0
+589.8 26.9
+590.6 11.2
+594.8 51.0
+595.6 54.4
+596.6 19.2
+597.5 10.9
+598.3 9.5
+599.5 10.3
+601.0 8.9
+602.3 19.4
+604.2 19.7
+605.2 5.8
+606.3 3.3
+607.3 29.1
+609.2 22.8
+612.5 28.0
+613.8 24.0
+614.5 12.0
+615.7 17.8
+616.4 2.6
+617.6 25.4
+618.4 9.2
+619.6 7.6
+622.4 19.8
+623.2 6.8
+626.5 9.6
+627.3 66.1
+628.6 9.3
+629.8 33.5
+630.7 13.1
+631.5 12.3
+635.6 39.8
+637.8 45.1
+645.6 32.6
+646.5 2.0
+647.9 13.1
+649.1 4.5
+650.2 47.0
+651.4 18.5
+653.1 18.6
+656.7 29.8
+657.3 7.1
+658.6 24.4
+660.3 33.5
+661.4 29.6
+662.4 32.1
+663.0 0.9
+663.7 43.6
+664.4 8.7
+666.4 11.9
+668.4 10.7
+669.5 6.6
+671.0 28.6
+672.3 11.0
+673.6 4.4
+676.6 10.3
+678.1 12.4
+679.4 6.0
+682.3 16.7
+682.9 21.1
+684.3 2.4
+685.7 27.5
+686.6 4.2
+687.6 40.9
+689.5 21.0
+690.4 2.3
+691.6 24.5
+692.9 19.2
+695.4 3.4
+696.2 15.2
+698.7 39.8
+699.3 14.6
+700.1 11.0
+701.5 72.2
+703.2 32.7
+705.6 2.7
+707.5 3.4
+708.7 27.0
+709.7 27.8
+710.6 72.2
+711.5 19.6
+713.2 10.1
+714.4 42.0
+715.6 24.0
+716.3 19.8
+717.1 42.4
+718.4 10.7
+719.4 12.2
+720.1 7.8
+721.5 10.8
+722.7 21.6
+725.8 42.9
+726.7 7.2
+727.5 14.2
+728.3 46.0
+729.5 14.0
+730.3 32.4
+732.5 647.3
+733.6 238.6
+734.6 27.2
+735.8 75.6
+736.6 40.1
+739.4 14.1
+740.5 19.9
+741.6 34.5
+742.6 42.0
+743.9 91.2
+745.0 32.6
+746.8 54.7
+748.1 16.0
+749.5 20.9
+751.6 52.7
+752.6 33.1
+753.2 3.6
+754.0 20.6
+755.6 12.1
+756.7 40.6
+757.6 29.4
+758.6 16.7
+759.4 1.6
+760.3 124.3
+761.4 53.4
+762.7 19.6
+763.7 11.1
+766.6 30.3
+767.5 26.7
+768.5 12.0
+769.6 13.2
+770.9 19.1
+772.6 10.6
+774.6 35.5
+776.5 6.2
+778.6 33.4
+780.4 14.5
+782.7 20.5
+784.0 32.2
+785.5 35.9
+786.4 3.3
+787.2 4.1
+788.4 79.8
+789.5 10.6
+790.2 9.7
+790.9 24.1
+791.8 59.2
+792.7 10.6
+793.8 13.8
+794.5 8.4
+795.4 14.5
+796.8 141.7
+797.6 314.5
+798.4 6.9
+799.2 38.5
+800.0 14.3
+800.8 107.1
+801.6 74.5
+802.4 24.9
+803.2 15.9
+805.9 13.0
+807.5 26.8
+808.9 18.1
+810.7 20.9
+811.4 14.6
+813.7 22.7
+814.6 32.7
+816.3 6.6
+817.4 12.8
+818.6 3.8
+820.9 21.2
+822.0 28.5
+823.2 20.9
+824.4 33.3
+825.5 17.7
+827.0 24.3
+827.7 12.7
+828.3 13.6
+829.1 44.9
+830.1 14.4
+830.8 41.3
+831.5 15.6
+832.8 6.5
+834.7 45.0
+836.5 67.2
+837.5 44.7
+838.7 26.2
+839.6 18.8
+841.5 23.1
+842.4 23.8
+843.5 37.5
+844.9 34.9
+845.6 15.3
+846.4 11.6
+848.1 134.1
+849.1 56.0
+850.4 43.1
+851.5 35.8
+852.5 17.5
+853.8 44.3
+854.7 39.0
+855.7 17.2
+857.0 102.4
+857.8 234.1
+858.9 7.4
+860.4 11.1
+861.6 48.5
+862.4 44.7
+863.6 42.3
+864.8 16.5
+865.5 40.9
+866.4 29.6
+868.8 22.0
+870.4 118.0
+871.4 33.9
+872.5 46.6
+873.5 175.0
+874.7 146.6
+875.8 35.3
+876.6 16.1
+877.3 2.1
+878.7 3.2
+879.3 30.0
+880.2 26.5
+881.1 32.1
+882.3 272.7
+883.4 129.9
+885.0 402.9
+885.8 92.3
+886.7 19.1
+887.3 45.3
+888.5 564.5
+889.6 291.6
+890.6 55.4
+892.1 8.9
+893.2 44.5
+893.8 36.0
+896.7 54.7
+897.4 14.2
+898.5 6.6
+900.5 21.6
+901.9 1.7
+903.6 13.9
+904.5 6.5
+905.6 15.9
+906.4 16.0
+908.0 24.9
+908.9 37.8
+912.6 44.6
+913.8 96.0
+914.5 2.1
+915.6 32.7
+916.7 21.0
+917.9 16.4
+918.6 63.5
+921.8 144.8
+922.6 55.1
+923.4 77.8
+924.6 91.9
+925.7 29.4
+926.7 114.2
+927.4 36.0
+928.3 26.8
+929.7 49.1
+930.7 213.3
+931.7 440.2
+932.9 494.6
+934.0 30.7
+935.4 114.3
+936.0 151.2
+936.8 111.0
+937.6 3.7
+939.5 49.2
+940.7 60.7
+941.9 16.6
+942.9 12.4
+943.9 49.3
+944.8 178.6
+945.6 189.7
+946.6 62.6
+947.5 31.5
+949.9 3063.7
+950.6 1977.9
+951.4 1286.8
+952.5 8.2
+953.4 21.9
+954.1 19.0
+954.8 16.3
+955.9 40.7
+956.9 52.5
+958.1 223.0
+959.4 109.3
+960.4 21.1
+961.4 59.3
+962.3 47.7
+963.3 108.4
+964.4 51.3
+965.3 111.6
+967.0 222.0
+967.6 643.2
+968.6 1643.0
+969.9 42.3
+970.7 21.8
+971.8 121.4
+972.7 17.4
+973.6 28.9
+974.6 70.6
+975.7 115.5
+976.4 230.8
+977.3 247.9
+978.2 2.8
+978.9 1.9
+979.8 66.0
+980.5 25.9
+981.2 83.5
+982.1 82.8
+983.1 96.0
+984.4 60.6
+985.4 121.2
+986.2 210.9
+987.2 173.1
+988.3 158.4
+989.1 23.6
+989.7 4.1
+991.8 9.7
+993.3 23.6
+994.5 224.5
+995.2 74.1
+996.5 5.5
+997.1 4.5
+1004.4 5.1
+1005.3 9.7
+1014.7 5.4
+1016.2 18.1
+1017.4 20.7
+1019.0 14.6
+1025.9 17.0
+1026.9 20.5
+1028.4 12.7
+1031.6 54.9
+1032.7 65.1
+1033.6 39.0
+1034.3 34.8
+1037.6 9.0
+1039.9 5.5
+1041.9 13.4
+1042.7 22.1
+1043.7 7.0
+1045.8 42.7
+1046.8 44.6
+1047.5 44.9
+1048.6 26.2
+1050.0 11.9
+1051.8 21.4
+1052.8 22.3
+1055.7 34.0
+1056.9 29.5
+1057.7 21.3
+1058.6 4.3
+1059.5 3.5
+1060.6 29.8
+1062.4 8.6
+1063.6 3.5
+1064.7 12.3
+1065.3 11.9
+1066.8 5.0
+1068.7 30.5
+1069.6 9.4
+1073.8 97.2
+1074.6 21.9
+1075.6 13.2
+1077.6 20.9
+1079.0 39.5
+1080.8 2.2
+1082.6 8.0
+1083.3 42.1
+1084.6 56.0
+1086.0 82.7
+1087.8 8.3
+1089.1 49.1
+1089.9 23.3
+1090.6 44.8
+1092.5 43.7
+1094.3 14.6
+1098.8 49.4
+1100.2 95.4
+1100.8 154.6
+1101.7 193.6
+1102.8 73.8
+1104.2 64.5
+1106.6 16.7
+1112.8 7.2
+1113.8 12.5
+1114.7 49.0
+1115.5 1.0
+1117.1 17.3
+1118.5 107.7
+1119.4 54.4
+1120.6 49.8
+1122.9 7.1
+1125.7 8.6
+1126.9 25.6
+1130.1 27.3
+1130.7 2.2
+1131.6 24.2
+1132.6 31.1
+1133.7 16.7
+1138.5 8.6
+1140.1 22.6
+1140.7 45.0
+1141.9 26.7
+1142.7 12.4
+1144.6 8.7
+1145.8 3.4
+1148.3 31.2
+1149.6 12.0
+1151.6 9.9
+1152.8 5.6
+1155.6 51.8
+1157.0 39.2
+1157.8 7.0
+1158.5 35.3
+1160.2 15.4
+1161.2 14.5
+1162.8 31.9
+1163.6 3.9
+1164.5 36.4
+1165.8 16.0
+1167.0 7.0
+1169.6 12.8
+1170.3 39.9
+1171.2 32.7
+1171.8 2.4
+1172.6 6.7
+1174.8 3.3
+1176.3 14.7
+1178.7 12.8
+1179.6 11.9
+1181.1 15.6
+1182.0 4.5
+1183.6 36.0
+1184.8 39.6
+1186.4 66.2
+1187.5 37.5
+1188.1 4.3
+1188.7 22.3
+1189.9 9.0
+1190.9 52.6
+1193.7 6.6
+1194.7 19.5
+1196.8 13.7
+1197.8 21.1
+1199.1 62.9
+1200.5 35.4
+1201.8 32.2
+1202.6 2.1
+1203.6 9.6
+1204.8 16.3
+1205.6 7.7
+1207.6 34.8
+1209.8 32.6
+1211.0 28.0
+1212.1 75.5
+1212.8 2.1
+1213.5 28.3
+1215.6 61.5
+1217.3 44.8
+1218.4 61.7
+1220.8 9.8
+1221.6 17.2
+1223.0 11.2
+1224.5 42.0
+1225.8 65.4
+1226.8 31.9
+1227.8 59.7
+1230.8 19.7
+1232.9 18.3
+1233.8 20.2
+1234.6 19.7
+1235.6 34.2
+1237.5 14.6
+1238.9 8.9
+1241.6 23.4
+1242.6 27.9
+1243.9 93.6
+1244.9 90.0
+1245.8 8.5
+1246.7 66.7
+1248.0 9.7
+1248.9 38.4
+1250.7 17.5
+1251.8 18.3
+1253.5 11.9
+1256.7 76.0
+1257.6 50.1
+1258.9 47.6
+1260.6 253.5
+1261.6 167.3
+1262.8 138.7
+1263.5 6.3
+1264.3 16.2
+1268.2 1.0
+1269.3 20.6
+1271.4 24.4
+1272.6 44.9
+1273.9 142.4
+1274.8 1062.2
+1275.7 545.3
+1276.6 308.3
+1277.9 49.7
+1280.5 6.2
+1281.3 34.3
+1282.5 1.4
+1285.0 46.4
+1286.8 46.9
+1287.6 26.8
+1288.6 22.9
+1290.9 32.2
+1292.4 7.1
+1293.9 3.9
+1294.9 25.3
+1295.7 6.1
+1298.2 141.2
+1299.0 4.8
+1299.8 52.5
+1300.9 73.5
+1302.0 24.7
+1302.7 5.4
+1304.6 37.7
+1305.7 32.1
+1306.4 49.8
+1310.0 11.7
+1312.2 42.5
+1313.2 63.0
+1314.2 12.4
+1315.1 9.6
+1316.3 23.4
+1317.2 51.6
+1318.1 26.8
+1318.9 14.9
+1319.5 8.4
+1321.4 9.0
+1322.0 28.0
+1322.6 74.8
+1323.7 72.1
+1324.9 18.9
+1326.7 37.6
+1327.7 34.4
+1328.7 19.1
+1330.0 18.8
+1331.8 15.4
+1332.7 15.3
+1333.5 7.3
+1335.8 17.0
+1336.8 1.4
+1338.1 3.9
+1339.0 41.7
+1340.1 43.7
+1340.9 48.4
+1341.9 33.1
+1342.6 11.1
+1343.7 79.0
+1344.6 17.3
+1345.9 16.2
+1346.8 33.8
+1348.5 71.8
+1351.3 24.0
+1354.7 18.6
+1356.2 27.1
+1357.0 43.2
+1357.8 38.5
+1359.6 35.1
+1361.7 315.4
+1362.7 246.0
+1363.8 110.4
+1365.3 2.1
+1367.8 8.7
+1369.3 40.4
+1370.6 10.2
+1371.8 29.2
+1373.0 27.9
+1373.8 15.1
+1376.6 41.3
+1377.8 30.4
+1379.5 8.0
+1380.8 37.8
+1381.7 6.0
+1383.5 10.0
+1387.8 26.3
+1388.9 21.5
+1389.9 38.7
+1390.8 30.1
+1394.6 36.4
+1395.2 4.2
+1399.4 33.2
+1400.0 15.2
+1403.6 13.1
+1404.5 19.4
+1406.1 55.8
+1409.8 19.8
+1411.7 8.0
+1413.9 12.1
+1414.6 29.7
+1416.0 52.9
+1416.8 9.3
+1419.8 12.9
+1421.5 44.8
+1422.4 2.1
+1423.5 13.5
+1424.9 17.7
+1426.7 35.2
+1427.7 15.8
+1429.8 36.4
+1430.5 15.7
+1431.6 47.4
+1432.8 213.1
+1433.9 120.4
+1434.8 64.3
+1435.5 36.3
+1436.1 27.2
+1437.7 20.1
+1438.6 27.4
+1443.3 3.5
+1444.7 50.6
+1445.9 25.0
+1446.8 58.2
+1447.8 26.7
+1448.8 11.2
+1450.2 35.1
+1450.8 3.7
+1451.9 13.5
+1457.7 2.4
+1458.8 4.3
+1459.9 13.4
+1462.4 31.2
+1464.1 24.7
+1464.7 23.6
+1465.8 16.2
+1466.8 6.5
+1468.5 66.2
+1469.6 44.4
+1470.2 17.8
+1470.9 28.1
+1471.9 10.5
+1473.1 11.0
+1476.3 5.6
+1479.8 5.3
+1482.0 2.0
+1482.7 9.1
+1484.8 4.2
+1486.6 1313.0
+1487.7 909.7
+1488.8 478.1
+1490.0 46.5
+1492.8 127.9
+1493.7 133.4
+1494.8 67.1
+1495.7 6.8
+1501.0 16.6
+1501.9 8.8
+1503.1 5.1
+1504.9 20.3
+1506.8 38.8
+1509.1 19.8
+1512.0 6.8
+1516.5 2.7
+1518.8 24.1
+1520.8 7.1
+1521.9 6.6
+1524.8 34.9
+1528.0 5.4
+1533.2 13.2
+1534.6 4.5
+1535.8 39.3
+1536.7 11.6
+1540.8 8.9
+1541.7 3.7
+1543.2 2.5
+1548.8 6.3
+1549.8 11.2
+1550.8 13.3
+1552.2 5.1
+1556.6 10.6
+1557.6 4.0
+1559.9 11.6
+1560.5 13.1
+1564.0 6.6
+1565.0 6.6
+1568.8 22.5
+1570.0 4.1
+1571.1 11.7
+1571.8 32.5
+1573.7 10.8
+1574.9 5.4
+1575.8 54.6
+1576.9 12.4
+1577.8 12.2
+1578.8 19.0
+1581.7 4.4
+1582.7 11.2
+1583.8 9.9
+1587.8 3.1
+1592.8 245.1
+1593.9 321.1
+1595.0 127.8
+1596.1 28.0
+1599.8 182.1
+1600.9 168.8
+1601.9 80.2
+1602.8 25.2
+1603.9 3.8
+1607.0 6.4
+1609.8 1.7
+1613.8 11.9
+1616.8 28.7
+1617.8 4.9
+1620.1 9.1
+1623.1 10.8
+1624.6 1.4
+1633.2 3.6
+1635.2 10.5
+1638.0 18.2
+1645.5 14.6
+1649.1 13.4
+1649.8 1.7
+1652.2 8.0
+1653.0 8.1
+1657.9 20.9
+1660.9 3.8
+1662.7 28.7
+1664.8 23.1
+1676.6 3.1
+1684.9 15.0
+1685.9 2.8
+1686.9 7.1
+1689.2 3.5
+1694.8 15.1
+1695.5 9.1
+1697.0 26.2
+1698.1 31.1
+1701.7 8.8
+1704.0 3.9
+1705.3 4.1
+1707.8 8.3
+1708.9 23.0
+1712.9 410.8
+1714.0 306.4
+1714.9 139.9
+1716.0 31.9
+1717.0 12.1
+1729.5 3.4
+1736.9 5.9
+1739.1 12.8
+1746.0 19.8
+1763.0 31.7
+1763.7 24.2
+1764.9 33.2
+1766.3 29.0
+1776.3 3.6
+1782.1 8.5
+1791.7 6.1
+1797.9 15.3
+1809.9 5.6
+1812.9 3.4
+1817.6 19.5
+1830.9 7.5
+1842.1 10.1
+1843.3 19.6
+1844.9 21.5
+1853.2 22.4
+1855.5 6.7
+1856.8 14.2
+1860.0 70.5
+1861.1 66.1
+1862.0 21.5
+1863.1 17.3
+1867.0 2.9
+1870.0 11.3
+1872.4 28.9
+1878.2 11.0
+1879.1 33.7
+1880.1 11.9
+1885.5 14.5
+1889.2 4.3
+1890.2 13.9
+1914.8 11.6
+1932.1 8.6
+1982.0 6.4
+S	42	42	1032.26
+Z	3	3094.76
+293.9 1.9
+300.9 2.0
+314.2 0.9
+325.2 10.7
+326.1 1.4
+334.3 2.0
+336.1 1.3
+338.3 0.3
+341.7 6.2
+342.4 8.1
+352.5 1.0
+353.7 1.2
+356.0 1.1
+359.2 5.2
+360.9 0.3
+367.2 2.2
+369.5 1.3
+370.5 2.7
+371.2 3.2
+380.3 4.2
+385.4 5.4
+386.2 0.4
+387.3 2.0
+389.3 7.6
+390.1 1.7
+391.3 1.8
+394.2 2.9
+395.0 2.7
+397.4 2.4
+409.2 2.1
+412.3 2.2
+413.3 7.3
+415.4 17.5
+416.1 3.5
+423.3 4.4
+425.3 3.2
+427.4 2.8
+428.5 0.8
+432.1 0.7
+438.5 1.6
+448.3 0.8
+451.1 0.3
+453.5 2.1
+454.5 11.3
+456.4 1.3
+459.2 1.8
+465.4 2.1
+467.2 2.0
+469.3 1.5
+470.5 3.3
+472.4 0.4
+473.2 1.0
+476.4 1.2
+477.8 4.2
+478.8 1.2
+480.4 1.6
+484.5 0.3
+488.3 5.6
+494.2 2.4
+502.3 2.0
+504.6 8.8
+505.6 1.7
+510.3 2.0
+512.6 3.7
+513.3 3.4
+514.5 2.8
+519.4 2.3
+522.4 3.6
+523.3 4.4
+524.8 4.6
+525.7 2.4
+526.5 0.9
+530.4 2.9
+536.9 1.9
+540.4 2.2
+541.3 4.2
+542.7 1.0
+543.3 0.3
+544.4 3.8
+548.2 0.5
+549.4 0.8
+551.4 7.8
+552.4 7.3
+554.7 1.5
+563.0 7.5
+564.1 2.1
+569.4 1.4
+572.1 72.9
+573.1 8.4
+575.5 1.8
+577.6 0.7
+580.4 3.8
+583.4 5.9
+585.3 4.2
+586.5 1.9
+588.6 0.8
+590.6 2.2
+591.4 0.9
+595.7 1.7
+597.2 3.0
+598.2 3.4
+599.4 4.7
+600.1 1.5
+601.5 4.5
+606.7 1.8
+607.7 24.9
+612.1 1.0
+616.4 0.8
+617.2 1.3
+618.4 39.2
+619.3 11.3
+620.6 6.5
+621.4 3.9
+623.4 0.4
+626.5 2.4
+627.2 2.9
+628.6 2.8
+633.4 7.1
+635.3 2.4
+636.0 1.5
+638.3 3.1
+641.3 10.7
+642.0 0.6
+643.5 0.9
+644.2 2.1
+648.4 3.6
+649.4 5.3
+650.3 3.5
+651.7 7.6
+653.6 1.4
+654.3 3.3
+655.3 0.6
+656.3 3.3
+657.5 3.3
+658.5 0.5
+660.4 7.0
+661.6 1.7
+666.4 18.8
+667.5 11.1
+668.2 2.9
+668.9 1.3
+669.5 0.5
+670.8 6.2
+671.5 2.4
+672.7 3.4
+673.6 2.9
+675.5 2.1
+677.4 1.5
+681.8 2.1
+683.6 5.2
+684.5 4.6
+685.3 2.7
+685.9 3.3
+686.6 2.2
+689.4 68.8
+690.4 12.6
+691.4 3.1
+692.6 4.3
+693.4 17.6
+694.3 2.1
+698.0 9.6
+699.5 2.8
+703.1 1.3
+704.6 1.0
+705.4 2.6
+707.1 12.6
+709.5 1.0
+711.5 8.5
+713.3 3.4
+714.3 4.8
+715.0 10.9
+717.4 1.3
+719.8 4.5
+721.6 1.6
+723.6 2.4
+724.8 10.4
+727.5 5.8
+730.6 5.2
+732.8 5.9
+735.4 5.5
+736.5 3.9
+737.5 23.2
+738.7 13.7
+739.6 0.2
+741.2 1.9
+743.7 3.9
+745.3 13.8
+746.3 12.3
+747.5 6.7
+748.5 3.2
+749.2 4.0
+750.1 4.2
+750.9 1.2
+752.1 4.6
+752.9 15.7
+753.7 7.9
+754.5 1.5
+755.5 2.7
+757.5 8.2
+758.5 4.1
+759.3 7.5
+762.1 15.2
+762.9 4.6
+764.1 6.1
+764.8 5.1
+768.3 1.7
+769.3 36.2
+770.8 115.6
+771.5 71.2
+772.5 2.3
+774.4 2.0
+775.1 2.1
+776.3 1.1
+777.9 442.1
+778.5 403.0
+779.5 13.7
+780.2 0.5
+780.9 1.0
+782.2 9.5
+784.5 9.1
+785.5 3.1
+787.2 4.4
+788.5 4.4
+789.5 4.3
+790.5 7.4
+800.3 1.3
+802.4 28.5
+803.6 12.4
+804.9 2.5
+805.7 7.5
+808.5 8.3
+809.4 1.8
+810.7 6.1
+811.4 3.0
+812.3 4.1
+813.3 5.1
+814.2 4.0
+815.1 4.1
+817.1 3.4
+819.8 9.2
+820.5 0.4
+822.6 0.9
+824.5 8.1
+825.4 5.0
+826.9 14.1
+827.6 0.6
+828.9 4.9
+829.7 2.1
+833.2 72.5
+834.0 17.7
+834.8 10.1
+835.8 3.5
+837.1 5.6
+838.8 4.8
+840.2 16.1
+840.8 8.0
+841.6 0.9
+842.3 192.8
+843.4 9.3
+844.4 0.9
+845.4 8.7
+846.8 5.9
+847.9 2.6
+848.8 8.0
+850.4 2.7
+851.3 7.7
+852.3 2.6
+853.1 6.6
+854.1 1.3
+854.9 6.3
+857.3 5.8
+860.3 18.8
+862.7 6.7
+863.7 1.2
+864.5 4.8
+865.1 0.8
+866.5 11.4
+867.4 1.5
+868.3 8.1
+871.3 8.7
+872.5 8.6
+873.6 8.9
+874.5 1.7
+876.3 2.1
+878.1 3.6
+879.5 23.9
+880.5 5.4
+882.0 14.4
+883.0 5.8
+884.2 28.0
+886.6 2.2
+888.0 2.5
+888.7 2.2
+889.6 0.8
+890.6 6.9
+892.4 7.0
+893.6 3.6
+894.6 7.6
+895.8 2.4
+898.5 4.7
+900.4 18.2
+903.1 6.3
+908.3 1.4
+909.0 6.6
+910.7 1.8
+913.7 30.6
+914.6 6.1
+917.4 15.7
+918.6 2.6
+919.3 2.1
+921.3 8.1
+921.9 14.7
+923.0 5.7
+924.6 1.4
+925.6 9.8
+926.6 5.6
+927.3 0.4
+928.1 1.4
+929.0 5.3
+930.2 27.0
+931.0 10.0
+931.6 43.4
+932.5 32.1
+933.3 4.7
+935.7 2.6
+937.6 8.2
+939.1 17.8
+940.0 438.7
+940.8 597.1
+941.7 47.8
+942.6 22.9
+944.8 9.1
+945.6 9.9
+946.5 3.2
+948.4 29.0
+949.3 3.4
+950.6 0.9
+951.9 17.0
+952.6 7.9
+954.0 3.6
+955.2 13.8
+956.0 9.5
+957.0 26.0
+957.8 9.2
+958.6 7.4
+959.6 15.4
+960.8 5.2
+961.5 6.9
+962.9 11.3
+963.6 4.1
+964.3 9.2
+965.2 4.1
+965.9 9.9
+967.0 3.0
+968.0 61.5
+969.1 23.3
+970.1 18.2
+971.1 15.8
+972.4 9.7
+973.1 3.9
+974.1 9.7
+975.2 9.2
+975.9 5.5
+976.7 14.3
+977.3 236.7
+978.0 36.8
+978.9 79.3
+979.9 202.2
+980.8 10.0
+981.9 9.6
+982.7 18.0
+983.7 10.5
+984.6 16.2
+985.3 4.3
+986.5 7.9
+987.1 9.7
+989.5 9.0
+990.5 10.6
+992.2 16.8
+993.2 9.7
+994.1 19.9
+995.3 6.6
+996.1 31.3
+997.2 24.5
+997.9 25.3
+998.8 12.0
+999.5 19.3
+1000.3 35.1
+1001.1 24.7
+1001.7 1.8
+1003.7 28.1
+1004.7 17.3
+1005.6 25.4
+1006.5 8.0
+1007.9 5.0
+1009.2 51.4
+1010.0 16.2
+1010.8 46.7
+1011.7 12.2
+1012.9 12.5
+1013.6 15.3
+1014.3 67.4
+1015.1 11.6
+1016.1 25.7
+1017.4 17.9
+1018.6 15.4
+1019.6 15.0
+1020.9 15.8
+1022.0 8.9
+1023.0 1.5
+1033.8 6.1
+1037.6 1.4
+1038.3 1.5
+1042.6 4.0
+1046.0 0.4
+1048.3 2.7
+1052.1 2.0
+1053.7 1.7
+1057.6 2.3
+1058.5 3.3
+1060.7 8.2
+1064.6 4.8
+1065.9 8.9
+1068.1 3.4
+1069.4 15.5
+1074.4 4.2
+1075.5 5.8
+1076.8 6.5
+1077.8 11.8
+1078.8 2.2
+1079.6 6.4
+1082.9 2.4
+1084.5 2.8
+1085.4 2.1
+1086.4 13.4
+1087.6 6.7
+1088.6 7.1
+1089.7 20.8
+1090.5 4.5
+1091.4 7.1
+1094.4 2.1
+1096.0 9.6
+1096.6 1.7
+1097.8 1.8
+1099.9 22.8
+1101.8 1.2
+1102.9 5.7
+1105.7 1.8
+1106.5 2.0
+1107.2 4.4
+1108.4 7.6
+1109.4 10.1
+1110.1 2.1
+1113.7 17.3
+1117.7 1.1
+1118.6 0.4
+1122.8 3.9
+1123.9 3.3
+1125.7 8.6
+1126.4 1.6
+1128.8 2.7
+1131.4 6.2
+1132.9 1.2
+1133.7 0.3
+1134.3 6.0
+1135.7 5.1
+1137.3 1.5
+1138.1 1.3
+1139.1 5.2
+1139.8 0.9
+1140.5 4.2
+1142.6 205.2
+1143.6 118.5
+1144.7 22.2
+1145.8 2.9
+1147.2 17.8
+1148.0 9.0
+1149.8 7.8
+1150.5 3.4
+1151.9 16.2
+1152.6 4.1
+1153.5 10.9
+1156.6 1.5
+1157.6 8.3
+1158.7 58.2
+1160.0 5.0
+1160.6 3.0
+1162.6 0.9
+1166.2 64.8
+1167.1 12.9
+1168.0 3.7
+1169.0 3.8
+1171.6 8.7
+1173.8 12.0
+1174.8 0.8
+1176.5 1.2
+1178.3 8.1
+1180.7 7.9
+1181.6 14.5
+1182.4 0.2
+1183.4 2.5
+1184.4 7.2
+1185.3 4.0
+1186.4 10.7
+1187.8 2.6
+1189.2 6.4
+1190.0 5.8
+1190.8 6.7
+1191.5 1.0
+1192.6 2.1
+1194.1 42.4
+1195.1 15.0
+1195.8 23.0
+1196.7 1.2
+1198.5 120.3
+1199.4 56.2
+1200.6 22.6
+1202.4 2.3
+1203.6 60.0
+1204.4 139.4
+1205.4 7.5
+1206.7 0.6
+1208.4 5.3
+1210.3 1.7
+1213.6 70.7
+1214.7 33.7
+1215.9 29.1
+1216.5 380.2
+1217.5 185.1
+1218.7 48.5
+1220.0 12.3
+1229.4 3.8
+1230.3 24.9
+1231.1 2.9
+1231.7 5.3
+1233.0 3.2
+1234.8 2.1
+1235.6 7.8
+1239.1 9.2
+1239.7 29.0
+1240.6 13.6
+1242.1 13.1
+1243.9 2.4
+1245.4 2.0
+1246.6 0.8
+1247.5 41.3
+1248.4 44.5
+1249.4 3.1
+1250.7 12.2
+1253.7 4.0
+1255.5 6.2
+1259.3 4.2
+1260.6 11.3
+1262.0 8.5
+1264.0 10.6
+1267.6 5.2
+1268.7 7.9
+1269.9 3.2
+1271.0 11.7
+1273.1 5.7
+1274.7 10.8
+1275.7 2.1
+1276.4 10.9
+1277.8 12.2
+1278.4 5.8
+1280.0 1.7
+1280.8 2.2
+1281.8 7.6
+1283.4 70.3
+1284.2 23.2
+1285.0 6.4
+1288.4 4.6
+1290.6 3.5
+1292.1 2.0
+1296.2 20.1
+1296.9 17.3
+1297.6 4.8
+1299.4 6.2
+1301.5 5.7
+1307.3 5.9
+1308.6 13.3
+1311.2 9.1
+1316.0 4.3
+1317.7 0.7
+1319.3 10.3
+1321.0 2.3
+1322.9 4.7
+1323.5 5.3
+1328.1 16.9
+1328.9 26.9
+1329.9 14.0
+1331.3 1.9
+1332.6 10.5
+1333.3 100.1
+1334.5 3.3
+1338.3 10.2
+1339.3 7.4
+1340.1 2.1
+1340.9 1.2
+1342.2 138.0
+1343.3 7.3
+1344.9 3.8
+1345.7 6.9
+1347.0 3.4
+1347.9 2.6
+1348.5 1.4
+1349.9 4.5
+1353.0 17.9
+1354.1 46.8
+1355.1 8.4
+1355.9 17.3
+1357.2 2.4
+1359.0 5.7
+1359.6 1.6
+1362.0 12.3
+1362.8 34.1
+1363.6 6.9
+1364.4 4.4
+1365.5 2.2
+1366.3 8.4
+1367.8 4.6
+1369.8 0.7
+1372.8 12.0
+1374.6 5.3
+1375.7 2.3
+1376.6 1.0
+1377.7 5.4
+1381.4 0.9
+1383.3 2.1
+1384.7 1.7
+1385.7 6.3
+1387.8 11.7
+1394.6 28.8
+1395.7 15.7
+1396.6 1.4
+1397.7 5.6
+1398.4 11.0
+1399.9 3.0
+1402.1 1.9
+1403.0 4.6
+1403.9 5.4
+1405.5 5.6
+1406.4 11.0
+1408.4 1.9
+1409.7 10.1
+1411.2 10.7
+1412.6 88.4
+1413.5 83.3
+1414.3 21.5
+1415.0 9.9
+1415.9 9.4
+1417.0 0.5
+1418.2 29.7
+1418.8 27.8
+1419.6 9.5
+1420.4 1.4
+1421.6 5.1
+1422.3 1.2
+1423.8 1.6
+1425.0 0.4
+1426.0 3.1
+1427.0 22.4
+1427.7 15.9
+1428.5 2.6
+1429.9 6.1
+1431.1 21.9
+1432.8 2.3
+1433.7 6.7
+1435.6 1.7
+1437.0 2.3
+1438.9 1.5
+1439.5 3.0
+1440.4 14.3
+1441.0 6.3
+1442.0 10.5
+1444.0 6.4
+1444.9 8.3
+1445.7 1.3
+1447.1 8.1
+1448.6 5.0
+1452.5 2.4
+1453.4 7.9
+1456.7 2.9
+1457.9 14.9
+1459.1 12.2
+1461.0 1.7
+1463.8 4.2
+1465.4 6.4
+1466.4 10.6
+1467.3 4.7
+1468.9 1.0
+1469.9 6.1
+1470.7 10.3
+1471.4 15.2
+1472.3 3.6
+1474.7 64.0
+1475.3 60.8
+1475.9 24.6
+1476.7 0.7
+1478.2 8.0
+1478.9 6.3
+1480.1 1.3
+1481.1 6.2
+1482.8 7.2
+1485.6 2.9
+1486.8 3.0
+1487.9 15.8
+1489.3 4.4
+1490.3 9.8
+1491.3 19.2
+1492.5 4.1
+1494.5 6.8
+1498.1 1.7
+1499.2 3.2
+1501.8 1.3
+1502.9 1.9
+1504.4 3.3
+1506.1 1.8
+1507.6 1.4
+1512.8 7.6
+1518.6 0.4
+1519.5 1.0
+1520.8 2.4
+1522.7 84.9
+1523.8 62.5
+1524.6 14.6
+1525.4 2.3
+1529.8 3.3
+1531.0 3.4
+1536.2 0.3
+1537.0 5.0
+1537.8 11.2
+1538.9 0.9
+1540.1 17.3
+1540.7 225.1
+1541.7 213.9
+1542.7 67.8
+1543.5 6.2
+1545.5 2.0
+1546.6 1.9
+1554.7 174.0
+1555.8 133.8
+1556.9 56.2
+1558.1 4.0
+1562.7 1.1
+1566.1 2.4
+1567.5 2.1
+1572.9 5.5
+1575.4 3.7
+1577.5 0.9
+1578.2 3.8
+1580.0 7.1
+1582.8 2.1
+1589.0 2.4
+1597.3 0.5
+1600.0 1.9
+1610.5 1.3
+1618.1 2.3
+1619.8 5.1
+1621.9 0.4
+1626.5 2.2
+1628.7 2.4
+1631.2 4.7
+1633.9 1.1
+1639.2 0.8
+1642.2 3.3
+1648.6 2.0
+1650.4 3.1
+1664.8 1.8
+1666.1 5.2
+1666.7 2.9
+1667.6 1.2
+1682.9 3.0
+1684.0 3.7
+1684.8 5.9
+1686.0 1.7
+1689.3 2.3
+1690.7 1.4
+1695.2 1.0
+1700.8 6.3
+1701.5 0.8
+1710.1 3.9
+1713.9 0.9
+1715.5 1.3
+1716.4 1.9
+1718.5 1.2
+1719.2 2.0
+1721.9 1.2
+1725.9 1.0
+1728.7 2.0
+1731.7 0.6
+1733.1 5.4
+1733.8 9.7
+1734.8 1.4
+1741.5 1.6
+1746.0 5.1
+1746.7 0.8
+1749.7 1.5
+1760.3 1.0
+1761.5 1.8
+1763.6 2.2
+1764.9 1.4
+1772.9 11.7
+1778.5 2.1
+1782.2 1.6
+1788.6 1.1
+1790.2 0.9
+1795.9 5.3
+1796.5 1.1
+1801.2 1.0
+1803.0 1.3
+1805.1 0.7
+1811.0 1.4
+1814.8 3.9
+1816.4 0.6
+1818.7 1.5
+1824.7 1.3
+1831.0 3.7
+1834.1 1.5
+1835.5 1.5
+1838.2 1.8
+1845.5 0.5
+1849.7 1.3
+1859.9 3.6
+1864.0 9.3
+1881.9 9.1
+1883.2 7.5
+1883.9 2.1
+1884.5 1.0
+1889.2 0.8
+1895.2 0.7
+1897.9 4.8
+1900.8 4.3
+1902.0 4.1
+1904.9 2.1
+1909.9 3.1
+1912.2 0.3
+1913.1 1.6
+1919.2 2.8
+1928.9 0.7
+1933.4 2.6
+1935.0 15.8
+1935.9 10.1
+1938.2 4.1
+1943.9 4.7
+1944.9 1.2
+1947.6 1.4
+1952.9 16.3
+1953.6 11.5
+1954.3 10.2
+1955.8 5.1
+1956.5 3.1
+1966.3 1.2
+1972.9 1.8
+1973.5 2.8
+S	43	43	713.07
+I	ID	217
+I	RTime	10.7170
+Z	1	713.07
+226.3 2.7
+241.3 1.8
+251.2 3.7
+255.3 5.4
+258.1 1.3
+274.1 3.9
+276.0 2.7
+280.3 2.5
+284.3 1.7
+292.1 2.4
+295.3 8.0
+310.1 2.7
+312.1 3.0
+315.2 3.0
+324.2 2.5
+326.2 3.4
+333.2 2.7
+342.2 3.0
+343.3 3.0
+371.6 4.1
+376.2 3.7
+380.2 3.2
+394.5 1.2
+403.2 0.8
+413.3 2.2
+421.2 1.6
+423.9 2.5
+438.3 5.3
+439.1 2.5
+442.7 1.7
+452.5 3.9
+453.5 1.3
+468.0 3.9
+469.2 5.6
+470.3 4.3
+474.3 2.9
+475.1 2.2
+488.3 5.0
+495.0 2.5
+496.3 9.0
+497.5 11.1
+498.3 17.5
+499.0 1.2
+505.3 5.4
+517.1 2.5
+524.1 1.0
+530.4 7.5
+531.5 1.0
+532.2 3.7
+535.2 3.5
+538.3 5.5
+547.4 2.2
+548.5 2.9
+553.1 3.7
+557.3 3.0
+565.3 3.7
+566.3 1.2
+567.3 9.6
+573.3 4.5
+583.5 1.5
+584.3 6.0
+591.4 3.2
+592.1 3.2
+594.4 3.0
+597.3 4.4
+598.3 2.0
+605.4 1.3
+612.9 3.5
+615.5 2.5
+620.5 3.5
+652.3 6.0
+653.4 1.8
+659.9 11.8
+662.3 2.0
+663.3 4.3
+664.1 12.5
+676.4 3.7
+677.7 5.5
+678.3 7.9
+682.3 2.0
+683.7 1.5
+694.2 17.2
+695.3 37.7
+696.4 14.8
+697.9 2.7
+704.4 6.6
+819.2 3.9
+922.6 7.4
+1273.2 1.5
+S	44	44	1002.52
+Z	2	2004.03
+283.0 3.7
+285.1 4.5
+289.3 23.0
+293.2 6.6
+300.1 10.6
+301.3 125.0
+302.2 13.8
+305.3 12.3
+308.1 9.1
+309.0 3.4
+311.2 3.4
+312.3 9.6
+313.4 9.1
+315.3 20.7
+316.2 7.5
+317.3 7.8
+318.4 3.7
+319.5 2.5
+323.1 5.4
+325.2 6.5
+327.4 2.7
+328.2 24.7
+329.3 7.0
+330.3 10.6
+332.3 5.0
+333.3 3.5
+335.1 9.5
+337.2 14.3
+339.1 14.6
+340.2 16.0
+341.1 61.4
+342.1 2.9
+343.2 9.8
+344.1 19.0
+345.3 75.5
+346.1 7.5
+347.2 13.1
+349.5 5.0
+350.2 9.6
+351.7 11.1
+352.3 2.5
+353.3 78.6
+354.4 5.8
+355.4 5.8
+357.2 6.8
+358.3 8.6
+361.5 31.2
+362.4 2.5
+363.3 16.3
+364.3 22.8
+365.1 7.0
+366.9 5.0
+368.1 5.4
+369.3 7.9
+370.4 14.1
+371.3 8.0
+372.2 3.5
+373.1 6.4
+374.1 14.1
+375.3 3.4
+376.1 8.1
+377.4 22.6
+378.2 5.5
+379.4 9.8
+380.3 58.9
+381.4 27.7
+382.4 19.1
+384.4 7.0
+386.3 10.0
+387.4 7.8
+388.3 4.6
+389.8 27.5
+391.2 17.5
+393.0 2.9
+394.0 8.6
+395.5 9.5
+396.4 17.5
+397.6 19.2
+398.3 148.3
+399.3 45.5
+400.4 23.8
+401.2 44.7
+402.4 4.5
+405.0 16.2
+406.1 3.7
+408.3 31.5
+409.5 8.0
+410.1 3.5
+411.2 41.7
+412.5 37.7
+413.3 161.0
+414.4 56.9
+415.2 87.8
+416.4 35.7
+417.3 15.3
+418.3 49.0
+419.4 56.0
+421.0 14.6
+422.0 9.3
+423.3 8.6
+424.1 9.6
+425.2 8.3
+426.3 21.7
+427.2 11.8
+428.3 15.8
+429.1 2.2
+430.2 13.3
+432.5 2.7
+433.3 9.8
+434.6 8.3
+435.5 14.1
+436.3 186.1
+437.2 34.2
+439.0 101.1
+440.3 46.0
+441.3 14.6
+442.2 7.0
+443.1 13.3
+444.2 23.0
+445.3 31.8
+446.3 18.7
+448.1 4.9
+449.4 28.2
+450.4 10.5
+451.3 13.0
+452.3 3.4
+453.1 9.8
+454.2 17.2
+455.6 13.6
+456.3 7.0
+457.2 19.5
+459.3 41.2
+460.2 19.3
+461.3 12.6
+462.1 33.0
+463.4 50.4
+464.3 17.5
+465.4 18.5
+469.4 4.4
+470.5 13.6
+471.3 10.0
+472.6 27.3
+473.2 5.5
+474.3 20.8
+475.3 22.2
+476.4 16.2
+477.2 57.0
+478.1 19.2
+479.2 8.3
+480.2 24.7
+480.9 6.8
+483.1 6.0
+484.0 8.0
+486.0 6.0
+487.2 17.3
+488.3 27.7
+489.3 7.8
+490.3 14.1
+491.4 16.2
+492.2 16.2
+493.3 40.4
+494.0 4.8
+495.2 12.1
+496.3 20.5
+497.5 15.5
+498.4 53.7
+499.3 29.7
+500.2 11.5
+501.0 6.4
+502.3 9.5
+503.2 4.5
+505.3 7.4
+507.4 35.2
+508.4 25.7
+509.4 41.9
+510.3 37.0
+511.5 56.2
+512.4 8.0
+513.4 189.0
+514.3 90.6
+515.4 46.7
+516.3 88.3
+517.4 21.2
+518.5 5.6
+519.1 5.8
+520.2 15.8
+521.2 48.0
+521.9 12.8
+522.6 14.8
+523.8 15.1
+525.1 12.8
+527.3 45.7
+528.5 2.7
+529.4 17.2
+530.4 7.1
+533.4 71.8
+534.3 3.4
+535.3 19.8
+536.2 4.8
+539.3 25.0
+540.5 32.0
+541.3 22.8
+542.7 6.1
+543.3 29.2
+544.3 41.9
+545.2 205.0
+546.3 14.1
+547.2 11.3
+548.0 4.5
+549.6 18.5
+550.2 15.3
+551.5 16.3
+552.4 11.6
+554.1 17.5
+555.4 289.8
+556.4 34.0
+557.4 5.3
+559.3 25.1
+560.6 31.1
+561.3 51.9
+562.2 241.1
+563.3 37.5
+564.4 38.9
+565.4 9.6
+567.0 20.3
+567.8 23.6
+568.4 42.4
+569.2 25.7
+570.4 5.1
+571.3 7.3
+573.2 31.6
+575.7 10.6
+577.6 12.3
+578.4 102.1
+579.3 102.1
+580.1 35.2
+581.3 28.2
+582.2 4.5
+583.2 60.4
+584.2 17.2
+585.5 17.2
+586.2 70.8
+587.5 74.3
+588.6 23.7
+589.4 38.5
+591.0 27.7
+592.3 31.1
+593.1 28.0
+594.1 8.0
+595.5 28.7
+596.3 9.5
+599.2 5.6
+600.3 8.6
+601.2 6.1
+603.3 11.3
+604.4 18.7
+605.4 25.2
+606.2 30.3
+607.2 86.9
+608.0 32.9
+609.3 35.2
+610.2 36.0
+611.4 36.2
+613.3 42.5
+614.3 90.1
+615.0 7.9
+616.2 4.0
+617.1 4.6
+618.3 16.2
+619.4 6.1
+620.1 11.3
+621.0 26.3
+623.0 6.1
+624.3 45.0
+625.6 32.9
+626.4 22.3
+627.5 125.5
+628.5 41.0
+629.5 30.7
+631.1 92.6
+632.2 55.2
+633.1 53.5
+634.7 30.2
+636.2 5.5
+637.1 31.2
+637.9 10.1
+639.3 25.7
+640.1 2.2
+641.3 27.7
+642.2 57.7
+643.4 88.5
+644.4 147.6
+645.4 102.4
+646.4 64.4
+647.4 12.3
+648.5 98.0
+649.3 79.4
+650.4 22.2
+651.5 15.6
+652.4 23.2
+653.3 14.6
+654.3 27.2
+655.3 39.0
+657.2 24.7
+658.2 2.2
+659.3 26.1
+661.4 958.0
+662.5 310.3
+663.4 48.7
+664.3 33.2
+665.4 9.1
+666.5 15.8
+667.4 10.6
+668.1 6.8
+669.3 19.8
+671.3 19.6
+672.5 19.5
+673.3 11.8
+674.3 7.4
+675.5 14.8
+676.3 30.2
+677.2 15.8
+678.4 13.8
+679.6 5.5
+681.2 35.7
+682.4 32.2
+683.4 17.7
+685.0 6.8
+686.0 12.5
+687.2 6.6
+688.6 30.3
+689.4 19.3
+690.3 3.4
+691.1 21.2
+692.2 12.5
+693.4 33.9
+694.2 12.5
+695.4 7.5
+696.0 6.3
+697.6 57.5
+698.5 74.1
+699.6 14.1
+700.4 17.2
+701.5 18.5
+702.3 8.1
+703.4 8.6
+704.3 5.0
+705.5 8.8
+706.1 16.3
+706.8 10.8
+707.4 49.7
+708.5 46.2
+709.4 31.7
+710.1 18.7
+711.5 38.2
+712.4 24.2
+713.1 12.8
+713.7 44.0
+715.2 2.5
+716.3 22.3
+717.0 23.5
+719.1 2.5
+720.4 24.5
+721.2 39.2
+722.2 35.7
+723.4 21.6
+724.5 14.1
+725.4 6.3
+726.6 13.1
+727.4 49.7
+728.4 18.7
+729.2 5.6
+730.6 65.5
+731.5 56.5
+732.6 42.2
+734.4 15.0
+735.2 6.0
+736.3 9.0
+737.2 37.2
+738.5 70.1
+739.4 66.1
+741.3 34.5
+742.3 23.2
+743.7 4.6
+744.4 19.8
+745.2 27.8
+746.5 11.8
+747.5 3.7
+750.4 23.0
+751.4 30.6
+752.4 56.4
+753.4 13.0
+754.6 83.5
+755.4 357.7
+756.8 249.6
+757.5 334.7
+758.5 158.1
+759.3 98.6
+760.1 19.2
+761.7 45.2
+763.1 533.5
+764.1 325.5
+765.2 92.9
+766.2 83.1
+767.4 10.3
+768.4 91.5
+769.5 271.8
+770.4 88.1
+771.4 27.5
+772.4 27.6
+773.4 30.1
+775.5 361.2
+776.4 123.5
+777.4 31.7
+778.7 46.5
+779.7 10.8
+781.0 335.8
+782.1 119.8
+783.0 21.3
+784.6 8.3
+785.3 24.8
+786.3 37.9
+789.3 22.1
+790.0 7.6
+791.4 18.1
+792.2 12.1
+793.4 24.6
+794.4 35.9
+795.1 5.1
+796.4 11.5
+797.5 29.7
+798.5 31.1
+799.3 3.9
+800.4 27.1
+801.2 62.4
+802.0 6.5
+802.7 31.7
+803.6 56.2
+804.6 29.6
+805.5 38.4
+807.4 14.8
+808.4 14.1
+809.4 36.2
+810.0 6.0
+810.6 20.2
+811.4 42.5
+812.3 18.7
+813.5 2.7
+814.4 6.5
+815.4 18.2
+816.2 19.3
+817.2 5.0
+818.2 14.6
+819.1 28.5
+820.2 6.1
+820.9 12.6
+821.5 28.3
+823.2 50.4
+824.6 26.2
+825.5 25.2
+826.2 14.6
+827.5 13.5
+828.5 44.7
+829.7 16.0
+832.7 8.0
+833.3 18.8
+834.3 41.0
+835.2 27.8
+836.4 55.5
+837.6 37.7
+838.7 32.7
+839.4 81.3
+840.2 23.3
+841.1 11.1
+842.5 53.7
+843.5 16.0
+844.1 5.5
+845.4 13.5
+846.4 15.8
+847.3 1.8
+849.5 14.6
+850.6 25.5
+852.5 61.2
+853.4 69.9
+854.1 40.0
+855.4 34.2
+856.4 70.4
+857.3 67.5
+859.0 11.1
+862.5 29.0
+863.5 17.6
+864.3 3.2
+865.0 16.1
+865.8 21.8
+866.5 16.5
+867.5 18.5
+868.7 57.0
+869.8 11.6
+870.8 14.8
+871.6 64.5
+873.0 53.7
+874.3 63.2
+875.3 39.7
+876.3 2.5
+877.4 6.8
+878.4 24.7
+880.6 13.8
+881.4 48.4
+883.4 32.5
+884.4 19.7
+885.7 32.5
+886.8 32.9
+887.9 12.3
+888.7 18.5
+889.5 14.0
+892.7 10.1
+894.2 3.2
+895.1 16.7
+895.8 18.7
+896.6 17.2
+897.3 64.9
+898.2 34.7
+899.5 14.1
+904.0 21.5
+905.4 59.9
+906.7 30.2
+908.3 7.3
+910.3 332.6
+911.4 158.1
+912.3 44.5
+913.4 42.0
+914.3 25.1
+917.6 36.4
+919.6 9.1
+920.2 16.6
+921.4 45.2
+922.7 14.1
+923.9 18.1
+924.7 2.5
+925.5 3.9
+926.4 55.0
+927.1 3.2
+928.0 13.1
+928.8 13.8
+929.4 18.5
+930.4 4.0
+931.4 11.0
+932.2 19.2
+933.9 7.8
+935.4 10.6
+937.3 143.8
+938.3 128.8
+939.4 75.4
+940.6 100.3
+941.4 78.5
+942.4 60.0
+943.1 48.0
+944.3 7.0
+945.4 18.1
+946.6 12.1
+947.6 45.2
+948.4 35.7
+951.8 9.6
+952.6 13.5
+954.2 27.8
+955.3 100.9
+956.9 153.3
+957.6 502.6
+958.4 325.6
+959.5 581.7
+960.4 221.8
+961.3 14.6
+963.5 37.4
+964.5 65.0
+965.3 151.8
+966.5 86.9
+967.4 84.0
+968.4 54.9
+969.4 24.2
+970.2 19.1
+970.9 50.2
+971.7 13.8
+972.7 15.8
+973.9 29.5
+974.9 35.2
+975.6 1.7
+978.1 45.0
+979.9 28.2
+981.0 48.0
+982.5 995.5
+983.4 2427.6
+984.5 1388.6
+985.4 1453.9
+986.5 440.8
+988.7 36.5
+989.3 5.5
+991.4 30.3
+992.0 94.0
+993.0 59.2
+994.5 9.0
+1011.3 6.6
+1012.4 23.7
+1020.1 3.0
+1022.9 5.0
+1033.4 9.3
+1050.7 4.0
+1059.9 12.5
+1063.4 10.1
+1068.7 4.3
+1070.3 13.0
+1079.8 4.0
+1081.5 3.2
+1082.5 22.2
+1083.1 2.7
+1084.4 6.3
+1085.7 2.2
+1086.3 4.3
+1090.4 193.0
+1091.4 105.1
+1092.6 74.0
+1093.6 9.8
+1095.6 28.7
+1098.8 16.7
+1102.4 205.0
+1103.5 200.6
+1104.5 132.1
+1105.5 8.1
+1111.9 16.3
+1112.8 14.3
+1113.9 48.0
+1114.7 3.2
+1115.6 3.0
+1120.5 4.9
+1122.5 16.2
+1123.5 11.6
+1125.2 6.6
+1127.2 13.6
+1129.4 43.0
+1130.3 16.1
+1131.7 6.5
+1133.3 7.0
+1135.5 8.8
+1141.8 3.0
+1144.4 2.0
+1147.2 11.6
+1156.2 14.8
+1160.3 10.5
+1162.8 22.8
+1167.7 10.3
+1168.8 20.5
+1177.4 9.6
+1183.6 20.0
+1191.1 10.5
+1192.5 24.0
+1193.5 27.3
+1198.4 5.1
+1200.0 40.5
+1200.9 17.7
+1201.5 13.3
+1202.6 16.5
+1206.6 4.3
+1207.2 2.7
+1211.2 20.3
+1213.6 8.6
+1217.6 18.3
+1218.3 249.0
+1219.4 479.2
+1220.5 350.3
+1221.6 10.1
+1222.6 20.2
+1223.6 18.7
+1227.5 28.7
+1228.6 4.0
+1229.4 6.5
+1230.4 24.8
+1240.4 5.8
+1242.5 7.0
+1243.4 8.1
+1244.7 4.1
+1245.7 12.3
+1246.6 19.0
+1256.3 15.1
+1265.6 8.1
+1270.2 2.5
+1272.6 4.9
+1273.5 42.9
+1274.5 19.3
+1278.7 5.3
+1281.3 8.5
+1285.5 5.6
+1288.3 6.0
+1293.9 5.8
+1294.8 8.1
+1295.8 9.8
+1297.5 15.0
+1301.2 13.3
+1304.5 18.7
+1305.6 2.2
+1313.6 8.8
+1319.8 5.0
+1320.7 6.5
+1322.3 12.3
+1324.4 11.5
+1325.5 4.9
+1326.4 12.0
+1331.6 7.3
+1333.5 56.0
+1334.5 69.5
+1348.7 13.8
+1354.5 12.1
+1356.3 31.3
+1357.4 10.1
+1372.4 14.8
+1373.4 32.4
+1374.5 12.8
+1376.5 3.4
+1380.3 7.0
+1381.6 52.7
+1382.6 15.3
+1387.5 8.6
+1391.4 8.1
+1392.6 22.5
+1402.3 19.2
+1403.7 27.1
+1404.6 8.8
+1405.4 4.9
+1411.8 23.6
+1412.8 19.2
+1420.5 55.7
+1421.6 113.6
+1422.7 38.7
+1428.4 33.2
+1430.0 14.8
+1432.6 17.0
+1433.8 12.8
+1440.7 9.3
+1447.3 10.6
+1450.7 6.8
+1468.5 11.8
+1469.5 27.5
+1470.5 6.6
+1471.5 11.1
+1476.6 3.0
+1486.6 102.3
+1487.5 170.6
+1488.5 168.3
+1489.6 17.1
+1490.6 8.6
+1492.5 9.6
+1493.4 28.7
+1494.0 20.0
+1494.8 36.9
+1504.1 13.1
+1506.1 18.1
+1510.6 3.7
+1512.1 25.5
+1516.9 12.3
+1522.5 34.7
+1523.5 152.3
+1524.5 70.1
+1525.4 24.2
+1526.1 7.6
+1527.6 7.0
+1528.7 24.2
+1530.6 20.0
+1531.7 10.3
+1545.2 11.0
+1547.5 11.3
+1549.2 11.5
+1552.1 3.5
+1554.2 7.6
+1556.2 16.0
+1562.5 3.0
+1564.7 3.5
+1565.6 2.2
+1567.3 19.8
+1568.5 9.8
+1569.6 25.7
+1570.4 18.2
+1572.3 14.3
+1578.0 32.5
+1586.3 68.6
+1587.3 205.3
+1588.4 180.8
+1589.4 5.0
+1592.6 64.3
+1594.0 7.0
+1594.9 10.0
+1596.9 4.8
+1605.3 14.5
+1608.7 9.3
+1611.4 4.3
+1630.3 6.0
+1638.2 4.3
+1642.1 17.1
+1643.0 5.9
+1644.8 2.2
+1683.3 9.3
+1684.7 5.0
+1685.6 6.0
+1686.9 6.5
+1689.0 12.5
+1694.3 8.5
+1704.6 5.0
+1710.6 14.3
+1712.6 10.6
+1716.4 2.5
+1717.6 37.7
+1722.6 4.5
+1724.7 5.4
+1734.8 31.0
+1735.5 66.1
+1736.4 228.6
+1737.6 14.3
+1739.5 10.1
+1741.2 10.1
+1742.6 8.3
+1745.3 11.3
+1768.4 6.5
+1796.7 11.6
+1808.5 12.6
+1849.6 5.4
+1851.5 13.1
+1852.6 38.7
+1853.5 8.8
+1855.0 31.1
+1856.3 7.4
+1861.3 5.0
+1871.7 9.3
+1967.1 4.3
+1968.2 15.1
+S	45	45	419.32
+I	ID	170
+I	RTime	8.3761
+Z	2	837.63
+127.1 8.1
+129.1 7.5
+130.2 1.0
+135.3 1.5
+147.0 4.9
+148.8 13.8
+158.0 1.2
+161.1 6.1
+174.9 11.1
+200.1 1.7
+205.1 4.1
+218.1 1.2
+220.1 1.2
+223.9 1.0
+225.0 0.8
+226.2 1.5
+227.1 7.5
+228.3 3.7
+231.4 1.0
+235.1 1.7
+240.1 4.5
+241.2 1.7
+243.0 6.9
+249.3 3.5
+253.3 1.2
+255.3 3.0
+256.1 2.4
+260.1 7.4
+269.0 1.3
+271.1 1.5
+273.2 15.6
+274.6 19.1
+275.3 3.2
+287.2 2.0
+290.1 27.3
+291.2 9.5
+292.1 2.7
+293.2 6.1
+299.1 1.0
+301.0 2.5
+304.1 26.5
+305.3 2.2
+318.3 1.0
+322.0 1.2
+325.0 4.3
+330.0 1.6
+331.0 2.0
+335.3 1.6
+339.3 1.2
+340.6 1.7
+342.2 2.7
+344.4 1.7
+345.2 4.0
+347.5 3.2
+348.4 2.5
+349.1 1.2
+351.2 1.1
+353.6 1.1
+354.4 0.6
+355.0 4.5
+355.8 1.5
+357.3 2.0
+359.6 3.7
+361.8 3.2
+366.2 7.3
+367.1 3.0
+369.2 4.0
+370.2 1.3
+371.8 4.4
+374.5 4.9
+375.3 8.3
+378.9 2.7
+383.6 8.3
+384.5 8.1
+385.4 14.1
+386.5 3.5
+387.1 1.2
+388.2 1.2
+389.3 1.1
+391.2 1.3
+396.7 5.3
+401.3 146.5
+402.3 26.5
+403.1 4.5
+406.8 4.0
+407.8 9.8
+409.6 6.3
+410.5 5.1
+411.3 9.6
+412.0 9.0
+432.1 1.3
+449.4 2.0
+486.3 4.9
+488.1 1.7
+497.5 1.6
+501.7 19.2
+509.3 2.2
+521.1 2.9
+535.3 3.0
+536.1 3.0
+555.3 2.2
+557.3 3.2
+562.5 3.7
+564.5 4.4
+565.5 1.0
+574.3 4.0
+579.3 2.5
+594.4 3.0
+597.5 5.5
+599.5 2.4
+608.2 5.4
+615.7 4.3
+691.6 2.0
+708.4 5.0
+709.5 1.7
+S	46	46	613.81
+Z	2	1226.61
+177.2 18.6
+183.0 2.6
+185.8 2.9
+186.9 0.6
+188.0 1.6
+193.2 1.5
+200.2 1.3
+203.0 0.7
+204.8 0.4
+210.2 2.0
+214.0 3.0
+216.2 0.4
+217.0 1.1
+217.9 1.9
+220.4 1.4
+221.2 1.5
+222.2 3.8
+223.1 1.4
+224.3 5.2
+225.0 4.0
+227.1 2.4
+229.3 1.1
+230.1 5.2
+233.3 1.2
+234.1 3.1
+236.0 2.0
+240.0 1.5
+241.4 1.7
+243.3 2.2
+246.0 1.0
+248.2 8.4
+250.3 1.3
+252.2 0.2
+253.7 3.2
+254.4 1.6
+255.2 0.5
+256.4 0.8
+258.3 4.7
+260.0 5.3
+263.1 1.2
+266.5 3.9
+267.7 10.9
+268.9 2.7
+271.3 11.3
+272.2 1.6
+274.3 10.1
+275.2 3.9
+277.4 6.2
+278.2 2.6
+281.3 10.3
+283.1 4.1
+284.3 2.2
+285.2 5.9
+287.1 5.1
+288.9 1.7
+292.2 1.4
+296.3 3.0
+298.4 2.5
+299.1 1.5
+301.1 4.3
+302.1 7.3
+303.1 22.4
+304.2 8.9
+306.0 1.1
+307.2 0.9
+307.9 0.7
+311.2 1.8
+313.0 2.4
+317.2 0.8
+319.2 39.6
+320.2 7.2
+321.3 11.1
+322.0 0.7
+324.5 1.4
+325.2 1.4
+326.2 0.8
+328.2 1.2
+333.2 1.8
+338.2 46.0
+339.2 5.7
+340.1 1.2
+342.3 0.5
+344.1 1.6
+345.1 1.4
+345.9 0.8
+349.1 9.7
+351.2 1.7
+354.5 7.4
+355.3 11.7
+356.3 10.3
+357.1 33.8
+358.1 23.0
+359.2 15.7
+363.2 2.5
+365.2 1.1
+367.3 3.8
+369.2 0.3
+371.3 1.0
+373.2 5.0
+374.3 8.9
+375.5 4.5
+376.5 21.4
+377.4 3.9
+381.3 4.5
+384.2 1.6
+386.4 2.5
+387.3 2.9
+388.0 1.9
+389.2 8.3
+390.6 5.3
+392.4 50.3
+393.3 3.8
+395.1 2.1
+396.2 2.1
+399.4 4.8
+401.2 2.6
+402.4 1.9
+404.3 1.2
+406.2 1.6
+408.4 0.6
+409.2 2.3
+410.4 9.9
+411.6 3.9
+413.5 1.6
+414.4 3.1
+415.9 5.5
+417.4 25.0
+418.2 1.8
+419.1 1.9
+420.3 2.8
+425.0 0.7
+427.4 2.9
+428.3 0.9
+429.0 1.8
+430.1 5.5
+431.1 8.4
+432.0 9.7
+434.3 42.5
+437.3 1.8
+439.0 7.8
+442.2 3.0
+444.4 5.4
+445.3 19.5
+446.6 9.7
+447.4 12.8
+448.1 2.1
+449.5 3.5
+453.0 1.4
+454.7 2.4
+456.1 3.6
+458.5 0.5
+460.3 12.9
+461.3 14.8
+462.3 20.0
+463.4 28.5
+464.5 17.0
+465.4 8.7
+466.1 4.8
+468.2 5.9
+472.2 7.4
+474.4 3.9
+475.5 1.5
+477.2 7.3
+478.5 2.3
+480.1 14.9
+481.3 11.0
+482.5 1.0
+483.8 2.0
+486.5 6.5
+487.6 2.1
+489.9 13.5
+490.5 2.3
+491.3 2.4
+492.3 2.4
+492.9 0.6
+494.0 8.6
+496.1 3.5
+497.2 4.5
+499.4 24.2
+500.3 8.4
+501.2 17.6
+502.6 11.1
+503.3 1.9
+504.3 6.1
+506.6 4.8
+507.4 14.8
+508.6 11.3
+509.3 3.3
+511.2 9.4
+511.9 18.8
+513.1 2.5
+514.2 7.0
+515.6 14.1
+516.5 65.8
+517.4 26.0
+518.4 5.1
+519.0 5.4
+519.6 0.5
+520.3 10.4
+523.0 1.4
+524.6 24.1
+525.4 74.3
+526.3 34.2
+528.0 15.7
+529.0 9.3
+530.3 22.8
+531.4 14.5
+532.2 25.2
+533.4 9.1
+534.1 16.1
+534.8 4.6
+535.7 11.9
+537.3 16.2
+538.1 0.8
+538.7 9.6
+539.5 2.6
+540.8 1.4
+542.1 10.9
+542.8 26.8
+546.1 31.4
+547.4 23.7
+548.3 9.8
+549.7 10.4
+551.1 100.7
+552.1 34.8
+553.6 13.3
+554.7 5.8
+556.2 9.7
+557.5 9.5
+560.1 270.4
+561.0 87.7
+561.9 10.4
+564.3 1.3
+565.4 1.2
+569.0 303.1
+569.8 53.0
+570.6 20.2
+571.7 6.5
+572.4 10.1
+574.1 12.2
+576.6 4.8
+577.6 27.3
+578.3 14.8
+579.4 37.8
+580.0 0.7
+581.3 0.6
+582.0 10.3
+582.8 2.2
+584.1 10.1
+585.1 5.0
+586.7 26.2
+587.3 25.8
+588.0 8.9
+589.4 2.6
+590.2 3.1
+591.1 2.8
+594.2 9.3
+595.1 127.8
+596.1 205.3
+597.2 29.6
+597.9 2.3
+599.5 4.9
+600.5 1.8
+602.3 2.0
+604.3 390.0
+605.0 229.2
+606.0 5.7
+607.1 0.4
+607.8 4.8
+609.8 0.6
+612.6 3.1
+614.2 1.3
+621.3 0.9
+630.3 1.2
+632.5 1.5
+634.7 2.0
+637.0 2.8
+639.1 3.6
+643.6 1.6
+649.3 8.8
+650.7 3.8
+651.9 2.6
+654.3 1.5
+655.8 2.3
+658.3 0.7
+659.2 5.5
+660.5 10.8
+669.1 3.5
+671.1 0.7
+674.4 8.6
+675.2 3.9
+676.2 5.7
+677.9 16.1
+678.6 34.8
+679.4 4.8
+684.3 1.7
+688.4 2.3
+690.3 1.3
+692.3 6.2
+693.2 3.7
+694.3 1.4
+696.7 1.8
+706.1 0.9
+707.5 6.1
+710.7 0.8
+711.3 1.0
+713.4 2.2
+715.5 1.4
+719.2 0.2
+727.2 1.2
+729.0 2.5
+729.7 1.9
+730.6 1.2
+731.5 9.7
+737.4 0.9
+738.2 1.8
+745.3 9.8
+746.3 11.9
+747.4 6.5
+748.7 5.6
+752.9 5.7
+762.2 2.2
+763.3 10.2
+764.1 10.1
+765.5 1.1
+770.4 3.4
+772.4 1.6
+775.9 9.3
+779.5 44.4
+780.4 24.3
+782.5 3.5
+783.6 1.0
+785.0 2.6
+789.8 1.1
+793.2 4.5
+794.5 4.1
+796.1 2.4
+798.5 1.2
+800.3 2.2
+805.4 4.5
+813.5 1.1
+814.6 4.1
+815.4 0.9
+816.3 2.7
+817.3 1.9
+818.1 0.7
+818.7 1.5
+824.5 2.4
+832.4 14.6
+833.3 16.6
+834.0 2.0
+836.4 1.3
+842.4 0.8
+850.4 19.5
+851.4 6.6
+852.2 1.2
+854.2 1.5
+859.6 7.8
+860.4 0.7
+861.6 2.3
+864.0 4.7
+872.7 0.7
+875.3 2.5
+880.4 1.6
+886.1 0.6
+887.7 3.5
+889.3 10.0
+890.3 10.1
+891.6 7.6
+893.5 0.5
+897.5 1.9
+903.5 2.1
+904.1 0.5
+905.0 1.7
+906.2 0.4
+907.5 50.4
+908.4 20.7
+909.4 7.1
+910.1 2.6
+910.8 1.6
+917.4 2.1
+920.9 2.9
+922.2 1.9
+936.8 1.9
+937.4 2.8
+944.7 2.6
+946.0 11.2
+946.7 13.7
+947.7 1.8
+949.9 1.3
+955.3 2.7
+960.7 3.5
+961.8 12.2
+962.7 3.9
+963.3 3.0
+965.5 5.2
+967.5 1.7
+968.5 5.7
+972.3 0.9
+973.2 0.5
+974.6 3.2
+977.9 2.7
+978.5 55.4
+979.5 37.6
+980.4 2.0
+987.0 3.7
+989.3 1.2
+990.4 8.2
+991.5 4.7
+992.6 1.9
+995.7 1.9
+1004.5 0.7
+1006.7 2.0
+1008.5 5.7
+1009.5 8.4
+1012.6 3.6
+1014.6 3.8
+1020.7 0.6
+1030.6 1.6
+1031.2 1.5
+1031.9 1.5
+1032.6 25.4
+1033.5 3.4
+1035.0 2.3
+1035.7 2.2
+1036.4 0.6
+1037.4 2.7
+1038.7 0.6
+1049.5 115.1
+1050.6 54.8
+1051.5 12.5
+1052.6 3.6
+1053.6 0.8
+1054.3 4.7
+1057.6 4.0
+1074.5 0.7
+1075.5 2.0
+1082.0 4.8
+1083.1 0.4
+1094.5 0.8
+1100.7 6.8
+1106.1 1.7
+S	47	47	731.77
+Z	2	1462.53
+213.4 4.4
+216.1 0.9
+226.2 13.1
+234.1 1.3
+238.1 10.8
+239.0 1.5
+244.1 23.6
+251.1 3.1
+257.2 1.2
+259.2 4.1
+260.2 1.4
+267.2 2.2
+283.0 2.1
+284.2 7.3
+288.1 1.2
+294.1 3.5
+308.0 7.8
+315.2 2.2
+317.4 4.5
+325.3 1.3
+326.1 4.6
+343.1 68.5
+343.8 2.4
+347.2 4.3
+349.3 1.6
+352.2 4.2
+369.4 5.6
+373.4 2.3
+376.5 3.5
+383.2 4.7
+384.0 14.7
+396.9 2.5
+401.1 4.4
+406.3 1.6
+407.3 1.6
+409.3 14.8
+412.2 12.8
+414.5 4.1
+418.2 1.2
+419.1 2.8
+423.0 3.0
+429.2 3.9
+430.2 22.6
+433.1 3.8
+437.0 1.2
+449.2 6.3
+455.5 6.2
+458.1 6.2
+466.2 3.2
+468.9 3.9
+471.1 11.8
+473.2 6.9
+474.3 4.8
+477.1 8.1
+478.1 4.9
+480.5 4.2
+483.1 14.0
+484.1 6.8
+486.3 2.9
+489.4 1.9
+490.4 8.0
+491.3 3.4
+499.4 1.5
+501.4 16.3
+515.4 12.3
+516.3 4.0
+519.0 2.3
+520.6 5.8
+521.6 7.5
+529.8 5.6
+531.2 7.9
+533.1 2.1
+546.1 0.9
+549.3 3.0
+551.4 10.4
+556.1 8.2
+557.2 5.0
+558.5 7.8
+560.2 1.5
+561.8 9.4
+566.4 1.0
+567.4 5.4
+569.4 1.5
+573.3 3.9
+576.1 10.5
+577.2 3.8
+582.0 2.0
+584.3 1.0
+585.4 4.2
+587.2 4.9
+588.5 5.4
+593.1 4.0
+596.0 9.7
+597.1 13.8
+598.8 2.9
+602.5 17.9
+603.3 3.2
+604.2 18.0
+610.3 8.6
+611.6 6.3
+614.0 4.0
+615.3 45.4
+615.9 1.7
+616.6 2.6
+617.4 4.9
+620.3 3.8
+624.7 7.6
+625.8 8.0
+632.1 37.8
+633.4 9.5
+635.5 3.1
+638.4 3.7
+643.5 2.4
+647.9 10.7
+648.7 3.6
+652.2 12.5
+657.3 7.7
+659.0 5.9
+660.9 25.9
+664.5 37.3
+665.7 10.4
+666.5 2.6
+669.6 1.1
+671.5 3.3
+672.4 9.6
+673.7 5.1
+676.9 16.5
+683.5 5.4
+684.9 7.3
+686.7 26.5
+687.3 6.0
+689.4 6.6
+692.8 11.9
+693.5 2.8
+698.2 2.1
+700.3 1.2
+702.4 5.6
+703.9 20.7
+704.8 16.8
+706.4 1.0
+711.7 18.1
+712.6 6.0
+713.6 23.6
+714.5 16.8
+715.1 14.8
+716.8 2.2
+719.2 6.5
+720.0 3.5
+721.8 8.0
+722.7 62.9
+723.4 9.9
+737.9 6.9
+741.1 7.1
+741.8 1.3
+742.4 1.5
+744.3 2.8
+747.4 7.6
+756.0 7.4
+756.7 1.2
+766.1 6.2
+767.5 2.6
+781.3 3.5
+783.5 5.4
+784.4 15.1
+785.4 8.2
+786.0 5.1
+788.2 10.3
+789.5 8.5
+792.3 12.3
+801.3 2.8
+803.0 4.4
+803.8 4.4
+808.1 2.6
+813.2 6.4
+814.7 5.2
+815.3 1.9
+817.2 12.5
+819.8 9.8
+825.5 7.7
+830.2 21.8
+831.5 161.6
+832.7 6.7
+836.5 2.8
+841.2 16.7
+843.4 2.7
+846.6 3.7
+847.4 6.5
+854.8 6.0
+855.5 5.7
+857.1 17.7
+864.9 7.5
+869.5 12.7
+877.1 1.9
+879.7 4.2
+883.6 2.9
+884.6 11.8
+885.5 27.4
+886.3 17.7
+887.4 12.7
+888.4 15.8
+889.9 8.4
+890.7 8.7
+893.7 5.5
+894.8 13.9
+895.8 3.3
+897.8 27.1
+898.9 17.9
+903.1 4.1
+912.5 12.8
+913.1 1.2
+917.2 16.5
+918.6 12.7
+925.5 2.2
+927.3 7.5
+928.7 17.4
+929.5 1.0
+930.8 5.2
+933.4 6.0
+936.9 9.7
+939.3 3.2
+943.6 13.7
+947.0 12.6
+952.1 14.2
+953.5 3.8
+958.2 21.7
+962.4 90.7
+963.2 8.3
+965.1 2.9
+966.6 7.1
+967.9 3.8
+969.5 10.6
+973.6 2.6
+974.7 3.7
+975.7 19.2
+976.9 2.6
+980.9 6.6
+983.6 3.6
+985.7 2.9
+996.5 10.5
+998.3 10.5
+999.4 3.2
+1000.6 4.6
+1001.8 12.5
+1006.0 3.7
+1012.6 1.5
+1013.7 7.8
+1017.2 1.9
+1031.3 2.5
+1033.5 52.5
+1034.1 2.9
+1035.1 3.8
+1035.7 5.0
+1039.3 2.9
+1041.6 2.3
+1054.0 1.4
+1055.2 8.5
+1056.5 12.9
+1057.5 6.3
+1065.7 1.0
+1067.5 1.6
+1068.2 1.8
+1083.4 3.4
+1085.5 3.2
+1086.3 5.1
+1087.7 1.8
+1104.5 4.5
+1117.5 5.9
+1120.5 243.4
+1121.2 2.4
+1121.8 12.5
+1129.4 3.9
+1133.3 3.7
+1139.9 4.1
+1146.3 9.3
+1147.0 2.2
+1151.4 7.9
+1155.3 4.9
+1156.3 4.3
+1159.4 1.0
+1164.6 1.7
+1169.5 14.0
+1186.4 2.1
+1201.7 4.1
+1203.3 9.6
+1204.3 7.0
+1212.5 2.9
+1219.7 104.4
+1220.6 5.0
+1246.7 5.9
+1247.6 1.5
+1248.5 3.9
+1249.6 2.4
+1255.6 2.0
+1258.8 2.1
+1271.9 1.8
+1273.8 7.1
+1309.6 1.0
+1313.5 3.4
+1314.9 5.7
+1316.6 16.7
+1358.5 1.2
+S	48	48	692.14
+Z	2	1383.27
+199.1 13.4
+204.3 3.9
+205.1 6.3
+207.0 6.6
+209.1 11.2
+210.1 5.7
+211.8 12.5
+213.2 21.7
+216.1 13.6
+217.2 32.5
+226.1 7.6
+227.2 9.9
+236.1 46.7
+239.1 15.9
+242.2 62.7
+243.3 22.9
+244.1 12.4
+245.2 9.1
+246.3 15.9
+248.1 8.2
+249.2 25.7
+250.4 18.5
+251.1 12.5
+252.3 15.9
+254.3 23.0
+255.1 11.1
+257.2 11.9
+258.4 34.6
+260.2 52.0
+261.4 11.2
+262.2 209.4
+263.3 58.0
+266.1 44.4
+268.1 25.2
+273.3 7.2
+275.0 5.4
+276.1 7.7
+278.2 18.6
+284.2 179.4
+285.3 12.8
+287.0 9.1
+288.6 7.7
+294.2 43.9
+295.1 6.9
+298.1 25.5
+299.3 49.8
+300.3 10.6
+304.4 13.5
+305.6 23.0
+307.9 6.2
+309.0 5.7
+310.4 6.2
+312.4 23.7
+313.2 11.4
+315.2 65.4
+319.1 9.3
+320.5 29.9
+322.0 18.8
+323.4 23.3
+325.4 19.5
+331.2 11.4
+333.2 14.6
+335.4 36.7
+336.5 23.3
+338.1 34.7
+342.1 8.3
+343.5 31.6
+344.2 26.6
+346.5 8.9
+351.2 75.8
+353.2 17.4
+354.3 20.5
+357.4 13.4
+358.3 7.3
+361.3 19.3
+362.5 36.6
+365.3 22.0
+367.4 34.4
+370.2 25.3
+371.3 152.1
+372.3 122.6
+373.5 23.3
+374.5 6.0
+375.7 46.2
+378.2 9.2
+379.2 29.4
+380.1 26.9
+385.2 52.8
+387.3 8.3
+389.1 63.3
+390.3 180.8
+391.3 17.1
+394.1 18.6
+395.4 50.2
+397.5 2.6
+398.2 19.7
+399.7 8.7
+400.4 24.1
+401.2 4.7
+403.3 331.7
+404.3 19.4
+405.2 4.2
+407.3 25.3
+407.9 5.2
+409.1 37.4
+410.3 19.8
+411.1 4.7
+412.5 20.2
+413.2 114.3
+415.2 41.6
+417.4 27.4
+419.1 31.5
+423.5 12.0
+424.3 10.2
+425.3 34.8
+426.5 24.7
+428.3 31.3
+429.4 22.6
+431.2 1098.2
+432.3 216.1
+433.4 25.2
+434.2 8.0
+436.3 21.1
+438.4 22.6
+439.3 6.5
+442.6 12.4
+443.3 34.4
+444.5 83.3
+445.8 55.1
+446.5 58.5
+447.4 40.5
+453.4 3.8
+456.5 12.1
+457.7 10.0
+458.3 10.1
+459.3 44.1
+460.2 16.9
+461.3 907.7
+462.4 232.5
+463.3 29.2
+464.4 54.2
+465.1 17.1
+466.4 76.5
+471.5 21.3
+472.2 18.2
+473.1 30.9
+474.4 45.8
+478.4 32.2
+479.5 20.1
+480.3 35.6
+485.3 5.2
+487.2 25.4
+488.4 20.9
+489.7 59.9
+490.6 30.4
+491.6 52.3
+492.2 17.3
+493.9 25.3
+498.2 73.3
+499.2 11.5
+500.3 96.1
+502.3 25.6
+503.8 19.2
+504.5 34.0
+506.0 8.1
+508.1 34.3
+509.4 6.6
+512.4 23.2
+514.2 3.5
+515.9 52.4
+516.5 57.1
+518.3 126.9
+519.2 48.0
+521.4 512.2
+522.3 80.0
+523.6 40.0
+524.4 9.3
+525.6 10.7
+526.2 32.5
+527.1 48.1
+530.5 134.6
+531.3 91.3
+532.2 24.8
+533.9 6.0
+535.8 49.3
+536.5 128.5
+537.4 68.2
+538.1 12.6
+540.5 9.0
+542.3 7.6
+543.2 27.5
+544.3 376.8
+545.3 57.5
+547.4 55.3
+548.3 37.1
+551.5 13.7
+555.4 71.3
+556.4 18.2
+557.3 34.2
+558.2 68.2
+559.4 51.7
+561.3 70.2
+562.3 117.4
+563.3 87.9
+566.3 43.7
+567.3 27.4
+568.5 7.1
+569.2 8.0
+570.5 40.0
+571.5 8.1
+572.2 27.5
+573.7 27.6
+574.4 319.4
+575.4 78.4
+577.0 75.8
+577.9 15.4
+578.8 27.4
+579.6 31.5
+580.5 56.2
+582.3 101.8
+583.0 20.6
+584.5 41.4
+587.9 82.7
+589.0 10.5
+590.4 15.0
+591.3 14.7
+592.5 13.8
+593.5 29.6
+595.8 24.4
+597.1 304.8
+598.1 48.9
+599.1 117.3
+600.3 107.2
+602.4 5.2
+606.0 682.4
+607.0 108.2
+608.2 18.4
+609.2 23.3
+611.2 18.4
+612.2 30.4
+613.8 45.4
+615.3 74.7
+616.1 4.4
+617.4 14.2
+618.9 9.3
+620.5 42.3
+622.3 8.1
+623.8 90.0
+624.6 30.3
+626.0 10.1
+627.1 10.5
+628.3 31.2
+629.3 43.9
+632.0 99.0
+633.4 187.8
+634.4 39.8
+635.5 10.0
+636.6 13.1
+638.4 11.9
+639.3 84.2
+641.6 115.4
+642.5 52.4
+644.1 103.4
+645.5 198.7
+646.5 213.4
+647.5 75.3
+648.6 70.3
+649.9 6.6
+650.5 5.6
+651.2 136.6
+652.2 46.3
+654.4 51.5
+655.6 54.9
+656.5 22.8
+658.8 32.2
+659.5 19.5
+660.9 20.0
+661.9 35.6
+663.1 77.6
+664.0 24.0
+665.2 18.1
+666.5 8.4
+668.2 36.9
+669.3 127.6
+670.9 68.8
+672.6 753.4
+673.5 539.9
+674.4 280.6
+675.3 65.5
+676.2 17.1
+679.0 41.3
+679.9 58.1
+680.5 29.5
+681.5 226.8
+682.8 1344.1
+683.5 675.8
+684.6 66.8
+690.3 16.4
+697.4 15.2
+699.6 21.6
+700.6 30.2
+702.3 28.5
+703.2 28.1
+705.7 37.2
+706.6 16.9
+708.8 30.1
+713.5 13.1
+714.4 13.2
+716.9 43.6
+718.0 17.5
+720.2 46.5
+721.1 23.9
+722.2 4.7
+727.5 27.0
+729.5 17.7
+730.3 6.7
+732.4 338.5
+733.6 134.8
+734.4 32.2
+737.5 28.1
+738.4 99.4
+743.0 28.3
+744.2 10.7
+745.4 10.0
+747.6 80.0
+750.4 74.9
+751.0 3.3
+753.5 32.6
+755.3 37.5
+760.4 22.6
+769.0 31.0
+772.1 78.6
+773.2 47.5
+774.2 17.5
+775.5 10.3
+777.1 6.6
+783.3 17.1
+784.5 13.9
+785.6 10.2
+786.5 8.6
+789.0 10.2
+791.5 68.2
+792.5 35.0
+793.5 16.8
+798.3 35.2
+799.0 19.2
+801.5 14.0
+802.6 159.1
+804.0 16.8
+804.8 19.7
+809.5 80.2
+810.6 21.0
+815.8 4.3
+817.1 45.0
+818.4 16.9
+821.5 59.2
+822.5 19.5
+823.4 3.8
+825.4 6.6
+829.5 37.2
+830.5 4.1
+831.2 8.6
+833.5 3.7
+834.4 33.5
+839.1 19.8
+841.6 21.8
+843.4 6.7
+845.4 8.2
+847.4 671.5
+848.4 233.1
+849.7 27.2
+852.4 53.7
+853.5 7.5
+854.6 14.9
+856.3 8.8
+857.4 7.3
+860.3 33.6
+862.7 6.1
+866.6 82.2
+868.6 11.1
+869.4 14.0
+873.0 85.2
+875.3 17.8
+877.6 17.3
+879.7 8.6
+883.4 21.1
+884.3 19.2
+885.5 54.8
+886.4 79.8
+887.4 18.7
+892.4 89.5
+894.4 18.7
+895.5 17.8
+899.9 17.8
+903.8 30.0
+904.5 378.9
+905.3 25.9
+906.6 67.9
+907.4 7.1
+911.1 23.8
+914.7 4.6
+918.4 11.1
+919.7 33.3
+922.4 439.7
+923.5 288.5
+926.5 20.9
+927.4 13.7
+929.2 24.3
+931.6 15.5
+933.7 21.7
+935.4 7.3
+936.3 40.5
+937.4 97.2
+938.4 10.5
+939.4 18.6
+940.5 8.3
+941.5 27.2
+942.1 55.7
+944.9 52.4
+950.6 44.6
+954.8 19.1
+957.1 73.6
+962.2 34.2
+963.4 29.2
+964.4 4.3
+971.6 46.8
+972.4 33.1
+975.5 121.2
+976.5 128.5
+977.3 31.5
+978.7 7.3
+979.5 15.0
+991.4 7.7
+993.7 203.8
+994.6 631.2
+995.5 318.4
+996.6 91.0
+997.8 4.7
+1003.8 6.6
+1006.6 10.6
+1007.4 13.5
+1009.5 28.7
+1017.6 8.1
+1021.2 13.1
+1022.3 8.3
+1023.6 19.5
+1032.5 11.0
+1033.5 14.6
+1039.6 16.4
+1042.8 15.6
+1045.5 42.4
+1049.1 10.1
+1049.8 11.4
+1052.5 81.1
+1060.4 22.9
+1063.7 30.9
+1067.3 9.6
+1068.8 16.0
+1069.6 55.3
+1070.6 16.9
+1077.7 3.8
+1082.7 9.1
+1083.8 43.2
+1084.8 15.4
+1090.4 3.7
+1093.4 17.2
+1100.6 7.0
+1103.7 95.2
+1104.5 19.4
+1105.5 12.1
+1106.5 33.6
+1108.8 13.8
+1110.4 10.2
+1115.2 16.2
+1120.4 3.0
+1121.5 186.8
+1122.7 90.0
+1123.5 70.1
+1124.6 51.0
+1125.7 14.5
+1127.8 11.6
+1134.7 17.2
+1135.7 11.0
+1138.4 4.8
+1139.9 27.7
+1140.7 6.4
+1145.5 10.0
+1147.6 18.8
+1148.7 42.9
+1154.6 19.8
+1160.3 10.0
+1161.3 29.4
+1177.3 32.0
+1178.6 13.5
+1179.6 42.8
+1180.6 67.5
+1184.3 46.0
+1191.6 39.8
+1193.6 7.1
+1197.5 37.2
+1198.9 42.9
+1206.6 34.2
+1208.7 5.8
+1210.5 394.5
+1211.5 305.8
+1212.7 75.5
+1217.8 9.6
+1218.6 20.2
+1219.4 14.9
+1220.5 8.6
+1225.7 12.9
+1234.4 27.5
+1236.5 59.7
+1237.4 71.2
+S	49	49	652.22
+Z	2	1303.43
+198.2 0.9
+199.1 2.3
+199.9 2.2
+201.0 6.6
+209.0 1.9
+210.1 1.5
+212.1 1.6
+213.2 2.8
+215.0 1.4
+216.9 1.9
+220.0 3.0
+221.2 1.2
+226.2 1.2
+227.8 0.7
+229.0 13.0
+230.1 8.2
+231.1 5.7
+234.4 1.0
+238.1 1.0
+241.1 3.3
+242.0 2.0
+243.1 2.7
+245.0 2.4
+246.0 3.2
+247.2 1.0
+250.1 3.1
+253.0 1.0
+254.1 4.0
+256.3 1.2
+257.2 1.7
+258.1 7.0
+259.0 1.9
+260.1 3.0
+263.2 2.8
+264.1 1.0
+270.0 6.1
+271.0 1.7
+272.2 5.9
+274.2 1.4
+275.3 8.8
+276.1 2.0
+277.0 4.7
+279.2 2.8
+282.2 1.5
+285.0 3.6
+288.3 1.2
+289.4 2.4
+291.0 1.2
+292.4 1.8
+293.1 2.1
+294.0 3.3
+295.2 2.3
+296.3 1.1
+297.2 0.6
+300.1 2.2
+302.3 1.3
+302.9 1.0
+304.3 0.7
+307.2 2.7
+308.3 1.0
+310.5 4.3
+311.4 0.8
+312.3 0.9
+314.0 1.9
+315.6 3.9
+316.3 2.6
+317.2 1.0
+320.0 0.9
+324.4 3.0
+327.3 0.9
+328.2 8.5
+329.1 1.8
+330.1 3.8
+331.0 6.8
+332.0 7.2
+333.2 3.1
+339.3 0.9
+341.1 4.1
+342.2 2.8
+343.2 1.2
+345.1 0.9
+346.2 15.6
+347.2 5.5
+348.4 1.6
+349.3 1.0
+351.8 2.4
+353.2 1.5
+353.9 1.4
+355.1 3.8
+357.3 7.6
+358.0 51.7
+359.1 5.1
+360.2 0.9
+363.0 1.3
+364.2 4.3
+365.6 1.5
+366.2 2.9
+367.3 1.2
+368.0 3.0
+370.2 1.7
+371.8 1.6
+373.3 2.4
+374.0 0.7
+376.2 4.4
+377.1 1.9
+378.3 1.9
+380.0 2.4
+380.9 2.7
+383.1 24.2
+384.1 2.8
+385.3 1.1
+386.1 1.0
+388.1 2.3
+389.3 2.9
+390.1 1.6
+391.3 7.6
+392.2 7.4
+394.3 0.8
+395.1 2.6
+397.1 6.0
+398.4 4.0
+400.5 4.7
+401.2 2.8
+402.2 5.3
+404.1 3.9
+406.2 8.5
+407.1 3.0
+408.1 3.6
+409.2 3.8
+410.2 3.5
+412.1 4.4
+414.1 1.2
+415.1 3.9
+416.2 7.4
+417.2 3.3
+419.2 4.1
+420.2 3.7
+421.3 0.8
+423.6 3.6
+424.2 13.2
+425.0 2.1
+426.2 14.2
+428.1 6.3
+429.7 4.8
+431.2 5.2
+432.2 1.9
+433.0 1.3
+434.2 5.4
+435.2 2.7
+436.3 2.4
+437.2 3.4
+438.5 1.8
+439.2 4.1
+440.6 1.4
+441.2 3.2
+442.3 4.8
+443.2 23.6
+444.4 6.7
+445.2 13.1
+446.2 10.2
+447.1 3.9
+448.3 1.4
+449.2 2.7
+450.1 6.4
+451.9 12.2
+453.0 7.6
+454.1 7.1
+455.4 10.2
+456.5 5.5
+457.4 5.4
+458.2 2.2
+459.1 4.7
+460.2 6.2
+461.2 4.3
+462.1 2.3
+463.1 4.2
+464.1 3.7
+465.2 2.1
+466.2 1.8
+468.2 10.4
+469.2 2.7
+470.4 77.7
+471.2 283.3
+472.2 4.7
+473.1 3.0
+474.2 5.0
+475.0 1.1
+476.2 3.0
+477.2 7.7
+478.2 3.2
+479.2 2.0
+480.4 6.4
+481.7 2.7
+482.4 0.8
+483.4 5.4
+484.3 6.7
+485.2 5.2
+487.2 5.0
+488.2 5.8
+489.1 3.3
+490.4 2.7
+491.1 4.0
+492.0 4.9
+494.3 2.3
+495.4 2.9
+496.5 3.5
+498.3 6.5
+499.3 6.3
+500.1 6.2
+501.3 6.1
+502.1 8.0
+503.3 5.9
+504.4 4.1
+505.1 4.9
+505.7 7.6
+506.4 8.0
+507.4 2.8
+508.4 2.8
+509.9 4.5
+510.7 1.7
+512.1 3.8
+513.2 4.1
+514.1 9.7
+515.3 7.5
+516.5 2.9
+517.1 1.7
+518.2 4.3
+519.0 3.4
+520.1 26.5
+521.1 3.9
+523.1 4.9
+524.2 2.6
+524.9 3.7
+526.5 4.6
+527.3 3.7
+528.2 5.7
+529.0 13.0
+530.1 5.4
+531.1 3.8
+532.6 2.8
+533.2 3.2
+534.1 2.5
+535.1 7.7
+535.9 8.1
+537.1 20.8
+537.9 21.3
+538.7 3.1
+539.4 12.0
+540.3 6.3
+541.2 7.4
+542.3 5.5
+543.2 12.4
+544.3 17.1
+545.2 13.1
+546.1 15.6
+546.9 6.7
+548.0 0.8
+549.4 3.3
+550.2 5.9
+551.3 9.9
+552.3 7.7
+553.2 9.5
+554.2 7.8
+555.3 1.5
+556.5 7.0
+557.3 2.7
+558.1 4.7
+559.1 4.8
+560.2 28.5
+560.9 3.2
+561.6 2.9
+562.2 0.9
+563.3 6.2
+564.2 4.1
+565.2 3.3
+566.0 14.4
+567.1 4.2
+568.4 8.3
+569.2 3.3
+570.2 6.2
+571.1 8.0
+572.0 30.5
+573.3 15.0
+574.3 11.6
+576.0 11.1
+576.7 7.9
+577.3 1.5
+578.1 11.4
+578.9 5.5
+579.8 9.0
+580.5 3.5
+581.5 5.9
+582.5 5.4
+583.2 5.0
+584.2 6.6
+585.7 9.8
+587.0 12.1
+588.0 12.1
+589.4 5.2
+590.2 4.9
+591.2 2.1
+592.3 4.1
+593.4 5.0
+594.3 16.3
+595.1 10.9
+596.0 5.2
+597.3 2.8
+598.3 18.0
+599.3 12.1
+600.3 8.8
+601.2 10.0
+602.1 4.0
+603.1 5.1
+603.9 3.6
+605.0 18.3
+606.2 13.9
+607.1 19.5
+608.3 12.4
+609.6 4.6
+611.2 6.4
+612.3 5.0
+613.3 7.4
+614.3 14.1
+615.0 22.7
+616.0 35.1
+617.2 109.6
+618.3 40.8
+619.6 15.1
+620.4 10.7
+621.2 4.9
+622.1 5.0
+622.9 8.1
+623.6 10.5
+624.5 9.5
+625.3 6.3
+626.0 5.5
+626.9 10.2
+627.8 6.1
+628.6 22.1
+629.4 37.9
+630.3 10.5
+631.3 5.8
+633.0 106.1
+634.1 158.2
+635.3 29.9
+636.3 12.4
+637.1 6.4
+638.3 6.0
+639.2 5.8
+639.9 20.9
+642.0 207.1
+642.8 97.0
+643.5 40.1
+644.9 7.8
+645.6 2.7
+647.3 1.7
+652.8 1.0
+654.8 1.3
+657.2 1.9
+659.6 1.2
+662.3 1.0
+664.2 4.5
+667.1 8.8
+667.9 2.4
+668.5 7.1
+669.5 7.8
+670.2 6.1
+670.9 1.5
+672.6 5.7
+673.5 2.3
+674.3 2.6
+677.3 0.6
+678.3 2.1
+679.2 0.8
+681.5 0.6
+682.4 1.0
+683.4 1.9
+684.5 7.0
+685.2 41.5
+686.2 24.8
+687.0 4.2
+688.2 2.1
+689.8 4.0
+690.5 3.3
+691.4 5.1
+692.5 0.8
+693.1 1.0
+696.4 2.7
+697.1 0.8
+697.7 0.7
+699.0 3.4
+701.1 9.0
+702.0 3.4
+704.5 0.7
+705.4 1.3
+709.3 1.9
+710.2 1.3
+711.2 2.1
+712.4 7.5
+713.3 9.0
+714.0 1.6
+716.3 3.7
+717.7 7.5
+718.3 0.5
+719.6 1.2
+721.3 1.9
+722.2 1.3
+722.9 1.6
+724.1 4.1
+725.0 3.3
+725.7 2.3
+726.6 4.7
+727.7 2.7
+728.6 5.6
+729.3 12.9
+730.2 45.5
+731.2 19.4
+732.2 3.4
+733.2 5.2
+736.3 2.5
+736.9 4.1
+738.3 5.2
+740.1 6.5
+740.7 0.9
+741.7 5.0
+742.3 13.1
+743.2 4.5
+744.2 4.6
+744.9 3.3
+746.3 4.2
+747.1 2.0
+747.9 1.1
+749.3 2.0
+750.0 2.2
+753.6 4.4
+754.3 1.2
+756.0 5.6
+757.6 2.2
+758.3 4.3
+760.0 2.0
+762.4 1.9
+763.3 2.5
+764.4 1.9
+767.2 4.5
+768.0 1.0
+769.2 12.3
+770.1 0.9
+771.3 1.6
+772.2 1.0
+774.3 2.3
+775.2 2.8
+776.3 2.6
+778.3 4.8
+779.1 2.6
+780.1 2.2
+781.4 2.5
+782.3 2.4
+783.2 5.9
+784.1 3.3
+786.3 6.9
+787.2 4.5
+788.2 5.7
+789.1 3.6
+790.5 7.3
+793.0 3.0
+794.2 7.3
+795.2 3.0
+797.2 3.0
+798.2 6.5
+799.3 3.5
+800.2 5.0
+801.4 4.5
+802.3 0.6
+803.3 2.7
+804.4 1.1
+805.0 2.4
+806.7 4.2
+808.9 3.5
+810.3 2.0
+811.3 6.3
+812.0 1.5
+813.5 2.7
+814.2 2.2
+815.2 0.9
+816.2 2.4
+817.5 3.6
+818.2 4.0
+819.4 1.0
+820.4 0.8
+821.4 3.1
+822.2 1.9
+823.2 3.0
+826.1 4.9
+827.0 13.6
+827.9 3.6
+828.7 2.3
+829.4 1.2
+830.3 2.7
+831.3 2.5
+832.3 3.5
+835.3 1.0
+836.1 0.8
+837.0 2.8
+837.9 1.6
+839.4 3.5
+840.1 4.0
+841.2 12.2
+842.3 2.1
+843.3 2.7
+844.2 5.1
+845.0 2.6
+847.0 4.0
+848.2 7.8
+849.9 3.6
+852.6 4.1
+853.3 1.6
+853.9 1.8
+855.5 6.2
+856.2 2.9
+857.2 18.1
+858.4 3.8
+859.4 20.2
+860.3 3.9
+861.4 6.1
+862.0 1.1
+863.1 3.3
+864.2 1.8
+865.5 7.0
+867.2 6.1
+868.4 5.5
+869.4 1.7
+870.3 3.2
+873.2 2.2
+874.5 2.9
+875.1 1.3
+876.1 4.1
+877.2 4.3
+878.4 3.7
+879.3 5.5
+880.3 2.2
+881.3 2.5
+882.2 1.2
+883.0 2.7
+885.2 5.9
+886.2 1.3
+887.0 2.3
+888.5 1.5
+890.2 1.8
+891.5 2.7
+892.4 1.2
+893.0 1.2
+893.8 2.4
+894.5 1.0
+896.1 1.0
+897.0 2.6
+898.3 5.9
+899.3 4.2
+900.7 2.8
+901.6 3.5
+902.9 9.2
+903.5 0.6
+904.5 4.5
+905.8 0.7
+909.0 3.9
+911.3 35.2
+912.3 6.8
+913.5 1.2
+914.5 5.0
+915.3 7.9
+916.3 5.5
+917.2 4.1
+919.0 2.0
+919.6 2.1
+921.2 1.1
+921.9 0.8
+922.6 1.5
+924.5 2.9
+925.4 6.3
+926.2 1.0
+927.1 1.8
+928.4 2.7
+929.1 0.7
+930.5 2.7
+931.4 2.3
+933.5 1.2
+934.4 1.2
+938.3 7.4
+939.3 3.2
+941.2 2.6
+942.2 3.2
+943.0 0.7
+944.3 2.0
+945.2 3.4
+946.4 4.3
+947.7 2.9
+948.3 3.6
+949.7 3.0
+952.9 2.8
+954.1 2.6
+955.5 7.2
+956.2 27.1
+957.2 8.6
+958.4 2.4
+959.3 1.1
+960.3 4.1
+962.1 6.6
+964.2 1.0
+968.2 3.8
+969.2 11.2
+970.2 10.4
+971.4 4.3
+972.3 3.9
+973.3 2.8
+974.2 33.0
+975.3 16.0
+976.3 5.5
+977.0 0.5
+978.3 4.4
+981.3 1.6
+982.2 3.1
+984.5 5.8
+985.4 1.3
+986.2 2.6
+989.2 4.8
+995.2 1.1
+996.4 1.4
+997.4 2.4
+998.6 3.2
+999.3 3.8
+1000.4 2.6
+1001.2 2.1
+1002.2 3.4
+1005.7 3.1
+1006.3 1.6
+1008.2 2.0
+1009.2 1.3
+1010.4 3.7
+1011.5 6.5
+1013.2 5.2
+1014.7 1.6
+1017.2 4.4
+1018.6 1.1
+1021.5 1.1
+1023.1 0.9
+1024.8 6.3
+1025.6 2.4
+1026.5 8.2
+1027.3 14.2
+1028.2 7.2
+1029.3 7.5
+1030.5 4.0
+1031.4 3.0
+1032.5 1.5
+1034.2 1.7
+1035.1 0.7
+1035.9 1.6
+1037.1 1.1
+1039.2 2.6
+1040.2 1.7
+1041.6 1.3
+1042.5 5.3
+1043.5 3.3
+1044.3 2.1
+1045.5 4.1
+1046.1 0.9
+1047.2 0.8
+1048.5 1.4
+1049.5 1.3
+1050.2 1.8
+1052.3 3.5
+1053.2 7.9
+1054.5 2.1
+1055.5 5.3
+1056.6 2.7
+1057.3 4.9
+1058.1 1.5
+1058.8 1.3
+1060.1 1.4
+1061.2 1.9
+1063.1 2.4
+1064.6 1.9
+1068.3 1.0
+1069.4 4.8
+1070.4 28.4
+1071.3 45.3
+1072.3 12.7
+1073.2 13.6
+1074.3 14.1
+1075.3 8.6
+1076.2 2.1
+1077.5 1.9
+1080.8 1.0
+1083.1 1.0
+1084.8 2.2
+1086.3 6.9
+1087.3 2.5
+1087.9 0.6
+1089.0 0.7
+1089.9 2.7
+1094.6 1.8
+1096.7 0.7
+1099.1 1.0
+1099.8 0.9
+1100.5 2.1
+1101.2 2.4
+1102.0 1.0
+1106.7 1.3
+1109.6 3.5
+1116.3 1.4
+1117.3 1.1
+1120.1 3.9
+1121.1 1.2
+1125.0 1.3
+1126.3 1.1
+1127.5 2.8
+1128.4 1.1
+1130.2 1.6
+1132.5 0.7
+1134.6 1.5
+1137.4 6.5
+1138.3 3.1
+1139.1 2.8
+1141.3 2.0
+1142.2 1.1
+1155.2 34.1
+1156.3 19.2
+1157.4 9.3
+1158.2 4.6
+1173.6 3.3
+1174.3 1.1
+1187.2 1.4
+1189.4 1.1
+1203.3 1.7
+1214.1 2.0
+1215.1 2.6
+1231.3 1.5
+1257.9 1.1
+1259.7 1.1
+S	50	50	651.29
+Z	2	1301.57
+183.0 36.3
+185.3 16.5
+193.2 26.1
+198.4 69.9
+200.1 11.1
+207.0 12.6
+215.1 42.6
+222.0 34.2
+229.0 250.1
+230.4 17.6
+231.3 46.1
+239.3 79.8
+240.2 25.6
+242.7 30.5
+245.1 55.2
+246.1 60.7
+251.1 19.5
+255.4 10.5
+256.0 22.6
+258.2 184.5
+259.3 15.6
+260.0 38.2
+261.7 12.4
+274.2 48.9
+275.2 371.9
+279.3 21.4
+282.1 61.4
+283.2 9.7
+286.0 45.7
+290.2 38.0
+292.1 30.6
+293.2 88.5
+294.4 35.8
+297.2 23.7
+299.2 63.9
+300.3 24.5
+303.3 6.2
+304.1 16.1
+305.2 19.7
+311.7 50.6
+315.1 17.4
+316.2 54.4
+317.1 27.8
+324.4 21.6
+326.2 26.2
+328.1 170.4
+329.0 16.0
+330.2 156.2
+330.8 25.0
+342.0 10.0
+344.3 146.4
+345.1 44.1
+346.2 1318.4
+347.2 291.7
+348.2 18.4
+349.2 58.6
+356.7 20.4
+357.3 55.2
+358.3 141.1
+359.0 15.1
+361.5 29.1
+369.3 66.8
+371.5 13.1
+373.4 24.9
+380.9 41.9
+382.9 15.2
+385.3 10.1
+389.8 39.2
+394.3 29.5
+395.2 27.2
+395.9 22.6
+401.2 11.9
+403.5 41.5
+408.3 33.2
+408.9 8.9
+410.1 81.7
+411.0 86.2
+412.0 44.4
+413.2 33.5
+414.1 22.1
+420.2 117.0
+421.4 10.2
+425.1 59.5
+425.9 29.1
+428.6 32.5
+429.3 65.8
+430.0 206.2
+437.2 50.5
+438.9 124.9
+442.5 128.1
+443.2 464.2
+444.2 110.6
+445.3 1019.6
+446.2 137.9
+447.1 80.0
+449.3 94.4
+453.3 147.0
+454.4 24.0
+456.3 79.6
+457.0 110.8
+458.3 9.6
+459.2 97.7
+460.1 19.6
+463.1 35.3
+467.8 67.4
+469.9 37.9
+471.2 99.1
+473.1 115.5
+474.1 8.4
+482.8 28.0
+485.2 52.6
+488.3 26.2
+492.0 75.5
+493.2 32.1
+496.3 82.5
+497.1 9.5
+500.3 76.0
+501.1 99.3
+503.4 13.4
+504.7 45.3
+508.5 28.6
+509.4 10.4
+510.3 90.4
+511.5 35.9
+512.5 12.5
+514.3 39.7
+517.0 70.5
+518.1 13.8
+519.9 48.5
+521.1 117.5
+521.8 129.2
+524.4 174.3
+525.5 82.6
+526.2 57.1
+527.2 72.1
+528.4 25.7
+531.4 74.9
+533.2 54.3
+535.6 46.4
+537.5 832.2
+538.4 44.8
+539.1 58.6
+539.8 9.8
+541.9 125.7
+542.6 104.9
+543.8 261.4
+544.5 80.7
+545.2 85.0
+546.4 58.4
+547.3 102.8
+550.1 135.1
+551.0 49.8
+552.3 85.4
+554.0 311.3
+554.7 114.0
+555.3 112.4
+556.7 121.0
+557.4 7.7
+558.9 24.7
+560.3 980.0
+561.5 420.4
+562.5 132.5
+565.4 61.0
+568.0 257.1
+569.1 136.2
+570.5 71.2
+572.0 1193.1
+573.2 489.0
+574.3 115.8
+576.5 103.3
+577.3 38.9
+578.1 31.0
+579.3 40.6
+581.8 53.3
+586.0 173.3
+587.2 64.2
+589.0 15.4
+590.2 7.3
+591.8 63.1
+592.8 29.5
+593.9 23.7
+594.8 306.1
+595.4 186.5
+596.7 310.8
+598.2 77.1
+599.2 68.9
+600.3 105.4
+600.9 48.7
+601.5 21.1
+603.7 51.2
+607.1 26.7
+608.1 174.0
+609.2 46.7
+610.0 97.0
+610.7 19.8
+612.4 163.0
+615.2 531.7
+616.1 122.2
+617.3 5905.4
+618.3 1672.3
+619.1 483.9
+620.1 137.0
+621.2 86.1
+622.4 21.7
+623.8 126.7
+625.1 82.8
+626.4 17.7
+628.4 229.2
+629.3 232.9
+630.4 142.0
+632.6 275.9
+633.7 173.0
+634.3 148.2
+635.4 45.7
+636.1 80.9
+637.5 102.3
+638.3 122.9
+639.6 152.9
+640.4 177.0
+641.4 206.0
+642.3 695.0
+643.1 864.1
+644.1 55.9
+651.9 47.3
+653.2 28.5
+655.0 40.7
+657.1 140.7
+658.4 11.7
+660.3 29.1
+667.2 333.3
+668.4 104.8
+669.1 93.1
+670.4 71.4
+677.6 46.0
+678.6 47.4
+681.4 66.7
+682.2 20.7
+685.2 1983.4
+686.2 757.7
+687.4 12.1
+689.5 46.1
+690.1 39.3
+691.4 84.9
+693.5 55.8
+695.3 104.1
+695.9 18.4
+696.7 18.4
+706.2 38.6
+707.4 10.3
+708.5 17.2
+710.2 44.5
+711.3 126.7
+712.4 48.8
+713.4 33.1
+714.4 227.0
+715.4 76.6
+717.3 12.2
+718.8 31.5
+720.3 12.2
+721.0 16.5
+724.3 175.8
+726.3 107.5
+728.3 196.0
+730.3 1799.1
+731.4 703.7
+732.5 193.2
+736.3 91.3
+739.4 8.3
+740.3 42.2
+741.6 114.5
+742.2 255.0
+743.3 199.3
+744.3 75.4
+746.5 110.2
+748.7 50.1
+749.5 40.3
+750.5 48.1
+751.9 111.9
+753.6 31.3
+758.9 29.9
+762.3 233.9
+763.0 13.3
+764.7 27.6
+766.1 14.5
+767.8 51.4
+768.5 35.5
+770.2 18.0
+772.6 101.1
+774.4 30.3
+780.6 86.2
+783.0 21.8
+784.0 235.6
+785.6 242.4
+791.5 17.3
+797.7 27.6
+799.2 56.4
+801.4 38.9
+805.3 83.4
+807.0 20.9
+810.5 96.6
+811.3 75.6
+812.3 71.1
+812.9 57.3
+813.8 74.7
+816.3 25.1
+819.1 42.2
+820.2 25.7
+821.5 60.5
+822.4 35.8
+823.6 42.8
+825.4 73.6
+826.9 77.7
+828.3 53.8
+829.3 10.3
+831.6 37.2
+832.5 123.9
+834.5 12.1
+836.2 120.6
+837.7 88.2
+838.7 218.9
+840.0 177.7
+840.6 48.0
+841.3 65.1
+842.8 48.0
+844.2 31.3
+847.6 33.2
+851.8 46.4
+853.8 40.3
+857.2 605.9
+858.2 347.2
+859.4 1179.0
+860.5 289.8
+861.3 270.0
+862.3 36.6
+863.4 123.7
+864.4 34.6
+866.7 49.6
+876.1 190.9
+883.3 32.2
+884.3 107.2
+890.4 19.8
+892.4 307.1
+893.9 59.9
+894.5 142.5
+895.4 49.2
+898.9 37.5
+900.2 29.0
+904.5 127.2
+905.6 34.7
+911.4 44.4
+912.3 114.7
+913.1 19.2
+914.0 27.2
+914.7 48.1
+915.4 30.4
+916.4 34.0
+917.4 43.0
+920.1 30.1
+921.1 21.6
+925.5 53.5
+928.5 64.4
+932.5 14.2
+934.3 157.8
+938.3 318.6
+939.3 66.4
+940.5 85.6
+941.4 22.6
+942.3 41.1
+943.5 67.1
+948.3 29.0
+950.3 16.9
+951.3 31.1
+956.3 1522.2
+957.3 512.0
+958.3 111.0
+962.2 14.3
+967.3 35.4
+974.4 1741.5
+975.4 769.1
+976.4 140.5
+991.4 28.3
+994.5 20.3
+995.4 9.4
+999.1 90.6
+1000.3 12.2
+1002.9 16.2
+1009.4 157.5
+1010.3 59.8
+1011.7 156.8
+1013.3 48.9
+1014.5 39.3
+1018.1 28.6
+1022.7 29.2
+1027.4 819.5
+1028.4 340.2
+1029.4 26.1
+1036.3 73.6
+1039.5 64.5
+1040.3 67.0
+1042.5 15.0
+1044.2 21.6
+1045.3 105.7
+1051.3 8.0
+1054.4 79.3
+1055.2 29.4
+1056.4 151.5
+1057.4 19.0
+1061.5 53.2
+1064.2 25.4
+1073.5 1318.4
+1074.4 891.0
+1075.0 99.3
+1075.7 78.8
+1082.4 34.4
+1083.6 28.6
+1084.4 90.6
+1086.3 27.3
+1087.3 10.2
+1096.2 10.3
+1099.2 17.3
+1102.7 15.7
+1108.6 78.4
+1110.4 72.9
+1126.2 60.9
+1126.9 19.2
+1137.2 90.3
+1137.9 48.1
+1138.5 149.9
+1139.4 97.5
+1152.7 76.6
+1153.5 7.0
+1155.4 1076.3
+1156.3 610.8
+1157.4 263.5
+1172.0 25.6
+1172.9 124.7
+1175.7 20.2
+1180.4 24.4
+1188.4 235.1
+1189.7 52.1
+1190.6 11.3
+1198.7 57.4
+S	51	51	498.70
+Z	2	996.39
+144.0 2.3
+147.0 1.6
+152.3 1.0
+153.0 2.4
+158.3 1.2
+172.1 5.6
+175.1 3.5
+187.0 0.7
+190.2 3.1
+195.9 0.6
+216.2 3.4
+218.2 2.8
+220.3 0.6
+222.2 1.6
+223.2 1.2
+226.1 0.5
+231.1 1.4
+234.2 20.1
+234.9 0.3
+236.3 1.0
+241.0 5.2
+242.1 4.9
+246.2 1.2
+252.2 1.3
+255.2 1.2
+257.4 1.9
+259.8 2.0
+263.3 0.7
+264.3 2.6
+265.1 1.3
+268.4 0.4
+271.9 0.5
+273.2 2.9
+274.1 12.6
+275.3 0.2
+276.2 0.7
+280.1 1.7
+281.0 2.9
+284.3 2.1
+287.0 2.3
+288.3 0.7
+289.2 1.7
+290.9 0.9
+295.3 1.1
+296.8 1.5
+299.6 2.8
+301.3 10.8
+302.1 8.8
+305.2 17.1
+306.3 4.8
+308.4 1.0
+313.2 2.1
+319.2 109.0
+320.3 16.4
+321.3 2.6
+324.1 2.9
+327.2 4.1
+330.5 10.5
+331.5 2.0
+334.2 1.5
+336.1 1.6
+339.8 16.2
+340.9 1.5
+342.9 1.1
+346.0 0.4
+348.5 5.9
+351.6 5.9
+353.3 10.2
+363.2 1.2
+366.3 3.7
+371.4 2.4
+374.1 0.8
+376.2 1.4
+377.4 3.6
+379.3 0.3
+380.4 4.0
+382.2 5.8
+386.2 1.0
+391.5 1.2
+392.2 17.0
+393.4 1.1
+396.1 2.3
+399.5 2.2
+401.4 2.5
+402.2 1.7
+403.1 1.5
+404.4 3.9
+406.3 1.0
+409.0 2.4
+411.4 1.2
+413.3 17.2
+414.3 23.2
+414.9 2.1
+417.5 1.4
+418.3 1.6
+419.3 2.7
+420.3 5.1
+421.3 4.0
+422.1 2.0
+423.5 4.4
+428.9 1.9
+430.3 5.3
+431.4 1.1
+432.2 7.0
+433.2 14.2
+433.9 4.4
+435.1 12.1
+435.9 5.1
+438.0 4.5
+439.6 1.0
+440.4 5.0
+441.1 4.9
+441.8 14.5
+442.8 3.1
+444.4 1.3
+445.0 2.7
+446.1 2.2
+447.2 22.1
+447.8 1.0
+448.5 3.5
+449.4 57.5
+450.5 10.2
+451.3 2.0
+452.2 5.2
+453.4 7.3
+454.5 4.0
+455.6 1.1
+457.9 6.2
+460.4 3.5
+461.1 6.1
+461.9 0.6
+462.9 6.2
+463.6 3.0
+464.3 2.2
+466.6 7.0
+467.6 3.5
+469.4 1.3
+472.2 19.3
+473.1 35.0
+474.3 2.3
+476.4 7.8
+477.5 13.4
+478.3 5.8
+479.8 25.0
+481.2 157.8
+481.9 130.0
+483.0 8.9
+485.7 7.4
+487.3 2.6
+488.5 18.0
+490.0 400.1
+491.1 49.5
+492.2 3.8
+495.3 0.5
+498.8 1.8
+499.6 1.1
+514.2 17.0
+514.9 0.6
+519.7 1.1
+522.4 0.3
+525.5 5.5
+530.0 10.6
+531.2 20.9
+532.4 5.1
+533.6 1.1
+537.2 2.8
+548.2 7.2
+550.2 98.4
+551.3 14.0
+552.3 4.2
+553.8 8.0
+559.0 4.1
+563.4 0.4
+569.3 0.6
+570.4 6.3
+571.3 4.1
+576.9 1.9
+580.9 3.5
+583.4 6.4
+584.4 4.5
+587.4 1.2
+588.4 4.2
+589.1 2.9
+591.5 4.7
+593.7 0.4
+598.1 1.4
+604.3 3.2
+615.6 12.6
+620.5 1.7
+623.1 2.6
+624.2 4.1
+632.4 1.9
+636.9 1.0
+640.5 1.4
+643.6 2.4
+644.6 1.3
+646.3 5.8
+648.8 1.3
+657.4 7.5
+658.1 1.2
+659.6 1.1
+660.6 18.3
+661.6 15.5
+662.6 9.1
+663.5 1.6
+666.0 2.6
+667.2 7.9
+668.0 1.2
+669.7 5.6
+673.1 8.4
+674.2 12.3
+675.3 7.6
+678.4 157.1
+679.5 45.0
+680.4 5.8
+685.3 1.3
+686.1 1.1
+689.0 0.6
+692.1 3.9
+693.0 5.5
+695.4 0.5
+699.6 2.5
+710.7 0.4
+721.4 2.5
+722.0 2.4
+726.0 1.5
+727.2 1.3
+728.2 5.7
+729.0 1.2
+732.9 12.5
+734.5 2.2
+736.4 3.9
+745.5 2.4
+746.4 4.3
+747.3 6.8
+750.2 0.8
+753.5 1.3
+755.5 2.6
+763.5 1.4
+764.3 3.0
+768.5 0.3
+772.9 5.2
+777.8 2.7
+778.6 1.5
+785.1 0.6
+790.4 2.8
+792.4 2.9
+793.2 2.8
+796.6 2.4
+804.5 1.8
+805.7 1.2
+808.6 5.8
+810.0 1.3
+815.5 2.6
+820.2 2.7
+821.4 1.1
+823.6 7.3
+824.5 1.7
+825.5 44.2
+826.5 23.0
+827.4 2.7
+829.5 1.4
+832.2 6.4
+833.5 5.5
+834.6 1.3
+842.9 4.3
+846.2 4.2
+850.5 3.4
+851.4 1.4
+859.0 1.1
+860.8 5.5
+861.5 11.9
+862.3 2.2
+882.6 7.3
+883.5 3.6
+885.2 30.1
+886.1 14.2
+891.6 0.9
+892.5 11.4
+893.3 3.0
+894.7 1.4
+S	52	52	501.13
+I	ID	190
+I	RTime	9.4010
+Z	2	1001.25
+Z	3	1501.37
+157.3 4.5
+169.4 1.3
+172.0 5.1
+173.1 4.0
+175.1 5.3
+185.2 1.2
+189.2 1.3
+200.2 5.4
+201.9 1.6
+212.2 5.1
+222.2 1.2
+224.2 1.6
+225.1 3.5
+227.0 3.0
+238.2 1.2
+239.1 2.7
+244.2 4.1
+252.9 2.0
+254.5 2.5
+255.3 6.0
+256.0 1.6
+257.2 6.8
+258.4 1.6
+262.3 3.2
+266.2 14.8
+267.1 3.2
+268.4 1.6
+271.2 1.3
+272.1 5.1
+274.4 4.8
+282.2 15.6
+283.3 10.8
+285.0 3.0
+286.4 1.8
+287.2 5.4
+289.1 3.4
+300.2 18.2
+303.3 1.3
+309.0 5.6
+310.2 3.5
+313.5 3.9
+317.3 4.1
+326.8 1.2
+336.2 1.2
+338.8 5.6
+341.1 1.8
+349.1 8.3
+354.2 7.9
+355.3 3.5
+356.2 1.5
+365.4 1.2
+366.3 2.7
+369.5 2.2
+371.3 6.3
+372.2 20.2
+373.1 6.1
+374.2 3.4
+374.9 3.5
+378.3 1.3
+381.4 1.2
+382.7 4.1
+385.1 1.7
+386.3 16.8
+387.7 2.0
+388.3 4.6
+393.2 5.1
+399.2 3.7
+402.2 4.6
+403.1 2.2
+410.1 2.0
+420.8 7.6
+421.5 5.0
+423.3 1.7
+428.9 8.1
+432.3 2.5
+433.3 3.0
+435.7 4.9
+438.0 10.1
+441.3 2.4
+442.2 1.8
+443.8 3.2
+447.3 5.1
+449.2 14.3
+450.2 12.8
+453.4 6.0
+456.0 1.2
+457.5 2.7
+460.2 2.0
+465.0 3.4
+466.7 5.0
+467.4 16.6
+469.1 2.9
+470.1 7.0
+471.3 2.5
+472.6 1.7
+482.6 5.8
+483.5 59.0
+484.2 115.3
+485.9 6.0
+491.3 18.7
+492.1 62.2
+492.7 51.5
+493.4 9.8
+517.7 1.0
+525.5 1.7
+543.3 4.3
+547.8 4.0
+553.4 8.3
+584.3 1.7
+613.1 1.7
+614.3 6.5
+615.4 3.9
+627.2 1.3
+629.5 18.7
+630.3 5.1
+631.2 3.0
+644.5 4.8
+651.9 3.7
+658.7 1.7
+660.2 3.5
+686.5 2.4
+699.5 2.7
+713.2 3.5
+715.4 1.6
+723.2 1.2
+727.2 5.6
+728.5 2.7
+731.2 1.3
+757.2 1.3
+763.4 5.0
+771.0 2.0
+781.4 1.1
+784.4 2.4
+829.5 2.0
+838.3 1.6
+846.2 2.9
+855.6 2.5
+856.5 9.1
+865.0 8.1
+898.4 2.7
+S	53	53	745.75
+Z	2	1490.49
+216.2 4.3
+217.1 5.7
+226.3 4.9
+234.2 95.6
+235.2 12.4
+236.1 7.3
+242.3 6.8
+243.1 11.0
+245.2 30.8
+246.1 30.4
+249.2 15.0
+252.2 26.1
+256.2 18.2
+259.1 10.3
+260.1 106.4
+261.1 47.0
+262.2 230.5
+262.9 12.9
+267.1 21.6
+269.1 35.8
+275.2 31.1
+282.1 17.8
+284.1 10.0
+286.3 6.9
+288.3 193.8
+292.3 11.5
+301.2 6.0
+304.1 5.0
+310.5 19.6
+312.3 11.1
+313.9 17.7
+316.2 98.3
+317.2 498.0
+318.1 43.8
+319.8 33.6
+325.5 21.5
+330.3 19.8
+334.2 3.8
+340.3 9.7
+341.0 17.6
+344.1 12.7
+345.3 30.6
+346.3 16.2
+347.2 34.8
+352.4 35.9
+357.5 119.3
+358.2 57.5
+360.3 7.4
+361.5 19.8
+364.3 46.0
+365.2 12.9
+367.3 19.4
+368.2 5.1
+371.6 33.7
+372.3 20.4
+373.5 33.8
+375.2 635.4
+375.8 26.0
+376.5 108.7
+385.3 40.5
+386.5 23.8
+387.9 3.7
+389.5 16.9
+390.4 2.9
+396.1 20.9
+397.9 38.1
+399.7 32.8
+403.3 67.9
+404.3 13.1
+408.5 11.5
+410.5 25.3
+413.0 19.5
+414.1 58.8
+415.3 13.8
+416.4 727.5
+417.6 169.5
+418.3 4.6
+419.6 7.7
+420.8 23.5
+421.5 17.6
+424.4 13.7
+426.2 46.1
+429.3 27.9
+430.3 16.5
+432.1 7.7
+444.4 47.6
+445.8 7.9
+459.5 24.3
+466.2 7.1
+467.6 9.2
+468.7 5.4
+472.2 34.0
+473.0 31.7
+474.4 43.5
+475.4 28.3
+476.4 43.8
+479.3 24.5
+481.6 20.8
+482.3 9.8
+483.4 32.2
+485.0 27.9
+487.2 66.4
+488.3 50.7
+490.2 41.6
+491.5 5.8
+492.5 13.9
+495.5 7.9
+496.2 12.7
+497.0 10.5
+501.5 13.6
+504.3 544.0
+505.4 176.1
+508.6 14.8
+511.6 74.1
+512.9 51.0
+514.0 16.7
+515.5 19.8
+519.4 2.7
+520.3 20.0
+522.5 12.4
+523.4 241.2
+524.5 76.0
+525.5 47.1
+526.4 69.9
+527.6 81.0
+528.9 55.3
+534.6 171.9
+537.4 37.7
+538.2 19.3
+540.6 12.5
+541.5 79.7
+542.2 34.7
+544.5 941.4
+545.4 339.7
+546.4 26.2
+548.4 7.4
+550.6 5.9
+553.6 17.3
+555.3 27.2
+556.2 8.5
+557.2 133.7
+559.3 14.3
+560.4 6.4
+568.3 38.8
+570.2 61.7
+571.6 45.0
+572.4 36.6
+574.1 42.8
+578.1 159.6
+580.2 37.0
+582.4 44.6
+583.5 50.4
+587.5 111.7
+588.4 56.1
+589.4 83.2
+591.1 22.9
+593.4 17.9
+598.7 11.7
+599.4 14.7
+600.9 89.7
+603.7 8.8
+605.2 188.5
+605.9 163.4
+606.6 75.1
+607.4 63.1
+611.8 29.2
+613.5 26.5
+615.3 149.0
+616.3 18.2
+617.4 16.5
+619.8 32.8
+624.1 25.7
+626.0 377.1
+627.2 107.8
+628.0 81.0
+632.5 17.4
+634.5 6.8
+636.7 36.8
+637.6 18.0
+638.5 82.3
+639.5 34.0
+640.4 51.4
+641.4 21.7
+642.2 32.4
+643.4 17.4
+644.4 9.4
+645.6 35.0
+647.0 15.0
+648.0 43.9
+649.5 47.2
+650.5 12.6
+652.7 44.6
+654.8 66.0
+655.7 25.5
+657.5 1190.9
+658.5 213.6
+659.6 64.4
+660.5 15.7
+661.7 19.2
+663.9 65.3
+664.9 165.6
+665.6 11.1
+666.5 45.5
+667.3 16.8
+669.3 104.7
+670.4 69.7
+671.7 16.2
+674.6 57.5
+676.2 83.0
+679.9 130.2
+681.1 15.4
+681.8 7.7
+683.1 92.8
+684.5 93.2
+685.7 43.0
+686.3 693.7
+687.2 492.7
+688.1 73.8
+688.7 29.7
+690.0 22.5
+691.9 10.2
+693.6 112.5
+694.5 106.1
+696.4 40.0
+698.6 26.5
+700.4 80.5
+701.4 7.5
+702.6 28.6
+704.3 1093.2
+705.4 366.1
+707.4 58.3
+708.3 9.4
+709.6 140.6
+711.0 70.7
+712.8 106.7
+714.0 75.8
+715.2 15.3
+716.0 36.5
+716.8 62.4
+717.8 109.5
+718.5 97.9
+719.2 69.8
+720.0 84.5
+721.4 40.6
+722.1 35.4
+723.6 462.4
+725.0 294.5
+726.3 157.2
+727.6 411.1
+728.7 285.0
+729.7 26.8
+730.7 55.9
+732.9 124.6
+734.6 201.0
+736.3 698.5
+737.1 195.0
+738.4 122.5
+752.8 11.8
+754.2 9.8
+755.8 95.8
+756.4 42.0
+757.2 29.1
+760.5 67.5
+761.4 31.5
+763.3 41.8
+765.7 63.3
+768.8 83.8
+769.6 56.6
+770.3 25.0
+771.3 27.6
+772.3 57.1
+773.1 6.2
+774.1 39.7
+776.8 16.7
+778.5 15.5
+779.7 23.3
+780.5 55.2
+783.1 27.3
+784.3 6.4
+786.5 1860.7
+787.6 670.8
+788.7 123.9
+789.5 60.8
+790.4 63.7
+791.6 5.8
+793.6 13.3
+794.8 33.2
+795.7 88.4
+797.4 29.4
+798.5 120.8
+799.4 87.4
+800.2 34.4
+801.3 7.1
+805.5 26.8
+806.3 15.2
+807.9 17.7
+809.0 52.1
+812.5 58.9
+813.7 35.5
+814.5 30.5
+815.6 196.4
+816.6 343.1
+818.1 274.6
+819.0 101.5
+819.7 89.8
+821.0 53.0
+822.3 44.0
+823.8 36.4
+824.5 4.3
+825.5 8.1
+826.6 38.4
+827.9 70.5
+829.7 106.0
+831.4 69.8
+832.8 84.3
+833.5 767.8
+834.4 179.3
+835.4 75.3
+838.6 9.8
+839.6 24.4
+840.6 90.9
+841.2 35.9
+843.3 67.0
+844.4 44.2
+845.9 59.9
+847.6 30.5
+849.4 92.7
+850.4 66.3
+851.5 75.2
+852.3 105.4
+852.9 80.4
+854.3 95.5
+855.6 82.0
+860.4 37.9
+862.5 16.1
+863.2 7.5
+864.7 45.2
+866.0 120.2
+868.2 24.0
+869.2 25.4
+870.0 68.8
+871.1 229.3
+872.0 186.7
+872.9 119.0
+873.9 70.2
+877.0 171.2
+878.2 84.2
+879.3 31.3
+882.6 67.5
+883.5 90.2
+885.5 728.1
+886.6 178.2
+887.3 18.7
+888.6 9.9
+889.2 40.5
+890.5 31.4
+891.6 22.0
+895.1 650.5
+895.8 347.2
+896.9 112.8
+898.1 178.4
+899.6 59.4
+900.8 124.5
+901.8 92.3
+902.6 26.1
+904.0 43.6
+905.0 109.4
+906.3 28.3
+907.6 5.7
+908.9 37.8
+911.3 348.9
+912.6 16.2
+913.5 85.7
+914.5 83.5
+916.4 80.2
+918.3 33.3
+920.4 58.0
+922.1 62.3
+925.3 19.7
+926.3 73.3
+927.2 18.1
+928.4 353.9
+929.4 433.5
+930.3 27.0
+933.1 28.8
+936.0 30.5
+937.9 63.8
+939.0 108.6
+939.6 26.1
+940.6 8.1
+941.7 11.4
+943.7 303.8
+946.4 563.7
+947.5 303.7
+949.3 67.7
+952.0 161.5
+953.4 197.8
+954.2 27.7
+954.8 51.4
+955.7 38.4
+956.5 10.7
+957.5 50.8
+959.3 76.8
+960.0 100.8
+961.7 8.8
+963.6 53.0
+964.4 71.4
+965.7 75.3
+966.6 61.8
+968.5 46.4
+969.6 32.2
+970.2 144.7
+971.9 4.4
+973.0 38.1
+975.5 563.3
+976.2 109.3
+977.6 18.3
+979.3 33.6
+980.6 35.9
+982.5 65.5
+984.4 72.6
+986.6 1133.9
+987.6 329.7
+988.4 15.3
+989.1 27.0
+990.1 30.3
+991.1 16.1
+995.5 54.3
+996.6 10.0
+997.5 92.7
+998.6 25.5
+1000.1 279.9
+1000.7 66.4
+1002.5 79.8
+1004.6 4.8
+1006.5 53.4
+1007.5 9.9
+1008.2 37.6
+1009.9 153.5
+1010.8 82.7
+1011.5 48.7
+1012.6 47.0
+1013.6 32.0
+1014.8 7.4
+1016.9 48.3
+1018.1 56.8
+1019.9 24.1
+1021.7 29.2
+1024.1 43.5
+1026.0 37.4
+1030.6 8.6
+1032.5 81.3
+1033.4 22.0
+1034.2 10.6
+1034.9 28.8
+1035.9 41.0
+1037.3 37.9
+1040.0 65.2
+1040.8 33.7
+1045.5 47.3
+1046.6 71.0
+1047.2 82.7
+1047.9 38.3
+1048.6 33.0
+1050.7 3.6
+1052.8 12.1
+1056.6 130.3
+1057.7 66.8
+1059.5 64.8
+1060.3 54.1
+1067.6 251.1
+1068.9 162.1
+1069.8 207.8
+1070.6 91.8
+1073.8 32.5
+1074.5 745.7
+1075.6 253.3
+1076.5 99.6
+1078.7 14.2
+1080.4 15.2
+1082.6 41.6
+1083.9 3.0
+1084.8 25.1
+1085.4 91.4
+1086.8 28.3
+1094.5 14.8
+1095.4 16.4
+1096.6 32.8
+1097.6 168.1
+1098.7 76.9
+1099.8 27.0
+1110.2 36.7
+1110.9 15.5
+1111.9 3.3
+1113.2 10.4
+1114.0 47.1
+1114.8 62.3
+1115.6 757.9
+1116.6 432.6
+1117.7 105.1
+1123.4 3.1
+1124.6 20.5
+1125.8 15.4
+1129.9 43.2
+1135.4 18.2
+1137.2 18.2
+1138.6 35.4
+1139.5 18.9
+1146.5 19.5
+1147.6 35.9
+1149.5 67.1
+1150.4 41.9
+1151.6 37.1
+1152.4 28.2
+1154.7 77.4
+1155.5 342.0
+1156.6 360.0
+1157.7 116.4
+1160.9 43.6
+1169.8 24.8
+1173.5 1090.5
+1174.6 571.7
+1175.6 70.4
+1177.6 29.6
+1180.6 6.8
+1181.5 60.4
+1187.6 34.2
+1193.4 6.7
+1196.2 44.7
+1209.6 12.5
+1210.6 17.1
+1211.2 4.8
+1211.8 6.9
+1212.7 104.7
+1213.8 43.3
+1214.6 20.6
+1225.6 3.2
+1228.1 130.1
+1228.8 695.9
+1229.6 445.8
+1230.5 838.6
+1231.4 466.4
+1232.6 151.9
+1240.0 16.4
+1245.1 72.4
+1253.8 68.5
+1255.1 27.5
+1256.0 11.1
+1266.3 24.0
+1282.4 15.1
+1291.8 18.2
+1293.5 33.2
+1294.2 19.5
+1296.3 22.9
+1298.4 14.1
+1308.7 35.1
+1315.5 80.0
+1316.8 9.3
+1325.3 165.6
+1326.6 138.1
+1327.6 41.9
+1332.6 13.0
+1341.8 39.8
+1343.6 947.8
+1344.6 637.8
+1345.5 29.4
+1352.5 46.7
+1355.2 25.3
+1369.1 7.0
+1371.5 30.1
+1375.5 13.4
+1380.8 12.1
+1385.3 7.4
+1397.0 12.6
+1402.7 37.9
+1434.7 8.0
+1476.7 6.3
+1485.5 18.7
+1492.8 22.4
+1493.5 10.7
+1504.9 16.4
+S	54	54	410.20
+I	ID	74
+I	RTime	3.4228
+Z	3	1228.58
+129.2 2.0
+137.1 1.3
+141.1 0.8
+155.3 1.7
+157.0 1.2
+158.2 1.2
+159.1 6.4
+166.1 0.8
+174.9 3.5
+185.1 1.2
+187.0 2.7
+189.1 2.5
+201.3 1.7
+217.2 3.5
+217.9 2.2
+230.1 1.5
+232.4 1.2
+235.2 3.9
+236.1 2.0
+239.3 1.6
+246.3 9.5
+248.0 1.7
+251.0 5.8
+259.3 1.0
+260.0 2.5
+271.9 1.7
+280.2 8.8
+282.1 10.3
+293.1 4.3
+300.9 2.7
+303.3 23.7
+306.7 2.2
+307.8 7.6
+310.6 3.9
+313.0 1.8
+315.0 3.7
+316.2 1.2
+317.0 1.3
+321.7 3.0
+323.3 5.4
+327.0 0.8
+329.3 3.5
+330.3 1.6
+331.4 13.6
+337.7 4.4
+339.4 4.1
+341.3 1.5
+343.3 5.8
+346.0 6.5
+347.3 12.1
+348.1 12.1
+350.2 15.5
+352.0 1.1
+353.8 1.5
+356.0 7.0
+357.1 26.7
+359.3 3.7
+360.6 3.0
+362.6 9.6
+365.1 3.0
+366.3 6.4
+368.5 6.3
+370.0 17.8
+370.8 1.2
+371.4 3.0
+372.7 14.0
+374.1 27.2
+375.4 11.6
+376.9 8.5
+378.8 13.5
+381.4 17.2
+382.2 4.0
+383.2 108.1
+384.4 4.0
+386.0 11.1
+386.8 4.8
+387.6 2.7
+388.4 1.2
+389.9 6.1
+391.5 16.7
+392.8 31.1
+394.1 12.1
+396.3 10.0
+397.9 20.1
+398.7 18.0
+401.0 153.3
+401.9 39.2
+403.8 14.6
+411.2 1.6
+424.5 1.7
+426.3 1.8
+428.3 4.5
+430.3 1.8
+431.6 4.3
+438.8 6.8
+440.2 3.0
+443.4 3.2
+444.4 9.1
+448.1 1.3
+449.6 3.2
+451.9 2.7
+456.4 3.7
+464.5 11.0
+469.3 8.8
+473.8 11.8
+476.3 3.9
+479.6 1.0
+480.8 2.9
+484.4 4.5
+485.8 8.8
+487.4 3.2
+488.2 2.2
+489.8 3.2
+493.0 6.9
+493.6 3.7
+500.1 6.3
+502.4 4.5
+503.3 2.0
+503.9 9.8
+507.1 9.6
+508.2 6.3
+510.4 8.8
+512.1 6.6
+513.8 7.5
+517.5 1.8
+520.7 8.0
+521.5 2.0
+522.5 17.0
+534.3 8.3
+535.1 9.5
+536.0 11.8
+537.4 6.1
+545.5 2.0
+548.3 2.5
+551.9 5.5
+556.4 4.6
+561.5 9.0
+563.2 4.5
+573.2 5.4
+576.4 2.5
+586.5 1.2
+590.3 7.1
+603.5 10.5
+605.2 2.0
+609.4 2.2
+613.2 2.2
+614.4 1.1
+618.7 2.0
+619.4 6.0
+622.4 3.7
+630.4 3.2
+632.5 6.6
+635.3 2.7
+655.8 2.5
+656.8 1.7
+658.4 2.0
+661.1 3.2
+664.5 9.3
+676.7 1.7
+690.4 18.1
+691.4 12.6
+692.6 2.5
+711.4 1.1
+718.5 0.8
+722.4 4.3
+885.5 2.7
+S	55	55	475.81
+I	ID	97
+I	RTime	4.6095
+Z	2	950.61
+144.0 3.7
+147.2 5.6
+152.1 1.5
+155.4 1.1
+158.3 3.4
+161.2 1.5
+169.3 0.8
+171.1 5.4
+174.2 3.5
+175.0 51.5
+176.2 1.2
+178.0 7.3
+182.1 2.7
+184.2 1.5
+185.3 1.5
+187.1 4.5
+195.0 3.7
+196.0 1.7
+197.5 5.8
+198.1 3.2
+201.1 5.4
+205.2 2.5
+208.9 5.3
+211.1 1.7
+212.3 5.8
+213.1 1.2
+214.0 2.0
+216.2 20.6
+217.2 2.4
+218.5 9.6
+219.2 8.6
+221.1 6.5
+221.9 3.4
+222.9 2.7
+225.0 1.3
+226.1 53.2
+227.9 12.6
+230.3 3.0
+231.7 6.0
+233.0 1.1
+234.2 3.9
+239.1 1.2
+240.1 11.6
+241.3 7.9
+244.3 48.4
+245.4 5.1
+247.5 7.6
+248.3 11.6
+251.2 2.5
+256.0 0.8
+257.2 17.5
+258.4 10.8
+259.3 3.4
+261.3 9.1
+268.2 1.2
+269.2 4.8
+271.2 2.0
+272.3 13.5
+273.2 8.6
+274.1 4.0
+275.2 10.5
+276.2 25.6
+277.3 6.4
+279.3 13.6
+280.2 10.3
+283.2 3.5
+284.4 1.7
+285.3 1.2
+286.1 1.2
+287.5 4.0
+288.2 2.7
+289.3 19.2
+290.3 5.6
+293.1 2.0
+294.4 1.7
+295.4 2.2
+297.2 9.5
+298.2 8.1
+300.1 1.5
+300.7 1.5
+302.3 3.0
+303.3 10.8
+304.1 6.0
+306.8 2.5
+309.2 2.7
+311.2 19.7
+312.4 13.0
+313.4 2.2
+314.2 0.8
+318.2 2.0
+319.1 7.0
+325.1 6.0
+326.5 1.6
+327.2 2.9
+329.2 18.2
+330.2 34.0
+331.3 2.5
+337.2 75.5
+338.5 21.1
+339.4 7.9
+340.2 2.0
+342.2 2.0
+343.1 2.4
+344.2 3.4
+346.7 18.7
+347.4 64.3
+348.2 17.2
+351.5 1.2
+354.1 24.6
+354.9 22.3
+355.6 1.5
+357.9 3.7
+359.3 1.3
+360.2 94.0
+361.2 71.6
+363.3 26.7
+364.0 1.3
+369.2 4.1
+370.3 5.0
+370.9 1.1
+372.3 4.0
+373.5 5.4
+380.6 1.0
+381.3 4.5
+384.3 1.2
+387.3 13.8
+389.1 9.8
+390.8 4.3
+395.7 15.3
+396.4 1.7
+397.4 2.9
+399.3 7.4
+401.5 2.5
+403.1 65.0
+404.3 5.9
+405.4 6.5
+407.4 2.0
+408.3 8.1
+409.7 1.2
+411.9 313.2
+412.8 5.6
+413.7 1.2
+414.3 2.0
+416.4 12.0
+417.5 2.5
+418.8 7.4
+422.4 4.8
+423.4 20.2
+424.2 6.0
+427.2 17.7
+429.4 9.1
+430.3 5.6
+431.2 8.3
+432.0 40.2
+433.5 2.7
+434.6 3.2
+435.9 2.5
+437.4 20.2
+438.0 5.9
+439.2 5.8
+440.4 18.7
+441.2 43.5
+442.4 8.3
+443.4 5.8
+444.2 1.1
+445.3 6.5
+446.3 47.7
+447.0 2.2
+451.3 3.2
+452.3 5.1
+454.2 2.7
+457.4 280.7
+458.4 299.7
+459.1 296.7
+460.0 18.2
+460.9 4.0
+463.0 9.1
+465.4 3.0
+466.9 864.2
+468.0 8.1
+483.1 2.0
+511.2 7.5
+516.5 1.3
+519.4 2.7
+520.3 3.4
+527.7 2.7
+528.4 1.5
+534.3 5.5
+535.1 0.8
+545.3 1.2
+546.5 2.0
+552.9 1.2
+565.3 4.0
+575.5 12.8
+583.0 5.0
+583.8 3.4
+594.5 2.2
+604.5 2.7
+608.7 7.4
+612.1 2.2
+620.5 6.0
+633.6 3.7
+634.4 3.9
+639.5 4.8
+648.5 7.3
+653.2 1.6
+662.0 2.0
+663.4 10.6
+664.5 1.8
+667.6 1.3
+675.8 6.9
+676.4 5.8
+677.7 1.8
+679.5 25.2
+680.3 8.0
+701.5 2.4
+705.7 2.5
+707.5 137.6
+708.5 42.0
+711.9 2.5
+725.6 2.2
+733.4 23.1
+734.4 73.8
+735.5 27.7
+747.7 3.7
+750.5 1.7
+774.9 3.2
+775.6 8.5
+776.9 2.4
+777.8 4.3
+795.2 10.6
+796.5 4.0
+803.3 1.2
+804.7 8.3
+815.7 3.7
+822.7 8.1
+823.4 3.7
+833.6 16.8
+834.7 2.0
+838.4 6.9
+851.5 29.8
+852.4 27.1
+853.8 2.0
+879.4 2.7
+891.5 5.4
+928.4 2.2
+S	56	56	902.96
+I	ID	54
+I	RTime	2.4197
+Z	2	1804.91
+318.3 3.9
+323.2 1.8
+349.4 7.5
+380.2 2.4
+394.1 7.5
+399.6 1.2
+400.6 2.5
+418.2 2.0
+434.1 2.5
+444.9 1.2
+452.4 3.5
+454.8 1.8
+457.1 7.9
+458.5 3.0
+465.3 8.8
+472.1 3.2
+475.2 29.8
+476.4 1.5
+479.4 2.0
+489.2 74.3
+490.4 7.4
+493.1 11.3
+507.0 1.8
+559.2 3.4
+562.7 1.7
+564.3 2.9
+568.7 2.2
+571.4 0.6
+588.6 5.8
+590.3 1.8
+602.4 6.0
+604.3 6.6
+610.5 4.4
+639.4 1.7
+647.4 1.1
+648.4 9.6
+649.8 9.1
+656.8 44.7
+687.5 6.6
+689.5 38.2
+690.6 2.5
+697.4 6.5
+703.4 43.9
+704.4 9.6
+705.0 0.8
+706.9 4.4
+713.5 59.7
+715.4 2.0
+737.5 2.7
+739.1 1.7
+744.0 1.8
+760.3 1.2
+777.5 19.2
+778.6 4.0
+788.4 2.4
+798.7 1.6
+802.6 18.1
+816.5 27.7
+817.6 17.6
+818.3 8.6
+831.7 2.7
+838.8 2.5
+845.4 2.5
+855.3 1.6
+861.6 9.8
+872.2 1.8
+873.4 12.6
+877.5 7.1
+885.3 17.0
+890.5 1.3
+891.4 3.0
+954.4 2.2
+961.4 7.0
+964.9 1.3
+971.2 7.9
+972.7 1.7
+985.3 3.2
+986.8 2.0
+989.3 22.3
+990.3 4.6
+997.5 6.3
+1003.4 4.0
+1029.8 4.0
+1043.7 5.4
+1066.6 3.5
+1074.7 6.3
+1084.4 4.0
+1085.5 10.8
+1086.5 9.3
+1087.3 2.9
+1098.2 6.0
+1099.6 6.3
+1100.7 5.5
+1102.4 26.2
+1103.6 1.3
+1116.3 17.7
+1170.7 1.2
+1182.3 2.0
+1185.5 2.9
+1186.9 2.5
+1201.8 3.5
+1203.6 7.5
+1204.6 1.7
+1215.9 3.9
+1217.6 4.4
+1233.8 2.5
+1250.7 2.7
+1263.2 1.3
+1272.7 3.2
+1280.7 15.3
+1281.5 1.3
+1288.5 1.3
+1294.5 4.8
+1295.4 13.0
+1296.0 3.7
+1298.5 63.4
+1299.6 64.9
+1312.7 159.3
+1313.6 58.0
+1316.7 18.2
+1317.5 14.5
+1330.7 16.2
+1331.8 2.2
+1388.1 5.5
+1389.0 1.2
+1401.6 2.7
+1408.8 2.2
+1411.8 9.5
+1412.8 3.7
+1426.7 3.5
+1462.7 3.0
+1471.0 1.2
+1555.8 2.4
+S	57	57	564.68
+Z	2	1128.35
+165.1 11.6
+166.1 14.6
+167.1 8.7
+168.1 1.4
+173.0 14.5
+175.1 17.4
+178.0 7.9
+182.0 111.5
+183.2 3.4
+184.1 1.1
+185.1 10.1
+186.0 8.2
+187.2 21.1
+188.9 6.2
+191.1 13.9
+192.1 1.5
+196.1 10.0
+197.2 4.6
+198.3 1.6
+200.3 2.6
+202.0 4.5
+211.2 4.6
+212.3 13.5
+213.1 11.9
+214.3 2.7
+215.0 9.7
+218.9 17.5
+220.2 3.9
+221.3 4.8
+222.2 1.7
+226.3 5.2
+227.3 12.4
+228.3 2.8
+229.2 2.7
+230.3 2.1
+231.4 8.9
+232.1 11.4
+241.2 3.2
+242.2 10.1
+243.1 10.5
+244.3 32.9
+245.3 6.4
+247.3 2.0
+249.3 6.1
+251.2 9.7
+252.1 8.1
+254.3 1.9
+256.0 2.7
+258.1 27.2
+260.4 8.9
+261.0 13.0
+261.9 5.3
+263.3 11.4
+264.3 1.7
+265.4 3.9
+267.4 1.7
+268.1 15.1
+269.2 13.9
+270.2 18.6
+271.2 33.8
+272.2 4.2
+274.2 18.5
+276.2 6.5
+277.3 11.8
+278.2 3.0
+278.9 3.3
+281.9 11.9
+286.1 14.2
+287.1 45.3
+288.1 72.0
+288.8 3.5
+289.4 11.0
+290.9 10.8
+293.4 3.0
+295.1 121.1
+296.3 13.6
+297.3 4.7
+299.3 16.5
+300.3 0.7
+301.1 4.8
+302.5 1.3
+303.1 0.6
+305.7 8.5
+306.7 5.5
+307.4 3.2
+309.4 4.0
+310.8 1.6
+315.1 2.5
+315.7 5.6
+317.2 26.4
+318.2 23.7
+319.0 1.8
+321.3 2.6
+322.2 2.7
+325.3 9.2
+326.2 5.6
+327.2 34.9
+328.4 2.8
+329.2 1.0
+329.8 1.6
+333.4 1.3
+335.3 13.1
+336.4 3.2
+337.4 11.3
+338.2 3.0
+339.1 8.9
+340.2 3.9
+341.0 7.0
+342.4 1.5
+343.4 17.4
+344.2 3.4
+345.2 161.4
+346.2 1.4
+347.6 14.8
+348.3 3.1
+349.3 2.8
+351.1 21.1
+354.3 2.6
+357.4 10.4
+358.4 2.2
+359.1 7.2
+360.4 2.5
+361.3 6.8
+363.2 253.6
+364.2 46.2
+367.3 2.9
+368.0 10.3
+369.4 5.2
+371.2 16.9
+372.3 2.3
+373.3 1.6
+374.4 5.8
+375.4 15.7
+376.4 7.0
+378.2 5.3
+379.6 13.6
+381.0 6.0
+383.7 104.2
+384.5 56.0
+385.7 8.5
+386.7 15.9
+387.5 30.1
+388.2 4.5
+389.1 10.0
+390.0 6.4
+391.5 10.1
+392.2 8.0
+393.8 7.0
+394.6 23.2
+396.2 1.0
+398.1 9.1
+399.1 32.2
+399.9 13.0
+401.4 6.2
+403.9 14.0
+406.2 5.3
+408.0 39.3
+409.0 25.6
+411.1 8.2
+412.5 98.9
+413.6 4.2
+414.6 5.9
+416.3 6.6
+417.6 32.5
+418.7 14.9
+419.4 2.4
+421.4 7.8
+422.5 7.8
+424.3 11.1
+427.1 4.2
+428.8 27.0
+429.6 4.2
+430.5 8.7
+431.4 4.9
+433.4 31.0
+434.2 25.8
+435.8 25.6
+436.5 35.9
+437.1 7.0
+438.5 18.1
+440.7 35.5
+442.1 28.6
+442.8 53.4
+443.5 3.1
+444.5 1.5
+445.6 17.8
+446.8 22.3
+449.3 11.4
+451.3 469.7
+452.4 73.8
+453.5 14.4
+454.2 9.6
+455.6 12.4
+456.5 193.0
+457.6 20.5
+458.3 28.5
+459.2 5.3
+460.3 93.8
+461.0 16.5
+462.1 6.6
+463.8 35.2
+465.2 80.0
+465.9 41.1
+466.7 17.2
+469.3 10.9
+470.1 2.3
+471.3 5.1
+472.1 57.7
+473.4 59.7
+474.5 557.2
+475.6 10.5
+476.3 2.5
+478.0 1707.3
+478.8 22.3
+479.5 20.7
+480.2 34.0
+481.4 20.5
+482.3 8.4
+483.8 39.2
+484.9 18.2
+485.8 13.7
+486.4 17.1
+487.2 26.6
+488.4 31.7
+489.1 21.2
+490.3 31.4
+490.9 5.8
+491.6 36.7
+492.7 38.1
+495.2 77.1
+496.3 62.2
+497.1 22.5
+498.3 23.7
+499.5 11.7
+500.1 4.5
+501.2 44.3
+502.8 69.5
+504.4 50.3
+505.7 9.3
+506.4 47.2
+507.3 11.5
+508.0 7.7
+508.8 32.3
+509.4 2.3
+510.5 18.0
+511.6 63.9
+512.2 32.7
+513.4 110.8
+514.4 31.7
+515.3 3.2
+516.3 51.8
+517.0 22.8
+518.1 49.1
+518.9 53.1
+520.1 56.4
+521.2 38.8
+522.0 68.1
+523.0 46.8
+524.4 31.3
+525.2 59.3
+526.2 54.2
+527.0 55.0
+528.7 116.7
+529.6 127.9
+530.5 32.5
+531.3 146.4
+532.3 73.6
+533.1 17.6
+533.8 31.8
+535.0 15.0
+535.9 55.0
+537.0 13.7
+538.1 129.0
+538.8 54.1
+539.7 76.5
+541.1 88.0
+541.9 52.7
+542.8 124.5
+543.6 41.7
+544.5 93.3
+545.8 53.8
+546.7 192.2
+547.6 180.1
+548.8 174.4
+549.6 156.7
+550.3 78.0
+551.5 82.8
+552.4 258.4
+553.3 232.5
+554.6 155.7
+555.7 580.6
+556.4 340.5
+557.4 167.4
+558.4 35.2
+559.3 1.4
+563.9 3.0
+565.0 6.5
+566.1 6.7
+567.3 4.2
+568.3 2.3
+570.1 9.2
+571.2 4.8
+574.5 26.4
+577.4 2.4
+579.7 17.9
+582.5 5.0
+583.8 8.3
+584.6 13.7
+585.7 9.9
+586.5 5.0
+589.7 19.0
+590.8 14.3
+592.2 31.3
+593.4 40.8
+594.2 8.8
+596.0 51.1
+597.4 10.3
+598.4 294.4
+599.5 118.9
+601.1 13.6
+602.3 12.8
+603.6 7.3
+604.3 3.3
+605.4 3.6
+607.3 34.4
+608.6 32.2
+609.4 6.3
+610.1 13.0
+611.2 12.8
+612.2 4.9
+613.0 11.4
+613.6 21.4
+614.5 32.8
+615.4 20.9
+616.1 2.7
+617.5 15.3
+618.2 15.6
+619.5 16.3
+622.2 12.1
+623.7 6.1
+624.4 3.1
+625.1 36.2
+626.4 7.5
+627.5 31.2
+628.5 23.6
+629.4 22.0
+630.5 6.4
+631.3 5.4
+633.4 20.0
+634.6 16.8
+635.3 22.3
+636.2 7.4
+637.2 20.1
+638.2 10.4
+640.1 7.4
+641.6 8.2
+642.4 44.5
+643.3 14.6
+644.4 20.9
+646.0 36.2
+647.5 3.8
+648.2 5.4
+649.3 20.2
+650.4 69.3
+651.7 15.0
+653.2 19.8
+654.4 24.1
+655.4 6.6
+656.2 8.8
+657.0 19.5
+658.0 29.1
+660.3 157.5
+661.5 35.1
+662.9 35.9
+663.5 11.1
+664.6 10.9
+665.3 13.1
+666.6 16.6
+667.8 27.0
+669.5 55.8
+670.6 34.5
+671.6 15.2
+672.8 16.9
+673.4 33.3
+674.1 16.8
+674.7 19.8
+675.3 9.1
+678.2 192.8
+679.3 38.5
+680.5 18.7
+681.3 4.9
+682.3 7.4
+685.2 14.8
+686.2 18.8
+687.1 27.0
+688.1 16.8
+689.5 9.7
+690.9 9.5
+691.6 20.6
+693.5 2.2
+694.4 36.0
+695.2 3.7
+696.5 16.3
+697.4 12.4
+698.2 30.5
+699.0 12.0
+699.7 11.9
+701.3 51.8
+702.6 23.4
+703.7 6.6
+705.9 28.0
+706.7 0.6
+707.5 9.0
+708.7 39.5
+709.5 12.1
+710.5 58.0
+711.4 15.0
+712.9 19.8
+714.0 11.0
+715.5 8.1
+717.8 6.6
+718.8 6.4
+720.4 31.5
+721.7 28.7
+722.8 159.4
+723.9 106.4
+725.4 59.0
+726.2 46.9
+727.5 31.4
+728.6 8.3
+729.6 33.5
+730.8 62.5
+731.9 21.4
+732.6 39.0
+733.8 11.7
+734.4 30.0
+735.1 15.8
+735.9 56.8
+736.9 53.9
+737.6 29.1
+738.6 62.7
+739.4 37.4
+740.2 25.0
+741.8 32.1
+742.8 23.7
+743.6 5.5
+744.7 31.5
+745.4 40.5
+746.0 5.1
+746.9 3.9
+749.4 49.6
+750.2 24.8
+751.3 34.6
+752.6 77.6
+753.9 21.8
+754.8 12.3
+755.7 20.3
+756.3 3.2
+757.2 16.6
+758.2 9.7
+759.6 38.3
+760.5 12.3
+761.5 17.0
+762.7 42.9
+764.4 49.4
+765.4 30.8
+766.5 1171.2
+767.6 516.0
+768.5 2.8
+770.1 14.5
+771.6 57.2
+772.8 38.9
+773.6 39.1
+774.6 7.1
+775.3 4.0
+777.6 51.1
+778.5 23.9
+779.2 56.1
+780.2 63.4
+781.2 38.2
+782.7 8.3
+784.3 11.4
+785.5 4.7
+786.4 48.2
+787.5 93.2
+788.6 41.6
+789.4 53.4
+792.3 9.9
+793.7 10.1
+794.7 26.7
+795.9 16.3
+796.5 6.8
+797.7 34.9
+798.8 4.3
+800.2 52.5
+801.0 24.9
+801.7 10.6
+802.7 28.3
+803.4 1.8
+804.8 1.6
+806.4 6.2
+807.5 11.6
+809.3 18.8
+810.6 19.1
+813.5 11.4
+814.8 4.5
+815.7 10.4
+816.5 2.4
+817.7 5.8
+819.2 13.8
+821.6 16.7
+823.4 1027.2
+824.5 418.7
+825.4 9.8
+828.5 3.1
+834.4 348.3
+835.5 132.0
+836.5 8.4
+838.5 10.9
+841.6 2.8
+843.5 1.0
+847.4 1.4
+852.6 0.7
+853.5 2.9
+854.4 5.4
+855.5 4.3
+856.6 15.6
+857.6 7.6
+859.7 9.5
+863.5 3.5
+866.6 3.8
+870.7 19.9
+874.4 3.5
+875.6 2.2
+879.6 9.2
+880.5 19.6
+881.4 8.5
+882.5 7.1
+883.6 6.7
+885.8 2.9
+886.4 11.5
+888.2 4.3
+892.1 3.3
+895.2 13.0
+896.5 4.2
+898.4 14.3
+900.5 6.7
+901.6 4.9
+904.5 4.7
+906.5 6.4
+912.2 5.3
+913.5 5.4
+914.6 14.4
+920.9 19.3
+923.5 11.6
+924.5 18.4
+927.0 2.3
+928.5 4.8
+932.5 3.7
+934.6 7.0
+935.6 2.3
+936.6 1.5
+937.5 7.7
+941.9 2.9
+942.5 2.3
+943.6 6.1
+945.5 2.9
+947.5 558.1
+948.6 150.5
+949.2 1.9
+951.3 11.1
+954.4 97.8
+955.6 57.4
+960.7 5.7
+963.6 5.3
+964.5 6.4
+965.8 14.2
+966.5 0.6
+968.4 1.4
+971.6 8.6
+973.2 6.3
+980.7 11.6
+981.6 16.7
+982.5 13.3
+989.4 40.7
+990.5 11.3
+991.2 9.0
+993.6 3.3
+994.4 3.9
+998.6 4.6
+1001.1 2.0
+1008.9 3.1
+1009.6 7.0
+1010.7 3.1
+1013.6 1.3
+1021.5 2.1
+1022.3 2.3
+1024.7 2.6
+1033.7 14.8
+1035.3 3.2
+1036.5 1.8
+1038.6 1.9
+1040.2 3.9
+1040.9 2.1
+1048.5 7.2
+1054.6 1.5
+1062.6 3.8
+1064.8 8.6
+1074.6 5.0
+1128.2 4.5
+1135.5 2.5
+1137.9 4.0
+1139.8 4.0
+S	58	58	565.65
+Z	2	1130.29
+165.0 7.8
+166.1 14.1
+175.1 5.6
+176.2 3.1
+177.3 9.4
+182.0 72.7
+182.9 4.6
+186.2 3.1
+187.2 7.2
+188.1 2.6
+189.1 7.3
+190.0 3.0
+195.2 2.0
+196.3 2.3
+201.0 6.3
+202.8 5.1
+203.9 4.3
+208.3 2.5
+212.3 4.4
+212.9 2.6
+214.0 12.0
+220.9 6.8
+224.0 2.0
+226.2 7.0
+232.3 4.9
+240.1 2.6
+241.4 1.2
+243.1 3.4
+244.2 3.8
+245.3 2.1
+246.5 14.0
+247.2 12.2
+248.0 9.7
+251.2 9.7
+253.1 3.9
+254.1 13.6
+257.2 9.5
+258.3 4.6
+259.1 8.3
+260.1 1.5
+266.2 4.1
+269.0 23.6
+270.2 25.5
+274.9 2.5
+278.2 8.3
+279.0 4.1
+280.3 2.7
+281.9 41.2
+283.3 2.6
+284.9 15.6
+286.1 20.1
+287.2 28.2
+288.1 72.8
+289.3 4.8
+290.1 2.4
+293.2 3.6
+295.1 51.7
+296.1 17.6
+300.3 11.8
+301.1 2.5
+302.9 2.7
+304.2 10.2
+305.4 6.3
+306.2 2.3
+309.0 5.4
+310.2 3.3
+314.0 3.7
+315.0 1.2
+317.6 9.0
+318.3 4.9
+322.6 4.0
+325.1 9.2
+327.2 18.5
+328.1 3.3
+329.0 1.6
+331.4 1.2
+332.1 7.4
+333.2 1.5
+335.2 20.5
+336.2 1.8
+342.2 19.5
+342.8 12.4
+345.1 65.5
+346.1 8.2
+347.0 2.5
+351.5 1.3
+357.4 2.5
+359.4 8.2
+363.1 175.0
+364.2 22.9
+364.9 6.1
+367.4 2.9
+370.1 3.4
+371.0 18.2
+379.1 2.0
+380.4 18.0
+381.2 5.1
+382.3 1.2
+382.9 1.9
+383.9 69.1
+384.7 12.8
+388.3 1.8
+389.1 6.0
+390.3 7.8
+396.7 14.1
+399.1 6.9
+400.1 3.9
+403.3 1.1
+406.2 11.5
+408.0 3.8
+410.1 3.4
+411.1 23.5
+412.3 24.8
+413.3 24.7
+415.4 2.8
+417.5 14.8
+419.7 2.4
+422.1 2.1
+426.0 5.2
+427.3 7.8
+428.3 1.2
+430.4 8.5
+435.8 32.8
+436.8 49.6
+437.8 9.8
+438.4 4.6
+439.2 1.1
+440.4 13.0
+441.4 26.4
+445.6 2.3
+447.7 26.9
+451.3 227.9
+452.2 47.7
+453.2 9.4
+456.4 54.4
+457.6 17.9
+460.0 50.9
+460.6 25.3
+461.3 1.8
+463.7 797.9
+464.5 40.8
+465.2 20.5
+466.3 62.1
+467.0 6.2
+468.2 3.2
+469.0 7.6
+470.1 14.6
+471.4 8.5
+472.0 2.1
+474.3 220.3
+475.4 33.7
+477.9 782.1
+479.0 165.5
+481.4 0.9
+482.6 5.1
+483.7 12.8
+484.3 18.4
+486.3 85.2
+487.4 4.0
+490.6 352.6
+491.5 16.9
+492.4 22.8
+495.0 77.3
+495.9 63.2
+496.6 2.3
+498.0 2.1
+501.7 8.4
+502.4 7.3
+504.4 1.6
+506.0 22.0
+508.4 6.2
+509.3 7.2
+510.8 7.0
+512.1 6.6
+513.4 132.7
+514.3 22.6
+515.0 52.2
+516.2 34.7
+517.1 12.1
+518.0 40.8
+518.6 18.1
+520.0 74.5
+521.1 30.3
+522.2 5.9
+523.2 6.9
+524.5 6.7
+525.2 5.9
+526.1 5.9
+529.1 27.3
+530.0 91.8
+531.3 78.8
+532.5 14.9
+533.9 42.4
+534.9 9.2
+536.3 2.9
+537.2 5.5
+538.5 89.4
+539.2 27.5
+540.1 39.2
+541.1 21.6
+542.3 41.8
+543.4 19.7
+544.6 31.3
+545.3 3.4
+546.8 134.4
+547.9 50.5
+549.5 4.2
+550.1 44.9
+550.9 50.9
+552.5 37.9
+553.7 2.1
+554.4 6.2
+555.6 465.6
+556.4 327.9
+557.7 71.3
+558.4 122.6
+559.1 3.4
+564.8 11.1
+566.9 7.2
+568.2 4.9
+579.8 6.2
+582.3 14.4
+583.4 4.2
+585.6 8.3
+587.1 9.8
+591.1 8.8
+593.7 14.7
+597.2 29.7
+598.5 104.8
+599.4 39.7
+600.6 12.9
+601.2 1.2
+602.6 3.9
+607.9 8.2
+613.4 32.4
+615.1 3.5
+616.4 17.8
+617.2 2.6
+618.9 14.4
+621.2 117.2
+621.8 8.7
+622.5 19.4
+623.4 13.2
+624.7 9.5
+626.7 6.0
+629.1 4.9
+631.3 13.9
+632.4 9.9
+634.6 15.3
+635.7 10.7
+636.6 6.8
+637.3 34.9
+640.6 58.2
+641.8 10.4
+642.5 6.4
+643.3 24.8
+645.8 80.7
+646.7 34.8
+647.4 20.2
+648.3 4.3
+650.0 7.9
+651.5 8.1
+653.6 258.2
+654.8 26.4
+655.5 1.3
+656.6 22.0
+657.7 35.6
+658.7 24.2
+660.3 43.2
+661.2 29.2
+662.4 9.5
+664.3 9.5
+666.2 4.5
+669.5 39.5
+670.4 39.7
+672.7 69.6
+674.1 2.1
+675.1 4.1
+677.4 61.1
+678.2 121.2
+679.3 40.1
+680.2 25.8
+680.9 51.1
+681.7 13.6
+682.4 22.0
+683.5 21.4
+684.4 5.3
+685.5 10.2
+687.9 2.4
+689.1 12.0
+690.1 11.1
+690.7 13.8
+691.4 9.8
+692.2 13.1
+694.0 16.8
+695.0 171.5
+695.9 17.5
+697.5 27.3
+699.8 5.6
+701.4 1.4
+703.1 2.0
+704.4 46.7
+705.8 48.0
+707.4 26.3
+708.4 22.1
+709.0 8.1
+710.1 17.6
+711.4 43.1
+712.5 4.0
+713.3 11.8
+714.3 70.0
+715.2 20.3
+716.2 13.5
+717.0 49.8
+719.1 7.2
+722.3 9.8
+723.1 28.5
+724.0 28.3
+724.8 5.5
+726.2 14.0
+727.4 2.3
+731.5 2.1
+732.2 1.6
+733.6 4.1
+734.6 5.3
+737.2 17.8
+739.4 10.0
+741.6 58.2
+742.3 9.8
+744.7 2.1
+746.0 2.5
+746.9 4.7
+748.1 5.8
+749.6 11.7
+750.4 8.5
+752.2 2.4
+753.5 15.1
+755.8 4.4
+759.4 2.6
+762.6 10.0
+764.0 13.2
+766.4 480.4
+767.5 251.4
+768.4 47.7
+769.7 55.9
+770.6 47.9
+771.4 4.7
+773.3 8.9
+774.2 3.6
+775.1 17.7
+776.5 2.4
+777.4 9.2
+779.2 171.4
+780.8 13.9
+782.5 21.4
+784.7 18.3
+786.2 27.1
+787.7 5.7
+789.3 3.1
+790.3 1.8
+794.4 28.2
+795.8 23.8
+796.4 2.2
+800.2 13.7
+801.5 2.9
+804.2 3.7
+805.6 3.6
+811.0 5.6
+814.3 2.0
+823.4 397.8
+824.4 161.5
+825.4 42.9
+826.5 29.6
+829.0 10.4
+833.3 5.2
+834.4 145.6
+835.3 49.5
+836.3 29.7
+837.1 1.7
+837.8 1.7
+840.5 9.7
+841.6 3.7
+850.4 1.1
+851.7 2.3
+853.4 6.6
+860.8 4.0
+868.4 4.7
+870.8 3.9
+877.5 3.2
+879.4 10.1
+880.8 4.2
+882.5 3.3
+883.6 4.6
+885.9 3.2
+894.1 5.4
+901.5 3.1
+903.4 5.2
+909.6 14.9
+912.2 4.5
+926.8 10.2
+929.4 1.8
+932.2 1.8
+947.4 267.7
+948.5 98.0
+949.5 25.4
+950.3 7.5
+951.6 6.1
+954.5 36.3
+955.5 30.9
+956.4 9.6
+957.3 4.6
+958.6 9.2
+962.5 10.4
+965.1 15.1
+966.4 10.9
+977.5 4.8
+1002.3 7.2
+1014.7 5.7
+1017.5 13.3
+1041.6 4.2
+1044.4 12.2
+1058.0 3.1
+1125.6 1.8
+S	59	59	474.30
+I	ID	164
+I	RTime	8.0727
+Z	2	947.59
+Z	3	1420.88
+147.2 1.3
+154.2 2.2
+156.1 2.0
+157.1 1.6
+158.1 14.8
+163.9 1.2
+168.9 2.2
+170.0 1.0
+172.2 2.2
+172.9 4.1
+175.2 38.4
+176.1 2.5
+182.2 3.7
+183.9 1.2
+185.2 2.7
+187.0 1.5
+193.1 1.2
+195.4 7.5
+197.1 7.6
+198.1 1.6
+199.4 1.7
+202.1 15.6
+203.2 3.7
+205.0 1.7
+207.1 3.0
+210.1 4.0
+212.4 1.8
+213.3 13.8
+215.7 1.2
+220.2 2.0
+227.2 4.3
+228.1 2.4
+229.2 2.0
+229.8 2.4
+232.1 4.3
+237.0 2.0
+240.3 2.0
+241.3 3.4
+242.4 11.3
+245.1 53.5
+246.1 7.4
+248.4 2.0
+252.3 2.2
+254.5 2.7
+255.3 1.0
+259.0 34.2
+260.2 172.3
+262.1 25.0
+269.1 4.3
+271.2 8.3
+272.3 6.9
+273.4 4.6
+276.3 6.0
+280.4 3.0
+283.3 1.0
+291.2 6.5
+299.3 11.1
+300.4 10.6
+310.1 4.5
+313.3 2.0
+314.2 4.5
+317.6 7.0
+324.2 1.6
+325.3 1.2
+327.1 1.5
+328.1 7.3
+334.0 1.7
+340.2 4.8
+341.3 3.0
+344.2 9.6
+345.3 13.8
+346.4 6.5
+354.4 3.2
+356.9 5.8
+359.6 5.0
+360.8 3.0
+361.4 5.5
+366.8 3.5
+377.4 2.4
+381.2 0.8
+387.1 8.6
+394.1 2.0
+395.1 3.0
+397.2 2.2
+400.9 1.2
+412.3 4.0
+414.2 2.5
+416.4 1.0
+421.6 2.5
+422.3 1.7
+426.5 3.4
+428.5 10.8
+429.2 2.2
+430.3 5.5
+432.3 1.8
+435.3 4.5
+438.6 18.6
+439.4 12.3
+440.2 16.8
+442.5 4.5
+444.2 3.2
+445.4 1.3
+446.6 4.8
+448.2 6.1
+456.3 124.5
+457.4 98.1
+458.2 2.7
+464.8 20.7
+465.6 30.2
+466.9 3.0
+530.4 2.0
+533.3 1.7
+545.2 2.0
+553.5 17.7
+588.6 7.5
+590.0 1.2
+593.7 3.4
+611.1 42.7
+612.2 1.6
+616.2 2.5
+648.3 1.2
+658.4 6.3
+662.3 15.3
+669.4 2.0
+704.3 2.2
+706.3 2.5
+717.4 2.4
+720.0 2.7
+731.4 4.0
+733.1 18.7
+744.6 1.2
+746.5 2.0
+747.7 10.8
+763.0 1.2
+774.4 3.2
+811.5 1.3
+820.4 3.7
+821.8 2.5
+S	60	60	713.36
+I	ID	89
+I	RTime	4.1929
+Z	1	713.36
+209.2 2.5
+219.2 2.5
+240.1 3.5
+243.0 3.4
+245.1 0.8
+252.3 1.7
+261.3 1.7
+274.0 1.6
+275.3 4.5
+280.8 3.2
+292.2 2.2
+309.8 2.4
+346.3 2.7
+360.2 5.1
+369.3 2.4
+372.3 4.0
+377.4 1.0
+386.2 6.8
+391.3 3.2
+393.3 4.6
+395.3 1.7
+397.3 2.7
+404.3 4.1
+411.2 1.6
+417.3 0.6
+421.4 3.7
+426.1 1.0
+429.4 2.2
+433.9 2.0
+435.2 8.8
+438.3 3.5
+439.4 2.9
+453.1 7.9
+455.5 3.0
+456.2 5.9
+461.4 2.2
+464.5 2.0
+469.3 1.5
+485.5 0.8
+487.4 3.2
+505.3 38.7
+511.4 2.2
+522.3 1.1
+525.5 1.6
+526.2 1.2
+532.7 1.3
+535.2 5.5
+536.0 10.0
+538.7 1.5
+540.5 3.0
+544.8 1.2
+549.5 3.4
+550.4 2.7
+553.5 2.5
+558.3 13.1
+567.3 31.0
+568.0 5.3
+576.7 7.5
+583.4 1.3
+585.1 15.3
+595.9 3.7
+608.7 9.3
+615.3 2.0
+634.5 1.0
+637.6 1.2
+644.9 7.5
+651.3 7.0
+653.4 4.4
+655.3 8.1
+659.4 1.2
+660.5 5.6
+663.3 4.0
+664.7 6.9
+665.4 2.5
+667.3 5.0
+674.8 3.9
+677.5 22.0
+678.4 33.5
+681.5 7.8
+683.2 0.8
+684.3 1.1
+687.1 8.6
+695.3 156.6
+696.2 33.7
+704.1 20.7
+704.9 2.7
+712.5 0.8
+S	61	61	1004.43
+Z	2	2007.85
+283.1 0.9
+286.2 1.1
+287.2 0.5
+289.2 0.9
+292.3 0.4
+294.2 17.5
+295.4 2.4
+297.2 0.6
+301.3 3.1
+303.3 2.1
+304.9 1.0
+308.2 0.7
+311.0 2.6
+312.2 2.5
+315.4 1.9
+316.3 1.6
+318.1 0.9
+319.4 1.1
+320.2 0.6
+321.2 1.1
+324.2 0.5
+325.2 0.4
+326.2 2.3
+327.1 3.6
+328.5 1.1
+329.3 2.5
+330.1 1.3
+331.2 5.2
+331.9 0.3
+333.2 2.6
+335.5 1.0
+339.1 4.0
+341.2 0.8
+341.9 0.4
+343.2 1.0
+344.2 0.9
+345.3 2.6
+350.0 1.7
+353.1 2.4
+354.5 0.4
+356.2 2.2
+357.2 2.8
+359.3 1.0
+360.1 2.0
+362.2 0.5
+363.1 1.7
+365.1 0.4
+368.2 4.2
+369.3 11.7
+370.3 3.0
+371.2 0.5
+372.4 6.2
+373.1 3.2
+375.2 1.5
+376.4 0.6
+377.1 1.2
+379.8 2.7
+381.1 5.0
+382.4 1.3
+383.4 1.2
+384.1 2.2
+385.1 1.3
+386.3 15.6
+387.2 4.8
+388.4 3.5
+389.0 0.9
+392.3 1.7
+393.3 3.5
+394.2 3.0
+395.4 0.7
+396.3 2.6
+398.3 1.1
+399.3 0.6
+400.3 1.3
+402.2 1.3
+404.4 0.9
+405.3 2.6
+407.4 17.2
+408.4 4.3
+409.2 0.4
+411.3 12.6
+412.3 1.4
+413.6 3.6
+414.3 10.8
+415.2 1.6
+416.5 2.2
+418.3 0.8
+419.3 0.5
+420.3 1.3
+421.1 1.9
+423.5 1.1
+425.3 1.4
+426.2 1.4
+427.2 0.2
+428.2 8.0
+429.2 0.3
+430.3 2.4
+431.3 1.7
+432.2 2.8
+434.4 1.2
+437.2 4.5
+438.0 1.2
+439.2 12.4
+440.3 3.3
+441.2 2.5
+442.6 1.4
+443.5 2.6
+444.2 1.6
+445.3 1.4
+447.3 2.1
+449.3 2.2
+450.2 1.8
+451.2 2.5
+452.2 2.7
+453.2 0.6
+455.2 2.6
+456.0 1.9
+457.3 0.7
+458.1 1.0
+461.1 1.5
+464.3 0.2
+465.4 3.6
+466.2 4.9
+467.3 0.8
+469.2 0.7
+470.8 7.8
+471.7 0.5
+472.7 4.5
+473.5 2.7
+475.2 4.8
+476.1 0.5
+478.2 2.8
+479.3 0.8
+480.2 4.2
+482.3 11.2
+483.5 0.5
+485.6 1.5
+486.5 4.3
+487.5 2.9
+488.3 3.5
+489.5 4.8
+493.4 1.9
+494.7 0.2
+496.2 17.3
+497.3 3.8
+499.5 10.1
+500.4 0.6
+501.4 5.1
+502.1 2.4
+503.0 0.8
+507.2 1.1
+508.2 1.0
+510.2 1.1
+511.3 0.6
+513.1 6.3
+514.6 3.6
+515.4 7.1
+516.3 6.8
+517.4 5.7
+518.2 2.1
+519.1 0.5
+520.4 146.6
+521.4 54.3
+522.5 9.2
+523.5 0.3
+524.4 0.5
+525.3 5.6
+526.1 0.5
+527.3 1.6
+528.6 3.3
+529.4 3.9
+530.4 0.8
+531.4 1.0
+532.2 0.6
+532.9 1.9
+534.0 0.7
+535.1 1.4
+536.3 3.4
+537.3 3.4
+538.3 1.5
+539.0 3.0
+540.4 5.0
+541.4 2.3
+542.2 3.6
+543.4 5.9
+544.1 2.4
+545.3 8.2
+546.4 3.5
+547.6 5.6
+548.4 4.7
+549.3 0.5
+550.2 3.0
+550.8 0.5
+551.4 2.2
+552.4 2.4
+553.2 1.6
+554.2 1.8
+556.1 7.0
+557.5 8.8
+558.5 10.0
+559.2 4.5
+560.5 3.0
+561.6 1.7
+564.8 3.0
+565.4 4.8
+566.1 4.2
+567.2 1.4
+568.3 3.8
+569.4 2.1
+570.5 1.7
+572.4 1.1
+573.2 5.4
+574.2 8.6
+575.1 0.8
+576.1 4.0
+577.2 0.8
+578.4 0.9
+579.5 2.9
+581.8 3.9
+583.1 8.1
+583.7 0.5
+584.4 0.9
+585.1 2.0
+586.3 18.3
+587.3 7.3
+588.5 1.3
+589.4 2.0
+590.8 2.1
+591.4 0.6
+592.4 6.3
+593.5 0.8
+594.2 1.3
+595.3 16.6
+596.4 6.7
+597.5 4.2
+598.4 2.6
+599.3 5.5
+600.3 1.3
+601.0 1.1
+602.4 5.1
+603.3 1.1
+604.4 8.7
+605.3 2.0
+606.2 1.6
+607.0 1.9
+608.5 0.6
+609.2 1.1
+610.4 0.6
+611.3 6.0
+612.3 4.1
+613.3 3.6
+614.6 5.6
+615.5 3.1
+616.5 3.5
+617.3 13.9
+619.1 3.2
+620.7 2.1
+621.5 1.6
+623.3 3.4
+625.1 2.2
+627.2 22.9
+627.8 0.9
+628.5 9.5
+629.6 6.4
+630.4 12.7
+631.7 2.8
+632.5 2.4
+634.4 55.1
+635.5 16.4
+636.9 3.4
+637.8 1.5
+638.8 9.3
+639.8 3.5
+640.4 1.2
+641.4 2.7
+642.7 5.7
+643.5 0.5
+644.2 3.1
+645.1 7.3
+645.7 0.6
+646.5 1.3
+648.4 1.9
+649.4 2.4
+650.6 9.1
+651.4 1.3
+653.5 3.3
+654.3 0.7
+655.3 5.0
+656.3 2.3
+657.4 5.3
+658.5 5.8
+659.6 3.3
+660.4 2.4
+661.5 1.7
+662.7 10.8
+663.5 0.7
+664.3 0.5
+665.1 1.6
+666.3 1.8
+668.4 1.4
+669.5 2.4
+670.3 2.2
+672.0 5.2
+673.3 3.2
+675.4 7.2
+676.2 2.1
+677.3 1.0
+678.2 14.7
+679.3 7.5
+680.0 1.0
+681.2 3.1
+682.0 6.4
+683.2 3.8
+684.4 10.0
+685.3 3.2
+686.7 3.3
+687.4 5.5
+688.5 5.9
+689.4 0.9
+690.2 3.4
+691.5 4.8
+692.7 2.0
+693.6 2.9
+695.0 7.4
+695.9 1.9
+697.4 2.1
+698.2 1.5
+699.1 6.2
+700.3 7.0
+701.6 4.9
+702.4 1.9
+704.7 1.1
+705.4 3.8
+706.5 6.4
+707.8 3.0
+708.6 3.5
+709.5 2.8
+710.3 9.3
+711.4 6.4
+712.4 3.9
+714.2 27.9
+715.0 5.7
+716.0 10.6
+717.0 11.5
+718.2 4.9
+719.1 0.4
+720.2 1.5
+721.1 0.3
+722.1 5.5
+723.0 3.3
+724.0 6.1
+725.4 5.2
+726.0 4.4
+726.7 1.8
+727.7 5.2
+728.4 15.2
+729.3 13.4
+730.2 4.9
+731.3 7.2
+732.4 194.9
+733.4 69.0
+734.4 10.2
+735.3 15.8
+736.2 7.3
+737.8 5.6
+741.3 13.1
+742.4 20.3
+743.6 17.8
+744.4 27.5
+745.4 20.3
+746.3 12.3
+747.3 10.5
+748.4 6.6
+749.2 3.3
+750.6 2.9
+751.3 2.6
+752.2 2.9
+753.5 2.4
+754.5 6.6
+756.6 2.2
+757.4 20.7
+758.1 3.9
+759.0 3.3
+759.8 5.9
+760.5 20.1
+761.6 18.6
+762.7 9.9
+764.0 5.4
+765.9 5.8
+767.3 3.4
+768.1 2.0
+769.0 17.5
+769.8 2.6
+771.0 9.0
+771.8 10.6
+772.6 3.0
+773.7 6.0
+774.9 4.9
+775.6 5.6
+777.0 6.4
+777.8 1.9
+779.5 8.3
+780.4 1.9
+781.2 4.0
+782.2 5.3
+783.0 4.2
+783.7 0.4
+784.4 5.5
+785.9 6.3
+786.6 9.5
+787.7 17.3
+789.1 2.8
+789.9 0.2
+791.6 19.1
+792.5 8.0
+793.5 4.9
+794.5 4.9
+795.5 4.7
+797.1 103.6
+798.1 55.5
+799.1 9.2
+799.9 1.9
+800.8 43.1
+801.6 8.1
+802.5 11.4
+803.4 6.1
+804.8 4.4
+805.5 2.0
+807.4 4.1
+808.1 10.1
+809.1 6.3
+809.9 5.0
+810.7 5.7
+811.6 14.8
+812.5 11.2
+813.5 1.3
+814.9 4.8
+815.7 6.4
+816.5 0.4
+817.5 5.1
+818.5 7.1
+819.4 4.2
+820.6 8.8
+821.3 10.5
+822.1 3.9
+823.5 1.9
+824.5 12.9
+825.1 1.0
+826.2 1.4
+827.5 11.2
+828.5 10.4
+829.7 11.7
+830.9 9.4
+832.2 9.0
+833.8 5.6
+834.5 5.1
+836.0 9.2
+836.9 6.4
+837.7 6.1
+839.6 7.6
+840.4 10.4
+841.6 1.5
+842.7 9.3
+843.4 6.4
+844.6 2.7
+845.4 6.6
+846.4 1.8
+847.6 4.2
+848.3 30.6
+849.3 11.4
+850.2 2.2
+851.4 3.1
+852.3 5.1
+853.4 45.0
+854.2 42.8
+855.1 11.8
+856.1 12.9
+856.9 42.7
+857.5 57.7
+858.4 11.8
+859.7 6.9
+860.5 11.6
+861.3 31.6
+862.6 12.1
+863.5 15.8
+864.4 0.7
+865.1 18.4
+866.1 4.6
+867.6 6.7
+869.0 8.1
+869.9 7.5
+870.5 30.5
+871.6 37.6
+872.5 8.5
+873.4 46.9
+874.5 33.0
+875.5 12.1
+876.5 15.0
+878.1 6.6
+878.9 3.5
+880.1 9.7
+880.9 7.9
+882.2 129.2
+883.1 26.8
+883.7 14.9
+884.3 4.8
+885.2 5.3
+886.4 4.8
+888.4 172.9
+889.6 84.1
+890.6 27.1
+891.6 4.5
+893.0 10.9
+894.2 3.4
+895.6 11.2
+896.3 16.9
+897.4 9.4
+898.4 2.6
+899.4 9.7
+900.2 7.1
+901.7 8.8
+902.7 13.0
+903.5 3.6
+904.8 3.0
+906.0 4.5
+907.4 7.8
+908.3 6.3
+909.5 4.7
+911.0 2.5
+912.5 8.3
+913.6 6.2
+914.6 6.2
+915.4 5.7
+916.3 2.2
+917.1 10.2
+917.9 19.1
+918.6 12.7
+919.5 4.9
+920.3 6.3
+921.7 56.0
+922.5 16.2
+923.5 18.7
+924.8 3.1
+925.5 2.3
+926.4 2.1
+927.7 31.1
+928.7 6.1
+929.4 13.9
+930.7 76.8
+931.6 67.2
+932.2 58.4
+933.1 8.7
+933.8 0.5
+934.5 2.0
+935.6 3.9
+936.7 16.2
+937.5 28.3
+938.7 6.0
+939.8 40.9
+940.5 11.0
+941.5 3.6
+942.3 2.6
+943.0 3.6
+944.5 5.4
+945.8 2.0
+947.3 9.6
+949.3 19.9
+950.5 47.6
+951.4 22.4
+952.3 1.6
+954.3 5.8
+955.3 8.9
+956.4 2.9
+957.7 23.2
+958.5 40.6
+959.2 31.4
+960.1 12.1
+961.4 7.0
+962.1 8.1
+963.4 20.5
+964.3 4.8
+965.1 2.9
+966.8 10.2
+968.2 27.3
+969.1 4.1
+970.0 2.8
+971.1 18.7
+972.4 14.3
+973.5 21.4
+974.4 18.9
+975.6 2.5
+976.6 12.6
+977.5 6.1
+979.4 5.9
+980.7 0.5
+981.7 16.7
+982.6 11.7
+983.8 24.2
+984.5 13.5
+985.5 73.9
+986.5 83.3
+987.4 22.7
+988.4 22.6
+989.5 9.9
+990.5 2.4
+991.4 13.8
+992.4 2.4
+993.9 29.7
+994.7 114.2
+995.5 66.8
+996.3 22.7
+997.8 1.2
+998.8 0.7
+1005.4 2.0
+1006.5 1.3
+1009.4 2.5
+1010.6 1.4
+1011.8 2.0
+1014.5 1.1
+1015.7 2.2
+1016.5 2.1
+1017.6 1.7
+1018.5 4.5
+1020.3 7.7
+1021.6 1.2
+1022.4 2.5
+1024.4 0.9
+1025.2 1.2
+1026.6 5.2
+1027.6 6.2
+1028.4 5.8
+1029.4 1.7
+1031.5 24.3
+1032.5 12.1
+1033.4 3.7
+1034.4 3.9
+1035.6 3.9
+1036.5 0.7
+1037.5 0.4
+1039.9 3.5
+1041.1 6.0
+1041.9 5.8
+1042.6 5.6
+1044.4 3.0
+1045.9 3.3
+1046.6 0.4
+1048.7 0.4
+1049.9 1.8
+1050.7 0.7
+1052.4 1.8
+1053.5 4.0
+1054.5 2.7
+1056.7 2.7
+1058.5 5.4
+1059.4 0.2
+1060.3 5.4
+1064.0 2.8
+1064.6 2.0
+1065.7 0.7
+1066.4 1.7
+1067.6 1.4
+1068.7 6.8
+1069.5 3.1
+1071.1 2.8
+1071.9 1.4
+1072.9 5.9
+1073.6 17.5
+1074.7 16.5
+1075.5 0.3
+1076.3 0.9
+1077.6 6.4
+1078.4 1.9
+1082.5 4.6
+1083.6 10.3
+1084.7 3.8
+1085.4 2.4
+1086.6 7.5
+1087.7 2.5
+1089.4 4.5
+1090.5 5.0
+1091.4 3.2
+1092.2 6.3
+1093.7 0.8
+1094.4 0.4
+1095.5 1.6
+1096.3 0.2
+1098.6 4.2
+1099.8 13.1
+1100.6 60.6
+1101.5 30.2
+1102.5 18.9
+1103.6 11.5
+1110.5 1.9
+1111.5 6.9
+1112.6 2.4
+1114.5 5.3
+1115.8 3.4
+1116.7 3.9
+1118.3 27.3
+1119.5 13.7
+1120.6 3.2
+1121.8 6.7
+1122.6 1.1
+1124.2 1.1
+1126.0 5.2
+1127.5 2.6
+1130.8 7.1
+1131.6 5.1
+1132.7 13.6
+1133.4 2.3
+1134.6 0.9
+1136.1 1.1
+1137.3 9.4
+1138.4 2.0
+1139.5 7.2
+1140.8 0.9
+1141.9 0.9
+1142.7 1.8
+1143.4 5.4
+1144.1 1.4
+1145.7 1.1
+1146.6 2.5
+1148.4 1.7
+1149.3 3.0
+1151.8 7.2
+1152.5 6.4
+1153.7 2.0
+1155.8 3.4
+1156.5 6.1
+1157.2 0.8
+1160.6 3.6
+1162.1 0.4
+1163.7 1.8
+1166.4 2.9
+1169.6 62.2
+1170.6 24.6
+1171.4 2.0
+1172.5 3.5
+1174.8 0.4
+1176.7 0.8
+1178.5 6.3
+1180.6 5.3
+1181.8 1.0
+1183.6 3.3
+1184.4 2.7
+1186.5 10.5
+1187.5 10.8
+1188.6 6.2
+1189.3 3.9
+1190.9 7.0
+1192.3 8.3
+1192.9 1.0
+1193.7 0.4
+1195.6 3.7
+1196.7 3.1
+1197.7 1.5
+1199.7 5.6
+1200.6 6.8
+1201.2 6.0
+1203.7 1.9
+1204.7 1.4
+1206.6 6.2
+1210.1 2.2
+1211.0 2.7
+1211.7 5.4
+1212.5 1.3
+1214.5 3.8
+1215.9 11.1
+1216.7 29.2
+1218.0 1.2
+1218.6 2.6
+1221.0 1.3
+1222.4 1.8
+1223.6 3.1
+1224.3 3.6
+1225.5 9.3
+1226.5 2.5
+1227.5 1.8
+1229.5 3.6
+1230.6 3.8
+1231.3 7.3
+1232.6 9.1
+1233.6 9.2
+1234.6 9.3
+1235.4 3.6
+1236.0 2.4
+1237.7 1.4
+1238.8 0.9
+1239.7 0.2
+1240.5 33.4
+1241.7 16.3
+1242.4 5.1
+1243.4 13.4
+1244.6 14.8
+1245.6 5.1
+1246.3 13.1
+1247.7 3.7
+1248.6 5.0
+1249.7 5.4
+1250.8 0.5
+1253.7 2.3
+1255.3 2.2
+1256.7 8.7
+1257.7 16.0
+1258.9 8.2
+1259.9 9.3
+1260.6 52.3
+1261.6 45.9
+1262.5 18.7
+1263.6 6.8
+1264.7 9.4
+1265.6 5.3
+1266.4 2.3
+1268.4 5.4
+1271.5 0.7
+1272.7 3.7
+1274.5 335.6
+1275.5 204.2
+1276.5 88.8
+1277.5 37.1
+1278.3 9.3
+1279.3 3.0
+1281.1 0.5
+1282.1 1.5
+1282.9 1.8
+1283.7 1.8
+1284.7 2.3
+1286.7 6.3
+1287.7 6.5
+1288.6 8.4
+1289.5 0.7
+1291.7 1.9
+1292.5 2.0
+1295.6 2.6
+1297.0 0.9
+1299.7 5.2
+1300.7 2.6
+1301.5 5.7
+1302.3 3.1
+1303.2 0.4
+1304.9 7.2
+1305.7 8.6
+1306.8 5.1
+1309.7 1.1
+1310.9 2.8
+1311.7 2.9
+1313.3 6.1
+1314.4 1.8
+1315.4 4.7
+1316.5 2.6
+1317.7 2.8
+1318.6 3.7
+1319.6 5.4
+1320.7 2.7
+1322.1 3.1
+1326.6 7.9
+1327.6 0.5
+1329.9 1.1
+1330.6 1.1
+1331.7 3.6
+1332.9 1.6
+1334.2 4.1
+1335.7 3.7
+1337.5 0.3
+1338.3 1.1
+1339.7 1.5
+1340.9 2.4
+1342.8 6.1
+1343.6 9.2
+1344.5 19.5
+1345.5 2.7
+1346.8 1.4
+1348.4 0.8
+1350.4 1.4
+1352.9 2.0
+1354.7 1.5
+1355.7 6.5
+1356.7 1.5
+1357.6 6.4
+1358.7 1.6
+1360.4 4.6
+1361.6 92.3
+1362.7 48.4
+1363.7 15.2
+1364.6 9.3
+1365.3 2.4
+1366.1 5.6
+1367.1 5.3
+1368.6 2.3
+1369.7 3.1
+1370.6 6.1
+1371.4 26.7
+1372.3 24.8
+1373.4 8.3
+1374.0 1.0
+1375.3 1.0
+1375.9 1.5
+1376.9 3.2
+1377.8 6.0
+1378.5 1.8
+1379.5 1.1
+1382.8 1.0
+1384.7 3.7
+1385.5 2.4
+1387.5 4.8
+1388.6 6.1
+1389.9 6.2
+1390.7 5.8
+1391.4 6.8
+1392.5 0.2
+1396.8 2.9
+1398.1 6.7
+1399.7 1.6
+1400.9 0.8
+1401.8 4.4
+1403.3 9.9
+1404.3 11.2
+1405.5 3.6
+1412.9 0.3
+1413.6 1.4
+1414.8 9.0
+1415.7 11.5
+1416.7 6.2
+1418.7 0.7
+1419.6 4.9
+1420.5 1.8
+1421.7 6.4
+1422.7 4.6
+1423.7 1.6
+1425.2 3.0
+1426.7 1.0
+1427.6 1.4
+1428.5 0.4
+1430.4 1.9
+1431.4 10.9
+1432.7 48.2
+1433.7 30.9
+1434.8 23.1
+1435.8 4.4
+1436.9 1.7
+1439.8 1.8
+1440.6 1.7
+1441.8 4.6
+1442.9 5.2
+1443.5 1.3
+1444.7 5.1
+1445.7 3.6
+1446.7 27.5
+1448.0 7.7
+1448.9 4.5
+1449.6 1.6
+1450.7 1.3
+1451.6 0.9
+1454.8 2.0
+1455.7 1.7
+1459.2 6.5
+1460.0 1.6
+1461.1 0.4
+1462.1 3.3
+1464.5 5.9
+1465.7 14.7
+1467.4 2.8
+1468.8 5.3
+1469.8 15.1
+1471.0 10.1
+1471.9 5.3
+1472.8 2.9
+1474.0 1.5
+1474.9 1.2
+1476.3 1.5
+1480.0 1.1
+1483.6 0.4
+1484.9 3.0
+1486.6 319.8
+1487.6 221.7
+1488.6 110.9
+1489.6 38.9
+1490.6 19.2
+1491.6 2.2
+1492.6 2.5
+1494.5 3.6
+1495.4 0.8
+1496.5 1.9
+1498.7 1.5
+1499.7 1.3
+1500.6 0.6
+1501.8 0.4
+1502.9 1.3
+1503.9 1.0
+1509.3 3.7
+1511.7 3.3
+1513.6 2.1
+1514.9 3.7
+1516.7 1.5
+1518.2 5.6
+1518.9 0.8
+1523.7 0.2
+1524.7 0.4
+1526.8 0.4
+1527.7 2.0
+1529.9 2.0
+1531.6 0.6
+1532.5 1.1
+1534.9 5.2
+1536.3 0.4
+1537.5 0.2
+1538.5 1.6
+1539.7 0.5
+1546.0 1.2
+1547.4 2.2
+1549.4 0.8
+1550.8 1.4
+1555.9 2.5
+1556.7 0.7
+1557.6 2.2
+1558.7 3.5
+1560.4 7.6
+1561.8 1.2
+1564.4 3.1
+1566.1 2.9
+1567.0 1.7
+1567.9 1.0
+1568.9 1.7
+1569.8 1.6
+1571.7 2.1
+1574.6 8.8
+1575.6 18.1
+1576.7 16.7
+1577.7 5.2
+1578.5 0.9
+1581.9 0.6
+1582.8 5.1
+1583.9 1.6
+1584.8 0.2
+1586.2 1.1
+1587.5 0.8
+1588.7 3.0
+1590.7 5.6
+1592.7 104.5
+1593.8 68.2
+1594.6 32.4
+1595.3 0.6
+1596.0 9.9
+1597.2 0.7
+1599.4 29.8
+1600.6 58.1
+1601.8 22.9
+1602.9 9.5
+1603.9 3.0
+1604.9 2.2
+1605.7 4.7
+1606.7 5.5
+1610.8 1.4
+1615.5 2.7
+1616.9 2.1
+1617.8 3.1
+1618.6 2.0
+1619.4 3.0
+1621.4 0.7
+1624.3 0.6
+1635.9 4.4
+1637.0 0.7
+1637.8 1.1
+1641.8 0.8
+1643.5 0.6
+1644.8 1.3
+1647.0 1.1
+1647.8 1.6
+1655.7 3.6
+1656.4 0.2
+1657.4 1.5
+1658.6 5.1
+1659.7 2.0
+1660.5 3.1
+1662.1 2.2
+1666.1 0.7
+1671.7 3.6
+1673.7 0.7
+1674.6 2.2
+1675.6 3.7
+1676.6 1.6
+1679.6 1.0
+1684.7 6.1
+1685.7 9.8
+1687.0 1.7
+1687.9 3.5
+1688.9 3.3
+1692.2 0.7
+1694.9 2.3
+1695.8 9.2
+1696.6 4.9
+1698.7 1.3
+1700.5 0.6
+1702.7 2.9
+1703.5 1.8
+1704.7 1.0
+1706.0 2.2
+1706.8 5.0
+1707.8 2.1
+1711.3 0.9
+1712.8 116.4
+1713.7 101.6
+1714.8 57.6
+1715.8 23.4
+1716.9 2.0
+1719.8 2.6
+1727.5 1.4
+1731.8 0.8
+1734.2 1.2
+1745.0 3.5
+1746.1 3.2
+1748.4 2.0
+1752.2 1.1
+1753.9 1.6
+1755.5 0.3
+1762.9 5.8
+1764.1 1.6
+1765.0 3.9
+1765.6 1.6
+1767.1 0.5
+1770.9 0.8
+1772.8 2.9
+1786.6 0.4
+1787.7 2.4
+1791.8 0.8
+1792.8 1.6
+1801.3 0.6
+1802.0 6.0
+1803.6 1.0
+1805.3 0.8
+1814.7 0.3
+1815.5 1.4
+1816.3 1.3
+1824.5 1.1
+1828.3 2.3
+1830.3 3.6
+1831.0 5.9
+1831.7 2.4
+1832.6 1.2
+1834.0 2.5
+1841.2 1.4
+1842.8 1.4
+1844.1 6.9
+1845.9 0.4
+1858.8 2.0
+1859.9 23.1
+1860.9 22.9
+1861.8 7.5
+1862.5 5.4
+1863.2 5.5
+1878.1 9.2
+1878.9 0.8
+1880.2 7.4
+1881.0 2.1
+1882.2 0.4
+S	62	62	745.86
+Z	2	1490.71
+210.1 7.9
+210.9 23.7
+215.2 3.7
+216.0 16.5
+217.0 23.1
+218.1 4.7
+225.4 7.8
+226.4 7.8
+228.6 23.3
+231.2 5.1
+234.0 92.1
+234.8 6.7
+235.5 3.8
+239.4 5.4
+241.0 4.5
+242.3 11.0
+243.3 13.3
+245.2 30.2
+246.2 27.1
+247.3 3.7
+248.4 1.8
+249.4 2.1
+252.2 10.5
+254.2 11.5
+256.3 12.4
+260.2 144.4
+262.1 169.7
+263.1 29.9
+264.3 17.4
+268.2 5.6
+270.2 7.9
+271.3 19.4
+272.3 6.2
+273.4 5.5
+274.1 12.1
+282.8 9.8
+284.3 4.7
+286.2 7.8
+286.8 12.4
+288.2 9.1
+292.2 15.7
+293.2 9.6
+294.4 5.7
+298.7 28.7
+299.9 14.3
+301.9 14.0
+303.0 1.7
+304.3 7.3
+313.1 17.1
+316.2 137.5
+317.3 479.4
+318.3 67.4
+320.1 17.8
+325.1 1.9
+330.2 7.6
+331.2 5.8
+332.0 1.8
+333.3 3.0
+340.0 33.0
+342.5 1.8
+343.2 15.2
+344.2 25.2
+346.5 22.5
+347.2 12.4
+352.4 2.7
+353.3 10.4
+354.5 7.5
+355.4 3.4
+357.2 118.6
+358.3 110.1
+365.0 2.8
+365.7 2.4
+367.2 19.3
+368.5 13.9
+371.1 25.7
+372.1 1.9
+373.1 12.6
+375.2 634.8
+376.5 53.4
+377.2 3.4
+380.3 10.8
+381.4 24.4
+384.1 16.5
+385.6 4.7
+386.5 36.1
+390.0 11.9
+391.2 18.2
+393.2 7.1
+393.8 17.5
+395.7 5.8
+396.5 15.7
+397.4 1.7
+400.2 18.9
+403.4 55.0
+404.2 39.3
+405.5 12.7
+412.5 9.7
+413.5 1.6
+414.3 18.4
+416.5 465.8
+417.4 76.5
+419.0 2.8
+421.2 48.3
+422.5 46.2
+423.4 1.8
+425.4 16.2
+429.3 2.7
+430.2 3.2
+432.3 2.8
+436.2 6.4
+437.5 1.9
+441.1 28.2
+443.9 4.0
+446.0 4.5
+448.4 7.0
+450.5 2.9
+451.8 2.6
+455.3 8.2
+458.1 3.2
+459.2 19.5
+460.4 4.1
+461.4 10.9
+462.6 8.9
+466.4 11.0
+467.5 11.8
+468.4 13.2
+469.5 10.5
+473.2 11.7
+474.3 61.7
+475.6 15.3
+476.4 35.6
+477.3 24.2
+482.3 2.1
+483.2 1.5
+484.4 6.9
+485.9 22.2
+487.3 58.6
+488.3 9.2
+489.6 18.8
+490.6 18.5
+498.4 15.9
+504.3 309.6
+505.4 126.9
+506.4 4.4
+508.2 24.6
+509.6 16.5
+510.5 15.1
+512.5 20.8
+514.1 18.4
+515.5 17.3
+516.4 3.1
+520.4 19.2
+521.3 4.9
+522.5 15.0
+523.3 10.5
+524.1 21.8
+524.7 17.2
+526.3 52.1
+527.2 15.2
+529.5 4.0
+530.6 2.4
+535.2 64.7
+538.5 7.5
+539.2 20.6
+540.4 33.4
+541.1 9.1
+544.4 513.5
+545.5 204.6
+546.5 34.8
+548.0 69.6
+549.4 14.3
+550.3 3.6
+553.7 23.0
+555.6 87.9
+557.2 97.8
+558.6 25.0
+560.0 12.2
+560.6 19.4
+561.7 7.1
+562.5 2.3
+565.5 19.8
+569.1 11.1
+570.2 42.3
+571.3 17.9
+572.5 5.0
+573.7 19.6
+574.5 2.1
+577.7 76.1
+578.4 17.7
+579.2 39.6
+583.4 25.8
+584.2 2.6
+585.0 57.2
+586.1 46.7
+587.5 57.6
+588.3 102.2
+589.1 33.2
+590.4 31.5
+591.5 5.6
+592.5 11.6
+595.1 23.9
+598.3 41.7
+599.4 36.4
+600.5 36.6
+601.4 10.8
+603.4 73.0
+604.3 23.0
+605.3 311.7
+606.3 251.8
+608.6 6.3
+609.9 20.4
+611.2 43.1
+613.5 42.6
+614.7 76.8
+615.4 60.3
+616.5 33.0
+617.4 23.8
+618.5 35.4
+619.4 5.6
+624.4 22.1
+625.3 5.0
+626.0 130.6
+626.6 8.5
+627.5 14.6
+628.6 20.4
+630.8 22.1
+631.5 2.1
+634.6 39.3
+635.4 27.9
+637.2 3.3
+639.6 13.1
+640.4 9.7
+641.4 17.1
+643.1 14.4
+644.6 90.8
+645.9 22.6
+646.6 16.5
+647.4 22.6
+649.2 7.8
+650.3 16.5
+652.9 19.7
+653.6 9.1
+654.3 33.2
+655.1 6.7
+657.5 741.6
+658.5 377.5
+659.5 46.5
+660.5 31.4
+662.8 41.2
+664.0 83.7
+664.8 125.3
+665.9 125.2
+668.3 27.6
+669.3 117.2
+670.5 196.5
+671.6 47.2
+673.9 77.2
+674.9 72.3
+676.8 29.4
+678.4 241.6
+679.8 55.2
+681.5 14.0
+682.7 19.3
+684.3 52.8
+686.3 710.6
+687.4 395.8
+688.1 66.6
+688.8 98.1
+689.9 39.5
+691.4 34.6
+693.3 59.8
+694.6 82.6
+695.6 42.3
+696.8 44.7
+697.6 18.6
+698.6 76.7
+699.7 70.0
+700.4 44.2
+701.7 65.9
+703.0 32.3
+704.3 721.5
+705.3 256.1
+706.3 60.3
+708.7 35.6
+710.0 136.9
+711.0 126.1
+711.8 2.9
+713.6 49.3
+714.7 90.6
+715.3 88.0
+716.2 48.9
+717.1 19.3
+718.9 148.9
+719.5 143.7
+720.5 19.3
+721.6 89.1
+722.5 159.8
+723.4 49.9
+724.8 263.4
+726.0 109.2
+727.6 300.6
+728.5 183.9
+729.5 82.8
+730.1 130.6
+730.9 29.4
+731.9 43.9
+733.1 109.1
+734.1 58.5
+735.7 201.1
+736.6 598.6
+737.6 38.2
+739.3 6.9
+740.0 13.2
+744.5 15.1
+752.8 11.4
+755.7 8.0
+757.5 14.8
+758.8 2.3
+760.3 60.2
+761.6 15.6
+762.6 35.3
+764.5 3.2
+766.6 45.0
+768.3 48.1
+769.7 46.1
+770.3 8.3
+771.5 53.5
+772.8 59.5
+773.8 24.4
+774.5 2.3
+775.5 17.3
+776.9 28.2
+778.0 7.5
+779.7 122.7
+780.5 7.7
+781.4 5.2
+782.4 42.0
+784.6 2.6
+786.5 1660.5
+787.6 596.8
+788.5 29.0
+789.4 7.0
+790.8 47.6
+791.5 10.6
+793.4 10.1
+795.5 20.5
+797.5 38.9
+798.2 88.6
+798.9 15.9
+800.0 23.7
+801.0 66.9
+803.0 30.1
+803.7 28.7
+804.7 14.1
+806.1 30.9
+807.3 232.7
+808.0 29.9
+808.8 14.6
+809.8 9.5
+810.5 84.0
+811.1 7.4
+812.7 88.9
+815.4 284.8
+816.3 270.3
+817.1 200.3
+817.9 72.9
+819.0 50.7
+820.3 6.2
+821.6 77.5
+823.2 24.7
+824.6 21.6
+825.6 19.9
+826.5 19.7
+827.5 14.9
+828.5 29.3
+829.1 23.5
+829.8 15.9
+830.6 53.0
+831.2 14.0
+833.3 488.9
+834.3 166.5
+835.3 22.0
+836.3 24.4
+837.1 69.2
+838.6 18.7
+840.6 25.4
+841.5 33.7
+843.3 83.0
+844.3 48.8
+846.5 57.5
+847.4 76.5
+848.3 70.3
+850.0 13.1
+850.7 6.1
+851.5 40.6
+852.2 11.6
+853.7 37.9
+854.5 53.4
+855.3 30.0
+858.0 4.1
+858.6 6.4
+860.3 33.7
+862.1 31.6
+864.4 17.0
+865.2 6.0
+866.7 18.7
+867.6 14.7
+868.7 69.6
+871.6 76.0
+872.5 98.8
+874.8 67.8
+875.7 23.4
+877.0 38.8
+878.0 48.3
+879.3 21.4
+881.8 18.2
+883.6 64.8
+885.5 446.4
+886.5 61.6
+887.5 12.0
+888.3 12.4
+889.7 22.4
+891.8 59.0
+892.7 18.1
+893.5 7.7
+894.4 28.8
+895.3 53.0
+895.9 54.9
+897.0 76.7
+897.8 10.5
+898.5 41.8
+899.4 28.3
+900.2 33.9
+901.3 20.2
+902.8 52.4
+907.1 41.5
+908.3 22.1
+909.4 38.7
+910.3 32.5
+911.5 43.7
+912.3 30.2
+913.2 116.0
+913.9 28.9
+914.6 6.7
+915.5 2.0
+916.2 37.3
+917.7 11.2
+918.7 19.6
+919.3 37.1
+921.8 34.3
+923.0 37.0
+923.9 64.3
+925.6 128.6
+926.5 113.2
+928.0 153.5
+928.7 42.2
+929.4 194.4
+930.4 95.6
+931.7 29.2
+932.4 51.2
+933.9 8.8
+936.3 33.5
+937.6 86.5
+938.6 11.3
+939.7 23.3
+941.4 70.5
+942.5 68.0
+943.3 25.6
+944.4 37.6
+945.2 8.1
+946.3 319.1
+947.4 219.5
+948.5 200.4
+949.2 4.2
+950.9 62.9
+952.6 27.1
+954.0 108.4
+956.7 8.5
+960.4 63.5
+961.4 35.8
+962.8 19.7
+964.2 37.7
+965.4 37.1
+966.5 89.8
+967.7 4.4
+968.4 31.6
+969.8 11.1
+970.7 25.1
+971.9 4.2
+975.4 56.1
+976.3 23.6
+978.8 3.9
+979.9 15.9
+980.6 6.8
+981.8 36.3
+982.9 43.4
+984.1 21.6
+986.6 908.9
+987.6 348.2
+988.7 46.9
+990.0 62.4
+991.6 33.4
+992.3 24.6
+993.4 23.4
+994.9 5.6
+995.8 22.8
+996.5 252.5
+997.4 39.5
+998.5 18.3
+999.9 41.4
+1001.4 25.9
+1002.2 14.8
+1003.4 49.3
+1004.0 35.0
+1005.4 41.3
+1008.7 5.3
+1010.5 9.5
+1011.6 20.5
+1013.9 19.3
+1015.3 65.1
+1016.7 2.2
+1017.5 3.7
+1018.5 16.3
+1019.5 6.8
+1020.7 44.3
+1023.4 29.7
+1024.5 10.8
+1025.9 19.1
+1026.7 4.5
+1030.8 8.6
+1032.6 18.9
+1034.0 14.2
+1035.4 32.3
+1036.4 8.0
+1038.5 48.1
+1040.4 18.2
+1041.2 12.9
+1042.7 20.6
+1043.7 8.6
+1044.9 103.2
+1045.7 39.7
+1046.5 6.3
+1048.2 19.9
+1048.9 11.9
+1049.8 11.1
+1050.5 3.0
+1054.9 23.5
+1056.2 48.5
+1056.8 43.5
+1057.8 100.5
+1058.8 100.9
+1059.9 22.8
+1060.6 26.2
+1061.2 15.7
+1062.5 34.3
+1063.5 11.0
+1065.7 20.5
+1067.7 389.4
+1068.5 376.5
+1069.7 146.6
+1070.9 39.4
+1071.7 17.7
+1072.7 16.1
+1074.4 455.1
+1075.5 204.1
+1077.1 54.0
+1078.4 12.7
+1080.3 19.6
+1082.1 2.4
+1083.7 21.0
+1084.7 4.9
+1088.7 4.0
+1095.5 20.7
+1096.4 17.5
+1097.2 49.1
+1098.3 98.8
+1099.2 1.5
+1102.9 4.3
+1104.6 5.8
+1110.9 2.2
+1113.5 26.9
+1114.6 63.4
+1115.7 709.5
+1116.6 598.4
+1117.8 60.3
+1121.0 4.3
+1122.8 33.7
+1125.4 17.7
+1126.3 6.1
+1128.3 18.9
+1131.1 6.0
+1132.8 16.6
+1137.1 31.8
+1141.7 38.3
+1145.6 21.0
+1146.5 24.5
+1147.7 22.6
+1152.4 2.9
+1154.6 116.4
+1155.6 328.0
+1156.6 289.5
+1157.5 24.1
+1158.3 9.1
+1159.0 3.3
+1161.1 27.2
+1163.6 7.4
+1164.4 7.3
+1165.7 4.1
+1170.8 3.6
+1173.5 875.8
+1174.5 608.8
+1175.6 57.9
+1180.7 26.3
+1181.7 15.1
+1182.7 23.5
+1183.5 3.7
+1189.9 16.4
+1195.6 13.0
+1196.8 6.7
+1200.1 7.5
+1202.7 10.3
+1205.8 2.0
+1209.6 12.9
+1210.7 34.0
+1211.7 64.8
+1213.0 92.6
+1213.8 63.1
+1214.7 74.2
+1224.3 5.6
+1225.6 20.3
+1227.0 52.5
+1228.7 626.5
+1229.8 499.5
+1230.7 454.5
+1231.6 377.1
+1232.6 14.1
+1233.8 10.6
+1234.7 18.0
+1241.6 10.3
+1243.1 34.7
+1248.8 4.5
+1253.6 22.6
+1254.4 23.8
+1255.3 54.6
+1256.0 1.2
+1264.9 15.7
+1267.4 12.8
+1268.2 21.0
+1278.5 6.0
+1293.5 3.9
+1295.2 29.3
+1297.6 25.7
+1299.5 12.2
+1306.6 17.7
+1308.6 6.8
+1309.8 3.8
+1314.0 21.9
+1315.4 94.0
+1316.5 10.9
+1323.7 39.6
+1325.1 83.0
+1325.8 91.6
+1326.6 154.2
+1327.8 24.4
+1333.8 16.1
+1336.7 4.3
+1341.6 51.4
+1343.6 702.4
+1344.6 493.4
+1345.7 37.6
+1359.7 6.9
+1383.8 12.6
+1415.6 5.4
+1434.5 12.3
+1449.7 5.0
+S	63	63	444.41
+I	ID	1
+I	RTime	.1052
+Z	2	887.81
+136.1 1.8
+141.2 1.7
+164.9 2.4
+184.1 2.5
+191.0 3.0
+193.5 2.2
+195.1 2.5
+199.9 1.2
+221.0 1.5
+222.1 2.0
+226.9 1.8
+229.1 2.4
+229.9 1.7
+239.2 2.7
+259.0 3.0
+260.1 2.2
+282.3 1.2
+287.9 1.3
+289.2 3.0
+290.1 3.7
+291.3 6.5
+302.0 1.8
+305.2 5.1
+307.9 0.8
+310.0 2.5
+312.1 1.3
+316.3 6.9
+317.2 8.6
+321.6 6.4
+322.3 10.1
+324.2 9.5
+324.9 3.5
+329.2 2.0
+336.9 2.9
+339.0 0.8
+342.4 4.5
+346.0 9.6
+351.6 1.7
+358.1 3.4
+362.8 1.2
+364.0 1.8
+367.8 0.8
+369.4 1.5
+370.4 3.4
+371.5 6.1
+372.3 1.2
+374.9 1.7
+382.0 8.3
+384.2 2.7
+388.0 3.0
+395.3 4.0
+396.6 6.8
+400.1 4.0
+401.2 3.9
+402.5 8.1
+408.2 8.6
+411.6 9.8
+414.3 9.0
+416.0 4.5
+422.9 3.0
+423.9 1.6
+426.0 29.6
+427.1 11.0
+428.2 18.2
+429.2 2.4
+432.3 5.1
+435.1 9.1
+435.7 12.6
+447.2 1.6
+454.4 1.8
+495.0 9.3
+508.3 6.9
+514.3 2.5
+537.3 7.5
+543.2 5.8
+544.5 6.9
+546.0 1.8
+568.4 4.5
+599.8 7.1
+608.5 1.8
+609.5 1.6
+630.9 2.7
+642.6 4.1
+643.6 1.8
+649.5 1.0
+660.4 2.2
+669.3 4.4
+683.4 1.7
+687.2 1.0
+696.6 2.7
+702.8 1.7
+713.4 4.9
+774.2 2.9
+775.5 1.2
+S	64	64	676.10
+I	ID	73
+I	RTime	3.3720
+Z	2	1351.19
+Z	3	2026.28
+281.3 4.5
+330.2 3.2
+338.9 2.4
+372.4 2.0
+389.7 3.2
+417.5 2.5
+436.8 1.3
+442.2 5.1
+442.9 2.9
+461.5 2.9
+469.2 3.0
+477.1 2.4
+479.6 3.5
+490.3 7.5
+499.4 3.2
+529.1 2.0
+533.4 2.0
+535.6 1.7
+541.1 5.0
+542.3 3.7
+543.2 4.1
+547.9 9.6
+552.1 2.7
+566.4 3.0
+567.2 17.5
+568.9 1.1
+578.3 1.1
+579.3 2.4
+582.6 16.8
+583.5 2.7
+585.5 3.0
+591.9 9.5
+601.3 1.6
+606.6 7.5
+612.2 3.9
+613.4 2.2
+623.1 2.7
+625.4 1.8
+626.7 21.2
+627.3 2.0
+634.9 0.8
+639.4 18.2
+640.8 9.8
+651.5 75.5
+652.2 10.8
+655.1 337.7
+655.8 20.0
+658.0 5.3
+659.3 7.1
+660.8 10.6
+662.4 28.7
+663.1 13.1
+666.8 4.3
+697.3 20.0
+702.5 4.9
+703.7 7.5
+714.5 2.5
+719.2 14.3
+731.8 3.0
+735.4 1.1
+758.7 3.7
+759.4 4.3
+763.6 6.3
+796.4 3.2
+797.6 5.5
+799.8 1.8
+810.3 1.5
+826.6 8.8
+838.4 2.2
+849.9 16.8
+850.6 16.2
+851.3 5.8
+883.1 3.9
+902.4 4.4
+917.9 4.9
+931.3 1.7
+950.5 1.7
+951.4 6.3
+1003.5 2.7
+1004.2 4.3
+1021.1 4.5
+1147.8 2.2
+S	65	65	452.85
+I	ID	167
+I	RTime	8.2247
+Z	2	904.69
+130.2 1.1
+175.1 4.6
+178.9 2.2
+182.9 1.5
+184.0 4.8
+185.0 1.7
+198.9 1.2
+211.3 1.6
+218.1 1.2
+228.2 2.2
+234.3 1.1
+235.2 1.0
+237.0 6.3
+239.1 3.2
+256.2 2.9
+256.9 2.7
+258.3 2.0
+268.3 2.7
+271.3 2.0
+272.2 4.1
+277.2 1.0
+282.0 6.4
+284.4 2.5
+290.2 1.6
+291.2 10.6
+292.2 9.6
+295.0 1.8
+299.4 2.4
+304.0 2.2
+306.2 1.6
+307.3 5.4
+308.0 2.5
+312.4 6.3
+317.5 4.6
+321.2 1.2
+324.2 7.0
+325.1 3.0
+326.4 2.5
+338.2 48.9
+339.0 2.2
+342.3 1.1
+345.5 19.0
+357.5 2.0
+359.9 9.6
+361.2 4.6
+370.3 3.5
+377.4 9.8
+379.0 2.2
+380.4 3.5
+385.3 4.4
+389.2 4.0
+395.0 8.0
+400.0 11.6
+401.5 2.9
+402.6 4.1
+403.9 8.5
+404.7 4.5
+409.5 6.1
+410.5 2.0
+412.3 2.7
+414.9 5.0
+417.0 12.6
+418.3 6.0
+421.1 3.2
+427.3 8.5
+432.3 1.5
+433.0 1.1
+434.1 1.6
+435.3 56.0
+436.0 5.3
+442.1 6.0
+443.8 49.2
+447.1 2.7
+489.4 3.2
+499.0 1.2
+518.3 9.6
+520.2 2.0
+521.6 1.0
+549.2 12.1
+550.0 9.8
+552.4 3.2
+557.4 1.1
+575.4 3.2
+579.3 1.6
+588.5 2.9
+605.4 5.6
+646.4 3.2
+647.3 2.5
+660.6 2.5
+663.7 4.4
+672.3 1.2
+673.4 2.2
+678.3 66.4
+679.5 12.8
+702.6 1.2
+713.3 1.2
+717.5 1.8
+731.4 1.8
+757.4 3.2
+758.4 2.5
+759.7 4.0
+771.0 1.3
+775.1 2.0
+776.4 1.5
+777.4 2.4
+S	66	66	427.38
+I	ID	161
+I	RTime	7.9059
+Z	2	853.75
+127.1 4.0
+129.0 20.3
+136.1 5.0
+141.0 2.4
+142.3 1.2
+155.1 16.2
+155.9 2.2
+157.4 1.0
+159.2 2.2
+172.2 6.4
+175.1 5.6
+185.2 1.6
+189.0 3.0
+202.9 4.1
+211.1 1.7
+221.3 1.7
+223.3 2.0
+239.0 1.2
+246.2 6.5
+253.2 6.5
+254.1 3.4
+257.0 4.1
+260.2 4.0
+268.6 22.5
+269.3 52.0
+272.1 11.5
+275.2 2.5
+285.4 2.0
+287.1 12.1
+292.9 1.1
+294.7 3.2
+297.2 2.7
+299.3 4.9
+303.3 7.0
+312.2 4.0
+314.2 1.2
+315.2 1.8
+323.2 7.6
+325.2 10.1
+329.0 2.2
+331.1 1.8
+348.0 10.5
+349.8 79.4
+350.8 16.7
+361.1 8.3
+362.9 145.8
+364.1 2.9
+366.2 3.4
+368.1 9.6
+371.0 4.5
+377.2 1.7
+378.1 3.7
+383.4 3.2
+384.5 1.8
+386.3 2.0
+392.6 8.3
+393.7 10.8
+394.4 3.7
+395.7 3.7
+396.6 2.7
+398.2 4.1
+402.7 6.0
+404.2 1.2
+409.2 16.0
+410.4 13.8
+411.3 12.6
+418.1 48.0
+418.8 9.8
+419.5 4.5
+490.4 2.9
+497.4 1.2
+504.1 2.5
+508.4 1.0
+520.6 4.4
+528.5 13.3
+529.7 3.0
+534.7 2.7
+538.5 1.7
+554.3 7.8
+567.5 4.3
+581.4 4.0
+582.4 2.5
+583.3 3.2
+585.3 13.8
+586.8 3.0
+600.1 5.5
+611.6 3.5
+628.4 2.2
+654.6 5.0
+680.5 2.0
+682.5 4.0
+698.3 131.1
+699.3 28.7
+700.3 4.5
+706.3 2.5
+707.5 2.0
+722.5 5.5
+724.6 6.9
+S	67	67	692.15
+Z	2	1383.29
+199.7 224.5
+202.2 35.9
+204.3 26.4
+209.4 68.0
+210.1 98.2
+217.2 259.8
+218.4 118.0
+223.2 66.6
+225.1 139.2
+226.2 809.5
+227.2 172.4
+228.1 267.8
+229.1 134.6
+232.2 60.0
+235.3 783.1
+237.3 113.8
+239.1 239.2
+242.2 548.3
+243.3 63.1
+244.3 669.2
+245.4 360.2
+246.3 597.6
+249.2 289.3
+251.2 159.9
+254.4 93.2
+257.1 107.4
+258.3 299.4
+259.4 108.1
+260.2 293.5
+261.2 721.7
+262.2 1866.7
+263.1 1418.7
+264.3 73.4
+267.2 228.1
+270.0 30.1
+272.1 78.3
+273.4 73.3
+274.2 47.0
+275.2 139.2
+276.4 165.8
+277.1 161.3
+279.3 151.3
+280.3 74.7
+283.3 63.3
+284.1 158.8
+285.1 76.2
+287.3 121.5
+288.2 99.2
+289.2 71.0
+291.1 129.7
+292.3 41.5
+297.3 640.7
+301.3 183.0
+304.1 113.1
+305.1 27.4
+308.1 286.4
+309.4 227.7
+311.3 52.1
+314.2 155.1
+315.2 308.6
+316.0 55.2
+317.4 184.8
+318.1 49.4
+320.2 147.3
+321.2 175.8
+324.2 211.2
+325.3 399.9
+326.5 36.5
+327.2 61.0
+328.1 274.2
+330.1 82.0
+332.1 540.4
+333.4 266.4
+335.3 276.6
+336.3 360.7
+337.2 153.4
+341.2 201.4
+343.3 184.0
+344.1 128.6
+346.0 441.8
+347.3 94.0
+351.3 34.2
+353.2 184.4
+354.5 428.0
+355.5 30.3
+358.5 30.1
+359.4 39.1
+360.2 369.5
+361.2 448.6
+362.3 323.4
+364.3 279.4
+366.4 39.4
+371.1 1495.6
+372.2 842.7
+373.2 1151.2
+374.3 445.5
+375.3 133.6
+380.4 204.8
+381.3 393.4
+385.1 51.2
+387.4 349.8
+388.4 379.6
+389.4 801.8
+390.4 2918.9
+391.2 578.5
+392.2 1317.5
+393.1 163.2
+396.0 106.3
+396.6 42.8
+398.3 90.2
+401.2 80.0
+402.3 196.7
+403.4 74.8
+404.4 271.9
+405.3 367.0
+407.5 95.3
+408.4 49.1
+409.4 60.7
+412.5 162.7
+413.5 139.4
+416.7 274.1
+417.5 18.0
+418.5 26.4
+419.4 203.3
+421.2 86.9
+422.4 174.0
+423.1 79.5
+424.1 132.7
+426.3 43.5
+427.2 345.7
+428.1 56.9
+429.1 45.8
+430.4 140.7
+431.3 210.2
+432.5 160.7
+433.6 257.9
+436.2 225.4
+437.2 90.6
+438.2 57.9
+439.4 191.9
+441.1 54.8
+442.5 265.1
+443.3 390.5
+444.4 831.6
+446.1 564.8
+447.8 133.4
+448.6 61.8
+449.3 71.2
+451.3 270.3
+453.4 352.1
+454.3 55.4
+458.8 80.9
+459.4 444.4
+461.3 12324.5
+462.3 2167.0
+463.1 104.2
+465.2 209.9
+467.1 39.2
+469.3 243.6
+470.4 72.8
+471.3 3292.9
+473.3 527.1
+474.3 150.0
+477.6 205.0
+479.1 283.4
+480.1 63.8
+482.5 196.6
+484.8 53.6
+486.2 86.2
+487.4 762.9
+488.9 121.8
+491.2 158.6
+495.1 48.5
+497.7 428.6
+498.7 181.7
+500.2 648.8
+501.0 280.9
+502.3 61.6
+503.4 33.5
+505.0 1430.3
+507.4 54.7
+508.3 334.3
+509.7 1210.6
+510.5 43.4
+511.4 225.8
+513.6 118.4
+515.5 46.4
+516.4 42.3
+518.2 1794.5
+519.1 2381.3
+520.3 680.3
+521.5 508.2
+524.5 48.2
+526.3 103.4
+528.4 135.7
+529.4 262.2
+530.6 656.4
+531.3 369.3
+532.1 191.6
+533.3 288.4
+533.9 114.0
+535.6 311.2
+536.4 1223.8
+537.6 133.0
+540.2 32.8
+541.0 295.4
+542.1 53.1
+544.2 773.4
+544.8 55.1
+546.3 438.2
+548.4 581.7
+549.6 408.3
+550.6 75.1
+551.5 173.2
+552.4 771.8
+554.4 116.9
+556.3 863.3
+557.3 585.8
+558.6 118.0
+559.5 81.0
+560.4 198.0
+561.3 141.4
+562.2 202.0
+563.1 185.9
+564.4 160.6
+565.5 685.1
+566.4 77.5
+570.6 2014.1
+571.9 273.9
+573.5 379.5
+574.3 5010.6
+575.4 1142.8
+576.2 313.3
+577.2 76.6
+578.4 501.9
+579.4 28.2
+581.2 111.9
+582.2 288.6
+583.4 802.6
+584.4 446.6
+585.4 187.0
+586.2 301.8
+588.1 670.3
+589.3 246.1
+590.5 68.9
+591.4 158.5
+594.6 321.4
+595.5 457.3
+597.1 5525.2
+598.2 240.4
+599.1 455.2
+599.9 1509.8
+600.5 507.1
+602.5 445.2
+603.4 109.9
+604.1 98.7
+606.0 4974.8
+606.8 2203.1
+609.4 236.5
+610.1 211.7
+612.3 335.2
+613.2 72.0
+614.6 125.1
+615.2 178.1
+616.6 95.3
+617.7 437.5
+619.2 831.4
+620.1 899.4
+621.4 1213.6
+622.7 229.2
+625.0 302.3
+625.7 47.9
+626.4 55.1
+627.4 476.6
+628.2 271.0
+630.6 109.7
+631.7 163.3
+633.6 1348.4
+634.4 2323.3
+635.1 341.2
+635.9 30.2
+637.5 306.7
+638.5 82.5
+639.3 84.1
+641.1 552.5
+642.1 669.7
+643.5 85.8
+644.4 361.5
+645.5 1912.4
+646.4 453.9
+647.3 238.4
+648.0 385.7
+648.8 604.9
+649.5 304.1
+651.2 2551.4
+652.2 400.8
+654.4 175.7
+655.5 38.7
+656.5 277.2
+659.5 710.1
+660.3 41.4
+661.0 1550.5
+662.0 372.7
+663.6 88.4
+664.4 55.0
+665.2 546.9
+666.1 210.7
+667.5 373.4
+669.4 3034.8
+670.1 1130.3
+671.2 123.7
+672.8 1389.4
+674.2 4042.7
+675.3 3307.6
+676.3 368.3
+677.0 101.3
+679.8 461.5
+680.7 494.6
+681.5 2705.4
+683.1 20692.0
+684.3 6537.1
+685.0 27.2
+685.7 259.1
+696.3 50.0
+699.4 487.0
+700.4 82.0
+702.4 186.3
+703.4 149.2
+704.5 85.9
+705.9 50.8
+706.5 185.7
+707.2 39.1
+707.8 33.1
+709.4 36.1
+710.5 134.5
+713.2 34.2
+714.6 57.6
+715.7 163.8
+716.7 98.0
+719.0 123.7
+720.5 711.9
+722.3 100.9
+726.8 321.0
+729.5 40.2
+731.8 798.2
+732.4 3403.9
+733.4 1839.3
+734.6 192.9
+735.5 118.3
+736.5 52.5
+738.4 737.6
+739.6 457.7
+741.4 57.9
+742.5 217.4
+745.2 367.8
+746.6 149.7
+747.3 35.7
+750.4 3876.2
+751.6 93.3
+752.5 353.5
+753.7 135.7
+755.4 51.2
+756.5 128.0
+757.7 46.2
+760.2 104.9
+761.5 158.3
+762.3 104.7
+763.4 1025.4
+764.3 262.0
+767.3 247.4
+773.3 1094.8
+774.2 388.4
+776.4 227.8
+777.0 55.5
+778.0 54.0
+778.7 33.5
+779.4 68.2
+780.1 292.9
+781.1 88.4
+782.7 45.5
+785.3 231.8
+786.4 131.2
+788.2 426.6
+789.3 34.7
+790.8 820.8
+791.4 1579.2
+792.5 582.1
+793.4 128.1
+796.5 144.7
+798.4 519.4
+799.7 257.5
+800.9 313.5
+801.5 199.3
+802.4 42.1
+804.0 199.4
+804.7 136.2
+806.4 39.7
+808.7 403.3
+809.5 1311.0
+810.3 329.4
+812.3 2742.4
+813.0 161.7
+815.1 108.0
+816.5 1799.8
+821.5 741.0
+822.6 90.8
+825.8 88.0
+826.4 43.4
+829.5 114.3
+830.5 180.0
+832.7 113.3
+833.6 75.7
+834.4 93.6
+836.5 80.8
+837.5 42.2
+838.3 45.1
+839.4 287.2
+840.7 60.8
+843.7 61.4
+844.7 69.0
+846.4 380.4
+847.5 4953.2
+848.4 1809.1
+849.4 281.9
+851.3 252.3
+852.7 393.6
+853.6 341.4
+854.5 307.9
+855.6 127.7
+856.6 26.9
+857.5 213.3
+858.7 27.7
+860.5 291.0
+861.5 592.9
+862.5 235.7
+864.5 845.7
+865.3 287.6
+868.2 62.3
+869.6 97.6
+870.5 258.4
+874.6 155.0
+876.5 240.2
+877.3 136.6
+878.8 500.6
+879.5 3701.0
+880.4 551.0
+881.6 138.5
+884.8 110.5
+886.2 872.8
+887.4 546.3
+888.1 47.7
+889.7 407.2
+891.3 407.6
+893.0 48.9
+897.4 1492.2
+899.2 1406.4
+899.9 2117.0
+901.4 520.2
+902.4 166.0
+904.3 4350.3
+905.3 1884.4
+906.5 27.0
+908.1 290.0
+911.6 196.9
+913.5 73.1
+915.5 4522.4
+916.9 626.0
+918.3 51.6
+920.5 142.4
+922.3 6228.7
+923.5 2256.6
+924.4 299.0
+928.7 333.6
+929.6 256.7
+931.5 679.8
+932.1 416.6
+936.1 304.7
+937.6 382.9
+938.5 319.2
+939.6 667.9
+940.7 133.9
+941.5 181.3
+946.5 24.5
+948.5 286.0
+949.4 180.0
+950.3 54.8
+953.0 48.8
+954.5 70.9
+957.3 285.5
+958.6 210.0
+959.6 286.8
+962.3 104.6
+963.4 225.7
+964.5 168.4
+966.9 161.6
+972.4 78.6
+973.5 180.2
+974.4 317.6
+975.4 1374.1
+976.5 901.6
+977.6 427.2
+978.4 144.9
+979.4 237.6
+984.3 40.3
+989.4 122.2
+992.5 1956.2
+993.5 2146.5
+994.6 8446.5
+995.5 4281.3
+996.6 1858.1
+997.2 86.1
+1003.6 123.5
+1004.7 57.8
+1005.7 36.1
+1007.1 77.2
+1009.6 70.3
+1010.4 132.8
+1011.5 255.9
+1012.5 271.1
+1013.6 162.9
+1027.5 52.2
+1028.8 213.0
+1029.5 89.6
+1030.8 338.5
+1031.4 353.9
+1033.3 98.1
+1035.2 145.9
+1036.7 811.1
+1037.7 572.9
+1038.9 43.0
+1039.6 66.7
+1045.5 105.8
+1046.3 248.3
+1047.3 115.5
+1050.2 415.2
+1051.7 1177.9
+1052.5 299.2
+1055.8 66.4
+1057.4 165.5
+1060.6 614.7
+1061.5 224.3
+1063.2 115.9
+1065.6 154.4
+1067.7 98.1
+1068.7 713.8
+1069.7 1045.6
+1075.7 236.6
+1076.6 215.9
+1080.9 45.4
+1082.6 187.7
+1085.6 258.3
+1086.8 122.1
+1090.5 364.9
+1092.2 455.7
+1093.6 171.0
+1095.6 162.0
+1096.4 114.3
+1102.5 84.8
+1103.5 793.0
+1104.6 224.5
+1105.6 183.5
+1106.5 45.9
+1108.5 576.2
+1109.6 183.3
+1110.7 82.6
+1111.8 49.8
+1114.5 160.7
+1115.3 54.7
+1117.4 152.5
+1118.3 446.9
+1119.2 307.9
+1120.5 97.4
+1121.5 3998.3
+1122.5 2362.3
+1123.5 987.5
+1124.6 1516.6
+1125.8 95.3
+1133.0 114.2
+1133.8 65.3
+1134.5 36.4
+1135.2 43.8
+1136.7 42.0
+1138.0 44.9
+1140.1 276.0
+1140.7 687.4
+1142.9 436.8
+1143.6 155.0
+1147.6 47.0
+1148.3 319.2
+1160.1 29.5
+1161.7 48.6
+1162.7 98.2
+1163.9 116.2
+1164.8 111.8
+1166.4 56.5
+1167.6 101.0
+1176.2 197.2
+1178.5 219.2
+1180.0 173.9
+1181.1 203.4
+1181.9 99.1
+1183.7 52.0
+1185.8 126.3
+1189.5 46.2
+1194.3 227.7
+1195.0 35.8
+1198.2 438.9
+1199.2 292.4
+1205.1 108.6
+1205.7 175.8
+1206.5 24.0
+1210.6 5474.3
+1211.5 2813.5
+1212.4 410.6
+1213.8 142.6
+1214.8 143.4
+1218.7 336.4
+1219.8 213.5
+1220.5 168.1
+1221.8 399.5
+1233.7 104.2
+1234.7 535.2
+1235.6 145.5
+1236.7 595.3
+1237.6 838.9
+1238.6 103.9
+1239.7 857.9
+1252.7 349.6
+1254.7 42.3
+1262.5 72.2
+1264.9 46.4
+1269.8 102.6
+1278.5 29.6
+1346.8 61.3
+S	68	68	468.80
+I	ID	93
+I	RTime	4.3822
+Z	2	936.59
+Z	3	1404.38
+136.3 1.6
+147.1 14.1
+148.3 2.9
+150.1 1.2
+151.2 1.1
+155.0 5.9
+156.2 1.1
+160.8 2.5
+167.2 1.2
+172.2 1.8
+175.2 7.3
+177.9 1.2
+179.1 4.4
+180.2 4.0
+191.2 2.5
+199.2 2.2
+206.3 3.5
+208.1 1.6
+209.1 9.8
+212.3 1.2
+213.8 2.7
+226.2 76.9
+227.1 10.8
+231.2 1.7
+235.3 1.6
+237.4 2.0
+240.3 6.0
+244.2 219.8
+245.2 23.2
+248.4 6.4
+250.9 3.5
+252.2 2.5
+254.3 4.9
+263.1 2.4
+264.4 0.8
+265.3 3.9
+266.2 16.2
+268.3 2.0
+269.4 1.1
+273.6 6.1
+276.0 2.0
+278.5 4.0
+279.3 4.3
+280.1 2.9
+281.2 2.4
+282.7 18.6
+285.4 1.3
+287.3 1.5
+290.1 5.0
+291.9 2.7
+294.3 11.8
+295.2 2.7
+296.9 2.5
+298.3 10.1
+299.2 7.1
+303.0 2.5
+305.2 1.1
+308.3 9.8
+310.0 1.5
+311.3 5.4
+312.4 5.1
+313.3 29.2
+315.8 6.5
+317.1 2.5
+318.9 3.5
+322.2 26.7
+323.2 38.5
+324.1 4.0
+325.4 9.1
+326.4 1.3
+327.2 4.5
+327.9 1.2
+329.6 3.4
+333.2 5.0
+333.9 4.6
+335.2 1.2
+337.0 1.2
+338.5 16.8
+340.2 80.0
+341.2 152.6
+347.5 112.3
+349.1 1.8
+351.3 1.2
+352.0 1.6
+353.3 24.6
+354.4 9.6
+355.2 7.3
+356.5 25.7
+362.1 1.3
+363.2 0.8
+363.9 5.9
+368.1 10.8
+369.2 1.1
+370.2 1.2
+372.9 5.1
+374.6 1.2
+377.3 2.4
+377.9 1.1
+381.2 2.9
+387.0 25.0
+388.0 11.8
+389.4 1.7
+390.4 8.5
+391.9 12.5
+392.5 3.0
+393.1 1.7
+394.3 8.8
+395.9 101.1
+396.6 1.2
+397.3 1.3
+400.5 17.7
+401.2 23.6
+402.4 5.0
+404.8 461.2
+405.4 119.5
+408.2 14.3
+409.2 13.3
+410.4 1.7
+415.6 10.3
+419.5 29.2
+420.4 4.6
+421.1 2.0
+422.3 15.5
+423.0 13.1
+424.0 4.5
+425.4 53.2
+426.5 3.5
+428.8 1.7
+430.6 40.0
+432.6 5.6
+433.3 14.1
+434.4 21.7
+435.0 1.6
+436.3 33.5
+437.5 6.4
+439.4 76.9
+440.5 4.1
+441.1 3.2
+445.3 7.9
+450.2 102.4
+451.3 207.1
+452.3 25.2
+453.1 4.5
+453.9 5.1
+460.0 2237.5
+461.1 9.1
+462.0 6.9
+464.8 3.9
+469.8 0.6
+494.2 2.5
+520.5 1.3
+527.5 2.2
+540.0 2.0
+545.7 4.3
+551.2 1.1
+555.5 1.2
+557.2 2.2
+566.7 1.2
+580.4 3.2
+594.4 2.2
+598.4 16.2
+616.4 2.4
+631.2 1.2
+634.4 11.8
+635.5 1.3
+650.4 2.9
+661.6 2.4
+665.2 7.0
+666.4 5.8
+670.6 3.7
+675.5 8.1
+681.4 1.7
+693.4 679.2
+694.5 211.3
+708.6 2.2
+710.6 1.5
+726.2 2.7
+727.7 2.5
+735.2 3.0
+781.0 2.5
+790.5 8.1
+802.4 6.5
+808.6 33.5
+809.5 5.4
+819.4 30.5
+820.4 8.1
+837.6 46.2
+838.7 32.9
+915.6 1.7
+S	69	69	652.48
+Z	2	1303.95
+187.9 0.9
+194.1 1.5
+201.2 2.7
+207.1 1.1
+214.2 1.6
+215.2 1.3
+217.0 1.0
+218.1 1.7
+228.9 3.4
+231.2 3.9
+233.9 2.6
+234.9 2.6
+242.0 6.5
+243.1 1.1
+244.3 2.4
+246.2 2.8
+249.1 0.8
+257.8 1.1
+259.0 1.0
+260.0 4.8
+262.0 2.1
+268.1 1.0
+270.2 4.2
+271.2 0.8
+272.0 1.4
+273.2 2.2
+275.1 6.2
+276.2 2.0
+277.2 4.0
+280.0 3.0
+280.8 1.4
+281.9 1.4
+285.3 2.2
+286.4 1.5
+287.1 1.0
+288.4 1.9
+290.3 0.9
+292.2 2.6
+292.9 2.6
+296.0 1.4
+297.0 2.0
+298.2 1.7
+307.2 0.8
+310.2 1.4
+311.1 0.9
+317.4 3.6
+319.1 1.3
+320.1 1.2
+321.1 1.4
+323.3 2.4
+326.2 2.4
+327.1 2.4
+328.9 2.5
+331.2 0.6
+332.6 0.6
+333.2 4.1
+334.2 0.7
+339.1 4.0
+339.9 2.9
+341.1 1.9
+342.2 5.0
+343.1 1.6
+344.1 1.0
+345.4 2.9
+346.2 10.6
+347.3 2.6
+352.2 1.3
+354.2 1.0
+357.2 5.5
+358.1 19.5
+359.3 2.4
+361.3 2.9
+363.0 1.2
+365.1 1.5
+366.6 1.7
+370.2 3.7
+371.2 3.5
+373.1 4.9
+375.7 3.5
+376.4 1.5
+382.5 10.6
+383.3 5.8
+384.2 4.1
+386.3 0.7
+387.5 5.2
+390.1 2.6
+392.0 6.8
+393.1 1.5
+394.0 2.6
+395.0 2.6
+396.2 2.1
+399.2 5.8
+401.3 1.4
+402.6 0.7
+404.3 1.3
+405.0 1.2
+407.4 1.2
+408.2 2.0
+409.5 7.4
+410.7 1.7
+413.1 3.9
+414.2 2.0
+415.3 1.1
+418.6 1.1
+420.8 1.0
+422.2 5.0
+423.2 1.0
+424.2 4.0
+425.2 2.1
+426.1 3.6
+429.1 4.2
+430.4 3.8
+432.2 2.2
+434.0 3.9
+435.0 1.3
+436.1 1.8
+438.1 1.0
+439.3 6.4
+440.1 2.2
+441.3 0.9
+442.2 1.1
+443.1 8.5
+445.3 13.6
+446.3 6.3
+447.1 0.8
+449.1 4.2
+451.5 6.4
+452.2 7.7
+453.0 2.0
+454.4 4.6
+455.2 1.9
+456.7 5.0
+458.3 2.1
+460.2 2.0
+461.0 0.5
+463.6 4.6
+465.0 0.6
+466.3 2.2
+467.4 3.4
+468.2 1.8
+469.4 5.3
+470.3 28.3
+471.2 56.3
+472.1 1.1
+473.1 2.8
+474.1 3.2
+477.0 1.2
+478.0 3.0
+480.1 0.6
+481.0 2.1
+481.6 1.2
+482.3 5.8
+483.2 3.2
+484.5 5.3
+485.5 2.3
+486.2 3.9
+488.5 3.2
+489.2 1.3
+490.6 3.0
+491.7 1.0
+492.3 4.1
+493.0 2.9
+495.0 1.6
+495.9 4.0
+498.0 1.0
+499.5 1.9
+500.2 4.3
+502.5 3.8
+503.2 3.1
+504.1 4.9
+504.9 1.0
+505.5 6.5
+506.3 3.7
+507.3 2.8
+507.9 1.2
+509.2 3.4
+510.4 1.8
+511.0 0.7
+512.0 4.8
+512.9 0.7
+514.1 4.1
+515.4 3.7
+516.3 3.5
+518.4 1.8
+519.5 8.9
+520.2 13.0
+521.3 4.8
+522.2 3.6
+523.3 6.6
+524.1 3.0
+525.1 5.3
+525.8 2.4
+526.9 2.2
+528.0 2.8
+529.2 3.8
+530.0 1.6
+530.8 1.2
+533.0 2.0
+534.2 2.7
+535.1 8.2
+537.5 21.9
+538.4 10.6
+539.1 5.4
+539.9 1.1
+541.3 6.0
+542.1 3.2
+543.4 4.9
+544.4 10.1
+545.4 13.6
+546.2 2.6
+548.8 4.6
+549.5 3.7
+550.9 6.8
+552.2 11.0
+553.2 2.5
+554.2 5.8
+555.1 2.1
+556.3 7.7
+557.2 2.7
+557.9 2.7
+559.4 9.1
+560.3 14.6
+561.1 3.4
+562.4 3.9
+563.1 3.8
+565.3 11.7
+566.1 2.3
+567.5 7.0
+568.4 8.4
+569.3 3.4
+570.1 3.1
+571.3 7.6
+572.1 18.9
+573.1 13.7
+573.9 5.5
+575.3 3.3
+576.6 4.7
+578.0 2.9
+579.1 4.5
+580.6 6.3
+581.3 3.8
+582.3 3.6
+583.5 2.0
+584.3 1.6
+585.3 1.8
+586.2 5.0
+587.0 4.4
+587.7 1.5
+588.3 2.6
+589.1 6.9
+590.2 5.9
+591.1 5.2
+592.0 7.2
+592.8 3.9
+593.9 8.5
+595.0 11.8
+595.9 1.8
+597.0 7.0
+598.2 11.3
+599.2 9.5
+600.2 8.4
+601.4 5.8
+602.3 9.9
+603.6 4.0
+604.4 1.8
+605.5 4.9
+606.4 7.1
+607.2 17.1
+608.4 9.0
+609.5 9.5
+610.7 4.8
+611.6 4.9
+612.3 3.3
+612.9 1.9
+614.4 9.8
+615.3 14.9
+616.3 31.9
+617.2 77.5
+618.1 21.1
+619.3 15.0
+620.3 4.5
+621.3 1.9
+622.9 4.6
+623.7 9.4
+625.0 12.3
+626.1 2.4
+627.3 1.3
+628.7 18.6
+629.6 14.5
+630.5 20.6
+631.6 2.9
+633.1 74.0
+634.2 94.1
+635.2 32.0
+636.1 10.3
+637.5 5.0
+639.1 2.2
+640.1 9.8
+642.4 201.7
+643.4 55.8
+644.4 6.4
+645.8 1.2
+653.9 1.0
+657.3 1.6
+658.2 0.9
+660.3 0.8
+663.3 0.9
+663.9 0.8
+665.2 1.1
+667.2 2.4
+669.3 4.0
+670.3 4.3
+671.7 1.2
+674.4 1.6
+676.4 1.8
+678.3 1.6
+679.3 2.2
+682.3 2.3
+683.8 2.1
+685.1 22.4
+686.1 8.5
+687.5 2.7
+688.3 2.2
+694.2 2.2
+695.3 5.1
+696.1 1.1
+699.1 1.9
+700.4 3.9
+701.5 2.4
+702.3 2.4
+705.7 0.8
+707.3 5.8
+708.8 0.7
+712.6 8.4
+713.4 5.2
+714.2 1.0
+715.2 1.0
+716.2 1.8
+717.3 1.2
+717.9 1.1
+719.3 2.5
+720.9 0.9
+723.3 1.5
+724.1 1.0
+725.4 1.2
+726.3 5.6
+727.2 4.3
+728.4 3.6
+729.7 12.4
+730.3 26.1
+731.4 7.7
+732.1 1.7
+733.3 1.2
+736.5 0.8
+737.4 1.6
+738.2 2.0
+740.1 1.5
+742.1 15.8
+743.3 6.8
+744.2 1.4
+745.6 3.8
+746.2 1.2
+747.0 3.3
+748.2 0.8
+755.5 0.8
+757.2 1.2
+758.1 4.1
+759.0 1.5
+760.0 1.5
+761.7 1.5
+766.4 1.3
+767.9 2.3
+769.2 2.6
+770.3 1.8
+771.2 2.7
+772.1 1.7
+774.9 2.3
+777.1 1.5
+778.7 3.7
+779.4 2.0
+781.2 0.8
+782.5 2.0
+783.2 3.7
+784.1 2.2
+786.6 2.9
+787.7 3.6
+789.4 1.0
+793.1 1.0
+795.3 1.3
+796.5 2.0
+799.1 4.2
+800.3 5.9
+803.6 3.9
+804.9 3.0
+806.9 3.6
+808.0 0.9
+809.3 0.6
+811.1 1.2
+812.4 2.4
+814.4 0.8
+817.5 0.8
+818.2 3.7
+820.7 1.3
+823.2 2.6
+825.5 1.8
+826.1 2.1
+827.0 24.3
+829.9 2.2
+832.4 1.8
+834.6 0.8
+837.7 1.1
+839.2 4.4
+840.8 2.0
+841.6 1.0
+842.3 4.5
+844.4 2.0
+845.7 1.0
+847.0 2.3
+849.6 2.0
+851.3 1.0
+852.6 1.1
+854.1 3.1
+855.0 1.3
+857.3 12.1
+858.1 2.4
+859.2 9.3
+860.2 7.6
+861.0 1.2
+863.6 3.5
+864.9 0.6
+868.9 1.9
+870.1 2.9
+871.4 3.8
+875.0 1.0
+876.2 2.8
+880.2 3.8
+881.3 2.5
+883.2 1.6
+886.3 0.9
+887.3 1.6
+888.5 0.8
+890.2 1.8
+891.2 6.9
+894.5 0.8
+895.5 0.9
+896.4 1.6
+897.4 0.8
+898.3 1.1
+899.2 1.1
+899.8 2.6
+901.2 4.0
+902.2 0.8
+903.2 4.5
+904.1 1.8
+910.1 2.2
+911.3 23.9
+912.2 8.3
+913.0 1.2
+914.3 2.5
+915.3 4.2
+917.4 3.2
+918.4 2.0
+919.5 4.7
+924.2 0.8
+925.0 2.6
+926.0 6.7
+926.7 2.9
+927.5 3.3
+928.3 8.3
+929.2 1.3
+930.2 1.3
+932.1 2.4
+933.4 0.9
+935.2 1.1
+937.3 1.5
+939.2 3.5
+940.5 2.2
+942.2 1.4
+944.4 3.4
+945.8 1.1
+952.2 2.1
+954.0 5.4
+956.0 18.1
+957.2 11.0
+960.0 2.1
+961.3 2.8
+963.4 1.9
+967.2 1.2
+968.2 1.5
+970.5 1.3
+972.3 2.2
+973.2 1.6
+974.3 23.8
+975.0 5.7
+975.6 5.5
+978.1 0.9
+980.7 1.3
+982.1 7.3
+984.3 1.3
+985.2 0.7
+987.0 1.0
+988.2 0.6
+991.7 0.7
+1002.3 2.9
+1003.4 1.3
+1004.5 0.9
+1007.4 2.0
+1010.4 3.2
+1012.6 1.7
+1013.4 1.6
+1014.2 1.1
+1016.8 1.3
+1020.4 3.9
+1021.3 1.3
+1023.9 1.9
+1026.4 8.5
+1027.2 9.4
+1028.2 6.7
+1029.3 1.9
+1030.1 0.9
+1032.4 4.1
+1034.3 1.2
+1039.9 1.0
+1042.1 4.8
+1044.1 2.6
+1045.2 3.5
+1046.2 0.5
+1050.5 1.0
+1051.5 1.3
+1052.7 2.5
+1053.5 0.9
+1054.1 2.7
+1056.2 2.7
+1057.4 1.9
+1058.4 1.7
+1060.5 0.8
+1067.3 1.6
+1068.9 0.8
+1070.1 2.4
+1071.2 2.8
+1072.5 11.6
+1073.4 9.9
+1074.3 9.0
+1075.3 2.7
+1078.4 0.9
+1084.3 1.3
+1085.1 2.6
+1086.4 0.8
+1089.4 2.6
+1090.3 1.5
+1092.3 0.8
+1109.5 0.6
+1110.4 1.3
+1111.2 1.2
+1117.4 1.0
+1127.4 0.8
+1128.0 1.3
+1129.2 1.6
+1131.9 1.9
+1134.2 0.7
+1137.3 1.0
+1138.0 3.3
+1139.2 2.9
+1141.8 2.6
+1144.4 1.1
+1155.2 20.9
+1156.2 19.9
+1157.2 11.7
+1158.3 4.5
+1163.4 1.2
+1173.1 1.4
+1174.7 1.3
+1175.3 2.8
+1181.3 1.2
+1190.4 1.1
+1230.3 1.7
+1243.1 0.9
+1301.2 0.7
+S	70	70	691.95
+Z	2	1382.89
+196.3 7.0
+197.2 70.1
+199.1 29.3
+200.6 12.1
+201.3 6.7
+202.3 10.7
+213.2 7.9
+215.1 6.1
+217.1 46.5
+221.1 8.4
+224.3 23.5
+226.5 99.2
+227.4 28.7
+228.2 25.0
+230.3 36.9
+231.2 71.0
+242.1 58.0
+243.0 12.5
+244.4 161.6
+245.2 15.7
+247.1 52.8
+249.3 13.1
+255.2 18.5
+257.0 41.5
+258.5 33.8
+260.2 35.9
+262.1 477.0
+263.2 116.3
+264.1 57.4
+266.3 49.7
+267.1 18.2
+268.4 8.2
+269.0 20.2
+270.1 14.3
+271.2 49.7
+271.9 9.5
+274.3 59.2
+275.1 40.9
+277.2 26.7
+280.3 30.7
+282.6 29.7
+288.3 21.9
+289.4 24.1
+295.2 76.1
+296.7 20.1
+298.1 34.2
+299.4 11.9
+301.5 38.7
+302.4 63.9
+303.4 90.8
+306.3 18.9
+308.2 50.2
+310.3 34.8
+312.2 14.8
+313.3 29.4
+315.5 55.4
+316.3 14.9
+317.3 28.7
+318.2 38.1
+319.1 12.1
+320.2 91.5
+321.4 12.1
+322.1 47.6
+325.1 8.3
+329.3 161.0
+330.4 70.0
+333.4 35.6
+335.3 110.3
+336.5 23.0
+339.5 44.4
+340.2 23.8
+343.1 16.3
+344.1 7.8
+346.4 84.7
+353.0 76.5
+354.5 25.2
+355.5 10.1
+357.3 58.5
+359.5 26.5
+362.4 5.9
+363.6 23.3
+364.5 49.8
+366.3 12.8
+367.6 12.6
+371.2 270.5
+371.8 11.9
+372.4 282.5
+373.4 183.1
+374.3 37.9
+375.5 15.1
+376.5 5.9
+378.2 9.9
+381.3 23.1
+383.2 61.7
+385.1 33.8
+388.1 42.4
+389.3 252.1
+390.3 715.1
+391.3 71.3
+392.4 14.2
+393.4 16.4
+395.5 23.3
+396.5 42.0
+398.2 11.1
+399.0 6.7
+400.5 6.7
+401.3 30.2
+402.2 41.6
+403.4 210.4
+404.4 88.1
+405.2 28.6
+406.5 17.4
+408.4 48.8
+411.3 42.9
+412.3 35.5
+414.3 14.5
+415.0 27.4
+417.4 25.6
+422.6 7.6
+424.3 7.6
+425.3 59.4
+426.4 38.2
+429.3 48.9
+430.7 120.3
+431.5 33.1
+432.4 24.9
+433.2 125.8
+435.7 11.1
+437.6 27.2
+438.3 81.5
+439.3 23.8
+441.4 14.9
+443.5 101.6
+444.3 66.2
+445.2 9.2
+446.5 23.5
+447.5 19.6
+449.3 33.6
+450.7 28.6
+452.9 22.3
+454.6 82.9
+455.2 6.1
+456.4 90.2
+457.2 46.8
+458.5 12.3
+459.3 11.9
+460.0 19.5
+461.3 2786.5
+462.4 405.5
+463.6 103.3
+464.2 34.7
+467.4 14.8
+468.3 6.9
+470.4 18.8
+471.4 59.9
+472.5 29.3
+473.2 32.3
+474.4 31.8
+475.1 20.4
+476.5 85.5
+477.4 23.5
+478.3 50.3
+478.9 119.3
+479.5 43.3
+480.2 39.8
+482.6 76.6
+483.3 19.6
+485.5 19.3
+486.8 23.7
+487.4 34.4
+489.6 32.9
+490.7 42.3
+491.3 30.3
+494.0 57.8
+495.3 38.2
+497.5 49.0
+499.1 17.8
+500.0 99.8
+501.3 116.7
+502.2 39.9
+503.5 9.6
+504.7 16.6
+507.5 13.3
+508.6 89.0
+510.6 118.1
+512.0 34.7
+513.4 18.0
+514.2 13.3
+515.5 24.7
+516.3 11.2
+517.3 101.7
+518.3 417.1
+519.4 133.7
+520.2 32.1
+520.8 30.1
+522.8 78.7
+524.3 28.1
+525.5 23.9
+526.6 7.5
+527.7 52.0
+529.4 12.3
+530.6 294.3
+531.3 325.8
+533.6 26.8
+534.8 52.3
+536.4 204.5
+537.1 24.1
+538.3 13.7
+539.6 37.5
+540.7 36.2
+542.2 108.7
+544.3 106.5
+545.7 45.5
+546.4 21.8
+547.2 54.1
+548.2 139.4
+550.6 51.5
+556.4 31.0
+558.4 35.9
+559.3 182.0
+560.1 42.5
+563.2 148.1
+564.0 85.2
+565.4 9.4
+566.2 99.2
+567.1 21.1
+569.0 54.7
+570.8 124.5
+573.6 133.0
+574.4 908.8
+575.4 436.7
+576.4 79.1
+577.2 33.8
+578.1 124.9
+581.7 81.5
+582.4 73.7
+583.2 74.7
+584.4 34.0
+586.5 89.8
+587.3 76.6
+589.0 206.1
+591.3 173.3
+592.1 122.7
+593.1 402.0
+594.3 19.8
+596.7 634.7
+597.6 958.4
+599.2 329.1
+600.2 14.9
+601.3 35.4
+602.2 28.7
+603.8 54.1
+605.1 29.3
+606.1 1841.7
+607.0 104.1
+607.6 16.3
+608.6 46.8
+610.5 182.1
+611.6 297.8
+612.6 32.1
+615.3 176.8
+617.2 22.0
+619.2 342.3
+620.3 502.0
+621.4 32.8
+622.1 34.9
+624.1 91.7
+624.8 203.4
+626.8 105.1
+627.7 20.4
+628.4 62.9
+629.8 33.8
+632.8 453.9
+633.7 220.8
+634.4 255.6
+635.7 162.4
+636.6 55.9
+638.1 97.8
+638.9 29.1
+639.8 47.1
+640.6 72.0
+641.7 230.3
+642.4 58.6
+643.7 41.7
+644.5 113.1
+645.4 437.2
+646.4 236.8
+648.0 55.2
+649.2 105.1
+651.3 498.7
+652.3 72.0
+652.9 43.9
+653.9 29.9
+654.5 87.8
+655.2 73.5
+656.3 109.5
+657.4 100.7
+658.5 73.0
+659.4 93.7
+660.7 195.0
+661.6 41.3
+663.3 47.6
+664.8 188.4
+665.9 215.2
+666.6 13.2
+667.5 52.6
+668.3 181.6
+669.3 38.8
+670.3 125.0
+672.0 256.4
+672.8 424.8
+673.8 953.9
+674.5 762.7
+675.4 216.6
+676.4 349.0
+677.8 194.1
+679.2 56.4
+680.2 44.1
+681.7 1565.9
+683.1 4067.1
+684.3 324.7
+685.9 9.9
+686.9 43.1
+695.1 31.5
+697.3 27.7
+698.2 9.8
+700.5 51.0
+702.3 240.1
+703.4 22.7
+705.4 83.4
+707.2 48.5
+708.3 12.8
+710.6 28.5
+711.5 26.9
+715.9 34.3
+717.0 29.9
+718.1 27.8
+719.3 37.1
+720.7 83.4
+721.4 10.5
+723.7 35.8
+728.3 10.7
+732.4 828.5
+733.3 214.3
+734.3 90.4
+735.0 23.0
+737.4 47.2
+738.3 146.5
+739.4 65.3
+740.5 49.8
+742.5 13.5
+744.8 93.4
+745.6 7.7
+746.7 34.5
+748.5 220.4
+750.3 232.7
+751.5 103.2
+752.5 116.6
+755.2 21.4
+756.4 18.7
+758.6 22.2
+759.4 10.7
+760.9 50.3
+762.6 77.0
+764.4 12.6
+770.7 60.2
+772.8 68.2
+773.5 232.1
+774.5 244.8
+778.4 238.9
+779.0 81.8
+779.6 23.9
+780.6 18.4
+783.3 14.3
+785.7 43.1
+788.0 46.9
+789.3 60.8
+790.6 118.8
+791.4 448.6
+792.5 72.3
+793.4 112.7
+794.5 26.4
+796.8 116.0
+797.9 94.7
+799.3 47.2
+800.5 52.3
+803.5 54.5
+804.5 45.0
+807.1 56.1
+807.7 23.5
+809.5 554.7
+810.5 111.3
+813.6 9.9
+815.4 38.6
+817.6 32.8
+818.9 17.1
+819.6 38.8
+820.8 79.8
+821.5 170.1
+822.2 66.3
+823.7 57.0
+825.2 33.8
+829.6 81.0
+830.5 8.6
+832.0 58.6
+833.5 83.2
+836.1 66.6
+840.5 29.8
+842.2 12.6
+843.5 22.2
+847.4 1383.5
+848.6 741.7
+849.7 44.4
+850.6 40.9
+851.5 56.1
+852.3 87.1
+853.4 24.8
+854.7 76.1
+856.3 11.7
+861.6 77.2
+862.7 24.1
+864.8 74.6
+865.6 17.5
+866.2 30.1
+867.5 43.4
+871.8 24.1
+872.4 15.1
+873.4 22.1
+874.5 105.2
+877.5 57.7
+878.7 10.7
+883.5 22.3
+886.5 170.7
+887.5 70.6
+888.5 44.0
+889.8 52.2
+890.4 18.7
+893.0 10.1
+893.7 43.5
+894.6 72.8
+895.6 43.7
+896.4 18.6
+900.4 21.6
+904.4 722.6
+905.4 351.6
+906.7 59.1
+907.7 59.8
+910.6 63.4
+912.3 10.7
+914.1 27.0
+915.7 18.7
+920.4 19.0
+921.1 110.9
+922.3 892.3
+923.4 476.8
+924.2 99.9
+925.5 356.1
+926.8 126.9
+927.7 103.7
+930.5 84.8
+931.9 67.1
+933.6 155.4
+934.8 34.0
+936.0 74.6
+938.1 59.6
+939.6 63.3
+940.7 65.9
+941.5 20.7
+942.9 85.7
+945.1 40.8
+945.8 8.3
+946.9 56.6
+947.6 40.9
+948.6 47.7
+949.5 59.3
+950.6 189.3
+954.3 33.5
+956.3 39.1
+957.3 48.8
+958.2 18.1
+958.8 18.0
+960.4 32.7
+961.5 55.2
+962.4 8.3
+964.6 85.2
+965.6 78.3
+966.5 32.0
+967.9 11.5
+970.4 64.5
+972.1 25.3
+975.6 287.7
+976.6 433.0
+977.9 34.8
+978.6 134.5
+985.6 50.7
+988.1 10.7
+990.3 19.0
+993.4 424.2
+994.5 1726.0
+995.5 853.9
+996.6 563.2
+997.6 252.7
+998.8 74.1
+1003.9 37.4
+1006.7 27.1
+1007.7 23.7
+1008.6 48.4
+1009.7 45.3
+1012.5 56.5
+1019.0 30.1
+1021.9 56.2
+1023.6 31.5
+1024.6 13.1
+1027.9 38.9
+1029.5 6.8
+1031.5 21.0
+1033.5 23.7
+1034.5 14.3
+1042.6 14.9
+1043.5 22.4
+1045.0 123.3
+1045.7 116.1
+1049.5 52.4
+1050.7 53.4
+1051.7 198.6
+1052.5 120.4
+1060.3 247.1
+1061.6 73.6
+1062.5 36.6
+1063.6 9.1
+1066.2 25.2
+1068.6 70.8
+1070.9 26.9
+1071.7 16.5
+1072.6 53.4
+1078.7 69.0
+1079.6 11.8
+1080.8 20.5
+1082.8 87.7
+1084.8 22.2
+1086.4 47.1
+1091.8 12.2
+1093.3 20.7
+1095.4 40.7
+1096.5 7.6
+1100.8 21.1
+1101.7 15.1
+1103.6 160.5
+1104.5 312.3
+1105.4 8.1
+1106.6 18.0
+1108.6 55.0
+1109.7 9.9
+1115.7 33.7
+1121.5 674.8
+1122.6 230.0
+1123.6 577.8
+1124.6 347.7
+1125.5 32.0
+1131.6 48.5
+1132.3 29.5
+1134.8 19.7
+1137.1 22.8
+1138.4 24.7
+1142.2 6.0
+1148.7 8.4
+1151.8 14.1
+1152.6 65.0
+1157.5 14.0
+1160.7 16.8
+1162.5 17.2
+1165.2 30.7
+1165.8 11.0
+1167.8 15.6
+1172.5 27.1
+1177.0 31.6
+1178.3 138.2
+1179.6 66.7
+1181.2 11.9
+1193.0 135.8
+1193.7 36.2
+1195.0 21.3
+1197.6 51.3
+1198.3 16.0
+1200.6 36.8
+1205.1 6.9
+1206.6 39.7
+1210.7 961.5
+1211.6 487.6
+1212.5 130.7
+1213.8 59.7
+1215.6 19.8
+1217.1 80.0
+1218.7 146.3
+1219.6 33.6
+1225.3 17.6
+1233.7 48.9
+1234.9 151.4
+1235.9 68.6
+1236.9 235.5
+1237.7 9.6
+1251.8 12.6
+1252.9 71.9
+1280.7 38.1
+1307.5 24.8
+1332.7 18.7
+1376.9 35.9
+1383.0 27.6
+S	71	71	488.76
+I	ID	75
+I	RTime	3.4794
+Z	2	976.51
+143.0 1.5
+147.2 2.0
+151.2 1.3
+156.2 1.0
+157.3 1.6
+158.1 1.2
+161.2 2.0
+163.1 2.5
+166.9 1.7
+171.1 13.0
+175.2 10.3
+176.2 5.0
+180.0 0.8
+181.4 1.7
+183.0 1.6
+184.8 4.1
+189.2 5.5
+192.1 4.3
+198.1 4.9
+198.9 5.8
+201.2 2.5
+207.3 4.0
+211.1 1.8
+213.4 1.6
+216.1 36.4
+217.2 14.3
+223.7 3.7
+228.4 1.5
+239.3 2.0
+240.3 2.2
+245.2 3.4
+247.3 1.5
+252.3 3.9
+253.2 4.6
+254.3 5.3
+255.1 1.0
+258.7 4.9
+265.1 3.0
+267.2 2.9
+268.6 4.5
+269.3 15.0
+270.2 1.5
+271.3 1.8
+272.3 4.9
+275.3 1.2
+277.2 1.5
+278.1 1.1
+280.2 2.2
+283.0 6.1
+286.1 1.0
+287.3 14.6
+288.4 2.7
+300.3 1.2
+301.6 1.2
+303.3 9.0
+310.0 2.2
+311.2 4.5
+312.0 1.2
+313.3 0.6
+314.3 4.3
+317.4 1.3
+319.2 1.8
+320.3 3.2
+325.1 5.8
+326.1 3.4
+326.9 1.0
+328.2 2.5
+329.1 6.1
+330.9 5.9
+333.2 3.0
+335.3 0.8
+337.2 2.0
+341.2 5.5
+342.3 1.6
+343.6 7.8
+345.4 12.3
+348.0 7.0
+352.4 2.2
+357.8 8.1
+358.9 9.0
+361.0 25.2
+362.1 1.3
+363.9 5.0
+369.1 2.5
+370.4 2.2
+371.5 1.2
+373.5 5.4
+375.4 8.8
+376.0 2.4
+381.1 10.3
+382.5 0.8
+384.3 3.5
+386.2 3.0
+391.1 2.5
+392.1 1.5
+395.5 10.3
+396.7 3.4
+397.6 10.5
+398.2 5.9
+399.3 11.3
+400.2 29.5
+401.1 71.0
+401.9 7.5
+402.8 10.0
+403.5 2.7
+404.3 13.3
+405.3 8.3
+406.5 0.8
+407.4 9.1
+408.5 23.5
+412.4 4.1
+413.6 14.5
+415.3 4.5
+416.3 22.5
+418.0 40.5
+419.1 9.5
+420.7 9.1
+422.1 13.3
+422.8 6.3
+424.6 7.0
+425.2 4.9
+427.5 3.0
+428.2 6.0
+429.1 19.6
+430.6 31.2
+431.9 19.8
+432.8 3.2
+435.0 9.3
+435.8 6.8
+436.4 30.6
+437.4 6.8
+439.9 5.0
+441.3 4.9
+442.2 20.2
+443.4 4.0
+444.4 4.9
+445.7 17.3
+446.5 8.8
+448.3 5.0
+449.5 11.3
+450.7 13.6
+452.0 5.3
+453.6 6.5
+454.4 7.0
+455.4 14.8
+456.5 5.6
+457.2 3.0
+458.7 10.6
+459.6 13.8
+462.1 16.7
+462.9 3.7
+464.0 7.0
+465.3 13.6
+466.2 9.1
+467.3 1.7
+469.2 2.2
+470.6 57.9
+471.3 53.7
+472.2 53.5
+473.0 13.0
+473.7 3.7
+475.0 5.4
+477.2 14.0
+479.1 122.6
+479.9 145.3
+480.7 0.8
+485.9 2.4
+487.8 5.9
+497.4 1.3
+498.5 3.7
+502.7 3.7
+506.8 5.3
+508.3 10.3
+513.2 1.5
+516.2 3.0
+517.1 1.7
+519.8 1.2
+523.3 1.3
+529.3 2.5
+530.1 11.3
+531.7 2.5
+537.4 3.0
+541.2 3.0
+542.4 3.7
+543.3 2.2
+544.9 2.7
+547.3 25.1
+548.1 7.9
+553.6 4.5
+554.2 3.0
+555.1 9.8
+555.7 6.3
+557.1 32.9
+558.3 3.4
+559.2 17.1
+561.3 31.7
+562.5 9.6
+565.7 7.0
+571.2 13.0
+571.9 18.2
+573.3 7.3
+574.2 1.6
+577.1 3.0
+578.5 5.9
+588.4 1.3
+589.9 9.3
+594.0 5.5
+596.3 3.7
+598.5 2.7
+599.7 7.6
+600.9 1.5
+603.4 1.5
+607.4 3.0
+608.8 12.0
+611.8 3.5
+614.9 13.1
+616.3 6.9
+619.8 12.3
+620.8 1.3
+624.7 7.1
+630.2 11.3
+632.5 17.0
+634.0 3.0
+639.9 5.0
+646.4 4.9
+649.3 3.2
+650.4 5.6
+651.5 3.5
+652.5 14.8
+654.5 5.4
+656.4 11.1
+658.3 3.0
+660.1 6.8
+664.7 2.0
+669.5 2.0
+673.1 6.5
+674.3 8.6
+676.5 1.3
+677.2 3.5
+681.3 4.0
+684.5 4.1
+685.2 1.1
+690.4 110.5
+691.5 27.0
+692.3 2.0
+699.1 2.7
+700.5 5.4
+701.2 6.8
+705.3 5.6
+709.4 1.7
+713.4 2.0
+719.2 0.6
+730.4 5.0
+731.2 1.5
+732.3 4.5
+733.6 0.8
+735.3 2.5
+741.4 1.2
+743.5 4.3
+744.5 4.6
+747.4 2.4
+748.2 5.0
+761.3 281.2
+762.4 123.0
+774.6 2.5
+775.7 1.3
+784.1 5.5
+785.3 1.8
+787.5 2.7
+788.4 3.7
+800.7 5.5
+802.4 4.8
+820.4 1.3
+830.6 3.9
+831.4 1.5
+844.4 4.3
+847.3 3.9
+848.4 9.5
+859.5 2.0
+900.3 1.1
+901.5 7.5
+915.3 2.0
+S	72	72	651.63
+Z	2	1302.25
+183.1 9.4
+185.2 68.4
+186.1 6.5
+187.2 16.6
+191.3 4.6
+194.0 11.9
+195.1 26.4
+197.3 26.5
+198.2 22.6
+199.4 10.0
+200.1 38.0
+201.4 32.9
+202.3 17.6
+203.5 4.8
+205.2 12.1
+205.9 8.6
+208.1 23.0
+209.6 19.8
+211.3 3.9
+212.2 30.3
+213.1 224.2
+214.4 64.0
+215.3 87.0
+215.9 10.9
+217.3 26.4
+218.1 19.1
+219.2 39.5
+223.5 32.6
+225.4 27.7
+226.3 61.1
+227.3 84.1
+229.1 189.9
+230.2 29.4
+231.3 45.0
+235.4 55.9
+236.3 19.5
+237.6 51.7
+239.2 62.4
+240.4 53.5
+241.3 16.5
+242.3 22.5
+243.3 20.0
+244.4 13.6
+245.2 16.1
+246.3 22.1
+248.5 8.3
+251.3 27.7
+252.2 20.6
+253.2 21.5
+254.3 27.5
+256.3 35.3
+257.4 98.1
+258.3 108.5
+259.2 11.1
+260.3 57.2
+261.4 33.8
+262.2 12.6
+265.0 30.7
+265.7 6.3
+266.4 65.2
+267.4 6.5
+269.3 34.4
+270.3 25.1
+271.1 5.4
+272.4 49.6
+273.4 31.8
+274.4 46.6
+275.3 105.8
+278.4 16.0
+279.3 22.4
+281.3 13.7
+282.2 32.0
+283.2 16.0
+284.4 13.7
+285.2 11.5
+286.0 15.2
+289.0 12.3
+290.1 17.6
+292.2 15.0
+294.4 21.9
+295.8 49.7
+296.5 7.4
+297.3 11.7
+298.8 42.0
+299.5 12.8
+302.5 17.9
+303.4 95.3
+304.3 66.0
+305.1 15.3
+308.4 14.1
+309.6 9.9
+310.5 23.5
+312.2 5.1
+313.0 8.0
+314.2 40.5
+315.3 6.9
+319.3 9.7
+320.2 13.1
+321.2 23.2
+322.4 31.8
+323.4 32.8
+325.2 18.9
+326.3 69.8
+327.2 447.5
+328.3 241.5
+329.8 29.6
+330.4 35.1
+331.3 28.5
+332.0 17.2
+334.0 3.9
+336.4 8.5
+337.9 26.3
+339.2 12.8
+340.3 30.9
+341.2 64.5
+342.0 9.0
+343.1 14.1
+344.3 60.1
+345.3 62.8
+346.4 531.8
+347.2 25.2
+348.5 28.7
+349.4 31.5
+352.2 8.0
+353.5 12.5
+355.1 32.2
+356.1 25.6
+357.5 94.5
+358.3 144.8
+359.4 77.1
+360.5 9.4
+361.5 15.5
+362.4 7.6
+363.1 29.3
+369.5 5.1
+370.5 5.6
+371.3 50.9
+372.6 15.1
+373.4 15.7
+374.3 215.3
+375.5 223.6
+376.5 81.3
+377.5 26.1
+379.4 39.5
+381.3 7.4
+382.5 16.1
+383.3 61.0
+384.2 40.5
+385.3 51.9
+387.9 19.2
+388.7 25.0
+390.4 16.0
+391.3 6.9
+393.3 36.4
+394.5 9.3
+395.4 72.7
+396.6 21.1
+397.5 5.0
+398.3 9.5
+399.2 9.5
+400.3 6.2
+401.0 4.9
+402.5 26.8
+404.4 30.4
+405.4 65.5
+406.4 32.9
+407.4 212.0
+408.4 37.6
+409.4 15.6
+410.3 8.1
+411.5 65.9
+412.5 37.6
+413.4 27.6
+414.7 43.7
+415.4 59.9
+416.6 21.1
+417.2 34.3
+419.3 14.1
+421.4 62.5
+422.6 16.1
+423.4 45.3
+424.2 27.9
+425.4 497.0
+426.4 75.8
+428.2 53.4
+429.3 53.0
+433.3 15.2
+434.7 9.4
+435.4 20.8
+436.1 19.2
+437.3 21.5
+438.6 120.4
+439.5 75.0
+441.6 44.1
+442.4 90.4
+443.4 289.9
+444.3 30.1
+445.5 434.3
+447.4 33.9
+448.3 18.9
+450.4 10.0
+452.3 129.6
+453.1 60.2
+455.1 48.2
+457.3 96.7
+459.3 169.0
+460.3 20.8
+462.4 7.0
+463.5 15.4
+466.7 6.3
+467.8 20.9
+469.5 47.9
+470.4 211.2
+471.3 111.4
+472.7 39.3
+473.4 118.8
+474.3 4.1
+475.5 17.6
+476.2 3.1
+480.5 27.9
+481.5 29.9
+482.4 15.5
+483.6 33.7
+484.7 46.3
+485.5 103.7
+486.8 825.2
+487.4 271.4
+488.1 82.4
+489.5 91.4
+491.3 29.2
+491.9 6.5
+492.5 26.8
+493.5 6.4
+494.5 12.0
+496.2 7.1
+498.5 37.8
+499.3 9.0
+500.3 20.4
+500.9 80.1
+502.0 26.4
+503.6 82.8
+504.4 101.1
+505.4 190.2
+506.1 14.5
+507.2 18.2
+507.9 21.8
+509.4 28.7
+510.2 37.5
+511.6 66.1
+512.7 37.9
+514.2 10.0
+515.7 54.3
+516.9 46.4
+519.5 34.7
+520.4 35.1
+521.5 81.1
+522.5 77.9
+523.3 12.0
+524.9 81.1
+525.6 30.8
+526.5 44.7
+527.2 69.8
+528.5 51.1
+530.3 10.4
+531.4 70.4
+532.4 18.7
+533.6 63.1
+535.1 340.0
+536.3 274.3
+537.5 556.9
+538.7 138.9
+539.8 90.1
+541.7 20.2
+542.4 31.2
+544.1 3373.8
+545.0 199.8
+545.9 110.7
+546.7 22.9
+547.5 7.6
+548.6 23.3
+549.5 22.2
+550.2 66.6
+551.5 105.4
+552.4 145.1
+553.5 69.4
+554.3 140.6
+555.4 12.1
+556.7 89.9
+557.4 9.5
+558.5 416.8
+559.5 292.5
+560.4 576.2
+561.4 60.9
+562.4 69.3
+563.8 36.3
+564.8 94.2
+565.8 49.1
+566.5 82.5
+567.4 45.1
+568.4 107.1
+569.8 64.9
+570.7 85.8
+571.7 47.7
+572.4 551.4
+573.3 101.0
+574.1 9.0
+574.8 16.8
+576.3 362.3
+577.5 327.5
+578.5 79.2
+579.4 78.0
+580.4 17.0
+581.1 11.2
+582.6 64.5
+583.5 45.9
+584.4 48.7
+585.0 64.9
+585.7 84.2
+586.5 64.0
+587.4 29.6
+588.3 13.3
+589.2 6.3
+590.0 3.4
+591.4 107.1
+592.8 173.8
+593.5 116.9
+594.1 61.4
+595.9 31.2
+596.7 61.8
+597.4 12.5
+598.1 16.5
+599.6 38.5
+600.6 244.8
+602.7 76.3
+603.7 32.2
+605.4 179.6
+606.3 70.6
+607.4 71.1
+608.1 22.9
+609.3 48.2
+610.1 38.1
+610.7 26.5
+611.7 95.0
+612.3 48.3
+614.0 42.2
+614.8 141.5
+615.7 56.1
+617.4 2988.4
+618.5 422.3
+619.5 105.3
+620.4 67.9
+621.7 33.6
+622.7 53.6
+623.4 48.4
+624.1 68.7
+624.7 47.9
+625.9 44.4
+628.2 169.4
+629.3 114.7
+630.5 99.3
+631.8 42.0
+632.4 339.1
+633.5 1698.6
+634.5 509.7
+635.6 564.4
+636.6 181.1
+637.5 21.0
+638.6 108.4
+639.7 123.4
+641.2 1837.2
+642.3 1578.2
+643.2 538.0
+645.1 8.5
+645.9 31.9
+647.6 37.8
+651.4 20.8
+654.4 10.6
+655.8 6.3
+657.1 38.9
+657.7 18.0
+658.5 34.3
+659.5 17.7
+660.7 4.4
+662.4 17.8
+663.6 28.4
+665.8 8.1
+667.3 296.0
+668.5 91.6
+669.2 16.7
+670.3 17.7
+673.5 6.7
+675.2 50.2
+676.3 34.8
+679.7 11.4
+680.4 7.2
+681.2 25.3
+682.2 10.8
+684.4 34.7
+685.5 1191.9
+686.5 271.8
+687.6 24.9
+688.4 12.1
+689.5 15.9
+692.4 6.1
+695.8 23.2
+696.5 13.3
+697.5 27.7
+701.1 20.2
+702.3 44.7
+703.3 11.5
+705.3 29.8
+706.6 71.4
+707.6 18.6
+710.6 5.8
+711.6 23.1
+712.5 26.8
+713.6 29.9
+715.1 12.6
+716.6 32.9
+717.9 23.3
+718.6 86.2
+719.6 41.9
+720.6 16.3
+721.9 55.7
+722.6 273.1
+723.5 386.7
+724.5 158.4
+725.5 35.7
+726.5 16.0
+727.2 13.7
+728.6 53.9
+730.6 1228.3
+731.6 182.1
+732.5 47.8
+735.7 26.2
+738.5 23.5
+740.1 67.2
+742.4 362.3
+743.8 39.2
+746.5 83.3
+747.6 95.7
+749.0 20.6
+749.7 67.9
+750.8 32.6
+752.7 16.2
+753.5 14.1
+756.5 13.8
+758.4 12.1
+759.5 24.8
+763.3 18.3
+765.6 39.6
+768.0 14.5
+769.3 28.1
+770.7 44.1
+771.6 17.7
+772.5 18.2
+775.4 15.5
+776.6 9.9
+777.6 52.2
+781.2 51.1
+782.7 7.8
+784.4 21.7
+787.7 5.3
+788.7 6.0
+789.5 6.8
+791.2 60.8
+793.5 14.6
+794.4 29.8
+796.5 80.9
+797.5 45.1
+798.7 507.3
+799.6 50.2
+800.7 45.8
+802.0 9.6
+803.7 45.4
+804.5 7.0
+806.1 20.9
+809.2 30.3
+810.7 12.3
+811.6 41.7
+812.6 15.4
+813.5 24.3
+814.2 8.0
+817.4 70.3
+819.8 19.0
+821.5 25.8
+822.4 8.1
+823.8 12.2
+825.6 10.8
+826.7 11.2
+827.5 12.7
+828.8 14.8
+829.5 21.7
+831.6 28.2
+835.5 17.0
+838.4 20.8
+839.6 165.1
+840.8 70.6
+841.8 87.5
+842.6 47.6
+843.6 16.8
+844.4 21.2
+845.7 21.2
+846.9 17.4
+847.7 12.2
+849.3 20.2
+852.9 8.6
+853.8 43.3
+854.8 106.5
+855.6 3.0
+856.6 71.1
+857.6 267.4
+859.1 169.6
+859.7 549.8
+860.7 136.4
+861.5 14.2
+864.7 6.9
+867.7 51.0
+869.7 36.6
+871.7 11.5
+874.6 49.8
+875.8 76.7
+877.0 14.7
+878.3 46.1
+880.5 40.3
+881.3 23.0
+885.5 12.4
+889.3 6.8
+892.7 41.9
+893.7 52.3
+895.2 50.1
+896.1 34.5
+896.8 68.0
+897.9 48.8
+898.6 57.5
+900.3 32.5
+901.9 36.5
+902.7 34.1
+904.1 14.2
+904.7 22.6
+905.6 21.1
+907.2 71.3
+908.1 30.4
+908.7 37.7
+909.6 52.6
+910.2 16.8
+911.6 54.0
+912.7 31.1
+914.2 72.2
+914.9 12.2
+915.5 38.7
+916.7 34.1
+917.8 49.8
+918.5 29.2
+919.5 9.6
+920.7 53.8
+922.6 30.0
+923.8 66.2
+924.6 55.2
+925.7 144.3
+926.7 53.8
+927.7 114.3
+928.5 51.6
+929.7 45.6
+935.7 56.2
+938.4 219.7
+939.4 97.2
+940.0 28.8
+940.8 35.4
+941.9 45.3
+942.7 63.4
+943.6 18.8
+944.9 21.1
+945.6 10.2
+947.0 49.1
+947.9 5.5
+952.4 17.7
+953.9 18.5
+954.7 45.0
+955.9 214.9
+956.6 826.5
+957.5 203.0
+958.5 11.2
+960.8 80.2
+961.6 5.1
+964.5 9.0
+968.7 44.6
+970.1 50.3
+971.7 477.9
+972.8 2485.8
+973.8 1187.4
+974.7 924.9
+975.8 282.8
+977.6 14.8
+978.8 32.0
+979.8 10.0
+980.9 30.0
+981.7 12.2
+983.8 18.5
+984.4 14.6
+985.5 17.0
+987.5 4.9
+988.4 14.4
+991.7 21.4
+993.6 19.2
+996.0 58.6
+996.9 49.7
+997.7 52.0
+998.7 81.5
+1001.1 16.1
+1002.0 53.6
+1005.7 22.0
+1006.8 11.0
+1008.5 17.1
+1009.7 92.1
+1010.6 37.0
+1011.4 12.2
+1012.5 33.1
+1013.6 46.2
+1014.9 4.7
+1016.4 22.8
+1018.7 15.6
+1020.9 11.4
+1021.5 11.4
+1022.5 42.4
+1023.8 5.6
+1025.9 19.8
+1027.5 552.3
+1028.6 122.7
+1030.6 9.7
+1031.7 64.2
+1033.8 15.1
+1034.8 11.1
+1036.0 6.7
+1036.7 22.5
+1037.7 42.9
+1039.7 19.7
+1040.8 47.3
+1041.6 27.7
+1042.7 11.8
+1043.9 5.6
+1045.0 41.3
+1047.5 21.0
+1048.7 9.3
+1049.5 30.0
+1050.8 60.8
+1052.7 49.6
+1053.3 18.3
+1055.5 13.9
+1056.4 43.8
+1062.2 57.8
+1064.1 60.0
+1064.7 7.9
+1065.6 23.2
+1066.5 7.8
+1069.7 249.9
+1070.8 200.1
+1071.7 146.5
+1073.7 497.2
+1074.7 147.7
+1075.9 41.3
+1079.4 7.0
+1081.5 7.1
+1082.7 11.5
+1085.1 108.8
+1085.7 164.7
+1086.7 866.4
+1087.7 477.4
+1088.9 137.7
+1089.8 72.5
+1090.7 12.8
+1091.5 32.9
+1096.5 9.1
+1097.8 5.4
+1102.0 83.7
+1104.5 15.1
+1106.8 7.9
+1107.8 33.7
+1108.7 18.2
+1111.0 5.7
+1111.8 36.1
+1119.7 24.3
+1123.6 20.7
+1124.7 169.4
+1125.6 17.6
+1127.0 24.9
+1127.6 30.4
+1129.1 44.2
+1129.8 111.0
+1130.4 13.5
+1134.8 14.8
+1135.7 18.0
+1137.6 134.7
+1138.4 23.3
+1139.1 26.8
+1139.8 59.7
+1140.9 105.7
+1141.9 22.1
+1143.5 6.7
+1147.5 79.8
+1152.7 22.8
+1155.6 868.9
+1156.7 145.7
+1157.9 24.0
+1166.6 8.6
+1170.8 21.2
+1172.5 16.8
+1173.8 50.5
+1174.9 34.4
+1185.5 14.8
+1186.7 30.2
+1188.9 68.7
+1198.9 24.5
+1201.7 13.8
+1210.0 76.4
+1210.9 100.0
+1211.6 15.1
+1212.2 12.2
+1212.9 16.1
+1240.6 27.5
+1253.9 11.7
+1261.1 31.2
+1263.6 16.2
+S	73	73	452.85
+I	ID	200
+I	RTime	9.8987
+Z	2	904.69
+Z	3	1356.53
+130.2 1.1
+144.2 1.2
+146.7 1.5
+155.0 1.7
+161.1 2.2
+169.0 1.5
+175.1 1.7
+176.2 4.0
+177.3 1.7
+183.6 10.3
+184.2 14.6
+185.2 6.0
+185.9 3.0
+189.1 1.2
+195.1 1.5
+198.2 2.2
+201.3 2.7
+203.1 1.3
+213.3 1.7
+216.3 1.3
+217.3 3.5
+218.5 1.7
+228.1 5.0
+229.9 2.2
+232.3 0.8
+234.7 9.1
+237.2 6.0
+239.0 1.0
+247.0 3.0
+248.2 1.7
+250.1 1.5
+252.0 2.5
+257.1 2.0
+267.2 3.2
+268.1 2.2
+275.3 1.8
+283.3 1.5
+288.4 1.7
+291.2 31.3
+292.0 5.6
+296.1 2.7
+302.3 5.3
+304.8 1.2
+305.9 1.2
+307.6 5.8
+308.9 2.9
+312.1 1.7
+313.0 2.7
+321.0 8.6
+324.3 5.6
+325.2 14.1
+328.8 5.0
+331.2 7.6
+338.2 52.0
+339.1 2.7
+341.1 1.1
+343.3 1.2
+344.0 5.3
+345.3 5.8
+356.5 1.3
+364.0 1.7
+370.2 1.3
+371.9 6.1
+378.5 12.6
+385.3 2.4
+388.3 2.0
+390.1 1.3
+393.3 2.4
+394.8 9.6
+396.7 4.0
+404.6 8.0
+409.3 9.1
+411.0 8.1
+412.0 1.7
+416.3 2.4
+417.8 11.1
+419.5 1.7
+421.0 6.4
+425.4 2.2
+427.7 6.0
+431.1 1.3
+433.1 6.4
+434.4 23.7
+435.3 68.0
+436.5 8.6
+442.0 9.6
+443.6 24.5
+444.5 2.7
+445.6 4.0
+473.5 1.7
+474.3 2.5
+476.1 0.8
+480.3 1.5
+497.0 1.0
+507.7 2.7
+513.5 1.5
+517.4 3.7
+518.3 1.2
+520.3 1.7
+524.3 1.2
+531.6 4.0
+541.2 4.5
+542.9 9.6
+549.0 3.7
+560.5 1.7
+573.1 2.7
+581.4 7.3
+585.4 3.2
+602.4 1.2
+614.5 4.1
+618.6 3.5
+643.6 5.0
+646.6 2.4
+648.3 2.0
+656.4 0.8
+661.7 2.9
+670.3 1.7
+678.4 28.7
+682.4 2.7
+688.6 1.5
+690.8 1.1
+695.5 1.2
+696.7 4.0
+704.4 2.4
+719.5 3.2
+729.5 2.4
+732.3 2.5
+735.4 8.1
+743.2 1.2
+757.4 4.5
+S	74	74	427.38
+I	ID	207
+I	RTime	10.2425
+Z	2	853.75
+129.0 8.5
+134.2 1.2
+136.1 7.3
+139.1 1.6
+143.0 1.2
+148.2 2.2
+155.0 1.2
+165.2 1.7
+169.4 8.1
+172.1 6.4
+175.2 0.8
+185.0 26.3
+203.2 8.1
+218.2 1.5
+228.2 2.5
+240.2 10.5
+246.1 2.4
+249.9 1.1
+255.3 4.5
+257.3 1.3
+266.5 4.5
+269.0 60.9
+270.4 1.7
+281.3 1.8
+283.0 2.7
+286.6 8.8
+287.3 17.5
+288.3 1.2
+296.9 2.5
+299.0 2.7
+300.3 9.1
+303.3 7.0
+308.8 5.1
+312.4 10.1
+315.1 12.8
+318.6 2.0
+319.9 9.0
+321.0 1.3
+323.2 1.5
+325.2 2.4
+326.1 3.7
+334.1 2.7
+346.9 5.5
+348.1 13.8
+349.8 27.5
+350.7 12.3
+353.5 4.0
+356.3 1.0
+362.7 147.3
+363.7 21.7
+366.2 5.0
+368.2 5.5
+369.2 5.3
+370.1 7.4
+377.4 1.8
+385.4 1.5
+391.2 5.5
+392.3 1.0
+394.1 11.5
+396.0 1.1
+397.2 4.0
+400.7 6.0
+409.7 20.2
+410.5 2.7
+411.2 3.2
+412.4 2.0
+418.2 46.0
+419.3 2.5
+483.4 1.7
+484.6 4.8
+503.5 1.6
+508.7 5.0
+512.4 4.5
+528.0 10.3
+529.1 2.7
+535.3 2.5
+550.3 8.1
+554.2 5.4
+568.4 4.3
+576.6 1.3
+585.3 7.8
+586.3 3.4
+607.8 10.1
+608.5 8.8
+609.4 6.1
+611.5 5.6
+635.4 8.1
+638.6 2.2
+643.4 1.5
+646.4 1.2
+667.3 16.0
+678.5 4.6
+689.2 2.9
+694.7 1.8
+698.4 56.7
+699.5 9.3
+700.3 1.7
+723.4 3.4
+724.6 1.6
+725.5 7.6
+830.6 1.7
+S	75	75	877.27
+Z	2	1753.53
+247.3 64.2
+254.2 12.3
+256.1 64.5
+274.1 187.1
+275.3 160.4
+276.2 283.9
+282.2 119.1
+283.3 247.5
+284.1 66.9
+288.5 9.9
+291.6 70.9
+292.8 74.5
+300.4 322.1
+301.2 15.8
+303.2 38.7
+306.3 60.9
+307.4 112.3
+310.4 42.6
+316.7 34.2
+320.0 19.0
+322.3 70.9
+323.3 66.0
+326.4 31.3
+327.4 293.3
+328.4 82.1
+331.6 44.3
+332.7 88.4
+337.1 45.8
+340.9 44.7
+343.2 38.8
+345.5 177.7
+346.3 163.5
+349.2 35.9
+354.4 35.7
+356.1 82.7
+357.2 171.8
+359.3 9.1
+361.3 20.9
+363.2 5224.2
+364.3 864.6
+365.5 67.9
+371.3 27.7
+373.4 64.7
+375.4 127.9
+376.3 21.2
+380.5 66.6
+381.5 21.4
+383.3 12.8
+386.4 157.0
+387.5 36.6
+388.5 20.9
+389.3 10.0
+390.4 151.0
+391.5 107.7
+393.5 22.1
+394.3 80.2
+397.0 40.9
+399.2 69.2
+401.0 98.2
+402.2 85.3
+403.3 40.0
+404.6 34.4
+406.3 106.1
+407.3 126.0
+408.4 89.4
+415.3 62.1
+417.6 27.7
+419.1 170.8
+420.2 27.5
+423.2 105.2
+424.3 39.6
+425.6 30.7
+430.6 74.4
+437.1 395.7
+438.7 32.2
+439.6 52.1
+440.2 447.7
+441.3 20.3
+443.6 7.6
+445.0 45.5
+446.3 14.5
+449.1 13.4
+451.1 13.3
+453.4 24.7
+455.2 61.5
+456.3 35.3
+457.4 36.2
+458.3 509.1
+459.6 146.8
+460.3 21.3
+465.5 103.7
+467.3 38.6
+468.3 844.7
+469.3 192.3
+470.2 367.9
+472.2 64.7
+473.4 14.0
+475.5 21.1
+476.5 11.5
+477.2 34.3
+478.5 13.3
+482.4 12.3
+483.4 11.4
+484.3 63.0
+485.8 145.0
+486.4 200.0
+487.4 246.9
+488.0 101.6
+492.6 13.3
+494.4 17.7
+498.1 134.5
+499.2 25.9
+503.2 17.5
+504.5 68.8
+506.0 112.6
+508.5 74.4
+509.3 46.4
+510.5 69.5
+515.4 84.0
+517.3 58.5
+518.2 82.8
+519.6 61.5
+520.5 35.0
+521.5 32.0
+522.4 241.0
+523.3 76.6
+524.5 31.3
+526.3 2276.4
+527.3 370.8
+528.3 435.1
+529.5 142.6
+530.4 36.8
+532.1 849.7
+532.9 84.4
+534.2 124.5
+536.2 98.6
+539.3 181.2
+540.7 20.4
+541.3 21.0
+544.4 13.9
+545.4 25.8
+546.3 161.7
+547.2 146.0
+548.7 257.8
+549.3 51.2
+550.3 617.9
+551.1 19.8
+551.8 87.8
+552.4 173.0
+553.2 86.4
+556.6 16.9
+557.5 91.1
+560.8 63.2
+563.1 58.1
+564.2 35.1
+565.4 83.5
+566.3 244.7
+567.2 183.2
+570.3 24.1
+571.6 33.2
+572.7 34.5
+574.1 159.1
+576.4 140.1
+577.3 16.4
+578.3 61.2
+583.4 7737.4
+584.4 2049.2
+585.5 346.6
+586.5 194.1
+587.4 192.5
+588.4 96.2
+589.5 29.8
+593.1 146.0
+595.5 186.1
+596.5 201.9
+598.5 22.9
+600.8 264.7
+601.5 234.0
+602.7 34.2
+603.6 33.6
+604.3 135.2
+605.4 82.4
+606.3 61.0
+607.3 43.4
+608.4 104.1
+609.7 31.7
+611.0 119.5
+612.6 93.9
+613.3 12.7
+614.5 20.8
+615.4 164.3
+617.1 36.6
+619.2 289.2
+620.4 59.9
+621.4 515.7
+622.4 199.2
+623.3 107.9
+626.2 171.9
+627.4 39.6
+630.3 65.9
+631.2 657.5
+632.3 186.5
+633.1 206.2
+634.2 197.2
+634.8 302.3
+640.0 273.2
+641.5 40.8
+642.5 107.5
+643.5 186.8
+644.6 24.6
+647.7 371.4
+649.3 1408.0
+650.4 376.2
+651.4 94.9
+652.5 166.9
+653.4 157.2
+655.9 233.0
+657.4 1590.9
+658.3 486.9
+658.9 15.6
+661.4 209.0
+663.3 81.8
+664.1 161.2
+664.8 129.4
+666.5 154.4
+667.2 5.9
+670.3 112.0
+672.3 33.2
+673.6 84.4
+674.3 11.4
+675.4 177.4
+676.5 87.7
+678.5 31.6
+679.5 268.9
+680.7 144.3
+681.6 191.0
+682.4 20.1
+684.5 37.7
+686.3 308.5
+688.6 161.0
+689.4 160.6
+690.4 112.1
+691.2 64.9
+694.0 52.0
+697.3 11.4
+698.4 366.7
+700.5 132.7
+701.8 245.2
+702.5 178.2
+703.6 39.5
+704.7 38.7
+706.3 237.2
+707.2 162.1
+707.9 40.8
+708.5 16.8
+709.9 259.4
+710.6 155.9
+711.3 151.0
+712.5 245.1
+713.4 26.4
+714.4 50.9
+715.6 81.2
+716.5 37.5
+717.5 253.5
+718.6 308.0
+719.4 324.8
+720.4 45.0
+721.3 66.5
+722.4 177.7
+723.3 108.5
+725.4 10.7
+727.6 3430.7
+728.5 721.4
+730.4 49.2
+732.3 283.5
+734.1 6.9
+735.5 131.1
+736.3 104.5
+737.5 177.1
+738.6 151.5
+739.4 30.6
+740.4 43.8
+741.3 50.0
+742.1 103.0
+744.9 225.9
+746.4 7193.1
+747.4 2314.6
+748.4 140.9
+749.5 163.7
+750.3 178.2
+751.3 41.8
+753.2 370.7
+753.9 367.1
+754.6 199.5
+755.7 98.5
+758.5 9.3
+760.3 489.3
+761.7 1477.8
+762.7 1851.3
+764.4 1387.8
+765.4 281.4
+766.4 126.9
+768.1 268.2
+769.6 747.9
+771.0 10306.7
+772.0 1075.3
+772.6 349.2
+773.5 198.0
+774.6 95.6
+775.4 41.3
+776.8 244.3
+777.5 284.3
+778.4 636.5
+779.3 325.2
+780.5 184.5
+781.2 72.5
+782.1 213.3
+783.5 29.0
+784.9 95.3
+786.3 129.3
+787.8 104.0
+789.2 63.6
+791.9 222.9
+794.5 162.2
+795.5 456.3
+796.5 142.7
+797.6 95.9
+798.8 76.3
+799.6 277.0
+801.5 277.5
+802.9 76.5
+803.7 115.0
+805.5 196.3
+809.2 379.6
+810.9 274.1
+812.2 187.0
+813.8 336.9
+814.9 332.5
+816.1 162.2
+817.3 864.0
+818.3 453.0
+819.1 147.6
+820.4 103.8
+821.5 119.0
+823.3 645.8
+825.0 403.1
+825.8 941.0
+826.8 52.6
+827.4 42.0
+828.7 195.0
+829.8 165.4
+830.4 93.6
+832.1 214.2
+833.0 141.0
+833.8 100.3
+834.6 70.4
+836.3 338.2
+837.1 830.9
+837.8 632.5
+838.6 1101.7
+839.6 46.5
+840.3 279.6
+841.4 235.1
+843.4 354.5
+844.5 199.7
+845.5 417.4
+846.8 176.7
+848.1 233.5
+850.4 441.6
+851.3 469.7
+852.2 199.2
+854.4 331.3
+855.1 326.9
+855.8 102.8
+856.6 86.7
+857.5 1222.2
+859.1 2831.3
+860.2 1890.0
+861.4 571.5
+862.1 322.8
+863.4 219.6
+864.4 144.3
+866.8 249.6
+867.9 548.1
+868.5 828.9
+869.5 6.1
+871.2 62.4
+881.4 202.5
+890.2 58.5
+891.3 325.5
+894.6 175.8
+896.3 57.0
+899.7 162.9
+901.7 10.7
+903.3 117.4
+906.4 45.7
+907.7 53.3
+911.3 42.3
+912.0 48.0
+915.9 24.6
+916.7 73.6
+917.7 142.1
+920.1 101.4
+921.5 26.8
+923.5 58.6
+924.1 172.7
+925.4 141.0
+927.3 112.0
+929.3 119.7
+930.4 91.5
+932.8 142.6
+934.4 189.6
+936.6 97.8
+939.6 80.1
+940.8 229.0
+941.4 194.5
+942.4 223.8
+943.5 87.4
+945.3 264.0
+946.2 68.3
+948.4 190.0
+950.0 172.9
+951.5 85.5
+953.8 178.0
+954.5 178.1
+955.7 84.5
+957.2 74.8
+958.2 365.7
+959.0 138.4
+959.6 70.0
+961.4 108.3
+962.3 71.7
+963.6 152.9
+964.6 24.4
+965.3 77.8
+967.2 78.2
+969.1 80.8
+970.7 73.5
+971.4 323.5
+972.5 1486.7
+973.4 822.0
+974.3 164.2
+975.1 51.0
+978.2 177.2
+979.5 287.6
+980.5 173.6
+981.2 54.8
+982.9 35.3
+984.4 213.2
+985.5 178.4
+986.3 9.4
+987.9 31.1
+989.4 5131.4
+990.3 3682.0
+991.4 2272.8
+992.5 79.6
+995.4 42.4
+997.0 57.3
+998.7 25.6
+999.4 43.4
+1003.5 143.5
+1004.4 83.1
+1005.8 84.0
+1007.3 1475.0
+1008.6 271.1
+1009.5 355.4
+1010.6 147.0
+1012.7 110.2
+1014.3 193.7
+1015.1 160.3
+1016.2 176.4
+1023.4 118.5
+1024.7 72.9
+1026.6 97.9
+1027.5 112.3
+1028.7 24.0
+1029.4 19.1
+1030.9 49.0
+1033.4 60.7
+1034.5 69.1
+1036.6 231.7
+1037.5 161.0
+1039.0 120.5
+1040.6 118.7
+1041.9 38.4
+1042.6 23.7
+1043.3 101.6
+1044.4 86.2
+1045.4 56.1
+1048.8 106.5
+1050.4 61.6
+1051.8 111.0
+1052.6 277.2
+1053.4 423.7
+1054.4 453.0
+1055.2 147.4
+1057.6 562.9
+1058.3 119.3
+1059.6 252.8
+1060.5 79.3
+1061.4 176.1
+1063.5 43.5
+1064.6 75.8
+1069.4 169.3
+1072.2 54.0
+1073.2 93.7
+1074.5 207.3
+1075.5 32.8
+1077.8 66.5
+1079.5 769.2
+1080.4 83.6
+1085.5 65.3
+1086.3 196.4
+1087.4 560.8
+1088.5 269.7
+1089.8 47.1
+1091.2 39.9
+1092.3 155.4
+1094.8 58.5
+1095.9 50.0
+1097.0 74.5
+1097.6 426.5
+1099.1 55.4
+1100.4 141.1
+1101.9 44.2
+1102.6 101.2
+1104.4 7645.4
+1105.5 3833.9
+1106.6 935.6
+1107.2 157.6
+1109.8 369.4
+1112.6 235.3
+1113.5 155.7
+1117.4 204.6
+1118.6 130.4
+1119.9 26.0
+1125.6 344.5
+1126.3 42.8
+1127.4 121.4
+1128.7 80.8
+1132.4 125.5
+1135.4 443.8
+1136.5 820.2
+1137.4 25.9
+1138.4 36.2
+1139.2 74.9
+1140.9 69.0
+1141.8 189.4
+1142.4 193.4
+1143.3 111.4
+1144.4 82.3
+1146.5 84.0
+1147.5 86.9
+1150.9 101.7
+1152.5 801.9
+1153.4 1936.5
+1154.5 702.6
+1158.8 63.0
+1160.0 129.6
+1160.7 570.6
+1161.5 776.5
+1162.1 397.7
+1162.8 132.1
+1163.4 56.8
+1164.7 221.6
+1165.5 34.1
+1166.5 178.4
+1167.4 37.0
+1168.5 34.5
+1169.2 60.1
+1170.3 1416.0
+1171.4 1050.7
+1172.4 87.4
+1173.9 20.1
+1175.4 85.0
+1178.5 105.8
+1179.4 86.5
+1180.4 105.5
+1181.6 85.2
+1183.7 93.7
+1184.6 80.3
+1186.1 218.9
+1187.7 245.5
+1188.6 31.0
+1192.3 125.0
+1193.6 313.4
+1196.3 56.5
+1198.0 115.3
+1200.1 131.3
+1201.5 30.5
+1203.7 36.1
+1204.5 46.0
+1207.5 24.3
+1208.8 164.4
+1209.5 366.1
+1210.5 557.4
+1211.6 431.9
+1212.6 92.4
+1213.5 76.7
+1214.5 45.8
+1219.2 129.2
+1221.4 164.1
+1222.2 78.5
+1223.4 92.4
+1227.6 844.9
+1228.6 335.1
+1229.3 11.1
+1230.5 155.3
+1231.9 388.4
+1233.3 36.8
+1234.6 20.2
+1238.4 69.8
+1240.5 19.6
+1242.5 67.9
+1243.6 73.0
+1244.5 70.1
+1247.5 65.5
+1248.5 174.0
+1249.6 1028.4
+1250.8 404.0
+1251.7 299.6
+1253.8 94.4
+1254.8 147.7
+1256.1 233.8
+1257.3 253.1
+1258.4 67.4
+1259.9 47.9
+1260.8 156.5
+1263.6 166.3
+1264.2 15.0
+1265.4 242.0
+1267.5 6501.9
+1268.5 4593.3
+1269.6 1951.6
+1270.7 160.7
+1271.4 41.0
+1272.5 22.7
+1273.5 172.1
+1274.5 227.2
+1275.8 139.4
+1279.8 86.8
+1280.6 235.3
+1282.7 38.0
+1283.6 57.5
+1284.5 62.2
+1286.1 87.5
+1291.3 21.3
+1292.2 64.3
+1293.6 19.0
+1294.9 206.7
+1295.9 60.9
+1297.1 20.2
+1298.8 55.5
+1300.2 174.8
+1303.2 17.6
+1304.6 39.1
+1307.6 39.4
+1309.5 19.0
+1312.5 96.1
+1314.6 222.2
+1320.4 126.0
+1321.1 33.0
+1322.2 92.1
+1323.0 52.8
+1328.6 96.4
+1330.0 44.3
+1332.8 113.6
+1335.7 99.4
+1336.7 147.3
+1339.6 174.4
+1341.1 60.9
+1344.0 45.1
+1345.3 120.1
+1346.5 150.0
+1347.7 107.9
+1348.9 21.1
+1350.4 29.4
+1352.6 15.6
+1353.8 94.2
+1354.7 218.1
+1355.6 539.9
+1356.5 346.6
+1357.6 432.0
+1358.6 67.6
+1360.6 100.6
+1362.2 40.9
+1363.5 261.0
+1364.6 43.4
+1366.7 34.1
+1369.7 13.3
+1370.6 13.5
+1372.4 1132.5
+1373.7 2062.5
+1374.5 1337.4
+1375.6 218.3
+1376.6 130.3
+1378.0 69.1
+1381.5 54.0
+1388.9 64.2
+1390.4 2408.8
+1391.5 1583.9
+1392.2 450.1
+1393.0 95.1
+1396.0 72.8
+1396.8 178.8
+1400.5 87.9
+1402.6 38.6
+1406.8 22.1
+1410.6 143.8
+1414.8 119.4
+1415.8 174.4
+1437.9 50.6
+1439.2 9.0
+1440.7 30.1
+1441.6 86.9
+1442.4 61.7
+1443.4 13.5
+1444.7 37.1
+1445.6 48.4
+1450.7 101.3
+1452.0 189.2
+1453.4 1467.4
+1454.6 1148.6
+1455.7 388.1
+1456.8 19.7
+1460.0 545.6
+1460.6 67.1
+1461.3 490.6
+1462.0 69.0
+1464.7 67.3
+1469.7 114.1
+1471.9 37.8
+1473.8 51.8
+1477.4 615.7
+1478.3 363.3
+1483.8 39.8
+1489.3 40.7
+1491.4 12.5
+1498.1 100.5
+1504.6 69.1
+1505.4 61.2
+1506.4 21.9
+1516.9 36.2
+1522.8 322.6
+1523.6 354.8
+1524.8 148.3
+1525.6 147.7
+1532.0 121.0
+1537.9 20.2
+1540.5 2867.2
+1541.5 2559.8
+1542.6 971.1
+1543.6 47.9
+1544.4 49.0
+1553.6 29.0
+1555.6 40.4
+1560.7 189.5
+1561.3 215.1
+1562.4 301.0
+1568.5 44.1
+1570.7 37.0
+1573.5 88.6
+1574.7 149.0
+1575.9 80.3
+1578.2 275.5
+1580.1 146.6
+1580.8 235.1
+1585.7 29.5
+1594.3 125.5
+1597.9 78.4
+1600.9 16.2
+1606.5 47.2
+1607.6 14.3
+1630.7 16.6
+1632.7 485.0
+1633.6 395.8
+1634.6 390.2
+1635.8 188.6
+1636.8 100.4
+1637.5 130.6
+1640.5 74.0
+1650.5 66.9
+1694.7 24.9
+S	76	76	731.81
+Z	2	1462.61
+208.9 10.9
+212.1 3.1
+220.0 10.2
+226.1 108.9
+227.1 17.1
+231.1 6.9
+238.1 20.5
+239.1 15.5
+241.1 5.8
+242.5 5.3
+244.0 205.4
+245.1 6.7
+247.3 4.9
+248.2 4.6
+251.1 9.9
+256.8 7.2
+262.2 23.6
+267.9 6.3
+270.9 2.4
+272.1 5.6
+276.1 8.1
+279.2 1.8
+284.1 14.0
+290.1 10.9
+291.2 5.3
+294.2 44.1
+295.4 3.4
+298.3 7.7
+304.5 5.3
+307.2 6.3
+308.2 32.3
+309.2 11.6
+314.6 21.6
+317.9 2.3
+323.3 6.6
+325.4 43.8
+326.3 35.3
+327.3 13.6
+342.1 3.0
+343.2 464.8
+344.2 39.2
+345.2 5.5
+349.1 10.5
+351.2 7.0
+366.7 14.5
+367.4 29.5
+369.2 4.8
+374.1 3.3
+377.7 7.7
+380.6 7.9
+384.1 90.3
+385.0 6.3
+387.2 14.2
+396.1 8.4
+400.3 2.7
+403.3 9.4
+405.2 21.7
+407.3 85.3
+408.4 24.7
+409.4 31.6
+412.0 26.4
+413.0 19.5
+417.2 20.3
+420.4 6.5
+428.4 7.7
+430.2 135.0
+431.3 41.3
+434.5 6.1
+442.3 5.9
+444.3 9.2
+446.2 2.4
+447.1 3.9
+448.4 7.2
+453.3 8.8
+455.4 2.4
+461.4 6.7
+465.7 14.3
+466.3 31.1
+467.3 3.7
+470.3 5.1
+471.0 5.4
+473.2 12.1
+474.9 5.7
+477.3 5.8
+479.8 8.4
+483.2 130.9
+484.2 40.3
+489.1 9.5
+495.0 14.2
+498.1 3.7
+500.5 19.8
+501.4 166.2
+502.4 25.1
+503.1 4.8
+504.2 15.4
+505.3 2.7
+510.2 10.4
+514.2 8.4
+515.2 26.2
+516.1 16.4
+517.5 22.9
+519.0 8.8
+520.2 40.0
+521.2 7.5
+523.5 2.4
+526.6 3.6
+529.7 42.8
+532.2 3.9
+533.2 3.6
+536.5 13.6
+539.1 31.8
+540.6 33.9
+542.5 12.4
+543.3 5.0
+544.9 7.3
+547.3 2.6
+548.4 11.2
+549.5 11.1
+551.8 20.6
+556.3 33.3
+556.9 15.5
+559.5 19.5
+562.8 6.2
+565.1 15.6
+566.3 2.6
+568.2 15.8
+569.2 12.8
+570.2 19.2
+571.4 7.3
+572.6 12.9
+573.3 3.4
+574.1 18.9
+575.5 16.9
+576.8 18.6
+577.5 6.0
+580.2 35.9
+581.2 26.8
+584.1 6.8
+585.6 5.8
+587.2 14.8
+588.3 5.9
+590.5 3.8
+594.3 7.9
+595.3 3.5
+597.1 82.3
+598.4 8.4
+600.3 35.4
+602.3 29.8
+603.3 14.9
+604.2 8.1
+605.2 23.6
+610.3 25.6
+610.9 34.2
+611.8 22.9
+614.3 95.3
+615.3 276.2
+616.2 47.4
+617.4 4.8
+618.3 7.9
+619.4 3.1
+622.2 10.1
+624.2 13.6
+625.3 4.2
+629.6 22.8
+630.3 25.3
+631.1 2.0
+632.1 566.1
+633.3 52.6
+637.4 24.4
+640.1 4.3
+642.0 17.4
+647.3 10.7
+650.7 13.4
+651.3 20.1
+656.8 16.4
+658.7 7.8
+660.4 12.2
+661.5 20.7
+664.8 5.5
+666.3 15.5
+668.4 28.4
+669.5 21.2
+670.3 6.4
+671.5 2.8
+672.5 7.1
+673.4 13.4
+675.7 13.9
+677.1 18.3
+678.4 3.5
+683.1 57.1
+684.5 3.8
+685.6 71.1
+687.2 13.3
+689.0 10.3
+690.3 56.0
+695.2 18.6
+696.4 10.6
+697.3 39.6
+698.4 15.7
+699.9 21.4
+701.0 7.6
+702.3 9.8
+703.0 3.2
+703.7 16.9
+705.1 35.8
+708.0 9.8
+709.8 30.7
+711.4 6.9
+712.2 6.7
+713.8 69.9
+714.6 41.3
+715.9 21.7
+717.7 4.4
+718.6 6.8
+720.0 15.5
+721.9 174.0
+723.3 59.5
+724.1 7.8
+737.8 6.0
+740.5 22.1
+749.7 10.4
+751.9 18.5
+752.7 22.5
+753.5 12.4
+756.0 8.9
+757.2 4.6
+762.7 55.5
+763.5 14.9
+764.5 12.4
+766.2 30.8
+773.6 22.2
+775.2 4.3
+784.4 26.9
+785.4 8.1
+792.8 18.3
+806.3 6.2
+807.2 8.3
+814.2 14.6
+817.1 28.5
+817.9 4.5
+819.7 22.8
+826.4 30.2
+827.4 3.0
+830.4 13.0
+831.4 1044.9
+832.6 301.8
+833.6 20.4
+841.4 48.3
+843.3 20.7
+844.1 12.9
+847.4 11.1
+848.5 16.9
+854.5 22.2
+855.8 10.5
+856.9 10.8
+858.7 2.1
+860.2 1.8
+861.6 14.4
+862.8 2.4
+866.2 12.5
+870.0 7.9
+875.5 10.6
+876.4 7.9
+878.7 6.7
+882.2 14.1
+884.4 22.5
+885.5 25.7
+886.5 48.8
+887.7 20.9
+890.0 98.3
+891.1 8.4
+892.4 25.3
+893.5 3.6
+897.7 43.8
+898.9 127.3
+900.0 37.8
+902.1 13.1
+902.9 14.6
+909.4 25.6
+910.5 4.9
+915.5 12.9
+917.5 17.0
+921.0 16.3
+921.6 5.8
+922.4 18.9
+925.2 34.1
+926.1 7.8
+927.6 19.2
+928.7 24.6
+931.1 7.7
+935.1 24.5
+936.6 3.1
+937.7 15.6
+939.8 6.5
+943.4 128.6
+944.7 47.9
+945.5 11.3
+948.0 7.1
+955.4 28.8
+958.4 10.5
+959.0 7.8
+960.6 17.9
+962.4 548.9
+963.5 195.1
+964.3 58.6
+964.9 9.9
+966.6 14.3
+968.2 6.9
+973.4 36.9
+975.6 5.7
+976.7 22.3
+983.3 27.0
+984.1 14.2
+985.4 20.7
+987.9 21.2
+994.4 13.4
+995.1 27.2
+996.2 14.7
+998.5 23.8
+999.7 11.7
+1007.9 39.5
+1009.0 6.1
+1010.6 7.3
+1012.5 9.7
+1019.8 12.8
+1021.3 22.3
+1023.6 28.3
+1025.6 13.1
+1031.3 3.3
+1033.4 297.9
+1034.4 99.1
+1035.1 3.3
+1036.3 6.7
+1038.5 17.3
+1039.4 46.9
+1040.0 27.7
+1041.3 7.1
+1042.8 22.7
+1043.9 14.4
+1044.7 7.1
+1047.4 4.9
+1049.3 10.2
+1050.6 6.4
+1053.5 20.0
+1054.6 5.4
+1056.3 70.8
+1057.5 45.0
+1061.5 27.3
+1064.6 3.1
+1073.5 16.2
+1084.4 10.0
+1091.3 8.6
+1094.3 3.8
+1097.8 4.6
+1102.6 17.9
+1103.6 4.4
+1110.5 2.1
+1112.5 5.9
+1116.3 9.2
+1117.5 14.7
+1119.9 62.7
+1120.5 1288.0
+1121.6 509.5
+1122.7 63.9
+1131.3 1.9
+1132.9 6.1
+1146.7 4.3
+1147.5 15.1
+1151.2 10.2
+1152.4 30.7
+1157.9 8.8
+1169.4 126.2
+1170.4 39.8
+1182.5 12.0
+1184.6 5.1
+1186.8 12.5
+1195.5 10.2
+1196.4 13.5
+1198.5 5.4
+1201.6 50.7
+1202.6 20.7
+1203.7 16.8
+1211.5 5.2
+1219.6 517.7
+1220.6 349.6
+1244.7 5.3
+1245.8 25.0
+1256.4 2.1
+1268.6 4.5
+1281.6 4.4
+1298.7 16.5
+1299.6 10.0
+1300.8 15.7
+1301.6 7.4
+1313.9 6.6
+1316.5 82.7
+1317.6 25.4
+1331.2 12.0
+1363.5 8.4
+1434.0 4.1
+1435.4 21.9
+1461.5 8.5
+S	77	77	745.43
+Z	2	1489.85
+214.3 2.0
+217.2 9.5
+219.4 2.7
+222.3 4.7
+225.5 6.3
+229.1 5.0
+233.2 20.6
+234.2 41.7
+235.3 5.8
+239.2 31.9
+240.8 5.5
+243.1 5.4
+244.1 7.4
+246.4 1.4
+247.2 10.8
+248.4 4.6
+256.2 11.6
+260.2 135.1
+261.0 6.0
+262.0 105.8
+263.2 5.2
+266.4 4.0
+270.3 41.1
+271.6 10.8
+274.3 7.9
+276.0 4.0
+282.2 11.6
+285.0 2.9
+286.1 1.7
+288.2 25.0
+289.3 5.0
+291.2 7.9
+294.6 1.3
+298.1 2.9
+299.5 8.4
+301.1 3.5
+302.5 2.1
+303.2 13.8
+304.2 12.6
+306.8 1.2
+310.2 7.5
+315.7 7.9
+316.5 49.9
+317.4 282.5
+321.2 2.8
+322.7 6.0
+325.2 25.3
+325.8 12.8
+329.3 7.1
+330.1 11.6
+333.3 13.1
+334.1 8.2
+336.9 2.9
+338.4 6.7
+340.3 6.4
+342.5 5.4
+343.2 3.5
+344.1 9.1
+345.3 6.7
+346.0 1.1
+347.2 31.4
+349.3 24.6
+350.0 7.2
+355.3 20.9
+356.0 1.2
+357.3 76.5
+358.4 24.0
+359.6 8.0
+360.6 2.7
+362.4 4.7
+370.9 6.4
+373.4 13.2
+374.0 11.9
+375.2 273.2
+376.4 78.9
+377.3 16.3
+378.0 14.7
+383.3 13.5
+386.4 25.7
+392.2 5.6
+393.3 15.3
+394.2 12.8
+395.5 4.5
+397.2 1.8
+400.2 18.1
+401.6 1.2
+403.3 85.5
+404.4 23.3
+408.6 3.1
+409.5 6.3
+411.5 6.0
+416.3 249.1
+417.3 13.4
+418.7 12.4
+421.3 56.2
+422.3 29.4
+425.3 22.5
+429.4 10.8
+430.3 2.5
+431.2 2.2
+433.2 2.1
+434.8 10.1
+436.2 4.3
+437.3 6.3
+439.0 4.7
+440.4 3.8
+442.5 1.1
+444.4 6.4
+446.0 14.5
+446.7 1.0
+449.7 7.3
+450.4 13.7
+452.9 5.2
+453.7 4.6
+457.4 6.9
+458.2 2.8
+459.0 11.7
+460.8 6.7
+462.3 13.8
+466.5 16.7
+467.6 8.7
+469.9 5.9
+470.6 3.3
+472.4 12.2
+473.4 13.2
+474.4 97.3
+475.4 18.5
+476.3 30.2
+477.4 9.2
+480.3 4.5
+482.5 6.5
+484.4 24.1
+486.0 17.7
+486.6 27.7
+487.5 7.6
+490.2 9.1
+491.4 3.8
+493.1 5.7
+496.2 19.0
+497.4 19.0
+499.3 7.1
+500.8 2.5
+501.9 16.0
+504.3 166.1
+505.3 29.8
+507.4 4.6
+508.7 3.8
+510.2 13.3
+511.4 15.6
+513.0 21.0
+514.3 25.0
+515.2 4.6
+516.6 5.0
+517.4 3.8
+520.4 5.5
+521.5 15.3
+522.4 7.9
+524.4 22.1
+525.5 5.4
+526.5 39.4
+527.5 42.7
+528.4 7.8
+529.7 15.7
+531.5 13.9
+534.3 79.2
+535.0 91.1
+536.7 20.6
+538.4 7.1
+539.1 1.9
+539.7 11.7
+540.3 3.6
+543.2 27.8
+544.4 376.0
+545.3 66.7
+546.2 6.9
+547.3 13.7
+548.7 22.1
+549.3 11.2
+550.4 30.4
+551.4 42.9
+552.0 7.8
+552.9 8.5
+553.6 2.0
+554.8 1.5
+555.6 22.7
+557.3 28.7
+558.1 34.4
+559.5 34.1
+560.2 5.2
+564.3 18.8
+567.9 53.9
+568.5 6.8
+570.3 33.3
+571.2 13.0
+572.4 6.2
+573.1 17.1
+573.9 15.8
+575.4 12.0
+577.0 54.0
+578.1 81.6
+579.1 20.9
+580.5 9.6
+581.4 18.0
+582.8 21.1
+584.5 22.4
+585.6 14.9
+587.1 85.4
+588.1 40.1
+592.5 28.4
+594.3 7.9
+595.1 39.7
+596.6 1.9
+598.2 27.0
+599.4 53.5
+600.4 2.6
+601.3 5.2
+603.2 20.2
+604.5 35.4
+605.4 179.3
+606.3 91.7
+607.1 5.4
+608.5 17.2
+609.4 3.6
+610.7 30.9
+612.2 9.4
+613.6 47.0
+614.8 96.6
+615.5 8.6
+616.4 8.4
+617.2 21.9
+618.6 52.9
+619.8 2.8
+620.5 7.8
+621.7 25.3
+623.2 5.7
+624.6 23.0
+625.2 34.6
+626.0 214.5
+627.1 17.9
+628.0 27.0
+629.8 10.7
+631.1 24.6
+632.2 25.6
+632.9 6.2
+634.0 8.6
+636.1 16.9
+637.4 37.3
+639.6 37.4
+640.2 9.6
+642.0 24.0
+642.6 9.5
+643.9 3.8
+644.5 66.6
+645.3 95.6
+646.3 10.8
+648.9 17.2
+650.1 15.5
+651.0 5.0
+651.7 5.2
+652.3 6.6
+653.3 25.2
+655.0 23.8
+657.4 436.2
+658.2 39.1
+658.8 68.1
+659.9 28.1
+660.6 2.4
+662.0 11.7
+663.0 96.4
+664.1 27.6
+664.9 40.4
+666.2 101.3
+667.4 19.6
+668.3 25.5
+669.3 150.6
+670.4 47.5
+671.9 42.6
+672.7 6.2
+673.4 48.3
+674.4 62.8
+675.8 70.6
+676.7 75.6
+677.5 28.1
+678.2 55.9
+679.4 15.8
+680.4 28.2
+681.4 57.1
+682.9 16.6
+683.7 71.8
+686.3 622.4
+687.4 74.1
+688.2 34.0
+688.9 11.0
+689.5 5.9
+690.4 5.0
+691.1 26.3
+692.0 24.1
+692.7 60.5
+693.5 57.6
+694.6 49.9
+695.8 43.1
+698.3 43.3
+699.7 87.4
+700.6 25.3
+701.4 45.2
+702.1 57.9
+702.9 23.7
+704.4 539.0
+705.4 66.7
+706.3 17.9
+707.4 15.9
+708.1 17.6
+709.6 261.3
+710.7 64.5
+711.5 20.0
+712.4 44.1
+713.8 167.7
+714.9 94.9
+716.7 26.8
+718.2 677.7
+719.1 104.8
+720.2 32.1
+721.3 98.0
+722.1 63.9
+723.1 62.4
+723.9 198.3
+725.0 106.8
+725.8 37.7
+726.5 40.1
+727.5 155.6
+728.3 179.0
+729.1 128.0
+729.9 96.9
+731.2 97.9
+731.9 32.6
+732.6 121.7
+733.4 90.5
+735.5 263.5
+736.5 378.2
+737.3 49.9
+739.2 6.8
+740.6 5.6
+751.9 47.6
+753.6 15.8
+755.4 4.0
+756.6 21.6
+757.4 11.9
+758.4 10.5
+759.2 12.6
+760.6 13.1
+762.5 18.1
+763.4 8.9
+765.2 43.0
+766.2 11.3
+767.0 5.9
+768.3 71.2
+769.4 16.3
+770.9 20.3
+772.2 136.2
+772.9 31.0
+773.7 68.8
+775.0 19.2
+777.4 60.4
+778.5 61.7
+779.4 10.4
+780.6 44.0
+781.5 30.4
+783.4 17.4
+784.3 11.3
+785.3 45.0
+786.5 1101.1
+787.5 161.5
+788.9 26.9
+789.6 16.3
+790.6 21.7
+792.3 30.0
+793.6 52.4
+794.7 35.3
+795.7 46.2
+797.4 79.0
+798.5 63.8
+799.6 82.7
+800.4 85.0
+801.1 8.7
+802.0 5.5
+802.9 8.8
+803.7 17.5
+805.5 33.0
+807.0 41.7
+808.8 16.4
+809.7 30.0
+810.6 48.7
+811.8 22.3
+812.9 29.3
+813.9 40.0
+814.8 82.8
+815.4 110.7
+816.4 208.5
+817.3 33.9
+818.3 51.8
+821.3 12.5
+822.3 52.5
+823.7 64.3
+824.9 4.6
+827.3 12.3
+828.6 75.1
+830.2 46.8
+831.7 36.1
+832.8 116.5
+833.5 283.0
+834.4 12.1
+835.7 61.2
+836.7 5.4
+838.0 13.5
+838.9 38.9
+839.9 18.8
+840.7 36.1
+841.9 14.8
+842.6 17.4
+843.8 30.3
+844.7 15.0
+845.6 37.8
+846.4 21.3
+847.6 35.6
+848.3 2.9
+849.2 6.5
+850.1 34.7
+851.1 47.1
+852.1 57.8
+853.0 80.3
+854.1 73.2
+855.7 4.5
+856.9 63.7
+857.9 31.5
+858.8 33.6
+859.7 25.9
+860.8 67.1
+861.8 53.9
+862.7 45.5
+865.1 2.9
+866.0 10.1
+867.9 18.5
+869.5 52.4
+870.2 1.7
+871.6 200.5
+872.6 118.5
+873.8 17.2
+874.9 66.7
+875.8 19.7
+876.8 70.8
+877.8 19.0
+879.6 15.6
+880.2 10.5
+882.0 23.4
+883.3 130.8
+884.5 27.3
+885.6 391.6
+886.5 35.3
+887.1 20.3
+889.6 23.2
+890.5 17.6
+891.3 3.2
+892.2 20.8
+894.2 70.5
+895.4 27.8
+896.7 69.5
+897.7 8.4
+898.6 49.4
+899.3 119.8
+900.5 60.5
+901.9 32.6
+902.6 28.8
+903.8 45.3
+904.6 31.4
+905.6 4.9
+906.5 14.4
+907.6 53.6
+908.3 18.3
+909.6 41.8
+911.4 13.9
+912.6 22.0
+914.4 19.0
+915.4 50.3
+916.5 3.3
+917.8 58.2
+918.7 27.6
+919.9 44.8
+920.8 94.5
+921.8 108.7
+922.6 65.6
+923.6 38.0
+924.7 42.7
+925.6 41.3
+926.4 48.9
+927.7 132.6
+928.5 135.4
+929.4 120.1
+930.2 48.8
+930.9 20.5
+932.1 23.1
+933.1 33.3
+934.0 11.7
+934.6 21.5
+935.6 17.4
+936.4 5.9
+937.0 62.5
+938.1 179.7
+939.0 4.3
+940.7 38.8
+941.5 61.7
+942.9 74.3
+943.6 26.6
+945.1 57.8
+946.4 354.4
+947.5 111.0
+948.3 62.3
+948.9 18.4
+950.0 52.8
+951.4 14.5
+952.7 88.3
+953.5 68.3
+954.2 185.6
+955.3 32.5
+956.3 10.9
+957.7 11.9
+959.8 64.9
+961.0 17.6
+963.6 15.5
+964.2 13.4
+965.3 12.7
+966.7 54.2
+967.8 78.7
+968.8 29.9
+969.5 7.5
+970.6 38.1
+971.9 29.9
+972.8 40.3
+974.0 27.5
+975.0 66.7
+976.7 36.0
+978.2 15.3
+979.2 26.8
+980.9 18.5
+981.6 55.2
+982.2 14.0
+983.9 12.3
+985.2 26.5
+986.5 571.6
+987.7 137.0
+988.5 0.8
+989.6 11.4
+990.5 20.9
+991.3 23.3
+992.2 28.2
+993.0 10.7
+993.8 58.7
+994.5 31.5
+996.0 69.2
+997.6 53.9
+998.6 20.2
+1000.2 57.0
+1001.5 18.0
+1002.7 72.2
+1003.5 15.7
+1004.4 30.1
+1006.4 18.8
+1008.6 17.5
+1009.4 13.4
+1010.1 7.0
+1011.4 51.1
+1012.4 17.0
+1013.3 4.1
+1014.6 52.1
+1015.6 81.5
+1016.4 22.2
+1017.5 19.7
+1018.6 61.1
+1019.4 9.6
+1022.7 9.6
+1023.6 18.7
+1024.4 4.6
+1026.9 2.6
+1029.5 2.6
+1030.7 20.4
+1031.5 14.1
+1033.7 4.1
+1034.7 35.1
+1035.9 14.4
+1036.9 9.8
+1038.7 33.8
+1039.3 13.9
+1040.0 65.5
+1041.3 35.0
+1043.0 19.6
+1044.4 29.9
+1045.7 7.8
+1047.5 11.5
+1048.3 13.1
+1049.6 20.6
+1050.3 4.7
+1052.0 5.3
+1052.6 19.2
+1056.4 93.3
+1057.2 98.8
+1058.0 5.4
+1059.0 17.2
+1059.7 9.3
+1060.5 9.6
+1061.9 48.0
+1062.7 4.4
+1064.4 15.9
+1065.4 14.4
+1066.3 21.1
+1067.6 460.3
+1068.6 176.6
+1069.5 129.4
+1070.6 47.4
+1072.6 4.6
+1074.4 481.2
+1075.5 49.2
+1078.3 5.6
+1079.4 7.1
+1080.8 17.5
+1081.9 15.5
+1084.5 1.7
+1087.4 14.0
+1088.1 22.9
+1091.8 19.4
+1092.5 2.2
+1095.7 77.4
+1097.6 148.6
+1098.7 28.4
+1099.9 9.4
+1102.6 4.1
+1104.5 6.8
+1105.9 3.9
+1107.4 60.8
+1109.0 12.4
+1110.6 6.9
+1111.8 8.1
+1112.5 5.8
+1113.6 81.8
+1115.6 614.4
+1116.7 94.0
+1117.7 28.7
+1120.7 18.7
+1121.6 18.9
+1126.8 11.3
+1128.2 10.0
+1129.8 24.8
+1131.0 15.0
+1131.7 9.8
+1132.8 17.0
+1133.9 10.3
+1135.8 6.4
+1136.6 20.3
+1137.7 24.5
+1138.5 21.3
+1139.4 6.1
+1143.1 20.0
+1147.5 38.0
+1151.5 7.6
+1153.5 8.5
+1154.6 213.0
+1155.6 274.9
+1156.6 133.2
+1157.2 29.9
+1165.6 26.2
+1167.4 6.5
+1171.1 7.1
+1173.4 906.9
+1174.5 81.4
+1176.6 20.7
+1181.4 17.9
+1186.1 13.5
+1189.0 6.4
+1189.8 22.3
+1192.9 11.0
+1197.4 12.9
+1198.6 10.1
+1199.7 4.1
+1201.4 2.6
+1202.5 13.3
+1204.2 5.6
+1208.6 6.6
+1210.8 79.9
+1211.7 9.2
+1212.5 58.8
+1213.2 42.1
+1214.0 25.6
+1219.8 14.7
+1224.3 3.3
+1225.7 11.5
+1226.7 8.7
+1228.1 31.0
+1228.8 372.2
+1230.4 589.9
+1231.7 84.4
+1237.7 7.1
+1238.4 10.7
+1242.5 8.4
+1243.7 27.4
+1244.3 22.0
+1252.1 9.9
+1252.9 5.1
+1253.6 17.8
+1254.8 31.1
+1255.8 4.6
+1257.4 2.2
+1258.6 4.4
+1271.0 6.0
+1273.5 6.9
+1275.4 11.2
+1281.2 1.0
+1294.1 14.5
+1295.4 4.1
+1297.4 4.9
+1304.4 5.5
+1308.9 36.0
+1315.4 3.4
+1320.5 12.4
+1322.7 18.4
+1323.6 17.3
+1324.6 33.2
+1325.5 47.3
+1326.2 49.3
+1327.0 10.0
+1336.6 13.6
+1341.4 50.3
+1343.0 122.4
+1343.6 458.7
+1344.5 146.2
+1345.2 17.9
+1349.5 4.5
+1350.9 2.7
+1358.2 11.9
+1360.7 6.2
+1361.7 11.8
+1370.9 5.6
+1389.7 8.3
+1392.6 7.1
+1395.8 11.6
+1396.5 3.2
+1421.0 11.2
+1443.0 9.4
+1452.8 2.1
+1463.3 2.5
+1469.5 2.9
+1472.5 0.9
+1475.8 13.7
+S	78	78	452.22
+I	ID	98
+I	RTime	4.6463
+Z	2	903.43
+Z	3	1354.64
+161.1 1.1
+163.3 1.7
+167.0 0.6
+175.2 1.7
+177.4 1.5
+178.3 2.9
+185.9 1.2
+190.6 1.8
+195.0 1.2
+219.2 4.5
+225.2 1.3
+226.2 1.6
+232.3 2.0
+235.1 3.0
+240.1 2.2
+244.2 1.7
+247.0 1.3
+248.5 3.4
+254.0 0.8
+255.8 1.7
+258.2 8.6
+258.9 1.7
+264.1 2.5
+265.2 5.5
+275.2 3.2
+276.2 1.8
+277.4 1.2
+282.4 0.8
+289.9 2.0
+292.0 7.8
+296.1 1.8
+297.6 1.2
+298.7 0.8
+305.9 2.5
+308.4 2.5
+310.3 2.2
+311.2 1.2
+316.2 10.3
+317.2 1.7
+323.3 1.5
+324.3 19.0
+325.2 13.8
+335.0 2.7
+337.2 8.6
+342.1 1.2
+347.5 1.2
+355.9 4.4
+359.2 0.6
+362.4 8.6
+376.8 2.4
+378.1 1.3
+383.7 14.0
+385.6 2.5
+387.8 2.7
+389.1 4.1
+392.3 18.7
+393.3 7.5
+394.6 7.0
+395.3 5.4
+399.4 9.6
+402.2 5.8
+406.3 23.3
+407.2 4.5
+408.1 5.6
+409.5 0.8
+410.4 5.3
+411.5 1.1
+416.3 5.1
+417.5 10.1
+418.4 1.1
+420.1 1.7
+421.3 7.1
+422.4 11.0
+423.7 1.6
+425.0 16.1
+429.5 0.8
+430.7 6.3
+434.2 62.7
+435.0 12.5
+436.4 6.8
+442.6 12.8
+443.3 28.3
+443.9 30.5
+445.6 5.5
+469.2 2.7
+473.5 1.2
+474.4 2.0
+483.4 1.3
+514.7 3.5
+526.3 3.7
+530.3 1.8
+570.6 1.7
+580.7 1.3
+585.4 2.2
+587.3 1.1
+622.6 2.0
+627.3 1.0
+645.4 5.6
+647.3 3.7
+648.4 1.3
+654.5 1.3
+671.4 1.6
+702.2 1.3
+703.5 2.9
+716.5 1.1
+717.4 2.0
+728.4 1.7
+729.6 2.0
+753.5 2.7
+756.3 11.6
+774.8 2.7
+775.5 2.7
+882.6 2.9
+S	79	79	559.10
+I	ID	210
+I	RTime	10.3738
+Z	2	1117.19
+175.2 1.7
+185.3 2.4
+186.2 3.5
+209.2 10.1
+234.2 1.5
+237.3 1.8
+251.9 1.2
+253.3 1.1
+254.0 1.0
+258.2 2.7
+259.0 2.5
+267.1 4.0
+271.0 1.6
+275.3 2.7
+276.3 3.2
+278.3 7.5
+283.2 2.9
+286.1 1.3
+287.5 1.7
+290.9 29.7
+292.1 1.2
+294.9 1.7
+299.3 3.0
+301.0 1.0
+311.2 1.6
+315.3 1.3
+317.3 1.6
+331.2 5.4
+341.1 1.7
+342.2 2.7
+345.5 5.5
+355.1 2.7
+364.4 3.0
+366.2 9.3
+367.4 2.0
+371.3 2.2
+373.5 10.0
+378.1 1.1
+380.9 3.2
+384.2 2.4
+386.2 12.1
+387.4 2.7
+389.4 3.2
+394.2 9.8
+396.1 5.5
+399.4 2.0
+400.7 2.0
+403.5 2.5
+404.3 3.4
+410.1 1.6
+413.3 1.2
+418.4 1.2
+426.5 6.1
+430.3 9.5
+430.9 3.5
+431.6 4.0
+436.1 1.7
+440.3 1.6
+441.0 1.2
+442.4 2.4
+443.2 2.9
+444.4 2.2
+449.4 1.7
+453.3 1.2
+454.3 11.3
+455.3 4.8
+459.4 1.2
+460.1 2.0
+466.2 3.2
+470.6 1.7
+473.1 1.8
+489.1 2.9
+495.6 2.0
+499.1 7.4
+501.5 1.6
+506.5 1.5
+507.5 4.5
+509.1 1.8
+510.7 2.0
+513.5 3.4
+514.4 3.4
+518.8 2.5
+522.4 3.7
+523.4 8.8
+524.8 11.3
+526.4 4.0
+529.6 9.5
+540.6 29.5
+541.3 57.5
+542.3 50.2
+542.9 3.5
+550.9 5.0
+579.3 2.9
+595.2 3.2
+610.3 3.5
+629.5 2.7
+659.5 11.1
+685.4 3.0
+688.9 3.2
+710.3 2.5
+720.2 5.5
+726.5 4.1
+734.6 2.5
+738.5 1.7
+747.1 1.2
+832.5 5.1
+844.6 3.4
+859.4 3.5
+866.5 8.6
+890.2 2.9
+908.5 5.5
+917.5 2.5
+922.7 2.5
+933.7 2.0
+970.7 4.4
+S	80	80	509.27
+I	ID	149
+I	RTime	7.2660
+Z	2	1017.53
+143.9 1.3
+155.2 10.5
+157.1 2.2
+161.1 8.8
+169.1 2.2
+172.3 10.6
+172.9 0.8
+178.2 7.0
+181.0 1.7
+187.1 28.2
+187.8 2.7
+195.4 4.3
+198.2 1.1
+201.1 5.5
+205.3 1.1
+215.1 22.3
+216.1 1.2
+224.0 2.0
+230.3 1.0
+234.1 1.3
+236.9 1.2
+239.4 3.7
+240.1 1.7
+241.2 1.6
+243.9 3.0
+246.9 4.1
+257.1 20.5
+258.3 7.9
+259.4 2.2
+266.1 2.0
+271.0 0.6
+272.2 12.1
+275.2 46.0
+276.5 5.0
+283.4 5.5
+284.1 5.1
+289.3 40.2
+290.4 10.8
+291.2 1.7
+293.0 14.1
+295.0 48.2
+296.0 1.1
+300.4 2.0
+301.3 3.7
+305.2 2.0
+311.1 2.9
+313.5 1.7
+314.5 1.8
+322.3 0.8
+325.2 1.8
+326.4 8.8
+327.1 1.6
+329.2 2.5
+335.0 3.0
+343.1 17.8
+344.4 1.8
+349.1 1.1
+352.6 3.0
+353.4 4.5
+355.4 2.9
+359.3 1.2
+363.1 6.1
+369.1 2.2
+370.9 1.7
+372.4 2.7
+376.2 1.7
+381.1 3.5
+382.2 1.6
+383.1 5.4
+384.2 7.3
+386.0 3.7
+391.5 1.3
+393.1 24.7
+393.8 68.0
+394.5 3.4
+396.0 4.5
+396.8 7.4
+400.5 54.0
+401.2 3.4
+402.4 53.2
+403.3 8.1
+404.4 3.0
+409.5 14.6
+410.1 1.0
+411.2 4.1
+414.3 10.1
+415.2 2.7
+418.2 4.0
+419.3 1.2
+422.2 9.6
+423.8 1.2
+426.1 5.0
+427.1 1.6
+427.8 4.5
+434.7 10.3
+440.0 6.5
+441.3 3.4
+443.4 1.0
+444.2 1.8
+445.0 2.0
+448.3 3.0
+451.6 2.7
+452.2 5.0
+454.1 1.7
+455.9 6.5
+456.9 9.6
+458.0 28.2
+461.3 13.5
+463.3 3.4
+465.1 28.2
+468.3 3.7
+468.9 6.6
+470.1 2.2
+472.2 3.5
+474.0 55.0
+475.1 14.8
+476.0 6.9
+477.0 3.5
+478.7 7.1
+479.4 6.6
+482.8 2.2
+484.4 14.8
+485.0 2.9
+487.0 5.5
+488.4 1.1
+489.5 1.0
+491.9 76.0
+493.4 11.8
+494.3 1.3
+497.4 2.0
+498.2 3.5
+500.2 46.5
+500.8 55.0
+525.2 5.0
+526.2 1.7
+529.2 12.6
+530.3 6.0
+540.3 4.0
+543.3 14.3
+544.3 2.4
+554.3 2.2
+556.8 3.4
+557.4 14.3
+558.3 4.5
+582.2 5.9
+583.0 10.6
+586.4 9.5
+587.3 3.0
+596.1 2.2
+600.2 6.0
+604.4 17.1
+605.4 4.9
+611.3 8.3
+614.6 4.9
+618.5 9.8
+619.5 8.5
+623.3 4.4
+625.4 2.2
+628.3 19.2
+629.3 8.3
+639.5 8.3
+643.3 0.8
+648.4 2.2
+654.5 6.5
+657.5 4.0
+658.5 5.9
+659.4 3.5
+672.0 2.0
+674.5 1.2
+675.3 96.5
+676.4 14.8
+684.4 0.8
+686.4 1.2
+689.4 20.1
+690.3 7.0
+692.5 4.5
+694.3 3.2
+707.0 1.2
+708.4 1.2
+711.2 11.1
+712.3 2.4
+725.0 4.5
+726.4 10.5
+729.2 22.6
+730.2 19.5
+735.4 3.4
+743.3 81.4
+744.3 15.1
+746.6 1.6
+768.3 7.6
+769.2 2.2
+772.7 2.5
+773.4 2.9
+775.2 3.0
+785.5 1.6
+786.3 44.9
+787.3 2.0
+799.7 2.7
+801.6 2.7
+802.3 3.0
+803.4 93.5
+804.5 18.1
+817.4 19.3
+818.7 4.5
+838.4 3.7
+857.2 3.5
+858.5 3.5
+861.2 1.8
+871.7 6.5
+888.6 3.2
+889.5 6.9
+890.5 1.5
+947.6 3.5
+S	81	81	427.38
+I	ID	196
+I	RTime	9.6795
+Z	2	853.75
+127.2 1.5
+129.0 13.1
+130.3 1.2
+136.2 19.5
+138.1 1.1
+141.1 1.3
+143.1 1.0
+152.1 1.2
+154.9 2.2
+158.0 2.7
+159.9 1.2
+168.2 1.8
+175.2 4.9
+185.3 1.2
+197.3 1.1
+203.2 2.2
+209.3 2.0
+211.1 3.7
+218.9 1.5
+235.9 1.0
+238.6 6.9
+240.1 1.3
+241.1 1.3
+246.3 8.6
+247.3 1.2
+249.1 1.3
+251.2 5.5
+252.2 3.7
+256.9 1.1
+258.3 1.2
+268.5 16.1
+269.2 30.7
+270.9 2.9
+281.1 6.5
+287.0 19.1
+292.2 3.7
+296.3 2.5
+296.9 1.7
+298.7 7.6
+299.3 1.7
+300.1 2.5
+303.6 4.0
+312.1 6.1
+313.1 2.2
+318.5 4.8
+320.5 7.3
+323.3 7.0
+324.2 4.9
+327.2 1.0
+329.2 4.0
+330.0 4.1
+334.5 4.3
+337.4 2.7
+343.5 3.2
+347.3 5.3
+348.2 16.2
+349.9 40.2
+350.8 11.1
+352.2 1.6
+358.1 4.3
+361.1 1.5
+362.8 122.8
+363.8 9.8
+366.1 11.0
+368.2 7.3
+369.1 5.0
+369.9 3.0
+377.1 2.2
+378.4 2.4
+379.5 3.7
+382.4 1.7
+383.3 3.2
+385.3 3.2
+392.4 2.7
+394.2 13.3
+397.2 2.2
+402.3 4.5
+405.5 5.3
+409.3 8.1
+410.2 12.3
+411.2 9.5
+412.5 1.3
+417.8 31.8
+418.8 20.2
+440.5 1.6
+470.2 5.4
+472.0 3.5
+476.1 1.3
+477.5 4.5
+479.3 4.6
+493.2 3.0
+513.9 3.7
+527.2 7.1
+528.5 3.9
+547.5 3.0
+554.4 5.8
+570.7 2.0
+575.3 1.3
+577.1 2.9
+585.4 4.1
+586.5 9.5
+587.2 1.1
+599.4 1.8
+608.3 5.5
+609.1 4.0
+611.2 1.8
+612.6 2.9
+617.4 1.2
+619.9 2.4
+626.3 3.7
+627.5 1.3
+634.4 3.9
+639.0 1.8
+644.0 3.9
+669.2 2.2
+675.1 1.6
+679.3 1.5
+684.3 4.5
+690.6 1.6
+698.3 57.0
+699.5 20.2
+700.6 10.8
+705.5 1.5
+714.0 2.4
+715.8 3.2
+717.4 1.7
+723.4 6.5
+724.4 3.5
+726.4 5.9
+753.6 3.0
+830.5 1.2
+S	82	82	452.85
+I	ID	73
+I	RTime	3.3514
+Z	2	904.69
+Z	3	1356.53
+169.0 1.3
+179.0 1.0
+179.9 1.3
+185.2 2.0
+186.2 2.9
+197.1 3.2
+202.1 1.2
+210.0 3.0
+217.1 7.9
+218.2 1.6
+234.2 1.7
+236.2 3.0
+237.1 2.4
+237.8 1.5
+238.9 2.5
+248.1 1.0
+253.1 4.0
+256.8 5.9
+258.3 1.7
+263.3 1.8
+264.9 1.0
+269.1 1.2
+271.0 1.7
+283.1 1.0
+293.2 1.6
+294.0 1.3
+303.0 1.2
+307.4 8.8
+308.2 2.0
+312.9 1.5
+316.2 0.8
+319.1 4.6
+323.9 1.6
+325.1 57.2
+325.8 2.5
+329.1 2.2
+343.0 2.0
+345.8 2.2
+347.3 12.1
+359.7 1.2
+360.8 3.9
+370.3 2.4
+373.0 7.0
+375.1 2.0
+377.7 5.9
+379.3 1.1
+382.2 3.5
+384.4 3.4
+389.7 2.9
+391.1 3.7
+397.0 2.7
+398.7 2.4
+400.0 4.5
+407.1 1.5
+408.3 3.7
+409.7 3.2
+410.7 5.1
+411.3 3.7
+415.2 9.8
+416.0 8.5
+416.9 7.8
+417.7 3.7
+421.4 5.4
+422.9 1.5
+424.8 3.5
+426.2 7.5
+432.1 2.4
+433.2 24.5
+434.5 13.0
+435.4 3.0
+437.3 2.2
+439.3 4.5
+441.4 4.8
+444.0 25.5
+445.2 14.3
+451.1 1.7
+484.5 3.5
+485.5 8.5
+489.4 6.6
+490.6 7.5
+492.2 7.9
+508.1 3.2
+536.3 3.5
+541.2 29.3
+544.4 2.2
+547.2 2.7
+548.5 4.0
+549.8 6.5
+551.4 1.7
+557.9 4.0
+561.9 5.5
+565.2 3.9
+566.4 11.6
+567.6 5.1
+571.4 1.2
+580.1 2.2
+583.8 2.5
+586.8 14.6
+605.4 1.1
+613.3 3.4
+661.2 3.0
+676.5 2.0
+721.3 5.0
+778.7 2.2
+S	83	83	468.80
+I	ID	82
+I	RTime	3.8251
+Z	2	936.59
+Z	3	1404.38
+147.2 6.1
+151.1 1.3
+158.9 1.1
+161.2 2.0
+171.3 3.2
+172.9 1.2
+175.0 3.4
+181.1 4.3
+193.3 2.0
+195.0 7.0
+196.5 3.2
+199.3 2.0
+204.1 2.7
+208.3 3.2
+209.1 8.8
+209.7 4.9
+217.5 2.9
+222.2 2.2
+226.1 59.0
+227.2 2.7
+239.2 0.6
+240.3 2.7
+240.9 1.0
+244.2 87.0
+245.2 1.7
+248.3 5.6
+249.4 4.8
+252.2 1.7
+253.1 2.4
+254.0 3.2
+257.4 0.8
+258.3 6.5
+260.1 4.5
+263.3 2.0
+265.4 1.2
+266.1 6.0
+269.9 1.3
+272.5 1.7
+275.8 2.4
+277.2 2.7
+280.2 3.0
+281.3 4.0
+282.8 7.5
+289.4 2.9
+291.1 4.9
+292.1 0.8
+294.0 4.1
+296.3 0.6
+297.3 8.3
+299.3 0.8
+301.4 0.8
+305.3 1.5
+308.1 3.5
+309.3 1.2
+311.1 12.5
+312.2 11.8
+313.3 2.2
+322.0 24.0
+323.4 4.5
+324.0 6.4
+325.3 1.8
+327.3 2.0
+329.0 5.0
+329.6 3.7
+333.1 2.9
+337.0 2.5
+338.3 14.3
+339.2 13.3
+340.2 43.2
+341.2 81.1
+341.9 1.6
+347.3 47.5
+352.0 1.2
+353.2 8.8
+354.3 14.8
+356.6 5.4
+361.1 1.3
+362.3 4.3
+363.2 1.2
+364.3 2.5
+367.5 1.2
+368.6 7.4
+369.4 3.5
+376.4 2.2
+377.3 11.0
+383.2 1.6
+387.3 15.5
+390.9 2.2
+392.5 0.8
+394.2 5.0
+395.8 34.5
+396.5 22.8
+397.2 4.4
+400.5 10.8
+401.2 15.5
+403.6 3.9
+405.0 253.0
+406.4 5.5
+408.6 10.3
+409.4 10.5
+410.1 2.7
+411.5 12.5
+413.4 1.3
+415.8 33.2
+419.3 25.7
+420.3 17.7
+421.3 4.5
+422.2 15.3
+423.5 42.9
+424.8 11.5
+425.5 27.5
+427.2 13.6
+428.1 1.5
+430.0 32.2
+430.7 2.9
+431.5 2.5
+432.3 2.2
+433.2 10.1
+434.0 11.8
+436.2 8.3
+437.3 1.2
+438.3 3.0
+439.3 40.2
+440.0 6.3
+440.9 2.2
+442.5 1.3
+445.8 4.9
+447.0 5.4
+450.1 91.5
+451.1 177.0
+452.2 9.3
+453.3 1.5
+455.4 8.3
+460.0 1182.8
+461.0 9.1
+462.5 1.6
+485.7 4.9
+487.5 3.5
+498.5 1.3
+504.4 8.8
+505.3 9.8
+506.3 4.5
+507.3 6.0
+508.0 2.4
+508.8 1.0
+510.5 0.6
+520.6 1.0
+531.4 3.7
+536.6 1.7
+542.7 3.9
+545.5 63.5
+546.5 1.6
+564.5 5.5
+581.4 2.4
+583.7 1.8
+594.2 1.7
+595.3 3.4
+596.1 3.0
+598.5 0.8
+599.5 4.6
+601.6 3.2
+606.3 1.8
+615.8 2.7
+634.5 3.4
+651.4 5.3
+653.3 2.2
+654.4 2.4
+665.6 8.1
+666.8 1.7
+676.4 5.5
+688.3 5.5
+693.4 311.7
+694.4 109.1
+712.7 2.5
+721.3 0.8
+724.7 2.4
+734.1 3.2
+749.5 11.3
+762.7 2.5
+763.4 4.0
+785.5 2.4
+791.6 3.5
+808.6 10.3
+809.2 3.7
+819.8 2.0
+823.6 2.0
+836.5 1.3
+837.5 23.5
+838.3 6.5
+859.4 2.5
+877.7 2.2
+S	84	84	440.06
+I	ID	202
+I	RTime	9.9938
+Z	2	879.11
+129.1 1.7
+138.0 1.2
+148.2 2.2
+151.3 2.0
+155.3 2.2
+158.2 1.6
+172.9 1.5
+175.3 7.6
+178.3 1.8
+184.2 2.0
+189.0 0.8
+200.0 1.0
+201.3 1.2
+226.0 2.9
+237.3 2.2
+244.1 3.7
+245.1 1.2
+251.4 1.7
+255.0 1.7
+258.8 0.6
+261.1 1.2
+267.5 1.0
+275.1 1.2
+281.8 4.5
+285.2 2.0
+286.1 2.2
+299.1 1.5
+305.2 2.0
+307.3 1.0
+312.3 4.0
+317.1 1.7
+326.3 6.5
+327.4 1.2
+337.6 3.0
+342.2 6.4
+360.4 2.2
+361.2 3.0
+362.2 1.7
+369.1 1.8
+372.2 3.7
+378.7 1.2
+381.7 2.4
+386.2 2.7
+387.3 3.7
+390.4 11.0
+395.2 14.0
+403.4 1.3
+404.2 5.9
+405.1 1.7
+406.0 4.1
+408.6 5.0
+409.3 3.7
+421.4 46.7
+422.3 27.8
+423.4 18.7
+430.5 26.2
+431.6 25.1
+432.4 1.7
+433.3 8.6
+515.0 3.5
+518.3 2.7
+523.3 2.2
+546.5 2.7
+548.1 1.7
+551.2 3.2
+558.9 5.0
+561.2 2.4
+562.2 5.0
+564.6 1.8
+576.4 1.6
+587.2 2.4
+615.4 1.5
+634.4 1.6
+636.5 1.1
+649.1 1.2
+651.4 2.7
+652.3 2.5
+660.1 1.2
+677.1 8.3
+678.3 9.6
+704.3 2.2
+729.6 1.2
+749.4 5.0
+752.3 4.3
+778.8 1.8
+S	85	85	497.62
+Z	3	1490.84
+147.1 75.0
+156.1 47.0
+159.3 21.0
+168.2 29.9
+170.4 12.2
+200.0 16.0
+211.3 11.0
+217.5 16.0
+224.1 13.4
+225.1 43.2
+229.1 14.7
+234.2 195.5
+235.3 66.7
+242.2 80.6
+260.2 67.0
+262.2 236.5
+269.5 13.5
+272.9 28.8
+282.1 26.0
+285.9 31.1
+294.1 40.3
+297.0 37.7
+303.3 63.2
+317.4 566.6
+318.3 51.3
+329.3 331.9
+329.9 157.8
+330.8 21.4
+334.8 22.9
+338.9 132.4
+342.2 29.2
+343.7 328.1
+344.5 21.5
+346.3 35.8
+347.3 62.8
+351.4 26.0
+352.8 396.6
+353.5 28.3
+357.1 40.7
+358.4 117.0
+359.3 29.9
+371.0 33.2
+374.6 65.9
+375.3 88.0
+376.7 35.4
+380.8 24.8
+382.5 69.9
+384.6 324.3
+385.7 71.3
+391.4 22.7
+393.8 865.9
+394.9 78.2
+397.2 44.0
+398.0 52.2
+403.2 13.5
+403.8 33.0
+407.1 81.5
+408.1 25.0
+408.8 104.9
+416.3 581.0
+417.4 507.1
+418.9 16.0
+422.1 23.9
+422.8 62.8
+423.5 16.0
+424.2 89.6
+425.3 21.0
+427.6 61.2
+430.0 10.9
+431.2 11.0
+434.3 59.7
+435.3 21.0
+436.2 16.6
+438.8 27.6
+440.1 117.3
+442.1 51.8
+443.5 132.7
+446.4 101.9
+447.8 33.9
+450.5 24.8
+452.3 96.1
+453.5 144.8
+454.5 68.4
+455.3 26.0
+459.1 22.3
+460.7 52.5
+465.0 62.4
+466.4 105.6
+467.1 27.4
+468.4 33.8
+469.9 244.8
+471.7 87.2
+472.4 18.1
+473.9 590.2
+474.9 69.6
+476.8 17.7
+477.7 107.1
+479.1 16.0
+480.4 128.3
+481.4 128.4
+482.6 132.2
+483.4 153.1
+484.7 185.9
+485.5 80.7
+486.2 453.4
+487.6 87.0
+488.3 46.2
+488.9 218.4
+489.8 76.8
+504.2 121.1
+507.5 12.2
+511.3 39.8
+512.4 46.5
+517.7 38.2
+520.5 51.6
+522.2 77.5
+522.9 30.1
+526.3 18.8
+527.4 29.7
+529.4 39.3
+535.2 48.2
+537.9 155.8
+538.5 18.0
+544.4 824.0
+545.2 137.0
+548.6 37.4
+552.5 13.8
+553.5 62.5
+557.3 56.2
+558.5 16.0
+559.2 26.3
+559.9 29.2
+561.6 78.0
+563.5 79.5
+564.6 113.0
+567.8 98.4
+570.3 49.5
+571.2 23.2
+572.4 22.3
+573.1 41.4
+573.9 66.4
+575.6 42.7
+576.5 14.7
+577.7 12.2
+578.4 35.2
+582.2 19.7
+585.5 16.0
+587.3 581.8
+588.4 148.7
+589.2 135.6
+590.8 72.9
+591.5 75.1
+595.4 53.3
+596.1 31.1
+597.3 89.8
+598.2 47.4
+598.9 55.8
+600.5 20.1
+605.4 713.3
+606.2 37.5
+607.2 69.3
+608.1 62.8
+610.4 17.2
+612.7 30.2
+614.9 843.4
+615.8 439.1
+616.5 194.8
+618.8 141.1
+619.6 40.1
+622.3 71.8
+625.3 29.7
+628.7 70.8
+629.5 24.4
+635.6 59.1
+636.6 16.3
+637.8 58.8
+639.3 76.7
+640.4 38.9
+641.3 22.3
+642.7 88.5
+643.7 58.4
+645.0 153.2
+646.6 63.6
+647.4 66.7
+648.4 40.8
+650.2 38.9
+652.6 59.4
+654.8 21.0
+657.5 865.9
+658.5 302.6
+659.4 112.7
+663.5 42.0
+666.2 101.7
+668.7 154.5
+669.4 15.6
+670.2 68.5
+672.5 483.9
+673.5 98.9
+674.4 25.4
+677.3 44.7
+685.4 81.8
+686.3 522.8
+687.3 244.5
+688.3 12.3
+689.4 151.5
+692.4 18.8
+693.4 44.6
+695.3 19.8
+696.8 67.4
+697.6 36.9
+704.2 655.0
+705.3 126.1
+706.8 61.2
+716.1 23.0
+727.4 36.6
+738.6 21.1
+748.8 25.3
+750.7 44.9
+766.4 16.8
+768.3 71.1
+769.5 131.2
+781.2 23.6
+786.5 590.5
+787.5 253.1
+788.6 27.3
+792.2 27.3
+798.2 18.5
+799.4 16.6
+805.5 22.9
+815.7 122.2
+816.6 114.4
+817.4 82.0
+833.4 594.1
+834.4 88.0
+835.4 18.5
+840.1 13.5
+842.3 28.6
+856.9 16.0
+863.4 83.3
+874.4 22.3
+885.5 65.7
+886.4 17.6
+946.2 53.6
+1044.4 32.6
+1056.4 25.4
+1074.7 216.3
+1075.5 59.9
+1082.8 24.8
+1083.5 13.5
+1097.9 38.4
+1112.8 27.3
+1174.6 18.4
+1213.5 41.4
+1230.1 26.7
+1230.7 100.2
+1231.7 24.8
+S	86	86	713.07
+I	ID	182
+I	RTime	8.9765
+Z	1	713.07
+212.0 2.0
+247.2 8.3
+275.2 5.9
+276.9 1.7
+292.2 19.8
+323.4 1.7
+326.4 4.3
+340.1 1.2
+341.3 2.5
+366.1 1.0
+369.2 3.0
+377.1 4.0
+379.3 2.9
+384.4 1.1
+390.7 1.5
+391.6 2.7
+393.2 4.5
+395.3 1.1
+404.4 1.8
+420.3 2.0
+429.1 2.4
+438.2 14.3
+439.5 7.4
+440.2 1.7
+444.5 1.0
+446.2 3.4
+447.2 3.2
+453.1 3.4
+456.2 2.7
+457.6 1.6
+463.4 3.4
+465.1 2.2
+470.4 2.5
+475.1 1.2
+476.3 5.0
+479.4 1.0
+485.2 2.5
+487.2 3.0
+488.0 1.7
+492.9 3.5
+496.5 5.6
+497.1 1.6
+498.1 15.1
+499.3 11.5
+500.2 3.0
+505.2 7.6
+510.2 1.5
+511.2 2.2
+531.4 3.7
+538.4 6.0
+539.7 1.7
+550.4 6.0
+553.3 3.0
+554.9 4.1
+556.2 3.2
+563.4 1.7
+566.2 1.3
+567.1 4.3
+584.3 6.0
+585.4 1.2
+586.1 1.5
+592.1 9.3
+614.9 1.3
+618.5 4.0
+635.6 1.0
+652.5 2.9
+659.6 12.8
+660.9 5.0
+668.4 5.9
+677.8 14.8
+678.5 10.1
+680.5 2.7
+684.1 2.0
+694.3 10.6
+695.3 33.9
+696.2 20.0
+827.1 1.7
+849.6 1.7
+944.8 1.2
+1089.7 2.0
+1248.4 3.9
+1249.5 2.2
+S	87	87	501.13
+I	ID	214
+I	RTime	10.5914
+Z	2	1001.25
+Z	3	1501.37
+144.9 1.2
+148.1 1.2
+156.0 6.0
+157.4 5.5
+171.1 3.7
+175.3 1.7
+187.1 2.2
+192.9 1.3
+195.3 2.7
+199.1 1.2
+222.2 2.7
+227.1 3.9
+232.1 3.9
+233.1 4.0
+238.2 1.6
+239.5 1.1
+240.2 3.9
+244.2 19.1
+257.2 5.0
+258.1 12.3
+260.3 1.6
+266.2 3.0
+267.3 2.7
+268.1 1.5
+271.7 3.5
+273.5 2.4
+274.3 1.5
+275.2 3.5
+281.3 3.2
+283.1 13.8
+284.0 3.2
+285.1 5.3
+287.2 4.0
+297.4 3.0
+300.2 22.6
+303.1 1.7
+309.0 1.0
+312.4 2.2
+313.2 5.1
+314.2 2.4
+315.8 3.9
+317.3 1.6
+327.4 7.5
+330.3 1.8
+332.3 1.2
+338.3 2.9
+343.1 1.7
+344.0 2.2
+345.4 2.0
+350.6 1.1
+354.2 9.3
+355.4 7.8
+356.1 5.6
+366.4 2.2
+371.2 4.1
+372.2 12.1
+373.3 4.4
+378.2 2.2
+381.4 2.0
+382.3 3.9
+386.3 11.8
+388.4 6.4
+401.4 2.7
+406.3 2.0
+407.6 4.0
+409.3 2.7
+414.6 8.8
+415.3 1.5
+424.1 2.7
+429.0 3.0
+431.3 3.9
+434.7 1.7
+437.6 8.6
+439.2 4.6
+440.4 4.6
+441.5 4.5
+448.4 3.2
+449.3 8.8
+450.4 3.9
+451.3 3.7
+453.0 5.1
+455.1 11.8
+456.4 5.8
+457.4 1.2
+459.2 0.8
+460.2 1.3
+465.3 15.6
+466.4 26.0
+467.4 19.0
+469.1 2.7
+474.0 6.4
+479.3 5.9
+483.0 26.2
+484.2 87.5
+485.3 5.0
+486.2 1.7
+488.5 4.8
+492.1 52.5
+492.9 57.2
+543.1 8.0
+588.7 1.7
+596.5 3.0
+612.9 7.8
+615.3 3.2
+623.4 2.0
+629.5 12.1
+630.6 4.3
+636.2 2.5
+652.4 2.0
+658.2 1.5
+670.4 1.2
+673.5 5.6
+692.5 1.8
+696.4 1.2
+700.6 2.5
+705.3 2.5
+713.6 1.2
+715.5 1.2
+719.0 3.4
+743.1 9.1
+743.9 6.4
+755.3 3.0
+757.4 1.3
+794.6 1.5
+808.4 6.3
+824.5 3.2
+854.5 3.0
+856.5 6.5
+865.4 2.4
+S	88	88	419.32
+I	ID	218
+I	RTime	10.7855
+Z	2	837.63
+127.0 7.0
+128.3 1.8
+129.2 6.4
+130.0 1.3
+137.2 1.7
+144.1 7.1
+149.1 1.7
+155.0 8.3
+158.1 3.0
+161.0 3.2
+162.2 2.0
+168.1 1.6
+169.0 2.0
+171.2 2.5
+174.1 5.6
+175.1 25.2
+177.3 1.0
+178.2 1.3
+198.2 1.8
+200.6 3.5
+203.2 6.5
+204.1 2.5
+205.2 2.4
+208.3 6.9
+217.0 1.5
+218.2 1.0
+223.1 3.5
+226.2 9.8
+226.8 1.5
+228.4 1.8
+229.2 1.2
+235.2 1.5
+240.3 3.5
+241.2 2.7
+245.1 1.6
+246.3 2.5
+248.3 2.7
+249.2 3.9
+255.1 8.5
+256.2 2.2
+257.4 1.8
+260.1 6.9
+268.4 3.9
+272.4 15.1
+273.2 3.2
+274.2 1.2
+275.0 11.8
+277.5 7.0
+282.7 1.2
+283.3 3.9
+284.1 2.7
+286.2 2.5
+287.3 2.5
+288.3 4.3
+290.3 15.3
+291.3 13.3
+293.2 4.9
+300.7 2.7
+303.2 2.0
+304.2 29.6
+307.5 1.2
+310.2 1.1
+311.2 1.7
+314.4 1.5
+315.3 4.5
+322.2 4.6
+324.0 1.7
+325.4 1.2
+328.1 2.2
+329.2 22.3
+330.9 11.5
+336.0 1.7
+337.8 3.2
+340.9 7.0
+341.9 11.3
+346.8 4.6
+347.4 1.2
+349.0 7.6
+349.8 3.2
+352.1 1.7
+357.1 1.6
+366.2 1.2
+367.3 1.8
+370.1 17.5
+373.3 2.4
+375.3 3.4
+383.2 7.4
+384.3 19.7
+385.1 4.1
+386.7 9.3
+387.4 11.3
+391.0 4.9
+394.0 6.5
+395.1 1.1
+396.2 6.6
+399.2 1.7
+401.2 192.1
+402.3 29.7
+403.3 10.1
+404.7 4.5
+406.7 18.7
+407.6 13.0
+409.8 40.2
+410.9 34.9
+412.9 19.7
+437.2 3.7
+446.0 1.8
+468.3 2.0
+486.0 3.0
+491.2 11.5
+492.4 2.9
+508.4 4.6
+510.7 6.5
+520.9 1.3
+535.1 2.4
+537.7 1.5
+540.2 8.1
+541.9 4.4
+548.4 1.2
+551.3 4.3
+552.0 4.1
+554.3 36.4
+555.3 18.2
+556.3 1.8
+561.4 1.0
+565.1 2.2
+567.3 4.1
+589.3 2.9
+590.5 2.7
+594.0 4.5
+600.4 2.4
+605.6 1.7
+606.3 1.2
+609.2 1.7
+611.5 68.0
+612.4 12.6
+613.6 3.7
+620.7 1.8
+625.3 1.7
+628.6 2.2
+640.4 1.7
+644.3 2.2
+657.5 9.3
+662.4 1.2
+682.5 76.8
+683.4 22.5
+684.5 5.5
+689.4 2.0
+704.4 1.2
+708.7 2.2
+709.4 2.9
+720.3 2.4
+737.4 5.1
+S	89	89	452.85
+I	ID	222
+I	RTime	10.9799
+Z	2	904.69
+Z	3	1356.53
+129.2 2.5
+131.0 1.7
+148.3 1.6
+160.9 1.2
+164.1 1.3
+175.1 2.4
+180.0 2.0
+183.0 3.2
+184.1 22.1
+187.2 2.0
+189.4 0.8
+200.2 1.1
+201.1 5.5
+203.1 1.5
+209.0 1.7
+212.3 3.7
+216.2 5.4
+217.2 1.2
+218.0 1.3
+219.3 1.2
+227.2 1.7
+231.1 7.5
+234.2 1.1
+238.0 1.7
+239.3 0.8
+249.4 1.3
+250.1 2.2
+253.1 1.0
+254.1 2.2
+260.3 2.0
+262.0 1.7
+263.9 1.5
+272.2 1.8
+278.9 1.2
+290.1 3.0
+291.1 9.8
+303.5 1.2
+304.3 1.3
+306.1 2.2
+307.1 13.8
+307.8 4.3
+319.8 3.7
+321.4 2.2
+322.3 1.8
+323.1 1.7
+324.2 20.0
+325.3 7.9
+328.4 1.3
+338.3 27.6
+339.3 1.1
+340.0 3.2
+342.9 1.2
+345.4 3.4
+347.0 1.2
+357.3 2.2
+359.1 6.3
+360.6 3.2
+371.4 1.6
+378.1 2.2
+381.3 3.0
+389.0 1.6
+390.1 5.0
+392.2 1.6
+394.2 3.7
+395.5 1.1
+399.3 6.0
+400.4 7.0
+403.6 28.7
+404.6 5.1
+410.2 6.0
+411.3 4.9
+412.2 3.2
+413.1 1.1
+413.8 2.0
+416.2 9.5
+417.3 2.2
+418.3 13.6
+420.4 10.1
+426.3 11.0
+434.4 29.5
+435.3 124.4
+436.1 0.5
+441.5 6.6
+443.8 73.9
+444.7 3.0
+445.5 4.0
+447.1 4.0
+469.4 2.5
+475.1 3.2
+489.4 2.5
+490.4 1.7
+508.1 5.0
+515.4 2.2
+531.3 7.5
+549.3 3.2
+558.3 2.7
+565.1 11.6
+577.3 1.8
+578.7 2.0
+590.5 1.8
+601.2 3.2
+603.6 1.1
+609.4 2.0
+617.8 2.5
+628.5 1.2
+632.6 1.5
+657.5 2.0
+660.5 1.8
+661.4 3.4
+668.4 4.0
+678.4 20.2
+704.5 2.5
+712.4 6.5
+719.2 1.2
+743.2 3.4
+744.6 4.8
+747.4 2.7
+760.4 2.7
+776.4 5.3
+807.4 2.0
+854.6 1.1
+882.5 1.7
+S	90	90	1032.00
+Z	3	3093.98
+312.3 1.0
+315.3 3.4
+324.2 1.7
+325.4 6.8
+330.0 1.1
+338.4 0.6
+342.2 6.9
+344.0 1.0
+354.0 0.2
+356.2 0.2
+359.2 2.1
+361.4 2.0
+366.2 1.2
+371.4 5.8
+373.4 1.8
+382.5 4.3
+385.1 0.6
+386.0 0.9
+389.2 8.7
+390.3 2.3
+412.2 0.5
+413.3 2.8
+414.5 1.1
+415.2 0.4
+428.3 1.1
+436.6 0.4
+442.0 2.6
+443.3 2.0
+448.5 0.9
+452.9 6.4
+454.4 6.6
+458.6 3.6
+466.3 1.6
+470.3 1.7
+472.4 1.1
+494.0 6.0
+495.4 1.2
+496.4 1.5
+498.1 4.7
+500.6 3.9
+501.4 0.6
+504.5 11.1
+510.4 0.7
+519.2 2.1
+521.4 1.4
+525.2 1.7
+529.3 2.9
+533.9 2.9
+541.3 2.7
+548.4 4.0
+550.5 1.7
+551.4 2.7
+552.4 0.3
+554.3 2.1
+556.8 3.1
+569.5 0.5
+571.8 9.5
+572.5 14.6
+579.2 3.1
+580.3 2.5
+583.4 6.0
+584.3 0.6
+590.0 0.4
+593.3 1.8
+601.7 2.5
+608.1 2.6
+614.3 0.6
+616.4 1.8
+618.4 5.2
+620.0 0.7
+621.4 0.6
+625.2 5.1
+638.5 1.9
+639.7 3.8
+640.4 0.3
+641.7 1.7
+644.9 1.3
+646.0 4.3
+647.1 4.0
+648.1 3.0
+648.9 1.8
+650.4 4.1
+653.4 1.4
+666.7 3.3
+670.7 3.4
+672.4 2.4
+673.3 1.4
+674.2 1.2
+689.4 42.9
+690.3 8.6
+691.5 0.7
+693.0 3.7
+696.2 2.5
+697.7 1.7
+698.6 2.9
+700.9 2.2
+703.2 2.8
+707.3 25.0
+710.5 2.8
+713.6 0.5
+715.3 1.5
+716.5 1.0
+718.5 2.1
+719.9 0.7
+722.5 2.6
+724.6 4.6
+729.8 0.8
+732.9 0.8
+734.4 0.5
+736.3 2.0
+737.2 1.2
+740.6 1.9
+745.4 6.6
+746.5 1.6
+747.3 0.7
+749.3 1.4
+753.2 4.6
+753.9 1.6
+754.8 4.5
+756.2 4.9
+757.4 1.4
+758.8 7.2
+759.7 4.8
+760.6 4.8
+762.2 7.3
+763.0 3.0
+765.4 3.1
+766.5 5.3
+767.6 4.7
+769.1 19.7
+770.6 4.9
+771.3 100.9
+773.1 8.2
+774.6 1.8
+776.6 3.1
+778.1 399.8
+779.1 46.1
+780.1 5.4
+781.8 4.8
+783.5 2.6
+784.7 0.9
+786.6 0.9
+788.5 1.8
+789.4 1.3
+793.6 4.4
+795.5 4.9
+797.0 1.6
+801.3 1.3
+802.7 4.1
+803.8 3.5
+805.3 11.1
+808.4 0.3
+810.7 1.3
+811.6 0.8
+817.3 1.2
+818.5 2.8
+819.9 1.6
+820.6 3.1
+821.6 3.5
+823.4 0.5
+824.5 0.9
+825.4 7.2
+826.8 6.4
+827.6 2.9
+828.2 3.0
+831.1 5.0
+833.1 29.7
+833.9 11.9
+835.6 3.2
+836.3 6.0
+842.2 96.8
+843.0 9.4
+843.7 7.6
+845.4 3.1
+848.6 7.1
+849.4 2.5
+850.5 5.3
+851.3 3.1
+853.6 11.2
+856.5 5.9
+857.2 12.4
+858.2 2.7
+859.5 0.8
+860.5 6.5
+861.5 1.5
+863.8 2.1
+865.9 9.5
+866.5 1.9
+867.7 1.8
+869.1 1.4
+870.1 2.0
+871.0 4.4
+871.7 0.5
+875.1 1.8
+876.2 1.2
+877.0 5.4
+878.4 6.1
+879.2 13.3
+881.4 6.6
+883.2 5.6
+884.1 9.0
+885.0 1.6
+885.6 3.3
+886.5 0.7
+887.3 3.1
+888.0 0.5
+889.9 1.8
+890.7 3.6
+891.5 2.4
+893.6 2.7
+895.2 4.9
+895.9 10.6
+896.7 5.8
+898.0 2.1
+901.0 5.6
+904.5 2.7
+905.6 7.9
+908.2 4.2
+908.9 7.3
+909.7 6.5
+910.6 6.0
+911.6 2.5
+913.9 11.7
+916.2 9.4
+917.5 31.0
+918.2 11.8
+918.9 9.9
+919.6 1.8
+922.1 8.5
+924.0 2.1
+930.8 19.2
+931.8 19.6
+932.7 5.6
+934.2 8.0
+935.7 4.9
+936.7 6.9
+938.3 2.6
+939.2 7.0
+940.3 476.3
+941.2 33.1
+942.1 31.6
+943.2 18.1
+944.5 15.0
+945.2 2.3
+947.0 22.6
+948.2 9.9
+952.0 3.1
+952.7 8.0
+954.2 7.6
+955.1 4.9
+956.2 7.2
+957.1 3.0
+958.5 11.7
+960.2 14.7
+961.2 10.8
+963.5 6.4
+964.7 1.0
+966.7 5.7
+968.5 25.1
+969.3 8.1
+970.4 21.9
+971.8 16.9
+972.8 20.5
+973.8 9.9
+974.7 11.8
+975.5 12.1
+976.6 14.4
+977.2 162.4
+978.4 26.7
+979.3 16.7
+979.9 2.7
+980.7 1.2
+981.4 3.5
+982.6 12.9
+983.5 24.3
+984.4 12.9
+985.3 7.5
+986.6 1.8
+987.9 24.1
+988.7 1.7
+990.6 17.0
+991.7 24.6
+992.5 18.6
+993.3 14.4
+995.1 2.3
+995.7 7.9
+996.5 18.0
+997.2 10.7
+998.4 26.3
+999.8 15.3
+1000.8 18.7
+1002.1 3.8
+1003.5 2.7
+1004.4 20.9
+1005.4 15.6
+1006.4 36.1
+1008.5 40.0
+1009.3 34.8
+1010.4 9.4
+1011.1 15.0
+1012.9 23.6
+1014.0 7.6
+1014.8 9.2
+1015.4 8.1
+1016.3 18.1
+1017.4 27.6
+1018.4 1.4
+1020.6 17.0
+1022.4 5.6
+1031.1 1.2
+1031.9 1.1
+1032.9 2.0
+1040.5 0.3
+1041.7 4.6
+1047.0 1.6
+1053.0 3.6
+1056.8 2.2
+1058.6 3.0
+1060.6 1.9
+1061.4 0.2
+1063.5 0.4
+1066.7 0.5
+1067.5 1.4
+1069.5 1.8
+1070.6 4.2
+1077.5 5.7
+1079.1 2.6
+1080.9 4.5
+1083.6 3.9
+1087.5 11.4
+1088.5 1.0
+1089.5 7.8
+1090.4 7.1
+1091.9 5.7
+1094.2 3.1
+1098.9 1.0
+1100.9 4.0
+1102.3 8.2
+1104.6 4.8
+1105.6 2.5
+1109.0 7.6
+1110.3 5.3
+1111.3 0.7
+1120.6 1.0
+1124.4 2.7
+1125.8 4.3
+1133.3 1.0
+1135.0 1.3
+1137.7 2.4
+1138.7 8.4
+1141.0 0.8
+1142.6 128.0
+1143.6 53.8
+1144.7 6.5
+1147.0 26.3
+1147.8 1.1
+1148.8 5.4
+1149.7 11.8
+1150.6 1.9
+1154.5 2.5
+1156.5 2.8
+1158.0 1.8
+1159.0 1.9
+1160.6 3.5
+1163.3 3.5
+1166.2 34.1
+1167.0 1.2
+1167.8 2.6
+1169.7 0.8
+1170.7 2.5
+1171.4 7.4
+1172.7 4.0
+1177.3 6.8
+1179.6 5.0
+1180.5 3.8
+1181.6 7.5
+1183.2 14.2
+1184.8 5.8
+1186.4 0.7
+1189.9 10.8
+1191.1 4.2
+1191.7 1.8
+1192.7 2.4
+1193.8 5.5
+1195.3 20.9
+1196.3 2.4
+1197.0 2.8
+1198.5 45.5
+1199.4 22.8
+1200.1 2.1
+1202.1 6.3
+1203.6 52.8
+1204.4 45.6
+1208.6 5.8
+1211.5 3.1
+1213.7 22.6
+1214.7 17.2
+1215.9 13.8
+1216.5 211.0
+1217.7 107.3
+1218.8 2.5
+1219.9 4.1
+1222.3 10.0
+1225.2 5.3
+1230.6 3.0
+1232.9 3.1
+1235.6 2.9
+1237.4 3.5
+1239.3 48.9
+1240.3 8.3
+1241.6 2.0
+1242.5 3.8
+1245.9 10.1
+1247.9 42.7
+1248.8 14.1
+1250.3 5.5
+1251.6 1.5
+1254.6 1.7
+1256.6 4.0
+1259.4 3.0
+1262.1 3.1
+1264.7 4.1
+1266.0 3.7
+1272.1 13.8
+1274.7 0.4
+1276.1 1.8
+1276.7 2.4
+1277.6 12.7
+1281.5 2.5
+1283.2 23.0
+1284.0 15.9
+1284.6 1.7
+1287.0 3.0
+1287.7 1.7
+1291.2 5.0
+1293.8 1.3
+1296.1 4.8
+1297.2 16.3
+1304.1 2.7
+1306.8 1.4
+1307.4 0.4
+1308.2 8.2
+1308.8 0.6
+1309.7 6.8
+1311.4 1.3
+1312.2 1.9
+1313.5 3.0
+1316.9 5.0
+1319.1 10.8
+1319.7 3.0
+1321.5 3.2
+1322.7 2.1
+1325.4 1.6
+1328.6 21.3
+1329.6 26.2
+1330.7 1.0
+1338.3 0.9
+1340.5 0.7
+1342.2 15.8
+1343.1 0.7
+1348.7 1.9
+1349.5 5.8
+1353.3 14.1
+1354.0 10.4
+1354.6 10.3
+1362.3 19.5
+1363.1 2.3
+1366.5 1.5
+1369.8 1.4
+1374.2 2.2
+1376.6 5.9
+1378.1 16.1
+1379.0 1.3
+1387.1 2.3
+1388.5 9.7
+1390.5 0.5
+1392.5 3.2
+1394.6 11.8
+1395.6 2.3
+1396.5 4.3
+1397.3 1.9
+1399.5 13.5
+1404.1 1.8
+1406.8 3.3
+1408.1 1.7
+1410.2 3.4
+1411.5 1.2
+1412.7 52.8
+1413.5 22.5
+1414.6 27.6
+1415.6 3.2
+1418.7 5.0
+1420.4 7.4
+1422.2 1.6
+1423.5 1.6
+1425.2 1.0
+1426.4 6.8
+1427.0 10.0
+1428.8 1.9
+1431.2 1.0
+1435.5 2.6
+1436.6 4.3
+1438.1 2.9
+1450.3 5.6
+1456.1 2.1
+1456.8 4.2
+1457.9 3.5
+1458.8 1.2
+1463.3 2.5
+1464.2 3.7
+1465.4 6.7
+1466.3 4.9
+1467.2 9.9
+1468.4 1.7
+1469.9 0.5
+1470.7 2.3
+1472.1 5.1
+1474.5 12.7
+1475.2 30.8
+1475.9 16.5
+1477.1 0.3
+1477.8 1.8
+1479.3 3.5
+1480.5 3.1
+1481.8 1.7
+1482.7 1.7
+1484.4 7.1
+1485.3 0.6
+1486.5 1.8
+1488.1 3.0
+1490.6 7.8
+1491.4 5.7
+1493.6 4.2
+1501.8 1.8
+1504.7 4.1
+1505.6 1.0
+1507.6 2.2
+1511.7 3.0
+1512.6 3.8
+1515.6 0.3
+1518.8 1.2
+1520.8 0.6
+1522.7 22.5
+1523.5 15.9
+1524.3 3.3
+1527.1 2.4
+1528.9 1.0
+1534.9 2.9
+1536.6 11.1
+1537.8 5.0
+1540.0 44.1
+1540.7 129.8
+1541.6 72.8
+1542.7 25.0
+1544.6 3.2
+1545.8 7.5
+1546.9 1.3
+1554.2 20.5
+1554.8 109.4
+1555.8 49.3
+1556.8 22.1
+1558.9 0.7
+1566.2 1.1
+1579.8 3.9
+1591.9 1.2
+1607.6 1.2
+1609.5 2.5
+1613.7 1.9
+1619.6 6.6
+1620.5 1.3
+1621.1 1.5
+1628.9 3.2
+1630.6 3.8
+1639.3 0.7
+1649.7 2.0
+1667.0 1.4
+1670.2 3.8
+1673.5 3.1
+1680.7 1.0
+1682.3 3.3
+1683.9 5.8
+1687.0 0.9
+1688.8 4.3
+1697.2 1.6
+1715.2 3.4
+1719.0 1.4
+1726.2 3.0
+1745.6 5.7
+1749.2 6.2
+1751.8 1.3
+1759.3 2.5
+1760.2 0.3
+1761.4 7.1
+1764.1 1.6
+1773.2 0.3
+1802.4 4.4
+1813.3 0.9
+1821.2 1.2
+1838.2 3.7
+1840.0 1.6
+1854.0 1.1
+1862.8 2.1
+1864.0 2.3
+1865.4 2.4
+1880.0 3.2
+1882.6 1.2
+1884.1 2.5
+1886.1 1.2
+1894.7 1.4
+1895.5 1.4
+1902.4 0.7
+1909.4 0.7
+1912.8 0.9
+1913.4 0.4
+1918.8 0.2
+1927.0 2.5
+1934.8 1.4
+1935.9 4.2
+1946.8 1.3
+1951.4 2.3
+1953.2 10.1
+1954.0 17.3
+1966.7 1.7
+1983.6 0.6
+S	91	91	466.09
+I	ID	200
+I	RTime	9.8921
+Z	2	931.17
+155.0 1.0
+175.3 37.9
+184.3 2.7
+190.2 2.0
+195.3 3.2
+205.1 1.2
+218.1 9.0
+232.8 4.1
+249.4 3.2
+257.5 3.5
+258.3 6.4
+261.2 1.7
+264.2 2.5
+274.2 2.2
+276.2 6.0
+281.3 3.2
+284.1 1.2
+288.1 5.0
+289.2 2.2
+292.1 13.3
+301.1 1.1
+307.1 2.4
+309.9 1.2
+313.3 1.2
+316.0 4.1
+319.1 4.4
+320.1 3.9
+329.1 1.6
+338.2 14.3
+341.4 1.8
+342.3 4.4
+349.1 3.2
+351.3 6.5
+354.0 1.5
+356.5 1.8
+357.3 12.5
+358.6 12.6
+362.0 1.7
+365.1 4.5
+367.1 1.8
+375.4 11.3
+381.6 4.9
+385.1 2.4
+392.9 1.7
+399.2 3.0
+401.3 7.8
+407.4 1.5
+408.9 6.6
+412.8 2.2
+414.5 1.8
+416.6 3.2
+425.3 3.2
+429.3 2.5
+430.2 5.5
+431.2 15.8
+432.5 5.3
+434.6 4.0
+445.0 2.5
+448.4 30.0
+449.1 37.5
+449.8 14.3
+450.4 4.0
+457.2 48.0
+457.9 3.7
+497.5 2.5
+499.5 2.7
+503.3 2.0
+525.5 1.8
+533.2 3.4
+559.6 1.7
+567.4 7.3
+575.3 9.3
+579.5 1.2
+604.4 8.6
+606.7 1.8
+633.4 5.3
+637.1 3.0
+639.4 3.5
+656.2 21.5
+657.5 4.1
+667.5 1.7
+674.6 1.7
+675.4 1.1
+713.3 2.2
+714.5 1.3
+732.3 1.2
+735.5 2.7
+741.6 1.8
+767.5 1.7
+784.2 1.6
+785.6 2.0
+786.6 6.4
+792.4 1.8
+793.3 4.9
+802.4 3.5
+803.6 8.6
+804.3 5.4
+892.8 1.3
+S	92	92	497.28
+Z	3	1489.82
+147.0 73.6
+171.5 9.4
+173.2 18.1
+175.1 15.3
+187.1 12.0
+198.2 23.0
+200.7 12.0
+201.4 58.4
+202.3 5.0
+212.4 35.9
+213.1 20.3
+216.9 27.2
+226.2 15.4
+229.1 11.3
+234.0 232.9
+242.3 115.4
+243.2 61.8
+245.2 16.9
+248.1 36.2
+251.2 32.7
+252.1 16.1
+254.3 12.6
+256.5 35.5
+259.0 18.2
+260.1 90.8
+262.0 279.3
+269.2 43.9
+271.0 16.8
+272.2 18.8
+277.3 24.4
+280.8 7.3
+282.0 11.3
+283.2 29.4
+284.1 19.8
+284.8 36.1
+285.9 33.9
+290.9 19.5
+294.2 39.9
+295.4 9.9
+300.4 32.1
+302.2 10.8
+306.3 7.9
+308.2 10.9
+309.4 21.0
+311.5 21.7
+313.1 9.2
+314.4 18.2
+315.5 14.7
+317.3 345.0
+318.2 14.0
+320.6 58.1
+321.3 12.7
+323.4 9.8
+325.0 7.9
+327.5 14.0
+329.4 210.7
+330.3 144.4
+332.5 6.4
+336.7 9.3
+338.7 107.6
+340.4 23.8
+342.3 28.6
+343.7 404.2
+344.3 33.1
+345.3 18.1
+347.2 24.1
+348.3 68.1
+349.3 21.1
+352.6 286.2
+353.2 56.6
+359.9 119.2
+361.3 35.0
+362.3 14.8
+363.3 68.1
+364.2 12.6
+365.4 54.3
+366.4 84.2
+367.6 81.0
+368.3 16.5
+371.2 7.1
+371.9 6.4
+374.1 14.0
+375.2 147.7
+376.3 81.1
+377.2 12.8
+377.9 65.2
+378.6 15.5
+379.9 43.8
+381.6 59.4
+382.8 74.2
+383.5 23.6
+384.9 345.9
+386.0 9.8
+387.3 54.5
+388.4 18.2
+390.3 16.1
+391.2 28.6
+393.8 637.7
+394.5 30.2
+396.4 37.6
+397.9 40.3
+399.2 45.5
+400.0 11.3
+400.8 14.9
+402.2 47.5
+403.4 11.2
+404.8 16.1
+407.1 11.4
+408.4 94.5
+409.5 64.0
+410.5 13.3
+411.3 31.0
+412.7 14.1
+413.9 131.5
+416.2 400.2
+417.3 282.5
+418.4 12.7
+420.0 28.6
+423.2 97.9
+424.0 16.3
+426.1 111.3
+427.1 42.0
+428.0 13.3
+428.7 98.1
+430.5 77.8
+431.3 28.5
+431.9 76.4
+435.2 439.6
+437.9 31.3
+438.6 45.3
+439.3 65.3
+441.4 101.3
+442.4 35.6
+443.2 192.9
+443.9 40.8
+444.8 33.3
+445.7 45.9
+448.0 22.0
+451.6 52.4
+452.2 82.4
+453.2 36.4
+453.9 47.3
+457.4 59.3
+459.6 90.4
+460.6 132.3
+461.8 58.1
+465.0 24.6
+466.0 97.9
+467.2 66.6
+468.9 47.4
+469.5 53.8
+470.5 109.4
+471.8 134.2
+472.4 75.0
+473.8 561.1
+474.9 42.6
+475.7 92.9
+476.7 88.7
+477.6 84.1
+478.5 83.3
+479.4 522.4
+480.6 64.1
+482.4 303.9
+484.0 54.4
+485.2 499.0
+485.9 102.0
+486.7 122.1
+487.7 279.5
+488.7 326.1
+504.1 29.3
+506.4 33.6
+509.1 14.7
+522.3 20.3
+524.4 34.8
+525.3 15.6
+527.4 119.8
+528.7 48.4
+529.4 14.0
+530.4 51.5
+532.5 26.6
+537.7 177.0
+539.1 22.4
+540.2 40.3
+541.1 63.8
+542.3 15.4
+544.4 833.2
+545.5 73.1
+548.3 35.5
+555.2 5.8
+558.4 15.4
+559.4 82.4
+570.1 22.7
+571.7 66.7
+572.7 19.8
+573.6 99.0
+574.7 114.2
+578.7 86.0
+579.7 67.4
+586.2 67.0
+587.4 483.6
+588.8 92.0
+590.2 50.7
+591.0 31.2
+591.8 53.5
+593.6 27.9
+595.4 36.9
+601.3 31.3
+603.6 81.3
+605.2 516.9
+606.2 154.4
+607.1 143.5
+610.1 14.0
+611.4 68.7
+614.2 105.6
+614.9 576.3
+615.6 264.7
+616.7 85.9
+620.4 75.4
+622.3 16.8
+623.7 27.4
+626.8 52.7
+631.8 54.2
+633.3 6.4
+634.3 22.0
+635.4 27.8
+637.3 52.1
+640.4 28.1
+642.8 52.8
+643.5 64.8
+644.4 237.0
+645.0 100.6
+647.3 12.0
+650.5 55.9
+651.3 17.7
+652.3 202.8
+657.5 617.5
+658.6 30.8
+660.5 111.5
+663.3 179.9
+665.3 46.9
+666.5 41.6
+669.4 88.9
+670.3 85.5
+671.0 38.8
+672.5 341.2
+675.6 20.2
+678.8 134.4
+679.6 122.3
+680.8 8.5
+684.0 63.2
+685.2 86.4
+686.3 229.6
+687.2 42.9
+688.3 8.4
+692.3 33.9
+693.2 37.5
+695.5 30.6
+696.5 11.5
+697.3 50.0
+704.4 462.0
+705.5 23.8
+711.5 42.1
+718.5 37.7
+725.6 22.1
+727.1 18.9
+740.6 37.8
+765.8 67.3
+767.7 11.5
+768.7 104.9
+769.6 8.2
+774.7 14.8
+781.7 38.6
+786.5 820.2
+787.1 20.8
+787.7 122.9
+795.5 26.2
+797.1 44.5
+815.4 69.0
+816.3 61.3
+822.2 23.8
+823.4 10.5
+828.1 28.1
+833.3 635.7
+833.9 47.6
+834.5 36.1
+837.5 11.2
+840.6 33.3
+860.4 11.3
+864.2 24.5
+866.6 19.6
+877.2 29.3
+885.9 30.6
+887.4 65.1
+912.3 10.5
+928.4 27.1
+946.6 12.2
+951.3 17.0
+956.8 70.4
+969.5 6.4
+970.5 45.1
+980.2 15.6
+986.5 24.4
+1056.8 12.2
+1058.3 29.9
+1069.8 29.7
+1082.7 64.0
+1083.6 9.5
+1103.5 33.8
+1131.5 23.0
+1195.5 16.2
+1230.6 103.6
+1231.8 91.9
+S	93	93	693.03
+Z	2	1385.05
+199.2 9.8
+204.2 37.6
+210.2 11.1
+214.2 28.9
+215.3 7.4
+216.5 9.4
+217.2 39.3
+218.0 9.3
+219.5 16.9
+221.8 9.9
+224.0 25.7
+226.2 78.5
+226.9 31.7
+228.0 14.0
+232.4 15.1
+234.6 52.7
+237.4 11.3
+240.2 6.2
+241.1 13.1
+242.3 11.3
+243.4 8.1
+244.3 106.0
+245.2 57.4
+247.2 11.1
+250.3 8.0
+254.2 17.3
+256.1 36.4
+257.1 18.0
+258.3 7.0
+260.2 74.1
+262.3 223.5
+263.1 24.3
+272.3 8.2
+274.2 723.7
+275.3 70.7
+277.4 11.6
+278.4 6.2
+279.1 13.6
+280.7 9.7
+283.4 16.5
+284.1 8.3
+285.5 18.8
+286.3 13.9
+289.4 7.9
+293.7 7.1
+298.3 26.0
+299.4 7.3
+302.3 148.4
+303.3 27.8
+306.3 6.4
+308.1 31.2
+309.2 14.8
+310.2 16.1
+314.4 7.1
+315.1 40.8
+317.4 9.3
+318.1 19.1
+320.1 26.1
+320.9 23.4
+322.8 18.1
+324.1 32.0
+325.5 14.2
+327.5 20.7
+329.3 123.1
+330.3 71.1
+335.2 59.9
+336.2 12.7
+338.4 7.7
+344.0 38.6
+348.1 28.3
+351.2 14.1
+353.3 28.6
+354.3 34.4
+355.8 40.5
+356.7 120.5
+357.5 4.3
+358.3 19.7
+360.0 20.7
+362.3 43.4
+362.9 26.4
+364.3 14.1
+365.2 33.3
+367.2 8.5
+369.5 28.3
+370.5 38.3
+371.4 84.6
+372.4 129.2
+373.2 280.2
+374.3 68.4
+378.3 39.2
+381.4 14.3
+383.0 57.7
+385.3 24.7
+386.1 17.6
+387.5 8.2
+389.1 94.3
+390.3 559.2
+391.5 66.7
+392.3 24.8
+395.4 66.0
+401.2 674.9
+402.2 72.7
+404.3 90.0
+405.1 37.2
+406.4 30.9
+409.3 19.9
+411.4 12.7
+412.3 50.5
+414.4 28.3
+415.4 18.6
+419.2 263.3
+420.3 144.1
+425.3 17.2
+425.9 22.6
+426.5 9.5
+427.5 10.4
+429.4 34.1
+431.4 102.8
+432.7 93.4
+433.4 62.6
+434.5 19.1
+435.1 12.2
+438.6 21.7
+442.5 11.5
+443.2 33.4
+444.5 23.1
+445.4 7.6
+446.5 7.5
+449.5 93.0
+453.1 17.9
+454.0 14.3
+457.7 52.6
+458.4 10.6
+461.3 1761.5
+462.4 280.9
+463.4 57.8
+464.5 24.8
+469.1 29.9
+470.2 5.6
+471.2 5.1
+472.4 31.4
+473.2 42.7
+474.3 75.3
+475.1 23.1
+476.4 44.0
+479.1 27.9
+480.4 19.7
+482.4 37.5
+483.2 41.7
+486.4 24.0
+487.5 126.2
+488.5 42.3
+489.4 49.3
+490.4 15.8
+493.5 21.4
+494.9 81.1
+495.9 34.2
+496.8 13.3
+498.0 49.6
+500.1 115.2
+500.8 9.1
+501.6 7.3
+508.0 62.9
+509.8 72.6
+510.4 3.8
+512.9 64.4
+513.6 4.7
+515.5 30.5
+516.5 38.8
+517.3 4.2
+518.5 268.3
+519.2 12.4
+520.1 13.6
+523.4 10.4
+524.7 17.2
+527.8 107.2
+528.5 35.1
+529.7 99.0
+530.4 36.8
+531.3 219.4
+532.0 97.2
+532.7 28.4
+533.8 29.8
+534.6 11.6
+536.3 287.2
+537.5 59.5
+538.2 23.3
+542.4 36.0
+543.5 48.5
+544.6 33.6
+545.4 74.4
+546.2 100.4
+547.5 61.5
+550.5 105.1
+555.4 8.6
+556.8 55.1
+557.5 61.8
+558.2 30.0
+559.7 69.8
+561.3 91.4
+562.5 7.6
+563.4 15.0
+564.9 70.4
+566.4 52.5
+568.5 39.4
+571.4 28.4
+573.8 34.0
+574.4 600.3
+575.4 162.9
+576.2 61.8
+577.0 13.9
+577.6 35.2
+578.9 44.3
+579.5 93.5
+581.3 74.8
+582.0 24.9
+583.5 9.9
+585.5 25.7
+586.5 11.4
+588.1 44.4
+589.3 75.8
+590.4 48.6
+591.1 56.7
+593.1 415.1
+594.1 71.4
+597.0 412.8
+597.9 137.9
+599.6 137.9
+600.4 10.1
+601.2 36.4
+603.5 8.1
+604.6 58.6
+605.9 1138.9
+606.9 85.1
+608.2 97.9
+609.5 23.5
+610.8 240.6
+611.7 5.6
+612.4 34.6
+613.4 44.6
+614.9 17.0
+615.9 72.3
+617.4 82.7
+618.4 67.4
+619.6 174.7
+620.4 74.5
+621.9 64.8
+622.5 27.0
+624.1 65.5
+625.8 85.0
+626.6 12.7
+627.5 86.0
+629.2 110.0
+630.6 85.9
+632.4 19.2
+633.3 165.8
+634.4 157.2
+635.6 120.2
+637.5 31.3
+638.3 47.9
+639.5 28.6
+640.5 102.6
+641.2 13.6
+642.4 24.5
+643.9 181.6
+645.5 322.6
+646.3 94.0
+647.4 113.7
+648.5 17.7
+649.2 43.6
+650.1 19.2
+651.3 317.4
+652.1 54.1
+654.5 95.5
+655.5 36.9
+656.7 179.4
+658.0 4598.3
+659.2 202.4
+660.1 88.3
+661.3 135.1
+662.1 140.5
+663.3 49.8
+664.9 78.5
+666.4 82.3
+668.3 16.7
+669.1 8.7
+670.0 92.6
+671.0 69.5
+671.7 32.9
+673.7 571.7
+674.4 594.8
+675.4 439.7
+676.3 148.4
+677.2 68.8
+678.6 139.9
+679.4 11.4
+680.1 80.1
+680.8 75.1
+683.0 4304.3
+684.2 632.2
+687.6 34.8
+704.2 29.6
+705.4 21.5
+709.4 17.3
+710.1 22.8
+711.4 8.9
+712.4 29.2
+714.5 20.2
+715.3 5.7
+716.2 5.2
+717.8 60.3
+718.4 37.4
+720.2 38.9
+721.5 10.9
+723.4 46.1
+726.2 55.8
+727.4 20.1
+728.4 14.9
+729.6 12.7
+731.2 35.7
+732.5 616.1
+733.5 90.7
+734.4 45.0
+736.5 4.5
+737.8 64.7
+738.6 141.3
+741.4 64.1
+742.5 32.9
+746.5 23.2
+747.4 15.0
+749.9 72.1
+750.6 66.0
+751.5 21.4
+752.2 32.4
+754.7 17.9
+755.9 37.7
+757.4 10.8
+759.4 39.7
+764.0 4.5
+767.8 109.5
+768.5 34.8
+769.3 86.6
+771.6 89.3
+772.6 25.3
+773.3 180.0
+774.3 12.4
+776.3 46.8
+778.8 72.5
+779.6 26.6
+781.5 11.9
+782.7 141.9
+784.7 53.0
+787.6 41.4
+789.5 13.1
+790.2 17.7
+791.3 330.7
+792.2 34.6
+793.0 41.4
+793.7 10.4
+795.2 34.0
+796.1 44.5
+797.2 446.1
+800.6 30.2
+801.7 5.7
+802.6 113.3
+803.5 45.1
+804.4 30.6
+806.6 6.3
+808.2 26.3
+809.3 246.3
+810.2 24.2
+811.5 48.0
+813.6 17.7
+815.3 26.3
+817.5 90.5
+818.4 12.5
+819.5 40.7
+821.5 110.5
+822.2 51.6
+823.5 16.4
+825.4 71.2
+827.9 14.0
+828.6 29.7
+829.6 51.2
+830.8 9.6
+835.7 10.9
+837.0 33.2
+838.5 13.6
+839.4 23.5
+842.4 62.4
+843.8 18.4
+846.8 47.6
+847.4 812.6
+848.5 275.4
+849.4 54.1
+850.7 19.6
+851.7 27.6
+852.7 55.1
+853.5 15.8
+854.7 51.7
+857.5 18.2
+860.9 16.4
+862.3 21.7
+865.3 93.2
+866.1 57.5
+867.4 20.5
+868.3 20.9
+870.6 11.7
+873.3 109.8
+875.6 19.2
+877.1 9.4
+880.5 11.1
+882.7 4.4
+883.5 54.6
+884.8 64.2
+886.3 299.6
+887.4 168.7
+889.4 12.7
+892.7 23.0
+893.3 21.2
+895.5 70.5
+896.4 30.0
+897.2 4.5
+899.2 116.9
+900.5 43.7
+902.7 59.5
+904.4 462.0
+905.4 120.7
+913.5 14.7
+914.7 34.4
+915.4 48.0
+919.4 80.9
+922.4 1025.9
+923.6 179.9
+924.5 57.5
+928.9 18.6
+930.9 22.6
+933.0 106.0
+933.8 105.1
+935.1 38.2
+936.0 72.8
+937.2 176.9
+938.0 60.5
+939.7 58.1
+940.5 42.8
+942.3 24.7
+943.6 32.9
+945.5 46.8
+946.4 38.3
+947.1 98.0
+949.6 24.7
+950.8 11.7
+951.6 77.4
+952.3 17.0
+953.8 47.9
+955.8 7.0
+957.4 63.1
+958.6 11.5
+959.6 27.4
+963.6 14.0
+964.8 40.5
+966.5 13.8
+967.6 26.1
+968.8 11.1
+969.7 20.0
+970.3 16.4
+975.5 341.0
+976.3 114.7
+977.6 32.8
+979.7 33.5
+980.6 26.0
+987.3 208.3
+988.4 12.5
+989.7 58.9
+993.4 492.9
+994.5 1174.4
+995.5 167.0
+996.1 13.1
+996.8 88.3
+998.0 67.9
+1008.0 13.1
+1009.5 56.7
+1014.6 18.8
+1018.4 27.5
+1020.7 4.4
+1021.6 37.3
+1023.6 15.5
+1026.4 38.1
+1027.2 12.8
+1032.0 11.2
+1032.7 5.1
+1033.7 8.2
+1034.6 28.3
+1038.7 28.3
+1042.4 41.4
+1047.6 35.8
+1048.4 42.8
+1049.6 35.7
+1050.5 48.8
+1051.6 43.4
+1052.4 39.3
+1053.6 154.7
+1055.6 14.4
+1062.7 33.5
+1064.5 32.0
+1066.4 13.3
+1068.6 84.4
+1078.1 34.5
+1079.6 16.3
+1082.5 25.4
+1083.5 42.9
+1086.5 43.3
+1087.5 40.3
+1092.9 13.8
+1094.7 26.0
+1098.9 14.9
+1099.8 10.3
+1100.6 71.9
+1101.4 16.2
+1103.6 93.3
+1104.6 104.5
+1105.7 18.7
+1107.4 10.7
+1108.5 13.1
+1121.6 470.9
+1122.8 126.8
+1123.8 252.4
+1124.9 60.0
+1125.8 6.7
+1126.7 33.8
+1127.9 16.6
+1139.0 13.6
+1139.6 12.8
+1141.7 110.9
+1143.7 48.3
+1144.5 19.4
+1148.4 19.4
+1150.6 3.4
+1153.6 14.4
+1154.5 26.4
+1158.7 27.8
+1159.5 14.3
+1161.1 63.3
+1161.9 26.7
+1164.8 12.4
+1165.7 33.0
+1167.0 19.8
+1172.5 19.9
+1178.9 65.5
+1180.0 59.4
+1186.5 41.4
+1187.3 30.0
+1190.9 13.2
+1192.6 15.9
+1195.5 16.7
+1196.3 13.0
+1197.7 62.5
+1198.7 25.7
+1202.7 49.8
+1208.8 7.6
+1210.6 1050.3
+1211.8 269.9
+1212.7 74.2
+1213.4 83.8
+1215.7 22.3
+1218.8 48.3
+1219.6 10.1
+1224.6 12.2
+1225.5 13.6
+1235.6 42.0
+1236.3 126.1
+1236.9 78.3
+1238.1 53.0
+1240.1 43.2
+1245.3 24.0
+1249.0 19.7
+1252.6 20.9
+1253.9 18.1
+1255.5 9.9
+1256.8 29.9
+1284.0 17.0
+1308.9 22.8
+S	94	94	669.44
+Z	3	2006.30
+195.2 3.9
+197.8 31.4
+199.1 111.2
+200.1 29.0
+202.9 10.0
+208.1 29.4
+209.1 18.3
+211.3 37.4
+213.1 47.2
+214.1 16.5
+215.1 4.3
+218.2 3.7
+222.4 5.1
+225.0 28.4
+226.0 122.2
+227.2 6.4
+228.1 8.5
+229.9 5.3
+235.2 4.1
+236.2 12.2
+237.2 8.6
+242.1 7.5
+244.2 199.6
+245.3 24.3
+249.0 12.8
+253.2 13.4
+255.2 64.7
+256.0 22.2
+256.9 19.8
+258.1 7.2
+264.0 4.8
+265.9 5.7
+270.2 8.7
+273.2 84.2
+274.0 6.0
+276.3 6.1
+281.1 15.6
+283.3 53.9
+284.2 102.9
+287.2 3.2
+288.3 74.2
+290.0 22.5
+294.3 33.3
+295.1 26.7
+296.1 5.4
+299.2 5.1
+300.5 15.8
+301.1 224.3
+302.3 29.3
+303.5 6.7
+304.3 8.6
+308.3 7.5
+312.1 222.2
+313.1 25.2
+314.3 19.8
+315.2 85.0
+319.1 5.1
+320.1 10.8
+323.2 5.2
+324.3 11.1
+327.2 21.7
+328.2 23.8
+332.2 13.0
+335.2 8.8
+338.3 4.5
+342.2 8.1
+343.2 7.8
+347.4 5.7
+350.2 21.9
+351.2 30.5
+352.4 21.2
+357.2 11.5
+358.0 18.5
+359.2 36.7
+364.0 7.5
+365.0 18.8
+366.2 9.0
+368.2 84.1
+369.3 95.7
+370.2 15.6
+372.7 16.1
+375.3 19.8
+376.0 12.8
+379.4 3.4
+382.1 87.2
+383.5 12.4
+384.7 4.7
+385.7 35.9
+386.4 664.1
+387.3 109.1
+388.5 16.8
+389.3 13.6
+393.5 12.8
+396.3 296.0
+397.3 23.2
+398.4 6.9
+401.9 4.1
+405.2 7.4
+407.2 3.5
+408.4 43.0
+410.2 8.0
+412.6 10.4
+414.2 1027.4
+415.2 132.8
+416.2 28.1
+417.3 10.5
+419.4 9.2
+423.6 8.6
+426.3 4.6
+428.6 19.7
+429.9 36.0
+432.3 12.3
+435.6 42.3
+437.5 6.0
+439.2 27.3
+440.1 16.9
+441.2 36.3
+445.0 242.7
+445.9 47.9
+448.9 22.3
+451.3 46.0
+454.4 18.8
+455.3 10.6
+456.2 44.7
+458.2 48.7
+460.5 3.1
+465.3 81.3
+466.3 41.9
+467.2 6.8
+469.4 34.1
+472.7 23.4
+474.3 16.2
+476.3 19.0
+481.5 11.0
+483.3 6.8
+487.3 57.9
+488.5 20.7
+490.3 32.3
+492.6 7.8
+494.2 5.8
+495.2 35.5
+497.2 74.9
+501.5 164.7
+502.4 18.9
+503.3 5.3
+504.3 6.0
+505.3 11.5
+506.3 9.8
+508.5 43.5
+509.3 36.4
+510.3 5.4
+511.2 3.5
+512.3 6.3
+512.9 15.7
+515.3 19.9
+516.7 29.9
+517.3 3.3
+520.3 125.7
+521.3 64.6
+522.3 9.7
+523.6 5.5
+526.1 100.0
+529.0 18.5
+529.9 8.4
+531.6 287.8
+532.6 116.0
+539.2 57.2
+541.7 19.4
+543.1 39.7
+544.5 19.8
+545.3 30.4
+546.3 34.9
+548.5 23.1
+549.4 17.8
+550.8 65.4
+551.6 86.0
+552.4 6.2
+554.0 39.0
+556.2 136.0
+557.2 77.5
+558.3 14.0
+560.2 23.1
+562.3 20.6
+563.3 17.9
+564.0 19.0
+565.3 12.9
+566.7 33.6
+567.6 47.8
+568.8 34.4
+569.5 181.6
+570.3 117.1
+571.2 10.9
+572.2 3.9
+572.8 11.7
+574.3 162.2
+575.3 105.2
+576.4 17.7
+577.4 8.0
+581.2 16.5
+582.6 84.1
+583.2 26.5
+583.9 30.3
+585.5 26.2
+586.6 39.5
+587.3 13.5
+588.5 263.4
+589.4 74.6
+590.1 14.7
+591.5 26.6
+594.1 10.5
+594.9 19.5
+595.9 46.2
+596.8 11.2
+597.9 82.0
+598.9 19.4
+599.6 36.0
+600.9 25.8
+601.7 4.7
+603.2 29.0
+605.5 30.5
+607.2 41.1
+608.2 17.5
+610.7 42.0
+612.3 23.2
+614.3 13.8
+615.7 224.3
+616.8 31.4
+617.7 11.6
+618.6 60.1
+620.1 21.4
+621.1 99.7
+621.7 3421.0
+622.9 50.9
+623.5 49.4
+624.5 88.9
+626.0 46.3
+627.3 125.4
+628.3 84.2
+629.2 63.7
+630.8 440.6
+631.6 265.9
+632.5 55.4
+633.6 251.2
+634.2 242.7
+635.1 48.3
+636.3 31.9
+637.3 64.6
+638.2 217.0
+638.9 44.8
+640.6 183.0
+641.5 70.9
+642.4 127.2
+643.3 5.4
+644.2 11.8
+645.2 97.8
+646.2 24.1
+647.6 251.2
+648.5 6.2
+649.7 72.3
+650.7 127.2
+651.6 149.1
+652.5 54.0
+653.6 42.6
+654.7 59.6
+655.7 62.7
+656.3 19.7
+657.8 123.0
+659.0 49.6
+660.1 188.1
+660.9 2.6
+662.0 38.8
+666.8 6.7
+671.0 51.7
+672.3 53.1
+673.2 31.3
+676.4 11.2
+679.9 26.5
+681.6 621.2
+682.4 146.7
+683.5 65.7
+684.6 17.3
+685.4 24.3
+686.3 13.0
+687.4 20.9
+688.3 23.4
+689.3 16.8
+690.7 38.7
+692.1 57.7
+694.6 155.3
+695.4 24.1
+697.3 22.6
+699.9 8.7
+700.8 42.5
+703.4 34.9
+704.4 34.6
+705.1 31.7
+706.7 32.7
+707.8 9.7
+708.5 12.5
+711.2 12.9
+711.9 18.7
+714.4 2.8
+717.1 1870.0
+718.0 281.2
+719.1 95.3
+720.8 35.1
+723.6 62.9
+724.4 21.0
+725.1 15.2
+725.8 10.0
+728.2 123.8
+729.6 139.2
+730.3 56.5
+732.4 192.4
+733.4 53.6
+734.7 123.1
+735.7 84.4
+736.4 29.3
+738.4 19.8
+740.5 25.7
+741.4 20.0
+742.2 44.9
+743.5 182.0
+744.6 171.3
+745.6 41.4
+746.5 67.9
+747.4 60.2
+748.6 6.2
+749.4 28.3
+750.5 7.2
+751.7 13.7
+752.9 70.8
+754.2 12.0
+756.3 22.9
+761.3 19.6
+763.3 20.9
+765.6 26.2
+767.6 10.3
+768.7 66.2
+769.8 11.4
+771.6 11.1
+773.8 21.7
+775.7 16.4
+779.3 26.2
+780.3 14.0
+781.8 6.1
+782.9 142.5
+784.1 36.2
+785.7 5.1
+786.4 21.9
+788.3 202.7
+789.0 117.4
+791.8 25.9
+792.5 17.1
+793.5 7.7
+797.2 11980.4
+798.1 2728.0
+799.1 115.3
+799.7 39.6
+800.7 88.9
+801.4 35.6
+803.4 37.1
+804.0 18.5
+804.9 10.7
+805.6 3.0
+806.5 13.2
+808.4 7.9
+809.3 37.3
+810.4 32.5
+811.6 40.0
+813.1 4.2
+814.3 48.2
+815.5 19.7
+817.9 5.7
+818.5 32.6
+819.7 106.4
+820.7 39.6
+821.6 35.5
+822.3 51.6
+823.0 28.4
+823.8 43.0
+825.2 9.7
+827.4 35.7
+828.2 31.5
+829.3 42.8
+830.2 5.7
+832.7 10.2
+835.3 198.8
+836.2 154.5
+837.1 50.0
+838.3 87.1
+839.1 111.6
+839.9 38.4
+840.6 18.8
+841.5 39.8
+843.4 18.9
+844.1 16.7
+845.0 69.3
+845.6 8.2
+846.4 48.4
+847.1 17.5
+848.4 68.6
+849.5 58.1
+851.0 9.3
+853.5 971.9
+854.2 1569.4
+855.0 58.6
+855.7 47.4
+856.4 32.7
+857.8 189.2
+858.7 169.3
+859.4 17.2
+860.1 16.4
+860.8 9.6
+861.5 21.6
+862.5 22.6
+863.6 25.3
+865.4 35.0
+866.2 17.1
+868.1 5.2
+869.5 14.7
+871.2 120.6
+872.4 23.9
+873.4 124.6
+874.3 50.5
+875.3 39.5
+876.2 27.4
+879.2 44.4
+880.2 23.8
+881.9 5305.4
+882.6 7577.9
+883.5 867.2
+884.6 65.3
+885.6 38.8
+886.7 41.6
+887.5 22.8
+888.3 21.7
+891.5 6.9
+892.4 30.4
+894.0 32.8
+894.9 140.8
+895.9 180.2
+896.7 57.1
+897.3 56.4
+898.8 13.6
+900.3 142.1
+900.9 3.9
+901.8 58.9
+902.6 12.8
+903.9 10.2
+905.4 12.7
+906.2 80.8
+907.3 37.0
+908.1 3.1
+910.4 23.0
+911.0 17.9
+912.2 81.2
+913.5 75.1
+914.5 291.7
+915.3 43.6
+916.1 51.2
+917.7 6.2
+919.5 17.8
+921.6 64.8
+922.5 19.5
+923.4 26.3
+927.8 67.9
+928.7 90.0
+929.6 31.9
+930.6 138.5
+931.7 223.2
+932.7 47.8
+934.2 16.5
+936.1 137.7
+936.8 65.0
+937.7 7.4
+938.4 4.6
+940.0 9.7
+940.8 29.9
+941.6 9.0
+943.0 75.3
+944.7 25.4
+945.5 14.9
+946.5 9.8
+947.3 22.3
+949.3 20.6
+950.5 18.8
+951.9 61.5
+952.7 6.4
+954.2 81.7
+955.4 82.6
+956.3 5.7
+957.3 10.6
+960.6 63.1
+961.3 4.0
+962.4 7.1
+966.6 9.3
+972.5 8.5
+974.6 10.7
+975.6 7.8
+976.6 10.0
+977.9 6.0
+979.4 19.0
+980.0 7.8
+984.7 13.7
+987.3 18.0
+988.6 6.7
+990.6 12.7
+996.2 4.5
+997.8 16.9
+998.5 11.3
+1001.7 69.0
+1002.8 13.7
+1005.1 36.7
+1006.1 61.4
+1007.3 11.4
+1008.4 16.5
+1010.3 6.2
+1011.2 12.0
+1013.5 23.8
+1014.6 7.5
+1020.5 5.8
+1023.3 15.3
+1027.6 22.2
+1029.7 11.9
+1031.6 24.9
+1032.6 18.8
+1033.6 11.5
+1039.3 32.1
+1043.5 5.1
+1047.3 5.3
+1048.9 8.4
+1051.7 7.0
+1052.4 12.2
+1053.3 16.3
+1054.5 3.7
+1055.6 32.5
+1059.2 16.5
+1069.5 4.2
+1070.6 9.0
+1073.5 69.5
+1074.7 37.0
+1075.6 13.0
+1084.0 18.2
+1085.5 11.0
+1088.9 20.7
+1093.0 6.3
+1096.6 5.7
+1098.9 7.6
+1099.7 9.8
+1100.7 24.8
+1101.3 28.3
+1105.7 9.7
+1110.9 6.6
+1112.6 8.7
+1115.5 3.8
+1118.6 41.8
+1119.8 80.5
+1120.7 11.4
+1121.6 7.1
+1126.5 5.5
+1133.6 20.7
+1134.6 17.7
+1135.6 21.1
+1136.3 7.9
+1139.7 7.3
+1145.3 6.5
+1146.4 4.7
+1148.5 16.1
+1154.3 11.0
+1156.5 9.3
+1157.7 6.3
+1159.4 4.7
+1160.6 12.5
+1161.5 5.1
+1162.3 15.0
+1163.2 12.0
+1170.4 43.0
+1171.3 10.3
+1173.7 15.0
+1174.8 36.9
+1182.1 4.4
+1186.6 24.6
+1188.0 12.7
+1188.7 24.6
+1189.4 10.5
+1190.0 16.5
+1198.5 12.1
+1200.6 11.3
+1207.6 11.6
+1225.3 6.7
+1226.4 11.1
+1240.5 6.7
+1243.4 49.0
+1244.6 17.2
+1245.8 8.8
+1254.8 6.2
+1256.5 5.3
+1258.3 25.5
+1260.5 17.3
+1262.4 13.2
+1277.6 27.8
+1299.0 7.4
+1299.9 37.8
+1300.6 26.7
+1301.8 6.7
+1306.7 5.5
+1346.1 5.1
+S	95	95	1004.46
+Z	2	2007.91
+294.3 42.5
+301.2 17.3
+311.1 28.1
+326.4 25.7
+332.2 14.2
+339.1 10.3
+356.3 11.6
+363.4 22.9
+369.3 21.6
+370.3 26.5
+371.5 10.7
+372.8 5.7
+384.4 5.0
+386.5 32.4
+390.5 6.8
+404.2 37.1
+407.5 26.8
+408.2 25.3
+414.1 39.3
+416.3 22.8
+418.0 11.0
+426.5 17.7
+436.3 16.3
+439.5 52.4
+445.6 18.5
+447.0 24.6
+450.5 20.3
+461.3 4.2
+465.5 6.4
+470.5 12.7
+471.2 9.0
+472.3 50.3
+475.1 19.6
+478.4 5.1
+482.3 33.6
+483.5 14.9
+484.6 6.5
+486.0 14.4
+487.7 11.8
+488.4 19.5
+503.2 22.5
+510.4 6.1
+514.0 30.3
+515.5 22.5
+520.4 292.1
+521.5 88.4
+522.3 12.4
+527.5 6.0
+531.2 31.2
+532.2 10.0
+533.4 10.9
+536.5 6.1
+544.1 9.6
+545.3 12.1
+546.3 7.2
+548.4 15.9
+556.0 7.5
+557.3 5.8
+559.5 16.7
+561.6 9.2
+562.8 11.4
+565.0 14.2
+567.3 15.3
+574.0 11.1
+578.3 3.6
+579.4 10.5
+585.2 9.4
+586.2 26.7
+587.5 26.5
+592.3 5.8
+595.5 11.1
+596.5 16.1
+599.1 26.0
+600.3 11.4
+602.2 8.1
+604.3 28.3
+604.9 9.4
+607.2 22.3
+608.3 12.5
+609.7 20.7
+612.5 7.0
+615.2 30.8
+617.4 29.6
+620.6 19.0
+629.1 22.6
+631.5 29.1
+634.6 106.2
+635.4 100.5
+636.6 4.8
+639.6 30.6
+642.0 23.4
+643.0 7.0
+647.2 13.3
+658.2 12.6
+660.3 27.4
+665.7 11.9
+669.1 26.4
+670.4 30.2
+678.2 52.9
+681.5 37.3
+683.5 3.5
+686.4 7.5
+688.4 4.9
+689.1 25.6
+690.6 66.9
+693.6 6.3
+699.2 7.5
+700.4 41.1
+702.7 20.8
+711.3 44.3
+714.0 81.2
+715.1 73.1
+717.8 10.4
+724.4 18.9
+725.2 9.4
+726.7 11.2
+728.2 40.6
+732.4 403.9
+733.5 114.3
+734.5 41.7
+736.5 55.4
+737.8 32.5
+741.3 41.2
+744.4 48.1
+745.3 23.5
+746.3 36.3
+747.4 78.3
+748.3 24.7
+751.0 30.1
+752.3 23.3
+755.5 13.0
+756.6 20.4
+758.6 51.5
+760.3 32.5
+761.5 41.2
+762.8 67.3
+765.5 51.9
+766.4 6.3
+773.5 16.0
+775.5 13.9
+777.5 41.3
+782.9 27.5
+783.6 6.2
+785.9 8.1
+787.5 9.6
+788.8 25.5
+792.1 92.6
+793.1 30.7
+797.1 35.7
+798.1 38.3
+799.1 15.1
+800.3 16.3
+801.5 69.6
+802.4 17.0
+803.7 26.7
+805.0 17.9
+810.5 27.5
+813.2 11.6
+814.0 23.3
+814.9 44.2
+817.1 19.0
+819.0 22.9
+827.2 31.3
+828.7 14.5
+830.2 93.7
+831.3 44.2
+833.7 38.2
+835.4 11.2
+837.5 41.9
+838.8 66.3
+839.4 10.5
+840.3 50.8
+841.2 45.0
+848.6 48.1
+849.2 107.7
+853.4 76.2
+854.3 100.3
+855.3 32.9
+856.7 28.6
+857.4 67.1
+858.5 14.8
+859.9 30.4
+861.5 10.0
+862.5 20.9
+864.8 34.0
+870.0 39.0
+871.7 38.1
+873.8 71.0
+874.8 44.6
+876.3 17.6
+877.6 7.0
+878.5 12.5
+882.1 252.9
+883.0 110.9
+883.7 29.2
+886.4 24.4
+887.4 14.1
+888.4 222.5
+889.4 152.5
+890.4 33.8
+891.6 44.0
+893.0 36.8
+894.7 23.2
+896.5 43.9
+898.3 13.1
+899.2 53.0
+901.7 18.9
+902.6 22.9
+906.4 11.2
+910.2 26.0
+913.0 28.5
+914.2 52.9
+916.5 28.0
+917.8 46.6
+919.4 80.0
+922.3 10.2
+923.3 95.1
+924.0 23.3
+928.3 30.5
+929.7 78.1
+930.5 128.3
+931.7 155.9
+932.9 65.9
+937.2 159.4
+938.6 39.9
+939.8 14.0
+940.9 24.3
+945.2 35.0
+948.2 9.1
+951.3 8.2
+952.1 8.4
+955.6 34.6
+957.2 11.8
+957.9 153.9
+959.5 57.8
+960.2 6.5
+963.4 38.5
+964.5 22.4
+965.6 17.4
+966.9 10.9
+969.1 48.1
+970.6 12.7
+971.6 10.3
+972.5 25.3
+973.5 38.0
+974.6 25.6
+976.4 32.8
+978.4 145.1
+979.5 57.4
+981.4 39.9
+982.6 130.9
+983.4 33.8
+986.0 149.5
+987.5 147.6
+988.3 28.0
+991.0 17.5
+994.2 48.2
+994.9 415.8
+995.7 96.0
+1012.3 7.2
+1018.4 27.6
+1023.5 28.7
+1024.2 16.9
+1026.5 5.6
+1032.6 59.5
+1042.3 12.6
+1043.4 13.3
+1046.2 29.3
+1047.5 16.5
+1049.8 11.9
+1056.6 29.5
+1057.9 31.3
+1064.6 19.3
+1068.6 46.1
+1076.4 44.4
+1082.2 16.4
+1083.0 15.6
+1083.7 7.3
+1085.3 52.7
+1086.5 13.6
+1090.3 49.0
+1097.5 11.6
+1098.3 4.4
+1100.5 89.8
+1101.6 51.2
+1102.3 12.8
+1111.6 9.1
+1115.5 7.9
+1117.3 11.8
+1118.2 66.6
+1120.7 31.7
+1121.8 12.8
+1127.6 44.8
+1130.8 4.2
+1133.6 4.1
+1139.0 22.8
+1151.6 35.8
+1152.7 30.0
+1162.1 30.8
+1163.7 20.6
+1169.7 43.3
+1170.5 14.9
+1176.3 89.1
+1179.4 9.2
+1183.5 17.8
+1186.5 24.6
+1187.6 17.2
+1189.7 29.7
+1191.6 12.0
+1196.4 11.2
+1204.3 7.8
+1216.9 54.7
+1217.7 32.8
+1218.5 11.0
+1226.4 18.5
+1234.0 8.6
+1240.7 39.5
+1242.5 33.7
+1243.4 35.8
+1245.4 3.8
+1246.2 42.9
+1247.3 8.6
+1248.7 8.3
+1249.5 9.7
+1257.6 20.3
+1258.3 14.0
+1259.0 12.6
+1261.0 70.7
+1261.7 90.0
+1262.7 40.1
+1263.8 18.1
+1264.7 35.4
+1266.3 12.6
+1274.5 597.5
+1275.5 250.3
+1276.4 171.5
+1277.6 133.8
+1278.3 31.6
+1279.0 27.4
+1281.5 31.1
+1288.8 12.4
+1292.5 13.2
+1294.2 84.3
+1296.9 31.4
+1299.6 37.5
+1300.5 4.0
+1301.6 41.2
+1304.3 27.9
+1311.7 5.1
+1313.4 6.5
+1316.0 11.3
+1317.3 46.5
+1318.4 19.3
+1321.0 11.6
+1321.7 13.5
+1322.4 42.5
+1326.6 28.7
+1328.4 9.7
+1331.8 6.2
+1340.9 47.8
+1342.5 28.7
+1344.0 61.8
+1344.7 24.3
+1345.7 20.4
+1346.8 32.9
+1348.8 23.7
+1357.5 14.1
+1359.2 44.4
+1360.4 28.3
+1361.5 53.5
+1362.6 131.6
+1363.8 73.8
+1364.5 9.1
+1371.4 85.8
+1372.4 167.7
+1373.5 54.1
+1375.0 20.9
+1380.6 4.1
+1381.7 8.6
+1383.3 9.1
+1385.9 20.9
+1387.5 22.4
+1390.0 54.1
+1391.8 19.4
+1395.5 11.6
+1405.7 42.7
+1413.0 23.5
+1414.5 16.9
+1415.8 15.8
+1422.8 40.0
+1430.6 24.2
+1432.3 30.5
+1432.9 78.8
+1433.8 61.5
+1434.8 21.6
+1436.7 10.3
+1440.8 32.7
+1441.8 18.3
+1443.1 63.8
+1445.2 31.6
+1447.6 12.2
+1457.8 16.8
+1466.8 21.4
+1468.0 20.2
+1474.2 28.2
+1475.5 9.0
+1478.7 11.0
+1486.5 423.6
+1487.6 394.8
+1488.8 216.4
+1489.7 54.9
+1490.8 15.1
+1493.5 10.9
+1509.8 41.5
+1511.3 52.8
+1513.5 12.5
+1522.3 28.4
+1535.0 10.1
+1548.4 9.1
+1555.9 6.7
+1565.6 37.2
+1569.6 9.6
+1571.5 7.5
+1575.7 43.2
+1576.4 16.4
+1577.5 30.6
+1578.7 33.7
+1583.0 12.9
+1592.8 38.4
+1593.7 66.6
+1596.0 33.1
+1599.7 111.8
+1600.8 19.9
+1602.0 60.2
+1617.4 26.1
+1618.8 34.5
+1629.4 6.5
+1635.9 6.1
+1654.8 46.1
+1671.8 7.0
+1676.5 17.5
+1677.7 19.4
+1685.2 5.5
+1695.5 13.9
+1699.7 36.1
+1703.5 80.9
+1704.6 6.5
+1707.0 33.6
+1712.6 108.6
+1713.9 205.1
+1715.0 95.5
+1716.7 5.0
+1747.2 15.0
+1747.9 9.1
+1785.2 17.5
+1801.6 4.9
+1844.7 9.5
+1860.4 7.0
+1861.1 9.9
+1862.2 12.2
+1863.2 10.5
+1880.3 17.4
+S	96	96	652.24
+Z	2	1303.47
+186.8 188.4
+196.2 138.2
+197.3 296.6
+198.2 48.8
+200.3 248.7
+201.2 584.4
+202.0 189.1
+207.2 159.8
+210.2 47.3
+212.3 128.9
+214.2 288.1
+215.2 1179.2
+216.4 136.5
+217.2 99.5
+218.1 178.1
+219.3 70.2
+222.2 292.3
+223.3 128.1
+225.1 223.3
+226.2 228.7
+227.4 324.5
+229.1 3616.7
+230.2 514.4
+232.2 217.9
+236.3 33.1
+239.4 287.4
+240.2 239.6
+241.1 78.4
+243.1 122.3
+243.9 168.7
+245.0 769.2
+245.8 403.5
+254.5 367.8
+257.2 534.2
+258.3 3045.5
+259.2 255.3
+260.2 281.8
+261.0 90.2
+263.1 57.9
+265.2 317.5
+271.3 815.6
+272.3 716.9
+273.4 143.3
+274.2 381.0
+275.2 5675.1
+276.4 503.1
+277.3 288.9
+278.1 110.0
+280.4 79.5
+281.3 126.4
+282.1 260.7
+283.1 63.1
+284.4 216.4
+286.1 83.7
+290.4 103.3
+293.3 143.8
+294.1 87.5
+295.3 287.7
+297.5 201.5
+298.3 93.1
+299.3 102.6
+300.2 715.8
+300.9 190.8
+305.2 375.3
+307.3 93.8
+309.0 50.8
+310.3 62.9
+311.3 527.9
+312.4 182.4
+313.5 254.0
+314.4 150.8
+316.1 194.4
+318.5 151.1
+320.3 106.5
+321.1 57.0
+322.7 61.5
+324.4 109.6
+325.2 172.5
+326.1 82.4
+328.0 1851.3
+328.7 145.9
+329.4 1029.0
+330.3 948.3
+331.4 223.5
+332.5 140.1
+333.4 46.3
+336.2 685.3
+337.0 76.1
+338.5 995.0
+339.4 111.1
+340.3 91.8
+341.5 346.1
+342.2 143.6
+344.2 1635.0
+346.4 14718.7
+347.3 4960.8
+348.2 144.2
+351.2 97.3
+352.3 67.2
+354.3 4077.6
+355.3 1007.8
+356.4 440.4
+357.1 177.3
+358.2 3465.1
+359.2 644.4
+360.2 180.3
+361.4 288.8
+362.5 260.2
+367.2 89.4
+369.4 203.0
+370.2 1477.3
+371.1 715.4
+373.3 216.7
+375.2 763.6
+376.3 165.4
+377.5 97.0
+378.8 289.5
+379.5 51.7
+381.1 84.9
+383.0 81.7
+383.8 233.4
+384.9 66.4
+387.4 177.0
+388.2 154.9
+389.3 141.2
+390.5 290.4
+391.4 112.8
+396.2 679.1
+397.4 706.6
+398.9 221.7
+403.4 60.6
+404.6 198.4
+405.2 95.3
+406.8 258.0
+408.5 122.1
+409.5 157.0
+410.3 52.1
+411.3 756.2
+412.2 906.1
+413.0 162.6
+414.7 300.4
+415.3 1896.5
+416.6 243.0
+417.2 78.9
+421.0 113.1
+422.3 2444.1
+423.5 554.4
+424.2 91.1
+425.2 1910.3
+426.5 781.4
+427.4 583.9
+428.5 716.1
+429.2 311.8
+430.4 254.2
+431.3 362.1
+433.3 30.3
+434.4 268.3
+435.4 127.4
+438.2 656.8
+439.2 1067.0
+440.6 480.9
+441.3 300.0
+442.6 969.0
+443.3 5654.2
+444.5 1633.9
+445.4 10787.9
+446.5 975.6
+447.4 473.8
+448.4 195.0
+449.3 234.9
+450.2 1602.4
+451.2 591.5
+452.0 47.0
+453.2 1170.3
+454.7 396.9
+455.3 490.9
+456.3 767.9
+457.3 2827.8
+458.6 1429.5
+459.5 1218.0
+460.4 837.0
+461.4 340.4
+464.7 236.0
+465.4 39.4
+466.4 897.7
+467.3 3825.1
+468.3 2385.5
+469.1 272.4
+470.5 568.7
+471.3 1656.6
+472.3 1180.2
+473.3 1554.4
+474.3 1141.4
+475.7 375.8
+476.4 3194.4
+477.4 961.0
+478.4 468.7
+479.2 121.2
+479.8 448.2
+482.2 287.9
+483.1 295.5
+484.3 308.1
+485.2 512.9
+486.3 1331.2
+487.3 1769.4
+489.0 5659.5
+489.9 1797.7
+492.4 611.3
+493.6 70.3
+494.8 302.0
+495.4 223.4
+496.1 140.6
+497.3 119.7
+499.4 245.9
+500.5 201.2
+501.4 596.0
+502.3 668.7
+504.0 329.9
+505.4 551.6
+506.0 117.2
+507.3 934.0
+508.2 1213.6
+509.0 776.9
+510.0 447.6
+510.9 253.3
+511.6 328.0
+512.3 466.8
+513.2 135.4
+514.2 439.3
+515.3 627.5
+516.9 896.1
+517.7 985.6
+518.5 555.8
+519.4 183.5
+520.5 491.7
+521.3 193.6
+522.4 756.9
+523.3 365.4
+524.3 811.9
+525.3 602.0
+526.2 611.4
+527.2 661.3
+528.3 1097.7
+529.4 461.9
+530.2 97.8
+531.1 250.6
+532.0 402.9
+533.0 321.3
+533.8 284.8
+536.2 900.1
+537.3 7697.5
+538.0 7912.0
+539.4 938.7
+540.2 661.0
+542.2 789.1
+543.0 1784.8
+544.2 2056.5
+545.7 494.9
+546.5 271.7
+547.3 357.4
+550.3 1582.2
+551.7 3315.8
+552.4 1271.8
+554.2 6142.8
+555.4 1289.8
+556.4 80.8
+557.3 229.4
+558.6 560.6
+560.4 11139.5
+561.3 3411.2
+562.2 471.2
+563.5 4978.2
+564.6 3077.1
+565.6 1454.6
+567.1 829.1
+568.2 2937.8
+569.1 302.2
+570.3 2274.3
+571.4 1355.9
+572.3 16041.7
+573.4 3310.2
+574.4 657.6
+576.2 587.5
+577.5 1623.5
+578.5 1060.4
+579.4 406.8
+580.1 464.2
+581.4 285.3
+582.3 689.0
+583.4 1244.1
+584.7 601.1
+586.1 2260.1
+587.1 1587.2
+588.3 512.6
+589.3 205.0
+590.4 255.1
+591.7 232.9
+592.3 349.9
+593.1 355.0
+593.8 224.8
+594.8 386.9
+595.5 1147.4
+596.6 392.1
+597.8 753.2
+598.7 955.1
+599.6 1296.2
+600.4 981.8
+601.5 1121.6
+602.2 217.8
+603.0 398.3
+604.0 367.1
+605.3 535.4
+606.3 519.1
+607.5 197.0
+608.4 808.0
+609.3 1091.9
+610.6 396.3
+611.6 753.2
+612.3 333.8
+613.8 755.4
+614.9 342.5
+615.7 1760.6
+617.4 71901.3
+618.4 25285.9
+619.6 3733.0
+621.1 1908.4
+622.0 1133.7
+623.1 515.5
+625.1 2631.8
+626.2 1100.7
+627.5 782.9
+628.6 1728.0
+629.4 2529.7
+630.6 2084.0
+631.4 401.5
+632.5 1874.0
+633.4 2852.5
+634.2 5641.4
+635.2 2752.2
+636.5 2055.6
+637.3 235.2
+638.3 627.1
+639.3 1935.9
+640.3 2221.0
+641.8 9064.2
+642.7 36868.8
+643.6 6024.0
+644.8 359.0
+645.6 789.2
+646.5 85.4
+647.8 270.5
+656.7 238.4
+657.3 1415.4
+658.5 1477.1
+659.5 341.6
+660.6 1352.1
+664.7 555.0
+667.3 6328.9
+668.5 2180.1
+669.6 4477.6
+670.6 1168.3
+671.7 484.7
+672.5 613.1
+673.9 623.9
+676.4 2059.1
+677.4 1555.4
+678.8 2644.6
+679.7 320.5
+680.8 149.1
+681.5 649.5
+682.5 217.1
+683.3 115.2
+685.3 31278.6
+686.3 8705.5
+687.3 3329.3
+688.3 518.4
+689.4 591.3
+691.7 540.4
+692.5 694.2
+693.3 482.6
+694.5 167.5
+695.6 671.0
+696.3 400.5
+697.4 116.6
+698.4 213.3
+700.3 441.2
+700.9 99.8
+701.6 336.3
+702.7 290.0
+703.5 856.5
+704.3 403.5
+705.2 104.1
+705.9 141.6
+710.4 255.8
+711.2 76.6
+712.8 4496.5
+713.6 3785.0
+714.6 637.8
+715.5 300.6
+716.7 367.3
+717.4 451.1
+718.3 275.3
+719.6 478.8
+720.4 2572.6
+721.4 1710.6
+722.4 754.1
+723.2 660.4
+723.9 2899.4
+724.6 1144.1
+725.2 870.3
+726.3 612.8
+727.3 46.4
+728.4 196.4
+730.4 29516.6
+731.4 10958.0
+732.5 6067.8
+733.7 1648.6
+735.0 178.8
+736.7 592.7
+738.3 1574.2
+739.1 373.0
+740.4 557.7
+741.8 789.6
+742.4 5804.3
+743.4 3571.0
+744.6 220.3
+746.0 129.6
+747.5 180.3
+752.1 647.5
+753.5 300.8
+754.6 210.8
+756.1 336.7
+756.7 101.3
+758.3 269.2
+760.9 1148.8
+761.7 183.8
+762.7 69.2
+764.6 278.7
+769.4 2029.1
+770.5 1459.1
+771.7 85.8
+772.6 264.7
+773.5 2928.1
+774.5 63.4
+775.5 107.9
+777.5 541.7
+778.5 781.8
+779.4 228.5
+780.4 651.7
+781.2 469.1
+782.0 2575.1
+782.8 2840.1
+784.4 871.3
+785.6 83.0
+786.4 54.4
+787.2 113.1
+788.3 396.6
+789.4 175.0
+790.6 658.6
+791.7 133.4
+792.5 251.4
+793.9 176.2
+796.5 184.8
+798.0 207.1
+798.7 591.6
+799.8 499.5
+800.6 816.5
+801.4 378.4
+802.5 280.9
+803.6 135.4
+805.3 70.3
+807.4 224.1
+808.5 1315.6
+809.5 1191.0
+810.5 351.4
+811.6 120.3
+812.4 395.6
+813.4 520.5
+815.5 99.7
+816.6 523.2
+817.7 595.7
+818.6 1909.6
+819.5 1441.3
+820.7 892.0
+821.4 805.7
+822.4 297.2
+823.4 697.1
+824.6 1029.8
+825.4 1409.7
+826.9 7053.2
+827.7 10299.9
+828.6 2183.6
+829.6 1431.8
+830.6 1204.1
+831.4 1466.1
+832.2 316.1
+833.3 374.8
+834.6 9703.1
+835.5 7269.1
+836.6 3625.1
+838.0 737.3
+839.3 4663.6
+840.8 1223.3
+841.7 612.3
+842.5 946.9
+843.5 542.3
+844.4 565.7
+845.6 417.5
+846.9 2422.7
+847.7 76.7
+848.3 672.7
+848.9 229.8
+849.6 749.0
+851.7 235.1
+852.5 117.3
+853.5 298.4
+854.5 257.4
+855.6 770.7
+856.7 1257.2
+857.4 8896.2
+858.3 3787.1
+859.5 14746.7
+860.5 5373.9
+861.7 1598.8
+862.4 147.5
+864.1 120.8
+865.4 67.9
+866.9 123.9
+868.8 414.2
+869.6 410.6
+871.8 111.0
+872.4 122.0
+873.5 412.4
+875.8 595.2
+876.9 569.9
+878.3 578.4
+878.9 277.9
+882.6 579.0
+883.5 279.7
+884.8 369.2
+885.6 166.6
+886.7 169.5
+888.1 423.9
+891.8 1585.8
+892.9 1343.5
+893.7 933.5
+894.7 256.2
+896.2 1292.7
+897.0 1434.5
+897.7 1063.5
+898.3 796.9
+899.6 126.7
+901.4 164.9
+902.7 2091.8
+903.7 347.7
+905.1 402.7
+906.0 293.9
+907.7 220.6
+910.3 272.7
+911.6 581.0
+912.5 102.4
+913.5 179.8
+914.3 538.0
+916.0 80.6
+917.1 216.4
+918.2 1592.5
+918.8 177.1
+919.4 1364.1
+920.5 153.6
+921.5 245.0
+922.6 151.3
+925.4 321.6
+927.5 1150.0
+928.6 2257.1
+929.6 964.8
+930.7 2926.8
+931.6 3596.9
+932.7 1692.7
+933.4 97.8
+934.6 90.6
+935.7 221.8
+937.1 492.1
+938.4 4885.8
+939.5 2589.3
+940.3 1117.4
+941.4 56.3
+944.5 79.3
+945.5 124.3
+947.8 3361.3
+948.7 1494.9
+949.7 1575.3
+950.7 344.9
+952.8 245.5
+954.7 172.3
+956.4 16143.9
+957.4 7001.5
+958.5 2090.8
+959.5 165.9
+961.4 51.5
+963.4 136.1
+964.6 170.6
+966.8 106.1
+969.6 50.8
+972.1 705.3
+972.9 186.9
+974.5 21535.0
+975.5 13968.2
+976.7 4192.6
+977.6 498.0
+978.4 248.8
+980.4 163.8
+982.4 135.8
+983.5 299.9
+984.8 354.9
+989.6 201.0
+990.5 358.9
+991.1 148.0
+992.2 153.8
+995.3 178.1
+997.5 179.4
+998.7 491.1
+999.8 90.0
+1000.7 208.0
+1001.5 1085.0
+1002.7 682.8
+1003.8 317.7
+1004.5 343.7
+1005.8 136.6
+1007.5 356.4
+1009.5 2565.6
+1010.5 2034.2
+1011.5 286.0
+1018.6 392.0
+1020.2 116.4
+1023.5 265.0
+1024.8 43.8
+1025.4 220.0
+1027.4 11298.2
+1028.4 6538.0
+1029.7 1330.2
+1030.7 437.4
+1033.4 37.5
+1034.6 139.7
+1036.4 154.2
+1037.5 42.6
+1038.5 541.3
+1040.6 56.7
+1042.3 648.6
+1043.6 750.2
+1044.5 1358.4
+1045.5 138.3
+1047.7 180.2
+1053.3 57.0
+1056.1 572.9
+1056.7 787.4
+1057.6 904.2
+1058.8 316.1
+1059.5 238.9
+1069.6 257.1
+1071.6 171.6
+1073.5 14793.5
+1074.6 10461.9
+1075.6 2243.1
+1076.6 316.2
+1077.5 469.3
+1079.7 152.9
+1082.9 86.1
+1083.5 99.3
+1084.9 32.7
+1086.4 75.1
+1087.7 309.7
+1090.4 654.1
+1093.1 52.1
+1097.8 75.2
+1099.4 71.1
+1101.0 680.8
+1102.5 167.2
+1103.7 235.5
+1105.4 440.1
+1110.4 171.2
+1111.6 519.8
+1112.5 637.8
+1113.6 527.2
+1118.8 578.6
+1120.1 303.5
+1120.7 169.0
+1121.7 99.2
+1127.6 472.0
+1128.4 470.4
+1129.7 58.7
+1134.5 119.3
+1136.4 945.4
+1137.6 4458.0
+1138.6 1911.2
+1139.7 1228.6
+1140.7 313.2
+1150.9 55.3
+1155.5 15405.4
+1156.5 11546.0
+1157.6 4019.6
+1158.6 99.3
+1160.5 174.8
+1163.6 105.3
+1167.9 145.2
+1171.6 106.6
+1172.4 144.8
+1173.6 532.9
+1174.4 332.5
+1177.6 434.1
+1188.7 728.4
+1189.7 1521.9
+1190.8 75.2
+1198.6 133.5
+1210.8 102.4
+1211.7 354.4
+1213.0 99.0
+1233.0 197.3
+1242.7 86.9
+1243.7 112.9
+1282.3 57.9
+S	97	97	433.78
+I	ID	23
+I	RTime	1.0777
+Z	2	866.55
+Z	3	1299.32
+149.1 3.2
+195.1 2.0
+210.8 1.5
+221.1 1.7
+221.7 3.4
+243.4 1.7
+261.1 3.5
+263.4 1.3
+268.1 2.7
+274.9 1.3
+289.0 19.7
+293.3 2.7
+294.0 3.2
+299.2 3.0
+303.2 3.7
+306.0 7.6
+308.9 1.7
+318.8 1.1
+323.0 1.5
+325.6 1.6
+326.3 6.0
+327.2 4.4
+329.0 1.3
+333.4 1.1
+336.1 5.9
+343.2 10.8
+344.1 12.3
+345.1 18.7
+346.1 2.0
+353.2 5.0
+357.3 3.7
+360.4 6.5
+361.0 1.2
+362.4 20.5
+363.1 1.1
+364.9 2.5
+371.1 1.3
+374.1 1.3
+375.2 3.4
+378.7 11.3
+380.6 9.6
+395.4 1.1
+397.5 9.1
+398.4 0.8
+399.3 9.1
+401.3 7.0
+404.6 3.7
+411.8 3.0
+413.1 1.0
+414.6 2.7
+415.3 3.7
+415.9 0.8
+417.1 8.3
+418.2 4.0
+420.2 13.6
+422.2 12.8
+424.1 14.0
+425.7 40.2
+432.6 3.5
+434.7 2.9
+447.2 3.0
+448.0 8.1
+453.9 10.8
+457.6 1.5
+469.3 1.3
+485.6 3.7
+495.8 6.5
+499.2 8.6
+503.4 5.1
+508.3 18.1
+512.7 24.1
+514.7 6.5
+519.8 2.9
+523.7 11.6
+527.8 20.7
+528.4 2.7
+531.3 15.0
+538.6 70.8
+546.4 3.4
+548.8 4.9
+553.4 6.5
+576.2 6.0
+579.7 4.0
+582.3 40.2
+583.0 2.0
+614.4 9.1
+616.1 4.0
+677.4 15.0
+772.3 1.5
+S	98	98	751.28
+Z	2	1501.55
+216.2 3.1
+224.2 0.8
+227.2 1.5
+228.3 2.8
+231.2 5.7
+234.3 1.0
+239.2 0.5
+240.2 4.3
+241.4 2.8
+242.1 0.3
+248.3 2.8
+252.5 2.6
+253.4 4.2
+254.4 1.2
+257.4 1.1
+258.2 3.4
+259.2 5.7
+260.0 2.8
+262.2 1.3
+263.4 1.4
+266.7 5.0
+267.3 0.3
+268.4 3.7
+269.3 1.7
+270.2 4.2
+271.9 0.7
+274.5 6.7
+276.1 59.9
+277.4 9.7
+281.1 0.9
+282.2 2.5
+282.8 7.2
+285.3 6.9
+287.3 7.6
+288.2 1.7
+291.1 1.1
+292.3 1.4
+297.4 1.8
+298.1 0.7
+299.3 4.6
+300.0 4.7
+303.3 4.0
+304.3 0.5
+309.1 1.0
+310.5 1.3
+311.5 2.9
+312.3 2.1
+318.1 1.2
+319.2 13.4
+320.3 3.3
+322.3 1.5
+323.0 2.2
+324.1 2.8
+326.3 2.1
+327.3 4.0
+328.5 1.3
+329.4 3.3
+332.7 1.8
+333.3 16.5
+336.1 3.3
+338.1 1.7
+340.3 1.1
+345.4 1.1
+346.2 2.4
+347.2 5.3
+350.3 3.1
+354.3 4.6
+355.4 3.2
+356.4 3.1
+357.4 6.7
+358.4 4.4
+359.2 3.5
+364.7 3.5
+365.6 2.2
+368.5 1.5
+372.4 2.1
+373.4 5.9
+374.4 11.8
+375.3 3.2
+376.3 47.1
+377.3 7.8
+378.6 1.4
+380.1 1.1
+386.2 4.6
+390.5 39.9
+391.4 9.0
+392.3 2.2
+394.4 1.9
+398.9 0.5
+399.6 1.8
+400.5 1.0
+402.4 5.8
+404.4 11.6
+405.1 16.9
+406.3 0.5
+408.1 1.6
+410.3 11.0
+411.4 4.0
+413.3 2.6
+414.5 5.7
+416.3 3.2
+418.4 1.4
+421.3 4.5
+422.3 4.8
+423.4 3.9
+424.6 7.1
+425.4 1.5
+427.3 13.2
+429.0 3.7
+430.1 5.0
+431.3 6.0
+432.2 1.1
+434.3 3.2
+436.2 4.9
+437.2 5.5
+440.2 12.7
+441.3 4.8
+443.4 1.0
+445.3 18.4
+447.3 12.0
+449.4 5.5
+450.3 1.2
+457.5 11.0
+458.4 13.4
+459.4 13.5
+460.3 1.9
+463.3 43.8
+464.6 9.8
+465.4 0.7
+466.3 0.6
+467.5 0.5
+468.4 1.8
+469.4 0.5
+475.2 19.4
+476.2 2.7
+476.8 0.6
+478.0 1.5
+478.7 7.0
+480.2 3.1
+481.1 0.8
+484.6 5.7
+485.3 3.0
+486.6 2.4
+487.2 5.8
+488.7 1.7
+490.3 1.2
+491.8 1.5
+494.4 2.6
+495.1 2.0
+496.4 0.8
+497.3 5.9
+498.7 0.9
+501.1 4.5
+502.4 19.3
+503.4 3.5
+508.7 3.8
+510.2 3.8
+511.1 0.4
+513.3 5.6
+514.5 10.7
+516.5 14.0
+517.3 0.5
+519.3 2.9
+520.5 5.6
+522.8 7.4
+523.9 0.7
+525.2 13.0
+527.5 5.0
+529.2 10.6
+530.2 9.3
+531.4 8.2
+532.5 22.8
+533.3 5.6
+534.5 37.3
+535.6 2.0
+536.2 1.9
+537.3 5.3
+539.8 16.7
+540.9 11.2
+541.6 1.4
+543.6 0.7
+544.3 2.1
+546.4 8.9
+547.2 5.0
+548.6 6.6
+549.5 3.4
+550.5 3.1
+551.9 5.4
+552.9 18.4
+554.3 6.0
+556.2 2.6
+557.5 2.6
+558.4 11.6
+559.4 6.0
+560.3 6.2
+561.3 11.7
+562.4 6.0
+563.5 12.3
+564.1 2.4
+566.4 17.1
+568.0 6.5
+568.8 27.7
+569.7 4.3
+571.2 1.8
+572.3 4.3
+574.1 9.9
+575.5 6.8
+576.1 20.5
+577.2 12.2
+578.1 8.3
+578.8 5.9
+579.6 3.2
+580.9 7.0
+581.7 5.6
+582.8 7.3
+583.4 1.4
+584.0 10.2
+585.4 12.4
+586.2 10.5
+587.6 6.3
+588.6 2.0
+589.5 14.4
+590.2 2.2
+591.4 2.8
+594.2 30.3
+595.4 29.3
+596.4 6.3
+597.5 1.1
+598.9 3.7
+599.5 12.1
+600.3 1.0
+601.1 17.8
+602.0 2.8
+603.3 37.9
+604.4 2.8
+605.1 3.5
+606.3 6.7
+607.0 7.3
+609.5 38.3
+610.5 21.8
+611.7 72.6
+612.4 17.1
+613.1 6.7
+613.8 20.5
+614.6 1.8
+615.3 11.4
+616.7 11.6
+617.5 20.4
+618.5 32.4
+619.4 32.6
+620.4 7.7
+621.3 43.5
+622.5 16.5
+623.8 20.1
+624.5 26.7
+625.4 12.8
+626.3 7.5
+627.7 170.7
+628.5 13.4
+629.2 15.2
+629.9 16.7
+631.3 5.2
+632.8 66.7
+633.6 22.2
+634.6 0.5
+636.3 20.2
+637.2 25.4
+638.3 23.1
+639.0 7.8
+640.3 20.6
+642.1 30.8
+643.4 37.0
+644.8 38.2
+645.7 75.4
+646.7 26.0
+648.1 21.2
+649.4 203.9
+650.6 39.0
+651.9 2.6
+653.0 11.0
+654.1 245.9
+655.1 66.8
+656.1 4.4
+657.7 9.9
+658.7 3.3
+659.7 4.4
+660.4 34.9
+661.5 22.6
+663.1 642.8
+664.1 71.0
+664.8 4.7
+666.6 35.2
+667.4 6.2
+668.9 18.0
+669.6 26.2
+670.5 8.4
+671.3 15.9
+672.2 31.2
+673.2 22.8
+674.8 29.0
+675.6 35.3
+676.6 26.4
+677.5 41.5
+678.2 127.4
+679.4 32.1
+680.4 19.8
+681.1 6.8
+683.2 58.2
+684.0 10.7
+684.6 15.1
+685.3 2.4
+685.9 22.8
+687.2 5.9
+688.3 52.4
+689.1 59.1
+690.3 31.2
+691.0 46.9
+692.3 31.1
+693.1 14.3
+695.1 6.1
+696.0 15.5
+697.3 72.6
+698.2 208.9
+699.1 90.5
+700.3 44.0
+701.6 23.5
+703.0 15.5
+704.6 21.4
+705.5 42.9
+706.6 548.0
+707.4 101.9
+708.6 4.3
+709.3 9.1
+710.4 7.0
+711.0 11.9
+712.1 26.0
+713.2 26.3
+715.0 56.1
+715.8 79.5
+716.5 15.0
+717.2 9.4
+717.9 9.0
+718.6 3.9
+719.8 36.2
+720.5 25.0
+721.8 20.0
+722.5 70.0
+723.7 55.4
+724.9 51.5
+725.7 69.1
+727.1 19.6
+728.0 15.2
+728.9 21.0
+729.7 23.5
+730.3 61.4
+731.2 6.1
+732.3 39.0
+733.3 287.5
+734.2 236.5
+735.6 48.5
+736.7 18.4
+737.3 10.0
+738.1 3.5
+738.8 3.5
+739.6 13.9
+741.8 633.2
+742.6 836.1
+743.5 73.3
+751.3 3.2
+752.2 1.3
+757.5 2.2
+758.5 10.2
+761.2 7.8
+763.0 8.3
+764.0 11.8
+769.0 0.7
+770.6 0.8
+774.0 16.4
+774.9 7.0
+775.6 3.4
+776.5 1.7
+777.2 0.6
+778.3 6.0
+779.6 105.5
+780.5 20.6
+781.3 15.7
+783.3 3.8
+784.4 3.0
+785.4 5.6
+787.2 2.7
+788.2 11.2
+789.3 12.9
+790.7 4.1
+791.5 7.2
+793.1 4.9
+794.5 15.9
+795.6 3.4
+797.3 1.2
+798.7 2.3
+800.5 11.3
+803.5 4.9
+804.2 1.8
+805.4 10.1
+806.3 16.3
+806.9 1.0
+807.6 20.2
+808.9 10.8
+809.7 5.2
+810.9 8.5
+811.8 1.6
+812.6 17.6
+813.5 2.4
+814.4 0.4
+815.3 1.1
+816.5 7.7
+817.6 5.5
+818.4 13.0
+820.5 8.7
+823.5 75.3
+824.4 17.0
+825.6 14.9
+826.4 3.7
+827.2 1.6
+828.5 1.3
+829.6 4.7
+830.6 2.8
+831.7 2.7
+832.5 12.2
+833.3 1.3
+834.7 1.7
+836.4 21.0
+837.4 8.7
+838.2 5.8
+840.3 3.8
+842.9 2.0
+844.4 2.8
+845.5 9.9
+846.7 2.2
+847.6 5.4
+849.7 0.9
+850.5 5.3
+851.7 4.3
+852.6 3.7
+854.1 10.7
+855.6 4.9
+857.5 17.2
+861.8 4.0
+862.7 9.2
+863.6 13.2
+864.4 6.2
+865.6 2.5
+866.8 4.9
+867.4 4.5
+868.8 5.9
+869.7 32.1
+870.9 5.8
+872.6 6.6
+873.2 4.4
+878.2 10.6
+880.6 28.8
+881.5 4.8
+882.7 3.5
+883.7 2.2
+884.6 1.5
+887.0 3.6
+888.7 11.8
+889.6 22.3
+890.5 50.1
+891.4 21.2
+892.3 4.1
+893.8 4.9
+896.5 5.6
+897.1 2.7
+897.9 0.7
+898.6 1.9
+899.9 4.7
+900.6 0.7
+903.6 0.9
+904.4 1.9
+906.3 2.5
+907.0 3.9
+907.6 23.3
+908.6 13.8
+909.5 18.3
+910.1 10.6
+911.8 0.9
+914.2 5.4
+915.7 4.6
+916.5 1.5
+917.6 11.2
+918.5 5.4
+921.6 8.2
+922.7 1.0
+923.5 3.2
+930.0 7.6
+931.2 4.2
+931.9 8.0
+933.0 1.5
+935.3 16.6
+937.0 13.6
+938.6 3.2
+939.6 5.1
+941.4 3.8
+946.4 3.8
+948.1 6.7
+949.5 25.6
+950.6 32.8
+951.4 3.7
+952.3 2.5
+956.5 1.9
+958.5 3.9
+959.6 1.5
+960.3 4.2
+963.6 2.7
+964.4 4.2
+965.6 3.2
+966.7 3.6
+967.4 37.0
+968.3 24.9
+969.3 5.5
+974.4 2.3
+975.5 1.2
+978.6 14.3
+979.6 8.6
+982.4 0.6
+983.9 7.3
+985.7 2.6
+986.8 15.4
+990.1 5.0
+990.9 3.3
+992.1 6.8
+994.5 5.1
+996.7 9.8
+997.6 3.5
+999.0 7.2
+1001.5 1.5
+1002.3 1.8
+1004.4 10.7
+1005.2 2.5
+1006.5 8.1
+1010.6 1.5
+1011.3 1.1
+1014.2 4.9
+1015.3 1.8
+1019.6 3.8
+1020.6 12.1
+1021.7 15.3
+1022.5 3.2
+1023.6 10.5
+1026.1 4.0
+1026.9 3.1
+1028.9 9.1
+1031.9 15.1
+1032.9 8.2
+1033.8 2.3
+1034.8 9.6
+1036.6 9.0
+1038.6 101.2
+1039.6 37.3
+1040.7 4.7
+1042.2 4.1
+1043.5 16.2
+1045.0 2.2
+1048.7 21.7
+1049.6 24.0
+1050.6 10.4
+1051.2 3.1
+1054.3 22.5
+1055.0 7.3
+1055.7 28.5
+1056.7 5.8
+1057.3 3.1
+1058.1 6.3
+1059.3 4.6
+1060.5 2.5
+1062.3 1.6
+1063.6 3.4
+1064.9 0.9
+1066.6 3.0
+1067.4 0.9
+1073.9 1.6
+1075.5 3.4
+1077.5 2.1
+1078.7 6.0
+1079.9 0.9
+1081.5 3.8
+1082.5 2.1
+1085.6 2.2
+1086.6 2.1
+1087.7 4.1
+1089.4 8.7
+1091.0 3.6
+1091.7 1.2
+1093.7 11.8
+1094.5 7.0
+1095.6 16.2
+1097.6 1.6
+1099.4 3.0
+1101.9 2.6
+1105.1 6.5
+1106.0 11.6
+1106.6 0.9
+1107.6 25.3
+1108.7 12.6
+1109.5 7.5
+1110.8 10.2
+1111.6 68.2
+1112.4 44.0
+1113.5 6.9
+1114.6 1.8
+1119.5 7.0
+1121.9 1.5
+1125.5 93.0
+1126.5 55.1
+1127.6 16.3
+1128.6 1.2
+1129.8 1.1
+1130.8 1.8
+1134.6 1.4
+1135.7 16.0
+1136.8 12.1
+1137.8 2.8
+1138.8 2.5
+1139.8 0.7
+1143.6 7.8
+1144.6 7.1
+1146.0 10.0
+1146.8 2.1
+1150.7 4.0
+1151.5 2.3
+1153.3 2.2
+1158.8 0.7
+1160.6 1.4
+1167.8 0.9
+1169.8 2.7
+1171.1 0.9
+1177.4 0.7
+1178.3 5.7
+1179.0 4.7
+1180.0 6.8
+1181.8 4.1
+1182.5 0.5
+1188.5 4.7
+1189.4 8.8
+1190.3 1.5
+1191.2 5.4
+1192.2 2.3
+1193.7 1.2
+1196.3 15.4
+1197.7 7.6
+1198.6 8.8
+1205.5 12.8
+1207.5 18.1
+1208.8 23.5
+1209.6 18.9
+1211.7 6.4
+1212.5 5.0
+1217.6 4.0
+1219.0 6.9
+1220.5 5.6
+1221.5 1.6
+1222.7 35.1
+1223.8 15.3
+1225.6 181.6
+1226.6 101.1
+1227.5 35.4
+1228.2 4.3
+1232.9 13.7
+1236.0 1.4
+1236.7 2.5
+1238.9 7.4
+1242.6 2.1
+1250.5 2.7
+1252.0 1.5
+1253.8 45.0
+1254.7 23.9
+1255.5 4.7
+1256.7 6.5
+1258.1 1.7
+1258.8 0.4
+1259.6 1.5
+1267.7 3.1
+1269.1 1.2
+1271.9 1.0
+1276.9 1.3
+1280.7 2.7
+1283.6 4.3
+1284.7 2.8
+1289.9 5.7
+1291.9 4.4
+1292.8 2.5
+1293.6 1.4
+1294.8 2.2
+1304.4 3.3
+1306.8 16.7
+1307.7 1.4
+1308.4 0.5
+1312.6 2.2
+1318.8 3.5
+1321.2 3.9
+1324.2 2.4
+1327.6 4.5
+1343.0 5.2
+1347.6 3.8
+1381.0 1.6
+1382.9 2.7
+1384.3 3.7
+1413.8 1.3
+1430.6 4.5
+1445.9 3.9
+S	99	99	581.95
+I	ID	2
+I	RTime	.1569
+Z	3	1743.83
+206.5 1.2
+265.2 0.8
+269.0 1.2
+289.0 2.0
+291.1 4.0
+292.9 1.6
+302.8 2.0
+310.4 5.3
+320.3 4.1
+324.4 2.2
+345.3 13.1
+346.2 2.0
+361.3 4.8
+368.3 3.0
+408.4 2.5
+418.2 1.5
+441.2 1.2
+442.4 2.7
+445.3 4.9
+450.7 4.5
+452.0 2.2
+454.0 2.2
+455.4 4.6
+456.2 3.9
+459.9 0.8
+470.2 4.4
+472.9 2.0
+474.4 25.0
+475.4 1.7
+476.8 1.5
+478.0 1.8
+484.0 1.7
+487.2 3.0
+489.6 2.5
+497.7 2.2
+504.3 5.5
+508.9 6.9
+509.7 2.0
+513.3 1.8
+525.1 4.0
+536.4 1.2
+540.5 2.2
+541.3 2.0
+544.9 7.0
+545.7 0.8
+554.1 4.0
+561.0 2.4
+562.5 3.2
+563.3 6.5
+564.4 19.3
+565.0 5.4
+566.0 16.5
+567.2 3.4
+572.7 1.6
+573.5 22.7
+574.2 1.3
+617.5 1.5
+620.6 2.7
+621.8 10.6
+626.8 16.2
+635.9 17.1
+636.6 2.7
+654.1 1.3
+655.3 1.1
+667.0 1.2
+678.8 9.5
+682.9 3.7
+686.8 5.1
+691.6 9.3
+694.2 3.5
+695.6 1.2
+720.5 7.3
+721.4 1.1
+776.2 10.5
+785.4 16.6
+802.4 1.6
+804.5 2.9
+819.9 3.5
+823.2 2.2
+835.4 4.9
+837.7 2.0
+844.8 0.8
+868.3 3.0
+881.2 3.5
+902.7 3.2
+909.5 1.8
+913.4 2.9
+947.4 4.1
+957.3 5.3
+964.4 1.7
+975.5 2.4
+1154.0 2.7
+1284.8 4.0
+S	100	100	763.11
+I	ID	194
+I	RTime	9.6005
+Z	1	763.11
+212.9 1.7
+239.9 1.7
+259.1 8.8
+268.1 1.8
+269.1 1.8
+271.2 1.3
+280.9 1.0
+286.9 2.4
+288.8 1.7
+309.6 1.1
+317.2 2.7
+323.9 3.0
+332.1 2.0
+339.4 1.5
+343.1 7.4
+356.1 3.2
+357.2 1.7
+359.4 1.2
+360.2 1.8
+361.9 2.0
+373.0 1.3
+374.4 2.2
+400.3 3.0
+403.0 2.7
+420.3 4.8
+426.2 5.5
+430.4 4.6
+431.2 1.3
+442.1 2.7
+443.1 1.6
+447.3 2.4
+451.4 3.5
+454.4 2.9
+468.6 2.4
+470.2 3.2
+476.2 2.0
+477.8 2.2
+490.1 1.8
+495.2 108.1
+508.1 1.2
+509.9 1.7
+513.2 1.1
+515.3 1.2
+519.4 1.1
+525.5 1.6
+526.2 8.3
+534.3 4.5
+542.2 2.5
+543.3 3.9
+547.5 2.7
+548.5 2.0
+561.2 5.3
+562.4 4.4
+576.5 4.4
+585.4 5.0
+586.5 2.4
+590.6 3.7
+599.1 2.0
+600.5 1.8
+602.3 4.1
+622.5 1.2
+623.4 1.7
+626.3 2.2
+627.1 1.0
+634.3 6.4
+639.7 1.2
+645.2 3.5
+648.3 2.9
+658.8 1.3
+683.1 2.7
+688.4 3.2
+697.5 2.0
+698.8 6.0
+710.3 4.3
+711.4 1.3
+713.3 3.5
+716.5 3.0
+718.4 1.7
+721.6 2.0
+726.5 1.5
+727.1 1.7
+728.0 2.0
+733.6 0.8
+739.0 5.5
+744.6 9.8
+745.4 18.1
+746.3 6.8
+830.3 2.7
+928.4 1.6
+977.7 1.7
+1040.5 4.4
+1096.3 1.0
+1226.8 1.6
+1339.5 2.0
+1352.6 2.0
+S	101	101	833.24
+I	ID	84
+I	RTime	3.9201
+Z	1	833.24
+248.9 1.6
+251.1 3.0
+267.2 15.6
+268.1 5.5
+269.2 1.0
+281.1 10.6
+282.2 8.1
+285.0 2.2
+298.8 4.3
+300.1 5.4
+326.2 3.7
+327.0 2.0
+340.1 2.0
+342.1 11.6
+351.4 2.9
+353.0 1.2
+355.1 23.8
+356.2 21.2
+366.0 1.7
+381.6 2.5
+416.1 5.8
+429.7 5.9
+444.1 1.3
+445.1 2.4
+459.8 0.8
+475.7 2.9
+503.1 5.0
+503.8 1.8
+505.4 3.5
+554.5 2.5
+560.7 5.9
+564.8 1.5
+567.2 2.0
+568.7 2.2
+570.8 3.7
+593.6 4.3
+600.5 1.6
+610.1 9.6
+615.4 2.0
+617.5 4.4
+618.6 3.0
+628.8 24.6
+631.9 3.2
+638.5 3.9
+641.0 3.5
+644.1 7.6
+646.9 33.4
+647.9 5.3
+672.8 4.9
+682.1 7.8
+690.4 5.4
+695.4 3.7
+696.6 23.0
+701.4 2.2
+704.3 14.8
+705.2 1.2
+707.0 2.7
+718.8 1.7
+723.4 2.7
+724.6 3.0
+737.1 7.3
+759.8 7.1
+764.7 33.5
+772.6 1.7
+783.8 2.7
+786.7 10.5
+789.4 1.8
+799.5 5.3
+801.9 6.8
+803.1 7.0
+808.5 10.5
+809.7 6.6
+815.2 12.0
+816.4 2.2
+824.9 9.3
+828.4 4.5
+S	102	102	733.22
+Z	2	1465.43
+208.8 7.9
+213.4 6.8
+215.6 2.1
+216.3 7.7
+218.0 4.4
+219.2 4.6
+226.0 28.6
+227.1 6.2
+232.2 13.8
+238.1 22.3
+241.7 3.1
+244.2 56.8
+245.1 17.0
+246.0 2.7
+254.1 9.2
+256.2 5.3
+260.1 11.3
+261.1 3.9
+261.9 8.9
+267.3 3.8
+272.1 3.6
+275.2 23.2
+276.3 2.2
+280.1 4.7
+281.2 9.3
+284.1 5.1
+285.4 2.8
+287.1 3.6
+288.1 4.0
+294.2 15.6
+295.0 3.1
+296.5 10.8
+299.3 2.1
+300.3 7.2
+302.1 11.7
+306.1 16.5
+309.2 4.4
+313.9 12.1
+314.8 15.5
+325.2 11.2
+329.2 15.2
+331.5 2.1
+333.2 7.7
+340.1 5.0
+341.9 10.9
+343.2 214.5
+344.1 30.1
+348.0 2.9
+359.0 15.0
+361.9 6.0
+364.3 11.7
+367.3 4.3
+370.2 3.3
+373.2 14.2
+375.3 5.5
+384.3 17.1
+385.6 6.6
+386.3 4.9
+387.1 2.5
+394.1 3.3
+396.3 16.1
+397.3 1.8
+401.3 15.4
+402.2 9.2
+403.0 4.2
+404.6 13.0
+406.7 9.2
+407.4 35.1
+408.5 7.6
+409.3 30.2
+410.5 4.0
+412.1 4.2
+413.2 9.3
+414.2 24.4
+420.5 7.4
+422.3 30.2
+427.4 5.7
+430.1 43.3
+431.0 3.8
+432.0 3.4
+432.8 3.0
+435.2 2.7
+438.1 8.4
+441.1 13.5
+442.3 21.5
+443.1 1.6
+444.4 6.1
+448.0 4.2
+449.1 6.6
+453.5 3.8
+459.2 18.6
+466.1 3.2
+468.8 27.0
+470.3 22.3
+472.3 14.2
+473.3 3.3
+475.6 4.3
+477.2 1.9
+482.8 52.2
+484.2 64.4
+485.2 3.3
+486.5 9.2
+488.1 7.0
+488.7 8.2
+490.3 5.9
+493.1 29.1
+494.4 5.2
+497.5 6.8
+499.2 13.2
+500.1 13.0
+501.2 24.0
+502.1 16.8
+503.6 5.9
+509.3 1.7
+511.6 2.5
+514.2 8.9
+515.4 6.2
+516.1 4.4
+520.4 21.7
+521.5 14.9
+522.2 1.7
+523.2 60.6
+524.4 8.3
+528.3 6.6
+530.2 4.5
+533.4 2.9
+536.4 53.3
+537.4 29.3
+538.3 13.4
+541.5 7.9
+544.0 10.7
+546.3 2.5
+547.8 10.4
+549.4 15.5
+550.3 4.6
+551.1 2.0
+552.4 6.9
+553.1 3.6
+555.1 15.4
+557.7 25.9
+559.2 18.4
+560.3 13.4
+562.1 6.1
+563.7 31.0
+564.6 9.1
+566.5 2.3
+568.4 32.1
+569.3 31.7
+570.4 35.1
+571.3 13.9
+573.4 13.6
+575.6 4.5
+577.6 1.4
+579.9 6.4
+584.7 5.2
+585.5 9.3
+587.3 29.1
+588.5 9.1
+590.1 12.9
+594.3 8.6
+597.2 54.1
+598.2 1.6
+599.1 3.9
+602.8 93.1
+603.4 21.7
+604.2 8.3
+605.4 38.1
+606.5 6.5
+610.5 18.5
+611.2 6.1
+612.2 4.4
+613.2 8.1
+614.1 29.9
+615.2 56.8
+616.1 24.7
+617.5 21.7
+618.4 5.8
+620.3 29.7
+621.5 4.5
+624.6 78.1
+625.4 2.7
+626.2 4.9
+628.0 19.8
+629.6 5.6
+631.5 16.8
+632.2 207.0
+633.4 27.0
+634.4 16.3
+635.1 4.9
+641.6 4.5
+644.5 2.9
+647.4 5.0
+649.3 12.4
+651.5 10.6
+655.3 2.3
+656.0 3.6
+660.7 16.4
+661.3 6.8
+666.0 6.1
+667.2 6.8
+668.6 25.4
+669.4 4.8
+670.0 2.2
+671.3 31.7
+672.3 4.3
+673.3 5.5
+677.4 9.1
+679.8 21.5
+683.4 89.8
+685.5 8.2
+688.4 11.7
+689.6 8.4
+691.6 4.4
+695.1 9.5
+696.3 4.0
+697.3 7.9
+698.4 6.8
+699.4 1.9
+700.9 4.7
+703.0 14.2
+703.8 2.9
+704.7 5.8
+705.7 13.0
+706.5 10.9
+707.3 8.6
+708.5 13.4
+709.3 3.2
+710.4 11.7
+714.0 27.8
+715.2 178.7
+716.3 24.9
+717.2 20.2
+718.7 12.2
+719.3 13.2
+720.3 28.1
+722.8 221.9
+723.6 155.8
+724.4 37.5
+726.0 15.3
+737.4 10.0
+739.5 7.3
+744.4 3.1
+746.5 10.1
+749.7 26.7
+757.7 7.1
+763.5 2.1
+767.6 3.6
+773.8 34.5
+775.4 10.1
+777.2 4.6
+778.6 17.9
+779.3 28.6
+780.4 23.5
+784.4 58.2
+785.3 61.2
+787.5 2.3
+790.4 24.6
+791.5 10.9
+793.9 2.1
+796.0 27.0
+796.7 1.6
+797.5 2.6
+807.3 14.9
+811.4 34.0
+813.8 10.0
+817.0 64.0
+817.6 10.7
+819.7 11.3
+820.4 6.2
+821.2 3.7
+823.9 8.7
+826.2 2.7
+828.5 6.6
+831.4 387.8
+832.6 100.0
+833.7 5.2
+835.4 4.6
+837.9 11.9
+838.9 2.8
+841.1 50.8
+842.4 3.9
+843.2 4.9
+846.3 7.9
+848.4 6.7
+851.2 5.1
+855.5 47.5
+856.5 16.0
+857.3 5.0
+860.8 5.5
+866.4 5.1
+867.4 7.1
+870.4 17.5
+871.0 10.4
+872.8 4.5
+877.2 2.9
+879.1 17.4
+881.3 7.4
+883.6 7.0
+885.4 14.2
+888.7 5.5
+890.5 43.8
+891.5 7.6
+892.5 5.5
+894.0 28.5
+897.4 72.4
+898.3 115.1
+899.1 28.3
+899.8 11.8
+900.5 11.9
+901.1 3.1
+906.2 6.6
+907.2 22.5
+908.3 29.8
+909.3 19.5
+910.2 11.8
+915.6 4.3
+916.3 8.4
+920.2 1.6
+920.9 2.0
+922.4 3.0
+923.5 6.2
+924.3 5.2
+925.7 23.0
+926.4 17.0
+927.4 13.1
+928.7 5.6
+932.4 8.0
+938.9 5.7
+939.6 13.5
+941.3 5.3
+943.6 12.3
+944.2 12.8
+946.2 1.2
+947.1 5.5
+953.8 5.9
+954.4 7.7
+956.2 20.2
+959.5 11.7
+962.5 358.1
+963.5 41.4
+964.7 9.2
+967.6 12.3
+968.9 4.5
+970.5 10.9
+971.5 10.9
+974.3 14.8
+975.3 31.7
+976.0 74.9
+976.6 47.6
+977.4 2.5
+984.7 6.5
+989.0 65.5
+992.4 2.0
+996.5 3.7
+998.5 10.6
+999.7 3.8
+1000.9 1.9
+1005.5 4.7
+1006.5 11.5
+1011.5 31.2
+1013.6 11.5
+1019.4 6.6
+1020.6 32.3
+1021.5 55.9
+1022.7 89.8
+1023.9 36.0
+1024.7 22.3
+1025.3 15.8
+1032.1 29.0
+1033.5 102.3
+1034.7 41.2
+1036.4 13.7
+1037.4 17.6
+1039.6 11.7
+1040.8 24.6
+1041.6 3.4
+1042.5 6.7
+1044.4 7.0
+1049.5 2.3
+1054.5 5.0
+1055.5 7.9
+1056.3 52.3
+1057.5 18.1
+1067.2 18.8
+1067.9 3.6
+1068.9 4.4
+1079.4 10.2
+1102.0 12.9
+1102.6 12.6
+1103.3 4.4
+1107.5 8.0
+1108.3 2.0
+1116.2 20.7
+1120.5 489.4
+1121.6 269.6
+1122.6 23.9
+1134.5 25.7
+1135.4 33.9
+1136.5 9.6
+1152.4 8.1
+1156.2 3.5
+1164.0 12.5
+1169.4 57.4
+1170.5 27.2
+1182.0 6.2
+1184.1 5.0
+1185.4 14.8
+1186.4 17.0
+1200.4 2.4
+1203.7 31.3
+1204.6 18.0
+1219.4 118.1
+1220.7 213.9
+1221.9 19.8
+1231.5 4.4
+1232.4 2.8
+1235.4 2.9
+1243.7 5.8
+1247.8 12.0
+1248.6 6.5
+1271.3 12.8
+1272.5 9.5
+1281.6 7.7
+1288.6 8.5
+1289.7 6.1
+1299.4 34.4
+1311.4 9.2
+1316.3 78.7
+1317.4 65.1
+1319.5 6.4
+1346.8 2.7
+1362.4 2.7
+1363.5 1.4
+1368.8 3.2
+1374.8 8.7
+S	103	103	559.10
+I	ID	221
+I	RTime	10.9134
+Z	2	1117.19
+157.1 3.0
+165.3 1.0
+172.2 1.2
+175.1 5.4
+183.1 1.7
+187.0 2.7
+189.3 3.9
+200.1 3.4
+208.2 4.3
+209.0 1.6
+216.2 1.3
+218.2 1.3
+225.1 3.7
+226.2 2.9
+234.1 1.2
+237.3 2.5
+240.1 8.8
+242.2 2.7
+244.1 2.5
+245.3 5.0
+251.3 4.0
+255.2 7.8
+257.0 1.6
+258.3 5.8
+263.8 1.3
+267.3 2.0
+268.4 2.2
+273.3 6.0
+278.3 1.8
+280.3 2.4
+283.9 2.4
+286.0 1.2
+291.1 88.0
+293.5 1.2
+295.4 2.4
+297.0 1.7
+298.3 2.5
+300.2 2.5
+313.3 2.2
+315.3 4.6
+322.6 1.1
+324.3 2.7
+335.0 2.2
+337.2 1.5
+341.2 4.4
+342.3 2.4
+343.8 7.1
+345.4 1.1
+346.3 1.6
+349.3 1.2
+353.3 1.7
+356.4 1.2
+358.4 1.6
+367.4 1.0
+369.3 1.8
+376.2 1.6
+380.4 10.0
+382.6 1.2
+385.4 2.2
+386.4 8.3
+387.4 10.5
+394.2 8.6
+395.1 2.5
+398.4 2.0
+401.9 3.9
+407.7 3.9
+412.4 10.3
+413.3 4.3
+418.2 2.0
+427.0 4.1
+428.4 2.5
+430.2 20.2
+431.3 4.0
+441.3 1.7
+442.9 8.3
+444.3 4.5
+448.2 1.6
+455.2 2.7
+464.9 3.5
+472.1 3.7
+472.9 5.3
+478.3 1.2
+481.3 1.2
+487.3 1.6
+488.2 2.7
+489.1 3.9
+502.1 6.1
+504.4 3.0
+505.0 3.2
+506.2 2.5
+509.4 2.7
+515.2 1.7
+523.4 9.6
+524.5 11.0
+525.3 16.7
+529.5 1.5
+536.0 5.0
+540.2 26.7
+541.4 82.3
+542.4 60.5
+543.3 9.1
+549.4 8.3
+550.1 8.1
+568.6 2.9
+610.4 4.0
+629.1 5.9
+641.9 11.3
+659.5 7.1
+683.3 2.0
+690.3 1.3
+692.7 1.2
+694.0 3.7
+702.3 1.6
+723.1 2.5
+729.5 1.7
+738.1 6.4
+755.5 2.2
+766.4 7.0
+773.0 2.5
+774.8 5.4
+775.4 1.2
+780.0 12.3
+790.3 3.2
+802.2 3.5
+840.4 3.7
+842.4 2.2
+859.4 2.7
+860.7 1.5
+866.3 9.8
+908.5 1.7
+920.6 9.0
+926.3 2.4
+943.7 3.0
+944.6 3.7
+970.5 2.7
+979.5 3.0
+S	104	104	565.22
+Z	2	1129.43
+164.9 5.2
+166.0 4.5
+173.1 1.3
+175.1 3.0
+182.1 49.2
+183.3 4.7
+184.2 0.5
+185.2 3.0
+186.0 3.6
+187.3 5.8
+189.2 4.3
+196.0 0.8
+197.2 2.6
+199.4 0.7
+201.1 3.3
+213.3 2.3
+214.3 4.6
+216.2 2.8
+217.1 1.6
+219.2 5.9
+222.9 1.1
+226.1 0.3
+227.1 3.8
+228.3 1.7
+229.1 2.3
+231.9 2.9
+233.2 0.4
+234.3 2.5
+235.2 4.8
+237.2 0.6
+238.2 0.3
+240.7 3.9
+241.3 1.9
+243.0 3.4
+244.4 7.2
+245.3 0.9
+246.3 1.9
+252.0 1.8
+253.2 3.8
+254.0 3.1
+256.3 1.6
+258.2 7.8
+259.9 4.7
+261.0 2.7
+262.2 1.7
+269.0 6.3
+270.1 0.6
+270.7 4.6
+272.0 0.9
+272.9 0.8
+274.4 0.7
+276.2 1.7
+277.0 9.9
+278.2 4.6
+279.4 11.7
+281.5 1.0
+285.1 0.8
+286.5 5.6
+287.2 17.6
+288.1 39.3
+289.2 10.8
+289.9 8.0
+292.3 1.7
+295.2 55.8
+296.3 5.1
+300.1 2.4
+300.9 0.8
+302.0 0.8
+304.0 14.8
+306.1 14.1
+307.6 5.4
+312.3 2.3
+313.3 2.5
+316.1 3.6
+317.2 6.5
+321.3 1.6
+322.7 9.5
+325.5 0.7
+327.3 6.2
+328.3 4.2
+333.2 0.5
+333.9 9.2
+335.3 13.9
+336.0 4.2
+336.7 3.5
+338.2 2.6
+339.2 1.9
+344.1 5.8
+345.2 70.3
+347.0 11.8
+349.1 2.7
+352.2 0.9
+355.3 0.4
+356.3 6.6
+358.2 16.0
+363.1 117.6
+364.2 12.7
+365.2 21.4
+366.5 0.9
+370.3 8.8
+371.7 4.1
+373.2 0.7
+375.1 4.3
+378.9 1.6
+380.7 1.4
+384.1 97.1
+384.9 8.4
+387.6 3.7
+388.4 12.5
+390.3 9.3
+392.3 1.5
+393.3 4.4
+394.1 0.6
+398.3 5.3
+400.0 3.5
+401.5 5.4
+402.4 4.8
+405.2 8.4
+407.4 3.9
+408.9 16.3
+410.3 2.9
+412.6 63.6
+413.4 4.0
+414.4 6.3
+415.9 1.3
+416.5 4.6
+417.9 16.0
+419.9 1.7
+422.0 3.1
+423.9 3.8
+425.6 8.1
+427.0 8.7
+428.5 1.5
+430.0 9.0
+430.9 3.6
+432.4 3.1
+434.3 1.2
+436.3 9.3
+437.0 13.5
+439.0 1.3
+440.6 5.5
+441.4 4.3
+442.3 3.7
+443.1 14.6
+443.8 2.3
+445.5 3.9
+446.9 3.5
+449.8 11.4
+451.4 174.1
+452.5 39.2
+454.2 0.6
+456.4 39.6
+457.4 25.6
+458.6 1.9
+460.6 42.3
+461.2 6.3
+463.5 8.0
+464.5 5.8
+465.3 41.1
+466.1 14.8
+466.7 6.7
+467.6 7.4
+468.2 6.4
+469.1 3.8
+470.2 13.1
+472.7 1.7
+474.3 253.7
+475.1 65.7
+476.2 3.9
+478.0 569.2
+478.8 62.3
+479.6 14.6
+480.5 6.5
+482.4 25.4
+483.4 8.4
+484.9 3.4
+485.7 2.7
+488.0 7.2
+488.6 5.1
+490.1 14.0
+491.1 27.4
+491.9 7.5
+493.0 6.4
+494.4 7.7
+495.4 8.2
+496.3 14.6
+497.2 13.1
+498.1 12.5
+499.1 30.9
+500.4 4.2
+501.1 3.8
+502.2 10.7
+505.0 25.9
+506.0 7.0
+506.9 30.5
+508.7 35.1
+509.9 20.2
+510.5 2.3
+511.4 22.5
+512.3 7.6
+513.0 41.7
+514.2 34.0
+515.3 12.8
+516.1 4.7
+517.2 4.3
+517.8 14.0
+518.7 15.4
+519.6 30.7
+521.2 26.4
+522.2 18.0
+523.2 5.0
+524.3 5.9
+525.3 10.5
+526.6 17.1
+527.2 2.7
+529.0 51.2
+530.2 10.8
+531.5 43.9
+532.6 6.0
+533.4 24.9
+535.0 44.3
+536.1 14.2
+537.0 10.5
+538.2 14.7
+539.1 4.3
+539.7 6.9
+540.8 39.8
+541.9 77.5
+542.8 33.6
+543.4 51.4
+544.1 22.3
+545.3 9.4
+546.7 97.0
+547.3 78.4
+548.3 69.0
+549.4 53.3
+550.3 41.0
+551.1 69.5
+552.3 70.0
+553.6 41.4
+555.1 133.3
+555.8 253.6
+556.7 192.5
+557.9 32.7
+558.6 7.4
+559.7 0.8
+560.7 2.3
+564.1 5.1
+564.9 9.4
+565.6 2.4
+567.1 8.7
+568.2 4.5
+574.8 10.8
+576.4 11.5
+577.6 1.9
+578.8 2.9
+580.9 3.6
+582.2 9.3
+583.8 4.1
+584.5 3.8
+586.0 2.2
+587.8 1.8
+589.1 1.7
+592.6 4.7
+593.6 9.5
+594.2 2.9
+595.0 3.9
+598.5 158.1
+599.5 32.0
+600.6 9.1
+602.0 4.2
+602.6 0.9
+603.7 4.5
+604.7 3.6
+605.9 5.9
+607.8 7.8
+610.0 6.6
+612.0 6.0
+613.6 2.5
+615.7 3.5
+617.1 3.2
+620.2 1.0
+622.5 4.0
+624.2 11.8
+625.8 13.2
+626.7 8.3
+627.5 14.5
+629.0 3.1
+632.0 6.5
+632.6 3.5
+633.5 2.4
+635.0 18.1
+637.9 13.1
+638.7 8.4
+639.7 2.5
+640.7 1.5
+641.3 4.6
+642.1 33.1
+643.2 16.9
+645.5 7.5
+646.9 8.8
+648.5 5.8
+649.4 5.0
+650.3 2.0
+651.9 2.7
+652.8 2.9
+655.6 5.8
+656.5 5.4
+657.6 3.9
+658.5 5.9
+659.4 26.1
+660.3 37.2
+661.4 9.7
+662.5 6.6
+663.4 2.2
+666.5 7.6
+668.4 6.0
+669.6 22.8
+670.4 12.7
+672.2 7.9
+673.5 2.9
+674.3 0.7
+675.9 12.8
+676.8 3.3
+678.3 65.2
+679.3 28.1
+680.4 12.9
+681.9 10.5
+684.6 1.1
+685.6 4.1
+688.1 14.2
+688.8 3.2
+689.9 10.4
+691.3 14.0
+693.4 4.1
+694.4 12.1
+695.5 4.9
+697.0 5.0
+698.3 13.2
+699.0 15.8
+700.5 7.5
+701.2 10.7
+703.1 6.5
+704.3 9.6
+705.4 1.0
+706.2 9.9
+706.8 7.6
+708.6 8.5
+710.6 12.9
+711.6 2.4
+712.8 4.7
+713.7 9.8
+715.1 7.0
+716.3 5.3
+721.5 2.8
+722.6 8.8
+723.5 8.9
+724.6 34.5
+725.4 1.8
+731.7 3.0
+733.2 2.8
+734.3 1.8
+735.0 8.2
+737.5 19.9
+738.3 13.0
+740.5 7.2
+741.3 15.4
+742.4 14.5
+743.6 4.0
+745.3 17.5
+746.2 9.6
+747.4 21.1
+748.4 4.7
+751.8 10.3
+752.6 5.4
+753.3 5.6
+754.3 6.1
+755.5 12.9
+756.8 7.5
+758.5 4.0
+759.5 3.2
+760.7 1.7
+761.7 1.7
+762.9 47.0
+764.1 14.7
+766.5 523.7
+767.6 152.7
+768.5 55.6
+769.4 5.2
+770.4 3.6
+771.5 4.5
+773.1 19.3
+773.9 10.3
+774.9 0.3
+775.6 2.9
+776.9 6.0
+778.4 6.2
+779.0 7.5
+780.6 15.8
+781.5 31.4
+782.4 11.3
+784.4 3.6
+785.4 9.7
+786.6 5.3
+787.7 11.2
+788.9 7.9
+789.6 9.1
+790.5 4.2
+792.9 3.5
+794.4 4.3
+798.4 6.5
+799.6 3.0
+800.6 3.6
+801.5 1.6
+805.6 2.5
+806.8 1.2
+809.3 8.7
+814.4 2.1
+815.4 2.0
+816.5 3.4
+817.5 0.7
+819.7 1.8
+821.6 2.7
+823.4 380.9
+824.5 164.6
+825.5 42.0
+826.5 3.9
+827.7 4.8
+828.4 4.5
+829.5 1.2
+831.9 1.3
+834.4 162.3
+835.6 45.1
+836.5 17.5
+837.4 2.5
+840.9 1.6
+842.6 2.7
+846.8 1.7
+847.4 4.1
+851.4 1.2
+853.6 1.1
+862.5 6.3
+868.3 4.8
+875.7 1.0
+883.2 9.8
+884.6 5.5
+887.4 0.8
+888.4 2.0
+892.4 3.1
+897.4 1.5
+899.5 1.6
+901.2 10.2
+902.4 6.3
+905.6 10.0
+907.1 1.4
+911.4 5.8
+912.9 3.3
+917.5 1.4
+921.0 3.1
+928.5 1.0
+929.9 0.5
+930.6 0.5
+933.8 1.1
+936.7 3.4
+937.4 4.6
+938.4 1.2
+945.7 4.0
+947.5 244.8
+948.6 80.5
+949.6 22.8
+950.7 4.0
+953.5 2.1
+954.5 66.2
+955.6 32.7
+956.8 13.7
+957.7 2.9
+961.7 1.5
+965.6 0.4
+971.4 3.5
+972.5 6.5
+973.5 9.1
+974.7 7.8
+981.8 2.9
+988.7 1.4
+989.3 1.9
+991.6 1.7
+994.5 3.5
+995.8 4.0
+998.1 4.7
+998.9 0.9
+999.9 2.9
+1000.6 1.4
+1001.7 5.8
+1008.2 1.6
+1011.8 1.5
+1013.7 4.0
+1014.5 1.0
+1016.9 0.5
+1022.7 1.5
+1024.1 0.5
+1042.8 1.1
+1054.5 3.0
+1090.8 1.4
+1120.6 2.9
+1136.7 2.2
+1137.8 0.6
+S	105	105	483.12
+I	ID	150
+I	RTime	7.3335
+Z	2	965.23
+172.0 1.7
+175.1 10.0
+192.1 5.8
+193.4 1.0
+200.1 2.0
+204.3 1.6
+207.2 1.0
+209.4 1.3
+215.2 1.3
+216.1 18.0
+218.1 2.5
+228.1 1.7
+230.3 1.3
+234.2 2.0
+242.2 2.0
+244.2 1.2
+251.6 7.5
+266.3 8.3
+269.1 10.6
+281.2 2.0
+283.3 1.2
+284.3 4.0
+287.0 4.0
+288.0 2.4
+290.2 2.2
+291.1 2.0
+298.9 1.8
+301.3 8.0
+303.2 3.9
+309.2 3.5
+310.4 1.7
+321.0 1.7
+337.0 2.2
+353.5 1.0
+355.0 4.9
+356.2 1.5
+357.3 1.8
+374.2 1.1
+377.3 1.7
+381.3 1.7
+387.2 2.0
+404.4 5.1
+418.4 1.2
+419.2 2.4
+421.0 3.0
+422.3 2.2
+424.0 2.2
+429.8 6.8
+430.6 12.8
+446.3 1.5
+447.3 2.5
+448.3 1.5
+453.3 6.8
+457.0 3.9
+464.3 13.3
+465.1 19.0
+466.4 14.6
+473.3 17.7
+534.2 1.2
+542.3 3.0
+548.4 10.0
+594.3 1.8
+648.3 9.6
+650.9 7.5
+662.4 4.0
+664.5 1.6
+676.3 9.1
+677.3 17.8
+678.5 1.8
+698.1 2.5
+725.3 2.7
+731.5 2.2
+747.6 6.6
+748.3 41.7
+749.4 26.2
+750.4 3.2
+757.5 2.2
+789.5 1.8
+790.5 1.5
+791.3 1.2
+842.5 1.7
+S	106	106	713.07
+I	ID	193
+I	RTime	9.5235
+Z	1	713.07
+216.3 1.5
+248.0 2.9
+272.3 3.0
+275.2 12.1
+278.1 2.4
+284.2 1.5
+292.5 5.4
+305.1 2.2
+309.2 7.5
+315.4 2.4
+355.3 4.9
+359.1 2.2
+382.1 3.0
+383.5 1.7
+386.2 1.2
+396.9 2.0
+402.0 1.5
+407.3 1.2
+414.2 1.3
+419.3 2.0
+421.4 6.5
+425.4 1.7
+428.4 2.2
+436.2 1.7
+439.2 1.3
+444.8 1.2
+452.1 4.0
+453.5 2.7
+461.2 2.0
+470.4 1.0
+471.4 3.7
+476.4 2.5
+477.4 2.5
+485.6 3.0
+488.5 2.5
+496.2 15.1
+497.3 16.7
+499.0 5.5
+504.2 3.7
+511.6 5.4
+525.4 1.2
+537.2 1.5
+538.2 6.1
+542.5 1.7
+544.4 7.0
+559.4 1.6
+560.4 2.9
+563.3 1.7
+566.4 3.2
+567.1 1.3
+570.2 1.5
+584.3 2.0
+585.0 1.3
+585.8 1.2
+597.4 9.3
+598.3 1.7
+615.4 1.6
+621.2 1.2
+625.7 1.7
+645.4 2.0
+651.0 2.2
+653.9 9.0
+656.4 1.2
+659.7 10.3
+661.4 3.9
+677.5 1.3
+678.3 3.7
+681.6 6.3
+682.3 1.5
+694.5 18.2
+695.4 37.2
+696.4 10.1
+703.6 3.4
+704.8 7.8
+721.5 1.7
+850.0 1.7
+883.6 3.2
+1002.9 2.5
+S	107	107	433.78
+I	ID	41
+I	RTime	1.9056
+Z	2	866.55
+Z	3	1299.32
+140.8 2.2
+154.0 3.9
+178.6 2.0
+198.7 1.5
+226.3 1.0
+229.1 1.6
+257.3 0.8
+260.9 2.2
+268.3 1.3
+270.0 1.5
+272.3 1.2
+275.0 6.3
+280.3 1.7
+285.1 2.2
+288.9 23.2
+292.9 3.5
+302.9 1.1
+306.0 9.1
+306.8 2.7
+318.4 3.0
+319.0 4.3
+321.9 1.2
+323.0 4.0
+326.0 7.1
+327.1 5.3
+339.8 2.7
+341.6 2.0
+342.9 26.2
+344.1 3.5
+345.1 20.0
+346.3 8.3
+348.0 7.5
+357.3 5.6
+360.7 4.6
+362.6 20.7
+363.9 1.7
+369.9 2.2
+371.0 8.6
+373.0 2.7
+376.3 2.5
+378.3 1.1
+380.8 14.0
+382.2 5.9
+386.2 11.1
+387.2 1.2
+387.9 1.6
+388.8 1.7
+393.0 3.2
+395.7 1.8
+397.3 24.0
+398.0 14.0
+404.8 1.6
+407.3 11.6
+413.0 1.7
+414.3 1.7
+414.9 2.5
+415.9 8.0
+417.3 5.9
+419.3 1.8
+421.2 2.2
+424.9 26.7
+425.8 31.5
+428.4 4.8
+432.6 2.4
+443.0 6.3
+447.2 15.1
+454.1 17.8
+475.8 10.3
+476.5 5.4
+490.9 6.5
+500.0 6.6
+505.2 12.3
+508.1 27.2
+512.8 31.7
+514.9 17.0
+520.4 7.8
+525.4 8.8
+527.3 24.8
+529.7 6.5
+530.5 2.7
+534.1 11.8
+536.7 16.1
+538.5 28.2
+546.0 2.0
+547.3 5.1
+548.4 11.8
+554.0 11.1
+558.8 1.8
+575.4 2.9
+576.2 12.3
+582.3 36.0
+600.6 5.0
+604.9 5.5
+605.9 4.4
+620.7 3.0
+630.8 9.6
+631.5 2.7
+632.5 7.8
+639.5 12.6
+644.5 10.1
+648.7 4.3
+649.3 2.7
+702.7 6.0
+720.4 4.0
+765.6 3.5
+781.4 1.8
+S	108	108	1032.50
+Z	3	3095.48
+298.0 23.1
+300.1 4.7
+302.3 9.9
+303.3 8.6
+308.1 23.8
+313.4 5.5
+322.5 19.0
+325.2 134.5
+326.4 116.4
+338.4 43.8
+340.4 10.5
+341.4 14.5
+342.2 108.3
+343.3 28.8
+353.1 17.6
+370.3 103.0
+371.1 65.7
+372.2 20.4
+378.5 24.8
+383.1 11.2
+386.3 22.5
+388.4 33.5
+389.5 15.0
+390.4 16.3
+395.2 8.1
+397.3 42.6
+401.1 4.7
+405.5 18.8
+410.1 6.8
+413.2 141.7
+415.2 713.7
+416.3 20.2
+419.3 39.7
+422.4 5.2
+431.0 65.2
+431.9 9.4
+435.2 3.9
+437.3 19.9
+439.3 14.4
+441.5 59.5
+444.2 15.3
+451.3 3.5
+453.3 86.8
+454.4 20.0
+455.2 94.9
+456.6 10.3
+459.0 5.0
+464.1 14.5
+467.3 14.6
+468.3 20.1
+470.3 60.3
+471.1 18.6
+480.3 10.1
+486.4 11.2
+490.2 8.4
+494.3 50.3
+495.4 31.6
+498.3 24.6
+504.4 67.0
+505.6 81.4
+506.5 2.2
+508.3 10.6
+509.3 27.7
+511.5 18.0
+512.4 22.1
+513.3 53.6
+524.3 153.2
+525.3 3.0
+526.1 85.6
+527.5 13.5
+528.3 5.0
+530.3 84.2
+531.1 9.5
+538.6 4.9
+541.3 11.7
+542.5 15.6
+544.4 172.9
+548.3 20.7
+550.7 20.5
+551.4 26.3
+552.3 63.3
+555.3 93.2
+558.7 17.4
+562.2 57.4
+563.9 93.7
+566.2 11.8
+571.9 847.7
+572.6 408.5
+573.4 10.9
+576.2 34.3
+578.6 40.0
+580.1 209.0
+580.8 5.9
+581.4 2.9
+582.9 89.0
+583.9 29.9
+585.3 5.0
+586.4 17.7
+587.8 34.9
+593.7 47.7
+597.6 27.0
+601.7 25.5
+602.8 39.5
+603.4 84.1
+607.6 226.1
+608.5 31.9
+612.0 34.9
+615.3 161.8
+616.5 57.0
+617.2 14.5
+618.5 572.8
+619.5 152.9
+620.8 56.1
+621.5 38.3
+624.3 26.9
+628.7 56.3
+630.0 18.5
+632.6 51.3
+635.6 25.1
+637.5 5.6
+639.5 77.4
+641.2 36.0
+643.2 20.1
+644.7 3.5
+648.2 96.9
+649.1 51.1
+650.6 102.5
+652.3 23.7
+654.6 89.0
+656.3 8.3
+657.3 53.2
+658.2 20.7
+662.2 10.0
+663.3 55.6
+664.9 55.5
+666.4 116.5
+667.6 15.3
+670.5 27.1
+671.6 23.4
+672.3 69.0
+673.4 18.2
+674.0 87.3
+675.3 5.9
+678.5 16.0
+683.8 49.0
+688.7 59.5
+689.4 1311.7
+690.3 246.2
+691.7 116.7
+693.3 351.8
+696.7 20.1
+698.1 238.1
+705.4 28.6
+706.1 44.6
+706.9 98.0
+707.6 193.7
+711.3 323.5
+712.3 22.9
+713.4 5.4
+714.4 27.0
+716.5 18.4
+719.0 9.0
+721.2 9.5
+725.4 31.2
+726.6 22.3
+729.3 67.6
+730.5 5.6
+733.1 9.8
+734.6 20.9
+737.6 121.1
+738.7 23.1
+740.6 29.8
+742.1 46.8
+743.0 80.3
+743.7 37.2
+746.4 42.0
+747.6 38.4
+748.3 20.7
+749.3 11.0
+750.5 22.6
+753.2 113.2
+754.3 104.4
+755.3 17.9
+756.5 67.2
+757.4 39.0
+758.3 60.3
+760.4 40.1
+762.2 181.8
+763.7 14.9
+764.5 606.3
+765.3 38.3
+766.3 61.3
+768.8 290.5
+769.6 230.8
+770.9 1730.2
+771.5 478.2
+772.1 159.9
+773.3 31.6
+778.2 8812.9
+779.0 1471.4
+780.0 11.4
+781.1 47.1
+782.4 435.7
+783.3 26.8
+784.7 54.7
+790.6 53.8
+793.1 42.4
+794.4 27.8
+796.3 3.5
+799.0 81.1
+802.5 360.1
+803.6 164.6
+804.4 38.3
+805.4 132.3
+806.0 30.6
+809.3 6.9
+812.5 16.4
+814.6 366.8
+815.7 157.9
+817.9 21.9
+819.6 18.4
+820.5 16.4
+821.4 18.2
+822.1 21.5
+824.3 27.6
+825.0 99.0
+827.5 4.5
+832.4 13.3
+833.2 729.7
+834.2 461.3
+835.1 24.9
+838.7 40.7
+842.1 1862.3
+843.1 605.9
+844.1 87.3
+845.9 157.2
+846.7 54.0
+847.4 28.0
+848.1 48.1
+849.4 41.2
+850.7 8.8
+851.7 38.3
+856.4 68.5
+857.2 20.1
+859.8 19.5
+860.5 18.1
+862.1 27.3
+863.4 23.2
+864.0 9.6
+865.0 41.2
+866.2 39.7
+867.5 26.5
+868.5 160.5
+870.6 46.8
+875.1 78.1
+876.5 12.5
+877.5 22.4
+878.8 42.0
+879.5 18.1
+880.5 31.4
+881.4 64.2
+883.8 337.9
+884.7 228.3
+887.1 81.9
+888.9 85.6
+895.4 529.4
+896.0 19.3
+897.4 39.6
+904.0 215.1
+904.6 29.4
+905.6 29.7
+907.7 52.8
+910.6 55.3
+911.4 66.7
+912.7 139.7
+913.7 10.6
+915.1 32.0
+915.9 101.5
+917.6 300.8
+918.5 253.5
+919.7 134.6
+921.7 229.2
+922.9 94.8
+923.5 20.6
+924.8 35.7
+926.5 62.7
+927.4 105.9
+928.6 44.5
+929.5 5.7
+930.2 97.1
+931.4 477.5
+932.2 250.2
+933.0 14.4
+933.7 60.7
+934.5 8.6
+936.5 106.6
+937.4 56.1
+940.2 10242.7
+941.1 4019.8
+942.2 420.4
+943.4 133.7
+944.7 95.3
+946.2 193.5
+947.4 95.6
+948.1 53.9
+949.3 98.4
+951.4 587.9
+952.1 139.4
+952.8 60.9
+953.7 62.0
+955.1 350.9
+956.7 27.9
+957.7 45.3
+959.7 66.3
+960.6 292.8
+961.5 35.1
+962.9 97.0
+963.6 66.8
+964.7 51.2
+965.3 61.0
+967.3 70.4
+968.1 538.4
+968.7 23.6
+970.7 110.5
+971.5 48.9
+973.4 102.2
+974.5 119.1
+976.1 82.8
+977.2 2973.8
+978.1 927.5
+979.4 304.5
+980.3 127.2
+982.2 41.1
+982.9 55.7
+987.2 396.3
+989.4 77.2
+990.1 45.8
+991.0 61.3
+991.8 131.2
+992.8 237.8
+994.0 192.2
+994.7 84.2
+995.8 45.5
+996.7 160.1
+997.6 205.6
+999.4 252.9
+1000.3 88.0
+1001.7 34.0
+1003.6 2812.6
+1004.7 337.4
+1005.8 186.6
+1006.6 95.0
+1007.8 118.5
+1008.9 123.8
+1010.0 29.7
+1010.9 217.4
+1011.8 93.7
+1012.9 96.7
+1014.8 194.9
+1015.9 58.8
+1017.1 217.3
+1018.8 103.4
+1020.3 206.9
+1021.5 124.6
+1022.5 43.5
+1024.3 3.8
+1041.4 6.8
+1042.5 22.0
+1043.5 149.2
+1044.1 49.2
+1045.7 38.9
+1047.1 133.7
+1048.1 80.7
+1049.6 235.1
+1051.2 22.3
+1053.3 87.5
+1054.6 21.7
+1055.7 81.4
+1057.6 27.4
+1065.4 43.6
+1069.1 151.6
+1073.1 52.1
+1077.0 38.9
+1077.9 199.5
+1078.6 73.2
+1080.8 26.2
+1082.0 14.3
+1083.8 33.0
+1084.7 53.5
+1085.5 115.3
+1086.2 43.5
+1087.5 113.9
+1088.7 86.7
+1089.9 346.8
+1090.8 25.5
+1091.8 47.4
+1094.8 41.4
+1096.1 5.4
+1098.2 9.6
+1099.5 23.8
+1103.1 49.8
+1105.2 89.2
+1107.4 20.0
+1108.6 222.6
+1109.4 26.8
+1110.4 102.7
+1112.0 25.1
+1113.0 36.3
+1114.2 377.1
+1115.6 57.3
+1124.6 114.2
+1125.5 203.5
+1126.9 59.6
+1129.7 48.0
+1133.6 453.9
+1134.4 9.5
+1137.8 69.8
+1138.5 25.1
+1139.1 38.7
+1140.5 40.2
+1142.5 3056.9
+1143.5 1187.8
+1144.6 339.7
+1146.5 30.2
+1147.4 482.2
+1148.7 417.1
+1149.7 401.1
+1150.4 99.4
+1151.4 20.0
+1153.9 29.9
+1158.6 2811.5
+1159.5 125.4
+1160.6 19.2
+1161.7 20.3
+1162.4 50.3
+1166.0 313.7
+1166.8 126.6
+1167.4 29.8
+1168.1 29.6
+1169.3 61.9
+1171.7 7.2
+1173.6 92.3
+1175.6 83.3
+1177.7 165.2
+1178.3 309.2
+1179.6 61.9
+1180.4 12.1
+1181.8 94.6
+1183.9 100.7
+1184.9 217.1
+1186.1 141.6
+1187.4 53.3
+1189.2 11.9
+1190.7 44.9
+1191.4 65.2
+1192.1 34.2
+1194.1 1783.6
+1195.1 325.2
+1195.8 89.7
+1197.5 181.6
+1198.6 1195.9
+1199.7 699.6
+1200.9 29.4
+1201.7 7.7
+1203.4 634.4
+1204.3 1723.6
+1205.2 186.2
+1206.0 77.0
+1208.4 35.5
+1211.2 11.3
+1212.3 115.4
+1213.5 654.3
+1214.7 491.7
+1216.4 5417.4
+1217.5 2851.9
+1218.4 559.2
+1219.6 125.3
+1220.5 15.8
+1230.1 231.1
+1231.4 328.2
+1233.4 498.9
+1235.8 19.6
+1237.9 66.5
+1239.4 1156.6
+1240.2 143.4
+1240.8 220.5
+1242.2 1010.5
+1243.4 90.8
+1245.5 27.0
+1246.8 187.3
+1248.0 283.2
+1248.9 250.5
+1250.7 447.7
+1252.5 58.6
+1254.9 19.9
+1255.7 53.7
+1256.6 55.8
+1257.7 35.2
+1259.7 70.9
+1263.9 26.9
+1268.8 829.1
+1271.2 28.9
+1273.7 14.3
+1274.4 76.2
+1276.0 60.3
+1277.7 1178.1
+1278.8 201.3
+1283.4 519.1
+1284.4 612.1
+1285.3 13.8
+1287.5 155.4
+1288.5 55.0
+1289.8 130.6
+1291.7 37.9
+1294.9 69.7
+1295.9 155.2
+1296.8 228.4
+1297.6 206.9
+1298.5 128.8
+1299.2 30.0
+1301.6 51.1
+1303.6 32.8
+1305.3 59.3
+1307.4 336.9
+1308.7 356.0
+1310.0 55.5
+1311.2 238.0
+1312.8 64.2
+1315.5 51.1
+1317.6 12.5
+1318.5 16.5
+1319.5 277.5
+1320.4 84.6
+1324.1 158.4
+1325.1 9.4
+1327.8 29.2
+1328.7 466.6
+1329.3 94.7
+1330.0 161.3
+1330.8 188.6
+1331.5 27.3
+1333.2 5524.3
+1334.3 99.8
+1335.6 45.3
+1336.3 30.0
+1341.6 440.7
+1342.2 10178.0
+1343.6 226.7
+1344.5 139.0
+1345.4 94.6
+1346.6 120.4
+1347.8 102.8
+1348.6 12.3
+1349.8 29.6
+1353.4 143.4
+1354.2 331.0
+1355.9 3292.8
+1358.5 143.1
+1360.2 31.2
+1362.4 470.2
+1363.4 124.3
+1364.8 32.3
+1372.3 29.0
+1373.4 24.8
+1375.6 214.3
+1376.3 100.3
+1377.2 91.9
+1379.8 23.6
+1381.2 78.3
+1383.4 60.4
+1386.5 6.4
+1389.7 12.9
+1391.5 29.6
+1394.7 472.1
+1395.6 141.6
+1396.5 134.4
+1397.3 51.2
+1398.4 19.3
+1401.1 48.8
+1402.6 81.7
+1404.6 23.1
+1406.6 25.7
+1408.6 68.5
+1409.7 35.5
+1410.5 16.6
+1411.6 248.4
+1412.6 1726.6
+1413.6 600.9
+1414.6 330.7
+1415.6 41.2
+1417.6 11.7
+1418.3 270.9
+1419.0 127.4
+1420.2 506.0
+1421.3 107.0
+1422.1 23.6
+1422.9 29.8
+1424.8 21.8
+1426.6 90.5
+1427.7 321.7
+1428.6 30.7
+1430.2 80.4
+1431.3 680.2
+1432.6 3.9
+1434.5 9.0
+1440.2 1776.8
+1440.8 147.7
+1441.8 55.1
+1447.8 3.9
+1450.7 58.6
+1452.8 55.8
+1454.9 10.2
+1457.3 119.7
+1457.9 87.7
+1459.0 60.5
+1459.8 23.9
+1466.0 119.3
+1466.7 61.2
+1467.7 54.2
+1470.7 235.0
+1471.7 31.1
+1474.8 531.2
+1475.8 752.0
+1476.6 12.6
+1477.3 46.8
+1478.4 21.7
+1484.7 14.6
+1488.8 45.1
+1489.6 12.2
+1490.9 59.0
+1500.8 55.2
+1504.5 241.5
+1505.2 21.3
+1505.8 100.9
+1508.1 88.0
+1511.6 50.8
+1513.5 132.3
+1519.5 150.6
+1522.7 739.7
+1523.7 282.9
+1524.6 372.7
+1536.7 62.5
+1537.8 134.1
+1540.6 2371.6
+1541.6 2764.9
+1542.7 1118.8
+1543.6 136.8
+1545.4 13.0
+1550.4 27.0
+1554.7 2189.8
+1555.7 1840.9
+1556.8 750.2
+1558.0 42.9
+1562.5 10.1
+1566.7 14.5
+1567.6 28.1
+1572.1 64.2
+1572.7 23.5
+1573.8 114.2
+1576.4 39.8
+1582.7 6.9
+1585.5 19.6
+1588.1 19.7
+1588.9 88.3
+1592.4 14.6
+1597.9 59.4
+1601.7 12.4
+1612.4 108.3
+1618.6 80.6
+1619.3 9.6
+1628.9 16.3
+1630.2 6.1
+1639.6 11.0
+1643.8 18.9
+1645.2 63.8
+1647.7 8.4
+1649.9 18.9
+1665.6 135.2
+1666.4 16.2
+1668.6 3.1
+1670.9 19.5
+1676.1 28.1
+1682.7 69.0
+1684.0 82.8
+1684.9 36.1
+1687.3 22.4
+1701.9 229.3
+1702.9 54.4
+1704.1 15.0
+1710.7 112.8
+1711.6 22.8
+1718.1 29.1
+1720.9 4.2
+1725.8 36.0
+1732.7 23.9
+1740.6 24.3
+1741.4 93.5
+1749.0 29.7
+1755.0 6.4
+1758.3 26.6
+1762.2 20.2
+1766.5 46.5
+1767.3 69.1
+1767.9 33.8
+1772.9 296.7
+1774.0 4.7
+1780.1 41.1
+1782.0 25.7
+1782.8 34.3
+1789.6 71.3
+1790.4 98.9
+1791.8 27.4
+1801.7 58.4
+1804.1 8.8
+1805.0 30.9
+1809.1 34.9
+1814.5 26.0
+1822.4 17.4
+1825.5 19.6
+1841.8 56.7
+1843.7 67.1
+1844.3 13.6
+1857.4 14.3
+1877.1 48.5
+1878.5 53.6
+1879.3 11.7
+1881.7 52.2
+1882.8 64.1
+1884.0 141.9
+1884.8 6.2
+1886.1 63.4
+1897.9 21.0
+1901.9 495.1
+1903.0 65.0
+1904.1 43.8
+1905.3 17.9
+1908.0 10.7
+1912.2 19.8
+1913.0 20.4
+1916.6 5.9
+1917.5 7.5
+1918.6 67.3
+1924.8 29.6
+1926.2 26.3
+1928.6 45.3
+1934.7 92.6
+1935.8 209.0
+1936.5 47.3
+1937.7 100.1
+1938.6 69.2
+1942.8 32.6
+1944.0 31.7
+1944.6 14.9
+1946.7 22.2
+1952.4 37.3
+1953.0 273.2
+1954.1 177.7
+1954.9 89.9
+1955.7 10.8
+1957.2 61.0
+1958.5 4.4
+1971.0 47.5
+1972.8 128.4
+1973.4 237.8
+1974.1 10.4
+1985.1 5.9
+S	109	109	419.32
+I	ID	207
+I	RTime	10.2360
+Z	2	837.63
+127.1 3.0
+129.1 6.0
+140.1 1.7
+144.9 1.8
+147.2 6.0
+149.1 9.3
+155.1 10.1
+156.3 1.2
+157.1 1.8
+161.2 1.7
+172.1 9.1
+175.1 27.5
+175.8 1.7
+185.1 1.7
+189.2 4.0
+198.1 1.5
+199.2 3.7
+204.3 3.0
+208.0 1.7
+212.2 5.9
+213.2 3.2
+216.2 5.1
+218.2 1.6
+226.1 15.8
+227.2 1.7
+228.0 1.2
+229.2 4.3
+230.3 3.5
+238.4 3.0
+239.2 1.1
+240.2 1.2
+243.3 3.5
+245.1 2.4
+246.0 2.5
+247.1 1.2
+248.3 1.1
+249.3 2.2
+253.2 3.0
+255.1 6.8
+256.1 2.2
+258.3 1.3
+259.2 3.0
+265.1 2.5
+269.8 7.3
+272.0 3.7
+273.1 4.5
+274.3 9.8
+275.1 12.0
+278.4 4.3
+282.2 1.1
+283.1 5.3
+284.3 1.3
+289.3 1.5
+290.2 10.3
+291.1 7.0
+298.3 3.2
+300.3 3.0
+303.7 14.5
+304.4 18.3
+305.5 4.5
+316.2 2.7
+325.3 2.0
+326.1 1.6
+327.1 2.4
+329.2 23.0
+331.2 1.8
+341.5 2.7
+345.0 7.5
+347.3 2.2
+348.7 4.4
+356.4 5.6
+358.6 1.1
+366.0 12.1
+367.3 2.0
+368.0 2.5
+372.5 6.5
+375.3 14.3
+377.3 2.5
+379.3 1.2
+383.2 15.8
+384.2 20.2
+385.2 1.8
+387.0 9.8
+389.5 4.3
+390.4 27.1
+391.3 1.6
+397.4 1.8
+401.2 147.8
+402.2 45.9
+403.4 8.8
+405.4 1.2
+407.1 7.0
+409.6 15.0
+410.4 33.4
+411.4 6.1
+412.7 9.1
+433.3 3.0
+447.4 1.8
+477.6 9.1
+491.4 3.7
+492.2 2.5
+508.3 9.6
+518.5 1.5
+519.3 1.5
+520.5 4.3
+530.2 3.5
+551.4 4.1
+554.3 46.0
+555.4 19.3
+556.2 8.1
+561.5 4.0
+564.6 2.0
+565.4 4.5
+580.2 1.7
+594.2 10.1
+611.5 56.0
+612.4 14.6
+613.2 3.7
+645.6 2.4
+663.1 1.7
+667.2 3.2
+676.6 1.8
+677.5 2.0
+682.5 21.0
+683.6 14.1
+685.6 1.5
+689.1 2.0
+690.2 3.4
+700.5 4.3
+709.4 2.0
+710.2 1.8
+731.5 1.2
+S	110	110	613.19
+Z	2	1225.37
+175.2 4.1
+177.2 3.1
+178.1 1.1
+198.3 1.4
+213.2 1.9
+214.3 1.6
+215.4 1.5
+216.1 3.1
+221.0 3.4
+222.0 3.2
+223.2 3.9
+226.6 0.8
+230.1 3.2
+233.2 0.9
+235.2 2.4
+239.4 0.4
+243.1 1.4
+245.1 0.8
+248.1 15.9
+249.4 0.5
+251.1 0.3
+256.8 3.8
+263.4 0.9
+265.3 2.0
+266.9 7.9
+268.1 4.4
+269.1 9.2
+270.1 6.1
+271.0 5.0
+274.0 4.0
+279.0 1.8
+281.1 10.6
+282.0 1.8
+283.2 3.5
+284.1 3.2
+284.7 2.7
+285.8 0.3
+287.0 7.6
+287.7 3.2
+289.2 1.4
+291.0 2.3
+299.2 4.7
+299.9 1.2
+300.8 5.8
+302.2 4.9
+305.4 2.7
+306.2 5.4
+307.1 0.7
+312.3 0.9
+319.2 59.0
+320.2 3.3
+321.2 0.9
+322.2 2.7
+327.5 0.8
+330.1 0.3
+331.2 0.9
+336.1 1.4
+345.1 1.7
+346.2 2.2
+351.0 1.3
+355.1 68.0
+356.1 34.4
+357.1 87.2
+358.1 14.8
+359.1 11.2
+360.3 0.9
+370.9 9.0
+372.3 2.1
+374.3 6.0
+376.3 18.0
+377.2 2.8
+379.0 2.6
+386.2 1.6
+387.3 0.7
+390.3 0.7
+393.4 1.1
+403.3 0.4
+409.9 1.6
+418.6 1.3
+422.2 0.4
+427.1 0.7
+429.6 3.1
+430.3 0.4
+431.0 0.9
+440.7 7.2
+442.5 0.8
+444.0 1.1
+445.5 19.0
+446.4 3.1
+447.3 13.5
+454.4 4.6
+455.6 1.3
+458.5 5.3
+460.3 0.8
+461.1 1.6
+462.7 5.7
+463.4 39.2
+464.4 3.9
+468.0 2.0
+478.1 2.8
+479.8 2.3
+481.4 14.7
+482.0 3.9
+483.8 5.1
+485.8 4.0
+486.6 0.4
+487.3 1.9
+490.3 7.4
+491.1 3.6
+494.3 7.5
+496.4 6.8
+497.1 0.2
+498.0 1.5
+499.2 11.5
+500.3 1.6
+501.2 3.0
+502.4 21.2
+503.2 6.9
+504.9 7.2
+505.7 1.8
+507.0 9.1
+508.1 10.8
+509.3 1.0
+510.6 0.6
+511.4 2.6
+513.4 3.4
+514.2 0.4
+515.2 0.2
+516.5 37.9
+517.3 4.7
+518.6 4.5
+519.4 0.4
+520.9 8.2
+524.2 5.4
+525.4 73.3
+527.8 9.7
+528.5 6.9
+530.1 5.8
+531.0 2.6
+532.3 11.4
+533.6 5.2
+534.4 18.9
+535.5 1.6
+537.1 12.4
+538.3 4.9
+539.4 7.7
+540.6 0.4
+542.1 20.6
+542.8 20.1
+543.7 2.9
+546.6 24.9
+548.4 26.4
+549.3 13.1
+550.1 9.3
+551.2 99.8
+551.8 26.0
+552.5 5.6
+553.4 3.2
+554.5 37.9
+555.2 13.7
+556.6 21.2
+560.1 226.2
+561.8 13.2
+563.2 33.5
+567.5 6.6
+569.0 220.8
+569.9 2.4
+570.5 8.2
+571.9 12.8
+573.6 5.7
+575.2 2.3
+576.5 3.2
+577.9 21.9
+578.7 4.5
+579.6 5.2
+580.4 1.9
+581.9 19.8
+585.3 0.8
+586.2 2.0
+587.2 34.1
+587.9 3.2
+588.5 16.5
+589.4 7.1
+590.2 0.3
+591.4 1.6
+592.8 1.6
+594.4 36.1
+595.8 137.8
+596.5 56.0
+597.2 5.0
+597.9 9.9
+599.8 6.7
+600.6 1.0
+601.4 6.2
+602.5 16.5
+603.2 38.9
+604.3 270.1
+605.0 146.7
+606.4 3.4
+611.1 0.3
+613.8 2.7
+623.6 3.9
+628.6 1.8
+633.1 2.4
+636.3 2.0
+640.4 0.8
+650.6 1.5
+652.7 5.2
+653.8 5.7
+656.3 5.5
+657.3 3.2
+658.3 0.8
+660.2 4.1
+661.7 2.4
+665.7 3.4
+674.2 13.5
+675.5 1.6
+676.3 3.8
+678.4 48.2
+679.5 9.2
+680.5 2.1
+684.0 0.5
+686.3 4.7
+690.3 8.2
+692.3 25.7
+693.3 0.6
+699.8 1.0
+702.5 1.2
+706.4 8.9
+709.9 10.3
+710.8 4.6
+714.8 15.9
+723.9 5.3
+727.6 9.5
+728.3 0.9
+729.5 5.8
+730.8 6.6
+731.7 1.4
+732.8 1.8
+734.9 4.1
+744.7 2.9
+745.4 12.7
+746.4 8.6
+747.2 1.4
+754.5 0.5
+756.2 5.3
+758.2 15.0
+761.5 7.5
+762.4 7.2
+763.3 3.2
+764.7 0.4
+769.3 0.7
+772.9 12.8
+777.1 2.4
+779.3 38.3
+780.5 25.8
+781.4 1.8
+785.6 3.0
+797.4 3.8
+799.3 3.8
+803.3 4.5
+813.3 5.0
+814.6 4.2
+815.3 1.8
+817.8 3.8
+818.7 0.8
+820.5 0.5
+829.4 1.0
+830.4 0.6
+831.2 2.6
+832.5 33.5
+833.3 3.5
+834.4 3.5
+837.5 0.6
+841.2 0.7
+842.6 0.4
+850.3 10.7
+851.2 2.4
+853.0 3.4
+855.1 1.2
+859.9 1.7
+862.7 3.6
+864.3 1.8
+868.5 1.5
+872.4 4.0
+874.4 2.4
+877.3 3.5
+886.3 3.4
+888.2 4.8
+889.2 8.2
+890.4 21.5
+891.5 14.6
+897.1 4.6
+900.4 0.3
+903.6 7.3
+904.3 3.5
+905.5 7.2
+907.5 58.6
+908.5 30.1
+917.9 3.1
+921.3 2.9
+935.5 2.2
+944.2 3.2
+946.5 5.3
+947.3 2.2
+948.1 3.2
+956.5 5.1
+959.6 1.5
+960.8 1.5
+961.6 0.9
+972.7 2.8
+974.2 3.7
+975.4 1.6
+978.4 55.0
+979.4 41.5
+980.2 1.9
+980.9 1.2
+990.5 0.9
+991.7 3.1
+993.6 2.1
+997.5 0.5
+1007.6 1.0
+1008.7 11.1
+1009.5 3.0
+1012.1 3.2
+1014.3 5.1
+1020.1 1.2
+1031.3 14.1
+1032.5 12.2
+1033.6 1.9
+1045.5 0.6
+1049.5 98.3
+1050.5 53.3
+1053.5 5.8
+1054.3 3.9
+1055.3 3.9
+1061.3 4.4
+1071.1 0.5
+1072.4 0.5
+1074.8 4.4
+1119.7 0.5
+S	111	111	1033.02
+Z	3	3097.04
+297.2 0.7
+304.3 3.4
+306.1 1.6
+312.7 1.5
+314.4 3.6
+318.1 1.2
+325.3 6.7
+326.2 5.5
+328.4 0.6
+330.2 2.3
+335.2 1.7
+337.3 1.4
+338.3 1.9
+341.2 1.5
+342.0 3.3
+354.6 2.0
+359.4 4.2
+371.3 4.9
+372.2 2.3
+380.4 0.6
+382.9 2.3
+388.1 1.0
+389.4 4.2
+393.2 0.9
+398.3 0.4
+403.0 1.2
+405.6 5.1
+408.4 0.8
+410.1 6.5
+413.2 4.5
+414.3 5.1
+415.3 20.0
+416.1 6.5
+417.6 0.6
+419.3 0.6
+425.2 0.9
+430.2 0.4
+441.3 0.3
+443.4 2.1
+453.1 0.2
+454.4 0.4
+455.4 1.6
+456.5 2.4
+457.6 0.6
+459.3 0.6
+462.4 2.0
+465.3 1.4
+466.0 1.4
+467.3 2.2
+470.2 5.7
+474.2 0.7
+483.4 2.2
+493.9 3.1
+500.1 0.6
+501.3 0.3
+504.4 11.5
+505.2 1.2
+512.6 0.6
+524.4 9.3
+525.1 1.1
+527.7 5.1
+534.5 3.7
+536.3 3.9
+537.8 1.1
+542.4 2.3
+543.5 2.4
+544.3 5.3
+550.2 3.3
+551.6 2.5
+552.2 1.2
+556.6 0.4
+558.3 3.7
+562.3 0.3
+564.4 0.6
+565.5 9.2
+570.5 7.9
+572.1 62.5
+573.1 7.2
+574.5 2.7
+578.3 1.4
+580.4 8.5
+583.5 2.3
+584.2 4.1
+586.4 2.0
+589.1 1.4
+599.9 3.4
+601.4 6.6
+602.5 3.7
+607.9 18.6
+608.6 1.4
+609.3 6.9
+613.2 0.9
+614.7 4.0
+615.4 4.1
+617.4 1.4
+618.4 21.0
+619.3 12.9
+620.3 3.6
+621.4 1.2
+623.8 2.0
+625.5 2.6
+627.6 1.4
+631.3 2.9
+635.2 4.7
+637.4 0.8
+640.5 1.8
+642.7 1.4
+647.2 2.4
+649.8 3.6
+650.5 1.2
+654.3 0.9
+655.4 4.4
+657.2 1.3
+659.7 1.5
+662.2 3.8
+665.0 11.7
+666.5 11.8
+667.3 1.5
+668.4 1.5
+669.6 0.5
+671.9 2.9
+672.9 5.1
+674.6 1.7
+675.3 2.4
+677.9 4.9
+683.0 2.8
+684.1 4.7
+684.7 0.3
+687.4 0.4
+689.5 70.6
+690.5 47.5
+691.4 13.5
+693.3 4.0
+694.1 8.4
+698.0 6.7
+699.0 6.4
+703.8 1.8
+704.9 11.7
+706.0 10.6
+706.7 9.9
+708.0 1.5
+711.4 1.1
+712.3 3.1
+714.7 0.8
+716.4 0.9
+719.3 2.8
+720.8 4.7
+721.7 0.9
+722.9 4.6
+724.3 0.5
+725.6 4.3
+727.5 11.6
+738.0 9.2
+738.7 2.3
+743.5 6.6
+744.4 2.6
+746.5 2.2
+747.3 1.5
+748.5 1.3
+753.4 8.9
+754.2 4.3
+755.3 4.3
+757.0 18.8
+757.8 4.0
+758.7 6.5
+759.4 4.7
+762.3 19.7
+764.4 33.5
+765.5 7.8
+766.6 6.8
+767.5 2.2
+768.9 19.8
+769.7 23.4
+771.1 117.8
+771.9 30.2
+772.5 21.2
+778.3 519.2
+779.2 104.1
+780.2 4.1
+780.8 2.9
+781.7 8.0
+782.4 9.2
+783.7 2.2
+784.4 1.4
+785.5 3.3
+787.6 1.0
+789.3 1.2
+791.6 3.0
+792.5 4.5
+793.8 2.0
+795.6 0.6
+800.2 5.0
+801.6 0.8
+802.4 15.9
+803.1 3.7
+803.7 13.6
+804.5 6.0
+805.8 5.0
+810.4 9.6
+811.7 5.5
+812.6 0.6
+814.2 2.8
+814.9 5.1
+816.5 3.9
+817.7 8.1
+819.5 11.5
+820.5 2.2
+822.3 4.8
+824.7 17.8
+825.3 1.2
+827.4 1.7
+830.5 2.3
+833.0 21.3
+834.1 10.9
+834.7 9.7
+836.5 2.3
+837.1 0.7
+838.7 1.4
+839.7 2.6
+841.9 52.7
+842.5 74.6
+843.2 58.1
+844.0 3.2
+845.3 5.7
+846.5 3.7
+847.7 5.5
+849.6 3.8
+851.3 5.3
+852.4 0.6
+853.5 3.2
+854.6 3.3
+856.4 2.7
+857.1 3.7
+861.6 0.6
+865.1 7.0
+866.5 6.2
+867.6 0.4
+868.6 2.9
+869.6 5.9
+871.9 1.8
+872.8 3.5
+873.7 6.9
+875.2 5.8
+876.1 5.8
+877.4 5.1
+880.3 4.1
+881.2 1.4
+883.9 13.2
+884.6 6.2
+886.3 9.2
+887.5 11.9
+889.1 4.5
+890.0 2.1
+892.0 4.6
+894.3 3.0
+895.7 11.9
+901.7 1.8
+903.4 3.8
+904.3 6.8
+907.3 3.8
+909.0 1.0
+909.9 2.3
+910.8 8.6
+913.3 4.2
+914.5 7.9
+916.1 0.9
+917.4 14.7
+918.5 10.2
+920.9 4.6
+922.7 10.1
+924.0 7.9
+925.7 1.7
+927.0 4.6
+927.8 1.3
+931.2 22.2
+932.3 25.8
+933.3 6.1
+937.8 17.1
+938.7 7.4
+940.3 528.2
+941.1 121.9
+941.7 62.8
+942.7 8.5
+943.7 10.4
+945.2 11.1
+946.0 3.0
+947.5 21.8
+951.0 7.7
+951.8 9.9
+953.0 6.9
+954.2 6.9
+955.0 1.7
+956.3 15.9
+957.3 18.3
+958.5 12.0
+959.7 0.3
+960.8 36.2
+961.4 1.1
+962.2 3.2
+963.4 21.0
+964.2 1.5
+965.4 4.8
+966.6 19.5
+967.3 6.5
+968.3 36.7
+970.1 3.8
+971.3 15.1
+973.3 17.3
+974.4 1.2
+975.6 17.7
+976.9 113.8
+977.7 165.9
+979.6 21.5
+980.7 7.7
+981.4 15.4
+982.4 0.9
+983.4 6.2
+984.8 15.8
+985.6 10.3
+986.8 16.8
+987.8 18.6
+988.6 10.1
+989.7 2.7
+992.3 6.0
+993.4 17.4
+994.3 25.3
+995.3 9.5
+996.3 14.5
+997.2 17.6
+998.0 44.7
+999.2 16.9
+1000.3 24.2
+1001.4 11.6
+1002.5 13.0
+1003.9 139.4
+1005.0 7.5
+1005.6 4.0
+1006.3 19.7
+1007.4 3.9
+1008.7 1.1
+1010.1 34.7
+1011.0 35.3
+1012.1 18.5
+1013.3 20.4
+1014.2 31.4
+1015.1 44.1
+1016.3 15.2
+1017.6 24.6
+1018.8 15.1
+1020.1 15.8
+1020.8 17.9
+1023.0 22.5
+1024.2 2.2
+1031.9 0.7
+1034.5 2.3
+1035.5 0.9
+1036.1 4.2
+1042.4 0.5
+1043.9 3.6
+1047.9 5.0
+1049.3 6.6
+1051.4 9.7
+1052.5 5.0
+1057.4 1.1
+1058.4 4.7
+1060.0 0.9
+1062.2 4.0
+1064.3 0.8
+1065.6 1.7
+1069.5 4.0
+1070.3 3.2
+1073.4 1.4
+1075.6 1.2
+1077.6 11.8
+1080.7 8.7
+1082.4 7.6
+1084.7 5.3
+1085.7 2.9
+1087.4 5.3
+1088.1 11.1
+1089.4 29.8
+1090.1 3.6
+1090.7 2.1
+1091.9 8.1
+1093.9 4.5
+1098.5 2.8
+1100.7 5.6
+1102.8 1.9
+1103.7 3.8
+1105.7 1.3
+1108.0 16.4
+1109.0 10.0
+1110.0 8.1
+1112.7 2.3
+1114.4 16.0
+1115.7 3.6
+1124.1 6.8
+1125.5 7.6
+1126.6 4.4
+1128.7 6.0
+1129.4 5.3
+1130.5 7.2
+1132.3 5.4
+1134.1 9.5
+1137.7 1.3
+1140.0 6.8
+1142.6 135.9
+1143.6 69.9
+1144.7 24.5
+1145.6 14.7
+1147.5 9.4
+1148.2 24.8
+1149.0 15.4
+1149.9 8.6
+1152.1 7.5
+1153.6 9.9
+1154.4 0.2
+1156.1 16.0
+1157.3 3.7
+1158.8 62.4
+1159.8 11.1
+1160.9 0.6
+1162.5 3.3
+1164.8 0.3
+1166.6 46.7
+1167.5 19.8
+1168.1 1.3
+1169.7 6.4
+1170.7 1.7
+1172.1 6.7
+1173.7 2.6
+1178.3 13.1
+1179.2 2.4
+1180.7 3.9
+1181.5 0.8
+1182.6 4.6
+1184.2 0.8
+1184.8 6.6
+1185.8 7.4
+1188.4 4.1
+1189.5 8.7
+1190.4 3.1
+1191.6 6.5
+1194.1 41.6
+1194.8 50.9
+1195.7 10.2
+1197.2 2.5
+1198.5 68.7
+1199.6 42.2
+1200.6 8.4
+1201.6 17.0
+1203.5 81.2
+1204.3 137.3
+1205.2 20.2
+1206.2 3.6
+1208.2 0.2
+1209.3 0.4
+1212.8 7.2
+1213.7 61.0
+1214.8 11.2
+1216.5 249.2
+1217.6 162.7
+1218.6 58.6
+1219.6 11.1
+1220.2 4.2
+1221.2 2.5
+1225.6 0.6
+1228.5 1.1
+1230.0 6.9
+1230.8 3.6
+1231.6 4.2
+1233.3 13.0
+1234.2 11.1
+1235.4 2.8
+1236.3 3.0
+1237.5 5.0
+1238.4 3.9
+1239.5 20.3
+1240.2 17.7
+1241.1 3.5
+1242.2 17.9
+1243.4 5.8
+1245.8 1.0
+1247.6 19.2
+1248.4 16.9
+1249.3 16.5
+1250.7 8.4
+1251.7 13.9
+1254.0 3.7
+1264.7 1.3
+1266.0 2.3
+1267.6 1.6
+1269.4 7.5
+1270.6 1.9
+1274.0 9.1
+1275.3 4.2
+1276.5 2.5
+1277.5 8.8
+1278.4 38.3
+1279.2 1.2
+1280.8 5.3
+1282.3 0.9
+1283.6 28.7
+1284.3 28.4
+1285.3 6.5
+1286.4 2.5
+1287.1 0.3
+1288.6 1.1
+1289.6 1.1
+1290.8 4.6
+1291.6 2.6
+1293.6 0.7
+1294.8 4.7
+1296.0 0.8
+1296.9 9.0
+1298.3 10.4
+1300.6 0.7
+1302.8 3.5
+1307.7 5.3
+1308.9 10.2
+1311.3 5.2
+1312.5 6.6
+1313.6 3.6
+1314.6 1.3
+1319.2 15.9
+1320.5 1.4
+1323.5 1.3
+1324.3 4.6
+1325.8 13.2
+1327.4 5.1
+1328.7 24.5
+1329.5 22.7
+1330.5 12.5
+1331.2 6.7
+1332.9 19.0
+1333.7 157.9
+1335.0 1.5
+1335.9 5.1
+1336.7 9.7
+1337.7 2.2
+1339.5 4.3
+1340.9 4.0
+1342.5 254.8
+1343.4 38.0
+1344.3 7.1
+1345.6 2.7
+1346.4 3.3
+1352.1 2.1
+1353.8 12.3
+1355.5 48.5
+1356.2 72.3
+1357.2 6.7
+1358.5 4.9
+1359.4 0.9
+1360.3 0.4
+1361.3 4.1
+1362.3 5.8
+1363.2 2.0
+1364.3 15.1
+1365.7 1.2
+1367.5 5.1
+1368.9 3.0
+1370.5 0.7
+1371.4 1.7
+1373.2 2.8
+1375.1 9.9
+1375.8 4.0
+1376.7 4.6
+1377.4 10.3
+1379.2 1.3
+1381.1 2.3
+1382.6 1.0
+1383.6 4.7
+1384.9 0.7
+1387.5 2.8
+1389.1 1.6
+1389.8 8.6
+1390.6 2.5
+1394.5 18.1
+1395.2 8.6
+1395.8 17.2
+1397.5 1.4
+1398.6 2.2
+1402.6 0.4
+1403.5 1.5
+1404.6 4.4
+1407.0 1.5
+1408.0 1.5
+1408.8 5.9
+1411.0 6.2
+1412.4 62.0
+1413.6 49.8
+1414.7 31.3
+1416.1 11.3
+1417.5 7.9
+1418.1 12.1
+1418.9 9.3
+1420.1 22.7
+1421.4 7.2
+1422.9 6.7
+1424.8 3.2
+1426.7 5.2
+1427.6 18.9
+1428.2 2.9
+1431.4 14.6
+1432.4 15.1
+1433.8 0.7
+1436.6 2.3
+1438.0 17.8
+1440.6 48.9
+1441.5 9.0
+1443.0 7.4
+1445.0 2.0
+1455.6 1.3
+1456.9 9.3
+1458.5 5.8
+1460.0 3.4
+1464.2 2.8
+1465.0 3.1
+1466.2 13.0
+1466.9 1.5
+1468.5 5.3
+1471.2 1.3
+1472.0 5.1
+1472.9 0.8
+1474.1 8.6
+1475.1 43.3
+1475.8 29.5
+1476.7 10.4
+1479.0 3.4
+1481.0 6.2
+1483.8 1.6
+1488.8 8.7
+1489.9 4.5
+1490.7 5.8
+1491.9 2.3
+1494.2 2.7
+1495.9 0.6
+1497.8 1.4
+1502.5 0.6
+1503.5 1.5
+1505.1 3.0
+1506.5 4.2
+1510.2 1.3
+1511.8 2.7
+1512.9 0.9
+1516.0 6.0
+1519.1 3.7
+1520.7 3.6
+1521.9 9.2
+1522.7 38.0
+1523.7 44.1
+1524.8 9.6
+1525.4 3.9
+1536.8 1.8
+1538.1 3.4
+1538.8 0.2
+1540.7 171.9
+1541.7 158.5
+1542.6 67.2
+1543.7 26.0
+1544.5 4.0
+1549.8 1.2
+1554.7 86.3
+1555.7 106.2
+1556.9 54.9
+1557.8 9.9
+1561.7 3.3
+1566.6 2.4
+1567.8 2.0
+1569.4 1.7
+1573.7 1.5
+1575.8 4.2
+1577.9 2.0
+1579.8 1.6
+1582.1 2.7
+1600.0 1.3
+1608.1 2.6
+1609.1 4.5
+1609.8 1.4
+1619.5 1.1
+1620.3 1.8
+1622.1 3.9
+1628.7 0.7
+1630.1 3.7
+1637.9 0.7
+1640.9 1.4
+1643.8 1.2
+1649.4 2.5
+1651.8 2.3
+1653.8 7.5
+1656.8 1.0
+1657.9 2.2
+1661.8 0.3
+1663.7 3.2
+1665.0 2.3
+1665.7 1.3
+1666.9 10.6
+1668.5 1.9
+1669.5 0.5
+1683.0 8.3
+1684.7 5.1
+1700.5 2.2
+1701.8 2.0
+1703.1 3.1
+1706.5 2.5
+1712.6 1.7
+1718.4 4.8
+1719.0 2.2
+1720.4 1.9
+1731.8 4.4
+1733.7 3.8
+1741.3 1.3
+1745.2 3.3
+1753.0 4.0
+1758.1 2.6
+1759.1 2.1
+1760.3 6.8
+1764.9 2.8
+1766.7 1.9
+1767.7 1.0
+1769.6 1.7
+1773.3 3.4
+1774.2 3.9
+1775.5 1.3
+1781.9 3.5
+1783.8 7.0
+1791.8 2.4
+1796.7 1.2
+1800.3 1.2
+1802.0 2.4
+1810.0 0.7
+1814.3 1.1
+1816.2 5.2
+1826.9 0.7
+1830.8 1.3
+1843.8 2.1
+1863.9 0.3
+1865.1 3.3
+1865.9 0.4
+1866.8 5.7
+1872.2 4.2
+1875.6 1.6
+1876.9 2.9
+1881.9 7.7
+1883.0 0.5
+1883.8 5.8
+1887.4 2.1
+1889.0 0.5
+1891.4 3.6
+1900.9 1.8
+1902.2 3.4
+1903.3 5.9
+1904.0 0.2
+1904.8 1.7
+1908.9 3.9
+1913.2 12.4
+1913.9 0.2
+1935.0 7.7
+1935.9 23.1
+1937.8 2.0
+1940.7 6.6
+1948.2 2.1
+1949.2 6.2
+1952.6 7.2
+1953.3 15.3
+1954.2 8.8
+1954.9 3.0
+1955.8 7.2
+1957.0 2.4
+1973.9 5.7
+1974.8 2.1
+1995.6 1.6
+S	112	112	403.30
+I	ID	74
+I	RTime	3.4163
+Z	2	805.59
+Z	3	1207.88
+123.3 1.2
+129.1 94.5
+130.1 2.7
+137.2 0.8
+139.4 2.2
+141.1 3.7
+142.2 2.9
+143.2 4.0
+144.0 13.8
+147.1 5.5
+156.2 1.7
+157.0 4.5
+161.1 12.0
+169.2 4.1
+171.1 2.0
+175.1 4.0
+178.0 0.8
+185.2 3.2
+186.2 6.0
+191.1 7.4
+192.0 0.8
+200.1 5.5
+201.3 1.5
+202.2 2.7
+204.1 5.6
+212.0 4.8
+213.2 1.8
+215.2 2.7
+217.1 1.1
+218.2 37.0
+219.1 3.5
+222.2 13.6
+222.9 1.7
+225.2 10.0
+226.1 9.6
+227.3 4.5
+231.3 2.7
+236.8 1.6
+239.2 20.0
+240.2 44.7
+241.2 0.8
+243.1 7.9
+245.3 0.8
+251.1 1.5
+253.2 3.2
+253.8 2.2
+257.2 190.6
+258.2 14.5
+259.2 2.7
+265.1 2.4
+268.1 2.5
+269.1 1.7
+271.0 1.1
+272.1 1.8
+274.2 11.3
+275.2 134.0
+276.2 4.0
+277.2 1.8
+278.3 5.6
+279.5 5.1
+289.4 5.5
+290.2 3.0
+293.3 3.9
+296.7 6.8
+297.9 2.7
+300.5 1.6
+301.2 3.9
+302.1 7.3
+304.0 7.4
+308.1 4.9
+309.4 7.0
+312.2 6.0
+313.1 2.0
+314.8 30.3
+315.6 8.6
+316.5 2.5
+318.6 2.4
+319.4 1.8
+320.0 1.6
+320.9 5.3
+323.5 0.6
+324.4 2.7
+327.1 3.7
+328.9 4.0
+330.8 4.4
+332.8 7.8
+333.5 17.2
+334.1 2.2
+335.3 14.5
+336.7 23.7
+338.5 26.1
+341.0 5.1
+343.6 6.5
+346.1 1.3
+347.6 20.2
+349.1 21.2
+350.6 11.8
+351.4 36.7
+353.7 4.4
+354.3 4.5
+355.2 2.5
+357.2 2.9
+359.1 5.5
+360.0 1.1
+361.5 4.4
+363.2 4.9
+365.4 5.8
+367.2 13.6
+368.3 23.1
+369.3 2.2
+370.2 7.0
+371.2 3.0
+372.2 2.0
+374.2 6.5
+375.4 1.8
+376.3 8.8
+377.3 6.3
+380.6 8.8
+382.1 7.0
+383.4 5.5
+385.3 498.8
+386.4 62.9
+387.3 19.0
+388.0 4.8
+389.2 16.7
+389.8 3.0
+391.4 38.5
+393.8 226.8
+395.0 22.5
+396.7 34.0
+397.3 18.3
+402.8 1.3
+404.2 1.2
+405.1 4.5
+406.1 2.7
+414.3 2.0
+417.7 12.3
+425.5 4.3
+429.4 1.5
+431.1 2.5
+439.1 1.6
+440.4 7.9
+442.4 4.3
+444.5 1.1
+448.2 20.7
+450.9 4.0
+452.1 2.9
+452.8 1.2
+456.0 3.9
+458.1 1.7
+460.8 7.5
+469.0 13.6
+470.0 30.1
+472.4 1.7
+474.8 24.3
+476.0 1.2
+476.9 2.4
+479.2 11.6
+482.2 7.6
+483.1 8.1
+485.5 2.7
+490.9 3.2
+491.6 16.2
+492.9 2.7
+497.1 19.7
+497.9 3.5
+499.6 1.7
+502.3 1.7
+503.4 2.7
+506.8 7.1
+510.7 17.3
+511.4 3.7
+512.0 9.8
+513.3 7.4
+515.5 14.3
+517.2 7.8
+518.0 2.4
+530.4 12.0
+533.3 1.0
+535.3 7.5
+541.2 31.6
+548.6 2.7
+553.0 5.1
+560.4 2.4
+561.4 4.0
+565.4 2.4
+566.4 3.0
+568.6 11.8
+580.2 6.5
+581.2 1.6
+589.3 2.2
+602.4 4.4
+604.1 2.0
+607.3 1.8
+613.5 0.8
+618.4 1.1
+621.3 4.0
+628.3 4.8
+629.2 1.3
+631.6 2.0
+640.3 2.7
+644.5 7.5
+646.4 3.5
+648.6 1.7
+652.3 2.2
+657.6 1.6
+658.4 9.1
+659.3 2.2
+664.1 1.6
+669.2 3.5
+676.4 8.1
+S	113	113	751.42
+Z	2	1501.83
+215.2 0.6
+218.3 0.8
+219.2 1.0
+225.3 4.0
+229.2 1.6
+236.0 1.0
+242.1 1.7
+243.1 2.9
+249.3 1.5
+256.9 1.2
+259.0 1.2
+261.3 13.8
+263.2 2.4
+268.2 0.8
+272.4 1.2
+273.2 0.8
+274.5 1.5
+276.2 3.2
+278.8 1.1
+283.0 1.3
+286.0 2.2
+294.2 1.5
+299.2 1.3
+300.1 2.5
+301.4 5.5
+304.1 6.0
+305.2 2.0
+309.1 1.6
+311.3 5.0
+313.1 5.4
+314.0 4.3
+315.1 1.2
+319.2 4.0
+323.1 0.8
+327.2 4.1
+331.1 2.4
+334.3 2.9
+335.0 1.7
+337.2 2.4
+338.4 1.7
+339.2 3.9
+340.1 3.4
+341.3 12.1
+343.3 2.0
+346.2 4.0
+348.6 0.8
+349.3 2.2
+359.2 4.0
+362.1 0.6
+363.4 2.0
+367.1 8.1
+371.1 4.0
+376.4 2.5
+377.2 7.6
+380.2 2.5
+384.2 2.5
+385.4 8.6
+388.4 1.6
+393.3 11.6
+398.5 2.7
+399.5 1.5
+400.1 1.2
+401.2 2.5
+402.7 0.8
+403.4 12.8
+404.9 9.8
+408.2 1.2
+409.0 2.7
+412.7 4.4
+413.3 3.2
+414.1 1.1
+415.1 2.0
+420.3 32.0
+421.3 34.2
+422.5 10.8
+425.1 1.8
+426.2 1.7
+427.8 1.7
+428.9 3.0
+430.4 1.7
+432.1 3.5
+433.2 1.7
+438.4 11.0
+439.2 226.8
+440.3 19.2
+441.4 2.4
+443.0 5.9
+444.1 1.1
+447.3 7.0
+453.2 4.5
+457.2 2.0
+459.0 21.8
+459.6 0.8
+461.4 2.9
+462.3 3.2
+463.4 1.1
+465.4 2.4
+467.4 3.4
+471.2 8.0
+473.0 6.5
+474.2 3.0
+475.4 5.3
+476.4 2.7
+477.2 10.3
+481.0 0.8
+483.2 1.7
+484.5 4.5
+486.1 4.8
+487.2 7.0
+490.2 5.9
+491.2 3.2
+492.0 1.6
+493.2 13.6
+495.2 1.2
+497.3 2.0
+501.4 1.5
+502.4 4.6
+503.4 3.5
+504.2 9.1
+505.4 1.0
+506.4 4.5
+511.4 6.4
+512.5 4.6
+514.7 11.1
+516.2 3.2
+517.4 1.3
+519.3 20.3
+520.5 9.1
+523.5 6.5
+529.1 4.0
+532.3 1.1
+533.4 2.4
+534.1 1.6
+536.2 9.8
+537.2 34.2
+538.6 12.0
+539.3 2.2
+540.2 4.5
+541.6 8.1
+545.3 9.8
+547.4 4.0
+548.2 5.6
+553.4 3.2
+555.2 147.1
+556.2 22.7
+557.2 4.8
+558.4 6.4
+559.2 7.0
+560.0 1.0
+561.1 3.2
+563.8 4.8
+564.4 4.0
+565.9 3.0
+566.9 1.7
+567.5 2.4
+568.3 3.2
+569.2 1.5
+572.3 3.7
+573.4 28.5
+574.5 4.0
+575.6 2.5
+576.3 3.2
+578.9 5.5
+585.4 4.0
+589.7 5.1
+590.6 12.5
+591.3 74.5
+592.3 25.2
+593.3 10.1
+595.5 5.1
+599.2 3.0
+601.3 4.6
+602.6 1.3
+603.3 12.8
+604.4 0.8
+606.8 2.0
+608.0 3.0
+611.6 3.7
+614.5 8.5
+616.5 0.8
+617.6 5.5
+619.3 13.3
+620.5 5.0
+621.4 4.5
+622.6 6.8
+623.8 5.0
+627.6 2.5
+628.3 4.1
+629.2 17.2
+631.2 2.2
+632.4 3.4
+633.2 3.5
+634.5 19.2
+635.4 14.0
+636.5 12.8
+637.3 18.2
+638.4 4.3
+639.4 4.0
+642.1 10.6
+644.5 2.2
+646.1 1.2
+647.6 7.0
+648.8 9.1
+650.2 4.6
+652.1 6.0
+653.2 14.0
+654.6 11.6
+655.2 4.5
+656.7 17.3
+658.5 8.6
+659.3 9.8
+662.9 11.8
+663.6 6.4
+664.2 1.2
+665.5 8.3
+666.1 3.4
+667.5 2.5
+669.2 9.8
+669.9 4.4
+671.3 32.0
+672.3 9.8
+673.1 3.2
+674.1 11.8
+675.3 10.6
+677.4 11.0
+678.4 2.5
+679.4 11.3
+680.2 5.6
+681.1 2.5
+685.3 2.0
+686.5 2.7
+687.4 6.6
+688.2 12.8
+689.3 70.3
+690.4 25.5
+691.3 17.7
+692.2 4.5
+693.8 0.8
+694.4 1.1
+695.0 4.9
+696.2 12.3
+697.0 35.9
+698.1 27.0
+698.8 32.2
+699.5 10.8
+700.1 0.6
+701.4 16.6
+702.5 7.3
+704.1 1.1
+705.0 22.1
+706.2 25.8
+707.5 15.6
+708.3 2.5
+709.7 5.4
+710.5 2.0
+711.5 7.1
+713.8 25.1
+714.7 48.4
+715.4 51.2
+716.3 48.0
+717.2 4.9
+717.9 10.6
+719.2 11.1
+720.0 17.7
+720.8 19.2
+722.9 27.8
+723.9 13.6
+724.6 24.2
+725.4 7.1
+727.0 16.5
+727.9 31.3
+728.8 55.7
+729.6 13.5
+730.7 2.2
+731.9 323.0
+732.6 139.5
+733.3 447.8
+734.2 206.8
+735.1 9.8
+735.7 8.5
+737.0 16.1
+737.9 32.5
+738.7 4.3
+739.4 1.7
+740.9 269.3
+741.9 135.8
+743.0 37.7
+745.0 1.7
+750.8 9.8
+752.1 4.0
+754.0 3.2
+760.8 2.2
+766.8 4.5
+769.7 1.0
+770.9 2.2
+772.2 3.5
+776.5 2.5
+782.4 8.1
+784.1 2.9
+786.4 3.5
+787.2 4.0
+788.4 4.8
+796.6 1.2
+801.2 2.7
+802.0 3.4
+803.1 5.8
+804.2 0.8
+808.5 3.2
+809.4 3.2
+814.5 7.9
+818.2 5.3
+819.8 5.5
+820.4 3.7
+827.4 5.5
+844.3 4.0
+845.6 0.6
+846.5 0.8
+848.6 5.9
+851.2 7.0
+853.3 5.1
+856.6 1.6
+858.8 2.0
+863.7 0.8
+867.5 3.0
+870.4 2.0
+872.3 7.0
+873.4 4.5
+875.2 5.4
+881.1 5.5
+882.2 1.1
+883.1 0.6
+888.2 3.4
+890.7 5.6
+898.5 3.5
+899.4 4.9
+900.3 1.8
+901.6 6.0
+905.5 1.3
+906.4 1.8
+912.2 1.0
+914.6 1.5
+915.9 2.7
+916.5 10.6
+925.2 4.4
+926.8 3.0
+927.5 5.3
+928.1 1.1
+932.5 1.2
+949.7 4.3
+952.3 0.8
+953.5 1.6
+956.6 3.9
+958.8 8.1
+960.5 1.2
+966.6 4.4
+967.4 6.8
+970.5 12.8
+971.3 3.2
+977.1 1.2
+985.4 2.2
+987.3 9.8
+988.4 19.0
+989.3 11.6
+990.9 3.2
+995.8 2.7
+997.0 1.7
+998.8 6.4
+1001.8 2.2
+1005.6 6.8
+1007.0 1.7
+1008.3 2.5
+1012.1 4.5
+1018.6 7.1
+1026.3 23.7
+1036.3 1.8
+1046.2 4.3
+1052.2 4.0
+1054.3 0.6
+1059.0 1.8
+1068.4 1.6
+1069.4 2.2
+1070.4 3.4
+1071.4 6.8
+1072.5 2.2
+1073.5 1.2
+1083.3 19.0
+1086.1 0.6
+1092.8 0.8
+1094.3 2.7
+1102.5 3.5
+1105.3 4.4
+1110.5 0.6
+1113.4 7.3
+1123.5 1.7
+1124.5 2.2
+1125.4 1.2
+1130.7 1.3
+1136.0 6.6
+1140.3 5.6
+1143.7 1.7
+1145.5 1.5
+1147.7 5.6
+1153.5 1.3
+1154.1 2.0
+1157.5 4.3
+1167.7 1.0
+1172.0 1.7
+1173.6 2.4
+1174.6 8.1
+1181.6 1.2
+1200.4 1.5
+1205.3 2.2
+1224.3 13.1
+1225.3 7.3
+1233.7 3.0
+1237.3 3.7
+1242.2 3.9
+1249.1 1.8
+1251.2 1.8
+1264.1 1.5
+1269.2 4.1
+1271.6 0.6
+1277.0 4.3
+1282.9 3.5
+1286.5 1.7
+1288.4 1.2
+1292.9 2.9
+1296.5 1.5
+1308.6 1.7
+1310.1 4.3
+1318.3 1.2
+1324.6 1.5
+1334.3 1.1
+1336.3 3.2
+1350.3 2.0
+1351.4 5.1
+1352.8 1.5
+1354.3 4.0
+1355.3 3.5
+1370.1 2.2
+1434.2 3.2
+1445.5 0.6
+S	114	114	670.55
+Z	3	2009.63
+196.1 50.6
+197.1 6.8
+199.2 89.5
+200.1 63.1
+209.9 4.6
+213.2 38.7
+213.9 33.4
+216.0 21.7
+225.0 16.0
+226.2 35.8
+227.0 16.0
+228.0 7.7
+229.2 6.6
+232.0 4.7
+238.0 52.0
+241.2 49.6
+244.1 238.8
+245.2 13.6
+246.3 13.0
+255.2 95.6
+256.3 23.4
+257.3 10.6
+258.3 74.9
+259.2 3.4
+266.2 10.9
+269.8 31.5
+272.7 66.7
+273.3 34.7
+274.1 104.3
+275.2 8.0
+276.2 19.6
+277.1 7.6
+279.4 27.9
+280.2 20.8
+283.0 73.2
+284.3 85.6
+286.1 209.7
+287.3 51.2
+291.5 15.8
+294.5 83.3
+295.2 18.3
+296.2 21.6
+297.3 43.8
+298.7 6.6
+301.1 280.6
+302.2 58.4
+303.2 19.7
+305.9 4.1
+308.1 20.5
+310.3 11.9
+311.3 24.8
+312.2 201.6
+313.3 9.1
+315.1 87.1
+316.4 9.7
+320.4 19.4
+323.4 5.3
+324.1 17.0
+327.1 15.0
+329.5 40.1
+331.2 28.1
+332.2 7.6
+332.9 4.3
+337.3 5.3
+338.2 20.1
+340.1 5.8
+341.1 20.8
+343.3 14.1
+345.0 33.7
+346.2 20.6
+351.0 30.5
+352.0 23.4
+354.2 6.8
+357.1 5.2
+360.2 15.6
+362.2 5.4
+363.2 7.2
+364.3 20.4
+364.9 30.4
+367.1 10.1
+368.3 160.4
+369.2 197.3
+370.3 64.7
+371.3 15.8
+372.1 8.2
+374.4 10.4
+376.2 20.9
+378.0 30.2
+379.2 16.8
+381.6 47.4
+386.2 994.6
+387.2 309.1
+388.0 69.8
+389.1 18.0
+396.2 246.9
+397.1 96.2
+401.2 14.3
+402.4 120.7
+403.4 16.3
+404.4 12.5
+411.2 29.1
+412.9 22.4
+414.1 1274.4
+415.2 252.1
+416.4 74.3
+417.3 10.1
+419.5 40.6
+422.9 6.6
+424.4 35.7
+426.7 18.8
+427.6 13.6
+430.5 5.3
+432.4 37.0
+433.9 21.2
+435.4 6.6
+437.2 7.7
+438.4 24.2
+439.2 14.4
+441.1 20.8
+442.3 24.1
+443.4 22.6
+444.8 308.0
+445.5 109.1
+446.2 39.1
+450.1 21.6
+455.4 17.9
+456.2 5.1
+457.0 20.2
+457.7 2.7
+459.3 10.5
+460.0 9.7
+463.5 28.8
+465.2 120.8
+466.0 20.5
+467.3 18.4
+468.4 12.5
+470.2 5.4
+472.3 52.3
+474.2 47.0
+476.5 59.9
+478.3 44.8
+480.7 4.1
+482.4 79.2
+486.6 23.8
+487.4 15.7
+489.2 1470.0
+490.2 39.2
+490.8 7.7
+493.5 15.4
+494.3 20.9
+495.7 7.6
+496.3 64.7
+497.3 5.3
+498.4 15.0
+500.0 26.9
+501.4 189.3
+502.4 31.5
+503.1 14.5
+509.9 45.7
+511.9 8.3
+513.0 12.5
+515.5 27.1
+517.3 15.4
+518.2 29.0
+520.3 160.6
+521.1 99.3
+522.4 20.4
+523.0 19.0
+525.7 90.0
+526.3 23.2
+527.6 15.6
+529.4 53.4
+530.1 18.9
+531.8 233.5
+532.5 180.6
+533.1 7.6
+534.8 244.8
+536.3 47.2
+537.4 52.4
+538.4 4.2
+540.2 112.9
+541.5 31.8
+543.8 28.2
+545.0 45.9
+546.3 90.4
+549.4 57.3
+550.9 137.2
+552.4 13.3
+553.3 62.1
+554.0 7.1
+556.2 156.5
+557.2 76.2
+558.1 63.1
+558.8 29.6
+560.3 135.1
+561.7 56.0
+562.6 79.4
+564.6 26.2
+568.4 9.5
+569.7 189.1
+570.5 228.3
+571.3 63.7
+572.5 74.3
+574.3 155.9
+575.3 80.9
+576.6 55.1
+579.3 280.2
+580.0 82.0
+581.3 5.1
+582.0 60.9
+582.7 149.6
+587.0 23.6
+588.4 1163.0
+589.4 314.9
+590.4 116.6
+591.4 163.0
+592.3 8.1
+593.6 26.7
+596.1 25.7
+597.1 14.7
+598.4 51.5
+599.5 962.6
+600.4 8.8
+602.4 10.2
+603.5 16.1
+604.1 53.3
+607.8 23.9
+609.6 44.9
+610.5 57.4
+611.4 8.0
+612.6 55.4
+615.3 107.6
+616.3 44.9
+618.5 28.8
+619.2 34.9
+619.9 6.9
+621.6 2826.2
+622.6 435.1
+623.7 218.3
+624.8 75.1
+625.5 13.7
+626.8 48.6
+627.5 224.7
+628.7 70.6
+629.8 141.4
+631.0 996.1
+632.5 127.3
+633.2 284.8
+634.2 222.8
+635.7 12.5
+637.0 274.3
+637.8 348.9
+638.8 390.3
+640.8 196.2
+642.2 131.4
+643.6 144.4
+644.6 80.8
+645.3 173.7
+646.3 138.6
+647.3 63.5
+648.3 35.9
+649.3 50.8
+650.3 5.4
+651.7 103.0
+652.4 212.6
+653.4 65.9
+654.5 48.7
+655.9 669.3
+656.6 53.2
+657.7 646.0
+658.8 142.3
+659.8 67.3
+660.4 101.4
+662.2 811.4
+663.3 684.2
+664.0 117.6
+670.1 5.6
+672.4 25.8
+673.2 10.0
+677.5 200.6
+678.6 54.0
+679.3 8.1
+681.4 615.3
+682.0 555.5
+682.8 216.2
+683.6 82.8
+686.2 61.7
+686.8 209.5
+688.5 111.0
+689.4 382.4
+690.3 25.5
+692.8 736.5
+694.0 122.7
+695.1 5.0
+696.4 34.6
+698.8 569.1
+700.9 32.4
+701.9 36.2
+704.5 33.7
+705.2 27.3
+706.7 46.4
+708.0 96.6
+708.7 6.7
+709.5 47.7
+710.4 58.0
+711.5 58.8
+712.4 260.9
+713.0 68.9
+716.9 1063.2
+717.5 1066.3
+718.5 237.9
+719.3 174.2
+720.5 25.8
+722.2 110.6
+723.6 44.2
+725.5 132.4
+726.3 92.5
+727.6 11.0
+728.3 129.8
+729.6 346.8
+730.7 84.4
+731.7 1069.7
+732.6 340.5
+733.8 554.0
+734.6 249.6
+735.7 79.4
+736.6 202.9
+737.3 13.7
+739.3 7.6
+740.3 59.5
+741.4 26.9
+742.4 55.1
+743.1 82.2
+744.9 82.4
+745.7 57.7
+746.5 70.9
+747.6 41.5
+748.4 19.8
+749.2 47.2
+750.1 15.7
+751.2 23.9
+752.3 36.2
+753.8 94.3
+754.8 159.0
+756.5 46.0
+757.9 99.8
+759.9 114.9
+760.9 143.8
+763.0 964.3
+763.8 48.0
+764.7 17.5
+765.7 79.4
+766.6 54.6
+767.4 42.7
+769.5 10.7
+770.5 23.8
+772.0 29.7
+773.4 38.6
+774.5 30.7
+776.0 14.5
+777.5 40.7
+778.4 49.9
+779.5 119.0
+781.3 15.9
+782.3 13.2
+783.5 26.4
+786.7 11.4
+787.6 247.9
+788.6 483.0
+789.8 285.7
+790.9 112.6
+791.5 37.5
+793.6 695.2
+795.5 13.3
+797.2 13794.0
+798.0 3137.7
+798.6 2410.0
+799.5 4368.2
+800.8 47.2
+801.6 82.7
+802.5 45.8
+803.6 194.1
+804.7 97.6
+805.9 55.2
+806.8 56.7
+807.7 6.1
+809.4 13.7
+810.4 12.6
+812.1 17.8
+813.3 48.7
+814.1 35.2
+815.4 94.3
+816.4 6.2
+817.0 69.3
+817.9 25.4
+819.2 4.1
+822.4 162.5
+823.3 29.1
+824.3 10.6
+826.7 13.2
+827.5 24.8
+828.1 20.7
+830.7 20.6
+832.0 54.8
+833.5 35.2
+834.4 9.7
+836.4 108.2
+837.1 152.9
+839.4 240.5
+840.3 27.6
+841.2 22.7
+842.6 53.2
+843.7 49.7
+844.9 85.3
+845.6 98.9
+846.6 6.1
+848.4 20.0
+849.5 110.5
+850.4 93.0
+851.9 14.0
+853.7 2181.3
+854.5 334.1
+855.2 905.6
+856.7 112.3
+857.6 16.2
+861.7 141.3
+863.3 31.5
+864.0 58.1
+864.9 22.6
+865.8 39.8
+867.5 82.6
+869.2 158.5
+869.8 61.9
+870.6 18.4
+872.2 94.6
+872.9 245.6
+874.2 14.0
+875.4 9.2
+877.9 12.7
+879.1 112.7
+880.5 5.3
+881.9 5296.3
+882.6 8137.0
+883.6 2331.1
+884.6 102.6
+886.0 28.1
+887.1 61.7
+888.5 89.7
+889.8 4.4
+890.6 44.8
+893.4 24.7
+895.8 116.6
+897.3 58.1
+898.8 20.3
+899.5 13.7
+901.2 47.3
+902.9 90.5
+903.7 17.8
+905.2 94.8
+906.2 53.6
+907.3 46.9
+913.3 5.7
+915.9 42.3
+916.7 9.0
+921.3 58.6
+922.2 117.2
+923.3 7.5
+924.3 22.0
+928.1 48.2
+929.3 64.5
+930.6 90.7
+931.7 157.8
+932.5 101.4
+933.6 15.7
+935.0 83.4
+937.3 24.4
+938.1 20.6
+938.9 22.0
+943.6 52.7
+945.6 208.1
+946.5 23.1
+954.6 849.7
+956.6 10.1
+960.0 92.1
+961.5 19.0
+962.3 46.1
+963.7 10.5
+964.5 21.7
+967.6 68.7
+973.4 57.5
+974.1 23.3
+980.0 101.9
+984.4 13.3
+985.6 15.4
+987.5 19.6
+988.9 44.7
+989.6 37.0
+990.6 27.2
+991.5 46.0
+992.3 33.8
+994.6 10.6
+1001.7 54.8
+1003.5 38.5
+1004.3 5.1
+1005.4 5.7
+1006.1 7.0
+1008.7 8.6
+1011.4 23.5
+1012.7 11.6
+1015.1 25.2
+1019.0 21.6
+1020.3 30.5
+1021.8 5.7
+1023.4 67.3
+1024.2 70.0
+1030.3 25.4
+1032.4 218.6
+1033.3 37.6
+1038.5 399.9
+1039.5 54.8
+1044.5 9.1
+1047.7 1439.7
+1048.5 14.3
+1051.7 25.4
+1052.4 30.3
+1056.7 33.4
+1057.8 7.1
+1058.5 11.8
+1061.5 12.1
+1068.7 13.5
+1069.8 9.1
+1073.3 30.8
+1074.3 35.7
+1077.7 25.6
+1079.2 35.9
+1084.5 13.4
+1085.6 19.7
+1086.5 9.9
+1087.9 86.1
+1088.8 38.3
+1090.5 5.1
+1091.5 70.7
+1096.9 117.6
+1097.5 65.2
+1100.4 40.4
+1101.5 5.6
+1107.8 28.1
+1109.5 7.5
+1110.6 8.7
+1112.4 34.0
+1113.6 16.4
+1115.4 13.5
+1118.1 131.7
+1119.3 13.1
+1122.5 17.7
+1127.8 16.4
+1128.7 34.4
+1139.5 7.3
+1140.3 16.4
+1143.5 16.3
+1157.6 4.1
+1158.5 8.5
+1159.2 8.0
+1163.4 15.4
+1186.6 35.3
+1188.8 7.1
+1189.8 10.4
+1193.7 33.1
+1197.6 33.8
+1200.1 10.5
+1205.0 12.2
+1207.7 6.8
+1224.7 19.3
+1226.2 44.5
+1234.5 4.6
+1236.4 25.8
+1243.0 15.2
+1243.7 7.0
+1244.5 38.4
+1245.5 30.8
+1246.3 22.3
+1247.5 35.1
+1253.9 4.7
+1257.9 6.8
+1258.5 28.2
+1261.0 17.4
+1271.5 33.2
+1272.6 8.1
+1278.6 7.1
+1280.8 15.5
+1283.7 4.1
+1288.8 20.1
+1298.4 10.7
+1299.6 20.8
+1300.6 22.5
+1311.5 4.1
+1324.7 11.9
+1351.0 24.4
+S	115	115	452.85
+I	ID	189
+I	RTime	9.3517
+Z	2	904.69
+130.0 3.0
+144.2 5.0
+151.5 3.2
+153.3 1.2
+161.2 6.0
+162.9 4.0
+175.1 2.0
+175.7 1.2
+183.0 3.5
+184.0 15.3
+186.0 1.2
+202.1 1.2
+204.0 2.7
+227.1 1.5
+228.3 2.2
+234.3 9.3
+235.2 1.6
+236.1 2.7
+237.3 6.0
+238.1 4.5
+239.3 2.9
+248.2 1.5
+252.4 1.7
+256.8 3.0
+260.2 1.0
+261.2 1.8
+264.2 1.3
+268.7 1.2
+270.0 1.7
+274.7 2.9
+275.4 5.0
+276.2 2.2
+278.3 1.1
+279.3 1.7
+281.0 1.7
+284.2 1.3
+288.9 1.7
+291.1 16.5
+292.3 5.1
+293.1 1.5
+296.3 1.2
+300.4 1.8
+303.3 3.7
+305.4 2.7
+307.2 8.8
+307.8 3.2
+321.4 4.3
+324.0 13.0
+325.0 21.3
+330.3 1.1
+331.8 3.2
+338.3 49.7
+345.4 7.1
+358.1 2.2
+359.3 1.5
+361.3 3.9
+370.2 2.4
+379.1 4.0
+380.4 3.2
+388.3 2.0
+395.2 13.6
+400.4 6.5
+403.9 35.2
+409.7 10.5
+412.1 2.2
+416.2 3.2
+417.4 15.3
+420.8 8.1
+422.2 4.5
+427.6 5.3
+434.1 4.5
+435.3 55.2
+443.4 17.8
+444.0 19.3
+444.7 16.6
+534.1 8.3
+539.5 5.1
+542.3 4.5
+559.2 1.7
+564.9 1.7
+575.7 1.8
+579.3 2.5
+586.9 3.5
+605.3 2.4
+627.3 1.3
+638.4 5.0
+644.5 1.1
+646.4 3.0
+648.3 2.4
+660.3 3.5
+662.3 3.9
+668.3 1.7
+670.5 7.4
+678.2 36.7
+679.3 3.5
+703.7 6.3
+728.5 4.5
+758.3 1.7
+775.8 3.7
+777.3 5.0
+S	116	116	613.31
+Z	2	1225.61
+175.0 4.6
+177.2 19.6
+180.0 14.0
+183.1 7.5
+184.3 9.9
+186.0 3.4
+199.8 19.1
+202.2 34.2
+204.1 16.9
+207.2 12.9
+210.2 15.0
+212.2 10.8
+214.2 43.2
+216.1 46.6
+217.2 13.1
+222.1 16.7
+224.1 5.5
+228.1 7.2
+228.8 18.2
+230.2 25.5
+231.2 18.0
+233.1 16.2
+238.2 9.8
+243.2 3.7
+244.3 15.3
+246.2 15.2
+248.1 162.0
+248.9 9.3
+250.1 34.1
+251.1 16.0
+252.1 3.3
+254.4 13.8
+257.2 6.4
+260.2 38.3
+261.3 9.4
+262.4 19.8
+267.3 68.3
+269.6 4.5
+272.7 2.6
+274.3 32.5
+276.3 38.8
+277.0 7.6
+278.3 38.0
+280.3 29.4
+281.3 7.2
+282.2 10.3
+284.1 83.4
+285.1 9.8
+287.1 36.0
+289.2 13.3
+291.2 19.1
+292.3 5.5
+294.3 21.6
+296.3 14.4
+297.2 10.6
+300.1 5.2
+301.6 111.3
+302.3 85.0
+303.3 44.9
+304.1 19.7
+308.2 5.4
+309.4 8.4
+313.1 4.6
+315.4 21.1
+317.2 15.2
+319.3 884.2
+320.2 137.1
+323.1 20.4
+327.2 17.3
+333.2 7.2
+334.2 19.0
+334.9 4.4
+336.3 39.5
+337.3 4.4
+338.3 4.1
+339.2 19.6
+341.3 9.5
+344.1 20.9
+352.4 17.2
+353.0 20.3
+355.2 24.1
+356.2 14.1
+357.5 96.6
+358.4 59.1
+359.1 15.4
+360.5 28.9
+361.2 18.1
+362.3 4.7
+363.4 4.5
+364.4 16.0
+368.1 11.9
+370.9 7.8
+372.2 39.9
+373.4 2.2
+374.4 31.6
+375.5 31.6
+376.4 277.3
+377.4 35.6
+378.5 17.7
+379.4 22.5
+381.1 43.6
+385.2 28.4
+386.2 4.0
+387.4 21.4
+388.2 14.0
+391.8 11.8
+392.5 44.3
+395.4 6.3
+397.5 19.8
+400.1 15.0
+403.2 2.4
+404.3 21.2
+405.0 7.7
+407.4 72.1
+410.1 16.0
+411.6 7.1
+412.6 25.3
+413.3 13.6
+414.3 135.5
+417.5 20.0
+419.5 15.8
+420.3 37.2
+421.4 12.2
+423.3 106.1
+424.2 5.4
+427.1 16.8
+428.4 17.0
+429.0 3.2
+429.9 63.5
+431.3 91.5
+432.2 50.3
+434.5 21.9
+438.4 25.1
+439.5 43.8
+442.2 13.8
+443.2 9.6
+444.5 5.0
+445.5 267.9
+447.3 127.1
+448.1 16.4
+451.3 8.0
+455.2 9.5
+458.3 30.4
+459.3 47.5
+460.5 74.6
+461.4 24.8
+462.8 82.6
+463.4 330.1
+464.4 68.7
+466.1 137.8
+466.9 46.6
+469.8 32.5
+472.1 37.0
+473.1 33.5
+474.1 10.2
+476.0 31.4
+479.1 12.7
+480.4 48.3
+481.0 161.5
+481.8 5.1
+482.7 65.9
+483.5 39.8
+484.5 5.9
+486.5 18.4
+488.1 22.9
+488.9 12.8
+490.0 203.2
+490.6 35.8
+491.7 17.4
+493.8 40.9
+495.3 12.3
+496.4 51.8
+497.4 15.3
+499.5 142.3
+500.4 11.6
+502.2 189.5
+503.4 72.2
+504.5 20.3
+505.7 24.9
+507.2 171.4
+507.9 281.5
+508.5 242.5
+510.1 54.3
+511.3 132.3
+512.0 109.4
+512.8 85.6
+513.5 38.6
+514.5 91.6
+515.5 122.5
+516.2 670.0
+517.1 729.2
+519.1 62.3
+520.1 56.7
+521.4 14.6
+522.1 15.1
+522.8 38.8
+524.1 73.5
+525.5 1861.9
+526.6 48.5
+527.8 281.3
+528.5 78.8
+529.5 182.3
+530.6 211.2
+531.6 86.6
+532.5 99.6
+533.3 89.8
+534.4 317.9
+535.5 119.9
+537.2 196.9
+538.2 428.2
+539.0 63.9
+539.7 17.0
+541.5 68.9
+542.6 373.9
+543.5 19.2
+544.4 7.5
+545.5 95.9
+546.6 976.9
+547.5 532.7
+548.5 336.9
+549.3 24.8
+551.2 1739.4
+551.9 519.6
+552.6 117.9
+553.4 8.7
+554.2 30.1
+555.1 285.9
+556.2 134.3
+557.0 15.8
+558.4 2.2
+560.1 3961.9
+560.9 556.5
+561.9 76.2
+563.7 43.8
+564.7 109.4
+565.6 12.1
+566.6 63.6
+568.8 3399.3
+569.4 1129.3
+570.5 61.8
+571.5 37.5
+573.0 71.8
+574.0 20.5
+574.9 81.4
+575.8 6.6
+577.7 148.3
+578.4 188.1
+579.4 37.1
+581.0 118.3
+582.0 87.7
+583.0 67.6
+585.6 30.6
+586.4 255.8
+587.1 797.7
+587.8 18.6
+588.4 123.5
+589.3 149.0
+590.8 272.3
+591.5 44.1
+592.5 28.6
+594.3 147.3
+595.0 82.1
+595.8 2117.8
+596.7 933.2
+597.4 108.0
+598.1 7.4
+598.7 132.0
+600.5 35.9
+603.1 586.2
+604.4 4052.4
+605.1 2384.7
+606.1 117.4
+606.8 11.2
+608.4 9.5
+611.3 12.9
+612.5 8.1
+614.6 10.2
+615.8 18.8
+619.3 10.0
+620.4 24.0
+621.4 50.8
+622.3 26.6
+623.9 17.3
+625.8 23.4
+630.1 23.1
+631.4 5.2
+636.7 20.2
+640.2 47.6
+642.8 50.0
+643.4 39.2
+644.4 4.5
+646.4 17.0
+647.3 11.9
+650.3 10.8
+656.5 30.2
+658.0 108.7
+658.7 20.1
+660.3 135.4
+661.4 80.6
+670.2 11.6
+674.4 181.8
+675.4 90.2
+676.3 21.5
+678.5 710.2
+679.4 264.9
+681.6 9.2
+687.4 2.9
+688.4 65.5
+689.5 21.8
+690.6 52.0
+691.5 5.9
+692.4 96.2
+693.5 43.7
+695.7 11.2
+696.5 15.0
+703.6 4.2
+704.3 5.9
+706.5 23.5
+707.2 10.1
+710.5 20.6
+711.2 4.4
+712.3 6.1
+714.4 14.6
+716.3 22.0
+716.9 11.4
+718.4 11.5
+724.9 37.9
+725.7 2.6
+727.7 72.8
+728.5 36.3
+729.4 67.0
+731.7 28.5
+732.6 61.3
+733.2 24.4
+736.4 12.0
+738.8 21.0
+742.9 22.9
+744.2 11.0
+745.3 91.2
+746.4 83.3
+747.4 7.8
+754.2 51.7
+761.6 72.1
+763.2 186.3
+764.3 76.6
+765.6 16.2
+766.6 10.2
+769.4 7.1
+770.8 8.4
+772.7 12.2
+773.7 7.9
+774.5 18.8
+779.5 955.9
+780.5 177.2
+781.6 9.9
+783.4 25.4
+789.7 16.5
+792.4 10.0
+794.9 18.3
+796.4 4.6
+798.4 19.7
+799.4 75.8
+801.5 20.7
+806.4 10.4
+807.3 36.7
+813.2 23.9
+814.3 51.4
+815.4 110.1
+816.4 134.9
+817.3 60.6
+819.6 17.7
+829.9 58.3
+832.4 252.5
+833.5 130.2
+834.3 49.2
+835.4 16.2
+836.4 55.8
+841.8 7.8
+842.5 12.6
+844.5 24.1
+846.6 33.6
+848.7 19.0
+850.4 305.1
+851.4 132.5
+852.5 21.8
+860.7 46.0
+861.6 43.7
+862.6 5.8
+864.4 14.1
+867.3 4.1
+872.2 129.7
+872.8 2.7
+873.7 45.9
+877.7 22.7
+878.8 8.5
+880.6 8.4
+886.2 60.9
+888.9 37.8
+889.6 340.1
+890.6 197.2
+891.5 146.0
+893.1 82.8
+900.0 12.3
+901.6 11.5
+902.5 9.7
+903.5 16.2
+904.4 37.0
+905.7 38.0
+907.5 880.2
+908.6 157.2
+909.6 28.6
+915.4 12.1
+917.6 11.0
+919.6 3.7
+920.5 10.7
+921.5 73.1
+922.6 26.3
+923.8 7.6
+928.8 7.3
+930.2 3.7
+930.9 12.5
+931.7 19.9
+932.6 35.0
+934.4 4.4
+935.1 16.5
+935.7 41.4
+936.5 46.5
+938.8 6.7
+939.8 20.6
+940.6 28.6
+943.6 25.9
+946.2 74.2
+947.1 103.2
+948.1 20.0
+949.5 43.3
+950.6 79.2
+952.7 13.1
+957.0 5.2
+958.9 12.0
+960.7 80.3
+961.5 56.2
+962.3 44.9
+963.6 47.5
+972.7 94.9
+973.5 28.7
+974.2 11.7
+978.5 871.4
+979.4 353.2
+980.0 32.4
+987.4 7.9
+988.4 24.0
+990.9 58.9
+991.9 68.6
+992.7 75.8
+996.2 23.1
+1008.5 19.6
+1009.4 32.4
+1010.0 10.1
+1014.2 43.9
+1015.4 28.9
+1018.7 21.2
+1020.3 12.3
+1023.1 24.8
+1031.5 129.9
+1032.5 141.9
+1033.3 95.3
+1033.9 4.6
+1034.8 13.1
+1037.7 51.6
+1041.7 3.1
+1042.9 6.2
+1048.0 15.1
+1049.5 1781.8
+1050.6 738.7
+1051.4 52.9
+1052.5 49.9
+1054.5 43.1
+1055.9 39.9
+1058.6 12.4
+1061.2 21.0
+1070.6 28.5
+1072.7 34.7
+1073.5 5.0
+1074.7 17.5
+1075.5 13.0
+1076.4 9.9
+1080.5 5.5
+1091.0 35.3
+1092.5 7.3
+1093.5 82.7
+1101.7 9.1
+1102.9 3.5
+1111.5 17.4
+1119.3 7.9
+1137.6 23.5
+1227.8 12.8
+S	117	117	652.52
+Z	2	1304.03
+191.1 1.5
+195.0 1.5
+199.1 1.5
+213.2 2.0
+215.1 1.4
+218.9 0.7
+226.0 1.7
+226.9 0.8
+229.1 3.3
+234.8 1.8
+241.9 2.3
+242.9 1.1
+245.0 0.9
+246.1 1.2
+248.5 0.8
+249.2 1.7
+253.2 0.7
+257.3 1.2
+258.3 1.8
+259.0 1.9
+260.0 0.8
+261.0 0.7
+269.4 1.3
+270.1 3.4
+271.3 1.1
+272.1 1.1
+275.2 5.0
+276.1 3.9
+280.2 0.9
+287.2 0.7
+291.2 0.9
+292.0 1.0
+300.1 1.6
+302.2 0.9
+306.2 1.0
+310.0 1.0
+312.1 1.8
+313.0 3.0
+315.9 1.7
+319.3 1.1
+321.3 2.0
+328.1 4.1
+329.3 1.1
+330.0 1.1
+331.0 1.8
+333.1 2.5
+338.9 1.6
+340.4 1.6
+341.1 2.7
+343.1 1.2
+344.1 1.4
+346.2 17.8
+347.2 2.4
+347.9 1.0
+349.1 1.3
+353.2 1.7
+354.9 3.1
+357.1 2.7
+358.1 5.0
+359.0 1.0
+360.2 1.2
+361.2 2.0
+363.1 1.1
+365.1 1.9
+367.1 3.4
+369.2 1.8
+371.3 3.5
+372.0 1.2
+376.5 0.9
+380.5 0.9
+382.2 4.3
+383.3 14.5
+386.1 0.9
+388.2 1.2
+389.1 1.5
+393.1 1.1
+397.3 1.7
+398.3 1.4
+399.2 2.0
+400.9 1.1
+403.1 1.4
+404.3 2.8
+405.2 0.9
+408.1 2.7
+409.8 1.1
+411.6 0.9
+413.2 5.7
+414.0 1.0
+415.1 3.4
+417.4 0.8
+418.2 2.4
+419.1 0.9
+423.3 1.0
+425.0 4.2
+428.0 1.0
+429.1 2.2
+430.2 3.8
+430.9 0.9
+432.2 0.9
+433.0 2.4
+434.3 1.3
+435.4 0.8
+436.2 1.1
+437.3 4.1
+438.2 0.9
+439.1 2.7
+440.2 1.5
+441.2 2.1
+442.0 3.8
+443.1 9.2
+444.3 2.3
+445.3 9.1
+446.3 1.9
+447.2 1.7
+448.2 1.3
+450.2 3.8
+451.6 4.7
+452.3 7.9
+454.1 5.2
+455.3 2.9
+456.2 1.5
+457.2 2.8
+459.2 1.7
+460.4 1.1
+461.2 0.6
+463.1 0.7
+464.2 1.2
+465.1 1.6
+466.4 3.3
+467.4 3.2
+468.3 7.3
+469.5 2.8
+470.1 29.8
+471.1 21.9
+472.2 4.2
+473.2 5.0
+474.1 1.2
+475.7 1.7
+476.4 1.1
+481.0 1.4
+484.4 1.5
+485.1 4.6
+486.1 6.7
+487.1 1.2
+488.1 2.8
+489.3 1.2
+491.7 2.0
+493.0 1.1
+494.3 1.5
+496.2 0.7
+500.7 2.0
+504.3 4.2
+505.2 9.1
+506.0 1.8
+507.2 6.3
+508.1 1.1
+509.2 0.6
+511.2 1.5
+512.2 1.8
+514.1 2.1
+515.3 0.8
+516.3 3.3
+517.2 4.0
+518.8 5.4
+520.2 6.8
+521.1 1.1
+522.4 3.5
+523.3 6.8
+524.3 3.3
+525.4 1.8
+527.3 0.9
+528.2 2.2
+529.0 1.8
+529.8 2.0
+531.2 1.6
+531.9 0.7
+533.6 1.8
+534.3 1.3
+536.0 5.8
+537.1 18.1
+538.2 13.9
+539.3 8.6
+540.4 1.8
+541.2 1.1
+543.3 0.9
+545.2 1.4
+547.8 1.0
+548.7 0.7
+550.4 4.2
+551.0 1.0
+551.6 3.0
+552.4 2.2
+553.1 3.6
+554.2 11.1
+555.6 1.5
+556.2 1.2
+557.5 1.4
+558.4 0.8
+559.4 1.1
+560.1 12.6
+562.0 1.4
+562.7 1.8
+563.6 2.8
+564.2 1.4
+565.2 3.1
+565.8 2.2
+566.9 2.4
+568.0 5.1
+569.2 1.1
+570.1 1.6
+571.5 4.3
+572.3 30.9
+573.3 3.9
+574.3 1.9
+575.5 0.8
+577.1 3.2
+579.2 1.3
+580.1 10.4
+581.0 5.0
+582.1 3.6
+582.8 5.3
+584.2 2.2
+585.0 1.9
+586.1 4.1
+588.4 2.6
+589.2 4.1
+590.2 4.9
+590.9 0.7
+593.3 3.0
+594.1 2.1
+595.2 11.8
+598.6 2.4
+600.1 3.8
+601.3 1.5
+602.9 0.9
+604.0 2.2
+605.3 7.5
+606.1 4.5
+607.3 4.7
+608.3 8.2
+609.2 3.8
+612.2 7.3
+613.5 4.7
+615.0 16.0
+616.0 11.9
+617.2 78.4
+618.2 16.4
+619.4 1.8
+620.1 3.3
+621.0 1.0
+622.3 7.3
+623.3 5.2
+624.2 3.0
+625.4 2.8
+626.2 1.7
+628.0 3.5
+629.0 9.2
+629.8 10.2
+631.4 3.8
+633.2 63.6
+634.2 48.1
+635.1 24.1
+636.0 10.0
+637.1 3.6
+639.4 12.2
+640.3 3.1
+641.2 2.3
+642.2 77.7
+642.9 33.7
+644.2 6.5
+646.0 0.9
+654.1 1.1
+667.0 6.1
+669.1 8.2
+671.4 1.9
+674.3 1.4
+677.7 1.1
+680.4 1.3
+684.2 4.1
+685.2 46.5
+686.3 2.9
+687.3 2.8
+698.3 1.6
+701.2 1.9
+702.1 1.0
+712.6 7.0
+713.3 1.7
+714.3 1.2
+717.1 0.7
+720.2 0.8
+721.5 0.6
+724.3 1.0
+725.1 1.6
+726.4 4.1
+730.2 32.2
+731.1 1.1
+741.6 2.6
+742.3 4.3
+743.4 2.3
+744.7 3.0
+747.6 1.5
+754.2 1.0
+758.3 0.8
+764.1 3.2
+765.2 1.0
+767.4 1.2
+774.3 1.0
+777.0 1.2
+777.9 2.6
+786.4 1.5
+787.1 1.2
+787.9 1.0
+789.3 0.6
+794.3 1.3
+798.3 3.1
+799.4 3.8
+800.4 1.9
+801.6 1.1
+806.8 1.7
+808.2 0.6
+810.1 1.8
+815.4 1.5
+821.5 1.6
+826.8 6.6
+827.5 5.3
+828.3 0.8
+829.1 1.1
+834.3 0.8
+835.0 1.2
+838.3 1.8
+839.0 0.5
+840.3 1.2
+843.3 1.0
+845.2 3.1
+847.2 0.6
+848.2 2.0
+851.2 0.8
+854.3 1.4
+857.1 8.3
+857.8 1.4
+859.3 18.3
+860.1 2.3
+866.3 1.4
+868.2 2.1
+882.4 1.9
+883.6 4.1
+884.7 4.1
+889.5 2.7
+890.9 2.0
+891.6 2.1
+896.5 1.0
+897.5 1.1
+900.8 1.1
+904.3 1.4
+909.1 1.1
+909.7 0.6
+911.4 3.8
+912.4 2.2
+914.0 5.7
+915.5 2.6
+917.2 1.4
+918.1 1.3
+920.5 1.0
+924.1 0.9
+925.2 3.3
+926.3 1.1
+929.3 1.0
+938.2 6.9
+939.0 0.8
+940.0 0.7
+949.1 2.0
+951.3 1.6
+954.4 1.1
+956.0 21.8
+957.1 8.5
+959.4 0.7
+961.3 1.4
+962.3 1.2
+970.3 1.2
+973.0 1.3
+974.4 19.6
+975.3 4.7
+976.3 1.6
+978.0 0.9
+979.0 0.7
+982.4 1.1
+987.2 0.8
+994.2 1.1
+999.1 1.1
+999.9 0.8
+1002.0 1.5
+1003.2 0.8
+1004.4 1.5
+1008.4 0.8
+1009.3 1.8
+1017.6 1.0
+1018.5 0.8
+1022.4 0.7
+1025.3 0.9
+1026.2 4.6
+1027.2 6.2
+1028.1 3.4
+1029.2 1.2
+1030.1 1.0
+1031.1 1.9
+1032.1 2.5
+1037.0 1.3
+1041.6 1.3
+1043.0 1.7
+1044.1 1.9
+1045.4 1.0
+1050.2 0.8
+1050.9 1.2
+1053.9 1.4
+1056.5 1.0
+1057.7 6.4
+1058.4 3.5
+1060.3 1.1
+1065.6 0.8
+1067.3 1.7
+1070.2 2.2
+1071.3 5.4
+1072.4 17.4
+1073.4 10.3
+1074.2 5.2
+1074.9 2.0
+1087.3 0.7
+1089.1 2.8
+1098.6 0.7
+1103.3 0.7
+1113.3 2.1
+1115.2 1.3
+1127.1 4.0
+1128.2 5.8
+1129.4 1.4
+1132.3 1.5
+1133.9 1.0
+1134.7 1.1
+1137.2 4.1
+1138.6 1.9
+1143.8 2.7
+1145.4 0.9
+1155.2 33.5
+1156.2 14.7
+1157.2 3.2
+1169.0 0.8
+1174.4 2.2
+1177.1 1.3
+1187.2 3.5
+1188.4 1.1
+1190.6 1.0
+1220.3 1.5
+1257.3 0.8
+S	118	118	1031.94
+Z	3	3093.80
+311.3 5.9
+323.1 4.6
+325.2 100.4
+326.0 16.5
+338.1 17.2
+341.4 32.2
+342.3 87.9
+343.4 5.8
+345.4 7.7
+354.3 12.5
+355.5 27.0
+369.6 19.2
+371.2 46.6
+372.3 5.1
+375.5 9.5
+385.3 24.8
+389.4 73.3
+390.3 21.6
+395.4 9.1
+397.1 3.6
+400.4 16.4
+404.4 10.1
+412.1 18.5
+413.3 96.1
+414.3 14.3
+415.5 16.5
+426.5 24.8
+431.4 44.2
+432.2 23.1
+436.3 14.8
+441.3 32.4
+446.4 6.5
+452.2 6.7
+453.3 107.2
+454.3 56.6
+469.3 9.3
+470.5 25.6
+471.4 26.5
+486.6 39.6
+489.5 3.9
+494.2 19.9
+495.2 9.8
+497.9 54.5
+504.3 80.4
+505.6 33.4
+511.4 12.8
+512.5 17.9
+515.7 22.6
+524.4 68.7
+525.4 56.7
+526.3 14.4
+528.5 17.9
+529.3 22.8
+530.2 29.6
+531.4 19.2
+534.6 15.4
+541.6 15.6
+542.3 28.1
+544.2 34.1
+546.5 6.7
+550.1 38.3
+551.1 49.9
+552.4 6.8
+555.2 14.7
+556.6 14.0
+558.2 31.1
+559.4 20.2
+564.0 19.5
+565.5 101.7
+567.4 8.8
+571.9 886.8
+573.0 20.3
+581.4 19.3
+583.3 8.6
+591.0 39.5
+597.3 28.6
+599.4 97.9
+600.2 7.4
+601.4 21.1
+602.4 16.5
+607.4 241.8
+611.5 23.0
+615.6 6.9
+616.5 34.4
+618.3 420.6
+619.3 72.7
+620.7 11.0
+622.7 42.3
+623.6 5.7
+625.3 3.3
+627.1 24.6
+632.4 90.3
+636.2 86.2
+637.3 11.3
+638.4 19.0
+639.4 33.4
+640.4 43.8
+642.9 3.9
+650.0 60.4
+654.6 122.7
+656.4 8.0
+657.3 100.9
+657.9 119.0
+659.3 14.6
+660.4 30.4
+661.6 7.8
+662.3 11.0
+663.5 23.0
+666.4 275.4
+667.4 18.7
+668.4 20.7
+669.4 11.8
+670.5 19.4
+671.5 103.7
+672.5 25.2
+673.7 17.7
+680.4 37.7
+682.6 54.3
+685.6 35.9
+689.4 1132.7
+690.4 233.3
+691.3 31.5
+694.4 12.8
+696.4 31.8
+697.9 55.5
+698.6 84.2
+701.2 6.9
+702.8 21.9
+703.5 17.9
+705.4 73.7
+706.9 265.7
+707.6 16.6
+711.1 25.8
+712.4 49.5
+713.3 17.7
+715.2 82.5
+717.5 51.0
+718.5 14.5
+719.4 43.8
+726.6 12.1
+727.4 33.7
+728.6 10.5
+729.5 4.1
+731.5 5.4
+733.4 19.2
+734.6 13.7
+735.6 75.8
+737.4 115.7
+738.3 69.2
+741.6 48.0
+743.3 23.7
+746.4 28.6
+749.1 109.6
+749.8 3.9
+753.5 56.8
+754.3 33.5
+755.5 58.5
+756.2 12.7
+756.9 59.3
+757.5 23.9
+758.3 8.3
+760.4 18.9
+762.0 351.4
+763.0 124.1
+764.4 153.1
+766.5 4.3
+767.5 66.7
+769.2 330.1
+770.9 1906.1
+771.6 411.4
+773.2 21.2
+774.9 45.9
+778.0 6083.4
+778.7 3412.4
+779.7 14.1
+780.9 55.8
+783.1 19.2
+784.5 43.0
+785.3 4.4
+788.7 25.8
+789.8 38.5
+790.6 41.5
+791.3 11.1
+793.6 35.5
+794.5 25.5
+796.4 43.1
+797.8 28.5
+802.5 257.2
+803.5 143.0
+809.2 10.3
+810.0 75.2
+810.7 2.7
+811.9 14.3
+813.0 25.7
+815.4 23.1
+816.5 31.4
+819.6 112.6
+822.2 49.0
+823.8 92.4
+824.8 11.3
+827.8 11.6
+828.6 5.3
+833.2 622.5
+834.3 19.7
+834.9 41.6
+836.0 40.7
+842.0 1571.0
+842.7 526.9
+844.2 5.3
+845.6 58.8
+846.6 25.3
+848.5 115.2
+854.9 40.5
+856.1 75.3
+856.9 59.6
+861.2 115.5
+863.7 60.4
+864.6 14.2
+866.3 81.0
+868.4 58.9
+871.1 49.7
+873.0 31.3
+874.7 12.0
+875.5 8.7
+878.4 64.0
+879.5 113.4
+882.0 82.1
+883.8 123.3
+884.5 110.2
+885.6 15.3
+887.6 44.8
+888.6 7.4
+891.6 46.4
+896.4 38.7
+899.2 29.3
+900.4 70.1
+903.6 22.7
+904.7 3.4
+906.1 77.5
+906.9 57.2
+907.7 117.7
+908.9 82.0
+910.0 60.5
+911.5 20.0
+913.2 97.1
+915.0 29.8
+916.8 63.0
+917.6 268.9
+918.6 79.4
+920.1 63.5
+922.0 32.1
+925.8 122.1
+929.7 53.6
+930.8 112.2
+931.5 382.0
+932.1 195.5
+933.5 118.2
+939.0 58.2
+940.0 7783.7
+940.7 3289.2
+941.7 566.5
+942.7 210.6
+943.7 76.0
+944.7 63.2
+946.6 74.0
+947.5 26.6
+948.4 47.0
+949.2 57.2
+951.8 189.2
+953.6 50.9
+955.8 50.8
+957.5 87.0
+959.1 126.2
+960.2 70.8
+961.0 84.1
+963.3 135.3
+965.3 77.6
+966.6 98.8
+968.1 829.2
+969.1 45.9
+970.0 87.6
+971.5 33.6
+972.9 112.3
+973.6 21.9
+974.5 114.4
+975.4 18.8
+977.2 3871.5
+978.1 545.2
+979.2 111.3
+980.2 67.3
+981.5 52.2
+982.9 52.3
+983.7 221.4
+984.3 13.2
+985.9 10.6
+986.9 17.0
+987.9 10.3
+991.4 137.3
+992.8 135.7
+993.6 126.1
+994.4 19.1
+995.6 503.5
+996.4 9.7
+997.1 69.2
+997.8 109.3
+998.7 106.2
+1000.0 82.7
+1002.5 55.5
+1004.1 227.4
+1005.1 157.1
+1005.9 111.6
+1007.5 151.1
+1008.7 311.5
+1009.8 247.9
+1011.4 220.1
+1012.6 132.8
+1013.5 88.0
+1014.7 98.7
+1015.5 160.3
+1016.5 52.9
+1017.1 24.9
+1018.1 27.0
+1018.9 120.2
+1020.2 34.6
+1022.7 27.4
+1024.2 31.5
+1033.6 14.8
+1040.7 24.0
+1049.0 15.0
+1051.8 46.2
+1052.6 17.9
+1055.6 29.3
+1057.4 90.6
+1059.5 37.5
+1060.6 47.2
+1065.0 27.5
+1069.6 38.2
+1074.8 44.8
+1077.4 35.8
+1078.3 144.5
+1080.4 39.6
+1081.2 25.3
+1083.0 35.5
+1085.5 32.7
+1086.2 21.7
+1087.6 282.0
+1088.5 53.0
+1089.4 259.7
+1090.1 168.4
+1090.8 18.7
+1094.8 13.6
+1108.6 185.0
+1109.5 22.7
+1110.2 25.0
+1113.5 39.5
+1118.4 108.5
+1120.7 15.1
+1122.4 32.6
+1124.4 3.1
+1125.5 124.3
+1126.5 46.1
+1129.4 57.0
+1130.5 43.8
+1132.5 81.3
+1135.5 16.7
+1138.3 12.1
+1142.5 3534.4
+1143.6 834.4
+1144.7 79.8
+1146.9 225.7
+1148.0 143.5
+1148.9 84.2
+1149.8 13.0
+1151.6 49.1
+1154.1 17.9
+1156.0 3.5
+1158.0 78.1
+1159.2 23.3
+1162.6 85.9
+1164.1 5.3
+1166.2 433.5
+1166.9 281.5
+1167.5 105.0
+1168.9 26.1
+1169.7 12.9
+1171.2 45.5
+1172.8 25.8
+1177.2 11.2
+1178.5 7.3
+1179.3 2.7
+1180.6 7.3
+1181.6 51.3
+1182.5 20.6
+1184.1 71.2
+1186.2 37.6
+1186.9 9.9
+1189.5 32.9
+1190.3 62.5
+1191.0 18.7
+1191.7 52.5
+1194.9 439.2
+1195.7 103.3
+1196.6 31.8
+1198.5 1107.6
+1199.7 379.1
+1201.8 20.5
+1203.5 1011.7
+1204.2 1000.8
+1204.8 18.6
+1205.5 85.9
+1206.2 75.5
+1208.5 5.8
+1210.3 43.0
+1211.8 60.7
+1213.6 1000.1
+1214.6 193.3
+1216.5 5197.3
+1217.4 2027.1
+1218.4 207.4
+1219.0 34.4
+1221.1 42.7
+1222.2 37.7
+1223.9 6.5
+1225.4 35.3
+1229.7 38.7
+1231.0 63.0
+1233.1 38.1
+1234.5 40.3
+1235.8 16.1
+1239.3 941.0
+1240.1 121.3
+1240.9 49.2
+1242.8 29.2
+1244.6 42.9
+1246.0 11.9
+1247.8 527.3
+1248.6 79.0
+1249.7 24.5
+1250.8 8.1
+1251.9 15.8
+1252.7 41.0
+1255.3 68.6
+1261.1 20.2
+1263.9 11.4
+1265.5 65.4
+1268.8 32.6
+1274.2 62.0
+1274.8 17.5
+1276.4 26.4
+1277.3 13.5
+1278.6 64.6
+1279.5 52.5
+1280.3 32.2
+1281.8 37.2
+1283.4 779.9
+1284.4 77.5
+1287.5 85.6
+1288.1 33.7
+1291.9 24.4
+1293.8 39.4
+1295.8 140.1
+1296.9 453.3
+1297.7 17.6
+1298.8 32.7
+1299.5 8.2
+1302.8 37.3
+1310.5 33.6
+1311.7 32.1
+1313.2 36.8
+1318.4 55.2
+1319.9 39.9
+1322.7 24.9
+1323.4 36.5
+1324.1 56.8
+1326.0 27.2
+1327.4 25.4
+1328.5 545.9
+1329.7 243.3
+1332.4 34.4
+1336.7 67.4
+1340.3 17.0
+1341.4 121.1
+1344.7 116.6
+1345.4 23.1
+1349.9 12.4
+1353.6 244.3
+1354.5 157.4
+1355.9 9.4
+1356.6 9.3
+1362.5 705.7
+1363.5 80.4
+1366.0 6.5
+1368.8 19.3
+1373.6 26.7
+1375.6 47.7
+1376.6 44.6
+1377.4 49.8
+1378.0 5.7
+1380.9 26.0
+1384.6 33.9
+1391.5 14.3
+1392.6 36.7
+1394.6 541.9
+1395.6 203.9
+1396.6 69.9
+1398.9 18.6
+1402.8 109.7
+1403.5 33.3
+1407.2 17.4
+1408.6 95.8
+1409.5 158.3
+1410.6 27.3
+1412.6 1443.7
+1413.6 955.6
+1414.6 207.7
+1417.1 56.2
+1418.2 207.1
+1419.2 37.5
+1424.4 6.6
+1426.4 22.7
+1427.0 50.6
+1427.7 96.6
+1430.9 34.0
+1431.8 19.5
+1433.8 35.6
+1438.9 37.1
+1439.8 36.3
+1440.8 21.9
+1446.5 43.1
+1449.8 19.5
+1457.6 112.9
+1458.6 86.1
+1459.6 15.7
+1461.6 8.7
+1465.6 92.8
+1466.4 166.6
+1467.0 55.5
+1469.2 31.3
+1470.3 8.4
+1474.7 578.2
+1475.4 745.4
+1483.5 17.9
+1487.4 23.4
+1488.3 114.9
+1490.7 10.0
+1491.6 10.5
+1493.1 25.1
+1501.7 20.0
+1504.1 32.9
+1504.9 38.1
+1505.8 88.2
+1510.9 71.4
+1511.7 4.4
+1518.5 60.3
+1519.6 31.8
+1522.6 819.5
+1523.6 543.0
+1524.3 110.1
+1525.3 57.6
+1526.9 7.7
+1528.4 8.7
+1529.6 4.1
+1536.6 145.1
+1537.8 46.5
+1538.8 12.9
+1540.6 4353.8
+1541.7 1504.9
+1542.8 343.7
+1545.5 14.9
+1554.7 2257.2
+1555.7 1466.1
+1556.7 228.8
+1561.2 52.8
+1562.1 14.1
+1566.1 8.4
+1583.2 24.0
+1585.6 37.5
+1605.6 26.7
+1612.4 32.0
+1615.6 20.6
+1619.4 11.6
+1625.4 23.7
+1628.6 55.5
+1630.0 76.6
+1633.9 32.4
+1636.4 9.7
+1637.7 14.5
+1638.5 23.6
+1640.9 12.7
+1645.4 52.6
+1648.8 14.2
+1652.9 2.7
+1657.1 41.4
+1665.1 24.4
+1665.9 140.3
+1666.6 23.3
+1667.2 23.5
+1677.8 18.0
+1683.0 101.5
+1683.7 45.4
+1687.5 2.8
+1697.1 45.7
+1707.8 11.1
+1712.0 48.7
+1713.6 35.8
+1714.6 10.8
+1733.8 12.3
+1742.3 3.9
+1751.7 44.5
+1754.4 55.4
+1767.0 48.4
+1771.1 37.3
+1772.6 40.0
+1812.1 10.3
+1855.4 22.7
+1856.2 29.4
+1863.9 40.7
+1864.9 13.4
+1878.3 59.7
+1879.5 21.2
+1881.5 95.4
+1882.2 26.3
+1883.0 27.9
+1898.7 15.2
+1904.1 11.0
+1913.0 17.6
+1917.2 18.7
+1917.8 6.1
+1925.7 23.5
+1927.1 41.2
+1934.1 86.3
+1934.8 161.4
+1935.7 245.4
+1936.5 55.7
+1937.6 9.3
+1945.9 12.0
+1952.9 282.7
+1953.8 272.9
+1954.4 21.6
+1989.9 10.0
+S	119	119	651.77
+Z	2	1302.53
+187.0 9.2
+192.3 80.5
+201.2 18.7
+202.0 10.8
+204.5 15.8
+209.3 24.4
+212.2 47.2
+222.2 105.9
+228.3 45.2
+229.2 172.1
+230.1 12.0
+232.4 234.1
+234.5 65.5
+235.8 93.5
+237.1 194.6
+238.2 24.6
+240.2 97.2
+244.3 60.5
+245.1 57.0
+246.4 26.8
+249.3 10.3
+251.2 20.6
+255.3 95.4
+257.1 17.6
+258.3 91.3
+259.3 9.2
+260.5 20.8
+262.5 39.4
+264.8 162.6
+266.2 29.5
+270.2 11.6
+271.3 19.7
+274.3 51.4
+275.3 444.2
+283.3 266.3
+284.1 60.9
+286.6 55.0
+288.3 43.9
+293.5 30.5
+294.2 76.0
+295.2 41.9
+296.2 64.8
+297.4 80.6
+298.9 50.7
+299.6 10.5
+300.3 42.3
+304.3 47.6
+306.6 13.1
+309.3 36.2
+310.2 9.1
+311.4 39.7
+312.3 133.4
+317.4 246.9
+319.4 27.7
+320.5 14.5
+323.6 29.4
+324.3 16.8
+325.5 125.1
+326.9 21.6
+328.3 16.7
+329.5 131.9
+330.4 83.7
+333.3 59.9
+338.4 8.3
+340.4 50.1
+341.2 76.1
+342.6 77.7
+343.4 56.4
+344.5 160.8
+346.4 1107.7
+347.4 140.5
+348.4 59.4
+349.5 32.0
+350.2 40.5
+351.2 212.1
+352.4 13.5
+354.4 80.6
+355.4 69.3
+358.2 248.4
+359.3 91.7
+360.4 662.9
+361.4 273.1
+365.9 15.3
+367.4 41.3
+368.4 31.3
+369.5 84.6
+370.5 49.9
+373.0 59.4
+374.9 33.5
+378.2 26.1
+381.2 26.9
+382.2 41.4
+383.5 30.5
+385.2 24.7
+389.4 44.7
+390.7 61.5
+391.4 91.2
+392.5 13.7
+394.4 361.5
+395.1 35.4
+396.7 63.4
+397.3 136.6
+398.3 87.8
+399.6 26.3
+400.3 90.9
+402.2 15.6
+403.2 55.2
+404.3 34.1
+405.4 33.7
+407.4 53.3
+411.2 60.3
+412.3 181.3
+413.9 75.5
+414.5 21.5
+415.4 152.6
+416.4 67.1
+417.6 18.6
+418.5 83.2
+423.5 39.3
+424.3 49.2
+425.4 147.3
+429.1 31.4
+430.6 799.6
+431.6 91.5
+432.4 29.8
+434.2 21.7
+435.6 34.7
+438.3 113.9
+439.6 90.5
+440.6 21.4
+441.5 71.6
+442.5 78.1
+443.3 292.7
+444.3 52.4
+445.4 1023.7
+446.5 261.9
+447.4 124.7
+449.6 92.9
+451.6 68.8
+454.2 110.6
+455.2 49.0
+456.6 60.7
+457.4 59.8
+458.3 20.1
+459.4 613.0
+460.4 54.7
+461.0 69.4
+463.2 62.1
+465.2 38.9
+466.6 60.6
+467.3 192.1
+468.4 129.1
+469.5 97.5
+470.6 114.2
+471.4 71.9
+473.5 129.7
+474.7 15.3
+476.0 115.8
+476.9 34.7
+478.5 46.7
+479.1 80.9
+482.2 35.4
+482.8 29.6
+483.4 20.3
+485.3 284.4
+486.4 57.8
+487.3 49.7
+488.4 215.3
+489.1 380.0
+490.6 124.0
+491.7 153.1
+494.4 18.1
+495.5 99.7
+497.1 123.1
+498.4 17.0
+501.9 143.1
+506.6 20.7
+507.7 358.3
+508.6 59.2
+511.4 59.4
+512.2 30.9
+513.5 141.5
+515.2 157.6
+517.9 123.8
+519.1 399.5
+520.0 125.8
+522.3 47.0
+524.1 11.9
+526.4 346.7
+527.2 65.8
+528.6 228.4
+529.6 235.7
+530.8 198.1
+532.5 15.2
+533.8 184.9
+534.8 243.0
+535.4 44.9
+536.4 236.5
+537.5 907.2
+538.5 296.7
+539.6 245.3
+540.8 256.7
+544.2 227.6
+545.1 66.2
+546.5 1549.2
+547.4 272.0
+548.4 119.3
+550.5 155.8
+551.2 87.3
+552.7 359.8
+553.9 292.6
+554.7 108.6
+555.4 111.4
+556.9 51.3
+557.8 39.8
+558.6 35.5
+560.5 1039.8
+561.5 295.0
+563.8 53.7
+564.4 31.6
+566.7 85.1
+567.4 47.0
+568.3 239.8
+569.6 157.4
+570.5 251.1
+571.6 64.0
+572.4 843.8
+573.4 268.9
+574.1 33.6
+574.8 195.8
+575.9 18.6
+576.8 24.8
+577.7 175.4
+578.5 86.2
+579.4 10.3
+580.6 60.3
+582.5 81.6
+583.2 55.5
+583.9 94.0
+585.0 61.7
+586.6 213.9
+587.4 71.9
+588.6 186.5
+590.3 84.7
+591.8 143.3
+593.5 196.7
+594.3 215.4
+595.1 175.8
+596.7 36.8
+597.4 184.5
+598.7 159.7
+599.5 30.4
+600.5 91.5
+601.1 81.0
+602.9 15.4
+603.5 38.3
+604.9 189.8
+606.3 382.1
+607.5 182.1
+608.7 102.7
+609.9 71.8
+610.9 382.9
+611.7 8.5
+613.0 52.5
+613.7 67.0
+614.5 233.5
+616.2 540.1
+617.5 5389.6
+618.6 1429.1
+619.8 321.3
+621.0 211.7
+621.8 306.2
+622.6 75.8
+623.6 66.1
+624.4 754.4
+625.5 158.6
+626.7 53.0
+627.7 211.4
+628.7 1435.8
+629.8 111.5
+630.6 193.8
+631.7 236.8
+632.4 291.8
+633.4 407.0
+634.5 557.7
+635.5 245.2
+636.6 217.0
+638.2 508.4
+639.3 512.0
+640.2 297.5
+641.3 864.0
+642.3 3680.2
+643.3 911.7
+644.1 141.3
+644.7 81.6
+647.1 51.9
+649.6 24.3
+656.1 106.8
+657.2 238.4
+659.6 711.7
+660.6 222.3
+663.8 37.3
+665.4 115.2
+667.1 590.8
+667.8 172.2
+668.5 104.0
+670.0 63.6
+671.5 103.6
+672.8 132.4
+674.6 37.3
+677.4 26.8
+679.2 60.1
+680.5 109.2
+681.6 57.3
+682.2 106.4
+683.3 90.5
+685.4 2428.0
+686.4 228.8
+687.5 343.2
+688.7 79.7
+690.6 50.5
+692.6 28.2
+693.5 349.4
+694.4 70.0
+695.6 118.1
+697.5 40.2
+703.3 49.0
+704.6 119.9
+705.6 72.6
+706.7 120.9
+707.9 155.1
+709.8 24.3
+710.6 146.8
+711.7 82.1
+712.5 9.0
+713.6 166.4
+714.5 33.3
+715.4 71.6
+716.6 57.1
+718.5 27.7
+719.4 53.1
+720.4 58.8
+723.0 258.2
+723.9 127.8
+724.9 234.6
+726.1 8.1
+727.6 134.4
+730.6 1882.2
+731.7 680.4
+732.9 243.9
+734.7 76.9
+737.4 473.2
+738.7 118.6
+742.6 496.2
+743.5 323.3
+744.3 74.7
+745.6 30.7
+746.5 50.0
+749.0 38.8
+750.6 74.7
+751.4 48.1
+752.0 92.8
+752.9 66.4
+755.4 696.8
+756.4 151.9
+758.6 81.2
+760.1 124.9
+765.6 89.5
+767.3 107.3
+768.7 13.9
+769.7 46.3
+770.6 45.9
+771.7 131.2
+772.5 52.9
+773.4 12.9
+774.8 58.0
+776.1 126.8
+781.8 404.0
+782.4 120.6
+784.5 83.0
+785.4 54.3
+786.6 201.6
+788.8 445.5
+789.8 188.5
+791.3 136.9
+792.6 163.7
+793.6 83.5
+796.6 152.9
+798.2 27.2
+799.4 20.2
+800.2 498.6
+801.8 134.5
+804.7 23.2
+808.0 67.9
+808.7 43.3
+809.4 216.6
+810.4 115.1
+811.3 311.6
+815.8 18.6
+817.7 75.1
+819.0 276.4
+819.6 852.5
+820.2 410.7
+821.6 83.4
+822.8 127.1
+823.8 284.3
+824.6 189.2
+825.3 156.8
+826.5 102.7
+828.4 76.6
+829.4 86.3
+831.6 8.9
+832.8 50.3
+834.4 180.9
+835.4 61.5
+838.4 98.4
+839.4 152.5
+840.5 95.5
+841.5 159.1
+842.7 93.2
+843.5 112.8
+844.9 81.6
+845.7 105.1
+846.6 56.4
+847.5 158.8
+848.2 85.0
+849.5 359.5
+850.3 20.7
+851.6 7.0
+852.8 29.3
+853.9 95.4
+855.6 171.3
+857.5 688.7
+858.5 408.1
+859.6 1237.7
+860.7 344.1
+861.9 82.4
+863.2 41.9
+864.8 35.1
+866.2 13.8
+867.5 76.5
+869.6 44.8
+871.6 507.1
+872.8 34.5
+876.8 57.9
+877.8 28.6
+879.7 17.0
+881.7 45.9
+883.7 121.6
+884.6 258.1
+885.8 361.2
+886.9 41.9
+889.7 406.9
+890.8 140.7
+891.5 62.1
+893.1 215.6
+896.1 81.3
+898.1 42.8
+898.7 131.6
+904.6 131.2
+905.8 159.2
+908.2 41.0
+910.5 60.8
+911.8 119.4
+913.2 41.3
+914.3 30.2
+916.7 49.0
+917.6 31.8
+918.7 102.5
+920.0 60.9
+920.7 152.9
+923.0 244.8
+923.7 307.5
+924.8 55.5
+925.5 79.5
+928.7 39.7
+929.7 89.0
+930.6 184.9
+931.5 14.1
+932.6 103.6
+938.6 379.1
+939.6 66.8
+941.6 233.8
+942.4 211.1
+945.1 157.9
+946.0 32.4
+948.6 37.4
+950.4 329.5
+951.8 67.2
+952.9 342.4
+953.7 180.3
+956.5 1529.6
+957.7 407.4
+958.9 233.6
+965.6 51.4
+967.9 101.9
+970.2 69.9
+972.6 18.0
+973.4 151.4
+974.7 2157.3
+975.8 768.3
+976.7 314.3
+977.6 37.4
+979.7 19.2
+982.9 34.2
+984.7 252.9
+985.7 64.4
+986.9 18.3
+988.8 69.5
+989.9 99.1
+991.7 40.8
+996.8 47.3
+998.1 18.6
+998.9 37.2
+999.9 10.4
+1000.5 24.6
+1002.8 101.3
+1003.6 29.9
+1005.3 103.9
+1006.8 115.8
+1007.4 20.3
+1008.8 15.3
+1009.7 27.6
+1010.7 43.9
+1011.9 30.1
+1014.0 466.8
+1015.1 69.1
+1019.6 23.3
+1022.8 70.6
+1026.5 118.0
+1027.6 801.1
+1028.7 340.8
+1030.0 93.6
+1033.4 53.6
+1034.7 25.7
+1035.8 14.1
+1036.9 961.4
+1037.7 182.8
+1039.0 61.0
+1041.9 181.2
+1042.7 30.2
+1044.9 53.0
+1045.6 40.6
+1049.0 103.0
+1051.6 190.5
+1052.6 32.3
+1054.7 62.1
+1055.7 257.4
+1056.7 296.0
+1057.8 53.0
+1059.1 48.1
+1067.1 15.4
+1067.8 92.0
+1069.5 510.8
+1070.8 167.3
+1071.9 42.8
+1073.8 699.2
+1074.7 357.7
+1075.8 127.4
+1083.2 25.8
+1085.8 58.0
+1086.6 23.5
+1095.6 94.1
+1097.6 66.6
+1100.6 137.2
+1108.4 62.7
+1109.2 27.7
+1110.1 49.2
+1114.7 18.0
+1118.7 52.5
+1121.8 163.2
+1124.9 18.5
+1126.8 216.3
+1127.7 145.7
+1137.5 62.0
+1138.6 310.7
+1139.5 61.1
+1141.2 41.6
+1150.7 27.7
+1155.6 1349.8
+1156.7 681.4
+1157.4 8.8
+1161.8 56.5
+1172.0 102.6
+1172.8 62.0
+1184.8 13.0
+1188.6 124.4
+1189.8 16.7
+1198.8 24.7
+1229.8 31.7
+1231.0 52.3
+1261.9 30.7
+S	120	120	409.21
+I	ID	97
+I	RTime	4.5967
+Z	2	817.41
+129.1 2.9
+132.3 1.2
+143.0 2.2
+144.0 1.8
+147.2 1.1
+154.2 1.6
+155.2 1.8
+160.9 2.2
+166.2 1.3
+175.1 2.5
+178.1 1.1
+178.9 2.5
+183.1 6.4
+187.1 2.4
+191.6 2.0
+194.2 1.2
+200.2 1.6
+204.8 1.2
+224.4 2.5
+226.2 1.8
+227.2 1.2
+231.4 2.2
+232.2 2.2
+233.1 7.9
+243.3 3.0
+244.1 1.1
+246.2 14.1
+250.2 3.0
+252.1 2.4
+257.3 2.5
+261.4 0.8
+262.3 2.7
+267.4 3.2
+268.2 4.6
+271.6 2.5
+273.1 12.8
+279.3 2.4
+280.5 15.0
+281.1 15.6
+282.1 1.2
+285.6 8.5
+289.3 8.6
+290.3 1.1
+292.1 2.0
+294.2 1.7
+298.3 1.7
+303.3 1.6
+309.0 1.1
+311.4 6.8
+312.3 2.5
+321.4 2.4
+322.2 6.5
+324.0 2.2
+329.2 19.0
+336.3 0.8
+341.1 6.4
+344.9 5.0
+349.2 3.9
+358.3 5.1
+359.5 4.5
+362.2 3.7
+363.1 56.5
+367.3 6.0
+370.3 3.2
+371.9 2.4
+373.3 6.9
+375.3 10.3
+376.5 7.6
+377.3 12.6
+378.4 11.3
+381.0 8.1
+383.2 6.4
+387.0 4.0
+389.5 2.4
+391.4 30.2
+392.2 13.3
+393.6 8.5
+400.0 29.8
+400.7 29.7
+401.3 22.5
+428.6 3.9
+484.5 0.8
+505.0 2.5
+511.3 7.0
+517.2 6.6
+520.4 4.1
+528.2 17.1
+529.6 3.0
+532.4 5.6
+555.4 4.0
+561.3 2.7
+566.5 3.9
+570.5 2.4
+576.1 1.3
+583.2 5.5
+585.1 2.0
+586.6 8.6
+587.3 2.5
+602.4 1.2
+607.3 6.4
+609.2 1.3
+619.3 3.2
+629.5 6.3
+630.7 3.5
+641.4 0.8
+644.2 4.0
+646.1 10.3
+646.8 12.3
+647.7 6.8
+660.3 3.2
+662.5 3.2
+663.2 1.6
+672.4 2.4
+680.1 6.0
+680.8 2.0
+681.5 10.8
+689.8 9.6
+690.5 4.4
+728.5 2.4
+757.4 3.0
+776.5 1.7
+795.5 6.6
+796.5 1.8
+S	121	121	651.58
+Z	2	1302.15
+184.1 25.2
+185.2 20.9
+201.0 17.3
+214.9 41.4
+219.3 21.6
+229.0 251.4
+235.2 31.7
+239.2 9.5
+240.0 50.9
+241.3 38.3
+243.1 74.2
+244.1 18.6
+245.1 40.7
+251.1 55.9
+252.2 16.8
+258.2 39.0
+261.2 17.6
+264.2 14.8
+266.0 14.3
+274.3 13.9
+275.1 80.3
+276.0 25.9
+278.7 7.2
+282.3 11.5
+290.3 19.9
+292.1 39.2
+294.3 8.9
+296.9 14.9
+298.2 7.9
+299.2 8.4
+302.2 13.2
+304.3 8.5
+310.1 6.4
+311.3 83.7
+316.2 12.0
+320.1 25.0
+327.9 36.4
+329.5 115.2
+330.3 25.8
+332.2 23.5
+335.9 39.4
+340.5 28.8
+344.3 29.3
+346.3 499.1
+347.2 63.6
+349.3 38.8
+352.1 32.9
+354.1 27.9
+357.3 19.3
+358.1 85.5
+359.2 25.8
+361.3 19.4
+368.9 43.8
+402.5 49.6
+406.1 24.5
+407.2 148.4
+408.5 141.8
+410.3 50.6
+412.2 92.3
+415.2 29.1
+417.7 81.1
+418.8 52.6
+421.3 35.1
+424.9 76.5
+429.6 15.1
+433.3 30.4
+434.2 68.4
+435.2 18.3
+437.1 10.1
+439.8 28.1
+440.5 12.0
+441.4 33.6
+443.2 177.1
+444.5 23.5
+445.3 354.5
+446.4 291.8
+447.4 8.1
+452.6 87.4
+453.3 27.1
+454.3 19.6
+455.2 17.0
+457.4 48.6
+458.2 40.0
+459.3 100.5
+459.9 33.6
+460.6 39.9
+462.1 13.2
+466.4 97.1
+471.3 48.7
+472.6 86.5
+473.3 29.2
+474.3 7.1
+475.1 46.6
+484.4 165.3
+485.6 20.3
+488.2 92.9
+488.9 176.8
+492.3 26.9
+496.3 40.3
+499.7 16.2
+501.9 27.4
+503.4 287.3
+504.2 34.4
+506.3 51.4
+508.3 43.6
+509.5 191.5
+511.2 15.9
+511.8 39.2
+514.9 84.9
+516.3 22.1
+522.7 52.7
+524.4 322.4
+525.2 111.0
+528.2 20.4
+529.3 44.1
+536.0 88.2
+537.1 349.0
+537.7 166.1
+538.5 99.6
+539.4 26.9
+540.1 43.7
+540.9 71.6
+542.8 81.1
+543.5 109.9
+544.5 99.2
+545.3 58.9
+549.0 84.1
+550.2 56.8
+551.4 155.0
+553.1 14.5
+554.0 201.3
+554.9 43.8
+558.0 77.8
+560.1 283.6
+561.3 180.4
+562.4 80.8
+563.7 30.8
+564.5 114.5
+565.9 41.2
+567.9 42.9
+569.1 14.1
+570.3 113.6
+571.6 119.7
+572.4 1152.6
+573.3 118.6
+575.0 12.9
+576.5 23.6
+577.4 19.1
+579.5 159.0
+580.6 14.8
+582.5 55.0
+584.8 61.4
+586.0 155.3
+586.9 95.4
+587.7 78.0
+588.4 12.2
+590.9 10.4
+593.3 76.5
+594.6 328.9
+595.5 17.3
+596.9 52.3
+599.7 132.2
+600.5 19.1
+601.9 129.0
+603.8 34.5
+605.0 14.1
+607.5 93.6
+608.6 25.5
+609.5 110.8
+611.8 46.1
+616.1 520.6
+617.4 2985.0
+618.4 613.5
+619.4 123.2
+621.6 100.5
+622.8 45.7
+624.7 126.3
+626.1 119.2
+627.0 67.7
+629.4 104.5
+631.2 152.9
+633.3 131.7
+634.6 278.4
+635.4 34.3
+637.5 127.9
+639.2 131.7
+640.0 118.8
+641.3 575.4
+642.4 1024.0
+643.5 60.4
+644.3 14.4
+651.6 14.5
+656.6 33.2
+658.3 28.5
+664.3 10.2
+665.2 39.8
+667.1 368.7
+668.2 86.1
+669.3 7.3
+671.7 34.3
+676.5 29.1
+682.1 26.2
+684.5 23.8
+685.2 1026.8
+686.3 531.3
+687.1 131.5
+688.5 20.4
+689.2 8.9
+690.1 14.0
+691.0 89.2
+696.9 23.1
+698.1 37.9
+700.8 116.4
+704.6 40.6
+707.3 46.2
+708.4 317.9
+710.1 127.5
+711.2 16.4
+712.4 22.9
+713.2 79.6
+714.3 17.8
+718.5 6.0
+724.1 9.9
+725.3 97.8
+726.4 28.7
+728.4 117.1
+730.4 849.7
+731.3 647.2
+732.5 121.7
+733.8 28.7
+736.2 10.3
+737.1 220.7
+742.4 278.7
+743.2 177.4
+744.5 109.9
+745.8 60.2
+749.5 77.4
+751.8 29.6
+755.4 56.9
+756.5 24.9
+758.2 31.8
+759.4 15.5
+764.3 31.3
+766.0 32.6
+769.2 10.6
+772.8 140.4
+775.4 51.5
+780.3 61.3
+789.7 51.7
+791.3 60.7
+792.1 41.0
+793.2 51.2
+797.5 32.4
+798.3 121.9
+799.3 76.2
+801.4 1330.6
+803.4 40.5
+806.1 45.3
+808.2 8.3
+809.0 40.3
+811.1 31.6
+817.7 53.4
+819.4 32.9
+825.1 24.8
+830.2 20.4
+833.3 8.7
+836.6 198.8
+838.3 65.9
+839.4 146.9
+840.4 192.6
+841.3 148.4
+842.4 58.7
+843.8 83.0
+846.1 44.7
+846.7 43.5
+848.1 14.5
+848.9 52.1
+853.3 63.6
+857.8 2854.8
+858.6 205.4
+859.5 319.5
+860.4 103.0
+861.5 76.8
+863.0 87.2
+863.6 108.6
+866.0 21.8
+867.1 37.6
+874.2 17.3
+882.2 45.4
+883.2 42.8
+885.3 24.6
+890.7 18.3
+894.4 150.4
+895.5 220.7
+896.4 66.6
+900.5 36.8
+901.9 107.3
+902.5 16.8
+903.4 189.4
+904.4 80.6
+905.6 28.3
+915.2 24.0
+919.5 25.3
+920.3 48.4
+922.5 416.1
+923.2 17.0
+926.1 139.9
+927.1 16.3
+927.9 40.4
+929.9 9.9
+938.4 137.6
+939.3 226.0
+941.3 47.4
+943.6 21.5
+945.6 18.0
+948.4 53.2
+949.4 61.4
+951.6 72.4
+956.2 698.8
+957.0 337.2
+957.7 29.3
+958.5 90.5
+964.3 43.7
+967.0 96.3
+968.5 35.3
+972.6 10.5
+973.8 143.8
+974.5 285.9
+975.4 461.6
+976.6 162.2
+977.7 28.3
+983.6 8.2
+984.3 13.3
+986.9 13.1
+990.7 47.2
+993.3 102.3
+999.2 22.6
+1008.4 103.6
+1009.4 116.8
+1010.3 34.4
+1011.5 24.3
+1014.6 22.7
+1017.1 43.9
+1022.7 58.2
+1023.4 27.6
+1027.2 278.4
+1028.0 296.5
+1029.3 74.9
+1030.2 15.9
+1032.4 53.9
+1041.4 22.2
+1043.8 73.3
+1044.8 65.2
+1047.3 139.8
+1048.5 57.2
+1056.0 58.2
+1057.4 29.8
+1062.7 32.7
+1073.4 323.5
+1074.5 182.8
+1076.7 24.4
+1082.5 12.8
+1087.4 30.7
+1090.6 39.2
+1102.8 47.7
+1108.5 40.8
+1126.1 102.3
+1128.0 74.1
+1129.8 61.1
+1137.0 23.5
+1138.4 85.2
+1139.1 14.2
+1155.4 657.0
+1156.3 253.7
+1157.5 93.6
+1158.6 54.5
+1165.4 17.3
+1168.2 39.0
+1173.3 25.2
+1186.4 29.4
+1187.6 82.3
+1188.6 32.1
+1189.6 48.9
+1198.9 31.6
+1231.5 80.3
+1302.6 46.3
+S	122	122	760.22
+I	ID	85
+I	RTime	3.9752
+Z	1	760.22
+236.0 1.2
+249.1 10.3
+249.9 4.4
+264.8 1.8
+266.3 1.2
+267.0 1.2
+269.1 3.7
+281.0 56.7
+282.1 18.1
+283.2 37.5
+284.8 5.4
+287.1 2.0
+293.3 2.7
+298.8 22.7
+299.8 5.5
+300.9 8.0
+319.4 1.5
+325.2 2.0
+328.2 2.4
+330.2 3.2
+332.4 1.7
+336.3 3.2
+341.1 21.2
+341.9 5.0
+343.1 6.3
+344.3 1.2
+346.1 1.7
+355.2 8.5
+356.0 5.8
+357.3 5.8
+359.7 1.8
+360.7 6.3
+370.9 8.8
+373.1 1.2
+403.3 1.7
+415.2 2.0
+416.8 8.8
+429.1 14.5
+430.0 14.0
+430.9 13.8
+445.5 2.0
+446.3 1.7
+447.0 3.4
+482.6 3.5
+498.3 2.0
+499.7 2.4
+502.9 4.1
+503.9 5.3
+504.9 11.5
+516.6 4.5
+517.3 1.8
+518.6 2.2
+523.3 3.7
+527.4 3.9
+532.6 1.8
+546.3 1.6
+560.4 1.8
+570.6 4.0
+585.5 4.0
+596.3 0.8
+597.3 2.0
+614.4 3.2
+632.1 14.1
+645.4 1.3
+646.3 2.2
+655.3 5.8
+663.0 2.2
+670.3 6.5
+678.2 1.2
+691.6 2.7
+702.5 4.5
+707.9 8.8
+713.5 2.5
+714.3 3.4
+715.8 2.9
+717.9 3.5
+720.6 7.3
+723.7 5.0
+725.9 2.2
+741.4 3.5
+742.2 4.5
+S	123	123	565.03
+Z	2	1129.05
+165.2 3.9
+175.1 8.5
+182.0 105.6
+189.2 28.8
+201.2 19.1
+211.9 11.2
+230.0 7.5
+232.1 4.1
+234.2 5.7
+240.1 6.0
+243.1 12.2
+245.3 6.3
+252.3 9.1
+257.1 10.9
+258.2 22.3
+260.1 4.2
+266.5 10.6
+268.1 40.8
+269.1 19.3
+270.1 31.6
+271.2 35.1
+275.2 48.8
+278.3 14.7
+283.9 9.1
+285.2 7.5
+286.2 12.4
+287.2 33.2
+288.0 81.6
+289.2 11.8
+291.1 7.1
+295.3 71.4
+296.3 70.3
+298.0 6.7
+299.9 31.1
+303.3 124.6
+304.2 19.9
+310.2 37.6
+315.6 37.4
+316.4 17.1
+317.4 7.8
+327.3 11.2
+328.0 5.3
+331.2 25.6
+337.3 25.8
+340.2 8.3
+341.0 18.8
+344.4 27.4
+345.3 126.2
+346.4 6.9
+351.5 14.4
+353.8 12.7
+355.1 9.0
+356.5 25.2
+357.4 34.5
+363.2 204.1
+365.2 29.0
+374.8 31.0
+379.4 11.5
+380.3 37.1
+383.2 88.1
+384.0 108.7
+384.8 47.2
+399.6 25.6
+400.7 74.1
+403.8 30.6
+408.3 79.3
+409.7 28.5
+410.7 4.6
+412.6 60.3
+413.3 49.7
+415.3 6.1
+416.4 4.0
+418.7 6.9
+422.3 61.2
+426.0 11.2
+427.3 47.7
+428.3 15.6
+429.4 12.0
+431.4 6.1
+434.4 14.4
+435.4 9.2
+436.1 48.5
+437.0 27.2
+438.1 27.2
+439.9 27.0
+442.6 92.4
+443.6 40.8
+448.0 13.1
+449.5 30.7
+450.7 69.7
+451.4 200.5
+452.4 23.2
+455.4 23.3
+456.2 140.9
+457.3 103.6
+460.4 121.1
+461.3 61.2
+463.5 4825.2
+464.3 493.3
+465.2 63.0
+466.1 48.0
+468.5 78.9
+474.6 572.4
+475.4 34.9
+476.8 37.7
+477.4 34.9
+478.2 1607.0
+480.2 8.4
+481.2 24.7
+482.0 17.3
+484.2 37.6
+485.5 27.4
+486.3 11.2
+487.8 21.4
+491.3 39.6
+494.9 47.9
+496.2 48.3
+498.0 40.1
+501.4 12.9
+503.4 79.9
+504.5 12.7
+506.7 18.8
+509.7 70.1
+511.3 23.5
+513.3 22.7
+514.0 171.3
+514.9 102.7
+517.9 69.1
+520.0 64.2
+521.2 4.9
+521.9 4.5
+523.0 5.0
+525.0 67.5
+526.7 57.2
+527.7 16.2
+531.1 35.2
+533.3 68.1
+537.2 19.4
+538.6 285.2
+539.3 77.2
+541.3 102.1
+542.1 7.2
+543.4 46.0
+544.4 53.7
+545.2 66.8
+546.6 424.8
+547.7 42.5
+548.7 82.3
+549.9 168.9
+551.5 35.9
+552.9 124.1
+556.0 967.1
+557.0 27.1
+558.0 85.9
+573.6 96.7
+579.0 33.7
+579.7 62.0
+585.3 36.1
+587.5 6.0
+590.1 14.8
+591.5 11.4
+592.9 30.3
+595.7 97.6
+596.5 60.1
+598.5 178.6
+599.4 71.2
+600.4 22.1
+607.0 11.7
+608.3 37.7
+620.0 67.9
+623.6 30.5
+624.3 47.6
+625.4 3.4
+632.3 27.1
+635.4 36.6
+640.4 125.1
+641.0 27.4
+642.5 106.9
+643.4 114.1
+645.3 504.6
+646.2 142.3
+646.9 188.5
+648.2 60.5
+648.9 59.0
+650.3 5.8
+651.3 8.2
+653.7 125.8
+660.2 55.6
+661.3 24.0
+662.6 63.5
+663.3 11.6
+669.7 47.7
+670.4 23.8
+671.5 50.9
+676.4 16.8
+678.8 244.0
+679.8 62.7
+680.5 77.6
+681.7 24.1
+688.3 56.2
+690.3 74.1
+691.8 136.6
+694.6 2062.1
+695.5 181.6
+696.4 37.0
+701.7 2.6
+703.3 48.9
+705.5 39.2
+707.8 58.1
+708.4 16.7
+711.0 36.2
+713.7 24.8
+715.1 15.0
+715.7 22.2
+716.4 29.5
+718.5 39.8
+719.8 20.6
+721.9 130.0
+723.7 30.5
+724.5 44.4
+727.3 35.5
+729.9 35.7
+730.7 7.6
+742.1 14.7
+743.3 69.9
+747.9 22.9
+749.2 33.2
+752.1 64.7
+759.6 66.5
+766.4 992.2
+767.4 402.5
+768.3 70.1
+769.6 10.9
+773.7 103.3
+775.5 21.9
+776.5 6.7
+779.0 46.5
+779.9 78.0
+781.3 32.0
+785.1 37.2
+786.6 46.3
+791.3 37.7
+795.6 15.1
+797.6 4.4
+799.4 10.1
+800.5 11.7
+801.5 7.2
+812.5 12.2
+813.3 42.9
+816.9 14.4
+823.4 1080.3
+824.5 510.0
+825.5 87.9
+834.3 231.2
+835.4 189.4
+836.5 11.0
+842.4 11.3
+846.0 8.4
+846.9 20.0
+865.4 7.3
+875.1 22.3
+878.6 84.0
+883.5 9.2
+893.3 13.0
+912.0 45.8
+913.5 13.0
+921.4 3.7
+945.7 35.1
+947.4 543.1
+948.5 424.1
+949.7 90.5
+954.4 232.8
+955.5 45.4
+984.2 22.4
+1010.5 4.1
+1013.6 15.2
+1016.2 21.6
+1017.3 4.9
+1018.8 60.8
+1057.7 8.7
+1142.0 28.4
+S	124	124	495.06
+I	ID	196
+I	RTime	9.6932
+Z	2	989.11
+147.1 2.5
+166.1 1.2
+167.1 1.3
+170.7 2.0
+173.0 1.2
+175.2 2.0
+183.0 2.0
+207.2 15.3
+208.1 3.2
+213.1 2.7
+218.4 2.7
+220.4 1.2
+222.1 1.5
+226.2 1.7
+235.2 13.6
+238.4 2.7
+239.3 2.2
+240.4 4.6
+246.2 3.9
+251.1 1.0
+253.9 2.4
+255.1 1.0
+256.4 2.2
+257.1 1.2
+259.0 260.0
+261.1 3.9
+262.3 5.1
+267.3 1.5
+275.3 8.3
+280.2 2.0
+290.3 1.2
+299.6 7.4
+305.2 5.0
+307.0 3.2
+314.2 1.6
+315.4 1.3
+332.1 1.7
+332.8 3.5
+334.2 1.3
+337.9 2.0
+344.4 1.5
+347.4 1.8
+348.8 8.0
+349.7 2.5
+358.0 1.8
+361.1 3.2
+362.3 2.7
+366.6 2.4
+371.3 3.7
+372.3 1.7
+373.5 2.0
+375.4 2.0
+377.3 5.6
+380.3 4.0
+386.6 8.6
+387.2 1.2
+388.8 10.1
+389.7 3.2
+395.4 3.7
+402.1 2.5
+402.9 1.3
+407.2 2.0
+408.8 4.0
+410.8 10.8
+428.1 6.8
+431.1 15.0
+437.6 3.7
+443.3 1.7
+446.1 2.7
+451.3 8.0
+452.3 9.8
+453.5 9.6
+455.3 2.2
+458.6 4.0
+459.4 3.2
+460.2 6.6
+463.4 3.9
+469.8 5.3
+472.3 3.4
+476.3 56.9
+477.1 42.9
+478.1 22.3
+485.6 235.0
+486.4 143.3
+487.4 16.1
+508.2 1.8
+519.4 7.8
+522.4 5.0
+533.1 6.5
+534.3 5.6
+537.3 3.5
+540.6 2.9
+548.4 1.1
+554.1 2.5
+557.2 1.2
+563.7 2.2
+568.2 1.2
+569.4 1.3
+571.3 5.8
+572.4 7.4
+575.8 5.3
+581.2 7.5
+582.3 7.0
+583.1 2.9
+590.4 6.6
+600.2 4.5
+601.0 2.0
+603.4 1.1
+614.4 8.3
+615.4 10.8
+620.2 3.5
+647.8 5.5
+656.4 1.7
+662.4 1.6
+664.5 2.0
+665.5 3.7
+666.4 2.4
+676.4 1.1
+681.0 1.7
+682.5 17.2
+683.7 20.7
+685.0 3.7
+686.4 2.0
+697.6 4.5
+699.5 4.5
+700.6 5.3
+701.3 2.0
+704.4 4.8
+705.6 3.5
+711.4 3.4
+715.3 12.1
+716.3 2.2
+735.4 1.5
+736.4 1.7
+744.4 1.3
+749.3 1.3
+753.4 21.5
+754.4 25.1
+755.4 18.8
+761.6 1.3
+772.1 2.4
+776.6 1.8
+815.8 1.2
+816.5 3.0
+820.5 3.0
+823.6 2.5
+824.6 1.7
+832.7 3.4
+841.5 1.6
+842.5 1.8
+850.3 7.0
+851.5 11.1
+852.6 2.0
+858.7 4.1
+859.7 3.4
+860.7 2.4
+861.6 1.5
+928.7 5.1
+S	125	125	805.00
+I	ID	216
+I	RTime	10.6675
+Z	1	805.00
+240.1 1.8
+245.3 1.2
+258.2 1.5
+261.4 1.3
+278.7 1.3
+281.3 1.8
+287.2 1.2
+292.2 3.2
+297.3 1.8
+299.1 1.2
+310.1 0.6
+311.0 3.7
+319.2 2.4
+327.1 5.5
+332.0 2.0
+338.5 1.8
+340.0 2.7
+341.9 1.0
+345.4 2.9
+346.0 2.5
+349.0 1.8
+367.5 3.2
+369.2 2.5
+378.2 1.3
+381.3 7.3
+396.6 1.7
+399.3 2.7
+402.3 9.6
+404.4 2.2
+417.4 8.3
+423.4 5.4
+425.4 3.0
+429.4 4.0
+434.4 1.3
+448.7 0.8
+453.5 5.9
+480.7 2.4
+481.9 5.4
+483.9 6.5
+485.2 1.1
+489.2 1.7
+490.4 1.5
+495.0 2.0
+512.3 5.6
+513.3 1.7
+514.5 1.1
+516.2 4.1
+517.3 4.5
+519.4 4.1
+530.4 4.6
+531.4 2.2
+533.5 3.7
+536.0 4.4
+537.0 3.7
+538.2 2.7
+547.5 3.7
+551.3 6.5
+553.5 2.5
+557.2 1.2
+559.6 7.1
+568.4 3.5
+569.4 4.8
+570.4 1.7
+575.2 2.0
+583.4 3.5
+587.3 2.0
+588.1 3.7
+589.6 4.5
+590.5 28.1
+591.4 3.0
+598.4 3.2
+610.9 7.3
+615.1 1.8
+622.5 2.4
+640.4 2.0
+642.3 3.7
+646.6 14.8
+655.4 6.0
+659.3 1.1
+669.7 1.6
+675.4 3.0
+676.5 1.5
+677.4 9.0
+681.6 5.5
+696.2 11.3
+714.3 3.2
+723.4 20.3
+724.1 14.5
+726.7 11.5
+731.7 21.1
+732.5 5.0
+740.1 1.3
+743.4 1.5
+747.1 1.2
+751.6 8.8
+752.4 1.2
+755.3 3.7
+762.3 3.7
+771.8 5.1
+774.4 2.4
+786.2 5.3
+787.3 45.5
+788.5 8.3
+795.9 4.5
+S	126	126	745.26
+Z	2	1489.51
+217.3 4.3
+230.2 4.4
+233.1 8.2
+234.2 28.5
+235.1 93.9
+242.0 7.5
+243.0 42.2
+245.2 34.0
+246.1 16.3
+249.3 4.9
+250.2 4.2
+253.2 4.8
+256.5 13.4
+259.2 4.1
+260.4 25.9
+261.2 3.4
+262.4 33.7
+263.2 27.2
+264.0 20.2
+267.6 4.9
+270.2 20.2
+271.4 4.2
+272.3 18.0
+275.1 6.2
+276.2 32.8
+280.4 17.0
+281.2 18.4
+282.2 29.2
+284.2 31.1
+285.2 12.9
+286.3 12.7
+288.3 16.3
+289.1 22.8
+292.1 43.4
+300.3 10.6
+302.4 25.2
+303.3 2.6
+304.1 4.2
+312.2 12.2
+315.1 13.9
+316.3 56.7
+317.2 107.9
+318.6 6.3
+326.4 7.3
+327.2 6.9
+329.1 5.3
+330.2 15.8
+338.0 11.7
+344.2 17.4
+349.3 31.6
+352.4 13.7
+354.4 7.7
+356.7 19.9
+357.4 43.4
+358.2 58.8
+363.3 58.5
+364.2 11.3
+367.4 20.0
+373.2 3.5
+374.4 35.8
+375.3 216.4
+376.5 9.9
+379.3 7.9
+381.0 20.4
+382.6 11.6
+385.3 47.8
+387.4 13.4
+389.4 59.9
+390.7 48.1
+391.3 106.5
+392.4 22.8
+393.1 29.4
+395.3 40.3
+396.8 12.8
+399.4 7.7
+401.2 11.2
+402.3 42.2
+403.2 73.6
+404.3 25.2
+407.5 12.3
+412.9 50.1
+416.3 195.4
+421.2 41.0
+422.2 34.0
+423.7 7.4
+425.4 8.2
+426.9 49.5
+427.8 50.3
+430.6 19.8
+431.3 18.9
+432.3 10.8
+438.4 13.4
+444.3 25.9
+445.9 26.4
+453.3 4.8
+456.2 43.1
+457.3 25.9
+459.2 63.5
+461.4 12.2
+470.3 6.6
+473.4 38.0
+474.4 78.9
+476.0 56.8
+477.3 66.0
+479.2 15.7
+482.4 11.8
+484.0 35.1
+486.0 15.3
+487.3 68.7
+488.3 81.2
+489.4 102.3
+490.3 38.6
+491.3 43.2
+492.4 22.4
+497.4 7.2
+498.9 10.1
+500.2 33.5
+501.1 95.4
+502.2 105.6
+504.1 141.8
+505.1 62.9
+506.4 15.5
+508.5 45.5
+509.3 23.2
+511.6 12.8
+512.4 5.1
+515.2 10.3
+523.2 50.0
+524.2 55.3
+525.4 100.3
+527.3 30.4
+530.4 33.5
+532.9 6.0
+533.6 10.1
+534.5 194.7
+538.2 40.2
+540.1 3.4
+542.1 5.2
+544.4 216.8
+545.5 55.9
+548.0 49.2
+548.9 6.0
+550.0 80.8
+551.5 53.0
+552.4 6.6
+553.7 117.1
+554.9 74.3
+555.6 9.1
+556.8 47.3
+558.0 122.9
+559.3 9.7
+563.1 58.0
+565.0 26.4
+567.6 79.0
+570.5 8.9
+572.5 105.1
+573.4 141.0
+574.4 140.6
+575.1 18.8
+576.9 25.9
+578.1 170.6
+580.7 25.8
+584.6 29.0
+586.2 5.1
+587.2 42.8
+588.3 58.5
+590.4 55.0
+591.4 41.1
+592.3 15.7
+594.4 24.5
+596.0 26.7
+597.6 68.1
+599.5 27.8
+600.3 19.8
+601.4 242.3
+602.3 41.7
+603.2 48.2
+605.4 187.4
+606.3 23.0
+607.1 44.7
+608.1 22.6
+609.1 67.3
+611.1 30.2
+612.4 37.9
+614.8 49.2
+616.0 59.6
+618.5 207.2
+619.6 41.6
+620.8 42.6
+622.4 10.3
+624.6 718.7
+626.0 208.7
+627.9 65.0
+628.5 6.6
+630.6 23.5
+631.7 15.4
+634.0 37.4
+634.9 10.9
+636.4 25.1
+637.6 14.1
+638.3 69.1
+639.7 66.3
+642.0 15.5
+644.4 48.7
+645.1 4.6
+646.6 52.5
+647.2 18.8
+648.2 29.5
+651.2 6.2
+652.4 557.9
+653.3 14.9
+654.2 17.5
+655.0 40.8
+656.8 70.9
+657.9 667.2
+658.6 401.0
+659.9 221.2
+660.8 167.8
+661.7 35.4
+663.3 8.2
+664.9 71.3
+666.7 14.0
+668.5 120.1
+669.4 72.9
+671.6 83.6
+672.4 146.8
+673.1 34.7
+674.0 49.2
+675.2 19.3
+676.6 209.2
+677.3 429.2
+679.0 49.8
+679.8 30.0
+681.5 30.4
+682.8 176.7
+683.7 33.5
+684.5 28.5
+686.3 449.7
+687.4 93.5
+688.9 130.1
+690.1 82.4
+691.6 162.2
+693.0 124.8
+693.7 108.4
+694.3 8.9
+695.1 78.2
+696.5 78.8
+697.7 156.4
+698.8 36.9
+699.9 60.7
+701.7 149.6
+702.4 32.4
+704.3 246.0
+705.6 322.2
+706.6 29.9
+707.7 76.6
+708.5 36.1
+709.4 33.7
+710.5 81.8
+711.4 86.7
+712.2 19.7
+714.3 63.1
+715.4 46.6
+716.8 234.9
+718.2 216.6
+719.4 89.3
+720.3 201.6
+722.9 193.8
+723.5 89.4
+724.2 111.6
+725.1 166.5
+726.1 235.7
+727.3 95.5
+728.3 129.2
+728.9 135.7
+730.2 156.6
+731.6 98.7
+732.5 575.2
+733.6 73.9
+734.2 172.3
+735.3 342.8
+736.4 355.4
+737.1 21.6
+746.9 22.7
+751.4 14.4
+752.4 22.9
+754.8 15.6
+756.1 36.8
+757.4 38.5
+758.6 38.1
+760.6 27.1
+761.6 9.6
+762.9 23.0
+764.2 135.7
+765.4 79.0
+766.5 13.2
+768.2 56.2
+769.3 26.7
+770.1 25.0
+771.4 33.2
+772.8 70.1
+773.7 1139.3
+774.6 120.3
+775.5 23.0
+777.3 14.0
+778.6 31.0
+779.9 84.1
+780.9 36.1
+781.6 31.2
+782.5 53.7
+783.3 74.6
+784.4 10.4
+786.5 670.9
+787.5 151.9
+789.9 59.3
+792.3 59.5
+793.3 11.6
+794.5 7.9
+796.3 21.0
+797.0 34.0
+797.7 84.8
+798.4 61.4
+799.6 42.2
+801.0 68.2
+802.3 736.3
+803.1 40.0
+804.1 7.4
+805.4 15.0
+806.7 117.0
+807.6 54.4
+809.2 3072.5
+810.3 261.7
+811.6 168.3
+812.7 76.8
+814.3 99.7
+815.5 201.5
+816.4 382.8
+818.0 173.2
+819.2 176.4
+820.4 158.7
+821.5 71.4
+824.3 90.6
+824.9 11.3
+825.7 75.5
+826.7 30.1
+828.8 63.3
+829.9 100.1
+830.8 104.5
+831.5 22.5
+833.1 115.8
+833.8 151.0
+834.9 230.9
+835.7 63.1
+836.9 33.6
+837.6 120.3
+839.0 14.8
+839.8 14.8
+841.5 1.7
+842.5 3.9
+844.1 12.0
+844.9 32.3
+845.6 24.4
+846.9 14.5
+847.6 51.2
+848.7 67.2
+850.0 55.1
+851.8 42.3
+853.0 84.4
+854.4 165.4
+856.0 89.2
+856.8 30.3
+857.8 10.7
+858.6 31.4
+859.6 41.4
+860.6 102.3
+861.4 25.9
+862.2 57.0
+863.0 76.3
+864.8 85.4
+865.5 187.0
+866.2 396.8
+868.3 25.9
+870.0 40.5
+871.7 439.4
+872.8 117.2
+873.6 61.9
+874.9 68.4
+875.5 31.8
+876.2 109.0
+877.5 39.8
+878.6 23.0
+879.7 201.8
+880.3 26.1
+881.1 9.0
+882.3 77.5
+883.2 83.3
+884.1 85.0
+885.5 210.7
+886.6 15.4
+888.0 23.8
+890.5 161.8
+891.6 125.6
+893.3 141.2
+894.7 137.7
+895.7 663.8
+896.6 232.7
+898.8 212.6
+899.8 312.1
+901.4 25.1
+902.0 29.2
+902.7 20.8
+903.8 73.0
+905.1 106.2
+907.6 72.7
+909.9 24.1
+910.7 21.6
+911.7 66.4
+913.0 127.4
+914.2 15.0
+915.7 32.6
+917.2 23.2
+918.0 33.8
+919.6 45.3
+920.9 155.3
+921.8 379.7
+922.5 913.9
+923.2 845.7
+924.3 91.2
+925.0 110.8
+926.0 39.5
+927.1 159.4
+928.2 90.6
+929.4 149.5
+930.2 35.9
+931.4 39.2
+932.6 162.9
+933.8 19.0
+934.5 36.2
+936.2 182.3
+937.8 47.6
+938.5 59.3
+940.7 83.7
+942.0 71.3
+943.3 54.6
+944.3 66.8
+946.3 230.0
+947.3 16.5
+948.5 137.1
+950.5 15.4
+952.6 225.2
+953.5 212.2
+955.3 59.3
+958.2 91.5
+958.9 44.2
+962.4 69.7
+963.3 15.1
+964.4 24.5
+965.5 62.9
+966.1 67.3
+967.3 8.8
+969.0 111.8
+969.9 23.1
+971.6 119.0
+972.9 11.2
+975.4 32.4
+978.3 674.2
+979.1 79.2
+980.9 26.8
+982.4 58.7
+983.3 9.2
+984.6 18.9
+986.8 2757.4
+987.7 255.6
+988.5 36.9
+991.3 15.3
+992.6 48.9
+994.5 140.0
+995.5 186.7
+996.4 33.5
+998.3 38.1
+1002.1 38.7
+1004.0 111.5
+1005.8 23.0
+1007.1 8.4
+1008.5 34.9
+1009.3 14.3
+1011.7 34.8
+1014.2 40.0
+1014.9 148.6
+1015.6 23.5
+1017.8 34.3
+1018.5 28.5
+1019.5 41.6
+1020.6 9.2
+1023.4 21.5
+1025.6 41.6
+1029.9 28.3
+1031.1 16.2
+1036.1 32.8
+1037.9 17.4
+1038.8 170.1
+1039.6 40.6
+1040.5 36.6
+1041.8 166.8
+1043.0 88.3
+1044.4 18.4
+1045.6 7.1
+1046.7 3.4
+1048.5 68.0
+1049.8 44.7
+1051.0 100.5
+1051.8 47.1
+1054.4 14.9
+1055.7 79.5
+1056.7 52.2
+1057.6 28.2
+1058.7 60.7
+1060.6 55.7
+1061.9 30.7
+1064.2 11.6
+1065.8 9.6
+1066.4 14.3
+1067.6 406.2
+1068.7 327.1
+1069.7 18.3
+1071.6 39.5
+1074.2 115.0
+1074.8 88.5
+1075.9 6.6
+1076.5 25.2
+1077.5 10.4
+1086.4 29.0
+1088.7 52.6
+1089.5 13.6
+1090.9 10.4
+1096.0 52.4
+1096.8 58.5
+1097.7 89.4
+1098.7 32.1
+1104.5 30.1
+1105.5 27.6
+1106.7 65.3
+1110.4 20.1
+1111.6 17.5
+1112.9 65.3
+1113.7 4.8
+1115.6 210.4
+1116.6 122.6
+1117.4 78.8
+1118.0 27.1
+1122.9 3.7
+1124.6 44.7
+1125.8 58.3
+1129.5 29.5
+1131.9 19.3
+1133.5 7.4
+1134.5 6.5
+1140.4 28.3
+1144.7 16.1
+1145.5 9.3
+1148.6 22.3
+1149.8 61.7
+1154.6 252.9
+1155.7 226.2
+1156.5 61.6
+1157.9 88.0
+1159.5 8.4
+1164.4 25.8
+1170.6 8.2
+1172.9 27.8
+1173.6 218.4
+1174.6 47.5
+1175.4 15.3
+1177.1 7.5
+1180.5 13.5
+1187.6 25.5
+1191.7 5.0
+1193.7 32.1
+1200.9 44.0
+1202.0 12.1
+1203.1 27.2
+1203.8 12.7
+1205.6 5.6
+1206.4 13.5
+1209.7 16.7
+1210.4 3.1
+1211.7 23.8
+1212.5 68.8
+1214.1 9.1
+1219.8 5.3
+1225.3 54.8
+1226.0 13.8
+1226.8 7.2
+1228.7 216.5
+1230.2 370.0
+1231.2 129.0
+1232.5 13.0
+1237.7 29.7
+1239.4 115.4
+1240.5 41.5
+1243.7 46.8
+1245.0 36.3
+1253.5 55.8
+1256.1 21.7
+1258.5 8.9
+1263.8 10.6
+1274.2 19.4
+1277.7 23.9
+1279.5 21.9
+1286.8 12.5
+1296.5 19.4
+1298.9 12.0
+1317.8 12.0
+1323.2 38.9
+1326.7 74.8
+1338.8 14.2
+1341.2 35.3
+1341.8 45.4
+1343.0 121.5
+1343.7 353.1
+1344.6 46.6
+1347.8 8.0
+1356.3 18.1
+1358.3 17.4
+1365.2 8.9
+1365.8 17.3
+1401.7 8.6
+1426.9 7.7
+1437.8 26.5
+S	127	127	474.74
+I	ID	75
+I	RTime	3.4728
+Z	2	948.47
+139.2 3.0
+141.2 1.6
+144.3 1.0
+155.2 3.2
+155.8 2.2
+158.2 3.4
+164.2 2.0
+165.1 1.2
+167.2 2.7
+168.1 1.0
+169.2 1.0
+171.2 1.1
+173.1 12.6
+175.2 12.6
+176.1 2.0
+178.2 1.2
+180.3 1.6
+182.1 1.7
+191.3 1.3
+193.3 3.2
+194.5 1.1
+195.2 3.0
+196.3 1.7
+198.1 30.2
+199.2 12.1
+200.1 3.7
+201.1 8.6
+212.1 0.6
+213.0 0.8
+216.1 78.0
+217.2 4.6
+217.9 1.2
+223.2 3.4
+224.3 2.2
+226.1 4.3
+227.2 3.4
+228.1 3.9
+231.2 1.5
+232.6 2.5
+234.4 1.8
+237.9 2.4
+238.7 4.5
+240.5 1.6
+243.2 1.8
+245.0 8.5
+248.2 5.8
+250.4 3.2
+251.2 2.7
+252.3 8.6
+253.3 0.8
+257.3 2.0
+258.4 1.8
+259.1 3.0
+260.2 6.6
+262.3 2.7
+264.9 1.0
+268.0 1.0
+269.1 32.2
+275.3 2.7
+276.2 2.7
+281.4 1.2
+282.2 1.6
+285.4 2.7
+287.2 24.2
+288.2 2.7
+289.5 3.5
+293.4 2.0
+294.1 1.1
+296.5 4.5
+298.2 2.0
+299.0 2.0
+301.9 6.0
+303.2 5.0
+314.3 12.8
+315.3 5.6
+317.1 3.4
+319.1 3.2
+322.6 3.7
+325.3 0.8
+328.3 1.7
+329.2 1.2
+331.3 4.4
+332.9 1.5
+334.8 12.3
+335.9 2.4
+336.8 3.4
+338.7 8.6
+339.6 1.7
+343.2 2.4
+344.2 1.5
+346.1 18.7
+347.3 18.7
+352.5 5.5
+353.2 3.0
+353.9 7.1
+355.0 1.2
+357.2 4.9
+359.2 2.9
+361.2 5.0
+364.5 4.9
+366.7 13.1
+368.5 2.2
+369.6 1.8
+371.3 5.1
+373.1 10.3
+374.9 0.8
+377.6 4.9
+379.2 1.2
+379.8 5.1
+380.4 2.7
+382.1 2.4
+383.1 0.8
+384.5 1.2
+387.0 1.0
+388.0 8.6
+388.7 2.2
+389.3 7.5
+393.0 4.0
+394.1 1.6
+395.5 13.5
+398.2 23.6
+399.2 6.8
+401.3 3.5
+402.4 2.2
+403.8 1.2
+404.4 44.5
+405.4 12.6
+406.5 18.3
+407.5 12.3
+409.3 3.5
+410.2 5.3
+411.5 2.7
+412.8 3.9
+413.9 26.2
+415.3 6.9
+416.2 13.8
+418.4 14.8
+420.2 3.4
+421.3 18.7
+422.0 13.3
+422.7 10.8
+423.4 29.7
+425.3 7.6
+426.2 16.7
+427.0 1.6
+428.0 11.5
+428.6 26.3
+429.9 3.5
+431.6 18.5
+432.5 4.5
+433.4 8.1
+434.2 37.0
+435.4 17.1
+436.2 10.6
+437.6 14.3
+438.4 4.9
+439.6 25.6
+440.4 2.5
+441.3 11.5
+442.1 3.0
+443.1 16.3
+444.0 5.0
+444.7 6.0
+445.6 12.1
+446.6 8.6
+447.7 13.5
+448.6 1.7
+450.3 10.1
+451.8 8.3
+452.9 13.3
+454.0 21.5
+455.0 17.1
+456.4 70.0
+457.3 62.0
+458.1 54.2
+459.1 12.8
+460.5 11.1
+462.5 50.5
+463.2 3.5
+464.3 2.7
+465.6 202.3
+466.4 83.4
+468.4 13.1
+473.3 1.5
+474.7 4.8
+475.4 2.7
+487.6 2.0
+490.4 5.9
+491.3 2.0
+492.3 3.7
+499.2 3.0
+502.4 1.2
+503.9 13.8
+504.8 13.3
+506.4 7.1
+509.5 12.6
+510.4 6.5
+511.7 7.0
+513.0 2.7
+516.4 2.7
+517.2 2.4
+520.3 1.3
+525.5 37.5
+527.1 1.3
+528.2 10.3
+528.8 1.0
+530.5 1.3
+533.3 85.5
+533.9 9.8
+534.5 6.5
+537.0 20.2
+539.3 4.6
+543.4 0.8
+544.1 1.2
+545.3 4.5
+547.4 9.8
+553.5 106.0
+554.2 22.3
+555.4 1.5
+556.7 1.7
+558.5 6.0
+559.2 6.3
+560.3 1.3
+567.4 3.5
+568.1 3.5
+572.9 9.1
+575.6 3.2
+577.5 2.7
+578.9 15.1
+579.6 2.0
+582.3 1.3
+584.4 4.3
+588.9 4.5
+592.2 4.5
+595.9 1.2
+597.2 4.3
+600.3 2.0
+601.2 5.9
+602.0 12.0
+604.0 4.5
+609.4 3.2
+610.0 9.1
+611.1 120.4
+612.0 25.8
+612.7 4.9
+617.4 2.2
+618.6 2.7
+630.0 2.5
+632.1 6.8
+632.7 2.2
+633.5 2.4
+635.4 1.2
+637.6 3.5
+639.1 6.5
+644.0 4.1
+644.7 2.7
+645.4 10.5
+646.2 17.1
+648.4 16.2
+649.2 1.8
+651.3 0.8
+653.2 1.8
+655.3 2.0
+660.3 2.5
+662.3 128.1
+663.4 39.0
+667.5 9.5
+670.3 2.2
+672.6 1.5
+674.0 1.2
+676.5 1.7
+677.5 5.3
+684.5 2.0
+686.3 4.5
+688.5 0.8
+691.4 2.0
+697.2 2.7
+703.8 2.0
+704.4 1.5
+706.3 4.3
+708.3 1.2
+714.2 6.1
+715.4 11.5
+716.5 10.3
+718.6 3.2
+719.6 7.9
+720.3 2.5
+721.4 1.7
+722.2 3.0
+733.4 503.0
+734.3 217.1
+734.9 0.8
+738.3 10.0
+740.3 2.4
+743.6 3.7
+744.3 2.9
+748.9 3.0
+754.4 9.1
+755.7 2.4
+757.2 4.3
+763.1 1.1
+767.2 3.0
+774.6 16.6
+775.6 11.1
+787.4 0.8
+791.5 12.3
+792.2 1.1
+800.5 2.9
+801.4 1.7
+802.6 5.0
+803.5 1.5
+811.6 1.8
+812.6 2.5
+813.3 1.1
+820.8 2.2
+821.4 1.7
+823.8 1.7
+870.4 2.2
+872.2 1.3
+S	128	128	711.07
+I	ID	228
+I	RTime	11.2717
+Z	1	711.07
+230.3 3.2
+253.5 2.0
+259.3 3.2
+260.3 3.7
+265.3 3.0
+276.4 2.0
+279.0 0.8
+291.0 3.0
+293.0 3.2
+331.4 1.0
+347.2 4.9
+353.1 0.8
+362.8 1.7
+369.5 1.3
+376.8 1.1
+380.3 1.2
+395.7 1.2
+411.1 6.0
+413.1 3.5
+416.1 1.8
+424.2 1.3
+428.3 1.8
+442.3 3.5
+443.6 4.9
+458.5 2.7
+464.3 1.7
+468.3 2.9
+485.5 4.5
+496.4 25.1
+497.1 31.2
+503.0 2.5
+511.3 1.5
+515.3 3.5
+519.6 3.0
+536.2 1.2
+547.4 1.7
+565.2 3.0
+567.5 1.7
+575.3 2.0
+581.3 1.5
+582.3 5.9
+583.2 2.2
+593.0 2.9
+595.9 2.5
+605.8 8.3
+611.1 3.2
+613.3 2.0
+615.4 1.8
+630.3 2.2
+632.1 1.2
+639.3 1.6
+646.6 3.0
+650.5 4.0
+656.6 2.2
+658.8 16.0
+662.9 6.1
+665.5 4.4
+666.4 3.0
+668.6 2.4
+674.6 3.0
+676.5 7.5
+677.1 2.7
+678.2 10.5
+683.5 1.1
+692.0 5.6
+693.2 18.8
+694.2 2.7
+695.3 2.7
+698.6 7.0
+701.8 21.6
+702.6 8.6
+810.5 6.1
+821.5 3.2
+822.4 3.0
+1008.4 1.5
+1036.8 2.0
+1046.4 6.0
+S	129	129	523.29
+I	ID	98
+I	RTime	4.6529
+Z	2	1045.57
+161.0 9.8
+162.1 2.2
+163.0 1.7
+169.3 7.6
+175.2 4.0
+178.1 23.5
+180.1 3.5
+186.0 3.4
+195.0 1.2
+196.1 4.1
+203.3 7.0
+207.3 1.7
+208.2 11.3
+214.1 2.5
+223.1 0.8
+226.1 3.0
+227.3 3.4
+229.0 5.6
+231.3 2.5
+232.2 4.0
+234.2 1.8
+235.2 6.3
+238.0 1.5
+239.3 1.6
+240.1 13.1
+241.1 0.8
+243.0 4.0
+244.2 5.8
+248.3 68.6
+249.1 7.0
+254.0 1.3
+255.2 1.0
+258.3 89.1
+263.2 1.6
+266.3 114.9
+267.4 4.3
+272.1 1.2
+273.2 2.5
+275.3 10.8
+280.3 3.7
+282.2 2.7
+283.2 3.5
+285.2 6.1
+287.1 3.2
+290.1 4.6
+291.2 7.3
+292.2 7.8
+297.2 1.1
+298.2 4.4
+299.3 3.5
+300.0 1.0
+300.9 11.8
+306.1 6.0
+307.3 3.0
+308.3 7.0
+309.2 4.3
+311.5 1.7
+313.2 3.2
+319.3 1.2
+320.4 6.0
+322.5 4.0
+325.0 34.2
+325.9 35.7
+326.9 2.2
+334.4 2.2
+335.5 8.1
+336.4 5.0
+337.6 9.3
+342.9 3.5
+343.9 2.9
+346.3 49.5
+348.1 0.8
+354.1 29.2
+355.3 2.5
+357.2 2.0
+357.9 2.2
+359.4 6.0
+362.0 1.5
+363.7 4.1
+364.5 1.0
+367.2 2.0
+368.4 1.1
+371.1 6.6
+372.0 19.3
+373.0 2.0
+376.5 8.8
+377.3 9.8
+378.3 8.3
+385.8 4.5
+387.0 43.5
+391.2 2.9
+392.8 5.0
+393.4 2.0
+394.3 1.0
+395.2 16.5
+396.3 19.7
+400.0 2.0
+401.3 27.1
+406.3 2.0
+407.4 0.8
+408.3 13.6
+409.2 7.0
+410.6 3.0
+415.5 3.7
+416.2 1.3
+417.4 15.1
+418.2 90.5
+418.9 1.3
+420.1 1.0
+423.8 9.8
+427.3 4.0
+432.3 8.6
+436.5 1.8
+441.8 4.5
+447.3 2.5
+449.3 13.0
+452.6 3.2
+454.6 24.2
+455.3 13.3
+458.9 12.1
+459.8 7.6
+461.4 7.0
+463.2 16.5
+466.1 11.3
+467.1 3.9
+470.4 7.6
+473.4 3.4
+474.3 1.3
+476.0 1.6
+477.2 20.7
+478.4 2.0
+479.4 3.5
+480.1 1.6
+481.0 2.7
+485.5 2.7
+487.0 11.1
+487.8 65.3
+489.2 14.0
+490.1 11.1
+491.3 7.1
+492.4 8.6
+493.3 4.6
+494.2 7.5
+496.1 1.6
+499.8 5.1
+501.5 9.0
+504.0 7.3
+505.3 124.6
+506.2 61.5
+507.5 18.5
+508.4 8.3
+511.7 6.8
+513.9 32.2
+514.8 37.4
+554.7 1.1
+556.5 1.5
+562.0 2.0
+577.9 4.4
+596.4 2.7
+614.4 2.0
+656.6 0.8
+670.1 2.7
+671.6 5.9
+674.3 107.3
+675.3 40.0
+685.4 1.0
+710.6 4.8
+711.6 1.6
+713.3 3.2
+715.8 4.1
+717.3 2.7
+719.5 29.5
+720.7 9.6
+745.5 4.3
+746.5 3.2
+751.3 5.0
+762.5 1.2
+770.6 3.2
+772.3 1.2
+787.8 5.4
+789.6 4.1
+796.7 1.7
+808.6 3.5
+817.5 3.2
+855.9 2.7
+870.5 2.2
+897.6 3.4
+899.4 1.2
+900.6 4.0
+907.8 1.5
+910.2 1.5
+918.4 3.4
+1022.5 2.7
+S	130	130	733.03
+Z	2	1465.05
+209.0 100.8
+212.3 14.6
+213.1 16.2
+214.8 11.9
+216.2 150.7
+217.1 3.3
+218.5 34.0
+219.4 4.9
+220.3 128.9
+221.4 47.8
+226.2 849.1
+227.3 348.1
+228.3 23.5
+229.2 48.1
+231.2 5.5
+237.1 12.1
+238.3 600.6
+239.3 83.0
+244.2 2316.2
+245.2 152.8
+246.3 8.4
+247.3 16.3
+248.5 19.4
+249.4 11.0
+250.3 10.7
+251.3 32.7
+255.2 110.0
+256.3 26.5
+258.5 10.0
+260.0 7.0
+261.3 14.0
+262.2 54.6
+263.3 18.2
+264.6 12.0
+265.4 12.6
+266.3 13.0
+268.3 29.1
+269.6 11.9
+270.2 18.7
+271.9 5.6
+273.3 40.8
+274.6 3.0
+276.4 79.8
+279.2 43.4
+280.4 153.9
+281.4 43.6
+282.2 9.7
+284.4 179.5
+285.2 56.5
+286.4 27.3
+288.3 16.8
+290.4 83.5
+291.0 20.0
+292.3 5.9
+293.3 7.0
+294.4 630.3
+295.4 160.6
+296.5 42.5
+297.3 23.3
+298.3 143.6
+299.5 57.3
+301.4 12.3
+302.4 16.1
+304.5 16.1
+305.6 41.1
+307.1 4.5
+308.3 573.8
+309.4 117.0
+310.2 25.2
+312.3 13.9
+313.5 43.6
+314.5 26.0
+315.3 119.1
+316.3 29.8
+317.2 29.5
+322.6 19.8
+323.5 13.1
+324.6 42.8
+325.4 444.1
+326.3 536.0
+327.2 97.1
+328.0 16.1
+330.4 36.9
+331.3 9.3
+332.5 9.7
+339.0 46.2
+341.4 47.8
+343.3 6169.1
+344.3 979.2
+345.3 94.3
+349.2 57.9
+351.1 92.4
+352.4 26.5
+353.5 17.6
+354.4 22.7
+355.4 19.6
+356.3 6.2
+357.4 32.5
+358.4 22.0
+360.3 23.1
+361.1 27.3
+362.7 10.3
+364.3 18.4
+366.1 37.4
+367.2 267.5
+368.2 38.4
+369.4 225.1
+371.5 76.0
+372.3 32.5
+373.6 4.2
+374.3 25.1
+375.7 8.4
+377.4 35.9
+378.8 9.3
+379.4 8.1
+381.0 41.3
+382.3 9.2
+384.3 774.9
+385.4 239.7
+386.3 32.9
+387.2 12.0
+388.5 10.6
+389.3 94.8
+390.1 7.3
+391.5 32.5
+392.8 59.1
+394.1 29.9
+395.6 90.0
+396.3 13.3
+397.2 12.0
+398.7 29.3
+399.5 57.2
+400.3 20.3
+402.4 85.1
+403.3 70.6
+404.3 16.9
+407.5 1021.4
+408.5 184.3
+409.5 43.0
+412.3 440.6
+413.4 260.3
+414.4 55.9
+415.4 23.5
+416.9 15.2
+418.4 10.8
+419.5 8.9
+420.4 19.2
+421.4 90.7
+423.4 16.5
+425.5 10.5
+427.1 45.9
+428.6 59.9
+430.4 1475.5
+431.4 363.8
+432.4 26.1
+433.5 7.5
+434.7 8.5
+436.0 19.8
+437.2 62.8
+438.4 145.0
+439.4 50.2
+442.5 30.8
+443.5 57.8
+444.3 13.2
+445.7 7.1
+446.4 14.7
+447.7 23.6
+449.0 126.2
+450.2 12.6
+451.6 19.3
+452.3 24.6
+453.4 10.3
+455.1 146.0
+456.4 112.3
+457.1 21.6
+457.7 45.7
+458.6 9.1
+464.4 338.6
+465.5 215.1
+466.4 415.3
+467.3 120.8
+468.3 13.6
+469.6 43.2
+470.2 30.8
+471.6 21.6
+473.4 151.4
+474.5 74.2
+475.7 18.3
+476.5 46.3
+479.4 16.2
+480.4 14.6
+481.6 10.2
+483.3 1814.1
+484.3 955.7
+485.5 136.6
+486.4 19.0
+487.5 39.5
+488.9 104.6
+489.6 50.7
+490.7 32.0
+491.6 7.7
+492.4 18.6
+496.7 18.7
+498.3 33.5
+499.3 83.4
+500.3 158.5
+501.5 1573.8
+502.6 267.9
+503.6 84.4
+504.6 38.4
+505.6 43.9
+506.6 89.3
+508.5 18.1
+509.4 18.4
+510.4 6.8
+511.1 38.6
+512.5 9.9
+514.7 77.1
+515.4 148.9
+516.3 105.6
+517.0 12.7
+517.6 29.8
+518.5 26.3
+519.4 19.8
+520.6 738.1
+521.5 246.7
+522.4 98.6
+523.2 49.8
+523.8 11.7
+524.5 11.1
+525.4 4.4
+526.6 20.4
+527.6 6.2
+529.1 26.7
+530.3 72.8
+531.6 16.1
+533.3 38.7
+534.5 34.9
+535.6 17.2
+536.6 75.8
+537.4 67.2
+538.8 103.6
+539.5 90.3
+540.4 17.2
+541.2 30.2
+542.1 13.5
+542.8 29.5
+544.5 110.3
+545.5 65.2
+546.4 55.8
+547.4 27.8
+548.8 40.7
+549.5 107.2
+550.4 53.8
+552.3 78.7
+553.4 37.8
+554.2 7.7
+555.1 35.0
+556.4 284.1
+557.4 105.5
+558.2 52.9
+559.1 38.0
+559.9 133.4
+560.7 14.8
+561.4 27.8
+562.0 10.1
+563.7 90.7
+565.4 51.7
+566.5 19.0
+567.6 16.1
+568.8 71.7
+569.6 332.9
+570.4 104.3
+571.2 11.4
+572.1 42.1
+572.7 84.9
+573.9 61.8
+574.7 22.8
+575.8 60.0
+576.9 45.1
+577.6 341.2
+578.9 132.3
+579.8 64.1
+581.0 104.6
+582.8 43.9
+583.4 10.6
+584.3 48.3
+585.3 72.8
+586.3 54.4
+587.4 81.8
+588.8 39.5
+589.7 108.5
+590.9 14.6
+591.7 18.3
+593.2 37.1
+596.8 194.9
+597.4 1005.7
+598.3 346.8
+599.4 107.9
+601.2 71.6
+602.4 116.5
+604.3 276.3
+605.5 95.5
+606.6 19.6
+607.7 23.5
+609.1 33.8
+610.5 360.1
+611.2 260.5
+612.6 42.3
+614.5 1265.2
+615.4 3528.8
+616.4 916.9
+617.5 292.9
+618.5 113.3
+619.3 199.7
+620.5 23.7
+621.4 52.0
+623.6 99.4
+624.5 44.3
+625.6 35.0
+626.5 362.3
+627.5 18.4
+628.4 51.6
+629.0 48.4
+630.0 75.8
+630.7 4.9
+632.4 5417.1
+633.4 1714.2
+634.5 383.6
+635.5 315.0
+636.3 9.9
+637.4 47.1
+638.9 49.8
+639.6 60.8
+640.8 5.8
+641.4 50.0
+642.3 7.3
+643.2 23.2
+644.6 16.0
+645.7 28.4
+646.6 35.0
+647.4 11.3
+648.6 95.0
+649.7 26.8
+650.7 81.2
+651.5 128.2
+652.6 34.5
+653.3 8.3
+654.0 8.3
+654.8 20.1
+655.6 55.7
+656.9 26.9
+657.6 189.3
+658.6 92.2
+660.0 28.8
+661.2 41.0
+662.8 87.1
+664.3 54.2
+665.5 106.6
+666.4 40.7
+667.7 23.7
+669.3 34.2
+670.3 105.1
+671.4 80.0
+672.1 154.5
+672.8 33.9
+673.9 39.1
+674.9 117.3
+675.6 182.9
+676.4 10.9
+677.5 63.8
+678.2 106.2
+679.1 60.7
+680.3 168.7
+681.3 42.1
+682.2 102.3
+683.1 235.2
+684.2 51.3
+684.8 38.6
+685.8 62.3
+686.6 81.3
+687.4 99.3
+688.4 135.6
+690.5 316.4
+692.0 432.6
+693.0 30.2
+693.8 53.5
+695.8 110.6
+696.7 259.8
+697.7 324.2
+698.6 87.5
+699.7 46.1
+700.6 338.1
+701.5 52.5
+702.4 76.7
+703.9 42.0
+705.0 617.5
+706.3 377.2
+707.2 271.0
+708.5 260.5
+709.6 115.5
+710.9 259.5
+711.9 450.2
+712.9 59.9
+714.0 435.7
+714.8 422.6
+715.4 578.2
+716.1 119.8
+716.8 110.9
+717.7 45.2
+718.6 203.3
+719.7 310.3
+721.1 434.5
+722.5 449.2
+723.4 1615.2
+724.4 267.1
+725.5 11.7
+727.0 13.5
+727.7 14.5
+732.7 30.7
+733.4 32.1
+735.4 56.3
+736.3 15.1
+737.7 35.4
+739.9 12.2
+740.6 57.7
+742.1 21.5
+743.0 91.3
+744.7 128.9
+745.7 46.2
+747.0 136.4
+747.9 83.8
+748.8 83.3
+749.6 385.9
+750.6 40.6
+751.6 22.0
+752.5 15.8
+753.6 226.2
+754.7 117.7
+755.5 156.9
+756.8 26.5
+758.3 7.1
+759.7 37.2
+760.4 28.9
+761.3 94.7
+762.7 29.2
+765.6 467.3
+766.6 183.7
+767.7 32.4
+768.6 27.2
+769.5 70.1
+770.6 186.8
+771.6 170.1
+773.0 22.7
+774.8 12.3
+775.7 36.0
+776.4 48.5
+777.2 131.1
+779.5 20.9
+780.8 68.8
+782.2 36.1
+783.3 45.0
+785.5 37.5
+786.5 7.2
+788.2 7.9
+789.0 25.0
+790.2 62.1
+791.5 58.7
+792.4 5.5
+793.5 64.0
+794.4 34.4
+795.9 99.4
+796.7 38.0
+797.7 49.7
+798.7 7.7
+799.3 37.3
+801.0 26.6
+801.6 89.8
+802.8 81.9
+804.2 19.3
+805.4 23.6
+806.5 112.6
+807.3 297.4
+808.3 25.1
+809.1 108.0
+810.1 459.6
+810.7 271.3
+811.6 47.4
+813.1 68.1
+813.8 92.9
+814.6 23.9
+815.7 590.1
+816.7 7.1
+818.3 119.9
+819.2 46.4
+821.2 30.9
+822.9 77.3
+823.9 164.3
+824.7 118.0
+826.5 100.5
+827.3 16.5
+828.2 9.9
+829.1 90.2
+830.4 139.7
+831.7 12643.5
+832.7 5541.7
+833.7 1168.4
+835.1 25.0
+836.9 91.2
+837.6 12.9
+839.4 40.2
+841.4 48.8
+842.9 1568.1
+843.7 697.2
+844.8 227.0
+845.6 84.5
+846.9 35.4
+847.7 15.5
+848.7 27.4
+849.6 21.1
+850.5 15.5
+851.6 85.5
+852.6 46.0
+853.5 129.2
+854.3 145.7
+855.4 127.5
+856.5 15.7
+857.6 78.9
+858.4 88.4
+859.4 62.4
+861.2 229.6
+862.5 172.0
+863.2 132.4
+863.9 86.5
+865.0 33.3
+866.5 535.0
+867.3 298.4
+868.2 146.4
+869.9 40.0
+870.6 10.2
+872.8 23.4
+873.6 10.4
+875.4 67.6
+876.9 62.3
+877.8 26.2
+878.8 107.1
+879.7 102.9
+880.9 107.9
+881.6 86.4
+882.5 26.2
+883.1 13.4
+884.2 98.8
+886.4 64.3
+887.1 12.0
+887.8 50.2
+889.2 44.1
+890.5 222.7
+891.5 40.1
+893.6 57.6
+895.0 40.2
+897.7 118.1
+898.7 97.1
+900.1 569.6
+901.1 112.5
+902.1 102.9
+903.2 101.5
+903.8 21.2
+904.6 47.5
+906.1 110.9
+907.6 15.6
+908.7 82.1
+909.6 94.1
+910.6 79.0
+911.7 34.1
+912.6 44.1
+914.0 25.6
+914.7 48.4
+915.8 145.8
+916.7 27.9
+917.8 59.2
+918.6 105.0
+919.3 422.8
+920.5 30.4
+921.3 229.3
+922.3 33.2
+923.1 34.7
+924.1 86.2
+924.9 34.9
+925.7 129.2
+926.6 286.0
+927.4 101.4
+928.6 860.2
+929.5 75.3
+930.2 43.8
+931.6 16.7
+932.7 99.0
+933.8 21.5
+934.7 12.7
+935.7 34.2
+936.8 33.1
+938.1 34.5
+938.8 78.5
+939.7 50.7
+940.5 42.2
+941.3 56.8
+942.0 37.3
+943.0 52.1
+943.7 446.3
+944.7 334.7
+945.8 91.0
+946.8 103.0
+948.7 17.6
+949.5 43.6
+950.2 26.2
+952.7 54.7
+953.7 33.0
+954.8 65.4
+955.6 84.9
+956.8 35.3
+957.6 10.6
+959.0 75.2
+959.7 37.8
+962.8 6854.3
+963.8 3924.9
+964.8 721.4
+965.9 52.3
+967.4 96.3
+968.5 66.8
+969.8 34.8
+970.5 77.0
+971.2 28.1
+972.5 14.9
+974.6 138.4
+975.9 387.8
+976.8 281.0
+978.0 129.4
+979.1 55.1
+979.9 75.0
+981.3 47.2
+982.1 77.6
+982.8 105.7
+983.8 68.3
+985.0 55.0
+985.7 165.1
+986.5 63.6
+987.5 17.9
+988.3 18.7
+989.8 95.6
+990.7 71.3
+991.6 26.9
+992.5 35.3
+993.9 10.5
+995.2 45.4
+996.4 143.8
+997.7 59.6
+998.7 15.7
+999.6 127.8
+1000.8 27.2
+1001.9 35.0
+1002.8 50.8
+1003.5 95.4
+1004.8 45.8
+1005.5 64.9
+1006.4 18.6
+1007.6 32.8
+1008.9 97.6
+1010.0 37.1
+1010.6 19.0
+1012.1 749.2
+1012.9 99.8
+1013.6 143.7
+1014.9 53.8
+1015.7 78.3
+1016.7 82.3
+1017.3 6.0
+1018.6 68.2
+1019.6 24.1
+1020.8 29.9
+1021.7 87.8
+1022.6 72.1
+1024.3 149.5
+1025.1 223.0
+1025.8 103.3
+1026.6 69.3
+1027.8 10.7
+1028.8 25.2
+1029.9 78.2
+1031.0 32.4
+1032.0 52.7
+1033.8 3610.7
+1034.8 1701.2
+1036.0 499.1
+1036.9 4.1
+1038.7 165.0
+1039.6 246.2
+1040.8 85.8
+1041.8 37.3
+1042.8 6.3
+1044.9 17.7
+1045.7 17.1
+1047.0 54.4
+1047.8 21.5
+1048.7 38.6
+1049.6 31.1
+1051.3 72.7
+1052.3 48.9
+1053.2 36.1
+1055.1 13.6
+1056.7 878.8
+1057.7 627.0
+1059.0 112.5
+1059.8 11.0
+1062.6 7.2
+1063.6 14.2
+1066.0 13.9
+1066.8 55.2
+1068.0 15.3
+1069.4 35.4
+1070.8 19.6
+1072.7 37.8
+1074.0 44.8
+1074.8 87.2
+1075.7 25.1
+1076.7 44.1
+1077.7 26.7
+1079.9 10.8
+1083.8 12.0
+1084.6 23.8
+1087.5 58.8
+1088.9 24.7
+1090.1 37.6
+1090.7 33.5
+1093.6 6.3
+1096.4 40.4
+1099.8 22.4
+1100.7 12.3
+1102.8 314.1
+1104.2 89.2
+1105.1 21.9
+1106.6 7.3
+1107.3 22.2
+1108.3 5.0
+1109.4 17.8
+1111.0 27.1
+1111.8 13.5
+1112.7 20.6
+1114.6 43.8
+1117.0 33.8
+1117.9 173.5
+1118.9 35.0
+1120.8 12792.7
+1121.8 7720.7
+1122.8 2384.0
+1123.8 72.4
+1124.8 52.7
+1128.9 18.3
+1132.6 28.6
+1133.3 11.9
+1134.7 32.0
+1136.0 55.9
+1136.9 68.1
+1137.7 13.9
+1138.8 36.9
+1139.8 5.0
+1141.6 9.3
+1143.0 12.3
+1143.7 23.6
+1146.5 38.9
+1147.4 16.3
+1151.8 170.9
+1152.6 195.0
+1153.7 270.6
+1154.8 55.2
+1155.9 13.5
+1156.9 13.1
+1157.7 12.2
+1160.6 6.5
+1164.8 60.5
+1165.7 13.3
+1169.6 1039.6
+1170.7 524.7
+1171.9 133.6
+1174.8 39.3
+1175.8 23.4
+1176.7 13.3
+1177.8 21.0
+1178.7 26.1
+1181.8 7.4
+1184.9 41.8
+1186.8 13.3
+1188.1 8.8
+1190.2 18.8
+1190.8 14.5
+1192.6 9.2
+1194.0 15.0
+1194.6 39.0
+1196.3 21.9
+1197.7 4.5
+1199.8 21.9
+1201.7 201.6
+1202.9 81.3
+1204.1 73.1
+1213.9 33.5
+1216.1 10.3
+1219.9 6029.1
+1220.9 3463.3
+1221.8 1142.9
+1222.6 44.1
+1223.3 16.6
+1231.3 21.2
+1232.8 8.1
+1234.2 24.6
+1235.9 75.0
+1236.9 126.8
+1238.0 33.1
+1238.9 20.5
+1242.7 42.0
+1243.8 11.0
+1246.7 4.1
+1248.0 6.9
+1250.0 10.6
+1251.7 38.6
+1258.8 25.8
+1260.7 26.7
+1262.6 5.7
+1269.8 111.2
+1271.8 51.7
+1274.9 19.2
+1278.5 5.4
+1281.9 15.0
+1283.1 29.8
+1287.8 26.2
+1288.7 25.4
+1289.6 77.0
+1292.8 11.5
+1293.8 31.6
+1294.5 8.0
+1295.7 11.3
+1298.8 146.2
+1299.8 285.0
+1300.9 191.1
+1301.9 43.3
+1305.1 16.3
+1306.1 17.8
+1310.5 20.6
+1311.8 9.7
+1315.6 28.9
+1316.8 897.2
+1317.9 482.3
+1318.8 123.3
+1319.5 21.7
+1326.0 6.7
+1342.9 136.6
+1343.7 41.1
+1345.1 30.3
+1356.8 18.5
+1359.0 25.7
+1363.6 8.4
+1374.0 15.9
+1383.9 6.3
+1392.6 59.8
+1404.7 14.0
+1414.0 42.8
+1419.8 24.9
+1426.2 5.4
+1438.0 10.7
+1439.0 5.2
+S	131	131	745.85
+Z	2	1490.69
+216.8 31.2
+227.9 4.4
+234.0 116.5
+235.2 75.5
+236.3 10.6
+238.1 14.0
+242.0 13.7
+243.3 32.5
+244.3 45.8
+245.2 22.7
+246.5 36.0
+247.3 51.5
+254.4 9.4
+259.3 69.5
+260.2 209.0
+262.1 252.0
+263.0 62.3
+264.3 3.0
+270.3 40.8
+272.2 17.2
+273.2 5.9
+274.1 31.4
+275.4 49.7
+277.3 14.6
+281.3 7.5
+282.4 5.0
+283.1 33.6
+284.2 19.0
+286.4 8.2
+288.1 4.9
+289.4 8.2
+290.1 3.7
+297.2 28.6
+298.1 75.0
+304.3 67.1
+310.0 15.6
+314.1 19.3
+316.2 222.8
+317.2 323.7
+318.3 113.3
+322.3 21.9
+326.3 8.6
+327.3 20.6
+331.4 30.3
+334.1 18.7
+336.9 21.2
+340.2 25.0
+341.4 28.2
+346.1 7.7
+347.2 7.8
+353.4 5.1
+354.2 4.1
+357.4 134.8
+358.3 98.4
+359.2 10.7
+361.6 2.7
+367.1 8.7
+368.1 11.3
+375.3 962.8
+376.3 146.4
+377.2 30.9
+378.2 24.3
+380.3 64.9
+383.3 28.8
+384.0 94.0
+385.3 19.3
+386.7 22.6
+389.4 45.1
+390.7 9.8
+391.4 21.0
+393.3 28.4
+396.6 7.0
+398.1 22.3
+401.3 10.0
+402.3 6.9
+403.2 153.2
+404.3 39.3
+407.3 14.5
+410.1 9.7
+411.5 7.9
+413.5 23.2
+416.4 667.6
+417.4 132.1
+418.4 39.1
+421.3 206.4
+422.4 68.8
+423.2 9.9
+425.1 5.9
+427.3 53.1
+434.7 6.9
+437.1 3.7
+441.3 32.0
+444.5 4.2
+445.6 17.7
+446.3 25.2
+447.1 3.7
+448.4 4.0
+452.1 13.5
+456.2 56.2
+457.3 101.8
+458.4 56.0
+459.2 23.6
+460.5 17.2
+462.7 45.6
+468.4 11.4
+470.3 12.7
+471.9 31.4
+473.2 33.3
+474.4 253.3
+475.6 53.6
+476.3 27.3
+477.2 70.0
+477.9 28.8
+480.1 11.1
+482.1 39.6
+482.7 18.7
+487.1 91.8
+488.4 11.6
+489.4 11.5
+499.2 26.7
+500.2 25.6
+503.7 97.5
+504.3 293.8
+505.3 85.1
+507.2 14.0
+508.5 16.8
+511.5 9.0
+512.2 17.3
+513.0 9.1
+515.2 23.1
+519.7 126.8
+523.3 32.5
+524.8 9.8
+526.5 84.6
+527.5 163.7
+528.6 27.8
+529.4 42.4
+530.2 14.0
+531.3 14.9
+534.7 452.3
+535.9 132.3
+536.6 4.1
+537.4 30.5
+538.1 27.4
+538.9 24.9
+540.4 37.6
+541.4 27.9
+542.5 65.1
+544.4 922.2
+545.5 432.9
+546.6 49.3
+548.4 19.3
+549.2 26.3
+550.5 18.7
+551.2 97.1
+551.8 18.2
+554.1 63.4
+555.0 89.8
+556.1 95.5
+557.4 119.8
+558.4 26.9
+559.4 18.4
+560.3 34.2
+561.5 76.7
+563.1 78.4
+564.5 29.7
+566.0 4.9
+566.6 6.2
+568.5 52.8
+569.5 62.2
+570.4 23.6
+571.3 13.5
+572.3 28.8
+573.1 19.6
+573.8 17.6
+576.5 10.3
+578.1 450.4
+579.0 103.8
+580.4 54.4
+581.3 18.0
+582.2 26.8
+583.2 28.1
+585.6 23.8
+587.3 83.2
+588.2 27.0
+589.4 53.8
+590.5 29.7
+593.6 29.9
+594.4 25.3
+596.4 4.7
+597.5 53.8
+599.1 42.3
+599.9 18.2
+602.3 5.9
+604.0 64.6
+605.3 347.6
+606.4 428.2
+607.3 11.2
+608.4 15.2
+610.9 65.7
+612.5 59.0
+613.3 21.3
+614.0 122.8
+614.9 138.0
+615.7 183.0
+617.2 104.8
+618.3 82.9
+618.9 31.0
+621.5 7.2
+623.4 106.9
+624.5 65.6
+626.5 242.3
+627.8 218.2
+628.7 56.6
+629.8 60.0
+631.4 40.2
+632.5 54.3
+634.2 18.7
+637.5 14.9
+638.5 28.9
+639.5 31.6
+641.6 15.5
+644.5 293.4
+645.6 47.1
+646.5 18.7
+647.3 9.1
+648.1 70.8
+649.2 110.7
+651.1 84.9
+653.0 66.1
+655.0 20.9
+657.4 1309.5
+658.5 547.5
+659.7 101.1
+661.3 31.5
+662.9 19.3
+663.6 42.3
+664.3 36.1
+667.8 19.1
+669.3 280.3
+670.4 53.6
+671.7 99.6
+672.5 174.8
+673.9 46.1
+674.7 61.1
+675.5 13.8
+676.4 159.2
+678.4 58.7
+679.7 95.4
+680.4 57.6
+681.9 70.6
+683.3 50.8
+684.4 21.1
+686.3 769.2
+687.4 420.7
+688.4 255.2
+690.9 32.4
+691.9 23.1
+693.6 66.7
+694.9 63.3
+695.5 8.1
+696.9 89.9
+698.3 64.1
+699.6 171.5
+700.5 82.7
+701.5 179.7
+703.8 335.9
+704.4 1071.8
+705.4 343.9
+706.5 204.4
+707.2 26.3
+708.6 21.2
+709.7 155.0
+710.5 224.4
+711.3 106.4
+713.9 61.0
+715.2 2.0
+716.3 55.1
+717.5 58.4
+718.8 466.0
+719.7 179.8
+721.0 124.9
+721.7 80.9
+723.3 117.3
+724.6 218.9
+725.4 43.4
+727.4 422.7
+728.6 325.0
+729.6 85.0
+730.4 83.0
+731.8 254.7
+733.3 189.7
+734.1 50.8
+735.8 545.1
+736.7 1432.5
+737.8 56.0
+738.5 11.4
+748.6 8.6
+752.4 23.9
+754.5 92.8
+755.6 31.9
+756.5 24.5
+759.3 24.5
+760.7 9.0
+762.0 102.3
+763.8 121.6
+764.8 82.7
+766.0 105.5
+766.7 18.4
+768.5 39.9
+769.5 202.3
+770.8 30.9
+771.6 36.8
+772.6 227.2
+773.6 337.2
+774.5 36.3
+775.6 55.7
+776.7 3.9
+778.0 10.4
+779.7 65.6
+780.5 5.7
+781.9 52.6
+783.4 39.7
+784.3 35.7
+786.5 2462.5
+787.6 646.0
+788.7 95.2
+790.6 19.9
+791.5 21.2
+793.9 110.5
+794.9 23.5
+796.1 47.9
+797.1 99.2
+798.2 115.6
+799.1 142.0
+800.2 70.8
+801.4 187.7
+802.4 153.4
+803.5 130.3
+804.3 18.0
+805.1 10.5
+806.2 5.8
+807.6 30.6
+809.0 354.8
+809.8 153.1
+810.9 68.2
+813.2 53.6
+814.7 6.3
+815.3 251.1
+816.4 490.8
+817.4 113.2
+818.6 93.8
+819.3 51.8
+820.4 48.0
+821.2 55.4
+821.9 39.2
+823.7 60.1
+824.5 120.5
+825.2 60.4
+826.4 86.5
+827.6 160.8
+829.2 156.4
+829.9 155.9
+830.7 9.5
+831.5 66.6
+832.4 65.6
+833.5 857.7
+834.7 293.4
+835.6 86.4
+836.5 83.4
+838.0 104.7
+839.6 50.1
+840.7 9.7
+841.6 8.9
+843.5 173.3
+844.5 166.4
+845.6 64.3
+846.6 57.1
+849.3 71.7
+850.2 96.9
+851.2 17.3
+852.2 133.7
+853.2 32.7
+854.4 61.2
+855.1 30.3
+857.5 40.5
+858.7 129.5
+860.2 43.8
+861.0 40.4
+861.7 43.3
+863.0 93.3
+864.4 55.7
+865.1 50.7
+866.4 23.1
+867.5 62.7
+868.6 25.3
+870.5 141.9
+871.6 179.8
+872.6 111.5
+873.3 3.0
+874.1 366.3
+875.5 127.1
+876.8 30.0
+879.2 7.8
+880.5 57.2
+881.3 23.5
+882.0 13.0
+882.6 87.1
+883.5 140.5
+885.6 583.3
+886.4 336.4
+887.6 118.6
+890.4 48.0
+893.8 6.0
+895.0 73.8
+896.3 13.6
+897.2 139.9
+898.6 120.9
+899.4 251.4
+900.6 142.8
+901.2 124.6
+902.0 71.8
+903.0 94.3
+904.6 75.3
+908.0 138.8
+908.7 96.1
+910.0 39.7
+910.9 17.8
+911.5 74.2
+912.5 4.4
+913.7 77.4
+914.5 54.8
+915.2 81.4
+916.1 99.2
+917.8 58.2
+918.7 273.1
+920.8 5.6
+921.6 107.9
+922.8 194.0
+923.6 69.8
+924.5 31.5
+925.6 122.9
+926.8 45.1
+928.4 450.0
+929.6 726.3
+930.6 166.1
+931.3 71.5
+932.0 112.8
+933.0 155.5
+934.0 46.2
+934.8 30.2
+936.8 12.5
+937.8 55.3
+938.6 123.2
+939.4 170.6
+940.4 42.6
+941.2 37.0
+942.2 57.8
+943.5 149.7
+944.5 86.7
+946.4 837.0
+947.5 231.8
+948.5 76.3
+949.6 65.3
+950.4 40.2
+953.6 170.0
+954.6 38.7
+955.5 69.3
+957.9 51.6
+959.6 21.3
+960.9 23.6
+961.6 35.5
+963.6 17.3
+964.9 8.3
+965.9 20.3
+967.7 41.4
+968.6 26.5
+969.4 68.7
+970.5 49.8
+972.1 55.9
+972.9 58.6
+973.7 21.5
+975.0 59.5
+975.8 47.9
+976.5 21.3
+978.4 37.6
+979.0 29.9
+980.3 10.8
+981.8 97.7
+982.8 12.8
+985.8 70.9
+986.7 1276.8
+987.8 666.2
+988.7 69.1
+990.0 216.5
+990.7 21.0
+994.9 80.0
+995.9 54.0
+996.7 96.9
+997.4 103.0
+998.1 27.8
+999.2 24.3
+1002.8 41.4
+1004.7 54.3
+1006.6 24.2
+1007.5 11.3
+1008.3 30.2
+1009.9 43.6
+1010.6 17.7
+1011.8 56.8
+1012.6 111.3
+1014.4 114.1
+1015.4 38.9
+1016.5 26.2
+1017.7 21.7
+1018.4 24.6
+1020.3 65.8
+1021.7 9.0
+1022.4 50.2
+1023.0 46.3
+1024.7 21.0
+1025.6 76.8
+1029.0 54.5
+1029.9 23.7
+1031.5 13.5
+1032.6 56.3
+1035.7 24.6
+1036.8 45.1
+1039.1 146.0
+1040.9 49.3
+1041.7 24.0
+1044.6 104.1
+1045.5 113.0
+1046.5 19.2
+1051.6 32.9
+1052.5 74.4
+1053.5 52.9
+1056.2 160.5
+1057.3 69.0
+1058.0 40.7
+1058.7 52.2
+1061.1 34.2
+1062.3 48.2
+1064.0 33.7
+1065.5 15.4
+1067.5 1236.8
+1068.6 1224.1
+1069.7 254.0
+1070.7 137.5
+1071.9 57.1
+1072.8 6.0
+1074.3 604.8
+1075.4 379.1
+1076.8 41.2
+1077.5 38.6
+1079.3 33.8
+1083.3 5.7
+1083.9 6.9
+1085.0 10.4
+1086.9 20.5
+1088.5 66.5
+1089.4 26.3
+1090.8 5.8
+1095.6 164.4
+1096.6 38.0
+1097.6 172.7
+1098.5 171.5
+1099.2 36.5
+1100.0 17.0
+1103.7 11.2
+1104.8 63.1
+1106.7 45.4
+1107.6 42.7
+1108.4 56.4
+1113.0 10.9
+1113.6 129.9
+1114.8 319.2
+1115.6 1024.3
+1116.8 516.0
+1117.7 81.6
+1122.6 14.6
+1128.7 68.6
+1129.8 3.2
+1131.0 11.2
+1134.4 9.8
+1139.1 14.3
+1143.6 8.4
+1144.7 56.0
+1146.2 65.1
+1147.3 11.6
+1148.1 20.9
+1150.3 12.7
+1151.2 16.7
+1154.7 632.4
+1155.7 698.5
+1156.7 164.9
+1157.6 184.4
+1160.5 14.3
+1171.4 12.8
+1172.2 12.1
+1173.5 1079.2
+1174.5 818.2
+1175.5 85.3
+1176.6 17.6
+1178.8 4.4
+1180.5 44.8
+1181.8 47.6
+1182.7 27.7
+1183.7 9.2
+1185.8 17.6
+1186.4 46.7
+1187.6 34.8
+1193.2 74.3
+1195.2 34.2
+1202.3 42.2
+1204.2 40.7
+1206.7 9.2
+1210.7 165.4
+1212.0 82.5
+1213.0 63.5
+1213.6 58.0
+1214.6 79.1
+1215.6 35.6
+1218.0 23.5
+1220.9 75.0
+1222.8 19.4
+1223.8 22.8
+1224.7 62.6
+1225.7 55.8
+1227.5 32.7
+1228.7 976.8
+1229.7 686.1
+1230.6 832.3
+1231.5 567.0
+1232.4 26.3
+1234.0 17.2
+1234.6 21.2
+1236.1 14.2
+1242.9 69.6
+1243.9 75.5
+1244.8 12.0
+1245.6 8.0
+1254.0 46.7
+1254.8 71.1
+1256.1 19.8
+1261.5 9.7
+1269.9 41.4
+1289.3 21.0
+1291.8 25.1
+1294.1 8.7
+1298.2 4.1
+1308.2 20.6
+1309.1 56.3
+1313.9 15.6
+1315.6 16.3
+1316.5 52.0
+1320.4 10.2
+1322.3 29.2
+1323.7 346.1
+1324.4 68.2
+1325.6 134.0
+1326.4 105.3
+1327.0 16.6
+1327.7 23.1
+1339.7 36.9
+1340.9 46.6
+1341.7 196.0
+1342.7 135.3
+1343.6 970.0
+1344.6 745.2
+1345.6 121.4
+1353.0 2.3
+1367.7 39.0
+1372.8 25.2
+1385.6 9.7
+1467.8 9.4
+S	132	132	474.74
+I	ID	86
+I	RTime	4.0244
+Z	2	948.47
+139.1 2.7
+141.0 1.7
+147.2 2.4
+158.0 2.7
+161.1 8.6
+162.3 1.7
+166.3 1.2
+170.0 2.7
+170.9 1.8
+175.2 21.1
+176.0 0.8
+183.1 2.4
+185.0 2.9
+186.2 2.7
+188.0 1.3
+189.3 2.5
+197.9 4.0
+199.0 5.4
+213.2 0.8
+214.0 1.7
+216.2 33.2
+217.1 6.4
+218.1 3.2
+221.2 1.2
+222.1 0.6
+225.2 1.3
+229.2 1.2
+231.2 1.8
+234.1 1.2
+237.3 4.5
+238.0 1.2
+240.1 7.6
+242.4 1.7
+243.4 1.8
+244.3 3.9
+245.3 10.1
+246.2 2.4
+248.1 5.8
+254.2 2.0
+257.5 1.2
+258.2 5.9
+259.2 1.6
+260.1 1.0
+261.3 2.9
+262.0 1.7
+269.1 7.0
+270.1 10.5
+271.1 3.2
+272.2 24.8
+273.0 2.0
+275.4 7.6
+276.3 4.6
+278.3 6.8
+279.2 7.3
+279.9 1.8
+282.3 1.3
+283.1 3.7
+286.9 4.0
+287.5 3.9
+288.2 2.0
+289.1 15.6
+294.1 5.0
+295.2 3.0
+300.0 3.0
+301.2 1.3
+302.3 4.5
+303.3 3.0
+306.1 1.2
+310.0 2.0
+311.3 9.8
+312.2 2.2
+315.3 2.4
+317.3 8.3
+318.4 1.5
+319.2 6.8
+322.4 2.0
+323.1 2.0
+323.9 1.2
+325.0 5.0
+326.3 3.7
+328.2 5.6
+329.2 21.5
+336.3 1.3
+337.5 1.2
+338.1 2.0
+339.0 2.2
+341.5 1.3
+343.4 8.6
+344.6 5.4
+346.2 26.0
+347.1 38.5
+351.2 1.7
+352.1 3.9
+360.2 48.2
+361.1 3.9
+362.1 1.7
+368.3 3.0
+369.3 2.7
+373.2 2.7
+374.1 6.5
+376.3 8.3
+378.4 1.1
+380.7 2.5
+382.4 1.5
+383.1 4.1
+384.1 3.2
+386.0 1.7
+387.1 14.5
+389.3 5.8
+390.2 1.2
+395.3 26.7
+396.4 8.3
+397.0 1.2
+398.1 2.2
+400.2 13.6
+401.5 2.0
+404.3 9.8
+406.1 30.5
+407.3 18.5
+410.3 21.6
+414.1 12.3
+415.2 17.7
+416.3 13.6
+417.3 1.7
+420.3 2.7
+421.6 11.6
+422.6 37.0
+423.5 8.8
+428.2 29.3
+429.0 7.5
+430.3 13.8
+431.2 18.8
+432.1 3.9
+433.1 4.5
+434.5 3.2
+435.3 17.8
+438.3 7.0
+439.5 39.0
+440.3 30.5
+441.4 3.2
+442.3 2.2
+443.3 2.7
+445.2 0.8
+446.3 10.3
+456.3 77.5
+457.3 190.8
+458.3 71.5
+459.4 8.8
+462.2 3.0
+465.4 68.8
+466.4 57.2
+492.2 1.7
+500.3 4.5
+511.5 1.6
+514.2 1.3
+527.3 4.0
+528.6 2.9
+533.3 24.8
+546.6 2.4
+547.3 1.1
+556.4 5.8
+568.3 2.4
+569.3 2.5
+588.1 3.7
+595.2 2.5
+613.4 2.2
+630.2 4.0
+644.4 1.0
+646.1 2.9
+647.4 5.0
+648.2 3.5
+648.9 1.8
+658.4 7.4
+659.3 1.3
+662.2 57.0
+663.4 12.0
+674.5 1.7
+684.5 2.0
+689.2 1.3
+702.4 1.5
+730.1 3.0
+733.3 164.8
+734.5 74.0
+772.5 1.2
+774.4 4.3
+775.5 2.4
+787.4 1.5
+793.5 2.7
+799.5 1.6
+811.3 4.6
+843.3 1.7
+S	133	133	483.12
+I	ID	139
+I	RTime	6.7592
+Z	2	965.23
+164.2 1.2
+166.9 0.8
+175.3 1.1
+176.9 2.5
+184.2 1.2
+184.8 4.0
+195.0 0.8
+198.5 1.6
+209.4 1.7
+216.3 3.9
+218.0 2.2
+229.2 1.7
+260.0 1.6
+267.3 0.6
+269.0 8.1
+272.2 5.5
+280.5 1.7
+282.4 2.5
+283.5 2.2
+285.1 1.0
+287.1 2.0
+290.3 6.5
+299.2 3.0
+311.0 3.2
+312.9 4.3
+317.4 3.5
+321.2 1.3
+322.2 2.5
+336.2 6.8
+351.6 4.0
+354.2 4.6
+359.3 2.9
+361.3 2.0
+368.5 1.7
+372.0 2.5
+385.3 1.2
+396.2 7.6
+396.9 5.1
+404.4 5.6
+405.2 6.0
+416.3 2.9
+417.3 1.0
+418.1 1.5
+419.1 13.5
+422.4 1.0
+425.6 2.7
+429.7 16.2
+430.7 5.3
+438.6 15.6
+440.1 3.5
+442.5 2.0
+447.2 9.3
+448.2 3.7
+452.1 1.7
+453.5 1.3
+455.5 7.0
+464.2 12.5
+465.5 23.5
+466.2 4.6
+473.5 39.7
+474.3 21.7
+500.4 1.5
+534.4 1.7
+547.2 1.5
+548.0 0.8
+574.4 1.2
+576.4 6.3
+596.5 1.2
+603.1 2.7
+606.4 1.1
+624.5 1.6
+633.5 1.8
+647.2 3.2
+648.0 2.2
+654.5 3.2
+663.3 4.5
+676.0 1.2
+676.9 3.0
+677.6 6.0
+678.4 2.2
+725.5 1.5
+730.7 1.2
+747.5 19.1
+748.3 43.0
+749.5 22.2
+750.5 9.3
+771.4 2.0
+815.3 2.4
+836.5 2.2
+S	134	134	457.55
+I	ID	76
+I	RTime	3.5138
+Z	2	914.09
+129.1 1.7
+130.2 1.2
+143.3 0.8
+156.9 1.1
+158.0 2.0
+161.2 1.3
+175.3 7.6
+186.1 1.8
+191.3 1.7
+194.9 1.1
+197.0 1.1
+199.1 0.8
+201.0 2.5
+204.9 2.2
+212.1 10.8
+213.0 3.7
+217.2 2.9
+218.1 2.2
+220.1 3.9
+227.4 1.5
+228.1 2.2
+231.3 7.1
+232.5 2.0
+239.0 1.2
+240.1 3.2
+241.0 1.8
+245.3 6.3
+246.2 5.4
+248.4 2.0
+249.4 4.0
+251.1 7.4
+253.3 2.2
+254.2 4.4
+255.2 5.8
+263.3 3.0
+267.2 1.6
+269.9 1.2
+271.5 1.6
+272.2 11.6
+274.2 1.3
+280.1 3.2
+282.4 3.4
+283.1 2.0
+284.6 10.6
+287.7 4.1
+289.5 4.6
+290.3 2.9
+294.1 1.5
+296.2 1.5
+297.3 2.7
+298.2 2.5
+299.1 3.4
+302.3 1.5
+311.0 2.4
+312.2 5.4
+313.3 2.9
+314.5 6.4
+318.4 1.5
+322.5 4.6
+323.3 1.5
+325.3 8.6
+326.3 0.6
+328.2 0.8
+329.2 24.3
+330.0 1.7
+336.9 2.5
+338.1 2.2
+339.2 4.5
+342.8 9.0
+344.5 2.7
+349.2 5.0
+350.2 1.2
+350.9 0.8
+353.3 5.4
+355.2 1.8
+357.7 8.0
+359.3 8.3
+360.2 6.5
+361.1 4.5
+362.1 2.5
+364.4 2.5
+365.4 1.3
+367.1 5.3
+369.6 3.0
+372.1 17.0
+373.1 10.1
+376.4 12.1
+380.1 2.4
+381.2 2.4
+382.7 13.0
+383.3 5.1
+384.3 5.0
+386.3 2.2
+387.2 1.1
+388.1 5.6
+393.1 1.8
+393.9 4.9
+395.2 2.5
+396.3 1.3
+398.2 1.7
+401.5 6.5
+403.3 4.0
+404.6 20.2
+405.4 6.0
+407.4 2.5
+408.2 18.8
+408.8 12.5
+410.6 5.1
+411.6 2.2
+412.7 16.3
+414.1 6.5
+415.4 2.7
+416.7 19.3
+418.2 5.3
+419.1 11.3
+420.5 17.6
+421.2 9.1
+422.6 190.8
+423.4 15.6
+424.5 5.8
+425.5 8.6
+426.8 7.5
+427.9 2.5
+429.2 18.1
+430.2 20.3
+430.9 95.3
+431.8 1.1
+432.4 4.5
+435.4 5.6
+436.6 5.5
+437.4 3.0
+439.2 41.5
+440.4 51.9
+441.3 6.9
+442.0 14.0
+443.7 13.8
+444.3 2.2
+445.8 31.3
+446.8 6.8
+448.1 33.9
+449.1 90.0
+449.9 17.3
+452.0 5.0
+455.7 8.3
+464.9 2.9
+472.5 13.8
+473.2 3.0
+476.4 4.6
+491.0 2.7
+493.5 1.7
+499.3 4.1
+500.1 16.0
+504.5 14.1
+508.0 7.0
+509.2 1.7
+515.4 15.1
+527.5 1.7
+529.5 3.2
+543.0 4.8
+544.9 4.8
+549.5 1.2
+554.0 3.0
+556.5 2.2
+559.1 29.2
+567.7 10.8
+570.2 6.3
+573.9 3.7
+575.0 3.5
+578.5 6.3
+579.5 1.0
+584.4 10.3
+588.8 9.0
+589.8 10.0
+596.2 12.1
+599.0 7.3
+599.6 9.6
+601.5 0.8
+602.4 2.5
+603.5 3.5
+604.1 1.6
+604.9 3.5
+605.6 4.0
+608.4 12.8
+616.5 4.3
+621.5 9.8
+622.8 3.7
+628.4 0.6
+631.2 1.5
+635.2 2.5
+639.3 2.0
+640.5 3.5
+650.4 6.4
+652.3 3.0
+653.3 1.7
+655.5 14.5
+658.4 13.5
+659.3 6.5
+662.6 1.1
+665.3 3.0
+666.1 2.9
+667.4 4.6
+668.3 1.2
+670.2 17.7
+671.5 3.5
+674.4 1.3
+676.4 4.0
+681.5 14.1
+686.4 1.3
+701.5 10.6
+702.6 4.3
+706.7 1.7
+709.4 3.2
+714.5 14.3
+715.3 2.5
+716.4 7.3
+717.4 1.7
+718.4 1.2
+719.1 2.5
+720.4 5.1
+724.6 5.5
+725.5 2.4
+726.3 2.5
+727.3 2.2
+728.1 1.5
+728.8 1.7
+741.1 2.4
+744.5 1.6
+745.5 2.2
+748.3 2.5
+751.2 1.2
+754.4 2.0
+758.8 2.0
+760.4 4.1
+767.5 3.5
+768.4 9.5
+769.4 13.1
+770.3 1.1
+775.5 3.7
+776.4 4.8
+779.8 2.2
+786.5 34.5
+787.5 9.8
+791.2 1.7
+795.5 2.7
+817.2 9.8
+818.4 3.2
+827.5 4.6
+858.9 1.5
+S	135	135	1004.99
+Z	2	2008.97
+284.0 2.2
+285.3 0.8
+287.0 1.9
+289.3 0.6
+294.3 33.4
+295.4 2.9
+298.0 0.5
+301.1 7.6
+302.1 1.3
+303.3 1.0
+306.5 0.6
+307.3 1.4
+308.0 0.5
+309.5 0.4
+311.0 3.2
+312.2 3.3
+313.1 1.5
+314.6 2.9
+315.3 1.9
+316.2 3.5
+317.2 0.9
+319.3 2.3
+320.4 0.3
+323.4 0.9
+324.2 0.4
+325.5 1.3
+326.3 18.0
+327.4 5.2
+329.2 6.3
+331.1 1.0
+333.4 4.3
+334.4 0.8
+335.3 1.3
+336.3 0.3
+338.4 0.9
+339.4 4.1
+340.0 0.5
+341.1 0.9
+343.1 2.7
+344.3 2.7
+346.1 0.3
+347.8 3.2
+350.4 3.8
+351.2 4.1
+352.2 10.5
+353.2 5.8
+355.3 2.2
+356.6 1.7
+357.5 1.1
+358.1 0.4
+359.6 1.7
+360.4 5.0
+361.3 1.1
+363.3 1.7
+365.4 5.2
+366.1 0.9
+368.1 9.0
+369.1 18.8
+370.2 3.4
+371.1 1.0
+372.3 1.6
+373.2 6.6
+374.2 4.2
+375.4 2.3
+377.1 1.2
+378.3 0.9
+381.1 5.4
+382.3 4.9
+383.5 1.4
+384.2 2.4
+385.4 7.6
+386.3 16.5
+387.0 5.2
+388.4 2.9
+389.3 2.2
+390.2 2.7
+391.4 0.6
+392.3 0.8
+393.3 5.3
+394.3 0.8
+395.8 5.2
+396.6 9.6
+397.8 6.8
+399.0 1.5
+399.7 3.6
+401.8 1.5
+402.6 3.3
+404.1 0.6
+405.8 1.6
+407.2 33.6
+408.3 8.0
+409.3 1.8
+410.8 6.9
+411.5 8.3
+412.3 1.3
+413.0 2.4
+414.2 26.5
+415.4 9.0
+416.4 4.5
+417.0 0.4
+418.5 1.7
+419.2 0.6
+420.3 0.8
+421.2 7.6
+422.3 4.1
+423.6 0.5
+424.4 3.3
+425.2 3.0
+426.3 5.5
+428.4 9.1
+430.2 1.7
+433.0 3.6
+435.3 1.2
+436.2 0.4
+437.3 6.9
+438.2 0.9
+439.3 23.5
+440.3 13.6
+441.2 3.2
+442.5 9.6
+444.2 6.4
+445.3 2.0
+447.5 1.4
+448.3 0.7
+449.4 3.0
+450.3 1.7
+451.1 2.0
+452.1 2.6
+453.2 1.2
+454.4 3.1
+455.3 6.6
+456.3 2.4
+457.3 2.7
+459.5 6.4
+461.2 2.2
+464.6 0.5
+465.3 5.3
+466.3 2.3
+467.3 2.4
+468.3 4.7
+470.4 2.4
+471.6 11.0
+472.6 0.4
+473.3 6.7
+474.4 5.3
+475.3 4.0
+476.2 3.2
+477.2 1.2
+478.4 1.9
+479.5 1.9
+480.1 1.1
+481.2 2.4
+482.3 32.6
+483.3 20.3
+484.3 4.3
+485.3 4.9
+486.3 6.2
+487.3 4.4
+488.4 2.8
+489.5 1.1
+490.6 1.4
+491.2 1.2
+492.3 0.7
+493.3 4.1
+494.4 4.3
+495.2 4.6
+496.4 29.4
+497.3 10.0
+499.5 6.5
+500.1 0.7
+500.9 3.3
+501.7 2.1
+502.3 4.7
+503.2 5.0
+504.4 5.4
+505.5 1.1
+506.4 0.6
+507.9 2.4
+509.3 4.1
+510.6 4.8
+511.4 3.2
+512.4 5.5
+513.3 3.2
+514.3 4.5
+515.3 17.2
+515.9 2.8
+516.7 4.1
+518.2 5.3
+520.4 269.5
+521.4 101.7
+522.4 19.1
+523.3 6.3
+524.1 1.4
+525.7 2.8
+526.5 1.0
+527.2 4.3
+528.4 3.5
+529.3 8.4
+530.3 4.8
+531.2 1.8
+532.1 4.2
+533.2 3.4
+534.2 1.3
+535.6 3.2
+536.3 6.7
+537.4 2.5
+538.4 1.0
+539.4 5.0
+540.3 6.1
+541.4 9.7
+542.2 3.3
+543.2 5.6
+544.1 2.0
+545.4 3.2
+546.3 11.3
+548.7 1.0
+549.4 3.8
+550.6 1.3
+551.3 2.3
+552.9 1.2
+553.5 1.8
+554.3 1.0
+555.5 1.6
+556.4 15.2
+557.4 8.6
+558.4 23.2
+559.3 9.5
+560.3 1.1
+561.2 4.8
+562.4 1.9
+563.5 3.6
+564.2 1.3
+565.2 12.2
+566.4 5.5
+567.4 10.2
+568.4 10.7
+569.3 4.4
+570.4 5.4
+571.5 2.2
+572.7 4.8
+573.4 3.3
+574.4 10.0
+575.2 2.1
+576.2 3.6
+577.4 1.0
+578.4 0.3
+579.2 5.4
+580.0 5.3
+582.1 9.5
+583.1 7.6
+584.4 2.3
+585.5 6.6
+586.3 22.2
+587.3 11.8
+588.1 3.0
+589.4 3.8
+590.5 0.9
+591.8 1.3
+592.4 2.2
+594.3 8.7
+595.4 43.1
+596.4 9.3
+597.3 4.3
+599.3 10.4
+600.3 7.9
+601.3 0.5
+604.2 22.3
+605.2 6.2
+606.1 2.0
+607.2 2.3
+608.4 1.7
+609.4 6.6
+610.4 5.4
+611.7 6.2
+612.5 19.6
+613.4 4.2
+614.3 1.2
+615.3 2.3
+616.6 3.7
+617.3 17.6
+618.3 4.6
+619.5 7.9
+620.4 2.6
+621.0 1.8
+622.3 0.7
+623.6 3.5
+624.3 0.3
+626.0 1.6
+627.3 17.0
+628.4 12.7
+629.3 7.2
+630.2 8.0
+631.2 4.8
+632.3 2.3
+634.2 32.7
+635.3 33.8
+636.4 8.8
+638.4 5.7
+639.3 1.6
+640.7 2.1
+641.8 3.9
+642.4 3.0
+643.3 4.1
+644.2 7.7
+645.5 9.9
+646.4 8.6
+647.6 0.4
+648.2 5.3
+649.0 2.6
+649.6 0.9
+650.4 1.9
+651.1 3.6
+652.3 2.5
+653.3 1.3
+654.3 4.6
+655.4 18.4
+656.4 8.5
+657.4 12.3
+658.6 20.4
+659.5 5.6
+660.4 6.7
+661.6 5.2
+662.5 11.8
+663.5 1.1
+664.6 5.9
+665.3 9.7
+666.3 6.3
+667.5 2.9
+668.6 5.0
+670.2 17.8
+671.0 6.4
+672.2 9.4
+673.2 9.7
+674.3 3.4
+675.3 6.2
+676.4 7.3
+677.5 6.5
+678.3 19.5
+679.2 14.9
+680.3 5.5
+681.2 5.3
+681.9 5.2
+682.8 7.8
+683.4 4.6
+684.3 12.3
+685.5 2.0
+686.4 8.1
+687.5 9.9
+688.3 7.6
+689.3 6.6
+690.6 8.7
+691.7 8.3
+692.5 5.6
+693.7 5.2
+694.7 4.8
+695.6 4.7
+696.5 1.9
+697.4 5.0
+698.6 5.9
+699.5 3.7
+701.2 16.8
+702.1 7.7
+703.1 1.7
+704.8 3.8
+705.5 10.0
+706.4 5.0
+707.4 4.9
+708.5 8.3
+709.4 3.8
+710.2 14.7
+711.6 12.2
+712.5 6.0
+713.3 2.7
+714.4 49.0
+715.4 27.8
+716.4 2.5
+717.6 9.3
+718.4 5.3
+719.2 6.6
+721.0 1.9
+723.4 2.2
+724.5 6.5
+725.6 11.2
+726.5 3.6
+727.5 4.2
+728.3 36.5
+729.4 24.7
+730.4 14.3
+732.4 350.2
+733.4 136.5
+734.4 26.6
+735.6 15.5
+736.5 11.6
+737.5 5.1
+738.2 3.5
+739.5 2.4
+740.6 8.0
+741.4 11.3
+742.4 17.9
+743.2 22.9
+744.2 18.8
+745.4 15.9
+746.3 8.3
+747.5 11.6
+748.6 4.4
+749.5 13.0
+750.3 10.1
+751.3 8.3
+752.0 19.7
+753.0 1.9
+754.3 4.4
+755.3 5.3
+756.6 9.0
+757.4 23.5
+758.3 22.1
+759.2 9.4
+760.3 46.7
+761.4 8.0
+762.4 14.2
+763.8 11.0
+764.9 8.4
+765.6 6.3
+766.2 7.0
+768.2 13.9
+769.3 8.6
+770.3 6.5
+771.7 2.2
+772.4 7.2
+773.1 3.2
+773.8 7.4
+774.5 10.6
+775.2 10.7
+776.2 2.1
+777.0 6.0
+777.7 5.8
+779.3 8.6
+780.4 10.1
+781.3 7.6
+782.6 4.8
+783.3 2.7
+784.6 6.2
+785.2 10.1
+786.3 3.7
+787.8 14.5
+788.7 14.4
+789.4 1.6
+790.2 1.7
+791.4 25.2
+792.4 15.7
+793.5 5.9
+794.5 11.1
+795.3 0.9
+797.2 147.2
+798.1 44.4
+799.1 31.1
+800.6 82.3
+801.7 33.1
+802.8 15.4
+803.5 2.7
+804.4 2.4
+805.3 11.1
+806.5 7.6
+807.5 15.4
+808.9 16.8
+809.7 4.2
+811.3 17.0
+812.5 7.6
+813.3 5.7
+814.4 3.6
+815.3 9.2
+816.3 12.1
+817.5 8.8
+818.3 4.0
+819.5 8.6
+820.5 5.4
+821.2 4.8
+822.7 2.6
+823.8 10.9
+824.6 13.3
+825.8 5.9
+826.6 3.5
+827.9 4.7
+828.6 13.7
+829.7 4.5
+830.4 6.2
+831.4 5.6
+832.7 2.2
+833.8 10.3
+835.0 13.1
+836.2 9.9
+837.5 21.0
+838.8 5.8
+840.3 13.5
+841.2 6.1
+842.3 8.5
+843.3 22.9
+844.2 9.6
+845.0 9.4
+845.7 2.5
+846.4 3.9
+847.4 9.8
+848.2 61.6
+849.1 36.0
+850.1 5.3
+851.1 8.0
+852.2 11.5
+853.2 33.1
+854.2 44.6
+855.4 28.6
+856.5 16.8
+857.3 101.4
+858.1 54.6
+859.2 13.8
+860.4 27.6
+861.4 29.2
+862.5 16.6
+863.4 17.6
+864.4 9.8
+865.1 10.8
+866.1 13.8
+866.8 6.7
+867.5 1.1
+868.5 12.0
+869.7 9.0
+870.5 35.6
+871.4 47.2
+872.6 28.5
+873.5 68.2
+874.6 64.7
+875.6 27.9
+876.5 9.4
+877.5 7.4
+878.2 5.6
+879.1 1.5
+880.3 5.3
+881.3 19.9
+882.2 216.6
+883.2 68.8
+884.1 10.8
+885.4 8.6
+886.4 11.0
+887.4 10.7
+888.5 242.5
+889.5 133.6
+890.5 45.8
+891.3 8.7
+892.3 13.6
+893.7 4.9
+894.9 21.3
+896.2 17.8
+897.3 19.5
+899.2 14.2
+900.5 11.8
+901.3 3.6
+902.6 7.0
+903.3 5.2
+903.9 2.0
+905.0 2.6
+906.3 18.5
+907.3 16.0
+908.2 11.2
+909.2 7.4
+911.1 2.0
+912.1 3.9
+912.8 15.5
+913.5 15.9
+914.4 9.9
+915.3 8.2
+916.7 28.8
+917.6 5.7
+918.4 3.9
+919.5 14.4
+920.5 7.4
+921.5 57.7
+922.2 39.4
+923.2 16.6
+924.7 4.0
+926.3 16.7
+927.8 12.4
+928.6 18.4
+930.6 162.0
+931.7 123.2
+932.5 33.4
+933.2 14.3
+934.2 9.3
+935.3 4.6
+936.8 9.0
+937.6 28.2
+938.4 6.4
+939.6 36.1
+940.6 14.2
+941.6 11.1
+943.0 3.5
+943.8 6.1
+944.9 2.3
+945.6 5.8
+946.5 5.8
+947.2 1.9
+948.0 4.4
+948.8 17.4
+949.6 20.7
+950.9 19.4
+951.9 17.0
+953.3 1.1
+954.3 8.4
+955.4 9.1
+956.3 14.4
+957.3 5.7
+958.2 128.8
+959.2 51.1
+960.3 34.1
+961.3 20.9
+962.5 2.4
+963.5 28.7
+964.5 16.7
+965.4 3.6
+966.5 1.8
+967.4 10.4
+968.8 32.0
+969.5 18.4
+970.4 13.8
+971.5 7.5
+972.3 18.6
+973.7 36.8
+974.5 16.2
+975.4 10.2
+976.1 14.6
+977.2 13.7
+978.0 9.0
+979.6 3.4
+980.5 1.0
+981.6 28.9
+982.7 29.7
+983.7 29.3
+984.7 44.8
+985.8 72.0
+986.5 51.2
+987.2 69.1
+988.5 54.4
+989.5 21.1
+990.4 15.1
+991.4 5.3
+992.6 7.0
+993.7 19.2
+994.8 282.8
+995.7 63.7
+996.6 9.4
+997.8 1.0
+998.4 0.3
+999.8 1.6
+1005.1 6.3
+1005.7 1.7
+1006.6 1.3
+1007.8 3.1
+1008.7 4.8
+1009.6 7.2
+1010.4 0.9
+1011.1 1.8
+1012.3 2.4
+1013.5 2.2
+1015.3 5.3
+1016.2 4.4
+1017.4 4.5
+1018.5 6.0
+1019.4 7.1
+1020.6 5.6
+1021.4 1.7
+1023.0 0.3
+1024.7 4.3
+1025.3 5.2
+1026.5 4.2
+1027.5 26.5
+1028.5 9.8
+1029.5 4.2
+1030.7 8.2
+1031.6 42.7
+1032.4 15.9
+1033.7 10.7
+1034.5 2.3
+1036.3 5.7
+1037.0 1.0
+1038.9 9.9
+1039.6 1.0
+1040.6 0.4
+1042.7 7.4
+1043.5 3.5
+1044.4 1.3
+1046.4 8.2
+1047.1 1.7
+1048.5 2.1
+1049.2 6.2
+1052.3 2.6
+1053.3 2.1
+1054.5 1.0
+1055.7 6.3
+1056.3 2.8
+1057.4 35.4
+1058.1 10.0
+1059.5 1.5
+1060.4 1.8
+1062.5 0.7
+1063.5 1.3
+1064.6 6.2
+1065.3 4.3
+1066.3 4.8
+1067.6 1.2
+1068.8 8.8
+1069.7 2.3
+1070.6 8.1
+1071.5 3.4
+1072.4 4.9
+1073.5 28.4
+1074.5 13.3
+1075.3 10.1
+1076.4 5.8
+1077.3 4.9
+1078.5 7.9
+1079.4 0.6
+1080.3 0.6
+1082.6 18.7
+1083.6 10.1
+1084.6 12.0
+1085.6 7.7
+1086.5 5.2
+1087.3 4.6
+1088.6 4.9
+1090.5 8.6
+1091.8 3.4
+1092.6 2.1
+1093.5 4.5
+1094.5 4.1
+1095.4 2.4
+1096.5 3.4
+1098.7 1.1
+1100.5 120.4
+1101.5 68.8
+1102.4 28.3
+1103.3 13.7
+1104.5 7.4
+1105.9 2.7
+1107.2 1.4
+1108.5 1.7
+1109.9 0.7
+1113.5 1.8
+1114.5 7.9
+1115.4 3.4
+1116.3 5.8
+1117.5 9.3
+1118.4 42.3
+1119.4 40.7
+1120.3 20.4
+1121.5 6.1
+1122.4 9.0
+1123.4 12.1
+1124.0 1.2
+1124.8 6.6
+1125.7 4.7
+1126.7 2.6
+1127.4 5.3
+1128.4 2.1
+1130.4 13.9
+1131.5 12.4
+1132.7 15.1
+1133.8 4.5
+1134.6 5.8
+1135.3 0.3
+1136.4 4.8
+1137.1 2.4
+1139.3 24.9
+1140.0 7.2
+1140.7 5.7
+1141.7 9.1
+1142.5 0.9
+1143.6 2.4
+1144.3 2.0
+1145.4 1.5
+1146.8 0.7
+1148.2 2.0
+1149.6 9.2
+1151.4 14.6
+1152.5 8.9
+1153.5 4.7
+1154.1 1.8
+1155.7 9.1
+1156.8 7.6
+1157.9 7.6
+1159.6 3.6
+1160.5 1.5
+1163.2 7.7
+1165.2 4.2
+1166.3 3.4
+1167.0 2.0
+1168.3 3.3
+1169.5 98.1
+1170.6 37.4
+1171.7 8.6
+1172.8 1.3
+1174.5 7.0
+1175.8 6.9
+1177.1 2.5
+1178.4 4.7
+1179.6 1.9
+1180.6 1.9
+1181.6 1.5
+1182.6 0.8
+1183.4 3.5
+1184.6 6.2
+1186.4 20.4
+1187.5 19.9
+1188.7 16.9
+1189.7 13.5
+1190.9 7.6
+1191.9 6.3
+1193.2 2.0
+1194.2 4.2
+1194.9 1.2
+1197.4 0.4
+1198.6 3.7
+1200.4 3.0
+1201.4 1.5
+1202.6 5.5
+1203.7 4.2
+1204.6 2.1
+1205.5 4.6
+1207.5 6.3
+1208.4 5.2
+1209.4 3.0
+1210.6 0.8
+1211.4 5.4
+1212.0 2.0
+1212.7 0.8
+1213.5 3.8
+1214.4 1.2
+1215.3 6.3
+1216.5 63.8
+1217.5 21.4
+1218.9 4.3
+1220.3 7.3
+1222.5 3.6
+1223.4 1.7
+1224.6 9.5
+1225.8 6.1
+1226.7 2.8
+1227.5 2.7
+1228.4 1.0
+1229.7 2.9
+1230.5 9.8
+1231.5 6.9
+1232.8 6.3
+1233.7 7.9
+1234.8 11.0
+1235.5 6.4
+1236.4 1.0
+1237.9 3.7
+1238.5 1.3
+1240.6 54.8
+1241.5 24.4
+1242.4 17.8
+1243.6 38.7
+1244.6 15.8
+1245.6 14.0
+1246.5 9.5
+1248.1 3.7
+1248.9 13.1
+1249.7 0.5
+1250.3 3.3
+1252.0 0.8
+1253.1 0.4
+1254.5 0.8
+1256.0 7.3
+1256.7 10.3
+1257.6 12.0
+1258.2 12.5
+1258.9 19.9
+1260.6 110.3
+1261.6 58.3
+1262.7 40.7
+1263.7 9.6
+1264.6 6.4
+1265.8 8.5
+1266.8 5.3
+1267.4 10.4
+1268.9 2.3
+1269.5 3.9
+1270.6 2.1
+1271.6 2.8
+1272.7 2.6
+1274.5 587.5
+1275.6 402.7
+1276.6 144.3
+1277.6 60.8
+1278.6 11.6
+1279.8 4.3
+1280.8 3.8
+1282.6 3.3
+1283.2 1.8
+1283.9 1.6
+1284.5 3.6
+1285.4 2.5
+1286.5 8.1
+1287.7 4.7
+1288.8 4.8
+1290.0 4.0
+1291.4 10.6
+1292.6 2.3
+1293.4 3.7
+1294.5 4.0
+1296.0 20.5
+1296.7 1.8
+1297.4 4.1
+1299.5 27.7
+1300.6 18.8
+1301.7 12.5
+1302.4 5.0
+1303.6 2.5
+1304.6 7.0
+1305.7 13.1
+1306.7 11.6
+1307.6 7.2
+1309.8 0.9
+1310.7 0.5
+1311.7 2.0
+1312.6 3.9
+1314.8 1.6
+1315.6 3.5
+1316.4 5.9
+1317.8 12.7
+1318.7 11.5
+1319.7 6.1
+1320.6 21.1
+1321.5 1.7
+1322.6 0.7
+1324.8 3.9
+1325.5 1.8
+1328.2 1.2
+1330.6 3.2
+1331.6 1.5
+1332.8 3.4
+1333.6 0.6
+1335.3 2.8
+1336.2 1.7
+1337.4 1.5
+1338.4 6.4
+1339.3 7.3
+1340.3 3.4
+1342.4 14.9
+1343.6 32.4
+1344.7 20.0
+1345.7 16.8
+1346.8 1.9
+1348.0 1.1
+1348.7 5.9
+1349.8 1.6
+1351.1 3.4
+1352.6 3.1
+1353.5 5.9
+1354.2 1.7
+1354.9 4.2
+1355.8 2.4
+1356.6 11.3
+1357.5 12.8
+1358.5 10.0
+1359.4 2.5
+1360.5 9.6
+1361.6 111.6
+1362.7 70.7
+1363.7 62.0
+1364.5 23.7
+1365.6 3.6
+1366.4 0.8
+1367.2 3.1
+1368.9 7.9
+1369.9 19.0
+1371.5 30.1
+1372.4 33.5
+1373.5 20.7
+1374.6 10.7
+1375.5 3.3
+1376.4 6.6
+1377.4 9.5
+1378.4 4.9
+1379.5 20.8
+1380.4 8.7
+1381.9 3.5
+1383.1 2.4
+1383.9 3.2
+1384.6 0.7
+1385.8 2.7
+1386.8 6.6
+1387.6 3.6
+1388.8 11.7
+1389.6 15.5
+1390.6 9.3
+1391.5 4.4
+1392.5 1.8
+1393.7 0.7
+1396.0 7.8
+1397.3 8.9
+1398.8 1.6
+1399.4 1.2
+1400.3 0.5
+1401.5 3.5
+1403.1 6.8
+1404.5 4.0
+1405.1 1.2
+1406.8 2.8
+1408.5 2.3
+1411.1 1.6
+1412.1 6.1
+1412.8 0.3
+1414.6 13.2
+1415.6 16.4
+1416.7 10.4
+1418.0 4.1
+1419.1 11.8
+1419.8 3.2
+1420.7 4.9
+1421.7 10.2
+1422.6 13.4
+1424.3 6.4
+1425.0 20.8
+1425.7 2.9
+1427.6 1.8
+1429.7 1.1
+1431.9 5.4
+1432.7 82.5
+1433.7 108.8
+1434.8 33.4
+1435.7 21.4
+1436.9 5.8
+1439.8 5.0
+1440.6 1.5
+1441.6 9.0
+1442.6 2.7
+1443.3 1.3
+1444.2 2.5
+1445.5 0.7
+1446.7 15.1
+1447.7 9.8
+1448.7 7.9
+1449.6 0.9
+1450.7 1.4
+1451.8 2.4
+1453.3 4.8
+1454.4 3.8
+1455.5 9.3
+1456.5 1.0
+1457.1 2.0
+1457.9 4.5
+1459.8 1.4
+1461.4 1.1
+1464.7 13.4
+1465.7 7.1
+1466.7 5.6
+1467.6 2.5
+1468.7 11.3
+1469.7 33.3
+1470.7 27.1
+1471.5 8.4
+1472.9 3.0
+1473.7 1.8
+1474.8 8.9
+1476.7 2.3
+1479.8 0.4
+1481.6 0.7
+1482.4 1.5
+1484.8 4.1
+1486.6 565.9
+1487.6 428.5
+1488.6 202.8
+1489.6 108.8
+1490.6 46.7
+1491.6 21.0
+1492.5 8.1
+1493.8 4.1
+1494.7 9.3
+1495.6 5.8
+1497.0 0.7
+1498.7 0.8
+1500.1 1.1
+1501.7 1.6
+1503.8 1.6
+1504.5 3.1
+1505.3 5.3
+1506.5 2.0
+1510.4 10.5
+1511.5 4.1
+1512.7 1.2
+1513.5 4.9
+1514.6 5.1
+1515.6 2.2
+1516.4 2.5
+1517.7 2.4
+1519.0 1.4
+1519.9 4.7
+1520.9 1.5
+1523.3 1.3
+1524.2 0.4
+1526.6 0.7
+1527.7 3.6
+1528.6 2.8
+1529.9 1.7
+1531.3 1.6
+1531.9 0.3
+1532.6 2.0
+1533.6 1.4
+1534.7 1.7
+1535.6 0.6
+1536.5 2.3
+1537.5 1.3
+1538.4 1.1
+1539.6 3.3
+1540.9 3.0
+1541.7 2.0
+1546.1 0.9
+1547.5 0.8
+1548.5 2.5
+1554.3 2.2
+1556.4 2.4
+1557.4 8.7
+1558.5 1.5
+1559.4 0.9
+1561.2 3.1
+1563.4 1.8
+1566.6 7.4
+1567.4 2.3
+1568.7 2.9
+1569.6 5.7
+1570.7 3.4
+1571.9 2.4
+1572.8 2.4
+1573.5 1.2
+1574.6 18.1
+1575.6 39.4
+1576.7 23.7
+1577.8 2.4
+1578.6 9.7
+1579.7 1.4
+1581.5 1.1
+1582.5 5.9
+1583.3 3.0
+1584.0 1.6
+1585.7 4.1
+1586.6 0.7
+1587.9 1.8
+1588.6 1.6
+1590.5 1.9
+1592.7 137.5
+1593.7 107.6
+1594.7 55.0
+1595.9 25.8
+1596.8 9.1
+1597.7 2.2
+1599.2 19.9
+1599.8 61.2
+1600.7 55.3
+1601.6 42.0
+1602.6 15.1
+1603.6 6.7
+1607.6 4.3
+1609.5 0.5
+1615.1 0.9
+1616.7 3.4
+1617.7 4.0
+1618.6 6.9
+1619.6 14.2
+1620.8 0.4
+1622.0 1.1
+1624.9 1.1
+1625.9 2.3
+1626.7 0.7
+1627.7 2.0
+1628.7 0.3
+1629.5 1.7
+1630.8 1.2
+1632.0 0.4
+1632.8 0.6
+1634.7 0.5
+1635.8 4.1
+1637.6 5.9
+1638.9 2.0
+1642.2 0.9
+1645.6 1.1
+1646.4 1.1
+1647.5 1.4
+1650.2 0.5
+1651.4 1.5
+1655.0 4.6
+1656.9 3.3
+1659.7 1.8
+1660.8 0.3
+1661.9 2.1
+1663.6 3.1
+1666.6 0.4
+1669.7 4.1
+1670.9 3.7
+1671.8 0.7
+1673.3 2.5
+1674.0 7.6
+1675.1 2.3
+1676.4 4.9
+1680.0 1.8
+1684.7 12.2
+1685.9 11.9
+1687.2 12.0
+1688.4 7.7
+1689.1 0.3
+1691.5 2.2
+1694.4 3.0
+1695.1 1.2
+1695.7 10.4
+1696.6 10.7
+1697.6 3.5
+1698.6 3.3
+1703.6 0.3
+1704.7 0.7
+1706.0 5.4
+1706.7 9.1
+1707.8 5.1
+1709.0 0.6
+1710.6 1.6
+1712.7 181.9
+1713.8 179.7
+1714.8 101.2
+1715.8 38.8
+1716.8 23.5
+1717.9 4.7
+1719.8 0.5
+1728.7 0.6
+1730.7 2.6
+1731.9 1.7
+1737.1 2.1
+1739.3 0.4
+1745.2 4.0
+1747.1 11.1
+1747.9 0.2
+1760.5 0.9
+1762.7 4.9
+1764.1 12.8
+1764.9 3.7
+1766.0 2.4
+1770.5 2.2
+1772.7 0.8
+1776.7 1.0
+1784.8 0.3
+1788.6 2.3
+1799.4 0.5
+1801.3 1.1
+1802.7 0.7
+1806.4 1.0
+1823.4 0.7
+1828.6 0.5
+1832.3 2.1
+1833.2 1.7
+1834.3 2.7
+1838.3 0.4
+1840.6 0.2
+1841.9 3.1
+1843.1 1.7
+1843.8 3.4
+1844.9 1.8
+1859.9 46.8
+1860.9 40.9
+1862.0 21.4
+1863.0 17.8
+1864.2 4.7
+1865.0 0.9
+1878.1 14.0
+1879.0 10.8
+1879.9 3.9
+1881.2 1.3
+1882.1 0.7
+1883.2 1.8
+1967.6 1.1
+S	136	136	717.07
+I	ID	204
+I	RTime	10.0822
+Z	1	717.07
+212.9 4.3
+216.9 3.0
+229.2 1.2
+257.2 5.3
+258.3 2.5
+266.3 2.2
+272.1 1.5
+273.0 0.6
+276.0 3.4
+287.2 1.2
+296.8 4.0
+300.0 6.0
+300.9 1.2
+309.3 5.8
+311.0 2.2
+313.2 2.4
+317.4 1.8
+329.1 4.1
+330.4 3.0
+331.2 5.3
+332.4 4.0
+347.4 3.2
+352.5 2.0
+367.5 1.6
+371.3 1.7
+372.4 3.0
+373.6 1.2
+375.1 1.8
+381.3 14.3
+382.9 1.7
+383.6 3.7
+385.3 1.6
+387.3 2.4
+388.3 4.8
+394.3 4.3
+395.5 2.7
+401.2 4.6
+406.3 3.0
+409.0 1.5
+410.1 4.6
+414.3 2.4
+422.4 2.4
+423.1 8.8
+425.4 5.6
+440.3 4.6
+441.4 6.6
+444.4 2.9
+449.0 10.6
+452.3 2.7
+457.3 8.5
+458.4 4.5
+459.1 4.3
+473.3 1.2
+474.4 7.6
+475.4 18.1
+480.0 4.1
+484.4 4.5
+489.5 3.0
+490.9 2.7
+501.7 8.6
+502.3 5.3
+508.3 1.8
+517.4 2.0
+518.7 2.9
+528.5 1.3
+532.2 1.8
+538.8 2.2
+542.4 6.9
+543.4 2.4
+550.2 1.7
+554.1 2.0
+568.3 1.2
+570.4 1.5
+571.0 2.5
+573.5 2.7
+588.3 7.3
+589.1 4.5
+591.3 2.4
+601.3 3.7
+604.5 1.3
+609.1 3.5
+609.9 7.1
+612.3 3.2
+618.3 4.0
+625.3 3.0
+634.4 4.1
+639.5 2.7
+649.7 5.4
+656.7 1.3
+658.8 7.0
+660.5 2.5
+664.3 1.2
+665.6 2.2
+672.6 2.5
+679.0 4.5
+680.5 1.1
+681.4 9.3
+682.4 18.7
+683.6 4.1
+684.5 2.4
+685.3 2.5
+687.3 4.0
+698.4 23.2
+699.4 36.9
+700.4 21.1
+707.4 6.8
+708.1 4.4
+814.4 8.1
+1063.6 2.4
+S	137	137	497.29
+Z	3	1489.85
+172.3 88.2
+217.0 113.9
+229.1 148.5
+234.1 105.2
+238.9 122.3
+258.1 182.9
+261.2 218.3
+262.0 468.4
+285.2 70.5
+286.2 148.4
+291.1 105.4
+300.1 122.5
+317.3 694.2
+329.3 497.7
+330.2 329.6
+333.0 174.4
+338.9 896.8
+343.7 1290.9
+353.0 1284.7
+357.9 172.2
+375.2 548.1
+376.4 413.2
+378.1 105.4
+384.7 646.1
+388.4 163.4
+392.3 97.0
+393.8 2156.7
+394.4 176.5
+398.3 547.4
+412.2 369.9
+416.4 720.2
+417.3 990.0
+432.2 174.2
+439.9 320.3
+441.4 199.0
+443.3 88.2
+444.3 537.0
+451.0 88.0
+451.9 310.6
+452.7 253.0
+459.4 165.6
+460.1 354.4
+469.5 340.2
+471.6 96.7
+473.6 851.3
+474.4 671.3
+476.4 387.5
+478.4 474.1
+479.3 315.9
+481.9 156.3
+482.6 327.0
+484.2 433.9
+486.5 674.7
+487.8 460.9
+496.6 227.0
+497.3 96.4
+511.4 199.8
+515.8 259.6
+516.8 183.0
+532.6 506.0
+534.5 370.2
+535.8 208.7
+537.9 232.2
+541.2 158.0
+544.5 1671.0
+545.5 542.5
+549.5 88.0
+552.8 424.2
+554.2 122.5
+558.6 401.1
+563.5 139.8
+569.4 312.2
+570.2 105.3
+573.3 279.2
+578.3 574.6
+582.3 301.6
+583.1 131.3
+587.3 1150.8
+588.0 316.5
+588.7 284.9
+589.4 432.6
+595.1 384.2
+596.7 446.9
+601.8 353.3
+604.3 163.3
+605.4 624.0
+606.2 405.2
+609.3 189.1
+610.8 327.0
+615.0 2741.8
+615.7 327.3
+616.4 260.7
+626.1 426.9
+631.6 274.3
+633.0 270.1
+635.5 540.1
+636.1 487.5
+639.1 182.9
+640.6 191.4
+643.0 464.8
+644.8 1556.8
+646.8 312.2
+648.4 96.8
+650.3 89.3
+657.5 1389.0
+659.5 164.5
+660.9 229.8
+663.5 122.5
+669.2 209.9
+672.4 174.3
+686.3 887.3
+687.6 249.0
+700.4 113.6
+704.3 361.4
+705.7 165.5
+727.3 87.9
+769.6 130.9
+775.9 139.7
+786.6 2762.1
+787.4 765.2
+800.2 209.4
+815.3 255.6
+816.4 130.9
+833.2 651.3
+834.3 410.1
+856.1 122.4
+878.5 79.4
+896.2 148.4
+912.7 163.1
+915.5 70.8
+928.4 304.8
+969.2 174.3
+986.8 114.0
+1041.4 191.6
+1082.1 148.4
+1143.1 139.9
+1212.5 122.6
+1228.9 335.7
+1231.6 96.6
+1244.4 302.7
+S	138	138	719.06
+I	ID	218
+I	RTime	10.7920
+Z	1	719.06
+240.3 1.7
+242.4 1.7
+243.1 1.7
+251.9 1.1
+257.2 1.2
+276.4 2.2
+281.0 1.7
+284.3 1.6
+295.3 0.8
+309.1 5.0
+310.4 2.2
+311.4 3.0
+312.3 2.2
+326.2 3.0
+327.3 1.5
+328.6 1.7
+330.6 1.3
+331.3 6.6
+339.3 6.9
+341.1 1.2
+346.4 1.7
+347.4 4.4
+348.5 3.4
+349.2 1.2
+355.0 1.2
+356.3 1.6
+368.4 3.2
+372.3 2.7
+373.3 2.4
+386.5 4.3
+388.3 1.7
+391.2 1.2
+402.2 8.3
+405.3 2.9
+414.3 1.0
+415.5 3.4
+418.5 2.4
+425.3 2.7
+430.0 1.2
+431.0 1.1
+436.0 2.7
+442.4 4.6
+443.6 4.4
+452.5 4.6
+454.9 1.2
+456.4 2.5
+457.2 3.2
+458.3 15.3
+459.0 1.5
+459.7 1.2
+460.4 3.7
+463.9 7.8
+469.1 2.7
+471.2 2.5
+476.4 21.7
+477.4 5.5
+482.7 4.0
+483.3 6.8
+486.3 1.7
+487.2 1.0
+498.6 1.2
+500.1 5.9
+503.0 13.3
+504.5 1.8
+505.5 3.5
+509.4 1.8
+510.9 7.9
+514.4 1.2
+517.1 5.5
+529.3 2.2
+533.2 1.8
+537.2 1.8
+541.4 2.4
+544.0 3.7
+572.5 7.3
+578.5 1.5
+585.5 2.2
+587.5 6.1
+590.6 10.1
+593.2 4.9
+594.6 1.6
+597.6 2.2
+599.6 3.9
+603.5 5.8
+604.4 1.2
+611.6 3.2
+612.5 1.3
+613.4 1.3
+614.7 8.1
+615.5 1.5
+616.3 2.0
+619.1 2.9
+621.4 6.3
+626.7 1.2
+629.2 2.2
+640.5 1.7
+659.0 1.0
+660.5 7.0
+662.4 3.0
+665.8 55.4
+666.7 21.6
+674.2 12.1
+675.5 10.8
+676.6 3.4
+682.5 9.1
+683.3 2.4
+684.3 3.2
+700.3 29.6
+701.4 31.5
+702.4 7.5
+706.9 7.5
+709.8 1.5
+753.3 1.7
+776.5 2.7
+824.4 4.0
+826.4 3.0
+900.3 1.6
+901.6 5.5
+902.5 1.8
+916.5 3.2
+1002.5 1.8
+1011.7 1.3
+1015.7 2.5
+1019.2 2.0
+1153.5 2.9
+1162.7 1.7
+1235.8 2.4
+1291.7 5.0
+1299.6 2.7
+S	139	139	1032.09
+Z	3	3094.25
+292.0 0.7
+298.2 1.3
+299.4 0.4
+312.1 0.4
+316.4 1.2
+325.3 7.7
+326.5 1.7
+338.2 1.2
+341.3 1.9
+342.3 1.4
+343.2 0.6
+354.9 0.5
+356.6 2.5
+362.7 1.7
+371.3 2.4
+380.3 1.3
+382.9 0.9
+384.0 0.4
+389.3 5.0
+395.1 2.0
+398.2 6.5
+401.3 2.3
+408.4 1.0
+412.9 3.1
+413.5 6.6
+414.5 1.2
+416.5 0.3
+417.3 1.6
+420.1 1.4
+428.1 2.7
+430.1 0.4
+431.4 1.3
+435.1 0.2
+441.2 1.3
+441.9 2.6
+450.5 0.5
+453.3 8.6
+454.3 0.3
+455.3 2.3
+456.4 1.6
+459.3 0.9
+460.3 1.9
+464.4 7.9
+469.2 2.6
+470.4 5.3
+472.5 0.5
+475.2 1.7
+477.2 0.9
+478.0 10.1
+483.3 1.4
+492.2 2.6
+493.6 2.6
+494.4 0.7
+497.7 2.5
+502.2 5.7
+504.6 9.3
+511.2 1.7
+513.4 1.5
+515.4 1.0
+521.2 2.1
+524.1 6.8
+526.2 0.3
+527.3 1.0
+530.3 0.5
+533.4 1.7
+534.5 0.9
+539.4 7.1
+541.4 4.7
+542.1 3.2
+542.7 1.1
+549.4 6.0
+551.4 2.3
+552.6 8.4
+554.5 0.9
+555.3 2.3
+556.4 4.9
+560.5 0.8
+561.3 2.1
+562.9 5.5
+565.4 1.6
+570.3 2.2
+571.9 38.1
+572.5 30.0
+573.2 0.7
+575.3 2.9
+580.2 4.6
+583.3 8.6
+585.1 0.7
+588.4 1.4
+590.5 2.2
+592.2 4.0
+598.1 0.9
+599.4 0.4
+600.5 4.2
+601.4 7.4
+602.6 2.3
+607.6 2.9
+608.2 7.3
+609.0 4.5
+612.9 0.6
+616.3 7.5
+618.5 29.3
+619.6 5.3
+620.7 4.5
+621.5 1.4
+623.0 0.9
+625.6 0.6
+626.5 1.6
+628.5 0.4
+629.4 1.5
+633.3 4.1
+635.2 2.3
+636.8 2.3
+639.4 4.5
+640.9 3.7
+641.5 0.7
+643.6 2.2
+645.6 2.8
+648.1 3.2
+650.1 7.9
+650.8 0.4
+654.1 1.0
+655.3 0.9
+656.3 1.1
+657.3 5.9
+658.1 4.6
+660.6 2.3
+662.3 5.2
+665.1 6.1
+666.4 25.2
+667.5 9.2
+668.6 1.8
+671.4 0.9
+672.3 2.8
+673.4 0.5
+675.6 2.7
+676.2 0.9
+678.6 2.6
+682.4 1.4
+683.7 5.2
+685.2 0.8
+686.3 2.0
+689.5 101.2
+690.4 19.0
+691.2 0.9
+692.1 3.7
+693.6 2.3
+694.6 1.4
+696.9 6.5
+698.3 6.8
+700.3 2.8
+701.1 1.3
+703.4 0.8
+704.4 1.8
+705.5 4.5
+706.7 8.8
+707.4 5.1
+708.0 4.9
+710.9 1.2
+711.8 0.5
+712.8 2.6
+714.5 7.3
+716.5 1.6
+718.7 4.1
+720.8 0.5
+721.4 4.2
+723.8 0.5
+726.3 1.0
+728.5 3.3
+732.5 1.9
+734.3 4.0
+735.2 3.9
+735.9 4.9
+737.5 6.6
+738.6 3.4
+742.1 1.7
+744.1 6.5
+745.6 1.2
+746.3 1.5
+749.6 4.0
+751.5 1.8
+753.2 5.5
+754.5 5.9
+756.4 3.7
+757.4 7.3
+758.6 4.5
+760.5 4.3
+762.2 34.8
+763.0 2.4
+764.1 6.3
+764.9 9.7
+765.9 0.5
+769.0 16.9
+769.6 4.4
+770.9 56.8
+771.7 40.8
+772.6 2.8
+773.3 2.0
+774.4 1.1
+775.4 2.0
+777.9 378.8
+778.6 242.3
+779.7 4.5
+781.0 0.7
+783.1 4.2
+784.7 8.1
+785.7 0.9
+788.3 2.9
+789.0 1.1
+790.3 1.7
+791.8 8.4
+793.5 2.4
+794.4 6.6
+795.2 2.8
+796.2 2.9
+797.0 5.4
+797.8 0.6
+798.6 3.8
+799.9 4.2
+802.5 27.3
+803.6 22.7
+804.7 5.1
+807.3 2.4
+808.5 0.8
+809.7 2.6
+811.4 6.5
+812.4 8.9
+815.6 3.7
+817.1 8.5
+819.3 5.9
+821.3 0.9
+822.0 4.8
+823.8 2.0
+825.4 1.6
+826.4 7.5
+828.6 1.7
+830.4 3.9
+831.8 2.7
+833.3 82.6
+834.1 2.4
+835.3 4.9
+836.3 1.2
+837.8 6.0
+839.1 2.6
+840.4 6.4
+842.1 170.0
+843.1 15.7
+844.0 2.8
+845.2 3.4
+846.2 1.2
+847.7 3.5
+848.4 5.4
+849.7 2.7
+850.7 6.0
+851.4 4.7
+852.0 2.9
+853.5 4.7
+854.7 10.7
+855.5 3.4
+859.1 11.9
+860.0 8.7
+860.8 3.1
+863.6 2.7
+865.8 10.3
+866.4 3.7
+867.6 14.1
+868.4 0.9
+869.2 0.5
+870.8 11.1
+872.0 10.9
+873.2 1.7
+874.5 0.3
+876.1 7.7
+878.9 6.1
+879.6 5.0
+880.8 22.1
+882.0 12.5
+883.7 4.4
+884.4 15.2
+885.5 6.6
+886.2 2.8
+887.6 8.9
+888.7 3.0
+889.9 1.5
+891.6 22.2
+893.0 7.2
+894.3 6.6
+895.0 2.0
+896.0 1.3
+896.9 4.8
+898.6 6.4
+899.3 8.6
+900.9 8.4
+901.6 8.2
+902.8 7.4
+903.6 3.3
+904.3 2.6
+904.9 7.8
+905.7 2.5
+907.1 1.9
+908.4 12.2
+909.2 0.5
+910.1 4.3
+911.3 3.0
+912.8 15.4
+913.8 10.2
+914.9 6.2
+915.8 1.6
+917.6 34.8
+918.3 8.4
+919.0 1.5
+919.8 3.1
+921.2 5.6
+922.1 12.6
+923.2 8.5
+923.8 1.7
+924.5 5.5
+926.4 14.2
+927.3 8.8
+928.4 10.4
+929.0 4.5
+930.9 10.1
+931.7 26.8
+932.6 8.0
+933.3 5.8
+935.1 6.8
+936.4 3.8
+937.2 11.9
+938.6 13.7
+940.2 639.9
+941.2 119.1
+942.5 28.1
+943.2 3.0
+944.5 1.8
+945.3 6.6
+946.8 2.9
+948.2 6.9
+949.0 4.6
+949.9 2.7
+951.3 10.3
+952.0 5.9
+952.7 1.6
+954.4 14.7
+955.3 20.0
+956.6 28.5
+958.0 3.6
+959.0 5.3
+959.9 7.1
+960.7 21.1
+963.0 9.4
+963.8 1.0
+964.9 13.6
+965.6 6.6
+967.9 32.1
+968.6 12.8
+969.5 25.1
+970.1 2.1
+971.3 9.4
+972.1 2.1
+973.0 7.8
+973.6 23.0
+974.5 5.2
+975.7 25.3
+977.0 124.7
+977.7 154.3
+978.5 27.4
+979.6 32.0
+980.3 8.3
+981.4 9.1
+982.7 37.1
+983.6 2.9
+984.6 2.3
+985.8 13.1
+986.6 19.7
+987.7 22.7
+988.4 3.2
+989.8 15.1
+990.5 12.8
+991.5 13.9
+992.2 7.8
+993.1 28.5
+994.2 11.9
+995.2 13.4
+995.8 60.7
+996.5 45.1
+997.1 11.0
+998.0 14.4
+999.4 35.5
+1000.4 5.2
+1001.2 21.4
+1002.1 6.7
+1003.4 18.4
+1004.6 84.8
+1005.7 15.3
+1006.4 11.5
+1007.1 14.4
+1008.1 4.8
+1008.8 33.9
+1010.3 45.7
+1011.4 32.6
+1012.3 11.2
+1013.6 60.2
+1015.0 54.7
+1015.9 7.8
+1016.5 12.9
+1017.5 31.9
+1018.5 10.2
+1019.4 10.6
+1020.8 5.6
+1021.5 29.5
+1022.5 36.6
+1024.1 3.9
+1031.0 1.7
+1032.3 2.9
+1034.0 3.9
+1034.9 0.5
+1037.2 1.5
+1038.9 1.0
+1040.2 3.7
+1045.6 2.9
+1047.6 0.6
+1048.7 6.0
+1051.8 5.2
+1054.9 2.0
+1056.3 3.7
+1058.3 1.6
+1059.3 2.1
+1062.9 6.0
+1065.5 5.3
+1066.5 3.8
+1069.2 5.3
+1070.0 0.8
+1073.4 2.7
+1076.0 2.5
+1077.2 8.2
+1077.8 1.6
+1078.9 3.5
+1079.9 3.6
+1080.6 10.6
+1082.8 6.1
+1083.9 5.9
+1085.4 5.7
+1086.9 4.0
+1087.6 13.9
+1088.6 17.2
+1089.6 24.5
+1090.4 11.4
+1091.3 1.6
+1092.5 7.6
+1093.6 7.0
+1095.8 2.1
+1098.0 8.9
+1099.8 2.4
+1100.9 6.1
+1101.8 8.8
+1105.6 2.7
+1107.3 0.5
+1108.9 14.3
+1109.5 15.3
+1111.0 4.2
+1112.6 4.8
+1114.5 3.1
+1115.5 8.8
+1120.3 14.5
+1121.2 2.4
+1123.4 3.5
+1125.3 2.9
+1126.6 2.0
+1131.0 5.8
+1132.1 1.4
+1134.1 6.6
+1134.8 7.3
+1135.7 7.8
+1138.4 7.7
+1139.8 16.1
+1142.5 168.8
+1143.6 85.8
+1144.4 6.7
+1145.0 3.9
+1147.1 20.9
+1147.8 1.9
+1148.9 0.8
+1149.7 4.7
+1150.6 7.6
+1152.1 9.1
+1153.2 5.4
+1154.0 7.5
+1156.0 7.2
+1158.3 15.5
+1159.8 1.0
+1160.8 1.0
+1164.0 11.8
+1166.4 34.0
+1167.4 2.9
+1169.5 2.3
+1171.4 3.6
+1172.4 3.6
+1173.6 10.1
+1176.7 2.1
+1178.7 15.9
+1179.5 4.5
+1180.6 1.2
+1182.5 1.0
+1183.3 6.8
+1184.5 2.1
+1185.5 8.4
+1186.4 10.8
+1188.5 0.3
+1190.5 1.9
+1191.7 6.3
+1194.2 10.6
+1195.1 22.9
+1196.0 4.6
+1196.6 2.8
+1198.5 87.0
+1199.6 41.4
+1200.6 2.8
+1201.7 7.7
+1203.5 38.7
+1204.4 97.9
+1206.6 7.3
+1207.7 13.3
+1210.0 9.9
+1211.4 7.2
+1212.1 0.8
+1212.9 5.6
+1213.6 37.7
+1214.5 18.2
+1216.5 306.6
+1217.6 147.3
+1218.8 24.8
+1219.9 13.6
+1221.1 4.7
+1222.2 2.0
+1228.8 2.0
+1229.9 7.6
+1230.6 11.2
+1231.7 7.9
+1233.1 13.5
+1234.1 4.6
+1236.0 11.9
+1238.1 3.9
+1239.0 10.1
+1239.6 51.8
+1240.5 5.2
+1241.1 3.2
+1242.6 1.3
+1244.4 3.4
+1245.4 4.9
+1247.2 7.4
+1248.1 29.4
+1248.8 19.6
+1250.1 9.6
+1252.1 5.4
+1252.7 16.5
+1254.0 8.4
+1255.8 7.2
+1256.5 0.4
+1259.9 5.6
+1261.5 9.8
+1263.9 4.2
+1266.1 0.6
+1267.0 2.9
+1268.3 10.2
+1269.2 10.8
+1269.9 6.0
+1271.2 10.8
+1273.2 1.4
+1274.5 10.7
+1275.2 19.7
+1276.2 13.1
+1278.0 17.0
+1278.7 3.8
+1281.1 4.5
+1282.3 12.3
+1283.5 34.5
+1284.2 41.3
+1285.0 3.2
+1286.2 5.8
+1287.7 15.6
+1288.5 4.6
+1289.7 1.1
+1292.0 5.6
+1293.0 8.2
+1294.7 5.0
+1295.9 7.4
+1297.0 15.3
+1299.0 8.0
+1301.7 1.8
+1302.8 3.2
+1304.1 1.6
+1305.5 1.6
+1306.1 0.4
+1307.6 3.7
+1308.4 8.4
+1310.9 8.2
+1312.8 3.5
+1314.0 4.4
+1314.9 3.5
+1316.3 7.8
+1318.9 19.9
+1319.6 12.6
+1320.3 7.7
+1323.6 1.0
+1328.7 27.8
+1329.7 20.4
+1330.7 3.5
+1331.4 2.4
+1332.2 7.5
+1333.0 22.3
+1334.6 4.7
+1335.4 1.6
+1337.2 2.8
+1342.1 45.7
+1343.1 5.7
+1344.9 8.9
+1346.0 0.7
+1348.3 6.8
+1351.7 6.0
+1352.8 4.1
+1354.4 10.1
+1355.4 21.7
+1357.8 8.6
+1358.6 6.1
+1361.0 12.2
+1362.4 51.2
+1363.1 22.6
+1365.4 2.9
+1366.8 1.0
+1368.9 14.0
+1369.7 2.2
+1371.8 0.6
+1374.4 4.3
+1375.5 1.7
+1376.8 3.9
+1378.0 3.8
+1381.8 1.4
+1383.6 1.6
+1384.2 2.4
+1384.9 13.2
+1388.4 3.8
+1389.6 3.8
+1392.5 1.4
+1393.4 3.1
+1394.6 28.0
+1395.8 10.4
+1396.6 11.0
+1399.2 2.7
+1402.5 3.9
+1403.2 8.5
+1404.7 6.9
+1405.7 8.0
+1406.7 6.2
+1408.5 12.5
+1410.3 5.0
+1412.5 86.7
+1413.7 56.2
+1414.7 11.3
+1416.7 1.7
+1417.7 6.1
+1418.5 20.2
+1419.3 5.9
+1420.2 9.2
+1421.1 5.0
+1423.8 6.9
+1424.7 1.5
+1426.5 9.3
+1427.1 2.4
+1429.4 2.2
+1430.9 10.2
+1432.7 8.0
+1433.3 5.5
+1434.9 6.9
+1437.5 4.1
+1438.5 4.8
+1439.1 3.9
+1440.3 15.3
+1442.5 9.0
+1445.2 2.3
+1445.9 1.2
+1449.2 2.1
+1450.6 9.9
+1453.3 2.0
+1454.2 2.2
+1455.6 4.7
+1457.5 10.9
+1458.4 5.4
+1459.5 1.6
+1460.2 1.3
+1464.1 9.7
+1465.8 29.0
+1467.0 11.2
+1470.0 10.2
+1470.8 1.8
+1472.1 11.7
+1473.3 8.8
+1474.6 14.5
+1475.5 62.2
+1476.3 9.5
+1477.9 2.2
+1480.5 3.2
+1483.6 5.3
+1486.0 8.0
+1487.6 8.8
+1489.9 8.2
+1491.2 4.8
+1491.8 7.1
+1492.8 16.1
+1499.5 0.5
+1502.4 2.7
+1504.0 5.0
+1505.4 9.9
+1506.4 6.0
+1507.3 2.7
+1508.5 4.2
+1511.0 4.0
+1519.2 13.6
+1522.7 33.2
+1523.7 20.8
+1524.6 8.5
+1526.5 3.1
+1527.2 1.3
+1533.9 1.5
+1536.5 2.2
+1537.4 0.8
+1538.0 0.7
+1538.8 8.8
+1539.8 18.1
+1540.8 224.7
+1541.8 99.2
+1542.9 52.9
+1546.2 4.1
+1548.9 0.8
+1553.2 2.6
+1554.8 142.1
+1555.7 61.4
+1556.9 15.2
+1558.9 2.0
+1560.5 1.7
+1563.2 0.9
+1565.1 1.9
+1572.9 2.7
+1574.0 2.0
+1577.7 1.4
+1578.8 0.8
+1579.7 0.6
+1581.8 1.9
+1582.6 2.5
+1583.5 2.1
+1586.8 3.0
+1593.5 2.3
+1594.1 1.2
+1596.7 0.5
+1599.7 0.9
+1600.8 0.4
+1603.0 2.3
+1605.6 1.9
+1606.4 2.4
+1615.6 2.9
+1619.1 1.1
+1619.8 4.7
+1620.8 1.6
+1626.7 3.3
+1632.0 0.4
+1632.9 0.4
+1634.4 0.4
+1637.0 4.6
+1637.8 3.1
+1644.4 2.4
+1647.8 0.5
+1648.9 1.2
+1656.4 1.1
+1662.0 1.2
+1665.2 0.8
+1667.0 6.0
+1668.7 1.8
+1671.1 0.5
+1674.9 3.2
+1676.7 6.0
+1679.8 5.7
+1682.4 4.9
+1683.8 5.2
+1693.5 0.8
+1703.1 1.9
+1712.6 4.2
+1715.3 2.4
+1716.5 5.4
+1717.7 2.4
+1722.5 4.0
+1730.1 5.1
+1730.9 2.6
+1733.9 6.9
+1737.6 1.3
+1740.4 3.7
+1741.6 3.8
+1743.1 1.9
+1748.7 2.3
+1751.5 2.6
+1752.8 2.8
+1754.5 1.4
+1758.4 3.9
+1759.0 0.8
+1760.0 3.2
+1761.3 2.7
+1763.8 3.5
+1767.4 9.3
+1768.2 5.0
+1770.6 1.0
+1773.1 5.8
+1774.0 3.0
+1783.0 4.2
+1784.7 0.8
+1789.9 4.4
+1792.6 0.3
+1796.9 1.3
+1798.5 1.2
+1805.7 0.5
+1815.6 0.7
+1820.9 3.0
+1834.1 0.8
+1843.9 1.0
+1860.8 0.5
+1866.4 1.8
+1881.1 2.1
+1881.8 6.1
+1883.1 2.0
+1887.9 1.9
+1891.2 4.7
+1902.1 2.0
+1902.8 1.3
+1909.7 0.4
+1911.1 2.9
+1911.9 5.6
+1917.7 1.3
+1922.2 2.4
+1926.9 2.2
+1927.7 1.8
+1935.0 4.5
+1936.0 3.4
+1937.5 5.0
+1950.8 0.9
+1952.4 4.6
+1953.6 15.3
+1954.2 4.1
+1955.0 1.4
+1983.0 4.9
+1986.1 0.5
+S	140	140	717.06
+I	ID	179
+I	RTime	8.8483
+Z	1	717.06
+218.3 1.2
+242.2 5.0
+252.4 4.1
+263.2 2.4
+270.4 1.2
+272.1 2.0
+283.2 3.9
+303.5 3.4
+312.3 1.3
+313.3 4.0
+317.4 6.5
+323.0 3.5
+324.5 2.5
+328.2 5.9
+329.2 6.1
+331.2 7.8
+332.5 3.0
+339.9 1.7
+347.0 2.2
+348.5 0.8
+353.3 1.7
+355.3 5.0
+361.3 1.5
+365.0 3.2
+370.2 5.0
+379.3 4.6
+381.2 2.0
+383.3 1.7
+387.3 6.5
+388.3 1.3
+391.9 2.5
+394.2 4.1
+396.0 2.5
+400.3 4.1
+404.6 1.5
+406.2 5.0
+413.3 2.2
+415.4 1.6
+417.8 1.7
+422.1 3.5
+423.3 17.6
+425.1 2.0
+432.3 2.2
+440.3 1.6
+441.2 15.1
+447.6 6.4
+448.9 1.5
+451.5 2.9
+457.1 6.0
+458.3 5.0
+459.3 4.5
+463.2 2.4
+467.6 2.7
+470.3 1.2
+472.4 1.2
+474.0 0.8
+475.5 8.1
+476.4 2.2
+481.0 2.0
+482.4 2.4
+487.5 2.2
+492.6 3.5
+498.2 7.6
+500.6 3.0
+502.3 4.3
+505.0 1.7
+525.3 2.2
+529.2 2.4
+553.3 1.8
+560.7 2.7
+567.3 1.7
+571.2 6.8
+572.4 2.2
+578.5 8.1
+579.3 5.4
+582.3 4.9
+588.1 5.6
+589.2 1.6
+590.5 1.8
+601.3 4.9
+602.2 1.6
+609.4 2.7
+612.4 3.9
+637.4 1.3
+638.5 7.5
+639.4 2.7
+651.9 1.5
+656.1 2.5
+664.5 9.6
+665.5 8.3
+668.7 1.2
+672.4 3.4
+673.6 11.6
+674.7 2.5
+675.6 7.5
+676.9 2.9
+681.4 8.5
+682.6 13.8
+683.5 2.5
+685.6 2.2
+686.3 10.6
+687.3 2.7
+698.2 19.8
+699.3 51.2
+700.5 14.3
+707.7 8.0
+776.3 5.4
+953.6 3.4
+S	141	141	497.29
+Z	3	1489.85
+143.1 29.2
+147.0 34.6
+172.3 23.6
+186.2 43.8
+215.5 14.5
+217.1 54.7
+228.3 27.3
+228.9 59.9
+230.2 19.9
+234.2 100.5
+239.5 70.1
+242.2 43.9
+260.2 233.6
+262.1 218.6
+301.1 34.2
+302.5 137.0
+312.0 19.9
+317.3 164.2
+327.2 82.4
+329.3 632.1
+332.2 36.5
+337.2 91.3
+338.6 126.7
+343.7 392.1
+344.3 60.1
+352.6 329.0
+353.3 98.8
+357.2 34.6
+359.3 29.2
+368.2 21.7
+375.4 75.0
+376.7 29.3
+382.1 27.3
+384.9 261.6
+386.0 29.1
+387.3 23.6
+389.2 25.7
+392.3 43.6
+393.8 955.6
+394.6 63.9
+397.9 42.8
+400.7 18.1
+407.2 19.9
+410.4 36.5
+413.8 70.2
+416.5 609.9
+417.3 253.3
+423.5 49.4
+424.4 63.8
+426.7 18.1
+431.3 102.7
+435.3 179.9
+438.1 25.4
+441.5 44.5
+443.4 206.8
+444.2 25.4
+448.5 134.3
+450.5 28.9
+452.0 56.7
+453.9 38.3
+459.2 20.0
+460.6 93.3
+461.8 100.9
+465.8 25.7
+469.3 34.9
+470.0 31.0
+473.6 448.8
+474.2 160.7
+474.9 59.6
+475.6 41.8
+477.0 210.4
+480.0 145.8
+482.2 281.0
+483.2 191.5
+484.7 54.1
+485.8 604.7
+487.5 319.8
+488.3 92.6
+504.2 129.8
+505.7 101.0
+509.0 27.2
+523.9 27.3
+526.1 135.3
+527.1 34.7
+529.5 73.3
+537.9 32.9
+542.9 128.0
+544.3 861.7
+545.4 109.3
+552.8 46.1
+557.2 51.0
+569.0 36.9
+569.6 41.9
+571.7 19.9
+576.3 35.0
+577.9 145.3
+579.3 69.2
+580.5 104.8
+581.7 79.8
+584.0 91.2
+586.5 96.6
+587.4 638.4
+588.4 51.5
+590.3 34.5
+601.4 18.0
+602.2 36.5
+605.2 520.1
+606.2 224.3
+606.8 81.4
+614.9 612.3
+616.0 723.4
+617.0 49.0
+618.0 152.0
+620.1 98.2
+622.1 25.5
+624.5 40.2
+628.4 27.3
+633.9 25.5
+636.0 34.5
+640.5 133.6
+644.2 139.8
+645.0 49.0
+646.5 32.8
+647.7 66.1
+657.4 856.5
+658.5 60.0
+659.4 45.7
+660.1 29.4
+669.4 54.7
+672.4 362.0
+673.3 65.2
+676.5 58.7
+685.3 68.1
+686.4 349.2
+687.5 43.7
+688.7 160.7
+689.6 76.9
+690.3 25.4
+694.6 100.3
+695.5 32.8
+699.8 25.6
+702.4 25.5
+704.1 581.1
+705.3 61.4
+716.4 18.1
+719.2 21.8
+741.1 83.1
+750.4 38.3
+768.4 52.8
+769.8 20.1
+770.5 38.4
+781.9 58.6
+782.6 25.4
+786.6 1184.7
+787.5 86.3
+796.8 43.9
+798.5 21.8
+815.4 82.1
+816.3 79.8
+817.4 38.4
+826.4 49.9
+833.3 539.0
+834.4 97.2
+835.5 14.4
+855.5 29.1
+857.2 40.1
+861.1 25.7
+879.3 18.1
+895.7 27.3
+912.6 21.8
+928.3 32.9
+945.6 40.5
+963.7 82.4
+971.5 37.9
+987.9 21.7
+1060.7 36.5
+1074.3 129.7
+1083.0 32.8
+1118.4 31.2
+1230.7 60.3
+1259.6 25.4
+S	142	142	715.07
+I	ID	181
+I	RTime	8.9364
+Z	1	715.07
+251.2 1.5
+259.2 2.2
+272.4 2.2
+275.0 2.2
+287.5 1.7
+310.9 1.5
+317.4 5.3
+334.3 2.0
+340.2 4.9
+345.3 0.8
+367.5 1.7
+376.1 1.2
+388.2 2.0
+389.6 4.8
+394.2 2.9
+396.2 4.0
+415.1 1.5
+418.5 1.8
+440.2 1.8
+444.4 1.2
+445.4 2.7
+446.4 3.9
+447.1 2.5
+453.3 4.5
+476.3 0.8
+478.5 2.7
+489.3 1.2
+493.3 2.2
+495.9 2.7
+499.2 8.6
+500.4 4.9
+501.2 1.2
+502.5 1.2
+505.2 1.1
+506.4 0.8
+523.5 2.7
+538.2 2.0
+540.5 1.6
+541.3 3.5
+545.9 4.1
+550.3 3.2
+551.2 1.6
+558.9 6.3
+559.6 1.6
+568.2 3.2
+569.1 2.9
+569.8 5.5
+585.5 3.7
+586.3 5.1
+587.3 9.1
+597.4 1.7
+599.3 10.1
+602.7 0.8
+609.2 2.7
+617.3 2.7
+621.0 3.4
+623.5 2.5
+637.9 5.6
+649.8 5.1
+652.5 4.5
+655.1 1.2
+656.7 4.8
+658.2 9.5
+671.1 6.0
+679.3 15.3
+680.3 3.7
+681.5 3.4
+685.3 4.4
+688.9 6.4
+691.1 4.4
+696.5 26.3
+697.5 38.9
+698.4 6.6
+706.2 4.4
+707.0 6.0
+S	143	143	452.85
+I	ID	211
+I	RTime	10.4434
+Z	2	904.69
+136.4 1.3
+144.2 1.7
+145.2 3.7
+147.1 2.5
+161.1 2.7
+171.2 1.7
+175.1 3.4
+176.3 2.7
+179.6 1.6
+184.2 14.6
+194.3 2.5
+198.2 1.2
+201.1 1.2
+212.2 3.5
+213.0 1.2
+215.3 1.6
+228.2 9.6
+230.1 1.2
+231.0 2.7
+233.2 1.2
+234.1 3.9
+235.0 1.7
+237.1 4.0
+238.9 8.1
+240.1 1.2
+242.5 1.7
+243.6 2.5
+246.3 1.5
+250.4 1.2
+256.8 2.7
+258.1 3.0
+259.2 6.3
+271.3 1.2
+275.2 2.5
+278.0 1.0
+286.3 1.3
+291.4 19.2
+292.2 2.2
+292.9 2.0
+294.2 1.7
+301.1 1.3
+304.3 6.0
+306.4 8.5
+307.4 14.3
+309.0 1.8
+312.3 2.5
+314.1 3.0
+317.3 4.4
+320.4 1.1
+322.4 1.2
+324.3 3.4
+325.1 6.8
+326.2 3.2
+337.1 1.0
+338.3 52.2
+343.9 4.1
+353.5 1.2
+356.1 3.0
+357.0 1.2
+359.3 3.0
+360.0 13.3
+363.7 1.6
+365.4 2.7
+374.4 4.6
+379.4 5.4
+381.1 1.7
+387.0 2.2
+388.6 4.1
+393.2 1.5
+394.9 3.0
+397.9 9.8
+399.2 14.8
+401.3 3.2
+402.4 2.4
+403.9 59.9
+404.7 6.1
+409.4 13.0
+411.2 1.7
+416.0 7.0
+417.2 4.4
+420.5 1.2
+422.9 4.1
+425.3 2.5
+426.3 3.0
+429.1 2.0
+430.3 8.6
+431.0 3.5
+434.2 20.8
+435.3 44.5
+436.3 12.8
+437.0 2.9
+443.5 39.2
+444.6 21.7
+475.4 2.9
+501.5 5.1
+508.3 3.5
+513.4 6.0
+517.6 2.5
+518.3 1.1
+530.5 4.0
+532.4 3.2
+548.6 11.8
+549.3 1.0
+556.9 4.3
+561.4 1.3
+565.4 1.7
+581.3 3.5
+606.0 2.7
+645.6 2.2
+656.6 1.2
+660.2 2.5
+661.2 5.6
+665.4 3.0
+666.2 5.1
+676.6 3.4
+677.4 2.0
+678.4 30.5
+688.5 1.2
+720.5 6.1
+747.3 1.5
+758.3 3.7
+760.3 1.7
+776.3 1.6
+799.4 2.5
+800.2 4.0
+817.4 1.7
+S	144	144	497.29
+Z	3	1489.85
+148.3 23.5
+155.2 31.3
+169.1 31.2
+170.3 28.7
+172.1 52.1
+173.0 109.0
+199.3 59.7
+201.3 26.1
+234.2 150.5
+242.3 95.9
+243.4 34.0
+259.9 31.3
+262.2 194.2
+263.8 96.0
+267.2 44.2
+272.6 39.0
+283.1 23.6
+294.2 75.3
+313.0 44.8
+317.2 302.6
+320.7 64.9
+329.3 354.0
+330.1 26.0
+338.9 328.6
+340.1 23.5
+340.9 114.4
+341.8 46.8
+343.9 196.6
+345.1 52.6
+352.7 433.8
+354.5 41.7
+355.3 39.3
+361.4 21.0
+363.4 29.2
+365.1 39.0
+375.5 57.1
+376.5 83.2
+379.2 63.4
+384.2 31.3
+384.9 273.6
+389.0 200.9
+392.5 21.1
+393.8 788.6
+399.0 54.7
+405.3 52.0
+406.3 64.9
+408.0 73.2
+408.8 208.8
+414.8 134.7
+416.3 397.0
+417.3 366.5
+420.2 90.7
+423.0 64.9
+423.7 268.7
+425.4 28.7
+426.2 28.7
+434.5 68.0
+438.7 191.6
+439.9 36.5
+443.4 134.8
+445.5 111.6
+450.4 31.3
+451.7 69.4
+452.3 326.4
+453.3 23.5
+454.3 163.2
+456.3 29.3
+458.9 121.7
+460.5 493.0
+461.3 66.7
+462.3 155.6
+466.1 57.5
+467.9 33.9
+469.9 145.2
+471.9 90.9
+472.7 31.5
+473.8 219.6
+474.6 266.7
+476.7 133.6
+477.3 93.7
+479.1 292.2
+481.1 431.7
+482.4 379.5
+483.4 143.6
+484.2 501.3
+485.1 349.5
+485.9 184.6
+486.6 458.5
+487.5 98.0
+488.2 199.0
+504.0 111.4
+511.2 59.8
+512.2 59.8
+516.0 67.5
+516.7 57.1
+525.3 191.9
+526.4 33.9
+527.5 158.1
+528.8 62.3
+529.4 78.1
+530.8 78.2
+531.4 108.9
+537.9 132.0
+540.9 76.5
+544.4 870.9
+545.4 177.0
+552.7 165.8
+555.7 59.7
+557.9 133.7
+563.6 59.7
+569.3 85.6
+571.6 197.5
+572.3 33.8
+573.9 179.4
+574.7 36.4
+577.9 390.3
+579.5 39.0
+582.2 292.2
+585.1 121.8
+587.2 1020.2
+588.0 197.5
+589.5 116.6
+590.6 36.4
+595.2 503.7
+596.0 33.3
+597.3 769.3
+598.1 166.9
+601.5 209.7
+605.2 596.1
+606.3 98.6
+607.1 140.5
+608.4 41.7
+609.7 49.5
+610.5 283.6
+611.4 26.1
+615.0 711.5
+615.6 549.6
+616.8 26.2
+618.3 80.8
+619.4 204.6
+621.3 156.3
+624.9 52.3
+627.3 29.0
+632.3 36.4
+635.8 675.1
+636.6 191.4
+638.4 28.8
+640.5 212.9
+641.7 96.4
+644.2 638.7
+645.1 598.4
+645.8 64.9
+647.4 39.1
+650.3 18.8
+653.5 62.4
+654.2 20.9
+656.9 39.3
+657.6 678.0
+658.5 381.4
+663.1 62.8
+664.3 73.0
+668.7 21.2
+669.9 31.3
+672.2 243.7
+672.9 98.6
+675.0 75.4
+679.5 75.2
+681.3 26.4
+685.3 78.0
+686.4 305.4
+687.5 28.9
+688.2 64.9
+693.6 77.9
+704.3 568.6
+705.0 50.5
+707.8 147.7
+709.2 73.3
+716.4 181.3
+717.6 46.8
+719.2 98.5
+726.3 31.3
+744.1 33.9
+756.3 65.0
+758.2 54.5
+764.3 52.6
+766.1 36.5
+768.8 65.1
+769.6 49.3
+772.7 63.1
+779.6 67.6
+786.6 1868.3
+787.6 64.8
+799.6 44.4
+815.3 93.4
+816.2 116.4
+817.2 26.6
+829.1 26.2
+833.3 825.2
+834.1 49.1
+838.6 66.0
+867.0 96.2
+879.6 64.9
+885.9 59.8
+911.7 70.1
+912.6 34.0
+929.2 70.9
+943.5 23.5
+944.3 75.2
+1039.6 44.2
+1074.5 103.7
+1081.8 49.5
+1196.6 99.3
+1231.5 46.9
+1342.8 31.4
+S	145	145	717.06
+I	ID	226
+I	RTime	11.1652
+Z	1	717.06
+199.9 2.9
+213.0 1.8
+226.3 2.0
+228.4 1.2
+229.3 3.5
+242.1 1.8
+253.1 2.4
+254.2 2.4
+258.1 1.5
+259.1 3.2
+270.2 1.6
+272.2 1.0
+275.3 2.5
+276.2 2.7
+277.2 2.0
+286.3 5.8
+295.4 1.5
+299.5 1.2
+303.1 3.0
+309.2 4.5
+310.0 3.0
+312.1 3.9
+313.3 2.4
+314.5 2.2
+317.2 5.0
+317.9 1.6
+319.2 2.0
+325.1 2.2
+326.2 3.4
+326.9 2.5
+328.3 1.7
+329.3 2.0
+330.3 2.0
+331.2 2.4
+332.5 1.7
+337.1 1.2
+340.1 1.1
+342.0 2.7
+343.1 6.4
+347.4 1.2
+352.5 1.3
+353.2 2.5
+357.3 2.0
+361.3 2.2
+367.2 1.7
+368.4 6.5
+369.5 9.5
+370.2 1.3
+380.1 1.3
+381.5 4.4
+387.3 4.1
+395.3 1.0
+400.3 1.6
+402.9 3.5
+411.3 3.2
+412.9 2.9
+415.0 3.5
+419.2 2.9
+422.3 3.5
+423.1 4.1
+425.0 1.2
+429.4 2.9
+431.5 2.5
+438.1 5.5
+439.9 4.6
+441.2 4.0
+442.5 3.2
+453.4 1.3
+455.0 1.2
+458.3 17.8
+459.2 5.8
+460.4 3.9
+464.4 1.2
+468.4 1.6
+470.3 2.2
+471.3 6.5
+474.7 6.0
+475.4 10.0
+481.4 3.2
+484.3 1.3
+486.4 2.9
+487.2 2.5
+489.4 5.0
+490.2 2.4
+491.4 1.0
+495.9 2.0
+500.3 2.2
+502.2 6.8
+504.5 1.6
+508.4 2.2
+524.1 3.0
+525.5 2.0
+526.3 1.2
+528.9 1.3
+531.4 1.1
+532.5 5.0
+536.3 5.5
+539.0 5.1
+542.1 3.2
+543.3 1.2
+545.2 2.2
+551.5 2.5
+552.4 3.4
+553.2 9.8
+556.6 6.3
+558.2 3.0
+559.3 7.5
+566.0 3.2
+568.6 2.2
+570.2 6.5
+572.3 5.5
+587.4 7.0
+588.3 8.8
+589.2 15.5
+593.5 1.1
+600.3 4.9
+602.3 2.0
+603.3 3.2
+604.7 4.3
+610.0 6.3
+618.6 7.3
+619.3 2.2
+623.9 3.7
+625.6 1.1
+633.2 3.0
+647.2 1.2
+650.3 4.3
+652.3 3.5
+655.6 2.7
+656.6 3.0
+664.5 8.6
+670.7 8.3
+672.6 1.2
+674.4 5.4
+675.6 10.5
+680.4 3.7
+681.4 8.6
+682.2 12.6
+683.5 6.6
+698.6 15.3
+699.4 70.0
+700.4 46.2
+707.6 9.6
+708.5 11.0
+815.4 1.3
+816.5 1.3
+824.4 3.0
+973.5 2.7
+974.3 10.6
+1018.2 2.0
+1041.4 1.2
+1059.5 1.7
+1152.4 1.7
+1228.6 6.3
+1259.8 2.7
+S	146	146	692.68
+Z	2	1384.35
+198.9 92.5
+200.5 45.5
+201.1 27.0
+204.2 1072.5
+205.1 320.7
+207.2 18.4
+209.4 43.6
+211.1 32.8
+216.2 64.1
+217.2 263.2
+219.3 28.8
+224.3 37.6
+225.4 66.0
+226.2 291.3
+227.3 26.5
+232.2 31.0
+234.5 68.7
+236.2 33.3
+237.3 113.7
+240.3 84.5
+241.3 287.9
+242.1 233.7
+243.1 50.3
+244.0 135.9
+245.2 78.9
+246.2 46.3
+247.2 96.7
+248.2 104.5
+250.4 57.4
+252.3 99.8
+254.2 160.2
+255.9 81.4
+259.2 410.7
+260.2 243.1
+261.7 217.6
+262.3 2117.3
+263.4 106.4
+264.2 59.4
+266.0 50.0
+267.2 43.7
+271.9 89.2
+275.0 167.9
+276.3 35.8
+277.2 139.7
+280.2 140.4
+282.2 61.8
+284.3 12.4
+286.1 49.2
+287.1 26.4
+288.2 98.3
+290.4 35.3
+294.2 20.3
+296.2 39.0
+297.3 77.8
+298.3 46.0
+300.3 137.5
+301.2 31.8
+302.2 61.9
+303.4 68.8
+304.3 119.5
+305.4 93.2
+306.8 19.1
+308.2 50.8
+310.0 20.9
+311.4 86.0
+312.4 54.9
+313.1 20.4
+314.1 493.9
+315.3 1824.6
+316.2 202.0
+317.2 32.3
+318.3 62.2
+320.1 20.3
+323.3 56.1
+324.2 79.2
+325.0 50.6
+326.2 41.9
+327.2 64.9
+328.2 270.3
+329.5 123.1
+331.0 46.8
+332.2 195.9
+333.2 1920.3
+334.3 290.0
+335.2 175.3
+337.3 18.5
+338.4 45.9
+341.7 81.3
+343.3 43.8
+344.3 154.3
+345.5 124.3
+346.3 171.5
+347.2 23.3
+349.1 80.0
+351.2 24.9
+353.2 560.4
+354.4 395.0
+355.3 73.8
+357.2 37.9
+358.4 130.5
+359.4 146.7
+360.6 208.4
+361.4 176.7
+362.1 20.1
+363.2 61.3
+364.3 377.0
+368.2 103.4
+369.3 17.7
+371.1 1228.2
+372.3 1149.1
+373.3 1005.0
+374.4 88.1
+375.0 30.3
+375.7 67.8
+378.3 133.9
+379.2 41.1
+381.7 26.4
+383.2 139.5
+384.2 21.8
+386.2 21.2
+388.1 55.6
+389.2 1377.2
+390.3 2086.0
+391.3 152.1
+394.4 25.2
+396.2 19.1
+397.2 88.0
+399.4 183.2
+400.3 44.7
+401.2 99.3
+402.7 60.9
+404.0 81.8
+404.9 31.7
+406.5 35.8
+407.5 212.3
+408.4 32.7
+409.3 58.7
+410.5 10.2
+411.2 207.5
+412.2 17.7
+413.0 51.8
+414.2 100.4
+415.3 148.4
+416.2 25.0
+417.4 25.7
+419.2 26.5
+420.2 142.1
+422.1 26.7
+425.1 382.2
+426.4 151.8
+428.3 145.1
+429.4 75.9
+430.1 93.6
+431.4 198.8
+432.3 275.9
+433.4 292.8
+438.4 55.1
+440.4 50.9
+441.7 101.3
+443.3 1498.8
+444.2 435.4
+445.2 167.6
+446.4 3014.2
+447.3 438.8
+448.2 208.5
+449.2 142.8
+451.5 46.4
+453.2 103.6
+454.2 24.0
+455.4 71.8
+456.4 81.5
+458.3 178.7
+459.4 188.9
+461.3 12968.0
+462.4 1368.9
+463.4 106.7
+466.8 32.4
+467.4 189.0
+468.3 22.4
+469.3 59.1
+470.8 397.8
+471.6 14.2
+473.3 177.1
+474.4 162.2
+475.1 12.0
+476.6 81.1
+478.4 55.1
+479.4 270.7
+480.2 102.2
+482.1 56.3
+483.3 155.1
+484.3 140.1
+485.5 41.7
+487.3 113.7
+491.4 62.1
+494.3 50.3
+495.4 51.0
+496.7 82.9
+498.3 132.7
+500.1 785.1
+501.2 141.6
+502.2 98.7
+503.1 27.2
+504.3 104.2
+505.6 61.9
+508.3 515.0
+509.3 37.6
+510.2 60.4
+512.3 421.6
+513.3 139.9
+514.3 18.4
+516.0 42.0
+516.7 57.9
+518.2 1144.7
+519.2 408.8
+520.5 88.0
+523.1 227.4
+523.8 146.8
+525.4 69.4
+526.5 48.0
+528.4 259.5
+530.4 1307.5
+531.4 274.8
+532.5 85.0
+534.8 94.3
+535.6 239.8
+536.4 1256.4
+537.2 196.7
+538.4 313.5
+540.3 164.0
+541.4 49.1
+542.5 85.7
+543.4 43.8
+544.5 276.2
+545.4 63.5
+546.0 165.7
+547.6 153.1
+548.4 75.2
+549.4 104.0
+550.4 112.4
+551.3 23.6
+554.7 161.9
+556.4 114.9
+557.4 136.4
+558.1 59.6
+559.4 35.5
+560.4 186.8
+561.4 482.8
+562.4 275.3
+564.5 71.7
+565.6 56.9
+566.3 175.0
+568.8 183.5
+570.6 44.4
+571.6 343.3
+574.3 4212.2
+575.4 4053.3
+576.5 948.0
+577.4 112.4
+578.5 121.2
+579.5 283.0
+580.4 63.9
+581.6 303.2
+582.5 284.7
+583.5 333.5
+584.6 67.0
+585.7 77.0
+587.2 54.5
+587.8 150.8
+588.7 241.5
+589.5 184.5
+590.6 2218.1
+591.3 372.4
+592.1 141.0
+594.3 51.6
+595.2 65.2
+597.0 3165.6
+597.9 539.9
+599.3 3491.7
+600.0 2279.4
+600.8 562.1
+601.9 120.7
+603.1 223.5
+603.9 217.0
+605.8 7553.3
+606.5 1737.7
+607.2 273.2
+608.4 169.0
+609.4 619.2
+610.7 742.4
+612.2 207.9
+613.8 640.9
+614.7 79.3
+616.6 234.5
+618.5 289.0
+619.3 515.5
+620.3 544.4
+621.3 54.7
+622.8 73.5
+624.5 348.6
+625.6 330.6
+626.5 512.6
+627.5 319.3
+628.5 371.1
+629.2 128.7
+630.6 220.6
+631.4 243.1
+632.7 464.8
+633.5 698.7
+634.4 309.1
+635.2 480.7
+636.6 175.3
+637.4 194.5
+638.9 210.3
+639.5 157.5
+640.4 136.1
+641.5 159.3
+642.3 226.9
+643.4 80.8
+644.3 686.4
+645.4 2000.9
+646.4 598.8
+647.5 256.5
+648.6 303.2
+649.9 229.5
+650.7 516.2
+651.4 1410.5
+652.4 387.7
+654.1 87.3
+655.7 1375.0
+656.5 1591.0
+657.3 152.2
+658.3 220.7
+659.4 709.9
+660.1 509.6
+661.2 1329.7
+662.0 49.3
+663.1 97.0
+664.2 671.7
+665.1 434.3
+666.1 334.4
+667.9 170.5
+668.9 511.8
+669.6 282.9
+670.2 147.9
+670.9 35.1
+671.9 191.3
+673.2 1370.3
+673.9 2992.9
+674.5 2544.4
+675.5 736.3
+676.3 193.0
+677.6 194.7
+679.0 157.9
+679.9 254.2
+681.0 458.9
+682.3 7235.5
+683.1 25157.5
+684.0 1432.3
+685.2 281.0
+686.1 40.7
+686.8 36.5
+687.5 24.8
+694.5 17.1
+700.0 78.2
+702.1 686.2
+703.4 234.8
+704.5 189.9
+705.7 61.5
+706.5 97.6
+707.6 114.0
+709.4 315.5
+710.3 38.2
+713.1 44.0
+714.6 259.2
+715.6 142.6
+716.7 139.6
+717.5 76.4
+718.5 164.4
+719.7 424.3
+720.5 541.6
+721.4 95.3
+722.2 74.6
+723.5 143.5
+726.6 141.7
+727.5 57.4
+729.4 58.9
+730.3 321.4
+732.4 5006.4
+733.6 875.9
+734.4 563.1
+735.3 684.1
+736.4 283.8
+738.3 2388.5
+739.5 1153.6
+740.3 106.8
+742.9 535.7
+745.7 413.6
+746.7 88.1
+748.4 191.1
+749.3 222.4
+750.3 554.7
+751.1 162.0
+752.3 172.5
+753.6 28.1
+755.2 241.1
+756.2 62.1
+757.6 468.7
+758.5 199.3
+761.0 93.3
+761.6 30.0
+763.0 94.9
+764.4 72.8
+766.0 168.5
+767.8 119.0
+769.1 56.9
+770.0 175.2
+772.3 493.3
+773.3 642.9
+774.3 333.7
+775.2 347.2
+776.9 202.0
+778.6 48.9
+779.5 258.7
+780.2 148.4
+781.2 129.8
+784.6 99.9
+785.6 161.3
+787.2 35.0
+789.3 340.8
+790.3 1234.2
+791.3 1918.0
+792.5 614.3
+793.7 124.4
+794.5 36.8
+796.6 41.2
+798.2 144.0
+800.4 24.7
+802.3 176.6
+803.5 366.5
+804.4 132.7
+805.4 98.5
+806.7 500.0
+807.5 1235.7
+808.3 369.1
+809.3 1958.1
+810.4 465.3
+811.5 286.2
+812.3 230.9
+813.6 31.5
+814.7 88.1
+815.5 73.9
+816.3 147.3
+817.5 78.6
+819.6 87.8
+820.5 416.9
+821.4 400.1
+824.4 167.5
+825.6 85.3
+826.5 117.0
+829.8 373.6
+830.6 182.5
+832.2 71.8
+833.6 274.4
+835.6 201.4
+836.3 18.8
+837.6 145.4
+839.4 151.7
+840.6 93.5
+842.1 86.4
+842.8 154.3
+843.6 33.0
+844.4 110.0
+845.9 47.2
+847.5 6821.9
+848.5 1883.3
+849.3 124.0
+850.6 40.9
+851.6 314.9
+852.5 2233.5
+853.5 2049.4
+854.6 513.2
+858.0 65.6
+858.7 92.3
+859.5 66.1
+860.1 19.8
+861.3 49.2
+862.8 67.1
+868.0 137.9
+868.9 53.8
+870.5 38.0
+872.1 40.5
+873.6 79.4
+874.7 217.7
+875.6 265.3
+877.3 181.8
+878.3 479.3
+879.8 222.7
+880.6 11.9
+881.8 21.5
+882.8 41.4
+886.2 1714.0
+887.2 265.8
+888.4 65.0
+889.5 146.7
+892.4 66.1
+894.4 123.4
+898.4 65.2
+900.0 165.3
+901.4 393.3
+902.3 167.4
+904.3 3886.9
+905.3 1523.3
+906.4 226.9
+907.2 149.4
+908.5 114.0
+909.5 19.1
+910.6 176.9
+911.4 46.2
+912.8 64.9
+914.1 76.8
+915.0 187.4
+916.0 35.8
+917.1 83.0
+918.2 449.9
+919.4 1273.9
+920.5 671.1
+922.4 7456.8
+923.4 1897.2
+924.7 283.2
+928.1 75.4
+931.9 303.0
+932.5 111.9
+933.7 183.8
+934.5 18.8
+936.4 1343.8
+937.3 1069.5
+938.8 1064.4
+939.5 5239.4
+940.5 3319.7
+941.5 1127.1
+942.4 194.3
+945.8 25.0
+947.3 111.9
+948.5 213.3
+949.4 356.1
+950.5 46.9
+951.9 37.4
+954.3 42.5
+956.4 256.4
+957.3 384.8
+958.5 609.5
+959.5 185.9
+960.1 15.3
+962.7 55.1
+963.6 87.2
+968.1 169.7
+969.4 74.1
+971.5 132.9
+975.3 2002.4
+976.3 1119.9
+977.3 845.2
+978.5 305.3
+979.4 100.2
+981.2 364.3
+981.9 38.1
+986.6 33.2
+987.5 117.1
+989.1 62.8
+993.4 2751.4
+994.5 9096.5
+995.5 2366.4
+996.3 279.5
+997.2 138.6
+999.7 44.3
+1000.5 33.4
+1002.8 62.1
+1004.6 113.9
+1007.5 21.3
+1009.4 113.8
+1010.5 269.7
+1011.7 90.4
+1014.3 375.7
+1015.7 84.9
+1018.3 40.7
+1019.3 62.1
+1021.7 57.6
+1023.2 99.2
+1025.4 106.0
+1027.4 87.2
+1030.0 90.5
+1031.4 415.7
+1032.5 960.2
+1033.5 837.7
+1034.3 76.6
+1035.9 133.2
+1037.0 99.1
+1037.7 257.0
+1038.4 169.1
+1047.3 70.6
+1049.4 2546.4
+1050.4 1673.5
+1051.5 692.9
+1052.6 591.6
+1053.4 36.0
+1054.6 65.1
+1057.6 41.2
+1059.3 80.5
+1059.9 62.9
+1060.7 70.4
+1061.5 259.7
+1063.1 71.2
+1064.5 291.8
+1065.5 167.2
+1066.7 29.4
+1067.4 47.6
+1068.5 5412.6
+1069.5 3715.4
+1070.5 672.5
+1071.6 53.7
+1074.4 44.7
+1077.7 104.4
+1078.6 63.1
+1082.7 230.1
+1083.6 340.9
+1084.5 236.2
+1085.6 92.1
+1086.7 387.0
+1087.6 194.0
+1089.8 156.7
+1090.9 62.4
+1091.6 69.0
+1092.7 89.2
+1094.6 97.1
+1095.3 25.0
+1097.8 43.2
+1103.5 823.8
+1104.5 383.3
+1105.4 260.2
+1106.0 76.4
+1107.7 72.0
+1108.8 27.9
+1111.8 59.3
+1116.3 16.9
+1117.9 37.4
+1118.7 131.8
+1121.4 3006.5
+1122.5 1563.0
+1123.6 1715.0
+1124.7 1249.1
+1125.6 17.6
+1126.7 31.8
+1131.5 32.2
+1132.6 118.2
+1134.7 61.8
+1135.9 28.2
+1137.7 121.3
+1140.2 106.9
+1142.6 62.4
+1143.4 88.6
+1144.3 174.3
+1146.5 28.0
+1147.7 21.7
+1148.7 105.0
+1151.6 103.8
+1154.9 99.2
+1156.9 57.3
+1160.4 581.4
+1161.4 1384.3
+1162.4 713.1
+1163.4 229.0
+1165.7 174.8
+1166.8 18.0
+1167.6 129.8
+1168.5 21.7
+1169.5 67.2
+1170.6 89.2
+1178.4 4996.5
+1179.5 3805.6
+1180.5 1026.4
+1181.5 311.6
+1182.9 66.7
+1184.6 38.6
+1188.5 20.1
+1190.5 31.6
+1191.8 69.1
+1192.6 131.6
+1193.3 101.2
+1194.6 170.5
+1197.5 3669.4
+1198.6 3270.5
+1199.7 399.0
+1200.8 140.7
+1205.0 43.0
+1206.9 170.2
+1207.8 48.8
+1210.6 6246.0
+1211.6 2004.1
+1212.7 229.1
+1216.6 60.9
+1217.4 147.5
+1218.6 236.4
+1219.5 171.5
+1220.7 38.0
+1233.6 122.2
+1234.5 226.9
+1235.4 686.8
+1236.5 1880.7
+1237.4 495.6
+1238.3 34.3
+1239.7 81.5
+1247.1 65.3
+1248.8 29.4
+1252.3 81.3
+1253.2 38.7
+1254.5 41.9
+1255.9 18.5
+1268.7 60.3
+1271.4 28.1
+1283.9 62.9
+1320.6 50.0
+1323.1 35.5
+1374.6 25.1
+S	147	147	614.58
+Z	2	1228.15
+175.1 15.3
+179.1 1228.8
+180.0 36.5
+183.0 23.7
+184.1 26.2
+185.1 24.7
+186.3 11.0
+191.2 10.1
+193.1 30.6
+195.1 9.3
+197.0 212.6
+198.0 40.2
+199.3 5.8
+201.2 22.0
+205.2 78.1
+207.3 8.6
+209.0 25.2
+211.1 22.7
+212.3 20.1
+213.2 13.6
+214.4 61.4
+215.2 283.2
+216.1 74.5
+217.1 42.0
+219.2 72.5
+225.2 26.2
+227.2 129.5
+229.2 84.1
+231.2 26.5
+233.1 191.1
+233.8 23.2
+238.0 15.8
+240.2 19.0
+241.1 40.2
+242.3 10.3
+244.2 133.0
+245.4 32.2
+251.1 79.0
+253.2 19.0
+254.1 43.2
+255.0 238.1
+256.2 80.4
+257.1 32.7
+258.3 51.4
+259.2 9.8
+260.1 56.0
+261.3 20.7
+263.3 38.0
+264.2 8.5
+265.2 17.1
+267.3 29.2
+268.1 6.9
+269.2 84.5
+273.1 142.6
+273.9 9.1
+275.3 15.3
+276.3 7.0
+278.2 16.3
+281.1 43.2
+283.0 56.0
+285.2 77.0
+290.0 9.3
+291.2 107.5
+292.0 11.0
+293.0 6.0
+294.9 19.8
+298.2 8.3
+299.1 125.9
+300.2 38.5
+301.5 28.2
+303.0 22.7
+304.6 10.1
+306.0 18.1
+308.1 22.8
+309.2 266.2
+310.5 19.2
+311.4 11.6
+313.2 280.0
+314.2 12.8
+314.9 25.0
+316.3 51.7
+317.1 119.3
+318.9 14.3
+320.3 16.5
+322.3 47.9
+324.3 13.6
+325.3 14.6
+327.0 1036.5
+328.0 76.9
+329.2 117.4
+331.3 27.2
+332.1 16.5
+333.2 94.8
+334.0 12.6
+335.0 123.5
+337.4 51.2
+338.0 20.6
+339.1 63.4
+341.2 96.1
+342.1 104.6
+343.3 156.0
+344.0 38.5
+345.2 593.2
+346.3 38.9
+347.2 39.9
+348.9 122.3
+350.1 11.6
+351.3 12.5
+354.1 153.5
+355.1 74.0
+355.9 67.9
+357.2 1407.0
+358.3 279.8
+359.2 38.7
+359.9 27.2
+361.1 103.9
+363.1 727.2
+364.0 5.5
+365.6 34.7
+367.2 168.1
+368.3 12.3
+369.2 30.8
+371.3 91.4
+372.2 22.3
+373.3 191.1
+374.1 24.8
+375.5 7.5
+376.3 20.7
+377.3 12.6
+378.0 16.2
+379.1 156.5
+380.0 39.0
+381.8 22.2
+383.2 152.3
+385.1 2612.8
+386.2 399.7
+387.2 90.6
+388.7 16.5
+389.3 86.1
+390.3 38.4
+391.6 12.6
+393.0 9.6
+395.3 21.2
+397.2 323.3
+398.3 26.3
+399.3 38.7
+400.4 91.5
+401.2 541.7
+402.2 116.0
+403.5 101.6
+404.5 20.8
+405.3 16.3
+407.3 43.2
+408.3 16.5
+409.3 12.6
+410.2 56.0
+411.4 50.4
+413.4 16.2
+415.3 42.9
+417.1 35.7
+419.2 49.0
+422.2 25.7
+423.2 75.6
+424.2 24.7
+425.2 44.2
+428.8 21.2
+430.7 57.5
+431.8 24.2
+433.3 512.2
+434.3 56.0
+437.1 11.8
+438.4 30.8
+440.2 8.1
+441.4 156.0
+442.3 39.9
+443.4 107.0
+447.3 224.0
+448.2 39.7
+449.1 73.4
+451.4 15.3
+452.1 10.8
+453.0 19.0
+455.2 66.9
+456.4 202.1
+457.3 9.0
+459.4 38.7
+460.4 133.8
+461.0 17.3
+462.5 48.9
+463.2 26.2
+465.0 26.5
+466.1 47.2
+467.3 141.1
+468.5 87.8
+469.4 157.1
+470.2 7.5
+471.3 385.0
+472.5 56.9
+473.6 69.6
+474.4 33.2
+475.0 8.8
+477.1 326.8
+478.0 36.7
+479.2 106.9
+480.5 47.7
+481.4 46.0
+484.3 10.0
+485.4 12.8
+487.3 485.2
+488.4 74.3
+489.3 421.7
+490.4 103.6
+491.3 101.0
+493.6 153.5
+494.6 5.6
+495.3 55.9
+496.4 25.8
+497.4 78.5
+498.2 232.6
+499.2 314.1
+500.2 128.3
+501.1 123.0
+502.2 34.0
+503.1 93.9
+503.8 11.6
+505.1 113.5
+508.2 64.8
+509.2 324.0
+510.4 98.0
+513.1 247.1
+514.0 156.8
+515.2 19.2
+517.3 155.3
+518.6 191.3
+519.4 14.1
+521.2 39.4
+522.3 43.2
+523.0 5.0
+524.1 44.4
+525.3 170.6
+526.3 15.6
+527.3 475.7
+528.3 28.1
+529.3 32.7
+530.8 343.2
+531.4 480.3
+532.2 126.0
+533.3 33.2
+534.1 9.0
+535.0 117.8
+536.5 38.5
+537.3 52.0
+539.2 209.3
+540.2 720.0
+541.0 261.8
+542.7 11.1
+543.3 149.6
+544.4 168.1
+545.6 86.5
+546.5 26.0
+547.6 52.4
+549.4 893.2
+550.3 119.9
+551.4 79.0
+552.3 78.1
+553.4 233.1
+554.5 112.5
+555.3 19.1
+556.3 151.8
+557.3 186.0
+558.3 124.0
+560.3 109.6
+561.3 576.5
+562.2 68.5
+564.5 14.5
+565.5 136.6
+566.8 123.9
+568.4 326.2
+569.3 161.6
+570.3 185.3
+571.4 560.7
+572.5 165.1
+573.1 184.3
+574.5 247.8
+575.4 369.0
+577.8 316.7
+578.4 148.3
+579.3 475.7
+580.1 48.4
+581.4 370.6
+583.2 965.7
+584.0 750.0
+584.7 112.6
+585.4 186.1
+586.8 362.6
+587.6 645.5
+588.7 63.4
+590.4 2135.3
+592.2 6666.3
+592.9 2467.3
+593.9 137.6
+595.4 934.9
+596.4 3312.8
+597.4 748.0
+599.2 2026.6
+599.9 800.7
+601.1 366.0
+602.3 78.1
+603.0 15.1
+605.2 15364.2
+605.9 5292.8
+606.6 1431.0
+607.8 15.6
+617.1 12.3
+620.0 40.0
+621.6 35.0
+623.2 27.3
+625.3 35.7
+626.4 95.4
+627.3 402.2
+628.3 53.2
+629.1 39.0
+631.2 925.4
+632.2 151.3
+633.6 93.3
+635.6 19.1
+637.4 86.9
+638.3 14.6
+642.4 23.7
+643.5 15.8
+645.5 6.0
+646.2 10.1
+647.0 26.2
+647.7 33.5
+648.5 42.0
+649.4 150.3
+650.4 50.9
+655.3 29.8
+657.1 88.0
+658.8 11.1
+659.7 82.5
+660.5 113.1
+661.2 165.1
+662.5 89.9
+663.3 57.0
+665.4 43.2
+667.5 12.5
+668.4 27.2
+669.6 54.4
+671.4 149.6
+672.3 30.6
+673.4 382.7
+674.4 166.8
+675.4 10.3
+676.3 20.8
+679.8 16.6
+681.5 11.1
+683.5 18.6
+684.4 6.0
+685.5 43.0
+686.7 73.9
+687.5 232.6
+688.4 251.6
+689.3 971.5
+690.4 346.8
+691.5 29.2
+693.7 12.6
+694.4 37.2
+695.2 34.2
+696.2 12.3
+697.2 29.3
+698.3 16.0
+700.1 8.1
+701.2 377.2
+702.3 116.8
+703.3 16.3
+704.5 53.0
+705.4 103.1
+706.3 61.2
+707.3 87.3
+708.4 12.1
+710.2 28.5
+711.6 155.0
+712.4 46.5
+715.2 228.8
+716.4 81.0
+718.2 9.3
+719.4 51.4
+720.7 113.0
+721.5 7.5
+722.2 25.5
+723.6 23.0
+725.1 24.6
+727.6 20.1
+728.4 30.6
+729.4 437.2
+730.3 198.8
+731.4 30.2
+732.5 264.3
+733.3 2286.3
+734.3 727.7
+735.4 124.5
+743.0 53.5
+751.3 171.3
+752.5 22.2
+754.2 29.7
+756.2 7.4
+759.3 42.5
+769.4 31.7
+771.3 10.3
+772.4 24.6
+773.3 36.2
+774.6 35.7
+779.5 5.9
+785.1 31.0
+785.7 39.2
+786.7 39.5
+787.4 38.5
+789.5 5.3
+790.2 47.5
+792.6 15.3
+793.2 50.5
+798.5 25.7
+799.6 24.5
+800.6 48.4
+801.4 37.5
+803.3 875.0
+804.4 308.0
+805.4 67.0
+806.4 7.4
+807.5 6.8
+808.8 6.0
+812.4 16.2
+813.4 51.9
+814.3 25.5
+816.8 81.5
+817.5 26.1
+821.6 50.0
+822.8 27.2
+825.4 313.2
+826.4 52.7
+827.4 24.0
+828.4 59.5
+829.4 217.1
+830.3 102.1
+831.4 834.7
+832.3 312.7
+833.4 26.2
+834.4 14.0
+835.4 69.8
+836.6 11.5
+837.6 14.3
+839.4 31.7
+840.5 38.5
+841.4 37.2
+843.4 3634.1
+844.4 1543.1
+845.4 254.1
+846.5 157.6
+847.4 984.2
+848.5 482.1
+849.4 265.7
+850.3 161.6
+851.3 26.3
+857.6 47.2
+858.3 31.3
+865.3 75.6
+869.1 12.5
+873.4 69.1
+875.8 11.1
+876.5 77.3
+877.3 40.5
+880.3 8.5
+883.2 9.5
+884.3 15.5
+885.5 6.9
+887.5 29.3
+889.2 93.9
+891.4 480.1
+892.4 102.6
+893.3 8.0
+894.5 19.3
+897.5 6.5
+901.5 134.3
+902.3 43.7
+903.5 20.3
+907.5 54.4
+911.5 19.0
+913.3 44.9
+914.3 10.5
+915.5 12.1
+916.5 7.9
+918.8 246.0
+919.4 692.2
+920.4 385.1
+921.5 33.2
+922.5 11.3
+927.8 30.0
+929.4 13.8
+933.1 133.8
+934.3 180.6
+935.4 26.7
+936.4 45.2
+937.0 93.1
+937.7 53.7
+938.7 34.0
+941.3 8.6
+942.6 70.0
+944.2 40.2
+948.2 34.4
+949.4 39.5
+950.4 30.5
+952.4 15.6
+954.4 14.6
+956.0 44.5
+957.4 15.1
+959.5 79.9
+960.4 50.5
+961.5 6.5
+962.4 51.7
+969.3 42.0
+973.5 109.0
+974.8 76.8
+975.4 54.5
+976.6 116.3
+977.4 444.0
+978.6 131.8
+979.3 13.0
+985.2 19.8
+987.6 59.5
+991.3 21.2
+992.5 85.0
+993.5 23.8
+994.6 22.1
+995.4 74.3
+1001.6 67.6
+1003.4 113.8
+1004.4 106.5
+1005.6 220.5
+1006.5 101.5
+1007.5 93.0
+1008.2 18.3
+1009.5 10.3
+1012.7 23.3
+1013.4 122.0
+1014.3 60.4
+1015.6 33.0
+1018.8 116.0
+1019.5 378.1
+1020.5 329.5
+1021.4 2229.1
+1022.4 954.2
+1023.5 387.7
+1024.8 55.0
+1031.3 1171.4
+1032.3 430.7
+1033.5 151.8
+1034.4 6.5
+1035.3 68.9
+1036.2 98.6
+1037.3 43.5
+1038.5 38.4
+1047.7 157.6
+1048.5 1219.0
+1049.4 8415.9
+1050.3 4427.1
+1051.4 1148.6
+1052.5 103.5
+1053.1 4.5
+1056.4 20.7
+1061.3 37.5
+1065.0 26.8
+1066.6 289.2
+1067.5 1958.6
+1068.4 1101.4
+1069.4 213.6
+1070.6 17.5
+1078.5 18.3
+1079.7 137.6
+1080.8 63.7
+1082.7 15.8
+1152.7 10.6
+1161.3 8.8
+1162.7 9.6
+1164.1 12.0
+1164.7 23.0
+1165.6 28.7
+1171.4 37.5
+1187.5 72.1
+1191.5 360.5
+1205.3 466.6
+1206.5 344.0
+1207.4 19.1
+1208.4 11.5
+S	148	148	713.07
+I	ID	204
+I	RTime	10.0689
+Z	1	713.07
+234.5 1.5
+256.7 2.5
+275.2 4.3
+284.4 1.7
+287.3 2.4
+291.1 1.2
+292.4 12.3
+293.3 2.5
+310.0 1.7
+331.2 2.4
+338.3 2.4
+380.1 0.8
+383.1 1.6
+386.3 1.1
+390.6 2.7
+391.6 1.6
+392.3 1.7
+401.3 2.2
+414.2 3.0
+421.5 6.8
+425.1 2.2
+433.6 1.8
+435.2 7.4
+438.1 3.7
+439.2 6.5
+440.1 1.7
+441.0 2.7
+443.5 1.1
+455.2 1.6
+461.2 2.5
+465.2 2.5
+469.2 1.8
+470.5 11.5
+471.5 10.8
+476.8 2.7
+477.5 3.2
+479.2 2.5
+486.5 2.5
+490.6 2.7
+493.2 1.6
+495.4 2.0
+496.5 6.5
+497.4 1.6
+498.1 1.5
+499.1 11.8
+505.4 4.1
+510.5 3.5
+515.6 2.9
+520.0 3.9
+521.4 1.3
+524.4 3.4
+525.4 1.3
+535.0 3.2
+536.2 9.5
+538.5 4.0
+549.5 2.9
+550.5 6.9
+552.2 4.3
+553.5 3.0
+560.4 1.7
+566.2 6.0
+567.2 6.8
+576.0 1.8
+581.3 3.0
+582.3 2.9
+583.1 1.6
+584.5 5.8
+606.1 3.2
+608.5 1.2
+609.3 1.8
+616.4 1.6
+648.6 1.1
+651.4 1.2
+652.4 1.2
+655.6 1.5
+656.4 1.2
+657.1 6.0
+659.4 3.5
+660.4 1.8
+668.4 10.3
+676.5 2.5
+677.1 2.0
+683.7 2.0
+684.3 1.8
+694.4 12.1
+695.4 68.5
+696.2 9.6
+703.4 9.3
+704.5 4.5
+812.8 2.4
+823.5 1.5
+842.5 3.4
+987.3 4.8
+S	149	149	733.77
+Z	2	1466.53
+209.1 46.7
+216.1 20.0
+217.0 18.3
+220.2 47.7
+221.2 15.9
+226.0 180.7
+227.1 61.5
+228.1 62.8
+231.2 8.4
+238.2 127.0
+239.2 40.1
+240.2 36.3
+244.0 590.5
+245.1 207.9
+245.9 9.0
+246.9 37.8
+248.7 23.8
+254.9 9.9
+255.5 13.2
+258.1 12.9
+259.0 7.1
+260.1 6.5
+262.1 28.7
+266.2 12.3
+269.2 32.6
+271.1 6.8
+274.0 23.6
+279.3 3.8
+280.3 9.9
+284.1 126.5
+285.1 52.2
+286.9 11.7
+288.2 75.9
+289.9 49.9
+294.2 207.3
+295.3 92.6
+296.3 5.6
+297.3 65.7
+299.1 32.0
+306.3 13.6
+307.5 21.7
+308.2 270.5
+309.1 58.9
+314.8 87.3
+316.0 60.2
+325.1 161.9
+326.2 218.8
+328.5 47.1
+331.1 25.2
+339.1 10.7
+340.1 20.8
+341.1 22.6
+343.2 2009.8
+344.1 550.5
+345.3 65.1
+346.2 32.5
+347.2 6.6
+349.8 7.8
+351.4 11.1
+356.2 4.9
+357.2 23.8
+358.3 41.5
+360.0 3.9
+362.1 11.1
+364.2 12.6
+366.9 158.0
+367.9 10.3
+369.1 67.5
+370.2 7.7
+373.3 10.6
+375.1 274.9
+378.3 29.6
+384.1 136.3
+385.2 182.5
+386.2 14.9
+390.1 4.9
+396.2 11.2
+401.4 231.7
+402.4 49.9
+403.1 6.4
+407.3 269.8
+408.3 88.7
+409.3 54.4
+410.2 38.3
+412.2 77.8
+413.2 152.3
+414.1 7.7
+414.9 8.8
+419.6 13.3
+420.3 20.5
+422.1 18.9
+423.3 4.4
+427.3 8.5
+428.8 27.3
+430.2 334.8
+431.2 117.7
+438.5 24.1
+439.2 28.5
+441.2 8.4
+442.2 22.8
+443.8 56.1
+447.4 27.6
+448.2 13.1
+449.0 5.1
+451.3 14.0
+455.2 60.7
+456.1 8.4
+457.4 28.5
+460.2 25.6
+465.1 15.7
+466.1 150.1
+467.1 20.7
+468.3 39.2
+469.2 79.2
+470.2 75.4
+471.2 39.6
+472.6 42.3
+473.3 32.3
+474.3 96.7
+474.9 12.2
+477.3 8.0
+483.1 568.9
+484.1 411.0
+485.2 134.4
+485.8 18.0
+486.6 11.5
+488.1 762.7
+493.1 36.7
+498.2 24.5
+501.2 364.5
+502.2 177.6
+503.0 75.9
+504.3 20.3
+507.1 65.4
+507.8 6.2
+509.2 14.5
+510.4 25.8
+515.0 44.6
+516.0 31.0
+518.1 42.2
+520.3 105.9
+521.4 101.2
+522.0 6.6
+522.7 36.3
+526.4 30.0
+527.2 24.9
+528.1 6.6
+530.4 254.2
+531.4 124.2
+537.4 9.5
+539.5 45.9
+540.7 71.4
+541.4 18.1
+542.2 60.4
+543.1 20.8
+544.4 10.0
+545.3 23.2
+546.4 16.9
+547.4 41.4
+556.3 146.1
+557.1 14.4
+558.0 8.9
+559.3 45.9
+560.3 28.1
+563.9 11.9
+565.5 21.2
+569.0 61.6
+570.0 56.6
+573.2 49.1
+580.3 48.9
+581.5 48.7
+584.3 238.0
+585.0 68.0
+587.2 77.1
+588.2 43.0
+589.3 24.0
+590.0 17.0
+591.6 29.9
+593.7 16.1
+595.2 6.8
+597.0 167.4
+598.1 196.0
+599.4 22.1
+601.1 1292.5
+601.7 22.0
+603.2 57.1
+604.0 40.8
+605.2 46.5
+606.2 10.5
+607.8 8.7
+610.7 268.5
+611.8 73.0
+614.2 185.5
+615.1 611.4
+616.2 485.6
+617.1 234.6
+618.4 33.0
+619.0 4.0
+620.7 23.1
+624.0 34.9
+626.1 24.1
+627.2 19.9
+628.4 110.0
+632.2 1291.5
+633.2 854.1
+634.2 261.8
+635.1 81.6
+638.5 10.0
+639.2 29.4
+641.9 66.4
+643.1 48.4
+643.9 61.8
+644.8 71.8
+647.5 29.4
+648.2 23.6
+649.2 39.5
+650.7 56.0
+651.3 30.0
+657.6 42.0
+660.6 64.9
+662.4 6.7
+664.8 4.7
+666.8 344.2
+667.8 60.3
+670.4 10.8
+671.5 40.7
+673.2 5.7
+674.9 33.9
+676.5 9.1
+678.1 14.5
+680.2 102.2
+681.1 39.3
+681.8 17.7
+683.1 44.9
+684.6 61.4
+685.7 30.7
+688.1 51.4
+690.6 15.7
+695.8 70.6
+696.6 21.2
+697.4 55.5
+698.1 16.2
+698.7 20.6
+701.3 44.8
+702.4 8.2
+703.0 48.6
+704.1 43.2
+706.8 95.3
+708.1 26.4
+709.3 25.7
+710.0 10.9
+711.3 44.3
+712.6 97.3
+713.3 67.8
+714.6 123.5
+715.7 92.6
+716.5 128.8
+717.4 10.7
+718.3 99.9
+719.0 9.1
+721.1 336.3
+721.8 579.4
+723.4 756.0
+724.6 204.7
+725.4 24.0
+726.9 10.3
+749.3 14.0
+750.1 3.7
+754.3 36.1
+755.6 34.2
+757.5 74.8
+763.2 84.9
+764.3 106.1
+769.1 9.7
+769.9 10.8
+773.3 16.0
+774.6 21.4
+776.4 29.4
+778.1 15.7
+778.8 14.4
+784.5 80.0
+785.3 57.8
+791.3 20.6
+793.5 34.1
+795.2 11.1
+797.2 14.9
+799.6 88.1
+800.3 14.0
+801.0 31.2
+805.4 17.5
+809.8 18.2
+812.7 14.1
+814.1 17.9
+814.8 7.3
+817.5 51.4
+819.6 32.7
+820.5 125.7
+822.7 11.6
+825.8 33.0
+826.7 22.8
+827.8 81.2
+831.4 1701.0
+832.5 3316.9
+833.5 807.9
+834.2 32.2
+834.9 387.7
+835.9 132.3
+837.3 32.3
+838.2 70.2
+839.5 6.1
+840.2 56.0
+841.5 150.0
+844.7 7.2
+845.4 23.5
+846.8 60.8
+847.9 67.3
+850.8 38.4
+851.5 11.0
+855.8 214.2
+856.7 308.0
+857.7 198.4
+859.4 58.9
+861.5 4.8
+864.5 10.0
+866.5 13.8
+877.2 10.0
+878.0 16.3
+880.4 5.6
+882.6 16.9
+884.5 25.3
+886.7 27.3
+888.3 20.7
+890.4 69.2
+899.3 447.8
+900.5 144.1
+901.7 34.1
+903.0 140.7
+904.0 75.1
+905.2 9.0
+905.9 9.8
+907.6 36.9
+912.0 151.6
+913.3 48.9
+916.8 27.0
+918.2 25.3
+919.4 16.1
+920.8 13.8
+922.0 43.3
+924.3 39.3
+926.2 76.2
+927.2 125.4
+938.9 35.8
+939.9 206.3
+941.1 125.9
+941.8 23.5
+943.5 90.9
+944.4 124.8
+945.5 69.4
+946.7 100.1
+947.3 76.8
+948.0 83.3
+949.0 65.0
+950.1 45.5
+951.2 29.8
+952.5 5.6
+953.3 6.1
+954.5 60.8
+955.1 103.9
+956.0 243.9
+956.7 171.3
+957.3 47.2
+958.5 51.6
+959.5 95.9
+960.2 77.3
+960.8 79.6
+962.4 940.6
+963.4 1859.2
+964.5 615.7
+965.6 104.2
+966.7 42.0
+967.3 134.1
+968.6 466.7
+969.6 143.5
+970.4 35.2
+971.3 10.6
+972.3 7.7
+976.8 175.6
+977.6 75.3
+979.6 10.6
+981.4 7.1
+986.1 184.0
+987.0 17.4
+988.0 91.5
+988.9 71.0
+990.3 100.1
+992.0 117.1
+992.9 26.2
+993.6 29.2
+995.8 17.5
+996.5 20.4
+1001.4 35.1
+1003.7 133.5
+1004.5 27.4
+1010.9 68.0
+1012.1 381.5
+1013.0 757.2
+1013.9 165.5
+1016.7 14.1
+1018.1 120.3
+1021.6 24.7
+1023.4 17.2
+1025.5 39.0
+1028.4 22.9
+1033.5 377.1
+1034.5 813.4
+1035.5 535.5
+1036.4 198.5
+1037.3 34.6
+1038.3 74.8
+1039.3 39.2
+1040.6 13.2
+1041.2 34.1
+1052.2 11.7
+1056.3 219.0
+1057.3 436.1
+1058.7 65.7
+1059.8 62.9
+1060.6 9.6
+1067.1 29.6
+1068.5 27.4
+1071.7 29.6
+1080.3 119.3
+1081.2 11.8
+1082.4 15.8
+1089.3 26.5
+1093.4 11.7
+1103.7 23.7
+1105.1 78.1
+1107.7 3.7
+1118.5 23.6
+1119.2 10.8
+1120.5 1238.9
+1121.5 4241.0
+1122.5 1509.1
+1123.5 546.2
+1124.4 124.0
+1126.7 7.4
+1128.2 21.7
+1134.5 21.8
+1152.5 8.9
+1153.4 10.6
+1154.3 14.2
+1155.5 19.2
+1167.7 7.7
+1169.4 183.1
+1170.3 329.1
+1171.5 66.2
+1173.0 53.3
+1177.1 16.2
+1191.4 9.5
+1195.2 118.1
+1196.2 32.2
+1197.5 13.8
+1198.4 38.9
+1203.6 38.6
+1204.6 45.5
+1205.4 6.9
+1208.3 10.2
+1213.6 13.3
+1219.5 544.1
+1220.6 1969.5
+1221.6 598.8
+1222.5 111.3
+1223.5 57.1
+1232.6 13.2
+1233.4 11.6
+1239.9 16.4
+1261.3 7.7
+1281.5 42.9
+1288.4 23.3
+1299.5 13.2
+1300.5 32.8
+1310.4 71.8
+1311.6 9.3
+1316.4 95.6
+1317.4 199.9
+1318.4 140.0
+1320.7 22.4
+1335.5 26.7
+1374.3 8.2
+1378.4 17.3
+1410.1 7.2
+1437.1 11.7
+1441.4 25.8
+1442.0 11.1
+S	150	150	832.24
+I	ID	101
+I	RTime	4.8019
+Z	1	832.24
+249.1 3.2
+251.1 2.4
+264.8 2.0
+267.2 3.4
+269.2 1.0
+281.0 20.3
+285.3 2.7
+298.7 4.4
+325.2 6.0
+330.1 7.5
+332.2 1.1
+341.1 8.1
+347.0 2.7
+355.1 70.1
+357.1 2.0
+359.0 2.0
+383.4 2.2
+387.2 2.7
+401.1 2.4
+404.1 3.9
+415.1 2.5
+428.9 9.6
+443.5 1.8
+483.1 2.0
+488.5 6.0
+501.2 9.8
+502.9 7.3
+512.1 2.0
+519.6 2.0
+524.2 9.0
+525.2 4.0
+542.3 2.2
+545.3 5.5
+549.7 13.5
+551.6 0.8
+555.3 2.5
+557.4 2.5
+560.1 3.9
+567.3 11.3
+576.1 1.7
+576.9 1.6
+581.4 6.4
+582.6 1.5
+598.2 1.2
+599.4 2.7
+608.6 1.8
+609.5 8.8
+629.1 6.6
+629.9 4.0
+630.6 2.0
+632.4 2.2
+637.0 2.5
+638.9 36.5
+639.6 11.8
+642.3 0.8
+646.0 32.7
+647.1 17.6
+648.7 10.1
+651.1 2.4
+653.2 5.5
+654.1 1.6
+657.8 0.8
+659.5 2.0
+660.2 5.5
+667.4 3.7
+668.4 7.1
+669.5 1.3
+676.1 8.1
+681.1 1.2
+685.3 1.3
+686.3 3.0
+690.6 1.7
+695.4 9.3
+696.1 3.0
+701.2 1.6
+703.4 13.1
+704.7 4.4
+707.3 1.6
+724.2 2.7
+726.3 3.7
+729.3 3.4
+733.8 9.6
+736.8 4.9
+738.4 1.1
+744.9 13.6
+746.1 4.8
+750.7 6.8
+756.6 15.3
+757.5 1.2
+762.7 1.6
+764.1 13.5
+765.1 3.7
+766.6 0.8
+767.6 9.1
+768.4 2.5
+772.0 3.0
+776.1 2.9
+778.4 2.0
+784.6 3.7
+799.0 5.4
+800.4 5.4
+801.5 13.6
+802.2 6.1
+803.1 10.3
+805.3 4.5
+806.7 7.5
+813.2 5.3
+814.2 23.7
+815.1 10.6
+823.0 31.3
+823.9 11.1
+S	151	151	651.62
+Z	2	1302.23
+194.4 12.4
+197.2 19.4
+198.0 22.8
+199.2 21.9
+201.1 63.1
+207.8 23.1
+215.1 250.2
+217.1 9.9
+222.2 7.0
+223.5 11.7
+225.1 13.4
+227.1 13.2
+229.0 208.2
+230.3 26.6
+239.2 36.3
+240.1 38.1
+242.1 24.5
+243.1 453.3
+245.1 51.7
+248.2 43.1
+251.3 53.2
+255.1 16.0
+257.1 88.9
+258.1 80.8
+259.2 14.3
+261.2 25.3
+264.2 17.5
+267.1 37.1
+269.3 18.3
+271.3 20.5
+274.3 56.3
+275.1 358.5
+276.1 72.0
+282.2 23.3
+286.0 26.9
+289.2 33.6
+290.6 18.7
+291.8 90.9
+292.4 27.6
+295.1 12.3
+297.3 32.5
+300.1 110.7
+308.1 23.4
+310.0 29.0
+311.3 13.7
+312.1 33.6
+318.1 50.8
+324.9 19.4
+326.3 71.9
+328.1 62.1
+328.7 7.4
+330.0 78.6
+331.2 45.0
+336.3 19.0
+338.0 27.1
+340.5 18.6
+343.2 23.0
+344.0 72.3
+344.7 44.0
+345.4 84.3
+346.1 926.1
+347.2 170.1
+348.9 12.7
+351.2 38.7
+352.7 40.7
+354.1 186.2
+356.3 100.9
+357.3 93.7
+358.3 90.6
+359.3 27.3
+368.3 25.4
+371.1 12.5
+373.2 36.9
+377.2 33.9
+379.3 15.6
+381.5 70.5
+385.4 30.5
+389.2 29.5
+393.1 22.1
+395.1 42.0
+396.2 14.8
+397.5 31.4
+398.6 62.9
+401.2 28.2
+402.3 85.3
+403.2 5.5
+403.9 23.6
+405.3 18.9
+407.0 49.5
+409.7 108.9
+411.4 174.8
+412.1 50.5
+413.2 33.1
+415.3 66.1
+417.3 43.4
+418.9 19.8
+422.1 96.0
+424.2 17.1
+425.2 80.0
+426.3 8.0
+428.1 37.8
+429.2 70.3
+430.2 60.2
+431.5 74.6
+433.5 266.6
+434.5 220.6
+439.2 57.7
+439.8 28.9
+441.1 44.0
+443.2 479.6
+445.3 753.4
+446.4 116.4
+448.3 18.9
+452.5 277.4
+453.3 51.6
+455.0 100.5
+457.1 235.9
+458.5 291.7
+459.2 18.3
+460.5 167.5
+461.6 55.5
+463.2 10.6
+466.3 154.5
+467.4 106.5
+468.4 20.1
+469.6 9.6
+471.1 70.7
+472.1 87.0
+473.2 148.5
+474.2 58.4
+475.2 194.2
+477.2 61.8
+479.2 25.3
+484.4 839.2
+485.4 106.5
+491.2 9.5
+492.6 7.7
+493.9 27.2
+497.3 161.4
+500.1 48.1
+503.4 112.4
+504.5 90.2
+506.3 7.8
+508.2 36.8
+509.8 83.9
+512.5 150.7
+513.8 209.3
+514.4 58.2
+515.5 26.2
+517.4 77.8
+520.3 22.2
+520.9 20.1
+522.0 115.2
+524.2 549.4
+525.0 351.2
+525.8 24.8
+527.1 183.2
+528.1 68.1
+528.8 9.0
+531.2 53.3
+533.3 12.7
+534.9 217.3
+536.5 81.6
+537.4 635.8
+538.3 206.4
+539.0 32.6
+540.0 111.0
+540.9 19.7
+542.5 129.7
+544.0 544.2
+545.3 30.1
+546.4 18.7
+547.6 92.1
+549.9 60.0
+551.2 79.0
+552.1 123.9
+553.6 103.7
+554.3 455.4
+555.2 59.6
+556.2 47.2
+557.0 59.6
+558.4 33.6
+560.3 873.4
+561.0 199.6
+561.8 123.4
+566.2 129.0
+567.3 65.4
+568.2 81.6
+568.9 13.4
+570.3 210.8
+572.3 3708.9
+573.1 304.0
+574.1 43.5
+575.2 182.2
+575.9 34.4
+577.2 38.8
+578.5 26.5
+579.7 84.0
+580.4 90.5
+582.3 11.0
+583.6 67.7
+585.4 48.8
+586.5 151.1
+589.2 33.8
+590.9 100.3
+592.2 40.6
+593.2 63.3
+594.4 1160.5
+595.3 30.1
+598.2 85.1
+599.4 55.9
+601.2 54.9
+602.4 175.6
+603.4 188.6
+604.7 70.9
+607.3 22.3
+609.3 283.7
+610.5 122.6
+611.2 47.5
+613.2 23.4
+614.2 104.0
+615.4 617.7
+616.5 394.9
+617.3 4955.5
+618.4 1744.1
+619.4 358.8
+620.2 26.4
+621.5 561.0
+622.4 144.4
+623.4 8.7
+624.5 129.8
+625.3 187.4
+626.5 145.5
+628.3 59.8
+629.0 9.1
+630.4 26.2
+631.1 41.7
+632.2 93.0
+633.4 502.4
+634.1 195.5
+634.9 90.6
+635.6 11.5
+637.3 252.0
+639.7 411.1
+640.4 241.6
+641.2 665.7
+642.5 2485.0
+643.5 292.1
+644.5 49.7
+645.5 6.9
+655.1 18.3
+657.3 108.8
+658.3 67.2
+660.2 130.2
+663.4 32.2
+665.0 11.5
+666.6 135.8
+667.2 300.6
+668.3 180.9
+669.3 11.3
+671.2 17.5
+673.1 26.9
+674.0 71.3
+674.7 48.8
+675.7 29.4
+677.1 38.1
+678.3 24.8
+682.5 64.1
+683.4 81.4
+685.3 1741.9
+686.2 501.3
+687.1 99.1
+689.5 7.8
+696.4 26.3
+699.3 110.7
+700.2 8.8
+701.3 44.1
+704.4 86.3
+708.5 1456.1
+709.3 23.7
+710.2 32.4
+711.4 54.3
+712.1 74.9
+714.7 38.0
+720.6 25.3
+723.1 114.4
+724.0 16.9
+725.4 38.7
+728.6 111.2
+730.3 1772.4
+731.4 755.5
+732.5 260.3
+733.1 25.9
+735.5 17.5
+737.5 98.5
+739.0 41.2
+740.6 33.7
+742.2 414.9
+743.2 210.9
+744.3 175.7
+745.1 17.2
+749.2 107.5
+756.3 100.5
+762.8 72.6
+763.9 23.3
+765.2 173.6
+766.5 65.2
+768.3 56.9
+769.6 63.7
+770.4 109.3
+772.9 407.9
+775.6 92.8
+776.4 34.3
+780.2 18.8
+783.6 62.3
+784.3 128.4
+785.4 24.6
+786.4 21.4
+789.3 66.1
+791.3 6.9
+792.3 35.1
+792.9 22.5
+795.3 17.1
+796.2 30.0
+798.3 31.4
+799.0 68.3
+801.4 3804.7
+802.1 95.7
+802.8 127.6
+803.7 33.1
+804.6 6.4
+805.5 34.4
+806.6 60.2
+807.4 41.0
+808.6 18.6
+810.6 73.2
+811.3 30.5
+813.8 72.6
+814.5 23.0
+817.7 8.9
+819.5 64.9
+822.4 9.4
+824.1 51.3
+825.3 98.1
+826.4 23.5
+829.4 35.1
+830.3 55.3
+833.7 22.8
+836.4 766.9
+837.5 218.0
+838.4 153.0
+839.4 182.2
+840.5 37.5
+841.5 137.4
+842.6 42.8
+843.9 50.4
+845.1 119.3
+847.4 42.9
+849.3 204.7
+851.8 70.4
+853.3 64.8
+854.1 32.7
+857.3 958.0
+858.0 10189.7
+859.3 1245.6
+860.4 627.2
+861.5 121.1
+862.9 239.0
+864.0 190.3
+864.6 25.3
+870.4 29.4
+871.4 105.4
+875.5 18.0
+876.4 61.2
+878.7 167.8
+879.6 52.6
+881.1 8.7
+882.3 44.3
+883.1 69.6
+885.5 43.0
+893.4 45.4
+894.5 149.3
+895.4 128.9
+897.6 25.5
+899.4 22.8
+901.4 112.6
+903.4 313.7
+904.4 213.0
+905.5 42.2
+906.3 11.8
+911.5 49.2
+913.5 691.4
+914.5 79.1
+916.3 26.0
+919.6 25.9
+920.4 133.3
+922.5 876.1
+923.2 9.7
+925.5 81.8
+927.4 66.1
+928.3 95.4
+929.5 25.4
+932.4 74.6
+934.0 57.1
+938.4 230.8
+939.4 28.5
+940.6 66.5
+942.2 67.0
+946.2 53.4
+949.6 79.4
+951.2 16.1
+953.3 83.7
+954.7 22.3
+956.3 1267.6
+957.4 235.4
+958.3 313.3
+960.7 12.7
+965.3 8.9
+966.5 77.3
+969.7 6.1
+971.4 10.7
+974.5 1716.0
+975.5 583.1
+976.4 87.3
+977.4 88.4
+981.4 10.6
+987.3 27.4
+991.3 37.3
+992.4 29.1
+997.6 96.6
+1001.5 24.8
+1003.7 33.8
+1004.8 17.2
+1008.9 167.8
+1009.5 238.3
+1010.4 107.9
+1012.6 21.2
+1013.7 30.6
+1014.9 27.0
+1016.4 43.4
+1020.6 25.4
+1022.1 15.7
+1023.2 8.0
+1024.5 19.8
+1027.3 694.6
+1028.3 323.3
+1029.4 156.4
+1031.3 76.2
+1039.5 10.7
+1041.4 20.4
+1044.4 21.7
+1047.3 224.5
+1048.5 99.7
+1049.5 95.1
+1050.7 57.6
+1054.7 72.9
+1056.7 9.4
+1073.5 728.2
+1074.5 535.6
+1075.7 231.9
+1076.4 39.6
+1083.7 48.6
+1086.2 118.6
+1087.5 234.4
+1088.3 34.6
+1089.4 43.6
+1090.5 47.4
+1094.4 103.0
+1100.5 17.9
+1118.0 29.3
+1119.4 80.6
+1121.5 81.2
+1127.4 61.3
+1128.4 35.5
+1129.3 52.2
+1136.2 32.7
+1137.5 138.2
+1138.1 42.7
+1139.3 106.9
+1140.1 36.5
+1153.3 58.3
+1155.3 1150.5
+1156.4 576.3
+1157.5 314.9
+1159.5 26.0
+1171.7 29.6
+1173.2 17.9
+1173.9 7.1
+1187.4 93.7
+1188.5 27.0
+1189.2 30.8
+1198.5 26.9
+1199.6 20.4
+1231.4 119.5
+1266.3 47.2
+S	152	152	531.22
+I	ID	74
+I	RTime	3.4297
+Z	2	1061.43
+155.0 0.8
+170.3 1.5
+172.2 1.1
+177.2 1.7
+195.0 1.2
+197.4 1.0
+200.3 2.0
+212.1 2.4
+216.3 1.8
+226.0 1.5
+252.0 0.8
+258.1 1.6
+272.3 4.8
+273.2 3.2
+274.3 2.5
+276.4 1.7
+285.2 0.8
+288.1 20.6
+297.2 1.8
+299.2 2.7
+306.3 5.9
+309.1 1.5
+317.4 8.1
+320.2 1.5
+321.4 3.0
+325.1 4.0
+326.1 1.2
+328.2 3.7
+335.1 1.6
+335.8 3.0
+336.9 2.2
+344.8 1.7
+357.2 1.2
+358.8 3.0
+363.0 0.8
+367.3 5.3
+368.3 1.0
+375.3 13.1
+376.4 2.7
+377.3 4.0
+385.4 5.3
+389.4 3.0
+391.3 2.2
+394.4 1.8
+397.1 1.6
+402.5 13.8
+403.3 51.2
+404.4 6.5
+410.7 5.8
+415.6 4.8
+421.8 4.5
+424.2 9.5
+426.4 11.5
+427.5 2.0
+430.9 6.8
+433.4 12.1
+434.2 1.6
+434.9 5.0
+439.1 2.5
+441.2 6.4
+443.4 1.1
+446.3 3.7
+447.4 3.0
+451.1 7.5
+452.9 2.7
+453.7 8.0
+456.6 9.1
+459.3 4.0
+463.9 5.8
+467.5 12.1
+470.3 3.2
+471.1 5.5
+471.7 8.0
+472.3 4.4
+473.7 9.1
+476.5 2.9
+477.3 1.6
+478.5 10.8
+479.3 4.1
+482.0 8.5
+485.8 13.0
+486.4 2.0
+487.9 22.2
+489.2 0.8
+492.0 19.5
+493.5 12.8
+494.6 9.8
+495.5 4.5
+496.4 5.5
+498.3 8.1
+499.7 6.0
+500.8 6.3
+502.8 3.0
+503.8 3.4
+504.5 15.6
+509.1 5.8
+511.0 4.0
+512.5 5.1
+513.2 21.3
+514.4 14.0
+519.7 11.3
+520.3 4.0
+522.2 30.8
+523.1 7.8
+529.4 0.8
+530.9 2.0
+542.1 4.3
+545.1 4.5
+550.0 4.8
+558.7 1.5
+566.0 3.9
+569.1 2.2
+570.9 2.9
+584.0 2.5
+585.4 1.0
+601.5 12.6
+604.8 1.0
+614.9 7.4
+616.0 13.6
+632.3 11.6
+635.0 3.4
+640.6 3.5
+641.8 4.0
+650.4 6.4
+651.6 17.5
+658.4 2.4
+660.0 2.2
+662.6 1.8
+674.4 7.0
+678.1 2.0
+687.8 1.8
+688.4 3.4
+689.3 13.3
+690.5 3.7
+691.5 3.7
+694.4 2.7
+696.8 10.5
+699.0 3.5
+705.4 5.1
+714.9 5.5
+729.3 3.7
+732.6 2.2
+738.3 2.0
+758.9 6.8
+772.3 3.5
+785.1 1.0
+786.2 13.3
+788.5 3.0
+803.5 2.2
+814.3 2.7
+833.4 1.5
+843.6 1.5
+875.4 2.5
+896.3 4.4
+914.7 3.0
+916.4 4.0
+928.3 2.9
+932.6 5.0
+S	153	153	613.79
+Z	2	1226.57
+177.1 3.8
+180.0 1.9
+185.0 4.0
+192.1 2.8
+198.3 1.1
+199.1 2.0
+202.1 0.4
+206.8 2.2
+210.2 2.5
+211.1 1.0
+213.6 0.4
+216.0 3.6
+221.0 2.1
+222.1 14.6
+223.2 7.9
+224.1 6.9
+230.3 2.1
+239.0 2.2
+239.9 2.6
+247.1 0.3
+248.2 7.8
+249.3 0.7
+250.2 1.8
+250.9 1.1
+254.2 1.8
+259.0 3.3
+260.0 0.6
+264.9 1.8
+266.2 2.1
+267.2 7.7
+268.2 8.9
+269.2 26.1
+270.1 8.5
+276.6 0.7
+281.3 6.3
+282.2 14.7
+283.2 6.9
+284.1 8.3
+285.1 7.9
+286.0 8.5
+287.1 9.9
+288.1 6.3
+290.7 1.1
+297.0 6.0
+298.6 7.2
+299.6 4.0
+300.6 2.4
+301.5 3.4
+302.4 2.7
+304.1 1.9
+306.0 5.6
+307.0 3.7
+317.2 1.3
+319.2 53.9
+320.3 5.6
+324.8 0.5
+333.2 0.6
+334.3 0.4
+335.3 0.6
+339.2 4.2
+341.1 3.9
+342.0 0.6
+354.0 0.4
+355.2 62.0
+356.1 108.7
+357.1 160.0
+358.1 153.6
+359.2 51.3
+368.5 5.6
+370.9 3.6
+372.1 5.6
+373.0 8.8
+374.1 13.5
+375.2 1.9
+376.2 17.8
+377.2 6.4
+391.1 2.1
+392.6 2.7
+401.2 2.8
+403.6 3.1
+404.3 1.5
+405.3 1.0
+410.5 0.4
+414.2 1.2
+417.2 6.6
+418.2 6.6
+419.2 4.0
+422.1 0.9
+427.2 0.4
+429.1 4.3
+430.1 6.0
+431.2 2.4
+433.2 1.8
+434.1 2.0
+435.7 0.4
+436.7 2.6
+438.0 2.3
+447.3 16.2
+448.1 2.6
+449.3 3.8
+451.3 1.9
+455.3 3.2
+455.9 3.5
+462.2 0.9
+463.3 21.6
+465.2 5.4
+468.9 1.2
+469.7 2.3
+472.7 1.2
+474.7 0.8
+477.1 2.2
+480.1 2.5
+481.3 0.8
+485.2 1.6
+486.8 8.2
+490.1 14.8
+491.3 3.1
+492.2 0.8
+493.2 0.7
+494.6 2.0
+496.5 4.4
+497.4 1.1
+499.5 12.0
+500.2 3.3
+501.0 0.2
+502.5 7.6
+504.8 7.2
+506.0 10.8
+507.1 4.4
+507.9 16.7
+508.5 5.3
+509.1 2.9
+510.0 0.4
+511.1 1.7
+512.3 12.4
+513.3 3.7
+514.2 1.6
+515.3 5.2
+516.6 43.1
+517.3 6.8
+518.9 4.3
+519.5 1.4
+520.8 0.8
+524.3 6.3
+525.6 50.0
+526.5 0.5
+527.7 12.8
+528.5 9.4
+529.5 4.9
+530.5 11.3
+531.3 4.7
+532.4 7.7
+533.3 1.8
+534.4 16.8
+535.2 2.1
+536.6 2.2
+537.5 10.8
+538.4 14.8
+539.1 3.7
+541.6 0.2
+542.5 9.9
+543.8 6.2
+546.2 10.3
+546.9 9.9
+548.2 7.8
+549.0 1.7
+550.8 21.3
+551.7 41.9
+552.5 14.0
+553.5 2.5
+554.1 0.5
+555.7 3.9
+560.0 158.5
+560.9 47.0
+563.2 5.9
+565.0 5.6
+568.8 108.0
+569.5 65.8
+570.4 3.4
+571.5 2.9
+574.7 5.8
+576.6 3.4
+577.9 13.5
+578.6 4.4
+580.0 7.1
+580.8 3.7
+581.5 3.5
+583.7 3.1
+584.4 4.4
+586.8 11.6
+587.5 34.8
+588.9 7.4
+589.5 5.3
+590.3 1.6
+594.7 11.3
+595.7 87.8
+596.5 57.6
+597.6 6.0
+598.8 0.4
+600.9 5.2
+602.0 1.9
+603.4 5.6
+604.6 202.4
+605.5 40.1
+612.4 5.4
+615.3 1.6
+622.2 0.4
+625.2 1.7
+631.1 0.6
+637.5 1.3
+643.7 3.4
+644.4 4.0
+657.5 1.4
+658.2 1.6
+659.1 1.0
+660.5 6.3
+661.3 0.4
+667.4 1.6
+670.4 1.6
+672.6 2.3
+674.1 8.1
+676.2 4.3
+678.3 27.1
+679.4 5.7
+689.8 1.7
+690.4 2.1
+692.2 0.4
+692.9 1.5
+694.5 1.8
+709.8 6.6
+711.1 1.7
+719.3 1.2
+727.5 1.4
+728.4 2.4
+729.5 6.8
+730.5 1.4
+731.3 4.5
+733.7 0.5
+745.2 7.8
+746.2 7.1
+747.1 3.0
+755.4 2.8
+761.3 1.3
+763.3 12.4
+764.5 5.5
+767.4 1.0
+779.5 49.0
+780.5 12.6
+781.4 2.5
+783.4 1.7
+786.2 1.8
+797.5 0.9
+799.5 1.4
+800.5 1.0
+807.7 1.8
+815.2 5.0
+817.6 4.4
+818.4 2.2
+828.5 1.2
+832.1 1.2
+833.3 13.8
+834.4 5.3
+836.8 0.4
+850.1 6.2
+851.0 6.4
+851.7 6.6
+852.5 3.0
+858.7 6.2
+859.3 1.0
+872.4 2.8
+878.1 3.3
+889.5 7.2
+890.5 7.1
+891.6 8.6
+893.3 0.7
+904.5 6.4
+905.7 0.8
+907.4 18.8
+908.5 9.4
+909.2 0.9
+909.8 1.3
+910.5 3.0
+917.3 1.0
+921.4 4.1
+936.4 2.8
+946.5 1.3
+960.7 5.2
+972.8 1.9
+975.7 0.4
+978.6 39.0
+979.7 14.3
+980.5 3.3
+990.3 2.5
+991.5 1.9
+992.6 7.5
+994.5 1.0
+1006.6 0.4
+1008.5 7.0
+1009.5 2.7
+1014.3 1.3
+1031.4 3.4
+1032.4 7.6
+1033.5 4.1
+1040.7 1.7
+1049.5 84.2
+1050.5 35.3
+1051.6 17.8
+1052.2 0.6
+1052.8 2.6
+1054.5 3.0
+1055.2 0.8
+1104.5 3.7
+1118.2 2.2
+1155.7 2.4
+S	154	154	717.06
+I	ID	168
+I	RTime	8.2686
+Z	1	717.06
+212.3 1.7
+222.2 1.0
+228.1 4.4
+239.8 4.5
+243.3 3.4
+295.9 2.0
+312.0 1.1
+312.9 2.2
+320.3 1.1
+323.7 2.9
+325.6 2.0
+331.3 9.0
+333.3 1.8
+341.3 3.2
+345.1 3.0
+347.4 3.0
+353.5 3.2
+355.2 3.0
+361.2 2.2
+368.3 2.0
+369.4 1.0
+385.0 1.2
+394.4 2.9
+405.5 2.4
+410.2 1.8
+425.3 2.2
+426.5 1.1
+440.3 1.2
+441.0 1.1
+442.2 3.2
+445.0 5.0
+447.3 4.1
+449.7 1.5
+456.1 3.2
+458.3 9.5
+475.5 5.5
+479.3 3.7
+487.7 4.0
+492.3 2.7
+496.3 2.5
+497.6 3.7
+500.6 6.4
+501.6 4.0
+502.3 1.1
+503.1 3.0
+512.2 2.2
+514.5 3.9
+516.3 2.2
+524.2 2.0
+525.1 6.1
+526.4 3.2
+531.4 2.2
+540.6 1.2
+545.2 2.2
+548.4 3.5
+570.4 2.5
+571.4 2.2
+580.4 4.1
+588.9 10.1
+589.6 4.9
+602.3 3.0
+610.0 1.2
+629.1 3.7
+654.7 2.2
+659.7 6.5
+664.5 4.0
+666.2 1.3
+672.5 6.6
+681.3 6.4
+698.5 9.5
+699.5 3.7
+700.4 2.5
+707.7 42.0
+899.0 2.0
+1004.7 5.5
+S	155	155	419.32
+I	ID	195
+I	RTime	9.6355
+Z	2	837.63
+122.0 1.8
+127.1 12.1
+129.1 2.0
+141.2 2.2
+145.3 1.5
+148.8 1.7
+154.2 2.5
+155.0 14.1
+158.3 2.0
+161.2 2.5
+167.0 2.7
+172.1 10.0
+174.2 1.2
+175.1 15.8
+185.4 2.0
+194.9 2.7
+198.0 2.0
+201.3 1.2
+203.2 1.2
+212.2 3.4
+216.3 7.0
+219.2 2.2
+224.3 3.2
+226.2 16.2
+229.2 3.0
+231.1 7.8
+233.2 1.3
+234.0 4.8
+235.2 2.2
+240.3 1.7
+243.1 3.7
+246.3 2.2
+252.4 2.4
+255.1 17.7
+256.2 16.7
+259.0 1.7
+260.4 1.2
+261.3 4.3
+266.2 1.2
+268.0 2.0
+272.3 11.3
+273.2 2.7
+275.0 22.8
+276.2 1.7
+277.1 1.2
+278.0 21.1
+283.3 14.0
+284.3 2.2
+286.3 2.0
+288.2 2.5
+289.4 1.7
+290.4 23.5
+291.1 10.1
+293.2 2.0
+297.2 1.2
+297.8 3.2
+300.1 3.0
+301.2 1.7
+303.6 3.7
+304.2 34.4
+306.4 2.2
+310.4 2.2
+312.3 1.2
+315.0 3.4
+317.5 1.2
+320.4 1.2
+324.0 4.1
+326.3 4.3
+327.2 3.4
+329.3 36.7
+330.4 1.5
+333.3 1.0
+338.0 3.0
+339.2 0.8
+341.7 12.3
+343.3 2.5
+345.2 3.2
+348.0 1.0
+349.0 2.2
+352.4 5.1
+354.3 1.3
+356.2 3.4
+357.1 4.3
+360.4 3.4
+366.3 20.1
+367.6 1.7
+370.2 2.7
+372.1 1.2
+373.2 3.5
+373.9 2.7
+375.2 2.7
+376.3 3.7
+380.5 8.3
+383.3 17.2
+384.4 10.0
+385.2 8.6
+386.3 4.0
+387.3 9.3
+388.4 4.0
+389.4 4.3
+390.4 16.5
+394.5 4.0
+395.2 10.0
+401.2 202.1
+402.3 42.0
+403.3 10.8
+410.1 70.0
+411.3 2.2
+448.9 1.6
+457.7 3.2
+463.4 3.4
+478.8 1.6
+491.1 7.8
+492.3 3.2
+507.4 1.5
+508.4 13.8
+520.6 10.8
+536.0 17.0
+547.3 2.0
+548.1 2.0
+551.4 11.1
+554.4 49.2
+555.3 10.3
+564.3 3.7
+565.4 2.7
+587.3 3.5
+593.0 3.9
+594.5 2.2
+610.9 12.5
+611.5 67.0
+612.5 34.5
+613.5 5.6
+622.2 3.4
+624.3 3.0
+630.6 2.9
+646.5 1.8
+662.3 5.3
+665.3 1.5
+668.6 2.0
+682.4 53.2
+683.3 8.0
+709.4 10.1
+749.3 1.3
+777.2 1.2
+814.8 4.0
+816.6 3.9
+S	156	156	1032.44
+Z	3	3095.30
+298.0 1.7
+308.4 0.8
+312.0 1.1
+319.0 1.6
+325.1 19.8
+326.3 1.1
+328.1 1.9
+329.3 1.6
+334.5 0.2
+335.7 0.6
+337.1 2.1
+341.2 12.0
+342.2 21.8
+343.2 3.8
+354.1 1.0
+355.3 2.4
+356.1 0.8
+357.3 0.8
+359.0 0.5
+363.5 1.6
+365.1 0.6
+365.9 2.2
+370.7 5.3
+371.5 4.7
+372.2 1.7
+374.3 2.7
+374.9 0.8
+383.1 0.3
+385.1 2.5
+389.3 13.8
+390.4 2.7
+391.4 1.3
+394.4 1.5
+396.4 2.2
+399.5 1.2
+400.1 2.0
+408.6 4.2
+411.0 1.4
+413.1 28.8
+414.2 7.2
+416.9 1.1
+423.3 1.0
+424.1 3.0
+426.2 3.0
+427.1 2.5
+430.5 2.6
+431.3 7.0
+432.1 1.4
+434.9 1.1
+436.2 1.2
+437.2 0.2
+439.2 2.7
+440.0 1.4
+441.4 0.8
+442.2 1.9
+452.2 7.9
+453.4 8.1
+454.1 11.2
+454.8 1.9
+456.0 1.8
+457.9 0.9
+459.0 0.5
+464.9 0.6
+470.0 7.1
+471.1 1.9
+472.2 10.4
+473.3 2.1
+475.1 0.6
+479.1 2.3
+481.4 0.3
+487.3 4.3
+489.2 1.7
+493.6 1.9
+494.2 5.8
+495.1 3.1
+497.4 1.1
+504.0 31.2
+504.7 1.2
+505.4 5.0
+506.0 1.5
+507.0 1.3
+512.2 2.7
+512.8 3.3
+514.2 0.8
+516.3 5.2
+523.2 2.9
+524.1 10.6
+525.0 10.5
+525.9 1.6
+527.3 1.1
+530.1 6.1
+531.3 1.0
+532.3 1.6
+534.4 2.2
+540.9 5.0
+542.2 1.2
+543.1 2.3
+544.3 2.3
+547.3 1.8
+549.7 3.7
+550.4 1.0
+551.2 15.0
+552.3 2.5
+553.3 2.7
+554.9 1.9
+558.1 3.6
+559.1 2.0
+561.8 4.5
+563.5 4.2
+564.1 3.3
+565.2 2.8
+567.5 0.5
+572.0 146.7
+572.7 6.7
+574.8 1.1
+578.5 2.2
+582.8 7.6
+583.5 7.0
+584.3 4.6
+585.2 2.0
+589.1 2.1
+591.2 0.3
+592.1 2.5
+594.5 1.3
+595.9 2.5
+598.8 2.9
+600.2 10.7
+601.2 10.2
+602.0 3.3
+607.3 40.9
+608.8 0.5
+609.4 2.8
+610.0 6.3
+613.3 2.9
+614.3 1.4
+616.1 11.5
+617.0 2.7
+618.3 75.4
+619.2 29.0
+620.5 2.9
+621.2 3.3
+622.2 0.9
+625.0 2.6
+627.3 0.5
+630.4 3.0
+632.2 4.7
+632.8 1.2
+633.5 4.0
+635.1 1.0
+638.2 4.7
+640.0 0.5
+641.2 4.4
+642.2 3.0
+644.3 1.3
+646.1 2.8
+647.2 1.8
+648.3 3.8
+649.1 8.1
+650.1 1.7
+651.0 6.0
+653.1 1.7
+655.5 4.3
+656.1 1.8
+657.4 10.0
+658.0 1.9
+660.0 1.2
+663.1 5.8
+664.2 13.4
+665.0 16.7
+666.1 42.2
+667.1 24.1
+668.5 4.0
+671.3 3.9
+672.2 2.4
+676.5 1.5
+678.8 8.6
+683.2 2.6
+684.3 3.5
+687.2 4.2
+689.2 221.6
+690.2 91.0
+691.5 8.0
+692.8 4.6
+696.4 3.6
+697.7 19.7
+698.6 9.1
+701.1 1.2
+702.2 3.0
+703.1 0.7
+703.9 2.8
+705.8 8.7
+707.0 38.0
+707.8 21.6
+709.2 1.8
+710.7 3.1
+713.1 5.2
+714.2 3.6
+715.3 6.3
+716.2 3.7
+717.4 1.9
+718.1 2.7
+719.3 3.2
+720.1 12.4
+722.2 1.3
+724.4 1.5
+726.5 8.8
+727.6 3.3
+731.3 1.9
+732.9 8.3
+733.5 1.0
+735.4 4.3
+736.3 2.7
+737.3 19.8
+738.4 3.1
+739.2 3.5
+741.3 4.5
+744.0 1.3
+745.9 4.2
+747.3 5.3
+748.0 3.6
+749.2 4.9
+750.1 0.8
+752.2 3.0
+753.5 23.3
+754.3 9.8
+755.3 8.3
+756.2 3.7
+756.9 1.3
+757.5 9.9
+759.6 6.7
+762.1 50.4
+762.8 4.6
+763.4 14.4
+764.4 6.8
+765.3 8.6
+766.2 3.0
+767.3 4.2
+769.0 66.0
+770.0 17.1
+770.9 416.5
+771.7 94.7
+772.3 18.2
+775.5 3.3
+778.0 1637.1
+778.9 311.7
+780.1 13.0
+781.4 3.0
+782.5 1.3
+784.4 8.1
+785.5 5.1
+786.2 2.5
+786.9 0.7
+790.2 1.9
+792.0 1.6
+793.5 1.4
+795.2 1.3
+798.3 3.2
+799.0 6.5
+802.3 47.4
+803.3 19.0
+804.2 7.4
+805.4 1.3
+808.1 8.5
+810.4 14.6
+811.4 1.6
+812.1 3.2
+814.5 11.1
+816.8 0.9
+819.9 24.3
+822.4 1.4
+824.5 3.7
+825.9 1.9
+827.2 2.6
+831.1 3.8
+832.7 63.9
+833.5 102.6
+834.7 1.9
+837.2 5.1
+837.9 1.5
+838.7 4.0
+839.3 0.3
+842.0 477.5
+843.0 95.7
+844.1 6.0
+845.0 9.2
+846.0 9.4
+848.2 6.4
+849.7 8.4
+851.5 5.0
+854.2 3.3
+855.4 4.9
+856.3 6.1
+858.0 1.7
+858.8 3.8
+860.9 3.8
+862.6 6.5
+863.6 4.0
+864.6 6.4
+865.5 7.4
+866.3 12.3
+867.2 6.2
+874.6 2.9
+876.4 8.8
+878.6 8.5
+879.3 3.7
+880.5 2.5
+881.2 0.4
+882.4 11.7
+884.0 26.2
+885.1 21.5
+888.3 1.5
+890.2 1.7
+891.4 14.3
+892.3 3.6
+894.2 4.4
+895.5 6.5
+897.1 2.6
+898.2 2.8
+899.7 3.0
+901.2 12.0
+902.0 8.9
+904.2 0.7
+905.6 7.1
+908.4 6.4
+909.1 6.2
+909.8 1.3
+911.2 5.7
+913.1 9.2
+915.4 1.1
+917.3 69.9
+918.3 34.2
+919.2 1.7
+919.9 3.8
+920.7 4.1
+923.6 11.3
+924.8 4.9
+925.4 0.6
+926.2 3.4
+927.2 1.8
+928.2 1.1
+929.3 6.1
+931.2 79.4
+932.1 53.8
+932.9 0.2
+933.9 9.3
+937.7 1.4
+940.0 1941.3
+941.0 519.2
+941.9 55.3
+943.1 45.3
+944.1 50.1
+945.1 43.2
+946.1 22.7
+948.2 14.9
+949.2 2.8
+949.9 1.8
+951.5 12.7
+952.2 8.2
+954.4 9.3
+955.4 2.4
+956.3 3.0
+957.3 1.9
+958.5 17.8
+959.5 21.8
+961.0 6.2
+961.9 3.2
+962.5 30.9
+963.6 3.5
+964.2 0.5
+966.3 4.2
+967.0 9.0
+968.1 52.2
+969.0 41.0
+970.3 3.9
+971.8 1.7
+972.9 6.1
+973.9 31.8
+975.0 12.4
+976.8 312.1
+977.5 377.0
+978.4 29.8
+979.1 22.8
+980.3 15.2
+981.5 4.0
+983.8 28.2
+984.6 15.0
+986.8 1.0
+988.1 3.5
+988.7 5.5
+989.3 2.3
+990.2 12.8
+991.7 4.3
+993.4 3.5
+994.5 6.5
+995.4 6.2
+996.5 16.9
+997.4 1.6
+998.3 5.0
+999.2 7.8
+999.9 13.0
+1001.3 7.1
+1002.2 6.1
+1004.2 24.2
+1005.2 14.1
+1006.3 0.3
+1009.0 3.6
+1010.4 1.5
+1011.4 8.1
+1012.6 13.4
+1013.6 22.1
+1014.4 20.9
+1015.2 19.5
+1016.4 9.5
+1017.3 9.5
+1018.1 6.1
+1019.3 12.8
+1020.3 35.0
+1021.1 13.5
+1021.8 10.7
+1023.0 19.6
+1024.0 4.0
+1033.2 5.9
+1034.1 2.5
+1041.0 1.4
+1041.7 7.6
+1044.9 7.9
+1045.6 6.0
+1046.4 7.5
+1047.3 3.3
+1047.9 3.8
+1049.6 4.4
+1051.3 3.2
+1052.6 1.8
+1055.0 3.9
+1060.1 4.1
+1068.9 7.4
+1069.7 6.5
+1070.3 2.9
+1071.4 3.8
+1072.0 1.7
+1073.3 4.4
+1076.6 4.5
+1077.4 8.9
+1078.3 5.8
+1080.4 1.7
+1081.3 3.1
+1082.0 3.4
+1083.3 2.5
+1085.0 3.0
+1087.3 30.6
+1088.2 21.3
+1089.5 47.5
+1090.2 24.3
+1091.1 8.1
+1092.6 0.4
+1093.9 5.9
+1094.9 1.7
+1095.7 3.3
+1100.1 1.2
+1106.2 20.8
+1107.0 16.1
+1108.4 31.3
+1109.6 5.2
+1112.1 0.4
+1118.4 5.0
+1122.5 11.3
+1123.6 8.8
+1125.2 13.6
+1126.5 10.7
+1127.2 0.6
+1128.9 4.0
+1131.0 1.9
+1133.4 1.9
+1134.7 1.2
+1136.1 1.5
+1137.9 3.8
+1138.9 6.9
+1140.0 4.6
+1142.3 431.5
+1143.4 240.7
+1144.4 46.0
+1145.6 8.0
+1147.2 41.5
+1148.1 14.4
+1149.3 3.6
+1150.2 1.3
+1151.4 5.9
+1153.3 3.6
+1154.0 3.3
+1154.8 1.9
+1161.3 0.6
+1162.3 5.5
+1163.6 2.3
+1165.8 45.9
+1166.5 62.0
+1167.4 16.4
+1168.2 3.5
+1169.4 4.1
+1170.6 10.7
+1171.2 1.7
+1172.3 2.3
+1173.5 0.8
+1174.2 1.0
+1175.6 2.0
+1177.4 2.1
+1179.9 8.7
+1180.7 2.8
+1181.4 15.3
+1182.4 3.8
+1183.5 4.9
+1184.8 1.8
+1185.5 2.2
+1186.9 0.3
+1188.4 2.9
+1189.9 7.9
+1190.7 3.1
+1191.6 2.4
+1192.2 3.8
+1194.3 51.4
+1195.0 16.9
+1195.8 12.3
+1196.6 1.2
+1198.3 180.3
+1199.2 121.2
+1200.2 46.7
+1201.3 5.3
+1203.3 125.1
+1204.1 281.0
+1205.0 59.0
+1206.3 1.6
+1207.6 4.7
+1208.4 1.5
+1210.2 6.8
+1213.3 125.3
+1214.4 65.0
+1216.3 864.6
+1217.3 428.7
+1218.4 132.5
+1219.4 22.0
+1220.5 1.3
+1222.2 0.7
+1223.1 3.8
+1226.1 1.8
+1230.5 47.5
+1231.3 4.6
+1232.4 2.0
+1234.5 5.2
+1235.6 7.1
+1236.7 5.1
+1237.4 2.2
+1239.1 128.4
+1240.0 57.3
+1240.9 5.8
+1242.5 1.2
+1243.9 5.2
+1245.1 3.6
+1247.6 81.3
+1248.4 72.8
+1249.7 7.1
+1252.0 1.6
+1261.9 2.0
+1262.7 4.7
+1263.4 0.5
+1265.3 1.7
+1266.9 0.7
+1270.8 4.3
+1274.4 12.4
+1275.5 6.9
+1277.0 2.0
+1280.3 3.8
+1281.7 1.0
+1283.3 144.2
+1284.0 43.2
+1284.9 1.6
+1286.0 1.2
+1287.6 24.4
+1289.4 4.9
+1292.3 5.0
+1294.4 4.8
+1295.9 74.8
+1297.0 41.6
+1298.4 7.1
+1299.2 3.4
+1300.2 4.6
+1301.2 2.0
+1302.4 1.8
+1305.0 4.1
+1306.8 7.9
+1308.2 2.1
+1309.5 1.7
+1311.3 2.6
+1313.3 3.1
+1314.6 7.1
+1317.8 2.0
+1319.3 19.6
+1320.1 6.7
+1321.0 0.6
+1321.8 3.2
+1328.3 73.8
+1329.4 54.9
+1330.4 6.1
+1334.9 8.3
+1338.0 1.2
+1338.7 1.4
+1342.2 4.2
+1344.5 5.4
+1345.4 10.3
+1350.6 1.6
+1353.2 9.3
+1354.1 30.7
+1355.1 0.5
+1360.3 1.3
+1362.4 83.8
+1363.4 13.5
+1364.1 2.0
+1364.8 4.0
+1366.1 3.8
+1367.2 2.4
+1370.6 1.6
+1376.0 0.6
+1377.4 20.9
+1378.4 4.6
+1382.1 4.3
+1384.5 3.9
+1390.2 1.6
+1391.4 6.3
+1393.6 3.5
+1394.4 35.9
+1395.6 46.9
+1396.4 10.0
+1398.0 5.3
+1398.7 10.2
+1403.1 1.9
+1406.2 2.3
+1407.5 1.9
+1408.6 8.3
+1410.0 6.3
+1410.6 2.5
+1412.3 252.4
+1413.4 130.2
+1414.4 44.1
+1415.2 7.8
+1417.9 25.5
+1418.6 23.5
+1419.3 11.0
+1421.5 0.4
+1422.2 2.7
+1423.2 5.9
+1424.7 3.5
+1426.5 42.0
+1427.3 33.9
+1428.2 20.4
+1431.6 2.9
+1432.9 1.3
+1439.1 2.8
+1441.7 7.5
+1442.6 2.4
+1447.4 2.2
+1449.6 1.4
+1455.9 2.5
+1457.6 28.2
+1458.5 18.0
+1459.5 1.9
+1462.4 2.1
+1463.2 1.2
+1465.6 11.3
+1466.7 24.7
+1467.5 2.6
+1474.5 91.8
+1475.3 106.0
+1476.0 35.1
+1476.7 4.7
+1479.6 1.5
+1485.4 4.3
+1490.2 0.4
+1491.4 11.4
+1492.5 3.7
+1493.3 0.9
+1496.3 1.7
+1502.6 3.3
+1504.7 3.1
+1505.4 5.8
+1507.5 0.3
+1513.5 5.5
+1517.0 1.7
+1519.4 2.1
+1520.4 4.9
+1522.3 131.1
+1523.4 81.8
+1524.4 35.7
+1525.3 1.9
+1536.4 9.0
+1537.6 14.8
+1538.4 11.7
+1540.3 478.5
+1541.4 441.3
+1542.5 126.7
+1543.3 22.3
+1544.1 12.2
+1554.4 329.6
+1555.4 230.3
+1556.4 88.7
+1557.5 16.9
+1559.1 1.4
+1560.8 2.3
+1566.4 4.6
+1576.5 8.5
+1577.4 4.4
+1578.5 1.5
+1584.7 1.3
+1590.7 2.1
+1593.6 11.3
+1594.6 4.7
+1610.1 5.9
+1614.8 1.8
+1617.4 4.6
+1619.8 2.2
+1620.5 0.6
+1629.5 12.8
+1630.5 6.2
+1632.6 1.5
+1638.3 2.1
+1641.9 1.8
+1644.5 0.8
+1650.1 0.5
+1653.2 1.6
+1656.7 1.1
+1661.4 0.6
+1665.2 6.8
+1666.3 15.7
+1667.6 11.1
+1669.3 0.4
+1673.3 3.6
+1674.1 2.1
+1677.9 2.4
+1682.4 17.6
+1683.7 11.7
+1684.5 6.0
+1691.1 2.8
+1692.4 2.6
+1701.5 0.3
+1706.3 1.8
+1708.8 0.5
+1715.5 2.1
+1728.6 2.2
+1729.3 0.6
+1733.6 0.4
+1740.3 4.1
+1741.7 3.5
+1748.6 3.1
+1749.5 3.3
+1751.9 4.3
+1767.0 2.5
+1767.7 16.6
+1769.9 3.8
+1771.7 6.3
+1773.9 7.8
+1781.5 5.9
+1782.5 1.0
+1783.8 1.4
+1786.2 4.9
+1802.7 1.9
+1812.5 4.5
+1819.5 15.4
+1832.7 4.0
+1836.8 1.1
+1861.4 1.5
+1863.4 5.7
+1866.2 3.9
+1875.9 3.2
+1878.5 4.4
+1879.4 1.0
+1880.3 2.0
+1881.2 1.5
+1881.8 7.9
+1882.6 7.5
+1883.4 0.6
+1884.2 4.8
+1895.5 2.4
+1896.7 1.0
+1898.2 4.9
+1917.2 2.1
+1919.6 2.9
+1934.6 4.6
+1935.4 15.7
+1936.1 5.1
+1936.7 12.2
+1937.6 3.0
+1950.1 2.3
+1952.6 23.4
+1953.6 38.9
+1954.6 21.0
+1955.4 0.8
+1968.8 0.5
+1995.4 4.5
+S	157	157	509.32
+I	ID	74
+I	RTime	3.4364
+Z	2	1017.63
+144.1 2.7
+154.2 1.2
+155.1 2.9
+161.1 3.5
+163.8 1.6
+168.2 3.0
+175.2 0.6
+180.1 2.2
+187.3 2.7
+200.2 1.2
+201.2 3.5
+203.2 1.3
+205.2 4.6
+209.3 1.6
+214.3 6.6
+215.1 2.2
+218.1 1.7
+219.1 3.7
+221.1 9.5
+226.2 8.0
+231.3 1.7
+234.1 2.2
+244.2 10.6
+246.7 4.6
+248.2 64.9
+258.2 5.8
+258.9 0.6
+266.2 121.3
+271.1 0.8
+272.2 1.6
+275.2 2.5
+282.8 1.3
+284.1 2.9
+289.3 21.0
+290.4 4.8
+294.0 1.7
+300.1 1.7
+303.5 1.1
+310.6 2.5
+312.3 3.0
+326.2 2.7
+328.4 3.2
+329.6 1.2
+331.4 1.2
+333.3 7.0
+334.2 1.5
+335.3 2.7
+343.3 2.7
+344.1 3.4
+345.2 2.5
+347.1 5.0
+349.0 2.2
+350.2 2.9
+352.0 3.0
+354.2 3.4
+358.4 1.1
+359.4 1.8
+361.3 6.6
+363.3 10.8
+364.3 1.2
+371.2 2.0
+372.5 6.0
+375.9 1.7
+379.0 5.3
+380.0 5.4
+381.3 25.2
+386.8 2.9
+387.5 1.2
+388.2 8.8
+391.7 3.5
+393.4 17.7
+394.4 10.8
+395.2 2.5
+400.3 32.0
+401.2 16.0
+402.2 21.7
+402.9 4.3
+404.4 5.5
+405.3 3.0
+406.6 3.2
+409.3 26.0
+411.2 1.1
+412.0 45.2
+413.2 3.5
+414.4 2.5
+415.1 2.7
+417.4 2.0
+418.0 1.6
+418.8 6.5
+421.3 2.7
+422.6 3.5
+423.5 10.6
+424.4 1.7
+426.9 1.1
+427.8 4.0
+428.4 3.2
+432.2 3.7
+433.2 1.2
+439.1 1.7
+440.0 4.0
+442.2 6.3
+443.2 1.2
+445.0 14.8
+446.6 8.6
+448.9 6.9
+450.5 2.7
+451.3 2.5
+455.4 37.7
+456.4 21.2
+459.4 10.0
+460.3 9.3
+461.3 18.6
+462.4 2.0
+464.0 1.2
+464.9 4.1
+465.5 2.5
+467.9 4.8
+468.5 2.0
+470.6 4.4
+471.3 5.6
+472.6 9.6
+473.7 43.0
+474.4 2.0
+475.4 7.4
+478.8 3.9
+479.5 3.4
+481.1 2.2
+482.6 8.6
+483.3 4.1
+484.3 11.3
+485.5 10.6
+487.1 22.6
+487.8 16.5
+489.0 10.3
+489.7 1.1
+491.2 100.6
+491.9 41.2
+492.7 4.0
+495.2 5.3
+497.2 32.5
+497.9 17.2
+499.7 45.4
+500.7 44.2
+501.6 8.1
+506.6 1.3
+509.3 7.0
+517.2 3.2
+526.4 6.6
+527.3 3.0
+533.5 7.9
+536.0 4.6
+538.9 4.4
+541.1 3.2
+542.4 1.6
+543.3 8.3
+544.9 0.6
+547.8 2.9
+549.1 2.9
+550.8 3.5
+552.3 1.2
+555.8 1.5
+557.4 5.5
+560.9 4.9
+565.8 4.0
+576.3 7.5
+578.4 3.7
+580.4 3.2
+581.3 4.0
+583.5 1.3
+587.2 6.0
+589.7 3.0
+600.0 2.0
+601.4 11.6
+602.4 5.0
+604.4 11.6
+605.3 5.0
+611.2 8.5
+613.2 1.7
+618.5 5.9
+623.4 10.6
+634.9 6.4
+635.7 5.4
+636.5 4.4
+638.5 5.5
+639.6 5.0
+640.6 1.3
+645.3 9.8
+646.3 2.5
+648.5 3.7
+651.0 1.6
+657.3 7.1
+658.4 4.1
+659.3 5.6
+666.4 2.5
+667.3 3.4
+668.4 1.1
+673.5 0.8
+675.3 12.1
+676.5 4.6
+681.9 3.4
+682.7 12.8
+689.6 24.3
+690.6 1.3
+691.5 1.1
+692.6 15.5
+693.4 3.0
+698.8 5.5
+700.8 1.7
+704.6 1.8
+705.4 2.7
+710.5 1.8
+711.2 2.7
+712.5 2.4
+716.5 6.4
+719.4 7.9
+725.5 2.2
+729.4 9.1
+730.3 2.5
+734.2 2.0
+735.5 1.0
+736.4 5.4
+743.4 7.4
+747.3 2.7
+760.0 3.9
+761.4 1.7
+771.5 2.5
+774.4 2.4
+785.2 3.7
+786.6 6.1
+790.5 2.0
+791.5 1.7
+800.3 2.2
+803.6 10.6
+804.6 12.6
+817.8 9.1
+818.7 2.0
+828.6 2.5
+844.5 4.5
+853.5 2.0
+854.5 4.1
+857.4 6.9
+861.1 1.3
+871.2 5.0
+888.6 6.5
+890.5 2.2
+910.1 2.2
+915.3 4.0
+943.3 0.8
+956.6 2.0
+S	158	158	427.38
+I	ID	91
+I	RTime	4.2795
+Z	2	853.75
+129.1 31.6
+141.3 4.9
+144.0 1.0
+147.1 10.1
+148.0 1.5
+149.2 2.5
+151.1 2.7
+157.1 1.7
+159.0 1.7
+161.0 2.7
+175.2 3.2
+179.3 1.2
+180.3 2.9
+185.1 5.0
+186.1 3.0
+199.2 2.2
+200.3 1.1
+201.2 2.0
+203.1 2.7
+203.9 1.1
+209.0 4.1
+210.3 2.2
+218.4 8.6
+219.1 3.7
+224.2 2.0
+225.0 1.1
+232.2 6.0
+241.2 2.2
+243.0 1.1
+247.2 1.7
+249.2 1.2
+250.2 2.0
+251.2 11.1
+253.3 7.4
+254.3 4.5
+254.9 1.8
+259.1 1.6
+263.1 3.0
+265.2 3.0
+266.0 2.7
+267.1 12.6
+268.9 89.8
+269.6 1.0
+271.8 3.5
+272.4 7.8
+273.2 1.2
+279.4 1.8
+280.2 5.1
+281.2 4.6
+282.2 23.6
+283.3 3.0
+287.1 40.5
+289.0 7.0
+290.0 8.3
+291.1 20.7
+294.2 2.2
+295.8 8.1
+297.2 3.4
+298.2 32.2
+299.2 39.5
+300.2 53.0
+301.4 1.2
+311.6 14.3
+312.3 31.8
+313.4 8.8
+316.4 4.6
+318.1 3.7
+319.1 1.7
+321.7 1.5
+323.3 2.5
+333.4 1.2
+336.4 2.5
+337.2 0.8
+337.9 4.0
+340.4 1.2
+344.7 7.0
+345.8 7.0
+348.4 3.0
+349.1 2.2
+350.4 5.3
+351.3 1.6
+352.4 3.5
+353.5 7.1
+354.5 2.9
+356.1 2.9
+357.3 1.7
+359.1 22.7
+360.5 3.9
+361.7 6.0
+362.9 19.6
+366.4 4.0
+367.2 19.2
+368.1 4.3
+369.2 2.7
+370.3 1.3
+381.1 43.2
+382.2 6.6
+383.3 11.8
+384.1 12.1
+385.0 1.3
+386.3 3.7
+389.4 1.5
+391.2 11.1
+392.3 33.2
+393.3 10.6
+394.1 8.6
+395.4 16.2
+397.2 10.5
+398.2 4.9
+399.3 2.7
+401.1 2.0
+402.6 3.4
+404.0 7.8
+409.2 120.3
+410.2 50.9
+411.5 11.5
+417.9 173.3
+419.0 50.0
+419.7 0.8
+426.5 1.6
+471.1 1.8
+486.4 3.4
+487.3 4.5
+497.3 2.2
+503.3 4.1
+517.3 1.2
+528.5 1.1
+538.6 4.5
+542.4 2.2
+547.3 3.2
+561.0 1.5
+568.4 1.8
+575.5 4.6
+591.4 3.0
+594.3 3.0
+600.0 1.5
+601.2 4.5
+607.2 2.4
+614.4 1.3
+617.4 1.2
+618.1 2.0
+619.2 6.8
+635.5 15.1
+636.1 1.5
+640.4 1.7
+664.6 3.9
+670.4 3.2
+672.3 5.6
+681.3 2.2
+688.3 8.3
+689.5 3.7
+691.5 3.0
+698.3 12.5
+705.3 12.8
+706.2 10.6
+707.3 11.1
+714.8 4.1
+715.4 20.7
+716.3 2.0
+717.3 2.2
+724.7 5.6
+831.4 2.7
+832.4 2.9
+S	159	159	745.75
+Z	2	1490.49
+224.9 11.6
+227.2 4.7
+232.3 5.0
+234.1 65.0
+235.2 4.8
+238.1 23.0
+240.4 16.4
+242.3 5.9
+245.2 3.8
+246.3 29.4
+249.1 4.4
+250.3 9.3
+254.0 35.3
+254.8 2.3
+255.8 4.9
+259.1 12.8
+260.3 49.6
+262.0 59.5
+263.2 13.0
+270.2 10.6
+271.3 3.3
+274.1 3.5
+288.1 31.6
+290.1 110.7
+291.1 23.7
+297.3 4.8
+300.2 7.0
+305.2 22.2
+308.1 37.7
+309.5 8.5
+316.1 100.0
+317.3 139.6
+318.3 42.7
+319.2 5.2
+325.3 17.8
+327.0 12.3
+328.3 16.5
+330.0 5.3
+339.4 4.1
+340.2 3.8
+341.3 14.7
+342.5 11.2
+343.3 16.3
+347.6 19.7
+348.3 11.5
+351.4 8.8
+355.3 5.6
+356.5 9.4
+357.4 75.7
+358.3 45.4
+359.2 26.2
+360.1 11.9
+361.2 60.1
+362.4 11.2
+364.1 6.4
+371.3 11.6
+373.2 14.6
+375.2 243.6
+376.1 31.5
+377.4 12.5
+379.1 88.3
+380.1 22.5
+382.2 15.9
+383.4 9.8
+385.3 24.9
+386.3 9.7
+391.4 50.8
+393.4 3.7
+397.3 7.1
+400.2 6.6
+401.3 11.2
+402.3 29.3
+403.3 89.1
+404.2 18.7
+407.1 120.2
+408.1 15.7
+409.3 40.0
+412.4 4.4
+414.5 5.9
+416.3 339.6
+417.4 11.5
+420.2 22.6
+421.3 143.3
+422.4 76.6
+423.3 6.6
+424.2 2.1
+425.1 23.9
+426.4 31.8
+427.8 2.9
+430.6 19.4
+436.2 22.2
+437.6 13.9
+439.2 22.4
+440.4 9.0
+446.7 18.0
+449.0 50.4
+452.3 17.4
+453.6 23.7
+457.0 3.1
+458.4 4.7
+459.3 13.4
+461.5 16.7
+462.3 18.5
+463.7 10.5
+465.3 29.8
+466.3 16.9
+468.6 8.0
+471.2 20.3
+472.5 23.0
+473.3 22.9
+474.5 91.9
+475.3 7.1
+476.1 18.2
+477.2 13.7
+484.3 16.9
+487.3 7.3
+490.9 9.5
+497.1 32.0
+499.8 34.3
+500.5 21.6
+501.4 13.9
+504.3 38.5
+505.5 29.3
+508.3 14.9
+509.3 24.6
+509.9 7.2
+511.2 32.1
+515.1 2.1
+518.1 11.0
+520.6 19.1
+521.4 9.0
+522.6 76.1
+525.3 12.0
+526.3 36.3
+527.3 21.7
+530.3 11.0
+532.1 25.7
+533.4 2.4
+534.5 140.5
+535.3 23.6
+536.3 4.9
+538.1 19.7
+538.8 30.3
+540.8 53.6
+542.5 76.7
+543.6 74.1
+544.3 252.5
+545.4 110.0
+546.6 7.3
+551.1 18.1
+553.0 13.8
+555.3 3.8
+557.0 23.5
+562.3 38.9
+563.0 10.4
+564.1 33.4
+565.4 6.9
+567.1 47.8
+568.2 20.2
+569.4 55.7
+571.5 27.3
+573.2 42.1
+576.9 15.1
+578.1 119.2
+578.9 106.4
+580.2 4.8
+585.0 49.7
+585.9 40.0
+587.2 86.4
+588.5 28.7
+589.4 22.6
+590.7 52.6
+591.6 30.1
+592.3 8.7
+593.4 12.1
+594.4 6.6
+595.5 11.3
+597.7 44.2
+598.6 14.8
+599.4 40.5
+600.3 3.3
+602.3 14.5
+603.3 100.8
+605.7 188.4
+606.6 38.5
+607.5 14.1
+608.4 24.4
+609.5 55.3
+610.4 21.4
+612.0 43.0
+614.9 45.2
+615.8 73.9
+616.8 12.3
+617.6 16.0
+618.2 48.5
+619.3 4.6
+620.3 24.1
+621.7 47.5
+623.0 64.6
+624.3 72.6
+625.4 44.6
+626.3 3.6
+627.5 42.6
+628.6 67.0
+629.4 51.3
+630.1 14.2
+631.9 52.9
+632.8 54.1
+634.2 39.3
+635.5 28.1
+637.3 11.3
+639.0 40.7
+640.2 26.0
+643.4 10.9
+644.3 40.9
+645.5 32.5
+648.6 58.4
+651.5 20.1
+652.5 78.4
+654.3 83.6
+655.1 30.1
+656.9 118.0
+657.7 269.9
+658.5 211.8
+659.8 24.5
+660.6 7.8
+661.7 14.4
+663.3 44.8
+666.1 21.8
+666.8 33.7
+667.6 28.6
+669.3 59.6
+670.0 23.0
+670.8 74.6
+671.4 60.2
+672.7 4.6
+673.8 28.5
+674.6 18.4
+675.6 39.7
+676.5 13.1
+677.2 16.6
+677.9 86.8
+678.9 90.2
+680.2 61.8
+682.6 34.5
+683.4 30.2
+684.2 28.3
+685.1 86.4
+686.3 140.6
+687.3 116.5
+688.5 108.2
+689.3 4.8
+690.5 34.8
+691.3 21.5
+693.0 95.1
+694.1 198.1
+695.6 141.9
+698.6 10.6
+699.6 182.3
+700.7 93.1
+701.6 199.0
+702.6 74.0
+704.4 426.8
+705.0 175.9
+706.0 184.9
+707.6 150.9
+708.9 180.1
+709.9 358.4
+710.7 115.9
+711.9 61.3
+713.2 22.6
+714.2 26.0
+715.6 100.5
+716.4 53.3
+717.2 98.1
+718.9 189.5
+719.9 41.9
+720.6 73.5
+721.9 94.1
+723.7 23.2
+725.6 40.1
+727.2 100.1
+728.2 146.3
+729.0 43.0
+729.7 128.5
+730.9 142.0
+731.7 61.5
+732.5 170.7
+733.1 161.5
+734.6 60.2
+735.6 307.2
+736.5 484.5
+737.4 99.4
+739.3 23.7
+749.3 24.9
+750.5 14.2
+751.8 3.9
+754.2 8.5
+755.3 47.1
+759.1 47.4
+760.0 32.2
+762.6 80.8
+763.3 17.0
+764.6 29.3
+765.7 5.6
+767.7 34.1
+769.3 148.9
+770.5 123.3
+772.1 292.8
+773.2 46.6
+774.6 1.4
+775.7 62.0
+777.0 138.5
+777.7 46.3
+778.3 30.2
+779.4 53.1
+780.5 18.7
+781.4 55.4
+782.5 2.4
+783.1 5.2
+784.3 25.8
+785.8 160.9
+786.6 417.8
+787.6 254.1
+788.5 39.3
+789.9 21.1
+792.8 50.7
+795.2 40.2
+797.5 16.4
+798.4 13.7
+799.5 133.9
+800.6 12.3
+802.3 26.7
+803.4 71.8
+804.3 7.7
+805.4 5.5
+806.7 67.9
+807.8 79.2
+809.3 208.5
+810.0 53.7
+813.1 457.4
+814.0 31.2
+814.7 186.5
+815.6 337.7
+816.7 197.3
+817.6 92.0
+818.6 15.0
+820.3 45.6
+821.6 8.2
+823.9 115.3
+824.5 31.7
+826.4 42.7
+827.5 23.9
+830.0 52.3
+831.2 22.4
+832.4 84.5
+833.5 229.5
+834.6 96.1
+835.5 79.0
+837.0 21.4
+838.4 62.0
+839.5 120.0
+840.6 70.4
+843.3 52.9
+844.5 62.1
+846.6 67.0
+847.4 22.4
+848.3 24.6
+849.6 16.2
+851.1 58.5
+851.9 89.5
+852.8 43.8
+853.5 15.6
+854.5 70.2
+855.4 23.8
+857.0 508.8
+857.7 278.0
+858.8 977.4
+859.9 159.4
+861.3 143.3
+862.1 29.3
+862.7 47.6
+864.0 120.6
+864.9 7.2
+866.1 65.1
+868.5 78.3
+870.5 89.5
+871.5 198.8
+872.8 74.3
+873.6 4.7
+874.7 106.8
+877.0 193.6
+877.8 136.1
+879.4 324.3
+880.2 74.2
+881.3 38.1
+882.0 5.0
+883.5 24.0
+884.6 33.7
+885.6 233.8
+886.4 80.7
+887.4 4.4
+888.6 48.9
+889.9 213.8
+891.1 422.6
+892.0 342.6
+892.9 67.4
+894.0 78.6
+895.2 118.7
+895.9 23.6
+897.6 105.2
+898.7 88.7
+899.8 63.6
+900.4 15.2
+901.8 39.9
+902.7 90.2
+904.6 139.9
+905.6 77.5
+906.7 9.0
+907.3 33.8
+908.2 33.0
+909.6 17.0
+910.3 7.3
+911.5 10.7
+912.2 69.3
+912.9 44.1
+913.7 9.4
+915.3 184.6
+916.1 93.0
+918.5 72.4
+920.6 28.8
+921.9 40.4
+922.7 38.3
+923.8 91.9
+924.9 64.2
+925.9 85.0
+926.9 110.2
+928.5 72.6
+929.5 150.7
+930.9 146.6
+932.7 18.6
+933.5 7.0
+936.7 41.4
+939.1 64.6
+940.1 6.2
+941.7 28.5
+942.5 2.6
+943.7 60.4
+944.5 417.4
+946.1 861.2
+947.2 109.0
+948.5 274.9
+949.5 30.5
+951.0 161.4
+952.5 7.5
+953.8 51.6
+955.4 18.8
+957.9 4.4
+960.0 42.9
+963.3 28.1
+965.4 36.9
+967.9 21.0
+969.9 16.2
+970.5 31.7
+972.0 17.4
+973.8 38.9
+974.6 17.7
+975.4 105.0
+976.9 18.2
+978.4 43.5
+979.8 73.9
+982.7 40.3
+984.1 16.1
+985.3 45.4
+986.5 286.3
+987.4 255.5
+988.6 47.8
+993.3 4.7
+997.0 116.7
+998.1 36.2
+998.8 32.9
+1000.1 79.5
+1000.9 41.9
+1003.2 8.5
+1003.9 16.9
+1005.2 47.7
+1007.7 91.1
+1008.4 96.4
+1009.3 70.6
+1010.1 87.8
+1011.1 14.9
+1012.8 37.0
+1014.6 77.4
+1015.5 20.7
+1016.8 4.2
+1019.8 51.8
+1024.6 16.4
+1027.8 8.1
+1029.6 22.8
+1030.9 58.8
+1036.7 50.6
+1038.1 20.5
+1040.0 15.7
+1041.3 65.3
+1041.9 1.4
+1042.9 32.9
+1043.7 44.9
+1045.1 28.8
+1046.7 62.6
+1047.5 27.6
+1048.6 84.0
+1049.3 34.0
+1050.5 13.8
+1051.6 81.2
+1052.3 32.3
+1053.1 19.7
+1056.4 98.8
+1057.3 26.9
+1058.4 93.8
+1060.2 60.2
+1061.6 17.4
+1062.8 9.0
+1063.5 33.8
+1065.5 12.2
+1067.7 496.3
+1068.6 379.9
+1069.6 207.0
+1071.1 94.9
+1072.6 11.9
+1074.4 147.1
+1075.5 97.4
+1078.0 24.1
+1080.1 26.2
+1081.8 31.1
+1085.6 24.9
+1087.5 6.3
+1090.3 23.0
+1094.7 37.1
+1095.8 32.5
+1096.5 14.0
+1097.8 64.8
+1098.6 53.5
+1100.5 13.8
+1102.8 21.5
+1107.1 2.3
+1108.2 88.2
+1109.1 7.3
+1110.7 11.6
+1113.2 104.7
+1114.0 1.8
+1115.7 289.8
+1116.7 131.9
+1117.9 4.1
+1126.4 4.8
+1127.6 12.7
+1130.8 17.0
+1140.3 21.6
+1142.7 6.0
+1151.6 35.6
+1152.6 16.7
+1154.6 182.6
+1155.6 241.1
+1156.7 70.8
+1157.8 39.1
+1159.7 18.4
+1160.8 29.4
+1163.0 3.0
+1165.2 35.4
+1166.9 11.3
+1169.5 25.3
+1171.0 9.7
+1173.7 308.0
+1174.6 188.7
+1175.7 50.3
+1178.3 6.2
+1181.6 24.3
+1183.0 14.5
+1190.7 14.8
+1191.4 22.8
+1200.0 7.9
+1205.5 58.9
+1211.7 27.7
+1212.7 62.2
+1214.3 13.2
+1221.8 15.5
+1222.7 4.5
+1224.3 16.1
+1225.7 22.2
+1226.8 30.3
+1228.1 46.2
+1228.8 287.3
+1229.7 104.9
+1230.6 424.6
+1231.5 77.3
+1235.7 5.8
+1238.6 24.8
+1242.7 8.2
+1243.9 2.6
+1249.7 9.3
+1252.8 9.7
+1254.0 41.1
+1254.9 54.4
+1257.0 18.1
+1265.2 22.1
+1266.2 46.6
+1273.6 14.2
+1286.3 27.6
+1295.9 23.7
+1311.9 9.5
+1314.1 7.1
+1315.4 31.2
+1318.1 17.3
+1321.6 18.5
+1323.8 37.9
+1324.6 77.6
+1326.2 52.8
+1326.9 11.8
+1327.7 7.9
+1336.6 15.0
+1342.0 10.8
+1342.7 52.0
+1343.6 272.2
+1344.5 130.9
+1345.7 44.6
+1350.9 12.0
+1351.9 22.7
+1352.7 66.0
+1356.6 4.9
+1372.1 3.4
+1373.8 4.2
+1388.3 5.0
+1392.2 20.6
+1411.9 6.2
+1437.9 4.5
+1495.7 11.2
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/example-files/search.target.txt b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/example-files/search.target.txt
new file mode 100644
index 0000000..b4193e0
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/example-files/search.target.txt
@@ -0,0 +1,721 @@
+scan	charge	spectrum precursor m/z	spectrum neutral mass	peptide mass	delta_cn	sp score	sp rank	xcorr score	xcorr rank	b/y ions matched	b/y ions total	matches/spectrum	sequence	cleavage type	protein id	flanking aa	unshuffled sequence
+10	2	636.3400	1270.6644	1270.4917	0	56.458275	1	0.843481	1	5	22	6	SGLIVEIQGVQK	trypsin-full-digest	YDR093W	KE	
+10	2	636.3400	1270.6644	1273.4087	0.50464863	49.409576	2	0.41781947	2	4	20	6	TVLDLEVNNTR	trypsin-full-digest	YDR093W	RT	
+10	2	636.3400	1270.6644	1272.5227	0.82345378	22.858458	4	0.1489134	3	4	22	6	MSVEPVVVIDGK	trypsin-full-digest	YIL133C	-G	
+10	2	636.3400	1270.6644	1271.5254	0.99421889	7.6680117	5	0.0048762476	4	2	20	6	KPQVYPALLSR	trypsin-full-digest	YLR371W	KV	
+10	2	636.3400	1270.6644	1270.3618	1.2562495	42.079628	3	-0.21614161	5	4	20	6	TDLPEGEEKPR	trypsin-full-digest	YPL106C	KI	
+11	2	745.2700	1488.5244	1489.7319	0	2799.7004	1	4.9665937	1	21	24	5	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+11	2	745.2700	1488.5244	1486.6195	0.78361297	150.82512	2	1.0747064	2	8	26	5	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+11	2	745.2700	1488.5244	1490.6510	0.92498112	27.513174	5	0.37258846	3	3	24	5	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+11	2	745.2700	1488.5244	1488.7063	0.95597595	86.188286	3	0.21864961	4	5	24	5	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+11	2	745.2700	1488.5244	1485.6539	0.98590338	70.940605	4	0.070012115	5	5	22	5	QEAIYEVYITEK	trypsin-full-digest	YLR371W	RN	
+12	3	472.5600	1414.6565	1411.7252	0	107.23654	1	0.70944363	1	12	44	8	IISYAQGFMLIR	trypsin-full-digest	YHR183W	KE	
+12	3	472.5600	1414.6565	1412.5806	0.29089656	67.485161	3	0.50306892	2	11	44	8	IVNMYGTTETQR	trypsin-full-digest	YBR115C	RA	
+12	3	472.5600	1414.6565	1414.5780	0.30653799	39.472534	6	0.49197221	3	8	40	8	NTLEEYIYTLR	trypsin-full-digest	YPL106C	KG	
+12	3	472.5600	1414.6565	1414.6240	0.33313781	55.1306	4	0.47310114	4	9	44	8	VLEFHPFDPVSK	trypsin-full-digest	YGL008C	KK	
+12	3	472.5600	1414.6565	1413.6769	0.51874274	94.480415	2	0.34142488	5	11	48	8	YGPLLVDIIDPAK	trypsin-full-digest	YKL127W	KA	
+13	1	717.0600	716.0522	717.8204	0	41.040947	2	0.6652953	1	4	10	16	SLEITR	trypsin-full-digest	YLR371W	KD	
+13	1	717.0600	716.0522	716.8506	0.065693147	47.344681	1	0.62158996	2	4	12	16	DVMPAGK	trypsin-full-digest	YBR115C	KG	
+13	1	717.0600	716.0522	715.9341	0.07201229	21.613161	4	0.61738586	3	3	10	16	LLPFVK	trypsin-full-digest	YLR340W	KG	
+13	1	717.0600	716.0522	713.7887	0.64012295	39.931419	3	0.23942451	4	4	12	16	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+13	1	717.0600	716.0522	716.7893	0.67106682	5.8860817	10	0.21883771	5	2	12	16	EAAELGK	trypsin-full-digest	YBR118W	KG	
+14	2	559.1000	1116.1843	1119.1559	0	66.227585	1	0.53043324	1	5	16	11	YHIEEEGSR	trypsin-full-digest	YCR012W	RK	
+14	2	559.1000	1116.1843	1118.2635	0.13069028	23.070383	3	0.46111077	2	4	16	11	FFCALFDAK	trypsin-full-digest	YKL127W	KK	
+14	2	559.1000	1116.1843	1116.1615	0.29996294	12.308622	6	0.37132293	3	3	16	11	YDGAFDCLR	trypsin-full-digest	YBL030C	KK	
+14	2	559.1000	1116.1843	1117.3536	0.48043215	23.054535	4	0.27559605	4	5	18	11	FLDGQIALLK	trypsin-full-digest	YBL076C	KK	
+14	2	559.1000	1116.1843	1116.2769	0.61405927	10.694719	7	0.2047158	5	3	18	11	LVDEVVDSLK	trypsin-full-digest	YMR235C	RF	
+14	3	559.1000	1674.2765	1675.6885	0	63.059669	1	0.767111	1	13	60	5	ATAGDTHLGGEDFDNR	trypsin-full-digest	YLL024C	KL	
+14	3	559.1000	1674.2765	1671.7804	1.2015421	33.726143	2	-0.15460518	2	8	48	5	ITYSSDYFDELYR	trypsin-full-digest	YOR168W	KL	
+14	3	559.1000	1674.2765	1676.9332	1.3099092	29.03307	3	-0.23773479	3	7	56	5	YLTNTGNLLLASQIR	trypsin-full-digest	YBL076C	KH	
+14	3	559.1000	1674.2765	1673.7159	1.5774156	10.770131	5	-0.44294184	4	6	56	5	HEAEWSGLSNDATTR	trypsin-full-digest	YDL223C	RN	
+14	3	559.1000	1674.2765	1673.7625	1.8034767	21.514181	4	-0.61635584	5	7	64	5	TTHPVSHGHSGSSTGPK	trypsin-full-digest	YDL223C	KS	
+15	2	732.1300	1462.2444	1462.7675	0	1342.2397	1	3.8226082	1	19	24	5	NEVSAMPTLLLFK	trypsin-full-digest	YLR043C	KN	
+15	2	732.1300	1462.2444	1460.6036	0.92579734	21.992445	3	0.28364772	2	4	22	5	EEPDLENLLFNK	trypsin-full-digest	YHR183W	RF	
+15	2	732.1300	1462.2444	1463.5709	0.93476593	3.2144897	4	0.24936424	3	2	24	5	TCVVETPTLNSDK	trypsin-full-digest	YBR115C	RS	
+15	2	732.1300	1462.2444	1460.4707	0.94384331	46.283249	2	0.2146651	4	6	24	5	ELGDAYVSSDEEF	trypsin-full-digest	YLR249W	K-	
+15	2	732.1300	1462.2444	1459.6195	0.98524964	2.9621341	5	0.056384861	5	2	26	5	SQVDEIVLVGGSTR	trypsin-full-digest	YLL024C	KI	
+16	1	713.0700	712.0622	713.7887	0	40.185627	2	0.4695082	1	4	12	9	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+16	1	713.0700	712.0622	710.7880	0.34402412	97.301079	1	0.30798605	2	6	12	9	HIDAGAK	trypsin-full-digest	YGR192C	KK	
+16	1	713.0700	712.0622	714.8626	0.65348947	8.9418478	5	0.16268952	3	2	10	9	ALPTWK	trypsin-full-digest	YMR235C	KD	
+16	1	713.0700	712.0622	710.8309	1.0855368	13.639264	3	-0.040160265	4	2	10	9	AFAQFK	trypsin-full-digest	YJR069C	KE	
+16	1	713.0700	712.0622	712.8472	1.3372214	9.0141134	4	-0.15832822	5	2	12	9	TPGGILR	trypsin-full-digest	YER056C-A	KA	
+17	2	495.2500	988.4844	989.0935	0	94.401619	2	0.65849799	1	5	16	3	SLEASVIDR	trypsin-full-digest	YBR115C	KN	
+17	2	495.2500	988.4844	988.1950	0.14087622	47.611462	3	0.56573129	2	4	18	3	TPLPPAPAPK	trypsin-full-digest	YBL030C	KK	
+17	2	495.2500	988.4844	987.0771	0.40132889	150.00021	1	0.39422372	3	6	16	3	YSFLEGGSK	trypsin-full-digest	YGL009C	KL	
+18	3	1032.4000	3094.1765	3095.2366	0	1794.3577	1	4.4612322	1	41	108	2	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+18	3	1032.4000	3094.1765	3095.4709	0.91822755	28.71706	2	0.364806	2	10	112	2	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+19	2	604.2900	1206.5643	1207.4535	0	4.0179791	2	0.085511789	1	2	18	2	DTLKPMAIYR	trypsin-full-digest	YLR371W	RV	
+19	2	604.2900	1206.5643	1204.3109	1.6698694	10.554982	1	-0.057281736	2	3	20	2	VNGDAHVISHR	trypsin-full-digest	YGR157W	RA	
+19	3	604.2900	1809.8464	1808.0363	0	139.71983	1	0.43815228	1	14	68	4	GYLVAMTGDGVNDAPSLK	trypsin-full-digest	YGL008C	RK	
+19	3	604.2900	1809.8464	1810.0775	0.73968351	45.731903	3	0.11405826	2	9	68	4	LQDGVPDSIALLAEAGIK	trypsin-full-digest	YDR093W	RL	
+19	3	604.2900	1809.8464	1810.0824	1.4776366	58.53331	2	-0.20927754	3	8	52	4	LLNFIDELTNWYIR	trypsin-full-digest	YBL076C	KF	
+19	3	604.2900	1809.8464	1812.0063	1.701064	40.476826	4	-0.30717278	4	10	64	4	YTVSFIEGDGIGPEISK	trypsin-full-digest	YOR136W	KS	
+20	2	450.9000	899.7844	902.0154	0	14.423851	3	0.1545447	1	3	16	12	STVVSANPK	trypsin-full-digest	YOR267C	KK	
+20	2	450.9000	899.7844	897.0107	0.43213871	30.959551	2	0.087759949	2	3	12	12	LDDEFMK	trypsin-full-digest	YMR309C	RS	
+20	2	450.9000	899.7844	898.0265	0.48145139	5.8385301	5	0.080138937	3	2	14	12	FFADAVTK	trypsin-full-digest	YHR183W	KA	
+20	2	450.9000	899.7844	896.9524	0.78898019	50.266438	1	0.032611992	4	3	14	12	SSFNDISK	trypsin-full-digest	YMR309C	KL	
+20	2	450.9000	899.7844	902.0586	1.8137401	13.619667	4	-0.12575921	5	3	16	12	QGVTSLGIK	trypsin-full-digest	YML092C	KA	
+21	1	805.0000	803.9922	804.8956	0	124.69447	1	0.80470002	1	5	12	20	ESTIDIK	trypsin-full-digest	YOR267C	KI	
+21	1	805.0000	803.9922	804.8957	0.14753152	83.322594	2	0.68598139	2	4	12	20	ESVTEIK	trypsin-full-digest	YGR157W	KA	
+21	1	805.0000	803.9922	803.8675	0.27760506	22.862658	9	0.58131123	3	3	12	20	ELDTAQK	trypsin-full-digest	YGR192C	KH	
+21	1	805.0000	803.9922	805.9292	0.56622195	59.186016	3	0.34906122	4	5	12	20	FSPSQLK	trypsin-full-digest	YMR073C	KN	
+21	1	805.0000	803.9922	804.8577	0.63594806	38.015034	6	0.2929526	5	3	10	20	EWNQTK	trypsin-full-digest	YDR093W	KF	
+22	1	1489.8500	1488.8422	1489.7319	0	374.82031	1	3.0246928	1	14	24	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+22	1	1489.8500	1488.8422	1486.6195	0.84436226	36.411674	2	0.47075641	2	6	26	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+22	1	1489.8500	1488.8422	1490.6510	1.00218	3.5401781	4	-0.0065939161	3	2	24	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+22	1	1489.8500	1488.8422	1488.7063	1.0877013	4.2567067	3	-0.26526943	4	2	24	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+23	1	805.0000	803.9922	804.8957	0	151.28577	1	0.60042703	1	6	12	20	ESVTEIK	trypsin-full-digest	YGR157W	KA	
+23	1	805.0000	803.9922	803.8675	0.23424846	53.851978	4	0.45977792	2	4	12	20	ELDTAQK	trypsin-full-digest	YGR192C	KH	
+23	1	805.0000	803.9922	804.8956	0.25316995	72.456558	2	0.44841695	3	4	12	20	ESTIDIK	trypsin-full-digest	YOR267C	KI	
+23	1	805.0000	803.9922	804.9012	0.29283255	23.882532	11	0.42460245	4	3	12	20	VAHTSYK	trypsin-full-digest	YML092C	KR	
+23	1	805.0000	803.9922	804.8987	0.47863716	46.161007	5	0.31304035	5	4	12	20	VSTTLER	trypsin-full-digest	YDR093W	RR	
+24	3	830.6200	2488.8364	2490.7063	0	26.858793	1	0.14122425	1	13	84	2	AAGQLDQLVEDYINDELEIVSR	trypsin-full-digest	YBR115C	RI	
+24	3	830.6200	2488.8364	2489.7822	1.78395	18.704006	2	-0.11071275	2	10	84	2	VMPYSTGLTTPLSNFEAQQNYK	trypsin-full-digest	YBL076C	KD	
+25	2	745.5500	1489.0844	1489.7319	0	1807.792	1	4.2164721	1	19	24	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+25	2	745.5500	1489.0844	1486.6195	0.81398946	106.51873	3	0.78430814	2	7	26	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+25	2	745.5500	1489.0844	1488.7063	0.82931358	207.0804	2	0.71969455	3	8	24	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+25	2	745.5500	1489.0844	1490.6510	0.85102826	25.70677	4	0.62813509	4	3	24	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+26	2	692.3800	1382.7444	1382.4467	0	2156.4043	1	3.8436441	1	20	24	5	TASEFDSAIAQDK	trypsin-full-digest	YLR043C	KL	
+26	2	692.3800	1382.7444	1381.6099	0.87371606	76.68457	2	0.48539051	2	5	22	5	LAMFLTDSNTIR	trypsin-full-digest	YDR037W	RE	
+26	2	692.3800	1382.7444	1381.5258	0.90621096	30.044098	3	0.36049169	3	4	22	5	MSESNAHFSFPK	trypsin-full-digest	YBL076C	-E	
+26	2	692.3800	1382.7444	1380.6042	1.055408	21.984407	4	-0.21296872	4	3	22	5	EVVELPLLSPER	trypsin-full-digest	YKL145W	RF	
+26	2	692.3800	1382.7444	1383.6108	1.0793326	2.7308655	5	-0.30492619	5	1	26	5	NVIVSGIVLAADGR	trypsin-full-digest	YBL076C	KK	
+27	2	732.5500	1463.0844	1462.7675	0	1126.2389	1	2.6634736	1	17	24	4	NEVSAMPTLLLFK	trypsin-full-digest	YLR043C	KN	
+27	2	732.5500	1463.0844	1460.6036	0.81959116	66.824799	3	0.48051417	2	6	22	4	EEPDLENLLFNK	trypsin-full-digest	YHR183W	RF	
+27	2	732.5500	1463.0844	1460.4707	0.88409299	92.661507	2	0.30871528	3	7	24	4	ELGDAYVSSDEEF	trypsin-full-digest	YLR249W	K-	
+27	2	732.5500	1463.0844	1463.5709	0.96493638	15.490486	4	0.093391061	4	3	24	4	TCVVETPTLNSDK	trypsin-full-digest	YBR115C	RS	
+28	2	613.2600	1224.5044	1222.3203	0	26.820997	2	0.5495218	1	4	22	5	GGEGEVSVFVSR	trypsin-full-digest	YDR037W	KV	
+28	2	613.2600	1224.5044	1223.4375	0.018783558	28.635321	1	0.53919983	2	4	20	5	LIDFGSAVVFR	trypsin-full-digest	YOR267C	KY	
+28	2	613.2600	1224.5044	1224.3788	0.8169654	6.3640132	5	0.1005815	3	2	18	5	LAFLENQDFK	trypsin-full-digest	YBR115C	RL	
+28	2	613.2600	1224.5044	1227.4233	0.84511566	13.379468	3	0.085112311	4	3	18	5	IEVLEQELVR	trypsin-full-digest	YGR086C	KA	
+28	2	613.2600	1224.5044	1223.2670	0.96065545	8.3532753	4	0.021620696	5	2	18	5	YYGGNEHIDR	trypsin-full-digest	YLR058C	RM	
+29	2	614.2600	1226.5044	1229.3525	0	21.443193	1	0.31570217	1	3	20	3	EILGTDEPTVR	trypsin-full-digest	YKL127W	KT	
+29	2	614.2600	1226.5044	1224.3788	0.23751414	15.323318	2	0.24071844	2	3	18	3	LAFLENQDFK	trypsin-full-digest	YBR115C	RL	
+29	2	614.2600	1226.5044	1227.4233	1.4932648	2.4419763	3	-0.15572478	3	1	18	3	IEVLEQELVR	trypsin-full-digest	YGR086C	KA	
+30	1	715.0700	714.0622	716.7460	0	23.359188	1	0.30748594	1	3	10	12	KPDDDK	trypsin-full-digest	YKL145W	KI	
+30	1	715.0700	714.0622	716.7893	0.64147574	6.6294503	3	0.11024117	2	2	12	12	EAAELGK	trypsin-full-digest	YBR118W	KG	
+30	1	715.0700	714.0622	713.7887	0.78619045	4.9657464	4	0.065743424	3	2	12	12	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+30	1	715.0700	714.0622	716.8852	0.82486218	1.6637436	9	0.05385242	4	1	10	12	ALLICK	trypsin-full-digest	YDR093W	KG	
+30	1	715.0700	714.0622	712.8472	0.84074181	8.0855684	2	0.048969656	5	2	12	12	TPGGILR	trypsin-full-digest	YER056C-A	KA	
+31	3	501.2200	1500.6365	1500.4829	0	75.014168	1	0.738213	1	9	44	3	YLPNGDCECCGR	trypsin-full-digest	YBR115C	RA	
+31	3	501.2200	1500.6365	1497.7600	0.61014986	57.982483	2	0.28779244	2	8	48	3	LHHAFFVGDILTK	trypsin-full-digest	YBR115C	KR	
+31	3	501.2200	1500.6365	1500.7172	0.6992386	25.314043	3	0.22202596	3	5	48	3	AALLNQYFAQAYK	trypsin-full-digest	YGL245W	KG	
+32	3	1032.7900	3095.3467	3095.2366	0	1021.062	1	4.1811695	1	33	108	2	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+32	3	1032.7900	3095.3467	3095.4709	1.08211	25.482035	2	-0.34331581	2	8	112	2	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+33	2	433.7900	865.5644	868.0007	0	24.923223	2	0.27615401	1	3	14	13	EPGVPTIR	trypsin-full-digest	YDR399W	KI	
+33	2	433.7900	865.5644	863.9689	0.25559467	20.780163	4	0.20557052	2	2	12	13	EYQVIGR	trypsin-full-digest	YMR242C	KR	
+33	2	433.7900	865.5644	863.9843	0.3070561	21.143938	3	0.19135924	3	3	14	13	MSSNAQVK	trypsin-full-digest	YBL030C	-T	
+33	2	433.7900	865.5644	864.9566	0.67410392	11.694733	7	0.089997508	4	2	12	13	NIQHPEK	trypsin-full-digest	YDL223C	KN	
+33	2	433.7900	865.5644	868.0435	0.77937192	10.029391	8	0.060927331	5	2	12	13	AYVQFLK	trypsin-full-digest	YKL127W	KE	
+33	3	433.7900	1298.3466	1295.5011	0	142.93625	1	0.74851775	1	11	44	5	TSFFQALGVPTK	trypsin-full-digest	YLR340W	KI	
+33	3	433.7900	1298.3466	1300.4741	1.1231706	11.750471	5	-0.092195369	2	3	40	5	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+33	3	433.7900	1298.3466	1298.5687	1.2744842	56.905846	2	-0.20545629	3	6	40	5	LNNPAIALMWR	trypsin-full-digest	YHR183W	KG	
+33	3	433.7900	1298.3466	1299.4120	1.2848094	14.490228	4	-0.21318488	4	4	36	5	FEELCADLFR	trypsin-full-digest	YLL024C	RS	
+33	3	433.7900	1298.3466	1299.4670	1.4924383	46.446587	3	-0.36859885	5	7	40	5	MPYTLSDAHHK	trypsin-full-digest	YLR058C	-L	
+34	2	750.9200	1499.8243	1500.4829	0	35.232906	1	0.51629972	1	4	22	3	YLPNGDCECCGR	trypsin-full-digest	YBR115C	RA	
+34	2	750.9200	1499.8243	1500.7172	0.51376176	11.712827	3	0.25104466	2	2	24	3	AALLNQYFAQAYK	trypsin-full-digest	YGL245W	KG	
+34	2	750.9200	1499.8243	1497.7600	0.79214215	14.823524	2	0.10731694	3	3	24	3	LHHAFFVGDILTK	trypsin-full-digest	YBR115C	KR	
+35	1	709.0700	708.0622	708.7692	0	14.558948	3	0.26784292	1	2	10	8	DFQTAK	trypsin-full-digest	YMR309C	KD	
+35	1	709.0700	708.0622	709.8869	0.36011532	11.018554	4	0.17138858	2	2	10	8	SIHILK	trypsin-full-digest	YMR242C	RV	
+35	1	709.0700	708.0622	710.8309	0.46457091	52.933228	1	0.14341089	3	3	10	8	AFAQFK	trypsin-full-digest	YJR069C	KE	
+35	1	709.0700	708.0622	710.7880	0.66859102	16.86434	2	0.088765554	4	2	12	8	HIDAGAK	trypsin-full-digest	YGR192C	KK	
+35	1	709.0700	708.0622	707.7845	0.86462736	2.7231455	5	0.036258604	5	1	10	8	FESAVR	trypsin-full-digest	YOR168W	RK	
+36	2	427.3800	852.7444	853.0293	0	107.2902	1	0.787049	1	6	16	13	GPLATPIGK	trypsin-full-digest	YOR136W	KG	
+36	2	427.3800	852.7444	852.0445	0.28271866	70.995552	2	0.56453556	2	5	14	13	HASLILAK	trypsin-full-digest	YMR235C	KA	
+36	2	427.3800	852.7444	852.8194	0.68353808	50.631237	3	0.24907105	3	3	12	13	DSCTENK	trypsin-full-digest	YNL166C	KE	
+36	2	427.3800	852.7444	855.0451	0.69871479	31.401226	4	0.23712622	4	4	14	13	LLGPQLSK	trypsin-full-digest	YGL135W	RA	
+36	2	427.3800	852.7444	852.0011	0.70649135	10.25797	8	0.2310057	5	2	14	13	LPLNPNGK	trypsin-full-digest	YBR115C	KV	
+37	2	652.3400	1302.6644	1301.4161	0	613.67346	1	2.9785695	1	18	22	8	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+37	2	652.3400	1302.6644	1301.4161	0.77743554	51.197414	3	0.66292375	2	6	22	8	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+37	2	652.3400	1302.6644	1303.4968	0.8709349	69.481659	2	0.3844294	3	8	22	8	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+37	2	652.3400	1302.6644	1304.4626	0.90986937	19.165369	5	0.26846039	4	5	22	8	IPGTFEPDTLSK	trypsin-full-digest	YDL223C	KS	
+37	2	652.3400	1302.6644	1300.4741	0.92362046	8.7759972	6	0.22750174	5	3	20	8	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+38	3	1032.3900	3094.1465	3095.2366	0	1161.2994	1	4.266221	1	34	108	2	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+38	3	1032.3900	3094.1465	3095.4709	0.91375649	57.854763	2	0.36793384	2	12	112	2	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+39	2	613.1300	1224.2444	1223.4375	0	19.768681	2	0.47953755	1	3	20	5	LIDFGSAVVFR	trypsin-full-digest	YOR267C	KY	
+39	2	613.1300	1224.2444	1222.3203	0.55245852	38.796162	1	0.21461295	2	5	22	5	GGEGEVSVFVSR	trypsin-full-digest	YDR037W	KV	
+39	2	613.1300	1224.2444	1221.2867	0.68277049	5.8917556	5	0.15212347	3	2	22	5	TTTPAATSEQSK	trypsin-full-digest	YDL223C	KV	
+39	2	613.1300	1224.2444	1223.2670	0.94518626	8.5665131	4	0.026285237	4	2	18	5	YYGGNEHIDR	trypsin-full-digest	YLR058C	RM	
+39	2	613.1300	1224.2444	1224.3788	1.0179251	15.589462	3	-0.0085957637	5	3	18	5	LAFLENQDFK	trypsin-full-digest	YBR115C	RL	
+40	2	636.3700	1270.7244	1270.4917	0	35.940578	2	0.80229896	1	4	22	6	SGLIVEIQGVQK	trypsin-full-digest	YDR093W	KE	
+40	2	636.3700	1270.7244	1273.4087	0.023744045	95.220009	1	0.78324914	2	6	20	6	TVLDLEVNNTR	trypsin-full-digest	YDR093W	RT	
+40	2	636.3700	1270.7244	1272.5227	0.83309722	23.839369	3	0.13390592	3	4	22	6	MSVEPVVVIDGK	trypsin-full-digest	YIL133C	-G	
+40	2	636.3700	1270.7244	1271.5254	0.85973752	0.86187017	6	0.11253244	4	1	20	6	KPQVYPALLSR	trypsin-full-digest	YLR371W	KV	
+40	2	636.3700	1270.7244	1272.3778	1.3148003	14.258236	4	-0.25256389	5	4	22	6	VTAVVESPEGER	trypsin-full-digest	YGL008C	KI	
+41	2	1003.8400	2005.6644	2006.3051	0	419.7645	1	3.8897491	1	16	34	3	SGVGICATCVLRPDLLFK	trypsin-full-digest	YEL027W	KN	
+41	2	1003.8400	2005.6644	2004.0973	0.74423027	39.264839	2	0.99488002	2	5	36	3	EANPSTQVPQSDTFPNGSK	trypsin-full-digest	YMR145C	RR	
+41	2	1003.8400	2005.6644	2005.2764	1.0753206	9.034647	3	-0.29297847	3	4	34	3	IPDIENSVNMVPVDHVAR	trypsin-full-digest	YBR115C	KV	
+42	3	1032.2600	3093.7566	3095.2366	0	1344.3297	1	4.2084866	1	36	108	3	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+42	3	1032.2600	3093.7566	3095.4709	1.0023168	51.772331	2	-0.0097504091	2	11	112	3	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+42	3	1032.2600	3093.7566	3090.7644	1.1557556	13.163209	3	-0.65549535	3	6	112	3	NIVPVIMAGIIAIYGLVVSVLVCYSLGQK	trypsin-full-digest	YEL027W	KQ	
+43	1	713.0700	712.0622	710.7880	0	35.014496	3	0.36360914	1	4	12	9	HIDAGAK	trypsin-full-digest	YGR192C	KK	
+43	1	713.0700	712.0622	714.7765	0.043656271	37.214542	2	0.34773532	2	4	12	9	SGPTPTR	trypsin-full-digest	YDL223C	KS	
+43	1	713.0700	712.0622	713.7887	0.12476196	39.507935	1	0.31824455	3	4	12	9	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+43	1	713.0700	712.0622	710.8309	1.0670638	12.245291	4	-0.024385018	4	2	10	9	AFAQFK	trypsin-full-digest	YJR069C	KE	
+43	1	713.0700	712.0622	714.8626	1.256899	9.9744434	5	-0.093410835	5	2	10	9	ALPTWK	trypsin-full-digest	YMR235C	KD	
+44	2	1002.5200	2003.0244	2000.2000	0	4.9326487	2	0.64485914	1	3	28	4	FESIIHEFDPWFNYR	trypsin-full-digest	YGL022W	KA	
+44	2	1002.5200	2003.0244	2005.2764	0.12105732	35.548817	1	0.56679422	2	6	34	4	IPDIENSVNMVPVDHVAR	trypsin-full-digest	YBR115C	KV	
+44	2	1002.5200	2003.0244	2000.1700	0.99633354	3.1540933	3	0.0023643672	3	2	34	4	ESDTGLAPSHLWDIMGDR	trypsin-full-digest	YKL145W	KQ	
+44	2	1002.5200	2003.0244	2004.0973	1.272543	2.1951361	4	-0.17575185	4	2	36	4	EANPSTQVPQSDTFPNGSK	trypsin-full-digest	YMR145C	RR	
+45	2	419.3200	836.6244	837.9280	0	120.29333	1	0.93879902	1	8	12	10	ETSNFIK	trypsin-full-digest	YBR118W	KK	
+45	2	419.3200	836.6244	839.0054	0.21616718	73.09761	2	0.73586148	2	6	14	10	IAGLNPVR	trypsin-full-digest	YPL106C	RI	
+45	2	419.3200	836.6244	835.9554	0.55938864	40.067127	4	0.41364554	3	5	12	10	FDNLLSK	trypsin-full-digest	YDL198C	R-	
+45	2	419.3200	836.6244	835.0110	0.65359831	45.420536	3	0.32520157	4	4	12	10	EYILGLK	trypsin-full-digest	YDL198C	KD	
+45	2	419.3200	836.6244	835.9554	0.72016436	31.306742	5	0.26270941	5	5	14	10	IGDYAGIK	trypsin-full-digest	YMR303C	KW	
+46	2	613.8100	1225.6044	1224.3788	0	7.4563694	3	0.28366849	1	2	18	4	LAFLENQDFK	trypsin-full-digest	YBR115C	RL	
+46	2	613.8100	1225.6044	1223.4375	0.78064227	9.3816624	2	0.06222488	2	2	20	4	LIDFGSAVVFR	trypsin-full-digest	YOR267C	KY	
+46	2	613.8100	1225.6044	1227.4233	0.89254183	12.353053	1	0.030482505	3	2	18	4	IEVLEQELVR	trypsin-full-digest	YGR086C	KA	
+46	2	613.8100	1225.6044	1223.2670	1.9748561	3.6607263	4	-0.27653596	4	1	18	4	YYGGNEHIDR	trypsin-full-digest	YLR058C	RM	
+47	2	731.7700	1461.5244	1462.7675	0	977.83374	1	2.9550073	1	16	24	5	NEVSAMPTLLLFK	trypsin-full-digest	YLR043C	KN	
+47	2	731.7700	1461.5244	1460.6036	0.76668084	39.054245	4	0.68945986	2	5	22	5	EEPDLENLLFNK	trypsin-full-digest	YHR183W	RF	
+47	2	731.7700	1461.5244	1459.6195	0.77189511	53.278816	3	0.67405158	3	6	26	5	SQVDEIVLVGGSTR	trypsin-full-digest	YLL024C	KI	
+47	2	731.7700	1461.5244	1460.4707	0.88700467	20.282669	5	0.333902	4	3	24	5	ELGDAYVSSDEEF	trypsin-full-digest	YLR249W	K-	
+47	2	731.7700	1461.5244	1463.5709	0.93729258	89.043457	2	0.18530098	5	7	24	5	TCVVETPTLNSDK	trypsin-full-digest	YBR115C	RS	
+48	2	692.1400	1382.2644	1382.4467	0	1650.222	1	3.2511344	1	19	24	7	TASEFDSAIAQDK	trypsin-full-digest	YLR043C	KL	
+48	2	692.1400	1382.2644	1379.3623	0.91646332	111.14242	2	0.27158907	2	7	24	7	FDDGAGGDNEVQR	trypsin-full-digest	YKL145W	RT	
+48	2	692.1400	1382.2644	1381.6099	0.94984984	56.814457	3	0.16304493	3	5	22	7	LAMFLTDSNTIR	trypsin-full-digest	YDR037W	RE	
+48	2	692.1400	1382.2644	1381.5258	1.0133696	15.170854	4	-0.043466073	4	3	22	7	MSESNAHFSFPK	trypsin-full-digest	YBL076C	-E	
+48	2	692.1400	1382.2644	1379.5791	1.0143504	13.739942	5	-0.046654966	5	3	24	7	LIVTAHSSSHSIK	trypsin-full-digest	YLR371W	RY	
+49	2	652.2200	1302.4243	1301.4161	0	1331.3566	1	2.9836347	1	19	22	9	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+49	2	652.2200	1302.4243	1301.4161	0.47995821	476.32742	2	1.5516148	2	13	22	9	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+49	2	652.2200	1302.4243	1300.4741	0.68522078	147.28616	3	0.93918622	3	8	20	9	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+49	2	652.2200	1302.4243	1303.4968	0.76649767	98.610008	4	0.69668561	4	7	22	9	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+49	2	652.2200	1302.4243	1304.4626	0.83955383	96.138992	5	0.47871277	5	7	22	9	IPGTFEPDTLSK	trypsin-full-digest	YDL223C	KS	
+50	2	651.2900	1300.5643	1301.4161	0	1851.6044	1	4.5879292	1	20	22	10	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+50	2	651.2900	1300.5643	1301.4161	0.68850791	133.35484	2	1.4291036	2	8	22	10	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+50	2	651.2900	1300.5643	1303.4968	0.83599889	122.15955	3	0.75242537	3	7	22	10	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+50	2	651.2900	1300.5643	1298.5687	0.91140366	20.537592	6	0.40647364	4	3	20	10	LNNPAIALMWR	trypsin-full-digest	YHR183W	KG	
+50	2	651.2900	1300.5643	1300.4741	0.93134964	60.500343	4	0.31496304	5	5	20	10	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+51	2	498.7000	995.3844	996.0446	0	619.99927	1	2.5252917	1	13	18	14	NGFQTGSASK	trypsin-full-digest	YLR185W	KA	
+51	2	498.7000	995.3844	993.0570	0.73925728	16.682711	7	0.65845144	2	3	14	14	GEINCCLK	trypsin-full-digest	YOR267C	RQ	
+51	2	498.7000	995.3844	998.1502	0.76451415	156.03938	2	0.59467053	3	8	20	14	IAAVGAANGVR	trypsin-full-digest	YKL127W	KK	
+51	2	498.7000	995.3844	998.1038	0.81507969	33.531857	5	0.46697778	4	4	16	14	SSIQLGEHK	trypsin-full-digest	YLR371W	KK	
+51	2	498.7000	995.3844	993.2323	0.85587269	60.745483	3	0.36396354	5	5	14	14	VSILMFQR	trypsin-full-digest	YPL266W	RE	
+52	2	501.1300	1000.2444	999.1753	0	142.79124	1	1.1606123	1	8	16	10	EALGELVIR	trypsin-full-digest	YPL215W	KA	
+52	2	501.1300	1000.2444	998.1502	0.34597751	99.963516	2	0.75906658	2	7	20	10	IAAVGAANGVR	trypsin-full-digest	YKL127W	KK	
+52	2	501.1300	1000.2444	1003.0769	0.72584987	20.871323	6	0.31818202	3	3	16	10	NLDGETNLK	trypsin-full-digest	YDR093W	KV	
+52	2	501.1300	1000.2444	1003.1383	0.7358076	44.979645	4	0.30662498	4	5	18	10	AVNTGMEPGK	trypsin-full-digest	YLR340W	RT	
+52	2	501.1300	1000.2444	1000.1217	0.74814993	32.278728	5	0.29230028	5	4	12	10	EAYYWLR	trypsin-full-digest	YGL022W	RM	
+52	3	501.1300	1500.3666	1500.7172	0	43.558441	1	0.55699539	1	8	48	3	AALLNQYFAQAYK	trypsin-full-digest	YGL245W	KG	
+52	3	501.1300	1500.3666	1500.4829	1.2666898	20.81834	2	-0.14854498	2	6	44	3	YLPNGDCECCGR	trypsin-full-digest	YBR115C	RA	
+52	3	501.1300	1500.3666	1497.7600	2.3426661	5.7192822	3	-0.74785888	3	3	48	3	LHHAFFVGDILTK	trypsin-full-digest	YBR115C	KR	
+53	2	745.7500	1489.4844	1489.7319	0	2781.0261	1	5.3343987	1	21	24	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+53	2	745.7500	1489.4844	1486.6195	0.76325125	235.51993	2	1.2629123	2	10	26	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+53	2	745.7500	1489.4844	1490.6510	0.9047128	25.391062	4	0.50830007	3	3	24	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+53	2	745.7500	1489.4844	1488.7063	0.95565957	74.514969	3	0.23652941	4	5	24	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+54	3	410.2000	1227.5765	1227.4233	0	56.159355	1	0.036128547	1	6	36	2	IEVLEQELVR	trypsin-full-digest	YGR086C	KA	
+54	3	410.2000	1227.5765	1229.3525	5.2370372	44.455582	2	-0.153078	2	7	40	2	EILGTDEPTVR	trypsin-full-digest	YKL127W	KT	
+55	2	475.8100	949.6044	949.0466	0	26.808455	2	0.71967018	1	4	14	9	MSQQDNVK	trypsin-full-digest	YDR037W	-A	
+55	2	475.8100	949.6044	950.1027	0.18550882	35.054756	1	0.58616501	2	5	14	9	SFLESVIR	trypsin-full-digest	YBR009C	KD	
+55	2	475.8100	949.6044	950.0160	0.27314121	11.84093	6	0.52309859	3	3	14	9	QTNPESFK	trypsin-full-digest	YDL198C	RG	
+55	2	475.8100	949.6044	951.0929	0.44186732	13.180162	5	0.40167144	4	3	14	9	EHAPWALK	trypsin-full-digest	YGL009C	RD	
+55	2	475.8100	949.6044	949.1149	0.47345805	13.361526	4	0.37893653	5	3	14	9	IFENVSIK	trypsin-full-digest	YDR205W	KA	
+56	2	902.9600	1803.9044	1801.9713	0	271.61176	1	1.4312	1	12	32	2	AEAESLVAEAQLSNITR	trypsin-full-digest	YGR086C	RS	
+56	2	902.9600	1803.9044	1805.0215	0.91516519	30.447412	2	0.12141556	2	5	32	2	LSAIESLAGVEILCSDK	trypsin-full-digest	YGL008C	KT	
+57	2	564.6800	1127.3444	1126.2928	0	1.6282531	8	0.38786855	1	1	18	9	GDVVMIYSSR	trypsin-full-digest	YBR115C	RG	
+57	2	564.6800	1127.3444	1129.2966	0.69543523	16.327734	3	0.1181311	2	4	18	9	NVVAVEMDPR	trypsin-full-digest	YPL266W	KM	
+57	2	564.6800	1127.3444	1126.2004	0.80020344	2.7844698	7	0.077494793	3	1	18	9	CTINGVSYGR	trypsin-full-digest	YDR093W	KA	
+57	2	564.6800	1127.3444	1125.2004	0.85385883	19.824213	2	0.056683555	4	3	20	9	YESATASALVN	trypsin-full-digest	YDR064W	K-	
+57	2	564.6800	1127.3444	1126.2340	0.9029569	32.730118	1	0.037639961	5	3	16	9	DEGLFNLYR	trypsin-full-digest	YDL198C	RG	
+58	2	565.6500	1129.2844	1130.2659	0	10.387362	3	0.17425571	1	2	18	6	NSPWVVDSVK	trypsin-full-digest	YOR168W	KN	
+58	2	565.6500	1129.2844	1129.2966	0.032992441	7.5589361	6	0.16850659	2	2	18	6	NVVAVEMDPR	trypsin-full-digest	YPL266W	KM	
+58	2	565.6500	1129.2844	1131.1674	0.27751508	33.858917	1	0.12589712	3	4	20	6	IDQASGAAQDR	trypsin-full-digest	YLR371W	RH	
+58	2	565.6500	1129.2844	1126.2928	1.4995954	21.486506	2	-0.087057345	4	3	18	6	GDVVMIYSSR	trypsin-full-digest	YBR115C	RG	
+58	2	565.6500	1129.2844	1129.3646	2.1613607	8.9149437	5	-0.20237374	5	2	18	6	GITIDIALWK	trypsin-full-digest	YBR118W	RF	
+59	2	474.3000	946.5844	945.0836	0	163.22826	1	0.79811859	1	6	14	7	LQTIIDSR	trypsin-full-digest	YMR309C	RG	
+59	2	474.3000	946.5844	946.0281	0.48343256	26.635284	6	0.41228208	2	4	16	7	LSVATADNR	trypsin-full-digest	YLR249W	KH	
+59	2	474.3000	946.5844	949.0466	0.51973206	79.889168	3	0.38331077	3	6	14	7	MSQQDNVK	trypsin-full-digest	YDR037W	-A	
+59	2	474.3000	946.5844	949.1149	0.74977499	81.326645	2	0.19970922	4	4	14	7	IFENVSIK	trypsin-full-digest	YDR205W	KA	
+59	2	474.3000	946.5844	945.0836	0.7771157	41.841644	4	0.1778881	5	5	20	7	LLGSGAGGSVK	trypsin-full-digest	YOR267C	KV	
+59	3	474.3000	1419.8765	1417.4955	0	122.20961	1	0.76713252	1	13	56	7	ADTGIAVEGATDAAR	trypsin-full-digest	YGL008C	KS	
+59	3	474.3000	1419.8765	1419.5200	0.60215867	52.378551	3	0.30519703	2	9	44	7	GEDELWCVINGK	trypsin-full-digest	YMR073C	KV	
+59	3	474.3000	1419.8765	1420.7550	0.64994532	79.130165	2	0.26853833	3	9	48	7	GVDLMVCVMGVLK	trypsin-full-digest	YBR115C	RA	
+59	3	474.3000	1419.8765	1420.5975	0.78942293	27.125801	5	0.16154051	4	7	44	7	LLARPGDSLYCR	trypsin-full-digest	YPL266W	RL	
+59	3	474.3000	1419.8765	1422.5168	0.95424658	50.471569	4	0.035098951	5	7	44	7	NFHNAIDEFSTK	trypsin-full-digest	YDR093W	KE	
+60	1	713.3600	712.3522	710.7880	0	24.40822	1	0.43409193	1	4	12	9	HIDAGAK	trypsin-full-digest	YGR192C	KK	
+60	1	713.3600	712.3522	713.7887	0.54279155	22.626112	3	0.1984705	2	3	12	9	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+60	1	713.3600	712.3522	713.7881	0.66906232	1.9599029	6	0.14365739	3	1	12	9	TLYGFGG	trypsin-full-digest	YBR009C	R-	
+60	1	713.3600	712.3522	714.8626	0.7312721	13.145251	4	0.1166526	4	2	10	9	ALPTWK	trypsin-full-digest	YMR235C	KD	
+60	1	713.3600	712.3522	714.7765	1.0561372	24.213102	2	-0.024368707	5	4	12	9	SGPTPTR	trypsin-full-digest	YDL223C	KS	
+61	2	1004.4300	2006.8444	2006.3051	0	871.86584	1	3.8326077	1	18	34	4	SGVGICATCVLRPDLLFK	trypsin-full-digest	YEL027W	KN	
+61	2	1004.4300	2006.8444	2004.0973	0.74373084	43.846146	3	0.98217922	2	5	36	4	EANPSTQVPQSDTFPNGSK	trypsin-full-digest	YMR145C	RR	
+61	2	1004.4300	2006.8444	2009.1975	1.0181385	50.501587	2	-0.069518089	3	6	38	4	YDSPVSSPITSASELGSIAK	trypsin-full-digest	YNL166C	KL	
+61	2	1004.4300	2006.8444	2005.2764	1.057922	4.156528	4	-0.22199231	4	2	34	4	IPDIENSVNMVPVDHVAR	trypsin-full-digest	YBR115C	KV	
+62	2	745.8600	1489.7043	1489.7319	0	2761.3391	1	5.301578	1	21	24	3	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+62	2	745.8600	1489.7043	1490.6510	0.86824602	44.483547	3	0.69850397	2	4	24	3	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+62	2	745.8600	1489.7043	1488.7063	0.96409976	82.697823	2	0.19032791	3	5	24	3	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+63	2	444.4100	886.8044	886.9603	0	26.139324	4	0.71276307	1	3	14	8	DLDRPGSK	trypsin-full-digest	YOR063W	RF	
+63	2	444.4100	886.8044	886.9292	0.39397162	26.822899	3	0.43195465	2	3	12	8	SHTLCNR	trypsin-full-digest	YLR185W	KC	
+63	2	444.4100	886.8044	887.0439	0.68880337	42.980015	1	0.22180946	3	3	14	8	ELQSLLGK	trypsin-full-digest	YCR012W	KD	
+63	2	444.4100	886.8044	886.0563	0.75538975	41.696362	2	0.17434917	4	4	14	8	ALLDEVVK	trypsin-full-digest	YCR012W	KS	
+63	2	444.4100	886.8044	887.0092	0.8485781	12.152888	5	0.10792796	5	2	12	8	RPTNPFR	trypsin-full-digest	YNL166C	RV	
+64	2	676.1000	1350.1843	1348.5188	0	29.814545	1	0.20261776	1	4	22	2	LVETLPSSYPSR	trypsin-full-digest	YBR115C	KE	
+64	2	676.1000	1350.1843	1351.3583	2.6623373	0	2	-0.33681905	2	0	20	2	DETCESNPFPR	trypsin-full-digest	YLR298C	RL	
+64	3	676.1000	2025.2765	2027.1876	0	24.818066	1	0.08459115	1	7	80	1	NVIAETGAGQHGVATATACAK	trypsin-full-digest	YGL026C	KF	
+65	2	452.8500	903.6844	904.0949	0	97.185295	4	0.74056631	1	5	14	20	HAFMGTLK	trypsin-full-digest	YOR063W	KK	
+65	2	452.8500	903.6844	904.9293	0.022225995	153.16431	1	0.72410649	2	7	14	20	EQPESTSK	trypsin-full-digest	YDL223C	KN	
+65	2	452.8500	903.6844	904.8859	0.29299486	40.426414	9	0.52358419	3	4	14	20	ESTPDNDK	trypsin-full-digest	YOR267C	KE	
+65	2	452.8500	903.6844	903.0921	0.32120171	101.14278	3	0.50269514	4	6	14	20	NLALLFGR	trypsin-full-digest	YLR371W	RS	
+65	2	452.8500	903.6844	905.1050	0.45861647	20.786068	15	0.4009304	5	3	16	20	IALIAGYGK	trypsin-full-digest	YGR086C	KA	
+66	2	427.3800	852.7444	853.0293	0	86.936096	2	0.80033225	1	5	16	13	GPLATPIGK	trypsin-full-digest	YOR136W	KG	
+66	2	427.3800	852.7444	855.0049	0.097246684	152.10268	1	0.72250259	2	7	16	13	SALVPGGVR	trypsin-full-digest	YLR058C	KI	
+66	2	427.3800	852.7444	851.9758	0.47781974	63.129513	3	0.4179177	3	5	14	13	SSMGPAFR	trypsin-full-digest	YGL135W	KL	
+66	2	427.3800	852.7444	852.8194	0.61674178	31.039164	4	0.30673394	4	3	12	13	DSCTENK	trypsin-full-digest	YNL166C	KE	
+66	2	427.3800	852.7444	852.0011	0.80157036	15.659703	9	0.15880965	5	3	14	13	LPLNPNGK	trypsin-full-digest	YBR115C	KV	
+67	2	692.1500	1382.2844	1382.4467	0	1821.1417	1	4.1942277	1	19	24	7	TASEFDSAIAQDK	trypsin-full-digest	YLR043C	KL	
+67	2	692.1500	1382.2844	1381.5258	0.82534504	46.728306	3	0.73254275	2	5	22	7	MSESNAHFSFPK	trypsin-full-digest	YBL076C	-E	
+67	2	692.1500	1382.2844	1381.6099	0.88650858	119.8332	2	0.47600889	3	6	22	7	LAMFLTDSNTIR	trypsin-full-digest	YDR037W	RE	
+67	2	692.1500	1382.2844	1379.5791	0.92010963	43.565853	4	0.33507845	4	5	24	7	LIVTAHSSSHSIK	trypsin-full-digest	YLR371W	RY	
+67	2	692.1500	1382.2844	1379.3623	0.940844	29.001404	5	0.24811386	5	4	24	7	FDDGAGGDNEVQR	trypsin-full-digest	YKL145W	RT	
+68	2	468.8000	935.5844	935.0446	0	49.533195	4	0.74895662	1	6	14	11	LNLEGDFK	trypsin-full-digest	YGL245W	KK	
+68	2	468.8000	935.5844	933.9707	0.16079384	12.465908	7	0.62852901	2	4	16	11	NTISEAGDK	trypsin-full-digest	YLL024C	KL	
+68	2	468.8000	935.5844	935.1315	0.23179226	71.465187	2	0.57535428	3	5	16	11	VLPGPEVPK	trypsin-full-digest	YHR183W	KD	
+68	2	468.8000	935.5844	935.8565	0.28700686	98.048073	1	0.53400093	4	6	14	11	EDDSNNDK	trypsin-full-digest	YOR267C	KE	
+68	2	468.8000	935.5844	937.0202	0.62856978	36.394066	6	0.27818513	5	4	16	11	SDGVAGLYR	trypsin-full-digest	YBL030C	KG	
+68	3	468.8000	1403.3765	1404.5829	0	40.724213	2	0.37462369	1	9	44	6	TTLHYALSELEK	trypsin-full-digest	YDR399W	RD	
+68	3	468.8000	1403.3765	1404.4968	0.58936948	13.110674	6	0.15383191	2	7	56	6	VASANATAAESDVAK	trypsin-full-digest	YIL133C	KQ	
+68	3	468.8000	1403.3765	1405.7032	0.81445163	74.083321	1	0.069510803	3	11	48	6	GFLPSVVGIVVYR	trypsin-full-digest	YBL030C	RG	
+68	3	468.8000	1403.3765	1402.6282	1.1776992	21.763506	3	-0.066570319	4	8	44	6	MTSGYYLGELLR	trypsin-full-digest	YFR053C	KL	
+68	3	468.8000	1403.3765	1405.4899	1.3059314	15.813335	4	-0.11460918	5	6	44	6	STSTVNLNNHYR	trypsin-full-digest	YOR267C	KA	
+69	2	652.4800	1302.9443	1301.4161	0	866.42224	1	3.2185082	1	16	22	8	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+69	2	652.4800	1302.9443	1301.4161	0.61322856	165.8327	2	1.2448272	2	8	22	8	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+69	2	652.4800	1302.9443	1303.4968	0.75579822	75.887726	4	0.7859655	3	6	22	8	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+69	2	652.4800	1302.9443	1300.4741	0.77344012	113.19061	3	0.72918487	4	7	20	8	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+69	2	652.4800	1302.9443	1304.4626	0.87005603	46.928429	5	0.4182258	5	5	22	8	IPGTFEPDTLSK	trypsin-full-digest	YDL223C	KS	
+70	2	691.9500	1381.8844	1382.4467	0	1932.3346	1	3.9032106	1	19	24	7	TASEFDSAIAQDK	trypsin-full-digest	YLR043C	KL	
+70	2	691.9500	1381.8844	1381.5258	0.84123105	49.488419	4	0.61970872	2	5	22	7	MSESNAHFSFPK	trypsin-full-digest	YBL076C	-E	
+70	2	691.9500	1381.8844	1379.3623	0.87033457	72.380486	3	0.5061115	3	6	24	7	FDDGAGGDNEVQR	trypsin-full-digest	YKL145W	RT	
+70	2	691.9500	1381.8844	1381.6099	0.89363277	82.036919	2	0.41517377	4	5	22	7	LAMFLTDSNTIR	trypsin-full-digest	YDR037W	RE	
+70	2	691.9500	1381.8844	1380.6042	0.98013854	8.8494978	6	0.077523351	5	2	22	7	EVVELPLLSPER	trypsin-full-digest	YKL145W	RF	
+71	2	488.7600	975.5044	974.1251	0	51.582912	1	0.57350701	1	5	16	10	STSANILLR	trypsin-full-digest	YDR205W	KL	
+71	2	488.7600	975.5044	974.0044	0.23152198	34.17643	2	0.44072753	2	4	14	10	DQPGLCER	trypsin-full-digest	YDR037W	RF	
+71	2	488.7600	975.5044	974.0121	0.52275521	6.3304238	6	0.27370325	3	2	12	10	HHHNHHR	trypsin-full-digest	YDL223C	KH	
+71	2	488.7600	975.5044	978.1595	0.53639543	6.1636882	7	0.26588047	4	2	16	10	HTAIVNPVK	trypsin-full-digest	YGL245W	RI	
+71	2	488.7600	975.5044	975.0636	0.64310586	7.7996826	5	0.20468129	5	2	16	10	DISTPDLSK	trypsin-full-digest	YDR093W	KV	
+72	2	651.6300	1301.2444	1301.4161	0	1339.0245	1	3.3731258	1	18	22	10	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+72	2	651.6300	1301.2444	1301.4161	0.61750263	258.82028	2	1.2902117	2	9	22	10	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+72	2	651.6300	1301.2444	1303.4968	0.82103974	53.011913	3	0.60365552	3	5	22	10	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+72	2	651.6300	1301.2444	1298.5687	0.86949509	32.90501	4	0.44020939	4	4	20	10	LNNPAIALMWR	trypsin-full-digest	YHR183W	KG	
+72	2	651.6300	1301.2444	1300.4741	0.89867258	29.368866	6	0.3417902	5	3	20	10	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+73	2	452.8500	903.6844	902.0586	0	56.347805	2	1.0837035	1	6	16	20	QGVTSLGIK	trypsin-full-digest	YML092C	KA	
+73	2	452.8500	903.6844	906.0465	0.21322978	68.521774	1	0.85262567	2	5	14	20	FDIGDLVK	trypsin-full-digest	YLR298C	RA	
+73	2	452.8500	903.6844	904.0338	0.41111323	23.418583	9	0.63817865	3	3	14	20	VSHTVSFK	trypsin-full-digest	YOR168W	KS	
+73	2	452.8500	903.6844	902.0587	0.5519315	24.958044	8	0.48557344	4	4	16	20	VIAVTNGTK	trypsin-full-digest	YGL026C	KT	
+73	2	452.8500	903.6844	904.8859	0.60063833	11.533216	15	0.43278965	5	3	14	20	ESTPDNDK	trypsin-full-digest	YOR267C	KE	
+73	3	452.8500	1355.5265	1354.3092	0	97.742645	1	0.66088116	1	10	48	7	GDDEANGATSFDR	trypsin-full-digest	YOR063W	KT	
+73	3	452.8500	1355.5265	1355.5164	0.41827905	96.809456	2	0.38444841	2	10	44	7	YQVTVIDAPGHR	trypsin-full-digest	YBR118W	KD	
+73	3	452.8500	1355.5265	1355.6616	0.59096551	21.397329	7	0.27032319	3	5	44	7	GMLNVQLLVVNR	trypsin-full-digest	YBR115C	KN	
+73	3	452.8500	1355.5265	1357.6157	0.76384509	52.985188	3	0.15607032	4	9	48	7	APIVAYAELIAAR	trypsin-full-digest	YGL245W	KI	
+73	3	452.8500	1355.5265	1354.4875	0.84334892	43.882256	4	0.10352775	5	7	40	7	GEYHFFQGITR	trypsin-full-digest	YJR069C	RG	
+74	2	427.3800	852.7444	853.0293	0	46.593933	3	0.44586661	1	4	16	13	GPLATPIGK	trypsin-full-digest	YOR136W	KG	
+74	2	427.3800	852.7444	854.0171	0.19086304	46.874577	2	0.36076716	2	4	14	13	THILSGVK	trypsin-full-digest	YDR093W	RN	
+74	2	427.3800	852.7444	849.9823	0.44673637	43.607098	5	0.24668178	3	4	12	13	IADQYLK	trypsin-full-digest	YPL215W	RD	
+74	2	427.3800	852.7444	852.0445	0.4754456	8.7929144	11	0.23388129	4	2	14	13	HASLILAK	trypsin-full-digest	YMR235C	KA	
+74	2	427.3800	852.7444	852.8194	0.49826011	39.332458	6	0.22370906	5	3	12	13	DSCTENK	trypsin-full-digest	YNL166C	KE	
+75	2	877.2700	1752.5244	1752.8573	0	1072.6307	1	3.9823563	1	16	26	4	LVSWYDNEYGYSTR	trypsin-full-digest	YGR192C	KV	
+75	2	877.2700	1752.5244	1753.9385	1.020926	7.8260818	2	-0.083334833	2	3	30	4	ACIIFFDEIDAVGGAR	trypsin-full-digest	YKL145W	KF	
+75	2	877.2700	1752.5244	1750.8798	1.100632	4.3475466	3	-0.4007521	3	2	30	4	AEETIAWLDSNTTATK	trypsin-full-digest	YLL024C	KE	
+75	2	877.2700	1752.5244	1754.9578	1.1276983	0	4	-0.50854033	4	0	34	4	ISHVSTGGGASLELLEGK	trypsin-full-digest	YCR012W	KE	
+76	2	731.8100	1461.6044	1462.7675	0	1339.4905	1	3.6146004	1	19	24	5	NEVSAMPTLLLFK	trypsin-full-digest	YLR043C	KN	
+76	2	731.8100	1461.6044	1463.5709	0.89022428	15.232876	4	0.3967953	2	4	24	5	TCVVETPTLNSDK	trypsin-full-digest	YBR115C	RS	
+76	2	731.8100	1461.6044	1460.6036	0.90547442	10.096539	5	0.34167209	3	3	22	5	EEPDLENLLFNK	trypsin-full-digest	YHR183W	RF	
+76	2	731.8100	1461.6044	1460.4707	0.94390142	21.407425	2	0.2027739	4	4	24	5	ELGDAYVSSDEEF	trypsin-full-digest	YLR249W	K-	
+76	2	731.8100	1461.6044	1459.6195	0.97492385	21.211966	3	0.090640165	5	5	26	5	SQVDEIVLVGGSTR	trypsin-full-digest	YLL024C	KI	
+77	2	745.4300	1488.8444	1489.7319	0	2646.4438	1	4.6354041	1	21	24	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+77	2	745.4300	1488.8444	1486.6195	0.80580199	209.53319	2	0.9001863	2	9	26	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+77	2	745.4300	1488.8444	1490.6510	0.8935802	27.22241	4	0.49329877	3	3	24	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+77	2	745.4300	1488.8444	1488.7063	0.9329536	57.869457	3	0.31078729	4	4	24	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+78	2	452.2200	902.4244	902.0586	0	102.61301	1	0.80108744	1	7	16	19	QGVTSLGIK	trypsin-full-digest	YML092C	KA	
+78	2	452.2200	902.4244	904.9293	0.10703871	74.167198	2	0.71534008	2	5	14	19	EQPESTSK	trypsin-full-digest	YDL223C	KN	
+78	2	452.2200	902.4244	903.0513	0.43047881	35.246094	5	0.45623627	3	4	12	19	QFWLGPR	trypsin-full-digest	YBR115C	RD	
+78	2	452.2200	902.4244	903.9957	0.504062	42.685417	4	0.39728969	4	4	14	19	GWGWTAAR	trypsin-full-digest	YDL198C	RN	
+78	2	452.2200	902.4244	901.9256	0.5203054	7.4105458	15	0.38427731	5	2	14	19	APLEDDDK	trypsin-full-digest	YKL145W	KK	
+78	3	452.2200	1353.6365	1354.4875	0	109.16689	2	0.85549891	1	10	40	7	GEYHFFQGITR	trypsin-full-digest	YJR069C	RG	
+78	3	452.2200	1353.6365	1355.6616	0.046028499	77.322945	4	0.81612158	2	9	44	7	GMLNVQLLVVNR	trypsin-full-digest	YBR115C	KN	
+78	3	452.2200	1353.6365	1354.3092	0.4786047	101.63564	3	0.44605312	3	10	48	7	GDDEANGATSFDR	trypsin-full-digest	YOR063W	KT	
+78	3	452.2200	1353.6365	1355.5164	0.55555004	147.19391	1	0.38022646	4	11	44	7	YQVTVIDAPGHR	trypsin-full-digest	YBR118W	KD	
+78	3	452.2200	1353.6365	1355.4419	0.86263269	69.608704	5	0.11751757	5	8	48	7	FDSGTSGSQNMPK	trypsin-full-digest	YDL223C	KA	
+79	2	559.1000	1116.1843	1119.1559	0	22.954494	2	0.23699306	1	3	16	11	YHIEEEGSR	trypsin-full-digest	YCR012W	RK	
+79	2	559.1000	1116.1843	1118.3104	0.074480131	12.163911	5	0.21934178	2	3	16	11	INMIEELEK	trypsin-full-digest	YDR037W	RV	
+79	2	559.1000	1116.1843	1113.3398	0.39199558	8.6371117	6	0.14409283	3	3	18	11	AIMVNFGYAK	trypsin-full-digest	YOR168W	KY	
+79	2	559.1000	1116.1843	1113.1975	0.57595927	14.989534	4	0.10049471	4	4	16	11	DYFGAHTFR	trypsin-full-digest	YHR183W	RV	
+79	2	559.1000	1116.1843	1117.3536	0.65604508	35.847515	1	0.081514932	5	6	18	11	FLDGQIALLK	trypsin-full-digest	YBL076C	KK	
+80	2	509.2700	1016.5244	1017.1068	0	150.40614	1	0.90325707	1	6	16	9	ITSGQELNR	trypsin-full-digest	YDL198C	KV	
+80	2	509.2700	1016.5244	1017.1035	0.1405158	98.749428	2	0.77633518	2	5	16	9	VSSAEYYAK	trypsin-full-digest	YIL133C	KK	
+80	2	509.2700	1016.5244	1015.1717	0.84938502	54.884029	3	0.13604406	3	4	16	9	LDAELVLDK	trypsin-full-digest	YNL166C	KF	
+80	2	509.2700	1016.5244	1017.2080	0.85867649	17.96553	6	0.12765144	4	2	16	9	MTAFYSGIK	trypsin-full-digest	YMR309C	RV	
+80	2	509.2700	1016.5244	1018.0887	1.0889183	2.9468262	8	-0.080316156	5	1	14	9	LEEIETER	trypsin-full-digest	YMR235C	KL	
+81	2	427.3800	852.7444	853.0293	0	40.234848	3	0.71672249	1	3	16	13	GPLATPIGK	trypsin-full-digest	YOR136W	KG	
+81	2	427.3800	852.7444	854.0171	0.1037989	48.62289	2	0.64232749	2	4	14	13	THILSGVK	trypsin-full-digest	YDR093W	RN	
+81	2	427.3800	852.7444	852.0445	0.55270237	26.911837	6	0.32058826	3	3	14	13	HASLILAK	trypsin-full-digest	YMR235C	KA	
+81	2	427.3800	852.7444	851.9758	0.58951396	66.419243	1	0.29420456	4	5	14	13	SSMGPAFR	trypsin-full-digest	YGL135W	KL	
+81	2	427.3800	852.7444	851.8712	0.75772524	33.243809	4	0.17364377	5	4	12	13	FQTGEDR	trypsin-full-digest	YLR249W	RE	
+82	2	452.8500	903.6844	904.8859	0	64.193161	2	0.5262	1	4	14	20	ESTPDNDK	trypsin-full-digest	YOR267C	KE	
+82	2	452.8500	903.6844	906.0465	0.11277704	56.972046	3	0.46685672	2	4	14	20	FDIGDLVK	trypsin-full-digest	YLR298C	RA	
+82	2	452.8500	903.6844	904.9293	0.2270361	47.524639	5	0.4067336	3	4	14	20	EQPESTSK	trypsin-full-digest	YDL223C	KN	
+82	2	452.8500	903.6844	903.0002	0.42635316	51.255814	4	0.30185297	4	4	16	20	DTGVVDAVK	trypsin-full-digest	YNL166C	KV	
+82	2	452.8500	903.6844	904.0338	0.52230549	64.921379	1	0.25136286	5	4	14	20	VSHTVSFK	trypsin-full-digest	YOR168W	KS	
+82	3	452.8500	1355.5265	1355.5164	0	156.55568	2	0.72244394	1	10	44	7	YQVTVIDAPGHR	trypsin-full-digest	YBR118W	KD	
+82	3	452.8500	1355.5265	1355.4419	0.25582105	104.23301	4	0.53762758	2	10	48	7	FDSGTSGSQNMPK	trypsin-full-digest	YDL223C	KA	
+82	3	452.8500	1355.5265	1354.3928	0.72055531	159.81966	1	0.20188312	3	11	48	7	SGDAETAAYDNIK	trypsin-full-digest	YDL223C	KN	
+82	3	452.8500	1355.5265	1355.6616	0.78724837	51.907604	6	0.15370114	4	6	44	7	GMLNVQLLVVNR	trypsin-full-digest	YBR115C	KN	
+82	3	452.8500	1355.5265	1357.6157	1.0172542	42.36615	7	-0.012465239	5	7	48	7	APIVAYAELIAAR	trypsin-full-digest	YGL245W	KI	
+83	2	468.8000	935.5844	937.0202	0	165.04073	1	0.70322478	1	8	16	11	SDGVAGLYR	trypsin-full-digest	YBL030C	KG	
+83	2	468.8000	935.5844	937.0635	0.051904984	157.04977	2	0.66672391	2	7	14	11	LTSQGIYR	trypsin-full-digest	YGR157W	KY	
+83	2	468.8000	935.5844	935.1315	0.23450169	68.503082	4	0.53831738	3	5	16	11	VLPGPEVPK	trypsin-full-digest	YHR183W	KD	
+83	2	468.8000	935.5844	935.0446	0.30850619	18.517334	6	0.48627558	4	3	14	11	LNLEGDFK	trypsin-full-digest	YGL245W	KK	
+83	2	468.8000	935.5844	935.8565	0.42743704	51.483372	5	0.40264046	5	4	14	11	EDDSNNDK	trypsin-full-digest	YOR267C	KE	
+83	3	468.8000	1403.3765	1404.4968	0	43.463505	3	0.39917707	1	11	56	6	VASANATAAESDVAK	trypsin-full-digest	YIL133C	KQ	
+83	3	468.8000	1403.3765	1404.5829	0.13736853	77.41394	1	0.34434271	2	10	44	6	TTLHYALSELEK	trypsin-full-digest	YDR399W	RD	
+83	3	468.8000	1403.3765	1405.7032	0.552109	64.443207	2	0.17878783	3	9	48	6	GFLPSVVGIVVYR	trypsin-full-digest	YBL030C	RG	
+83	3	468.8000	1403.3765	1405.4899	1.5814054	3.3649597	6	-0.23208369	4	2	44	6	STSTVNLNNHYR	trypsin-full-digest	YOR267C	KA	
+83	3	468.8000	1403.3765	1402.6282	1.6719476	5.7472043	5	-0.26822606	5	4	44	6	MTSGYYLGELLR	trypsin-full-digest	YFR053C	KL	
+84	2	440.0600	878.1044	877.0109	0	18.001448	6	0.8047384	1	4	14	12	QGIYGLAR	trypsin-full-digest	YKL127W	KS	
+84	2	440.0600	878.1044	877.0080	0.18432704	45.319706	2	0.65640336	2	5	14	12	LSTSVGWK	trypsin-full-digest	YIL133C	KY	
+84	2	440.0600	878.1044	876.0233	0.21106918	59.926601	1	0.63488293	3	6	14	12	FVVGLGER	trypsin-full-digest	YKL145W	KV	
+84	2	440.0600	878.1044	875.8907	0.38777286	23.468019	5	0.4926827	4	4	12	12	LEEQDSR	trypsin-full-digest	YMR145C	KR	
+84	2	440.0600	878.1044	877.0135	0.43924966	8.4855242	9	0.45125732	5	2	12	12	NFGVWVR	trypsin-full-digest	YMR242C	KY	
+85	3	497.6200	1489.8365	1489.7319	0	2629.9929	1	5.015099	1	28	48	3	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+85	3	497.6200	1489.8365	1488.7063	0.84448564	590.96753	2	0.77991986	2	17	48	3	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+85	3	497.6200	1489.8365	1490.6510	0.92268771	84.568672	3	0.3877289	3	9	48	3	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+86	1	713.0700	712.0622	713.7887	0	42.898697	1	0.25811729	1	4	12	9	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+86	1	713.0700	712.0622	710.7880	0.43596756	26.317953	2	0.14558652	2	3	12	9	HIDAGAK	trypsin-full-digest	YGR192C	KK	
+86	1	713.0700	712.0622	713.7881	0.89537442	14.902379	3	0.027005678	3	2	12	9	TLYGFGG	trypsin-full-digest	YBR009C	R-	
+86	1	713.0700	712.0622	714.7765	1.1662105	13.06544	4	-0.042901821	4	2	12	9	SGPTPTR	trypsin-full-digest	YDL223C	KS	
+86	1	713.0700	712.0622	709.8033	1.3344504	6.7109046	5	-0.086327426	5	2	14	9	AHGGVAAK	trypsin-full-digest	YCR034W	RV	
+87	2	501.1300	1000.2444	998.1502	0	82.180992	1	0.94085401	1	6	20	10	IAAVGAANGVR	trypsin-full-digest	YKL127W	KK	
+87	2	501.1300	1000.2444	999.1753	0.0071040629	52.168655	3	0.93417013	2	5	16	10	EALGELVIR	trypsin-full-digest	YPL215W	KA	
+87	2	501.1300	1000.2444	1003.0769	0.31822187	32.207912	4	0.64145368	3	4	16	10	NLDGETNLK	trypsin-full-digest	YDR093W	KV	
+87	2	501.1300	1000.2444	1003.1383	0.40787295	56.638897	2	0.55710512	4	6	18	10	AVNTGMEPGK	trypsin-full-digest	YLR340W	RT	
+87	2	501.1300	1000.2444	998.1038	0.58649296	12.313833	6	0.38904974	5	3	16	10	SSIQLGEHK	trypsin-full-digest	YLR371W	KK	
+87	3	501.1300	1500.3666	1500.7172	0	41.45351	1	0.32945254	1	8	48	3	AALLNQYFAQAYK	trypsin-full-digest	YGL245W	KG	
+87	3	501.1300	1500.3666	1497.7600	1.226549	22.535898	2	-0.074637152	2	6	48	3	LHHAFFVGDILTK	trypsin-full-digest	YBR115C	KR	
+87	3	501.1300	1500.3666	1500.4829	1.4662495	19.797424	3	-0.15360707	3	6	44	3	YLPNGDCECCGR	trypsin-full-digest	YBR115C	RA	
+88	2	419.3200	836.6244	835.8872	0	24.406082	2	0.40368167	1	3	12	10	SDNVMDR	trypsin-full-digest	YBL076C	KW	
+88	2	419.3200	836.6244	834.0013	0.31547526	12.321632	4	0.27633008	2	2	12	10	LSMSQLR	trypsin-full-digest	YOR267C	KS	
+88	2	419.3200	836.6244	839.0054	0.49235049	17.52681	3	0.2049288	3	3	14	10	IAGLNPVR	trypsin-full-digest	YPL106C	RI	
+88	2	419.3200	836.6244	835.0110	0.76761371	2.3227963	9	0.093810096	4	1	12	10	EYILGLK	trypsin-full-digest	YDL198C	KD	
+88	2	419.3200	836.6244	837.9280	0.8460986	7.1517234	5	0.062127165	5	2	12	10	ETSNFIK	trypsin-full-digest	YBR118W	KK	
+89	2	452.8500	903.6844	906.0465	0	67.909523	1	0.66419196	1	5	14	20	FDIGDLVK	trypsin-full-digest	YLR298C	RA	
+89	2	452.8500	903.6844	904.8859	0.11163299	46.654369	2	0.59004623	2	5	14	20	ESTPDNDK	trypsin-full-digest	YOR267C	KE	
+89	2	452.8500	903.6844	903.0513	0.32041824	4.8063245	13	0.45137274	3	2	12	20	QFWLGPR	trypsin-full-digest	YBR115C	RD	
+89	2	452.8500	903.6844	900.9867	0.48289984	21.544519	4	0.34345376	4	3	12	20	ITADYYR	trypsin-full-digest	YLR298C	RN	
+89	2	452.8500	903.6844	905.0593	0.5430572	1.1933155	18	0.30349773	5	1	16	20	VSSTSLALK	trypsin-full-digest	YLR371W	RR	
+89	3	452.8500	1355.5265	1355.4419	0	115.35501	2	1.0529802	1	13	48	7	FDSGTSGSQNMPK	trypsin-full-digest	YDL223C	KA	
+89	3	452.8500	1355.5265	1354.3092	0.6454857	152.35396	1	0.37329653	2	12	48	7	GDDEANGATSFDR	trypsin-full-digest	YOR063W	KT	
+89	3	452.8500	1355.5265	1357.6157	0.64984179	32.56052	6	0.36870968	3	8	48	7	APIVAYAELIAAR	trypsin-full-digest	YGL245W	KI	
+89	3	452.8500	1355.5265	1355.6616	0.69778049	44.920116	4	0.31823114	4	7	44	7	GMLNVQLLVVNR	trypsin-full-digest	YBR115C	KN	
+89	3	452.8500	1355.5265	1354.3928	0.86221355	78.549049	3	0.14508639	5	11	48	7	SGDAETAAYDNIK	trypsin-full-digest	YDL223C	KN	
+90	3	1032.0000	3092.9766	3095.2366	0	1014.6406	1	4.1437883	1	32	108	3	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+90	3	1032.0000	3092.9766	3095.4709	0.99053985	48.36216	2	0.039200895	2	12	112	3	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+90	3	1032.0000	3092.9766	3090.7644	1.2211008	8.0220041	3	-0.91619474	3	5	112	3	NIVPVIMAGIIAIYGLVVSVLVCYSLGQK	trypsin-full-digest	YEL027W	KQ	
+91	2	466.0900	930.1644	932.2044	0	65.519272	2	0.60412568	1	5	14	9	MIAPMIEK	trypsin-full-digest	YLR043C	KF	
+91	2	466.0900	930.1644	933.0876	0.026813155	100.87474	1	0.58792716	2	6	14	9	MSIPETQK	trypsin-full-digest	YMR303C	-A	
+91	2	466.0900	930.1644	930.0287	0.048423041	58.461544	3	0.57487208	3	4	14	9	QVSDIVNR	trypsin-full-digest	YGR157W	RI	
+91	2	466.0900	930.1644	931.0996	0.40841615	30.83877	5	0.357391	4	4	14	9	LWVLTGDK	trypsin-full-digest	YDR093W	KV	
+91	2	466.0900	930.1644	930.0690	0.71705782	42.043987	4	0.17093264	5	4	14	9	IETGELIR	trypsin-full-digest	YLR371W	KC	
+92	3	497.2800	1488.8165	1489.7319	0	1872.1616	1	3.8966787	1	24	48	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+92	3	497.2800	1488.8165	1486.6195	0.83217859	344.51291	2	0.65394616	2	14	52	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+92	3	497.2800	1488.8165	1488.7063	0.84458709	281.42068	3	0.60559422	3	13	48	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+92	3	497.2800	1488.8165	1490.6510	1.0214745	92.455688	4	-0.083679095	4	9	48	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+93	2	693.0300	1384.0444	1382.4467	0	1282.8864	1	3.071521	1	18	24	5	TASEFDSAIAQDK	trypsin-full-digest	YLR043C	KL	
+93	2	693.0300	1384.0444	1381.5258	0.82522219	24.710701	3	0.53683364	2	4	22	5	MSESNAHFSFPK	trypsin-full-digest	YBL076C	-E	
+93	2	693.0300	1384.0444	1381.6099	0.92968917	132.91029	2	0.21596114	3	7	22	5	LAMFLTDSNTIR	trypsin-full-digest	YDR037W	RE	
+93	2	693.0300	1384.0444	1386.6718	1.0372562	2.1949697	5	-0.11443344	4	1	20	5	LAEMIPQFFYK	trypsin-full-digest	YDR093W	RN	
+93	2	693.0300	1384.0444	1383.6108	1.0673972	2.2312288	4	-0.20701215	5	1	26	5	NVIVSGIVLAADGR	trypsin-full-digest	YBL076C	KK	
+94	3	669.4400	2005.2965	2006.3051	0	676.56519	1	2.6910779	1	27	68	3	SGVGICATCVLRPDLLFK	trypsin-full-digest	YEL027W	KN	
+94	3	669.4400	2005.2965	2004.0973	0.97163469	106.12769	2	0.076333262	2	14	72	3	EANPSTQVPQSDTFPNGSK	trypsin-full-digest	YMR145C	RR	
+94	3	669.4400	2005.2965	2005.2764	1.1398195	27.866337	3	-0.37626526	3	8	68	3	IPDIENSVNMVPVDHVAR	trypsin-full-digest	YBR115C	KV	
+95	2	1004.4600	2006.9044	2006.3051	0	723.72211	1	3.9027524	1	16	34	4	SGVGICATCVLRPDLLFK	trypsin-full-digest	YEL027W	KN	
+95	2	1004.4600	2006.9044	2004.0973	0.82395792	26.607611	3	0.68704855	2	4	36	4	EANPSTQVPQSDTFPNGSK	trypsin-full-digest	YMR145C	RR	
+95	2	1004.4600	2006.9044	2009.1975	0.9481867	26.953934	2	0.2022146	3	4	38	4	YDSPVSSPITSASELGSIAK	trypsin-full-digest	YNL166C	KL	
+95	2	1004.4600	2006.9044	2005.2764	0.99055701	8.0184507	4	0.036853641	4	3	34	4	IPDIENSVNMVPVDHVAR	trypsin-full-digest	YBR115C	KV	
+96	2	652.2400	1302.4644	1301.4161	0	1587.1769	1	4.1044731	1	18	22	9	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+96	2	652.2400	1302.4644	1301.4161	0.77718401	146.15948	2	0.9145422	2	7	22	9	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+96	2	652.2400	1302.4644	1303.4968	0.78656965	136.04576	3	0.87601912	3	7	22	9	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+96	2	652.2400	1302.4644	1301.4192	0.8966037	43.772213	5	0.42438722	4	4	22	9	DALPSVTSEQVR	trypsin-full-digest	YBL076C	KE	
+96	2	652.2400	1302.4644	1304.4626	0.9150939	87.347191	4	0.34849483	5	6	22	9	IPGTFEPDTLSK	trypsin-full-digest	YDL223C	KS	
+97	2	433.7800	865.5444	863.9689	0	22.758293	3	0.22999756	1	2	12	13	EYQVIGR	trypsin-full-digest	YMR242C	KR	
+97	2	433.7800	865.5444	865.1040	0.27651593	141.54544	1	0.16639957	2	5	10	13	FLWMIR	trypsin-full-digest	YGL022W	KI	
+97	2	433.7800	865.5444	862.9965	1.1270387	31.535526	2	-0.029218594	3	3	14	13	IMDTAGQK	trypsin-full-digest	YHR183W	KG	
+97	2	433.7800	865.5444	867.9752	1.3190436	0	8	-0.073379271	4	0	12	13	MANFETR	trypsin-full-digest	YNL166C	KR	
+97	2	433.7800	865.5444	863.9843	1.572087	18.824604	5	-0.13157864	5	3	14	13	MSSNAQVK	trypsin-full-digest	YBL030C	-T	
+97	3	433.7800	1298.3165	1295.5011	0	108.83713	1	0.50911599	1	9	44	5	TSFFQALGVPTK	trypsin-full-digest	YLR340W	KI	
+97	3	433.7800	1298.3165	1300.4741	0.5583092	77.047203	3	0.22487184	2	8	40	5	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+97	3	433.7800	1298.3165	1299.4670	0.79660463	95.325806	2	0.10355183	3	9	40	5	MPYTLSDAHHK	trypsin-full-digest	YLR058C	-L	
+97	3	433.7800	1298.3165	1298.5687	1.2789003	34.471161	5	-0.1419926	4	5	40	5	LNNPAIALMWR	trypsin-full-digest	YHR183W	KG	
+97	3	433.7800	1298.3165	1299.4120	1.4781585	36.938969	4	-0.24343814	5	5	36	5	FEELCADLFR	trypsin-full-digest	YLL024C	RS	
+98	2	751.2800	1500.5444	1500.4829	0	85.739204	1	0.73663002	1	6	22	3	YLPNGDCECCGR	trypsin-full-digest	YBR115C	RA	
+98	2	751.2800	1500.5444	1497.7600	0.39315757	57.672653	2	0.44701836	2	6	24	3	LHHAFFVGDILTK	trypsin-full-digest	YBR115C	KR	
+98	2	751.2800	1500.5444	1500.7172	1.3417306	5.9268188	3	-0.25172904	3	2	24	3	AALLNQYFAQAYK	trypsin-full-digest	YGL245W	KG	
+99	3	581.9500	1742.8265	1740.0070	0	95.88134	1	0.48460686	1	11	56	3	MNSLVTQYAAPLFER	trypsin-full-digest	YCR034W	-Y	
+99	3	581.9500	1742.8265	1742.9492	0.37074959	43.33564	2	0.30493906	2	7	56	3	SLLNIDPHSSDYLIR	trypsin-full-digest	YMR309C	KL	
+99	3	581.9500	1742.8265	1742.9031	1.6881881	9.5394077	3	-0.33350065	3	4	56	3	ESLVEVNFADLYTSR	trypsin-full-digest	YMR235C	RL	
+100	1	763.1100	762.1022	764.9664	0	10.836562	7	0.33078977	1	2	12	15	LVLVHGK	trypsin-full-digest	YDR093W	RW	
+100	1	763.1100	762.1022	759.8577	0.046465401	32.205807	1	0.3154195	2	4	14	15	SGDAALVK	trypsin-full-digest	YBR118W	KF	
+100	1	763.1100	762.1022	762.9196	0.28373277	20.508097	2	0.23693387	3	3	12	15	MAAELTK	trypsin-full-digest	YPL266W	RR	
+100	1	763.1100	762.1022	761.8761	0.46104947	18.759415	4	0.17827933	4	3	10	15	DPVIYR	trypsin-full-digest	YGL245W	RC	
+100	1	763.1100	762.1022	764.8363	0.46744531	19.572428	3	0.17616364	5	3	12	15	YGADALR	trypsin-full-digest	YBL076C	KL	
+101	1	833.2400	832.2322	829.9922	0	25.544271	2	0.28301004	1	3	14	16	DIVSAVVK	trypsin-full-digest	YMR303C	KA	
+101	1	833.2400	832.2322	834.0013	0.083209559	14.410157	3	0.2594609	2	2	12	16	LSMSQLR	trypsin-full-digest	YOR267C	KS	
+101	1	833.2400	832.2322	832.9573	0.3484197	67.488708	1	0.18440376	3	3	12	16	NAPAWFK	trypsin-full-digest	YDR064W	RL	
+101	1	833.2400	832.2322	835.0112	0.46711424	2.5795839	10	0.15081201	4	1	12	16	TIFVVEK	trypsin-full-digest	YMR309C	KG	
+101	1	833.2400	832.2322	834.9862	0.69176388	4.319622	8	0.087233908	5	1	16	16	AAATAAMTK	trypsin-full-digest	YLR249W	KA	
+102	2	733.2200	1464.4243	1462.7675	0	963.87823	1	3.3292608	1	16	24	3	NEVSAMPTLLLFK	trypsin-full-digest	YLR043C	KN	
+102	2	733.2200	1464.4243	1463.5709	0.91493738	1.7641164	3	0.28319573	2	1	24	3	TCVVETPTLNSDK	trypsin-full-digest	YBR115C	RS	
+102	2	733.2200	1464.4243	1466.6692	0.93777496	36.194633	2	0.20716341	3	4	22	3	DFMVEQELLNTK	trypsin-full-digest	YFR053C	KD	
+103	2	559.1000	1116.1843	1119.1559	0	27.676226	1	0.44975054	1	3	16	11	YHIEEEGSR	trypsin-full-digest	YCR012W	RK	
+103	2	559.1000	1116.1843	1114.1895	0.19610925	9.8223457	3	0.3615503	2	3	16	11	TLQPNPECR	trypsin-full-digest	YDR093W	RF	
+103	2	559.1000	1116.1843	1116.1615	0.39587018	7.9366827	4	0.27170771	3	3	16	11	YDGAFDCLR	trypsin-full-digest	YBL030C	KK	
+103	2	559.1000	1116.1843	1113.1975	0.65997499	0.809264	11	0.15292643	4	1	16	11	DYFGAHTFR	trypsin-full-digest	YHR183W	RV	
+103	2	559.1000	1116.1843	1115.2114	0.77206689	17.480232	2	0.10251305	5	4	18	11	DVSNSKPNVR	trypsin-full-digest	YMR073C	RF	
+104	2	565.2200	1128.4243	1129.2966	0	8.6711378	3	0.40850091	1	2	18	7	NVVAVEMDPR	trypsin-full-digest	YPL266W	KM	
+104	2	565.2200	1128.4243	1126.2340	0.37231663	18.984291	1	0.25640923	2	2	16	7	DEGLFNLYR	trypsin-full-digest	YDL198C	RG	
+104	2	565.2200	1128.4243	1126.2928	0.73227251	7.3460369	4	0.10936692	3	2	18	7	GDVVMIYSSR	trypsin-full-digest	YBR115C	RG	
+104	2	565.2200	1128.4243	1131.1674	1.013297	15.935033	2	-0.0054318211	4	3	20	7	IDQASGAAQDR	trypsin-full-digest	YLR371W	RH	
+104	2	565.2200	1128.4243	1126.2004	1.2105	3.8605995	5	-0.085989423	5	1	18	7	CTINGVSYGR	trypsin-full-digest	YDR093W	KA	
+105	2	483.1200	964.2244	964.0862	0	29.478136	2	0.52027655	1	4	14	9	SDTPLLYR	trypsin-full-digest	YBL076C	RS	
+105	2	483.1200	964.2244	965.1637	0.12127268	45.200874	1	0.45718122	2	4	14	9	VLVHTQIR	trypsin-full-digest	YOR063W	RK	
+105	2	483.1200	964.2244	967.0465	0.58198601	15.500867	4	0.21748286	3	3	16	9	GADSVIYSR	trypsin-full-digest	YDR093W	KL	
+105	2	483.1200	964.2244	962.1570	0.77023834	26.160965	3	0.1195396	4	3	14	9	LFTLEAIR	trypsin-full-digest	YOR168W	RR	
+105	2	483.1200	964.2244	962.1136	0.78001142	1.991576	5	0.1144549	5	1	14	9	LALIDDFR	trypsin-full-digest	YGL022W	KE	
+106	1	713.0700	712.0622	713.7887	0	19.851704	2	0.24297184	1	3	12	9	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+106	1	713.0700	712.0622	710.7880	0.56537306	9.3046618	4	0.10560211	2	2	12	9	HIDAGAK	trypsin-full-digest	YGR192C	KK	
+106	1	713.0700	712.0622	714.8626	0.81795621	2.3578839	9	0.044231515	3	1	10	9	ALPTWK	trypsin-full-digest	YMR235C	KD	
+106	1	713.0700	712.0622	710.8309	0.96226132	9.7281923	3	0.0091694407	4	2	10	9	AFAQFK	trypsin-full-digest	YJR069C	KE	
+106	1	713.0700	712.0622	709.8033	1.3992343	6.9487085	5	-0.097002678	5	2	14	9	AHGGVAAK	trypsin-full-digest	YCR034W	RV	
+107	2	433.7800	865.5444	866.0430	0	2.096514	11	0.18164477	1	1	12	13	NDFIMVK	trypsin-full-digest	YOR063W	KG	
+107	2	433.7800	865.5444	863.9689	0.0033280628	54.479156	1	0.18104024	2	3	12	13	EYQVIGR	trypsin-full-digest	YMR242C	KR	
+107	2	433.7800	865.5444	864.9566	0.31438479	3.6916726	8	0.12453841	3	1	12	13	NIQHPEK	trypsin-full-digest	YDL223C	KN	
+107	2	433.7800	865.5444	864.0271	0.50945479	18.027445	5	0.089104973	4	2	12	13	LAEWMSK	trypsin-full-digest	YBR115C	RY	
+107	2	433.7800	865.5444	867.8272	0.59848398	17.266714	6	0.072933286	5	2	12	13	DSDDNFR	trypsin-full-digest	YOR267C	RL	
+107	3	433.7800	1298.3165	1295.5011	0	217.9725	1	0.61248285	1	10	44	5	TSFFQALGVPTK	trypsin-full-digest	YLR340W	KI	
+107	3	433.7800	1298.3165	1299.4670	0.57715613	143.61385	2	0.25898463	2	9	40	5	MPYTLSDAHHK	trypsin-full-digest	YLR058C	-L	
+107	3	433.7800	1298.3165	1298.5687	1.2572666	93.581177	3	-0.15757143	3	7	40	5	LNNPAIALMWR	trypsin-full-digest	YHR183W	KG	
+107	3	433.7800	1298.3165	1299.4120	1.3784283	34.675423	4	-0.23178086	4	5	36	5	FEELCADLFR	trypsin-full-digest	YLL024C	RS	
+107	3	433.7800	1298.3165	1300.4741	1.4784603	26.163458	5	-0.29304871	5	4	40	5	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+108	3	1032.5000	3094.4766	3095.2366	0	612.73865	1	3.6182745	1	28	108	2	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+108	3	1032.5000	3094.4766	3095.4709	0.90336043	41.487244	2	0.34966859	2	10	112	2	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+109	2	419.3200	836.6244	835.8872	0	24.110601	5	0.3558453	1	3	12	10	SDNVMDR	trypsin-full-digest	YBL076C	KW	
+109	2	419.3200	836.6244	839.0054	0.1598686	21.904999	6	0.29895681	2	3	14	10	IAGLNPVR	trypsin-full-digest	YPL106C	RI	
+109	2	419.3200	836.6244	835.0110	0.52057219	15.567754	8	0.17060213	3	3	12	10	EYILGLK	trypsin-full-digest	YDL198C	KD	
+109	2	419.3200	836.6244	835.9554	0.6000371	95.850708	1	0.14232492	4	6	14	10	IGDYAGIK	trypsin-full-digest	YMR303C	KW	
+109	2	419.3200	836.6244	837.9280	0.63456231	5.9988446	9	0.13003929	5	2	12	10	ETSNFIK	trypsin-full-digest	YBR118W	KK	
+110	2	613.1900	1224.3644	1222.3203	0	20.85313	1	0.51401627	1	3	22	4	GGEGEVSVFVSR	trypsin-full-digest	YDR037W	KV	
+110	2	613.1900	1224.3644	1223.4375	0.0089263823	11.477989	3	0.50942796	2	2	20	4	LIDFGSAVVFR	trypsin-full-digest	YOR267C	KY	
+110	2	613.1900	1224.3644	1223.2670	0.44400001	14.988181	2	0.28579304	3	2	18	4	YYGGNEHIDR	trypsin-full-digest	YLR058C	RM	
+110	2	613.1900	1224.3644	1224.3788	0.87815511	8.9747524	4	0.062630266	4	2	18	4	LAFLENQDFK	trypsin-full-digest	YBR115C	RL	
+111	3	1033.0200	3096.0366	3095.2366	0	934.97644	1	4.0064011	1	31	108	2	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+111	3	1033.0200	3096.0366	3095.4709	0.9004131	97.407951	2	0.39898497	2	13	112	2	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+112	2	403.3000	804.5844	803.8675	0	66.118599	2	0.9786734	1	5	12	20	ELDTAQK	trypsin-full-digest	YGR192C	KH	
+112	2	403.3000	804.5844	803.9288	0.26627362	49.190113	6	0.71807849	2	5	14	20	GSMADVPK	trypsin-full-digest	YFR053C	KE	
+112	2	403.3000	804.5844	804.8577	0.52704316	56.694237	3	0.46287027	3	5	10	20	EWNQTK	trypsin-full-digest	YDR093W	KF	
+112	2	403.3000	804.5844	801.9383	0.61698544	10.482521	12	0.37484616	4	3	14	20	LSPGITSK	trypsin-full-digest	YGL009C	KD	
+112	2	403.3000	804.5844	804.8957	0.67115271	76.747498	1	0.32183412	5	6	12	20	ESVTEIK	trypsin-full-digest	YGR157W	KA	
+112	3	403.3000	1206.8765	1204.3109	0	33.421028	1	0.73118997	1	6	40	2	VNGDAHVISHR	trypsin-full-digest	YGR157W	RA	
+112	3	403.3000	1206.8765	1207.4535	0.65048796	28.29888	2	0.25555971	2	6	36	2	DTLKPMAIYR	trypsin-full-digest	YLR371W	RV	
+113	2	751.4200	1500.8243	1500.4829	0	2.2083549	1	0.20484404	1	2	22	2	YLPNGDCECCGR	trypsin-full-digest	YBR115C	RA	
+113	2	751.4200	1500.8243	1500.7172	1.3362254	0.41176486	2	-0.068873771	2	1	24	2	AALLNQYFAQAYK	trypsin-full-digest	YGL245W	KG	
+114	3	670.5500	2008.6265	2006.3051	0	431.85522	1	2.2389128	1	24	68	2	SGVGICATCVLRPDLLFK	trypsin-full-digest	YEL027W	KN	
+114	3	670.5500	2008.6265	2009.1975	0.7732603	74.17244	2	0.50765038	2	14	76	2	YDSPVSSPITSASELGSIAK	trypsin-full-digest	YNL166C	KL	
+115	2	452.8500	903.6844	905.0214	0	68.137947	2	0.39396563	1	4	12	20	HHEELLK	trypsin-full-digest	YOR267C	RE	
+115	2	452.8500	903.6844	904.9293	0.15361577	75.46859	1	0.33344629	2	5	14	20	EQPESTSK	trypsin-full-digest	YDL223C	KN	
+115	2	452.8500	903.6844	903.0513	0.26712555	40.726894	6	0.28872734	3	4	12	20	QFWLGPR	trypsin-full-digest	YBR115C	RD	
+115	2	452.8500	903.6844	905.1050	0.30531314	38.380623	7	0.27368274	4	4	16	20	IALIAGYGK	trypsin-full-digest	YGR086C	KA	
+115	2	452.8500	903.6844	903.0921	0.33805606	49.166584	4	0.26078317	5	5	14	20	NLALLFGR	trypsin-full-digest	YLR371W	RS	
+116	2	613.3100	1224.6044	1224.3788	0	30.347525	2	0.61062574	1	4	18	5	LAFLENQDFK	trypsin-full-digest	YBR115C	RL	
+116	2	613.3100	1224.6044	1222.3203	0.40603259	55.583378	1	0.36269179	2	5	22	5	GGEGEVSVFVSR	trypsin-full-digest	YDR037W	KV	
+116	2	613.3100	1224.6044	1223.4375	0.463314	28.741871	3	0.32771429	3	3	20	5	LIDFGSAVVFR	trypsin-full-digest	YOR267C	KY	
+116	2	613.3100	1224.6044	1223.2670	1.3308802	4.6025863	4	-0.20204397	4	1	18	5	YYGGNEHIDR	trypsin-full-digest	YLR058C	RM	
+116	2	613.3100	1224.6044	1227.4233	1.5334202	3.0746751	5	-0.32572013	5	1	18	5	IEVLEQELVR	trypsin-full-digest	YGR086C	KA	
+117	2	652.5200	1303.0244	1301.4161	0	1256.421	1	3.6139576	1	18	22	8	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+117	2	652.5200	1303.0244	1301.4161	0.77656871	141.89146	2	0.80747122	2	7	22	8	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+117	2	652.5200	1303.0244	1300.4741	0.85818648	125.72668	3	0.51250803	3	8	20	8	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+117	2	652.5200	1303.0244	1304.4626	0.90605557	53.969692	5	0.3395111	4	5	22	8	IPGTFEPDTLSK	trypsin-full-digest	YDL223C	KS	
+117	2	652.5200	1303.0244	1303.4968	0.91972971	114.00854	4	0.29009345	5	7	22	8	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+118	3	1031.9399	3092.7964	3095.2366	0	2070.8057	1	4.5130448	1	42	108	3	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+118	3	1031.9399	3092.7964	3095.4709	0.9686414	41.307964	2	0.14152278	2	10	112	3	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+118	3	1031.9399	3092.7964	3090.7644	1.0997559	28.020123	3	-0.45020282	3	9	112	3	NIVPVIMAGIIAIYGLVVSVLVCYSLGQK	trypsin-full-digest	YEL027W	KQ	
+119	2	651.7700	1301.5244	1301.4161	0	1300.1331	1	3.780313	1	17	22	11	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+119	2	651.7700	1301.5244	1301.4161	0.71379524	221.25522	2	1.0819436	2	9	22	11	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+119	2	651.7700	1301.5244	1298.5687	0.81658727	125.39308	4	0.69335759	3	7	20	11	LNNPAIALMWR	trypsin-full-digest	YHR183W	KG	
+119	2	651.7700	1301.5244	1303.4968	0.84427452	163.24036	3	0.58869106	4	8	22	11	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+119	2	651.7700	1301.5244	1304.4626	0.85154969	104.09963	5	0.56118876	5	7	22	11	IPGTFEPDTLSK	trypsin-full-digest	YDL223C	KS	
+120	2	409.2100	816.4044	818.8417	0	124.02093	1	0.57712847	1	5	12	9	QSNDSLR	trypsin-full-digest	YOR267C	KS	
+120	2	409.2100	816.4044	815.9681	0.20467918	48.632717	3	0.45900229	2	3	12	9	SLNLTLR	trypsin-full-digest	YOR136W	RK	
+120	2	409.2100	816.4044	814.8504	0.22414759	34.387234	4	0.44776651	3	3	12	9	APELDDR	trypsin-full-digest	YBR115C	KN	
+120	2	409.2100	816.4044	816.9555	0.3102152	25.83992	6	0.39809445	4	2	12	9	HLSSVFK	trypsin-full-digest	YPL266W	KF	
+120	2	409.2100	816.4044	818.9838	0.33361226	99.746979	2	0.38459134	5	4	12	9	LEEAMVK	trypsin-full-digest	YMR309C	KL	
+121	2	651.5800	1301.1444	1301.4161	0	1479.4915	1	4.3240523	1	18	22	10	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+121	2	651.5800	1301.1444	1303.4968	0.78806555	74.371384	3	0.91641569	2	5	22	10	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+121	2	651.5800	1301.1444	1300.4741	0.86330932	74.331306	4	0.5910576	3	5	20	10	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+121	2	651.5800	1301.1444	1301.4161	0.86501253	103.94946	2	0.58369279	4	6	22	10	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+121	2	651.5800	1301.1444	1301.4192	0.88314486	54.668568	5	0.50528789	5	5	22	10	DALPSVTSEQVR	trypsin-full-digest	YBL076C	KE	
+122	1	760.2200	759.2122	759.8577	0	70.539841	1	0.42828295	1	5	14	13	SGDAALVK	trypsin-full-digest	YBR118W	KF	
+122	1	760.2200	759.2122	758.7892	0.059807912	19.467524	5	0.40266824	2	3	12	13	GSSQQPR	trypsin-full-digest	YEL027W	RL	
+122	1	760.2200	759.2122	756.8137	0.21858351	17.001827	6	0.33466735	3	3	12	13	SHSEGLK	trypsin-full-digest	YMR235C	KV	
+122	1	760.2200	759.2122	758.8753	0.24966337	23.554132	4	0.32135639	4	3	10	13	IGWDLR	trypsin-full-digest	YGL026C	KF	
+122	1	760.2200	759.2122	759.8577	0.46435907	69.700447	2	0.22940588	5	5	12	13	NSTIPTK	trypsin-full-digest	YLL024C	RK	
+123	2	565.0300	1128.0444	1129.2966	0	15.687304	2	0.33831081	1	3	18	7	NVVAVEMDPR	trypsin-full-digest	YPL266W	KM	
+123	2	565.0300	1128.0444	1125.2004	0.22678033	19.670055	1	0.26158857	2	4	20	7	YESATASALVN	trypsin-full-digest	YDR064W	K-	
+123	2	565.0300	1128.0444	1130.2659	0.40167227	10.035781	4	0.20242074	3	2	18	7	NSPWVVDSVK	trypsin-full-digest	YOR168W	KN	
+123	2	565.0300	1128.0444	1126.2340	0.41678071	10.784776	3	0.19730939	4	2	16	7	DEGLFNLYR	trypsin-full-digest	YDL198C	RG	
+123	2	565.0300	1128.0444	1126.2004	1.3182964	10.035781	4	-0.10768311	5	2	18	7	CTINGVSYGR	trypsin-full-digest	YDR093W	KA	
+124	2	495.0600	988.1044	987.0771	0	147.71281	1	1.242798	1	7	16	3	YSFLEGGSK	trypsin-full-digest	YGL009C	KL	
+124	2	495.0600	988.1044	989.0935	0.68469864	6.1323128	3	0.39185587	2	2	16	3	SLEASVIDR	trypsin-full-digest	YBR115C	KN	
+124	2	495.0600	988.1044	988.1950	0.79839063	12.011983	2	0.25055972	3	3	18	3	TPLPPAPAPK	trypsin-full-digest	YBL030C	KK	
+125	1	805.0000	803.9922	804.8957	0	67.403206	1	0.68201995	1	4	12	20	ESVTEIK	trypsin-full-digest	YGR157W	KA	
+125	1	805.0000	803.9922	802.9286	0.3362076	46.575958	2	0.45271966	2	4	12	20	THAIFSK	trypsin-full-digest	YGR157W	KI	
+125	1	805.0000	803.9922	804.8956	0.49661425	22.291025	6	0.34331912	3	2	12	20	ESTIDIK	trypsin-full-digest	YOR267C	KI	
+125	1	805.0000	803.9922	804.8577	0.50674599	32.34922	4	0.33640909	4	3	10	20	EWNQTK	trypsin-full-digest	YDR093W	KF	
+125	1	805.0000	803.9922	803.8675	0.57547224	26.311508	5	0.28953642	5	3	12	20	ELDTAQK	trypsin-full-digest	YGR192C	KH	
+126	2	745.2600	1488.5044	1489.7319	0	573.63257	1	3.4199548	1	14	24	5	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+126	2	745.2600	1488.5044	1486.6195	0.79367924	34.449203	4	0.70560771	2	5	26	5	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+126	2	745.2600	1488.5044	1488.7063	0.84733301	35.298698	3	0.52211416	3	4	24	5	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+126	2	745.2600	1488.5044	1485.6539	0.94492072	53.523678	2	0.18836875	4	5	22	5	QEAIYEVYITEK	trypsin-full-digest	YLR371W	RN	
+126	2	745.2600	1488.5044	1490.6510	0.97745997	6.6915894	5	0.077085875	5	2	24	5	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+127	2	474.7400	947.4644	947.0990	0	49.968937	1	0.57516605	1	4	14	8	LTWLADTK	trypsin-full-digest	YGL245W	KD	
+127	2	474.7400	947.4644	949.1149	0.36377129	24.094387	5	0.36593714	2	4	14	8	IFENVSIK	trypsin-full-digest	YDR205W	KA	
+127	2	474.7400	947.4644	945.0836	0.50043005	19.564295	6	0.28733566	3	3	14	8	LQTIIDSR	trypsin-full-digest	YMR309C	RG	
+127	2	474.7400	947.4644	945.0836	0.73157567	26.662403	4	0.15438858	4	4	20	8	LLGSGAGGSVK	trypsin-full-digest	YOR267C	KV	
+127	2	474.7400	947.4644	950.1027	0.78049624	49.048164	2	0.12625112	5	5	14	8	SFLESVIR	trypsin-full-digest	YBR009C	KD	
+128	1	711.0700	710.0622	709.8869	0	12.085135	3	0.16219591	1	2	10	9	SIHILK	trypsin-full-digest	YMR242C	RV	
+128	1	711.0700	710.0622	710.7880	0.71393204	8.2783346	4	0.046399057	2	2	12	9	HIDAGAK	trypsin-full-digest	YGR192C	KK	
+128	1	711.0700	710.0622	710.8309	0.72429669	23.710316	1	0.044717953	3	3	10	9	AFAQFK	trypsin-full-digest	YJR069C	KE	
+128	1	711.0700	710.0622	712.8472	0.97089922	19.031324	2	0.0047200308	4	3	12	9	TPGGILR	trypsin-full-digest	YER056C-A	KA	
+128	1	711.0700	710.0622	708.8125	1.0198404	2.5368099	6	-0.0032180157	5	1	10	9	FSLQSK	trypsin-full-digest	YMR145C	RS	
+129	2	523.2900	1044.5643	1045.1577	0	46.084091	1	0.65602416	1	4	16	6	ELEELTGVR	trypsin-full-digest	YBL076C	KN	
+129	2	523.2900	1044.5643	1044.1908	0.96237737	15.760937	4	0.024681358	2	3	16	6	QTHSMAELK	trypsin-full-digest	YOR267C	KR	
+129	2	523.2900	1044.5643	1045.2443	1.032151	5.7093325	5	-0.021091802	3	2	18	6	LNITGTVLSK	trypsin-full-digest	YOR168W	RR	
+129	2	523.2900	1044.5643	1047.2213	1.041258	3.3512132	6	-0.027066199	4	1	12	6	YWYFLQK	trypsin-full-digest	YMR242C	RL	
+129	2	523.2900	1044.5643	1046.2346	1.1082737	16.434448	3	-0.071030214	5	3	16	6	YKPGEAILR	trypsin-full-digest	YOR168W	KM	
+130	2	733.0300	1464.0444	1462.7675	0	1393.9764	1	3.6638756	1	19	24	3	NEVSAMPTLLLFK	trypsin-full-digest	YLR043C	KN	
+130	2	733.0300	1464.0444	1463.5709	0.95259821	6.5836983	3	0.17367421	2	3	24	3	TCVVETPTLNSDK	trypsin-full-digest	YBR115C	RS	
+130	2	733.0300	1464.0444	1466.6692	0.96637368	7.5720978	2	0.12320261	3	2	22	3	DFMVEQELLNTK	trypsin-full-digest	YFR053C	KD	
+131	2	745.8500	1489.6843	1489.7319	0	2819.5974	1	5.3028259	1	21	24	3	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+131	2	745.8500	1489.6843	1488.7063	0.8833434	85.206764	2	0.61860967	2	5	24	3	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+131	2	745.8500	1489.6843	1490.6510	0.90654737	26.993124	3	0.49556294	3	3	24	3	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+132	2	474.7400	947.4644	945.0836	0	54.108074	1	0.59248811	1	4	14	8	LQTIIDSR	trypsin-full-digest	YMR309C	RG	
+132	2	474.7400	947.4644	947.0990	0.13254599	25.854864	6	0.51395619	2	3	14	8	LTWLADTK	trypsin-full-digest	YGL245W	KD	
+132	2	474.7400	947.4644	950.1027	0.17679264	34.256989	3	0.48774058	3	4	14	8	SFLESVIR	trypsin-full-digest	YBR009C	KD	
+132	2	474.7400	947.4644	949.0466	0.2716538	48.32312	2	0.43153647	4	4	14	8	MSQQDNVK	trypsin-full-digest	YDR037W	-A	
+132	2	474.7400	947.4644	946.0281	0.31869599	26.415321	5	0.40366453	5	4	16	8	LSVATADNR	trypsin-full-digest	YLR249W	KH	
+133	2	483.1200	964.2244	965.1637	0	66.851875	1	0.60504568	1	6	14	9	VLVHTQIR	trypsin-full-digest	YOR063W	RK	
+133	2	483.1200	964.2244	962.1136	0.27866718	28.080624	3	0.43643931	2	4	14	9	LALIDDFR	trypsin-full-digest	YGL022W	KE	
+133	2	483.1200	964.2244	962.1570	0.71846265	42.350151	2	0.17034295	3	5	14	9	LFTLEAIR	trypsin-full-digest	YOR168W	RR	
+133	2	483.1200	964.2244	967.0465	0.89122903	6.9606466	4	0.065811396	4	2	16	9	GADSVIYSR	trypsin-full-digest	YDR093W	KL	
+133	2	483.1200	964.2244	966.0991	1.1542394	4.0717926	6	-0.093321867	5	2	14	9	DLTEFLTK	trypsin-full-digest	YGR157W	KV	
+134	2	457.5500	913.0844	914.1131	0	103.68198	1	1.1871964	1	7	16	11	QTVAVGVIK	trypsin-full-digest	YBR118W	RS	
+134	2	457.5500	913.0844	915.0573	0.51189619	31.804583	4	0.5794751	2	4	16	11	QGQAAIISK	trypsin-full-digest	YLR371W	KT	
+134	2	457.5500	913.0844	914.1532	0.54558873	37.778015	3	0.53947538	3	4	14	11	SIILLIDK	trypsin-full-digest	YLR371W	KK	
+134	2	457.5500	913.0844	914.0292	0.57700694	22.956854	5	0.50217581	4	3	14	11	QNNIAVQK	trypsin-full-digest	YMR309C	KR	
+134	2	457.5500	913.0844	914.0289	0.78891629	38.178898	2	0.2505978	5	4	14	11	AFHVTPDK	trypsin-full-digest	YLR058C	KW	
+135	2	1004.9900	2007.9644	2006.3051	0	933.36005	1	4.2101994	1	19	34	3	SGVGICATCVLRPDLLFK	trypsin-full-digest	YEL027W	KN	
+135	2	1004.9900	2007.9644	2009.1975	1.0327803	34.554996	2	-0.13801165	2	5	38	3	YDSPVSSPITSASELGSIAK	trypsin-full-digest	YNL166C	KL	
+135	2	1004.9900	2007.9644	2005.2764	1.0644609	3.5093601	3	-0.27139318	3	2	34	3	IPDIENSVNMVPVDHVAR	trypsin-full-digest	YBR115C	KV	
+136	1	717.0700	716.0622	716.7893	0	33.504017	6	0.72184199	1	4	12	16	EAAELGK	trypsin-full-digest	YBR118W	KG	
+136	1	717.0700	716.0622	714.7765	0.10004064	114.26469	1	0.64962846	2	6	12	16	SGPTPTR	trypsin-full-digest	YDL223C	KS	
+136	1	717.0700	716.0622	717.8204	0.1884166	23.559481	8	0.58583498	3	3	10	16	SLEITR	trypsin-full-digest	YLR371W	KD	
+136	1	717.0700	716.0622	718.7643	0.38262898	39.344013	5	0.44564432	4	4	10	16	GAEWEK	trypsin-full-digest	YGL009C	KA	
+136	1	717.0700	716.0622	713.7887	0.49265304	44.671604	4	0.36622435	5	4	12	16	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+137	3	497.2900	1488.8466	1489.7319	0	1202.3578	1	3.5980604	1	22	48	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+137	3	497.2900	1488.8466	1488.7063	0.81239575	238.33492	2	0.67501152	2	13	48	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+137	3	497.2900	1488.8466	1490.6510	0.91495377	106.84063	3	0.30600145	3	10	48	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+137	3	497.2900	1488.8466	1486.6195	0.96376705	104.79422	4	0.13036823	4	9	52	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+138	1	719.0600	718.0522	716.8506	0	52.676434	1	0.83089995	1	4	12	13	DVMPAGK	trypsin-full-digest	YBR115C	KG	
+138	1	719.0600	718.0522	717.8204	0.24423222	27.570053	4	0.62796742	2	3	10	13	SLEITR	trypsin-full-digest	YLR371W	KD	
+138	1	719.0600	718.0522	718.8077	0.44881228	42.191254	2	0.45798185	3	3	10	13	FDNVPK	trypsin-full-digest	YGL009C	KR	
+138	1	719.0600	718.0522	717.8817	0.54288805	30.408899	3	0.37981433	4	3	10	13	QSKPMK	trypsin-full-digest	YDR093W	RD	
+138	1	719.0600	718.0522	718.7643	0.58580309	26.714539	5	0.34415618	5	2	10	13	GAEWEK	trypsin-full-digest	YGL009C	KA	
+139	3	1032.0900	3093.2463	3095.2366	0	1460.1478	1	3.9592109	1	39	108	3	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+139	3	1032.0900	3093.2463	3095.4709	0.89455146	39.019924	2	0.41749313	2	11	112	3	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+139	3	1032.0900	3093.2463	3090.7644	1.1534919	13.67534	3	-0.60770655	3	6	112	3	NIVPVIMAGIIAIYGLVVSVLVCYSLGQK	trypsin-full-digest	YEL027W	KQ	
+140	1	717.0600	716.0522	716.7893	0	31.130041	3	0.59465551	1	4	12	16	EAAELGK	trypsin-full-digest	YBR118W	KG	
+140	1	717.0600	716.0522	716.7460	0.0037337129	23.396549	6	0.59243524	2	3	10	16	KPDDDK	trypsin-full-digest	YKL145W	KI	
+140	1	717.0600	716.0522	714.7765	0.42896518	40.463547	2	0.339569	3	4	12	16	SGPTPTR	trypsin-full-digest	YDL223C	KS	
+140	1	717.0600	716.0522	718.8077	0.43547797	48.258392	1	0.33569613	4	4	10	16	FDNVPK	trypsin-full-digest	YGL009C	KR	
+140	1	717.0600	716.0522	717.8817	0.44567406	29.726236	4	0.32963297	5	3	10	16	QSKPMK	trypsin-full-digest	YDR093W	RD	
+141	3	497.2900	1488.8466	1489.7319	0	1504.3676	1	4.4072876	1	24	48	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+141	3	497.2900	1488.8466	1486.6195	0.81095272	174.72479	3	0.83318573	2	12	52	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+141	3	497.2900	1488.8466	1488.7063	0.8131507	369.57693	2	0.82349861	3	15	48	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+141	3	497.2900	1488.8466	1490.6510	0.96138328	67.817703	4	0.17019501	4	8	48	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+142	1	715.0700	714.0622	716.7893	0	72.108284	1	0.72181535	1	5	12	12	EAAELGK	trypsin-full-digest	YBR118W	KG	
+142	1	715.0700	714.0622	713.7887	0.55028677	11.598034	6	0.32460991	2	2	12	12	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+142	1	715.0700	714.0622	714.7765	0.71276796	21.419298	3	0.20732848	3	3	12	12	SGPTPTR	trypsin-full-digest	YDL223C	KS	
+142	1	715.0700	714.0622	716.8506	0.7541483	8.9955482	8	0.17745954	4	2	12	12	DVMPAGK	trypsin-full-digest	YBR115C	KG	
+142	1	715.0700	714.0622	715.9341	0.7584759	12.551558	4	0.17433582	5	2	10	12	LLPFVK	trypsin-full-digest	YLR340W	KG	
+143	2	452.8500	903.6844	906.0465	0	200.59422	1	0.94311553	1	8	14	20	FDIGDLVK	trypsin-full-digest	YLR298C	RA	
+143	2	452.8500	903.6844	905.0214	0.28600335	74.133629	3	0.67338133	2	5	12	20	HHEELLK	trypsin-full-digest	YOR267C	RE	
+143	2	452.8500	903.6844	904.0949	0.36352864	52.860504	6	0.60026604	3	5	14	20	HAFMGTLK	trypsin-full-digest	YOR063W	KK	
+143	2	452.8500	903.6844	904.0338	0.41108957	83.931282	2	0.55541056	4	6	14	20	VSHTVSFK	trypsin-full-digest	YOR168W	KS	
+143	2	452.8500	903.6844	904.9293	0.41509125	34.957909	12	0.55163652	5	4	14	20	EQPESTSK	trypsin-full-digest	YDL223C	KN	
+144	3	497.2900	1488.8466	1489.7319	0	1053.226	1	3.5541759	1	21	48	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+144	3	497.2900	1488.8466	1488.7063	0.86864299	272.68655	2	0.46686584	2	13	48	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+144	3	497.2900	1488.8466	1486.6195	1.0075978	137.61798	3	-0.027004087	3	11	52	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+144	3	497.2900	1488.8466	1490.6510	1.0094203	64.820557	4	-0.033481151	4	7	48	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+145	1	717.0600	716.0522	714.7765	0	58.588223	1	0.90983647	1	5	12	16	SGPTPTR	trypsin-full-digest	YDL223C	KS	
+145	1	717.0600	716.0522	715.9341	0.44376087	41.323978	3	0.50608665	2	4	10	16	LLPFVK	trypsin-full-digest	YLR340W	KG	
+145	1	717.0600	716.0522	716.7893	0.48714566	22.007057	7	0.46661359	3	3	12	16	EAAELGK	trypsin-full-digest	YBR118W	KG	
+145	1	717.0600	716.0522	713.7887	0.49324587	33.729961	4	0.46106339	4	4	12	16	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+145	1	717.0600	716.0522	717.8204	0.53495586	9.8458958	9	0.42311412	5	2	10	16	SLEITR	trypsin-full-digest	YLR371W	KD	
+146	2	692.6800	1383.3444	1382.4467	0	2011.0013	1	3.8734953	1	19	24	5	TASEFDSAIAQDK	trypsin-full-digest	YLR043C	KL	
+146	2	692.6800	1383.3444	1381.6099	0.68104291	337.00198	2	1.2354789	2	10	22	5	LAMFLTDSNTIR	trypsin-full-digest	YDR037W	RE	
+146	2	692.6800	1383.3444	1381.5258	0.88333881	9.5191793	3	0.45188648	3	2	22	5	MSESNAHFSFPK	trypsin-full-digest	YBL076C	-E	
+146	2	692.6800	1383.3444	1380.6042	1.0289	3.3277209	5	-0.11194392	4	1	22	5	EVVELPLLSPER	trypsin-full-digest	YKL145W	RF	
+146	2	692.6800	1383.3444	1383.6108	1.1577057	7.8270969	4	-0.61087209	5	2	26	5	NVIVSGIVLAADGR	trypsin-full-digest	YBL076C	KK	
+147	2	614.5800	1227.1444	1227.4233	0	7.4682322	1	0.01874348	1	2	18	3	IEVLEQELVR	trypsin-full-digest	YGR086C	KA	
+147	2	614.5800	1227.1444	1224.3788	3.5171313	1.7642522	3	-0.0471798	2	1	18	3	LAFLENQDFK	trypsin-full-digest	YBR115C	RL	
+147	2	614.5800	1227.1444	1229.3525	6.4989333	4.1427054	2	-0.10306915	3	2	20	3	EILGTDEPTVR	trypsin-full-digest	YKL127W	KT	
+148	1	713.0700	712.0622	713.7887	0	24.496252	4	0.33537182	1	3	12	9	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+148	1	713.0700	712.0622	713.7881	0.33931932	46.403988	3	0.22157368	2	4	12	9	TLYGFGG	trypsin-full-digest	YBR009C	R-	
+148	1	713.0700	712.0622	710.7880	0.54243892	48.601635	2	0.1534531	3	4	12	9	HIDAGAK	trypsin-full-digest	YGR192C	KK	
+148	1	713.0700	712.0622	712.8472	0.59844357	11.41906	5	0.1346707	4	3	12	9	TPGGILR	trypsin-full-digest	YER056C-A	KA	
+148	1	713.0700	712.0622	710.8309	0.78597832	59.82716	1	0.071776837	5	4	10	9	AFAQFK	trypsin-full-digest	YJR069C	KE	
+149	2	733.7700	1465.5244	1462.7675	0	1203.868	1	3.1824079	1	18	24	3	NEVSAMPTLLLFK	trypsin-full-digest	YLR043C	KN	
+149	2	733.7700	1465.5244	1466.6692	0.92764938	7.8815074	2	0.23024926	2	2	22	3	DFMVEQELLNTK	trypsin-full-digest	YFR053C	KD	
+149	2	733.7700	1465.5244	1463.5709	0.96620041	1.0003113	3	0.10756414	3	1	24	3	TCVVETPTLNSDK	trypsin-full-digest	YBR115C	RS	
+150	1	832.2400	831.2322	834.0013	0	12.4148	2	0.15348957	1	2	12	12	LSMSQLR	trypsin-full-digest	YOR267C	KS	
+150	1	832.2400	831.2322	832.9573	0.33006737	31.373159	1	0.10282768	2	2	12	12	NAPAWFK	trypsin-full-digest	YDR064W	RL	
+150	1	832.2400	831.2322	832.9578	0.37659156	10.274959	3	0.095686696	3	2	14	12	VAINGFGR	trypsin-full-digest	YGR192C	RI	
+150	1	832.2400	831.2322	830.9366	0.58833861	3.6209517	5	0.063185729	4	1	12	12	VTDVIER	trypsin-full-digest	YDR093W	KE	
+150	1	832.2400	831.2322	829.9922	1.1218611	2.9467273	6	-0.018704401	5	1	14	12	DIVSAVVK	trypsin-full-digest	YMR303C	KA	
+151	2	651.6200	1301.2244	1301.4161	0	1202.2273	1	4.0469213	1	17	22	10	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+151	2	651.6200	1301.2244	1301.4192	0.77860552	43.713001	5	0.89596611	2	5	22	10	DALPSVTSEQVR	trypsin-full-digest	YBL076C	KE	
+151	2	651.6200	1301.2244	1301.4161	0.77958488	94.108009	3	0.89200252	3	6	22	10	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+151	2	651.6200	1301.2244	1303.4968	0.78279489	228.81261	2	0.87901193	4	9	22	10	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+151	2	651.6200	1301.2244	1300.4741	0.85280436	85.688034	4	0.59568912	5	6	20	10	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+152	2	531.2200	1060.4243	1059.2889	0	26.479269	2	0.6205802	1	3	16	8	MNLQELLAK	trypsin-full-digest	YDR205W	-V	
+152	2	531.2200	1060.4243	1060.2126	0.056052148	86.054985	1	0.58579534	2	5	18	8	GTIEIVSDVK	trypsin-full-digest	YLR340W	RV	
+152	2	531.2200	1060.4243	1060.1289	0.84516138	11.819891	7	0.096089773	3	2	16	8	EISDAQEIR	trypsin-full-digest	YMR145C	KL	
+152	2	531.2200	1060.4243	1058.1594	0.8702845	24.158962	4	0.080498867	4	3	18	8	DQKPGTSGLR	trypsin-full-digest	YKL127W	KK	
+152	2	531.2200	1060.4243	1062.1960	1.003428	7.30264	8	-0.0021273475	5	2	16	8	FANWIANAR	trypsin-full-digest	YBL076C	RD	
+153	2	613.7900	1225.5643	1224.3788	0	5.6870127	2	0.16703272	1	2	18	4	LAFLENQDFK	trypsin-full-digest	YBR115C	RL	
+153	2	613.7900	1225.5643	1223.4375	1.2733541	7.349463	1	-0.045659065	2	2	20	4	LIDFGSAVVFR	trypsin-full-digest	YOR267C	KY	
+153	2	613.7900	1225.5643	1223.2670	2.1510031	2.7957928	4	-0.19225518	3	1	18	4	YYGGNEHIDR	trypsin-full-digest	YLR058C	RM	
+153	2	613.7900	1225.5643	1227.4233	2.5895705	4.6158304	3	-0.26551029	4	2	18	4	IEVLEQELVR	trypsin-full-digest	YGR086C	KA	
+154	1	717.0600	716.0522	716.8506	0	215.65358	1	0.59496731	1	6	12	16	DVMPAGK	trypsin-full-digest	YBR115C	KG	
+154	1	717.0600	716.0522	716.7460	0.072602049	154.65167	2	0.55177146	2	5	10	16	KPDDDK	trypsin-full-digest	YKL145W	KI	
+154	1	717.0600	716.0522	716.7893	0.41614333	80.299057	4	0.34737563	3	4	12	16	EAAELGK	trypsin-full-digest	YBR118W	KG	
+154	1	717.0600	716.0522	715.9341	0.48545897	47.664581	7	0.30613509	4	3	10	16	LLPFVK	trypsin-full-digest	YLR340W	KG	
+154	1	717.0600	716.0522	717.8817	0.5674172	68.329742	6	0.25737262	5	3	10	16	QSKPMK	trypsin-full-digest	YDR093W	RD	
+155	2	419.3200	836.6244	835.8872	0	69.90876	1	0.78055704	1	5	12	10	SDNVMDR	trypsin-full-digest	YBL076C	KW	
+155	2	419.3200	836.6244	835.9554	0.60037106	41.898266	2	0.31193319	2	4	14	10	IGDYAGIK	trypsin-full-digest	YMR303C	KW	
+155	2	419.3200	836.6244	834.8437	0.75223875	8.1968241	7	0.19339177	3	2	12	10	YDSTHGR	trypsin-full-digest	YGR192C	KY	
+155	2	419.3200	836.6244	839.0054	0.80877531	7.8815541	8	0.14926179	4	2	14	10	IAGLNPVR	trypsin-full-digest	YPL106C	RI	
+155	2	419.3200	836.6244	834.0013	0.8121413	29.737709	3	0.14663443	5	3	12	10	LSMSQLR	trypsin-full-digest	YOR267C	KS	
+156	3	1032.4399	3094.2964	3095.2366	0	1813.374	1	5.0189385	1	42	108	2	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+156	3	1032.4399	3094.2964	3095.4709	0.96011585	39.488911	2	0.20017597	2	10	112	2	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+157	2	509.3200	1016.6244	1017.1068	0	158.00694	1	1.1119214	1	7	16	9	ITSGQELNR	trypsin-full-digest	YDL198C	KV	
+157	2	509.3200	1016.6244	1017.1035	0.43675607	28.964193	3	0.62628299	2	3	16	9	VSSAEYYAK	trypsin-full-digest	YIL133C	KK	
+157	2	509.3200	1016.6244	1018.1962	0.61605942	23.395197	4	0.42691177	3	3	16	9	MQSVIDLGR	trypsin-full-digest	YBL076C	RN	
+157	2	509.3200	1016.6244	1018.0887	0.80515426	42.167759	2	0.21665314	4	3	14	9	LEEIETER	trypsin-full-digest	YMR235C	KL	
+157	2	509.3200	1016.6244	1018.1529	0.98998845	10.166105	8	0.011132082	5	2	16	9	VALNGEEMR	trypsin-full-digest	YDR093W	KR	
+158	2	427.3800	852.7444	852.0445	0	280.23941	1	1.6478953	1	8	14	13	HASLILAK	trypsin-full-digest	YMR235C	KA	
+158	2	427.3800	852.7444	852.8194	0.72617084	44.829403	4	0.45124179	2	4	12	13	DSCTENK	trypsin-full-digest	YNL166C	KE	
+158	2	427.3800	852.7444	849.9823	0.72882479	92.955452	2	0.44686839	3	5	12	13	IADQYLK	trypsin-full-digest	YPL215W	RD	
+158	2	427.3800	852.7444	853.0293	0.75062484	38.825851	5	0.41094413	4	4	16	13	GPLATPIGK	trypsin-full-digest	YOR136W	KG	
+158	2	427.3800	852.7444	852.0011	0.82441694	10.621344	11	0.28934249	5	2	14	13	LPLNPNGK	trypsin-full-digest	YBR115C	KV	
+159	2	745.7500	1489.4844	1489.7319	0	1736.3658	1	4.2195272	1	18	24	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+159	2	745.7500	1489.4844	1486.6195	0.81333941	176.23169	2	0.78761947	2	8	26	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+159	2	745.7500	1489.4844	1490.6510	0.92798012	23.23929	4	0.30388993	3	3	24	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+159	2	745.7500	1489.4844	1488.7063	0.95878029	29.159029	3	0.17392777	4	3	24	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/example-files/small-yeast.fasta b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/example-files/small-yeast.fasta
new file mode 100644
index 0000000..2d25ef0
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/example-files/small-yeast.fasta
@@ -0,0 +1,165 @@
+>YBL030C PET9 SGDID:S000000126, Chr II from 164000-163044, reverse complement, Verified ORF, "Major ADP/ATP carrier of the mitochondrial inner membrane, exchanges cytosolic ADP for mitochondrially synthesized ATP; required for viability in many common lab strains carrying a mutation in the polymorphic SAL1 gene"
+MSSNAQVKTPLPPAPAPKKESNFLIDFLMGGVSAAVAKTAASPIERVKLLIQNQDEMLKQGTLDRKYAGILDCFKRTATQEGVISFWRGNTANVIRYFPTQALNFAFKDKIKAMFGFKKEEGYAKWFAGNLASGGAAGALSLLFVYSLDYARTRLAADSKSSKKGGARQFNGLIDVYKKTLKSDGVAGLYRGFLPSVVGIVVYRGLYFGMYDSLKPLLLTGSLEGSFLASFLLGWVVTTGASTCSYPLDTVRRRMMMTSGQAVKYDGAFDCLRKIVAAEGVGSLFKGCGANILRGVAGAGVISMYDQLQMILFGKKFK
+
+>YBL076C ILS1 SGDID:S000000172, Chr II from 84259-81041, reverse complement, Verified ORF, "Cytoplasmic isoleucine-tRNA synthetase, target of the G1-specific inhibitor reveromycin A"
+MSESNAHFSFPKEEEKVLSLWDEIDAFHTSLELTKDKPEFSFFDGPPFATGTPHYGHILASTIKDIVPRYATMTGHHVERRFGWDTHGVPIEHIIDKKLGITGKDDVFKYGLENYNNECRSIVMTYASDWRKTIGRLGRWIDFDNDYKTMYPSFMESTWWAFKQLHEKGQVYRGFKVMPYSTGLTTPLSNFEAQQNYKDVNDPAVTIGFNVIGQEKTQLVAWTTTPWTLPSNLSLCVNADFEYVKIYDETRDRYFILLESLIKTLYKKPKNEKYKIVEKIKGSDLVGLKYEPLFPYFAEQFHETAFRVISDDYVTSDSGTGIVHNAPAFGEEDNAACLKNGVISEDSVLPNAIDDLGRFTKDVPDFEGVYVKDADKLIIKYLTNTGNLLLASQIRHSYPFCWRSDTPLLYRSVPAWFVRVKNIVPQMLDSVMKSHWVPNTIKEKRFANWIANARDWNVSRNRYWGTPIPLWVSDDFEEVVCVGSIKELEELT [...]
+
+>YBR009C HHF1 SGDID:S000000213, Chr II from 255682-255371, reverse complement, Verified ORF, "One of two identical histone H4 proteins (see also HHF2); core histone required for chromatin assembly and chromosome function; contributes to telomeric silencing; N-terminal domain involved in maintaining genomic integrity"
+MSGRGKGGKGLGKGGAKRHRKILRDNIQGITKPAIRRLARRGGVKRISGLIYEEVRAVLKSFLESVIRDSVTYTEHAKRKTVTSLDVVYALKRQGRTLYGFGG
+
+>YBR115C LYS2 SGDID:S000000319, Chr II from 473920-469742, reverse complement, Verified ORF, "Alpha aminoadipate reductase, catalyzes the reduction of alpha-aminoadipate to alpha-aminoadipate 6-semialdehyde, which is the fifth step in biosynthesis of lysine; activation requires posttranslational phosphopantetheinylation by Lys5p"
+MTNEKVWIEKLDNPTLSVLPHDFLRPQQEPYTKQATYSLQLPQLDVPHDSFSNKYAVALSVWAALIYRVTGDDDIVLYIANNKILRFNIQPTWSFNELYSTINNELNKLNSIEANFSFDELAEKIQSCQDLERTPQLFRLAFLENQDFKLDEFKHHLVDFALNLDTSNNAHVLNLIYNSLLYSNERVTIVADQFTQYLTAALSDPSNCITKISLITASSKDSLPDPTKNLGWCDFVGCIHDIFQDNAEAFPERTCVVETPTLNSDKSRSFTYRDINRTSNIVAHYLIKTGIKRGDVVMIYSSRGVDLMVCVMGVLKAGATFSVIDPAYPPARQTIYLGVAKPRGLIVIRAAGQLDQLVEDYINDELEIVSRINSIAIQENGTIEGGKLDNGEDVLAPYDHYKDTRTGVVVGPDSNPTLSFTSGSEGIPKGVLGRHFSLAYYFNWMSKRFNLTENDKFTMLSGIAHDPIQRDMFTPLFLGAQLYVPTQDDIGT [...]
+
+>YBR118W TEF2 SGDID:S000000322, Chr II from 477665-479041, Verified ORF, "Translational elongation factor EF-1 alpha; also encoded by TEF1; functions in the binding reaction of aminoacyl-tRNA (AA-tRNA) to ribosomes"
+MGKEKSHINVVVIGHVDSGKSTTTGHLIYKCGGIDKRTIEKFEKEAAELGKGSFKYAWVLDKLKAERERGITIDIALWKFETPKYQVTVIDAPGHRDFIKNMITGTSQADCAILIIAGGVGEFEAGISKDGQTREHALLAFTLGVRQLIVAVNKMDSVKWDESRFQEIVKETSNFIKKVGYNPKTVPFVPISGWNGDNMIEATTNAPWYKGWEKETKAGVVKGKTLLEAIDAIEQPSRPTDKPLRLPLQDVYKIGGIGTVPVGRVETGVIKPGMVVTFAPAGVTTEVKSVEMHHEQLEQGVPGDNVGFNVKNVSVKEIRRGNVCGDAKNDPPKGCASFNATVIVLNHPGQISAGYSPVLDCHTAHIACRFDELLEKNDRRSGKKLEDHPKFLKSGDAALVKFVPSKPMCVEAFSEYPPLGRFAVRDMRQTVAVGVIKSVDKTEKAAKVTKAAQKAAKK
+
+>YCR012W PGK1 SGDID:S000000605, Chr III from 137744-138994, Verified ORF, "3-phosphoglycerate kinase, catalyzes transfer of high-energy phosphoryl groups from the acyl phosphate of 1,3-bisphosphoglycerate to ADP to produce ATP; key enzyme in glycolysis and gluconeogenesis"
+MSLSSKLSVQDLDLKDKRVFIRVDFNVPLDGKKITSNQRIVAALPTIKYVLEHHPRYVVLASHLGRPNGERNEKYSLAPVAKELQSLLGKDVTFLNDCVGPEVEAAVKASAPGSVILLENLRYHIEEEGSRKVDGQKVKASKEDVQKFRHELSSLADVYINDAFGTAHRAHSSMVGFDLPQRAAGFLLEKELKYFGKALENPTRPFLAILGGAKVADKIQLIDNLLDKVDSIIIGGGMAFTFKKVLENTEIGDSIFDKAGAEIVPKLMEKAKAKGVEVVLPVDFIIADAFSADANTKTVTDKEGIPAGWQGLDNGPESRKLFAATVAKAKTIVWNGPPGVFEFEKFAAGTKALLDEVVKSSAAGNTVIIGGGDTATVAKKYGVTDKISHVSTGGGASLELLEGKELPGVAFLSEKK
+
+>YCR034W FEN1 SGDID:S000000630, Chr III from 190588-191631, Verified ORF, "Fatty acid elongase, involved in sphingolipid biosynthesis; acts on fatty acids of up to 24 carbons in length; mutations have regulatory effects on 1,3-beta-glucan synthase, vacuolar ATPase, and the secretory pathway"
+MNSLVTQYAAPLFERYPQLHDYLPTLERPFFNISLWEHFDDVVTRVTNGRFVPSEFQFIAGELPLSTLPPVLYAITAYYVIIFGGRFLLSKSKPFKLNGLFQLHNLVLTSLSLTLLLLMVEQLVPIIVQHGLYFAICNIGAWTQPLVTLYYMNYIVKFIEFIDTFFLVLKHKKLTFLHTYHHGATALLCYTQLMGTTSISWVPISLNLGVHVVMYWYYFLAARGIRVWWKEWVTRFQIIQFVLDIGFIYFAVYQKAVHLYFPILPHCGDCVGSTTATFAGCAIISSYLVLFISFYINVYKRKGTKTSRVVKRAHGGVAAKVNEYVNVDLKNVPTPSPSPKPQHRRKR
+
+>YDL198C GGC1 SGDID:S000002357, Chr IV from 104552-103650, reverse complement, Verified ORF, "Mitochondrial GTP/GDP transporter, essential for mitochondrial genome maintenance; has a role in mitochondrial iron transport; member of the mitochondrial carrier family"
+MPHTDKKQSGLARLLGSASAGIMEIAVFHPVDTISKRLMSNHTKITSGQELNRVIFRDHFSEPLGKRLFTLFPGLGYAASYKVLQRVYKYGGQPFANEFLNKHYKKDFDNLFGEKTGKAMRSAAAGSLIGIGEIVLLPLDVLKIKRQTNPESFKGRGFIKILRDEGLFNLYRGWGWTAARNAPGSFALFGGNAFAKEYILGLKDYSQATWSQNFISSIVGACSSLIVSAPLDVIKTRIQNRNFDNPESGLRIVKNTLKNEGVTAFFKGLTPKLLTTGPKLVFSFALAQSLIPRFDNLLSK
+
+>YDL223C HBT1 SGDID:S000002382, Chr IV from 60406-57266, reverse complement, Verified ORF, "Substrate of the Hub1p ubiquitin-like protein that localizes to the shmoo tip (mating projection); mutants are defective for mating projection formation, thereby implicating Hbt1p in polarized cell morphogenesis"
+MNMNESISKDGQGEEEQNNFSFGGKPGSYDSNSDSAQRKKSFSTTKPTEYNLPKEQPESTSKNLETKAKNILLPWRKKHNKDSETPHEDTEADANRRANVTSDVNPVSADTKSSSGPNATITTHGYSYVKTTTPAATSEQSKVKTSPPTSHEHSNIKASPTAHRHSKGDAGHPSIATTHNHSTSKAATSPVTHTHGHSSATTSPVTHTHGHASVKTTSPTNTHEHSKANTGPSATATTHGHINVKTTHPVSHGHSGSSTGPKSTAAAQDHSSTKTNPSVTHGHTSVKDNSSATKGYSNTDSNSDRDVIPGSFRGMTGTDVNPVDPSVYTSTGPKSNVSSGMNAVDPSVYTDTSSKSADRRKYSGNTATGPPQDTIKEIAQNVKMDESEQTGLKNDQVSGSDAIQQQTMEPEPKAAVGTSGFVSQQPSYHDSNKNIQHPEKNKVDNKNISERAAEKFNIERDDILESADDYQQKNIKSKTDSNWGPIEYSSSA [...]
+
+>YDR037W KRS1 SGDID:S000002444, Chr IV from 525437-527212, Verified ORF, "Lysyl-tRNA synthetase; also identified as a negative regulator of general control of amino acid biosynthesis "
+MSQQDNVKAAAEGVANLHLDEATGEMVSKSELKKRIKQRQVEAKKAAKKAAAQPKPASKKKTDLFADLDPSQYFETRSRQIQELRKTHEPNPYPHKFHVSISNPEFLAKYAHLKKGETLPEEKVSIAGRIHAKRESGSKLKFYVLHGDGVEVQLMSQLQDYCDPDSYEKDHDLLKRGDIVGVEGYVGRTQPKKGGEGEVSVFVSRVQLLTPCLHMLPADHFGFKDQETRYRKRYLDLIMNKDARNRFITRSEIIRYIRRFLDQRKFIEVETPMMNVIAGGATAKPFITHHNDLDMDMYMRIAPELFLKQLVVGGLDRVYEIGRQFRNEGIDMTHNPEFTTCEFYQAYADVYDLMDMTELMFSEMVKEITGSYIIKYHPDPADPAKELELNFSRPWKRINMIEELEKVFNVKFPSGDQLHTAETGEFLKKILVDNKLECPPPLTNARMLDKLVGELEDTCINPTFIFGHPQMMSPLAKYSRDQPGLCERFEVF [...]
+
+>YDR064W RPS13 SGDID:S000002471, Chr IV from 579456-579476,580016-580450, Verified ORF, "Protein component of the small (40S) ribosomal subunit; has similarity to E. coli S15 and rat S13 ribosomal proteins"
+MGRMHSAGKGISSSAIPYSRNAPAWFKLSSESVIEQIVKYARKGLTPSQIGVLLRDAHGVTQARVITGNKIMRILKSNGLAPEIPEDLYYLIKKAVSVRKHLERNRKDKDAKFRLILIESRIHRLARYYRTVAVLPPNWKYESATASALVN
+
+>YDR093W DNF2 SGDID:S000002500, Chr IV from 631279-636117, Verified ORF, "Aminophospholipid translocase (flippase) that localizes primarily to the plasma membrane; contributes to endocytosis, protein transport and cell polarity; type 4 P-type ATPase"
+MSSPSKPTSPFVDDIEHESGSASNGLSSMSPFDDSFQFEKPSSAHGNIEVAKTGGSVLKRQSKPMKDISTPDLSKVTFDGIDDYSNDNDINDDDELNGKKTEIHEHENEVDDDLHSFQATPMPNTGGFEDVELDNNEGSNNDSQADHKLKRVRFGTRRNKSGRIDINRSKTLKWAKKNFHNAIDEFSTKEDSLENSALQNRSDELRTVYYNLPLPEDMLDEDGLPLAVYPRNKIRTTKYTPLTFFPKNILFQFHNFANIYFLILLILGAFQIFGVTNPGFASVPLIVIVIITAIKDGIEDSRRTVLDLEVNNTRTHILSGVKNENVAVDNVSLWRRFKKANTRALIKIFEYFSENLTAAGREKKLQKKREELRRKRNSRSFGPRGSLDSIGSYRMSADFGRPSLDYENLNQTMSQANRYNDGENLVDRTLQPNPECRFAKDYWKNVKVGDIVRVHNNDEIPADMILLSTSDVDGACYVETKNLDGETNLKVR [...]
+
+>YDR205W MSC2 SGDID:S000002613, Chr IV from 859343-861517, Verified ORF, "Member of the cation diffusion facilitator family, localizes to the endoplasmic reticulum and nucleus; mutations affect the cellular distribution of zinc and also confer defects in meiotic recombination between homologous chromatids"
+MNLQELLAKVPLLLSYPTIILSSNLIVPSHNDLISRAASTSAAEYADEKLIFFSTDHAIRLIFLPTFVASSFNLFAHYFNFINYSSRRKYYVLFTAIYFLSILTAIFHPIQSTCITLLIIKLLTTADESSPKIALNFKTILKTFVPFITLTLVILRWDPSFDASSGDVNKISTSLAAYALLILTLRYASPLILSTLSSSIGVVSKDTSVAQHSISRNKRFPLILVLPIFSFVLLYLMTIVNKTYNIQLLMVFVFFGCLSIFFLSLKDLFTEDGNQKKGGQEDEYCRMFDIKYMISYLWLTRFTILLTGIMAIVVHFLSFNEITSSIKTDLLSLLFVVVAEYVSSFSNKQPDSHSHNHAHHHSHLTDSLPLENESMFKQMALNKDTRSIFSFLLLNTAFMFVQLLYSFRSKSLGLLSDSLHMALDCTSLLLGLIAGVLTKKPASDKFPFGLNYLGTLAGFTNGVLLLGIVCGIFVEAIERIFNPIHLHATNEL [...]
+
+>YDR399W HPT1 SGDID:S000002807, Chr IV from 1270060-1270725, Verified ORF, "Dimeric hypoxanthine-guanine phosphoribosyltransferase, catalyzes the formation of both inosine monophosphate and guanosine monophosphate; mutations in the human homolog HPRT1 can cause Lesch-Nyhan syndrome and Kelley-Seegmiller syndrome"
+MSANDKQYISYNNVHQLCQVSAERIKNFKPDLIIAIGGGGFIPARILRTFLKEPGVPTIRIFAIILSLYEDLNSVGSEVEEVGVKVSRTQWIDYEQCKLDLVGKNVLIVDEVDDTRTTLHYALSELEKDAAEQAKAKGIDTEKSPEMKTNFGIFVLHDKQKPKKADLPAEMLNDKNRYFAAKTVPDKWYAYPWESTDIVFHTRMAIEQGNDIFIPEQEHKQ
+
+>YEL027W CUP5 SGDID:S000000753, Chr V from 100769-101251, Verified ORF, "Proteolipid subunit of the vacuolar H(+)-ATPase V0 sector (subunit c; dicyclohexylcarbodiimide binding subunit); required for vacuolar acidification and important for copper and iron metal ion homeostasis"
+MTELCPVYAPFFGAIGCASAIIFTSLGAAYGTAKSGVGICATCVLRPDLLFKNIVPVIMAGIIAIYGLVVSVLVCYSLGQKQALYTGFIQLGAGLSVGLSGLAAGFAIGIVGDAGVRGSSQQPRLFVGMILILIFAEVLGLYGLIVALLLNSRATQDVVC
+
+>YER056C-A RPL34A SGDID:S000002135, Chr V from 270183-270147,269749-269421, reverse complement, Verified ORF, "Protein component of the large (60S) ribosomal subunit, nearly identical to Rpl34Bp and has similarity to rat L34 ribosomal protein"
+MAQRVTFRRRNPYNTRSNKIKVVKTPGGILRAQHVKKLATRPKCGDCGSALQGISTLRPRQYATVSKTHKTVSRAYGGSRCANCVKERIIRAFLIEEQKIVKKVVKEQTEAAKKSEKKAKK
+
+>YFR053C HXK1 SGDID:S000001949, Chr VI from 255036-253579, reverse complement, Verified ORF, "Hexokinase isoenzyme 1, a cytosolic protein that catalyzes phosphorylation of glucose during glucose metabolism; expression is highest during growth on non-glucose carbon sources; glucose-induced repression involves the hexokinase Hxk2p"
+MVHLGPKKPQARKGSMADVPKELMDEIHQLEDMFTVDSETLRKVVKHFIDELNKGLTKKGGNIPMIPGWVMEFPTGKESGNYLAIDLGGTNLRVVLVKLSGNHTFDTTQSKYKLPHDMRTTKHQEELWSFIADSLKDFMVEQELLNTKDTLPLGFTFSYPASQNKINEGILQRWTKGFDIPNVEGHDVVPLLQNEISKRELPIEIVALINDTVGTLIASYYTDPETKMGVIFGTGVNGAFYDVVSDIEKLEGKLADDIPSNSPMAINCEYGSFDNEHLVLPRTKYDVAVDEQSPRPGQQAFEKMTSGYYLGELLRLVLLELNEKGLMLKDQDLSKLKQPYIMDTSYPARIEDDPFENLEDTDDIFQKDFGVKTTLPERKLIRRLCELIGTRAARLAVCGIAAICQKRGYKTGHIAADGSVYNKYPGFKEAAAKGLRDIYGWTGDASKDPITIVPAEDGSGAGAAVIAALSEKRIAEGKSLGIIGA
+
+>YGL008C PMA1 SGDID:S000002976, Chr VII from 482671-479915, reverse complement, Verified ORF, "Plasma membrane H+-ATPase, pumps protons out of the cell; major regulator of cytoplasmic pH and plasma membrane potential; part of the P2 subgroup of cation-transporting ATPases"
+MTDTSSSSSSSSASSVSAHQPTQEKPAKTYDDAASESSDDDDIDALIEELQSNHGVDDEDSDNDGPVAAGEARPVPEEYLQTDPSYGLTSDEVLKRRKKYGLNQMADEKESLVVKFVMFFVGPIQFVMEAAAILAAGLSDWVDFGVICGLLMLNAGVGFVQEFQAGSIVDELKKTLANTAVVIRDGQLVEIPANEVVPGDILQLEDGTVIPTDGRIVTEDCFLQIDQSAITGESLAVDKHYGDQTFSSSTVKRGEGFMVVTATGDNTFVGRAAALVNKAAGGQGHFTEVLNGIGIILLVLVIATLLLVWTACFYRTNGIVRILRYTLGITIIGVPVGLPAVVTTTMAVGAAYLAKKQAIVQKLSAIESLAGVEILCSDKTGTLTKNKLSLHEPYTVEGVSPDDLMLTACLAASRKKKGLDAIDKAFLKSLKQYPKAKDALTKYKVLEFHPFDPVSKKVTAVVESPEGERIVCVKGAPLFVLKTVEEDHPIPE [...]
+>YGL009C LEU1 SGDID:S000002977, Chr VII from 478657-476318, reverse complement, Verified ORF, "Isopropylmalate isomerase, catalyzes the second step in the leucine biosynthesis pathway"
+MVYTPSKGPRTLYDKVFDAHVVHQDENGSFLLYIDRHLVHEVTSPQAFEGLENAGRKVRRVDCTLATVDHNIPTESRKNFKSLDTFIKQTDSRLQVKTLENNVKQFGVPYFGMSDARQGIVHTIGPEEGFTLPGTTVVCGDSHTSTHGAFGSLAFGIGTSEVEHVLATQTIIQAKSKNMRITVNGKLSPGITSKDLILYIIGLIGTAGGTGCVIEFAGEAIEALSMEARMSMCNMAIEAGARAGMIKPDETTFQYTKGRPLAPKGAEWEKAVAYWKTLKTDEGAKFDHEINIEAVDVIPTITWGTSPQDALPITGSVPDPKNVTDPIKKSGMERALAYMGLEPNTPLKSIKVDKVFIGSCTNGRIEDLRSAAAVVRGQKLASNIKLAMVVPGSGLVKKQAEAEGLDKIFQEAGFEWREAGCSICLGMNPDILDAYERCASTSNRNFEGRQGALSRTHLMSPAMAAAAGIAGHFVDIREFEYKDQDQSSPKVE [...]
+
+>YGL022W STT3 SGDID:S000002990, Chr VII from 452409-454565, Verified ORF, "Subunit of the oligosaccharyltransferase complex of the ER lumen, which catalyzes asparagine-linked glycosylation of newly synthesized proteins; forms a subcomplex with Ost3p and Ost4p and is directly involved in catalysis"
+MGSDRSCVLSVFQTILKLVIFVAIFGAAISSRLFAVIKFESIIHEFDPWFNYRATKYLVNNSFYKFLNWFDDRTWYPLGRVTGGTLYPGLMTTSAFIWHALRNWLGLPIDIRNVCVLFAPLFSGVTAWATYEFTKEIKDASAGLLAAGFIAIVPGYISRSVAGSYDNEAIAITLLMVTFMFWIKAQKTGSIMHATCAALFYFYMVSAWGGYVFITNLIPLHVFLLILMGRYSSKLYSAYTTWYAIGTVASMQIPFVGFLPIRSNDHMAALGVFGLIQIVAFGDFVKGQISTAKFKVIMMVSLFLILVLGVVGLSALTYMGLIAPWTGRFYSLWDTNYAKIHIPIIASVSEHQPVSWPAFFFDTHFLIWLFPAGVFLLFLDLKDEHVFVIAYSVLCSYFAGVMVRLMLTLTPVICVSAAVALSKIFDIYLDFKTSDRKYAIKPAALLAKLIVSGSFIFYLYLFVFHSTWVTRTAYSSPSVVLPSQTPDGKLAL [...]
+
+>YGL026C TRP5 SGDID:S000002994, Chr VII from 448540-446417, reverse complement, Verified ORF, "Tryptophan synthase involved in tryptophan biosynthesis, regulated by the general control system of amino acid biosynthesis"
+MSEQLRQTFANAKKENRNALVTFMTAGYPTVKDTVPILKGFQDGGVDIIELGMPFSDPIADGPTIQLSNTVALQNGVTLPQTLEMVSQARNEGVTVPIILMGYYNPILNYGEERFIQDAAKAGANGFIIVDLPPEEALKVRNYINDNGLSLIPLVAPSTTDERLELLSHIADSFVYVVSRMGTTGVQSSVASDLDELISRVRKYTKDTPLAVGFGVSTREHFQSVGSVADGVVIGSKIVTLCGDAPEGKRYDVAKEYVQGILNGAKHKVLSKDEFFAFQKESLKSANVKKEILDEFDENHKHPIRFGDFGGQYVPEALHACLRELEKGFDEAVADPTFWEDFKSLYSYIGRPSSLHKAERLTEHCQGAQIWLKREDLNHTGSHKINNALAQVLLAKRLGKKNVIAETGAGQHGVATATACAKFGLTCTVFMGAEDVRRQALNVFRMRILGAKVIAVTNGTKTLRDATSEAFRFWVTNLKTTYYVVGSAIGPH [...]
+
+>YGL135W RPL1B SGDID:S000003103, Chr VII from 254646-255299, Verified ORF, "N-terminally acetylated protein component of the large (60S) ribosomal subunit, nearly identical to Rpl1Ap and has similarity to E. coli L1 and rat L10a ribosomal proteins; rpl1a rpl1b double null mutation is lethal"
+MSKITSSQVREHVKELLKYSNETKKRNFLETVELQVGLKNYDPQRDKRFSGSLKLPNCPRPNMSICIFGDAFDVDRAKSCGVDAMSVDDLKKLNKNKKLIKKLSKKYNAFIASEVLIKQVPRLLGPQLSKAGKFPTPVSHNDDLYGKVTDVRSTIKFQLKKVLCLAVAVGNVEMEEDVLVNQILMSVNFFVSLLKKNWQNVGSLVVKSSMGPAFRLY
+
+>YGL245W GUS1 SGDID:S000003214, Chr VII from 39023-41149, Verified ORF, "Glutamyl-tRNA synthetase (GluRS), forms a complex with methionyl-tRNA synthetase (Mes1p) and Arc1p; complex formation increases the catalytic efficiency of both tRNA synthetases and ensures their correct localization to the cytoplasm"
+MPSTLTINGKAPIVAYAELIAARIVNALAPNSIAIKLVDDKKAPAAKLDDATEDVFNKITSKFAAIFDNGDKEQVAKWVNLAQKELVIKNFAKLSQSLETLDSQLNLRTFILGGLKYSAADVACWGALRSNGMCGSIIKNKVDVNVSRWYTLLEMDPIFGEAHDFLSKSLLELKKSANVGKKKETHKANFEIDLPDAKMGEVVTRFPPEPSGYLHIGHAKAALLNQYFAQAYKGKLIIRFDDTNPSKEKEEFQDSILEDLDLLGIKGDRITYSSDYFQEMYDYCVQMIKDGKAYCDDTPTEKMREERMDGVASARRDRSVEENLRIFTEEMKNGTEEGLKNCVRAKIDYKALNKTLRDPVIYRCNLTPHHRTGSTWKIYPTYDFCVPIVDAIEGVTHALRTIEYRDRNAQYDWMLQALRLRKVHIWDFARINFVRTLLSKRKLQWMVDKDLVGNWDDPRFPTVRGVRRRGMTVEGLRNFVLSQGPSRNVINL [...]
+
+>YGR086C PIL1 SGDID:S000003318, Chr VII from 650621-649602, reverse complement, Verified ORF, "Primary component of eisosomes, which are large immobile patch structures at the cell cortex associated with endocytosis, along with Lsp1p and Sur7p; null mutants show activation of Pkc1p/Ypk1p stress resistance pathways"
+MHRTYSLRNSRAPTASQLQNPPPPPSTTKGRFFGKGGLAYSFRRSAAGAFGPELSRKLSQLVKIEKNVLRSMELTANERRDAAKQLSIWGLENDDDVSDITDKLGVLIYEVSELDDQFIDRYDQYRLTLKSIRDIEGSVQPSRDRKDKITDKIAYLKYKDPQSPKIEVLEQELVRAEAESLVAEAQLSNITRSKLRAAFNYQFDSIIEHSEKIALIAGYGKALLELLDDSPVTPGETRPAYDGYEASKQIIIDAESALNEWTLDSAQVKPTLSFKQDYEDFEPEEGEEEEEEDGQGRWSEDEQEDGQIEEPEQEEEGAVEEHEQVGHQQSESLPQQTTA
+
+>YGR157W CHO2 SGDID:S000003389, Chr VII from 802445-805054, Verified ORF, "Phosphatidylethanolamine methyltransferase (PEMT), catalyzes the first step in the conversion of phosphatidylethanolamine to phosphatidylcholine during the methylation pathway of phosphatidylcholine biosynthesis"
+MSSCKTTLSEMVGSVTKDRGTINVEARTRSSNVTFKPPVTHDMVRSLFDPTLKKSLLEKCIALAIISNFFICYWVFQRFGLQFTKYFFLVQYLFWRIAYNLGIGLVLHYQSHYETLTNCAKTHAIFSKIPQNKDANSNFSTNSNSFSEKFWNFIRKFCQYEIRSKMPKEYDLFAYPEEINVWLIFRQFVDLILMQDFVTYIIYVYLSIPYSWVQIFNWRSLLGVILILFNIWVKLDAHRVVKDYAWYWGDFFFLEESELIFDGVFNISPHPMYSIGYLGYYGLSLICNDYKVLLVSVFGHYSQFLFLKYVENPHIERTYGDGTDSDSQMNSRIDDLISKENYDYSRPLINMGLSFNNFNKLRFTDYFTIGTVAALMLGTIMNARFINLNYLFITVFVTKLVSWLFISTILYKQSQSKWFTRLFLENGYTQVYSYEQWQFIYNYYLVLTYTLMIIHTGLQIWSNFSNINNSQLIFGLILVALQTWCDKETRLA [...]
+
+>YGR192C TDH3 SGDID:S000003424, Chr VII from 883815-882817, reverse complement, Verified ORF, "Glyceraldehyde-3-phosphate dehydrogenase, isozyme 3, involved in glycolysis and gluconeogenesis; tetramer that catalyzes the reaction of glyceraldehyde-3-phosphate to 1,3 bis-phosphoglycerate; detected in the cytoplasm and cell-wall "
+MVRVAINGFGRIGRLVMRIALSRPNVEVVALNDPFITNDYAAYMFKYDSTHGRYAGEVSHDDKHIIVDGKKIATYQERDPANLPWGSSNVDIAIDSTGVFKELDTAQKHIDAGAKKVVITAPSSTAPMFVMGVNEEKYTSDLKIVSNASCTTNCLAPLAKVINDAFGIEEGLMTTVHSLTATQKTVDGPSHKDWRGGRTASGNIIPSSTGAAKAVGKVLPELQGKLTGMAFRVPTVDVSVVDLTVKLNKETTYDEIKKVVKAAAEGKLKGVLGYTEDAVVSSDFLGDSHSSIFDASAGIQLSPKFVKLVSWYDNEYGYSTRVVDLVEHVAKA
+
+>YHR021C RPS27B SGDID:S000001063, Chr VIII from 148662-148660,148109-147864, reverse complement, Verified ORF, "Protein component of the small (40S) ribosomal subunit; nearly identical to Rps27Ap and has similarity to rat S27 ribosomal protein"
+MVLVQDLLHPTAASEARKHKLKTLVQGPRSYFLDVKCPGCLNITTVFSHAQTAVTCESCSTVLCTPTGGKAKLSEGTSFRRK
+
+>YHR183W GND1 SGDID:S000001226, Chr VIII from 470960-472429, Verified ORF, "6-phosphogluconate dehydrogenase (decarboxylating), catalyzes an NADPH regenerating reaction in the pentose phosphate pathway; required for growth on D-glucono-delta-lactone and adaptation to oxidative stress"
+MSADFGLIGLAVMGQNLILNAADHGFTVCAYNRTQSKVDHFLANEAKGKSIIGATSIEDFISKLKRPRKVMLLVKAGAPVDALINQIVPLLEKGDIIIDGGNSHFPDSNRRYEELKKKGILFVGSGVSGGEEGARYGPSLMPGGSEEAWPHIKNIFQSISAKSDGEPCCEWVGPAGAGHYVKMVHNGIEYGDMQLICEAYDIMKRLGGFTDKEISDVFAKWNNGVLDSFLVEITRDILKFDDVDGKPLVEKIMDTAGQKGTGKWTAINALDLGMPVTLIGEAVFARCLSALKNERIRASKVLPGPEVPKDAVKDREQFVDDLEQALYASKIISYAQGFMLIREAAATYGWKLNNPAIALMWRGGCIIRSVFLGQITKAYREEPDLENLLFNKFFADAVTKAQSGWRKSIALATTYGIPTPAFSTALSFYDGYRSERLPANLLQAQRDYFGAHTFRVLPECASDNLPVDKDIHINWTGHGGNVSSSTYQA
+
+>YIL133C RPL16A SGDID:S000001395, Chr IX from 99416-99386,99095-98527, reverse complement, Verified ORF, "N-terminally acetylated protein component of the large (60S) ribosomal subunit, binds to 5.8 S rRNA; has similarity to Rpl16Bp, E. coli L13 and rat L13a ribosomal proteins; transcriptionally regulated by Rap1p"
+MSVEPVVVIDGKGHLVGRLASVVAKQLLNGQKIVVVRAEELNISGEFFRNKLKYHDFLRKATAFNKTRGPFHFRAPSRIFYKALRGMVSHKTARGKAALERLKVFEGIPPPYDKKKRVVVPQALRVLRLKPGRKYTTLGKLSTSVGWKYEDVVAKLEAKRKVSSAEYYAKKRAFTKKVASANATAAESDVAKQLAALGY
+
+>YJR069C HAM1 SGDID:S000003830, Chr X from 569392-568799, reverse complement, Verified ORF, "Protein of unknown function that is involved in DNA repair; mutant is sensitive to the base analog, 6-N-hydroxylaminopurine, while gene disruption does not increase the rate of spontaneous mutagenesis"
+MSNNEIVFVTGNANKLKEVQSILTQEVDNNNKTIHLINEALDLEELQDTDLNAIALAKGKQAVAALGKGKPVFVEDTALRFDEFNGLPGAYIKWFLKSMGLEKIVKMLEPFENKNAEAVTTICFADSRGEYHFFQGITRGKIVPSRGPTTFGWDSIFEPFDSHGLTYAEMSKDAKNAISHRGKAFAQFKEYLYQNDF
+
+>YKL127W PGM1 SGDID:S000001610, Chr XI from 203185-204897, Verified ORF, "Phosphoglucomutase, minor isoform; catalyzes the conversion from glucose-1-phosphate to glucose-6-phosphate, which is a key step in hexose metabolism"
+MSLLIDSVPTVAYKDQKPGTSGLRKKTKVFMDEPHYTENFIQATMQSIPNGSEGTTLVVGGDGRFYNDVIMNKIAAVGAANGVRKLVIGQGGLLSTPAASHIIRTYEEKCTGGGIILTASHNPGGPENDLGIKYNLPNGGPAPESVTNAIWEASKKLTHYKIIKNFPKLNLNKLGKNQKYGPLLVDIIDPAKAYVQFLKEIFDFDLIKSFLAKQRKDKGWKLLFDSLNGITGPYGKAIFVDEFGLPAEEVLQNWHPLPDFGGLHPDPNLTYARTLVDRVDREKIAFGAASDGDGDRNMIYGYGPAFVSPGDSVAIIAEYAPEIPYFAKQGIYGLARSFPTSSAIDRVAAKKGLRCYEVPTGWKFFCALFDAKKLSICGEESFGTGSNHIREKDGLWAIIAWLNILAIYHRRNPEKEASIKTIQDEFWNEYGRTFFTRYDYEHIECEQAEKVVALLSEFVSRPNVCGSHFPADESLTVIDCGDFSYRDLDGSI [...]
+
+>YKL145W RPT1 SGDID:S000001628, Chr XI from 174218-175621, Verified ORF, "One of six ATPases of the 19S regulatory particle of the 26S proteasome involved in the degradation of ubiquitinated substrates; required for optimal CDC20 transcription; interacts with Rpn12p and the E3 ubiquitin-protein ligase Ubr1p"
+MPPKEDWEKYKAPLEDDDKKPDDDKIVPLTEGDIQVLKSYGAAPYAAKLKQTENDLKDIEARIKEKAGVKESDTGLAPSHLWDIMGDRQRLGEEHPLQVARCTKIIKGNGESDETTTDNNNSGNSNSNSNQQSTDADEDDEDAKYVINLKQIAKFVVGLGERVSPTDIEEGMRVGVDRSKYNIELPLPPRIDPSVTMMTVEEKPDVTYSDVGGCKDQIEKLREVVELPLLSPERFATLGIDPPKGILLYGPPGTGKTLCARAVANRTDATFIRVIGSELVQKYVGEGARMVRELFEMARTKKACIIFFDEIDAVGGARFDDGAGGDNEVQRTMLELITQLDGFDPRGNIKVMFATNRPNTLDPALLRPGRIDRKVEFSLPDLEGRANIFRIHSKSMSVERGIRWELISRLCPNSTGAELRSVCTEAGMFAIRARRKVATEKDFLKAVDKVISGYKKFSSTSRYMQYN
+>YKL145W-A YKL145W-A SGDID:S000028841, Chr XI from 174963-175055, Dubious ORF, "Dubious open reading frame, unlikely to encode a protein; completely overlaps the verified essential gene RPT1; identified by expression profiling and mass spectrometry"
+MGHLVLVRHYVLVLLLIELMQLLLGSLGLS
+
+>YLL024C SSA2 SGDID:S000003947, Chr XII from 97484-95565, reverse complement, Verified ORF, "ATP binding protein involved in protein folding and vacuolar import of proteins; member of heat shock protein 70 (HSP70) family; associated with the chaperonin-containing T-complex; present in the cytoplasm, vacuolar membrane and cell wall"
+MSKAVGIDLGTTYSCVAHFSNDRVDIIANDQGNRTTPSFVGFTDTERLIGDAAKNQAAMNPANTVFDAKRLIGRNFNDPEVQGDMKHFPFKLIDVDGKPQIQVEFKGETKNFTPEQISSMVLGKMKETAESYLGAKVNDAVVTVPAYFNDSQRQATKDAGTIAGLNVLRIINEPTAAAIAYGLDKKGKEEHVLIFDLGGGTFDVSLLSIEDGIFEVKATAGDTHLGGEDFDNRLVNHFIQEFKRKNKKDLSTNQRALRRLRTACERAKRTLSSSAQTSVEIDSLFEGIDFYTSITRARFEELCADLFRSTLDPVEKVLRDAKLDKSQVDEIVLVGGSTRIPKVQKLVTDYFNGKEPNRSINPDEAVAYGAAVQAAILTGDESSKTQDLLLLDVAPLSLGIETAGGVMTKLIPRNSTIPTKKSEVFSTYADNQPGVLIQVFEGERAKTKDNNLLGKFELSGIPPAPRGVPQIEVTFDVDSNGILNVSAVEKGT [...]
+
+>YLR043C TRX1 SGDID:S000004033, Chr XII from 232014-231703, reverse complement, Verified ORF, "Cytoplasmic thioredoxin isoenzyme of the thioredoxin system which protects cells against both oxidative and reductive stress, forms LMA1 complex with Pbi2p, acts as a cofactor for Tsa1p, required for ER-Golgi transport and vacuole inheritance"
+MVTQFKTASEFDSAIAQDKLVVVDFYATWCGPCKMIAPMIEKFSEQYPQADFYKLDVDELGDVAQKNEVSAMPTLLLFKNGKEVAKVVGANPAAIKQAIAANA
+
+>YLR058C SHM2 SGDID:S000004048, Chr XII from 259402-257993, reverse complement, Verified ORF, "Cytosolic serine hydroxymethyltransferase, involved in one-carbon metabolism"
+MPYTLSDAHHKLITSHLVDTDPEVDSIIKDEIERQKHSIDLIASENFTSTSVFDALGTPLSNKYSEGYPGARYYGGNEHIDRMEILCQQRALKAFHVTPDKWGVNVQTLSGSPANLQVYQAIMKPHERLMGLYLPDGGHLSHGYATENRKISAVSTYFESFPYRVNPETGIIDYDTLEKNAILYRPKVLVAGTSAYCRLIDYKRMREIADKCGAYLMVDMAHISGLIAAGVIPSPFEYADIVTTTTHKSLRGPRGAMIFFRRGVRSINPKTGKEVLYDLENPINFSVFPGHQGGPHNHTIAALATALKQAATPEFKEYQTQVLKNAKALESEFKNLGYRLVSNGTDSHMVLVSLREKGVDGARVEYICEKINIALNKNSIPGDKSALVPGGVRIGAPAMTTRGMGEEDFHRIVQYINKAVEFAQQVQQSLPKDACRLKDFKAKVDEGSDVLNTWKKEIYDWAGEYPLAV
+
+>YLR185W RPL37A SGDID:S000004175, Chr XII from 522665-522671,523031-523290, Verified ORF, "Protein component of the large (60S) ribosomal subunit, has similarity to Rpl37Bp and to rat L37 ribosomal protein"
+MGKGTPSFGKRHNKSHTLCNRCGRRSFHVQKKTCSSCGYPAAKTRSYNWGAKAKRRHTTGTGRMRYLKHVSRRFKNGFQTGSASKASA
+
+>YLR249W YEF3 SGDID:S000004239, Chr XII from 636782-639916, Verified ORF, "Translational elongation factor, stimulates the binding of aminoacyl-tRNA (AA-tRNA) to ribosomes by releasing EF-1 alpha from the ribosomal complex; contains two ABC cassettes; binds and hydrolyses ATP"
+MSDSQQSIKVLEELFQKLSVATADNRHEIASEVASFLNGNIIEHDVPEHFFGELAKGIKDKKTAANAMQAVAHIANQSNLSPSVEPYIVQLVPAICTNAGNKDKEIQSVASETLISIVNAVNPVAIKALLPHLTNAIVETNKWQEKIAILAAISAMVDAAKDQVALRMPELIPVLSETMWDTKKEVKAAATAAMTKATETVDNKDIERFIPSLIQCIADPTEVPETVHLLGATTFVAEVTPATLSIMVPLLSRGLNERETGIKRKSAVIIDNMCKLVEDPQVIAPFLGKLLPGLKSNFATIADPEAREVTLRALKTLRRVGNVGEDDAIPEVSHAGDVSTTLQVVNELLKDETVAPRFKIVVEYIAAIGADLIDERIIDQQAWFTHITPYMTIFLHEKKAKDILDEFRKRAVDNIPVGPNFDDEEDEGEDLCNCEFSLAYGAKILLNKTQLRLKRARRYGICGPNGCGKSTLMRAIANGQVDGFPTQEECRT [...]
+
+>YLR298C YHC1 SGDID:S000004289, Chr XII from 725418-724723, reverse complement, Verified ORF, "Component of the U1 snRNP complex required for pre-mRNA splicing; putative ortholog of human U1C protein, which is involved in formation of a complex between U1 snRNP and the pre-mRNA 5' splice site"
+MTRYYCEYCHSYLTHDTLSVRKSHLVGKNHLRITADYYRNKARDIINKHNHKRRHIGKRGRKERENSSQNETLKVTCLSNKEKRHIMHVKKMNQKELAQTSIDTLKLLYDGSPGYSKVFVDANRFDIGDLVKASKLPQRANEKSAHHSFKQTSRSRDETCESNPFPRLNNPKKLEPPKILSQWSNTIPKTSIFYSVDILQTTIKESKKRMHSDGIRKPSSANGYKRRRYGN
+
+>YLR340W RPP0 SGDID:S000004332, Chr XII from 805887-806825, Verified ORF, "Conserved ribosomal protein P0 similar to rat P0, human P0, and E. coli L10e; shown to be phosphorylated on serine 302"
+MGGIREKKAEYFAKLREYLEEYKSLFVVGVDNVSSQQMHEVRKELRGRAVVLMGKNTMVRRAIRGFLSDLPDFEKLLPFVKGNVGFVFTNEPLTEIKNVIVSNRVAAPARAGAVAPEDIWVRAVNTGMEPGKTSFFQALGVPTKIARGTIEIVSDVKVVDAGNKVGQSEASLLNLLNISPFTFGLTVVQVYDNGQVFPSSILDITDEELVSHFVSAVSTIASISLAIGYPTLPSVGHTLINNYKDLLAVAIAASYHYPEIEDLVDRIENPEKYAAAAPAATSAASGDAAPAEEAAAEEEEESDDDMGFGLFD
+
+>YLR371W ROM2 SGDID:S000004363, Chr XII from 862713-866783, Verified ORF, "GDP/GTP exchange protein (GEP) for Rho1p and Rho2p; mutations are synthetically lethal with mutations in rom1, which also encodes a GEP"
+MSETNVDSLGDRNDIYSQIFGVERRPDSFATFDSDSHGDISSQLLPNRIENIQNLNVLLSEDIANDIIIAKQRRRSGVEAAIDDSDIPNNEMKGKSSNYILSQQTNIKEVPDTQSLSSADNTPVSSPKKARDATSSHPIVHAKSMSHIYSTSNSASRQAKHYNDHPLPPMSPRNEVYQKNKSTTAFVPKRKPSLPQLALAGLKKQSSFSTGSASTTPTQARKSPLQGFGFFSRPSSKDLHEQHQHHQHIQHNNINNHNNNNTNNNGAHYQVGSSNSNYPQHSHSISSRSMSLNSSTLKNIASSFQSKTSNSRKATQKYDITSNPFSDPHHHHHHHHSSNSHSSLNNVHGSGNSSSVMGSSSNIGLGLKTRVSSTSLALKRYTSVSGTSLSSPRRSSMTPLSASRPVMSASSKKPQVYPALLSRVATKFKSSIQLGEHKKDGLVYRDAFTGQQAVDVICAIIRTSDRNLALLFGRSLDAQKLFHDVVYEHRLR [...]
+
+>YML092C PRE8 SGDID:S000004557, Chr XIII from 86739-85987, reverse complement, Verified ORF, "20S proteasome beta-type subunit"
+MTDRYSFSLTTFSPSGKLGQIDYALTAVKQGVTSLGIKATNGVVIATEKKSSSPLAMSETLSKVSLLTPDIGAVYSGMGPDYRVLVDKSRKVAHTSYKRIYGEYPPTKLLVSEVAKIMQEATQSGGVRPFGVSLLIAGHDEFNGFSLYQVDPSGSYFPWKATAIGKGSVAAKTFLEKRWNDELELEDAIHIALLTLKESVEGEFNGDTIELAIIGDENPDLLGYTGIPTDKGPRFRKLTSQEINDRLEAL
+
+>YMR073C YMR073C SGDID:S000004677, Chr XIII from 412872-412267, reverse complement, Uncharacterized ORF, "Putative protein of unknown function; proposed to be involved in resistance to carboplatin and cisplatin; shares similarity to a human cytochrome oxidoreductase"
+MSSDGMNRDVSNSKPNVRFAAPQRLSVAHPAISSPLHMPMSKSSRKPLVRTKIRLDPGHSALDWHSLTSNPANYYTKFVSLQLIQDLLDDPVFQKDNFKFSPSQLKNQLLVQKIPLYKIMPPLRINRKIVKKHCKGEDELWCVINGKVYDISSYLKFHPGGTDILIKHRNSDDLITYFNKYHQWVNYEKLLQVCFIGVVCE
+
+>YMR145C NDE1 SGDID:S000004753, Chr XIII from 556474-554792, reverse complement, Verified ORF, "Mitochondrial external NADH dehydrogenase, catalyzes the oxidation of cytosolic NADH; Nde1p and Nde2p are involved in providing the cytosolic NADH to the mitochondrial respiratory chain"
+MIRQSLMKTVWANSSRFSLQSKSGLVKYAKNRSFHAARNLLEDKKVILQKVAPTTGVVAKQSFFKRTGKFTLKALLYSALAGTAYVSYSLYREANPSTQVPQSDTFPNGSKRKTLVILGSGWGSVSLLKNLDTTLYNVVVVSPRNYFLFTPLLPSTPVGTIELKSIVEPVRTIARRSHGEVHYYEAEAYDVDPENKTIKVKSSAKNNDYDLDLKYDYLVVGVGAQPNTFGTPGVYEYSSFLKEISDAQEIRLKIMSSIEKAASLSPKDPERARLLSFVVVGGGPTGVEFAAELRDYVDQDLRKWMPELSKEIKVTLVEALPNILNMFDKYLVDYAQDLFKEEKIDLRLKTMVKKVDATTITAKTGDGDIENIPYGVLVWATGNAPREVSKNLMTKLEEQDSRRGLLIDNKLQLLGAKGSIFAIGDCTFHPGLFPTAQVAHQEGEYLAQYFKKAYKIDQLNWKMTHAKDDSEVARLKNQIVKTQSQIEDFKYN [...]
+
+>YMR235C RNA1 SGDID:S000004848, Chr XIII from 742734-741511, reverse complement, Verified ORF, "GTPase activating protein (GAP) for Gsp1p, involved in nuclear transport"
+MATLHFVPQHEEEQVYSISGKALKLTTSDDIKPYLEELAALKTCTKLDLSGNTIGTEASEALAKCIAENTQVRESLVEVNFADLYTSRLVDEVVDSLKFLLPVLLKCPHLEIVNLSDNAFGLRTIELLEDYIAHAVNIKHLILSNNGMGPFAGERIGKALFHLAQNKKAASKPFLETFICGRNRLENGSAVYLALGLKSHSEGLKVVKLYQNGIRPKGVATLIHYGLQYLKNLEILDLQDNTFTKHASLILAKALPTWKDSLFELNLNDCLLKTAGSDEVFKVFTEVKFPNLHVLKFEYNEMAQETIEVSFLPAMEKGNLPELEKLEINGNRLDEDSDALDLLQSKFDDLEVDDFEEVDSEDEEGEDEEDEDEDEKLEEIETERLEKELLEVQVDDLAERLAETEIK
+
+>YMR242C RPL20A SGDID:S000004855, Chr XIII from 754196-754178,753741-753224, reverse complement, Verified ORF, "Protein component of the large (60S) ribosomal subunit, nearly identical to Rpl20Bp and has similarity to rat L18a ribosomal protein"
+MPQKWKMAHFKEYQVIGRRLPTESVPEPKLFRMRIFASNEVIAKSRYWYFLQKLHKVKKASGEIVSINQINEAHPTKVKNFGVWVRYDSRSGTHNMYKEIRDVSRVAAVETLYQDMAARHRARFRSIHILKVAEIEKTADVKRQYVKQFLTKDLKFPLPHRVQKSTKTFSYKRPSTFY
+
+>YMR303C ADH2 SGDID:S000004918, Chr XIII from 874336-873290, reverse complement, Verified ORF, "Glucose-repressible alcohol dehydrogenase II, catalyzes the conversion of ethanol to acetaldehyde; involved in the production of certain carboxylate esters; regulated by ADR1"
+MSIPETQKAIIFYESNGKLEHKDIPVPKPKPNELLINVKYSGVCHTDLHAWHGDWPLPTKLPLVGGHEGAGVVVGMGENVKGWKIGDYAGIKWLNGSCMACEYCELGNESNCPHADLSGYTHDGSFQEYATADAVQAAHIPQGTDLAEVAPILCAGITVYKALKSANLRAGHWAAISGAAGGLGSLAVQYAKAMGYRVLGIDGGPGKEELFTSLGGEVFIDFTKEKDIVSAVVKATNGGAHGIINVSVSEAAIEASTRYCRANGTVVLVGLPAGAKCSSDVFNHVVKSISIVGSYVGNRADTREALDFFARGLVKSPIKVVGLSSLPEIYEKMEKGQIAGRYVVDTSK
+
+>YMR309C NIP1 SGDID:S000004926, Chr XIII from 895425-892987, reverse complement, Verified ORF, "Subunit of the eukaryotic translation initiation factor 3 (eIF3), involved in the assembly of preinitiation complex and start codon selection"
+MSRFFSSNYEYDVASSSSEEDLLSSSEEDLLSSSSSESELDQESDDSFFNESESESEADVDSDDSDAKPYGPDWFKKSEFRKQGGGSNKFLKSSNYDSSDEESDEEDGKKVVKSAKEKLLDEMQDVYNKISQAENSDDWLTISNEFDLISRLLVRAQQQNWGTPNIFIKVVAQVEDAVNNTQQADLKNKAVARAYNTTKQRVKKVSRENEDSMAKFRNDPESFDKEPTADLDISANGFTISSSQGNDQAVQEDFFTRLQTIIDSRGKKTVNQQSLISTLEELLTVAEKPYEFIMAYLTLIPSRFDASANLSYQPIDQWKSSFNDISKLLSILDQTIDTYQVNEFADPIDFIEDEPKEDSDGVKRILGSIFSFVERLDDEFMKSLLNIDPHSSDYLIRLRDEQSIYNLILRTQLYFEATLKDEHDLERALTRPFVKRLDHIYYKSENLIKIMETAAWNIIPAQFKSKFTSKDQLDSADYVDNLIDGLSTILSK [...]
+
+>YNL166C BNI5 SGDID:S000005110, Chr XIV from 323567-322221, reverse complement, Verified ORF, "Protein involved in organization of septins at the mother-bud neck, may interact directly with the Cdc11p septin, localizes to bud neck in a septin-dependent manner"
+MGLDQDKIKKRLSQIEIDINQMNQMIDENLQLVEPAEDEAVEDNVKDTGVVDAVKVAETALFSGNDGADSNPGDSAQVEEHKTAQVHIPTENEANKSTDDPSQLSVTQPFIAKEQITHTAIAIGDSYNSFVANSAGNEKAKDSCTENKEDGTVNIDQNRGEADVEIIENNDDEWEDEKSDVEEGRVDKGTEENSEIESFKSPMPQNNTLGGENKLDAELVLDKFSSANKDLDIQPQTIVVGGDNEYNHESSRLADQTPHDDNSENCPNRSGGSTPLDSQTKIFIPKKNSKEDGTNINHFNSDGDGQKKMANFETRRPTNPFRVISVSSNSNSRNGSRKSSLNKYDSPVSSPITSASELGSIAKLEKRHDYLSMKCIKLQKEIDYLNKMNAQGSLSMEDGKRLHRAVVKLQEYLDKKTKEKYEVGVLLSRHLRKQIDRGENGQFWIGTK
+
+>YOR063W RPL3 SGDID:S000005589, Chr XV from 444688-445851, Verified ORF, "Protein component of the large (60S) ribosomal subunit, has similarity to E. coli L3 and rat L3 ribosomal proteins; involved in the replication and maintenance of killer double stranded RNA virus"
+MSHRKYEAPRHGHLGFLPRKRAASIRARVKAFPKDDRSKPVALTSFLGYKAGMTTIVRDLDRPGSKFHKREVVEAVTVVDTPPVVVVGVVGYVETPRGLRSLTTVWAEHLSDEVKRRFYKNWYKSKKKAFTKYSAKYAQDGAGIERELARIKKYASVVRVLVHTQIRKTPLAQKKAHLAEIQLNGGSISEKVDWAREHFEKTVAVDSVFEQNEMIDAIAVTKGHGFEGVTHRWGTKKLPRKTHRGLRKVACIGAWHPAHVMWSVARAGQRGYHSRTSINHKIYRVGKGDDEANGATSFDRTKKTITPMGGFVHYGEIKNDFIMVKGCIPGNRKRIVTLRKSLYTNTSRKALEEVSLKWIDTASKFGKGRFQTPAEKHAFMGTLKKDL
+
+>YOR136W IDH2 SGDID:S000005662, Chr XV from 580251-581360, Verified ORF, "Subunit of mitochondrial NAD(+)-dependent isocitrate dehydrogenase, which catalyzes the oxidation of isocitrate to alpha-ketoglutarate in the TCA cycle"
+MLRNTFFRNTSRRFLATVKQPSIGRYTGKPNPSTGKYTVSFIEGDGIGPEISKSVKKIFSAANVPIEWESCDVSPIFVNGLTTIPDPAVQSITKNLVALKGPLATPIGKGHRSLNLTLRKTFGLFANVRPAKSIEGFKTTYENVDLVLIRENTEGEYSGIEHIVCPGVVQSIKLITRDASERVIRYAFEYARAIGRPRVIVVHKSTIQRLADGLFVNVAKELSKEYPDLTLETELIDNSVLKVVTNPSAYTDAVSVCPNLYGDILSDLNSGLSAGSLGLTPSANIGHKISIFEAVHGSAPDIAGQDKANPTALLLSSVMMLNHMGLTNHADQIQNAVLSTIASGPENRTGDLAGTATTSSFTEAVIKRL
+
+>YOR168W GLN4 SGDID:S000005694, Chr XV from 649304-651733, Verified ORF, "Glutamine tRNA synthetase, monomeric class I tRNA synthetase that catalyzes the specific glutaminylation of tRNA(Glu); N-terminal domain proposed to be involved in enzyme-tRNA interactions"
+MSSVEELTQLFSQVGFEDKKVKEIVKNKKVSDSLYKLIKETPSDYQWNKSTRALVHNLASFVKGTDLPKSELIVNGIINGDLKTSLQVDAAFKYVKANGEASTKMGMNENSGVGIEITEDQVRNYVMQYIQENKERILTERYKLVPGIFADVKNLKELKWADPRSFKPIIDQEVLKLLGPKDERDLIKKKTKNNEKKKTNSAKKSSDNSASSGPKRTMFNEGFLGDLHKVGENPQAYPELMKEHLEVTGGKVRTRFPPEPNGYLHIGHSKAIMVNFGYAKYHNGTCYLRFDDTNPEKEAPEYFESIKRMVSWLGFKPWKITYSSDYFDELYRLAEVLIKNGKAYVCHCTAEEIKRGRGIKEDGTPGGERYACKHRDQSIEQNLQEFRDMRDGKYKPGEAILRMKQDLNSPSPQMWDLIAYRVLNAPHPRTGTKWRIYPTYDFTHCLVDSMENITHSLCTTEFYLSRESYEWLCDQVHVFRPAQREYGRLNIT [...]
+
+>YOR267C HRK1 SGDID:S000005793, Chr XV from 824866-822587, reverse complement, Verified ORF, "Protein kinase implicated in activation of the plasma membrane H(+)-ATPase Pma1p in response to glucose metabolism; plays a role in ion homeostasis"
+MPNLLSRNPFHGHHNDHHHDRENSSNNPPQLIRSSKSFLNFIGRKQSNDSLRSEKSTDSMKSTTTTTNYTTTNLNNNTHSHSNATSISTNNYNNNYETNHHHNISHGLHDYTSPASPKQTHSMAELKRFFRPSVNKKLSMSQLRSKKHSTHSPPPSKSTSTVNLNNHYRAQHPHGFTDHYAHTQSAIPPSTDSILSLSNNINIYHDDCILAQKYGKLGKLLGSGAGGSVKVLVRPTDGATFAVKEFRPRKPNESVKEYAKKCTAEFCIGSTLHHPNVIETVDVFSDSKQNKYYEVMEYCPIDFFAVVMTGKMSRGEINCCLKQLTEGVKYLHSMGLAHRDLKLDNCVMTSQGILKLIDFGSAVVFRYPFEDGVTMAHGIVGSDPYLAPEVITSTKSYDPQCVDIWSIGIIYCCMVLKRFPWKAPRDSDDNFRLYCMPDDIEHDYVESARHHEELLKERKEKRQRFLNHSDCSAINQQQPAHESNLKTVQNQV [...]
+
+>YPL106C SSE1 SGDID:S000006027, Chr XVI from 352272-350191, reverse complement, Verified ORF, "ATPase that is a component of the heat shock protein Hsp90 chaperone complex; binds unfolded proteins; member of the heat shock protein 70 (HSP70) family; localized to the cytoplasm"
+MSTPFGLDLGNNNSVLAVARNRGIDIVVNEVSNRSTPSVVGFGPKNRYLGETGKNKQTSNIKNTVANLKRIIGLDYHHPDFEQESKHFTSKLVELDDKKTGAEVRFAGEKHVFSATQLAAMFIDKVKDTVKQDTKANITDVCIAVPPWYTEEQRYNIADAARIAGLNPVRIVNDVTAAGVSYGIFKTDLPEGEEKPRIVAFVDIGHSSYTCSIMAFKKGQLKVLGTACDKHFGGRDFDLAITEHFADEFKTKYKIDIRENPKAYNRILTAAEKLKKVLSANTNAPFSVESVMNDVDVSSQLSREELEELVKPLLERVTEPVTKALAQAKLSAEEVDFVEIIGGTTRIPTLKQSISEAFGKPLSTTLNQDEAIAKGAAFICAIHSPTLRVRPFKFEDIHPYSVSYSWDKQVEDEDHMEVFPAGSSFPSTKLITLNRTGDFSMAASYTDITQLPPNTPEQIANWEITGVQLPEGQDSVPVKLKLRCDPSGLHTI [...]
+
+>YPL215W CBP3 SGDID:S000006136, Chr XVI from 147415-148422, Verified ORF, "Mitochondrial protein required for assembly of ubiquinol cytochrome-c reductase complex (cytochrome bc1 complex); interacts with Cbp4p and function is partially redundant with that of Cbp4p"
+MMSVNRFTSGRLPVFLRKSPFYYSRAYLHQTCVFKQNKETAQDSPELLAKSSHLNSKPLDVSNKAPVKTAQNKIPLAHSKYESSKYELPKWKEALGELVIRAFHLDMDRVRAGPVAGSYYYKICKEQGLQYEDEPLSETAKYFYEDLKLPRTFSQWFQITVLHEWILFVRMRAMPFKYGRNYQQKLVDRTFSDIELRLFEEMKVNSGRIADQYLKDFNTQLRGAIFAYDEGFATDDGTLATAVWRNLFGGRKNIDMVHLESVVRYIYSQLYVLSRLSDREFATGKFKFVPPGVKVEKLTPKQEEELKAKTIAKYEALDKDPKTLPSERSRLSYTN
+
+>YPL266W DIM1 SGDID:S000006187, Chr XVI from 39121-40077, Verified ORF, "Essential 18S rRNA dimethylase, responsible for conserved m6(2)Am6(2)A dimethylation in 3'-terminal loop of 18 S rRNA, part of 90S and 40S pre-particles in nucleolus, involved in pre-ribosomal RNA processing"
+MGKAAKKKYSGATSSKQVSAEKHLSSVFKFNTDLGQHILKNPLVAQGIVDKAQIRPSDVVLEVGPGTGNLTVRILEQAKNVVAVEMDPRMAAELTKRVRGTPVEKKLEIMLGDFMKTELPYFDICISNTPYQISSPLVFKLINQPRPPRVSILMFQREFALRLLARPGDSLYCRLSANVQMWANVTHIMKVGKNNFRPPPQVESSVVRLEIKNPRPQVDYNEWDGLLRIVFVRKNRTISAGFKSTTVMDILEKNYKTFLAMNNEMVDDTKGSMHDVVKEKIDTVLKETDLGDKRAGKCDQNDFLRLLYAFHQVGIHFS
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/example-files/target.sqt b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/example-files/target.sqt
new file mode 100644
index 0000000..3c4e472
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/example-files/target.sqt
@@ -0,0 +1,33 @@
+H	SQTGenerator Crux
+H	SQTGeneratorVersion 1.0
+H	Comment Crux was written by...
+H	Comment ref...
+H	StartTime	Tue Dec  2 15:22:50 2008
+H	EndTime                               
+H	Database	test_crux_index/test-binary-fasta
+H	DBSeqLength	?
+H	DBLocusCount	4
+H	PrecursorMasses	average
+H	FragmentMasses	mono
+H	Alg-PreMasTol	3.0
+H	Alg-FragMassTol	0.50
+H	Alg-XCorrMode	0
+H	Comment	preliminary algorithm sp
+H	Comment	final algorithm xcorr
+H	StaticMod	C=160.139
+H	Alg-DisplayTop	5
+H	EnzymeSpec	tryptic
+H	Line fields: S, scan number, scan number,charge, 0, precursor m/z, 0, 0, number of matches
+H	Line fields: M, rank by xcorr score, rank by sp score, peptide mass, deltaCn, xcorr score, sp score, number ions matched, total ions compared, sequence
+S	14	14	2	0.00	server	500.41	0.00	0.00	1
+M	1	1	1001.15	0.00	0.29	98.43	6	14	K.FHLELSQK.D	U
+L	gi|6381999|ref|NP_009311.2|
+S	14	14	3	0.00	server	500.41	0.00	0.00	1
+M	1	1	1495.81	0.00	-0.09	55.08	8	44	R.VMFTTFYMITNK.Y	U
+L	gi|6382000|ref|NP_009314.2|
+S	15	15	2	0.00	server	488.82	0.00	0.00	1
+M	1	1	973.09	0.00	-0.10	0.00	0	16	K.SGATAYIYK.A	U
+L	gi|6381999|ref|NP_009311.2|
+S	15	15	3	0.00	server	488.82	0.00	0.00	1
+M	1	1	1464.81	0.00	0.13	15.58	5	44	K.QYLLLNIAYLLK.L	U
+L	gi|6381999|ref|NP_009311.2|
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/extract-columns.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/extract-columns.html
new file mode 100644
index 0000000..0d799f5
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/extract-columns.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>extract-columns</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>extract-columns</h1>
+<h2>Usage:</h2>
+<p><code>crux extract-columns [options] <tsv file> <column names></code></p>
+<h2>Description:</h2>
+<p>Given a tab-delimited file and a comma-delimited list of column names, extract the requested columns.</p>
+<h2>Input:</h2>
+<ul>
+  <li><code>tsv file</code> – A tab-delimited file, with column headers in the first row. Use "-" to read from standard input.</li>
+  <li><code>column names</code> – A comma-delimited list of column names.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – the requested columns in tab-delimited format. The columns are printed in the same order that they appear in the input column list.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--delimiter <string></code> – Specify the input and output delimiter to use when processing the delimited file.  The argument can be either a single character or the keyword 'tab.' Default = <code>tab</code>.</li>
+  <li class="nobullet"><code>--header T|F</code> – Print the header line of the file, in addition to the columns that match. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/extract-rows.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/extract-rows.html
new file mode 100644
index 0000000..033c1f9
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/extract-rows.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>extract-rows</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>extract-rows</h1>
+<h2>Usage:</h2>
+<p><code>crux extract-rows [options] <tsv file> <column name> <column value></code></p>
+<h2>Description:</h2>
+Given a tab-delimited file, a column name and a column cell value, extract the rows that have the matching values for that column.
+<h2>Input:</h2>
+<ul>
+  <li><code>tsv file</code> – A tab-delimited file, with column headers in the first row. Use "-" to read from standard input.</li>
+  <li><code>column name</code> – A column name.</li>
+  <li><code>column value</code> – A cell value for a column.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – the rows for which the value observed in the specified column of the input file match the <column value> given on the command line.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--delimiter <string></code> – Specify the input and output delimiter to use when processing the delimited file.  The argument can be either a single character or the keyword 'tab.' Default = <code>tab</code>.</li>
+  <li class="nobullet"><code>--header T|F</code> – Print the header line of the file, in addition to the columns that match. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--comparison eq|gt|gte|lt|lte|neq</code> – Specify the operator that is used to compare an entry in the specified column to the value given on the command line. Legal values are as follows:<ul><li>eq – The two values are equal</li><li>lt – The file value is less than the argument value</li><li>lte – The file value is less than or equal to the argument value</li><li>gt – The file value is greater than the argument value</li><li>gt [...]
+  <li class="nobullet"><code>--column-type int|real|string</code> – Specifies the data type of the column, either an integer (int), a floating point number (real), or a string. Default = <code>string</code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/faq.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/faq.html
new file mode 100644
index 0000000..d33cf22
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/faq.html
@@ -0,0 +1,638 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux FAQs</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="index.html">Home</a></li>
+			    <li><a href="download.html">Download</a></li>
+			    <li><a href="fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>Crux Frequently Asked Questions</h2>
+
+		<ol>
+
+		<li>
+		<b>What is the difference between Tide and Comet?</b></li>
+
+		<p>
+		The differences are as follows:
+		<ul>
+		<li>
+		Tide converts your FASTA file to an index (either as part
+		of <code>tide-search</code> or by using <code>tide-index</code>),
+		whereas Comet does searching directly from the FASTA file.  The
+		indexing step allows Tide to pre-compute many parts of the search
+		procedure, thereby making the search faster.
+		<li>
+		Comet is multi-threaded, whereas Tide runs on a single thread.  On
+		multi-threaded CPUs, this feature can offset the speed difference
+		between Comet and Tide.</li>
+		<li>
+		For each match, Comet reports the <i>total</i> number of candidate
+		peptides, whereas Tide reports the number of <i>distinct</i> candidate
+		peptides.</li>
+		<li>
+		Comet provides an option to report an E-value in addition to the raw
+		XCorr score, whereas Tide provides an option to report a p-value.  The
+		methods for computing these two statistical confidence measures are
+		quite different.</li>
+		<li>
+		Some options are available only in Comet (various options related to
+		different types of theoretical fragment ions, max_fragment_charge,
+		nucleotide_reading_frame, etc.) whereas others are only available in
+		Tide (e.g., keep-terminal-aminos).</li>
+		</ul></p>
+
+		<p>
+		Overall, for a given set of spectra, the XCorr scores computed by
+		Comet and by Tide should be quite similar to one another, assuming
+		that the various search parameters are set similarly between the two
+		algorithms.  Below is a table summarizing the correspondence between
+		the two sets of parameters.  The specified values will yield nearly
+		identical XCorr scores from the two search engines.</p>
+
+		<table border="1">
+		<tr>
+		<td>
+		<b>Tide parameter</b></td>
+		<td>
+		<b>Tide value</b></td>
+		<td>
+		<b>Comet parameter</b></td>
+		<td>
+		<b>Comet value</b></td>
+		</tr>
+
+		<tr>
+		<td>
+		enzyme</td>
+		<td>
+		trypsin</td>
+		<td>
+		search_enzyme_number</td>
+		<td>
+		1</td>
+		</tr>
+
+		<tr>
+		<td>
+		digestion</td>
+		<td>
+		full-digest</td>
+		<td>
+		num_enzyme_termini</td>
+		<td>
+		2</td>
+		</tr>
+
+		<tr>
+		<td>
+		missed-cleavages</td>
+		<td>
+		0</td>
+		<td>
+		allowed_missed_cleavage</td>
+		<td>
+		0</td>
+		</tr>
+
+		<tr>
+		<td>
+		min-peaks</td>
+		<td>
+		10</td>
+		<td>
+		minimum_peaks</td>
+		<td>
+		10</td>
+		</tr>
+
+		<tr>
+		<td>
+		precursor-window</td>
+		<td>
+		3</td>
+		<td>
+		peptide_mass_tolerance</td>
+		<td>
+		3</td>
+		</tr>
+
+		<tr>
+		<td>
+		precursor-window-type</td>
+		<td>
+		mass</td>
+		<td>
+		peptide_mass_units</td>
+		<td>
+		0</td>
+		</tr>
+
+		<tr>
+		<td>
+		fragment-mass</td>
+		<td>
+		mono</td>
+		<td>
+		mass_type_fragment</td>
+		<td>
+		1</td>
+		</tr>
+
+		<tr>
+		<td>
+		decoy-format</td>
+		<td>
+		peptide-reverse</td>
+		<td>
+		N/A</td>
+		<td>
+		 </td>
+		</tr>
+
+		<tr>
+		<td>
+		keep-terminal-aminos</td>
+		<td>
+		C</td>
+		<td>
+		N/A</td>
+		<td>
+		 </td>
+		</tr>
+
+		<tr>
+		<td>
+		concat</td>
+		<td>
+		T</td>
+		<td>
+		decoy_search</td>
+		<td>
+		1</td>
+		</tr>
+
+		<tr>
+		<td>
+		top-match</td>
+		<td>
+		5</td>
+		<td>
+		num_results, num_output_lines</td>
+		<td>
+		6, 5</td>
+		</tr>
+
+		<tr>
+		<td>
+		remove-precursor-peak</td>
+		<td>
+		T</td>
+		<td>
+		remove_precursor_peak</td>
+		<td>
+		1</td>
+		</tr>
+
+		<tr>
+		<td>
+		remove-precursor-tolerance</td>
+		<td>
+		15</td>
+		<td>
+		remove_precursor_tolerance</td>
+		<td>
+		15</td>
+		</tr>
+
+		<tr>
+		<td>
+		use-flanking-peaks</td>
+		<td>
+		F</td>
+		<td>
+		theoretical_fragment_ions</td>
+		<td>
+		1</td>
+		</tr>
+
+		<tr>
+		<td>
+		use-neutral-loss-peaks</td>
+		<td>
+		F</td>
+		<td>
+		use_NL_ions</td>
+		<td>
+		F</td>
+		</tr>
+
+		<tr>
+		<td>
+		mz-bin-width</td>
+		<td>
+		1.0005079</td>
+		<td>
+		fragment_bin_tol</td>
+		<td>
+		1.0005079</td>
+		</tr>
+
+		<tr>
+		<td>
+		mz-bin-offset</td>
+		<td>
+		0.4</td>
+		<td>
+		fragment_bin_offset</td>
+		<td>
+		0.4</td>
+		</tr>
+
+		<tr>
+		<td>
+		min-mass, max-mass</td>
+		<td>
+		200, 7200</td>
+		<td>
+		digest_mass_range</td>
+		<td>
+		200 7200</td>
+		</tr>
+
+		<tr>
+		<td>
+		N/A</td>
+		<td>
+		 </td>
+		<td>
+		max_fragment_charge</td>
+		<td>
+		2</td>
+		</tr>
+
+		</table>
+
+		<p>
+		Here is a scatter plot of XCorr scores from a search run with the
+		parameters listed above:</p>
+
+		<img src="images/stored-xcorr.png">
+
+
+		<li>
+		<b>What operating systems does Crux work with?</b></li>
+
+		<p>
+		Crux is written in C++, so in principle it should work on virtually
+		any modern operating system.  We provide pre-compiled binaries for
+		Linux, MacOS and Windows.</p>
+
+		<li>
+		<b>How does Crux compute the masses of peptides and peptide
+		  fragments?</b></li>
+
+		<p>
+		<ul>
+
+		<li>
+		Each amino acid can be characterized either by its monoisotopic mass,
+		which is the mass of the most abundant isotopic form of that amino acid,
+		or the average mass, which is a weighted average of the masses of all
+		the isotopic forms.  By default, Crux uses average mass to calculate
+		peptide masses, though this behavior can be controlled by the
+		<code>isotopic-mass</code> option to <code>tide-index</code> and the
+		<code>mass_type_parent</code> option to <code>comet</code>.  For
+		fragments, <code>tide-search</code> always uses the monoisotopic mass,
+		whereas <code>comet</code> allows selection
+		via <code>mass_type_fragment</code>.</li>
+
+		<li>
+		The neutral mass of a peptide is not the sum of the masses of its
+		amino acids.  The N-terminus and C-terminus of the peptide together
+		contribute an additional water molecule, whose mass is either
+		18.010564684 Da (monoisotopic) or 18.0153 Da (average).</li>
+		<li>
+		A charged peptide has an additional approximately 1 Da mass for each
+		charge, corresponding to the mass of a hydrogen atom.  The exact mass
+		to be added depends on whether we are using the monoisotopic mass
+		(1.007825035) or average mass (1.00794).</li>
+
+		<li>When a peptide fragments, each b-ion will have a mass equal to
+		the sum of its amino acids plus one hydrogen for each charge on the
+		fragment, while each y-ion will have a mass equal to the sum of its
+		amino acids plus water plus one hydrogen for each charge on the
+		fragment.</li>
+
+		<li>
+		By default, both Tide and Comet add a static modification of
+		57.021464 Da to all cysteines.  This is because in most protein
+		preparation protocols the peptides are alkylated with iodoacetamide,
+		resulting in carbamidomethylation of cysteine. The alkylation step
+		prevents the reformation of disulfide bonds.  Other alykylation
+		reagents may be used, in which case the appropriate mass shift can be
+		specified with the <code>C=[mass]</code> option
+		to <code>tide-index</code> or the <code>add_C_cysteine</code> option
+		to <code>comet</code>.</li>
+
+		</ul>
+		</p>
+
+		<li>
+		<b>How does Crux assign fragment masses to bins prior to computing
+		the XCorr score?</b>
+		</li>
+
+		<p>The XCorr score is essentially a dot product between a preprocessed
+		form of the observed spectrum and the theoretical spectrum derived
+		from the candidate peptide. In order to compute this dot product, the
+		masses of the fragments in both spectra are assigned to discrete mass
+		bins. This can be viewed as a form of rounding, but with more control
+		over the discrete masses. Two parameters, <code>mz-bin-width</code> and
+		<code>mz-bin-offset</code>, control the size and location of the bins,
+		and are used to convert fragment masses according to this formula:</p>
+
+		<p align=center>binned mass = floor( ( original mass / <code>bin-width</code> ) + 1.0 - <code>bin-offset</code> )</p>
+
+		<p>
+		The default values <code>bin-width</code>=1.0005079
+		and <code>bin-offset</code>=0.40 are suitable for most low-resolution
+		datasets.
+		</p>
+
+		<li>
+		<b>How does Crux estimate the possible charge states of the peptides when the
+		   information is not provided within the spectra file?</b>
+		</li>
+
+		<p>
+		Crux calculates the ratio of two values: (1) the sum of the
+		intensities from the peaks in the fragmentation spectrum whose m/z is
+		greater than the precursor m/z versus (2) the sum of the peaks whose
+		m/z is smaller than the precursor.  If this ratio is greater than or
+		equal to a calculated threshold based upon the location of the
+		precursor m/z and the max m/z in the spectrum, Crux then assigns both
+		+2 and +3 as possible charge states to the spectrum.  Otherwise, Crux
+		assigns +1 as the charge state.  The algorithm is based upon the
+		observation that fragmentation spectra collected from +1 peptides
+		should have no peaks above the precursor m/z.  In contrast, a peptide
+		of charge state greater than +1 can generate fragment ions of lower
+		charge whose m/z is greater than the precursor m/z, thus indicating a
+		multiply charged precursor.</p>
+
+		<p>
+		Note that, in addition, <code>comet</code> includes
+		a <code>precursor_charge</code> parameter.  If the first number in
+		this parameter is set to 0, i.e., <code>precursor_charge = 0 0</code>,
+		then the charge state rule above is applied.  However, if a user
+		specifies a precursor charge range, i.e., <code>precursor_charge = 1
+		5</code>, then Comet will search every spectrum through this range of
+		assumed charge states for every spectrum whose precursor charge
+		is unknown.</p>
+
+		<li>
+		<b>How does Crux create peptides from the given set of proteins in the
+		  database?</b></li>
+
+		<p>
+		The options <code>enzyme</code> (for <code>tide-index</code>)
+		and <code>search_enzyme_number</code> (for <code>comet</code>) define
+		the enzymatic cleavage rules.  When <code>enzyme=no-enzyme</code>
+		or <code>search_enzyme_number=0</code>, then any subsequence of a
+		protein may be considered as a candidate peptide. For other values of
+		these parameters, the residues at the termini of the protein
+		subsequence must follow specific rules.  For example, trypsin requires
+		that the preceeding residue must be an R or K and the following
+		residue may not be a P.</p>
+
+		<p>
+		When <code>digestion=full-digest</code> (for <code>tide-index</code>)
+		or <code>num_enzyme_termini=2</code> (for <code>comet</code>), then
+		these rules must be true at both ends of the peptide.  When it
+		is <code>digestion=partial-digest</code>
+		or <code>num_enzyme_termini=1</code>, then the rules must be true at
+		at least one of the ends.  The <code>missed-cleavages</code>
+		and <code>allowed_missed_cleavages</code> parameters control the
+		maximum number of cleavage sites that may lie within the peptide
+		sequence.</p>
+
+		<p>
+		Note that if <code>enzyme=no-enzyme</code>
+		or <code>search_enzyme_number=0</code>, then
+		the <code>digestion</code>, <code>num_enzyme_termini</code>, <code>missed-cleavages</code>
+		and <code>allowed_missed_cleaveages</code> parameters are not used.</p>
+
+
+		<li>
+		<b>How does Crux select candidate peptides from the database?</b></li>
+
+		<p>
+		The Crux search tools (<code>tide-index</code> and <code>comet</code>)
+		select candidate peptides for each spectrum based on its precursor
+		singly charged mass (m+h) or the mass-to-charge (m/z) and an assumed
+		charge state (specified in the input file).  If the m+h and charge is
+		provided in the input file (e.g., from the Z lines of an MS2 file),
+		then the precursor mass is calculated from the m+h minus the mass of a
+		proton. Otherwise, the precursor mass is calculated from the precursor
+		m/z and an assumed charge.  A mass window is defined in one of three
+		ways based on the
+		<code>precursor-window-type</code> and <code>precursor-window</code>
+		options.</p>
+
+		<ul>
+		<li>  
+		If the <code>precursor-window-type</code> is set to <code>mz</code>,
+		then the window is calculated as spectrum precursor m/z ±
+		<code>precursor-window</code> and the resulting range is converted
+		to mass using the charge state with the formula:<br>  
+		Mass=m/z * charge - MASS_PROTON * charge, where MASS_PROTON=1.00727646677
+		</li>
+
+		<li>
+		If the <code>precursor-window-type</code> is set to <code>mass</code>, then
+		the window is defined as the precursor mass ± 
+		<code>precursor-window</code>.
+		</li>
+
+		<li>
+		If the <code>precursor-window-type</code> is set to <code>ppm</code>
+		(parts per million), then the window spans from the precursor mass /
+		(1.0 + window * 1e-6) to precursor mass / (1.0 - window * 1e-6).</li>
+		</ul>
+
+		<p>
+		Candidate peptides are those whose mass falls within the defined
+		window.  The peptide mass is computed as the sum of the average amino
+		acid masses plus 18 Da for the terminal OH group.  Candidate peptides
+		can also be constrained by minimum and maximum allowed length. </p>
+
+		<li>
+		<b>How can I search my ITRAQ data?</b></li>
+
+		<p>
+		ITRAQ and other tagged seaches can be done by using terninal
+		modifications.  For example, if your tag has a mass of 304.199040, add
+		these lines to your parameter file:
+		<pre>
+nmod=304.199040:-1
+cmod=304.199040:-1
+		</pre>
+		<p>
+		Crux will then generate peptides with this modification (+304.199904)
+		on the n-terminus, the c-terminus and on both termini.  The -1 in the
+		option means to add the modification regardless of where the peptide
+		terminus lies relative to the rest of the protein.
+
+		<li>
+		<b>What happens if I decrease the size of the precursor window during
+		searching?</b></li>
+
+		<p>
+		Reducing the precursor mass tolerance has two main benefits.  One is
+		reduced search time, and the other is improved statistical power to
+		detect matches.  With a smaller window, fewer candidates are tested
+		against a spectrum.  As a result, the statistical confidence measure
+		calculated after multiple testing correction will be more significant.
+		Of course, the flipside is that if you make the precursor window too
+		small, then you may end up throwing out correct identifications.
+		Control over the size of the window is provided by the using
+		the <code>precursor-window</code> and
+		<code>precursor-window-type</code> options.</p>
+
+		<li>
+		  <b>How can I run many jobs in parallel?</b>
+
+
+		  <p>
+		In combination with GNU parallel, parallelization of Crux can be
+		achieved rather painlessly. For example, to run tide-search on a set
+		of spectrum files, you can just get your spectra files into a filelist:</p>
+
+		<pre>
+find . -name "*.mzXML" > file.list
+		</pre>
+
+		<p>
+		Then, with a bit of bash magic, run parallel as follows (assuming
+		there are 100 files in file.list):</p>
+
+		<pre>
+parallel --xapply crux tide-search <options> --fileroot {1} {2} database.db ::: $(seq 1 100) ::: $(cat file.list)
+		</pre>
+
+		  <p>
+		    <i>Thanks to Ben Temperton for this answer.</i></p>
+		    
+		<li>
+		<b>How can I contribute to Crux?</b></li>
+
+		<p>
+		Patches implementing new features can be emailed to the development
+		team at crux-support at uw.edu for review and inclusion in subsequent
+		releases of Crux.</p>
+
+		<li>
+		<b>Where does the name "Crux" come from?</b></li>
+
+		<p>
+		Thin air.  The name is not an acronym or a reference to anything in
+		particular.</p>
+
+		</ol>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/barista-xml-format.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/barista-xml-format.html
new file mode 100644
index 0000000..5e007d9
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/barista-xml-format.html
@@ -0,0 +1,249 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Template</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>barista.xml </h2>
+		<p>
+		The barista.xml is an XML files that used to record four main 
+		parts: 
+		</p>
+		<pre>
+&lt proteins &gt ... &lt /proteins &gt
+&lt subset_proteins &gt ... &lt /subset_proteins &gt
+&lt peptides &gt ... &lt /peptides &gt
+&lt psms &gt ... &lt /psms &gt
+		</pre>
+		<p>
+		<ol>
+		<li>
+		<b>Proteins:</b>contains the ranked list of groups of indistinguishable
+		target proteins.  Each protein entry includes the following fields:
+		<ol>
+		<li>
+		<b>protein group:</b> a number that identifies a group. </li>
+		<li>
+		<b>q-value: </b>The minimal protein-level false discovery rate at which this
+		protein is deemed significant.  This q-value is computed based on the
+		ranking of the proteins induced by the Barista score.</li>
+		<li>
+		<b>score:</b> The score assigned to the proteins by Barista.  Higher values
+		correspond to more confident identifications.</code>
+		<li>
+		<b>protein_ids:</b> proteins in the protein group. </li>
+		<li>
+		<b>alternative_peptide_id: </b>peptides are considered indistinguishable if
+		they have identical amino acid sequences or they differ only by I/L or
+		T/S in the same position in the peptide. If the peptides shared by the
+		group are not identical, they are listed immediately after the
+		proteins they belong to. </li>
+		<li><b>
+		peptide_ids:</b> belong to each of the proteins in the
+		group.</li>
+		</ol>
+
+		<br>
+		For example, suppose that
+		<dl>
+		<dd> <b> protein_a </b> has peptide  <b> KLEAEVEALKK </b>  &nbsp &nbsp &nbsp  // 'L' in second position </dd>
+		          <dd> and peptide  <b> VLGAK </b>  </dd>            
+		<dd> <b> protein_b </b> has peptide  <b> KIEAEVEALKK </b>  &nbsp &nbsp &nbsp  // 'I' in second position
+		          <dd> and peptide  <b> VLGAK </b> </dd>
+		</dl>
+
+		<br>
+		Then the xml entry could look like this <br />
+		<pre>
+&lt proteins &gt
+&lt q_value &gt 0 &lt /q_value &gt
+&lt score &gt 8.9 &gt &lt /score &gt
+&lt protein_group group_id="1" &gt
+&lt protein_ids &gt
+&lt protein_id &gt protein_a &lt /protein_id &gt
+&lt alternative_peptide_id &gt KLEAEVEALKK &lt /alternative_peptide_id &gt
+&lt protein_id &gt protein_b &lt /protein_id &gt
+&lt alternative_peptide_id &gt KIEAEVEALKK &lt /alternative_peptide_id &gt
+&lt /protein_ids &gt
+&lt peptide_ids &gt
+&lt peptide_id &gt VLGAK &lt /peptide_id &gt
+&lt /peptide_ids &gt
+&lt /protein_group &gt
+&lt /proteins &gt
+		</pre>
+		</li>
+		</p>
+		<li>
+		<p>
+		<b>Subset proteins</b> contains groups of indistinguishable proteins, which
+		   constitute a subset of some group in the proteins section in
+		   terms of the peptides identified in these proteins. Each entry includes
+		<ol>
+		<li>
+		group id and parent group id: the identifier of the group and the
+		identifier of the protein group which has the superset of the peptide
+		set belonging the current group
+		</li>
+		<li>
+		protein_ids : proteins that belong to the group
+		</li>
+		<li>
+		peptide_ids: peptides that belong to the proteins in the group.
+		</li>
+		</ol>
+		</li>
+		</p>
+		<li>
+		<p>
+		<b>Peptides</b> contains a ranked list of target peptides. Each peptide entry
+		includes:
+		<ol>
+		<li>
+		peptide: Peptide amino acid sequence.
+		<li>
+		q-value: The minimal peptide-level false discovery rate at which this
+		peptide is deemed significant.  This q-value is computed based on the
+		ranking of the peptides induced by the Barista score.</li>
+		<li>
+		score: The score assigned to the peptide by Barista.  Higher values
+		correspond to more confident identifications.</li>
+		<li>
+		main_psm_id: The PSM identifier based on which the peptide received
+		its score. A peptide score is the maximum over all the PSMs that
+		contain this peptide. </li>
+		<li>
+		psm_ids: The identifiers of all the PMS that contain this peptide .</li>
+		<li>
+		protein_ids: All the proteins that contain this peptide and were
+		infered based on some PSMs from the database search. </li>
+		</ol>
+
+		</li>
+		</p>
+		<li>
+		<p>
+		<b>PSMs</b> contains ranked list of target peptide-spectrum matches. The
+		following columns are included:
+		<ol>
+		<li>
+		psm_id: PSM identifier. </li>
+		<li>
+		q-value: The minimal PSM-level false discovery rate at which this PSM
+		is deemed significant.  This q-value is computed based on the ranking
+		of the PSMs induced by the Barista score.</li>
+		<li>
+		score: The score assigned to the PSM by Barista.  Higher values
+		correspond to more confident identifications.</code>
+		<li>
+		scan: the scan number</li>
+		<li>
+		charge: the inferred charge state</li>
+		<li>
+		precursor_mass: precrusor mass as recorded during the MS1 scan </li>
+		<li>
+		peptide: the peptide sequence</li>
+		<li>
+		filename: name of the file in which the PSM appears</li>
+		</ol>
+		</p>
+		</ol>
+		</li>
+	<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="../tutorials/install.html">Installation</a></li>
+				<li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/fasta-format.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/fasta-format.html
new file mode 100644
index 0000000..13cb395
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/fasta-format.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Template</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<H2>FASTA file format</H2>
+
+		<p>
+		Crux searches protein sequence databases given in FASTA format.  The
+		format is very simple. Every entry consists of a sequence identifier
+		(ID), an optional comment (COMMENT), and a sequence (SEQUENCE). The
+		format looks like this:
+		</p>
+
+		<pre>
+>ID COMMENT
+SEQUENCE
+		</pre>
+
+		<p>
+		The special character ">" marks the beginning of a new sequence.
+		The ">" character is followed immediately by the sequence
+		identifier. The rest of that line is occupied by the optional
+		comment. Subsequent lines contain the sequence itself.
+		</p>
+
+		<p>Some rules about representing sequences:</p>
+
+		<ul style="padding:0; font-size:14px;">
+
+		<li>
+		A single protein sequence can span multiple lines.  The > character
+		occurring at the beginning of the line indicates the end of the
+		sequence.</li>
+
+		<li>
+		Case doesn't matter. Crux Suite converts everything to uppercase.</li>
+
+		<li>
+		White space (spaces and newlines) within the sequence are
+		ignored.</li>
+
+		<li>
+		Characters should be from the amino acid alphabet, which contains
+		twenty characters for amino acids ("ACDEFGHIKLMNPQRSTVWY") and is
+		augmented by four more ambiguous characters ("BUXZ"):</li>
+
+		<pre>
+A  alanine                         P  proline
+B  aspartate or asparagine         Q  glutamine
+C  cystine                         R  arginine
+D  aspartate                       S  serine
+E  glutamate                       T  threonine
+F  phenylalanine                   U  any
+G  glycine                         V  valine
+H  histidine                       W  tryptophan
+I  isoleucine                      Y  tyrosine
+K  lysine                          Z  glutamate or glutamine
+L  leucine                         X  any
+M  methionine                      
+N  asparagine
+		</pre>
+
+		</ul>
+
+		<p>
+		<a href="sample.fasta">Here</a> is an example of three sequences in
+		FASTA format.</p>
+
+	<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="../tutorials/install.html">Installation</a></li>
+				<li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/features.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/features.html
new file mode 100644
index 0000000..eb81b6a
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/features.html
@@ -0,0 +1,398 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Template</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<div id="content">
+			<h2>Features used by percolator and q-ranker</h2>
+
+			<p>
+			Following is a list of the features used by the <span class="code">crux
+			percolator</span> and <span class="code">crux q-ranker</span> commands to represent
+			each peptide-spectrum match (PSM).</p>
+
+
+			<table border="1" align="center" id="featurestable">
+			<tr>
+			<!--table header-->
+			<th>Number</th>
+			<th>Name</th>
+			<th>Type</th>
+			<th>Description</th>
+			<th>Percolator</th>
+			<th>q-ranker</th>
+			<th>barista</th>
+			</tr>
+			<!--tr backgoud(grey)"#DEDEDE"-->
+			<!--check mark : "&#10003" or "&#10004, not supported use:  -->
+
+			<tr bgcolor="#DEDEDE" >
+			<td>1</td>
+			<td><code>lnrSp</code></td>
+			<td>Float</td>
+			<td>The natural logarithm of the rank of the match
+			based on the Sp score</td>
+			<td>&#10003</td>
+			<td></td>
+			<td></td>
+			</tr>
+
+			<tr>
+			<td>2</td>
+			<td><code>deltLCn</code></td>
+			<td>Float</td>
+			<td>The difference between this PSM's XCorr and the
+			XCorr of the <i>last-ranked</i> PSM for this spectrum, divided by
+			this PSM's XCorr or 1, whichever is larger.</td>
+			<td>&#10003</td>
+			<td></td>
+			<td></td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE" >
+			<td>3</td>
+			<td><code>deltCn</code></td>
+			<td>Float</td>
+			<td>The difference between this PSM's XCorr and the
+			XCorr of the <i>next-ranked</i> PSM for this spectrum, divided by
+			this PSM's XCorr or 1, whichever is larger.
+			Note that this definition differs from that of the
+			standard delta Cn reported by SEQUEST<sup>®</sup>.</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td>4</td>
+			<td><code>Xcorr / XCorr Score</code></td>
+			<td>Float</td>
+			<td>The SEQUEST cross-correlation score</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>5</td>
+			<td><code>Sp / Sp score</code></td>
+			<td>Float</td>
+			<td>The preliminary SEQUEST score.</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td>6</td>
+			<td><code>IonFrac</code></td>
+			<td>Float</td>
+			<td>The fraction of b and y ions theoretical ions matched to the spectrum</td>
+			<td>&#10003</td>
+			<td></td>
+			<td></td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>7</td>
+			<td><code>Mass</code></td>
+			<td>Float</td>
+			<td>The observed mass [M+H]<sup>+</sup></td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td>8</td>
+			<td><code>PepLen</code></td>
+			<td>Integer</td>
+			<td>The length of the matched peptide, in residues</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>9-11</td>
+			<td><code>Charge[n]</code></td>
+			<td>Boolean</td>
+			<td>Is this a 1+/2+/3+ charged spectrum?</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td>12</td>
+			<td><code>enzN</code></td>
+			<td>Boolean</td>
+			<td>Is the peptide preceded by an enzymatic (tryptic) site?</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>13</td>
+			<td><code>enzC</code></td>
+			<td>Boolean</td>
+			<td>Does the peptide have an enzymatic (tryptic) C-terminus?</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td>14</td>
+			<td><code>enzInt</code></td>
+			<td>Integer</td>
+			<td>Number of missed internal enzymatic (tryptic) sites</td>
+			<td>&#10003</td>
+			<td></td>
+			<td></td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>15</td>
+			<td><code>lnNumSP</code></td>
+			<td>Float</td>
+			<td>The natural logarithm of the number of database
+			peptides within the specified precursor range</td>
+			<td>&#10003</td>
+			<td></td>
+			<td></td>
+			</tr>
+
+			<tr>
+			<td>16</td>
+			<td><code>dM</code></td>
+			<td>Float</td>
+			<td>The difference between the calculated and observed mass</td>
+			<td>&#10003</td>
+			<td> </td>
+			<td> </td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>17</td>
+			<td><code>absdM</code></td>
+			<td>Float</td>
+			<td>The absolute value of the difference between the calculated and observed mass</td>
+			<td>&#10003</td>
+			<td> </td>
+			<td> </td>
+			</tr>
+
+			<tr>
+			<td>18</td>
+			<td><code>label</code></td>
+			<td>Boolean</td>
+			<td>Is this decoy or target?</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+
+			<tr bgcolor="#DEDEDE">
+			<td>19</td>
+			<td><code>xcorr rank</code></td>
+			<td>Integer</td>
+			<td>The rank of this PSM when sorted by xcorr</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td>20</td>
+			<td><code>Sp rank</code></td>
+			<td>Integer</td>
+			<td>The rank of this PSM when sorted by sp score.</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE" >
+			<td>21</td>
+			<td><code>missed cleavage</code></td>
+			<td>Boolean</td>
+			<td>Does the peptide contain one or more missed cleavage sites?</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td>22</td>
+			<td><code>number of sequence comparisons</code></td>
+			<td>Integer</td>
+			<td>The number of sequence comparisons</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>23</td>
+			<td><code>delta mass</code></td>
+			<td>Float</td>
+			<td>Difference between measured and calculated mass</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr-->
+
+			<tr>
+			<td>24</td>
+			<td><code>abs(delta mass)</code></td>
+			<td>Float</td>
+			<td>Absolute value of delta mass</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>25</td>
+			<td><code>b ions</code></td>
+			<td>Float</td>
+			<td>The XCorr from the theoretical b-ions.</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td>26</td>
+			<td><code>y ions</code></td>
+			<td>Float</td>
+			<td>The XCorr from the theoretical y-ions.</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>27</td>
+			<td><code>flanking</code></td>
+			<td>Float</td>
+			<td>The XCorr from the flanking peaks</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td><b>Total</b></td>
+			<td> </td>
+			<td> </td>
+			<td></td>
+			<td><b>17</td>
+			<td><b>20</td>
+			<td><b>20</b></td>
+			</tr>
+			</table>
+		</div>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="../tutorials/install.html">Installation</a></li>
+				<li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/ms2-format.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/ms2-format.html
new file mode 100644
index 0000000..a5d385a
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/ms2-format.html
@@ -0,0 +1,283 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Template</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>MS2 file format</h2>
+		<p>
+		The MS2 file format is used to record MS/MS spectra.
+		A full description of the MS2 file format may be found in:
+		<cite>
+		McDonald,W.H. et al.
+		MS1, MS2, and SQT-three unified, compact, and easily parsed file formats for the storage
+		of shotgun proteomic spectra and identifications. Rapid Commun. Mass Spectrom.
+		<b>18</b>, 2162-2168 (2004).
+		</cite>
+		</p>
+		<p>
+		An MS2 file consists of a header followed by one or more sets of scan data. 
+		The header and scan data are broken into records, one record per line. 
+		The fields within a record are separated by white space.
+		The header records list information applicable to all the scans in the file.
+		Each scan begins with a few records describing the parameters for that scan.
+		This is followed by pairs of m/z and intensity values, one pair per line.
+		</p>
+		<p>
+		A sample MS2 file may be found <a href="../example-files/demo.ms2">here</a>.
+		</p>
+		<h3>Header details</h3>
+		<p>
+		Each line in the header must begin with an <code>H</code>.
+		This is followed by a field label, and then a field value,
+		all separated by white space.
+		The field label must be one of the labels listed  below,
+		while the field value can be an aribrary string.
+		A typical header is shown below.
+		</p>
+		<pre>
+H	CreationDate	2/14/2007 6:19:18 PM
+H	Extractor	MakeMS2
+H	ExtractorVersion	1.0
+H	Comments	MakeMS2 written by Michael J. MacCoss, 2004
+H	ExtractorOptions	MS2/MS1
+		</pre>
+		<p>
+		The following field labels must appear in the header:
+		</p>
+		<table style="text-align: left;">
+		<caption style="text-align: left;">Required header field labels</caption>
+		<thead>
+		<tr>
+		<th>Field Label</th>
+		<th>Description</th>
+		</tr>
+		</thead>
+		<tbody>
+		<tr>
+		<td>CreationDate</td><td>The date and time when the file was created</td>
+		</tr>
+		<tr>
+		<td>Extractor</td><td>The name of the software used to create the MS2 file</td>
+		</tr>
+		<tr>
+		<td>ExtractorVersion</td><td>The version number of the Extractor software</td>
+		</tr>
+		<tr>
+		<td>ExtractorOptions</td><td>The options used in running the extractor software</td>
+		</tr>
+		</tbody>
+		</table>
+		<p>
+		The following field labels are optional, and may appear in the header:
+		</p>
+		<table style="text-align: left;">
+		<caption style="text-align: left;">Optional header field labels</caption>
+		<thead>
+		<tr>
+		<th>Field Label</th>
+		<th>Description</th>
+		</tr>
+		</thead>
+		<tbody>
+		<tr>
+		<td>IAnalyzer</td>
+		<td>Name of software used to conduct charge-state independent analysis of the spectra</td>
+		</tr>
+		<tr>
+		<td>IAnalyzerVersion</td>
+		<td>The version number of the IAnalyzer software</td>
+		</tr>
+		<tr>
+		<td>IAnalyzerOptions</td>
+		<td>The options used in running the IAnalyzer software</td>
+		</tr>
+		<tr>
+		<td>DAnalyzer</td>
+		<td>Name of software used to conduct charge-state dependent analysis of the spectra</td>
+		</tr>
+		<tr>
+		<td>DAnalyzerVersion</td>
+		<td>The version number of the DAnalyzer software</td>
+		</tr>
+		<tr>
+		<td>DAnalyzerOptions</td>
+		<td>The options used in running the DAnalyzer software</td>
+		</tr>
+		<tr>
+		<td>SortedBy</td>
+		<td>Name of field use to sort spectra<td>
+		</tr>
+		<tr>
+		<td>InstrumentType</td>
+		<td>The type of mass analyzer used<td>
+		</tr>
+		<tr>
+		<td>Comment</td>
+		<td>Remarks. Multiple comment lines are allowed<td>
+		</tr>
+		<tr>
+		<td>InstrumentSN</td>
+		<td>Serial number of the mass spectrometer used<td>
+		</tr>
+		</tbody>
+		</table>
+		<h3>Scan details</h3>
+		<p>
+		Each scan begins with a few records listing the parameters describing the spectrum.
+		These lines must begin with S, I, Z, or D.
+		The records are followed by pairs of m/z and intensity values, one pair per line.
+		A fragment of a typical scan is shown below.
+		</p>
+		<pre>
+S	10	10	636.34
+Z	2	1271.67
+187.4 12.5
+193.1 19.5
+194.3 13.7
+198.3 29.8
+199.1 12.2
+		</pre>
+		</p>
+		<table style="text-align: left;">
+		<caption style="text-align: left;">Record types for scans</caption>
+		<thead>
+		<tr>
+		<th>Symbol</th>
+		<th>Description</th>
+		<th>Generic form</th>
+		<th>Required</th>
+		</tr>
+		</thead>
+		<tbody>
+		<tr>
+		<td>S</td>
+		<td>scan</td>
+		<td><code>S [first scan] [second scan] [pre m/z]</code></td>
+		<td>yes</td>
+		</tr>
+		<tr>
+		<td>I</td>
+		<td>Charge independent analysis</td>
+		<td><code>I [field label] [field value]</code></td>
+		<td>no</td>
+		</tr>
+		<tr>
+		<td>Z</td>
+		<td>Charge</td>
+		<td><code>I [charge] [mass]</code></td>
+		<td>yes</td>
+		</tr>
+		<tr>
+		<td>D</td>
+		<td>Charge dependent analysis</td>
+		<td><code>I [field label] [field value]</code></td>
+		<td>no</td>
+		</tr>
+		<tr>
+		<td>[data]</td>
+		<td>m/z intensity paris</td>
+		<td><code>[m/z] [intensity]</code></td>
+		<td>yes</td>
+		</tr>
+		</tbody>
+		</table>
+	<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="../tutorials/install.html">Installation</a></li>
+				<li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/parameter-file.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/parameter-file.html
new file mode 100644
index 0000000..6c4fe1d
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/parameter-file.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Template</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>Crux parameter files</h2>
+
+		<b>Description:</b>
+		<p>A file containing parameters and their arguments passed to a crux
+		program to control various aspects of execution.  Every command-line
+		option and many additional options can be read from a parameter
+		file.  If an option is specified in a file and on the command line,
+		the command line value will be used.
+		</p>
+
+		<b>Usage:</b>
+		<p><span class="code"><program name> --parameter-file <file name> [<argument>+]</span></p>
+
+		<b>Format:</b>
+		<p>The parameter file can contain parameter lines, comment lines and
+		blank lines.  Parameter lines are name-value pairs separated by  an
+		equal sign, '=' with no spaces in between.  Comment lines must begin
+		with '#'.  Blank lines should contain no spaces or tabs before the newline.
+		</p>
+
+		<p>
+		<a href="../commands/default.params">Here</a> is a sample parameter file
+		containing the default values for every parameter/option available to
+		all crux programs.</p>
+			<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="../tutorials/install.html">Installation</a></li>
+				<li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/sample.fasta b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/sample.fasta
new file mode 100644
index 0000000..1f51f20
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/sample.fasta
@@ -0,0 +1,17 @@
+>ICYA_MANSE 
+GDIFYPGYCPDVKPVNDFDLSAFAGAWHEIAKLPLENENQGKCTIAEYKY
+DGKKASVYNSFVSNGVKEYMEGDLEIAPDAKYTKQGKYVMTFKFGQRVVN
+LVPWVLATDYKNYAINYNCDYHPDKKAHSIHAWILSKSKVLEGNTKEVVD
+NVLKTFSHLIDASKFISNDFSEAACQYSTTYSLTGPDRH
+
+>LACB_BOVIN 
+MKCLLLALALTCGAQALIVTQTMKGLDIQKVAGTWYSLAMAASDISLLDA
+QSAPLRVYVEELKPTPEGDLEILLQKWENGECAQKKIIAEKTKIPAVFKI
+DALNENKVLVLDTDYKKYLLFCMENSAEPEQSLACQCLVRTPEVDDEALE
+KFDKALKALPMHIRLSFNPTQLEEQCHI
+
+>BBP_PIEBR 
+NVYHDGACPEVKPVDNFDWSNYHGKWWEVAKYPNSVEKYGKCGWAEYTPE
+GKSVKVSNYHVIHGKEYFIEGTAYPVGDSKIGKIYHKLTYGGVTKENVFN
+VLSTDNKNYIIGYYCKYDEDKKGHQDFVWVLSRSKVLTGEAKTAVENYLI
+GSPVVDSQKLVYSDFSEAACKVN
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/sqt-format.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/sqt-format.html
new file mode 100644
index 0000000..1540f6d
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/sqt-format.html
@@ -0,0 +1,329 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Template</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>SQT file format</h2>
+		<p>
+		The SQT file format is used to record the matches between MS/MS spectra
+		and a sequence database.
+		A full description of the SQT file format may be found in:</p>
+
+		McDonald, W.H. et al.
+		<a href="http://onlinelibrary.wiley.com/doi/10.1002/rcm.1603/abstract">"MS1, MS2, and SQT-three unified, compact, and easily parsed file formats for the storage
+		of shotgun proteomic spectra and identifications."</a> <i>Rapid
+		    Communications in Mass Spectrometry.</i> <b>18</b>, 2162-2168 (2004).
+		</blockquote>
+
+		<p>
+		An SQT file consists of a header followed by one or more spectrum matches.
+		The header and match data are broken into records, one record per line. 
+		Fields within a record are separated by white space.
+		</p>
+		<p>
+		A sample SQT file may be found <a href="../example-files/target.sqt">here</a>.
+		</p>
+
+		<h3>Header details</h3>
+		<p>
+		Each line in the header must begin with an <code>H</code>.
+		This is followed by a field label, and then a field value,
+		all separated by white space.
+		The field label must be one of the labels listed  below,
+		while the field value can be an aribrary string.
+		A typical header is shown below.
+		</p>
+		<pre>
+H	SQTGenerator Crux
+H	SQTGeneratorVersion 1.0
+H	Comment Crux was written by...
+H	Comment ref...
+H	StartTime	Tue Dec  2 15:22:50 2008
+H	EndTime                               
+H	Database	test_crux_index/test-binary-fasta
+H	DBSeqLength	?
+H	DBLocusCount	4
+H	PrecursorMasses	average
+H	FragmentMasses	mono
+H	Alg-PreMasTol	3.0
+H	Alg-FragMassTol	0.50
+H	Alg-XCorrMode	0
+H	Comment	preliminary algorithm sp
+H	Comment	final algorithm xcorr
+H	StaticMod	C=160.139
+H	Alg-DisplayTop	5
+H	EnzymeSpec	tryptic
+		</pre>
+		<p>
+		The following field labels must appear in the header:
+		</p>
+		<table style="text-align: left;">
+		<caption style="text-align: left;">Required header field labels</caption>
+		<thead>
+		<tr>
+		<th>Field Label</th>
+		<th>Description</th>
+		</tr>
+		</thead>
+		<tbody>
+		<tr>
+		<td>SQTGenerator</td><td>The name of the software used to create the SQT file</td>
+		</tr>
+		<tr>
+		<td>SQTGeneratorVersion</td><td>The version number of the SQTGenerator software</td>
+		</tr>
+		<tr>
+		<td>Database</td><td>Path to sequence database used to generate the SQT file</td>
+		</tr>
+		<tr>
+		<td>FragmentMasses</td>
+		<td>Were average or mono-istopic residue masses used to predict the fragment ion mass</td>
+		</tr>
+		<tr>
+		<td>PrecursorMasses</td>
+		<td>Were average or mono-istopic residue masses used to predict the precursor ion mass</td>
+		</tr>
+		<tr>
+		<td>StartTime</td><td>Time when SQT file was created</td>
+		</tr>
+		<tr>
+		<td>StaticMod</td>
+		<td>Non-standard amino-acid masses used in identification 
+		(repeat this record if there are multiple non-standard masses)</td>
+		</tr>
+		<tr>
+		<td>DynamicMod</td>
+		<td>List of dynamic modifications used in identification</td>
+		</tr>
+		</tbody>
+		</table>
+		<p>
+		The following field labels are optional, and may appear in the header:
+		</p>
+		<table style="text-align: left;">
+		<caption style="text-align: left;">Optional header field labels</caption>
+		<thead>
+		<tr>
+		<th>Field Label</th>
+		<th>Description</th>
+		</tr>
+		</thead>
+		<tbody>
+		<tr>
+		<td>Comment</td>
+		<td>Remarks. Multiple comment lines are allowed<td>
+		</tr>
+		<tr>
+		<td>DBSeqLength</td>
+		<td>Number of aminio acids in sequence database</td>
+		</tr>
+		<tr>
+		<td>DBLocusCount</td>
+		<td>Number of proteins in sequence database</td>
+		</tr>
+		<tr>
+		<td>DBMD5Sum</td>
+		<td>MD5 checksum of sequence database</td>
+		</tr>
+		<tr>
+		<td>SortedBy</td>
+		<td>Name of field use to sort spectra<td>
+		</tr>
+		<tr>
+		<td>Alg-</td>
+		<td>Field names begining with Alg- are algorithm specific<td>
+		</tr>
+		<tr>
+		<td>*</td>
+		<td>Other field names are allowed, but may not contain white-space<td>
+		</tr>
+		</tbody>
+		</table>
+
+		<h3>Match details</h3>
+		<p>
+		Each spectrum match begins with a spectrum (S) record, 
+		each S record is followed by one or more match (M) records,
+		and each M record is followed by one or more Locus (L) records.
+		The S record contains the scan number and other details for the spectum,
+		the M records contains the highest scoring peptide matches for the parent spectrum,
+		and the L records give the names of proteins containing the parent match peptide.
+		</p>
+		<pre>
+S	45894	45894	2	1	maccoss007	2038.59	9199.5	147.1	153628
+M	  1	 27	2040.244	0.0000	 1.5881	 245.6	 11	34	    V.YKCAADKQDATVVELTNL.T	U
+L	YCR102C
+M	  2	 68	2038.265	0.0116	 1.5698	 208.4	 11	36	    S.TQSGIVAEQALLHSLNENL.S	U
+L	YGR080W
+M	  3	 34	2039.247	0.1582	 1.3369	 239.3	 11	36	    I.NEKTSPALVIPTPDAENEI.S	U
+L	YLR035C
+M	  4	322	2040.365	0.1699	 1.3183	 160.0	  9	36	    I.LKESKSVQPGKAIPDIIES.P	U
+L	YJL126W
+M	  5	 74	2039.453	0.2288	 1.2248	 203.6	 10	32	    D.MISVDLKTPLVIFKCHH.G	U
+L	YAL002W
+M	 65	  1	2041.246	0.4179	 0.9245	 370.2	 13	32	    S.CCGLSLPGLHDLLRHYE.E	U
+L	YLR403W
+S	45904	45904	3	1	maccoss007	2834.54	10103.7	246.4	152668
+M	  1	237	2833.059	0.0000	 1.9175	 273.1	 20	108	        N.NSGSDTVDPLAGLNNLRNSIKSAGNGME.N	U
+L	YDR505C
+M	  2	223	2834.278	0.1390	 1.6510	 274.8	 18	96	        G.HLSRISNIDDILISMRMDAFDSLIG.Y	U
+L	YLR247C
+M	  3	 52	2835.100	0.1503	 1.6292	 324.1	 20	96	  S.KSTTEPIQLNNKHDLHLGQELTEST.V	U
+L	YDR098C-B
+L	YDR365W-B
+L	YER138C
+L	YGR027W-B
+		</pre>
+		</p>
+		<table style="text-align: left;">
+		<caption style="text-align: left;">Record types for scans</caption>
+		<thead>
+		<tr>
+		<th>Symbol</th>
+		<th>Description</th>
+		<th>Generic form</th>
+		<th>Required</th>
+		</tr>
+		</thead>
+		<tbody>
+		<tr>
+		<td>S</td>
+		<td>Spectrum</td>
+		<td><code>S [low scan] [high scan] [charge] [process time] 
+		<br />
+		[server] [experimental neutral mass] [total ion intensity] [lowest Sp] [# of seq. matched]
+		</code></td>
+		<td>yes</td>
+		</tr>
+		<tr>
+		<td>M</td>
+		<td>Match</td>
+		<td><code>M [rank by Xcorr] [rank by Sp] [calculated mass]
+		<br />
+		[DeltaCN] [Xcorr] [Sp] [matched ions] [expected ions] [sequence matched] 
+		<br />
+		[validation status U = unknown, Y = yes, N = no, M = Maybe]
+		</code></td>
+		<td>yes</td>
+		</tr>
+		<tr>
+		<td>L</td>
+		<td>Locus</td>
+		<td><code>L [locus name] [description if available]</code></td>
+		<td>yes</td>
+		</tr>
+		</tbody>
+		</table>
+
+		<h3>Differences between Crux's SQT format and the published
+		  version</h3>
+
+		<ul>
+		<li>
+		Relative to the original specification of SQT, Crux expects an
+		additional field [total ion intensity] in the "S" lines.</li>
+		<li>
+		In the original specification, the FragmentMasses and PrecursorMasses
+		header lines used the values  "AVG" or "MONO", but Crux uses "average"
+		and "mono".</li>
+		</ul>
+			<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="../tutorials/install.html">Installation</a></li>
+				<li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/txt-format.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/txt-format.html
new file mode 100644
index 0000000..690a9fe
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/file-formats/txt-format.html
@@ -0,0 +1,1363 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Tab-delimited File Format</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>Tab-delimited file format</h2>
+		<p>
+		Various programs in Crux report their output and read inputs in tab-delimited text format. Each such file consists of a single line containing the tab-separated names of fields, followed by one or more lines giving the corresponding field values.
+		</p>
+		<table border="1" id="tabformat">
+		<!-- table headers-->
+		<tr>
+		<th rowspan="2">Name</th>
+		<th rowspan="2">Description</th>
+		<th rowspan="2">comet</th>
+		<th rowspan="2">tide</th>
+		<th rowspan="2">cascade-search</th>
+		<th rowspan="2">search-for-xlinks</th>
+		<th rowspan="2">search-for-xlinks (new)</th>
+		<th colspan="4">barista</th>
+		<th rowspan="2">q-ranker</th>
+		<th colspan="3">percolator</th>
+		<th rowspan="2">spectral-counts</th>
+		</tr>
+
+		<tr>
+		<!--barista-->
+		<th>PSM</th>
+		<th>peptides</th>
+		<th>proteins</th>
+		<th>sub-proteins</th>
+		<!--percolator-->
+		<th>PSM</th>
+		<th>peptides</th>
+		<th>proteins</th>
+		</tr>
+
+		<!--"✓"= "✓" or "&#10004"-->
+		<!--"✕"= "&#10005" or "&#10006"-->
+		<!--"–"=&#8211-->
+
+		<tr bgcolor="#DEDEDE">
+		<td>file</td>
+		<td>The name of the file containing the scan.</td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>fileidx</td>
+		<td>The integer index of the file containing the scan.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>scan</td>
+		<td>The identifying number of each scan.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>charge</td>
+		<td>The charge state for this spectrum in this PSM.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>spectrum precursor m/z</td>
+		<td>The observed m/z of the spectrum precursor ion.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>spectrum neutral mass</td>
+		<td>The computed mass of the spectrum precursor at the given charge   state. This is equal to the precursor m/z minus the mass of a proton (1.00727646677 Da), all multiplied by the charge.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>peptide mass</td>
+		<td>The mass of the peptide sequence, computed as the sum of the the amino acid masses plus the mass of water (18.010564684 Da or 18.0153 Da, depending on whether we are using monoisotopic or average mass).</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>delta_cn</td>
+		<td>The normalized difference in XCorr for this PSM
+		relative to the next ranked PSM for the same spectrum
+		and charge. The denominator for normalization is the
+		minimum of the current XCorr and 1.0.
+		If <code>exact-p-value=T</code>, then the difference
+		is computed between -log(p-value) rather than XCorr,
+		and no normalization is applied.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		  <td>delta_lcn</td>
+		<td>Similar to delta_cn, except that the difference
+		is computed with respect to the lowest reported XCorr
+		score for a given spectrum and charge state.</td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>sp score</td>
+		<td>The SEQUEST-type preliminary score.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>sp rank</td>
+		<td>The rank of this PSM when sorted by Sp score.  Note that,
+		  in <code>tide-search</code>, the Sp score is only computed for PSMs
+		  that are reported to the user.  Hence, the rank of the Sp score
+		  will be in the range from 1 to <i>n</i>, where the value
+		  of <i>n</i> is determined by the <code>--top-match</code> parameter.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>xcorr score</td>
+		<td>The SEQUEST-type cross correlation score.
+		This column only appears when <code>exact-p-value=F</code>.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>exact p-value</td>
+		<td>The p-value computed as described in
+		  <a href="http://www.ncbi.nlm.nih.gov/pubmed/24895379">"Computing Exact p-values
+		  for a Cross-correlation Shotgun Proteomics Score Function"</a>.
+		  This column only appears when <code>exact-p-value=T</code>.</td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>refactored xcorr</td>
+		<td>A discretized version of XCorr, used to compute the p-value.
+		This column only appears when <code>exact-p-value=T</code>.</td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>xcorr rank</td>
+		<td>The rank of this PSM when sorted by xcorr.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>p-value</td>
+		<td>The p-value computed from the estimated Weibull parameters of the score distribution for this spectrum.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>percolator score</td>
+		<td>The discriminant score assigned by percolator.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>percolator q-value</td>
+		<td>The q-value assigned by percolator.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>percolator PEP</td>
+		<td>The posterior error probability assigned by percolator.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>q-ranker score</td>
+		<td>The discriminant score assigned by q-ranker.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>q-ranker q-value</td>
+		<td>The q-value assigned by q-ranker.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>q-ranker PEP</td>
+		<td>The posterior error probability estimated from the q-ranker score</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>barista score</td>
+		<td>The discriminant score assigned by barista.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>barista q-value</td>
+		<td>The q-value assigned by barista.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>barista PEP</td>
+		<td>The PEP assigned by barista</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>b/y ions matched</td>
+		<td>The number of b-ions and y-ions in the peptide that have a corresponding peak in the spectrum.</td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>b/y ions total</td>
+		<td>The total number of b- and y-ions predicted for this peptide.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>total matches/spectrum</td>
+		<td>The number of candidate peptides in the database found for this
+		  spectrum, including duplicates.  Note that this is always the number of target candidate
+		  peptides, even if the PSM involves a decoy peptide.</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>distinct matches/spectrum</td>
+		<td>The number of unique candidate peptides in the database found for this
+		  spectrum.  Note that this is always the number of target candidate
+		  peptides, even if the PSM involves a decoy peptide.</td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+
+		<tr>
+		<td>sequence</td>
+		<td>The peptide sequence, not including any modifications.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>modified sequence</td>
+		<td>The peptide sequence, with modifications included.</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		  <td>modifications</td>
+                  <!-- This description needs to be expanded considerably.  -->
+		<td>Variable modifications applied to the sequence.</td>
+		<td></td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>cleavage type</td>
+		<td>The cleavage rules for generating this peptide based on the user-specified enzyme specificity.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>protein id</td>
+		<td>A comma-separated list of proteins in which this peptide
+		  appears. Optionally, the protein name may be followed by a number in parentheses giving the start position of the peptide in the protein.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>flanking aa</td>
+		<td>The amino acids that precede and follow this
+		peptide in the parent protein ID.  If the peptide
+		occurs in more than one protein, then this column
+		will contain a comma-separated list of pairs of amino
+		acids.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>original target sequence</td>
+		<td>The unmodified target sequence. For a target PSM,
+		the value in this column will be identical to the
+		value in the "sequence" column.  For a decoy PSM,
+		this column will contain the corresponding target
+		sequence.</td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>RAW</td>
+		<td>The raw (unnormalized) count of spectra per peptide</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		</tr>
+
+		<tr>
+		<td>SIN</td>
+		<td>A protein quantification score</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>NSAF</td>
+		<td>The normalized spectral abundace factor</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>&#10003</td>
+		<td>&#10003</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		</tr>
+
+		<tr>
+		<td>dNSAF</td>
+		<td>The distributed normalized spectral abundace factor</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>EMPAI</td>
+		<td>The exponentially modified protein abundance index</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		</tr>
+
+		<tr>
+		<td> parsimony rank</td>
+		<td>The protein rank based on its spectral-counts score.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>psm_id</td>
+		<td>PSM identifier.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>protein group number</td>
+		<td>Protein group index</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>peptides-scan.charge</td>
+		<td>Peptides belonging to each protein in the group, with scan and charge (for example, EAMPK-001285.2)</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>proteins</td>
+		<td>Proteins in the protein group. Each protein can be followed by peptides in parenthesis, if they belong only to this particular protein in the group. Since peptides are considered indistinguishable if they have identical amino acid sequences or they differ only by I/L or T/S in the same position in the peptide, the peptides shared by the group may not all be identical.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>parent group numbers</td>
+		<td>The numbers of the protein groups in the barista.target.proteins.txt that are supersets of this group in terms of peptides.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>peptide mass mono</td>
+		<td>Monoisotopic peptide mass</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>peptide mass average</td>
+		<td>Average peptide mass</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>mass error(ppm)</td>
+		<td>The mass error (in ppm) between the observed precursor mass and the
+		    cross-link peptide product</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>protein id(loc)</td>
+		<td>List of protein IDs that give rise to the first and second peptide in the
+		    cross-link peptide product. (loc) indicates the location of the
+		    peptide in the protein.  The ";" separates the protein ids from the
+		    first and second peptide.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>protein id(loc) 1</td>
+		<td>List of protein IDs that give rise to the first peptide in the
+		    cross-link peptide product. (loc) indicates the location of the
+		    peptide in the protein</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>protein id(loc) 2</td>
+		<td>List of protein IDs that give rise to the second peptide in the
+		    cross-link peptide product. (loc) indicates the location of the
+		    peptide in the protein</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>by total</td>
+		<td>Total number of b-y ions in product</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>by observable (0-1200)</td>
+		<td>Total number of b and y ions observable in the 0-1200 m/z range</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>by observable bin (0-1200)</td>
+		<td>Total number of b and y ions observable in the 0-1200 m/z range
+		  using 1 Da bins</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>by observable (0-max)</td>
+		<td>Total number of b and y ions observable in the entire m/z range</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>by observable bin (0-max)</td>
+		<td>Total number of b and y ions observable in the entire m/z range
+		  using 1 Da bins</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>by observed bin</td>
+		<td>Total number of b-y ions observed in spectrum</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>ion current total</td>
+		<td>Total ion current for spectrum</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>ion current observed</td>
+		<td>Total ion current observed for matching b-y ions</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>ions observable bin (0-1200)</td>
+		<td>Total ions observable (b, y, flanks, and neutral losses) within 0-1200 m/z range</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		</table> 
+<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="../tutorials/install.html">Installation</a></li>
+				<li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/fileformats.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/fileformats.html
new file mode 100644
index 0000000..51aaf71
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/fileformats.html
@@ -0,0 +1,387 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux File Formats</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="index.html">Home</a></li>
+			    <li><a href="download.html">Download</a></li>
+			    <li><a href="fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<div id="content">
+			<h2>File formats</h2>
+
+			<table id="fileFormatsTable">
+			<tr>
+			<td> </td>
+			<td>bullseye</td>
+			<td>tide-index</td>
+			<td>tide-search</td>
+			<td>comet</td>
+			<td>percolator</td>
+			<td>q-ranker</td>
+			<td>barista</td>
+			<td>search-for-xlinks</td>
+			<td>spectral-counts</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="file-formats/ms2-format.html">MS1</a>
+			</td>
+			<td>in</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="file-formats/ms2-format.html">MS2</a>
+			(<a href="example-files/demo.ms2">sample</a>) / CMS2
+			</td>
+			<td>in/out</td>
+			<td> </td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="http://www.matrixscience.com/help/data_file_help.html">MGF</a>
+			</td>
+			<td>in/out</td>
+			<td> </td>
+			<td>in</td>
+			<td> </td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="http://www.psidev.info/mzml_1_0_0">mzML</a>,
+			<a href="http://tools.proteomecenter.org/wiki/index.php?title=Formats:mzXML">mzXML</a>
+			</td>
+			<td>in</td>
+			<td> </td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			</tr>
+
+			<tr>
+			<td>
+			Thermo .raw files
+			(Windows only)
+			</td>
+			<td>in</td>
+			<td> </td>
+			<td>in</td>
+			<td>in</td>
+			<td> </td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="http://proteowizard.sourceforge.net/formats.shtml">Other
+			  proprietary vendor formats</a>  (Windows only)
+			</td>
+			<td> </td>
+			<td> </td>
+			<td>in</td>
+			<td> </td>
+			<td> </td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="file-formats/fasta-format.html">FASTA</a>
+			(<a href="file-formats/sample.fasta">sample</a>)
+			</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td>in</td>
+			<td> </td>
+			</tr>
+
+			<tr>
+			<td>
+			database index
+			</td>
+			<td> </td>
+			<td>out</td>
+			<td>in</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="file-formats/txt-format.html">Tab-delimited text</a>
+			(<a href="example-files/search.target.txt">sample</a>)
+			</td>
+			<td> </td>
+			<td> </td>
+			<td>out</td>
+			<td>out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>out</td>
+			<td>in/out</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="http://tools.proteomecenter.org/wiki/index.php?title=Formats:pepXML">
+			pepXML</a>
+			</td>
+			<td> </td>
+			<td> </td>
+			<td>out</td>
+			<td>out</td>
+			<td>in/out</td>
+			<td>out</td>
+			<td>out</td>
+			<td> </td>
+			<td>in</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="https://github.com/percolator/percolator/wiki/Interface">PIN</a>
+			</td>
+			<td> </td>
+			<td> </td>
+			<td>out</td>
+			<td> </td>
+			<td>in</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="https://github.com/percolator/percolator/wiki/Interface">POUT</a>
+			</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td>out</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="http://www.psidev.info/mzidentml">mzIdentML</a>
+			</td>
+			<td> </td>
+			<td> </td>
+			<td>out</td>
+			<td>out</td>
+			<td>out</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td>in</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="file-formats/sqt-format.html">SQT</a>
+			</td>
+			<td> </td>
+			<td> </td>
+			<td>out</td>
+			<td>out</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td> </td>
+			<td>in</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="file-formats/features.html">Feature file</a>
+			</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td>in/out</td>
+			<td>out</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="file-formats/barista-xml-format.html">Barista XML</a>
+			</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td>out</td>
+			<td> </td>
+			<td> </td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="file-formats/parameter-file.html">Crux parameters</a>
+			(<a href="example-files/default.params">sample</a>)
+			</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			</tr>
+
+			</table>
+		</div>
+	<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/generate-peptides.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/generate-peptides.html
new file mode 100644
index 0000000..dc0ec41
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/generate-peptides.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>generate-peptides</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>generate-peptides</h1>
+<h2>Usage:</h2>
+<p><code>crux generate-peptides [options] <protein fasta file></code></p>
+<h2>Description:</h2>
+<p>This command takes as input a protein FASTA file and outputs the corresponding list of peptides, as well as a matched list of decoy peptides and decoy proteins. Decoys are generated either by reversing or shuffling the non-terminal amino acids of each peptide. The program will shuffle each peptide multiple times to attempt to ensure that there is no overlap between the target and decoy peptides. For homopolymers, this is not possible. In this case, the occurrence of these target/decoy [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>protein fasta file</code> – The name of the file in FASTA format from which to retrieve proteins.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>generate-peptides.target.txt</code> – A text file containing the target peptides, one per line. Each line has three tab-delimited columns, containing the peptide sequence, the m+h mass of the unmodified peptide, and a comma-delimited list of protein IDs in which the peptide occurs.</li>
+  <li><code>generate-peptides.decoy.txt</code> – A text file containing the decoy peptides, one per line. Each line has three tab-delimited columns, containing the peptide sequence, the m+h mass of the unmodified peptide, and a comma-delimited list of protein IDs in which the peptide occurs. There is a one-to-one correspondence between targets and decoys.</li>
+  <li><code>generate-peptides.proteins.decoy.txt</code> – a FASTA format file containing decoy proteins, in which all of the peptides have been replaced with their shuffled or reversed counterparts. Note that this file will only be created if the enzyme specificity is "full-digest" and no missed cleavages are allowed.</li>
+  <li><code>generate-peptides.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>generate-peptides.log.txt</code> – a log file containing a copy of all messages that were printed to the screen during execution.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Peptide properties</h3>
+<ul>
+  <li class="nobullet"><code>--min-mass <float></code> – The minimum mass (in Da) of peptides to consider. Default = <code>200</code>.</li>
+  <li class="nobullet"><code>--max-mass <float></code> – The maximum mass (in Da) of peptides to consider. Default = <code>7200</code>.</li>
+  <li class="nobullet"><code>--min-length <integer></code> – The minimum length of peptides to consider. Default = <code>6</code>.</li>
+  <li class="nobullet"><code>--max-length <integer></code> – The maximum length of peptides to consider. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--isotopic-mass average|mono</code> – Specify the type of isotopic masses to use when calculating the peptide mass. Default = <code>mono</code>.</li>
+  <li class="nobullet"><code>--clip-nterm-methionine T|F</code> – When set to T, for each protein that begins with methionine, tide-index will put two copies of the leading peptide into the index, with and without the N-terminal methionine. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Decoy database generation</h3>
+<ul>
+  <li class="nobullet"><code>--seed <string></code> – When given a unsigned integer value seeds the random number generator with that value. When given the string "time" seeds the random number generator with the system time. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--decoy-format none|shuffle|peptide-reverse|protein-reverse</code> – Include a decoy version of every peptide by shuffling or reversing the target sequence or protein. In shuffle or peptide-reverse mode, each peptide is either reversed or shuffled, leaving the N-terminal and C-terminal amino acids in place. Note that peptides appear multiple times in the target database are only shuffled once. In peptide-reverse mode, palindromic peptides are shuffled.  [...]
+  <li class="nobullet"><code>--keep-terminal-aminos N|C|NC|none</code> – When creating decoy peptides using decoy-format=shuffle or decoy-format=peptide-reverse, this option specifies whether the N-terminal and C-terminal amino acids are kept in place or allowed to be shuffled or reversed. For a target peptide "EAMPK" with decoy-format=peptide-reverse, setting keep-terminal-aminos to "NC" will yield "EPMAK"; setting it to "C" will yield "PMAEK"; setting it to "N" will yield "EKPMA" [...]
+</ul>
+</li>
+<li class="nobullet">
+<h3>Enzymatic digestion</h3>
+<ul>
+  <li class="nobullet"><code>--enzyme no-enzyme|trypsin|trypsin/p|chymotrypsin|elastase|clostripain|cyanogen-bromide|iodosobenzoate|proline-endopeptidase|staph-protease|asp-n|lys-c|lys-n|arg-c|glu-c|pepsin-a|elastase-trypsin-chymotrypsin|custom-enzyme</code> – Specify the enzyme used to digest the proteins in silico. Available enzymes (with the corresponding digestion rules indicated in parentheses) include no-enzyme ([X]|[X]), trypsin ([RK]|{P}), trypsin/p ([RK]|[]), chymotrypsin  [...]
+  <li class="nobullet"><code>--custom-enzyme <string></code> – Specify rules for in silico digestion of protein sequences. Overrides the enzyme option. Two lists of residues are given enclosed in square brackets or curly braces and separated by a |. The first list contains residues required/prohibited before the cleavage site and the second list is residues after the cleavage site. If the residues are required for digestion, they are in square brackets, '[' and ']'. If the re [...]
+  <li class="nobullet"><code>--digestion full-digest|partial-digest|non-specific-digest</code> – Specify whether every peptide in the database must have two enzymatic termini (full-digest) or if peptides with only one enzymatic terminus are also included (partial-digest). Default = <code>full-digest</code>.</li>
+  <li class="nobullet"><code>--missed-cleavages <integer></code> – Maximum number of missed cleavages per peptide to allow in enzymatic digestion. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/get-ms2-spectrum.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/get-ms2-spectrum.html
new file mode 100644
index 0000000..a42c4a8
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/get-ms2-spectrum.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>get-ms2-spectrum</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>get-ms2-spectrum</h1>
+<h2>Usage:</h2>
+<p><code>crux get-ms2-spectrum [options] <ms2 file></code></p>
+<h2>Description:</h2>
+<p>Extract one or more MS-MS spectra from an MS2 file by scan number. Optionally output summary statistics for each spectrum.</p>
+<h2>Input:</h2>
+<ul>
+  <li><code>ms2 file</code> – File containing spectra to be searched.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – the requested spectrum or spectra in MS2 format.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>get-ms2-spectrum options</h3>
+<ul>
+  <li class="nobullet"><code>--stats T|F</code> – Rather than the spectrum, output summary statistics to standard output. Each statistic is placed on a separate line, in the format <name>:<value> (e.g. "TIC:1000.0").<br>The following statistics are reported for the entire spectrum:<ul><li>Precursor m/z</li><li>Total Ion Current</li><li>Base Peak Intensity</li><li>Number of peaks</li><li>Minimum m/z</li><li>Maximum m/z</li></ul>In addition, for each possible spectrum charge state, t [...]
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search parameters</h3>
+<ul>
+  <li class="nobullet"><code>--scan-number <string></code> – A single scan number or a range of numbers to be searched. Range should be specified as 'first-last' which will include scans 'first' and 'last'. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--remove-precursor-tolerance <float></code> – This parameter specifies the tolerance (in Th) around each precursor m/z that is removed when the --remove-precursor-peak option is invoked. Default = <code>1.5</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+  <li class="nobullet"><code>--use-z-line T|F</code> – Specify whether, when parsing an MS2 spectrum file, Crux obtains the precursor mass information from the "S" line or the "Z" line.  Default = <code>true</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/glossary.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/glossary.html
new file mode 100644
index 0000000..998f042
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/glossary.html
@@ -0,0 +1,165 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux glossary</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="index.html">Home</a></li>
+			    <li><a href="download.html">Download</a></li>
+			    <li><a href="fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		  <h2>Crux glossary</h2>
+
+		  <h3>Mass spectrometry terminology</h3>
+
+		  <ul>
+
+		    <li><b>c-term peptide</b>: The last peptide in the protein,
+		      occurring at the c-terminal end of the protein.</li>
+		    
+		    <li><b>decoy peptide</b>: A shuffled, reversed or randomly
+		      generated peptide sequence. Matches to decoy peptides are used
+		      for two purposes: to estimate statistical confidence measures
+		      such as the false discovery rate, and to train machine learning
+		      methods to recognize correctly identified spectra.</li>
+
+		    <li><b>modification</b>: A chemical modification of a single amino
+		      acid, typically corresponding to the addition of a molecular
+		      group to the amino acid side chain.</li>
+		    
+		    <li><b>n-term peptide</b>: The first peptide in the protein,
+		      occurring at the n-terminal end of the protein.</li>
+		    
+		    <li><b>peptide</b>: A subsequence of a protein.</li>
+		    
+		    <li><b>peptide-spectrum match (PSM)</b>: An observed spectrum
+		      paired with a peptide sequence, along with a score quantifying
+		      the quality of the match.</li>
+
+		    <li><b>static modification</b>: A chemical modification of a
+		      single amino that is expected to occur on every instance of that
+		      amino acid.  A common example is carbamidomethylation of
+		      cysteine, which adds 57.02146 Da to the mass of every
+		      cysteine.</li>
+
+		    <li><b>target peptide</b>: A real peptide, usually drawn from a
+		      protein database.</li>
+
+		    <li><b>trypsin</b>: An enzyme used to cleave a protein into
+		      peptides.</li>
+		    
+		    <li><b>variable modification</b>: A chemical modification of a
+		      single amino that is expected to occur on some instances of that
+		      amino acid but not others.  A common example is phosphorylation
+		      of serine, threonine or tyrosine, which adds a mass of 79.966331
+		      Da to each of those amino acids.</li>
+
+		  </ul>
+
+		  <h3>Analysis terminology</h3>
+
+		  <ul>
+
+		  <li><b>false discovery rate (FDR)</b>: Estimated proportion of
+		    incorrectly identifications among a set of PSMs, peptides or
+		    proteins.</li>
+
+		  <li><b>support vector machine (SVM)</b>: A machine learning method
+		    that learns to classify data objects into two groups.</li>
+
+		  </ul>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/hardklor.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/hardklor.html
new file mode 100644
index 0000000..fc8f219
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/hardklor.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>hardklor</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>hardklor</h1>
+<h2>Usage:</h2>
+<p><code>crux hardklor [options] <spectra></code></p>
+<h2>Description:</h2>
+<p>Hardklör analyzes high-resolution mass spectra, identifying protein or peptide isotope distributions and determining the corresponding monoisotopic masses and charge states. The algorithm aims to identify persistence peptide isotope distribution (PPIDs), i.e., isotope distributions that recur over multiple scans. Hardklör is specifically designed to handle overlapping isotope distributions in a single spectrum. A detailed description of the Hardklör algorithm is given i [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>spectra</code> – The name of a file from which to parse high-resolution spectra. The file may be in MS1 (.ms1), binary MS1 (.bms1), compressed MS1 (.cms1), or mzXML (.mzXML) format.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>hardklor.mono.txt</code> – a tab-delimited text file containing one line for each isotope distribution. The columns appear in the following order:<ol><li><strong>scan</strong>: The scan number assigned to this spectrum in the input file.</li><li><strong>retention time</strong>: The time (in seconds) at which the spectrum was collected.</li><li><strong>mass</strong>: The uncharged monoisotopic mass of the protein or peptide.</li><li><strong>charge</strong>: The inferred  [...]
+  <li><code>hardklor.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>hardklor.log.txt</code> – a log file containing a copy of all messages that were printed to stderr.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>hardklor options</h3>
+<ul>
+  <li class="nobullet"><code>--hardklor-algorithm basic|version1|version2</code> – Determines which spectral feature detection algorithm to use. Different results are possible with each algorithm, and there are pros and cons to each. There are three algorithms to choose from:<ul><li>basic – Performs unoptimized deconvolution and is provided for legacy purposes only.</li><li>version1 – Uses the optimizations developed during the 1.0+ series. It is very accurate, but has  [...]
+  <li class="nobullet"><code>--averagine-mod <string></code> – Defines alternative averagine models in the analysis that incorporate additional atoms and/or isotopic enrichments. Modifications are represented as text strings. Inclusion of additional atoms in the model is done using by entering an atomic formula, such as: PO2 or Cl. Inclusion of isotopic enrichment to the model is done by specifying the percent enrichment (as a decimal) followed by the atom being enriched and  [...]
+  <li class="nobullet"><code>--boxcar-averaging <integer></code> – Boxcar averaging is a sliding window that averages n adjacent spectra prior to feature detection. Averaging generally improves the signal-to-noise ratio of features in the spectra, as well as improving the shape of isotopic envelopes. However, averaging will also change the observed peak intensities. Averaging with too wide a window will increase the occurrence of overlapping features and broaden the chromatog [...]
+  <li class="nobullet"><code>--boxcar-filter <integer></code> – This parameter is only functional when boxcar-averaging is used. The filter will remove any peaks not seen in n scans in the boxcar window. The effect is to reduce peak accumulation due to noise and reduce chromatographic broadening of peaks. Caution should be used as over-filtering can occur. The suggested number of scans to set for filtering should be equal to or less than the boxcar-averaging window size. A va [...]
+  <li class="nobullet"><code>--boxcar-filter-ppm <float></code> – This parameter is only functional when boxcar-filter is used. The value specifies the mass tolerance in ppm for declaring a peak the same prior to filtering across all scans in the boxcar window. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--centroided T|F</code> – Indicates whether the data contain profile or centroided peaks. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--cdm B|F|P|Q|S</code> – Choose the charge state determination method. There are five methods to choose from:<ul><li>B – Basic method, assume all charge states are possible.</li><li>F – Fast Fourier transform.</li><li>P – Patterson algorithm.</li><li>Q – QuickCharge method, uses inverse peak distances.</li><li>S – Senko method, or combined Fast Fourier Transform and Patterson algorithm.</li></ul> Default = <code>Q</code>.</li>
+  <li class="nobullet"><code>--min-charge <integer></code> – Specifies the minimum charge state to allow when finding spectral features. It is best to set this value to the lowest assumed charge state to be present. If set higher than actual charge states that are present, those features will not be identified or incorrectly assigned a different charge state and mass. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--max-charge <integer></code> – Specifies the maximum charge state to allow when finding spectral features. It is best to set this value to a practical number (i.e. do not set it to 20 when doing a tryptic shotgun analysis). If set higher than actual charge states that are present, the algorithm will perform significantly slower without any improvement in results. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--corr <float></code> – Sets the correlation threshold (cosine similarity) for accepting each predicted feature. Default = <code>0.85</code>.</li>
+  <li class="nobullet"><code>--depth <integer></code> – Sets the depth of combinatorial analysis. For a given set of peaks in a spectrum, search for up to this number of combined peptides that explain the observed peaks. The analysis stops before depth is reached if the current number of deconvolved features explains the observed peaks with a correlation score above the threshold defined with the correlation parameter. Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--distribution-area T|F</code> – When reporting each feature, report abundance as the sum of all isotope peaks. The value reported is the estimate of the correct peak heights based on the averagine model scaled to the observed peak heights. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--hardklor-data-file <string></code> – Specifies an ASCII text file that defines symbols for the periodic table. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--instrument fticr|orbitrap|tof|qit</code> – Indicates the type of instrument used to collect data. This parameter, combined with the resolution parameter, define how spectra will be centroided (if you provide profile spectra) and the accuracy when aligning observed peaks to the models. Default = <code>fticr</code>.</li>
+  <li class="nobullet"><code>--isotope-data-file <string></code> – Specifies an ASCII text file that can be read to override the natural isotope abundances for all elements. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--max-features <integer></code> – Specifies the maximum number of models to build for a set of peaks being analyzed. Regardless of the setting, the number of models will never exceed the number of peaks in the current set. However, as many of the low abundance peaks are noise or tail ends of distributions, defining models for them is detrimental to the analysis. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--mzxml-filter <integer></code> – Filters the spectra prior to analysis for the requested MS/MS level. For example, if the data contain MS and MS/MS spectra, setting mzxml-filter = 1 will analyze only the MS scan events. Setting mzxml-filter = 2 will analyze only the MS/MS scan events. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--mz-max <float></code> – Constrains the search in each spectrum to signals below this value in Thomsons. Setting to 0 disables this feature. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--mz-min <float></code> – Constrains the search in each spectrum to signals above this value in Thomsons. Setting to 0 disables this feature. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--mz-window <float></code> – Only used when algorithm = version1. Defines the maximum window size in Thomsons to analyze when deconvolving peaks in a spectrum into features. Default = <code>4</code>.</li>
+  <li class="nobullet"><code>--resolution <float></code> – Specifies the resolution of the instrument at 400 m/z for the data being analyzed. Default = <code>100000</code>.</li>
+  <li class="nobullet"><code>--scan-range-max <integer></code> – Used to restrict analysis to spectra with scan numbers below this parameter value. A value of 0 disables this feature. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--scan-range-min <integer></code> – Used to restrict analysis to spectra with scan numbers above this parameter value. A value of 0 disables this feature. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--sensitivity <integer></code> – Set the sensitivity level. There are four levels: 0 (low), 1 (moderate), 2 (high), and 3 (max). Increasing the sensitivity will increase computation time, but will also yield more isotope distributions. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--signal-to-noise <float></code> – Filters spectra to remove peaks below this signal-to-noise ratio prior to finding features. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--smooth <integer></code> – Uses Savitzky-Golay smoothing on profile peak data prior to centroiding the spectra. This parameter is recommended for low resolution spectra only. Smoothing data causes peak depression and broadening. Only use odd numbers for the degree of smoothing (as it defines a window centered on each data point). Higher values will produce smoother peaks, but with greater depression and broadening. Setting this parameter to 0 dis [...]
+  <li class="nobullet"><code>--sn-window <float></code> – Set the signal-to-noise window length (in m/z). Because noise may be non-uniform across a spectrum, this value adjusts the segment size considered when calculating a signal-over-noise ratio. Default = <code>250</code>.</li>
+  <li class="nobullet"><code>--static-sn T|F</code> – Applies the lowest noise threshold of any sn_window across the entire mass range for a spectrum. Setting this parameter to 0 turns off this feature, and different noise thresholds will be used for each local mass window in a spectrum. Default = <code>true</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/crux-logo-skyline.png b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/crux-logo-skyline.png
new file mode 100644
index 0000000..35925e5
Binary files /dev/null and b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/crux-logo-skyline.png differ
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/crux-logo-text.png b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/crux-logo-text.png
new file mode 100644
index 0000000..9734858
Binary files /dev/null and b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/crux-logo-text.png differ
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/crux-logo.png b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/crux-logo.png
new file mode 100644
index 0000000..4630dfb
Binary files /dev/null and b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/crux-logo.png differ
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/hamburger-menu.png b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/hamburger-menu.png
new file mode 100644
index 0000000..31aff54
Binary files /dev/null and b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/hamburger-menu.png differ
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/linkicon.png b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/linkicon.png
new file mode 100644
index 0000000..b882099
Binary files /dev/null and b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/linkicon.png differ
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/schematic.png b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/schematic.png
new file mode 100644
index 0000000..f151dfd
Binary files /dev/null and b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/schematic.png differ
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/stored-xcorr.png b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/stored-xcorr.png
new file mode 100644
index 0000000..a341958
Binary files /dev/null and b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/stored-xcorr.png differ
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/tutorialicon.png b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/tutorialicon.png
new file mode 100644
index 0000000..4b9a603
Binary files /dev/null and b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/images/tutorialicon.png differ
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/index.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/index.html
new file mode 100644
index 0000000..a092a8e
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/index.html
@@ -0,0 +1,390 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux tandem mass spectrometry analysis software</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+<!--(index.html only) Start JS function for dynamically resizing the image map that links elements on schematic.png-->
+<script type="text/javascript">
+window.onload = function () {
+    var ImageMap = function (map, img) {
+		var n,
+			areas = map.getElementsByTagName('area'),
+			len = areas.length,
+			coords = [],
+			previousWidth = 1125; // width of original schematic.png
+		for (n = 0; n < len; n++) {
+			coords[n] = areas[n].coords.split(',');
+		}
+		this.resize = function () {
+			var n, m, clen,
+				x = img.offsetWidth / previousWidth;
+			for (n = 0; n < len; n++) {
+				clen = coords[n].length;
+				for (m = 0; m < clen; m++) {
+					coords[n][m] *= x;
+				}
+				areas[n].coords = coords[n].join(',');
+			}
+			previousWidth = img.width;
+			return true;
+		};
+		window.onresize = this.resize;
+	}
+
+	imageMap = new ImageMap(document.getElementById('schematic_map'), document.getElementById('schematic_image'));
+	imageMap.resize();
+}
+</script>
+<!--(index.html only) End JS -->
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="index.html">Home</a></li>
+			    <li><a href="download.html">Download</a></li>
+			    <li><a href="fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<div id="schematic">
+			<img id="schematic_image" src="images/schematic.png" usemap="#commands-files" border="0" width="100%" alt="" />
+			<map name="commands-files" id="schematic_map">
+			  <area shape="rect" coords="253,135,349,169" alt="tide-index" href="commands/tide-index.html">
+			  <area shape="rect" coords="260,247,342,278" alt="bullseye" href="commands/bullseye.html">
+			  <area shape="rect" coords="510,100,612,132" alt="tide-search" href="commands/tide-search.html">
+			  <area shape="rect" coords="528,191,595,222" alt="comet" href="commands/comet.html">
+			  <area shape="rect" coords="512,281,613,335" alt="search-for-xlinks" href="commands/search-for-xlinks.html">
+			  <area shape="rect" coords="776,100,873,132" alt="percolator" href="commands/percolator.html">
+			  <area shape="rect" coords="791,160,861,192" alt="barista" href="commands/barista.html">
+			  <area shape="rect" coords="783,222,866,252" alt="q-ranker" href="commands/q-ranker.html">
+			  <area shape="rect" coords="784,281,867,334" alt="spectral-counts" href="commands/spectral-counts.html">
+			</map>
+			<img src="images/crux-logo.png" style="width:200px; float:left; padding:10px;">
+			<p>The Crux mass spectrometry analysis toolkit is an open source project that aims to provide users with a cross-platform suite of analysis tools for interpreting protein mass spectrometry data.  The toolkit includes several search engines for both standard and cross-linked database search, as well as a variety of pre- and post-processing engines for assigning high-resolution precursor masses to spectra, assigning statistical confidence estimates to spectra, peptides and proteins, and [...]
+			<br />
+			<span class="indentcitation">Christopher Y. Park, Aaron A. Klammer, Lukas Käll, Michael
+			J. MacCoss and William Stafford
+			Noble.  <a href="http://noble.gs.washington.edu/papers/park2008rapid.html">"Rapid
+			and accurate peptide identification from tandem mass spectra."</a>
+			<i>Journal of Proteome Research.</i> 7(7):3022-3027, 2008.</li></span>
+			<br /><br />
+		
+			For a more up-to-date description of Crux, please read:<br />
+
+			<span class="indentcitation">Sean McIlwain, Kaipo Tamura, Attila Kertesz-Farkas,
+			Charles E.  Grant, Benjamin Diament, Barbara Frewen, J. Jeffry
+			Howbert, Michael R. Hoopmann, Lukas Käll, Jimmy K. Eng, Michael
+			J. MacCoss and William Stafford
+			Noble.  <a href="http://pubs.acs.org/doi/abs/10.1021/pr500741y">"Crux:
+			rapid open source protein tandem mass spectrometry
+			analysis."</a> <i>Journal of Proteome Research.</i>
+			13(10):4488-4491, 2014.</span>
+			</p>
+		</div>
+
+
+		<br />
+		<p/>
+		Crux is provided as a single executable that supports the following
+		commands:</p>
+		<table id="commandstable">
+
+			<tr>
+			<td colspan="2"><b>Primary commands</b></td>
+			</tr>
+
+			<tr>
+			<td><a href="commands/bullseye.html">bullseye</a></td>
+			<td>Assign high resolution precursor m/z values to MS/MS data using the Hardklör algorithm.
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/tide-index.html">tide-index</a></td>
+			<td>
+			Create an index of all peptides in a fasta file, for use in subsequent
+			calls to <code>tide-search</code>.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/tide-search.html">tide-search</a></td>
+			<td>
+			Search a collection of spectra against a sequence database, provided
+			either as a FASTA file or an index, returning a collection of
+			peptide-spectrum matches (PSMs).  This is a fast search engine, but it
+			runs most quickly if provided with a peptide index built
+			with <code>tide-index</code>.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/cascade-search.html">cascade-search</a></td>
+			<td>
+			An iterative procedure for incorporating information about peptide
+			groups into the database search and confidence estimation
+			procedure.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/comet.html">comet</a></td>
+			<td>
+			Search a collection of spectra against a sequence database, returning
+			a collection of PSMs.  This search engine runs directly on a protein
+			database in FASTA format.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/percolator.html">percolator</a></td>
+			<td>
+			Re-rank and assign confidence estimates to a collection of PSMs using
+			the Percolator algorithm.  Optionally, also produce protein rankings
+			using the Fido algorithm.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/q-ranker.html">q-ranker</a></td>
+			<td>
+			Re-rank a collection of PSMs using the Q-ranker algorithm.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/barista.html">barista</a></td>
+			<td>
+			Rank PSMs, peptides and proteins, assigning a confidence measure to each
+			identification.</td></tr> 
+
+			<tr>
+			<td>
+			<a href="commands/search-for-xlinks.html">search-for-xlinks</a></td>
+			<td>
+			Search a collection of spectra against a sequence database, finding
+			cross-linked peptide matches.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/spectral-counts.html">spectral-counts</a></td>
+			<td>
+			Quantify peptides or proteins using one of three spectral counting
+			methods.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/pipeline.html">pipeline</a></td>
+			<td>
+			Given one or more sets of tandem mass spectra as well as a protein
+			database, this command runs a series of Crux tools and reports all of
+			the results in a single output directory. 
+			</td></tr>
+
+			<tr>
+			<td colspan="2"><b>Utilities</b></td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/assign-confidence.html">assign-confidence</a></td>
+			<td>
+			Assign statistical confidence measures to each PSM in a given set.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/generate-peptides.html">generate-peptides</a></td>
+			<td>
+			Extract from a given set of protein sequences a list of target and
+			decoy peptides fitting the specified criteria.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/get-ms2-spectrum.html">get-ms2-spectrum</a></td>
+			<td>
+			Extract one or more fragmentation spectra, specified by scan number, from
+			an <code>MS2</code> file.</td>
+			</tr>
+
+			<tr>
+			<td><a href="commands/hardklor.html">hardklör</a></td>
+			<td>Identify isotopic distributions from high-resolution mass spectra.</td>
+			</tr>
+
+			<tr>
+			<td><a href="commands/make-pin.html">make-pin</a></td>
+			<td>Given a set of search results files, generate a pin file for input to
+			<code>crux percolator</code></td>
+			</tr>
+
+      <tr>
+      <td><a href="commands/param-medic.html">param-medic</a></td>
+      <td>Examine the spectra in a file to estimate the best precursor
+      and fragment error tolerances for database search.</td>
+      </tr>
+
+			<tr>
+			<td>
+			<a href="commands/predict-peptide-ions.html">predict-peptide-ions</a></td>
+			<td>
+			Given a peptide and a charge state, predict the m/z values of the
+			resulting fragment ions.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/print-processed-spectra.html">print-processed-spectra</a></td>
+			<td>
+			Process spectra as for scoring xcorr and print the results to a file.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/psm-convert.html">psm-convert</a></td>
+			<td>
+			Convert a file containing peptide-spectrum matches (PSMs) from one
+			format to another.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/subtract-index.html">subtract-index</a></td>
+			<td>Subtract one index file from another, assuming both were generated
+			by tide-index.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/xlink-assign-ions.html">xlink-assign-ions</a></td>
+			<td>Given a spectrum and a pair of cross-linked peptides, assign theoretical
+			ion type labels to peaks in the observed spectrum.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/xlink-score-spectrum.html">xlink-score-spectrum</a></td>
+			<td>Takes a defined cross-linked peptide, a spectra file, and a scan number,
+			and will calculate the XCorr score a number of different ways.</td>
+			</tr>
+
+			<tr>
+			<td>
+			version</td>
+			<td>
+			Print the Crux version number to standard output, then exit.</td>
+			</tr>
+
+			<tr>
+			<td colspan="2"><b>Utilities for processing tab-delimited text files</b>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/extract-columns.html">extract-columns</a></td>
+			<td>Print specified columns from a tab-delimited file.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/extract-rows.html">extract-rows</a></td>
+			<td>Print specified rows from a tab-delimited file.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/stat-column.html">stat-column</a></td>
+			<td>Collect summary statistics from a column in a tab-delimited file.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/sort-by-column.html">sort-by-column</a></td>
+			<td>Sort a tab-delimited file by a column.</td>
+			</tr>
+
+		</table>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/make-pin.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/make-pin.html
new file mode 100644
index 0000000..dbf3496
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/make-pin.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>make-pin</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>make-pin</h1>
+<h2>Usage:</h2>
+<p><code>crux make-pin [options] <target input></code></p>
+<h2>Description:</h2>
+<p>Make-pin is a utility program that combines a collection of target and decoy peptide-spectrum matches (PSMs) into a single file in pin format, according to <a href="https://github.com/percolator/percolator/wiki/Interface">this format</a>. The resulting file can be provided as input to <code><a href="percolator.html">crux percolator</a></code>.</p><p><code>make-pin</code> requires as input two sets of PSMs, one set derived from matching observed spectra against real ("target" [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>target input</code> – One or more files, each containing a collection of peptide-spectrum matches (PSMs) in <a href="../file-formats/txt-format.html">tab-delimited text</a>, <a href="http://tools.proteomecenter.org/wiki/index.php?title=Formats:pepXML">PepXML</a>, or <a href="http://www.psidev.info/mzidentml">mzIdentML</a> format. In tab-delimited text format, only the specified score column is required. However if --estimation-method is tdc, then the columns "scan" and  [...]
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>make-pin.pin</code> – a tab-delimited file containing the input target and decoy PSMs in pin format. This file can be changed to an absolute path (see --output-file option).</li>
+  <li><code>make-pin.params.txt</code> – a file containing the name and value of all parameters for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>make-pin.log.txt</code> – a log file containing a copy of all messages that were printed to standard error.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--top-match <integer></code> – Specify the number of matches to report for each spectrum. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--list-of-files T|F</code> – Specify that the search results are provided as lists of files, rather than as individual files. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--output-file <string></code> – Path where pin file will be written instead of make-pin.pin. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/mstoolkit.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/mstoolkit.html
new file mode 100644
index 0000000..06696e6
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/mstoolkit.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>MSToolKit</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="index.html">Home</a></li>
+			    <li><a href="download.html">Download</a></li>
+			    <li><a href="fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>MSToolkit</h2>
+		<p>
+		MSToolkit is a library for handling mass spectrometry data in various file
+		formats. Crux is capable of using MSToolkit to parse spectrum files. The
+		ProteoWizard parser is used by default, but the MSToolkit parser can be used by
+		commands that support the <span class="code">spectrum-parser</span> parameter.
+		</p>
+		<p>
+		The following is a list of spectrum file formats supported by MSToolkit.
+		</p>
+		<ul>
+		<li>MS1/CMS1/BMS1</li>
+		<li><a href="file-formats/ms2-format.html">MS2</a>/CMS2/BMS2</li>
+		<li>ZS</li>
+		<li>UZS</li>
+		<li>MSMAT</li>
+		<li>RAW</li>
+		<li><a href="http://tools.proteomecenter.org/wiki/index.php?title=Formats:mzXML">MZXML[.GZ]</a></li>
+		<li>MZ5</li>
+		<li><a href="http://www.psidev.info/mzml_1_0_0">MZML[.GZ]</a></li>
+		<li><a href="http://www.matrixscience.com/help/data_file_help.html">MGF</a> (Mascot Generic Format)</li>
+		<li>SQLITE3</li>
+		<li>PSM</li>
+		</ul>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/param-medic.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/param-medic.html
new file mode 100644
index 0000000..894cd35
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/param-medic.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>param-medic</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>param-medic</h1>
+<h2>Usage:</h2>
+<p><code>crux param-medic [options] <spectrum-file>+</code></p>
+<h2>Description:</h2>
+<p>Examine the spectra in a file to estimate the best precursor and fragment error tolerances for database search.</p>
+<h2>Input:</h2>
+<ul>
+  <li><code>spectrum-file+</code> – File from which to parse fragmentation spectra.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – the estimated parameter values for precursor mass tolerance (in ppm) and fragment bin size (in Th), as well as the standard deviations of the estimated error distributions for precursor and fragment masses.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>param-medic options</h3>
+<ul>
+  <li class="nobullet"><code>--pm-min-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>400</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-frag-mz <float></code> – Minimum fragment m/z value to use in measurement error estimation. Default = <code>150</code>.</li>
+  <li class="nobullet"><code>--pm-max-frag-mz <float></code> – Maximum fragment m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-scan-frag-peaks <integer></code> – Minimum fragment peaks an MS/MS scan must contain to be used in measurement error estimation. Default = <code>40</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-delta-ppm <float></code> – Maximum ppm distance between precursor m/z values to consider two scans potentially generated by the same peptide for measurement error estimation. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--pm-charge <integer></code> – Precursor charge state to consider MS/MS spectra from, in measurement error estimation. Ideally, this should be the most frequently occurring charge state in the given data. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--pm-top-n-frag-peaks <integer></code> – Number of most-intense fragment peaks to consider for measurement error estimation, per MS/MS spectrum. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--pm-pair-top-n-frag-peaks <integer></code> – Number of fragment peaks per spectrum pair to be used in fragment error estimation. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--pm-min-common-frag-peaks <integer></code> – Number of the most-intense peaks that two spectra must share in order to potentially be generated by the same peptide, for measurement error estimation. Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--pm-max-scan-separation <integer></code> – Maximum number of scans two spectra can be separated by in order to be considered potentially generated by the same peptide, for measurement error estimation. Default = <code>1000</code>.</li>
+  <li class="nobullet"><code>--pm-min-peak-pairs <integer></code> – Minimum number of peak pairs (for precursor or fragment) that must be successfully paired in order to attempt to estimate measurement error distribution. Default = <code>100</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/param-table.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/param-table.html
new file mode 100644
index 0000000..ae72dd0
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/param-table.html
@@ -0,0 +1,678 @@
+<!DOCTYPE HTML>
+<html><head><meta charset="UTF-8">
+<title>Crux parameters</title>
+<link href="../crux.css" rel="styleSheet" type="text/css"></head>
+<body><h1>Crux parameters</h1>
+<table border="1" align="center">
+<tr><td> </td><td>assign-confidence</td><td>barista</td><td>cascade-search</td><td>comet</td><td>create-docs</td><td>bullseye</td><td>hardklor</td><td>extract-columns</td><td>extract-rows</td><td>generate-peptides</td><td>get-ms2-spectrum</td><td>make-pin</td><td>param-medic</td><td>percolator</td><td>pipeline</td><td>predict-peptide-ions</td><td>print-processed-spectra</td><td>psm-convert</td><td>q-ranker</td><td>read-tide-index</td><td>search-for-xlinks</td><td>sort-by-column</td> [...]
+<tr bgcolor="#DEDEDE">
+<td>estimation-method</td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>decoy-prefix</td><td>✓</td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>score</td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>sidak</td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>verbosity</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td> [...]
+<tr>
+<td>parameter-file</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>overwrite</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>output-dir</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>list-of-files</td><td>✓</td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>combine-charge-states</td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>combine-modified-peptides</td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>fileroot</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>enzyme</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>separate-searches</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>pepxml-output</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>txt-output</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>skip-cleanup</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>re-run</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use-spec-features</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>feature-file-out</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>optimization</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>spectrum-parser</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>q-value-threshold</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>precursor-window</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>auto-precursor-window</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>precursor-window-type</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>spectrum-min-mz</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>spectrum-max-mz</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>min-peaks</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>spectrum-charge</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>scan-number</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>store-spectra</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>store-index</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>concat</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>compute-sp</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>remove-precursor-peak</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>remove-precursor-tolerance</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>print-search-progress</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use-z-line</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>sqt-output</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>mzid-output</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>pin-output</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>file-column</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>exact-p-value</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use-neutral-loss-peaks</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>use-flanking-peaks</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td></tr>
+<tr bgcolor="#DEDEDE">
+<td>mz-bin-width</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td></tr>
+<tr>
+<td>auto-mz-bin-width</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>mz-bin-offset</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>max-precursor-charge</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>peptide-centric-search</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>isotope-error</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>skip-preprocessing</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>num-threads</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>pm-min-precursor-mz</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>pm-max-precursor-mz</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>pm-min-frag-mz</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>pm-max-frag-mz</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>pm-min-scan-frag-peaks</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>pm-max-precursor-delta-ppm</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>pm-charge</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>pm-top-n-frag-peaks</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>pm-pair-top-n-frag-peaks</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>pm-min-common-frag-peaks</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>pm-max-scan-separation</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>pm-min-peak-pairs</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>decoy_search</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>num_threads</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>peptide_mass_tolerance</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>auto_peptide_mass_tolerance</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>peptide_mass_units</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>mass_type_parent</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>mass_type_fragment</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>precursor_tolerance_type</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>isotope_error</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>search_enzyme_number</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>num_enzyme_termini</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>allowed_missed_cleavage</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>fragment_bin_tol</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>fragment_bin_offset</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>auto_fragment_bin_tol</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>theoretical_fragment_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use_A_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>use_B_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use_C_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>use_X_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use_Y_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>use_Z_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use_NL_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>output_sqtfile</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>output_txtfile</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>output_pepxmlfile</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>output_percolatorfile</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>output_outfiles</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>print_expect_score</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>num_output_lines</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>show_fragment_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>sample_enzyme_number</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>scan_range</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>precursor_charge</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>override_charge</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>ms_level</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>activation_method</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>digest_mass_range</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>num_results</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>skip_researching</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>max_fragment_charge</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>max_precursor_charge</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>nucleotide_reading_frame</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>clip_nterm_methionine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>spectrum_batch_size</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>decoy_prefix</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>output_suffix</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>mass_offsets</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>minimum_peaks</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>minimum_intensity</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>remove_precursor_peak</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>remove_precursor_tolerance</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>clear_mz_range</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>variable_mod01</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>variable_mod02</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>variable_mod03</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>variable_mod04</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>variable_mod05</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>variable_mod06</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>variable_mod07</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>variable_mod08</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>variable_mod09</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>max_variable_mods_in_peptide</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>require_variable_mod</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_Cterm_peptide</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_Nterm_peptide</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_Cterm_protein</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_Nterm_protein</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_A_alanine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_B_user_amino_acid</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_C_cysteine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_D_aspartic_acid</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_E_glutamic_acid</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_F_phenylalanine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_G_glycine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_H_histidine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_I_isoleucine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_J_user_amino_acid</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_K_lysine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_L_leucine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_M_methionine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_N_asparagine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_O_ornithine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_P_proline</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_Q_glutamine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_R_arginine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_S_serine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_T_threonine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_U_selenocysteine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_V_valine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_W_tryptophan</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_X_user_amino_acid</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_Y_tyrosine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_Z_user_amino_acid</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>max-persist</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>exact-match</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>exact-tolerance</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>persist-tolerance</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>gap-tolerance</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>scan-tolerance</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>bullseye-max-mass</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>bullseye-min-mass</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>retention-tolerance</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>spectrum-format</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>hardklor-algorithm</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>averagine-mod</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>boxcar-averaging</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>boxcar-filter</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>boxcar-filter-ppm</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>centroided</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>cdm</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>min-charge</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>max-charge</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>corr</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>depth</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>distribution-area</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>hardklor-data-file</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>instrument</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>isotope-data-file</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>max-features</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>mzxml-filter</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>mz-max</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>mz-min</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>mz-window</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>resolution</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>scan-range-max</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>scan-range-min</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>sensitivity</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>signal-to-noise</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>smooth</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>sn-window</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>static-sn</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>delimiter</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>header</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>comparison</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>column-type</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>min-mass</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>max-mass</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>min-length</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>max-length</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>custom-enzyme</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>digestion</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>missed-cleavages</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>isotopic-mass</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>seed</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>clip-nterm-methionine</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>decoy-format</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>keep-terminal-aminos</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>stats</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>top-match</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>output-file</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>pout-output</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>feature-file-in</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>picked-protein</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>protein-enzyme</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>protein-report-fragments</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>protein-report-duplicates</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>protein</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>decoy-xml-output</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>subset-max-train</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>c-pos</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>c-neg</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>train-fdr</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>test-fdr</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>maxiter</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>quick-validation</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>output-weights</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>init-weights</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>default-direction</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>unitnorm</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>fido-alpha</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>fido-beta</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>fido-gamma</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>test-each-iteration</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>override</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>percolator-seed</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>klammer</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>only-psms</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>fido-empirical-protein-q</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>fido-gridsearch-depth</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>fido-gridsearch-mse-threshold</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>fido-fast-gridsearch</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>fido-protein-truncation-threshold</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>fido-no-split-large-components</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>tdc</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>search-input</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>bullseye</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>search-engine</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>post-processor</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>primary-ions</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>precursor-ions</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>isotope</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>flanking</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>max-ion-charge</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>fragment-mass</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td></tr>
+<tr>
+<td>nh3</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>h2o</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>stop-after</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>output-units</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>input-format</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>distinct-matches</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>protein-database</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use-old-xlink</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>xlink-include-linears</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>xlink-include-deadends</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>xlink-include-selfloops</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>xlink-include-inter</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>xlink-include-intra</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>xlink-include-inter-intra</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>xlink-prevents-cleavage</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>require-xlink-candidate</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>xlink-top-n</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>max-xlink-mods</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>mod</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>cmod</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>nmod</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>max-mods</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>precursor-window-weibull</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>precursor-window-type-weibull</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>min-weibull-points</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use-a-ions</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td></tr>
+<tr>
+<td>use-b-ions</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use-c-ions</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td></tr>
+<tr>
+<td>use-x-ions</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use-y-ions</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td></tr>
+<tr>
+<td>use-z-ions</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td></tr>
+<tr bgcolor="#DEDEDE">
+<td>mod-mass-format</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>isotope-windows</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>compute-p-values</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>A</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>C</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>D</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>E</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>F</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>G</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>H</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>I</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>K</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>L</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>M</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>N</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>P</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>Q</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>R</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>S</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>T</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>V</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>W</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>Y</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>ascending</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>parsimony</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>threshold</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>threshold-type</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>input-ms2</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>unique-mapping</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>quant-level</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>measure</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>custom-threshold-name</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>custom-threshold-min</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>mzid-use-pass-threshold</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>precision</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td></tr>
+<tr>
+<td>peptide-list</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>mods-spec</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>cterm-peptide-mods-spec</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>nterm-peptide-mods-spec</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>min-mods</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>allow-dups</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>temp-dir</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>xlink-score-method</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td></tr>
+</table></body></html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/percolator.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/percolator.html
new file mode 100644
index 0000000..06119a2
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/percolator.html
@@ -0,0 +1,209 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>percolator</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>percolator</h1>
+<h2>Usage:</h2>
+<p><code>crux percolator [options] <peptide-spectrum matches></code></p>
+<h2>Description:</h2>
+<p>Percolator is a semi-supervised learning algorithm that dynamically learns to separate target from decoy peptide-spectrum matches (PSMs). The algorithm is described in this article:</p><blockquote> Lukas Käll, Jesse Canterbury, Jason Weston, William Stafford Noble and Michael J. MacCoss. <a href="http://noble.gs.washington.edu/papers/kall2007semi-supervised.html">"Semi-supervised learning for peptide identification from shotgun proteomics datasets."</a> <em>Nature Metho [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>peptide-spectrum matches</code> – A collection of target and decoy peptide-spectrum matches (PSMs). Input may be in one of five formats: PIN, SQT, pepXML, <a href="../file-formats/txt-format.html">Crux tab-delimited text</a>, or a list of files (when list-of-files=T). Note that if the input is provided as SQT, pepXML, or Crux tab-delimited text, then a PIN file will be generated in the output directory prior to execution.Crux determines the format of the input file by e [...]
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>percolator.target.proteins.txt</code> – a tab-delimited file containing the target protein matches. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.decoy.proteins.txt</code> – a tab-delimited file containing the decoy protein matches. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.target.peptides.txt</code> – a tab-delimited file containing the target peptide matches. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.decoy.peptides.txt</code> – a tab-delimited file containing the decoy peptide matches. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.target.psms.txt</code> – a tab-delimited file containing the target PSMs. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.decoy.psms.txt</code> – a tab-delimited file containing the decoy PSMs. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.params.txt</code> – a file containing the name and value of all parameters for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>percolator.pep.xml</code> – a file containing the PSMs in <a href="http://tools.proteomecenter.org/wiki/index.php?title=Formats:pepXML">pepXML format</a>. This file can be used as input to some of the tools in the <a href="http://tools.proteomecenter.org/wiki/index.php?title=Software:TPP">Transproteomic Pipeline</a>.</li>
+  <li><code>percolator.mzid</code> – a file containing the protein, peptide, and spectrum matches in <a href="http://www.psidev.info/mzidentml">mzIdentML format</a>.</li>
+  <li><code>percolator.log.txt</code> – a log file containing a copy of all messages that were printed to standard error.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Protein inference options</h3>
+<ul>
+  <li class="nobullet"><code>--picked-protein <string></code> – Use the picked protein-level FDR to infer protein probabilities, provide the fasta file as the argument to this flag. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--protein-enzyme no_enzyme|elastase|pepsin|proteinasek|thermolysin|trypsinp|chymotrypsin|lys-n|lys-c|arg-c|asp-n|glu-c|trypsin</code> – Type of enzyme Default = <code>trypsin</code>.</li>
+  <li class="nobullet"><code>--protein-report-fragments T|F</code> – By default, if the peptides associated with protein A are a proper subset of the peptides associated with protein B, then protein A is eliminated and all the peptides are considered as evidence for protein B. Note that this filtering is done based on the complete set of peptides in the database, not based on the identified peptides in the search results. Alternatively, if this option is set and if all of the ident [...]
+  <li class="nobullet"><code>--protein-report-duplicates T|F</code> – If multiple database proteins contain exactly the same set of peptides, then Percolator will randomly discard all but one of the proteins. If this option is set, then the IDs of these duplicated proteins will be reported as a comma-separated list. Not available for Fido. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Fido options</h3>
+<ul>
+  <li class="nobullet"><code>--protein T|F</code> – Use the Fido algorithm to infer protein probabilities. Must be true to use any of the Fido options. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fido-alpha <float></code> – Specify the probability with which a present protein emits an associated peptide. Set by grid search (see --fido-gridsearch-depth parameter) if not specified. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--fido-beta <float></code> – Specify the probability of the creation of a peptide from noise. Set by grid search (see --fido-gridsearch-depth parameter) if not specified. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--fido-gamma <float></code> – Specify the prior probability that a protein is present in the sample. Set by grid search (see --fido-gridsearch-depth parameter) if not specified. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--fido-empirical-protein-q T|F</code> – Estimate empirical p-values and q-values for proteins using target-decoy analysis. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fido-gridsearch-depth <integer></code> – Set depth of the grid search for alpha, beta and gamma estimation. The values considered, for each possible value of the --fido-gridsearch-depth parameter, are as follows:<ul><li>0: alpha = {0.01, 0.04, 0.09, 0.16, 0.25, 0.36, 0.5}; beta = {0.0, 0.01, 0.15, 0.025, 0.035, 0.05, 0.1}; gamma = {0.1, 0.25, 0.5, 0.75}.</li><li>1: alpha = {0.01, 0.04, 0.09, 0.16, 0.25, 0.36}; beta = {0.0, 0.01, 0.15, 0.025, 0.0 [...]
+  <li class="nobullet"><code>--fido-gridsearch-mse-threshold <float></code> – Q-value threshold that will be used in the computation of the MSE and ROC AUC score in the grid search. Default = <code>0.05</code>.</li>
+  <li class="nobullet"><code>--fido-fast-gridsearch <float></code> – Apply the specified threshold to PSM, peptide and protein probabilities to obtain a faster estimate of the alpha, beta and gamma parameters. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--fido-protein-truncation-threshold <float></code> – To speed up inference, proteins for which none of the associated peptides has a probability exceeding the specified threshold will be assigned probability = 0. Default = <code>0.01</code>.</li>
+  <li class="nobullet"><code>--fido-no-split-large-components T|F</code> – Do not approximate the posterior distribution by allowing large graph components to be split into subgraphs. The splitting is done by duplicating peptides with low probabilities. Splitting continues until the number of possible configurations of each subgraph is below 2^18 Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>General options</h3>
+<ul>
+  <li class="nobullet"><code>--only-psms T|F</code> – Do not remove redundant peptides; keep all PSMs and exclude peptide level probability. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--tdc T|F</code> – Use target-decoy competition to assign q-values and PEPs. When set to F, the mix-max method, which estimates the proportion pi0 of incorrect target PSMs, is used instead. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--search-input auto|separate|concatenated</code> – Specify the type of target-decoy search. Using 'auto', percolator attempts to detect the search type automatically.  Using 'separate' specifies two searches: one against target and one against decoy protein db. Using 'concatenated' specifies a single search on concatenated target-decoy protein db. Default = <code>auto</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>SVM training options</h3>
+<ul>
+  <li class="nobullet"><code>--subset-max-train <integer></code> – Only train Percolator on a subset of PSMs, and use the resulting score vector to evaluate the other PSMs. Recommended when analyzing huge numbers (>1 million) of PSMs. When set to 0, all PSMs are used for training as normal. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--c-pos <float></code> – Penalty for mistakes made on positive examples. If this value is set to 0, then it is set via cross validation over the values {0.1, 1, 10}, selecting the value that yields the largest number of PSMs identified at the q-value threshold set via the --test-fdr parameter. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--c-neg <float></code> – Penalty for mistake made on negative examples. If not specified, then this value is set by cross validation over {0.1, 1, 10}. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--train-fdr <float></code> – False discovery rate threshold to define positive examples in training. Default = <code>0.01</code>.</li>
+  <li class="nobullet"><code>--test-fdr <float></code> – False discovery rate threshold used in selecting hyperparameters during internal cross-validation and for reporting the final results. Default = <code>0.01</code>.</li>
+  <li class="nobullet"><code>--maxiter <integer></code> – Maximum number of iterations for training. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--quick-validation T|F</code> – Quicker execution by reduced internal cross-validation. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--test-each-iteration T|F</code> – Measure performance on test set each iteration. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--percolator-seed <string></code> – When given a unsigned integer value seeds the random number generator with that value. When given the string "time" seeds the random number generator with the system time. Default = <code>1</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>SVM feature input options</h3>
+<ul>
+  <li class="nobullet"><code>--output-weights T|F</code> – Output final weights to a file named "percolator.weights.txt". Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--init-weights <string></code> – Read initial weights from the given file (one per line). Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--default-direction <string></code> – In its initial round of training, Percolator uses one feature to induce a ranking of PSMs. By default, Percolator will select the feature that produces the largest set of target PSMs at a specified FDR threshold (cf. --train-fdr). This option allows the user to specify which feature is used for the initial ranking, using the name as a string from <a href="../file-formats/features.html">this table</a>. The name [...]
+  <li class="nobullet"><code>--unitnorm T|F</code> – Use unit normalization (i.e., linearly rescale each PSM's feature vector to have a Euclidean length of 1), instead of standard deviation normalization. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--override T|F</code> – By default, Percolator will examine the learned weights for each feature, and if the weight appears to be problematic, then percolator will discard the learned weights and instead employ a previously trained, static score vector. This switch allows this error checking to be overriden. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--klammer T|F</code> – Use retention time features calculated as in "Improving tandem mass spectrum identification using peptide retention time prediction across diverse chromatography conditions" by Klammer AA, Yi X, MacCoss MJ and Noble WS. (<em>Analytical Chemistry</em>. 2007 Aug 15;79(16):6111-8.). Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--txt-output T|F</code> – Output a tab-delimited results file to the output directory. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--pout-output T|F</code> – Output a Percolator <a href="https://github.com/percolator/percolator/blob/master/src/xml/percolator_out.xsd">pout.xml</a> format results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mzid-output T|F</code> – Output an mzIdentML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pepxml-output T|F</code> – Output a pepXML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--feature-file-out T|F</code> – Output the computed features in <a href="../file-formats/features.html">tab-delimited text format</a>. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--list-of-files T|F</code> – Specify that the search results are provided as lists of files, rather than as individual files. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--feature-file-in T|F</code> – When set to T, interpret the input file as a PIN file. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--decoy-xml-output T|F</code> – Include decoys (PSMs, peptides, and/or proteins) in the XML output. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--top-match <integer></code> – Specify the number of matches to report for each spectrum. Default = <code>5</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/pipeline.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/pipeline.html
new file mode 100644
index 0000000..0de721e
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/pipeline.html
@@ -0,0 +1,460 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>pipeline</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>pipeline</h1>
+<h2>Usage:</h2>
+<p><code>crux pipeline [options] <mass spectra>+ <peptide source></code></p>
+<h2>Description:</h2>
+<p>Given one or more sets of tandem mass spectra as well as a protein database, this command runs a series of Crux tools and reports all of the results in a single output directory. There are three steps in the pipeline:</p><ol><li><a href="bullseye.html">Bullseye</a> to assign high-resolution precursor m/z values to MS/MS data. This step is optional.</li><li>Database searching using either <a href="tide-search.html">Tide-search</a> or <a href="comet.html">Comet</a>. The database can be  [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>mass spectra+</code> – The name of the file(s) from which to parse the fragmentation spectra, in any of the <a href="http://proteowizard.sourceforge.net/tools.shtml">file formats supported by ProteoWizard</a>. Alteratively, with Tide-search, these files may be binary spectrum files produced by a previous run of <code>crux tide-search</code> using the <code>store-spectra</code> parameter.</li>
+  <li><code>peptide source</code> – Either the name of a file in fasta format from which to retrieve proteins and peptides or an index created by a previous run of <code>crux tide-index</code> (for Tide searching).</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>bullseye.pid.<format></code> – a file containing the fragmentation spectra for which accurate masses were successfully inferred. Unless otherwise specified (with the --spectrum-format option), the output file format is ".ms2". Note that if the output format is ".ms2," then a single spectrum may have multiple "Z" lines, each indicating a charge state and accurate mass. In addition, Bullseye inserts an "I" line (for charge-dependent analysis) corresponding to each "Z" lin [...]
+  <li><code>bullseye.no-pid.<format></code> – a file containing the fragmentation spectra for which accurate masses were not inferred.</li>
+  <li><code>hardklor.mono.txt</code> – a tab-delimited text file containing one line for each isotope distribution, as described <a href="hardklor.html">here</a>.</li>
+  <li><code>bullseye.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>bullseye.log.txt</code> – a log file containing a copy of all messages that were printed to standard error.</li>
+  <li><code>tide-search.target.txt</code> – a tab-delimited text file containing the target PSMs. See <a href="../file-formats/txt-format.html">txt file format</a> for a list of the fields.</li>
+  <li><code>tide-search.decoy.txt</code> – a tab-delimited text file containing the decoy PSMs. This file will only be created if the index was created with decoys.</li>
+  <li><code>tide-search.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other Crux programs.</li>
+  <li><code>tide-search.log.txt</code> – a log file containing a copy of all messages that were printed to the screen during execution.</li>
+  <li><code>comet.target.txt</code> – a tab-delimited text file containing the target PSMs. See <a href="../file-formats/txt-format.html">txt file format</a> for a list of the fields.</li>
+  <li><code>comet.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>comet.log.txt</code> – a log file containing a copy of all messages that were printed to standard error.</li>
+  <li><code>percolator.target.proteins.txt</code> – a tab-delimited file containing the target protein matches. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.decoy.proteins.txt</code> – a tab-delimited file containing the decoy protein matches. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.target.peptides.txt</code> – a tab-delimited file containing the target peptide matches. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.decoy.peptides.txt</code> – a tab-delimited file containing the decoy peptide matches. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.target.psms.txt</code> – a tab-delimited file containing the target PSMs. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.decoy.psms.txt</code> – a tab-delimited file containing the decoy PSMs. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.params.txt</code> – a file containing the name and value of all parameters for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>percolator.pep.xml</code> – a file containing the PSMs in <a href="http://tools.proteomecenter.org/wiki/index.php?title=Formats:pepXML">pepXML format</a>. This file can be used as input to some of the tools in the <a href="http://tools.proteomecenter.org/wiki/index.php?title=Software:TPP">Transproteomic Pipeline</a>.</li>
+  <li><code>percolator.mzid</code> – a file containing the protein, peptide, and spectrum matches in <a href="http://www.psidev.info/mzidentml">mzIdentML format</a>.</li>
+  <li><code>percolator.log.txt</code> – a log file containing a copy of all messages that were printed to standard error.</li>
+  <li><code>assign-confidence.target.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited text file</a> that contains the targets, sorted by score. The file will contain one new column, named "<method> q-value", where <method> is either "tdc" or "mix-max".</li>
+  <li><code>assign-confidence.log.txt</code> – a log file containing a copy of all messages that were printed to stderr.</li>
+  <li><code>assign-confidence.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>pipeline options</h3>
+<ul>
+  <li class="nobullet"><code>--bullseye T|F</code> – Run the Bullseye algorithm on the given MS data, using it to assign high-resolution precursor values to the MS/MS data. If a spectrum file ends with .ms2 or .cms2, matching .ms1/.cms1 files will be used as the MS1 file. Otherwise, it is assumed that the spectrum file contains both MS1 and MS2 scans. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--search-engine comet|tide-search</code> – Specify which search engine to use. Default = <code>tide-search</code>.</li>
+  <li class="nobullet"><code>--post-processor percolator|assign-confidence|none</code> – Specify which post-processor to apply to the search results. Default = <code>percolator</code>.</li>
+  <li class="nobullet"><code>--estimation-method mix-max|tdc|peptide-level</code> – Specify the method used to estimate q-values.  The mix-max procedure or target-decoy competition apply to PSMs. The peptide-level option eliminates any PSM for which there exists a better scoring PSM involving the same peptide, and then uses decoys to assign confidence estimates. Default = <code>tdc</code>.</li>
+  <li class="nobullet"><code>--score <string></code> – Specify the column (for tab-delimited input) or tag (for XML input) used as input to the q-value estimation procedure. If this parameter is unspecified, then the program searches for "xcorr score", "evalue" (comet), "exact p-value" score fields in this order in the input file.  Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--sidak T|F</code> – Adjust the score using the Sidak adjustment and reports them in a new column in the output file. Note that this adjustment only makes sense if the given scores are p-values, and that it requires the presence of the "distinct matches/spectrum" feature for each PSM. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--combine-charge-states T|F</code> – Specify this parameter to T in order to combine charge states with peptide sequencesin peptide-centric search. Works only if estimation-method = peptide-level. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--combine-modified-peptides T|F</code> – Specify this parameter to T in order to treat peptides carrying different or no modifications as being the same. Works only if estimation = peptide-level. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Identifying PPIDs in MS1 spectra</h3>
+<ul>
+  <li class="nobullet"><code>--max-persist <float></code> – Ignore PPIDs that persist for longer than this length of time in the MS1 spectra. The unit of time is whatever unit is used in your data file (usually minutes). These PPIDs are considered contaminants. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--persist-tolerance <float></code> – Set the mass tolerance (+/-ppm) for finding PPIDs in consecutive MS1 scans. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--gap-tolerance <integer></code> – Allowed gap size when checking for PPIDs across consecutive MS1 scans. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--scan-tolerance <integer></code> – Total number of MS1 scans over which a PPID must be observed to be considered real. Gaps in persistence are allowed by setting --gap-tolerance. Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--bullseye-max-mass <float></code> – Only consider PPIDs below this maximum mass in daltons. Default = <code>8000</code>.</li>
+  <li class="nobullet"><code>--bullseye-min-mass <float></code> – Only consider PPIDs above this minimum mass in daltons. Default = <code>600</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Matching PPIDs to MS2 spectra</h3>
+<ul>
+  <li class="nobullet"><code>--exact-match T|F</code> – When true, require an exact match (as defined by --exact-tolerance) between the center of the precursor isolation window in the MS2 scan and the base isotopic peak of the PPID. If this option is set to false and no exact match is observed, then attempt to match using a wider m/z tolerance. This wider tolerance is calculated using the PPID's monoisotopic mass and charge (the higher the charge, the smaller the window). Default = [...]
+  <li class="nobullet"><code>--exact-tolerance <float></code> – Set the tolerance (+/-ppm) for --exact-match. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--retention-tolerance <float></code> – Set the tolerance (+/-units) around the retention time over which a PPID can be matches to the MS2 spectrum. The unit of time is whatever unit is used in your data file (usually minutes). Default = <code>0.5</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Precursor selection</h3>
+<ul>
+  <li class="nobullet"><code>--precursor-window <float></code> – Tolerance used for matching peptides to spectra. Peptides must be within +/- 'precursor-window' of the spectrum value. The precursor window units depend upon precursor-window-type. Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--auto-precursor-window false|warn|fail</code> – Automatically estimate optimal value for the precursor-window parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--precursor-window-type mass|mz|ppm</code> – Specify the units for the window that is used to select peptides around the precursor mass location (mass, mz, ppm). The magnitude of the window is defined by the precursor-window option, and candidate peptides must fall within this window. For the mass window-type, the spectrum precursor m+h value is converted to mass, and the window is defined as that mass +/- precursor-window. If the m+h value is not avail [...]
+  <li class="nobullet"><code>--max-precursor-charge <integer></code> – The maximum charge state of a spectra to consider in search. Default = <code>5</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search parameters</h3>
+<ul>
+  <li class="nobullet"><code>--spectrum-min-mz <float></code> – The lowest spectrum m/z to search in the ms2 file. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--spectrum-max-mz <float></code> – The highest spectrum m/z to search in the ms2 file. Default = <code>1e+09</code>.</li>
+  <li class="nobullet"><code>--min-peaks <integer></code> – The minimum number of peaks a spectrum must have for it to be searched. Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--spectrum-charge 1|2|3|all</code> – The spectrum charges to search. With 'all' every spectrum will be searched and spectra with multiple charge states will be searched once at each charge state. With 1, 2, or 3 only spectra with that charge state will be searched. Default = <code>all</code>.</li>
+  <li class="nobullet"><code>--scan-number <string></code> – A single scan number or a range of numbers to be searched. Range should be specified as 'first-last' which will include scans 'first' and 'last'. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--compute-sp T|F</code> – Compute the preliminary score Sp for all candidate peptides. Report this score in the output, along with the corresponding rank, the number of matched ions and the total number of ions. This option is recommended if results are to be analyzed by Percolator or Barista. If sqt-output is enabled, then compute-sp is automatically enabled and cannot be overridden. Note that the Sp computation requires re-processing each observed spe [...]
+  <li class="nobullet"><code>--remove-precursor-peak T|F</code> – If true, all peaks around the precursor m/z will be removed, within a range specified by the --remove-precursor-tolerance option. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--remove-precursor-tolerance <float></code> – This parameter specifies the tolerance (in Th) around each precursor m/z that is removed when the --remove-precursor-peak option is invoked. Default = <code>1.5</code>.</li>
+  <li class="nobullet"><code>--exact-p-value T|F</code> – Enable the calculation of exact p-values for the XCorr score as described in <a href="http://www.ncbi.nlm.nih.gov/pubmed/24895379">this article</a>. Calculation of p-values increases the running time but increases the number of identifications at a fixed confidence threshold. The p-values will be reported in a new column with header "exact p-value", and the "xcorr score" column will be replaced with a "refactored xcorr" colu [...]
+  <li class="nobullet"><code>--use-neutral-loss-peaks T|F</code> – Controls whether neutral loss ions are considered in the search. Two types of neutral losses are included and are applied only to singly charged b- and y-ions: loss of ammonia (NH3, 17.0086343 Da) and H2O (18.0091422). Each neutral loss peak has intensity 1/5 of the primary peak. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--use-flanking-peaks T|F</code> – Include flanking peaks around singly charged b and y theoretical ions. Each flanking peak occurs in the adjacent m/z bin and has half the intensity of the primary peak. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mz-bin-width <float></code> – Before calculation of the XCorr score, the m/z axes of the observed and theoretical spectra are discretized. This parameter specifies the size of each bin. The exact formula for computing the discretized m/z value is floor((x/mz-bin-width) + 1.0 - mz-bin-offset), where x is the observed m/z value. For low resolution ion trap ms/ms data 1.0005079 and for high resolution ms/ms 0.02 is recommended. Default = <code>1.00 [...]
+  <li class="nobullet"><code>--auto-mz-bin-width false|warn|fail</code> – Automatically estimate optimal value for the mz-bin-width parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mz-bin-offset <float></code> – In the discretization of the m/z axes of the observed and theoretical spectra, this parameter specifies the location of the left edge of the first bin, relative to mass = 0 (i.e., mz-bin-offset = 0.xx means the left edge of the first bin will be located at +0.xx Da). Default = <code>0.4</code>.</li>
+  <li class="nobullet"><code>--peptide-centric-search T|F</code> – Carries out a peptide-centric search. For each peptide the top-scoring spectra are reported, in contrast to the standard spectrum-centric search where the top-scoring peptides are reported. Note that in this case the "xcorr rank" column will contain the rank of the given spectrum with respect to the given candidate peptide, rather than vice versa (which is the default). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--isotope-error <string></code> – List of positive, non-zero integers. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--skip-preprocessing T|F</code> – Skip preprocessing steps on spectra. Default = F. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Protein inference options</h3>
+<ul>
+  <li class="nobullet"><code>--picked-protein <string></code> – Use the picked protein-level FDR to infer protein probabilities, provide the fasta file as the argument to this flag. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--protein-enzyme no_enzyme|elastase|pepsin|proteinasek|thermolysin|trypsinp|chymotrypsin|lys-n|lys-c|arg-c|asp-n|glu-c|trypsin</code> – Type of enzyme Default = <code>trypsin</code>.</li>
+  <li class="nobullet"><code>--protein-report-fragments T|F</code> – By default, if the peptides associated with protein A are a proper subset of the peptides associated with protein B, then protein A is eliminated and all the peptides are considered as evidence for protein B. Note that this filtering is done based on the complete set of peptides in the database, not based on the identified peptides in the search results. Alternatively, if this option is set and if all of the ident [...]
+  <li class="nobullet"><code>--protein-report-duplicates T|F</code> – If multiple database proteins contain exactly the same set of peptides, then Percolator will randomly discard all but one of the proteins. If this option is set, then the IDs of these duplicated proteins will be reported as a comma-separated list. Not available for Fido. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Fido options</h3>
+<ul>
+  <li class="nobullet"><code>--protein T|F</code> – Use the Fido algorithm to infer protein probabilities. Must be true to use any of the Fido options. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fido-alpha <float></code> – Specify the probability with which a present protein emits an associated peptide. Set by grid search (see --fido-gridsearch-depth parameter) if not specified. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--fido-beta <float></code> – Specify the probability of the creation of a peptide from noise. Set by grid search (see --fido-gridsearch-depth parameter) if not specified. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--fido-gamma <float></code> – Specify the prior probability that a protein is present in the sample. Set by grid search (see --fido-gridsearch-depth parameter) if not specified. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--fido-empirical-protein-q T|F</code> – Estimate empirical p-values and q-values for proteins using target-decoy analysis. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fido-gridsearch-depth <integer></code> – Set depth of the grid search for alpha, beta and gamma estimation. The values considered, for each possible value of the --fido-gridsearch-depth parameter, are as follows:<ul><li>0: alpha = {0.01, 0.04, 0.09, 0.16, 0.25, 0.36, 0.5}; beta = {0.0, 0.01, 0.15, 0.025, 0.035, 0.05, 0.1}; gamma = {0.1, 0.25, 0.5, 0.75}.</li><li>1: alpha = {0.01, 0.04, 0.09, 0.16, 0.25, 0.36}; beta = {0.0, 0.01, 0.15, 0.025, 0.0 [...]
+  <li class="nobullet"><code>--fido-gridsearch-mse-threshold <float></code> – Q-value threshold that will be used in the computation of the MSE and ROC AUC score in the grid search. Default = <code>0.05</code>.</li>
+  <li class="nobullet"><code>--fido-fast-gridsearch <float></code> – Apply the specified threshold to PSM, peptide and protein probabilities to obtain a faster estimate of the alpha, beta and gamma parameters. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--fido-protein-truncation-threshold <float></code> – To speed up inference, proteins for which none of the associated peptides has a probability exceeding the specified threshold will be assigned probability = 0. Default = <code>0.01</code>.</li>
+  <li class="nobullet"><code>--fido-no-split-large-components T|F</code> – Do not approximate the posterior distribution by allowing large graph components to be split into subgraphs. The splitting is done by duplicating peptides with low probabilities. Splitting continues until the number of possible configurations of each subgraph is below 2^18 Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Database</h3>
+<ul>
+  <li class="nobullet"><code>--decoy_search <integer></code> – 0=no, 1=concatenated search, 2=separate search. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>CPU threads</h3>
+<ul>
+  <li class="nobullet"><code>--num-threads <integer></code> – 0=poll CPU to set num threads; else specify num threads directly. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--num_threads <integer></code> – 0=poll CPU to set num threads; else specify num threads directly. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Masses</h3>
+<ul>
+  <li class="nobullet"><code>--peptide_mass_tolerance <float></code> – Controls the mass tolerance value.  The mass tolerance is set at +/- the specified number i.e. an entered value of "1.0" applies a -1.0 to +1.0 tolerance. The units of the mass tolerance is controlled by the parameter "peptide_mass_units".  Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--auto_peptide_mass_tolerance false|warn|fail</code> – Automatically estimate optimal value for the peptide_mass_tolerancel parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--peptide_mass_units <integer></code> – 0=amu, 1=mmu, 2=ppm. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--mass_type_parent <integer></code> – 0=average masses, 1=monoisotopic masses. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--mass_type_fragment <integer></code> – 0=average masses, 1=monoisotopic masses. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--precursor_tolerance_type <integer></code> – 0=singly charged peptide mass, 1=precursor m/z. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--isotope_error <integer></code> – 0=off, 1=on -1/0/1/2/3 (standard C13 error), 2=-8/-4/0/4/8 (for +4/+8 labeling). Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search enzyme</h3>
+<ul>
+  <li class="nobullet"><code>--search_enzyme_number <integer></code> – Specify a search enzyme from the end of the parameter file. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--num_enzyme_termini <integer></code> – valid values are 1 (semi-digested), 2 (fully digested), 8 N-term, 9 C-term. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--allowed_missed_cleavage <integer></code> – Maximum value is 5; for enzyme search. Default = <code>2</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Fragment ions</h3>
+<ul>
+  <li class="nobullet"><code>--fragment_bin_tol <float></code> – Binning to use on fragment ions. Default = <code>1.000507</code>.</li>
+  <li class="nobullet"><code>--fragment_bin_offset <float></code> – Offset position to start the binning (0.0 to 1.0). Default = <code>0.4</code>.</li>
+  <li class="nobullet"><code>--auto_fragment_bin_tol false|warn|fail</code> – Automatically estimate optimal value for the fragment_bin_tol parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--theoretical_fragment_ions <integer></code> – 0=default peak shape, 1=M peak only. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--use_A_ions <integer></code> – Controls whether or not A-ions are considered in the search (0 - no, 1 - yes). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--use_B_ions <integer></code> – Controls whether or not B-ions are considered in the search (0 - no, 1 - yes). Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--use_C_ions <integer></code> – Controls whether or not C-ions are considered in the search (0 - no, 1 - yes). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--use_X_ions <integer></code> – Controls whether or not X-ions are considered in the search (0 - no, 1 - yes). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--use_Y_ions <integer></code> – Controls whether or not Y-ions are considered in the search (0 - no, 1 - yes). Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--use_Z_ions <integer></code> – Controls whether or not Z-ions are considered in the search (0 - no, 1 - yes). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--use_NL_ions <integer></code> – 0=no, 1= yes to consider NH3/H2O neutral loss peak. Default = <code>1</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>mzXML/mzML parameters</h3>
+<ul>
+  <li class="nobullet"><code>--scan_range <string></code> – Start and scan scan range to search; 0 as first entry ignores parameter. Default = <code>0 0</code>.</li>
+  <li class="nobullet"><code>--precursor_charge <string></code> – Precursor charge range to analyze; does not override mzXML charge; 0 as first entry ignores parameter. Default = <code>0 0</code>.</li>
+  <li class="nobullet"><code>--override_charge <integer></code> – Specifies the whether to override existing precursor charge state information when present in the files with the charge range specified by the "precursor_charge" parameter. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--ms_level <integer></code> – MS level to analyze, valid are levels 2 or 3. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--activation_method ALL|CID|ECD|ETD|PQD|HCD|IRMPD</code> – Specifies which scan types are searched. Default = <code>ALL</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Miscellaneous parameters</h3>
+<ul>
+  <li class="nobullet"><code>--digest_mass_range <string></code> – MH+ peptide mass range to analyze. Default = <code>600.0 5000.0</code>.</li>
+  <li class="nobullet"><code>--num_results <integer></code> – Number of search hits to store internally. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--skip_researching <integer></code> – For '.out' file output only, 0=search everything again, 1=don't search if .out exists. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--max_fragment_charge <integer></code> – Set maximum fragment charge state to analyze (allowed max 5). Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--max_precursor_charge <integer></code> – Set maximum precursor charge state to analyze (allowed max 9). Default = <code>6</code>.</li>
+  <li class="nobullet"><code>--nucleotide_reading_frame <integer></code> – 0=proteinDB, 1-6, 7=forward three, 8=reverse three, 9=all six. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--clip_nterm_methionine <integer></code> – 0=leave sequences as-is; 1=also consider sequence w/o N-term methionine. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--spectrum_batch_size <integer></code> – Maximum number of spectra to search at a time; 0 to search the entire scan range in one loop. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--decoy_prefix <string></code> – Specifies the prefix of the protein names that indicates a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--output_suffix <string></code> – Specifies the suffix string that is appended to the base output name for the pep.xml, pin.xml, txt and sqt output files. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--mass_offsets <string></code> – Specifies one or more mass offsets to apply. This value(s) are effectively subtracted from each precursor mass such that peptides that are smaller than the precursor mass by the offset value can still be matched to the respective spectrum. Default = <code><empty></code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Spectral processing</h3>
+<ul>
+  <li class="nobullet"><code>--minimum_peaks <integer></code> – Minimum number of peaks in spectrum to search. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--minimum_intensity <float></code> – Minimum intensity value to read in. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--remove_precursor_peak <integer></code> – 0=no, 1=yes, 2=all charge reduced precursor peaks (for ETD). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--remove_precursor_tolerance <float></code> – +- Da tolerance for precursor removal. Default = <code>1.5</code>.</li>
+  <li class="nobullet"><code>--clear_mz_range <string></code> – For iTRAQ/TMT type data; will clear out all peaks in the specified m/z range. Default = <code>0.0 0.0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Variable modifications</h3>
+<ul>
+  <li class="nobullet"><code>--variable_mod01 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod02 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod03 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod04 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod05 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod06 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod07 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod08 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod09 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--max_variable_mods_in_peptide <integer></code> – Specifies the total/maximum number of residues that can be modified in a peptide. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--require_variable_mod <integer></code> – Controls whether the analyzed peptides must contain at least one variable modification. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Static modifications</h3>
+<ul>
+  <li class="nobullet"><code>--add_Cterm_peptide <float></code> – Specifiy a static modification to the c-terminus of all peptides. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Nterm_peptide <float></code> – Specify a static modification to the n-terminus of all peptides. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Cterm_protein <float></code> – Specify a static modification to the c-terminal peptide of each protein. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Nterm_protein <float></code> – Specify a static modification to the n-terminal peptide of each protein. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_A_alanine <float></code> – Specify a static modification to the residue A. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_B_user_amino_acid <float></code> – Specify a static modification to the residue B. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_C_cysteine <float></code> – Specify a static modification to the residue C. Default = <code>57.021464</code>.</li>
+  <li class="nobullet"><code>--add_D_aspartic_acid <float></code> – Specify a static modification to the residue D. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_E_glutamic_acid <float></code> – Specify a static modification to the residue E. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_F_phenylalanine <float></code> – Specify a static modification to the residue F. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_G_glycine <float></code> – Specify a static modification to the residue G. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_H_histidine <float></code> – Specify a static modification to the residue H. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_I_isoleucine <float></code> – Specify a static modification to the residue I. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_J_user_amino_acid <float></code> – Specify a static modification to the residue J. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_K_lysine <float></code> – Specify a static modification to the residue K. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_L_leucine <float></code> – Specify a static modification to the residue L. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_M_methionine <float></code> – Specify a static modification to the residue M. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_N_asparagine <float></code> – Specify a static modification to the residue N. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_O_ornithine <float></code> – Specify a static modification to the residue O. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_P_proline <float></code> – Specify a static modification to the residue P. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Q_glutamine <float></code> – Specify a static modification to the residue Q. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_R_arginine <float></code> – Specify a static modification to the residue R. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_S_serine <float></code> – Specify a static modification to the residue S. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_T_threonine <float></code> – Specify a static modification to the residue T. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_U_selenocysteine <float></code> – Specify a static modification to the residue U. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_V_valine <float></code> – Specify a static modification to the residue V. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_W_tryptophan <float></code> – Specify a static modification to the residue W. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_X_user_amino_acid <float></code> – Specify a static modification to the residue X. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Y_tyrosine <float></code> – Specify a static modification to the residue Y. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Z_user_amino_acid <float></code> – Specify a static modification to the residue Z. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>General options</h3>
+<ul>
+  <li class="nobullet"><code>--only-psms T|F</code> – Do not remove redundant peptides; keep all PSMs and exclude peptide level probability. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--tdc T|F</code> – Use target-decoy competition to assign q-values and PEPs. When set to F, the mix-max method, which estimates the proportion pi0 of incorrect target PSMs, is used instead. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--search-input auto|separate|concatenated</code> – Specify the type of target-decoy search. Using 'auto', percolator attempts to detect the search type automatically.  Using 'separate' specifies two searches: one against target and one against decoy protein db. Using 'concatenated' specifies a single search on concatenated target-decoy protein db. Default = <code>auto</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>SVM training options</h3>
+<ul>
+  <li class="nobullet"><code>--subset-max-train <integer></code> – Only train Percolator on a subset of PSMs, and use the resulting score vector to evaluate the other PSMs. Recommended when analyzing huge numbers (>1 million) of PSMs. When set to 0, all PSMs are used for training as normal. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--c-pos <float></code> – Penalty for mistakes made on positive examples. If this value is set to 0, then it is set via cross validation over the values {0.1, 1, 10}, selecting the value that yields the largest number of PSMs identified at the q-value threshold set via the --test-fdr parameter. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--c-neg <float></code> – Penalty for mistake made on negative examples. If not specified, then this value is set by cross validation over {0.1, 1, 10}. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--train-fdr <float></code> – False discovery rate threshold to define positive examples in training. Default = <code>0.01</code>.</li>
+  <li class="nobullet"><code>--test-fdr <float></code> – False discovery rate threshold used in selecting hyperparameters during internal cross-validation and for reporting the final results. Default = <code>0.01</code>.</li>
+  <li class="nobullet"><code>--maxiter <integer></code> – Maximum number of iterations for training. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--quick-validation T|F</code> – Quicker execution by reduced internal cross-validation. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--test-each-iteration T|F</code> – Measure performance on test set each iteration. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--percolator-seed <string></code> – When given a unsigned integer value seeds the random number generator with that value. When given the string "time" seeds the random number generator with the system time. Default = <code>1</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>SVM feature input options</h3>
+<ul>
+  <li class="nobullet"><code>--output-weights T|F</code> – Output final weights to a file named "percolator.weights.txt". Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--init-weights <string></code> – Read initial weights from the given file (one per line). Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--default-direction <string></code> – In its initial round of training, Percolator uses one feature to induce a ranking of PSMs. By default, Percolator will select the feature that produces the largest set of target PSMs at a specified FDR threshold (cf. --train-fdr). This option allows the user to specify which feature is used for the initial ranking, using the name as a string from <a href="../file-formats/features.html">this table</a>. The name [...]
+  <li class="nobullet"><code>--unitnorm T|F</code> – Use unit normalization (i.e., linearly rescale each PSM's feature vector to have a Euclidean length of 1), instead of standard deviation normalization. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--override T|F</code> – By default, Percolator will examine the learned weights for each feature, and if the weight appears to be problematic, then percolator will discard the learned weights and instead employ a previously trained, static score vector. This switch allows this error checking to be overriden. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--klammer T|F</code> – Use retention time features calculated as in "Improving tandem mass spectrum identification using peptide retention time prediction across diverse chromatography conditions" by Klammer AA, Yi X, MacCoss MJ and Noble WS. (<em>Analytical Chemistry</em>. 2007 Aug 15;79(16):6111-8.). Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>param-medic options</h3>
+<ul>
+  <li class="nobullet"><code>--pm-min-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>400</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-frag-mz <float></code> – Minimum fragment m/z value to use in measurement error estimation. Default = <code>150</code>.</li>
+  <li class="nobullet"><code>--pm-max-frag-mz <float></code> – Maximum fragment m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-scan-frag-peaks <integer></code> – Minimum fragment peaks an MS/MS scan must contain to be used in measurement error estimation. Default = <code>40</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-delta-ppm <float></code> – Maximum ppm distance between precursor m/z values to consider two scans potentially generated by the same peptide for measurement error estimation. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--pm-charge <integer></code> – Precursor charge state to consider MS/MS spectra from, in measurement error estimation. Ideally, this should be the most frequently occurring charge state in the given data. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--pm-top-n-frag-peaks <integer></code> – Number of most-intense fragment peaks to consider for measurement error estimation, per MS/MS spectrum. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--pm-pair-top-n-frag-peaks <integer></code> – Number of fragment peaks per spectrum pair to be used in fragment error estimation. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--pm-min-common-frag-peaks <integer></code> – Number of the most-intense peaks that two spectra must share in order to potentially be generated by the same peptide, for measurement error estimation. Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--pm-max-scan-separation <integer></code> – Maximum number of scans two spectra can be separated by in order to be considered potentially generated by the same peptide, for measurement error estimation. Default = <code>1000</code>.</li>
+  <li class="nobullet"><code>--pm-min-peak-pairs <integer></code> – Minimum number of peak pairs (for precursor or fragment) that must be successfully paired in order to attempt to estimate measurement error distribution. Default = <code>100</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--spectrum-format |ms2|bms2|cms2|mgf</code> – The format to write the output spectra to. If empty, the spectra will be output in the same format as the MS2 input. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--top-match <integer></code> – Specify the number of matches to report for each spectrum. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--store-spectra <string></code> – Specify the name of the file where the binarized fragmentation spectra will be stored. Subsequent runs of crux tide-search will execute more quickly if provided with the spectra in binary format. The filename is specified relative to the current working directory, not the Crux output directory (as specified by --output-dir). This option is not valid if multiple input spectrum files are given. Default = <code><e [...]
+  <li class="nobullet"><code>--store-index <string></code> – When providing a FASTA file as the index, the generated binary index will be stored at the given path. This option has no effect if a binary index is provided as the index. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--concat T|F</code> – When set to T, target and decoy search results are reported in a single file, and only the top-scoring N matches (as specified via --top-match) are reported for each spectrum, irrespective of whether the matches involve target or decoy peptides. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--print-search-progress <integer></code> – Show search progress by printing every n spectra searched. Set to 0 to show no search progress. Default = <code>1000</code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+  <li class="nobullet"><code>--use-z-line T|F</code> – Specify whether, when parsing an MS2 spectrum file, Crux obtains the precursor mass information from the "S" line or the "Z" line.  Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--txt-output T|F</code> – Output a tab-delimited results file to the output directory. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--sqt-output T|F</code> – Outputs an SQT results file to the output directory. Note that if sqt-output is enabled, then compute-sp is automatically enabled and cannot be overridden. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pepxml-output T|F</code> – Output a pepXML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mzid-output T|F</code> – Output an mzIdentML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pin-output T|F</code> – Output a Percolator input (PIN) file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--file-column T|F</code> – Include the file column in tab-delimited output. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--output_sqtfile <integer></code> – 0=no, 1=yes  write sqt file. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--output_txtfile <integer></code> – 0=no, 1=yes  write tab-delimited text file. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--output_pepxmlfile <integer></code> – 0=no, 1=yes  write pep.xml file. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--output_percolatorfile <integer></code> – 0=no, 1=yes write percolator file. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--output_outfiles <integer></code> – 0=no, 1=yes  write .out files. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--print_expect_score <integer></code> – 0=no, 1=yes to replace Sp with expect in out & sqt. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--num_output_lines <integer></code> – num peptide results to show. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--show_fragment_ions <integer></code> – 0=no, 1=yes for out files only. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--sample_enzyme_number <integer></code> – Sample enzyme which is possibly different than the one applied to the search. Used to calculate NTT & NMC in pepXML output. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--pout-output T|F</code> – Output a Percolator <a href="https://github.com/percolator/percolator/blob/master/src/xml/percolator_out.xsd">pout.xml</a> format results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--feature-file-out T|F</code> – Output the computed features in <a href="../file-formats/features.html">tab-delimited text format</a>. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--list-of-files T|F</code> – Specify that the search results are provided as lists of files, rather than as individual files. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--feature-file-in T|F</code> – When set to T, interpret the input file as a PIN file. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--decoy-xml-output T|F</code> – Include decoys (PSMs, peptides, and/or proteins) in the XML output. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/predict-peptide-ions.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/predict-peptide-ions.html
new file mode 100644
index 0000000..552c290
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/predict-peptide-ions.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>predict-peptide-ions</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>predict-peptide-ions</h1>
+<h2>Usage:</h2>
+<p><code>crux predict-peptide-ions [options] <peptide sequence> <charge state></code></p>
+<h2>Description:</h2>
+<p>Given a peptide and a charge state, predict the corresponding fragment ions according to the provided options.</p>
+<h2>Input:</h2>
+<ul>
+  <li><code>peptide sequence</code> – The peptide sequence.</li>
+  <li><code>charge state</code> – The charge state of the peptide.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – a series of lines, describing how the ions were predicted. <blockquote style="font-family: monospace;"># PEPTIDE: <peptide sequence><br># CHARGE: <peptide charge></blockquote>The program then prints a one-line header that labels the tab-delimited columns, followed by one line per ion:<blockquote style="font-family: monospace;">m/z mass charge ion-series peptide-bond-index nh3 h2o isotope flank</blockquo [...]
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>predict-peptide-ions options</h3>
+<ul>
+  <li class="nobullet"><code>--primary-ions a|b|y|by|bya</code> – Predict the specified primary ion series. 'a' indicates a-ions only, 'b' indicates b-ions only, 'y' indicates y-ions only, 'by' indicates both b and y, 'bya' indicates b, y, and a. Default = <code>by</code>.</li>
+  <li class="nobullet"><code>--precursor-ions T|F</code> – Predict the precursor ions, and all associated ions (neutral losses, multiple charge states) consistent with the other specified options. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--isotope <integer></code> – Predict the given number of isotope peaks (0|1|2). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--flanking T|F</code> – Predict flanking peaks for b- and y ions. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--nh3 <integer></code> – Include among the predicted peaks b/y ions with up to n losses of nh3. For example, for --nh3 2, predict a peak for each b- and y-ion with the loss of one nh3 group and predict a second peak for each b- and y-ion with the loss of two nh3 groups. These peaks will have 1 and 2, respectively, in the NH3 column of the output. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--h2o <integer></code> – Include in the predicted peaks, b/y ions with the loss of 1 to n water molecules. See --nh3 for an example. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search parameters</h3>
+<ul>
+  <li class="nobullet"><code>--max-ion-charge <string></code> – Predict theoretical ions up to max charge state (1, 2, ... ,6) or up to the charge state of the peptide ("peptide"). If the max-ion-charge is greater than the charge state of the peptide, then the maximum is the peptide charge.  Default = <code>peptide</code>.</li>
+  <li class="nobullet"><code>--fragment-mass average|mono</code> – Specify which isotopes to use in calculating fragment ion mass. Default = <code>mono</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/print-processed-spectra.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/print-processed-spectra.html
new file mode 100644
index 0000000..1ba0ca2
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/print-processed-spectra.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>print-processed-spectra</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>print-processed-spectra</h1>
+<h2>Usage:</h2>
+<p><code>crux print-processed-spectra [options] <ms2 file> <output file></code></p>
+<h2>Description:</h2>
+<p>Pre-process each spectrum in a given file in preparation for computing XCorr. The pre-processing steps are described in detail in this paper:</p><blockquote>J. K. Eng, B. Fischer, J. Grossman and M. J. MacCoss. <a href="http://pubs.acs.org/doi/abs/10.1021/pr800420s">"A fast SEQUEST cross correlation algorithm process the peaks as for computing."</a> <em>Journal of Proteome Research</em>. 7(10):4598-4602, 2008.</blockquote><p>The output of this program is equivalent to the sp [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>ms2 file</code> – File containing spectra to be searched.</li>
+  <li><code>output file</code> – File where spectrum will be written.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>output file</code> – The name of the file in which the processed spectra will be printed in MS2 format.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>print-processed-spectra options</h3>
+<ul>
+  <li class="nobullet"><code>--stop-after remove-precursor|square-root|remove-grass|ten-bin|xcorr</code> – Stop after the specified pre-processing step. Default = <code>xcorr</code>.</li>
+  <li class="nobullet"><code>--output-units mz|bin</code> – Specify the output units for processed spectra. Default = <code>bin</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+  <li class="nobullet"><code>--use-z-line T|F</code> – Specify whether, when parsing an MS2 spectrum file, Crux obtains the precursor mass information from the "S" line or the "Z" line.  Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/psm-convert.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/psm-convert.html
new file mode 100644
index 0000000..296d0d6
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/psm-convert.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>psm-convert</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>psm-convert</h1>
+<h2>Usage:</h2>
+<p><code>crux psm-convert [options] <input PSM file> <output format></code></p>
+<h2>Description:</h2>
+Reads in a file containing peptide-spectrum matches (PSMs) in one of the variety of supported formats and outputs the same PSMs in a different format
+<h2>Input:</h2>
+<ul>
+  <li><code>input PSM file</code> – The name of a PSM file in tab-delimited text, SQT, pepXML or mzIdentML format</li>
+  <li><code>output format</code> – The desired format of the output file. Legal values are tsv, html, sqt, pin, pepxml, mzidentml.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>psm-convert.log.txt</code> – a log file containing a copy of all messages that were printed to stderr.</li>
+  <li><code>psm-convert.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>psm-convert options</h3>
+<ul>
+  <li class="nobullet"><code>--input-format auto|tsv|sqt|pepxml|mzidentml</code> – Legal values are auto, tsv, sqt, pepxml or mzidentml format. Default = <code>auto</code>.</li>
+  <li class="nobullet"><code>--distinct-matches T|F</code> – Whether matches/ion are distinct (as opposed to total). Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--protein-database <string></code> – The name of the file in FASTA format. Default = <code><empty></code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/q-ranker.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/q-ranker.html
new file mode 100644
index 0000000..0a4abc2
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/q-ranker.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>q-ranker</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>q-ranker</h1>
+<h2>Usage:</h2>
+<p><code>crux q-ranker [options] <fragmentation spectra> <search results></code></p>
+<h2>Description:</h2>
+<p>Q-ranker dynamically learns to separate target from decoy PSMs. The algorithm is described in this article:</p><blockquote>Marina Spivak, Jason Weston, Leon Bottou and William Stafford Noble. <a href="http://noble.gs.washington.edu/papers/spivak2009improvements.html">"Direct <em>q</em> value optimization methods for peptide identification from shotgun proteomics data sets."</a> <em>Journal of Proteome Research</em>. 8(7):3737-3745, 2009.</blockquote><p>For more on q-values a [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>fragmentation spectra</code> – The fragmentation spectra must be provided in <a href="../file-formats/ms2-format.html">MS2</a>, mzXML, or MGF format.</li>
+  <li><code>search results</code> – Search results in the <a href="../file-formats/txt-format.html">tab-delimited text format</a> produced by Crux or in <a href="../file-formats/sqt-format.html">SQT format</a>. Like the spectra, the search results can be provided as a single file, a list of files or a directory of files. Note, however, that the input mode for spectra and for search results must be the same; i.e., if you provide a list of files for the spectra, then you must also pr [...]
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>qranker.target.pep.xml</code> – An xml file containing ranked list of target peptide-spectrum matches. Thefollowing entries are included: scan, charge, psm_id, q-value, score, precursor_mass, peptide, filename.</li>
+  <li><code>qranker.decoy.pep.xml</code> – An xml file containing ranked list of decoy peptide-spectrum matches.</li>
+  <li><code>qranker.target.psm.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited text format</a> containing a ranked list of target peptide-spectrum matches with the associated Q-ranker scores and q-values.</li>
+  <li><code>qranker.decoy.psm.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited text format</a> containing a ranked list of decoy peptide-spectrum matches with the associated Q-ranker scores and q-values.</li>
+  <li><code>qranker.log.txt</code> – a file where the program reports its progress.</li>
+  <li><code>qranker.params.txt</code> – a file with the values of all the options given to the current run.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>q-ranker options</h3>
+<ul>
+  <li class="nobullet"><code>--separate-searches <string></code> – If the target and decoy searches were run separately, rather than using a concatenated database, then the program will assume that the database search results provided as a required argument are from the target database search. This option then allows the user to specify the location of the decoy search results. Like the required arguments, these search results can be provided as a single file, a list of files [...]
+  <li class="nobullet"><code>--skip-cleanup T|F</code> – Analysis begins with a pre-processsing step that creates a set of lookup tables which are then used during training. Normally, these lookup tables are deleted at the end of the analysis, but setting this option to T prevents the deletion of these tables. Subsequently, analyses can be repeated more efficiently by specifying the --re-run option. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--re-run <string></code> – Re-run a previous analysis using a previously computed set of lookup tables. For this option to work, the --skip-cleanup option must have been set to true when the program was run the first time. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--use-spec-features T|F</code> – Use an enriched feature set, including separate features for each ion type. Default = <code>true</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Enzymatic digestion</h3>
+<ul>
+  <li class="nobullet"><code>--enzyme no-enzyme|trypsin|trypsin/p|chymotrypsin|elastase|clostripain|cyanogen-bromide|iodosobenzoate|proline-endopeptidase|staph-protease|asp-n|lys-c|lys-n|arg-c|glu-c|pepsin-a|elastase-trypsin-chymotrypsin|custom-enzyme</code> – Specify the enzyme used to digest the proteins in silico. Available enzymes (with the corresponding digestion rules indicated in parentheses) include no-enzyme ([X]|[X]), trypsin ([RK]|{P}), trypsin/p ([RK]|[]), chymotrypsin  [...]
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pepxml-output T|F</code> – Output a pepXML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--txt-output T|F</code> – Output a tab-delimited results file to the output directory. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--list-of-files T|F</code> – Specify that the search results are provided as lists of files, rather than as individual files. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--feature-file-out T|F</code> – Output the computed features in <a href="../file-formats/features.html">tab-delimited text format</a>. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/read-tide-index.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/read-tide-index.html
new file mode 100644
index 0000000..12ed72e
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/read-tide-index.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>read-tide-index</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>read-tide-index</h1>
+<h2>Usage:</h2>
+<p><code>crux read-tide-index [options] <tide database></code></p>
+<h2>Description:</h2>
+Reads an index generated by tide-index and outputs information about the peptides it contains.
+<h2>Input:</h2>
+<ul>
+  <li><code>tide database</code> – Either a FASTA file or a directory containing a database index created by a previous run of crux tide-index.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>read-tide-index.peptides.txt</code> – a tab-delimited file containing two columns with headers: the peptide, and a semicolon-delimited list of IDs of the proteins that peptide occurs in.</li>
+  <li><code>read-tide-index.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>read-tide-index.log.txt</code> – a log file containing a copy of all messages that were printed to the screen during execution.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<p>This command does not support any optional parameters.</p>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/release-notes.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/release-notes.html
new file mode 100644
index 0000000..750d3d5
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/release-notes.html
@@ -0,0 +1,1849 @@
+<html>
+<head>
+<title>Release notes for Crux</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="index.html">Home</a></li>
+			    <li><a href="download.html">Download</a></li>
+			    <li><a href="fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+    <blockquote> 
+    <h2>Release notes for Crux</h2>
+
+<h3>Version 3.1</h3> January 10, 2017
+
+<h4>Major changes</h4>
+
+<ul>
+
+  <li>8 Nov 2016: Updated Percolator to use the latest version on GitHub.</li>
+  <li>31 Oct 2016: Added param-medic options to Comet and Tide</li>
+  <li>11 Oct 2016: Added the param-medic command.</li>
+  <li>07 Sept 2016: Added isotope-error parameter to Tide.</li>
+  <li>30 Aug 2016: Updated Percolator to version 3.00.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+  <li>
+    9 Jan 2017: Added search-input option to Percolator.</li>
+
+  <li>
+    29 Dec 2016: Allow assign-confidence to rank by Percolator score.</li>
+
+  <li>
+    1 Nov 2016: Added tdc and subset-max-train options to Percolator.</li>
+
+  <li>
+    20 Sept 2016: Percolator changed to use a modified version of its
+    native output.</li>
+
+  <li>
+    30 Nov 2016: Added +1 to the numerator of the FDR estimation when
+    carrying out target-decoy competition.  This correction was
+    proposed by Barber and
+    Candes, <a href="https://arxiv.org/abs/1404.5609"><i>Annals of
+    Statistics</i></a>, 2015, as well as by He et al.,
+    <a href="http://arxiv.org/abs/1501.00537"</a>arXiv:1501.00537</a>,
+    2015.</li>
+       
+  <li>
+    8 Aug 2016: Fixed incorrect default value for the cpos parameter
+    to percolator.</li>
+
+  <li>Many other minor bug fixes and enhancements.</li>
+
+</ul>
+
+<hr/>
+
+<h3>Version 3.0</h3> August 1, 2016
+
+<h4>Major changes</h4>
+
+<ul>
+
+<li>
+The <code>tide-search</code> command now supports threading. See the
+<code>num-threads</code> parameter for details.</li>
+
+<li>
+Added the <code>pipeline</a> command to run a series of commands, and
+the <code>cascade-search</code> to run searches across a series of
+databases.</li>
+
+<li>
+Renamed the command <code>calibrate-scores</code>
+to <code>assign-confidence</code> and completely revamped its
+functionality.</li>
+
+<li>
+The <code>search-for-xlinks</code> command offers parameters to
+control categories of
+candidates: <code>xlink-include-inter</code>, <code>xlink-include-intra</code>,
+and
+<code>xlink-include-inter-intra</code>.</li>
+
+<li>
+Added the <code>peptide-centric-search</code> option to tide-search.</li>
+
+<li>
+Compiling the Mac OS version now requires OS X Yosemite. It can be built
+from source using the Clang compilers distributed with the latest version of
+XCode.</li>
+
+<li>
+32-bit and 64-bit Windows versions are now available, built using Visual Studio 2013.</li>
+
+<li>
+Updated Percolator to version 2.10.</li>
+
+<li>
+Updated Hardklor to version 2.30.</li>
+
+<li>
+Updated Comet to version 2016.01 rev. 1.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+The Windows version of Crux can be built with support for vendor specific file
+formats disabled.</li>
+
+<li>
+Added the <code>temp-dir</code> option
+to <code>tide-index</code>.</li>
+
+<li>
+The utilities <code>create-docs</code>, <code>subtract-index</code>,
+and <code>psm-convert</code> were added to Crux.</li>
+
+<li>The <code>generate-peptides</code> application has been revamped.</li>
+
+<li>Fixed a bug in <code>barista</code> that occurred when the number of
+peptides exceeded the number of PSMs.</li>
+
+<li>Precursor mass selection is fixed in <code>tide-search</code> when units
+are m/z.</li>
+
+<li><code>hardklor</code> and <code>bullseye</code> now use standard logging.</li>
+
+<li>Version number added to log files. Additionally, the version numbers of
+<code>percolator</code>, <code>comet</code>, and <code>boost</code> are shown
+in the output of the <code>version</code> command.</li>
+
+<li>
+Short usage message is displayed on error (the full usage message is still
+displayed when a command is entered with no arguments).</li>
+
+<li>
+<code>feature-in-file</code> parameter added to <code>percolator</code>.</li>
+
+<li>
+The <code>seed</code> parameter for <code>percolator</code> has been renamed
+to <code>percolator-seed</code>.</li>
+
+<li>
+<code>comet</code> exits with return code 1 on failure, rather than 0.</li>
+
+<li>
+Default value for <code>use_sparse_matrix</code> changed to <code>1</code>.</li>
+
+<li>
+Default value for <code>use-neutral-loss-peaks<code> changed to <code>true</code>.</li>
+
+<li>
+<code>xlink-score-method</code> parameter added to <code>xlink-score-spectrum</code>.</li>
+
+<li>
+deltaLCn column added to <code>tide-search</code> tab-delimited output.</li>
+
+<li>
+Bug fixed in reporting flanking amino acids in <code>PostProcessProtein.cpp</code>.</li>
+
+<li>
+<code>Mix-max</code> procedure is updated to handle ties among target and decoy scores.</li>
+
+<li>
+Default value of <code>use-neutral-loss-peaks</code> changed to <code>true</code></li>
+
+<li>
+<code>Exact p-value</code> calculation takes into account the flanking and neutral loss peaks. </li>
+
+<li>
+A bug was fixed in the naming of the Percolator input (.pin) file that
+is produced by Comet when the <code>output_percolatorfile</code>
+option is turned on.  Previously, the file was named "comet.tsv"; now
+it is "comet.target.pin."</li>
+
+<li>
+<code>Assign-confidence</code> can take multiple input files.
+</li>
+
+<li>
+The <code>comet</code> command can take multiple input files.
+</li>
+
+<li>
+The <code>sidak</code> option has been added
+to <code>assign-confidence</code> to perform a Sidak adjustment.
+</li>
+
+<li>
+The <code>peptide-level</code> option has been added
+to <code>assign-confidence</code>.
+</li>
+
+<li>
+The refactored XCorr score has been re-scaled (by dividing by 20) to
+put it into a range that is comparable to that of the original XCorr score.</li>
+
+<li>
+The default value of <code>mz-bin-offset</code> has been changed from
+0.68 to 0.40.</li>
+
+<li>
+The <code>percolator</code> command outputs the <code>pout</code> XML format
+again (controlled by the <code>pout-output</code> parameter).</li>
+
+<li>
+The <code>percolator</code> command can output its native output by using the
+<code>original-output</code> parameter.</li>
+
+<li>
+Fixed a bug in <code>tide-search</code> causing it to fail when
+<code>remove-precursor-peak</code> removed all peaks in a spectrum.</li>
+
+<li>
+The <code>max-precursor-charge</code> parameter
+for <code>tide-search</code> has been introduced.</li>
+
+<li>
+Fixed a bug in candidate peptide selection when m/z tolerance is
+used.</li>
+
+<li>
+Added the <code>read-tide-index</code> command, which reads an index produced
+by <code>tide-index</code> and prints a list of peptides it contains.</li>
+
+<li>
+Added the <code>stop-after</code> option to print-processed-spectra, which
+controls the point at which to stop preprocessing.</li>
+
+<li>
+The <code>tide-search</code> command now accepts multiple spectrum input files.
+</li>
+
+<li>
+Added the <code>use-z-line</code> option to specify whether precursor
+information is taken from the S or Z line when parsing MS2 files using
+ProteoWizard.</li>
+
+<li>
+Added missing options to the <code>percolator</code> command.</li>
+
+<li>
+The <code>tide-search</code> command may now accept a FASTA database in
+place of the index, in which case <code>tide-index</code> will be run prior to
+the search. The <code>store-index</code> option allows the generated index
+to be saved.</li>
+
+<li>
+The <code>assign-confidence</code> command will automatically detect
+score type if the <code>score</code> parameter is not specified, searching for
+xcorr, e-value, or exact p-values.</li>
+
+<li>
+The <code>cascade-search</code> will report the source index database of the 
+peptide for all identified PSMs.</li>
+
+<li>
+The <code>top-match</code> parameter has been removed from
+<code>cascade-search</code>.</li>
+
+<li>
+<code>Assign-confidence</code> has got new options: "combine-modified-peptide" 
+and "combine-charge-states".</li>
+
+<li>
+<code>Assign-confidence</code> now supports top-match>1 in peptide-level filtering 
+mode.</li>
+
+<li>
+<code>Assign-confidence</code> can use smoothed-p-value scores for PSM ranking.</li>
+
+<li>
+<code>Assign-confidence</code> now does not carry out target-decoy competition in 
+peptide-level filtering mode.</li>
+
+<li>
+Added the <code>xlink-assign-ions</code> and <code>xlink-score-spectrum
+</code> commands.</li>
+
+<li>
+Rearranged estimation methods in <code>assign-confidence</code>.</li>
+
+<li>
+Added top-match option for <code>estimation-method=peptide-level</code> 
+case in <code>assign-confidence</code>.</li>
+
+<li>
+Modified assign-confidence so that ties during target-decoy
+competition are broken randomly.</li>
+
+<li>
+Changed the Percolator output feature "file" to contain the name of
+  the file containing the spectrum (if available), rather than the
+  name of the file containing the PSM.</li>
+
+<li>
+Added to <code>search-for-xlinks</code>, <code>xlink-assign-ions</code>
+  and <code>xlink-score-spectrum</code> parameters of the form
+  "use-a-ion" for a, b, c, x, y, and z-ions.</li>
+
+<li>Various other minor bug/leak fixes and performance enhancements.</li>
+
+<li>Added the <code>allow-dups</code> option to tide-index.</li>
+
+</ul>
+
+<hr></hr>
+
+
+<h3>Version 2.1</h3> October 8, 2014
+
+<h4>Major enhancements</h4>
+
+<ul>
+
+<li>
+The <code>tide-search</code> command now supports calculation of exact
+p-values via dynamic programming, as described
+in <a href="http://www.ncbi.nlm.nih.gov/pubmed/24895379">this
+article</a>.  The p-value calculation is controlled with
+the <code>exact-p-value</code> parameter.</li>
+
+<li>
+<code>search-for-xlinks</code> now supports variable modifications and
+larger protein databases.  This new code is disabled by default, but
+can be turned on by setting the
+parameter <code>use-old-xlink=F</code>.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+The default value of <code>mz_bin_offset</code> has been changed to 0.40 from 0.68.</li>
+
+<li>
+The <code>centroided</code> parameter for the <code>hardklor</code> command is
+now implemented.</li>
+
+<li>
+The <code>spectrum-format</code> parameter for the <code>bullseye</code> command
+works properly.</li>
+
+<li>
+The <code>tide-search</code> command now uses information from the Z line rather
+than the S line when reading spectrum files in the MS2 file format.</li>
+
+<li>
+The <code>tide-search</code> command now accepts the
+<code>spectrum-parser</code> parameter.</li>
+
+<li>
+The <code>protein-database</code> parameter
+to <code>spectral-counts</code> now only accepts fasta files.  Parsing
+of a protein index is no longer supported.</li>
+
+<li>
+A bug was fixed in the <code>spectral-counts</code> command that prevented 
+<code>tide-search</code> output files from being parsed correctly.</li>   
+
+<li>
+The <code>default-direction</code> parameter now takes a string value of the feature
+name rather than an integer.
+</li>
+
+<li>
+The parameters <code>mz-bin-width</code> and <code>mz-bin-offset</code> have been added
+to <code>tide-search</code>.</li>
+
+<li>
+Percolator output now includes, for each PSM, the name of the file
+in which the spectrum resides.
+</li>
+
+<li>
+The parameters <code>clip-nterm-methionine</code>, <code>keep-terminal-aminos</code>, and <code>min-mods</code> have been added to <code>tide-index</code>.
+</li>
+
+<li>
+The parameters <code>use-flanking-peaks</code>
+and <code>use-neutral-loss-peaks</code> have been added to
+<code>tide-search</code>.</li>
+
+<li>
+The calculation of XCorr was simplified in Tide.  In the new version, 
+<code>tide-index</code> only generates peptides and sorts them,
+leaving the generation of theoretical peaks to be done entirely on the
+fly by <code>tide-search</code>.</li>
+
+<li>
+The <code>tide-search</code> command now prints search progress reports both to
+the screen and to the log file. The interval at which progress is printed can
+be controlled using the <code>print-search-progress</code> parameter.</li>
+
+<li>
+The <code>calibrate-scores</code> command now outputs files with the stem
+"calibrate-scores" rather than "qvalue."</li>
+
+<li>
+The <code>use-flanking-peaks</code> parameter now has a default value of
+false.</li>
+
+<li>
+The Comet search engine was updated to version 2014011.</li>
+
+<li>
+The MSToolkit parser was updated to the latest version (r73).</li>
+
+<li>
+The <code>version</code> command now outputs the revision number.</code>
+
+<li>
+Various improvements in performance and error handling were implemented.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 2.0</h3> June 6, 2014
+<h4>Major enhancements</h4>
+<ul>
+
+<li>
+Two new search engines are now included in Crux: Comet and Tide.  The
+old search engine, search-for-matches, has been retired.</li>
+
+<li>Percolator has been updated to version 2.07.</li>
+
+<li>
+Crux now compiles in native Windows, rather than requiring
+Cygwin.  Consequently, Crux running under Windows can parse vendor
+proprietary formats using the appropriate Proteowizard libraries.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+The "enyzme" parameters "lysc", "lysn", "arg_c", "glue_c", and
+"pepsin_a" were renamed to "lys-c", "lys-n", "arg-c", "glue-c", and
+"pepsin-a".</li>
+
+<li>
+Percolator outputs decoy files in addition to target files.</li>
+
+<li>
+Percolator tab-delimited peptides output now contain a posterior error
+probability (PEP) column.</li>
+
+<li>
+The Percolator tab-delimited peptide output has been corrected to show
+the PSM with the best score, rather than the worst.</li>
+
+<li>
+The Percolator tab-delimited PSMs output "matches/spectrum" value has
+been corrected.</li>
+
+<li>
+A new utility command, <code>make-pin</code>, is provided to create
+input files for use by Percolator.</li>
+
+<li>
+The <code>spectrum-min-mass</code> and <code>spectrum-max-mass</code>
+options have been renamed to <code>spectrum-min-mz</code> and
+<code>spectrum-max-mz</code>, respectively.</li>
+
+<li>
+A <code>spectrum-parser</code> option was added to <code>q-ranker</code> and
+<code>barista</code>.</li>
+
+<li>
+A bug was fixed in <code>q-ranker</code> and <code>barista</code> when
+reading peptides with modifications.</li>
+
+<li>
+Fixed the <code>q-ranker</code> tab delimited output so that, for a
+given peptide, flanking amino acids are reported for each protein that
+contains that peptide, rather than only reporting one set of flanking
+amino acids.</li>
+
+<li>
+A bug was fixed in <code>percolator</code>, wherein the first and last
+two characters were being truncated from peptide sequences when the
+input was missing the flanking amino acids or when the charge state
+was not indicated in the PSM IDs.</li>
+
+<li>
+The crux spectrum parser has been removed.</li>
+
+<li>
+Q-ranker now outputs decoy files.</li>
+
+<li>
+The Boost.Random library is now being used for random number
+generation.</li>
+
+<li>
+<code>calibrate-scores</code> no longer requires a protein input.</li>
+
+<li>
+<code>calibrate-scores</code> now only takes the top match per
+spectrum and charge.</li>
+
+<li>
+<code>get-ms2-spectrum</code> now prints z-lines with Bullseye
+files.</li>
+
+<li>
+Various performance and error handling improvements.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.40</h3> May 22, 2013
+<h4>Major enchancements</h4>
+<ul>
+
+<li>
+Crux Percolator was updated from version 1.05 to the latest release,
+version 2.04.</li>
+
+</ul>
+<h4>Minor changes</h4>
+<ul>
+
+<li>
+<p>The formula that is used to convert fragment m/z values from real
+numbers into integers was modified.  Previously, the conversion was<br>
+<pre>
+  floor( (x / mz-bin-size) + 0.5 + mz-bin-offset )
+</pre>
+<br>The new conversion formula is <br>
+<pre>
+  floor( (x / mz-bin-size) + 1.0 - mz-bin-offset )
+</pre>
+<br>The default values of the two parameters (mz-bin-size and
+mz-bin-offset) have not changed.  The allowed range of the
+mz-bin-offset parameter was previously [-1,1], but has been changed to
+[0,1].</p>
+
+<p>
+To understand the motivation for the changed formula, note that the
+mz-bin-offset parameter controls the location of bin edges, relative
+to integer masses on the mass scale.  In general, mz-bin-offset should
+be chosen so that bin edges fall between the expected clusters of
+fragment masses.  For fragments with 1+ charge, masses will cluster
+near integer values (after dividing by mz-bin-width), and the ideal
+value of mz-bin-offset would be 0.5.  For mixtures of fragments with
+1+ and 2+ charges, masses will cluster near integer and half-integer
+values, so mz-bin-offset near 0.25 or 0.75 would produce bin edges
+that best avoid the clusters of fragment masses.  The old conversion
+formula did not correctly locate bin edges, given a chosen
+mz-bin-offset.  The new conversion formula produces a proper
+translation of mz-bin-offset into bin edge locations.</p></li>
+
+<li>
+The <code>seed</code> parameter is now available to control the
+seeding of random number generator.  The default value is 1.
+<code>seed</code> is available as a parameter from all applications.
+It can be set as a command line option for 
+<code>crux search-for-matches</code>
+and 
+<code>crux percolator</code>.
+</li>
+
+<li>
+The default value of the <code>decoys</code> parameter for <code>crux
+search-for-matches</code> was incorrectly documented.  The default is
+actually <code>peptide-shuffle</code>, but the documentation said the
+default was <code>protein-shuffle</code>.  The documentation has been
+corrected.</li>
+
+<li>
+The incorrectly labeled column header <code>xcorr rank</code> in barista and
+q-ranker feature files has been corrected to <code>xcorr score</code>.
+</li>
+
+<li>
+The q-ranker output file <code>qranker_output.xml</code> has been renamed to
+<code>qranker.xml</code>.
+</li>
+
+<li>
+The deltaCn computation has been modified to be consistent with
+Percolator. Rather than using
+<br /><pre>
+     deltaCn<sub>i</sub> = (xcorr<sub>1</sub> - xcorr<sub>i+1</sub>) / xcorr<sub>1</sub>
+</pre><br />
+it is now computed using<br />
+<pre>
+     deltaCn<sub>i</sub> = (xcorr<sub>i</sub> - xcorr<sub>i+1</sub>) / max(xcorr<sub>i</sub>, 1.0)
+</pre><br />
+</li>
+
+<li>
+Percolator now accepts inputs in SQT, PepXML, and tab-delimited formats in addition to 
+the PinXML format.
+</li>
+
+<li>
+Flags were added to several commands allowing the user to control
+whether various results files are created in the output directory:
+<ul>
+  <li><code>--sqt-output <T|F></code> (search-for-matches)</li>
+  <li><code>--mzid-output <T|F></code> (search-for-matches, percolator)</li>
+  <li><code>--pinxml-output <T|F></code> (search-for-matches)</li>
+  <li><code>--pepxml-output <T|F></code> (search-for-matches, q-ranker, barista, percolator)</li>
+  <li><code>--txt-output <T|F></code> (search-for-matches, q-ranker, barista, percolator)</li>
+</ul>
+By default, all of these flags are set to false except <code>txt-output</code>.
+</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.39</h3> October 6, 2012
+
+<h4>Major enchancements</h4>
+
+<ul>
+
+<li>
+Crux is now released under an Apache license for all users.
+</li>
+
+
+<li>
+Parsing MS/MS spectra is now supported using <a href="http://proteowizard.sourceforge.net/">Proteowizard</a> (v. 3.0.3950).  
+This allows Crux to
+handle MS/MS spectra in mzML (1.0 and 1.1), mzXML, MGF, MS2 and CMS2
+formats.
+Use <code>spectrum-parser=pwiz</code> to enable Proteowizard parsing.</li>
+<li>
+Crux now uses <code>cmake</code> for the build process rather than
+<code>autoconf</code>/<code>automake</code>.
+</li>
+</ul>
+<h3>Minor changes</h3>
+<ul>
+
+<li>
+The Tide database search software is no longer distributed as part of Crux because its license is not compatible with the new Crux license.
+</li>
+
+<li>
+Support for PIN XML output was added to <code>crux
+search-for-matches</code>.
+</li>
+<li>
+Fixed a bug in <code>crux create-index</code> on Windows and Cygin
+that caused the program to fail with the message:
+<br /><pre>
+WARNING: Cannot rename directory
+FATAL: Failed to create index
+</pre>
+</li>
+<li>
+The parameter <code>protein database</code> is now an option rather than a required argument for <code>crux spectral-counts</code>.
+</li>
+<li>
+mzIdentML file support has been added for <code>crux spectral-counts</code>.
+</li>
+<li>
+PepXML file support has been fixed for <code>crux spectral-counts</code> .
+</li>
+<li>
+Fixed bug in packedNorm() that sometimes generated incorrect values for the posterior error probability.
+</li>
+<li>
+Fixed bug in <code>crux create-index</code> on Windows and Cygwin that caused it to fail on Windows and Cygin.
+</li>
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.38</h3> July 20, 2012
+
+<h4>Major enhancements</h4>
+
+<ul>
+
+<li>
+Hardklor and Bullseye, tools for analyzing high-resolution precursor
+spectra, are now incorporated into Crux.</li>
+
+<li>
+Barista has been modified extensively so that it more closely
+resembles the other tools in Crux:</li>
+
+<ul>
+<li>
+Barista and Q-ranker accept search results in tab-delimited format, in addition to
+SQT format.</li>
+<li>
+Barista now reports posterior error probabilities, in addition to
+q-values, for PSMs, peptides and proteins.</li>
+<li>
+Barista's pep.xml output has been updated to be compatible with the
+TransProteomic Pipeline (TPP).</li>
+</ul>
+
+<li>
+The <code>sequest-search</code> command has been removed.  The
+functionality of this command is still available using options for
+the <code>search-for-matches</code> command (see
+the <a href="faq.html">frequently asked questions list</a> for
+details).</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+<code>crux predict-peptide-ions</code> calculates the mass shift
+resulting from the nh3 or h2o neutral loss correctly.  Previously, a
+neutral loss resulted in an addition of mass rather than subtraction.
+</li>
+
+<li>
+<code>crux predict-peptide-ions</code> reports ion-type as
+'b','y','a', or 'p' rather than a number (i.e. 0, 1, 2, 3).</li>
+
+<li>
+<code>crux predict-peptide-ions</code> now only allows one type of
+neutral loss modification per ion.  Previously, multiple different
+types of neutral loss could be applied simultaneously to a single
+ion.</li>
+
+<li>
+The <code>neutral-losses</code> option was removed from <code>crux
+predict-peptide-ions</code>, due to its redundancy with the supported
+the <code>--nh3</code> and <code>--h2o</code> options.</li>
+
+<li>
+<code>crux predict-peptide-ions</code> supports 'bya' in the
+<code>--primary-ions</code> parameter, which will generate 
+the a-ion series in addition to the 'b' and 'y' ions.</li> 
+
+<li>
+The spectrum parsing is updated so that peaks with zero intensity are
+ignored.</li>
+
+<li>
+<code>crux spectral-counts</code> now has an option to compute the raw
+spectral count.</li>
+
+<li>
+<code>crux spectral-counts</code> now has an option to compute dNSAF
+values.</li>
+
+<li>
+A bug in <code>crux spectral-counts</code> was fixed so that it now
+properly normalizes the NSAF value.</li>
+
+<li>
+Multiple missed cleavages are now handled by <code>crux
+search-for-xlinks</code> using the missed-cleavages parameter.
+Previously, this was unsupported.</li>
+
+<li>
+Ambiguous amino acids are handled differently.  'J' is interpreted to
+indicate 'I' or 'L'.  Peptides containing B, Z, and X are no longer be
+allowed, and a warning is issued when these amino acid codes are
+encountered.</li>
+
+<li>
+The stand-alone <code>crux-predict-peptide-ions</code>
+and <code>crux-generate-peptides</code> applications have been integrated
+into the main <code>crux</code> application.</li>
+
+<li>
+A bug has been fixed that affected the intensity adjustment of
+observed spectra when the bin width was set much larger or smaller
+than 1.</li>
+
+<li>
+Beginning with version 1.37, q-ranker erroneously included decoy PSMs
+along with target PSMs in the q-ranker.target.psms.txt file.  All PSMs
+were sorted by q-ranker score so the targets and decoys were mixed
+together with no accompanying labels.  This bug has been fixed so that
+Q-ranker once again returns only target PSMs.</li>
+
+<li>
+The search option <code>display-summed-masses</code> has been replaced by
+<code>mod-mass-format</code>.  With this option, there is a new format
+for reporting modificiations: the mass in the square braces is that of the
+preceeding amino acid plus the modification mass.  This format is compliant
+with TPP pep.xml output.</li>
+
+<li>
+Modifications are reported differently in the pep.xml header to be
+compliant with the TPP.</li>
+
+<li>
+The command <code>crux compute-q-values</code> now reports posterior
+error probabilities in addition to q-values.  Consequently, the
+command was renamed <code>crux calibrate-scores</code>.</li>
+
+<li>
+Crux now provides an explicit error message when an incorrectly
+formatted MS2 file is parsed.  Previously, crux simply reported that
+no spectra were found.</li>
+
+<li>
+Several additional scores were added to the <code>q-ranker</code>
+pep.xml files.</li>
+
+<li>Fixed the build procedure to work on both Lion and pre-Lion versions of OS X.</li>
+
+<li>Fixed a bug in the normalization of the observed spectra.
+Previously, after the 10-bin normalization of intensities, peaks with
+heights below 5% of the maximum were not being removed.</li>
+
+<li>
+When a fragmentation spectra file is read, the assumed
+peptide charge state information can be missing for the scans.  
+In cases where this information has not been provided, 
+Crux will now estimate the possible charge states.
+</li>
+
+<li>
+The feature files for Q-ranker and Barista now contain a header
+describing each feature.
+</li>
+
+<li>
+Q-ranker and Barista now output all of the fields provided in the
+input search files.
+</li>
+
+</ul>
+
+<hr></hr>
+
+
+<h3>Version 1.37</h3> December 22, 2011
+
+<h4>Major enhancements</h4>
+
+<ul>
+<li>
+Added <code>crux barista</code>, a tool for inferring protein
+identifications.</li>
+
+<li>
+Reimplemented <code>crux q-ranker</code> with new outputs and
+command-line syntax.</li>
+
+<li>
+Percolator and compute-q-values now compute and report posterior error
+probabilities, in addition to q-values.</li>
+
+<li>
+<code>crux create-index</code> now generates and store decoy
+peptides in the index.  Decoys can still be generated on-the-fly when
+searching .fasta files.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+A pair of options, <code>cterm-fixed</code>
+and <code>nterm-fixed</code>, allow fixed terminal peptide
+modifications, i.e., a mass shift applied to every peptide on either or
+both termini.</li>
+
+<li>
+A bug in the spectrum processing code was fixed, which was erroneously
+eliminating a few of the highest m/z fragment peaks.  Xcorrs have
+changed slightly as a result.</li>
+
+<li>
+Simplified the <code>--mz-bin-width</code> and 
+</code>--mz-offset</code> parameters so that <code>--xcorr-var-bin</code>
+is no longer needed.</li>
+
+<li>
+Indexes now store information about any static mods used when they
+were created.</li>
+
+<li>
+In the tab-delimited output files the 'matches/spectrum' column gives
+the number of target peptides compared to the spectrum and the decoy
+file has an additional column, 'decoy matches/spectrum' that gives the
+number of decoy peptides compared to the spectrum.  These two numbers
+may differ when decoys are not generated on-the-fly.</li>
+<li>
+The header lines of Barista and QRanker include all of the columns 
+in the search results.</li>
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.36</h3> August 4, 2011
+
+<h4>Tide changes</h4>
+
+<ul>
+
+<li>
+Added support for user-specifiable variable and static amino acid
+modifications.</li>
+
+<li>
+Tide's version of XCorr has been modified so that it is always
+identical to those of a recent version SEQUEST<sup>®</sup>.</li>
+
+<li>
+Added support for user-specifiable maximum number of missed enzyme
+cleavage points.</li>
+
+<li>
+Tide now performs basic charge state inference when this information
+is missing from the spectrum input files.</li>
+
+<li>
+User-specifiable output formatting, using new
+the <code>tide-results</code> utility, including
+  <ul>
+  <li>Text format with user-specifiable fields.
+  <li>SQT format.
+  <li>PepXML format.
+  <li>Choose whether to display all proteins in which each peptide occurs or
+just one representative.
+  </ul>
+
+<li>
+Note that new file formats are created
+by <code>tide-index</code>. Index files created by previous versions
+of Tide should not be used with the new version.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+<li>
+Q-ranker now reports q-values instead of false discovery rates.</li>
+
+<li>
+Corrected several errors in the pep.xml output, related to reporting
+the spectrum filename, charge, and neutral mass.</li>
+
+<li>
+Changed the <code>missed-cleavages</code> option to allow specifying
+the maximum number of missed cleavages in a peptide rather than
+specifying none/any.</li>
+
+<li>
+Fixed a bug that did not print the spectrum file name correctly in the
+pep.xml files.</li>
+
+<li>
+Improved the error message produced by <code>crux
+spectral-counts</code> when the input PSM file does not contain the
+required q-values.</li>
+
+<li>
+Previously, Crux's theoretical spectrum includes two flanking peaks
+around each b- and y-ion.  The new
+Boolean flag <code>use-flanking-peaks</code>, allows these to be
+either on or off.  Flanking peaks are by default in 
+<code>crux sequest-search</code> but are not used by default
+in <code>crux search-for-matches</code>.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.35</h3> March 23, 2011
+
+<h4>Major enhancements</h4>
+
+<ul>
+
+<li>
+Added the <code>crux spectral-counts</code> command for estimating
+protein quantification.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+The spectrum neutral mass is now calculated from the m+h value
+provided by the Z-lines of an MS2 file.  Also, multiple z-lines of a
+spectrum that have the same charge are now supported.  With these
+changes, <code>crux search-for-matches</code> and <code>crux
+sequest-search</code> can now take advantage of accurate precursor
+masses in MS2 files generated by Bullseye (Hsieh et al. <i>J. Proteome
+Res.</i>  9(2):1138-43, 2010).</li>
+
+<li>
+Made the <code>pep.xml</code> file header produced by Crux compatible
+with the Transproteomic Pipeline.</li>
+
+<li>
+Introduced several changes to improve performance on MacOS X.</li>
+
+<li>
+Added an <code>nterm</code> option to the link argument of <code>crux
+search-for-xlinks</code>.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.34</h3> December 22, 2010
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+The default value of the "pi-zero" parameter has been changed from 0.9
+to 1.0.</li>
+
+<li>
+A new option <code>--peptide-list</code> has been added to <code>crux
+create-index</code>.  When set to T, this option causes an ASCII
+file of peptides to be included in the output directory.  Each line
+of the file lists the peptide sequence and its neutral mass.</li>
+
+<li>
+The default bin offset was returned to 0.68.  It had erroneously been
+changed to 0 in version 1.33.</li>
+
+<li>
+A new option <code>--compute-sp</code> has been added to <code>crux
+search-for-matches</code>.  When set to true, all candidate peptides
+will be scored by Sp in addition to xcorr.  This option is recommended
+for generating input to <code>percolator</code>
+or <code>q-ranker</code>.</li>
+
+<li>
+Added <code>max-ion-charge</code> parameter to designate the maximum
+charge for theoretical ions in <code>crux search-for-xlinks</code> and 
+<code>crux xlink-assign-ions</code>.
+
+<li>
+Modifications may optionally indicate if they prevent cleavage or
+prevent cross linking.
+
+<li>
+Results are printed to .pep.xml files in addition to .txt files.
+
+<li>
+Added a <code>mass-precision</code> option which sets how many digits
+are written for all mass and m/z values in .txt, .sqt, and .ms2 files.
+
+<li>
+The columns printed to the .txt files now vary with the 
+<code>crux</code> command being run and the settings so that unused
+columns are not printed.  
+
+<li>
+Fixed a bug that limited what files were used as input for post-search
+commands (e.g. <code>crux percolator</code>) based on fileroot.  Now
+files with different fileroots can be analyzed together.
+
+<li>
+Fixed a bug that caused searches using fasta files to search peptides 
+multiple times if they appeared in a file multiple times.
+
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.33</h3> July 7, 2010
+
+<h4>Major enhancements</h4>
+
+<ul>
+
+<li>
+The command line syntax
+for <code>compute-q-values</code>, <code>percolator</code>
+and <code>q-ranker</code> was modified to allow the programs to read
+from and write to separate directories.</li>
+
+<li>
+A bug in q-ranker and percolator was fixed.  This bug was introduced
+several versions ago, and it led to erroneously many PSMs receiving
+very small q-values.  The problem relates to the scaling of the delta
+Cn feature, and the fix is a temporary stopgap: we remove the feature
+entirely.  The next version should have the corrected feature in
+place.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+A new option <code>--min-peaks</code> has been added to set a filter 
+for the minimum number of peaks a spectrum must have in order for it
+to be searched.  The default minimum is 20 peaks.</li>
+
+<li>
+The hardcoded limit for the number of proteins allowed in a database 
+has been removed.</li>
+
+<li>
+The hardcoded limit for the number of spectra and the number of 
+peaks/spectrum has been removed.</li>
+
+<li>
+A new option <code>--xcorr-var-bin</code> has been added to toggle the
+new binning of the m/z axis.  The default bin offset was returned back
+to 0, but the default bin width is still 1.000508. (<i>Note: this
+erroneous change was subsequently reverted in version 1.34</i>.)
+</li>
+
+<li>
+The option <code>--max-ion-charge</code> now places a limit on the
+maximum charge state of the ions generated for the xcorr theoretical 
+spectra for <code>crux search-for-xlinks</code>.  This change is also 
+supported by <code>xlink-assign-ions</code>.
+
+<li>
+The option <code>--no-xval</code> was added to q-ranker, allowing
+faster execution by skipping the internal cross-validation to select
+hyperparameters.</li>
+
+<li>
+The precision of modification masses written to the .txt files now matches 
+the maximum precision given in the parameter file.
+
+<li>
+Sub-options <code>prevents cleavage</code> and 
+<code>prevents cross-link</code> have been added to variable modifications 
+and support has been provided for the <code>"prevents cleavage"</code> 
+sub-option.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.32</h3> July 6, 2010
+
+<h4>Major enhancement</h4>
+
+<ul>
+
+<li>
+Version 1.32 includes changes only to Tide. A new binary is introduced
+— a modified version of ProteoWizard's <b>msconvert</b> program
+— that is capable of converting spectrum data from a wide range
+of file formats into Tide-readable <i>.spectrumrecords</i> input
+files.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+<b>tide-import-spectra</b> is removed from the distribution. Although
+it was faster than msconvert, it was specific to ms2 files, whereas
+msconvert now works with any ProteoWizard-supported file format.</li>
+
+<li>
+A standalone utility for reading binary <i>.spectrumrecords</i> files
+is introduced, called <b>read-spectrumrecords</b>. This program is
+useful, for example, for visually checking the output of msconvert.</li>
+
+<li>
+Demo input files <b>worm-06-10000.spectrumrecords</b>
+and <b>yeast-02-10000.spectrumrecords</b> now replace their
+counterparts worm-06-10000.ms2 and yeast-02-10000.ms2. With the
+introduction of Tide-compatible msconvert, ms2 files are in no way
+special to Tide anymore. Any ProteoWizard-supported file format can be
+converted to the <i>.spectrumrecords</i> format for use with
+Tide. Starting with data files in Tide's spectrumrecords format
+eliminates the conversion step in the Tide search demo.</li>
+
+<li>
+The old demo scripts worm-demo.sh and yeast-demo.sh have each been
+replaced by a pair of new scripts that demonstrate the indexing and
+searching steps separately. This is in order to highlight the two-step
+process and the fact that indexing needs to be done just once for each
+fasta file, whereafter the index may be reused indefinitely to perform
+searches.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.31</h3> June 2, 2010
+
+<h4>Major enhancements</h4>
+
+<ul>
+
+<li>
+This version of Crux is released with a demo version of a new search
+engine, Tide.  Tide is an independent
+reimplementation of the SEQUEST<sup>®</sup> algorithm. The
+immediate ancestor of Tide is the Crux <code>search-for-matches</code>
+command, but Tide has been completely re-engineered to achieve a
+thousandfold improvement in speed while exactly replicating Crux XCorr
+scores.  Currently, Tide is not fully integrated with Crux, and is
+available only in binary executable format.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+<li>
+Two options have been added to <code>crux search-for-matches</code>
+(<code>--mz-bin-width</code> and <code>--mz-bin-offset</code>) to
+allow control of the binning of the m/z axis.</li>
+
+<li>
+The <code>ion-tolerance</code> option was removed from the search
+tools.</li>
+
+<li>
+The default location of the left edge of the first bin along the m/z
+axis is 0.68, rather than 0.0.  This change makes bin edges less
+likely to fall near fragment peak locations.  The default bin width
+has also changed from 1.001141 to 1.000508</li>
+
+<li>
+The log file now includes information about the date and time that the
+command was issued, the name of the computer on which the command was
+run, and the elapsed wall clock time at the end of the run.</li>
+
+<li>
+The command line option <code>--version T</code> has been replaced
+with a command <code>crux version</code> that prints the version
+number to standard output and then exits.</li>
+
+<li>
+The header for the feature file produced optionally by 
+<code>crux percolator</code> and <code>crux q-ranker</code> now includes names
+for the first two columns, scan number and label (i.e. target or decoy peptide).
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.30</h3> May 5, 2010
+
+<h4>Major enhancements</h4>
+
+<ul>
+<li>
+A new command, <code>xlink-search</code>, has been added.  This command
+searches a collection of spectra against a sequence database, finding
+cross-linked peptide matches.  The algorithm was described in the
+following article:</li>
+
+<blockquote>
+Sean McIlwain, Paul Draghicescu, Pragya Singh, David R. Goodlett and
+William Stafford
+Noble.  <a href="http://noble.gs.washington.edu/proj/xhhc/">"Detecting
+cross-linked peptides by searching against a database of cross-linked
+peptide pairs."</a> <i>Journal of Proteome Research</i>.  2010.
+</blockquote>
+
+<li>
+A new search command, <code>sequest-search</code>, was added.  The
+original command, <code>search-for-matches</code>, behaves as before
+except that no .sqt files are printed and no Sp scoring is performed.
+The new <code>sequest-search</code> emulates SEQUEST<sup>®</sup>
+searching.  It first scores all candidate peptides with the Sp score,
+then ranks and filters the results by that score, scoring the
+remaining candidates with xcorr.  Results are printed to .txt and .sqt
+files.</li>
+
+<li>
+The .mzXML file format is now supported for crux search-for-matches
+and crux sequest-search when the <code>--use-mstoolkit</code> option
+is set to TRUE.</li>
+
+<li>
+The .csm output files from <code>search-for-matches</code> are no
+longer produced and post-search operations take .txt files as input.
+</li>
+
+</ul>
+
+<h4>
+Minor changes</h4>
+
+<ul>
+
+<li>
+Replaced <code>mass-window</code> parameter with <code>
+precursor-window</code> and added <code>precursor-window-type</code>
+for selecting windows of type mass, m/z, or ppm. 
+</li>
+
+<li>
+The <code>feature-file</code> option is now true/false instead of
+taking a file name.  The file is named '<fileroot>.<qranker|
+percolator>.features.txt'.  A header with the column names was
+added to the file.</li>
+
+<li>
+The new option, <code>--scan-number</code>, performs a search on a 
+specified subset of the spectra in the given file.</li>
+
+<li>
+When only one decoy file is produced, the name is now 'decoy.txt'
+instead of 'decoy-1.txt'
+
+<li>
+In the .txt files, protein names are now followed by the start index
+of the peptide.
+
+<li>
+Modified sequences are reported differently in the .txt files.
+Instead of modifications being represented by symbols (*,@,#, etc.)
+they are indicated with the mass shift of the modification within
+square brackets.  As before, the modification information follows the
+residue that is modified.  If multiple modifications appear on one
+residue, the masses may either be summed together or printed
+separately in a comma separated list.  This behavior is controlled by
+the <code>--display-summed-mod-masses</code> option.</li>
+
+<li>
+The modified decoy sequences are generated differently.  Before, all
+modified peptides were generated and each one was shuffled to create a
+decoy peptide.  Now a peptide is shuffled once for each peptide_mod
+and all modifications are applied to that same shuffled peptide.</li>
+
+<li>
+The 'percolator rank' column is now based on percolator scores instead
+of percolator q-values.  For cases where two PSMs have different
+percolator scores but the same q-value, the ranks will reflect the
+score differences.</li>
+
+<li>
+The Weibull parameters used for computing p-values are now printed to
+the .txt files.</li> 
+
+<li>
+The reporting of DeltaCn has changed.  For PSMs of rank i, deltaCn
+used to computed be as deltaCn_i = (xcorr_0 - xcorr_i) / xcorr_0.
+Thus, deltaCn for the top-ranked PSM was always 0.  Now deltaCn_i =
+(xcorr_0 - xcorr_i+1) / xcorr_0.  This change only
+affects <code>search-for-matches</code>,
+not <code>sequest-search</code>.  It also means that 
+<code>q-ranker</code> and <code>percolator</code> use the correct
+DeltaCn values.
+</li>
+
+<li>
+A new command, <code>print-processed-spectra</code>, performs
+XCorr-style pre-processing on all spectra in a given file.</li>
+
+<li>
+A small bug was fixed, in which even if the user requested average
+mass, the search programs still used monoisotopic mass in the
+calculation of XCorr and Sp.</li>
+
+<li>
+Protein fasta files are now parsed protein-by-protein so that parsing
+large files does not use excessive amounts of memory.</li>
+
+<li>
+A limit was removed on how many peptides a protein can produce.</li>
+
+<li>
+Crux is now built with g++ instead of gcc.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.22</h3> September 16, 2009
+
+<h4>
+Major enhancements</h4>
+
+<ul>
+
+<li>
+Crux is now distributed in two versions, a full version that is
+covered by the same type of license as before (free to non-profit
+users, and via a licensing fee to commercial users), as well as a
+stripped-down version that is released under an open source license.
+The stripped-down version does not include the database search
+functionality but does include all of the post-processing tools.  We
+are unable to release the entire Crux package under an open source
+license due to intellectual property issues.  Both versions of Crux
+are available via the Crux web
+page: <a href="http://noble.gs.washington.edu/proj/crux/">http://noble.gs.washington.edu/proj/crux/</a>.</li>
+
+<li>
+A new tool, q-ranker, is available for estimating peptide-spectrum
+match q-values.  This tool was described in the following article:
+
+<blockquote>
+Marina Spivak, Jason Weston, Leon Bottou, Lukas Käll and William
+Stafford Noble.  "Improvements to the Percolator algorithm for peptide
+identification from shotgun proteomics data sets." <i>Journal of
+Proteome Research.</i></blockquote></li>
+
+<li>
+Version 1.05 of <code>percolator</code> has now been integrated into
+the Crux source tree.  A separate installation
+of <code>percolator</code> is no longer needed for basic
+<code>percolator</code> functionality. Note, however,
+that <code>percolator</code> remains under active development.  You
+may therefore wish to install the current, stand-alone version
+of <code>percolator</code> and run it separately to take advantage of
+new features.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+The internal normalization of the observed spectra has been modifed to
+drop those peaks whose intensity is less than 1/20 of the maximum
+intensity in the spectrum.  This brings the xcorr score
+for <code>crux</code> into closer agreement with the xcorr score
+for SEQUEST<sup>®</sup>.</li>
+
+<li>
+Compute-q-values now generates three different q-values (1) from
+p-values using an analytical null model, (2) from decoys and xcorr
+using an empirical null model, or (3) from decoys and p-values using
+an empirical null model.  All three types of q-values are computed
+when p-values and decoys are present in the search results.</li>
+
+<li>
+A parameter file is now automatically written to the output
+directory.</li>
+
+<li>
+A log file recording messages sent to stderr has been added for
+<code>search-for-matches</code>, <code>compute-q-values</code>,
+and <code>percolator</code>.</li>
+
+<li>
+The <code>--use-mz-window</code> parameter is now available for
+<code>search-for-matches</code>.  When enabled, peptides must be
+within +/- 'm/z-window' of the spectrum m/z.  The m/z-window value is
+taken from <code>mass-window</code>.</li>
+
+<li>
+A numerical bug in the Weibull p-value calculation was fixed, which
+had previously caused occasional erroneous NaNs to be output.</li>
+
+<li>
+The Weibull estimated p-values generated
+by <code>search-for-matches</code> are now returned as p-values
+instead of as -log(p-value).  The corresponding q-values returned from
+<code>compute-q-values</code> are also now returned without the -log
+transform.</li>
+
+<li>
+The <code>--precision</code> option has been changed to control the
+total number of significant digits printed instead of the number of
+digits after the decimal point.  The default precision has changed
+from 6 to 8.</li>
+
+<li>
+The parameters estimated for the Weibull distribution (used for
+computing p-values) now use the xcorrs from all PSMs for a spectrum
+instead of a random selection of 500.</li>
+
+<li>
+The estimation of Weibull distribution parameters requires a minimum
+number of scored PSMs.  In the previous version, spectra with fewer
+PSMs than the minimum were not given a p-value.  Crux will now
+generate extra decoys until there are enough scores.</li>
+
+<li>
+The p-values for decoy PSMs are now generated from the same Weibull
+distribution parameters as are used for the targets of the same
+spectrum.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.21</h3> May 14, 2009
+
+<ul>
+
+<li>
+The output for <code>search-for-matches</code>, 
+<code>compute-q-values</code>, and <code>percolator</code>
+has been revised extensively.
+<code>crux</code> will now create a directory, and all output files
+will be created in that directory. 
+By default the directory will be named <code>crux-output</code>,
+but this can be changed using the new <code>output-dir</code> option.
+<br>
+The output files for <code>search-for-matches</code> will be:
+<ul>
+<li><code>search.target.csm</code></li>
+<li><code>search.decoy-?.csm</code></li>
+<li><code>search.target.sqt</code></li>
+<li><code>search.target.txt</code></li>
+</ul>
+The output files for <code>compute-q-values</code> will be:
+<ul>
+<li><code>qvalues.target.sqt</code></li>
+<li><code>qvalues.target.txt</code></li>
+</ul>
+The output files for <code>percolator</code> will be:
+<ul>
+<li><code>percolator.target.sqt</code></li>
+<li><code>percolator.target.txt</code></li>
+</ul>
+</li>
+<li>
+The <code>fileroot</code> option has been added.
+This option is used to specify a string which will be added as a prefix
+to all output files.
+</li>
+<li>
+The option <code>cleavages</code> was replaced with two
+options, <code>enzyme</code> which specifies the name of an enzyme
+(e.g.trypsin) and <code>digestion</code> which indicates
+the degree of specificity, partial or full digest.  The full list of
+available enzymes is in the html docs and in the usage statement.
+See also <code>custom-enzyme</code> below.
+
+<li>
+The option <code>custom-enzyme</code> allows users to define arbitrary
+digestion rules.  This overrides the <code>enzyme</code> option.
+Syntax for the custom digestion rule is the same the syntax used by
+X!Tandem and is described in the html docs.
+
+<li>
+The number of PSMs per spectrum printed to the output files is now
+controlled by one option, <code>top-match</code>.  This
+makes <code>max-sqt-result</code> obsolete.
+
+<li>
+It is now possible to control how many decoy sequences are generated
+and in which file(s) they are returned.  There is a new
+option, <code>num-decoys-per-target</code>, which can be used to
+generate more than one shuffled peptide per spectrum.  This
+replaces <code>number-decoy-set</code>.    
+
+<li>
+A new option, <code>decoy-location</code> has been introduced.  The
+three possible values are 'target-file' where all PSMs (target and
+decoys) are sorted together for each spectrum and returned in one
+file, 'one-decoy-file' where target PSMs are printed to one file and
+all decoys are printed to another, and 'separate-decoy-files' where
+there are as many decoy files as there are decoys per target.
+
+<li>
+Protein names for decoy matches are now prepended with 'rand_' in the
+SQT files as in 
+'L rand_Y45678'.
+
+<li>
+The option <code>unique-peptides</code> only applies
+to <code>crux-generate-matches</code>.  Each peptide is stored in the
+index exactly once with references to all protein sources.  Searches with
+fasta files print each peptide only once.
+
+<li>
+The precision of the masses and scores printed to the sqt and text
+files can now be specified by the user.  The default precision changed
+from 2 to 6.</li>
+
+<li>
+Search progress is now reported by printing every 10th spectrum that is
+searched.  The verbosity can be adjusted with the  parameter
+<code>print-search-progress</code>.
+
+<li>
+Decoy (shuffled) sequences now keep the first and last residue the
+same as the target sequence that was shuffled to produce it.  This is
+a reversion to previous behavior.
+
+<li>
+It is now possible to skip the Sp score and score all PSMs with xcorr.
+The default procedure is still to score all peptides for one spectrum
+with Sp, rank by Sp, and eliminate all but the best-ranking PSMs (by
+default, the top 500).  The remaining PSMs are scored by xcorr,
+re-ranked by xcorr and the top results returned.  By setting
+max-rank-preliminary=0, the Sp scoring is skipped and xcorr is
+computed for all PSMs.</li>
+
+<li>
+A new parameter <code>reverse-sequence</code> can be used to generate
+decoy peptides by reversing them rather than shuffling.  The first and
+last residues are left unmoved.  If the sequence is a palindrome ,
+then a decoy will be generated by shuffling and a note to that effect
+will be printed at the DETAILED INFO level of output (verbosity =
+40).</li>
+
+<li>
+P-values are now computed for decoy peptides.</li>
+
+<li>
+The algorithm used to calculated the xcorr score has been modified so
+that xcorr score will be in better agreement with scores generated by
+SEQUEST<sup>®</sup>.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.20</h3> January 6, 2009
+
+<ul>
+
+<li>
+Generating peptides and searching with up to eleven different dynamic
+modifications is now possible.  New options associated with this
+feature are mod, cmod, nmod, max-mods, max-aas-modified.
+
+<li>
+The format of the .csm files has changed and files written by older
+versions of crux are not readable with crux version 1.2.
+
+<li>
+When the option <code>cleavages</code> is set to <code>all</code>,
+peptide generation ignores all tryptic cleavage sites, effectively setting
+the <code>missed-cleavages</code> option to <code>TRUE</code>
+regardless of user settings.
+
+<li>
+When one spectrum has identical xcorr scores for different sequences,
+the rank of all those matches will be the same.  Matches with the next
+highest score will rank one below.
+
+<li>
+The options for setting the preliminary and primary score type have
+been removed and are fixed as Sp and xcorr, respectively.  A new
+option, <code>compute-p-values=<T | F></code>, was added to
+control p-value computation.
+
+<li>
+The SQT file contains the spectrum calculated mass instead of observed
+mass/charge on the S line.
+
+<li>
+There is now a test for confirming that the file downloaded from the
+crux website was not corrupted.  See installation instructions for
+details. 
+
+<li>
+Calculating a p-value requires a minimum of 40 matches.  Spectra with
+fewer than 40 matches will have p-value scores returned as NaN and a
+warning will be printed at the DETAILED_INFO level (40) of verbosity.
+
+<li>
+Fixed error in generating neutral-loss peaks created as part of the
+theoretical spectrum. 
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.02</h3> December 1, 2008
+
+<ul>
+
+<li>
+Three programs, <code>crux-create-index</code>,
+<code>crux-search-for-matches</code>,
+and <code>crux-analyze-matches</code>, were merged into one program
+named
+<code>crux</code>.</li>
+
+<li>
+Percolator is now truly optional as all Crux programs will build
+without it.</li>
+
+<li>
+Fragment masses can now be calculated as average or mono-isotopic.
+This is controlled by the <code>fragment-mass</code> option in the
+parameter file.</li>
+
+<li>
+The name of the score-type option that calculates p-values was changed
+from xcorr-logp to xcorr-pvalue.</li>
+
+<li>
+SQT files have two new lines in the header which describe the
+arrangement of values in the results.</li>
+
+<li>
+HTML documentation was updated to reflect the above changes.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.01</h3>
+
+<p>October 15, 2008</p>
+
+<ul>
+
+<li>
+A bug limiting the length of the name of an index file was fixed.</li>
+
+<li>
+Modifications were made so that Crux will build with version
+1.05 of Percolator.  This is the only supported version of
+Percolator.</li>
+
+<li>
+Memory leaks in <code>crux-search-for-matches</code> were patched.</li>
+
+<li>
+The <code>--version</code> option was added.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.0</h3>
+
+<p>March 4, 2008</p>
+
+<blockquote>
+Initial release
+</blockquote>
+	<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
+
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/runall b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/runall
new file mode 100644
index 0000000..94d37db
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/runall
@@ -0,0 +1,28 @@
+#!/bin/bash -x
+
+# These three options make it harder to for some part of a script to
+# fail without you recognizing it. nounset means that references to an
+# unset variable result in an error. This means that you can no longer
+# do stuff like this if VAR is potentially unset, because "$VAR" returns
+# an error rather than "":
+#
+# if [ "$VAR" ]; then
+#
+# fi
+#
+# To explicitly indicate that you are OK with the variable potentially
+# being empty you can instead use ${VAR:-}.
+
+# To avoid errexit for a single command, use "|| true", e.g.,
+#    diff foo foobar || true
+
+set -o nounset
+set -o pipefail
+set -o errexit 
+set -o xtrace
+
+CRUX=../../src/crux
+for command in `$CRUX create-docs list`; do
+  $CRUX create-docs $command > $command.html
+done
+$CRUX create-docs default-params > default.params
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/search-for-xlinks.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/search-for-xlinks.html
new file mode 100644
index 0000000..0af3430
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/search-for-xlinks.html
@@ -0,0 +1,256 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>search-for-xlinks</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>search-for-xlinks</h1>
+<h2>Usage:</h2>
+<p><code>crux search-for-xlinks [options] <ms2 file> <protein fasta file> <link sites> <link mass></code></p>
+<h2>Description:</h2>
+<p>This command compares a set of spectra to cross-linked peptides derived from a protein database in FASTA format. For each spectrum, the program generates a list of candidate molecules, including linear peptides, dead-end products, self-loop products and cross-linked products, with masses that lie within a specified range of the spectrum's precursor mass. These candidate molecules are ranked using XCorr, and the XCorr scores are assigned statistical confidence estimates using an empiri [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>ms2 file</code> – File containing spectra to be searched.</li>
+  <li><code>protein fasta file</code> – The name of the file in FASTA format from which to retrieve proteins.</li>
+  <li><code>link sites</code> – A comma delimited list of the amino acids to allow cross-links with. For example, "A:K,A:D" means that the cross linker can attach A to K or A to D. Cross-links involving the N-terminus of a protein can be specified as a link site by using "nterm". For example, "nterm:K" means that a cross-link can attach a protein's N-terminus to a lysine.</li>
+  <li><code>link mass</code> – The mass modification of the linker when attached to a peptide.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>search-for-xlinks.target.txt</code> – a tab-delimited text file containing the peptide-spectrum matches (PSMs). See the <a href="../file-formats/txt-format.html">txt file format</a> for a list of the fields.</li>
+  <li><code>search-for-xlinks.decoy.txt</code> – a tab-delimited text file containing the decoy PSMs. See the <a href="../file-formats/txt-format.html">txt file format</a> for a list of the fields.</li>
+  <li><code>search-for-xlinks.qvalues.txt</code> – a tab-delimited text file containing the top ranked PSMs with calculated q-values. See the <a href="../file-formats/txt-format.html">txt file format</a> for a list of the fields.</li>
+  <li><code>search-for-xlinks.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>search-for-xlinks.log.txt</code> – a log file containing a copy of all messages that were printed to stderr.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>search-for-xlinks options</h3>
+<ul>
+  <li class="nobullet"><code>--require-xlink-candidate T|F</code> – If there is no cross-link candidate found, then don't bother looking for linear, self-loop, and dead-link candidates. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--xlink-top-n <integer></code> – Top-n open-mod peptides to consider in the second pass, value of 0 will search all candiates. Default = <code>250</code>.</li>
+  <li class="nobullet"><code>--cmod <string></code> – Specify a variable modification to apply to C-terminus of peptides. <mass change>:<max distance from protein c-term (-1 for no max)>. Note that this parameter only takes effect when specified in the parameter file. Default = <code>NO MODS</code>.</li>
+  <li class="nobullet"><code>--nmod <string></code> – Specify a variable modification to apply to N-terminus of peptides.  <mass change>:<max distance from protein n-term (-1 for no max)> Note that this parameter only takes effect when specified in the parameter file. Default = <code>NO MODS</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Peptide properties</h3>
+<ul>
+  <li class="nobullet"><code>--min-mass <float></code> – The minimum mass (in Da) of peptides to consider. Default = <code>200</code>.</li>
+  <li class="nobullet"><code>--max-mass <float></code> – The maximum mass (in Da) of peptides to consider. Default = <code>7200</code>.</li>
+  <li class="nobullet"><code>--min-length <integer></code> – The minimum length of peptides to consider. Default = <code>6</code>.</li>
+  <li class="nobullet"><code>--max-length <integer></code> – The maximum length of peptides to consider. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--isotopic-mass average|mono</code> – Specify the type of isotopic masses to use when calculating the peptide mass. Default = <code>mono</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Amino acid modifications</h3>
+<ul>
+  <li class="nobullet"><code>--mod <string></code> – Consider modifications on any amino acid in aa list with at most max-per-peptide in one peptide. The parameter takes the form <mass change>:<aa list>:<max per peptide>:<prevents cleavage>:<prevents cross-link>. This parameter may be included with different values multiple times so long as the total number of mod, cmod, and nmod parameters does not exceed 11. The "prevents cleavage" and "prevent [...]
+  <li class="nobullet"><code>--max-mods <integer></code> – The maximum number of modifications that can be applied to a single peptide. Default = <code>255</code>.</li>
+  <li class="nobullet"><code>--A <float></code> – Change the mass of all amino acids 'A' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--C <float></code> – Change the mass of all amino acids 'C' by the given amount. Default = <code>57.021464</code>.</li>
+  <li class="nobullet"><code>--D <float></code> – Change the mass of all amino acids 'D' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--E <float></code> – Change the mass of all amino acids 'E' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--F <float></code> – Change the mass of all amino acids 'F' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--G <float></code> – Change the mass of all amino acids 'G' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--H <float></code> – Change the mass of all amino acids 'H' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--I <float></code> – Change the mass of all amino acids 'I' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--K <float></code> – Change the mass of all amino acids 'K' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--L <float></code> – Change the mass of all amino acids 'L' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--M <float></code> – Change the mass of all amino acids 'M' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--N <float></code> – Change the mass of all amino acids 'N' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--P <float></code> – Change the mass of all amino acids 'P' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--Q <float></code> – Change the mass of all amino acids 'Q' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--R <float></code> – Change the mass of all amino acids 'R' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--S <float></code> – Change the mass of all amino acids 'S' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--T <float></code> – Change the mass of all amino acids 'T' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--V <float></code> – Change the mass of all amino acids 'V' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--W <float></code> – Change the mass of all amino acids 'W' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--Y <float></code> – Change the mass of all amino acids 'Y' by the given amount. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Decoy database generation</h3>
+<ul>
+  <li class="nobullet"><code>--seed <string></code> – When given a unsigned integer value seeds the random number generator with that value. When given the string "time" seeds the random number generator with the system time. Default = <code>1</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Enzymatic digestion</h3>
+<ul>
+  <li class="nobullet"><code>--enzyme no-enzyme|trypsin|trypsin/p|chymotrypsin|elastase|clostripain|cyanogen-bromide|iodosobenzoate|proline-endopeptidase|staph-protease|asp-n|lys-c|lys-n|arg-c|glu-c|pepsin-a|elastase-trypsin-chymotrypsin|custom-enzyme</code> – Specify the enzyme used to digest the proteins in silico. Available enzymes (with the corresponding digestion rules indicated in parentheses) include no-enzyme ([X]|[X]), trypsin ([RK]|{P}), trypsin/p ([RK]|[]), chymotrypsin  [...]
+  <li class="nobullet"><code>--custom-enzyme <string></code> – Specify rules for in silico digestion of protein sequences. Overrides the enzyme option. Two lists of residues are given enclosed in square brackets or curly braces and separated by a |. The first list contains residues required/prohibited before the cleavage site and the second list is residues after the cleavage site. If the residues are required for digestion, they are in square brackets, '[' and ']'. If the re [...]
+  <li class="nobullet"><code>--digestion full-digest|partial-digest|non-specific-digest</code> – Specify whether every peptide in the database must have two enzymatic termini (full-digest) or if peptides with only one enzymatic terminus are also included (partial-digest). Default = <code>full-digest</code>.</li>
+  <li class="nobullet"><code>--missed-cleavages <integer></code> – Maximum number of missed cleavages per peptide to allow in enzymatic digestion. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Precursor selection</h3>
+<ul>
+  <li class="nobullet"><code>--precursor-window <float></code> – Tolerance used for matching peptides to spectra. Peptides must be within +/- 'precursor-window' of the spectrum value. The precursor window units depend upon precursor-window-type. Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--precursor-window-type mass|mz|ppm</code> – Specify the units for the window that is used to select peptides around the precursor mass location (mass, mz, ppm). The magnitude of the window is defined by the precursor-window option, and candidate peptides must fall within this window. For the mass window-type, the spectrum precursor m+h value is converted to mass, and the window is defined as that mass +/- precursor-window. If the m+h value is not avail [...]
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search parameters</h3>
+<ul>
+  <li class="nobullet"><code>--spectrum-min-mz <float></code> – The lowest spectrum m/z to search in the ms2 file. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--spectrum-max-mz <float></code> – The highest spectrum m/z to search in the ms2 file. Default = <code>1e+09</code>.</li>
+  <li class="nobullet"><code>--spectrum-charge 1|2|3|all</code> – The spectrum charges to search. With 'all' every spectrum will be searched and spectra with multiple charge states will be searched once at each charge state. With 1, 2, or 3 only spectra with that charge state will be searched. Default = <code>all</code>.</li>
+  <li class="nobullet"><code>--compute-sp T|F</code> – Compute the preliminary score Sp for all candidate peptides. Report this score in the output, along with the corresponding rank, the number of matched ions and the total number of ions. This option is recommended if results are to be analyzed by Percolator or Barista. If sqt-output is enabled, then compute-sp is automatically enabled and cannot be overridden. Note that the Sp computation requires re-processing each observed spe [...]
+  <li class="nobullet"><code>--precursor-window-weibull <float></code> – Search decoy peptides within +/- precursor-window-weibull of the precursor mass. The resulting scores are used only for fitting the Weibull distribution Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--precursor-window-type-weibull mass|mz|ppm</code> – Window type to use in conjunction with the precursor-window-weibull parameter. Default = <code>mass</code>.</li>
+  <li class="nobullet"><code>--min-weibull-points <integer></code> – Keep shuffling and collecting XCorr scores until the minimum number of points for weibull fitting (using targets and decoys) is achieved. Default = <code>4000</code>.</li>
+  <li class="nobullet"><code>--max-ion-charge <string></code> – Predict theoretical ions up to max charge state (1, 2, ... ,6) or up to the charge state of the peptide ("peptide"). If the max-ion-charge is greater than the charge state of the peptide, then the maximum is the peptide charge.  Default = <code>peptide</code>.</li>
+  <li class="nobullet"><code>--scan-number <string></code> – A single scan number or a range of numbers to be searched. Range should be specified as 'first-last' which will include scans 'first' and 'last'. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--mz-bin-width <float></code> – Before calculation of the XCorr score, the m/z axes of the observed and theoretical spectra are discretized. This parameter specifies the size of each bin. The exact formula for computing the discretized m/z value is floor((x/mz-bin-width) + 1.0 - mz-bin-offset), where x is the observed m/z value. For low resolution ion trap ms/ms data 1.0005079 and for high resolution ms/ms 0.02 is recommended. Default = <code>1.00 [...]
+  <li class="nobullet"><code>--mz-bin-offset <float></code> – In the discretization of the m/z axes of the observed and theoretical spectra, this parameter specifies the location of the left edge of the first bin, relative to mass = 0 (i.e., mz-bin-offset = 0.xx means the left edge of the first bin will be located at +0.xx Da). Default = <code>0.4</code>.</li>
+  <li class="nobullet"><code>--mod-mass-format mod-only|total|separate</code> – Specify how sequence modifications are reported in various output files. Each modification is reported as a number enclosed in square braces following the modified residue; however, the number may correspond to one of three different masses: (1) 'mod-only' reports the value of the mass shift induced by the modification; (2) 'total' reports the mass of the residue with the modification (residue mass plus [...]
+  <li class="nobullet"><code>--use-flanking-peaks T|F</code> – Include flanking peaks around singly charged b and y theoretical ions. Each flanking peak occurs in the adjacent m/z bin and has half the intensity of the primary peak. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fragment-mass average|mono</code> – Specify which isotopes to use in calculating fragment ion mass. Default = <code>mono</code>.</li>
+  <li class="nobullet"><code>--isotope-windows <string></code> – Provides a list of isotopic windows to search. For example, -1,0,1 will search in three disjoint windows: (1) precursor_mass - neutron_mass +/- window, (2) precursor_mass +/- window, and (3) precursor_mass + neutron_mass +/- window. The window size is defined from the precursor-window and precursor-window-type parameters. This option is only available when use-old-xlink=F. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--compute-p-values T|F</code> – Estimate the parameters of the score distribution for each spectrum by fitting to a Weibull distribution, and compute a p-value for each xlink product. This option is only available when use-old-xlink=F. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Fragment ion parameters</h3>
+<ul>
+  <li class="nobullet"><code>--use-a-ions T|F</code> – Consider a-ions in the search? Note that an a-ion is equivalent to a neutral loss of CO from the b-ion.  Peak height is 10 (in arbitrary units). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--use-b-ions T|F</code> – Consider b-ions in the search? Peak height is 50 (in arbitrary units). Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--use-c-ions T|F</code> – Consider c-ions in the search? Peak height is 50 (in arbitrary units). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--use-x-ions T|F</code> – Consider x-ions in the search? Peak height is 10 (in arbitrary units). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--use-y-ions T|F</code> – Consider y-ions in the search? Peak height is 50 (in arbitrary units). Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--use-z-ions T|F</code> – Consider z-ions in the search? Peak height is 50 (in arbitrary units). Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Cross-linking parameters</h3>
+<ul>
+  <li class="nobullet"><code>--use-old-xlink T|F</code> – Use the old version of xlink-searching algorithm. When false, a new version of the code is run. The new version supports variable modifications and can handle more complex databases. This new code is still in development and should be considered a beta release. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--xlink-include-linears T|F</code> – Include linear peptides in the search. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--xlink-include-deadends T|F</code> – Include dead-end peptides in the search. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--xlink-include-selfloops T|F</code> – Include self-loop peptides in the search. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--xlink-include-inter T|F</code> – Include inter-protein cross-link candidates within the search. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--xlink-include-intra T|F</code> – Include intra-protein cross-link candiates within the search. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--xlink-include-inter-intra T|F</code> – Include crosslink candidates that are both inter and intra. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--xlink-prevents-cleavage <string></code> – List of amino acids for which the cross-linker can prevent cleavage. This option is only available when use-old-xlink=F. Default = <code>K</code>.</li>
+  <li class="nobullet"><code>--max-xlink-mods <integer></code> – Specify the maximum number of modifications allowed on a crosslinked peptide. This option is only available when use-old-xlink=F. Default = <code>255</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+  <li class="nobullet"><code>--use-z-line T|F</code> – Specify whether, when parsing an MS2 spectrum file, Crux obtains the precursor mass information from the "S" line or the "Z" line.  Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--top-match <integer></code> – Specify the number of matches to report for each spectrum. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/sort-by-column.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/sort-by-column.html
new file mode 100644
index 0000000..81fc8f2
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/sort-by-column.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>sort-by-column</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>sort-by-column</h1>
+<h2>Usage:</h2>
+<p><code>crux sort-by-column [options] <tsv file> <column name></code></p>
+<h2>Description:</h2>
+<p>Sort the rows of a tab-delimited file according to the values in a specified column.</p>
+<h2>Input:</h2>
+<ul>
+  <li><code>tsv file</code> – A tab-delimited file, with column headers in the first row. Use "-" to read from standard input.</li>
+  <li><code>column name</code> – A column name.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – a copy of the given file, with rows sorted according to the values in the specified column.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--delimiter <string></code> – Specify the input and output delimiter to use when processing the delimited file.  The argument can be either a single character or the keyword 'tab.' Default = <code>tab</code>.</li>
+  <li class="nobullet"><code>--header T|F</code> – Print the header line of the file, in addition to the columns that match. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--column-type int|real|string</code> – Specifies the data type of the column, either an integer (int), a floating point number (real), or a string. Default = <code>string</code>.</li>
+  <li class="nobullet"><code>--ascending T|F</code> – Sort in ascending (T) or descending (F) order. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/spectral-counts.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/spectral-counts.html
new file mode 100644
index 0000000..f95b686
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/spectral-counts.html
@@ -0,0 +1,152 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>spectral-counts</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>spectral-counts</h1>
+<h2>Usage:</h2>
+<p><code>crux spectral-counts [options] <input PSMs></code></p>
+<h2>Description:</h2>
+<p>Given a collection of scored PSMs, produce a list of proteins or peptides ranked by a quantification score. Spectral-counts supports four types of quantification: Normalized Spectral Abundance Factor (NSAF), Distributed Normalized Spectral Abundance (dNSAF), Normalized Spectral Index (SI<sub>N</sub>) and Exponentially Modified Protein Abundance Index (emPAI). The NSAF method is from <a href="http://www.ncbi.nlm.nih.gov/pubmed/17138671">Paoletti et al. (2006)</a>. The SI<sub>N</sub> me [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>input PSMs</code> – A PSM file in either tab delimited text format (as produced by percolator, q-ranker, or barista) or pepXML format.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>spectral-counts.target.txt</code> – a tab-delimited text file containing the protein IDs and their corresponding scores, in sorted order.</li>
+  <li><code>spectral-counts.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other Crux programs.</li>
+  <li><code>spectral-counts.log.txt</code> – All messages written to standard error.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>spectral-counts options</h3>
+<ul>
+  <li class="nobullet"><code>--parsimony none|simple|greedy</code> – Perform a parsimony analysis on the proteins, and report a "parsimony rank" column in the output file. This column contains integers indicating the protein's rank in a list sorted by spectral counts. If the parsimony analysis results in two proteins being merged, then their parsimony rank is the same. In such a case, the rank is assigned based on the largest spectral count of any protein in the merged meta-protein [...]
+  <li class="nobullet"><code>--threshold <float></code> – Only consider PSMs with a threshold value. By default, q-values are thresholded using a specified threshold value. This behavior can be changed using the --custom-threshold and --threshold-min parameters. Default = <code>0.01</code>.</li>
+  <li class="nobullet"><code>--threshold-type none|qvalue|custom</code> – Determines what type of threshold to use when filtering matches. none : read all matches, qvalue : use calculated q-value from percolator or q-ranker, custom : use --custom-threshold-name and --custom-threshold-min parameters. Default = <code>qvalue</code>.</li>
+  <li class="nobullet"><code>--input-ms2 <string></code> – MS2 file corresponding to the psm file. Required to measure the SIN. Ignored for NSAF, dNSAF and EMPAI. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--unique-mapping T|F</code> – Ignore peptides that map to multiple proteins. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--quant-level protein|peptide</code> – Quantification at protein or peptide level. Default = <code>protein</code>.</li>
+  <li class="nobullet"><code>--measure RAW|NSAF|dNSAF|SIN|EMPAI</code> – Type of analysis to make on the match results: (RAW|NSAF|dNSAF|SIN|EMPAI). With exception of the RAW metric, the database of sequences need to be provided using --protein-database. Default = <code>NSAF</code>.</li>
+  <li class="nobullet"><code>--custom-threshold-name <string></code> – Specify which field to apply the threshold to. The direction of the threshold (<= or >=) is governed by --custom-threshold-min. By default, the threshold applies to the q-value, specified by "percolator q-value", "q-ranker q-value", "decoy q-value (xcorr)", or "barista q-value". Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--custom-threshold-min T|F</code> – When selecting matches with a custom threshold, custom-threshold-min determines whether to filter matches with custom-threshold-name values that are greater-than or equal (F) or less-than or equal (T) than the threshold. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--mzid-use-pass-threshold T|F</code> – Use mzid's passThreshold attribute to filter matches. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--protein-database <string></code> – The name of the file in FASTA format. Default = <code><empty></code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/stat-column.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/stat-column.html
new file mode 100644
index 0000000..71d8dc9
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/stat-column.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>stat-column</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>stat-column</h1>
+<h2>Usage:</h2>
+<p><code>crux stat-column [options] <tsv file> <column name></code></p>
+<h2>Description:</h2>
+<p>Given a tab-delimited file, collect summary statistics on the values within a specified column. The specified column must contain numeric values.</p>
+<h2>Input:</h2>
+<ul>
+  <li><code>tsv file</code> – A tab-delimited file, with column headers in the first row. Use "-" to read from standard input.</li>
+  <li><code>column name</code> – A column name.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – The program prints to standard output the following statistics for the specified column: number of rows, minimum, maximum, sum, average, and median of the data values.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--delimiter <string></code> – Specify the input and output delimiter to use when processing the delimited file.  The argument can be either a single character or the keyword 'tab.' Default = <code>tab</code>.</li>
+  <li class="nobullet"><code>--header T|F</code> – Print the header line of the file, in addition to the columns that match. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--precision <integer></code> – Set the precision for scores written to sqt and text files. Default = <code>8</code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/styles.css b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/styles.css
new file mode 100644
index 0000000..6eb6d2b
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/styles.css
@@ -0,0 +1,570 @@
+ at import url(https://fonts.googleapis.com/css?family=Roboto:400,300,600);
+
+* {
+    margin: 0;
+}
+a {
+  border: none;
+  text-decoration: none;
+}
+html {
+    font-size: 100%; /* 1 */
+    -webkit-text-size-adjust: 100%; /* 2 */
+    -ms-text-size-adjust: 100%; /* 2 */
+}
+
+body {
+    background-color: #ece8e5;
+     margin: 0;
+    padding: 0;
+	
+}
+
+/*Sticky Footer*/
+html, body {
+  height: 100%;
+    font-family: Arial,Verdana,sans-serif;
+	font-size:14px;
+}
+
+table {
+    border-collapse: collapse;
+}
+table > thead, th{
+  border: 1px solid #000;
+  padding:5px;
+  background: #4d87a2;
+  color:#f3f3f7;
+  font-weight: 400;
+  font-family: 'Roboto', sans-serif;
+}
+caption 
+{    font-weight: 400;
+    font-family: 'Roboto', sans-serif;
+    padding-left:10px;
+}
+table tr:nth-child(even) {
+  background: #f3f3f7;
+}
+
+.code {
+  background:#F8F8FF; 
+  border:black dashed 1px; 
+  padding:1px;
+  font:monospace;
+  padding-left:3px;
+  padding-right:3px;
+  padding-bottom:0px;
+  display: inline-block; /* box only as wide as content */
+}
+code {
+  font-family: monospace;
+}
+.page-wrap {
+  min-height: 100%;
+  margin-bottom: -180px; /* equal to footer height */  
+  width:100%;
+}
+.page-wrap:after {
+  content: "";
+  display: block;  
+}
+pre {
+    white-space: pre-wrap;       /* Since CSS 2.1 */
+    white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
+    white-space: -pre-wrap;      /* Opera 4-6 */
+    white-space: -o-pre-wrap;    /* Opera 7 */
+    word-wrap: break-word;       /* Internet Explorer 5.5+ */
+    padding: 10px;
+    background: #eee;
+    border-radius: 5px;
+    overflow-x: auto;
+    background: #f3f3f7;
+    border: 1px solid #dedee3;
+    margin-bottom: 22px;
+    font-family: monospace;
+    font-size: 12px;
+    overflow-x: auto;
+    white-space: pre-wrap; 
+    padding-bottom:0px;
+    display: inline-block;
+    padding-right:20px;
+}
+/* Content STYLES */
+#content {
+    background-color: #FFF;
+    min-height: calc(100vh - 280px);
+    width:80%;
+    margin:auto;
+    min-width:320px;
+    overflow: break-word;
+    padding:10px;
+    padding-bottom:20px;
+}
+#content p {
+  font-size:14px;
+  padding-top:5px;
+  padding-bottom:5px;
+}
+#content h2 {
+  font-size:30px;
+  color:#034463;
+  font-size: 30px; 
+  font-weight: 600; 
+  line-height: 30px; 
+  margin: 5px; 
+  text-align: center;
+  font-family: 'Roboto', sans-serif;
+}
+#content h3 {
+  font-size:20px;
+  padding:5px;
+  padding-top:15px;
+  padding-bottom:2px;
+  font-weight:400;
+  font-family: 'Roboto', sans-serif;
+}
+#content h4 {
+  font-size:16px;
+  padding:2px;
+  padding-left:5px;
+}
+#content a {
+  color: #2188b8;
+}
+#content a:hover {
+  color: #AA2244;
+}
+#content ul > li {
+
+}
+.nobullet {
+	 list-style-type: none;
+}
+/*END content STYLES*/
+#centerfooter {
+   display: inline-block;
+}
+.site-footer, .page-wrap:after {
+  height: 180px; 
+  text-align: center;
+}
+.site-footer {
+  background: #FFF;
+  color: #076FA2;
+  font-size:12px !important;
+  padding-top:30px;
+  /*margin-top:20px;*/
+  border-top: 2px solid #69B2D5;
+    font-family:Arial,Verdana,sans-serif !important;
+}
+.site-footer a{
+  color: #076FA2;
+  text-decoration: none;
+}
+.site-footer a:hover{
+  color: #2682AF;
+  text-decoration: none;
+}
+.site-footer h3 {
+  color:#034463;
+    font-size:16px;
+    line-height:22px;
+    border-bottom: 2px solid #B3DAED;
+    width:200px;
+}
+.site-footer img {
+  float:left;
+  padding-right:6px;
+}
+.footerimportantlinks {
+  float:left;
+  margin-left:50px;
+  height:100px;
+  text-align: left;
+}
+.footerimportantlinks ul{
+  float:left;
+  list-style-type: none;
+  margin-left:-40px;
+  margin-top:4px;
+ -moz-column-count: 2;
+    -moz-column-gap: 10px;
+    -webkit-column-count: 2;
+    -webkit-column-gap: 10px;
+    column-count: 2;
+    column-gap: 10px;
+
+}
+.footerimportantlinks li{
+  margin-top:5px;
+  width:150px;
+}
+.tutoriallinks {
+  margin-left:50px;
+}
+.tutoriallinks ul {
+   -moz-column-count: 1;
+    -moz-column-gap: 10px;
+    -webkit-column-count: 1;
+    -webkit-column-gap: 10px;
+    column-count: 1;
+    column-gap: 10px;
+}
+.tutoriallinks li {
+  width:300px;
+}
+#footertext {
+    float:left;
+    margin-top:20px;
+    padding-top:5px;
+    margin-left:20px;
+    height:100px;
+    width:300px;
+    border-top: 2px solid #B3DAED;
+}
+#footertext p {
+    text-align: center;
+    font-size:11px;
+}
+#footertext a {
+    color: #05577F;
+    text-decoration: underline;
+}
+/*******************/
+/* Responsive Menu */
+nav {
+    height: 100px;
+    overflow: show;
+    width: 100%;
+    background: #FFF;
+    font-size: 13pt;
+    font-weight: bold;
+    position: relative;
+    border-bottom: 2px solid #69B2D5;
+    min-width:300px;
+}
+
+#navitems a {
+    display: inline-block;
+    text-align: center;
+    text-decoration: none;
+    line-height: 40px;
+    padding-left:10px;
+    padding-right:10px;
+    color:#4f8bac;
+    /*text-shadow: 1px 1px 0px #283744;*/
+}
+
+nav header {
+    display: none;
+        
+}
+
+nav ul {
+    padding: 0;
+    width:100%;
+    /*margin-left:370px;*/
+    float:left;
+    padding-left: 20px;
+    /*margin: 0 auto; /* CENTER MENU */
+    width: 400px;
+    height: 40px;
+    margin-top:60px;
+    background: #FFF;
+}
+nav li {
+    display: inline;
+    float: left;
+}
+
+#logo{
+    float:left;
+    height:100px;
+    margin-left:10%;
+}
+
+nav li a {
+    border-right: 1px solid #4199C4;
+    box-sizing:border-box;
+    -moz-box-sizing:border-box;
+    -webkit-box-sizing:border-box;
+}
+
+nav li:last-child a {
+    border-right: 0;
+}
+#navitems a:hover, #navitems a:active {
+    background-color: #B3DAED;
+}
+
+ at media screen and (max-width: 1124px) { 
+  .page-wrap {
+    min-height: 100%;
+    margin-bottom: -250px; /* equal to footer height */
+  }
+  .site-footer, .page-wrap:after {
+    height: 250px; 
+  }
+  #footertext {
+    padding-top:40px;
+    border:none;
+    margin-top:20px;
+    display: inline;
+    width:90%;
+    padding-left: 20px;
+    padding-right:20px;
+    text-align: center;
+  }
+}
+/*Styles for 780px (footer changes)*/
+ at media screen and (max-width: 780px) {
+   table {
+      margin:0;
+    }
+    #content {
+      width:100%;
+    }
+    body {
+      background-color: #FFF;
+    }
+  nav { 
+        height: 140px;
+    }
+    
+    nav ul {
+        width: 100%;
+        display: block;
+        height: auto;
+        margin-top:0px;
+    }
+    
+    .footerimportantlinks {
+      margin-left:50px;
+      margin-top:10px;
+    }
+    .page-wrap {
+      min-height: 100%;
+      margin-bottom: -300px; /* equal to footer height */
+    }
+    .site-footer, .page-wrap:after {
+      height: 300px; 
+    }
+}
+ at media screen and (max-width: 730px) {
+    .page-wrap {
+      min-height: 100%;
+      margin-bottom: -380px; /* equal to footer height */
+    }
+    .site-footer, .page-wrap:after {
+      height: 380px; 
+    }
+}
+/*Styles for screen 600px and lower*/
+ at media screen and (max-width: 600px) {
+    nav { 
+        height: 182px;
+    }
+    
+    nav ul {
+        width: 100%;
+        display: block;
+        height: auto;
+    }
+    nav li {
+        width: 50%;
+        float: left;
+        position: relative;
+    }
+    nav li a {
+        border: none;
+    }
+    #navitems a {
+        text-align: left;
+        width: 100%;
+        text-indent: 25px;
+        background: #FFF;
+    }
+}
+
+/*Styles for screen 515px and lower*/
+ at media only screen and (max-width : 515px) {
+    #logo {
+        height: 33px;
+        padding-top:0px;
+    }
+     
+    nav {
+        border-bottom: 0;
+        width: 100%;
+        height: 33px;
+        padding: 7px 0 0 0;
+        
+    }
+    nav ul {
+        display: none;
+        height: auto;
+        padding: 0 0 0 0;
+        clear: both;
+        background: #2188b8; 
+    
+    }
+    .btn {
+        width: 24px;
+        height: 22px;
+        background: #034463;
+        float: left;
+        cursor: pointer;
+        margin: 0 10px 0 10px;
+        padding: 3px 0px 0 6px;
+        -webkit-border-radius: 2px;
+        -moz-border-radius: 2px;
+          border-radius: 2px;
+        background:url('images/hamburger-menu.png') no-repeat center;
+    }
+    
+    .btn .icon {
+  display: block;
+  width: 18px;
+  height: 2px;
+  margin-top: 3px;
+  background-color: #034463;
+  -webkit-border-radius: 1px;
+     -moz-border-radius: 1px;
+          border-radius: 1px;
+  -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+     -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+          box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+}
+
+    
+    
+    
+}
+
+/*Smartphone*/
+ at media only screen and (max-width : 320px) {
+    nav li {
+        display: block;
+        float: none;
+        width: 100%;
+    }
+    nav li a {
+        border-bottom: 1px solid #787878;
+    }
+}
+
+/*index.html*/
+/***********/
+blockquote {
+  font-family:monospace;
+}
+.indentcitation {
+	border-left:4px solid #034463;
+	padding: 0px 10px;
+  -webkit-box-decoration-break: clone;
+  box-decoration-break: clone;
+  break-word:none;
+  background-color:#f9f9f9;
+}
+#schematic img {
+  width:calc(100% + 20px);
+  margin-left:-10px;
+  margin-top:-10px;
+}
+#schematic p {
+    font-size:14px;
+    margin:0;
+    padding:0;
+    width: calc(100%-10px);
+    padding:10px;
+}
+#commandstable {
+  font-family:monospace;
+  font-size:15px;
+}
+
+#commandstable b {
+  font-size:17px;
+  font-family: Arial;
+  line-height: 40px;
+  vertical-align: text-bottom;
+}
+#commandstable td {
+  padding:5px;
+  border:none;
+}
+#commandstable td:nth-child(even) {
+  padding-left:10px;
+  font-family: Arial;
+}
+/* fileformats.html */
+#fileFormatsTable {
+  border-collapse: collapse;
+  margin-left:auto;
+  margin-right: auto;
+  padding:0;
+}
+#fileFormatsTable tr:nth-child(even) {
+  background: #DEDEDE;
+}
+#fileFormatsTable th, td {
+  padding-top:5px;
+  padding-bottom: 5px;
+  padding-left:3px;
+  border: 1px solid #000;
+}
+
+/* features.html */
+#featurestable {
+  text-align: left;
+  font-size:14px;
+}
+
+#featurestable td{
+  padding-left:3px;
+}
+
+/*txt-format.html*/
+#tabformat td {
+  padding:3px;
+  font-size:14px;
+}
+
+/*search.html*/
+.searchtable td {
+  padding:2px 4px 2px 4px;
+  border:1px solid #000;
+  font-size:12px;
+  word-wrap: break-word;
+}
+
+/*STYLES FOR ALL AUTOGENERATED CONTENT*/
+.autogenerated h1 {
+ font-size:30px;
+  color:#034463;
+  font-size: 30px; 
+  font-weight: 600; 
+  line-height: 30px; 
+  margin: 5px; 
+  text-align: center;
+  font-family: 'Roboto', sans-serif;
+}
+.autogenerated h2, h3, h4 {
+  color: #000 !important;
+  font-size:16px !important;
+  margin:2px !important;
+  text-align: left !important;
+  line-height: 16px !important;
+  font-weight:600 !important;
+}
+.autogenerated h2 {
+  margin-top:10px !important;
+}
+.autogenerated h3 {
+  font-size:14px !important;
+  padding:0px !important;
+}
+.autogenerated ul {
+  padding-left:20px;
+}
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/subtract-index.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/subtract-index.html
new file mode 100644
index 0000000..8a925b0
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/subtract-index.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>subtract-index</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>subtract-index</h1>
+<h2>Usage:</h2>
+<p><code>crux subtract-index [options] <tide index 1> <tide index 2> <output index></code></p>
+<h2>Description:</h2>
+<p>This command takes two peptide indices, created by the tide-index command, and subtracts the second index from the first. The result is an output index that contains peptides that appear in the first index but not the second.</p>
+<h2>Input:</h2>
+<ul>
+  <li><code>tide index 1</code> – A peptide index produced using tide-index</li>
+  <li><code>tide index 2</code> – A second peptide index, to be subtracted from the first index.</li>
+  <li><code>output index</code> – A new peptide index containing all peptides that occur in thefirst index but not the second.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>subtract-index.target.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited text file</a> containing the target peptides.</li>
+  <li><code>subtract-index.decoy.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited text file</a> containing the decoy peptides.</li>
+  <li><code>subtract-index.log.txt</code> – a log file containing a copy of all messages that were printed to stderr.</li>
+  <li><code>subtract-index.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--peptide-list T|F</code> – Create in the output directory a text file listing of all the peptides in the database, along with their neutral masses, one per line. If decoys are generated, then a second file will be created containing the decoy peptides. Decoys that also appear in the target database are marked with an asterisk in a third column. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/template.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/template.html
new file mode 100644
index 0000000..6ba71fa
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/template.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Template</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="index.html">Home</a></li>
+			    <li><a href="download.html">Download</a></li>
+			    <li><a href="fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tide-index.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tide-index.html
new file mode 100644
index 0000000..770cc21
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tide-index.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>tide-index</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>tide-index</h1>
+<h2>Usage:</h2>
+<p><code>crux tide-index [options] <protein fasta file> <index name></code></p>
+<h2>Description:</h2>
+<p>Tide is a tool for identifying peptides from tandem mass spectra. It is an independent reimplementation of the SEQUEST<sup>®</sup> algorithm, which assigns peptides to spectra by comparing the observed spectra to a catalog of theoretical spectra derived from a database of known proteins. Tide's primary advantage is its speed. Our published paper provides more detail on how Tide works. If you use Tide in your research, please cite:</p><blockquote>Benjamin J. Diament and William Sta [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>protein fasta file</code> – The name of the file in FASTA format from which to retrieve proteins.</li>
+  <li><code>index name</code> – The desired name of the binary index.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>index</code> – A binary index, using the name specified on the command line.</li>
+  <li><code>tide-index.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>tide-index.log.txt</code> – a log file containing a copy of all messages that were printed to the screen during execution.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Peptide properties</h3>
+<ul>
+  <li class="nobullet"><code>--max-length <integer></code> – The maximum length of peptides to consider. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--max-mass <float></code> – The maximum mass (in Da) of peptides to consider. Default = <code>7200</code>.</li>
+  <li class="nobullet"><code>--min-length <integer></code> – The minimum length of peptides to consider. Default = <code>6</code>.</li>
+  <li class="nobullet"><code>--min-mass <float></code> – The minimum mass (in Da) of peptides to consider. Default = <code>200</code>.</li>
+  <li class="nobullet"><code>--isotopic-mass average|mono</code> – Specify the type of isotopic masses to use when calculating the peptide mass. Default = <code>mono</code>.</li>
+  <li class="nobullet"><code>--clip-nterm-methionine T|F</code> – When set to T, for each protein that begins with methionine, tide-index will put two copies of the leading peptide into the index, with and without the N-terminal methionine. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Amino acid modifications</h3>
+<ul>
+  <li class="nobullet"><code>--mods-spec <string></code> – The general form of a modification specification has three components, as exemplified by <span style="color: red;">1</span><span style="color: green;">STY</span>+<span style="color: blue">79.966331</span>.<br>The three components are: [<span style="color: red;">max_per_peptide</span>]<span style="color: green;">residues</span>[+/-]<span style-"color: blue;">mass_change</span><br>In the example, <span style="color: red [...]
+  <li class="nobullet"><code>--cterm-peptide-mods-spec <string></code> – Specify peptide c-terminal modifications. See nterm-peptide-mods-spec for syntax. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--nterm-peptide-mods-spec <string></code> – Specify peptide n-terminal modifications. Like --mods-spec, this specification has three components, but with a slightly different syntax. The <span style="color: red;">max_per_peptide</span> can be either "1", in which case it defines a variable terminal modification, or missing, in which case the modification is static. The <span style="color: green;">residues</span> field indicates which amino acids a [...]
+  <li class="nobullet"><code>--max-mods <integer></code> – The maximum number of modifications that can be applied to a single peptide. Default = <code>255</code>.</li>
+  <li class="nobullet"><code>--min-mods <integer></code> – The minimum number of modifications that can be applied to a single peptide. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Decoy database generation</h3>
+<ul>
+  <li class="nobullet"><code>--decoy-format none|shuffle|peptide-reverse|protein-reverse</code> – Include a decoy version of every peptide by shuffling or reversing the target sequence or protein. In shuffle or peptide-reverse mode, each peptide is either reversed or shuffled, leaving the N-terminal and C-terminal amino acids in place. Note that peptides appear multiple times in the target database are only shuffled once. In peptide-reverse mode, palindromic peptides are shuffled.  [...]
+  <li class="nobullet"><code>--keep-terminal-aminos N|C|NC|none</code> – When creating decoy peptides using decoy-format=shuffle or decoy-format=peptide-reverse, this option specifies whether the N-terminal and C-terminal amino acids are kept in place or allowed to be shuffled or reversed. For a target peptide "EAMPK" with decoy-format=peptide-reverse, setting keep-terminal-aminos to "NC" will yield "EPMAK"; setting it to "C" will yield "PMAEK"; setting it to "N" will yield "EKPMA" [...]
+  <li class="nobullet"><code>--seed <string></code> – When given a unsigned integer value seeds the random number generator with that value. When given the string "time" seeds the random number generator with the system time. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--allow-dups T|F</code> – Prevent duplicate peptides between the target and decoy databases. When set to "F", the program keeps all target and previously generated decoy peptides in memory. A shuffled decoy will be re-shuffled multiple times to avoid duplication. If a non-duplicated peptide cannot be generated, the decoy is skipped entirely. When set to "T", every decoy is added to the database without checking for duplication. This option reduces the m [...]
+</ul>
+</li>
+<li class="nobullet">
+<h3>Enzymatic digestion</h3>
+<ul>
+  <li class="nobullet"><code>--enzyme no-enzyme|trypsin|trypsin/p|chymotrypsin|elastase|clostripain|cyanogen-bromide|iodosobenzoate|proline-endopeptidase|staph-protease|asp-n|lys-c|lys-n|arg-c|glu-c|pepsin-a|elastase-trypsin-chymotrypsin|custom-enzyme</code> – Specify the enzyme used to digest the proteins in silico. Available enzymes (with the corresponding digestion rules indicated in parentheses) include no-enzyme ([X]|[X]), trypsin ([RK]|{P}), trypsin/p ([RK]|[]), chymotrypsin  [...]
+  <li class="nobullet"><code>--custom-enzyme <string></code> – Specify rules for in silico digestion of protein sequences. Overrides the enzyme option. Two lists of residues are given enclosed in square brackets or curly braces and separated by a |. The first list contains residues required/prohibited before the cleavage site and the second list is residues after the cleavage site. If the residues are required for digestion, they are in square brackets, '[' and ']'. If the re [...]
+  <li class="nobullet"><code>--digestion full-digest|partial-digest|non-specific-digest</code> – Specify whether every peptide in the database must have two enzymatic termini (full-digest) or if peptides with only one enzymatic terminus are also included (partial-digest). Default = <code>full-digest</code>.</li>
+  <li class="nobullet"><code>--missed-cleavages <integer></code> – Maximum number of missed cleavages per peptide to allow in enzymatic digestion. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--peptide-list T|F</code> – Create in the output directory a text file listing of all the peptides in the database, along with their neutral masses, one per line. If decoys are generated, then a second file will be created containing the decoy peptides. Decoys that also appear in the target database are marked with an asterisk in a third column. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--temp-dir <string></code> – The name of the directory where temporary files will be created. If this parameter is blank, then the system temporary directory will be used Default = <code><empty></code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tide-search.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tide-search.html
new file mode 100644
index 0000000..d973456
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tide-search.html
@@ -0,0 +1,204 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>tide-search</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>tide-search</h1>
+<h2>Usage:</h2>
+<p><code>crux tide-search [options] <tide spectra file>+ <tide database></code></p>
+<h2>Description:</h2>
+<p>Tide is a tool for identifying peptides from tandem mass spectra. It is an independent reimplementation of the SEQUEST<sup>®</sup> algorithm, which assigns peptides to spectra by comparing the observed spectra to a catalog of theoretical spectra derived from a database of known proteins. Tide's primary advantage is its speed. Our published paper provides more detail on how Tide works. If you use Tide in your research, please cite:</p><blockquote>Benjamin J. Diament and William Sta [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>tide spectra file+</code> – The name of one or more files from which to parse the fragmentation spectra, in any of the file formats supported by ProteoWizard. Alternatively, the argument may be one or more binary spectrum files produced by a previous run of crux tide-search using the store-spectra parameter.</li>
+  <li><code>tide database</code> – Either a FASTA file or a directory containing a database index created by a previous run of crux tide-index.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>tide-search.target.txt</code> – a tab-delimited text file containing the target PSMs. See <a href="../file-formats/txt-format.html">txt file format</a> for a list of the fields.</li>
+  <li><code>tide-search.decoy.txt</code> – a tab-delimited text file containing the decoy PSMs. This file will only be created if the index was created with decoys.</li>
+  <li><code>tide-search.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other Crux programs.</li>
+  <li><code>tide-search.log.txt</code> – a log file containing a copy of all messages that were printed to the screen during execution.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Precursor selection</h3>
+<ul>
+  <li class="nobullet"><code>--precursor-window <float></code> – Tolerance used for matching peptides to spectra. Peptides must be within +/- 'precursor-window' of the spectrum value. The precursor window units depend upon precursor-window-type. Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--auto-precursor-window false|warn|fail</code> – Automatically estimate optimal value for the precursor-window parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--precursor-window-type mass|mz|ppm</code> – Specify the units for the window that is used to select peptides around the precursor mass location (mass, mz, ppm). The magnitude of the window is defined by the precursor-window option, and candidate peptides must fall within this window. For the mass window-type, the spectrum precursor m+h value is converted to mass, and the window is defined as that mass +/- precursor-window. If the m+h value is not avail [...]
+  <li class="nobullet"><code>--max-precursor-charge <integer></code> – The maximum charge state of a spectra to consider in search. Default = <code>5</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search parameters</h3>
+<ul>
+  <li class="nobullet"><code>--spectrum-min-mz <float></code> – The lowest spectrum m/z to search in the ms2 file. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--spectrum-max-mz <float></code> – The highest spectrum m/z to search in the ms2 file. Default = <code>1e+09</code>.</li>
+  <li class="nobullet"><code>--min-peaks <integer></code> – The minimum number of peaks a spectrum must have for it to be searched. Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--spectrum-charge 1|2|3|all</code> – The spectrum charges to search. With 'all' every spectrum will be searched and spectra with multiple charge states will be searched once at each charge state. With 1, 2, or 3 only spectra with that charge state will be searched. Default = <code>all</code>.</li>
+  <li class="nobullet"><code>--scan-number <string></code> – A single scan number or a range of numbers to be searched. Range should be specified as 'first-last' which will include scans 'first' and 'last'. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--compute-sp T|F</code> – Compute the preliminary score Sp for all candidate peptides. Report this score in the output, along with the corresponding rank, the number of matched ions and the total number of ions. This option is recommended if results are to be analyzed by Percolator or Barista. If sqt-output is enabled, then compute-sp is automatically enabled and cannot be overridden. Note that the Sp computation requires re-processing each observed spe [...]
+  <li class="nobullet"><code>--remove-precursor-peak T|F</code> – If true, all peaks around the precursor m/z will be removed, within a range specified by the --remove-precursor-tolerance option. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--remove-precursor-tolerance <float></code> – This parameter specifies the tolerance (in Th) around each precursor m/z that is removed when the --remove-precursor-peak option is invoked. Default = <code>1.5</code>.</li>
+  <li class="nobullet"><code>--exact-p-value T|F</code> – Enable the calculation of exact p-values for the XCorr score as described in <a href="http://www.ncbi.nlm.nih.gov/pubmed/24895379">this article</a>. Calculation of p-values increases the running time but increases the number of identifications at a fixed confidence threshold. The p-values will be reported in a new column with header "exact p-value", and the "xcorr score" column will be replaced with a "refactored xcorr" colu [...]
+  <li class="nobullet"><code>--use-neutral-loss-peaks T|F</code> – Controls whether neutral loss ions are considered in the search. Two types of neutral losses are included and are applied only to singly charged b- and y-ions: loss of ammonia (NH3, 17.0086343 Da) and H2O (18.0091422). Each neutral loss peak has intensity 1/5 of the primary peak. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--use-flanking-peaks T|F</code> – Include flanking peaks around singly charged b and y theoretical ions. Each flanking peak occurs in the adjacent m/z bin and has half the intensity of the primary peak. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mz-bin-width <float></code> – Before calculation of the XCorr score, the m/z axes of the observed and theoretical spectra are discretized. This parameter specifies the size of each bin. The exact formula for computing the discretized m/z value is floor((x/mz-bin-width) + 1.0 - mz-bin-offset), where x is the observed m/z value. For low resolution ion trap ms/ms data 1.0005079 and for high resolution ms/ms 0.02 is recommended. Default = <code>1.00 [...]
+  <li class="nobullet"><code>--auto-mz-bin-width false|warn|fail</code> – Automatically estimate optimal value for the mz-bin-width parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mz-bin-offset <float></code> – In the discretization of the m/z axes of the observed and theoretical spectra, this parameter specifies the location of the left edge of the first bin, relative to mass = 0 (i.e., mz-bin-offset = 0.xx means the left edge of the first bin will be located at +0.xx Da). Default = <code>0.4</code>.</li>
+  <li class="nobullet"><code>--peptide-centric-search T|F</code> – Carries out a peptide-centric search. For each peptide the top-scoring spectra are reported, in contrast to the standard spectrum-centric search where the top-scoring peptides are reported. Note that in this case the "xcorr rank" column will contain the rank of the given spectrum with respect to the given candidate peptide, rather than vice versa (which is the default). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--isotope-error <string></code> – List of positive, non-zero integers. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--skip-preprocessing T|F</code> – Skip preprocessing steps on spectra. Default = F. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>CPU threads</h3>
+<ul>
+  <li class="nobullet"><code>--num-threads <integer></code> – 0=poll CPU to set num threads; else specify num threads directly. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>param-medic options</h3>
+<ul>
+  <li class="nobullet"><code>--pm-min-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>400</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-frag-mz <float></code> – Minimum fragment m/z value to use in measurement error estimation. Default = <code>150</code>.</li>
+  <li class="nobullet"><code>--pm-max-frag-mz <float></code> – Maximum fragment m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-scan-frag-peaks <integer></code> – Minimum fragment peaks an MS/MS scan must contain to be used in measurement error estimation. Default = <code>40</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-delta-ppm <float></code> – Maximum ppm distance between precursor m/z values to consider two scans potentially generated by the same peptide for measurement error estimation. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--pm-charge <integer></code> – Precursor charge state to consider MS/MS spectra from, in measurement error estimation. Ideally, this should be the most frequently occurring charge state in the given data. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--pm-top-n-frag-peaks <integer></code> – Number of most-intense fragment peaks to consider for measurement error estimation, per MS/MS spectrum. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--pm-pair-top-n-frag-peaks <integer></code> – Number of fragment peaks per spectrum pair to be used in fragment error estimation. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--pm-min-common-frag-peaks <integer></code> – Number of the most-intense peaks that two spectra must share in order to potentially be generated by the same peptide, for measurement error estimation. Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--pm-max-scan-separation <integer></code> – Maximum number of scans two spectra can be separated by in order to be considered potentially generated by the same peptide, for measurement error estimation. Default = <code>1000</code>.</li>
+  <li class="nobullet"><code>--pm-min-peak-pairs <integer></code> – Minimum number of peak pairs (for precursor or fragment) that must be successfully paired in order to attempt to estimate measurement error distribution. Default = <code>100</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--top-match <integer></code> – Specify the number of matches to report for each spectrum. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--store-spectra <string></code> – Specify the name of the file where the binarized fragmentation spectra will be stored. Subsequent runs of crux tide-search will execute more quickly if provided with the spectra in binary format. The filename is specified relative to the current working directory, not the Crux output directory (as specified by --output-dir). This option is not valid if multiple input spectrum files are given. Default = <code><e [...]
+  <li class="nobullet"><code>--store-index <string></code> – When providing a FASTA file as the index, the generated binary index will be stored at the given path. This option has no effect if a binary index is provided as the index. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--concat T|F</code> – When set to T, target and decoy search results are reported in a single file, and only the top-scoring N matches (as specified via --top-match) are reported for each spectrum, irrespective of whether the matches involve target or decoy peptides. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--print-search-progress <integer></code> – Show search progress by printing every n spectra searched. Set to 0 to show no search progress. Default = <code>1000</code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+  <li class="nobullet"><code>--use-z-line T|F</code> – Specify whether, when parsing an MS2 spectrum file, Crux obtains the precursor mass information from the "S" line or the "Z" line.  Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--txt-output T|F</code> – Output a tab-delimited results file to the output directory. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--sqt-output T|F</code> – Outputs an SQT results file to the output directory. Note that if sqt-output is enabled, then compute-sp is automatically enabled and cannot be overridden. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pepxml-output T|F</code> – Output a pepXML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mzid-output T|F</code> – Output an mzIdentML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pin-output T|F</code> – Output a Percolator input (PIN) file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--file-column T|F</code> – Include the file column in tab-delimited output. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tutorials/customizedsearch.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tutorials/customizedsearch.html
new file mode 100644
index 0000000..7f75f4c
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tutorials/customizedsearch.html
@@ -0,0 +1,299 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Customization and search options</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>Customization and search options</h2>
+
+		<p><span class="prog">Crux</span> allows the user the flexibility to
+		change many of the search and analysis parameters.  Attributes like
+		the output format and which peptides are selected from the protein
+		database are controlled through numerous options.  This page
+		starts with some general information about options and then describe
+		the use of some key <span class="prog">crux</span> options.
+		</p>
+
+		<a name="intro"></a>
+		<h3>Introduction to options</h3>
+
+		<p>
+		A <span class="prog">crux</span> command is made up of four parts:
+		executable name, command, options, and required arguments. Let's use
+		a <span class="prog">crux tide-search</span> command as an example.
+		Here is the general form.</p>
+
+		<div class="code"><code>
+		$ crux tide-search [options] <mass spectra> <peptide index>
+		</code>
+		</div>
+
+		<p>
+		In this case, the command is <span class="prog">tide-search</span>.
+		This is followed by zero or more optional arguments.  Finally, the
+		required arguments, listed above inside angle brackets, include the
+		name of the file containing the spectra to be identified and the name
+		of a peptide index produced previously by
+		the <span class="prog">tide-index</span> command.</p>
+
+		<p>
+		All of the available options are described for each command on
+		the <a href="../index.html">documentation</a> pages.  You can also get a
+		list of available options by running a command with no arguments.
+		For example, the command</p>
+
+		<div class="code"><code>
+		$ crux tide-search</code>
+		</div>
+
+		<p>
+		will produce output that looks like this:</p>
+
+		<pre>
+bash-3.2$ ~/proj/crux/trunk/src/c/crux tide-search
+FATAL: Error in command line. Error # 5
+The required argument <tide spectra file> is missing.
+
+USAGE:
+
+   crux tide-search [options] <tide spectra file> <tide database index> 
+
+REQUIRED ARGUMENTS:
+
+  <tide spectra file> The name of the file from which to parse the fragmentation spectra, in any of the file formats supported by ProteoWizard. Alternatively, the argument may be a binary spectrum file produced by a previous run of crux tide-search using the store-spectra parameter.
+  <tide database index> A directory containing a database index created by a previous run of crux tide-index.
+
+OPTIONAL ARGUMENTS:
+
+  [--precursor-window <double>]
+     Search peptides within +/- 'precursor-window' of the spectrum mass. 
+     Definition of precursor window depends upon precursor-window-type.
+     Default=3.0.
+  [--precursor-window-type <string>]
+     Window type to use for selecting candidate peptides. 
+     <string>=mass|mz|ppm. Default=mass.
+  [--spectrum-min-mz <double>]
+     The lowest spectrum m/z to search. Default=0.0.
+  [--spectrum-max-mz <double>]
+     The highest spectrum m/z to search. Default=no maximum.
+  [--min-peaks <int>]
+     The minimum number of peaks a spectrum must have for it to be
+     searched. Default=20.
+...
+		</pre>
+
+		<p>The first three lines are telling you that you forgot the required
+		arguments and are reminding you what they are.  The following lines
+		list all the options (only five of which are shown
+		above).  <span class="prog">Crux</span> options all begin with two
+		dashes followed by the option name.  The name is followed by a space
+		and the appropriate argument.  This example increases the verbosity to
+		40:
+		</p>
+
+		<div class="code"><code>
+		$ crux tide-search --verbosity 40 sample.ms2 yeast.fasta</code>
+		</div>
+
+		<a name="file"></a>
+		<h3>Specifying options via a parameter file</h3>
+
+		<p>
+		The second option listed
+		above, <span class="out">--parameter-file</span>, is available for all
+		Crux commands.  The parameter file allows multiple options to be
+		specified in a file.  All of the command line options can be put in a
+		parameter file, but the format is slightly different.  In the
+		parameter file, the two leading dashes are removed from the option
+		name, and the option name and value must be separated by an equal sign
+		instead of a space:
+		</p>
+		<div class=code><code>
+		<option name>=<argument></code>
+		</div>
+
+		<p>
+		The above example, in which we changed the verbosity, would look like this
+		in a parameter file:</p>
+
+		<div class="code"><code>
+		verbosity=40
+		</code>
+		</div>
+
+		<p>
+		The parameter file allows only one option per line.  Lines beginning
+		with "#" are considered comments and are ignored.  A sample parameter
+		file can be found <a href="../file-formats/parameter-file.html">here</a>.  Command
+		line and parameter file options may be used separately or together.
+		If an option is specified in both places, then value on the command
+		line will be used.
+		</p>
+
+		<p>
+		During execution of any Crux command, a parameter file containing the
+		name and value of all the options for the current operation
+		will be automatically be saved in the output directory.  Note that not
+		all parameters in the file may have been used in the operation.  The
+		parameter file will be named
+		<code><command>.params.txt</code>,
+		where <code><tag></code> is the name of the command that was
+		executed.</p>
+
+		<a name="shared"></a>
+		<h3>Shared options</h3>
+
+		<p>
+		In addition to <code>--parameter-file</code>, Crux includes several 
+		other options that are shared across all, or nearly all, Crux commands.
+		</p>
+
+		<ul>
+		<li>
+		<code>--output-dir <filename></code> – 
+		The name of the directory where output files will be created.
+		Default = crux-output.</li>
+
+		<li>
+		<code>--fileroot <string></code> – 
+		The <code>fileroot</code> string will be added as a prefix to all
+		output file names. Default = none.</li>
+
+		<li>
+		<code>--overwrite <T|F></code> – By default, if Crux
+		detects that the output file it is about to produce already exists,
+		then Crux will exit with an error.  This option allows Crux to
+		overwrite existing files.</li>
+
+		<li>
+		<code>--verbosity <0-100></code> – Specify the verbosity
+		of the current command. Each level prints the following messages,
+		including all those at lower verbosity levels: 0-fatal errors,
+		10-non-fatal errors, 20-warnings, 30-information on the progress of
+		execution, 40-more progress information, 50-debug info, 60-detailed
+		debug info. Default = 30.</li>
+
+		<li>
+		In addition, many Crux commands include various options of the form
+		<code>--<format>-output</code>.  These options take Boolean
+		arguments (specified as "T" or "F") and indicate whether output files
+		in the specified format should be produced.  For example, in addition
+		to tab-delimited text format, <code>tide-search</code> can produce
+		output in PepXML, MZid, SQT and PINxml formats.</li>
+
+		</ul>
+
+		<a name="index"></a>
+		<h3>Changing the indexing and searching parameters</h3>
+
+		<p>
+		Various options to <span class="prog">tide-index</span> control how
+		the proteins in the database are converted to peptides.  These options
+		fall into several categories, allowing specification of peptide
+		properties such as minimum and maximum length, enzymatic digestion
+		rules, decoy database generation and specification of various static
+		and variable modifications.  These options are fully
+		documented <a href="../commands/tide-index.html">here</a>.  Similarly,
+		the <code><a href="../commands/tide-search.html">tide-search</a></code>
+		documentation describes options for selecting which spectra to score,
+		the rules for selecting candidate peptides for a given spectrum, and
+		for deciding what kinds of scores to report.</p>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="install.html">Installation</a></li>
+				<li><a href="gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="customizedsearch.html">Customization and search options</a></li>
+				<li><a href="spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tutorials/gettingstarted.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tutorials/gettingstarted.html
new file mode 100644
index 0000000..023bacb
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tutorials/gettingstarted.html
@@ -0,0 +1,218 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Getting started with Crux</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>Getting started with Crux</h2>
+
+		<p> This page will talk about setting up your environment and choosing
+		your input files.  Be sure to have completed the software <a
+		href="install.html">installation</a> first.
+		</p>
+
+		<a name="env"></a>
+		<h3>Your environment</h3>
+		<p>For this tutorial, we'll assume you are working in a Linux/Unix
+		type shell (<a href="http://www.cygwin.com/">cygwin</a> is a good
+		choice for Windows users) and already know some basic 
+		commands for changing directories, listing files, and other simple
+		tasks.  To successfully run the sample commands, you'll need to work from 
+		a directory for which you have write permission. Anywhere
+		in your home directory should work.  Create a new directory and
+		navigate to it.</p> 
+		<div class=code><code>
+		$ mkdir crux-demo<br>
+		$ cd crux-demo</code>
+		</div>
+		<p>
+		We will refer to this directory, <code>'crux-demo'</code>, as the
+		<em>working directory</em>.</p> 
+		<p>Next, make sure that the computer knows where to look for the
+		<span class=prog>crux</span> programs.  Try this command. </p>
+		<div class=code><code> 
+		$ which crux</code>
+		</div>
+		<p>
+		If it returns a single line with a path ending in <span
+		class=out>crux</span>, then you are set.  If not,
+		review the <a href="install.html#path">installation instructions</a> on setting your
+		<span class=code>$PATH</span> environment variable.
+
+		</p>
+
+		<a name=ms2></a>
+		<h3>Input file: mass spectra</h3>
+		<p>Included in the <span class=prog>crux</span> distribution in the
+		<span class=file>doc/example-files</span> directory are some 
+		sample files containing mass spectra.  We will use the <a
+		href="../example-files/demo.ms2">demo.ms2</a> for this tutorial.  Locate the
+		file and copy it to the current working directory.
+		</p>
+		<p>The beginning of the file looks like this.
+		</p>
+		<pre>
+H       CreationDate    2/14/2007 6:19:18 PM
+H       Extractor       MakeMS2
+H       ExtractorVersion        1.0
+H       Comments        MakeMS2 written by Michael J. MacCoss, 2004
+H       ExtractorOptions        MS2/MS1
+S       10      10      636.34
+Z       2       1271.67
+187.4 12.5
+193.1 19.5
+194.3 13.7
+		</pre>
+		<div class=note><em>NOTE: There are two kinds of optional lines which
+		may be included for each spectrum.  Lines beginning with </em><span
+		class=file>I</span><em> are contain information independent of the
+		charge state. Following a </em> <span class=file>Z</span><em> line may
+		be one beginning with </em><span class=file>D</span><em> containing
+		information specific to the above charge state. </em>
+		</div>
+
+		<p>
+		The first lines beginning with <span class=file>H</span> are the
+		header lines and contain information about the program that generated
+		the file, the date it was created, and so on.  The line starting with
+		<span class=file>S</span> begins the information about the first
+		spectrum.  Following the <span class=file>S</span> is the scan number
+		(twice) and the m/z of the precursor ion.  The lines beginning with
+		<span class=file>Z</span> list the possible charge states of the
+		spectrum (in this case 2) and the mass of the peptide at that
+		charge state.  Following the <span class=file>Z</span> lines is the
+		list of peaks for the spectrum.  The subsequent spectra in the file
+		repeat this pattern of <span class=file>S</span> line, <span
+		class=file>Z</span> line(s), and peak list.  <span
+		class=file>demo.ms2</span> contains 150 spectra.
+		</p>
+
+		<a name="fasta"></a>
+		<h3>Input file: protein database (fasta file)</h3>
+		<p>The second input file you will need is a protein database. 
+		This file is in fasta format and contains
+		a list of proteins you expect to find in your sample and their
+		sequences.  A sample fasta file is also comes with the distribution in
+		<span class=file>doc/example-files</span>. We will use <a
+		href="../example-files/small-yeast.fasta">small-yeast.fasta</a>.  Copy it to your
+		current working directory. 
+		</p>
+
+		<p>The beginning of the file looks like this.
+		</p>
+
+		<pre>
+>YBL030C PET9 SGDID:S000000126, Chr II from 164000-163044, reverse complement, Verified ORF, "Major ADP/ATP carrier of the mitochondrial inner membrane, exchanges cytosolic ADP for mitochondrially synthesized ATP; required for viability in many common lab strains carrying a mutation in the polymorphic SAL1 gene"
+MSSNAQVKTPLPPAPAPKKESNFLIDFLMGGVSAAVAKTAASPIERVKLLIQNQDEML
+KQGTLDRKYAGILDCFKRTATQEGVISFWRGNTANVIRYFPTQALNFAFKDKIKAMFG
+FKKEEGYAKWFAGNLASGGAAGALSLLFVYSLDYARTRLAADSKSSKKGGARQFNGLI
+DVYKKTLKSDGVAGLYRGFLPSVVGIVVYRGLYFGMYDSLKPLLLTGSLEGSFLASFL
+LGWVVTTGASTCSYPLDTVRRRMMMTSGQAVKYDGAFDCLRKIVAAEGVGSLFKGCGA
+NILRGVAGAGVISMYDQLQMILFGKKFK 
+		</pre>
+
+		<p>Lines beginning with <span class=file>></span> give the name of
+		a protein.  The first word is the protein name followed by an optional
+		description of any length.  The following lines contain the protein
+		sequence.  Proteins may or may not be separated by blank lines.
+		<span class=file>small-yeast.fasta</span> contains 56 proteins.
+		</p>
+	<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="install.html">Installation</a></li>
+				<li><a href="gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="customizedsearch.html">Customization and search options</a></li>
+				<li><a href="spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tutorials/install.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tutorials/install.html
new file mode 100644
index 0000000..3468902
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tutorials/install.html
@@ -0,0 +1,805 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Installation Instructions</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<div id="main">
+		<h2>Crux Installation Instructions</h2>
+
+		<p/>
+		This page will walk you through the steps of
+		installing <span class=prog>crux<span/> on your computer.
+		Seperate sections describe the installation for 
+		<a href="#LINUX">Linux</a>,
+		<a href="#OSX">OS X</a>,
+		and
+		<a href="#WINDOWS">Windows</a>.
+		You have the choice of installing precompiled binaries or building
+		Crux from the source code.
+		The compiled binaries offer the easiest installation option.  
+
+		<a name="LINUX"></a>
+		<h3>Linux</h3>
+		<b>Note:</b> when typing the commands shown in these instructions
+		do not type the
+		leading <code>$</code> before each command; it indicates the
+		prompt. These instructions will refer to your home directory as
+		<code>$HOME</code>.  You can type <code>$HOME</code> in the commands
+		or you can use the fully qualified path to your home directory which
+		may be something like <code>/home/yourname/</code>.  Note that you can
+		find out the location of your home directory by logging in and
+		typing <code>pwd</code> or <code>echo $HOME</code>.
+		<h3>Installing Pre-compiled Crux Binaries on Linux</h3>
+		<ul>
+		<li><b>Download the files</b> 
+		<p/>
+		<span class=prog>Crux</span> is freely
+		available for download under an
+		<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 license</a>.  
+		On the download page click on the link "Linux [architecture]
+		Build (zipped)" to download them to your computer.
+		If your computer is running a 32-bit version of Linux select the
+		i686 version.
+		If your computer is running a 64-bit version of Linux select the
+		x86_64 version.
+		If a window pops
+		up, select the "Save" button.
+		To check that the file was
+		transfered correctly, run this command
+
+		<div class=code><code>
+		$ md5sum <i>[downloaded file]</i></code>
+		</div>
+		<p/>
+		and compare the output to the "MD5 checksum" link next to the file you
+		downloaded.  
+		<p/>
+		</li>
+
+		<li><b>Unpack and install the files</b>
+		<p/>
+		The file you downloaded
+		should be named something like 
+		<span class=file>crux-x.xx-XXXX-GNU-Linux.zip</span>
+		where <span class=file>x.xx</span>
+		is replaced with the most current release version.
+		and 
+		<span class=file>XXXX</span> is either i686 or x86_64.
+		Move this file 
+		to a convenient location and unpack the file with this command.
+
+		<div class=code><code>
+		$ unzip crux-x.xx-XXXX-GNU-Linux.zip</code>
+		</div>
+		<p/>
+		You should now have a new directory,
+		<span class=file>crux-x.xx-XXXX-GNU-Linux</span>,
+		with two subdirectories <span class=file>bin</span>, and <span
+		class=file>doc</span>.  The <span class=prog>crux</span> programs are
+		in the <span class=file>bin</span> directory. You may want to move 
+		these files somewhere
+		more convenient for you, but otherwise, that completes the
+		installation!  Skip ahead to 
+		<a href="#linux_path">Setting the PATH on Linux and OS X</a>
+		for notes on how to run the executables.
+		</ul>
+		<h3>Building Crux From Source on Linux</h3>
+		<ul>
+		<li><b>Prerequisites</b>
+		<p/>
+		To build Crux from source on Linux you must have installed the
+		following software:
+		<ul>
+		<li><code>gcc</code></li>
+		<li><code>g++</code></li>
+		<li><code>cmake</code></li>
+		<li><code>make</code></li>
+		<li><code>svn</code></li>
+		<li><code>wget</code> (must support SSL)</li>
+		</ul>
+		<p/>
+		Building <span class=prog>crux</span> also requires the
+		<a href="http://proteowizard.sourceforge.net"><span class=prog>Proteowizard</span></a>
+		and 
+		<a href="http://per-colator.com"><span class=prog>Percolator</span></a>
+		libraries. 
+		These will automatically be copied from the <span class=prog>Proteowizard</span>
+		and <span class=prog>Percolator</span>
+		repositories and statically linked into <span class=prog>crux</span>.
+
+		<li><b>Download the files</b> 
+		<p/>
+		The <span class=prog>Crux</span> source is freely
+		available for download under an
+		<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 license></a>.  
+		On the download page click on the link "Source (tarred, gzipped)",
+		and choose save to disk if prompted. 
+		To check that the file was
+		transfered correctly, run this command
+
+		<div class=code><code>
+		$ md5sum <i>[downloaded file]</i></code>
+		</div>
+		<p/>
+		and compare the output to the "MD5 checksum" link next to the file you
+		selected on the Crux download page.  
+		<p/>
+		The file you downloaded should be named something like 
+		<span class=file>crux-x.xx.source.tar.gz</span>, 
+		where <span class=file>x.xx</span>
+		is replaced with the most current release version.
+		<li><b>Unpack the files</b>
+		<p/>
+		Move the downloaded file to a
+		convenient location and unpack it with this command.
+
+		<div class=code>
+		$ tar -zxvf crux-x.xx.Source.tar.gz
+		</div>
+		A new directory named <span class=file>crux-x.xx.Source</span> will be
+		created and a long list of files will stream by as they are being put
+		into the new directory.
+		<p/>
+		</li>
+
+		<li><b>Configure the build</b> 
+		<p/>
+		Move into the <span class=file>crux-x.xx.Source</span>
+		directory from step 1.
+		Run the command
+		<div class=code><code>
+		cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=<install directory> .
+		</code>
+		</div>
+		<p/>
+		where <span class=file><install directory></span> is
+		the location where you wish to install the <span class=prog>crux</span> programs. 
+		If you want <span class=prog>crux</span> to go in <span class=file>$HOME/bin</span>,
+		then <span class=file><install directory></span> would be <span class=file>$HOME</span>.
+		The installation process will automatically put the programs in a directory called
+		<span class=file>bin</span>.
+		<p/>
+		Note, this configuration will build with optimizations turned on,
+		and will not include debug symbols.
+		To build with optimizations turned off,
+		and debug symbols included,
+		use the command:
+		<div class=code><code>
+		cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX:PATH=<install directory> .
+		</code>
+		</div>
+		</li>
+		<p/>
+		<li><b>Build and install</b>
+		<p/>
+		To complete the process, run these two commands.</li>
+		<div class=code><code>
+		$ make<br>
+		$ make install
+		</code>
+		</div>
+		<p/>
+		The <span class=prog>crux</span> programs are
+		in the <span class=file>bin</span> subdirectory
+		of the
+		<span class=file><install directory></span>
+		That completes the installation!  Skip ahead to 
+		<a href="#linux_path">Setting the PATH on Linux and OS X</a>
+		for notes on how to run the executables.
+		</ul>
+		<a name="OSX"></a>
+		<h3>OS X</h3>
+		<span class=prog>Crux</span> requires OS X Yosemite or later.
+		<p/>
+		<b>Note:</b> 
+		when typing the commands shown in these instructions do not type the
+		leading <code>$</code> before each command; it indicates the
+		prompt. These instructions will refer to your home directory as
+		<code>$HOME</code>.  You can type <code>$HOME</code> in the commands
+		or you can use the fully qualified path to your home directory which
+		may be something like <code>/home/yourname/</code>.  Note that you can
+		find out the location of your home directory by logging in and
+		typing <code>pwd</code> or <code>echo $HOME</code>.
+		<p/>
+		To install and use <code>crux</code> on OS X
+		you'll need to be familiar with the <span class=code>Terminal</span>
+		application.
+		<h3>Installing Pre-compiled Crux Binaries on OS X</h3>
+		<ul>
+		<li><b>Download the files</b> 
+		<p/>
+		<span class=prog>Crux</span> is freely
+		available for download under an
+		<a href=""http://www.apache.org/licenses/LICENSE-2.0>Apache 2.0 license</a>.  
+		On the download page click on the link "OS X x86_64 Build (zipped)" 
+		to download them to your computer.
+		If a window pops
+		up, select the "Save" button.
+		To check that the file was
+		transfered correctly, run this command
+
+		<div class=code><code>
+		$ md5 <i>[downloaded file]</i></code>
+		</div>
+		<p/>
+		and compare the output to the "MD5 checksum" link next to the file you
+		downloaded.  
+		<p/>
+		</li>
+
+		<li><b>Unpack and install the files</b>
+		<p/>
+		The file you downloaded
+		should be named something like 
+		<span class=file>crux-x.xx.Darwin.x86_64.zip</span>
+		where <span class=file>x.xx</span>
+		is replaced with the most current release version.
+		Move this file 
+		to a convenient location and unpack the file with this command.
+
+		<div class=code><code>
+		$ unzip crux-x.xx.Darwin.x86_64.zip</code>
+		</div>
+		<p/>
+		You should now have a new directory,
+		<span class=file>crux-x.xx.Darwin.x86_64</span>,
+		with two subdirectories <span class=file>bin</span>, and <span
+		class=file>doc</span>.  The <span class=prog>crux</span> programs are
+		in the <span class=file>bin</span> directory. You may want to move 
+		these files somewhere
+		more convenient for you, but otherwise, that completes the
+		installation!  Skip ahead to 
+		<a href="#linux_path">Setting the PATH on Linux and OS X</a>
+		for notes on how to run the executables.
+		</ul>
+		<h3>Building Crux From Source on OS X</h3>
+		<ul>
+		<li><b>Prerequisites</b>
+		<p/>
+		To build Crux from source on OS X you must have installed the
+		following software:
+		<ul>
+		<li><code>OS X Yosemite or later</code></li>
+		<li><code>XCode 6.3.1 or later</code></li>
+		<li><code>XCode Command Line Tools</code></li>
+		<li><code>cmake</code></li>
+		<li><code>make</code></li>
+		<li><code>svn</code></li>
+		<li><code>wget</code> (must support SSL)</li>
+		<li><code>gnutar</code> (Apple's version of tar is incompatible with GNU's
+    version of tar)</li>
+		</ul>
+		<p/>
+		Building <span class=prog>crux</span> also requires the
+		<a href="http://proteowizard.sourceforge.net"><span class=prog>Proteowizard</span></a>
+		and 
+		<a href="http://per-colator.com"><span class=prog>Percolator</span></a>
+		libraries. 
+		These will automatically be copied from the <span class=prog>Proteowizard</span>
+		and <span class=prog>Percolator</span>
+		repositories and statically linked into <span class=prog>crux</span>.
+		<p />
+		Building <span class=prog>Crux</span> on OS X requires a current version of
+		<span class=prog>XCode</span>, and the XCode command line tools.
+		Earlier versions of <span class=prog>Crux</span> 
+		had to be built using the GCC compilers.
+		which are no supported by Apple.
+    If you have the both the GCC and Apple compilers installed, you'll need to
+    adjust the <span class=prog>PATH</span> environment variable so that the
+    Apple compilers are found first.
+    Alternatively, you can specify which compilers should be used by setting
+    the <span class=prog>CC</span>, and <span class=prog>CXX</span>.
+    For example,
+		<div class=code>
+    <code>
+    export CC=/usr/bin/gcc
+    <br />
+    export CXX=/usr/bin/g++
+    </code>
+		</div>
+		<p/>
+		The programs
+		<span class=prog>cmake</span>,
+		<span class=prog>svn</span>,
+		and
+		<span class=prog>wget</span>,
+		can be installed from 
+		<a href="https://www.macports.org">MacPorts</a>
+		or 
+		<a href="http://brew.sh">Homebrew</a>.
+		Note that you must install the <span class=prog>ssl</span> variant of 
+		<span class=prog>wget</span>:
+		<div class=code>
+		<code>
+		$ sudo port install wget +ssl
+		</code>
+		</div>
+		<p/>
+		<li><b>Download the files</b> 
+		<p/>
+		The <span class=prog>Crux</span> source is freely
+		available for download under an
+		<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 license></a>.  
+		On the download page click on the link "Source (tarred, gzipped)",
+		and choose save to disk if prompted. 
+		To check that the file was
+		transfered correctly, run this command
+
+		<div class=code><code>
+		$ md5sum <i>[downloaded file]</i></code>
+		</div>
+		<p/>
+		and compare the output to the "MD5 checksum" link next to the file you
+		selected on the Crux download page.  
+		<p/>
+		The file you downloaded should be named something like 
+		<span class=file>crux-x.xx.source.tar.gz</span>, 
+		where <span class=file>x.xx</span>
+		is replaced with the most current release version.
+		<li><b>Unpack the files</b>
+		<p/>
+		Move the downloaded file to a
+		convenient location and unpack it with this command.
+
+		<div class=code>
+		$ tar -zxvf crux-x.xx.Source.tar.gz
+		</div>
+		A new directory named <span class=file>crux-x.xx.Source</span> will be
+		created and a long list of files will stream by as they are being put
+		into the new directory.
+		<p/>
+		</li>
+
+		<li><b>Configure the build</b> 
+		<p/>
+		Move into the <span class=file>crux-x.xx.Source</span>
+		directory from step 1.
+		Run the command
+		<div class=code><code>
+		cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=<install directory> .
+		</code>
+		</div>
+		<p/>
+		where <span class=file><install directory></span> is
+		the location where you wish to install the <span class=prog>crux</span> programs. 
+		If you want <span class=prog>crux</span> to go in <span class=file>$HOME/bin</span>,
+		then <span class=file><install directory></span> would be <span class=file>$HOME</span>.
+		The installation process will automatically put the programs in a directory called
+		<span class=file>bin</span>.
+		<p/>
+		Note, this configuration will build with optimizations turned on,
+		and will not include debug symbols.
+		To build with optimizations turned off,
+		and debug symbols included,
+		use the command:
+		<div class=code><code>
+		cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX:PATH=<install directory> .
+		</code>
+		</div>
+		</li>
+		<p/>
+		<li><b>Build and install</b>
+		<p/>
+		To complete the process, run these two commands.</li>
+		<div class=code><code>
+		$ make<br>
+		$ make install
+		</code>
+		</div>
+		<p/>
+		The <span class=prog>crux</span> programs are
+		in the <span class=file>bin</span> subdirectory
+		of the
+		<span class=file><install directory></span>
+		That completes the installation!  Skip ahead to 
+		<a href="#linux_path">Setting the PATH on Linux and OS X</a>
+		for notes on how to run the executables.
+		</ul>
+
+		<a name="linux_path"></a>
+		<h3>Setting the PATH on Linux and OS X</h3>
+		<ul>
+		<li>
+		<p/>
+		On Linux and OS X systems you can always run any of the programs by specifying its full
+		path.  For example,</p>
+
+		<div class=code><code>
+		$ <em><install directory></em>/bin/crux comet</code>
+		</div>
+
+		<p>In this final step of the installation, we'll set things up so that
+		you can also run any of the programs by just typing its name.  This is
+		done with an environment variable called <span
+		class=code>$PATH</span>.  <span class=code>$PATH</span> is a list of
+		places that the computer looks for executable programs.  Find out what
+		is in the current list with this command:
+
+		<div class=code><code>
+		$ echo $PATH</code><br>
+		</div>
+		<p>The value returned might look something like this:
+		<code>
+		/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
+		</code>
+		<p>The first directory in this colon-separated list, <span
+		class=out>/usr/local/bin</span>, is the first place the computer looks
+		for a program.  If it doesn't find the program there it tries <span
+		class=out>/usr/bin</span> and so on down the list.  You can either
+		move the crux executable files into one of these directories already
+		in your PATH, or you can add <span
+		class=code><em><install directory></em></span> to PATH with this
+		command.  (Remember to replace the word <em><install directory></em> with the
+		actual location of your installation)</p> 
+
+		<div class=code><code>
+		$ export PATH=$PATH:<install directory>/bin</code>
+		</div>
+
+		<p>Try '<span class=code>echo $PATH</span>' again to see that the
+		change was made.  <em><install directory>/bin</em> should be at the end of the
+		list.  Now you can 
+		run the <span class=prog>crux</span> programs by just typing their
+		names.  Try this.</p>
+
+		<div class=code><code>
+		$ crux comet</code>
+		</div>
+
+		<p>The change to <span class=code>$PATH</span> is only temporary.  As
+		soon as you close the window, the change will disappear.  In order to
+		make the change every time you log on, add the line <span
+		class=code>export PATH=$PATH:<install directory>/bin</span> to the file <span
+		class=out>.bashrc</span> located in your home directory.  You will
+		have to log on again for the change to take effect.
+		</ul>
+		<a name="WINDOWS"></a>
+		<h3>Windows</h3>
+		<h3>Installing Pre-compiled Crux Binaries on Windows</h3>
+
+		<ul>
+		<li><b>Prerequisites</b>
+		<p/>
+		To run Crux with support for vendor specific file formats
+		on Windows you must have installed the following software:
+		<ul>
+		<li>
+		<a href="https://thermo.flexnetoperations.com/control/thmo/login">
+		<code>Thermo MSFileReader</code></a>
+    </li>
+		<li>
+		<a href="https://www.microsoft.com/en-us/download/details.aspx?id=40784">
+		<code>Visual C++ 2013 Runtime Libraries</code></a>
+    </li>
+		</ul>
+		<p/>
+		<li><b>Download the files</b> 
+		<p/>
+		<span class=prog>Crux</span> is freely
+		available for download under an
+		<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 license</a>.  
+		On the download page click on the link "Windows x86
+		Build (zipped)" to download them to your computer.
+		If a window pops up, select the "Save" button.
+		</li>
+		<li><b>Unpack and install the files</b>
+		<p/>
+		Browse to the downloaded file in Windows Explorer.
+		Right click on the file and choose "Expand All ...".
+		You should now have a new directory,
+		<span class=file>crux-x.xx</span>,
+		with two subdirectories <span class=file>bin</span>, and <span
+		class=file>doc</span>.  The <span class=prog>crux</span> programs are
+		in the <span class=file>bin</span> directory. You may want to move 
+		these files somewhere
+		more convenient for you, but otherwise, that completes the
+		installation!  Skip ahead to 
+		<a href="#windows_path">Setting the PATH on Windows</a>
+		for notes on how to run the executables.
+		</ul>
+
+		<h3>Building Crux From Source on Windows</h3>
+		<ul>
+		<li><b>Prerequisites</b>
+		<p/>
+		To build Crux from source on Windows you must have installed the
+		following software:
+		<ul>
+		<li><code>
+		<a
+		href="http://www.visualstudio.com/downloads/download-visual-studio-vs#DownloadFamilies_4">Microsoft
+		Visual C++ 2013</a></code></li>
+		<li><a href="http://www.cmake.org/cmake/resources/software.html"><code>CMake</code></a></li>
+		<li><a href="http://sourceforge.net/projects/win32svn/"><code>SVN</code></a></li>
+		<li><a href="http://getgnuwin32.sourceforge.net"><code>wget</code> (must support SSL)</a></li>
+		<li><a
+		href="https://thermo.flexnetoperations.com/control/thmo/login">
+		<code>Thermo MSFileReader</code></a> (This may be omitted if support for 
+		vendor specific file formats is disabled.)</li>
+		</ul>
+		<p/>
+		<b>Other verions of Visual Studio will not be able to build Crux!</b>
+		You must have Visual Studio 2013.
+		Visual Studio 2013 Express for Windows Desktop does work.
+		<p/>
+		<span class=code>wget</span> is available as part of the GnuWin32 package.
+		The easiest way to install this is via the 
+		<a href="http://getgnuwin32.sourceforge.net"><code>GetGnuWin32</code></a>
+		package manager.
+		<span class=code>wget</span> must support SSL, so install the optional
+		packages provided by
+		<a href="http://getgnuwin32.sourceforge.net"><code>GetGnuWin32</code></a> .
+		<p/>
+		<span class=code>wget</span> and 
+		<span class=code>svn</span> must be included in the execution PATH
+		for your system.
+		See the section <i>Setting the PATH on Windows</i> for more information.
+		<p/>
+		<li><b>Download the file</b> 
+		<p/>
+		The <span class=prog>Crux</span> source is freely
+		available for download under an
+		<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 license></a>.  
+		On the download page click on the link "Source (zipped)",
+		and choose save to disk if prompted. 
+		<p/>
+		The file you downloaded should be named something like 
+		<span class=file>crux-x.xx.Source.zip</span>, 
+		where <span class=file>x.xx</span>
+		is replaced with the most current release version.
+		<p />
+		<li><b>Unpack the files</b> 
+		<p />
+		Unpack the downloaded file using Windows Explorer.
+		Right click on the file icon and click on "Extract All ...".
+		A new directory named <span class=file>crux-x.xx.Source</span> will be
+		created containing the source code and documentation for Crux.
+		<p/>
+		<b>Note</b> Windows has a fixed maximum path length of 270 characters.
+		The Crux build creates several levels of directories so it
+		is very easy to exceed this limit. 
+		This will cause the build to fail.
+		To avoid this problem we recommend keeping the Crux source and build trees 
+		very near the disk root (typically
+		<span class=code>C:\</span>
+
+		</li>
+		<li>
+		<p/>
+		<b>Open the command line development environment.</b>
+		<p/>
+		Under the "Start" button
+		open the "Visual Studio 2013" folder, then open the "Visual Studio Tools"
+		folder, and double-click on "Developer Command Prompt for VS2013".
+		This will launch a 
+		<span class=file>cmd</span> shell configured to use the 
+		Microsoft development tools.
+		</li>
+		<li><b>Configure</b> 
+		<p/>
+		In the <span class=file>cmd</span> shell  you just opened,
+		move into the <span class=file>crux-x.xx.Source</span>
+		directory from step 1.
+		Run the command
+		<div class=code><code>
+		cmake -DCMAKE_INSTALL_PREFIX:PATH=<install directory> -G "Visual Studio
+		12 Win64" .
+		</code>
+		</div>
+		<p/>
+		where <span class=file><install directory></span> is
+		the location where you wish to install the <span class=prog>crux</span> programs. 
+		Note that, somewhat confusingly, Visual Studio 2013 is version 12.
+		<p/>
+		If you wish to disable support for vendor specific file formats,
+		use this command instead
+		<p/>
+		<div class=code><code>
+		cmake 
+		-DCMAKE_INSTALL_PREFIX:PATH=<install directory> -DINCLUDE_VENDOR_LIBRARIES=FALSE -G "Visual Studio 12 Win64" .
+		</code>
+		</div>
+		<p/>
+		<li><b>Build and install</b> 
+		<p/>
+		To complete the process run the commands</li>
+		<div class=code><code>
+		cmake --build . --config Release --target ALL_BUILD
+		<br/>
+		cmake --build . --config Release --target INSTALL
+		</code>
+		<p/>
+		Once you've run the configuration step
+		you can also build and debug Crux from within the Visual Studio IDE.
+		CMake will generate a file named
+		<span class=file>crux.sln</span>. 
+		Open this file in Visual Studio.
+		You can select the build configuration: Release or Debug
+		in the combo box under the menu bar.
+		<p/>
+		<b>Note</b> The Crux build will not automatically generate
+		debugging symbols even if you've selected the Debug configuration.
+		Right click on the Crux folder in the "Solution Explorer" and
+		select "Properties" from the pop-up menu.
+		In the "Properties" page select the "Debugging" item under the "Linker"
+		properties. Set "Generate Debug Info" to "Yes".
+		<p/>
+		Changes made to the Visual Studio solution and project files will be lost
+		the next time CMake regenerates the project.
+		</div>
+		<p/>
+
+		</ul>
+		</ul>
+
+		<a name="windows_path"></a>
+		<h3>Setting the PATH on Windows</h3>
+		<ul>
+		<li>
+		On Windows systems you can always run any of the programs by specifying its full
+		path.  For example,</p>
+
+		<div class=code><code>
+		C:\ <em><install directory></em>\bin\crux comet</code>
+		</div>
+
+		<p>In this final step of the installation, we'll set things up so that
+		you can also run any of the programs by just typing its name.  This is
+		done with an environment variable called <span
+		class=code>PATH</span>.  <span class=code>PATH</span> is a list of
+		directoires that the computer looks for executable programs.  Find out what
+		is in the current list with this command:
+		<p/>
+		<div class=code><code>
+		C:\ echo %PATH%</code><br>
+		</div>
+		<p/>
+		<p>The value returned might look something like this:
+		<p/>
+		<div class=code><code>
+		<code>
+		C:\Windows;C:\Windows\system32;c:\Program Files\Microsoft Visual 
+		Studio 10.0\Common7\IDE\;c:\Program Files\Microsoft 
+		Visual Studio 10.0\VC\BIN;C:\Program Files\Common Files\Microsoft Shared\
+		Windows Live;C:\Windows\System32\Wbem;C:\Windows\S
+		ystem32\WindowsPowerShell\v1.0\;c:\Program files\Notepad++;C:\Program Files\Tort
+		oiseSVN\bin;C:\Program Files\Windows Live\Shared;C:\Program Files\CMake 2.8\bin;
+		C:\Program Files\PuTTY;C:\Program Files\Subversion\bin;C:\GnuWin32\bin;
+		</code>
+		</div>
+		<p>The first directory in this semicolon-separated list, <span
+		class=out>C:\Windows</span>, is the first place the computer looks
+		for a program.  If it doesn't find the program there it tries <span
+		class=out>C:\WIndows\system32</span> and so on down the list.  You can either
+		move the crux executable files into one of these directories already
+		in your PATH, or you can add <span
+		class=code><em><install directory></em></span> to PATH with this
+		command.  (Remember to replace the word <em><install directory></em> with the
+		actual location of your installation)</p> 
+		<div class=code><code>
+		  set PATH=%PATH%;<install directory>\bin;</code><br>
+		</div>
+		<p>The change to <span class=code>PATH</span> is only temporary.
+		To make a permanent change to the path follow the following steps:
+		<ol>
+		<li>Open the "Control Panel".</li>
+		<li>Click on "System and Security".</li>
+		<li>Click on "Advanced System Settings" in the list on the left 
+		(you may be asked to give an administrative password).
+		<li>
+		You'll  presented with a dialog box titled "System Properties".
+		Click on the button labeled "Environment Variables".
+		<li>
+		You'll be presented with a new dialog box containing two list boxes: one for user
+		environment variables, and one for system environment variables.
+		Select the 
+		<span class=code>PATH</span>
+		variable in the system variables list, and click on the "Edit ..." button.
+		<li>
+		Add the full path to the directory containing the Crux executables to the 
+		list of directories. Remember that each
+		<span class=code>PATH</span>
+		entry should end with a semi-colon.
+		</ol>
+
+		</div>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="install.html">Installation</a></li>
+				<li><a href="gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="customizedsearch.html">Customization and search options</a></li>
+				<li><a href="spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tutorials/search.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tutorials/search.html
new file mode 100644
index 0000000..2788a27
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tutorials/search.html
@@ -0,0 +1,422 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Running a Simple Search Using Tide and Percolator</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>Running a Simple Search Using Tide and Percolator</h2>
+
+		<p>
+		Now that you have your environment <a href="gettingstarted.html">set
+		up</a> and the two input files in your working directory, you can
+		conduct the search. The search process compares each spectrum
+		in <span class=file>demo.ms2</span> to peptides (subsequences of the
+		proteins) in fasta files provided in a
+		dirctory, <span class=file>yeast-index/</span>.  Peptides whose
+		precursor mass is close to that of the observed spectrum are scored
+		against that spectrum, and the top scores are reported in the output.
+		To conduct the search, we first create a peptide index
+		using <code>tide-index</code> and then execute the search
+		using <code>tide-search</code>.</p>
+
+		<ol>
+		<li>
+		<div class=code>
+		<code>$ crux tide-index small-yeast.fasta yeast-index </code>
+		</div>
+
+		<p>
+		While generating the peptide index, you will see output like this:</p>
+
+		<pre>
+INFO: CPU: pyrrolysine.gs.washington.edu
+INFO: Crux version: 2.1
+INFO: Fri Feb  5 11:24:02 PST 2016
+COMMAND LINE: ./crux tide-index small-yeast.fasta yeast-index
+INFO: Running tide-index...
+INFO: Writing results to output directory 'yeast-index'.
+INFO: Reading small-yeast.fasta and computing unmodified peptides...
+INFO: Writing decoy fasta...
+INFO: Reading proteins
+INFO: Precomputing theoretical spectra...
+INFO: Elapsed time: 0.0973 s
+INFO: Finished crux tide-index.
+INFO: Return Code:0
+		</pre>
+
+		<p>
+		This command produces the peptide index in <code>yeast-index</code>
+		and also produces a directory <code>crux-output</code> containing 
+		the following files:
+		<ol>
+
+		<li>
+		tide-index.decoy.fasta – a set of decoy proteins, derived from
+		the proteins in the input set,</li>
+
+		<li>
+		tide-search.params.txt – a record of all the parameters used in
+		the search, and</li>
+
+		<li>tide-search.log.txt – a log file containing a copy of all
+		  the messages printed to the screen during the search.</li>
+		</ol>
+
+		<p>
+		Now you can run this command:</p></li>
+
+		<div class=code>
+		<li><code>$ crux tide-search --compute-sp T demo.ms2 yeast-index</code>
+		</div>
+
+		<p>While the search is running, you will see output like this:</p>
+
+		<pre>
+INFO: CPU: pyrrolysine.gs.washington.edu
+INFO: Crux version: 2.1
+INFO: Fri Feb  5 11:24:23 PST 2016
+COMMAND LINE: ./crux tide-search --compute-sp T demo.ms2 yeast-index
+INFO: Running tide-search...
+INFO: Reading index yeast-index
+INFO: Converting demo.ms2 to spectrumrecords format
+INFO: Reading spectra file crux-output/demo.ms2.spectrumrecords.tmp
+INFO: Sorting spectra
+INFO: Running search
+INFO: Time per spectrum-charge combination: 0.002318 s.
+INFO: Average number of candidates per spectrum-charge combination: 15.204820 
+INFO: Elapsed time: 0.389 s
+INFO: Finished crux tide-search.
+INFO: Return Code:0
+		</pre>
+
+		<p>
+		The <span class=file>crux-output</span> directory now contains four new files
+		containing the search results:
+
+		<ol>
+
+		<li>
+		tide-search.target.txt – search results
+		in <a href="../file-formats/txt-format.html">tab-delimited format</a>.</li>
+
+		<li>
+		tide-search.decoy.txt – search results from a decoy database
+		in <a href="../file-formats/txt-format.html">tab-delimited format</a>.</li>
+
+		<li>
+		tide-search.params.txt – a record of all the parameters used in
+		the search.</li>
+
+		<li>tide-search.log.txt – a log file containing a copy of all
+		  the messages printed to the screen during the search.</li>
+		</ol>
+
+		</p>
+		</li>
+
+		<p>
+		  Note that the peptide-spectrum matches (PSMs) in the
+		  tide-search.target.txt are sorted by the precursor m/z value
+		  associated with the spectrum. If you want to see which PSMs got the
+		  highest XCorr scores, you can do so like this:</p>
+
+		<div class=code>
+		<li><code>$ crux sort-by-column --column-type real --ascending T crux-output/tide-search.target.txt "xcorr score" > crux-output/tide-search.target.sort.txt</code>
+		</div>
+
+		<p>
+		  The first lines of the resulting sorted output file should look like this:</p>
+
+		<table class="searchtable">
+		<td><b>file</b></td><td><b>scan</b></td><td><b>charge</b></td><td><b>spectrum precursor m/z</b></td><td><b>spectrum neutral mass</b></td><td><b>peptide mass</b></td><td><b>delta_cn</b></td><td><b>sp score</b></td><td><b>sp rank</b></td><td><b>xcorr score</b></td><td><b>xcorr rank</b></td><td><b>b/y ions matched</b></td><td><b>b/y ions total</b></td><td><b>distinct matches/spectrum</b></td><td><b>sequence</b></td><td><b>cleavage type</b></td><td><b>protein id</b></td><td><b>flanking aa< [...]
+		<tr>
+		<td>demo.ms2</td><td>85</td><td>3</td><td>497.618</td><td>1489.83</td><td>1488.82</td><td>0.936932</td><td>2430.56</td><td>1</td><td>5.20757</td><td>1</td><td>27</td><td>48</td><td>3</td><td>NFLETVELQVGLK</td><td>trypsin-full-digest</td><td>YGL135W(27)</td><td>RN</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>118</td><td>3</td><td>1031.94</td><td>3092.8</td><td>3093.41</td><td>0.949698</td><td>2383.16</td><td>1</td><td>4.76204</td><td>1</td><td>44</td><td>108</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C(500)</td><td>KD</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>156</td><td>3</td><td>1032.44</td><td>3094.3</td><td>3093.41</td><td>0.938358</td><td>1929.77</td><td>1</td><td>4.7476</td><td>1</td><td>43</td><td>108</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C(500)</td><td>KD</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>18</td><td>3</td><td>1032.4</td><td>3094.18</td><td>3093.41</td><td>0.902056</td><td>1732.23</td><td>1</td><td>4.48933</td><td>1</td><td>40</td><td>108</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C(500)</td><td>KD</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>11</td><td>2</td><td>745.269</td><td>1488.52</td><td>1488.82</td><td>0.822851</td><td>2816.6</td><td>1</td><td>4.44855</td><td>1</td><td>21</td><td>24</td><td>4</td><td>NFLETVELQVGLK</td><td>trypsin-full-digest</td><td>YGL135W(27)</td><td>RN</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>53</td><td>2</td><td>745.749</td><td>1489.48</td><td>1488.82</td><td>0.935648</td><td>2797.78</td><td>1</td><td>4.39828</td><td>1</td><td>21</td><td>24</td><td>3</td><td>NFLETVELQVGLK</td><td>trypsin-full-digest</td><td>YGL135W(27)</td><td>RN</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>38</td><td>3</td><td>1032.39</td><td>3094.15</td><td>3093.41</td><td>0.975741</td><td>1460.28</td><td>1</td><td>4.39627</td><td>1</td><td>37</td><td>108</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C(500)</td><td>KD</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>42</td><td>3</td><td>1032.26</td><td>3093.76</td><td>3093.41</td><td>1.0216</td><td>1509.47</td><td>1</td><td>4.35676</td><td>1</td><td>38</td><td>108</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C(500)</td><td>KD</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>111</td><td>3</td><td>1033.02</td><td>3096.04</td><td>3093.41</td><td>0.952727</td><td>1366.71</td><td>1</td><td>4.3498</td><td>1</td><td>36</td><td>108</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C(500)</td><td>KD</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>62</td><td>2</td><td>745.859</td><td>1489.7</td><td>1488.82</td><td>0.913711</td><td>2766.65</td><td>1</td><td>4.34057</td><td>1</td><td>21</td><td>24</td><td>3</td><td>NFLETVELQVGLK</td><td>trypsin-full-digest</td><td>YGL135W(27)</td><td>RN</td></tr>
+		</table>
+
+
+		<p>
+		The final step is to post-process the search results using Percolator.
+		Each spectrum has been compared to many peptides and we would like to
+		return only the best match for each spectrum.  We also expect that
+		some fraction of the spectra will not be identifiable as peptides (due
+		to chemical noise, multiple peptides co-eluting, poor fragmentation,
+		etc.).  The analysis step filters out those spectra and ranks the
+		matches by quality.
+		</p></li>
+
+		<li>
+		<div class=code><code>
+		$ crux percolator crux-output/tide-search.target.txt</code>
+		</div>
+
+		<p>While the analysis is running, you will see output like this
+		</p>
+
+		<pre>
+INFO: CPU: pyrrolysine.gs.washington.edu
+INFO: Crux version: 2.1
+INFO: Fri Feb  5 11:25:51 PST 2016
+COMMAND LINE: ./crux percolator crux-output/tide-search.target.txt
+INFO: Reading file crux-output/tide-search.target.txt
+INFO: Running make-pin
+INFO: Parsing crux-output/tide-search.target.txt
+INFO: Parsing crux-output/tide-search.decoy.txt
+INFO: There are 690 target matches and 690 decoys
+INFO: Finished make-pin.
+INFO: Percolator version 2.09, Build Date Sep 22 2015 14:29:11
+INFO: Copyright (c) 2006-9 University of Washington. All rights reserved.
+INFO: Written by Lukas Käll (lukall at u.washington.edu) in the
+INFO: Department of Genome Sciences at the University of Washington.
+INFO: Issued command:
+INFO: percolator -r crux-output/percolator.target.peptides.txt -v 2 -P decoy_ --seed 1 -p 0.01 -n 0 --trainFDR 0.01 --testFDR 0.01 --maxiter 10 -s crux-output/make-pin.pin
+INFO: Started Fri Feb  5 11:25:52 2016
+INFO:  on pyrrolysine.gs.washington.edu
+INFO: Hyperparameters selectionFdr=0.01, Cpos=0.01, Cneg=0, maxNiter=10
+INFO: Reading Tab delimited input from datafile crux-output/make-pin.pin
+INFO: Features:
+INFO: lnrSp deltCn XCorr Sp IonFrac PepLen Charge1 Charge2 Charge3 enzN enzC enzInt lnNumSP dM absdM 
+INFO: Train/test set contains 690 positives and 690 negatives, size ratio=1 and pi0=1
+INFO: selecting cneg by cross validation
+INFO: Selected feature number 4 as initial search direction, could separate 39 positives in that direction
+INFO: Selected feature number 3 as initial search direction, could separate 38 positives in that direction
+INFO: Selected feature number 3 as initial search direction, could separate 30 positives in that direction
+INFO: Estimating 53 over q=0.01 in initial direction
+INFO: Reading in data and feature calculation took 0.03 cpu seconds or 0 seconds wall time
+INFO: ---Training with Cpos=0.01, Cneg selected by cross validation, fdr=0.01
+INFO: Iteration 1 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 2 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 3 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 4 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 5 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 6 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 7 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 8 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 9 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 10 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Obtained weights (only showing weights of first cross validation set)
+INFO: # first line contains normalized weights, second line the raw weights
+INFO: lnrSp	deltCn	XCorr	Sp	IonFrac	PepLen	Charge1	Charge2	Charge3	enzN	enzC	enzInt	lnNumSP	dM	absdM	m0
+INFO: 0.0352	0.0014	0.1465	0.2956	-0.0130	0.0224	0.0051	-0.0025	-0.0020	0.0000	0.0000	-0.0001	-0.0049	-0.0055	0.0169	-0.9248
+INFO: 0.0580	0.0069	0.2096	0.0010	-0.0922	0.0052	0.0136	-0.0052	-0.0053	0.0000	0.0000	-0.0006	-0.0077	-0.0059	0.0300	-1.1931
+INFO: After all training done, 56 target PSMs with q<0.0100 were found when measuring on the test set
+INFO: Found 56 target PSMs scoring over 1.0000% FDR level on testset
+INFO: Merging results from 3 datasets
+INFO: Target Decoy Competition yielded 116 target PSMs and 50 decoy PSMs
+INFO: Tossing out "redundant" PSMs keeping only the best scoring PSM for each unique peptide.
+INFO: Calibrating statistics - calculating q values
+INFO: Merged list gives 9 peptides over q=0.0100
+INFO: Calibrating statistics - calculating Posterior error probabilities (PEPs)
+INFO: Processing took 0.67 cpu seconds or 0 seconds wall time
+INFO: Elapsed time: 0.933 s
+INFO: Finished crux percolator.
+INFO: Return Code:0
+		</pre>
+
+		<p>
+		The <span class=file>crux-output</span> directory will now contain
+		eight new files:</p>
+		<ol>
+
+		<li>
+		percolator.target.psms.txt – a list of peptide-spectrum matches
+		(PSMs), ranked by quality,</li>
+
+		<li>
+		percolator.target.peptides.txt – a list of peptides, ranked by
+		quality,</li>
+
+		<li>
+		percolator.decoy.psms.txt – a ranked list of decoy PSMs, </li>
+
+		<li>
+		percolator.decoy.peptides.txt – a ranked list of decoy peptides,</li>
+
+		<li>
+		percolator.pout.xml – a single XML output file containing all of
+		the Percolator results,</li>
+
+		<li>
+		make-pin.pin.xml: an intermediate XML format file that is used by
+		Percolator.</li>
+
+		<li>
+		percolator.params.txt – parameter file, and</li>
+
+		<li>
+		percolator.log.txt – log file.</li>
+
+		</ol>
+		</p>
+
+		<p>
+		  As before, you might want to sort the Percolator output files, this
+		  time by the "percolator score" column:</p>
+
+
+		<li>
+		<div class=code><code>
+		$ crux sort-by-column --column-type real --ascending T crux-output/percolator.target.psms.txt "percolator score" > crux-output/percolator.target.psms.sort.txt
+		</code>
+		</div>
+
+		<p>
+		The beginning of the resulting percolator.target.psms.sort.txt file will look like
+		this:</p>
+
+		<table class="searchtable">
+		<td><b>file</b></td><td><b>file_idx</b></td><td><b>scan</b></td><td><b>charge</b></td><td><b>spectrum precursor m/z</b></td><td><b>spectrum neutral mass</b></td><td><b>peptide mass</b></td><td><b>percolator score</b></td><td><b>percolator rank</b></td><td><b>percolator q-value</b></td><td><b>total matches/spectrum</b></td><td><b>sequence</b></td><td><b>cleavage type</b></td><td><b>protein id</b></td><td><b>flanking aa</b></td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>118</td><td>3</td><td>1031.9407</td><td>3092.8000</td><td>3095.2366</td><td>8.6190662</td><td>1</td><td>0</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C</td><td>KD</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>26</td><td>2</td><td>692.3773</td><td>1382.7400</td><td>1382.4467</td><td>7.0481362</td><td>2</td><td>0</td><td>6</td><td>TASEFDSAIAQDK</td><td>trypsin-full-digest</td><td>YLR043C</td><td>KL</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>53</td><td>2</td><td>745.7473</td><td>1489.4800</td><td>1489.7318</td><td>6.7469611</td><td>3</td><td>0</td><td>3</td><td>NFLETVELQVGLK</td><td>trypsin-full-digest</td><td>YGL135W</td><td>RN</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>62</td><td>2</td><td>745.8572</td><td>1489.7000</td><td>1489.7318</td><td>6.6489625</td><td>4</td><td>0</td><td>3</td><td>NFLETVELQVGLK</td><td>trypsin-full-digest</td><td>YGL135W</td><td>RN</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>146</td><td>2</td><td>692.6772</td><td>1383.3400</td><td>1382.4467</td><td>6.6027999</td><td>5</td><td>0</td><td>5</td><td>TASEFDSAIAQDK</td><td>trypsin-full-digest</td><td>YLR043C</td><td>KL</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>131</td><td>2</td><td>745.8473</td><td>1489.6801</td><td>1489.7318</td><td>6.5627294</td><td>6</td><td>0</td><td>3</td><td>NFLETVELQVGLK</td><td>trypsin-full-digest</td><td>YGL135W</td><td>RN</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>50</td><td>2</td><td>651.2873</td><td>1300.5601</td><td>1301.4160</td><td>6.3757763</td><td>7</td><td>0</td><td>10</td><td>LDVDELGDVAQK</td><td>trypsin-full-digest</td><td>YLR043C</td><td>KN</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>42</td><td>3</td><td>1032.2606</td><td>3093.7600</td><td>3095.2366</td><td>5.8047724</td><td>8</td><td>0</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C</td><td>KD</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>90</td><td>3</td><td>1032.0006</td><td>3092.9800</td><td>3095.2366</td><td>5.4775882</td><td>9</td><td>0</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C</td><td>KD</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>111</td><td>3</td><td>1033.0206</td><td>3096.0400</td><td>3095.2366</td><td>5.4364419</td><td>10</td><td>0</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C</td><td>KD</td></tr>
+		</table>
+
+		<p>
+		In this output, the PSMs are ranked by "percolator score," with higher
+		scores indicating a higher quality match. The associated statistical
+		confidence estimate is reported as a "percolator q-value," interpreted
+		as the minimal false discovery rate threshold at which this match is
+		deemed significant.  In the list above, all of the matches have
+		q-values of 0, meaning that they are highly significant.
+		The meanings of the remaining columns are
+		described <a href="../file-formats/txt-format.html">here</a>.  Note that when you run
+		Percolator on your own computer, the results may be somewhat
+		different than the ones reported here.  This is because Percolator
+		involves randomly subdividing the data in a cross-validation scheme
+		(described in detail
+		<a href="http://bmcbioinformatics.biomedcentral.com/articles/10.1186/1471-2105-13-S16-S3">here</a>.)</p>
+		</li>
+		</ol>
+	<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="install.html">Installation</a></li>
+				<li><a href="gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="customizedsearch.html">Customization and search options</a></li>
+				<li><a href="spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tutorials/spectralcounts.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tutorials/spectralcounts.html
new file mode 100644
index 0000000..4e5be1c
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/tutorials/spectralcounts.html
@@ -0,0 +1,182 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Using spectral-counts</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>Using spectral-counts</h2>
+
+		<p> 
+		After you have run a <a href="search.html">search</a> and
+		assigned confidence to your identified PSMs, you can now calculate
+		relative quantification values for the proteins by running the
+		command:<br>
+
+		<div class=code>
+		<code>$ crux spectral-counts --protein-database small-yeast.fasta ./crux-output/percolator.target.psms.txt</code>
+		</div>
+		<br>
+		Alternatively, you can use the pepXML output by q-ranker using the command:<br>
+		<br>
+		<div class=code>
+		<code>$ crux spectral-counts --protein-database small-yeast.fasta ./crux-output/percolator.target.psms.txt</code>
+		</div>
+
+		<p>While the command is running, you will see output like this
+		</p>
+
+		<pre>
+INFO: Beginning spectral-counts.
+INFO: Total proteins found: 56
+INFO: Number of matches passed the threshold 116
+		</pre>
+
+		<p>When the command is finished, it will print</p>
+		<pre>
+INFO: Finished crux spectral-counts.
+		</pre>
+
+		<p>
+		Within the <code>crux-output</code> directory, there will be three new files:
+		<li>spectral-counts.target.txt – tab-delimited file of the <code>spectral-counts</code> results</li>
+		<li>spectral-counts.params.txt – the parameters used for running <code>spectral-counts</code></li>
+		<li>spectral-counts.log.txt – the log output of <code>spectral-counts</code></li>
+		</p>
+
+		<p>The spectral-counts.target.txt file will look something like:<br>
+		<pre>
+protein id 	NSAF
+YLR043C 	0.61643416
+YGL135W 	0.17810018
+YEL027W 	0.10352074
+YGL009C 	0.035437137
+YLR185W 	0.031369921
+YJR069C 	0.014012959
+YGR192C 	0.0083149187
+YMR235C 	0.0067826854
+YBR118W 	0.0060274079
+		</pre>
+
+		<p>
+		In this output, the first field is the identifier and the second field
+		is the spectral-counting measure (NSAF, dNSAF, SIN, or EMPAI) result
+		for each protein.  To select which measure is computed, see the
+		<a href="../commands/spectral-counts.html">crux spectral-counts</a> documentation.</p>
+
+
+		<h3>Using peptideprophet probability from pepXML</h3>
+		<p><code>crux spectral-counts</code> also supports using the Peptide Prophet probability provided in the pepXML file.  Use the command:<br>
+		<br>
+		<div class=code>
+		<code>$ crux spectral-counts --protein-database small-yeast.fasta --threshold-type custom --custom-threshold-name peptideprophet --threshold 0.9 --custom-threshold-min F target.pep.xml</code>
+		</div>          
+		This code will filter out matches whose Peptide Prophet probability is < 0.9 and calculate NSAF for the proteins of the remaining PSMs.<br>
+
+		<h3>Using mzIdentML files with spectral-counts</h3>
+		<p><code>crux spectral-counts</code> also supports mzIdentML as input.  For example, </p> 
+		<div class="code">
+			$ crux spectral-counts --measure RAW file.mzid
+		</div>
+		<p>
+		If the protein sequences are not provided in the mzIdentML file, then you will have to provide
+		a database using the <span class="code">protein-database</span> parameter for the NSAF, dNSAF, EMPAI, and SIN metrics.
+		</p>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="install.html">Installation</a></li>
+				<li><a href="gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="customizedsearch.html">Customization and search options</a></li>
+				<li><a href="spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/xlink-assign-ions.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/xlink-assign-ions.html
new file mode 100644
index 0000000..84897bb
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/xlink-assign-ions.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>xlink-assign-ions</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>xlink-assign-ions</h1>
+<h2>Usage:</h2>
+<p><code>crux xlink-assign-ions [options] <peptide A> <peptide B> <pos A> <pos B> <link mass> <charge state> <scan number> <ms2 file></code></p>
+<h2>Description:</h2>
+Given a spectrum and a pair of cross-linked peptides, assign theoretical ion type labels to peaks in the observed spectrum.
+<h2>Input:</h2>
+<ul>
+  <li><code>peptide A</code> – The sequence of peptide A.</li>
+  <li><code>peptide B</code> – The sequence of peptide B.</li>
+  <li><code>pos A</code> – Position of cross-link on peptide A</li>
+  <li><code>pos B</code> – Position of cross-link on peptide B</li>
+  <li><code>link mass</code> – The mass modification of the linker when attached to a peptide.</li>
+  <li><code>charge state</code> – The charge state of the peptide.</li>
+  <li><code>scan number</code> – Scan number identifying the spectrum.</li>
+  <li><code>ms2 file</code> – File containing spectra to be searched.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – tab-delimited text in which each row is a peak in the observed spectrum, and the columns are <ol><li>The m/z value.</li><li>The observed intensity.</li><li>The matched intensity.</li><li>The calculated m/z value of the theoretical peak.</li><li>The mass associated with the observed peak.</li><li>The mass difference (in ppm) between the observed and theoretical peaks.</li><li>The ion type, specified as b or y, followed by the charge state in parentheses.< [...]
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Search parameters</h3>
+<ul>
+  <li class="nobullet"><code>--fragment-mass average|mono</code> – Specify which isotopes to use in calculating fragment ion mass. Default = <code>mono</code>.</li>
+  <li class="nobullet"><code>--max-ion-charge <string></code> – Predict theoretical ions up to max charge state (1, 2, ... ,6) or up to the charge state of the peptide ("peptide"). If the max-ion-charge is greater than the charge state of the peptide, then the maximum is the peptide charge.  Default = <code>peptide</code>.</li>
+  <li class="nobullet"><code>--mz-bin-width <float></code> – Before calculation of the XCorr score, the m/z axes of the observed and theoretical spectra are discretized. This parameter specifies the size of each bin. The exact formula for computing the discretized m/z value is floor((x/mz-bin-width) + 1.0 - mz-bin-offset), where x is the observed m/z value. For low resolution ion trap ms/ms data 1.0005079 and for high resolution ms/ms 0.02 is recommended. Default = <code>1.00 [...]
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+  <li class="nobullet"><code>--precision <integer></code> – Set the precision for scores written to sqt and text files. Default = <code>8</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/xlink-score-spectrum.html b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/xlink-score-spectrum.html
new file mode 100644
index 0000000..be37984
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/xlink-score-spectrum.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>xlink-score-spectrum</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>xlink-score-spectrum</h1>
+<h2>Usage:</h2>
+<p><code>crux xlink-score-spectrum [options] <peptide A> <peptide B> <pos A> <pos B> <link mass> <charge state> <scan number> <ms2 file></code></p>
+<h2>Description:</h2>
+Given a cross-linked peptide and a spectrum calculate the corresponding XCorr score a number of different ways, depending upon the xlink-score-method parameter:<ul><li>composite – compute a combined XCorr score</li><li>modification - score the two peptides separately, treating the second peptide as a variable modification on the first peptide</li><li>concatenated - score as the concatenation of the two peptides.  Note that this mode gives four scores, corresponding to the two relat [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>peptide A</code> – The sequence of peptide A.</li>
+  <li><code>peptide B</code> – The sequence of peptide B.</li>
+  <li><code>pos A</code> – Position of cross-link on peptide A</li>
+  <li><code>pos B</code> – Position of cross-link on peptide B</li>
+  <li><code>link mass</code> – The mass modification of the linker when attached to a peptide.</li>
+  <li><code>charge state</code> – The charge state of the peptide.</li>
+  <li><code>scan number</code> – Scan number identifying the spectrum.</li>
+  <li><code>ms2 file</code> – File containing spectra to be searched.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – XCorr score(s) in descending order</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>xlink-score-spectrum options</h3>
+<ul>
+  <li class="nobullet"><code>--xlink-score-method composite|modification|concatenated</code> – Score method for xlink {composite, modification, concatenated}. Default = <code>composite</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search parameters</h3>
+<ul>
+  <li class="nobullet"><code>--use-flanking-peaks T|F</code> – Include flanking peaks around singly charged b and y theoretical ions. Each flanking peak occurs in the adjacent m/z bin and has half the intensity of the primary peak. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Fragment ion parameters</h3>
+<ul>
+  <li class="nobullet"><code>--use-a-ions T|F</code> – Consider a-ions in the search? Note that an a-ion is equivalent to a neutral loss of CO from the b-ion.  Peak height is 10 (in arbitrary units). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--use-b-ions T|F</code> – Consider b-ions in the search? Peak height is 50 (in arbitrary units). Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--use-c-ions T|F</code> – Consider c-ions in the search? Peak height is 50 (in arbitrary units). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--use-x-ions T|F</code> – Consider x-ions in the search? Peak height is 10 (in arbitrary units). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--use-y-ions T|F</code> – Consider y-ions in the search? Peak height is 50 (in arbitrary units). Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--use-z-ions T|F</code> – Consider z-ions in the search? Peak height is 50 (in arbitrary units). Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/license.txt b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/license.txt
new file mode 100644
index 0000000..9176754
--- /dev/null
+++ b/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/license.txt
@@ -0,0 +1,12 @@
+Copyright 2007-2013 University of Washington
+Licensed under the Apache License, Version 2.0 (the "License"); 
+you may not use this file except in compliance with the License. 
+You may obtain a copy of the License at 
+
+  http://www.apache.org/licenses/LICENSE-2.0 
+
+Unless required by applicable law or agreed to in writing, software 
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+See the License for the specific language governing permissions and 
+limitations under the License. 
diff --git a/cmake_install.cmake b/cmake_install.cmake
new file mode 100644
index 0000000..45930ad
--- /dev/null
+++ b/cmake_install.cmake
@@ -0,0 +1,58 @@
+# Install script for directory: /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+# Set the install prefix
+IF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+  SET(CMAKE_INSTALL_PREFIX "/usr/local")
+ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+  IF(BUILD_TYPE)
+    STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+  ELSE(BUILD_TYPE)
+    SET(CMAKE_INSTALL_CONFIG_NAME "Release")
+  ENDIF(BUILD_TYPE)
+  MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+
+# Set the component getting installed.
+IF(NOT CMAKE_INSTALL_COMPONENT)
+  IF(COMPONENT)
+    MESSAGE(STATUS "Install component: \"${COMPONENT}\"")
+    SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+  ELSE(COMPONENT)
+    SET(CMAKE_INSTALL_COMPONENT)
+  ENDIF(COMPONENT)
+ENDIF(NOT CMAKE_INSTALL_COMPONENT)
+
+# Install shared libraries without execute permission?
+IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+  SET(CMAKE_INSTALL_SO_NO_EXE "0")
+ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+
+IF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified")
+  FILE(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/." TYPE FILE FILES "/data/TeamCity/buildAgent/work/779d99b0241b2175/license.txt")
+ENDIF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified")
+
+IF(NOT CMAKE_INSTALL_LOCAL_ONLY)
+  # Include the install script for each subdirectory.
+  INCLUDE("/data/TeamCity/buildAgent/work/779d99b0241b2175/doc/user/cmake_install.cmake")
+  INCLUDE("/data/TeamCity/buildAgent/work/779d99b0241b2175/ext/cmake_install.cmake")
+  INCLUDE("/data/TeamCity/buildAgent/work/779d99b0241b2175/src/cmake_install.cmake")
+  INCLUDE("/data/TeamCity/buildAgent/work/779d99b0241b2175/test/smoke-tests/cmake_install.cmake")
+  INCLUDE("/data/TeamCity/buildAgent/work/779d99b0241b2175/test/performance-tests/cmake_install.cmake")
+
+ENDIF(NOT CMAKE_INSTALL_LOCAL_ONLY)
+
+IF(CMAKE_INSTALL_COMPONENT)
+  SET(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt")
+ELSE(CMAKE_INSTALL_COMPONENT)
+  SET(CMAKE_INSTALL_MANIFEST "install_manifest.txt")
+ENDIF(CMAKE_INSTALL_COMPONENT)
+
+FILE(WRITE "/data/TeamCity/buildAgent/work/779d99b0241b2175/${CMAKE_INSTALL_MANIFEST}" "")
+FOREACH(file ${CMAKE_INSTALL_MANIFEST_FILES})
+  FILE(APPEND "/data/TeamCity/buildAgent/work/779d99b0241b2175/${CMAKE_INSTALL_MANIFEST}" "${file}\n")
+ENDFOREACH(file)
diff --git a/crux_version.h b/crux_version.h
new file mode 100644
index 0000000..08a753d
--- /dev/null
+++ b/crux_version.h
@@ -0,0 +1 @@
+#define CRUX_VERSION "3.1"
diff --git a/crux_version.h.txt b/crux_version.h.txt
new file mode 100644
index 0000000..08a753d
--- /dev/null
+++ b/crux_version.h.txt
@@ -0,0 +1 @@
+#define CRUX_VERSION "3.1"
diff --git a/debian/changelog b/debian/changelog
deleted file mode 100644
index 9bbad5b..0000000
--- a/debian/changelog
+++ /dev/null
@@ -1,5 +0,0 @@
-crux (3.1-1) UNRELEASED; urgency=low
-
-  * Initial release (Closes: #<bug>)
-
- -- Andreas Tille <tille at debian.org>  Tue, 29 Sep 2015 15:21:50 +0200
diff --git a/debian/compat b/debian/compat
deleted file mode 100644
index f599e28..0000000
--- a/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-10
diff --git a/debian/control b/debian/control
deleted file mode 100644
index df0aa8d..0000000
--- a/debian/control
+++ /dev/null
@@ -1,24 +0,0 @@
-Source: crux
-Maintainer: Debian Med Packaging Team <debian-med-packaging at lists.alioth.debian.org>
-Uploaders: Andreas Tille <tille at debian.org>
-Section: science
-Priority: optional
-Build-Depends: debhelper (>= 10)
-Standards-Version: 4.1.1
-Vcs-Browser: http://anonscm.debian.org/viewvc/debian-med/trunk/packages/crux-toolkit/trunk/
-Vcs-Svn: svn://anonscm.debian.org/debian-med/trunk/packages/crux-toolkit/trunk/
-Homepage: http://crux.ms/
-
-Package: crux-toolkit
-Architecture: any
-Depends: ${misc:Depends},
-         ${shlibs:Depends}
-Description: toolkit for tandem mass spectrometry analysis
- The Crux mass spectrometry analysis toolkit is an open source project
- that aims to provide users with a cross-platform suite of analysis tools
- for interpreting protein mass spectrometry data. The toolkit includes
- several search engines for both standard and cross-linked database
- search, as well as a variety of pre- and post-processing engines for
- assigning high-resolution precursor masses to spectra, assigning
- statistical confidence estimates to spectra, peptides and proteins, and
- performing label free quantification.
diff --git a/debian/copyright b/debian/copyright
deleted file mode 100644
index 8faf75d..0000000
--- a/debian/copyright
+++ /dev/null
@@ -1,17 +0,0 @@
-Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
-Upstream-Name: Crux
-Source: http://sourceforge.net/p/cruxtoolkit/code/HEAD/tree/crux-toolkit/
-
-Files: *
-Copyright: 2008-2014
-License: Apache-2.0
-Comment: License is specified at Sourceforge page
-         http://sourceforge.net/projects/cruxtoolkit/
-
-Files: debian/*
-Copyright: 2015 Andreas Tille <tille at debian.org>
-License: Apache-2.0
-
-License: Apache-2.0
- On Debian systems you can find the full text of the Apache License V2.0
- at /usr/share/common-licenses/Apache-2.0
diff --git a/debian/rules b/debian/rules
deleted file mode 100755
index 440a381..0000000
--- a/debian/rules
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/make -f
-
-# DH_VERBOSE := 1
-
-%:
-	dh $@
-
diff --git a/debian/source/format b/debian/source/format
deleted file mode 100644
index 163aaf8..0000000
--- a/debian/source/format
+++ /dev/null
@@ -1 +0,0 @@
-3.0 (quilt)
diff --git a/debian/upstream/metadata b/debian/upstream/metadata
deleted file mode 100644
index 9efcec4..0000000
--- a/debian/upstream/metadata
+++ /dev/null
@@ -1,21 +0,0 @@
-Reference:
- - Author: Sean McIlwain and Kaipo Tamura and Attila Kertesz-Farkas and Charles E. Grant and Benjamin Diament and Barbara Frewen and J. Jeffry Howbert and Michael R. Hoopmann and Lukas Käll and Jimmy K. Eng and Michael J. MacCoss and William Stafford Noble
-   Title: "Crux: rapid open source protein tandem mass spectrometry analysis"
-   Journal: 2014
-   Year: Journal of Proteome Research
-   Volume: 13
-   Number: 10
-   Pages: 4488-4491
-   DOI: 10.1021/pr500741y
-   PMID: 25182276
-   URL: http://pubs.acs.org/doi/abs/10.1021/pr500741y
- - Author: Christopher Y. Park and Aaron A. Klammer and Lukas Kall and Michael MacCoss and William Stafford Noble
-   Title: Rapid and accurate peptide identification from tandem mass spectra
-   Journal: Journal of Proteome Research
-   Year: 2008
-   Volume: 7
-   Number: 7
-   Pages: 3022-3027
-   DOI: 10.1021/pr800127y
-   PMID: 18505281
-   URL: http://pubs.acs.org/doi/abs/10.1021/pr800127y
diff --git a/debian/watch b/debian/watch
deleted file mode 100644
index f0f636b..0000000
--- a/debian/watch
+++ /dev/null
@@ -1,3 +0,0 @@
-version=4
-
-https://github.com/crux-toolkit/crux-toolkit/releases .*/archive/crux at ANY_VERSION@@ARCHIVE_EXT@
\ No newline at end of file
diff --git a/doc/Doxyfile b/doc/Doxyfile
new file mode 100644
index 0000000..c449aef
--- /dev/null
+++ b/doc/Doxyfile
@@ -0,0 +1,1551 @@
+# Doxyfile 1.6.3
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = crux
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER         =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = ../../doc/
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it parses.
+# With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this tag.
+# The format is ext=language, where ext is a file extension, and language is one of
+# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
+# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat
+# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),
+# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter
+# and setter methods for a property. Setting this option to YES (the default)
+# will make doxygen to replace the get and set methods by a property in the
+# documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penality.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will rougly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by
+# doxygen. The layout file controls the global structure of the generated output files
+# in an output format independent way. The create the layout file that represents
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name
+# of the layout file.
+
+LAYOUT_FILE            =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT                  =
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS          =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        =
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE               =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER
+# are set, an additional index file will be generated that can be used as input for
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated
+# HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.
+# For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+#  will be generated, which together with the HTML files, form an Eclipse help
+#  plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list.
+
+USE_INLINE_TREES       = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be implemented using a PHP enabled web server instead of at the web client using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server based approach is that it scales better to large projects and allows full text search. The disadvances is that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA             =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD                =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED             = DOXYGEN_SHOULD_SKIP_THIS
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = YES
+
+# By default doxygen will write a font called FreeSans.ttf to the output
+# directory and reference it in all dot files that doxygen generates. This
+# font does not include all possible unicode characters however, so when you need
+# these (or just want a differently looking font) you can specify the font name
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
+# which can be done by putting it in a standard location or by setting the
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
+# containing the font.
+
+DOT_FONTNAME           = FreeSans
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the output directory to look for the
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a
+# different font using DOT_FONTNAME you can set the path where dot
+# can find it using this tag.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK               = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH          = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = NO
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = YES
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS           =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = YES
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP            = YES
diff --git a/doc/PWIZ_README b/doc/PWIZ_README
new file mode 100644
index 0000000..1a10724
--- /dev/null
+++ b/doc/PWIZ_README
@@ -0,0 +1,142 @@
+Notes on how pwiz stores spectrum data
+
+A spectrum has an isolation window which corresponds to what the
+instrument selected for fragmentation.  A spectrum has one precursor
+per isolation window. A precursor has a selected ion which
+corresponds to a peptide that was isoated and fragmented.  If more
+than one peptide was fragmented, the spectrum will have more than one
+selected ion. 
+
+Hardklor/Bullseye identifies the peptides selected/isolated/fragmented
+in each MS/MS spectrum.  That information is contained in the EZ lines
+and duplicated in the Z lines.  A pwiz spectrum object from these
+files will have one precursor and one selected ion for each Z line.
+The selected ion will store the charge as it appears in the file, the
+accurate mass as it appears in the file and the m/z computed from the
+accurate mass and the charge.  The accurate mass is the singly charged
+mass (M+H).
+
+A default .ms2 file has not been processed with Bullseye.  It will
+have a Z line for each possible charge state and the corresponding
+mass computed from the isolated m/z.  A pwiz spectrum object from
+these files will have one precursor, and one selected ion.  The
+selected ion will have one possible charge state for each z line.  The
+selected ion will also have selected_ion_m_z which is the precursor
+m/z.
+
+The SpectrumInfo struct can be used to access common fields from a
+spectrum object.  The struct fills the precursor m/z filed from the
+selected_ion_mz from the first selected ion.
+
+Notes on crux's use of pwiz
+
+The pwiz parser is only used when 'use-pwiz=T' is included in a
+parameter file.  We may want to change it to be the default, or have
+the parser selected at runtime. So far, the following tests have been
+run using crux search-for-matches:
+
+1. demo.ms2, small-yeast.fasta, use-pwiz=F
+2. demo.ms2, small-yeast.fasta, use-pwiz=T
+3. demo.cms2, small-yeast.fast, use-pwiz=T
+4. wormyraw-1.ms2, small-yeast.fasta, use-pwiz=F
+5. wormyraw-1.ms2, small-yeast.fasta, use-pwiz=T
+6. wormyraw-1.cms2, small-yeast.fasta, use-pwiz=T
+
+wormyraw-1 was processed by Bullseye so it contains accurate masses.
+The search.target.txt file has been compared between various pairs of 
+tests with these results.
+
+1 vs 2: Spectrum neutral mass is slightly different for +2 and +3.
+With the crux parser, we used the singly charged mass on the Z line
+and converted to neutral mass.  With the pwiz parser, we are using the
+precursor m/z and converting it with the assumed charge to neutral
+mass.
+
+2 vs 3: Identical.
+
+4 vs 5: Identical.
+
+5 vs 6: Spectrum neutral mass is mostly the same (some small
+differences), but the xcorrs are different.  A quick test suggested
+that both parsers (ms2 and cms2) are returning the same number of
+peaks.  It remains to be tested if the peaks are the same.
+
+In the crux code, we are using the presence of charge vs possible
+charge and the presence of accurate mass to determine if teh file has
+been run through Bullsye.  Ideally, the pwiz parser would set a
+parameter to indicate that it has.  
+
+As of April 12, 2012, the pwiz parser has not been tested with .mgf,
+.mzXML, or .mzML files.
+
+SVN revisions up to 5669 have been code reviewed.
+
+
+Notes on how to manage the pwiz dependency.
+
+The proteowizard project is stored in the crux repository as a
+tarball of source code.  To build crux, the pwiz tarball must be
+unpacked and built.  This should only need to happen once for a clean
+check out.
+
+When it is time to update the version of pwiz, go to the website and
+download one of their files (called artifacts).  They come in several
+flavors; the ones with no tests and no vendor API's have everything we
+need.
+
+We might want to consider extracting a subset of the pwiz tarball to
+save in the repository.  We use only a small fraction of the code.
+For example, we don't need anything in pwiz_tools.  It would save some
+space, but would require an extra step each time a new version of pwiz
+is introduced.
+
+Ideally, the unpacking and building of pwiz should happen as part of
+the configure and make process.  Until then, it can be done with the
+following steps:
+
+1. In crux/src/external/proteowizard, unpack with the command
+  $ tar -jxvf pwiz-src-without-tv-<version>.tar.bz2
+
+2. Build the project.
+  $ ./quickbuild.sh --without-mz5 pwiz/data/msdata/ \
+  pwiz/data/identdata/ 1> out 2> er
+
+Check the end of out to see if there were any failures.  It will say
+something like "At least one target failed to build" if there were
+errors.  If it says "...updated 42 targets..." then everything's fine.
+
+** Note about --without-mz5.  See Jamroot.jam for notes on some useful
+   options.  The tarball I checked in happened to be built without the
+   mz5 support so it requires that you build without it.  If you
+   download a new tarball from the website, you won't need this
+   option.
+
+3. Install the libraries and include files in a convenient location.
+  $ ./quickbuild.sh --without-mz5 libraries --prefix=install
+  
+This will create a new directory, install, with subdirectories include
+and lib.  We will point the compiler/linker to these locations when
+building crux.  
+
+** Note about library names.  In proteowizard/install/lib will be some
+   boost libraries.  The library names will include the compiler name
+   and version.  This is a function of how pwiz builds them.  Boost by
+   itself can be built with generic names (e.g. libboost_system.a),
+   but I have never figured out how to make that work within the pwiz
+   system. 
+
+4. Now you should be able to build crux as usual.  If you get errors
+about not finding boost libraries, you may have a different version of
+gcc installed (see note above).  Look in proteowizard/install/lib for
+the correct name of the libraries and update crux/src/c/Makefile.am
+accordingly. 
+
+Additional notes.  
+
+I have made a few changes to the pwiz code to silence the compiler
+warnings-as-errors.  Look for comments with BF for the changes.  
+
+Steps 2 and 3 can be combined by adding 'libraries --prefix=install'
+to the command in step 2.  The order of arguments doesn't seem to
+matter for bjam.
+
diff --git a/doc/crux-report.doc b/doc/crux-report.doc
new file mode 100644
index 0000000..dd589d0
Binary files /dev/null and b/doc/crux-report.doc differ
diff --git a/doc/logo/README b/doc/logo/README
new file mode 100644
index 0000000..df5cf59
--- /dev/null
+++ b/doc/logo/README
@@ -0,0 +1 @@
+Photoshop says the RGB value for the logo is 2188b8 = (33, 136, 220).
diff --git a/doc/logo/crux-cmyk.eps b/doc/logo/crux-cmyk.eps
new file mode 100644
index 0000000..30611a3
Binary files /dev/null and b/doc/logo/crux-cmyk.eps differ
diff --git a/doc/logo/crux-rgb.eps b/doc/logo/crux-rgb.eps
new file mode 100644
index 0000000..54e5482
Binary files /dev/null and b/doc/logo/crux-rgb.eps differ
diff --git a/doc/logo/crux.ai b/doc/logo/crux.ai
new file mode 100644
index 0000000..d80c904
--- /dev/null
+++ b/doc/logo/crux.ai
@@ -0,0 +1,456 @@
+%PDF-1.5
%����
+1 0 obj
<</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R]/Order 26 0 R/RBGroups[]>>/OCGs[5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R]>>/Pages 3 0 R/Type/Catalog>>
endobj
2 0 obj
<</Length 13796/Subtype/XML/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00        ">
+   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+      <rdf:Description rdf:about=""
+            xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+            xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
+         <xmp:CreateDate>2016-05-13T06:45:16+07:00</xmp:CreateDate>
+         <xmp:CreatorTool>Adobe Illustrator CS5</xmp:CreatorTool>
+         <xmp:ModifyDate>2016-05-13T06:45:16+07:00</xmp:ModifyDate>
+         <xmp:MetadataDate>2016-05-13T06:45:16+07:00</xmp:MetadataDate>
+         <xmp:Thumbnails>
+            <rdf:Alt>
+               <rdf:li rdf:parseType="Resource">
+                  <xmpGImg:width>256</xmpGImg:width>
+                  <xmpGImg:height>256</xmpGImg:height>
+                  <xmpGImg:format>JPEG</xmpGImg:format>
+                  <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQV [...]
+               </rdf:li>
+            </rdf:Alt>
+         </xmp:Thumbnails>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+         <pdf:Producer>Adobe PDF library 9.90</pdf:Producer>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:dc="http://purl.org/dc/elements/1.1/">
+         <dc:format>application/pdf</dc:format>
+         <dc:creator>
+            <rdf:Seq>
+               <rdf:li>Hp</rdf:li>
+            </rdf:Seq>
+         </dc:creator>
+         <dc:title>
+            <rdf:Alt>
+               <rdf:li xml:lang="x-default">crux (AI)</rdf:li>
+            </rdf:Alt>
+         </dc:title>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
+            xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+            xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
+         <xmpTPg:NPages>1</xmpTPg:NPages>
+         <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>
+         <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
+         <xmpTPg:MaxPageSize rdf:parseType="Resource">
+            <stDim:w>150.000146</stDim:w>
+            <stDim:h>149.999974</stDim:h>
+            <stDim:unit>Millimeters</stDim:unit>
+         </xmpTPg:MaxPageSize>
+         <xmpTPg:PlateNames>
+            <rdf:Seq>
+               <rdf:li>Cyan</rdf:li>
+               <rdf:li>Magenta</rdf:li>
+               <rdf:li>Yellow</rdf:li>
+               <rdf:li>Black</rdf:li>
+            </rdf:Seq>
+         </xmpTPg:PlateNames>
+         <xmpTPg:SwatchGroups>
+            <rdf:Seq>
+               <rdf:li rdf:parseType="Resource">
+                  <xmpG:groupName>Default Swatch Group</xmpG:groupName>
+                  <xmpG:groupType>0</xmpG:groupType>
+               </rdf:li>
+            </rdf:Seq>
+         </xmpTPg:SwatchGroups>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
+         <illustrator:Type>Document</illustrator:Type>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+            xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#">
+         <xmpMM:DocumentID>xmp.did:FFB717199A18E6118A2B8B3B714D61D3</xmpMM:DocumentID>
+         <xmpMM:InstanceID>uuid:b7b60463-fe0e-4f38-ab6b-22f0f2b7f790</xmpMM:InstanceID>
+         <xmpMM:OriginalDocumentID>xmp.did:FFB717199A18E6118A2B8B3B714D61D3</xmpMM:OriginalDocumentID>
+         <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
+         <xmpMM:DerivedFrom rdf:parseType="Resource"/>
+         <xmpMM:History>
+            <rdf:Seq>
+               <rdf:li rdf:parseType="Resource">
+                  <stEvt:action>saved</stEvt:action>
+                  <stEvt:instanceID>xmp.iid:FFB717199A18E6118A2B8B3B714D61D3</stEvt:instanceID>
+                  <stEvt:when>2016-05-13T06:45:14+07:00</stEvt:when>
+                  <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+                  <stEvt:changed>/</stEvt:changed>
+               </rdf:li>
+            </rdf:Seq>
+         </xmpMM:History>
+      </rdf:Description>
+   </rdf:RDF>
+</x:xmpmeta>
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                           
+<?xpacket end="w"?>
+endstream
endobj
3 0 obj
<</Count 1/Kids[27 0 R]/Type/Pages>>
endobj
27 0 obj
<</ArtBox[0.0 0.0 425.197 425.197]/BleedBox[0.0 0.0 425.197 425.197]/Contents 28 0 R/LastModified(D:20160513064516+07'00')/MediaBox[0.0 0.0 425.197 425.197]/Parent 3 0 R/PieceInfo<</Illustrator 29 0 R>>/Resources<</ColorSpace<</CS0 30 0 R>>/ExtGState<</GS0 31 0 R>>/Properties<</MC0 5 0 R/MC1 6 0 R/MC10 15 0 R/MC11 16 0 R/MC12 17 0 R/MC13 18 0 R/MC14 19 0 R/MC15 20 0 R/MC16 21 0 R/MC17 22 0 R/MC18 23 0 R/MC19 24 0 R/MC2 7 0 R/MC20 25 0 R/MC3 8 0 R/MC4 9 0 R/MC5 10 0 R/MC6 11 0 R/MC7 12 0 R [...]
endobj
28 0 obj
<</Filter/FlateDecode/Length 3845>>stream
+H��Wˎ$���W�Y�p�|���`>��}	����#"ɪ����-���+��
Ff?����������?�O����_�����ϷOƫ�z�G<J��f?���ۏ�?}ώ>��0�ܾn�r��o�Ϸ,�#��3���|�_0/��#YB���TZH9���'���K
�v<��M�v���'�a ��6�!�w�ρ���z�������i�Ͽ�ۏ��~xGCr~x#�Rc:l��
+
N"�@
�*zI` 4,���H���k������
�����b�k�y������Sܣ���	���)?��n8!�p:�<�M�
?�
��;��;��ES=���ڦ	��4�X��1�=�B���kܝ�
�M�4���s���'�)�P㝚r�)�j�XC;�Z�T��qw�{�G4���Tk�c5�/4}CM����R��F;����N�.t��;�=�#��si*h_rMm��M��{t�C�p�)׋&��|
�1��]�����=�#��sI�����^�a��L�BD�|�ó��RJ�X388�ø{�=�#��s9��k6q4k��&��NH�HK�5u\i�XȽ�x+�
(�k��N%-
w��G{D�|*MVX0JMy��M흔�?ߊ��HJ�rW�Xb?����s��.-9��O�c="��sY�������
+ �Ǽ���V��Z�i
]V�qܝ�
�!O�\����{�z~���B�,и,�B'O
��)��
��\n=��Ǐ��m3��'�����5v���/3��2����hyz���N���ߐ�
��
%��]�
��'ԮvJv�+=9��Sܣ=��
�&�kR��.� u�z�xB�3m��F>�n�������hyz�	���Q��<IO9����-�q�)�'�y|�+?9��Sܣ=���.��Ч��`!�h�Nyf\���<7��ۂX�����G�[�%�
ҭ�F+��7,�c�
&�Y�=6$��c�7��H�96(��)
>���Ɯ!o��	�j���#SX�Un[B3�t���ry�6!�
��
r��%e��8�^��0tq�����919c�f>#�}Iȓ]x��������!�B��?�]�X��{
Geƀ#��	"f#�W	mh�F��l��+���x׷M�\cN,yO5Cƴ������
���%�^�r�B��L
�)���?{��o���/#$���⍚HLB�C�?{�����=�';c9�I�����N�/,�MB�c��<%.()h
�
�*�6U	�9)��4
����kC�B3�\`Sr!�}�uC�L3
�@Q�êN]PR	�����ET�ӿ��?t��p���
30f��ԎmL}\eְ������K��)X#��C6o8�q}����9�Q|2_�Q�ZZS��af_Zk�Gi�����o{���ݱ�;<M�^�T��2�@f����@�.\Ȣ3�#H����.�eƜVs
LԠoƒLBn��'�I	:�j�]��
HN�Q���
�#�m+�KOv�Ц"χm˨���V�O�g�"����^� ^da��2�456L3Cgj&S���]� [...]
+,c
�{kS1�l&���K��<3��uQ?Q��/{x�X��QaV}��
�� �eE
_��9�YQ�)�'R
P��t�(��y�9�4��
�9��q������Q��h�':f�a
�C�S� ϕq�g��׫��o�WJH�6����r������,�0�VM=m5�=>+
�m>�1Ւ.-J,����ѐ
���ǃc�:���$S^���ܺ��1Q"�0�</��\p	�Wl���g� ۍ������:*[M�h6�<W�B�dL�����
�"�7O�thCsϕմ0;�����J�F�
/�s����-S�_e�����v���8+��CI� qr�̇?>utX!
�Y���E�I_�[��Y�i5���Jl�ً^M����ZGf����Eau�?OƯ i���_��ش؜ơD���Ut�^�	�����
�:�%k��!�c��^B�[��Yn����W'�Q��W����J�]�J@V� ���Pr(�'�0k�µ+¦��Etޭ�8���/l�
=�/n\X�3����.���Gk��x(�Ϗ��0��NQ*���=� [...]
+����	�ԛ����Z���/���j�C�m�{C$%ܮ5N�P��Cv�z˃�	�m�@	)
h��b/\
S<�ߧ�LE�� ]��$Ǟ
5YN��u���p�kl�&
+�i%U&]9a#���P
������$�;�t�;QQ��\i�[<�E$���C_���?�i �ez�3��u&LW ��=���d�G��3!�y��G��"�>`�2G���eV&��i
�Cυy̔��R͆>e䀌��HB�U�
�j�BFn����V�h@�'Se��+)_ D[Z
��9Ac姷&�*�i��2���nw��)��+:!�*�$-���L~TC�.��$J
b�H%�<0�jt�I�*
+PT�?�PE�g�^��\ V  ?��k�j�����7�䆃�<S�g5&{8Ϣ�(�YkTʢ2*0�
qg�I�P*�檟
a��£��V
+h^�
G�d2�Nq�B�o�
(ǜa�)��]�8�
1��k
�E~�?{!Sƞa A����^��g!k:��*3�`0��뒭�V8iZ�K�Q:�[��-����j¸�Q6*�-��0��Ÿ_q?7�_�5?�)�|�Y��q�A*�2�Yi��tSF���k
)����;�N��c�l3}��)�Rd��;��5�}[�z׬"�Z�z��Rɮ�I$S�B��p"IY���#en���m-lQ�=�
���95X��ri�д���(q}^Um����)�{�LΒ
�<���1�&���`�d��r�I�I�d�p��W�0����D%�&@
-�1��_�=��Eo���I�ȼB����1���2�	V?C�ѿ���ҵ��AB�
?/H$�X�8�W(vs�
q]
�
��|��X��

,�M[�,ȭ�[0A*d5U;Za����e
7���A'�B|Bs�]
�A�5�=$��]�`Q�Y��N���f��w����H2$Sؔ:�.Tz?6
B͙
�n�F�H4,���ݱ��ed��u;M�B~<�|7�?^=)i�IېV?vy�D��y
Y��S(9r-q���<l��̢͡ݴ'�j1�<�MH��$o�eM>4e��"�>{�{
ht���
�E��yZ��ObEpj ���A+��P�y��t�
A����1�t��2<y�����4��uXt���S�J�����Y�:��5�Ap>�� tW��l�S|�g�����{��F6t�H8�~�z��l�*�0�<M�
ÝX5w-���ߞ�uF	e�J�}Sg"��4��:��Wm�	7��c����i��� ���i,��s0�\Ý�A��\��el�����H5�O������+��.^��n�Z�����(
+I����H0`���ǫ�F����R:�q�\e�sPT�)I��C�m�ضQ�Öv�@n�?�9f�̟e��n����K�W�g��U!�+_��1�p�*FP
�]$ī<��M����p]>@��������b������I;��l
 � ������i
 ��_8���C�x���A��
z;$J at d�U%�&A( 
+����f����=T��Ny�͢
��P
�,�˜Z�
�}	r�S�����;��&��3��\}�:w�i
��'\��
s����s_�
+A��<x�EP�������j�귂l*T0���?���x�z����o��O� ����
+endstream
endobj
32 0 obj
<</BitsPerComponent 8/ColorSpace 33 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 53/Length 133/Width 53>>stream
+8;Z\pYmnJk$j9(>j^l+)%_kcq652uuYba28ca'3(?4S033$.BVdDuVh4fI=i8QE`D
+H-*A9a]>Y%5E%GO."\q`*QMKmQCP-Cp7nG2k-h*3'Tt0)@%;#1f1?8<=0;Q([_0VZ~>
+endstream
endobj
33 0 obj
[/Indexed/DeviceRGB 255 34 0 R]
endobj
34 0 obj
<</Filter[/ASCII85Decode/FlateDecode]/Length 428>>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#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
+6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
+VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
+PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
+l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
+endstream
endobj
5 0 obj
<</Intent 35 0 R/Name(Layer 1)/Type/OCG/Usage 36 0 R>>
endobj
6 0 obj
<</Intent 37 0 R/Name(Layer 2)/Type/OCG/Usage 38 0 R>>
endobj
15 0 obj
<</Intent 39 0 R/Name(Layer 11)/Type/OCG/Usage 40 0 R>>
endobj
16 0 obj
<</Intent 41 0 R/Name(Layer 12)/Type/OCG/Usage 42 0 R>>
endobj
17 0 obj
<</Intent 43 0 R/Name(Layer 13)/Type/OCG/Usage 44 0 R>>
endobj
18 0 obj
<</Intent 45 0 R/Name(Layer 14)/Type/OCG/Usage 46 0 R>>
endobj
19 0 obj
<</Intent 47 0 R/Name(Layer 15)/Type/OCG/Usage 48 0 R>>
endobj
20 0 obj
<</Intent 49 0 R/Name(Layer 16)/Type/OCG/Usage 50 0 R>>
endobj
21 0 obj
<</Intent 51 0 R/Name(Layer 17)/Type/OCG/Usage 52 0 R>>
endobj
22 0 obj
<</Intent 53 0 R/Name(Layer 18)/Type/OCG/Usage 54 0 R>>
endobj
23 0 obj
<</Intent 55 0 R/Name(Layer 19)/Type/OCG/Usage 56 0 R>>
endobj
24 0 obj
<</Intent 57 0 R/Name(Layer 20)/Type/OCG/Usage 58 0 R>>
endobj
7 0 obj
<</Intent 59 0 R/Name(Layer 3)/Type/OCG/Usage 60 0 R>>
endobj
25 0 obj
<</Intent 61 0 R/Name(Layer 21)/Type/OCG/Usage 62 0 R>>
endobj
8 0 obj
<</Intent 63 0 R/Name(Layer 4)/Type/OCG/Usage 64 0 R>>
endobj
9 0 obj
<</Intent 65 0 R/Name(Layer 5)/Type/OCG/Usage 66 0 R>>
endobj
10 0 obj
<</Intent 67 0 R/Name(Layer 6)/Type/OCG/Usage 68 0 R>>
endobj
11 0 obj
<</Intent 69 0 R/Name(Layer 7)/Type/OCG/Usage 70 0 R>>
endobj
12 0 obj
<</Intent 71 0 R/Name(Layer 8)/Type/OCG/Usage 72 0 R>>
endobj
13 0 obj
<</Intent 73 0 R/Name(Layer 9)/Type/OCG/Usage 74 0 R>>
endobj
14 0 obj
<</Intent 75 0 R/Name(Layer 10)/Type/OCG/Usage 76 0 R>>
endobj
75 0 obj
[/View/Design]
endobj
76 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
73 0 obj
[/View/Design]
endobj
74 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
71 0 obj
[/View/Design]
endobj
72 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
69 0 obj
[/View/Design]
endobj
70 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
67 0 obj
[/View/Design]
endobj
68 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
65 0 obj
[/View/Design]
endobj
66 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
63 0 obj
[/View/Design]
endobj
64 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
61 0 obj
[/View/Design]
endobj
62 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
59 0 obj
[/View/Design]
endobj
60 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
57 0 obj
[/View/Design]
endobj
58 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
55 0 obj
[/View/Design]
endobj
56 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
53 0 obj
[/View/Design]
endobj
54 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
51 0 obj
[/View/Design]
endobj
52 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
49 0 obj
[/View/Design]
endobj
50 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
47 0 obj
[/View/Design]
endobj
48 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
45 0 obj
[/View/Design]
endobj
46 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
43 0 obj
[/View/Design]
endobj
44 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
41 0 obj
[/View/Design]
endobj
42 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
39 0 obj
[/View/Design]
endobj
40 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
37 0 obj
[/View/Design]
endobj
38 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
35 0 obj
[/View/Design]
endobj
36 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
31 0 obj
<</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>>
endobj
30 0 obj
[/ICCBased 77 0 R]
endobj
77 0 obj
<</Filter/FlateDecode/Length 2574/N 3>>stream
+H���yTSw�oɞ����c
[���5la�
QIBH�ADED���2�mtFOE�.�c��}���0��8�׎�8G�Ng�����9�w���߽��� �'����0
 �֠�J��b�	 
+  2y�.-;!��K�Z�	���^�i�"L��0���-��
 @8(��r�;q��7�L��y��&�Q��q�4�j���|�9��
+�V��)g�B�0�i�W��8#�8wթ��8_�٥ʨQ����Q�j@�&�A)/��g�>'K�� �t�;\��
ӥ$պF�ZUn���
�(4T�%)뫔�0C&�����Z��i���8��bx��E���B�;�����P���ӓ̹�A�
om?�W=
+�x������- �����[��� 0�
���}��y)7ta�����>j���T�7���@���tܛ�`q�2��ʀ��&���6�Z�L�Ą?
�_
��yxg)˔z���çL�U���*�u�Sk�Se�O4?׸�c����.� �
 �� R�
߁��-��2�5������	��S�>ӣV����d�`r��n~��Y�&�+`��;�A4�� 
���A9� =�-�
t�
�
l�`;��~p����	�Gp
|	��[`L��`<� "A
�
YA�+��Cb(��R�,� *�T�2B-�
+�ꇆ�
�n���Q�t�}MA�0�a
l������S�
x	��k�&�^���>�0|>_�'��,�G
!"F$H:R��!z��F�Qd?r
9�\A&�G�
��rQ
��h������E��]�a�4z�Bg�����E#H	�*B=��0H�I��p�p�0MxJ$�D1��D, V���ĭ����KĻ�Y�dE�"E��I2���E�B�G��t�4MzN��
���r!YK� ���?%_&�#���(��0J:EAi��Q�(�()ӔWT6U@���P+���!�~��m���D
�e�Դ�!��h�Ӧh/�
�']B/����ҏӿ�?a0n�hF!��X���8����܌k�c&5S�����
6�l��Ia�2c�K�M�A�!�E�#��ƒ�d�V��(�k��e���l
����}�}�C�q�9
+N'��)�].�u�J�r�
+��
w�G�	xR^���[�oƜc
h�g�`>b���$���*~� �:����E���b��~���,m,�-��ݖ,�Y��¬�*�6X�[ݱF�=�3�뭷Y��~dó	���t�
��i
�z�f�6�~`{�v���.�Ng����#{�}�}������
��j���
���c1X6���f
m
�
��;
'
_9	�r�:�8�q�:��˜�O:ϸ8������u��Jq���nv=���M���m���R 4	�
+n�3ܣ�k�Gݯz=�
�
[=��=�<�=G</z�^�^j��^��	ޡ�Z�Q�B�0FX'�+������t���<�u�-���{���_�_�ߘ�-G�,�
}���/���Hh
8�m�W�2p[���AiA��N�#8$X�?�A�KHI�{!7�<q��W�y(!46�-���a�a���a�W��	��@�@�`l���YĎ��H,�$����(�(Y�h�7��ъ���b<b*b��<�����~�L&Y&9
��%�u�M�s�s��NpJP%�M�I
JlN<�DHJIڐtCj'�KwKg�C��%�N��d�
�|�ꙪO=��%�mL���u�v�x:H��oL��!Ȩ��C&13#s$�/Y����������=�Osbs�rn��sO�1��v�=ˏ��ϟ\�h٢���#��¼����oZ<]T�Ut}�`IÒsK��V-���Y,+>TB(�/�S�,]6*�-���W:#��7�*���e��^YDY�}U�j��AyT�`�#�D=���"�b{ų���+�ʯ [...]
چ
���k�5%4��m�7�lqlio�Z�lG+�Z�z�͹��mzy��]�����?u�u�w|�"űN���wW&���e֥ﺱ*|����j��5k��yݭ���ǯg��^y�kEk�����l�D_p߶������7Dm����o꿻1m��l�{��Mś�
n�L�l�<9��O �[����$�����h�՛B���
�����d�Ҟ@���
�����i�ءG���&����v��V�ǥ8��������n��R�ĩ7���
����u��\�ЭD���-������ �u��`�ֲK�³8���%�������y��h��Y�ѹJ�º;���.���!������
+�����z���p���g���_���X���Q���K���F���Aǿ�=ȼ�:ɹ�8ʷ�6˶�5̵�5͵�6ζ�7ϸ�9к�<Ѿ�?���D���I���N���U���\���d���l���v��ۀ�܊�ݖ�
ޢ�)߯�6��D���S���c���s����
����2��F���[���p������(��@���X���r������4���P���m��������8���W���w����)���K���m��
 ����
+endstream
endobj
29 0 obj
<</LastModified(D:20160513064516+07'00')/Private 78 0 R>>
endobj
78 0 obj
<</AIMetaData 79 0 R/AIPrivateData1 80 0 R/AIPrivateData2 81 0 R/ContainerVersion 11/CreatorVersion 15/NumBlock 2/RoundtripStreamType 1/RoundtripVersion 15>>
endobj
79 0 obj
<</Length 1004>>stream
+%!PS-Adobe-3.0 
+%%Creator: Adobe Illustrator(R) 15.0
+%%AI8_CreatorVersion: 15.0.0
+%%For: (AXIOO) ()
+%%Title: (crux.pdf)
+%%CreationDate: 5/13/2016 6:45 AM
+%%Canvassize: 16383
+%%BoundingBox: 0 0 426 426
+%%HiResBoundingBox: 0 0 425.1973 425.1968
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%AI5_FileFormat 11.0
+%AI12_BuildNumber: 399
+%AI3_ColorUsage: Color
+%AI7_ImageSettings: 0
+%%RGBProcessColor: 0 0 0 ([Registration])
+%AI3_Cropmarks: 0 0 425.1973 425.1968
+%AI3_TemplateBox: 211.5 212.5 211.5 212.5
+%AI3_TileBox: -208.3613 -85.0615 633.5586 510.2583
+%AI3_DocumentPreview: None
+%AI5_ArtSize: 14400 14400
+%AI5_RulerUnits: 1
+%AI9_ColorModel: 1
+%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0
+%AI5_TargetResolution: 800
+%AI5_NumLayers: 21
+%AI9_OpenToView: -404 543 1 975 648 18 0 0 73 111 0 0 0 1 1 0 1 1 0 1
+%AI5_OpenViewLayers: 777777777777777777777
+%%PageOrigin:-188 -88
+%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
80 0 obj
<</Length 4035>>stream
+%%BoundingBox: 0 0 426 426
+%%HiResBoundingBox: 0 0 425.1973 425.1968
+%AI7_Thumbnail: 128 128 8
+%%BeginData: 3897 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
+%524C45FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFF
+%FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFF
+%FDFCFFFDFCFFFDFCFFFDFCFFFD9BFFA9FD7FFFAFA8FD7EFFA8FD7FFF85A8
+%FD7EFF3660FD7CFFAF35140D84A8FD79FF600D3636360D3684FD78FFA836
+%0D360D0D35FD7AFF845A0D365AFD7CFF5A0D0DAFFD7CFF850D36A9FD7CFF
+%84140DFD7DFFAF0D36FD77FFA8A9FD04FFA83635FFFFAFA9FD73FFAF36FD
+%05FF145AFFFF36AFFD6BFF8484FD06FF8436AFFFFFFFA83636FFFF3684FF
+%FFFFAFAFFD04FFA8FD61FF855AFD06FFAF36FFA9AFFFFF0D60FFFF36AFFF
+%FFFFAF36FD04FF3684FD60FF5A5AFFFFA8FFFFFF8436FF8435FFAF3635FF
+%FF3684FFFFFF8436AFFFFFFF35A9FD60FF855AFF36AFFFFFFFAF36FF5A60
+%FFFF0D60FFFF36AFFFFFFFAF36FF84AFFF5A84FD5BFF6084FFFFFF5A60FF
+%3684FFA9FF8436FF8436FFFF3636FFFF3684FFA8FF8436FF6036FF36A9FF
+%FFFF847EFD56FF3685FFFFFF845AFF36AFAF36FFAF36FF6060FFFF3560FF
+%FF36AFA936FFAF36FF6060FF5AA8FFAFFF5A84FD56FF5A84FF35FF5A5AFF
+%3684AF0DFF8436FF845AFFA83636FFA93684AF0DFF8436FF845AFF35AF84
+%5AFF5A5AFD56FF5A85FF36FF855AFF36AFAF36FFAF36FF8460FFFF365AFF
+%FF36AFAF36FFAF36FF8460FF5AA9A936FF5A85FD56FF5A84FF2FFF5A5AFF
+%36A8FF2FFF8436FF845AFFA83636FFFF36A8FF2FFF8436FF845AFF35AF84
+%5AFF605AFD56FF36A9FF36FF855AFF36AFAF36FFAF36FF5A60FFFF0D5AFF
+%FF36AFAF36FFAF36FF5A60FF5AA8AF5AFF5A85FD56FF365AAF0DA95A5AA9
+%3684AF0DFF8436FF6035FFA8142FFFA93684AF0DFF8436FF6035FF35A97E
+%5AFF5A5AFD56FF5AFD0F36353636363536363635FD073635FD07360D85FD
+%5FFFA8FFFFFFA8FFA9FFA8FFA8AFA8FFA8AFA8AFA8AFA8FFA8FFA8FFA8AF
+%A8FFA9FD5AFF84A984A984AFFFFFFFAFA9AFA8AFA9AFA8FFFFFFA8FD06FF
+%AFAFFFA9AFAFFD04FFAFA8FD57FFA90D0D0D360D140D36FFA90D360D360D
+%360D0E84FF3636A8FD04FF850D84FFA90D36A8FFFF840D36A8FD56FF5A14
+%84FFFFFFAF6036FFA9365AFFA9FFAF850D85FF600DFD05FF841484FFFF85
+%0D36FFA90D5AFD58FF5A0DFD08FFA90D84FD04FFA80D5AFF3636A9FD04FF
+%A90D84FFFFFF850D360D36AFFD58FF3636FD08FFA93635605A605A3613AF
+%FF6013FD05FF841484FFFFFFA9360D145AFD59FF5A0DAFFD04FF8436A8AF
+%0D36355A36360D36A8FF351484FD04FF600D85FFFF84360DA95A0E5AFD58
+%FF5A1436605A855A360DFFA9145AFD04FFA90D85FF850D3636605A5A0D36
+%A9FF84360DAFFFFF5A0E5AFD58FF5A5A365A355A5A85FFFF5A85FD04FFA8
+%6084FFA9855A5A355A365A84FFFF8436A9FD04FF5A5A84FDFCFFFDFCFFFD
+%FCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFD
+%FCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFD
+%FCFFFD86FFFF
+%%EndData
+
+endstream
endobj
81 0 obj
<</Length 28273>>stream
+%AI12_CompressedDatax���g{290
+�����h��Ёl���D��L4��fw����GR��~�y�̎�Q���R�TU��n�Fӛo�/��M7����Г�~C�L��TZ.�=
�
�N��V��5�z7߬c�
�6�w�:�z�ir8a��|����}��o;�:y\���`���'q"d
+�AS���
�
v��?��",Lo��|����/f���2������N�B�GD�������谚��
z3��v��rC�b��߃��:�o��d���ה^F
�M�����	��j�7�p�D���a�
���t��FQ9�GP[; @�Ϩ<�/�@Qs�߃f��nυ��-L�q���y�=G� ���� ӛ�j@/v�]��^&��т-��$��?sUA�P5/�G|T��L��4�(�
FB� ��� ��@��_��c��f=a)���Mf�
g�����	�Z����*�2��nƓ%W�@䗃�
G
B���x�ߓ=���G�᱀�
���Q%9,��d��i��zx�
P `4
����� �H�����!��V�j�s����1/� �FX(���a�a� ����(��@��~����/S��6!��z�٬���д\�
��|�o��
 qز�C}0�
z���o�Sc�E����,Лö��nn��`��
=�����g2ڃ��O��|?�
�[�(�Czbbނ��O��S��F��N�`�
+ ������r��K��u at o� o,�mB/xؕ�_�� K�.�
i
�>Bud(4*�^B5�πP���;
:�S�x����߫�f9߭x����`��z]_3ͤ���e�Y
+�`*���A���7�$|e%��xf�\ο��v6)�Wx�#R���Օ0J_�Ȏ��w�����c�	�z�6�-�OL��`
�aͼ�� 7�BZ,��^]�
e���w��r$�����w�~�b�e�@8�����
V��i΁�0�+�:����?X���;��3�$J��p TG�!2
BD4B�������I�/���7���~@�Mn���?q���p�1h'#a�n�c�n��g@'Q��I�,�z9�XqScxB����
:�@��մ�����#=m+ �d؎��T9�c�y��h��Ǖ`�R5
l�9}��'n�~� r�9A�
�قN�R:���;����T��Gχ��,Y
T9EӃ��`��ETo4V=Y��H��Hſ��C)�^;l�]����S�	0 eKR�����W�/v*�`޳����?��'��!F��܌��!2qU=�����%�t�
P�k�7:*�~M���(�6Q��b>.'�f�����;#�.b
��a?G��~����?ʢ�� jcp
��8����7�A����k*�������|�����#�9����<,5�=�̿g�� _�_!�y�^�;�g�����Wt�����M��k�����/��7��F�?��
���t���
u������css�G�!���#����h�j����u��D/n�e�zI
�6��{u2�V&a
��Z��|��K���{c�^���H�Ц=�M�&���`6tE-Z�J��r��`w~�[Ad :���=��~��r!���7=�
豉8n��M�h7���/�S$#���z���@���y�5);�m����z!_�p����e��@`@66�9l*zM�P����o	�
*�N��=Q?	N�6R�G\�}�*�hn/���͆��U��|7Η�����`?��
+�3>{����w� ����	�K���=X�w3�	�P�
���R�4��g7�M�雞�"�/f�nu��������������#t�%4k��f��j�7�!�C;��6�K���a���5Oֻ� ���ߠ��	�<�C� T�+Z�K]������P0�{�t�
+U�d�MS^m��|=1���f�/�z������
�n�_�
�aʍ��Û2vV�����0����-�je��O�M�ј{��
�:
��0&5�����`�7�`؄��3�Y��Q�v�M��W��@Đ��q"\.��������j�[ȇc������97�anR��s'��"��)��)u�o�I�	�
�ƒ	#j
+�H��H`%�XoF
�q`vlx~��p(�%
���)<���S��0���S�X�F�G�
F#!S�"B� N�%2/�3��2����}�����$���Z�:�أ�՞�� ��ʾM��:�:W(n�>�#��e�Uf�M�4�0$�Ba
=��R�Of^=8�U�T��z<�_s2ڬ�'~��ӻKF�o���u<>�0q��@pʚ��
@c*��Fe�@6o#ဖ�(�YZU�-ݺF��(�[d�$�
{'no0�uE�Uo��%M�i�t�������s&
r�&�
+�/Z�M-n��Y�?BE]�r���	����;�/F��hpO�@{��R�	"2�
X0`5��V�	
.���#
!hɒ����-��x��X��
I}@��;V�%�^g���� �<�
+�K��;��ц
O�
+��_��O{�	:���o����֒�T^i̘�
�F�>�>�+��F�H��֔��
����4�۔�s���
��7�+!�ۣ^K�%Z�Z�X��ݾ��P־c�Kڷ�k6�
�6�O�l����]^m�|
�nſ���jm���5���4Z�4i
*���V�"�~��

9ҫL�|}?�4�7[�vO�{�x)

�J; Bxq��l�[N��,�f��7����o=�
��Z*��n�G�'Z���ɜc'���n6O�H�*V��z
�"����o�������h=��َ6z5vZ@5Ƈ�|���u�6=�U�1a���k�B<�G�t�h%�*��f�b5_/<�����Qj�M
+��d�����S�q ޖY�dk��X�'s�gX�}�\N��%uB
a���:�4�	m���;�Ѡ�h;�t\���k;6�G��)�9��Bd�7Vs�
6텚�M��=�嚩��:鯺�F�����
�.���n��
(�0�5�H�='M�����5+v��~5ВL�.S�V��*��@XEg]SZͅUy�y�x���r
+�r�E��Ps
+��lC���J�-������v.[
+
[QK�@+�d
�m
�,fmGSK4�F>÷���\s|dPq&��`�C��L�Tn�̚�z��b�z�(�[Wy�����iJ^sL_~Hj
2�@eZ�:�U�H��j}�`(k���B�
T��@uI�59IG�Iv3JßZ��Q5��t�֔H��۟*�H��d��	�G�
+mZ)U�6$ؠ��5鮈FEf�EO��
+E]�ѻX��N�)8�jo�h��BKH
+57��D��vx�P6���&h�
�x�FP��i��7Y6&�t2:r�
9�������MS]ˉB�R%�
������Y�j/���W����7(�
����|
����a=M�n!��(,��%�st���}��o== j��~�^c4yT�
b�R~z�
a6�7�
�8n�n�z#8�L�5��e�_�-Q�{�P�#��@�]�u�=K
v᠌��
4�ٲLK�C��9S�@�P�A��V�\
I�Ù�*�B0'~�va��"�(�ы��ʳL�[����2�
�WPZC(�S� �pU�5���8;N8z5M��N���d�UO��Lf8ڍl��@d6�1�VKc@��t�)C�߂���
P�djl�s��uR3�@i.����[tAv��5�
�A*��*_��
R�
�6RTs���m�<�Y����^<�)H�_�ź����x���>�a,�í-���a8�C/��Bn��3H�١�]�"��M~�n���|:����Fy���|܌�2)�O
+[Q'4;�J���pDi�	�CF�K���p�gN���N?>���;Yʺ�� i�
+�Ƨ`	�[�O��h�J[�O5�R[J?>���
Tis�/E4r���#2]ٳ)�L*0 g[&ll��q
+�uCw�I���"��A'fN�+4�_��v;��r�B��Hnju�7h
�(�0|W�2X�3�u�H
�z���_'z>I�2'�*�Z�	�'^Ļk��`4<�س&�ymڱ����;��M��_��k�A\&(rM�
,f�*��� 5�	�� �_)��7�HvX%&
K#�
���M�D
@��]6�7�hb�#[f`Z���p�;��gV��a4��+���c,�a��U�u���~�3
�
xN�Ϙn@���V����=����ޑ�7
�������
�Es�|�����@4�ɠ�w�/QH�V���U%��TgB��yv�������B�t��b�
��h�$ڌҶ� ��cG4[ԭ��F0YH��
�'/��j�
̗��?�
kd���9��XmnBˏ��M
J�Aq>��Jl��S7�g��
��s�kzΙ��f�T��ȃ�-�a�C���c�D������]~pK���i�R��jF��-P|N���}t��~��w���P����?���b��n�0ǣ��+��?�? 
F&�
�4���
+~/����c���I�i�m+���_'x�����ר�ޡ�i*r� ֙�/o��9B?S�'j


f�>i�L��3� 4�/�?\����p��Q��S���2�݋�DM
f}��
x��m>3������}%~
�a �D�ir6��O�7QжPp%T�g���Bo��,7|�����!�*.*��6R/���|.�"�
���5���ڋ����!�!z����SlFfKT��Z�c�W�x����J'C���w���}#s�7ퟭnnL�����@�!lM�!t-ޘB�[+
�c1CZ���~�AW��
(_̹��
�z�)=

#�I?5"�G�G�ݷ��������-�"������&�m�q����"6�$�󴈣�u�o��c��7��|���R=*�ڙy�s�"��0
+�s�|-DY���/
˘;���,�֏�Tӓ\g��c�^}$|@>�so�|:��,��;^�-Y{�w�]���C�ܵL�x������{�4.���2������0
��T�
��"�	'����lR�6s�s䴐"h�;��S�Ϝ�z?�l�ZM��
�3��Y����G+�<.�`X�5 ���`���
������iƜ��/�E]�ٙ�U������,y�&��z�.�ɝ�;_y!�c6�l��aO��YI��
�Yl���9��=�0���
s��U��a�'s�{m�����|C�����j<a�.<�(�ފQ�V
��������D��"�*�E�"ka=�n4��m�a,�x�c��7�\n,
se�̻���l��7~�X�v����[
V�
RXep��jn'ְ�J��05ǚ�j k��>����Ɠ����D��i������z	z�a����;[+6
'*�l3�c
^�V��/���
+�����{Ȣ+
f�6]5����1����n��n��xupg���
+�1b��H��0����}poN��_sf��4�{倹�YZ�+ź�>���˧���o���8 �Z���&�7W ��D��- `e�~���H	���[!��I[-�����_-�f�h!�n��QnKd5�Y���ϛ%[{�[�M<o��.���S����Z����ݚ-�ƀ�L��+�Y�h,���̲��������j�d���^af���?� �ZY��_k��Ŭ�,a����Zu��Ϟ]�����v�:�Yޭ�jyf]|������q���֩Un���-Q�oC�����fKܦ�i�0{��V�q�m3�K�v���mo���
��C�?����v:Zٰ� `�/�O6�m����;[�A�ے���B��Y�m/6O���T��<`���m���v�:_�ݫ���;�@��g�{����˛��To�퍏ă�u���{�Y�>
u��U�Է��(
�8��M�
G(�9�?��#���8�@F:^�M���c0r���2��
�t�촧'#�?�n8ÕJ������������-���c�������y��q�.#A�m������-��g���P
,\E�:q=�6Ww3鹆���k1�|w�7�w�����&#����h
��_��]�d���j�v̻[�O5�s�����W��oI{�|���n�=�]~vO��AyF_Tγ.^������M���7�M�~_���t�m?(���kջ�=ϼ��7��N�W}!�p�Kζ���v��ڕ{�oPn}����o~������?2���C����������v
��!�p��q�eY��A
�7,x�;���� ���ے��D��'�M�(
�*�ڄIbHd6ĺ�h����I��n2��-�r��%;._�����X�3�\S�����ZT#�~�>��$�S��̯uxbo��ϸ���-��u�
�u�t�������k�����B&sl�������=�p��J?�"�W1�O�����f?4\:���h�v}B�s��+\�W��	r
�Wx7��M���/��r&
��%�j�y9��ԓd���Ѵ���>�f�ѯ���Ƚ'�w�b�����Nf���%�h����.�)��Y���%�Y��>�����
wX�������1��������+�}�f�	���
f�x�m-Ƿ�A*�)��D<;�L�ʮR��V�,��η��7�xH��χ���x�=�z;�&���?�
+S�d�q�%ǫ�6��>)j�>O��������4�c�����O:�tX��[�N��KzK�� M�WsQ�YId���cf:,����a�
�k��c���~��R��W�����\:�r�ZX*7w��y���.�E�ɢ����s�
Ao�W(9kM��vT-���t��3�l�^;�\��r-�K��r��r:J��Q��-Џ�Y{LL,������q֞$ʎ���
������9�W
�[��Ix
c�iO�*���O�I`�jb��T_Zs�����j�����
+��k�AK������}��]=����������9X���C���ퟰ���)�ߘ��Q�-@�4u���~�~�����yUk=6�[�Y�?���s���?�/�����F�Q��O�-רmi��˱�[3�Ԣ_��`/N���D�=��~^��f �yM}O[�o�[�+=M�:���O��v�u��Q��e
w���a�󝌼a���-6�<��xb��U�Yy'�;�{��{�ć3>�>2�󷏏�6�}�l ��]-6�l=5+���e��,�:�6��îV��j��%�:3��3P:|e�����
�����!�~
�%����x�=7����Ү��(R۷�QsG��6��`
�|���F8=^�ߝ��#
�4�o��2s�<����i��s�.�I�"��w�i�/vlF=��f
��=[.hz
�p�͟Z����V���O�1*�4?ܫ��w)��ږ�E;�
+/v?���>�Yv�de���}s���ǵ���sv�c=���'��o
���f6L�oI�n�6����ƍ=4���D���40���I�g��
��v�B�)
+MavULYt<�} ��r]�~��q+:'UvB'����;�3���?�)[��D�+�~h���]��f{
+>����ſx�Ћ;��e��N��E��
d�x7��%����
sR�8��۟�"�N,����<�9x�5j�!��<�N��U�ǻ�?�e�O�
����e���W�JG�0DWo�ޯ�&�J�c�-^�O2 

$�0���
���.)޿��@;G��ٷ|�%O�G�+^�h(�i��Dc�G�h�0o���#_�+�r��?b��b�9��9�Sܹ��>�AK>R�#�h��#t	�A��a��,iO���Z>�.R ,�
�YXC���:R���ݮM,#e�h2tH���P�'���"F]<�3�JC?rp'
+�M
�5�yn�հ�����)���&R�][\k/��P�Z�,��7e�������6 ��>��X��Q	��n�W��X�o��
+B��ox>
�+b5�"�5u�PŠ秣�*V�����@w�
+tW�����y�q
l��վ��Xv;�ʠa������
+8s���;��m7 V�1C>{_˫�u[��T�X���w5�#�!:�Xk9��7t�
+X�"�#��5����@��7e�g�}�l�����*�!m�)��5d�
F�*X�}<�yy��ވ�q[e2k)b-<Eڪ}�y1;���E^2y��D�=��AĮ���+nʆ�r��R����:d}
}�7+�4qw��xe�V�Z2"��(�����U�4e��֣����oV~�X�T���?`�X_J���q�z�RÚ��x/���⵼���;%�Pش{�jwێI�����z�*Xs��d�� � ���o���*��K%���#���JX!��k��"v[�(����U�n&�o5�U�+W�"���䳶E�;���V��y-,�!�M
wԕ��� `E*�=�T��=GX�q�o/�I�qZ���6]�uuɰ�N��S��!�]�$��x��^�X��r���V��^N�\���`}p�<V(�����>v����2e�\����;��?��5ǻ�"���ɰbd�>CX��Ğ|���l����U�H�w@���wx��%�+�������"M
l5^m�?8��I'joi�չ�[F����sL����-�W���
������P{��+�r��n��
+���F�>���Q�Y�mof{�[�f����m
����IV
jo�x
��)��Ǡ��>`a�±�*��g�Jg
|�����jo+��5��v\����r����%�����켹doED��?S���Q�׺���&�~�Uyۇ7�>W9�Ra� �_dU���B�m����&Q~2?�m�!j
r����It�6������~��J4r����G�k9���(Jf�.�����V.���<�(�
8?���'���*|���VϢ���5
+�tKl
�wz��1�,�ފ����$͉N���D"M?�I�ޞɿ<��� ;��}�
�gҾQ&���������v	�C1E�-��Q�W�=��.�!�F�v`gv�
�vz���<>t��h�c(֐�n�L��
/g
իR] "�g��{l��5��c5��~V�����K�I+P����@
�ւ7*��6�E�J�b�
���`��Y��ZXJ(lv���V�F at L��*V�s*X��	�e���;cF�K��"U�"�B+�+�V�	�:�H��*)�h���W�����Zb
?zb�=�]	��!�����z�S�
�"����$�$��9oϰ�`�F�!#g8�
+s?IxZ����΍
�h����xb}��Ƴ�w�h�6��P�o&�2
+�
�ޢ?pH_e���η(
��<��!||`]S�V��ݲ��`Ȝz��{��}�
+�φ�щ�-��S�0b,N8
} |���PL��6�B>���xI�Y|�6yr
�KRB�J��
����=D��b��Cf�<�$��Yl#)�!п�zc�? 3�m>c2���
k�#}�"� ��;���R�;�
��L�b{e�/t���%0�����O	s� ��I�t@}=n5<��p%�sc�O/��m��P׳�`���C4'�Hv� ��7Z"��6ě�ӳ�٫��m	��K>�U _�-��b9�<=�H�sD�b�s�؈�'�ע�9�Ϥ�%����2�
�ڦV^��~٘~)�|/�Ov�W�.��
����7�Rf�B�&S�%�F+�m��
7��d��
�34c )B�T���/��	Hl�&��5�k��'�@���cU��������O�{{�� O~
�h��b��*�
+���g���
z(��P����1<Dms��
�f|�*ݬ?)ig��D�K��hXZ{�ӖB�e
�S[��I�*)�pA&b��)]�
�@
����J�rJ[��^QL�^�C�M�`�"�o�G�f�j���'m�Ek�F��bH��jj=�@<�:��	c�dڠߺ4|�3i+�b��dh�F�ab�ymj��\�h:
+�)ݜ�
o�#�L��L4���l��_�uK�;=Uy$ל�����~�������f��NQ[���oEtia���,�=��)�Se4��3��ޕ+H�2db9�	���7h�FUB�0T}E�Fh	gxh7FO
�m�u���dQ �%
C���د�O�4�?%�m�rfr�#6b?�f	~pТ����q
��T��ܭ�S$��D�)�t�Q��,I����@�s4�J��B�S2.
+�{�wەz{s2���9�6�B e�GvO��?�+�p7#EZ�1���,��ǯ*G�NH��Ҝ�J�BP���^'Nv	��3��-k�ɾz�Nv3N�EYcf�!g���a��a
+
;rő���F0
=���#-�1�~�Ge�H=�_���C�F�BY���%�V
+<4���]���bϭ�_O2T���7�$��7�6���%*��G�oG��-�.	���k�ej6�к�d��#!55��qؖO�	�F�Z-B�m(ג���2Z��S�#j at Kޖ�����w^��
Co��Ѡ[��'L���$��H�ng�1���V�3D �l�m��U?5H���K
��*,~v��bmꂧ
(s��{-�}��N���
q�
+��x7��
+��ނ�x/���1�дg�1	
'q����!���S��uRs�w� �U�%�l.�5�
6 F{-D�|,�<�8���<6;;/oO��
�&���^~`�$�Fw
+U�9��Fv�8/�̎W�n��	:e�
��
�w����^tZK746@�<I�גn ��tc�,N݃�N�n*
+thSK��ﺆ8�P�4]@Fĉ6&
�Έ$�o�_��G��
�x���0hn�=%v��
�����,yܔ�F�K
3ʌ
����
xWR��6��uڂ��Wϳ��4}�+�:��n�h@����@���6�
��h�S��F���
+E�z�.��`��f��F�. �1M|d��|D��sr
���Alkq�-_��G��f����5���8AU7�>h�ڿ��湅������J��WY���u�5 ��ՈI��^
�����ٓD��"T�G��QI�f�����s��n��s�hd�f at K���_@'4K�P�G1��Ɋ����|f�m�[�L%Xa� A;y��6
Mrm����-�=��]\M�	
hۈ���
+6
+;�>o��=�6��B��ԟgJf
��t��eJ�a��j�u��)qh
�i
+�qr�;3���I&��L3>
��h4���� 4
^>��B��f�)z�<�Q��]�3
+Me�wJ��"4b�Ѝ�DmR�&�'762��xz���6��"W�����Ya�
��!��Z���K��C�| �u��ܚ�|7�������Zǹ|7�c
.I����R/K�aU��*_�Χ��w#N]�$�O;�O�@]�Χ��w#N]�$�O;��F��x~:�v.��]�Χ�ˇ��|ڹ|loNK�@k$���~
OO�S��5�&#b�,�X��F[sg���]��o߳RŘ��Aܰ����S���:�� ��v��s
�&1ʴ�5C�w
+5��Ey���(c�@��

9�. |_;q�i�(>M�Yz�.�6me:��{'��
<��b�#h~}�
_�
BLr�l�I(Կ��[�sY��yt��N�/Q�
����=��]��
�Qziw��K�E'��B��YV
+bh��bF�Cr#S+���F'Ә��]g��ׁ�o�
Ť�#	��Ψ<��ݖ���X�QQq�I}�P	�H=*H��,d�
9��N�
g(-���1N�)�
NJx��)�(dJ�70�K��Rϑ��&���l����V�}���H��
�S�yo<�P1(�F��BN����L��:4�
�
c,������?��h�{�M'��D�Q�@�����2%ATL
+�N��!5�(w+$-	��XꞆ�P��F�
D�Е��E%{P)�ր=��I>�j�xO���C ���q����p��E/eOe���m�hcE�PSM�S��2)�KÎU��^���z����.d]:�R�`Z)�,-����}~#��j�*

ӓ

N�:����#��Ӳ������~J�s_���%��y��$ⴟ�i� �
6�.�#�� ���I�t�r�ج��7mBA��*-��
☱f�潑�QR�q|/�����K�7"N[=^콡�1�U�ғ�V����u����b�
�\��2b<��F�
(�w��&�Q"'�qI��7���T����5H���4/�2E�����I�5�H�Uc.nNɐ�=�
���p
�E=���Y

{V�tU#�
u�i�K�?M�Q��!���`0���yf����elO�?#��3�I����	;H�m*ch��,
�.ߐe�
!
�ߺ8;3Of�q�y������Zf�.�]'3��
%�H;3�`�K2��:�(9�ڙy�F���ȓ2�B�8%�
+�y7�
���2���{yr޵3�T��ڙy:֚ھP���F�?\�t��
�^P�A��@�%�F^C
+ �7
lz)����5t
�(���bHjb�6G�g� ]| ��NF��)��9)�Z��c��{C!�@KO���1��Ѧ!;h`>v/:��uN�zg�����g���
+m�5�ડ�g��%Nf����:F����1b�"@'�G�e�}���V]
�>��?�6<�`H��g#
� =<
+X�e'��b4�<�g������I��WM�}�R�����d	��:I� �u�d!�˓d!��$��4:���屃�id`�h
k(~I�e��|����Xa#�˻8VH))O����vӨu/U�
+Iy����������mϓ��ԝ�WM�c�,t�5/NʻA'������p�*��V$�e_Ic.�O���o�Sd���g	��Wq
�d�3l�^Q�;G��ʏP�ߙ�QM���t���N
��ݏ���\\��kY�d�K�B
v�
�*h�it�B��gk��~��6y�Y
/^�c��
�y�ϯ���&�x�s��B��f0o����E�]�⛅�ќJz�
�&�=%iw
?.��$ng�n�W�J��
C��B5�/���J��yU����U��,(7�F=ٯ��v�ձ›�y���=��	p�اƵrO�gV�z�v��d��̕|um�RѺZiw߸
���Ϣz�����
�a
h`-�1��)�m�~��b�>,���=��~�|�&Z8o�?z�cC�ꖉ,�X���
�
������q�kAE�i�$�{
�5V���{��6l+y|��{Vr�
s��V�O��`Q��+�x�zD�zr��5��g���ˮד�� ���zJ�g�mװ�/I�9�߳���Hb5�v�_�g�mw��z�=�ѿ
O�#=�Q:
��XCw�%���'�|Z	|"��O�~+�`^-�O��8�gc �O�JPv�]�ا�է�C��ا�Ed
��L�S��C�溉}J���]/�O��}��>�����Vb�n$�u���yTvq/I쓎+�է��rnb��.��42V���g�
�D��|V����E�}J�ぺjb�R��[�WJ�S��Et]#�Oi
�ys��>%P�f������2V.L�;�h�%���J�}JY}��@b�RVߍJ���}J:�<����>%�#Z���ا���؞WM��隸g&�)�����ى}�Q�vf�֛3�TlOU����'"�cި'���اԥ��Ij�*lօ6"/�
�9��z�V�׈���f���W�rC�r\�?=��J��%��ST9��J�`�2NH���tS���d��ޝ�.c�7S_~�����ӻ�W�M�!#�YF&��6qV�Qa�A��	�F�d��х_j2=�M���&��L�����wf��fV��1������4�!���?�ˡw�����k
~��"=M��?�R*���� [...]
��H��^�Ƕ|�3���Ğ.�&*k�w��9}J��FwÁ�����j��Q ��}�!���Ѝ}:tƂ� u��Z��1����qlNä@��'��N�0�^}��eZ!�m_�)�V�"�N�:��rN47ee$�
+;)�D�Ub��NY�� ����`�J��ə�bh�$��^���3q
e��L�w��'��L
ݏ���)�h.C�M���R��F�406bcSks
+hq�!�m�8_�}OC���Q<ʙ�1��^�غ��-Y
+ŹR��9I�W1��]t�����S ]��y7|K�H#鴰X0QR(.�,:��|e
+)�8�ϸ�O12E|�ߙ�Q�w}���gPU���?NUW������{�N5qϼ�OaY�^�wI��|6�]�'����A���{ֽ��o/|�^�_Y h}:'o��%̊�%�Чe����Wv�@�O
�}�&br���Ep. C�/��.�l_�Y=/��}�<�.�V�S�v
�"(�l�T�Q;0�����)����l@�5�㉉T
�W���)�Rie�
ս},�6�����D�u�2=����i ���L�+ٞ}Z��?�=U��ç1��1���Y��T�j�Cf�V�_��9�(7�/��=#�6�S����{�̴KN�:&��.�
\��(��M�6����@��7~Q��n���j�a�6i�2b8�V�Ɖ`u���
�ʎ��=̍b�]�j��$1���S
3(��GU�V~�l2��O�
9zG��V��ҫ��d,���wo��f�ч/�z> DsO~�o�s
W�)�:�g��ie!�2�F��8�5U�ڈ��H
�X5G��Ej馨��
��e6Q�̋���WYf�S�x��
'"r�TŊ�xMk�b}^�=%� 
�F��9�
�c-x�ڪX�Gx&rt�S}ZX+vU�����4L"b���"�I�Ï���pf��+#�z��Z"lT��,��\��
28c��]8a��GJ����,
�#L�@��Y��g :�5�v�޳W�v!
���l�K/I�V>�:�x���f
�<�+�,`���gU��2'���4��N�Y�`D�ڤ:%pK/=Υj���
�	z#;��W��
5{�o4�����x�N�
��k��=�Λ;�0Z�9�q�R\�pO�"�kX9�sv�zn���%�0)�rm�����lu��+��r�8��#r��F�`3c)�F���KU5%Q�Rc�������f
�1�4�8�
��ڽ6,l�+Z�C�ld0
d��U��:�9�.@/���9g�
��o���l����}�*J�
sl�n�
P�T� C	m�
�qA[�;!�-r�-'7�dz
u�b�k��TϳS?����.Q������%��P�+�x����R�[��P5jh�uS�
s}�
\M5����o�h'3��t��N"ڵ�G�Tw@�"�Ff�Q�t��̔D�j�8�挔D��T�G�Q8�ㄔDi#��od�I���h4�[Tm$5�]4���vBJ���;�GT2�OHI�_jԢNJIT!�Q>�L�:5%ѐy(�^�v��%�|DuK��R��Y������PlF
�6^�B=�Õ.+}�q�e�r���.+d]��^
h�B�m�g/+D���g/+G����
+���Y�kG�^�4G�T+�m�|ܥ
r��|���v�
�s��
�v��Z	
^e��C���+�j�.<�©VF.<4��y����
J
}օ�	��E��e
��Pvr���vx sڝ�Ѽ��
�o;��u�v�v�U�
+
��^��C�K�X�v����ӘW��)P�^x�������/<��?
�v�hߜs�v\�(���

��\��C������
O����
�P�

;�ϼ�P=\�Es�
��cX�v�����1L������o;[]x��σt�k\x�
��=��C�d4�Vą) ���H����օ�'H�K.<��M��#�͹
jC�Q����
�m�����T-t�n���^
j�����
���
�O

�
/<��3�o�IK�S��/<4 Ӯq��m����셇WH�6r��
+
rP�-�e��
u�(�6g\x������ڞ�_x��d�m��ɴW�ʏx��
��Q��e

+WJ
>�;�z��鹸g]x����+'\xx~D�
���߰�_x(��G�
2h�p�!�U�|�!+�.��P;��Qn�pᡶu��j�Wʷ
���M~�����I
��C��k�(f�o;��
����ڷ
�*��
j'�*/�g\x�}ۡ��f<IW�C��
��lθ�Pu4��t�[
�΅���:/��P{�@.U�r1��n�L}�`���0�
�i6����= LC�k��K�(�TWme./0@��  $��(?������� �,8�?��t�y����SD�I��,�����ƀ�n?�6
z�0{�8�|��.�u��=w�/����~�x�����\�y/<E�x�T�����/'3�Y���Ki��[��o��%���������<-'�94��^�3����
��:v���x�i:�w�;�@�� 
}�G
;{����=�6�{��b�X�N��Ϸo�e��4���e���,<�f�[�9�9,��m)�Շ?�콋KJ��m������4X*��r�['cP��(�vlP��n\+�7�
�.�doX��e�BĂD+<��"�_�����-t���g�}Oٓx>]N����/�k����dZ�E��͹��;����&C�	ϵ�}t�!�O<2%L:�$W~9V��V�9a5t&�׆9�k�뷷ap�f#~��L&a�#�~2�`.p
�x��)j�y��"�����~#,k3���n(D��+C�4���O����w�F�ϑ�xjn	��w<�����f���FW{
w���'����g�_�
©���̛��-�9���Y	�0�<��F��(����jS٥ʯ��@
�l;a����{�hD��L�{��
+/��[�{Q�
/�N���^�	�E
����.T��b1�B�#��.�|��
X�>� ��I~�~��3巛(><S�
O.w�s{�;��1�v��=y���5
c�]F8��qV���C	��~��BpaB��vÄh��ZI�7 ��
��I�C����
^����ەj���l��5c�n��HxY E�t��
���ȧJ�ob:�oX'�Ϸ�w�y����۸�î�\�S�#�4�^�
�n����% �z�!<��+Ûd�)	^��A	� �᧓�W��҃�h�n��?��U�|cA�Gy8,o~��7�"D��"{�7\��(����N��O���[��8����e�6�:{�;�m�Z|�0�%��e~��
��~����Y�t���0?���Hq��w �d́cZ��jw3Ywę���Xt��CF�)��'��8�
+LAZ���X`�çG�灑���m]Y`�/d����qp�T]�;
@��d�7]��fb/���� �`P��A��|/C1郲����:�-`�y�ŊB��'��w7�qWVtzѴ�T�:��9YK#��+{��$����3�
G@�
����	
A"�:� r��;j4᩸��(3

���?�x��A�O,?��ezi^�	��4�8��D�&/��
+���d!醃\�b%L�>����������/�Y���aʈCM����(m%�1��A�=�
+�JG=��EA�;��
�ñ�F5�*�BI��>���Yj�g̶�Ʋ����{MO�y6��
a�f>j	&�Q��8��h)�
��J�
�m��
+/#W"w��rN���
��\Y��X��#Fe��v��K���+6�D�7�OeK��.�]i���9���j�1
+"��V�i!�.瞿�R/�W�n�@�b��o�
�> ]�3�4�s���3U�`v��f��>��Y���5��ɻ���	
��݉�
;v�B^�É����=q"�w#���JG�H��<�O����d5@�`�K�dV�Q�wek�#[(���,��DufYS'<I��D��1����v_���K-S���,����w�K�s�_^�r� X��6:ٶw~��"���=EK��}_tX�ӧ�3��;�Ӟ�Ƿ�,���'��V"�
:��l�+���c� 2;�?
����]G���?�n���{O�h,+,��w&k��Lh�z���g�B��f���T1��@�f��
YLFs��'G�b����:QX�;��;���3�C���R��ן�2�ħ�8�L&���?���}g�ao�i���`{*��Ɠu���3`��M(�LI����騡�9m��d�,�G�뺜v�đ�x�ޚa)�.�4�+��F�� 4D��uX�Ӯ��2,��gc��k��y��V�_�sډZ
/�&b�+m���r�C����
0t$^�����J���#ׄF!0�*� ,�w^Z|MƋjy0o��Ü�e�>��8��c����E�3����U����� 2z�]v��7���l0��z��qdK�G0"s��!��]ſ�8�g�k��D��Q�:�
�u{�l��%0/X�+T�R��o�h;�>���Qߕ�������/:3���F5�X�Y\Y���F[�����\�EJ��H�
Λ
h~�e�:����Ѣ���R��� [...]
� r�I�F]��d�X8�|O����X[�
`�Y�?~�?q�O|eva�O�;��D�u��5�`�v/�R�	�j�9Wp�W�ie�����V��F~(�aɟ|�����
��j/��F>��n<�gכk,uB��R��@ش��K
7�.p�HC)�����iO٩mk����a�?]��ۓ���'@s�<;�����)n 5r
�0�Μd�"��`���N,���|�v�$c����ٙ�
��X00
��{�D`7�g��'s��.�<[<�=���w�1����ٷ��3U
}Ւӗ�]��
��
�v$kr�W�ʿ<��F��������
�z���#k[hO���
����9��,i��n��k*9�7�X�ƌ,dI��<��O�)��g���ڕ4�Zǟv��!���=�Ⱦ��L<֟F��OsX�}�q]C��qE[F4�	�d���?'hC��d�u����{x=�������
�If�ó�#�����s�)���S,��h�cbR���3<��T��X����ǀ��� w~�=L�
�	��Sy���̱w��3E`v����e+�1�Z��`��͏�q���GC�&����7�u^4�\H�
}�6џ}4�P
+��ї����GC��揎>�s��/���(�RG��Qp?JLd8K4��;�ۈ
+e�p_�>8���ţ
:y��$�<)���7y.TfΤ��^U[r�)Z�m�yN���>�8)�T��RBP�ٜx(pF��%
C8��|^��'�_��i�
+����C�6����f��t��;/e�{'�e������UDe`
�>��sׇA�;.ִ��-���
u^���`�)��nT�ˆI��j#&!���̕|u
D7
�S�q:
�?AS�J7���&D�c�ݻ����|a��Z517u=k�hig����S��Zh�1[�y�"؜�@}�*V��]�'‡���:"�G�Z$��[D�w�rt�
�-E=��{��´�<C��ಊ����*�TS�},V��"fXԈ 	��q�~+�/X:�� 3���`�!�ʳtp
��*��t�y{�})1�*��9g�`�:��Jmn3CkZ8=bw��
�  �h��]��Xt��\��d nP��"
�(
 
_4g�s��$A��1�K���#�X�'��ǫ�	[�A
i6
����O
c�P��+�7C4�
�Ϝd7µn
�14戇� �,�$ۙ
匜h~�Pպ���E{+RZ���b�&k��s&mx r.q�Qn��Y#����(�tW�&C4�
9W �8�O^8����E��W3n�R�E�Y�I�>1��&��Fp�1H߅lA�%{�g	1҈ RY��Ql��I,�o���Wc4��^��� [...]
+�P¤��
+&�����ă���n���bR����7�T7Ճ����,KO�vȿ�_��1�Iѻ�����^�r��}U��|�[TXU|�a͋^ 4�m
�e����O0���P���b��H���>:o��m\���4Ch�G�K$����o����]<���E����^��W�
8�_ܢ�ѱ�L�nEH���� ���7���b�k;<-!�
��< �T4��"��2� iC���A
 I����S4R�'퓗li
�X�H�C�9��8�uٷ���
�n4|�X�h|;l����a'���<��q)�a�LDK$�����
��3�7�Љ���g?_���SO�I
���J�m�bL�^�0��f�U����DW!����oz�if���ˈ%"
+u���(����9L�;�
��;B�߈�}'
+D��p���1&���t��DLLs��v��L܅�^s5�U��������Ļh
%��>RHL��y�ܲ��(?�4�H 6��C.
��vx��/�\�K�\�ə0s�ͤ�w7>��Aړ�'+q2�]�𐟇��������枘�T�z�{T:��zh��2
+�-
��e���q7��2�d�MH�p���Z�ƒ
�
+��O�E��hlҿ!0��u(b\��(��� 2
�l`.m�lv����t�TϢ7Wʚ8���l1���R���	�������uz�=_��:qw��D��x��'�������谚����ɟjfJ�H0;m�k�~	��a�ɲ��pI�,��F
���9>�N�nB
�礊q��|�\�~�l�yf����a�C�	���������Am$��Vo�ޯ�&�J�c��	
+I|��lk��rt���_}��[���?���[������#4���T�j
f����Å
��a���
��
����;�� 
��6��as�ܶOF�_H8�@�~
��F ��� ��;}�H^.��c�K
��쓃A��
#!�F�Li�PIƇR�}��~>��̯m����,	��,�:�f�H�I$!ё"a+Iy�+ f�(Z��Cj�S���tKϒa/����idҠYV��p�v�ku�E"�'^�@ۅ�;+4%����#��)Ө�
�
����g
hVC�ß
.�7k{d���d׹n	��[|F��l�^b��QXb��~%x �� [�hz��L�e������m�%�~e�����sԙs��
%�*!
�aE8 d����g�&�>�N�i`n3��pb L�H�QE��V���;��
���h��H�����
~��
Y
H�J ׃>��
���r��:��H�c���"�+�b�ܿ�� Z�r1O��G7�$j���Bed���ɚz[����f�'�:�T��[�2X��
n���+�0����f@�N:(�
��܉}�7��k���v.�Fҿ�9��"0
aC7�������v��rrҪ�a'tg��T�G˜�377l�;;�T
st
��{	�E.�KD���@bR�pG��=��"�C��7Ft*��^��#Yl�sU��u&�q%3�-�i�e
�)2
Y�/Q�t(��v�6�s�J���j#q���cLV�/cK1��6�gm(V+�����,��o�GX�=N
\}t�MM�[s� �k���k��<�"e��#�w�x�#WE٩���*v�+�<�,�m�ʇώlG0���� �!���J<��^�<��!>��p�
���˕ui���v
f<R�%3�9��Ct"����Yt��
Z��,�Q��B
+�ʞ
�_�؜��%����s �<
zb:��Vvo�ML�
1���
��
��%��t�:�-D����Lm"<�k��[&0 at D#�HZN2t���/Tn���>�{��O���C���mN�_��3q��,`�nἤ��֭뒙�/�n��#��\DM`0^�K:R	�
4�a5�x˳X��K��x�3�0ϵ'�x�y!����Fa(��]
+�=���ll���G��G Z�W6���)
��}M�A�/��F/l����踭K�Ҭ�(7��.�^k�`��̅b����-�_Q�B������"��,��Z�K\�bv�r�V�
+-�H I9�(m`t�I�����
�3�i�(�r.��
�v�hM�O��RN+z��E
)�*����ŇgR�t�2 ����u/Y��a�V���1�v�U�/�j�`al��XK��fd
{/��#oܧMM�Hk
+�Q(s� B�x�p���KY8*�^���n�qFdu-�i	�w��d�)�y�/���
�23���vd����`��l02��`��G��;��V�>�����X`�Sr�ޔ��w�=��Wo������+{�/z�	��/5���hĮu `�[�&�����Ǭ��1�d��1k>d
AA�3.	0�![��z��*��"4ZG�^�
ڛ��
E{�sh��N�(��Cˍ��Q�C�p��Q��9���ЪG�^�
Zn+B�(Z�sh���9����qŊ�|߉8�1��k���j�B����q�
�;������ݹR�D25�i�1�/".#Ӓ^���70��4�q�g�V�yW���r
+�P��1��� I�f���OV`&2^ƕ��.��?�Å=H��p�+��
!DW�߃dE
�Z>V`!�4�1X��ȇ*>��� ����vp�
�w���X���oAQs�?lQ�`?=���+��'@�&�_
�
���&����`������?T�D8M����S�>;������Ce�j�Uʚb&�vԾ39@��>�^9�Ff���ܔ�:�����P��̿���i3 �7���~@�Mn���?q��T}�/d�GDC�/��0%VD�8��.%߁©Z���T�,u�Q��^]r�΀����&O�6y*��Q�
 �RT 
+��"
>�D�"a
�!H��C�$���@$ c�2������(
Ԡ�|!�� U�$�
S��$��rH(�ed�$�
+|�M@	��+�fD}x�竑_� Ġ��P�5L �5�������� ϐ&�Ѡ2�P'�
�o����
q�Tr +I!�� i"À�( }��~8�����"a(��:a��`X
�/a�e��P!��}�` 
e��0�
�"�ģ>� �|����B%�+ ���7R"�E+���$�
+���*L��
��� *D&�P(�8$M"C`��P$q%ppB_�
+G��"><�1�$��3̇��ā�A|%���-A��)��B��WLC�Z\_x at B�5R��� �&UY<����b�
+Q>��R�
+yV }d����B��P��q�򄨐
B�A�
D<Ŗ�
+�f�_.W
l��}d4����&�-Uc{#ŗ�GJ��C�ų���
+��Z�1k����P�3���E�e�Z��+��„X^-'JF��J(�[��(
���
+	�!X�
�+�/�‡k_���4VT��W�!
)��1W�c,e�
+��\�1s 
T4�s	��g�|�`$��
�'��8<0�a�W#| GĠ�#�.�J�(�r�P
a~�‡B	-u\+����B%�;"8|	�n�D�?�[ad^s�
3W�$�����
+��
�� �JRH�B8��a���#A8>T �2!Q	
�s-�|5��D�bH\��[-D�����`Ȕ
l�x�$�\���v�RQ5�7"P|	�p�D�?�[vl��f�e���8�
����D��jM�+���������3afl��2"����KH��ܑ���ꪬ̌�l~oU�]V�>�U_�^�RV/�VuS5w�?[N����ϝ����ľ>��x���5b
uA���Hjx��8�+���{N�.�8N#f{�,��2ԁ�oo��?Ȳ��.��'
��k`���M�]�l0�
���S�m<�&wd��~��G��R���r^׫���\:�x�
n
�*=\�P
��Ua��*=�^.���
t ����J|�
+��):�[u�'�V�a�՜���<w�
3�3MϞ��1.���h돗9�J�
�@�l� �$�'��+����c|(	��Ɓp1��e�F��.�x{k5�A�����>�=J�=�k�
�.�u��(
ɼ�@��`_� ���e�
A�ס�b_�z�&�����po�du�ɞƁp1��em��c��'��Z��N��$���5�ln+}�Np�!�]��l��j}�.K�+��{9�@�t �� ���/`Q�}�_r}� 1��;砉��ī\F9�x��e��4�O�ϟX�gif���D\����=t�J
y�6�zA�A3|��<���.C�ȩD
 �[Zsȶp��՞��Xg� �q �F��rY��e��'��Z��QQ�����%��<x�tQ~z CC �m^d��<��zA�A�6�X��9}�~6.ȩG
 X�;�F;��?L�'�!�
��=��i����x�s��'��Z��QR��t����z�l����o@�		OZ�T
��0@/�D^3�;�E�IИ�@Ȗ% [...]
+��[|�z͚��Q,e^F�n��-q�y��)��8��H	�P3,f_�O��<86�����X�����'��O���Ƭ��<�<�f��QMM�J����{j�
1Aw@�+@�ņ�V�d=��V;��~���{��pHP�� 
��g��2`*N਎�&���ι��
'%;���֫}�4�>�=J�=��`�,6���$�3Ty�S�Sm�C�AQĹS����v��qbD����zmY˒
I�f���U��Cr�=�np^�,�\f�Ȝ0���7^�c�=�'��O)�o�2���QB��d?�dH��
�Pu�[�����9kc,Y5�������	�Ux�*#_�E�@T\4��ieP�9ܾ�և��}zv������/f������
[�H�/�>���܍��I�Mc8��z��*��t�t 	�G|��H+fT�Vir!mzbZ�K�(��Tz���JE[�(2�{�Æ���aj+�6Қ�2c�9�Jv��<�m!��$�UUCC��ǹ���N�+h�L����>�����f=֪�uQ�JV�BzN�U���LE�s{|~� �^��������P���f�Cw�@E��y
+�%:�|�5u�i�'>�	��IƓve�
����K'1���jv�����
�
�@��o�V������R��a/Sc7�;��N��gIe4T�NW�~��3 at YƧ������̓���L�<={Ě����6�A��a�b}
�5[H�X

 Qi�%���\�X����
+|
��T��m���d2�e
�AG�|�:'�e45փ�uh��t�F[�/�����C�N
G��:%�WJM'º�U`�p'
�U@��t���BU�i|D@)�w�
d*g)#��Zf�=�3��Fش�	I帬fu>���d���ȻS�M��j�&�� L��ʦ�4Q0އ���V�R]͟cZ�����T��ﲺ��w��XQ�4'xHցXBVM��c���|�������FKC�RPqn���,+Y��=k�.s#1`[U
�
��_��ҷ#I�� ��q,�(u��}$
�֖���������pXqPF&O��Tr���� �6�4)u���
60��7��/�� /��z���� �749���N
i)�����pӍ�(�T6�8�^6��D喁*�
R� b�I��m��|����}�fR'W�Ͼ�1��aO�������>G�;s��uw�J�, Ҵ�D�� u��ʻΉ��E�G�H	a,�H�ϡV�C$C��K��
=��+0�oHf�e��	C��~�0OG,�Oi��Z���h�œ���3���r�9��ˊ4nM��W�����A�"!!����F�B�ݮ���
�ʱ������A�SV��"㩣itfY��
'>�§1�̴/R���%" �/n�u��?������
+�@�K���`��r���|��J�&3<8�:��m� �t?Y��H�T�۞w�Y
@7eC'h���	��
s�<�9� ^b�F�!��[,�|��f�w��"-!����bg�{��,��
Gb(
ۚ�0����ﵞS�mG��g��h*z=�U� 
)x�Gdd8�QC�? c��g  ��0��:�9gU���xV$���v�_b%��|��
���6�SҦ�ܽ(�&U�	̊�n!Ro���̝��pp�S9 2PNtD�|'2U��ō�fqYe+���J�?Ѡk:Rw�(�;B���d��� Dx��{滗��r��>fS�2����1�):<�Y٫��5�A�
GbD��RT����ޢ(�J)�N�*A�hg�t!@�8������PD_
����ƯE`�q�
�&�w'�e�@�]�w���������
{�2����l�
���|��
tXN^/�L�G�K��@�8ߞ'��7�q�N���6�S�&$�	�3M1�“⻡��bi
����A��t{��}�d$��l�oϤM���!�z��	A��Q�iș%�t�$ �I�u�d4��i��߅3I��a��y��4f��V�CA�W�Q`td`�@6�� �	�
`\i�]���-���=�W �U|�p��|K�Op�c�� �'�(��$Z$ґ`u�cY=�I�M��>M��
�U�ҺȠ��ȗ^t_��f�ܳ�^Ҷ�T�g	���򦲳D6��:�[�
�i�����a�
+��&m>�"
�>%|�NTF��k�K׍��M� .
+�?��W6@d�ۢ�O��5��z��Z�5ֹ�g3���1�V��;h�I(v,���Ċ�A���q#A�?N+$=ڀ�y��C�'Z��>��	�
�0˶�l0�:C���(�����$Pѳ[��=��L�c�f`	������ij\���\p
������������H#�F sa }��6|�h(��cW�
���8��2H�
A�z�E~�f8�����E��S���&�#c���jo�X��P�>��Qm�6����^v� {�*���ip��v�IJ6 �*��u�D����qI٭:�h�Y��l�4
��
��
6�?@Ly��&�_ǁ���а�������L��\	ۋnl�	
f�K�h�1%�
S��JI*�Ԏ�g���Bd
����TĂvIlg�̆��IJRf`m��݅�rt|C�B��%�
�nM�0u4 �B��$N,���Aqb�5��Dعl��p^�XڗAIC,)=�mM����_YM�}�.�R� �T�X�;Z�k�Ř*{,AK3$-�qC�izD�|�g��&Q�q��~_߷��L�`��	�XZHs
i�=V at sfS����T���]ࠩ`���
YȔa<�@�P�Kb
�fᲰ@ZW����D܈FX�	:��vxe���'B}�k��W��=�$9w#�KB@�r���Ѵw�vV�i�h����V��0ۓܧ3yH!G��~������
+& �0�vJ
%�"���� ���d��!#-]�R
+U<�
��:��{V)Z�ٺ7��V�O��
o�v a�
ɧ�\3ɕ�\vp��I�f1���V��6�>b�ٓ�

�
�
����=c���Ƚ�p�EvZ�l�‹
Q�5����-&�����r��u�3ųG��!F��F�d3��堆Z��u��qR���+�S�E�)�4e�ح�T	��h��cE��d�u�Mv��
c]���}�S��ٕ,��YV_�G����
�[�L/�@O$�E�z���G��S��^c��7r
HO�}]�%� :�D���'�����V��P>C�
+@�� �-�7�
$3=��S[V�ЬP,z����\-�0�����8
���HW��P�
R1�E�tT ;t�*t��t8�sY�ZdG�T ����ࣥ���U|��Q�y�A�}�J��B3Iw7��6��+����,ԑ6tʝ���(�r<P���H�q���:
+�S�ݧ-�y���SS�WM8
t��)Ky]��M�u���0�,d�+������'@@�����4RD 3r%&x7u���#�D�
az��K���;��
"��r��&,�P�ǸԢH�r��v-�����eQ&°��g)�G��@~҂�"�!s�S�7#vT#�EO͋�7��6�_,��0�ܳ��DM��s��&2w
���T���J���>��6xyr�Lq�\�b���۵�(=�`d�PĔ�)�	jQ������ Y�࡫�} �GP*!TU$s>��9)���y�����2j?�!����_}(?�����/_��.���_����?��巯�?=����_����O�������~��������_���l 
+endstream
endobj
26 0 obj
[25 0 R 24 0 R 23 0 R 22 0 R 21 0 R 20 0 R 19 0 R 18 0 R 17 0 R 16 0 R 15 0 R 14 0 R 13 0 R 12 0 R 11 0 R 10 0 R 9 0 R 8 0 R 7 0 R 6 0 R 5 0 R]
endobj
82 0 obj
<</Author(Hp)/CreationDate(D:20160513064516+07'00')/Creator(Adobe Illustrator CS5)/ModDate(D:20160513064516+07'00')/Producer(Adobe PDF library 9.90)/Title(crux \(AI\))>>
endobj
xref
+0 83
+0000000000 65535 f
+0000000016 00000 n
+0000000417 00000 n
+0000014291 00000 n
+0000000000 00000 f
+0000019690 00000 n
+0000019760 00000 n
+0000020550 00000 n
+0000020692 00000 n
+0000020762 00000 n
+0000020832 00000 n
+0000020903 00000 n
+0000020974 00000 n
+0000021045 00000 n
+0000021116 00000 n
+0000019830 00000 n
+0000019902 00000 n
+0000019974 00000 n
+0000020046 00000 n
+0000020118 00000 n
+0000020190 00000 n
+0000020262 00000 n
+0000020334 00000 n
+0000020406 00000 n
+0000020478 00000 n
+0000020620 00000 n
+0000060138 00000 n
+0000014343 00000 n
+0000014937 00000 n
+0000026421 00000 n
+0000023737 00000 n
+0000023624 00000 n
+0000018853 00000 n
+0000019128 00000 n
+0000019176 00000 n
+0000023508 00000 n
+0000023539 00000 n
+0000023392 00000 n
+0000023423 00000 n
+0000023276 00000 n
+0000023307 00000 n
+0000023160 00000 n
+0000023191 00000 n
+0000023044 00000 n
+0000023075 00000 n
+0000022928 00000 n
+0000022959 00000 n
+0000022812 00000 n
+0000022843 00000 n
+0000022696 00000 n
+0000022727 00000 n
+0000022580 00000 n
+0000022611 00000 n
+0000022464 00000 n
+0000022495 00000 n
+0000022348 00000 n
+0000022379 00000 n
+0000022232 00000 n
+0000022263 00000 n
+0000022116 00000 n
+0000022147 00000 n
+0000022000 00000 n
+0000022031 00000 n
+0000021884 00000 n
+0000021915 00000 n
+0000021768 00000 n
+0000021799 00000 n
+0000021652 00000 n
+0000021683 00000 n
+0000021536 00000 n
+0000021567 00000 n
+0000021420 00000 n
+0000021451 00000 n
+0000021304 00000 n
+0000021335 00000 n
+0000021188 00000 n
+0000021219 00000 n
+0000023772 00000 n
+0000026495 00000 n
+0000026669 00000 n
+0000027725 00000 n
+0000031812 00000 n
+0000060298 00000 n
+trailer
+<</Size 83/Root 1 0 R/Info 82 0 R/ID[<6800E3D791EC554BBB5D98F503589BA4><F1F14FB08C0A584688F357FD731C3775>]>>
+startxref
+60484
+%%EOF
diff --git a/doc/logo/crux.png b/doc/logo/crux.png
new file mode 100644
index 0000000..6784244
Binary files /dev/null and b/doc/logo/crux.png differ
diff --git a/doc/logo/crux.psd b/doc/logo/crux.psd
new file mode 100644
index 0000000..742d226
Binary files /dev/null and b/doc/logo/crux.psd differ
diff --git a/doc/logo/design-transfer-agreement-454896-en_US.pdf b/doc/logo/design-transfer-agreement-454896-en_US.pdf
new file mode 100644
index 0000000..fba5fd5
Binary files /dev/null and b/doc/logo/design-transfer-agreement-454896-en_US.pdf differ
diff --git a/doc/logs/README b/doc/logs/README
new file mode 100644
index 0000000..240dd42
--- /dev/null
+++ b/doc/logs/README
@@ -0,0 +1,12 @@
+This directory contains the log of Crux distribution downloads from the Crux
+Sourceforge web site.
+
+The log file, downloads.txt, is downloaded from the Crux web site using:
+
+scp -r  crux-toolkit at web.sourceforge.net:/home/project-web/cruxtoolkit/htdocs/download/downloads.txt .
+
+This log file is generated on the Crux SourceForge site by the PHP script
+doc/user/download/download.php. This script gets installed to
+/home/project-web/cruxtoolkit/htdocs/download/download.php on the website,
+and is run whenever a user clicks on one of the download buttons in
+doc/user/download.html.
diff --git a/doc/logs/analyze-log.py b/doc/logs/analyze-log.py
new file mode 100755
index 0000000..6763bb3
--- /dev/null
+++ b/doc/logs/analyze-log.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+
+
+import operator
+import socket
+from sys import argv
+from collections import defaultdict
+
+host_counts = defaultdict(int)
+app_counts = defaultdict(int)
+
+for filename in argv[1:]:
+    input_file = open(filename)
+    for line in input_file:
+        if "zip" in line or "gz" in line:
+            values = line.split(",")
+            date_time = values[0]
+            ip_address = values[1]
+            file = values[2]
+            platform = None
+            if "Windows.i386" in line: platform = "Windows 32-bit"
+            if "Windows.ix86" in line: platform = "Windows 32-bit"
+            if "Windows.AMD64" in line: platform = "Windows 64-bit"
+            if "Linux.i686" in line: platform = "Linux 32-bit"
+            if "Linux.x86_64" in line: platform = "Linux 64-bit"
+            if "Darwin" in line: platform = "Mac OS"
+            if "Source" in line: platform = "Source"
+            if platform == None:
+                print line
+            hostname = "Unknown"
+            try:
+                hostname = socket.gethostbyaddr(ip_address)[0]
+            except:
+                pass
+            host_counts[hostname] += 1
+            app_counts[platform] += 1
+    input_file.close()
+
+sorted_host_counts = sorted(host_counts.items(), key=operator.itemgetter(1))
+for key, count in sorted_host_counts[-20:]:
+    print key, count
+
+sorted_app_counts = sorted(app_counts.items(), key=operator.itemgetter(1))
+sum = 0
+for key, count in sorted_app_counts:
+    sum += count
+    print key, count
+print "Total Downloads", sum
diff --git a/doc/logs/downloads.txt b/doc/logs/downloads.txt
new file mode 100644
index 0000000..8452aa1
--- /dev/null
+++ b/doc/logs/downloads.txt
@@ -0,0 +1,926 @@
+"2015-09-11 00:22:52",127.0.0.1,daily/crux-2.1.16786.Linux.i686.zip
+"2015-09-11 00:23:18",127.0.0.1,daily/crux-2.1.16786.Linux.i686.zip
+"2015-09-11 00:30:53",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-09-11 00:31:14",127.0.0.1,daily/crux-2.1.16786.Linux.i686.zip
+"2015-09-11 00:39:26",127.0.0.1,daily/crux-2.1.16786.Windows.AMD64.zip
+"2015-09-11 08:25:26",127.0.0.1,daily/crux-2.1.16788.Linux.x86_64.zip
+"2015-09-11 17:16:39",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-09-12 23:02:59",127.0.0.1,daily/crux-2.1.16789.Source.tar.gz
+"2015-09-12 23:07:48",127.0.0.1,daily/crux-2.1.16789.Linux.x86_64.zip
+"2015-09-13 11:33:55",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-09-14 14:34:46",127.0.0.1,daily/crux-2.1.16789.Windows.AMD64.zip
+"2015-09-15 16:53:24",127.0.0.1,daily/crux-2.1.16790.Windows.AMD64.zip
+"2015-09-15 23:07:16",127.0.0.1,daily/crux-2.1.16790.Linux.x86_64.zip
+"2015-09-16 19:38:23",127.0.0.1,daily/crux-2.1.16790.Source.tar.gz
+"2015-09-17 00:45:54",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-09-18 01:53:08",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-09-20 03:06:18",127.0.0.1,daily/crux-2.1.16800.Windows.AMD64.zip
+"2015-09-20 03:06:37",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-09-21 10:56:39",127.0.0.1,daily/crux-2.1.16800.Darwin.x86_64.zip
+"2015-09-21 23:40:12",127.0.0.1,daily/crux-2.1.16800.Windows.AMD64.zip
+"2015-09-22 01:24:55",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-09-22 01:25:05",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-09-23 00:53:37",127.0.0.1,daily/crux-2.1.16800.Linux.i686.zip
+"2015-09-23 00:54:09",127.0.0.1,daily/crux-2.1.16800.Windows.AMD64.zip
+"2015-09-23 00:54:36",127.0.0.1,daily/crux-2.1.16800.Source.tar.gz
+"2015-09-23 00:56:30",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-09-24 16:00:57",127.0.0.1,daily/crux-2.1.16800.Windows.AMD64.zip
+"2015-09-25 10:43:22",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-09-25 21:23:54",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-09-25 21:43:19",127.0.0.1,daily/crux-2.1.16822.Windows.AMD64.zip
+"2015-09-28 06:42:07",127.0.0.1,daily/crux-2.1.16822.Windows.AMD64.zip
+"2015-09-28 06:44:40",127.0.0.1,daily/crux-2.1.16822.Windows.AMD64.zip
+"2015-09-28 06:46:25",127.0.0.1,daily/crux-2.1.16822.Linux.i686.zip
+"2015-09-28 06:50:01",127.0.0.1,daily/crux-2.1.16822.Windows.AMD64.zip
+"2015-09-28 07:21:25",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-09-28 19:36:37",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-09-29 07:25:48",127.0.0.1,daily/crux-2.1.16822.Source.tar.gz
+"2015-09-29 07:25:52",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-09-29 18:08:06",199.68.16.220,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-09-30 08:09:09",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-09-30 13:41:01",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-09-30 19:45:33",127.0.0.1,daily/crux-2.1.16822.Windows.AMD64.zip
+"2015-10-01 00:41:33",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-01 01:01:27",127.0.0.1,daily/crux-2.1.16822.Linux.x86_64.zip
+"2015-10-01 01:05:40",127.0.0.1,daily/crux-2.1.16822.Linux.x86_64.zip
+"2015-10-01 08:41:23",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-10-01 12:26:14",199.68.16.220,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-10-01 12:33:09",199.68.16.220,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-02 17:05:50",127.0.0.1,daily/crux-2.1.16826.Darwin.x86_64.zip
+"2015-10-02 21:50:11",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-02 21:52:52",127.0.0.1,daily/crux-2.1.16826.Windows.AMD64.zip
+"2015-10-05 09:55:33",10.224.226.37,daily/crux-2.1.16826.Windows.AMD64.zip
+"2015-10-06 04:12:34",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-06 08:11:15",127.0.0.1,daily/crux-2.1.16826.Linux.i686.zip
+"2015-10-06 08:11:21",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-10-06 08:11:59",127.0.0.1,daily/crux-2.1.16826.Windows.AMD64.zip
+"2015-10-06 19:34:17",127.0.0.1,daily/crux-2.1.16826.Source.tar.gz
+"2015-10-07 02:35:49",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-10-07 02:35:50",127.0.0.1,daily/crux-2.1.16826.Linux.x86_64.zip
+"2015-10-07 15:53:50",127.0.0.1,daily/crux-2.1.16835.Windows.AMD64.zip
+"2015-10-07 18:11:32",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-10-07 22:11:57",127.0.0.1,daily/crux-2.1.16835.Linux.x86_64.zip
+"2015-10-08 09:29:31",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-08 17:11:28",127.0.0.1,daily/crux-2.1.16838.Darwin.x86_64.zip
+"2015-10-08 17:11:29",127.0.0.1,daily/crux-2.1.16838.Darwin.x86_64.zip
+"2015-10-08 17:11:39",127.0.0.1,daily/crux-2.1.16838.Darwin.x86_64.zip
+"2015-10-08 17:11:44",127.0.0.1,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2015-10-09 14:36:00",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-12 18:31:23",127.0.0.1,daily/crux-2.1.16838.Linux.i686.zip
+"2015-10-12 18:42:15",127.0.0.1,daily/crux-2.1.16838.Linux.x86_64.zip
+"2015-10-12 19:00:13",127.0.0.1,daily/crux-2.1.16838.Source.tar.gz
+"2015-10-12 19:00:19",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-12 19:14:24",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-13 01:35:27",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-13 01:39:47",127.0.0.1,daily/crux-2.1.16838.Linux.x86_64.zip
+"2015-10-13 01:41:04",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-13 03:50:40",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-10-13 03:50:44",127.0.0.1,daily/crux-2.1.16838.Linux.x86_64.zip
+"2015-10-13 03:51:08",127.0.0.1,daily/crux-2.1.16838.Windows.AMD64.zip
+"2015-10-13 03:51:11",127.0.0.1,daily/crux-2.1.16838.Windows.AMD64.zip
+"2015-10-13 04:01:00",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-10-13 04:03:55",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-10-13 07:52:51",127.0.0.1,daily/crux-2.1.16838.Source.tar.gz
+"2015-10-13 09:44:13",127.0.0.1,daily/crux-2.1.16838.Linux.i686.zip
+"2015-10-13 10:54:01",127.0.0.1,daily/crux-2.1.16838.Linux.i686.zip
+"2015-10-13 10:54:28",127.0.0.1,daily/crux-2.1.16838.Windows.AMD64.zip
+"2015-10-13 11:53:19",127.0.0.1,daily/crux-2.1.16838.Windows.AMD64.zip
+"2015-10-13 19:13:23",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-13 21:02:45",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-10-13 21:04:55",127.0.0.1,daily/crux-2.1.16838.Linux.x86_64.zip
+"2015-10-14 20:05:06",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-15 01:05:27",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-15 02:29:09",127.0.0.1,daily/crux-2.1.16838.Windows.AMD64.zip
+"2015-10-15 02:30:53",127.0.0.1,daily/crux-2.1.16838.Windows.AMD64.zip
+"2015-10-15 14:14:19",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-15 16:01:19",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-15 16:01:57",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-15 16:02:03",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-15 16:04:29",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-15 16:21:20",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-15 16:36:07",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-15 17:02:31",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-15 17:13:47",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-15 17:15:17",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-15 17:16:18",127.0.0.1,daily/crux-2.1.16841.Linux.x86_64.zip
+"2015-10-15 19:06:04",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-15 19:06:10",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-15 19:06:28",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-15 19:27:46",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-15 19:28:03",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-15 19:28:15",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-15 19:29:06",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-16 00:25:00",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-10-16 03:46:14",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-16 19:00:19",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-10-16 19:01:58",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-16 19:34:21",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-16 19:35:19",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-16 21:00:39",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-16 22:59:45",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-18 22:22:10",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-18 23:53:29",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-19 11:20:26",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-19 11:20:33",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-19 17:44:19",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-10-19 21:17:27",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-19 22:10:20",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-20 00:29:25",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-10-20 00:29:34",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-10-20 00:29:46",127.0.0.1,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2015-10-20 00:30:07",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-20 00:30:14",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-20 10:44:14",127.0.0.1,daily/crux-2.1.16841.Linux.x86_64.zip
+"2015-10-20 14:49:00",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-20 19:04:41",127.0.0.1,daily/
+"2015-10-20 19:08:40",127.0.0.1,daily/
+"2015-10-20 19:09:19",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-10-20 19:13:04",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-20 19:13:16",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-20 19:16:23",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-20 19:16:46",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-20 19:26:18",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-20 19:26:32",127.0.0.1,daily/crux-2.1.16841.Windows.AMD64.zip
+"2015-10-20 19:26:41",127.0.0.1,daily/crux-2.1.16841.Darwin.x86_64.zip
+"2015-10-20 19:26:50",127.0.0.1,daily/crux-2.1.16841.Linux.x86_64.zip
+"2015-10-20 19:27:00",127.0.0.1,daily/crux-2.1.16841.Linux.i686.zip
+"2015-10-20 20:49:35",127.0.0.1,daily/crux-2.1.16841.Linux.i686.zip
+"2015-10-20 20:49:46",127.0.0.1,daily/crux-2.1.16841.Linux.x86_64.zip
+"2015-10-20 20:49:55",127.0.0.1,daily/crux-2.1.16841.Darwin.x86_64.zip
+"2015-10-20 20:50:09",127.0.0.1,daily/crux-2.1.16841.Windows.AMD64.zip
+"2015-10-20 20:50:16",127.0.0.1,daily/crux-2.1.16841.Source.tar.gz
+"2015-10-20 20:58:01",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-10-20 20:58:03",127.0.0.1,daily/crux-2.1.16841.Linux.i686.zip
+"2015-10-20 20:58:15",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-10-20 20:58:17",127.0.0.1,daily/crux-2.1.16841.Linux.x86_64.zip
+"2015-10-20 20:58:24",127.0.0.1,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2015-10-20 20:58:27",127.0.0.1,daily/crux-2.1.16841.Darwin.x86_64.zip
+"2015-10-20 20:58:37",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-20 20:58:39",127.0.0.1,daily/crux-2.1.16841.Windows.AMD64.zip
+"2015-10-20 21:11:13",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-10-20 21:11:16",127.0.0.1,daily/crux-2.1.16846.Linux.i686.zip
+"2015-10-20 21:11:26",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-20 21:11:28",127.0.0.1,daily/crux-2.1.16846.Windows.AMD64.zip
+"2015-10-20 21:11:39",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-20 21:11:43",127.0.0.1,daily/crux-2.1.16846.Source.tar.gz
+"2015-10-21 04:08:50",127.0.0.1,daily/crux-2.1.16846.Source.tar.gz
+"2015-10-21 04:09:37",127.0.0.1,daily/crux-2.1.16846.Source.tar.gz
+"2015-10-21 04:34:26",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-21 04:34:38",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-10-22 03:38:20",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-22 08:07:56",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-10-22 12:49:09",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-10-22 19:58:40",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-22 20:27:05",127.0.0.1,daily/crux-2.1.16848.Linux.i686.zip
+"2015-10-23 08:19:15",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-10-23 09:29:16",127.0.0.1,daily/crux-2.1.16851.Windows.AMD64.zip
+"2015-10-23 09:35:53",127.0.0.1,daily/crux-2.1.16851.Darwin.x86_64.zip
+"2015-10-23 09:36:10",127.0.0.1,daily/crux-2.1.16851.Darwin.x86_64.zip
+"2015-10-23 18:15:56",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-10-23 21:25:29",127.0.0.1,daily/crux-2.1.16851.Darwin.x86_64.zip
+"2015-10-23 23:38:34",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-24 13:51:13",127.0.0.1,daily/crux-2.1.16852.Windows.AMD64.zip
+"2015-10-26 06:06:09",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-10-26 06:54:03",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-10-26 06:54:03",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-10-27 05:23:19",127.0.0.1,daily/crux-2.1.16852.Windows.AMD64.zip
+"2015-10-27 05:25:26",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-27 07:46:43",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-10-27 07:47:02",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-28 12:06:20",127.0.0.1,daily/crux-2.1.16852.Windows.AMD64.zip
+"2015-10-28 12:40:10",127.0.0.1,daily/crux-2.1.16852.Windows.AMD64.zip
+"2015-10-28 23:13:25",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-10-29 12:34:03",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-11-01 09:28:09",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-11-01 09:28:26",127.0.0.1,daily/crux-2.1.16853.Source.tar.gz
+"2015-11-01 18:29:09",127.0.0.1,daily/crux-2.1.16853.Windows.AMD64.zip
+"2015-11-02 14:56:33",127.0.0.1,daily/crux-2.1.16853.Windows.AMD64.zip
+"2015-11-02 15:04:50",127.0.0.1,daily/crux-2.1.16853.Windows.AMD64.zip
+"2015-11-04 20:50:50",127.0.0.1,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2015-11-05 13:37:10",127.0.0.1,daily/crux-2.1.16855.Darwin.x86_64.zip
+"2015-11-05 19:53:07",127.0.0.1,daily/crux-2.1.16855.Windows.AMD64.zip
+"2015-11-06 02:06:26",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-11-06 02:06:45",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-11-09 22:04:54",127.0.0.1,daily/crux-2.1.16856.Source.tar.gz
+"2015-11-09 22:05:04",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-11-10 12:54:58",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-11-10 19:44:56",127.0.0.1,daily/crux-2.1.16856.Linux.x86_64.zip
+"2015-11-12 00:17:42",188.2.88.47,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-11-12 08:04:02",127.0.0.1,daily/crux-2.1.16856.Source.tar.gz
+"2015-11-12 08:04:09",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-11-12 19:52:22",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-11-12 19:56:17",127.0.0.1,daily/crux-2.1.16856.Windows.AMD64.zip
+"2015-11-13 02:13:44",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-11-13 02:14:05",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-11-16 01:47:57",127.0.0.1,daily/crux-2.1.16859.Windows.AMD64.zip
+"2015-11-16 01:51:12",127.0.0.1,daily/crux-2.1.16859.Windows.AMD64.zip
+"2015-11-16 04:28:07",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2015-11-16 04:28:29",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-11-16 20:49:53",127.0.0.1,daily/crux-2.1.16859.Darwin.x86_64.zip
+"2015-11-16 20:49:59",127.0.0.1,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2015-11-17 13:11:36",127.0.0.1,daily/crux-2.1.16859.Linux.x86_64.zip
+"2015-11-17 13:20:07",132.77.26.45,crux-2.1/crux-2.1.Source.tar.gz
+"2015-11-17 13:20:24",132.77.26.45,daily/crux-2.1.16859.Source.tar.gz
+"2015-11-17 13:22:04",132.77.26.45,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-11-17 13:36:20",132.77.26.140,daily/crux-2.1.16859.Source.tar.gz
+"2015-11-17 13:37:12",132.77.26.140,crux-2.1/crux-2.1.Source.tar.gz
+"2015-11-17 14:17:37",127.0.0.1,daily/crux-2.1.16859.Windows.AMD64.zip
+"2015-11-17 14:24:39",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-11-17 20:07:26",132.77.89.149,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-11-17 22:45:54",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-11-17 22:48:24",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-11-18 08:59:59",127.0.0.1,daily/crux-2.1.16859.Linux.i686.zip
+"2015-11-18 09:26:41",127.0.0.1,daily/crux-2.1.16859.Windows.AMD64.zip
+"2015-11-18 13:15:57",127.0.0.1,daily/crux-2.1.16859.Linux.x86_64.zip
+"2015-11-18 20:12:32",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-11-19 16:03:33",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-11-20 12:59:43",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-11-24 08:35:42","132.77.26.178, 132.76.50.6",daily/crux-2.1.16863.Linux.i686.zip
+"2015-11-24 08:42:19","132.77.26.178, 132.76.50.6",crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-11-24 08:45:46","132.77.26.45, 132.76.50.5",crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-11-24 08:45:53","132.77.26.45, 132.76.50.5",daily/crux-2.1.16863.Linux.x86_64.zip
+"2015-11-27 15:20:53",134.58.253.57,daily/crux-2.1.16863.Windows.AMD64.zip
+"2015-11-27 16:16:58",71.174.62.50,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2015-11-28 23:27:56",37.77.120.215,daily/crux-2.1.16863.Linux.i686.zip
+"2015-11-30 03:54:46",133.1.59.105,daily/crux-2.1.16863.Windows.AMD64.zip
+"2015-12-02 14:30:12",139.63.44.65,daily/crux-2.1.16864.Windows.AMD64.zip
+"2015-12-02 17:46:49",129.97.124.241,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-12-02 17:47:06",129.97.124.241,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-12-03 21:28:03",98.179.129.144,daily/crux-2.1.16865.Windows.AMD64.zip
+"2015-12-05 19:16:21",70.112.163.177,daily/crux-2.1.16865.Darwin.x86_64.zip
+"2015-12-06 11:18:29",58.39.70.3,daily/crux-2.1.16865.Windows.AMD64.zip
+"2015-12-06 12:39:38",58.39.70.3,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-12-06 13:56:43",58.39.70.3,daily/
+"2015-12-06 13:56:44",58.39.70.3,daily/
+"2015-12-06 13:56:45",58.39.70.3,daily/
+"2015-12-06 13:56:46",58.39.70.3,daily/
+"2015-12-06 13:56:47",58.39.70.3,daily/
+"2015-12-06 13:56:48",58.39.70.3,daily/
+"2015-12-06 13:56:51",58.39.70.3,daily/
+"2015-12-06 13:57:02",58.39.70.3,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-12-07 15:28:42",129.116.110.21,daily/crux-2.1.16865.Windows.AMD64.zip
+"2015-12-11 01:17:45",23.88.147.105,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-12-11 01:42:39",23.88.147.105,daily/crux-2.1.16866.Windows.AMD64.zip
+"2015-12-15 14:52:42",129.116.110.21,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-12-15 14:52:46",129.116.110.21,daily/crux-2.1.16866.Windows.AMD64.zip
+"2015-12-16 01:38:10",70.112.163.177,daily/crux-2.1.16866.Darwin.x86_64.zip
+"2015-12-16 04:06:22",134.7.112.169,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-12-16 14:05:14",212.128.166.78,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-12-16 14:09:58",212.128.166.78,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-12-17 00:11:32",128.8.120.3,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-12-17 09:28:47",172.250.29.95,daily/crux-2.1.16866.Source.tar.gz
+"2015-12-17 11:20:07",157.193.250.13,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-12-18 07:22:34",212.128.166.78,crux-2.1/crux-2.1.Linux.i686.zip
+"2015-12-18 07:23:00",212.128.166.78,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-12-18 07:26:14",212.128.166.78,daily/crux-2.1.16866.Windows.AMD64.zip
+"2015-12-18 12:18:33",157.193.250.13,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-12-18 12:21:56",157.193.250.13,daily/crux-2.1.16866.Windows.AMD64.zip
+"2015-12-18 12:26:09",157.193.250.13,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-12-18 12:26:31",157.193.250.13,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2015-12-18 12:27:39",157.193.250.13,daily/crux-2.1.16866.Windows.AMD64.zip
+"2015-12-18 21:36:07",64.233.172.141,daily/crux-2.1.16866.Linux.i686.zip
+"2015-12-19 10:26:08",81.245.177.63,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-12-19 10:26:48",81.245.177.63,daily/crux-2.1.16866.Linux.x86_64.zip
+"2015-12-22 14:47:51",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-12-23 09:20:09",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2015-12-25 01:12:09",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2016-01-03 10:25:31",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-01-04 08:49:36",27.185.42.233,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2016-01-04 08:49:42",27.185.42.233,daily/crux-2.1.16867.Windows.AMD64.zip
+"2016-01-04 16:56:32",127.0.0.1,daily/crux-2.1.16867.Windows.AMD64.zip
+"2016-01-04 20:10:47",127.0.0.1,daily/crux-2.1.16867.Windows.AMD64.zip
+"2016-01-04 21:11:03",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2016-01-06 07:44:48",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-01-06 17:25:22",127.0.0.1,daily/crux-2.1.16867.Source.tar.gz
+"2016-01-06 19:51:27",127.0.0.1,daily/crux-2.1.16867.Linux.i686.zip
+"2016-01-06 22:24:57",127.0.0.1,daily/crux-2.1.16867.Darwin.x86_64.zip
+"2016-01-07 02:40:03",127.0.0.1,crux-2.1/crux-2.1.Windows.ix86-pc.zip
+"2016-01-07 07:14:28",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-01-07 22:21:48",127.0.0.1,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2016-01-08 17:13:45",127.0.0.1,daily/crux-2.1.16869.Linux.x86_64.zip
+"2016-01-08 20:44:53",127.0.0.1,daily/crux-2.1.16869.Windows.i386.zip
+"2016-01-08 20:45:12",127.0.0.1,daily/crux-2.1.16869.Source.tar.gz
+"2016-01-08 20:45:24",127.0.0.1,crux-2.1/
+"2016-01-08 20:49:32",127.0.0.1,daily/crux-2.1.16869.Windows.i386.zip
+"2016-01-08 20:55:31",127.0.0.1,daily/crux-2.1.16869.Windows.AMD64.zip
+"2016-01-09 00:31:32",127.0.0.1,daily/crux-2.1.16869.Windows.AMD64.zip
+"2016-01-09 00:38:02",127.0.0.1,crux-2.1/
+"2016-01-09 00:38:07",127.0.0.1,daily/crux-2.1.16869.Windows.AMD64.zip
+"2016-01-11 20:27:50",127.0.0.1,daily/crux-2.1.16870.Windows.i386.zip
+"2016-01-12 02:47:05",127.0.0.1,daily/crux-2.1.16870.Linux.x86_64.zip
+"2016-01-12 10:04:21",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2016-01-12 10:04:31",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-01-12 14:32:17",127.0.0.1,daily/crux-2.1.16872.Windows.AMD64.zip
+"2016-01-12 18:58:53",127.0.0.1,daily/crux-2.1.16872.Windows.i386.zip
+"2016-01-12 18:59:02",127.0.0.1,daily/crux-2.1.16872.Windows.AMD64.zip
+"2016-01-12 19:11:03",127.0.0.1,daily/crux-2.1.16872.Windows.AMD64.zip
+"2016-01-12 19:42:07",127.0.0.1,crux-2.1/
+"2016-01-12 19:42:24",127.0.0.1,daily/crux-2.1.16872.Windows.AMD64.zip
+"2016-01-12 20:25:02",127.0.0.1,daily/crux-2.1.16872.Windows.AMD64.zip
+"2016-01-12 20:31:42",127.0.0.1,daily/crux-2.1.16872.Windows.i386.zip
+"2016-01-12 20:32:00",127.0.0.1,daily/crux-2.1.16872.Linux.i686.zip
+"2016-01-12 20:32:11",127.0.0.1,daily/crux-2.1.16872.Linux.x86_64.zip
+"2016-01-12 20:32:25",127.0.0.1,daily/crux-2.1.16872.Darwin.x86_64.zip
+"2016-01-12 20:45:07",127.0.0.1,daily/crux-2.1.16872.Linux.i686.zip
+"2016-01-14 03:58:59",127.0.0.1,daily/crux-2.1.16873.Windows.AMD64.zip
+"2016-01-18 04:00:21",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-01-19 01:21:44",127.0.0.1,daily/crux-2.1.16875.Source.tar.gz
+"2016-01-20 00:31:20",127.0.0.1,daily/crux-2.1.16875.Linux.x86_64.zip
+"2016-01-20 01:03:27",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-01-21 10:19:19",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2016-01-22 16:24:04",192.168.194.53,crux-2.1/
+"2016-01-23 03:23:51",127.0.0.1,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2016-01-25 13:29:15",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-01-25 13:30:26",127.0.0.1,daily/crux-2.1.16875.Linux.x86_64.zip
+"2016-01-25 13:30:39",127.0.0.1,crux-2.1/
+"2016-01-25 13:30:57",127.0.0.1,crux-2.1/
+"2016-01-25 13:31:27",127.0.0.1,daily/crux-2.1.16875.Windows.i386.zip
+"2016-01-26 07:33:37",127.0.0.1,daily/
+"2016-01-26 07:33:48",127.0.0.1,crux-2.1/
+"2016-01-26 10:12:12",127.0.0.1,daily/crux-2.1.16875.Darwin.x86_64.zip
+"2016-01-26 10:12:17",127.0.0.1,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2016-01-26 19:13:13",127.0.0.1,daily/crux-2.1.16875.Source.tar.gz
+"2016-01-26 19:13:29",127.0.0.1,daily/crux-2.1.16875.Windows.AMD64.zip
+"2016-01-27 15:02:50",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-01-27 15:03:29",127.0.0.1,crux-2.1/
+"2016-01-27 15:03:37",127.0.0.1,crux-2.1/
+"2016-01-27 15:03:57",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-01-27 15:04:12",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-01-27 15:04:28",127.0.0.1,crux-2.1/
+"2016-01-28 06:11:04",127.0.0.1,crux-2.1/
+"2016-01-28 06:11:11",127.0.0.1,daily/crux-2.1.16877.Windows.AMD64.zip
+"2016-01-28 08:10:56",127.0.0.1,crux-2.1/
+"2016-01-28 08:11:25",127.0.0.1,crux-2.1/
+"2016-01-28 08:11:37",127.0.0.1,daily/crux-2.1.16877.Windows.AMD64.zip
+"2016-01-28 11:27:43",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-01-28 11:27:49",127.0.0.1,daily/crux-2.1.16877.Source.tar.gz
+"2016-01-28 11:27:53",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-01-28 20:10:22",127.0.0.1,daily/crux-2.1.16877.Linux.x86_64.zip
+"2016-01-28 20:11:11",127.0.0.1,daily/crux-2.1.16877.Source.tar.gz
+"2016-01-29 06:39:02",127.0.0.1,daily/crux-2.1.16877.Windows.AMD64.zip
+"2016-01-29 10:01:44",127.0.0.1,daily/crux-2.1.16877.Linux.i686.zip
+"2016-01-29 10:02:48",127.0.0.1,daily/crux-2.1.16877.Linux.x86_64.zip
+"2016-01-29 10:02:57",127.0.0.1,daily/crux-2.1.16877.Source.tar.gz
+"2016-01-29 13:33:28",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-01-29 13:33:45",127.0.0.1,daily/crux-2.1.16877.Source.tar.gz
+"2016-01-29 21:09:05",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-01-29 21:10:30",127.0.0.1,daily/crux-2.1.16877.Linux.x86_64.zip
+"2016-02-01 12:24:32",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-02-01 13:55:24",127.0.0.1,crux-2.1/
+"2016-02-01 13:55:32",127.0.0.1,daily/crux-2.1.16877.Windows.AMD64.zip
+"2016-02-03 20:37:26",129.98.61.47,daily/crux-2.1.16881.Darwin.x86_64.zip
+"2016-02-03 20:37:31",132.210.36.181,daily/crux-2.1.16881.Windows.AMD64.zip
+"2016-02-03 20:37:48",129.98.61.47,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2016-02-04 02:37:42",118.4.231.184,daily/crux-2.1.16881.Windows.AMD64.zip
+"2016-02-04 21:06:38",152.19.9.97,daily/crux-2.1.16881.Source.tar.gz
+"2016-02-05 02:17:09",60.250.121.121,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-02-05 02:17:20",60.250.121.121,crux-2.1/crux-2.1.Source.tar.gz
+"2016-02-05 13:54:14",58.146.57.243,daily/crux-2.1.16884.Darwin.x86_64.zip
+"2016-02-05 13:54:31",58.146.57.243,daily/crux-2.1.16884.Source.tar.gz
+"2016-02-05 13:54:37",58.146.57.243,crux-2.1/crux-2.1.Source.tar.gz
+"2016-02-05 21:13:04",152.23.170.220,daily/crux-2.1.16884.Source.tar.gz
+"2016-02-10 13:54:17",128.163.7.150,crux-2.1/
+"2016-02-10 13:54:34",128.163.7.150,daily/crux-2.1.16890.Windows.i386.zip
+"2016-02-11 06:10:58",143.89.45.60,crux-2.1/
+"2016-02-11 06:11:11",143.89.45.60,daily/crux-2.1.16890.Windows.AMD64.zip
+"2016-02-11 06:22:51",143.89.131.21,daily/crux-2.1.16890.Windows.AMD64.zip
+"2016-02-11 14:00:34",193.147.150.202,daily/crux-2.1.16890.Windows.AMD64.zip
+"2016-02-11 15:34:36",217.122.234.178,daily/crux-2.1.16890.Windows.AMD64.zip
+"2016-02-16 03:27:21",60.250.121.121,crux-2.1/
+"2016-02-16 03:27:37",60.250.121.121,daily/crux-2.1.16901.Windows.AMD64.zip
+"2016-02-16 03:27:42",60.250.121.121,crux-2.1/
+"2016-02-16 03:28:17",60.250.121.121,daily/crux-2.1.16901.Windows.AMD64.zip
+"2016-02-16 03:28:44",60.250.121.121,crux-2.1/
+"2016-02-17 16:25:53",127.0.0.1,crux-2.1/
+"2016-02-17 16:26:48",127.0.0.1,crux-2.1/
+"2016-02-17 16:26:52",127.0.0.1,daily/crux-2.1.16907.Windows.AMD64.zip
+"2016-02-17 17:09:14",127.0.0.1,crux-2.1/
+"2016-02-17 17:09:37",127.0.0.1,daily/crux-2.1.16907.Windows.AMD64.zip
+"2016-02-17 17:23:57",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-02-17 19:53:09",127.0.0.1,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2016-02-17 19:54:38",127.0.0.1,daily/crux-2.1.16907.Windows.AMD64.zip
+"2016-02-17 21:34:09",127.0.0.1,daily/crux-2.1.16907.Windows.AMD64.zip
+"2016-02-17 21:52:26",127.0.0.1,daily/crux-2.1.16907.Linux.x86_64.zip
+"2016-02-17 21:57:20",127.0.0.1,daily/crux-2.1.16907.Linux.i686.zip
+"2016-02-17 21:58:48",127.0.0.1,daily/crux-2.1.16907.Darwin.x86_64.zip
+"2016-02-17 22:00:13",127.0.0.1,daily/crux-2.1.16907.Windows.AMD64.zip
+"2016-02-17 22:01:27",127.0.0.1,daily/crux-2.1.16907.Windows.i386.zip
+"2016-02-18 09:14:03",127.0.0.1,crux-2.1/
+"2016-02-18 09:14:22",127.0.0.1,crux-2.1/
+"2016-02-18 11:21:50",127.0.0.1,crux-2.1/
+"2016-02-18 11:21:50",127.0.0.1,crux-2.1/
+"2016-02-18 17:07:06",127.0.0.1,crux-2.1/
+"2016-02-18 17:07:11",127.0.0.1,daily/crux-2.1.16909.Windows.AMD64.zip
+"2016-02-18 17:12:57",127.0.0.1,crux-2.1/
+"2016-02-18 17:13:01",127.0.0.1,daily/crux-2.1.16909.Windows.AMD64.zip
+"2016-02-18 18:09:47",127.0.0.1,crux-2.1/
+"2016-02-18 18:21:02",127.0.0.1,daily/crux-2.1.16909.Windows.AMD64.zip
+"2016-02-18 18:52:15",127.0.0.1,daily/crux-2.1.16909.Windows.AMD64.zip
+"2016-02-18 21:31:19",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-02-18 21:31:26",127.0.0.1,daily/crux-2.1.16909.Linux.x86_64.zip
+"2016-02-18 23:05:32",127.0.0.1,daily/crux-2.1.16909.Windows.AMD64.zip
+"2016-02-19 09:02:23",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-02-19 09:02:40",127.0.0.1,crux-2.1/
+"2016-02-19 09:03:45",127.0.0.1,crux-2.1/
+"2016-02-19 09:03:55",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-02-19 09:04:57",127.0.0.1,daily/crux-2.1.16909.Windows.AMD64.zip
+"2016-02-20 07:12:23",127.0.0.1,daily/
+"2016-02-22 10:17:19",127.0.0.1,daily/crux-2.1.16914.Windows.AMD64.zip
+"2016-02-22 19:17:31",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-02-22 20:19:49",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-02-23 08:45:54",82.24.197.83,daily/crux-2.1.16914.Darwin.x86_64.zip
+"2016-02-23 09:44:44",82.24.197.83,daily/crux-2.1.16915.Windows.AMD64.zip
+"2016-02-23 09:54:04",82.24.197.83,daily/crux-2.1.16915.Source.tar.gz
+"2016-02-24 06:42:38",143.89.131.21,daily/crux-2.1.16915.Windows.AMD64.zip
+"2016-02-24 16:44:46",157.142.237.231,daily/crux-2.1.16916.Windows.AMD64.zip
+"2016-02-26 12:13:39",14.139.69.175,crux-2.1/
+"2016-02-26 12:13:55",14.139.69.175,daily/crux-2.1.16923.Windows.AMD64.zip
+"2016-02-26 20:25:46",95.90.240.59,crux-2.1/
+"2016-02-26 20:27:30",95.90.240.59,crux-2.1/
+"2016-02-26 20:27:37",95.90.240.59,daily/crux-2.1.16923.Windows.AMD64.zip
+"2016-02-29 13:19:19",129.215.4.221,daily/crux-2.1.16927.Windows.AMD64.zip
+"2016-02-29 14:57:16",130.149.156.170,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-02-29 14:59:02",130.149.156.170,daily/crux-2.1.16927.Linux.x86_64.zip
+"2016-03-01 11:37:26",217.122.234.178,daily/crux-2.1.16929.Linux.x86_64.zip
+"2016-03-03 16:12:36",130.88.210.246,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-03-04 08:20:57","10.11.38.80, 10.11.2.38, 111.68.102.25",crux-2.1/crux-2.1.Source.tar.gz
+"2016-03-04 08:46:02","10.11.38.80, 10.11.2.38, 111.68.102.25",crux-2.1/
+"2016-03-04 08:46:21","10.11.38.80, 10.11.2.38, 111.68.102.25",daily/crux-2.1.16933.Windows.AMD64.zip
+"2016-03-04 08:46:21","10.11.38.80, 10.11.2.38, 111.68.102.25",daily/crux-2.1.16933.Windows.AMD64.zip
+"2016-03-08 00:32:11",97.113.31.124,crux-2.1/crux-2.1.Linux.i686.zip
+"2016-03-08 00:34:04",97.113.31.124,crux-2.1/crux-2.1.Source.tar.gz
+"2016-03-08 15:52:28",141.201.163.116,crux-2.1/
+"2016-03-08 15:52:57",141.201.163.116,daily/crux-2.1.16940.Windows.AMD64.zip
+"2016-03-10 14:03:00",194.117.10.254,crux-2.1/crux-2.1.Linux.i686.zip
+"2016-03-10 15:48:07",24.145.25.230,crux-2.1/
+"2016-03-10 15:48:22",24.145.25.230,crux-2.1/
+"2016-03-10 15:48:26",24.145.25.230,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-10 22:26:21",152.1.119.168,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-11 06:57:24",99.57.200.143,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-11 07:07:02",99.57.200.143,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-11 19:11:00",99.92.192.202,crux-2.1/crux-2.1.Source.tar.gz
+"2016-03-11 19:11:18",99.92.192.202,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-03-11 19:33:23",129.59.122.197,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-12 02:46:01",128.208.10.52,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2016-03-12 04:07:05",198.244.109.253,daily/crux-2.1.16943.Darwin.x86_64.zip
+"2016-03-12 04:19:44",198.244.109.253,daily/crux-2.1.16943.Darwin.x86_64.zip
+"2016-03-12 04:19:44",198.244.109.253,daily/crux-2.1.16943.Darwin.x86_64.zip
+"2016-03-12 04:21:24",198.244.109.253,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2016-03-12 04:23:13",198.244.109.253,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2016-03-12 04:27:12",198.244.109.253,daily/crux-2.1.16943.Linux.i686.zip
+"2016-03-12 04:30:03",198.244.109.253,daily/crux-2.1.16943.Darwin.x86_64.zip
+"2016-03-12 23:36:47",128.208.10.52,daily/crux-2.1.16943.Darwin.x86_64.zip
+"2016-03-15 10:03:23",134.58.253.57,crux-2.1/
+"2016-03-15 10:03:28",134.58.253.57,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-17 08:53:47",141.44.137.138,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-03-17 20:54:55",130.207.54.25,crux-2.1/
+"2016-03-17 20:55:04",130.207.54.25,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-17 20:55:49",130.207.54.25,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-17 20:55:52",130.207.54.25,crux-2.1/
+"2016-03-18 11:36:20",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-18 11:43:25",139.162.1.108,crux-2.1/
+"2016-03-18 11:43:43",139.162.1.108,crux-2.1/
+"2016-03-18 11:50:51",139.162.1.108,crux-2.1/
+"2016-03-18 11:53:27",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-18 11:54:38",139.162.1.108,daily/
+"2016-03-18 11:54:41",139.162.1.108,daily/
+"2016-03-18 11:54:43",139.162.1.108,daily/
+"2016-03-18 11:54:45",139.162.1.108,daily/
+"2016-03-18 11:54:47",139.162.1.108,daily/
+"2016-03-18 11:54:48",139.162.1.108,daily/
+"2016-03-18 11:54:50",139.162.1.108,daily/
+"2016-03-18 11:54:51",139.162.1.108,daily/
+"2016-03-18 11:54:53",139.162.1.108,daily/
+"2016-03-18 11:54:54",139.162.1.108,daily/
+"2016-03-18 11:55:05",139.162.1.108,crux-2.1/
+"2016-03-18 11:56:07",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-18 11:56:49",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-18 11:57:00",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-18 11:57:06",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-18 11:57:19",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-18 12:00:20",139.162.1.108,daily/
+"2016-03-18 12:00:22",139.162.1.108,daily/
+"2016-03-18 12:00:33",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-18 12:00:44",139.162.1.108,daily/
+"2016-03-18 12:00:45",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-18 12:00:54",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-18 12:01:01",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-18 12:01:12",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-18 12:01:24",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-18 12:01:33",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-18 12:01:41",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-18 14:26:54",139.162.1.108,crux-2.1/
+"2016-03-18 14:27:08",139.162.1.108,crux-2.1/
+"2016-03-18 14:27:28",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-18 14:27:37",139.162.1.108,crux-2.1/
+"2016-03-19 05:15:11",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-19 05:21:18",139.162.1.108,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-19 12:28:22",196.120.44.106,crux-2.1/crux-2.1.Source.tar.gz
+"2016-03-20 20:00:23",141.135.75.106,daily/crux-2.1.16943.Linux.i686.zip
+"2016-03-23 09:44:54",141.44.137.138,crux-2.1/
+"2016-03-23 09:45:13",141.44.137.138,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-03-23 13:45:53",138.102.114.44,daily/crux-2.1.16943.Linux.x86_64.zip
+"2016-03-23 13:46:01",138.102.114.44,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-03-23 21:57:51",206.124.61.226,daily/crux-2.1.16943.Source.tar.gz
+"2016-03-23 23:32:06",149.142.103.154,crux-2.1/
+"2016-03-23 23:32:22",149.142.103.154,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-24 18:52:13",128.208.123.135,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-03-25 01:03:14",94.193.214.14,daily/crux-2.1.16943.Linux.x86_64.zip
+"2016-03-25 01:05:47",94.193.214.14,daily/crux-2.1.16943.Source.tar.gz
+"2016-03-25 03:11:33",59.175.179.30,crux-2.1/
+"2016-03-25 03:11:46",59.175.179.30,daily/crux-2.1.16943.Windows.AMD64.zip
+"2016-03-27 19:04:34",127.0.0.1,crux-2.1/
+"2016-03-27 19:04:39",127.0.0.1,daily/crux-2.1.16950.Windows.AMD64.zip
+"2016-03-28 06:36:09",127.0.0.1,daily/crux-2.1.16950.Windows.AMD64.zip
+"2016-03-28 08:24:31",127.0.0.1,daily/crux-2.1.16950.Darwin.x86_64.zip
+"2016-03-28 20:53:36",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-03-29 09:35:11",127.0.0.1,daily/crux-2.1.16950.Windows.AMD64.zip
+"2016-03-30 06:10:34",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2016-03-30 06:12:39",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-03-30 11:51:24",127.0.0.1,daily/crux-2.1.16950.Windows.AMD64.zip
+"2016-03-30 23:27:00",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-04-02 17:56:50",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-04-04 16:03:11",127.0.0.1,daily/crux-2.1.16953.Source.tar.gz
+"2016-04-05 15:24:06",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-04-05 23:03:06",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-04-06 15:06:28",127.0.0.1,daily/crux-2.1.16956.Linux.x86_64.zip
+"2016-04-07 18:55:46",127.0.0.1,daily/crux-2.1.16956.Windows.AMD64.zip
+"2016-04-08 10:36:07",127.0.0.1,crux-2.1/
+"2016-04-08 10:36:16",127.0.0.1,daily/crux-2.1.16956.Windows.AMD64.zip
+"2016-04-08 14:39:27",127.0.0.1,daily/crux-2.1.16956.Windows.AMD64.zip
+"2016-04-08 17:19:46",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-04-08 17:53:10",127.0.0.1,daily/crux-2.1.16956.Windows.AMD64.zip
+"2016-04-12 06:42:40",127.0.0.1,daily/crux-2.1.16956.Windows.AMD64.zip
+"2016-04-13 02:40:58",127.0.0.1,daily/crux-2.1.16956.Windows.AMD64.zip
+"2016-04-13 11:10:05",127.0.0.1,daily/crux-2.1.16956.Windows.i386.zip
+"2016-04-13 11:22:26",127.0.0.1,daily/crux-2.1.16956.Linux.i686.zip
+"2016-04-13 11:38:27",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-04-13 13:44:38",127.0.0.1,daily/crux-2.1.16956.Linux.x86_64.zip
+"2016-04-13 13:48:28",127.0.0.1,daily/crux-2.1.16956.Windows.AMD64.zip
+"2016-04-14 16:02:54",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-04-14 16:03:08",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-04-14 20:38:30",127.0.0.1,daily/crux-2.1.16956.Windows.AMD64.zip
+"2016-04-14 20:50:49",127.0.0.1,crux-2.1/
+"2016-04-15 12:00:14",127.0.0.1,crux-2.1/
+"2016-04-18 00:22:17",127.0.0.1,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2016-04-18 05:17:58",127.0.0.1,daily/crux-2.1.16962.Windows.AMD64.zip
+"2016-04-18 05:56:23",127.0.0.1,daily/crux-2.1.16962.Windows.AMD64.zip
+"2016-04-19 08:04:16",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-04-19 21:13:13",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-04-21 04:04:03",127.0.0.1,daily/crux-2.1.16966.Darwin.x86_64.zip
+"2016-04-22 01:53:40",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-04-22 01:53:49",127.0.0.1,crux-2.1/
+"2016-04-22 01:54:58",127.0.0.1,crux-2.1/
+"2016-04-22 01:55:14",127.0.0.1,crux-2.1/
+"2016-04-22 01:55:23",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-04-22 14:12:52",127.0.0.1,crux-2.1/
+"2016-04-22 14:12:58",127.0.0.1,daily/crux-2.1.16966.Windows.AMD64.zip
+"2016-04-22 17:40:11",127.0.0.1,daily/crux-2.1.16966.Windows.AMD64.zip
+"2016-04-24 00:09:03",127.0.0.1,daily/crux-2.1.16972.Linux.x86_64.zip
+"2016-04-24 12:47:03",192.168.51.113,daily/crux-2.1.16972.Windows.AMD64.zip
+"2016-04-25 07:32:57",127.0.0.1,crux-2.1/
+"2016-04-25 07:33:36",127.0.0.1,crux-2.1/
+"2016-04-25 07:33:43",127.0.0.1,daily/crux-2.1.16972.Windows.AMD64.zip
+"2016-04-26 13:59:56",127.0.0.1,daily/crux-2.1.16972.Linux.x86_64.zip
+"2016-04-27 10:06:06",127.0.0.1,daily/crux-2.1.16972.Windows.AMD64.zip
+"2016-04-27 16:27:40",127.0.0.1,daily/crux-2.1.16978.Darwin.x86_64.zip
+"2016-04-28 02:28:18",127.0.0.1,daily/crux-2.1.16978.Linux.x86_64.zip
+"2016-04-29 21:37:19",127.0.0.1,daily/crux-2.1.16980.Linux.x86_64.zip
+"2016-05-02 20:43:33",127.0.0.1,daily/crux-2.1.16989.Windows.i386.zip
+"2016-05-03 04:23:20",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-05-06 17:45:12",127.0.0.1,daily/crux-2.1.16999.Linux.i686.zip
+"2016-05-06 21:54:45",127.0.0.1,daily/crux-2.1.16999.Linux.x86_64.zip
+"2016-05-06 21:55:27",127.0.0.1,daily/
+"2016-05-06 21:55:59",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-05-06 21:58:04",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-05-09 07:35:34",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-05-09 07:36:15",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-05-09 11:55:32",127.0.0.1,daily/crux-2.1.17000.Linux.x86_64.zip
+"2016-05-09 14:54:31",127.0.0.1,crux-2.1/
+"2016-05-09 14:55:00",127.0.0.1,daily/crux-2.1.17000.Windows.AMD64.zip
+"2016-05-10 01:04:17",127.0.0.1,daily/crux-2.1.17000.Darwin.x86_64.zip
+"2016-05-11 01:32:35",127.0.0.1,daily/crux-2.1.17001.Linux.x86_64.zip
+"2016-05-11 01:59:32",127.0.0.1,daily/crux-2.1.17001.Windows.AMD64.zip
+"2016-05-11 07:05:32",127.0.0.1,crux-2.1/
+"2016-05-11 07:06:51",127.0.0.1,daily/crux-2.1.17001.Windows.AMD64.zip
+"2016-05-11 07:29:58",127.0.0.1,daily/crux-2.1.17001.Windows.AMD64.zip
+"2016-05-11 08:42:01",127.0.0.1,daily/crux-2.1.17001.Windows.AMD64.zip
+"2016-05-11 09:40:35",127.0.0.1,daily/crux-2.1.17001.Windows.AMD64.zip
+"2016-05-11 10:05:57",127.0.0.1,daily/crux-2.1.17001.Windows.AMD64.zip
+"2016-05-11 10:06:08",127.0.0.1,daily/crux-2.1.17001.Windows.AMD64.zip
+"2016-05-11 10:06:12",127.0.0.1,daily/crux-2.1.17001.Windows.AMD64.zip
+"2016-05-11 19:19:01",127.0.0.1,daily/crux-2.1.17001.Linux.i686.zip
+"2016-05-11 19:19:07",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2016-05-13 08:15:05",127.0.0.1,daily/crux-2.1.17001.Windows.AMD64.zip
+"2016-05-13 15:21:09",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-05-13 15:21:15",127.0.0.1,daily/crux-2.1.17001.Linux.x86_64.zip
+"2016-05-13 20:44:19",127.0.0.1,daily/crux-2.1.17001.Windows.AMD64.zip
+"2016-05-13 21:15:53",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-05-18 03:41:17",130.126.255.174,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2016-05-18 19:00:00",136.159.160.71,crux-2.1/
+"2016-05-18 19:00:08",136.159.160.71,daily/crux-2.1.17009.Windows.AMD64.zip
+"2016-05-18 23:46:42",69.91.189.73,daily/crux-2.1.17009.Linux.i686.zip
+"2016-05-18 23:47:13",69.91.189.73,daily/crux-2.1.17009.Source.tar.gz
+"2016-05-19 16:43:38",50.205.57.162,daily/crux-2.1.17009.Windows.AMD64.zip
+"2016-05-20 01:39:30",130.20.226.228,crux-2.1/
+"2016-05-20 01:39:50",130.20.226.228,daily/crux-2.1.17009.Windows.AMD64.zip
+"2016-05-20 15:29:59",50.205.57.162,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-05-20 15:30:05",50.205.57.162,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-05-20 15:30:21",50.205.57.162,crux-2.1/
+"2016-05-21 17:26:14",91.202.128.11,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-05-24 19:21:40",127.0.0.1,daily/crux-2.1.17010.Windows.AMD64.zip
+"2016-05-24 21:27:39",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-05-24 21:27:49",127.0.0.1,daily/crux-2.1.17010.Linux.x86_64.zip
+"2016-05-24 22:27:45",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-05-24 22:34:06",127.0.0.1,daily/crux-2.1.17010.Linux.x86_64.zip
+"2016-05-24 22:48:22",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-05-28 10:44:38",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-05-29 05:56:26",127.0.0.1,daily/crux-2.1.17012.Source.tar.gz
+"2016-05-30 23:22:42",127.0.0.1,daily/crux-2.1.17012.Linux.i686.zip
+"2016-06-01 08:48:16",127.0.0.1,daily/crux-2.1.17012.Windows.AMD64.zip
+"2016-06-01 11:08:45",127.0.0.1,daily/crux-2.1.17012.Linux.x86_64.zip
+"2016-06-01 11:17:44",127.0.0.1,daily/crux-2.1.17012.Source.tar.gz
+"2016-06-01 13:43:19",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-06-01 15:29:21",127.0.0.1,crux-2.1/
+"2016-06-01 15:29:40",127.0.0.1,daily/crux-2.1.17012.Windows.AMD64.zip
+"2016-06-01 15:30:08",127.0.0.1,daily/crux-2.1.17012.Linux.x86_64.zip
+"2016-06-01 15:30:14",127.0.0.1,daily/crux-2.1.17012.Source.tar.gz
+"2016-06-01 18:53:13",127.0.0.1,daily/crux-2.1.17012.Windows.AMD64.zip
+"2016-06-02 23:46:59",127.0.0.1,daily/crux-2.1.17012.Windows.i386.zip
+"2016-06-03 09:07:47",127.0.0.1,daily/crux-2.1.17016.Windows.AMD64.zip
+"2016-06-05 10:12:21",127.0.0.1,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2016-06-06 11:21:32",10.125.23.130,daily/crux-2.1.17021.Linux.x86_64.zip
+"2016-06-06 13:09:22",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-06-08 11:39:05",127.0.0.1,crux-2.1/
+"2016-06-08 11:39:32",127.0.0.1,daily/crux-2.1.17021.Windows.i386.zip
+"2016-06-08 11:39:48",127.0.0.1,daily/crux-2.1.17021.Windows.AMD64.zip
+"2016-06-08 11:53:53",127.0.0.1,crux-2.1/
+"2016-06-08 20:13:47",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2016-06-09 22:25:32",127.0.0.1,daily/crux-2.1.17023.Linux.i686.zip
+"2016-06-11 07:56:32",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2016-06-11 07:56:52",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-06-13 10:41:52",147.99.192.202,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-06-13 12:04:29",127.0.0.1,crux-2.1/
+"2016-06-13 12:04:40",127.0.0.1,daily/crux-2.1.17024.Windows.AMD64.zip
+"2016-06-14 12:34:13",10.125.23.130,daily/crux-2.1.17027.Linux.x86_64.zip
+"2016-06-14 12:35:07",10.125.23.130,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-06-14 17:42:52",127.0.0.1,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2016-06-14 17:46:19",127.0.0.1,daily/crux-2.1.17027.Darwin.x86_64.zip
+"2016-06-14 18:12:50",127.0.0.1,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2016-06-14 18:15:31",127.0.0.1,daily/crux-2.1.17027.Darwin.x86_64.zip
+"2016-06-14 20:01:38",66.42.137.210,daily/crux-2.1.17027.Windows.AMD64.zip
+"2016-06-15 12:39:51",127.0.0.1,daily/crux-2.1.17028.Linux.x86_64.zip
+"2016-06-15 22:48:03",127.0.0.1,daily/crux-2.1.17028.Windows.AMD64.zip
+"2016-06-19 01:13:36",127.0.0.1,daily/crux-2.1.17029.Linux.x86_64.zip
+"2016-06-19 01:17:14",127.0.0.1,daily/crux-2.1.17029.Source.tar.gz
+"2016-06-20 08:18:16",127.0.0.1,daily/crux-2.1.17029.Windows.AMD64.zip
+"2016-06-22 07:03:05",127.0.0.1,daily/crux-2.1.17030.Windows.AMD64.zip
+"2016-06-22 21:23:08",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-06-22 21:24:32",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-06-23 18:57:59",127.0.0.1,daily/crux-2.1.17031.Windows.AMD64.zip
+"2016-06-27 10:06:13",127.0.0.1,daily/crux-2.1.17031.Windows.AMD64.zip
+"2016-06-27 10:07:16",127.0.0.1,crux-2.1/
+"2016-06-27 10:07:24",127.0.0.1,crux-2.1/
+"2016-06-27 22:54:42",127.0.0.1,daily/crux-2.1.17031.Windows.AMD64.zip
+"2016-06-29 00:05:45",127.0.0.1,daily/crux-2.1.17031.Darwin.x86_64.zip
+"2016-06-29 00:06:17",127.0.0.1,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2016-06-29 11:01:39",10.125.23.67,crux-2.1/crux-2.1.Source.tar.gz
+"2016-07-04 11:48:42",127.0.0.1,crux-2.1/
+"2016-07-04 11:49:00",127.0.0.1,crux-2.1/
+"2016-07-04 11:49:05",127.0.0.1,daily/crux-2.1.17049.Windows.AMD64.zip
+"2016-07-04 11:49:39",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-07-04 11:49:48",127.0.0.1,daily/crux-2.1.17049.Source.tar.gz
+"2016-07-04 17:13:29",127.0.0.1,crux-2.1/
+"2016-07-04 17:13:36",127.0.0.1,daily/crux-2.1.17049.Windows.AMD64.zip
+"2016-07-04 23:09:11",127.0.0.1,crux-2.1/
+"2016-07-04 23:09:31",127.0.0.1,daily/crux-2.1.17049.Windows.AMD64.zip
+"2016-07-05 07:30:47",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-07-05 07:31:19",127.0.0.1,daily/crux-2.1.17049.Linux.x86_64.zip
+"2016-07-05 07:31:54",127.0.0.1,crux-2.1/crux-2.1.Source.tar.gz
+"2016-07-05 07:32:00",127.0.0.1,daily/crux-2.1.17049.Source.tar.gz
+"2016-07-05 07:32:18",127.0.0.1,crux-2.1/
+"2016-07-05 07:32:31",127.0.0.1,crux-2.1/
+"2016-07-05 07:32:48",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-07-05 07:33:07",127.0.0.1,crux-2.1/
+"2016-07-05 07:33:23",127.0.0.1,crux-2.1/
+"2016-07-05 07:35:54",127.0.0.1,crux-2.1/
+"2016-07-05 07:42:44",127.0.0.1,daily/crux-2.1.17049.Windows.AMD64.zip
+"2016-07-05 07:43:08",127.0.0.1,crux-2.1/
+"2016-07-05 16:29:23",127.0.0.1,daily/crux-2.1.17049.Linux.i686.zip
+"2016-07-06 14:03:26",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2016-07-06 14:03:36",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-07-06 14:03:49",127.0.0.1,crux-2.1/
+"2016-07-06 14:04:35",127.0.0.1,crux-2.1/
+"2016-07-06 14:04:45",127.0.0.1,daily/crux-2.1.17052.Windows.AMD64.zip
+"2016-07-06 14:31:42",127.0.0.1,daily/crux-2.1.17052.Source.tar.gz
+"2016-07-06 22:51:15",127.0.0.1,crux-2.1/
+"2016-07-06 22:51:43",127.0.0.1,daily/crux-2.1.17052.Windows.AMD64.zip
+"2016-07-06 22:53:54",127.0.0.1,daily/crux-2.1.17052.Linux.x86_64.zip
+"2016-07-06 22:57:04",127.0.0.1,daily/crux-2.1.17052.Source.tar.gz
+"2016-07-08 08:06:12",127.0.0.1,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-07-08 10:17:33",127.0.0.1,crux-2.1/
+"2016-07-08 10:17:48",127.0.0.1,crux-2.1/
+"2016-07-08 10:18:21",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2016-07-08 10:18:46",127.0.0.1,crux-2.1/
+"2016-07-08 10:18:49",127.0.0.1,daily/crux-2.1.17059.Windows.AMD64.zip
+"2016-07-10 06:23:01",127.0.0.1,daily/crux-2.1.17059.Source.tar.gz
+"2016-07-11 18:55:59",127.0.0.1,crux-2.1/crux-2.1.Darwin.x86_64.zip
+"2016-07-11 19:20:07",127.0.0.1,daily/crux-2.1.17059.Darwin.x86_64.zip
+"2016-07-17 04:20:45",127.0.0.1,daily/crux-2.1.17059.Source.tar.gz
+"2016-07-19 04:48:55",127.0.0.1,daily/crux-2.1.17063.Windows.AMD64.zip
+"2016-07-19 05:31:18",127.0.0.1,daily/crux-2.1.17063.Windows.AMD64.zip
+"2016-07-19 05:32:44",127.0.0.1,daily/crux-2.1.17063.Windows.AMD64.zip
+"2016-07-19 05:34:24",127.0.0.1,daily/crux-2.1.17063.Windows.AMD64.zip
+"2016-07-20 02:47:34",127.0.0.1,crux-2.1/
+"2016-07-20 02:47:41",127.0.0.1,daily/crux-2.1.17070.Windows.i386.zip
+"2016-07-20 03:21:01",127.0.0.1,crux-2.1/
+"2016-07-20 03:21:16",127.0.0.1,daily/crux-2.1.17070.Windows.i386.zip
+"2016-07-20 06:25:05",127.0.0.1,daily/crux-2.1.17070.Linux.i686.zip
+"2016-07-20 06:25:08",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2016-07-20 06:25:41",127.0.0.1,daily/crux-2.1.17070.Linux.x86_64.zip
+"2016-07-20 06:42:29",127.0.0.1,daily/crux-2.1.17070.Darwin.x86_64.zip
+"2016-07-20 06:42:45",127.0.0.1,daily/crux-2.1.17070.Source.tar.gz
+"2016-07-20 07:42:21",127.0.0.1,daily/crux-2.1.17070.Linux.i686.zip
+"2016-07-20 11:14:48",127.0.0.1,crux-2.1/
+"2016-07-20 11:15:01",127.0.0.1,daily/crux-2.1.17070.Windows.AMD64.zip
+"2016-07-20 16:03:49",127.0.0.1,daily/crux-2.1.17076.Source.tar.gz
+"2016-07-20 17:18:33",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2016-07-20 17:54:07",127.0.0.1,daily/crux-2.1.17076.Source.tar.gz
+"2016-07-21 00:45:58",127.0.0.1,daily/crux-2.1.17076.Windows.i386.zip
+"2016-07-21 00:50:03",127.0.0.1,daily/crux-2.1.17076.Windows.AMD64.zip
+"2016-07-21 01:08:02",127.0.0.1,daily/crux-2.1.17076.Windows.i386.zip
+"2016-07-21 01:08:21",127.0.0.1,daily/crux-2.1.17076.Source.tar.gz
+"2016-07-21 14:10:29",127.0.0.1,crux-2.1/
+"2016-07-21 14:10:57",127.0.0.1,crux-2.1/
+"2016-07-21 14:11:12",127.0.0.1,daily/crux-2.1.17076.Windows.AMD64.zip
+"2016-07-21 20:27:27",127.0.0.1,daily/crux-2.1.17076.Darwin.x86_64.zip
+"2016-07-21 23:36:50",127.0.0.1,daily/crux-2.1.17076.Linux.x86_64.zip
+"2016-07-21 23:39:20",127.0.0.1,daily/crux-2.1.17076.Darwin.x86_64.zip
+"2016-07-22 08:43:53",127.0.0.1,crux-2.1/
+"2016-07-22 08:44:01",127.0.0.1,daily/crux-2.1.17076.Windows.AMD64.zip
+"2016-07-22 15:21:00",127.0.0.1,crux-2.1/
+"2016-07-22 15:21:48",127.0.0.1,daily/crux-2.1.17078.Windows.AMD64.zip
+"2016-07-22 15:21:55",127.0.0.1,crux-2.1/
+"2016-07-25 05:59:33",159.226.42.143,crux-2.1/crux-2.1.Linux.i686.zip
+"2016-07-25 06:00:04",159.226.42.143,crux-2.1/
+"2016-07-25 06:00:33",159.226.42.143,crux-2.1/
+"2016-07-25 06:01:04",159.226.42.143,crux-2.1/
+"2016-07-25 06:01:33",159.226.42.143,crux-2.1/
+"2016-07-25 06:01:42",159.226.42.143,daily/crux-2.1.17081.Windows.AMD64.zip
+"2016-07-25 06:01:55",159.226.42.143,crux-2.1/
+"2016-07-25 06:02:21",159.226.42.143,daily/crux-2.1.17081.Source.tar.gz
+"2016-07-25 06:02:26",159.226.42.143,crux-2.1/crux-2.1.Source.tar.gz
+"2016-07-25 06:02:30",159.226.42.143,daily/crux-2.1.17081.Source.tar.gz
+"2016-07-25 06:02:41",159.226.42.143,crux-2.1/crux-2.1.Source.tar.gz
+"2016-07-25 06:03:00",159.226.42.143,crux-2.1/crux-2.1.Linux.x86_64.zip
+"2016-07-25 06:03:31",159.226.42.143,crux-2.1/
+"2016-07-25 09:07:32",127.0.0.1,crux-2.1/
+"2016-07-25 13:19:36",127.0.0.1,daily/crux-2.1.17081.Linux.x86_64.zip
+"2016-07-25 15:21:18",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2016-07-25 15:21:28",127.0.0.1,daily/crux-2.1.17081.Windows.AMD64.zip
+"2016-07-25 15:21:28",127.0.0.1,daily/crux-2.1.17081.Windows.AMD64.zip
+"2016-07-26 16:40:37",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2016-07-26 16:41:42",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2016-07-26 16:42:14",127.0.0.1,crux-2.1/
+"2016-07-26 17:14:04",127.0.0.1,daily/crux-2.1.17090.Windows.AMD64.zip
+"2016-07-27 07:15:31",127.0.0.1,crux-2.1/
+"2016-07-27 07:15:39",127.0.0.1,daily/crux-2.1.17090.Windows.AMD64.zip
+"2016-07-27 14:26:02",127.0.0.1,daily/crux-2.1.17094.Linux.x86_64.zip
+"2016-07-27 19:26:08",127.0.0.1,daily/crux-2.1.17094.Linux.x86_64.zip
+"2016-07-27 20:38:26",127.0.0.1,daily/crux-2.1.17094.Linux.x86_64.zip
+"2016-07-27 20:40:55",127.0.0.1,daily/crux-2.1.17094.Linux.x86_64.zip
+"2016-07-27 21:48:21",127.0.0.1,daily/crux-2.1.17094.Darwin.x86_64.zip
+"2016-07-28 12:49:09",127.0.0.1,daily/crux-2.1.17096.Linux.x86_64.zip
+"2016-07-29 01:43:53",127.0.0.1,crux-2.1/
+"2016-07-29 01:44:30",127.0.0.1,crux-2.1/
+"2016-07-29 01:44:56",127.0.0.1,crux-2.1/
+"2016-07-31 06:10:29",127.0.0.1,daily/crux-2.1.17096.Windows.AMD64.zip
+"2016-08-01 01:49:41",127.0.0.1,daily/crux-2.1.17096.Linux.i686.zip
+"2016-08-01 01:51:34",127.0.0.1,crux-2.1/crux-2.1.Linux.i686.zip
+"2016-08-01 02:01:31",127.0.0.1,daily/crux-2.1.17096.Windows.AMD64.zip
+"2016-08-02 04:37:38",104.156.104.175,daily/crux-2.1.17096.Linux.i686.zip
+"2016-08-02 04:38:58",104.156.104.175,daily/crux-2.1.17096.Linux.i686.zip
+"2016-08-02 04:45:39",104.156.104.175,daily/crux-2.1.17096.Linux.i686.zip
+"2016-08-02 04:45:44",104.156.104.175,daily/crux-2.1.17096.Linux.i686.zip
+"2016-08-02 15:05:32",104.156.104.175,crux-3.0/crux-3.0.Linux.i686.zip
+"2016-08-02 15:05:35",104.156.104.175,daily/crux-3.0.17096.Linux.i686.zip
+"2016-08-02 18:00:27",206.124.61.226,daily/crux-3.0.17096.Linux.x86_64.zip
+"2016-08-02 18:00:52",206.124.61.226,daily/crux-3.0.17096.Linux.x86_64.zip
+"2016-08-02 18:01:30",206.124.61.226,crux-3.0/crux-3.0.Linux.x86_64.zip
+"2016-08-02 18:04:02",206.124.61.226,daily/crux-3.0.17096.Linux.x86_64.zip
+"2016-08-02 18:11:36",128.208.10.145,crux-3.0/crux-3.0.Linux.i686.zip
+"2016-08-02 18:11:38",128.208.10.145,daily/crux-3.0.17105.Linux.i686.zip
+"2016-08-02 18:12:10",128.208.10.145,daily/crux-3.0.17105.Linux.i686.zip
+"2016-08-02 18:17:48",128.208.10.145,daily/crux-3.0.17105.Linux.i686.zip
+"2016-08-02 18:17:51",128.208.10.145,crux-3.0/crux-3.0.Linux.i686.zip
+"2016-08-02 18:28:20",173.230.146.183,crux-3.0/crux-3.0.Linux.i686.zip
+"2016-08-02 18:28:23",173.230.146.183,daily/crux-3.0.17105.Linux.i686.zip
+"2016-08-02 18:29:52",206.124.61.226,daily/crux-3.0.17105.Linux.i686.zip
+"2016-08-02 18:30:05",206.124.61.226,daily/crux-3.0.17105.Linux.x86_64.zip
+"2016-08-02 18:49:40",128.208.10.145,daily/crux-3.0.17105.Linux.i686.zip
+"2016-08-02 18:49:41",128.208.10.145,crux-3.0/crux-3.0.Linux.i686.zip
+"2016-08-02 19:53:09",206.124.61.226,daily/crux-3.0.17105.Source.tar.gz
+"2016-08-02 20:00:22",173.230.146.183,crux-3.0/
+"2016-08-02 20:53:29",173.230.146.183,crux-3.0/crux-3.0.Darwin.x86_64.zip
+"2016-08-02 20:53:58",173.230.146.183,crux-3.0/crux-3.0.Darwin.x86_64.zip
+"2016-08-02 20:54:02",173.230.146.183,crux-3.0/crux-3.0.Darwin.x86_64.zip
+"2016-08-02 20:56:26",173.230.146.183,crux-3.0/crux-3.0.Linux.i686.zip
+"2016-08-02 20:56:32",173.230.146.183,crux-3.0/crux-3.0.Linux.x86_64.zip
+"2016-08-02 20:59:30",173.230.146.183,crux-3.0/crux-3.0.Linux.i686.zip
+"2016-08-02 21:28:45",173.250.196.246,crux-3.0/crux-3.0.Darwin.x86_64.zip
+"2016-08-02 22:52:05",173.230.146.183,crux-3.0/
+"2016-08-02 22:52:15",173.230.146.183,crux-3.0/
+"2016-08-02 22:52:27",173.230.146.183,crux-3.0/crux-3.0.Linux.i686.zip
+"2016-08-02 22:54:09",104.156.104.175,crux-3.0/
+"2016-08-02 22:54:17",104.156.104.175,crux-3.0/
+"2016-08-02 22:54:36",104.156.104.175,crux-3.0/
+"2016-08-02 22:54:50",104.156.104.175,crux-3.0/crux-3.0.Linux.i686.zip
+"2016-08-02 22:56:13",104.156.104.175,daily/crux-3.0.17108.Linux.i686.zip
+"2016-08-02 22:56:22",104.156.104.175,daily/crux-3.0.17108.Windows.i386.zip
+"2016-08-02 22:58:57",104.156.104.175,crux-3.0/crux-3.0.Windows.i386.zip
+"2016-08-02 22:59:01",104.156.104.175,crux-3.0/crux-3.0.Windows.AMD64.zip
+"2016-08-02 22:59:17",104.156.104.175,crux-3.0/crux-3.0.Windows.i386.zip
+"2016-08-02 22:59:21",104.156.104.175,crux-3.0/crux-3.0.Windows.AMD64.zip
+"2016-08-02 23:02:26",104.156.104.175,crux-3.0/crux-3.0.Windows.AMD64.zip
+"2016-08-02 23:02:31",104.156.104.175,crux-3.0/crux-3.0.Windows.i386.zip
+"2016-08-02 23:02:36",104.156.104.175,crux-3.0/crux-3.0.Darwin.x86_64.zip
+"2016-08-02 23:02:42",104.156.104.175,crux-3.0/crux-3.0.Linux.x86_64.zip
+"2016-08-02 23:02:46",104.156.104.175,crux-3.0/crux-3.0.Linux.i686.zip
+"2016-08-03 15:09:09",198.137.20.63,daily/crux-3.0.17111.Windows.i386.zip
+"2016-08-03 17:37:45",69.91.182.147,crux-3.0/crux-3.0.Linux.i686.zip
+"2016-08-03 17:37:53",69.91.182.147,crux-3.0/crux-3.0.Linux.x86_64.zip
+"2016-08-03 17:38:01",69.91.182.147,crux-3.0/crux-3.0.Darwin.x86_64.zip
+"2016-08-03 17:38:08",69.91.182.147,crux-3.0/
+"2016-08-03 17:38:20",69.91.182.147,crux-3.0/
+"2016-08-03 17:38:35",69.91.182.147,crux-3.0/crux-3.0.Source.tar.gz
+"2016-08-03 18:00:03",69.91.182.147,daily/crux-3.0.17111.Windows.AMD64.zip
+"2016-08-03 19:45:53",192.26.253.240,crux-3.0/crux-3.0.Linux.x86_64.zip
+"2016-08-03 20:04:53",69.91.182.147,crux-3.0/crux-3.0.Linux.i686.zip
+"2016-08-03 20:05:00",69.91.182.147,crux-3.0/crux-3.0.Linux.x86_64.zip
+"2016-08-03 20:05:07",69.91.182.147,crux-3.0/crux-3.0.Darwin.x86_64.zip
+"2016-08-03 20:05:15",69.91.182.147,crux-3.0/
+"2016-08-03 20:05:34",69.91.182.147,crux-3.0/
+"2016-08-03 20:05:43",69.91.182.147,crux-3.0/crux-3.0.Source.tar.gz
+"2016-08-03 20:53:51",69.91.182.147,daily/
+"2016-08-03 21:00:13",69.91.182.147,crux-3.0/
+"2016-08-03 21:00:30",69.91.182.147,crux-3.0/crux-3.0.Linux.i686.zip
+"2016-08-03 21:00:40",69.91.182.147,crux-3.0/
+"2016-08-03 21:03:11",69.91.182.147,crux-3.0/crux-3.0.Windows.AMD64.zip
+"2016-08-03 21:03:21",69.91.182.147,crux-3.0/crux-3.0.Windows.i386.zip
+"2016-08-03 21:45:07",69.91.182.147,daily/crux-3.0.17111.Linux.i686.zip
+"2016-08-03 21:45:14",69.91.182.147,daily/crux-3.0.17111.Linux.x86_64.zip
+"2016-08-03 21:45:20",69.91.182.147,daily/crux-3.0.17111.Darwin.x86_64.zip
+"2016-08-03 21:45:28",69.91.182.147,daily/crux-3.0.17111.Windows.AMD64.zip
+"2016-08-03 21:45:34",69.91.182.147,daily/crux-3.0.17111.Windows.i386.zip
+"2016-08-03 21:45:41",69.91.182.147,daily/crux-3.0.17111.Source.tar.gz
+"2016-08-03 21:46:03",69.91.182.147,crux-3.0/crux-3.0.Linux.i686.zip
+"2016-08-03 21:46:11",69.91.182.147,crux-3.0/crux-3.0.Linux.x86_64.zip
+"2016-08-03 21:46:18",69.91.182.147,crux-3.0/crux-3.0.Darwin.x86_64.zip
+"2016-08-03 21:46:23",69.91.182.147,crux-3.0/crux-3.0.Windows.AMD64.zip
+"2016-08-03 21:46:29",69.91.182.147,crux-3.0/crux-3.0.Windows.i386.zip
+"2016-08-03 21:46:35",69.91.182.147,crux-3.0/crux-3.0.Source.tar.gz
+"2016-08-03 23:15:45",69.91.182.147,crux-3.0/crux-3.0.Linux.i686.zip
+"2016-08-03 23:15:50",69.91.182.147,crux-3.0/crux-3.0.Linux.x86_64.zip
+"2016-08-03 23:15:57",69.91.182.147,crux-3.0/crux-3.0.Darwin.x86_64.zip
+"2016-08-03 23:16:04",69.91.182.147,crux-3.0/
+"2016-08-03 23:16:26",69.91.182.147,crux-3.0/
+"2016-08-03 23:16:48",69.91.182.147,daily/crux-3.0.17111.Windows.i386.zip
+"2016-08-03 23:16:55",69.91.182.147,daily/crux-3.0.17111.Windows.AMD64.zip
+"2016-08-03 23:17:00",69.91.182.147,daily/crux-3.0.17111.Darwin.x86_64.zip
+"2016-08-03 23:17:06",69.91.182.147,daily/crux-3.0.17111.Linux.i686.zip
+"2016-08-03 23:17:11",69.91.182.147,crux-3.0/crux-3.0.Source.tar.gz
+"2016-08-03 23:17:13",69.91.182.147,daily/crux-3.0.17111.Source.tar.gz
+"2016-08-03 23:19:49",69.91.182.147,crux-3.0/
+"2016-08-03 23:34:44",69.91.182.147,crux-3.0/crux-3.0.Windows.AMD64.zip
+"2016-08-03 23:34:49",69.91.182.147,daily/crux-3.0.17111.Windows.AMD64.zip
+"2016-08-03 23:34:56",69.91.182.147,crux-3.0/crux-3.0.Windows.i386.zip
+"2016-08-03 23:34:58",69.91.182.147,daily/crux-3.0.17111.Windows.i386.zip
+"2016-08-03 23:35:04",69.91.182.147,crux-3.0/crux-3.0.Source.tar.gz
+"2016-08-03 23:35:06",69.91.182.147,daily/crux-3.0.17111.Source.tar.gz
+"2016-08-03 23:35:13",69.91.182.147,crux-3.0/crux-3.0.Darwin.x86_64.zip
+"2016-08-03 23:35:14",69.91.182.147,daily/crux-3.0.17111.Darwin.x86_64.zip
+"2016-08-03 23:35:20",69.91.182.147,crux-3.0/crux-3.0.Linux.x86_64.zip
+"2016-08-03 23:35:21",69.91.182.147,daily/crux-3.0.17111.Linux.x86_64.zip
+"2016-08-03 23:35:28",69.91.182.147,crux-3.0/crux-3.0.Linux.i686.zip
+"2016-08-03 23:35:30",69.91.182.147,daily/crux-3.0.17111.Linux.i686.zip
+"2016-08-03 23:43:34",69.91.182.147,crux-3.0/crux-3.0.Source.tar.gz
+"2016-08-03 23:43:35",69.91.182.147,daily/crux-3.0.17111.Source.tar.gz
+"2016-08-03 23:43:44",69.91.182.147,crux-3.0/crux-3.0.Windows.i386.zip
+"2016-08-03 23:43:46",69.91.182.147,daily/crux-3.0.17111.Windows.i386.zip
+"2016-08-04 15:32:21",139.165.31.15,crux-3.0/crux-3.0.Windows.AMD64.zip
+"2016-08-04 20:26:16",169.237.40.189,crux-3.0/crux-3.0.Source.tar.gz
+"2016-08-06 06:24:16",76.167.72.26,crux-3.0/crux-3.0.Source.tar.gz
+"2016-08-06 06:24:37",76.167.72.26,daily/crux-3.0.17115.Windows.AMD64.zip
+"2016-08-06 06:28:28",143.89.131.21,daily/crux-3.0.17115.Windows.AMD64.zip
+"2016-08-06 12:29:18",79.203.68.206,crux-3.0/crux-3.0.Windows.AMD64.zip
+"2016-08-06 15:08:13",124.27.207.141,daily/crux-3.0.17124.Windows.AMD64.zip
+"2016-08-08 03:20:16",137.111.13.126,crux-3.0/crux-3.0.Darwin.x86_64.zip
+"2016-08-09 05:07:24",14.139.229.226,daily/crux-3.0.17124.Windows.AMD64.zip
+"2016-08-09 22:58:24",69.91.182.147,crux-3.0/crux-3.0.Linux.i686.zip
+"2016-08-09 22:58:30",69.91.182.147,crux-3.0/crux-3.0.Linux.x86_64.zip
+"2016-08-09 22:58:37",69.91.182.147,crux-3.0/crux-3.0.Darwin.x86_64.zip
+"2016-08-09 22:58:43",69.91.182.147,crux-3.0/crux-3.0.Windows.AMD64.zip
+"2016-08-09 22:58:51",69.91.182.147,crux-3.0/crux-3.0.Windows.i386.zip
+"2016-08-09 23:23:33",69.91.182.147,crux-3.0/crux-3.0.Windows.AMD64.zip
+"2016-08-09 23:37:58",69.91.182.147,crux-3.0/crux-3.0.Windows.i386.zip
+"2016-08-09 23:58:19",69.91.182.147,crux-3.0/crux-3.0.Source.tar.gz
diff --git a/doc/user/CMakeLists.txt b/doc/user/CMakeLists.txt
new file mode 100644
index 0000000..99d91c6
--- /dev/null
+++ b/doc/user/CMakeLists.txt
@@ -0,0 +1,29 @@
+cmake_minimum_required(VERSION 2.8.1)
+cmake_policy(VERSION 2.8.1)
+
+# Generate documentation
+if (UNIX)
+  set(CRUX_PATH "${PROJECT_BINARY_DIR}/src/crux")
+elseif(WIN32)
+  set(CMAKE_MSVCIDE_RUN_PATH ${PROJECT_BINARY_DIR}/ext/lib)
+  set(CRUX_PATH "$<TARGET_FILE:crux>")
+endif (UNIX)
+add_custom_target(
+  create-docs
+  ALL
+  WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/doc/user
+  COMMAND 
+    ${CMAKE_COMMAND} 
+      -DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}
+      -DPROJECT_BINARY_DIR=${PROJECT_BINARY_DIR}
+      -DCRUX_PATH:PATH=${CRUX_PATH}
+      -DDOC_DIR:PATH=${PROJECT_SOURCE_DIR}/doc/user/commands
+      -P  ${CMAKE_CURRENT_SOURCE_DIR}/create-docs.cmake
+)
+
+install(
+  DIRECTORY . 
+  DESTINATION doc
+  PATTERN "CMakeLists.txt" EXCLUDE
+  PATTERN "download" EXCLUDE 
+)
diff --git a/doc/user/Makefile b/doc/user/Makefile
new file mode 100644
index 0000000..0f38c7b
--- /dev/null
+++ b/doc/user/Makefile
@@ -0,0 +1,207 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 2.8
+
+# Default target executed when no arguments are given to make.
+default_target: all
+.PHONY : default_target
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+# A target that is always out of date.
+cmake_force:
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake
+
+# The command to remove a file.
+RM = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The program to use to edit the cache.
+CMAKE_EDIT_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target edit_cache
+edit_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+.PHONY : edit_cache/fast
+
+# Special rule for the target install
+install: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install
+
+# Special rule for the target install
+install/fast: preinstall/fast
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install/fast
+
+# Special rule for the target install/local
+install/local: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local
+
+# Special rule for the target install/local
+install/local/fast: install/local
+.PHONY : install/local/fast
+
+# Special rule for the target install/strip
+install/strip: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip
+
+# Special rule for the target install/strip
+install/strip/fast: install/strip
+.PHONY : install/strip/fast
+
+# Special rule for the target list_install_components
+list_install_components:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
+.PHONY : list_install_components
+
+# Special rule for the target list_install_components
+list_install_components/fast: list_install_components
+.PHONY : list_install_components/fast
+
+# Special rule for the target package
+package: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackConfig.cmake
+.PHONY : package
+
+# Special rule for the target package
+package/fast: package
+.PHONY : package/fast
+
+# Special rule for the target package_source
+package_source:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool for source..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackSourceConfig.cmake /data/TeamCity/buildAgent/work/779d99b0241b2175/CPackSourceConfig.cmake
+.PHONY : package_source
+
+# Special rule for the target package_source
+package_source/fast: package_source
+.PHONY : package_source/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+.PHONY : rebuild_cache/fast
+
+# The main all target
+all: cmake_check_build_system
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles /data/TeamCity/buildAgent/work/779d99b0241b2175/doc/user/CMakeFiles/progress.marks
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 doc/user/all
+	$(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 doc/user/clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 doc/user/preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 doc/user/preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+.PHONY : depend
+
+# Convenience name for target.
+doc/user/CMakeFiles/create-docs.dir/rule:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 doc/user/CMakeFiles/create-docs.dir/rule
+.PHONY : doc/user/CMakeFiles/create-docs.dir/rule
+
+# Convenience name for target.
+create-docs: doc/user/CMakeFiles/create-docs.dir/rule
+.PHONY : create-docs
+
+# fast build rule for target.
+create-docs/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f doc/user/CMakeFiles/create-docs.dir/build.make doc/user/CMakeFiles/create-docs.dir/build
+.PHONY : create-docs/fast
+
+# Help Target
+help:
+	@echo "The following are some of the valid targets for this Makefile:"
+	@echo "... all (the default if no target is provided)"
+	@echo "... clean"
+	@echo "... depend"
+	@echo "... create-docs"
+	@echo "... edit_cache"
+	@echo "... install"
+	@echo "... install/local"
+	@echo "... install/strip"
+	@echo "... list_install_components"
+	@echo "... package"
+	@echo "... package_source"
+	@echo "... rebuild_cache"
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/doc/user/assign-confidence.html b/doc/user/assign-confidence.html
new file mode 100644
index 0000000..8249447
--- /dev/null
+++ b/doc/user/assign-confidence.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>assign-confidence</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>assign-confidence</h1>
+<h2>Usage:</h2>
+<p><code>crux assign-confidence [options] <target input>+</code></p>
+<h2>Description:</h2>
+<p>Given target and decoy scores, estimate a q-value for each target score. The q-value is analogous to a p-value but incorporates false discovery rate multiple testing correction. The q-value associated with a score threshold T is defined as the minimal false discovery rate (FDR) at which a score of T is deemed significant. In this setting, the q-value accounts for the fact that we are analyzing a large collection of scores. For confidence estimation afficionados, please note that this  [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>target input+</code> – One or more files, each containing a collection of peptide-spectrum matches (PSMs) in <a href="../file-formats/txt-format.html">tab-delimited text</a>, <a href="http://tools.proteomecenter.org/wiki/index.php?title=Formats:pepXML">PepXML</a>, or <a href="http://www.psidev.info/mzidentml">mzIdentML</a> format. In tab-delimited text format, only the specified score column is required. However if --estimation-method is tdc, then the columns "scan" and [...]
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>assign-confidence.target.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited text file</a> that contains the targets, sorted by score. The file will contain one new column, named "<method> q-value", where <method> is either "tdc" or "mix-max".</li>
+  <li><code>assign-confidence.log.txt</code> – a log file containing a copy of all messages that were printed to stderr.</li>
+  <li><code>assign-confidence.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>assign-confidence options</h3>
+<ul>
+  <li class="nobullet"><code>--estimation-method mix-max|tdc|peptide-level</code> – Specify the method used to estimate q-values.  The mix-max procedure or target-decoy competition apply to PSMs. The peptide-level option eliminates any PSM for which there exists a better scoring PSM involving the same peptide, and then uses decoys to assign confidence estimates. Default = <code>tdc</code>.</li>
+  <li class="nobullet"><code>--score <string></code> – Specify the column (for tab-delimited input) or tag (for XML input) used as input to the q-value estimation procedure. If this parameter is unspecified, then the program searches for "xcorr score", "evalue" (comet), "exact p-value" score fields in this order in the input file.  Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--sidak T|F</code> – Adjust the score using the Sidak adjustment and reports them in a new column in the output file. Note that this adjustment only makes sense if the given scores are p-values, and that it requires the presence of the "distinct matches/spectrum" feature for each PSM. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--combine-charge-states T|F</code> – Specify this parameter to T in order to combine charge states with peptide sequencesin peptide-centric search. Works only if estimation-method = peptide-level. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--combine-modified-peptides T|F</code> – Specify this parameter to T in order to treat peptides carrying different or no modifications as being the same. Works only if estimation = peptide-level. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--list-of-files T|F</code> – Specify that the search results are provided as lists of files, rather than as individual files. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/barista.html b/doc/user/barista.html
new file mode 100644
index 0000000..f5b1d92
--- /dev/null
+++ b/doc/user/barista.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>barista</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>barista</h1>
+<h2>Usage:</h2>
+<p><code>crux barista [options] <database> <fragmentation spectra> <search results></code></p>
+<h2>Description:</h2>
+<p>Barista is a protein identification algorithm that combines two different tasks–peptide-spectrum match (PSM) verification and protein inference–into a single learning algorithm. The program requires three inputs: a set of MS2 spectra, a protein database, and the results of searching the spectra against the database. Barista produces as output three ranked lists of proteins, peptides and PSMs, based on how likely the proteins and peptides are to be present in the sample and [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>database</code> – The program requires the FASTA format protein database files against which the search was performed. The protein database input may be a concatenated database or separate target and decoy databases; the latter is supported with the --separate-searches option, described below. In either case, Barista distinguishes between target and decoy proteins based on the presence of a decoy prefix on the sequence identifiers (see the --decoy-prefix option, below). [...]
+  <li><code>fragmentation spectra</code> – The fragmentation spectra must be provided in <a href="../file-formats/ms2-format.html">MS2</a>, mzXML, or MGF format.</li>
+  <li><code>search results</code> – Search results in the <a href="../file-formats/txt-format.html">tab-delimited text format</a> produced by Crux or in <a href="../file-formats/sqt-format.html">SQT format</a>. Like the spectra, the search results can be provided as a single file, a list of files or a directory of files. Note, however, that the input mode for spectra and for search results must be the same; i.e., if you provide a list of files for the spectra, then you must also pr [...]
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>barista.xml</code> – an <a href="../file-formats/barista-xml-format.html">XML file</a> that contains four information about proteins, subset proteins, peptides, and PSMs.</li>
+  <li><code>barista.target.proteins.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited file</a> containing a ranked list of groups of indistinguishable target proteins with associated Barista scores and q-values and with peptides that contributed to the identification of the protein group.</li>
+  <li><code>barista.target.subset-proteins.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited file</a> containing groups of indistinguishable proteins.</li>
+  <li><code>barista.target.peptides.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited file</a> containing a ranked list of target peptides with the associated Barista scores and q-values.</li>
+  <li><code>barista.target.psm.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited file format</a> containing a ranked list of target peptide-spectrum matches with the associated Barista scores and q-values.</li>
+  <li><code>barista.log.txt</code> – a file where the program reports its progress.</li>
+  <li><code>barista.params.txt</code> – a file with the values of all the options given to the current run.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>barista options</h3>
+<ul>
+  <li class="nobullet"><code>--separate-searches <string></code> – If the target and decoy searches were run separately, rather than using a concatenated database, then the program will assume that the database search results provided as a required argument are from the target database search. This option then allows the user to specify the location of the decoy search results. Like the required arguments, these search results can be provided as a single file, a list of files [...]
+  <li class="nobullet"><code>--skip-cleanup T|F</code> – Analysis begins with a pre-processsing step that creates a set of lookup tables which are then used during training. Normally, these lookup tables are deleted at the end of the analysis, but setting this option to T prevents the deletion of these tables. Subsequently, analyses can be repeated more efficiently by specifying the --re-run option. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--re-run <string></code> – Re-run a previous analysis using a previously computed set of lookup tables. For this option to work, the --skip-cleanup option must have been set to true when the program was run the first time. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--use-spec-features T|F</code> – Use an enriched feature set, including separate features for each ion type. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--optimization protein|peptide|psm</code> – Specifies whether to do optimization at the protein, peptide or psm level. Default = <code>protein</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Enzymatic digestion</h3>
+<ul>
+  <li class="nobullet"><code>--enzyme no-enzyme|trypsin|trypsin/p|chymotrypsin|elastase|clostripain|cyanogen-bromide|iodosobenzoate|proline-endopeptidase|staph-protease|asp-n|lys-c|lys-n|arg-c|glu-c|pepsin-a|elastase-trypsin-chymotrypsin|custom-enzyme</code> – Specify the enzyme used to digest the proteins in silico. Available enzymes (with the corresponding digestion rules indicated in parentheses) include no-enzyme ([X]|[X]), trypsin ([RK]|{P}), trypsin/p ([RK]|[]), chymotrypsin  [...]
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pepxml-output T|F</code> – Output a pepXML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--txt-output T|F</code> – Output a tab-delimited results file to the output directory. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--list-of-files T|F</code> – Specify that the search results are provided as lists of files, rather than as individual files. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--feature-file-out T|F</code> – Output the computed features in <a href="../file-formats/features.html">tab-delimited text format</a>. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/bullseye.html b/doc/user/bullseye.html
new file mode 100644
index 0000000..e73bf1e
--- /dev/null
+++ b/doc/user/bullseye.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>bullseye</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>bullseye</h1>
+<h2>Usage:</h2>
+<p><code>crux bullseye [options] <MS1 spectra> <MS2 spectra></code></p>
+<h2>Description:</h2>
+<p>Bullseye assigns high resolution precursor m/z values to fragmentation (MS2) spectra. Bullseye uses the Hardklör algorithm to identify persistent isotope distributions (PPIDs) in precursor (MS1) scans. For each PPID, MS2 scans that occur within a specified time and m/z range are assigned the average monoisotopic m/z from the PPID assigned as the precursor m/z. A detailed description of the Bullseye algorithm is given in </p><quote>Hsieh EJ, Hoopmann MR, Maclean B, MacCoss MJ. <a  [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>MS1 spectra</code> – The name of a file from which to parse high-resolution spectra of intact peptides. The file may be in MS1 (.ms1), binary MS1 (.bms1), compressed MS1 (.cms1), or mzXML (.mzXML) format. Bullseye will search for PPIDs in these spectra.</li>
+  <li><code>MS2 spectra</code> – The name of a file from which to parse peptide fragmentation spectra. The file may be in MS2 (.ms2), binary MS2 (.bms2), compressed MS2 (.cms2) or mzXML (.mzXML) format. Bullseye will assign high-resolution precursor masses to these spectra.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>bullseye.pid.<format></code> – a file containing the fragmentation spectra for which accurate masses were successfully inferred. Unless otherwise specified (with the --spectrum-format option), the output file format is ".ms2". Note that if the output format is ".ms2," then a single spectrum may have multiple "Z" lines, each indicating a charge state and accurate mass. In addition, Bullseye inserts an "I" line (for charge-dependent analysis) corresponding to each "Z" lin [...]
+  <li><code>bullseye.no-pid.<format></code> – a file containing the fragmentation spectra for which accurate masses were not inferred.</li>
+  <li><code>hardklor.mono.txt</code> – a tab-delimited text file containing one line for each isotope distribution, as described <a href="hardklor.html">here</a>.</li>
+  <li><code>bullseye.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>bullseye.log.txt</code> – a log file containing a copy of all messages that were printed to standard error.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Identifying PPIDs in MS1 spectra</h3>
+<ul>
+  <li class="nobullet"><code>--max-persist <float></code> – Ignore PPIDs that persist for longer than this length of time in the MS1 spectra. The unit of time is whatever unit is used in your data file (usually minutes). These PPIDs are considered contaminants. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--persist-tolerance <float></code> – Set the mass tolerance (+/-ppm) for finding PPIDs in consecutive MS1 scans. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--gap-tolerance <integer></code> – Allowed gap size when checking for PPIDs across consecutive MS1 scans. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--scan-tolerance <integer></code> – Total number of MS1 scans over which a PPID must be observed to be considered real. Gaps in persistence are allowed by setting --gap-tolerance. Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--bullseye-max-mass <float></code> – Only consider PPIDs below this maximum mass in daltons. Default = <code>8000</code>.</li>
+  <li class="nobullet"><code>--bullseye-min-mass <float></code> – Only consider PPIDs above this minimum mass in daltons. Default = <code>600</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Matching PPIDs to MS2 spectra</h3>
+<ul>
+  <li class="nobullet"><code>--exact-match T|F</code> – When true, require an exact match (as defined by --exact-tolerance) between the center of the precursor isolation window in the MS2 scan and the base isotopic peak of the PPID. If this option is set to false and no exact match is observed, then attempt to match using a wider m/z tolerance. This wider tolerance is calculated using the PPID's monoisotopic mass and charge (the higher the charge, the smaller the window). Default = [...]
+  <li class="nobullet"><code>--exact-tolerance <float></code> – Set the tolerance (+/-ppm) for --exact-match. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--retention-tolerance <float></code> – Set the tolerance (+/-units) around the retention time over which a PPID can be matches to the MS2 spectrum. The unit of time is whatever unit is used in your data file (usually minutes). Default = <code>0.5</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--spectrum-format |ms2|bms2|cms2|mgf</code> – The format to write the output spectra to. If empty, the spectra will be output in the same format as the MS2 input. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/cascade-search.html b/doc/user/cascade-search.html
new file mode 100644
index 0000000..718f198
--- /dev/null
+++ b/doc/user/cascade-search.html
@@ -0,0 +1,215 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>cascade-search</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>cascade-search</h1>
+<h2>Usage:</h2>
+<p><code>crux cascade-search [options] <tide spectra file>+ <database-series></code></p>
+<h2>Description:</h2>
+<p>Cascade-search is a general procedure for incorporating information about peptide groups into the database search and confidence estimation procedure. Peptides may be grouped according to, for example, their enzymatic properties (zero, one, or two enzymatic termini) or the presence of different types of numbers of variable modifications. The algorithm works on a series of databases, each corresponding to a different peptide group. The database is searched in series, and after each sea [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>tide spectra file+</code> – The name of one or more files from which to parse the fragmentation spectra, in any of the file formats supported by ProteoWizard. Alternatively, the argument may be one or more binary spectrum files produced by a previous run of crux tide-search using the store-spectra parameter.</li>
+  <li><code>database-series</code> – A comma-separated list of databases, each generated by tide-index. Cascade-search will search the given spectra against these databases in the given order.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>cascade-search.target.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited text file</a> containing the target PSMs accepted at a pre-defined fdr.</li>
+  <li><code>cascade-search.log.txt</code> – a log file containing a copy of all messages that were printed to stderr.</li>
+  <li><code>cascade-search.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>cascade-search options</h3>
+<ul>
+  <li class="nobullet"><code>--q-value-threshold <float></code> – The q-value threshold used by cascade search. Each spectrum identified in one search with q-value less than this threshold will be excluded from all subsequent searches. Default = <code>0.01</code>.</li>
+  <li class="nobullet"><code>--estimation-method mix-max|tdc|peptide-level</code> – Specify the method used to estimate q-values.  The mix-max procedure or target-decoy competition apply to PSMs. The peptide-level option eliminates any PSM for which there exists a better scoring PSM involving the same peptide, and then uses decoys to assign confidence estimates. Default = <code>tdc</code>.</li>
+  <li class="nobullet"><code>--score <string></code> – Specify the column (for tab-delimited input) or tag (for XML input) used as input to the q-value estimation procedure. If this parameter is unspecified, then the program searches for "xcorr score", "evalue" (comet), "exact p-value" score fields in this order in the input file.  Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--sidak T|F</code> – Adjust the score using the Sidak adjustment and reports them in a new column in the output file. Note that this adjustment only makes sense if the given scores are p-values, and that it requires the presence of the "distinct matches/spectrum" feature for each PSM. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--combine-charge-states T|F</code> – Specify this parameter to T in order to combine charge states with peptide sequencesin peptide-centric search. Works only if estimation-method = peptide-level. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--combine-modified-peptides T|F</code> – Specify this parameter to T in order to treat peptides carrying different or no modifications as being the same. Works only if estimation = peptide-level. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Precursor selection</h3>
+<ul>
+  <li class="nobullet"><code>--precursor-window <float></code> – Tolerance used for matching peptides to spectra. Peptides must be within +/- 'precursor-window' of the spectrum value. The precursor window units depend upon precursor-window-type. Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--auto-precursor-window false|warn|fail</code> – Automatically estimate optimal value for the precursor-window parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--precursor-window-type mass|mz|ppm</code> – Specify the units for the window that is used to select peptides around the precursor mass location (mass, mz, ppm). The magnitude of the window is defined by the precursor-window option, and candidate peptides must fall within this window. For the mass window-type, the spectrum precursor m+h value is converted to mass, and the window is defined as that mass +/- precursor-window. If the m+h value is not avail [...]
+  <li class="nobullet"><code>--max-precursor-charge <integer></code> – The maximum charge state of a spectra to consider in search. Default = <code>5</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search parameters</h3>
+<ul>
+  <li class="nobullet"><code>--spectrum-min-mz <float></code> – The lowest spectrum m/z to search in the ms2 file. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--spectrum-max-mz <float></code> – The highest spectrum m/z to search in the ms2 file. Default = <code>1e+09</code>.</li>
+  <li class="nobullet"><code>--min-peaks <integer></code> – The minimum number of peaks a spectrum must have for it to be searched. Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--spectrum-charge 1|2|3|all</code> – The spectrum charges to search. With 'all' every spectrum will be searched and spectra with multiple charge states will be searched once at each charge state. With 1, 2, or 3 only spectra with that charge state will be searched. Default = <code>all</code>.</li>
+  <li class="nobullet"><code>--scan-number <string></code> – A single scan number or a range of numbers to be searched. Range should be specified as 'first-last' which will include scans 'first' and 'last'. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--compute-sp T|F</code> – Compute the preliminary score Sp for all candidate peptides. Report this score in the output, along with the corresponding rank, the number of matched ions and the total number of ions. This option is recommended if results are to be analyzed by Percolator or Barista. If sqt-output is enabled, then compute-sp is automatically enabled and cannot be overridden. Note that the Sp computation requires re-processing each observed spe [...]
+  <li class="nobullet"><code>--remove-precursor-peak T|F</code> – If true, all peaks around the precursor m/z will be removed, within a range specified by the --remove-precursor-tolerance option. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--remove-precursor-tolerance <float></code> – This parameter specifies the tolerance (in Th) around each precursor m/z that is removed when the --remove-precursor-peak option is invoked. Default = <code>1.5</code>.</li>
+  <li class="nobullet"><code>--exact-p-value T|F</code> – Enable the calculation of exact p-values for the XCorr score as described in <a href="http://www.ncbi.nlm.nih.gov/pubmed/24895379">this article</a>. Calculation of p-values increases the running time but increases the number of identifications at a fixed confidence threshold. The p-values will be reported in a new column with header "exact p-value", and the "xcorr score" column will be replaced with a "refactored xcorr" colu [...]
+  <li class="nobullet"><code>--use-neutral-loss-peaks T|F</code> – Controls whether neutral loss ions are considered in the search. Two types of neutral losses are included and are applied only to singly charged b- and y-ions: loss of ammonia (NH3, 17.0086343 Da) and H2O (18.0091422). Each neutral loss peak has intensity 1/5 of the primary peak. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--use-flanking-peaks T|F</code> – Include flanking peaks around singly charged b and y theoretical ions. Each flanking peak occurs in the adjacent m/z bin and has half the intensity of the primary peak. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mz-bin-width <float></code> – Before calculation of the XCorr score, the m/z axes of the observed and theoretical spectra are discretized. This parameter specifies the size of each bin. The exact formula for computing the discretized m/z value is floor((x/mz-bin-width) + 1.0 - mz-bin-offset), where x is the observed m/z value. For low resolution ion trap ms/ms data 1.0005079 and for high resolution ms/ms 0.02 is recommended. Default = <code>1.00 [...]
+  <li class="nobullet"><code>--auto-mz-bin-width false|warn|fail</code> – Automatically estimate optimal value for the mz-bin-width parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mz-bin-offset <float></code> – In the discretization of the m/z axes of the observed and theoretical spectra, this parameter specifies the location of the left edge of the first bin, relative to mass = 0 (i.e., mz-bin-offset = 0.xx means the left edge of the first bin will be located at +0.xx Da). Default = <code>0.4</code>.</li>
+  <li class="nobullet"><code>--peptide-centric-search T|F</code> – Carries out a peptide-centric search. For each peptide the top-scoring spectra are reported, in contrast to the standard spectrum-centric search where the top-scoring peptides are reported. Note that in this case the "xcorr rank" column will contain the rank of the given spectrum with respect to the given candidate peptide, rather than vice versa (which is the default). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--isotope-error <string></code> – List of positive, non-zero integers. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--skip-preprocessing T|F</code> – Skip preprocessing steps on spectra. Default = F. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>CPU threads</h3>
+<ul>
+  <li class="nobullet"><code>--num-threads <integer></code> – 0=poll CPU to set num threads; else specify num threads directly. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>param-medic options</h3>
+<ul>
+  <li class="nobullet"><code>--pm-min-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>400</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-frag-mz <float></code> – Minimum fragment m/z value to use in measurement error estimation. Default = <code>150</code>.</li>
+  <li class="nobullet"><code>--pm-max-frag-mz <float></code> – Maximum fragment m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-scan-frag-peaks <integer></code> – Minimum fragment peaks an MS/MS scan must contain to be used in measurement error estimation. Default = <code>40</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-delta-ppm <float></code> – Maximum ppm distance between precursor m/z values to consider two scans potentially generated by the same peptide for measurement error estimation. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--pm-charge <integer></code> – Precursor charge state to consider MS/MS spectra from, in measurement error estimation. Ideally, this should be the most frequently occurring charge state in the given data. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--pm-top-n-frag-peaks <integer></code> – Number of most-intense fragment peaks to consider for measurement error estimation, per MS/MS spectrum. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--pm-pair-top-n-frag-peaks <integer></code> – Number of fragment peaks per spectrum pair to be used in fragment error estimation. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--pm-min-common-frag-peaks <integer></code> – Number of the most-intense peaks that two spectra must share in order to potentially be generated by the same peptide, for measurement error estimation. Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--pm-max-scan-separation <integer></code> – Maximum number of scans two spectra can be separated by in order to be considered potentially generated by the same peptide, for measurement error estimation. Default = <code>1000</code>.</li>
+  <li class="nobullet"><code>--pm-min-peak-pairs <integer></code> – Minimum number of peak pairs (for precursor or fragment) that must be successfully paired in order to attempt to estimate measurement error distribution. Default = <code>100</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--list-of-files T|F</code> – Specify that the search results are provided as lists of files, rather than as individual files. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--store-spectra <string></code> – Specify the name of the file where the binarized fragmentation spectra will be stored. Subsequent runs of crux tide-search will execute more quickly if provided with the spectra in binary format. The filename is specified relative to the current working directory, not the Crux output directory (as specified by --output-dir). This option is not valid if multiple input spectrum files are given. Default = <code><e [...]
+  <li class="nobullet"><code>--store-index <string></code> – When providing a FASTA file as the index, the generated binary index will be stored at the given path. This option has no effect if a binary index is provided as the index. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--concat T|F</code> – When set to T, target and decoy search results are reported in a single file, and only the top-scoring N matches (as specified via --top-match) are reported for each spectrum, irrespective of whether the matches involve target or decoy peptides. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--print-search-progress <integer></code> – Show search progress by printing every n spectra searched. Set to 0 to show no search progress. Default = <code>1000</code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+  <li class="nobullet"><code>--use-z-line T|F</code> – Specify whether, when parsing an MS2 spectrum file, Crux obtains the precursor mass information from the "S" line or the "Z" line.  Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--txt-output T|F</code> – Output a tab-delimited results file to the output directory. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--sqt-output T|F</code> – Outputs an SQT results file to the output directory. Note that if sqt-output is enabled, then compute-sp is automatically enabled and cannot be overridden. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pepxml-output T|F</code> – Output a pepXML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mzid-output T|F</code> – Output an mzIdentML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pin-output T|F</code> – Output a Percolator input (PIN) file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--file-column T|F</code> – Include the file column in tab-delimited output. Default = <code>true</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/cmake_install.cmake b/doc/user/cmake_install.cmake
new file mode 100644
index 0000000..f038400
--- /dev/null
+++ b/doc/user/cmake_install.cmake
@@ -0,0 +1,38 @@
+# Install script for directory: /data/TeamCity/buildAgent/work/779d99b0241b2175/doc/user
+
+# Set the install prefix
+IF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+  SET(CMAKE_INSTALL_PREFIX "/usr/local")
+ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+  IF(BUILD_TYPE)
+    STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+  ELSE(BUILD_TYPE)
+    SET(CMAKE_INSTALL_CONFIG_NAME "Release")
+  ENDIF(BUILD_TYPE)
+  MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+
+# Set the component getting installed.
+IF(NOT CMAKE_INSTALL_COMPONENT)
+  IF(COMPONENT)
+    MESSAGE(STATUS "Install component: \"${COMPONENT}\"")
+    SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+  ELSE(COMPONENT)
+    SET(CMAKE_INSTALL_COMPONENT)
+  ENDIF(COMPONENT)
+ENDIF(NOT CMAKE_INSTALL_COMPONENT)
+
+# Install shared libraries without execute permission?
+IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+  SET(CMAKE_INSTALL_SO_NO_EXE "0")
+ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+
+IF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified")
+  FILE(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/doc" TYPE DIRECTORY FILES "/data/TeamCity/buildAgent/work/779d99b0241b2175/doc/user/." REGEX "/CMakeLists\\.txt$" EXCLUDE REGEX "/download$" EXCLUDE)
+ENDIF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified")
+
diff --git a/doc/user/comet-options/activation_method.html b/doc/user/comet-options/activation_method.html
new file mode 100644
index 0000000..f21a03d
--- /dev/null
+++ b/doc/user/comet-options/activation_method.html
@@ -0,0 +1,23 @@
+<html><head><title>comet parameter: activation_method</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: activation_method</h2>
+
+         <ul>
+         <li>This parameter specifies which scan types are searched.
+         <li>If "ALL" is specified, no filtering based on the activation method
+         is applied.
+         <li>If any other allowed entry is chosen, only spectra with activation
+         method matching the specified entry are searched.
+         <li>This parameter is valid only for mzXML, mzML and mz5 input.
+         <li>Allowed values are: ALL, CID, ECD, ETD, PQD, HCD, IRMPD
+         <li>The default value is "ALL" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>activation_method = ALL</tt>
+         <br><tt>activation_method = CID</tt>
+         <br><tt>activation_method = ETD</tt>
+         <br><tt>activation_method = HCD</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_A_alanine.html b/doc/user/comet-options/add_A_alanine.html
new file mode 100644
index 0000000..392f658
--- /dev/null
+++ b/doc/user/comet-options/add_A_alanine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_A_alanine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_A_alanine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue A.
+         <li>The specified mass is added to the unmodified mass of A.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_A_alanine = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_B_user_amino_acid.html b/doc/user/comet-options/add_B_user_amino_acid.html
new file mode 100644
index 0000000..1a74ce3
--- /dev/null
+++ b/doc/user/comet-options/add_B_user_amino_acid.html
@@ -0,0 +1,19 @@
+<html><head><title>comet parameter: add_B_user_amino_acid</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_B_user_amino_acid</h2>
+
+         <ul>
+         <li>This parameter allows users to define their own custom residue. Just
+             encode the letter 'B' in the input FASTA file and specify its mass here.
+         <li>The letter 'B' has no default mass.  So the mass entered here will
+             be its residue mass.
+         <li>The default value is "0.0" if this parameter is missing.  If any peptide
+             contains the letter 'B' while this parameter value is set to 0.0, that
+             peptide will not be analyzed.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_B_user_amino_acid = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_C_cysteine.html b/doc/user/comet-options/add_C_cysteine.html
new file mode 100644
index 0000000..757e1be
--- /dev/null
+++ b/doc/user/comet-options/add_C_cysteine.html
@@ -0,0 +1,21 @@
+<html><head><title>comet parameter: add_C_cysteine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_C_cysteine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue C.
+         <li>The specified mass is added to the unmodified mass of C.
+         <li>The default value is "0.0" if this parameter is missing.
+         If Comet was compiled for
+         <a href="noble.gs.washington.edu/proj/crux/">Crux</a> compatibility,
+         the default value is "57.021464".
+         Note that in the example parameter file produced by Comet using the "-p"
+         command line option, this parameter entry has a value of 57.021464 for
+         cysteine carbamidomethylation.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_C_cysteine = 57.021464</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_Cterm_peptide.html b/doc/user/comet-options/add_Cterm_peptide.html
new file mode 100644
index 0000000..f796288
--- /dev/null
+++ b/doc/user/comet-options/add_Cterm_peptide.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_Cterm_peptide</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_Cterm_peptide</h2>
+
+         <ul>
+         <li>Specify a static modification to the C-terminus of all peptides.
+         <li>The specified mass is added to the unmodified C-terminal mass (mass of OH or 17.00274).
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_Cterm_peptide = 14.01</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_Cterm_protein.html b/doc/user/comet-options/add_Cterm_protein.html
new file mode 100644
index 0000000..1d617e0
--- /dev/null
+++ b/doc/user/comet-options/add_Cterm_protein.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_Cterm_protein</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_Cterm_protein</h2>
+
+         <ul>
+         <li>Specify a static modification to the C-terminal peptide of each protein entry.
+         <li>The specified mass is added to the unmodified C-terminal mass (mass of OH or 17.00274).
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_Cterm_protein = 14.01</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_D_aspartic_acid.html b/doc/user/comet-options/add_D_aspartic_acid.html
new file mode 100644
index 0000000..dc85968
--- /dev/null
+++ b/doc/user/comet-options/add_D_aspartic_acid.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_D_aspartic_acid</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_D_aspartic_acid</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue D.
+         <li>The specified mass is added to the unmodified mass of D.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_D_cysteine = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_E_glutamic_acid.html b/doc/user/comet-options/add_E_glutamic_acid.html
new file mode 100644
index 0000000..d95b244
--- /dev/null
+++ b/doc/user/comet-options/add_E_glutamic_acid.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_E_glutamic_acid</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_E_glutamic_acid</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue E.
+         <li>The specified mass is added to the unmodified mass of E.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_E_cysteine = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_F_phenylalanine.html b/doc/user/comet-options/add_F_phenylalanine.html
new file mode 100644
index 0000000..82952d4
--- /dev/null
+++ b/doc/user/comet-options/add_F_phenylalanine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_F_phenylalanine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_F_phenylalanine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue F.
+         <li>The specified mass is added to the unmodified mass of F.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_F_phenylalanine = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_G_glycine.html b/doc/user/comet-options/add_G_glycine.html
new file mode 100644
index 0000000..62d8a24
--- /dev/null
+++ b/doc/user/comet-options/add_G_glycine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_G_glycine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_G_glycine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue G.
+         <li>The specified mass is added to the unmodified mass of G.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_G_cysteine = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_H_histidine.html b/doc/user/comet-options/add_H_histidine.html
new file mode 100644
index 0000000..8984a28
--- /dev/null
+++ b/doc/user/comet-options/add_H_histidine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_H_histidine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_H_histidine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue H.
+         <li>The specified mass is added to the unmodified mass of H.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_H_histidine = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_I_isoleucine.html b/doc/user/comet-options/add_I_isoleucine.html
new file mode 100644
index 0000000..90d6de0
--- /dev/null
+++ b/doc/user/comet-options/add_I_isoleucine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_I_isoleucine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_I_isoleucine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue I.
+         <li>The specified mass is added to the unmodified mass of I.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_I_isoleucine = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_J_user_amino_acid.html b/doc/user/comet-options/add_J_user_amino_acid.html
new file mode 100644
index 0000000..3806f3a
--- /dev/null
+++ b/doc/user/comet-options/add_J_user_amino_acid.html
@@ -0,0 +1,19 @@
+<html><head><title>comet parameter: add_J_user_amino_acid</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_J_user_amino_acid</h2>
+
+         <ul>
+         <li>This parameter allows users to define their own custom residue. Just
+             encode the letter 'J' in the input FASTA file and specify its mass here.
+         <li>The letter 'J' has no default mass.  So the mass entered here will
+             be its residue mass.
+         <li>The default value is "0.0" if this parameter is missing.  If any peptide
+             contains the letter 'J' while this parameter value is set to 0.0, that
+             peptide will not be analyzed.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_J_user_amino_acid = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_K_lysine.html b/doc/user/comet-options/add_K_lysine.html
new file mode 100644
index 0000000..a52206d
--- /dev/null
+++ b/doc/user/comet-options/add_K_lysine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_K_lysine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_K_lysine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue K.
+         <li>The specified mass is added to the unmodified mass of K.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_K_lysine = 14.01</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_L_leucine.html b/doc/user/comet-options/add_L_leucine.html
new file mode 100644
index 0000000..58d84bf
--- /dev/null
+++ b/doc/user/comet-options/add_L_leucine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_L_leucine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_L_leucine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue L.
+         <li>The specified mass is added to the unmodified mass of L.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_L_leucine = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_M_methionine.html b/doc/user/comet-options/add_M_methionine.html
new file mode 100644
index 0000000..2abd014
--- /dev/null
+++ b/doc/user/comet-options/add_M_methionine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_M_methionine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_M_methionine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue M.
+         <li>The specified mass is added to the unmodified mass of M.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_M_methionine = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_N_asparagine.html b/doc/user/comet-options/add_N_asparagine.html
new file mode 100644
index 0000000..a296025
--- /dev/null
+++ b/doc/user/comet-options/add_N_asparagine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_N_asparagine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_N_asparagine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue N.
+         <li>The specified mass is added to the unmodified mass of N.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_N_cysteine = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_Nterm_peptide.html b/doc/user/comet-options/add_Nterm_peptide.html
new file mode 100644
index 0000000..617217d
--- /dev/null
+++ b/doc/user/comet-options/add_Nterm_peptide.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_Nterm_peptide</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_Nterm_peptide</h2>
+
+         <ul>
+         <li>Specify a static modification to the N-terminus of all peptides.
+         <li>The specified mass is added to the unmodified N-terminal mass (mass of H or 1.007825).
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_Nterm_peptide = 14.01</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_Nterm_protein.html b/doc/user/comet-options/add_Nterm_protein.html
new file mode 100644
index 0000000..3f41d87
--- /dev/null
+++ b/doc/user/comet-options/add_Nterm_protein.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_Nterm_protein</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_Nterm_protein</h2>
+
+         <ul>
+         <li>Specify a static modification to the N-terminal peptide of each protein entry.
+         <li>The specified mass is added to the unmodified N-terminal mass (mass of H or 1.007825).
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_Nterm_protein = 14.01</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_O_ornithine.html b/doc/user/comet-options/add_O_ornithine.html
new file mode 100644
index 0000000..32b3b38
--- /dev/null
+++ b/doc/user/comet-options/add_O_ornithine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_O_ornithine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_O_ornithine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue O.
+         <li>The specified mass is added to the unmodified mass of O.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_O_ornithine = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_P_proline.html b/doc/user/comet-options/add_P_proline.html
new file mode 100644
index 0000000..c27daf0
--- /dev/null
+++ b/doc/user/comet-options/add_P_proline.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_P_proline</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_P_proline</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue P.
+         <li>The specified mass is added to the unmodified mass of P.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_P_proline = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_Q_glutamine.html b/doc/user/comet-options/add_Q_glutamine.html
new file mode 100644
index 0000000..37227f2
--- /dev/null
+++ b/doc/user/comet-options/add_Q_glutamine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_Q_glutamine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_Q_glutamine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue Q.
+         <li>The specified mass is added to the unmodified mass of Q.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_Q_glutamine = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_R_arginine.html b/doc/user/comet-options/add_R_arginine.html
new file mode 100644
index 0000000..d668719
--- /dev/null
+++ b/doc/user/comet-options/add_R_arginine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_R_arginine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_R_arginine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue R.
+         <li>The specified mass is added to the unmodified mass of R.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_R_arginine = 28.03</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_S_serine.html b/doc/user/comet-options/add_S_serine.html
new file mode 100644
index 0000000..6f7b93e
--- /dev/null
+++ b/doc/user/comet-options/add_S_serine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_S_serine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_S_serine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue S.
+         <li>The specified mass is added to the unmodified mass of s.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_S_serine = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_T_threonine.html b/doc/user/comet-options/add_T_threonine.html
new file mode 100644
index 0000000..68aef74
--- /dev/null
+++ b/doc/user/comet-options/add_T_threonine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_T_threonine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_T_threonine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue T.
+         <li>The specified mass is added to the unmodified mass of T.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_T_threonine = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_U_user_amino_acid.html b/doc/user/comet-options/add_U_user_amino_acid.html
new file mode 100644
index 0000000..ab71e4a
--- /dev/null
+++ b/doc/user/comet-options/add_U_user_amino_acid.html
@@ -0,0 +1,19 @@
+<html><head><title>comet parameter: add_U_user_amino_acid</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_U_user_amino_acid</h2>
+
+         <ul>
+         <li>This parameter allows users to define their own custom residue. Just
+             encode the letter 'U' in the input FASTA file and specify its mass here.
+         <li>The letter 'U' has no default mass.  So the mass entered here will
+             be its residue mass.
+         <li>The default value is "0.0" if this parameter is missing.  If any peptide
+             contains the letter 'U' while this parameter value is set to 0.0, that
+             peptide will not be analyzed.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_U_user_amino_acid = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_V_valine.html b/doc/user/comet-options/add_V_valine.html
new file mode 100644
index 0000000..5749b4c
--- /dev/null
+++ b/doc/user/comet-options/add_V_valine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_V_valine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_V_valine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue V.
+         <li>The specified mass is added to the unmodified mass of V.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_V_valine = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_W_tryptophan.html b/doc/user/comet-options/add_W_tryptophan.html
new file mode 100644
index 0000000..ee0558b
--- /dev/null
+++ b/doc/user/comet-options/add_W_tryptophan.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_W_tryptophan</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_W_tryptophan</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue W.
+         <li>The specified mass is added to the unmodified mass of W.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_W_tryptophan = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_X_user_amino_acid.html b/doc/user/comet-options/add_X_user_amino_acid.html
new file mode 100644
index 0000000..6309a5a
--- /dev/null
+++ b/doc/user/comet-options/add_X_user_amino_acid.html
@@ -0,0 +1,19 @@
+<html><head><title>comet parameter: add_X_user_amino_acid</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_X_user_amino_acid</h2>
+
+         <ul>
+         <li>This parameter allows users to define their own custom residue. Just
+             encode the letter 'X' in the input FASTA file and specify its mass here.
+         <li>The letter 'X' has no default mass.  So the mass entered here will
+             be its residue mass.
+         <li>The default value is "0.0" if this parameter is missing.  If any peptide
+             contains the letter 'X' while this parameter value is set to 0.0, that
+             peptide will not be analyzed.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_X_user_amino_acid = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_Y_tyrosine.html b/doc/user/comet-options/add_Y_tyrosine.html
new file mode 100644
index 0000000..d1eb52d
--- /dev/null
+++ b/doc/user/comet-options/add_Y_tyrosine.html
@@ -0,0 +1,15 @@
+<html><head><title>comet parameter: add_Y_tyrosine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_Y_tyrosine</h2>
+
+         <ul>
+         <li>Specify a static modification to the residue Y.
+         <li>The specified mass is added to the unmodified mass of Y.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_Y_tyrosine = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/add_Z_user_amino_acid.html b/doc/user/comet-options/add_Z_user_amino_acid.html
new file mode 100644
index 0000000..dc0d808
--- /dev/null
+++ b/doc/user/comet-options/add_Z_user_amino_acid.html
@@ -0,0 +1,19 @@
+<html><head><title>comet parameter: add_Z_user_amino_acid</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: add_Z_user_amino_acid</h2>
+
+         <ul>
+         <li>This parameter allows users to define their own custom residue. Just
+             encode the letter 'Z' in the input FASTA file and specify its mass here.
+         <li>The letter 'Z' has no default mass.  So the mass entered here will
+             be its residue mass.
+         <li>The default value is "0.0" if this parameter is missing.  If any peptide
+             contains the letter 'Z' while this parameter value is set to 0.0, that
+             peptide will not be analyzed.
+         </ul>
+
+         <p>Example:
+         <br><tt>add_Z_user_amino_acid = 100.8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/allowed_missed_cleavage.html b/doc/user/comet-options/allowed_missed_cleavage.html
new file mode 100644
index 0000000..7a03d24
--- /dev/null
+++ b/doc/user/comet-options/allowed_missed_cleavage.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: allowed_missed_cleavage</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: allowed_missed_cleavage</h2>
+
+         <ul>
+         <li>Number of allowed missed enzyme cleavages in a peptide.
+         <li>Parameter is not applied of the no-enzyme option is specified
+         in the <a href="search_enzyme_number.php">search_enzyme_number</a>
+         parameter.
+         <li>The default value is "2" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>allowed_missed_cleavage = 0</tt>     <i>for no missed cleavages</i>
+         <br><tt>allowed_missed_cleavage = 2</tt>     <i>allow two missed cleavages</i>
+
+</body></html>
diff --git a/doc/user/comet-options/clear_mz_range.html b/doc/user/comet-options/clear_mz_range.html
new file mode 100644
index 0000000..6845854
--- /dev/null
+++ b/doc/user/comet-options/clear_mz_range.html
@@ -0,0 +1,24 @@
+<html><head><title>comet parameter: clear_mz_range</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: clear_mz_range</h2>
+
+         <ul>
+         <li>This parameter is intended for iTRAQ/TMT type data where one might
+         want to remove the reporter ion signals in the MS/MS spectra prior to searching.
+         <li>Defines the m/z range to clear out in each MS/MS spectra
+         <li>This parameter has two decimal values.
+         <li>The first value is the lower mass cutoff and the second value is
+         the high mass cutoff.
+         <li>Valid values are two decimal numbers where the first number must
+         be less or equal to the second number.
+         <li>All peaks between the two decimal values are cleared out.
+         <li>The default value is "0.0 0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>clear_mz_range = 0.0 0.0</tt>     <i>parameter is ignored</i>
+         <br><tt>clear_mz_range = 112.5 121.5</tt>     <i>ignore all peaks between 112.5 and 121.5 m/z for iTRAQ 8-plex</i>
+         <br><tt>clear_mz_range = 125.5 131.5</tt>     <i>ignore all peaks between 125.5 and 131.5 m/z for TMT</i>
+
+</body></html>
diff --git a/doc/user/comet-options/clip_nterm_methionine.html b/doc/user/comet-options/clip_nterm_methionine.html
new file mode 100644
index 0000000..82826fb
--- /dev/null
+++ b/doc/user/comet-options/clip_nterm_methionine.html
@@ -0,0 +1,22 @@
+<html><head><title>comet parameter: clip_nterm_methionine</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: clip_nterm_methionine</h2>
+
+         <ul>
+         <li>This parameter controls whether Comet will automatically remove
+         the N-terminal methionine from a sequence entry.
+         <li>If set to 0, the sequence is analyzed as-is.
+         <li>If set to 1, any sequence with an N-terminal methionine will be
+         analyzed as-is as well as with the methionine removed.  This means
+         that any N-terminal modifications will also apply (if appropriate)
+         to the peptide that is generated after the removal of the methionine.
+         <li>Valid values are 0 and 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>clip_nterm_methionine = 0</tt>
+         <br><tt>clip_nterm_methionine = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/combined.html b/doc/user/comet-options/combined.html
new file mode 100644
index 0000000..f21a03d
--- /dev/null
+++ b/doc/user/comet-options/combined.html
@@ -0,0 +1,23 @@
+<html><head><title>comet parameter: activation_method</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: activation_method</h2>
+
+         <ul>
+         <li>This parameter specifies which scan types are searched.
+         <li>If "ALL" is specified, no filtering based on the activation method
+         is applied.
+         <li>If any other allowed entry is chosen, only spectra with activation
+         method matching the specified entry are searched.
+         <li>This parameter is valid only for mzXML, mzML and mz5 input.
+         <li>Allowed values are: ALL, CID, ECD, ETD, PQD, HCD, IRMPD
+         <li>The default value is "ALL" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>activation_method = ALL</tt>
+         <br><tt>activation_method = CID</tt>
+         <br><tt>activation_method = ETD</tt>
+         <br><tt>activation_method = HCD</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/comet.params b/doc/user/comet-options/comet.params
new file mode 100644
index 0000000..b7105d5
--- /dev/null
+++ b/doc/user/comet-options/comet.params
@@ -0,0 +1,160 @@
+# comet_version 2013.02 rev. 0
+# Comet MS/MS search engine parameters file.
+# Everything following the '#' symbol is treated as a comment.
+
+database_name = /some/path/db.fasta
+decoy_search = 0                       # 0=no (default), 1=concatenated search, 2=separate search
+
+num_threads = 0                        # 0=poll CPU to set num threads; else specify num threads directly (max 32)
+
+#
+# masses
+#
+peptide_mass_tolerance = 3.00
+peptide_mass_units = 0                 # 0=amu, 1=mmu, 2=ppm
+mass_type_parent = 1                   # 0=average masses, 1=monoisotopic masses
+mass_type_fragment = 1                 # 0=average masses, 1=monoisotopic masses
+precursor_tolerance_type = 0           # 0=MH+ (default), 1=precursor m/z
+isotope_error = 0                      # 0=off, 1=on -1/0/1/2/3 (standard C13 error), 2= -8/-4/0/4/8 (for +4/+8 labeling)
+
+#
+# search enzyme
+#
+search_enzyme_number = 1               # choose from list at end of this params file
+num_enzyme_termini = 2                 # valid values are 1 (semi-digested), 2 (fully digested, default), 8 N-term, 9 C-term
+allowed_missed_cleavage = 2            # maximum value is 5; for enzyme search
+
+#
+# Up to 6 variable modifications are supported
+# format:  <mass> <residues> <0=variable/1=binary> <max mods per a peptide>
+#     e.g. 79.966331 STY 0 3
+#
+variable_mod1 = 15.9949 M 0 3
+variable_mod2 = 0.0 X 0 3
+variable_mod3 = 0.0 X 0 3
+variable_mod4 = 0.0 X 0 3
+variable_mod5 = 0.0 X 0 3
+variable_mod6 = 0.0 X 0 3
+max_variable_mods_in_peptide = 5
+
+#
+# fragment ions
+#
+# ion trap ms/ms:  1.0005 tolerance, 0.4 offset (mono masses), theoretical_fragment_ions = 1
+# high res ms/ms:    0.02 tolerance, 0.0 offset (mono masses), theoretical_fragment_ions = 0
+#
+fragment_bin_tol = 1.0005              # binning to use on fragment ions
+fragment_bin_offset = 0.4              # offset position to start the binning (0.0 to 1.0)
+theoretical_fragment_ions = 1          # 0=default peak shape, 1=M peak only
+use_A_ions = 0
+use_B_ions = 1
+use_C_ions = 0
+use_X_ions = 0
+use_Y_ions = 1
+use_Z_ions = 0
+use_NL_ions = 1                        # 0=no, 1=yes to consider NH3/H2O neutral loss peaks
+use_sparse_matrix = 0
+
+#
+# output
+#
+output_sqtstream = 0                   # 0=no, 1=yes  write sqt to standard output
+output_sqtfile = 0                     # 0=no, 1=yes  write sqt file
+output_txtfile = 0                     # 0=no, 1=yes  write tab-delimited txt file
+output_pepxmlfile = 1                  # 0=no, 1=yes  write pep.xml file
+output_pinxmlfile = 0                  # 0=no, 1=yes  write pin.xml file
+output_outfiles = 0                    # 0=no, 1=yes  write .out files
+print_expect_score = 1                 # 0=no, 1=yes to replace Sp with expect in out & sqt
+num_output_lines = 5                   # num peptide results to show
+show_fragment_ions = 0                 # 0=no, 1=yes for out files only
+
+sample_enzyme_number = 1               # Sample enzyme which is possibly different than the one applied to the search.
+                                       # Used to calculate NTT & NMC in pepXML output (default=1 for trypsin).
+
+#
+# mzXML parameters
+#
+scan_range = 0 0                       # start and scan scan range to search; 0 as 1st entry ignores parameter
+precursor_charge = 0 0                 # precursor charge range to analyze; does not override mzXML charge; 0 as 1st entry ignores parameter
+ms_level = 2                           # MS level to analyze, valid are levels 2 (default) or 3
+activation_method = ALL                # activation method; used if activation method set; allowed ALL, CID, ECD, ETD, PQD, HCD, IRMPD
+
+#
+# misc parameters
+#
+digest_mass_range = 600.0 5000.0       # MH+ peptide mass range to analyze
+num_results = 50                       # number of search hits to store internally
+skip_researching = 1                   # for '.out' file output only, 0=search everything again (default), 1=don't search if .out exists
+max_fragment_charge = 3                # set maximum fragment charge state to analyze (allowed max 5)
+max_precursor_charge = 6               # set maximum precursor charge state to analyze (allowed max 9)
+nucleotide_reading_frame = 0           # 0=proteinDB, 1-6, 7=forward three, 8=reverse three, 9=all six
+clip_nterm_methionine = 0              # 0=leave sequences as-is; 1=also consider sequence w/o N-term methionine
+spectrum_batch_size = 0                # max. # of spectra to search at a time; 0 to search the entire scan range in one loop
+decoy_prefix = DECOY_                  # decoy entries are denoted by this string which is pre-pended to each protein accession
+
+#
+# spectral processing
+#
+minimum_peaks = 10                     # minimum num. of peaks in spectrum to search (default 10)
+minimum_intensity = 0                  # minimum intensity value to read in
+remove_precursor_peak = 0              # 0=no, 1=yes, 2=all charge reduced precursor peaks (for ETD)
+remove_precursor_tolerance = 1.5       # +- Da tolerance for precursor removal
+clear_mz_range = 0.0 0.0               # for iTRAQ/TMT type data; will clear out all peaks in the specified m/z range
+
+#
+# additional modifications
+#
+
+variable_C_terminus = 0.0
+variable_N_terminus = 0.0
+variable_C_terminus_distance = -1      # -1=all peptides, 0=protein terminus, 1-N = maximum offset from C-terminus
+variable_N_terminus_distance = -1      # -1=all peptides, 0=protein terminus, 1-N = maximum offset from N-terminus
+
+add_Cterm_peptide = 0.0
+add_Nterm_peptide = 0.0
+add_Cterm_protein = 0.0
+add_Nterm_protein = 0.0
+
+add_G_glycine = 0.0000                 # added to G - avg.  57.0513, mono.  57.02146
+add_A_alanine = 0.0000                 # added to A - avg.  71.0779, mono.  71.03711
+add_S_serine = 0.0000                  # added to S - avg.  87.0773, mono.  87.03203
+add_P_proline = 0.0000                 # added to P - avg.  97.1152, mono.  97.05276
+add_V_valine = 0.0000                  # added to V - avg.  99.1311, mono.  99.06841
+add_T_threonine = 0.0000               # added to T - avg. 101.1038, mono. 101.04768
+add_C_cysteine = 57.021464             # added to C - avg. 103.1429, mono. 103.00918
+add_L_leucine = 0.0000                 # added to L - avg. 113.1576, mono. 113.08406
+add_I_isoleucine = 0.0000              # added to I - avg. 113.1576, mono. 113.08406
+add_N_asparagine = 0.0000              # added to N - avg. 114.1026, mono. 114.04293
+add_D_aspartic_acid = 0.0000           # added to D - avg. 115.0874, mono. 115.02694
+add_Q_glutamine = 0.0000               # added to Q - avg. 128.1292, mono. 128.05858
+add_K_lysine = 0.0000                  # added to K - avg. 128.1723, mono. 128.09496
+add_E_glutamic_acid = 0.0000           # added to E - avg. 129.1140, mono. 129.04259
+add_M_methionine = 0.0000              # added to M - avg. 131.1961, mono. 131.04048
+add_O_ornithine = 0.0000               # added to O - avg. 132.1610, mono  132.08988
+add_H_histidine = 0.0000               # added to H - avg. 137.1393, mono. 137.05891
+add_F_phenylalanine = 0.0000           # added to F - avg. 147.1739, mono. 147.06841
+add_R_arginine = 0.0000                # added to R - avg. 156.1857, mono. 156.10111
+add_Y_tyrosine = 0.0000                # added to Y - avg. 163.0633, mono. 163.06333
+add_W_tryptophan = 0.0000              # added to W - avg. 186.0793, mono. 186.07931
+add_B_user_amino_acid = 0.0000         # added to B - avg.   0.0000, mono.   0.00000
+add_J_user_amino_acid = 0.0000         # added to J - avg.   0.0000, mono.   0.00000
+add_U_user_amino_acid = 0.0000         # added to U - avg.   0.0000, mono.   0.00000
+add_X_user_amino_acid = 0.0000         # added to X - avg.   0.0000, mono.   0.00000
+add_Z_user_amino_acid = 0.0000         # added to Z - avg.   0.0000, mono.   0.00000
+
+#
+# COMET_ENZYME_INFO _must_ be at the end of this parameters file
+#
+[COMET_ENZYME_INFO]
+0.  No_enzyme              0      -           -
+1.  Trypsin                1      KR          P
+2.  Trypsin/P              1      KR          -
+3.  Lys_C                  1      K           P
+4.  Lys_N                  0      K           -
+5.  Arg_C                  1      R           P
+6.  Asp_N                  0      D           -
+7.  CNBr                   1      M           -
+8.  Glu_C                  1      DE          P
+9.  PepsinA                1      FL          P
+10. Chymotrypsin           1      FWYL        P
+
diff --git a/doc/user/comet-options/content.html b/doc/user/comet-options/content.html
new file mode 100644
index 0000000..62b274f
--- /dev/null
+++ b/doc/user/comet-options/content.html
@@ -0,0 +1 @@
+</body></html>
diff --git a/doc/user/comet-options/convertCometPHPs.py b/doc/user/comet-options/convertCometPHPs.py
new file mode 100644
index 0000000..bc19af5
--- /dev/null
+++ b/doc/user/comet-options/convertCometPHPs.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+# AUTHOR: William Stafford Noble
+# CREATE DATE: May Day, 2013
+import sys
+
+USAGE = """USAGE: convertCometPHP.py <php file>
+
+  This is a goofy little helper script that takes as input one of the
+  parameter PHP files distributed with Jimmy Eng's Comet search
+  engine, strips off some of the unnecessary text, adds HTML headers
+  and prints the result to standard output.  The idea is to allow
+  automatic incorporation of any changes Jimmy makes to his
+  documentation into Crux.  This is brittle, because it's based on
+  hand-designed parsing code.  A better solution would be for Jimmy to
+  store his parameter docs in, say, XML, and then use an existing
+  parser.
+
+"""
+
+# Parse the command line.
+if (len(sys.argv) != 2):
+  sys.stderr.write(USAGE)
+  exit(1)
+phpFileName = sys.argv[1]
+
+phpFile = open(phpFileName, "r")
+
+# Find the start of the interesting section.
+for line in phpFile:
+  if ("<h2>" in line):
+
+    # Get the name of the parameter.
+    words = line.rstrip().split()
+    if ((len(words) != 3) or 
+        (words[0] != "<h2>Comet") or 
+        (words[2][-5:] != "</h2>")):
+      sys.stderr.write("Can't parse %s." % line)
+      sys.exit(1)
+    parameter = words[2][:-5]
+
+    # Print the HTML header.
+    sys.stdout.write("<html><head><title>comet parameter: %s</title>\n" % parameter)
+    sys.stdout.write("<link href=\"../crux.css\" rel=\"styleSheet\" type=\"text/css\">\n")
+    sys.stdout.write("</title><body>\n")
+    sys.stdout.write("<h2>Comet parameter: %s</h2>\n" % parameter)
+    break
+
+# Print the body of the file.
+for line in phpFile:
+  if "</div" in line:
+    break
+  sys.stdout.write(line)
+phpFile.close()
+
+sys.stdout.write("</body></html>\n")
diff --git a/doc/user/comet-options/database_name.html b/doc/user/comet-options/database_name.html
new file mode 100644
index 0000000..3517f6f
--- /dev/null
+++ b/doc/user/comet-options/database_name.html
@@ -0,0 +1,21 @@
+<html><head><title>comet parameter: database_name</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: database_name</h2>
+
+         <ul>
+         <li>A full or relative path to the sequence database, in FASTA format, to search. Example databases
+         include RefSeq or UniProt.
+         <li>Database can contain amino acid sequences or nucleic acid sequences.  If sequences are amino acid
+         sequences, set the parameter "nucleotide_reading_frame = 0".  If the sequences are nucleic acid
+         sequences, you must instruct Comet to translate these to amino acid sequences.  Do this by setting
+         "nucleotide_reading_frame" to a value between 1 and 9.
+         <li>There is no default value if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>database_name = /usr/local/db/yeast.fasta</tt>
+         <br><tt>database_name = c:\local\db\yeast.fasta</tt>
+         <br><tt>database_name = yeast.fasta</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/decoy_prefix.html b/doc/user/comet-options/decoy_prefix.html
new file mode 100644
index 0000000..0780628
--- /dev/null
+++ b/doc/user/comet-options/decoy_prefix.html
@@ -0,0 +1,22 @@
+<html><head><title>comet parameter: decoy_prefix</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: decoy_prefix</h2>
+
+         <ul>
+         <li>This parameter specifies the prefix string that is pre-pended to
+         the protein identifier and reported for decoy hits.
+         <li>This parameter is only valid when a <a href="decoy_search.php">decoy_search</a>
+         is performed.
+         <li>For example, if the prefix parameter is set to "decoy_prefix = reverse_",
+         a match to a decoy peptide from protein "ALBU_HUMAN" would return
+         "reverse_ALBU_HUMAN" as the protein identifier.
+         <li>The default value is "DECOY_" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>decoy_prefix = DECOY_</tt>
+         <br><tt>decoy_prefix = rev_</tt>
+         <br><tt>decoy_prefix = --any_string_you_want_without_spaces--</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/decoy_search.html b/doc/user/comet-options/decoy_search.html
new file mode 100644
index 0000000..ebf7962
--- /dev/null
+++ b/doc/user/comet-options/decoy_search.html
@@ -0,0 +1,29 @@
+<html><head><title>comet parameter: decoy_search</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: decoy_search</h2>
+
+         <ul>
+         <li>This parameter controls whether or not an internal decoy search is performed.
+         <li>Comet generates decoys by reversing each target peptide sequence, keeping the
+             N-terminal or C-terminal amino acid in place (depending on the "sense" value of the
+             digestion enzyme specified by <a href="search_enzyme_number.php">search_enzyme_number</a>).
+             For example, peptide DIGSESTK becomes decoy peptide TSESGIDK for a tryptic search
+             and peptide DVINHKGGA becomes DAGGKHNIV for an Asp-N search.
+         <li>Valid parameter values are 0, 1, or 2:
+            <ul>
+            <li>0 = no decoy search (default)
+            <li>1 = concatenated decoy search.  Target and decoy entries will be scored against
+            each other and a single result is performed for each spectrum query.
+            <li>2 = separate decoy search.  Target and decoy entries will be scored separately
+            and separate target and decoy search results will be reported.
+            </ul>
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>decoy_search = 0</tt>
+         <br><tt>decoy_search = 1</tt>
+         <br><tt>decoy_search = 2</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/digest_mass_range.html b/doc/user/comet-options/digest_mass_range.html
new file mode 100644
index 0000000..f225dcf
--- /dev/null
+++ b/doc/user/comet-options/digest_mass_range.html
@@ -0,0 +1,23 @@
+<html><head><title>comet parameter: digest_mass_range</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: digest_mass_range</h2>
+
+         <ul>
+         <li>Defines the mass range of peptides to search (based on MH+ or the singly
+         protonated mass).
+         <li>This parameter has two decimal values.
+         <li>The first value is the lower mass cutoff and the second value is
+         the high mass cutoff.
+         <li>Only spectra with experimental MH+ masses in within the defined
+         mass ranges are searched.
+         <li>Valid values are two decimal numbers where the first number must
+         be less or equal to the second number.
+         <li>The default value is "0.0 10000.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>digest_mass_range = 600.0 5000.0</tt>     <i>search only 600.0 to 5000.0 mass range</i>
+         <br><tt>digest_mass_range = 0.0 6500.0</tt>     <i>search all spectra with peptide masses between 0.0 and 6000.0</i>
+
+</body></html>
diff --git a/doc/user/comet-options/footer.html b/doc/user/comet-options/footer.html
new file mode 100644
index 0000000..62b274f
--- /dev/null
+++ b/doc/user/comet-options/footer.html
@@ -0,0 +1 @@
+</body></html>
diff --git a/doc/user/comet-options/fragment_bin_offset.html b/doc/user/comet-options/fragment_bin_offset.html
new file mode 100644
index 0000000..052ca15
--- /dev/null
+++ b/doc/user/comet-options/fragment_bin_offset.html
@@ -0,0 +1,31 @@
+<html><head><title>comet parameter: fragment_bin_offset</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: fragment_bin_offset</h2>
+
+         <ul>
+         <li>This parameter controls how each fragment bin of size <a href="fragment_bin_tol.php">fragment_bin_tol</a>
+         is defined in terms of where each bin starts.
+         <li>For example, assume a <a href="fragment_bin_tol.php">fragment_bin_tol</a> of 1.0.  Most intuitively,
+         the fragment bins would be 0.0 to 1.0, 1.0 to 2.0, 2.0 to 3.0, etc.
+         This set of bins corresponds to a fragment_bin_offset of 0.0.  However,
+         consider if we set fragment_bin_offset to 0.5; this would cause the
+         bins to be 0.5 to 1.5, 1.5 to 2.5, 2.5 to 3.5, etc.
+         <li>So this fragment_bin_offset gives one a mechanism to define
+         where each bin starts and is centered.
+         <li>For ion trap data with a <a href="fragment_bin_tol.php">fragment_bin_tol</a> of 1.0005,
+         it is recommended to set fragment_bin_offset to 0.4.
+         <li>For high-res MS/MS data, one might use a <a href="fragment_bin_tol.php">fragment_bin_tol</a> of 0.02
+         and a corresponding fragment_bin_offset of 0.0.
+         <li>Allowed values are between 0.0 and 1.0.  The actual offset value is
+         scaled by the <a href="fragment_bin_tol.php">fragment_bin_tol</a> value.
+         <li>I know this is esoteric and any normal user should not give this
+         parameter any thought beyond using the recommended settings.
+         <li>The default value is "0.4" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>fragment_bin_offset = 0.4</tt>
+         <br><tt>fragment_bin_offset = 0.0</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/fragment_bin_tol.html b/doc/user/comet-options/fragment_bin_tol.html
new file mode 100644
index 0000000..4ab7e38
--- /dev/null
+++ b/doc/user/comet-options/fragment_bin_tol.html
@@ -0,0 +1,30 @@
+<html><head><title>comet parameter: fragment_bin_tol</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: fragment_bin_tol</h2>
+
+         <ul>
+         <li>This parameter controls the bin size associated with fragment ions.
+         <li>The bin size defines the mass width associated with a single MS/MS peak
+         as it is stored internally in an array element.
+         <li>Although it's not explicitly a fragment ion tolerance, it's probably
+         easiest to think of it as such.
+         <li>Note, there is a direct correlation between the value selected for
+         the fragment_bin_tol and the memory used in a search.  The lower the
+         fragment_bin_tol setting, the more memory a search will use.  A test of
+         4,515 query spectra used ~700MB RAM with a 0.4 fragment_bin_tol value,
+         ~1.5GB RAM with a 0.10 value, and ~9GB RAM with a 0.01 value.  For small
+         fragment_bin_tol values where computer memory becomes an issue, either
+         set <a href="use_sparse_matrix.php">use_sparse_matrix</a> to true and/or
+         make use of the <a href="spectrum_batch_size.php">spectrum_batch_size</a>
+         parameter
+         <li>The minimum allowed value is 0.01.
+         <li>The default value is "1.0005" if the parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>fragment_bin_tol = 1.0005</tt>
+         <br><tt>fragment_bin_tol = 0.4</tt>
+         <br><tt>fragment_bin_tol = 0.02</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/head.html b/doc/user/comet-options/head.html
new file mode 100644
index 0000000..62b274f
--- /dev/null
+++ b/doc/user/comet-options/head.html
@@ -0,0 +1 @@
+</body></html>
diff --git a/doc/user/comet-options/index.html b/doc/user/comet-options/index.html
new file mode 100644
index 0000000..62b274f
--- /dev/null
+++ b/doc/user/comet-options/index.html
@@ -0,0 +1 @@
+</body></html>
diff --git a/doc/user/comet-options/isotope_error.html b/doc/user/comet-options/isotope_error.html
new file mode 100644
index 0000000..4409115
--- /dev/null
+++ b/doc/user/comet-options/isotope_error.html
@@ -0,0 +1,28 @@
+<html><head><title>comet parameter: isotope_error</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: isotope_error</h2>
+
+         <ul>
+         <li>This parameter controls whether the <a href="peptide_mass_tolerance.php">peptide_mass_tolerance</a>
+         takes into account possible isotope errors in the precursor mass measurement.
+         <li>It is possible that an accurately read precursor mass is not measured on the monoisotopic
+         peak of a precursor isotopic pattern. In these cases, the precursor mass is measured on the
+         first isotope peak (one C13 atom) or possibly even the second or third isotope peak. To address
+         this problem, this "isotope_error" parameter allows you to perform an accurate mass search
+         (say 10 ppm) even if the precursor mass measurement is off by one or more C13 offsets.
+         <li>Valid values are 0, 1, and 2:
+            <ul>
+            <li>0 performs no isotope error searches
+            <li>1 searches -1, 0, +1, +2, and +3 isotope offsets
+            <li>2 searches -8, -4, 0, +4, +8 isotope offsets (for +4/+8 stable isotope labeling)
+            </ul>
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>isotope_error = 0</tt>
+         <br><tt>isotope_error = 1</tt>
+         <br><tt>isotope_error = 2</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/mass_type_fragment.html b/doc/user/comet-options/mass_type_fragment.html
new file mode 100644
index 0000000..469c36d
--- /dev/null
+++ b/doc/user/comet-options/mass_type_fragment.html
@@ -0,0 +1,20 @@
+<html><head><title>comet parameter: mass_type_fragment</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: mass_type_fragment</h2>
+
+         <ul>
+         <li>Controls the mass type, average or monoisotopic, applied to fragment ion calculations.
+         <li>Valid values are 0 or 1:
+            <ul>
+            <li>0 for average masses
+            <li>1 for monoisotopic masses
+            </ul>
+         <li>The default value is "1" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>mass_type_fragment = 0</tt>
+         <br><tt>mass_type_fragment = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/mass_type_parent.html b/doc/user/comet-options/mass_type_parent.html
new file mode 100644
index 0000000..c242786
--- /dev/null
+++ b/doc/user/comet-options/mass_type_parent.html
@@ -0,0 +1,20 @@
+<html><head><title>comet parameter: mass_type_parent</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: mass_type_parent</h2>
+
+         <ul>
+         <li>Controls the mass type, average or monoisotopic, applied to peptide mass calculations.
+         <li>Valid values are 0 or 1:
+            <ul>
+            <li>0 for average masses
+            <li>1 for monoisotopic masses
+            </ul>
+         <li>The default value is "1" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>mass_type_parent = 0</tt>
+         <br><tt>mass_type_parent = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/max_fragment_charge.html b/doc/user/comet-options/max_fragment_charge.html
new file mode 100644
index 0000000..0e6dee4
--- /dev/null
+++ b/doc/user/comet-options/max_fragment_charge.html
@@ -0,0 +1,28 @@
+<html><head><title>comet parameter: max_fragment_charge</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: max_fragment_charge</h2>
+
+         <ul>
+         <li>This parameter sets the maximum fragment charge state that will
+         be considered in the analysis.
+         <li>Typically, the fragment charge state range that is analyzed is
+         from 1+ to one charge less than the precursor charge state.
+         <li>For high precursor charge states (i.e. 6+), the default behavior
+         would analyze fragment ions with 1+ through 5+ charges on them.  This
+         parameter is a mechanism to limit the fragment charge range that is
+         analyzed.
+         <li>For example, if max_fragment_charge is set to 3 then the maximum
+         fragment charge state that will be analyzed is 3+.  However, the default
+         rule will still limit 1+ and 2+ precursor ions to only have 
+         1+ fragments considered.  And similarly 3+ precursors will still only
+         have 1+ and 2+ fragments considered.
+         <li>Valid values are any non-zero integer.
+         <li>The default value is "3" if this parameter is missing.  A maximum
+         allowed value of "5" is enforced for this parameter.
+         </ul>
+
+         <p>Example:
+         <br><tt>max_fragment_charge = 3</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/max_precursor_charge.html b/doc/user/comet-options/max_precursor_charge.html
new file mode 100644
index 0000000..269cd79
--- /dev/null
+++ b/doc/user/comet-options/max_precursor_charge.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: max_precursor_charge</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: max_precursor_charge</h2>
+
+         <ul>
+         <li>This parameter defines the maximum precursor charge state that
+         will be analyzed.
+         <li>Only spectra with this number of precursor charges or less will be searched.
+         <li>Valid values are any integer greater than 1.
+         <li>The default value is "6" if this parameter is missing.  A maximum
+         allowed value of "9" is enforced for this parameter.
+         </ul>
+
+         <p>Example:
+         <br><tt>max_precursor_charge = 5</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/max_variable_mods_in_peptide.html b/doc/user/comet-options/max_variable_mods_in_peptide.html
new file mode 100644
index 0000000..edcbcd7
--- /dev/null
+++ b/doc/user/comet-options/max_variable_mods_in_peptide.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: max_variable_mods_in_peptide</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: max_variable_mods_in_peptide</h2>
+
+         <ul>
+         <li>Specifies the total/maximum number of residues that can be modified in a peptide.
+         <li>As opposed to specifying the maximum number of variable modifications for each
+             of the 6 possible variable modifications, this entry limits the global number
+             of variable mods possible in each peptide.
+         <li>The default value is "10" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>max_variable_mods_in_peptide = 6</tt>
+         <br><tt>max_variable_mods_in_peptide = 10</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/minimum_intensity.html b/doc/user/comet-options/minimum_intensity.html
new file mode 100644
index 0000000..f0c1fe5
--- /dev/null
+++ b/doc/user/comet-options/minimum_intensity.html
@@ -0,0 +1,23 @@
+<html><head><title>comet parameter: minimum_intensity</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: minimum_intensity</h2>
+
+         <ul>
+         <li>A floating point number indicating the minimum intensity value
+         for input the input peaks.
+         <li>If an experimental MS/MS peak intensity is less than this value,
+         it will not be read in and used in the analysis.
+         <li>This is one mechanism to get rid of systemmatic background noise
+         that has a near contant peak intensity.
+         <li>If a peak does not pass this minimum intensity threshold, it will
+         also not be counted towards the <a href="minimum_peaks.php">minimum_peaks</a>
+         parameter.
+         <li>Valid values are any floating point number.
+         <li>The default value is "0.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>minimum_intensity = 100.0</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/minimum_peaks.html b/doc/user/comet-options/minimum_peaks.html
new file mode 100644
index 0000000..0650c83
--- /dev/null
+++ b/doc/user/comet-options/minimum_peaks.html
@@ -0,0 +1,21 @@
+<html><head><title>comet parameter: minimum_peaks</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: minimum_peaks</h2>
+
+         <ul>
+         <li>An integer value indicating the minimum number of m/z-intensity pairs
+         that must be present in a spectrum before it is searched.
+         <li>This parameter can be used to avoid searching nearly sparse spectra
+         that will not likely yield an indentification.
+         <li>This parameter is checked against the spectrum after
+         <a href="clear_mz_range.php">clear_mz_range</a> is applied but before
+         any other spectral processing occurs (i.e.  <a href="remove_precursor_peak.php">remove_precursor_peak</a>).
+         <li>Valid values are any integer number.
+         <li>The default value is "10" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>minimum_peaks = 10</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/ms_level.html b/doc/user/comet-options/ms_level.html
new file mode 100644
index 0000000..16d19b1
--- /dev/null
+++ b/doc/user/comet-options/ms_level.html
@@ -0,0 +1,20 @@
+<html><head><title>comet parameter: ms_level</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: ms_level</h2>
+
+         <ul>
+         <li>This parameter specifies which scans are searched.
+         <li>An input value of 2 will search MS/MS scans.
+         <li>An input value of 3 will search MS3 scans.
+         <li>This parameter is only valid for mzXML, mzML, and mz5 input files.
+         <li>Allowed values are 2 or 3.
+         <li>The default value is "2" if this parameter is missing or any value
+         other than 2 or 3 is entered.
+         </ul>
+
+         <p>Example:
+         <br><tt>ms_level = 2</tt>
+         <br><tt>ms_level = 3</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/nucleotide_reading_frame.html b/doc/user/comet-options/nucleotide_reading_frame.html
new file mode 100644
index 0000000..4b5b6c3
--- /dev/null
+++ b/doc/user/comet-options/nucleotide_reading_frame.html
@@ -0,0 +1,28 @@
+<html><head><title>comet parameter: nucleotide_reading_frame</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: nucleotide_reading_frame</h2>
+
+         <ul>
+         <li>This parameter is used to search nucleotide sequence databases.
+         <li>It controls how the nucleotides are translated specifically
+         which sets of reading frames are translated.
+         <li>Valid values are 0 through 9.
+         <li>Set this parameter to 0 for a protein sequence database.
+         <li>Set this parameter to 1 to search the 1st forward reading frame.
+         <li>Set this parameter to 2 to search the 2nd forward reading frame.
+         <li>Set this parameter to 3 to search the 3rd forward reading frame.
+         <li>Set this parameter to 4 to search the 1st reverse reading frame.
+         <li>Set this parameter to 5 to search the 2nd reverse reading frame.
+         <li>Set this parameter to 6 to search the 3rd reverse reading frame.
+         <li>Set this parameter to 7 to search all 3 forward reading frames.
+         <li>Set this parameter to 8 to search all 3 reverse reading frames.
+         <li>Set this parameter to 9 to search all 6 reading frames.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>nucleotide_reading_frame = 0</tt>
+         <br><tt>nucleotide_reading_frame = 9</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/num_enzyme_termini.html b/doc/user/comet-options/num_enzyme_termini.html
new file mode 100644
index 0000000..2af8498
--- /dev/null
+++ b/doc/user/comet-options/num_enzyme_termini.html
@@ -0,0 +1,28 @@
+<html><head><title>comet parameter: num_enzyme_termini</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: num_enzyme_termini</h2>
+
+         <ul>
+         <li>This parameter specifies the number of enzyme termini a peptide must
+         have.
+         <li>For example, if trypsin were specified as the search enzyme, only 
+         fully tryptic peptides would be analyzed if "num_enzyme_termini = 2"
+         whereas semi-tryptic peptides would be analyzed if "num_enzyme_termini = 1".
+         <li>This parameter is unused if a no-enzyme search is specified.
+         <li>Valid values are 1, 2, 8, 9.
+         <li>Set this parameter to 1 for a semi-enzyme search.
+         <li>Set this parameter to 2 for a full-enzyme search.
+         <li>Set this parameter to 8 for a semi-enzyme search, unspecific cleavage on peptide's N-terminus.
+         <li>Set this parameter to 9 for a semi-enzyme search, unspecific cleavage on peptide's C-terminus.
+         <li>The default value is "2" if this parameter is missing.
+         </ul>
+
+
+         <p>Example:
+         <br><tt>num_enzyme_termini = 1</tt>
+         <br><tt>num_enzyme_termini = 2</tt> 
+         <br><tt>num_enzyme_termini = 8</tt> 
+         <br><tt>num_enzyme_termini = 9</tt> 
+
+</body></html>
diff --git a/doc/user/comet-options/num_output_lines.html b/doc/user/comet-options/num_output_lines.html
new file mode 100644
index 0000000..39b1bdc
--- /dev/null
+++ b/doc/user/comet-options/num_output_lines.html
@@ -0,0 +1,26 @@
+<html><head><title>comet parameter: num_output_lines</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: num_output_lines</h2>
+
+         <ul>
+         <li>This parameter controls the number of search result
+         hits (peptides) that are reported for each spectrum query.
+         <li>If you are only interested in seeing one top hit each
+         per query, set this value to 1.
+         <li>This parameter value cannot be larger than the value
+         entered for "<a href="num_results.php">num_results</a>"
+         which itself is limited to a maximum value of 100.
+         <li>This parameter does not apply to the text output as
+         defined by "<a href="output_txtfile.php">output_txtfile</a>".
+         <li>Valid values are any positive integer 1 or greater.
+         <li>If a value less than 1 is entered, this parameter is set to 1.
+         <li>The default value is "10" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>num_output_lines = 1</tt>
+         <br><tt>num_output_lines = 5</tt>
+         <br><tt>num_output_lines = 10</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/num_results.html b/doc/user/comet-options/num_results.html
new file mode 100644
index 0000000..8cffff2
--- /dev/null
+++ b/doc/user/comet-options/num_results.html
@@ -0,0 +1,22 @@
+<html><head><title>comet parameter: num_results</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: num_results</h2>
+
+         <ul>
+         <li>This parameter controls the number of peptide search results that
+         are stored internally.
+         <li>Depending on what post-processing tools are used, one may want to
+         set this to the same value as <a href="num_output_lines.php">num_output_lines</a>.
+         <li>When this parameter is set to a value greater than
+         <a href="num_output_lines.php">num_output_lines</a>, it allows
+         the SpRank value to span a larger range which may be helpful for
+         tools like PeptideProphet or Percolator (not likely though).
+         <li>Valid values are any integer between 1 and 100.
+         <li>The default value is "100" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>num_results = 50</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/num_threads.html b/doc/user/comet-options/num_threads.html
new file mode 100644
index 0000000..2eb596f
--- /dev/null
+++ b/doc/user/comet-options/num_threads.html
@@ -0,0 +1,20 @@
+<html><head><title>comet parameter: num_threads</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: num_threads</h2>
+
+         <ul>
+         <li>This parameter controls the number of processing threads that will be spawned for a search.
+         Ideally the number of threads is set to the same value as the number of CPU cores available.
+         <li>Valid values range for this parameter are numbers ranging from 0 to 64.
+         <li>A value of 0 will cause Comet to poll the system and launch the same number of threads
+         as CPU cores.
+         <li>To set an explicit thread count, enter any value between 1 and 64.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>num_threads = 0</tt>
+         <br><tt>num_threads = 8</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/output_outfiles.html b/doc/user/comet-options/output_outfiles.html
new file mode 100644
index 0000000..5c10786
--- /dev/null
+++ b/doc/user/comet-options/output_outfiles.html
@@ -0,0 +1,16 @@
+<html><head><title>comet parameter: output_outfiles</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: output_outfiles</h2>
+
+         <ul>
+         <li>Controls whether to output search results as individual .out files.
+         <li>Valid values are 0 (do not output) or 1 (output).
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>output_outfiles = 0</tt>
+         <br><tt>output_outfiles = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/output_pepxmlfile.html b/doc/user/comet-options/output_pepxmlfile.html
new file mode 100644
index 0000000..25980bd
--- /dev/null
+++ b/doc/user/comet-options/output_pepxmlfile.html
@@ -0,0 +1,16 @@
+<html><head><title>comet parameter: output_pepxmlfile</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: output_pepxmlfile</h2>
+
+         <ul>
+         <li>Controls whether to output search results in a pepXML file.
+         <li>Valid values are 0 (do not output) or 1 (output).
+         <li>The default value is "1" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>output_pepxmlfile = 0</tt>
+         <br><tt>output_pepxmlfile = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/output_percolatorfile.html b/doc/user/comet-options/output_percolatorfile.html
new file mode 100644
index 0000000..aca9843
--- /dev/null
+++ b/doc/user/comet-options/output_percolatorfile.html
@@ -0,0 +1,19 @@
+<html><head><title>comet parameter: output_percolatorfile</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: output_percolatorfile</h2>
+
+         <ul>
+         <li>Controls whether to output search results in a <a href="http://per-colator.com">Percolator's</a>
+         tab-delimited input format.
+         <li>Valid values are 0 (do not output) or 1 (output).
+         <li>The default value is "0" if this parameter is missing.
+         <li>The created file will have a ".tsv" file extension.
+         <li>This parameter replaces the now defunct "output_pinxmlfile".
+         </ul>
+
+         <p>Example:
+         <br><tt>output_percolatorfile = 0</tt>
+         <br><tt>output_percolatorfile = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/output_sqtfile.html b/doc/user/comet-options/output_sqtfile.html
new file mode 100644
index 0000000..5a18492
--- /dev/null
+++ b/doc/user/comet-options/output_sqtfile.html
@@ -0,0 +1,16 @@
+<html><head><title>comet parameter: output_sqtfile</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: output_sqtfile</h2>
+
+         <ul>
+         <li>Controls whether to output search results into an SQT file (.sqt).
+         <li>Valid values are 0 (do not output) or 1 (output).
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>output_sqtfile = 0</tt>
+         <br><tt>output_sqtfile = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/output_sqtstream.html b/doc/user/comet-options/output_sqtstream.html
new file mode 100644
index 0000000..8ed1505
--- /dev/null
+++ b/doc/user/comet-options/output_sqtstream.html
@@ -0,0 +1,19 @@
+<html><head><title>comet parameter: output_sqtstream</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: output_sqtstream</h2>
+
+         <ul>
+         <li>Controls whether to output search results to standard out
+         (i.e. to the screen unless otherwise directed) in SQT format.
+         <li>Just the search results (M and L lines and not any H lines)
+         are output to standard out.
+         <li>Valid values are 0 (do not output) or 1 (output).
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>output_sqtstream = 0</tt>
+         <br><tt>output_sqtstream = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/output_suffix.html b/doc/user/comet-options/output_suffix.html
new file mode 100644
index 0000000..dca2425
--- /dev/null
+++ b/doc/user/comet-options/output_suffix.html
@@ -0,0 +1,25 @@
+<html><head><title>comet parameter: output_suffix</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: output_suffix</h2>
+
+         <ul>
+         <li>This parameter specifies the suffix string that is appended to
+         the base output name for the pep.xml, pin.xml, txt and sqt output files.
+         <li>Use this parameter to give output files a unique suffix base name.
+         <li>For example, if the output_suffix parameter is set to
+         "output_suffix = _000", then a search of the file base.mzXML
+         will generate output files named base_000.pep.xml, base_000.pin.xml,
+         base_000.txt, and/or base_000.sqt.
+         <li>Note that using this parameter could break downstream tools that
+         expect the output base name to be the same as the input file base name.
+         <li>The default value is blank if this parameter is missing i.e.
+         base.mzXML will generate base.pep.xml.
+         </ul>
+
+         <p>Example:
+         <br><tt>output_suffix = </tt>
+         <br><tt>output_suffix = _some_suffix</tt>
+         <br><tt>output_suffix = any_string_you_want_without_spaces</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/output_txtfile.html b/doc/user/comet-options/output_txtfile.html
new file mode 100644
index 0000000..390b363
--- /dev/null
+++ b/doc/user/comet-options/output_txtfile.html
@@ -0,0 +1,52 @@
+<html><head><title>comet parameter: output_txtfile</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: output_txtfile</h2>
+
+         <ul>
+         <li>Controls whether to output search results into a tab-delimited text file (.txt).
+         <li>Valid values are 0 (do not output) or 1 (output).
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>output_txtfile = 0</tt>
+         <br><tt>output_txtfile = 1</tt>
+
+         <p>Here's snippet of sample output below.  The first line of the output file is a
+         header line which contains the Comet version, search start time/date, and search
+         database.  The second line contains the column headers.  Only the top hit for each
+         search is reported in the text output; the parameter
+         "<a href="num_output_lines.php">num_output_lines</a>" does not apply to the text output.
+
+<pre>CometVersion 2013.02 rev. 0   100  10/04/2013, 08:37:09 AM  /net/pr/vol1/ProteomicsResource/dbase/SGD/SGDyeast.fasta.20101117
+scan  charge  exp_neutral_mass  calc_neutral_mass  e-value  xcorr  delta_cn  sp_score  ions_matched  ions_total  plain_peptide  peptide  prev_aa  next_aa  protein  duplicate_protein_count
+5129  1  599.9698  602.3136  1.73E+01  0.6847  0.0995  44.3  4  8  DAKNR  R.DAKNR.I   R  I  YML019W  0
+5385  1  601.3290  603.3228  1.73E+01  0.5316  0.1905  70.9  3  8  NLTEK  R.NLTEK.T   R  T  YBL024W  1
+5496  1  601.3358  599.3755  1.67E+01  0.4527  0.1315  6.6   2  8  VVNIR  R.VVNIR.L   R  L  YJL012C  0
+5430  1  602.3329  605.2591  2.33E+01  0.4222  0.0854  73.2  4  8  DVGCR  K.DVGCR.I   K  I  YER085C  0
+5829  1  616.4184  615.3414  5.26E+01  0.4321  0.0658  8.5   2  8  KPPMK  -.KPPM*K.Q  -  Q  DECOY__YBR025C  2
+
+</pre></p>
+
+         <p>Comet's text output is different if Comet was compiled for
+         <a href="noble.gs.washington.edu/proj/crux/">Crux</a> compatibility.
+         Here's the example text output if you are running Comet in Crux.
+         Note that up to 5 hits per spectrum are reported and there is just
+         a single column header line.
+
+<pre>scan  charge  spectrum precursor m/z  spectrum neutral mass  matches/spectrum  peptide mass  e-value  xcorr score  xcorr rank  delta_cn  sp score  sp rank  b/y ions matched  b/y ions total  sequence  flanking aa  protein id
+5129  1  600.9771  599.9698  5440  602.3136  1.73E+01  0.6847  1  0.0995  44.3   19  4  8   DAKNR   RI  YML019W
+5129  1  600.9771  599.9698  5440  602.3249  1.96E+01  0.6714  2  0.1016  46.1   17  5  10  RTGGGR  RI  YGR054W
+5129  1  600.9771  599.9698  5440  602.3136  1.99E+01  0.6698  3  0.1131  77.6   6   5  8   NISNR   KV  YMR033W
+5129  1  600.9771  599.9698  5440  601.2820  2.16E+01  0.6612  4  0.1240  38.6   22  4  8   EPSNR   RD  YPL161C
+5129  1  600.9771  599.9698  5440  600.3231  0.00E+00  0.6532  5  0.1389  104.6  3   6  8   IESPR   KM  YLL021W
+5385  1  602.3363  601.3290  6518  603.3228  1.73E+01  0.5316  1  0.1905  70.9   2   3  8   NLTEK   RT  YBL024W
+5385  1  602.3363  601.3290  6518  600.3707  1.86E+01  0.5249  2  0.2022  31.0   8   3  8   ARNIK   KT  DECOY_YIL159W
+5385  1  602.3363  601.3290  6518  602.3249  2.02E+01  0.5173  3  0.2134  47.4   4   3  8   ARNSR   KI  DECOY_YLL040C
+5385  1  602.3363  601.3290  6518  601.3184  2.19E+01  0.5100  4  0.2148  7.1    19  2  10  GAVNNK  KS  DECOY_YMR125W
+5385  1  602.3363  601.3290  6518  599.4119  0.00E+00  0.5091  5  0.2148  28.3   9   3  8   ALLKR   RI  YML107C
+</pre></p>
+
+
+</body></html>
diff --git a/doc/user/comet-options/override_charge.html b/doc/user/comet-options/override_charge.html
new file mode 100644
index 0000000..b93b267
--- /dev/null
+++ b/doc/user/comet-options/override_charge.html
@@ -0,0 +1,25 @@
+<html><head><title>comet parameter: override_charge</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: override_charge</h2>
+
+         <ul>
+         <li>This parameter specifies the whether to override existing precursor
+         charge state information when present in the files with the charge
+         range specified by the
+         "<a href="precursor_charge.php">precursor_charge</a>" parameter.
+         <li>Valid values are 0 and 1.
+         <li>To keep any known charge state values in the input files,
+         set the value to 0.
+         <li>To ignore any known charge values in the input files and instead
+         use the charge state range specified by the
+         "<a href="precursor_charge.php">precursor_charge</a>" parameter,
+         set the value to 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>override_charge = 0</tt>
+         <br><tt>override_charge = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/peptide_mass_tolerance.html b/doc/user/comet-options/peptide_mass_tolerance.html
new file mode 100644
index 0000000..d795294
--- /dev/null
+++ b/doc/user/comet-options/peptide_mass_tolerance.html
@@ -0,0 +1,17 @@
+<html><head><title>comet parameter: peptide_mass_tolerance</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: peptide_mass_tolerance</h2>
+
+         <ul>
+         <li>This parameter controls the mass tolerance value.
+         <li>The mass tolerance is set at +/- the specified number i.e. an entered value of "1.0" applies a -1.0 to +1.0 tolerance.
+         <li>The units of the mass tolerance is controlled by the parameter "<a href="peptide_mass_units.php">peptide_mass_units</a>".
+         <li>The default value is "1.0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>peptide_mass_tolerance = 3.0</tt>
+         <br><tt>peptide_mass_tolerance = 10.0</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/peptide_mass_units.html b/doc/user/comet-options/peptide_mass_units.html
new file mode 100644
index 0000000..f2483a2
--- /dev/null
+++ b/doc/user/comet-options/peptide_mass_units.html
@@ -0,0 +1,20 @@
+<html><head><title>comet parameter: peptide_mass_units</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: peptide_mass_units</h2>
+
+         <ul>
+         <li>This parameter controls the units applied to the <a href="peptide_mass_tolerance.php">peptide_mass_tolerance</a> parameter.
+         <li>Valid values are 0, 1, and 2.
+         <li>Set this parameter to 0 for amu.
+         <li>Set this parameter to 1 for mmu.
+         <li>Set this parameter to 2 for ppm.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>peptide_mass_units = 0</tt>
+         <br><tt>peptide_mass_units = 1</tt>
+         <br><tt>peptide_mass_units = 2</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/precursor_charge.html b/doc/user/comet-options/precursor_charge.html
new file mode 100644
index 0000000..752671a
--- /dev/null
+++ b/doc/user/comet-options/precursor_charge.html
@@ -0,0 +1,30 @@
+<html><head><title>comet parameter: precursor_charge</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: precursor_charge</h2>
+
+         <ul>
+         <li>This parameter specifies the precursor charge range to search.
+         <li>This parameter expects to integer values as input.
+         <li>If the first input value is 0 then this parameter is ignored and all charge
+         states are searched
+         <li>Only in the case where a spectrum does not have a precursor charge will all charges
+         in the specified charge range be searched.
+         <li>If the first input value is not 0 then all charge states between (and inclusive of)
+         the first and second input values are searched.  Again, only for those spectra with no
+         specified precursor charge state.
+         <li>If a precursor charge is present for a particular spectrum, this parameter will
+         not override that charge state and that spectrum will always be searched.
+         <li>With the default "0 0" values and a spectrum with no precursor charge, Comet will
+         either search the spectrum as a 1+ or a 2+/3+.
+         <li>The default value is "0 0" if this parameter is missing.
+
+         </ul>
+
+         <p>Example:
+         <br><tt>precursor_charge = 0 0</tt>     <i>search all charge ranges</i>
+         <br><tt>precursor_charge = 0 2</tt>     <i>search all charge ranges (because first entry is 0)</i>
+         <br><tt>precursor_charge = 2 6</tt>     <i>search 2+ to 6+ precursors</i>
+         <br><tt>precursor_charge = 3 3</tt>     <i>search 3+ precursors</i>
+
+</body></html>
diff --git a/doc/user/comet-options/print_expect_score.html b/doc/user/comet-options/print_expect_score.html
new file mode 100644
index 0000000..122ad18
--- /dev/null
+++ b/doc/user/comet-options/print_expect_score.html
@@ -0,0 +1,24 @@
+<html><head><title>comet parameter: print_expect_score</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: print_expect_score</h2>
+
+         <ul>
+         <li>A boolean flag this determines whether or not the expectation
+         score (E-value) is reported in .out and SQT formats.  Note that the
+         E-value is always reported in pepXML output.
+         <li>This parameter is only pertinant for results reported in .out and SQT formats.
+         <li>If expect scores are chosen to be reported (i.e. value set to 1), they will replace
+         the number reported for the traditional "spscore" i.e. "spscore" will
+         be replaced by an E-value.  Also an expectation value histogram will
+         be output at the end of each .out file; this histogram is not present
+         for SQT output.
+         <li>Valid values are 0 and 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>print_expect_score = 0</tt>
+         <br><tt>print_expect_score = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/remove_precursor_peak.html b/doc/user/comet-options/remove_precursor_peak.html
new file mode 100644
index 0000000..dab6a7a
--- /dev/null
+++ b/doc/user/comet-options/remove_precursor_peak.html
@@ -0,0 +1,25 @@
+<html><head><title>comet parameter: remove_precursor_peak</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: remove_precursor_peak</h2>
+
+         <ul>
+         <li>This parameter controls excluding/removing any precursor signals
+         from the input MS/MS spectrum.
+         <li>An input value of 0 will not perform any precursor removal.
+         <li>An input value of 1 will remove all peaks around the precursor m/z.
+         <li>An input value of 2 will remove all charge reduced precursor peaks
+         as expected to be present for ETD/ECD spectra.
+         <li>This parameter works in conjuction with
+         <a href="remove_precursor_tolerance.php">remove_precursor_tolerance</a>
+         to specify the tolerance around each precuror m/z that will be removed.
+         <li>Valid values are 0, 1, and 2.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>remove_precursor_peak = 0</tt>
+         <br><tt>remove_precursor_peak = 1</tt>
+         <br><tt>remove_precursor_peak = 2</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/remove_precursor_tolerance.html b/doc/user/comet-options/remove_precursor_tolerance.html
new file mode 100644
index 0000000..857d504
--- /dev/null
+++ b/doc/user/comet-options/remove_precursor_tolerance.html
@@ -0,0 +1,19 @@
+<html><head><title>comet parameter: remove_precursor_tolerance</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: remove_precursor_tolerance</h2>
+
+         <ul>
+         <li>This parameter specifies the mass tolerance around each precursor m/z
+         that would be removed when the <a href="remove_precursor_peak.php">remove_precursor_peak</a>
+         option is invoked.
+         <li>The mass tolerance units is in Da (or Th if you prefer).
+         <li>Any non-negative, non-zero floating point number is valid.
+         <li>The default value is "1.5" if this parameter is missing.
+         </ul>
+
+        <p>Example:
+         <br><tt>remove_precursor_tolerance = 0.75</tt>
+         <br><tt>remove_precursor_tolerance = 1.5</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/require_variable_mod.html b/doc/user/comet-options/require_variable_mod.html
new file mode 100644
index 0000000..eeef8ed
--- /dev/null
+++ b/doc/user/comet-options/require_variable_mod.html
@@ -0,0 +1,22 @@
+<html><head><title>comet parameter: require_variable_mod</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: require_variable_mod</h2>
+
+         <ul>
+         <li>This parameter takes in one input value.
+         <li>The input value is an integer that controls whether the analyzed peptides
+             must contain at least one variable modification i.e. force all reported peptides
+             to have a variable modifiation.
+             <ul>
+             <li>0 = consider both modified and unmodified peptides (default)
+             <li>1 = analyze only peptides that contain a variable modification
+             </ul>
+         </ul>
+
+         <p>Example:
+         <br><tt>require_variable_mod = 0</tt>     ... <i>modifications not required</i>
+         <br><tt>require_variable_mod = 1</tt>     ... <i>peptides must contain a variable modification</i>
+
+
+</body></html>
diff --git a/doc/user/comet-options/runall b/doc/user/comet-options/runall
new file mode 100644
index 0000000..b2ec284
--- /dev/null
+++ b/doc/user/comet-options/runall
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+
+
+# The parameters files are in the binary release of comet, in a file
+# called paramters_<release>.zip.
+
+to_remove=`ls *.html | grep -v index.html | grep -v header.html | grep -v footer.html | grep -v topmenu.html | grep -v head.html` 
+
+rm $to_remove
+
+rm -rf ~/tmp
+mkdir ~/tmp
+svn checkout svn://svn.code.sf.net/p/comet-ms/code/www/parameters/parameters_201501 ~/tmp/comet-params
+
+files=`ls ~/tmp/comet-params/*.php`
+
+for file in $files; do
+  if [[ -e $file ]]; then # Some symlinks point to missing files.
+    echo Converting $file
+    basename=`basename $file`
+    ./convertCometPHPs.py $file > ${basename%.php}.html
+  fi
+done
diff --git a/doc/user/comet-options/sample_enzyme_number.html b/doc/user/comet-options/sample_enzyme_number.html
new file mode 100644
index 0000000..14beb94
--- /dev/null
+++ b/doc/user/comet-options/sample_enzyme_number.html
@@ -0,0 +1,22 @@
+<html><head><title>comet parameter: sample_enzyme_number</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: sample_enzyme_number</h2>
+
+         <ul>
+         <li>This parameter is relevant only for pepXML output i.e. when
+         <a href="output_pepxmlfile.php">output_pepxmlfile</a> is set to 1.
+         <li>The pepXML format encodes the enzyme that is applied to the sample
+         i.e. trypsin.  This enzyme is written to the "sample_enzyme" element.
+         <li>The sample enzyme could be different from the search enzyme i.e.
+         the sample enzyme is "trypsin" yet the search enzyme is "No-enzyme"
+         for a non-specific search.  Hence the need for this separate parameter.
+         <li>Valid values are any integer represented in the enzyme list.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>sample_enzyme_number = 1</tt>
+         <br><tt>sample_enzyme_number = 3</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/scan_range.html b/doc/user/comet-options/scan_range.html
new file mode 100644
index 0000000..28f0989
--- /dev/null
+++ b/doc/user/comet-options/scan_range.html
@@ -0,0 +1,23 @@
+<html><head><title>comet parameter: scan_range</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: scan_range</h2>
+
+         <ul>
+         <li>Defines the scan range to search.  Only spectra within (and inclusive) of the specified
+         scan range are searched.
+         <li>This parameter works only with mzXML and mzML inputs files.
+         <li>Two digits are specified for this parameter.  The first digit is the start scan and the
+         second digit is the end scan.
+         <li>When the start scan is set to 0, this parameter setting is ignored irrespective of what
+         the end scan is set to.
+         <li>When the end scan is less than the start scan, this parameter setting is ignored.
+         <li>The default value is "0 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>scan_range = 0 0</tt>     <i>search all scans</i>
+         <br><tt>scan_range = 0 1000</tt>     <i>search all scans (because first entry is 0)</i>
+         <br><tt>scan_range = 1000 1500</tt>     <i>search only scans 1000 to 1500</i>
+
+</body></html>
diff --git a/doc/user/comet-options/search_enzyme_number.html b/doc/user/comet-options/search_enzyme_number.html
new file mode 100644
index 0000000..09da2d8
--- /dev/null
+++ b/doc/user/comet-options/search_enzyme_number.html
@@ -0,0 +1,46 @@
+<html><head><title>comet parameter: search_enzyme_number</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: search_enzyme_number</h2>
+
+         <ul>
+         <li>The search enzyme is specified by this parameter.
+         <li>The list of search enzymes is specified at the end of the comet.params file
+         beginning with the line <tt>[COMET_ENZYME_INFO]</tt>.  The actual enzyme list and
+         digestion parameters are read here.  So one can edit/add/delete enzyme definitions
+         simply be changing the enzyme information.
+         <li>This parameter works in conjection with the <a href="num_enzyme_termini.php">num_enzyme_termini</a>
+         parameter to define the cleavage rule for fully-digested vs. semi-digested search options.
+         <li>This parameter works in conjection with the <a href="allowed_missed_cleavage.php">allowed_missed_cleavage</a>
+         parameter to define the miss cleavage rule.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>search_enzyme_number = 0</tt>     <i>typically no-enzyme</i>
+         <br><tt>search_enzyme_number = 1</tt>     <i>typically trypsin</i></p>
+
+
+         <li>The format of the parameter definition looks like the following:
+         <p><pre>[COMET_ENZYME_INFO]
+0.  No_enzyme              0      -           -
+1.  Trypsin                1      KR          P
+2.  Trypsin/P              1      KR          -
+3.  Lys_C                  1      K           P
+4.  Lys_N                  0      K           -
+5.  Arg_C                  1      R           P
+6.  Asp_N                  0      D           -
+7.  CNBr                   1      M           -
+8.  Glu_C                  1      DE          P
+9.  PepsinA                1      FL          P
+10. Chymotrypsin           1      FWYL        P</pre></p>
+
+         <p>The first column of the parameter definition is the enzyme number. This number list
+         must start from 0 and sequentially increase by 1.  The second column is the enzyme name;
+         no spaces are allowed in this name field.  The third column is the digestion "sense"
+         i.e. a value of "0" specifies cleavage N-teriminal to (before) the specified residues
+         in column 4 and a value of "1" specifies cleavage C-terminal to (after) the specified
+         residues in column 4.  Column 4 contains the residue(s) that the enzyme cleaves at.
+         Column 5 contains the flanking residue(s) that negate cleavage.
+
+</body></html>
diff --git a/doc/user/comet-options/show_fragment_ions.html b/doc/user/comet-options/show_fragment_ions.html
new file mode 100644
index 0000000..bb1f1cc
--- /dev/null
+++ b/doc/user/comet-options/show_fragment_ions.html
@@ -0,0 +1,20 @@
+<html><head><title>comet parameter: show_fragment_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: show_fragment_ions</h2>
+
+         <ul>
+         <li>This parameter affects .out files only i.e.
+         <a href="output_outfiles.php">output_outfiles</a> set to 1.
+         <li>This parameter controls whether or not the theoretical
+         fragment ion masses for the top peptide hit are calculated
+         and dislayed at the end of an .out file.
+         <li>Valid values are 0 and 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>show_fragment_ions = 0</tt>
+         <br><tt>show_fragment_ions = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/skip_researching.html b/doc/user/comet-options/skip_researching.html
new file mode 100644
index 0000000..4a2957b
--- /dev/null
+++ b/doc/user/comet-options/skip_researching.html
@@ -0,0 +1,25 @@
+<html><head><title>comet parameter: skip_researching</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: skip_researching</h2>
+
+         <ul>
+         <li>This parameter is valid only when <a href="output_outfiles.php">output_outfiles</a> is set
+         to 1 and each of
+         <a href="output_pepxmlfile.php">output_pepxmlfile</a>,
+         <a href="output_sqtfile.php">output_sqtfile</a>, and
+         <a href="output_sqtstream.php">output_sqtstream</a>  are set to 0.
+         <li>When .out files only are set to be exported, this parameter will look to see if
+         an .out file already exists for each query spectrum.  If so, it will not re-search
+         that particular spectrum.
+         <li>When set to 0, all spectra are re-searched.  When set to 1, the search is skipped
+         for those spectra where an .out file already exists.
+         <li>Valid values are 0 and 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>skip_researching = 0</tt>
+         <br><tt>skip_researching = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/spectrum_batch_size.html b/doc/user/comet-options/spectrum_batch_size.html
new file mode 100644
index 0000000..760fe14
--- /dev/null
+++ b/doc/user/comet-options/spectrum_batch_size.html
@@ -0,0 +1,28 @@
+<html><head><title>comet parameter: spectrum_batch_size</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: spectrum_batch_size</h2>
+
+         <ul>
+         <li>When this parameter is set to a non-zero value, say 5000, this causes Comet
+         to load and search about 5000 spectra at a time, looping through sets of 5000
+         spectra until all data have been analyzed.
+         <li>This parameter was implemented to simplify searching large datasets that
+         might not fit into memory if searched all at once.
+         <li>The loaded batch sizes might be a little larger than the specified parameter
+         value (i.e. 5014 spectra loaded when the parameter is set to 5000) due to both
+         threading and potential charge state considerations when precursor charge state
+         is not known.
+         <li>Valid values are 0 or any positive integer.
+         <li>Set this parameter to 0 to load and search all spectra at once.
+         <li>Set this parameter to any other positive integer to loop through searching
+         this number of spectra at a time until all spectra have been analyzed.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>spectrum_batch_size = 0</tt>
+         <br><tt>spectrum_batch_size = 1000</tt>
+         <br><tt>spectrum_batch_size = 5000</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/theoretical_fragment_ions.html b/doc/user/comet-options/theoretical_fragment_ions.html
new file mode 100644
index 0000000..60b57d4
--- /dev/null
+++ b/doc/user/comet-options/theoretical_fragment_ions.html
@@ -0,0 +1,32 @@
+<html><head><title>comet parameter: theoretical_fragment_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: theoretical_fragment_ions</h2>
+
+         <ul>
+         <li>This parameter specifies how theoretical fragment ion peaks are
+         represented.
+         <li>Even though Comet does not generate/store a theoretical spectrum,
+         it does calculate fragment ion masses and this parameter controls how
+         the acquired spectrum intensities at these theoretical mass locations
+         contribute to the correlation score.
+         <li>A value of 0 indicates that the fast correlation score will be
+         a sum of the intensities at each theortical fragment mass bin and half
+         the intensity of each flanking bin.
+         <li>A value of 1 indicates that the fast correlation score will be
+         the sum of the intensities at each theoretical fragment mass bin.
+         <li>For extremely coarse <a href="fragment_bin_tol.php">fragment_bin_tol</a>
+         values such as the historical ~1 Da bins, a theoretical_fragment_ions
+         value of 1 is optimal.
+         <li>But for narrower bins, such as ~0.3 for ion trap data or ~0.03 for
+         high-res MS/MS spectra, a value of 0 is optimal to incorporate
+         intensities from the flanking bins.
+         <li>Allowed values are 0 or 1.
+         <li>The default value is "1" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>theoretical_fragment_ions = 0</tt>
+         <br><tt>theoretical_fragment_ions = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/topmenu.html b/doc/user/comet-options/topmenu.html
new file mode 100644
index 0000000..62b274f
--- /dev/null
+++ b/doc/user/comet-options/topmenu.html
@@ -0,0 +1 @@
+</body></html>
diff --git a/doc/user/comet-options/use_A_ions.html b/doc/user/comet-options/use_A_ions.html
new file mode 100644
index 0000000..2eb9a48
--- /dev/null
+++ b/doc/user/comet-options/use_A_ions.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: use_A_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: use_A_ions</h2>
+
+         <ul>
+         <li>Controls whether or not A-ions are considered in the search.
+         <li>Valid values are 0 and 1.
+         <li>To not use A-ions, set the value to 0.
+         <li>To use A-ions, set the value to 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>use_A_ions = 0</tt>
+         <br><tt>use_A_ions = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/use_B_ions.html b/doc/user/comet-options/use_B_ions.html
new file mode 100644
index 0000000..ad78694
--- /dev/null
+++ b/doc/user/comet-options/use_B_ions.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: use_B_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: use_B_ions</h2>
+
+         <ul>
+         <li>Controls whether or not B-ions are considered in the search.
+         <li>Valid values are 0 and 1.
+         <li>To not use B-ions, set the value to 0.
+         <li>To use B-ions, set the value to 1.
+         <li>The default value is "1" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>use_B_ions = 0</tt>
+         <br><tt>use_B_ions = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/use_C_ions.html b/doc/user/comet-options/use_C_ions.html
new file mode 100644
index 0000000..c2a7eb6
--- /dev/null
+++ b/doc/user/comet-options/use_C_ions.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: use_C_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: use_C_ions</h2>
+
+         <ul>
+         <li>Controls whether or not C-ions are considered in the search.
+         <li>Valid values are 0 and 1.
+         <li>To not use C-ions, set the value to 0.
+         <li>To use C-ions, set the value to 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>use_C_ions = 0</tt>
+         <br><tt>use_C_ions = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/use_NL_ions.html b/doc/user/comet-options/use_NL_ions.html
new file mode 100644
index 0000000..fe88f3d
--- /dev/null
+++ b/doc/user/comet-options/use_NL_ions.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: use_NL_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: use_NL_ions</h2>
+
+         <ul>
+         <li>Controls whether or not neutral loss ions (-NH3 and -H2O from b- and y-ions) are considered in the search.
+         <li>Valid values are 0 and 1.
+         <li>To not use neutral loss ions, set the value to 0.
+         <li>To use neutral loss ions, set the value to 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>use_NL_ions = 0</tt>
+         <br><tt>use_NL_ions = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/use_X_ions.html b/doc/user/comet-options/use_X_ions.html
new file mode 100644
index 0000000..cf91b63
--- /dev/null
+++ b/doc/user/comet-options/use_X_ions.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: use_X_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: use_X_ions</h2>
+
+         <ul>
+         <li>Controls whether or not X-ions are considered in the search.
+         <li>Valid values are 0 and 1.
+         <li>To not use X-ions, set the value to 0.
+         <li>To use X-ions, set the value to 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>use_X_ions = 0</tt>
+         <br><tt>use_X_ions = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/use_Y_ions.html b/doc/user/comet-options/use_Y_ions.html
new file mode 100644
index 0000000..83ed9dc
--- /dev/null
+++ b/doc/user/comet-options/use_Y_ions.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: use_Y_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: use_Y_ions</h2>
+
+         <ul>
+         <li>Controls whether or not Y-ions are considered in the search.
+         <li>Valid values are 0 and 1.
+         <li>To not use Y-ions, set the value to 0.
+         <li>To use Y-ions, set the value to 1.
+         <li>The default value is "1" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>use_Y_ions = 0</tt>
+         <br><tt>use_Y_ions = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/use_Z_ions.html b/doc/user/comet-options/use_Z_ions.html
new file mode 100644
index 0000000..6e9c5f2
--- /dev/null
+++ b/doc/user/comet-options/use_Z_ions.html
@@ -0,0 +1,18 @@
+<html><head><title>comet parameter: use_Z_ions</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: use_Z_ions</h2>
+
+         <ul>
+         <li>Controls whether or not Z-dot ions are considered in the search.
+         <li>Valid values are 0 and 1.
+         <li>To not use Z-dot ions, set the value to 0.
+         <li>To use Z-dot ions, set the value to 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>use_Z_ions = 0</tt>
+         <br><tt>use_Z_ions = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/use_sparse_matrix.html b/doc/user/comet-options/use_sparse_matrix.html
new file mode 100644
index 0000000..ef9f1e4
--- /dev/null
+++ b/doc/user/comet-options/use_sparse_matrix.html
@@ -0,0 +1,26 @@
+<html><head><title>comet parameter: use_sparse_matrix</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: use_sparse_matrix</h2>
+
+         <ul>
+         <li>Controls whether or not internal sparse matrix data representation is used.
+         <li>The sparse matrix data representation will use a <em>significantly</em> smaller amount
+         of memory/RAM for small <a href="fragment_bin_tol.php">fragment_bin_tol</a> settings such
+         as 0.05 or 0.01.  We're talking going from tens of GB (gigabytes) down to a few hundred
+         megabytes (MB)!
+         <li>In this release, the sparse matrix searches will always be slower than the classical
+         data representation (i.e. use_sparse_matrix = 0).  So it should be used only when
+         memory is an issue.  Alternately, the <a href="spectrum_batch_size.php">spectrum_batch_size</a>
+         parameter can also be used to mitigate memory issues.
+         <li>Valid values are 0 and 1.
+         <li>To not use sparse matrix, set the value to 0.
+         <li>To use sparse matrix, set the value to 1.
+         <li>The default value is "0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>use_sparse_matrix = 0</tt>
+         <br><tt>use_sparse_matrix = 1</tt>
+
+</body></html>
diff --git a/doc/user/comet-options/variable_mod01.html b/doc/user/comet-options/variable_mod01.html
new file mode 100644
index 0000000..4940708
--- /dev/null
+++ b/doc/user/comet-options/variable_mod01.html
@@ -0,0 +1,62 @@
+<html><head><title>comet parameter: variable_mod01</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod01</h2>
+
+         <ul>
+         <li>This parameter specifies the 1st of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies whichprotein terminus the distance constraint is applied to:
+                <ul>
+                <li>0 = protein N-terminus
+                <li>1 = protein C-terminus
+                <li>2 = peptide N-terminus
+                <li>3 = peptide C-terminus
+                </ul>
+            <li>The seventh entry specifies whether peptides are must contain this modification
+                <ul>
+                <li>0 = not forced to be present
+                <li>1 = modification is required 
+                </ul>
+
+            </ul>
+         <li>In the output, this first modification is encoded with the character '*' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod01 = 15.9949 M 0 3 -1 0 0</tt>
+         <br><tt>variable_mod01 = 79.966331 STY 0 3 -1 0 0</tt>     ... <i>possible phosphorylation on any S, T, Y residue</i>
+         <br><tt>variable_mod01 = 79.966331 STY 0 3 -1 0 1</tt>     ... <i>force peptide IDs to contain at least one phosphorylation mod</i>
+         <br><tt>variable_mod01 = 42.010565 nK 0 3 -1 0 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod01 = 15.994915 n 0 3 0 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod01 = 28.0 c 0 3 8 1 0</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod01 = -17.026549 Q 0 1 0 2</tt>     ... <i>cyclization of N-terminal glutamine to form pyroglutamic acid (elimination of NH3)</i>
+         <br><tt>variable_mod01 = -18.010565 E 0 1 0 2</tt>     ... <i>cyclization of N-terminal glutamic acid to form pyroglutamic acid (elimination of H2O)</i>
+
+
+</body></html>
diff --git a/doc/user/comet-options/variable_mod02.html b/doc/user/comet-options/variable_mod02.html
new file mode 100644
index 0000000..31107c7
--- /dev/null
+++ b/doc/user/comet-options/variable_mod02.html
@@ -0,0 +1,48 @@
+<html><head><title>comet parameter: variable_mod02</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod02</h2>
+
+         <ul>
+         <li>This parameter specifies the 2nd of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies which protein terminus the distance constraint is applied to N-terminus (0) or C-terminus (1).
+            </ul>
+         <li>In the output, this first modification is encoded with the character '#' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod02 = 15.9949 M 0 3 -1 0</tt>
+         <br><tt>variable_mod02 = 79.966331 STY 0 3 -1 0</tt>
+         <br><tt>variable_mod02 = 42.010565 nK 0 3 -1 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod02 = 15.994915 n 0 3 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod02 = 28.0 c 0 3 8 1</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod02 = -17.02549 Q 0 1 0 0</tt>     ... <i>protein N-terminal Q eliminating NH3 to form N-terminal pyrolidone carboxylic acid</i>
+
+
+</body></html>
diff --git a/doc/user/comet-options/variable_mod03.html b/doc/user/comet-options/variable_mod03.html
new file mode 100644
index 0000000..76b8f5d
--- /dev/null
+++ b/doc/user/comet-options/variable_mod03.html
@@ -0,0 +1,48 @@
+<html><head><title>comet parameter: variable_mod03</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod03</h2>
+
+         <ul>
+         <li>This parameter specifies the 3rd of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies which protein terminus the distance constraint is applied to N-terminus (0) or C-terminus (1).
+            </ul>
+         <li>In the output, this first modification is encoded with the character '@' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod03 = 15.9949 M 0 3 -1 0</tt>
+         <br><tt>variable_mod03 = 79.966331 STY 0 3 -1 0</tt>
+         <br><tt>variable_mod03 = 42.010565 nK 0 3 -1 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod03 = 15.994915 n 0 3 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod03 = 28.0 c 0 3 8 1</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod03 = -17.02549 Q 0 1 0 0</tt>     ... <i>protein N-terminal Q eliminating NH3 to form N-terminal pyrolidone carboxylic acid</i>
+
+
+</body></html>
diff --git a/doc/user/comet-options/variable_mod04.html b/doc/user/comet-options/variable_mod04.html
new file mode 100644
index 0000000..8548a34
--- /dev/null
+++ b/doc/user/comet-options/variable_mod04.html
@@ -0,0 +1,48 @@
+<html><head><title>comet parameter: variable_mod04</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod04</h2>
+
+         <ul>
+         <li>This parameter specifies the 4th of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies which protein terminus the distance constraint is applied to N-terminus (0) or C-terminus (1).
+            </ul>
+         <li>In the output, this first modification is encoded with the character '^' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod04 = 15.9949 M 0 3 -1 0</tt>
+         <br><tt>variable_mod04 = 79.966331 STY 0 3 -1 0</tt>
+         <br><tt>variable_mod04 = 42.010565 nK 0 3 -1 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod04 = 15.994915 n 0 3 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod04 = 28.0 c 0 3 8 1</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod04 = -17.02549 Q 0 1 0 0</tt>     ... <i>protein N-terminal Q eliminating NH3 to form N-terminal pyrolidone carboxylic acid</i>
+
+
+</body></html>
diff --git a/doc/user/comet-options/variable_mod05.html b/doc/user/comet-options/variable_mod05.html
new file mode 100644
index 0000000..fa5d180
--- /dev/null
+++ b/doc/user/comet-options/variable_mod05.html
@@ -0,0 +1,48 @@
+<html><head><title>comet parameter: variable_mod05</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod05</h2>
+
+         <ul>
+         <li>This parameter specifies the 5th of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies which protein terminus the distance constraint is applied to N-terminus (0) or C-terminus (1).
+            </ul>
+         <li>In the output, this first modification is encoded with the character '~' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod05 = 15.9949 M 0 3 -1 0</tt>
+         <br><tt>variable_mod05 = 79.966331 STY 0 3 -1 0</tt>
+         <br><tt>variable_mod05 = 42.010565 nK 0 3 -1 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod05 = 15.994915 n 0 3 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod05 = 28.0 c 0 3 8 1</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod05 = -17.02549 Q 0 1 0 0</tt>     ... <i>protein N-terminal Q eliminating NH3 to form N-terminal pyrolidone carboxylic acid</i>
+
+
+</body></html>
diff --git a/doc/user/comet-options/variable_mod06.html b/doc/user/comet-options/variable_mod06.html
new file mode 100644
index 0000000..cad626d
--- /dev/null
+++ b/doc/user/comet-options/variable_mod06.html
@@ -0,0 +1,48 @@
+<html><head><title>comet parameter: variable_mod06</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod06</h2>
+
+         <ul>
+         <li>This parameter specifies the 6th of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies which protein terminus the distance constraint is applied to N-terminus (0) or C-terminus (1).
+            </ul>
+         <li>In the output, this first modification is encoded with the character '$' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod06 = 15.9949 M 0 3 -1 0</tt>
+         <br><tt>variable_mod06 = 79.966331 STY 0 3 -1 0</tt>
+         <br><tt>variable_mod06 = 42.010565 nK 0 3 -1 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod06 = 15.994915 n 0 3 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod06 = 28.0 c 0 3 8 1</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod06 = -17.02549 Q 0 1 0 0</tt>     ... <i>protein N-terminal Q eliminating NH3 to form N-terminal pyrolidone carboxylic acid</i>
+
+
+</body></html>
diff --git a/doc/user/comet-options/variable_mod07.html b/doc/user/comet-options/variable_mod07.html
new file mode 100644
index 0000000..c976fb1
--- /dev/null
+++ b/doc/user/comet-options/variable_mod07.html
@@ -0,0 +1,48 @@
+<html><head><title>comet parameter: variable_mod07</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod07</h2>
+
+         <ul>
+         <li>This parameter specifies the 7th of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies which protein terminus the distance constraint is applied to N-terminus (0) or C-terminus (1).
+            </ul>
+         <li>In the output, this first modification is encoded with the character '%' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod07 = 15.9949 M 0 3 -1 0</tt>
+         <br><tt>variable_mod07 = 79.966331 STY 0 3 -1 0</tt>
+         <br><tt>variable_mod07 = 42.010565 nK 0 3 -1 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod07 = 15.994915 n 0 3 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod07 = 28.0 c 0 3 8 1</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod07 = -17.02549 Q 0 1 0 0</tt>     ... <i>protein N-terminal Q eliminating NH3 to form N-terminal pyrolidone carboxylic acid</i>
+
+
+</body></html>
diff --git a/doc/user/comet-options/variable_mod08.html b/doc/user/comet-options/variable_mod08.html
new file mode 100644
index 0000000..34aae4e
--- /dev/null
+++ b/doc/user/comet-options/variable_mod08.html
@@ -0,0 +1,48 @@
+<html><head><title>comet parameter: variable_mod08</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod08</h2>
+
+         <ul>
+         <li>This parameter specifies the 8th of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies which protein terminus the distance constraint is applied to N-terminus (0) or C-terminus (1).
+            </ul>
+         <li>In the output, this first modification is encoded with the character '!' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod08 = 15.9949 M 0 3 -1 0</tt>
+         <br><tt>variable_mod08 = 79.966331 STY 0 3 -1 0</tt>
+         <br><tt>variable_mod08 = 42.010565 nK 0 3 -1 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod08 = 15.994915 n 0 3 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod08 = 28.0 c 0 3 8 1</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod08 = -17.02549 Q 0 1 0 0</tt>     ... <i>protein N-terminal Q eliminating NH3 to form N-terminal pyrolidone carboxylic acid</i>
+
+
+</body></html>
diff --git a/doc/user/comet-options/variable_mod09.html b/doc/user/comet-options/variable_mod09.html
new file mode 100644
index 0000000..8c2d93d
--- /dev/null
+++ b/doc/user/comet-options/variable_mod09.html
@@ -0,0 +1,48 @@
+<html><head><title>comet parameter: variable_mod09</title>
+<link href="../crux.css" rel="styleSheet" type="text/css">
+</title><body>
+<h2>Comet parameter: variable_mod09</h2>
+
+         <ul>
+         <li>This parameter specifies the 9th of 9 variable modifications.
+         <li>There are 6 entries/settings that are associated with this parameter:
+            <ul>
+            <li>The first entry is a decimal value specifying the modification mass difference.
+            <li>The second entry is the residue(s) that the modifications are possibly applied to.
+                If more than a single residue is modified by the same mass difference, list them
+                all as a string.  Use 'n' for N-terminal modfication and 'c' for C-terminal modification.
+            <li>The third entry is a integer 0 or 1 to specify whether the modification is a
+                variable modification (0) or a binary modification (1).
+                <ul>
+                <li>A variable modification analyzes all permutations of modified and unmodified
+                    residues.
+                <li>A binary modification analyzes peptides where all residues are either
+                    modified or all residues are not modified.
+                </ul>
+            <li>The fourth entry is an integer specifying the maximum number of modified residues
+                possible in a peptide for this modification entry.
+            <li>The fifth entry specifies the distance the modification is applied to from the
+                respective protein terminus:
+                <ul>
+                <li>-1 = no distance contraint
+                <li>0 = only applies to terminal residue
+                <li>1 = only applies to terminal residue and next residue
+                <li>2 = only applies to terminal residue through next 2 residues
+                <li><i>N</i> = only applies to terminal residue through next <i>N</i> residues where <i>N</i> is a positive integer
+                </ul>
+            <li>The sixth entry specifies which protein terminus the distance constraint is applied to N-terminus (0) or C-terminus (1).
+            </ul>
+         <li>In the output, this first modification is encoded with the character '+' in the peptide string.
+         <li>The default value is "0.0 null 0 4 -1 0" if this parameter is missing.
+         </ul>
+
+         <p>Example:
+         <br><tt>variable_mod09 = 15.9949 M 0 3 -1 0</tt>
+         <br><tt>variable_mod09 = 79.966331 STY 0 3 -1 0</tt>
+         <br><tt>variable_mod09 = 42.010565 nK 0 3 -1 0</tt>     ... <i>acetylation mod to lysine and N-terminus of all peptides</i>
+         <br><tt>variable_mod09 = 15.994915 n 0 3 0 0</tt>     ... <i>oxidation of protein's N-terminus</i>
+         <br><tt>variable_mod09 = 28.0 c 0 3 8 1</tt>     ... <i>modification applied to C-terminus as lon as the C-term residue is one of last 9 residues in protein</i>
+         <br><tt>variable_mod09 = -17.02549 Q 0 1 0 0</tt>     ... <i>protein N-terminal Q eliminating NH3 to form N-terminal pyrolidone carboxylic acid</i>
+
+
+</body></html>
diff --git a/doc/user/comet.html b/doc/user/comet.html
new file mode 100644
index 0000000..2537eaa
--- /dev/null
+++ b/doc/user/comet.html
@@ -0,0 +1,297 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>comet</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>comet</h1>
+<h2>Usage:</h2>
+<p><code>crux comet [options] <input spectra>+ <database_name></code></p>
+<h2>Description:</h2>
+<p>This command searches a protein database with a set of spectra, assigning peptide sequences to the observed spectra. This search engine was developed by Jimmy Eng at the University of Washington Proteomics Resource.</p><p>Although its history goes back two decades, the Comet search engine was first made publicly available in August 2012 on SourceForge. Comet is multithreaded and supports multiple input and output formats.</p><blockquote><a href="http://onlinelibrary.wiley.com/doi/10.1 [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>input spectra+</code> – The name of the file from which to parse the spectra. Valid formats include mzXML, mzML, mz5, raw, ms2, and cms2. Files in mzML or mzXML may be compressed with gzip. RAW files can be parsed only under windows and if the appropriate libraries were included at compile time.</li>
+  <li><code>database_name</code> – A full or relative path to the sequence database, in FASTA format, to search. Example databases include RefSeq or UniProt.  The database can contain amino acid sequences or nucleic acid sequences. If sequences are amino acid sequences, set the parameter "nucleotide_reading_frame = 0". If the sequences are nucleic acid sequences, you must instruct Comet to translate these to amino acid sequences. Do this by setting nucleotide_reading_frame" to a va [...]
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>comet.target.txt</code> – a tab-delimited text file containing the target PSMs. See <a href="../file-formats/txt-format.html">txt file format</a> for a list of the fields.</li>
+  <li><code>comet.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>comet.log.txt</code> – a log file containing a copy of all messages that were printed to standard error.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Database</h3>
+<ul>
+  <li class="nobullet"><code>--decoy_search <integer></code> – 0=no, 1=concatenated search, 2=separate search. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>CPU threads</h3>
+<ul>
+  <li class="nobullet"><code>--num_threads <integer></code> – 0=poll CPU to set num threads; else specify num threads directly. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Masses</h3>
+<ul>
+  <li class="nobullet"><code>--peptide_mass_tolerance <float></code> – Controls the mass tolerance value.  The mass tolerance is set at +/- the specified number i.e. an entered value of "1.0" applies a -1.0 to +1.0 tolerance. The units of the mass tolerance is controlled by the parameter "peptide_mass_units".  Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--auto_peptide_mass_tolerance false|warn|fail</code> – Automatically estimate optimal value for the peptide_mass_tolerancel parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--peptide_mass_units <integer></code> – 0=amu, 1=mmu, 2=ppm. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--mass_type_parent <integer></code> – 0=average masses, 1=monoisotopic masses. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--mass_type_fragment <integer></code> – 0=average masses, 1=monoisotopic masses. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--precursor_tolerance_type <integer></code> – 0=singly charged peptide mass, 1=precursor m/z. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--isotope_error <integer></code> – 0=off, 1=on -1/0/1/2/3 (standard C13 error), 2=-8/-4/0/4/8 (for +4/+8 labeling). Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search enzyme</h3>
+<ul>
+  <li class="nobullet"><code>--search_enzyme_number <integer></code> – Specify a search enzyme from the end of the parameter file. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--num_enzyme_termini <integer></code> – valid values are 1 (semi-digested), 2 (fully digested), 8 N-term, 9 C-term. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--allowed_missed_cleavage <integer></code> – Maximum value is 5; for enzyme search. Default = <code>2</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Fragment ions</h3>
+<ul>
+  <li class="nobullet"><code>--fragment_bin_tol <float></code> – Binning to use on fragment ions. Default = <code>1.000507</code>.</li>
+  <li class="nobullet"><code>--fragment_bin_offset <float></code> – Offset position to start the binning (0.0 to 1.0). Default = <code>0.4</code>.</li>
+  <li class="nobullet"><code>--auto_fragment_bin_tol false|warn|fail</code> – Automatically estimate optimal value for the fragment_bin_tol parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--theoretical_fragment_ions <integer></code> – 0=default peak shape, 1=M peak only. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--use_A_ions <integer></code> – Controls whether or not A-ions are considered in the search (0 - no, 1 - yes). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--use_B_ions <integer></code> – Controls whether or not B-ions are considered in the search (0 - no, 1 - yes). Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--use_C_ions <integer></code> – Controls whether or not C-ions are considered in the search (0 - no, 1 - yes). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--use_X_ions <integer></code> – Controls whether or not X-ions are considered in the search (0 - no, 1 - yes). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--use_Y_ions <integer></code> – Controls whether or not Y-ions are considered in the search (0 - no, 1 - yes). Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--use_Z_ions <integer></code> – Controls whether or not Z-ions are considered in the search (0 - no, 1 - yes). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--use_NL_ions <integer></code> – 0=no, 1= yes to consider NH3/H2O neutral loss peak. Default = <code>1</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>mzXML/mzML parameters</h3>
+<ul>
+  <li class="nobullet"><code>--scan_range <string></code> – Start and scan scan range to search; 0 as first entry ignores parameter. Default = <code>0 0</code>.</li>
+  <li class="nobullet"><code>--precursor_charge <string></code> – Precursor charge range to analyze; does not override mzXML charge; 0 as first entry ignores parameter. Default = <code>0 0</code>.</li>
+  <li class="nobullet"><code>--override_charge <integer></code> – Specifies the whether to override existing precursor charge state information when present in the files with the charge range specified by the "precursor_charge" parameter. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--ms_level <integer></code> – MS level to analyze, valid are levels 2 or 3. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--activation_method ALL|CID|ECD|ETD|PQD|HCD|IRMPD</code> – Specifies which scan types are searched. Default = <code>ALL</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Miscellaneous parameters</h3>
+<ul>
+  <li class="nobullet"><code>--digest_mass_range <string></code> – MH+ peptide mass range to analyze. Default = <code>600.0 5000.0</code>.</li>
+  <li class="nobullet"><code>--num_results <integer></code> – Number of search hits to store internally. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--skip_researching <integer></code> – For '.out' file output only, 0=search everything again, 1=don't search if .out exists. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--max_fragment_charge <integer></code> – Set maximum fragment charge state to analyze (allowed max 5). Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--max_precursor_charge <integer></code> – Set maximum precursor charge state to analyze (allowed max 9). Default = <code>6</code>.</li>
+  <li class="nobullet"><code>--nucleotide_reading_frame <integer></code> – 0=proteinDB, 1-6, 7=forward three, 8=reverse three, 9=all six. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--clip_nterm_methionine <integer></code> – 0=leave sequences as-is; 1=also consider sequence w/o N-term methionine. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--spectrum_batch_size <integer></code> – Maximum number of spectra to search at a time; 0 to search the entire scan range in one loop. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--decoy_prefix <string></code> – Specifies the prefix of the protein names that indicates a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--output_suffix <string></code> – Specifies the suffix string that is appended to the base output name for the pep.xml, pin.xml, txt and sqt output files. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--mass_offsets <string></code> – Specifies one or more mass offsets to apply. This value(s) are effectively subtracted from each precursor mass such that peptides that are smaller than the precursor mass by the offset value can still be matched to the respective spectrum. Default = <code><empty></code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Spectral processing</h3>
+<ul>
+  <li class="nobullet"><code>--minimum_peaks <integer></code> – Minimum number of peaks in spectrum to search. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--minimum_intensity <float></code> – Minimum intensity value to read in. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--remove_precursor_peak <integer></code> – 0=no, 1=yes, 2=all charge reduced precursor peaks (for ETD). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--remove_precursor_tolerance <float></code> – +- Da tolerance for precursor removal. Default = <code>1.5</code>.</li>
+  <li class="nobullet"><code>--clear_mz_range <string></code> – For iTRAQ/TMT type data; will clear out all peaks in the specified m/z range. Default = <code>0.0 0.0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Variable modifications</h3>
+<ul>
+  <li class="nobullet"><code>--variable_mod01 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod02 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod03 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod04 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod05 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod06 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod07 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod08 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod09 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--max_variable_mods_in_peptide <integer></code> – Specifies the total/maximum number of residues that can be modified in a peptide. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--require_variable_mod <integer></code> – Controls whether the analyzed peptides must contain at least one variable modification. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Static modifications</h3>
+<ul>
+  <li class="nobullet"><code>--add_Cterm_peptide <float></code> – Specifiy a static modification to the c-terminus of all peptides. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Nterm_peptide <float></code> – Specify a static modification to the n-terminus of all peptides. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Cterm_protein <float></code> – Specify a static modification to the c-terminal peptide of each protein. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Nterm_protein <float></code> – Specify a static modification to the n-terminal peptide of each protein. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_A_alanine <float></code> – Specify a static modification to the residue A. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_B_user_amino_acid <float></code> – Specify a static modification to the residue B. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_C_cysteine <float></code> – Specify a static modification to the residue C. Default = <code>57.021464</code>.</li>
+  <li class="nobullet"><code>--add_D_aspartic_acid <float></code> – Specify a static modification to the residue D. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_E_glutamic_acid <float></code> – Specify a static modification to the residue E. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_F_phenylalanine <float></code> – Specify a static modification to the residue F. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_G_glycine <float></code> – Specify a static modification to the residue G. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_H_histidine <float></code> – Specify a static modification to the residue H. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_I_isoleucine <float></code> – Specify a static modification to the residue I. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_J_user_amino_acid <float></code> – Specify a static modification to the residue J. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_K_lysine <float></code> – Specify a static modification to the residue K. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_L_leucine <float></code> – Specify a static modification to the residue L. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_M_methionine <float></code> – Specify a static modification to the residue M. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_N_asparagine <float></code> – Specify a static modification to the residue N. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_O_ornithine <float></code> – Specify a static modification to the residue O. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_P_proline <float></code> – Specify a static modification to the residue P. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Q_glutamine <float></code> – Specify a static modification to the residue Q. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_R_arginine <float></code> – Specify a static modification to the residue R. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_S_serine <float></code> – Specify a static modification to the residue S. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_T_threonine <float></code> – Specify a static modification to the residue T. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_U_selenocysteine <float></code> – Specify a static modification to the residue U. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_V_valine <float></code> – Specify a static modification to the residue V. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_W_tryptophan <float></code> – Specify a static modification to the residue W. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_X_user_amino_acid <float></code> – Specify a static modification to the residue X. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Y_tyrosine <float></code> – Specify a static modification to the residue Y. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Z_user_amino_acid <float></code> – Specify a static modification to the residue Z. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>param-medic options</h3>
+<ul>
+  <li class="nobullet"><code>--pm-min-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>400</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-frag-mz <float></code> – Minimum fragment m/z value to use in measurement error estimation. Default = <code>150</code>.</li>
+  <li class="nobullet"><code>--pm-max-frag-mz <float></code> – Maximum fragment m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-scan-frag-peaks <integer></code> – Minimum fragment peaks an MS/MS scan must contain to be used in measurement error estimation. Default = <code>40</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-delta-ppm <float></code> – Maximum ppm distance between precursor m/z values to consider two scans potentially generated by the same peptide for measurement error estimation. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--pm-charge <integer></code> – Precursor charge state to consider MS/MS spectra from, in measurement error estimation. Ideally, this should be the most frequently occurring charge state in the given data. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--pm-top-n-frag-peaks <integer></code> – Number of most-intense fragment peaks to consider for measurement error estimation, per MS/MS spectrum. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--pm-pair-top-n-frag-peaks <integer></code> – Number of fragment peaks per spectrum pair to be used in fragment error estimation. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--pm-min-common-frag-peaks <integer></code> – Number of the most-intense peaks that two spectra must share in order to potentially be generated by the same peptide, for measurement error estimation. Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--pm-max-scan-separation <integer></code> – Maximum number of scans two spectra can be separated by in order to be considered potentially generated by the same peptide, for measurement error estimation. Default = <code>1000</code>.</li>
+  <li class="nobullet"><code>--pm-min-peak-pairs <integer></code> – Minimum number of peak pairs (for precursor or fragment) that must be successfully paired in order to attempt to estimate measurement error distribution. Default = <code>100</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--output_sqtfile <integer></code> – 0=no, 1=yes  write sqt file. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--output_txtfile <integer></code> – 0=no, 1=yes  write tab-delimited text file. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--output_pepxmlfile <integer></code> – 0=no, 1=yes  write pep.xml file. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--output_percolatorfile <integer></code> – 0=no, 1=yes write percolator file. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--output_outfiles <integer></code> – 0=no, 1=yes  write .out files. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--print_expect_score <integer></code> – 0=no, 1=yes to replace Sp with expect in out & sqt. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--num_output_lines <integer></code> – num peptide results to show. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--show_fragment_ions <integer></code> – 0=no, 1=yes for out files only. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--sample_enzyme_number <integer></code> – Sample enzyme which is possibly different than the one applied to the search. Used to calculate NTT & NMC in pepXML output. Default = <code>1</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/commands/bullseye_standalone_to_crux.html b/doc/user/commands/bullseye_standalone_to_crux.html
new file mode 100644
index 0000000..382c4d2
--- /dev/null
+++ b/doc/user/commands/bullseye_standalone_to_crux.html
@@ -0,0 +1,74 @@
+    <table border="1">
+      <tr>
+        <td><b>Bullseye Parameter</b></td>
+        <td><b>crux bullseye parameter</b></td>
+        <td><b>datatype</b></td>
+        <td><b>default</b></td>
+
+      </tr>
+      <tr>
+        <td>-c</td>
+        <td>--max-persist</td>
+        <td>double</td>
+        <td>2.0</td>
+      </tr>
+
+      <tr>
+        <td>-e</td>
+        <td>--exact-match</td>
+        <td>boolean</td>
+        <td>false</td>
+      </tr>
+      <tr>
+
+        <td>-g</td>
+        <td>--gap-tolerance</td>
+        <td>integer</td>
+        <td>1</td>
+      </tr>
+      <tr>
+        <td>-m</td>
+
+        <td>--max-mass</td>
+        <td>double</td>
+        <td>8000.0</td>
+      </tr>
+      <tr>
+        <td>-n</td>
+        <td>--min-mass</td>
+
+        <td>double</td>
+        <td>600.0</td>
+      </tr>
+      <tr>
+        <td>-p</td>
+        <td>--exact-tolerance</td>
+        <td>double</td>
+
+        <td>10.0</td>
+      </tr>
+      <tr>
+        <td>-r</td>
+        <td>--persist-tolerance</td>
+        <td>double</td>
+        <td>10.0</td>
+
+      </tr>
+      <tr>
+        <td>-s</td>
+        <td>--scan-tolerance</td>
+        <td>integer</td>
+        <td>3</td>
+      </tr>
+
+      </tr>
+      <tr>
+        <td>-t</td>
+        <td>--retention-tolerance</td>
+        <td>float</td>
+        <td>0.5</td>
+      </tr>
+
+      
+    </table>
+    
diff --git a/doc/user/commands/hardklor_standalone_to_crux.html b/doc/user/commands/hardklor_standalone_to_crux.html
new file mode 100644
index 0000000..553064e
--- /dev/null
+++ b/doc/user/commands/hardklor_standalone_to_crux.html
@@ -0,0 +1,127 @@
+    <table border="1">
+  <tr>
+    <td><b>Hardklör parameter</b></td>
+    <td><b>crux hardklor parameter</b></td>
+    <td><b>datatype</b></td>
+    <td><b>default</b></td>
+    
+  </tr>
+  <tr>
+    <td>-a</td>
+    <td>--hardklor-algorithm</td>
+    <td>string</td>
+    <td>fast-fewesst-peptides</td>
+  </tr>
+  
+  <tr>
+    <td>-cdm</td>
+    <td>--cdm</td>
+    <td>char</td>
+    <td>Q</td>
+  </tr>
+  <tr>
+    <td>-chMin</td>
+    <td>--min-charge</td>
+    <td>integer</td>
+    <td>1</td>
+  </tr>
+  <tr>
+    <td>-chMax</td>
+    <td>--max-charge</td>
+    <td>integer</td>
+    <td>5</td>
+  </tr>
+  <tr>
+    <td>-corr</td>
+    <td>--corr</td>
+        <td>double</td>
+    <td>0.85</td>
+  </tr>
+  <tr>
+    <td>-d</td>
+    <td>--depth</td>
+    <td>integer</td>
+    
+    <td>3</td>
+  </tr>
+  <tr>
+    <td>-da</td>
+    <td>--distribution-area</td>
+    <td>boolean</td>
+    <td>F</td>
+    
+  </tr>
+  <tr>
+    <td>-m</td>
+    <td>--averagine-mod</td>
+    <td>string</td>
+    <td>Empty string</td>
+  </tr>
+  <tr>
+    <td>-mF</td>
+    <td>--mzxml-filter</td>
+    <td>string</td>
+    <td>none</td>
+  </tr>
+  <tr>
+    <td>-p</td>
+    <td>--max-p</td>
+    <td>integer</td>
+    <td>10</td>
+  </tr>
+  <tr>
+    <td>-res</td>
+    <td>--resolution</td>
+    <td>float</td>
+    <td>100000</td>
+  </tr>
+  <tr>
+    <td>-res</td>
+    <td>--instrument</td>
+    <td>string</td>
+    <td>fticr</td>
+  </tr>
+  <tr>
+    <td>-sc</td>
+    <td>--scan-number</td>
+    <td>number range</td>
+    <td>search all</td>
+  </tr>
+  <tr>
+    <td>-sl</td>
+    <td>--sensitivity</td>
+    <td>0|1|2|3</td>
+    <td>2</td>
+  </tr>
+  <tr>
+    <td>-sn</td>
+    <td>--signal-to-noise</td>
+    <td>float</td>
+    <td>1.0</td>
+  </tr>
+  <tr>
+    <td>-snWin</td>
+    <td>--sn-window</td>
+    <td>float</td>
+    <td>250.0</td>
+  </tr>
+  <tr>
+    <td>-snWin</td>
+    <td>--static-sn</td>
+    <td>boolean</td>
+    <td>true</td>
+  </tr>
+  <tr>
+    <td>-w</td>
+    <td>--mz-window</td>
+    <td>double-double</td>
+    <td>0-max</td>
+  </tr>
+  <tr>
+    <td>-win</td>
+    <td>--max-width</td>
+    <td>float</td>
+    <td>4.0</td>
+  </tr>
+    </table>
+    
diff --git a/doc/user/contributors.html b/doc/user/contributors.html
new file mode 100644
index 0000000..3c7e5f1
--- /dev/null
+++ b/doc/user/contributors.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux contributors</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="index.html">Home</a></li>
+			    <li><a href="download.html">Download</a></li>
+			    <li><a href="fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>Crux contributors</h2>
+		<p>
+		The current Crux development team consists of the following people:</p>
+
+		<ul>
+
+		<li>
+		Charles Grant, February 2008—present</li>
+
+		<li>
+		Sean McIlwain, January 2009—present</li>
+
+		<li>
+		Kaipo Tamura, October 2012—present</li>
+
+		<li>
+		J. Jeffry Howbert, October 2011—present</li>
+
+		<li>
+		Alice Cheng, March 2014—present</li>
+
+		</ul>
+
+		<p>
+		Former Crux contributors include</p>
+
+		<ul>
+
+		<li>
+		Chris Park, June 2006—August 2007</li>
+
+		<li>
+		Aaron Klammer, June 2006—June 2008</li>
+
+		<li>
+		Lukas Käll, November 2007—July 2008</li>
+
+		<li>
+		Michael Mathews, June 2010—December 2010</li>
+
+		<li>
+		Benjamin Diament, July 2010—September 2011</li>
+
+		<li>
+		Kha Nguyen, April 2011—July 2011</li>
+
+		<li>
+		Manijeh Naseri, January 2012—September 2012</li>
+
+		<li>
+		Marina Spivak, September 2009—September 2012</li>
+
+		<li>
+		Barbara Frewen, October 2007—September 2014</li>
+
+		<li>
+		Attila Kertesz-Farkas, September 2013—September 2015</li>
+
+		<li>
+		Jared Moore, September 2015—June 2016</li>
+
+		<li>
+		Atul Pai, September 2015—June 2016</li>
+
+		<li>
+		Zijin Zhang, September 2015—June 2016</li>
+
+		</ul>
+
+		<p>
+		The Crux project is overseen and directed by Michael MacCoss and
+		William Stafford Noble.</p>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/create-docs.cmake b/doc/user/create-docs.cmake
new file mode 100644
index 0000000..5c98f75
--- /dev/null
+++ b/doc/user/create-docs.cmake
@@ -0,0 +1,127 @@
+# This script generates the documentation for the Crux commands using the
+# 'crux create-docs' command.
+
+# Create the list of documents to create
+execute_process(
+  COMMAND ${CRUX_PATH} create-docs --no-analytics T list
+  RESULT_VARIABLE status
+  OUTPUT_VARIABLE doc_list 
+  ERROR_VARIABLE error_message
+)
+if (NOT ${status} EQUAL 0)
+  message(
+    FATAL_ERROR
+    "Unable to create list of documents " 
+    "\nError message: ${error_message}"
+    "\nCreation of documents failed."
+  )
+endif (NOT ${status} EQUAL 0)
+
+# Documents are separated by newlines, convert to CMake list
+STRING(REGEX REPLACE "\n" ";" doc_list "${doc_list}")
+
+# Generate each document
+foreach (doc ${doc_list})
+  execute_process(
+    COMMAND ${CRUX_PATH} create-docs --no-analytics T ${doc}
+      RESULT_VARIABLE status
+      ERROR_VARIABLE error_message
+      OUTPUT_FILE "${doc}.html"
+  )
+  if (NOT ${status} EQUAL 0)
+    message(
+      FATAL_ERROR
+      "Unable to generate ${doc}.html" 
+      "\nError message: ${error_message}"
+      "\nCreation of documents failed."
+    )
+  endif (NOT ${status} EQUAL 0)
+  message(STATUS "Created ${doc}.html")
+  if (NOT ${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
+    # If building out of source copy doc files back to 
+    # source doc directory.
+    execute_process(
+      COMMAND ${CMAKE_COMMAND} 
+        -E copy ${doc}.html ${DOC_DIR}
+        RESULT_VARIABLE status
+        ERROR_VARIABLE error_message
+    )
+    if (NOT ${status} EQUAL 0)
+      message(
+        FATAL_ERROR
+        "Unable to copy ${doc}.html to ${DOC_DIR}" 
+        "\nError message: ${error_message}"
+        "\nCreation of documents failed."
+      )
+    endif (NOT ${status} EQUAL 0)
+  endif (NOT ${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
+endforeach (doc ${doc_list})
+
+# Create the parameter table
+execute_process(
+  COMMAND ${CRUX_PATH} create-docs --no-analytics T param-table
+    RESULT_VARIABLE status
+    ERROR_VARIABLE error_message
+    OUTPUT_FILE param-table.html
+)
+if (NOT ${status} EQUAL 0)
+  message(
+    FATAL_ERROR
+    "Unable to generate param-table.html" 
+    "\nError message: ${error_message}"
+    "\nCreation of param-table failed."
+  )
+endif (NOT ${status} EQUAL 0)
+message(STATUS "Created param-table.html")
+if (NOT ${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
+  # If building out of source copy doc files back to 
+  # source doc directory.
+  execute_process(
+    COMMAND ${CMAKE_COMMAND} 
+      -E copy param-table.html ${DOC_DIR}
+      RESULT_VARIABLE status
+      ERROR_VARIABLE error_message
+  )
+  if (NOT ${status} EQUAL 0)
+    message(
+      FATAL_ERROR
+      "Unable to copy param-table.html to ${DOC_DIR}" 
+      "\nError message: ${error_message}"
+      "\nCreation of param-table failed."
+    )
+  endif (NOT ${status} EQUAL 0)
+endif (NOT ${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
+# Create the default.params file
+execute_process(
+  COMMAND ${CRUX_PATH} create-docs --no-analytics T default-params
+    RESULT_VARIABLE status
+    ERROR_VARIABLE error_message
+    OUTPUT_FILE default.params
+)
+if (NOT ${status} EQUAL 0)
+  message(
+    FATAL_ERROR
+    "Unable to generate default.params"
+    "\nError message: ${error_message}"
+    "\nCreation of default.params failed."
+  )
+endif (NOT ${status} EQUAL 0)
+message(STATUS "Created default.params")
+if (NOT ${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
+  # If building out of source copy doc files back to 
+  # source doc directory.
+  execute_process(
+    COMMAND ${CMAKE_COMMAND} 
+      -E copy default.params ${DOC_DIR}
+      RESULT_VARIABLE status
+      ERROR_VARIABLE error_message
+  )
+  if (NOT ${status} EQUAL 0)
+    message(
+      FATAL_ERROR
+      "Unable to copy default.params to ${DOC_DIR}" 
+      "\nError message: ${error_message}"
+      "\nCreation of param-table failed."
+    )
+  endif (NOT ${status} EQUAL 0)
+endif (NOT ${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
diff --git a/doc/user/create-docs.html b/doc/user/create-docs.html
new file mode 100644
index 0000000..47fa916
--- /dev/null
+++ b/doc/user/create-docs.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>create-docs</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>create-docs</h1>
+<h2>Usage:</h2>
+<p><code>crux create-docs [options] <tool-name></code></p>
+<h2>Description:</h2>
+<p>This command prints to standard output an HTML formatted version of the documentation for a specified Crux command.</p>
+<h2>Input:</h2>
+<ul>
+  <li><code>tool-name</code> – Specifies the Crux tool to generate documentation for. If the value is 'list', then a list of available tools will be given. If the value is 'default-params', then a default parameter file will be given.If the value is 'param-table' then a table will be printed showing which parameters are associated with which commands.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – The command prints to standard output the HTML documentation for the specified Crux tool.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<p>This command does not support any optional parameters.</p>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/default.params b/doc/user/default.params
new file mode 100644
index 0000000..3791557
--- /dev/null
+++ b/doc/user/default.params
@@ -0,0 +1,1832 @@
+################################################################################
+# Sample parameter file
+#
+# On each line, anything after a '#' will be ignored.
+# The format is:
+#
+# <parameter-name>=<value>
+#
+################################################################################
+
+# Crux parameter file (generated by Crux version 3.1)
+# Full documentation available at http://cruxtoolkit.sourceforge.net/
+# comet_version 2016.01 rev. 1
+# Everything following the '#' symbol is treated as a comment.
+
+# Path where pin file will be written instead of make-pin.pin.
+# It is optional for make-pin
+output-file=
+
+# Specify the verbosity of the current processes. Each level prints the
+# following messages, including all those at lower verbosity levels: 0-fatal
+# errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of
+# execution, 40-more progress information, 50-debug info, 60-detailed debug
+# info.
+# Available for all crux programs.
+verbosity=30
+
+# A file containing parameters. 
+# Available for all crux programs. Any options specified on the command line
+# will override values in the parameter file.
+parameter-file=
+
+# Replace existing files if true or fail when trying to overwrite a file if
+# false.
+# Available for all crux programs.  Applies to parameter file as well as index,
+# search, and analysis output files.
+overwrite=false
+
+# The minimum length of peptides to consider.
+# Used from the command line or parameter file by crux-generate-peptides, and
+# crux tide-index.
+min-length=6
+
+# The maximum length of peptides to consider.
+# Available from command line or parameter file for crux-generate-peptides, crux
+# tide-index. 
+max-length=50
+
+# The minimum mass (in Da) of peptides to consider.
+# Available from command line or parameter file for crux-generate-peptides and
+# crux tide-index. 
+min-mass=200
+
+# The maximum mass (in Da) of peptides to consider.
+# Available from command line or parameter file for crux-generate-peptides and
+# crux tide-index. 
+max-mass=7200
+
+# The minimum number of peaks a spectrum must have for it to be searched.
+# Available for tide-search.
+min-peaks=20
+
+# Specify the enzyme used to digest the proteins in silico. Available enzymes
+# (with the corresponding digestion rules indicated in parentheses) include
+# no-enzyme ([X]|[X]), trypsin ([RK]|{P}), trypsin/p ([RK]|[]), chymotrypsin
+# ([FWYL]|{P}), elastase ([ALIV]|{P}), clostripain ([R]|[]), cyanogen-bromide
+# ([M]|[]), iodosobenzoate ([W]|[]), proline-endopeptidase ([P]|[]),
+# staph-protease ([E]|[]), asp-n ([]|[D]), lys-c ([K]|{P}), lys-n ([]|[K]),
+# arg-c ([R]|{P}), glu-c ([DE]|{P}), pepsin-a ([FL]|{P}),
+# elastase-trypsin-chymotrypsin ([ALIVKRWFY]|{P}). Specifying --enzyme no-enzyme
+# yields a non-enzymatic digest. Warning: the resulting index may be quite
+# large.
+# Available for crux-generate-peptides and crux tide-index.
+enzyme=trypsin
+
+# Specify rules for in silico digestion of protein sequences. Overrides the
+# enzyme option. Two lists of residues are given enclosed in square brackets or
+# curly braces and separated by a |. The first list contains residues
+# required/prohibited before the cleavage site and the second list is residues
+# after the cleavage site. If the residues are required for digestion, they are
+# in square brackets, '[' and ']'. If the residues prevent digestion, then they
+# are enclosed in curly braces, '{' and '}'. Use X to indicate all residues. For
+# example, trypsin cuts after R or K but not before P which is represented as
+# [RK]|{P}. AspN cuts after any residue but only before D which is represented
+# as [X]|[D].
+# 
+custom-enzyme=
+
+# Specify whether every peptide in the database must have two enzymatic termini
+# (full-digest) or if peptides with only one enzymatic terminus are also
+# included (partial-digest).
+# Available for crux-generate-peptides and crux tide-index.
+digestion=full-digest
+
+# Maximum number of missed cleavages per peptide to allow in enzymatic
+# digestion.
+# Available from command line or parameter file for crux-generate-peptides. When
+# used with enzyme=<trypsin|elastase|chymotrypsin> includes peptides containing
+# one or more potential cleavage sites.
+missed-cleavages=0
+
+# Tolerance used for matching peptides to spectra. Peptides must be within +/-
+# 'precursor-window' of the spectrum value. The precursor window units depend
+# upon precursor-window-type.
+# Available for tide-search and crux-generate-peptides.
+precursor-window=3
+
+# Specify the units for the window that is used to select peptides around the
+# precursor mass location (mass, mz, ppm). The magnitude of the window is
+# defined by the precursor-window option, and candidate peptides must fall
+# within this window. For the mass window-type, the spectrum precursor m+h value
+# is converted to mass, and the window is defined as that mass +/-
+# precursor-window. If the m+h value is not available, then the mass is
+# calculated from the precursor m/z and provided charge. The peptide mass is
+# computed as the sum of the average amino acid masses plus 18 Da for the
+# terminal OH group. The mz window-type calculates the window as spectrum
+# precursor m/z +/- precursor-window and then converts the resulting m/z range
+# to the peptide mass range using the precursor charge. For the
+# parts-per-million (ppm) window-type, the spectrum mass is calculated as in the
+# mass type. The lower bound of the mass window is then defined as the spectrum
+# mass / (1.0 + (precursor-window / 1000000)) and the upper bound is defined as
+# spectrum mass / (1.0 - (precursor-window / 1000000)).
+# Available for search-for-xlinks and tide-search.
+precursor-window-type=mass
+
+# Automatically estimate optimal value for the precursor-window parameter from
+# the spectra themselves. false=no estimation, warn=try to estimate but use the
+# default value in case of failure, fail=try to estimate and quit in case of
+# failure.
+# Available for tide-search.
+auto-precursor-window=false
+
+# Specify the parser to use for reading in MS/MS spectra.
+# Available for search-for-xlinks.
+spectrum-parser=pwiz
+
+# Specify whether, when parsing an MS2 spectrum file, Crux obtains the precursor
+# mass information from the "S" line or the "Z" line. 
+# Available when spectrum-parser = pwiz.
+use-z-line=true
+
+# When creating decoy peptides using decoy-format=shuffle or
+# decoy-format=peptide-reverse, this option specifies whether the N-terminal and
+# C-terminal amino acids are kept in place or allowed to be shuffled or
+# reversed. For a target peptide "EAMPK" with decoy-format=peptide-reverse,
+# setting keep-terminal-aminos to "NC" will yield "EPMAK"; setting it to "C"
+# will yield "PMAEK"; setting it to "N" will yield "EKPMA"; and setting it to
+# "none" will yield "KPMAE".
+# Available for tide-index.
+keep-terminal-aminos=NC
+
+# Create in the output directory a text file listing of all the peptides in the
+# database, along with their neutral masses, one per line. If decoys are
+# generated, then a second file will be created containing the decoy peptides.
+# Decoys that also appear in the target database are marked with an asterisk in
+# a third column.
+# Available for tide-index.
+peptide-list=false
+
+# Stop after the specified pre-processing step.
+# Available for print-processed-spectra.
+stop-after=xcorr
+
+# Specify the output units for processed spectra.
+# Available for print-processed-spectra
+output-units=bin
+
+# Outputs an SQT results file to the output directory. Note that if sqt-output
+# is enabled, then compute-sp is automatically enabled and cannot be overridden.
+# Available for tide-search.
+sqt-output=false
+
+# Output an mzIdentML results file to the output directory.
+# Available for tide-search, percolator.
+mzid-output=false
+
+# Output a Percolator input (PIN) file to the output directory.
+# Available for tide-search.
+pin-output=false
+
+# Output a Percolator pout.xml format results file to the output directory.
+# Available for percolator.
+pout-output=false
+
+# Output a pepXML results file to the output directory.
+# Available for tide-search, q-ranker, barista, percolator.
+pepxml-output=false
+
+# Output a tab-delimited results file to the output directory.
+# Available for tide-search, percolator, q-ranker, barista.
+txt-output=true
+
+# Compute the preliminary score Sp for all candidate peptides. Report this score
+# in the output, along with the corresponding rank, the number of matched ions
+# and the total number of ions. This option is recommended if results are to be
+# analyzed by Percolator or Barista. If sqt-output is enabled, then compute-sp
+# is automatically enabled and cannot be overridden. Note that the Sp
+# computation requires re-processing each observed spectrum, so turning on this
+# switch involves significant computational overhead.
+# Available for tide-search.
+compute-sp=false
+
+# Estimate the parameters of the score distribution for each spectrum by fitting
+# to a Weibull distribution, and compute a p-value for each xlink product. This
+# option is only available when use-old-xlink=F.
+# Currently only implemented for XCORR.
+compute-p-values=false
+
+# A single scan number or a range of numbers to be searched. Range should be
+# specified as 'first-last' which will include scans 'first' and 'last'.
+# The search range x-y is inclusive of x and y.
+scan-number=
+
+# Before calculation of the XCorr score, the m/z axes of the observed and
+# theoretical spectra are discretized. This parameter specifies the size of each
+# bin. The exact formula for computing the discretized m/z value is
+# floor((x/mz-bin-width) + 1.0 - mz-bin-offset), where x is the observed m/z
+# value. For low resolution ion trap ms/ms data 1.0005079 and for high
+# resolution ms/ms 0.02 is recommended.
+# Available for tide-search and xlink-assign-ions.
+mz-bin-width=1.0005079
+
+# In the discretization of the m/z axes of the observed and theoretical spectra,
+# this parameter specifies the location of the left edge of the first bin,
+# relative to mass = 0 (i.e., mz-bin-offset = 0.xx means the left edge of the
+# first bin will be located at +0.xx Da).
+# Available for tide-search.
+mz-bin-offset=0.4
+
+# Automatically estimate optimal value for the mz-bin-width parameter from the
+# spectra themselves. false=no estimation, warn=try to estimate but use the
+# default value in case of failure, fail=try to estimate and quit in case of
+# failure.
+# Available for tide-search.
+auto-mz-bin-width=false
+
+# Include flanking peaks around singly charged b and y theoretical ions. Each
+# flanking peak occurs in the adjacent m/z bin and has half the intensity of the
+# primary peak.
+# Available for the tide-search and search-for-xlinks commands.
+use-flanking-peaks=false
+
+# The lowest spectrum m/z to search in the ms2 file.
+# Available for tide-search.
+spectrum-min-mz=0
+
+# The highest spectrum m/z to search in the ms2 file.
+# Available for tide-search.
+spectrum-max-mz=1e+09
+
+# The spectrum charges to search. With 'all' every spectrum will be searched and
+# spectra with multiple charge states will be searched once at each charge
+# state. With 1, 2, or 3 only spectra with that charge state will be searched.
+# Used by tide-search.
+spectrum-charge=all
+
+# The fileroot string will be added as a prefix to all output file names.
+# Available for all commands that produce an output directory.
+fileroot=
+
+# The name of the directory where output files will be created.
+# Available for most commands.
+output-dir=crux-output
+
+# The name of the directory where temporary files will be created. If this
+# parameter is blank, then the system temporary directory will be used
+# Available for tide-index.
+temp-dir=
+
+# Specify the number of matches to report for each spectrum.
+# Available for tide-search and crux percolator
+top-match=5
+
+# When given a unsigned integer value seeds the random number generator with
+# that value. When given the string "time" seeds the random number generator
+# with the system time.
+# Available for all Crux commands.
+seed=1
+
+# Specify which isotopes to use in calculating fragment ion mass.
+# Used by crux-predict-peptide-ions.
+fragment-mass=mono
+
+# Specify the type of isotopic masses to use when calculating the peptide mass.
+# Used from command line or parameter file by crux-generate-peptides.
+isotopic-mass=mono
+
+# The minimum number of modifications that can be applied to a single peptide.
+# Available for tide-index.
+min-mods=0
+
+# The maximum number of modifications that can be applied to a single peptide.
+# Available for tide-index.
+max-mods=255
+
+# The maximum number of modified amino acids that can appear in one peptide.
+# Each aa can be modified multiple times.
+# 
+max-aas-modified=255
+
+# Specify how sequence modifications are reported in various output files. Each
+# modification is reported as a number enclosed in square braces following the
+# modified residue; however, the number may correspond to one of three different
+# masses: (1) 'mod-only' reports the value of the mass shift induced by the
+# modification; (2) 'total' reports the mass of the residue with the
+# modification (residue mass plus modification mass); (3) 'separate' is the same
+# as 'mod-only', but multiple modifications to a single amino acid are reported
+# as a comma-separated list of values. For example, suppose amino acid D has an
+# unmodified mass of 115 as well as two moifications of masses +14 and +2. In
+# this case, the amino acid would be reported as D[16] with 'mod-only', D[131]
+# with 'total', and D[14,2] with 'separate'.
+# Available for generate-peptides.
+mod-mass-format=mod-only
+
+# Consider a-ions in the search? Note that an a-ion is equivalent to a neutral
+# loss of CO from the b-ion.  Peak height is 10 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-a-ions=false
+
+# Consider b-ions in the search? Peak height is 50 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-b-ions=true
+
+# Consider c-ions in the search? Peak height is 50 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-c-ions=false
+
+# Consider x-ions in the search? Peak height is 10 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-x-ions=false
+
+# Consider y-ions in the search? Peak height is 50 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-y-ions=true
+
+# Consider z-ions in the search? Peak height is 50 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-z-ions=false
+
+# Set the precision for scores written to sqt and text files.
+# Available for all commands.
+precision=8
+
+# Set the precision for masses and m/z written to sqt and .txt files. Note that
+# this parameter only takes effect when specified in the parameter file.
+# Available for all commands.
+mass-precision=4
+
+# Show search progress by printing every n spectra searched. Set to 0 to show no
+# search progress.
+# Available for tide-search
+print-search-progress=1000
+
+# Specify the type of target-decoy search. Using 'auto', percolator attempts to
+# detect the search type automatically.  Using 'separate' specifies two
+# searches: one against target and one against decoy protein db. Using
+# 'concatenated' specifies a single search on concatenated target-decoy protein
+# db.
+# Available for percolator
+search-input=auto
+
+# When given a unsigned integer value seeds the random number generator with
+# that value. When given the string "time" seeds the random number generator
+# with the system time.
+# Available for all percolator
+percolator-seed=1
+
+# Output the computed features in tab-delimited text format.
+# Available for percolator and q-ranker.
+feature-file-out=false
+
+# Include decoys (PSMs, peptides, and/or proteins) in the XML output.
+# Available for crux percolator
+decoy-xml-output=false
+
+# Specifies the prefix of the protein names that indicate a decoy.
+# Available for percolator
+decoy-prefix=decoy_
+
+# Output final weights to a file named "percolator.weights.txt".
+# Available for crux percolator
+output-weights=false
+
+# Read initial weights from the given file (one per line).
+# Available for crux percolator
+init-weights=
+
+# Only train Percolator on a subset of PSMs, and use the resulting score vector
+# to evaluate the other PSMs. Recommended when analyzing huge numbers (>1
+# million) of PSMs. When set to 0, all PSMs are used for training as normal.
+# Available for crux percolator
+subset-max-train=0
+
+# Penalty for mistakes made on positive examples. If this value is set to 0,
+# then it is set via cross validation over the values {0.1, 1, 10}, selecting
+# the value that yields the largest number of PSMs identified at the q-value
+# threshold set via the --test-fdr parameter.
+# Available for crux percolator
+c-pos=0
+
+# Penalty for mistake made on negative examples. If not specified, then this
+# value is set by cross validation over {0.1, 1, 10}.
+# Available for crux percolator
+c-neg=0
+
+# False discovery rate threshold to define positive examples in training.
+# Available for crux percolator
+train-fdr=0.01
+
+# False discovery rate threshold used in selecting hyperparameters during
+# internal cross-validation and for reporting the final results.
+# Available for crux percolator.
+test-fdr=0.01
+
+# Apply the specified threshold to PSM, peptide and protein probabilities to
+# obtain a faster estimate of the alpha, beta and gamma parameters.
+# Available for crux percolator.
+fido-fast-gridsearch=0
+
+# Do not approximate the posterior distribution by allowing large graph
+# components to be split into subgraphs. The splitting is done by duplicating
+# peptides with low probabilities. Splitting continues until the number of
+# possible configurations of each subgraph is below 2^18
+# Available for crux percolator
+fido-no-split-large-components=false
+
+# To speed up inference, proteins for which none of the associated peptides has
+# a probability exceeding the specified threshold will be assigned probability =
+# 0.
+# Available for crux percolator
+fido-protein-truncation-threshold=0.01
+
+# Use target-decoy competition to assign q-values and PEPs. When set to F, the
+# mix-max method, which estimates the proportion pi0 of incorrect target PSMs,
+# is used instead.
+# Available for crux percolator
+tdc=true
+
+# Maximum number of iterations for training.
+# Available for crux percolator
+maxiter=10
+
+# Quicker execution by reduced internal cross-validation.
+# Available for crux percolator
+quick-validation=false
+
+# In its initial round of training, Percolator uses one feature to induce a
+# ranking of PSMs. By default, Percolator will select the feature that produces
+# the largest set of target PSMs at a specified FDR threshold (cf. --train-fdr).
+# This option allows the user to specify which feature is used for the initial
+# ranking, using the name as a string. The name can be preceded by a hyphen
+# (e.g. "-XCorr") to indicate that a lower value is better.
+# Available for crux percolator
+default-direction=
+
+# Use unit normalization (i.e., linearly rescale each PSM's feature vector to
+# have a Euclidean length of 1), instead of standard deviation normalization.
+# Available for crux percolator.
+unitnorm=false
+
+# Measure performance on test set each iteration.
+# Available for crux percolator.
+test-each-iteration=false
+
+# When set to T, interpret the input file as a PIN file.
+# Available for crux percolator.
+feature-file-in=false
+
+# Use the picked protein-level FDR to infer protein probabilities, provide the
+# fasta file as the argument to this flag.
+# Available for crux percolator
+picked-protein=
+
+# Type of enzyme
+# Available for crux percolator
+protein-enzyme=trypsin
+
+# By default, if the peptides associated with protein A are a proper subset of
+# the peptides associated with protein B, then protein A is eliminated and all
+# the peptides are considered as evidence for protein B. Note that this
+# filtering is done based on the complete set of peptides in the database, not
+# based on the identified peptides in the search results. Alternatively, if this
+# option is set and if all of the identified peptides associated with protein B
+# are also associated with protein A, then Percolator will report a
+# comma-separated list of protein IDs, where the full-length protein B is first
+# in the list and the fragment protein A is listed second. Not available for
+# Fido.
+# Available for crux percolator
+protein-report-fragments=false
+
+# If multiple database proteins contain exactly the same set of peptides, then
+# Percolator will randomly discard all but one of the proteins. If this option
+# is set, then the IDs of these duplicated proteins will be reported as a
+# comma-separated list. Not available for Fido.
+# Available for crux percolator
+protein-report-duplicates=false
+
+# Use the Fido algorithm to infer protein probabilities. Must be true to use any
+# of the Fido options.
+# Available for crux percolator
+protein=false
+
+# Specify the probability with which a present protein emits an associated
+# peptide. Set by grid search (see --fido-gridsearch-depth parameter) if not
+# specified.
+# Available for crux percolator if --protein T is set.
+fido-alpha=0
+
+# Specify the probability of the creation of a peptide from noise. Set by grid
+# search (see --fido-gridsearch-depth parameter) if not specified.
+# Available for crux percolator if --protein T is set.
+fido-beta=0
+
+# Specify the prior probability that a protein is present in the sample. Set by
+# grid search (see --fido-gridsearch-depth parameter) if not specified.
+# Available for crux percolator if --protein T is set.
+fido-gamma=0
+
+# Estimate empirical p-values and q-values for proteins using target-decoy
+# analysis.
+# Available for crux percolator if --protein T is set.
+fido-empirical-protein-q=false
+
+# Set depth of the grid search for alpha, beta and gamma estimation.
+# Available for crux percolator if --protein T is set.
+fido-gridsearch-depth=0
+
+# Q-value threshold that will be used in the computation of the MSE and ROC AUC
+# score in the grid search.
+# Available for crux percolator if --protein T is set.
+fido-gridsearch-mse-threshold=0.05
+
+# By default, Percolator will examine the learned weights for each feature, and
+# if the weight appears to be problematic, then percolator will discard the
+# learned weights and instead employ a previously trained, static score vector.
+# This switch allows this error checking to be overriden.
+# Available for crux percolator.
+override=false
+
+# Use retention time features calculated as in "Improving tandem mass spectrum
+# identification using peptide retention time prediction across diverse
+# chromatography conditions" by Klammer AA, Yi X, MacCoss MJ and Noble WS.
+# (Analytical Chemistry. 2007 Aug 15;79(16):6111-8.).
+# Available for crux percolator
+klammer=false
+
+# Do not remove redundant peptides; keep all PSMs and exclude peptide level
+# probability.
+# Available for crux percolator
+only-psms=false
+
+# Include a decoy version of every peptide by shuffling or reversing the target
+# sequence or protein. In shuffle or peptide-reverse mode, each peptide is
+# either reversed or shuffled, leaving the N-terminal and C-terminal amino acids
+# in place. Note that peptides appear multiple times in the target database are
+# only shuffled once. In peptide-reverse mode, palindromic peptides are
+# shuffled. Also, if a shuffled peptide produces an overlap with the target or
+# decoy database, then the peptide is re-shuffled up to 5 times. Note that,
+# despite this repeated shuffling, homopolymers will appear in both the target
+# and decoy database. The protein-reverse mode reverses the entire protein
+# sequence, irrespective of the composite peptides.
+# Available for tide-index
+decoy-format=shuffle
+
+# Expression for static and variable mass modifications to include. Specify a
+# comma-separated list of modification sequences of the form:
+# C+57.02146,2M+15.9949,1STY+79.966331,...
+# Available for tide-index
+mods-spec=C+57.02146
+
+# Specifies N-terminal static and variable mass modifications on peptides.
+# Specify a comma-separated list of N-terminal modification sequences of the
+# form: 1E-18.0106,C-17.0265
+# Available for tide-index
+nterm-peptide-mods-spec=
+
+# Specifies C-terminal static and variable mass modifications on peptides.
+# Specify a comma-separated list of C-terminal modification sequences of the
+# form: X+21.9819
+# Available for tide-index
+cterm-peptide-mods-spec=
+
+# Specify the name of the file where the binarized fragmentation spectra will be
+# stored. Subsequent runs of crux tide-search will execute more quickly if
+# provided with the spectra in binary format. The filename is specified relative
+# to the current working directory, not the Crux output directory (as specified
+# by --output-dir). This option is not valid if multiple input spectrum files
+# are given.
+# Available for tide-search
+store-spectra=
+
+# Enable the calculation of exact p-values for the XCorr score. Calculation of
+# p-values increases the running time but increases the number of
+# identifications at a fixed confidence threshold. The p-values will be reported
+# in a new column with header "exact p-value", and the "xcorr score" column will
+# be replaced with a "refactored xcorr" column. Note that, currently, p-values
+# can only be computed when the mz-bin-width parameter is set to its default
+# value. Variable and static mods are allowed on non-terminal residues in
+# conjunction with p-value computation, but currently only static mods are
+# allowed on the N-terminus, and no mods on the C-terminus.
+# Available for tide-search
+exact-p-value=false
+
+# When providing a FASTA file as the index, the generated binary index will be
+# stored at the given path. This option has no effect if a binary index is
+# provided as the index.
+# Available for tide-search
+store-index=
+
+# When set to T, target and decoy search results are reported in a single file,
+# and only the top-scoring N matches (as specified via --top-match) are reported
+# for each spectrum, irrespective of whether the matches involve target or decoy
+# peptides.
+# Available for tide-search
+concat=false
+
+# Include the file column in tab-delimited output.
+# Available for tide-search
+file-column=true
+
+# If true, all peaks around the precursor m/z will be removed, within a range
+# specified by the --remove-precursor-tolerance option.
+# Available for tide-search.
+remove-precursor-peak=false
+
+# This parameter specifies the tolerance (in Th) around each precursor m/z that
+# is removed when the --remove-precursor-peak option is invoked.
+# Available for print-processed spectra and tide-search.
+remove-precursor-tolerance=1.5
+
+# When set to T, for each protein that begins with methionine, tide-index will
+# put two copies of the leading peptide into the index, with and without the
+# N-terminal methionine.
+# Available for tide-index.
+clip-nterm-methionine=false
+
+# Prevent duplicate peptides between the target and decoy databases. When set to
+# "F", the program keeps all target and previously generated decoy peptides in
+# memory. A shuffled decoy will be re-shuffled multiple times to avoid
+# duplication. If a non-duplicated peptide cannot be generated, the decoy is
+# skipped entirely. When set to "T", every decoy is added to the database
+# without checking for duplication. This option reduces the memory requirements
+# significantly.
+# Available for tide-index.
+allow-dups=false
+
+# Controls whether neutral loss ions are considered in the search. Two types of
+# neutral losses are included and are applied only to singly charged b- and
+# y-ions: loss of ammonia (NH3, 17.0086343 Da) and H2O (18.0091422). Each
+# neutral loss peak has intensity 1/5 of the primary peak.
+# Available for tide-search.
+use-neutral-loss-peaks=true
+
+# The maximum charge state of a spectra to consider in search.
+# Available for tide-search.
+max-precursor-charge=5
+
+# Carries out a peptide-centric search. For each peptide the top-scoring spectra
+# are reported, in contrast to the standard spectrum-centric search where the
+# top-scoring peptides are reported. Note that in this case the "xcorr rank"
+# column will contain the rank of the given spectrum with respect to the given
+# candidate peptide, rather than vice versa (which is the default).
+# Available for tide-search.
+peptide-centric-search=false
+
+# Skip preprocessing steps on spectra. Default = F.
+# Available for tide-search
+skip-preprocessing=false
+
+# List of positive, non-zero integers.
+# Isotope errors to include. Specify a comma-separated list of isotope errors of
+# the form: 1,2,3,...Available for tide-search
+isotope-error=
+
+# 0=poll CPU to set num threads; else specify num threads directly.
+# Available for tide-search tab-delimited files only.
+num-threads=0
+
+# Analysis begins with a pre-processsing step that creates a set of lookup
+# tables which are then used during training. Normally, these lookup tables are
+# deleted at the end of the analysis, but setting this option to T prevents the
+# deletion of these tables. Subsequently, analyses can be repeated more
+# efficiently by specifying the --re-run option.
+# Available for q-ranker and barista.
+skip-cleanup=false
+
+# Re-run a previous analysis using a previously computed set of lookup tables.
+# For this option to work, the --skip-cleanup option must have been set to true
+# when the program was run the first time.
+# Available for q-ranker and barista.
+re-run=
+
+# Use an enriched feature set, including separate features for each ion type.
+# Available for q-ranker and barista.
+use-spec-features=true
+
+# If the target and decoy searches were run separately, rather than using a
+# concatenated database, then the program will assume that the database search
+# results provided as a required argument are from the target database search.
+# This option then allows the user to specify the location of the decoy search
+# results. Like the required arguments, these search results can be provided as
+# a single file, a list of files or a directory. However, the choice (file, list
+# or directory) must be consistent for the MS2 files and the target and decoy
+# tab-delimited files. Also, if the MS2 and tab-delimited files are provided in
+# directories, then Q-ranker will use the MS2 filename (foo.ms2) to identify
+# corresponding target and decoy tab-delimited files with names like
+# foo*.target.txt and foo*.decoy.txt. This naming convention allows the target
+# and decoy txt files to reside in the same directory.
+# Available for q-ranker and barista.
+separate-searches=
+
+# Specify that the search results are provided as lists of files, rather than as
+# individual files.
+# Available for barista and percolator.
+list-of-files=false
+
+# Specifies whether to do optimization at the protein, peptide or psm level.
+# Available for barista.
+optimization=protein
+
+# Specify the method used to estimate q-values.  The mix-max procedure or
+# target-decoy competition apply to PSMs. The peptide-level option eliminates
+# any PSM for which there exists a better scoring PSM involving the same
+# peptide, and then uses decoys to assign confidence estimates.
+# Used by assign-confidence.
+estimation-method=tdc
+
+# Adjust the score using the Sidak adjustment and reports them in a new column
+# in the output file. Note that this adjustment only makes sense if the given
+# scores are p-values, and that it requires the presence of the "distinct
+# matches/spectrum" feature for each PSM.
+# Used by assign-confidence.
+sidak=false
+
+# Specify the column (for tab-delimited input) or tag (for XML input) used as
+# input to the q-value estimation procedure. If this parameter is unspecified,
+# then the program searches for "xcorr score", "evalue" (comet), "exact p-value"
+# score fields in this order in the input file. 
+# Used by assign-confidence.
+score=
+
+# Specify this parameter to T in order to combine charge states with peptide
+# sequencesin peptide-centric search. Works only if estimation-method =
+# peptide-level.
+# Used by assign-confidence.
+combine-charge-states=false
+
+# Specify this parameter to T in order to treat peptides carrying different or
+# no modifications as being the same. Works only if estimation = peptide-level.
+# Used by assign-confidence.
+combine-modified-peptides=false
+
+# The q-value threshold used by cascade search. Each spectrum identified in one
+# search with q-value less than this threshold will be excluded from all
+# subsequent searches.
+# Used by Cascade-Search
+q-value-threshold=0.01
+
+# Predict the specified primary ion series. 'a' indicates a-ions only, 'b'
+# indicates b-ions only, 'y' indicates y-ions only, 'by' indicates both b and y,
+# 'bya' indicates b, y, and a.
+# Only available for crux-predict-peptide-ions. Set automatically to 'by' for
+# searching.
+primary-ions=by
+
+# Predict the precursor ions, and all associated ions (neutral losses, multiple
+# charge states) consistent with the other specified options.
+# Only available for crux-predict-peptide-ions.
+precursor-ions=false
+
+# Predict the given number of isotope peaks (0|1|2).
+# Only available for crux-predict-peptide-ion.  Automatically set to 0 for Sp
+# scoring and 1 for xcorr scoring.
+isotope=0
+
+# Predict flanking peaks for b- and y ions.
+# Only available for crux-predict-peptide-ion.
+flanking=false
+
+# Predict theoretical ions up to max charge state (1, 2, ... ,6) or up to the
+# charge state of the peptide ("peptide"). If the max-ion-charge is greater than
+# the charge state of the peptide, then the maximum is the peptide charge. 
+# Available for predict-peptide-ions and search-for-xlinks. Set to 'peptide' for
+# search.
+max-ion-charge=peptide
+
+# Include among the predicted peaks b/y ions with up to n losses of nh3. For
+# example, for --nh3 2, predict a peak for each b- and y-ion with the loss of
+# one nh3 group and predict a second peak for each b- and y-ion with the loss of
+# two nh3 groups. These peaks will have 1 and 2, respectively, in the NH3 column
+# of the output.
+# Only available for crux-predict-peptide-ions.
+nh3=0
+
+# Include in the predicted peaks, b/y ions with the loss of 1 to n water
+# molecules. See --nh3 for an example.
+# Only available for crux-predict-peptide-ions.
+h2o=0
+
+# The name of the file in FASTA format.
+# Option for spectral-counts
+protein-database=
+
+# Type of analysis to make on the match results: (RAW|NSAF|dNSAF|SIN|EMPAI).
+# With exception of the RAW metric, the database of sequences need to be
+# provided using --protein-database.
+# Available for spectral-counts.  RAW is raw counts, NSAF is Normalized Spectral
+# Abundance Factor, dNSAF is Distributed Spectral Abundance Factor, SIN is
+# Spectral Index Normalized and EMPAI is Exponentially Modified Protein
+# Abundance Index
+measure=NSAF
+
+# Ignore peptides that map to multiple proteins.
+# Available for spectral-counts.
+unique-mapping=false
+
+# Quantification at protein or peptide level.
+# Available for spectral-counts and either NSAF and SIN.
+quant-level=protein
+
+# Perform a parsimony analysis on the proteins, and report a "parsimony rank"
+# column in the output file. This column contains integers indicating the
+# protein's rank in a list sorted by spectral counts. If the parsimony analysis
+# results in two proteins being merged, then their parsimony rank is the same.
+# In such a case, the rank is assigned based on the largest spectral count of
+# any protein in the merged meta-protein. The "simple" parsimony algorithm only
+# merges two proteins A and B if the peptides identified in protein A are the
+# same as or a subset of the peptides identified in protein B. The "greedy"
+# parsimony algorithm does additional merging, using the peptide q-values to
+# greedily assign each peptide to a single protein.
+# Available for spectral-counts.
+parsimony=none
+
+# Determines what type of threshold to use when filtering matches. none : read
+# all matches, qvalue : use calculated q-value from percolator or q-ranker,
+# custom : use --custom-threshold-name and --custom-threshold-min parameters.
+# used for crux spectral-counts
+threshold-type=qvalue
+
+# Only consider PSMs with a threshold value. By default, q-values are
+# thresholded using a specified threshold value. This behavior can be changed
+# using the --custom-threshold and --threshold-min parameters.
+# Available for spectral-counts. All PSMs with higher (or lower) than this will
+# be ignored.
+threshold=0.01
+
+# Specify which field to apply the threshold to. The direction of the threshold
+# (<= or >=) is governed by --custom-threshold-min. By default, the threshold
+# applies to the q-value, specified by "percolator q-value", "q-ranker q-value",
+# "decoy q-value (xcorr)", or "barista q-value".
+# Available for spectral-counts.
+custom-threshold-name=
+
+# When selecting matches with a custom threshold, custom-threshold-min
+# determines whether to filter matches with custom-threshold-name values that
+# are greater-than or equal (F) or less-than or equal (T) than the threshold.
+# Available for spectral-counts.
+custom-threshold-min=true
+
+# MS2 file corresponding to the psm file. Required to measure the SIN. Ignored
+# for NSAF, dNSAF and EMPAI.
+# Available for spectral-counts with measure=SIN.
+input-ms2=
+
+# Use mzid's passThreshold attribute to filter matches.
+# Used when parsing mzIdentML files.
+mzid-use-pass-threshold=false
+
+# Change the mass of all amino acids 'A' by the given amount.
+# 
+A=0
+
+# Change the mass of all amino acids 'C' by the given amount.
+# 
+C=57.021464
+
+# Change the mass of all amino acids 'D' by the given amount.
+# 
+D=0
+
+# Change the mass of all amino acids 'E' by the given amount.
+# 
+E=0
+
+# Change the mass of all amino acids 'F' by the given amount.
+# 
+F=0
+
+# Change the mass of all amino acids 'G' by the given amount.
+# 
+G=0
+
+# Change the mass of all amino acids 'H' by the given amount.
+# 
+H=0
+
+# Change the mass of all amino acids 'I' by the given amount.
+# 
+I=0
+
+# Change the mass of all amino acids 'K' by the given amount.
+# 
+K=0
+
+# Change the mass of all amino acids 'L' by the given amount.
+# 
+L=0
+
+# Change the mass of all amino acids 'M' by the given amount.
+# 
+M=0
+
+# Change the mass of all amino acids 'N' by the given amount.
+# 
+N=0
+
+# Change the mass of all amino acids 'P' by the given amount.
+# 
+P=0
+
+# Change the mass of all amino acids 'Q' by the given amount.
+# 
+Q=0
+
+# Change the mass of all amino acids 'R' by the given amount.
+# 
+R=0
+
+# Change the mass of all amino acids 'S' by the given amount.
+# 
+S=0
+
+# Change the mass of all amino acids 'T' by the given amount.
+# 
+T=0
+
+# Change the mass of all amino acids 'V' by the given amount.
+# 
+V=0
+
+# Change the mass of all amino acids 'W' by the given amount.
+# 
+W=0
+
+# Change the mass of all amino acids 'Y' by the given amount.
+# 
+Y=0
+
+# Legal values are auto, tsv, sqt, pepxml or mzidentml format.
+# option, for psm-convert
+input-format=auto
+
+# Whether matches/ion are distinct (as opposed to total).
+# option, for psm-convert.
+distinct-matches=true
+
+# Rather than the spectrum, output summary statistics to standard output. Each
+# statistic is placed on a separate line, in the format <name>:<value> (e.g.
+# "TIC:1000.0").
+# Available only for crux-get-ms2-spectrum.  Does not affect contents of the
+# output file.
+stats=false
+
+# write out the weibull training points for thespectrum,charge
+# Available for crux search-for-xlinks
+write-weibull-points=false
+
+# Print the theoretical spectrum
+# Available for xlink-predict-peptide-ions.
+print-theoretical-spectrum=false
+
+# Use the old version of xlink-searching algorithm. When false, a new version of
+# the code is run. The new version supports variable modifications and can
+# handle more complex databases. This new code is still in development and
+# should be considered a beta release.
+# Available for search-for-xlinks program.
+use-old-xlink=true
+
+# Score method for xlink {composite, modification, concatenated}.
+# Available for xlink-score-spectrum.
+xlink-score-method=composite
+
+# Provides a list of isotopic windows to search. For example, -1,0,1 will search
+# in three disjoint windows: (1) precursor_mass - neutron_mass +/- window, (2)
+# precursor_mass +/- window, and (3) precursor_mass + neutron_mass +/- window.
+# The window size is defined from the precursor-window and precursor-window-type
+# parameters. This option is only available when use-old-xlink=F.
+# Used for crux search-for-xlinks
+isotope-windows=0
+
+# Top-n open-mod peptides to consider in the second pass, value of 0 will search
+# all candiates.
+# Available for crux search-for-xlinks
+xlink-top-n=250
+
+# If there is no cross-link candidate found, then don't bother looking for
+# linear, self-loop, and dead-link candidates.
+# Available for crux search-for-xlinks program.
+require-xlink-candidate=false
+
+# Include linear peptides in the search.
+# Available for crux search-for-xlinks program.
+xlink-include-linears=true
+
+# Include dead-end peptides in the search.
+# Available for crux search-for-xlinks program.
+xlink-include-deadends=true
+
+# Include self-loop peptides in the search.
+# Available for crux search-for-xlinks program.
+xlink-include-selfloops=true
+
+# Include intra-protein cross-link candiates within the search.
+# Available for crux search-for-xlinks program.
+xlink-include-intra=true
+
+# Include inter-protein cross-link candidates within the search.
+# Available for crux search-for-xlinks program.
+xlink-include-inter=true
+
+# Include crosslink candidates that are both inter and intra.
+# Available for crux search-for-xlinks program.
+xlink-include-inter-intra=true
+
+# List of amino acids for which the cross-linker can prevent cleavage. This
+# option is only available when use-old-xlink=F.
+# Available for search-for-xlinks program.
+xlink-prevents-cleavage=K
+
+# Specify the maximum number of modifications allowed on a crosslinked peptide.
+# This option is only available when use-old-xlink=F.
+# Available for crux search-for-xlinks
+max-xlink-mods=255
+
+# Search decoy peptides within +/- precursor-window-weibull of the precursor
+# mass. The resulting scores are used only for fitting the Weibull distribution
+# Available for crux search-for-xlinks. 
+precursor-window-weibull=20
+
+# Window type to use in conjunction with the precursor-window-weibull parameter.
+# Available for crux search-for-xlinks
+precursor-window-type-weibull=mass
+
+# Keep shuffling and collecting XCorr scores until the minimum number of points
+# for weibull fitting (using targets and decoys) is achieved.
+# Available for crux search-for-xlinks
+min-weibull-points=4000
+
+# Determines which spectral feature detection algorithm to use. Different
+# results are possible with each algorithm, and there are pros and cons to each.
+# Available for crux hardklor
+hardklor-algorithm=version1
+
+# Defines alternative averagine models in the analysis that incorporate
+# additional atoms and/or isotopic enrichments. Modifications are represented as
+# text strings. Inclusion of additional atoms in the model is done using by
+# entering an atomic formula, such as: PO2 or Cl. Inclusion of isotopic
+# enrichment to the model is done by specifying the percent enrichment (as a
+# decimal) followed by the atom being enriched and an index of the isotope. For
+# example, 0.75H1 specifies 75% enrichment of the first heavy isotope of
+# hydrogen. In other words, 75% deuterium enrichment. Two or more modifications
+# can be combined into the same model, and separated by spaces: B2 0.5B1
+# Available for crux hardklor
+averagine-mod=
+
+# Boxcar averaging is a sliding window that averages n adjacent spectra prior to
+# feature detection. Averaging generally improves the signal-to-noise ratio of
+# features in the spectra, as well as improving the shape of isotopic envelopes.
+# However, averaging will also change the observed peak intensities. Averaging
+# with too wide a window will increase the occurrence of overlapping features
+# and broaden the chromatographic profiles of observed features. The number
+# specified is the total adjacent scans to be combined, centered on the scan
+# being analyzed. Therefore, an odd number is recommended to center the boxcar
+# window. For example, a value of 3 would produce an average of the scan of
+# interest, plus one scan on each side. A value of 0 disables boxcar averaging.
+# Available for crux hardklor
+boxcar-averaging=0
+
+# This parameter is only functional when boxcar-averaging is used. The filter
+# will remove any peaks not seen in n scans in the boxcar window. The effect is
+# to reduce peak accumulation due to noise and reduce chromatographic broadening
+# of peaks. Caution should be used as over-filtering can occur. The suggested
+# number of scans to set for filtering should be equal to or less than the
+# boxcar-averaging window size. A value of 0 disables filtering.
+# Available for crux hardklor
+boxcar-filter=0
+
+# This parameter is only functional when boxcar-filter is used. The value
+# specifies the mass tolerance in ppm for declaring a peak the same prior to
+# filtering across all scans in the boxcar window.
+# Available for crux hardklor
+boxcar-filter-ppm=10
+
+# Indicates whether the data contain profile or centroided peaks.
+# Available for crux hardklor
+centroided=false
+
+# Choose the charge state determination method.
+# Available for crux hardklor
+cdm=Q
+
+# Specifies the minimum charge state to allow when finding spectral features. It
+# is best to set this value to the lowest assumed charge state to be present. If
+# set higher than actual charge states that are present, those features will not
+# be identified or incorrectly assigned a different charge state and mass.
+# Available for crux hardklor
+min-charge=1
+
+# Specifies the maximum charge state to allow when finding spectral features. It
+# is best to set this value to a practical number (i.e. do not set it to 20 when
+# doing a tryptic shotgun analysis). If set higher than actual charge states
+# that are present, the algorithm will perform significantly slower without any
+# improvement in results.
+# Available for crux hardklor
+max-charge=5
+
+# Sets the correlation threshold (cosine similarity) for accepting each
+# predicted feature.
+# Available for crux hardklor
+corr=0.85
+
+# Sets the depth of combinatorial analysis. For a given set of peaks in a
+# spectrum, search for up to this number of combined peptides that explain the
+# observed peaks. The analysis stops before depth is reached if the current
+# number of deconvolved features explains the observed peaks with a correlation
+# score above the threshold defined with the correlation parameter.
+# Available for crux hardklor
+depth=3
+
+# When reporting each feature, report abundance as the sum of all isotope peaks.
+# The value reported is the estimate of the correct peak heights based on the
+# averagine model scaled to the observed peak heights.
+# Available for crux hardklor
+distribution-area=false
+
+# Specifies an ASCII text file that defines symbols for the periodic table.
+# Available for crux hardklor
+hardklor-data-file=
+
+# Indicates the type of instrument used to collect data. This parameter,
+# combined with the resolution parameter, define how spectra will be centroided
+# (if you provide profile spectra) and the accuracy when aligning observed peaks
+# to the models.
+# Available for crux hardklor
+instrument=fticr
+
+# Specifies an ASCII text file that can be read to override the natural isotope
+# abundances for all elements.
+# Available for crux hardklor
+isotope-data-file=
+
+# Specifies the maximum number of models to build for a set of peaks being
+# analyzed. Regardless of the setting, the number of models will never exceed
+# the number of peaks in the current set. However, as many of the low abundance
+# peaks are noise or tail ends of distributions, defining models for them is
+# detrimental to the analysis.
+# Available for crux hardklor
+max-features=10
+
+# Filters the spectra prior to analysis for the requested MS/MS level. For
+# example, if the data contain MS and MS/MS spectra, setting mzxml-filter = 1
+# will analyze only the MS scan events. Setting mzxml-filter = 2 will analyze
+# only the MS/MS scan events.
+# Available for crux hardklor
+mzxml-filter=1
+
+# Constrains the search in each spectrum to signals below this value in
+# Thomsons. Setting to 0 disables this feature.
+# Available for crux hardklor
+mz-max=0
+
+# Constrains the search in each spectrum to signals above this value in
+# Thomsons. Setting to 0 disables this feature.
+# Available for crux hardklor
+mz-min=0
+
+# Only used when algorithm = version1. Defines the maximum window size in
+# Thomsons to analyze when deconvolving peaks in a spectrum into features.
+# Available for crux hardklor
+mz-window=4
+
+# Specifies the resolution of the instrument at 400 m/z for the data being
+# analyzed.
+# Available for crux hardklor
+resolution=100000
+
+# Used to restrict analysis to spectra with scan numbers below this parameter
+# value. A value of 0 disables this feature.
+# Available for crux hardklor
+scan-range-max=0
+
+# Used to restrict analysis to spectra with scan numbers above this parameter
+# value. A value of 0 disables this feature.
+# Available for crux hardklor
+scan-range-min=0
+
+# Set the sensitivity level. There are four levels: 0 (low), 1 (moderate), 2
+# (high), and 3 (max). Increasing the sensitivity will increase computation
+# time, but will also yield more isotope distributions.
+# Available for crux hardklor
+sensitivity=2
+
+# Filters spectra to remove peaks below this signal-to-noise ratio prior to
+# finding features.
+# Available for crux hardklor
+signal-to-noise=1
+
+# Uses Savitzky-Golay smoothing on profile peak data prior to centroiding the
+# spectra. This parameter is recommended for low resolution spectra only.
+# Smoothing data causes peak depression and broadening. Only use odd numbers for
+# the degree of smoothing (as it defines a window centered on each data point).
+# Higher values will produce smoother peaks, but with greater depression and
+# broadening. Setting this parameter to 0 disables smoothing.
+# Available for crux hardklor
+smooth=0
+
+# Set the signal-to-noise window length (in m/z). Because noise may be
+# non-uniform across a spectrum, this value adjusts the segment size considered
+# when calculating a signal-over-noise ratio.
+# Available for crux hardklor
+sn-window=250
+
+# Applies the lowest noise threshold of any sn_window across the entire mass
+# range for a spectrum. Setting this parameter to 0 turns off this feature, and
+# different noise thresholds will be used for each local mass window in a
+# spectrum.
+# Available for crux hardklor
+static-sn=true
+
+# Ignore PPIDs that persist for longer than this length of time in the MS1
+# spectra. The unit of time is whatever unit is used in your data file (usually
+# minutes). These PPIDs are considered contaminants.
+# Available for crux bullseye
+max-persist=2
+
+# When true, require an exact match (as defined by --exact-tolerance) between
+# the center of the precursor isolation window in the MS2 scan and the base
+# isotopic peak of the PPID. If this option is set to false and no exact match
+# is observed, then attempt to match using a wider m/z tolerance. This wider
+# tolerance is calculated using the PPID's monoisotopic mass and charge (the
+# higher the charge, the smaller the window).
+# Available for crux bullseye
+exact-match=false
+
+# Allowed gap size when checking for PPIDs across consecutive MS1 scans.
+# Available for crux bullseye
+gap-tolerance=1
+
+# Only consider PPIDs above this minimum mass in daltons.
+# Available for crux bullseye
+bullseye-min-mass=600
+
+# Only consider PPIDs below this maximum mass in daltons.
+# Available for crux bullseye
+bullseye-max-mass=8000
+
+# Set the tolerance (+/-ppm) for --exact-match.
+# Available for crux bullseye
+exact-tolerance=10
+
+# Set the mass tolerance (+/-ppm) for finding PPIDs in consecutive MS1 scans.
+# Available for crux bullseye
+persist-tolerance=10
+
+# Total number of MS1 scans over which a PPID must be observed to be considered
+# real. Gaps in persistence are allowed by setting --gap-tolerance.
+# Available for crux bullseye
+scan-tolerance=3
+
+# Set the tolerance (+/-units) around the retention time over which a PPID can
+# be matches to the MS2 spectrum. The unit of time is whatever unit is used in
+# your data file (usually minutes).
+# Available for crux bullseye
+retention-tolerance=0.5
+
+# The format to write the output spectra to. If empty, the spectra will be
+# output in the same format as the MS2 input.
+# Available for crux bullseye
+spectrum-format=
+
+# Sort in ascending (T) or descending (F) order.
+# Available for sort-by-column
+ascending=true
+
+# Specify the input and output delimiter to use when processing the delimited
+# file.  The argument can be either a single character or the keyword 'tab.'
+# Available for the delimited utility programs.
+delimiter=tab
+
+# Print the header line of the file, in addition to the columns that match.
+# Available for crux extract-columns and extract-rows
+header=true
+
+# Specifies the data type of the column, either an integer (int), a floating
+# point number (real), or a string.
+# Available for crux extract-rows
+column-type=string
+
+# Specify the operator that is used to compare an entry in the specified column
+# to the value given on the command line.
+# Available for crux extract-rows
+comparison=eq
+
+# Run the Bullseye algorithm on the given MS data, using it to assign
+# high-resolution precursor values to the MS/MS data. If a spectrum file ends
+# with .ms2 or .cms2, matching .ms1/.cms1 files will be used as the MS1 file.
+# Otherwise, it is assumed that the spectrum file contains both MS1 and MS2
+# scans.
+# Available for crux pipeline
+bullseye=false
+
+# Specify which search engine to use.
+# Available for crux pipeline
+search-engine=tide-search
+
+# Specify which post-processor to apply to the search results.
+# Available for crux pipeline
+post-processor=percolator
+
+# Minimum precursor m/z value to use in measurement error estimation.
+# Available for param-medic and tide-search and comet
+pm-min-precursor-mz=400
+
+# Minimum precursor m/z value to use in measurement error estimation.
+# Available for param-medic and tide-search and comet
+pm-max-precursor-mz=1800
+
+# Minimum fragment m/z value to use in measurement error estimation.
+# Available for param-medic and tide-search and comet
+pm-min-frag-mz=150
+
+# Maximum fragment m/z value to use in measurement error estimation.
+# Available for param-medic and tide-search and comet
+pm-max-frag-mz=1800
+
+# Minimum fragment peaks an MS/MS scan must contain to be used in measurement
+# error estimation.
+# Available for param-medic and tide-search and comet
+pm-min-scan-frag-peaks=40
+
+# Maximum ppm distance between precursor m/z values to consider two scans
+# potentially generated by the same peptide for measurement error estimation.
+# Available for param-medic and tide-search and comet
+pm-max-precursor-delta-ppm=50
+
+# Precursor charge state to consider MS/MS spectra from, in measurement error
+# estimation. Ideally, this should be the most frequently occurring charge state
+# in the given data.
+# Available for param-medic and tide-search and comet
+pm-charge=2
+
+# Number of most-intense fragment peaks to consider for measurement error
+# estimation, per MS/MS spectrum.
+# Available for param-medic and tide-search and comet
+pm-top-n-frag-peaks=30
+
+# Number of fragment peaks per spectrum pair to be used in fragment error
+# estimation.
+# Available for param-medic and tide-search and comet
+pm-pair-top-n-frag-peaks=5
+
+# Number of the most-intense peaks that two spectra must share in order to
+# potentially be generated by the same peptide, for measurement error
+# estimation.
+# Available for param-medic and tide-search and comet
+pm-min-common-frag-peaks=20
+
+# Maximum number of scans two spectra can be separated by in order to be
+# considered potentially generated by the same peptide, for measurement error
+# estimation.
+# Available for param-medic and tide-search and comet
+pm-max-scan-separation=1000
+
+# Minimum number of peak pairs (for precursor or fragment) that must be
+# successfully paired in order to attempt to estimate measurement error
+# distribution.
+# Available for param-medic and tide-search and comet
+pm-min-peak-pairs=100
+
+# Consider modifications on any amino acid in aa list with at most
+# max-per-peptide in one peptide. The parameter takes the form
+# <mass change>:<aa list>:<max per
+# peptide>:<prevents cleavage>:<prevents cross-link>. This parameter
+# may be included with different values multiple times so long as the
+# total number of mod, cmod, and nmod parameters does not exceed 11. The
+# "prevents cleavage" and "prevents cross-link" arguments are optional
+# T/F arguments for describing whether the modification prevents
+# enzymatic cleavage of cross-linking, respectively. This option is only
+# available when use-old-xlink=F. Note that this parameter only takes
+# effect when specified in the parameter file.
+# Available for search-for-xlinks.
+mod=NO MODS
+
+# Specify a variable modification to apply to N-terminus of peptides. 
+# <mass change>:<max distance from protein n-term (-1 for no max)> Note
+# that this parameter only takes effect when specified in the parameter
+# file.
+# Available for search-for-xlinks.
+nmod=NO MODS
+
+# Specify a variable modification to apply to C-terminus of peptides.
+# <mass change>:<max distance from protein c-term (-1 for no max)>. Note
+# that this parameter only takes effect when specified in the parameter
+# file.
+# Available for search-for-xlinks.
+cmod=NO MODS
+
+####################
+# Comet Parameters #
+####################
+# 0=no, 1=concatenated search, 2=separate search.
+# Available for comet.
+decoy_search=0
+
+# 0=poll CPU to set num threads; else specify num threads directly.
+# Available for comet.
+num_threads=0
+
+# Controls the mass tolerance value.  The mass tolerance is set at +/- the
+# specified number i.e. an entered value of "1.0" applies a -1.0 to +1.0
+# tolerance. The units of the mass tolerance is controlled by the parameter
+# "peptide_mass_units". 
+# Available for comet.
+peptide_mass_tolerance=3
+
+# 0=amu, 1=mmu, 2=ppm.
+# Available for comet.
+peptide_mass_units=0
+
+# Automatically estimate optimal value for the peptide_mass_tolerancel parameter
+# from the spectra themselves. false=no estimation, warn=try to estimate but use
+# the default value in case of failure, fail=try to estimate and quit in case of
+# failure.
+# Available for comet.
+auto_peptide_mass_tolerance=false
+
+# 0=average masses, 1=monoisotopic masses.
+# Available for comet.
+mass_type_parent=1
+
+# 0=average masses, 1=monoisotopic masses.
+# Available for comet.
+mass_type_fragment=1
+
+# 0=singly charged peptide mass, 1=precursor m/z.
+# Available for comet.
+precursor_tolerance_type=0
+
+# 0=off, 1=on -1/0/1/2/3 (standard C13 error), 2=-8/-4/0/4/8 (for +4/+8
+# labeling).
+# Available for comet.
+isotope_error=0
+
+# Specify a search enzyme from the end of the parameter file.
+# Available for comet.
+search_enzyme_number=1
+
+# valid values are 1 (semi-digested), 2 (fully digested), 8 N-term, 9 C-term.
+# Available for comet.
+num_enzyme_termini=2
+
+# Maximum value is 5; for enzyme search.
+# Available for comet.
+allowed_missed_cleavage=2
+
+# Binning to use on fragment ions.
+# Available for comet.
+fragment_bin_tol=1.000507
+
+# Offset position to start the binning (0.0 to 1.0).
+# Available for comet.
+fragment_bin_offset=0.4
+
+# Automatically estimate optimal value for the fragment_bin_tol parameter from
+# the spectra themselves. false=no estimation, warn=try to estimate but use the
+# default value in case of failure, fail=try to estimate and quit in case of
+# failure.
+# Available for comet.
+auto_fragment_bin_tol=false
+
+# 0=default peak shape, 1=M peak only.
+# Available for comet.
+theoretical_fragment_ions=1
+
+# Controls whether or not A-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_A_ions=0
+
+# Controls whether or not B-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_B_ions=1
+
+# Controls whether or not C-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_C_ions=0
+
+# Controls whether or not X-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_X_ions=0
+
+# Controls whether or not Y-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_Y_ions=1
+
+# Controls whether or not Z-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_Z_ions=0
+
+# 0=no, 1= yes to consider NH3/H2O neutral loss peak.
+# Available for comet.
+use_NL_ions=1
+
+# 0=no, 1=yes  write sqt file.
+# Available for comet.
+output_sqtfile=0
+
+# 0=no, 1=yes  write tab-delimited text file.
+# Available for comet.
+output_txtfile=1
+
+# 0=no, 1=yes  write pep.xml file.
+# Available for comet.
+output_pepxmlfile=1
+
+# 0=no, 1=yes write percolator file.
+# Available for comet.
+output_percolatorfile=0
+
+# 0=no, 1=yes  write .out files.
+# Available for comet.
+output_outfiles=0
+
+# 0=no, 1=yes to replace Sp with expect in out & sqt.
+# Available for comet.
+print_expect_score=1
+
+# num peptide results to show.
+# Available for comet.
+num_output_lines=5
+
+# 0=no, 1=yes for out files only.
+# Available for comet.
+show_fragment_ions=0
+
+# Sample enzyme which is possibly different than the one applied to the search.
+# Used to calculate NTT & NMC in pepXML output.
+# Available for comet. 
+sample_enzyme_number=1
+
+# Start and scan scan range to search; 0 as first entry ignores parameter.
+# Available for comet.
+scan_range=0 0
+
+# Precursor charge range to analyze; does not override mzXML charge; 0 as first
+# entry ignores parameter.
+# Available for comet.
+precursor_charge=0 0
+
+# Specifies the whether to override existing precursor charge state information
+# when present in the files with the charge range specified by the
+# "precursor_charge" parameter.
+# Available for comet.
+override_charge=0
+
+# MS level to analyze, valid are levels 2 or 3.
+# Available for comet. 
+ms_level=2
+
+# Specifies which scan types are searched.
+# Available for comet. 
+activation_method=ALL
+
+# MH+ peptide mass range to analyze.
+# Available for comet.
+digest_mass_range=600.0 5000.0
+
+# Number of search hits to store internally.
+# Available for comet.
+num_results=50
+
+# For '.out' file output only, 0=search everything again, 1=don't search if .out
+# exists.
+# Available for comet.
+skip_researching=1
+
+# Set maximum fragment charge state to analyze (allowed max 5).
+# Available for comet.
+max_fragment_charge=3
+
+# Set maximum precursor charge state to analyze (allowed max 9).
+# Available for comet.
+max_precursor_charge=6
+
+# 0=proteinDB, 1-6, 7=forward three, 8=reverse three, 9=all six.
+# Available for comet.
+nucleotide_reading_frame=0
+
+# 0=leave sequences as-is; 1=also consider sequence w/o N-term methionine.
+# Available for comet.
+clip_nterm_methionine=0
+
+# Maximum number of spectra to search at a time; 0 to search the entire scan
+# range in one loop.
+# Available for comet.
+spectrum_batch_size=0
+
+# Specifies the prefix of the protein names that indicates a decoy.
+# Available for comet.
+decoy_prefix=decoy_
+
+# Specifies the suffix string that is appended to the base output name for the
+# pep.xml, pin.xml, txt and sqt output files.
+# Available for comet.
+output_suffix=
+
+# Specifies one or more mass offsets to apply. This value(s) are effectively
+# subtracted from each precursor mass such that peptides that are smaller than
+# the precursor mass by the offset value can still be matched to the respective
+# spectrum.
+# Available for comet.
+mass_offsets=
+
+# Minimum number of peaks in spectrum to search.
+# Available for comet.
+minimum_peaks=10
+
+# Minimum intensity value to read in.
+# Available for comet. 
+minimum_intensity=0
+
+# 0=no, 1=yes, 2=all charge reduced precursor peaks (for ETD).
+# Available for comet. 
+remove_precursor_peak=0
+
+# +- Da tolerance for precursor removal.
+# Available for comet. 
+remove_precursor_tolerance=1.5
+
+# For iTRAQ/TMT type data; will clear out all peaks in the specified m/z range.
+# Available for comet.
+clear_mz_range=0.0 0.0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod01=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod02=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod03=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod04=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod05=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod06=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod07=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod08=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod09=0.0 null 0 4 -1 0 0
+
+# Specifies the total/maximum number of residues that can be modified in a
+# peptide.
+# Available for comet.
+max_variable_mods_in_peptide=5
+
+# Controls whether the analyzed peptides must contain at least one variable
+# modification.
+# Available for comet.
+require_variable_mod=0
+
+# Specifiy a static modification to the c-terminus of all peptides.
+# Available for comet.
+add_Cterm_peptide=0
+
+# Specify a static modification to the n-terminus of all peptides.
+# Available for comet.
+add_Nterm_peptide=0
+
+# Specify a static modification to the c-terminal peptide of each protein.
+# Available for comet.
+add_Cterm_protein=0
+
+# Specify a static modification to the n-terminal peptide of each protein.
+# Available for comet.
+add_Nterm_protein=0
+
+# Specify a static modification to the residue A.
+# Available for comet.
+add_A_alanine=0
+
+# Specify a static modification to the residue B.
+# Available for comet.
+add_B_user_amino_acid=0
+
+# Specify a static modification to the residue C.
+# Available for comet.
+add_C_cysteine=57.021464
+
+# Specify a static modification to the residue D.
+# Available for comet.
+add_D_aspartic_acid=0
+
+# Specify a static modification to the residue E.
+# Available for comet.
+add_E_glutamic_acid=0
+
+# Specify a static modification to the residue F.
+# Available for comet.
+add_F_phenylalanine=0
+
+# Specify a static modification to the residue G.
+# Available for comet.
+add_G_glycine=0
+
+# Specify a static modification to the residue H.
+# Available for comet.
+add_H_histidine=0
+
+# Specify a static modification to the residue I.
+# Available for comet.
+add_I_isoleucine=0
+
+# Specify a static modification to the residue J.
+# Available for comet.
+add_J_user_amino_acid=0
+
+# Specify a static modification to the residue K.
+# Available for comet.
+add_K_lysine=0
+
+# Specify a static modification to the residue L.
+# Available for comet.
+add_L_leucine=0
+
+# Specify a static modification to the residue M.
+# Available for comet.
+add_M_methionine=0
+
+# Specify a static modification to the residue N.
+# Available for comet.
+add_N_asparagine=0
+
+# Specify a static modification to the residue O.
+# Available for comet.
+add_O_ornithine=0
+
+# Specify a static modification to the residue P.
+# Available for comet.
+add_P_proline=0
+
+# Specify a static modification to the residue Q.
+# Available for comet.
+add_Q_glutamine=0
+
+# Specify a static modification to the residue R.
+# Available for comet.
+add_R_arginine=0
+
+# Specify a static modification to the residue S.
+# Available for comet.
+add_S_serine=0
+
+# Specify a static modification to the residue T.
+# Available for comet.
+add_T_threonine=0
+
+# Specify a static modification to the residue U.
+# Available for comet.
+add_U_selenocysteine=0
+
+# Specify a static modification to the residue V.
+# Available for comet.
+add_V_valine=0
+
+# Specify a static modification to the residue W.
+# Available for comet.
+add_W_tryptophan=0
+
+# Specify a static modification to the residue X.
+# Available for comet.
+add_X_user_amino_acid=0
+
+# Specify a static modification to the residue Y.
+# Available for comet.
+add_Y_tyrosine=0
+
+# Specify a static modification to the residue Z.
+# Available for comet.
+add_Z_user_amino_acid=0
+
+#
+# COMET_ENZYME_INFO _must_ be at the end of this parameters file
+#
+[COMET_ENZYME_INFO]
+0.  No_enzyme                      0  -          -
+1.  Trypsin                        1  KR         P
+2.  Trypsin/P                      1  KR         -
+3.  Lys_C                          1  K          P
+4.  Lys_N                          0  K          -
+5.  Arg_C                          1  R          P
+6.  Asp_N                          0  D          -
+7.  CNBr                           1  M          -
+8.  Glu_C                          1  DE         P
+9.  PepsinA                        1  FL         P
+10. Chymotrypsin                   1  FWYL       P
diff --git a/doc/user/demos/demo1.sh b/doc/user/demos/demo1.sh
new file mode 100755
index 0000000..7c90a03
--- /dev/null
+++ b/doc/user/demos/demo1.sh
@@ -0,0 +1,34 @@
+#!/bin/bash -x
+# AUTHOR: WSN
+# CREATE DATE: 18 December 2013, Tokyo Narita airport
+
+# This file implements the commands described in ../search-tutorial.html.
+
+if [[ -e ../../../src/crux ]]; then
+  CRUX=../../../src/crux
+else
+  CRUX=../../../release/src/crux
+fi    
+    
+rm -rf yeast-index crux-output
+chmod +x ./tsv2html.py
+cp ../example-files/demo.ms2 .
+cp ../example-files/small-yeast.fasta .
+
+$CRUX tide-index small-yeast.fasta yeast-index
+
+$CRUX tide-search --compute-sp T demo.ms2 yeast-index
+$CRUX sort-by-column --column-type real --ascending F \
+      crux-output/tide-search.target.txt "xcorr score" \
+      > crux-output/tide-search.target.sort.txt
+head -11 crux-output/tide-search.target.sort.txt \
+     | ./tsv2html.py - \
+     > crux-output/tide-search.target.sort.html
+
+$CRUX percolator crux-output/tide-search.target.txt 
+$CRUX sort-by-column --column-type real --ascending F \
+      crux-output/percolator.target.psms.txt "percolator score" \
+      > crux-output/percolator.target.psms.sort.txt
+head -11 crux-output/percolator.target.psms.sort.txt \
+     | ./tsv2html.py - \
+     > crux-output/percolator.target.psms.sort.html
diff --git a/doc/user/demos/tsv2html.py b/doc/user/demos/tsv2html.py
new file mode 100755
index 0000000..06914a1
--- /dev/null
+++ b/doc/user/demos/tsv2html.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+# AUTHOR: William Stafford Noble
+# CREATE DATE: 13 Sep 2015
+import sys
+
+USAGE = """USAGE: tsv2html.py [options] <tab-delimited file>
+
+  Convert a tab-delimited text file an HTML table.  Use "-" to read
+  from stdin.
+
+  Options:
+    --title <string>   
+    --table-only
+"""
+
+title = ""
+tableOnly = False
+
+# Parse the command line.
+sys.argv = sys.argv[1:]
+while (len(sys.argv) > 1):
+  nextArg = sys.argv[0]
+  sys.argv = sys.argv[1:]
+  if (nextArg == "--title"):
+    title = sys.argv[1]
+    sys.argv = sys.argv[1:]
+  elif (nextArg == "--table-only"):
+    tableOnly = True
+  else:
+    sys.stderr.write("Invalid option (%s).\n" % nextArg)
+    sys.exit(1)
+if (len(sys.argv) != 1):
+  sys.stderr.write(USAGE)
+  sys.exit(1)
+tsvFileName = sys.argv[0]
+
+# Open the input file.
+if (tsvFileName == "-"):
+  tsvFile = sys.stdin
+else:
+  tsvFile = open(tsvFileName, "r")
+
+# Print the header.
+if (not tableOnly):
+  sys.stdout.write("<html>\n")
+  sys.stdout.write("<head>\n")
+  if (title != ""):
+    sys.stdout.write("<title>%s</title>\n" % title)
+  sys.stdout.write("</head>\n")
+  sys.stdout.write("<body bgcolor=\"#ffffff\">\n")
+  if (title != ""):
+    sys.stdout.write("<h1>%s</h1>" % title)
+sys.stdout.write("<table border cellspacing=0>\n")
+
+# Read and display header row
+fields = tsvFile.readline().rstrip().split("\t")
+for field in fields:
+  sys.stdout.write("<td><b>%s</b></td>" % field)
+sys.stdout.write("</tr>\n")
+
+# Process lines.
+for line in tsvFile:
+
+  fields = line.rstrip().split("\t")
+  sys.stdout.write("<tr>\n")
+  for field in fields:
+    if (field == ""):
+      field = "&nbsp"
+    sys.stdout.write("<td>%s</td>" % field)
+  sys.stdout.write("</tr>\n")
+tsvFile.close()
+
+# Print tail info.
+sys.stdout.write("</table>\n")
+if not tableOnly:
+  sys.stdout.write("</body>\n")
+  sys.stdout.write("</html>\n")
diff --git a/doc/user/deploy-to-web.sh b/doc/user/deploy-to-web.sh
new file mode 100755
index 0000000..4fcfe88
--- /dev/null
+++ b/doc/user/deploy-to-web.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+scp *.html charlesegrant at web.sourceforge.net:/home/project-web/cruxtoolkit/htdocs
+scp *.png charlesegrant at web.sourceforge.net:/home/project-web/cruxtoolkit/htdocs
+scp *.gif charlesegrant at web.sourceforge.net:/home/project-web/cruxtoolkit/htdocs
+scp crux.html charlesegrant at web.sourceforge.net:/home/project-web/cruxtoolkit/htdocs/index.html
+scp crux.css charlesegrant at web.sourceforge.net:/home/project-web/cruxtoolkit/htdocs
+scp -r data charlesegrant at web.sourceforge.net:/home/project-web/cruxtoolkit/htdocs
+scp -r demos charlesegrant at web.sourceforge.net:/home/project-web/cruxtoolkit/htdocs
+scp -r download charlesegrant at web.sourceforge.net:/home/project-web/cruxtoolkit/htdocs
diff --git a/doc/user/download.html b/doc/user/download.html
new file mode 100644
index 0000000..5b6fa90
--- /dev/null
+++ b/doc/user/download.html
@@ -0,0 +1,741 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Download Crux</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull    = $('.btn');
+        menu    = $('nav ul');
+        menuHeight  = menu.height();
+
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+<style type="text/css">
+.inset {
+  position:relative;
+  left:20px;
+}
+
+.lic-div {
+  border:1px solid black;
+  height:150px;
+  width:600px;
+  margin-left:10px;
+  margin-top:10px;
+  margin-bottom:10px;
+  overflow-y:scroll;
+  overflow-x:hidden;
+}
+  p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Arial; min-height: 11.0px}
+  p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 14.0px Arial}
+  p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.0px Arial}
+  p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.0px Arial; min-height: 11.0px}
+  p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px Arial}
+  p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px Arial; min-height: 14.0px}
+  p.p7 {margin: 0.0px 0.0px 0.0px 18.0px; text-align: justify; text-indent: -18.0px; font: 10.0px Arial}
+  p.p8 {margin: 0.0px 0.0px 0.0px 13.5px; text-align: justify; text-indent: -13.5px; font: 10.0px Arial}
+  p.p9 {margin: 0.0px 0.0px 0.0px 18.0px; text-align: justify; text-indent: -18.0px; font: 10.0px Arial; min-height: 11.0px}
+  p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Arial}
+  p.p11 {margin: 0.0px 0.0px 0.0px 14.2px; font: 10.0px Arial}
+  p.p12 {margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 36.0px; font: 10.0px Arial; min-height: 11.0px}
+  p.p13 {margin: 0.0px 0.0px 0.0px 18.0px; font: 10.0px Arial; min-height: 11.0px}
+  p.p14 {margin: 0.0px 0.0px 0.0px 36.0px; font: 10.0px Arial}
+  p.p15 {margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 36.0px; font: 10.0px Arial}
+  p.p16 {margin: 0.0px 0.0px 0.0px 36.0px; font: 10.0px Arial; min-height: 11.0px}
+  p.p17 {margin: 0.0px 0.0px 0.0px 31.5px; text-indent: -31.5px; font: 10.0px Arial}
+  p.p18 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.0px Verdana; min-height: 12.0px}
+  p.p19 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.0px 'Times New Roman'; min-height: 11.0px}
+  p.p20 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 12.0px Arial}
+  p.p21 {margin: 0.0px 0.0px 0.0px 0.0px; font: 7.0px Arial; min-height: 7.0px}
+  li.li3 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 10.0px Arial}
+  span.Apple-tab-span {white-space:pre}
+  ol.ol1 {list-style-type: decimal}
+  .page-wrap:after { /*hacky just for download page. content is all over the place need this to fix footer*/
+  content: "";
+  display: none;  
+  }
+</style>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="index.html">Home</a></li>
+          <li><a href="download.html">Download</a></li>
+          <li><a href="fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content">
+    <!-- START CONTENT -->
+		
+<form action="http://noble.gs.washington.edu/crux-downloads/download.php" method="post">
+
+<h2> Get Crux Toolkit (3 steps)</H2>    
+<div class="inset">
+
+<H3> Step 1, Choose Download Type: </H3>
+<UL>
+<SELECT NAME="downloadtype">
+  <optgroup label="For End Users">
+  <OPTION value="Linux32">   Linux 32 bit binaries (NO vendor reader support)</OPTION>
+  <OPTION value="Linux64">   Linux 64 bit binaries (NO vendor reader support)</OPTION>
+  <OPTION value="OSX">   Macintosh binaries (NO vendor reader support)</OPTION>
+  <OPTION value="Windows64">   Windows 64-bit(includes vendor reader support)</OPTION>
+  <OPTION value="Windows32">   Windows 32-bit(includes vendor reader support)</OPTION>
+  </optgroup>
+  <optgroup label="For Developers">
+  <OPTION value="Source">   Source, CMake build (includes vendor reader support)</OPTION>
+   </optgroup>
+</SELECT>
+
+</UL>
+
+<H3> Step 2, Read License Agreements</H3>
+
+Crux is covered by an 
+<a href="http://www.apache.org/licenses/LICENSE-2.0" >Apache license</a>
+but depends on several libraries that have other licences.
+You must read and agree to these other licenses before downloading Crux.
+<ul>
+  <li>ProteoWizard Core:</li>
+<div class="lic-div">
+ADDENDUM TO APACHE LICENSE
+
+<p>To the best of our ability we deliver this software to you under the Apache 2.0 License listed below (the source code is available in the ProteoWizard project).  This software does, however, depend on other software libraries which place further restrictions on its use and redistribution.  By accepting the license terms for this software, you agree to comply with the restrictions imposed on you by the license agreements of the software libraries on which it depends:</p>
+
+<p>
+<B>Agilent Mass Hunter Data Access Component Library <br />
+Waters Raw Data Access Component Library <br />
+Bruker CompassXtract <br />
+Thermo-Scientific MSFileReader Library <br />
+Waters Raw Data Access Component Library <br />
+AB Sciex WIFF Reader Library </B><br /><br />
+
+ 
+NOTE:  If you do not plan to redistribute this software yourself, then you are the "end-user" in the above agreements.</p>
+
+<hr />
+<p>Apache License - Covers Core ProteoWizard Tools and Library<br></br>Version 2.0, January 2004<br></br>
+<a href="http://www.apache.org/licenses/">http://www.apache.org/licenses/</a> </p>
+<p>TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION</p>
+<p><strong><a name="definitions">1. Definitions</a></strong>.</p>
+<p>"License" shall mean the terms and conditions for use, reproduction, and
+distribution as defined by Sections 1 through 9 of this document.</p>
+<p>"Licensor" shall mean the copyright owner or entity authorized by the
+copyright owner that is granting the License.</p>
+<p>"Legal Entity" shall mean the union of the acting entity and all other
+entities that control, are controlled by, or are under common control with
+that entity. For the purposes of this definition, "control" means (i) the
+power, direct or indirect, to cause the direction or management of such
+entity, whether by contract or otherwise, or (ii) ownership of fifty
+percent (50%) or more of the outstanding shares, or (iii) beneficial
+ownership of such entity.</p>
+<p>"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.</p>
+<p>"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation source,
+and configuration files.</p>
+<p>"Object" form shall mean any form resulting from mechanical transformation
+or translation of a Source form, including but not limited to compiled
+object code, generated documentation, and conversions to other media types.</p>
+<p>"Work" shall mean the work of authorship, whether in Source or Object form,
+made available under the License, as indicated by a copyright notice that
+is included in or attached to the work (an example is provided in the
+Appendix below).</p>
+<p>"Derivative Works" shall mean any work, whether in Source or Object form,
+that is based on (or derived from) the Work and for which the editorial
+revisions, annotations, elaborations, or other modifications represent, as
+a whole, an original work of authorship. For the purposes of this License,
+Derivative Works shall not include works that remain separable from, or
+merely link (or bind by name) to the interfaces of, the Work and Derivative
+Works thereof.</p>
+<p>"Contribution" shall mean any work of authorship, including the original
+version of the Work and any modifications or additions to that Work or
+Derivative Works thereof, that is intentionally submitted to Licensor for
+inclusion in the Work by the copyright owner or by an individual or Legal
+Entity authorized to submit on behalf of the copyright owner. For the
+purposes of this definition, "submitted" means any form of electronic,
+verbal, or written communication sent to the Licensor or its
+representatives, including but not limited to communication on electronic
+mailing lists, source code control systems, and issue tracking systems that
+are managed by, or on behalf of, the Licensor for the purpose of discussing
+and improving the Work, but excluding communication that is conspicuously
+marked or otherwise designated in writing by the copyright owner as "Not a
+Contribution."</p>
+<p>"Contributor" shall mean Licensor and any individual or Legal Entity on
+behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.</p>
+<p><strong><a name="copyright">2. Grant of Copyright License</a></strong>. Subject to the
+terms and conditions of this License, each Contributor hereby grants to You
+a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+copyright license to reproduce, prepare Derivative Works of, publicly
+display, publicly perform, sublicense, and distribute the Work and such
+Derivative Works in Source or Object form.</p>
+<p><strong><a name="patent">3. Grant of Patent License</a></strong>. Subject to the terms
+and conditions of this License, each Contributor hereby grants to You a
+perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+(except as stated in this section) patent license to make, have made, use,
+offer to sell, sell, import, and otherwise transfer the Work, where such
+license applies only to those patent claims licensable by such Contributor
+that are necessarily infringed by their Contribution(s) alone or by
+combination of their Contribution(s) with the Work to which such
+Contribution(s) was submitted. If You institute patent litigation against
+any entity (including a cross-claim or counterclaim in a lawsuit) alleging
+that the Work or a Contribution incorporated within the Work constitutes
+direct or contributory patent infringement, then any patent licenses
+granted to You under this License for that Work shall terminate as of the
+date such litigation is filed.</p>
+<p><strong><a name="redistribution">4. Redistribution</a></strong>. You may reproduce and
+distribute copies of the Work or Derivative Works thereof in any medium,
+with or without modifications, and in Source or Object form, provided that
+You meet the following conditions:</p>
+<ol>
+<li>
+<p>You must give any other recipients of the Work or Derivative Works a
+copy of this License; and</p>
+</li>
+<li>
+<p>You must cause any modified files to carry prominent notices stating
+that You changed the files; and</p>
+</li>
+<li>
+<p>You must retain, in the Source form of any Derivative Works that You
+distribute, all copyright, patent, trademark, and attribution notices from
+the Source form of the Work, excluding those notices that do not pertain to
+any part of the Derivative Works; and</p>
+</li>
+<li>
+<p>If the Work includes a "NOTICE" text file as part of its distribution,
+then any Derivative Works that You distribute must include a readable copy
+of the attribution notices contained within such NOTICE file, excluding
+those notices that do not pertain to any part of the Derivative Works, in
+at least one of the following places: within a NOTICE text file distributed
+as part of the Derivative Works; within the Source form or documentation,
+if provided along with the Derivative Works; or, within a display generated
+by the Derivative Works, if and wherever such third-party notices normally
+appear. The contents of the NOTICE file are for informational purposes only
+and do not modify the License. You may add Your own attribution notices
+within Derivative Works that You distribute, alongside or as an addendum to
+the NOTICE text from the Work, provided that such additional attribution
+notices cannot be construed as modifying the License.
+You may add Your own copyright statement to Your modifications and may
+provide additional or different license terms and conditions for use,
+reproduction, or distribution of Your modifications, or for any such
+Derivative Works as a whole, provided Your use, reproduction, and
+distribution of the Work otherwise complies with the conditions stated in
+this License.</p>
+</li>
+</ol>
+<p><strong><a name="contributions">5. Submission of Contributions</a></strong>. Unless You
+explicitly state otherwise, any Contribution intentionally submitted for
+inclusion in the Work by You to the Licensor shall be under the terms and
+conditions of this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify the
+terms of any separate license agreement you may have executed with Licensor
+regarding such Contributions.</p>
+<p><strong><a name="trademarks">6. Trademarks</a></strong>. This License does not grant
+permission to use the trade names, trademarks, service marks, or product
+names of the Licensor, except as required for reasonable and customary use
+in describing the origin of the Work and reproducing the content of the
+NOTICE file.</p>
+<p><strong><a name="no-warranty">7. Disclaimer of Warranty</a></strong>. Unless required by
+applicable law or agreed to in writing, Licensor provides the Work (and
+each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including,
+without limitation, any warranties or conditions of TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You
+are solely responsible for determining the appropriateness of using or
+redistributing the Work and assume any risks associated with Your exercise
+of permissions under this License.</p>
+<p><strong><a name="no-liability">8. Limitation of Liability</a></strong>. In no event and
+under no legal theory, whether in tort (including negligence), contract, or
+otherwise, unless required by applicable law (such as deliberate and
+grossly negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special,
+incidental, or consequential damages of any character arising as a result
+of this License or out of the use or inability to use the Work (including
+but not limited to damages for loss of goodwill, work stoppage, computer
+failure or malfunction, or any and all other commercial damages or losses),
+even if such Contributor has been advised of the possibility of such
+damages.</p>
+<p><strong><a name="additional">9. Accepting Warranty or Additional Liability</a></strong>.
+While redistributing the Work or Derivative Works thereof, You may choose
+to offer, and charge a fee for, acceptance of support, warranty, indemnity,
+or other liability obligations and/or rights consistent with this License.
+However, in accepting such obligations, You may act only on Your own behalf
+and on Your sole responsibility, not on behalf of any other Contributor,
+and only if You agree to indemnify, defend, and hold each Contributor
+harmless for any liability incurred by, or claims asserted against, such
+Contributor by reason of your accepting any such warranty or additional
+liability.</p>
+<HR />
+</div>
+    <li>AB Sciex WiffReader</li>
+<div class="lic-div">
+
+<p class="p1"><br></p>
+<p class="p2"><b>AB Sciex LLC</b></p>
+<p class="p2"><b>END USER BETA SOFTWARE LICENSE AGREEMENT</b></p>
+<p class="p2"><b>and</b></p>
+<p class="p2"><b>LIMITED DEVELOPER LICENSE</b></p>
+<p class="p2"><i>WIFF Reader Distributable Beta SDK</i></p>
+<p class="p1"><br></p>
+<p class="p1"><br></p>
+<p class="p3"><b>NOTICE TO USER: PLEASE READ THIS DOCUMENT CAREFULLY.<span class="Apple-converted-space">  </span>THIS IS THE CONTRACT BETWEEN YOU AND AB SCIEX REGARDING THIS SOFTWARE PRODUCT.<span class="Apple-converted-space">  </span>THIS AGREEMENT INCLUDES LICENSE TERMS AND RESTRICTIONS, WARRANTY AND LIABILITY DISCLAIMERS, AND LIMITATIONS.</b></p>
+<p class="p4"><b></b><br></p>
+<p class="p3"><b>YOUR INSTALLATION AND USE OF THIS AB SCIEX SDK IS SUBJECT TO THE TERMS AND CONDITIONS CONTAINED IN THIS END USER SOFTWARE LICENSE AGREEMENT.</b></p>
+<p class="p4"><b></b><br></p>
+<p class="p3">This AB Sciex End User Software License Agreement (EULA) and Limited Developer & Redistribution License accompanies this AB Sciex WIFF Reader Distributable Beta SDK product ("Software") and related explanatory materials ("Documentation"). The term "SDK" also includes any upgrades, modified versions, updates, additions and copies of the SDK licensed to you by AB Sciex.<span class="Apple-converted-space">  </span>The term “AB Sciex,” as used in this License, means AB Scie [...]
+<p class="p4"><br></p>
+<p class="p4"><br></p>
+<p class="p5"><b>Third Party Products</b></p>
+<p class="p3">This Software may include software products licensed by third party provider(s). In addition, the Software may enable you to run multiple instances of third-party software and application programs. You are responsible for reviewing and complying with any licenses necessary to use any such third-party software.<span class="Apple-converted-space">  </span>Such licenses may be included in your AB Sciex installation package.</p>
+<p class="p4"><br></p>
+<p class="p5"><b>TITLE</b></p>
+<p class="p3">Title, ownership rights and intellectual property rights in and to the Software and Documentation shall at all times remain with AB Sciex and its subsidiaries, and their suppliers.<span class="Apple-converted-space">  </span>All rights not specifically granted by this License, including Federal and international copyrights, are reserved by AB Sciex or their respective owners.</p>
+<p class="p6"><b></b><br></p>
+<p class="p5"><b>COPYRIGHT</b></p>
+<p class="p3">The Software, including its structure, organization, code, user interface and associated Documentation, is a proprietary product of AB Sciex or its suppliers, and is protected by international laws of copyright. The law provides for civil and criminal penalties for anyone in violation of the laws of copyright.</p>
+<p class="p4"><br></p>
+<p class="p5"><b>LICENSE</b></p>
+<p class="p3"><b>Use of the Software</b></p>
+<ol class="ol1">
+  <li class="li3">As a Developer License, AB Sciex grants to you one (1) personal, nontransferable, nonexclusive, license to use copies of the Software and install such Software on your machine(s) for your single concurrent internal use.</li>
+</ol>
+<p class="p7">2.<span class="Apple-tab-span"> </span>You may make one copy of the Software in machine-readable form solely for backup or archival purposes.<span class="Apple-converted-space">  </span>You must reproduce on any such copy all copyright notices and any other proprietary legends found on the original.<span class="Apple-converted-space">  </span>You may not make any other copies of the Software.</p>
+<p class="p7">3.<span class="Apple-tab-span"> </span>From time to time, AB Sciex may change the terms of this Agreement.<span class="Apple-converted-space">  </span>AB Sciex will notify you of such change.<span class="Apple-converted-space">  </span>Your continued use of the Software will indicate your agreement to the change.</p>
+<p class="p4"><br></p>
+<p class="p3"><b>Use Restrictions</b></p>
+<p class="p7">1.<span class="Apple-converted-space">  </span>You may not use the Software, Documentation, or any associated documentation, in whole or in part, except as expressly permitted in this Agreement.</p>
+<p class="p7">2.<span class="Apple-converted-space">  </span>You may not sublicense, copy, merge, modify, sell, resell, rent, lease, assign, transfer (except temporarily in the event of a computer malfunction or as expressly permitted under the Section “Use of the Software”), or distribute this license or the Software, or create derivative works based on the Software (except as outlined in the Distribution Rights below), or any part thereof or any interest therein. <span class="Apple-con [...]
+<p class="p7">3.<span class="Apple-converted-space">  </span>You may not reverse assemble, decompile, modify, create any derivative works, or otherwise attempt, cause, or permit any reverse engineering of the Software or any part thereof.</p>
+<p class="p8">4.<span class="Apple-converted-space">  </span>You acknowledge that the Software in human-readable (source code) form, including its structure, sequence, and organization, is and remains the confidential trade secret of AB Sciex.<span class="Apple-converted-space">  </span>You agree that you shall not attempt, cause or permit the reverse engineering, modification, decompiliation, disassembly of the Software to any human readable or perceivable form, or creation of any deriv [...]
+<p class="p8">5.<span class="Apple-converted-space">  </span>You may not remove any proprietary, copyright, trade secret or warning legend from the Software or any Documentation and you acknowledge that the Software in human-readable (source code) form, including its structure, sequence, and organization, is and remains the confidential trade secret of AB Sciex.</p>
+<p class="p7">6.<span class="Apple-converted-space">  </span>You agree to comply fully with all export laws and restrictions and regulations of the United States or applicable foreign agencies or authorities.<span class="Apple-converted-space">  </span>You agree that you will not export or reexport, directly or indirectly, the Software into any country prohibited by the United States Export Administration Act and the regulations thereunder or other applicable United States law.</p>
+<p class="p9"><br></p>
+<p class="p10"><b>Distribution of the Distributable Components (DCs)</b></p>
+<p class="p10">1.<span class="Apple-converted-space">  </span><b>Distributable Components.</b> The Software contains Distributable Components that you are permitted<span class="Apple-converted-space"> </span></p>
+<p class="p11">to distribute for non-commercial purposes provided that: (a) the Distributable Components are bundled as part of, and for the sole purpose of running programs developed by you and supplied by you; and (b) you comply with all other terms in this EULA.<span class="Apple-converted-space">  </span>As used herein commercial purposes include, but are not limited to, charging a purchase price, license fee, maintenance fee, subscription fee, or providing software incorporating Dis [...]
+<p class="p1"><br></p>
+<p class="p10">2.<span class="Apple-converted-space">  </span><b>Right to Use and Distribute.</b> The code and text files listed in Appendix A are “Distributable<span class="Apple-converted-space"> </span></p>
+<p class="p10"><span class="Apple-converted-space">     </span>Components”.<span class="Apple-converted-space">  </span>All other code and text files of the Software are not distributable.</p>
+<p class="p12"><br></p>
+<p class="p10">3.<span class="Apple-converted-space">  </span><b>Third Party Distribution.</b> You may not permit distributors of your programs or end users of your<span class="Apple-converted-space">     </span></p>
+<p class="p10"><span class="Apple-converted-space">     </span>programs to copy and distribute the Distributable Components as part of those or their programs.</p>
+<p class="p13"><br></p>
+<p class="p10">4. <b>Distribution Requirements, General.</b> For any Distributable Component you distribute, you must:</p>
+<p class="p14">(a) embed the license key in your program such that it is obscured from end users seeing it.<span class="Apple-converted-space">  </span>In the event that your program is open source, this license key must not be part of the open source;</p>
+<p class="p15">(b) add significant primary functionality to it in your programs;</p>
+<p class="p14">(c) for any Distributable Component having a filename extension of .lib, distribute only the results of running such Distributable Component through a linker with your program;</p>
+<p class="p14">(d) distribute Distributable Components included in a setup program only as part of that setup program without modification;</p>
+<p class="p14">(e) require distributors and external end users to agree to terms that protect it at least as much as this EULA; and</p>
+<p class="p15">(f) display your valid copyright notice on your programs.</p>
+<p class="p16"><br></p>
+<p class="p17">5. <b>Distribution Requirement, Indemnification.<span class="Apple-converted-space">  </span></b>For any Distributable Component you distribute, you must and you hereby agree to: indemnify, defend, and hold harmless AB Sciex from any and all claims and costs, including attorneys’ fees, related to the distribution or use of your programs.</p>
+<p class="p16"><br></p>
+<p class="p10">6.<span class="Apple-converted-space">  </span><b>Distribution Restrictions.</b> You may not:</p>
+<p class="p15">(a) alter any copyright, trademark or patent notice in the Distributable Component;</p>
+<p class="p14">(b) use AB Sciex or AB Sciex’s trademarks in your programs’ names or in a way that suggests your programs come from or are endorsed by AB Sciex;</p>
+<p class="p15">(c) include Distributable Components in malicious, deceptive or unlawful programs; or</p>
+<p class="p14">(d) modify or distribute the source code of any Distributable Component so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that (i) the code be disclosed or distributed in source code form; and/or (ii) others have the right to modify it.</p>
+<p class="p4"><br></p>
+<p class="p3"><b>Trial</b></p>
+<p class="p3">If this license is granted on a trial basis, you are hereby notified that license management software may be included to automatically cause the Software to cease functioning at the end of the trial period.</p>
+<p class="p4"><br></p>
+<p class="p3"><b>Termination</b></p>
+<p class="p3">You may terminate this Agreement by discontinuing use of the Software, removing all copies from your computers and storage media, and returning the Software and Documentation, and all copies thereof, to AB Sciex.<span class="Apple-converted-space">  </span>AB Sciex may terminate this Agreement if you fail to comply with all of its terms, in which case you agree to discontinue using the Software, remove all copies from your computers and storage media, and return the Softwar [...]
+<p class="p4"><b></b><br></p>
+<p class="p3"><b>U.S. Government End Users</b></p>
+<p class="p3">The Software is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire the Software with only those rights set forth herein.<span class="Apple-converted-space"> </span></p>
+<p class="p4"><b></b><br></p>
+<p class="p3"><b>European Community End Users</b></p>
+<p class="p3">If this Software is used within a country of the European Community, nothing in this Agreement shall be construed as restricting any rights available under the European Community Software Directive, O.J. Eur. Comm. (No. L. 122) 42 (1991).</p>
+<p class="p4"><br></p>
+<p class="p3"><b>Regulated Uses</b></p>
+<p class="p3">You acknowledge that the Software has not been cleared, approved, registered or otherwise qualified (collectively, “Approval”) by AB Sciex<b> </b>with any regulatory agency, including without limitation for use in diagnostic or therapeutic procedures or any other use requiring compliance with any federal or state law regulating diagnostic or therapeutic products, blood products, medical devices or any similar product (hereafter collectively referred to as "federal or state  [...]
+<p class="p4"><b></b><br></p>
+<p class="p5"><b>NO WARRANTY and LIMITATION OF REMEDIES</b></p>
+<p class="p3">AB SCIEX MAKES NO WARRANTIES OF ANY KIND WHATSOEVER, EXPRESS OR IMPLIED, WITH RESPECT TO THE SOFTWARE OR DOCUMENTATION, INCLUDING BUT NOT LIMITED TO WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE OR MERCHANTABILITY OR THAT THE SOFTWARE OR DOCUMENTATION IS NON-INFRINGING.<span class="Apple-converted-space">  </span>ALL OTHER WARRANTIES ARE EXPRESSLY DISCLAIMED.<span class="Apple-converted-space">  </span>WITHOUT LIMITING THE GENERALITY OF THE FOREGOING, AB SCIEX MAKES NO WAR [...]
+<p class="p4"><br></p>
+<p class="p5"><b>Limitation of Liability</b></p>
+<p class="p3">IN NO EVENT SHALL AB SCIEX OR ITS AGENTS, CONSULTANTS, CONTRACTORS OR SUPPLIERS BE RESPONSIBLE OR LIABLE, WHETHER IN CONTRACT, TORT, WARRANTY OR UNDER ANY STATUTE (INCLUDING WITHOUT LIMITATION ANY TRADE PRACTICE, UNFAIR COMPETITION OR OTHER STATUTE OF SIMILAR IMPORT) OR ON ANY OTHER BASIS FOR SPECIAL, INDIRECT, INCIDENTAL, MULTIPLE, PUNITIVE, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE POSSESSION OR USE OF, OR THE INABILITY TO USE, THE SOFTWARE OR DOCUMENTATION, EVEN IF AB  [...]
+<p class="p4"><br></p>
+<p class="p3">Some states, countries or jurisdictions limit the scope of or preclude limitations or exclusion of remedies or damages, or of liability, such as liability for gross negligence or willful misconduct, as or to the extent set forth above, OR do not allow implied warranties TO BE EXCLUDED.<span class="Apple-converted-space">  </span>In such states, countries or jurisdictions, the limitation or exclusion of warranties, remedies, damages or liability set forth above may not apply [...]
+<p class="p4"><br></p>
+<p class="p5"><b>GENERAL</b></p>
+<p class="p3">This Agreement shall be governed by laws of the Commonwealth of Massachusetts, U.S.A., exclusive of its conflict of laws provisions.<span class="Apple-converted-space">  </span>This Agreement shall not be governed by the United Nations Convention on Contracts for the International Sale of Goods.<span class="Apple-converted-space">  </span>This Agreement contains the complete agreement between the parties with respect to the subject matter hereof, and supersedes all prior or [...]
+<p class="p18"><br></p>
+<p class="p19"><br></p>
+<p class="p3">Unpublished rights reserved under the copyright laws of the United States.</p>
+<p class="p3">AB Sciex LLC, 500 Old Connecticut Path, Framingham, MA 01701 U.S.A.</p>
+<p class="p4"><br></p>
+<p class="p3">For Research Use Only. Not for use in diagnostic procedures.<span class="Apple-converted-space">  </span>The trademarks mentioned herein are the property of AB Sciex Pte. Ltd. or their respective owners.<span class="Apple-converted-space">  </span>AB SCIEX™ is being used under license.</p>
+<p class="p3">© 2012 AB SCIEX</p>
+<p class="p20"><b>APPENDIX A</b></p>
+<p class="p20"><b>DISTRIBUTABLE COMPONENTS OF THE SOFTWARE</b></p>
+<p class="p21"><br></p>
+<p class="p10">Clearcore2.Compression.dll</p>
+<p class="p10">Clearcore2.Data.AnalystDataProvider.dll</p>
+<p class="p10">Clearcore2.Data.CommonInterfaces.dll</p>
+<p class="p10">Clearcore2.Data.dll</p>
+<p class="p10">Clearcore2.Data.WiffReader.dll</p>
+<p class="p10">Clearcore2.InternalRawXYProcessing.dll</p>
+<p class="p10">Clearcore2.Muni.dll</p>
+<p class="p10">Clearcore2.ProjectUtilities.dll</p>
+<p class="p10">Clearcore2.RawXYProcessing.dll</p>
+<p class="p10">Clearcore2.StructuredStorage.dll</p>
+<p class="p10">Clearcore2.Utility.dll</p>
+<p class="p1"><br></p>
+</div>
+    <li>Agilent MHDAC</li>
+<div class="lic-div">
+<strong><p>END-USER LICENSE TERMS FOR AGILENT MHDAC</p></strong>
+<strong>
+<p>AGILENT TECHNOLOGIES, INC. SOFTWARE LICENSE TERMS <strong>FOR THE MASSHUNTER DATA ACCESS COMPONENT RUNTIME VERSION</strong></p>
+</strong>
+<p><strong>ATTENTION:  USE OF THE SOFTWARE IS SUBJECT TO THE LICENSE TERMS SET FORTH BELOW.</strong></p>
+<p>IF YOU DO NOT AGREE TO THESE LICENSE TERMS, THEN (A) DO NOT INSTALL OR USE THE SOFTWARE, AND (B) YOU MAY RETURN THE SOFTWARE FOR A FULL REFUND, OR, IF THE SOFTWARE IS SUPPLIED AS PART OF ANOTHER PRODUCT, YOU MAY RETURN THE ENTIRE PRODUCT FOR A FULL REFUND. NOTWITHSTANDING ANYTHING TO THE CONTRARY IN THIS NOTICE, INSTALLING OR OTHERWISE USING THE SOFTWARE INDICATES YOUR ACCEPTANCE OF THESE TERMS. </p>
+<p>AGILENT SOFTWARE LICENSE TERMS</p>
+<p><strong><u>Software</u></strong>.  “Software” means the Masshunter Data Access Component Runtime computer program in object code format.</p>
+<p><strong><u>License Grant</u></strong>.  Agilent grants you a non-exclusive, non-transferable license to (a) use one copy of the Software for internal purposes in accordance with these License Terms and the documentation provided with the Software or (b) to distribute the Software for non-commercial purposes only and only bundled as part of, and for the sole purpose of running, products supplied by you.  This Software is licensed for internal concurrent or network use of an unlimited n [...]
+<p><strong><u>License Restrictions</u></strong>.  You may make copies or adaptations of the Software only for archival purposes or only when copying or adaptation is an essential step in the authorized use of the Software. You must reproduce all copyright notices in the original Software on all permitted copies or adaptations.  You may not offer or provide unrestricted access to this Software on any public or distributed network.</p>
+<p><strong><u>Upgrades</u></strong>.  This license does not entitle you to receive upgrades, updates or technical support.  Such services may be purchased separately.  </p>
+<p><strong><u>Ownership</u></strong>. <strong> </strong>The Software and all copies thereof are owned and copyrighted by Agilent.  Agilent retains all right, title and interest in the Software.  Agilent and its third party suppliers may protect their rights in the Software in the event of any violation of these License Terms.<strong><u></u></strong></p>
+<p><strong><u>No Disassembly</u></strong>. <strong> </strong>You may not disassemble, decompile or otherwise modify the Software without written authorization from Agilent, except as permitted by law.  Upon request, you will provide Agilent with reasonably detailed information regarding any permitted disassembly, decompilation or modification.</p>
+<p><strong><u>High Risk Activities</u></strong>.<strong>  </strong>The Software is not specifically designed, manufactured or intended for use in the planning, construction, maintenance or direct operation of a nuclear facility, nor for use in on line control or fail safe operation of aircraft navigation, control or communication systems, weapon systems or direct life support systems. </p>
+<p><strong><u>Termination</u></strong>.  Agilent may terminate your license upon notice for breach of these License Terms.  Upon termination, you must immediately destroy all copies of the Software.<strong><u></u></strong></p>
+<p><strong><u>No Warranty</u></strong>. THIS SOFTWARE IS LICENSED "AS IS" AND WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
+</p>
+<p><strong><u>Limitation of Liability</u></strong>. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL AGILENT BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF OR RELATED TO THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF AGILENT HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. In no event will Agilent's liability to you, whether in contract [...]
+<p><strong><u>Export Requirements</u></strong>.  If you export, re-export or import Software, technology or technical data licensed hereunder, you assume responsibility for complying with applicable laws and regulations and for obtaining required export and import authorizations.  Agilent may terminate this license immediately if you are in violation of any applicable laws or regulations.</p>
+<p><strong><u>U.S. Government Restricted Rights</u></strong>.<strong>  </strong>Software and technical data rights granted to the federal government include only those rights customarily provided to end user customers.  Agilent provides this customary commercial license in Software and technical data pursuant to FAR 12.211 (Technical Data) and 12.212 (Computer Software) and, for the Department of Defense, DFARS 252.227-7015 (Technical Data – Commercial Items) and DFARS 227.7202-3 (Rights [...]
+<hr />
+
+
+</div>
+    <li>Bruker CompassXtract</li>
+    <div class="lic-div">
+<div class=WordSection1>
+  <p style='text-autospace:none'><b><span style='font-family:
+Helvetica;'>SOFTWARE LICENSE AGREEMENT for <span class=SpellE>CompassXtract</span> and <span
+class=SpellE>CompassXtract</span> Libraries</span></b></p>
+  <p style='text-autospace:none'><span class=SpellE><span style='font-family:Helvetica;'>Bruker</span></span><span style='font-family:
+Helvetica;'> <span
+class=SpellE>Daltonik</span> GmbH (hereinafter referred to as
+    "Licensor") has developed the <span class=SpellE>CompassXtract</span> software program (hereinafter referred to as "<span class=SpellE>CompassXtract</span>"),
+    which consists of documentation and individual <span class=SpellE>CompassXtract</span> libraries (hereinafter referred to as "<span class=SpellE>CompassXtract</span> <b>Libraries"). </b>These license terms constitute an agreement (hereinafter referred to as
+    "Agreement") between you and Licensor and shall be the legal basis
+    for any non-commercial usage of Licensor's <span class=SpellE>CompassXtract</span>.
+    These license terms also apply to any updates or supplements for <span
+class=SpellE>CompassXtract</span> or separable parts of <span class=SpellE>CompassXtract</span> such as <span class=SpellE>CompassXtract</span> Libraries, unless other terms
+    accompany those items, in which case those terms apply<span class=GramE>.
</span>You
+    may only use <span class=SpellE>CompassXtract</span> as a whole, if you have
+    downloaded it from Licensor's Webserver at http://www.bdal.de/compassxtract and
+    accepted this Agreement as binding between Licensor and you. However, <span
+class=GramE>certain individual <span class=SpellE>CompassXtract</span> Libraries might be conveyed to you by others</span>. In both cases, you may
+    only legally use <span class=SpellE>CompassXtract</span> or any of the <span
+class=SpellE>CompassXtract</span> Libraries conveyed to you after having
+    accepted this Agreement as binding between Licensor and you.</span></p>
+  <p style='text-autospace:none'><b><span style='font-family:
+Helvetica;'>1. Purpose of <span class=SpellE>CompassXtract</span> and License</span></b></p>
+  <p style='text-autospace:none'><span class=SpellE><span style='font-family:Helvetica;'>CompassXtract</span></span><span style='font-family:Helvetica;'> is provided as it is, in a trial and development stage, not yet marketable and
+    without any warranties regarding fitness for any purpose whatsoever. It may
+    contain errors and defects. The aim and purpose of providing it free of charge
+    and under the terms of this Agreement is to discover such errors and defects.
+    It is, inter alia but not limited to, not designed, manufactured or intended
+    for any use requiring fail-safe performance in which the failure of <span
+class=SpellE>CompassXtract</span> could lead to death, personal injury or
+    physical and environmental damage, such as the operation of medical facilities.
+    Nor is it, inter alia but not limited to, designed to perform any queries or
+    operations which might require reliable results and/or which might be the basis
+    for business and/or medical decisions. You agree not to use <span class=SpellE>CompassXtract</span> in connection with any such activities.</span></p>
+  <p style='text-autospace:none'><b><span style='font-family:
+Helvetica;'>2. Rights
+    Granted</span></b></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>You may
+    install and use <span class=SpellE>CompassXtract</span> on any of your
+    computing devices.</span></p>
+  <p style='text-autospace:none'><b><span style='font-family:
+Helvetica;'>3. Use
+    Restrictions</span></b></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>3.1 You may
+    not decompile, disassemble, reverse engineer or modify <span class=SpellE>CompassXtract</span>.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>3.2 You may
+    not distribute <span class=SpellE>CompassXtract</span> to others, breach of
+    which terminates the rights granted under this agreement. This also applies to
+    any integration or implementation of <span class=SpellE>CompassXtract</span> to
+    software developed by you or by others on your behalf (hereinafter referred to
+    as Own <b>Software) </b>or any distribution of which <span class=SpellE>CompassXtract</span> is <span class=GramE>part of.</span> However, you may distribute Own <span
+class=GramE>Software which requires the usage of</span> or links to <span
+class=SpellE>CompassXtract</span> Libraries if you comply with the requirements
+    set down in Section 4 of this Agreement.</span></p>
+  <p style='text-autospace:none'><b><span style='font-family:
+Helvetica;'>4.
+    Requirements for Distribution of your own Software using <span class=SpellE>CompassXtract</span> Libraries</span></b></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>You may only
+    distribute <span class=SpellE>CompassXtract</span> Libraries to others if all
+    of the following conditions are met: 4.1 <span class=GramE>You</span> distribute <span class=SpellE>CompassXtract</span> Libraries as part of Own
+    Software which you license to third parties</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>(<span
+class=GramE>hereinafter</span> "Your <b>Licensees");
</b>4.2
+    Your Own Software requires all the <span class=SpellE>CompassXtract</span> Libraries distributed by you in order to function</span></p>
+  <p style='text-autospace:none'><span class=GramE><span style='font-family:Helvetica;'>properly</span></span><span style='font-family:
+Helvetica;'> when used by
+    Your Licensees;</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>4.3 You
+    provide to Your Licensee a URL to Licensor's Webserver at
+    http://www.bdal.de/compassxtract and require Your Licensees, as condition for
+    being granted the right to use your Own Software, to acquire the usage rights
+    for <span class=SpellE>CompassXtract</span> directly from Licensor by agreeing
+    to the terms of this Agreement, which you distribute in unmodified form with
+    your Own Software.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>4.4 In your
+    Own Software's "About" box the following text is displayed: "This software uses <span class=SpellE>CompassXtract</span> software. <span class=GramE>Copyright $copy;
+    2011 by <span class=SpellE>Bruker</span> <span class=SpellE>Daltonik</span> GmbH.</span> All rights reserved."</span></p>
+  <p style='text-autospace:none'><b><span style='font-family:
+Helvetica;'>5.
+    Restrictions for Distribution of your own Products</span></b></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>5.1 You may
+    not use the Licensor's trademarks in a way that suggests your software
+    components and/or programs are provided by or are endorsed by the Licensor.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>5.2 You may
+    not commercially exploit <span class=SpellE>CompassXtract</span>, <span
+class=SpellE>CompassXtract</span> Libraries or products that require the usage
+    of or link to <span class=SpellE>CompassXtract</span> or <span class=SpellE>CompassXtract</span> Libraries. Commercial exploitation includes, but is not limited to, charging a
+    purchase price, license fee, maintenance fee, or subscription fee.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>5.3 Your
+    rights to <span class=SpellE>CompassXtract</span> do not include any license,
+    right, power or authority to subject <span class=SpellE>CompassXtract</span> in
+    whole or in part to any of the terms of an Excluded License. <b>"Excluded
+    License" </b>means any license that requires as a condition of use,
+    modification and/or distribution of software that such software or other
+    software combined and/or distributed with such software shall be (a) disclosed
+    or distributed in source code form; or (b) licensed for the purpose of making
+    derivative works. Without limiting the foregoing obligation, you are
+    specifically prohibited from distributing <span class=SpellE>CompassXtract</span> or <span class=SpellE>CompassXtract</span> Libraries with any software that is
+    subject to the General Public License (GPL) or similar license in a manner that
+    would create a combined work.</span></p>
+  <p style='text-autospace:none'><b><span style='font-family:
+Helvetica;'>6. Liability</span></b></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>6.1 As
+    Licensor delivers the software for free, Licensor is not liable for any kind of
+    damage, direct or indirect, which may arise due to simple negligence (Section
+    521 German Civil Code). In the event, that there should be – for whatever
+    reason – a statutory liability of Licensor for simple <span class=SpellE>negliegence</span>,
+    the aforementioned exclusion of liability applies nevertheless, but with the
+    exception of damages to life, body or health.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>6.2 You
+    indemnify, defend and hold harmless the Licensor from any liability claims,
+    including attorney fees, of third parties in connection with your usage of <span
+class=SpellE>CompassXtract</span> as well as the distribution of your Own <span
+class=GramE>Software which</span> requires usage of or links to <span
+class=SpellE>CompassXtract</span> Libraries and other circumstances for which
+    you are responsible.</span></p>
+  <p style='text-autospace:none'><b><span style='font-family:
+Helvetica;'>7. Additional
+    Terms Applicable to <span class=SpellE>CompassXtract</span></span></b></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>7.1 <span
+class=SpellE>CompassXtract</span> is licensed, not sold. This License only
+    gives you some rights to use <span class=SpellE>CompassXtract</span> and the <span
+class=SpellE>CompassXtract</span> Libraries; the Licensor reserves all other
+    rights. Unless applicable law gives you more rights despite this limitation,
+    you may use <span class=SpellE>CompassXtract</span> and the <span class=SpellE>CompassXtract</span> Libraries only as expressly permitted in this License.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>7.2 Licensor
+    has no obligation to fix, update, supplement or support <span class=SpellE>CompassXtract</span> and/or the <span class=SpellE>CompassXtract</span> Libraries.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>7.3 Your
+    rights under this License terminate automatically if you breach this License in
+    any way. Termination of this License will not affect any of your obligations or
+    liabilities arising prior to termination. The following sections of this
+    License shall survive termination: 3.1, 3.2, 5.1, 5.2, 5.3, 6.1<span
+class=GramE>.,</span> 6.2.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>7.4 No
+    subsidiary agreements of this Agreement have been made. Supplements and
+    amendments to this Agreement must be made in writing as prescribed by law in
+    order to be valid. The requirement of written form under this Agreement may be
+    waived in writing only.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>7.5 This
+    Agreement is governed by German law to the exclusion of the UN Convention on
+    Contracts for the International Sale of Goods. If you are a consumer, this does
+    not apply if legal provisions, in particular consumer protection legislation,
+    conflict with this choice. The courts of Bremen shall have exclusive
+    jurisdiction. If you are not a merchant, a legal entity under public law or a
+    public-law special fund in the sense Section 38 of the German Code of Civil
+    Procedure (ZPO), the <span class=GramE>agreement on the place of jurisdiction
+    is replaced by the legal provisions</span>.</span></p>
+  <p style='text-autospace:none'><span style='font-family:
+Helvetica;'>7.6 If
+    individual provisions of this Agreement are or become invalid or contain a <span
+class=GramE>gap which</span> needs to be filled, the validity of the remaining
+    provisions of the Agreement will not be affected thereby. The Parties hereby
+    undertake to substitute the invalid or lacking provision with a valid <span
+class=GramE>provision which</span> comes closest to the documented intentions
+    of the Parties.</span></p>
+</div>
+    </div>
+    <li>Thermo msFileReader</li>
+    <div class="lic-div">
+<p><strong>SOFTWARE LICENSE AGREEMENT (“License”) FOR MSFileReader</strong></p>
+<p>These License terms are an agreement between you and Thermo Finnigan LLC ("Licensor"). They apply to Licensor’s MSFileReader software program (“Software”), which includes documentation and any media on which you received it. These terms also apply to any updates or supplements for this Software, unless other terms accompany those items, in which case those terms apply. <strong>If you use this Software, you accept this License. If you do not accept this Lice [...]
+<p>1. Rights Granted:</p>
+<p>1.1. You may install and use this Software on any of your computing devices.</p>
+<p>1.2. You may distribute this Software to others, but only in combination with other software components and/or programs that you provide. </p>
+<p>2.  Use Restrictions:</p>
+<p>2.1. You may not decompile, disassemble, reverse engineer or modify this Software.</p>
+<p>3. Distribution Requirements:</p>
+<p>If you distribute this Software to others, you agree to:</p>
+<p>3.1. Indemnify, defend and hold harmless the Licensor from any claims, including attorneys’ fees, related to the distribution or use of this Software;</p>
+<p>3.2. Display the following text in your software’s “About” box: “MSFileReader file reading tool. Copyright © 2009 by Thermo Fisher Scientific, Inc. All rights reserved.”;</p>
+<p>3.3. Require your end users to agree to a license agreement that prohibits them from redistributing this Software to others.</p>
+<p>4.  Distribution Restrictions:</p>
+<p>4.1. You may not use the Licensor’s trademarks in a way that suggests your software components and/or programs are provided by or are endorsed by the Licensor; and</p>
+<p>4.2. You may not <a name="OLE_LINK1" id="OLE_LINK1">commercially exploit </a>this Software or products that incorporate this Software. Commercial exploitation includes, but is not limited to, charging a purchase price, license fee, maintenance fee, or subscription fee.</p>
+<p>4.3. Your rights to this Software do not include any license, right, power or authority to subject this Software in whole or in part to any of the terms of an Excluded License. "Excluded License" means any license that requires as a condition of use, modification and/or distribution of software subject to the Excluded License, that such software or other software combined and/or distributed with such software be (a) disclosed or distributed in source code form; or (b) licens [...]
+<p>5.  Additional Terms Applicable to Software:</p>
+<p>5.1. This Software is licensed, not sold. This License only gives you some rights to use this Software; the Licensor reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use this Software only as expressly permitted in this License.</p>
+<p>5.2. Licensor has no obligation to fix, update, supplement or support this Software.</p>
+<p>5.3. This Software is not designed, manufactured or intended for any use requiring fail-safe performance in which the failure of this Software could lead to death, serious personal injury or severe physical and environmental damage (“High Risk Activities”), such as the operation of aircraft, medical or nuclear facilities. You agree not to use, or license the use of, this Software in connection with any High Risk Activities.</p>
+<p>5.4. Your rights under this License terminate automatically if you breach this License in any way. Termination of this License will not affect any of your obligations or liabilities arising prior to termination. The following sections of this License shall survive termination: 2.1, 3.1, 3.2, 3.3, 4.1, 4.2, 4.3, 5.1, 5.2, 5.3, 5.5, 5.6, 5.7, 5.8, and 5.9.</p>
+<p>5.5. This Software is subject to United States export laws and regulations. You agree to comply with all domestic and international export laws and regulations that apply to this Software. These laws include restrictions on destinations, end users and end use.</p>
+<p>5.6. This License shall be construed and controlled by the laws of the State of California, U.S.A., without regard to conflicts of law. You consent to the jurisdiction of the state and federal courts situated in the State of California in any action arising under this License. The application of the U.N. Convention on Contracts for the International Sale of Goods to this License is hereby expressly excluded. If any provision of this License shall be deemed unenforceable or contrary to [...]
+<p>5.7. THIS SOFTWARE IS LICENSED "AS IS". YOU BEAR ALL RISKS OF USING IT. LICENSOR GIVES NO EXPRESS WARRANTIES, REPRESENTATIONS OR GUARANTEES.  YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS LICENSE CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, LICENSOR EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.</p>
+<p>5.8. LICENSOR’S LIABILITY TO YOU FOR DIRECT DAMAGES ARISING UNDER THIS LICENSE IS LIMITED TO U.S. $1.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES, EVEN IF LICENSOR IS EXPRESSLY MADE AWARE OF THE POSSIBILITY THEREOF OR IS NEGLIGENT. THIS LIMITATION APPLIES TO ANYTHING RELATED TO THIS SOFTWARE, SERVICES, CONTENT (INCLUDING CODE) ON THIRD PARTY INTERNET SITES, OR THIRD PARTY PROGRAMS, AND CLAIMS FOR BREACH  [...]
+<p>5.9. Use, duplication or disclosure of this Software by the U.S. Government is subject to the restricted rights applicable to commercial computer software (under FAR 52.227019 and DFARS 252.227-7013 or parallel regulations). The manufacturer for this purpose is Thermo Finnigan LLC, 355 River Oaks Parkway, San Jose, California 95134, U.S.A.</p>
+    </div>
+    <li>Waters WRDAC</li>
+    <div class="lic-div">
+<p align="center"><strong>END-USER SOFTWARE LICENSE TERMS FOR WATERS WRDAC SOFTWARE</strong></p>
+<p>Waters grants you a nonexclusive and terminable license to (i) use the software to perform internal information and data processing in connection with Waters and other non-Waters instrumentation products for non-commercial purposes only and (ii) distribute the software as part of the ProteoWizard Software version 2.1 for non-commercial purposes only.   You may not incorporate the software into a commercial application nor charge any fee for the software.  The software is protected by  [...]
+<p>THE SOFTWARE IS PROVIDED “AS IS” AND WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED, BY STATUTE OR OTHERWISE, REGARDING THE WRDAC, INCLUDING WITHOUT LIMITATION THE WARRANTIES OF NON-INFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE AND MERCHANTABILITY.  Waters shall not be liable for any direct, indirect, special, consequential or punitive damages of any kind arising out of or in connection with the software.  In the event that the foregoing disclaimers are not effective under appl [...]
+<p>You agree to comply fully with all relevant export laws and regulations of the United States ("Export Laws") to ensure that the software is (a) not exported directly or indirectly in violation of Export Laws and (b) not intended to be used for any purposes prohibited by the Export Laws. If you are a branch of the United States government, you shall have "restricted rights" to use, duplicate, or disclose the software as set forth in subdivision (c)(1)(ii) of Rights  [...]
+<p> </p>
+</div>
+</ul>
+
+<br />
+<H3> Step 3, Click below to agree to Licenses and get Crux</H3>
+
+<div style="width:600px;margin-left:10px;margin-top:10px;margin-bottom:10px;border:1px solid black;">
+The most recent build of Crux is temporarily unavailable for OS X.
+If you need a copy of Crux for OS X, please download release 3.0.
+</div>
+
+<input 
+  type="submit"
+  name="release_button"
+  value="I agree to the licensing terms, download release 3.0 of Crux"
+/>
+<br/>
+<input 
+  type="submit" 
+  name="daily_button"
+  value="I agree to the licensing terms, download the most recent build of Crux"
+/>
+</form>
+
+<br>
+<br>
+<br>
+
+    <p>
+Note that you can access the most recent source code from the Crux main development
+trunk using the following Git command:<br>
+<code>   git clone https://github.com/crux-toolkit/crux-toolkit.git crux-toolkit</code></p>
+
+  <!-- END CONTENT -->
+    </div>
+  </div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+  
+</body>
+
+</html>
diff --git a/doc/user/example-files/default.params b/doc/user/example-files/default.params
new file mode 100644
index 0000000..5e447aa
--- /dev/null
+++ b/doc/user/example-files/default.params
@@ -0,0 +1,1676 @@
+################################################################################
+# Sample parameter file
+#
+# On each line, anything after a '#' will be ignored.
+# The format is:
+#
+# <parameter-name>=<value>
+#
+################################################################################
+
+# Crux parameter file (generated by Crux version 2.1)
+# Full documentation available at http://cruxtoolkit.sourceforge.net/
+# comet_version 2016.01 rev. 1
+# Everything following the '#' symbol is treated as a comment.
+
+# Path where pin file will be written instead of make-pin.pin.
+# It is optional for make-pin
+output-file=
+
+# Specify the verbosity of the current processes. Each level prints the
+# following messages, including all those at lower verbosity levels: 0-fatal
+# errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of
+# execution, 40-more progress information, 50-debug info, 60-detailed debug
+# info.
+# Available for all crux programs.
+verbosity=30
+
+# A file containing parameters. 
+# Available for all crux programs. Any options specified on the command line
+# will override values in the parameter file.
+parameter-file=
+
+# Replace existing files if true or fail when trying to overwrite a file if
+# false.
+# Available for all crux programs.  Applies to parameter file as well as index,
+# search, and analysis output files.
+overwrite=false
+
+# The minimum length of peptides to consider.
+# Used from the command line or parameter file by crux-generate-peptides, and
+# crux tide-index.
+min-length=6
+
+# The maximum length of peptides to consider.
+# Available from command line or parameter file for crux-generate-peptides, crux
+# tide-index. 
+max-length=50
+
+# The minimum mass (in Da) of peptides to consider.
+# Available from command line or parameter file for crux-generate-peptides and
+# crux tide-index. 
+min-mass=200
+
+# The maximum mass (in Da) of peptides to consider.
+# Available from command line or parameter file for crux-generate-peptides and
+# crux tide-index. 
+max-mass=7200
+
+# The minimum number of peaks a spectrum must have for it to be searched.
+# Available for tide-search.
+min-peaks=20
+
+# Specify the enzyme used to digest the proteins in silico. Available enzymes
+# (with the corresponding digestion rules indicated in parentheses) include
+# no-enzyme ([X]|[X]), trypsin ([RK]|{P}), trypsin/p ([RK]|[]), chymotrypsin
+# ([FWYL]|{P}), elastase ([ALIV]|{P}), clostripain ([R]|[]), cyanogen-bromide
+# ([M]|[]), iodosobenzoate ([W]|[]), proline-endopeptidase ([P]|[]),
+# staph-protease ([E]|[]), asp-n ([]|[D]), lys-c ([K]|{P}), lys-n ([]|[K]),
+# arg-c ([R]|{P}), glu-c ([DE]|{P}), pepsin-a ([FL]|{P}),
+# elastase-trypsin-chymotrypsin ([ALIVKRWFY]|{P}). Specifying --enzyme no-enzyme
+# yields a non-enzymatic digest. Warning: the resulting index may be quite
+# large.
+# Available for crux-generate-peptides and crux tide-index.
+enzyme=trypsin
+
+# Specify rules for in silico digestion of protein sequences. Overrides the
+# enzyme option. Two lists of residues are given enclosed in square brackets or
+# curly braces and separated by a |. The first list contains residues
+# required/prohibited before the cleavage site and the second list is residues
+# after the cleavage site. If the residues are required for digestion, they are
+# in square brackets, '[' and ']'. If the residues prevent digestion, then they
+# are enclosed in curly braces, '{' and '}'. Use X to indicate all residues. For
+# example, trypsin cuts after R or K but not before P which is represented as
+# [RK]|{P}. AspN cuts after any residue but only before D which is represented
+# as [X]|[D].
+# 
+custom-enzyme=
+
+# Specify whether every peptide in the database must have two enzymatic termini
+# (full-digest) or if peptides with only one enzymatic terminus are also
+# included (partial-digest).
+# Available for crux-generate-peptides and crux tide-index.
+digestion=full-digest
+
+# Maximum number of missed cleavages per peptide to allow in enzymatic
+# digestion.
+# Available from command line or parameter file for crux-generate-peptides. When
+# used with enzyme=<trypsin|elastase|chymotrypsin> includes peptides containing
+# one or more potential cleavage sites.
+missed-cleavages=0
+
+# Tolerance used for matching peptides to spectra. Peptides must be within +/-
+# 'precursor-window' of the spectrum value. The precursor window units depend
+# upon precursor-window-type.
+# Available for tide-search and crux-generate-peptides.
+precursor-window=3
+
+# Specify the units for the window that is used to select peptides around the
+# precursor mass location (mass, mz, ppm). The magnitude of the window is
+# defined by the precursor-window option, and candidate peptides must fall
+# within this window. For the mass window-type, the spectrum precursor m+h value
+# is converted to mass, and the window is defined as that mass +/-
+# precursor-window. If the m+h value is not available, then the mass is
+# calculated from the precursor m/z and provided charge. The peptide mass is
+# computed as the sum of the average amino acid masses plus 18 Da for the
+# terminal OH group. The mz window-type calculates the window as spectrum
+# precursor m/z +/- precursor-window and then converts the resulting m/z range
+# to the peptide mass range using the precursor charge. For the
+# parts-per-million (ppm) window-type, the spectrum mass is calculated as in the
+# mass type. The lower bound of the mass window is then defined as the spectrum
+# mass / (1.0 + (precursor-window / 1000000)) and the upper bound is defined as
+# spectrum mass / (1.0 - (precursor-window / 1000000)).
+# Available for search-for-xlinks and tide-search.
+precursor-window-type=mass
+
+# Specify the parser to use for reading in MS/MS spectra.
+# Available for search-for-xlinks.
+spectrum-parser=pwiz
+
+# Specify whether, when parsing an MS2 spectrum file, Crux obtains the precursor
+# mass information from the "S" line or the "Z" line. 
+# Available when spectrum-parser = pwiz.
+use-z-line=true
+
+# When creating decoy peptides using decoy-format=shuffle or
+# decoy-format=peptide-reverse, this option specifies whether the N-terminal and
+# C-terminal amino acids are kept in place or allowed to be shuffled or
+# reversed. For a target peptide "EAMPK" with decoy-format=peptide-reverse,
+# setting keep-terminal-aminos to "NC" will yield "EPMAK"; setting it to "C"
+# will yield "PMAEK"; setting it to "N" will yield "EKPMA"; and setting it to
+# "none" will yield "KPMAE".
+# Available for tide-index.
+keep-terminal-aminos=NC
+
+# Create in the output directory a text file listing of all the peptides in the
+# database, along with their neutral masses, one per line. If decoys are
+# generated, then a second file will be created containing the decoy peptides.
+# Decoys that also appear in the target database are marked with an asterisk in
+# a third column.
+# Available for tide-index.
+peptide-list=false
+
+# Stop after the specified pre-processing step.
+# Available for print-processed-spectra.
+stop-after=xcorr
+
+# Specify the output units for processed spectra.
+# Available for print-processed-spectra
+output-units=bin
+
+# Outputs an SQT results file to the output directory. Note that if sqt-output
+# is enabled, then compute-sp is automatically enabled and cannot be overridden.
+# Available for tide-search.
+sqt-output=false
+
+# Output an mzIdentML results file to the output directory.
+# Available for tide-search, percolator.
+mzid-output=false
+
+# Output a Percolator input (PIN) file to the output directory.
+# Available for tide-search.
+pin-output=false
+
+# Output a Percolator pout.xml format results file to the output directory.
+# Available for percolator.
+pout-output=false
+
+# Output a pepXML results file to the output directory.
+# Available for tide-search, q-ranker, barista, percolator.
+pepxml-output=false
+
+# Output a tab-delimited results file to the output directory.
+# Available for tide-search, percolator, q-ranker, barista.
+txt-output=true
+
+# Compute the preliminary score Sp for all candidate peptides. Report this score
+# in the output, along with the corresponding rank, the number of matched ions
+# and the total number of ions. This option is recommended if results are to be
+# analyzed by Percolator or Barista. If sqt-output is enabled, then compute-sp
+# is automatically enabled and cannot be overridden. Note that the Sp
+# computation requires re-processing each observed spectrum, so turning on this
+# switch involves significant computational overhead.
+# Available for tide-search.
+compute-sp=false
+
+# Estimate the parameters of the score distribution for each spectrum by fitting
+# to a Weibull distribution, and compute a p-value for each xlink product. This
+# option is only available when use-old-xlink=F.
+# Currently only implemented for XCORR.
+compute-p-values=false
+
+# A single scan number or a range of numbers to be searched. Range should be
+# specified as 'first-last' which will include scans 'first' and 'last'.
+# The search range x-y is inclusive of x and y.
+scan-number=
+
+# Before calculation of the XCorr score, the m/z axes of the observed and
+# theoretical spectra are discretized. This parameter specifies the size of each
+# bin. The exact formula is floor((x/mz-bin-width) + 1.0 - mz-bin-offset), where
+# x is the observed m/z value. For low resolution ion trap ms/ms data 1.0005079
+# and for high resolution ms/ms 0.02 is recommended.
+# Available for tide-search and xlink-assign-ions.
+mz-bin-width=1.0005079
+
+# In the discretization of the m/z axes of the observed and theoretical spectra,
+# this parameter specifies the location of the left edge of the first bin,
+# relative to mass = 0 (i.e., mz-bin-offset = 0.xx means the left edge of the
+# first bin will be located at +0.xx Da).
+# Available for tide-search.
+mz-bin-offset=0.4
+
+# Include flanking peaks around singly charged b and y theoretical ions. Each
+# flanking peak occurs in the adjacent m/z bin and has half the intensity of the
+# primary peak.
+# Available for the tide-search and search-for-xlinks commands.
+use-flanking-peaks=false
+
+# The lowest spectrum m/z to search in the ms2 file.
+# Available for tide-search.
+spectrum-min-mz=0
+
+# The highest spectrum m/z to search in the ms2 file.
+# Available for tide-search.
+spectrum-max-mz=1e+009
+
+# The spectrum charges to search. With 'all' every spectrum will be searched and
+# spectra with multiple charge states will be searched once at each charge
+# state. With 1, 2, or 3 only spectra with that charge state will be searched.
+# Used by tide-search.
+spectrum-charge=all
+
+# The fileroot string will be added as a prefix to all output file names.
+# Available for all commands that produce an output directory.
+fileroot=
+
+# The name of the directory where output files will be created.
+# Available for most commands.
+output-dir=crux-output
+
+# Specify the number of matches to report for each spectrum.
+# Available for tide-search and crux percolator
+top-match=5
+
+# When given a unsigned integer value seeds the random number generator with
+# that value. When given the string "time" seeds the random number generator
+# with the system time.
+# Available for all Crux commands.
+seed=1
+
+# Specify which isotopes to use in calculating fragment ion mass.
+# Used by crux-predict-peptide-ions.
+fragment-mass=mono
+
+# Specify the type of isotopic masses to use when calculating the peptide mass.
+# Used from command line or parameter file by crux-generate-peptides.
+isotopic-mass=mono
+
+# The minimum number of modifications that can be applied to a single peptide.
+# Available for tide-index.
+min-mods=0
+
+# The maximum number of modifications that can be applied to a single peptide.
+# Available for tide-index.
+max-mods=255
+
+# Specify how sequence modifications are reported in various output files. Each
+# modification is reported as a number enclosed in square braces following the
+# modified residue; however, the number may correspond to one of three different
+# masses: (1) 'mod-only' reports the value of the mass shift induced by the
+# modification; (2) 'total' reports the mass of the residue with the
+# modification (residue mass plus modification mass); (3) 'separate' is the same
+# as 'mod-only', but multiple modifications to a single amino acid are reported
+# as a comma-separated list of values. For example, suppose amino acid D has an
+# unmodified mass of 115 as well as two moifications of masses +14 and +2. In
+# this case, the amino acid would be reported as D[16] with 'mod-only', D[131]
+# with 'total', and D[14,2] with 'separate'.
+# Available for generate-peptides.
+mod-mass-format=mod-only
+
+# Consider a-ions in the search? Note that an a-ion is equivalent to a neutral
+# loss of CO from the b-ion.  Peak height is 10 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-a-ions=false
+
+# Consider b-ions in the search? Peak height is 50 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-b-ions=true
+
+# Consider c-ions in the search? Peak height is 50 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-c-ions=false
+
+# Consider x-ions in the search? Peak height is 10 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-x-ions=false
+
+# Consider y-ions in the search? Peak height is 50 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-y-ions=true
+
+# Consider z-ions in the search? Peak height is 50 (in arbitrary units).
+# Available for search-for-xlinks and xlink-score-spectrum.
+use-z-ions=false
+
+# Set the precision for scores written to sqt and text files. Note that this
+# parameter only takes effect when specified in the parameter file.
+# Available percolator.
+precision=8
+
+# Set the precision for masses and m/z written to sqt and .txt files. Note that
+# this parameter only takes effect when specified in the parameter file.
+# Available for all commands.
+mass-precision=4
+
+# Show search progress by printing every n spectra searched. Set to 0 to show no
+# search progress.
+# Available for tide-search
+print-search-progress=1000
+
+# When given a unsigned integer value seeds the random number generator with
+# that value. When given the string "time" seeds the random number generator
+# with the system time.
+# Available for all percolator
+percolator-seed=1
+
+# Output the computed features in tab-delimited text format.
+# Available for percolator and q-ranker.
+feature-file-out=false
+
+# Include decoys (PSMs, peptides, and/or proteins) in the XML output.
+# Available for crux percolator
+decoy-xml-output=false
+
+# Specifies the prefix of the protein names that indicate a decoy.
+# Available for percolator
+decoy-prefix=decoy_
+
+# Output final weights to a file named "percolator.weights.txt".
+# Available for crux percolator
+output-weights=false
+
+# Read initial weights from the given file (one per line).
+# Available for crux percolator 
+init-weights=
+
+# Penalty for mistakes made on positive examples. If this value is not
+# specified, then it is set via cross validation over the values {0.1, 1, 10},
+# selecting the value that yields the largest number of PSMs identified at the
+# q-value threshold set via the --test-fdr parameter.
+# Available for crux percolator
+c-pos=0.01
+
+# Penalty for mistake made on negative examples. This parameter requires the
+# c-pos is set explicitly; otherwise, --c-neg will have no effect. If not
+# specified, then this value is set by cross validation over {0.1, 1, 10}.
+# Available for crux percolator
+c-neg=0
+
+# False discovery rate threshold to define positive examples in training.
+# Available for crux percolator
+train-fdr=0.01
+
+# False discovery rate threshold used in selecting hyperparameters during
+# internal cross-validation and for reporting the final results.
+# Available for crux percolator.
+test-fdr=0.01
+
+# Apply the specified threshold to PSM, peptide and protein probabilities to
+# obtain a faster estimate of the alpha, beta and gamma parameters.
+# Available for crux percolator.
+fido-fast-gridsearch=0
+
+# Approximate the posterior distribution by allowing large graph components to
+# be split into subgraphs. The splitting is done by duplicating peptides with
+# low probabilities. Splitting continues until the number of possible
+# configurations of each subgraph is below 2^18
+# Available for crux percolator
+fido-split-large-components=false
+
+# To speed up inference, proteins for which none of the associated peptides has
+# a probability exceeding the specified threshold will be assigned probability =
+# 0.
+# Available for crux percolator
+fido-protein-truncation-threshold=0.01
+
+# Replace the target-decoy competition with the method qvality to assign
+# q-values and PEPs. Note that this option only has an effect if the input PSMs
+# are from separate target and decoy searches.
+# Available for crux percolator
+post-processing-qvality=false
+
+# Maximum number of iterations for training.
+# Available for crux percolator
+maxiter=10
+
+# Quicker execution by reduced internal cross-validation.
+# Available for crux percolator
+quick-validation=false
+
+# In its initial round of training, Percolator uses one feature to induce a
+# ranking of PSMs. By default, Percolator will select the feature that produces
+# the largest set of target PSMs at a specified FDR threshold (cf. --train-fdr).
+# This option allows the user to specify which feature is used for the initial
+# ranking, using the name as a string. The name can be preceded by a hyphen
+# (e.g. "-XCorr") to indicate that a lower value is better.
+# Available for crux percolator
+default-direction=
+
+# Use unit normalization (i.e., linearly rescale each PSM's feature vector to
+# have a Euclidean length of 1), instead of standard deviation normalization.
+# Available for crux percolator.
+unitnorm=false
+
+# Measure performance on test set each iteration.
+# Available for crux percolator.
+test-each-iteration=false
+
+# When set to T, interpret the input file as a PIN file.
+# Available for crux percolator.
+feature-file-in=false
+
+# Use the Fido algorithm to infer protein probabilities. Must be true to use any
+# of the Fido options.
+# Available for crux percolator
+protein=false
+
+# Specify the probability with which a present protein emits an associated
+# peptide. Set by grid search (see --fido-gridsearch-depth parameter) if not
+# specified.
+# Available for crux percolator if --protein T is set.
+fido-alpha=0
+
+# Specify the probability of the creation of a peptide from noise. Set by grid
+# search (see --fido-gridsearch-depth parameter) if not specified.
+# Available for crux percolator if --protein T is set.
+fido-beta=0
+
+# Specify the prior probability that a protein is present in the sample. Set by
+# grid search (see --fido-gridsearch-depth parameter) if not specified.
+# Available for crux percolator if --protein T is set.
+fido-gamma=0
+
+# Use pi_0 value when calculating empirical q-values
+# Available for crux percolator if --protein T is set.
+fido-protein-level-pi0=false
+
+# Estimate empirical p-values and q-values for proteins using target-decoy
+# analysis.
+# Available for crux percolator if --protein T is set.
+fido-empirical-protein-q=false
+
+# Set depth of the grid search for alpha, beta and gamma estimation.
+# Available for crux percolator if --protein T is set.
+fido-gridsearch-depth=0
+
+# Use target-decoy competition to assign q-values and PEPs.
+# Available for crux percolator
+post-processing-tdc=false
+
+# Q-value threshold that will be used in the computation of the MSE and ROC AUC
+# score in the grid search.
+# Available for crux percolator if --protein T is set.
+fido-gridsearch-mse-threshold=0.05
+
+# By default, Percolator will examine the learned weights for each feature, and
+# if the weight appears to be problematic, then percolator will discard the
+# learned weights and instead employ a previously trained, static score vector.
+# This switch allows this error checking to be overriden.
+# Available for crux percolator.
+override=false
+
+# Use retention time features calculated as in "Improving tandem mass spectrum
+# identification using peptide retention time prediction across diverse
+# chromatography conditions" by Klammer AA, Yi X, MacCoss MJ and Noble WS.
+# (Analytical Chemistry. 2007 Aug 15;79(16):6111-8.).
+# Available for crux percolator
+klammer=false
+
+# Do not remove redundant peptides; keep all PSMs and exclude peptide level
+# probability.
+# Available for crux percolator
+only-psms=false
+
+# Include a decoy version of every peptide by shuffling or reversing the target
+# sequence or protein. In shuffle or peptide-reverse mode, each peptide is
+# either reversed or shuffled, leaving the N-terminal and C-terminal amino acids
+# in place. Note that peptides appear multiple times in the target database are
+# only shuffled once. In peptide-reverse mode, palindromic peptides are
+# shuffled. Also, if a shuffled peptide produces an overlap with the target or
+# decoy database, then the peptide is re-shuffled up to 5 times. Note that,
+# despite this repeated shuffling, homopolymers will appear in both the target
+# and decoy database. The protein-reverse mode reverses the entire protein
+# sequence, irrespective of the composite peptides.
+# Available for tide-index
+decoy-format=shuffle
+
+# Expression for static and variable mass modifications to include. Specify a
+# comma-separated list of modification sequences of the form:
+# C+57.02146,2M+15.9949,1STY+79.966331,...
+# Available for tide-index
+mods-spec=C+57.02146
+
+# Specifies N-terminal static and variable mass modifications on peptides.
+# Specify a comma-separated list of N-terminal modification sequences of the
+# form: 1E-18.0106,C-17.0265
+# Available for tide-index
+nterm-peptide-mods-spec=
+
+# Specifies C-terminal static and variable mass modifications on peptides.
+# Specify a comma-separated list of C-terminal modification sequences of the
+# form: X+21.9819
+# Available for tide-index
+cterm-peptide-mods-spec=
+
+# Specify the name of the file where the binarized fragmentation spectra will be
+# stored. Subsequent runs of crux tide-search will execute more quickly if
+# provided with the spectra in binary format. The filename is specified relative
+# to the current working directory, not the Crux output directory (as specified
+# by --output-dir). This option is not valid if multiple input spectrum files
+# are given.
+# Available for tide-search
+store-spectra=
+
+# Enable the calculation of exact p-values for the XCorr score. Calculation of
+# p-values increases the running time but increases the number of
+# identifications at a fixed confidence threshold. The p-values will be reported
+# in a new column with header "exact p-value", and the "xcorr score" column will
+# be replaced with a "refactored xcorr" column. Note that, currently, p-values
+# can only be computed when the mz-bin-width parameter is set to its default
+# value. Variable and static mods are allowed on non-terminal residues in
+# conjunction with p-value computation, but currently only static mods are
+# allowed on the N-terminus, and no mods on the C-terminus.
+# Available for tide-search
+exact-p-value=false
+
+# When providing a FASTA file as the index, the generated binary index will be
+# stored at the given path. This option has no effect if a binary index is
+# provided as the index.
+# Available for tide-search
+store-index=
+
+# When set to T, target and decoy search results are reported in a single file,
+# and only the top-scoring N matches (as specified via --top-match) are reported
+# for each spectrum, irrespective of whether the matches involve target or decoy
+# peptides.
+# Available for tide-search
+concat=false
+
+# Include the file column in tab-delimited output.
+# Available for tide-search
+file-column=true
+
+# If true, all peaks around the precursor m/z will be removed, within a range
+# specified by the --remove-precursor-tolerance option.
+# Available for tide-search.
+remove-precursor-peak=false
+
+# This parameter specifies the tolerance (in Th) around each precursor m/z that
+# is removed when the --remove-precursor-peak option is invoked.
+# Available for print-processed spectra and tide-search.
+remove-precursor-tolerance=1.5
+
+# When set to T, for each protein that begins with methionine, tide-index will
+# put two copies of the leading peptide into the index, with and without the
+# N-terminal methionine.
+# Available for tide-index.
+clip-nterm-methionine=false
+
+# Prevent duplicate peptides between the target and decoy databases. When set to
+# "F", the program keeps all target and previously generated decoy peptides in
+# memory. A shuffled decoy will be re-shuffled multiple times to avoid
+# duplication. If a non-duplicated peptide cannot be generated, the decoy is
+# skipped entirely. When set to "T", every decoy is added to the database
+# without checking for duplication. This option reduces the memory requirements
+# significantly. Default = F.
+# Available for tide-index.
+allow-dups=false
+
+# Controls whether neutral loss ions are considered in the search. Two types of
+# neutral losses are included and are applied only to singly charged b- and
+# y-ions: loss of ammonia (NH3, 17.0086343 Da) and H2O (18.0091422). Each
+# neutral loss peak has intensity 1/5 of the primary peak.
+# Available for tide-search.
+use-neutral-loss-peaks=true
+
+# The maximum charge state of a spectra to consider in search.
+# Available for tide-search.
+max-precursor-charge=5
+
+# Carries out a peptide-centric search. For each peptide the top-scoring spectra
+# are reported, in contrast to the standard spectrum-centric search where the
+# top-scoring peptides are reported. Note that in this case the "xcorr rank"
+# column will contain the rank of the given spectrum with respect to the given
+# candidate peptide, rather than vice versa (which is the default).
+# Available for tide-search.
+peptide-centric-search=false
+
+# 0=poll CPU to set num threads; else specify num threads directly.
+# Available for tide-search tab-delimited files only.
+num-threads=0
+
+# Analysis begins with a pre-processsing step that creates a set of lookup
+# tables which are then used during training. Normally, these lookup tables are
+# deleted at the end of the analysis, but setting this option to T prevents the
+# deletion of these tables. Subsequently, analyses can be repeated more
+# efficiently by specifying the --re-run option.
+# Available for q-ranker and barista.
+skip-cleanup=false
+
+# Re-run a previous analysis using a previously computed set of lookup tables.
+# For this option to work, the --skip-cleanup option must have been set to true
+# when the program was run the first time.
+# Available for q-ranker and barista.
+re-run=
+
+# Use an enriched feature set, including separate features for each ion type.
+# Available for q-ranker and barista.
+use-spec-features=true
+
+# If the target and decoy searches were run separately, rather than using a
+# concatenated database, then the program will assume that the database search
+# results provided as a required argument are from the target database search.
+# This option then allows the user to specify the location of the decoy search
+# results. Like the required arguments, these search results can be provided as
+# a single file, a list of files or a directory. However, the choice (file, list
+# or directory) must be consistent for the MS2 files and the target and decoy
+# tab-delimited files. Also, if the MS2 and tab-delimited files are provided in
+# directories, then Q-ranker will use the MS2 filename (foo.ms2) to identify
+# corresponding target and decoy tab-delimited files with names like
+# foo*.target.txt and foo*.decoy.txt. This naming convention allows the target
+# and decoy txt files to reside in the same directory.
+# Available for q-ranker and barista.
+separate-searches=
+
+# Specify that the search results are provided as lists of files, rather than as
+# individual files.
+# Available for barista and percolator.
+list-of-files=false
+
+# Specifies whether to do optimization at the protein, peptide or psm level.
+# Available for barista.
+optimization=protein
+
+# Specify the method used to estimate q-values: the mix-max procedure or
+# target-decoy competition. peptide-level is applied for spectrum-centric
+# search. Eliminates any PSMS for which there exists a better scoring PSM
+# involving the same peptide. 
+# Used by assign-confidence.
+estimation-method=tdc
+
+# Adjust the score using the Sidak adjustment and reports them in a new column
+# in the output file. Note that this adjustment only makes sense if the given
+# scores are p-values, and that it requires the presence of the "distinct
+# matches/spectrum" feature for each PSM.
+# Used by assign-confidence.
+sidak=false
+
+# Specify the column (for tab-delimited input) or tag (for XML input) used as
+# input to the q-value estimation procedure. If this parameter is unspecified,
+# then assign-confidence tries to seach for "xcorr score", "evalue" (comet),
+# "exact p-value" score fields in this order in the input file. 
+# Used by assign-confidence.
+score=
+
+# Specify this parameter to T in order to combine charge states with peptide
+# sequencesin peptide-centric search. Works only if peptide-level=T.
+# Used by assign-confidence.
+combine-charge-states=false
+
+# Specify this parameter to T in order to treat peptides carrying different or
+# no modifications as being the same. Works only if peptide-level=T.
+# Used by assign-confidence.
+combine-modified-peptides=false
+
+# The q-value threshold used by cascade search. Spectra identified with q-value
+# less than this threshold in one search will be excluded from all subsequent
+# searches.
+# Used by Cascade-Search
+q-value-threshold=0.01
+
+# Predict the specified primary ion series. 'a' indicates a-ions only, 'b'
+# indicates b-ions only, 'y' indicates y-ions only, 'by' indicates both b and y,
+# 'bya' indicates b, y, and a.
+# Only available for crux-predict-peptide-ions. Set automatically to 'by' for
+# searching.
+primary-ions=by
+
+# Predict the precursor ions, and all associated ions (neutral losses, multiple
+# charge states) consistent with the other specified options.
+# Only available for crux-predict-peptide-ions.
+precursor-ions=false
+
+# Predict the given number of isotope peaks (0|1|2).
+# Only available for crux-predict-peptide-ion.  Automatically set to 0 for Sp
+# scoring and 1 for xcorr scoring.
+isotope=0
+
+# Predict flanking peaks for b- and y ions.
+# Only available for crux-predict-peptide-ion.
+flanking=false
+
+# Predict theoretical ions up to max charge state (1, 2, ... ,6) or up to the
+# charge state of the peptide ("peptide"). If the max-ion-charge is greater than
+# the charge state of the peptide, then the maximum is the peptide charge. 
+# Available for predict-peptide-ions and search-for-xlinks. Set to 'peptide' for
+# search.
+max-ion-charge=peptide
+
+# Include among the predicted peaks b/y ions with up to n losses of nh3. For
+# example, for --nh3 2, predict a peak for each b- and y-ion with the loss of
+# one nh3 group and predict a second peak for each b- and y-ion with the loss of
+# two nh3 groups. These peaks will have 1 and 2, respectively, in the NH3 column
+# of the output.
+# Only available for crux-predict-peptide-ions.
+nh3=0
+
+# Include in the predicted peaks, b/y ions with the loss of 1 to n water
+# molecules. See --nh3 for an example.
+# Only available for crux-predict-peptide-ions.
+h2o=0
+
+# The name of the file in FASTA format.
+# Option for spectral-counts
+protein-database=
+
+# Type of analysis to make on the match results: (RAW|NSAF|dNSAF|SIN|EMPAI).
+# With exception of the RAW metric, the database of sequences need to be
+# provided using --protein-database.
+# Available for spectral-counts.  RAW is raw counts, NSAF is Normalized Spectral
+# Abundance Factor, dNSAF is Distributed Spectral Abundance Factor, SIN is
+# Spectral Index Normalized and EMPAI is Exponentially Modified Protein
+# Abundance Index
+measure=NSAF
+
+# Ignore peptides that map to multiple proteins.
+# Available for spectral-counts.
+unique-mapping=false
+
+# Quantification at protein or peptide level.
+# Available for spectral-counts and either NSAF and SIN.
+quant-level=protein
+
+# Perform a parsimony analysis on the proteins, and report a "parsimony rank"
+# column in the output file. This column contains integers indicating the
+# protein's rank in a list sorted by spectral counts. If the parsimony analysis
+# results in two proteins being merged, then their parsimony rank is the same.
+# In such a case, the rank is assigned based on the largest spectral count of
+# any protein in the merged meta-protein. The "simple" parsimony algorithm only
+# merges two proteins A and B if the peptides identified in protein A are the
+# same as or a subset of the peptides identified in protein B. The "greedy"
+# parsimony algorithm does additional merging, using the peptide q-values to
+# greedily assign each peptide to a single protein.
+# Available for spectral-counts.
+parsimony=none
+
+# Determines what type of threshold to use when filtering matches. none : read
+# all matches, qvalue : use calculated q-value from percolator or q-ranker,
+# custom : use --custom-threshold-name and --custom-threshold-min parameters.
+# used for crux spectral-counts
+threshold-type=qvalue
+
+# Only consider PSMs with a threshold value. By default, q-values are
+# thresholded using a specified threshold value. This behavior can be changed
+# using the --custom-threshold and --threshold-min parameters.
+# Available for spectral-counts. All PSMs with higher (or lower) than this will
+# be ignored.
+threshold=0.01
+
+# Specify which field to apply the threshold to. The direction of the threshold
+# (<= or >=) is governed by --custom-threshold-min. By default, the threshold
+# applies to the q-value, specified by "percolator q-value", "q-ranker q-value",
+# "decoy q-value (xcorr)", or "barista q-value".
+# Available for spectral-counts.
+custom-threshold-name=
+
+# When selecting matches with a custom threshold, custom-threshold-min
+# determines whether to filter matches with custom-threshold-name values that
+# are greater-than or equal (F) or less-than or equal (T) than the threshold.
+# Available for spectral-counts.
+custom-threshold-min=true
+
+# MS2 file corresponding to the psm file. Required to measure the SIN. Ignored
+# for NSAF, dNSAF and EMPAI.
+# Available for spectral-counts with measure=SIN.
+input-ms2=
+
+# Use mzid's passThreshold attribute to filter matches.
+# Used when parsing mzIdentML files.
+mzid-use-pass-threshold=false
+
+# Change the mass of all amino acids 'A' by the given amount.
+# 
+A=0
+
+# Change the mass of all amino acids 'C' by the given amount.
+# 
+C=57.021464
+
+# Change the mass of all amino acids 'D' by the given amount.
+# 
+D=0
+
+# Change the mass of all amino acids 'E' by the given amount.
+# 
+E=0
+
+# Change the mass of all amino acids 'F' by the given amount.
+# 
+F=0
+
+# Change the mass of all amino acids 'G' by the given amount.
+# 
+G=0
+
+# Change the mass of all amino acids 'H' by the given amount.
+# 
+H=0
+
+# Change the mass of all amino acids 'I' by the given amount.
+# 
+I=0
+
+# Change the mass of all amino acids 'K' by the given amount.
+# 
+K=0
+
+# Change the mass of all amino acids 'L' by the given amount.
+# 
+L=0
+
+# Change the mass of all amino acids 'M' by the given amount.
+# 
+M=0
+
+# Change the mass of all amino acids 'N' by the given amount.
+# 
+N=0
+
+# Change the mass of all amino acids 'P' by the given amount.
+# 
+P=0
+
+# Change the mass of all amino acids 'Q' by the given amount.
+# 
+Q=0
+
+# Change the mass of all amino acids 'R' by the given amount.
+# 
+R=0
+
+# Change the mass of all amino acids 'S' by the given amount.
+# 
+S=0
+
+# Change the mass of all amino acids 'T' by the given amount.
+# 
+T=0
+
+# Change the mass of all amino acids 'V' by the given amount.
+# 
+V=0
+
+# Change the mass of all amino acids 'W' by the given amount.
+# 
+W=0
+
+# Change the mass of all amino acids 'Y' by the given amount.
+# 
+Y=0
+
+# Legal values are auto, tsv, sqt, pin, pepxml or mzidentml format.
+# option, for psm-convert
+input-format=auto
+
+# Whether matches/ion are distinct (as opposed to total).
+# option, for psm-convert.
+distinct-matches=true
+
+# Rather than the spectrum, output summary statistics to standard output. Each
+# statistic is placed on a separate line, in the format <name>:<value> (e.g.
+# "TIC:1000.0").
+# Available only for crux-get-ms2-spectrum.  Does not affect contents of the
+# output file.
+stats=false
+
+# Print the theoretical spectrum
+# Available for xlink-predict-peptide-ions.
+print-theoretical-spectrum=false
+
+# Use the old version of xlink-searching algorithm. When false, a new version of
+# the code is run. The new version supports variable modifications and can
+# handle more complex databases. This new code is still in development and
+# should be considered a beta release.
+# Available for search-for-xlinks program.
+use-old-xlink=true
+
+# Score method for xlink {composite, modification, concatenated}.
+# Available for xlink-score-spectrum.
+xlink-score-method=composite
+
+# Provides a list of isotopic windows to search. For example, -1,0,1 will search
+# in three disjoint windows: (1) precursor_mass - neutron_mass +/- window, (2)
+# precursor_mass +/- window, and (3) precursor_mass + neutron_mass +/- window.
+# The window size is defined from the precursor-window and precursor-window-type
+# parameters. This option is only available when use-old-xlink=F.
+# Used for crux search-for-xlinks
+isotope-windows=0
+
+# Include linear peptides in the search.
+# Available for crux search-for-xlinks program.
+xlink-include-linears=true
+
+# Include dead-end peptides in the search.
+# Available for crux search-for-xlinks program.
+xlink-include-deadends=true
+
+# Include self-loop peptides in the search.
+# Available for crux search-for-xlinks program.
+xlink-include-selfloops=true
+
+# Include intra-protein cross-link candiates within the search.
+# Available for crux search-for-xlinks program.
+xlink-include-intra=true
+
+# Include inter-protein cross-link candidates within the search.
+# Available for crux search-for-xlinks program.
+xlink-include-inter=true
+
+# Include crosslink candidates that are both inter and intra.
+# Available for crux search-for-xlinks program.
+xlink-include-inter-intra=true
+
+# List of amino acids for which the cross-linker can prevent cleavage. This
+# option is only available when use-old-xlink=F.
+# Available for search-for-xlinks program.
+xlink-prevents-cleavage=K
+
+# Specify the maximum number of modifications allowed on a crosslinked peptide.
+# This option is only available when use-old-xlink=F.
+# Available for crux search-for-xlinks
+max-xlink-mods=0
+
+# Search decoy peptides within +/- precursor-window-weibull of the precursor
+# mass. The resulting scores are used only for fitting the Weibull distribution
+# Available for crux search-for-xlinks. 
+precursor-window-weibull=20
+
+# Window type to use in conjunction with the precursor-window-weibull parameter.
+# Available for crux search-for-xlinks
+precursor-window-type-weibull=mass
+
+# Keep shuffling and collecting XCorr scores until the minimum number of points
+# for weibull fitting (using targets and decoys) is achieved.
+# Available for crux search-for-xlinks
+min-weibull-points=4000
+
+# Determines which spectral feature detection algorithm to use. Different
+# results are possible with each algorithm, and there are pros and cons to each.
+# Available for crux hardklor
+hardklor-algorithm=version1
+
+# Defines alternative averagine models in the analysis that incorporate
+# additional atoms and/or isotopic enrichments. Modifications are represented as
+# text strings. Inclusion of additional atoms in the model is done using by
+# entering an atomic formula, such as: PO2 or Cl. Inclusion of isotopic
+# enrichment to the model is done by specifying the percent enrichment (as a
+# decimal) followed by the atom being enriched and an index of the isotope. For
+# example, 0.75H1 specifies 75% enrichment of the first heavy isotope of
+# hydrogen. In other words, 75% deuterium enrichment. Two or more modifications
+# can be combined into the same model, and separated by spaces: B2 0.5B1
+# Available for crux hardklor
+averagine-mod=
+
+# Boxcar averaging is a sliding window that averages n adjacent spectra prior to
+# feature detection. Averaging generally improves the signal-to-noise ratio of
+# features in the spectra, as well as improving the shape of isotopic envelopes.
+# However, averaging will also change the observed peak intensities. Averaging
+# with too wide a window will increase the occurrence of overlapping features
+# and broaden the chromatographic profiles of observed features. The number
+# specified is the total adjacent scans to be combined, centered on the scan
+# being analyzed. Therefore, an odd number is recommended to center the boxcar
+# window. For example, a value of 3 would produce an average of the scan of
+# interest, plus one scan on each side. A value of 0 disables boxcar averaging.
+# Available for crux hardklor
+boxcar-averaging=0
+
+# This parameter is only functional when boxcar-averaging is used. The filter
+# will remove any peaks not seen in n scans in the boxcar window. The effect is
+# to reduce peak accumulation due to noise and reduce chromatographic broadening
+# of peaks. Caution should be used as over-filtering can occur. The suggested
+# number of scans to set for filtering should be equal to or less than the
+# boxcar-averaging window size. A value of 0 disables filtering.
+# Available for crux hardklor
+boxcar-filter=0
+
+# This parameter is only functional when boxcar-filter is used. The value
+# specifies the mass tolerance in ppm for declaring a peak the same prior to
+# filtering across all scans in the boxcar window.
+# Available for crux hardklor
+boxcar-filter-ppm=10
+
+# Indicates whether the data contain profile or centroided peaks.
+# Available for crux hardklor
+centroided=false
+
+# Choose the charge state determination method.
+# Available for crux hardklor
+cdm=Q
+
+# Specifies the minimum charge state to allow when finding spectral features. It
+# is best to set this value to the lowest assumed charge state to be present. If
+# set higher than actual charge states that are present, those features will not
+# be identified or incorrectly assigned a different charge state and mass.
+# Available for crux hardklor
+min-charge=1
+
+# Specifies the maximum charge state to allow when finding spectral features. It
+# is best to set this value to a practical number (i.e. do not set it to 20 when
+# doing a tryptic shotgun analysis). If set higher than actual charge states
+# that are present, the algorithm will perform significantly slower without any
+# improvement in results.
+# Available for crux hardklor
+max-charge=5
+
+# Sets the correlation threshold (cosine similarity) for accepting each
+# predicted feature.
+# Available for crux hardklor
+corr=0.85
+
+# Sets the depth of combinatorial analysis. For a given set of peaks in a
+# spectrum, search for up to this number of combined peptides that explain the
+# observed peaks. The analysis stops before depth is reached if the current
+# number of deconvolved features explains the observed peaks with a correlation
+# score above the threshold defined with the correlation parameter.
+# Available for crux hardklor
+depth=3
+
+# When reporting each feature, report abundance as the sum of all isotope peaks.
+# The value reported is the estimate of the correct peak heights based on the
+# averagine model scaled to the observed peak heights.
+# Available for crux hardklor
+distribution-area=false
+
+# Specifies an ASCII text file that defines symbols for the periodic table.
+# Available for crux hardklor
+hardklor-data-file=
+
+# Indicates the type of instrument used to collect data. This parameter,
+# combined with the resolution parameter, define how spectra will be centroided
+# (if you provide profile spectra) and the accuracy when aligning observed peaks
+# to the models.
+# Available for crux hardklor
+instrument=fticr
+
+# Specifies an ASCII text file that can be read to override the natural isotope
+# abundances for all elements.
+# Available for crux hardklor
+isotope-data-file=
+
+# Specifies the maximum number of models to build for a set of peaks being
+# analyzed. Regardless of the setting, the number of models will never exceed
+# the number of peaks in the current set. However, as many of the low abundance
+# peaks are noise or tail ends of distributions, defining models for them is
+# detrimental to the analysis.
+# Available for crux hardklor
+max-features=10
+
+# Filters the spectra prior to analysis for the requested MS/MS level. For
+# example, if the data contain MS and MS/MS spectra, setting mzxml-filter = 1
+# will analyze only the MS scan events. Setting mzxml-filter = 2 will analyze
+# only the MS/MS scan events.
+# Available for crux hardklor
+mzxml-filter=1
+
+# Constrains the search in each spectrum to signals below this value in
+# Thomsons. Setting to 0 disables this feature.
+# Available for crux hardklor
+mz-max=0
+
+# Constrains the search in each spectrum to signals above this value in
+# Thomsons. Setting to 0 disables this feature.
+# Available for crux hardklor
+mz-min=0
+
+# Only used when algorithm = version1. Defines the maximum window size in
+# Thomsons to analyze when deconvolving peaks in a spectrum into features.
+# Available for crux hardklor
+mz-window=4
+
+# Specifies the resolution of the instrument at 400 m/z for the data being
+# analyzed.
+# Available for crux hardklor
+resolution=100000
+
+# Used to restrict analysis to spectra with scan numbers below this parameter
+# value. A value of 0 disables this feature.
+# Available for crux hardklor
+scan-range-max=0
+
+# Used to restrict analysis to spectra with scan numbers above this parameter
+# value. A value of 0 disables this feature.
+# Available for crux hardklor
+scan-range-min=0
+
+# Set the sensitivity level. There are four levels: 0 (low), 1 (moderate), 2
+# (high), and 3 (max). Increasing the sensitivity will increase computation
+# time, but will also yield more isotope distributions.
+# Available for crux hardklor
+sensitivity=2
+
+# Filters spectra to remove peaks below this signal-to-noise ratio prior to
+# finding features.
+# Available for crux hardklor
+signal-to-noise=1
+
+# Uses Savitzky-Golay smoothing on profile peak data prior to centroiding the
+# spectra. This parameter is recommended for low resolution spectra only.
+# Smoothing data causes peak depression and broadening. Only use odd numbers for
+# the degree of smoothing (as it defines a window centered on each data point).
+# Higher values will produce smoother peaks, but with greater depression and
+# broadening. Setting this parameter to 0 disables smoothing.
+# Available for crux hardklor
+smooth=0
+
+# Set the signal-to-noise window length (in m/z). Because noise may be
+# non-uniform across a spectrum, this value adjusts the segment size considered
+# when calculating a signal-over-noise ratio.
+# Available for crux hardklor
+sn-window=250
+
+# Applies the lowest noise threshold of any sn_window across the entire mass
+# range for a spectrum. Setting this parameter to 0 turns off this feature, and
+# different noise thresholds will be used for each local mass window in a
+# spectrum.
+# Available for crux hardklor
+static-sn=true
+
+# Ignore PPIDs that persist for longer than this length of time in the MS1
+# spectra. The unit of time is whatever unit is used in your data file (usually
+# minutes). These PPIDs are considered contaminants.
+# Available for crux bullseye
+max-persist=2
+
+# When true, require an exact match (as defined by --exact-tolerance) between
+# the center of the precursor isolation window in the MS2 scan and the base
+# isotopic peak of the PPID. If this option is set to false and no exact match
+# is observed, then attempt to match using a wider m/z tolerance. This wider
+# tolerance is calculated using the PPID's monoisotopic mass and charge (the
+# higher the charge, the smaller the window).
+# Available for crux bullseye
+exact-match=false
+
+# Allowed gap size when checking for PPIDs across consecutive MS1 scans.
+# Available for crux bullseye
+gap-tolerance=1
+
+# Only consider PPIDs above this minimum mass in daltons.
+# Available for crux bullseye
+bullseye-min-mass=600
+
+# Only consider PPIDs below this maximum mass in daltons.
+# Available for crux bullseye
+bullseye-max-mass=8000
+
+# Set the tolerance (+/-ppm) for --exact-match.
+# Available for crux bullseye
+exact-tolerance=10
+
+# Set the mass tolerance (+/-ppm) for finding PPIDs in consecutive MS1 scans.
+# Available for crux bullseye
+persist-tolerance=10
+
+# Total number of MS1 scans over which a PPID must be observed to be considered
+# real. Gaps in persistence are allowed by setting --gap-tolerance.
+# Available for crux bullseye
+scan-tolerance=3
+
+# Set the tolerance (+/-units) around the retention time over which a PPID can
+# be matches to the MS2 spectrum. The unit of time is whatever unit is used in
+# your data file (usually minutes).
+# Available for crux bullseye
+retention-tolerance=0.5
+
+# The format to write the output spectra to. If empty, the spectra will be
+# output in the same format as the MS2 input.
+# Available for crux bullseye
+spectrum-format=
+
+# Sort in ascending (T) or descending (F) order.
+# Available for sort-by-column
+ascending=true
+
+# Specify the input and output delimiter to use when processing the delimited
+# file.  The argument can be either a single character or the keyword 'tab.'
+# Available for the delimited utility programs.
+delimiter=tab
+
+# Print the header line of the file, in addition to the columns that match.
+# Available for crux extract-columns and extract-rows
+header=true
+
+# Specifies the data type of the column, either an integer (int), a floating
+# point number (real), or a string.
+# Available for crux extract-rows
+column-type=string
+
+# Specify the operator that is used to compare an entry in the specified column
+# to the value given on the command line.
+# Available for crux extract-rows
+comparison=eq
+
+# Run the Bullseye algorithm on the given MS data, using it to assign
+# high-resolution precursor values to the MS/MS data. If a spectrum file ends
+# with .ms2 or .cms2, matching .ms1/.cms1 files will be used as the MS1 file.
+# Otherwise, it is assumed that the spectrum file contains both MS1 and MS2
+# scans.
+# Available for crux pipeline
+bullseye=false
+
+# Specify which search engine to use.
+# Available for crux pipeline
+search-engine=tide-search
+
+# Specify which post-processor to apply to the search results.
+# Available for crux pipeline
+post-processor=percolator
+
+# Consider modifications on any amino acid in aa list with at most
+# max-per-peptide in one peptide. The parameter takes the form
+# [[html:<mass change>:<aa list>:<max per
+# peptide>:<prevents cleavage>:<prevents cross-link>]].
+# This parameter may be included with different values multiple times so
+# long as the total number of mod, cmod, and nmod parameters does not
+# exceed 11. The "prevents cleavage" and "prevents cross-link" arguments
+# are optional T/F arguments for describing whether the modification
+# prevents enzymatic cleavage of cross-linking, respectively. This
+# option is only available when use-old-xlink=F. Note that this
+# parameter only takes effect when specified in the parameter file.
+# Available for search-for-xlinks.
+mod=NO MODS
+
+# Specify a variable modification to apply to N-terminus of peptides. 
+# <mass change>:<max distance from protein n-term (-1 for no max)> Note
+# that this parameter only takes effect when specified in the parameter
+# file.
+# Available for search-for-xlinks.
+nmod=NO MODS
+
+# Specify a variable modification to apply to C-terminus of peptides.
+# <mass change>:<max distance from protein c-term (-1 for no max)>. Note
+# that this parameter only takes effect when specified in the parameter
+# file.
+# Available for search-for-xlinks.
+cmod=NO MODS
+
+####################
+# Comet Parameters #
+####################
+# 0=no, 1=concatenated search, 2=separate search.
+# Available for comet.
+decoy_search=0
+
+# 0=poll CPU to set num threads; else specify num threads directly.
+# Available for comet.
+num_threads=0
+
+# Controls the mass tolerance value.  The mass tolerance is set at +/- the
+# specified number i.e. an entered value of "1.0" applies a -1.0 to +1.0
+# tolerance. The units of the mass tolerance is controlled by the parameter
+# "peptide_mass_units". 
+# Available for comet.
+peptide_mass_tolerance=3
+
+# 0=amu, 1=mmu, 2=ppm.
+# Available for comet.
+peptide_mass_units=0
+
+# 0=average masses, 1=monoisotopic masses.
+# Available for comet.
+mass_type_parent=1
+
+# 0=average masses, 1=monoisotopic masses.
+# Available for comet.
+mass_type_fragment=1
+
+# 0=singly charged peptide mass, 1=precursor m/z.
+# Available for comet.
+precursor_tolerance_type=0
+
+# 0=off, 1=on -1/0/1/2/3 (standard C13 error), 2=-8/-4/0/4/8 (for +4/+8
+# labeling).
+# Available for comet.
+isotope_error=0
+
+# Specify a search enzyme from the end of the parameter file.
+# Available for comet.
+search_enzyme_number=1
+
+# valid values are 1 (semi-digested), 2 (fully digested), 8 N-term, 9 C-term.
+# Available for comet.
+num_enzyme_termini=2
+
+# Maximum value is 5; for enzyme search.
+# Available for comet.
+allowed_missed_cleavage=2
+
+# Binning to use on fragment ions.
+# Available for comet.
+fragment_bin_tol=1.000507
+
+# Offset position to start the binning (0.0 to 1.0).
+# Available for comet.
+fragment_bin_offset=0.4
+
+# 0=default peak shape, 1=M peak only.
+# Available for comet.
+theoretical_fragment_ions=1
+
+# Controls whether or not A-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_A_ions=0
+
+# Controls whether or not B-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_B_ions=1
+
+# Controls whether or not C-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_C_ions=0
+
+# Controls whether or not X-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_X_ions=0
+
+# Controls whether or not Y-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_Y_ions=1
+
+# Controls whether or not Z-ions are considered in the search (0 - no, 1 - yes).
+# Available for comet.
+use_Z_ions=0
+
+# 0=no, 1= yes to consider NH3/H2O neutral loss peak.
+# Available for comet.
+use_NL_ions=1
+
+# 0=no, 1=yes  write sqt file.
+# Available for comet.
+output_sqtfile=0
+
+# 0=no, 1=yes  write tab-delimited text file.
+# Available for comet.
+output_txtfile=1
+
+# 0=no, 1=yes  write pep.xml file.
+# Available for comet.
+output_pepxmlfile=1
+
+# 0=no, 1=yes write percolator file.
+# Available for comet.
+output_percolatorfile=0
+
+# 0=no, 1=yes  write .out files.
+# Available for comet.
+output_outfiles=0
+
+# 0=no, 1=yes to replace Sp with expect in out & sqt.
+# Available for comet.
+print_expect_score=1
+
+# num peptide results to show.
+# Available for comet.
+num_output_lines=5
+
+# 0=no, 1=yes for out files only.
+# Available for comet.
+show_fragment_ions=0
+
+# Sample enzyme which is possibly different than the one applied to the search.
+# Used to calculate NTT & NMC in pepXML output.
+# Available for comet. 
+sample_enzyme_number=1
+
+# Start and scan scan range to search; 0 as first entry ignores parameter.
+# Available for comet.
+scan_range=0 0
+
+# Precursor charge range to analyze; does not override mzXML charge; 0 as first
+# entry ignores parameter.
+# Available for comet.
+precursor_charge=0 0
+
+# Specifies the whether to override existing precursor charge state information
+# when present in the files with the charge range specified by the
+# "precursor_charge" parameter.
+# Available for comet.
+override_charge=0
+
+# MS level to analyze, valid are levels 2 or 3.
+# Available for comet. 
+ms_level=2
+
+# Specifies which scan types are searched.
+# Available for comet. 
+activation_method=ALL
+
+# MH+ peptide mass range to analyze.
+# Available for comet.
+digest_mass_range=600.0 5000.0
+
+# Number of search hits to store internally.
+# Available for comet.
+num_results=50
+
+# For '.out' file output only, 0=search everything again, 1=don't search if .out
+# exists.
+# Available for comet.
+skip_researching=1
+
+# Set maximum fragment charge state to analyze (allowed max 5).
+# Available for comet.
+max_fragment_charge=3
+
+# Set maximum precursor charge state to analyze (allowed max 9).
+# Available for comet.
+max_precursor_charge=6
+
+# 0=proteinDB, 1-6, 7=forward three, 8=reverse three, 9=all six.
+# Available for comet.
+nucleotide_reading_frame=0
+
+# 0=leave sequences as-is; 1=also consider sequence w/o N-term methionine.
+# Available for comet.
+clip_nterm_methionine=0
+
+# Maximum number of spectra to search at a time; 0 to search the entire scan
+# range in one loop.
+# Available for comet.
+spectrum_batch_size=0
+
+# Specifies the prefix of the protein names that indicates a decoy.
+# Available for comet.
+decoy_prefix=decoy_
+
+# Specifies the suffix string that is appended to the base output name for the
+# pep.xml, pin.xml, txt and sqt output files.
+# Available for comet.
+output_suffix=
+
+# Specifies one or more mass offsets to apply. This value(s) are effectively
+# subtracted from each precursor mass such that peptides that are smaller than
+# the precursor mass by the offset value can still be matched to the respective
+# spectrum.
+# Available for comet.
+mass_offsets=
+
+# Minimum number of peaks in spectrum to search.
+# Available for comet.
+minimum_peaks=10
+
+# Minimum intensity value to read in.
+# Available for comet. 
+minimum_intensity=0
+
+# 0=no, 1=yes, 2=all charge reduced precursor peaks (for ETD).
+# Available for comet. 
+remove_precursor_peak=0
+
+# +- Da tolerance for precursor removal.
+# Available for comet. 
+remove_precursor_tolerance=1.5
+
+# For iTRAQ/TMT type data; will clear out all peaks in the specified m/z range.
+# Available for comet.
+clear_mz_range=0.0 0.0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod01=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod02=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod03=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod04=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod05=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod06=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod07=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod08=0.0 null 0 4 -1 0 0
+
+# Up to 9 variable modifications are supported; format: "<mass> <residues>
+# <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3.
+# Available for comet.
+variable_mod09=0.0 null 0 4 -1 0 0
+
+# Specifies the total/maximum number of residues that can be modified in a
+# peptide.
+# Available for comet.
+max_variable_mods_in_peptide=5
+
+# Controls whether the analyzed peptides must contain at least one variable
+# modification.
+# Available for comet.
+require_variable_mod=0
+
+# Specifiy a static modification to the c-terminus of all peptides.
+# Available for comet.
+add_Cterm_peptide=0
+
+# Specify a static modification to the n-terminus of all peptides.
+# Available for comet.
+add_Nterm_peptide=0
+
+# Specify a static modification to the c-terminal peptide of each protein.
+# Available for comet.
+add_Cterm_protein=0
+
+# Specify a static modification to the n-terminal peptide of each protein.
+# Available for comet.
+add_Nterm_protein=0
+
+# Specify a static modification to the residue A.
+# Available for comet.
+add_A_alanine=0
+
+# Specify a static modification to the residue B.
+# Available for comet.
+add_B_user_amino_acid=0
+
+# Specify a static modification to the residue C.
+# Available for comet.
+add_C_cysteine=57.021464
+
+# Specify a static modification to the residue D.
+# Available for comet.
+add_D_aspartic_acid=0
+
+# Specify a static modification to the residue E.
+# Available for comet.
+add_E_glutamic_acid=0
+
+# Specify a static modification to the residue F.
+# Available for comet.
+add_F_phenylalanine=0
+
+# Specify a static modification to the residue G.
+# Available for comet.
+add_G_glycine=0
+
+# Specify a static modification to the residue H.
+# Available for comet.
+add_H_histidine=0
+
+# Specify a static modification to the residue I.
+# Available for comet.
+add_I_isoleucine=0
+
+# Specify a static modification to the residue J.
+# Available for comet.
+add_J_user_amino_acid=0
+
+# Specify a static modification to the residue K.
+# Available for comet.
+add_K_lysine=0
+
+# Specify a static modification to the residue L.
+# Available for comet.
+add_L_leucine=0
+
+# Specify a static modification to the residue M.
+# Available for comet.
+add_M_methionine=0
+
+# Specify a static modification to the residue N.
+# Available for comet.
+add_N_asparagine=0
+
+# Specify a static modification to the residue O.
+# Available for comet.
+add_O_ornithine=0
+
+# Specify a static modification to the residue P.
+# Available for comet.
+add_P_proline=0
+
+# Specify a static modification to the residue Q.
+# Available for comet.
+add_Q_glutamine=0
+
+# Specify a static modification to the residue R.
+# Available for comet.
+add_R_arginine=0
+
+# Specify a static modification to the residue S.
+# Available for comet.
+add_S_serine=0
+
+# Specify a static modification to the residue T.
+# Available for comet.
+add_T_threonine=0
+
+# Specify a static modification to the residue U.
+# Available for comet.
+add_U_selenocysteine=0
+
+# Specify a static modification to the residue V.
+# Available for comet.
+add_V_valine=0
+
+# Specify a static modification to the residue W.
+# Available for comet.
+add_W_tryptophan=0
+
+# Specify a static modification to the residue X.
+# Available for comet.
+add_X_user_amino_acid=0
+
+# Specify a static modification to the residue Y.
+# Available for comet.
+add_Y_tyrosine=0
+
+# Specify a static modification to the residue Z.
+# Available for comet.
+add_Z_user_amino_acid=0
+
+#
+# COMET_ENZYME_INFO _must_ be at the end of this parameters file
+#
+[COMET_ENZYME_INFO]
+0.  No_enzyme                      0  -          -
+1.  Trypsin                        1  KR         P
+2.  Trypsin/P                      1  KR         -
+3.  Lys_C                          1  K          P
+4.  Lys_N                          0  K          -
+5.  Arg_C                          1  R          P
+6.  Asp_N                          0  D          -
+7.  CNBr                           1  M          -
+8.  Glu_C                          1  DE         P
+9.  PepsinA                        1  FL         P
+10. Chymotrypsin                   1  FWYL       P
diff --git a/doc/user/example-files/demo.ms2 b/doc/user/example-files/demo.ms2
new file mode 100644
index 0000000..9359011
--- /dev/null
+++ b/doc/user/example-files/demo.ms2
@@ -0,0 +1,54667 @@
+H	CreationDate	2/14/2007 6:19:18 PM
+H	Extractor	MakeMS2
+H	ExtractorVersion	1.0
+H	Comments	MakeMS2 written by Michael J. MacCoss, 2004
+H	ExtractorOptions	MS2/MS1
+S	10	10	636.34
+Z	2	1271.67
+187.4 12.5
+193.1 19.5
+194.3 13.7
+198.3 29.8
+199.1 12.2
+208.3 23.1
+208.9 11.4
+210.3 11.8
+213.0 3.3
+214.5 4.3
+216.1 32.8
+219.1 11.2
+221.0 14.3
+222.1 64.0
+225.1 16.6
+226.0 31.6
+228.3 7.2
+229.1 8.5
+230.5 58.2
+231.2 236.1
+232.2 75.8
+233.6 2.4
+234.2 51.4
+235.1 5.6
+236.3 30.2
+239.7 14.4
+241.3 34.8
+242.3 14.2
+244.3 9.0
+245.2 7.5
+247.9 4.4
+250.5 26.5
+253.0 15.9
+254.2 33.1
+255.1 20.2
+258.3 14.8
+259.2 73.2
+260.3 6.3
+263.0 12.5
+269.4 10.8
+271.1 55.2
+271.7 5.2
+275.2 51.5
+276.3 555.4
+277.4 41.8
+278.1 10.2
+282.2 12.1
+284.3 13.8
+287.3 9.9
+290.2 52.6
+293.2 3.1
+301.2 13.5
+303.1 4.6
+305.3 53.0
+306.2 26.8
+307.2 21.6
+308.3 2.8
+309.3 22.9
+311.5 20.2
+317.6 17.2
+319.3 29.6
+320.5 12.1
+321.3 31.6
+328.2 11.5
+333.4 11.6
+337.2 18.1
+338.0 63.4
+349.3 25.8
+351.5 1.8
+353.4 10.6
+355.2 121.5
+356.3 17.7
+357.4 4.0
+363.1 27.4
+367.6 19.4
+371.4 17.4
+372.4 111.4
+373.3 138.7
+374.4 49.4
+375.5 42.1
+379.5 20.3
+382.5 10.0
+383.5 5.8
+385.3 39.8
+386.3 4.8
+388.5 3.9
+390.4 437.2
+391.4 110.1
+392.4 68.2
+393.5 20.3
+394.3 36.5
+395.4 13.4
+396.5 41.7
+397.6 10.0
+398.2 3.1
+400.1 24.0
+402.4 20.9
+403.3 21.0
+404.2 3.7
+407.2 9.6
+408.3 23.7
+409.5 33.5
+410.3 6.1
+413.3 62.0
+414.4 16.9
+416.2 11.0
+418.3 18.9
+420.3 20.2
+422.5 23.8
+424.4 28.5
+429.6 11.6
+430.4 32.7
+431.3 40.6
+432.4 6.8
+435.4 19.6
+436.5 24.9
+437.8 13.7
+440.4 16.1
+444.6 17.6
+447.1 109.6
+448.1 34.3
+449.3 227.9
+450.4 134.7
+452.7 14.3
+453.5 2.3
+457.6 12.8
+458.5 123.3
+461.0 22.2
+462.5 30.7
+463.5 36.3
+466.2 15.0
+466.9 36.1
+468.0 139.5
+469.6 14.6
+470.3 21.1
+476.3 479.4
+477.0 248.6
+477.9 72.4
+479.0 91.0
+481.7 5.6
+483.5 4.2
+485.6 5.5
+486.6 4.2
+488.7 67.1
+489.4 3.6
+490.2 6.1
+492.6 6.4
+494.9 58.0
+495.5 15.1
+497.3 99.4
+498.1 6.9
+499.5 4.6
+501.2 18.0
+502.3 31.8
+503.3 7.3
+503.9 4.2
+505.5 9.9
+513.3 20.7
+514.5 36.9
+515.5 28.9
+516.3 20.7
+517.3 59.0
+521.6 14.5
+523.6 67.1
+524.2 3.2
+525.5 34.5
+529.3 11.0
+530.9 6.6
+532.4 110.4
+533.5 10.2
+534.6 21.0
+535.3 20.6
+537.9 43.3
+539.1 25.2
+542.4 10.3
+543.3 9.6
+544.2 71.9
+544.9 55.9
+545.6 7.3
+547.6 20.2
+549.6 129.6
+550.3 518.5
+551.5 153.7
+552.5 6.7
+554.5 304.3
+555.4 45.6
+556.2 176.3
+556.8 53.1
+557.5 25.6
+558.4 54.3
+559.7 118.6
+560.8 6.0
+562.0 156.8
+563.1 1040.5
+563.9 179.8
+564.7 50.3
+566.6 33.8
+568.3 387.6
+568.9 348.9
+569.9 72.3
+571.2 49.1
+572.4 76.2
+573.6 42.9
+575.1 50.9
+576.3 120.4
+577.4 150.8
+578.1 87.4
+580.1 77.5
+580.9 29.9
+582.1 34.4
+583.3 5.9
+584.5 826.2
+585.6 197.4
+586.4 8.9
+587.0 3.4
+589.4 12.4
+590.2 24.8
+591.4 23.0
+592.5 60.1
+594.3 182.3
+595.5 243.9
+596.6 271.3
+597.3 38.7
+598.6 81.9
+599.5 9.8
+600.4 3.2
+601.2 55.8
+602.2 53.0
+603.2 8.7
+605.0 74.0
+605.9 55.7
+609.3 80.8
+610.3 367.5
+611.1 133.1
+611.8 66.9
+613.0 131.3
+614.4 185.9
+615.9 22.0
+617.4 223.9
+618.7 990.1
+619.6 727.2
+620.7 90.7
+623.4 693.1
+624.3 157.1
+625.8 278.3
+626.7 521.0
+627.7 3854.2
+628.5 2042.5
+629.3 597.9
+630.3 38.2
+638.5 2.6
+640.5 54.4
+642.5 11.8
+643.3 23.2
+644.3 2.6
+649.5 5.7
+650.5 6.6
+651.6 13.9
+652.4 23.8
+657.4 10.6
+658.1 8.2
+659.5 5.7
+660.4 122.6
+661.5 367.9
+662.3 3.6
+666.0 6.1
+667.2 4.8
+669.6 22.6
+671.5 15.6
+674.6 10.1
+678.4 373.3
+679.5 185.4
+680.5 6.2
+686.3 6.5
+687.3 38.8
+688.4 94.1
+689.4 16.3
+690.7 52.0
+691.6 43.5
+692.5 13.8
+693.3 48.3
+703.0 55.9
+704.3 7.4
+705.4 77.2
+706.4 49.0
+707.8 33.5
+708.8 132.6
+709.6 90.3
+710.7 17.0
+720.2 11.6
+722.4 179.7
+723.6 166.2
+725.5 22.1
+726.8 15.2
+732.6 12.9
+733.5 66.6
+739.5 97.6
+741.4 16.9
+744.6 5.4
+745.4 2.6
+747.7 107.8
+748.6 43.0
+749.5 17.3
+750.6 53.6
+753.3 18.2
+760.4 14.7
+761.0 18.2
+763.2 37.4
+764.4 17.1
+766.0 45.1
+767.1 47.4
+769.3 82.2
+770.4 14.3
+771.4 4.3
+772.5 3.2
+775.2 65.0
+776.1 40.2
+777.5 9.5
+779.4 18.2
+780.6 35.9
+781.3 5.7
+784.4 31.1
+787.6 21.5
+788.5 44.3
+790.2 95.6
+791.0 35.5
+794.7 30.5
+796.8 32.0
+798.7 323.1
+799.5 110.9
+800.7 8.9
+801.4 32.1
+802.9 1.4
+803.9 129.8
+805.5 94.0
+806.5 24.5
+808.0 17.3
+809.0 22.3
+810.5 16.0
+813.1 42.6
+815.5 23.7
+816.1 6.3
+817.1 14.9
+818.5 5.7
+820.6 21.8
+822.6 1.8
+823.4 101.8
+824.5 247.3
+825.4 326.9
+826.4 271.9
+827.7 42.4
+831.6 56.0
+832.9 75.3
+833.9 189.3
+834.5 80.6
+835.6 3.4
+836.9 26.8
+837.7 34.6
+840.7 15.0
+842.3 480.7
+843.0 22.7
+843.6 109.0
+845.4 42.4
+846.6 29.2
+847.4 20.3
+849.0 45.6
+850.7 8.4
+853.8 79.2
+854.5 76.2
+855.2 19.9
+858.4 43.1
+859.4 9.6
+861.7 192.2
+862.9 71.3
+863.8 35.6
+864.5 128.5
+865.7 29.0
+867.2 122.4
+868.0 56.4
+869.3 9.5
+870.9 591.0
+871.8 75.9
+875.0 10.2
+876.2 272.9
+876.9 78.0
+877.7 56.8
+880.7 184.5
+881.9 66.9
+882.5 1306.4
+883.6 762.1
+884.9 245.4
+886.0 159.6
+887.3 15.5
+888.8 10.0
+890.3 10.7
+891.7 23.4
+894.3 2.7
+895.8 26.0
+899.5 25.9
+905.7 7.1
+916.7 22.0
+918.2 18.5
+926.8 6.1
+927.6 44.0
+934.6 18.7
+936.2 21.2
+938.0 9.5
+943.7 6.5
+945.7 8.0
+949.8 48.1
+951.5 167.0
+952.5 276.1
+953.6 115.7
+954.7 37.9
+956.0 11.6
+960.0 16.8
+960.7 71.5
+961.7 34.5
+963.8 50.4
+964.5 10.8
+967.6 79.6
+968.5 39.0
+969.7 28.1
+972.8 28.8
+974.3 31.7
+978.8 124.0
+979.6 195.8
+980.7 81.9
+981.6 50.0
+982.7 25.0
+985.1 50.1
+986.1 9.1
+987.1 2.0
+992.6 13.3
+996.5 5201.5
+997.5 2112.9
+998.6 532.2
+999.3 4.1
+1002.7 24.6
+1003.4 27.9
+1004.6 45.1
+1006.7 40.5
+1007.5 27.7
+1009.7 5.0
+1013.4 5.6
+1017.0 7.0
+1020.5 23.9
+1021.6 88.4
+1022.6 93.6
+1023.7 3.5
+1027.3 11.2
+1029.7 10.9
+1031.8 14.0
+1038.6 234.8
+1039.6 122.5
+1040.6 52.8
+1045.5 15.0
+1047.7 47.1
+1055.7 38.2
+1056.9 11.7
+1063.1 31.2
+1064.5 13.0
+1066.5 3.9
+1074.4 12.8
+1089.9 43.4
+1090.7 84.3
+1094.7 2.7
+1098.5 6.6
+1099.7 16.7
+1107.4 50.2
+1108.7 51.8
+1109.6 50.7
+1110.7 17.3
+1112.7 32.4
+1117.7 64.1
+1119.7 28.5
+1120.8 44.2
+1125.5 303.8
+1126.5 272.1
+1127.6 91.6
+1134.5 17.4
+1135.3 18.9
+1136.7 34.5
+1143.5 85.1
+1144.4 126.7
+1145.4 27.5
+1153.7 8.6
+1154.6 65.3
+1155.7 27.5
+1156.8 20.0
+1168.9 9.5
+1196.2 61.7
+1197.0 14.5
+1284.5 23.4
+S	11	11	745.27
+Z	2	1489.53
+225.2 3.2
+228.2 4.1
+234.1 35.6
+235.2 17.1
+236.3 1.6
+241.2 21.5
+242.3 30.5
+243.1 17.8
+244.3 7.9
+245.1 23.1
+246.1 3.9
+260.2 52.7
+261.5 25.2
+262.2 147.8
+263.3 12.9
+270.2 37.9
+272.5 1.8
+274.4 5.6
+281.3 11.5
+282.3 3.5
+283.2 2.5
+286.4 1.1
+296.2 8.0
+297.6 4.1
+298.2 11.9
+299.4 7.8
+305.3 3.4
+308.3 4.7
+309.5 10.3
+311.3 10.3
+312.2 12.0
+316.3 43.0
+317.4 389.2
+318.1 5.3
+321.7 9.0
+325.4 2.8
+326.2 3.7
+326.9 10.6
+328.4 8.3
+330.3 11.5
+336.4 4.3
+338.1 12.3
+339.2 20.9
+340.3 5.7
+341.1 2.7
+341.9 18.2
+343.5 6.3
+344.3 13.7
+345.3 3.0
+346.7 7.7
+348.2 3.8
+352.2 5.8
+357.2 130.6
+358.3 19.1
+359.7 6.5
+360.6 2.7
+361.2 0.9
+362.5 5.5
+367.9 13.7
+373.1 4.3
+375.2 375.2
+376.3 27.9
+385.3 4.8
+386.4 16.4
+389.4 4.4
+390.3 14.0
+391.1 2.6
+393.1 2.4
+394.0 1.7
+394.6 13.3
+398.4 24.6
+399.4 2.3
+403.2 37.3
+403.9 4.7
+406.3 4.6
+407.2 7.3
+410.3 4.0
+415.2 1.7
+416.4 399.5
+417.2 48.4
+418.3 18.9
+421.3 50.3
+422.4 5.5
+424.2 3.9
+425.3 27.8
+428.8 20.4
+431.3 49.1
+432.5 8.1
+433.7 10.9
+434.6 5.5
+439.2 19.1
+440.4 11.2
+441.4 6.8
+443.4 3.8
+444.1 9.0
+445.3 1.8
+446.2 17.6
+447.9 21.2
+450.4 18.2
+452.0 5.1
+453.0 3.5
+454.1 4.9
+455.6 6.0
+456.6 6.3
+457.3 3.2
+459.2 44.6
+460.6 7.2
+465.2 4.3
+466.5 4.9
+468.1 15.6
+470.3 12.8
+471.2 6.9
+474.2 55.4
+475.4 13.5
+476.1 24.6
+477.0 8.9
+482.3 3.8
+483.6 3.9
+486.4 29.9
+487.3 31.3
+488.3 2.4
+498.1 9.1
+502.8 14.0
+504.3 208.6
+505.4 30.5
+508.5 17.1
+510.1 10.7
+513.7 10.3
+515.4 1.1
+516.9 31.4
+518.1 15.5
+519.6 17.3
+521.3 7.1
+522.2 4.1
+523.2 16.3
+524.3 16.8
+525.8 13.9
+526.5 42.6
+527.4 43.9
+528.4 22.0
+532.2 5.3
+534.9 23.9
+535.8 10.0
+537.0 10.1
+539.3 6.3
+540.3 8.1
+543.0 9.0
+544.4 479.7
+545.2 83.8
+546.3 5.3
+547.7 42.9
+548.4 12.3
+549.2 6.0
+550.6 14.8
+551.5 11.2
+554.2 2.1
+556.1 35.4
+557.3 40.6
+558.1 48.5
+559.2 23.8
+560.2 5.4
+561.3 24.6
+562.4 35.9
+565.5 7.5
+569.4 1.4
+570.1 14.6
+571.4 9.7
+572.5 4.7
+573.3 9.4
+574.1 9.3
+575.3 7.8
+576.4 6.7
+577.2 4.2
+578.1 84.2
+579.0 1.7
+581.1 11.9
+583.7 28.3
+585.1 22.6
+585.9 20.7
+587.3 74.9
+588.3 19.4
+589.5 4.4
+591.0 17.6
+593.5 10.2
+597.0 12.0
+598.5 33.8
+601.0 24.8
+603.6 2.0
+605.2 184.5
+605.9 126.9
+606.5 112.7
+607.2 25.4
+608.8 5.0
+609.9 6.3
+610.7 18.5
+611.6 12.6
+613.7 9.9
+615.0 249.9
+616.1 20.9
+617.5 34.9
+618.5 14.1
+619.4 7.6
+620.2 3.7
+624.2 17.7
+625.6 590.5
+626.7 83.9
+627.6 22.7
+628.7 5.3
+629.4 17.1
+630.6 20.3
+631.3 26.5
+631.9 9.5
+634.7 22.4
+637.4 5.0
+639.6 53.4
+640.4 22.4
+641.1 25.9
+642.0 34.9
+644.3 81.0
+645.4 3.0
+647.4 17.8
+648.8 12.6
+651.5 38.6
+652.8 9.7
+655.1 25.8
+655.9 15.0
+657.4 633.0
+658.5 188.4
+659.3 8.4
+660.2 33.9
+660.9 26.5
+662.4 25.8
+663.4 65.6
+664.1 35.2
+665.5 45.2
+666.5 24.8
+667.6 9.6
+669.1 101.9
+670.4 42.1
+671.2 19.8
+673.3 6.2
+674.4 18.3
+675.1 36.7
+676.4 72.2
+678.1 4.9
+679.2 107.3
+680.0 25.2
+682.5 3.9
+683.8 14.3
+685.3 27.6
+686.2 679.8
+687.3 181.3
+688.5 52.7
+689.4 21.6
+691.1 0.9
+692.6 30.8
+693.6 37.2
+694.2 9.0
+695.6 18.3
+697.0 53.9
+698.2 61.4
+699.4 49.0
+700.5 18.9
+701.6 52.5
+702.8 15.0
+704.3 632.2
+705.4 116.8
+706.3 3.2
+707.5 24.2
+708.3 40.8
+709.3 27.4
+710.1 45.4
+710.9 16.6
+711.6 28.5
+712.5 13.5
+713.5 16.5
+714.3 63.2
+715.3 55.2
+716.4 19.8
+718.4 114.5
+719.3 167.3
+720.1 18.7
+720.8 1.6
+721.6 9.8
+722.8 103.7
+724.4 57.1
+726.5 51.1
+727.4 60.8
+728.2 241.6
+729.1 71.8
+730.0 54.9
+731.5 20.2
+732.5 132.5
+733.3 12.2
+734.1 37.8
+734.8 33.0
+735.8 225.7
+736.5 409.0
+737.9 47.8
+738.7 15.6
+745.8 1.5
+747.9 9.6
+750.2 5.3
+751.7 7.8
+754.9 20.7
+755.7 6.4
+759.3 5.7
+760.2 16.3
+760.9 25.1
+762.5 5.6
+764.0 23.6
+767.9 8.8
+768.6 30.2
+769.9 37.4
+770.5 11.7
+772.2 37.9
+773.1 13.0
+775.8 13.4
+776.7 3.5
+779.2 21.0
+780.7 32.4
+785.2 1.5
+786.5 1448.9
+787.5 219.8
+788.3 6.5
+789.9 30.3
+793.2 3.7
+794.4 13.4
+795.8 37.7
+797.1 45.6
+797.8 50.2
+798.6 36.3
+799.7 61.2
+800.7 41.5
+803.5 30.2
+804.9 26.4
+806.0 12.9
+807.2 55.1
+808.3 5.3
+808.9 27.9
+810.2 7.7
+811.5 34.0
+812.5 15.7
+813.4 1.9
+814.4 35.2
+815.4 150.0
+816.3 229.8
+817.3 36.2
+820.1 12.5
+820.7 40.3
+821.9 10.4
+823.3 43.5
+824.0 24.7
+825.8 20.6
+826.8 28.7
+827.8 5.9
+829.2 57.8
+830.2 34.0
+832.4 151.6
+833.4 331.5
+834.4 100.2
+835.2 6.3
+835.9 10.2
+838.7 26.7
+839.4 30.5
+840.9 11.7
+841.7 16.3
+843.2 88.6
+844.2 13.4
+845.3 34.6
+846.0 3.8
+847.2 37.2
+849.6 41.2
+850.6 15.1
+851.9 13.7
+853.2 25.3
+854.0 27.3
+854.9 29.1
+856.5 12.3
+857.4 45.9
+859.7 17.4
+861.3 14.3
+862.1 13.0
+863.4 34.5
+864.2 56.4
+866.1 43.1
+867.2 43.6
+867.9 6.0
+868.5 28.1
+869.4 11.4
+870.5 26.5
+871.2 10.4
+872.4 25.0
+873.2 62.9
+874.1 51.3
+874.9 22.7
+877.1 33.3
+877.8 2.1
+878.7 5.3
+879.6 2.4
+881.8 32.2
+882.5 6.4
+883.6 35.1
+885.5 541.3
+886.6 118.3
+888.2 66.5
+889.4 14.6
+890.3 9.2
+891.0 0.8
+893.5 89.2
+894.7 37.3
+897.2 85.5
+898.5 38.1
+900.5 18.7
+901.6 54.8
+902.3 71.3
+903.0 40.7
+904.3 24.2
+905.4 43.1
+907.3 1.7
+908.7 30.1
+909.5 9.3
+910.5 27.6
+911.6 25.3
+912.7 23.3
+913.6 23.6
+914.5 4.8
+916.2 24.8
+916.8 10.6
+917.9 74.2
+918.7 33.6
+920.0 41.5
+921.7 45.6
+922.6 89.8
+923.8 44.7
+925.0 106.0
+926.4 71.7
+927.5 51.0
+928.4 241.7
+929.4 235.1
+930.6 74.1
+931.5 14.5
+933.4 13.0
+935.6 36.5
+937.7 382.5
+938.5 22.6
+939.3 24.0
+940.0 5.5
+942.9 16.4
+943.8 20.0
+945.0 38.1
+946.4 462.6
+947.3 123.6
+948.2 48.4
+949.2 22.3
+950.1 8.1
+952.9 29.3
+954.4 31.3
+957.1 22.9
+960.5 4.5
+961.5 23.7
+963.4 15.5
+964.2 30.4
+965.3 39.5
+967.4 8.9
+968.3 57.9
+969.4 10.0
+970.2 2.5
+971.7 10.7
+972.7 25.5
+973.4 15.8
+974.9 5.9
+975.9 26.2
+977.2 11.8
+980.1 65.4
+981.0 4.8
+981.9 15.7
+982.6 26.7
+983.2 9.5
+986.5 803.6
+987.6 162.3
+989.2 12.9
+990.4 12.3
+991.5 92.3
+992.4 8.1
+994.7 1.5
+995.6 18.4
+998.0 14.7
+1000.0 20.4
+1001.9 9.4
+1003.1 68.8
+1004.3 34.5
+1005.1 8.8
+1006.0 34.1
+1009.4 9.7
+1011.5 2.6
+1012.5 61.9
+1013.2 21.0
+1014.1 13.9
+1014.9 20.2
+1015.7 6.2
+1016.6 4.4
+1018.6 5.1
+1019.2 11.2
+1021.9 3.0
+1022.9 5.1
+1024.6 39.0
+1025.4 13.5
+1026.2 6.5
+1027.1 13.3
+1029.2 29.8
+1034.1 18.9
+1034.7 21.1
+1036.1 20.9
+1038.1 11.0
+1038.9 23.5
+1040.7 20.0
+1041.6 22.5
+1042.6 7.7
+1045.6 9.5
+1050.2 16.4
+1053.2 21.5
+1054.0 3.9
+1056.5 142.5
+1057.8 69.0
+1058.5 15.6
+1059.6 18.5
+1060.8 3.8
+1061.7 7.2
+1062.5 28.0
+1064.5 16.0
+1065.6 12.1
+1067.6 142.0
+1068.6 59.0
+1069.9 43.9
+1070.6 7.0
+1071.6 24.5
+1074.4 591.8
+1075.4 72.5
+1078.7 10.2
+1079.3 6.6
+1081.3 60.8
+1082.3 18.7
+1084.2 10.3
+1088.5 26.4
+1089.9 15.0
+1091.4 11.6
+1095.5 24.9
+1097.5 120.5
+1098.7 52.5
+1103.9 12.6
+1104.6 15.2
+1106.0 0.9
+1109.3 3.9
+1113.5 12.1
+1115.6 741.9
+1116.6 163.5
+1117.3 13.8
+1118.7 3.6
+1121.3 1.5
+1127.5 0.9
+1133.8 8.9
+1134.8 1.3
+1136.6 3.6
+1138.6 17.5
+1140.4 3.7
+1142.0 3.4
+1145.7 5.9
+1148.4 1.4
+1149.5 14.7
+1154.4 58.6
+1155.5 204.0
+1156.4 101.4
+1157.5 14.3
+1160.6 2.5
+1162.8 4.1
+1163.5 8.4
+1164.7 7.4
+1169.9 3.1
+1173.4 940.8
+1174.6 99.0
+1175.2 14.4
+1178.4 1.9
+1183.8 4.2
+1188.6 8.9
+1189.8 5.2
+1193.1 14.9
+1193.8 8.2
+1195.4 16.0
+1201.8 18.0
+1203.2 20.8
+1204.6 8.7
+1206.0 35.7
+1208.6 9.9
+1210.7 151.8
+1211.8 51.9
+1212.7 67.1
+1213.8 30.6
+1214.6 12.3
+1215.7 17.0
+1224.6 7.9
+1228.7 468.9
+1230.4 658.5
+1231.5 144.2
+1240.0 11.7
+1242.7 45.9
+1243.8 16.8
+1253.8 17.2
+1255.0 7.9
+1255.8 14.4
+1259.7 15.5
+1273.1 5.9
+1275.9 10.5
+1277.1 7.8
+1283.3 4.7
+1296.5 19.2
+1299.5 13.0
+1307.4 6.1
+1308.4 21.3
+1313.0 1.7
+1313.8 5.5
+1315.4 3.6
+1316.8 22.3
+1323.9 1.5
+1325.5 40.5
+1326.3 75.9
+1327.8 7.1
+1332.3 7.5
+1335.2 8.2
+1336.5 12.2
+1338.4 9.2
+1339.8 2.2
+1341.6 46.8
+1342.8 42.9
+1343.5 648.4
+1344.6 213.9
+1372.5 13.3
+1388.8 9.4
+1396.2 4.1
+1411.6 11.2
+1412.2 11.4
+1425.5 11.3
+1433.8 6.9
+1449.8 6.7
+1451.3 12.2
+S	12	12	472.56
+I	ID	75
+I	RTime	3.4861
+Z	3	1415.66
+141.0 1.7
+144.2 1.6
+145.0 0.8
+147.0 3.5
+152.2 1.2
+158.2 1.7
+166.2 1.7
+169.1 7.5
+171.2 2.2
+173.2 1.6
+175.0 9.0
+176.2 0.8
+181.0 1.2
+186.3 1.6
+187.0 1.0
+188.2 1.0
+189.1 10.8
+193.2 1.6
+195.1 5.0
+201.3 1.6
+208.3 1.7
+209.1 1.1
+212.0 1.7
+213.0 3.5
+216.1 1.2
+219.7 1.2
+223.2 8.0
+226.1 3.7
+227.2 0.8
+228.3 4.9
+232.2 9.8
+233.2 3.2
+234.1 2.4
+237.6 2.5
+238.2 5.9
+241.3 2.0
+242.5 5.0
+244.8 0.8
+246.2 1.0
+248.2 3.7
+249.4 1.0
+252.2 3.5
+253.2 3.4
+258.2 3.9
+261.4 4.9
+262.1 3.5
+270.1 5.0
+271.3 6.0
+273.0 5.0
+274.2 7.0
+275.3 5.1
+277.3 1.2
+277.9 2.2
+281.3 2.5
+281.9 1.2
+283.2 1.6
+284.0 2.5
+291.0 1.3
+294.3 9.6
+295.3 1.6
+296.6 5.3
+298.2 3.0
+299.3 3.7
+301.1 4.0
+302.4 4.1
+303.7 1.5
+304.5 1.8
+310.1 26.7
+311.4 6.6
+313.3 0.8
+314.2 2.0
+315.4 2.2
+316.2 9.3
+317.2 5.0
+318.1 5.5
+325.3 5.0
+327.2 3.7
+331.3 1.0
+332.2 3.0
+338.3 1.5
+341.5 5.6
+343.7 10.6
+344.4 1.2
+345.3 7.5
+350.2 1.7
+351.2 2.0
+351.9 4.3
+355.9 5.5
+357.1 2.5
+361.4 1.8
+362.8 4.9
+363.7 6.5
+366.9 3.5
+367.5 5.8
+368.4 1.7
+370.0 19.3
+370.7 2.0
+371.6 3.9
+372.4 116.4
+373.0 7.5
+374.3 8.5
+377.3 2.7
+382.7 7.5
+384.3 3.5
+385.6 3.2
+386.3 3.0
+389.3 2.5
+391.5 7.1
+393.6 4.5
+394.3 1.0
+395.6 0.8
+398.3 1.7
+400.9 25.1
+401.7 4.8
+403.3 5.5
+403.9 6.9
+406.7 1.7
+408.0 18.7
+408.9 4.0
+410.8 8.8
+411.5 3.5
+412.2 2.0
+413.3 9.5
+414.5 32.0
+415.3 4.9
+416.0 2.0
+416.8 7.6
+417.7 2.5
+418.5 1.7
+419.4 5.0
+420.4 4.6
+421.2 1.5
+422.7 5.0
+423.4 36.0
+424.3 16.2
+425.5 12.1
+426.8 2.4
+428.0 13.5
+428.9 31.6
+430.1 3.7
+431.3 0.8
+432.0 8.5
+434.4 1105.3
+436.0 13.6
+437.5 25.1
+438.8 20.5
+440.0 18.1
+441.7 6.5
+443.0 16.0
+444.0 11.8
+446.1 6.6
+447.6 5.8
+448.4 8.0
+451.2 61.4
+452.3 18.2
+453.1 21.7
+454.4 57.0
+455.4 57.5
+456.4 29.0
+457.5 25.5
+458.6 26.2
+459.4 4.5
+460.7 55.4
+461.4 7.5
+462.0 1.7
+463.2 103.0
+463.9 50.7
+464.8 21.8
+465.5 9.3
+467.0 10.3
+474.3 5.1
+478.5 2.7
+480.0 4.5
+480.6 2.0
+483.1 2.2
+484.4 4.0
+487.8 13.1
+488.5 26.2
+489.4 2.5
+490.5 6.5
+493.5 1.8
+498.7 20.2
+505.5 7.5
+506.3 16.3
+514.4 7.3
+519.3 2.7
+521.2 2.0
+523.3 1.2
+525.5 2.0
+527.0 2.2
+527.8 13.3
+528.5 3.7
+530.6 11.3
+531.9 1.7
+534.0 3.2
+534.7 5.0
+539.2 1.7
+540.4 2.9
+542.2 17.0
+542.8 24.2
+543.5 4.0
+545.3 14.6
+549.2 79.0
+549.8 51.7
+550.6 30.5
+552.0 16.2
+553.0 48.0
+555.5 7.0
+558.1 22.6
+560.2 4.9
+561.4 2.5
+562.4 6.1
+563.9 26.0
+564.5 2.0
+565.9 1.2
+569.7 8.0
+570.7 20.3
+573.0 4.5
+574.2 4.1
+577.5 13.1
+579.7 5.5
+584.2 15.8
+585.3 12.8
+587.6 5.3
+589.9 5.1
+590.7 1.8
+592.4 4.0
+593.8 6.5
+594.6 2.0
+595.5 1.0
+596.4 2.7
+598.5 3.2
+599.8 3.2
+600.6 10.0
+601.6 2.4
+602.3 10.3
+605.0 9.3
+607.1 16.1
+608.0 24.7
+610.3 1.6
+611.6 4.6
+612.3 2.0
+613.6 28.5
+615.0 14.6
+616.1 1.6
+617.3 2.7
+619.4 11.1
+620.6 17.8
+621.6 36.2
+622.6 6.5
+625.7 12.3
+626.4 17.1
+627.1 8.6
+628.1 7.3
+628.8 13.5
+630.3 18.8
+631.0 10.1
+632.0 9.3
+634.4 7.0
+636.4 2.2
+641.3 4.1
+645.2 3.7
+648.5 7.3
+650.5 12.8
+651.4 3.7
+654.6 4.0
+655.3 1.6
+659.9 3.4
+660.8 9.0
+669.7 8.8
+672.8 3.2
+683.5 1.8
+684.3 3.7
+685.4 2.7
+692.3 12.8
+693.1 4.5
+696.4 7.4
+697.4 1.5
+698.7 7.1
+700.6 20.5
+701.5 1.7
+702.5 7.9
+703.6 0.8
+713.9 4.0
+716.4 3.7
+718.4 2.0
+719.6 1.2
+721.1 4.9
+722.6 2.5
+725.6 2.4
+727.7 4.0
+728.4 5.5
+733.4 7.0
+734.0 2.2
+735.3 2.0
+740.5 2.9
+748.4 1.3
+749.2 1.2
+753.4 0.8
+754.6 1.1
+759.3 1.7
+761.5 5.8
+765.4 4.6
+769.2 3.5
+770.6 3.5
+779.8 4.8
+782.2 12.3
+783.4 2.7
+788.3 2.7
+789.6 6.4
+791.2 0.8
+796.7 5.5
+797.6 4.6
+798.4 9.1
+799.4 1.1
+803.5 3.5
+805.2 10.8
+807.0 1.6
+814.4 2.4
+815.6 14.8
+816.6 3.7
+817.5 1.0
+839.2 1.2
+840.8 4.8
+850.7 1.3
+900.1 2.0
+909.5 1.6
+910.4 2.2
+927.5 2.4
+958.2 1.0
+S	13	13	717.06
+I	ID	193
+I	RTime	9.5441
+Z	1	717.06
+228.0 1.8
+246.1 2.2
+260.2 1.2
+275.3 2.2
+276.4 1.7
+283.0 1.2
+284.3 4.3
+294.2 3.2
+295.6 1.7
+296.3 1.5
+309.5 1.5
+311.3 1.8
+317.5 2.2
+322.2 2.2
+324.1 3.0
+325.2 2.4
+326.6 5.5
+329.2 1.2
+330.5 2.7
+331.3 8.8
+337.4 4.5
+338.0 1.2
+341.4 1.2
+353.7 0.8
+359.0 0.8
+369.3 7.9
+370.9 7.1
+389.4 9.3
+394.5 3.2
+396.2 2.2
+401.2 2.0
+405.2 3.4
+406.2 2.0
+410.3 1.7
+411.8 1.5
+413.2 3.2
+416.6 1.3
+425.6 4.5
+428.8 0.6
+429.5 2.0
+430.5 4.0
+440.8 2.9
+442.1 2.9
+447.3 1.5
+448.9 2.5
+454.0 1.2
+457.4 7.5
+458.5 14.3
+463.5 5.3
+475.4 15.8
+478.4 3.0
+480.6 5.1
+481.4 1.6
+494.3 1.1
+500.4 2.2
+501.4 4.5
+502.4 20.8
+508.0 2.5
+509.3 2.0
+515.1 1.0
+517.3 4.6
+519.3 2.2
+520.4 1.2
+525.0 12.1
+531.6 1.5
+539.5 1.8
+542.6 1.8
+543.4 1.7
+552.2 1.8
+553.1 7.8
+556.4 2.0
+559.2 1.2
+567.4 3.5
+570.4 2.5
+577.3 2.9
+579.4 2.7
+588.5 3.7
+594.6 3.5
+601.1 3.0
+602.2 7.5
+604.6 1.0
+610.0 5.1
+625.4 4.5
+655.8 3.2
+657.7 1.2
+663.6 3.5
+664.4 1.6
+665.5 7.0
+672.2 5.4
+673.9 3.0
+675.3 2.5
+680.5 1.2
+681.3 9.0
+682.6 16.2
+686.6 11.3
+687.4 2.4
+691.4 4.4
+698.4 44.4
+699.5 46.5
+700.3 15.8
+1037.4 2.5
+S	14	14	559.10
+I	ID	188
+I	RTime	9.2816
+Z	2	1117.19
+Z	3	1675.28
+158.0 3.9
+191.8 1.3
+210.3 1.2
+232.5 5.1
+233.8 2.7
+240.2 1.1
+243.3 2.7
+244.1 3.2
+251.3 8.8
+252.3 10.1
+253.3 2.7
+254.3 1.6
+258.2 5.3
+260.2 3.4
+261.1 1.7
+262.4 1.2
+265.2 1.7
+267.8 2.0
+271.4 5.1
+273.1 4.5
+274.0 3.4
+275.2 3.7
+276.0 3.7
+280.2 5.8
+282.1 1.5
+286.2 2.9
+290.1 1.7
+291.2 52.2
+292.2 6.6
+296.5 3.4
+297.2 3.4
+308.3 2.2
+309.7 1.5
+313.2 2.7
+317.9 2.7
+319.2 4.9
+332.3 1.2
+333.2 4.5
+338.3 1.2
+339.0 1.8
+344.9 1.6
+353.3 2.2
+357.4 2.0
+358.3 3.0
+366.5 3.5
+370.1 2.7
+386.2 8.8
+387.3 3.5
+388.6 5.0
+390.1 1.2
+391.3 2.7
+394.1 2.2
+395.3 7.4
+396.1 5.4
+398.3 1.6
+402.5 2.0
+403.2 6.0
+404.1 2.5
+407.6 1.2
+412.2 14.6
+413.2 12.3
+418.4 2.0
+424.2 1.3
+430.7 20.0
+431.4 5.1
+440.4 2.2
+441.5 6.3
+442.3 5.5
+444.3 1.2
+452.2 1.7
+454.2 2.9
+455.6 1.2
+456.2 1.8
+458.9 3.7
+476.1 1.5
+479.3 2.5
+480.9 1.6
+485.6 1.5
+487.6 3.0
+490.3 2.9
+491.3 2.7
+497.5 1.2
+502.0 3.7
+507.2 6.5
+513.3 1.2
+522.3 3.2
+524.5 6.6
+525.3 16.2
+527.3 3.0
+529.2 4.3
+530.4 8.8
+537.4 5.3
+540.3 29.2
+541.4 85.4
+542.4 39.5
+549.7 29.7
+550.3 29.6
+581.5 4.1
+605.1 2.4
+646.0 5.6
+659.6 14.6
+660.5 4.9
+682.0 4.0
+687.9 3.5
+689.3 1.6
+710.3 8.3
+711.5 3.2
+738.3 11.1
+757.0 1.8
+781.5 4.6
+801.2 2.5
+802.1 4.0
+821.1 2.4
+825.7 1.0
+839.4 4.6
+840.6 2.0
+852.5 3.2
+859.8 3.7
+866.8 5.3
+867.4 1.2
+868.5 1.6
+931.5 1.2
+962.6 1.7
+970.5 1.2
+971.4 1.8
+980.4 8.6
+S	15	15	732.13
+Z	2	1463.25
+209.0 62.5
+210.3 12.8
+216.0 87.0
+220.1 58.0
+224.9 4.9
+226.1 418.2
+227.0 68.3
+227.9 46.7
+229.2 13.3
+231.1 12.7
+238.1 209.1
+239.2 15.0
+244.1 953.8
+245.2 90.0
+245.9 20.4
+252.3 8.8
+255.3 38.8
+260.2 9.4
+262.1 35.0
+270.0 10.9
+275.8 21.8
+277.4 6.3
+279.1 12.7
+280.2 49.8
+284.1 96.8
+285.7 23.5
+289.9 64.6
+291.4 10.6
+294.3 153.7
+295.2 80.3
+297.3 23.9
+298.2 74.2
+301.3 11.2
+308.2 252.6
+309.2 52.8
+310.2 20.6
+313.4 36.5
+314.6 49.3
+315.2 27.5
+318.1 30.8
+323.3 10.5
+325.3 253.2
+326.2 209.0
+327.1 37.3
+331.2 48.2
+338.6 16.5
+340.2 21.9
+341.2 7.7
+343.2 2857.2
+344.2 253.6
+345.2 41.9
+350.0 10.8
+351.1 3.7
+356.2 6.2
+360.8 8.4
+367.1 74.5
+369.3 59.3
+371.1 6.3
+376.0 25.8
+381.2 7.2
+384.1 307.5
+385.2 118.1
+386.1 5.9
+389.0 8.0
+389.9 6.1
+394.2 22.3
+395.3 71.0
+400.2 6.4
+402.0 10.6
+403.2 22.7
+404.2 10.4
+407.3 325.1
+408.3 75.3
+412.2 170.1
+413.2 155.1
+414.1 4.3
+414.9 9.1
+417.0 13.2
+419.2 15.4
+420.6 29.9
+421.4 54.7
+424.3 10.3
+430.2 588.5
+431.2 119.3
+439.1 30.1
+440.2 7.5
+444.3 7.2
+448.0 19.6
+449.0 36.7
+454.2 36.9
+455.1 18.1
+456.3 17.8
+457.1 17.3
+458.6 7.8
+465.3 132.4
+466.2 322.5
+467.2 53.9
+468.2 54.3
+474.2 17.9
+475.4 7.4
+476.1 12.7
+477.1 30.4
+483.1 679.8
+484.2 692.7
+485.3 53.3
+485.9 31.8
+486.5 6.9
+494.4 6.8
+499.1 14.2
+500.1 18.1
+501.3 453.1
+502.3 30.3
+504.5 41.4
+505.4 79.1
+514.2 7.8
+515.2 146.0
+516.0 29.1
+517.1 22.6
+518.7 25.5
+520.1 209.5
+521.2 28.8
+522.0 32.5
+523.7 8.5
+529.6 16.2
+533.4 17.7
+538.3 27.6
+539.1 9.7
+539.8 15.8
+540.5 15.7
+548.3 18.6
+549.3 52.6
+551.9 9.9
+553.7 19.8
+556.1 100.3
+557.2 32.7
+558.3 4.4
+559.6 42.5
+560.9 8.8
+562.2 19.8
+566.1 38.6
+569.1 110.5
+570.1 54.8
+571.6 14.3
+572.6 35.4
+574.3 106.9
+575.9 17.3
+576.5 31.6
+577.3 4.2
+579.4 56.8
+580.3 43.7
+581.1 12.0
+582.8 8.5
+584.8 54.5
+586.4 59.0
+587.2 69.3
+588.4 29.0
+590.5 19.8
+593.4 9.8
+595.2 18.3
+596.6 88.4
+597.2 318.0
+598.2 116.9
+599.1 7.4
+600.4 17.3
+602.0 99.0
+602.9 127.0
+604.3 87.5
+605.1 117.9
+607.2 12.8
+608.3 6.6
+610.1 199.6
+610.9 104.3
+611.6 52.8
+613.4 36.3
+614.3 555.2
+615.2 1289.6
+616.2 245.1
+617.2 73.3
+619.2 3.9
+619.9 53.4
+627.5 10.8
+628.1 8.7
+628.8 8.0
+632.2 2729.6
+633.2 510.8
+634.3 288.8
+635.6 20.3
+636.9 15.2
+639.7 12.2
+641.4 77.8
+642.0 11.4
+644.7 24.7
+647.1 14.5
+650.8 22.4
+651.6 62.2
+652.7 28.1
+656.0 15.9
+657.4 143.4
+658.3 19.9
+660.3 100.4
+661.0 12.4
+664.2 11.7
+666.0 86.3
+667.2 13.8
+667.9 6.6
+671.4 30.3
+674.5 112.4
+675.7 60.9
+676.3 15.5
+677.4 25.2
+679.8 34.1
+681.5 38.0
+684.1 16.0
+685.2 38.6
+687.3 30.5
+688.1 3.3
+689.2 120.7
+693.0 23.6
+694.8 48.7
+695.5 61.6
+696.3 68.0
+699.9 28.8
+700.9 12.3
+702.6 19.0
+703.6 23.9
+704.9 81.2
+705.9 44.6
+707.0 12.3
+708.5 11.8
+713.1 30.3
+714.2 349.6
+714.9 157.3
+715.6 79.4
+716.5 27.0
+717.1 36.1
+719.0 22.8
+721.1 39.7
+723.0 664.5
+724.0 35.0
+747.5 36.4
+749.6 10.9
+752.4 25.8
+753.6 15.5
+755.9 9.4
+761.4 27.0
+767.2 5.3
+777.7 10.3
+778.3 20.1
+779.0 5.2
+784.9 70.9
+786.0 22.1
+789.3 10.4
+793.5 14.5
+794.7 48.5
+795.8 35.2
+797.3 16.0
+799.4 8.0
+802.3 10.1
+805.4 56.8
+806.2 53.0
+809.0 15.2
+811.1 23.9
+813.5 21.9
+814.2 36.8
+814.9 8.2
+823.4 28.3
+825.5 33.0
+826.1 21.2
+827.6 37.2
+830.1 91.4
+831.4 4774.0
+832.4 2128.7
+833.5 355.7
+835.3 13.3
+838.3 11.7
+841.4 135.1
+842.2 67.1
+846.6 3.6
+857.1 40.0
+858.1 39.1
+859.3 37.1
+862.3 10.4
+869.7 19.3
+870.3 9.7
+876.4 6.9
+878.7 28.1
+879.5 7.1
+880.6 22.7
+883.6 5.0
+884.5 6.3
+885.4 6.7
+886.4 38.3
+887.5 42.1
+888.5 29.7
+890.6 95.4
+893.0 12.2
+894.9 108.0
+897.9 115.9
+898.6 74.7
+899.3 3.5
+901.5 28.2
+908.6 11.4
+909.6 54.2
+915.4 68.1
+916.0 8.0
+920.0 13.0
+922.6 50.3
+925.4 119.2
+926.3 255.8
+927.3 27.0
+928.2 42.5
+932.2 32.7
+940.1 24.3
+941.1 14.4
+943.5 269.9
+944.5 98.2
+945.2 65.6
+948.4 6.6
+950.1 12.5
+956.0 8.4
+957.5 8.7
+958.5 44.0
+959.3 34.3
+962.4 2770.6
+963.6 1265.8
+964.5 397.8
+967.0 41.3
+969.6 73.2
+970.4 18.5
+975.7 83.5
+976.7 203.4
+978.3 44.2
+983.3 6.3
+984.5 16.6
+985.4 355.6
+986.7 45.5
+988.6 17.6
+989.5 82.8
+991.6 4.7
+994.6 22.0
+996.2 24.4
+998.3 36.8
+1000.5 34.1
+1006.4 25.5
+1009.6 51.7
+1010.6 41.8
+1016.3 6.3
+1021.5 35.2
+1025.2 30.8
+1028.7 30.5
+1033.4 1399.9
+1034.4 663.5
+1035.2 128.1
+1035.9 30.9
+1036.8 9.0
+1038.6 87.3
+1039.6 78.0
+1040.4 66.2
+1041.6 10.6
+1045.7 57.6
+1049.5 9.1
+1053.2 21.4
+1054.4 9.6
+1056.3 197.2
+1057.2 185.9
+1058.0 32.4
+1058.7 12.9
+1067.6 26.3
+1068.4 5.3
+1074.3 15.0
+1075.3 22.7
+1076.3 4.6
+1084.3 9.1
+1102.6 87.5
+1103.6 59.0
+1104.7 13.1
+1109.3 21.5
+1117.5 42.7
+1118.6 24.4
+1120.5 5633.0
+1121.5 3299.1
+1122.5 1097.2
+1123.2 62.0
+1131.4 35.9
+1140.5 6.7
+1143.4 13.3
+1146.9 15.9
+1151.3 59.5
+1152.4 346.8
+1153.5 27.9
+1154.6 38.1
+1158.2 5.2
+1169.4 484.9
+1170.4 101.2
+1182.2 36.2
+1183.5 13.1
+1185.9 30.4
+1186.6 17.5
+1187.6 13.2
+1188.5 16.9
+1201.7 29.5
+1202.8 34.4
+1204.0 3.9
+1216.4 6.9
+1218.9 37.0
+1219.5 2418.4
+1220.6 1664.6
+1221.6 357.5
+1238.4 50.2
+1288.2 47.0
+1291.6 4.9
+1298.1 5.8
+1299.4 193.6
+1300.3 49.2
+1309.2 16.2
+1314.5 21.6
+1316.4 352.0
+1317.5 205.8
+1318.6 105.0
+1334.4 21.1
+1403.8 33.0
+1409.2 22.8
+1412.6 7.0
+1437.9 11.0
+S	16	16	713.07
+I	ID	228
+I	RTime	11.2582
+Z	1	713.07
+247.0 5.1
+248.3 1.8
+252.2 1.3
+254.2 1.3
+255.4 1.0
+257.4 2.7
+258.4 2.5
+275.3 2.5
+290.0 1.8
+292.1 4.6
+293.2 1.6
+299.2 0.8
+309.3 4.5
+326.3 2.0
+329.3 2.2
+333.2 2.2
+339.2 1.5
+352.4 1.3
+366.1 1.1
+367.0 2.5
+368.3 3.4
+380.2 7.0
+382.4 6.3
+383.2 1.2
+384.3 1.0
+386.0 2.4
+391.3 3.7
+397.1 2.0
+400.1 3.0
+404.4 4.3
+411.4 2.7
+424.4 3.0
+434.4 1.3
+438.3 6.6
+443.1 5.0
+445.1 2.0
+449.5 1.3
+453.5 1.0
+454.2 2.0
+456.5 6.5
+457.7 2.5
+459.2 1.8
+470.4 7.0
+471.6 6.8
+476.4 1.3
+479.0 2.0
+485.4 2.0
+487.1 2.7
+490.4 0.8
+494.3 2.5
+495.9 6.0
+496.6 4.9
+498.3 7.5
+498.9 2.2
+499.6 5.6
+503.3 3.4
+504.2 4.6
+505.3 2.5
+507.3 4.0
+512.5 2.9
+520.6 2.4
+522.3 2.4
+525.2 2.7
+528.3 1.8
+536.3 1.2
+538.3 3.2
+548.0 1.0
+549.1 2.2
+551.2 7.4
+557.2 1.3
+560.5 3.0
+561.5 1.2
+566.4 12.6
+567.0 9.6
+573.3 1.6
+575.1 1.5
+576.4 2.0
+583.3 2.2
+584.6 4.5
+585.4 1.3
+592.0 4.5
+594.3 4.0
+598.3 5.0
+603.5 2.0
+606.2 5.0
+614.5 2.2
+616.2 1.6
+621.1 3.9
+622.1 1.3
+636.1 1.5
+644.6 2.0
+652.4 7.0
+653.2 1.5
+660.0 9.1
+668.3 1.6
+669.3 1.3
+677.8 12.8
+678.5 12.0
+682.5 5.1
+688.1 2.0
+694.3 10.8
+695.3 48.0
+696.5 23.2
+703.5 3.0
+870.5 1.1
+916.4 0.8
+923.3 4.9
+939.7 2.2
+S	17	17	495.25
+I	ID	76
+I	RTime	3.5071
+Z	2	989.49
+145.3 1.3
+147.1 13.3
+153.0 0.8
+154.4 1.0
+171.2 0.8
+173.0 11.3
+175.3 1.3
+182.2 0.8
+183.3 0.8
+185.0 2.0
+200.4 4.5
+201.1 10.6
+202.1 1.2
+204.9 1.0
+207.2 3.5
+208.1 2.5
+215.2 3.5
+218.1 0.8
+219.2 1.7
+226.2 1.3
+230.4 3.2
+235.1 8.6
+236.1 4.1
+240.1 2.2
+241.0 2.4
+247.9 2.7
+249.4 10.5
+252.0 0.8
+255.0 1.3
+257.3 12.3
+259.2 1.0
+260.1 2.7
+268.3 5.4
+272.1 3.9
+274.0 1.2
+275.2 48.7
+276.5 1.3
+280.1 3.2
+285.2 1.1
+286.0 3.2
+289.3 6.0
+295.1 2.0
+299.2 1.6
+303.3 1.7
+304.3 5.8
+311.4 4.4
+312.2 2.7
+315.3 3.0
+316.3 1.2
+321.5 2.2
+323.2 4.0
+329.0 11.6
+332.8 2.7
+334.9 2.0
+338.5 4.5
+342.4 1.7
+349.6 1.1
+352.1 6.0
+357.3 11.1
+364.3 2.2
+365.1 2.2
+366.2 2.9
+368.2 4.8
+376.2 2.0
+377.6 17.0
+381.2 5.5
+382.3 1.2
+382.9 1.2
+384.1 3.7
+386.4 47.7
+387.3 19.5
+389.2 7.9
+390.4 11.1
+395.1 16.3
+395.8 12.8
+400.0 13.1
+401.1 4.1
+402.6 2.0
+404.0 8.8
+406.0 1.2
+407.1 3.2
+409.5 7.9
+413.6 9.8
+414.3 2.7
+415.5 1.8
+418.1 15.0
+418.9 4.9
+421.7 13.1
+424.6 3.7
+425.4 1.2
+426.5 3.5
+427.5 1.7
+428.6 2.2
+429.3 2.5
+431.0 57.2
+433.4 7.5
+435.4 1.7
+438.4 20.0
+441.2 16.2
+442.2 3.4
+443.5 1.7
+444.3 1.5
+445.7 6.3
+447.0 2.2
+448.2 6.0
+451.1 23.7
+452.3 10.0
+453.4 2.2
+455.1 22.2
+456.5 11.0
+457.3 0.8
+459.7 52.0
+461.5 14.1
+462.3 17.8
+463.4 30.2
+464.5 5.6
+465.5 5.4
+468.0 8.5
+468.9 7.9
+470.0 7.5
+471.9 21.5
+473.2 14.1
+474.7 6.5
+475.8 8.3
+476.8 18.6
+477.6 36.9
+478.8 26.5
+479.8 12.3
+482.4 20.7
+483.3 25.3
+484.4 11.6
+486.2 108.5
+486.8 47.5
+487.5 17.3
+494.9 10.1
+496.7 8.5
+498.9 10.0
+509.0 5.5
+510.9 1.3
+515.2 9.6
+516.3 3.7
+520.1 1.1
+522.1 2.4
+523.4 6.5
+524.6 3.5
+527.7 11.6
+528.7 17.6
+529.4 1.1
+530.5 30.7
+541.2 10.5
+544.4 2.7
+548.2 3.5
+551.1 1.2
+553.7 1.7
+559.4 10.3
+561.3 3.0
+564.5 3.2
+569.2 6.4
+570.4 2.0
+571.6 5.6
+572.2 2.5
+573.2 2.7
+575.2 7.0
+579.1 19.2
+580.4 23.5
+581.5 1.6
+582.2 1.7
+583.6 5.6
+585.4 2.5
+588.0 13.8
+590.4 21.2
+591.0 2.5
+593.0 10.8
+596.2 1.3
+598.3 1.5
+600.2 14.5
+602.6 1.6
+604.2 2.5
+604.9 1.3
+605.5 3.7
+606.4 12.6
+612.3 1.2
+616.6 6.0
+618.1 7.0
+621.0 5.5
+625.2 1.1
+627.2 6.9
+633.5 12.1
+639.0 1.3
+642.7 1.5
+643.5 17.2
+644.7 2.5
+647.1 3.2
+652.4 4.6
+655.7 16.0
+657.4 7.8
+660.3 7.8
+661.4 51.0
+662.5 5.5
+663.3 0.8
+664.4 12.6
+665.5 4.5
+673.5 5.3
+675.4 2.2
+676.4 3.0
+679.1 5.5
+682.5 4.6
+683.7 4.4
+684.4 1.7
+686.1 1.1
+688.5 1.7
+691.6 2.9
+696.1 2.9
+697.4 4.0
+698.4 12.8
+701.0 12.3
+704.3 13.3
+709.3 4.1
+712.3 1.7
+713.6 4.1
+714.6 4.0
+715.2 66.9
+716.2 12.0
+718.7 1.8
+729.3 1.6
+743.2 3.2
+748.5 1.8
+750.6 6.3
+753.4 1.7
+754.5 23.7
+755.3 7.3
+760.4 4.6
+771.1 3.2
+772.1 9.8
+773.3 4.3
+774.4 2.5
+775.3 14.8
+780.5 3.5
+789.3 19.8
+790.3 6.8
+796.4 3.2
+800.5 2.0
+801.3 1.7
+802.5 2.2
+814.8 1.0
+816.8 5.3
+818.7 1.6
+819.7 0.8
+826.7 2.0
+828.6 1.5
+830.4 1.2
+832.4 2.5
+839.5 1.2
+841.0 3.9
+842.4 1.6
+843.3 22.7
+844.3 3.5
+851.6 6.5
+860.5 4.0
+861.5 3.7
+862.7 3.0
+900.4 1.7
+929.3 0.8
+975.4 2.5
+S	18	18	1032.40
+Z	3	3095.18
+293.1 9.5
+295.0 1.3
+296.5 1.6
+301.3 2.6
+308.0 6.4
+311.2 0.7
+312.0 2.9
+316.1 3.9
+325.2 69.4
+326.3 6.0
+329.4 1.9
+330.2 6.4
+340.0 3.9
+341.1 6.3
+342.2 19.3
+343.1 4.3
+344.1 1.1
+345.2 1.1
+346.4 1.1
+351.5 3.5
+354.5 9.1
+355.3 2.8
+355.9 1.1
+358.2 4.0
+359.1 7.3
+360.1 6.6
+364.6 4.4
+366.5 1.1
+368.3 6.0
+369.4 2.2
+370.6 7.6
+371.3 41.1
+372.3 10.7
+374.3 3.5
+375.1 1.4
+377.0 0.7
+379.3 6.0
+383.2 0.9
+385.2 21.6
+387.0 2.1
+389.3 39.1
+390.5 1.0
+395.0 2.3
+398.4 0.7
+399.3 3.0
+400.2 3.2
+402.3 1.5
+403.1 13.6
+405.0 0.9
+406.2 8.7
+407.9 1.9
+411.2 5.2
+412.2 4.9
+413.1 39.1
+414.0 7.1
+415.1 1.3
+416.3 2.0
+420.4 0.8
+422.1 6.5
+423.1 3.9
+424.0 2.7
+425.0 4.6
+426.5 1.2
+427.2 7.4
+429.3 3.8
+430.3 3.1
+431.3 15.1
+432.5 2.2
+435.5 2.4
+436.3 2.1
+439.0 9.0
+441.0 8.6
+442.3 3.5
+443.2 2.9
+445.3 0.8
+446.3 1.6
+447.4 2.1
+452.1 5.6
+453.2 19.9
+454.0 15.8
+455.4 1.8
+457.9 4.2
+459.7 4.1
+462.3 4.2
+463.8 1.6
+464.4 5.7
+465.1 4.0
+466.1 1.1
+468.3 6.4
+470.1 7.0
+470.8 1.7
+472.2 5.3
+473.2 10.0
+474.1 1.6
+474.8 1.2
+476.0 0.9
+476.9 5.1
+478.3 2.1
+480.4 1.0
+481.3 1.8
+482.2 7.2
+485.2 8.4
+486.4 10.1
+487.1 8.3
+488.2 4.1
+489.3 2.5
+490.3 4.3
+490.9 2.7
+492.2 2.0
+494.2 29.3
+495.2 1.6
+497.5 7.8
+498.3 2.9
+499.2 2.2
+500.6 3.2
+501.4 7.4
+502.2 12.8
+504.1 53.6
+505.3 6.7
+507.7 1.3
+509.1 7.1
+510.6 1.5
+511.2 2.5
+512.1 8.7
+514.3 2.3
+515.2 13.6
+516.1 0.5
+517.3 1.3
+519.5 2.4
+520.2 2.4
+521.3 1.3
+523.1 0.8
+524.0 39.1
+525.1 28.0
+526.0 3.6
+528.1 12.0
+528.9 2.7
+530.0 12.1
+531.2 10.1
+532.1 21.2
+532.8 2.5
+533.7 2.1
+534.5 12.0
+535.3 18.1
+536.7 1.0
+537.5 1.7
+541.2 5.6
+542.2 9.5
+543.2 4.2
+544.3 1.2
+545.3 2.3
+546.4 2.4
+547.5 1.8
+550.3 1.8
+551.2 9.1
+552.2 3.2
+553.4 0.6
+554.5 5.2
+555.2 2.9
+556.1 5.8
+558.1 1.4
+559.2 5.6
+560.2 1.8
+562.3 2.7
+563.0 1.0
+564.1 7.4
+565.1 1.4
+566.4 1.6
+567.3 4.3
+568.7 2.5
+572.0 284.6
+573.0 24.1
+573.8 4.3
+575.1 6.5
+576.3 0.7
+577.5 0.8
+579.1 3.3
+581.0 13.8
+583.3 19.4
+584.2 4.8
+585.1 19.2
+586.0 3.6
+587.3 2.8
+588.1 5.4
+589.2 2.7
+591.3 15.4
+592.8 13.7
+593.6 7.4
+595.3 3.6
+598.0 6.4
+599.1 14.3
+599.9 7.3
+601.3 47.7
+602.3 7.8
+603.3 9.0
+607.1 42.2
+607.9 24.3
+609.3 7.6
+610.9 8.6
+611.6 17.3
+614.2 5.8
+615.6 16.5
+616.5 5.0
+617.2 5.8
+618.2 122.9
+619.3 40.4
+620.4 15.8
+621.2 6.1
+621.9 0.8
+622.5 2.8
+623.7 10.5
+624.5 4.0
+625.4 9.9
+626.2 1.0
+627.1 9.2
+629.6 15.8
+631.4 8.3
+632.9 18.2
+634.3 2.6
+635.3 7.2
+636.2 6.8
+637.1 4.2
+638.3 25.7
+639.2 7.2
+640.3 10.3
+642.1 20.6
+643.0 8.9
+645.0 48.9
+646.0 4.7
+647.1 14.1
+648.4 8.7
+649.3 17.1
+650.3 29.3
+653.0 4.3
+654.2 1.6
+655.4 10.9
+657.5 40.0
+658.3 3.8
+659.0 9.7
+660.5 9.3
+661.3 5.1
+662.9 22.9
+663.7 8.4
+665.5 32.9
+666.3 61.9
+667.1 22.5
+668.4 5.9
+669.8 15.6
+670.9 25.1
+671.6 3.1
+672.7 17.5
+673.6 0.5
+674.2 7.2
+675.2 15.0
+676.0 8.4
+677.1 1.1
+678.1 6.8
+679.2 11.3
+680.5 14.7
+681.5 6.8
+682.1 2.7
+683.8 11.8
+685.3 6.0
+686.3 6.5
+687.3 12.9
+688.1 19.7
+689.2 431.2
+690.2 76.0
+691.4 32.0
+692.3 12.4
+693.3 12.4
+694.5 11.0
+696.0 13.4
+697.5 30.4
+698.3 24.4
+699.4 6.8
+700.2 9.3
+702.4 3.7
+703.2 18.3
+704.1 2.1
+705.3 13.3
+706.6 59.5
+707.3 20.0
+708.2 11.6
+709.5 2.9
+710.2 6.9
+711.2 7.5
+712.6 18.0
+713.3 1.6
+714.3 27.3
+715.7 16.5
+716.5 14.1
+717.6 4.5
+718.4 16.2
+719.2 8.0
+720.4 4.2
+721.3 7.7
+722.5 12.1
+723.2 31.1
+724.1 0.6
+724.9 5.3
+726.4 24.0
+727.3 11.4
+728.3 13.0
+729.4 18.3
+730.0 2.3
+731.2 4.5
+732.5 2.5
+733.8 26.1
+734.6 0.3
+735.7 2.3
+736.8 20.8
+737.4 41.2
+738.4 25.4
+739.3 12.5
+740.2 1.2
+741.3 0.7
+742.4 1.2
+743.4 1.4
+744.6 5.7
+745.9 11.7
+747.3 11.1
+748.5 2.1
+749.2 0.8
+750.2 0.8
+751.1 8.9
+753.1 52.4
+754.3 44.1
+755.3 21.9
+756.3 14.2
+756.9 28.1
+758.4 12.3
+759.9 24.2
+760.5 1.9
+762.1 108.5
+763.0 28.2
+764.1 29.6
+765.2 9.3
+766.5 9.4
+769.0 140.0
+770.1 75.9
+771.0 641.7
+772.4 15.2
+773.1 2.8
+774.1 36.7
+775.3 14.1
+778.0 2929.8
+778.9 351.2
+779.5 56.3
+780.4 16.6
+781.3 11.5
+782.3 6.5
+783.4 19.6
+785.0 10.7
+786.4 7.3
+787.5 45.4
+788.6 31.6
+790.7 12.6
+791.4 12.9
+792.1 66.1
+793.0 2.1
+794.0 14.9
+795.3 13.7
+796.2 4.5
+797.3 10.5
+798.4 7.3
+799.3 14.6
+800.0 9.5
+801.0 20.7
+802.3 118.4
+803.3 51.3
+804.3 7.8
+805.4 7.1
+806.3 20.3
+807.3 6.4
+808.4 2.5
+809.5 9.9
+810.3 83.1
+811.7 23.3
+812.6 20.5
+813.4 4.9
+814.0 2.4
+814.7 12.7
+816.0 16.3
+816.8 5.4
+818.1 16.9
+819.3 90.5
+820.2 82.9
+821.4 35.6
+822.3 43.5
+823.3 14.6
+824.3 28.7
+825.3 3.2
+826.0 15.2
+827.2 38.3
+828.1 98.0
+828.9 17.7
+830.1 12.9
+831.0 0.3
+831.7 8.8
+832.8 134.4
+833.5 174.8
+834.5 16.1
+835.6 5.5
+836.6 8.1
+837.4 17.0
+838.2 3.1
+839.2 28.4
+840.2 50.2
+841.6 527.5
+842.4 485.3
+843.4 32.0
+844.3 6.3
+845.3 24.9
+846.0 16.0
+846.8 7.8
+847.8 63.5
+848.9 37.9
+849.9 6.0
+851.1 22.8
+851.9 0.3
+852.5 5.1
+853.3 1.9
+854.1 9.9
+856.5 10.5
+857.8 27.4
+858.6 3.3
+860.2 21.8
+861.2 8.2
+862.0 4.0
+863.2 72.5
+864.2 29.3
+865.3 19.4
+866.2 26.0
+867.3 15.7
+868.0 15.2
+868.8 5.8
+869.6 10.0
+870.6 6.5
+871.7 6.2
+872.5 0.6
+874.6 13.2
+875.6 18.0
+877.0 49.4
+878.3 25.3
+879.4 30.0
+880.9 88.1
+881.8 33.0
+883.5 71.0
+884.4 51.4
+885.5 17.9
+887.1 6.6
+887.8 4.7
+888.4 16.9
+889.4 1.0
+890.7 10.5
+891.3 16.6
+892.6 19.3
+893.4 21.5
+894.3 51.3
+895.4 31.3
+897.3 6.5
+898.3 15.2
+899.2 78.4
+900.2 4.3
+901.0 14.3
+902.5 26.9
+903.6 28.7
+904.2 7.6
+905.0 2.1
+905.9 1.2
+907.4 18.0
+909.1 17.5
+910.3 16.2
+911.1 44.4
+912.2 126.0
+913.3 31.3
+914.6 36.7
+915.6 9.8
+916.4 20.6
+917.3 118.0
+918.4 52.8
+919.9 20.6
+920.6 12.1
+921.6 25.6
+922.8 28.5
+924.0 47.5
+925.6 23.1
+926.3 40.3
+927.0 34.2
+927.8 4.3
+929.3 7.8
+931.0 123.3
+932.0 54.4
+933.2 27.8
+934.6 50.3
+935.7 59.9
+936.5 13.8
+937.3 13.1
+938.2 9.0
+940.0 2960.4
+941.0 830.9
+942.8 60.1
+944.4 35.8
+945.4 111.7
+946.5 28.3
+949.6 31.8
+950.9 30.1
+951.5 15.9
+952.2 44.1
+954.0 230.6
+954.7 120.8
+955.4 43.4
+956.3 46.0
+957.2 21.5
+958.4 41.5
+959.2 49.6
+960.0 25.9
+960.8 36.5
+961.7 27.4
+962.7 25.0
+963.4 8.6
+964.5 11.4
+965.7 13.1
+966.7 10.0
+968.0 206.1
+969.0 31.4
+970.2 28.1
+971.0 8.6
+971.7 8.1
+972.7 6.9
+974.0 64.2
+975.0 12.3
+977.0 1056.7
+977.9 313.5
+979.2 216.3
+980.3 0.4
+981.4 11.8
+982.5 24.5
+983.5 17.4
+984.4 25.9
+985.3 14.8
+986.3 14.6
+987.3 21.5
+988.5 20.3
+989.6 18.8
+991.0 41.7
+991.8 36.8
+992.7 18.2
+993.8 25.6
+995.5 176.3
+996.4 488.0
+997.7 92.3
+998.9 83.0
+999.9 35.7
+1000.7 96.0
+1001.4 35.5
+1002.1 53.1
+1003.5 12.6
+1004.8 233.1
+1005.8 261.2
+1007.0 22.1
+1007.9 63.8
+1009.5 40.8
+1010.5 31.0
+1011.5 122.8
+1012.9 430.7
+1014.3 280.2
+1015.6 61.5
+1016.7 31.5
+1017.6 30.1
+1018.5 31.5
+1019.5 88.7
+1020.3 111.8
+1021.6 179.2
+1022.4 93.9
+1023.0 107.8
+1024.0 14.3
+1025.8 3.3
+1029.6 3.2
+1034.0 10.2
+1039.8 1.8
+1042.4 4.4
+1043.2 7.1
+1044.6 8.6
+1045.4 15.9
+1046.0 3.5
+1046.8 3.2
+1048.0 2.7
+1049.1 5.6
+1049.9 14.3
+1051.3 1.6
+1052.1 4.6
+1054.6 8.9
+1057.5 24.3
+1058.5 1.0
+1059.4 5.0
+1060.3 1.4
+1061.0 2.3
+1062.4 10.9
+1063.1 5.2
+1064.2 6.1
+1066.5 2.6
+1067.7 24.4
+1068.8 13.2
+1070.0 35.6
+1071.4 11.8
+1072.1 15.1
+1073.5 2.5
+1075.4 6.7
+1077.3 35.9
+1078.4 18.9
+1080.9 9.9
+1081.6 5.9
+1082.3 7.0
+1083.2 12.9
+1084.9 12.2
+1086.0 14.4
+1087.3 41.7
+1088.1 20.6
+1089.4 114.1
+1090.3 40.5
+1091.7 0.9
+1094.7 5.1
+1095.9 3.8
+1097.3 3.4
+1098.0 4.6
+1099.4 14.4
+1100.2 10.3
+1101.4 7.0
+1103.4 8.4
+1104.3 24.3
+1105.9 10.2
+1107.1 2.9
+1108.7 66.3
+1109.4 17.9
+1110.5 12.9
+1111.3 7.8
+1112.1 15.6
+1113.5 6.2
+1114.3 1.7
+1115.6 2.7
+1116.5 6.4
+1117.3 2.1
+1118.7 7.3
+1121.5 4.3
+1122.6 39.2
+1123.5 16.0
+1124.6 6.7
+1125.6 23.9
+1126.6 4.3
+1127.4 5.9
+1128.3 4.1
+1129.4 5.0
+1130.1 9.8
+1130.9 12.5
+1132.3 29.9
+1133.4 14.7
+1134.4 4.3
+1136.4 5.2
+1137.8 21.1
+1139.2 24.3
+1140.2 19.6
+1141.1 34.3
+1142.4 771.0
+1143.4 300.8
+1144.4 44.7
+1145.4 13.9
+1146.7 26.2
+1147.6 47.3
+1148.3 4.6
+1149.4 25.9
+1150.5 4.1
+1152.4 3.0
+1153.0 2.9
+1154.4 16.4
+1155.2 6.4
+1156.9 11.8
+1158.5 19.5
+1159.4 0.4
+1160.3 6.2
+1161.2 10.1
+1163.2 3.8
+1164.4 10.3
+1165.8 44.7
+1166.4 88.3
+1167.4 11.6
+1168.1 3.2
+1169.3 20.1
+1170.4 13.8
+1172.5 9.6
+1173.4 6.5
+1175.8 26.5
+1176.8 4.7
+1178.5 4.1
+1179.6 10.7
+1180.3 17.9
+1181.4 24.8
+1182.4 10.1
+1183.2 16.5
+1184.0 56.6
+1185.3 139.0
+1186.3 80.5
+1187.2 46.9
+1188.3 22.0
+1189.3 33.6
+1190.5 16.0
+1191.2 1.5
+1192.2 6.1
+1193.1 3.0
+1194.3 50.3
+1194.9 99.3
+1196.1 9.8
+1196.8 9.9
+1198.2 311.6
+1199.3 194.8
+1200.4 39.6
+1201.2 6.3
+1202.2 5.9
+1202.9 20.3
+1203.6 622.5
+1204.6 210.9
+1205.9 28.4
+1206.8 4.7
+1207.5 1.3
+1208.7 9.2
+1209.8 25.5
+1210.9 6.6
+1213.3 243.9
+1214.4 75.6
+1216.2 1368.4
+1217.2 623.5
+1218.2 159.5
+1219.2 28.7
+1219.9 4.6
+1220.5 1.0
+1221.5 5.3
+1223.3 62.4
+1224.3 32.0
+1225.5 40.5
+1226.2 22.0
+1227.6 36.6
+1228.3 9.0
+1229.9 40.9
+1230.9 36.3
+1231.8 1.9
+1233.4 14.4
+1234.1 5.1
+1237.2 5.1
+1239.0 236.3
+1240.0 147.1
+1241.4 65.2
+1242.2 37.3
+1243.2 9.6
+1244.7 10.9
+1245.8 7.9
+1247.3 123.1
+1248.1 132.7
+1248.9 12.3
+1249.5 4.2
+1251.8 4.0
+1253.4 6.8
+1256.4 6.8
+1258.5 7.9
+1259.7 1.9
+1260.8 9.7
+1262.1 27.6
+1263.3 25.5
+1264.6 9.4
+1265.4 24.5
+1266.7 5.5
+1267.5 2.7
+1268.2 13.1
+1269.6 12.5
+1271.5 2.4
+1272.1 19.5
+1272.9 15.7
+1273.9 18.6
+1274.8 29.5
+1276.0 9.6
+1277.1 2.1
+1278.5 1.7
+1279.3 5.8
+1280.5 6.8
+1281.9 22.9
+1283.0 100.2
+1283.6 162.9
+1284.5 4.0
+1285.2 2.5
+1286.6 13.5
+1287.6 56.7
+1288.3 17.2
+1289.4 10.7
+1290.3 3.2
+1291.7 5.0
+1293.5 4.4
+1294.4 19.1
+1296.0 90.6
+1296.9 74.9
+1298.7 14.1
+1299.4 5.5
+1300.4 17.8
+1301.6 8.3
+1302.5 12.5
+1305.6 2.6
+1306.8 10.5
+1307.8 13.6
+1310.2 17.8
+1311.7 7.7
+1313.0 8.2
+1313.6 10.2
+1314.4 1.2
+1315.5 12.7
+1316.6 16.8
+1317.8 6.0
+1318.6 23.5
+1319.4 33.4
+1321.4 1.9
+1322.3 5.6
+1323.0 8.2
+1324.2 4.9
+1327.8 44.7
+1328.7 65.1
+1329.5 39.7
+1330.5 18.6
+1331.7 1.0
+1333.2 0.8
+1334.4 8.4
+1335.1 3.9
+1336.2 6.8
+1337.4 11.1
+1338.3 9.7
+1340.1 8.7
+1341.8 0.6
+1343.2 0.8
+1344.5 3.2
+1345.6 25.6
+1346.4 5.5
+1347.3 6.0
+1348.6 3.4
+1350.4 1.0
+1352.5 8.8
+1353.6 71.7
+1354.4 56.3
+1355.4 2.2
+1356.6 6.2
+1357.8 11.2
+1358.5 21.5
+1360.8 30.0
+1362.3 107.9
+1363.2 57.6
+1364.2 7.6
+1366.4 1.9
+1367.2 1.9
+1368.2 5.1
+1369.9 7.1
+1370.8 2.6
+1372.1 2.0
+1373.8 1.6
+1375.2 12.9
+1376.4 24.4
+1377.6 19.8
+1378.2 9.6
+1379.4 12.9
+1380.6 16.5
+1385.5 2.6
+1386.7 2.7
+1387.5 10.0
+1389.0 3.1
+1389.6 2.2
+1390.8 11.7
+1391.5 10.3
+1392.6 9.2
+1393.4 6.1
+1394.3 81.6
+1395.4 59.8
+1396.4 26.3
+1397.4 6.7
+1398.6 8.5
+1400.0 8.3
+1401.1 7.4
+1402.4 17.1
+1403.4 4.4
+1404.2 0.8
+1405.3 12.5
+1406.4 6.9
+1407.4 8.6
+1408.7 22.2
+1409.5 11.3
+1412.3 421.3
+1413.4 272.1
+1414.4 64.0
+1415.7 13.7
+1417.3 15.1
+1418.1 72.5
+1419.1 51.5
+1420.2 4.6
+1421.6 0.7
+1423.6 8.8
+1424.7 5.0
+1426.3 43.1
+1427.0 51.9
+1427.7 16.8
+1428.6 4.5
+1429.5 4.0
+1430.3 1.8
+1432.0 8.3
+1433.7 13.2
+1434.9 2.0
+1436.0 9.4
+1437.4 7.8
+1438.2 3.7
+1439.1 6.6
+1441.1 9.9
+1442.0 2.9
+1443.0 12.3
+1444.1 11.5
+1445.1 3.6
+1445.8 0.6
+1446.5 0.9
+1447.5 6.4
+1449.0 9.5
+1451.5 1.7
+1452.1 4.7
+1456.2 2.1
+1457.5 22.2
+1458.3 9.4
+1459.1 0.6
+1460.6 7.2
+1461.9 9.6
+1464.4 9.8
+1465.3 14.2
+1465.9 62.1
+1467.0 32.4
+1468.1 5.3
+1469.3 0.7
+1471.5 3.0
+1474.4 72.0
+1475.1 223.1
+1476.1 29.9
+1478.4 0.7
+1481.6 19.8
+1482.5 3.7
+1483.4 1.3
+1485.1 16.9
+1486.0 4.6
+1487.9 1.8
+1489.0 7.3
+1490.5 11.9
+1491.4 1.4
+1492.6 7.4
+1493.7 10.9
+1494.7 6.3
+1495.3 4.2
+1498.4 1.5
+1499.2 1.6
+1504.3 14.6
+1505.5 13.7
+1506.3 7.5
+1507.3 0.9
+1508.1 1.1
+1508.7 2.0
+1510.9 12.8
+1512.8 8.7
+1514.5 1.9
+1515.2 1.8
+1516.2 1.6
+1517.3 2.7
+1518.2 20.7
+1519.1 65.3
+1520.1 19.7
+1521.1 17.7
+1522.4 283.9
+1523.4 140.1
+1524.4 73.5
+1525.6 4.6
+1526.7 87.1
+1527.6 317.1
+1528.5 124.5
+1529.6 54.8
+1530.6 15.0
+1531.6 2.9
+1532.2 3.1
+1536.5 28.2
+1537.4 47.6
+1538.6 2.6
+1540.4 910.7
+1541.4 620.5
+1542.4 198.7
+1543.4 37.6
+1544.4 1.5
+1545.5 0.5
+1547.8 0.9
+1554.4 677.2
+1555.5 403.9
+1556.5 123.8
+1557.4 10.5
+1558.6 3.4
+1561.1 0.7
+1564.3 6.4
+1565.4 4.0
+1567.4 6.7
+1570.6 3.5
+1571.6 6.5
+1572.6 2.3
+1573.9 3.6
+1574.6 7.6
+1576.4 5.8
+1577.5 4.3
+1578.7 3.4
+1579.6 6.2
+1581.5 16.4
+1584.8 6.1
+1587.4 4.2
+1588.5 22.6
+1591.5 5.6
+1595.6 3.9
+1596.5 2.0
+1597.5 3.0
+1598.2 3.3
+1599.7 6.9
+1600.8 1.6
+1602.4 0.7
+1603.5 9.3
+1609.4 7.0
+1610.5 8.4
+1612.3 2.3
+1613.6 2.9
+1614.6 8.9
+1615.8 1.3
+1619.1 10.6
+1620.5 4.2
+1621.3 1.6
+1624.7 7.4
+1625.8 2.2
+1627.9 3.3
+1628.5 9.5
+1629.5 4.5
+1633.1 3.0
+1634.4 3.1
+1635.3 12.3
+1638.4 4.1
+1640.8 1.8
+1641.7 4.0
+1643.3 1.6
+1650.4 3.7
+1654.4 5.8
+1656.6 15.7
+1657.6 12.2
+1658.3 5.4
+1661.1 10.1
+1662.2 5.2
+1663.1 8.5
+1665.4 27.5
+1666.1 7.3
+1666.8 16.0
+1667.6 10.6
+1670.6 3.1
+1672.5 8.8
+1673.7 12.8
+1676.5 3.5
+1677.8 1.5
+1680.8 2.8
+1682.4 27.7
+1683.6 19.3
+1685.2 2.9
+1686.8 13.2
+1687.5 4.5
+1689.4 20.5
+1690.5 15.1
+1691.4 9.4
+1692.4 6.0
+1694.4 2.9
+1696.4 3.7
+1699.9 1.4
+1705.5 8.9
+1710.2 4.8
+1712.8 3.6
+1713.4 0.7
+1714.7 2.8
+1716.5 7.1
+1718.1 10.3
+1722.0 3.9
+1722.7 6.7
+1723.6 0.7
+1725.0 2.1
+1730.2 4.5
+1732.4 1.3
+1733.5 8.4
+1734.7 2.1
+1736.2 1.6
+1737.6 8.2
+1739.7 3.3
+1741.1 12.7
+1742.4 2.0
+1748.1 4.7
+1749.6 21.2
+1750.5 1.1
+1751.3 3.5
+1754.1 4.1
+1756.9 4.9
+1757.7 6.7
+1764.5 2.4
+1766.4 5.3
+1767.3 1.0
+1770.4 26.5
+1771.3 37.7
+1772.3 16.9
+1773.0 12.9
+1773.7 4.5
+1775.0 7.1
+1782.3 2.7
+1788.3 51.5
+1789.0 9.0
+1789.8 34.9
+1790.9 10.5
+1791.8 7.1
+1793.9 4.9
+1796.3 4.4
+1800.5 1.0
+1805.9 0.8
+1807.5 5.0
+1810.7 1.0
+1815.2 3.8
+1823.5 1.6
+1834.4 3.1
+1835.4 5.5
+1839.5 3.6
+1840.5 1.2
+1847.8 1.0
+1851.6 3.3
+1852.5 3.1
+1856.5 1.1
+1863.7 5.1
+1864.8 4.0
+1866.0 1.1
+1868.7 38.0
+1870.0 35.5
+1871.2 15.4
+1871.8 8.3
+1878.4 5.8
+1879.7 1.7
+1881.5 14.5
+1882.5 18.4
+1883.5 5.7
+1884.3 3.0
+1885.0 5.8
+1885.8 3.9
+1889.6 4.5
+1892.3 5.1
+1894.7 4.7
+1898.4 5.7
+1906.1 2.1
+1906.8 7.8
+1907.7 4.3
+1918.5 8.0
+1919.7 0.9
+1927.4 9.3
+1934.2 74.7
+1935.1 11.4
+1935.8 35.7
+1936.5 3.2
+1937.2 6.3
+1937.9 9.9
+1952.6 52.2
+1953.7 56.6
+1954.7 21.8
+1977.6 7.6
+1984.7 2.9
+1986.9 1.2
+1989.8 0.4
+1993.1 2.4
+S	19	19	604.29
+I	ID	78
+I	RTime	3.6262
+Z	2	1207.57
+Z	3	1810.85
+182.8 2.5
+186.8 1.5
+188.0 1.2
+192.2 1.7
+194.9 0.8
+199.8 3.0
+204.1 2.7
+210.1 4.9
+212.0 1.5
+215.4 1.3
+219.3 1.7
+223.8 1.7
+228.1 6.6
+229.6 3.7
+234.4 1.7
+240.1 5.6
+242.1 1.3
+248.1 4.1
+254.4 6.0
+255.1 4.0
+258.2 7.8
+261.9 3.7
+266.2 1.8
+272.3 17.5
+273.4 2.5
+276.4 1.5
+280.1 2.2
+284.7 5.0
+285.4 3.9
+286.1 2.9
+287.2 3.0
+290.2 19.8
+290.9 2.2
+296.2 1.3
+299.1 4.0
+301.2 1.2
+306.6 4.0
+311.2 2.7
+312.0 1.5
+314.8 6.5
+317.2 4.6
+318.5 2.4
+321.4 3.0
+324.2 7.0
+325.3 5.0
+329.0 8.8
+335.2 0.8
+341.2 2.9
+342.1 35.7
+343.2 15.1
+354.3 4.0
+355.3 1.2
+356.1 1.8
+364.4 1.0
+366.0 3.5
+369.2 8.0
+372.3 2.5
+373.3 3.0
+374.4 1.8
+383.5 3.0
+384.2 4.1
+387.0 9.3
+390.6 1.3
+392.3 8.1
+395.1 1.8
+396.4 3.5
+397.1 1.2
+399.3 4.3
+401.4 9.6
+402.3 3.0
+404.2 1.3
+412.2 1.2
+413.1 1.6
+414.2 23.7
+415.4 5.4
+419.1 3.5
+424.0 3.5
+425.4 1.7
+430.2 5.4
+432.5 1.2
+434.3 7.4
+438.2 3.4
+440.2 10.1
+441.2 5.9
+442.2 6.0
+444.2 4.0
+447.2 2.0
+455.1 5.9
+457.5 3.7
+458.3 13.0
+462.3 13.3
+463.9 1.0
+465.8 2.5
+469.4 1.7
+471.2 31.5
+472.2 12.6
+472.9 5.8
+476.5 16.8
+482.0 5.8
+488.3 3.5
+489.5 2.2
+490.4 11.8
+493.3 1.7
+494.2 8.5
+495.0 4.1
+504.2 3.2
+505.0 7.8
+511.4 2.2
+512.2 4.9
+514.1 5.5
+515.2 5.4
+516.0 4.4
+520.1 4.5
+522.3 2.4
+523.2 3.9
+524.2 3.5
+525.8 3.7
+527.8 1.7
+530.0 2.5
+532.3 4.5
+534.5 7.0
+536.5 2.5
+538.1 2.0
+538.8 6.6
+541.0 4.4
+542.1 2.7
+543.2 4.5
+544.5 9.3
+547.5 164.0
+549.9 20.5
+551.7 16.6
+552.5 1.8
+553.5 3.7
+558.3 8.6
+560.2 11.5
+560.9 4.1
+562.5 9.6
+564.0 3.9
+564.9 4.8
+566.2 8.5
+567.9 6.0
+569.2 20.0
+570.1 3.2
+572.2 4.6
+573.8 8.3
+574.8 2.7
+576.7 9.3
+579.7 2.9
+580.9 10.6
+584.8 4.6
+585.7 22.3
+586.5 95.5
+587.2 58.5
+588.4 5.9
+589.2 11.0
+591.9 4.0
+595.5 31.8
+623.3 1.6
+624.3 4.0
+653.5 3.2
+696.4 5.3
+698.8 6.0
+701.4 1.7
+702.2 4.4
+719.3 18.7
+720.2 8.1
+721.3 10.1
+735.9 6.0
+737.4 20.1
+738.2 5.0
+739.6 3.5
+743.3 1.7
+749.1 1.3
+753.5 5.8
+754.7 1.2
+755.6 2.7
+759.4 2.9
+776.4 10.0
+777.3 7.4
+778.1 4.5
+794.1 7.0
+794.8 5.0
+832.8 3.5
+834.2 1.6
+849.6 7.6
+866.4 103.0
+867.5 42.7
+873.4 2.9
+874.3 10.8
+875.5 1.2
+882.6 1.7
+891.4 2.0
+892.7 4.9
+906.5 1.2
+923.5 18.0
+924.4 13.1
+950.2 8.3
+967.7 1.7
+980.7 1.7
+981.4 2.0
+990.3 1.5
+1004.5 1.7
+1008.1 9.0
+1008.8 2.0
+1023.5 4.1
+1038.2 1.0
+1044.5 1.7
+1060.1 4.5
+1072.5 2.0
+1089.6 3.0
+1093.2 3.2
+1186.1 2.2
+S	20	20	450.90
+I	ID	73
+I	RTime	3.3791
+Z	2	900.79
+155.1 3.7
+163.0 1.0
+167.0 5.3
+197.0 2.9
+201.0 1.8
+212.1 1.0
+231.0 2.2
+241.3 1.7
+243.3 2.2
+257.1 2.2
+266.1 0.8
+295.4 1.3
+307.1 0.8
+308.2 1.2
+309.2 1.5
+318.8 1.6
+323.0 120.9
+326.1 2.2
+326.9 2.5
+330.1 2.4
+332.2 2.0
+336.1 2.7
+339.1 0.8
+341.3 0.6
+342.2 6.4
+343.8 5.1
+345.6 4.9
+347.0 1.6
+355.1 3.7
+358.3 7.0
+360.6 8.3
+363.6 3.9
+366.2 1.7
+375.0 1.6
+376.9 1.3
+378.8 1.0
+383.9 4.1
+386.3 6.5
+387.2 1.8
+388.4 7.5
+391.1 3.9
+392.3 3.2
+396.5 8.8
+397.3 8.5
+398.4 41.4
+400.9 5.6
+405.8 5.0
+406.4 9.3
+407.2 1.3
+408.9 2.7
+412.8 5.3
+414.3 10.1
+415.1 20.7
+423.3 1.2
+424.9 9.8
+425.8 10.5
+427.7 6.4
+428.4 4.5
+431.1 8.3
+432.6 24.7
+433.9 71.0
+435.2 27.0
+439.1 9.1
+441.5 22.1
+442.3 41.0
+451.0 3.0
+514.3 1.7
+515.0 6.0
+523.1 5.4
+549.3 6.3
+553.7 9.0
+559.3 4.9
+560.9 2.0
+562.4 3.4
+567.7 4.5
+570.4 2.0
+574.8 1.7
+577.8 18.7
+588.9 4.6
+597.0 9.0
+613.6 1.5
+627.5 1.2
+644.5 2.0
+645.2 2.2
+651.3 2.7
+685.6 2.7
+698.5 3.0
+702.5 1.6
+705.3 2.9
+714.6 2.4
+722.0 1.7
+732.3 1.2
+739.5 2.5
+740.7 4.0
+773.4 4.3
+813.4 4.0
+S	21	21	805.00
+I	ID	192
+I	RTime	9.4760
+Z	1	805.00
+258.3 2.0
+273.0 1.3
+283.4 2.5
+284.2 1.6
+289.2 1.7
+309.3 3.9
+320.4 1.3
+325.6 2.5
+332.2 1.6
+345.9 2.9
+353.5 2.4
+357.3 2.0
+363.3 2.0
+368.2 1.3
+381.3 6.0
+384.1 4.0
+388.5 3.5
+395.4 1.2
+396.7 2.0
+397.5 1.2
+398.4 1.2
+402.5 1.8
+403.5 2.2
+412.8 2.2
+423.6 2.5
+424.3 1.2
+425.5 10.3
+427.3 9.0
+429.8 1.8
+434.7 1.2
+446.3 2.4
+470.5 2.9
+471.4 3.5
+480.5 5.0
+488.4 3.5
+491.7 2.0
+498.2 1.2
+512.4 5.5
+515.9 2.7
+518.3 2.5
+530.5 1.3
+533.2 1.2
+535.3 7.0
+536.5 5.4
+537.4 9.8
+539.5 7.0
+546.3 2.4
+547.5 6.4
+561.2 1.8
+576.4 2.0
+581.5 1.3
+588.2 3.2
+589.2 5.0
+590.2 26.2
+590.9 1.2
+591.5 5.0
+598.7 1.2
+611.1 3.5
+617.3 2.5
+627.3 6.3
+640.4 0.8
+647.4 5.5
+658.6 2.9
+661.3 2.4
+675.5 4.9
+676.3 2.7
+677.5 1.6
+679.4 1.3
+683.4 4.9
+688.6 3.0
+690.4 2.0
+699.4 2.5
+726.3 2.7
+744.7 2.9
+748.8 3.2
+750.6 3.4
+752.5 5.0
+770.5 8.3
+774.4 3.2
+785.6 1.3
+786.5 3.5
+787.5 23.1
+788.5 3.7
+795.5 2.7
+S	22	22	1489.85
+Z	1	1489.85
+416.2 15.0
+423.9 3.7
+425.3 5.5
+427.3 1.1
+429.3 15.6
+431.2 4.7
+439.3 1.6
+441.0 13.3
+443.3 2.3
+444.3 14.8
+449.2 2.3
+450.2 7.9
+452.4 29.2
+454.4 2.8
+455.2 3.3
+456.1 8.1
+458.2 4.5
+462.6 3.1
+464.3 5.1
+466.3 0.9
+467.3 1.3
+468.0 2.5
+469.2 3.5
+470.1 3.2
+471.4 15.4
+473.3 1.8
+474.2 8.2
+475.4 4.5
+476.3 4.8
+477.3 2.9
+481.1 3.2
+482.3 5.3
+484.6 6.7
+485.3 1.7
+486.4 4.4
+487.3 26.7
+488.3 1.4
+490.5 6.6
+491.3 4.8
+492.3 9.5
+493.0 9.1
+495.6 3.3
+496.4 5.1
+498.3 6.7
+501.3 1.1
+504.5 20.8
+506.1 10.0
+509.1 29.4
+511.4 8.0
+512.3 2.4
+513.6 10.3
+517.3 1.4
+519.4 7.2
+523.1 6.9
+524.6 2.8
+526.6 35.6
+527.4 50.1
+528.4 10.8
+530.1 6.7
+531.2 2.1
+534.2 2.6
+535.4 7.2
+536.3 33.7
+537.3 5.3
+538.3 4.1
+539.6 4.6
+540.2 6.9
+541.1 19.0
+542.4 15.0
+543.4 5.2
+544.4 59.8
+545.3 1.6
+546.3 1.5
+547.1 5.3
+548.4 1.4
+552.4 26.7
+553.4 5.8
+554.4 32.0
+555.2 7.0
+556.2 6.9
+557.3 25.5
+558.2 6.1
+560.0 1.7
+561.2 2.0
+562.7 6.1
+563.5 2.7
+568.1 12.0
+569.6 19.6
+570.3 35.5
+571.2 21.1
+572.3 43.4
+573.2 12.9
+574.1 5.1
+577.3 1.4
+581.3 6.5
+582.3 18.3
+583.3 7.3
+584.2 7.5
+585.3 13.3
+586.4 7.9
+587.1 34.6
+588.2 13.4
+590.3 2.9
+596.6 11.0
+597.3 2.1
+598.1 3.5
+599.2 11.1
+600.2 12.5
+602.8 9.7
+603.5 12.4
+604.7 8.4
+605.5 7.5
+606.7 3.6
+607.6 1.5
+608.4 8.0
+612.5 14.1
+613.3 3.9
+614.5 12.4
+615.5 1.5
+617.1 15.7
+619.7 3.2
+622.3 26.8
+623.5 8.3
+624.6 16.1
+626.3 11.9
+627.1 1.9
+628.5 6.2
+631.2 1.9
+633.2 12.3
+634.4 14.4
+637.4 5.7
+638.4 4.0
+640.3 42.8
+641.2 29.2
+642.2 19.9
+643.2 6.1
+644.4 2.5
+646.1 1.8
+647.2 3.1
+650.3 12.6
+651.4 19.4
+652.3 33.9
+653.4 14.1
+654.5 6.0
+655.2 14.1
+656.4 10.4
+657.5 191.8
+658.9 8.5
+660.5 8.2
+664.2 1.8
+665.2 7.3
+666.8 3.7
+667.5 15.0
+668.6 28.5
+669.3 119.4
+670.4 13.8
+671.3 22.3
+673.3 3.3
+674.2 16.7
+676.2 14.8
+679.2 2.4
+680.6 6.4
+681.5 9.0
+682.8 21.3
+683.5 14.2
+684.4 1.2
+685.4 33.1
+686.4 128.7
+687.3 44.6
+689.5 3.3
+692.4 1.0
+695.6 3.9
+696.5 24.2
+697.4 11.6
+698.3 9.6
+699.4 34.6
+700.3 27.4
+701.5 18.0
+702.7 12.3
+703.6 8.8
+704.4 45.4
+705.3 2.3
+706.1 2.0
+708.4 6.1
+709.5 9.2
+710.4 13.5
+711.3 12.1
+713.4 71.1
+714.6 22.7
+715.7 6.4
+716.5 10.9
+717.5 7.9
+718.7 10.6
+719.5 16.2
+720.2 2.2
+722.6 8.7
+723.4 9.7
+724.3 3.4
+725.2 5.0
+726.2 7.0
+727.3 4.2
+728.4 7.3
+729.3 3.7
+730.6 5.1
+731.2 14.0
+732.5 2.7
+734.2 8.6
+735.3 10.2
+736.0 4.0
+737.1 6.6
+737.8 1.8
+738.5 2.5
+739.3 12.3
+740.3 15.1
+742.6 11.6
+743.5 30.3
+744.4 1.8
+745.4 6.1
+746.5 2.2
+749.5 8.4
+750.3 0.9
+751.5 8.5
+752.7 17.7
+754.4 51.9
+755.3 2.8
+756.5 6.3
+757.2 3.5
+760.0 5.6
+761.2 8.4
+763.4 10.1
+764.3 18.2
+766.5 5.5
+767.4 6.5
+768.5 41.7
+769.3 12.1
+770.3 27.5
+771.4 5.1
+772.5 10.4
+773.4 8.3
+775.7 3.6
+777.0 1.5
+779.2 15.9
+780.7 12.8
+781.6 38.3
+782.5 23.2
+783.4 8.3
+785.0 16.0
+785.7 10.3
+786.5 166.3
+787.5 8.7
+788.2 16.3
+789.6 3.0
+790.5 2.9
+794.3 5.0
+795.7 7.8
+796.3 10.5
+797.3 28.9
+798.3 85.0
+799.4 30.7
+800.3 15.8
+801.2 2.2
+803.5 5.4
+804.7 8.3
+805.5 8.6
+806.8 5.4
+807.7 3.3
+808.5 3.4
+809.4 3.8
+810.5 19.1
+811.5 15.5
+812.5 27.6
+813.5 6.9
+814.3 36.5
+815.5 194.8
+816.5 118.4
+821.3 3.5
+822.6 6.4
+823.3 4.8
+824.2 7.3
+825.6 3.5
+826.6 8.8
+827.3 27.0
+828.4 16.9
+829.3 18.7
+830.4 14.3
+831.3 2.3
+832.3 3.3
+833.4 71.3
+837.2 17.9
+838.2 8.1
+839.4 17.4
+840.3 8.8
+841.7 2.3
+842.6 11.1
+843.6 12.8
+844.4 11.3
+846.8 7.5
+847.4 4.3
+849.7 3.7
+850.7 6.0
+851.7 7.6
+854.7 4.4
+855.7 9.0
+856.5 21.4
+857.5 32.9
+858.4 1.4
+859.5 2.1
+860.5 24.0
+861.6 13.1
+864.6 1.1
+865.4 10.4
+866.4 21.4
+867.7 10.3
+868.8 11.0
+870.0 4.8
+871.5 12.7
+873.5 19.3
+876.4 7.3
+878.2 7.7
+879.7 3.8
+880.4 3.5
+882.4 2.1
+883.6 45.0
+884.4 14.5
+885.5 61.9
+890.5 5.1
+891.3 3.3
+892.8 11.1
+893.5 18.6
+894.6 14.7
+895.5 8.8
+896.3 33.2
+897.7 6.1
+898.6 7.7
+900.4 1.1
+901.4 70.7
+902.6 10.7
+903.5 2.8
+906.7 5.4
+909.3 9.1
+910.4 49.0
+911.5 122.2
+912.6 8.7
+913.5 8.3
+914.3 7.9
+915.6 11.8
+916.3 0.9
+918.3 2.1
+920.6 1.8
+922.3 7.7
+925.5 13.3
+926.3 14.9
+927.8 38.8
+928.5 177.7
+929.4 160.9
+930.0 0.9
+931.5 6.3
+936.7 7.3
+937.5 24.0
+938.5 15.4
+939.6 7.4
+940.6 4.0
+942.5 14.2
+943.5 16.5
+944.6 4.5
+945.8 7.4
+946.5 106.3
+951.0 15.4
+951.8 2.1
+953.3 4.7
+954.7 23.0
+955.4 7.4
+956.4 13.6
+957.5 18.1
+958.3 8.0
+960.5 13.3
+961.6 7.8
+963.1 8.5
+964.4 3.3
+966.6 3.7
+967.3 14.1
+968.4 9.8
+969.6 10.0
+970.4 5.3
+971.2 8.4
+972.5 10.7
+973.5 35.5
+975.5 4.4
+979.6 4.7
+980.4 2.5
+981.3 11.4
+982.0 4.2
+982.7 5.2
+983.7 13.0
+984.7 6.6
+986.0 32.7
+986.6 147.5
+988.7 2.3
+989.4 10.8
+991.2 8.0
+993.6 4.5
+994.5 7.0
+995.6 2.8
+997.3 1.8
+998.3 5.0
+999.3 1.9
+1000.1 1.7
+1001.7 5.7
+1003.4 26.9
+1006.2 4.6
+1008.6 12.7
+1009.5 20.3
+1011.6 2.8
+1012.4 7.1
+1013.5 3.6
+1014.6 13.2
+1021.1 23.9
+1022.0 24.3
+1023.4 6.7
+1025.1 9.1
+1026.6 10.9
+1027.7 24.4
+1028.5 11.2
+1029.4 13.1
+1030.4 16.6
+1031.3 7.6
+1033.6 1.6
+1037.4 3.1
+1038.5 32.0
+1039.5 58.2
+1040.3 2.9
+1041.2 8.7
+1042.1 13.1
+1042.9 2.7
+1043.5 4.9
+1044.9 16.2
+1047.0 6.6
+1048.0 14.1
+1048.6 1.4
+1051.5 1.8
+1056.0 26.6
+1056.6 68.5
+1057.6 53.7
+1058.8 6.7
+1059.5 10.2
+1060.5 19.9
+1064.6 3.2
+1065.9 23.4
+1066.5 12.0
+1067.4 8.0
+1069.6 3.2
+1071.3 11.1
+1072.4 3.9
+1074.5 63.8
+1075.9 5.4
+1078.6 2.3
+1081.1 3.0
+1082.4 7.5
+1083.5 31.3
+1084.6 13.3
+1085.7 8.5
+1086.5 5.7
+1091.0 5.7
+1093.5 4.1
+1094.5 5.3
+1095.9 19.6
+1096.6 5.0
+1097.5 31.7
+1098.6 9.9
+1100.8 8.3
+1101.6 7.3
+1102.5 17.1
+1103.7 10.1
+1110.4 4.7
+1111.2 11.3
+1112.5 15.0
+1113.6 6.0
+1115.7 67.4
+1116.7 5.3
+1117.4 7.5
+1119.8 12.4
+1120.6 23.2
+1121.6 7.9
+1126.7 3.4
+1127.5 9.8
+1128.4 11.3
+1129.5 7.9
+1132.0 1.9
+1133.8 4.1
+1134.6 2.0
+1137.7 31.5
+1138.6 71.1
+1139.4 6.1
+1143.0 0.9
+1145.3 6.4
+1145.9 4.9
+1149.7 1.8
+1151.6 3.9
+1152.6 10.4
+1155.6 161.6
+1156.6 117.5
+1159.4 2.7
+1160.7 3.0
+1165.6 2.8
+1168.7 6.0
+1169.5 1.2
+1173.6 135.1
+1177.1 11.1
+1178.4 12.9
+1184.4 4.7
+1185.5 2.6
+1186.9 5.6
+1189.7 3.0
+1192.4 3.3
+1194.5 29.8
+1195.5 42.8
+1196.3 10.9
+1196.9 5.2
+1197.8 2.8
+1199.5 1.6
+1202.5 9.8
+1205.6 2.4
+1206.8 3.4
+1208.3 3.3
+1209.2 5.9
+1212.6 64.1
+1213.4 73.8
+1215.4 14.1
+1226.5 10.2
+1227.9 6.7
+1228.6 72.7
+1229.5 5.7
+1230.6 128.8
+1241.1 8.7
+1241.7 12.6
+1245.4 8.9
+1256.6 3.0
+1262.4 1.0
+1268.8 5.6
+1281.7 7.9
+1290.3 12.1
+1291.6 7.5
+1298.5 9.8
+1299.8 3.9
+1307.8 60.1
+1308.6 52.4
+1309.7 3.9
+1323.7 1.2
+1325.8 79.7
+1326.5 75.3
+1327.1 7.1
+1343.5 91.9
+1356.4 2.0
+1357.6 13.0
+1360.6 8.6
+1361.5 11.0
+1371.9 1.9
+1373.8 5.9
+1375.6 50.3
+1383.8 3.2
+1385.5 4.8
+1398.8 5.4
+1416.7 3.8
+1425.7 5.1
+1427.5 11.2
+1428.6 9.1
+1432.5 3.2
+1436.6 5.6
+1445.7 66.5
+1453.5 17.5
+1454.5 80.0
+1455.5 110.0
+1456.3 3.5
+1457.0 11.8
+1471.9 425.8
+1472.8 1185.9
+S	23	23	805.00
+I	ID	229
+I	RTime	11.3068
+Z	1	805.00
+237.3 3.5
+254.9 2.0
+270.1 1.5
+273.6 4.5
+275.3 0.8
+276.4 1.2
+285.3 0.8
+300.3 4.6
+310.2 0.8
+332.1 3.2
+338.3 1.1
+339.2 3.2
+343.1 1.6
+354.4 6.9
+359.2 3.2
+364.1 1.1
+372.4 2.0
+377.2 3.2
+381.4 10.3
+382.3 1.8
+383.0 0.8
+386.3 1.1
+387.0 1.6
+388.3 2.5
+389.4 1.6
+395.3 6.9
+403.5 5.0
+409.0 1.6
+413.4 1.1
+416.3 1.2
+417.1 2.2
+427.0 2.5
+429.7 1.8
+431.5 1.2
+436.3 2.5
+438.1 4.1
+439.4 2.2
+441.8 2.2
+450.4 2.5
+452.4 2.0
+453.1 2.7
+470.6 2.4
+471.4 1.6
+472.5 1.2
+474.3 3.5
+479.6 1.1
+480.3 6.0
+482.0 5.8
+484.4 1.1
+485.2 2.2
+486.2 10.0
+488.1 2.5
+489.2 4.0
+490.5 2.7
+494.3 4.4
+496.0 1.6
+498.3 4.4
+502.2 7.5
+503.1 1.8
+511.4 3.5
+512.2 4.3
+513.2 2.2
+516.3 2.0
+522.9 3.5
+527.7 2.7
+529.2 2.9
+530.1 10.8
+531.1 4.6
+534.2 4.0
+536.3 5.0
+537.6 2.5
+539.4 1.2
+541.3 2.5
+548.3 7.0
+549.4 1.1
+550.4 6.5
+552.6 0.8
+556.3 2.0
+568.3 5.5
+569.2 2.4
+570.3 0.8
+575.9 3.0
+585.4 1.0
+588.0 4.9
+589.0 4.5
+589.8 5.1
+590.5 15.5
+591.4 4.0
+592.6 3.7
+610.4 3.2
+616.2 2.5
+617.7 1.2
+622.5 3.2
+629.3 2.7
+635.5 1.7
+638.4 2.2
+640.1 1.3
+644.0 2.4
+647.4 3.4
+654.5 2.2
+658.1 7.0
+659.4 2.5
+664.5 1.6
+669.3 1.5
+670.9 3.9
+673.4 5.0
+675.7 1.2
+676.3 2.0
+686.3 1.3
+696.0 1.8
+699.4 3.7
+700.4 4.4
+705.2 3.7
+706.4 3.9
+713.9 3.7
+719.7 1.7
+724.4 0.8
+731.4 10.1
+735.5 1.7
+740.4 2.0
+751.1 2.2
+752.7 5.5
+756.7 1.3
+760.5 5.4
+767.5 2.0
+773.0 1.3
+773.6 2.2
+786.8 40.7
+787.5 13.0
+788.5 5.0
+841.3 1.7
+955.5 2.5
+1000.8 3.7
+1024.5 2.5
+1041.8 2.7
+1138.6 1.7
+1249.6 2.2
+1316.4 6.5
+S	24	24	830.62
+I	ID	75
+I	RTime	3.4651
+Z	3	2489.84
+398.0 1.5
+410.7 2.5
+428.2 3.0
+446.2 8.6
+474.2 3.2
+497.3 5.0
+557.4 2.2
+568.3 1.7
+570.1 3.2
+582.3 1.8
+587.8 1.3
+613.6 12.0
+625.8 5.0
+629.3 13.5
+629.9 2.0
+632.3 5.3
+637.3 2.0
+655.6 2.2
+666.9 2.4
+677.1 12.8
+689.6 11.1
+697.6 17.7
+702.2 3.2
+719.5 38.2
+723.3 1.7
+725.3 7.0
+736.8 22.7
+753.7 3.5
+758.8 39.4
+764.8 7.1
+776.9 2.7
+778.9 38.2
+779.8 26.2
+783.7 819.0
+784.6 6.3
+785.4 2.7
+786.1 2.0
+788.5 7.8
+791.0 11.0
+791.7 6.8
+792.6 1.2
+793.7 11.6
+797.2 14.6
+799.1 5.1
+802.8 8.3
+804.3 3.7
+807.6 4.0
+808.9 3.7
+811.8 3.2
+812.8 6.8
+814.9 12.6
+858.3 4.6
+877.6 2.5
+883.3 22.2
+896.6 4.4
+901.8 19.5
+911.4 2.9
+921.5 13.0
+932.0 4.0
+953.2 8.3
+958.7 129.3
+959.5 18.2
+972.4 4.5
+982.1 6.3
+983.1 3.2
+987.5 15.1
+1006.5 13.6
+1007.2 4.1
+1009.2 4.0
+1024.7 2.4
+1033.3 7.0
+1038.4 20.0
+1039.3 9.6
+1042.8 3.4
+1044.5 113.5
+1045.5 13.0
+1061.8 3.7
+1116.7 5.4
+1168.6 1.6
+1186.9 3.9
+1207.0 3.0
+1301.5 4.5
+1388.4 3.2
+1419.0 1.5
+1437.8 1.2
+1712.7 1.7
+S	25	25	745.55
+Z	2	1490.09
+217.0 7.3
+226.2 4.1
+230.2 11.5
+234.2 3.2
+235.2 12.9
+237.3 4.9
+241.1 12.2
+244.9 45.1
+246.2 34.5
+252.3 6.4
+254.1 29.7
+254.9 15.0
+257.9 6.3
+259.3 11.1
+260.4 67.5
+261.1 33.1
+261.9 67.0
+265.9 17.6
+270.3 23.3
+271.0 13.9
+274.2 3.9
+278.3 9.5
+281.2 6.4
+282.3 32.5
+285.3 2.8
+288.5 18.1
+290.1 7.4
+296.2 33.8
+297.2 26.7
+301.2 5.1
+306.1 6.0
+312.3 7.2
+313.2 10.5
+316.0 22.1
+317.4 372.3
+320.2 54.4
+321.2 8.2
+322.2 13.7
+325.9 8.9
+327.1 22.3
+329.3 46.7
+330.3 12.0
+331.7 43.4
+332.4 95.4
+333.3 20.6
+340.2 4.8
+343.2 20.3
+344.2 16.4
+345.1 18.1
+346.2 12.3
+347.4 11.1
+354.0 2.9
+355.1 17.0
+356.4 43.0
+357.2 222.0
+358.2 87.5
+359.3 24.0
+361.3 9.6
+363.3 20.9
+367.5 37.6
+370.4 20.1
+375.3 378.0
+376.0 7.7
+379.3 4.1
+384.2 16.4
+385.3 7.3
+392.4 4.8
+393.4 7.9
+396.3 24.5
+397.3 43.6
+398.4 4.5
+400.2 18.6
+402.4 24.4
+403.3 8.4
+408.3 7.9
+409.2 13.0
+412.5 37.6
+414.3 4.6
+416.4 155.2
+417.5 24.3
+420.1 15.8
+421.3 17.6
+422.4 20.0
+423.4 27.4
+424.3 53.2
+425.4 6.3
+426.2 29.4
+428.7 6.4
+430.4 29.8
+431.2 24.9
+438.2 5.8
+439.0 23.0
+442.4 58.4
+444.0 53.0
+445.4 123.4
+446.3 60.2
+447.8 11.3
+448.5 14.6
+452.6 16.4
+453.2 20.9
+454.5 2.7
+456.0 30.2
+457.4 28.5
+459.2 47.5
+462.0 8.6
+463.6 33.6
+466.3 39.0
+467.0 30.4
+467.9 26.6
+470.0 55.3
+470.7 9.3
+471.3 5.1
+473.3 13.8
+474.3 48.2
+476.2 10.2
+477.7 37.6
+482.6 18.4
+483.6 38.7
+485.2 13.1
+487.3 48.0
+490.4 8.3
+492.3 19.5
+493.1 32.8
+497.5 18.8
+499.4 13.5
+500.5 29.2
+501.5 21.7
+502.2 15.2
+504.2 302.7
+505.3 29.5
+508.4 8.3
+509.3 20.8
+510.7 110.4
+511.6 4.7
+512.4 10.7
+513.0 15.8
+515.1 28.0
+516.7 30.7
+518.5 11.4
+521.4 121.0
+523.3 7.7
+525.5 22.0
+526.3 62.8
+527.3 65.1
+529.5 51.2
+531.1 42.7
+532.6 45.8
+533.4 2.8
+534.3 40.8
+534.9 57.2
+535.5 2.4
+540.6 45.1
+542.6 10.1
+544.4 362.0
+545.4 48.3
+548.2 5.2
+551.1 2.3
+552.8 12.6
+553.4 99.7
+554.3 24.7
+556.5 68.9
+557.3 28.5
+558.7 29.8
+560.1 16.0
+561.6 2.2
+562.5 14.9
+563.7 5.5
+565.6 26.2
+567.8 10.8
+568.5 14.9
+569.7 28.0
+570.4 77.3
+571.5 12.8
+572.6 8.4
+576.4 22.4
+577.9 156.0
+578.7 17.9
+580.1 33.4
+581.0 46.4
+582.2 108.1
+584.4 34.7
+585.4 30.4
+586.4 12.1
+587.2 12.7
+588.3 59.4
+589.3 60.5
+591.2 9.1
+592.4 63.0
+593.2 30.5
+594.4 63.6
+595.5 6.4
+596.5 29.1
+597.5 39.0
+598.3 139.3
+600.5 78.8
+601.8 38.4
+604.5 37.2
+605.4 104.0
+606.2 46.2
+606.9 66.1
+608.9 39.7
+609.7 23.5
+610.4 25.5
+611.1 25.2
+613.4 68.6
+614.1 45.2
+615.3 96.2
+616.3 21.5
+617.8 91.6
+619.8 48.1
+622.3 7.0
+623.3 5.9
+624.3 47.4
+627.8 54.3
+628.9 19.4
+630.3 107.4
+631.5 39.7
+632.5 9.2
+633.5 59.4
+634.5 40.4
+637.2 14.2
+640.4 23.6
+641.3 249.5
+642.3 38.2
+643.6 19.9
+644.5 60.6
+645.6 13.5
+646.6 114.0
+647.5 17.9
+648.4 59.7
+649.5 10.7
+652.2 83.9
+655.6 7.9
+657.5 587.2
+658.6 9.2
+659.5 7.0
+660.4 12.9
+662.9 39.2
+663.6 43.3
+664.3 22.4
+666.5 52.4
+667.5 13.5
+668.4 202.7
+669.2 19.0
+670.6 21.7
+671.7 64.7
+672.4 117.4
+673.9 204.8
+674.9 21.9
+676.1 34.6
+678.0 50.6
+681.7 28.3
+682.4 93.2
+683.1 36.8
+684.2 21.6
+685.5 181.7
+686.3 496.8
+687.5 104.6
+688.2 56.1
+689.5 27.1
+691.3 56.6
+693.4 138.1
+694.4 49.1
+695.7 15.7
+697.8 67.6
+698.5 12.2
+700.0 133.1
+700.9 79.1
+701.8 22.3
+702.8 82.0
+704.3 554.6
+705.3 61.1
+706.0 762.7
+707.0 46.0
+707.7 2.3
+709.7 84.9
+710.3 181.2
+711.4 429.4
+712.4 101.4
+713.7 99.2
+714.9 106.7
+716.5 213.5
+717.7 132.5
+719.1 518.0
+720.3 400.3
+721.3 296.7
+722.0 151.3
+722.7 34.0
+724.2 265.0
+725.2 408.8
+726.0 247.4
+727.3 283.2
+728.2 407.5
+729.4 119.5
+731.0 197.8
+731.8 62.8
+732.6 311.7
+733.8 250.0
+735.8 573.3
+736.5 284.0
+737.4 75.9
+738.4 2.6
+750.5 48.2
+751.4 86.1
+755.7 8.9
+761.3 40.9
+762.1 16.0
+763.0 56.4
+764.5 156.7
+765.5 23.8
+766.3 30.8
+768.0 124.2
+768.8 35.5
+769.6 28.3
+770.4 5.0
+771.9 23.1
+772.9 81.4
+773.6 16.3
+774.7 4.4
+775.5 64.6
+777.5 562.9
+778.5 337.9
+779.4 84.8
+782.1 21.6
+783.3 58.2
+785.1 32.1
+786.5 1071.4
+787.3 70.0
+788.3 4.9
+789.4 75.3
+790.9 25.3
+793.6 52.6
+795.0 40.9
+796.3 49.2
+797.3 28.4
+798.1 107.5
+799.7 193.8
+800.8 90.1
+802.6 32.3
+803.6 25.9
+804.4 37.7
+806.5 17.3
+808.2 45.7
+809.1 78.6
+809.8 65.9
+813.3 19.1
+815.3 218.8
+816.3 93.4
+817.8 92.2
+820.7 13.8
+823.8 182.6
+824.6 38.5
+825.9 112.3
+827.2 7.0
+828.0 115.1
+828.9 40.1
+830.8 45.7
+833.0 236.6
+833.9 1.8
+835.1 55.1
+835.9 18.5
+838.7 80.2
+840.1 25.3
+843.3 38.1
+845.7 37.1
+847.6 7.9
+848.5 180.7
+849.5 20.4
+850.3 59.0
+851.1 18.7
+852.4 286.2
+853.5 95.4
+855.5 108.1
+857.2 52.2
+857.8 52.3
+860.1 30.7
+861.8 121.2
+864.0 153.2
+865.0 118.8
+865.8 73.6
+867.0 29.3
+867.8 30.2
+868.6 69.3
+869.7 46.1
+871.7 46.0
+873.4 55.5
+874.8 59.4
+875.9 54.0
+877.3 113.6
+877.9 13.9
+880.1 40.2
+881.0 113.2
+881.7 112.0
+882.7 20.7
+883.7 154.9
+885.5 271.5
+886.5 82.9
+889.1 101.4
+890.6 303.1
+891.6 144.9
+892.6 35.7
+893.7 52.1
+894.4 116.9
+896.7 127.1
+897.6 12.4
+898.3 100.5
+899.4 68.6
+900.6 183.6
+901.6 15.1
+902.4 83.8
+903.2 63.5
+904.2 76.2
+905.7 17.3
+908.3 93.2
+909.0 67.6
+911.6 139.0
+912.4 16.7
+913.4 110.2
+915.6 49.8
+916.4 24.9
+919.1 12.7
+921.2 13.2
+921.8 58.3
+922.5 54.4
+924.4 13.1
+925.6 14.0
+928.5 328.9
+929.6 99.1
+930.7 144.5
+931.5 50.3
+932.6 14.5
+935.7 31.0
+938.0 68.2
+939.5 2.7
+940.3 89.9
+941.3 37.4
+942.6 61.3
+943.4 5.0
+944.3 36.6
+945.7 69.4
+946.5 302.3
+947.8 286.4
+949.1 82.7
+950.1 84.5
+951.2 132.7
+952.7 309.3
+953.8 233.3
+954.7 73.5
+955.9 33.3
+957.1 75.8
+958.1 91.4
+959.6 134.0
+960.9 26.9
+961.9 130.3
+962.7 31.7
+963.5 19.9
+965.1 101.1
+966.2 101.1
+968.0 31.5
+969.3 80.1
+970.6 72.2
+976.1 49.1
+976.7 29.0
+978.1 60.2
+980.0 32.3
+983.1 68.4
+984.4 41.9
+985.4 38.5
+986.6 563.5
+987.8 136.3
+988.7 40.4
+989.5 24.6
+990.4 14.4
+991.4 75.5
+993.3 20.2
+994.7 4.5
+996.5 60.7
+997.4 68.5
+998.3 41.7
+999.4 16.0
+1000.2 32.0
+1000.8 23.9
+1002.0 26.1
+1003.1 125.8
+1004.9 13.6
+1007.2 60.4
+1009.3 98.5
+1010.1 139.5
+1011.2 53.9
+1012.4 77.2
+1013.9 37.1
+1015.6 94.8
+1016.5 73.4
+1018.5 337.8
+1019.4 75.1
+1020.3 55.4
+1021.8 17.4
+1022.5 54.3
+1025.2 37.6
+1026.8 11.4
+1027.4 34.5
+1029.5 139.5
+1030.4 28.4
+1031.6 97.8
+1034.3 38.7
+1040.0 35.5
+1041.4 26.2
+1043.2 86.3
+1044.0 10.9
+1044.7 110.1
+1045.5 20.2
+1047.7 105.5
+1048.4 20.4
+1049.5 61.6
+1050.3 44.1
+1051.0 13.7
+1052.4 21.3
+1054.7 30.7
+1056.4 237.3
+1057.7 1048.3
+1058.6 98.7
+1062.5 75.5
+1063.8 87.3
+1065.8 31.7
+1066.8 52.7
+1067.7 194.9
+1068.6 64.3
+1069.6 134.8
+1070.6 33.3
+1071.4 25.5
+1074.4 417.2
+1075.6 104.4
+1077.7 30.5
+1081.8 74.7
+1084.7 36.2
+1085.6 14.4
+1086.8 3.3
+1095.4 92.8
+1096.0 8.8
+1096.7 16.2
+1097.7 99.8
+1098.5 79.1
+1100.7 6.7
+1103.0 49.6
+1104.5 36.1
+1106.3 23.0
+1110.8 19.9
+1113.0 37.2
+1113.7 66.1
+1114.5 42.1
+1115.6 394.2
+1116.6 57.8
+1118.2 72.2
+1123.1 40.6
+1125.4 11.4
+1128.8 18.8
+1131.1 124.3
+1131.7 11.9
+1133.2 64.8
+1138.5 11.1
+1139.7 49.0
+1141.5 8.6
+1142.6 33.8
+1148.1 22.4
+1148.8 4.4
+1154.0 78.4
+1154.8 119.8
+1155.8 176.0
+1156.5 116.8
+1157.8 81.3
+1158.9 48.8
+1159.9 45.6
+1162.7 19.4
+1167.3 4.8
+1172.4 6.3
+1173.5 526.1
+1174.5 35.2
+1176.4 3.5
+1180.4 48.6
+1181.7 40.0
+1187.8 9.8
+1191.7 28.7
+1199.6 13.1
+1202.7 38.3
+1207.4 65.6
+1208.9 18.8
+1210.6 85.3
+1211.5 76.9
+1212.3 28.8
+1214.5 5.1
+1227.7 93.4
+1228.7 358.5
+1229.4 35.1
+1230.4 383.2
+1231.1 59.3
+1231.9 58.7
+1235.6 79.8
+1238.7 25.5
+1242.7 22.1
+1243.8 29.1
+1247.6 24.3
+1252.7 29.5
+1254.6 12.1
+1255.8 5.9
+1257.8 26.6
+1260.2 14.9
+1260.9 8.9
+1263.3 32.6
+1274.8 21.3
+1276.3 5.4
+1277.3 3.9
+1280.7 31.0
+1284.5 22.8
+1287.7 11.8
+1293.1 111.2
+1293.9 9.7
+1306.9 20.4
+1308.9 27.1
+1325.6 84.2
+1326.7 32.1
+1327.6 10.2
+1330.9 19.0
+1336.9 24.9
+1337.5 29.4
+1341.6 104.2
+1342.8 150.6
+1343.6 355.9
+1344.5 119.6
+1369.6 118.4
+1370.5 220.5
+1371.6 84.4
+1372.5 11.8
+1384.8 14.6
+1386.7 13.8
+1388.9 19.5
+1426.2 3.3
+1437.8 31.8
+1450.9 11.2
+1471.9 18.6
+1478.4 13.6
+S	26	26	692.38
+Z	2	1383.75
+199.2 33.2
+200.2 21.3
+202.3 150.5
+204.3 20.9
+208.2 37.4
+209.2 46.9
+214.3 29.8
+215.2 50.9
+216.2 42.0
+217.2 295.2
+218.1 61.8
+224.2 84.9
+226.0 257.7
+226.7 32.4
+228.3 57.9
+229.1 28.4
+231.2 71.6
+235.2 17.5
+237.0 74.7
+240.5 81.2
+241.3 23.7
+242.3 217.7
+243.5 57.8
+244.3 301.7
+245.3 137.7
+246.4 47.1
+247.3 93.0
+251.4 32.2
+252.5 40.7
+254.3 19.7
+256.2 27.8
+257.4 60.7
+259.2 43.3
+260.3 158.5
+261.3 265.6
+262.3 2054.6
+263.2 143.7
+264.2 38.6
+270.1 99.4
+275.4 121.1
+277.2 69.4
+279.7 19.2
+283.4 18.8
+284.3 57.4
+287.4 17.7
+288.4 116.0
+289.3 83.5
+290.3 12.6
+292.2 65.0
+299.1 101.5
+300.2 104.3
+302.5 105.2
+304.5 19.0
+305.3 20.5
+308.1 96.3
+311.2 31.3
+313.1 30.3
+314.5 89.0
+315.3 256.7
+316.5 20.5
+317.3 95.4
+318.2 33.3
+319.1 63.4
+320.4 57.1
+322.4 12.9
+324.4 29.2
+325.4 50.1
+326.1 204.3
+327.3 80.6
+329.3 158.9
+331.0 44.5
+332.2 95.2
+333.2 26.7
+334.2 56.5
+336.0 74.8
+337.3 52.6
+338.3 69.1
+339.2 49.4
+341.5 28.1
+343.4 282.0
+345.4 25.8
+346.4 74.0
+348.3 24.7
+349.3 44.9
+350.6 35.8
+352.4 98.1
+353.3 209.3
+354.4 253.5
+355.3 63.7
+356.3 41.4
+359.1 56.7
+360.2 142.9
+361.4 91.1
+362.5 55.3
+363.6 117.0
+364.4 305.0
+365.5 111.3
+366.6 52.2
+367.7 110.3
+369.6 19.2
+371.4 1132.1
+372.3 790.3
+373.4 1449.6
+374.2 227.8
+374.9 26.0
+376.4 47.4
+377.5 17.4
+378.4 52.9
+382.3 65.1
+383.2 61.0
+389.2 866.0
+390.4 2977.9
+391.7 227.6
+397.6 32.5
+400.7 108.7
+401.5 70.4
+402.8 26.8
+404.1 19.7
+405.3 230.9
+407.5 58.3
+408.2 32.8
+409.6 27.1
+410.4 61.1
+411.5 13.4
+412.2 86.0
+413.5 39.5
+418.5 41.6
+419.7 27.2
+420.4 134.2
+422.6 25.9
+423.9 60.7
+426.4 323.7
+427.4 123.8
+429.4 204.4
+432.6 185.1
+433.5 108.3
+435.4 78.4
+439.5 73.0
+441.3 25.2
+442.6 71.4
+443.4 113.4
+444.4 439.4
+445.3 170.9
+446.3 217.7
+447.4 428.9
+448.2 156.1
+448.9 44.4
+449.6 135.7
+450.5 52.3
+453.4 61.2
+454.2 82.3
+455.2 95.0
+456.6 53.8
+458.4 118.3
+459.5 66.8
+461.5 13220.4
+462.5 2236.7
+463.5 219.9
+464.4 68.1
+465.5 74.4
+466.2 31.3
+467.3 59.6
+468.7 113.8
+470.5 182.9
+471.7 163.9
+472.6 239.3
+473.5 97.6
+474.7 129.2
+475.4 37.2
+476.2 272.6
+477.5 86.6
+479.4 459.0
+481.4 79.3
+483.6 103.4
+486.2 214.0
+487.4 101.6
+489.7 238.5
+490.5 18.7
+491.4 266.9
+493.5 39.2
+496.5 85.7
+497.3 22.7
+498.6 429.6
+500.3 717.0
+501.6 60.1
+502.8 70.6
+503.6 58.3
+504.4 29.2
+505.9 50.8
+507.4 57.8
+508.6 16.7
+509.6 20.7
+510.4 139.6
+511.8 223.4
+512.7 62.4
+513.3 14.5
+514.2 55.9
+514.8 111.6
+517.3 171.1
+518.4 1610.4
+519.5 199.8
+520.4 56.2
+521.6 53.1
+522.3 26.6
+523.2 33.9
+524.6 21.9
+525.5 28.8
+527.3 157.9
+528.2 14.4
+529.6 24.8
+530.3 92.8
+531.5 358.0
+532.1 150.2
+533.6 169.8
+534.7 181.5
+536.3 1259.0
+537.5 436.6
+539.4 266.6
+541.7 145.1
+542.5 85.4
+544.2 64.6
+545.6 108.9
+546.5 132.7
+547.5 170.8
+548.5 118.9
+549.4 78.4
+550.4 212.0
+551.7 251.6
+553.5 111.9
+556.6 205.8
+557.6 341.2
+558.4 311.4
+559.4 189.3
+560.1 56.4
+560.9 23.3
+561.6 107.8
+562.5 260.8
+564.9 67.0
+565.7 72.4
+566.4 397.4
+567.2 19.0
+568.5 59.0
+569.9 76.4
+570.7 198.8
+571.6 206.1
+574.5 5603.9
+575.4 603.9
+576.2 260.1
+577.1 164.5
+578.1 41.7
+578.9 119.4
+579.6 146.7
+580.6 140.4
+581.5 54.3
+583.5 384.0
+584.4 620.3
+585.6 293.7
+588.6 479.3
+589.4 58.3
+590.7 158.7
+591.6 50.7
+593.3 277.2
+594.5 32.0
+597.0 2684.3
+597.7 2456.7
+599.2 478.1
+600.5 204.9
+601.6 76.0
+602.5 40.8
+603.6 51.8
+604.8 193.6
+606.2 9517.2
+607.2 306.8
+608.2 189.5
+610.1 98.3
+610.7 248.5
+611.6 81.9
+612.3 28.8
+613.9 399.5
+615.4 261.0
+616.1 168.0
+617.4 204.4
+618.4 393.3
+619.4 323.5
+620.3 143.0
+621.3 142.5
+622.5 20.0
+623.1 51.5
+624.2 26.8
+624.9 573.9
+627.8 79.3
+628.7 214.0
+630.6 35.5
+631.5 92.2
+632.5 168.6
+633.5 587.4
+634.5 377.2
+635.4 123.5
+636.6 221.0
+637.5 344.4
+638.3 112.0
+639.9 365.6
+640.9 12.7
+641.5 278.4
+642.2 515.9
+643.3 117.9
+644.6 319.3
+645.6 2026.0
+646.5 669.5
+647.7 281.7
+649.1 146.4
+649.7 15.0
+650.8 193.6
+651.5 1939.8
+652.4 805.2
+653.2 496.0
+654.9 119.6
+655.6 38.0
+656.7 122.6
+657.3 17.6
+658.9 159.5
+659.8 382.9
+660.6 280.9
+661.3 1017.7
+662.3 286.9
+664.2 100.2
+665.5 303.5
+666.2 571.7
+667.3 41.5
+668.4 195.0
+669.4 1013.5
+670.6 566.8
+672.0 1126.4
+674.1 2914.0
+674.8 2798.2
+675.7 580.0
+676.9 160.9
+677.9 302.1
+678.7 482.8
+679.7 101.9
+680.9 1093.5
+681.9 2826.7
+683.2 18998.4
+684.4 997.6
+685.1 22.2
+686.2 36.6
+694.6 35.3
+696.2 69.0
+697.2 27.0
+698.4 87.4
+702.6 643.3
+703.4 222.8
+704.5 210.7
+706.5 103.0
+707.3 23.9
+708.5 146.0
+711.7 63.8
+713.5 35.4
+714.4 222.8
+715.4 17.1
+716.4 102.4
+717.3 16.0
+720.5 463.9
+721.4 266.5
+723.8 109.4
+726.6 17.3
+728.1 945.5
+728.8 95.7
+730.5 42.4
+731.7 307.6
+732.6 4516.1
+733.6 1358.7
+734.6 422.0
+735.7 134.8
+736.8 42.1
+738.4 576.2
+739.4 461.5
+740.5 48.1
+742.9 39.6
+745.6 108.2
+746.3 76.5
+747.7 97.0
+749.9 186.8
+750.6 812.8
+751.5 197.4
+752.5 122.1
+753.2 78.6
+754.4 9.4
+755.5 310.0
+756.4 160.2
+757.5 139.2
+758.2 107.8
+759.5 120.8
+763.6 19.5
+765.9 68.4
+768.4 103.9
+770.5 25.7
+771.6 119.2
+773.3 998.8
+774.4 504.8
+775.6 192.4
+776.7 62.8
+777.9 41.1
+778.8 37.5
+779.6 10.9
+781.4 16.3
+782.7 135.4
+783.7 93.0
+784.7 247.9
+786.5 237.2
+787.6 133.3
+788.7 18.0
+790.4 32.2
+791.4 1907.2
+792.4 1448.3
+798.1 201.5
+798.8 90.6
+799.7 69.7
+801.2 50.8
+802.6 89.0
+803.5 204.8
+804.5 70.0
+807.7 318.7
+809.4 2201.9
+810.5 752.4
+811.5 15.4
+812.4 180.7
+815.6 48.6
+816.6 65.5
+818.6 55.6
+819.7 32.1
+821.1 201.3
+821.8 255.6
+823.1 89.1
+825.3 142.2
+827.8 30.4
+829.0 60.3
+829.8 317.0
+831.6 118.2
+832.9 27.2
+833.7 21.7
+834.6 55.8
+835.8 170.7
+836.6 54.2
+837.9 77.3
+839.8 15.3
+842.4 45.2
+843.6 101.2
+844.6 316.3
+845.2 117.7
+847.1 499.9
+847.7 5861.0
+848.7 2049.5
+849.7 282.2
+851.5 75.2
+852.7 109.5
+854.3 115.8
+855.9 234.9
+858.6 123.8
+859.8 77.6
+860.7 239.9
+861.5 35.6
+862.5 194.0
+868.5 34.7
+869.5 226.5
+870.4 39.6
+871.7 53.0
+872.3 83.5
+873.7 743.2
+875.6 47.8
+877.5 222.0
+878.3 198.1
+879.0 184.4
+880.3 155.9
+881.7 110.0
+886.4 1432.0
+887.0 15.9
+887.6 736.2
+888.4 16.5
+890.9 97.9
+891.8 107.7
+893.7 66.0
+894.3 51.8
+895.8 138.1
+897.8 134.7
+899.9 113.4
+900.7 47.1
+902.1 123.4
+903.9 119.6
+904.5 4122.5
+905.5 1092.7
+906.6 361.8
+908.1 539.0
+908.8 51.0
+909.4 69.3
+910.0 67.3
+910.8 62.7
+913.5 95.6
+915.6 453.1
+917.3 3033.1
+918.7 34.9
+919.6 50.1
+920.7 70.6
+921.8 210.1
+922.5 5217.3
+923.5 2416.5
+924.8 297.4
+925.6 79.0
+926.6 100.8
+927.8 15.7
+928.4 51.1
+929.4 51.6
+930.9 213.8
+931.8 333.4
+933.5 289.0
+934.8 103.1
+935.9 106.0
+937.0 134.3
+937.8 156.4
+938.6 176.8
+939.8 509.0
+940.7 94.8
+941.6 21.6
+942.6 17.3
+944.9 128.0
+945.8 208.5
+946.9 155.3
+947.9 50.0
+948.5 24.7
+949.5 168.0
+950.8 56.2
+951.8 94.2
+953.8 20.9
+954.9 37.1
+957.7 781.4
+958.8 112.7
+959.8 47.2
+961.6 20.6
+964.1 16.7
+965.7 147.3
+969.2 143.3
+974.3 71.5
+975.5 1509.9
+976.6 790.5
+977.8 226.2
+978.8 211.2
+980.7 18.2
+981.7 157.2
+986.9 113.8
+988.4 58.6
+989.5 107.5
+990.2 21.8
+992.8 301.4
+993.6 2054.1
+994.7 9098.2
+995.8 3178.5
+996.9 330.9
+997.9 164.8
+998.8 20.9
+999.4 101.5
+1002.5 45.5
+1003.9 276.5
+1004.6 31.6
+1006.8 35.8
+1008.7 113.5
+1009.5 140.2
+1010.6 249.8
+1011.7 107.0
+1012.8 104.4
+1019.6 97.4
+1020.7 121.3
+1021.7 17.3
+1024.6 89.2
+1028.0 40.4
+1029.9 39.9
+1030.6 53.5
+1032.8 40.3
+1033.7 74.3
+1034.5 83.2
+1037.2 102.9
+1038.7 179.0
+1043.9 27.4
+1047.1 177.4
+1049.7 211.1
+1050.5 103.1
+1051.6 196.3
+1052.4 28.5
+1059.6 11.1
+1060.9 196.3
+1061.7 22.0
+1062.9 86.2
+1063.6 47.1
+1064.6 141.3
+1065.6 48.6
+1068.0 95.4
+1068.8 307.8
+1070.0 37.9
+1070.9 205.0
+1073.3 58.0
+1075.7 35.1
+1078.1 131.3
+1079.9 114.5
+1080.6 59.1
+1082.7 335.3
+1083.8 291.2
+1085.0 69.4
+1085.7 393.7
+1086.5 266.5
+1088.6 109.6
+1090.7 148.3
+1091.7 56.7
+1093.6 107.5
+1095.7 42.5
+1097.6 50.4
+1099.8 16.3
+1103.6 708.2
+1104.5 195.9
+1105.4 204.2
+1106.0 16.5
+1107.6 190.1
+1108.9 41.9
+1109.9 60.6
+1115.9 23.5
+1120.5 88.0
+1121.7 2597.0
+1122.8 1955.7
+1123.8 2421.1
+1124.9 1024.3
+1125.7 104.9
+1126.4 26.5
+1128.8 47.5
+1132.1 61.6
+1133.7 112.4
+1134.3 47.7
+1138.5 20.6
+1139.8 56.9
+1141.0 20.8
+1142.9 106.5
+1144.9 43.5
+1148.9 100.5
+1150.0 104.1
+1151.5 49.1
+1152.9 199.6
+1153.7 90.6
+1154.8 72.4
+1160.8 61.7
+1161.7 66.9
+1165.3 127.8
+1165.9 99.2
+1166.6 45.6
+1167.9 119.0
+1175.7 73.3
+1178.2 218.9
+1179.0 180.2
+1179.9 214.2
+1180.7 193.5
+1181.8 39.8
+1185.7 31.8
+1188.7 136.3
+1192.7 339.3
+1193.9 527.7
+1197.7 55.6
+1198.8 367.9
+1199.8 97.4
+1207.9 64.0
+1209.0 79.1
+1210.8 5928.8
+1211.8 3043.2
+1212.9 139.1
+1216.7 89.7
+1218.7 399.9
+1219.6 51.1
+1233.7 301.4
+1235.6 66.9
+1236.6 766.0
+1237.9 920.7
+1238.8 321.3
+1240.1 23.9
+1245.9 38.7
+1253.7 25.0
+1254.8 49.8
+1256.0 37.3
+1282.7 29.4
+1325.0 17.3
+1377.0 55.7
+1382.8 32.5
+S	27	27	732.55
+Z	2	1464.09
+209.3 26.2
+210.3 7.4
+215.1 7.3
+216.3 26.2
+220.3 29.1
+221.4 4.3
+226.2 240.6
+227.1 105.1
+228.4 28.9
+229.4 16.1
+231.3 14.9
+233.4 8.5
+234.2 25.2
+235.5 2.3
+238.2 133.0
+239.2 19.5
+240.2 22.1
+241.1 6.2
+244.2 584.4
+245.2 53.9
+246.2 18.5
+248.3 13.3
+249.3 3.4
+252.4 8.9
+254.0 4.8
+255.3 52.8
+256.3 13.9
+257.4 15.9
+258.8 9.3
+260.4 22.6
+261.4 27.7
+262.3 3.3
+263.2 7.1
+265.3 6.2
+266.3 3.7
+269.3 10.6
+270.3 31.2
+272.2 7.1
+273.5 7.9
+274.3 6.3
+275.3 3.1
+276.4 37.7
+277.5 15.2
+279.3 46.5
+280.4 9.5
+281.2 11.1
+282.2 13.4
+283.4 9.5
+284.2 47.5
+285.2 24.2
+286.2 26.5
+287.4 4.6
+288.5 27.3
+289.7 28.1
+290.5 7.9
+291.6 13.8
+294.4 169.4
+295.3 12.4
+296.5 8.1
+297.5 23.6
+298.4 17.2
+299.8 21.1
+300.4 16.3
+301.4 13.1
+302.4 5.1
+303.3 7.4
+304.4 14.2
+305.3 29.7
+306.5 22.6
+307.4 9.2
+308.4 95.0
+310.2 11.4
+311.2 22.1
+313.4 3.8
+315.3 37.4
+316.3 38.2
+317.4 2.9
+318.3 17.4
+319.4 25.4
+320.2 5.2
+323.2 5.2
+325.3 128.1
+326.3 129.3
+328.2 162.3
+329.3 58.1
+330.4 8.4
+331.5 5.8
+333.4 9.5
+334.3 9.1
+336.5 5.1
+339.2 17.0
+341.4 33.7
+343.3 1655.7
+344.3 139.3
+345.2 14.1
+347.5 4.7
+349.5 23.2
+350.6 15.4
+351.2 22.0
+352.6 2.5
+353.5 8.2
+354.9 21.1
+357.3 46.4
+358.3 40.4
+359.6 18.7
+360.8 18.2
+362.2 4.2
+363.2 18.6
+367.5 45.5
+369.2 55.7
+370.2 25.1
+371.0 16.8
+371.8 3.6
+372.6 24.7
+373.4 14.5
+374.4 32.2
+375.2 54.6
+376.0 21.7
+377.2 15.3
+379.3 10.1
+380.8 15.3
+381.5 27.3
+382.4 4.3
+383.6 23.5
+384.4 202.6
+385.5 13.1
+386.5 29.9
+387.7 5.8
+389.3 76.9
+390.5 31.0
+391.8 20.9
+392.5 49.4
+393.8 10.4
+394.5 3.7
+395.4 87.3
+396.3 32.3
+397.4 19.7
+398.3 17.1
+399.3 31.7
+400.5 44.6
+401.5 25.2
+402.4 36.1
+403.2 12.7
+404.0 4.1
+405.4 4.3
+407.5 519.4
+408.4 85.2
+409.4 26.9
+410.4 7.4
+412.4 151.3
+413.4 159.6
+414.5 54.4
+415.4 12.1
+416.5 15.4
+417.6 23.4
+418.4 9.4
+419.6 7.4
+420.5 36.9
+421.4 19.8
+423.5 45.1
+424.4 28.6
+425.6 41.8
+426.8 16.6
+427.5 17.9
+428.6 6.4
+429.5 27.6
+430.3 319.2
+431.5 260.0
+432.4 24.6
+433.5 8.0
+434.5 5.4
+435.5 17.2
+436.3 8.3
+437.6 12.8
+438.4 38.3
+439.4 14.7
+440.6 22.1
+441.3 145.3
+442.3 99.3
+443.3 23.6
+444.5 26.5
+447.3 13.0
+448.3 20.2
+449.5 13.4
+450.5 21.9
+451.4 37.2
+452.6 5.6
+453.4 22.9
+454.4 11.1
+455.3 44.2
+456.5 54.2
+457.4 22.4
+458.1 4.8
+459.1 5.1
+459.8 7.9
+462.6 12.2
+463.4 3.2
+464.7 13.7
+465.7 27.9
+466.5 157.9
+467.4 45.4
+468.6 16.0
+470.1 9.3
+471.4 42.4
+472.6 32.7
+473.5 13.6
+474.7 56.8
+475.6 17.4
+476.4 31.7
+477.4 25.8
+479.5 2.7
+480.7 43.2
+483.3 459.6
+484.3 257.2
+485.3 53.0
+488.2 397.7
+489.1 40.2
+490.4 53.3
+491.2 28.7
+492.6 22.5
+493.8 4.5
+496.6 25.7
+498.2 36.3
+499.1 29.3
+501.2 355.9
+502.4 35.3
+503.4 24.7
+504.3 11.8
+505.8 2.9
+507.0 38.3
+508.1 19.8
+509.6 4.4
+510.7 39.6
+511.6 30.0
+512.6 38.7
+513.8 23.3
+514.8 9.6
+515.4 137.3
+516.6 39.3
+517.5 6.6
+518.6 63.7
+520.4 211.0
+521.5 114.1
+522.2 27.1
+523.6 26.6
+524.4 25.1
+525.4 29.0
+526.2 36.7
+527.5 53.6
+528.8 16.3
+529.7 18.9
+530.9 17.8
+532.0 50.8
+533.0 44.4
+533.6 42.7
+534.4 14.8
+535.5 13.3
+536.5 760.7
+537.5 248.2
+538.5 114.9
+539.5 62.0
+540.4 23.5
+541.7 8.4
+542.6 62.8
+543.5 4.7
+544.6 14.8
+545.6 153.4
+546.6 97.3
+547.8 46.9
+548.8 7.8
+549.7 48.3
+550.6 47.3
+551.5 19.4
+552.5 50.7
+553.7 39.7
+554.4 1.8
+555.6 90.4
+556.4 127.9
+557.4 30.1
+559.2 35.2
+560.0 22.9
+561.1 11.8
+561.9 40.0
+562.7 4.1
+563.8 59.5
+565.0 33.9
+566.7 89.5
+567.8 96.0
+568.6 36.5
+569.5 88.6
+570.5 72.4
+572.2 50.2
+573.1 29.4
+574.3 43.2
+575.5 67.6
+577.1 36.0
+577.9 32.6
+578.9 85.4
+579.8 57.9
+580.6 26.3
+581.5 16.0
+582.7 6.4
+583.9 44.6
+584.6 101.2
+585.7 65.3
+586.6 20.2
+587.4 57.9
+588.5 35.8
+589.5 98.1
+590.5 15.5
+591.5 12.4
+592.6 32.9
+593.3 23.2
+594.5 30.3
+595.2 29.0
+596.7 51.7
+597.4 378.2
+598.5 62.0
+599.4 47.0
+600.8 16.8
+601.8 86.0
+602.6 136.5
+603.6 78.3
+604.4 90.4
+605.8 35.6
+607.5 56.5
+608.2 13.8
+609.1 38.7
+610.7 233.9
+611.5 8.8
+612.2 25.9
+613.2 6.5
+614.4 295.0
+615.4 1083.7
+616.5 205.5
+617.7 102.6
+618.7 131.7
+619.8 38.4
+620.5 26.2
+621.7 22.5
+622.7 51.8
+624.0 324.4
+624.7 424.6
+625.8 60.5
+626.8 53.1
+627.9 32.8
+628.7 14.4
+629.8 35.6
+630.4 24.9
+631.4 77.9
+632.4 1287.3
+633.5 295.1
+634.6 15.1
+635.3 33.0
+636.9 51.5
+638.0 61.6
+638.7 15.0
+640.3 35.9
+641.3 24.2
+642.4 39.5
+643.7 13.2
+644.4 29.8
+645.4 19.2
+646.6 52.1
+647.5 60.3
+648.6 38.5
+649.6 236.0
+650.5 35.5
+651.8 152.7
+652.6 106.1
+653.6 13.8
+654.3 14.2
+655.5 78.8
+656.2 83.0
+657.4 71.3
+658.3 12.0
+659.0 47.9
+659.8 17.5
+660.8 69.1
+662.0 47.4
+663.3 77.6
+664.0 15.6
+665.4 200.7
+666.5 202.1
+667.3 94.6
+668.4 62.4
+669.6 74.5
+670.7 80.7
+671.7 99.6
+672.7 35.8
+673.9 40.0
+675.3 97.8
+676.9 76.9
+678.0 87.5
+678.7 115.0
+679.8 98.6
+680.7 76.2
+681.9 112.3
+682.7 46.2
+683.6 129.8
+684.7 61.6
+685.7 56.2
+686.8 83.4
+687.6 65.4
+688.5 91.1
+689.3 31.5
+690.5 109.4
+691.8 66.9
+692.6 37.1
+693.4 71.0
+694.3 63.2
+695.1 134.4
+696.0 113.7
+696.7 202.6
+697.6 353.0
+698.7 127.5
+699.9 121.4
+700.8 123.8
+701.6 69.8
+702.8 72.4
+704.6 2411.3
+706.3 273.0
+707.6 100.0
+708.5 383.8
+709.4 166.9
+710.1 335.9
+711.2 360.4
+712.1 124.7
+713.3 338.7
+714.2 201.9
+714.9 399.8
+715.9 151.7
+716.6 248.5
+717.7 116.2
+718.9 120.9
+719.6 220.0
+720.6 129.2
+722.0 591.1
+723.0 950.1
+723.8 131.5
+725.1 17.1
+725.8 21.0
+726.8 10.5
+728.1 3.3
+731.8 4.7
+736.1 6.3
+736.8 15.8
+738.4 49.7
+739.6 10.1
+741.6 4.5
+742.6 23.5
+743.6 60.1
+744.4 18.0
+745.4 41.1
+746.3 49.7
+747.7 49.9
+748.7 60.1
+749.7 175.3
+751.6 42.2
+752.8 60.6
+753.6 77.3
+754.6 113.7
+755.7 67.0
+756.6 52.6
+757.7 7.9
+758.9 21.3
+760.1 47.4
+760.7 35.0
+761.7 32.6
+763.3 43.0
+764.0 30.6
+765.0 47.7
+765.6 582.9
+766.6 116.9
+767.6 46.4
+769.1 29.6
+770.3 57.0
+771.2 63.5
+772.7 43.6
+773.6 20.2
+774.9 26.8
+776.1 47.7
+777.3 76.1
+778.7 379.7
+779.7 172.5
+780.6 49.0
+781.7 2.4
+782.7 47.5
+783.9 62.4
+784.6 1.6
+785.7 24.0
+786.4 34.8
+787.4 82.3
+788.5 32.8
+789.7 19.6
+790.6 38.2
+791.4 110.0
+792.4 59.8
+793.5 85.7
+794.5 70.2
+795.5 225.8
+796.5 112.1
+797.6 24.9
+799.0 21.1
+799.9 32.4
+801.0 22.2
+801.9 7.2
+802.8 70.6
+803.7 52.5
+804.8 30.6
+806.1 224.4
+806.7 269.5
+807.3 253.2
+808.3 147.0
+809.4 6.0
+810.1 25.9
+810.8 73.2
+811.7 62.6
+812.7 88.6
+813.4 113.4
+814.8 82.2
+815.7 31.7
+816.8 40.6
+818.0 31.1
+818.7 18.8
+819.6 31.3
+821.6 64.9
+822.6 31.5
+823.6 81.1
+824.6 20.1
+825.6 65.3
+826.7 50.4
+828.2 34.5
+830.1 50.3
+831.7 3459.2
+832.8 1108.2
+834.1 16.0
+835.1 57.9
+836.6 74.3
+837.7 15.5
+838.8 28.2
+839.5 22.2
+840.1 14.6
+841.5 39.5
+843.0 889.3
+843.8 133.6
+844.4 57.8
+845.2 29.2
+846.5 36.7
+847.7 63.5
+849.0 54.4
+850.0 57.4
+851.4 41.4
+852.8 84.8
+853.7 40.2
+855.0 109.2
+855.6 80.2
+856.4 41.9
+857.5 94.2
+858.8 124.9
+859.7 56.0
+861.0 47.5
+861.8 130.9
+862.8 240.3
+863.8 227.0
+864.8 115.1
+866.1 76.1
+866.8 87.7
+867.9 43.0
+868.9 26.0
+869.7 22.4
+871.0 98.6
+872.0 16.7
+872.8 42.3
+873.9 16.5
+874.7 37.3
+875.8 115.0
+876.6 66.8
+878.6 203.1
+879.7 69.4
+880.5 145.8
+881.3 77.2
+881.9 60.0
+882.7 37.0
+883.5 44.1
+884.4 85.7
+885.4 24.7
+886.5 105.5
+887.2 8.1
+888.2 56.1
+889.3 71.5
+890.3 272.0
+891.2 228.0
+892.1 102.8
+892.8 36.0
+893.7 4.2
+894.8 13.6
+895.7 16.3
+896.9 43.8
+898.0 93.6
+899.2 70.8
+900.0 259.3
+901.1 71.2
+901.7 56.5
+903.0 54.3
+904.2 37.2
+904.9 3.1
+906.7 289.4
+907.6 169.2
+908.6 343.5
+909.6 142.3
+910.7 18.0
+911.5 76.3
+912.3 118.9
+913.0 118.7
+914.5 154.0
+915.4 29.6
+916.1 15.2
+917.1 70.9
+918.0 23.3
+918.6 207.5
+919.3 216.3
+920.5 432.2
+921.4 393.5
+922.5 81.6
+923.7 88.5
+924.8 74.8
+925.6 374.8
+926.8 334.5
+928.1 188.8
+929.0 94.4
+929.7 55.3
+930.4 24.3
+931.2 46.5
+932.3 22.8
+933.5 49.4
+934.1 6.6
+934.8 16.5
+936.1 34.3
+937.0 28.1
+937.8 14.9
+938.8 39.0
+939.7 201.9
+940.5 37.9
+941.2 16.3
+942.5 24.7
+943.5 184.5
+944.7 165.5
+945.7 125.1
+946.8 39.0
+947.9 20.4
+948.7 22.8
+950.0 33.9
+950.9 3.2
+952.4 32.5
+953.2 10.1
+954.0 21.9
+955.3 43.9
+956.1 87.2
+956.8 103.1
+957.6 17.8
+958.7 76.3
+959.6 29.2
+960.8 25.0
+962.7 2297.0
+963.8 678.0
+965.0 163.5
+965.9 42.2
+966.6 27.0
+967.2 45.8
+968.3 78.2
+969.3 53.5
+970.2 127.3
+971.2 54.6
+971.8 53.7
+972.9 163.1
+973.7 165.7
+975.1 278.1
+975.8 90.8
+976.4 152.2
+977.5 204.5
+978.2 48.3
+979.1 87.9
+980.5 33.6
+981.5 36.9
+982.4 113.9
+983.4 59.3
+984.3 118.5
+985.2 37.7
+985.9 38.8
+986.7 17.1
+987.6 38.6
+988.8 56.5
+990.1 81.8
+992.7 48.9
+993.8 38.3
+994.6 17.6
+996.1 53.8
+997.0 22.7
+998.0 28.5
+999.7 45.1
+1000.4 17.1
+1001.7 26.1
+1002.8 22.5
+1003.7 54.0
+1004.4 8.3
+1005.1 52.8
+1005.7 12.8
+1006.6 26.5
+1007.7 85.3
+1008.7 116.9
+1009.5 33.3
+1010.5 3.3
+1011.8 59.6
+1012.9 101.7
+1013.9 50.2
+1014.6 24.8
+1015.6 7.7
+1016.2 5.5
+1017.9 18.7
+1019.4 52.0
+1020.8 1201.0
+1021.7 609.2
+1022.7 256.2
+1023.9 49.6
+1024.6 13.2
+1025.3 10.6
+1026.4 27.4
+1027.7 16.7
+1029.1 43.8
+1030.0 65.3
+1030.7 47.9
+1031.5 48.6
+1032.5 26.4
+1033.8 1314.2
+1034.8 465.8
+1035.7 17.5
+1037.0 61.0
+1037.7 82.0
+1038.7 205.8
+1039.7 83.0
+1040.6 25.3
+1041.2 26.4
+1042.0 9.9
+1042.9 6.0
+1044.1 31.8
+1044.9 7.7
+1046.0 14.6
+1046.7 26.6
+1047.6 13.7
+1048.2 42.4
+1049.1 16.9
+1050.4 13.6
+1051.5 22.0
+1052.7 45.2
+1054.7 204.7
+1055.7 78.4
+1056.7 337.7
+1057.6 156.0
+1058.7 67.9
+1059.9 26.6
+1062.3 52.6
+1063.8 6.9
+1064.7 11.5
+1067.1 14.4
+1067.8 12.2
+1068.7 20.4
+1069.9 47.8
+1070.6 19.4
+1073.7 77.4
+1074.8 24.3
+1075.9 28.1
+1076.9 17.7
+1077.8 17.2
+1079.0 47.5
+1080.0 2.9
+1080.7 13.8
+1081.7 26.0
+1082.9 14.5
+1084.1 3.2
+1085.0 7.5
+1086.1 36.2
+1086.9 89.3
+1087.7 53.8
+1089.3 21.9
+1090.7 73.1
+1091.8 33.2
+1092.8 6.0
+1094.1 19.9
+1094.8 2.8
+1095.6 20.8
+1098.7 2.9
+1100.7 33.3
+1101.5 14.3
+1102.9 120.2
+1103.9 57.6
+1104.6 2.8
+1107.0 9.6
+1108.6 15.5
+1109.7 10.8
+1111.6 3.2
+1112.8 10.5
+1113.6 3.4
+1114.7 13.4
+1115.7 8.0
+1116.4 11.9
+1117.8 33.0
+1118.8 26.2
+1120.8 4139.8
+1121.9 1637.9
+1122.6 52.1
+1123.7 15.0
+1124.4 5.1
+1125.1 14.4
+1125.8 3.0
+1126.8 19.4
+1127.7 4.9
+1130.5 20.1
+1132.0 8.6
+1133.8 350.8
+1134.9 163.0
+1135.9 100.9
+1136.8 62.1
+1137.8 72.1
+1138.9 20.4
+1139.7 27.2
+1141.8 28.9
+1142.7 5.1
+1143.9 4.5
+1144.6 8.1
+1145.7 14.6
+1146.6 19.3
+1147.8 16.1
+1149.2 4.1
+1151.6 68.2
+1152.7 104.4
+1153.9 33.2
+1155.8 58.8
+1156.9 50.0
+1157.7 60.0
+1158.7 17.2
+1160.2 23.8
+1163.7 24.9
+1166.1 9.6
+1168.4 6.2
+1169.7 260.7
+1170.8 132.2
+1172.8 10.2
+1173.6 5.4
+1174.7 64.4
+1176.0 20.6
+1176.9 14.3
+1177.8 12.2
+1183.1 21.2
+1183.8 23.3
+1184.7 59.8
+1185.5 118.9
+1187.0 26.2
+1187.8 10.9
+1190.8 9.9
+1192.0 64.3
+1193.1 9.3
+1194.0 3.9
+1194.8 6.7
+1195.9 6.3
+1197.9 4.7
+1199.1 19.4
+1199.7 15.5
+1201.1 53.3
+1201.8 198.2
+1202.8 148.0
+1203.9 59.6
+1204.9 11.8
+1206.0 6.8
+1206.9 3.8
+1212.2 10.0
+1212.9 5.5
+1213.8 7.0
+1215.2 24.6
+1216.1 36.2
+1216.8 17.1
+1218.0 14.7
+1219.8 1945.0
+1220.9 722.2
+1222.1 7.8
+1224.7 5.3
+1225.7 2.8
+1226.3 11.9
+1227.7 7.7
+1228.9 10.5
+1230.1 6.5
+1230.8 3.6
+1231.9 5.8
+1234.1 18.9
+1235.7 87.2
+1236.9 89.5
+1238.0 17.7
+1240.9 2.2
+1241.8 2.8
+1246.9 50.9
+1248.0 34.9
+1249.1 15.9
+1249.9 13.8
+1251.9 8.4
+1252.6 12.7
+1258.1 17.0
+1259.7 11.3
+1260.9 16.0
+1266.9 20.8
+1268.4 7.9
+1269.8 23.7
+1270.8 68.5
+1271.8 8.0
+1273.4 8.7
+1277.4 7.6
+1278.7 17.1
+1279.7 19.8
+1280.8 13.4
+1281.9 25.4
+1286.5 25.7
+1287.3 15.6
+1287.9 46.1
+1289.0 10.2
+1290.0 28.3
+1291.9 21.6
+1293.9 7.3
+1295.8 4.3
+1296.8 26.3
+1297.7 114.4
+1298.8 127.3
+1299.9 82.5
+1300.8 63.1
+1305.2 4.4
+1305.8 15.7
+1309.0 2.3
+1309.8 27.7
+1310.8 3.2
+1313.7 64.1
+1314.8 470.6
+1315.9 261.2
+1316.8 276.3
+1317.8 243.9
+1318.8 2.4
+1326.1 5.8
+1326.9 3.9
+1330.3 4.8
+1331.0 8.7
+1332.0 3.0
+1334.2 5.2
+1335.1 18.9
+1338.0 16.1
+1340.5 11.1
+1342.5 5.0
+1343.7 7.8
+1346.1 7.6
+1354.0 3.5
+1358.6 13.6
+1361.9 5.9
+1363.3 12.6
+1368.5 4.0
+1370.9 16.5
+1371.5 4.3
+1375.9 2.2
+1378.1 15.9
+1381.0 29.2
+1388.8 3.4
+1391.7 31.5
+1393.4 3.6
+1403.9 2.9
+1408.0 6.6
+1411.0 3.4
+1415.9 7.0
+1419.2 5.2
+1424.3 6.5
+1433.8 2.7
+1458.2 4.1
+1470.1 13.4
+S	28	28	613.26
+Z	2	1225.51
+175.1 37.6
+177.0 57.3
+178.2 2.9
+181.8 1.0
+183.2 8.6
+186.1 10.8
+187.1 22.2
+189.3 0.8
+192.2 3.6
+195.2 6.1
+197.0 0.8
+198.2 8.6
+199.2 5.0
+200.4 3.4
+201.1 14.8
+202.3 1.2
+203.0 1.9
+204.2 6.3
+205.1 6.8
+206.3 6.0
+207.3 5.1
+208.2 2.7
+209.1 0.7
+210.3 7.8
+211.0 5.2
+212.2 2.0
+213.2 1.3
+214.2 26.9
+215.4 12.2
+216.1 17.8
+217.3 2.7
+218.5 4.8
+219.2 0.6
+221.3 7.0
+223.1 17.2
+224.3 23.5
+226.2 40.9
+227.6 3.5
+230.1 34.2
+231.5 3.6
+232.4 12.4
+234.3 7.9
+236.3 2.4
+238.0 10.1
+239.2 9.7
+242.2 8.1
+243.0 2.8
+244.4 15.9
+245.2 6.7
+246.0 6.4
+248.1 68.5
+249.1 26.9
+250.2 14.3
+252.1 6.0
+253.2 12.5
+254.1 69.2
+255.4 31.9
+256.9 7.4
+258.1 1.0
+260.1 14.9
+261.2 5.8
+262.2 16.9
+263.4 3.6
+265.9 16.4
+267.1 40.8
+268.3 16.1
+269.2 13.5
+270.2 2.1
+271.3 50.7
+272.3 10.7
+273.2 6.0
+274.3 49.6
+275.2 22.0
+276.4 18.4
+277.4 29.7
+278.2 23.6
+279.5 1.1
+280.1 11.5
+281.3 33.7
+282.2 12.9
+283.2 18.1
+284.2 5.2
+285.2 8.9
+287.2 37.5
+288.4 1.9
+289.1 8.3
+290.4 3.2
+291.5 2.4
+292.2 5.2
+293.5 2.6
+295.2 3.5
+296.3 10.1
+296.9 1.9
+298.3 3.7
+299.2 69.1
+300.3 8.1
+301.3 16.4
+302.2 46.7
+303.1 50.5
+304.1 47.2
+305.4 14.0
+306.2 10.8
+307.4 10.6
+308.4 1.6
+309.7 5.6
+313.4 20.7
+314.5 5.7
+315.3 4.2
+316.1 5.7
+317.2 5.0
+319.2 285.1
+320.3 40.9
+321.3 39.4
+322.2 12.0
+323.3 217.6
+325.3 18.4
+326.2 10.2
+327.3 8.1
+328.0 1.0
+330.3 2.3
+331.5 2.2
+333.3 9.8
+334.3 4.3
+336.2 3.1
+337.3 31.5
+338.4 230.4
+339.4 12.9
+340.3 7.1
+341.4 47.7
+342.6 7.2
+343.4 44.9
+344.4 23.9
+345.3 0.8
+346.6 7.3
+347.4 0.6
+348.5 11.6
+349.3 65.1
+351.3 5.0
+352.3 4.5
+353.3 3.4
+354.5 17.3
+355.1 51.9
+356.3 50.4
+357.1 108.4
+358.3 36.5
+359.6 3.1
+360.4 11.0
+361.5 32.9
+362.5 6.2
+363.4 7.3
+364.4 2.6
+365.6 3.9
+366.4 12.1
+367.3 10.3
+368.4 4.7
+369.3 4.8
+371.3 7.1
+372.3 7.5
+373.1 7.6
+374.4 36.5
+376.4 106.9
+377.3 28.6
+378.4 12.0
+379.4 27.1
+380.1 1.1
+383.3 0.5
+384.1 3.1
+385.4 5.9
+386.4 19.9
+387.1 12.3
+389.2 68.0
+390.3 4.6
+391.5 1.7
+392.5 39.4
+393.5 11.7
+394.4 76.7
+395.4 5.1
+396.7 27.4
+397.5 14.9
+399.0 8.2
+400.5 2.3
+401.6 5.9
+402.5 13.7
+404.3 15.2
+406.3 5.3
+408.4 2.1
+410.3 5.0
+411.3 1.4
+412.3 55.5
+414.3 163.6
+415.2 4.9
+417.2 230.2
+418.3 29.7
+419.2 9.9
+420.3 5.6
+421.8 25.6
+422.4 146.4
+423.3 8.8
+424.0 5.7
+425.4 5.5
+427.3 20.9
+428.6 17.2
+429.4 9.2
+430.4 21.9
+431.4 29.1
+432.2 12.4
+433.6 18.8
+434.4 173.6
+437.4 2.0
+439.3 19.9
+440.4 94.5
+441.4 30.4
+442.3 7.6
+443.4 14.8
+444.3 20.1
+445.3 43.4
+447.3 103.8
+448.3 20.0
+449.5 3.6
+450.4 2.2
+451.4 3.1
+453.4 2.9
+454.3 12.4
+454.9 10.4
+457.4 57.8
+458.4 57.2
+459.3 16.0
+460.5 49.5
+461.6 33.0
+462.3 170.3
+463.3 194.5
+464.4 49.6
+465.4 10.7
+466.3 14.7
+467.4 1.5
+468.4 17.6
+470.4 7.1
+471.4 11.7
+472.5 21.4
+473.2 3.5
+475.9 19.3
+477.3 10.0
+478.6 3.7
+479.3 21.0
+480.3 46.6
+481.2 75.2
+482.5 11.1
+483.4 20.5
+484.4 12.0
+485.7 5.0
+486.4 7.0
+487.3 13.6
+490.0 93.0
+491.3 9.0
+492.4 8.1
+493.9 32.9
+494.6 8.9
+495.6 5.7
+496.5 9.8
+497.6 26.2
+498.8 24.3
+499.6 73.5
+500.4 47.5
+501.3 130.1
+502.8 52.5
+503.5 4.4
+504.6 2.1
+505.4 7.7
+507.7 169.1
+508.5 43.2
+509.2 9.0
+511.0 119.2
+512.1 51.5
+513.4 33.0
+514.2 35.3
+515.7 75.0
+516.6 485.4
+517.5 100.2
+518.7 67.3
+519.8 12.3
+521.2 10.4
+522.4 22.8
+523.4 3.3
+525.5 664.7
+526.5 19.2
+528.0 133.6
+528.9 21.9
+530.3 67.6
+531.2 72.1
+532.3 99.6
+533.7 74.5
+534.6 163.8
+535.5 61.3
+536.7 16.5
+537.4 73.5
+538.1 107.8
+539.1 16.1
+542.2 127.6
+543.1 112.1
+544.6 36.7
+546.2 154.6
+547.1 99.7
+548.2 164.4
+549.4 44.1
+551.2 687.6
+551.9 280.3
+552.6 45.8
+553.8 37.0
+554.5 165.7
+555.4 71.9
+556.4 66.5
+557.4 11.3
+560.1 1530.3
+561.0 238.0
+562.6 52.1
+563.6 26.4
+564.8 3.9
+565.7 17.6
+566.5 9.2
+567.8 25.1
+569.0 1838.6
+570.3 86.9
+571.1 24.6
+571.7 5.0
+572.7 26.8
+573.5 14.1
+574.2 13.9
+575.5 3.1
+577.6 102.1
+578.4 149.1
+579.4 283.9
+580.5 79.3
+581.9 18.7
+583.5 28.3
+584.5 94.4
+585.6 9.5
+586.4 75.1
+587.2 189.4
+588.4 97.1
+589.2 36.7
+590.6 34.0
+591.3 27.6
+592.4 8.9
+593.6 2.4
+594.4 127.2
+595.7 1138.9
+596.5 985.4
+597.5 587.4
+598.2 2.9
+599.0 1.3
+600.1 1.6
+602.4 15.6
+603.2 46.0
+604.5 2469.7
+605.6 73.1
+606.5 8.8
+607.1 13.6
+608.0 6.4
+609.1 1.8
+610.8 2.2
+616.6 14.3
+619.3 3.6
+620.9 9.6
+621.5 8.1
+622.5 1.7
+625.6 5.7
+629.6 0.8
+630.5 1.5
+631.3 6.5
+638.1 1.9
+639.4 4.2
+640.3 2.6
+642.4 25.8
+643.1 3.0
+646.4 2.2
+647.5 8.5
+648.3 0.9
+654.7 5.3
+655.4 2.6
+656.4 20.9
+657.2 35.6
+658.3 15.1
+659.4 4.1
+660.3 53.0
+661.4 10.4
+664.7 1.6
+665.5 1.0
+668.6 12.8
+672.3 2.5
+674.3 71.0
+675.4 66.4
+676.5 5.4
+678.3 328.1
+679.4 89.9
+680.1 5.4
+681.3 3.1
+682.4 1.3
+686.3 2.6
+688.5 3.5
+689.4 4.1
+690.5 21.0
+692.2 47.1
+693.5 12.7
+701.6 7.7
+706.5 21.5
+707.6 14.2
+709.5 5.1
+710.4 2.1
+711.5 7.3
+712.4 4.0
+713.2 2.7
+714.4 2.4
+715.4 0.6
+716.4 1.3
+717.9 1.2
+727.4 40.5
+728.5 58.3
+729.3 19.8
+731.6 18.5
+732.6 4.3
+734.1 0.6
+734.7 1.6
+736.5 5.3
+737.6 4.8
+740.8 4.9
+741.7 6.3
+743.7 4.6
+745.4 116.3
+746.4 57.1
+747.4 7.9
+748.6 4.5
+749.4 1.0
+758.4 3.6
+761.3 64.3
+763.3 98.1
+764.5 26.6
+765.8 4.2
+767.6 2.9
+771.5 3.9
+772.6 4.1
+775.6 5.5
+776.5 5.8
+779.5 435.9
+780.6 162.0
+787.2 11.7
+788.5 7.8
+789.6 10.7
+797.4 6.4
+798.4 5.7
+799.7 12.5
+804.7 8.0
+805.4 13.1
+807.5 13.5
+811.7 9.5
+813.3 4.9
+814.5 28.7
+815.4 32.2
+816.3 20.7
+817.4 7.7
+818.6 6.9
+819.6 8.3
+822.7 4.9
+824.5 9.7
+825.4 5.1
+830.8 5.4
+832.4 82.2
+833.5 113.2
+834.5 14.9
+835.3 2.7
+836.6 8.4
+841.6 2.3
+845.4 2.1
+849.2 4.7
+850.4 97.7
+851.5 41.3
+853.8 7.0
+854.5 1.1
+855.6 0.3
+856.6 1.3
+857.5 1.6
+858.3 5.2
+859.6 2.9
+860.4 1.6
+861.3 3.0
+862.5 2.3
+864.6 4.6
+865.2 3.0
+867.5 6.2
+868.4 7.1
+869.2 2.9
+871.3 10.3
+872.5 10.0
+873.5 9.4
+874.7 6.7
+875.5 2.3
+876.4 2.3
+878.4 5.4
+879.7 3.8
+885.2 17.8
+886.4 2.9
+889.7 51.9
+890.5 98.4
+891.4 33.4
+892.4 9.3
+894.5 2.9
+902.8 4.0
+903.9 9.6
+904.5 17.5
+905.5 5.9
+906.6 13.8
+907.6 297.9
+908.5 156.4
+909.1 1.4
+910.7 1.2
+911.4 3.9
+916.7 14.9
+918.7 2.1
+921.5 20.6
+922.5 15.5
+933.6 2.7
+935.2 8.7
+935.8 2.5
+936.6 9.5
+938.5 2.2
+941.8 5.9
+943.4 10.9
+944.1 2.3
+946.4 18.7
+948.5 3.7
+955.5 5.4
+956.7 4.3
+960.5 27.3
+961.5 41.2
+962.6 20.8
+963.9 12.3
+966.8 5.7
+969.2 9.3
+972.2 2.6
+973.4 35.1
+974.8 10.2
+978.5 416.2
+979.5 198.1
+987.5 0.8
+990.5 32.6
+991.5 47.8
+992.5 9.6
+994.7 1.9
+1003.6 1.0
+1004.7 4.3
+1005.7 2.3
+1006.6 13.0
+1008.1 38.3
+1008.9 31.1
+1012.5 0.9
+1013.7 1.6
+1014.5 13.8
+1015.7 5.0
+1021.1 5.0
+1022.8 3.2
+1023.6 7.9
+1029.6 2.7
+1030.5 36.6
+1031.4 59.0
+1032.6 98.3
+1033.5 43.3
+1036.6 5.6
+1037.8 4.6
+1043.6 1.1
+1045.6 17.3
+1047.0 3.1
+1049.5 766.8
+1050.5 351.8
+1051.3 1.9
+1053.4 1.7
+1054.5 12.1
+1055.4 14.7
+1060.4 4.7
+1062.5 1.2
+1063.5 1.5
+1074.6 10.6
+1075.9 4.9
+1079.4 5.3
+1080.7 3.0
+1086.6 2.0
+1091.9 0.9
+1104.9 4.0
+1111.5 2.5
+1118.8 1.7
+1120.5 2.4
+1122.7 1.8
+1127.9 1.6
+S	29	29	614.26
+Z	2	1227.51
+177.1 12.2
+180.2 1.9
+184.9 1.8
+198.0 1.7
+200.4 1.8
+207.4 1.4
+214.0 2.6
+215.0 3.6
+216.5 4.6
+217.3 1.7
+220.1 1.8
+221.2 8.9
+222.3 5.5
+223.3 11.9
+224.1 3.0
+227.1 0.7
+231.2 3.2
+238.6 1.5
+239.9 2.5
+248.2 10.9
+250.9 1.3
+251.8 2.3
+267.1 25.2
+268.1 16.3
+269.1 26.8
+270.2 22.9
+271.0 1.7
+272.4 0.7
+274.3 4.7
+276.2 5.0
+277.1 1.1
+281.9 10.5
+283.0 6.7
+284.2 18.6
+285.1 13.7
+285.8 0.6
+287.2 14.1
+288.2 0.9
+291.1 6.0
+297.2 3.7
+298.1 1.2
+298.9 2.5
+300.0 4.9
+300.9 9.8
+302.1 20.9
+302.7 0.4
+304.4 1.0
+307.2 4.9
+308.5 2.4
+315.3 1.7
+319.2 82.8
+320.4 16.3
+321.2 1.9
+323.3 9.1
+326.1 0.6
+327.1 1.5
+330.2 0.8
+331.4 1.3
+333.2 4.0
+336.2 0.5
+337.5 1.9
+339.4 2.5
+340.9 6.7
+349.0 3.6
+350.2 8.4
+352.2 1.3
+355.1 52.3
+356.1 166.8
+357.1 228.1
+358.1 149.7
+359.1 88.0
+362.2 0.2
+367.7 3.4
+371.1 11.7
+372.2 10.5
+373.1 13.7
+373.9 17.7
+375.0 1.9
+376.1 33.0
+377.0 12.8
+377.7 3.0
+378.4 1.5
+379.2 3.2
+380.5 2.7
+381.4 7.5
+385.6 4.3
+386.4 1.1
+389.0 2.5
+392.6 2.7
+395.0 1.1
+399.0 2.2
+401.3 7.4
+402.4 7.5
+404.2 7.8
+405.3 0.9
+412.3 7.9
+413.3 1.4
+416.2 1.6
+418.2 3.2
+419.0 3.2
+420.1 1.8
+423.3 2.5
+424.3 1.2
+427.3 4.4
+429.4 3.8
+431.1 10.3
+432.3 10.5
+437.1 14.9
+439.5 1.1
+440.4 3.0
+442.4 3.9
+444.3 8.6
+445.4 9.1
+446.3 7.5
+447.3 41.3
+448.2 12.9
+451.7 3.4
+455.0 4.2
+455.7 7.9
+458.9 13.0
+463.4 62.3
+464.3 11.8
+465.0 6.1
+465.9 6.0
+468.3 4.9
+469.8 5.2
+472.4 9.4
+475.4 4.8
+477.7 8.5
+478.5 1.0
+481.2 14.0
+483.2 5.1
+484.3 2.4
+485.7 10.4
+487.3 3.3
+488.0 7.7
+489.5 13.3
+490.7 26.3
+492.3 7.9
+493.2 3.9
+494.4 3.9
+496.7 6.2
+497.3 3.0
+498.6 6.5
+499.3 23.5
+500.2 13.1
+501.3 5.8
+502.9 23.4
+504.1 5.0
+505.3 1.9
+505.9 19.8
+507.2 20.7
+508.3 23.9
+509.5 5.5
+510.1 2.6
+510.9 8.3
+511.6 31.5
+512.8 1.0
+514.2 17.8
+515.0 4.7
+516.4 133.8
+517.3 51.3
+517.9 14.2
+518.9 5.7
+520.1 16.7
+523.1 2.0
+525.1 104.6
+526.0 90.9
+527.3 24.1
+528.5 35.4
+530.2 35.2
+531.5 17.0
+532.5 8.6
+533.8 19.0
+534.5 46.1
+535.3 21.2
+536.4 1.3
+537.5 33.2
+538.4 25.8
+540.7 5.3
+542.2 33.2
+543.0 45.6
+544.3 20.3
+546.1 54.1
+546.8 44.5
+547.5 16.6
+548.2 31.0
+549.5 21.1
+551.2 139.9
+551.9 114.6
+553.1 12.3
+554.0 11.2
+554.8 4.3
+555.6 14.7
+556.3 15.0
+560.1 477.5
+560.8 87.0
+561.5 64.1
+563.0 9.9
+564.4 2.2
+565.5 7.2
+568.8 416.1
+569.5 311.0
+570.5 20.3
+571.4 14.1
+572.6 11.2
+573.7 6.2
+574.4 4.6
+575.6 4.1
+576.7 6.2
+578.1 28.5
+579.5 34.6
+580.3 22.8
+581.1 18.0
+582.6 4.5
+584.1 19.2
+585.2 12.9
+586.7 66.3
+587.4 33.1
+588.2 79.4
+589.4 9.8
+590.4 11.7
+592.0 24.0
+593.3 1.3
+595.6 270.7
+596.4 136.5
+597.4 23.5
+598.3 24.0
+599.2 10.0
+600.5 6.8
+601.4 8.5
+602.3 2.7
+604.5 886.0
+605.5 270.8
+606.5 10.8
+607.4 7.1
+608.3 4.1
+614.3 11.1
+619.4 1.9
+621.3 2.9
+622.7 2.1
+623.4 1.1
+630.4 1.3
+632.2 1.6
+635.4 1.0
+639.4 5.4
+640.5 2.8
+642.4 2.7
+643.3 4.9
+644.5 5.4
+649.2 1.4
+651.9 4.3
+656.6 3.6
+657.3 13.6
+658.5 6.4
+660.5 17.5
+661.4 3.4
+674.2 16.6
+675.3 7.9
+676.4 6.0
+678.2 50.3
+679.3 32.6
+680.3 7.7
+681.0 3.6
+681.6 3.3
+685.0 4.4
+688.4 7.4
+690.3 9.9
+691.4 0.8
+692.5 27.4
+694.6 5.8
+695.4 1.8
+697.0 2.0
+701.1 7.2
+702.8 3.6
+706.5 16.7
+707.3 7.1
+710.2 2.2
+711.5 3.5
+712.2 1.6
+717.4 9.4
+718.5 4.7
+720.6 1.8
+724.4 1.9
+725.7 0.6
+727.4 20.9
+728.4 22.6
+729.4 17.5
+731.5 0.7
+734.9 6.7
+735.6 5.4
+736.3 2.1
+743.9 4.5
+745.3 45.9
+746.4 24.5
+747.6 8.8
+748.4 3.0
+750.6 1.7
+758.5 2.1
+760.1 3.6
+761.4 9.7
+763.4 40.4
+764.6 15.3
+765.6 0.3
+770.5 3.8
+773.5 1.4
+774.5 3.5
+778.6 4.2
+779.6 82.4
+780.4 38.1
+781.5 23.2
+782.4 2.0
+786.6 1.7
+788.3 6.2
+789.5 4.0
+796.0 7.1
+796.7 1.7
+798.5 1.8
+799.2 7.1
+800.2 11.6
+806.6 9.1
+811.8 9.4
+814.4 3.7
+815.2 14.5
+816.5 6.4
+818.6 10.3
+820.4 1.9
+822.6 6.3
+828.5 3.8
+829.3 5.6
+832.4 18.7
+833.3 19.3
+834.3 3.3
+835.5 4.2
+839.6 3.7
+846.9 9.6
+849.4 3.3
+850.5 44.6
+851.6 7.6
+852.5 7.0
+858.4 2.7
+860.8 2.5
+865.8 3.5
+867.8 1.5
+871.6 4.8
+872.4 0.5
+873.3 7.6
+874.1 4.4
+875.6 2.6
+878.8 2.1
+884.5 1.4
+885.5 1.3
+886.5 2.5
+887.5 7.3
+889.5 15.7
+890.5 33.1
+891.6 13.1
+903.2 10.5
+904.6 6.8
+907.6 96.8
+908.5 33.3
+909.6 28.2
+912.6 1.5
+916.4 4.1
+920.8 9.4
+921.7 2.7
+923.2 1.4
+927.4 2.2
+935.6 7.7
+944.2 5.6
+946.2 9.9
+946.8 3.1
+948.5 8.4
+951.4 1.8
+952.5 2.4
+954.3 3.0
+955.7 0.9
+956.5 5.8
+958.4 4.4
+960.6 2.3
+961.3 5.5
+963.4 1.0
+964.7 9.3
+968.6 4.4
+972.8 1.6
+973.6 2.8
+974.8 4.5
+978.4 113.2
+979.5 73.7
+980.4 23.2
+981.6 1.9
+990.2 2.1
+991.8 5.4
+992.6 8.2
+993.4 1.6
+1003.0 1.3
+1008.7 19.7
+1009.5 15.9
+1014.1 10.1
+1015.5 8.2
+1016.6 2.3
+1022.6 2.5
+1027.7 1.0
+1030.2 0.5
+1031.6 17.2
+1032.4 20.0
+1033.4 10.5
+1034.5 4.2
+1049.0 6.6
+1049.6 210.7
+1050.6 148.9
+1051.7 13.8
+1052.4 0.5
+1054.8 8.4
+1055.8 3.5
+1056.7 4.0
+1073.7 3.9
+1092.3 2.0
+1101.2 2.2
+1102.2 0.9
+1203.6 4.2
+S	30	30	715.07
+I	ID	215
+I	RTime	10.6204
+Z	1	715.07
+244.5 1.3
+247.9 1.6
+257.1 1.5
+262.1 1.6
+264.3 1.2
+271.9 3.5
+275.3 1.1
+283.1 2.0
+287.3 4.8
+289.4 2.0
+290.3 2.9
+307.1 3.5
+311.2 4.6
+342.2 1.5
+343.3 2.7
+357.4 2.7
+372.2 1.2
+376.1 2.5
+379.2 1.5
+385.3 7.0
+386.0 1.2
+412.4 2.0
+423.7 5.0
+426.2 1.6
+427.4 2.7
+429.0 1.2
+439.3 1.1
+444.1 1.5
+445.4 2.7
+447.1 2.4
+450.3 2.9
+453.4 1.2
+455.1 11.0
+456.2 2.7
+457.1 5.0
+471.3 4.0
+472.3 5.3
+476.3 8.3
+481.6 2.2
+483.5 3.7
+486.3 5.9
+493.1 2.5
+498.4 8.3
+500.2 12.5
+501.3 4.3
+505.2 2.0
+516.5 1.1
+522.4 5.5
+523.1 4.0
+524.5 1.2
+534.5 4.0
+537.7 4.1
+543.8 1.5
+550.0 5.8
+551.3 2.2
+553.6 2.2
+554.5 3.5
+555.4 5.6
+557.2 2.9
+558.1 5.1
+559.4 2.7
+561.3 2.2
+568.1 4.0
+580.1 1.2
+585.3 2.5
+587.2 3.0
+592.8 3.7
+602.3 1.7
+610.5 1.8
+616.7 1.3
+618.3 4.4
+636.0 1.7
+641.7 2.5
+647.2 2.7
+649.4 1.7
+650.5 5.0
+651.4 4.0
+653.5 3.5
+657.8 3.7
+658.5 2.0
+660.6 1.2
+663.3 2.0
+664.1 2.2
+670.9 13.3
+671.7 2.7
+674.9 5.4
+682.5 5.1
+684.2 2.0
+685.3 14.0
+686.0 2.2
+696.4 30.5
+697.4 30.8
+698.3 11.1
+699.6 7.3
+705.4 4.3
+706.6 19.5
+S	31	31	501.22
+Z	3	1501.64
+147.1 1.4
+152.1 6.4
+153.1 1.1
+156.0 0.8
+159.1 1.8
+169.2 0.6
+177.0 1.6
+187.2 0.9
+189.2 2.2
+192.0 0.7
+203.1 2.8
+206.4 4.2
+210.1 0.8
+212.2 1.4
+214.3 0.7
+215.3 2.2
+217.5 1.1
+223.1 0.4
+225.3 2.1
+226.3 2.8
+228.2 1.2
+229.4 4.9
+230.9 4.0
+232.2 2.7
+233.3 2.3
+235.2 2.0
+244.2 0.7
+246.3 5.3
+248.1 5.9
+251.2 1.0
+257.3 0.4
+258.1 4.2
+259.0 1.1
+261.2 0.7
+262.1 0.9
+266.3 1.1
+267.3 0.6
+268.2 4.1
+274.3 1.9
+276.2 19.2
+277.3 2.7
+284.0 0.6
+285.2 2.1
+287.3 5.4
+288.3 1.0
+291.3 1.8
+294.2 2.2
+296.2 4.4
+301.0 2.1
+302.2 14.2
+305.9 1.3
+309.2 0.6
+311.6 4.2
+314.4 0.8
+315.3 0.8
+317.0 1.6
+319.2 4.9
+320.3 0.4
+322.4 2.2
+328.3 1.5
+330.2 11.2
+331.0 41.9
+331.9 6.2
+333.5 8.1
+334.5 0.7
+335.9 2.2
+338.2 0.6
+339.3 9.5
+339.9 8.7
+341.0 5.1
+342.2 2.9
+343.0 2.0
+344.5 13.3
+346.2 5.2
+346.8 4.2
+348.3 2.6
+348.9 5.6
+349.8 0.8
+351.7 3.1
+353.4 28.7
+354.2 3.2
+355.0 1.1
+357.4 4.5
+358.3 0.9
+360.4 10.1
+362.0 32.1
+366.4 1.5
+372.3 2.9
+373.5 5.1
+376.3 16.5
+377.2 1.0
+378.2 0.5
+380.6 2.1
+381.3 41.4
+383.1 2.4
+386.7 4.7
+387.4 2.1
+388.6 0.6
+389.6 9.6
+390.6 32.0
+394.5 21.3
+395.3 11.5
+398.2 17.8
+402.3 3.8
+403.5 56.2
+404.5 10.2
+406.2 0.6
+410.1 9.3
+412.3 27.6
+413.0 5.1
+414.5 2.1
+415.8 6.8
+416.5 1.6
+417.3 5.5
+418.0 16.5
+418.8 4.9
+420.1 13.7
+421.6 7.3
+423.5 14.0
+424.2 8.4
+425.1 0.4
+425.7 3.7
+427.4 44.3
+428.5 2.9
+429.2 5.7
+430.1 3.3
+430.8 5.2
+432.0 63.7
+433.1 15.2
+434.9 5.2
+436.5 11.3
+437.9 3.1
+439.2 5.8
+441.1 39.9
+442.1 8.7
+442.9 3.4
+444.3 15.0
+445.1 27.1
+446.0 11.7
+447.1 10.5
+448.4 4.9
+449.6 11.6
+450.5 6.7
+451.2 18.4
+452.3 4.0
+453.5 3.0
+454.4 19.1
+455.5 6.6
+456.2 3.6
+457.6 16.1
+458.5 29.8
+459.3 8.7
+460.4 11.2
+462.0 6.7
+463.3 91.2
+464.4 21.5
+465.3 28.0
+466.1 27.4
+467.0 23.2
+468.1 10.6
+468.8 16.2
+470.1 20.5
+471.1 25.2
+471.9 37.0
+472.8 7.6
+474.0 36.8
+475.0 67.5
+475.8 37.6
+476.9 13.4
+477.7 30.0
+478.5 1.2
+479.4 5.0
+480.6 6.7
+481.3 3.2
+482.4 33.4
+483.3 129.3
+484.3 79.6
+485.4 3.8
+486.6 3.9
+487.3 7.3
+488.6 29.6
+489.4 1168.4
+490.6 14.1
+491.4 28.0
+492.2 68.7
+493.2 15.6
+494.5 34.2
+495.8 4.1
+496.5 7.6
+500.3 14.1
+502.4 4.0
+503.1 2.0
+506.7 4.6
+509.1 2.8
+510.7 10.6
+511.5 9.0
+514.6 8.2
+516.1 5.8
+518.3 7.2
+519.0 17.6
+520.2 23.2
+521.0 15.7
+521.9 6.0
+523.4 1.9
+524.2 0.7
+525.4 5.1
+526.2 1.1
+531.4 4.3
+532.0 4.8
+534.3 70.6
+535.5 15.2
+536.3 8.7
+538.6 1.0
+539.4 3.0
+540.0 0.8
+541.4 1.9
+544.6 2.9
+545.8 6.6
+548.1 3.5
+551.5 8.1
+552.7 2.0
+554.3 14.8
+555.4 15.5
+556.4 0.7
+558.2 3.2
+559.3 0.9
+560.8 13.7
+563.4 13.1
+565.9 2.1
+567.7 1.6
+568.9 5.3
+571.3 17.2
+572.2 0.5
+573.3 1.8
+574.4 6.2
+575.5 1.4
+576.2 14.0
+577.4 3.7
+578.4 3.1
+580.5 9.0
+581.9 8.4
+583.2 0.6
+584.9 24.8
+586.4 1.5
+588.6 1.4
+590.6 1.3
+592.1 10.3
+594.5 25.0
+595.4 15.2
+596.6 10.9
+598.2 0.6
+598.9 2.7
+599.6 1.5
+600.6 3.6
+603.4 6.0
+604.4 41.7
+605.4 19.4
+607.7 5.7
+609.3 6.0
+612.2 7.9
+613.5 25.7
+614.3 11.8
+616.3 0.8
+617.0 2.9
+618.7 11.4
+620.3 11.6
+621.4 45.7
+622.6 8.4
+623.8 33.2
+624.6 32.9
+625.6 5.2
+626.3 1.1
+627.6 15.8
+628.3 4.6
+629.4 0.8
+630.9 4.8
+631.7 17.7
+632.5 2.0
+633.3 1.9
+634.8 4.5
+635.5 9.6
+636.3 4.3
+637.3 1.8
+639.3 6.1
+640.0 29.1
+641.0 24.8
+642.3 6.2
+643.2 5.3
+646.3 2.1
+647.3 2.4
+649.2 38.0
+650.1 9.8
+650.9 3.1
+653.1 7.8
+654.3 3.3
+655.2 2.6
+657.0 7.7
+658.5 0.4
+659.6 3.8
+660.6 21.3
+661.5 6.3
+663.0 33.3
+664.1 14.7
+665.2 8.8
+666.5 2.3
+668.9 12.7
+670.1 0.9
+671.2 1.0
+673.3 8.3
+674.0 5.6
+675.2 3.9
+676.7 6.3
+677.5 5.5
+678.4 41.6
+679.4 25.5
+680.0 0.2
+681.1 1.0
+682.6 1.8
+684.0 6.0
+685.0 2.1
+685.9 7.1
+688.7 1.5
+689.9 4.8
+690.5 5.4
+691.4 2.1
+696.3 4.6
+697.5 14.5
+698.3 9.7
+699.1 1.2
+700.4 2.6
+701.4 1.3
+702.2 1.0
+705.5 6.3
+706.5 68.8
+707.6 21.5
+709.4 2.2
+712.2 0.9
+715.4 11.0
+717.4 2.3
+722.3 49.6
+723.3 14.5
+725.5 4.9
+726.5 7.0
+734.4 1.4
+735.7 1.2
+737.5 2.7
+740.2 1.3
+743.4 3.9
+745.4 3.6
+747.5 2.7
+748.6 1.8
+749.2 2.1
+752.3 3.4
+755.7 0.6
+761.4 23.4
+762.4 15.9
+763.5 0.6
+767.4 2.3
+773.1 1.1
+778.9 1.6
+779.5 32.7
+780.5 23.0
+782.3 3.0
+787.1 1.7
+794.6 0.9
+805.4 5.8
+815.7 1.4
+821.6 2.2
+823.4 12.4
+824.4 4.3
+825.3 2.2
+826.7 1.3
+827.6 3.6
+829.0 1.2
+831.5 1.9
+832.5 2.0
+833.4 5.9
+836.3 1.5
+839.4 9.0
+841.6 1.0
+842.6 2.5
+847.1 6.1
+848.5 4.2
+849.4 0.8
+850.5 5.1
+853.3 1.7
+857.2 1.7
+862.2 1.0
+862.9 1.4
+863.6 2.4
+865.5 5.2
+867.0 0.2
+867.7 1.6
+868.5 3.4
+872.6 18.3
+873.6 1.9
+875.6 1.4
+876.4 1.9
+880.5 6.7
+883.7 1.4
+885.8 2.1
+888.9 0.9
+890.4 7.6
+892.0 0.4
+892.7 1.3
+893.7 1.9
+907.9 1.2
+910.3 3.6
+916.6 5.0
+918.6 0.5
+935.5 0.9
+937.7 3.0
+951.9 0.9
+969.7 1.1
+S	32	32	1032.79
+Z	3	3096.35
+303.4 2.7
+307.3 1.1
+317.1 0.7
+325.3 5.1
+326.3 2.6
+330.4 7.7
+338.9 2.9
+341.2 2.4
+342.1 2.3
+343.3 1.3
+369.5 2.6
+372.2 4.9
+380.2 1.2
+387.5 4.8
+389.2 2.2
+390.5 0.3
+397.3 1.8
+407.0 1.8
+411.4 6.3
+412.3 1.9
+413.2 2.4
+415.3 4.3
+423.3 1.5
+431.6 1.3
+437.2 0.5
+442.4 2.1
+443.2 3.8
+451.3 2.2
+453.3 2.0
+454.1 2.1
+466.0 3.7
+469.6 6.0
+470.5 0.9
+476.4 0.9
+480.6 2.4
+485.3 7.6
+487.1 0.5
+494.7 7.6
+497.5 2.6
+499.2 0.2
+501.7 2.8
+504.4 9.1
+509.2 1.3
+512.1 0.7
+512.9 1.8
+514.2 1.9
+524.3 4.4
+525.1 4.5
+526.4 2.3
+527.4 2.8
+528.4 1.5
+530.4 3.5
+534.5 1.6
+535.3 3.4
+543.5 0.5
+544.7 1.0
+551.8 2.8
+552.4 0.5
+553.8 2.4
+558.1 0.6
+559.4 4.4
+567.3 1.2
+572.0 29.2
+572.9 3.8
+575.4 1.3
+578.0 4.9
+580.3 2.2
+582.3 3.7
+583.3 0.8
+584.0 1.6
+585.5 0.4
+590.6 1.0
+601.4 0.9
+605.5 0.4
+607.8 23.8
+608.5 6.2
+616.1 1.6
+617.5 1.2
+618.6 8.7
+619.4 4.8
+620.6 0.6
+624.2 3.6
+629.3 1.2
+631.3 1.0
+634.0 2.7
+638.7 2.8
+640.3 1.3
+645.6 1.6
+653.7 2.0
+655.3 1.9
+657.0 1.2
+665.6 0.7
+666.3 4.6
+673.0 1.0
+674.4 7.7
+675.5 1.4
+683.4 4.0
+687.5 1.8
+689.4 36.5
+690.4 18.5
+691.3 2.4
+693.4 8.6
+696.6 2.9
+698.9 3.2
+703.2 0.5
+704.2 2.5
+706.7 7.0
+707.4 5.3
+710.2 2.4
+711.3 6.4
+712.9 2.9
+713.6 5.3
+714.5 4.9
+719.1 4.2
+725.9 0.9
+727.6 2.0
+729.4 2.7
+731.3 1.3
+736.5 3.3
+737.6 8.3
+742.2 1.8
+744.7 3.4
+746.1 3.7
+748.0 2.9
+749.2 6.2
+750.4 1.4
+752.0 0.5
+753.4 4.7
+758.2 2.5
+759.4 2.3
+762.3 26.0
+763.2 0.7
+764.3 6.3
+765.3 8.8
+769.4 18.4
+770.8 33.5
+771.4 19.3
+772.2 19.7
+773.8 3.9
+778.0 288.9
+778.7 256.3
+779.7 13.6
+780.6 2.8
+782.4 6.1
+784.2 1.7
+785.4 4.8
+794.4 3.2
+796.3 4.6
+799.2 3.7
+802.6 26.7
+803.5 7.9
+806.2 7.6
+810.6 10.5
+814.6 3.3
+815.7 0.6
+817.4 1.1
+820.8 2.0
+821.5 1.3
+822.1 1.1
+823.3 3.7
+824.3 9.3
+826.4 1.8
+827.5 5.8
+828.7 0.3
+833.4 38.0
+834.0 2.9
+836.8 0.8
+840.6 1.0
+842.3 82.2
+843.3 27.5
+845.5 6.6
+847.0 0.3
+848.2 6.3
+849.2 3.0
+850.2 4.9
+854.1 1.1
+855.5 4.4
+858.3 2.8
+859.1 0.7
+861.6 5.4
+863.6 5.0
+864.5 2.5
+867.1 1.8
+868.7 1.4
+869.5 5.2
+870.4 3.3
+874.2 5.3
+878.3 11.4
+879.7 9.6
+880.5 2.9
+881.5 5.1
+882.3 1.1
+883.6 4.6
+884.7 3.7
+886.4 0.6
+888.7 3.2
+889.9 12.0
+890.5 1.8
+892.2 4.1
+893.6 2.3
+894.2 4.0
+895.8 6.5
+896.8 1.4
+898.7 2.8
+899.7 7.2
+900.6 0.2
+901.4 1.2
+902.5 7.2
+905.8 3.8
+907.5 3.9
+911.2 4.1
+912.6 9.0
+914.3 0.5
+915.4 6.5
+917.5 16.1
+918.6 13.7
+919.5 3.5
+922.8 15.9
+923.6 3.3
+925.2 1.6
+926.3 3.1
+927.7 10.0
+928.6 0.5
+929.3 3.6
+930.6 1.9
+931.6 19.5
+932.4 17.1
+933.2 5.0
+934.1 4.1
+935.7 2.6
+936.4 3.1
+937.2 3.7
+938.2 4.2
+940.3 359.4
+941.3 143.9
+942.4 14.0
+943.7 4.7
+944.8 6.8
+946.0 18.6
+947.2 12.0
+948.1 8.5
+950.8 2.4
+952.2 8.9
+953.0 12.0
+956.1 15.1
+957.2 21.3
+958.0 1.3
+959.3 7.9
+960.7 12.4
+962.4 14.2
+963.5 7.4
+964.9 5.0
+966.6 7.4
+967.8 20.4
+968.9 12.1
+970.5 3.4
+971.4 1.3
+972.3 0.9
+973.8 3.8
+974.6 26.3
+975.5 5.3
+977.3 118.0
+978.1 85.3
+979.1 16.3
+980.0 24.1
+980.6 2.8
+981.6 3.2
+982.2 5.6
+983.3 3.8
+984.1 17.6
+984.9 8.3
+985.9 3.8
+986.7 0.6
+987.5 3.8
+988.9 2.5
+990.6 13.4
+991.4 4.6
+992.5 12.5
+993.6 16.5
+994.4 1.7
+995.8 9.8
+996.8 21.2
+997.9 9.7
+998.6 30.1
+999.3 24.4
+1000.0 7.3
+1000.7 14.8
+1001.6 8.8
+1002.3 18.4
+1003.3 22.4
+1003.9 31.6
+1005.0 2.7
+1006.1 0.8
+1007.5 14.1
+1009.5 23.5
+1010.2 26.4
+1010.9 13.7
+1011.5 21.9
+1013.4 16.2
+1014.4 25.7
+1015.4 23.8
+1016.7 24.5
+1017.6 10.2
+1018.6 14.7
+1020.4 2.1
+1022.3 9.3
+1022.9 5.9
+1028.6 1.5
+1029.6 3.3
+1033.7 5.9
+1035.0 10.0
+1042.1 4.6
+1043.8 3.9
+1048.9 9.8
+1050.4 4.4
+1051.6 0.4
+1052.2 4.2
+1057.7 0.8
+1059.8 3.5
+1067.8 1.3
+1068.4 3.4
+1069.4 2.6
+1070.6 1.4
+1072.2 5.5
+1075.3 1.2
+1075.9 0.6
+1077.3 6.1
+1078.2 9.1
+1078.8 0.4
+1079.5 2.8
+1083.7 0.4
+1085.0 11.7
+1087.5 2.4
+1088.3 1.3
+1089.8 7.5
+1090.6 13.3
+1095.2 2.4
+1097.4 0.8
+1105.7 0.9
+1108.6 12.9
+1114.0 4.8
+1114.7 3.6
+1117.1 9.1
+1119.5 1.2
+1123.7 3.8
+1125.0 0.8
+1126.7 3.3
+1130.4 4.1
+1131.7 2.3
+1133.2 6.4
+1133.8 6.3
+1137.7 0.4
+1138.6 5.4
+1142.5 72.0
+1143.6 68.3
+1144.5 2.6
+1145.6 11.0
+1146.3 4.0
+1148.3 13.5
+1150.8 2.7
+1154.5 2.0
+1158.5 27.1
+1159.3 15.2
+1161.2 6.2
+1162.0 9.8
+1162.7 2.5
+1164.3 4.4
+1166.2 10.1
+1167.6 20.2
+1168.9 1.6
+1169.6 2.2
+1171.7 1.8
+1174.4 3.3
+1178.2 3.6
+1179.1 7.5
+1180.2 0.9
+1181.0 0.8
+1183.6 3.8
+1185.2 4.4
+1186.2 14.8
+1188.3 4.8
+1194.5 22.4
+1195.7 12.9
+1197.5 6.4
+1198.4 22.3
+1199.2 47.5
+1200.5 14.1
+1201.7 4.7
+1203.8 27.7
+1204.5 47.9
+1205.6 17.3
+1206.6 5.7
+1207.6 11.9
+1208.7 1.3
+1211.3 1.5
+1213.3 22.4
+1214.0 7.4
+1214.6 12.8
+1216.4 183.6
+1217.6 105.5
+1218.7 15.9
+1219.5 10.7
+1220.4 0.7
+1221.6 4.2
+1225.7 4.0
+1227.8 1.9
+1233.6 13.4
+1234.3 3.1
+1235.5 4.9
+1238.3 2.2
+1239.4 19.5
+1240.1 29.0
+1240.7 4.8
+1242.8 14.4
+1244.8 0.5
+1247.0 6.9
+1247.6 9.6
+1248.2 31.7
+1249.2 4.8
+1250.6 9.6
+1255.5 3.7
+1256.1 2.2
+1258.8 0.4
+1260.3 2.8
+1262.8 11.9
+1265.5 1.9
+1267.0 4.0
+1271.8 1.2
+1273.3 3.9
+1274.3 5.0
+1275.7 2.0
+1277.7 21.4
+1278.6 8.3
+1283.7 20.7
+1284.4 8.1
+1291.8 1.6
+1296.5 28.6
+1297.6 5.9
+1298.5 12.8
+1300.7 4.4
+1302.7 4.9
+1306.6 3.3
+1307.5 0.6
+1309.3 6.1
+1310.1 4.4
+1311.8 4.8
+1313.7 1.6
+1314.6 1.0
+1316.8 0.5
+1318.1 8.8
+1320.0 12.3
+1322.6 0.6
+1324.3 3.1
+1326.0 3.6
+1328.2 12.7
+1328.9 2.5
+1329.7 14.4
+1331.7 5.6
+1333.3 50.7
+1334.4 10.0
+1335.6 1.6
+1336.2 7.3
+1338.2 4.8
+1340.0 6.5
+1342.0 64.2
+1342.7 68.2
+1344.7 4.1
+1345.8 3.8
+1350.9 1.4
+1353.4 1.6
+1354.2 3.5
+1355.6 27.0
+1356.3 9.5
+1357.0 1.4
+1358.6 5.6
+1362.0 11.7
+1362.9 21.4
+1363.9 8.9
+1365.4 0.9
+1369.4 11.1
+1374.7 3.5
+1377.3 6.1
+1379.7 1.5
+1381.3 6.0
+1384.7 2.8
+1389.1 0.8
+1390.6 1.3
+1391.4 5.9
+1394.6 13.1
+1395.5 3.2
+1396.2 20.7
+1397.6 8.0
+1406.8 10.6
+1408.7 2.0
+1410.0 13.4
+1411.0 2.3
+1412.1 14.1
+1412.7 38.4
+1413.6 43.7
+1414.8 16.0
+1416.0 7.7
+1416.9 2.3
+1418.5 13.6
+1419.2 9.8
+1420.4 6.6
+1422.0 7.3
+1425.0 6.8
+1425.7 3.4
+1428.0 9.6
+1431.8 12.2
+1433.6 3.2
+1434.9 3.5
+1436.5 5.8
+1437.2 4.5
+1439.3 1.3
+1440.2 14.4
+1441.7 0.8
+1445.1 0.5
+1447.1 7.3
+1449.5 1.5
+1453.9 8.8
+1457.0 0.4
+1457.8 1.3
+1461.2 1.0
+1461.8 0.2
+1463.5 5.1
+1464.2 10.0
+1465.8 5.7
+1469.5 0.5
+1470.6 6.6
+1471.7 3.1
+1472.5 8.9
+1473.8 10.1
+1474.7 16.9
+1475.5 2.5
+1476.2 19.9
+1477.2 0.4
+1480.4 2.0
+1488.7 4.9
+1489.5 3.8
+1491.1 4.3
+1492.5 8.5
+1505.8 1.5
+1508.8 0.3
+1516.9 0.6
+1518.7 1.8
+1519.7 1.1
+1520.7 7.4
+1522.7 21.7
+1523.7 17.9
+1524.8 4.8
+1525.9 0.2
+1527.7 2.0
+1536.8 9.9
+1538.7 2.2
+1540.6 148.2
+1541.6 82.9
+1542.6 68.0
+1543.8 19.3
+1544.7 0.5
+1553.1 1.3
+1554.8 61.6
+1555.6 55.8
+1556.7 36.8
+1557.8 15.1
+1564.6 4.5
+1571.7 2.5
+1573.5 1.9
+1577.6 0.3
+1582.1 1.8
+1582.8 1.8
+1584.1 1.8
+1585.9 2.3
+1602.7 2.2
+1619.6 4.8
+1620.4 2.9
+1624.5 9.0
+1627.0 2.8
+1629.4 0.5
+1633.8 1.1
+1636.7 2.8
+1658.3 0.7
+1665.9 3.0
+1682.6 7.7
+1683.8 4.3
+1688.9 2.2
+1701.9 1.1
+1703.6 2.9
+1715.9 1.2
+1716.9 0.5
+1718.9 1.1
+1721.1 1.2
+1725.9 4.0
+1734.0 4.6
+1740.2 1.3
+1747.8 2.0
+1756.0 1.1
+1759.8 0.8
+1763.0 3.2
+1766.7 10.5
+1783.7 0.3
+1785.2 0.7
+1789.9 0.7
+1791.4 0.3
+1799.1 5.3
+1800.1 9.1
+1801.7 1.3
+1812.5 0.7
+1840.0 0.5
+1864.8 3.3
+1875.4 2.8
+1879.1 2.8
+1881.7 7.2
+1882.7 3.2
+1883.9 4.8
+1896.4 3.5
+1901.9 3.5
+1903.1 1.4
+1904.0 1.6
+1911.6 4.3
+1912.3 2.8
+1913.0 7.0
+1913.7 4.9
+1915.8 2.1
+1934.2 1.8
+1935.7 3.9
+1936.9 1.0
+1943.9 3.6
+1948.3 1.1
+1949.0 0.3
+1952.8 5.2
+1954.4 4.8
+1955.2 1.0
+1973.6 2.6
+1974.5 1.6
+S	33	33	433.79
+I	ID	58
+I	RTime	2.6604
+Z	2	866.57
+Z	3	1299.35
+140.8 1.3
+150.9 2.2
+171.2 3.0
+198.8 4.5
+216.5 4.0
+235.0 2.4
+240.2 5.3
+247.2 4.4
+249.0 3.0
+257.1 2.0
+258.9 1.6
+271.1 1.8
+274.8 6.3
+277.4 1.8
+279.6 1.5
+282.6 3.9
+287.6 4.3
+288.6 5.0
+289.3 3.2
+293.1 5.0
+299.3 2.2
+303.5 2.7
+305.0 3.9
+306.0 6.0
+306.9 2.2
+316.0 2.0
+319.1 1.6
+321.0 10.1
+322.0 6.6
+323.0 1.7
+326.1 5.5
+327.2 6.4
+329.3 1.7
+335.0 10.3
+336.0 1.0
+336.8 1.0
+338.6 9.1
+343.0 25.6
+344.0 16.0
+345.1 43.0
+348.9 1.6
+355.0 11.8
+358.3 3.0
+359.2 2.7
+360.8 24.7
+362.0 15.3
+362.7 18.2
+365.0 1.2
+366.6 11.5
+373.3 1.6
+374.5 7.1
+378.8 1.2
+381.0 2.0
+382.4 6.9
+386.7 5.6
+389.9 4.1
+397.9 16.7
+399.4 8.8
+401.1 3.0
+403.4 1.0
+406.8 0.8
+408.0 16.7
+413.2 12.0
+413.9 0.8
+415.0 27.2
+416.1 6.0
+417.0 10.6
+421.4 11.5
+423.8 11.1
+425.6 8.1
+434.8 1.7
+468.3 1.7
+476.9 8.0
+480.4 1.5
+483.7 5.5
+486.2 21.5
+490.8 17.0
+496.3 5.0
+497.0 6.9
+501.1 3.7
+505.4 20.2
+508.2 9.8
+509.5 9.8
+512.6 17.3
+514.7 6.1
+520.4 5.1
+523.4 7.3
+525.0 10.3
+527.4 15.3
+529.8 6.5
+535.8 4.4
+538.6 57.7
+559.1 4.3
+572.1 6.4
+582.1 15.1
+596.3 3.4
+682.5 3.5
+711.0 3.9
+S	34	34	750.92
+Z	2	1500.83
+213.1 1.9
+216.1 8.9
+218.0 0.5
+223.3 3.1
+225.2 1.1
+226.4 5.2
+228.3 9.3
+229.2 4.8
+230.5 9.8
+231.3 12.5
+238.6 4.5
+239.3 3.1
+240.1 0.7
+241.2 10.9
+243.1 1.0
+244.2 1.4
+248.3 4.0
+253.3 1.1
+254.3 4.6
+255.2 2.0
+256.2 10.5
+257.3 0.8
+258.2 16.0
+258.9 2.4
+265.2 0.4
+266.2 10.0
+268.1 2.1
+268.9 13.2
+270.4 4.5
+271.4 6.4
+272.4 7.2
+273.1 2.3
+274.2 1.2
+276.3 108.7
+277.3 11.9
+282.2 6.8
+284.4 2.7
+285.2 0.7
+286.2 5.0
+287.3 28.2
+288.3 11.1
+292.2 2.1
+293.1 2.4
+293.7 6.8
+297.3 7.7
+299.3 17.7
+301.4 1.5
+303.2 6.9
+310.2 1.6
+311.3 6.2
+313.4 5.6
+314.5 10.5
+315.1 8.4
+316.2 2.8
+317.2 8.1
+319.1 13.5
+320.3 9.4
+324.2 9.4
+326.2 2.5
+327.2 12.3
+328.4 13.6
+330.1 6.4
+330.9 4.3
+332.5 1.6
+335.3 7.4
+336.2 2.7
+337.6 3.2
+338.3 4.6
+339.4 6.7
+340.3 10.2
+341.2 2.3
+342.3 2.8
+344.6 5.2
+346.2 9.1
+350.6 6.5
+351.3 2.0
+352.7 2.5
+356.6 6.8
+358.3 24.4
+359.5 8.8
+360.7 2.6
+361.5 4.0
+364.2 3.3
+367.1 5.1
+368.2 6.2
+369.4 6.7
+370.6 9.3
+372.3 15.2
+373.1 26.8
+374.4 11.8
+376.2 31.4
+377.3 17.4
+382.5 3.4
+384.4 13.5
+385.7 20.2
+386.4 21.2
+387.5 4.2
+388.5 1.0
+389.5 5.0
+390.4 49.9
+391.4 9.4
+392.5 2.7
+395.4 8.2
+396.4 6.5
+398.4 6.8
+399.3 5.6
+400.3 5.1
+402.4 7.7
+403.3 2.6
+405.5 6.8
+406.5 0.5
+410.1 11.3
+411.4 1.3
+412.2 5.3
+413.3 5.7
+414.5 1.8
+415.3 5.0
+417.6 0.6
+418.2 0.6
+419.3 2.5
+420.4 12.5
+421.3 6.4
+422.4 20.9
+427.2 2.5
+428.2 8.4
+429.3 16.8
+430.5 7.2
+431.4 15.8
+432.3 7.4
+434.5 2.9
+435.2 15.8
+438.1 3.0
+439.6 10.2
+440.3 17.1
+442.6 5.4
+443.6 9.3
+445.2 17.4
+446.3 7.0
+447.5 28.2
+449.1 3.9
+451.3 2.8
+452.4 8.0
+453.6 1.6
+455.3 21.2
+456.3 19.6
+458.1 6.7
+458.8 0.4
+459.5 2.2
+461.5 4.6
+462.2 5.0
+463.3 90.9
+464.3 11.0
+465.5 11.4
+466.5 1.5
+469.2 7.0
+470.2 18.9
+471.4 8.3
+473.5 19.6
+474.6 11.2
+475.9 18.8
+476.6 1.6
+477.6 11.0
+480.3 4.1
+483.8 17.5
+484.8 14.5
+485.6 31.9
+486.3 13.2
+487.1 8.3
+489.0 2.2
+491.4 2.6
+492.4 2.7
+495.6 8.7
+496.4 1.7
+497.4 4.9
+498.7 4.6
+500.5 9.1
+502.4 26.4
+503.5 4.7
+504.9 12.9
+505.5 5.1
+508.5 30.5
+509.5 13.6
+512.3 5.2
+513.7 6.5
+514.5 5.6
+515.3 4.6
+516.1 12.1
+516.7 12.9
+518.6 12.0
+520.1 8.2
+522.4 5.4
+523.5 5.0
+526.5 38.1
+527.4 13.1
+528.5 20.7
+529.7 2.9
+530.5 13.2
+531.3 11.1
+532.5 21.9
+533.4 33.4
+534.4 35.1
+535.5 9.7
+536.6 12.6
+537.4 8.6
+538.6 4.3
+539.6 13.0
+541.8 17.8
+542.5 3.4
+543.3 10.9
+545.3 22.2
+546.1 22.4
+547.9 15.9
+548.6 93.6
+549.6 29.0
+550.4 8.4
+551.6 10.0
+553.1 17.7
+554.5 20.0
+555.1 15.3
+556.2 9.0
+557.8 17.4
+558.9 16.1
+560.3 23.0
+561.6 2.2
+562.4 7.3
+563.4 25.6
+566.5 21.5
+567.5 2.8
+568.2 1.9
+569.0 27.8
+570.6 11.3
+571.4 21.6
+572.6 28.4
+573.4 2.7
+574.0 8.3
+575.5 6.0
+576.7 25.0
+577.4 31.3
+578.2 13.2
+578.9 30.5
+579.5 12.4
+580.9 33.4
+581.9 14.5
+583.5 12.9
+584.3 4.5
+585.9 47.9
+586.6 14.1
+587.4 35.0
+589.3 47.8
+590.8 13.9
+592.1 53.8
+593.5 8.8
+594.4 84.6
+595.4 30.4
+596.4 5.5
+598.4 74.0
+599.3 20.5
+600.3 38.1
+601.3 36.5
+602.0 17.6
+603.3 60.2
+604.4 22.7
+605.4 8.2
+606.7 18.7
+607.5 12.5
+609.4 41.4
+610.5 23.3
+611.6 17.5
+612.2 9.2
+613.2 23.0
+614.1 11.7
+614.8 17.7
+615.4 9.5
+616.1 7.1
+618.4 122.0
+619.0 85.6
+619.7 32.3
+620.6 14.7
+621.3 65.8
+622.1 41.6
+623.1 12.0
+624.2 28.7
+625.5 21.8
+627.4 186.4
+628.1 158.0
+629.2 16.9
+630.4 39.9
+631.3 77.9
+632.1 94.0
+633.2 31.1
+634.1 28.2
+635.6 34.1
+636.6 47.7
+637.8 22.5
+639.2 28.7
+640.3 63.4
+641.5 35.8
+642.5 21.5
+643.9 35.4
+645.4 132.7
+646.7 43.9
+648.2 288.1
+649.1 133.6
+650.0 23.2
+650.7 6.2
+651.5 0.9
+652.5 6.0
+654.1 510.7
+655.1 233.2
+656.4 16.8
+657.4 20.2
+658.4 6.0
+659.5 18.5
+660.4 48.3
+661.6 40.3
+662.9 499.4
+663.6 377.2
+664.7 25.3
+665.6 78.4
+666.3 14.1
+667.6 9.8
+668.4 44.1
+669.2 16.1
+670.4 47.0
+671.4 74.1
+672.1 234.9
+672.7 213.5
+674.6 53.7
+675.9 61.3
+676.9 94.5
+677.7 96.9
+678.4 217.3
+679.7 52.1
+680.4 47.4
+681.4 22.8
+683.5 163.2
+684.6 162.7
+685.6 128.5
+686.8 46.1
+687.5 59.6
+688.7 140.1
+689.6 91.9
+690.4 51.8
+691.6 67.5
+692.9 42.2
+694.1 34.7
+695.2 25.5
+696.1 13.8
+697.4 666.9
+698.1 564.9
+698.9 95.5
+699.6 123.3
+700.7 19.8
+701.7 34.2
+702.7 21.2
+703.5 53.1
+704.7 38.6
+705.5 82.1
+706.6 956.8
+707.5 142.9
+708.2 56.9
+709.4 7.6
+710.7 135.1
+711.9 377.7
+712.6 553.7
+713.6 126.2
+714.7 53.7
+715.5 103.4
+716.6 37.1
+717.5 24.0
+718.1 4.9
+719.4 54.2
+720.3 87.3
+721.3 22.2
+722.3 162.8
+723.0 35.2
+723.7 83.0
+724.8 131.9
+725.6 48.1
+726.7 10.0
+727.4 88.4
+728.4 156.4
+729.3 115.3
+730.0 33.7
+731.2 56.4
+732.0 232.2
+733.3 741.4
+734.3 273.4
+735.9 72.4
+736.9 68.0
+738.0 40.2
+739.0 29.1
+740.4 345.9
+741.2 469.6
+741.9 1000.8
+742.6 1266.6
+743.7 32.5
+744.5 8.5
+747.8 1.8
+752.4 3.5
+753.7 2.4
+756.2 6.0
+757.0 9.7
+761.2 22.7
+761.8 2.9
+763.5 6.9
+764.6 20.2
+765.4 22.0
+766.3 9.9
+767.2 11.3
+768.5 2.9
+769.4 43.2
+770.6 28.1
+771.5 10.8
+772.3 2.7
+776.7 2.3
+777.8 3.9
+778.7 26.8
+779.4 141.4
+780.3 60.3
+781.5 8.2
+783.4 5.2
+785.3 4.3
+786.4 3.4
+787.4 24.4
+788.4 12.8
+789.2 0.5
+790.0 4.9
+791.6 4.7
+792.3 3.4
+793.6 10.5
+794.8 8.9
+795.8 1.5
+796.6 17.7
+797.7 35.8
+798.5 1.7
+799.6 9.7
+800.5 31.3
+801.9 13.6
+802.7 15.9
+805.5 28.6
+806.7 39.5
+807.5 7.9
+809.6 13.2
+811.2 3.5
+813.7 9.3
+815.5 4.6
+816.2 11.0
+818.4 7.1
+820.7 5.5
+823.5 90.9
+824.5 53.5
+825.5 4.1
+826.2 3.9
+827.3 4.3
+828.0 11.7
+829.2 7.3
+830.4 10.3
+832.3 4.6
+834.2 8.3
+836.9 14.7
+838.5 21.1
+839.6 2.0
+841.8 12.3
+842.6 3.2
+843.9 10.1
+844.6 16.5
+845.8 24.1
+846.6 2.2
+848.6 0.9
+850.3 9.5
+851.4 7.7
+852.3 11.8
+853.1 13.9
+854.5 1.0
+855.4 6.7
+860.7 3.9
+861.5 9.4
+862.6 10.1
+863.5 32.4
+864.5 14.8
+867.2 14.5
+868.4 2.0
+869.8 7.1
+871.4 36.3
+872.5 21.6
+873.3 2.5
+875.3 4.9
+877.3 6.8
+878.7 25.2
+879.8 33.3
+880.4 55.3
+881.4 33.9
+882.6 1.4
+883.4 6.2
+884.3 2.3
+885.5 11.1
+886.5 11.8
+887.8 11.2
+889.3 66.2
+890.5 46.9
+891.5 67.4
+892.5 5.9
+894.6 4.7
+895.5 8.3
+896.7 68.5
+897.9 69.9
+898.7 24.4
+899.6 3.5
+901.5 8.1
+902.7 16.7
+903.6 8.1
+905.7 21.0
+907.3 116.0
+908.4 5.6
+909.4 2.5
+910.4 7.0
+911.9 16.5
+913.3 26.6
+915.5 25.2
+916.1 2.8
+917.6 4.2
+919.1 3.4
+920.0 6.2
+921.7 10.5
+923.7 11.2
+924.5 7.0
+925.4 21.6
+926.9 4.1
+931.3 0.8
+932.5 13.7
+933.4 7.3
+935.7 5.6
+936.5 26.1
+938.2 20.3
+939.0 1.4
+940.7 3.2
+943.2 16.8
+947.8 5.3
+949.2 16.8
+950.0 7.9
+950.6 24.0
+951.6 23.0
+952.9 7.6
+954.3 2.8
+957.1 2.5
+960.7 21.8
+961.5 6.7
+962.5 9.1
+963.6 2.4
+964.4 5.2
+965.6 13.3
+966.7 26.3
+967.5 103.9
+968.6 106.4
+969.5 29.0
+970.2 15.7
+971.4 2.3
+972.8 25.7
+973.8 17.7
+975.5 4.5
+976.3 2.0
+978.4 26.9
+979.6 14.6
+980.7 2.1
+983.2 7.3
+984.5 15.7
+986.5 8.2
+987.2 3.9
+988.1 11.8
+989.4 4.3
+990.5 2.6
+991.5 1.5
+992.3 10.3
+993.4 14.9
+994.9 11.8
+996.3 20.1
+997.8 14.6
+998.7 1.4
+1002.9 17.1
+1003.5 18.1
+1004.6 25.4
+1005.7 0.8
+1006.9 5.0
+1007.6 13.8
+1008.6 15.7
+1010.2 14.3
+1011.5 2.0
+1012.3 1.1
+1013.5 7.7
+1015.8 15.1
+1016.5 8.1
+1017.9 18.5
+1019.7 11.0
+1020.4 55.1
+1021.4 57.5
+1022.4 38.5
+1024.1 10.8
+1024.9 8.5
+1025.6 16.8
+1026.6 8.1
+1027.7 4.3
+1028.8 4.9
+1029.6 3.8
+1030.7 8.6
+1031.5 39.8
+1032.6 27.6
+1033.6 5.3
+1036.8 20.2
+1037.9 35.2
+1038.6 123.4
+1039.4 94.6
+1040.1 25.1
+1040.7 15.5
+1041.6 19.4
+1042.6 17.7
+1043.8 80.8
+1044.6 4.8
+1045.5 8.0
+1047.2 8.2
+1049.0 12.4
+1049.7 52.3
+1050.5 8.5
+1051.2 6.8
+1052.6 10.8
+1054.4 61.9
+1055.7 24.6
+1056.6 11.3
+1057.7 3.9
+1058.7 10.0
+1060.3 0.6
+1061.8 7.1
+1062.7 3.3
+1064.5 5.4
+1067.3 4.1
+1071.3 11.9
+1072.7 12.9
+1073.7 13.4
+1077.3 4.0
+1078.3 6.7
+1079.0 8.3
+1079.6 2.5
+1085.0 12.6
+1086.3 6.9
+1088.7 3.6
+1089.4 1.0
+1090.8 16.6
+1091.7 4.5
+1092.8 5.4
+1093.6 5.8
+1094.4 13.0
+1095.6 36.3
+1096.7 27.4
+1097.8 19.2
+1099.2 1.4
+1102.7 6.7
+1107.1 36.9
+1107.8 43.4
+1108.6 47.7
+1109.6 23.6
+1110.5 11.3
+1111.5 200.0
+1112.7 127.1
+1113.7 5.1
+1115.3 5.7
+1116.1 2.8
+1116.7 3.0
+1118.3 9.9
+1119.3 1.0
+1122.5 2.7
+1123.6 4.6
+1124.6 3.6
+1125.5 162.2
+1126.6 132.2
+1127.6 25.6
+1131.7 2.2
+1132.8 12.3
+1133.7 7.5
+1134.8 7.9
+1135.7 9.1
+1136.9 28.1
+1137.6 15.9
+1138.4 6.0
+1139.5 1.5
+1142.6 10.9
+1143.6 14.0
+1144.6 3.8
+1147.3 3.9
+1150.5 1.4
+1155.8 2.9
+1156.4 1.1
+1157.8 1.5
+1159.7 13.4
+1160.4 3.2
+1161.2 8.7
+1162.8 9.3
+1163.7 0.4
+1165.7 8.0
+1166.7 1.4
+1167.7 4.0
+1169.0 10.5
+1169.8 4.9
+1170.6 7.6
+1171.9 4.1
+1172.8 5.1
+1173.7 2.5
+1177.0 15.5
+1178.3 7.6
+1179.7 5.8
+1181.0 2.6
+1181.6 1.0
+1183.3 4.2
+1184.6 8.5
+1187.0 8.1
+1188.6 4.7
+1190.0 14.0
+1190.8 2.5
+1192.5 9.9
+1194.7 2.9
+1196.0 32.1
+1196.7 60.1
+1197.5 14.2
+1198.1 4.8
+1199.6 4.1
+1201.9 1.6
+1203.6 2.0
+1205.6 6.0
+1207.5 34.1
+1208.6 39.9
+1209.6 7.5
+1217.1 1.9
+1225.5 291.8
+1226.6 179.9
+1227.7 59.3
+1228.8 8.7
+1229.9 6.1
+1235.6 0.9
+1236.6 6.9
+1237.7 7.2
+1239.9 7.2
+1240.8 4.6
+1241.7 5.1
+1243.9 1.3
+1245.7 4.0
+1247.5 3.9
+1249.5 4.5
+1253.7 50.9
+1254.7 27.6
+1255.8 19.7
+1257.6 4.9
+1259.5 7.4
+1266.6 10.7
+1268.3 4.9
+1269.8 2.9
+1275.6 4.5
+1277.4 5.6
+1278.1 5.7
+1281.9 1.6
+1285.8 6.6
+1294.7 39.0
+1295.8 34.3
+1296.8 7.0
+1297.9 7.7
+1323.5 3.7
+1324.2 4.7
+1325.1 9.8
+1325.8 1.4
+1326.9 4.2
+1327.6 3.0
+1330.4 3.2
+1337.5 3.3
+1346.3 4.4
+1354.6 10.4
+1355.8 5.3
+1362.7 3.9
+1372.4 3.6
+1379.3 11.2
+1382.6 0.8
+1384.5 4.0
+1442.0 3.3
+S	35	35	709.07
+I	ID	217
+I	RTime	10.7439
+Z	1	709.07
+198.2 4.0
+213.0 1.3
+241.1 1.3
+246.0 3.0
+250.9 1.0
+260.1 2.5
+262.1 2.2
+267.9 1.7
+285.8 2.5
+291.0 24.3
+293.8 1.6
+304.1 2.2
+320.2 5.0
+321.3 4.5
+329.3 2.0
+329.9 3.7
+364.2 1.1
+390.8 3.5
+415.2 1.7
+416.5 4.9
+418.4 3.9
+428.3 2.5
+433.4 4.5
+437.2 1.8
+439.5 1.2
+440.7 8.8
+441.4 1.7
+452.1 5.0
+458.3 7.0
+467.0 1.7
+472.3 1.2
+478.4 2.9
+483.2 1.8
+495.2 10.3
+502.3 1.7
+505.2 2.0
+525.1 2.7
+529.0 2.5
+541.3 1.8
+545.2 4.5
+546.4 2.7
+558.3 7.5
+561.4 0.8
+564.2 1.2
+568.5 2.0
+573.0 6.3
+587.6 4.0
+590.3 2.5
+594.3 2.2
+597.0 1.2
+601.8 3.9
+602.5 11.8
+603.5 11.1
+604.2 3.7
+613.5 4.4
+630.4 2.0
+635.3 4.3
+637.5 4.3
+651.3 9.8
+651.9 4.4
+653.2 1.2
+662.0 4.5
+667.4 4.3
+677.2 5.9
+678.4 4.5
+690.4 33.2
+691.5 8.3
+692.5 2.2
+693.4 3.7
+699.8 25.7
+701.0 4.5
+762.6 2.2
+827.1 3.0
+893.4 1.7
+1113.8 4.0
+1127.7 1.6
+1241.5 1.3
+S	36	36	427.38
+I	ID	80
+I	RTime	3.7051
+Z	2	853.75
+126.9 4.9
+129.1 12.8
+138.0 1.0
+140.1 0.8
+141.1 2.9
+146.9 3.2
+150.8 2.7
+155.1 21.7
+171.2 1.2
+175.1 2.2
+178.1 1.2
+184.1 0.8
+188.2 1.2
+191.2 2.9
+200.3 1.2
+201.3 2.2
+203.0 1.2
+204.3 1.0
+208.3 1.2
+210.4 2.5
+212.8 1.6
+218.1 4.9
+219.0 3.4
+224.1 1.3
+226.0 2.0
+232.0 6.5
+233.0 1.1
+234.2 2.9
+235.1 0.8
+237.1 2.0
+239.2 3.2
+247.8 1.2
+249.0 7.1
+250.0 1.2
+251.3 4.4
+252.0 3.2
+253.2 1.2
+254.8 1.5
+256.0 2.7
+258.0 3.2
+261.4 1.8
+264.3 3.2
+265.1 2.2
+267.1 6.0
+269.0 37.2
+269.7 0.8
+271.1 1.3
+272.0 4.5
+273.1 2.5
+277.1 5.8
+281.1 13.3
+282.2 7.5
+283.3 3.0
+286.9 12.1
+289.3 1.2
+290.3 4.3
+294.3 2.0
+295.4 1.8
+297.0 8.6
+298.1 8.6
+299.2 30.0
+300.2 41.7
+301.2 4.8
+303.2 3.5
+304.0 2.7
+307.2 1.2
+309.3 1.2
+310.3 2.7
+312.2 16.2
+313.2 4.3
+317.9 9.1
+318.6 12.3
+319.3 5.5
+320.7 2.7
+322.3 3.4
+325.3 6.9
+326.3 4.0
+327.3 1.7
+329.0 2.4
+330.8 5.3
+334.4 2.0
+336.4 3.0
+342.2 2.0
+347.3 1.5
+348.6 7.0
+349.7 55.4
+350.3 8.1
+351.0 1.3
+353.7 2.2
+354.4 5.3
+355.2 1.7
+357.1 1.7
+358.7 4.5
+360.0 1.6
+361.2 3.2
+362.6 193.6
+363.3 31.1
+364.6 1.6
+367.4 11.5
+368.2 3.9
+368.9 16.0
+370.3 6.4
+371.3 1.7
+373.5 1.0
+375.3 4.8
+377.6 2.5
+379.9 2.2
+381.2 15.5
+382.1 4.6
+383.3 3.7
+384.3 28.3
+386.5 3.7
+387.3 2.0
+389.1 5.5
+390.3 4.9
+391.2 18.5
+392.2 48.5
+393.5 5.9
+395.3 16.8
+396.1 10.1
+397.1 14.3
+398.1 22.5
+400.1 5.5
+401.0 1.7
+402.4 7.0
+403.7 10.1
+404.8 11.8
+405.8 8.3
+407.9 3.5
+409.2 97.5
+410.5 28.2
+411.3 26.5
+412.1 0.8
+412.7 3.2
+415.0 8.3
+415.9 2.7
+418.0 117.6
+419.0 39.0
+419.8 4.6
+420.7 0.8
+426.6 2.7
+439.6 1.5
+441.8 5.6
+444.9 2.0
+450.5 19.8
+451.3 1.5
+459.3 2.5
+466.2 1.0
+467.4 3.5
+474.4 1.7
+475.4 1.2
+476.3 5.4
+480.1 2.5
+481.4 1.6
+483.4 1.0
+489.1 3.4
+501.4 2.9
+503.4 2.0
+504.8 6.0
+505.6 5.4
+507.1 2.5
+516.6 8.3
+524.4 2.4
+528.4 20.7
+529.3 6.5
+530.5 1.1
+535.8 9.6
+538.9 7.3
+546.7 1.6
+550.2 1.7
+552.5 2.0
+554.0 3.0
+555.4 3.0
+564.5 1.7
+571.5 2.0
+572.4 5.8
+579.5 1.7
+580.5 1.1
+585.4 22.2
+586.1 1.6
+591.9 3.0
+594.3 1.2
+600.1 3.7
+601.3 3.0
+604.2 3.0
+605.3 1.7
+608.4 3.0
+611.3 8.3
+612.3 2.7
+613.5 0.8
+635.2 12.6
+640.2 0.8
+651.3 2.5
+653.2 2.5
+661.2 4.0
+667.4 1.8
+668.6 1.5
+678.4 2.0
+680.1 1.6
+682.3 1.7
+689.4 7.8
+690.3 7.1
+691.1 1.0
+693.2 4.0
+697.4 2.2
+698.5 144.5
+699.4 21.1
+700.3 15.8
+706.1 7.0
+707.3 10.0
+708.0 3.2
+715.3 4.4
+716.1 2.9
+726.3 0.8
+S	37	37	652.34
+Z	2	1303.67
+195.2 1.2
+197.4 0.8
+201.1 27.2
+208.2 1.7
+211.0 3.7
+212.8 0.5
+215.1 5.1
+220.3 0.8
+225.1 7.5
+227.0 0.8
+229.1 41.7
+230.0 1.3
+239.0 2.2
+239.9 1.2
+241.3 3.0
+242.0 11.3
+243.1 13.8
+247.2 2.5
+254.2 1.2
+257.4 3.4
+258.0 1.1
+260.2 3.5
+261.1 4.9
+265.1 1.7
+268.0 3.0
+272.2 10.8
+273.1 4.1
+274.2 3.2
+275.1 10.8
+276.3 4.0
+279.1 1.7
+281.0 1.1
+282.1 1.5
+283.1 0.8
+287.2 1.0
+288.2 2.5
+293.1 1.3
+294.3 1.1
+295.2 24.2
+301.2 0.6
+305.1 0.6
+306.0 0.6
+308.2 3.4
+309.1 0.8
+312.1 2.2
+313.2 0.8
+315.1 0.8
+317.2 2.0
+318.1 0.6
+321.9 2.2
+324.0 1.0
+325.1 0.6
+326.4 1.2
+328.1 1.3
+330.1 3.0
+331.3 0.8
+339.2 1.0
+340.1 3.7
+341.2 0.8
+342.0 0.6
+343.3 1.3
+346.2 20.7
+347.3 2.0
+353.1 3.2
+355.3 1.6
+356.1 6.1
+358.0 353.5
+359.1 2.7
+360.3 8.3
+361.3 1.5
+362.0 1.0
+363.2 1.2
+365.9 2.0
+372.3 2.0
+383.0 2.0
+384.1 2.0
+386.5 0.8
+388.1 0.8
+389.6 2.4
+393.2 2.2
+394.2 1.0
+395.2 0.8
+397.3 1.1
+398.8 0.8
+399.4 1.1
+400.4 1.7
+406.1 16.8
+410.2 1.0
+411.2 1.0
+412.2 2.0
+413.2 1.2
+414.3 2.9
+415.4 2.7
+416.3 1.8
+417.1 2.2
+419.1 2.5
+421.5 1.2
+422.4 2.2
+424.2 49.5
+425.3 11.8
+426.1 77.1
+426.9 2.0
+428.0 1.2
+429.3 1.7
+432.3 2.0
+435.3 13.0
+436.4 0.8
+437.4 1.7
+438.2 0.5
+438.9 2.2
+440.6 0.8
+441.2 5.8
+442.4 13.1
+443.1 113.5
+444.2 1.5
+445.2 11.5
+446.4 9.3
+447.3 1.0
+448.4 1.8
+451.1 0.8
+452.5 5.0
+453.2 21.0
+455.2 4.3
+456.2 8.3
+457.3 4.8
+458.2 3.2
+459.2 12.3
+460.4 2.4
+461.1 1.5
+463.3 2.5
+466.3 4.1
+468.2 4.0
+469.2 5.4
+471.1 2062.6
+471.8 8.5
+473.2 14.6
+474.2 5.9
+475.0 3.2
+476.2 1.3
+477.4 1.3
+479.4 3.9
+480.3 2.9
+481.4 5.1
+483.9 10.1
+485.2 3.9
+486.2 6.8
+487.1 1.2
+488.3 2.2
+489.2 2.5
+489.9 1.0
+491.3 3.0
+495.2 2.5
+496.1 1.2
+499.2 3.7
+500.0 2.2
+501.2 3.2
+502.0 10.3
+503.1 5.3
+504.0 2.7
+504.7 1.7
+506.0 0.8
+508.3 10.1
+510.1 1.5
+511.2 2.2
+512.4 1.8
+513.2 3.7
+514.4 6.0
+519.2 7.5
+520.1 8.8
+521.2 3.2
+522.1 4.1
+523.1 5.5
+524.1 2.0
+526.3 1.7
+526.9 0.6
+528.0 3.9
+529.4 7.0
+530.1 2.7
+532.0 8.5
+533.2 3.5
+533.8 5.5
+535.2 4.4
+536.5 2.5
+537.4 31.2
+538.8 9.1
+539.8 3.0
+541.0 3.2
+542.9 3.4
+545.0 2.7
+546.3 10.8
+550.0 3.2
+551.6 2.2
+552.5 10.0
+554.1 7.0
+555.0 5.0
+556.2 3.4
+557.1 1.2
+559.2 11.3
+560.3 18.2
+561.3 6.5
+562.2 4.0
+563.2 13.1
+564.6 7.3
+565.5 3.2
+566.5 4.3
+567.3 0.8
+568.1 5.5
+569.4 4.5
+570.7 8.8
+572.1 36.7
+573.0 11.8
+573.9 4.5
+575.0 0.6
+576.1 3.9
+576.7 5.3
+577.4 4.0
+578.5 6.6
+579.2 8.8
+580.2 3.5
+581.4 5.5
+582.2 0.8
+583.1 2.4
+584.3 1.3
+585.2 5.5
+586.0 4.0
+587.3 10.1
+588.6 4.8
+589.5 4.5
+591.3 7.1
+592.1 5.9
+593.2 3.5
+594.0 1.7
+595.1 2.9
+596.2 10.3
+596.9 0.6
+598.3 21.6
+599.2 37.5
+600.0 16.1
+601.5 2.5
+604.0 1.5
+604.7 1.6
+605.5 1.6
+606.1 7.5
+606.9 14.6
+607.7 4.0
+608.5 11.3
+609.5 3.4
+610.9 3.2
+612.3 9.3
+613.4 4.4
+614.2 2.5
+615.2 3.7
+616.0 16.3
+617.2 106.5
+618.3 30.7
+619.6 13.1
+620.9 6.4
+622.1 7.0
+623.3 7.0
+624.3 5.0
+625.1 9.3
+626.2 11.8
+627.2 1.0
+628.3 13.5
+629.3 10.8
+630.2 18.7
+631.2 29.3
+632.2 11.0
+633.4 72.8
+634.2 139.8
+635.1 53.9
+636.2 8.1
+638.2 6.8
+638.9 83.0
+639.7 19.2
+640.6 32.5
+642.1 100.1
+643.2 88.5
+644.3 16.0
+645.1 5.4
+646.0 2.0
+653.8 2.5
+657.4 1.2
+658.7 2.9
+660.4 4.5
+661.8 1.2
+663.8 0.6
+667.2 10.8
+668.2 9.3
+669.2 3.4
+670.8 1.0
+671.5 1.0
+674.9 4.9
+679.2 4.0
+680.8 1.3
+682.4 8.8
+683.2 1.3
+685.2 49.0
+686.4 32.2
+687.4 36.0
+688.6 3.2
+690.2 2.0
+691.2 3.2
+692.3 20.7
+693.4 7.3
+695.3 1.2
+698.8 1.8
+703.3 1.3
+704.2 1.8
+705.8 0.6
+710.3 2.9
+712.1 8.6
+713.1 1.8
+716.2 1.1
+718.7 1.7
+719.4 4.8
+720.6 5.1
+721.4 0.8
+722.4 2.2
+723.4 1.1
+725.2 1.3
+726.4 2.4
+727.0 3.2
+728.0 2.9
+729.2 5.5
+730.3 72.6
+731.4 19.5
+732.3 10.1
+735.0 2.2
+736.0 1.6
+737.3 1.0
+738.2 1.2
+739.3 7.6
+741.1 2.4
+741.8 2.0
+742.4 13.1
+743.7 9.8
+744.7 12.5
+745.4 1.8
+746.4 0.8
+752.7 6.9
+753.9 1.6
+755.2 6.6
+756.3 0.8
+759.6 1.2
+761.1 1.2
+762.2 1.8
+767.6 2.2
+770.1 3.0
+771.3 0.5
+773.2 0.8
+775.3 1.7
+778.4 1.3
+779.4 1.6
+781.4 1.5
+782.3 4.5
+783.9 1.3
+784.7 1.2
+787.4 29.0
+788.2 9.6
+788.8 11.3
+790.7 2.9
+791.4 5.1
+792.2 3.2
+796.5 3.2
+797.3 6.8
+797.9 1.7
+798.6 0.8
+799.9 3.5
+804.5 0.6
+805.4 4.9
+806.2 4.0
+806.9 1.6
+808.4 1.2
+810.3 1.8
+811.7 1.2
+813.3 2.2
+816.4 1.2
+817.6 2.0
+818.4 5.5
+819.8 1.5
+820.4 2.2
+822.2 4.0
+823.5 1.3
+824.4 1.7
+825.3 2.7
+826.3 3.2
+827.2 3.4
+829.4 7.0
+830.6 14.3
+831.2 3.2
+831.8 8.3
+832.7 6.3
+834.1 3.5
+835.3 3.2
+838.1 3.7
+839.1 1.7
+840.7 3.4
+841.5 4.6
+842.3 3.0
+844.2 1.2
+845.3 3.4
+846.5 8.1
+847.1 1.7
+848.2 0.8
+849.2 4.4
+852.6 1.2
+853.5 2.9
+854.4 0.8
+855.3 1.2
+856.5 1.3
+857.2 10.6
+858.3 5.3
+859.4 23.5
+861.0 6.0
+862.3 7.3
+863.5 2.0
+864.7 2.2
+866.6 0.8
+867.3 1.0
+868.6 3.2
+869.2 7.0
+870.3 12.8
+870.9 12.8
+872.1 2.7
+872.8 2.2
+876.3 1.0
+878.1 4.0
+879.1 1.0
+881.2 0.6
+884.3 3.7
+885.2 0.8
+887.8 2.2
+889.2 6.9
+890.3 2.5
+890.9 2.0
+892.3 2.5
+893.3 1.2
+895.5 0.6
+896.6 4.3
+897.4 2.5
+898.3 0.8
+899.2 2.7
+900.1 0.8
+902.5 3.2
+903.4 3.7
+904.8 3.7
+905.5 2.5
+906.3 1.0
+909.5 7.4
+910.5 3.0
+911.9 3.5
+912.9 1.2
+914.5 4.1
+915.3 1.7
+916.6 2.7
+918.9 2.5
+919.8 2.0
+921.7 1.2
+923.1 2.7
+923.9 1.0
+925.0 2.5
+927.4 1.0
+928.5 4.8
+929.7 1.7
+931.3 3.9
+932.3 2.9
+933.3 1.7
+938.3 4.0
+940.4 1.0
+941.4 3.5
+942.3 2.4
+943.6 1.5
+944.7 3.0
+945.4 8.1
+949.1 27.2
+950.4 13.5
+951.2 1.2
+952.1 1.2
+953.7 1.7
+956.1 33.2
+957.2 12.6
+958.4 14.3
+961.3 1.7
+963.2 1.2
+964.1 1.0
+965.4 0.8
+968.2 2.2
+970.9 1.5
+974.3 30.6
+975.5 16.5
+976.4 2.5
+977.4 4.0
+978.2 10.0
+979.1 4.8
+981.0 1.3
+983.3 1.3
+984.7 3.0
+985.4 1.3
+986.4 2.9
+989.4 2.0
+993.0 0.6
+997.5 0.8
+999.4 1.3
+1002.2 0.8
+1005.2 4.4
+1006.3 3.5
+1007.5 1.2
+1009.3 3.5
+1010.1 2.7
+1010.9 1.5
+1014.7 7.3
+1015.4 4.5
+1017.4 2.5
+1018.6 3.4
+1021.2 1.0
+1022.3 1.0
+1024.3 2.7
+1026.4 3.5
+1027.2 13.8
+1028.1 6.8
+1029.4 5.9
+1030.4 2.2
+1032.3 5.4
+1033.3 3.7
+1034.4 1.0
+1035.4 1.2
+1036.4 1.7
+1037.1 1.2
+1037.7 3.4
+1041.8 3.0
+1042.4 2.7
+1043.4 4.1
+1044.3 8.3
+1045.3 10.0
+1046.6 2.9
+1051.4 0.8
+1055.5 5.1
+1056.5 1.6
+1057.4 6.6
+1058.4 6.6
+1059.5 1.2
+1060.5 2.7
+1062.4 55.7
+1063.5 31.8
+1064.4 1.7
+1069.1 7.0
+1072.3 8.3
+1073.4 11.6
+1074.5 13.1
+1075.4 3.7
+1077.4 4.1
+1078.6 0.8
+1085.2 2.4
+1087.7 0.8
+1099.5 1.7
+1102.1 2.2
+1110.0 1.1
+1114.1 1.7
+1116.4 1.2
+1117.3 1.3
+1120.1 1.2
+1125.1 1.0
+1126.4 5.0
+1128.4 1.1
+1129.5 2.2
+1137.4 7.1
+1138.4 2.2
+1139.1 2.2
+1140.2 2.5
+1141.4 0.6
+1149.2 1.1
+1150.2 2.0
+1155.1 24.5
+1156.3 10.6
+1157.5 1.2
+1158.2 2.5
+1159.4 2.0
+1188.4 1.2
+1189.4 0.8
+1190.5 1.1
+1200.0 1.0
+1228.2 1.1
+1262.4 1.0
+1264.7 0.6
+1265.5 1.8
+S	38	38	1032.39
+Z	3	3095.15
+311.9 1.6
+324.3 1.5
+325.4 25.1
+326.3 5.1
+341.0 6.6
+342.2 5.3
+344.5 6.8
+354.0 2.6
+355.4 2.4
+356.3 1.1
+359.1 5.3
+367.6 5.7
+369.2 0.7
+371.2 4.4
+388.1 2.1
+389.4 4.9
+395.3 7.8
+397.2 4.9
+402.0 2.3
+408.2 5.3
+409.5 6.3
+411.4 1.0
+413.2 16.1
+415.3 29.5
+435.5 2.1
+452.9 11.1
+454.3 1.0
+467.8 8.5
+470.3 8.0
+478.3 2.8
+485.2 3.2
+490.1 1.3
+494.0 5.8
+498.4 11.4
+501.2 6.1
+504.5 14.9
+505.4 7.9
+509.6 3.0
+512.1 1.6
+517.8 1.7
+519.4 13.9
+524.6 2.3
+525.6 2.4
+526.5 0.9
+542.0 8.2
+552.4 21.6
+554.7 10.3
+556.3 0.9
+563.3 7.0
+565.9 2.7
+572.0 73.9
+573.0 25.7
+580.0 11.9
+583.2 12.5
+590.0 11.8
+591.4 1.2
+594.4 4.3
+600.2 6.9
+601.4 11.5
+602.2 10.8
+607.9 15.1
+613.3 7.6
+615.3 4.1
+616.2 0.9
+618.4 39.2
+619.6 2.4
+621.2 13.5
+622.4 2.1
+623.3 5.6
+625.4 5.6
+626.5 4.3
+630.1 2.7
+632.0 3.6
+633.6 1.3
+635.6 3.2
+639.4 8.2
+643.6 7.8
+646.4 1.6
+650.7 19.7
+652.7 1.6
+655.4 4.6
+658.0 7.2
+662.9 7.8
+664.0 2.9
+664.9 12.4
+666.4 38.6
+667.2 1.8
+679.9 5.3
+683.3 4.3
+688.1 8.2
+689.5 115.5
+690.4 40.1
+692.4 6.4
+693.0 6.6
+696.1 5.8
+698.2 5.3
+705.7 9.5
+707.1 31.6
+709.1 1.2
+711.8 3.9
+714.3 6.0
+715.3 11.8
+716.5 3.3
+717.4 2.4
+718.3 2.9
+719.5 0.4
+720.6 9.0
+721.6 11.6
+722.3 2.8
+725.3 4.7
+728.9 4.1
+730.3 8.1
+731.4 3.1
+736.9 9.9
+737.6 36.1
+738.4 7.3
+741.3 1.8
+744.6 7.3
+745.7 14.3
+746.5 2.3
+753.4 5.3
+754.4 9.6
+755.2 8.5
+757.3 5.5
+758.5 5.9
+760.5 11.2
+761.9 34.5
+762.6 27.6
+764.2 12.8
+766.3 2.2
+769.2 24.3
+770.8 202.5
+771.5 105.3
+772.1 27.4
+778.2 974.5
+779.1 93.8
+780.0 2.0
+782.5 15.2
+783.3 5.7
+786.6 1.4
+791.5 2.6
+795.6 2.2
+796.7 5.8
+800.6 5.1
+802.4 17.2
+803.5 3.4
+805.7 5.0
+806.3 8.8
+808.4 6.7
+810.5 12.1
+811.3 3.9
+812.5 8.1
+813.7 7.1
+814.7 15.5
+818.3 4.4
+819.8 7.5
+820.5 3.8
+821.2 8.1
+824.9 3.9
+826.6 8.5
+827.2 5.7
+830.3 4.6
+831.8 3.7
+833.1 76.9
+834.5 10.0
+836.0 6.8
+836.7 2.0
+838.3 6.1
+839.7 11.1
+842.1 323.9
+843.2 74.2
+845.6 8.2
+846.5 5.0
+847.7 6.6
+848.4 1.6
+850.5 19.4
+852.1 1.2
+853.5 2.5
+854.5 9.7
+858.5 10.7
+859.8 11.8
+861.4 6.5
+866.4 11.4
+867.6 7.7
+868.5 3.5
+872.9 5.5
+874.6 5.1
+875.4 4.4
+876.7 11.3
+879.2 5.7
+881.3 17.2
+882.0 7.2
+883.2 12.0
+884.3 43.6
+885.0 4.1
+887.4 8.7
+888.9 20.6
+890.6 5.1
+891.6 8.0
+893.9 20.8
+895.3 30.0
+896.0 2.7
+897.3 3.9
+900.3 23.2
+901.1 8.6
+902.1 1.2
+903.2 5.2
+904.3 26.6
+905.7 2.0
+906.6 7.0
+907.9 8.9
+911.3 15.6
+912.1 8.8
+913.2 9.9
+914.3 5.9
+915.8 2.1
+916.6 1.3
+917.5 42.6
+918.6 35.3
+920.2 2.1
+922.1 11.8
+924.4 32.5
+925.6 13.8
+926.6 4.7
+927.6 13.6
+931.0 44.3
+931.9 33.8
+932.6 30.4
+933.4 6.5
+935.1 7.6
+936.6 3.6
+937.9 4.2
+940.2 849.5
+941.2 290.7
+942.5 71.8
+943.4 20.9
+944.1 0.5
+945.2 9.2
+947.2 8.9
+948.0 16.1
+951.6 8.9
+952.6 9.3
+953.4 4.0
+954.3 5.4
+955.3 8.6
+956.0 12.7
+956.8 25.8
+958.9 18.0
+960.7 16.5
+962.1 14.7
+963.1 6.3
+964.2 18.7
+965.2 15.9
+966.9 10.4
+967.5 10.3
+969.0 30.5
+969.7 3.4
+970.7 12.3
+971.4 3.6
+972.0 26.2
+972.8 7.2
+973.8 23.0
+975.1 7.9
+975.7 5.2
+977.0 230.3
+977.7 231.4
+978.6 78.7
+979.6 42.2
+980.6 13.8
+981.3 5.5
+982.2 26.3
+983.2 6.1
+985.9 19.5
+988.1 12.5
+988.8 2.3
+989.9 3.2
+991.7 15.1
+992.5 19.1
+993.2 6.1
+994.3 63.5
+995.3 20.3
+996.1 36.3
+996.9 41.3
+997.8 19.7
+999.2 43.9
+1000.0 27.1
+1001.4 39.3
+1002.0 32.5
+1003.7 49.6
+1004.8 44.3
+1005.6 73.5
+1006.3 18.6
+1007.0 11.7
+1009.4 22.3
+1010.5 65.0
+1011.3 8.7
+1012.8 26.6
+1013.8 19.7
+1014.6 24.6
+1016.1 22.1
+1017.0 5.1
+1017.6 44.6
+1018.8 15.1
+1019.8 53.1
+1020.6 0.7
+1021.7 37.0
+1022.6 13.1
+1023.8 11.3
+1035.0 5.9
+1037.4 0.5
+1046.7 1.9
+1048.8 3.3
+1049.6 1.5
+1055.8 2.3
+1066.0 10.5
+1066.7 12.6
+1067.5 1.2
+1069.4 29.6
+1070.6 7.2
+1078.5 6.8
+1079.7 12.9
+1080.7 5.4
+1084.5 6.8
+1087.7 8.5
+1088.5 11.9
+1089.8 86.6
+1090.7 1.4
+1091.6 9.2
+1094.0 1.7
+1097.1 1.0
+1098.1 2.3
+1099.5 3.1
+1100.4 2.3
+1103.8 18.3
+1106.1 16.8
+1107.7 6.1
+1108.9 31.2
+1109.9 21.6
+1114.1 26.6
+1115.2 6.5
+1117.5 7.6
+1124.5 13.7
+1126.2 17.3
+1131.4 3.4
+1133.4 3.3
+1135.0 8.1
+1138.2 9.9
+1138.9 1.5
+1139.6 9.7
+1142.6 269.7
+1143.7 182.0
+1144.7 31.4
+1145.4 2.3
+1146.9 6.4
+1148.0 13.5
+1148.7 27.7
+1149.4 25.5
+1150.6 10.9
+1158.6 97.5
+1159.3 16.0
+1164.4 14.8
+1166.4 41.2
+1167.1 18.7
+1168.9 50.2
+1169.6 2.5
+1170.7 3.8
+1173.2 1.7
+1178.6 2.0
+1179.3 6.2
+1182.7 2.4
+1184.0 2.8
+1185.7 9.0
+1190.8 1.8
+1194.2 90.2
+1195.2 34.3
+1195.9 1.2
+1196.9 5.0
+1198.0 6.4
+1198.6 110.0
+1199.6 47.2
+1200.4 44.0
+1201.0 5.1
+1203.8 120.8
+1204.6 138.4
+1205.2 25.9
+1205.8 6.3
+1206.9 19.2
+1207.9 6.8
+1210.0 5.8
+1211.5 5.9
+1212.3 9.7
+1213.6 87.4
+1214.7 30.3
+1216.5 451.2
+1217.5 259.8
+1218.7 52.1
+1219.7 19.8
+1222.8 3.5
+1226.6 4.7
+1227.2 6.4
+1230.1 13.0
+1231.3 8.7
+1233.0 16.7
+1236.8 9.6
+1237.8 3.1
+1239.1 52.8
+1239.9 77.7
+1240.7 19.4
+1242.1 48.0
+1243.7 3.4
+1245.6 4.6
+1247.8 94.4
+1248.9 32.4
+1249.8 3.1
+1250.5 3.5
+1257.4 7.7
+1260.5 6.0
+1261.6 8.0
+1265.3 12.3
+1266.5 9.9
+1268.4 15.1
+1271.7 4.2
+1273.9 27.5
+1274.7 8.0
+1276.0 11.2
+1277.3 25.4
+1277.9 6.9
+1281.4 1.1
+1283.1 88.6
+1283.8 39.3
+1284.6 8.3
+1288.0 8.4
+1290.6 6.3
+1293.6 8.5
+1295.2 13.2
+1296.1 13.5
+1297.3 44.7
+1298.3 12.6
+1299.9 5.0
+1305.9 9.5
+1308.6 20.4
+1309.7 2.8
+1313.7 7.7
+1314.5 7.9
+1316.1 28.6
+1318.8 40.9
+1319.7 28.8
+1320.5 7.8
+1324.8 28.2
+1325.8 4.4
+1327.4 7.9
+1328.7 38.6
+1329.4 39.9
+1330.6 6.9
+1331.9 24.1
+1333.2 150.8
+1334.3 5.2
+1337.8 9.2
+1339.4 12.3
+1340.6 25.9
+1342.3 247.6
+1343.9 32.0
+1346.7 6.7
+1351.2 13.9
+1352.3 12.1
+1353.6 39.7
+1355.7 89.4
+1356.7 9.0
+1362.9 57.2
+1363.7 15.0
+1369.1 4.6
+1371.7 9.9
+1372.9 3.8
+1375.3 1.6
+1375.9 5.6
+1381.8 15.1
+1389.5 12.4
+1392.6 2.1
+1394.5 47.6
+1396.1 13.0
+1396.9 5.4
+1398.1 24.9
+1399.6 15.0
+1404.1 1.8
+1405.5 1.1
+1406.5 4.7
+1408.8 5.6
+1409.6 4.6
+1412.0 18.8
+1412.6 94.7
+1413.8 124.3
+1414.8 33.8
+1415.7 4.6
+1417.3 15.3
+1418.1 35.6
+1418.9 31.6
+1420.7 20.3
+1421.5 3.0
+1422.6 9.1
+1424.1 17.0
+1426.2 3.1
+1426.9 3.3
+1427.8 11.2
+1428.4 12.7
+1429.8 5.9
+1431.3 36.4
+1432.4 7.0
+1436.1 5.5
+1437.1 9.0
+1440.0 34.3
+1441.0 20.5
+1445.0 8.5
+1446.0 7.6
+1448.8 6.8
+1451.2 4.0
+1455.2 2.5
+1458.2 4.0
+1459.1 14.1
+1462.3 5.9
+1464.6 3.4
+1466.0 5.1
+1467.7 1.6
+1470.7 10.8
+1473.2 10.5
+1475.4 118.0
+1476.3 29.5
+1477.4 8.9
+1480.3 1.0
+1484.1 4.3
+1486.6 8.9
+1489.3 8.5
+1492.3 5.4
+1499.3 4.1
+1506.8 7.9
+1518.7 11.7
+1520.4 13.0
+1522.7 113.0
+1523.7 99.8
+1524.8 28.2
+1530.4 4.6
+1535.6 3.6
+1537.7 17.6
+1539.0 7.8
+1540.7 279.2
+1541.7 200.9
+1542.8 70.3
+1543.6 15.8
+1546.6 6.3
+1554.7 194.0
+1555.8 205.0
+1556.7 35.4
+1557.7 33.0
+1571.9 2.3
+1577.8 6.7
+1587.2 1.0
+1588.3 3.5
+1589.8 6.2
+1603.0 2.7
+1620.0 3.4
+1627.6 9.8
+1628.6 4.3
+1629.9 5.1
+1631.4 1.2
+1632.9 2.0
+1642.6 1.8
+1646.7 4.6
+1655.1 2.7
+1657.2 10.5
+1664.7 2.6
+1665.6 10.2
+1666.4 1.6
+1672.0 2.7
+1682.8 7.1
+1685.8 6.4
+1687.1 8.3
+1692.3 14.2
+1694.1 4.6
+1703.1 7.3
+1708.5 3.9
+1710.9 4.6
+1712.9 3.0
+1716.4 4.3
+1719.4 4.3
+1748.5 4.8
+1762.5 3.1
+1764.0 2.3
+1766.6 4.5
+1770.9 5.8
+1783.9 2.1
+1789.7 3.5
+1794.8 4.4
+1799.2 9.0
+1800.6 1.7
+1805.4 8.7
+1808.2 7.2
+1811.3 2.4
+1828.9 8.8
+1832.3 5.8
+1854.4 3.1
+1855.3 2.5
+1865.1 6.8
+1865.8 8.0
+1866.6 3.5
+1875.1 3.9
+1881.7 16.9
+1882.8 8.2
+1895.1 14.0
+1897.3 4.3
+1902.2 21.0
+1910.1 0.9
+1912.8 6.8
+1934.9 3.3
+1935.9 11.6
+1937.2 7.2
+1943.9 3.8
+1952.8 35.0
+1954.1 25.4
+1955.0 7.3
+1973.2 10.3
+S	39	39	613.13
+Z	2	1225.25
+175.1 7.9
+177.2 19.8
+179.2 0.2
+181.2 0.3
+186.2 1.1
+187.1 3.0
+195.4 1.2
+197.0 0.5
+198.0 4.4
+202.2 2.8
+206.3 1.7
+207.4 0.3
+209.3 0.5
+210.2 0.8
+212.2 0.9
+214.2 10.1
+215.2 1.4
+216.1 7.5
+221.0 5.7
+222.0 2.5
+223.1 5.1
+224.3 0.8
+226.2 8.4
+227.3 1.6
+229.2 3.8
+230.2 6.8
+231.4 3.1
+233.3 4.4
+234.4 1.5
+236.4 0.4
+239.1 2.6
+240.1 0.2
+241.9 1.5
+244.2 0.7
+244.8 1.6
+245.8 3.1
+248.2 11.7
+249.4 1.9
+250.0 0.8
+251.0 0.8
+252.1 1.3
+253.1 1.1
+254.2 24.5
+255.2 3.2
+257.4 6.7
+260.1 5.2
+261.3 2.2
+265.0 2.0
+266.1 1.7
+267.2 6.6
+268.2 8.6
+268.9 9.2
+270.1 3.0
+271.3 2.7
+273.2 1.0
+274.3 20.0
+275.3 1.7
+276.2 4.9
+277.1 4.9
+278.1 4.4
+280.3 0.6
+281.5 6.9
+282.1 1.1
+283.2 1.7
+284.2 1.3
+285.0 6.1
+286.0 4.2
+287.2 12.6
+288.3 4.4
+291.2 7.2
+292.2 1.2
+295.4 0.6
+296.2 2.9
+297.4 5.5
+298.2 2.5
+301.1 7.0
+302.2 22.4
+303.1 4.4
+305.2 2.2
+306.0 2.1
+307.1 1.3
+308.4 0.6
+311.2 0.6
+312.2 7.6
+313.2 4.4
+314.5 2.0
+316.5 0.6
+319.2 120.8
+320.2 19.4
+322.5 6.4
+323.1 39.4
+324.0 1.8
+325.2 4.3
+327.2 2.2
+329.0 0.7
+330.1 6.6
+333.3 0.9
+334.3 1.2
+335.3 1.8
+336.9 1.3
+337.5 2.2
+338.2 7.5
+339.0 1.2
+341.2 13.7
+343.3 10.7
+344.4 5.0
+347.4 1.2
+349.0 5.6
+353.3 0.5
+355.0 39.5
+356.2 35.0
+357.1 68.9
+358.0 13.4
+359.0 3.2
+360.0 3.6
+361.1 3.4
+362.5 0.3
+364.5 4.8
+369.3 1.2
+371.1 4.1
+372.1 0.4
+373.3 3.1
+374.3 12.8
+375.2 5.6
+376.2 51.0
+377.5 4.6
+385.4 1.9
+386.3 4.9
+389.5 1.7
+390.1 3.4
+391.4 4.5
+392.3 15.1
+394.3 7.4
+395.5 2.3
+396.4 5.0
+399.5 0.9
+401.0 5.8
+402.1 1.3
+404.6 1.9
+409.5 3.4
+410.4 4.1
+411.3 1.7
+412.4 5.6
+413.5 2.8
+414.4 2.0
+415.9 5.4
+416.8 1.3
+418.0 5.8
+420.3 3.1
+422.3 25.1
+423.5 4.6
+425.6 0.4
+427.2 3.6
+428.0 0.7
+429.2 1.6
+430.2 3.7
+431.3 9.8
+432.1 4.0
+432.8 6.6
+434.6 0.5
+437.1 1.3
+438.5 1.6
+439.7 9.3
+440.5 11.3
+441.4 8.6
+442.7 2.7
+443.5 7.0
+444.7 7.7
+445.5 13.9
+447.1 38.7
+448.1 16.1
+449.4 1.1
+450.5 1.8
+454.6 12.1
+455.8 16.3
+457.0 14.6
+458.2 6.7
+460.2 19.1
+461.1 6.4
+462.1 1.2
+463.3 48.6
+464.2 10.0
+465.0 5.6
+466.2 13.0
+467.7 8.2
+469.9 2.0
+470.6 5.9
+472.4 5.9
+473.9 18.4
+475.5 2.5
+476.6 3.4
+477.4 7.0
+478.4 5.6
+480.2 5.5
+481.1 31.2
+482.6 8.0
+483.3 4.2
+484.2 6.2
+486.3 2.5
+487.2 10.6
+489.7 12.7
+490.5 6.1
+491.3 5.7
+492.6 4.5
+493.7 15.0
+494.4 10.1
+495.2 3.2
+496.3 11.4
+498.3 10.8
+499.5 24.8
+500.5 3.9
+501.3 10.1
+502.1 5.3
+502.7 22.9
+503.4 13.2
+504.8 1.4
+506.1 1.4
+507.1 13.5
+508.1 60.3
+509.4 30.3
+510.8 13.6
+511.5 19.4
+512.5 14.2
+513.3 6.4
+514.2 12.8
+516.2 144.8
+517.1 92.2
+518.6 31.6
+519.7 12.1
+520.7 2.5
+521.8 2.1
+522.5 2.1
+523.3 4.8
+524.8 39.3
+525.5 179.0
+526.4 5.1
+527.9 56.4
+528.9 11.7
+530.2 30.2
+531.4 19.9
+532.3 29.6
+533.5 4.1
+534.5 31.8
+535.4 31.5
+536.7 8.3
+537.9 22.2
+539.0 4.5
+539.6 5.2
+540.3 0.7
+541.0 1.0
+542.2 63.8
+542.8 79.3
+544.0 2.2
+545.6 17.1
+546.3 60.6
+547.0 36.2
+548.3 63.5
+549.3 25.5
+551.2 243.5
+551.9 67.6
+552.9 26.9
+554.5 59.5
+555.6 12.8
+556.5 29.7
+557.5 6.8
+560.0 691.8
+560.9 39.3
+561.6 4.6
+562.6 15.4
+563.5 16.1
+564.3 6.3
+565.0 6.6
+566.4 7.0
+567.7 1.8
+569.0 607.3
+570.1 17.9
+570.9 6.6
+571.5 4.3
+572.3 4.5
+573.1 5.1
+573.9 6.1
+574.5 4.3
+577.2 12.4
+577.8 28.8
+578.5 34.6
+579.4 11.3
+580.3 10.0
+581.0 12.9
+582.4 6.3
+584.1 7.2
+584.8 10.1
+585.7 5.9
+586.8 43.9
+587.5 66.2
+588.6 11.0
+589.3 15.9
+590.2 18.4
+591.3 12.8
+592.0 3.5
+594.2 84.1
+595.0 6.5
+595.7 465.1
+596.5 186.5
+597.4 140.5
+598.9 6.3
+599.8 10.3
+600.6 16.8
+602.6 17.5
+603.4 142.0
+604.5 901.3
+606.0 1.4
+607.1 2.1
+608.4 0.5
+609.5 1.5
+613.8 4.1
+617.6 4.3
+621.4 14.1
+622.4 2.0
+625.6 1.0
+630.0 4.2
+631.4 2.7
+633.7 0.7
+635.4 2.0
+637.3 1.1
+640.3 3.9
+641.6 3.1
+642.5 1.5
+643.3 5.7
+644.0 6.9
+646.2 2.8
+647.4 4.6
+649.3 7.2
+650.8 1.7
+652.7 9.7
+656.6 15.1
+657.5 6.3
+658.4 3.8
+660.0 18.0
+661.5 12.3
+663.4 8.2
+669.4 4.3
+670.4 0.3
+672.6 11.2
+674.2 23.2
+675.2 9.8
+676.2 11.0
+678.4 99.5
+679.4 38.9
+680.1 6.9
+683.5 9.1
+688.1 13.9
+689.3 13.9
+690.4 1.5
+692.1 21.1
+693.3 7.2
+694.4 0.6
+695.1 0.3
+695.9 6.3
+697.6 6.6
+701.4 1.5
+702.2 1.9
+703.2 1.2
+704.6 2.7
+707.4 6.9
+708.5 6.0
+710.4 10.6
+711.1 2.2
+715.4 1.0
+716.3 1.2
+721.0 4.8
+726.4 7.7
+727.3 20.7
+728.4 8.2
+729.4 7.3
+731.4 8.1
+732.8 11.5
+733.6 0.8
+734.4 2.4
+735.3 5.9
+736.2 8.7
+736.9 6.1
+738.3 0.6
+739.2 2.6
+743.2 0.8
+745.3 42.4
+746.5 26.9
+747.4 3.2
+748.3 2.8
+749.3 1.0
+754.0 1.0
+755.8 0.7
+756.5 1.4
+758.8 6.6
+761.4 11.2
+762.5 3.4
+763.3 27.2
+764.2 3.6
+769.2 7.0
+771.3 0.7
+772.4 3.4
+773.2 3.8
+777.2 15.1
+778.8 38.6
+779.4 130.5
+780.5 47.8
+781.5 0.4
+782.9 3.1
+783.9 0.8
+784.5 1.0
+787.1 0.4
+789.4 0.3
+790.1 0.6
+791.5 3.7
+795.6 1.9
+797.4 11.9
+800.4 4.9
+801.3 3.2
+804.6 1.9
+805.8 1.3
+810.1 7.2
+811.6 6.1
+814.5 6.1
+815.2 23.9
+815.8 4.7
+816.4 4.6
+817.3 0.5
+818.9 3.2
+821.5 1.7
+822.7 0.4
+828.5 3.8
+832.4 48.1
+833.4 21.9
+834.4 12.9
+835.5 6.4
+838.6 1.7
+842.7 1.0
+846.4 0.6
+849.7 3.3
+850.3 29.7
+851.4 17.4
+852.6 0.5
+853.9 7.4
+855.6 2.3
+860.5 3.6
+861.9 5.9
+863.6 1.4
+864.9 5.7
+865.6 0.9
+867.2 4.1
+869.2 2.8
+872.4 4.2
+873.5 1.6
+875.5 2.0
+879.6 0.7
+880.8 6.1
+886.3 4.2
+887.7 0.4
+888.3 1.3
+889.5 21.2
+890.5 59.9
+891.5 30.7
+893.2 0.6
+895.1 7.1
+900.4 1.5
+901.5 7.2
+903.0 2.7
+904.4 7.1
+905.4 4.3
+907.4 136.9
+908.5 48.3
+921.0 4.6
+921.6 1.6
+922.8 2.3
+926.8 3.7
+927.5 1.6
+929.0 4.0
+932.0 2.2
+935.5 0.4
+936.6 12.8
+938.1 1.7
+940.9 1.0
+942.9 2.5
+945.3 4.6
+946.4 12.2
+949.4 5.6
+956.1 0.3
+960.5 5.2
+961.4 4.0
+962.7 8.1
+966.1 10.9
+966.9 1.8
+967.8 1.4
+969.4 1.2
+970.8 3.0
+972.9 11.8
+973.5 5.4
+974.5 7.1
+975.6 8.9
+978.4 117.9
+979.6 54.6
+990.4 20.4
+991.1 18.3
+992.4 4.9
+993.4 3.3
+1004.4 4.6
+1008.3 12.9
+1009.6 4.2
+1013.6 2.0
+1014.3 3.6
+1015.6 3.1
+1016.6 4.1
+1020.4 3.4
+1021.6 8.1
+1023.7 1.4
+1025.0 1.6
+1027.8 4.5
+1030.4 3.6
+1031.6 12.8
+1032.5 44.6
+1033.4 15.6
+1037.3 3.3
+1038.0 1.5
+1038.9 2.7
+1044.8 1.1
+1047.6 1.8
+1049.5 245.9
+1050.6 133.8
+1054.6 23.6
+1055.5 10.2
+1056.7 2.9
+1061.4 3.0
+1069.5 1.6
+1074.5 1.2
+1076.4 0.9
+1079.4 0.3
+1095.4 3.2
+1103.6 2.0
+1104.5 6.7
+1112.7 0.4
+1120.6 2.4
+1155.5 0.4
+1198.8 3.3
+S	40	40	636.37
+Z	2	1271.73
+191.1 1.4
+192.2 11.0
+194.3 3.6
+198.3 10.7
+199.3 2.5
+206.9 2.4
+208.9 3.5
+215.2 3.5
+216.4 2.4
+222.2 6.2
+224.1 4.4
+225.4 10.2
+226.2 4.5
+227.5 4.7
+228.3 0.5
+229.4 2.5
+230.2 2.8
+231.2 42.7
+232.3 4.2
+234.3 17.7
+235.2 2.8
+236.4 5.6
+237.2 2.6
+240.3 4.2
+241.3 4.9
+242.9 8.1
+243.6 1.1
+248.0 2.4
+249.6 3.1
+252.3 2.9
+254.1 1.4
+257.2 4.9
+258.1 4.7
+259.3 20.5
+260.4 6.4
+262.3 3.8
+267.2 2.6
+271.1 1.3
+273.0 1.0
+274.2 6.0
+275.2 9.8
+276.2 138.2
+277.4 20.1
+278.2 7.9
+279.1 1.9
+280.0 4.0
+281.4 2.8
+282.0 0.8
+285.3 2.7
+286.2 7.4
+287.4 13.4
+291.0 6.0
+292.3 12.4
+293.3 3.2
+294.3 6.3
+297.3 2.9
+300.0 1.2
+302.2 1.6
+303.2 9.4
+304.2 7.3
+305.0 8.1
+306.2 41.2
+308.1 1.3
+309.2 7.8
+310.7 3.5
+311.5 4.0
+313.4 2.3
+314.8 8.6
+319.5 18.5
+324.4 1.8
+325.1 1.5
+326.3 11.6
+327.4 16.2
+328.3 17.0
+331.4 5.1
+333.2 0.6
+335.6 6.1
+336.6 13.7
+338.5 0.7
+341.1 7.1
+344.4 9.5
+345.3 11.7
+348.1 6.4
+349.5 4.4
+350.2 4.7
+351.2 8.6
+352.5 1.6
+353.2 2.9
+355.6 7.3
+356.4 13.8
+357.4 15.4
+359.5 1.6
+361.8 12.1
+363.4 6.7
+365.4 5.9
+372.2 21.2
+373.3 12.1
+374.3 17.3
+375.1 1.5
+375.9 12.2
+377.2 14.8
+378.3 7.8
+379.8 5.9
+383.4 5.1
+385.4 5.0
+386.1 8.9
+388.5 18.6
+390.4 64.7
+391.4 10.8
+392.5 12.9
+394.0 7.0
+396.4 25.4
+400.2 7.6
+402.3 3.8
+403.6 6.3
+404.3 6.5
+407.2 6.6
+409.3 4.1
+410.4 4.2
+411.2 2.7
+412.2 4.1
+413.3 11.9
+414.9 31.4
+415.7 7.3
+418.4 8.4
+420.5 1.5
+421.5 2.0
+424.2 17.4
+427.5 8.3
+428.5 7.5
+429.4 7.0
+430.4 6.7
+431.3 2.9
+432.2 11.2
+433.2 3.9
+434.6 11.4
+436.5 8.0
+437.4 28.6
+438.6 1.8
+440.3 23.6
+441.2 3.3
+442.2 10.9
+444.4 5.3
+445.4 6.7
+446.6 9.2
+447.5 21.7
+449.3 62.3
+450.4 78.4
+452.0 4.7
+453.1 6.3
+454.7 5.0
+455.7 4.1
+457.3 8.1
+458.4 22.0
+459.2 6.2
+461.2 9.2
+462.6 1.2
+463.6 3.9
+464.9 16.1
+466.4 15.9
+467.2 4.8
+468.5 7.2
+470.3 3.0
+472.6 28.4
+474.1 5.8
+474.8 4.8
+475.4 7.7
+476.5 4.7
+478.6 6.5
+479.7 17.8
+482.5 6.6
+483.6 10.7
+485.2 11.7
+486.1 7.4
+487.1 2.1
+488.1 13.0
+488.9 4.5
+489.6 5.5
+490.3 36.1
+491.7 11.5
+492.5 37.2
+493.4 21.4
+495.7 9.2
+496.9 18.5
+498.7 14.9
+499.5 2.4
+500.1 46.4
+501.1 3.9
+502.4 12.6
+503.6 14.1
+504.2 7.0
+505.5 35.7
+506.4 9.9
+507.5 48.4
+508.4 18.5
+509.6 48.0
+510.4 75.4
+511.4 54.5
+512.5 6.2
+513.4 16.1
+514.5 11.6
+516.2 51.1
+517.6 2.9
+518.4 15.8
+519.6 15.9
+520.5 12.9
+521.8 5.1
+523.4 53.6
+524.4 66.6
+526.6 27.5
+527.7 26.9
+528.7 15.8
+529.4 0.5
+530.3 0.8
+531.2 19.7
+532.5 13.7
+533.4 8.0
+536.1 12.8
+536.9 13.3
+539.8 2.4
+540.6 7.3
+541.3 17.8
+543.8 17.4
+544.7 16.7
+545.3 10.6
+546.5 23.4
+547.4 3.9
+548.6 17.4
+549.8 20.0
+550.5 144.5
+551.5 56.5
+552.6 4.8
+553.2 2.8
+553.8 46.7
+554.8 80.6
+556.2 9.7
+557.2 23.6
+558.1 10.4
+559.5 23.3
+560.4 27.0
+561.1 15.7
+562.7 198.8
+563.4 90.0
+564.2 20.3
+565.4 35.5
+566.5 32.7
+568.4 153.6
+569.2 69.7
+570.1 39.8
+570.8 6.5
+572.1 30.1
+573.1 51.2
+574.6 22.8
+575.6 17.3
+576.2 68.0
+577.3 31.8
+578.2 34.8
+579.6 15.0
+581.2 31.5
+582.5 51.2
+584.5 196.4
+585.5 75.2
+586.2 24.6
+587.3 6.0
+588.1 16.9
+589.3 8.4
+591.2 32.2
+592.6 45.7
+594.2 94.8
+595.4 32.4
+596.0 20.0
+596.7 122.9
+597.8 49.9
+598.8 18.8
+600.1 202.2
+600.7 149.6
+601.5 59.0
+602.9 67.9
+604.1 29.1
+605.0 68.1
+605.8 34.8
+606.6 44.3
+607.5 12.3
+608.2 44.9
+609.3 173.1
+610.3 197.7
+611.0 82.5
+612.0 36.5
+613.8 41.9
+615.0 51.2
+615.8 30.0
+617.3 110.8
+618.7 335.2
+619.6 373.5
+620.5 56.2
+621.6 45.3
+622.3 29.6
+623.3 15.1
+623.9 24.9
+624.5 30.5
+625.4 31.9
+626.2 199.2
+627.3 794.6
+628.2 1452.4
+629.1 133.3
+630.5 5.5
+631.2 1.8
+632.0 3.0
+643.3 15.8
+644.5 4.4
+645.6 1.4
+646.6 3.7
+647.5 3.5
+648.6 12.9
+650.7 12.0
+652.2 5.4
+658.5 5.3
+660.4 17.1
+661.4 112.3
+663.4 363.4
+664.7 91.3
+665.7 5.4
+666.6 5.1
+667.7 43.1
+668.6 15.1
+669.6 12.3
+670.5 12.1
+672.2 2.2
+675.4 14.1
+678.4 164.6
+679.6 30.4
+680.5 6.8
+686.1 11.9
+687.1 20.6
+688.3 13.4
+689.5 17.7
+691.0 14.9
+692.8 18.6
+695.7 3.8
+697.6 7.1
+701.6 18.8
+704.0 18.0
+705.4 40.6
+706.6 22.0
+708.4 1.8
+709.3 10.3
+710.5 16.6
+713.8 3.9
+717.4 1.5
+718.5 10.5
+719.4 2.8
+722.6 108.4
+723.6 10.5
+724.7 27.9
+725.6 2.0
+726.6 9.9
+728.4 29.5
+729.6 4.9
+730.8 12.2
+731.4 8.2
+732.2 18.0
+733.0 6.2
+734.0 14.7
+736.4 25.6
+737.1 27.5
+738.3 20.1
+739.4 21.2
+740.4 23.6
+741.5 2.5
+742.3 8.7
+743.4 16.6
+745.0 4.1
+745.6 26.0
+746.4 2.6
+748.4 8.5
+749.9 1.9
+754.7 7.7
+755.5 6.9
+756.7 6.0
+758.4 7.0
+759.0 2.9
+759.7 0.6
+760.5 6.6
+761.7 31.3
+762.6 49.3
+763.6 27.1
+764.8 35.8
+766.0 6.5
+766.8 9.8
+767.6 20.0
+769.0 10.2
+770.7 7.2
+771.7 9.6
+772.8 6.9
+775.5 1.3
+776.2 1.3
+777.9 3.6
+778.8 14.6
+779.9 17.3
+780.7 6.4
+781.6 34.3
+782.8 9.5
+783.8 10.9
+785.8 30.8
+786.6 22.8
+787.3 33.0
+788.2 34.7
+789.2 23.5
+790.5 2.8
+796.6 1.5
+799.0 11.7
+799.7 14.5
+801.8 21.7
+802.7 1.0
+805.6 5.8
+806.7 20.7
+809.6 5.8
+810.7 17.6
+812.4 10.7
+813.5 7.0
+815.0 11.2
+816.4 9.3
+817.2 12.1
+818.6 3.4
+819.5 2.1
+820.6 12.5
+821.9 6.9
+822.5 2.6
+823.3 43.4
+824.6 21.7
+825.6 75.7
+826.6 60.8
+827.6 15.6
+829.5 8.4
+831.9 2.6
+832.6 1.2
+833.6 4.6
+834.8 29.9
+836.1 44.7
+836.9 4.6
+838.0 8.8
+839.2 2.8
+840.4 5.3
+841.3 31.9
+841.9 0.8
+843.8 234.0
+844.7 54.2
+845.8 17.2
+846.7 65.8
+847.9 19.9
+850.3 9.7
+852.7 9.2
+853.9 9.6
+856.7 5.5
+858.2 10.4
+861.3 7.5
+863.7 17.9
+864.6 15.6
+866.4 37.8
+868.0 13.7
+868.7 6.3
+869.8 1.1
+873.6 4.6
+874.8 19.3
+875.5 8.6
+876.7 15.3
+877.9 5.3
+878.6 33.6
+879.4 13.4
+880.6 36.5
+881.9 28.5
+882.5 228.3
+883.6 123.4
+884.6 54.8
+885.6 4.1
+887.9 2.6
+891.8 3.1
+893.3 7.8
+894.2 5.7
+894.9 25.5
+895.6 28.5
+896.4 1.3
+897.1 4.4
+898.3 7.9
+899.8 0.9
+900.6 3.5
+901.9 3.8
+904.7 2.8
+905.7 3.6
+906.7 27.1
+908.6 4.1
+909.4 4.6
+914.3 7.4
+916.8 13.1
+917.6 3.4
+920.8 4.5
+923.5 19.0
+924.9 6.4
+925.6 3.8
+932.8 11.2
+934.6 7.3
+935.5 6.6
+936.4 5.9
+939.8 4.1
+942.4 12.2
+945.7 3.9
+947.4 6.8
+950.5 2.5
+951.6 0.7
+952.5 2.8
+960.0 4.1
+960.8 7.5
+961.7 12.7
+963.6 32.4
+964.7 10.4
+965.5 4.3
+967.4 38.2
+968.4 19.6
+969.7 32.5
+974.7 1.9
+976.5 15.4
+978.1 16.1
+979.1 81.0
+979.8 67.7
+980.7 38.8
+981.8 16.8
+982.6 11.5
+985.3 1.0
+986.6 9.2
+987.7 13.1
+988.5 1.1
+989.6 1.7
+991.9 4.9
+992.9 2.3
+994.6 3.0
+996.6 1018.8
+997.6 475.9
+998.8 146.4
+1000.0 2.9
+1002.7 5.8
+1003.4 3.6
+1005.9 6.6
+1007.7 11.4
+1010.4 15.0
+1014.4 0.6
+1015.5 1.8
+1016.7 6.5
+1020.5 24.3
+1021.7 8.4
+1025.7 5.7
+1029.5 2.9
+1030.9 10.1
+1033.8 0.9
+1034.9 3.6
+1038.0 37.9
+1038.7 37.3
+1039.6 34.1
+1040.7 6.1
+1043.4 5.1
+1044.3 1.7
+1047.8 12.3
+1052.5 5.6
+1056.9 4.8
+1062.8 10.7
+1063.7 9.1
+1064.9 7.8
+1070.0 4.4
+1071.7 4.6
+1072.8 2.4
+1073.5 3.9
+1076.7 2.2
+1079.9 12.1
+1080.8 1.5
+1081.7 14.4
+1086.8 3.9
+1087.9 3.9
+1090.2 7.3
+1091.7 4.4
+1092.6 1.0
+1097.7 16.7
+1098.7 16.7
+1099.4 6.5
+1102.5 11.9
+1107.5 10.5
+1108.6 37.3
+1109.8 2.3
+1110.5 0.9
+1113.6 9.6
+1117.9 15.9
+1119.6 5.4
+1120.7 10.7
+1121.6 2.8
+1125.4 58.1
+1126.2 95.3
+1127.0 44.8
+1127.9 27.4
+1133.9 1.1
+1135.8 6.6
+1137.5 2.7
+1138.7 3.8
+1139.4 2.6
+1143.6 36.5
+1144.7 15.9
+1150.5 14.5
+1151.5 5.5
+1153.6 6.5
+1154.8 24.1
+1156.8 0.5
+1169.0 5.3
+1178.7 3.1
+1213.1 12.1
+1215.0 4.6
+S	41	41	1003.84
+Z	2	2006.67
+292.3 9.7
+294.3 39.7
+295.3 14.3
+297.4 8.8
+298.1 7.6
+301.3 11.1
+305.1 3.6
+306.2 9.5
+307.6 1.8
+308.5 6.8
+309.3 2.7
+310.2 6.3
+312.4 12.3
+313.0 12.3
+315.4 11.1
+316.1 10.4
+324.4 23.1
+325.3 10.0
+326.1 35.4
+327.4 9.8
+329.5 11.5
+330.2 10.7
+332.1 2.2
+337.4 10.5
+338.3 1.8
+339.2 6.2
+342.3 2.2
+350.2 9.5
+351.1 6.6
+352.5 10.0
+353.1 2.9
+354.4 3.6
+355.5 12.9
+357.3 4.7
+360.6 3.4
+361.3 15.4
+362.4 1.2
+364.3 5.4
+366.4 3.8
+368.4 4.0
+369.6 36.0
+371.3 2.9
+375.2 6.1
+381.3 5.0
+384.4 9.9
+386.3 84.8
+387.1 4.6
+390.9 8.3
+392.5 7.3
+394.5 14.8
+395.9 16.1
+398.3 1.5
+402.2 27.8
+407.3 64.3
+408.6 9.1
+409.2 7.4
+410.2 24.8
+411.5 16.8
+412.5 19.5
+414.2 46.9
+417.4 5.1
+418.2 3.3
+420.4 14.7
+421.5 19.0
+423.1 6.3
+424.4 2.4
+425.3 2.2
+427.1 2.1
+428.3 1.6
+429.4 10.3
+431.3 1.8
+436.4 2.2
+437.2 20.2
+438.3 31.9
+439.3 23.6
+440.2 8.3
+440.9 1.2
+441.5 8.8
+442.2 6.9
+444.2 8.0
+445.5 3.0
+446.4 7.6
+449.5 4.1
+452.1 10.7
+454.5 8.2
+455.2 26.3
+456.1 13.5
+457.4 2.1
+459.3 24.3
+461.3 2.5
+464.4 3.9
+465.4 42.5
+468.9 9.2
+472.4 35.0
+473.2 28.1
+474.5 4.3
+481.3 3.8
+482.5 29.1
+483.2 3.8
+485.4 38.5
+487.4 3.4
+489.4 9.2
+493.3 25.7
+495.4 8.8
+496.4 5.8
+498.5 8.1
+499.5 5.4
+500.5 14.3
+501.1 6.5
+503.3 15.7
+504.2 20.7
+507.2 10.0
+508.4 11.3
+512.3 10.2
+513.5 42.6
+514.5 10.2
+515.4 11.1
+517.5 8.5
+520.4 518.8
+521.4 176.0
+522.5 7.7
+523.9 15.0
+524.7 4.5
+526.6 20.3
+527.3 2.6
+528.5 33.4
+529.5 45.8
+530.1 10.7
+532.9 20.2
+533.6 5.6
+536.5 15.5
+537.5 3.4
+539.2 28.2
+541.2 3.9
+542.6 13.1
+543.4 11.7
+544.6 36.3
+545.4 10.9
+546.3 6.6
+547.4 20.6
+549.2 56.1
+550.5 13.4
+551.3 6.4
+554.7 13.5
+556.6 2.2
+557.3 35.0
+558.6 42.4
+559.5 9.1
+560.3 9.7
+561.5 11.0
+564.4 1.9
+565.3 2.2
+566.4 2.8
+568.5 20.1
+571.0 6.6
+573.6 4.4
+574.4 17.3
+575.4 18.6
+576.3 8.4
+577.4 13.0
+580.5 27.7
+582.2 35.7
+585.4 26.9
+586.8 49.2
+587.5 3.1
+588.2 36.0
+589.8 26.9
+590.6 11.2
+594.8 51.0
+595.6 54.4
+596.6 19.2
+597.5 10.9
+598.3 9.5
+599.5 10.3
+601.0 8.9
+602.3 19.4
+604.2 19.7
+605.2 5.8
+606.3 3.3
+607.3 29.1
+609.2 22.8
+612.5 28.0
+613.8 24.0
+614.5 12.0
+615.7 17.8
+616.4 2.6
+617.6 25.4
+618.4 9.2
+619.6 7.6
+622.4 19.8
+623.2 6.8
+626.5 9.6
+627.3 66.1
+628.6 9.3
+629.8 33.5
+630.7 13.1
+631.5 12.3
+635.6 39.8
+637.8 45.1
+645.6 32.6
+646.5 2.0
+647.9 13.1
+649.1 4.5
+650.2 47.0
+651.4 18.5
+653.1 18.6
+656.7 29.8
+657.3 7.1
+658.6 24.4
+660.3 33.5
+661.4 29.6
+662.4 32.1
+663.0 0.9
+663.7 43.6
+664.4 8.7
+666.4 11.9
+668.4 10.7
+669.5 6.6
+671.0 28.6
+672.3 11.0
+673.6 4.4
+676.6 10.3
+678.1 12.4
+679.4 6.0
+682.3 16.7
+682.9 21.1
+684.3 2.4
+685.7 27.5
+686.6 4.2
+687.6 40.9
+689.5 21.0
+690.4 2.3
+691.6 24.5
+692.9 19.2
+695.4 3.4
+696.2 15.2
+698.7 39.8
+699.3 14.6
+700.1 11.0
+701.5 72.2
+703.2 32.7
+705.6 2.7
+707.5 3.4
+708.7 27.0
+709.7 27.8
+710.6 72.2
+711.5 19.6
+713.2 10.1
+714.4 42.0
+715.6 24.0
+716.3 19.8
+717.1 42.4
+718.4 10.7
+719.4 12.2
+720.1 7.8
+721.5 10.8
+722.7 21.6
+725.8 42.9
+726.7 7.2
+727.5 14.2
+728.3 46.0
+729.5 14.0
+730.3 32.4
+732.5 647.3
+733.6 238.6
+734.6 27.2
+735.8 75.6
+736.6 40.1
+739.4 14.1
+740.5 19.9
+741.6 34.5
+742.6 42.0
+743.9 91.2
+745.0 32.6
+746.8 54.7
+748.1 16.0
+749.5 20.9
+751.6 52.7
+752.6 33.1
+753.2 3.6
+754.0 20.6
+755.6 12.1
+756.7 40.6
+757.6 29.4
+758.6 16.7
+759.4 1.6
+760.3 124.3
+761.4 53.4
+762.7 19.6
+763.7 11.1
+766.6 30.3
+767.5 26.7
+768.5 12.0
+769.6 13.2
+770.9 19.1
+772.6 10.6
+774.6 35.5
+776.5 6.2
+778.6 33.4
+780.4 14.5
+782.7 20.5
+784.0 32.2
+785.5 35.9
+786.4 3.3
+787.2 4.1
+788.4 79.8
+789.5 10.6
+790.2 9.7
+790.9 24.1
+791.8 59.2
+792.7 10.6
+793.8 13.8
+794.5 8.4
+795.4 14.5
+796.8 141.7
+797.6 314.5
+798.4 6.9
+799.2 38.5
+800.0 14.3
+800.8 107.1
+801.6 74.5
+802.4 24.9
+803.2 15.9
+805.9 13.0
+807.5 26.8
+808.9 18.1
+810.7 20.9
+811.4 14.6
+813.7 22.7
+814.6 32.7
+816.3 6.6
+817.4 12.8
+818.6 3.8
+820.9 21.2
+822.0 28.5
+823.2 20.9
+824.4 33.3
+825.5 17.7
+827.0 24.3
+827.7 12.7
+828.3 13.6
+829.1 44.9
+830.1 14.4
+830.8 41.3
+831.5 15.6
+832.8 6.5
+834.7 45.0
+836.5 67.2
+837.5 44.7
+838.7 26.2
+839.6 18.8
+841.5 23.1
+842.4 23.8
+843.5 37.5
+844.9 34.9
+845.6 15.3
+846.4 11.6
+848.1 134.1
+849.1 56.0
+850.4 43.1
+851.5 35.8
+852.5 17.5
+853.8 44.3
+854.7 39.0
+855.7 17.2
+857.0 102.4
+857.8 234.1
+858.9 7.4
+860.4 11.1
+861.6 48.5
+862.4 44.7
+863.6 42.3
+864.8 16.5
+865.5 40.9
+866.4 29.6
+868.8 22.0
+870.4 118.0
+871.4 33.9
+872.5 46.6
+873.5 175.0
+874.7 146.6
+875.8 35.3
+876.6 16.1
+877.3 2.1
+878.7 3.2
+879.3 30.0
+880.2 26.5
+881.1 32.1
+882.3 272.7
+883.4 129.9
+885.0 402.9
+885.8 92.3
+886.7 19.1
+887.3 45.3
+888.5 564.5
+889.6 291.6
+890.6 55.4
+892.1 8.9
+893.2 44.5
+893.8 36.0
+896.7 54.7
+897.4 14.2
+898.5 6.6
+900.5 21.6
+901.9 1.7
+903.6 13.9
+904.5 6.5
+905.6 15.9
+906.4 16.0
+908.0 24.9
+908.9 37.8
+912.6 44.6
+913.8 96.0
+914.5 2.1
+915.6 32.7
+916.7 21.0
+917.9 16.4
+918.6 63.5
+921.8 144.8
+922.6 55.1
+923.4 77.8
+924.6 91.9
+925.7 29.4
+926.7 114.2
+927.4 36.0
+928.3 26.8
+929.7 49.1
+930.7 213.3
+931.7 440.2
+932.9 494.6
+934.0 30.7
+935.4 114.3
+936.0 151.2
+936.8 111.0
+937.6 3.7
+939.5 49.2
+940.7 60.7
+941.9 16.6
+942.9 12.4
+943.9 49.3
+944.8 178.6
+945.6 189.7
+946.6 62.6
+947.5 31.5
+949.9 3063.7
+950.6 1977.9
+951.4 1286.8
+952.5 8.2
+953.4 21.9
+954.1 19.0
+954.8 16.3
+955.9 40.7
+956.9 52.5
+958.1 223.0
+959.4 109.3
+960.4 21.1
+961.4 59.3
+962.3 47.7
+963.3 108.4
+964.4 51.3
+965.3 111.6
+967.0 222.0
+967.6 643.2
+968.6 1643.0
+969.9 42.3
+970.7 21.8
+971.8 121.4
+972.7 17.4
+973.6 28.9
+974.6 70.6
+975.7 115.5
+976.4 230.8
+977.3 247.9
+978.2 2.8
+978.9 1.9
+979.8 66.0
+980.5 25.9
+981.2 83.5
+982.1 82.8
+983.1 96.0
+984.4 60.6
+985.4 121.2
+986.2 210.9
+987.2 173.1
+988.3 158.4
+989.1 23.6
+989.7 4.1
+991.8 9.7
+993.3 23.6
+994.5 224.5
+995.2 74.1
+996.5 5.5
+997.1 4.5
+1004.4 5.1
+1005.3 9.7
+1014.7 5.4
+1016.2 18.1
+1017.4 20.7
+1019.0 14.6
+1025.9 17.0
+1026.9 20.5
+1028.4 12.7
+1031.6 54.9
+1032.7 65.1
+1033.6 39.0
+1034.3 34.8
+1037.6 9.0
+1039.9 5.5
+1041.9 13.4
+1042.7 22.1
+1043.7 7.0
+1045.8 42.7
+1046.8 44.6
+1047.5 44.9
+1048.6 26.2
+1050.0 11.9
+1051.8 21.4
+1052.8 22.3
+1055.7 34.0
+1056.9 29.5
+1057.7 21.3
+1058.6 4.3
+1059.5 3.5
+1060.6 29.8
+1062.4 8.6
+1063.6 3.5
+1064.7 12.3
+1065.3 11.9
+1066.8 5.0
+1068.7 30.5
+1069.6 9.4
+1073.8 97.2
+1074.6 21.9
+1075.6 13.2
+1077.6 20.9
+1079.0 39.5
+1080.8 2.2
+1082.6 8.0
+1083.3 42.1
+1084.6 56.0
+1086.0 82.7
+1087.8 8.3
+1089.1 49.1
+1089.9 23.3
+1090.6 44.8
+1092.5 43.7
+1094.3 14.6
+1098.8 49.4
+1100.2 95.4
+1100.8 154.6
+1101.7 193.6
+1102.8 73.8
+1104.2 64.5
+1106.6 16.7
+1112.8 7.2
+1113.8 12.5
+1114.7 49.0
+1115.5 1.0
+1117.1 17.3
+1118.5 107.7
+1119.4 54.4
+1120.6 49.8
+1122.9 7.1
+1125.7 8.6
+1126.9 25.6
+1130.1 27.3
+1130.7 2.2
+1131.6 24.2
+1132.6 31.1
+1133.7 16.7
+1138.5 8.6
+1140.1 22.6
+1140.7 45.0
+1141.9 26.7
+1142.7 12.4
+1144.6 8.7
+1145.8 3.4
+1148.3 31.2
+1149.6 12.0
+1151.6 9.9
+1152.8 5.6
+1155.6 51.8
+1157.0 39.2
+1157.8 7.0
+1158.5 35.3
+1160.2 15.4
+1161.2 14.5
+1162.8 31.9
+1163.6 3.9
+1164.5 36.4
+1165.8 16.0
+1167.0 7.0
+1169.6 12.8
+1170.3 39.9
+1171.2 32.7
+1171.8 2.4
+1172.6 6.7
+1174.8 3.3
+1176.3 14.7
+1178.7 12.8
+1179.6 11.9
+1181.1 15.6
+1182.0 4.5
+1183.6 36.0
+1184.8 39.6
+1186.4 66.2
+1187.5 37.5
+1188.1 4.3
+1188.7 22.3
+1189.9 9.0
+1190.9 52.6
+1193.7 6.6
+1194.7 19.5
+1196.8 13.7
+1197.8 21.1
+1199.1 62.9
+1200.5 35.4
+1201.8 32.2
+1202.6 2.1
+1203.6 9.6
+1204.8 16.3
+1205.6 7.7
+1207.6 34.8
+1209.8 32.6
+1211.0 28.0
+1212.1 75.5
+1212.8 2.1
+1213.5 28.3
+1215.6 61.5
+1217.3 44.8
+1218.4 61.7
+1220.8 9.8
+1221.6 17.2
+1223.0 11.2
+1224.5 42.0
+1225.8 65.4
+1226.8 31.9
+1227.8 59.7
+1230.8 19.7
+1232.9 18.3
+1233.8 20.2
+1234.6 19.7
+1235.6 34.2
+1237.5 14.6
+1238.9 8.9
+1241.6 23.4
+1242.6 27.9
+1243.9 93.6
+1244.9 90.0
+1245.8 8.5
+1246.7 66.7
+1248.0 9.7
+1248.9 38.4
+1250.7 17.5
+1251.8 18.3
+1253.5 11.9
+1256.7 76.0
+1257.6 50.1
+1258.9 47.6
+1260.6 253.5
+1261.6 167.3
+1262.8 138.7
+1263.5 6.3
+1264.3 16.2
+1268.2 1.0
+1269.3 20.6
+1271.4 24.4
+1272.6 44.9
+1273.9 142.4
+1274.8 1062.2
+1275.7 545.3
+1276.6 308.3
+1277.9 49.7
+1280.5 6.2
+1281.3 34.3
+1282.5 1.4
+1285.0 46.4
+1286.8 46.9
+1287.6 26.8
+1288.6 22.9
+1290.9 32.2
+1292.4 7.1
+1293.9 3.9
+1294.9 25.3
+1295.7 6.1
+1298.2 141.2
+1299.0 4.8
+1299.8 52.5
+1300.9 73.5
+1302.0 24.7
+1302.7 5.4
+1304.6 37.7
+1305.7 32.1
+1306.4 49.8
+1310.0 11.7
+1312.2 42.5
+1313.2 63.0
+1314.2 12.4
+1315.1 9.6
+1316.3 23.4
+1317.2 51.6
+1318.1 26.8
+1318.9 14.9
+1319.5 8.4
+1321.4 9.0
+1322.0 28.0
+1322.6 74.8
+1323.7 72.1
+1324.9 18.9
+1326.7 37.6
+1327.7 34.4
+1328.7 19.1
+1330.0 18.8
+1331.8 15.4
+1332.7 15.3
+1333.5 7.3
+1335.8 17.0
+1336.8 1.4
+1338.1 3.9
+1339.0 41.7
+1340.1 43.7
+1340.9 48.4
+1341.9 33.1
+1342.6 11.1
+1343.7 79.0
+1344.6 17.3
+1345.9 16.2
+1346.8 33.8
+1348.5 71.8
+1351.3 24.0
+1354.7 18.6
+1356.2 27.1
+1357.0 43.2
+1357.8 38.5
+1359.6 35.1
+1361.7 315.4
+1362.7 246.0
+1363.8 110.4
+1365.3 2.1
+1367.8 8.7
+1369.3 40.4
+1370.6 10.2
+1371.8 29.2
+1373.0 27.9
+1373.8 15.1
+1376.6 41.3
+1377.8 30.4
+1379.5 8.0
+1380.8 37.8
+1381.7 6.0
+1383.5 10.0
+1387.8 26.3
+1388.9 21.5
+1389.9 38.7
+1390.8 30.1
+1394.6 36.4
+1395.2 4.2
+1399.4 33.2
+1400.0 15.2
+1403.6 13.1
+1404.5 19.4
+1406.1 55.8
+1409.8 19.8
+1411.7 8.0
+1413.9 12.1
+1414.6 29.7
+1416.0 52.9
+1416.8 9.3
+1419.8 12.9
+1421.5 44.8
+1422.4 2.1
+1423.5 13.5
+1424.9 17.7
+1426.7 35.2
+1427.7 15.8
+1429.8 36.4
+1430.5 15.7
+1431.6 47.4
+1432.8 213.1
+1433.9 120.4
+1434.8 64.3
+1435.5 36.3
+1436.1 27.2
+1437.7 20.1
+1438.6 27.4
+1443.3 3.5
+1444.7 50.6
+1445.9 25.0
+1446.8 58.2
+1447.8 26.7
+1448.8 11.2
+1450.2 35.1
+1450.8 3.7
+1451.9 13.5
+1457.7 2.4
+1458.8 4.3
+1459.9 13.4
+1462.4 31.2
+1464.1 24.7
+1464.7 23.6
+1465.8 16.2
+1466.8 6.5
+1468.5 66.2
+1469.6 44.4
+1470.2 17.8
+1470.9 28.1
+1471.9 10.5
+1473.1 11.0
+1476.3 5.6
+1479.8 5.3
+1482.0 2.0
+1482.7 9.1
+1484.8 4.2
+1486.6 1313.0
+1487.7 909.7
+1488.8 478.1
+1490.0 46.5
+1492.8 127.9
+1493.7 133.4
+1494.8 67.1
+1495.7 6.8
+1501.0 16.6
+1501.9 8.8
+1503.1 5.1
+1504.9 20.3
+1506.8 38.8
+1509.1 19.8
+1512.0 6.8
+1516.5 2.7
+1518.8 24.1
+1520.8 7.1
+1521.9 6.6
+1524.8 34.9
+1528.0 5.4
+1533.2 13.2
+1534.6 4.5
+1535.8 39.3
+1536.7 11.6
+1540.8 8.9
+1541.7 3.7
+1543.2 2.5
+1548.8 6.3
+1549.8 11.2
+1550.8 13.3
+1552.2 5.1
+1556.6 10.6
+1557.6 4.0
+1559.9 11.6
+1560.5 13.1
+1564.0 6.6
+1565.0 6.6
+1568.8 22.5
+1570.0 4.1
+1571.1 11.7
+1571.8 32.5
+1573.7 10.8
+1574.9 5.4
+1575.8 54.6
+1576.9 12.4
+1577.8 12.2
+1578.8 19.0
+1581.7 4.4
+1582.7 11.2
+1583.8 9.9
+1587.8 3.1
+1592.8 245.1
+1593.9 321.1
+1595.0 127.8
+1596.1 28.0
+1599.8 182.1
+1600.9 168.8
+1601.9 80.2
+1602.8 25.2
+1603.9 3.8
+1607.0 6.4
+1609.8 1.7
+1613.8 11.9
+1616.8 28.7
+1617.8 4.9
+1620.1 9.1
+1623.1 10.8
+1624.6 1.4
+1633.2 3.6
+1635.2 10.5
+1638.0 18.2
+1645.5 14.6
+1649.1 13.4
+1649.8 1.7
+1652.2 8.0
+1653.0 8.1
+1657.9 20.9
+1660.9 3.8
+1662.7 28.7
+1664.8 23.1
+1676.6 3.1
+1684.9 15.0
+1685.9 2.8
+1686.9 7.1
+1689.2 3.5
+1694.8 15.1
+1695.5 9.1
+1697.0 26.2
+1698.1 31.1
+1701.7 8.8
+1704.0 3.9
+1705.3 4.1
+1707.8 8.3
+1708.9 23.0
+1712.9 410.8
+1714.0 306.4
+1714.9 139.9
+1716.0 31.9
+1717.0 12.1
+1729.5 3.4
+1736.9 5.9
+1739.1 12.8
+1746.0 19.8
+1763.0 31.7
+1763.7 24.2
+1764.9 33.2
+1766.3 29.0
+1776.3 3.6
+1782.1 8.5
+1791.7 6.1
+1797.9 15.3
+1809.9 5.6
+1812.9 3.4
+1817.6 19.5
+1830.9 7.5
+1842.1 10.1
+1843.3 19.6
+1844.9 21.5
+1853.2 22.4
+1855.5 6.7
+1856.8 14.2
+1860.0 70.5
+1861.1 66.1
+1862.0 21.5
+1863.1 17.3
+1867.0 2.9
+1870.0 11.3
+1872.4 28.9
+1878.2 11.0
+1879.1 33.7
+1880.1 11.9
+1885.5 14.5
+1889.2 4.3
+1890.2 13.9
+1914.8 11.6
+1932.1 8.6
+1982.0 6.4
+S	42	42	1032.26
+Z	3	3094.76
+293.9 1.9
+300.9 2.0
+314.2 0.9
+325.2 10.7
+326.1 1.4
+334.3 2.0
+336.1 1.3
+338.3 0.3
+341.7 6.2
+342.4 8.1
+352.5 1.0
+353.7 1.2
+356.0 1.1
+359.2 5.2
+360.9 0.3
+367.2 2.2
+369.5 1.3
+370.5 2.7
+371.2 3.2
+380.3 4.2
+385.4 5.4
+386.2 0.4
+387.3 2.0
+389.3 7.6
+390.1 1.7
+391.3 1.8
+394.2 2.9
+395.0 2.7
+397.4 2.4
+409.2 2.1
+412.3 2.2
+413.3 7.3
+415.4 17.5
+416.1 3.5
+423.3 4.4
+425.3 3.2
+427.4 2.8
+428.5 0.8
+432.1 0.7
+438.5 1.6
+448.3 0.8
+451.1 0.3
+453.5 2.1
+454.5 11.3
+456.4 1.3
+459.2 1.8
+465.4 2.1
+467.2 2.0
+469.3 1.5
+470.5 3.3
+472.4 0.4
+473.2 1.0
+476.4 1.2
+477.8 4.2
+478.8 1.2
+480.4 1.6
+484.5 0.3
+488.3 5.6
+494.2 2.4
+502.3 2.0
+504.6 8.8
+505.6 1.7
+510.3 2.0
+512.6 3.7
+513.3 3.4
+514.5 2.8
+519.4 2.3
+522.4 3.6
+523.3 4.4
+524.8 4.6
+525.7 2.4
+526.5 0.9
+530.4 2.9
+536.9 1.9
+540.4 2.2
+541.3 4.2
+542.7 1.0
+543.3 0.3
+544.4 3.8
+548.2 0.5
+549.4 0.8
+551.4 7.8
+552.4 7.3
+554.7 1.5
+563.0 7.5
+564.1 2.1
+569.4 1.4
+572.1 72.9
+573.1 8.4
+575.5 1.8
+577.6 0.7
+580.4 3.8
+583.4 5.9
+585.3 4.2
+586.5 1.9
+588.6 0.8
+590.6 2.2
+591.4 0.9
+595.7 1.7
+597.2 3.0
+598.2 3.4
+599.4 4.7
+600.1 1.5
+601.5 4.5
+606.7 1.8
+607.7 24.9
+612.1 1.0
+616.4 0.8
+617.2 1.3
+618.4 39.2
+619.3 11.3
+620.6 6.5
+621.4 3.9
+623.4 0.4
+626.5 2.4
+627.2 2.9
+628.6 2.8
+633.4 7.1
+635.3 2.4
+636.0 1.5
+638.3 3.1
+641.3 10.7
+642.0 0.6
+643.5 0.9
+644.2 2.1
+648.4 3.6
+649.4 5.3
+650.3 3.5
+651.7 7.6
+653.6 1.4
+654.3 3.3
+655.3 0.6
+656.3 3.3
+657.5 3.3
+658.5 0.5
+660.4 7.0
+661.6 1.7
+666.4 18.8
+667.5 11.1
+668.2 2.9
+668.9 1.3
+669.5 0.5
+670.8 6.2
+671.5 2.4
+672.7 3.4
+673.6 2.9
+675.5 2.1
+677.4 1.5
+681.8 2.1
+683.6 5.2
+684.5 4.6
+685.3 2.7
+685.9 3.3
+686.6 2.2
+689.4 68.8
+690.4 12.6
+691.4 3.1
+692.6 4.3
+693.4 17.6
+694.3 2.1
+698.0 9.6
+699.5 2.8
+703.1 1.3
+704.6 1.0
+705.4 2.6
+707.1 12.6
+709.5 1.0
+711.5 8.5
+713.3 3.4
+714.3 4.8
+715.0 10.9
+717.4 1.3
+719.8 4.5
+721.6 1.6
+723.6 2.4
+724.8 10.4
+727.5 5.8
+730.6 5.2
+732.8 5.9
+735.4 5.5
+736.5 3.9
+737.5 23.2
+738.7 13.7
+739.6 0.2
+741.2 1.9
+743.7 3.9
+745.3 13.8
+746.3 12.3
+747.5 6.7
+748.5 3.2
+749.2 4.0
+750.1 4.2
+750.9 1.2
+752.1 4.6
+752.9 15.7
+753.7 7.9
+754.5 1.5
+755.5 2.7
+757.5 8.2
+758.5 4.1
+759.3 7.5
+762.1 15.2
+762.9 4.6
+764.1 6.1
+764.8 5.1
+768.3 1.7
+769.3 36.2
+770.8 115.6
+771.5 71.2
+772.5 2.3
+774.4 2.0
+775.1 2.1
+776.3 1.1
+777.9 442.1
+778.5 403.0
+779.5 13.7
+780.2 0.5
+780.9 1.0
+782.2 9.5
+784.5 9.1
+785.5 3.1
+787.2 4.4
+788.5 4.4
+789.5 4.3
+790.5 7.4
+800.3 1.3
+802.4 28.5
+803.6 12.4
+804.9 2.5
+805.7 7.5
+808.5 8.3
+809.4 1.8
+810.7 6.1
+811.4 3.0
+812.3 4.1
+813.3 5.1
+814.2 4.0
+815.1 4.1
+817.1 3.4
+819.8 9.2
+820.5 0.4
+822.6 0.9
+824.5 8.1
+825.4 5.0
+826.9 14.1
+827.6 0.6
+828.9 4.9
+829.7 2.1
+833.2 72.5
+834.0 17.7
+834.8 10.1
+835.8 3.5
+837.1 5.6
+838.8 4.8
+840.2 16.1
+840.8 8.0
+841.6 0.9
+842.3 192.8
+843.4 9.3
+844.4 0.9
+845.4 8.7
+846.8 5.9
+847.9 2.6
+848.8 8.0
+850.4 2.7
+851.3 7.7
+852.3 2.6
+853.1 6.6
+854.1 1.3
+854.9 6.3
+857.3 5.8
+860.3 18.8
+862.7 6.7
+863.7 1.2
+864.5 4.8
+865.1 0.8
+866.5 11.4
+867.4 1.5
+868.3 8.1
+871.3 8.7
+872.5 8.6
+873.6 8.9
+874.5 1.7
+876.3 2.1
+878.1 3.6
+879.5 23.9
+880.5 5.4
+882.0 14.4
+883.0 5.8
+884.2 28.0
+886.6 2.2
+888.0 2.5
+888.7 2.2
+889.6 0.8
+890.6 6.9
+892.4 7.0
+893.6 3.6
+894.6 7.6
+895.8 2.4
+898.5 4.7
+900.4 18.2
+903.1 6.3
+908.3 1.4
+909.0 6.6
+910.7 1.8
+913.7 30.6
+914.6 6.1
+917.4 15.7
+918.6 2.6
+919.3 2.1
+921.3 8.1
+921.9 14.7
+923.0 5.7
+924.6 1.4
+925.6 9.8
+926.6 5.6
+927.3 0.4
+928.1 1.4
+929.0 5.3
+930.2 27.0
+931.0 10.0
+931.6 43.4
+932.5 32.1
+933.3 4.7
+935.7 2.6
+937.6 8.2
+939.1 17.8
+940.0 438.7
+940.8 597.1
+941.7 47.8
+942.6 22.9
+944.8 9.1
+945.6 9.9
+946.5 3.2
+948.4 29.0
+949.3 3.4
+950.6 0.9
+951.9 17.0
+952.6 7.9
+954.0 3.6
+955.2 13.8
+956.0 9.5
+957.0 26.0
+957.8 9.2
+958.6 7.4
+959.6 15.4
+960.8 5.2
+961.5 6.9
+962.9 11.3
+963.6 4.1
+964.3 9.2
+965.2 4.1
+965.9 9.9
+967.0 3.0
+968.0 61.5
+969.1 23.3
+970.1 18.2
+971.1 15.8
+972.4 9.7
+973.1 3.9
+974.1 9.7
+975.2 9.2
+975.9 5.5
+976.7 14.3
+977.3 236.7
+978.0 36.8
+978.9 79.3
+979.9 202.2
+980.8 10.0
+981.9 9.6
+982.7 18.0
+983.7 10.5
+984.6 16.2
+985.3 4.3
+986.5 7.9
+987.1 9.7
+989.5 9.0
+990.5 10.6
+992.2 16.8
+993.2 9.7
+994.1 19.9
+995.3 6.6
+996.1 31.3
+997.2 24.5
+997.9 25.3
+998.8 12.0
+999.5 19.3
+1000.3 35.1
+1001.1 24.7
+1001.7 1.8
+1003.7 28.1
+1004.7 17.3
+1005.6 25.4
+1006.5 8.0
+1007.9 5.0
+1009.2 51.4
+1010.0 16.2
+1010.8 46.7
+1011.7 12.2
+1012.9 12.5
+1013.6 15.3
+1014.3 67.4
+1015.1 11.6
+1016.1 25.7
+1017.4 17.9
+1018.6 15.4
+1019.6 15.0
+1020.9 15.8
+1022.0 8.9
+1023.0 1.5
+1033.8 6.1
+1037.6 1.4
+1038.3 1.5
+1042.6 4.0
+1046.0 0.4
+1048.3 2.7
+1052.1 2.0
+1053.7 1.7
+1057.6 2.3
+1058.5 3.3
+1060.7 8.2
+1064.6 4.8
+1065.9 8.9
+1068.1 3.4
+1069.4 15.5
+1074.4 4.2
+1075.5 5.8
+1076.8 6.5
+1077.8 11.8
+1078.8 2.2
+1079.6 6.4
+1082.9 2.4
+1084.5 2.8
+1085.4 2.1
+1086.4 13.4
+1087.6 6.7
+1088.6 7.1
+1089.7 20.8
+1090.5 4.5
+1091.4 7.1
+1094.4 2.1
+1096.0 9.6
+1096.6 1.7
+1097.8 1.8
+1099.9 22.8
+1101.8 1.2
+1102.9 5.7
+1105.7 1.8
+1106.5 2.0
+1107.2 4.4
+1108.4 7.6
+1109.4 10.1
+1110.1 2.1
+1113.7 17.3
+1117.7 1.1
+1118.6 0.4
+1122.8 3.9
+1123.9 3.3
+1125.7 8.6
+1126.4 1.6
+1128.8 2.7
+1131.4 6.2
+1132.9 1.2
+1133.7 0.3
+1134.3 6.0
+1135.7 5.1
+1137.3 1.5
+1138.1 1.3
+1139.1 5.2
+1139.8 0.9
+1140.5 4.2
+1142.6 205.2
+1143.6 118.5
+1144.7 22.2
+1145.8 2.9
+1147.2 17.8
+1148.0 9.0
+1149.8 7.8
+1150.5 3.4
+1151.9 16.2
+1152.6 4.1
+1153.5 10.9
+1156.6 1.5
+1157.6 8.3
+1158.7 58.2
+1160.0 5.0
+1160.6 3.0
+1162.6 0.9
+1166.2 64.8
+1167.1 12.9
+1168.0 3.7
+1169.0 3.8
+1171.6 8.7
+1173.8 12.0
+1174.8 0.8
+1176.5 1.2
+1178.3 8.1
+1180.7 7.9
+1181.6 14.5
+1182.4 0.2
+1183.4 2.5
+1184.4 7.2
+1185.3 4.0
+1186.4 10.7
+1187.8 2.6
+1189.2 6.4
+1190.0 5.8
+1190.8 6.7
+1191.5 1.0
+1192.6 2.1
+1194.1 42.4
+1195.1 15.0
+1195.8 23.0
+1196.7 1.2
+1198.5 120.3
+1199.4 56.2
+1200.6 22.6
+1202.4 2.3
+1203.6 60.0
+1204.4 139.4
+1205.4 7.5
+1206.7 0.6
+1208.4 5.3
+1210.3 1.7
+1213.6 70.7
+1214.7 33.7
+1215.9 29.1
+1216.5 380.2
+1217.5 185.1
+1218.7 48.5
+1220.0 12.3
+1229.4 3.8
+1230.3 24.9
+1231.1 2.9
+1231.7 5.3
+1233.0 3.2
+1234.8 2.1
+1235.6 7.8
+1239.1 9.2
+1239.7 29.0
+1240.6 13.6
+1242.1 13.1
+1243.9 2.4
+1245.4 2.0
+1246.6 0.8
+1247.5 41.3
+1248.4 44.5
+1249.4 3.1
+1250.7 12.2
+1253.7 4.0
+1255.5 6.2
+1259.3 4.2
+1260.6 11.3
+1262.0 8.5
+1264.0 10.6
+1267.6 5.2
+1268.7 7.9
+1269.9 3.2
+1271.0 11.7
+1273.1 5.7
+1274.7 10.8
+1275.7 2.1
+1276.4 10.9
+1277.8 12.2
+1278.4 5.8
+1280.0 1.7
+1280.8 2.2
+1281.8 7.6
+1283.4 70.3
+1284.2 23.2
+1285.0 6.4
+1288.4 4.6
+1290.6 3.5
+1292.1 2.0
+1296.2 20.1
+1296.9 17.3
+1297.6 4.8
+1299.4 6.2
+1301.5 5.7
+1307.3 5.9
+1308.6 13.3
+1311.2 9.1
+1316.0 4.3
+1317.7 0.7
+1319.3 10.3
+1321.0 2.3
+1322.9 4.7
+1323.5 5.3
+1328.1 16.9
+1328.9 26.9
+1329.9 14.0
+1331.3 1.9
+1332.6 10.5
+1333.3 100.1
+1334.5 3.3
+1338.3 10.2
+1339.3 7.4
+1340.1 2.1
+1340.9 1.2
+1342.2 138.0
+1343.3 7.3
+1344.9 3.8
+1345.7 6.9
+1347.0 3.4
+1347.9 2.6
+1348.5 1.4
+1349.9 4.5
+1353.0 17.9
+1354.1 46.8
+1355.1 8.4
+1355.9 17.3
+1357.2 2.4
+1359.0 5.7
+1359.6 1.6
+1362.0 12.3
+1362.8 34.1
+1363.6 6.9
+1364.4 4.4
+1365.5 2.2
+1366.3 8.4
+1367.8 4.6
+1369.8 0.7
+1372.8 12.0
+1374.6 5.3
+1375.7 2.3
+1376.6 1.0
+1377.7 5.4
+1381.4 0.9
+1383.3 2.1
+1384.7 1.7
+1385.7 6.3
+1387.8 11.7
+1394.6 28.8
+1395.7 15.7
+1396.6 1.4
+1397.7 5.6
+1398.4 11.0
+1399.9 3.0
+1402.1 1.9
+1403.0 4.6
+1403.9 5.4
+1405.5 5.6
+1406.4 11.0
+1408.4 1.9
+1409.7 10.1
+1411.2 10.7
+1412.6 88.4
+1413.5 83.3
+1414.3 21.5
+1415.0 9.9
+1415.9 9.4
+1417.0 0.5
+1418.2 29.7
+1418.8 27.8
+1419.6 9.5
+1420.4 1.4
+1421.6 5.1
+1422.3 1.2
+1423.8 1.6
+1425.0 0.4
+1426.0 3.1
+1427.0 22.4
+1427.7 15.9
+1428.5 2.6
+1429.9 6.1
+1431.1 21.9
+1432.8 2.3
+1433.7 6.7
+1435.6 1.7
+1437.0 2.3
+1438.9 1.5
+1439.5 3.0
+1440.4 14.3
+1441.0 6.3
+1442.0 10.5
+1444.0 6.4
+1444.9 8.3
+1445.7 1.3
+1447.1 8.1
+1448.6 5.0
+1452.5 2.4
+1453.4 7.9
+1456.7 2.9
+1457.9 14.9
+1459.1 12.2
+1461.0 1.7
+1463.8 4.2
+1465.4 6.4
+1466.4 10.6
+1467.3 4.7
+1468.9 1.0
+1469.9 6.1
+1470.7 10.3
+1471.4 15.2
+1472.3 3.6
+1474.7 64.0
+1475.3 60.8
+1475.9 24.6
+1476.7 0.7
+1478.2 8.0
+1478.9 6.3
+1480.1 1.3
+1481.1 6.2
+1482.8 7.2
+1485.6 2.9
+1486.8 3.0
+1487.9 15.8
+1489.3 4.4
+1490.3 9.8
+1491.3 19.2
+1492.5 4.1
+1494.5 6.8
+1498.1 1.7
+1499.2 3.2
+1501.8 1.3
+1502.9 1.9
+1504.4 3.3
+1506.1 1.8
+1507.6 1.4
+1512.8 7.6
+1518.6 0.4
+1519.5 1.0
+1520.8 2.4
+1522.7 84.9
+1523.8 62.5
+1524.6 14.6
+1525.4 2.3
+1529.8 3.3
+1531.0 3.4
+1536.2 0.3
+1537.0 5.0
+1537.8 11.2
+1538.9 0.9
+1540.1 17.3
+1540.7 225.1
+1541.7 213.9
+1542.7 67.8
+1543.5 6.2
+1545.5 2.0
+1546.6 1.9
+1554.7 174.0
+1555.8 133.8
+1556.9 56.2
+1558.1 4.0
+1562.7 1.1
+1566.1 2.4
+1567.5 2.1
+1572.9 5.5
+1575.4 3.7
+1577.5 0.9
+1578.2 3.8
+1580.0 7.1
+1582.8 2.1
+1589.0 2.4
+1597.3 0.5
+1600.0 1.9
+1610.5 1.3
+1618.1 2.3
+1619.8 5.1
+1621.9 0.4
+1626.5 2.2
+1628.7 2.4
+1631.2 4.7
+1633.9 1.1
+1639.2 0.8
+1642.2 3.3
+1648.6 2.0
+1650.4 3.1
+1664.8 1.8
+1666.1 5.2
+1666.7 2.9
+1667.6 1.2
+1682.9 3.0
+1684.0 3.7
+1684.8 5.9
+1686.0 1.7
+1689.3 2.3
+1690.7 1.4
+1695.2 1.0
+1700.8 6.3
+1701.5 0.8
+1710.1 3.9
+1713.9 0.9
+1715.5 1.3
+1716.4 1.9
+1718.5 1.2
+1719.2 2.0
+1721.9 1.2
+1725.9 1.0
+1728.7 2.0
+1731.7 0.6
+1733.1 5.4
+1733.8 9.7
+1734.8 1.4
+1741.5 1.6
+1746.0 5.1
+1746.7 0.8
+1749.7 1.5
+1760.3 1.0
+1761.5 1.8
+1763.6 2.2
+1764.9 1.4
+1772.9 11.7
+1778.5 2.1
+1782.2 1.6
+1788.6 1.1
+1790.2 0.9
+1795.9 5.3
+1796.5 1.1
+1801.2 1.0
+1803.0 1.3
+1805.1 0.7
+1811.0 1.4
+1814.8 3.9
+1816.4 0.6
+1818.7 1.5
+1824.7 1.3
+1831.0 3.7
+1834.1 1.5
+1835.5 1.5
+1838.2 1.8
+1845.5 0.5
+1849.7 1.3
+1859.9 3.6
+1864.0 9.3
+1881.9 9.1
+1883.2 7.5
+1883.9 2.1
+1884.5 1.0
+1889.2 0.8
+1895.2 0.7
+1897.9 4.8
+1900.8 4.3
+1902.0 4.1
+1904.9 2.1
+1909.9 3.1
+1912.2 0.3
+1913.1 1.6
+1919.2 2.8
+1928.9 0.7
+1933.4 2.6
+1935.0 15.8
+1935.9 10.1
+1938.2 4.1
+1943.9 4.7
+1944.9 1.2
+1947.6 1.4
+1952.9 16.3
+1953.6 11.5
+1954.3 10.2
+1955.8 5.1
+1956.5 3.1
+1966.3 1.2
+1972.9 1.8
+1973.5 2.8
+S	43	43	713.07
+I	ID	217
+I	RTime	10.7170
+Z	1	713.07
+226.3 2.7
+241.3 1.8
+251.2 3.7
+255.3 5.4
+258.1 1.3
+274.1 3.9
+276.0 2.7
+280.3 2.5
+284.3 1.7
+292.1 2.4
+295.3 8.0
+310.1 2.7
+312.1 3.0
+315.2 3.0
+324.2 2.5
+326.2 3.4
+333.2 2.7
+342.2 3.0
+343.3 3.0
+371.6 4.1
+376.2 3.7
+380.2 3.2
+394.5 1.2
+403.2 0.8
+413.3 2.2
+421.2 1.6
+423.9 2.5
+438.3 5.3
+439.1 2.5
+442.7 1.7
+452.5 3.9
+453.5 1.3
+468.0 3.9
+469.2 5.6
+470.3 4.3
+474.3 2.9
+475.1 2.2
+488.3 5.0
+495.0 2.5
+496.3 9.0
+497.5 11.1
+498.3 17.5
+499.0 1.2
+505.3 5.4
+517.1 2.5
+524.1 1.0
+530.4 7.5
+531.5 1.0
+532.2 3.7
+535.2 3.5
+538.3 5.5
+547.4 2.2
+548.5 2.9
+553.1 3.7
+557.3 3.0
+565.3 3.7
+566.3 1.2
+567.3 9.6
+573.3 4.5
+583.5 1.5
+584.3 6.0
+591.4 3.2
+592.1 3.2
+594.4 3.0
+597.3 4.4
+598.3 2.0
+605.4 1.3
+612.9 3.5
+615.5 2.5
+620.5 3.5
+652.3 6.0
+653.4 1.8
+659.9 11.8
+662.3 2.0
+663.3 4.3
+664.1 12.5
+676.4 3.7
+677.7 5.5
+678.3 7.9
+682.3 2.0
+683.7 1.5
+694.2 17.2
+695.3 37.7
+696.4 14.8
+697.9 2.7
+704.4 6.6
+819.2 3.9
+922.6 7.4
+1273.2 1.5
+S	44	44	1002.52
+Z	2	2004.03
+283.0 3.7
+285.1 4.5
+289.3 23.0
+293.2 6.6
+300.1 10.6
+301.3 125.0
+302.2 13.8
+305.3 12.3
+308.1 9.1
+309.0 3.4
+311.2 3.4
+312.3 9.6
+313.4 9.1
+315.3 20.7
+316.2 7.5
+317.3 7.8
+318.4 3.7
+319.5 2.5
+323.1 5.4
+325.2 6.5
+327.4 2.7
+328.2 24.7
+329.3 7.0
+330.3 10.6
+332.3 5.0
+333.3 3.5
+335.1 9.5
+337.2 14.3
+339.1 14.6
+340.2 16.0
+341.1 61.4
+342.1 2.9
+343.2 9.8
+344.1 19.0
+345.3 75.5
+346.1 7.5
+347.2 13.1
+349.5 5.0
+350.2 9.6
+351.7 11.1
+352.3 2.5
+353.3 78.6
+354.4 5.8
+355.4 5.8
+357.2 6.8
+358.3 8.6
+361.5 31.2
+362.4 2.5
+363.3 16.3
+364.3 22.8
+365.1 7.0
+366.9 5.0
+368.1 5.4
+369.3 7.9
+370.4 14.1
+371.3 8.0
+372.2 3.5
+373.1 6.4
+374.1 14.1
+375.3 3.4
+376.1 8.1
+377.4 22.6
+378.2 5.5
+379.4 9.8
+380.3 58.9
+381.4 27.7
+382.4 19.1
+384.4 7.0
+386.3 10.0
+387.4 7.8
+388.3 4.6
+389.8 27.5
+391.2 17.5
+393.0 2.9
+394.0 8.6
+395.5 9.5
+396.4 17.5
+397.6 19.2
+398.3 148.3
+399.3 45.5
+400.4 23.8
+401.2 44.7
+402.4 4.5
+405.0 16.2
+406.1 3.7
+408.3 31.5
+409.5 8.0
+410.1 3.5
+411.2 41.7
+412.5 37.7
+413.3 161.0
+414.4 56.9
+415.2 87.8
+416.4 35.7
+417.3 15.3
+418.3 49.0
+419.4 56.0
+421.0 14.6
+422.0 9.3
+423.3 8.6
+424.1 9.6
+425.2 8.3
+426.3 21.7
+427.2 11.8
+428.3 15.8
+429.1 2.2
+430.2 13.3
+432.5 2.7
+433.3 9.8
+434.6 8.3
+435.5 14.1
+436.3 186.1
+437.2 34.2
+439.0 101.1
+440.3 46.0
+441.3 14.6
+442.2 7.0
+443.1 13.3
+444.2 23.0
+445.3 31.8
+446.3 18.7
+448.1 4.9
+449.4 28.2
+450.4 10.5
+451.3 13.0
+452.3 3.4
+453.1 9.8
+454.2 17.2
+455.6 13.6
+456.3 7.0
+457.2 19.5
+459.3 41.2
+460.2 19.3
+461.3 12.6
+462.1 33.0
+463.4 50.4
+464.3 17.5
+465.4 18.5
+469.4 4.4
+470.5 13.6
+471.3 10.0
+472.6 27.3
+473.2 5.5
+474.3 20.8
+475.3 22.2
+476.4 16.2
+477.2 57.0
+478.1 19.2
+479.2 8.3
+480.2 24.7
+480.9 6.8
+483.1 6.0
+484.0 8.0
+486.0 6.0
+487.2 17.3
+488.3 27.7
+489.3 7.8
+490.3 14.1
+491.4 16.2
+492.2 16.2
+493.3 40.4
+494.0 4.8
+495.2 12.1
+496.3 20.5
+497.5 15.5
+498.4 53.7
+499.3 29.7
+500.2 11.5
+501.0 6.4
+502.3 9.5
+503.2 4.5
+505.3 7.4
+507.4 35.2
+508.4 25.7
+509.4 41.9
+510.3 37.0
+511.5 56.2
+512.4 8.0
+513.4 189.0
+514.3 90.6
+515.4 46.7
+516.3 88.3
+517.4 21.2
+518.5 5.6
+519.1 5.8
+520.2 15.8
+521.2 48.0
+521.9 12.8
+522.6 14.8
+523.8 15.1
+525.1 12.8
+527.3 45.7
+528.5 2.7
+529.4 17.2
+530.4 7.1
+533.4 71.8
+534.3 3.4
+535.3 19.8
+536.2 4.8
+539.3 25.0
+540.5 32.0
+541.3 22.8
+542.7 6.1
+543.3 29.2
+544.3 41.9
+545.2 205.0
+546.3 14.1
+547.2 11.3
+548.0 4.5
+549.6 18.5
+550.2 15.3
+551.5 16.3
+552.4 11.6
+554.1 17.5
+555.4 289.8
+556.4 34.0
+557.4 5.3
+559.3 25.1
+560.6 31.1
+561.3 51.9
+562.2 241.1
+563.3 37.5
+564.4 38.9
+565.4 9.6
+567.0 20.3
+567.8 23.6
+568.4 42.4
+569.2 25.7
+570.4 5.1
+571.3 7.3
+573.2 31.6
+575.7 10.6
+577.6 12.3
+578.4 102.1
+579.3 102.1
+580.1 35.2
+581.3 28.2
+582.2 4.5
+583.2 60.4
+584.2 17.2
+585.5 17.2
+586.2 70.8
+587.5 74.3
+588.6 23.7
+589.4 38.5
+591.0 27.7
+592.3 31.1
+593.1 28.0
+594.1 8.0
+595.5 28.7
+596.3 9.5
+599.2 5.6
+600.3 8.6
+601.2 6.1
+603.3 11.3
+604.4 18.7
+605.4 25.2
+606.2 30.3
+607.2 86.9
+608.0 32.9
+609.3 35.2
+610.2 36.0
+611.4 36.2
+613.3 42.5
+614.3 90.1
+615.0 7.9
+616.2 4.0
+617.1 4.6
+618.3 16.2
+619.4 6.1
+620.1 11.3
+621.0 26.3
+623.0 6.1
+624.3 45.0
+625.6 32.9
+626.4 22.3
+627.5 125.5
+628.5 41.0
+629.5 30.7
+631.1 92.6
+632.2 55.2
+633.1 53.5
+634.7 30.2
+636.2 5.5
+637.1 31.2
+637.9 10.1
+639.3 25.7
+640.1 2.2
+641.3 27.7
+642.2 57.7
+643.4 88.5
+644.4 147.6
+645.4 102.4
+646.4 64.4
+647.4 12.3
+648.5 98.0
+649.3 79.4
+650.4 22.2
+651.5 15.6
+652.4 23.2
+653.3 14.6
+654.3 27.2
+655.3 39.0
+657.2 24.7
+658.2 2.2
+659.3 26.1
+661.4 958.0
+662.5 310.3
+663.4 48.7
+664.3 33.2
+665.4 9.1
+666.5 15.8
+667.4 10.6
+668.1 6.8
+669.3 19.8
+671.3 19.6
+672.5 19.5
+673.3 11.8
+674.3 7.4
+675.5 14.8
+676.3 30.2
+677.2 15.8
+678.4 13.8
+679.6 5.5
+681.2 35.7
+682.4 32.2
+683.4 17.7
+685.0 6.8
+686.0 12.5
+687.2 6.6
+688.6 30.3
+689.4 19.3
+690.3 3.4
+691.1 21.2
+692.2 12.5
+693.4 33.9
+694.2 12.5
+695.4 7.5
+696.0 6.3
+697.6 57.5
+698.5 74.1
+699.6 14.1
+700.4 17.2
+701.5 18.5
+702.3 8.1
+703.4 8.6
+704.3 5.0
+705.5 8.8
+706.1 16.3
+706.8 10.8
+707.4 49.7
+708.5 46.2
+709.4 31.7
+710.1 18.7
+711.5 38.2
+712.4 24.2
+713.1 12.8
+713.7 44.0
+715.2 2.5
+716.3 22.3
+717.0 23.5
+719.1 2.5
+720.4 24.5
+721.2 39.2
+722.2 35.7
+723.4 21.6
+724.5 14.1
+725.4 6.3
+726.6 13.1
+727.4 49.7
+728.4 18.7
+729.2 5.6
+730.6 65.5
+731.5 56.5
+732.6 42.2
+734.4 15.0
+735.2 6.0
+736.3 9.0
+737.2 37.2
+738.5 70.1
+739.4 66.1
+741.3 34.5
+742.3 23.2
+743.7 4.6
+744.4 19.8
+745.2 27.8
+746.5 11.8
+747.5 3.7
+750.4 23.0
+751.4 30.6
+752.4 56.4
+753.4 13.0
+754.6 83.5
+755.4 357.7
+756.8 249.6
+757.5 334.7
+758.5 158.1
+759.3 98.6
+760.1 19.2
+761.7 45.2
+763.1 533.5
+764.1 325.5
+765.2 92.9
+766.2 83.1
+767.4 10.3
+768.4 91.5
+769.5 271.8
+770.4 88.1
+771.4 27.5
+772.4 27.6
+773.4 30.1
+775.5 361.2
+776.4 123.5
+777.4 31.7
+778.7 46.5
+779.7 10.8
+781.0 335.8
+782.1 119.8
+783.0 21.3
+784.6 8.3
+785.3 24.8
+786.3 37.9
+789.3 22.1
+790.0 7.6
+791.4 18.1
+792.2 12.1
+793.4 24.6
+794.4 35.9
+795.1 5.1
+796.4 11.5
+797.5 29.7
+798.5 31.1
+799.3 3.9
+800.4 27.1
+801.2 62.4
+802.0 6.5
+802.7 31.7
+803.6 56.2
+804.6 29.6
+805.5 38.4
+807.4 14.8
+808.4 14.1
+809.4 36.2
+810.0 6.0
+810.6 20.2
+811.4 42.5
+812.3 18.7
+813.5 2.7
+814.4 6.5
+815.4 18.2
+816.2 19.3
+817.2 5.0
+818.2 14.6
+819.1 28.5
+820.2 6.1
+820.9 12.6
+821.5 28.3
+823.2 50.4
+824.6 26.2
+825.5 25.2
+826.2 14.6
+827.5 13.5
+828.5 44.7
+829.7 16.0
+832.7 8.0
+833.3 18.8
+834.3 41.0
+835.2 27.8
+836.4 55.5
+837.6 37.7
+838.7 32.7
+839.4 81.3
+840.2 23.3
+841.1 11.1
+842.5 53.7
+843.5 16.0
+844.1 5.5
+845.4 13.5
+846.4 15.8
+847.3 1.8
+849.5 14.6
+850.6 25.5
+852.5 61.2
+853.4 69.9
+854.1 40.0
+855.4 34.2
+856.4 70.4
+857.3 67.5
+859.0 11.1
+862.5 29.0
+863.5 17.6
+864.3 3.2
+865.0 16.1
+865.8 21.8
+866.5 16.5
+867.5 18.5
+868.7 57.0
+869.8 11.6
+870.8 14.8
+871.6 64.5
+873.0 53.7
+874.3 63.2
+875.3 39.7
+876.3 2.5
+877.4 6.8
+878.4 24.7
+880.6 13.8
+881.4 48.4
+883.4 32.5
+884.4 19.7
+885.7 32.5
+886.8 32.9
+887.9 12.3
+888.7 18.5
+889.5 14.0
+892.7 10.1
+894.2 3.2
+895.1 16.7
+895.8 18.7
+896.6 17.2
+897.3 64.9
+898.2 34.7
+899.5 14.1
+904.0 21.5
+905.4 59.9
+906.7 30.2
+908.3 7.3
+910.3 332.6
+911.4 158.1
+912.3 44.5
+913.4 42.0
+914.3 25.1
+917.6 36.4
+919.6 9.1
+920.2 16.6
+921.4 45.2
+922.7 14.1
+923.9 18.1
+924.7 2.5
+925.5 3.9
+926.4 55.0
+927.1 3.2
+928.0 13.1
+928.8 13.8
+929.4 18.5
+930.4 4.0
+931.4 11.0
+932.2 19.2
+933.9 7.8
+935.4 10.6
+937.3 143.8
+938.3 128.8
+939.4 75.4
+940.6 100.3
+941.4 78.5
+942.4 60.0
+943.1 48.0
+944.3 7.0
+945.4 18.1
+946.6 12.1
+947.6 45.2
+948.4 35.7
+951.8 9.6
+952.6 13.5
+954.2 27.8
+955.3 100.9
+956.9 153.3
+957.6 502.6
+958.4 325.6
+959.5 581.7
+960.4 221.8
+961.3 14.6
+963.5 37.4
+964.5 65.0
+965.3 151.8
+966.5 86.9
+967.4 84.0
+968.4 54.9
+969.4 24.2
+970.2 19.1
+970.9 50.2
+971.7 13.8
+972.7 15.8
+973.9 29.5
+974.9 35.2
+975.6 1.7
+978.1 45.0
+979.9 28.2
+981.0 48.0
+982.5 995.5
+983.4 2427.6
+984.5 1388.6
+985.4 1453.9
+986.5 440.8
+988.7 36.5
+989.3 5.5
+991.4 30.3
+992.0 94.0
+993.0 59.2
+994.5 9.0
+1011.3 6.6
+1012.4 23.7
+1020.1 3.0
+1022.9 5.0
+1033.4 9.3
+1050.7 4.0
+1059.9 12.5
+1063.4 10.1
+1068.7 4.3
+1070.3 13.0
+1079.8 4.0
+1081.5 3.2
+1082.5 22.2
+1083.1 2.7
+1084.4 6.3
+1085.7 2.2
+1086.3 4.3
+1090.4 193.0
+1091.4 105.1
+1092.6 74.0
+1093.6 9.8
+1095.6 28.7
+1098.8 16.7
+1102.4 205.0
+1103.5 200.6
+1104.5 132.1
+1105.5 8.1
+1111.9 16.3
+1112.8 14.3
+1113.9 48.0
+1114.7 3.2
+1115.6 3.0
+1120.5 4.9
+1122.5 16.2
+1123.5 11.6
+1125.2 6.6
+1127.2 13.6
+1129.4 43.0
+1130.3 16.1
+1131.7 6.5
+1133.3 7.0
+1135.5 8.8
+1141.8 3.0
+1144.4 2.0
+1147.2 11.6
+1156.2 14.8
+1160.3 10.5
+1162.8 22.8
+1167.7 10.3
+1168.8 20.5
+1177.4 9.6
+1183.6 20.0
+1191.1 10.5
+1192.5 24.0
+1193.5 27.3
+1198.4 5.1
+1200.0 40.5
+1200.9 17.7
+1201.5 13.3
+1202.6 16.5
+1206.6 4.3
+1207.2 2.7
+1211.2 20.3
+1213.6 8.6
+1217.6 18.3
+1218.3 249.0
+1219.4 479.2
+1220.5 350.3
+1221.6 10.1
+1222.6 20.2
+1223.6 18.7
+1227.5 28.7
+1228.6 4.0
+1229.4 6.5
+1230.4 24.8
+1240.4 5.8
+1242.5 7.0
+1243.4 8.1
+1244.7 4.1
+1245.7 12.3
+1246.6 19.0
+1256.3 15.1
+1265.6 8.1
+1270.2 2.5
+1272.6 4.9
+1273.5 42.9
+1274.5 19.3
+1278.7 5.3
+1281.3 8.5
+1285.5 5.6
+1288.3 6.0
+1293.9 5.8
+1294.8 8.1
+1295.8 9.8
+1297.5 15.0
+1301.2 13.3
+1304.5 18.7
+1305.6 2.2
+1313.6 8.8
+1319.8 5.0
+1320.7 6.5
+1322.3 12.3
+1324.4 11.5
+1325.5 4.9
+1326.4 12.0
+1331.6 7.3
+1333.5 56.0
+1334.5 69.5
+1348.7 13.8
+1354.5 12.1
+1356.3 31.3
+1357.4 10.1
+1372.4 14.8
+1373.4 32.4
+1374.5 12.8
+1376.5 3.4
+1380.3 7.0
+1381.6 52.7
+1382.6 15.3
+1387.5 8.6
+1391.4 8.1
+1392.6 22.5
+1402.3 19.2
+1403.7 27.1
+1404.6 8.8
+1405.4 4.9
+1411.8 23.6
+1412.8 19.2
+1420.5 55.7
+1421.6 113.6
+1422.7 38.7
+1428.4 33.2
+1430.0 14.8
+1432.6 17.0
+1433.8 12.8
+1440.7 9.3
+1447.3 10.6
+1450.7 6.8
+1468.5 11.8
+1469.5 27.5
+1470.5 6.6
+1471.5 11.1
+1476.6 3.0
+1486.6 102.3
+1487.5 170.6
+1488.5 168.3
+1489.6 17.1
+1490.6 8.6
+1492.5 9.6
+1493.4 28.7
+1494.0 20.0
+1494.8 36.9
+1504.1 13.1
+1506.1 18.1
+1510.6 3.7
+1512.1 25.5
+1516.9 12.3
+1522.5 34.7
+1523.5 152.3
+1524.5 70.1
+1525.4 24.2
+1526.1 7.6
+1527.6 7.0
+1528.7 24.2
+1530.6 20.0
+1531.7 10.3
+1545.2 11.0
+1547.5 11.3
+1549.2 11.5
+1552.1 3.5
+1554.2 7.6
+1556.2 16.0
+1562.5 3.0
+1564.7 3.5
+1565.6 2.2
+1567.3 19.8
+1568.5 9.8
+1569.6 25.7
+1570.4 18.2
+1572.3 14.3
+1578.0 32.5
+1586.3 68.6
+1587.3 205.3
+1588.4 180.8
+1589.4 5.0
+1592.6 64.3
+1594.0 7.0
+1594.9 10.0
+1596.9 4.8
+1605.3 14.5
+1608.7 9.3
+1611.4 4.3
+1630.3 6.0
+1638.2 4.3
+1642.1 17.1
+1643.0 5.9
+1644.8 2.2
+1683.3 9.3
+1684.7 5.0
+1685.6 6.0
+1686.9 6.5
+1689.0 12.5
+1694.3 8.5
+1704.6 5.0
+1710.6 14.3
+1712.6 10.6
+1716.4 2.5
+1717.6 37.7
+1722.6 4.5
+1724.7 5.4
+1734.8 31.0
+1735.5 66.1
+1736.4 228.6
+1737.6 14.3
+1739.5 10.1
+1741.2 10.1
+1742.6 8.3
+1745.3 11.3
+1768.4 6.5
+1796.7 11.6
+1808.5 12.6
+1849.6 5.4
+1851.5 13.1
+1852.6 38.7
+1853.5 8.8
+1855.0 31.1
+1856.3 7.4
+1861.3 5.0
+1871.7 9.3
+1967.1 4.3
+1968.2 15.1
+S	45	45	419.32
+I	ID	170
+I	RTime	8.3761
+Z	2	837.63
+127.1 8.1
+129.1 7.5
+130.2 1.0
+135.3 1.5
+147.0 4.9
+148.8 13.8
+158.0 1.2
+161.1 6.1
+174.9 11.1
+200.1 1.7
+205.1 4.1
+218.1 1.2
+220.1 1.2
+223.9 1.0
+225.0 0.8
+226.2 1.5
+227.1 7.5
+228.3 3.7
+231.4 1.0
+235.1 1.7
+240.1 4.5
+241.2 1.7
+243.0 6.9
+249.3 3.5
+253.3 1.2
+255.3 3.0
+256.1 2.4
+260.1 7.4
+269.0 1.3
+271.1 1.5
+273.2 15.6
+274.6 19.1
+275.3 3.2
+287.2 2.0
+290.1 27.3
+291.2 9.5
+292.1 2.7
+293.2 6.1
+299.1 1.0
+301.0 2.5
+304.1 26.5
+305.3 2.2
+318.3 1.0
+322.0 1.2
+325.0 4.3
+330.0 1.6
+331.0 2.0
+335.3 1.6
+339.3 1.2
+340.6 1.7
+342.2 2.7
+344.4 1.7
+345.2 4.0
+347.5 3.2
+348.4 2.5
+349.1 1.2
+351.2 1.1
+353.6 1.1
+354.4 0.6
+355.0 4.5
+355.8 1.5
+357.3 2.0
+359.6 3.7
+361.8 3.2
+366.2 7.3
+367.1 3.0
+369.2 4.0
+370.2 1.3
+371.8 4.4
+374.5 4.9
+375.3 8.3
+378.9 2.7
+383.6 8.3
+384.5 8.1
+385.4 14.1
+386.5 3.5
+387.1 1.2
+388.2 1.2
+389.3 1.1
+391.2 1.3
+396.7 5.3
+401.3 146.5
+402.3 26.5
+403.1 4.5
+406.8 4.0
+407.8 9.8
+409.6 6.3
+410.5 5.1
+411.3 9.6
+412.0 9.0
+432.1 1.3
+449.4 2.0
+486.3 4.9
+488.1 1.7
+497.5 1.6
+501.7 19.2
+509.3 2.2
+521.1 2.9
+535.3 3.0
+536.1 3.0
+555.3 2.2
+557.3 3.2
+562.5 3.7
+564.5 4.4
+565.5 1.0
+574.3 4.0
+579.3 2.5
+594.4 3.0
+597.5 5.5
+599.5 2.4
+608.2 5.4
+615.7 4.3
+691.6 2.0
+708.4 5.0
+709.5 1.7
+S	46	46	613.81
+Z	2	1226.61
+177.2 18.6
+183.0 2.6
+185.8 2.9
+186.9 0.6
+188.0 1.6
+193.2 1.5
+200.2 1.3
+203.0 0.7
+204.8 0.4
+210.2 2.0
+214.0 3.0
+216.2 0.4
+217.0 1.1
+217.9 1.9
+220.4 1.4
+221.2 1.5
+222.2 3.8
+223.1 1.4
+224.3 5.2
+225.0 4.0
+227.1 2.4
+229.3 1.1
+230.1 5.2
+233.3 1.2
+234.1 3.1
+236.0 2.0
+240.0 1.5
+241.4 1.7
+243.3 2.2
+246.0 1.0
+248.2 8.4
+250.3 1.3
+252.2 0.2
+253.7 3.2
+254.4 1.6
+255.2 0.5
+256.4 0.8
+258.3 4.7
+260.0 5.3
+263.1 1.2
+266.5 3.9
+267.7 10.9
+268.9 2.7
+271.3 11.3
+272.2 1.6
+274.3 10.1
+275.2 3.9
+277.4 6.2
+278.2 2.6
+281.3 10.3
+283.1 4.1
+284.3 2.2
+285.2 5.9
+287.1 5.1
+288.9 1.7
+292.2 1.4
+296.3 3.0
+298.4 2.5
+299.1 1.5
+301.1 4.3
+302.1 7.3
+303.1 22.4
+304.2 8.9
+306.0 1.1
+307.2 0.9
+307.9 0.7
+311.2 1.8
+313.0 2.4
+317.2 0.8
+319.2 39.6
+320.2 7.2
+321.3 11.1
+322.0 0.7
+324.5 1.4
+325.2 1.4
+326.2 0.8
+328.2 1.2
+333.2 1.8
+338.2 46.0
+339.2 5.7
+340.1 1.2
+342.3 0.5
+344.1 1.6
+345.1 1.4
+345.9 0.8
+349.1 9.7
+351.2 1.7
+354.5 7.4
+355.3 11.7
+356.3 10.3
+357.1 33.8
+358.1 23.0
+359.2 15.7
+363.2 2.5
+365.2 1.1
+367.3 3.8
+369.2 0.3
+371.3 1.0
+373.2 5.0
+374.3 8.9
+375.5 4.5
+376.5 21.4
+377.4 3.9
+381.3 4.5
+384.2 1.6
+386.4 2.5
+387.3 2.9
+388.0 1.9
+389.2 8.3
+390.6 5.3
+392.4 50.3
+393.3 3.8
+395.1 2.1
+396.2 2.1
+399.4 4.8
+401.2 2.6
+402.4 1.9
+404.3 1.2
+406.2 1.6
+408.4 0.6
+409.2 2.3
+410.4 9.9
+411.6 3.9
+413.5 1.6
+414.4 3.1
+415.9 5.5
+417.4 25.0
+418.2 1.8
+419.1 1.9
+420.3 2.8
+425.0 0.7
+427.4 2.9
+428.3 0.9
+429.0 1.8
+430.1 5.5
+431.1 8.4
+432.0 9.7
+434.3 42.5
+437.3 1.8
+439.0 7.8
+442.2 3.0
+444.4 5.4
+445.3 19.5
+446.6 9.7
+447.4 12.8
+448.1 2.1
+449.5 3.5
+453.0 1.4
+454.7 2.4
+456.1 3.6
+458.5 0.5
+460.3 12.9
+461.3 14.8
+462.3 20.0
+463.4 28.5
+464.5 17.0
+465.4 8.7
+466.1 4.8
+468.2 5.9
+472.2 7.4
+474.4 3.9
+475.5 1.5
+477.2 7.3
+478.5 2.3
+480.1 14.9
+481.3 11.0
+482.5 1.0
+483.8 2.0
+486.5 6.5
+487.6 2.1
+489.9 13.5
+490.5 2.3
+491.3 2.4
+492.3 2.4
+492.9 0.6
+494.0 8.6
+496.1 3.5
+497.2 4.5
+499.4 24.2
+500.3 8.4
+501.2 17.6
+502.6 11.1
+503.3 1.9
+504.3 6.1
+506.6 4.8
+507.4 14.8
+508.6 11.3
+509.3 3.3
+511.2 9.4
+511.9 18.8
+513.1 2.5
+514.2 7.0
+515.6 14.1
+516.5 65.8
+517.4 26.0
+518.4 5.1
+519.0 5.4
+519.6 0.5
+520.3 10.4
+523.0 1.4
+524.6 24.1
+525.4 74.3
+526.3 34.2
+528.0 15.7
+529.0 9.3
+530.3 22.8
+531.4 14.5
+532.2 25.2
+533.4 9.1
+534.1 16.1
+534.8 4.6
+535.7 11.9
+537.3 16.2
+538.1 0.8
+538.7 9.6
+539.5 2.6
+540.8 1.4
+542.1 10.9
+542.8 26.8
+546.1 31.4
+547.4 23.7
+548.3 9.8
+549.7 10.4
+551.1 100.7
+552.1 34.8
+553.6 13.3
+554.7 5.8
+556.2 9.7
+557.5 9.5
+560.1 270.4
+561.0 87.7
+561.9 10.4
+564.3 1.3
+565.4 1.2
+569.0 303.1
+569.8 53.0
+570.6 20.2
+571.7 6.5
+572.4 10.1
+574.1 12.2
+576.6 4.8
+577.6 27.3
+578.3 14.8
+579.4 37.8
+580.0 0.7
+581.3 0.6
+582.0 10.3
+582.8 2.2
+584.1 10.1
+585.1 5.0
+586.7 26.2
+587.3 25.8
+588.0 8.9
+589.4 2.6
+590.2 3.1
+591.1 2.8
+594.2 9.3
+595.1 127.8
+596.1 205.3
+597.2 29.6
+597.9 2.3
+599.5 4.9
+600.5 1.8
+602.3 2.0
+604.3 390.0
+605.0 229.2
+606.0 5.7
+607.1 0.4
+607.8 4.8
+609.8 0.6
+612.6 3.1
+614.2 1.3
+621.3 0.9
+630.3 1.2
+632.5 1.5
+634.7 2.0
+637.0 2.8
+639.1 3.6
+643.6 1.6
+649.3 8.8
+650.7 3.8
+651.9 2.6
+654.3 1.5
+655.8 2.3
+658.3 0.7
+659.2 5.5
+660.5 10.8
+669.1 3.5
+671.1 0.7
+674.4 8.6
+675.2 3.9
+676.2 5.7
+677.9 16.1
+678.6 34.8
+679.4 4.8
+684.3 1.7
+688.4 2.3
+690.3 1.3
+692.3 6.2
+693.2 3.7
+694.3 1.4
+696.7 1.8
+706.1 0.9
+707.5 6.1
+710.7 0.8
+711.3 1.0
+713.4 2.2
+715.5 1.4
+719.2 0.2
+727.2 1.2
+729.0 2.5
+729.7 1.9
+730.6 1.2
+731.5 9.7
+737.4 0.9
+738.2 1.8
+745.3 9.8
+746.3 11.9
+747.4 6.5
+748.7 5.6
+752.9 5.7
+762.2 2.2
+763.3 10.2
+764.1 10.1
+765.5 1.1
+770.4 3.4
+772.4 1.6
+775.9 9.3
+779.5 44.4
+780.4 24.3
+782.5 3.5
+783.6 1.0
+785.0 2.6
+789.8 1.1
+793.2 4.5
+794.5 4.1
+796.1 2.4
+798.5 1.2
+800.3 2.2
+805.4 4.5
+813.5 1.1
+814.6 4.1
+815.4 0.9
+816.3 2.7
+817.3 1.9
+818.1 0.7
+818.7 1.5
+824.5 2.4
+832.4 14.6
+833.3 16.6
+834.0 2.0
+836.4 1.3
+842.4 0.8
+850.4 19.5
+851.4 6.6
+852.2 1.2
+854.2 1.5
+859.6 7.8
+860.4 0.7
+861.6 2.3
+864.0 4.7
+872.7 0.7
+875.3 2.5
+880.4 1.6
+886.1 0.6
+887.7 3.5
+889.3 10.0
+890.3 10.1
+891.6 7.6
+893.5 0.5
+897.5 1.9
+903.5 2.1
+904.1 0.5
+905.0 1.7
+906.2 0.4
+907.5 50.4
+908.4 20.7
+909.4 7.1
+910.1 2.6
+910.8 1.6
+917.4 2.1
+920.9 2.9
+922.2 1.9
+936.8 1.9
+937.4 2.8
+944.7 2.6
+946.0 11.2
+946.7 13.7
+947.7 1.8
+949.9 1.3
+955.3 2.7
+960.7 3.5
+961.8 12.2
+962.7 3.9
+963.3 3.0
+965.5 5.2
+967.5 1.7
+968.5 5.7
+972.3 0.9
+973.2 0.5
+974.6 3.2
+977.9 2.7
+978.5 55.4
+979.5 37.6
+980.4 2.0
+987.0 3.7
+989.3 1.2
+990.4 8.2
+991.5 4.7
+992.6 1.9
+995.7 1.9
+1004.5 0.7
+1006.7 2.0
+1008.5 5.7
+1009.5 8.4
+1012.6 3.6
+1014.6 3.8
+1020.7 0.6
+1030.6 1.6
+1031.2 1.5
+1031.9 1.5
+1032.6 25.4
+1033.5 3.4
+1035.0 2.3
+1035.7 2.2
+1036.4 0.6
+1037.4 2.7
+1038.7 0.6
+1049.5 115.1
+1050.6 54.8
+1051.5 12.5
+1052.6 3.6
+1053.6 0.8
+1054.3 4.7
+1057.6 4.0
+1074.5 0.7
+1075.5 2.0
+1082.0 4.8
+1083.1 0.4
+1094.5 0.8
+1100.7 6.8
+1106.1 1.7
+S	47	47	731.77
+Z	2	1462.53
+213.4 4.4
+216.1 0.9
+226.2 13.1
+234.1 1.3
+238.1 10.8
+239.0 1.5
+244.1 23.6
+251.1 3.1
+257.2 1.2
+259.2 4.1
+260.2 1.4
+267.2 2.2
+283.0 2.1
+284.2 7.3
+288.1 1.2
+294.1 3.5
+308.0 7.8
+315.2 2.2
+317.4 4.5
+325.3 1.3
+326.1 4.6
+343.1 68.5
+343.8 2.4
+347.2 4.3
+349.3 1.6
+352.2 4.2
+369.4 5.6
+373.4 2.3
+376.5 3.5
+383.2 4.7
+384.0 14.7
+396.9 2.5
+401.1 4.4
+406.3 1.6
+407.3 1.6
+409.3 14.8
+412.2 12.8
+414.5 4.1
+418.2 1.2
+419.1 2.8
+423.0 3.0
+429.2 3.9
+430.2 22.6
+433.1 3.8
+437.0 1.2
+449.2 6.3
+455.5 6.2
+458.1 6.2
+466.2 3.2
+468.9 3.9
+471.1 11.8
+473.2 6.9
+474.3 4.8
+477.1 8.1
+478.1 4.9
+480.5 4.2
+483.1 14.0
+484.1 6.8
+486.3 2.9
+489.4 1.9
+490.4 8.0
+491.3 3.4
+499.4 1.5
+501.4 16.3
+515.4 12.3
+516.3 4.0
+519.0 2.3
+520.6 5.8
+521.6 7.5
+529.8 5.6
+531.2 7.9
+533.1 2.1
+546.1 0.9
+549.3 3.0
+551.4 10.4
+556.1 8.2
+557.2 5.0
+558.5 7.8
+560.2 1.5
+561.8 9.4
+566.4 1.0
+567.4 5.4
+569.4 1.5
+573.3 3.9
+576.1 10.5
+577.2 3.8
+582.0 2.0
+584.3 1.0
+585.4 4.2
+587.2 4.9
+588.5 5.4
+593.1 4.0
+596.0 9.7
+597.1 13.8
+598.8 2.9
+602.5 17.9
+603.3 3.2
+604.2 18.0
+610.3 8.6
+611.6 6.3
+614.0 4.0
+615.3 45.4
+615.9 1.7
+616.6 2.6
+617.4 4.9
+620.3 3.8
+624.7 7.6
+625.8 8.0
+632.1 37.8
+633.4 9.5
+635.5 3.1
+638.4 3.7
+643.5 2.4
+647.9 10.7
+648.7 3.6
+652.2 12.5
+657.3 7.7
+659.0 5.9
+660.9 25.9
+664.5 37.3
+665.7 10.4
+666.5 2.6
+669.6 1.1
+671.5 3.3
+672.4 9.6
+673.7 5.1
+676.9 16.5
+683.5 5.4
+684.9 7.3
+686.7 26.5
+687.3 6.0
+689.4 6.6
+692.8 11.9
+693.5 2.8
+698.2 2.1
+700.3 1.2
+702.4 5.6
+703.9 20.7
+704.8 16.8
+706.4 1.0
+711.7 18.1
+712.6 6.0
+713.6 23.6
+714.5 16.8
+715.1 14.8
+716.8 2.2
+719.2 6.5
+720.0 3.5
+721.8 8.0
+722.7 62.9
+723.4 9.9
+737.9 6.9
+741.1 7.1
+741.8 1.3
+742.4 1.5
+744.3 2.8
+747.4 7.6
+756.0 7.4
+756.7 1.2
+766.1 6.2
+767.5 2.6
+781.3 3.5
+783.5 5.4
+784.4 15.1
+785.4 8.2
+786.0 5.1
+788.2 10.3
+789.5 8.5
+792.3 12.3
+801.3 2.8
+803.0 4.4
+803.8 4.4
+808.1 2.6
+813.2 6.4
+814.7 5.2
+815.3 1.9
+817.2 12.5
+819.8 9.8
+825.5 7.7
+830.2 21.8
+831.5 161.6
+832.7 6.7
+836.5 2.8
+841.2 16.7
+843.4 2.7
+846.6 3.7
+847.4 6.5
+854.8 6.0
+855.5 5.7
+857.1 17.7
+864.9 7.5
+869.5 12.7
+877.1 1.9
+879.7 4.2
+883.6 2.9
+884.6 11.8
+885.5 27.4
+886.3 17.7
+887.4 12.7
+888.4 15.8
+889.9 8.4
+890.7 8.7
+893.7 5.5
+894.8 13.9
+895.8 3.3
+897.8 27.1
+898.9 17.9
+903.1 4.1
+912.5 12.8
+913.1 1.2
+917.2 16.5
+918.6 12.7
+925.5 2.2
+927.3 7.5
+928.7 17.4
+929.5 1.0
+930.8 5.2
+933.4 6.0
+936.9 9.7
+939.3 3.2
+943.6 13.7
+947.0 12.6
+952.1 14.2
+953.5 3.8
+958.2 21.7
+962.4 90.7
+963.2 8.3
+965.1 2.9
+966.6 7.1
+967.9 3.8
+969.5 10.6
+973.6 2.6
+974.7 3.7
+975.7 19.2
+976.9 2.6
+980.9 6.6
+983.6 3.6
+985.7 2.9
+996.5 10.5
+998.3 10.5
+999.4 3.2
+1000.6 4.6
+1001.8 12.5
+1006.0 3.7
+1012.6 1.5
+1013.7 7.8
+1017.2 1.9
+1031.3 2.5
+1033.5 52.5
+1034.1 2.9
+1035.1 3.8
+1035.7 5.0
+1039.3 2.9
+1041.6 2.3
+1054.0 1.4
+1055.2 8.5
+1056.5 12.9
+1057.5 6.3
+1065.7 1.0
+1067.5 1.6
+1068.2 1.8
+1083.4 3.4
+1085.5 3.2
+1086.3 5.1
+1087.7 1.8
+1104.5 4.5
+1117.5 5.9
+1120.5 243.4
+1121.2 2.4
+1121.8 12.5
+1129.4 3.9
+1133.3 3.7
+1139.9 4.1
+1146.3 9.3
+1147.0 2.2
+1151.4 7.9
+1155.3 4.9
+1156.3 4.3
+1159.4 1.0
+1164.6 1.7
+1169.5 14.0
+1186.4 2.1
+1201.7 4.1
+1203.3 9.6
+1204.3 7.0
+1212.5 2.9
+1219.7 104.4
+1220.6 5.0
+1246.7 5.9
+1247.6 1.5
+1248.5 3.9
+1249.6 2.4
+1255.6 2.0
+1258.8 2.1
+1271.9 1.8
+1273.8 7.1
+1309.6 1.0
+1313.5 3.4
+1314.9 5.7
+1316.6 16.7
+1358.5 1.2
+S	48	48	692.14
+Z	2	1383.27
+199.1 13.4
+204.3 3.9
+205.1 6.3
+207.0 6.6
+209.1 11.2
+210.1 5.7
+211.8 12.5
+213.2 21.7
+216.1 13.6
+217.2 32.5
+226.1 7.6
+227.2 9.9
+236.1 46.7
+239.1 15.9
+242.2 62.7
+243.3 22.9
+244.1 12.4
+245.2 9.1
+246.3 15.9
+248.1 8.2
+249.2 25.7
+250.4 18.5
+251.1 12.5
+252.3 15.9
+254.3 23.0
+255.1 11.1
+257.2 11.9
+258.4 34.6
+260.2 52.0
+261.4 11.2
+262.2 209.4
+263.3 58.0
+266.1 44.4
+268.1 25.2
+273.3 7.2
+275.0 5.4
+276.1 7.7
+278.2 18.6
+284.2 179.4
+285.3 12.8
+287.0 9.1
+288.6 7.7
+294.2 43.9
+295.1 6.9
+298.1 25.5
+299.3 49.8
+300.3 10.6
+304.4 13.5
+305.6 23.0
+307.9 6.2
+309.0 5.7
+310.4 6.2
+312.4 23.7
+313.2 11.4
+315.2 65.4
+319.1 9.3
+320.5 29.9
+322.0 18.8
+323.4 23.3
+325.4 19.5
+331.2 11.4
+333.2 14.6
+335.4 36.7
+336.5 23.3
+338.1 34.7
+342.1 8.3
+343.5 31.6
+344.2 26.6
+346.5 8.9
+351.2 75.8
+353.2 17.4
+354.3 20.5
+357.4 13.4
+358.3 7.3
+361.3 19.3
+362.5 36.6
+365.3 22.0
+367.4 34.4
+370.2 25.3
+371.3 152.1
+372.3 122.6
+373.5 23.3
+374.5 6.0
+375.7 46.2
+378.2 9.2
+379.2 29.4
+380.1 26.9
+385.2 52.8
+387.3 8.3
+389.1 63.3
+390.3 180.8
+391.3 17.1
+394.1 18.6
+395.4 50.2
+397.5 2.6
+398.2 19.7
+399.7 8.7
+400.4 24.1
+401.2 4.7
+403.3 331.7
+404.3 19.4
+405.2 4.2
+407.3 25.3
+407.9 5.2
+409.1 37.4
+410.3 19.8
+411.1 4.7
+412.5 20.2
+413.2 114.3
+415.2 41.6
+417.4 27.4
+419.1 31.5
+423.5 12.0
+424.3 10.2
+425.3 34.8
+426.5 24.7
+428.3 31.3
+429.4 22.6
+431.2 1098.2
+432.3 216.1
+433.4 25.2
+434.2 8.0
+436.3 21.1
+438.4 22.6
+439.3 6.5
+442.6 12.4
+443.3 34.4
+444.5 83.3
+445.8 55.1
+446.5 58.5
+447.4 40.5
+453.4 3.8
+456.5 12.1
+457.7 10.0
+458.3 10.1
+459.3 44.1
+460.2 16.9
+461.3 907.7
+462.4 232.5
+463.3 29.2
+464.4 54.2
+465.1 17.1
+466.4 76.5
+471.5 21.3
+472.2 18.2
+473.1 30.9
+474.4 45.8
+478.4 32.2
+479.5 20.1
+480.3 35.6
+485.3 5.2
+487.2 25.4
+488.4 20.9
+489.7 59.9
+490.6 30.4
+491.6 52.3
+492.2 17.3
+493.9 25.3
+498.2 73.3
+499.2 11.5
+500.3 96.1
+502.3 25.6
+503.8 19.2
+504.5 34.0
+506.0 8.1
+508.1 34.3
+509.4 6.6
+512.4 23.2
+514.2 3.5
+515.9 52.4
+516.5 57.1
+518.3 126.9
+519.2 48.0
+521.4 512.2
+522.3 80.0
+523.6 40.0
+524.4 9.3
+525.6 10.7
+526.2 32.5
+527.1 48.1
+530.5 134.6
+531.3 91.3
+532.2 24.8
+533.9 6.0
+535.8 49.3
+536.5 128.5
+537.4 68.2
+538.1 12.6
+540.5 9.0
+542.3 7.6
+543.2 27.5
+544.3 376.8
+545.3 57.5
+547.4 55.3
+548.3 37.1
+551.5 13.7
+555.4 71.3
+556.4 18.2
+557.3 34.2
+558.2 68.2
+559.4 51.7
+561.3 70.2
+562.3 117.4
+563.3 87.9
+566.3 43.7
+567.3 27.4
+568.5 7.1
+569.2 8.0
+570.5 40.0
+571.5 8.1
+572.2 27.5
+573.7 27.6
+574.4 319.4
+575.4 78.4
+577.0 75.8
+577.9 15.4
+578.8 27.4
+579.6 31.5
+580.5 56.2
+582.3 101.8
+583.0 20.6
+584.5 41.4
+587.9 82.7
+589.0 10.5
+590.4 15.0
+591.3 14.7
+592.5 13.8
+593.5 29.6
+595.8 24.4
+597.1 304.8
+598.1 48.9
+599.1 117.3
+600.3 107.2
+602.4 5.2
+606.0 682.4
+607.0 108.2
+608.2 18.4
+609.2 23.3
+611.2 18.4
+612.2 30.4
+613.8 45.4
+615.3 74.7
+616.1 4.4
+617.4 14.2
+618.9 9.3
+620.5 42.3
+622.3 8.1
+623.8 90.0
+624.6 30.3
+626.0 10.1
+627.1 10.5
+628.3 31.2
+629.3 43.9
+632.0 99.0
+633.4 187.8
+634.4 39.8
+635.5 10.0
+636.6 13.1
+638.4 11.9
+639.3 84.2
+641.6 115.4
+642.5 52.4
+644.1 103.4
+645.5 198.7
+646.5 213.4
+647.5 75.3
+648.6 70.3
+649.9 6.6
+650.5 5.6
+651.2 136.6
+652.2 46.3
+654.4 51.5
+655.6 54.9
+656.5 22.8
+658.8 32.2
+659.5 19.5
+660.9 20.0
+661.9 35.6
+663.1 77.6
+664.0 24.0
+665.2 18.1
+666.5 8.4
+668.2 36.9
+669.3 127.6
+670.9 68.8
+672.6 753.4
+673.5 539.9
+674.4 280.6
+675.3 65.5
+676.2 17.1
+679.0 41.3
+679.9 58.1
+680.5 29.5
+681.5 226.8
+682.8 1344.1
+683.5 675.8
+684.6 66.8
+690.3 16.4
+697.4 15.2
+699.6 21.6
+700.6 30.2
+702.3 28.5
+703.2 28.1
+705.7 37.2
+706.6 16.9
+708.8 30.1
+713.5 13.1
+714.4 13.2
+716.9 43.6
+718.0 17.5
+720.2 46.5
+721.1 23.9
+722.2 4.7
+727.5 27.0
+729.5 17.7
+730.3 6.7
+732.4 338.5
+733.6 134.8
+734.4 32.2
+737.5 28.1
+738.4 99.4
+743.0 28.3
+744.2 10.7
+745.4 10.0
+747.6 80.0
+750.4 74.9
+751.0 3.3
+753.5 32.6
+755.3 37.5
+760.4 22.6
+769.0 31.0
+772.1 78.6
+773.2 47.5
+774.2 17.5
+775.5 10.3
+777.1 6.6
+783.3 17.1
+784.5 13.9
+785.6 10.2
+786.5 8.6
+789.0 10.2
+791.5 68.2
+792.5 35.0
+793.5 16.8
+798.3 35.2
+799.0 19.2
+801.5 14.0
+802.6 159.1
+804.0 16.8
+804.8 19.7
+809.5 80.2
+810.6 21.0
+815.8 4.3
+817.1 45.0
+818.4 16.9
+821.5 59.2
+822.5 19.5
+823.4 3.8
+825.4 6.6
+829.5 37.2
+830.5 4.1
+831.2 8.6
+833.5 3.7
+834.4 33.5
+839.1 19.8
+841.6 21.8
+843.4 6.7
+845.4 8.2
+847.4 671.5
+848.4 233.1
+849.7 27.2
+852.4 53.7
+853.5 7.5
+854.6 14.9
+856.3 8.8
+857.4 7.3
+860.3 33.6
+862.7 6.1
+866.6 82.2
+868.6 11.1
+869.4 14.0
+873.0 85.2
+875.3 17.8
+877.6 17.3
+879.7 8.6
+883.4 21.1
+884.3 19.2
+885.5 54.8
+886.4 79.8
+887.4 18.7
+892.4 89.5
+894.4 18.7
+895.5 17.8
+899.9 17.8
+903.8 30.0
+904.5 378.9
+905.3 25.9
+906.6 67.9
+907.4 7.1
+911.1 23.8
+914.7 4.6
+918.4 11.1
+919.7 33.3
+922.4 439.7
+923.5 288.5
+926.5 20.9
+927.4 13.7
+929.2 24.3
+931.6 15.5
+933.7 21.7
+935.4 7.3
+936.3 40.5
+937.4 97.2
+938.4 10.5
+939.4 18.6
+940.5 8.3
+941.5 27.2
+942.1 55.7
+944.9 52.4
+950.6 44.6
+954.8 19.1
+957.1 73.6
+962.2 34.2
+963.4 29.2
+964.4 4.3
+971.6 46.8
+972.4 33.1
+975.5 121.2
+976.5 128.5
+977.3 31.5
+978.7 7.3
+979.5 15.0
+991.4 7.7
+993.7 203.8
+994.6 631.2
+995.5 318.4
+996.6 91.0
+997.8 4.7
+1003.8 6.6
+1006.6 10.6
+1007.4 13.5
+1009.5 28.7
+1017.6 8.1
+1021.2 13.1
+1022.3 8.3
+1023.6 19.5
+1032.5 11.0
+1033.5 14.6
+1039.6 16.4
+1042.8 15.6
+1045.5 42.4
+1049.1 10.1
+1049.8 11.4
+1052.5 81.1
+1060.4 22.9
+1063.7 30.9
+1067.3 9.6
+1068.8 16.0
+1069.6 55.3
+1070.6 16.9
+1077.7 3.8
+1082.7 9.1
+1083.8 43.2
+1084.8 15.4
+1090.4 3.7
+1093.4 17.2
+1100.6 7.0
+1103.7 95.2
+1104.5 19.4
+1105.5 12.1
+1106.5 33.6
+1108.8 13.8
+1110.4 10.2
+1115.2 16.2
+1120.4 3.0
+1121.5 186.8
+1122.7 90.0
+1123.5 70.1
+1124.6 51.0
+1125.7 14.5
+1127.8 11.6
+1134.7 17.2
+1135.7 11.0
+1138.4 4.8
+1139.9 27.7
+1140.7 6.4
+1145.5 10.0
+1147.6 18.8
+1148.7 42.9
+1154.6 19.8
+1160.3 10.0
+1161.3 29.4
+1177.3 32.0
+1178.6 13.5
+1179.6 42.8
+1180.6 67.5
+1184.3 46.0
+1191.6 39.8
+1193.6 7.1
+1197.5 37.2
+1198.9 42.9
+1206.6 34.2
+1208.7 5.8
+1210.5 394.5
+1211.5 305.8
+1212.7 75.5
+1217.8 9.6
+1218.6 20.2
+1219.4 14.9
+1220.5 8.6
+1225.7 12.9
+1234.4 27.5
+1236.5 59.7
+1237.4 71.2
+S	49	49	652.22
+Z	2	1303.43
+198.2 0.9
+199.1 2.3
+199.9 2.2
+201.0 6.6
+209.0 1.9
+210.1 1.5
+212.1 1.6
+213.2 2.8
+215.0 1.4
+216.9 1.9
+220.0 3.0
+221.2 1.2
+226.2 1.2
+227.8 0.7
+229.0 13.0
+230.1 8.2
+231.1 5.7
+234.4 1.0
+238.1 1.0
+241.1 3.3
+242.0 2.0
+243.1 2.7
+245.0 2.4
+246.0 3.2
+247.2 1.0
+250.1 3.1
+253.0 1.0
+254.1 4.0
+256.3 1.2
+257.2 1.7
+258.1 7.0
+259.0 1.9
+260.1 3.0
+263.2 2.8
+264.1 1.0
+270.0 6.1
+271.0 1.7
+272.2 5.9
+274.2 1.4
+275.3 8.8
+276.1 2.0
+277.0 4.7
+279.2 2.8
+282.2 1.5
+285.0 3.6
+288.3 1.2
+289.4 2.4
+291.0 1.2
+292.4 1.8
+293.1 2.1
+294.0 3.3
+295.2 2.3
+296.3 1.1
+297.2 0.6
+300.1 2.2
+302.3 1.3
+302.9 1.0
+304.3 0.7
+307.2 2.7
+308.3 1.0
+310.5 4.3
+311.4 0.8
+312.3 0.9
+314.0 1.9
+315.6 3.9
+316.3 2.6
+317.2 1.0
+320.0 0.9
+324.4 3.0
+327.3 0.9
+328.2 8.5
+329.1 1.8
+330.1 3.8
+331.0 6.8
+332.0 7.2
+333.2 3.1
+339.3 0.9
+341.1 4.1
+342.2 2.8
+343.2 1.2
+345.1 0.9
+346.2 15.6
+347.2 5.5
+348.4 1.6
+349.3 1.0
+351.8 2.4
+353.2 1.5
+353.9 1.4
+355.1 3.8
+357.3 7.6
+358.0 51.7
+359.1 5.1
+360.2 0.9
+363.0 1.3
+364.2 4.3
+365.6 1.5
+366.2 2.9
+367.3 1.2
+368.0 3.0
+370.2 1.7
+371.8 1.6
+373.3 2.4
+374.0 0.7
+376.2 4.4
+377.1 1.9
+378.3 1.9
+380.0 2.4
+380.9 2.7
+383.1 24.2
+384.1 2.8
+385.3 1.1
+386.1 1.0
+388.1 2.3
+389.3 2.9
+390.1 1.6
+391.3 7.6
+392.2 7.4
+394.3 0.8
+395.1 2.6
+397.1 6.0
+398.4 4.0
+400.5 4.7
+401.2 2.8
+402.2 5.3
+404.1 3.9
+406.2 8.5
+407.1 3.0
+408.1 3.6
+409.2 3.8
+410.2 3.5
+412.1 4.4
+414.1 1.2
+415.1 3.9
+416.2 7.4
+417.2 3.3
+419.2 4.1
+420.2 3.7
+421.3 0.8
+423.6 3.6
+424.2 13.2
+425.0 2.1
+426.2 14.2
+428.1 6.3
+429.7 4.8
+431.2 5.2
+432.2 1.9
+433.0 1.3
+434.2 5.4
+435.2 2.7
+436.3 2.4
+437.2 3.4
+438.5 1.8
+439.2 4.1
+440.6 1.4
+441.2 3.2
+442.3 4.8
+443.2 23.6
+444.4 6.7
+445.2 13.1
+446.2 10.2
+447.1 3.9
+448.3 1.4
+449.2 2.7
+450.1 6.4
+451.9 12.2
+453.0 7.6
+454.1 7.1
+455.4 10.2
+456.5 5.5
+457.4 5.4
+458.2 2.2
+459.1 4.7
+460.2 6.2
+461.2 4.3
+462.1 2.3
+463.1 4.2
+464.1 3.7
+465.2 2.1
+466.2 1.8
+468.2 10.4
+469.2 2.7
+470.4 77.7
+471.2 283.3
+472.2 4.7
+473.1 3.0
+474.2 5.0
+475.0 1.1
+476.2 3.0
+477.2 7.7
+478.2 3.2
+479.2 2.0
+480.4 6.4
+481.7 2.7
+482.4 0.8
+483.4 5.4
+484.3 6.7
+485.2 5.2
+487.2 5.0
+488.2 5.8
+489.1 3.3
+490.4 2.7
+491.1 4.0
+492.0 4.9
+494.3 2.3
+495.4 2.9
+496.5 3.5
+498.3 6.5
+499.3 6.3
+500.1 6.2
+501.3 6.1
+502.1 8.0
+503.3 5.9
+504.4 4.1
+505.1 4.9
+505.7 7.6
+506.4 8.0
+507.4 2.8
+508.4 2.8
+509.9 4.5
+510.7 1.7
+512.1 3.8
+513.2 4.1
+514.1 9.7
+515.3 7.5
+516.5 2.9
+517.1 1.7
+518.2 4.3
+519.0 3.4
+520.1 26.5
+521.1 3.9
+523.1 4.9
+524.2 2.6
+524.9 3.7
+526.5 4.6
+527.3 3.7
+528.2 5.7
+529.0 13.0
+530.1 5.4
+531.1 3.8
+532.6 2.8
+533.2 3.2
+534.1 2.5
+535.1 7.7
+535.9 8.1
+537.1 20.8
+537.9 21.3
+538.7 3.1
+539.4 12.0
+540.3 6.3
+541.2 7.4
+542.3 5.5
+543.2 12.4
+544.3 17.1
+545.2 13.1
+546.1 15.6
+546.9 6.7
+548.0 0.8
+549.4 3.3
+550.2 5.9
+551.3 9.9
+552.3 7.7
+553.2 9.5
+554.2 7.8
+555.3 1.5
+556.5 7.0
+557.3 2.7
+558.1 4.7
+559.1 4.8
+560.2 28.5
+560.9 3.2
+561.6 2.9
+562.2 0.9
+563.3 6.2
+564.2 4.1
+565.2 3.3
+566.0 14.4
+567.1 4.2
+568.4 8.3
+569.2 3.3
+570.2 6.2
+571.1 8.0
+572.0 30.5
+573.3 15.0
+574.3 11.6
+576.0 11.1
+576.7 7.9
+577.3 1.5
+578.1 11.4
+578.9 5.5
+579.8 9.0
+580.5 3.5
+581.5 5.9
+582.5 5.4
+583.2 5.0
+584.2 6.6
+585.7 9.8
+587.0 12.1
+588.0 12.1
+589.4 5.2
+590.2 4.9
+591.2 2.1
+592.3 4.1
+593.4 5.0
+594.3 16.3
+595.1 10.9
+596.0 5.2
+597.3 2.8
+598.3 18.0
+599.3 12.1
+600.3 8.8
+601.2 10.0
+602.1 4.0
+603.1 5.1
+603.9 3.6
+605.0 18.3
+606.2 13.9
+607.1 19.5
+608.3 12.4
+609.6 4.6
+611.2 6.4
+612.3 5.0
+613.3 7.4
+614.3 14.1
+615.0 22.7
+616.0 35.1
+617.2 109.6
+618.3 40.8
+619.6 15.1
+620.4 10.7
+621.2 4.9
+622.1 5.0
+622.9 8.1
+623.6 10.5
+624.5 9.5
+625.3 6.3
+626.0 5.5
+626.9 10.2
+627.8 6.1
+628.6 22.1
+629.4 37.9
+630.3 10.5
+631.3 5.8
+633.0 106.1
+634.1 158.2
+635.3 29.9
+636.3 12.4
+637.1 6.4
+638.3 6.0
+639.2 5.8
+639.9 20.9
+642.0 207.1
+642.8 97.0
+643.5 40.1
+644.9 7.8
+645.6 2.7
+647.3 1.7
+652.8 1.0
+654.8 1.3
+657.2 1.9
+659.6 1.2
+662.3 1.0
+664.2 4.5
+667.1 8.8
+667.9 2.4
+668.5 7.1
+669.5 7.8
+670.2 6.1
+670.9 1.5
+672.6 5.7
+673.5 2.3
+674.3 2.6
+677.3 0.6
+678.3 2.1
+679.2 0.8
+681.5 0.6
+682.4 1.0
+683.4 1.9
+684.5 7.0
+685.2 41.5
+686.2 24.8
+687.0 4.2
+688.2 2.1
+689.8 4.0
+690.5 3.3
+691.4 5.1
+692.5 0.8
+693.1 1.0
+696.4 2.7
+697.1 0.8
+697.7 0.7
+699.0 3.4
+701.1 9.0
+702.0 3.4
+704.5 0.7
+705.4 1.3
+709.3 1.9
+710.2 1.3
+711.2 2.1
+712.4 7.5
+713.3 9.0
+714.0 1.6
+716.3 3.7
+717.7 7.5
+718.3 0.5
+719.6 1.2
+721.3 1.9
+722.2 1.3
+722.9 1.6
+724.1 4.1
+725.0 3.3
+725.7 2.3
+726.6 4.7
+727.7 2.7
+728.6 5.6
+729.3 12.9
+730.2 45.5
+731.2 19.4
+732.2 3.4
+733.2 5.2
+736.3 2.5
+736.9 4.1
+738.3 5.2
+740.1 6.5
+740.7 0.9
+741.7 5.0
+742.3 13.1
+743.2 4.5
+744.2 4.6
+744.9 3.3
+746.3 4.2
+747.1 2.0
+747.9 1.1
+749.3 2.0
+750.0 2.2
+753.6 4.4
+754.3 1.2
+756.0 5.6
+757.6 2.2
+758.3 4.3
+760.0 2.0
+762.4 1.9
+763.3 2.5
+764.4 1.9
+767.2 4.5
+768.0 1.0
+769.2 12.3
+770.1 0.9
+771.3 1.6
+772.2 1.0
+774.3 2.3
+775.2 2.8
+776.3 2.6
+778.3 4.8
+779.1 2.6
+780.1 2.2
+781.4 2.5
+782.3 2.4
+783.2 5.9
+784.1 3.3
+786.3 6.9
+787.2 4.5
+788.2 5.7
+789.1 3.6
+790.5 7.3
+793.0 3.0
+794.2 7.3
+795.2 3.0
+797.2 3.0
+798.2 6.5
+799.3 3.5
+800.2 5.0
+801.4 4.5
+802.3 0.6
+803.3 2.7
+804.4 1.1
+805.0 2.4
+806.7 4.2
+808.9 3.5
+810.3 2.0
+811.3 6.3
+812.0 1.5
+813.5 2.7
+814.2 2.2
+815.2 0.9
+816.2 2.4
+817.5 3.6
+818.2 4.0
+819.4 1.0
+820.4 0.8
+821.4 3.1
+822.2 1.9
+823.2 3.0
+826.1 4.9
+827.0 13.6
+827.9 3.6
+828.7 2.3
+829.4 1.2
+830.3 2.7
+831.3 2.5
+832.3 3.5
+835.3 1.0
+836.1 0.8
+837.0 2.8
+837.9 1.6
+839.4 3.5
+840.1 4.0
+841.2 12.2
+842.3 2.1
+843.3 2.7
+844.2 5.1
+845.0 2.6
+847.0 4.0
+848.2 7.8
+849.9 3.6
+852.6 4.1
+853.3 1.6
+853.9 1.8
+855.5 6.2
+856.2 2.9
+857.2 18.1
+858.4 3.8
+859.4 20.2
+860.3 3.9
+861.4 6.1
+862.0 1.1
+863.1 3.3
+864.2 1.8
+865.5 7.0
+867.2 6.1
+868.4 5.5
+869.4 1.7
+870.3 3.2
+873.2 2.2
+874.5 2.9
+875.1 1.3
+876.1 4.1
+877.2 4.3
+878.4 3.7
+879.3 5.5
+880.3 2.2
+881.3 2.5
+882.2 1.2
+883.0 2.7
+885.2 5.9
+886.2 1.3
+887.0 2.3
+888.5 1.5
+890.2 1.8
+891.5 2.7
+892.4 1.2
+893.0 1.2
+893.8 2.4
+894.5 1.0
+896.1 1.0
+897.0 2.6
+898.3 5.9
+899.3 4.2
+900.7 2.8
+901.6 3.5
+902.9 9.2
+903.5 0.6
+904.5 4.5
+905.8 0.7
+909.0 3.9
+911.3 35.2
+912.3 6.8
+913.5 1.2
+914.5 5.0
+915.3 7.9
+916.3 5.5
+917.2 4.1
+919.0 2.0
+919.6 2.1
+921.2 1.1
+921.9 0.8
+922.6 1.5
+924.5 2.9
+925.4 6.3
+926.2 1.0
+927.1 1.8
+928.4 2.7
+929.1 0.7
+930.5 2.7
+931.4 2.3
+933.5 1.2
+934.4 1.2
+938.3 7.4
+939.3 3.2
+941.2 2.6
+942.2 3.2
+943.0 0.7
+944.3 2.0
+945.2 3.4
+946.4 4.3
+947.7 2.9
+948.3 3.6
+949.7 3.0
+952.9 2.8
+954.1 2.6
+955.5 7.2
+956.2 27.1
+957.2 8.6
+958.4 2.4
+959.3 1.1
+960.3 4.1
+962.1 6.6
+964.2 1.0
+968.2 3.8
+969.2 11.2
+970.2 10.4
+971.4 4.3
+972.3 3.9
+973.3 2.8
+974.2 33.0
+975.3 16.0
+976.3 5.5
+977.0 0.5
+978.3 4.4
+981.3 1.6
+982.2 3.1
+984.5 5.8
+985.4 1.3
+986.2 2.6
+989.2 4.8
+995.2 1.1
+996.4 1.4
+997.4 2.4
+998.6 3.2
+999.3 3.8
+1000.4 2.6
+1001.2 2.1
+1002.2 3.4
+1005.7 3.1
+1006.3 1.6
+1008.2 2.0
+1009.2 1.3
+1010.4 3.7
+1011.5 6.5
+1013.2 5.2
+1014.7 1.6
+1017.2 4.4
+1018.6 1.1
+1021.5 1.1
+1023.1 0.9
+1024.8 6.3
+1025.6 2.4
+1026.5 8.2
+1027.3 14.2
+1028.2 7.2
+1029.3 7.5
+1030.5 4.0
+1031.4 3.0
+1032.5 1.5
+1034.2 1.7
+1035.1 0.7
+1035.9 1.6
+1037.1 1.1
+1039.2 2.6
+1040.2 1.7
+1041.6 1.3
+1042.5 5.3
+1043.5 3.3
+1044.3 2.1
+1045.5 4.1
+1046.1 0.9
+1047.2 0.8
+1048.5 1.4
+1049.5 1.3
+1050.2 1.8
+1052.3 3.5
+1053.2 7.9
+1054.5 2.1
+1055.5 5.3
+1056.6 2.7
+1057.3 4.9
+1058.1 1.5
+1058.8 1.3
+1060.1 1.4
+1061.2 1.9
+1063.1 2.4
+1064.6 1.9
+1068.3 1.0
+1069.4 4.8
+1070.4 28.4
+1071.3 45.3
+1072.3 12.7
+1073.2 13.6
+1074.3 14.1
+1075.3 8.6
+1076.2 2.1
+1077.5 1.9
+1080.8 1.0
+1083.1 1.0
+1084.8 2.2
+1086.3 6.9
+1087.3 2.5
+1087.9 0.6
+1089.0 0.7
+1089.9 2.7
+1094.6 1.8
+1096.7 0.7
+1099.1 1.0
+1099.8 0.9
+1100.5 2.1
+1101.2 2.4
+1102.0 1.0
+1106.7 1.3
+1109.6 3.5
+1116.3 1.4
+1117.3 1.1
+1120.1 3.9
+1121.1 1.2
+1125.0 1.3
+1126.3 1.1
+1127.5 2.8
+1128.4 1.1
+1130.2 1.6
+1132.5 0.7
+1134.6 1.5
+1137.4 6.5
+1138.3 3.1
+1139.1 2.8
+1141.3 2.0
+1142.2 1.1
+1155.2 34.1
+1156.3 19.2
+1157.4 9.3
+1158.2 4.6
+1173.6 3.3
+1174.3 1.1
+1187.2 1.4
+1189.4 1.1
+1203.3 1.7
+1214.1 2.0
+1215.1 2.6
+1231.3 1.5
+1257.9 1.1
+1259.7 1.1
+S	50	50	651.29
+Z	2	1301.57
+183.0 36.3
+185.3 16.5
+193.2 26.1
+198.4 69.9
+200.1 11.1
+207.0 12.6
+215.1 42.6
+222.0 34.2
+229.0 250.1
+230.4 17.6
+231.3 46.1
+239.3 79.8
+240.2 25.6
+242.7 30.5
+245.1 55.2
+246.1 60.7
+251.1 19.5
+255.4 10.5
+256.0 22.6
+258.2 184.5
+259.3 15.6
+260.0 38.2
+261.7 12.4
+274.2 48.9
+275.2 371.9
+279.3 21.4
+282.1 61.4
+283.2 9.7
+286.0 45.7
+290.2 38.0
+292.1 30.6
+293.2 88.5
+294.4 35.8
+297.2 23.7
+299.2 63.9
+300.3 24.5
+303.3 6.2
+304.1 16.1
+305.2 19.7
+311.7 50.6
+315.1 17.4
+316.2 54.4
+317.1 27.8
+324.4 21.6
+326.2 26.2
+328.1 170.4
+329.0 16.0
+330.2 156.2
+330.8 25.0
+342.0 10.0
+344.3 146.4
+345.1 44.1
+346.2 1318.4
+347.2 291.7
+348.2 18.4
+349.2 58.6
+356.7 20.4
+357.3 55.2
+358.3 141.1
+359.0 15.1
+361.5 29.1
+369.3 66.8
+371.5 13.1
+373.4 24.9
+380.9 41.9
+382.9 15.2
+385.3 10.1
+389.8 39.2
+394.3 29.5
+395.2 27.2
+395.9 22.6
+401.2 11.9
+403.5 41.5
+408.3 33.2
+408.9 8.9
+410.1 81.7
+411.0 86.2
+412.0 44.4
+413.2 33.5
+414.1 22.1
+420.2 117.0
+421.4 10.2
+425.1 59.5
+425.9 29.1
+428.6 32.5
+429.3 65.8
+430.0 206.2
+437.2 50.5
+438.9 124.9
+442.5 128.1
+443.2 464.2
+444.2 110.6
+445.3 1019.6
+446.2 137.9
+447.1 80.0
+449.3 94.4
+453.3 147.0
+454.4 24.0
+456.3 79.6
+457.0 110.8
+458.3 9.6
+459.2 97.7
+460.1 19.6
+463.1 35.3
+467.8 67.4
+469.9 37.9
+471.2 99.1
+473.1 115.5
+474.1 8.4
+482.8 28.0
+485.2 52.6
+488.3 26.2
+492.0 75.5
+493.2 32.1
+496.3 82.5
+497.1 9.5
+500.3 76.0
+501.1 99.3
+503.4 13.4
+504.7 45.3
+508.5 28.6
+509.4 10.4
+510.3 90.4
+511.5 35.9
+512.5 12.5
+514.3 39.7
+517.0 70.5
+518.1 13.8
+519.9 48.5
+521.1 117.5
+521.8 129.2
+524.4 174.3
+525.5 82.6
+526.2 57.1
+527.2 72.1
+528.4 25.7
+531.4 74.9
+533.2 54.3
+535.6 46.4
+537.5 832.2
+538.4 44.8
+539.1 58.6
+539.8 9.8
+541.9 125.7
+542.6 104.9
+543.8 261.4
+544.5 80.7
+545.2 85.0
+546.4 58.4
+547.3 102.8
+550.1 135.1
+551.0 49.8
+552.3 85.4
+554.0 311.3
+554.7 114.0
+555.3 112.4
+556.7 121.0
+557.4 7.7
+558.9 24.7
+560.3 980.0
+561.5 420.4
+562.5 132.5
+565.4 61.0
+568.0 257.1
+569.1 136.2
+570.5 71.2
+572.0 1193.1
+573.2 489.0
+574.3 115.8
+576.5 103.3
+577.3 38.9
+578.1 31.0
+579.3 40.6
+581.8 53.3
+586.0 173.3
+587.2 64.2
+589.0 15.4
+590.2 7.3
+591.8 63.1
+592.8 29.5
+593.9 23.7
+594.8 306.1
+595.4 186.5
+596.7 310.8
+598.2 77.1
+599.2 68.9
+600.3 105.4
+600.9 48.7
+601.5 21.1
+603.7 51.2
+607.1 26.7
+608.1 174.0
+609.2 46.7
+610.0 97.0
+610.7 19.8
+612.4 163.0
+615.2 531.7
+616.1 122.2
+617.3 5905.4
+618.3 1672.3
+619.1 483.9
+620.1 137.0
+621.2 86.1
+622.4 21.7
+623.8 126.7
+625.1 82.8
+626.4 17.7
+628.4 229.2
+629.3 232.9
+630.4 142.0
+632.6 275.9
+633.7 173.0
+634.3 148.2
+635.4 45.7
+636.1 80.9
+637.5 102.3
+638.3 122.9
+639.6 152.9
+640.4 177.0
+641.4 206.0
+642.3 695.0
+643.1 864.1
+644.1 55.9
+651.9 47.3
+653.2 28.5
+655.0 40.7
+657.1 140.7
+658.4 11.7
+660.3 29.1
+667.2 333.3
+668.4 104.8
+669.1 93.1
+670.4 71.4
+677.6 46.0
+678.6 47.4
+681.4 66.7
+682.2 20.7
+685.2 1983.4
+686.2 757.7
+687.4 12.1
+689.5 46.1
+690.1 39.3
+691.4 84.9
+693.5 55.8
+695.3 104.1
+695.9 18.4
+696.7 18.4
+706.2 38.6
+707.4 10.3
+708.5 17.2
+710.2 44.5
+711.3 126.7
+712.4 48.8
+713.4 33.1
+714.4 227.0
+715.4 76.6
+717.3 12.2
+718.8 31.5
+720.3 12.2
+721.0 16.5
+724.3 175.8
+726.3 107.5
+728.3 196.0
+730.3 1799.1
+731.4 703.7
+732.5 193.2
+736.3 91.3
+739.4 8.3
+740.3 42.2
+741.6 114.5
+742.2 255.0
+743.3 199.3
+744.3 75.4
+746.5 110.2
+748.7 50.1
+749.5 40.3
+750.5 48.1
+751.9 111.9
+753.6 31.3
+758.9 29.9
+762.3 233.9
+763.0 13.3
+764.7 27.6
+766.1 14.5
+767.8 51.4
+768.5 35.5
+770.2 18.0
+772.6 101.1
+774.4 30.3
+780.6 86.2
+783.0 21.8
+784.0 235.6
+785.6 242.4
+791.5 17.3
+797.7 27.6
+799.2 56.4
+801.4 38.9
+805.3 83.4
+807.0 20.9
+810.5 96.6
+811.3 75.6
+812.3 71.1
+812.9 57.3
+813.8 74.7
+816.3 25.1
+819.1 42.2
+820.2 25.7
+821.5 60.5
+822.4 35.8
+823.6 42.8
+825.4 73.6
+826.9 77.7
+828.3 53.8
+829.3 10.3
+831.6 37.2
+832.5 123.9
+834.5 12.1
+836.2 120.6
+837.7 88.2
+838.7 218.9
+840.0 177.7
+840.6 48.0
+841.3 65.1
+842.8 48.0
+844.2 31.3
+847.6 33.2
+851.8 46.4
+853.8 40.3
+857.2 605.9
+858.2 347.2
+859.4 1179.0
+860.5 289.8
+861.3 270.0
+862.3 36.6
+863.4 123.7
+864.4 34.6
+866.7 49.6
+876.1 190.9
+883.3 32.2
+884.3 107.2
+890.4 19.8
+892.4 307.1
+893.9 59.9
+894.5 142.5
+895.4 49.2
+898.9 37.5
+900.2 29.0
+904.5 127.2
+905.6 34.7
+911.4 44.4
+912.3 114.7
+913.1 19.2
+914.0 27.2
+914.7 48.1
+915.4 30.4
+916.4 34.0
+917.4 43.0
+920.1 30.1
+921.1 21.6
+925.5 53.5
+928.5 64.4
+932.5 14.2
+934.3 157.8
+938.3 318.6
+939.3 66.4
+940.5 85.6
+941.4 22.6
+942.3 41.1
+943.5 67.1
+948.3 29.0
+950.3 16.9
+951.3 31.1
+956.3 1522.2
+957.3 512.0
+958.3 111.0
+962.2 14.3
+967.3 35.4
+974.4 1741.5
+975.4 769.1
+976.4 140.5
+991.4 28.3
+994.5 20.3
+995.4 9.4
+999.1 90.6
+1000.3 12.2
+1002.9 16.2
+1009.4 157.5
+1010.3 59.8
+1011.7 156.8
+1013.3 48.9
+1014.5 39.3
+1018.1 28.6
+1022.7 29.2
+1027.4 819.5
+1028.4 340.2
+1029.4 26.1
+1036.3 73.6
+1039.5 64.5
+1040.3 67.0
+1042.5 15.0
+1044.2 21.6
+1045.3 105.7
+1051.3 8.0
+1054.4 79.3
+1055.2 29.4
+1056.4 151.5
+1057.4 19.0
+1061.5 53.2
+1064.2 25.4
+1073.5 1318.4
+1074.4 891.0
+1075.0 99.3
+1075.7 78.8
+1082.4 34.4
+1083.6 28.6
+1084.4 90.6
+1086.3 27.3
+1087.3 10.2
+1096.2 10.3
+1099.2 17.3
+1102.7 15.7
+1108.6 78.4
+1110.4 72.9
+1126.2 60.9
+1126.9 19.2
+1137.2 90.3
+1137.9 48.1
+1138.5 149.9
+1139.4 97.5
+1152.7 76.6
+1153.5 7.0
+1155.4 1076.3
+1156.3 610.8
+1157.4 263.5
+1172.0 25.6
+1172.9 124.7
+1175.7 20.2
+1180.4 24.4
+1188.4 235.1
+1189.7 52.1
+1190.6 11.3
+1198.7 57.4
+S	51	51	498.70
+Z	2	996.39
+144.0 2.3
+147.0 1.6
+152.3 1.0
+153.0 2.4
+158.3 1.2
+172.1 5.6
+175.1 3.5
+187.0 0.7
+190.2 3.1
+195.9 0.6
+216.2 3.4
+218.2 2.8
+220.3 0.6
+222.2 1.6
+223.2 1.2
+226.1 0.5
+231.1 1.4
+234.2 20.1
+234.9 0.3
+236.3 1.0
+241.0 5.2
+242.1 4.9
+246.2 1.2
+252.2 1.3
+255.2 1.2
+257.4 1.9
+259.8 2.0
+263.3 0.7
+264.3 2.6
+265.1 1.3
+268.4 0.4
+271.9 0.5
+273.2 2.9
+274.1 12.6
+275.3 0.2
+276.2 0.7
+280.1 1.7
+281.0 2.9
+284.3 2.1
+287.0 2.3
+288.3 0.7
+289.2 1.7
+290.9 0.9
+295.3 1.1
+296.8 1.5
+299.6 2.8
+301.3 10.8
+302.1 8.8
+305.2 17.1
+306.3 4.8
+308.4 1.0
+313.2 2.1
+319.2 109.0
+320.3 16.4
+321.3 2.6
+324.1 2.9
+327.2 4.1
+330.5 10.5
+331.5 2.0
+334.2 1.5
+336.1 1.6
+339.8 16.2
+340.9 1.5
+342.9 1.1
+346.0 0.4
+348.5 5.9
+351.6 5.9
+353.3 10.2
+363.2 1.2
+366.3 3.7
+371.4 2.4
+374.1 0.8
+376.2 1.4
+377.4 3.6
+379.3 0.3
+380.4 4.0
+382.2 5.8
+386.2 1.0
+391.5 1.2
+392.2 17.0
+393.4 1.1
+396.1 2.3
+399.5 2.2
+401.4 2.5
+402.2 1.7
+403.1 1.5
+404.4 3.9
+406.3 1.0
+409.0 2.4
+411.4 1.2
+413.3 17.2
+414.3 23.2
+414.9 2.1
+417.5 1.4
+418.3 1.6
+419.3 2.7
+420.3 5.1
+421.3 4.0
+422.1 2.0
+423.5 4.4
+428.9 1.9
+430.3 5.3
+431.4 1.1
+432.2 7.0
+433.2 14.2
+433.9 4.4
+435.1 12.1
+435.9 5.1
+438.0 4.5
+439.6 1.0
+440.4 5.0
+441.1 4.9
+441.8 14.5
+442.8 3.1
+444.4 1.3
+445.0 2.7
+446.1 2.2
+447.2 22.1
+447.8 1.0
+448.5 3.5
+449.4 57.5
+450.5 10.2
+451.3 2.0
+452.2 5.2
+453.4 7.3
+454.5 4.0
+455.6 1.1
+457.9 6.2
+460.4 3.5
+461.1 6.1
+461.9 0.6
+462.9 6.2
+463.6 3.0
+464.3 2.2
+466.6 7.0
+467.6 3.5
+469.4 1.3
+472.2 19.3
+473.1 35.0
+474.3 2.3
+476.4 7.8
+477.5 13.4
+478.3 5.8
+479.8 25.0
+481.2 157.8
+481.9 130.0
+483.0 8.9
+485.7 7.4
+487.3 2.6
+488.5 18.0
+490.0 400.1
+491.1 49.5
+492.2 3.8
+495.3 0.5
+498.8 1.8
+499.6 1.1
+514.2 17.0
+514.9 0.6
+519.7 1.1
+522.4 0.3
+525.5 5.5
+530.0 10.6
+531.2 20.9
+532.4 5.1
+533.6 1.1
+537.2 2.8
+548.2 7.2
+550.2 98.4
+551.3 14.0
+552.3 4.2
+553.8 8.0
+559.0 4.1
+563.4 0.4
+569.3 0.6
+570.4 6.3
+571.3 4.1
+576.9 1.9
+580.9 3.5
+583.4 6.4
+584.4 4.5
+587.4 1.2
+588.4 4.2
+589.1 2.9
+591.5 4.7
+593.7 0.4
+598.1 1.4
+604.3 3.2
+615.6 12.6
+620.5 1.7
+623.1 2.6
+624.2 4.1
+632.4 1.9
+636.9 1.0
+640.5 1.4
+643.6 2.4
+644.6 1.3
+646.3 5.8
+648.8 1.3
+657.4 7.5
+658.1 1.2
+659.6 1.1
+660.6 18.3
+661.6 15.5
+662.6 9.1
+663.5 1.6
+666.0 2.6
+667.2 7.9
+668.0 1.2
+669.7 5.6
+673.1 8.4
+674.2 12.3
+675.3 7.6
+678.4 157.1
+679.5 45.0
+680.4 5.8
+685.3 1.3
+686.1 1.1
+689.0 0.6
+692.1 3.9
+693.0 5.5
+695.4 0.5
+699.6 2.5
+710.7 0.4
+721.4 2.5
+722.0 2.4
+726.0 1.5
+727.2 1.3
+728.2 5.7
+729.0 1.2
+732.9 12.5
+734.5 2.2
+736.4 3.9
+745.5 2.4
+746.4 4.3
+747.3 6.8
+750.2 0.8
+753.5 1.3
+755.5 2.6
+763.5 1.4
+764.3 3.0
+768.5 0.3
+772.9 5.2
+777.8 2.7
+778.6 1.5
+785.1 0.6
+790.4 2.8
+792.4 2.9
+793.2 2.8
+796.6 2.4
+804.5 1.8
+805.7 1.2
+808.6 5.8
+810.0 1.3
+815.5 2.6
+820.2 2.7
+821.4 1.1
+823.6 7.3
+824.5 1.7
+825.5 44.2
+826.5 23.0
+827.4 2.7
+829.5 1.4
+832.2 6.4
+833.5 5.5
+834.6 1.3
+842.9 4.3
+846.2 4.2
+850.5 3.4
+851.4 1.4
+859.0 1.1
+860.8 5.5
+861.5 11.9
+862.3 2.2
+882.6 7.3
+883.5 3.6
+885.2 30.1
+886.1 14.2
+891.6 0.9
+892.5 11.4
+893.3 3.0
+894.7 1.4
+S	52	52	501.13
+I	ID	190
+I	RTime	9.4010
+Z	2	1001.25
+Z	3	1501.37
+157.3 4.5
+169.4 1.3
+172.0 5.1
+173.1 4.0
+175.1 5.3
+185.2 1.2
+189.2 1.3
+200.2 5.4
+201.9 1.6
+212.2 5.1
+222.2 1.2
+224.2 1.6
+225.1 3.5
+227.0 3.0
+238.2 1.2
+239.1 2.7
+244.2 4.1
+252.9 2.0
+254.5 2.5
+255.3 6.0
+256.0 1.6
+257.2 6.8
+258.4 1.6
+262.3 3.2
+266.2 14.8
+267.1 3.2
+268.4 1.6
+271.2 1.3
+272.1 5.1
+274.4 4.8
+282.2 15.6
+283.3 10.8
+285.0 3.0
+286.4 1.8
+287.2 5.4
+289.1 3.4
+300.2 18.2
+303.3 1.3
+309.0 5.6
+310.2 3.5
+313.5 3.9
+317.3 4.1
+326.8 1.2
+336.2 1.2
+338.8 5.6
+341.1 1.8
+349.1 8.3
+354.2 7.9
+355.3 3.5
+356.2 1.5
+365.4 1.2
+366.3 2.7
+369.5 2.2
+371.3 6.3
+372.2 20.2
+373.1 6.1
+374.2 3.4
+374.9 3.5
+378.3 1.3
+381.4 1.2
+382.7 4.1
+385.1 1.7
+386.3 16.8
+387.7 2.0
+388.3 4.6
+393.2 5.1
+399.2 3.7
+402.2 4.6
+403.1 2.2
+410.1 2.0
+420.8 7.6
+421.5 5.0
+423.3 1.7
+428.9 8.1
+432.3 2.5
+433.3 3.0
+435.7 4.9
+438.0 10.1
+441.3 2.4
+442.2 1.8
+443.8 3.2
+447.3 5.1
+449.2 14.3
+450.2 12.8
+453.4 6.0
+456.0 1.2
+457.5 2.7
+460.2 2.0
+465.0 3.4
+466.7 5.0
+467.4 16.6
+469.1 2.9
+470.1 7.0
+471.3 2.5
+472.6 1.7
+482.6 5.8
+483.5 59.0
+484.2 115.3
+485.9 6.0
+491.3 18.7
+492.1 62.2
+492.7 51.5
+493.4 9.8
+517.7 1.0
+525.5 1.7
+543.3 4.3
+547.8 4.0
+553.4 8.3
+584.3 1.7
+613.1 1.7
+614.3 6.5
+615.4 3.9
+627.2 1.3
+629.5 18.7
+630.3 5.1
+631.2 3.0
+644.5 4.8
+651.9 3.7
+658.7 1.7
+660.2 3.5
+686.5 2.4
+699.5 2.7
+713.2 3.5
+715.4 1.6
+723.2 1.2
+727.2 5.6
+728.5 2.7
+731.2 1.3
+757.2 1.3
+763.4 5.0
+771.0 2.0
+781.4 1.1
+784.4 2.4
+829.5 2.0
+838.3 1.6
+846.2 2.9
+855.6 2.5
+856.5 9.1
+865.0 8.1
+898.4 2.7
+S	53	53	745.75
+Z	2	1490.49
+216.2 4.3
+217.1 5.7
+226.3 4.9
+234.2 95.6
+235.2 12.4
+236.1 7.3
+242.3 6.8
+243.1 11.0
+245.2 30.8
+246.1 30.4
+249.2 15.0
+252.2 26.1
+256.2 18.2
+259.1 10.3
+260.1 106.4
+261.1 47.0
+262.2 230.5
+262.9 12.9
+267.1 21.6
+269.1 35.8
+275.2 31.1
+282.1 17.8
+284.1 10.0
+286.3 6.9
+288.3 193.8
+292.3 11.5
+301.2 6.0
+304.1 5.0
+310.5 19.6
+312.3 11.1
+313.9 17.7
+316.2 98.3
+317.2 498.0
+318.1 43.8
+319.8 33.6
+325.5 21.5
+330.3 19.8
+334.2 3.8
+340.3 9.7
+341.0 17.6
+344.1 12.7
+345.3 30.6
+346.3 16.2
+347.2 34.8
+352.4 35.9
+357.5 119.3
+358.2 57.5
+360.3 7.4
+361.5 19.8
+364.3 46.0
+365.2 12.9
+367.3 19.4
+368.2 5.1
+371.6 33.7
+372.3 20.4
+373.5 33.8
+375.2 635.4
+375.8 26.0
+376.5 108.7
+385.3 40.5
+386.5 23.8
+387.9 3.7
+389.5 16.9
+390.4 2.9
+396.1 20.9
+397.9 38.1
+399.7 32.8
+403.3 67.9
+404.3 13.1
+408.5 11.5
+410.5 25.3
+413.0 19.5
+414.1 58.8
+415.3 13.8
+416.4 727.5
+417.6 169.5
+418.3 4.6
+419.6 7.7
+420.8 23.5
+421.5 17.6
+424.4 13.7
+426.2 46.1
+429.3 27.9
+430.3 16.5
+432.1 7.7
+444.4 47.6
+445.8 7.9
+459.5 24.3
+466.2 7.1
+467.6 9.2
+468.7 5.4
+472.2 34.0
+473.0 31.7
+474.4 43.5
+475.4 28.3
+476.4 43.8
+479.3 24.5
+481.6 20.8
+482.3 9.8
+483.4 32.2
+485.0 27.9
+487.2 66.4
+488.3 50.7
+490.2 41.6
+491.5 5.8
+492.5 13.9
+495.5 7.9
+496.2 12.7
+497.0 10.5
+501.5 13.6
+504.3 544.0
+505.4 176.1
+508.6 14.8
+511.6 74.1
+512.9 51.0
+514.0 16.7
+515.5 19.8
+519.4 2.7
+520.3 20.0
+522.5 12.4
+523.4 241.2
+524.5 76.0
+525.5 47.1
+526.4 69.9
+527.6 81.0
+528.9 55.3
+534.6 171.9
+537.4 37.7
+538.2 19.3
+540.6 12.5
+541.5 79.7
+542.2 34.7
+544.5 941.4
+545.4 339.7
+546.4 26.2
+548.4 7.4
+550.6 5.9
+553.6 17.3
+555.3 27.2
+556.2 8.5
+557.2 133.7
+559.3 14.3
+560.4 6.4
+568.3 38.8
+570.2 61.7
+571.6 45.0
+572.4 36.6
+574.1 42.8
+578.1 159.6
+580.2 37.0
+582.4 44.6
+583.5 50.4
+587.5 111.7
+588.4 56.1
+589.4 83.2
+591.1 22.9
+593.4 17.9
+598.7 11.7
+599.4 14.7
+600.9 89.7
+603.7 8.8
+605.2 188.5
+605.9 163.4
+606.6 75.1
+607.4 63.1
+611.8 29.2
+613.5 26.5
+615.3 149.0
+616.3 18.2
+617.4 16.5
+619.8 32.8
+624.1 25.7
+626.0 377.1
+627.2 107.8
+628.0 81.0
+632.5 17.4
+634.5 6.8
+636.7 36.8
+637.6 18.0
+638.5 82.3
+639.5 34.0
+640.4 51.4
+641.4 21.7
+642.2 32.4
+643.4 17.4
+644.4 9.4
+645.6 35.0
+647.0 15.0
+648.0 43.9
+649.5 47.2
+650.5 12.6
+652.7 44.6
+654.8 66.0
+655.7 25.5
+657.5 1190.9
+658.5 213.6
+659.6 64.4
+660.5 15.7
+661.7 19.2
+663.9 65.3
+664.9 165.6
+665.6 11.1
+666.5 45.5
+667.3 16.8
+669.3 104.7
+670.4 69.7
+671.7 16.2
+674.6 57.5
+676.2 83.0
+679.9 130.2
+681.1 15.4
+681.8 7.7
+683.1 92.8
+684.5 93.2
+685.7 43.0
+686.3 693.7
+687.2 492.7
+688.1 73.8
+688.7 29.7
+690.0 22.5
+691.9 10.2
+693.6 112.5
+694.5 106.1
+696.4 40.0
+698.6 26.5
+700.4 80.5
+701.4 7.5
+702.6 28.6
+704.3 1093.2
+705.4 366.1
+707.4 58.3
+708.3 9.4
+709.6 140.6
+711.0 70.7
+712.8 106.7
+714.0 75.8
+715.2 15.3
+716.0 36.5
+716.8 62.4
+717.8 109.5
+718.5 97.9
+719.2 69.8
+720.0 84.5
+721.4 40.6
+722.1 35.4
+723.6 462.4
+725.0 294.5
+726.3 157.2
+727.6 411.1
+728.7 285.0
+729.7 26.8
+730.7 55.9
+732.9 124.6
+734.6 201.0
+736.3 698.5
+737.1 195.0
+738.4 122.5
+752.8 11.8
+754.2 9.8
+755.8 95.8
+756.4 42.0
+757.2 29.1
+760.5 67.5
+761.4 31.5
+763.3 41.8
+765.7 63.3
+768.8 83.8
+769.6 56.6
+770.3 25.0
+771.3 27.6
+772.3 57.1
+773.1 6.2
+774.1 39.7
+776.8 16.7
+778.5 15.5
+779.7 23.3
+780.5 55.2
+783.1 27.3
+784.3 6.4
+786.5 1860.7
+787.6 670.8
+788.7 123.9
+789.5 60.8
+790.4 63.7
+791.6 5.8
+793.6 13.3
+794.8 33.2
+795.7 88.4
+797.4 29.4
+798.5 120.8
+799.4 87.4
+800.2 34.4
+801.3 7.1
+805.5 26.8
+806.3 15.2
+807.9 17.7
+809.0 52.1
+812.5 58.9
+813.7 35.5
+814.5 30.5
+815.6 196.4
+816.6 343.1
+818.1 274.6
+819.0 101.5
+819.7 89.8
+821.0 53.0
+822.3 44.0
+823.8 36.4
+824.5 4.3
+825.5 8.1
+826.6 38.4
+827.9 70.5
+829.7 106.0
+831.4 69.8
+832.8 84.3
+833.5 767.8
+834.4 179.3
+835.4 75.3
+838.6 9.8
+839.6 24.4
+840.6 90.9
+841.2 35.9
+843.3 67.0
+844.4 44.2
+845.9 59.9
+847.6 30.5
+849.4 92.7
+850.4 66.3
+851.5 75.2
+852.3 105.4
+852.9 80.4
+854.3 95.5
+855.6 82.0
+860.4 37.9
+862.5 16.1
+863.2 7.5
+864.7 45.2
+866.0 120.2
+868.2 24.0
+869.2 25.4
+870.0 68.8
+871.1 229.3
+872.0 186.7
+872.9 119.0
+873.9 70.2
+877.0 171.2
+878.2 84.2
+879.3 31.3
+882.6 67.5
+883.5 90.2
+885.5 728.1
+886.6 178.2
+887.3 18.7
+888.6 9.9
+889.2 40.5
+890.5 31.4
+891.6 22.0
+895.1 650.5
+895.8 347.2
+896.9 112.8
+898.1 178.4
+899.6 59.4
+900.8 124.5
+901.8 92.3
+902.6 26.1
+904.0 43.6
+905.0 109.4
+906.3 28.3
+907.6 5.7
+908.9 37.8
+911.3 348.9
+912.6 16.2
+913.5 85.7
+914.5 83.5
+916.4 80.2
+918.3 33.3
+920.4 58.0
+922.1 62.3
+925.3 19.7
+926.3 73.3
+927.2 18.1
+928.4 353.9
+929.4 433.5
+930.3 27.0
+933.1 28.8
+936.0 30.5
+937.9 63.8
+939.0 108.6
+939.6 26.1
+940.6 8.1
+941.7 11.4
+943.7 303.8
+946.4 563.7
+947.5 303.7
+949.3 67.7
+952.0 161.5
+953.4 197.8
+954.2 27.7
+954.8 51.4
+955.7 38.4
+956.5 10.7
+957.5 50.8
+959.3 76.8
+960.0 100.8
+961.7 8.8
+963.6 53.0
+964.4 71.4
+965.7 75.3
+966.6 61.8
+968.5 46.4
+969.6 32.2
+970.2 144.7
+971.9 4.4
+973.0 38.1
+975.5 563.3
+976.2 109.3
+977.6 18.3
+979.3 33.6
+980.6 35.9
+982.5 65.5
+984.4 72.6
+986.6 1133.9
+987.6 329.7
+988.4 15.3
+989.1 27.0
+990.1 30.3
+991.1 16.1
+995.5 54.3
+996.6 10.0
+997.5 92.7
+998.6 25.5
+1000.1 279.9
+1000.7 66.4
+1002.5 79.8
+1004.6 4.8
+1006.5 53.4
+1007.5 9.9
+1008.2 37.6
+1009.9 153.5
+1010.8 82.7
+1011.5 48.7
+1012.6 47.0
+1013.6 32.0
+1014.8 7.4
+1016.9 48.3
+1018.1 56.8
+1019.9 24.1
+1021.7 29.2
+1024.1 43.5
+1026.0 37.4
+1030.6 8.6
+1032.5 81.3
+1033.4 22.0
+1034.2 10.6
+1034.9 28.8
+1035.9 41.0
+1037.3 37.9
+1040.0 65.2
+1040.8 33.7
+1045.5 47.3
+1046.6 71.0
+1047.2 82.7
+1047.9 38.3
+1048.6 33.0
+1050.7 3.6
+1052.8 12.1
+1056.6 130.3
+1057.7 66.8
+1059.5 64.8
+1060.3 54.1
+1067.6 251.1
+1068.9 162.1
+1069.8 207.8
+1070.6 91.8
+1073.8 32.5
+1074.5 745.7
+1075.6 253.3
+1076.5 99.6
+1078.7 14.2
+1080.4 15.2
+1082.6 41.6
+1083.9 3.0
+1084.8 25.1
+1085.4 91.4
+1086.8 28.3
+1094.5 14.8
+1095.4 16.4
+1096.6 32.8
+1097.6 168.1
+1098.7 76.9
+1099.8 27.0
+1110.2 36.7
+1110.9 15.5
+1111.9 3.3
+1113.2 10.4
+1114.0 47.1
+1114.8 62.3
+1115.6 757.9
+1116.6 432.6
+1117.7 105.1
+1123.4 3.1
+1124.6 20.5
+1125.8 15.4
+1129.9 43.2
+1135.4 18.2
+1137.2 18.2
+1138.6 35.4
+1139.5 18.9
+1146.5 19.5
+1147.6 35.9
+1149.5 67.1
+1150.4 41.9
+1151.6 37.1
+1152.4 28.2
+1154.7 77.4
+1155.5 342.0
+1156.6 360.0
+1157.7 116.4
+1160.9 43.6
+1169.8 24.8
+1173.5 1090.5
+1174.6 571.7
+1175.6 70.4
+1177.6 29.6
+1180.6 6.8
+1181.5 60.4
+1187.6 34.2
+1193.4 6.7
+1196.2 44.7
+1209.6 12.5
+1210.6 17.1
+1211.2 4.8
+1211.8 6.9
+1212.7 104.7
+1213.8 43.3
+1214.6 20.6
+1225.6 3.2
+1228.1 130.1
+1228.8 695.9
+1229.6 445.8
+1230.5 838.6
+1231.4 466.4
+1232.6 151.9
+1240.0 16.4
+1245.1 72.4
+1253.8 68.5
+1255.1 27.5
+1256.0 11.1
+1266.3 24.0
+1282.4 15.1
+1291.8 18.2
+1293.5 33.2
+1294.2 19.5
+1296.3 22.9
+1298.4 14.1
+1308.7 35.1
+1315.5 80.0
+1316.8 9.3
+1325.3 165.6
+1326.6 138.1
+1327.6 41.9
+1332.6 13.0
+1341.8 39.8
+1343.6 947.8
+1344.6 637.8
+1345.5 29.4
+1352.5 46.7
+1355.2 25.3
+1369.1 7.0
+1371.5 30.1
+1375.5 13.4
+1380.8 12.1
+1385.3 7.4
+1397.0 12.6
+1402.7 37.9
+1434.7 8.0
+1476.7 6.3
+1485.5 18.7
+1492.8 22.4
+1493.5 10.7
+1504.9 16.4
+S	54	54	410.20
+I	ID	74
+I	RTime	3.4228
+Z	3	1228.58
+129.2 2.0
+137.1 1.3
+141.1 0.8
+155.3 1.7
+157.0 1.2
+158.2 1.2
+159.1 6.4
+166.1 0.8
+174.9 3.5
+185.1 1.2
+187.0 2.7
+189.1 2.5
+201.3 1.7
+217.2 3.5
+217.9 2.2
+230.1 1.5
+232.4 1.2
+235.2 3.9
+236.1 2.0
+239.3 1.6
+246.3 9.5
+248.0 1.7
+251.0 5.8
+259.3 1.0
+260.0 2.5
+271.9 1.7
+280.2 8.8
+282.1 10.3
+293.1 4.3
+300.9 2.7
+303.3 23.7
+306.7 2.2
+307.8 7.6
+310.6 3.9
+313.0 1.8
+315.0 3.7
+316.2 1.2
+317.0 1.3
+321.7 3.0
+323.3 5.4
+327.0 0.8
+329.3 3.5
+330.3 1.6
+331.4 13.6
+337.7 4.4
+339.4 4.1
+341.3 1.5
+343.3 5.8
+346.0 6.5
+347.3 12.1
+348.1 12.1
+350.2 15.5
+352.0 1.1
+353.8 1.5
+356.0 7.0
+357.1 26.7
+359.3 3.7
+360.6 3.0
+362.6 9.6
+365.1 3.0
+366.3 6.4
+368.5 6.3
+370.0 17.8
+370.8 1.2
+371.4 3.0
+372.7 14.0
+374.1 27.2
+375.4 11.6
+376.9 8.5
+378.8 13.5
+381.4 17.2
+382.2 4.0
+383.2 108.1
+384.4 4.0
+386.0 11.1
+386.8 4.8
+387.6 2.7
+388.4 1.2
+389.9 6.1
+391.5 16.7
+392.8 31.1
+394.1 12.1
+396.3 10.0
+397.9 20.1
+398.7 18.0
+401.0 153.3
+401.9 39.2
+403.8 14.6
+411.2 1.6
+424.5 1.7
+426.3 1.8
+428.3 4.5
+430.3 1.8
+431.6 4.3
+438.8 6.8
+440.2 3.0
+443.4 3.2
+444.4 9.1
+448.1 1.3
+449.6 3.2
+451.9 2.7
+456.4 3.7
+464.5 11.0
+469.3 8.8
+473.8 11.8
+476.3 3.9
+479.6 1.0
+480.8 2.9
+484.4 4.5
+485.8 8.8
+487.4 3.2
+488.2 2.2
+489.8 3.2
+493.0 6.9
+493.6 3.7
+500.1 6.3
+502.4 4.5
+503.3 2.0
+503.9 9.8
+507.1 9.6
+508.2 6.3
+510.4 8.8
+512.1 6.6
+513.8 7.5
+517.5 1.8
+520.7 8.0
+521.5 2.0
+522.5 17.0
+534.3 8.3
+535.1 9.5
+536.0 11.8
+537.4 6.1
+545.5 2.0
+548.3 2.5
+551.9 5.5
+556.4 4.6
+561.5 9.0
+563.2 4.5
+573.2 5.4
+576.4 2.5
+586.5 1.2
+590.3 7.1
+603.5 10.5
+605.2 2.0
+609.4 2.2
+613.2 2.2
+614.4 1.1
+618.7 2.0
+619.4 6.0
+622.4 3.7
+630.4 3.2
+632.5 6.6
+635.3 2.7
+655.8 2.5
+656.8 1.7
+658.4 2.0
+661.1 3.2
+664.5 9.3
+676.7 1.7
+690.4 18.1
+691.4 12.6
+692.6 2.5
+711.4 1.1
+718.5 0.8
+722.4 4.3
+885.5 2.7
+S	55	55	475.81
+I	ID	97
+I	RTime	4.6095
+Z	2	950.61
+144.0 3.7
+147.2 5.6
+152.1 1.5
+155.4 1.1
+158.3 3.4
+161.2 1.5
+169.3 0.8
+171.1 5.4
+174.2 3.5
+175.0 51.5
+176.2 1.2
+178.0 7.3
+182.1 2.7
+184.2 1.5
+185.3 1.5
+187.1 4.5
+195.0 3.7
+196.0 1.7
+197.5 5.8
+198.1 3.2
+201.1 5.4
+205.2 2.5
+208.9 5.3
+211.1 1.7
+212.3 5.8
+213.1 1.2
+214.0 2.0
+216.2 20.6
+217.2 2.4
+218.5 9.6
+219.2 8.6
+221.1 6.5
+221.9 3.4
+222.9 2.7
+225.0 1.3
+226.1 53.2
+227.9 12.6
+230.3 3.0
+231.7 6.0
+233.0 1.1
+234.2 3.9
+239.1 1.2
+240.1 11.6
+241.3 7.9
+244.3 48.4
+245.4 5.1
+247.5 7.6
+248.3 11.6
+251.2 2.5
+256.0 0.8
+257.2 17.5
+258.4 10.8
+259.3 3.4
+261.3 9.1
+268.2 1.2
+269.2 4.8
+271.2 2.0
+272.3 13.5
+273.2 8.6
+274.1 4.0
+275.2 10.5
+276.2 25.6
+277.3 6.4
+279.3 13.6
+280.2 10.3
+283.2 3.5
+284.4 1.7
+285.3 1.2
+286.1 1.2
+287.5 4.0
+288.2 2.7
+289.3 19.2
+290.3 5.6
+293.1 2.0
+294.4 1.7
+295.4 2.2
+297.2 9.5
+298.2 8.1
+300.1 1.5
+300.7 1.5
+302.3 3.0
+303.3 10.8
+304.1 6.0
+306.8 2.5
+309.2 2.7
+311.2 19.7
+312.4 13.0
+313.4 2.2
+314.2 0.8
+318.2 2.0
+319.1 7.0
+325.1 6.0
+326.5 1.6
+327.2 2.9
+329.2 18.2
+330.2 34.0
+331.3 2.5
+337.2 75.5
+338.5 21.1
+339.4 7.9
+340.2 2.0
+342.2 2.0
+343.1 2.4
+344.2 3.4
+346.7 18.7
+347.4 64.3
+348.2 17.2
+351.5 1.2
+354.1 24.6
+354.9 22.3
+355.6 1.5
+357.9 3.7
+359.3 1.3
+360.2 94.0
+361.2 71.6
+363.3 26.7
+364.0 1.3
+369.2 4.1
+370.3 5.0
+370.9 1.1
+372.3 4.0
+373.5 5.4
+380.6 1.0
+381.3 4.5
+384.3 1.2
+387.3 13.8
+389.1 9.8
+390.8 4.3
+395.7 15.3
+396.4 1.7
+397.4 2.9
+399.3 7.4
+401.5 2.5
+403.1 65.0
+404.3 5.9
+405.4 6.5
+407.4 2.0
+408.3 8.1
+409.7 1.2
+411.9 313.2
+412.8 5.6
+413.7 1.2
+414.3 2.0
+416.4 12.0
+417.5 2.5
+418.8 7.4
+422.4 4.8
+423.4 20.2
+424.2 6.0
+427.2 17.7
+429.4 9.1
+430.3 5.6
+431.2 8.3
+432.0 40.2
+433.5 2.7
+434.6 3.2
+435.9 2.5
+437.4 20.2
+438.0 5.9
+439.2 5.8
+440.4 18.7
+441.2 43.5
+442.4 8.3
+443.4 5.8
+444.2 1.1
+445.3 6.5
+446.3 47.7
+447.0 2.2
+451.3 3.2
+452.3 5.1
+454.2 2.7
+457.4 280.7
+458.4 299.7
+459.1 296.7
+460.0 18.2
+460.9 4.0
+463.0 9.1
+465.4 3.0
+466.9 864.2
+468.0 8.1
+483.1 2.0
+511.2 7.5
+516.5 1.3
+519.4 2.7
+520.3 3.4
+527.7 2.7
+528.4 1.5
+534.3 5.5
+535.1 0.8
+545.3 1.2
+546.5 2.0
+552.9 1.2
+565.3 4.0
+575.5 12.8
+583.0 5.0
+583.8 3.4
+594.5 2.2
+604.5 2.7
+608.7 7.4
+612.1 2.2
+620.5 6.0
+633.6 3.7
+634.4 3.9
+639.5 4.8
+648.5 7.3
+653.2 1.6
+662.0 2.0
+663.4 10.6
+664.5 1.8
+667.6 1.3
+675.8 6.9
+676.4 5.8
+677.7 1.8
+679.5 25.2
+680.3 8.0
+701.5 2.4
+705.7 2.5
+707.5 137.6
+708.5 42.0
+711.9 2.5
+725.6 2.2
+733.4 23.1
+734.4 73.8
+735.5 27.7
+747.7 3.7
+750.5 1.7
+774.9 3.2
+775.6 8.5
+776.9 2.4
+777.8 4.3
+795.2 10.6
+796.5 4.0
+803.3 1.2
+804.7 8.3
+815.7 3.7
+822.7 8.1
+823.4 3.7
+833.6 16.8
+834.7 2.0
+838.4 6.9
+851.5 29.8
+852.4 27.1
+853.8 2.0
+879.4 2.7
+891.5 5.4
+928.4 2.2
+S	56	56	902.96
+I	ID	54
+I	RTime	2.4197
+Z	2	1804.91
+318.3 3.9
+323.2 1.8
+349.4 7.5
+380.2 2.4
+394.1 7.5
+399.6 1.2
+400.6 2.5
+418.2 2.0
+434.1 2.5
+444.9 1.2
+452.4 3.5
+454.8 1.8
+457.1 7.9
+458.5 3.0
+465.3 8.8
+472.1 3.2
+475.2 29.8
+476.4 1.5
+479.4 2.0
+489.2 74.3
+490.4 7.4
+493.1 11.3
+507.0 1.8
+559.2 3.4
+562.7 1.7
+564.3 2.9
+568.7 2.2
+571.4 0.6
+588.6 5.8
+590.3 1.8
+602.4 6.0
+604.3 6.6
+610.5 4.4
+639.4 1.7
+647.4 1.1
+648.4 9.6
+649.8 9.1
+656.8 44.7
+687.5 6.6
+689.5 38.2
+690.6 2.5
+697.4 6.5
+703.4 43.9
+704.4 9.6
+705.0 0.8
+706.9 4.4
+713.5 59.7
+715.4 2.0
+737.5 2.7
+739.1 1.7
+744.0 1.8
+760.3 1.2
+777.5 19.2
+778.6 4.0
+788.4 2.4
+798.7 1.6
+802.6 18.1
+816.5 27.7
+817.6 17.6
+818.3 8.6
+831.7 2.7
+838.8 2.5
+845.4 2.5
+855.3 1.6
+861.6 9.8
+872.2 1.8
+873.4 12.6
+877.5 7.1
+885.3 17.0
+890.5 1.3
+891.4 3.0
+954.4 2.2
+961.4 7.0
+964.9 1.3
+971.2 7.9
+972.7 1.7
+985.3 3.2
+986.8 2.0
+989.3 22.3
+990.3 4.6
+997.5 6.3
+1003.4 4.0
+1029.8 4.0
+1043.7 5.4
+1066.6 3.5
+1074.7 6.3
+1084.4 4.0
+1085.5 10.8
+1086.5 9.3
+1087.3 2.9
+1098.2 6.0
+1099.6 6.3
+1100.7 5.5
+1102.4 26.2
+1103.6 1.3
+1116.3 17.7
+1170.7 1.2
+1182.3 2.0
+1185.5 2.9
+1186.9 2.5
+1201.8 3.5
+1203.6 7.5
+1204.6 1.7
+1215.9 3.9
+1217.6 4.4
+1233.8 2.5
+1250.7 2.7
+1263.2 1.3
+1272.7 3.2
+1280.7 15.3
+1281.5 1.3
+1288.5 1.3
+1294.5 4.8
+1295.4 13.0
+1296.0 3.7
+1298.5 63.4
+1299.6 64.9
+1312.7 159.3
+1313.6 58.0
+1316.7 18.2
+1317.5 14.5
+1330.7 16.2
+1331.8 2.2
+1388.1 5.5
+1389.0 1.2
+1401.6 2.7
+1408.8 2.2
+1411.8 9.5
+1412.8 3.7
+1426.7 3.5
+1462.7 3.0
+1471.0 1.2
+1555.8 2.4
+S	57	57	564.68
+Z	2	1128.35
+165.1 11.6
+166.1 14.6
+167.1 8.7
+168.1 1.4
+173.0 14.5
+175.1 17.4
+178.0 7.9
+182.0 111.5
+183.2 3.4
+184.1 1.1
+185.1 10.1
+186.0 8.2
+187.2 21.1
+188.9 6.2
+191.1 13.9
+192.1 1.5
+196.1 10.0
+197.2 4.6
+198.3 1.6
+200.3 2.6
+202.0 4.5
+211.2 4.6
+212.3 13.5
+213.1 11.9
+214.3 2.7
+215.0 9.7
+218.9 17.5
+220.2 3.9
+221.3 4.8
+222.2 1.7
+226.3 5.2
+227.3 12.4
+228.3 2.8
+229.2 2.7
+230.3 2.1
+231.4 8.9
+232.1 11.4
+241.2 3.2
+242.2 10.1
+243.1 10.5
+244.3 32.9
+245.3 6.4
+247.3 2.0
+249.3 6.1
+251.2 9.7
+252.1 8.1
+254.3 1.9
+256.0 2.7
+258.1 27.2
+260.4 8.9
+261.0 13.0
+261.9 5.3
+263.3 11.4
+264.3 1.7
+265.4 3.9
+267.4 1.7
+268.1 15.1
+269.2 13.9
+270.2 18.6
+271.2 33.8
+272.2 4.2
+274.2 18.5
+276.2 6.5
+277.3 11.8
+278.2 3.0
+278.9 3.3
+281.9 11.9
+286.1 14.2
+287.1 45.3
+288.1 72.0
+288.8 3.5
+289.4 11.0
+290.9 10.8
+293.4 3.0
+295.1 121.1
+296.3 13.6
+297.3 4.7
+299.3 16.5
+300.3 0.7
+301.1 4.8
+302.5 1.3
+303.1 0.6
+305.7 8.5
+306.7 5.5
+307.4 3.2
+309.4 4.0
+310.8 1.6
+315.1 2.5
+315.7 5.6
+317.2 26.4
+318.2 23.7
+319.0 1.8
+321.3 2.6
+322.2 2.7
+325.3 9.2
+326.2 5.6
+327.2 34.9
+328.4 2.8
+329.2 1.0
+329.8 1.6
+333.4 1.3
+335.3 13.1
+336.4 3.2
+337.4 11.3
+338.2 3.0
+339.1 8.9
+340.2 3.9
+341.0 7.0
+342.4 1.5
+343.4 17.4
+344.2 3.4
+345.2 161.4
+346.2 1.4
+347.6 14.8
+348.3 3.1
+349.3 2.8
+351.1 21.1
+354.3 2.6
+357.4 10.4
+358.4 2.2
+359.1 7.2
+360.4 2.5
+361.3 6.8
+363.2 253.6
+364.2 46.2
+367.3 2.9
+368.0 10.3
+369.4 5.2
+371.2 16.9
+372.3 2.3
+373.3 1.6
+374.4 5.8
+375.4 15.7
+376.4 7.0
+378.2 5.3
+379.6 13.6
+381.0 6.0
+383.7 104.2
+384.5 56.0
+385.7 8.5
+386.7 15.9
+387.5 30.1
+388.2 4.5
+389.1 10.0
+390.0 6.4
+391.5 10.1
+392.2 8.0
+393.8 7.0
+394.6 23.2
+396.2 1.0
+398.1 9.1
+399.1 32.2
+399.9 13.0
+401.4 6.2
+403.9 14.0
+406.2 5.3
+408.0 39.3
+409.0 25.6
+411.1 8.2
+412.5 98.9
+413.6 4.2
+414.6 5.9
+416.3 6.6
+417.6 32.5
+418.7 14.9
+419.4 2.4
+421.4 7.8
+422.5 7.8
+424.3 11.1
+427.1 4.2
+428.8 27.0
+429.6 4.2
+430.5 8.7
+431.4 4.9
+433.4 31.0
+434.2 25.8
+435.8 25.6
+436.5 35.9
+437.1 7.0
+438.5 18.1
+440.7 35.5
+442.1 28.6
+442.8 53.4
+443.5 3.1
+444.5 1.5
+445.6 17.8
+446.8 22.3
+449.3 11.4
+451.3 469.7
+452.4 73.8
+453.5 14.4
+454.2 9.6
+455.6 12.4
+456.5 193.0
+457.6 20.5
+458.3 28.5
+459.2 5.3
+460.3 93.8
+461.0 16.5
+462.1 6.6
+463.8 35.2
+465.2 80.0
+465.9 41.1
+466.7 17.2
+469.3 10.9
+470.1 2.3
+471.3 5.1
+472.1 57.7
+473.4 59.7
+474.5 557.2
+475.6 10.5
+476.3 2.5
+478.0 1707.3
+478.8 22.3
+479.5 20.7
+480.2 34.0
+481.4 20.5
+482.3 8.4
+483.8 39.2
+484.9 18.2
+485.8 13.7
+486.4 17.1
+487.2 26.6
+488.4 31.7
+489.1 21.2
+490.3 31.4
+490.9 5.8
+491.6 36.7
+492.7 38.1
+495.2 77.1
+496.3 62.2
+497.1 22.5
+498.3 23.7
+499.5 11.7
+500.1 4.5
+501.2 44.3
+502.8 69.5
+504.4 50.3
+505.7 9.3
+506.4 47.2
+507.3 11.5
+508.0 7.7
+508.8 32.3
+509.4 2.3
+510.5 18.0
+511.6 63.9
+512.2 32.7
+513.4 110.8
+514.4 31.7
+515.3 3.2
+516.3 51.8
+517.0 22.8
+518.1 49.1
+518.9 53.1
+520.1 56.4
+521.2 38.8
+522.0 68.1
+523.0 46.8
+524.4 31.3
+525.2 59.3
+526.2 54.2
+527.0 55.0
+528.7 116.7
+529.6 127.9
+530.5 32.5
+531.3 146.4
+532.3 73.6
+533.1 17.6
+533.8 31.8
+535.0 15.0
+535.9 55.0
+537.0 13.7
+538.1 129.0
+538.8 54.1
+539.7 76.5
+541.1 88.0
+541.9 52.7
+542.8 124.5
+543.6 41.7
+544.5 93.3
+545.8 53.8
+546.7 192.2
+547.6 180.1
+548.8 174.4
+549.6 156.7
+550.3 78.0
+551.5 82.8
+552.4 258.4
+553.3 232.5
+554.6 155.7
+555.7 580.6
+556.4 340.5
+557.4 167.4
+558.4 35.2
+559.3 1.4
+563.9 3.0
+565.0 6.5
+566.1 6.7
+567.3 4.2
+568.3 2.3
+570.1 9.2
+571.2 4.8
+574.5 26.4
+577.4 2.4
+579.7 17.9
+582.5 5.0
+583.8 8.3
+584.6 13.7
+585.7 9.9
+586.5 5.0
+589.7 19.0
+590.8 14.3
+592.2 31.3
+593.4 40.8
+594.2 8.8
+596.0 51.1
+597.4 10.3
+598.4 294.4
+599.5 118.9
+601.1 13.6
+602.3 12.8
+603.6 7.3
+604.3 3.3
+605.4 3.6
+607.3 34.4
+608.6 32.2
+609.4 6.3
+610.1 13.0
+611.2 12.8
+612.2 4.9
+613.0 11.4
+613.6 21.4
+614.5 32.8
+615.4 20.9
+616.1 2.7
+617.5 15.3
+618.2 15.6
+619.5 16.3
+622.2 12.1
+623.7 6.1
+624.4 3.1
+625.1 36.2
+626.4 7.5
+627.5 31.2
+628.5 23.6
+629.4 22.0
+630.5 6.4
+631.3 5.4
+633.4 20.0
+634.6 16.8
+635.3 22.3
+636.2 7.4
+637.2 20.1
+638.2 10.4
+640.1 7.4
+641.6 8.2
+642.4 44.5
+643.3 14.6
+644.4 20.9
+646.0 36.2
+647.5 3.8
+648.2 5.4
+649.3 20.2
+650.4 69.3
+651.7 15.0
+653.2 19.8
+654.4 24.1
+655.4 6.6
+656.2 8.8
+657.0 19.5
+658.0 29.1
+660.3 157.5
+661.5 35.1
+662.9 35.9
+663.5 11.1
+664.6 10.9
+665.3 13.1
+666.6 16.6
+667.8 27.0
+669.5 55.8
+670.6 34.5
+671.6 15.2
+672.8 16.9
+673.4 33.3
+674.1 16.8
+674.7 19.8
+675.3 9.1
+678.2 192.8
+679.3 38.5
+680.5 18.7
+681.3 4.9
+682.3 7.4
+685.2 14.8
+686.2 18.8
+687.1 27.0
+688.1 16.8
+689.5 9.7
+690.9 9.5
+691.6 20.6
+693.5 2.2
+694.4 36.0
+695.2 3.7
+696.5 16.3
+697.4 12.4
+698.2 30.5
+699.0 12.0
+699.7 11.9
+701.3 51.8
+702.6 23.4
+703.7 6.6
+705.9 28.0
+706.7 0.6
+707.5 9.0
+708.7 39.5
+709.5 12.1
+710.5 58.0
+711.4 15.0
+712.9 19.8
+714.0 11.0
+715.5 8.1
+717.8 6.6
+718.8 6.4
+720.4 31.5
+721.7 28.7
+722.8 159.4
+723.9 106.4
+725.4 59.0
+726.2 46.9
+727.5 31.4
+728.6 8.3
+729.6 33.5
+730.8 62.5
+731.9 21.4
+732.6 39.0
+733.8 11.7
+734.4 30.0
+735.1 15.8
+735.9 56.8
+736.9 53.9
+737.6 29.1
+738.6 62.7
+739.4 37.4
+740.2 25.0
+741.8 32.1
+742.8 23.7
+743.6 5.5
+744.7 31.5
+745.4 40.5
+746.0 5.1
+746.9 3.9
+749.4 49.6
+750.2 24.8
+751.3 34.6
+752.6 77.6
+753.9 21.8
+754.8 12.3
+755.7 20.3
+756.3 3.2
+757.2 16.6
+758.2 9.7
+759.6 38.3
+760.5 12.3
+761.5 17.0
+762.7 42.9
+764.4 49.4
+765.4 30.8
+766.5 1171.2
+767.6 516.0
+768.5 2.8
+770.1 14.5
+771.6 57.2
+772.8 38.9
+773.6 39.1
+774.6 7.1
+775.3 4.0
+777.6 51.1
+778.5 23.9
+779.2 56.1
+780.2 63.4
+781.2 38.2
+782.7 8.3
+784.3 11.4
+785.5 4.7
+786.4 48.2
+787.5 93.2
+788.6 41.6
+789.4 53.4
+792.3 9.9
+793.7 10.1
+794.7 26.7
+795.9 16.3
+796.5 6.8
+797.7 34.9
+798.8 4.3
+800.2 52.5
+801.0 24.9
+801.7 10.6
+802.7 28.3
+803.4 1.8
+804.8 1.6
+806.4 6.2
+807.5 11.6
+809.3 18.8
+810.6 19.1
+813.5 11.4
+814.8 4.5
+815.7 10.4
+816.5 2.4
+817.7 5.8
+819.2 13.8
+821.6 16.7
+823.4 1027.2
+824.5 418.7
+825.4 9.8
+828.5 3.1
+834.4 348.3
+835.5 132.0
+836.5 8.4
+838.5 10.9
+841.6 2.8
+843.5 1.0
+847.4 1.4
+852.6 0.7
+853.5 2.9
+854.4 5.4
+855.5 4.3
+856.6 15.6
+857.6 7.6
+859.7 9.5
+863.5 3.5
+866.6 3.8
+870.7 19.9
+874.4 3.5
+875.6 2.2
+879.6 9.2
+880.5 19.6
+881.4 8.5
+882.5 7.1
+883.6 6.7
+885.8 2.9
+886.4 11.5
+888.2 4.3
+892.1 3.3
+895.2 13.0
+896.5 4.2
+898.4 14.3
+900.5 6.7
+901.6 4.9
+904.5 4.7
+906.5 6.4
+912.2 5.3
+913.5 5.4
+914.6 14.4
+920.9 19.3
+923.5 11.6
+924.5 18.4
+927.0 2.3
+928.5 4.8
+932.5 3.7
+934.6 7.0
+935.6 2.3
+936.6 1.5
+937.5 7.7
+941.9 2.9
+942.5 2.3
+943.6 6.1
+945.5 2.9
+947.5 558.1
+948.6 150.5
+949.2 1.9
+951.3 11.1
+954.4 97.8
+955.6 57.4
+960.7 5.7
+963.6 5.3
+964.5 6.4
+965.8 14.2
+966.5 0.6
+968.4 1.4
+971.6 8.6
+973.2 6.3
+980.7 11.6
+981.6 16.7
+982.5 13.3
+989.4 40.7
+990.5 11.3
+991.2 9.0
+993.6 3.3
+994.4 3.9
+998.6 4.6
+1001.1 2.0
+1008.9 3.1
+1009.6 7.0
+1010.7 3.1
+1013.6 1.3
+1021.5 2.1
+1022.3 2.3
+1024.7 2.6
+1033.7 14.8
+1035.3 3.2
+1036.5 1.8
+1038.6 1.9
+1040.2 3.9
+1040.9 2.1
+1048.5 7.2
+1054.6 1.5
+1062.6 3.8
+1064.8 8.6
+1074.6 5.0
+1128.2 4.5
+1135.5 2.5
+1137.9 4.0
+1139.8 4.0
+S	58	58	565.65
+Z	2	1130.29
+165.0 7.8
+166.1 14.1
+175.1 5.6
+176.2 3.1
+177.3 9.4
+182.0 72.7
+182.9 4.6
+186.2 3.1
+187.2 7.2
+188.1 2.6
+189.1 7.3
+190.0 3.0
+195.2 2.0
+196.3 2.3
+201.0 6.3
+202.8 5.1
+203.9 4.3
+208.3 2.5
+212.3 4.4
+212.9 2.6
+214.0 12.0
+220.9 6.8
+224.0 2.0
+226.2 7.0
+232.3 4.9
+240.1 2.6
+241.4 1.2
+243.1 3.4
+244.2 3.8
+245.3 2.1
+246.5 14.0
+247.2 12.2
+248.0 9.7
+251.2 9.7
+253.1 3.9
+254.1 13.6
+257.2 9.5
+258.3 4.6
+259.1 8.3
+260.1 1.5
+266.2 4.1
+269.0 23.6
+270.2 25.5
+274.9 2.5
+278.2 8.3
+279.0 4.1
+280.3 2.7
+281.9 41.2
+283.3 2.6
+284.9 15.6
+286.1 20.1
+287.2 28.2
+288.1 72.8
+289.3 4.8
+290.1 2.4
+293.2 3.6
+295.1 51.7
+296.1 17.6
+300.3 11.8
+301.1 2.5
+302.9 2.7
+304.2 10.2
+305.4 6.3
+306.2 2.3
+309.0 5.4
+310.2 3.3
+314.0 3.7
+315.0 1.2
+317.6 9.0
+318.3 4.9
+322.6 4.0
+325.1 9.2
+327.2 18.5
+328.1 3.3
+329.0 1.6
+331.4 1.2
+332.1 7.4
+333.2 1.5
+335.2 20.5
+336.2 1.8
+342.2 19.5
+342.8 12.4
+345.1 65.5
+346.1 8.2
+347.0 2.5
+351.5 1.3
+357.4 2.5
+359.4 8.2
+363.1 175.0
+364.2 22.9
+364.9 6.1
+367.4 2.9
+370.1 3.4
+371.0 18.2
+379.1 2.0
+380.4 18.0
+381.2 5.1
+382.3 1.2
+382.9 1.9
+383.9 69.1
+384.7 12.8
+388.3 1.8
+389.1 6.0
+390.3 7.8
+396.7 14.1
+399.1 6.9
+400.1 3.9
+403.3 1.1
+406.2 11.5
+408.0 3.8
+410.1 3.4
+411.1 23.5
+412.3 24.8
+413.3 24.7
+415.4 2.8
+417.5 14.8
+419.7 2.4
+422.1 2.1
+426.0 5.2
+427.3 7.8
+428.3 1.2
+430.4 8.5
+435.8 32.8
+436.8 49.6
+437.8 9.8
+438.4 4.6
+439.2 1.1
+440.4 13.0
+441.4 26.4
+445.6 2.3
+447.7 26.9
+451.3 227.9
+452.2 47.7
+453.2 9.4
+456.4 54.4
+457.6 17.9
+460.0 50.9
+460.6 25.3
+461.3 1.8
+463.7 797.9
+464.5 40.8
+465.2 20.5
+466.3 62.1
+467.0 6.2
+468.2 3.2
+469.0 7.6
+470.1 14.6
+471.4 8.5
+472.0 2.1
+474.3 220.3
+475.4 33.7
+477.9 782.1
+479.0 165.5
+481.4 0.9
+482.6 5.1
+483.7 12.8
+484.3 18.4
+486.3 85.2
+487.4 4.0
+490.6 352.6
+491.5 16.9
+492.4 22.8
+495.0 77.3
+495.9 63.2
+496.6 2.3
+498.0 2.1
+501.7 8.4
+502.4 7.3
+504.4 1.6
+506.0 22.0
+508.4 6.2
+509.3 7.2
+510.8 7.0
+512.1 6.6
+513.4 132.7
+514.3 22.6
+515.0 52.2
+516.2 34.7
+517.1 12.1
+518.0 40.8
+518.6 18.1
+520.0 74.5
+521.1 30.3
+522.2 5.9
+523.2 6.9
+524.5 6.7
+525.2 5.9
+526.1 5.9
+529.1 27.3
+530.0 91.8
+531.3 78.8
+532.5 14.9
+533.9 42.4
+534.9 9.2
+536.3 2.9
+537.2 5.5
+538.5 89.4
+539.2 27.5
+540.1 39.2
+541.1 21.6
+542.3 41.8
+543.4 19.7
+544.6 31.3
+545.3 3.4
+546.8 134.4
+547.9 50.5
+549.5 4.2
+550.1 44.9
+550.9 50.9
+552.5 37.9
+553.7 2.1
+554.4 6.2
+555.6 465.6
+556.4 327.9
+557.7 71.3
+558.4 122.6
+559.1 3.4
+564.8 11.1
+566.9 7.2
+568.2 4.9
+579.8 6.2
+582.3 14.4
+583.4 4.2
+585.6 8.3
+587.1 9.8
+591.1 8.8
+593.7 14.7
+597.2 29.7
+598.5 104.8
+599.4 39.7
+600.6 12.9
+601.2 1.2
+602.6 3.9
+607.9 8.2
+613.4 32.4
+615.1 3.5
+616.4 17.8
+617.2 2.6
+618.9 14.4
+621.2 117.2
+621.8 8.7
+622.5 19.4
+623.4 13.2
+624.7 9.5
+626.7 6.0
+629.1 4.9
+631.3 13.9
+632.4 9.9
+634.6 15.3
+635.7 10.7
+636.6 6.8
+637.3 34.9
+640.6 58.2
+641.8 10.4
+642.5 6.4
+643.3 24.8
+645.8 80.7
+646.7 34.8
+647.4 20.2
+648.3 4.3
+650.0 7.9
+651.5 8.1
+653.6 258.2
+654.8 26.4
+655.5 1.3
+656.6 22.0
+657.7 35.6
+658.7 24.2
+660.3 43.2
+661.2 29.2
+662.4 9.5
+664.3 9.5
+666.2 4.5
+669.5 39.5
+670.4 39.7
+672.7 69.6
+674.1 2.1
+675.1 4.1
+677.4 61.1
+678.2 121.2
+679.3 40.1
+680.2 25.8
+680.9 51.1
+681.7 13.6
+682.4 22.0
+683.5 21.4
+684.4 5.3
+685.5 10.2
+687.9 2.4
+689.1 12.0
+690.1 11.1
+690.7 13.8
+691.4 9.8
+692.2 13.1
+694.0 16.8
+695.0 171.5
+695.9 17.5
+697.5 27.3
+699.8 5.6
+701.4 1.4
+703.1 2.0
+704.4 46.7
+705.8 48.0
+707.4 26.3
+708.4 22.1
+709.0 8.1
+710.1 17.6
+711.4 43.1
+712.5 4.0
+713.3 11.8
+714.3 70.0
+715.2 20.3
+716.2 13.5
+717.0 49.8
+719.1 7.2
+722.3 9.8
+723.1 28.5
+724.0 28.3
+724.8 5.5
+726.2 14.0
+727.4 2.3
+731.5 2.1
+732.2 1.6
+733.6 4.1
+734.6 5.3
+737.2 17.8
+739.4 10.0
+741.6 58.2
+742.3 9.8
+744.7 2.1
+746.0 2.5
+746.9 4.7
+748.1 5.8
+749.6 11.7
+750.4 8.5
+752.2 2.4
+753.5 15.1
+755.8 4.4
+759.4 2.6
+762.6 10.0
+764.0 13.2
+766.4 480.4
+767.5 251.4
+768.4 47.7
+769.7 55.9
+770.6 47.9
+771.4 4.7
+773.3 8.9
+774.2 3.6
+775.1 17.7
+776.5 2.4
+777.4 9.2
+779.2 171.4
+780.8 13.9
+782.5 21.4
+784.7 18.3
+786.2 27.1
+787.7 5.7
+789.3 3.1
+790.3 1.8
+794.4 28.2
+795.8 23.8
+796.4 2.2
+800.2 13.7
+801.5 2.9
+804.2 3.7
+805.6 3.6
+811.0 5.6
+814.3 2.0
+823.4 397.8
+824.4 161.5
+825.4 42.9
+826.5 29.6
+829.0 10.4
+833.3 5.2
+834.4 145.6
+835.3 49.5
+836.3 29.7
+837.1 1.7
+837.8 1.7
+840.5 9.7
+841.6 3.7
+850.4 1.1
+851.7 2.3
+853.4 6.6
+860.8 4.0
+868.4 4.7
+870.8 3.9
+877.5 3.2
+879.4 10.1
+880.8 4.2
+882.5 3.3
+883.6 4.6
+885.9 3.2
+894.1 5.4
+901.5 3.1
+903.4 5.2
+909.6 14.9
+912.2 4.5
+926.8 10.2
+929.4 1.8
+932.2 1.8
+947.4 267.7
+948.5 98.0
+949.5 25.4
+950.3 7.5
+951.6 6.1
+954.5 36.3
+955.5 30.9
+956.4 9.6
+957.3 4.6
+958.6 9.2
+962.5 10.4
+965.1 15.1
+966.4 10.9
+977.5 4.8
+1002.3 7.2
+1014.7 5.7
+1017.5 13.3
+1041.6 4.2
+1044.4 12.2
+1058.0 3.1
+1125.6 1.8
+S	59	59	474.30
+I	ID	164
+I	RTime	8.0727
+Z	2	947.59
+Z	3	1420.88
+147.2 1.3
+154.2 2.2
+156.1 2.0
+157.1 1.6
+158.1 14.8
+163.9 1.2
+168.9 2.2
+170.0 1.0
+172.2 2.2
+172.9 4.1
+175.2 38.4
+176.1 2.5
+182.2 3.7
+183.9 1.2
+185.2 2.7
+187.0 1.5
+193.1 1.2
+195.4 7.5
+197.1 7.6
+198.1 1.6
+199.4 1.7
+202.1 15.6
+203.2 3.7
+205.0 1.7
+207.1 3.0
+210.1 4.0
+212.4 1.8
+213.3 13.8
+215.7 1.2
+220.2 2.0
+227.2 4.3
+228.1 2.4
+229.2 2.0
+229.8 2.4
+232.1 4.3
+237.0 2.0
+240.3 2.0
+241.3 3.4
+242.4 11.3
+245.1 53.5
+246.1 7.4
+248.4 2.0
+252.3 2.2
+254.5 2.7
+255.3 1.0
+259.0 34.2
+260.2 172.3
+262.1 25.0
+269.1 4.3
+271.2 8.3
+272.3 6.9
+273.4 4.6
+276.3 6.0
+280.4 3.0
+283.3 1.0
+291.2 6.5
+299.3 11.1
+300.4 10.6
+310.1 4.5
+313.3 2.0
+314.2 4.5
+317.6 7.0
+324.2 1.6
+325.3 1.2
+327.1 1.5
+328.1 7.3
+334.0 1.7
+340.2 4.8
+341.3 3.0
+344.2 9.6
+345.3 13.8
+346.4 6.5
+354.4 3.2
+356.9 5.8
+359.6 5.0
+360.8 3.0
+361.4 5.5
+366.8 3.5
+377.4 2.4
+381.2 0.8
+387.1 8.6
+394.1 2.0
+395.1 3.0
+397.2 2.2
+400.9 1.2
+412.3 4.0
+414.2 2.5
+416.4 1.0
+421.6 2.5
+422.3 1.7
+426.5 3.4
+428.5 10.8
+429.2 2.2
+430.3 5.5
+432.3 1.8
+435.3 4.5
+438.6 18.6
+439.4 12.3
+440.2 16.8
+442.5 4.5
+444.2 3.2
+445.4 1.3
+446.6 4.8
+448.2 6.1
+456.3 124.5
+457.4 98.1
+458.2 2.7
+464.8 20.7
+465.6 30.2
+466.9 3.0
+530.4 2.0
+533.3 1.7
+545.2 2.0
+553.5 17.7
+588.6 7.5
+590.0 1.2
+593.7 3.4
+611.1 42.7
+612.2 1.6
+616.2 2.5
+648.3 1.2
+658.4 6.3
+662.3 15.3
+669.4 2.0
+704.3 2.2
+706.3 2.5
+717.4 2.4
+720.0 2.7
+731.4 4.0
+733.1 18.7
+744.6 1.2
+746.5 2.0
+747.7 10.8
+763.0 1.2
+774.4 3.2
+811.5 1.3
+820.4 3.7
+821.8 2.5
+S	60	60	713.36
+I	ID	89
+I	RTime	4.1929
+Z	1	713.36
+209.2 2.5
+219.2 2.5
+240.1 3.5
+243.0 3.4
+245.1 0.8
+252.3 1.7
+261.3 1.7
+274.0 1.6
+275.3 4.5
+280.8 3.2
+292.2 2.2
+309.8 2.4
+346.3 2.7
+360.2 5.1
+369.3 2.4
+372.3 4.0
+377.4 1.0
+386.2 6.8
+391.3 3.2
+393.3 4.6
+395.3 1.7
+397.3 2.7
+404.3 4.1
+411.2 1.6
+417.3 0.6
+421.4 3.7
+426.1 1.0
+429.4 2.2
+433.9 2.0
+435.2 8.8
+438.3 3.5
+439.4 2.9
+453.1 7.9
+455.5 3.0
+456.2 5.9
+461.4 2.2
+464.5 2.0
+469.3 1.5
+485.5 0.8
+487.4 3.2
+505.3 38.7
+511.4 2.2
+522.3 1.1
+525.5 1.6
+526.2 1.2
+532.7 1.3
+535.2 5.5
+536.0 10.0
+538.7 1.5
+540.5 3.0
+544.8 1.2
+549.5 3.4
+550.4 2.7
+553.5 2.5
+558.3 13.1
+567.3 31.0
+568.0 5.3
+576.7 7.5
+583.4 1.3
+585.1 15.3
+595.9 3.7
+608.7 9.3
+615.3 2.0
+634.5 1.0
+637.6 1.2
+644.9 7.5
+651.3 7.0
+653.4 4.4
+655.3 8.1
+659.4 1.2
+660.5 5.6
+663.3 4.0
+664.7 6.9
+665.4 2.5
+667.3 5.0
+674.8 3.9
+677.5 22.0
+678.4 33.5
+681.5 7.8
+683.2 0.8
+684.3 1.1
+687.1 8.6
+695.3 156.6
+696.2 33.7
+704.1 20.7
+704.9 2.7
+712.5 0.8
+S	61	61	1004.43
+Z	2	2007.85
+283.1 0.9
+286.2 1.1
+287.2 0.5
+289.2 0.9
+292.3 0.4
+294.2 17.5
+295.4 2.4
+297.2 0.6
+301.3 3.1
+303.3 2.1
+304.9 1.0
+308.2 0.7
+311.0 2.6
+312.2 2.5
+315.4 1.9
+316.3 1.6
+318.1 0.9
+319.4 1.1
+320.2 0.6
+321.2 1.1
+324.2 0.5
+325.2 0.4
+326.2 2.3
+327.1 3.6
+328.5 1.1
+329.3 2.5
+330.1 1.3
+331.2 5.2
+331.9 0.3
+333.2 2.6
+335.5 1.0
+339.1 4.0
+341.2 0.8
+341.9 0.4
+343.2 1.0
+344.2 0.9
+345.3 2.6
+350.0 1.7
+353.1 2.4
+354.5 0.4
+356.2 2.2
+357.2 2.8
+359.3 1.0
+360.1 2.0
+362.2 0.5
+363.1 1.7
+365.1 0.4
+368.2 4.2
+369.3 11.7
+370.3 3.0
+371.2 0.5
+372.4 6.2
+373.1 3.2
+375.2 1.5
+376.4 0.6
+377.1 1.2
+379.8 2.7
+381.1 5.0
+382.4 1.3
+383.4 1.2
+384.1 2.2
+385.1 1.3
+386.3 15.6
+387.2 4.8
+388.4 3.5
+389.0 0.9
+392.3 1.7
+393.3 3.5
+394.2 3.0
+395.4 0.7
+396.3 2.6
+398.3 1.1
+399.3 0.6
+400.3 1.3
+402.2 1.3
+404.4 0.9
+405.3 2.6
+407.4 17.2
+408.4 4.3
+409.2 0.4
+411.3 12.6
+412.3 1.4
+413.6 3.6
+414.3 10.8
+415.2 1.6
+416.5 2.2
+418.3 0.8
+419.3 0.5
+420.3 1.3
+421.1 1.9
+423.5 1.1
+425.3 1.4
+426.2 1.4
+427.2 0.2
+428.2 8.0
+429.2 0.3
+430.3 2.4
+431.3 1.7
+432.2 2.8
+434.4 1.2
+437.2 4.5
+438.0 1.2
+439.2 12.4
+440.3 3.3
+441.2 2.5
+442.6 1.4
+443.5 2.6
+444.2 1.6
+445.3 1.4
+447.3 2.1
+449.3 2.2
+450.2 1.8
+451.2 2.5
+452.2 2.7
+453.2 0.6
+455.2 2.6
+456.0 1.9
+457.3 0.7
+458.1 1.0
+461.1 1.5
+464.3 0.2
+465.4 3.6
+466.2 4.9
+467.3 0.8
+469.2 0.7
+470.8 7.8
+471.7 0.5
+472.7 4.5
+473.5 2.7
+475.2 4.8
+476.1 0.5
+478.2 2.8
+479.3 0.8
+480.2 4.2
+482.3 11.2
+483.5 0.5
+485.6 1.5
+486.5 4.3
+487.5 2.9
+488.3 3.5
+489.5 4.8
+493.4 1.9
+494.7 0.2
+496.2 17.3
+497.3 3.8
+499.5 10.1
+500.4 0.6
+501.4 5.1
+502.1 2.4
+503.0 0.8
+507.2 1.1
+508.2 1.0
+510.2 1.1
+511.3 0.6
+513.1 6.3
+514.6 3.6
+515.4 7.1
+516.3 6.8
+517.4 5.7
+518.2 2.1
+519.1 0.5
+520.4 146.6
+521.4 54.3
+522.5 9.2
+523.5 0.3
+524.4 0.5
+525.3 5.6
+526.1 0.5
+527.3 1.6
+528.6 3.3
+529.4 3.9
+530.4 0.8
+531.4 1.0
+532.2 0.6
+532.9 1.9
+534.0 0.7
+535.1 1.4
+536.3 3.4
+537.3 3.4
+538.3 1.5
+539.0 3.0
+540.4 5.0
+541.4 2.3
+542.2 3.6
+543.4 5.9
+544.1 2.4
+545.3 8.2
+546.4 3.5
+547.6 5.6
+548.4 4.7
+549.3 0.5
+550.2 3.0
+550.8 0.5
+551.4 2.2
+552.4 2.4
+553.2 1.6
+554.2 1.8
+556.1 7.0
+557.5 8.8
+558.5 10.0
+559.2 4.5
+560.5 3.0
+561.6 1.7
+564.8 3.0
+565.4 4.8
+566.1 4.2
+567.2 1.4
+568.3 3.8
+569.4 2.1
+570.5 1.7
+572.4 1.1
+573.2 5.4
+574.2 8.6
+575.1 0.8
+576.1 4.0
+577.2 0.8
+578.4 0.9
+579.5 2.9
+581.8 3.9
+583.1 8.1
+583.7 0.5
+584.4 0.9
+585.1 2.0
+586.3 18.3
+587.3 7.3
+588.5 1.3
+589.4 2.0
+590.8 2.1
+591.4 0.6
+592.4 6.3
+593.5 0.8
+594.2 1.3
+595.3 16.6
+596.4 6.7
+597.5 4.2
+598.4 2.6
+599.3 5.5
+600.3 1.3
+601.0 1.1
+602.4 5.1
+603.3 1.1
+604.4 8.7
+605.3 2.0
+606.2 1.6
+607.0 1.9
+608.5 0.6
+609.2 1.1
+610.4 0.6
+611.3 6.0
+612.3 4.1
+613.3 3.6
+614.6 5.6
+615.5 3.1
+616.5 3.5
+617.3 13.9
+619.1 3.2
+620.7 2.1
+621.5 1.6
+623.3 3.4
+625.1 2.2
+627.2 22.9
+627.8 0.9
+628.5 9.5
+629.6 6.4
+630.4 12.7
+631.7 2.8
+632.5 2.4
+634.4 55.1
+635.5 16.4
+636.9 3.4
+637.8 1.5
+638.8 9.3
+639.8 3.5
+640.4 1.2
+641.4 2.7
+642.7 5.7
+643.5 0.5
+644.2 3.1
+645.1 7.3
+645.7 0.6
+646.5 1.3
+648.4 1.9
+649.4 2.4
+650.6 9.1
+651.4 1.3
+653.5 3.3
+654.3 0.7
+655.3 5.0
+656.3 2.3
+657.4 5.3
+658.5 5.8
+659.6 3.3
+660.4 2.4
+661.5 1.7
+662.7 10.8
+663.5 0.7
+664.3 0.5
+665.1 1.6
+666.3 1.8
+668.4 1.4
+669.5 2.4
+670.3 2.2
+672.0 5.2
+673.3 3.2
+675.4 7.2
+676.2 2.1
+677.3 1.0
+678.2 14.7
+679.3 7.5
+680.0 1.0
+681.2 3.1
+682.0 6.4
+683.2 3.8
+684.4 10.0
+685.3 3.2
+686.7 3.3
+687.4 5.5
+688.5 5.9
+689.4 0.9
+690.2 3.4
+691.5 4.8
+692.7 2.0
+693.6 2.9
+695.0 7.4
+695.9 1.9
+697.4 2.1
+698.2 1.5
+699.1 6.2
+700.3 7.0
+701.6 4.9
+702.4 1.9
+704.7 1.1
+705.4 3.8
+706.5 6.4
+707.8 3.0
+708.6 3.5
+709.5 2.8
+710.3 9.3
+711.4 6.4
+712.4 3.9
+714.2 27.9
+715.0 5.7
+716.0 10.6
+717.0 11.5
+718.2 4.9
+719.1 0.4
+720.2 1.5
+721.1 0.3
+722.1 5.5
+723.0 3.3
+724.0 6.1
+725.4 5.2
+726.0 4.4
+726.7 1.8
+727.7 5.2
+728.4 15.2
+729.3 13.4
+730.2 4.9
+731.3 7.2
+732.4 194.9
+733.4 69.0
+734.4 10.2
+735.3 15.8
+736.2 7.3
+737.8 5.6
+741.3 13.1
+742.4 20.3
+743.6 17.8
+744.4 27.5
+745.4 20.3
+746.3 12.3
+747.3 10.5
+748.4 6.6
+749.2 3.3
+750.6 2.9
+751.3 2.6
+752.2 2.9
+753.5 2.4
+754.5 6.6
+756.6 2.2
+757.4 20.7
+758.1 3.9
+759.0 3.3
+759.8 5.9
+760.5 20.1
+761.6 18.6
+762.7 9.9
+764.0 5.4
+765.9 5.8
+767.3 3.4
+768.1 2.0
+769.0 17.5
+769.8 2.6
+771.0 9.0
+771.8 10.6
+772.6 3.0
+773.7 6.0
+774.9 4.9
+775.6 5.6
+777.0 6.4
+777.8 1.9
+779.5 8.3
+780.4 1.9
+781.2 4.0
+782.2 5.3
+783.0 4.2
+783.7 0.4
+784.4 5.5
+785.9 6.3
+786.6 9.5
+787.7 17.3
+789.1 2.8
+789.9 0.2
+791.6 19.1
+792.5 8.0
+793.5 4.9
+794.5 4.9
+795.5 4.7
+797.1 103.6
+798.1 55.5
+799.1 9.2
+799.9 1.9
+800.8 43.1
+801.6 8.1
+802.5 11.4
+803.4 6.1
+804.8 4.4
+805.5 2.0
+807.4 4.1
+808.1 10.1
+809.1 6.3
+809.9 5.0
+810.7 5.7
+811.6 14.8
+812.5 11.2
+813.5 1.3
+814.9 4.8
+815.7 6.4
+816.5 0.4
+817.5 5.1
+818.5 7.1
+819.4 4.2
+820.6 8.8
+821.3 10.5
+822.1 3.9
+823.5 1.9
+824.5 12.9
+825.1 1.0
+826.2 1.4
+827.5 11.2
+828.5 10.4
+829.7 11.7
+830.9 9.4
+832.2 9.0
+833.8 5.6
+834.5 5.1
+836.0 9.2
+836.9 6.4
+837.7 6.1
+839.6 7.6
+840.4 10.4
+841.6 1.5
+842.7 9.3
+843.4 6.4
+844.6 2.7
+845.4 6.6
+846.4 1.8
+847.6 4.2
+848.3 30.6
+849.3 11.4
+850.2 2.2
+851.4 3.1
+852.3 5.1
+853.4 45.0
+854.2 42.8
+855.1 11.8
+856.1 12.9
+856.9 42.7
+857.5 57.7
+858.4 11.8
+859.7 6.9
+860.5 11.6
+861.3 31.6
+862.6 12.1
+863.5 15.8
+864.4 0.7
+865.1 18.4
+866.1 4.6
+867.6 6.7
+869.0 8.1
+869.9 7.5
+870.5 30.5
+871.6 37.6
+872.5 8.5
+873.4 46.9
+874.5 33.0
+875.5 12.1
+876.5 15.0
+878.1 6.6
+878.9 3.5
+880.1 9.7
+880.9 7.9
+882.2 129.2
+883.1 26.8
+883.7 14.9
+884.3 4.8
+885.2 5.3
+886.4 4.8
+888.4 172.9
+889.6 84.1
+890.6 27.1
+891.6 4.5
+893.0 10.9
+894.2 3.4
+895.6 11.2
+896.3 16.9
+897.4 9.4
+898.4 2.6
+899.4 9.7
+900.2 7.1
+901.7 8.8
+902.7 13.0
+903.5 3.6
+904.8 3.0
+906.0 4.5
+907.4 7.8
+908.3 6.3
+909.5 4.7
+911.0 2.5
+912.5 8.3
+913.6 6.2
+914.6 6.2
+915.4 5.7
+916.3 2.2
+917.1 10.2
+917.9 19.1
+918.6 12.7
+919.5 4.9
+920.3 6.3
+921.7 56.0
+922.5 16.2
+923.5 18.7
+924.8 3.1
+925.5 2.3
+926.4 2.1
+927.7 31.1
+928.7 6.1
+929.4 13.9
+930.7 76.8
+931.6 67.2
+932.2 58.4
+933.1 8.7
+933.8 0.5
+934.5 2.0
+935.6 3.9
+936.7 16.2
+937.5 28.3
+938.7 6.0
+939.8 40.9
+940.5 11.0
+941.5 3.6
+942.3 2.6
+943.0 3.6
+944.5 5.4
+945.8 2.0
+947.3 9.6
+949.3 19.9
+950.5 47.6
+951.4 22.4
+952.3 1.6
+954.3 5.8
+955.3 8.9
+956.4 2.9
+957.7 23.2
+958.5 40.6
+959.2 31.4
+960.1 12.1
+961.4 7.0
+962.1 8.1
+963.4 20.5
+964.3 4.8
+965.1 2.9
+966.8 10.2
+968.2 27.3
+969.1 4.1
+970.0 2.8
+971.1 18.7
+972.4 14.3
+973.5 21.4
+974.4 18.9
+975.6 2.5
+976.6 12.6
+977.5 6.1
+979.4 5.9
+980.7 0.5
+981.7 16.7
+982.6 11.7
+983.8 24.2
+984.5 13.5
+985.5 73.9
+986.5 83.3
+987.4 22.7
+988.4 22.6
+989.5 9.9
+990.5 2.4
+991.4 13.8
+992.4 2.4
+993.9 29.7
+994.7 114.2
+995.5 66.8
+996.3 22.7
+997.8 1.2
+998.8 0.7
+1005.4 2.0
+1006.5 1.3
+1009.4 2.5
+1010.6 1.4
+1011.8 2.0
+1014.5 1.1
+1015.7 2.2
+1016.5 2.1
+1017.6 1.7
+1018.5 4.5
+1020.3 7.7
+1021.6 1.2
+1022.4 2.5
+1024.4 0.9
+1025.2 1.2
+1026.6 5.2
+1027.6 6.2
+1028.4 5.8
+1029.4 1.7
+1031.5 24.3
+1032.5 12.1
+1033.4 3.7
+1034.4 3.9
+1035.6 3.9
+1036.5 0.7
+1037.5 0.4
+1039.9 3.5
+1041.1 6.0
+1041.9 5.8
+1042.6 5.6
+1044.4 3.0
+1045.9 3.3
+1046.6 0.4
+1048.7 0.4
+1049.9 1.8
+1050.7 0.7
+1052.4 1.8
+1053.5 4.0
+1054.5 2.7
+1056.7 2.7
+1058.5 5.4
+1059.4 0.2
+1060.3 5.4
+1064.0 2.8
+1064.6 2.0
+1065.7 0.7
+1066.4 1.7
+1067.6 1.4
+1068.7 6.8
+1069.5 3.1
+1071.1 2.8
+1071.9 1.4
+1072.9 5.9
+1073.6 17.5
+1074.7 16.5
+1075.5 0.3
+1076.3 0.9
+1077.6 6.4
+1078.4 1.9
+1082.5 4.6
+1083.6 10.3
+1084.7 3.8
+1085.4 2.4
+1086.6 7.5
+1087.7 2.5
+1089.4 4.5
+1090.5 5.0
+1091.4 3.2
+1092.2 6.3
+1093.7 0.8
+1094.4 0.4
+1095.5 1.6
+1096.3 0.2
+1098.6 4.2
+1099.8 13.1
+1100.6 60.6
+1101.5 30.2
+1102.5 18.9
+1103.6 11.5
+1110.5 1.9
+1111.5 6.9
+1112.6 2.4
+1114.5 5.3
+1115.8 3.4
+1116.7 3.9
+1118.3 27.3
+1119.5 13.7
+1120.6 3.2
+1121.8 6.7
+1122.6 1.1
+1124.2 1.1
+1126.0 5.2
+1127.5 2.6
+1130.8 7.1
+1131.6 5.1
+1132.7 13.6
+1133.4 2.3
+1134.6 0.9
+1136.1 1.1
+1137.3 9.4
+1138.4 2.0
+1139.5 7.2
+1140.8 0.9
+1141.9 0.9
+1142.7 1.8
+1143.4 5.4
+1144.1 1.4
+1145.7 1.1
+1146.6 2.5
+1148.4 1.7
+1149.3 3.0
+1151.8 7.2
+1152.5 6.4
+1153.7 2.0
+1155.8 3.4
+1156.5 6.1
+1157.2 0.8
+1160.6 3.6
+1162.1 0.4
+1163.7 1.8
+1166.4 2.9
+1169.6 62.2
+1170.6 24.6
+1171.4 2.0
+1172.5 3.5
+1174.8 0.4
+1176.7 0.8
+1178.5 6.3
+1180.6 5.3
+1181.8 1.0
+1183.6 3.3
+1184.4 2.7
+1186.5 10.5
+1187.5 10.8
+1188.6 6.2
+1189.3 3.9
+1190.9 7.0
+1192.3 8.3
+1192.9 1.0
+1193.7 0.4
+1195.6 3.7
+1196.7 3.1
+1197.7 1.5
+1199.7 5.6
+1200.6 6.8
+1201.2 6.0
+1203.7 1.9
+1204.7 1.4
+1206.6 6.2
+1210.1 2.2
+1211.0 2.7
+1211.7 5.4
+1212.5 1.3
+1214.5 3.8
+1215.9 11.1
+1216.7 29.2
+1218.0 1.2
+1218.6 2.6
+1221.0 1.3
+1222.4 1.8
+1223.6 3.1
+1224.3 3.6
+1225.5 9.3
+1226.5 2.5
+1227.5 1.8
+1229.5 3.6
+1230.6 3.8
+1231.3 7.3
+1232.6 9.1
+1233.6 9.2
+1234.6 9.3
+1235.4 3.6
+1236.0 2.4
+1237.7 1.4
+1238.8 0.9
+1239.7 0.2
+1240.5 33.4
+1241.7 16.3
+1242.4 5.1
+1243.4 13.4
+1244.6 14.8
+1245.6 5.1
+1246.3 13.1
+1247.7 3.7
+1248.6 5.0
+1249.7 5.4
+1250.8 0.5
+1253.7 2.3
+1255.3 2.2
+1256.7 8.7
+1257.7 16.0
+1258.9 8.2
+1259.9 9.3
+1260.6 52.3
+1261.6 45.9
+1262.5 18.7
+1263.6 6.8
+1264.7 9.4
+1265.6 5.3
+1266.4 2.3
+1268.4 5.4
+1271.5 0.7
+1272.7 3.7
+1274.5 335.6
+1275.5 204.2
+1276.5 88.8
+1277.5 37.1
+1278.3 9.3
+1279.3 3.0
+1281.1 0.5
+1282.1 1.5
+1282.9 1.8
+1283.7 1.8
+1284.7 2.3
+1286.7 6.3
+1287.7 6.5
+1288.6 8.4
+1289.5 0.7
+1291.7 1.9
+1292.5 2.0
+1295.6 2.6
+1297.0 0.9
+1299.7 5.2
+1300.7 2.6
+1301.5 5.7
+1302.3 3.1
+1303.2 0.4
+1304.9 7.2
+1305.7 8.6
+1306.8 5.1
+1309.7 1.1
+1310.9 2.8
+1311.7 2.9
+1313.3 6.1
+1314.4 1.8
+1315.4 4.7
+1316.5 2.6
+1317.7 2.8
+1318.6 3.7
+1319.6 5.4
+1320.7 2.7
+1322.1 3.1
+1326.6 7.9
+1327.6 0.5
+1329.9 1.1
+1330.6 1.1
+1331.7 3.6
+1332.9 1.6
+1334.2 4.1
+1335.7 3.7
+1337.5 0.3
+1338.3 1.1
+1339.7 1.5
+1340.9 2.4
+1342.8 6.1
+1343.6 9.2
+1344.5 19.5
+1345.5 2.7
+1346.8 1.4
+1348.4 0.8
+1350.4 1.4
+1352.9 2.0
+1354.7 1.5
+1355.7 6.5
+1356.7 1.5
+1357.6 6.4
+1358.7 1.6
+1360.4 4.6
+1361.6 92.3
+1362.7 48.4
+1363.7 15.2
+1364.6 9.3
+1365.3 2.4
+1366.1 5.6
+1367.1 5.3
+1368.6 2.3
+1369.7 3.1
+1370.6 6.1
+1371.4 26.7
+1372.3 24.8
+1373.4 8.3
+1374.0 1.0
+1375.3 1.0
+1375.9 1.5
+1376.9 3.2
+1377.8 6.0
+1378.5 1.8
+1379.5 1.1
+1382.8 1.0
+1384.7 3.7
+1385.5 2.4
+1387.5 4.8
+1388.6 6.1
+1389.9 6.2
+1390.7 5.8
+1391.4 6.8
+1392.5 0.2
+1396.8 2.9
+1398.1 6.7
+1399.7 1.6
+1400.9 0.8
+1401.8 4.4
+1403.3 9.9
+1404.3 11.2
+1405.5 3.6
+1412.9 0.3
+1413.6 1.4
+1414.8 9.0
+1415.7 11.5
+1416.7 6.2
+1418.7 0.7
+1419.6 4.9
+1420.5 1.8
+1421.7 6.4
+1422.7 4.6
+1423.7 1.6
+1425.2 3.0
+1426.7 1.0
+1427.6 1.4
+1428.5 0.4
+1430.4 1.9
+1431.4 10.9
+1432.7 48.2
+1433.7 30.9
+1434.8 23.1
+1435.8 4.4
+1436.9 1.7
+1439.8 1.8
+1440.6 1.7
+1441.8 4.6
+1442.9 5.2
+1443.5 1.3
+1444.7 5.1
+1445.7 3.6
+1446.7 27.5
+1448.0 7.7
+1448.9 4.5
+1449.6 1.6
+1450.7 1.3
+1451.6 0.9
+1454.8 2.0
+1455.7 1.7
+1459.2 6.5
+1460.0 1.6
+1461.1 0.4
+1462.1 3.3
+1464.5 5.9
+1465.7 14.7
+1467.4 2.8
+1468.8 5.3
+1469.8 15.1
+1471.0 10.1
+1471.9 5.3
+1472.8 2.9
+1474.0 1.5
+1474.9 1.2
+1476.3 1.5
+1480.0 1.1
+1483.6 0.4
+1484.9 3.0
+1486.6 319.8
+1487.6 221.7
+1488.6 110.9
+1489.6 38.9
+1490.6 19.2
+1491.6 2.2
+1492.6 2.5
+1494.5 3.6
+1495.4 0.8
+1496.5 1.9
+1498.7 1.5
+1499.7 1.3
+1500.6 0.6
+1501.8 0.4
+1502.9 1.3
+1503.9 1.0
+1509.3 3.7
+1511.7 3.3
+1513.6 2.1
+1514.9 3.7
+1516.7 1.5
+1518.2 5.6
+1518.9 0.8
+1523.7 0.2
+1524.7 0.4
+1526.8 0.4
+1527.7 2.0
+1529.9 2.0
+1531.6 0.6
+1532.5 1.1
+1534.9 5.2
+1536.3 0.4
+1537.5 0.2
+1538.5 1.6
+1539.7 0.5
+1546.0 1.2
+1547.4 2.2
+1549.4 0.8
+1550.8 1.4
+1555.9 2.5
+1556.7 0.7
+1557.6 2.2
+1558.7 3.5
+1560.4 7.6
+1561.8 1.2
+1564.4 3.1
+1566.1 2.9
+1567.0 1.7
+1567.9 1.0
+1568.9 1.7
+1569.8 1.6
+1571.7 2.1
+1574.6 8.8
+1575.6 18.1
+1576.7 16.7
+1577.7 5.2
+1578.5 0.9
+1581.9 0.6
+1582.8 5.1
+1583.9 1.6
+1584.8 0.2
+1586.2 1.1
+1587.5 0.8
+1588.7 3.0
+1590.7 5.6
+1592.7 104.5
+1593.8 68.2
+1594.6 32.4
+1595.3 0.6
+1596.0 9.9
+1597.2 0.7
+1599.4 29.8
+1600.6 58.1
+1601.8 22.9
+1602.9 9.5
+1603.9 3.0
+1604.9 2.2
+1605.7 4.7
+1606.7 5.5
+1610.8 1.4
+1615.5 2.7
+1616.9 2.1
+1617.8 3.1
+1618.6 2.0
+1619.4 3.0
+1621.4 0.7
+1624.3 0.6
+1635.9 4.4
+1637.0 0.7
+1637.8 1.1
+1641.8 0.8
+1643.5 0.6
+1644.8 1.3
+1647.0 1.1
+1647.8 1.6
+1655.7 3.6
+1656.4 0.2
+1657.4 1.5
+1658.6 5.1
+1659.7 2.0
+1660.5 3.1
+1662.1 2.2
+1666.1 0.7
+1671.7 3.6
+1673.7 0.7
+1674.6 2.2
+1675.6 3.7
+1676.6 1.6
+1679.6 1.0
+1684.7 6.1
+1685.7 9.8
+1687.0 1.7
+1687.9 3.5
+1688.9 3.3
+1692.2 0.7
+1694.9 2.3
+1695.8 9.2
+1696.6 4.9
+1698.7 1.3
+1700.5 0.6
+1702.7 2.9
+1703.5 1.8
+1704.7 1.0
+1706.0 2.2
+1706.8 5.0
+1707.8 2.1
+1711.3 0.9
+1712.8 116.4
+1713.7 101.6
+1714.8 57.6
+1715.8 23.4
+1716.9 2.0
+1719.8 2.6
+1727.5 1.4
+1731.8 0.8
+1734.2 1.2
+1745.0 3.5
+1746.1 3.2
+1748.4 2.0
+1752.2 1.1
+1753.9 1.6
+1755.5 0.3
+1762.9 5.8
+1764.1 1.6
+1765.0 3.9
+1765.6 1.6
+1767.1 0.5
+1770.9 0.8
+1772.8 2.9
+1786.6 0.4
+1787.7 2.4
+1791.8 0.8
+1792.8 1.6
+1801.3 0.6
+1802.0 6.0
+1803.6 1.0
+1805.3 0.8
+1814.7 0.3
+1815.5 1.4
+1816.3 1.3
+1824.5 1.1
+1828.3 2.3
+1830.3 3.6
+1831.0 5.9
+1831.7 2.4
+1832.6 1.2
+1834.0 2.5
+1841.2 1.4
+1842.8 1.4
+1844.1 6.9
+1845.9 0.4
+1858.8 2.0
+1859.9 23.1
+1860.9 22.9
+1861.8 7.5
+1862.5 5.4
+1863.2 5.5
+1878.1 9.2
+1878.9 0.8
+1880.2 7.4
+1881.0 2.1
+1882.2 0.4
+S	62	62	745.86
+Z	2	1490.71
+210.1 7.9
+210.9 23.7
+215.2 3.7
+216.0 16.5
+217.0 23.1
+218.1 4.7
+225.4 7.8
+226.4 7.8
+228.6 23.3
+231.2 5.1
+234.0 92.1
+234.8 6.7
+235.5 3.8
+239.4 5.4
+241.0 4.5
+242.3 11.0
+243.3 13.3
+245.2 30.2
+246.2 27.1
+247.3 3.7
+248.4 1.8
+249.4 2.1
+252.2 10.5
+254.2 11.5
+256.3 12.4
+260.2 144.4
+262.1 169.7
+263.1 29.9
+264.3 17.4
+268.2 5.6
+270.2 7.9
+271.3 19.4
+272.3 6.2
+273.4 5.5
+274.1 12.1
+282.8 9.8
+284.3 4.7
+286.2 7.8
+286.8 12.4
+288.2 9.1
+292.2 15.7
+293.2 9.6
+294.4 5.7
+298.7 28.7
+299.9 14.3
+301.9 14.0
+303.0 1.7
+304.3 7.3
+313.1 17.1
+316.2 137.5
+317.3 479.4
+318.3 67.4
+320.1 17.8
+325.1 1.9
+330.2 7.6
+331.2 5.8
+332.0 1.8
+333.3 3.0
+340.0 33.0
+342.5 1.8
+343.2 15.2
+344.2 25.2
+346.5 22.5
+347.2 12.4
+352.4 2.7
+353.3 10.4
+354.5 7.5
+355.4 3.4
+357.2 118.6
+358.3 110.1
+365.0 2.8
+365.7 2.4
+367.2 19.3
+368.5 13.9
+371.1 25.7
+372.1 1.9
+373.1 12.6
+375.2 634.8
+376.5 53.4
+377.2 3.4
+380.3 10.8
+381.4 24.4
+384.1 16.5
+385.6 4.7
+386.5 36.1
+390.0 11.9
+391.2 18.2
+393.2 7.1
+393.8 17.5
+395.7 5.8
+396.5 15.7
+397.4 1.7
+400.2 18.9
+403.4 55.0
+404.2 39.3
+405.5 12.7
+412.5 9.7
+413.5 1.6
+414.3 18.4
+416.5 465.8
+417.4 76.5
+419.0 2.8
+421.2 48.3
+422.5 46.2
+423.4 1.8
+425.4 16.2
+429.3 2.7
+430.2 3.2
+432.3 2.8
+436.2 6.4
+437.5 1.9
+441.1 28.2
+443.9 4.0
+446.0 4.5
+448.4 7.0
+450.5 2.9
+451.8 2.6
+455.3 8.2
+458.1 3.2
+459.2 19.5
+460.4 4.1
+461.4 10.9
+462.6 8.9
+466.4 11.0
+467.5 11.8
+468.4 13.2
+469.5 10.5
+473.2 11.7
+474.3 61.7
+475.6 15.3
+476.4 35.6
+477.3 24.2
+482.3 2.1
+483.2 1.5
+484.4 6.9
+485.9 22.2
+487.3 58.6
+488.3 9.2
+489.6 18.8
+490.6 18.5
+498.4 15.9
+504.3 309.6
+505.4 126.9
+506.4 4.4
+508.2 24.6
+509.6 16.5
+510.5 15.1
+512.5 20.8
+514.1 18.4
+515.5 17.3
+516.4 3.1
+520.4 19.2
+521.3 4.9
+522.5 15.0
+523.3 10.5
+524.1 21.8
+524.7 17.2
+526.3 52.1
+527.2 15.2
+529.5 4.0
+530.6 2.4
+535.2 64.7
+538.5 7.5
+539.2 20.6
+540.4 33.4
+541.1 9.1
+544.4 513.5
+545.5 204.6
+546.5 34.8
+548.0 69.6
+549.4 14.3
+550.3 3.6
+553.7 23.0
+555.6 87.9
+557.2 97.8
+558.6 25.0
+560.0 12.2
+560.6 19.4
+561.7 7.1
+562.5 2.3
+565.5 19.8
+569.1 11.1
+570.2 42.3
+571.3 17.9
+572.5 5.0
+573.7 19.6
+574.5 2.1
+577.7 76.1
+578.4 17.7
+579.2 39.6
+583.4 25.8
+584.2 2.6
+585.0 57.2
+586.1 46.7
+587.5 57.6
+588.3 102.2
+589.1 33.2
+590.4 31.5
+591.5 5.6
+592.5 11.6
+595.1 23.9
+598.3 41.7
+599.4 36.4
+600.5 36.6
+601.4 10.8
+603.4 73.0
+604.3 23.0
+605.3 311.7
+606.3 251.8
+608.6 6.3
+609.9 20.4
+611.2 43.1
+613.5 42.6
+614.7 76.8
+615.4 60.3
+616.5 33.0
+617.4 23.8
+618.5 35.4
+619.4 5.6
+624.4 22.1
+625.3 5.0
+626.0 130.6
+626.6 8.5
+627.5 14.6
+628.6 20.4
+630.8 22.1
+631.5 2.1
+634.6 39.3
+635.4 27.9
+637.2 3.3
+639.6 13.1
+640.4 9.7
+641.4 17.1
+643.1 14.4
+644.6 90.8
+645.9 22.6
+646.6 16.5
+647.4 22.6
+649.2 7.8
+650.3 16.5
+652.9 19.7
+653.6 9.1
+654.3 33.2
+655.1 6.7
+657.5 741.6
+658.5 377.5
+659.5 46.5
+660.5 31.4
+662.8 41.2
+664.0 83.7
+664.8 125.3
+665.9 125.2
+668.3 27.6
+669.3 117.2
+670.5 196.5
+671.6 47.2
+673.9 77.2
+674.9 72.3
+676.8 29.4
+678.4 241.6
+679.8 55.2
+681.5 14.0
+682.7 19.3
+684.3 52.8
+686.3 710.6
+687.4 395.8
+688.1 66.6
+688.8 98.1
+689.9 39.5
+691.4 34.6
+693.3 59.8
+694.6 82.6
+695.6 42.3
+696.8 44.7
+697.6 18.6
+698.6 76.7
+699.7 70.0
+700.4 44.2
+701.7 65.9
+703.0 32.3
+704.3 721.5
+705.3 256.1
+706.3 60.3
+708.7 35.6
+710.0 136.9
+711.0 126.1
+711.8 2.9
+713.6 49.3
+714.7 90.6
+715.3 88.0
+716.2 48.9
+717.1 19.3
+718.9 148.9
+719.5 143.7
+720.5 19.3
+721.6 89.1
+722.5 159.8
+723.4 49.9
+724.8 263.4
+726.0 109.2
+727.6 300.6
+728.5 183.9
+729.5 82.8
+730.1 130.6
+730.9 29.4
+731.9 43.9
+733.1 109.1
+734.1 58.5
+735.7 201.1
+736.6 598.6
+737.6 38.2
+739.3 6.9
+740.0 13.2
+744.5 15.1
+752.8 11.4
+755.7 8.0
+757.5 14.8
+758.8 2.3
+760.3 60.2
+761.6 15.6
+762.6 35.3
+764.5 3.2
+766.6 45.0
+768.3 48.1
+769.7 46.1
+770.3 8.3
+771.5 53.5
+772.8 59.5
+773.8 24.4
+774.5 2.3
+775.5 17.3
+776.9 28.2
+778.0 7.5
+779.7 122.7
+780.5 7.7
+781.4 5.2
+782.4 42.0
+784.6 2.6
+786.5 1660.5
+787.6 596.8
+788.5 29.0
+789.4 7.0
+790.8 47.6
+791.5 10.6
+793.4 10.1
+795.5 20.5
+797.5 38.9
+798.2 88.6
+798.9 15.9
+800.0 23.7
+801.0 66.9
+803.0 30.1
+803.7 28.7
+804.7 14.1
+806.1 30.9
+807.3 232.7
+808.0 29.9
+808.8 14.6
+809.8 9.5
+810.5 84.0
+811.1 7.4
+812.7 88.9
+815.4 284.8
+816.3 270.3
+817.1 200.3
+817.9 72.9
+819.0 50.7
+820.3 6.2
+821.6 77.5
+823.2 24.7
+824.6 21.6
+825.6 19.9
+826.5 19.7
+827.5 14.9
+828.5 29.3
+829.1 23.5
+829.8 15.9
+830.6 53.0
+831.2 14.0
+833.3 488.9
+834.3 166.5
+835.3 22.0
+836.3 24.4
+837.1 69.2
+838.6 18.7
+840.6 25.4
+841.5 33.7
+843.3 83.0
+844.3 48.8
+846.5 57.5
+847.4 76.5
+848.3 70.3
+850.0 13.1
+850.7 6.1
+851.5 40.6
+852.2 11.6
+853.7 37.9
+854.5 53.4
+855.3 30.0
+858.0 4.1
+858.6 6.4
+860.3 33.7
+862.1 31.6
+864.4 17.0
+865.2 6.0
+866.7 18.7
+867.6 14.7
+868.7 69.6
+871.6 76.0
+872.5 98.8
+874.8 67.8
+875.7 23.4
+877.0 38.8
+878.0 48.3
+879.3 21.4
+881.8 18.2
+883.6 64.8
+885.5 446.4
+886.5 61.6
+887.5 12.0
+888.3 12.4
+889.7 22.4
+891.8 59.0
+892.7 18.1
+893.5 7.7
+894.4 28.8
+895.3 53.0
+895.9 54.9
+897.0 76.7
+897.8 10.5
+898.5 41.8
+899.4 28.3
+900.2 33.9
+901.3 20.2
+902.8 52.4
+907.1 41.5
+908.3 22.1
+909.4 38.7
+910.3 32.5
+911.5 43.7
+912.3 30.2
+913.2 116.0
+913.9 28.9
+914.6 6.7
+915.5 2.0
+916.2 37.3
+917.7 11.2
+918.7 19.6
+919.3 37.1
+921.8 34.3
+923.0 37.0
+923.9 64.3
+925.6 128.6
+926.5 113.2
+928.0 153.5
+928.7 42.2
+929.4 194.4
+930.4 95.6
+931.7 29.2
+932.4 51.2
+933.9 8.8
+936.3 33.5
+937.6 86.5
+938.6 11.3
+939.7 23.3
+941.4 70.5
+942.5 68.0
+943.3 25.6
+944.4 37.6
+945.2 8.1
+946.3 319.1
+947.4 219.5
+948.5 200.4
+949.2 4.2
+950.9 62.9
+952.6 27.1
+954.0 108.4
+956.7 8.5
+960.4 63.5
+961.4 35.8
+962.8 19.7
+964.2 37.7
+965.4 37.1
+966.5 89.8
+967.7 4.4
+968.4 31.6
+969.8 11.1
+970.7 25.1
+971.9 4.2
+975.4 56.1
+976.3 23.6
+978.8 3.9
+979.9 15.9
+980.6 6.8
+981.8 36.3
+982.9 43.4
+984.1 21.6
+986.6 908.9
+987.6 348.2
+988.7 46.9
+990.0 62.4
+991.6 33.4
+992.3 24.6
+993.4 23.4
+994.9 5.6
+995.8 22.8
+996.5 252.5
+997.4 39.5
+998.5 18.3
+999.9 41.4
+1001.4 25.9
+1002.2 14.8
+1003.4 49.3
+1004.0 35.0
+1005.4 41.3
+1008.7 5.3
+1010.5 9.5
+1011.6 20.5
+1013.9 19.3
+1015.3 65.1
+1016.7 2.2
+1017.5 3.7
+1018.5 16.3
+1019.5 6.8
+1020.7 44.3
+1023.4 29.7
+1024.5 10.8
+1025.9 19.1
+1026.7 4.5
+1030.8 8.6
+1032.6 18.9
+1034.0 14.2
+1035.4 32.3
+1036.4 8.0
+1038.5 48.1
+1040.4 18.2
+1041.2 12.9
+1042.7 20.6
+1043.7 8.6
+1044.9 103.2
+1045.7 39.7
+1046.5 6.3
+1048.2 19.9
+1048.9 11.9
+1049.8 11.1
+1050.5 3.0
+1054.9 23.5
+1056.2 48.5
+1056.8 43.5
+1057.8 100.5
+1058.8 100.9
+1059.9 22.8
+1060.6 26.2
+1061.2 15.7
+1062.5 34.3
+1063.5 11.0
+1065.7 20.5
+1067.7 389.4
+1068.5 376.5
+1069.7 146.6
+1070.9 39.4
+1071.7 17.7
+1072.7 16.1
+1074.4 455.1
+1075.5 204.1
+1077.1 54.0
+1078.4 12.7
+1080.3 19.6
+1082.1 2.4
+1083.7 21.0
+1084.7 4.9
+1088.7 4.0
+1095.5 20.7
+1096.4 17.5
+1097.2 49.1
+1098.3 98.8
+1099.2 1.5
+1102.9 4.3
+1104.6 5.8
+1110.9 2.2
+1113.5 26.9
+1114.6 63.4
+1115.7 709.5
+1116.6 598.4
+1117.8 60.3
+1121.0 4.3
+1122.8 33.7
+1125.4 17.7
+1126.3 6.1
+1128.3 18.9
+1131.1 6.0
+1132.8 16.6
+1137.1 31.8
+1141.7 38.3
+1145.6 21.0
+1146.5 24.5
+1147.7 22.6
+1152.4 2.9
+1154.6 116.4
+1155.6 328.0
+1156.6 289.5
+1157.5 24.1
+1158.3 9.1
+1159.0 3.3
+1161.1 27.2
+1163.6 7.4
+1164.4 7.3
+1165.7 4.1
+1170.8 3.6
+1173.5 875.8
+1174.5 608.8
+1175.6 57.9
+1180.7 26.3
+1181.7 15.1
+1182.7 23.5
+1183.5 3.7
+1189.9 16.4
+1195.6 13.0
+1196.8 6.7
+1200.1 7.5
+1202.7 10.3
+1205.8 2.0
+1209.6 12.9
+1210.7 34.0
+1211.7 64.8
+1213.0 92.6
+1213.8 63.1
+1214.7 74.2
+1224.3 5.6
+1225.6 20.3
+1227.0 52.5
+1228.7 626.5
+1229.8 499.5
+1230.7 454.5
+1231.6 377.1
+1232.6 14.1
+1233.8 10.6
+1234.7 18.0
+1241.6 10.3
+1243.1 34.7
+1248.8 4.5
+1253.6 22.6
+1254.4 23.8
+1255.3 54.6
+1256.0 1.2
+1264.9 15.7
+1267.4 12.8
+1268.2 21.0
+1278.5 6.0
+1293.5 3.9
+1295.2 29.3
+1297.6 25.7
+1299.5 12.2
+1306.6 17.7
+1308.6 6.8
+1309.8 3.8
+1314.0 21.9
+1315.4 94.0
+1316.5 10.9
+1323.7 39.6
+1325.1 83.0
+1325.8 91.6
+1326.6 154.2
+1327.8 24.4
+1333.8 16.1
+1336.7 4.3
+1341.6 51.4
+1343.6 702.4
+1344.6 493.4
+1345.7 37.6
+1359.7 6.9
+1383.8 12.6
+1415.6 5.4
+1434.5 12.3
+1449.7 5.0
+S	63	63	444.41
+I	ID	1
+I	RTime	.1052
+Z	2	887.81
+136.1 1.8
+141.2 1.7
+164.9 2.4
+184.1 2.5
+191.0 3.0
+193.5 2.2
+195.1 2.5
+199.9 1.2
+221.0 1.5
+222.1 2.0
+226.9 1.8
+229.1 2.4
+229.9 1.7
+239.2 2.7
+259.0 3.0
+260.1 2.2
+282.3 1.2
+287.9 1.3
+289.2 3.0
+290.1 3.7
+291.3 6.5
+302.0 1.8
+305.2 5.1
+307.9 0.8
+310.0 2.5
+312.1 1.3
+316.3 6.9
+317.2 8.6
+321.6 6.4
+322.3 10.1
+324.2 9.5
+324.9 3.5
+329.2 2.0
+336.9 2.9
+339.0 0.8
+342.4 4.5
+346.0 9.6
+351.6 1.7
+358.1 3.4
+362.8 1.2
+364.0 1.8
+367.8 0.8
+369.4 1.5
+370.4 3.4
+371.5 6.1
+372.3 1.2
+374.9 1.7
+382.0 8.3
+384.2 2.7
+388.0 3.0
+395.3 4.0
+396.6 6.8
+400.1 4.0
+401.2 3.9
+402.5 8.1
+408.2 8.6
+411.6 9.8
+414.3 9.0
+416.0 4.5
+422.9 3.0
+423.9 1.6
+426.0 29.6
+427.1 11.0
+428.2 18.2
+429.2 2.4
+432.3 5.1
+435.1 9.1
+435.7 12.6
+447.2 1.6
+454.4 1.8
+495.0 9.3
+508.3 6.9
+514.3 2.5
+537.3 7.5
+543.2 5.8
+544.5 6.9
+546.0 1.8
+568.4 4.5
+599.8 7.1
+608.5 1.8
+609.5 1.6
+630.9 2.7
+642.6 4.1
+643.6 1.8
+649.5 1.0
+660.4 2.2
+669.3 4.4
+683.4 1.7
+687.2 1.0
+696.6 2.7
+702.8 1.7
+713.4 4.9
+774.2 2.9
+775.5 1.2
+S	64	64	676.10
+I	ID	73
+I	RTime	3.3720
+Z	2	1351.19
+Z	3	2026.28
+281.3 4.5
+330.2 3.2
+338.9 2.4
+372.4 2.0
+389.7 3.2
+417.5 2.5
+436.8 1.3
+442.2 5.1
+442.9 2.9
+461.5 2.9
+469.2 3.0
+477.1 2.4
+479.6 3.5
+490.3 7.5
+499.4 3.2
+529.1 2.0
+533.4 2.0
+535.6 1.7
+541.1 5.0
+542.3 3.7
+543.2 4.1
+547.9 9.6
+552.1 2.7
+566.4 3.0
+567.2 17.5
+568.9 1.1
+578.3 1.1
+579.3 2.4
+582.6 16.8
+583.5 2.7
+585.5 3.0
+591.9 9.5
+601.3 1.6
+606.6 7.5
+612.2 3.9
+613.4 2.2
+623.1 2.7
+625.4 1.8
+626.7 21.2
+627.3 2.0
+634.9 0.8
+639.4 18.2
+640.8 9.8
+651.5 75.5
+652.2 10.8
+655.1 337.7
+655.8 20.0
+658.0 5.3
+659.3 7.1
+660.8 10.6
+662.4 28.7
+663.1 13.1
+666.8 4.3
+697.3 20.0
+702.5 4.9
+703.7 7.5
+714.5 2.5
+719.2 14.3
+731.8 3.0
+735.4 1.1
+758.7 3.7
+759.4 4.3
+763.6 6.3
+796.4 3.2
+797.6 5.5
+799.8 1.8
+810.3 1.5
+826.6 8.8
+838.4 2.2
+849.9 16.8
+850.6 16.2
+851.3 5.8
+883.1 3.9
+902.4 4.4
+917.9 4.9
+931.3 1.7
+950.5 1.7
+951.4 6.3
+1003.5 2.7
+1004.2 4.3
+1021.1 4.5
+1147.8 2.2
+S	65	65	452.85
+I	ID	167
+I	RTime	8.2247
+Z	2	904.69
+130.2 1.1
+175.1 4.6
+178.9 2.2
+182.9 1.5
+184.0 4.8
+185.0 1.7
+198.9 1.2
+211.3 1.6
+218.1 1.2
+228.2 2.2
+234.3 1.1
+235.2 1.0
+237.0 6.3
+239.1 3.2
+256.2 2.9
+256.9 2.7
+258.3 2.0
+268.3 2.7
+271.3 2.0
+272.2 4.1
+277.2 1.0
+282.0 6.4
+284.4 2.5
+290.2 1.6
+291.2 10.6
+292.2 9.6
+295.0 1.8
+299.4 2.4
+304.0 2.2
+306.2 1.6
+307.3 5.4
+308.0 2.5
+312.4 6.3
+317.5 4.6
+321.2 1.2
+324.2 7.0
+325.1 3.0
+326.4 2.5
+338.2 48.9
+339.0 2.2
+342.3 1.1
+345.5 19.0
+357.5 2.0
+359.9 9.6
+361.2 4.6
+370.3 3.5
+377.4 9.8
+379.0 2.2
+380.4 3.5
+385.3 4.4
+389.2 4.0
+395.0 8.0
+400.0 11.6
+401.5 2.9
+402.6 4.1
+403.9 8.5
+404.7 4.5
+409.5 6.1
+410.5 2.0
+412.3 2.7
+414.9 5.0
+417.0 12.6
+418.3 6.0
+421.1 3.2
+427.3 8.5
+432.3 1.5
+433.0 1.1
+434.1 1.6
+435.3 56.0
+436.0 5.3
+442.1 6.0
+443.8 49.2
+447.1 2.7
+489.4 3.2
+499.0 1.2
+518.3 9.6
+520.2 2.0
+521.6 1.0
+549.2 12.1
+550.0 9.8
+552.4 3.2
+557.4 1.1
+575.4 3.2
+579.3 1.6
+588.5 2.9
+605.4 5.6
+646.4 3.2
+647.3 2.5
+660.6 2.5
+663.7 4.4
+672.3 1.2
+673.4 2.2
+678.3 66.4
+679.5 12.8
+702.6 1.2
+713.3 1.2
+717.5 1.8
+731.4 1.8
+757.4 3.2
+758.4 2.5
+759.7 4.0
+771.0 1.3
+775.1 2.0
+776.4 1.5
+777.4 2.4
+S	66	66	427.38
+I	ID	161
+I	RTime	7.9059
+Z	2	853.75
+127.1 4.0
+129.0 20.3
+136.1 5.0
+141.0 2.4
+142.3 1.2
+155.1 16.2
+155.9 2.2
+157.4 1.0
+159.2 2.2
+172.2 6.4
+175.1 5.6
+185.2 1.6
+189.0 3.0
+202.9 4.1
+211.1 1.7
+221.3 1.7
+223.3 2.0
+239.0 1.2
+246.2 6.5
+253.2 6.5
+254.1 3.4
+257.0 4.1
+260.2 4.0
+268.6 22.5
+269.3 52.0
+272.1 11.5
+275.2 2.5
+285.4 2.0
+287.1 12.1
+292.9 1.1
+294.7 3.2
+297.2 2.7
+299.3 4.9
+303.3 7.0
+312.2 4.0
+314.2 1.2
+315.2 1.8
+323.2 7.6
+325.2 10.1
+329.0 2.2
+331.1 1.8
+348.0 10.5
+349.8 79.4
+350.8 16.7
+361.1 8.3
+362.9 145.8
+364.1 2.9
+366.2 3.4
+368.1 9.6
+371.0 4.5
+377.2 1.7
+378.1 3.7
+383.4 3.2
+384.5 1.8
+386.3 2.0
+392.6 8.3
+393.7 10.8
+394.4 3.7
+395.7 3.7
+396.6 2.7
+398.2 4.1
+402.7 6.0
+404.2 1.2
+409.2 16.0
+410.4 13.8
+411.3 12.6
+418.1 48.0
+418.8 9.8
+419.5 4.5
+490.4 2.9
+497.4 1.2
+504.1 2.5
+508.4 1.0
+520.6 4.4
+528.5 13.3
+529.7 3.0
+534.7 2.7
+538.5 1.7
+554.3 7.8
+567.5 4.3
+581.4 4.0
+582.4 2.5
+583.3 3.2
+585.3 13.8
+586.8 3.0
+600.1 5.5
+611.6 3.5
+628.4 2.2
+654.6 5.0
+680.5 2.0
+682.5 4.0
+698.3 131.1
+699.3 28.7
+700.3 4.5
+706.3 2.5
+707.5 2.0
+722.5 5.5
+724.6 6.9
+S	67	67	692.15
+Z	2	1383.29
+199.7 224.5
+202.2 35.9
+204.3 26.4
+209.4 68.0
+210.1 98.2
+217.2 259.8
+218.4 118.0
+223.2 66.6
+225.1 139.2
+226.2 809.5
+227.2 172.4
+228.1 267.8
+229.1 134.6
+232.2 60.0
+235.3 783.1
+237.3 113.8
+239.1 239.2
+242.2 548.3
+243.3 63.1
+244.3 669.2
+245.4 360.2
+246.3 597.6
+249.2 289.3
+251.2 159.9
+254.4 93.2
+257.1 107.4
+258.3 299.4
+259.4 108.1
+260.2 293.5
+261.2 721.7
+262.2 1866.7
+263.1 1418.7
+264.3 73.4
+267.2 228.1
+270.0 30.1
+272.1 78.3
+273.4 73.3
+274.2 47.0
+275.2 139.2
+276.4 165.8
+277.1 161.3
+279.3 151.3
+280.3 74.7
+283.3 63.3
+284.1 158.8
+285.1 76.2
+287.3 121.5
+288.2 99.2
+289.2 71.0
+291.1 129.7
+292.3 41.5
+297.3 640.7
+301.3 183.0
+304.1 113.1
+305.1 27.4
+308.1 286.4
+309.4 227.7
+311.3 52.1
+314.2 155.1
+315.2 308.6
+316.0 55.2
+317.4 184.8
+318.1 49.4
+320.2 147.3
+321.2 175.8
+324.2 211.2
+325.3 399.9
+326.5 36.5
+327.2 61.0
+328.1 274.2
+330.1 82.0
+332.1 540.4
+333.4 266.4
+335.3 276.6
+336.3 360.7
+337.2 153.4
+341.2 201.4
+343.3 184.0
+344.1 128.6
+346.0 441.8
+347.3 94.0
+351.3 34.2
+353.2 184.4
+354.5 428.0
+355.5 30.3
+358.5 30.1
+359.4 39.1
+360.2 369.5
+361.2 448.6
+362.3 323.4
+364.3 279.4
+366.4 39.4
+371.1 1495.6
+372.2 842.7
+373.2 1151.2
+374.3 445.5
+375.3 133.6
+380.4 204.8
+381.3 393.4
+385.1 51.2
+387.4 349.8
+388.4 379.6
+389.4 801.8
+390.4 2918.9
+391.2 578.5
+392.2 1317.5
+393.1 163.2
+396.0 106.3
+396.6 42.8
+398.3 90.2
+401.2 80.0
+402.3 196.7
+403.4 74.8
+404.4 271.9
+405.3 367.0
+407.5 95.3
+408.4 49.1
+409.4 60.7
+412.5 162.7
+413.5 139.4
+416.7 274.1
+417.5 18.0
+418.5 26.4
+419.4 203.3
+421.2 86.9
+422.4 174.0
+423.1 79.5
+424.1 132.7
+426.3 43.5
+427.2 345.7
+428.1 56.9
+429.1 45.8
+430.4 140.7
+431.3 210.2
+432.5 160.7
+433.6 257.9
+436.2 225.4
+437.2 90.6
+438.2 57.9
+439.4 191.9
+441.1 54.8
+442.5 265.1
+443.3 390.5
+444.4 831.6
+446.1 564.8
+447.8 133.4
+448.6 61.8
+449.3 71.2
+451.3 270.3
+453.4 352.1
+454.3 55.4
+458.8 80.9
+459.4 444.4
+461.3 12324.5
+462.3 2167.0
+463.1 104.2
+465.2 209.9
+467.1 39.2
+469.3 243.6
+470.4 72.8
+471.3 3292.9
+473.3 527.1
+474.3 150.0
+477.6 205.0
+479.1 283.4
+480.1 63.8
+482.5 196.6
+484.8 53.6
+486.2 86.2
+487.4 762.9
+488.9 121.8
+491.2 158.6
+495.1 48.5
+497.7 428.6
+498.7 181.7
+500.2 648.8
+501.0 280.9
+502.3 61.6
+503.4 33.5
+505.0 1430.3
+507.4 54.7
+508.3 334.3
+509.7 1210.6
+510.5 43.4
+511.4 225.8
+513.6 118.4
+515.5 46.4
+516.4 42.3
+518.2 1794.5
+519.1 2381.3
+520.3 680.3
+521.5 508.2
+524.5 48.2
+526.3 103.4
+528.4 135.7
+529.4 262.2
+530.6 656.4
+531.3 369.3
+532.1 191.6
+533.3 288.4
+533.9 114.0
+535.6 311.2
+536.4 1223.8
+537.6 133.0
+540.2 32.8
+541.0 295.4
+542.1 53.1
+544.2 773.4
+544.8 55.1
+546.3 438.2
+548.4 581.7
+549.6 408.3
+550.6 75.1
+551.5 173.2
+552.4 771.8
+554.4 116.9
+556.3 863.3
+557.3 585.8
+558.6 118.0
+559.5 81.0
+560.4 198.0
+561.3 141.4
+562.2 202.0
+563.1 185.9
+564.4 160.6
+565.5 685.1
+566.4 77.5
+570.6 2014.1
+571.9 273.9
+573.5 379.5
+574.3 5010.6
+575.4 1142.8
+576.2 313.3
+577.2 76.6
+578.4 501.9
+579.4 28.2
+581.2 111.9
+582.2 288.6
+583.4 802.6
+584.4 446.6
+585.4 187.0
+586.2 301.8
+588.1 670.3
+589.3 246.1
+590.5 68.9
+591.4 158.5
+594.6 321.4
+595.5 457.3
+597.1 5525.2
+598.2 240.4
+599.1 455.2
+599.9 1509.8
+600.5 507.1
+602.5 445.2
+603.4 109.9
+604.1 98.7
+606.0 4974.8
+606.8 2203.1
+609.4 236.5
+610.1 211.7
+612.3 335.2
+613.2 72.0
+614.6 125.1
+615.2 178.1
+616.6 95.3
+617.7 437.5
+619.2 831.4
+620.1 899.4
+621.4 1213.6
+622.7 229.2
+625.0 302.3
+625.7 47.9
+626.4 55.1
+627.4 476.6
+628.2 271.0
+630.6 109.7
+631.7 163.3
+633.6 1348.4
+634.4 2323.3
+635.1 341.2
+635.9 30.2
+637.5 306.7
+638.5 82.5
+639.3 84.1
+641.1 552.5
+642.1 669.7
+643.5 85.8
+644.4 361.5
+645.5 1912.4
+646.4 453.9
+647.3 238.4
+648.0 385.7
+648.8 604.9
+649.5 304.1
+651.2 2551.4
+652.2 400.8
+654.4 175.7
+655.5 38.7
+656.5 277.2
+659.5 710.1
+660.3 41.4
+661.0 1550.5
+662.0 372.7
+663.6 88.4
+664.4 55.0
+665.2 546.9
+666.1 210.7
+667.5 373.4
+669.4 3034.8
+670.1 1130.3
+671.2 123.7
+672.8 1389.4
+674.2 4042.7
+675.3 3307.6
+676.3 368.3
+677.0 101.3
+679.8 461.5
+680.7 494.6
+681.5 2705.4
+683.1 20692.0
+684.3 6537.1
+685.0 27.2
+685.7 259.1
+696.3 50.0
+699.4 487.0
+700.4 82.0
+702.4 186.3
+703.4 149.2
+704.5 85.9
+705.9 50.8
+706.5 185.7
+707.2 39.1
+707.8 33.1
+709.4 36.1
+710.5 134.5
+713.2 34.2
+714.6 57.6
+715.7 163.8
+716.7 98.0
+719.0 123.7
+720.5 711.9
+722.3 100.9
+726.8 321.0
+729.5 40.2
+731.8 798.2
+732.4 3403.9
+733.4 1839.3
+734.6 192.9
+735.5 118.3
+736.5 52.5
+738.4 737.6
+739.6 457.7
+741.4 57.9
+742.5 217.4
+745.2 367.8
+746.6 149.7
+747.3 35.7
+750.4 3876.2
+751.6 93.3
+752.5 353.5
+753.7 135.7
+755.4 51.2
+756.5 128.0
+757.7 46.2
+760.2 104.9
+761.5 158.3
+762.3 104.7
+763.4 1025.4
+764.3 262.0
+767.3 247.4
+773.3 1094.8
+774.2 388.4
+776.4 227.8
+777.0 55.5
+778.0 54.0
+778.7 33.5
+779.4 68.2
+780.1 292.9
+781.1 88.4
+782.7 45.5
+785.3 231.8
+786.4 131.2
+788.2 426.6
+789.3 34.7
+790.8 820.8
+791.4 1579.2
+792.5 582.1
+793.4 128.1
+796.5 144.7
+798.4 519.4
+799.7 257.5
+800.9 313.5
+801.5 199.3
+802.4 42.1
+804.0 199.4
+804.7 136.2
+806.4 39.7
+808.7 403.3
+809.5 1311.0
+810.3 329.4
+812.3 2742.4
+813.0 161.7
+815.1 108.0
+816.5 1799.8
+821.5 741.0
+822.6 90.8
+825.8 88.0
+826.4 43.4
+829.5 114.3
+830.5 180.0
+832.7 113.3
+833.6 75.7
+834.4 93.6
+836.5 80.8
+837.5 42.2
+838.3 45.1
+839.4 287.2
+840.7 60.8
+843.7 61.4
+844.7 69.0
+846.4 380.4
+847.5 4953.2
+848.4 1809.1
+849.4 281.9
+851.3 252.3
+852.7 393.6
+853.6 341.4
+854.5 307.9
+855.6 127.7
+856.6 26.9
+857.5 213.3
+858.7 27.7
+860.5 291.0
+861.5 592.9
+862.5 235.7
+864.5 845.7
+865.3 287.6
+868.2 62.3
+869.6 97.6
+870.5 258.4
+874.6 155.0
+876.5 240.2
+877.3 136.6
+878.8 500.6
+879.5 3701.0
+880.4 551.0
+881.6 138.5
+884.8 110.5
+886.2 872.8
+887.4 546.3
+888.1 47.7
+889.7 407.2
+891.3 407.6
+893.0 48.9
+897.4 1492.2
+899.2 1406.4
+899.9 2117.0
+901.4 520.2
+902.4 166.0
+904.3 4350.3
+905.3 1884.4
+906.5 27.0
+908.1 290.0
+911.6 196.9
+913.5 73.1
+915.5 4522.4
+916.9 626.0
+918.3 51.6
+920.5 142.4
+922.3 6228.7
+923.5 2256.6
+924.4 299.0
+928.7 333.6
+929.6 256.7
+931.5 679.8
+932.1 416.6
+936.1 304.7
+937.6 382.9
+938.5 319.2
+939.6 667.9
+940.7 133.9
+941.5 181.3
+946.5 24.5
+948.5 286.0
+949.4 180.0
+950.3 54.8
+953.0 48.8
+954.5 70.9
+957.3 285.5
+958.6 210.0
+959.6 286.8
+962.3 104.6
+963.4 225.7
+964.5 168.4
+966.9 161.6
+972.4 78.6
+973.5 180.2
+974.4 317.6
+975.4 1374.1
+976.5 901.6
+977.6 427.2
+978.4 144.9
+979.4 237.6
+984.3 40.3
+989.4 122.2
+992.5 1956.2
+993.5 2146.5
+994.6 8446.5
+995.5 4281.3
+996.6 1858.1
+997.2 86.1
+1003.6 123.5
+1004.7 57.8
+1005.7 36.1
+1007.1 77.2
+1009.6 70.3
+1010.4 132.8
+1011.5 255.9
+1012.5 271.1
+1013.6 162.9
+1027.5 52.2
+1028.8 213.0
+1029.5 89.6
+1030.8 338.5
+1031.4 353.9
+1033.3 98.1
+1035.2 145.9
+1036.7 811.1
+1037.7 572.9
+1038.9 43.0
+1039.6 66.7
+1045.5 105.8
+1046.3 248.3
+1047.3 115.5
+1050.2 415.2
+1051.7 1177.9
+1052.5 299.2
+1055.8 66.4
+1057.4 165.5
+1060.6 614.7
+1061.5 224.3
+1063.2 115.9
+1065.6 154.4
+1067.7 98.1
+1068.7 713.8
+1069.7 1045.6
+1075.7 236.6
+1076.6 215.9
+1080.9 45.4
+1082.6 187.7
+1085.6 258.3
+1086.8 122.1
+1090.5 364.9
+1092.2 455.7
+1093.6 171.0
+1095.6 162.0
+1096.4 114.3
+1102.5 84.8
+1103.5 793.0
+1104.6 224.5
+1105.6 183.5
+1106.5 45.9
+1108.5 576.2
+1109.6 183.3
+1110.7 82.6
+1111.8 49.8
+1114.5 160.7
+1115.3 54.7
+1117.4 152.5
+1118.3 446.9
+1119.2 307.9
+1120.5 97.4
+1121.5 3998.3
+1122.5 2362.3
+1123.5 987.5
+1124.6 1516.6
+1125.8 95.3
+1133.0 114.2
+1133.8 65.3
+1134.5 36.4
+1135.2 43.8
+1136.7 42.0
+1138.0 44.9
+1140.1 276.0
+1140.7 687.4
+1142.9 436.8
+1143.6 155.0
+1147.6 47.0
+1148.3 319.2
+1160.1 29.5
+1161.7 48.6
+1162.7 98.2
+1163.9 116.2
+1164.8 111.8
+1166.4 56.5
+1167.6 101.0
+1176.2 197.2
+1178.5 219.2
+1180.0 173.9
+1181.1 203.4
+1181.9 99.1
+1183.7 52.0
+1185.8 126.3
+1189.5 46.2
+1194.3 227.7
+1195.0 35.8
+1198.2 438.9
+1199.2 292.4
+1205.1 108.6
+1205.7 175.8
+1206.5 24.0
+1210.6 5474.3
+1211.5 2813.5
+1212.4 410.6
+1213.8 142.6
+1214.8 143.4
+1218.7 336.4
+1219.8 213.5
+1220.5 168.1
+1221.8 399.5
+1233.7 104.2
+1234.7 535.2
+1235.6 145.5
+1236.7 595.3
+1237.6 838.9
+1238.6 103.9
+1239.7 857.9
+1252.7 349.6
+1254.7 42.3
+1262.5 72.2
+1264.9 46.4
+1269.8 102.6
+1278.5 29.6
+1346.8 61.3
+S	68	68	468.80
+I	ID	93
+I	RTime	4.3822
+Z	2	936.59
+Z	3	1404.38
+136.3 1.6
+147.1 14.1
+148.3 2.9
+150.1 1.2
+151.2 1.1
+155.0 5.9
+156.2 1.1
+160.8 2.5
+167.2 1.2
+172.2 1.8
+175.2 7.3
+177.9 1.2
+179.1 4.4
+180.2 4.0
+191.2 2.5
+199.2 2.2
+206.3 3.5
+208.1 1.6
+209.1 9.8
+212.3 1.2
+213.8 2.7
+226.2 76.9
+227.1 10.8
+231.2 1.7
+235.3 1.6
+237.4 2.0
+240.3 6.0
+244.2 219.8
+245.2 23.2
+248.4 6.4
+250.9 3.5
+252.2 2.5
+254.3 4.9
+263.1 2.4
+264.4 0.8
+265.3 3.9
+266.2 16.2
+268.3 2.0
+269.4 1.1
+273.6 6.1
+276.0 2.0
+278.5 4.0
+279.3 4.3
+280.1 2.9
+281.2 2.4
+282.7 18.6
+285.4 1.3
+287.3 1.5
+290.1 5.0
+291.9 2.7
+294.3 11.8
+295.2 2.7
+296.9 2.5
+298.3 10.1
+299.2 7.1
+303.0 2.5
+305.2 1.1
+308.3 9.8
+310.0 1.5
+311.3 5.4
+312.4 5.1
+313.3 29.2
+315.8 6.5
+317.1 2.5
+318.9 3.5
+322.2 26.7
+323.2 38.5
+324.1 4.0
+325.4 9.1
+326.4 1.3
+327.2 4.5
+327.9 1.2
+329.6 3.4
+333.2 5.0
+333.9 4.6
+335.2 1.2
+337.0 1.2
+338.5 16.8
+340.2 80.0
+341.2 152.6
+347.5 112.3
+349.1 1.8
+351.3 1.2
+352.0 1.6
+353.3 24.6
+354.4 9.6
+355.2 7.3
+356.5 25.7
+362.1 1.3
+363.2 0.8
+363.9 5.9
+368.1 10.8
+369.2 1.1
+370.2 1.2
+372.9 5.1
+374.6 1.2
+377.3 2.4
+377.9 1.1
+381.2 2.9
+387.0 25.0
+388.0 11.8
+389.4 1.7
+390.4 8.5
+391.9 12.5
+392.5 3.0
+393.1 1.7
+394.3 8.8
+395.9 101.1
+396.6 1.2
+397.3 1.3
+400.5 17.7
+401.2 23.6
+402.4 5.0
+404.8 461.2
+405.4 119.5
+408.2 14.3
+409.2 13.3
+410.4 1.7
+415.6 10.3
+419.5 29.2
+420.4 4.6
+421.1 2.0
+422.3 15.5
+423.0 13.1
+424.0 4.5
+425.4 53.2
+426.5 3.5
+428.8 1.7
+430.6 40.0
+432.6 5.6
+433.3 14.1
+434.4 21.7
+435.0 1.6
+436.3 33.5
+437.5 6.4
+439.4 76.9
+440.5 4.1
+441.1 3.2
+445.3 7.9
+450.2 102.4
+451.3 207.1
+452.3 25.2
+453.1 4.5
+453.9 5.1
+460.0 2237.5
+461.1 9.1
+462.0 6.9
+464.8 3.9
+469.8 0.6
+494.2 2.5
+520.5 1.3
+527.5 2.2
+540.0 2.0
+545.7 4.3
+551.2 1.1
+555.5 1.2
+557.2 2.2
+566.7 1.2
+580.4 3.2
+594.4 2.2
+598.4 16.2
+616.4 2.4
+631.2 1.2
+634.4 11.8
+635.5 1.3
+650.4 2.9
+661.6 2.4
+665.2 7.0
+666.4 5.8
+670.6 3.7
+675.5 8.1
+681.4 1.7
+693.4 679.2
+694.5 211.3
+708.6 2.2
+710.6 1.5
+726.2 2.7
+727.7 2.5
+735.2 3.0
+781.0 2.5
+790.5 8.1
+802.4 6.5
+808.6 33.5
+809.5 5.4
+819.4 30.5
+820.4 8.1
+837.6 46.2
+838.7 32.9
+915.6 1.7
+S	69	69	652.48
+Z	2	1303.95
+187.9 0.9
+194.1 1.5
+201.2 2.7
+207.1 1.1
+214.2 1.6
+215.2 1.3
+217.0 1.0
+218.1 1.7
+228.9 3.4
+231.2 3.9
+233.9 2.6
+234.9 2.6
+242.0 6.5
+243.1 1.1
+244.3 2.4
+246.2 2.8
+249.1 0.8
+257.8 1.1
+259.0 1.0
+260.0 4.8
+262.0 2.1
+268.1 1.0
+270.2 4.2
+271.2 0.8
+272.0 1.4
+273.2 2.2
+275.1 6.2
+276.2 2.0
+277.2 4.0
+280.0 3.0
+280.8 1.4
+281.9 1.4
+285.3 2.2
+286.4 1.5
+287.1 1.0
+288.4 1.9
+290.3 0.9
+292.2 2.6
+292.9 2.6
+296.0 1.4
+297.0 2.0
+298.2 1.7
+307.2 0.8
+310.2 1.4
+311.1 0.9
+317.4 3.6
+319.1 1.3
+320.1 1.2
+321.1 1.4
+323.3 2.4
+326.2 2.4
+327.1 2.4
+328.9 2.5
+331.2 0.6
+332.6 0.6
+333.2 4.1
+334.2 0.7
+339.1 4.0
+339.9 2.9
+341.1 1.9
+342.2 5.0
+343.1 1.6
+344.1 1.0
+345.4 2.9
+346.2 10.6
+347.3 2.6
+352.2 1.3
+354.2 1.0
+357.2 5.5
+358.1 19.5
+359.3 2.4
+361.3 2.9
+363.0 1.2
+365.1 1.5
+366.6 1.7
+370.2 3.7
+371.2 3.5
+373.1 4.9
+375.7 3.5
+376.4 1.5
+382.5 10.6
+383.3 5.8
+384.2 4.1
+386.3 0.7
+387.5 5.2
+390.1 2.6
+392.0 6.8
+393.1 1.5
+394.0 2.6
+395.0 2.6
+396.2 2.1
+399.2 5.8
+401.3 1.4
+402.6 0.7
+404.3 1.3
+405.0 1.2
+407.4 1.2
+408.2 2.0
+409.5 7.4
+410.7 1.7
+413.1 3.9
+414.2 2.0
+415.3 1.1
+418.6 1.1
+420.8 1.0
+422.2 5.0
+423.2 1.0
+424.2 4.0
+425.2 2.1
+426.1 3.6
+429.1 4.2
+430.4 3.8
+432.2 2.2
+434.0 3.9
+435.0 1.3
+436.1 1.8
+438.1 1.0
+439.3 6.4
+440.1 2.2
+441.3 0.9
+442.2 1.1
+443.1 8.5
+445.3 13.6
+446.3 6.3
+447.1 0.8
+449.1 4.2
+451.5 6.4
+452.2 7.7
+453.0 2.0
+454.4 4.6
+455.2 1.9
+456.7 5.0
+458.3 2.1
+460.2 2.0
+461.0 0.5
+463.6 4.6
+465.0 0.6
+466.3 2.2
+467.4 3.4
+468.2 1.8
+469.4 5.3
+470.3 28.3
+471.2 56.3
+472.1 1.1
+473.1 2.8
+474.1 3.2
+477.0 1.2
+478.0 3.0
+480.1 0.6
+481.0 2.1
+481.6 1.2
+482.3 5.8
+483.2 3.2
+484.5 5.3
+485.5 2.3
+486.2 3.9
+488.5 3.2
+489.2 1.3
+490.6 3.0
+491.7 1.0
+492.3 4.1
+493.0 2.9
+495.0 1.6
+495.9 4.0
+498.0 1.0
+499.5 1.9
+500.2 4.3
+502.5 3.8
+503.2 3.1
+504.1 4.9
+504.9 1.0
+505.5 6.5
+506.3 3.7
+507.3 2.8
+507.9 1.2
+509.2 3.4
+510.4 1.8
+511.0 0.7
+512.0 4.8
+512.9 0.7
+514.1 4.1
+515.4 3.7
+516.3 3.5
+518.4 1.8
+519.5 8.9
+520.2 13.0
+521.3 4.8
+522.2 3.6
+523.3 6.6
+524.1 3.0
+525.1 5.3
+525.8 2.4
+526.9 2.2
+528.0 2.8
+529.2 3.8
+530.0 1.6
+530.8 1.2
+533.0 2.0
+534.2 2.7
+535.1 8.2
+537.5 21.9
+538.4 10.6
+539.1 5.4
+539.9 1.1
+541.3 6.0
+542.1 3.2
+543.4 4.9
+544.4 10.1
+545.4 13.6
+546.2 2.6
+548.8 4.6
+549.5 3.7
+550.9 6.8
+552.2 11.0
+553.2 2.5
+554.2 5.8
+555.1 2.1
+556.3 7.7
+557.2 2.7
+557.9 2.7
+559.4 9.1
+560.3 14.6
+561.1 3.4
+562.4 3.9
+563.1 3.8
+565.3 11.7
+566.1 2.3
+567.5 7.0
+568.4 8.4
+569.3 3.4
+570.1 3.1
+571.3 7.6
+572.1 18.9
+573.1 13.7
+573.9 5.5
+575.3 3.3
+576.6 4.7
+578.0 2.9
+579.1 4.5
+580.6 6.3
+581.3 3.8
+582.3 3.6
+583.5 2.0
+584.3 1.6
+585.3 1.8
+586.2 5.0
+587.0 4.4
+587.7 1.5
+588.3 2.6
+589.1 6.9
+590.2 5.9
+591.1 5.2
+592.0 7.2
+592.8 3.9
+593.9 8.5
+595.0 11.8
+595.9 1.8
+597.0 7.0
+598.2 11.3
+599.2 9.5
+600.2 8.4
+601.4 5.8
+602.3 9.9
+603.6 4.0
+604.4 1.8
+605.5 4.9
+606.4 7.1
+607.2 17.1
+608.4 9.0
+609.5 9.5
+610.7 4.8
+611.6 4.9
+612.3 3.3
+612.9 1.9
+614.4 9.8
+615.3 14.9
+616.3 31.9
+617.2 77.5
+618.1 21.1
+619.3 15.0
+620.3 4.5
+621.3 1.9
+622.9 4.6
+623.7 9.4
+625.0 12.3
+626.1 2.4
+627.3 1.3
+628.7 18.6
+629.6 14.5
+630.5 20.6
+631.6 2.9
+633.1 74.0
+634.2 94.1
+635.2 32.0
+636.1 10.3
+637.5 5.0
+639.1 2.2
+640.1 9.8
+642.4 201.7
+643.4 55.8
+644.4 6.4
+645.8 1.2
+653.9 1.0
+657.3 1.6
+658.2 0.9
+660.3 0.8
+663.3 0.9
+663.9 0.8
+665.2 1.1
+667.2 2.4
+669.3 4.0
+670.3 4.3
+671.7 1.2
+674.4 1.6
+676.4 1.8
+678.3 1.6
+679.3 2.2
+682.3 2.3
+683.8 2.1
+685.1 22.4
+686.1 8.5
+687.5 2.7
+688.3 2.2
+694.2 2.2
+695.3 5.1
+696.1 1.1
+699.1 1.9
+700.4 3.9
+701.5 2.4
+702.3 2.4
+705.7 0.8
+707.3 5.8
+708.8 0.7
+712.6 8.4
+713.4 5.2
+714.2 1.0
+715.2 1.0
+716.2 1.8
+717.3 1.2
+717.9 1.1
+719.3 2.5
+720.9 0.9
+723.3 1.5
+724.1 1.0
+725.4 1.2
+726.3 5.6
+727.2 4.3
+728.4 3.6
+729.7 12.4
+730.3 26.1
+731.4 7.7
+732.1 1.7
+733.3 1.2
+736.5 0.8
+737.4 1.6
+738.2 2.0
+740.1 1.5
+742.1 15.8
+743.3 6.8
+744.2 1.4
+745.6 3.8
+746.2 1.2
+747.0 3.3
+748.2 0.8
+755.5 0.8
+757.2 1.2
+758.1 4.1
+759.0 1.5
+760.0 1.5
+761.7 1.5
+766.4 1.3
+767.9 2.3
+769.2 2.6
+770.3 1.8
+771.2 2.7
+772.1 1.7
+774.9 2.3
+777.1 1.5
+778.7 3.7
+779.4 2.0
+781.2 0.8
+782.5 2.0
+783.2 3.7
+784.1 2.2
+786.6 2.9
+787.7 3.6
+789.4 1.0
+793.1 1.0
+795.3 1.3
+796.5 2.0
+799.1 4.2
+800.3 5.9
+803.6 3.9
+804.9 3.0
+806.9 3.6
+808.0 0.9
+809.3 0.6
+811.1 1.2
+812.4 2.4
+814.4 0.8
+817.5 0.8
+818.2 3.7
+820.7 1.3
+823.2 2.6
+825.5 1.8
+826.1 2.1
+827.0 24.3
+829.9 2.2
+832.4 1.8
+834.6 0.8
+837.7 1.1
+839.2 4.4
+840.8 2.0
+841.6 1.0
+842.3 4.5
+844.4 2.0
+845.7 1.0
+847.0 2.3
+849.6 2.0
+851.3 1.0
+852.6 1.1
+854.1 3.1
+855.0 1.3
+857.3 12.1
+858.1 2.4
+859.2 9.3
+860.2 7.6
+861.0 1.2
+863.6 3.5
+864.9 0.6
+868.9 1.9
+870.1 2.9
+871.4 3.8
+875.0 1.0
+876.2 2.8
+880.2 3.8
+881.3 2.5
+883.2 1.6
+886.3 0.9
+887.3 1.6
+888.5 0.8
+890.2 1.8
+891.2 6.9
+894.5 0.8
+895.5 0.9
+896.4 1.6
+897.4 0.8
+898.3 1.1
+899.2 1.1
+899.8 2.6
+901.2 4.0
+902.2 0.8
+903.2 4.5
+904.1 1.8
+910.1 2.2
+911.3 23.9
+912.2 8.3
+913.0 1.2
+914.3 2.5
+915.3 4.2
+917.4 3.2
+918.4 2.0
+919.5 4.7
+924.2 0.8
+925.0 2.6
+926.0 6.7
+926.7 2.9
+927.5 3.3
+928.3 8.3
+929.2 1.3
+930.2 1.3
+932.1 2.4
+933.4 0.9
+935.2 1.1
+937.3 1.5
+939.2 3.5
+940.5 2.2
+942.2 1.4
+944.4 3.4
+945.8 1.1
+952.2 2.1
+954.0 5.4
+956.0 18.1
+957.2 11.0
+960.0 2.1
+961.3 2.8
+963.4 1.9
+967.2 1.2
+968.2 1.5
+970.5 1.3
+972.3 2.2
+973.2 1.6
+974.3 23.8
+975.0 5.7
+975.6 5.5
+978.1 0.9
+980.7 1.3
+982.1 7.3
+984.3 1.3
+985.2 0.7
+987.0 1.0
+988.2 0.6
+991.7 0.7
+1002.3 2.9
+1003.4 1.3
+1004.5 0.9
+1007.4 2.0
+1010.4 3.2
+1012.6 1.7
+1013.4 1.6
+1014.2 1.1
+1016.8 1.3
+1020.4 3.9
+1021.3 1.3
+1023.9 1.9
+1026.4 8.5
+1027.2 9.4
+1028.2 6.7
+1029.3 1.9
+1030.1 0.9
+1032.4 4.1
+1034.3 1.2
+1039.9 1.0
+1042.1 4.8
+1044.1 2.6
+1045.2 3.5
+1046.2 0.5
+1050.5 1.0
+1051.5 1.3
+1052.7 2.5
+1053.5 0.9
+1054.1 2.7
+1056.2 2.7
+1057.4 1.9
+1058.4 1.7
+1060.5 0.8
+1067.3 1.6
+1068.9 0.8
+1070.1 2.4
+1071.2 2.8
+1072.5 11.6
+1073.4 9.9
+1074.3 9.0
+1075.3 2.7
+1078.4 0.9
+1084.3 1.3
+1085.1 2.6
+1086.4 0.8
+1089.4 2.6
+1090.3 1.5
+1092.3 0.8
+1109.5 0.6
+1110.4 1.3
+1111.2 1.2
+1117.4 1.0
+1127.4 0.8
+1128.0 1.3
+1129.2 1.6
+1131.9 1.9
+1134.2 0.7
+1137.3 1.0
+1138.0 3.3
+1139.2 2.9
+1141.8 2.6
+1144.4 1.1
+1155.2 20.9
+1156.2 19.9
+1157.2 11.7
+1158.3 4.5
+1163.4 1.2
+1173.1 1.4
+1174.7 1.3
+1175.3 2.8
+1181.3 1.2
+1190.4 1.1
+1230.3 1.7
+1243.1 0.9
+1301.2 0.7
+S	70	70	691.95
+Z	2	1382.89
+196.3 7.0
+197.2 70.1
+199.1 29.3
+200.6 12.1
+201.3 6.7
+202.3 10.7
+213.2 7.9
+215.1 6.1
+217.1 46.5
+221.1 8.4
+224.3 23.5
+226.5 99.2
+227.4 28.7
+228.2 25.0
+230.3 36.9
+231.2 71.0
+242.1 58.0
+243.0 12.5
+244.4 161.6
+245.2 15.7
+247.1 52.8
+249.3 13.1
+255.2 18.5
+257.0 41.5
+258.5 33.8
+260.2 35.9
+262.1 477.0
+263.2 116.3
+264.1 57.4
+266.3 49.7
+267.1 18.2
+268.4 8.2
+269.0 20.2
+270.1 14.3
+271.2 49.7
+271.9 9.5
+274.3 59.2
+275.1 40.9
+277.2 26.7
+280.3 30.7
+282.6 29.7
+288.3 21.9
+289.4 24.1
+295.2 76.1
+296.7 20.1
+298.1 34.2
+299.4 11.9
+301.5 38.7
+302.4 63.9
+303.4 90.8
+306.3 18.9
+308.2 50.2
+310.3 34.8
+312.2 14.8
+313.3 29.4
+315.5 55.4
+316.3 14.9
+317.3 28.7
+318.2 38.1
+319.1 12.1
+320.2 91.5
+321.4 12.1
+322.1 47.6
+325.1 8.3
+329.3 161.0
+330.4 70.0
+333.4 35.6
+335.3 110.3
+336.5 23.0
+339.5 44.4
+340.2 23.8
+343.1 16.3
+344.1 7.8
+346.4 84.7
+353.0 76.5
+354.5 25.2
+355.5 10.1
+357.3 58.5
+359.5 26.5
+362.4 5.9
+363.6 23.3
+364.5 49.8
+366.3 12.8
+367.6 12.6
+371.2 270.5
+371.8 11.9
+372.4 282.5
+373.4 183.1
+374.3 37.9
+375.5 15.1
+376.5 5.9
+378.2 9.9
+381.3 23.1
+383.2 61.7
+385.1 33.8
+388.1 42.4
+389.3 252.1
+390.3 715.1
+391.3 71.3
+392.4 14.2
+393.4 16.4
+395.5 23.3
+396.5 42.0
+398.2 11.1
+399.0 6.7
+400.5 6.7
+401.3 30.2
+402.2 41.6
+403.4 210.4
+404.4 88.1
+405.2 28.6
+406.5 17.4
+408.4 48.8
+411.3 42.9
+412.3 35.5
+414.3 14.5
+415.0 27.4
+417.4 25.6
+422.6 7.6
+424.3 7.6
+425.3 59.4
+426.4 38.2
+429.3 48.9
+430.7 120.3
+431.5 33.1
+432.4 24.9
+433.2 125.8
+435.7 11.1
+437.6 27.2
+438.3 81.5
+439.3 23.8
+441.4 14.9
+443.5 101.6
+444.3 66.2
+445.2 9.2
+446.5 23.5
+447.5 19.6
+449.3 33.6
+450.7 28.6
+452.9 22.3
+454.6 82.9
+455.2 6.1
+456.4 90.2
+457.2 46.8
+458.5 12.3
+459.3 11.9
+460.0 19.5
+461.3 2786.5
+462.4 405.5
+463.6 103.3
+464.2 34.7
+467.4 14.8
+468.3 6.9
+470.4 18.8
+471.4 59.9
+472.5 29.3
+473.2 32.3
+474.4 31.8
+475.1 20.4
+476.5 85.5
+477.4 23.5
+478.3 50.3
+478.9 119.3
+479.5 43.3
+480.2 39.8
+482.6 76.6
+483.3 19.6
+485.5 19.3
+486.8 23.7
+487.4 34.4
+489.6 32.9
+490.7 42.3
+491.3 30.3
+494.0 57.8
+495.3 38.2
+497.5 49.0
+499.1 17.8
+500.0 99.8
+501.3 116.7
+502.2 39.9
+503.5 9.6
+504.7 16.6
+507.5 13.3
+508.6 89.0
+510.6 118.1
+512.0 34.7
+513.4 18.0
+514.2 13.3
+515.5 24.7
+516.3 11.2
+517.3 101.7
+518.3 417.1
+519.4 133.7
+520.2 32.1
+520.8 30.1
+522.8 78.7
+524.3 28.1
+525.5 23.9
+526.6 7.5
+527.7 52.0
+529.4 12.3
+530.6 294.3
+531.3 325.8
+533.6 26.8
+534.8 52.3
+536.4 204.5
+537.1 24.1
+538.3 13.7
+539.6 37.5
+540.7 36.2
+542.2 108.7
+544.3 106.5
+545.7 45.5
+546.4 21.8
+547.2 54.1
+548.2 139.4
+550.6 51.5
+556.4 31.0
+558.4 35.9
+559.3 182.0
+560.1 42.5
+563.2 148.1
+564.0 85.2
+565.4 9.4
+566.2 99.2
+567.1 21.1
+569.0 54.7
+570.8 124.5
+573.6 133.0
+574.4 908.8
+575.4 436.7
+576.4 79.1
+577.2 33.8
+578.1 124.9
+581.7 81.5
+582.4 73.7
+583.2 74.7
+584.4 34.0
+586.5 89.8
+587.3 76.6
+589.0 206.1
+591.3 173.3
+592.1 122.7
+593.1 402.0
+594.3 19.8
+596.7 634.7
+597.6 958.4
+599.2 329.1
+600.2 14.9
+601.3 35.4
+602.2 28.7
+603.8 54.1
+605.1 29.3
+606.1 1841.7
+607.0 104.1
+607.6 16.3
+608.6 46.8
+610.5 182.1
+611.6 297.8
+612.6 32.1
+615.3 176.8
+617.2 22.0
+619.2 342.3
+620.3 502.0
+621.4 32.8
+622.1 34.9
+624.1 91.7
+624.8 203.4
+626.8 105.1
+627.7 20.4
+628.4 62.9
+629.8 33.8
+632.8 453.9
+633.7 220.8
+634.4 255.6
+635.7 162.4
+636.6 55.9
+638.1 97.8
+638.9 29.1
+639.8 47.1
+640.6 72.0
+641.7 230.3
+642.4 58.6
+643.7 41.7
+644.5 113.1
+645.4 437.2
+646.4 236.8
+648.0 55.2
+649.2 105.1
+651.3 498.7
+652.3 72.0
+652.9 43.9
+653.9 29.9
+654.5 87.8
+655.2 73.5
+656.3 109.5
+657.4 100.7
+658.5 73.0
+659.4 93.7
+660.7 195.0
+661.6 41.3
+663.3 47.6
+664.8 188.4
+665.9 215.2
+666.6 13.2
+667.5 52.6
+668.3 181.6
+669.3 38.8
+670.3 125.0
+672.0 256.4
+672.8 424.8
+673.8 953.9
+674.5 762.7
+675.4 216.6
+676.4 349.0
+677.8 194.1
+679.2 56.4
+680.2 44.1
+681.7 1565.9
+683.1 4067.1
+684.3 324.7
+685.9 9.9
+686.9 43.1
+695.1 31.5
+697.3 27.7
+698.2 9.8
+700.5 51.0
+702.3 240.1
+703.4 22.7
+705.4 83.4
+707.2 48.5
+708.3 12.8
+710.6 28.5
+711.5 26.9
+715.9 34.3
+717.0 29.9
+718.1 27.8
+719.3 37.1
+720.7 83.4
+721.4 10.5
+723.7 35.8
+728.3 10.7
+732.4 828.5
+733.3 214.3
+734.3 90.4
+735.0 23.0
+737.4 47.2
+738.3 146.5
+739.4 65.3
+740.5 49.8
+742.5 13.5
+744.8 93.4
+745.6 7.7
+746.7 34.5
+748.5 220.4
+750.3 232.7
+751.5 103.2
+752.5 116.6
+755.2 21.4
+756.4 18.7
+758.6 22.2
+759.4 10.7
+760.9 50.3
+762.6 77.0
+764.4 12.6
+770.7 60.2
+772.8 68.2
+773.5 232.1
+774.5 244.8
+778.4 238.9
+779.0 81.8
+779.6 23.9
+780.6 18.4
+783.3 14.3
+785.7 43.1
+788.0 46.9
+789.3 60.8
+790.6 118.8
+791.4 448.6
+792.5 72.3
+793.4 112.7
+794.5 26.4
+796.8 116.0
+797.9 94.7
+799.3 47.2
+800.5 52.3
+803.5 54.5
+804.5 45.0
+807.1 56.1
+807.7 23.5
+809.5 554.7
+810.5 111.3
+813.6 9.9
+815.4 38.6
+817.6 32.8
+818.9 17.1
+819.6 38.8
+820.8 79.8
+821.5 170.1
+822.2 66.3
+823.7 57.0
+825.2 33.8
+829.6 81.0
+830.5 8.6
+832.0 58.6
+833.5 83.2
+836.1 66.6
+840.5 29.8
+842.2 12.6
+843.5 22.2
+847.4 1383.5
+848.6 741.7
+849.7 44.4
+850.6 40.9
+851.5 56.1
+852.3 87.1
+853.4 24.8
+854.7 76.1
+856.3 11.7
+861.6 77.2
+862.7 24.1
+864.8 74.6
+865.6 17.5
+866.2 30.1
+867.5 43.4
+871.8 24.1
+872.4 15.1
+873.4 22.1
+874.5 105.2
+877.5 57.7
+878.7 10.7
+883.5 22.3
+886.5 170.7
+887.5 70.6
+888.5 44.0
+889.8 52.2
+890.4 18.7
+893.0 10.1
+893.7 43.5
+894.6 72.8
+895.6 43.7
+896.4 18.6
+900.4 21.6
+904.4 722.6
+905.4 351.6
+906.7 59.1
+907.7 59.8
+910.6 63.4
+912.3 10.7
+914.1 27.0
+915.7 18.7
+920.4 19.0
+921.1 110.9
+922.3 892.3
+923.4 476.8
+924.2 99.9
+925.5 356.1
+926.8 126.9
+927.7 103.7
+930.5 84.8
+931.9 67.1
+933.6 155.4
+934.8 34.0
+936.0 74.6
+938.1 59.6
+939.6 63.3
+940.7 65.9
+941.5 20.7
+942.9 85.7
+945.1 40.8
+945.8 8.3
+946.9 56.6
+947.6 40.9
+948.6 47.7
+949.5 59.3
+950.6 189.3
+954.3 33.5
+956.3 39.1
+957.3 48.8
+958.2 18.1
+958.8 18.0
+960.4 32.7
+961.5 55.2
+962.4 8.3
+964.6 85.2
+965.6 78.3
+966.5 32.0
+967.9 11.5
+970.4 64.5
+972.1 25.3
+975.6 287.7
+976.6 433.0
+977.9 34.8
+978.6 134.5
+985.6 50.7
+988.1 10.7
+990.3 19.0
+993.4 424.2
+994.5 1726.0
+995.5 853.9
+996.6 563.2
+997.6 252.7
+998.8 74.1
+1003.9 37.4
+1006.7 27.1
+1007.7 23.7
+1008.6 48.4
+1009.7 45.3
+1012.5 56.5
+1019.0 30.1
+1021.9 56.2
+1023.6 31.5
+1024.6 13.1
+1027.9 38.9
+1029.5 6.8
+1031.5 21.0
+1033.5 23.7
+1034.5 14.3
+1042.6 14.9
+1043.5 22.4
+1045.0 123.3
+1045.7 116.1
+1049.5 52.4
+1050.7 53.4
+1051.7 198.6
+1052.5 120.4
+1060.3 247.1
+1061.6 73.6
+1062.5 36.6
+1063.6 9.1
+1066.2 25.2
+1068.6 70.8
+1070.9 26.9
+1071.7 16.5
+1072.6 53.4
+1078.7 69.0
+1079.6 11.8
+1080.8 20.5
+1082.8 87.7
+1084.8 22.2
+1086.4 47.1
+1091.8 12.2
+1093.3 20.7
+1095.4 40.7
+1096.5 7.6
+1100.8 21.1
+1101.7 15.1
+1103.6 160.5
+1104.5 312.3
+1105.4 8.1
+1106.6 18.0
+1108.6 55.0
+1109.7 9.9
+1115.7 33.7
+1121.5 674.8
+1122.6 230.0
+1123.6 577.8
+1124.6 347.7
+1125.5 32.0
+1131.6 48.5
+1132.3 29.5
+1134.8 19.7
+1137.1 22.8
+1138.4 24.7
+1142.2 6.0
+1148.7 8.4
+1151.8 14.1
+1152.6 65.0
+1157.5 14.0
+1160.7 16.8
+1162.5 17.2
+1165.2 30.7
+1165.8 11.0
+1167.8 15.6
+1172.5 27.1
+1177.0 31.6
+1178.3 138.2
+1179.6 66.7
+1181.2 11.9
+1193.0 135.8
+1193.7 36.2
+1195.0 21.3
+1197.6 51.3
+1198.3 16.0
+1200.6 36.8
+1205.1 6.9
+1206.6 39.7
+1210.7 961.5
+1211.6 487.6
+1212.5 130.7
+1213.8 59.7
+1215.6 19.8
+1217.1 80.0
+1218.7 146.3
+1219.6 33.6
+1225.3 17.6
+1233.7 48.9
+1234.9 151.4
+1235.9 68.6
+1236.9 235.5
+1237.7 9.6
+1251.8 12.6
+1252.9 71.9
+1280.7 38.1
+1307.5 24.8
+1332.7 18.7
+1376.9 35.9
+1383.0 27.6
+S	71	71	488.76
+I	ID	75
+I	RTime	3.4794
+Z	2	976.51
+143.0 1.5
+147.2 2.0
+151.2 1.3
+156.2 1.0
+157.3 1.6
+158.1 1.2
+161.2 2.0
+163.1 2.5
+166.9 1.7
+171.1 13.0
+175.2 10.3
+176.2 5.0
+180.0 0.8
+181.4 1.7
+183.0 1.6
+184.8 4.1
+189.2 5.5
+192.1 4.3
+198.1 4.9
+198.9 5.8
+201.2 2.5
+207.3 4.0
+211.1 1.8
+213.4 1.6
+216.1 36.4
+217.2 14.3
+223.7 3.7
+228.4 1.5
+239.3 2.0
+240.3 2.2
+245.2 3.4
+247.3 1.5
+252.3 3.9
+253.2 4.6
+254.3 5.3
+255.1 1.0
+258.7 4.9
+265.1 3.0
+267.2 2.9
+268.6 4.5
+269.3 15.0
+270.2 1.5
+271.3 1.8
+272.3 4.9
+275.3 1.2
+277.2 1.5
+278.1 1.1
+280.2 2.2
+283.0 6.1
+286.1 1.0
+287.3 14.6
+288.4 2.7
+300.3 1.2
+301.6 1.2
+303.3 9.0
+310.0 2.2
+311.2 4.5
+312.0 1.2
+313.3 0.6
+314.3 4.3
+317.4 1.3
+319.2 1.8
+320.3 3.2
+325.1 5.8
+326.1 3.4
+326.9 1.0
+328.2 2.5
+329.1 6.1
+330.9 5.9
+333.2 3.0
+335.3 0.8
+337.2 2.0
+341.2 5.5
+342.3 1.6
+343.6 7.8
+345.4 12.3
+348.0 7.0
+352.4 2.2
+357.8 8.1
+358.9 9.0
+361.0 25.2
+362.1 1.3
+363.9 5.0
+369.1 2.5
+370.4 2.2
+371.5 1.2
+373.5 5.4
+375.4 8.8
+376.0 2.4
+381.1 10.3
+382.5 0.8
+384.3 3.5
+386.2 3.0
+391.1 2.5
+392.1 1.5
+395.5 10.3
+396.7 3.4
+397.6 10.5
+398.2 5.9
+399.3 11.3
+400.2 29.5
+401.1 71.0
+401.9 7.5
+402.8 10.0
+403.5 2.7
+404.3 13.3
+405.3 8.3
+406.5 0.8
+407.4 9.1
+408.5 23.5
+412.4 4.1
+413.6 14.5
+415.3 4.5
+416.3 22.5
+418.0 40.5
+419.1 9.5
+420.7 9.1
+422.1 13.3
+422.8 6.3
+424.6 7.0
+425.2 4.9
+427.5 3.0
+428.2 6.0
+429.1 19.6
+430.6 31.2
+431.9 19.8
+432.8 3.2
+435.0 9.3
+435.8 6.8
+436.4 30.6
+437.4 6.8
+439.9 5.0
+441.3 4.9
+442.2 20.2
+443.4 4.0
+444.4 4.9
+445.7 17.3
+446.5 8.8
+448.3 5.0
+449.5 11.3
+450.7 13.6
+452.0 5.3
+453.6 6.5
+454.4 7.0
+455.4 14.8
+456.5 5.6
+457.2 3.0
+458.7 10.6
+459.6 13.8
+462.1 16.7
+462.9 3.7
+464.0 7.0
+465.3 13.6
+466.2 9.1
+467.3 1.7
+469.2 2.2
+470.6 57.9
+471.3 53.7
+472.2 53.5
+473.0 13.0
+473.7 3.7
+475.0 5.4
+477.2 14.0
+479.1 122.6
+479.9 145.3
+480.7 0.8
+485.9 2.4
+487.8 5.9
+497.4 1.3
+498.5 3.7
+502.7 3.7
+506.8 5.3
+508.3 10.3
+513.2 1.5
+516.2 3.0
+517.1 1.7
+519.8 1.2
+523.3 1.3
+529.3 2.5
+530.1 11.3
+531.7 2.5
+537.4 3.0
+541.2 3.0
+542.4 3.7
+543.3 2.2
+544.9 2.7
+547.3 25.1
+548.1 7.9
+553.6 4.5
+554.2 3.0
+555.1 9.8
+555.7 6.3
+557.1 32.9
+558.3 3.4
+559.2 17.1
+561.3 31.7
+562.5 9.6
+565.7 7.0
+571.2 13.0
+571.9 18.2
+573.3 7.3
+574.2 1.6
+577.1 3.0
+578.5 5.9
+588.4 1.3
+589.9 9.3
+594.0 5.5
+596.3 3.7
+598.5 2.7
+599.7 7.6
+600.9 1.5
+603.4 1.5
+607.4 3.0
+608.8 12.0
+611.8 3.5
+614.9 13.1
+616.3 6.9
+619.8 12.3
+620.8 1.3
+624.7 7.1
+630.2 11.3
+632.5 17.0
+634.0 3.0
+639.9 5.0
+646.4 4.9
+649.3 3.2
+650.4 5.6
+651.5 3.5
+652.5 14.8
+654.5 5.4
+656.4 11.1
+658.3 3.0
+660.1 6.8
+664.7 2.0
+669.5 2.0
+673.1 6.5
+674.3 8.6
+676.5 1.3
+677.2 3.5
+681.3 4.0
+684.5 4.1
+685.2 1.1
+690.4 110.5
+691.5 27.0
+692.3 2.0
+699.1 2.7
+700.5 5.4
+701.2 6.8
+705.3 5.6
+709.4 1.7
+713.4 2.0
+719.2 0.6
+730.4 5.0
+731.2 1.5
+732.3 4.5
+733.6 0.8
+735.3 2.5
+741.4 1.2
+743.5 4.3
+744.5 4.6
+747.4 2.4
+748.2 5.0
+761.3 281.2
+762.4 123.0
+774.6 2.5
+775.7 1.3
+784.1 5.5
+785.3 1.8
+787.5 2.7
+788.4 3.7
+800.7 5.5
+802.4 4.8
+820.4 1.3
+830.6 3.9
+831.4 1.5
+844.4 4.3
+847.3 3.9
+848.4 9.5
+859.5 2.0
+900.3 1.1
+901.5 7.5
+915.3 2.0
+S	72	72	651.63
+Z	2	1302.25
+183.1 9.4
+185.2 68.4
+186.1 6.5
+187.2 16.6
+191.3 4.6
+194.0 11.9
+195.1 26.4
+197.3 26.5
+198.2 22.6
+199.4 10.0
+200.1 38.0
+201.4 32.9
+202.3 17.6
+203.5 4.8
+205.2 12.1
+205.9 8.6
+208.1 23.0
+209.6 19.8
+211.3 3.9
+212.2 30.3
+213.1 224.2
+214.4 64.0
+215.3 87.0
+215.9 10.9
+217.3 26.4
+218.1 19.1
+219.2 39.5
+223.5 32.6
+225.4 27.7
+226.3 61.1
+227.3 84.1
+229.1 189.9
+230.2 29.4
+231.3 45.0
+235.4 55.9
+236.3 19.5
+237.6 51.7
+239.2 62.4
+240.4 53.5
+241.3 16.5
+242.3 22.5
+243.3 20.0
+244.4 13.6
+245.2 16.1
+246.3 22.1
+248.5 8.3
+251.3 27.7
+252.2 20.6
+253.2 21.5
+254.3 27.5
+256.3 35.3
+257.4 98.1
+258.3 108.5
+259.2 11.1
+260.3 57.2
+261.4 33.8
+262.2 12.6
+265.0 30.7
+265.7 6.3
+266.4 65.2
+267.4 6.5
+269.3 34.4
+270.3 25.1
+271.1 5.4
+272.4 49.6
+273.4 31.8
+274.4 46.6
+275.3 105.8
+278.4 16.0
+279.3 22.4
+281.3 13.7
+282.2 32.0
+283.2 16.0
+284.4 13.7
+285.2 11.5
+286.0 15.2
+289.0 12.3
+290.1 17.6
+292.2 15.0
+294.4 21.9
+295.8 49.7
+296.5 7.4
+297.3 11.7
+298.8 42.0
+299.5 12.8
+302.5 17.9
+303.4 95.3
+304.3 66.0
+305.1 15.3
+308.4 14.1
+309.6 9.9
+310.5 23.5
+312.2 5.1
+313.0 8.0
+314.2 40.5
+315.3 6.9
+319.3 9.7
+320.2 13.1
+321.2 23.2
+322.4 31.8
+323.4 32.8
+325.2 18.9
+326.3 69.8
+327.2 447.5
+328.3 241.5
+329.8 29.6
+330.4 35.1
+331.3 28.5
+332.0 17.2
+334.0 3.9
+336.4 8.5
+337.9 26.3
+339.2 12.8
+340.3 30.9
+341.2 64.5
+342.0 9.0
+343.1 14.1
+344.3 60.1
+345.3 62.8
+346.4 531.8
+347.2 25.2
+348.5 28.7
+349.4 31.5
+352.2 8.0
+353.5 12.5
+355.1 32.2
+356.1 25.6
+357.5 94.5
+358.3 144.8
+359.4 77.1
+360.5 9.4
+361.5 15.5
+362.4 7.6
+363.1 29.3
+369.5 5.1
+370.5 5.6
+371.3 50.9
+372.6 15.1
+373.4 15.7
+374.3 215.3
+375.5 223.6
+376.5 81.3
+377.5 26.1
+379.4 39.5
+381.3 7.4
+382.5 16.1
+383.3 61.0
+384.2 40.5
+385.3 51.9
+387.9 19.2
+388.7 25.0
+390.4 16.0
+391.3 6.9
+393.3 36.4
+394.5 9.3
+395.4 72.7
+396.6 21.1
+397.5 5.0
+398.3 9.5
+399.2 9.5
+400.3 6.2
+401.0 4.9
+402.5 26.8
+404.4 30.4
+405.4 65.5
+406.4 32.9
+407.4 212.0
+408.4 37.6
+409.4 15.6
+410.3 8.1
+411.5 65.9
+412.5 37.6
+413.4 27.6
+414.7 43.7
+415.4 59.9
+416.6 21.1
+417.2 34.3
+419.3 14.1
+421.4 62.5
+422.6 16.1
+423.4 45.3
+424.2 27.9
+425.4 497.0
+426.4 75.8
+428.2 53.4
+429.3 53.0
+433.3 15.2
+434.7 9.4
+435.4 20.8
+436.1 19.2
+437.3 21.5
+438.6 120.4
+439.5 75.0
+441.6 44.1
+442.4 90.4
+443.4 289.9
+444.3 30.1
+445.5 434.3
+447.4 33.9
+448.3 18.9
+450.4 10.0
+452.3 129.6
+453.1 60.2
+455.1 48.2
+457.3 96.7
+459.3 169.0
+460.3 20.8
+462.4 7.0
+463.5 15.4
+466.7 6.3
+467.8 20.9
+469.5 47.9
+470.4 211.2
+471.3 111.4
+472.7 39.3
+473.4 118.8
+474.3 4.1
+475.5 17.6
+476.2 3.1
+480.5 27.9
+481.5 29.9
+482.4 15.5
+483.6 33.7
+484.7 46.3
+485.5 103.7
+486.8 825.2
+487.4 271.4
+488.1 82.4
+489.5 91.4
+491.3 29.2
+491.9 6.5
+492.5 26.8
+493.5 6.4
+494.5 12.0
+496.2 7.1
+498.5 37.8
+499.3 9.0
+500.3 20.4
+500.9 80.1
+502.0 26.4
+503.6 82.8
+504.4 101.1
+505.4 190.2
+506.1 14.5
+507.2 18.2
+507.9 21.8
+509.4 28.7
+510.2 37.5
+511.6 66.1
+512.7 37.9
+514.2 10.0
+515.7 54.3
+516.9 46.4
+519.5 34.7
+520.4 35.1
+521.5 81.1
+522.5 77.9
+523.3 12.0
+524.9 81.1
+525.6 30.8
+526.5 44.7
+527.2 69.8
+528.5 51.1
+530.3 10.4
+531.4 70.4
+532.4 18.7
+533.6 63.1
+535.1 340.0
+536.3 274.3
+537.5 556.9
+538.7 138.9
+539.8 90.1
+541.7 20.2
+542.4 31.2
+544.1 3373.8
+545.0 199.8
+545.9 110.7
+546.7 22.9
+547.5 7.6
+548.6 23.3
+549.5 22.2
+550.2 66.6
+551.5 105.4
+552.4 145.1
+553.5 69.4
+554.3 140.6
+555.4 12.1
+556.7 89.9
+557.4 9.5
+558.5 416.8
+559.5 292.5
+560.4 576.2
+561.4 60.9
+562.4 69.3
+563.8 36.3
+564.8 94.2
+565.8 49.1
+566.5 82.5
+567.4 45.1
+568.4 107.1
+569.8 64.9
+570.7 85.8
+571.7 47.7
+572.4 551.4
+573.3 101.0
+574.1 9.0
+574.8 16.8
+576.3 362.3
+577.5 327.5
+578.5 79.2
+579.4 78.0
+580.4 17.0
+581.1 11.2
+582.6 64.5
+583.5 45.9
+584.4 48.7
+585.0 64.9
+585.7 84.2
+586.5 64.0
+587.4 29.6
+588.3 13.3
+589.2 6.3
+590.0 3.4
+591.4 107.1
+592.8 173.8
+593.5 116.9
+594.1 61.4
+595.9 31.2
+596.7 61.8
+597.4 12.5
+598.1 16.5
+599.6 38.5
+600.6 244.8
+602.7 76.3
+603.7 32.2
+605.4 179.6
+606.3 70.6
+607.4 71.1
+608.1 22.9
+609.3 48.2
+610.1 38.1
+610.7 26.5
+611.7 95.0
+612.3 48.3
+614.0 42.2
+614.8 141.5
+615.7 56.1
+617.4 2988.4
+618.5 422.3
+619.5 105.3
+620.4 67.9
+621.7 33.6
+622.7 53.6
+623.4 48.4
+624.1 68.7
+624.7 47.9
+625.9 44.4
+628.2 169.4
+629.3 114.7
+630.5 99.3
+631.8 42.0
+632.4 339.1
+633.5 1698.6
+634.5 509.7
+635.6 564.4
+636.6 181.1
+637.5 21.0
+638.6 108.4
+639.7 123.4
+641.2 1837.2
+642.3 1578.2
+643.2 538.0
+645.1 8.5
+645.9 31.9
+647.6 37.8
+651.4 20.8
+654.4 10.6
+655.8 6.3
+657.1 38.9
+657.7 18.0
+658.5 34.3
+659.5 17.7
+660.7 4.4
+662.4 17.8
+663.6 28.4
+665.8 8.1
+667.3 296.0
+668.5 91.6
+669.2 16.7
+670.3 17.7
+673.5 6.7
+675.2 50.2
+676.3 34.8
+679.7 11.4
+680.4 7.2
+681.2 25.3
+682.2 10.8
+684.4 34.7
+685.5 1191.9
+686.5 271.8
+687.6 24.9
+688.4 12.1
+689.5 15.9
+692.4 6.1
+695.8 23.2
+696.5 13.3
+697.5 27.7
+701.1 20.2
+702.3 44.7
+703.3 11.5
+705.3 29.8
+706.6 71.4
+707.6 18.6
+710.6 5.8
+711.6 23.1
+712.5 26.8
+713.6 29.9
+715.1 12.6
+716.6 32.9
+717.9 23.3
+718.6 86.2
+719.6 41.9
+720.6 16.3
+721.9 55.7
+722.6 273.1
+723.5 386.7
+724.5 158.4
+725.5 35.7
+726.5 16.0
+727.2 13.7
+728.6 53.9
+730.6 1228.3
+731.6 182.1
+732.5 47.8
+735.7 26.2
+738.5 23.5
+740.1 67.2
+742.4 362.3
+743.8 39.2
+746.5 83.3
+747.6 95.7
+749.0 20.6
+749.7 67.9
+750.8 32.6
+752.7 16.2
+753.5 14.1
+756.5 13.8
+758.4 12.1
+759.5 24.8
+763.3 18.3
+765.6 39.6
+768.0 14.5
+769.3 28.1
+770.7 44.1
+771.6 17.7
+772.5 18.2
+775.4 15.5
+776.6 9.9
+777.6 52.2
+781.2 51.1
+782.7 7.8
+784.4 21.7
+787.7 5.3
+788.7 6.0
+789.5 6.8
+791.2 60.8
+793.5 14.6
+794.4 29.8
+796.5 80.9
+797.5 45.1
+798.7 507.3
+799.6 50.2
+800.7 45.8
+802.0 9.6
+803.7 45.4
+804.5 7.0
+806.1 20.9
+809.2 30.3
+810.7 12.3
+811.6 41.7
+812.6 15.4
+813.5 24.3
+814.2 8.0
+817.4 70.3
+819.8 19.0
+821.5 25.8
+822.4 8.1
+823.8 12.2
+825.6 10.8
+826.7 11.2
+827.5 12.7
+828.8 14.8
+829.5 21.7
+831.6 28.2
+835.5 17.0
+838.4 20.8
+839.6 165.1
+840.8 70.6
+841.8 87.5
+842.6 47.6
+843.6 16.8
+844.4 21.2
+845.7 21.2
+846.9 17.4
+847.7 12.2
+849.3 20.2
+852.9 8.6
+853.8 43.3
+854.8 106.5
+855.6 3.0
+856.6 71.1
+857.6 267.4
+859.1 169.6
+859.7 549.8
+860.7 136.4
+861.5 14.2
+864.7 6.9
+867.7 51.0
+869.7 36.6
+871.7 11.5
+874.6 49.8
+875.8 76.7
+877.0 14.7
+878.3 46.1
+880.5 40.3
+881.3 23.0
+885.5 12.4
+889.3 6.8
+892.7 41.9
+893.7 52.3
+895.2 50.1
+896.1 34.5
+896.8 68.0
+897.9 48.8
+898.6 57.5
+900.3 32.5
+901.9 36.5
+902.7 34.1
+904.1 14.2
+904.7 22.6
+905.6 21.1
+907.2 71.3
+908.1 30.4
+908.7 37.7
+909.6 52.6
+910.2 16.8
+911.6 54.0
+912.7 31.1
+914.2 72.2
+914.9 12.2
+915.5 38.7
+916.7 34.1
+917.8 49.8
+918.5 29.2
+919.5 9.6
+920.7 53.8
+922.6 30.0
+923.8 66.2
+924.6 55.2
+925.7 144.3
+926.7 53.8
+927.7 114.3
+928.5 51.6
+929.7 45.6
+935.7 56.2
+938.4 219.7
+939.4 97.2
+940.0 28.8
+940.8 35.4
+941.9 45.3
+942.7 63.4
+943.6 18.8
+944.9 21.1
+945.6 10.2
+947.0 49.1
+947.9 5.5
+952.4 17.7
+953.9 18.5
+954.7 45.0
+955.9 214.9
+956.6 826.5
+957.5 203.0
+958.5 11.2
+960.8 80.2
+961.6 5.1
+964.5 9.0
+968.7 44.6
+970.1 50.3
+971.7 477.9
+972.8 2485.8
+973.8 1187.4
+974.7 924.9
+975.8 282.8
+977.6 14.8
+978.8 32.0
+979.8 10.0
+980.9 30.0
+981.7 12.2
+983.8 18.5
+984.4 14.6
+985.5 17.0
+987.5 4.9
+988.4 14.4
+991.7 21.4
+993.6 19.2
+996.0 58.6
+996.9 49.7
+997.7 52.0
+998.7 81.5
+1001.1 16.1
+1002.0 53.6
+1005.7 22.0
+1006.8 11.0
+1008.5 17.1
+1009.7 92.1
+1010.6 37.0
+1011.4 12.2
+1012.5 33.1
+1013.6 46.2
+1014.9 4.7
+1016.4 22.8
+1018.7 15.6
+1020.9 11.4
+1021.5 11.4
+1022.5 42.4
+1023.8 5.6
+1025.9 19.8
+1027.5 552.3
+1028.6 122.7
+1030.6 9.7
+1031.7 64.2
+1033.8 15.1
+1034.8 11.1
+1036.0 6.7
+1036.7 22.5
+1037.7 42.9
+1039.7 19.7
+1040.8 47.3
+1041.6 27.7
+1042.7 11.8
+1043.9 5.6
+1045.0 41.3
+1047.5 21.0
+1048.7 9.3
+1049.5 30.0
+1050.8 60.8
+1052.7 49.6
+1053.3 18.3
+1055.5 13.9
+1056.4 43.8
+1062.2 57.8
+1064.1 60.0
+1064.7 7.9
+1065.6 23.2
+1066.5 7.8
+1069.7 249.9
+1070.8 200.1
+1071.7 146.5
+1073.7 497.2
+1074.7 147.7
+1075.9 41.3
+1079.4 7.0
+1081.5 7.1
+1082.7 11.5
+1085.1 108.8
+1085.7 164.7
+1086.7 866.4
+1087.7 477.4
+1088.9 137.7
+1089.8 72.5
+1090.7 12.8
+1091.5 32.9
+1096.5 9.1
+1097.8 5.4
+1102.0 83.7
+1104.5 15.1
+1106.8 7.9
+1107.8 33.7
+1108.7 18.2
+1111.0 5.7
+1111.8 36.1
+1119.7 24.3
+1123.6 20.7
+1124.7 169.4
+1125.6 17.6
+1127.0 24.9
+1127.6 30.4
+1129.1 44.2
+1129.8 111.0
+1130.4 13.5
+1134.8 14.8
+1135.7 18.0
+1137.6 134.7
+1138.4 23.3
+1139.1 26.8
+1139.8 59.7
+1140.9 105.7
+1141.9 22.1
+1143.5 6.7
+1147.5 79.8
+1152.7 22.8
+1155.6 868.9
+1156.7 145.7
+1157.9 24.0
+1166.6 8.6
+1170.8 21.2
+1172.5 16.8
+1173.8 50.5
+1174.9 34.4
+1185.5 14.8
+1186.7 30.2
+1188.9 68.7
+1198.9 24.5
+1201.7 13.8
+1210.0 76.4
+1210.9 100.0
+1211.6 15.1
+1212.2 12.2
+1212.9 16.1
+1240.6 27.5
+1253.9 11.7
+1261.1 31.2
+1263.6 16.2
+S	73	73	452.85
+I	ID	200
+I	RTime	9.8987
+Z	2	904.69
+Z	3	1356.53
+130.2 1.1
+144.2 1.2
+146.7 1.5
+155.0 1.7
+161.1 2.2
+169.0 1.5
+175.1 1.7
+176.2 4.0
+177.3 1.7
+183.6 10.3
+184.2 14.6
+185.2 6.0
+185.9 3.0
+189.1 1.2
+195.1 1.5
+198.2 2.2
+201.3 2.7
+203.1 1.3
+213.3 1.7
+216.3 1.3
+217.3 3.5
+218.5 1.7
+228.1 5.0
+229.9 2.2
+232.3 0.8
+234.7 9.1
+237.2 6.0
+239.0 1.0
+247.0 3.0
+248.2 1.7
+250.1 1.5
+252.0 2.5
+257.1 2.0
+267.2 3.2
+268.1 2.2
+275.3 1.8
+283.3 1.5
+288.4 1.7
+291.2 31.3
+292.0 5.6
+296.1 2.7
+302.3 5.3
+304.8 1.2
+305.9 1.2
+307.6 5.8
+308.9 2.9
+312.1 1.7
+313.0 2.7
+321.0 8.6
+324.3 5.6
+325.2 14.1
+328.8 5.0
+331.2 7.6
+338.2 52.0
+339.1 2.7
+341.1 1.1
+343.3 1.2
+344.0 5.3
+345.3 5.8
+356.5 1.3
+364.0 1.7
+370.2 1.3
+371.9 6.1
+378.5 12.6
+385.3 2.4
+388.3 2.0
+390.1 1.3
+393.3 2.4
+394.8 9.6
+396.7 4.0
+404.6 8.0
+409.3 9.1
+411.0 8.1
+412.0 1.7
+416.3 2.4
+417.8 11.1
+419.5 1.7
+421.0 6.4
+425.4 2.2
+427.7 6.0
+431.1 1.3
+433.1 6.4
+434.4 23.7
+435.3 68.0
+436.5 8.6
+442.0 9.6
+443.6 24.5
+444.5 2.7
+445.6 4.0
+473.5 1.7
+474.3 2.5
+476.1 0.8
+480.3 1.5
+497.0 1.0
+507.7 2.7
+513.5 1.5
+517.4 3.7
+518.3 1.2
+520.3 1.7
+524.3 1.2
+531.6 4.0
+541.2 4.5
+542.9 9.6
+549.0 3.7
+560.5 1.7
+573.1 2.7
+581.4 7.3
+585.4 3.2
+602.4 1.2
+614.5 4.1
+618.6 3.5
+643.6 5.0
+646.6 2.4
+648.3 2.0
+656.4 0.8
+661.7 2.9
+670.3 1.7
+678.4 28.7
+682.4 2.7
+688.6 1.5
+690.8 1.1
+695.5 1.2
+696.7 4.0
+704.4 2.4
+719.5 3.2
+729.5 2.4
+732.3 2.5
+735.4 8.1
+743.2 1.2
+757.4 4.5
+S	74	74	427.38
+I	ID	207
+I	RTime	10.2425
+Z	2	853.75
+129.0 8.5
+134.2 1.2
+136.1 7.3
+139.1 1.6
+143.0 1.2
+148.2 2.2
+155.0 1.2
+165.2 1.7
+169.4 8.1
+172.1 6.4
+175.2 0.8
+185.0 26.3
+203.2 8.1
+218.2 1.5
+228.2 2.5
+240.2 10.5
+246.1 2.4
+249.9 1.1
+255.3 4.5
+257.3 1.3
+266.5 4.5
+269.0 60.9
+270.4 1.7
+281.3 1.8
+283.0 2.7
+286.6 8.8
+287.3 17.5
+288.3 1.2
+296.9 2.5
+299.0 2.7
+300.3 9.1
+303.3 7.0
+308.8 5.1
+312.4 10.1
+315.1 12.8
+318.6 2.0
+319.9 9.0
+321.0 1.3
+323.2 1.5
+325.2 2.4
+326.1 3.7
+334.1 2.7
+346.9 5.5
+348.1 13.8
+349.8 27.5
+350.7 12.3
+353.5 4.0
+356.3 1.0
+362.7 147.3
+363.7 21.7
+366.2 5.0
+368.2 5.5
+369.2 5.3
+370.1 7.4
+377.4 1.8
+385.4 1.5
+391.2 5.5
+392.3 1.0
+394.1 11.5
+396.0 1.1
+397.2 4.0
+400.7 6.0
+409.7 20.2
+410.5 2.7
+411.2 3.2
+412.4 2.0
+418.2 46.0
+419.3 2.5
+483.4 1.7
+484.6 4.8
+503.5 1.6
+508.7 5.0
+512.4 4.5
+528.0 10.3
+529.1 2.7
+535.3 2.5
+550.3 8.1
+554.2 5.4
+568.4 4.3
+576.6 1.3
+585.3 7.8
+586.3 3.4
+607.8 10.1
+608.5 8.8
+609.4 6.1
+611.5 5.6
+635.4 8.1
+638.6 2.2
+643.4 1.5
+646.4 1.2
+667.3 16.0
+678.5 4.6
+689.2 2.9
+694.7 1.8
+698.4 56.7
+699.5 9.3
+700.3 1.7
+723.4 3.4
+724.6 1.6
+725.5 7.6
+830.6 1.7
+S	75	75	877.27
+Z	2	1753.53
+247.3 64.2
+254.2 12.3
+256.1 64.5
+274.1 187.1
+275.3 160.4
+276.2 283.9
+282.2 119.1
+283.3 247.5
+284.1 66.9
+288.5 9.9
+291.6 70.9
+292.8 74.5
+300.4 322.1
+301.2 15.8
+303.2 38.7
+306.3 60.9
+307.4 112.3
+310.4 42.6
+316.7 34.2
+320.0 19.0
+322.3 70.9
+323.3 66.0
+326.4 31.3
+327.4 293.3
+328.4 82.1
+331.6 44.3
+332.7 88.4
+337.1 45.8
+340.9 44.7
+343.2 38.8
+345.5 177.7
+346.3 163.5
+349.2 35.9
+354.4 35.7
+356.1 82.7
+357.2 171.8
+359.3 9.1
+361.3 20.9
+363.2 5224.2
+364.3 864.6
+365.5 67.9
+371.3 27.7
+373.4 64.7
+375.4 127.9
+376.3 21.2
+380.5 66.6
+381.5 21.4
+383.3 12.8
+386.4 157.0
+387.5 36.6
+388.5 20.9
+389.3 10.0
+390.4 151.0
+391.5 107.7
+393.5 22.1
+394.3 80.2
+397.0 40.9
+399.2 69.2
+401.0 98.2
+402.2 85.3
+403.3 40.0
+404.6 34.4
+406.3 106.1
+407.3 126.0
+408.4 89.4
+415.3 62.1
+417.6 27.7
+419.1 170.8
+420.2 27.5
+423.2 105.2
+424.3 39.6
+425.6 30.7
+430.6 74.4
+437.1 395.7
+438.7 32.2
+439.6 52.1
+440.2 447.7
+441.3 20.3
+443.6 7.6
+445.0 45.5
+446.3 14.5
+449.1 13.4
+451.1 13.3
+453.4 24.7
+455.2 61.5
+456.3 35.3
+457.4 36.2
+458.3 509.1
+459.6 146.8
+460.3 21.3
+465.5 103.7
+467.3 38.6
+468.3 844.7
+469.3 192.3
+470.2 367.9
+472.2 64.7
+473.4 14.0
+475.5 21.1
+476.5 11.5
+477.2 34.3
+478.5 13.3
+482.4 12.3
+483.4 11.4
+484.3 63.0
+485.8 145.0
+486.4 200.0
+487.4 246.9
+488.0 101.6
+492.6 13.3
+494.4 17.7
+498.1 134.5
+499.2 25.9
+503.2 17.5
+504.5 68.8
+506.0 112.6
+508.5 74.4
+509.3 46.4
+510.5 69.5
+515.4 84.0
+517.3 58.5
+518.2 82.8
+519.6 61.5
+520.5 35.0
+521.5 32.0
+522.4 241.0
+523.3 76.6
+524.5 31.3
+526.3 2276.4
+527.3 370.8
+528.3 435.1
+529.5 142.6
+530.4 36.8
+532.1 849.7
+532.9 84.4
+534.2 124.5
+536.2 98.6
+539.3 181.2
+540.7 20.4
+541.3 21.0
+544.4 13.9
+545.4 25.8
+546.3 161.7
+547.2 146.0
+548.7 257.8
+549.3 51.2
+550.3 617.9
+551.1 19.8
+551.8 87.8
+552.4 173.0
+553.2 86.4
+556.6 16.9
+557.5 91.1
+560.8 63.2
+563.1 58.1
+564.2 35.1
+565.4 83.5
+566.3 244.7
+567.2 183.2
+570.3 24.1
+571.6 33.2
+572.7 34.5
+574.1 159.1
+576.4 140.1
+577.3 16.4
+578.3 61.2
+583.4 7737.4
+584.4 2049.2
+585.5 346.6
+586.5 194.1
+587.4 192.5
+588.4 96.2
+589.5 29.8
+593.1 146.0
+595.5 186.1
+596.5 201.9
+598.5 22.9
+600.8 264.7
+601.5 234.0
+602.7 34.2
+603.6 33.6
+604.3 135.2
+605.4 82.4
+606.3 61.0
+607.3 43.4
+608.4 104.1
+609.7 31.7
+611.0 119.5
+612.6 93.9
+613.3 12.7
+614.5 20.8
+615.4 164.3
+617.1 36.6
+619.2 289.2
+620.4 59.9
+621.4 515.7
+622.4 199.2
+623.3 107.9
+626.2 171.9
+627.4 39.6
+630.3 65.9
+631.2 657.5
+632.3 186.5
+633.1 206.2
+634.2 197.2
+634.8 302.3
+640.0 273.2
+641.5 40.8
+642.5 107.5
+643.5 186.8
+644.6 24.6
+647.7 371.4
+649.3 1408.0
+650.4 376.2
+651.4 94.9
+652.5 166.9
+653.4 157.2
+655.9 233.0
+657.4 1590.9
+658.3 486.9
+658.9 15.6
+661.4 209.0
+663.3 81.8
+664.1 161.2
+664.8 129.4
+666.5 154.4
+667.2 5.9
+670.3 112.0
+672.3 33.2
+673.6 84.4
+674.3 11.4
+675.4 177.4
+676.5 87.7
+678.5 31.6
+679.5 268.9
+680.7 144.3
+681.6 191.0
+682.4 20.1
+684.5 37.7
+686.3 308.5
+688.6 161.0
+689.4 160.6
+690.4 112.1
+691.2 64.9
+694.0 52.0
+697.3 11.4
+698.4 366.7
+700.5 132.7
+701.8 245.2
+702.5 178.2
+703.6 39.5
+704.7 38.7
+706.3 237.2
+707.2 162.1
+707.9 40.8
+708.5 16.8
+709.9 259.4
+710.6 155.9
+711.3 151.0
+712.5 245.1
+713.4 26.4
+714.4 50.9
+715.6 81.2
+716.5 37.5
+717.5 253.5
+718.6 308.0
+719.4 324.8
+720.4 45.0
+721.3 66.5
+722.4 177.7
+723.3 108.5
+725.4 10.7
+727.6 3430.7
+728.5 721.4
+730.4 49.2
+732.3 283.5
+734.1 6.9
+735.5 131.1
+736.3 104.5
+737.5 177.1
+738.6 151.5
+739.4 30.6
+740.4 43.8
+741.3 50.0
+742.1 103.0
+744.9 225.9
+746.4 7193.1
+747.4 2314.6
+748.4 140.9
+749.5 163.7
+750.3 178.2
+751.3 41.8
+753.2 370.7
+753.9 367.1
+754.6 199.5
+755.7 98.5
+758.5 9.3
+760.3 489.3
+761.7 1477.8
+762.7 1851.3
+764.4 1387.8
+765.4 281.4
+766.4 126.9
+768.1 268.2
+769.6 747.9
+771.0 10306.7
+772.0 1075.3
+772.6 349.2
+773.5 198.0
+774.6 95.6
+775.4 41.3
+776.8 244.3
+777.5 284.3
+778.4 636.5
+779.3 325.2
+780.5 184.5
+781.2 72.5
+782.1 213.3
+783.5 29.0
+784.9 95.3
+786.3 129.3
+787.8 104.0
+789.2 63.6
+791.9 222.9
+794.5 162.2
+795.5 456.3
+796.5 142.7
+797.6 95.9
+798.8 76.3
+799.6 277.0
+801.5 277.5
+802.9 76.5
+803.7 115.0
+805.5 196.3
+809.2 379.6
+810.9 274.1
+812.2 187.0
+813.8 336.9
+814.9 332.5
+816.1 162.2
+817.3 864.0
+818.3 453.0
+819.1 147.6
+820.4 103.8
+821.5 119.0
+823.3 645.8
+825.0 403.1
+825.8 941.0
+826.8 52.6
+827.4 42.0
+828.7 195.0
+829.8 165.4
+830.4 93.6
+832.1 214.2
+833.0 141.0
+833.8 100.3
+834.6 70.4
+836.3 338.2
+837.1 830.9
+837.8 632.5
+838.6 1101.7
+839.6 46.5
+840.3 279.6
+841.4 235.1
+843.4 354.5
+844.5 199.7
+845.5 417.4
+846.8 176.7
+848.1 233.5
+850.4 441.6
+851.3 469.7
+852.2 199.2
+854.4 331.3
+855.1 326.9
+855.8 102.8
+856.6 86.7
+857.5 1222.2
+859.1 2831.3
+860.2 1890.0
+861.4 571.5
+862.1 322.8
+863.4 219.6
+864.4 144.3
+866.8 249.6
+867.9 548.1
+868.5 828.9
+869.5 6.1
+871.2 62.4
+881.4 202.5
+890.2 58.5
+891.3 325.5
+894.6 175.8
+896.3 57.0
+899.7 162.9
+901.7 10.7
+903.3 117.4
+906.4 45.7
+907.7 53.3
+911.3 42.3
+912.0 48.0
+915.9 24.6
+916.7 73.6
+917.7 142.1
+920.1 101.4
+921.5 26.8
+923.5 58.6
+924.1 172.7
+925.4 141.0
+927.3 112.0
+929.3 119.7
+930.4 91.5
+932.8 142.6
+934.4 189.6
+936.6 97.8
+939.6 80.1
+940.8 229.0
+941.4 194.5
+942.4 223.8
+943.5 87.4
+945.3 264.0
+946.2 68.3
+948.4 190.0
+950.0 172.9
+951.5 85.5
+953.8 178.0
+954.5 178.1
+955.7 84.5
+957.2 74.8
+958.2 365.7
+959.0 138.4
+959.6 70.0
+961.4 108.3
+962.3 71.7
+963.6 152.9
+964.6 24.4
+965.3 77.8
+967.2 78.2
+969.1 80.8
+970.7 73.5
+971.4 323.5
+972.5 1486.7
+973.4 822.0
+974.3 164.2
+975.1 51.0
+978.2 177.2
+979.5 287.6
+980.5 173.6
+981.2 54.8
+982.9 35.3
+984.4 213.2
+985.5 178.4
+986.3 9.4
+987.9 31.1
+989.4 5131.4
+990.3 3682.0
+991.4 2272.8
+992.5 79.6
+995.4 42.4
+997.0 57.3
+998.7 25.6
+999.4 43.4
+1003.5 143.5
+1004.4 83.1
+1005.8 84.0
+1007.3 1475.0
+1008.6 271.1
+1009.5 355.4
+1010.6 147.0
+1012.7 110.2
+1014.3 193.7
+1015.1 160.3
+1016.2 176.4
+1023.4 118.5
+1024.7 72.9
+1026.6 97.9
+1027.5 112.3
+1028.7 24.0
+1029.4 19.1
+1030.9 49.0
+1033.4 60.7
+1034.5 69.1
+1036.6 231.7
+1037.5 161.0
+1039.0 120.5
+1040.6 118.7
+1041.9 38.4
+1042.6 23.7
+1043.3 101.6
+1044.4 86.2
+1045.4 56.1
+1048.8 106.5
+1050.4 61.6
+1051.8 111.0
+1052.6 277.2
+1053.4 423.7
+1054.4 453.0
+1055.2 147.4
+1057.6 562.9
+1058.3 119.3
+1059.6 252.8
+1060.5 79.3
+1061.4 176.1
+1063.5 43.5
+1064.6 75.8
+1069.4 169.3
+1072.2 54.0
+1073.2 93.7
+1074.5 207.3
+1075.5 32.8
+1077.8 66.5
+1079.5 769.2
+1080.4 83.6
+1085.5 65.3
+1086.3 196.4
+1087.4 560.8
+1088.5 269.7
+1089.8 47.1
+1091.2 39.9
+1092.3 155.4
+1094.8 58.5
+1095.9 50.0
+1097.0 74.5
+1097.6 426.5
+1099.1 55.4
+1100.4 141.1
+1101.9 44.2
+1102.6 101.2
+1104.4 7645.4
+1105.5 3833.9
+1106.6 935.6
+1107.2 157.6
+1109.8 369.4
+1112.6 235.3
+1113.5 155.7
+1117.4 204.6
+1118.6 130.4
+1119.9 26.0
+1125.6 344.5
+1126.3 42.8
+1127.4 121.4
+1128.7 80.8
+1132.4 125.5
+1135.4 443.8
+1136.5 820.2
+1137.4 25.9
+1138.4 36.2
+1139.2 74.9
+1140.9 69.0
+1141.8 189.4
+1142.4 193.4
+1143.3 111.4
+1144.4 82.3
+1146.5 84.0
+1147.5 86.9
+1150.9 101.7
+1152.5 801.9
+1153.4 1936.5
+1154.5 702.6
+1158.8 63.0
+1160.0 129.6
+1160.7 570.6
+1161.5 776.5
+1162.1 397.7
+1162.8 132.1
+1163.4 56.8
+1164.7 221.6
+1165.5 34.1
+1166.5 178.4
+1167.4 37.0
+1168.5 34.5
+1169.2 60.1
+1170.3 1416.0
+1171.4 1050.7
+1172.4 87.4
+1173.9 20.1
+1175.4 85.0
+1178.5 105.8
+1179.4 86.5
+1180.4 105.5
+1181.6 85.2
+1183.7 93.7
+1184.6 80.3
+1186.1 218.9
+1187.7 245.5
+1188.6 31.0
+1192.3 125.0
+1193.6 313.4
+1196.3 56.5
+1198.0 115.3
+1200.1 131.3
+1201.5 30.5
+1203.7 36.1
+1204.5 46.0
+1207.5 24.3
+1208.8 164.4
+1209.5 366.1
+1210.5 557.4
+1211.6 431.9
+1212.6 92.4
+1213.5 76.7
+1214.5 45.8
+1219.2 129.2
+1221.4 164.1
+1222.2 78.5
+1223.4 92.4
+1227.6 844.9
+1228.6 335.1
+1229.3 11.1
+1230.5 155.3
+1231.9 388.4
+1233.3 36.8
+1234.6 20.2
+1238.4 69.8
+1240.5 19.6
+1242.5 67.9
+1243.6 73.0
+1244.5 70.1
+1247.5 65.5
+1248.5 174.0
+1249.6 1028.4
+1250.8 404.0
+1251.7 299.6
+1253.8 94.4
+1254.8 147.7
+1256.1 233.8
+1257.3 253.1
+1258.4 67.4
+1259.9 47.9
+1260.8 156.5
+1263.6 166.3
+1264.2 15.0
+1265.4 242.0
+1267.5 6501.9
+1268.5 4593.3
+1269.6 1951.6
+1270.7 160.7
+1271.4 41.0
+1272.5 22.7
+1273.5 172.1
+1274.5 227.2
+1275.8 139.4
+1279.8 86.8
+1280.6 235.3
+1282.7 38.0
+1283.6 57.5
+1284.5 62.2
+1286.1 87.5
+1291.3 21.3
+1292.2 64.3
+1293.6 19.0
+1294.9 206.7
+1295.9 60.9
+1297.1 20.2
+1298.8 55.5
+1300.2 174.8
+1303.2 17.6
+1304.6 39.1
+1307.6 39.4
+1309.5 19.0
+1312.5 96.1
+1314.6 222.2
+1320.4 126.0
+1321.1 33.0
+1322.2 92.1
+1323.0 52.8
+1328.6 96.4
+1330.0 44.3
+1332.8 113.6
+1335.7 99.4
+1336.7 147.3
+1339.6 174.4
+1341.1 60.9
+1344.0 45.1
+1345.3 120.1
+1346.5 150.0
+1347.7 107.9
+1348.9 21.1
+1350.4 29.4
+1352.6 15.6
+1353.8 94.2
+1354.7 218.1
+1355.6 539.9
+1356.5 346.6
+1357.6 432.0
+1358.6 67.6
+1360.6 100.6
+1362.2 40.9
+1363.5 261.0
+1364.6 43.4
+1366.7 34.1
+1369.7 13.3
+1370.6 13.5
+1372.4 1132.5
+1373.7 2062.5
+1374.5 1337.4
+1375.6 218.3
+1376.6 130.3
+1378.0 69.1
+1381.5 54.0
+1388.9 64.2
+1390.4 2408.8
+1391.5 1583.9
+1392.2 450.1
+1393.0 95.1
+1396.0 72.8
+1396.8 178.8
+1400.5 87.9
+1402.6 38.6
+1406.8 22.1
+1410.6 143.8
+1414.8 119.4
+1415.8 174.4
+1437.9 50.6
+1439.2 9.0
+1440.7 30.1
+1441.6 86.9
+1442.4 61.7
+1443.4 13.5
+1444.7 37.1
+1445.6 48.4
+1450.7 101.3
+1452.0 189.2
+1453.4 1467.4
+1454.6 1148.6
+1455.7 388.1
+1456.8 19.7
+1460.0 545.6
+1460.6 67.1
+1461.3 490.6
+1462.0 69.0
+1464.7 67.3
+1469.7 114.1
+1471.9 37.8
+1473.8 51.8
+1477.4 615.7
+1478.3 363.3
+1483.8 39.8
+1489.3 40.7
+1491.4 12.5
+1498.1 100.5
+1504.6 69.1
+1505.4 61.2
+1506.4 21.9
+1516.9 36.2
+1522.8 322.6
+1523.6 354.8
+1524.8 148.3
+1525.6 147.7
+1532.0 121.0
+1537.9 20.2
+1540.5 2867.2
+1541.5 2559.8
+1542.6 971.1
+1543.6 47.9
+1544.4 49.0
+1553.6 29.0
+1555.6 40.4
+1560.7 189.5
+1561.3 215.1
+1562.4 301.0
+1568.5 44.1
+1570.7 37.0
+1573.5 88.6
+1574.7 149.0
+1575.9 80.3
+1578.2 275.5
+1580.1 146.6
+1580.8 235.1
+1585.7 29.5
+1594.3 125.5
+1597.9 78.4
+1600.9 16.2
+1606.5 47.2
+1607.6 14.3
+1630.7 16.6
+1632.7 485.0
+1633.6 395.8
+1634.6 390.2
+1635.8 188.6
+1636.8 100.4
+1637.5 130.6
+1640.5 74.0
+1650.5 66.9
+1694.7 24.9
+S	76	76	731.81
+Z	2	1462.61
+208.9 10.9
+212.1 3.1
+220.0 10.2
+226.1 108.9
+227.1 17.1
+231.1 6.9
+238.1 20.5
+239.1 15.5
+241.1 5.8
+242.5 5.3
+244.0 205.4
+245.1 6.7
+247.3 4.9
+248.2 4.6
+251.1 9.9
+256.8 7.2
+262.2 23.6
+267.9 6.3
+270.9 2.4
+272.1 5.6
+276.1 8.1
+279.2 1.8
+284.1 14.0
+290.1 10.9
+291.2 5.3
+294.2 44.1
+295.4 3.4
+298.3 7.7
+304.5 5.3
+307.2 6.3
+308.2 32.3
+309.2 11.6
+314.6 21.6
+317.9 2.3
+323.3 6.6
+325.4 43.8
+326.3 35.3
+327.3 13.6
+342.1 3.0
+343.2 464.8
+344.2 39.2
+345.2 5.5
+349.1 10.5
+351.2 7.0
+366.7 14.5
+367.4 29.5
+369.2 4.8
+374.1 3.3
+377.7 7.7
+380.6 7.9
+384.1 90.3
+385.0 6.3
+387.2 14.2
+396.1 8.4
+400.3 2.7
+403.3 9.4
+405.2 21.7
+407.3 85.3
+408.4 24.7
+409.4 31.6
+412.0 26.4
+413.0 19.5
+417.2 20.3
+420.4 6.5
+428.4 7.7
+430.2 135.0
+431.3 41.3
+434.5 6.1
+442.3 5.9
+444.3 9.2
+446.2 2.4
+447.1 3.9
+448.4 7.2
+453.3 8.8
+455.4 2.4
+461.4 6.7
+465.7 14.3
+466.3 31.1
+467.3 3.7
+470.3 5.1
+471.0 5.4
+473.2 12.1
+474.9 5.7
+477.3 5.8
+479.8 8.4
+483.2 130.9
+484.2 40.3
+489.1 9.5
+495.0 14.2
+498.1 3.7
+500.5 19.8
+501.4 166.2
+502.4 25.1
+503.1 4.8
+504.2 15.4
+505.3 2.7
+510.2 10.4
+514.2 8.4
+515.2 26.2
+516.1 16.4
+517.5 22.9
+519.0 8.8
+520.2 40.0
+521.2 7.5
+523.5 2.4
+526.6 3.6
+529.7 42.8
+532.2 3.9
+533.2 3.6
+536.5 13.6
+539.1 31.8
+540.6 33.9
+542.5 12.4
+543.3 5.0
+544.9 7.3
+547.3 2.6
+548.4 11.2
+549.5 11.1
+551.8 20.6
+556.3 33.3
+556.9 15.5
+559.5 19.5
+562.8 6.2
+565.1 15.6
+566.3 2.6
+568.2 15.8
+569.2 12.8
+570.2 19.2
+571.4 7.3
+572.6 12.9
+573.3 3.4
+574.1 18.9
+575.5 16.9
+576.8 18.6
+577.5 6.0
+580.2 35.9
+581.2 26.8
+584.1 6.8
+585.6 5.8
+587.2 14.8
+588.3 5.9
+590.5 3.8
+594.3 7.9
+595.3 3.5
+597.1 82.3
+598.4 8.4
+600.3 35.4
+602.3 29.8
+603.3 14.9
+604.2 8.1
+605.2 23.6
+610.3 25.6
+610.9 34.2
+611.8 22.9
+614.3 95.3
+615.3 276.2
+616.2 47.4
+617.4 4.8
+618.3 7.9
+619.4 3.1
+622.2 10.1
+624.2 13.6
+625.3 4.2
+629.6 22.8
+630.3 25.3
+631.1 2.0
+632.1 566.1
+633.3 52.6
+637.4 24.4
+640.1 4.3
+642.0 17.4
+647.3 10.7
+650.7 13.4
+651.3 20.1
+656.8 16.4
+658.7 7.8
+660.4 12.2
+661.5 20.7
+664.8 5.5
+666.3 15.5
+668.4 28.4
+669.5 21.2
+670.3 6.4
+671.5 2.8
+672.5 7.1
+673.4 13.4
+675.7 13.9
+677.1 18.3
+678.4 3.5
+683.1 57.1
+684.5 3.8
+685.6 71.1
+687.2 13.3
+689.0 10.3
+690.3 56.0
+695.2 18.6
+696.4 10.6
+697.3 39.6
+698.4 15.7
+699.9 21.4
+701.0 7.6
+702.3 9.8
+703.0 3.2
+703.7 16.9
+705.1 35.8
+708.0 9.8
+709.8 30.7
+711.4 6.9
+712.2 6.7
+713.8 69.9
+714.6 41.3
+715.9 21.7
+717.7 4.4
+718.6 6.8
+720.0 15.5
+721.9 174.0
+723.3 59.5
+724.1 7.8
+737.8 6.0
+740.5 22.1
+749.7 10.4
+751.9 18.5
+752.7 22.5
+753.5 12.4
+756.0 8.9
+757.2 4.6
+762.7 55.5
+763.5 14.9
+764.5 12.4
+766.2 30.8
+773.6 22.2
+775.2 4.3
+784.4 26.9
+785.4 8.1
+792.8 18.3
+806.3 6.2
+807.2 8.3
+814.2 14.6
+817.1 28.5
+817.9 4.5
+819.7 22.8
+826.4 30.2
+827.4 3.0
+830.4 13.0
+831.4 1044.9
+832.6 301.8
+833.6 20.4
+841.4 48.3
+843.3 20.7
+844.1 12.9
+847.4 11.1
+848.5 16.9
+854.5 22.2
+855.8 10.5
+856.9 10.8
+858.7 2.1
+860.2 1.8
+861.6 14.4
+862.8 2.4
+866.2 12.5
+870.0 7.9
+875.5 10.6
+876.4 7.9
+878.7 6.7
+882.2 14.1
+884.4 22.5
+885.5 25.7
+886.5 48.8
+887.7 20.9
+890.0 98.3
+891.1 8.4
+892.4 25.3
+893.5 3.6
+897.7 43.8
+898.9 127.3
+900.0 37.8
+902.1 13.1
+902.9 14.6
+909.4 25.6
+910.5 4.9
+915.5 12.9
+917.5 17.0
+921.0 16.3
+921.6 5.8
+922.4 18.9
+925.2 34.1
+926.1 7.8
+927.6 19.2
+928.7 24.6
+931.1 7.7
+935.1 24.5
+936.6 3.1
+937.7 15.6
+939.8 6.5
+943.4 128.6
+944.7 47.9
+945.5 11.3
+948.0 7.1
+955.4 28.8
+958.4 10.5
+959.0 7.8
+960.6 17.9
+962.4 548.9
+963.5 195.1
+964.3 58.6
+964.9 9.9
+966.6 14.3
+968.2 6.9
+973.4 36.9
+975.6 5.7
+976.7 22.3
+983.3 27.0
+984.1 14.2
+985.4 20.7
+987.9 21.2
+994.4 13.4
+995.1 27.2
+996.2 14.7
+998.5 23.8
+999.7 11.7
+1007.9 39.5
+1009.0 6.1
+1010.6 7.3
+1012.5 9.7
+1019.8 12.8
+1021.3 22.3
+1023.6 28.3
+1025.6 13.1
+1031.3 3.3
+1033.4 297.9
+1034.4 99.1
+1035.1 3.3
+1036.3 6.7
+1038.5 17.3
+1039.4 46.9
+1040.0 27.7
+1041.3 7.1
+1042.8 22.7
+1043.9 14.4
+1044.7 7.1
+1047.4 4.9
+1049.3 10.2
+1050.6 6.4
+1053.5 20.0
+1054.6 5.4
+1056.3 70.8
+1057.5 45.0
+1061.5 27.3
+1064.6 3.1
+1073.5 16.2
+1084.4 10.0
+1091.3 8.6
+1094.3 3.8
+1097.8 4.6
+1102.6 17.9
+1103.6 4.4
+1110.5 2.1
+1112.5 5.9
+1116.3 9.2
+1117.5 14.7
+1119.9 62.7
+1120.5 1288.0
+1121.6 509.5
+1122.7 63.9
+1131.3 1.9
+1132.9 6.1
+1146.7 4.3
+1147.5 15.1
+1151.2 10.2
+1152.4 30.7
+1157.9 8.8
+1169.4 126.2
+1170.4 39.8
+1182.5 12.0
+1184.6 5.1
+1186.8 12.5
+1195.5 10.2
+1196.4 13.5
+1198.5 5.4
+1201.6 50.7
+1202.6 20.7
+1203.7 16.8
+1211.5 5.2
+1219.6 517.7
+1220.6 349.6
+1244.7 5.3
+1245.8 25.0
+1256.4 2.1
+1268.6 4.5
+1281.6 4.4
+1298.7 16.5
+1299.6 10.0
+1300.8 15.7
+1301.6 7.4
+1313.9 6.6
+1316.5 82.7
+1317.6 25.4
+1331.2 12.0
+1363.5 8.4
+1434.0 4.1
+1435.4 21.9
+1461.5 8.5
+S	77	77	745.43
+Z	2	1489.85
+214.3 2.0
+217.2 9.5
+219.4 2.7
+222.3 4.7
+225.5 6.3
+229.1 5.0
+233.2 20.6
+234.2 41.7
+235.3 5.8
+239.2 31.9
+240.8 5.5
+243.1 5.4
+244.1 7.4
+246.4 1.4
+247.2 10.8
+248.4 4.6
+256.2 11.6
+260.2 135.1
+261.0 6.0
+262.0 105.8
+263.2 5.2
+266.4 4.0
+270.3 41.1
+271.6 10.8
+274.3 7.9
+276.0 4.0
+282.2 11.6
+285.0 2.9
+286.1 1.7
+288.2 25.0
+289.3 5.0
+291.2 7.9
+294.6 1.3
+298.1 2.9
+299.5 8.4
+301.1 3.5
+302.5 2.1
+303.2 13.8
+304.2 12.6
+306.8 1.2
+310.2 7.5
+315.7 7.9
+316.5 49.9
+317.4 282.5
+321.2 2.8
+322.7 6.0
+325.2 25.3
+325.8 12.8
+329.3 7.1
+330.1 11.6
+333.3 13.1
+334.1 8.2
+336.9 2.9
+338.4 6.7
+340.3 6.4
+342.5 5.4
+343.2 3.5
+344.1 9.1
+345.3 6.7
+346.0 1.1
+347.2 31.4
+349.3 24.6
+350.0 7.2
+355.3 20.9
+356.0 1.2
+357.3 76.5
+358.4 24.0
+359.6 8.0
+360.6 2.7
+362.4 4.7
+370.9 6.4
+373.4 13.2
+374.0 11.9
+375.2 273.2
+376.4 78.9
+377.3 16.3
+378.0 14.7
+383.3 13.5
+386.4 25.7
+392.2 5.6
+393.3 15.3
+394.2 12.8
+395.5 4.5
+397.2 1.8
+400.2 18.1
+401.6 1.2
+403.3 85.5
+404.4 23.3
+408.6 3.1
+409.5 6.3
+411.5 6.0
+416.3 249.1
+417.3 13.4
+418.7 12.4
+421.3 56.2
+422.3 29.4
+425.3 22.5
+429.4 10.8
+430.3 2.5
+431.2 2.2
+433.2 2.1
+434.8 10.1
+436.2 4.3
+437.3 6.3
+439.0 4.7
+440.4 3.8
+442.5 1.1
+444.4 6.4
+446.0 14.5
+446.7 1.0
+449.7 7.3
+450.4 13.7
+452.9 5.2
+453.7 4.6
+457.4 6.9
+458.2 2.8
+459.0 11.7
+460.8 6.7
+462.3 13.8
+466.5 16.7
+467.6 8.7
+469.9 5.9
+470.6 3.3
+472.4 12.2
+473.4 13.2
+474.4 97.3
+475.4 18.5
+476.3 30.2
+477.4 9.2
+480.3 4.5
+482.5 6.5
+484.4 24.1
+486.0 17.7
+486.6 27.7
+487.5 7.6
+490.2 9.1
+491.4 3.8
+493.1 5.7
+496.2 19.0
+497.4 19.0
+499.3 7.1
+500.8 2.5
+501.9 16.0
+504.3 166.1
+505.3 29.8
+507.4 4.6
+508.7 3.8
+510.2 13.3
+511.4 15.6
+513.0 21.0
+514.3 25.0
+515.2 4.6
+516.6 5.0
+517.4 3.8
+520.4 5.5
+521.5 15.3
+522.4 7.9
+524.4 22.1
+525.5 5.4
+526.5 39.4
+527.5 42.7
+528.4 7.8
+529.7 15.7
+531.5 13.9
+534.3 79.2
+535.0 91.1
+536.7 20.6
+538.4 7.1
+539.1 1.9
+539.7 11.7
+540.3 3.6
+543.2 27.8
+544.4 376.0
+545.3 66.7
+546.2 6.9
+547.3 13.7
+548.7 22.1
+549.3 11.2
+550.4 30.4
+551.4 42.9
+552.0 7.8
+552.9 8.5
+553.6 2.0
+554.8 1.5
+555.6 22.7
+557.3 28.7
+558.1 34.4
+559.5 34.1
+560.2 5.2
+564.3 18.8
+567.9 53.9
+568.5 6.8
+570.3 33.3
+571.2 13.0
+572.4 6.2
+573.1 17.1
+573.9 15.8
+575.4 12.0
+577.0 54.0
+578.1 81.6
+579.1 20.9
+580.5 9.6
+581.4 18.0
+582.8 21.1
+584.5 22.4
+585.6 14.9
+587.1 85.4
+588.1 40.1
+592.5 28.4
+594.3 7.9
+595.1 39.7
+596.6 1.9
+598.2 27.0
+599.4 53.5
+600.4 2.6
+601.3 5.2
+603.2 20.2
+604.5 35.4
+605.4 179.3
+606.3 91.7
+607.1 5.4
+608.5 17.2
+609.4 3.6
+610.7 30.9
+612.2 9.4
+613.6 47.0
+614.8 96.6
+615.5 8.6
+616.4 8.4
+617.2 21.9
+618.6 52.9
+619.8 2.8
+620.5 7.8
+621.7 25.3
+623.2 5.7
+624.6 23.0
+625.2 34.6
+626.0 214.5
+627.1 17.9
+628.0 27.0
+629.8 10.7
+631.1 24.6
+632.2 25.6
+632.9 6.2
+634.0 8.6
+636.1 16.9
+637.4 37.3
+639.6 37.4
+640.2 9.6
+642.0 24.0
+642.6 9.5
+643.9 3.8
+644.5 66.6
+645.3 95.6
+646.3 10.8
+648.9 17.2
+650.1 15.5
+651.0 5.0
+651.7 5.2
+652.3 6.6
+653.3 25.2
+655.0 23.8
+657.4 436.2
+658.2 39.1
+658.8 68.1
+659.9 28.1
+660.6 2.4
+662.0 11.7
+663.0 96.4
+664.1 27.6
+664.9 40.4
+666.2 101.3
+667.4 19.6
+668.3 25.5
+669.3 150.6
+670.4 47.5
+671.9 42.6
+672.7 6.2
+673.4 48.3
+674.4 62.8
+675.8 70.6
+676.7 75.6
+677.5 28.1
+678.2 55.9
+679.4 15.8
+680.4 28.2
+681.4 57.1
+682.9 16.6
+683.7 71.8
+686.3 622.4
+687.4 74.1
+688.2 34.0
+688.9 11.0
+689.5 5.9
+690.4 5.0
+691.1 26.3
+692.0 24.1
+692.7 60.5
+693.5 57.6
+694.6 49.9
+695.8 43.1
+698.3 43.3
+699.7 87.4
+700.6 25.3
+701.4 45.2
+702.1 57.9
+702.9 23.7
+704.4 539.0
+705.4 66.7
+706.3 17.9
+707.4 15.9
+708.1 17.6
+709.6 261.3
+710.7 64.5
+711.5 20.0
+712.4 44.1
+713.8 167.7
+714.9 94.9
+716.7 26.8
+718.2 677.7
+719.1 104.8
+720.2 32.1
+721.3 98.0
+722.1 63.9
+723.1 62.4
+723.9 198.3
+725.0 106.8
+725.8 37.7
+726.5 40.1
+727.5 155.6
+728.3 179.0
+729.1 128.0
+729.9 96.9
+731.2 97.9
+731.9 32.6
+732.6 121.7
+733.4 90.5
+735.5 263.5
+736.5 378.2
+737.3 49.9
+739.2 6.8
+740.6 5.6
+751.9 47.6
+753.6 15.8
+755.4 4.0
+756.6 21.6
+757.4 11.9
+758.4 10.5
+759.2 12.6
+760.6 13.1
+762.5 18.1
+763.4 8.9
+765.2 43.0
+766.2 11.3
+767.0 5.9
+768.3 71.2
+769.4 16.3
+770.9 20.3
+772.2 136.2
+772.9 31.0
+773.7 68.8
+775.0 19.2
+777.4 60.4
+778.5 61.7
+779.4 10.4
+780.6 44.0
+781.5 30.4
+783.4 17.4
+784.3 11.3
+785.3 45.0
+786.5 1101.1
+787.5 161.5
+788.9 26.9
+789.6 16.3
+790.6 21.7
+792.3 30.0
+793.6 52.4
+794.7 35.3
+795.7 46.2
+797.4 79.0
+798.5 63.8
+799.6 82.7
+800.4 85.0
+801.1 8.7
+802.0 5.5
+802.9 8.8
+803.7 17.5
+805.5 33.0
+807.0 41.7
+808.8 16.4
+809.7 30.0
+810.6 48.7
+811.8 22.3
+812.9 29.3
+813.9 40.0
+814.8 82.8
+815.4 110.7
+816.4 208.5
+817.3 33.9
+818.3 51.8
+821.3 12.5
+822.3 52.5
+823.7 64.3
+824.9 4.6
+827.3 12.3
+828.6 75.1
+830.2 46.8
+831.7 36.1
+832.8 116.5
+833.5 283.0
+834.4 12.1
+835.7 61.2
+836.7 5.4
+838.0 13.5
+838.9 38.9
+839.9 18.8
+840.7 36.1
+841.9 14.8
+842.6 17.4
+843.8 30.3
+844.7 15.0
+845.6 37.8
+846.4 21.3
+847.6 35.6
+848.3 2.9
+849.2 6.5
+850.1 34.7
+851.1 47.1
+852.1 57.8
+853.0 80.3
+854.1 73.2
+855.7 4.5
+856.9 63.7
+857.9 31.5
+858.8 33.6
+859.7 25.9
+860.8 67.1
+861.8 53.9
+862.7 45.5
+865.1 2.9
+866.0 10.1
+867.9 18.5
+869.5 52.4
+870.2 1.7
+871.6 200.5
+872.6 118.5
+873.8 17.2
+874.9 66.7
+875.8 19.7
+876.8 70.8
+877.8 19.0
+879.6 15.6
+880.2 10.5
+882.0 23.4
+883.3 130.8
+884.5 27.3
+885.6 391.6
+886.5 35.3
+887.1 20.3
+889.6 23.2
+890.5 17.6
+891.3 3.2
+892.2 20.8
+894.2 70.5
+895.4 27.8
+896.7 69.5
+897.7 8.4
+898.6 49.4
+899.3 119.8
+900.5 60.5
+901.9 32.6
+902.6 28.8
+903.8 45.3
+904.6 31.4
+905.6 4.9
+906.5 14.4
+907.6 53.6
+908.3 18.3
+909.6 41.8
+911.4 13.9
+912.6 22.0
+914.4 19.0
+915.4 50.3
+916.5 3.3
+917.8 58.2
+918.7 27.6
+919.9 44.8
+920.8 94.5
+921.8 108.7
+922.6 65.6
+923.6 38.0
+924.7 42.7
+925.6 41.3
+926.4 48.9
+927.7 132.6
+928.5 135.4
+929.4 120.1
+930.2 48.8
+930.9 20.5
+932.1 23.1
+933.1 33.3
+934.0 11.7
+934.6 21.5
+935.6 17.4
+936.4 5.9
+937.0 62.5
+938.1 179.7
+939.0 4.3
+940.7 38.8
+941.5 61.7
+942.9 74.3
+943.6 26.6
+945.1 57.8
+946.4 354.4
+947.5 111.0
+948.3 62.3
+948.9 18.4
+950.0 52.8
+951.4 14.5
+952.7 88.3
+953.5 68.3
+954.2 185.6
+955.3 32.5
+956.3 10.9
+957.7 11.9
+959.8 64.9
+961.0 17.6
+963.6 15.5
+964.2 13.4
+965.3 12.7
+966.7 54.2
+967.8 78.7
+968.8 29.9
+969.5 7.5
+970.6 38.1
+971.9 29.9
+972.8 40.3
+974.0 27.5
+975.0 66.7
+976.7 36.0
+978.2 15.3
+979.2 26.8
+980.9 18.5
+981.6 55.2
+982.2 14.0
+983.9 12.3
+985.2 26.5
+986.5 571.6
+987.7 137.0
+988.5 0.8
+989.6 11.4
+990.5 20.9
+991.3 23.3
+992.2 28.2
+993.0 10.7
+993.8 58.7
+994.5 31.5
+996.0 69.2
+997.6 53.9
+998.6 20.2
+1000.2 57.0
+1001.5 18.0
+1002.7 72.2
+1003.5 15.7
+1004.4 30.1
+1006.4 18.8
+1008.6 17.5
+1009.4 13.4
+1010.1 7.0
+1011.4 51.1
+1012.4 17.0
+1013.3 4.1
+1014.6 52.1
+1015.6 81.5
+1016.4 22.2
+1017.5 19.7
+1018.6 61.1
+1019.4 9.6
+1022.7 9.6
+1023.6 18.7
+1024.4 4.6
+1026.9 2.6
+1029.5 2.6
+1030.7 20.4
+1031.5 14.1
+1033.7 4.1
+1034.7 35.1
+1035.9 14.4
+1036.9 9.8
+1038.7 33.8
+1039.3 13.9
+1040.0 65.5
+1041.3 35.0
+1043.0 19.6
+1044.4 29.9
+1045.7 7.8
+1047.5 11.5
+1048.3 13.1
+1049.6 20.6
+1050.3 4.7
+1052.0 5.3
+1052.6 19.2
+1056.4 93.3
+1057.2 98.8
+1058.0 5.4
+1059.0 17.2
+1059.7 9.3
+1060.5 9.6
+1061.9 48.0
+1062.7 4.4
+1064.4 15.9
+1065.4 14.4
+1066.3 21.1
+1067.6 460.3
+1068.6 176.6
+1069.5 129.4
+1070.6 47.4
+1072.6 4.6
+1074.4 481.2
+1075.5 49.2
+1078.3 5.6
+1079.4 7.1
+1080.8 17.5
+1081.9 15.5
+1084.5 1.7
+1087.4 14.0
+1088.1 22.9
+1091.8 19.4
+1092.5 2.2
+1095.7 77.4
+1097.6 148.6
+1098.7 28.4
+1099.9 9.4
+1102.6 4.1
+1104.5 6.8
+1105.9 3.9
+1107.4 60.8
+1109.0 12.4
+1110.6 6.9
+1111.8 8.1
+1112.5 5.8
+1113.6 81.8
+1115.6 614.4
+1116.7 94.0
+1117.7 28.7
+1120.7 18.7
+1121.6 18.9
+1126.8 11.3
+1128.2 10.0
+1129.8 24.8
+1131.0 15.0
+1131.7 9.8
+1132.8 17.0
+1133.9 10.3
+1135.8 6.4
+1136.6 20.3
+1137.7 24.5
+1138.5 21.3
+1139.4 6.1
+1143.1 20.0
+1147.5 38.0
+1151.5 7.6
+1153.5 8.5
+1154.6 213.0
+1155.6 274.9
+1156.6 133.2
+1157.2 29.9
+1165.6 26.2
+1167.4 6.5
+1171.1 7.1
+1173.4 906.9
+1174.5 81.4
+1176.6 20.7
+1181.4 17.9
+1186.1 13.5
+1189.0 6.4
+1189.8 22.3
+1192.9 11.0
+1197.4 12.9
+1198.6 10.1
+1199.7 4.1
+1201.4 2.6
+1202.5 13.3
+1204.2 5.6
+1208.6 6.6
+1210.8 79.9
+1211.7 9.2
+1212.5 58.8
+1213.2 42.1
+1214.0 25.6
+1219.8 14.7
+1224.3 3.3
+1225.7 11.5
+1226.7 8.7
+1228.1 31.0
+1228.8 372.2
+1230.4 589.9
+1231.7 84.4
+1237.7 7.1
+1238.4 10.7
+1242.5 8.4
+1243.7 27.4
+1244.3 22.0
+1252.1 9.9
+1252.9 5.1
+1253.6 17.8
+1254.8 31.1
+1255.8 4.6
+1257.4 2.2
+1258.6 4.4
+1271.0 6.0
+1273.5 6.9
+1275.4 11.2
+1281.2 1.0
+1294.1 14.5
+1295.4 4.1
+1297.4 4.9
+1304.4 5.5
+1308.9 36.0
+1315.4 3.4
+1320.5 12.4
+1322.7 18.4
+1323.6 17.3
+1324.6 33.2
+1325.5 47.3
+1326.2 49.3
+1327.0 10.0
+1336.6 13.6
+1341.4 50.3
+1343.0 122.4
+1343.6 458.7
+1344.5 146.2
+1345.2 17.9
+1349.5 4.5
+1350.9 2.7
+1358.2 11.9
+1360.7 6.2
+1361.7 11.8
+1370.9 5.6
+1389.7 8.3
+1392.6 7.1
+1395.8 11.6
+1396.5 3.2
+1421.0 11.2
+1443.0 9.4
+1452.8 2.1
+1463.3 2.5
+1469.5 2.9
+1472.5 0.9
+1475.8 13.7
+S	78	78	452.22
+I	ID	98
+I	RTime	4.6463
+Z	2	903.43
+Z	3	1354.64
+161.1 1.1
+163.3 1.7
+167.0 0.6
+175.2 1.7
+177.4 1.5
+178.3 2.9
+185.9 1.2
+190.6 1.8
+195.0 1.2
+219.2 4.5
+225.2 1.3
+226.2 1.6
+232.3 2.0
+235.1 3.0
+240.1 2.2
+244.2 1.7
+247.0 1.3
+248.5 3.4
+254.0 0.8
+255.8 1.7
+258.2 8.6
+258.9 1.7
+264.1 2.5
+265.2 5.5
+275.2 3.2
+276.2 1.8
+277.4 1.2
+282.4 0.8
+289.9 2.0
+292.0 7.8
+296.1 1.8
+297.6 1.2
+298.7 0.8
+305.9 2.5
+308.4 2.5
+310.3 2.2
+311.2 1.2
+316.2 10.3
+317.2 1.7
+323.3 1.5
+324.3 19.0
+325.2 13.8
+335.0 2.7
+337.2 8.6
+342.1 1.2
+347.5 1.2
+355.9 4.4
+359.2 0.6
+362.4 8.6
+376.8 2.4
+378.1 1.3
+383.7 14.0
+385.6 2.5
+387.8 2.7
+389.1 4.1
+392.3 18.7
+393.3 7.5
+394.6 7.0
+395.3 5.4
+399.4 9.6
+402.2 5.8
+406.3 23.3
+407.2 4.5
+408.1 5.6
+409.5 0.8
+410.4 5.3
+411.5 1.1
+416.3 5.1
+417.5 10.1
+418.4 1.1
+420.1 1.7
+421.3 7.1
+422.4 11.0
+423.7 1.6
+425.0 16.1
+429.5 0.8
+430.7 6.3
+434.2 62.7
+435.0 12.5
+436.4 6.8
+442.6 12.8
+443.3 28.3
+443.9 30.5
+445.6 5.5
+469.2 2.7
+473.5 1.2
+474.4 2.0
+483.4 1.3
+514.7 3.5
+526.3 3.7
+530.3 1.8
+570.6 1.7
+580.7 1.3
+585.4 2.2
+587.3 1.1
+622.6 2.0
+627.3 1.0
+645.4 5.6
+647.3 3.7
+648.4 1.3
+654.5 1.3
+671.4 1.6
+702.2 1.3
+703.5 2.9
+716.5 1.1
+717.4 2.0
+728.4 1.7
+729.6 2.0
+753.5 2.7
+756.3 11.6
+774.8 2.7
+775.5 2.7
+882.6 2.9
+S	79	79	559.10
+I	ID	210
+I	RTime	10.3738
+Z	2	1117.19
+175.2 1.7
+185.3 2.4
+186.2 3.5
+209.2 10.1
+234.2 1.5
+237.3 1.8
+251.9 1.2
+253.3 1.1
+254.0 1.0
+258.2 2.7
+259.0 2.5
+267.1 4.0
+271.0 1.6
+275.3 2.7
+276.3 3.2
+278.3 7.5
+283.2 2.9
+286.1 1.3
+287.5 1.7
+290.9 29.7
+292.1 1.2
+294.9 1.7
+299.3 3.0
+301.0 1.0
+311.2 1.6
+315.3 1.3
+317.3 1.6
+331.2 5.4
+341.1 1.7
+342.2 2.7
+345.5 5.5
+355.1 2.7
+364.4 3.0
+366.2 9.3
+367.4 2.0
+371.3 2.2
+373.5 10.0
+378.1 1.1
+380.9 3.2
+384.2 2.4
+386.2 12.1
+387.4 2.7
+389.4 3.2
+394.2 9.8
+396.1 5.5
+399.4 2.0
+400.7 2.0
+403.5 2.5
+404.3 3.4
+410.1 1.6
+413.3 1.2
+418.4 1.2
+426.5 6.1
+430.3 9.5
+430.9 3.5
+431.6 4.0
+436.1 1.7
+440.3 1.6
+441.0 1.2
+442.4 2.4
+443.2 2.9
+444.4 2.2
+449.4 1.7
+453.3 1.2
+454.3 11.3
+455.3 4.8
+459.4 1.2
+460.1 2.0
+466.2 3.2
+470.6 1.7
+473.1 1.8
+489.1 2.9
+495.6 2.0
+499.1 7.4
+501.5 1.6
+506.5 1.5
+507.5 4.5
+509.1 1.8
+510.7 2.0
+513.5 3.4
+514.4 3.4
+518.8 2.5
+522.4 3.7
+523.4 8.8
+524.8 11.3
+526.4 4.0
+529.6 9.5
+540.6 29.5
+541.3 57.5
+542.3 50.2
+542.9 3.5
+550.9 5.0
+579.3 2.9
+595.2 3.2
+610.3 3.5
+629.5 2.7
+659.5 11.1
+685.4 3.0
+688.9 3.2
+710.3 2.5
+720.2 5.5
+726.5 4.1
+734.6 2.5
+738.5 1.7
+747.1 1.2
+832.5 5.1
+844.6 3.4
+859.4 3.5
+866.5 8.6
+890.2 2.9
+908.5 5.5
+917.5 2.5
+922.7 2.5
+933.7 2.0
+970.7 4.4
+S	80	80	509.27
+I	ID	149
+I	RTime	7.2660
+Z	2	1017.53
+143.9 1.3
+155.2 10.5
+157.1 2.2
+161.1 8.8
+169.1 2.2
+172.3 10.6
+172.9 0.8
+178.2 7.0
+181.0 1.7
+187.1 28.2
+187.8 2.7
+195.4 4.3
+198.2 1.1
+201.1 5.5
+205.3 1.1
+215.1 22.3
+216.1 1.2
+224.0 2.0
+230.3 1.0
+234.1 1.3
+236.9 1.2
+239.4 3.7
+240.1 1.7
+241.2 1.6
+243.9 3.0
+246.9 4.1
+257.1 20.5
+258.3 7.9
+259.4 2.2
+266.1 2.0
+271.0 0.6
+272.2 12.1
+275.2 46.0
+276.5 5.0
+283.4 5.5
+284.1 5.1
+289.3 40.2
+290.4 10.8
+291.2 1.7
+293.0 14.1
+295.0 48.2
+296.0 1.1
+300.4 2.0
+301.3 3.7
+305.2 2.0
+311.1 2.9
+313.5 1.7
+314.5 1.8
+322.3 0.8
+325.2 1.8
+326.4 8.8
+327.1 1.6
+329.2 2.5
+335.0 3.0
+343.1 17.8
+344.4 1.8
+349.1 1.1
+352.6 3.0
+353.4 4.5
+355.4 2.9
+359.3 1.2
+363.1 6.1
+369.1 2.2
+370.9 1.7
+372.4 2.7
+376.2 1.7
+381.1 3.5
+382.2 1.6
+383.1 5.4
+384.2 7.3
+386.0 3.7
+391.5 1.3
+393.1 24.7
+393.8 68.0
+394.5 3.4
+396.0 4.5
+396.8 7.4
+400.5 54.0
+401.2 3.4
+402.4 53.2
+403.3 8.1
+404.4 3.0
+409.5 14.6
+410.1 1.0
+411.2 4.1
+414.3 10.1
+415.2 2.7
+418.2 4.0
+419.3 1.2
+422.2 9.6
+423.8 1.2
+426.1 5.0
+427.1 1.6
+427.8 4.5
+434.7 10.3
+440.0 6.5
+441.3 3.4
+443.4 1.0
+444.2 1.8
+445.0 2.0
+448.3 3.0
+451.6 2.7
+452.2 5.0
+454.1 1.7
+455.9 6.5
+456.9 9.6
+458.0 28.2
+461.3 13.5
+463.3 3.4
+465.1 28.2
+468.3 3.7
+468.9 6.6
+470.1 2.2
+472.2 3.5
+474.0 55.0
+475.1 14.8
+476.0 6.9
+477.0 3.5
+478.7 7.1
+479.4 6.6
+482.8 2.2
+484.4 14.8
+485.0 2.9
+487.0 5.5
+488.4 1.1
+489.5 1.0
+491.9 76.0
+493.4 11.8
+494.3 1.3
+497.4 2.0
+498.2 3.5
+500.2 46.5
+500.8 55.0
+525.2 5.0
+526.2 1.7
+529.2 12.6
+530.3 6.0
+540.3 4.0
+543.3 14.3
+544.3 2.4
+554.3 2.2
+556.8 3.4
+557.4 14.3
+558.3 4.5
+582.2 5.9
+583.0 10.6
+586.4 9.5
+587.3 3.0
+596.1 2.2
+600.2 6.0
+604.4 17.1
+605.4 4.9
+611.3 8.3
+614.6 4.9
+618.5 9.8
+619.5 8.5
+623.3 4.4
+625.4 2.2
+628.3 19.2
+629.3 8.3
+639.5 8.3
+643.3 0.8
+648.4 2.2
+654.5 6.5
+657.5 4.0
+658.5 5.9
+659.4 3.5
+672.0 2.0
+674.5 1.2
+675.3 96.5
+676.4 14.8
+684.4 0.8
+686.4 1.2
+689.4 20.1
+690.3 7.0
+692.5 4.5
+694.3 3.2
+707.0 1.2
+708.4 1.2
+711.2 11.1
+712.3 2.4
+725.0 4.5
+726.4 10.5
+729.2 22.6
+730.2 19.5
+735.4 3.4
+743.3 81.4
+744.3 15.1
+746.6 1.6
+768.3 7.6
+769.2 2.2
+772.7 2.5
+773.4 2.9
+775.2 3.0
+785.5 1.6
+786.3 44.9
+787.3 2.0
+799.7 2.7
+801.6 2.7
+802.3 3.0
+803.4 93.5
+804.5 18.1
+817.4 19.3
+818.7 4.5
+838.4 3.7
+857.2 3.5
+858.5 3.5
+861.2 1.8
+871.7 6.5
+888.6 3.2
+889.5 6.9
+890.5 1.5
+947.6 3.5
+S	81	81	427.38
+I	ID	196
+I	RTime	9.6795
+Z	2	853.75
+127.2 1.5
+129.0 13.1
+130.3 1.2
+136.2 19.5
+138.1 1.1
+141.1 1.3
+143.1 1.0
+152.1 1.2
+154.9 2.2
+158.0 2.7
+159.9 1.2
+168.2 1.8
+175.2 4.9
+185.3 1.2
+197.3 1.1
+203.2 2.2
+209.3 2.0
+211.1 3.7
+218.9 1.5
+235.9 1.0
+238.6 6.9
+240.1 1.3
+241.1 1.3
+246.3 8.6
+247.3 1.2
+249.1 1.3
+251.2 5.5
+252.2 3.7
+256.9 1.1
+258.3 1.2
+268.5 16.1
+269.2 30.7
+270.9 2.9
+281.1 6.5
+287.0 19.1
+292.2 3.7
+296.3 2.5
+296.9 1.7
+298.7 7.6
+299.3 1.7
+300.1 2.5
+303.6 4.0
+312.1 6.1
+313.1 2.2
+318.5 4.8
+320.5 7.3
+323.3 7.0
+324.2 4.9
+327.2 1.0
+329.2 4.0
+330.0 4.1
+334.5 4.3
+337.4 2.7
+343.5 3.2
+347.3 5.3
+348.2 16.2
+349.9 40.2
+350.8 11.1
+352.2 1.6
+358.1 4.3
+361.1 1.5
+362.8 122.8
+363.8 9.8
+366.1 11.0
+368.2 7.3
+369.1 5.0
+369.9 3.0
+377.1 2.2
+378.4 2.4
+379.5 3.7
+382.4 1.7
+383.3 3.2
+385.3 3.2
+392.4 2.7
+394.2 13.3
+397.2 2.2
+402.3 4.5
+405.5 5.3
+409.3 8.1
+410.2 12.3
+411.2 9.5
+412.5 1.3
+417.8 31.8
+418.8 20.2
+440.5 1.6
+470.2 5.4
+472.0 3.5
+476.1 1.3
+477.5 4.5
+479.3 4.6
+493.2 3.0
+513.9 3.7
+527.2 7.1
+528.5 3.9
+547.5 3.0
+554.4 5.8
+570.7 2.0
+575.3 1.3
+577.1 2.9
+585.4 4.1
+586.5 9.5
+587.2 1.1
+599.4 1.8
+608.3 5.5
+609.1 4.0
+611.2 1.8
+612.6 2.9
+617.4 1.2
+619.9 2.4
+626.3 3.7
+627.5 1.3
+634.4 3.9
+639.0 1.8
+644.0 3.9
+669.2 2.2
+675.1 1.6
+679.3 1.5
+684.3 4.5
+690.6 1.6
+698.3 57.0
+699.5 20.2
+700.6 10.8
+705.5 1.5
+714.0 2.4
+715.8 3.2
+717.4 1.7
+723.4 6.5
+724.4 3.5
+726.4 5.9
+753.6 3.0
+830.5 1.2
+S	82	82	452.85
+I	ID	73
+I	RTime	3.3514
+Z	2	904.69
+Z	3	1356.53
+169.0 1.3
+179.0 1.0
+179.9 1.3
+185.2 2.0
+186.2 2.9
+197.1 3.2
+202.1 1.2
+210.0 3.0
+217.1 7.9
+218.2 1.6
+234.2 1.7
+236.2 3.0
+237.1 2.4
+237.8 1.5
+238.9 2.5
+248.1 1.0
+253.1 4.0
+256.8 5.9
+258.3 1.7
+263.3 1.8
+264.9 1.0
+269.1 1.2
+271.0 1.7
+283.1 1.0
+293.2 1.6
+294.0 1.3
+303.0 1.2
+307.4 8.8
+308.2 2.0
+312.9 1.5
+316.2 0.8
+319.1 4.6
+323.9 1.6
+325.1 57.2
+325.8 2.5
+329.1 2.2
+343.0 2.0
+345.8 2.2
+347.3 12.1
+359.7 1.2
+360.8 3.9
+370.3 2.4
+373.0 7.0
+375.1 2.0
+377.7 5.9
+379.3 1.1
+382.2 3.5
+384.4 3.4
+389.7 2.9
+391.1 3.7
+397.0 2.7
+398.7 2.4
+400.0 4.5
+407.1 1.5
+408.3 3.7
+409.7 3.2
+410.7 5.1
+411.3 3.7
+415.2 9.8
+416.0 8.5
+416.9 7.8
+417.7 3.7
+421.4 5.4
+422.9 1.5
+424.8 3.5
+426.2 7.5
+432.1 2.4
+433.2 24.5
+434.5 13.0
+435.4 3.0
+437.3 2.2
+439.3 4.5
+441.4 4.8
+444.0 25.5
+445.2 14.3
+451.1 1.7
+484.5 3.5
+485.5 8.5
+489.4 6.6
+490.6 7.5
+492.2 7.9
+508.1 3.2
+536.3 3.5
+541.2 29.3
+544.4 2.2
+547.2 2.7
+548.5 4.0
+549.8 6.5
+551.4 1.7
+557.9 4.0
+561.9 5.5
+565.2 3.9
+566.4 11.6
+567.6 5.1
+571.4 1.2
+580.1 2.2
+583.8 2.5
+586.8 14.6
+605.4 1.1
+613.3 3.4
+661.2 3.0
+676.5 2.0
+721.3 5.0
+778.7 2.2
+S	83	83	468.80
+I	ID	82
+I	RTime	3.8251
+Z	2	936.59
+Z	3	1404.38
+147.2 6.1
+151.1 1.3
+158.9 1.1
+161.2 2.0
+171.3 3.2
+172.9 1.2
+175.0 3.4
+181.1 4.3
+193.3 2.0
+195.0 7.0
+196.5 3.2
+199.3 2.0
+204.1 2.7
+208.3 3.2
+209.1 8.8
+209.7 4.9
+217.5 2.9
+222.2 2.2
+226.1 59.0
+227.2 2.7
+239.2 0.6
+240.3 2.7
+240.9 1.0
+244.2 87.0
+245.2 1.7
+248.3 5.6
+249.4 4.8
+252.2 1.7
+253.1 2.4
+254.0 3.2
+257.4 0.8
+258.3 6.5
+260.1 4.5
+263.3 2.0
+265.4 1.2
+266.1 6.0
+269.9 1.3
+272.5 1.7
+275.8 2.4
+277.2 2.7
+280.2 3.0
+281.3 4.0
+282.8 7.5
+289.4 2.9
+291.1 4.9
+292.1 0.8
+294.0 4.1
+296.3 0.6
+297.3 8.3
+299.3 0.8
+301.4 0.8
+305.3 1.5
+308.1 3.5
+309.3 1.2
+311.1 12.5
+312.2 11.8
+313.3 2.2
+322.0 24.0
+323.4 4.5
+324.0 6.4
+325.3 1.8
+327.3 2.0
+329.0 5.0
+329.6 3.7
+333.1 2.9
+337.0 2.5
+338.3 14.3
+339.2 13.3
+340.2 43.2
+341.2 81.1
+341.9 1.6
+347.3 47.5
+352.0 1.2
+353.2 8.8
+354.3 14.8
+356.6 5.4
+361.1 1.3
+362.3 4.3
+363.2 1.2
+364.3 2.5
+367.5 1.2
+368.6 7.4
+369.4 3.5
+376.4 2.2
+377.3 11.0
+383.2 1.6
+387.3 15.5
+390.9 2.2
+392.5 0.8
+394.2 5.0
+395.8 34.5
+396.5 22.8
+397.2 4.4
+400.5 10.8
+401.2 15.5
+403.6 3.9
+405.0 253.0
+406.4 5.5
+408.6 10.3
+409.4 10.5
+410.1 2.7
+411.5 12.5
+413.4 1.3
+415.8 33.2
+419.3 25.7
+420.3 17.7
+421.3 4.5
+422.2 15.3
+423.5 42.9
+424.8 11.5
+425.5 27.5
+427.2 13.6
+428.1 1.5
+430.0 32.2
+430.7 2.9
+431.5 2.5
+432.3 2.2
+433.2 10.1
+434.0 11.8
+436.2 8.3
+437.3 1.2
+438.3 3.0
+439.3 40.2
+440.0 6.3
+440.9 2.2
+442.5 1.3
+445.8 4.9
+447.0 5.4
+450.1 91.5
+451.1 177.0
+452.2 9.3
+453.3 1.5
+455.4 8.3
+460.0 1182.8
+461.0 9.1
+462.5 1.6
+485.7 4.9
+487.5 3.5
+498.5 1.3
+504.4 8.8
+505.3 9.8
+506.3 4.5
+507.3 6.0
+508.0 2.4
+508.8 1.0
+510.5 0.6
+520.6 1.0
+531.4 3.7
+536.6 1.7
+542.7 3.9
+545.5 63.5
+546.5 1.6
+564.5 5.5
+581.4 2.4
+583.7 1.8
+594.2 1.7
+595.3 3.4
+596.1 3.0
+598.5 0.8
+599.5 4.6
+601.6 3.2
+606.3 1.8
+615.8 2.7
+634.5 3.4
+651.4 5.3
+653.3 2.2
+654.4 2.4
+665.6 8.1
+666.8 1.7
+676.4 5.5
+688.3 5.5
+693.4 311.7
+694.4 109.1
+712.7 2.5
+721.3 0.8
+724.7 2.4
+734.1 3.2
+749.5 11.3
+762.7 2.5
+763.4 4.0
+785.5 2.4
+791.6 3.5
+808.6 10.3
+809.2 3.7
+819.8 2.0
+823.6 2.0
+836.5 1.3
+837.5 23.5
+838.3 6.5
+859.4 2.5
+877.7 2.2
+S	84	84	440.06
+I	ID	202
+I	RTime	9.9938
+Z	2	879.11
+129.1 1.7
+138.0 1.2
+148.2 2.2
+151.3 2.0
+155.3 2.2
+158.2 1.6
+172.9 1.5
+175.3 7.6
+178.3 1.8
+184.2 2.0
+189.0 0.8
+200.0 1.0
+201.3 1.2
+226.0 2.9
+237.3 2.2
+244.1 3.7
+245.1 1.2
+251.4 1.7
+255.0 1.7
+258.8 0.6
+261.1 1.2
+267.5 1.0
+275.1 1.2
+281.8 4.5
+285.2 2.0
+286.1 2.2
+299.1 1.5
+305.2 2.0
+307.3 1.0
+312.3 4.0
+317.1 1.7
+326.3 6.5
+327.4 1.2
+337.6 3.0
+342.2 6.4
+360.4 2.2
+361.2 3.0
+362.2 1.7
+369.1 1.8
+372.2 3.7
+378.7 1.2
+381.7 2.4
+386.2 2.7
+387.3 3.7
+390.4 11.0
+395.2 14.0
+403.4 1.3
+404.2 5.9
+405.1 1.7
+406.0 4.1
+408.6 5.0
+409.3 3.7
+421.4 46.7
+422.3 27.8
+423.4 18.7
+430.5 26.2
+431.6 25.1
+432.4 1.7
+433.3 8.6
+515.0 3.5
+518.3 2.7
+523.3 2.2
+546.5 2.7
+548.1 1.7
+551.2 3.2
+558.9 5.0
+561.2 2.4
+562.2 5.0
+564.6 1.8
+576.4 1.6
+587.2 2.4
+615.4 1.5
+634.4 1.6
+636.5 1.1
+649.1 1.2
+651.4 2.7
+652.3 2.5
+660.1 1.2
+677.1 8.3
+678.3 9.6
+704.3 2.2
+729.6 1.2
+749.4 5.0
+752.3 4.3
+778.8 1.8
+S	85	85	497.62
+Z	3	1490.84
+147.1 75.0
+156.1 47.0
+159.3 21.0
+168.2 29.9
+170.4 12.2
+200.0 16.0
+211.3 11.0
+217.5 16.0
+224.1 13.4
+225.1 43.2
+229.1 14.7
+234.2 195.5
+235.3 66.7
+242.2 80.6
+260.2 67.0
+262.2 236.5
+269.5 13.5
+272.9 28.8
+282.1 26.0
+285.9 31.1
+294.1 40.3
+297.0 37.7
+303.3 63.2
+317.4 566.6
+318.3 51.3
+329.3 331.9
+329.9 157.8
+330.8 21.4
+334.8 22.9
+338.9 132.4
+342.2 29.2
+343.7 328.1
+344.5 21.5
+346.3 35.8
+347.3 62.8
+351.4 26.0
+352.8 396.6
+353.5 28.3
+357.1 40.7
+358.4 117.0
+359.3 29.9
+371.0 33.2
+374.6 65.9
+375.3 88.0
+376.7 35.4
+380.8 24.8
+382.5 69.9
+384.6 324.3
+385.7 71.3
+391.4 22.7
+393.8 865.9
+394.9 78.2
+397.2 44.0
+398.0 52.2
+403.2 13.5
+403.8 33.0
+407.1 81.5
+408.1 25.0
+408.8 104.9
+416.3 581.0
+417.4 507.1
+418.9 16.0
+422.1 23.9
+422.8 62.8
+423.5 16.0
+424.2 89.6
+425.3 21.0
+427.6 61.2
+430.0 10.9
+431.2 11.0
+434.3 59.7
+435.3 21.0
+436.2 16.6
+438.8 27.6
+440.1 117.3
+442.1 51.8
+443.5 132.7
+446.4 101.9
+447.8 33.9
+450.5 24.8
+452.3 96.1
+453.5 144.8
+454.5 68.4
+455.3 26.0
+459.1 22.3
+460.7 52.5
+465.0 62.4
+466.4 105.6
+467.1 27.4
+468.4 33.8
+469.9 244.8
+471.7 87.2
+472.4 18.1
+473.9 590.2
+474.9 69.6
+476.8 17.7
+477.7 107.1
+479.1 16.0
+480.4 128.3
+481.4 128.4
+482.6 132.2
+483.4 153.1
+484.7 185.9
+485.5 80.7
+486.2 453.4
+487.6 87.0
+488.3 46.2
+488.9 218.4
+489.8 76.8
+504.2 121.1
+507.5 12.2
+511.3 39.8
+512.4 46.5
+517.7 38.2
+520.5 51.6
+522.2 77.5
+522.9 30.1
+526.3 18.8
+527.4 29.7
+529.4 39.3
+535.2 48.2
+537.9 155.8
+538.5 18.0
+544.4 824.0
+545.2 137.0
+548.6 37.4
+552.5 13.8
+553.5 62.5
+557.3 56.2
+558.5 16.0
+559.2 26.3
+559.9 29.2
+561.6 78.0
+563.5 79.5
+564.6 113.0
+567.8 98.4
+570.3 49.5
+571.2 23.2
+572.4 22.3
+573.1 41.4
+573.9 66.4
+575.6 42.7
+576.5 14.7
+577.7 12.2
+578.4 35.2
+582.2 19.7
+585.5 16.0
+587.3 581.8
+588.4 148.7
+589.2 135.6
+590.8 72.9
+591.5 75.1
+595.4 53.3
+596.1 31.1
+597.3 89.8
+598.2 47.4
+598.9 55.8
+600.5 20.1
+605.4 713.3
+606.2 37.5
+607.2 69.3
+608.1 62.8
+610.4 17.2
+612.7 30.2
+614.9 843.4
+615.8 439.1
+616.5 194.8
+618.8 141.1
+619.6 40.1
+622.3 71.8
+625.3 29.7
+628.7 70.8
+629.5 24.4
+635.6 59.1
+636.6 16.3
+637.8 58.8
+639.3 76.7
+640.4 38.9
+641.3 22.3
+642.7 88.5
+643.7 58.4
+645.0 153.2
+646.6 63.6
+647.4 66.7
+648.4 40.8
+650.2 38.9
+652.6 59.4
+654.8 21.0
+657.5 865.9
+658.5 302.6
+659.4 112.7
+663.5 42.0
+666.2 101.7
+668.7 154.5
+669.4 15.6
+670.2 68.5
+672.5 483.9
+673.5 98.9
+674.4 25.4
+677.3 44.7
+685.4 81.8
+686.3 522.8
+687.3 244.5
+688.3 12.3
+689.4 151.5
+692.4 18.8
+693.4 44.6
+695.3 19.8
+696.8 67.4
+697.6 36.9
+704.2 655.0
+705.3 126.1
+706.8 61.2
+716.1 23.0
+727.4 36.6
+738.6 21.1
+748.8 25.3
+750.7 44.9
+766.4 16.8
+768.3 71.1
+769.5 131.2
+781.2 23.6
+786.5 590.5
+787.5 253.1
+788.6 27.3
+792.2 27.3
+798.2 18.5
+799.4 16.6
+805.5 22.9
+815.7 122.2
+816.6 114.4
+817.4 82.0
+833.4 594.1
+834.4 88.0
+835.4 18.5
+840.1 13.5
+842.3 28.6
+856.9 16.0
+863.4 83.3
+874.4 22.3
+885.5 65.7
+886.4 17.6
+946.2 53.6
+1044.4 32.6
+1056.4 25.4
+1074.7 216.3
+1075.5 59.9
+1082.8 24.8
+1083.5 13.5
+1097.9 38.4
+1112.8 27.3
+1174.6 18.4
+1213.5 41.4
+1230.1 26.7
+1230.7 100.2
+1231.7 24.8
+S	86	86	713.07
+I	ID	182
+I	RTime	8.9765
+Z	1	713.07
+212.0 2.0
+247.2 8.3
+275.2 5.9
+276.9 1.7
+292.2 19.8
+323.4 1.7
+326.4 4.3
+340.1 1.2
+341.3 2.5
+366.1 1.0
+369.2 3.0
+377.1 4.0
+379.3 2.9
+384.4 1.1
+390.7 1.5
+391.6 2.7
+393.2 4.5
+395.3 1.1
+404.4 1.8
+420.3 2.0
+429.1 2.4
+438.2 14.3
+439.5 7.4
+440.2 1.7
+444.5 1.0
+446.2 3.4
+447.2 3.2
+453.1 3.4
+456.2 2.7
+457.6 1.6
+463.4 3.4
+465.1 2.2
+470.4 2.5
+475.1 1.2
+476.3 5.0
+479.4 1.0
+485.2 2.5
+487.2 3.0
+488.0 1.7
+492.9 3.5
+496.5 5.6
+497.1 1.6
+498.1 15.1
+499.3 11.5
+500.2 3.0
+505.2 7.6
+510.2 1.5
+511.2 2.2
+531.4 3.7
+538.4 6.0
+539.7 1.7
+550.4 6.0
+553.3 3.0
+554.9 4.1
+556.2 3.2
+563.4 1.7
+566.2 1.3
+567.1 4.3
+584.3 6.0
+585.4 1.2
+586.1 1.5
+592.1 9.3
+614.9 1.3
+618.5 4.0
+635.6 1.0
+652.5 2.9
+659.6 12.8
+660.9 5.0
+668.4 5.9
+677.8 14.8
+678.5 10.1
+680.5 2.7
+684.1 2.0
+694.3 10.6
+695.3 33.9
+696.2 20.0
+827.1 1.7
+849.6 1.7
+944.8 1.2
+1089.7 2.0
+1248.4 3.9
+1249.5 2.2
+S	87	87	501.13
+I	ID	214
+I	RTime	10.5914
+Z	2	1001.25
+Z	3	1501.37
+144.9 1.2
+148.1 1.2
+156.0 6.0
+157.4 5.5
+171.1 3.7
+175.3 1.7
+187.1 2.2
+192.9 1.3
+195.3 2.7
+199.1 1.2
+222.2 2.7
+227.1 3.9
+232.1 3.9
+233.1 4.0
+238.2 1.6
+239.5 1.1
+240.2 3.9
+244.2 19.1
+257.2 5.0
+258.1 12.3
+260.3 1.6
+266.2 3.0
+267.3 2.7
+268.1 1.5
+271.7 3.5
+273.5 2.4
+274.3 1.5
+275.2 3.5
+281.3 3.2
+283.1 13.8
+284.0 3.2
+285.1 5.3
+287.2 4.0
+297.4 3.0
+300.2 22.6
+303.1 1.7
+309.0 1.0
+312.4 2.2
+313.2 5.1
+314.2 2.4
+315.8 3.9
+317.3 1.6
+327.4 7.5
+330.3 1.8
+332.3 1.2
+338.3 2.9
+343.1 1.7
+344.0 2.2
+345.4 2.0
+350.6 1.1
+354.2 9.3
+355.4 7.8
+356.1 5.6
+366.4 2.2
+371.2 4.1
+372.2 12.1
+373.3 4.4
+378.2 2.2
+381.4 2.0
+382.3 3.9
+386.3 11.8
+388.4 6.4
+401.4 2.7
+406.3 2.0
+407.6 4.0
+409.3 2.7
+414.6 8.8
+415.3 1.5
+424.1 2.7
+429.0 3.0
+431.3 3.9
+434.7 1.7
+437.6 8.6
+439.2 4.6
+440.4 4.6
+441.5 4.5
+448.4 3.2
+449.3 8.8
+450.4 3.9
+451.3 3.7
+453.0 5.1
+455.1 11.8
+456.4 5.8
+457.4 1.2
+459.2 0.8
+460.2 1.3
+465.3 15.6
+466.4 26.0
+467.4 19.0
+469.1 2.7
+474.0 6.4
+479.3 5.9
+483.0 26.2
+484.2 87.5
+485.3 5.0
+486.2 1.7
+488.5 4.8
+492.1 52.5
+492.9 57.2
+543.1 8.0
+588.7 1.7
+596.5 3.0
+612.9 7.8
+615.3 3.2
+623.4 2.0
+629.5 12.1
+630.6 4.3
+636.2 2.5
+652.4 2.0
+658.2 1.5
+670.4 1.2
+673.5 5.6
+692.5 1.8
+696.4 1.2
+700.6 2.5
+705.3 2.5
+713.6 1.2
+715.5 1.2
+719.0 3.4
+743.1 9.1
+743.9 6.4
+755.3 3.0
+757.4 1.3
+794.6 1.5
+808.4 6.3
+824.5 3.2
+854.5 3.0
+856.5 6.5
+865.4 2.4
+S	88	88	419.32
+I	ID	218
+I	RTime	10.7855
+Z	2	837.63
+127.0 7.0
+128.3 1.8
+129.2 6.4
+130.0 1.3
+137.2 1.7
+144.1 7.1
+149.1 1.7
+155.0 8.3
+158.1 3.0
+161.0 3.2
+162.2 2.0
+168.1 1.6
+169.0 2.0
+171.2 2.5
+174.1 5.6
+175.1 25.2
+177.3 1.0
+178.2 1.3
+198.2 1.8
+200.6 3.5
+203.2 6.5
+204.1 2.5
+205.2 2.4
+208.3 6.9
+217.0 1.5
+218.2 1.0
+223.1 3.5
+226.2 9.8
+226.8 1.5
+228.4 1.8
+229.2 1.2
+235.2 1.5
+240.3 3.5
+241.2 2.7
+245.1 1.6
+246.3 2.5
+248.3 2.7
+249.2 3.9
+255.1 8.5
+256.2 2.2
+257.4 1.8
+260.1 6.9
+268.4 3.9
+272.4 15.1
+273.2 3.2
+274.2 1.2
+275.0 11.8
+277.5 7.0
+282.7 1.2
+283.3 3.9
+284.1 2.7
+286.2 2.5
+287.3 2.5
+288.3 4.3
+290.3 15.3
+291.3 13.3
+293.2 4.9
+300.7 2.7
+303.2 2.0
+304.2 29.6
+307.5 1.2
+310.2 1.1
+311.2 1.7
+314.4 1.5
+315.3 4.5
+322.2 4.6
+324.0 1.7
+325.4 1.2
+328.1 2.2
+329.2 22.3
+330.9 11.5
+336.0 1.7
+337.8 3.2
+340.9 7.0
+341.9 11.3
+346.8 4.6
+347.4 1.2
+349.0 7.6
+349.8 3.2
+352.1 1.7
+357.1 1.6
+366.2 1.2
+367.3 1.8
+370.1 17.5
+373.3 2.4
+375.3 3.4
+383.2 7.4
+384.3 19.7
+385.1 4.1
+386.7 9.3
+387.4 11.3
+391.0 4.9
+394.0 6.5
+395.1 1.1
+396.2 6.6
+399.2 1.7
+401.2 192.1
+402.3 29.7
+403.3 10.1
+404.7 4.5
+406.7 18.7
+407.6 13.0
+409.8 40.2
+410.9 34.9
+412.9 19.7
+437.2 3.7
+446.0 1.8
+468.3 2.0
+486.0 3.0
+491.2 11.5
+492.4 2.9
+508.4 4.6
+510.7 6.5
+520.9 1.3
+535.1 2.4
+537.7 1.5
+540.2 8.1
+541.9 4.4
+548.4 1.2
+551.3 4.3
+552.0 4.1
+554.3 36.4
+555.3 18.2
+556.3 1.8
+561.4 1.0
+565.1 2.2
+567.3 4.1
+589.3 2.9
+590.5 2.7
+594.0 4.5
+600.4 2.4
+605.6 1.7
+606.3 1.2
+609.2 1.7
+611.5 68.0
+612.4 12.6
+613.6 3.7
+620.7 1.8
+625.3 1.7
+628.6 2.2
+640.4 1.7
+644.3 2.2
+657.5 9.3
+662.4 1.2
+682.5 76.8
+683.4 22.5
+684.5 5.5
+689.4 2.0
+704.4 1.2
+708.7 2.2
+709.4 2.9
+720.3 2.4
+737.4 5.1
+S	89	89	452.85
+I	ID	222
+I	RTime	10.9799
+Z	2	904.69
+Z	3	1356.53
+129.2 2.5
+131.0 1.7
+148.3 1.6
+160.9 1.2
+164.1 1.3
+175.1 2.4
+180.0 2.0
+183.0 3.2
+184.1 22.1
+187.2 2.0
+189.4 0.8
+200.2 1.1
+201.1 5.5
+203.1 1.5
+209.0 1.7
+212.3 3.7
+216.2 5.4
+217.2 1.2
+218.0 1.3
+219.3 1.2
+227.2 1.7
+231.1 7.5
+234.2 1.1
+238.0 1.7
+239.3 0.8
+249.4 1.3
+250.1 2.2
+253.1 1.0
+254.1 2.2
+260.3 2.0
+262.0 1.7
+263.9 1.5
+272.2 1.8
+278.9 1.2
+290.1 3.0
+291.1 9.8
+303.5 1.2
+304.3 1.3
+306.1 2.2
+307.1 13.8
+307.8 4.3
+319.8 3.7
+321.4 2.2
+322.3 1.8
+323.1 1.7
+324.2 20.0
+325.3 7.9
+328.4 1.3
+338.3 27.6
+339.3 1.1
+340.0 3.2
+342.9 1.2
+345.4 3.4
+347.0 1.2
+357.3 2.2
+359.1 6.3
+360.6 3.2
+371.4 1.6
+378.1 2.2
+381.3 3.0
+389.0 1.6
+390.1 5.0
+392.2 1.6
+394.2 3.7
+395.5 1.1
+399.3 6.0
+400.4 7.0
+403.6 28.7
+404.6 5.1
+410.2 6.0
+411.3 4.9
+412.2 3.2
+413.1 1.1
+413.8 2.0
+416.2 9.5
+417.3 2.2
+418.3 13.6
+420.4 10.1
+426.3 11.0
+434.4 29.5
+435.3 124.4
+436.1 0.5
+441.5 6.6
+443.8 73.9
+444.7 3.0
+445.5 4.0
+447.1 4.0
+469.4 2.5
+475.1 3.2
+489.4 2.5
+490.4 1.7
+508.1 5.0
+515.4 2.2
+531.3 7.5
+549.3 3.2
+558.3 2.7
+565.1 11.6
+577.3 1.8
+578.7 2.0
+590.5 1.8
+601.2 3.2
+603.6 1.1
+609.4 2.0
+617.8 2.5
+628.5 1.2
+632.6 1.5
+657.5 2.0
+660.5 1.8
+661.4 3.4
+668.4 4.0
+678.4 20.2
+704.5 2.5
+712.4 6.5
+719.2 1.2
+743.2 3.4
+744.6 4.8
+747.4 2.7
+760.4 2.7
+776.4 5.3
+807.4 2.0
+854.6 1.1
+882.5 1.7
+S	90	90	1032.00
+Z	3	3093.98
+312.3 1.0
+315.3 3.4
+324.2 1.7
+325.4 6.8
+330.0 1.1
+338.4 0.6
+342.2 6.9
+344.0 1.0
+354.0 0.2
+356.2 0.2
+359.2 2.1
+361.4 2.0
+366.2 1.2
+371.4 5.8
+373.4 1.8
+382.5 4.3
+385.1 0.6
+386.0 0.9
+389.2 8.7
+390.3 2.3
+412.2 0.5
+413.3 2.8
+414.5 1.1
+415.2 0.4
+428.3 1.1
+436.6 0.4
+442.0 2.6
+443.3 2.0
+448.5 0.9
+452.9 6.4
+454.4 6.6
+458.6 3.6
+466.3 1.6
+470.3 1.7
+472.4 1.1
+494.0 6.0
+495.4 1.2
+496.4 1.5
+498.1 4.7
+500.6 3.9
+501.4 0.6
+504.5 11.1
+510.4 0.7
+519.2 2.1
+521.4 1.4
+525.2 1.7
+529.3 2.9
+533.9 2.9
+541.3 2.7
+548.4 4.0
+550.5 1.7
+551.4 2.7
+552.4 0.3
+554.3 2.1
+556.8 3.1
+569.5 0.5
+571.8 9.5
+572.5 14.6
+579.2 3.1
+580.3 2.5
+583.4 6.0
+584.3 0.6
+590.0 0.4
+593.3 1.8
+601.7 2.5
+608.1 2.6
+614.3 0.6
+616.4 1.8
+618.4 5.2
+620.0 0.7
+621.4 0.6
+625.2 5.1
+638.5 1.9
+639.7 3.8
+640.4 0.3
+641.7 1.7
+644.9 1.3
+646.0 4.3
+647.1 4.0
+648.1 3.0
+648.9 1.8
+650.4 4.1
+653.4 1.4
+666.7 3.3
+670.7 3.4
+672.4 2.4
+673.3 1.4
+674.2 1.2
+689.4 42.9
+690.3 8.6
+691.5 0.7
+693.0 3.7
+696.2 2.5
+697.7 1.7
+698.6 2.9
+700.9 2.2
+703.2 2.8
+707.3 25.0
+710.5 2.8
+713.6 0.5
+715.3 1.5
+716.5 1.0
+718.5 2.1
+719.9 0.7
+722.5 2.6
+724.6 4.6
+729.8 0.8
+732.9 0.8
+734.4 0.5
+736.3 2.0
+737.2 1.2
+740.6 1.9
+745.4 6.6
+746.5 1.6
+747.3 0.7
+749.3 1.4
+753.2 4.6
+753.9 1.6
+754.8 4.5
+756.2 4.9
+757.4 1.4
+758.8 7.2
+759.7 4.8
+760.6 4.8
+762.2 7.3
+763.0 3.0
+765.4 3.1
+766.5 5.3
+767.6 4.7
+769.1 19.7
+770.6 4.9
+771.3 100.9
+773.1 8.2
+774.6 1.8
+776.6 3.1
+778.1 399.8
+779.1 46.1
+780.1 5.4
+781.8 4.8
+783.5 2.6
+784.7 0.9
+786.6 0.9
+788.5 1.8
+789.4 1.3
+793.6 4.4
+795.5 4.9
+797.0 1.6
+801.3 1.3
+802.7 4.1
+803.8 3.5
+805.3 11.1
+808.4 0.3
+810.7 1.3
+811.6 0.8
+817.3 1.2
+818.5 2.8
+819.9 1.6
+820.6 3.1
+821.6 3.5
+823.4 0.5
+824.5 0.9
+825.4 7.2
+826.8 6.4
+827.6 2.9
+828.2 3.0
+831.1 5.0
+833.1 29.7
+833.9 11.9
+835.6 3.2
+836.3 6.0
+842.2 96.8
+843.0 9.4
+843.7 7.6
+845.4 3.1
+848.6 7.1
+849.4 2.5
+850.5 5.3
+851.3 3.1
+853.6 11.2
+856.5 5.9
+857.2 12.4
+858.2 2.7
+859.5 0.8
+860.5 6.5
+861.5 1.5
+863.8 2.1
+865.9 9.5
+866.5 1.9
+867.7 1.8
+869.1 1.4
+870.1 2.0
+871.0 4.4
+871.7 0.5
+875.1 1.8
+876.2 1.2
+877.0 5.4
+878.4 6.1
+879.2 13.3
+881.4 6.6
+883.2 5.6
+884.1 9.0
+885.0 1.6
+885.6 3.3
+886.5 0.7
+887.3 3.1
+888.0 0.5
+889.9 1.8
+890.7 3.6
+891.5 2.4
+893.6 2.7
+895.2 4.9
+895.9 10.6
+896.7 5.8
+898.0 2.1
+901.0 5.6
+904.5 2.7
+905.6 7.9
+908.2 4.2
+908.9 7.3
+909.7 6.5
+910.6 6.0
+911.6 2.5
+913.9 11.7
+916.2 9.4
+917.5 31.0
+918.2 11.8
+918.9 9.9
+919.6 1.8
+922.1 8.5
+924.0 2.1
+930.8 19.2
+931.8 19.6
+932.7 5.6
+934.2 8.0
+935.7 4.9
+936.7 6.9
+938.3 2.6
+939.2 7.0
+940.3 476.3
+941.2 33.1
+942.1 31.6
+943.2 18.1
+944.5 15.0
+945.2 2.3
+947.0 22.6
+948.2 9.9
+952.0 3.1
+952.7 8.0
+954.2 7.6
+955.1 4.9
+956.2 7.2
+957.1 3.0
+958.5 11.7
+960.2 14.7
+961.2 10.8
+963.5 6.4
+964.7 1.0
+966.7 5.7
+968.5 25.1
+969.3 8.1
+970.4 21.9
+971.8 16.9
+972.8 20.5
+973.8 9.9
+974.7 11.8
+975.5 12.1
+976.6 14.4
+977.2 162.4
+978.4 26.7
+979.3 16.7
+979.9 2.7
+980.7 1.2
+981.4 3.5
+982.6 12.9
+983.5 24.3
+984.4 12.9
+985.3 7.5
+986.6 1.8
+987.9 24.1
+988.7 1.7
+990.6 17.0
+991.7 24.6
+992.5 18.6
+993.3 14.4
+995.1 2.3
+995.7 7.9
+996.5 18.0
+997.2 10.7
+998.4 26.3
+999.8 15.3
+1000.8 18.7
+1002.1 3.8
+1003.5 2.7
+1004.4 20.9
+1005.4 15.6
+1006.4 36.1
+1008.5 40.0
+1009.3 34.8
+1010.4 9.4
+1011.1 15.0
+1012.9 23.6
+1014.0 7.6
+1014.8 9.2
+1015.4 8.1
+1016.3 18.1
+1017.4 27.6
+1018.4 1.4
+1020.6 17.0
+1022.4 5.6
+1031.1 1.2
+1031.9 1.1
+1032.9 2.0
+1040.5 0.3
+1041.7 4.6
+1047.0 1.6
+1053.0 3.6
+1056.8 2.2
+1058.6 3.0
+1060.6 1.9
+1061.4 0.2
+1063.5 0.4
+1066.7 0.5
+1067.5 1.4
+1069.5 1.8
+1070.6 4.2
+1077.5 5.7
+1079.1 2.6
+1080.9 4.5
+1083.6 3.9
+1087.5 11.4
+1088.5 1.0
+1089.5 7.8
+1090.4 7.1
+1091.9 5.7
+1094.2 3.1
+1098.9 1.0
+1100.9 4.0
+1102.3 8.2
+1104.6 4.8
+1105.6 2.5
+1109.0 7.6
+1110.3 5.3
+1111.3 0.7
+1120.6 1.0
+1124.4 2.7
+1125.8 4.3
+1133.3 1.0
+1135.0 1.3
+1137.7 2.4
+1138.7 8.4
+1141.0 0.8
+1142.6 128.0
+1143.6 53.8
+1144.7 6.5
+1147.0 26.3
+1147.8 1.1
+1148.8 5.4
+1149.7 11.8
+1150.6 1.9
+1154.5 2.5
+1156.5 2.8
+1158.0 1.8
+1159.0 1.9
+1160.6 3.5
+1163.3 3.5
+1166.2 34.1
+1167.0 1.2
+1167.8 2.6
+1169.7 0.8
+1170.7 2.5
+1171.4 7.4
+1172.7 4.0
+1177.3 6.8
+1179.6 5.0
+1180.5 3.8
+1181.6 7.5
+1183.2 14.2
+1184.8 5.8
+1186.4 0.7
+1189.9 10.8
+1191.1 4.2
+1191.7 1.8
+1192.7 2.4
+1193.8 5.5
+1195.3 20.9
+1196.3 2.4
+1197.0 2.8
+1198.5 45.5
+1199.4 22.8
+1200.1 2.1
+1202.1 6.3
+1203.6 52.8
+1204.4 45.6
+1208.6 5.8
+1211.5 3.1
+1213.7 22.6
+1214.7 17.2
+1215.9 13.8
+1216.5 211.0
+1217.7 107.3
+1218.8 2.5
+1219.9 4.1
+1222.3 10.0
+1225.2 5.3
+1230.6 3.0
+1232.9 3.1
+1235.6 2.9
+1237.4 3.5
+1239.3 48.9
+1240.3 8.3
+1241.6 2.0
+1242.5 3.8
+1245.9 10.1
+1247.9 42.7
+1248.8 14.1
+1250.3 5.5
+1251.6 1.5
+1254.6 1.7
+1256.6 4.0
+1259.4 3.0
+1262.1 3.1
+1264.7 4.1
+1266.0 3.7
+1272.1 13.8
+1274.7 0.4
+1276.1 1.8
+1276.7 2.4
+1277.6 12.7
+1281.5 2.5
+1283.2 23.0
+1284.0 15.9
+1284.6 1.7
+1287.0 3.0
+1287.7 1.7
+1291.2 5.0
+1293.8 1.3
+1296.1 4.8
+1297.2 16.3
+1304.1 2.7
+1306.8 1.4
+1307.4 0.4
+1308.2 8.2
+1308.8 0.6
+1309.7 6.8
+1311.4 1.3
+1312.2 1.9
+1313.5 3.0
+1316.9 5.0
+1319.1 10.8
+1319.7 3.0
+1321.5 3.2
+1322.7 2.1
+1325.4 1.6
+1328.6 21.3
+1329.6 26.2
+1330.7 1.0
+1338.3 0.9
+1340.5 0.7
+1342.2 15.8
+1343.1 0.7
+1348.7 1.9
+1349.5 5.8
+1353.3 14.1
+1354.0 10.4
+1354.6 10.3
+1362.3 19.5
+1363.1 2.3
+1366.5 1.5
+1369.8 1.4
+1374.2 2.2
+1376.6 5.9
+1378.1 16.1
+1379.0 1.3
+1387.1 2.3
+1388.5 9.7
+1390.5 0.5
+1392.5 3.2
+1394.6 11.8
+1395.6 2.3
+1396.5 4.3
+1397.3 1.9
+1399.5 13.5
+1404.1 1.8
+1406.8 3.3
+1408.1 1.7
+1410.2 3.4
+1411.5 1.2
+1412.7 52.8
+1413.5 22.5
+1414.6 27.6
+1415.6 3.2
+1418.7 5.0
+1420.4 7.4
+1422.2 1.6
+1423.5 1.6
+1425.2 1.0
+1426.4 6.8
+1427.0 10.0
+1428.8 1.9
+1431.2 1.0
+1435.5 2.6
+1436.6 4.3
+1438.1 2.9
+1450.3 5.6
+1456.1 2.1
+1456.8 4.2
+1457.9 3.5
+1458.8 1.2
+1463.3 2.5
+1464.2 3.7
+1465.4 6.7
+1466.3 4.9
+1467.2 9.9
+1468.4 1.7
+1469.9 0.5
+1470.7 2.3
+1472.1 5.1
+1474.5 12.7
+1475.2 30.8
+1475.9 16.5
+1477.1 0.3
+1477.8 1.8
+1479.3 3.5
+1480.5 3.1
+1481.8 1.7
+1482.7 1.7
+1484.4 7.1
+1485.3 0.6
+1486.5 1.8
+1488.1 3.0
+1490.6 7.8
+1491.4 5.7
+1493.6 4.2
+1501.8 1.8
+1504.7 4.1
+1505.6 1.0
+1507.6 2.2
+1511.7 3.0
+1512.6 3.8
+1515.6 0.3
+1518.8 1.2
+1520.8 0.6
+1522.7 22.5
+1523.5 15.9
+1524.3 3.3
+1527.1 2.4
+1528.9 1.0
+1534.9 2.9
+1536.6 11.1
+1537.8 5.0
+1540.0 44.1
+1540.7 129.8
+1541.6 72.8
+1542.7 25.0
+1544.6 3.2
+1545.8 7.5
+1546.9 1.3
+1554.2 20.5
+1554.8 109.4
+1555.8 49.3
+1556.8 22.1
+1558.9 0.7
+1566.2 1.1
+1579.8 3.9
+1591.9 1.2
+1607.6 1.2
+1609.5 2.5
+1613.7 1.9
+1619.6 6.6
+1620.5 1.3
+1621.1 1.5
+1628.9 3.2
+1630.6 3.8
+1639.3 0.7
+1649.7 2.0
+1667.0 1.4
+1670.2 3.8
+1673.5 3.1
+1680.7 1.0
+1682.3 3.3
+1683.9 5.8
+1687.0 0.9
+1688.8 4.3
+1697.2 1.6
+1715.2 3.4
+1719.0 1.4
+1726.2 3.0
+1745.6 5.7
+1749.2 6.2
+1751.8 1.3
+1759.3 2.5
+1760.2 0.3
+1761.4 7.1
+1764.1 1.6
+1773.2 0.3
+1802.4 4.4
+1813.3 0.9
+1821.2 1.2
+1838.2 3.7
+1840.0 1.6
+1854.0 1.1
+1862.8 2.1
+1864.0 2.3
+1865.4 2.4
+1880.0 3.2
+1882.6 1.2
+1884.1 2.5
+1886.1 1.2
+1894.7 1.4
+1895.5 1.4
+1902.4 0.7
+1909.4 0.7
+1912.8 0.9
+1913.4 0.4
+1918.8 0.2
+1927.0 2.5
+1934.8 1.4
+1935.9 4.2
+1946.8 1.3
+1951.4 2.3
+1953.2 10.1
+1954.0 17.3
+1966.7 1.7
+1983.6 0.6
+S	91	91	466.09
+I	ID	200
+I	RTime	9.8921
+Z	2	931.17
+155.0 1.0
+175.3 37.9
+184.3 2.7
+190.2 2.0
+195.3 3.2
+205.1 1.2
+218.1 9.0
+232.8 4.1
+249.4 3.2
+257.5 3.5
+258.3 6.4
+261.2 1.7
+264.2 2.5
+274.2 2.2
+276.2 6.0
+281.3 3.2
+284.1 1.2
+288.1 5.0
+289.2 2.2
+292.1 13.3
+301.1 1.1
+307.1 2.4
+309.9 1.2
+313.3 1.2
+316.0 4.1
+319.1 4.4
+320.1 3.9
+329.1 1.6
+338.2 14.3
+341.4 1.8
+342.3 4.4
+349.1 3.2
+351.3 6.5
+354.0 1.5
+356.5 1.8
+357.3 12.5
+358.6 12.6
+362.0 1.7
+365.1 4.5
+367.1 1.8
+375.4 11.3
+381.6 4.9
+385.1 2.4
+392.9 1.7
+399.2 3.0
+401.3 7.8
+407.4 1.5
+408.9 6.6
+412.8 2.2
+414.5 1.8
+416.6 3.2
+425.3 3.2
+429.3 2.5
+430.2 5.5
+431.2 15.8
+432.5 5.3
+434.6 4.0
+445.0 2.5
+448.4 30.0
+449.1 37.5
+449.8 14.3
+450.4 4.0
+457.2 48.0
+457.9 3.7
+497.5 2.5
+499.5 2.7
+503.3 2.0
+525.5 1.8
+533.2 3.4
+559.6 1.7
+567.4 7.3
+575.3 9.3
+579.5 1.2
+604.4 8.6
+606.7 1.8
+633.4 5.3
+637.1 3.0
+639.4 3.5
+656.2 21.5
+657.5 4.1
+667.5 1.7
+674.6 1.7
+675.4 1.1
+713.3 2.2
+714.5 1.3
+732.3 1.2
+735.5 2.7
+741.6 1.8
+767.5 1.7
+784.2 1.6
+785.6 2.0
+786.6 6.4
+792.4 1.8
+793.3 4.9
+802.4 3.5
+803.6 8.6
+804.3 5.4
+892.8 1.3
+S	92	92	497.28
+Z	3	1489.82
+147.0 73.6
+171.5 9.4
+173.2 18.1
+175.1 15.3
+187.1 12.0
+198.2 23.0
+200.7 12.0
+201.4 58.4
+202.3 5.0
+212.4 35.9
+213.1 20.3
+216.9 27.2
+226.2 15.4
+229.1 11.3
+234.0 232.9
+242.3 115.4
+243.2 61.8
+245.2 16.9
+248.1 36.2
+251.2 32.7
+252.1 16.1
+254.3 12.6
+256.5 35.5
+259.0 18.2
+260.1 90.8
+262.0 279.3
+269.2 43.9
+271.0 16.8
+272.2 18.8
+277.3 24.4
+280.8 7.3
+282.0 11.3
+283.2 29.4
+284.1 19.8
+284.8 36.1
+285.9 33.9
+290.9 19.5
+294.2 39.9
+295.4 9.9
+300.4 32.1
+302.2 10.8
+306.3 7.9
+308.2 10.9
+309.4 21.0
+311.5 21.7
+313.1 9.2
+314.4 18.2
+315.5 14.7
+317.3 345.0
+318.2 14.0
+320.6 58.1
+321.3 12.7
+323.4 9.8
+325.0 7.9
+327.5 14.0
+329.4 210.7
+330.3 144.4
+332.5 6.4
+336.7 9.3
+338.7 107.6
+340.4 23.8
+342.3 28.6
+343.7 404.2
+344.3 33.1
+345.3 18.1
+347.2 24.1
+348.3 68.1
+349.3 21.1
+352.6 286.2
+353.2 56.6
+359.9 119.2
+361.3 35.0
+362.3 14.8
+363.3 68.1
+364.2 12.6
+365.4 54.3
+366.4 84.2
+367.6 81.0
+368.3 16.5
+371.2 7.1
+371.9 6.4
+374.1 14.0
+375.2 147.7
+376.3 81.1
+377.2 12.8
+377.9 65.2
+378.6 15.5
+379.9 43.8
+381.6 59.4
+382.8 74.2
+383.5 23.6
+384.9 345.9
+386.0 9.8
+387.3 54.5
+388.4 18.2
+390.3 16.1
+391.2 28.6
+393.8 637.7
+394.5 30.2
+396.4 37.6
+397.9 40.3
+399.2 45.5
+400.0 11.3
+400.8 14.9
+402.2 47.5
+403.4 11.2
+404.8 16.1
+407.1 11.4
+408.4 94.5
+409.5 64.0
+410.5 13.3
+411.3 31.0
+412.7 14.1
+413.9 131.5
+416.2 400.2
+417.3 282.5
+418.4 12.7
+420.0 28.6
+423.2 97.9
+424.0 16.3
+426.1 111.3
+427.1 42.0
+428.0 13.3
+428.7 98.1
+430.5 77.8
+431.3 28.5
+431.9 76.4
+435.2 439.6
+437.9 31.3
+438.6 45.3
+439.3 65.3
+441.4 101.3
+442.4 35.6
+443.2 192.9
+443.9 40.8
+444.8 33.3
+445.7 45.9
+448.0 22.0
+451.6 52.4
+452.2 82.4
+453.2 36.4
+453.9 47.3
+457.4 59.3
+459.6 90.4
+460.6 132.3
+461.8 58.1
+465.0 24.6
+466.0 97.9
+467.2 66.6
+468.9 47.4
+469.5 53.8
+470.5 109.4
+471.8 134.2
+472.4 75.0
+473.8 561.1
+474.9 42.6
+475.7 92.9
+476.7 88.7
+477.6 84.1
+478.5 83.3
+479.4 522.4
+480.6 64.1
+482.4 303.9
+484.0 54.4
+485.2 499.0
+485.9 102.0
+486.7 122.1
+487.7 279.5
+488.7 326.1
+504.1 29.3
+506.4 33.6
+509.1 14.7
+522.3 20.3
+524.4 34.8
+525.3 15.6
+527.4 119.8
+528.7 48.4
+529.4 14.0
+530.4 51.5
+532.5 26.6
+537.7 177.0
+539.1 22.4
+540.2 40.3
+541.1 63.8
+542.3 15.4
+544.4 833.2
+545.5 73.1
+548.3 35.5
+555.2 5.8
+558.4 15.4
+559.4 82.4
+570.1 22.7
+571.7 66.7
+572.7 19.8
+573.6 99.0
+574.7 114.2
+578.7 86.0
+579.7 67.4
+586.2 67.0
+587.4 483.6
+588.8 92.0
+590.2 50.7
+591.0 31.2
+591.8 53.5
+593.6 27.9
+595.4 36.9
+601.3 31.3
+603.6 81.3
+605.2 516.9
+606.2 154.4
+607.1 143.5
+610.1 14.0
+611.4 68.7
+614.2 105.6
+614.9 576.3
+615.6 264.7
+616.7 85.9
+620.4 75.4
+622.3 16.8
+623.7 27.4
+626.8 52.7
+631.8 54.2
+633.3 6.4
+634.3 22.0
+635.4 27.8
+637.3 52.1
+640.4 28.1
+642.8 52.8
+643.5 64.8
+644.4 237.0
+645.0 100.6
+647.3 12.0
+650.5 55.9
+651.3 17.7
+652.3 202.8
+657.5 617.5
+658.6 30.8
+660.5 111.5
+663.3 179.9
+665.3 46.9
+666.5 41.6
+669.4 88.9
+670.3 85.5
+671.0 38.8
+672.5 341.2
+675.6 20.2
+678.8 134.4
+679.6 122.3
+680.8 8.5
+684.0 63.2
+685.2 86.4
+686.3 229.6
+687.2 42.9
+688.3 8.4
+692.3 33.9
+693.2 37.5
+695.5 30.6
+696.5 11.5
+697.3 50.0
+704.4 462.0
+705.5 23.8
+711.5 42.1
+718.5 37.7
+725.6 22.1
+727.1 18.9
+740.6 37.8
+765.8 67.3
+767.7 11.5
+768.7 104.9
+769.6 8.2
+774.7 14.8
+781.7 38.6
+786.5 820.2
+787.1 20.8
+787.7 122.9
+795.5 26.2
+797.1 44.5
+815.4 69.0
+816.3 61.3
+822.2 23.8
+823.4 10.5
+828.1 28.1
+833.3 635.7
+833.9 47.6
+834.5 36.1
+837.5 11.2
+840.6 33.3
+860.4 11.3
+864.2 24.5
+866.6 19.6
+877.2 29.3
+885.9 30.6
+887.4 65.1
+912.3 10.5
+928.4 27.1
+946.6 12.2
+951.3 17.0
+956.8 70.4
+969.5 6.4
+970.5 45.1
+980.2 15.6
+986.5 24.4
+1056.8 12.2
+1058.3 29.9
+1069.8 29.7
+1082.7 64.0
+1083.6 9.5
+1103.5 33.8
+1131.5 23.0
+1195.5 16.2
+1230.6 103.6
+1231.8 91.9
+S	93	93	693.03
+Z	2	1385.05
+199.2 9.8
+204.2 37.6
+210.2 11.1
+214.2 28.9
+215.3 7.4
+216.5 9.4
+217.2 39.3
+218.0 9.3
+219.5 16.9
+221.8 9.9
+224.0 25.7
+226.2 78.5
+226.9 31.7
+228.0 14.0
+232.4 15.1
+234.6 52.7
+237.4 11.3
+240.2 6.2
+241.1 13.1
+242.3 11.3
+243.4 8.1
+244.3 106.0
+245.2 57.4
+247.2 11.1
+250.3 8.0
+254.2 17.3
+256.1 36.4
+257.1 18.0
+258.3 7.0
+260.2 74.1
+262.3 223.5
+263.1 24.3
+272.3 8.2
+274.2 723.7
+275.3 70.7
+277.4 11.6
+278.4 6.2
+279.1 13.6
+280.7 9.7
+283.4 16.5
+284.1 8.3
+285.5 18.8
+286.3 13.9
+289.4 7.9
+293.7 7.1
+298.3 26.0
+299.4 7.3
+302.3 148.4
+303.3 27.8
+306.3 6.4
+308.1 31.2
+309.2 14.8
+310.2 16.1
+314.4 7.1
+315.1 40.8
+317.4 9.3
+318.1 19.1
+320.1 26.1
+320.9 23.4
+322.8 18.1
+324.1 32.0
+325.5 14.2
+327.5 20.7
+329.3 123.1
+330.3 71.1
+335.2 59.9
+336.2 12.7
+338.4 7.7
+344.0 38.6
+348.1 28.3
+351.2 14.1
+353.3 28.6
+354.3 34.4
+355.8 40.5
+356.7 120.5
+357.5 4.3
+358.3 19.7
+360.0 20.7
+362.3 43.4
+362.9 26.4
+364.3 14.1
+365.2 33.3
+367.2 8.5
+369.5 28.3
+370.5 38.3
+371.4 84.6
+372.4 129.2
+373.2 280.2
+374.3 68.4
+378.3 39.2
+381.4 14.3
+383.0 57.7
+385.3 24.7
+386.1 17.6
+387.5 8.2
+389.1 94.3
+390.3 559.2
+391.5 66.7
+392.3 24.8
+395.4 66.0
+401.2 674.9
+402.2 72.7
+404.3 90.0
+405.1 37.2
+406.4 30.9
+409.3 19.9
+411.4 12.7
+412.3 50.5
+414.4 28.3
+415.4 18.6
+419.2 263.3
+420.3 144.1
+425.3 17.2
+425.9 22.6
+426.5 9.5
+427.5 10.4
+429.4 34.1
+431.4 102.8
+432.7 93.4
+433.4 62.6
+434.5 19.1
+435.1 12.2
+438.6 21.7
+442.5 11.5
+443.2 33.4
+444.5 23.1
+445.4 7.6
+446.5 7.5
+449.5 93.0
+453.1 17.9
+454.0 14.3
+457.7 52.6
+458.4 10.6
+461.3 1761.5
+462.4 280.9
+463.4 57.8
+464.5 24.8
+469.1 29.9
+470.2 5.6
+471.2 5.1
+472.4 31.4
+473.2 42.7
+474.3 75.3
+475.1 23.1
+476.4 44.0
+479.1 27.9
+480.4 19.7
+482.4 37.5
+483.2 41.7
+486.4 24.0
+487.5 126.2
+488.5 42.3
+489.4 49.3
+490.4 15.8
+493.5 21.4
+494.9 81.1
+495.9 34.2
+496.8 13.3
+498.0 49.6
+500.1 115.2
+500.8 9.1
+501.6 7.3
+508.0 62.9
+509.8 72.6
+510.4 3.8
+512.9 64.4
+513.6 4.7
+515.5 30.5
+516.5 38.8
+517.3 4.2
+518.5 268.3
+519.2 12.4
+520.1 13.6
+523.4 10.4
+524.7 17.2
+527.8 107.2
+528.5 35.1
+529.7 99.0
+530.4 36.8
+531.3 219.4
+532.0 97.2
+532.7 28.4
+533.8 29.8
+534.6 11.6
+536.3 287.2
+537.5 59.5
+538.2 23.3
+542.4 36.0
+543.5 48.5
+544.6 33.6
+545.4 74.4
+546.2 100.4
+547.5 61.5
+550.5 105.1
+555.4 8.6
+556.8 55.1
+557.5 61.8
+558.2 30.0
+559.7 69.8
+561.3 91.4
+562.5 7.6
+563.4 15.0
+564.9 70.4
+566.4 52.5
+568.5 39.4
+571.4 28.4
+573.8 34.0
+574.4 600.3
+575.4 162.9
+576.2 61.8
+577.0 13.9
+577.6 35.2
+578.9 44.3
+579.5 93.5
+581.3 74.8
+582.0 24.9
+583.5 9.9
+585.5 25.7
+586.5 11.4
+588.1 44.4
+589.3 75.8
+590.4 48.6
+591.1 56.7
+593.1 415.1
+594.1 71.4
+597.0 412.8
+597.9 137.9
+599.6 137.9
+600.4 10.1
+601.2 36.4
+603.5 8.1
+604.6 58.6
+605.9 1138.9
+606.9 85.1
+608.2 97.9
+609.5 23.5
+610.8 240.6
+611.7 5.6
+612.4 34.6
+613.4 44.6
+614.9 17.0
+615.9 72.3
+617.4 82.7
+618.4 67.4
+619.6 174.7
+620.4 74.5
+621.9 64.8
+622.5 27.0
+624.1 65.5
+625.8 85.0
+626.6 12.7
+627.5 86.0
+629.2 110.0
+630.6 85.9
+632.4 19.2
+633.3 165.8
+634.4 157.2
+635.6 120.2
+637.5 31.3
+638.3 47.9
+639.5 28.6
+640.5 102.6
+641.2 13.6
+642.4 24.5
+643.9 181.6
+645.5 322.6
+646.3 94.0
+647.4 113.7
+648.5 17.7
+649.2 43.6
+650.1 19.2
+651.3 317.4
+652.1 54.1
+654.5 95.5
+655.5 36.9
+656.7 179.4
+658.0 4598.3
+659.2 202.4
+660.1 88.3
+661.3 135.1
+662.1 140.5
+663.3 49.8
+664.9 78.5
+666.4 82.3
+668.3 16.7
+669.1 8.7
+670.0 92.6
+671.0 69.5
+671.7 32.9
+673.7 571.7
+674.4 594.8
+675.4 439.7
+676.3 148.4
+677.2 68.8
+678.6 139.9
+679.4 11.4
+680.1 80.1
+680.8 75.1
+683.0 4304.3
+684.2 632.2
+687.6 34.8
+704.2 29.6
+705.4 21.5
+709.4 17.3
+710.1 22.8
+711.4 8.9
+712.4 29.2
+714.5 20.2
+715.3 5.7
+716.2 5.2
+717.8 60.3
+718.4 37.4
+720.2 38.9
+721.5 10.9
+723.4 46.1
+726.2 55.8
+727.4 20.1
+728.4 14.9
+729.6 12.7
+731.2 35.7
+732.5 616.1
+733.5 90.7
+734.4 45.0
+736.5 4.5
+737.8 64.7
+738.6 141.3
+741.4 64.1
+742.5 32.9
+746.5 23.2
+747.4 15.0
+749.9 72.1
+750.6 66.0
+751.5 21.4
+752.2 32.4
+754.7 17.9
+755.9 37.7
+757.4 10.8
+759.4 39.7
+764.0 4.5
+767.8 109.5
+768.5 34.8
+769.3 86.6
+771.6 89.3
+772.6 25.3
+773.3 180.0
+774.3 12.4
+776.3 46.8
+778.8 72.5
+779.6 26.6
+781.5 11.9
+782.7 141.9
+784.7 53.0
+787.6 41.4
+789.5 13.1
+790.2 17.7
+791.3 330.7
+792.2 34.6
+793.0 41.4
+793.7 10.4
+795.2 34.0
+796.1 44.5
+797.2 446.1
+800.6 30.2
+801.7 5.7
+802.6 113.3
+803.5 45.1
+804.4 30.6
+806.6 6.3
+808.2 26.3
+809.3 246.3
+810.2 24.2
+811.5 48.0
+813.6 17.7
+815.3 26.3
+817.5 90.5
+818.4 12.5
+819.5 40.7
+821.5 110.5
+822.2 51.6
+823.5 16.4
+825.4 71.2
+827.9 14.0
+828.6 29.7
+829.6 51.2
+830.8 9.6
+835.7 10.9
+837.0 33.2
+838.5 13.6
+839.4 23.5
+842.4 62.4
+843.8 18.4
+846.8 47.6
+847.4 812.6
+848.5 275.4
+849.4 54.1
+850.7 19.6
+851.7 27.6
+852.7 55.1
+853.5 15.8
+854.7 51.7
+857.5 18.2
+860.9 16.4
+862.3 21.7
+865.3 93.2
+866.1 57.5
+867.4 20.5
+868.3 20.9
+870.6 11.7
+873.3 109.8
+875.6 19.2
+877.1 9.4
+880.5 11.1
+882.7 4.4
+883.5 54.6
+884.8 64.2
+886.3 299.6
+887.4 168.7
+889.4 12.7
+892.7 23.0
+893.3 21.2
+895.5 70.5
+896.4 30.0
+897.2 4.5
+899.2 116.9
+900.5 43.7
+902.7 59.5
+904.4 462.0
+905.4 120.7
+913.5 14.7
+914.7 34.4
+915.4 48.0
+919.4 80.9
+922.4 1025.9
+923.6 179.9
+924.5 57.5
+928.9 18.6
+930.9 22.6
+933.0 106.0
+933.8 105.1
+935.1 38.2
+936.0 72.8
+937.2 176.9
+938.0 60.5
+939.7 58.1
+940.5 42.8
+942.3 24.7
+943.6 32.9
+945.5 46.8
+946.4 38.3
+947.1 98.0
+949.6 24.7
+950.8 11.7
+951.6 77.4
+952.3 17.0
+953.8 47.9
+955.8 7.0
+957.4 63.1
+958.6 11.5
+959.6 27.4
+963.6 14.0
+964.8 40.5
+966.5 13.8
+967.6 26.1
+968.8 11.1
+969.7 20.0
+970.3 16.4
+975.5 341.0
+976.3 114.7
+977.6 32.8
+979.7 33.5
+980.6 26.0
+987.3 208.3
+988.4 12.5
+989.7 58.9
+993.4 492.9
+994.5 1174.4
+995.5 167.0
+996.1 13.1
+996.8 88.3
+998.0 67.9
+1008.0 13.1
+1009.5 56.7
+1014.6 18.8
+1018.4 27.5
+1020.7 4.4
+1021.6 37.3
+1023.6 15.5
+1026.4 38.1
+1027.2 12.8
+1032.0 11.2
+1032.7 5.1
+1033.7 8.2
+1034.6 28.3
+1038.7 28.3
+1042.4 41.4
+1047.6 35.8
+1048.4 42.8
+1049.6 35.7
+1050.5 48.8
+1051.6 43.4
+1052.4 39.3
+1053.6 154.7
+1055.6 14.4
+1062.7 33.5
+1064.5 32.0
+1066.4 13.3
+1068.6 84.4
+1078.1 34.5
+1079.6 16.3
+1082.5 25.4
+1083.5 42.9
+1086.5 43.3
+1087.5 40.3
+1092.9 13.8
+1094.7 26.0
+1098.9 14.9
+1099.8 10.3
+1100.6 71.9
+1101.4 16.2
+1103.6 93.3
+1104.6 104.5
+1105.7 18.7
+1107.4 10.7
+1108.5 13.1
+1121.6 470.9
+1122.8 126.8
+1123.8 252.4
+1124.9 60.0
+1125.8 6.7
+1126.7 33.8
+1127.9 16.6
+1139.0 13.6
+1139.6 12.8
+1141.7 110.9
+1143.7 48.3
+1144.5 19.4
+1148.4 19.4
+1150.6 3.4
+1153.6 14.4
+1154.5 26.4
+1158.7 27.8
+1159.5 14.3
+1161.1 63.3
+1161.9 26.7
+1164.8 12.4
+1165.7 33.0
+1167.0 19.8
+1172.5 19.9
+1178.9 65.5
+1180.0 59.4
+1186.5 41.4
+1187.3 30.0
+1190.9 13.2
+1192.6 15.9
+1195.5 16.7
+1196.3 13.0
+1197.7 62.5
+1198.7 25.7
+1202.7 49.8
+1208.8 7.6
+1210.6 1050.3
+1211.8 269.9
+1212.7 74.2
+1213.4 83.8
+1215.7 22.3
+1218.8 48.3
+1219.6 10.1
+1224.6 12.2
+1225.5 13.6
+1235.6 42.0
+1236.3 126.1
+1236.9 78.3
+1238.1 53.0
+1240.1 43.2
+1245.3 24.0
+1249.0 19.7
+1252.6 20.9
+1253.9 18.1
+1255.5 9.9
+1256.8 29.9
+1284.0 17.0
+1308.9 22.8
+S	94	94	669.44
+Z	3	2006.30
+195.2 3.9
+197.8 31.4
+199.1 111.2
+200.1 29.0
+202.9 10.0
+208.1 29.4
+209.1 18.3
+211.3 37.4
+213.1 47.2
+214.1 16.5
+215.1 4.3
+218.2 3.7
+222.4 5.1
+225.0 28.4
+226.0 122.2
+227.2 6.4
+228.1 8.5
+229.9 5.3
+235.2 4.1
+236.2 12.2
+237.2 8.6
+242.1 7.5
+244.2 199.6
+245.3 24.3
+249.0 12.8
+253.2 13.4
+255.2 64.7
+256.0 22.2
+256.9 19.8
+258.1 7.2
+264.0 4.8
+265.9 5.7
+270.2 8.7
+273.2 84.2
+274.0 6.0
+276.3 6.1
+281.1 15.6
+283.3 53.9
+284.2 102.9
+287.2 3.2
+288.3 74.2
+290.0 22.5
+294.3 33.3
+295.1 26.7
+296.1 5.4
+299.2 5.1
+300.5 15.8
+301.1 224.3
+302.3 29.3
+303.5 6.7
+304.3 8.6
+308.3 7.5
+312.1 222.2
+313.1 25.2
+314.3 19.8
+315.2 85.0
+319.1 5.1
+320.1 10.8
+323.2 5.2
+324.3 11.1
+327.2 21.7
+328.2 23.8
+332.2 13.0
+335.2 8.8
+338.3 4.5
+342.2 8.1
+343.2 7.8
+347.4 5.7
+350.2 21.9
+351.2 30.5
+352.4 21.2
+357.2 11.5
+358.0 18.5
+359.2 36.7
+364.0 7.5
+365.0 18.8
+366.2 9.0
+368.2 84.1
+369.3 95.7
+370.2 15.6
+372.7 16.1
+375.3 19.8
+376.0 12.8
+379.4 3.4
+382.1 87.2
+383.5 12.4
+384.7 4.7
+385.7 35.9
+386.4 664.1
+387.3 109.1
+388.5 16.8
+389.3 13.6
+393.5 12.8
+396.3 296.0
+397.3 23.2
+398.4 6.9
+401.9 4.1
+405.2 7.4
+407.2 3.5
+408.4 43.0
+410.2 8.0
+412.6 10.4
+414.2 1027.4
+415.2 132.8
+416.2 28.1
+417.3 10.5
+419.4 9.2
+423.6 8.6
+426.3 4.6
+428.6 19.7
+429.9 36.0
+432.3 12.3
+435.6 42.3
+437.5 6.0
+439.2 27.3
+440.1 16.9
+441.2 36.3
+445.0 242.7
+445.9 47.9
+448.9 22.3
+451.3 46.0
+454.4 18.8
+455.3 10.6
+456.2 44.7
+458.2 48.7
+460.5 3.1
+465.3 81.3
+466.3 41.9
+467.2 6.8
+469.4 34.1
+472.7 23.4
+474.3 16.2
+476.3 19.0
+481.5 11.0
+483.3 6.8
+487.3 57.9
+488.5 20.7
+490.3 32.3
+492.6 7.8
+494.2 5.8
+495.2 35.5
+497.2 74.9
+501.5 164.7
+502.4 18.9
+503.3 5.3
+504.3 6.0
+505.3 11.5
+506.3 9.8
+508.5 43.5
+509.3 36.4
+510.3 5.4
+511.2 3.5
+512.3 6.3
+512.9 15.7
+515.3 19.9
+516.7 29.9
+517.3 3.3
+520.3 125.7
+521.3 64.6
+522.3 9.7
+523.6 5.5
+526.1 100.0
+529.0 18.5
+529.9 8.4
+531.6 287.8
+532.6 116.0
+539.2 57.2
+541.7 19.4
+543.1 39.7
+544.5 19.8
+545.3 30.4
+546.3 34.9
+548.5 23.1
+549.4 17.8
+550.8 65.4
+551.6 86.0
+552.4 6.2
+554.0 39.0
+556.2 136.0
+557.2 77.5
+558.3 14.0
+560.2 23.1
+562.3 20.6
+563.3 17.9
+564.0 19.0
+565.3 12.9
+566.7 33.6
+567.6 47.8
+568.8 34.4
+569.5 181.6
+570.3 117.1
+571.2 10.9
+572.2 3.9
+572.8 11.7
+574.3 162.2
+575.3 105.2
+576.4 17.7
+577.4 8.0
+581.2 16.5
+582.6 84.1
+583.2 26.5
+583.9 30.3
+585.5 26.2
+586.6 39.5
+587.3 13.5
+588.5 263.4
+589.4 74.6
+590.1 14.7
+591.5 26.6
+594.1 10.5
+594.9 19.5
+595.9 46.2
+596.8 11.2
+597.9 82.0
+598.9 19.4
+599.6 36.0
+600.9 25.8
+601.7 4.7
+603.2 29.0
+605.5 30.5
+607.2 41.1
+608.2 17.5
+610.7 42.0
+612.3 23.2
+614.3 13.8
+615.7 224.3
+616.8 31.4
+617.7 11.6
+618.6 60.1
+620.1 21.4
+621.1 99.7
+621.7 3421.0
+622.9 50.9
+623.5 49.4
+624.5 88.9
+626.0 46.3
+627.3 125.4
+628.3 84.2
+629.2 63.7
+630.8 440.6
+631.6 265.9
+632.5 55.4
+633.6 251.2
+634.2 242.7
+635.1 48.3
+636.3 31.9
+637.3 64.6
+638.2 217.0
+638.9 44.8
+640.6 183.0
+641.5 70.9
+642.4 127.2
+643.3 5.4
+644.2 11.8
+645.2 97.8
+646.2 24.1
+647.6 251.2
+648.5 6.2
+649.7 72.3
+650.7 127.2
+651.6 149.1
+652.5 54.0
+653.6 42.6
+654.7 59.6
+655.7 62.7
+656.3 19.7
+657.8 123.0
+659.0 49.6
+660.1 188.1
+660.9 2.6
+662.0 38.8
+666.8 6.7
+671.0 51.7
+672.3 53.1
+673.2 31.3
+676.4 11.2
+679.9 26.5
+681.6 621.2
+682.4 146.7
+683.5 65.7
+684.6 17.3
+685.4 24.3
+686.3 13.0
+687.4 20.9
+688.3 23.4
+689.3 16.8
+690.7 38.7
+692.1 57.7
+694.6 155.3
+695.4 24.1
+697.3 22.6
+699.9 8.7
+700.8 42.5
+703.4 34.9
+704.4 34.6
+705.1 31.7
+706.7 32.7
+707.8 9.7
+708.5 12.5
+711.2 12.9
+711.9 18.7
+714.4 2.8
+717.1 1870.0
+718.0 281.2
+719.1 95.3
+720.8 35.1
+723.6 62.9
+724.4 21.0
+725.1 15.2
+725.8 10.0
+728.2 123.8
+729.6 139.2
+730.3 56.5
+732.4 192.4
+733.4 53.6
+734.7 123.1
+735.7 84.4
+736.4 29.3
+738.4 19.8
+740.5 25.7
+741.4 20.0
+742.2 44.9
+743.5 182.0
+744.6 171.3
+745.6 41.4
+746.5 67.9
+747.4 60.2
+748.6 6.2
+749.4 28.3
+750.5 7.2
+751.7 13.7
+752.9 70.8
+754.2 12.0
+756.3 22.9
+761.3 19.6
+763.3 20.9
+765.6 26.2
+767.6 10.3
+768.7 66.2
+769.8 11.4
+771.6 11.1
+773.8 21.7
+775.7 16.4
+779.3 26.2
+780.3 14.0
+781.8 6.1
+782.9 142.5
+784.1 36.2
+785.7 5.1
+786.4 21.9
+788.3 202.7
+789.0 117.4
+791.8 25.9
+792.5 17.1
+793.5 7.7
+797.2 11980.4
+798.1 2728.0
+799.1 115.3
+799.7 39.6
+800.7 88.9
+801.4 35.6
+803.4 37.1
+804.0 18.5
+804.9 10.7
+805.6 3.0
+806.5 13.2
+808.4 7.9
+809.3 37.3
+810.4 32.5
+811.6 40.0
+813.1 4.2
+814.3 48.2
+815.5 19.7
+817.9 5.7
+818.5 32.6
+819.7 106.4
+820.7 39.6
+821.6 35.5
+822.3 51.6
+823.0 28.4
+823.8 43.0
+825.2 9.7
+827.4 35.7
+828.2 31.5
+829.3 42.8
+830.2 5.7
+832.7 10.2
+835.3 198.8
+836.2 154.5
+837.1 50.0
+838.3 87.1
+839.1 111.6
+839.9 38.4
+840.6 18.8
+841.5 39.8
+843.4 18.9
+844.1 16.7
+845.0 69.3
+845.6 8.2
+846.4 48.4
+847.1 17.5
+848.4 68.6
+849.5 58.1
+851.0 9.3
+853.5 971.9
+854.2 1569.4
+855.0 58.6
+855.7 47.4
+856.4 32.7
+857.8 189.2
+858.7 169.3
+859.4 17.2
+860.1 16.4
+860.8 9.6
+861.5 21.6
+862.5 22.6
+863.6 25.3
+865.4 35.0
+866.2 17.1
+868.1 5.2
+869.5 14.7
+871.2 120.6
+872.4 23.9
+873.4 124.6
+874.3 50.5
+875.3 39.5
+876.2 27.4
+879.2 44.4
+880.2 23.8
+881.9 5305.4
+882.6 7577.9
+883.5 867.2
+884.6 65.3
+885.6 38.8
+886.7 41.6
+887.5 22.8
+888.3 21.7
+891.5 6.9
+892.4 30.4
+894.0 32.8
+894.9 140.8
+895.9 180.2
+896.7 57.1
+897.3 56.4
+898.8 13.6
+900.3 142.1
+900.9 3.9
+901.8 58.9
+902.6 12.8
+903.9 10.2
+905.4 12.7
+906.2 80.8
+907.3 37.0
+908.1 3.1
+910.4 23.0
+911.0 17.9
+912.2 81.2
+913.5 75.1
+914.5 291.7
+915.3 43.6
+916.1 51.2
+917.7 6.2
+919.5 17.8
+921.6 64.8
+922.5 19.5
+923.4 26.3
+927.8 67.9
+928.7 90.0
+929.6 31.9
+930.6 138.5
+931.7 223.2
+932.7 47.8
+934.2 16.5
+936.1 137.7
+936.8 65.0
+937.7 7.4
+938.4 4.6
+940.0 9.7
+940.8 29.9
+941.6 9.0
+943.0 75.3
+944.7 25.4
+945.5 14.9
+946.5 9.8
+947.3 22.3
+949.3 20.6
+950.5 18.8
+951.9 61.5
+952.7 6.4
+954.2 81.7
+955.4 82.6
+956.3 5.7
+957.3 10.6
+960.6 63.1
+961.3 4.0
+962.4 7.1
+966.6 9.3
+972.5 8.5
+974.6 10.7
+975.6 7.8
+976.6 10.0
+977.9 6.0
+979.4 19.0
+980.0 7.8
+984.7 13.7
+987.3 18.0
+988.6 6.7
+990.6 12.7
+996.2 4.5
+997.8 16.9
+998.5 11.3
+1001.7 69.0
+1002.8 13.7
+1005.1 36.7
+1006.1 61.4
+1007.3 11.4
+1008.4 16.5
+1010.3 6.2
+1011.2 12.0
+1013.5 23.8
+1014.6 7.5
+1020.5 5.8
+1023.3 15.3
+1027.6 22.2
+1029.7 11.9
+1031.6 24.9
+1032.6 18.8
+1033.6 11.5
+1039.3 32.1
+1043.5 5.1
+1047.3 5.3
+1048.9 8.4
+1051.7 7.0
+1052.4 12.2
+1053.3 16.3
+1054.5 3.7
+1055.6 32.5
+1059.2 16.5
+1069.5 4.2
+1070.6 9.0
+1073.5 69.5
+1074.7 37.0
+1075.6 13.0
+1084.0 18.2
+1085.5 11.0
+1088.9 20.7
+1093.0 6.3
+1096.6 5.7
+1098.9 7.6
+1099.7 9.8
+1100.7 24.8
+1101.3 28.3
+1105.7 9.7
+1110.9 6.6
+1112.6 8.7
+1115.5 3.8
+1118.6 41.8
+1119.8 80.5
+1120.7 11.4
+1121.6 7.1
+1126.5 5.5
+1133.6 20.7
+1134.6 17.7
+1135.6 21.1
+1136.3 7.9
+1139.7 7.3
+1145.3 6.5
+1146.4 4.7
+1148.5 16.1
+1154.3 11.0
+1156.5 9.3
+1157.7 6.3
+1159.4 4.7
+1160.6 12.5
+1161.5 5.1
+1162.3 15.0
+1163.2 12.0
+1170.4 43.0
+1171.3 10.3
+1173.7 15.0
+1174.8 36.9
+1182.1 4.4
+1186.6 24.6
+1188.0 12.7
+1188.7 24.6
+1189.4 10.5
+1190.0 16.5
+1198.5 12.1
+1200.6 11.3
+1207.6 11.6
+1225.3 6.7
+1226.4 11.1
+1240.5 6.7
+1243.4 49.0
+1244.6 17.2
+1245.8 8.8
+1254.8 6.2
+1256.5 5.3
+1258.3 25.5
+1260.5 17.3
+1262.4 13.2
+1277.6 27.8
+1299.0 7.4
+1299.9 37.8
+1300.6 26.7
+1301.8 6.7
+1306.7 5.5
+1346.1 5.1
+S	95	95	1004.46
+Z	2	2007.91
+294.3 42.5
+301.2 17.3
+311.1 28.1
+326.4 25.7
+332.2 14.2
+339.1 10.3
+356.3 11.6
+363.4 22.9
+369.3 21.6
+370.3 26.5
+371.5 10.7
+372.8 5.7
+384.4 5.0
+386.5 32.4
+390.5 6.8
+404.2 37.1
+407.5 26.8
+408.2 25.3
+414.1 39.3
+416.3 22.8
+418.0 11.0
+426.5 17.7
+436.3 16.3
+439.5 52.4
+445.6 18.5
+447.0 24.6
+450.5 20.3
+461.3 4.2
+465.5 6.4
+470.5 12.7
+471.2 9.0
+472.3 50.3
+475.1 19.6
+478.4 5.1
+482.3 33.6
+483.5 14.9
+484.6 6.5
+486.0 14.4
+487.7 11.8
+488.4 19.5
+503.2 22.5
+510.4 6.1
+514.0 30.3
+515.5 22.5
+520.4 292.1
+521.5 88.4
+522.3 12.4
+527.5 6.0
+531.2 31.2
+532.2 10.0
+533.4 10.9
+536.5 6.1
+544.1 9.6
+545.3 12.1
+546.3 7.2
+548.4 15.9
+556.0 7.5
+557.3 5.8
+559.5 16.7
+561.6 9.2
+562.8 11.4
+565.0 14.2
+567.3 15.3
+574.0 11.1
+578.3 3.6
+579.4 10.5
+585.2 9.4
+586.2 26.7
+587.5 26.5
+592.3 5.8
+595.5 11.1
+596.5 16.1
+599.1 26.0
+600.3 11.4
+602.2 8.1
+604.3 28.3
+604.9 9.4
+607.2 22.3
+608.3 12.5
+609.7 20.7
+612.5 7.0
+615.2 30.8
+617.4 29.6
+620.6 19.0
+629.1 22.6
+631.5 29.1
+634.6 106.2
+635.4 100.5
+636.6 4.8
+639.6 30.6
+642.0 23.4
+643.0 7.0
+647.2 13.3
+658.2 12.6
+660.3 27.4
+665.7 11.9
+669.1 26.4
+670.4 30.2
+678.2 52.9
+681.5 37.3
+683.5 3.5
+686.4 7.5
+688.4 4.9
+689.1 25.6
+690.6 66.9
+693.6 6.3
+699.2 7.5
+700.4 41.1
+702.7 20.8
+711.3 44.3
+714.0 81.2
+715.1 73.1
+717.8 10.4
+724.4 18.9
+725.2 9.4
+726.7 11.2
+728.2 40.6
+732.4 403.9
+733.5 114.3
+734.5 41.7
+736.5 55.4
+737.8 32.5
+741.3 41.2
+744.4 48.1
+745.3 23.5
+746.3 36.3
+747.4 78.3
+748.3 24.7
+751.0 30.1
+752.3 23.3
+755.5 13.0
+756.6 20.4
+758.6 51.5
+760.3 32.5
+761.5 41.2
+762.8 67.3
+765.5 51.9
+766.4 6.3
+773.5 16.0
+775.5 13.9
+777.5 41.3
+782.9 27.5
+783.6 6.2
+785.9 8.1
+787.5 9.6
+788.8 25.5
+792.1 92.6
+793.1 30.7
+797.1 35.7
+798.1 38.3
+799.1 15.1
+800.3 16.3
+801.5 69.6
+802.4 17.0
+803.7 26.7
+805.0 17.9
+810.5 27.5
+813.2 11.6
+814.0 23.3
+814.9 44.2
+817.1 19.0
+819.0 22.9
+827.2 31.3
+828.7 14.5
+830.2 93.7
+831.3 44.2
+833.7 38.2
+835.4 11.2
+837.5 41.9
+838.8 66.3
+839.4 10.5
+840.3 50.8
+841.2 45.0
+848.6 48.1
+849.2 107.7
+853.4 76.2
+854.3 100.3
+855.3 32.9
+856.7 28.6
+857.4 67.1
+858.5 14.8
+859.9 30.4
+861.5 10.0
+862.5 20.9
+864.8 34.0
+870.0 39.0
+871.7 38.1
+873.8 71.0
+874.8 44.6
+876.3 17.6
+877.6 7.0
+878.5 12.5
+882.1 252.9
+883.0 110.9
+883.7 29.2
+886.4 24.4
+887.4 14.1
+888.4 222.5
+889.4 152.5
+890.4 33.8
+891.6 44.0
+893.0 36.8
+894.7 23.2
+896.5 43.9
+898.3 13.1
+899.2 53.0
+901.7 18.9
+902.6 22.9
+906.4 11.2
+910.2 26.0
+913.0 28.5
+914.2 52.9
+916.5 28.0
+917.8 46.6
+919.4 80.0
+922.3 10.2
+923.3 95.1
+924.0 23.3
+928.3 30.5
+929.7 78.1
+930.5 128.3
+931.7 155.9
+932.9 65.9
+937.2 159.4
+938.6 39.9
+939.8 14.0
+940.9 24.3
+945.2 35.0
+948.2 9.1
+951.3 8.2
+952.1 8.4
+955.6 34.6
+957.2 11.8
+957.9 153.9
+959.5 57.8
+960.2 6.5
+963.4 38.5
+964.5 22.4
+965.6 17.4
+966.9 10.9
+969.1 48.1
+970.6 12.7
+971.6 10.3
+972.5 25.3
+973.5 38.0
+974.6 25.6
+976.4 32.8
+978.4 145.1
+979.5 57.4
+981.4 39.9
+982.6 130.9
+983.4 33.8
+986.0 149.5
+987.5 147.6
+988.3 28.0
+991.0 17.5
+994.2 48.2
+994.9 415.8
+995.7 96.0
+1012.3 7.2
+1018.4 27.6
+1023.5 28.7
+1024.2 16.9
+1026.5 5.6
+1032.6 59.5
+1042.3 12.6
+1043.4 13.3
+1046.2 29.3
+1047.5 16.5
+1049.8 11.9
+1056.6 29.5
+1057.9 31.3
+1064.6 19.3
+1068.6 46.1
+1076.4 44.4
+1082.2 16.4
+1083.0 15.6
+1083.7 7.3
+1085.3 52.7
+1086.5 13.6
+1090.3 49.0
+1097.5 11.6
+1098.3 4.4
+1100.5 89.8
+1101.6 51.2
+1102.3 12.8
+1111.6 9.1
+1115.5 7.9
+1117.3 11.8
+1118.2 66.6
+1120.7 31.7
+1121.8 12.8
+1127.6 44.8
+1130.8 4.2
+1133.6 4.1
+1139.0 22.8
+1151.6 35.8
+1152.7 30.0
+1162.1 30.8
+1163.7 20.6
+1169.7 43.3
+1170.5 14.9
+1176.3 89.1
+1179.4 9.2
+1183.5 17.8
+1186.5 24.6
+1187.6 17.2
+1189.7 29.7
+1191.6 12.0
+1196.4 11.2
+1204.3 7.8
+1216.9 54.7
+1217.7 32.8
+1218.5 11.0
+1226.4 18.5
+1234.0 8.6
+1240.7 39.5
+1242.5 33.7
+1243.4 35.8
+1245.4 3.8
+1246.2 42.9
+1247.3 8.6
+1248.7 8.3
+1249.5 9.7
+1257.6 20.3
+1258.3 14.0
+1259.0 12.6
+1261.0 70.7
+1261.7 90.0
+1262.7 40.1
+1263.8 18.1
+1264.7 35.4
+1266.3 12.6
+1274.5 597.5
+1275.5 250.3
+1276.4 171.5
+1277.6 133.8
+1278.3 31.6
+1279.0 27.4
+1281.5 31.1
+1288.8 12.4
+1292.5 13.2
+1294.2 84.3
+1296.9 31.4
+1299.6 37.5
+1300.5 4.0
+1301.6 41.2
+1304.3 27.9
+1311.7 5.1
+1313.4 6.5
+1316.0 11.3
+1317.3 46.5
+1318.4 19.3
+1321.0 11.6
+1321.7 13.5
+1322.4 42.5
+1326.6 28.7
+1328.4 9.7
+1331.8 6.2
+1340.9 47.8
+1342.5 28.7
+1344.0 61.8
+1344.7 24.3
+1345.7 20.4
+1346.8 32.9
+1348.8 23.7
+1357.5 14.1
+1359.2 44.4
+1360.4 28.3
+1361.5 53.5
+1362.6 131.6
+1363.8 73.8
+1364.5 9.1
+1371.4 85.8
+1372.4 167.7
+1373.5 54.1
+1375.0 20.9
+1380.6 4.1
+1381.7 8.6
+1383.3 9.1
+1385.9 20.9
+1387.5 22.4
+1390.0 54.1
+1391.8 19.4
+1395.5 11.6
+1405.7 42.7
+1413.0 23.5
+1414.5 16.9
+1415.8 15.8
+1422.8 40.0
+1430.6 24.2
+1432.3 30.5
+1432.9 78.8
+1433.8 61.5
+1434.8 21.6
+1436.7 10.3
+1440.8 32.7
+1441.8 18.3
+1443.1 63.8
+1445.2 31.6
+1447.6 12.2
+1457.8 16.8
+1466.8 21.4
+1468.0 20.2
+1474.2 28.2
+1475.5 9.0
+1478.7 11.0
+1486.5 423.6
+1487.6 394.8
+1488.8 216.4
+1489.7 54.9
+1490.8 15.1
+1493.5 10.9
+1509.8 41.5
+1511.3 52.8
+1513.5 12.5
+1522.3 28.4
+1535.0 10.1
+1548.4 9.1
+1555.9 6.7
+1565.6 37.2
+1569.6 9.6
+1571.5 7.5
+1575.7 43.2
+1576.4 16.4
+1577.5 30.6
+1578.7 33.7
+1583.0 12.9
+1592.8 38.4
+1593.7 66.6
+1596.0 33.1
+1599.7 111.8
+1600.8 19.9
+1602.0 60.2
+1617.4 26.1
+1618.8 34.5
+1629.4 6.5
+1635.9 6.1
+1654.8 46.1
+1671.8 7.0
+1676.5 17.5
+1677.7 19.4
+1685.2 5.5
+1695.5 13.9
+1699.7 36.1
+1703.5 80.9
+1704.6 6.5
+1707.0 33.6
+1712.6 108.6
+1713.9 205.1
+1715.0 95.5
+1716.7 5.0
+1747.2 15.0
+1747.9 9.1
+1785.2 17.5
+1801.6 4.9
+1844.7 9.5
+1860.4 7.0
+1861.1 9.9
+1862.2 12.2
+1863.2 10.5
+1880.3 17.4
+S	96	96	652.24
+Z	2	1303.47
+186.8 188.4
+196.2 138.2
+197.3 296.6
+198.2 48.8
+200.3 248.7
+201.2 584.4
+202.0 189.1
+207.2 159.8
+210.2 47.3
+212.3 128.9
+214.2 288.1
+215.2 1179.2
+216.4 136.5
+217.2 99.5
+218.1 178.1
+219.3 70.2
+222.2 292.3
+223.3 128.1
+225.1 223.3
+226.2 228.7
+227.4 324.5
+229.1 3616.7
+230.2 514.4
+232.2 217.9
+236.3 33.1
+239.4 287.4
+240.2 239.6
+241.1 78.4
+243.1 122.3
+243.9 168.7
+245.0 769.2
+245.8 403.5
+254.5 367.8
+257.2 534.2
+258.3 3045.5
+259.2 255.3
+260.2 281.8
+261.0 90.2
+263.1 57.9
+265.2 317.5
+271.3 815.6
+272.3 716.9
+273.4 143.3
+274.2 381.0
+275.2 5675.1
+276.4 503.1
+277.3 288.9
+278.1 110.0
+280.4 79.5
+281.3 126.4
+282.1 260.7
+283.1 63.1
+284.4 216.4
+286.1 83.7
+290.4 103.3
+293.3 143.8
+294.1 87.5
+295.3 287.7
+297.5 201.5
+298.3 93.1
+299.3 102.6
+300.2 715.8
+300.9 190.8
+305.2 375.3
+307.3 93.8
+309.0 50.8
+310.3 62.9
+311.3 527.9
+312.4 182.4
+313.5 254.0
+314.4 150.8
+316.1 194.4
+318.5 151.1
+320.3 106.5
+321.1 57.0
+322.7 61.5
+324.4 109.6
+325.2 172.5
+326.1 82.4
+328.0 1851.3
+328.7 145.9
+329.4 1029.0
+330.3 948.3
+331.4 223.5
+332.5 140.1
+333.4 46.3
+336.2 685.3
+337.0 76.1
+338.5 995.0
+339.4 111.1
+340.3 91.8
+341.5 346.1
+342.2 143.6
+344.2 1635.0
+346.4 14718.7
+347.3 4960.8
+348.2 144.2
+351.2 97.3
+352.3 67.2
+354.3 4077.6
+355.3 1007.8
+356.4 440.4
+357.1 177.3
+358.2 3465.1
+359.2 644.4
+360.2 180.3
+361.4 288.8
+362.5 260.2
+367.2 89.4
+369.4 203.0
+370.2 1477.3
+371.1 715.4
+373.3 216.7
+375.2 763.6
+376.3 165.4
+377.5 97.0
+378.8 289.5
+379.5 51.7
+381.1 84.9
+383.0 81.7
+383.8 233.4
+384.9 66.4
+387.4 177.0
+388.2 154.9
+389.3 141.2
+390.5 290.4
+391.4 112.8
+396.2 679.1
+397.4 706.6
+398.9 221.7
+403.4 60.6
+404.6 198.4
+405.2 95.3
+406.8 258.0
+408.5 122.1
+409.5 157.0
+410.3 52.1
+411.3 756.2
+412.2 906.1
+413.0 162.6
+414.7 300.4
+415.3 1896.5
+416.6 243.0
+417.2 78.9
+421.0 113.1
+422.3 2444.1
+423.5 554.4
+424.2 91.1
+425.2 1910.3
+426.5 781.4
+427.4 583.9
+428.5 716.1
+429.2 311.8
+430.4 254.2
+431.3 362.1
+433.3 30.3
+434.4 268.3
+435.4 127.4
+438.2 656.8
+439.2 1067.0
+440.6 480.9
+441.3 300.0
+442.6 969.0
+443.3 5654.2
+444.5 1633.9
+445.4 10787.9
+446.5 975.6
+447.4 473.8
+448.4 195.0
+449.3 234.9
+450.2 1602.4
+451.2 591.5
+452.0 47.0
+453.2 1170.3
+454.7 396.9
+455.3 490.9
+456.3 767.9
+457.3 2827.8
+458.6 1429.5
+459.5 1218.0
+460.4 837.0
+461.4 340.4
+464.7 236.0
+465.4 39.4
+466.4 897.7
+467.3 3825.1
+468.3 2385.5
+469.1 272.4
+470.5 568.7
+471.3 1656.6
+472.3 1180.2
+473.3 1554.4
+474.3 1141.4
+475.7 375.8
+476.4 3194.4
+477.4 961.0
+478.4 468.7
+479.2 121.2
+479.8 448.2
+482.2 287.9
+483.1 295.5
+484.3 308.1
+485.2 512.9
+486.3 1331.2
+487.3 1769.4
+489.0 5659.5
+489.9 1797.7
+492.4 611.3
+493.6 70.3
+494.8 302.0
+495.4 223.4
+496.1 140.6
+497.3 119.7
+499.4 245.9
+500.5 201.2
+501.4 596.0
+502.3 668.7
+504.0 329.9
+505.4 551.6
+506.0 117.2
+507.3 934.0
+508.2 1213.6
+509.0 776.9
+510.0 447.6
+510.9 253.3
+511.6 328.0
+512.3 466.8
+513.2 135.4
+514.2 439.3
+515.3 627.5
+516.9 896.1
+517.7 985.6
+518.5 555.8
+519.4 183.5
+520.5 491.7
+521.3 193.6
+522.4 756.9
+523.3 365.4
+524.3 811.9
+525.3 602.0
+526.2 611.4
+527.2 661.3
+528.3 1097.7
+529.4 461.9
+530.2 97.8
+531.1 250.6
+532.0 402.9
+533.0 321.3
+533.8 284.8
+536.2 900.1
+537.3 7697.5
+538.0 7912.0
+539.4 938.7
+540.2 661.0
+542.2 789.1
+543.0 1784.8
+544.2 2056.5
+545.7 494.9
+546.5 271.7
+547.3 357.4
+550.3 1582.2
+551.7 3315.8
+552.4 1271.8
+554.2 6142.8
+555.4 1289.8
+556.4 80.8
+557.3 229.4
+558.6 560.6
+560.4 11139.5
+561.3 3411.2
+562.2 471.2
+563.5 4978.2
+564.6 3077.1
+565.6 1454.6
+567.1 829.1
+568.2 2937.8
+569.1 302.2
+570.3 2274.3
+571.4 1355.9
+572.3 16041.7
+573.4 3310.2
+574.4 657.6
+576.2 587.5
+577.5 1623.5
+578.5 1060.4
+579.4 406.8
+580.1 464.2
+581.4 285.3
+582.3 689.0
+583.4 1244.1
+584.7 601.1
+586.1 2260.1
+587.1 1587.2
+588.3 512.6
+589.3 205.0
+590.4 255.1
+591.7 232.9
+592.3 349.9
+593.1 355.0
+593.8 224.8
+594.8 386.9
+595.5 1147.4
+596.6 392.1
+597.8 753.2
+598.7 955.1
+599.6 1296.2
+600.4 981.8
+601.5 1121.6
+602.2 217.8
+603.0 398.3
+604.0 367.1
+605.3 535.4
+606.3 519.1
+607.5 197.0
+608.4 808.0
+609.3 1091.9
+610.6 396.3
+611.6 753.2
+612.3 333.8
+613.8 755.4
+614.9 342.5
+615.7 1760.6
+617.4 71901.3
+618.4 25285.9
+619.6 3733.0
+621.1 1908.4
+622.0 1133.7
+623.1 515.5
+625.1 2631.8
+626.2 1100.7
+627.5 782.9
+628.6 1728.0
+629.4 2529.7
+630.6 2084.0
+631.4 401.5
+632.5 1874.0
+633.4 2852.5
+634.2 5641.4
+635.2 2752.2
+636.5 2055.6
+637.3 235.2
+638.3 627.1
+639.3 1935.9
+640.3 2221.0
+641.8 9064.2
+642.7 36868.8
+643.6 6024.0
+644.8 359.0
+645.6 789.2
+646.5 85.4
+647.8 270.5
+656.7 238.4
+657.3 1415.4
+658.5 1477.1
+659.5 341.6
+660.6 1352.1
+664.7 555.0
+667.3 6328.9
+668.5 2180.1
+669.6 4477.6
+670.6 1168.3
+671.7 484.7
+672.5 613.1
+673.9 623.9
+676.4 2059.1
+677.4 1555.4
+678.8 2644.6
+679.7 320.5
+680.8 149.1
+681.5 649.5
+682.5 217.1
+683.3 115.2
+685.3 31278.6
+686.3 8705.5
+687.3 3329.3
+688.3 518.4
+689.4 591.3
+691.7 540.4
+692.5 694.2
+693.3 482.6
+694.5 167.5
+695.6 671.0
+696.3 400.5
+697.4 116.6
+698.4 213.3
+700.3 441.2
+700.9 99.8
+701.6 336.3
+702.7 290.0
+703.5 856.5
+704.3 403.5
+705.2 104.1
+705.9 141.6
+710.4 255.8
+711.2 76.6
+712.8 4496.5
+713.6 3785.0
+714.6 637.8
+715.5 300.6
+716.7 367.3
+717.4 451.1
+718.3 275.3
+719.6 478.8
+720.4 2572.6
+721.4 1710.6
+722.4 754.1
+723.2 660.4
+723.9 2899.4
+724.6 1144.1
+725.2 870.3
+726.3 612.8
+727.3 46.4
+728.4 196.4
+730.4 29516.6
+731.4 10958.0
+732.5 6067.8
+733.7 1648.6
+735.0 178.8
+736.7 592.7
+738.3 1574.2
+739.1 373.0
+740.4 557.7
+741.8 789.6
+742.4 5804.3
+743.4 3571.0
+744.6 220.3
+746.0 129.6
+747.5 180.3
+752.1 647.5
+753.5 300.8
+754.6 210.8
+756.1 336.7
+756.7 101.3
+758.3 269.2
+760.9 1148.8
+761.7 183.8
+762.7 69.2
+764.6 278.7
+769.4 2029.1
+770.5 1459.1
+771.7 85.8
+772.6 264.7
+773.5 2928.1
+774.5 63.4
+775.5 107.9
+777.5 541.7
+778.5 781.8
+779.4 228.5
+780.4 651.7
+781.2 469.1
+782.0 2575.1
+782.8 2840.1
+784.4 871.3
+785.6 83.0
+786.4 54.4
+787.2 113.1
+788.3 396.6
+789.4 175.0
+790.6 658.6
+791.7 133.4
+792.5 251.4
+793.9 176.2
+796.5 184.8
+798.0 207.1
+798.7 591.6
+799.8 499.5
+800.6 816.5
+801.4 378.4
+802.5 280.9
+803.6 135.4
+805.3 70.3
+807.4 224.1
+808.5 1315.6
+809.5 1191.0
+810.5 351.4
+811.6 120.3
+812.4 395.6
+813.4 520.5
+815.5 99.7
+816.6 523.2
+817.7 595.7
+818.6 1909.6
+819.5 1441.3
+820.7 892.0
+821.4 805.7
+822.4 297.2
+823.4 697.1
+824.6 1029.8
+825.4 1409.7
+826.9 7053.2
+827.7 10299.9
+828.6 2183.6
+829.6 1431.8
+830.6 1204.1
+831.4 1466.1
+832.2 316.1
+833.3 374.8
+834.6 9703.1
+835.5 7269.1
+836.6 3625.1
+838.0 737.3
+839.3 4663.6
+840.8 1223.3
+841.7 612.3
+842.5 946.9
+843.5 542.3
+844.4 565.7
+845.6 417.5
+846.9 2422.7
+847.7 76.7
+848.3 672.7
+848.9 229.8
+849.6 749.0
+851.7 235.1
+852.5 117.3
+853.5 298.4
+854.5 257.4
+855.6 770.7
+856.7 1257.2
+857.4 8896.2
+858.3 3787.1
+859.5 14746.7
+860.5 5373.9
+861.7 1598.8
+862.4 147.5
+864.1 120.8
+865.4 67.9
+866.9 123.9
+868.8 414.2
+869.6 410.6
+871.8 111.0
+872.4 122.0
+873.5 412.4
+875.8 595.2
+876.9 569.9
+878.3 578.4
+878.9 277.9
+882.6 579.0
+883.5 279.7
+884.8 369.2
+885.6 166.6
+886.7 169.5
+888.1 423.9
+891.8 1585.8
+892.9 1343.5
+893.7 933.5
+894.7 256.2
+896.2 1292.7
+897.0 1434.5
+897.7 1063.5
+898.3 796.9
+899.6 126.7
+901.4 164.9
+902.7 2091.8
+903.7 347.7
+905.1 402.7
+906.0 293.9
+907.7 220.6
+910.3 272.7
+911.6 581.0
+912.5 102.4
+913.5 179.8
+914.3 538.0
+916.0 80.6
+917.1 216.4
+918.2 1592.5
+918.8 177.1
+919.4 1364.1
+920.5 153.6
+921.5 245.0
+922.6 151.3
+925.4 321.6
+927.5 1150.0
+928.6 2257.1
+929.6 964.8
+930.7 2926.8
+931.6 3596.9
+932.7 1692.7
+933.4 97.8
+934.6 90.6
+935.7 221.8
+937.1 492.1
+938.4 4885.8
+939.5 2589.3
+940.3 1117.4
+941.4 56.3
+944.5 79.3
+945.5 124.3
+947.8 3361.3
+948.7 1494.9
+949.7 1575.3
+950.7 344.9
+952.8 245.5
+954.7 172.3
+956.4 16143.9
+957.4 7001.5
+958.5 2090.8
+959.5 165.9
+961.4 51.5
+963.4 136.1
+964.6 170.6
+966.8 106.1
+969.6 50.8
+972.1 705.3
+972.9 186.9
+974.5 21535.0
+975.5 13968.2
+976.7 4192.6
+977.6 498.0
+978.4 248.8
+980.4 163.8
+982.4 135.8
+983.5 299.9
+984.8 354.9
+989.6 201.0
+990.5 358.9
+991.1 148.0
+992.2 153.8
+995.3 178.1
+997.5 179.4
+998.7 491.1
+999.8 90.0
+1000.7 208.0
+1001.5 1085.0
+1002.7 682.8
+1003.8 317.7
+1004.5 343.7
+1005.8 136.6
+1007.5 356.4
+1009.5 2565.6
+1010.5 2034.2
+1011.5 286.0
+1018.6 392.0
+1020.2 116.4
+1023.5 265.0
+1024.8 43.8
+1025.4 220.0
+1027.4 11298.2
+1028.4 6538.0
+1029.7 1330.2
+1030.7 437.4
+1033.4 37.5
+1034.6 139.7
+1036.4 154.2
+1037.5 42.6
+1038.5 541.3
+1040.6 56.7
+1042.3 648.6
+1043.6 750.2
+1044.5 1358.4
+1045.5 138.3
+1047.7 180.2
+1053.3 57.0
+1056.1 572.9
+1056.7 787.4
+1057.6 904.2
+1058.8 316.1
+1059.5 238.9
+1069.6 257.1
+1071.6 171.6
+1073.5 14793.5
+1074.6 10461.9
+1075.6 2243.1
+1076.6 316.2
+1077.5 469.3
+1079.7 152.9
+1082.9 86.1
+1083.5 99.3
+1084.9 32.7
+1086.4 75.1
+1087.7 309.7
+1090.4 654.1
+1093.1 52.1
+1097.8 75.2
+1099.4 71.1
+1101.0 680.8
+1102.5 167.2
+1103.7 235.5
+1105.4 440.1
+1110.4 171.2
+1111.6 519.8
+1112.5 637.8
+1113.6 527.2
+1118.8 578.6
+1120.1 303.5
+1120.7 169.0
+1121.7 99.2
+1127.6 472.0
+1128.4 470.4
+1129.7 58.7
+1134.5 119.3
+1136.4 945.4
+1137.6 4458.0
+1138.6 1911.2
+1139.7 1228.6
+1140.7 313.2
+1150.9 55.3
+1155.5 15405.4
+1156.5 11546.0
+1157.6 4019.6
+1158.6 99.3
+1160.5 174.8
+1163.6 105.3
+1167.9 145.2
+1171.6 106.6
+1172.4 144.8
+1173.6 532.9
+1174.4 332.5
+1177.6 434.1
+1188.7 728.4
+1189.7 1521.9
+1190.8 75.2
+1198.6 133.5
+1210.8 102.4
+1211.7 354.4
+1213.0 99.0
+1233.0 197.3
+1242.7 86.9
+1243.7 112.9
+1282.3 57.9
+S	97	97	433.78
+I	ID	23
+I	RTime	1.0777
+Z	2	866.55
+Z	3	1299.32
+149.1 3.2
+195.1 2.0
+210.8 1.5
+221.1 1.7
+221.7 3.4
+243.4 1.7
+261.1 3.5
+263.4 1.3
+268.1 2.7
+274.9 1.3
+289.0 19.7
+293.3 2.7
+294.0 3.2
+299.2 3.0
+303.2 3.7
+306.0 7.6
+308.9 1.7
+318.8 1.1
+323.0 1.5
+325.6 1.6
+326.3 6.0
+327.2 4.4
+329.0 1.3
+333.4 1.1
+336.1 5.9
+343.2 10.8
+344.1 12.3
+345.1 18.7
+346.1 2.0
+353.2 5.0
+357.3 3.7
+360.4 6.5
+361.0 1.2
+362.4 20.5
+363.1 1.1
+364.9 2.5
+371.1 1.3
+374.1 1.3
+375.2 3.4
+378.7 11.3
+380.6 9.6
+395.4 1.1
+397.5 9.1
+398.4 0.8
+399.3 9.1
+401.3 7.0
+404.6 3.7
+411.8 3.0
+413.1 1.0
+414.6 2.7
+415.3 3.7
+415.9 0.8
+417.1 8.3
+418.2 4.0
+420.2 13.6
+422.2 12.8
+424.1 14.0
+425.7 40.2
+432.6 3.5
+434.7 2.9
+447.2 3.0
+448.0 8.1
+453.9 10.8
+457.6 1.5
+469.3 1.3
+485.6 3.7
+495.8 6.5
+499.2 8.6
+503.4 5.1
+508.3 18.1
+512.7 24.1
+514.7 6.5
+519.8 2.9
+523.7 11.6
+527.8 20.7
+528.4 2.7
+531.3 15.0
+538.6 70.8
+546.4 3.4
+548.8 4.9
+553.4 6.5
+576.2 6.0
+579.7 4.0
+582.3 40.2
+583.0 2.0
+614.4 9.1
+616.1 4.0
+677.4 15.0
+772.3 1.5
+S	98	98	751.28
+Z	2	1501.55
+216.2 3.1
+224.2 0.8
+227.2 1.5
+228.3 2.8
+231.2 5.7
+234.3 1.0
+239.2 0.5
+240.2 4.3
+241.4 2.8
+242.1 0.3
+248.3 2.8
+252.5 2.6
+253.4 4.2
+254.4 1.2
+257.4 1.1
+258.2 3.4
+259.2 5.7
+260.0 2.8
+262.2 1.3
+263.4 1.4
+266.7 5.0
+267.3 0.3
+268.4 3.7
+269.3 1.7
+270.2 4.2
+271.9 0.7
+274.5 6.7
+276.1 59.9
+277.4 9.7
+281.1 0.9
+282.2 2.5
+282.8 7.2
+285.3 6.9
+287.3 7.6
+288.2 1.7
+291.1 1.1
+292.3 1.4
+297.4 1.8
+298.1 0.7
+299.3 4.6
+300.0 4.7
+303.3 4.0
+304.3 0.5
+309.1 1.0
+310.5 1.3
+311.5 2.9
+312.3 2.1
+318.1 1.2
+319.2 13.4
+320.3 3.3
+322.3 1.5
+323.0 2.2
+324.1 2.8
+326.3 2.1
+327.3 4.0
+328.5 1.3
+329.4 3.3
+332.7 1.8
+333.3 16.5
+336.1 3.3
+338.1 1.7
+340.3 1.1
+345.4 1.1
+346.2 2.4
+347.2 5.3
+350.3 3.1
+354.3 4.6
+355.4 3.2
+356.4 3.1
+357.4 6.7
+358.4 4.4
+359.2 3.5
+364.7 3.5
+365.6 2.2
+368.5 1.5
+372.4 2.1
+373.4 5.9
+374.4 11.8
+375.3 3.2
+376.3 47.1
+377.3 7.8
+378.6 1.4
+380.1 1.1
+386.2 4.6
+390.5 39.9
+391.4 9.0
+392.3 2.2
+394.4 1.9
+398.9 0.5
+399.6 1.8
+400.5 1.0
+402.4 5.8
+404.4 11.6
+405.1 16.9
+406.3 0.5
+408.1 1.6
+410.3 11.0
+411.4 4.0
+413.3 2.6
+414.5 5.7
+416.3 3.2
+418.4 1.4
+421.3 4.5
+422.3 4.8
+423.4 3.9
+424.6 7.1
+425.4 1.5
+427.3 13.2
+429.0 3.7
+430.1 5.0
+431.3 6.0
+432.2 1.1
+434.3 3.2
+436.2 4.9
+437.2 5.5
+440.2 12.7
+441.3 4.8
+443.4 1.0
+445.3 18.4
+447.3 12.0
+449.4 5.5
+450.3 1.2
+457.5 11.0
+458.4 13.4
+459.4 13.5
+460.3 1.9
+463.3 43.8
+464.6 9.8
+465.4 0.7
+466.3 0.6
+467.5 0.5
+468.4 1.8
+469.4 0.5
+475.2 19.4
+476.2 2.7
+476.8 0.6
+478.0 1.5
+478.7 7.0
+480.2 3.1
+481.1 0.8
+484.6 5.7
+485.3 3.0
+486.6 2.4
+487.2 5.8
+488.7 1.7
+490.3 1.2
+491.8 1.5
+494.4 2.6
+495.1 2.0
+496.4 0.8
+497.3 5.9
+498.7 0.9
+501.1 4.5
+502.4 19.3
+503.4 3.5
+508.7 3.8
+510.2 3.8
+511.1 0.4
+513.3 5.6
+514.5 10.7
+516.5 14.0
+517.3 0.5
+519.3 2.9
+520.5 5.6
+522.8 7.4
+523.9 0.7
+525.2 13.0
+527.5 5.0
+529.2 10.6
+530.2 9.3
+531.4 8.2
+532.5 22.8
+533.3 5.6
+534.5 37.3
+535.6 2.0
+536.2 1.9
+537.3 5.3
+539.8 16.7
+540.9 11.2
+541.6 1.4
+543.6 0.7
+544.3 2.1
+546.4 8.9
+547.2 5.0
+548.6 6.6
+549.5 3.4
+550.5 3.1
+551.9 5.4
+552.9 18.4
+554.3 6.0
+556.2 2.6
+557.5 2.6
+558.4 11.6
+559.4 6.0
+560.3 6.2
+561.3 11.7
+562.4 6.0
+563.5 12.3
+564.1 2.4
+566.4 17.1
+568.0 6.5
+568.8 27.7
+569.7 4.3
+571.2 1.8
+572.3 4.3
+574.1 9.9
+575.5 6.8
+576.1 20.5
+577.2 12.2
+578.1 8.3
+578.8 5.9
+579.6 3.2
+580.9 7.0
+581.7 5.6
+582.8 7.3
+583.4 1.4
+584.0 10.2
+585.4 12.4
+586.2 10.5
+587.6 6.3
+588.6 2.0
+589.5 14.4
+590.2 2.2
+591.4 2.8
+594.2 30.3
+595.4 29.3
+596.4 6.3
+597.5 1.1
+598.9 3.7
+599.5 12.1
+600.3 1.0
+601.1 17.8
+602.0 2.8
+603.3 37.9
+604.4 2.8
+605.1 3.5
+606.3 6.7
+607.0 7.3
+609.5 38.3
+610.5 21.8
+611.7 72.6
+612.4 17.1
+613.1 6.7
+613.8 20.5
+614.6 1.8
+615.3 11.4
+616.7 11.6
+617.5 20.4
+618.5 32.4
+619.4 32.6
+620.4 7.7
+621.3 43.5
+622.5 16.5
+623.8 20.1
+624.5 26.7
+625.4 12.8
+626.3 7.5
+627.7 170.7
+628.5 13.4
+629.2 15.2
+629.9 16.7
+631.3 5.2
+632.8 66.7
+633.6 22.2
+634.6 0.5
+636.3 20.2
+637.2 25.4
+638.3 23.1
+639.0 7.8
+640.3 20.6
+642.1 30.8
+643.4 37.0
+644.8 38.2
+645.7 75.4
+646.7 26.0
+648.1 21.2
+649.4 203.9
+650.6 39.0
+651.9 2.6
+653.0 11.0
+654.1 245.9
+655.1 66.8
+656.1 4.4
+657.7 9.9
+658.7 3.3
+659.7 4.4
+660.4 34.9
+661.5 22.6
+663.1 642.8
+664.1 71.0
+664.8 4.7
+666.6 35.2
+667.4 6.2
+668.9 18.0
+669.6 26.2
+670.5 8.4
+671.3 15.9
+672.2 31.2
+673.2 22.8
+674.8 29.0
+675.6 35.3
+676.6 26.4
+677.5 41.5
+678.2 127.4
+679.4 32.1
+680.4 19.8
+681.1 6.8
+683.2 58.2
+684.0 10.7
+684.6 15.1
+685.3 2.4
+685.9 22.8
+687.2 5.9
+688.3 52.4
+689.1 59.1
+690.3 31.2
+691.0 46.9
+692.3 31.1
+693.1 14.3
+695.1 6.1
+696.0 15.5
+697.3 72.6
+698.2 208.9
+699.1 90.5
+700.3 44.0
+701.6 23.5
+703.0 15.5
+704.6 21.4
+705.5 42.9
+706.6 548.0
+707.4 101.9
+708.6 4.3
+709.3 9.1
+710.4 7.0
+711.0 11.9
+712.1 26.0
+713.2 26.3
+715.0 56.1
+715.8 79.5
+716.5 15.0
+717.2 9.4
+717.9 9.0
+718.6 3.9
+719.8 36.2
+720.5 25.0
+721.8 20.0
+722.5 70.0
+723.7 55.4
+724.9 51.5
+725.7 69.1
+727.1 19.6
+728.0 15.2
+728.9 21.0
+729.7 23.5
+730.3 61.4
+731.2 6.1
+732.3 39.0
+733.3 287.5
+734.2 236.5
+735.6 48.5
+736.7 18.4
+737.3 10.0
+738.1 3.5
+738.8 3.5
+739.6 13.9
+741.8 633.2
+742.6 836.1
+743.5 73.3
+751.3 3.2
+752.2 1.3
+757.5 2.2
+758.5 10.2
+761.2 7.8
+763.0 8.3
+764.0 11.8
+769.0 0.7
+770.6 0.8
+774.0 16.4
+774.9 7.0
+775.6 3.4
+776.5 1.7
+777.2 0.6
+778.3 6.0
+779.6 105.5
+780.5 20.6
+781.3 15.7
+783.3 3.8
+784.4 3.0
+785.4 5.6
+787.2 2.7
+788.2 11.2
+789.3 12.9
+790.7 4.1
+791.5 7.2
+793.1 4.9
+794.5 15.9
+795.6 3.4
+797.3 1.2
+798.7 2.3
+800.5 11.3
+803.5 4.9
+804.2 1.8
+805.4 10.1
+806.3 16.3
+806.9 1.0
+807.6 20.2
+808.9 10.8
+809.7 5.2
+810.9 8.5
+811.8 1.6
+812.6 17.6
+813.5 2.4
+814.4 0.4
+815.3 1.1
+816.5 7.7
+817.6 5.5
+818.4 13.0
+820.5 8.7
+823.5 75.3
+824.4 17.0
+825.6 14.9
+826.4 3.7
+827.2 1.6
+828.5 1.3
+829.6 4.7
+830.6 2.8
+831.7 2.7
+832.5 12.2
+833.3 1.3
+834.7 1.7
+836.4 21.0
+837.4 8.7
+838.2 5.8
+840.3 3.8
+842.9 2.0
+844.4 2.8
+845.5 9.9
+846.7 2.2
+847.6 5.4
+849.7 0.9
+850.5 5.3
+851.7 4.3
+852.6 3.7
+854.1 10.7
+855.6 4.9
+857.5 17.2
+861.8 4.0
+862.7 9.2
+863.6 13.2
+864.4 6.2
+865.6 2.5
+866.8 4.9
+867.4 4.5
+868.8 5.9
+869.7 32.1
+870.9 5.8
+872.6 6.6
+873.2 4.4
+878.2 10.6
+880.6 28.8
+881.5 4.8
+882.7 3.5
+883.7 2.2
+884.6 1.5
+887.0 3.6
+888.7 11.8
+889.6 22.3
+890.5 50.1
+891.4 21.2
+892.3 4.1
+893.8 4.9
+896.5 5.6
+897.1 2.7
+897.9 0.7
+898.6 1.9
+899.9 4.7
+900.6 0.7
+903.6 0.9
+904.4 1.9
+906.3 2.5
+907.0 3.9
+907.6 23.3
+908.6 13.8
+909.5 18.3
+910.1 10.6
+911.8 0.9
+914.2 5.4
+915.7 4.6
+916.5 1.5
+917.6 11.2
+918.5 5.4
+921.6 8.2
+922.7 1.0
+923.5 3.2
+930.0 7.6
+931.2 4.2
+931.9 8.0
+933.0 1.5
+935.3 16.6
+937.0 13.6
+938.6 3.2
+939.6 5.1
+941.4 3.8
+946.4 3.8
+948.1 6.7
+949.5 25.6
+950.6 32.8
+951.4 3.7
+952.3 2.5
+956.5 1.9
+958.5 3.9
+959.6 1.5
+960.3 4.2
+963.6 2.7
+964.4 4.2
+965.6 3.2
+966.7 3.6
+967.4 37.0
+968.3 24.9
+969.3 5.5
+974.4 2.3
+975.5 1.2
+978.6 14.3
+979.6 8.6
+982.4 0.6
+983.9 7.3
+985.7 2.6
+986.8 15.4
+990.1 5.0
+990.9 3.3
+992.1 6.8
+994.5 5.1
+996.7 9.8
+997.6 3.5
+999.0 7.2
+1001.5 1.5
+1002.3 1.8
+1004.4 10.7
+1005.2 2.5
+1006.5 8.1
+1010.6 1.5
+1011.3 1.1
+1014.2 4.9
+1015.3 1.8
+1019.6 3.8
+1020.6 12.1
+1021.7 15.3
+1022.5 3.2
+1023.6 10.5
+1026.1 4.0
+1026.9 3.1
+1028.9 9.1
+1031.9 15.1
+1032.9 8.2
+1033.8 2.3
+1034.8 9.6
+1036.6 9.0
+1038.6 101.2
+1039.6 37.3
+1040.7 4.7
+1042.2 4.1
+1043.5 16.2
+1045.0 2.2
+1048.7 21.7
+1049.6 24.0
+1050.6 10.4
+1051.2 3.1
+1054.3 22.5
+1055.0 7.3
+1055.7 28.5
+1056.7 5.8
+1057.3 3.1
+1058.1 6.3
+1059.3 4.6
+1060.5 2.5
+1062.3 1.6
+1063.6 3.4
+1064.9 0.9
+1066.6 3.0
+1067.4 0.9
+1073.9 1.6
+1075.5 3.4
+1077.5 2.1
+1078.7 6.0
+1079.9 0.9
+1081.5 3.8
+1082.5 2.1
+1085.6 2.2
+1086.6 2.1
+1087.7 4.1
+1089.4 8.7
+1091.0 3.6
+1091.7 1.2
+1093.7 11.8
+1094.5 7.0
+1095.6 16.2
+1097.6 1.6
+1099.4 3.0
+1101.9 2.6
+1105.1 6.5
+1106.0 11.6
+1106.6 0.9
+1107.6 25.3
+1108.7 12.6
+1109.5 7.5
+1110.8 10.2
+1111.6 68.2
+1112.4 44.0
+1113.5 6.9
+1114.6 1.8
+1119.5 7.0
+1121.9 1.5
+1125.5 93.0
+1126.5 55.1
+1127.6 16.3
+1128.6 1.2
+1129.8 1.1
+1130.8 1.8
+1134.6 1.4
+1135.7 16.0
+1136.8 12.1
+1137.8 2.8
+1138.8 2.5
+1139.8 0.7
+1143.6 7.8
+1144.6 7.1
+1146.0 10.0
+1146.8 2.1
+1150.7 4.0
+1151.5 2.3
+1153.3 2.2
+1158.8 0.7
+1160.6 1.4
+1167.8 0.9
+1169.8 2.7
+1171.1 0.9
+1177.4 0.7
+1178.3 5.7
+1179.0 4.7
+1180.0 6.8
+1181.8 4.1
+1182.5 0.5
+1188.5 4.7
+1189.4 8.8
+1190.3 1.5
+1191.2 5.4
+1192.2 2.3
+1193.7 1.2
+1196.3 15.4
+1197.7 7.6
+1198.6 8.8
+1205.5 12.8
+1207.5 18.1
+1208.8 23.5
+1209.6 18.9
+1211.7 6.4
+1212.5 5.0
+1217.6 4.0
+1219.0 6.9
+1220.5 5.6
+1221.5 1.6
+1222.7 35.1
+1223.8 15.3
+1225.6 181.6
+1226.6 101.1
+1227.5 35.4
+1228.2 4.3
+1232.9 13.7
+1236.0 1.4
+1236.7 2.5
+1238.9 7.4
+1242.6 2.1
+1250.5 2.7
+1252.0 1.5
+1253.8 45.0
+1254.7 23.9
+1255.5 4.7
+1256.7 6.5
+1258.1 1.7
+1258.8 0.4
+1259.6 1.5
+1267.7 3.1
+1269.1 1.2
+1271.9 1.0
+1276.9 1.3
+1280.7 2.7
+1283.6 4.3
+1284.7 2.8
+1289.9 5.7
+1291.9 4.4
+1292.8 2.5
+1293.6 1.4
+1294.8 2.2
+1304.4 3.3
+1306.8 16.7
+1307.7 1.4
+1308.4 0.5
+1312.6 2.2
+1318.8 3.5
+1321.2 3.9
+1324.2 2.4
+1327.6 4.5
+1343.0 5.2
+1347.6 3.8
+1381.0 1.6
+1382.9 2.7
+1384.3 3.7
+1413.8 1.3
+1430.6 4.5
+1445.9 3.9
+S	99	99	581.95
+I	ID	2
+I	RTime	.1569
+Z	3	1743.83
+206.5 1.2
+265.2 0.8
+269.0 1.2
+289.0 2.0
+291.1 4.0
+292.9 1.6
+302.8 2.0
+310.4 5.3
+320.3 4.1
+324.4 2.2
+345.3 13.1
+346.2 2.0
+361.3 4.8
+368.3 3.0
+408.4 2.5
+418.2 1.5
+441.2 1.2
+442.4 2.7
+445.3 4.9
+450.7 4.5
+452.0 2.2
+454.0 2.2
+455.4 4.6
+456.2 3.9
+459.9 0.8
+470.2 4.4
+472.9 2.0
+474.4 25.0
+475.4 1.7
+476.8 1.5
+478.0 1.8
+484.0 1.7
+487.2 3.0
+489.6 2.5
+497.7 2.2
+504.3 5.5
+508.9 6.9
+509.7 2.0
+513.3 1.8
+525.1 4.0
+536.4 1.2
+540.5 2.2
+541.3 2.0
+544.9 7.0
+545.7 0.8
+554.1 4.0
+561.0 2.4
+562.5 3.2
+563.3 6.5
+564.4 19.3
+565.0 5.4
+566.0 16.5
+567.2 3.4
+572.7 1.6
+573.5 22.7
+574.2 1.3
+617.5 1.5
+620.6 2.7
+621.8 10.6
+626.8 16.2
+635.9 17.1
+636.6 2.7
+654.1 1.3
+655.3 1.1
+667.0 1.2
+678.8 9.5
+682.9 3.7
+686.8 5.1
+691.6 9.3
+694.2 3.5
+695.6 1.2
+720.5 7.3
+721.4 1.1
+776.2 10.5
+785.4 16.6
+802.4 1.6
+804.5 2.9
+819.9 3.5
+823.2 2.2
+835.4 4.9
+837.7 2.0
+844.8 0.8
+868.3 3.0
+881.2 3.5
+902.7 3.2
+909.5 1.8
+913.4 2.9
+947.4 4.1
+957.3 5.3
+964.4 1.7
+975.5 2.4
+1154.0 2.7
+1284.8 4.0
+S	100	100	763.11
+I	ID	194
+I	RTime	9.6005
+Z	1	763.11
+212.9 1.7
+239.9 1.7
+259.1 8.8
+268.1 1.8
+269.1 1.8
+271.2 1.3
+280.9 1.0
+286.9 2.4
+288.8 1.7
+309.6 1.1
+317.2 2.7
+323.9 3.0
+332.1 2.0
+339.4 1.5
+343.1 7.4
+356.1 3.2
+357.2 1.7
+359.4 1.2
+360.2 1.8
+361.9 2.0
+373.0 1.3
+374.4 2.2
+400.3 3.0
+403.0 2.7
+420.3 4.8
+426.2 5.5
+430.4 4.6
+431.2 1.3
+442.1 2.7
+443.1 1.6
+447.3 2.4
+451.4 3.5
+454.4 2.9
+468.6 2.4
+470.2 3.2
+476.2 2.0
+477.8 2.2
+490.1 1.8
+495.2 108.1
+508.1 1.2
+509.9 1.7
+513.2 1.1
+515.3 1.2
+519.4 1.1
+525.5 1.6
+526.2 8.3
+534.3 4.5
+542.2 2.5
+543.3 3.9
+547.5 2.7
+548.5 2.0
+561.2 5.3
+562.4 4.4
+576.5 4.4
+585.4 5.0
+586.5 2.4
+590.6 3.7
+599.1 2.0
+600.5 1.8
+602.3 4.1
+622.5 1.2
+623.4 1.7
+626.3 2.2
+627.1 1.0
+634.3 6.4
+639.7 1.2
+645.2 3.5
+648.3 2.9
+658.8 1.3
+683.1 2.7
+688.4 3.2
+697.5 2.0
+698.8 6.0
+710.3 4.3
+711.4 1.3
+713.3 3.5
+716.5 3.0
+718.4 1.7
+721.6 2.0
+726.5 1.5
+727.1 1.7
+728.0 2.0
+733.6 0.8
+739.0 5.5
+744.6 9.8
+745.4 18.1
+746.3 6.8
+830.3 2.7
+928.4 1.6
+977.7 1.7
+1040.5 4.4
+1096.3 1.0
+1226.8 1.6
+1339.5 2.0
+1352.6 2.0
+S	101	101	833.24
+I	ID	84
+I	RTime	3.9201
+Z	1	833.24
+248.9 1.6
+251.1 3.0
+267.2 15.6
+268.1 5.5
+269.2 1.0
+281.1 10.6
+282.2 8.1
+285.0 2.2
+298.8 4.3
+300.1 5.4
+326.2 3.7
+327.0 2.0
+340.1 2.0
+342.1 11.6
+351.4 2.9
+353.0 1.2
+355.1 23.8
+356.2 21.2
+366.0 1.7
+381.6 2.5
+416.1 5.8
+429.7 5.9
+444.1 1.3
+445.1 2.4
+459.8 0.8
+475.7 2.9
+503.1 5.0
+503.8 1.8
+505.4 3.5
+554.5 2.5
+560.7 5.9
+564.8 1.5
+567.2 2.0
+568.7 2.2
+570.8 3.7
+593.6 4.3
+600.5 1.6
+610.1 9.6
+615.4 2.0
+617.5 4.4
+618.6 3.0
+628.8 24.6
+631.9 3.2
+638.5 3.9
+641.0 3.5
+644.1 7.6
+646.9 33.4
+647.9 5.3
+672.8 4.9
+682.1 7.8
+690.4 5.4
+695.4 3.7
+696.6 23.0
+701.4 2.2
+704.3 14.8
+705.2 1.2
+707.0 2.7
+718.8 1.7
+723.4 2.7
+724.6 3.0
+737.1 7.3
+759.8 7.1
+764.7 33.5
+772.6 1.7
+783.8 2.7
+786.7 10.5
+789.4 1.8
+799.5 5.3
+801.9 6.8
+803.1 7.0
+808.5 10.5
+809.7 6.6
+815.2 12.0
+816.4 2.2
+824.9 9.3
+828.4 4.5
+S	102	102	733.22
+Z	2	1465.43
+208.8 7.9
+213.4 6.8
+215.6 2.1
+216.3 7.7
+218.0 4.4
+219.2 4.6
+226.0 28.6
+227.1 6.2
+232.2 13.8
+238.1 22.3
+241.7 3.1
+244.2 56.8
+245.1 17.0
+246.0 2.7
+254.1 9.2
+256.2 5.3
+260.1 11.3
+261.1 3.9
+261.9 8.9
+267.3 3.8
+272.1 3.6
+275.2 23.2
+276.3 2.2
+280.1 4.7
+281.2 9.3
+284.1 5.1
+285.4 2.8
+287.1 3.6
+288.1 4.0
+294.2 15.6
+295.0 3.1
+296.5 10.8
+299.3 2.1
+300.3 7.2
+302.1 11.7
+306.1 16.5
+309.2 4.4
+313.9 12.1
+314.8 15.5
+325.2 11.2
+329.2 15.2
+331.5 2.1
+333.2 7.7
+340.1 5.0
+341.9 10.9
+343.2 214.5
+344.1 30.1
+348.0 2.9
+359.0 15.0
+361.9 6.0
+364.3 11.7
+367.3 4.3
+370.2 3.3
+373.2 14.2
+375.3 5.5
+384.3 17.1
+385.6 6.6
+386.3 4.9
+387.1 2.5
+394.1 3.3
+396.3 16.1
+397.3 1.8
+401.3 15.4
+402.2 9.2
+403.0 4.2
+404.6 13.0
+406.7 9.2
+407.4 35.1
+408.5 7.6
+409.3 30.2
+410.5 4.0
+412.1 4.2
+413.2 9.3
+414.2 24.4
+420.5 7.4
+422.3 30.2
+427.4 5.7
+430.1 43.3
+431.0 3.8
+432.0 3.4
+432.8 3.0
+435.2 2.7
+438.1 8.4
+441.1 13.5
+442.3 21.5
+443.1 1.6
+444.4 6.1
+448.0 4.2
+449.1 6.6
+453.5 3.8
+459.2 18.6
+466.1 3.2
+468.8 27.0
+470.3 22.3
+472.3 14.2
+473.3 3.3
+475.6 4.3
+477.2 1.9
+482.8 52.2
+484.2 64.4
+485.2 3.3
+486.5 9.2
+488.1 7.0
+488.7 8.2
+490.3 5.9
+493.1 29.1
+494.4 5.2
+497.5 6.8
+499.2 13.2
+500.1 13.0
+501.2 24.0
+502.1 16.8
+503.6 5.9
+509.3 1.7
+511.6 2.5
+514.2 8.9
+515.4 6.2
+516.1 4.4
+520.4 21.7
+521.5 14.9
+522.2 1.7
+523.2 60.6
+524.4 8.3
+528.3 6.6
+530.2 4.5
+533.4 2.9
+536.4 53.3
+537.4 29.3
+538.3 13.4
+541.5 7.9
+544.0 10.7
+546.3 2.5
+547.8 10.4
+549.4 15.5
+550.3 4.6
+551.1 2.0
+552.4 6.9
+553.1 3.6
+555.1 15.4
+557.7 25.9
+559.2 18.4
+560.3 13.4
+562.1 6.1
+563.7 31.0
+564.6 9.1
+566.5 2.3
+568.4 32.1
+569.3 31.7
+570.4 35.1
+571.3 13.9
+573.4 13.6
+575.6 4.5
+577.6 1.4
+579.9 6.4
+584.7 5.2
+585.5 9.3
+587.3 29.1
+588.5 9.1
+590.1 12.9
+594.3 8.6
+597.2 54.1
+598.2 1.6
+599.1 3.9
+602.8 93.1
+603.4 21.7
+604.2 8.3
+605.4 38.1
+606.5 6.5
+610.5 18.5
+611.2 6.1
+612.2 4.4
+613.2 8.1
+614.1 29.9
+615.2 56.8
+616.1 24.7
+617.5 21.7
+618.4 5.8
+620.3 29.7
+621.5 4.5
+624.6 78.1
+625.4 2.7
+626.2 4.9
+628.0 19.8
+629.6 5.6
+631.5 16.8
+632.2 207.0
+633.4 27.0
+634.4 16.3
+635.1 4.9
+641.6 4.5
+644.5 2.9
+647.4 5.0
+649.3 12.4
+651.5 10.6
+655.3 2.3
+656.0 3.6
+660.7 16.4
+661.3 6.8
+666.0 6.1
+667.2 6.8
+668.6 25.4
+669.4 4.8
+670.0 2.2
+671.3 31.7
+672.3 4.3
+673.3 5.5
+677.4 9.1
+679.8 21.5
+683.4 89.8
+685.5 8.2
+688.4 11.7
+689.6 8.4
+691.6 4.4
+695.1 9.5
+696.3 4.0
+697.3 7.9
+698.4 6.8
+699.4 1.9
+700.9 4.7
+703.0 14.2
+703.8 2.9
+704.7 5.8
+705.7 13.0
+706.5 10.9
+707.3 8.6
+708.5 13.4
+709.3 3.2
+710.4 11.7
+714.0 27.8
+715.2 178.7
+716.3 24.9
+717.2 20.2
+718.7 12.2
+719.3 13.2
+720.3 28.1
+722.8 221.9
+723.6 155.8
+724.4 37.5
+726.0 15.3
+737.4 10.0
+739.5 7.3
+744.4 3.1
+746.5 10.1
+749.7 26.7
+757.7 7.1
+763.5 2.1
+767.6 3.6
+773.8 34.5
+775.4 10.1
+777.2 4.6
+778.6 17.9
+779.3 28.6
+780.4 23.5
+784.4 58.2
+785.3 61.2
+787.5 2.3
+790.4 24.6
+791.5 10.9
+793.9 2.1
+796.0 27.0
+796.7 1.6
+797.5 2.6
+807.3 14.9
+811.4 34.0
+813.8 10.0
+817.0 64.0
+817.6 10.7
+819.7 11.3
+820.4 6.2
+821.2 3.7
+823.9 8.7
+826.2 2.7
+828.5 6.6
+831.4 387.8
+832.6 100.0
+833.7 5.2
+835.4 4.6
+837.9 11.9
+838.9 2.8
+841.1 50.8
+842.4 3.9
+843.2 4.9
+846.3 7.9
+848.4 6.7
+851.2 5.1
+855.5 47.5
+856.5 16.0
+857.3 5.0
+860.8 5.5
+866.4 5.1
+867.4 7.1
+870.4 17.5
+871.0 10.4
+872.8 4.5
+877.2 2.9
+879.1 17.4
+881.3 7.4
+883.6 7.0
+885.4 14.2
+888.7 5.5
+890.5 43.8
+891.5 7.6
+892.5 5.5
+894.0 28.5
+897.4 72.4
+898.3 115.1
+899.1 28.3
+899.8 11.8
+900.5 11.9
+901.1 3.1
+906.2 6.6
+907.2 22.5
+908.3 29.8
+909.3 19.5
+910.2 11.8
+915.6 4.3
+916.3 8.4
+920.2 1.6
+920.9 2.0
+922.4 3.0
+923.5 6.2
+924.3 5.2
+925.7 23.0
+926.4 17.0
+927.4 13.1
+928.7 5.6
+932.4 8.0
+938.9 5.7
+939.6 13.5
+941.3 5.3
+943.6 12.3
+944.2 12.8
+946.2 1.2
+947.1 5.5
+953.8 5.9
+954.4 7.7
+956.2 20.2
+959.5 11.7
+962.5 358.1
+963.5 41.4
+964.7 9.2
+967.6 12.3
+968.9 4.5
+970.5 10.9
+971.5 10.9
+974.3 14.8
+975.3 31.7
+976.0 74.9
+976.6 47.6
+977.4 2.5
+984.7 6.5
+989.0 65.5
+992.4 2.0
+996.5 3.7
+998.5 10.6
+999.7 3.8
+1000.9 1.9
+1005.5 4.7
+1006.5 11.5
+1011.5 31.2
+1013.6 11.5
+1019.4 6.6
+1020.6 32.3
+1021.5 55.9
+1022.7 89.8
+1023.9 36.0
+1024.7 22.3
+1025.3 15.8
+1032.1 29.0
+1033.5 102.3
+1034.7 41.2
+1036.4 13.7
+1037.4 17.6
+1039.6 11.7
+1040.8 24.6
+1041.6 3.4
+1042.5 6.7
+1044.4 7.0
+1049.5 2.3
+1054.5 5.0
+1055.5 7.9
+1056.3 52.3
+1057.5 18.1
+1067.2 18.8
+1067.9 3.6
+1068.9 4.4
+1079.4 10.2
+1102.0 12.9
+1102.6 12.6
+1103.3 4.4
+1107.5 8.0
+1108.3 2.0
+1116.2 20.7
+1120.5 489.4
+1121.6 269.6
+1122.6 23.9
+1134.5 25.7
+1135.4 33.9
+1136.5 9.6
+1152.4 8.1
+1156.2 3.5
+1164.0 12.5
+1169.4 57.4
+1170.5 27.2
+1182.0 6.2
+1184.1 5.0
+1185.4 14.8
+1186.4 17.0
+1200.4 2.4
+1203.7 31.3
+1204.6 18.0
+1219.4 118.1
+1220.7 213.9
+1221.9 19.8
+1231.5 4.4
+1232.4 2.8
+1235.4 2.9
+1243.7 5.8
+1247.8 12.0
+1248.6 6.5
+1271.3 12.8
+1272.5 9.5
+1281.6 7.7
+1288.6 8.5
+1289.7 6.1
+1299.4 34.4
+1311.4 9.2
+1316.3 78.7
+1317.4 65.1
+1319.5 6.4
+1346.8 2.7
+1362.4 2.7
+1363.5 1.4
+1368.8 3.2
+1374.8 8.7
+S	103	103	559.10
+I	ID	221
+I	RTime	10.9134
+Z	2	1117.19
+157.1 3.0
+165.3 1.0
+172.2 1.2
+175.1 5.4
+183.1 1.7
+187.0 2.7
+189.3 3.9
+200.1 3.4
+208.2 4.3
+209.0 1.6
+216.2 1.3
+218.2 1.3
+225.1 3.7
+226.2 2.9
+234.1 1.2
+237.3 2.5
+240.1 8.8
+242.2 2.7
+244.1 2.5
+245.3 5.0
+251.3 4.0
+255.2 7.8
+257.0 1.6
+258.3 5.8
+263.8 1.3
+267.3 2.0
+268.4 2.2
+273.3 6.0
+278.3 1.8
+280.3 2.4
+283.9 2.4
+286.0 1.2
+291.1 88.0
+293.5 1.2
+295.4 2.4
+297.0 1.7
+298.3 2.5
+300.2 2.5
+313.3 2.2
+315.3 4.6
+322.6 1.1
+324.3 2.7
+335.0 2.2
+337.2 1.5
+341.2 4.4
+342.3 2.4
+343.8 7.1
+345.4 1.1
+346.3 1.6
+349.3 1.2
+353.3 1.7
+356.4 1.2
+358.4 1.6
+367.4 1.0
+369.3 1.8
+376.2 1.6
+380.4 10.0
+382.6 1.2
+385.4 2.2
+386.4 8.3
+387.4 10.5
+394.2 8.6
+395.1 2.5
+398.4 2.0
+401.9 3.9
+407.7 3.9
+412.4 10.3
+413.3 4.3
+418.2 2.0
+427.0 4.1
+428.4 2.5
+430.2 20.2
+431.3 4.0
+441.3 1.7
+442.9 8.3
+444.3 4.5
+448.2 1.6
+455.2 2.7
+464.9 3.5
+472.1 3.7
+472.9 5.3
+478.3 1.2
+481.3 1.2
+487.3 1.6
+488.2 2.7
+489.1 3.9
+502.1 6.1
+504.4 3.0
+505.0 3.2
+506.2 2.5
+509.4 2.7
+515.2 1.7
+523.4 9.6
+524.5 11.0
+525.3 16.7
+529.5 1.5
+536.0 5.0
+540.2 26.7
+541.4 82.3
+542.4 60.5
+543.3 9.1
+549.4 8.3
+550.1 8.1
+568.6 2.9
+610.4 4.0
+629.1 5.9
+641.9 11.3
+659.5 7.1
+683.3 2.0
+690.3 1.3
+692.7 1.2
+694.0 3.7
+702.3 1.6
+723.1 2.5
+729.5 1.7
+738.1 6.4
+755.5 2.2
+766.4 7.0
+773.0 2.5
+774.8 5.4
+775.4 1.2
+780.0 12.3
+790.3 3.2
+802.2 3.5
+840.4 3.7
+842.4 2.2
+859.4 2.7
+860.7 1.5
+866.3 9.8
+908.5 1.7
+920.6 9.0
+926.3 2.4
+943.7 3.0
+944.6 3.7
+970.5 2.7
+979.5 3.0
+S	104	104	565.22
+Z	2	1129.43
+164.9 5.2
+166.0 4.5
+173.1 1.3
+175.1 3.0
+182.1 49.2
+183.3 4.7
+184.2 0.5
+185.2 3.0
+186.0 3.6
+187.3 5.8
+189.2 4.3
+196.0 0.8
+197.2 2.6
+199.4 0.7
+201.1 3.3
+213.3 2.3
+214.3 4.6
+216.2 2.8
+217.1 1.6
+219.2 5.9
+222.9 1.1
+226.1 0.3
+227.1 3.8
+228.3 1.7
+229.1 2.3
+231.9 2.9
+233.2 0.4
+234.3 2.5
+235.2 4.8
+237.2 0.6
+238.2 0.3
+240.7 3.9
+241.3 1.9
+243.0 3.4
+244.4 7.2
+245.3 0.9
+246.3 1.9
+252.0 1.8
+253.2 3.8
+254.0 3.1
+256.3 1.6
+258.2 7.8
+259.9 4.7
+261.0 2.7
+262.2 1.7
+269.0 6.3
+270.1 0.6
+270.7 4.6
+272.0 0.9
+272.9 0.8
+274.4 0.7
+276.2 1.7
+277.0 9.9
+278.2 4.6
+279.4 11.7
+281.5 1.0
+285.1 0.8
+286.5 5.6
+287.2 17.6
+288.1 39.3
+289.2 10.8
+289.9 8.0
+292.3 1.7
+295.2 55.8
+296.3 5.1
+300.1 2.4
+300.9 0.8
+302.0 0.8
+304.0 14.8
+306.1 14.1
+307.6 5.4
+312.3 2.3
+313.3 2.5
+316.1 3.6
+317.2 6.5
+321.3 1.6
+322.7 9.5
+325.5 0.7
+327.3 6.2
+328.3 4.2
+333.2 0.5
+333.9 9.2
+335.3 13.9
+336.0 4.2
+336.7 3.5
+338.2 2.6
+339.2 1.9
+344.1 5.8
+345.2 70.3
+347.0 11.8
+349.1 2.7
+352.2 0.9
+355.3 0.4
+356.3 6.6
+358.2 16.0
+363.1 117.6
+364.2 12.7
+365.2 21.4
+366.5 0.9
+370.3 8.8
+371.7 4.1
+373.2 0.7
+375.1 4.3
+378.9 1.6
+380.7 1.4
+384.1 97.1
+384.9 8.4
+387.6 3.7
+388.4 12.5
+390.3 9.3
+392.3 1.5
+393.3 4.4
+394.1 0.6
+398.3 5.3
+400.0 3.5
+401.5 5.4
+402.4 4.8
+405.2 8.4
+407.4 3.9
+408.9 16.3
+410.3 2.9
+412.6 63.6
+413.4 4.0
+414.4 6.3
+415.9 1.3
+416.5 4.6
+417.9 16.0
+419.9 1.7
+422.0 3.1
+423.9 3.8
+425.6 8.1
+427.0 8.7
+428.5 1.5
+430.0 9.0
+430.9 3.6
+432.4 3.1
+434.3 1.2
+436.3 9.3
+437.0 13.5
+439.0 1.3
+440.6 5.5
+441.4 4.3
+442.3 3.7
+443.1 14.6
+443.8 2.3
+445.5 3.9
+446.9 3.5
+449.8 11.4
+451.4 174.1
+452.5 39.2
+454.2 0.6
+456.4 39.6
+457.4 25.6
+458.6 1.9
+460.6 42.3
+461.2 6.3
+463.5 8.0
+464.5 5.8
+465.3 41.1
+466.1 14.8
+466.7 6.7
+467.6 7.4
+468.2 6.4
+469.1 3.8
+470.2 13.1
+472.7 1.7
+474.3 253.7
+475.1 65.7
+476.2 3.9
+478.0 569.2
+478.8 62.3
+479.6 14.6
+480.5 6.5
+482.4 25.4
+483.4 8.4
+484.9 3.4
+485.7 2.7
+488.0 7.2
+488.6 5.1
+490.1 14.0
+491.1 27.4
+491.9 7.5
+493.0 6.4
+494.4 7.7
+495.4 8.2
+496.3 14.6
+497.2 13.1
+498.1 12.5
+499.1 30.9
+500.4 4.2
+501.1 3.8
+502.2 10.7
+505.0 25.9
+506.0 7.0
+506.9 30.5
+508.7 35.1
+509.9 20.2
+510.5 2.3
+511.4 22.5
+512.3 7.6
+513.0 41.7
+514.2 34.0
+515.3 12.8
+516.1 4.7
+517.2 4.3
+517.8 14.0
+518.7 15.4
+519.6 30.7
+521.2 26.4
+522.2 18.0
+523.2 5.0
+524.3 5.9
+525.3 10.5
+526.6 17.1
+527.2 2.7
+529.0 51.2
+530.2 10.8
+531.5 43.9
+532.6 6.0
+533.4 24.9
+535.0 44.3
+536.1 14.2
+537.0 10.5
+538.2 14.7
+539.1 4.3
+539.7 6.9
+540.8 39.8
+541.9 77.5
+542.8 33.6
+543.4 51.4
+544.1 22.3
+545.3 9.4
+546.7 97.0
+547.3 78.4
+548.3 69.0
+549.4 53.3
+550.3 41.0
+551.1 69.5
+552.3 70.0
+553.6 41.4
+555.1 133.3
+555.8 253.6
+556.7 192.5
+557.9 32.7
+558.6 7.4
+559.7 0.8
+560.7 2.3
+564.1 5.1
+564.9 9.4
+565.6 2.4
+567.1 8.7
+568.2 4.5
+574.8 10.8
+576.4 11.5
+577.6 1.9
+578.8 2.9
+580.9 3.6
+582.2 9.3
+583.8 4.1
+584.5 3.8
+586.0 2.2
+587.8 1.8
+589.1 1.7
+592.6 4.7
+593.6 9.5
+594.2 2.9
+595.0 3.9
+598.5 158.1
+599.5 32.0
+600.6 9.1
+602.0 4.2
+602.6 0.9
+603.7 4.5
+604.7 3.6
+605.9 5.9
+607.8 7.8
+610.0 6.6
+612.0 6.0
+613.6 2.5
+615.7 3.5
+617.1 3.2
+620.2 1.0
+622.5 4.0
+624.2 11.8
+625.8 13.2
+626.7 8.3
+627.5 14.5
+629.0 3.1
+632.0 6.5
+632.6 3.5
+633.5 2.4
+635.0 18.1
+637.9 13.1
+638.7 8.4
+639.7 2.5
+640.7 1.5
+641.3 4.6
+642.1 33.1
+643.2 16.9
+645.5 7.5
+646.9 8.8
+648.5 5.8
+649.4 5.0
+650.3 2.0
+651.9 2.7
+652.8 2.9
+655.6 5.8
+656.5 5.4
+657.6 3.9
+658.5 5.9
+659.4 26.1
+660.3 37.2
+661.4 9.7
+662.5 6.6
+663.4 2.2
+666.5 7.6
+668.4 6.0
+669.6 22.8
+670.4 12.7
+672.2 7.9
+673.5 2.9
+674.3 0.7
+675.9 12.8
+676.8 3.3
+678.3 65.2
+679.3 28.1
+680.4 12.9
+681.9 10.5
+684.6 1.1
+685.6 4.1
+688.1 14.2
+688.8 3.2
+689.9 10.4
+691.3 14.0
+693.4 4.1
+694.4 12.1
+695.5 4.9
+697.0 5.0
+698.3 13.2
+699.0 15.8
+700.5 7.5
+701.2 10.7
+703.1 6.5
+704.3 9.6
+705.4 1.0
+706.2 9.9
+706.8 7.6
+708.6 8.5
+710.6 12.9
+711.6 2.4
+712.8 4.7
+713.7 9.8
+715.1 7.0
+716.3 5.3
+721.5 2.8
+722.6 8.8
+723.5 8.9
+724.6 34.5
+725.4 1.8
+731.7 3.0
+733.2 2.8
+734.3 1.8
+735.0 8.2
+737.5 19.9
+738.3 13.0
+740.5 7.2
+741.3 15.4
+742.4 14.5
+743.6 4.0
+745.3 17.5
+746.2 9.6
+747.4 21.1
+748.4 4.7
+751.8 10.3
+752.6 5.4
+753.3 5.6
+754.3 6.1
+755.5 12.9
+756.8 7.5
+758.5 4.0
+759.5 3.2
+760.7 1.7
+761.7 1.7
+762.9 47.0
+764.1 14.7
+766.5 523.7
+767.6 152.7
+768.5 55.6
+769.4 5.2
+770.4 3.6
+771.5 4.5
+773.1 19.3
+773.9 10.3
+774.9 0.3
+775.6 2.9
+776.9 6.0
+778.4 6.2
+779.0 7.5
+780.6 15.8
+781.5 31.4
+782.4 11.3
+784.4 3.6
+785.4 9.7
+786.6 5.3
+787.7 11.2
+788.9 7.9
+789.6 9.1
+790.5 4.2
+792.9 3.5
+794.4 4.3
+798.4 6.5
+799.6 3.0
+800.6 3.6
+801.5 1.6
+805.6 2.5
+806.8 1.2
+809.3 8.7
+814.4 2.1
+815.4 2.0
+816.5 3.4
+817.5 0.7
+819.7 1.8
+821.6 2.7
+823.4 380.9
+824.5 164.6
+825.5 42.0
+826.5 3.9
+827.7 4.8
+828.4 4.5
+829.5 1.2
+831.9 1.3
+834.4 162.3
+835.6 45.1
+836.5 17.5
+837.4 2.5
+840.9 1.6
+842.6 2.7
+846.8 1.7
+847.4 4.1
+851.4 1.2
+853.6 1.1
+862.5 6.3
+868.3 4.8
+875.7 1.0
+883.2 9.8
+884.6 5.5
+887.4 0.8
+888.4 2.0
+892.4 3.1
+897.4 1.5
+899.5 1.6
+901.2 10.2
+902.4 6.3
+905.6 10.0
+907.1 1.4
+911.4 5.8
+912.9 3.3
+917.5 1.4
+921.0 3.1
+928.5 1.0
+929.9 0.5
+930.6 0.5
+933.8 1.1
+936.7 3.4
+937.4 4.6
+938.4 1.2
+945.7 4.0
+947.5 244.8
+948.6 80.5
+949.6 22.8
+950.7 4.0
+953.5 2.1
+954.5 66.2
+955.6 32.7
+956.8 13.7
+957.7 2.9
+961.7 1.5
+965.6 0.4
+971.4 3.5
+972.5 6.5
+973.5 9.1
+974.7 7.8
+981.8 2.9
+988.7 1.4
+989.3 1.9
+991.6 1.7
+994.5 3.5
+995.8 4.0
+998.1 4.7
+998.9 0.9
+999.9 2.9
+1000.6 1.4
+1001.7 5.8
+1008.2 1.6
+1011.8 1.5
+1013.7 4.0
+1014.5 1.0
+1016.9 0.5
+1022.7 1.5
+1024.1 0.5
+1042.8 1.1
+1054.5 3.0
+1090.8 1.4
+1120.6 2.9
+1136.7 2.2
+1137.8 0.6
+S	105	105	483.12
+I	ID	150
+I	RTime	7.3335
+Z	2	965.23
+172.0 1.7
+175.1 10.0
+192.1 5.8
+193.4 1.0
+200.1 2.0
+204.3 1.6
+207.2 1.0
+209.4 1.3
+215.2 1.3
+216.1 18.0
+218.1 2.5
+228.1 1.7
+230.3 1.3
+234.2 2.0
+242.2 2.0
+244.2 1.2
+251.6 7.5
+266.3 8.3
+269.1 10.6
+281.2 2.0
+283.3 1.2
+284.3 4.0
+287.0 4.0
+288.0 2.4
+290.2 2.2
+291.1 2.0
+298.9 1.8
+301.3 8.0
+303.2 3.9
+309.2 3.5
+310.4 1.7
+321.0 1.7
+337.0 2.2
+353.5 1.0
+355.0 4.9
+356.2 1.5
+357.3 1.8
+374.2 1.1
+377.3 1.7
+381.3 1.7
+387.2 2.0
+404.4 5.1
+418.4 1.2
+419.2 2.4
+421.0 3.0
+422.3 2.2
+424.0 2.2
+429.8 6.8
+430.6 12.8
+446.3 1.5
+447.3 2.5
+448.3 1.5
+453.3 6.8
+457.0 3.9
+464.3 13.3
+465.1 19.0
+466.4 14.6
+473.3 17.7
+534.2 1.2
+542.3 3.0
+548.4 10.0
+594.3 1.8
+648.3 9.6
+650.9 7.5
+662.4 4.0
+664.5 1.6
+676.3 9.1
+677.3 17.8
+678.5 1.8
+698.1 2.5
+725.3 2.7
+731.5 2.2
+747.6 6.6
+748.3 41.7
+749.4 26.2
+750.4 3.2
+757.5 2.2
+789.5 1.8
+790.5 1.5
+791.3 1.2
+842.5 1.7
+S	106	106	713.07
+I	ID	193
+I	RTime	9.5235
+Z	1	713.07
+216.3 1.5
+248.0 2.9
+272.3 3.0
+275.2 12.1
+278.1 2.4
+284.2 1.5
+292.5 5.4
+305.1 2.2
+309.2 7.5
+315.4 2.4
+355.3 4.9
+359.1 2.2
+382.1 3.0
+383.5 1.7
+386.2 1.2
+396.9 2.0
+402.0 1.5
+407.3 1.2
+414.2 1.3
+419.3 2.0
+421.4 6.5
+425.4 1.7
+428.4 2.2
+436.2 1.7
+439.2 1.3
+444.8 1.2
+452.1 4.0
+453.5 2.7
+461.2 2.0
+470.4 1.0
+471.4 3.7
+476.4 2.5
+477.4 2.5
+485.6 3.0
+488.5 2.5
+496.2 15.1
+497.3 16.7
+499.0 5.5
+504.2 3.7
+511.6 5.4
+525.4 1.2
+537.2 1.5
+538.2 6.1
+542.5 1.7
+544.4 7.0
+559.4 1.6
+560.4 2.9
+563.3 1.7
+566.4 3.2
+567.1 1.3
+570.2 1.5
+584.3 2.0
+585.0 1.3
+585.8 1.2
+597.4 9.3
+598.3 1.7
+615.4 1.6
+621.2 1.2
+625.7 1.7
+645.4 2.0
+651.0 2.2
+653.9 9.0
+656.4 1.2
+659.7 10.3
+661.4 3.9
+677.5 1.3
+678.3 3.7
+681.6 6.3
+682.3 1.5
+694.5 18.2
+695.4 37.2
+696.4 10.1
+703.6 3.4
+704.8 7.8
+721.5 1.7
+850.0 1.7
+883.6 3.2
+1002.9 2.5
+S	107	107	433.78
+I	ID	41
+I	RTime	1.9056
+Z	2	866.55
+Z	3	1299.32
+140.8 2.2
+154.0 3.9
+178.6 2.0
+198.7 1.5
+226.3 1.0
+229.1 1.6
+257.3 0.8
+260.9 2.2
+268.3 1.3
+270.0 1.5
+272.3 1.2
+275.0 6.3
+280.3 1.7
+285.1 2.2
+288.9 23.2
+292.9 3.5
+302.9 1.1
+306.0 9.1
+306.8 2.7
+318.4 3.0
+319.0 4.3
+321.9 1.2
+323.0 4.0
+326.0 7.1
+327.1 5.3
+339.8 2.7
+341.6 2.0
+342.9 26.2
+344.1 3.5
+345.1 20.0
+346.3 8.3
+348.0 7.5
+357.3 5.6
+360.7 4.6
+362.6 20.7
+363.9 1.7
+369.9 2.2
+371.0 8.6
+373.0 2.7
+376.3 2.5
+378.3 1.1
+380.8 14.0
+382.2 5.9
+386.2 11.1
+387.2 1.2
+387.9 1.6
+388.8 1.7
+393.0 3.2
+395.7 1.8
+397.3 24.0
+398.0 14.0
+404.8 1.6
+407.3 11.6
+413.0 1.7
+414.3 1.7
+414.9 2.5
+415.9 8.0
+417.3 5.9
+419.3 1.8
+421.2 2.2
+424.9 26.7
+425.8 31.5
+428.4 4.8
+432.6 2.4
+443.0 6.3
+447.2 15.1
+454.1 17.8
+475.8 10.3
+476.5 5.4
+490.9 6.5
+500.0 6.6
+505.2 12.3
+508.1 27.2
+512.8 31.7
+514.9 17.0
+520.4 7.8
+525.4 8.8
+527.3 24.8
+529.7 6.5
+530.5 2.7
+534.1 11.8
+536.7 16.1
+538.5 28.2
+546.0 2.0
+547.3 5.1
+548.4 11.8
+554.0 11.1
+558.8 1.8
+575.4 2.9
+576.2 12.3
+582.3 36.0
+600.6 5.0
+604.9 5.5
+605.9 4.4
+620.7 3.0
+630.8 9.6
+631.5 2.7
+632.5 7.8
+639.5 12.6
+644.5 10.1
+648.7 4.3
+649.3 2.7
+702.7 6.0
+720.4 4.0
+765.6 3.5
+781.4 1.8
+S	108	108	1032.50
+Z	3	3095.48
+298.0 23.1
+300.1 4.7
+302.3 9.9
+303.3 8.6
+308.1 23.8
+313.4 5.5
+322.5 19.0
+325.2 134.5
+326.4 116.4
+338.4 43.8
+340.4 10.5
+341.4 14.5
+342.2 108.3
+343.3 28.8
+353.1 17.6
+370.3 103.0
+371.1 65.7
+372.2 20.4
+378.5 24.8
+383.1 11.2
+386.3 22.5
+388.4 33.5
+389.5 15.0
+390.4 16.3
+395.2 8.1
+397.3 42.6
+401.1 4.7
+405.5 18.8
+410.1 6.8
+413.2 141.7
+415.2 713.7
+416.3 20.2
+419.3 39.7
+422.4 5.2
+431.0 65.2
+431.9 9.4
+435.2 3.9
+437.3 19.9
+439.3 14.4
+441.5 59.5
+444.2 15.3
+451.3 3.5
+453.3 86.8
+454.4 20.0
+455.2 94.9
+456.6 10.3
+459.0 5.0
+464.1 14.5
+467.3 14.6
+468.3 20.1
+470.3 60.3
+471.1 18.6
+480.3 10.1
+486.4 11.2
+490.2 8.4
+494.3 50.3
+495.4 31.6
+498.3 24.6
+504.4 67.0
+505.6 81.4
+506.5 2.2
+508.3 10.6
+509.3 27.7
+511.5 18.0
+512.4 22.1
+513.3 53.6
+524.3 153.2
+525.3 3.0
+526.1 85.6
+527.5 13.5
+528.3 5.0
+530.3 84.2
+531.1 9.5
+538.6 4.9
+541.3 11.7
+542.5 15.6
+544.4 172.9
+548.3 20.7
+550.7 20.5
+551.4 26.3
+552.3 63.3
+555.3 93.2
+558.7 17.4
+562.2 57.4
+563.9 93.7
+566.2 11.8
+571.9 847.7
+572.6 408.5
+573.4 10.9
+576.2 34.3
+578.6 40.0
+580.1 209.0
+580.8 5.9
+581.4 2.9
+582.9 89.0
+583.9 29.9
+585.3 5.0
+586.4 17.7
+587.8 34.9
+593.7 47.7
+597.6 27.0
+601.7 25.5
+602.8 39.5
+603.4 84.1
+607.6 226.1
+608.5 31.9
+612.0 34.9
+615.3 161.8
+616.5 57.0
+617.2 14.5
+618.5 572.8
+619.5 152.9
+620.8 56.1
+621.5 38.3
+624.3 26.9
+628.7 56.3
+630.0 18.5
+632.6 51.3
+635.6 25.1
+637.5 5.6
+639.5 77.4
+641.2 36.0
+643.2 20.1
+644.7 3.5
+648.2 96.9
+649.1 51.1
+650.6 102.5
+652.3 23.7
+654.6 89.0
+656.3 8.3
+657.3 53.2
+658.2 20.7
+662.2 10.0
+663.3 55.6
+664.9 55.5
+666.4 116.5
+667.6 15.3
+670.5 27.1
+671.6 23.4
+672.3 69.0
+673.4 18.2
+674.0 87.3
+675.3 5.9
+678.5 16.0
+683.8 49.0
+688.7 59.5
+689.4 1311.7
+690.3 246.2
+691.7 116.7
+693.3 351.8
+696.7 20.1
+698.1 238.1
+705.4 28.6
+706.1 44.6
+706.9 98.0
+707.6 193.7
+711.3 323.5
+712.3 22.9
+713.4 5.4
+714.4 27.0
+716.5 18.4
+719.0 9.0
+721.2 9.5
+725.4 31.2
+726.6 22.3
+729.3 67.6
+730.5 5.6
+733.1 9.8
+734.6 20.9
+737.6 121.1
+738.7 23.1
+740.6 29.8
+742.1 46.8
+743.0 80.3
+743.7 37.2
+746.4 42.0
+747.6 38.4
+748.3 20.7
+749.3 11.0
+750.5 22.6
+753.2 113.2
+754.3 104.4
+755.3 17.9
+756.5 67.2
+757.4 39.0
+758.3 60.3
+760.4 40.1
+762.2 181.8
+763.7 14.9
+764.5 606.3
+765.3 38.3
+766.3 61.3
+768.8 290.5
+769.6 230.8
+770.9 1730.2
+771.5 478.2
+772.1 159.9
+773.3 31.6
+778.2 8812.9
+779.0 1471.4
+780.0 11.4
+781.1 47.1
+782.4 435.7
+783.3 26.8
+784.7 54.7
+790.6 53.8
+793.1 42.4
+794.4 27.8
+796.3 3.5
+799.0 81.1
+802.5 360.1
+803.6 164.6
+804.4 38.3
+805.4 132.3
+806.0 30.6
+809.3 6.9
+812.5 16.4
+814.6 366.8
+815.7 157.9
+817.9 21.9
+819.6 18.4
+820.5 16.4
+821.4 18.2
+822.1 21.5
+824.3 27.6
+825.0 99.0
+827.5 4.5
+832.4 13.3
+833.2 729.7
+834.2 461.3
+835.1 24.9
+838.7 40.7
+842.1 1862.3
+843.1 605.9
+844.1 87.3
+845.9 157.2
+846.7 54.0
+847.4 28.0
+848.1 48.1
+849.4 41.2
+850.7 8.8
+851.7 38.3
+856.4 68.5
+857.2 20.1
+859.8 19.5
+860.5 18.1
+862.1 27.3
+863.4 23.2
+864.0 9.6
+865.0 41.2
+866.2 39.7
+867.5 26.5
+868.5 160.5
+870.6 46.8
+875.1 78.1
+876.5 12.5
+877.5 22.4
+878.8 42.0
+879.5 18.1
+880.5 31.4
+881.4 64.2
+883.8 337.9
+884.7 228.3
+887.1 81.9
+888.9 85.6
+895.4 529.4
+896.0 19.3
+897.4 39.6
+904.0 215.1
+904.6 29.4
+905.6 29.7
+907.7 52.8
+910.6 55.3
+911.4 66.7
+912.7 139.7
+913.7 10.6
+915.1 32.0
+915.9 101.5
+917.6 300.8
+918.5 253.5
+919.7 134.6
+921.7 229.2
+922.9 94.8
+923.5 20.6
+924.8 35.7
+926.5 62.7
+927.4 105.9
+928.6 44.5
+929.5 5.7
+930.2 97.1
+931.4 477.5
+932.2 250.2
+933.0 14.4
+933.7 60.7
+934.5 8.6
+936.5 106.6
+937.4 56.1
+940.2 10242.7
+941.1 4019.8
+942.2 420.4
+943.4 133.7
+944.7 95.3
+946.2 193.5
+947.4 95.6
+948.1 53.9
+949.3 98.4
+951.4 587.9
+952.1 139.4
+952.8 60.9
+953.7 62.0
+955.1 350.9
+956.7 27.9
+957.7 45.3
+959.7 66.3
+960.6 292.8
+961.5 35.1
+962.9 97.0
+963.6 66.8
+964.7 51.2
+965.3 61.0
+967.3 70.4
+968.1 538.4
+968.7 23.6
+970.7 110.5
+971.5 48.9
+973.4 102.2
+974.5 119.1
+976.1 82.8
+977.2 2973.8
+978.1 927.5
+979.4 304.5
+980.3 127.2
+982.2 41.1
+982.9 55.7
+987.2 396.3
+989.4 77.2
+990.1 45.8
+991.0 61.3
+991.8 131.2
+992.8 237.8
+994.0 192.2
+994.7 84.2
+995.8 45.5
+996.7 160.1
+997.6 205.6
+999.4 252.9
+1000.3 88.0
+1001.7 34.0
+1003.6 2812.6
+1004.7 337.4
+1005.8 186.6
+1006.6 95.0
+1007.8 118.5
+1008.9 123.8
+1010.0 29.7
+1010.9 217.4
+1011.8 93.7
+1012.9 96.7
+1014.8 194.9
+1015.9 58.8
+1017.1 217.3
+1018.8 103.4
+1020.3 206.9
+1021.5 124.6
+1022.5 43.5
+1024.3 3.8
+1041.4 6.8
+1042.5 22.0
+1043.5 149.2
+1044.1 49.2
+1045.7 38.9
+1047.1 133.7
+1048.1 80.7
+1049.6 235.1
+1051.2 22.3
+1053.3 87.5
+1054.6 21.7
+1055.7 81.4
+1057.6 27.4
+1065.4 43.6
+1069.1 151.6
+1073.1 52.1
+1077.0 38.9
+1077.9 199.5
+1078.6 73.2
+1080.8 26.2
+1082.0 14.3
+1083.8 33.0
+1084.7 53.5
+1085.5 115.3
+1086.2 43.5
+1087.5 113.9
+1088.7 86.7
+1089.9 346.8
+1090.8 25.5
+1091.8 47.4
+1094.8 41.4
+1096.1 5.4
+1098.2 9.6
+1099.5 23.8
+1103.1 49.8
+1105.2 89.2
+1107.4 20.0
+1108.6 222.6
+1109.4 26.8
+1110.4 102.7
+1112.0 25.1
+1113.0 36.3
+1114.2 377.1
+1115.6 57.3
+1124.6 114.2
+1125.5 203.5
+1126.9 59.6
+1129.7 48.0
+1133.6 453.9
+1134.4 9.5
+1137.8 69.8
+1138.5 25.1
+1139.1 38.7
+1140.5 40.2
+1142.5 3056.9
+1143.5 1187.8
+1144.6 339.7
+1146.5 30.2
+1147.4 482.2
+1148.7 417.1
+1149.7 401.1
+1150.4 99.4
+1151.4 20.0
+1153.9 29.9
+1158.6 2811.5
+1159.5 125.4
+1160.6 19.2
+1161.7 20.3
+1162.4 50.3
+1166.0 313.7
+1166.8 126.6
+1167.4 29.8
+1168.1 29.6
+1169.3 61.9
+1171.7 7.2
+1173.6 92.3
+1175.6 83.3
+1177.7 165.2
+1178.3 309.2
+1179.6 61.9
+1180.4 12.1
+1181.8 94.6
+1183.9 100.7
+1184.9 217.1
+1186.1 141.6
+1187.4 53.3
+1189.2 11.9
+1190.7 44.9
+1191.4 65.2
+1192.1 34.2
+1194.1 1783.6
+1195.1 325.2
+1195.8 89.7
+1197.5 181.6
+1198.6 1195.9
+1199.7 699.6
+1200.9 29.4
+1201.7 7.7
+1203.4 634.4
+1204.3 1723.6
+1205.2 186.2
+1206.0 77.0
+1208.4 35.5
+1211.2 11.3
+1212.3 115.4
+1213.5 654.3
+1214.7 491.7
+1216.4 5417.4
+1217.5 2851.9
+1218.4 559.2
+1219.6 125.3
+1220.5 15.8
+1230.1 231.1
+1231.4 328.2
+1233.4 498.9
+1235.8 19.6
+1237.9 66.5
+1239.4 1156.6
+1240.2 143.4
+1240.8 220.5
+1242.2 1010.5
+1243.4 90.8
+1245.5 27.0
+1246.8 187.3
+1248.0 283.2
+1248.9 250.5
+1250.7 447.7
+1252.5 58.6
+1254.9 19.9
+1255.7 53.7
+1256.6 55.8
+1257.7 35.2
+1259.7 70.9
+1263.9 26.9
+1268.8 829.1
+1271.2 28.9
+1273.7 14.3
+1274.4 76.2
+1276.0 60.3
+1277.7 1178.1
+1278.8 201.3
+1283.4 519.1
+1284.4 612.1
+1285.3 13.8
+1287.5 155.4
+1288.5 55.0
+1289.8 130.6
+1291.7 37.9
+1294.9 69.7
+1295.9 155.2
+1296.8 228.4
+1297.6 206.9
+1298.5 128.8
+1299.2 30.0
+1301.6 51.1
+1303.6 32.8
+1305.3 59.3
+1307.4 336.9
+1308.7 356.0
+1310.0 55.5
+1311.2 238.0
+1312.8 64.2
+1315.5 51.1
+1317.6 12.5
+1318.5 16.5
+1319.5 277.5
+1320.4 84.6
+1324.1 158.4
+1325.1 9.4
+1327.8 29.2
+1328.7 466.6
+1329.3 94.7
+1330.0 161.3
+1330.8 188.6
+1331.5 27.3
+1333.2 5524.3
+1334.3 99.8
+1335.6 45.3
+1336.3 30.0
+1341.6 440.7
+1342.2 10178.0
+1343.6 226.7
+1344.5 139.0
+1345.4 94.6
+1346.6 120.4
+1347.8 102.8
+1348.6 12.3
+1349.8 29.6
+1353.4 143.4
+1354.2 331.0
+1355.9 3292.8
+1358.5 143.1
+1360.2 31.2
+1362.4 470.2
+1363.4 124.3
+1364.8 32.3
+1372.3 29.0
+1373.4 24.8
+1375.6 214.3
+1376.3 100.3
+1377.2 91.9
+1379.8 23.6
+1381.2 78.3
+1383.4 60.4
+1386.5 6.4
+1389.7 12.9
+1391.5 29.6
+1394.7 472.1
+1395.6 141.6
+1396.5 134.4
+1397.3 51.2
+1398.4 19.3
+1401.1 48.8
+1402.6 81.7
+1404.6 23.1
+1406.6 25.7
+1408.6 68.5
+1409.7 35.5
+1410.5 16.6
+1411.6 248.4
+1412.6 1726.6
+1413.6 600.9
+1414.6 330.7
+1415.6 41.2
+1417.6 11.7
+1418.3 270.9
+1419.0 127.4
+1420.2 506.0
+1421.3 107.0
+1422.1 23.6
+1422.9 29.8
+1424.8 21.8
+1426.6 90.5
+1427.7 321.7
+1428.6 30.7
+1430.2 80.4
+1431.3 680.2
+1432.6 3.9
+1434.5 9.0
+1440.2 1776.8
+1440.8 147.7
+1441.8 55.1
+1447.8 3.9
+1450.7 58.6
+1452.8 55.8
+1454.9 10.2
+1457.3 119.7
+1457.9 87.7
+1459.0 60.5
+1459.8 23.9
+1466.0 119.3
+1466.7 61.2
+1467.7 54.2
+1470.7 235.0
+1471.7 31.1
+1474.8 531.2
+1475.8 752.0
+1476.6 12.6
+1477.3 46.8
+1478.4 21.7
+1484.7 14.6
+1488.8 45.1
+1489.6 12.2
+1490.9 59.0
+1500.8 55.2
+1504.5 241.5
+1505.2 21.3
+1505.8 100.9
+1508.1 88.0
+1511.6 50.8
+1513.5 132.3
+1519.5 150.6
+1522.7 739.7
+1523.7 282.9
+1524.6 372.7
+1536.7 62.5
+1537.8 134.1
+1540.6 2371.6
+1541.6 2764.9
+1542.7 1118.8
+1543.6 136.8
+1545.4 13.0
+1550.4 27.0
+1554.7 2189.8
+1555.7 1840.9
+1556.8 750.2
+1558.0 42.9
+1562.5 10.1
+1566.7 14.5
+1567.6 28.1
+1572.1 64.2
+1572.7 23.5
+1573.8 114.2
+1576.4 39.8
+1582.7 6.9
+1585.5 19.6
+1588.1 19.7
+1588.9 88.3
+1592.4 14.6
+1597.9 59.4
+1601.7 12.4
+1612.4 108.3
+1618.6 80.6
+1619.3 9.6
+1628.9 16.3
+1630.2 6.1
+1639.6 11.0
+1643.8 18.9
+1645.2 63.8
+1647.7 8.4
+1649.9 18.9
+1665.6 135.2
+1666.4 16.2
+1668.6 3.1
+1670.9 19.5
+1676.1 28.1
+1682.7 69.0
+1684.0 82.8
+1684.9 36.1
+1687.3 22.4
+1701.9 229.3
+1702.9 54.4
+1704.1 15.0
+1710.7 112.8
+1711.6 22.8
+1718.1 29.1
+1720.9 4.2
+1725.8 36.0
+1732.7 23.9
+1740.6 24.3
+1741.4 93.5
+1749.0 29.7
+1755.0 6.4
+1758.3 26.6
+1762.2 20.2
+1766.5 46.5
+1767.3 69.1
+1767.9 33.8
+1772.9 296.7
+1774.0 4.7
+1780.1 41.1
+1782.0 25.7
+1782.8 34.3
+1789.6 71.3
+1790.4 98.9
+1791.8 27.4
+1801.7 58.4
+1804.1 8.8
+1805.0 30.9
+1809.1 34.9
+1814.5 26.0
+1822.4 17.4
+1825.5 19.6
+1841.8 56.7
+1843.7 67.1
+1844.3 13.6
+1857.4 14.3
+1877.1 48.5
+1878.5 53.6
+1879.3 11.7
+1881.7 52.2
+1882.8 64.1
+1884.0 141.9
+1884.8 6.2
+1886.1 63.4
+1897.9 21.0
+1901.9 495.1
+1903.0 65.0
+1904.1 43.8
+1905.3 17.9
+1908.0 10.7
+1912.2 19.8
+1913.0 20.4
+1916.6 5.9
+1917.5 7.5
+1918.6 67.3
+1924.8 29.6
+1926.2 26.3
+1928.6 45.3
+1934.7 92.6
+1935.8 209.0
+1936.5 47.3
+1937.7 100.1
+1938.6 69.2
+1942.8 32.6
+1944.0 31.7
+1944.6 14.9
+1946.7 22.2
+1952.4 37.3
+1953.0 273.2
+1954.1 177.7
+1954.9 89.9
+1955.7 10.8
+1957.2 61.0
+1958.5 4.4
+1971.0 47.5
+1972.8 128.4
+1973.4 237.8
+1974.1 10.4
+1985.1 5.9
+S	109	109	419.32
+I	ID	207
+I	RTime	10.2360
+Z	2	837.63
+127.1 3.0
+129.1 6.0
+140.1 1.7
+144.9 1.8
+147.2 6.0
+149.1 9.3
+155.1 10.1
+156.3 1.2
+157.1 1.8
+161.2 1.7
+172.1 9.1
+175.1 27.5
+175.8 1.7
+185.1 1.7
+189.2 4.0
+198.1 1.5
+199.2 3.7
+204.3 3.0
+208.0 1.7
+212.2 5.9
+213.2 3.2
+216.2 5.1
+218.2 1.6
+226.1 15.8
+227.2 1.7
+228.0 1.2
+229.2 4.3
+230.3 3.5
+238.4 3.0
+239.2 1.1
+240.2 1.2
+243.3 3.5
+245.1 2.4
+246.0 2.5
+247.1 1.2
+248.3 1.1
+249.3 2.2
+253.2 3.0
+255.1 6.8
+256.1 2.2
+258.3 1.3
+259.2 3.0
+265.1 2.5
+269.8 7.3
+272.0 3.7
+273.1 4.5
+274.3 9.8
+275.1 12.0
+278.4 4.3
+282.2 1.1
+283.1 5.3
+284.3 1.3
+289.3 1.5
+290.2 10.3
+291.1 7.0
+298.3 3.2
+300.3 3.0
+303.7 14.5
+304.4 18.3
+305.5 4.5
+316.2 2.7
+325.3 2.0
+326.1 1.6
+327.1 2.4
+329.2 23.0
+331.2 1.8
+341.5 2.7
+345.0 7.5
+347.3 2.2
+348.7 4.4
+356.4 5.6
+358.6 1.1
+366.0 12.1
+367.3 2.0
+368.0 2.5
+372.5 6.5
+375.3 14.3
+377.3 2.5
+379.3 1.2
+383.2 15.8
+384.2 20.2
+385.2 1.8
+387.0 9.8
+389.5 4.3
+390.4 27.1
+391.3 1.6
+397.4 1.8
+401.2 147.8
+402.2 45.9
+403.4 8.8
+405.4 1.2
+407.1 7.0
+409.6 15.0
+410.4 33.4
+411.4 6.1
+412.7 9.1
+433.3 3.0
+447.4 1.8
+477.6 9.1
+491.4 3.7
+492.2 2.5
+508.3 9.6
+518.5 1.5
+519.3 1.5
+520.5 4.3
+530.2 3.5
+551.4 4.1
+554.3 46.0
+555.4 19.3
+556.2 8.1
+561.5 4.0
+564.6 2.0
+565.4 4.5
+580.2 1.7
+594.2 10.1
+611.5 56.0
+612.4 14.6
+613.2 3.7
+645.6 2.4
+663.1 1.7
+667.2 3.2
+676.6 1.8
+677.5 2.0
+682.5 21.0
+683.6 14.1
+685.6 1.5
+689.1 2.0
+690.2 3.4
+700.5 4.3
+709.4 2.0
+710.2 1.8
+731.5 1.2
+S	110	110	613.19
+Z	2	1225.37
+175.2 4.1
+177.2 3.1
+178.1 1.1
+198.3 1.4
+213.2 1.9
+214.3 1.6
+215.4 1.5
+216.1 3.1
+221.0 3.4
+222.0 3.2
+223.2 3.9
+226.6 0.8
+230.1 3.2
+233.2 0.9
+235.2 2.4
+239.4 0.4
+243.1 1.4
+245.1 0.8
+248.1 15.9
+249.4 0.5
+251.1 0.3
+256.8 3.8
+263.4 0.9
+265.3 2.0
+266.9 7.9
+268.1 4.4
+269.1 9.2
+270.1 6.1
+271.0 5.0
+274.0 4.0
+279.0 1.8
+281.1 10.6
+282.0 1.8
+283.2 3.5
+284.1 3.2
+284.7 2.7
+285.8 0.3
+287.0 7.6
+287.7 3.2
+289.2 1.4
+291.0 2.3
+299.2 4.7
+299.9 1.2
+300.8 5.8
+302.2 4.9
+305.4 2.7
+306.2 5.4
+307.1 0.7
+312.3 0.9
+319.2 59.0
+320.2 3.3
+321.2 0.9
+322.2 2.7
+327.5 0.8
+330.1 0.3
+331.2 0.9
+336.1 1.4
+345.1 1.7
+346.2 2.2
+351.0 1.3
+355.1 68.0
+356.1 34.4
+357.1 87.2
+358.1 14.8
+359.1 11.2
+360.3 0.9
+370.9 9.0
+372.3 2.1
+374.3 6.0
+376.3 18.0
+377.2 2.8
+379.0 2.6
+386.2 1.6
+387.3 0.7
+390.3 0.7
+393.4 1.1
+403.3 0.4
+409.9 1.6
+418.6 1.3
+422.2 0.4
+427.1 0.7
+429.6 3.1
+430.3 0.4
+431.0 0.9
+440.7 7.2
+442.5 0.8
+444.0 1.1
+445.5 19.0
+446.4 3.1
+447.3 13.5
+454.4 4.6
+455.6 1.3
+458.5 5.3
+460.3 0.8
+461.1 1.6
+462.7 5.7
+463.4 39.2
+464.4 3.9
+468.0 2.0
+478.1 2.8
+479.8 2.3
+481.4 14.7
+482.0 3.9
+483.8 5.1
+485.8 4.0
+486.6 0.4
+487.3 1.9
+490.3 7.4
+491.1 3.6
+494.3 7.5
+496.4 6.8
+497.1 0.2
+498.0 1.5
+499.2 11.5
+500.3 1.6
+501.2 3.0
+502.4 21.2
+503.2 6.9
+504.9 7.2
+505.7 1.8
+507.0 9.1
+508.1 10.8
+509.3 1.0
+510.6 0.6
+511.4 2.6
+513.4 3.4
+514.2 0.4
+515.2 0.2
+516.5 37.9
+517.3 4.7
+518.6 4.5
+519.4 0.4
+520.9 8.2
+524.2 5.4
+525.4 73.3
+527.8 9.7
+528.5 6.9
+530.1 5.8
+531.0 2.6
+532.3 11.4
+533.6 5.2
+534.4 18.9
+535.5 1.6
+537.1 12.4
+538.3 4.9
+539.4 7.7
+540.6 0.4
+542.1 20.6
+542.8 20.1
+543.7 2.9
+546.6 24.9
+548.4 26.4
+549.3 13.1
+550.1 9.3
+551.2 99.8
+551.8 26.0
+552.5 5.6
+553.4 3.2
+554.5 37.9
+555.2 13.7
+556.6 21.2
+560.1 226.2
+561.8 13.2
+563.2 33.5
+567.5 6.6
+569.0 220.8
+569.9 2.4
+570.5 8.2
+571.9 12.8
+573.6 5.7
+575.2 2.3
+576.5 3.2
+577.9 21.9
+578.7 4.5
+579.6 5.2
+580.4 1.9
+581.9 19.8
+585.3 0.8
+586.2 2.0
+587.2 34.1
+587.9 3.2
+588.5 16.5
+589.4 7.1
+590.2 0.3
+591.4 1.6
+592.8 1.6
+594.4 36.1
+595.8 137.8
+596.5 56.0
+597.2 5.0
+597.9 9.9
+599.8 6.7
+600.6 1.0
+601.4 6.2
+602.5 16.5
+603.2 38.9
+604.3 270.1
+605.0 146.7
+606.4 3.4
+611.1 0.3
+613.8 2.7
+623.6 3.9
+628.6 1.8
+633.1 2.4
+636.3 2.0
+640.4 0.8
+650.6 1.5
+652.7 5.2
+653.8 5.7
+656.3 5.5
+657.3 3.2
+658.3 0.8
+660.2 4.1
+661.7 2.4
+665.7 3.4
+674.2 13.5
+675.5 1.6
+676.3 3.8
+678.4 48.2
+679.5 9.2
+680.5 2.1
+684.0 0.5
+686.3 4.7
+690.3 8.2
+692.3 25.7
+693.3 0.6
+699.8 1.0
+702.5 1.2
+706.4 8.9
+709.9 10.3
+710.8 4.6
+714.8 15.9
+723.9 5.3
+727.6 9.5
+728.3 0.9
+729.5 5.8
+730.8 6.6
+731.7 1.4
+732.8 1.8
+734.9 4.1
+744.7 2.9
+745.4 12.7
+746.4 8.6
+747.2 1.4
+754.5 0.5
+756.2 5.3
+758.2 15.0
+761.5 7.5
+762.4 7.2
+763.3 3.2
+764.7 0.4
+769.3 0.7
+772.9 12.8
+777.1 2.4
+779.3 38.3
+780.5 25.8
+781.4 1.8
+785.6 3.0
+797.4 3.8
+799.3 3.8
+803.3 4.5
+813.3 5.0
+814.6 4.2
+815.3 1.8
+817.8 3.8
+818.7 0.8
+820.5 0.5
+829.4 1.0
+830.4 0.6
+831.2 2.6
+832.5 33.5
+833.3 3.5
+834.4 3.5
+837.5 0.6
+841.2 0.7
+842.6 0.4
+850.3 10.7
+851.2 2.4
+853.0 3.4
+855.1 1.2
+859.9 1.7
+862.7 3.6
+864.3 1.8
+868.5 1.5
+872.4 4.0
+874.4 2.4
+877.3 3.5
+886.3 3.4
+888.2 4.8
+889.2 8.2
+890.4 21.5
+891.5 14.6
+897.1 4.6
+900.4 0.3
+903.6 7.3
+904.3 3.5
+905.5 7.2
+907.5 58.6
+908.5 30.1
+917.9 3.1
+921.3 2.9
+935.5 2.2
+944.2 3.2
+946.5 5.3
+947.3 2.2
+948.1 3.2
+956.5 5.1
+959.6 1.5
+960.8 1.5
+961.6 0.9
+972.7 2.8
+974.2 3.7
+975.4 1.6
+978.4 55.0
+979.4 41.5
+980.2 1.9
+980.9 1.2
+990.5 0.9
+991.7 3.1
+993.6 2.1
+997.5 0.5
+1007.6 1.0
+1008.7 11.1
+1009.5 3.0
+1012.1 3.2
+1014.3 5.1
+1020.1 1.2
+1031.3 14.1
+1032.5 12.2
+1033.6 1.9
+1045.5 0.6
+1049.5 98.3
+1050.5 53.3
+1053.5 5.8
+1054.3 3.9
+1055.3 3.9
+1061.3 4.4
+1071.1 0.5
+1072.4 0.5
+1074.8 4.4
+1119.7 0.5
+S	111	111	1033.02
+Z	3	3097.04
+297.2 0.7
+304.3 3.4
+306.1 1.6
+312.7 1.5
+314.4 3.6
+318.1 1.2
+325.3 6.7
+326.2 5.5
+328.4 0.6
+330.2 2.3
+335.2 1.7
+337.3 1.4
+338.3 1.9
+341.2 1.5
+342.0 3.3
+354.6 2.0
+359.4 4.2
+371.3 4.9
+372.2 2.3
+380.4 0.6
+382.9 2.3
+388.1 1.0
+389.4 4.2
+393.2 0.9
+398.3 0.4
+403.0 1.2
+405.6 5.1
+408.4 0.8
+410.1 6.5
+413.2 4.5
+414.3 5.1
+415.3 20.0
+416.1 6.5
+417.6 0.6
+419.3 0.6
+425.2 0.9
+430.2 0.4
+441.3 0.3
+443.4 2.1
+453.1 0.2
+454.4 0.4
+455.4 1.6
+456.5 2.4
+457.6 0.6
+459.3 0.6
+462.4 2.0
+465.3 1.4
+466.0 1.4
+467.3 2.2
+470.2 5.7
+474.2 0.7
+483.4 2.2
+493.9 3.1
+500.1 0.6
+501.3 0.3
+504.4 11.5
+505.2 1.2
+512.6 0.6
+524.4 9.3
+525.1 1.1
+527.7 5.1
+534.5 3.7
+536.3 3.9
+537.8 1.1
+542.4 2.3
+543.5 2.4
+544.3 5.3
+550.2 3.3
+551.6 2.5
+552.2 1.2
+556.6 0.4
+558.3 3.7
+562.3 0.3
+564.4 0.6
+565.5 9.2
+570.5 7.9
+572.1 62.5
+573.1 7.2
+574.5 2.7
+578.3 1.4
+580.4 8.5
+583.5 2.3
+584.2 4.1
+586.4 2.0
+589.1 1.4
+599.9 3.4
+601.4 6.6
+602.5 3.7
+607.9 18.6
+608.6 1.4
+609.3 6.9
+613.2 0.9
+614.7 4.0
+615.4 4.1
+617.4 1.4
+618.4 21.0
+619.3 12.9
+620.3 3.6
+621.4 1.2
+623.8 2.0
+625.5 2.6
+627.6 1.4
+631.3 2.9
+635.2 4.7
+637.4 0.8
+640.5 1.8
+642.7 1.4
+647.2 2.4
+649.8 3.6
+650.5 1.2
+654.3 0.9
+655.4 4.4
+657.2 1.3
+659.7 1.5
+662.2 3.8
+665.0 11.7
+666.5 11.8
+667.3 1.5
+668.4 1.5
+669.6 0.5
+671.9 2.9
+672.9 5.1
+674.6 1.7
+675.3 2.4
+677.9 4.9
+683.0 2.8
+684.1 4.7
+684.7 0.3
+687.4 0.4
+689.5 70.6
+690.5 47.5
+691.4 13.5
+693.3 4.0
+694.1 8.4
+698.0 6.7
+699.0 6.4
+703.8 1.8
+704.9 11.7
+706.0 10.6
+706.7 9.9
+708.0 1.5
+711.4 1.1
+712.3 3.1
+714.7 0.8
+716.4 0.9
+719.3 2.8
+720.8 4.7
+721.7 0.9
+722.9 4.6
+724.3 0.5
+725.6 4.3
+727.5 11.6
+738.0 9.2
+738.7 2.3
+743.5 6.6
+744.4 2.6
+746.5 2.2
+747.3 1.5
+748.5 1.3
+753.4 8.9
+754.2 4.3
+755.3 4.3
+757.0 18.8
+757.8 4.0
+758.7 6.5
+759.4 4.7
+762.3 19.7
+764.4 33.5
+765.5 7.8
+766.6 6.8
+767.5 2.2
+768.9 19.8
+769.7 23.4
+771.1 117.8
+771.9 30.2
+772.5 21.2
+778.3 519.2
+779.2 104.1
+780.2 4.1
+780.8 2.9
+781.7 8.0
+782.4 9.2
+783.7 2.2
+784.4 1.4
+785.5 3.3
+787.6 1.0
+789.3 1.2
+791.6 3.0
+792.5 4.5
+793.8 2.0
+795.6 0.6
+800.2 5.0
+801.6 0.8
+802.4 15.9
+803.1 3.7
+803.7 13.6
+804.5 6.0
+805.8 5.0
+810.4 9.6
+811.7 5.5
+812.6 0.6
+814.2 2.8
+814.9 5.1
+816.5 3.9
+817.7 8.1
+819.5 11.5
+820.5 2.2
+822.3 4.8
+824.7 17.8
+825.3 1.2
+827.4 1.7
+830.5 2.3
+833.0 21.3
+834.1 10.9
+834.7 9.7
+836.5 2.3
+837.1 0.7
+838.7 1.4
+839.7 2.6
+841.9 52.7
+842.5 74.6
+843.2 58.1
+844.0 3.2
+845.3 5.7
+846.5 3.7
+847.7 5.5
+849.6 3.8
+851.3 5.3
+852.4 0.6
+853.5 3.2
+854.6 3.3
+856.4 2.7
+857.1 3.7
+861.6 0.6
+865.1 7.0
+866.5 6.2
+867.6 0.4
+868.6 2.9
+869.6 5.9
+871.9 1.8
+872.8 3.5
+873.7 6.9
+875.2 5.8
+876.1 5.8
+877.4 5.1
+880.3 4.1
+881.2 1.4
+883.9 13.2
+884.6 6.2
+886.3 9.2
+887.5 11.9
+889.1 4.5
+890.0 2.1
+892.0 4.6
+894.3 3.0
+895.7 11.9
+901.7 1.8
+903.4 3.8
+904.3 6.8
+907.3 3.8
+909.0 1.0
+909.9 2.3
+910.8 8.6
+913.3 4.2
+914.5 7.9
+916.1 0.9
+917.4 14.7
+918.5 10.2
+920.9 4.6
+922.7 10.1
+924.0 7.9
+925.7 1.7
+927.0 4.6
+927.8 1.3
+931.2 22.2
+932.3 25.8
+933.3 6.1
+937.8 17.1
+938.7 7.4
+940.3 528.2
+941.1 121.9
+941.7 62.8
+942.7 8.5
+943.7 10.4
+945.2 11.1
+946.0 3.0
+947.5 21.8
+951.0 7.7
+951.8 9.9
+953.0 6.9
+954.2 6.9
+955.0 1.7
+956.3 15.9
+957.3 18.3
+958.5 12.0
+959.7 0.3
+960.8 36.2
+961.4 1.1
+962.2 3.2
+963.4 21.0
+964.2 1.5
+965.4 4.8
+966.6 19.5
+967.3 6.5
+968.3 36.7
+970.1 3.8
+971.3 15.1
+973.3 17.3
+974.4 1.2
+975.6 17.7
+976.9 113.8
+977.7 165.9
+979.6 21.5
+980.7 7.7
+981.4 15.4
+982.4 0.9
+983.4 6.2
+984.8 15.8
+985.6 10.3
+986.8 16.8
+987.8 18.6
+988.6 10.1
+989.7 2.7
+992.3 6.0
+993.4 17.4
+994.3 25.3
+995.3 9.5
+996.3 14.5
+997.2 17.6
+998.0 44.7
+999.2 16.9
+1000.3 24.2
+1001.4 11.6
+1002.5 13.0
+1003.9 139.4
+1005.0 7.5
+1005.6 4.0
+1006.3 19.7
+1007.4 3.9
+1008.7 1.1
+1010.1 34.7
+1011.0 35.3
+1012.1 18.5
+1013.3 20.4
+1014.2 31.4
+1015.1 44.1
+1016.3 15.2
+1017.6 24.6
+1018.8 15.1
+1020.1 15.8
+1020.8 17.9
+1023.0 22.5
+1024.2 2.2
+1031.9 0.7
+1034.5 2.3
+1035.5 0.9
+1036.1 4.2
+1042.4 0.5
+1043.9 3.6
+1047.9 5.0
+1049.3 6.6
+1051.4 9.7
+1052.5 5.0
+1057.4 1.1
+1058.4 4.7
+1060.0 0.9
+1062.2 4.0
+1064.3 0.8
+1065.6 1.7
+1069.5 4.0
+1070.3 3.2
+1073.4 1.4
+1075.6 1.2
+1077.6 11.8
+1080.7 8.7
+1082.4 7.6
+1084.7 5.3
+1085.7 2.9
+1087.4 5.3
+1088.1 11.1
+1089.4 29.8
+1090.1 3.6
+1090.7 2.1
+1091.9 8.1
+1093.9 4.5
+1098.5 2.8
+1100.7 5.6
+1102.8 1.9
+1103.7 3.8
+1105.7 1.3
+1108.0 16.4
+1109.0 10.0
+1110.0 8.1
+1112.7 2.3
+1114.4 16.0
+1115.7 3.6
+1124.1 6.8
+1125.5 7.6
+1126.6 4.4
+1128.7 6.0
+1129.4 5.3
+1130.5 7.2
+1132.3 5.4
+1134.1 9.5
+1137.7 1.3
+1140.0 6.8
+1142.6 135.9
+1143.6 69.9
+1144.7 24.5
+1145.6 14.7
+1147.5 9.4
+1148.2 24.8
+1149.0 15.4
+1149.9 8.6
+1152.1 7.5
+1153.6 9.9
+1154.4 0.2
+1156.1 16.0
+1157.3 3.7
+1158.8 62.4
+1159.8 11.1
+1160.9 0.6
+1162.5 3.3
+1164.8 0.3
+1166.6 46.7
+1167.5 19.8
+1168.1 1.3
+1169.7 6.4
+1170.7 1.7
+1172.1 6.7
+1173.7 2.6
+1178.3 13.1
+1179.2 2.4
+1180.7 3.9
+1181.5 0.8
+1182.6 4.6
+1184.2 0.8
+1184.8 6.6
+1185.8 7.4
+1188.4 4.1
+1189.5 8.7
+1190.4 3.1
+1191.6 6.5
+1194.1 41.6
+1194.8 50.9
+1195.7 10.2
+1197.2 2.5
+1198.5 68.7
+1199.6 42.2
+1200.6 8.4
+1201.6 17.0
+1203.5 81.2
+1204.3 137.3
+1205.2 20.2
+1206.2 3.6
+1208.2 0.2
+1209.3 0.4
+1212.8 7.2
+1213.7 61.0
+1214.8 11.2
+1216.5 249.2
+1217.6 162.7
+1218.6 58.6
+1219.6 11.1
+1220.2 4.2
+1221.2 2.5
+1225.6 0.6
+1228.5 1.1
+1230.0 6.9
+1230.8 3.6
+1231.6 4.2
+1233.3 13.0
+1234.2 11.1
+1235.4 2.8
+1236.3 3.0
+1237.5 5.0
+1238.4 3.9
+1239.5 20.3
+1240.2 17.7
+1241.1 3.5
+1242.2 17.9
+1243.4 5.8
+1245.8 1.0
+1247.6 19.2
+1248.4 16.9
+1249.3 16.5
+1250.7 8.4
+1251.7 13.9
+1254.0 3.7
+1264.7 1.3
+1266.0 2.3
+1267.6 1.6
+1269.4 7.5
+1270.6 1.9
+1274.0 9.1
+1275.3 4.2
+1276.5 2.5
+1277.5 8.8
+1278.4 38.3
+1279.2 1.2
+1280.8 5.3
+1282.3 0.9
+1283.6 28.7
+1284.3 28.4
+1285.3 6.5
+1286.4 2.5
+1287.1 0.3
+1288.6 1.1
+1289.6 1.1
+1290.8 4.6
+1291.6 2.6
+1293.6 0.7
+1294.8 4.7
+1296.0 0.8
+1296.9 9.0
+1298.3 10.4
+1300.6 0.7
+1302.8 3.5
+1307.7 5.3
+1308.9 10.2
+1311.3 5.2
+1312.5 6.6
+1313.6 3.6
+1314.6 1.3
+1319.2 15.9
+1320.5 1.4
+1323.5 1.3
+1324.3 4.6
+1325.8 13.2
+1327.4 5.1
+1328.7 24.5
+1329.5 22.7
+1330.5 12.5
+1331.2 6.7
+1332.9 19.0
+1333.7 157.9
+1335.0 1.5
+1335.9 5.1
+1336.7 9.7
+1337.7 2.2
+1339.5 4.3
+1340.9 4.0
+1342.5 254.8
+1343.4 38.0
+1344.3 7.1
+1345.6 2.7
+1346.4 3.3
+1352.1 2.1
+1353.8 12.3
+1355.5 48.5
+1356.2 72.3
+1357.2 6.7
+1358.5 4.9
+1359.4 0.9
+1360.3 0.4
+1361.3 4.1
+1362.3 5.8
+1363.2 2.0
+1364.3 15.1
+1365.7 1.2
+1367.5 5.1
+1368.9 3.0
+1370.5 0.7
+1371.4 1.7
+1373.2 2.8
+1375.1 9.9
+1375.8 4.0
+1376.7 4.6
+1377.4 10.3
+1379.2 1.3
+1381.1 2.3
+1382.6 1.0
+1383.6 4.7
+1384.9 0.7
+1387.5 2.8
+1389.1 1.6
+1389.8 8.6
+1390.6 2.5
+1394.5 18.1
+1395.2 8.6
+1395.8 17.2
+1397.5 1.4
+1398.6 2.2
+1402.6 0.4
+1403.5 1.5
+1404.6 4.4
+1407.0 1.5
+1408.0 1.5
+1408.8 5.9
+1411.0 6.2
+1412.4 62.0
+1413.6 49.8
+1414.7 31.3
+1416.1 11.3
+1417.5 7.9
+1418.1 12.1
+1418.9 9.3
+1420.1 22.7
+1421.4 7.2
+1422.9 6.7
+1424.8 3.2
+1426.7 5.2
+1427.6 18.9
+1428.2 2.9
+1431.4 14.6
+1432.4 15.1
+1433.8 0.7
+1436.6 2.3
+1438.0 17.8
+1440.6 48.9
+1441.5 9.0
+1443.0 7.4
+1445.0 2.0
+1455.6 1.3
+1456.9 9.3
+1458.5 5.8
+1460.0 3.4
+1464.2 2.8
+1465.0 3.1
+1466.2 13.0
+1466.9 1.5
+1468.5 5.3
+1471.2 1.3
+1472.0 5.1
+1472.9 0.8
+1474.1 8.6
+1475.1 43.3
+1475.8 29.5
+1476.7 10.4
+1479.0 3.4
+1481.0 6.2
+1483.8 1.6
+1488.8 8.7
+1489.9 4.5
+1490.7 5.8
+1491.9 2.3
+1494.2 2.7
+1495.9 0.6
+1497.8 1.4
+1502.5 0.6
+1503.5 1.5
+1505.1 3.0
+1506.5 4.2
+1510.2 1.3
+1511.8 2.7
+1512.9 0.9
+1516.0 6.0
+1519.1 3.7
+1520.7 3.6
+1521.9 9.2
+1522.7 38.0
+1523.7 44.1
+1524.8 9.6
+1525.4 3.9
+1536.8 1.8
+1538.1 3.4
+1538.8 0.2
+1540.7 171.9
+1541.7 158.5
+1542.6 67.2
+1543.7 26.0
+1544.5 4.0
+1549.8 1.2
+1554.7 86.3
+1555.7 106.2
+1556.9 54.9
+1557.8 9.9
+1561.7 3.3
+1566.6 2.4
+1567.8 2.0
+1569.4 1.7
+1573.7 1.5
+1575.8 4.2
+1577.9 2.0
+1579.8 1.6
+1582.1 2.7
+1600.0 1.3
+1608.1 2.6
+1609.1 4.5
+1609.8 1.4
+1619.5 1.1
+1620.3 1.8
+1622.1 3.9
+1628.7 0.7
+1630.1 3.7
+1637.9 0.7
+1640.9 1.4
+1643.8 1.2
+1649.4 2.5
+1651.8 2.3
+1653.8 7.5
+1656.8 1.0
+1657.9 2.2
+1661.8 0.3
+1663.7 3.2
+1665.0 2.3
+1665.7 1.3
+1666.9 10.6
+1668.5 1.9
+1669.5 0.5
+1683.0 8.3
+1684.7 5.1
+1700.5 2.2
+1701.8 2.0
+1703.1 3.1
+1706.5 2.5
+1712.6 1.7
+1718.4 4.8
+1719.0 2.2
+1720.4 1.9
+1731.8 4.4
+1733.7 3.8
+1741.3 1.3
+1745.2 3.3
+1753.0 4.0
+1758.1 2.6
+1759.1 2.1
+1760.3 6.8
+1764.9 2.8
+1766.7 1.9
+1767.7 1.0
+1769.6 1.7
+1773.3 3.4
+1774.2 3.9
+1775.5 1.3
+1781.9 3.5
+1783.8 7.0
+1791.8 2.4
+1796.7 1.2
+1800.3 1.2
+1802.0 2.4
+1810.0 0.7
+1814.3 1.1
+1816.2 5.2
+1826.9 0.7
+1830.8 1.3
+1843.8 2.1
+1863.9 0.3
+1865.1 3.3
+1865.9 0.4
+1866.8 5.7
+1872.2 4.2
+1875.6 1.6
+1876.9 2.9
+1881.9 7.7
+1883.0 0.5
+1883.8 5.8
+1887.4 2.1
+1889.0 0.5
+1891.4 3.6
+1900.9 1.8
+1902.2 3.4
+1903.3 5.9
+1904.0 0.2
+1904.8 1.7
+1908.9 3.9
+1913.2 12.4
+1913.9 0.2
+1935.0 7.7
+1935.9 23.1
+1937.8 2.0
+1940.7 6.6
+1948.2 2.1
+1949.2 6.2
+1952.6 7.2
+1953.3 15.3
+1954.2 8.8
+1954.9 3.0
+1955.8 7.2
+1957.0 2.4
+1973.9 5.7
+1974.8 2.1
+1995.6 1.6
+S	112	112	403.30
+I	ID	74
+I	RTime	3.4163
+Z	2	805.59
+Z	3	1207.88
+123.3 1.2
+129.1 94.5
+130.1 2.7
+137.2 0.8
+139.4 2.2
+141.1 3.7
+142.2 2.9
+143.2 4.0
+144.0 13.8
+147.1 5.5
+156.2 1.7
+157.0 4.5
+161.1 12.0
+169.2 4.1
+171.1 2.0
+175.1 4.0
+178.0 0.8
+185.2 3.2
+186.2 6.0
+191.1 7.4
+192.0 0.8
+200.1 5.5
+201.3 1.5
+202.2 2.7
+204.1 5.6
+212.0 4.8
+213.2 1.8
+215.2 2.7
+217.1 1.1
+218.2 37.0
+219.1 3.5
+222.2 13.6
+222.9 1.7
+225.2 10.0
+226.1 9.6
+227.3 4.5
+231.3 2.7
+236.8 1.6
+239.2 20.0
+240.2 44.7
+241.2 0.8
+243.1 7.9
+245.3 0.8
+251.1 1.5
+253.2 3.2
+253.8 2.2
+257.2 190.6
+258.2 14.5
+259.2 2.7
+265.1 2.4
+268.1 2.5
+269.1 1.7
+271.0 1.1
+272.1 1.8
+274.2 11.3
+275.2 134.0
+276.2 4.0
+277.2 1.8
+278.3 5.6
+279.5 5.1
+289.4 5.5
+290.2 3.0
+293.3 3.9
+296.7 6.8
+297.9 2.7
+300.5 1.6
+301.2 3.9
+302.1 7.3
+304.0 7.4
+308.1 4.9
+309.4 7.0
+312.2 6.0
+313.1 2.0
+314.8 30.3
+315.6 8.6
+316.5 2.5
+318.6 2.4
+319.4 1.8
+320.0 1.6
+320.9 5.3
+323.5 0.6
+324.4 2.7
+327.1 3.7
+328.9 4.0
+330.8 4.4
+332.8 7.8
+333.5 17.2
+334.1 2.2
+335.3 14.5
+336.7 23.7
+338.5 26.1
+341.0 5.1
+343.6 6.5
+346.1 1.3
+347.6 20.2
+349.1 21.2
+350.6 11.8
+351.4 36.7
+353.7 4.4
+354.3 4.5
+355.2 2.5
+357.2 2.9
+359.1 5.5
+360.0 1.1
+361.5 4.4
+363.2 4.9
+365.4 5.8
+367.2 13.6
+368.3 23.1
+369.3 2.2
+370.2 7.0
+371.2 3.0
+372.2 2.0
+374.2 6.5
+375.4 1.8
+376.3 8.8
+377.3 6.3
+380.6 8.8
+382.1 7.0
+383.4 5.5
+385.3 498.8
+386.4 62.9
+387.3 19.0
+388.0 4.8
+389.2 16.7
+389.8 3.0
+391.4 38.5
+393.8 226.8
+395.0 22.5
+396.7 34.0
+397.3 18.3
+402.8 1.3
+404.2 1.2
+405.1 4.5
+406.1 2.7
+414.3 2.0
+417.7 12.3
+425.5 4.3
+429.4 1.5
+431.1 2.5
+439.1 1.6
+440.4 7.9
+442.4 4.3
+444.5 1.1
+448.2 20.7
+450.9 4.0
+452.1 2.9
+452.8 1.2
+456.0 3.9
+458.1 1.7
+460.8 7.5
+469.0 13.6
+470.0 30.1
+472.4 1.7
+474.8 24.3
+476.0 1.2
+476.9 2.4
+479.2 11.6
+482.2 7.6
+483.1 8.1
+485.5 2.7
+490.9 3.2
+491.6 16.2
+492.9 2.7
+497.1 19.7
+497.9 3.5
+499.6 1.7
+502.3 1.7
+503.4 2.7
+506.8 7.1
+510.7 17.3
+511.4 3.7
+512.0 9.8
+513.3 7.4
+515.5 14.3
+517.2 7.8
+518.0 2.4
+530.4 12.0
+533.3 1.0
+535.3 7.5
+541.2 31.6
+548.6 2.7
+553.0 5.1
+560.4 2.4
+561.4 4.0
+565.4 2.4
+566.4 3.0
+568.6 11.8
+580.2 6.5
+581.2 1.6
+589.3 2.2
+602.4 4.4
+604.1 2.0
+607.3 1.8
+613.5 0.8
+618.4 1.1
+621.3 4.0
+628.3 4.8
+629.2 1.3
+631.6 2.0
+640.3 2.7
+644.5 7.5
+646.4 3.5
+648.6 1.7
+652.3 2.2
+657.6 1.6
+658.4 9.1
+659.3 2.2
+664.1 1.6
+669.2 3.5
+676.4 8.1
+S	113	113	751.42
+Z	2	1501.83
+215.2 0.6
+218.3 0.8
+219.2 1.0
+225.3 4.0
+229.2 1.6
+236.0 1.0
+242.1 1.7
+243.1 2.9
+249.3 1.5
+256.9 1.2
+259.0 1.2
+261.3 13.8
+263.2 2.4
+268.2 0.8
+272.4 1.2
+273.2 0.8
+274.5 1.5
+276.2 3.2
+278.8 1.1
+283.0 1.3
+286.0 2.2
+294.2 1.5
+299.2 1.3
+300.1 2.5
+301.4 5.5
+304.1 6.0
+305.2 2.0
+309.1 1.6
+311.3 5.0
+313.1 5.4
+314.0 4.3
+315.1 1.2
+319.2 4.0
+323.1 0.8
+327.2 4.1
+331.1 2.4
+334.3 2.9
+335.0 1.7
+337.2 2.4
+338.4 1.7
+339.2 3.9
+340.1 3.4
+341.3 12.1
+343.3 2.0
+346.2 4.0
+348.6 0.8
+349.3 2.2
+359.2 4.0
+362.1 0.6
+363.4 2.0
+367.1 8.1
+371.1 4.0
+376.4 2.5
+377.2 7.6
+380.2 2.5
+384.2 2.5
+385.4 8.6
+388.4 1.6
+393.3 11.6
+398.5 2.7
+399.5 1.5
+400.1 1.2
+401.2 2.5
+402.7 0.8
+403.4 12.8
+404.9 9.8
+408.2 1.2
+409.0 2.7
+412.7 4.4
+413.3 3.2
+414.1 1.1
+415.1 2.0
+420.3 32.0
+421.3 34.2
+422.5 10.8
+425.1 1.8
+426.2 1.7
+427.8 1.7
+428.9 3.0
+430.4 1.7
+432.1 3.5
+433.2 1.7
+438.4 11.0
+439.2 226.8
+440.3 19.2
+441.4 2.4
+443.0 5.9
+444.1 1.1
+447.3 7.0
+453.2 4.5
+457.2 2.0
+459.0 21.8
+459.6 0.8
+461.4 2.9
+462.3 3.2
+463.4 1.1
+465.4 2.4
+467.4 3.4
+471.2 8.0
+473.0 6.5
+474.2 3.0
+475.4 5.3
+476.4 2.7
+477.2 10.3
+481.0 0.8
+483.2 1.7
+484.5 4.5
+486.1 4.8
+487.2 7.0
+490.2 5.9
+491.2 3.2
+492.0 1.6
+493.2 13.6
+495.2 1.2
+497.3 2.0
+501.4 1.5
+502.4 4.6
+503.4 3.5
+504.2 9.1
+505.4 1.0
+506.4 4.5
+511.4 6.4
+512.5 4.6
+514.7 11.1
+516.2 3.2
+517.4 1.3
+519.3 20.3
+520.5 9.1
+523.5 6.5
+529.1 4.0
+532.3 1.1
+533.4 2.4
+534.1 1.6
+536.2 9.8
+537.2 34.2
+538.6 12.0
+539.3 2.2
+540.2 4.5
+541.6 8.1
+545.3 9.8
+547.4 4.0
+548.2 5.6
+553.4 3.2
+555.2 147.1
+556.2 22.7
+557.2 4.8
+558.4 6.4
+559.2 7.0
+560.0 1.0
+561.1 3.2
+563.8 4.8
+564.4 4.0
+565.9 3.0
+566.9 1.7
+567.5 2.4
+568.3 3.2
+569.2 1.5
+572.3 3.7
+573.4 28.5
+574.5 4.0
+575.6 2.5
+576.3 3.2
+578.9 5.5
+585.4 4.0
+589.7 5.1
+590.6 12.5
+591.3 74.5
+592.3 25.2
+593.3 10.1
+595.5 5.1
+599.2 3.0
+601.3 4.6
+602.6 1.3
+603.3 12.8
+604.4 0.8
+606.8 2.0
+608.0 3.0
+611.6 3.7
+614.5 8.5
+616.5 0.8
+617.6 5.5
+619.3 13.3
+620.5 5.0
+621.4 4.5
+622.6 6.8
+623.8 5.0
+627.6 2.5
+628.3 4.1
+629.2 17.2
+631.2 2.2
+632.4 3.4
+633.2 3.5
+634.5 19.2
+635.4 14.0
+636.5 12.8
+637.3 18.2
+638.4 4.3
+639.4 4.0
+642.1 10.6
+644.5 2.2
+646.1 1.2
+647.6 7.0
+648.8 9.1
+650.2 4.6
+652.1 6.0
+653.2 14.0
+654.6 11.6
+655.2 4.5
+656.7 17.3
+658.5 8.6
+659.3 9.8
+662.9 11.8
+663.6 6.4
+664.2 1.2
+665.5 8.3
+666.1 3.4
+667.5 2.5
+669.2 9.8
+669.9 4.4
+671.3 32.0
+672.3 9.8
+673.1 3.2
+674.1 11.8
+675.3 10.6
+677.4 11.0
+678.4 2.5
+679.4 11.3
+680.2 5.6
+681.1 2.5
+685.3 2.0
+686.5 2.7
+687.4 6.6
+688.2 12.8
+689.3 70.3
+690.4 25.5
+691.3 17.7
+692.2 4.5
+693.8 0.8
+694.4 1.1
+695.0 4.9
+696.2 12.3
+697.0 35.9
+698.1 27.0
+698.8 32.2
+699.5 10.8
+700.1 0.6
+701.4 16.6
+702.5 7.3
+704.1 1.1
+705.0 22.1
+706.2 25.8
+707.5 15.6
+708.3 2.5
+709.7 5.4
+710.5 2.0
+711.5 7.1
+713.8 25.1
+714.7 48.4
+715.4 51.2
+716.3 48.0
+717.2 4.9
+717.9 10.6
+719.2 11.1
+720.0 17.7
+720.8 19.2
+722.9 27.8
+723.9 13.6
+724.6 24.2
+725.4 7.1
+727.0 16.5
+727.9 31.3
+728.8 55.7
+729.6 13.5
+730.7 2.2
+731.9 323.0
+732.6 139.5
+733.3 447.8
+734.2 206.8
+735.1 9.8
+735.7 8.5
+737.0 16.1
+737.9 32.5
+738.7 4.3
+739.4 1.7
+740.9 269.3
+741.9 135.8
+743.0 37.7
+745.0 1.7
+750.8 9.8
+752.1 4.0
+754.0 3.2
+760.8 2.2
+766.8 4.5
+769.7 1.0
+770.9 2.2
+772.2 3.5
+776.5 2.5
+782.4 8.1
+784.1 2.9
+786.4 3.5
+787.2 4.0
+788.4 4.8
+796.6 1.2
+801.2 2.7
+802.0 3.4
+803.1 5.8
+804.2 0.8
+808.5 3.2
+809.4 3.2
+814.5 7.9
+818.2 5.3
+819.8 5.5
+820.4 3.7
+827.4 5.5
+844.3 4.0
+845.6 0.6
+846.5 0.8
+848.6 5.9
+851.2 7.0
+853.3 5.1
+856.6 1.6
+858.8 2.0
+863.7 0.8
+867.5 3.0
+870.4 2.0
+872.3 7.0
+873.4 4.5
+875.2 5.4
+881.1 5.5
+882.2 1.1
+883.1 0.6
+888.2 3.4
+890.7 5.6
+898.5 3.5
+899.4 4.9
+900.3 1.8
+901.6 6.0
+905.5 1.3
+906.4 1.8
+912.2 1.0
+914.6 1.5
+915.9 2.7
+916.5 10.6
+925.2 4.4
+926.8 3.0
+927.5 5.3
+928.1 1.1
+932.5 1.2
+949.7 4.3
+952.3 0.8
+953.5 1.6
+956.6 3.9
+958.8 8.1
+960.5 1.2
+966.6 4.4
+967.4 6.8
+970.5 12.8
+971.3 3.2
+977.1 1.2
+985.4 2.2
+987.3 9.8
+988.4 19.0
+989.3 11.6
+990.9 3.2
+995.8 2.7
+997.0 1.7
+998.8 6.4
+1001.8 2.2
+1005.6 6.8
+1007.0 1.7
+1008.3 2.5
+1012.1 4.5
+1018.6 7.1
+1026.3 23.7
+1036.3 1.8
+1046.2 4.3
+1052.2 4.0
+1054.3 0.6
+1059.0 1.8
+1068.4 1.6
+1069.4 2.2
+1070.4 3.4
+1071.4 6.8
+1072.5 2.2
+1073.5 1.2
+1083.3 19.0
+1086.1 0.6
+1092.8 0.8
+1094.3 2.7
+1102.5 3.5
+1105.3 4.4
+1110.5 0.6
+1113.4 7.3
+1123.5 1.7
+1124.5 2.2
+1125.4 1.2
+1130.7 1.3
+1136.0 6.6
+1140.3 5.6
+1143.7 1.7
+1145.5 1.5
+1147.7 5.6
+1153.5 1.3
+1154.1 2.0
+1157.5 4.3
+1167.7 1.0
+1172.0 1.7
+1173.6 2.4
+1174.6 8.1
+1181.6 1.2
+1200.4 1.5
+1205.3 2.2
+1224.3 13.1
+1225.3 7.3
+1233.7 3.0
+1237.3 3.7
+1242.2 3.9
+1249.1 1.8
+1251.2 1.8
+1264.1 1.5
+1269.2 4.1
+1271.6 0.6
+1277.0 4.3
+1282.9 3.5
+1286.5 1.7
+1288.4 1.2
+1292.9 2.9
+1296.5 1.5
+1308.6 1.7
+1310.1 4.3
+1318.3 1.2
+1324.6 1.5
+1334.3 1.1
+1336.3 3.2
+1350.3 2.0
+1351.4 5.1
+1352.8 1.5
+1354.3 4.0
+1355.3 3.5
+1370.1 2.2
+1434.2 3.2
+1445.5 0.6
+S	114	114	670.55
+Z	3	2009.63
+196.1 50.6
+197.1 6.8
+199.2 89.5
+200.1 63.1
+209.9 4.6
+213.2 38.7
+213.9 33.4
+216.0 21.7
+225.0 16.0
+226.2 35.8
+227.0 16.0
+228.0 7.7
+229.2 6.6
+232.0 4.7
+238.0 52.0
+241.2 49.6
+244.1 238.8
+245.2 13.6
+246.3 13.0
+255.2 95.6
+256.3 23.4
+257.3 10.6
+258.3 74.9
+259.2 3.4
+266.2 10.9
+269.8 31.5
+272.7 66.7
+273.3 34.7
+274.1 104.3
+275.2 8.0
+276.2 19.6
+277.1 7.6
+279.4 27.9
+280.2 20.8
+283.0 73.2
+284.3 85.6
+286.1 209.7
+287.3 51.2
+291.5 15.8
+294.5 83.3
+295.2 18.3
+296.2 21.6
+297.3 43.8
+298.7 6.6
+301.1 280.6
+302.2 58.4
+303.2 19.7
+305.9 4.1
+308.1 20.5
+310.3 11.9
+311.3 24.8
+312.2 201.6
+313.3 9.1
+315.1 87.1
+316.4 9.7
+320.4 19.4
+323.4 5.3
+324.1 17.0
+327.1 15.0
+329.5 40.1
+331.2 28.1
+332.2 7.6
+332.9 4.3
+337.3 5.3
+338.2 20.1
+340.1 5.8
+341.1 20.8
+343.3 14.1
+345.0 33.7
+346.2 20.6
+351.0 30.5
+352.0 23.4
+354.2 6.8
+357.1 5.2
+360.2 15.6
+362.2 5.4
+363.2 7.2
+364.3 20.4
+364.9 30.4
+367.1 10.1
+368.3 160.4
+369.2 197.3
+370.3 64.7
+371.3 15.8
+372.1 8.2
+374.4 10.4
+376.2 20.9
+378.0 30.2
+379.2 16.8
+381.6 47.4
+386.2 994.6
+387.2 309.1
+388.0 69.8
+389.1 18.0
+396.2 246.9
+397.1 96.2
+401.2 14.3
+402.4 120.7
+403.4 16.3
+404.4 12.5
+411.2 29.1
+412.9 22.4
+414.1 1274.4
+415.2 252.1
+416.4 74.3
+417.3 10.1
+419.5 40.6
+422.9 6.6
+424.4 35.7
+426.7 18.8
+427.6 13.6
+430.5 5.3
+432.4 37.0
+433.9 21.2
+435.4 6.6
+437.2 7.7
+438.4 24.2
+439.2 14.4
+441.1 20.8
+442.3 24.1
+443.4 22.6
+444.8 308.0
+445.5 109.1
+446.2 39.1
+450.1 21.6
+455.4 17.9
+456.2 5.1
+457.0 20.2
+457.7 2.7
+459.3 10.5
+460.0 9.7
+463.5 28.8
+465.2 120.8
+466.0 20.5
+467.3 18.4
+468.4 12.5
+470.2 5.4
+472.3 52.3
+474.2 47.0
+476.5 59.9
+478.3 44.8
+480.7 4.1
+482.4 79.2
+486.6 23.8
+487.4 15.7
+489.2 1470.0
+490.2 39.2
+490.8 7.7
+493.5 15.4
+494.3 20.9
+495.7 7.6
+496.3 64.7
+497.3 5.3
+498.4 15.0
+500.0 26.9
+501.4 189.3
+502.4 31.5
+503.1 14.5
+509.9 45.7
+511.9 8.3
+513.0 12.5
+515.5 27.1
+517.3 15.4
+518.2 29.0
+520.3 160.6
+521.1 99.3
+522.4 20.4
+523.0 19.0
+525.7 90.0
+526.3 23.2
+527.6 15.6
+529.4 53.4
+530.1 18.9
+531.8 233.5
+532.5 180.6
+533.1 7.6
+534.8 244.8
+536.3 47.2
+537.4 52.4
+538.4 4.2
+540.2 112.9
+541.5 31.8
+543.8 28.2
+545.0 45.9
+546.3 90.4
+549.4 57.3
+550.9 137.2
+552.4 13.3
+553.3 62.1
+554.0 7.1
+556.2 156.5
+557.2 76.2
+558.1 63.1
+558.8 29.6
+560.3 135.1
+561.7 56.0
+562.6 79.4
+564.6 26.2
+568.4 9.5
+569.7 189.1
+570.5 228.3
+571.3 63.7
+572.5 74.3
+574.3 155.9
+575.3 80.9
+576.6 55.1
+579.3 280.2
+580.0 82.0
+581.3 5.1
+582.0 60.9
+582.7 149.6
+587.0 23.6
+588.4 1163.0
+589.4 314.9
+590.4 116.6
+591.4 163.0
+592.3 8.1
+593.6 26.7
+596.1 25.7
+597.1 14.7
+598.4 51.5
+599.5 962.6
+600.4 8.8
+602.4 10.2
+603.5 16.1
+604.1 53.3
+607.8 23.9
+609.6 44.9
+610.5 57.4
+611.4 8.0
+612.6 55.4
+615.3 107.6
+616.3 44.9
+618.5 28.8
+619.2 34.9
+619.9 6.9
+621.6 2826.2
+622.6 435.1
+623.7 218.3
+624.8 75.1
+625.5 13.7
+626.8 48.6
+627.5 224.7
+628.7 70.6
+629.8 141.4
+631.0 996.1
+632.5 127.3
+633.2 284.8
+634.2 222.8
+635.7 12.5
+637.0 274.3
+637.8 348.9
+638.8 390.3
+640.8 196.2
+642.2 131.4
+643.6 144.4
+644.6 80.8
+645.3 173.7
+646.3 138.6
+647.3 63.5
+648.3 35.9
+649.3 50.8
+650.3 5.4
+651.7 103.0
+652.4 212.6
+653.4 65.9
+654.5 48.7
+655.9 669.3
+656.6 53.2
+657.7 646.0
+658.8 142.3
+659.8 67.3
+660.4 101.4
+662.2 811.4
+663.3 684.2
+664.0 117.6
+670.1 5.6
+672.4 25.8
+673.2 10.0
+677.5 200.6
+678.6 54.0
+679.3 8.1
+681.4 615.3
+682.0 555.5
+682.8 216.2
+683.6 82.8
+686.2 61.7
+686.8 209.5
+688.5 111.0
+689.4 382.4
+690.3 25.5
+692.8 736.5
+694.0 122.7
+695.1 5.0
+696.4 34.6
+698.8 569.1
+700.9 32.4
+701.9 36.2
+704.5 33.7
+705.2 27.3
+706.7 46.4
+708.0 96.6
+708.7 6.7
+709.5 47.7
+710.4 58.0
+711.5 58.8
+712.4 260.9
+713.0 68.9
+716.9 1063.2
+717.5 1066.3
+718.5 237.9
+719.3 174.2
+720.5 25.8
+722.2 110.6
+723.6 44.2
+725.5 132.4
+726.3 92.5
+727.6 11.0
+728.3 129.8
+729.6 346.8
+730.7 84.4
+731.7 1069.7
+732.6 340.5
+733.8 554.0
+734.6 249.6
+735.7 79.4
+736.6 202.9
+737.3 13.7
+739.3 7.6
+740.3 59.5
+741.4 26.9
+742.4 55.1
+743.1 82.2
+744.9 82.4
+745.7 57.7
+746.5 70.9
+747.6 41.5
+748.4 19.8
+749.2 47.2
+750.1 15.7
+751.2 23.9
+752.3 36.2
+753.8 94.3
+754.8 159.0
+756.5 46.0
+757.9 99.8
+759.9 114.9
+760.9 143.8
+763.0 964.3
+763.8 48.0
+764.7 17.5
+765.7 79.4
+766.6 54.6
+767.4 42.7
+769.5 10.7
+770.5 23.8
+772.0 29.7
+773.4 38.6
+774.5 30.7
+776.0 14.5
+777.5 40.7
+778.4 49.9
+779.5 119.0
+781.3 15.9
+782.3 13.2
+783.5 26.4
+786.7 11.4
+787.6 247.9
+788.6 483.0
+789.8 285.7
+790.9 112.6
+791.5 37.5
+793.6 695.2
+795.5 13.3
+797.2 13794.0
+798.0 3137.7
+798.6 2410.0
+799.5 4368.2
+800.8 47.2
+801.6 82.7
+802.5 45.8
+803.6 194.1
+804.7 97.6
+805.9 55.2
+806.8 56.7
+807.7 6.1
+809.4 13.7
+810.4 12.6
+812.1 17.8
+813.3 48.7
+814.1 35.2
+815.4 94.3
+816.4 6.2
+817.0 69.3
+817.9 25.4
+819.2 4.1
+822.4 162.5
+823.3 29.1
+824.3 10.6
+826.7 13.2
+827.5 24.8
+828.1 20.7
+830.7 20.6
+832.0 54.8
+833.5 35.2
+834.4 9.7
+836.4 108.2
+837.1 152.9
+839.4 240.5
+840.3 27.6
+841.2 22.7
+842.6 53.2
+843.7 49.7
+844.9 85.3
+845.6 98.9
+846.6 6.1
+848.4 20.0
+849.5 110.5
+850.4 93.0
+851.9 14.0
+853.7 2181.3
+854.5 334.1
+855.2 905.6
+856.7 112.3
+857.6 16.2
+861.7 141.3
+863.3 31.5
+864.0 58.1
+864.9 22.6
+865.8 39.8
+867.5 82.6
+869.2 158.5
+869.8 61.9
+870.6 18.4
+872.2 94.6
+872.9 245.6
+874.2 14.0
+875.4 9.2
+877.9 12.7
+879.1 112.7
+880.5 5.3
+881.9 5296.3
+882.6 8137.0
+883.6 2331.1
+884.6 102.6
+886.0 28.1
+887.1 61.7
+888.5 89.7
+889.8 4.4
+890.6 44.8
+893.4 24.7
+895.8 116.6
+897.3 58.1
+898.8 20.3
+899.5 13.7
+901.2 47.3
+902.9 90.5
+903.7 17.8
+905.2 94.8
+906.2 53.6
+907.3 46.9
+913.3 5.7
+915.9 42.3
+916.7 9.0
+921.3 58.6
+922.2 117.2
+923.3 7.5
+924.3 22.0
+928.1 48.2
+929.3 64.5
+930.6 90.7
+931.7 157.8
+932.5 101.4
+933.6 15.7
+935.0 83.4
+937.3 24.4
+938.1 20.6
+938.9 22.0
+943.6 52.7
+945.6 208.1
+946.5 23.1
+954.6 849.7
+956.6 10.1
+960.0 92.1
+961.5 19.0
+962.3 46.1
+963.7 10.5
+964.5 21.7
+967.6 68.7
+973.4 57.5
+974.1 23.3
+980.0 101.9
+984.4 13.3
+985.6 15.4
+987.5 19.6
+988.9 44.7
+989.6 37.0
+990.6 27.2
+991.5 46.0
+992.3 33.8
+994.6 10.6
+1001.7 54.8
+1003.5 38.5
+1004.3 5.1
+1005.4 5.7
+1006.1 7.0
+1008.7 8.6
+1011.4 23.5
+1012.7 11.6
+1015.1 25.2
+1019.0 21.6
+1020.3 30.5
+1021.8 5.7
+1023.4 67.3
+1024.2 70.0
+1030.3 25.4
+1032.4 218.6
+1033.3 37.6
+1038.5 399.9
+1039.5 54.8
+1044.5 9.1
+1047.7 1439.7
+1048.5 14.3
+1051.7 25.4
+1052.4 30.3
+1056.7 33.4
+1057.8 7.1
+1058.5 11.8
+1061.5 12.1
+1068.7 13.5
+1069.8 9.1
+1073.3 30.8
+1074.3 35.7
+1077.7 25.6
+1079.2 35.9
+1084.5 13.4
+1085.6 19.7
+1086.5 9.9
+1087.9 86.1
+1088.8 38.3
+1090.5 5.1
+1091.5 70.7
+1096.9 117.6
+1097.5 65.2
+1100.4 40.4
+1101.5 5.6
+1107.8 28.1
+1109.5 7.5
+1110.6 8.7
+1112.4 34.0
+1113.6 16.4
+1115.4 13.5
+1118.1 131.7
+1119.3 13.1
+1122.5 17.7
+1127.8 16.4
+1128.7 34.4
+1139.5 7.3
+1140.3 16.4
+1143.5 16.3
+1157.6 4.1
+1158.5 8.5
+1159.2 8.0
+1163.4 15.4
+1186.6 35.3
+1188.8 7.1
+1189.8 10.4
+1193.7 33.1
+1197.6 33.8
+1200.1 10.5
+1205.0 12.2
+1207.7 6.8
+1224.7 19.3
+1226.2 44.5
+1234.5 4.6
+1236.4 25.8
+1243.0 15.2
+1243.7 7.0
+1244.5 38.4
+1245.5 30.8
+1246.3 22.3
+1247.5 35.1
+1253.9 4.7
+1257.9 6.8
+1258.5 28.2
+1261.0 17.4
+1271.5 33.2
+1272.6 8.1
+1278.6 7.1
+1280.8 15.5
+1283.7 4.1
+1288.8 20.1
+1298.4 10.7
+1299.6 20.8
+1300.6 22.5
+1311.5 4.1
+1324.7 11.9
+1351.0 24.4
+S	115	115	452.85
+I	ID	189
+I	RTime	9.3517
+Z	2	904.69
+130.0 3.0
+144.2 5.0
+151.5 3.2
+153.3 1.2
+161.2 6.0
+162.9 4.0
+175.1 2.0
+175.7 1.2
+183.0 3.5
+184.0 15.3
+186.0 1.2
+202.1 1.2
+204.0 2.7
+227.1 1.5
+228.3 2.2
+234.3 9.3
+235.2 1.6
+236.1 2.7
+237.3 6.0
+238.1 4.5
+239.3 2.9
+248.2 1.5
+252.4 1.7
+256.8 3.0
+260.2 1.0
+261.2 1.8
+264.2 1.3
+268.7 1.2
+270.0 1.7
+274.7 2.9
+275.4 5.0
+276.2 2.2
+278.3 1.1
+279.3 1.7
+281.0 1.7
+284.2 1.3
+288.9 1.7
+291.1 16.5
+292.3 5.1
+293.1 1.5
+296.3 1.2
+300.4 1.8
+303.3 3.7
+305.4 2.7
+307.2 8.8
+307.8 3.2
+321.4 4.3
+324.0 13.0
+325.0 21.3
+330.3 1.1
+331.8 3.2
+338.3 49.7
+345.4 7.1
+358.1 2.2
+359.3 1.5
+361.3 3.9
+370.2 2.4
+379.1 4.0
+380.4 3.2
+388.3 2.0
+395.2 13.6
+400.4 6.5
+403.9 35.2
+409.7 10.5
+412.1 2.2
+416.2 3.2
+417.4 15.3
+420.8 8.1
+422.2 4.5
+427.6 5.3
+434.1 4.5
+435.3 55.2
+443.4 17.8
+444.0 19.3
+444.7 16.6
+534.1 8.3
+539.5 5.1
+542.3 4.5
+559.2 1.7
+564.9 1.7
+575.7 1.8
+579.3 2.5
+586.9 3.5
+605.3 2.4
+627.3 1.3
+638.4 5.0
+644.5 1.1
+646.4 3.0
+648.3 2.4
+660.3 3.5
+662.3 3.9
+668.3 1.7
+670.5 7.4
+678.2 36.7
+679.3 3.5
+703.7 6.3
+728.5 4.5
+758.3 1.7
+775.8 3.7
+777.3 5.0
+S	116	116	613.31
+Z	2	1225.61
+175.0 4.6
+177.2 19.6
+180.0 14.0
+183.1 7.5
+184.3 9.9
+186.0 3.4
+199.8 19.1
+202.2 34.2
+204.1 16.9
+207.2 12.9
+210.2 15.0
+212.2 10.8
+214.2 43.2
+216.1 46.6
+217.2 13.1
+222.1 16.7
+224.1 5.5
+228.1 7.2
+228.8 18.2
+230.2 25.5
+231.2 18.0
+233.1 16.2
+238.2 9.8
+243.2 3.7
+244.3 15.3
+246.2 15.2
+248.1 162.0
+248.9 9.3
+250.1 34.1
+251.1 16.0
+252.1 3.3
+254.4 13.8
+257.2 6.4
+260.2 38.3
+261.3 9.4
+262.4 19.8
+267.3 68.3
+269.6 4.5
+272.7 2.6
+274.3 32.5
+276.3 38.8
+277.0 7.6
+278.3 38.0
+280.3 29.4
+281.3 7.2
+282.2 10.3
+284.1 83.4
+285.1 9.8
+287.1 36.0
+289.2 13.3
+291.2 19.1
+292.3 5.5
+294.3 21.6
+296.3 14.4
+297.2 10.6
+300.1 5.2
+301.6 111.3
+302.3 85.0
+303.3 44.9
+304.1 19.7
+308.2 5.4
+309.4 8.4
+313.1 4.6
+315.4 21.1
+317.2 15.2
+319.3 884.2
+320.2 137.1
+323.1 20.4
+327.2 17.3
+333.2 7.2
+334.2 19.0
+334.9 4.4
+336.3 39.5
+337.3 4.4
+338.3 4.1
+339.2 19.6
+341.3 9.5
+344.1 20.9
+352.4 17.2
+353.0 20.3
+355.2 24.1
+356.2 14.1
+357.5 96.6
+358.4 59.1
+359.1 15.4
+360.5 28.9
+361.2 18.1
+362.3 4.7
+363.4 4.5
+364.4 16.0
+368.1 11.9
+370.9 7.8
+372.2 39.9
+373.4 2.2
+374.4 31.6
+375.5 31.6
+376.4 277.3
+377.4 35.6
+378.5 17.7
+379.4 22.5
+381.1 43.6
+385.2 28.4
+386.2 4.0
+387.4 21.4
+388.2 14.0
+391.8 11.8
+392.5 44.3
+395.4 6.3
+397.5 19.8
+400.1 15.0
+403.2 2.4
+404.3 21.2
+405.0 7.7
+407.4 72.1
+410.1 16.0
+411.6 7.1
+412.6 25.3
+413.3 13.6
+414.3 135.5
+417.5 20.0
+419.5 15.8
+420.3 37.2
+421.4 12.2
+423.3 106.1
+424.2 5.4
+427.1 16.8
+428.4 17.0
+429.0 3.2
+429.9 63.5
+431.3 91.5
+432.2 50.3
+434.5 21.9
+438.4 25.1
+439.5 43.8
+442.2 13.8
+443.2 9.6
+444.5 5.0
+445.5 267.9
+447.3 127.1
+448.1 16.4
+451.3 8.0
+455.2 9.5
+458.3 30.4
+459.3 47.5
+460.5 74.6
+461.4 24.8
+462.8 82.6
+463.4 330.1
+464.4 68.7
+466.1 137.8
+466.9 46.6
+469.8 32.5
+472.1 37.0
+473.1 33.5
+474.1 10.2
+476.0 31.4
+479.1 12.7
+480.4 48.3
+481.0 161.5
+481.8 5.1
+482.7 65.9
+483.5 39.8
+484.5 5.9
+486.5 18.4
+488.1 22.9
+488.9 12.8
+490.0 203.2
+490.6 35.8
+491.7 17.4
+493.8 40.9
+495.3 12.3
+496.4 51.8
+497.4 15.3
+499.5 142.3
+500.4 11.6
+502.2 189.5
+503.4 72.2
+504.5 20.3
+505.7 24.9
+507.2 171.4
+507.9 281.5
+508.5 242.5
+510.1 54.3
+511.3 132.3
+512.0 109.4
+512.8 85.6
+513.5 38.6
+514.5 91.6
+515.5 122.5
+516.2 670.0
+517.1 729.2
+519.1 62.3
+520.1 56.7
+521.4 14.6
+522.1 15.1
+522.8 38.8
+524.1 73.5
+525.5 1861.9
+526.6 48.5
+527.8 281.3
+528.5 78.8
+529.5 182.3
+530.6 211.2
+531.6 86.6
+532.5 99.6
+533.3 89.8
+534.4 317.9
+535.5 119.9
+537.2 196.9
+538.2 428.2
+539.0 63.9
+539.7 17.0
+541.5 68.9
+542.6 373.9
+543.5 19.2
+544.4 7.5
+545.5 95.9
+546.6 976.9
+547.5 532.7
+548.5 336.9
+549.3 24.8
+551.2 1739.4
+551.9 519.6
+552.6 117.9
+553.4 8.7
+554.2 30.1
+555.1 285.9
+556.2 134.3
+557.0 15.8
+558.4 2.2
+560.1 3961.9
+560.9 556.5
+561.9 76.2
+563.7 43.8
+564.7 109.4
+565.6 12.1
+566.6 63.6
+568.8 3399.3
+569.4 1129.3
+570.5 61.8
+571.5 37.5
+573.0 71.8
+574.0 20.5
+574.9 81.4
+575.8 6.6
+577.7 148.3
+578.4 188.1
+579.4 37.1
+581.0 118.3
+582.0 87.7
+583.0 67.6
+585.6 30.6
+586.4 255.8
+587.1 797.7
+587.8 18.6
+588.4 123.5
+589.3 149.0
+590.8 272.3
+591.5 44.1
+592.5 28.6
+594.3 147.3
+595.0 82.1
+595.8 2117.8
+596.7 933.2
+597.4 108.0
+598.1 7.4
+598.7 132.0
+600.5 35.9
+603.1 586.2
+604.4 4052.4
+605.1 2384.7
+606.1 117.4
+606.8 11.2
+608.4 9.5
+611.3 12.9
+612.5 8.1
+614.6 10.2
+615.8 18.8
+619.3 10.0
+620.4 24.0
+621.4 50.8
+622.3 26.6
+623.9 17.3
+625.8 23.4
+630.1 23.1
+631.4 5.2
+636.7 20.2
+640.2 47.6
+642.8 50.0
+643.4 39.2
+644.4 4.5
+646.4 17.0
+647.3 11.9
+650.3 10.8
+656.5 30.2
+658.0 108.7
+658.7 20.1
+660.3 135.4
+661.4 80.6
+670.2 11.6
+674.4 181.8
+675.4 90.2
+676.3 21.5
+678.5 710.2
+679.4 264.9
+681.6 9.2
+687.4 2.9
+688.4 65.5
+689.5 21.8
+690.6 52.0
+691.5 5.9
+692.4 96.2
+693.5 43.7
+695.7 11.2
+696.5 15.0
+703.6 4.2
+704.3 5.9
+706.5 23.5
+707.2 10.1
+710.5 20.6
+711.2 4.4
+712.3 6.1
+714.4 14.6
+716.3 22.0
+716.9 11.4
+718.4 11.5
+724.9 37.9
+725.7 2.6
+727.7 72.8
+728.5 36.3
+729.4 67.0
+731.7 28.5
+732.6 61.3
+733.2 24.4
+736.4 12.0
+738.8 21.0
+742.9 22.9
+744.2 11.0
+745.3 91.2
+746.4 83.3
+747.4 7.8
+754.2 51.7
+761.6 72.1
+763.2 186.3
+764.3 76.6
+765.6 16.2
+766.6 10.2
+769.4 7.1
+770.8 8.4
+772.7 12.2
+773.7 7.9
+774.5 18.8
+779.5 955.9
+780.5 177.2
+781.6 9.9
+783.4 25.4
+789.7 16.5
+792.4 10.0
+794.9 18.3
+796.4 4.6
+798.4 19.7
+799.4 75.8
+801.5 20.7
+806.4 10.4
+807.3 36.7
+813.2 23.9
+814.3 51.4
+815.4 110.1
+816.4 134.9
+817.3 60.6
+819.6 17.7
+829.9 58.3
+832.4 252.5
+833.5 130.2
+834.3 49.2
+835.4 16.2
+836.4 55.8
+841.8 7.8
+842.5 12.6
+844.5 24.1
+846.6 33.6
+848.7 19.0
+850.4 305.1
+851.4 132.5
+852.5 21.8
+860.7 46.0
+861.6 43.7
+862.6 5.8
+864.4 14.1
+867.3 4.1
+872.2 129.7
+872.8 2.7
+873.7 45.9
+877.7 22.7
+878.8 8.5
+880.6 8.4
+886.2 60.9
+888.9 37.8
+889.6 340.1
+890.6 197.2
+891.5 146.0
+893.1 82.8
+900.0 12.3
+901.6 11.5
+902.5 9.7
+903.5 16.2
+904.4 37.0
+905.7 38.0
+907.5 880.2
+908.6 157.2
+909.6 28.6
+915.4 12.1
+917.6 11.0
+919.6 3.7
+920.5 10.7
+921.5 73.1
+922.6 26.3
+923.8 7.6
+928.8 7.3
+930.2 3.7
+930.9 12.5
+931.7 19.9
+932.6 35.0
+934.4 4.4
+935.1 16.5
+935.7 41.4
+936.5 46.5
+938.8 6.7
+939.8 20.6
+940.6 28.6
+943.6 25.9
+946.2 74.2
+947.1 103.2
+948.1 20.0
+949.5 43.3
+950.6 79.2
+952.7 13.1
+957.0 5.2
+958.9 12.0
+960.7 80.3
+961.5 56.2
+962.3 44.9
+963.6 47.5
+972.7 94.9
+973.5 28.7
+974.2 11.7
+978.5 871.4
+979.4 353.2
+980.0 32.4
+987.4 7.9
+988.4 24.0
+990.9 58.9
+991.9 68.6
+992.7 75.8
+996.2 23.1
+1008.5 19.6
+1009.4 32.4
+1010.0 10.1
+1014.2 43.9
+1015.4 28.9
+1018.7 21.2
+1020.3 12.3
+1023.1 24.8
+1031.5 129.9
+1032.5 141.9
+1033.3 95.3
+1033.9 4.6
+1034.8 13.1
+1037.7 51.6
+1041.7 3.1
+1042.9 6.2
+1048.0 15.1
+1049.5 1781.8
+1050.6 738.7
+1051.4 52.9
+1052.5 49.9
+1054.5 43.1
+1055.9 39.9
+1058.6 12.4
+1061.2 21.0
+1070.6 28.5
+1072.7 34.7
+1073.5 5.0
+1074.7 17.5
+1075.5 13.0
+1076.4 9.9
+1080.5 5.5
+1091.0 35.3
+1092.5 7.3
+1093.5 82.7
+1101.7 9.1
+1102.9 3.5
+1111.5 17.4
+1119.3 7.9
+1137.6 23.5
+1227.8 12.8
+S	117	117	652.52
+Z	2	1304.03
+191.1 1.5
+195.0 1.5
+199.1 1.5
+213.2 2.0
+215.1 1.4
+218.9 0.7
+226.0 1.7
+226.9 0.8
+229.1 3.3
+234.8 1.8
+241.9 2.3
+242.9 1.1
+245.0 0.9
+246.1 1.2
+248.5 0.8
+249.2 1.7
+253.2 0.7
+257.3 1.2
+258.3 1.8
+259.0 1.9
+260.0 0.8
+261.0 0.7
+269.4 1.3
+270.1 3.4
+271.3 1.1
+272.1 1.1
+275.2 5.0
+276.1 3.9
+280.2 0.9
+287.2 0.7
+291.2 0.9
+292.0 1.0
+300.1 1.6
+302.2 0.9
+306.2 1.0
+310.0 1.0
+312.1 1.8
+313.0 3.0
+315.9 1.7
+319.3 1.1
+321.3 2.0
+328.1 4.1
+329.3 1.1
+330.0 1.1
+331.0 1.8
+333.1 2.5
+338.9 1.6
+340.4 1.6
+341.1 2.7
+343.1 1.2
+344.1 1.4
+346.2 17.8
+347.2 2.4
+347.9 1.0
+349.1 1.3
+353.2 1.7
+354.9 3.1
+357.1 2.7
+358.1 5.0
+359.0 1.0
+360.2 1.2
+361.2 2.0
+363.1 1.1
+365.1 1.9
+367.1 3.4
+369.2 1.8
+371.3 3.5
+372.0 1.2
+376.5 0.9
+380.5 0.9
+382.2 4.3
+383.3 14.5
+386.1 0.9
+388.2 1.2
+389.1 1.5
+393.1 1.1
+397.3 1.7
+398.3 1.4
+399.2 2.0
+400.9 1.1
+403.1 1.4
+404.3 2.8
+405.2 0.9
+408.1 2.7
+409.8 1.1
+411.6 0.9
+413.2 5.7
+414.0 1.0
+415.1 3.4
+417.4 0.8
+418.2 2.4
+419.1 0.9
+423.3 1.0
+425.0 4.2
+428.0 1.0
+429.1 2.2
+430.2 3.8
+430.9 0.9
+432.2 0.9
+433.0 2.4
+434.3 1.3
+435.4 0.8
+436.2 1.1
+437.3 4.1
+438.2 0.9
+439.1 2.7
+440.2 1.5
+441.2 2.1
+442.0 3.8
+443.1 9.2
+444.3 2.3
+445.3 9.1
+446.3 1.9
+447.2 1.7
+448.2 1.3
+450.2 3.8
+451.6 4.7
+452.3 7.9
+454.1 5.2
+455.3 2.9
+456.2 1.5
+457.2 2.8
+459.2 1.7
+460.4 1.1
+461.2 0.6
+463.1 0.7
+464.2 1.2
+465.1 1.6
+466.4 3.3
+467.4 3.2
+468.3 7.3
+469.5 2.8
+470.1 29.8
+471.1 21.9
+472.2 4.2
+473.2 5.0
+474.1 1.2
+475.7 1.7
+476.4 1.1
+481.0 1.4
+484.4 1.5
+485.1 4.6
+486.1 6.7
+487.1 1.2
+488.1 2.8
+489.3 1.2
+491.7 2.0
+493.0 1.1
+494.3 1.5
+496.2 0.7
+500.7 2.0
+504.3 4.2
+505.2 9.1
+506.0 1.8
+507.2 6.3
+508.1 1.1
+509.2 0.6
+511.2 1.5
+512.2 1.8
+514.1 2.1
+515.3 0.8
+516.3 3.3
+517.2 4.0
+518.8 5.4
+520.2 6.8
+521.1 1.1
+522.4 3.5
+523.3 6.8
+524.3 3.3
+525.4 1.8
+527.3 0.9
+528.2 2.2
+529.0 1.8
+529.8 2.0
+531.2 1.6
+531.9 0.7
+533.6 1.8
+534.3 1.3
+536.0 5.8
+537.1 18.1
+538.2 13.9
+539.3 8.6
+540.4 1.8
+541.2 1.1
+543.3 0.9
+545.2 1.4
+547.8 1.0
+548.7 0.7
+550.4 4.2
+551.0 1.0
+551.6 3.0
+552.4 2.2
+553.1 3.6
+554.2 11.1
+555.6 1.5
+556.2 1.2
+557.5 1.4
+558.4 0.8
+559.4 1.1
+560.1 12.6
+562.0 1.4
+562.7 1.8
+563.6 2.8
+564.2 1.4
+565.2 3.1
+565.8 2.2
+566.9 2.4
+568.0 5.1
+569.2 1.1
+570.1 1.6
+571.5 4.3
+572.3 30.9
+573.3 3.9
+574.3 1.9
+575.5 0.8
+577.1 3.2
+579.2 1.3
+580.1 10.4
+581.0 5.0
+582.1 3.6
+582.8 5.3
+584.2 2.2
+585.0 1.9
+586.1 4.1
+588.4 2.6
+589.2 4.1
+590.2 4.9
+590.9 0.7
+593.3 3.0
+594.1 2.1
+595.2 11.8
+598.6 2.4
+600.1 3.8
+601.3 1.5
+602.9 0.9
+604.0 2.2
+605.3 7.5
+606.1 4.5
+607.3 4.7
+608.3 8.2
+609.2 3.8
+612.2 7.3
+613.5 4.7
+615.0 16.0
+616.0 11.9
+617.2 78.4
+618.2 16.4
+619.4 1.8
+620.1 3.3
+621.0 1.0
+622.3 7.3
+623.3 5.2
+624.2 3.0
+625.4 2.8
+626.2 1.7
+628.0 3.5
+629.0 9.2
+629.8 10.2
+631.4 3.8
+633.2 63.6
+634.2 48.1
+635.1 24.1
+636.0 10.0
+637.1 3.6
+639.4 12.2
+640.3 3.1
+641.2 2.3
+642.2 77.7
+642.9 33.7
+644.2 6.5
+646.0 0.9
+654.1 1.1
+667.0 6.1
+669.1 8.2
+671.4 1.9
+674.3 1.4
+677.7 1.1
+680.4 1.3
+684.2 4.1
+685.2 46.5
+686.3 2.9
+687.3 2.8
+698.3 1.6
+701.2 1.9
+702.1 1.0
+712.6 7.0
+713.3 1.7
+714.3 1.2
+717.1 0.7
+720.2 0.8
+721.5 0.6
+724.3 1.0
+725.1 1.6
+726.4 4.1
+730.2 32.2
+731.1 1.1
+741.6 2.6
+742.3 4.3
+743.4 2.3
+744.7 3.0
+747.6 1.5
+754.2 1.0
+758.3 0.8
+764.1 3.2
+765.2 1.0
+767.4 1.2
+774.3 1.0
+777.0 1.2
+777.9 2.6
+786.4 1.5
+787.1 1.2
+787.9 1.0
+789.3 0.6
+794.3 1.3
+798.3 3.1
+799.4 3.8
+800.4 1.9
+801.6 1.1
+806.8 1.7
+808.2 0.6
+810.1 1.8
+815.4 1.5
+821.5 1.6
+826.8 6.6
+827.5 5.3
+828.3 0.8
+829.1 1.1
+834.3 0.8
+835.0 1.2
+838.3 1.8
+839.0 0.5
+840.3 1.2
+843.3 1.0
+845.2 3.1
+847.2 0.6
+848.2 2.0
+851.2 0.8
+854.3 1.4
+857.1 8.3
+857.8 1.4
+859.3 18.3
+860.1 2.3
+866.3 1.4
+868.2 2.1
+882.4 1.9
+883.6 4.1
+884.7 4.1
+889.5 2.7
+890.9 2.0
+891.6 2.1
+896.5 1.0
+897.5 1.1
+900.8 1.1
+904.3 1.4
+909.1 1.1
+909.7 0.6
+911.4 3.8
+912.4 2.2
+914.0 5.7
+915.5 2.6
+917.2 1.4
+918.1 1.3
+920.5 1.0
+924.1 0.9
+925.2 3.3
+926.3 1.1
+929.3 1.0
+938.2 6.9
+939.0 0.8
+940.0 0.7
+949.1 2.0
+951.3 1.6
+954.4 1.1
+956.0 21.8
+957.1 8.5
+959.4 0.7
+961.3 1.4
+962.3 1.2
+970.3 1.2
+973.0 1.3
+974.4 19.6
+975.3 4.7
+976.3 1.6
+978.0 0.9
+979.0 0.7
+982.4 1.1
+987.2 0.8
+994.2 1.1
+999.1 1.1
+999.9 0.8
+1002.0 1.5
+1003.2 0.8
+1004.4 1.5
+1008.4 0.8
+1009.3 1.8
+1017.6 1.0
+1018.5 0.8
+1022.4 0.7
+1025.3 0.9
+1026.2 4.6
+1027.2 6.2
+1028.1 3.4
+1029.2 1.2
+1030.1 1.0
+1031.1 1.9
+1032.1 2.5
+1037.0 1.3
+1041.6 1.3
+1043.0 1.7
+1044.1 1.9
+1045.4 1.0
+1050.2 0.8
+1050.9 1.2
+1053.9 1.4
+1056.5 1.0
+1057.7 6.4
+1058.4 3.5
+1060.3 1.1
+1065.6 0.8
+1067.3 1.7
+1070.2 2.2
+1071.3 5.4
+1072.4 17.4
+1073.4 10.3
+1074.2 5.2
+1074.9 2.0
+1087.3 0.7
+1089.1 2.8
+1098.6 0.7
+1103.3 0.7
+1113.3 2.1
+1115.2 1.3
+1127.1 4.0
+1128.2 5.8
+1129.4 1.4
+1132.3 1.5
+1133.9 1.0
+1134.7 1.1
+1137.2 4.1
+1138.6 1.9
+1143.8 2.7
+1145.4 0.9
+1155.2 33.5
+1156.2 14.7
+1157.2 3.2
+1169.0 0.8
+1174.4 2.2
+1177.1 1.3
+1187.2 3.5
+1188.4 1.1
+1190.6 1.0
+1220.3 1.5
+1257.3 0.8
+S	118	118	1031.94
+Z	3	3093.80
+311.3 5.9
+323.1 4.6
+325.2 100.4
+326.0 16.5
+338.1 17.2
+341.4 32.2
+342.3 87.9
+343.4 5.8
+345.4 7.7
+354.3 12.5
+355.5 27.0
+369.6 19.2
+371.2 46.6
+372.3 5.1
+375.5 9.5
+385.3 24.8
+389.4 73.3
+390.3 21.6
+395.4 9.1
+397.1 3.6
+400.4 16.4
+404.4 10.1
+412.1 18.5
+413.3 96.1
+414.3 14.3
+415.5 16.5
+426.5 24.8
+431.4 44.2
+432.2 23.1
+436.3 14.8
+441.3 32.4
+446.4 6.5
+452.2 6.7
+453.3 107.2
+454.3 56.6
+469.3 9.3
+470.5 25.6
+471.4 26.5
+486.6 39.6
+489.5 3.9
+494.2 19.9
+495.2 9.8
+497.9 54.5
+504.3 80.4
+505.6 33.4
+511.4 12.8
+512.5 17.9
+515.7 22.6
+524.4 68.7
+525.4 56.7
+526.3 14.4
+528.5 17.9
+529.3 22.8
+530.2 29.6
+531.4 19.2
+534.6 15.4
+541.6 15.6
+542.3 28.1
+544.2 34.1
+546.5 6.7
+550.1 38.3
+551.1 49.9
+552.4 6.8
+555.2 14.7
+556.6 14.0
+558.2 31.1
+559.4 20.2
+564.0 19.5
+565.5 101.7
+567.4 8.8
+571.9 886.8
+573.0 20.3
+581.4 19.3
+583.3 8.6
+591.0 39.5
+597.3 28.6
+599.4 97.9
+600.2 7.4
+601.4 21.1
+602.4 16.5
+607.4 241.8
+611.5 23.0
+615.6 6.9
+616.5 34.4
+618.3 420.6
+619.3 72.7
+620.7 11.0
+622.7 42.3
+623.6 5.7
+625.3 3.3
+627.1 24.6
+632.4 90.3
+636.2 86.2
+637.3 11.3
+638.4 19.0
+639.4 33.4
+640.4 43.8
+642.9 3.9
+650.0 60.4
+654.6 122.7
+656.4 8.0
+657.3 100.9
+657.9 119.0
+659.3 14.6
+660.4 30.4
+661.6 7.8
+662.3 11.0
+663.5 23.0
+666.4 275.4
+667.4 18.7
+668.4 20.7
+669.4 11.8
+670.5 19.4
+671.5 103.7
+672.5 25.2
+673.7 17.7
+680.4 37.7
+682.6 54.3
+685.6 35.9
+689.4 1132.7
+690.4 233.3
+691.3 31.5
+694.4 12.8
+696.4 31.8
+697.9 55.5
+698.6 84.2
+701.2 6.9
+702.8 21.9
+703.5 17.9
+705.4 73.7
+706.9 265.7
+707.6 16.6
+711.1 25.8
+712.4 49.5
+713.3 17.7
+715.2 82.5
+717.5 51.0
+718.5 14.5
+719.4 43.8
+726.6 12.1
+727.4 33.7
+728.6 10.5
+729.5 4.1
+731.5 5.4
+733.4 19.2
+734.6 13.7
+735.6 75.8
+737.4 115.7
+738.3 69.2
+741.6 48.0
+743.3 23.7
+746.4 28.6
+749.1 109.6
+749.8 3.9
+753.5 56.8
+754.3 33.5
+755.5 58.5
+756.2 12.7
+756.9 59.3
+757.5 23.9
+758.3 8.3
+760.4 18.9
+762.0 351.4
+763.0 124.1
+764.4 153.1
+766.5 4.3
+767.5 66.7
+769.2 330.1
+770.9 1906.1
+771.6 411.4
+773.2 21.2
+774.9 45.9
+778.0 6083.4
+778.7 3412.4
+779.7 14.1
+780.9 55.8
+783.1 19.2
+784.5 43.0
+785.3 4.4
+788.7 25.8
+789.8 38.5
+790.6 41.5
+791.3 11.1
+793.6 35.5
+794.5 25.5
+796.4 43.1
+797.8 28.5
+802.5 257.2
+803.5 143.0
+809.2 10.3
+810.0 75.2
+810.7 2.7
+811.9 14.3
+813.0 25.7
+815.4 23.1
+816.5 31.4
+819.6 112.6
+822.2 49.0
+823.8 92.4
+824.8 11.3
+827.8 11.6
+828.6 5.3
+833.2 622.5
+834.3 19.7
+834.9 41.6
+836.0 40.7
+842.0 1571.0
+842.7 526.9
+844.2 5.3
+845.6 58.8
+846.6 25.3
+848.5 115.2
+854.9 40.5
+856.1 75.3
+856.9 59.6
+861.2 115.5
+863.7 60.4
+864.6 14.2
+866.3 81.0
+868.4 58.9
+871.1 49.7
+873.0 31.3
+874.7 12.0
+875.5 8.7
+878.4 64.0
+879.5 113.4
+882.0 82.1
+883.8 123.3
+884.5 110.2
+885.6 15.3
+887.6 44.8
+888.6 7.4
+891.6 46.4
+896.4 38.7
+899.2 29.3
+900.4 70.1
+903.6 22.7
+904.7 3.4
+906.1 77.5
+906.9 57.2
+907.7 117.7
+908.9 82.0
+910.0 60.5
+911.5 20.0
+913.2 97.1
+915.0 29.8
+916.8 63.0
+917.6 268.9
+918.6 79.4
+920.1 63.5
+922.0 32.1
+925.8 122.1
+929.7 53.6
+930.8 112.2
+931.5 382.0
+932.1 195.5
+933.5 118.2
+939.0 58.2
+940.0 7783.7
+940.7 3289.2
+941.7 566.5
+942.7 210.6
+943.7 76.0
+944.7 63.2
+946.6 74.0
+947.5 26.6
+948.4 47.0
+949.2 57.2
+951.8 189.2
+953.6 50.9
+955.8 50.8
+957.5 87.0
+959.1 126.2
+960.2 70.8
+961.0 84.1
+963.3 135.3
+965.3 77.6
+966.6 98.8
+968.1 829.2
+969.1 45.9
+970.0 87.6
+971.5 33.6
+972.9 112.3
+973.6 21.9
+974.5 114.4
+975.4 18.8
+977.2 3871.5
+978.1 545.2
+979.2 111.3
+980.2 67.3
+981.5 52.2
+982.9 52.3
+983.7 221.4
+984.3 13.2
+985.9 10.6
+986.9 17.0
+987.9 10.3
+991.4 137.3
+992.8 135.7
+993.6 126.1
+994.4 19.1
+995.6 503.5
+996.4 9.7
+997.1 69.2
+997.8 109.3
+998.7 106.2
+1000.0 82.7
+1002.5 55.5
+1004.1 227.4
+1005.1 157.1
+1005.9 111.6
+1007.5 151.1
+1008.7 311.5
+1009.8 247.9
+1011.4 220.1
+1012.6 132.8
+1013.5 88.0
+1014.7 98.7
+1015.5 160.3
+1016.5 52.9
+1017.1 24.9
+1018.1 27.0
+1018.9 120.2
+1020.2 34.6
+1022.7 27.4
+1024.2 31.5
+1033.6 14.8
+1040.7 24.0
+1049.0 15.0
+1051.8 46.2
+1052.6 17.9
+1055.6 29.3
+1057.4 90.6
+1059.5 37.5
+1060.6 47.2
+1065.0 27.5
+1069.6 38.2
+1074.8 44.8
+1077.4 35.8
+1078.3 144.5
+1080.4 39.6
+1081.2 25.3
+1083.0 35.5
+1085.5 32.7
+1086.2 21.7
+1087.6 282.0
+1088.5 53.0
+1089.4 259.7
+1090.1 168.4
+1090.8 18.7
+1094.8 13.6
+1108.6 185.0
+1109.5 22.7
+1110.2 25.0
+1113.5 39.5
+1118.4 108.5
+1120.7 15.1
+1122.4 32.6
+1124.4 3.1
+1125.5 124.3
+1126.5 46.1
+1129.4 57.0
+1130.5 43.8
+1132.5 81.3
+1135.5 16.7
+1138.3 12.1
+1142.5 3534.4
+1143.6 834.4
+1144.7 79.8
+1146.9 225.7
+1148.0 143.5
+1148.9 84.2
+1149.8 13.0
+1151.6 49.1
+1154.1 17.9
+1156.0 3.5
+1158.0 78.1
+1159.2 23.3
+1162.6 85.9
+1164.1 5.3
+1166.2 433.5
+1166.9 281.5
+1167.5 105.0
+1168.9 26.1
+1169.7 12.9
+1171.2 45.5
+1172.8 25.8
+1177.2 11.2
+1178.5 7.3
+1179.3 2.7
+1180.6 7.3
+1181.6 51.3
+1182.5 20.6
+1184.1 71.2
+1186.2 37.6
+1186.9 9.9
+1189.5 32.9
+1190.3 62.5
+1191.0 18.7
+1191.7 52.5
+1194.9 439.2
+1195.7 103.3
+1196.6 31.8
+1198.5 1107.6
+1199.7 379.1
+1201.8 20.5
+1203.5 1011.7
+1204.2 1000.8
+1204.8 18.6
+1205.5 85.9
+1206.2 75.5
+1208.5 5.8
+1210.3 43.0
+1211.8 60.7
+1213.6 1000.1
+1214.6 193.3
+1216.5 5197.3
+1217.4 2027.1
+1218.4 207.4
+1219.0 34.4
+1221.1 42.7
+1222.2 37.7
+1223.9 6.5
+1225.4 35.3
+1229.7 38.7
+1231.0 63.0
+1233.1 38.1
+1234.5 40.3
+1235.8 16.1
+1239.3 941.0
+1240.1 121.3
+1240.9 49.2
+1242.8 29.2
+1244.6 42.9
+1246.0 11.9
+1247.8 527.3
+1248.6 79.0
+1249.7 24.5
+1250.8 8.1
+1251.9 15.8
+1252.7 41.0
+1255.3 68.6
+1261.1 20.2
+1263.9 11.4
+1265.5 65.4
+1268.8 32.6
+1274.2 62.0
+1274.8 17.5
+1276.4 26.4
+1277.3 13.5
+1278.6 64.6
+1279.5 52.5
+1280.3 32.2
+1281.8 37.2
+1283.4 779.9
+1284.4 77.5
+1287.5 85.6
+1288.1 33.7
+1291.9 24.4
+1293.8 39.4
+1295.8 140.1
+1296.9 453.3
+1297.7 17.6
+1298.8 32.7
+1299.5 8.2
+1302.8 37.3
+1310.5 33.6
+1311.7 32.1
+1313.2 36.8
+1318.4 55.2
+1319.9 39.9
+1322.7 24.9
+1323.4 36.5
+1324.1 56.8
+1326.0 27.2
+1327.4 25.4
+1328.5 545.9
+1329.7 243.3
+1332.4 34.4
+1336.7 67.4
+1340.3 17.0
+1341.4 121.1
+1344.7 116.6
+1345.4 23.1
+1349.9 12.4
+1353.6 244.3
+1354.5 157.4
+1355.9 9.4
+1356.6 9.3
+1362.5 705.7
+1363.5 80.4
+1366.0 6.5
+1368.8 19.3
+1373.6 26.7
+1375.6 47.7
+1376.6 44.6
+1377.4 49.8
+1378.0 5.7
+1380.9 26.0
+1384.6 33.9
+1391.5 14.3
+1392.6 36.7
+1394.6 541.9
+1395.6 203.9
+1396.6 69.9
+1398.9 18.6
+1402.8 109.7
+1403.5 33.3
+1407.2 17.4
+1408.6 95.8
+1409.5 158.3
+1410.6 27.3
+1412.6 1443.7
+1413.6 955.6
+1414.6 207.7
+1417.1 56.2
+1418.2 207.1
+1419.2 37.5
+1424.4 6.6
+1426.4 22.7
+1427.0 50.6
+1427.7 96.6
+1430.9 34.0
+1431.8 19.5
+1433.8 35.6
+1438.9 37.1
+1439.8 36.3
+1440.8 21.9
+1446.5 43.1
+1449.8 19.5
+1457.6 112.9
+1458.6 86.1
+1459.6 15.7
+1461.6 8.7
+1465.6 92.8
+1466.4 166.6
+1467.0 55.5
+1469.2 31.3
+1470.3 8.4
+1474.7 578.2
+1475.4 745.4
+1483.5 17.9
+1487.4 23.4
+1488.3 114.9
+1490.7 10.0
+1491.6 10.5
+1493.1 25.1
+1501.7 20.0
+1504.1 32.9
+1504.9 38.1
+1505.8 88.2
+1510.9 71.4
+1511.7 4.4
+1518.5 60.3
+1519.6 31.8
+1522.6 819.5
+1523.6 543.0
+1524.3 110.1
+1525.3 57.6
+1526.9 7.7
+1528.4 8.7
+1529.6 4.1
+1536.6 145.1
+1537.8 46.5
+1538.8 12.9
+1540.6 4353.8
+1541.7 1504.9
+1542.8 343.7
+1545.5 14.9
+1554.7 2257.2
+1555.7 1466.1
+1556.7 228.8
+1561.2 52.8
+1562.1 14.1
+1566.1 8.4
+1583.2 24.0
+1585.6 37.5
+1605.6 26.7
+1612.4 32.0
+1615.6 20.6
+1619.4 11.6
+1625.4 23.7
+1628.6 55.5
+1630.0 76.6
+1633.9 32.4
+1636.4 9.7
+1637.7 14.5
+1638.5 23.6
+1640.9 12.7
+1645.4 52.6
+1648.8 14.2
+1652.9 2.7
+1657.1 41.4
+1665.1 24.4
+1665.9 140.3
+1666.6 23.3
+1667.2 23.5
+1677.8 18.0
+1683.0 101.5
+1683.7 45.4
+1687.5 2.8
+1697.1 45.7
+1707.8 11.1
+1712.0 48.7
+1713.6 35.8
+1714.6 10.8
+1733.8 12.3
+1742.3 3.9
+1751.7 44.5
+1754.4 55.4
+1767.0 48.4
+1771.1 37.3
+1772.6 40.0
+1812.1 10.3
+1855.4 22.7
+1856.2 29.4
+1863.9 40.7
+1864.9 13.4
+1878.3 59.7
+1879.5 21.2
+1881.5 95.4
+1882.2 26.3
+1883.0 27.9
+1898.7 15.2
+1904.1 11.0
+1913.0 17.6
+1917.2 18.7
+1917.8 6.1
+1925.7 23.5
+1927.1 41.2
+1934.1 86.3
+1934.8 161.4
+1935.7 245.4
+1936.5 55.7
+1937.6 9.3
+1945.9 12.0
+1952.9 282.7
+1953.8 272.9
+1954.4 21.6
+1989.9 10.0
+S	119	119	651.77
+Z	2	1302.53
+187.0 9.2
+192.3 80.5
+201.2 18.7
+202.0 10.8
+204.5 15.8
+209.3 24.4
+212.2 47.2
+222.2 105.9
+228.3 45.2
+229.2 172.1
+230.1 12.0
+232.4 234.1
+234.5 65.5
+235.8 93.5
+237.1 194.6
+238.2 24.6
+240.2 97.2
+244.3 60.5
+245.1 57.0
+246.4 26.8
+249.3 10.3
+251.2 20.6
+255.3 95.4
+257.1 17.6
+258.3 91.3
+259.3 9.2
+260.5 20.8
+262.5 39.4
+264.8 162.6
+266.2 29.5
+270.2 11.6
+271.3 19.7
+274.3 51.4
+275.3 444.2
+283.3 266.3
+284.1 60.9
+286.6 55.0
+288.3 43.9
+293.5 30.5
+294.2 76.0
+295.2 41.9
+296.2 64.8
+297.4 80.6
+298.9 50.7
+299.6 10.5
+300.3 42.3
+304.3 47.6
+306.6 13.1
+309.3 36.2
+310.2 9.1
+311.4 39.7
+312.3 133.4
+317.4 246.9
+319.4 27.7
+320.5 14.5
+323.6 29.4
+324.3 16.8
+325.5 125.1
+326.9 21.6
+328.3 16.7
+329.5 131.9
+330.4 83.7
+333.3 59.9
+338.4 8.3
+340.4 50.1
+341.2 76.1
+342.6 77.7
+343.4 56.4
+344.5 160.8
+346.4 1107.7
+347.4 140.5
+348.4 59.4
+349.5 32.0
+350.2 40.5
+351.2 212.1
+352.4 13.5
+354.4 80.6
+355.4 69.3
+358.2 248.4
+359.3 91.7
+360.4 662.9
+361.4 273.1
+365.9 15.3
+367.4 41.3
+368.4 31.3
+369.5 84.6
+370.5 49.9
+373.0 59.4
+374.9 33.5
+378.2 26.1
+381.2 26.9
+382.2 41.4
+383.5 30.5
+385.2 24.7
+389.4 44.7
+390.7 61.5
+391.4 91.2
+392.5 13.7
+394.4 361.5
+395.1 35.4
+396.7 63.4
+397.3 136.6
+398.3 87.8
+399.6 26.3
+400.3 90.9
+402.2 15.6
+403.2 55.2
+404.3 34.1
+405.4 33.7
+407.4 53.3
+411.2 60.3
+412.3 181.3
+413.9 75.5
+414.5 21.5
+415.4 152.6
+416.4 67.1
+417.6 18.6
+418.5 83.2
+423.5 39.3
+424.3 49.2
+425.4 147.3
+429.1 31.4
+430.6 799.6
+431.6 91.5
+432.4 29.8
+434.2 21.7
+435.6 34.7
+438.3 113.9
+439.6 90.5
+440.6 21.4
+441.5 71.6
+442.5 78.1
+443.3 292.7
+444.3 52.4
+445.4 1023.7
+446.5 261.9
+447.4 124.7
+449.6 92.9
+451.6 68.8
+454.2 110.6
+455.2 49.0
+456.6 60.7
+457.4 59.8
+458.3 20.1
+459.4 613.0
+460.4 54.7
+461.0 69.4
+463.2 62.1
+465.2 38.9
+466.6 60.6
+467.3 192.1
+468.4 129.1
+469.5 97.5
+470.6 114.2
+471.4 71.9
+473.5 129.7
+474.7 15.3
+476.0 115.8
+476.9 34.7
+478.5 46.7
+479.1 80.9
+482.2 35.4
+482.8 29.6
+483.4 20.3
+485.3 284.4
+486.4 57.8
+487.3 49.7
+488.4 215.3
+489.1 380.0
+490.6 124.0
+491.7 153.1
+494.4 18.1
+495.5 99.7
+497.1 123.1
+498.4 17.0
+501.9 143.1
+506.6 20.7
+507.7 358.3
+508.6 59.2
+511.4 59.4
+512.2 30.9
+513.5 141.5
+515.2 157.6
+517.9 123.8
+519.1 399.5
+520.0 125.8
+522.3 47.0
+524.1 11.9
+526.4 346.7
+527.2 65.8
+528.6 228.4
+529.6 235.7
+530.8 198.1
+532.5 15.2
+533.8 184.9
+534.8 243.0
+535.4 44.9
+536.4 236.5
+537.5 907.2
+538.5 296.7
+539.6 245.3
+540.8 256.7
+544.2 227.6
+545.1 66.2
+546.5 1549.2
+547.4 272.0
+548.4 119.3
+550.5 155.8
+551.2 87.3
+552.7 359.8
+553.9 292.6
+554.7 108.6
+555.4 111.4
+556.9 51.3
+557.8 39.8
+558.6 35.5
+560.5 1039.8
+561.5 295.0
+563.8 53.7
+564.4 31.6
+566.7 85.1
+567.4 47.0
+568.3 239.8
+569.6 157.4
+570.5 251.1
+571.6 64.0
+572.4 843.8
+573.4 268.9
+574.1 33.6
+574.8 195.8
+575.9 18.6
+576.8 24.8
+577.7 175.4
+578.5 86.2
+579.4 10.3
+580.6 60.3
+582.5 81.6
+583.2 55.5
+583.9 94.0
+585.0 61.7
+586.6 213.9
+587.4 71.9
+588.6 186.5
+590.3 84.7
+591.8 143.3
+593.5 196.7
+594.3 215.4
+595.1 175.8
+596.7 36.8
+597.4 184.5
+598.7 159.7
+599.5 30.4
+600.5 91.5
+601.1 81.0
+602.9 15.4
+603.5 38.3
+604.9 189.8
+606.3 382.1
+607.5 182.1
+608.7 102.7
+609.9 71.8
+610.9 382.9
+611.7 8.5
+613.0 52.5
+613.7 67.0
+614.5 233.5
+616.2 540.1
+617.5 5389.6
+618.6 1429.1
+619.8 321.3
+621.0 211.7
+621.8 306.2
+622.6 75.8
+623.6 66.1
+624.4 754.4
+625.5 158.6
+626.7 53.0
+627.7 211.4
+628.7 1435.8
+629.8 111.5
+630.6 193.8
+631.7 236.8
+632.4 291.8
+633.4 407.0
+634.5 557.7
+635.5 245.2
+636.6 217.0
+638.2 508.4
+639.3 512.0
+640.2 297.5
+641.3 864.0
+642.3 3680.2
+643.3 911.7
+644.1 141.3
+644.7 81.6
+647.1 51.9
+649.6 24.3
+656.1 106.8
+657.2 238.4
+659.6 711.7
+660.6 222.3
+663.8 37.3
+665.4 115.2
+667.1 590.8
+667.8 172.2
+668.5 104.0
+670.0 63.6
+671.5 103.6
+672.8 132.4
+674.6 37.3
+677.4 26.8
+679.2 60.1
+680.5 109.2
+681.6 57.3
+682.2 106.4
+683.3 90.5
+685.4 2428.0
+686.4 228.8
+687.5 343.2
+688.7 79.7
+690.6 50.5
+692.6 28.2
+693.5 349.4
+694.4 70.0
+695.6 118.1
+697.5 40.2
+703.3 49.0
+704.6 119.9
+705.6 72.6
+706.7 120.9
+707.9 155.1
+709.8 24.3
+710.6 146.8
+711.7 82.1
+712.5 9.0
+713.6 166.4
+714.5 33.3
+715.4 71.6
+716.6 57.1
+718.5 27.7
+719.4 53.1
+720.4 58.8
+723.0 258.2
+723.9 127.8
+724.9 234.6
+726.1 8.1
+727.6 134.4
+730.6 1882.2
+731.7 680.4
+732.9 243.9
+734.7 76.9
+737.4 473.2
+738.7 118.6
+742.6 496.2
+743.5 323.3
+744.3 74.7
+745.6 30.7
+746.5 50.0
+749.0 38.8
+750.6 74.7
+751.4 48.1
+752.0 92.8
+752.9 66.4
+755.4 696.8
+756.4 151.9
+758.6 81.2
+760.1 124.9
+765.6 89.5
+767.3 107.3
+768.7 13.9
+769.7 46.3
+770.6 45.9
+771.7 131.2
+772.5 52.9
+773.4 12.9
+774.8 58.0
+776.1 126.8
+781.8 404.0
+782.4 120.6
+784.5 83.0
+785.4 54.3
+786.6 201.6
+788.8 445.5
+789.8 188.5
+791.3 136.9
+792.6 163.7
+793.6 83.5
+796.6 152.9
+798.2 27.2
+799.4 20.2
+800.2 498.6
+801.8 134.5
+804.7 23.2
+808.0 67.9
+808.7 43.3
+809.4 216.6
+810.4 115.1
+811.3 311.6
+815.8 18.6
+817.7 75.1
+819.0 276.4
+819.6 852.5
+820.2 410.7
+821.6 83.4
+822.8 127.1
+823.8 284.3
+824.6 189.2
+825.3 156.8
+826.5 102.7
+828.4 76.6
+829.4 86.3
+831.6 8.9
+832.8 50.3
+834.4 180.9
+835.4 61.5
+838.4 98.4
+839.4 152.5
+840.5 95.5
+841.5 159.1
+842.7 93.2
+843.5 112.8
+844.9 81.6
+845.7 105.1
+846.6 56.4
+847.5 158.8
+848.2 85.0
+849.5 359.5
+850.3 20.7
+851.6 7.0
+852.8 29.3
+853.9 95.4
+855.6 171.3
+857.5 688.7
+858.5 408.1
+859.6 1237.7
+860.7 344.1
+861.9 82.4
+863.2 41.9
+864.8 35.1
+866.2 13.8
+867.5 76.5
+869.6 44.8
+871.6 507.1
+872.8 34.5
+876.8 57.9
+877.8 28.6
+879.7 17.0
+881.7 45.9
+883.7 121.6
+884.6 258.1
+885.8 361.2
+886.9 41.9
+889.7 406.9
+890.8 140.7
+891.5 62.1
+893.1 215.6
+896.1 81.3
+898.1 42.8
+898.7 131.6
+904.6 131.2
+905.8 159.2
+908.2 41.0
+910.5 60.8
+911.8 119.4
+913.2 41.3
+914.3 30.2
+916.7 49.0
+917.6 31.8
+918.7 102.5
+920.0 60.9
+920.7 152.9
+923.0 244.8
+923.7 307.5
+924.8 55.5
+925.5 79.5
+928.7 39.7
+929.7 89.0
+930.6 184.9
+931.5 14.1
+932.6 103.6
+938.6 379.1
+939.6 66.8
+941.6 233.8
+942.4 211.1
+945.1 157.9
+946.0 32.4
+948.6 37.4
+950.4 329.5
+951.8 67.2
+952.9 342.4
+953.7 180.3
+956.5 1529.6
+957.7 407.4
+958.9 233.6
+965.6 51.4
+967.9 101.9
+970.2 69.9
+972.6 18.0
+973.4 151.4
+974.7 2157.3
+975.8 768.3
+976.7 314.3
+977.6 37.4
+979.7 19.2
+982.9 34.2
+984.7 252.9
+985.7 64.4
+986.9 18.3
+988.8 69.5
+989.9 99.1
+991.7 40.8
+996.8 47.3
+998.1 18.6
+998.9 37.2
+999.9 10.4
+1000.5 24.6
+1002.8 101.3
+1003.6 29.9
+1005.3 103.9
+1006.8 115.8
+1007.4 20.3
+1008.8 15.3
+1009.7 27.6
+1010.7 43.9
+1011.9 30.1
+1014.0 466.8
+1015.1 69.1
+1019.6 23.3
+1022.8 70.6
+1026.5 118.0
+1027.6 801.1
+1028.7 340.8
+1030.0 93.6
+1033.4 53.6
+1034.7 25.7
+1035.8 14.1
+1036.9 961.4
+1037.7 182.8
+1039.0 61.0
+1041.9 181.2
+1042.7 30.2
+1044.9 53.0
+1045.6 40.6
+1049.0 103.0
+1051.6 190.5
+1052.6 32.3
+1054.7 62.1
+1055.7 257.4
+1056.7 296.0
+1057.8 53.0
+1059.1 48.1
+1067.1 15.4
+1067.8 92.0
+1069.5 510.8
+1070.8 167.3
+1071.9 42.8
+1073.8 699.2
+1074.7 357.7
+1075.8 127.4
+1083.2 25.8
+1085.8 58.0
+1086.6 23.5
+1095.6 94.1
+1097.6 66.6
+1100.6 137.2
+1108.4 62.7
+1109.2 27.7
+1110.1 49.2
+1114.7 18.0
+1118.7 52.5
+1121.8 163.2
+1124.9 18.5
+1126.8 216.3
+1127.7 145.7
+1137.5 62.0
+1138.6 310.7
+1139.5 61.1
+1141.2 41.6
+1150.7 27.7
+1155.6 1349.8
+1156.7 681.4
+1157.4 8.8
+1161.8 56.5
+1172.0 102.6
+1172.8 62.0
+1184.8 13.0
+1188.6 124.4
+1189.8 16.7
+1198.8 24.7
+1229.8 31.7
+1231.0 52.3
+1261.9 30.7
+S	120	120	409.21
+I	ID	97
+I	RTime	4.5967
+Z	2	817.41
+129.1 2.9
+132.3 1.2
+143.0 2.2
+144.0 1.8
+147.2 1.1
+154.2 1.6
+155.2 1.8
+160.9 2.2
+166.2 1.3
+175.1 2.5
+178.1 1.1
+178.9 2.5
+183.1 6.4
+187.1 2.4
+191.6 2.0
+194.2 1.2
+200.2 1.6
+204.8 1.2
+224.4 2.5
+226.2 1.8
+227.2 1.2
+231.4 2.2
+232.2 2.2
+233.1 7.9
+243.3 3.0
+244.1 1.1
+246.2 14.1
+250.2 3.0
+252.1 2.4
+257.3 2.5
+261.4 0.8
+262.3 2.7
+267.4 3.2
+268.2 4.6
+271.6 2.5
+273.1 12.8
+279.3 2.4
+280.5 15.0
+281.1 15.6
+282.1 1.2
+285.6 8.5
+289.3 8.6
+290.3 1.1
+292.1 2.0
+294.2 1.7
+298.3 1.7
+303.3 1.6
+309.0 1.1
+311.4 6.8
+312.3 2.5
+321.4 2.4
+322.2 6.5
+324.0 2.2
+329.2 19.0
+336.3 0.8
+341.1 6.4
+344.9 5.0
+349.2 3.9
+358.3 5.1
+359.5 4.5
+362.2 3.7
+363.1 56.5
+367.3 6.0
+370.3 3.2
+371.9 2.4
+373.3 6.9
+375.3 10.3
+376.5 7.6
+377.3 12.6
+378.4 11.3
+381.0 8.1
+383.2 6.4
+387.0 4.0
+389.5 2.4
+391.4 30.2
+392.2 13.3
+393.6 8.5
+400.0 29.8
+400.7 29.7
+401.3 22.5
+428.6 3.9
+484.5 0.8
+505.0 2.5
+511.3 7.0
+517.2 6.6
+520.4 4.1
+528.2 17.1
+529.6 3.0
+532.4 5.6
+555.4 4.0
+561.3 2.7
+566.5 3.9
+570.5 2.4
+576.1 1.3
+583.2 5.5
+585.1 2.0
+586.6 8.6
+587.3 2.5
+602.4 1.2
+607.3 6.4
+609.2 1.3
+619.3 3.2
+629.5 6.3
+630.7 3.5
+641.4 0.8
+644.2 4.0
+646.1 10.3
+646.8 12.3
+647.7 6.8
+660.3 3.2
+662.5 3.2
+663.2 1.6
+672.4 2.4
+680.1 6.0
+680.8 2.0
+681.5 10.8
+689.8 9.6
+690.5 4.4
+728.5 2.4
+757.4 3.0
+776.5 1.7
+795.5 6.6
+796.5 1.8
+S	121	121	651.58
+Z	2	1302.15
+184.1 25.2
+185.2 20.9
+201.0 17.3
+214.9 41.4
+219.3 21.6
+229.0 251.4
+235.2 31.7
+239.2 9.5
+240.0 50.9
+241.3 38.3
+243.1 74.2
+244.1 18.6
+245.1 40.7
+251.1 55.9
+252.2 16.8
+258.2 39.0
+261.2 17.6
+264.2 14.8
+266.0 14.3
+274.3 13.9
+275.1 80.3
+276.0 25.9
+278.7 7.2
+282.3 11.5
+290.3 19.9
+292.1 39.2
+294.3 8.9
+296.9 14.9
+298.2 7.9
+299.2 8.4
+302.2 13.2
+304.3 8.5
+310.1 6.4
+311.3 83.7
+316.2 12.0
+320.1 25.0
+327.9 36.4
+329.5 115.2
+330.3 25.8
+332.2 23.5
+335.9 39.4
+340.5 28.8
+344.3 29.3
+346.3 499.1
+347.2 63.6
+349.3 38.8
+352.1 32.9
+354.1 27.9
+357.3 19.3
+358.1 85.5
+359.2 25.8
+361.3 19.4
+368.9 43.8
+402.5 49.6
+406.1 24.5
+407.2 148.4
+408.5 141.8
+410.3 50.6
+412.2 92.3
+415.2 29.1
+417.7 81.1
+418.8 52.6
+421.3 35.1
+424.9 76.5
+429.6 15.1
+433.3 30.4
+434.2 68.4
+435.2 18.3
+437.1 10.1
+439.8 28.1
+440.5 12.0
+441.4 33.6
+443.2 177.1
+444.5 23.5
+445.3 354.5
+446.4 291.8
+447.4 8.1
+452.6 87.4
+453.3 27.1
+454.3 19.6
+455.2 17.0
+457.4 48.6
+458.2 40.0
+459.3 100.5
+459.9 33.6
+460.6 39.9
+462.1 13.2
+466.4 97.1
+471.3 48.7
+472.6 86.5
+473.3 29.2
+474.3 7.1
+475.1 46.6
+484.4 165.3
+485.6 20.3
+488.2 92.9
+488.9 176.8
+492.3 26.9
+496.3 40.3
+499.7 16.2
+501.9 27.4
+503.4 287.3
+504.2 34.4
+506.3 51.4
+508.3 43.6
+509.5 191.5
+511.2 15.9
+511.8 39.2
+514.9 84.9
+516.3 22.1
+522.7 52.7
+524.4 322.4
+525.2 111.0
+528.2 20.4
+529.3 44.1
+536.0 88.2
+537.1 349.0
+537.7 166.1
+538.5 99.6
+539.4 26.9
+540.1 43.7
+540.9 71.6
+542.8 81.1
+543.5 109.9
+544.5 99.2
+545.3 58.9
+549.0 84.1
+550.2 56.8
+551.4 155.0
+553.1 14.5
+554.0 201.3
+554.9 43.8
+558.0 77.8
+560.1 283.6
+561.3 180.4
+562.4 80.8
+563.7 30.8
+564.5 114.5
+565.9 41.2
+567.9 42.9
+569.1 14.1
+570.3 113.6
+571.6 119.7
+572.4 1152.6
+573.3 118.6
+575.0 12.9
+576.5 23.6
+577.4 19.1
+579.5 159.0
+580.6 14.8
+582.5 55.0
+584.8 61.4
+586.0 155.3
+586.9 95.4
+587.7 78.0
+588.4 12.2
+590.9 10.4
+593.3 76.5
+594.6 328.9
+595.5 17.3
+596.9 52.3
+599.7 132.2
+600.5 19.1
+601.9 129.0
+603.8 34.5
+605.0 14.1
+607.5 93.6
+608.6 25.5
+609.5 110.8
+611.8 46.1
+616.1 520.6
+617.4 2985.0
+618.4 613.5
+619.4 123.2
+621.6 100.5
+622.8 45.7
+624.7 126.3
+626.1 119.2
+627.0 67.7
+629.4 104.5
+631.2 152.9
+633.3 131.7
+634.6 278.4
+635.4 34.3
+637.5 127.9
+639.2 131.7
+640.0 118.8
+641.3 575.4
+642.4 1024.0
+643.5 60.4
+644.3 14.4
+651.6 14.5
+656.6 33.2
+658.3 28.5
+664.3 10.2
+665.2 39.8
+667.1 368.7
+668.2 86.1
+669.3 7.3
+671.7 34.3
+676.5 29.1
+682.1 26.2
+684.5 23.8
+685.2 1026.8
+686.3 531.3
+687.1 131.5
+688.5 20.4
+689.2 8.9
+690.1 14.0
+691.0 89.2
+696.9 23.1
+698.1 37.9
+700.8 116.4
+704.6 40.6
+707.3 46.2
+708.4 317.9
+710.1 127.5
+711.2 16.4
+712.4 22.9
+713.2 79.6
+714.3 17.8
+718.5 6.0
+724.1 9.9
+725.3 97.8
+726.4 28.7
+728.4 117.1
+730.4 849.7
+731.3 647.2
+732.5 121.7
+733.8 28.7
+736.2 10.3
+737.1 220.7
+742.4 278.7
+743.2 177.4
+744.5 109.9
+745.8 60.2
+749.5 77.4
+751.8 29.6
+755.4 56.9
+756.5 24.9
+758.2 31.8
+759.4 15.5
+764.3 31.3
+766.0 32.6
+769.2 10.6
+772.8 140.4
+775.4 51.5
+780.3 61.3
+789.7 51.7
+791.3 60.7
+792.1 41.0
+793.2 51.2
+797.5 32.4
+798.3 121.9
+799.3 76.2
+801.4 1330.6
+803.4 40.5
+806.1 45.3
+808.2 8.3
+809.0 40.3
+811.1 31.6
+817.7 53.4
+819.4 32.9
+825.1 24.8
+830.2 20.4
+833.3 8.7
+836.6 198.8
+838.3 65.9
+839.4 146.9
+840.4 192.6
+841.3 148.4
+842.4 58.7
+843.8 83.0
+846.1 44.7
+846.7 43.5
+848.1 14.5
+848.9 52.1
+853.3 63.6
+857.8 2854.8
+858.6 205.4
+859.5 319.5
+860.4 103.0
+861.5 76.8
+863.0 87.2
+863.6 108.6
+866.0 21.8
+867.1 37.6
+874.2 17.3
+882.2 45.4
+883.2 42.8
+885.3 24.6
+890.7 18.3
+894.4 150.4
+895.5 220.7
+896.4 66.6
+900.5 36.8
+901.9 107.3
+902.5 16.8
+903.4 189.4
+904.4 80.6
+905.6 28.3
+915.2 24.0
+919.5 25.3
+920.3 48.4
+922.5 416.1
+923.2 17.0
+926.1 139.9
+927.1 16.3
+927.9 40.4
+929.9 9.9
+938.4 137.6
+939.3 226.0
+941.3 47.4
+943.6 21.5
+945.6 18.0
+948.4 53.2
+949.4 61.4
+951.6 72.4
+956.2 698.8
+957.0 337.2
+957.7 29.3
+958.5 90.5
+964.3 43.7
+967.0 96.3
+968.5 35.3
+972.6 10.5
+973.8 143.8
+974.5 285.9
+975.4 461.6
+976.6 162.2
+977.7 28.3
+983.6 8.2
+984.3 13.3
+986.9 13.1
+990.7 47.2
+993.3 102.3
+999.2 22.6
+1008.4 103.6
+1009.4 116.8
+1010.3 34.4
+1011.5 24.3
+1014.6 22.7
+1017.1 43.9
+1022.7 58.2
+1023.4 27.6
+1027.2 278.4
+1028.0 296.5
+1029.3 74.9
+1030.2 15.9
+1032.4 53.9
+1041.4 22.2
+1043.8 73.3
+1044.8 65.2
+1047.3 139.8
+1048.5 57.2
+1056.0 58.2
+1057.4 29.8
+1062.7 32.7
+1073.4 323.5
+1074.5 182.8
+1076.7 24.4
+1082.5 12.8
+1087.4 30.7
+1090.6 39.2
+1102.8 47.7
+1108.5 40.8
+1126.1 102.3
+1128.0 74.1
+1129.8 61.1
+1137.0 23.5
+1138.4 85.2
+1139.1 14.2
+1155.4 657.0
+1156.3 253.7
+1157.5 93.6
+1158.6 54.5
+1165.4 17.3
+1168.2 39.0
+1173.3 25.2
+1186.4 29.4
+1187.6 82.3
+1188.6 32.1
+1189.6 48.9
+1198.9 31.6
+1231.5 80.3
+1302.6 46.3
+S	122	122	760.22
+I	ID	85
+I	RTime	3.9752
+Z	1	760.22
+236.0 1.2
+249.1 10.3
+249.9 4.4
+264.8 1.8
+266.3 1.2
+267.0 1.2
+269.1 3.7
+281.0 56.7
+282.1 18.1
+283.2 37.5
+284.8 5.4
+287.1 2.0
+293.3 2.7
+298.8 22.7
+299.8 5.5
+300.9 8.0
+319.4 1.5
+325.2 2.0
+328.2 2.4
+330.2 3.2
+332.4 1.7
+336.3 3.2
+341.1 21.2
+341.9 5.0
+343.1 6.3
+344.3 1.2
+346.1 1.7
+355.2 8.5
+356.0 5.8
+357.3 5.8
+359.7 1.8
+360.7 6.3
+370.9 8.8
+373.1 1.2
+403.3 1.7
+415.2 2.0
+416.8 8.8
+429.1 14.5
+430.0 14.0
+430.9 13.8
+445.5 2.0
+446.3 1.7
+447.0 3.4
+482.6 3.5
+498.3 2.0
+499.7 2.4
+502.9 4.1
+503.9 5.3
+504.9 11.5
+516.6 4.5
+517.3 1.8
+518.6 2.2
+523.3 3.7
+527.4 3.9
+532.6 1.8
+546.3 1.6
+560.4 1.8
+570.6 4.0
+585.5 4.0
+596.3 0.8
+597.3 2.0
+614.4 3.2
+632.1 14.1
+645.4 1.3
+646.3 2.2
+655.3 5.8
+663.0 2.2
+670.3 6.5
+678.2 1.2
+691.6 2.7
+702.5 4.5
+707.9 8.8
+713.5 2.5
+714.3 3.4
+715.8 2.9
+717.9 3.5
+720.6 7.3
+723.7 5.0
+725.9 2.2
+741.4 3.5
+742.2 4.5
+S	123	123	565.03
+Z	2	1129.05
+165.2 3.9
+175.1 8.5
+182.0 105.6
+189.2 28.8
+201.2 19.1
+211.9 11.2
+230.0 7.5
+232.1 4.1
+234.2 5.7
+240.1 6.0
+243.1 12.2
+245.3 6.3
+252.3 9.1
+257.1 10.9
+258.2 22.3
+260.1 4.2
+266.5 10.6
+268.1 40.8
+269.1 19.3
+270.1 31.6
+271.2 35.1
+275.2 48.8
+278.3 14.7
+283.9 9.1
+285.2 7.5
+286.2 12.4
+287.2 33.2
+288.0 81.6
+289.2 11.8
+291.1 7.1
+295.3 71.4
+296.3 70.3
+298.0 6.7
+299.9 31.1
+303.3 124.6
+304.2 19.9
+310.2 37.6
+315.6 37.4
+316.4 17.1
+317.4 7.8
+327.3 11.2
+328.0 5.3
+331.2 25.6
+337.3 25.8
+340.2 8.3
+341.0 18.8
+344.4 27.4
+345.3 126.2
+346.4 6.9
+351.5 14.4
+353.8 12.7
+355.1 9.0
+356.5 25.2
+357.4 34.5
+363.2 204.1
+365.2 29.0
+374.8 31.0
+379.4 11.5
+380.3 37.1
+383.2 88.1
+384.0 108.7
+384.8 47.2
+399.6 25.6
+400.7 74.1
+403.8 30.6
+408.3 79.3
+409.7 28.5
+410.7 4.6
+412.6 60.3
+413.3 49.7
+415.3 6.1
+416.4 4.0
+418.7 6.9
+422.3 61.2
+426.0 11.2
+427.3 47.7
+428.3 15.6
+429.4 12.0
+431.4 6.1
+434.4 14.4
+435.4 9.2
+436.1 48.5
+437.0 27.2
+438.1 27.2
+439.9 27.0
+442.6 92.4
+443.6 40.8
+448.0 13.1
+449.5 30.7
+450.7 69.7
+451.4 200.5
+452.4 23.2
+455.4 23.3
+456.2 140.9
+457.3 103.6
+460.4 121.1
+461.3 61.2
+463.5 4825.2
+464.3 493.3
+465.2 63.0
+466.1 48.0
+468.5 78.9
+474.6 572.4
+475.4 34.9
+476.8 37.7
+477.4 34.9
+478.2 1607.0
+480.2 8.4
+481.2 24.7
+482.0 17.3
+484.2 37.6
+485.5 27.4
+486.3 11.2
+487.8 21.4
+491.3 39.6
+494.9 47.9
+496.2 48.3
+498.0 40.1
+501.4 12.9
+503.4 79.9
+504.5 12.7
+506.7 18.8
+509.7 70.1
+511.3 23.5
+513.3 22.7
+514.0 171.3
+514.9 102.7
+517.9 69.1
+520.0 64.2
+521.2 4.9
+521.9 4.5
+523.0 5.0
+525.0 67.5
+526.7 57.2
+527.7 16.2
+531.1 35.2
+533.3 68.1
+537.2 19.4
+538.6 285.2
+539.3 77.2
+541.3 102.1
+542.1 7.2
+543.4 46.0
+544.4 53.7
+545.2 66.8
+546.6 424.8
+547.7 42.5
+548.7 82.3
+549.9 168.9
+551.5 35.9
+552.9 124.1
+556.0 967.1
+557.0 27.1
+558.0 85.9
+573.6 96.7
+579.0 33.7
+579.7 62.0
+585.3 36.1
+587.5 6.0
+590.1 14.8
+591.5 11.4
+592.9 30.3
+595.7 97.6
+596.5 60.1
+598.5 178.6
+599.4 71.2
+600.4 22.1
+607.0 11.7
+608.3 37.7
+620.0 67.9
+623.6 30.5
+624.3 47.6
+625.4 3.4
+632.3 27.1
+635.4 36.6
+640.4 125.1
+641.0 27.4
+642.5 106.9
+643.4 114.1
+645.3 504.6
+646.2 142.3
+646.9 188.5
+648.2 60.5
+648.9 59.0
+650.3 5.8
+651.3 8.2
+653.7 125.8
+660.2 55.6
+661.3 24.0
+662.6 63.5
+663.3 11.6
+669.7 47.7
+670.4 23.8
+671.5 50.9
+676.4 16.8
+678.8 244.0
+679.8 62.7
+680.5 77.6
+681.7 24.1
+688.3 56.2
+690.3 74.1
+691.8 136.6
+694.6 2062.1
+695.5 181.6
+696.4 37.0
+701.7 2.6
+703.3 48.9
+705.5 39.2
+707.8 58.1
+708.4 16.7
+711.0 36.2
+713.7 24.8
+715.1 15.0
+715.7 22.2
+716.4 29.5
+718.5 39.8
+719.8 20.6
+721.9 130.0
+723.7 30.5
+724.5 44.4
+727.3 35.5
+729.9 35.7
+730.7 7.6
+742.1 14.7
+743.3 69.9
+747.9 22.9
+749.2 33.2
+752.1 64.7
+759.6 66.5
+766.4 992.2
+767.4 402.5
+768.3 70.1
+769.6 10.9
+773.7 103.3
+775.5 21.9
+776.5 6.7
+779.0 46.5
+779.9 78.0
+781.3 32.0
+785.1 37.2
+786.6 46.3
+791.3 37.7
+795.6 15.1
+797.6 4.4
+799.4 10.1
+800.5 11.7
+801.5 7.2
+812.5 12.2
+813.3 42.9
+816.9 14.4
+823.4 1080.3
+824.5 510.0
+825.5 87.9
+834.3 231.2
+835.4 189.4
+836.5 11.0
+842.4 11.3
+846.0 8.4
+846.9 20.0
+865.4 7.3
+875.1 22.3
+878.6 84.0
+883.5 9.2
+893.3 13.0
+912.0 45.8
+913.5 13.0
+921.4 3.7
+945.7 35.1
+947.4 543.1
+948.5 424.1
+949.7 90.5
+954.4 232.8
+955.5 45.4
+984.2 22.4
+1010.5 4.1
+1013.6 15.2
+1016.2 21.6
+1017.3 4.9
+1018.8 60.8
+1057.7 8.7
+1142.0 28.4
+S	124	124	495.06
+I	ID	196
+I	RTime	9.6932
+Z	2	989.11
+147.1 2.5
+166.1 1.2
+167.1 1.3
+170.7 2.0
+173.0 1.2
+175.2 2.0
+183.0 2.0
+207.2 15.3
+208.1 3.2
+213.1 2.7
+218.4 2.7
+220.4 1.2
+222.1 1.5
+226.2 1.7
+235.2 13.6
+238.4 2.7
+239.3 2.2
+240.4 4.6
+246.2 3.9
+251.1 1.0
+253.9 2.4
+255.1 1.0
+256.4 2.2
+257.1 1.2
+259.0 260.0
+261.1 3.9
+262.3 5.1
+267.3 1.5
+275.3 8.3
+280.2 2.0
+290.3 1.2
+299.6 7.4
+305.2 5.0
+307.0 3.2
+314.2 1.6
+315.4 1.3
+332.1 1.7
+332.8 3.5
+334.2 1.3
+337.9 2.0
+344.4 1.5
+347.4 1.8
+348.8 8.0
+349.7 2.5
+358.0 1.8
+361.1 3.2
+362.3 2.7
+366.6 2.4
+371.3 3.7
+372.3 1.7
+373.5 2.0
+375.4 2.0
+377.3 5.6
+380.3 4.0
+386.6 8.6
+387.2 1.2
+388.8 10.1
+389.7 3.2
+395.4 3.7
+402.1 2.5
+402.9 1.3
+407.2 2.0
+408.8 4.0
+410.8 10.8
+428.1 6.8
+431.1 15.0
+437.6 3.7
+443.3 1.7
+446.1 2.7
+451.3 8.0
+452.3 9.8
+453.5 9.6
+455.3 2.2
+458.6 4.0
+459.4 3.2
+460.2 6.6
+463.4 3.9
+469.8 5.3
+472.3 3.4
+476.3 56.9
+477.1 42.9
+478.1 22.3
+485.6 235.0
+486.4 143.3
+487.4 16.1
+508.2 1.8
+519.4 7.8
+522.4 5.0
+533.1 6.5
+534.3 5.6
+537.3 3.5
+540.6 2.9
+548.4 1.1
+554.1 2.5
+557.2 1.2
+563.7 2.2
+568.2 1.2
+569.4 1.3
+571.3 5.8
+572.4 7.4
+575.8 5.3
+581.2 7.5
+582.3 7.0
+583.1 2.9
+590.4 6.6
+600.2 4.5
+601.0 2.0
+603.4 1.1
+614.4 8.3
+615.4 10.8
+620.2 3.5
+647.8 5.5
+656.4 1.7
+662.4 1.6
+664.5 2.0
+665.5 3.7
+666.4 2.4
+676.4 1.1
+681.0 1.7
+682.5 17.2
+683.7 20.7
+685.0 3.7
+686.4 2.0
+697.6 4.5
+699.5 4.5
+700.6 5.3
+701.3 2.0
+704.4 4.8
+705.6 3.5
+711.4 3.4
+715.3 12.1
+716.3 2.2
+735.4 1.5
+736.4 1.7
+744.4 1.3
+749.3 1.3
+753.4 21.5
+754.4 25.1
+755.4 18.8
+761.6 1.3
+772.1 2.4
+776.6 1.8
+815.8 1.2
+816.5 3.0
+820.5 3.0
+823.6 2.5
+824.6 1.7
+832.7 3.4
+841.5 1.6
+842.5 1.8
+850.3 7.0
+851.5 11.1
+852.6 2.0
+858.7 4.1
+859.7 3.4
+860.7 2.4
+861.6 1.5
+928.7 5.1
+S	125	125	805.00
+I	ID	216
+I	RTime	10.6675
+Z	1	805.00
+240.1 1.8
+245.3 1.2
+258.2 1.5
+261.4 1.3
+278.7 1.3
+281.3 1.8
+287.2 1.2
+292.2 3.2
+297.3 1.8
+299.1 1.2
+310.1 0.6
+311.0 3.7
+319.2 2.4
+327.1 5.5
+332.0 2.0
+338.5 1.8
+340.0 2.7
+341.9 1.0
+345.4 2.9
+346.0 2.5
+349.0 1.8
+367.5 3.2
+369.2 2.5
+378.2 1.3
+381.3 7.3
+396.6 1.7
+399.3 2.7
+402.3 9.6
+404.4 2.2
+417.4 8.3
+423.4 5.4
+425.4 3.0
+429.4 4.0
+434.4 1.3
+448.7 0.8
+453.5 5.9
+480.7 2.4
+481.9 5.4
+483.9 6.5
+485.2 1.1
+489.2 1.7
+490.4 1.5
+495.0 2.0
+512.3 5.6
+513.3 1.7
+514.5 1.1
+516.2 4.1
+517.3 4.5
+519.4 4.1
+530.4 4.6
+531.4 2.2
+533.5 3.7
+536.0 4.4
+537.0 3.7
+538.2 2.7
+547.5 3.7
+551.3 6.5
+553.5 2.5
+557.2 1.2
+559.6 7.1
+568.4 3.5
+569.4 4.8
+570.4 1.7
+575.2 2.0
+583.4 3.5
+587.3 2.0
+588.1 3.7
+589.6 4.5
+590.5 28.1
+591.4 3.0
+598.4 3.2
+610.9 7.3
+615.1 1.8
+622.5 2.4
+640.4 2.0
+642.3 3.7
+646.6 14.8
+655.4 6.0
+659.3 1.1
+669.7 1.6
+675.4 3.0
+676.5 1.5
+677.4 9.0
+681.6 5.5
+696.2 11.3
+714.3 3.2
+723.4 20.3
+724.1 14.5
+726.7 11.5
+731.7 21.1
+732.5 5.0
+740.1 1.3
+743.4 1.5
+747.1 1.2
+751.6 8.8
+752.4 1.2
+755.3 3.7
+762.3 3.7
+771.8 5.1
+774.4 2.4
+786.2 5.3
+787.3 45.5
+788.5 8.3
+795.9 4.5
+S	126	126	745.26
+Z	2	1489.51
+217.3 4.3
+230.2 4.4
+233.1 8.2
+234.2 28.5
+235.1 93.9
+242.0 7.5
+243.0 42.2
+245.2 34.0
+246.1 16.3
+249.3 4.9
+250.2 4.2
+253.2 4.8
+256.5 13.4
+259.2 4.1
+260.4 25.9
+261.2 3.4
+262.4 33.7
+263.2 27.2
+264.0 20.2
+267.6 4.9
+270.2 20.2
+271.4 4.2
+272.3 18.0
+275.1 6.2
+276.2 32.8
+280.4 17.0
+281.2 18.4
+282.2 29.2
+284.2 31.1
+285.2 12.9
+286.3 12.7
+288.3 16.3
+289.1 22.8
+292.1 43.4
+300.3 10.6
+302.4 25.2
+303.3 2.6
+304.1 4.2
+312.2 12.2
+315.1 13.9
+316.3 56.7
+317.2 107.9
+318.6 6.3
+326.4 7.3
+327.2 6.9
+329.1 5.3
+330.2 15.8
+338.0 11.7
+344.2 17.4
+349.3 31.6
+352.4 13.7
+354.4 7.7
+356.7 19.9
+357.4 43.4
+358.2 58.8
+363.3 58.5
+364.2 11.3
+367.4 20.0
+373.2 3.5
+374.4 35.8
+375.3 216.4
+376.5 9.9
+379.3 7.9
+381.0 20.4
+382.6 11.6
+385.3 47.8
+387.4 13.4
+389.4 59.9
+390.7 48.1
+391.3 106.5
+392.4 22.8
+393.1 29.4
+395.3 40.3
+396.8 12.8
+399.4 7.7
+401.2 11.2
+402.3 42.2
+403.2 73.6
+404.3 25.2
+407.5 12.3
+412.9 50.1
+416.3 195.4
+421.2 41.0
+422.2 34.0
+423.7 7.4
+425.4 8.2
+426.9 49.5
+427.8 50.3
+430.6 19.8
+431.3 18.9
+432.3 10.8
+438.4 13.4
+444.3 25.9
+445.9 26.4
+453.3 4.8
+456.2 43.1
+457.3 25.9
+459.2 63.5
+461.4 12.2
+470.3 6.6
+473.4 38.0
+474.4 78.9
+476.0 56.8
+477.3 66.0
+479.2 15.7
+482.4 11.8
+484.0 35.1
+486.0 15.3
+487.3 68.7
+488.3 81.2
+489.4 102.3
+490.3 38.6
+491.3 43.2
+492.4 22.4
+497.4 7.2
+498.9 10.1
+500.2 33.5
+501.1 95.4
+502.2 105.6
+504.1 141.8
+505.1 62.9
+506.4 15.5
+508.5 45.5
+509.3 23.2
+511.6 12.8
+512.4 5.1
+515.2 10.3
+523.2 50.0
+524.2 55.3
+525.4 100.3
+527.3 30.4
+530.4 33.5
+532.9 6.0
+533.6 10.1
+534.5 194.7
+538.2 40.2
+540.1 3.4
+542.1 5.2
+544.4 216.8
+545.5 55.9
+548.0 49.2
+548.9 6.0
+550.0 80.8
+551.5 53.0
+552.4 6.6
+553.7 117.1
+554.9 74.3
+555.6 9.1
+556.8 47.3
+558.0 122.9
+559.3 9.7
+563.1 58.0
+565.0 26.4
+567.6 79.0
+570.5 8.9
+572.5 105.1
+573.4 141.0
+574.4 140.6
+575.1 18.8
+576.9 25.9
+578.1 170.6
+580.7 25.8
+584.6 29.0
+586.2 5.1
+587.2 42.8
+588.3 58.5
+590.4 55.0
+591.4 41.1
+592.3 15.7
+594.4 24.5
+596.0 26.7
+597.6 68.1
+599.5 27.8
+600.3 19.8
+601.4 242.3
+602.3 41.7
+603.2 48.2
+605.4 187.4
+606.3 23.0
+607.1 44.7
+608.1 22.6
+609.1 67.3
+611.1 30.2
+612.4 37.9
+614.8 49.2
+616.0 59.6
+618.5 207.2
+619.6 41.6
+620.8 42.6
+622.4 10.3
+624.6 718.7
+626.0 208.7
+627.9 65.0
+628.5 6.6
+630.6 23.5
+631.7 15.4
+634.0 37.4
+634.9 10.9
+636.4 25.1
+637.6 14.1
+638.3 69.1
+639.7 66.3
+642.0 15.5
+644.4 48.7
+645.1 4.6
+646.6 52.5
+647.2 18.8
+648.2 29.5
+651.2 6.2
+652.4 557.9
+653.3 14.9
+654.2 17.5
+655.0 40.8
+656.8 70.9
+657.9 667.2
+658.6 401.0
+659.9 221.2
+660.8 167.8
+661.7 35.4
+663.3 8.2
+664.9 71.3
+666.7 14.0
+668.5 120.1
+669.4 72.9
+671.6 83.6
+672.4 146.8
+673.1 34.7
+674.0 49.2
+675.2 19.3
+676.6 209.2
+677.3 429.2
+679.0 49.8
+679.8 30.0
+681.5 30.4
+682.8 176.7
+683.7 33.5
+684.5 28.5
+686.3 449.7
+687.4 93.5
+688.9 130.1
+690.1 82.4
+691.6 162.2
+693.0 124.8
+693.7 108.4
+694.3 8.9
+695.1 78.2
+696.5 78.8
+697.7 156.4
+698.8 36.9
+699.9 60.7
+701.7 149.6
+702.4 32.4
+704.3 246.0
+705.6 322.2
+706.6 29.9
+707.7 76.6
+708.5 36.1
+709.4 33.7
+710.5 81.8
+711.4 86.7
+712.2 19.7
+714.3 63.1
+715.4 46.6
+716.8 234.9
+718.2 216.6
+719.4 89.3
+720.3 201.6
+722.9 193.8
+723.5 89.4
+724.2 111.6
+725.1 166.5
+726.1 235.7
+727.3 95.5
+728.3 129.2
+728.9 135.7
+730.2 156.6
+731.6 98.7
+732.5 575.2
+733.6 73.9
+734.2 172.3
+735.3 342.8
+736.4 355.4
+737.1 21.6
+746.9 22.7
+751.4 14.4
+752.4 22.9
+754.8 15.6
+756.1 36.8
+757.4 38.5
+758.6 38.1
+760.6 27.1
+761.6 9.6
+762.9 23.0
+764.2 135.7
+765.4 79.0
+766.5 13.2
+768.2 56.2
+769.3 26.7
+770.1 25.0
+771.4 33.2
+772.8 70.1
+773.7 1139.3
+774.6 120.3
+775.5 23.0
+777.3 14.0
+778.6 31.0
+779.9 84.1
+780.9 36.1
+781.6 31.2
+782.5 53.7
+783.3 74.6
+784.4 10.4
+786.5 670.9
+787.5 151.9
+789.9 59.3
+792.3 59.5
+793.3 11.6
+794.5 7.9
+796.3 21.0
+797.0 34.0
+797.7 84.8
+798.4 61.4
+799.6 42.2
+801.0 68.2
+802.3 736.3
+803.1 40.0
+804.1 7.4
+805.4 15.0
+806.7 117.0
+807.6 54.4
+809.2 3072.5
+810.3 261.7
+811.6 168.3
+812.7 76.8
+814.3 99.7
+815.5 201.5
+816.4 382.8
+818.0 173.2
+819.2 176.4
+820.4 158.7
+821.5 71.4
+824.3 90.6
+824.9 11.3
+825.7 75.5
+826.7 30.1
+828.8 63.3
+829.9 100.1
+830.8 104.5
+831.5 22.5
+833.1 115.8
+833.8 151.0
+834.9 230.9
+835.7 63.1
+836.9 33.6
+837.6 120.3
+839.0 14.8
+839.8 14.8
+841.5 1.7
+842.5 3.9
+844.1 12.0
+844.9 32.3
+845.6 24.4
+846.9 14.5
+847.6 51.2
+848.7 67.2
+850.0 55.1
+851.8 42.3
+853.0 84.4
+854.4 165.4
+856.0 89.2
+856.8 30.3
+857.8 10.7
+858.6 31.4
+859.6 41.4
+860.6 102.3
+861.4 25.9
+862.2 57.0
+863.0 76.3
+864.8 85.4
+865.5 187.0
+866.2 396.8
+868.3 25.9
+870.0 40.5
+871.7 439.4
+872.8 117.2
+873.6 61.9
+874.9 68.4
+875.5 31.8
+876.2 109.0
+877.5 39.8
+878.6 23.0
+879.7 201.8
+880.3 26.1
+881.1 9.0
+882.3 77.5
+883.2 83.3
+884.1 85.0
+885.5 210.7
+886.6 15.4
+888.0 23.8
+890.5 161.8
+891.6 125.6
+893.3 141.2
+894.7 137.7
+895.7 663.8
+896.6 232.7
+898.8 212.6
+899.8 312.1
+901.4 25.1
+902.0 29.2
+902.7 20.8
+903.8 73.0
+905.1 106.2
+907.6 72.7
+909.9 24.1
+910.7 21.6
+911.7 66.4
+913.0 127.4
+914.2 15.0
+915.7 32.6
+917.2 23.2
+918.0 33.8
+919.6 45.3
+920.9 155.3
+921.8 379.7
+922.5 913.9
+923.2 845.7
+924.3 91.2
+925.0 110.8
+926.0 39.5
+927.1 159.4
+928.2 90.6
+929.4 149.5
+930.2 35.9
+931.4 39.2
+932.6 162.9
+933.8 19.0
+934.5 36.2
+936.2 182.3
+937.8 47.6
+938.5 59.3
+940.7 83.7
+942.0 71.3
+943.3 54.6
+944.3 66.8
+946.3 230.0
+947.3 16.5
+948.5 137.1
+950.5 15.4
+952.6 225.2
+953.5 212.2
+955.3 59.3
+958.2 91.5
+958.9 44.2
+962.4 69.7
+963.3 15.1
+964.4 24.5
+965.5 62.9
+966.1 67.3
+967.3 8.8
+969.0 111.8
+969.9 23.1
+971.6 119.0
+972.9 11.2
+975.4 32.4
+978.3 674.2
+979.1 79.2
+980.9 26.8
+982.4 58.7
+983.3 9.2
+984.6 18.9
+986.8 2757.4
+987.7 255.6
+988.5 36.9
+991.3 15.3
+992.6 48.9
+994.5 140.0
+995.5 186.7
+996.4 33.5
+998.3 38.1
+1002.1 38.7
+1004.0 111.5
+1005.8 23.0
+1007.1 8.4
+1008.5 34.9
+1009.3 14.3
+1011.7 34.8
+1014.2 40.0
+1014.9 148.6
+1015.6 23.5
+1017.8 34.3
+1018.5 28.5
+1019.5 41.6
+1020.6 9.2
+1023.4 21.5
+1025.6 41.6
+1029.9 28.3
+1031.1 16.2
+1036.1 32.8
+1037.9 17.4
+1038.8 170.1
+1039.6 40.6
+1040.5 36.6
+1041.8 166.8
+1043.0 88.3
+1044.4 18.4
+1045.6 7.1
+1046.7 3.4
+1048.5 68.0
+1049.8 44.7
+1051.0 100.5
+1051.8 47.1
+1054.4 14.9
+1055.7 79.5
+1056.7 52.2
+1057.6 28.2
+1058.7 60.7
+1060.6 55.7
+1061.9 30.7
+1064.2 11.6
+1065.8 9.6
+1066.4 14.3
+1067.6 406.2
+1068.7 327.1
+1069.7 18.3
+1071.6 39.5
+1074.2 115.0
+1074.8 88.5
+1075.9 6.6
+1076.5 25.2
+1077.5 10.4
+1086.4 29.0
+1088.7 52.6
+1089.5 13.6
+1090.9 10.4
+1096.0 52.4
+1096.8 58.5
+1097.7 89.4
+1098.7 32.1
+1104.5 30.1
+1105.5 27.6
+1106.7 65.3
+1110.4 20.1
+1111.6 17.5
+1112.9 65.3
+1113.7 4.8
+1115.6 210.4
+1116.6 122.6
+1117.4 78.8
+1118.0 27.1
+1122.9 3.7
+1124.6 44.7
+1125.8 58.3
+1129.5 29.5
+1131.9 19.3
+1133.5 7.4
+1134.5 6.5
+1140.4 28.3
+1144.7 16.1
+1145.5 9.3
+1148.6 22.3
+1149.8 61.7
+1154.6 252.9
+1155.7 226.2
+1156.5 61.6
+1157.9 88.0
+1159.5 8.4
+1164.4 25.8
+1170.6 8.2
+1172.9 27.8
+1173.6 218.4
+1174.6 47.5
+1175.4 15.3
+1177.1 7.5
+1180.5 13.5
+1187.6 25.5
+1191.7 5.0
+1193.7 32.1
+1200.9 44.0
+1202.0 12.1
+1203.1 27.2
+1203.8 12.7
+1205.6 5.6
+1206.4 13.5
+1209.7 16.7
+1210.4 3.1
+1211.7 23.8
+1212.5 68.8
+1214.1 9.1
+1219.8 5.3
+1225.3 54.8
+1226.0 13.8
+1226.8 7.2
+1228.7 216.5
+1230.2 370.0
+1231.2 129.0
+1232.5 13.0
+1237.7 29.7
+1239.4 115.4
+1240.5 41.5
+1243.7 46.8
+1245.0 36.3
+1253.5 55.8
+1256.1 21.7
+1258.5 8.9
+1263.8 10.6
+1274.2 19.4
+1277.7 23.9
+1279.5 21.9
+1286.8 12.5
+1296.5 19.4
+1298.9 12.0
+1317.8 12.0
+1323.2 38.9
+1326.7 74.8
+1338.8 14.2
+1341.2 35.3
+1341.8 45.4
+1343.0 121.5
+1343.7 353.1
+1344.6 46.6
+1347.8 8.0
+1356.3 18.1
+1358.3 17.4
+1365.2 8.9
+1365.8 17.3
+1401.7 8.6
+1426.9 7.7
+1437.8 26.5
+S	127	127	474.74
+I	ID	75
+I	RTime	3.4728
+Z	2	948.47
+139.2 3.0
+141.2 1.6
+144.3 1.0
+155.2 3.2
+155.8 2.2
+158.2 3.4
+164.2 2.0
+165.1 1.2
+167.2 2.7
+168.1 1.0
+169.2 1.0
+171.2 1.1
+173.1 12.6
+175.2 12.6
+176.1 2.0
+178.2 1.2
+180.3 1.6
+182.1 1.7
+191.3 1.3
+193.3 3.2
+194.5 1.1
+195.2 3.0
+196.3 1.7
+198.1 30.2
+199.2 12.1
+200.1 3.7
+201.1 8.6
+212.1 0.6
+213.0 0.8
+216.1 78.0
+217.2 4.6
+217.9 1.2
+223.2 3.4
+224.3 2.2
+226.1 4.3
+227.2 3.4
+228.1 3.9
+231.2 1.5
+232.6 2.5
+234.4 1.8
+237.9 2.4
+238.7 4.5
+240.5 1.6
+243.2 1.8
+245.0 8.5
+248.2 5.8
+250.4 3.2
+251.2 2.7
+252.3 8.6
+253.3 0.8
+257.3 2.0
+258.4 1.8
+259.1 3.0
+260.2 6.6
+262.3 2.7
+264.9 1.0
+268.0 1.0
+269.1 32.2
+275.3 2.7
+276.2 2.7
+281.4 1.2
+282.2 1.6
+285.4 2.7
+287.2 24.2
+288.2 2.7
+289.5 3.5
+293.4 2.0
+294.1 1.1
+296.5 4.5
+298.2 2.0
+299.0 2.0
+301.9 6.0
+303.2 5.0
+314.3 12.8
+315.3 5.6
+317.1 3.4
+319.1 3.2
+322.6 3.7
+325.3 0.8
+328.3 1.7
+329.2 1.2
+331.3 4.4
+332.9 1.5
+334.8 12.3
+335.9 2.4
+336.8 3.4
+338.7 8.6
+339.6 1.7
+343.2 2.4
+344.2 1.5
+346.1 18.7
+347.3 18.7
+352.5 5.5
+353.2 3.0
+353.9 7.1
+355.0 1.2
+357.2 4.9
+359.2 2.9
+361.2 5.0
+364.5 4.9
+366.7 13.1
+368.5 2.2
+369.6 1.8
+371.3 5.1
+373.1 10.3
+374.9 0.8
+377.6 4.9
+379.2 1.2
+379.8 5.1
+380.4 2.7
+382.1 2.4
+383.1 0.8
+384.5 1.2
+387.0 1.0
+388.0 8.6
+388.7 2.2
+389.3 7.5
+393.0 4.0
+394.1 1.6
+395.5 13.5
+398.2 23.6
+399.2 6.8
+401.3 3.5
+402.4 2.2
+403.8 1.2
+404.4 44.5
+405.4 12.6
+406.5 18.3
+407.5 12.3
+409.3 3.5
+410.2 5.3
+411.5 2.7
+412.8 3.9
+413.9 26.2
+415.3 6.9
+416.2 13.8
+418.4 14.8
+420.2 3.4
+421.3 18.7
+422.0 13.3
+422.7 10.8
+423.4 29.7
+425.3 7.6
+426.2 16.7
+427.0 1.6
+428.0 11.5
+428.6 26.3
+429.9 3.5
+431.6 18.5
+432.5 4.5
+433.4 8.1
+434.2 37.0
+435.4 17.1
+436.2 10.6
+437.6 14.3
+438.4 4.9
+439.6 25.6
+440.4 2.5
+441.3 11.5
+442.1 3.0
+443.1 16.3
+444.0 5.0
+444.7 6.0
+445.6 12.1
+446.6 8.6
+447.7 13.5
+448.6 1.7
+450.3 10.1
+451.8 8.3
+452.9 13.3
+454.0 21.5
+455.0 17.1
+456.4 70.0
+457.3 62.0
+458.1 54.2
+459.1 12.8
+460.5 11.1
+462.5 50.5
+463.2 3.5
+464.3 2.7
+465.6 202.3
+466.4 83.4
+468.4 13.1
+473.3 1.5
+474.7 4.8
+475.4 2.7
+487.6 2.0
+490.4 5.9
+491.3 2.0
+492.3 3.7
+499.2 3.0
+502.4 1.2
+503.9 13.8
+504.8 13.3
+506.4 7.1
+509.5 12.6
+510.4 6.5
+511.7 7.0
+513.0 2.7
+516.4 2.7
+517.2 2.4
+520.3 1.3
+525.5 37.5
+527.1 1.3
+528.2 10.3
+528.8 1.0
+530.5 1.3
+533.3 85.5
+533.9 9.8
+534.5 6.5
+537.0 20.2
+539.3 4.6
+543.4 0.8
+544.1 1.2
+545.3 4.5
+547.4 9.8
+553.5 106.0
+554.2 22.3
+555.4 1.5
+556.7 1.7
+558.5 6.0
+559.2 6.3
+560.3 1.3
+567.4 3.5
+568.1 3.5
+572.9 9.1
+575.6 3.2
+577.5 2.7
+578.9 15.1
+579.6 2.0
+582.3 1.3
+584.4 4.3
+588.9 4.5
+592.2 4.5
+595.9 1.2
+597.2 4.3
+600.3 2.0
+601.2 5.9
+602.0 12.0
+604.0 4.5
+609.4 3.2
+610.0 9.1
+611.1 120.4
+612.0 25.8
+612.7 4.9
+617.4 2.2
+618.6 2.7
+630.0 2.5
+632.1 6.8
+632.7 2.2
+633.5 2.4
+635.4 1.2
+637.6 3.5
+639.1 6.5
+644.0 4.1
+644.7 2.7
+645.4 10.5
+646.2 17.1
+648.4 16.2
+649.2 1.8
+651.3 0.8
+653.2 1.8
+655.3 2.0
+660.3 2.5
+662.3 128.1
+663.4 39.0
+667.5 9.5
+670.3 2.2
+672.6 1.5
+674.0 1.2
+676.5 1.7
+677.5 5.3
+684.5 2.0
+686.3 4.5
+688.5 0.8
+691.4 2.0
+697.2 2.7
+703.8 2.0
+704.4 1.5
+706.3 4.3
+708.3 1.2
+714.2 6.1
+715.4 11.5
+716.5 10.3
+718.6 3.2
+719.6 7.9
+720.3 2.5
+721.4 1.7
+722.2 3.0
+733.4 503.0
+734.3 217.1
+734.9 0.8
+738.3 10.0
+740.3 2.4
+743.6 3.7
+744.3 2.9
+748.9 3.0
+754.4 9.1
+755.7 2.4
+757.2 4.3
+763.1 1.1
+767.2 3.0
+774.6 16.6
+775.6 11.1
+787.4 0.8
+791.5 12.3
+792.2 1.1
+800.5 2.9
+801.4 1.7
+802.6 5.0
+803.5 1.5
+811.6 1.8
+812.6 2.5
+813.3 1.1
+820.8 2.2
+821.4 1.7
+823.8 1.7
+870.4 2.2
+872.2 1.3
+S	128	128	711.07
+I	ID	228
+I	RTime	11.2717
+Z	1	711.07
+230.3 3.2
+253.5 2.0
+259.3 3.2
+260.3 3.7
+265.3 3.0
+276.4 2.0
+279.0 0.8
+291.0 3.0
+293.0 3.2
+331.4 1.0
+347.2 4.9
+353.1 0.8
+362.8 1.7
+369.5 1.3
+376.8 1.1
+380.3 1.2
+395.7 1.2
+411.1 6.0
+413.1 3.5
+416.1 1.8
+424.2 1.3
+428.3 1.8
+442.3 3.5
+443.6 4.9
+458.5 2.7
+464.3 1.7
+468.3 2.9
+485.5 4.5
+496.4 25.1
+497.1 31.2
+503.0 2.5
+511.3 1.5
+515.3 3.5
+519.6 3.0
+536.2 1.2
+547.4 1.7
+565.2 3.0
+567.5 1.7
+575.3 2.0
+581.3 1.5
+582.3 5.9
+583.2 2.2
+593.0 2.9
+595.9 2.5
+605.8 8.3
+611.1 3.2
+613.3 2.0
+615.4 1.8
+630.3 2.2
+632.1 1.2
+639.3 1.6
+646.6 3.0
+650.5 4.0
+656.6 2.2
+658.8 16.0
+662.9 6.1
+665.5 4.4
+666.4 3.0
+668.6 2.4
+674.6 3.0
+676.5 7.5
+677.1 2.7
+678.2 10.5
+683.5 1.1
+692.0 5.6
+693.2 18.8
+694.2 2.7
+695.3 2.7
+698.6 7.0
+701.8 21.6
+702.6 8.6
+810.5 6.1
+821.5 3.2
+822.4 3.0
+1008.4 1.5
+1036.8 2.0
+1046.4 6.0
+S	129	129	523.29
+I	ID	98
+I	RTime	4.6529
+Z	2	1045.57
+161.0 9.8
+162.1 2.2
+163.0 1.7
+169.3 7.6
+175.2 4.0
+178.1 23.5
+180.1 3.5
+186.0 3.4
+195.0 1.2
+196.1 4.1
+203.3 7.0
+207.3 1.7
+208.2 11.3
+214.1 2.5
+223.1 0.8
+226.1 3.0
+227.3 3.4
+229.0 5.6
+231.3 2.5
+232.2 4.0
+234.2 1.8
+235.2 6.3
+238.0 1.5
+239.3 1.6
+240.1 13.1
+241.1 0.8
+243.0 4.0
+244.2 5.8
+248.3 68.6
+249.1 7.0
+254.0 1.3
+255.2 1.0
+258.3 89.1
+263.2 1.6
+266.3 114.9
+267.4 4.3
+272.1 1.2
+273.2 2.5
+275.3 10.8
+280.3 3.7
+282.2 2.7
+283.2 3.5
+285.2 6.1
+287.1 3.2
+290.1 4.6
+291.2 7.3
+292.2 7.8
+297.2 1.1
+298.2 4.4
+299.3 3.5
+300.0 1.0
+300.9 11.8
+306.1 6.0
+307.3 3.0
+308.3 7.0
+309.2 4.3
+311.5 1.7
+313.2 3.2
+319.3 1.2
+320.4 6.0
+322.5 4.0
+325.0 34.2
+325.9 35.7
+326.9 2.2
+334.4 2.2
+335.5 8.1
+336.4 5.0
+337.6 9.3
+342.9 3.5
+343.9 2.9
+346.3 49.5
+348.1 0.8
+354.1 29.2
+355.3 2.5
+357.2 2.0
+357.9 2.2
+359.4 6.0
+362.0 1.5
+363.7 4.1
+364.5 1.0
+367.2 2.0
+368.4 1.1
+371.1 6.6
+372.0 19.3
+373.0 2.0
+376.5 8.8
+377.3 9.8
+378.3 8.3
+385.8 4.5
+387.0 43.5
+391.2 2.9
+392.8 5.0
+393.4 2.0
+394.3 1.0
+395.2 16.5
+396.3 19.7
+400.0 2.0
+401.3 27.1
+406.3 2.0
+407.4 0.8
+408.3 13.6
+409.2 7.0
+410.6 3.0
+415.5 3.7
+416.2 1.3
+417.4 15.1
+418.2 90.5
+418.9 1.3
+420.1 1.0
+423.8 9.8
+427.3 4.0
+432.3 8.6
+436.5 1.8
+441.8 4.5
+447.3 2.5
+449.3 13.0
+452.6 3.2
+454.6 24.2
+455.3 13.3
+458.9 12.1
+459.8 7.6
+461.4 7.0
+463.2 16.5
+466.1 11.3
+467.1 3.9
+470.4 7.6
+473.4 3.4
+474.3 1.3
+476.0 1.6
+477.2 20.7
+478.4 2.0
+479.4 3.5
+480.1 1.6
+481.0 2.7
+485.5 2.7
+487.0 11.1
+487.8 65.3
+489.2 14.0
+490.1 11.1
+491.3 7.1
+492.4 8.6
+493.3 4.6
+494.2 7.5
+496.1 1.6
+499.8 5.1
+501.5 9.0
+504.0 7.3
+505.3 124.6
+506.2 61.5
+507.5 18.5
+508.4 8.3
+511.7 6.8
+513.9 32.2
+514.8 37.4
+554.7 1.1
+556.5 1.5
+562.0 2.0
+577.9 4.4
+596.4 2.7
+614.4 2.0
+656.6 0.8
+670.1 2.7
+671.6 5.9
+674.3 107.3
+675.3 40.0
+685.4 1.0
+710.6 4.8
+711.6 1.6
+713.3 3.2
+715.8 4.1
+717.3 2.7
+719.5 29.5
+720.7 9.6
+745.5 4.3
+746.5 3.2
+751.3 5.0
+762.5 1.2
+770.6 3.2
+772.3 1.2
+787.8 5.4
+789.6 4.1
+796.7 1.7
+808.6 3.5
+817.5 3.2
+855.9 2.7
+870.5 2.2
+897.6 3.4
+899.4 1.2
+900.6 4.0
+907.8 1.5
+910.2 1.5
+918.4 3.4
+1022.5 2.7
+S	130	130	733.03
+Z	2	1465.05
+209.0 100.8
+212.3 14.6
+213.1 16.2
+214.8 11.9
+216.2 150.7
+217.1 3.3
+218.5 34.0
+219.4 4.9
+220.3 128.9
+221.4 47.8
+226.2 849.1
+227.3 348.1
+228.3 23.5
+229.2 48.1
+231.2 5.5
+237.1 12.1
+238.3 600.6
+239.3 83.0
+244.2 2316.2
+245.2 152.8
+246.3 8.4
+247.3 16.3
+248.5 19.4
+249.4 11.0
+250.3 10.7
+251.3 32.7
+255.2 110.0
+256.3 26.5
+258.5 10.0
+260.0 7.0
+261.3 14.0
+262.2 54.6
+263.3 18.2
+264.6 12.0
+265.4 12.6
+266.3 13.0
+268.3 29.1
+269.6 11.9
+270.2 18.7
+271.9 5.6
+273.3 40.8
+274.6 3.0
+276.4 79.8
+279.2 43.4
+280.4 153.9
+281.4 43.6
+282.2 9.7
+284.4 179.5
+285.2 56.5
+286.4 27.3
+288.3 16.8
+290.4 83.5
+291.0 20.0
+292.3 5.9
+293.3 7.0
+294.4 630.3
+295.4 160.6
+296.5 42.5
+297.3 23.3
+298.3 143.6
+299.5 57.3
+301.4 12.3
+302.4 16.1
+304.5 16.1
+305.6 41.1
+307.1 4.5
+308.3 573.8
+309.4 117.0
+310.2 25.2
+312.3 13.9
+313.5 43.6
+314.5 26.0
+315.3 119.1
+316.3 29.8
+317.2 29.5
+322.6 19.8
+323.5 13.1
+324.6 42.8
+325.4 444.1
+326.3 536.0
+327.2 97.1
+328.0 16.1
+330.4 36.9
+331.3 9.3
+332.5 9.7
+339.0 46.2
+341.4 47.8
+343.3 6169.1
+344.3 979.2
+345.3 94.3
+349.2 57.9
+351.1 92.4
+352.4 26.5
+353.5 17.6
+354.4 22.7
+355.4 19.6
+356.3 6.2
+357.4 32.5
+358.4 22.0
+360.3 23.1
+361.1 27.3
+362.7 10.3
+364.3 18.4
+366.1 37.4
+367.2 267.5
+368.2 38.4
+369.4 225.1
+371.5 76.0
+372.3 32.5
+373.6 4.2
+374.3 25.1
+375.7 8.4
+377.4 35.9
+378.8 9.3
+379.4 8.1
+381.0 41.3
+382.3 9.2
+384.3 774.9
+385.4 239.7
+386.3 32.9
+387.2 12.0
+388.5 10.6
+389.3 94.8
+390.1 7.3
+391.5 32.5
+392.8 59.1
+394.1 29.9
+395.6 90.0
+396.3 13.3
+397.2 12.0
+398.7 29.3
+399.5 57.2
+400.3 20.3
+402.4 85.1
+403.3 70.6
+404.3 16.9
+407.5 1021.4
+408.5 184.3
+409.5 43.0
+412.3 440.6
+413.4 260.3
+414.4 55.9
+415.4 23.5
+416.9 15.2
+418.4 10.8
+419.5 8.9
+420.4 19.2
+421.4 90.7
+423.4 16.5
+425.5 10.5
+427.1 45.9
+428.6 59.9
+430.4 1475.5
+431.4 363.8
+432.4 26.1
+433.5 7.5
+434.7 8.5
+436.0 19.8
+437.2 62.8
+438.4 145.0
+439.4 50.2
+442.5 30.8
+443.5 57.8
+444.3 13.2
+445.7 7.1
+446.4 14.7
+447.7 23.6
+449.0 126.2
+450.2 12.6
+451.6 19.3
+452.3 24.6
+453.4 10.3
+455.1 146.0
+456.4 112.3
+457.1 21.6
+457.7 45.7
+458.6 9.1
+464.4 338.6
+465.5 215.1
+466.4 415.3
+467.3 120.8
+468.3 13.6
+469.6 43.2
+470.2 30.8
+471.6 21.6
+473.4 151.4
+474.5 74.2
+475.7 18.3
+476.5 46.3
+479.4 16.2
+480.4 14.6
+481.6 10.2
+483.3 1814.1
+484.3 955.7
+485.5 136.6
+486.4 19.0
+487.5 39.5
+488.9 104.6
+489.6 50.7
+490.7 32.0
+491.6 7.7
+492.4 18.6
+496.7 18.7
+498.3 33.5
+499.3 83.4
+500.3 158.5
+501.5 1573.8
+502.6 267.9
+503.6 84.4
+504.6 38.4
+505.6 43.9
+506.6 89.3
+508.5 18.1
+509.4 18.4
+510.4 6.8
+511.1 38.6
+512.5 9.9
+514.7 77.1
+515.4 148.9
+516.3 105.6
+517.0 12.7
+517.6 29.8
+518.5 26.3
+519.4 19.8
+520.6 738.1
+521.5 246.7
+522.4 98.6
+523.2 49.8
+523.8 11.7
+524.5 11.1
+525.4 4.4
+526.6 20.4
+527.6 6.2
+529.1 26.7
+530.3 72.8
+531.6 16.1
+533.3 38.7
+534.5 34.9
+535.6 17.2
+536.6 75.8
+537.4 67.2
+538.8 103.6
+539.5 90.3
+540.4 17.2
+541.2 30.2
+542.1 13.5
+542.8 29.5
+544.5 110.3
+545.5 65.2
+546.4 55.8
+547.4 27.8
+548.8 40.7
+549.5 107.2
+550.4 53.8
+552.3 78.7
+553.4 37.8
+554.2 7.7
+555.1 35.0
+556.4 284.1
+557.4 105.5
+558.2 52.9
+559.1 38.0
+559.9 133.4
+560.7 14.8
+561.4 27.8
+562.0 10.1
+563.7 90.7
+565.4 51.7
+566.5 19.0
+567.6 16.1
+568.8 71.7
+569.6 332.9
+570.4 104.3
+571.2 11.4
+572.1 42.1
+572.7 84.9
+573.9 61.8
+574.7 22.8
+575.8 60.0
+576.9 45.1
+577.6 341.2
+578.9 132.3
+579.8 64.1
+581.0 104.6
+582.8 43.9
+583.4 10.6
+584.3 48.3
+585.3 72.8
+586.3 54.4
+587.4 81.8
+588.8 39.5
+589.7 108.5
+590.9 14.6
+591.7 18.3
+593.2 37.1
+596.8 194.9
+597.4 1005.7
+598.3 346.8
+599.4 107.9
+601.2 71.6
+602.4 116.5
+604.3 276.3
+605.5 95.5
+606.6 19.6
+607.7 23.5
+609.1 33.8
+610.5 360.1
+611.2 260.5
+612.6 42.3
+614.5 1265.2
+615.4 3528.8
+616.4 916.9
+617.5 292.9
+618.5 113.3
+619.3 199.7
+620.5 23.7
+621.4 52.0
+623.6 99.4
+624.5 44.3
+625.6 35.0
+626.5 362.3
+627.5 18.4
+628.4 51.6
+629.0 48.4
+630.0 75.8
+630.7 4.9
+632.4 5417.1
+633.4 1714.2
+634.5 383.6
+635.5 315.0
+636.3 9.9
+637.4 47.1
+638.9 49.8
+639.6 60.8
+640.8 5.8
+641.4 50.0
+642.3 7.3
+643.2 23.2
+644.6 16.0
+645.7 28.4
+646.6 35.0
+647.4 11.3
+648.6 95.0
+649.7 26.8
+650.7 81.2
+651.5 128.2
+652.6 34.5
+653.3 8.3
+654.0 8.3
+654.8 20.1
+655.6 55.7
+656.9 26.9
+657.6 189.3
+658.6 92.2
+660.0 28.8
+661.2 41.0
+662.8 87.1
+664.3 54.2
+665.5 106.6
+666.4 40.7
+667.7 23.7
+669.3 34.2
+670.3 105.1
+671.4 80.0
+672.1 154.5
+672.8 33.9
+673.9 39.1
+674.9 117.3
+675.6 182.9
+676.4 10.9
+677.5 63.8
+678.2 106.2
+679.1 60.7
+680.3 168.7
+681.3 42.1
+682.2 102.3
+683.1 235.2
+684.2 51.3
+684.8 38.6
+685.8 62.3
+686.6 81.3
+687.4 99.3
+688.4 135.6
+690.5 316.4
+692.0 432.6
+693.0 30.2
+693.8 53.5
+695.8 110.6
+696.7 259.8
+697.7 324.2
+698.6 87.5
+699.7 46.1
+700.6 338.1
+701.5 52.5
+702.4 76.7
+703.9 42.0
+705.0 617.5
+706.3 377.2
+707.2 271.0
+708.5 260.5
+709.6 115.5
+710.9 259.5
+711.9 450.2
+712.9 59.9
+714.0 435.7
+714.8 422.6
+715.4 578.2
+716.1 119.8
+716.8 110.9
+717.7 45.2
+718.6 203.3
+719.7 310.3
+721.1 434.5
+722.5 449.2
+723.4 1615.2
+724.4 267.1
+725.5 11.7
+727.0 13.5
+727.7 14.5
+732.7 30.7
+733.4 32.1
+735.4 56.3
+736.3 15.1
+737.7 35.4
+739.9 12.2
+740.6 57.7
+742.1 21.5
+743.0 91.3
+744.7 128.9
+745.7 46.2
+747.0 136.4
+747.9 83.8
+748.8 83.3
+749.6 385.9
+750.6 40.6
+751.6 22.0
+752.5 15.8
+753.6 226.2
+754.7 117.7
+755.5 156.9
+756.8 26.5
+758.3 7.1
+759.7 37.2
+760.4 28.9
+761.3 94.7
+762.7 29.2
+765.6 467.3
+766.6 183.7
+767.7 32.4
+768.6 27.2
+769.5 70.1
+770.6 186.8
+771.6 170.1
+773.0 22.7
+774.8 12.3
+775.7 36.0
+776.4 48.5
+777.2 131.1
+779.5 20.9
+780.8 68.8
+782.2 36.1
+783.3 45.0
+785.5 37.5
+786.5 7.2
+788.2 7.9
+789.0 25.0
+790.2 62.1
+791.5 58.7
+792.4 5.5
+793.5 64.0
+794.4 34.4
+795.9 99.4
+796.7 38.0
+797.7 49.7
+798.7 7.7
+799.3 37.3
+801.0 26.6
+801.6 89.8
+802.8 81.9
+804.2 19.3
+805.4 23.6
+806.5 112.6
+807.3 297.4
+808.3 25.1
+809.1 108.0
+810.1 459.6
+810.7 271.3
+811.6 47.4
+813.1 68.1
+813.8 92.9
+814.6 23.9
+815.7 590.1
+816.7 7.1
+818.3 119.9
+819.2 46.4
+821.2 30.9
+822.9 77.3
+823.9 164.3
+824.7 118.0
+826.5 100.5
+827.3 16.5
+828.2 9.9
+829.1 90.2
+830.4 139.7
+831.7 12643.5
+832.7 5541.7
+833.7 1168.4
+835.1 25.0
+836.9 91.2
+837.6 12.9
+839.4 40.2
+841.4 48.8
+842.9 1568.1
+843.7 697.2
+844.8 227.0
+845.6 84.5
+846.9 35.4
+847.7 15.5
+848.7 27.4
+849.6 21.1
+850.5 15.5
+851.6 85.5
+852.6 46.0
+853.5 129.2
+854.3 145.7
+855.4 127.5
+856.5 15.7
+857.6 78.9
+858.4 88.4
+859.4 62.4
+861.2 229.6
+862.5 172.0
+863.2 132.4
+863.9 86.5
+865.0 33.3
+866.5 535.0
+867.3 298.4
+868.2 146.4
+869.9 40.0
+870.6 10.2
+872.8 23.4
+873.6 10.4
+875.4 67.6
+876.9 62.3
+877.8 26.2
+878.8 107.1
+879.7 102.9
+880.9 107.9
+881.6 86.4
+882.5 26.2
+883.1 13.4
+884.2 98.8
+886.4 64.3
+887.1 12.0
+887.8 50.2
+889.2 44.1
+890.5 222.7
+891.5 40.1
+893.6 57.6
+895.0 40.2
+897.7 118.1
+898.7 97.1
+900.1 569.6
+901.1 112.5
+902.1 102.9
+903.2 101.5
+903.8 21.2
+904.6 47.5
+906.1 110.9
+907.6 15.6
+908.7 82.1
+909.6 94.1
+910.6 79.0
+911.7 34.1
+912.6 44.1
+914.0 25.6
+914.7 48.4
+915.8 145.8
+916.7 27.9
+917.8 59.2
+918.6 105.0
+919.3 422.8
+920.5 30.4
+921.3 229.3
+922.3 33.2
+923.1 34.7
+924.1 86.2
+924.9 34.9
+925.7 129.2
+926.6 286.0
+927.4 101.4
+928.6 860.2
+929.5 75.3
+930.2 43.8
+931.6 16.7
+932.7 99.0
+933.8 21.5
+934.7 12.7
+935.7 34.2
+936.8 33.1
+938.1 34.5
+938.8 78.5
+939.7 50.7
+940.5 42.2
+941.3 56.8
+942.0 37.3
+943.0 52.1
+943.7 446.3
+944.7 334.7
+945.8 91.0
+946.8 103.0
+948.7 17.6
+949.5 43.6
+950.2 26.2
+952.7 54.7
+953.7 33.0
+954.8 65.4
+955.6 84.9
+956.8 35.3
+957.6 10.6
+959.0 75.2
+959.7 37.8
+962.8 6854.3
+963.8 3924.9
+964.8 721.4
+965.9 52.3
+967.4 96.3
+968.5 66.8
+969.8 34.8
+970.5 77.0
+971.2 28.1
+972.5 14.9
+974.6 138.4
+975.9 387.8
+976.8 281.0
+978.0 129.4
+979.1 55.1
+979.9 75.0
+981.3 47.2
+982.1 77.6
+982.8 105.7
+983.8 68.3
+985.0 55.0
+985.7 165.1
+986.5 63.6
+987.5 17.9
+988.3 18.7
+989.8 95.6
+990.7 71.3
+991.6 26.9
+992.5 35.3
+993.9 10.5
+995.2 45.4
+996.4 143.8
+997.7 59.6
+998.7 15.7
+999.6 127.8
+1000.8 27.2
+1001.9 35.0
+1002.8 50.8
+1003.5 95.4
+1004.8 45.8
+1005.5 64.9
+1006.4 18.6
+1007.6 32.8
+1008.9 97.6
+1010.0 37.1
+1010.6 19.0
+1012.1 749.2
+1012.9 99.8
+1013.6 143.7
+1014.9 53.8
+1015.7 78.3
+1016.7 82.3
+1017.3 6.0
+1018.6 68.2
+1019.6 24.1
+1020.8 29.9
+1021.7 87.8
+1022.6 72.1
+1024.3 149.5
+1025.1 223.0
+1025.8 103.3
+1026.6 69.3
+1027.8 10.7
+1028.8 25.2
+1029.9 78.2
+1031.0 32.4
+1032.0 52.7
+1033.8 3610.7
+1034.8 1701.2
+1036.0 499.1
+1036.9 4.1
+1038.7 165.0
+1039.6 246.2
+1040.8 85.8
+1041.8 37.3
+1042.8 6.3
+1044.9 17.7
+1045.7 17.1
+1047.0 54.4
+1047.8 21.5
+1048.7 38.6
+1049.6 31.1
+1051.3 72.7
+1052.3 48.9
+1053.2 36.1
+1055.1 13.6
+1056.7 878.8
+1057.7 627.0
+1059.0 112.5
+1059.8 11.0
+1062.6 7.2
+1063.6 14.2
+1066.0 13.9
+1066.8 55.2
+1068.0 15.3
+1069.4 35.4
+1070.8 19.6
+1072.7 37.8
+1074.0 44.8
+1074.8 87.2
+1075.7 25.1
+1076.7 44.1
+1077.7 26.7
+1079.9 10.8
+1083.8 12.0
+1084.6 23.8
+1087.5 58.8
+1088.9 24.7
+1090.1 37.6
+1090.7 33.5
+1093.6 6.3
+1096.4 40.4
+1099.8 22.4
+1100.7 12.3
+1102.8 314.1
+1104.2 89.2
+1105.1 21.9
+1106.6 7.3
+1107.3 22.2
+1108.3 5.0
+1109.4 17.8
+1111.0 27.1
+1111.8 13.5
+1112.7 20.6
+1114.6 43.8
+1117.0 33.8
+1117.9 173.5
+1118.9 35.0
+1120.8 12792.7
+1121.8 7720.7
+1122.8 2384.0
+1123.8 72.4
+1124.8 52.7
+1128.9 18.3
+1132.6 28.6
+1133.3 11.9
+1134.7 32.0
+1136.0 55.9
+1136.9 68.1
+1137.7 13.9
+1138.8 36.9
+1139.8 5.0
+1141.6 9.3
+1143.0 12.3
+1143.7 23.6
+1146.5 38.9
+1147.4 16.3
+1151.8 170.9
+1152.6 195.0
+1153.7 270.6
+1154.8 55.2
+1155.9 13.5
+1156.9 13.1
+1157.7 12.2
+1160.6 6.5
+1164.8 60.5
+1165.7 13.3
+1169.6 1039.6
+1170.7 524.7
+1171.9 133.6
+1174.8 39.3
+1175.8 23.4
+1176.7 13.3
+1177.8 21.0
+1178.7 26.1
+1181.8 7.4
+1184.9 41.8
+1186.8 13.3
+1188.1 8.8
+1190.2 18.8
+1190.8 14.5
+1192.6 9.2
+1194.0 15.0
+1194.6 39.0
+1196.3 21.9
+1197.7 4.5
+1199.8 21.9
+1201.7 201.6
+1202.9 81.3
+1204.1 73.1
+1213.9 33.5
+1216.1 10.3
+1219.9 6029.1
+1220.9 3463.3
+1221.8 1142.9
+1222.6 44.1
+1223.3 16.6
+1231.3 21.2
+1232.8 8.1
+1234.2 24.6
+1235.9 75.0
+1236.9 126.8
+1238.0 33.1
+1238.9 20.5
+1242.7 42.0
+1243.8 11.0
+1246.7 4.1
+1248.0 6.9
+1250.0 10.6
+1251.7 38.6
+1258.8 25.8
+1260.7 26.7
+1262.6 5.7
+1269.8 111.2
+1271.8 51.7
+1274.9 19.2
+1278.5 5.4
+1281.9 15.0
+1283.1 29.8
+1287.8 26.2
+1288.7 25.4
+1289.6 77.0
+1292.8 11.5
+1293.8 31.6
+1294.5 8.0
+1295.7 11.3
+1298.8 146.2
+1299.8 285.0
+1300.9 191.1
+1301.9 43.3
+1305.1 16.3
+1306.1 17.8
+1310.5 20.6
+1311.8 9.7
+1315.6 28.9
+1316.8 897.2
+1317.9 482.3
+1318.8 123.3
+1319.5 21.7
+1326.0 6.7
+1342.9 136.6
+1343.7 41.1
+1345.1 30.3
+1356.8 18.5
+1359.0 25.7
+1363.6 8.4
+1374.0 15.9
+1383.9 6.3
+1392.6 59.8
+1404.7 14.0
+1414.0 42.8
+1419.8 24.9
+1426.2 5.4
+1438.0 10.7
+1439.0 5.2
+S	131	131	745.85
+Z	2	1490.69
+216.8 31.2
+227.9 4.4
+234.0 116.5
+235.2 75.5
+236.3 10.6
+238.1 14.0
+242.0 13.7
+243.3 32.5
+244.3 45.8
+245.2 22.7
+246.5 36.0
+247.3 51.5
+254.4 9.4
+259.3 69.5
+260.2 209.0
+262.1 252.0
+263.0 62.3
+264.3 3.0
+270.3 40.8
+272.2 17.2
+273.2 5.9
+274.1 31.4
+275.4 49.7
+277.3 14.6
+281.3 7.5
+282.4 5.0
+283.1 33.6
+284.2 19.0
+286.4 8.2
+288.1 4.9
+289.4 8.2
+290.1 3.7
+297.2 28.6
+298.1 75.0
+304.3 67.1
+310.0 15.6
+314.1 19.3
+316.2 222.8
+317.2 323.7
+318.3 113.3
+322.3 21.9
+326.3 8.6
+327.3 20.6
+331.4 30.3
+334.1 18.7
+336.9 21.2
+340.2 25.0
+341.4 28.2
+346.1 7.7
+347.2 7.8
+353.4 5.1
+354.2 4.1
+357.4 134.8
+358.3 98.4
+359.2 10.7
+361.6 2.7
+367.1 8.7
+368.1 11.3
+375.3 962.8
+376.3 146.4
+377.2 30.9
+378.2 24.3
+380.3 64.9
+383.3 28.8
+384.0 94.0
+385.3 19.3
+386.7 22.6
+389.4 45.1
+390.7 9.8
+391.4 21.0
+393.3 28.4
+396.6 7.0
+398.1 22.3
+401.3 10.0
+402.3 6.9
+403.2 153.2
+404.3 39.3
+407.3 14.5
+410.1 9.7
+411.5 7.9
+413.5 23.2
+416.4 667.6
+417.4 132.1
+418.4 39.1
+421.3 206.4
+422.4 68.8
+423.2 9.9
+425.1 5.9
+427.3 53.1
+434.7 6.9
+437.1 3.7
+441.3 32.0
+444.5 4.2
+445.6 17.7
+446.3 25.2
+447.1 3.7
+448.4 4.0
+452.1 13.5
+456.2 56.2
+457.3 101.8
+458.4 56.0
+459.2 23.6
+460.5 17.2
+462.7 45.6
+468.4 11.4
+470.3 12.7
+471.9 31.4
+473.2 33.3
+474.4 253.3
+475.6 53.6
+476.3 27.3
+477.2 70.0
+477.9 28.8
+480.1 11.1
+482.1 39.6
+482.7 18.7
+487.1 91.8
+488.4 11.6
+489.4 11.5
+499.2 26.7
+500.2 25.6
+503.7 97.5
+504.3 293.8
+505.3 85.1
+507.2 14.0
+508.5 16.8
+511.5 9.0
+512.2 17.3
+513.0 9.1
+515.2 23.1
+519.7 126.8
+523.3 32.5
+524.8 9.8
+526.5 84.6
+527.5 163.7
+528.6 27.8
+529.4 42.4
+530.2 14.0
+531.3 14.9
+534.7 452.3
+535.9 132.3
+536.6 4.1
+537.4 30.5
+538.1 27.4
+538.9 24.9
+540.4 37.6
+541.4 27.9
+542.5 65.1
+544.4 922.2
+545.5 432.9
+546.6 49.3
+548.4 19.3
+549.2 26.3
+550.5 18.7
+551.2 97.1
+551.8 18.2
+554.1 63.4
+555.0 89.8
+556.1 95.5
+557.4 119.8
+558.4 26.9
+559.4 18.4
+560.3 34.2
+561.5 76.7
+563.1 78.4
+564.5 29.7
+566.0 4.9
+566.6 6.2
+568.5 52.8
+569.5 62.2
+570.4 23.6
+571.3 13.5
+572.3 28.8
+573.1 19.6
+573.8 17.6
+576.5 10.3
+578.1 450.4
+579.0 103.8
+580.4 54.4
+581.3 18.0
+582.2 26.8
+583.2 28.1
+585.6 23.8
+587.3 83.2
+588.2 27.0
+589.4 53.8
+590.5 29.7
+593.6 29.9
+594.4 25.3
+596.4 4.7
+597.5 53.8
+599.1 42.3
+599.9 18.2
+602.3 5.9
+604.0 64.6
+605.3 347.6
+606.4 428.2
+607.3 11.2
+608.4 15.2
+610.9 65.7
+612.5 59.0
+613.3 21.3
+614.0 122.8
+614.9 138.0
+615.7 183.0
+617.2 104.8
+618.3 82.9
+618.9 31.0
+621.5 7.2
+623.4 106.9
+624.5 65.6
+626.5 242.3
+627.8 218.2
+628.7 56.6
+629.8 60.0
+631.4 40.2
+632.5 54.3
+634.2 18.7
+637.5 14.9
+638.5 28.9
+639.5 31.6
+641.6 15.5
+644.5 293.4
+645.6 47.1
+646.5 18.7
+647.3 9.1
+648.1 70.8
+649.2 110.7
+651.1 84.9
+653.0 66.1
+655.0 20.9
+657.4 1309.5
+658.5 547.5
+659.7 101.1
+661.3 31.5
+662.9 19.3
+663.6 42.3
+664.3 36.1
+667.8 19.1
+669.3 280.3
+670.4 53.6
+671.7 99.6
+672.5 174.8
+673.9 46.1
+674.7 61.1
+675.5 13.8
+676.4 159.2
+678.4 58.7
+679.7 95.4
+680.4 57.6
+681.9 70.6
+683.3 50.8
+684.4 21.1
+686.3 769.2
+687.4 420.7
+688.4 255.2
+690.9 32.4
+691.9 23.1
+693.6 66.7
+694.9 63.3
+695.5 8.1
+696.9 89.9
+698.3 64.1
+699.6 171.5
+700.5 82.7
+701.5 179.7
+703.8 335.9
+704.4 1071.8
+705.4 343.9
+706.5 204.4
+707.2 26.3
+708.6 21.2
+709.7 155.0
+710.5 224.4
+711.3 106.4
+713.9 61.0
+715.2 2.0
+716.3 55.1
+717.5 58.4
+718.8 466.0
+719.7 179.8
+721.0 124.9
+721.7 80.9
+723.3 117.3
+724.6 218.9
+725.4 43.4
+727.4 422.7
+728.6 325.0
+729.6 85.0
+730.4 83.0
+731.8 254.7
+733.3 189.7
+734.1 50.8
+735.8 545.1
+736.7 1432.5
+737.8 56.0
+738.5 11.4
+748.6 8.6
+752.4 23.9
+754.5 92.8
+755.6 31.9
+756.5 24.5
+759.3 24.5
+760.7 9.0
+762.0 102.3
+763.8 121.6
+764.8 82.7
+766.0 105.5
+766.7 18.4
+768.5 39.9
+769.5 202.3
+770.8 30.9
+771.6 36.8
+772.6 227.2
+773.6 337.2
+774.5 36.3
+775.6 55.7
+776.7 3.9
+778.0 10.4
+779.7 65.6
+780.5 5.7
+781.9 52.6
+783.4 39.7
+784.3 35.7
+786.5 2462.5
+787.6 646.0
+788.7 95.2
+790.6 19.9
+791.5 21.2
+793.9 110.5
+794.9 23.5
+796.1 47.9
+797.1 99.2
+798.2 115.6
+799.1 142.0
+800.2 70.8
+801.4 187.7
+802.4 153.4
+803.5 130.3
+804.3 18.0
+805.1 10.5
+806.2 5.8
+807.6 30.6
+809.0 354.8
+809.8 153.1
+810.9 68.2
+813.2 53.6
+814.7 6.3
+815.3 251.1
+816.4 490.8
+817.4 113.2
+818.6 93.8
+819.3 51.8
+820.4 48.0
+821.2 55.4
+821.9 39.2
+823.7 60.1
+824.5 120.5
+825.2 60.4
+826.4 86.5
+827.6 160.8
+829.2 156.4
+829.9 155.9
+830.7 9.5
+831.5 66.6
+832.4 65.6
+833.5 857.7
+834.7 293.4
+835.6 86.4
+836.5 83.4
+838.0 104.7
+839.6 50.1
+840.7 9.7
+841.6 8.9
+843.5 173.3
+844.5 166.4
+845.6 64.3
+846.6 57.1
+849.3 71.7
+850.2 96.9
+851.2 17.3
+852.2 133.7
+853.2 32.7
+854.4 61.2
+855.1 30.3
+857.5 40.5
+858.7 129.5
+860.2 43.8
+861.0 40.4
+861.7 43.3
+863.0 93.3
+864.4 55.7
+865.1 50.7
+866.4 23.1
+867.5 62.7
+868.6 25.3
+870.5 141.9
+871.6 179.8
+872.6 111.5
+873.3 3.0
+874.1 366.3
+875.5 127.1
+876.8 30.0
+879.2 7.8
+880.5 57.2
+881.3 23.5
+882.0 13.0
+882.6 87.1
+883.5 140.5
+885.6 583.3
+886.4 336.4
+887.6 118.6
+890.4 48.0
+893.8 6.0
+895.0 73.8
+896.3 13.6
+897.2 139.9
+898.6 120.9
+899.4 251.4
+900.6 142.8
+901.2 124.6
+902.0 71.8
+903.0 94.3
+904.6 75.3
+908.0 138.8
+908.7 96.1
+910.0 39.7
+910.9 17.8
+911.5 74.2
+912.5 4.4
+913.7 77.4
+914.5 54.8
+915.2 81.4
+916.1 99.2
+917.8 58.2
+918.7 273.1
+920.8 5.6
+921.6 107.9
+922.8 194.0
+923.6 69.8
+924.5 31.5
+925.6 122.9
+926.8 45.1
+928.4 450.0
+929.6 726.3
+930.6 166.1
+931.3 71.5
+932.0 112.8
+933.0 155.5
+934.0 46.2
+934.8 30.2
+936.8 12.5
+937.8 55.3
+938.6 123.2
+939.4 170.6
+940.4 42.6
+941.2 37.0
+942.2 57.8
+943.5 149.7
+944.5 86.7
+946.4 837.0
+947.5 231.8
+948.5 76.3
+949.6 65.3
+950.4 40.2
+953.6 170.0
+954.6 38.7
+955.5 69.3
+957.9 51.6
+959.6 21.3
+960.9 23.6
+961.6 35.5
+963.6 17.3
+964.9 8.3
+965.9 20.3
+967.7 41.4
+968.6 26.5
+969.4 68.7
+970.5 49.8
+972.1 55.9
+972.9 58.6
+973.7 21.5
+975.0 59.5
+975.8 47.9
+976.5 21.3
+978.4 37.6
+979.0 29.9
+980.3 10.8
+981.8 97.7
+982.8 12.8
+985.8 70.9
+986.7 1276.8
+987.8 666.2
+988.7 69.1
+990.0 216.5
+990.7 21.0
+994.9 80.0
+995.9 54.0
+996.7 96.9
+997.4 103.0
+998.1 27.8
+999.2 24.3
+1002.8 41.4
+1004.7 54.3
+1006.6 24.2
+1007.5 11.3
+1008.3 30.2
+1009.9 43.6
+1010.6 17.7
+1011.8 56.8
+1012.6 111.3
+1014.4 114.1
+1015.4 38.9
+1016.5 26.2
+1017.7 21.7
+1018.4 24.6
+1020.3 65.8
+1021.7 9.0
+1022.4 50.2
+1023.0 46.3
+1024.7 21.0
+1025.6 76.8
+1029.0 54.5
+1029.9 23.7
+1031.5 13.5
+1032.6 56.3
+1035.7 24.6
+1036.8 45.1
+1039.1 146.0
+1040.9 49.3
+1041.7 24.0
+1044.6 104.1
+1045.5 113.0
+1046.5 19.2
+1051.6 32.9
+1052.5 74.4
+1053.5 52.9
+1056.2 160.5
+1057.3 69.0
+1058.0 40.7
+1058.7 52.2
+1061.1 34.2
+1062.3 48.2
+1064.0 33.7
+1065.5 15.4
+1067.5 1236.8
+1068.6 1224.1
+1069.7 254.0
+1070.7 137.5
+1071.9 57.1
+1072.8 6.0
+1074.3 604.8
+1075.4 379.1
+1076.8 41.2
+1077.5 38.6
+1079.3 33.8
+1083.3 5.7
+1083.9 6.9
+1085.0 10.4
+1086.9 20.5
+1088.5 66.5
+1089.4 26.3
+1090.8 5.8
+1095.6 164.4
+1096.6 38.0
+1097.6 172.7
+1098.5 171.5
+1099.2 36.5
+1100.0 17.0
+1103.7 11.2
+1104.8 63.1
+1106.7 45.4
+1107.6 42.7
+1108.4 56.4
+1113.0 10.9
+1113.6 129.9
+1114.8 319.2
+1115.6 1024.3
+1116.8 516.0
+1117.7 81.6
+1122.6 14.6
+1128.7 68.6
+1129.8 3.2
+1131.0 11.2
+1134.4 9.8
+1139.1 14.3
+1143.6 8.4
+1144.7 56.0
+1146.2 65.1
+1147.3 11.6
+1148.1 20.9
+1150.3 12.7
+1151.2 16.7
+1154.7 632.4
+1155.7 698.5
+1156.7 164.9
+1157.6 184.4
+1160.5 14.3
+1171.4 12.8
+1172.2 12.1
+1173.5 1079.2
+1174.5 818.2
+1175.5 85.3
+1176.6 17.6
+1178.8 4.4
+1180.5 44.8
+1181.8 47.6
+1182.7 27.7
+1183.7 9.2
+1185.8 17.6
+1186.4 46.7
+1187.6 34.8
+1193.2 74.3
+1195.2 34.2
+1202.3 42.2
+1204.2 40.7
+1206.7 9.2
+1210.7 165.4
+1212.0 82.5
+1213.0 63.5
+1213.6 58.0
+1214.6 79.1
+1215.6 35.6
+1218.0 23.5
+1220.9 75.0
+1222.8 19.4
+1223.8 22.8
+1224.7 62.6
+1225.7 55.8
+1227.5 32.7
+1228.7 976.8
+1229.7 686.1
+1230.6 832.3
+1231.5 567.0
+1232.4 26.3
+1234.0 17.2
+1234.6 21.2
+1236.1 14.2
+1242.9 69.6
+1243.9 75.5
+1244.8 12.0
+1245.6 8.0
+1254.0 46.7
+1254.8 71.1
+1256.1 19.8
+1261.5 9.7
+1269.9 41.4
+1289.3 21.0
+1291.8 25.1
+1294.1 8.7
+1298.2 4.1
+1308.2 20.6
+1309.1 56.3
+1313.9 15.6
+1315.6 16.3
+1316.5 52.0
+1320.4 10.2
+1322.3 29.2
+1323.7 346.1
+1324.4 68.2
+1325.6 134.0
+1326.4 105.3
+1327.0 16.6
+1327.7 23.1
+1339.7 36.9
+1340.9 46.6
+1341.7 196.0
+1342.7 135.3
+1343.6 970.0
+1344.6 745.2
+1345.6 121.4
+1353.0 2.3
+1367.7 39.0
+1372.8 25.2
+1385.6 9.7
+1467.8 9.4
+S	132	132	474.74
+I	ID	86
+I	RTime	4.0244
+Z	2	948.47
+139.1 2.7
+141.0 1.7
+147.2 2.4
+158.0 2.7
+161.1 8.6
+162.3 1.7
+166.3 1.2
+170.0 2.7
+170.9 1.8
+175.2 21.1
+176.0 0.8
+183.1 2.4
+185.0 2.9
+186.2 2.7
+188.0 1.3
+189.3 2.5
+197.9 4.0
+199.0 5.4
+213.2 0.8
+214.0 1.7
+216.2 33.2
+217.1 6.4
+218.1 3.2
+221.2 1.2
+222.1 0.6
+225.2 1.3
+229.2 1.2
+231.2 1.8
+234.1 1.2
+237.3 4.5
+238.0 1.2
+240.1 7.6
+242.4 1.7
+243.4 1.8
+244.3 3.9
+245.3 10.1
+246.2 2.4
+248.1 5.8
+254.2 2.0
+257.5 1.2
+258.2 5.9
+259.2 1.6
+260.1 1.0
+261.3 2.9
+262.0 1.7
+269.1 7.0
+270.1 10.5
+271.1 3.2
+272.2 24.8
+273.0 2.0
+275.4 7.6
+276.3 4.6
+278.3 6.8
+279.2 7.3
+279.9 1.8
+282.3 1.3
+283.1 3.7
+286.9 4.0
+287.5 3.9
+288.2 2.0
+289.1 15.6
+294.1 5.0
+295.2 3.0
+300.0 3.0
+301.2 1.3
+302.3 4.5
+303.3 3.0
+306.1 1.2
+310.0 2.0
+311.3 9.8
+312.2 2.2
+315.3 2.4
+317.3 8.3
+318.4 1.5
+319.2 6.8
+322.4 2.0
+323.1 2.0
+323.9 1.2
+325.0 5.0
+326.3 3.7
+328.2 5.6
+329.2 21.5
+336.3 1.3
+337.5 1.2
+338.1 2.0
+339.0 2.2
+341.5 1.3
+343.4 8.6
+344.6 5.4
+346.2 26.0
+347.1 38.5
+351.2 1.7
+352.1 3.9
+360.2 48.2
+361.1 3.9
+362.1 1.7
+368.3 3.0
+369.3 2.7
+373.2 2.7
+374.1 6.5
+376.3 8.3
+378.4 1.1
+380.7 2.5
+382.4 1.5
+383.1 4.1
+384.1 3.2
+386.0 1.7
+387.1 14.5
+389.3 5.8
+390.2 1.2
+395.3 26.7
+396.4 8.3
+397.0 1.2
+398.1 2.2
+400.2 13.6
+401.5 2.0
+404.3 9.8
+406.1 30.5
+407.3 18.5
+410.3 21.6
+414.1 12.3
+415.2 17.7
+416.3 13.6
+417.3 1.7
+420.3 2.7
+421.6 11.6
+422.6 37.0
+423.5 8.8
+428.2 29.3
+429.0 7.5
+430.3 13.8
+431.2 18.8
+432.1 3.9
+433.1 4.5
+434.5 3.2
+435.3 17.8
+438.3 7.0
+439.5 39.0
+440.3 30.5
+441.4 3.2
+442.3 2.2
+443.3 2.7
+445.2 0.8
+446.3 10.3
+456.3 77.5
+457.3 190.8
+458.3 71.5
+459.4 8.8
+462.2 3.0
+465.4 68.8
+466.4 57.2
+492.2 1.7
+500.3 4.5
+511.5 1.6
+514.2 1.3
+527.3 4.0
+528.6 2.9
+533.3 24.8
+546.6 2.4
+547.3 1.1
+556.4 5.8
+568.3 2.4
+569.3 2.5
+588.1 3.7
+595.2 2.5
+613.4 2.2
+630.2 4.0
+644.4 1.0
+646.1 2.9
+647.4 5.0
+648.2 3.5
+648.9 1.8
+658.4 7.4
+659.3 1.3
+662.2 57.0
+663.4 12.0
+674.5 1.7
+684.5 2.0
+689.2 1.3
+702.4 1.5
+730.1 3.0
+733.3 164.8
+734.5 74.0
+772.5 1.2
+774.4 4.3
+775.5 2.4
+787.4 1.5
+793.5 2.7
+799.5 1.6
+811.3 4.6
+843.3 1.7
+S	133	133	483.12
+I	ID	139
+I	RTime	6.7592
+Z	2	965.23
+164.2 1.2
+166.9 0.8
+175.3 1.1
+176.9 2.5
+184.2 1.2
+184.8 4.0
+195.0 0.8
+198.5 1.6
+209.4 1.7
+216.3 3.9
+218.0 2.2
+229.2 1.7
+260.0 1.6
+267.3 0.6
+269.0 8.1
+272.2 5.5
+280.5 1.7
+282.4 2.5
+283.5 2.2
+285.1 1.0
+287.1 2.0
+290.3 6.5
+299.2 3.0
+311.0 3.2
+312.9 4.3
+317.4 3.5
+321.2 1.3
+322.2 2.5
+336.2 6.8
+351.6 4.0
+354.2 4.6
+359.3 2.9
+361.3 2.0
+368.5 1.7
+372.0 2.5
+385.3 1.2
+396.2 7.6
+396.9 5.1
+404.4 5.6
+405.2 6.0
+416.3 2.9
+417.3 1.0
+418.1 1.5
+419.1 13.5
+422.4 1.0
+425.6 2.7
+429.7 16.2
+430.7 5.3
+438.6 15.6
+440.1 3.5
+442.5 2.0
+447.2 9.3
+448.2 3.7
+452.1 1.7
+453.5 1.3
+455.5 7.0
+464.2 12.5
+465.5 23.5
+466.2 4.6
+473.5 39.7
+474.3 21.7
+500.4 1.5
+534.4 1.7
+547.2 1.5
+548.0 0.8
+574.4 1.2
+576.4 6.3
+596.5 1.2
+603.1 2.7
+606.4 1.1
+624.5 1.6
+633.5 1.8
+647.2 3.2
+648.0 2.2
+654.5 3.2
+663.3 4.5
+676.0 1.2
+676.9 3.0
+677.6 6.0
+678.4 2.2
+725.5 1.5
+730.7 1.2
+747.5 19.1
+748.3 43.0
+749.5 22.2
+750.5 9.3
+771.4 2.0
+815.3 2.4
+836.5 2.2
+S	134	134	457.55
+I	ID	76
+I	RTime	3.5138
+Z	2	914.09
+129.1 1.7
+130.2 1.2
+143.3 0.8
+156.9 1.1
+158.0 2.0
+161.2 1.3
+175.3 7.6
+186.1 1.8
+191.3 1.7
+194.9 1.1
+197.0 1.1
+199.1 0.8
+201.0 2.5
+204.9 2.2
+212.1 10.8
+213.0 3.7
+217.2 2.9
+218.1 2.2
+220.1 3.9
+227.4 1.5
+228.1 2.2
+231.3 7.1
+232.5 2.0
+239.0 1.2
+240.1 3.2
+241.0 1.8
+245.3 6.3
+246.2 5.4
+248.4 2.0
+249.4 4.0
+251.1 7.4
+253.3 2.2
+254.2 4.4
+255.2 5.8
+263.3 3.0
+267.2 1.6
+269.9 1.2
+271.5 1.6
+272.2 11.6
+274.2 1.3
+280.1 3.2
+282.4 3.4
+283.1 2.0
+284.6 10.6
+287.7 4.1
+289.5 4.6
+290.3 2.9
+294.1 1.5
+296.2 1.5
+297.3 2.7
+298.2 2.5
+299.1 3.4
+302.3 1.5
+311.0 2.4
+312.2 5.4
+313.3 2.9
+314.5 6.4
+318.4 1.5
+322.5 4.6
+323.3 1.5
+325.3 8.6
+326.3 0.6
+328.2 0.8
+329.2 24.3
+330.0 1.7
+336.9 2.5
+338.1 2.2
+339.2 4.5
+342.8 9.0
+344.5 2.7
+349.2 5.0
+350.2 1.2
+350.9 0.8
+353.3 5.4
+355.2 1.8
+357.7 8.0
+359.3 8.3
+360.2 6.5
+361.1 4.5
+362.1 2.5
+364.4 2.5
+365.4 1.3
+367.1 5.3
+369.6 3.0
+372.1 17.0
+373.1 10.1
+376.4 12.1
+380.1 2.4
+381.2 2.4
+382.7 13.0
+383.3 5.1
+384.3 5.0
+386.3 2.2
+387.2 1.1
+388.1 5.6
+393.1 1.8
+393.9 4.9
+395.2 2.5
+396.3 1.3
+398.2 1.7
+401.5 6.5
+403.3 4.0
+404.6 20.2
+405.4 6.0
+407.4 2.5
+408.2 18.8
+408.8 12.5
+410.6 5.1
+411.6 2.2
+412.7 16.3
+414.1 6.5
+415.4 2.7
+416.7 19.3
+418.2 5.3
+419.1 11.3
+420.5 17.6
+421.2 9.1
+422.6 190.8
+423.4 15.6
+424.5 5.8
+425.5 8.6
+426.8 7.5
+427.9 2.5
+429.2 18.1
+430.2 20.3
+430.9 95.3
+431.8 1.1
+432.4 4.5
+435.4 5.6
+436.6 5.5
+437.4 3.0
+439.2 41.5
+440.4 51.9
+441.3 6.9
+442.0 14.0
+443.7 13.8
+444.3 2.2
+445.8 31.3
+446.8 6.8
+448.1 33.9
+449.1 90.0
+449.9 17.3
+452.0 5.0
+455.7 8.3
+464.9 2.9
+472.5 13.8
+473.2 3.0
+476.4 4.6
+491.0 2.7
+493.5 1.7
+499.3 4.1
+500.1 16.0
+504.5 14.1
+508.0 7.0
+509.2 1.7
+515.4 15.1
+527.5 1.7
+529.5 3.2
+543.0 4.8
+544.9 4.8
+549.5 1.2
+554.0 3.0
+556.5 2.2
+559.1 29.2
+567.7 10.8
+570.2 6.3
+573.9 3.7
+575.0 3.5
+578.5 6.3
+579.5 1.0
+584.4 10.3
+588.8 9.0
+589.8 10.0
+596.2 12.1
+599.0 7.3
+599.6 9.6
+601.5 0.8
+602.4 2.5
+603.5 3.5
+604.1 1.6
+604.9 3.5
+605.6 4.0
+608.4 12.8
+616.5 4.3
+621.5 9.8
+622.8 3.7
+628.4 0.6
+631.2 1.5
+635.2 2.5
+639.3 2.0
+640.5 3.5
+650.4 6.4
+652.3 3.0
+653.3 1.7
+655.5 14.5
+658.4 13.5
+659.3 6.5
+662.6 1.1
+665.3 3.0
+666.1 2.9
+667.4 4.6
+668.3 1.2
+670.2 17.7
+671.5 3.5
+674.4 1.3
+676.4 4.0
+681.5 14.1
+686.4 1.3
+701.5 10.6
+702.6 4.3
+706.7 1.7
+709.4 3.2
+714.5 14.3
+715.3 2.5
+716.4 7.3
+717.4 1.7
+718.4 1.2
+719.1 2.5
+720.4 5.1
+724.6 5.5
+725.5 2.4
+726.3 2.5
+727.3 2.2
+728.1 1.5
+728.8 1.7
+741.1 2.4
+744.5 1.6
+745.5 2.2
+748.3 2.5
+751.2 1.2
+754.4 2.0
+758.8 2.0
+760.4 4.1
+767.5 3.5
+768.4 9.5
+769.4 13.1
+770.3 1.1
+775.5 3.7
+776.4 4.8
+779.8 2.2
+786.5 34.5
+787.5 9.8
+791.2 1.7
+795.5 2.7
+817.2 9.8
+818.4 3.2
+827.5 4.6
+858.9 1.5
+S	135	135	1004.99
+Z	2	2008.97
+284.0 2.2
+285.3 0.8
+287.0 1.9
+289.3 0.6
+294.3 33.4
+295.4 2.9
+298.0 0.5
+301.1 7.6
+302.1 1.3
+303.3 1.0
+306.5 0.6
+307.3 1.4
+308.0 0.5
+309.5 0.4
+311.0 3.2
+312.2 3.3
+313.1 1.5
+314.6 2.9
+315.3 1.9
+316.2 3.5
+317.2 0.9
+319.3 2.3
+320.4 0.3
+323.4 0.9
+324.2 0.4
+325.5 1.3
+326.3 18.0
+327.4 5.2
+329.2 6.3
+331.1 1.0
+333.4 4.3
+334.4 0.8
+335.3 1.3
+336.3 0.3
+338.4 0.9
+339.4 4.1
+340.0 0.5
+341.1 0.9
+343.1 2.7
+344.3 2.7
+346.1 0.3
+347.8 3.2
+350.4 3.8
+351.2 4.1
+352.2 10.5
+353.2 5.8
+355.3 2.2
+356.6 1.7
+357.5 1.1
+358.1 0.4
+359.6 1.7
+360.4 5.0
+361.3 1.1
+363.3 1.7
+365.4 5.2
+366.1 0.9
+368.1 9.0
+369.1 18.8
+370.2 3.4
+371.1 1.0
+372.3 1.6
+373.2 6.6
+374.2 4.2
+375.4 2.3
+377.1 1.2
+378.3 0.9
+381.1 5.4
+382.3 4.9
+383.5 1.4
+384.2 2.4
+385.4 7.6
+386.3 16.5
+387.0 5.2
+388.4 2.9
+389.3 2.2
+390.2 2.7
+391.4 0.6
+392.3 0.8
+393.3 5.3
+394.3 0.8
+395.8 5.2
+396.6 9.6
+397.8 6.8
+399.0 1.5
+399.7 3.6
+401.8 1.5
+402.6 3.3
+404.1 0.6
+405.8 1.6
+407.2 33.6
+408.3 8.0
+409.3 1.8
+410.8 6.9
+411.5 8.3
+412.3 1.3
+413.0 2.4
+414.2 26.5
+415.4 9.0
+416.4 4.5
+417.0 0.4
+418.5 1.7
+419.2 0.6
+420.3 0.8
+421.2 7.6
+422.3 4.1
+423.6 0.5
+424.4 3.3
+425.2 3.0
+426.3 5.5
+428.4 9.1
+430.2 1.7
+433.0 3.6
+435.3 1.2
+436.2 0.4
+437.3 6.9
+438.2 0.9
+439.3 23.5
+440.3 13.6
+441.2 3.2
+442.5 9.6
+444.2 6.4
+445.3 2.0
+447.5 1.4
+448.3 0.7
+449.4 3.0
+450.3 1.7
+451.1 2.0
+452.1 2.6
+453.2 1.2
+454.4 3.1
+455.3 6.6
+456.3 2.4
+457.3 2.7
+459.5 6.4
+461.2 2.2
+464.6 0.5
+465.3 5.3
+466.3 2.3
+467.3 2.4
+468.3 4.7
+470.4 2.4
+471.6 11.0
+472.6 0.4
+473.3 6.7
+474.4 5.3
+475.3 4.0
+476.2 3.2
+477.2 1.2
+478.4 1.9
+479.5 1.9
+480.1 1.1
+481.2 2.4
+482.3 32.6
+483.3 20.3
+484.3 4.3
+485.3 4.9
+486.3 6.2
+487.3 4.4
+488.4 2.8
+489.5 1.1
+490.6 1.4
+491.2 1.2
+492.3 0.7
+493.3 4.1
+494.4 4.3
+495.2 4.6
+496.4 29.4
+497.3 10.0
+499.5 6.5
+500.1 0.7
+500.9 3.3
+501.7 2.1
+502.3 4.7
+503.2 5.0
+504.4 5.4
+505.5 1.1
+506.4 0.6
+507.9 2.4
+509.3 4.1
+510.6 4.8
+511.4 3.2
+512.4 5.5
+513.3 3.2
+514.3 4.5
+515.3 17.2
+515.9 2.8
+516.7 4.1
+518.2 5.3
+520.4 269.5
+521.4 101.7
+522.4 19.1
+523.3 6.3
+524.1 1.4
+525.7 2.8
+526.5 1.0
+527.2 4.3
+528.4 3.5
+529.3 8.4
+530.3 4.8
+531.2 1.8
+532.1 4.2
+533.2 3.4
+534.2 1.3
+535.6 3.2
+536.3 6.7
+537.4 2.5
+538.4 1.0
+539.4 5.0
+540.3 6.1
+541.4 9.7
+542.2 3.3
+543.2 5.6
+544.1 2.0
+545.4 3.2
+546.3 11.3
+548.7 1.0
+549.4 3.8
+550.6 1.3
+551.3 2.3
+552.9 1.2
+553.5 1.8
+554.3 1.0
+555.5 1.6
+556.4 15.2
+557.4 8.6
+558.4 23.2
+559.3 9.5
+560.3 1.1
+561.2 4.8
+562.4 1.9
+563.5 3.6
+564.2 1.3
+565.2 12.2
+566.4 5.5
+567.4 10.2
+568.4 10.7
+569.3 4.4
+570.4 5.4
+571.5 2.2
+572.7 4.8
+573.4 3.3
+574.4 10.0
+575.2 2.1
+576.2 3.6
+577.4 1.0
+578.4 0.3
+579.2 5.4
+580.0 5.3
+582.1 9.5
+583.1 7.6
+584.4 2.3
+585.5 6.6
+586.3 22.2
+587.3 11.8
+588.1 3.0
+589.4 3.8
+590.5 0.9
+591.8 1.3
+592.4 2.2
+594.3 8.7
+595.4 43.1
+596.4 9.3
+597.3 4.3
+599.3 10.4
+600.3 7.9
+601.3 0.5
+604.2 22.3
+605.2 6.2
+606.1 2.0
+607.2 2.3
+608.4 1.7
+609.4 6.6
+610.4 5.4
+611.7 6.2
+612.5 19.6
+613.4 4.2
+614.3 1.2
+615.3 2.3
+616.6 3.7
+617.3 17.6
+618.3 4.6
+619.5 7.9
+620.4 2.6
+621.0 1.8
+622.3 0.7
+623.6 3.5
+624.3 0.3
+626.0 1.6
+627.3 17.0
+628.4 12.7
+629.3 7.2
+630.2 8.0
+631.2 4.8
+632.3 2.3
+634.2 32.7
+635.3 33.8
+636.4 8.8
+638.4 5.7
+639.3 1.6
+640.7 2.1
+641.8 3.9
+642.4 3.0
+643.3 4.1
+644.2 7.7
+645.5 9.9
+646.4 8.6
+647.6 0.4
+648.2 5.3
+649.0 2.6
+649.6 0.9
+650.4 1.9
+651.1 3.6
+652.3 2.5
+653.3 1.3
+654.3 4.6
+655.4 18.4
+656.4 8.5
+657.4 12.3
+658.6 20.4
+659.5 5.6
+660.4 6.7
+661.6 5.2
+662.5 11.8
+663.5 1.1
+664.6 5.9
+665.3 9.7
+666.3 6.3
+667.5 2.9
+668.6 5.0
+670.2 17.8
+671.0 6.4
+672.2 9.4
+673.2 9.7
+674.3 3.4
+675.3 6.2
+676.4 7.3
+677.5 6.5
+678.3 19.5
+679.2 14.9
+680.3 5.5
+681.2 5.3
+681.9 5.2
+682.8 7.8
+683.4 4.6
+684.3 12.3
+685.5 2.0
+686.4 8.1
+687.5 9.9
+688.3 7.6
+689.3 6.6
+690.6 8.7
+691.7 8.3
+692.5 5.6
+693.7 5.2
+694.7 4.8
+695.6 4.7
+696.5 1.9
+697.4 5.0
+698.6 5.9
+699.5 3.7
+701.2 16.8
+702.1 7.7
+703.1 1.7
+704.8 3.8
+705.5 10.0
+706.4 5.0
+707.4 4.9
+708.5 8.3
+709.4 3.8
+710.2 14.7
+711.6 12.2
+712.5 6.0
+713.3 2.7
+714.4 49.0
+715.4 27.8
+716.4 2.5
+717.6 9.3
+718.4 5.3
+719.2 6.6
+721.0 1.9
+723.4 2.2
+724.5 6.5
+725.6 11.2
+726.5 3.6
+727.5 4.2
+728.3 36.5
+729.4 24.7
+730.4 14.3
+732.4 350.2
+733.4 136.5
+734.4 26.6
+735.6 15.5
+736.5 11.6
+737.5 5.1
+738.2 3.5
+739.5 2.4
+740.6 8.0
+741.4 11.3
+742.4 17.9
+743.2 22.9
+744.2 18.8
+745.4 15.9
+746.3 8.3
+747.5 11.6
+748.6 4.4
+749.5 13.0
+750.3 10.1
+751.3 8.3
+752.0 19.7
+753.0 1.9
+754.3 4.4
+755.3 5.3
+756.6 9.0
+757.4 23.5
+758.3 22.1
+759.2 9.4
+760.3 46.7
+761.4 8.0
+762.4 14.2
+763.8 11.0
+764.9 8.4
+765.6 6.3
+766.2 7.0
+768.2 13.9
+769.3 8.6
+770.3 6.5
+771.7 2.2
+772.4 7.2
+773.1 3.2
+773.8 7.4
+774.5 10.6
+775.2 10.7
+776.2 2.1
+777.0 6.0
+777.7 5.8
+779.3 8.6
+780.4 10.1
+781.3 7.6
+782.6 4.8
+783.3 2.7
+784.6 6.2
+785.2 10.1
+786.3 3.7
+787.8 14.5
+788.7 14.4
+789.4 1.6
+790.2 1.7
+791.4 25.2
+792.4 15.7
+793.5 5.9
+794.5 11.1
+795.3 0.9
+797.2 147.2
+798.1 44.4
+799.1 31.1
+800.6 82.3
+801.7 33.1
+802.8 15.4
+803.5 2.7
+804.4 2.4
+805.3 11.1
+806.5 7.6
+807.5 15.4
+808.9 16.8
+809.7 4.2
+811.3 17.0
+812.5 7.6
+813.3 5.7
+814.4 3.6
+815.3 9.2
+816.3 12.1
+817.5 8.8
+818.3 4.0
+819.5 8.6
+820.5 5.4
+821.2 4.8
+822.7 2.6
+823.8 10.9
+824.6 13.3
+825.8 5.9
+826.6 3.5
+827.9 4.7
+828.6 13.7
+829.7 4.5
+830.4 6.2
+831.4 5.6
+832.7 2.2
+833.8 10.3
+835.0 13.1
+836.2 9.9
+837.5 21.0
+838.8 5.8
+840.3 13.5
+841.2 6.1
+842.3 8.5
+843.3 22.9
+844.2 9.6
+845.0 9.4
+845.7 2.5
+846.4 3.9
+847.4 9.8
+848.2 61.6
+849.1 36.0
+850.1 5.3
+851.1 8.0
+852.2 11.5
+853.2 33.1
+854.2 44.6
+855.4 28.6
+856.5 16.8
+857.3 101.4
+858.1 54.6
+859.2 13.8
+860.4 27.6
+861.4 29.2
+862.5 16.6
+863.4 17.6
+864.4 9.8
+865.1 10.8
+866.1 13.8
+866.8 6.7
+867.5 1.1
+868.5 12.0
+869.7 9.0
+870.5 35.6
+871.4 47.2
+872.6 28.5
+873.5 68.2
+874.6 64.7
+875.6 27.9
+876.5 9.4
+877.5 7.4
+878.2 5.6
+879.1 1.5
+880.3 5.3
+881.3 19.9
+882.2 216.6
+883.2 68.8
+884.1 10.8
+885.4 8.6
+886.4 11.0
+887.4 10.7
+888.5 242.5
+889.5 133.6
+890.5 45.8
+891.3 8.7
+892.3 13.6
+893.7 4.9
+894.9 21.3
+896.2 17.8
+897.3 19.5
+899.2 14.2
+900.5 11.8
+901.3 3.6
+902.6 7.0
+903.3 5.2
+903.9 2.0
+905.0 2.6
+906.3 18.5
+907.3 16.0
+908.2 11.2
+909.2 7.4
+911.1 2.0
+912.1 3.9
+912.8 15.5
+913.5 15.9
+914.4 9.9
+915.3 8.2
+916.7 28.8
+917.6 5.7
+918.4 3.9
+919.5 14.4
+920.5 7.4
+921.5 57.7
+922.2 39.4
+923.2 16.6
+924.7 4.0
+926.3 16.7
+927.8 12.4
+928.6 18.4
+930.6 162.0
+931.7 123.2
+932.5 33.4
+933.2 14.3
+934.2 9.3
+935.3 4.6
+936.8 9.0
+937.6 28.2
+938.4 6.4
+939.6 36.1
+940.6 14.2
+941.6 11.1
+943.0 3.5
+943.8 6.1
+944.9 2.3
+945.6 5.8
+946.5 5.8
+947.2 1.9
+948.0 4.4
+948.8 17.4
+949.6 20.7
+950.9 19.4
+951.9 17.0
+953.3 1.1
+954.3 8.4
+955.4 9.1
+956.3 14.4
+957.3 5.7
+958.2 128.8
+959.2 51.1
+960.3 34.1
+961.3 20.9
+962.5 2.4
+963.5 28.7
+964.5 16.7
+965.4 3.6
+966.5 1.8
+967.4 10.4
+968.8 32.0
+969.5 18.4
+970.4 13.8
+971.5 7.5
+972.3 18.6
+973.7 36.8
+974.5 16.2
+975.4 10.2
+976.1 14.6
+977.2 13.7
+978.0 9.0
+979.6 3.4
+980.5 1.0
+981.6 28.9
+982.7 29.7
+983.7 29.3
+984.7 44.8
+985.8 72.0
+986.5 51.2
+987.2 69.1
+988.5 54.4
+989.5 21.1
+990.4 15.1
+991.4 5.3
+992.6 7.0
+993.7 19.2
+994.8 282.8
+995.7 63.7
+996.6 9.4
+997.8 1.0
+998.4 0.3
+999.8 1.6
+1005.1 6.3
+1005.7 1.7
+1006.6 1.3
+1007.8 3.1
+1008.7 4.8
+1009.6 7.2
+1010.4 0.9
+1011.1 1.8
+1012.3 2.4
+1013.5 2.2
+1015.3 5.3
+1016.2 4.4
+1017.4 4.5
+1018.5 6.0
+1019.4 7.1
+1020.6 5.6
+1021.4 1.7
+1023.0 0.3
+1024.7 4.3
+1025.3 5.2
+1026.5 4.2
+1027.5 26.5
+1028.5 9.8
+1029.5 4.2
+1030.7 8.2
+1031.6 42.7
+1032.4 15.9
+1033.7 10.7
+1034.5 2.3
+1036.3 5.7
+1037.0 1.0
+1038.9 9.9
+1039.6 1.0
+1040.6 0.4
+1042.7 7.4
+1043.5 3.5
+1044.4 1.3
+1046.4 8.2
+1047.1 1.7
+1048.5 2.1
+1049.2 6.2
+1052.3 2.6
+1053.3 2.1
+1054.5 1.0
+1055.7 6.3
+1056.3 2.8
+1057.4 35.4
+1058.1 10.0
+1059.5 1.5
+1060.4 1.8
+1062.5 0.7
+1063.5 1.3
+1064.6 6.2
+1065.3 4.3
+1066.3 4.8
+1067.6 1.2
+1068.8 8.8
+1069.7 2.3
+1070.6 8.1
+1071.5 3.4
+1072.4 4.9
+1073.5 28.4
+1074.5 13.3
+1075.3 10.1
+1076.4 5.8
+1077.3 4.9
+1078.5 7.9
+1079.4 0.6
+1080.3 0.6
+1082.6 18.7
+1083.6 10.1
+1084.6 12.0
+1085.6 7.7
+1086.5 5.2
+1087.3 4.6
+1088.6 4.9
+1090.5 8.6
+1091.8 3.4
+1092.6 2.1
+1093.5 4.5
+1094.5 4.1
+1095.4 2.4
+1096.5 3.4
+1098.7 1.1
+1100.5 120.4
+1101.5 68.8
+1102.4 28.3
+1103.3 13.7
+1104.5 7.4
+1105.9 2.7
+1107.2 1.4
+1108.5 1.7
+1109.9 0.7
+1113.5 1.8
+1114.5 7.9
+1115.4 3.4
+1116.3 5.8
+1117.5 9.3
+1118.4 42.3
+1119.4 40.7
+1120.3 20.4
+1121.5 6.1
+1122.4 9.0
+1123.4 12.1
+1124.0 1.2
+1124.8 6.6
+1125.7 4.7
+1126.7 2.6
+1127.4 5.3
+1128.4 2.1
+1130.4 13.9
+1131.5 12.4
+1132.7 15.1
+1133.8 4.5
+1134.6 5.8
+1135.3 0.3
+1136.4 4.8
+1137.1 2.4
+1139.3 24.9
+1140.0 7.2
+1140.7 5.7
+1141.7 9.1
+1142.5 0.9
+1143.6 2.4
+1144.3 2.0
+1145.4 1.5
+1146.8 0.7
+1148.2 2.0
+1149.6 9.2
+1151.4 14.6
+1152.5 8.9
+1153.5 4.7
+1154.1 1.8
+1155.7 9.1
+1156.8 7.6
+1157.9 7.6
+1159.6 3.6
+1160.5 1.5
+1163.2 7.7
+1165.2 4.2
+1166.3 3.4
+1167.0 2.0
+1168.3 3.3
+1169.5 98.1
+1170.6 37.4
+1171.7 8.6
+1172.8 1.3
+1174.5 7.0
+1175.8 6.9
+1177.1 2.5
+1178.4 4.7
+1179.6 1.9
+1180.6 1.9
+1181.6 1.5
+1182.6 0.8
+1183.4 3.5
+1184.6 6.2
+1186.4 20.4
+1187.5 19.9
+1188.7 16.9
+1189.7 13.5
+1190.9 7.6
+1191.9 6.3
+1193.2 2.0
+1194.2 4.2
+1194.9 1.2
+1197.4 0.4
+1198.6 3.7
+1200.4 3.0
+1201.4 1.5
+1202.6 5.5
+1203.7 4.2
+1204.6 2.1
+1205.5 4.6
+1207.5 6.3
+1208.4 5.2
+1209.4 3.0
+1210.6 0.8
+1211.4 5.4
+1212.0 2.0
+1212.7 0.8
+1213.5 3.8
+1214.4 1.2
+1215.3 6.3
+1216.5 63.8
+1217.5 21.4
+1218.9 4.3
+1220.3 7.3
+1222.5 3.6
+1223.4 1.7
+1224.6 9.5
+1225.8 6.1
+1226.7 2.8
+1227.5 2.7
+1228.4 1.0
+1229.7 2.9
+1230.5 9.8
+1231.5 6.9
+1232.8 6.3
+1233.7 7.9
+1234.8 11.0
+1235.5 6.4
+1236.4 1.0
+1237.9 3.7
+1238.5 1.3
+1240.6 54.8
+1241.5 24.4
+1242.4 17.8
+1243.6 38.7
+1244.6 15.8
+1245.6 14.0
+1246.5 9.5
+1248.1 3.7
+1248.9 13.1
+1249.7 0.5
+1250.3 3.3
+1252.0 0.8
+1253.1 0.4
+1254.5 0.8
+1256.0 7.3
+1256.7 10.3
+1257.6 12.0
+1258.2 12.5
+1258.9 19.9
+1260.6 110.3
+1261.6 58.3
+1262.7 40.7
+1263.7 9.6
+1264.6 6.4
+1265.8 8.5
+1266.8 5.3
+1267.4 10.4
+1268.9 2.3
+1269.5 3.9
+1270.6 2.1
+1271.6 2.8
+1272.7 2.6
+1274.5 587.5
+1275.6 402.7
+1276.6 144.3
+1277.6 60.8
+1278.6 11.6
+1279.8 4.3
+1280.8 3.8
+1282.6 3.3
+1283.2 1.8
+1283.9 1.6
+1284.5 3.6
+1285.4 2.5
+1286.5 8.1
+1287.7 4.7
+1288.8 4.8
+1290.0 4.0
+1291.4 10.6
+1292.6 2.3
+1293.4 3.7
+1294.5 4.0
+1296.0 20.5
+1296.7 1.8
+1297.4 4.1
+1299.5 27.7
+1300.6 18.8
+1301.7 12.5
+1302.4 5.0
+1303.6 2.5
+1304.6 7.0
+1305.7 13.1
+1306.7 11.6
+1307.6 7.2
+1309.8 0.9
+1310.7 0.5
+1311.7 2.0
+1312.6 3.9
+1314.8 1.6
+1315.6 3.5
+1316.4 5.9
+1317.8 12.7
+1318.7 11.5
+1319.7 6.1
+1320.6 21.1
+1321.5 1.7
+1322.6 0.7
+1324.8 3.9
+1325.5 1.8
+1328.2 1.2
+1330.6 3.2
+1331.6 1.5
+1332.8 3.4
+1333.6 0.6
+1335.3 2.8
+1336.2 1.7
+1337.4 1.5
+1338.4 6.4
+1339.3 7.3
+1340.3 3.4
+1342.4 14.9
+1343.6 32.4
+1344.7 20.0
+1345.7 16.8
+1346.8 1.9
+1348.0 1.1
+1348.7 5.9
+1349.8 1.6
+1351.1 3.4
+1352.6 3.1
+1353.5 5.9
+1354.2 1.7
+1354.9 4.2
+1355.8 2.4
+1356.6 11.3
+1357.5 12.8
+1358.5 10.0
+1359.4 2.5
+1360.5 9.6
+1361.6 111.6
+1362.7 70.7
+1363.7 62.0
+1364.5 23.7
+1365.6 3.6
+1366.4 0.8
+1367.2 3.1
+1368.9 7.9
+1369.9 19.0
+1371.5 30.1
+1372.4 33.5
+1373.5 20.7
+1374.6 10.7
+1375.5 3.3
+1376.4 6.6
+1377.4 9.5
+1378.4 4.9
+1379.5 20.8
+1380.4 8.7
+1381.9 3.5
+1383.1 2.4
+1383.9 3.2
+1384.6 0.7
+1385.8 2.7
+1386.8 6.6
+1387.6 3.6
+1388.8 11.7
+1389.6 15.5
+1390.6 9.3
+1391.5 4.4
+1392.5 1.8
+1393.7 0.7
+1396.0 7.8
+1397.3 8.9
+1398.8 1.6
+1399.4 1.2
+1400.3 0.5
+1401.5 3.5
+1403.1 6.8
+1404.5 4.0
+1405.1 1.2
+1406.8 2.8
+1408.5 2.3
+1411.1 1.6
+1412.1 6.1
+1412.8 0.3
+1414.6 13.2
+1415.6 16.4
+1416.7 10.4
+1418.0 4.1
+1419.1 11.8
+1419.8 3.2
+1420.7 4.9
+1421.7 10.2
+1422.6 13.4
+1424.3 6.4
+1425.0 20.8
+1425.7 2.9
+1427.6 1.8
+1429.7 1.1
+1431.9 5.4
+1432.7 82.5
+1433.7 108.8
+1434.8 33.4
+1435.7 21.4
+1436.9 5.8
+1439.8 5.0
+1440.6 1.5
+1441.6 9.0
+1442.6 2.7
+1443.3 1.3
+1444.2 2.5
+1445.5 0.7
+1446.7 15.1
+1447.7 9.8
+1448.7 7.9
+1449.6 0.9
+1450.7 1.4
+1451.8 2.4
+1453.3 4.8
+1454.4 3.8
+1455.5 9.3
+1456.5 1.0
+1457.1 2.0
+1457.9 4.5
+1459.8 1.4
+1461.4 1.1
+1464.7 13.4
+1465.7 7.1
+1466.7 5.6
+1467.6 2.5
+1468.7 11.3
+1469.7 33.3
+1470.7 27.1
+1471.5 8.4
+1472.9 3.0
+1473.7 1.8
+1474.8 8.9
+1476.7 2.3
+1479.8 0.4
+1481.6 0.7
+1482.4 1.5
+1484.8 4.1
+1486.6 565.9
+1487.6 428.5
+1488.6 202.8
+1489.6 108.8
+1490.6 46.7
+1491.6 21.0
+1492.5 8.1
+1493.8 4.1
+1494.7 9.3
+1495.6 5.8
+1497.0 0.7
+1498.7 0.8
+1500.1 1.1
+1501.7 1.6
+1503.8 1.6
+1504.5 3.1
+1505.3 5.3
+1506.5 2.0
+1510.4 10.5
+1511.5 4.1
+1512.7 1.2
+1513.5 4.9
+1514.6 5.1
+1515.6 2.2
+1516.4 2.5
+1517.7 2.4
+1519.0 1.4
+1519.9 4.7
+1520.9 1.5
+1523.3 1.3
+1524.2 0.4
+1526.6 0.7
+1527.7 3.6
+1528.6 2.8
+1529.9 1.7
+1531.3 1.6
+1531.9 0.3
+1532.6 2.0
+1533.6 1.4
+1534.7 1.7
+1535.6 0.6
+1536.5 2.3
+1537.5 1.3
+1538.4 1.1
+1539.6 3.3
+1540.9 3.0
+1541.7 2.0
+1546.1 0.9
+1547.5 0.8
+1548.5 2.5
+1554.3 2.2
+1556.4 2.4
+1557.4 8.7
+1558.5 1.5
+1559.4 0.9
+1561.2 3.1
+1563.4 1.8
+1566.6 7.4
+1567.4 2.3
+1568.7 2.9
+1569.6 5.7
+1570.7 3.4
+1571.9 2.4
+1572.8 2.4
+1573.5 1.2
+1574.6 18.1
+1575.6 39.4
+1576.7 23.7
+1577.8 2.4
+1578.6 9.7
+1579.7 1.4
+1581.5 1.1
+1582.5 5.9
+1583.3 3.0
+1584.0 1.6
+1585.7 4.1
+1586.6 0.7
+1587.9 1.8
+1588.6 1.6
+1590.5 1.9
+1592.7 137.5
+1593.7 107.6
+1594.7 55.0
+1595.9 25.8
+1596.8 9.1
+1597.7 2.2
+1599.2 19.9
+1599.8 61.2
+1600.7 55.3
+1601.6 42.0
+1602.6 15.1
+1603.6 6.7
+1607.6 4.3
+1609.5 0.5
+1615.1 0.9
+1616.7 3.4
+1617.7 4.0
+1618.6 6.9
+1619.6 14.2
+1620.8 0.4
+1622.0 1.1
+1624.9 1.1
+1625.9 2.3
+1626.7 0.7
+1627.7 2.0
+1628.7 0.3
+1629.5 1.7
+1630.8 1.2
+1632.0 0.4
+1632.8 0.6
+1634.7 0.5
+1635.8 4.1
+1637.6 5.9
+1638.9 2.0
+1642.2 0.9
+1645.6 1.1
+1646.4 1.1
+1647.5 1.4
+1650.2 0.5
+1651.4 1.5
+1655.0 4.6
+1656.9 3.3
+1659.7 1.8
+1660.8 0.3
+1661.9 2.1
+1663.6 3.1
+1666.6 0.4
+1669.7 4.1
+1670.9 3.7
+1671.8 0.7
+1673.3 2.5
+1674.0 7.6
+1675.1 2.3
+1676.4 4.9
+1680.0 1.8
+1684.7 12.2
+1685.9 11.9
+1687.2 12.0
+1688.4 7.7
+1689.1 0.3
+1691.5 2.2
+1694.4 3.0
+1695.1 1.2
+1695.7 10.4
+1696.6 10.7
+1697.6 3.5
+1698.6 3.3
+1703.6 0.3
+1704.7 0.7
+1706.0 5.4
+1706.7 9.1
+1707.8 5.1
+1709.0 0.6
+1710.6 1.6
+1712.7 181.9
+1713.8 179.7
+1714.8 101.2
+1715.8 38.8
+1716.8 23.5
+1717.9 4.7
+1719.8 0.5
+1728.7 0.6
+1730.7 2.6
+1731.9 1.7
+1737.1 2.1
+1739.3 0.4
+1745.2 4.0
+1747.1 11.1
+1747.9 0.2
+1760.5 0.9
+1762.7 4.9
+1764.1 12.8
+1764.9 3.7
+1766.0 2.4
+1770.5 2.2
+1772.7 0.8
+1776.7 1.0
+1784.8 0.3
+1788.6 2.3
+1799.4 0.5
+1801.3 1.1
+1802.7 0.7
+1806.4 1.0
+1823.4 0.7
+1828.6 0.5
+1832.3 2.1
+1833.2 1.7
+1834.3 2.7
+1838.3 0.4
+1840.6 0.2
+1841.9 3.1
+1843.1 1.7
+1843.8 3.4
+1844.9 1.8
+1859.9 46.8
+1860.9 40.9
+1862.0 21.4
+1863.0 17.8
+1864.2 4.7
+1865.0 0.9
+1878.1 14.0
+1879.0 10.8
+1879.9 3.9
+1881.2 1.3
+1882.1 0.7
+1883.2 1.8
+1967.6 1.1
+S	136	136	717.07
+I	ID	204
+I	RTime	10.0822
+Z	1	717.07
+212.9 4.3
+216.9 3.0
+229.2 1.2
+257.2 5.3
+258.3 2.5
+266.3 2.2
+272.1 1.5
+273.0 0.6
+276.0 3.4
+287.2 1.2
+296.8 4.0
+300.0 6.0
+300.9 1.2
+309.3 5.8
+311.0 2.2
+313.2 2.4
+317.4 1.8
+329.1 4.1
+330.4 3.0
+331.2 5.3
+332.4 4.0
+347.4 3.2
+352.5 2.0
+367.5 1.6
+371.3 1.7
+372.4 3.0
+373.6 1.2
+375.1 1.8
+381.3 14.3
+382.9 1.7
+383.6 3.7
+385.3 1.6
+387.3 2.4
+388.3 4.8
+394.3 4.3
+395.5 2.7
+401.2 4.6
+406.3 3.0
+409.0 1.5
+410.1 4.6
+414.3 2.4
+422.4 2.4
+423.1 8.8
+425.4 5.6
+440.3 4.6
+441.4 6.6
+444.4 2.9
+449.0 10.6
+452.3 2.7
+457.3 8.5
+458.4 4.5
+459.1 4.3
+473.3 1.2
+474.4 7.6
+475.4 18.1
+480.0 4.1
+484.4 4.5
+489.5 3.0
+490.9 2.7
+501.7 8.6
+502.3 5.3
+508.3 1.8
+517.4 2.0
+518.7 2.9
+528.5 1.3
+532.2 1.8
+538.8 2.2
+542.4 6.9
+543.4 2.4
+550.2 1.7
+554.1 2.0
+568.3 1.2
+570.4 1.5
+571.0 2.5
+573.5 2.7
+588.3 7.3
+589.1 4.5
+591.3 2.4
+601.3 3.7
+604.5 1.3
+609.1 3.5
+609.9 7.1
+612.3 3.2
+618.3 4.0
+625.3 3.0
+634.4 4.1
+639.5 2.7
+649.7 5.4
+656.7 1.3
+658.8 7.0
+660.5 2.5
+664.3 1.2
+665.6 2.2
+672.6 2.5
+679.0 4.5
+680.5 1.1
+681.4 9.3
+682.4 18.7
+683.6 4.1
+684.5 2.4
+685.3 2.5
+687.3 4.0
+698.4 23.2
+699.4 36.9
+700.4 21.1
+707.4 6.8
+708.1 4.4
+814.4 8.1
+1063.6 2.4
+S	137	137	497.29
+Z	3	1489.85
+172.3 88.2
+217.0 113.9
+229.1 148.5
+234.1 105.2
+238.9 122.3
+258.1 182.9
+261.2 218.3
+262.0 468.4
+285.2 70.5
+286.2 148.4
+291.1 105.4
+300.1 122.5
+317.3 694.2
+329.3 497.7
+330.2 329.6
+333.0 174.4
+338.9 896.8
+343.7 1290.9
+353.0 1284.7
+357.9 172.2
+375.2 548.1
+376.4 413.2
+378.1 105.4
+384.7 646.1
+388.4 163.4
+392.3 97.0
+393.8 2156.7
+394.4 176.5
+398.3 547.4
+412.2 369.9
+416.4 720.2
+417.3 990.0
+432.2 174.2
+439.9 320.3
+441.4 199.0
+443.3 88.2
+444.3 537.0
+451.0 88.0
+451.9 310.6
+452.7 253.0
+459.4 165.6
+460.1 354.4
+469.5 340.2
+471.6 96.7
+473.6 851.3
+474.4 671.3
+476.4 387.5
+478.4 474.1
+479.3 315.9
+481.9 156.3
+482.6 327.0
+484.2 433.9
+486.5 674.7
+487.8 460.9
+496.6 227.0
+497.3 96.4
+511.4 199.8
+515.8 259.6
+516.8 183.0
+532.6 506.0
+534.5 370.2
+535.8 208.7
+537.9 232.2
+541.2 158.0
+544.5 1671.0
+545.5 542.5
+549.5 88.0
+552.8 424.2
+554.2 122.5
+558.6 401.1
+563.5 139.8
+569.4 312.2
+570.2 105.3
+573.3 279.2
+578.3 574.6
+582.3 301.6
+583.1 131.3
+587.3 1150.8
+588.0 316.5
+588.7 284.9
+589.4 432.6
+595.1 384.2
+596.7 446.9
+601.8 353.3
+604.3 163.3
+605.4 624.0
+606.2 405.2
+609.3 189.1
+610.8 327.0
+615.0 2741.8
+615.7 327.3
+616.4 260.7
+626.1 426.9
+631.6 274.3
+633.0 270.1
+635.5 540.1
+636.1 487.5
+639.1 182.9
+640.6 191.4
+643.0 464.8
+644.8 1556.8
+646.8 312.2
+648.4 96.8
+650.3 89.3
+657.5 1389.0
+659.5 164.5
+660.9 229.8
+663.5 122.5
+669.2 209.9
+672.4 174.3
+686.3 887.3
+687.6 249.0
+700.4 113.6
+704.3 361.4
+705.7 165.5
+727.3 87.9
+769.6 130.9
+775.9 139.7
+786.6 2762.1
+787.4 765.2
+800.2 209.4
+815.3 255.6
+816.4 130.9
+833.2 651.3
+834.3 410.1
+856.1 122.4
+878.5 79.4
+896.2 148.4
+912.7 163.1
+915.5 70.8
+928.4 304.8
+969.2 174.3
+986.8 114.0
+1041.4 191.6
+1082.1 148.4
+1143.1 139.9
+1212.5 122.6
+1228.9 335.7
+1231.6 96.6
+1244.4 302.7
+S	138	138	719.06
+I	ID	218
+I	RTime	10.7920
+Z	1	719.06
+240.3 1.7
+242.4 1.7
+243.1 1.7
+251.9 1.1
+257.2 1.2
+276.4 2.2
+281.0 1.7
+284.3 1.6
+295.3 0.8
+309.1 5.0
+310.4 2.2
+311.4 3.0
+312.3 2.2
+326.2 3.0
+327.3 1.5
+328.6 1.7
+330.6 1.3
+331.3 6.6
+339.3 6.9
+341.1 1.2
+346.4 1.7
+347.4 4.4
+348.5 3.4
+349.2 1.2
+355.0 1.2
+356.3 1.6
+368.4 3.2
+372.3 2.7
+373.3 2.4
+386.5 4.3
+388.3 1.7
+391.2 1.2
+402.2 8.3
+405.3 2.9
+414.3 1.0
+415.5 3.4
+418.5 2.4
+425.3 2.7
+430.0 1.2
+431.0 1.1
+436.0 2.7
+442.4 4.6
+443.6 4.4
+452.5 4.6
+454.9 1.2
+456.4 2.5
+457.2 3.2
+458.3 15.3
+459.0 1.5
+459.7 1.2
+460.4 3.7
+463.9 7.8
+469.1 2.7
+471.2 2.5
+476.4 21.7
+477.4 5.5
+482.7 4.0
+483.3 6.8
+486.3 1.7
+487.2 1.0
+498.6 1.2
+500.1 5.9
+503.0 13.3
+504.5 1.8
+505.5 3.5
+509.4 1.8
+510.9 7.9
+514.4 1.2
+517.1 5.5
+529.3 2.2
+533.2 1.8
+537.2 1.8
+541.4 2.4
+544.0 3.7
+572.5 7.3
+578.5 1.5
+585.5 2.2
+587.5 6.1
+590.6 10.1
+593.2 4.9
+594.6 1.6
+597.6 2.2
+599.6 3.9
+603.5 5.8
+604.4 1.2
+611.6 3.2
+612.5 1.3
+613.4 1.3
+614.7 8.1
+615.5 1.5
+616.3 2.0
+619.1 2.9
+621.4 6.3
+626.7 1.2
+629.2 2.2
+640.5 1.7
+659.0 1.0
+660.5 7.0
+662.4 3.0
+665.8 55.4
+666.7 21.6
+674.2 12.1
+675.5 10.8
+676.6 3.4
+682.5 9.1
+683.3 2.4
+684.3 3.2
+700.3 29.6
+701.4 31.5
+702.4 7.5
+706.9 7.5
+709.8 1.5
+753.3 1.7
+776.5 2.7
+824.4 4.0
+826.4 3.0
+900.3 1.6
+901.6 5.5
+902.5 1.8
+916.5 3.2
+1002.5 1.8
+1011.7 1.3
+1015.7 2.5
+1019.2 2.0
+1153.5 2.9
+1162.7 1.7
+1235.8 2.4
+1291.7 5.0
+1299.6 2.7
+S	139	139	1032.09
+Z	3	3094.25
+292.0 0.7
+298.2 1.3
+299.4 0.4
+312.1 0.4
+316.4 1.2
+325.3 7.7
+326.5 1.7
+338.2 1.2
+341.3 1.9
+342.3 1.4
+343.2 0.6
+354.9 0.5
+356.6 2.5
+362.7 1.7
+371.3 2.4
+380.3 1.3
+382.9 0.9
+384.0 0.4
+389.3 5.0
+395.1 2.0
+398.2 6.5
+401.3 2.3
+408.4 1.0
+412.9 3.1
+413.5 6.6
+414.5 1.2
+416.5 0.3
+417.3 1.6
+420.1 1.4
+428.1 2.7
+430.1 0.4
+431.4 1.3
+435.1 0.2
+441.2 1.3
+441.9 2.6
+450.5 0.5
+453.3 8.6
+454.3 0.3
+455.3 2.3
+456.4 1.6
+459.3 0.9
+460.3 1.9
+464.4 7.9
+469.2 2.6
+470.4 5.3
+472.5 0.5
+475.2 1.7
+477.2 0.9
+478.0 10.1
+483.3 1.4
+492.2 2.6
+493.6 2.6
+494.4 0.7
+497.7 2.5
+502.2 5.7
+504.6 9.3
+511.2 1.7
+513.4 1.5
+515.4 1.0
+521.2 2.1
+524.1 6.8
+526.2 0.3
+527.3 1.0
+530.3 0.5
+533.4 1.7
+534.5 0.9
+539.4 7.1
+541.4 4.7
+542.1 3.2
+542.7 1.1
+549.4 6.0
+551.4 2.3
+552.6 8.4
+554.5 0.9
+555.3 2.3
+556.4 4.9
+560.5 0.8
+561.3 2.1
+562.9 5.5
+565.4 1.6
+570.3 2.2
+571.9 38.1
+572.5 30.0
+573.2 0.7
+575.3 2.9
+580.2 4.6
+583.3 8.6
+585.1 0.7
+588.4 1.4
+590.5 2.2
+592.2 4.0
+598.1 0.9
+599.4 0.4
+600.5 4.2
+601.4 7.4
+602.6 2.3
+607.6 2.9
+608.2 7.3
+609.0 4.5
+612.9 0.6
+616.3 7.5
+618.5 29.3
+619.6 5.3
+620.7 4.5
+621.5 1.4
+623.0 0.9
+625.6 0.6
+626.5 1.6
+628.5 0.4
+629.4 1.5
+633.3 4.1
+635.2 2.3
+636.8 2.3
+639.4 4.5
+640.9 3.7
+641.5 0.7
+643.6 2.2
+645.6 2.8
+648.1 3.2
+650.1 7.9
+650.8 0.4
+654.1 1.0
+655.3 0.9
+656.3 1.1
+657.3 5.9
+658.1 4.6
+660.6 2.3
+662.3 5.2
+665.1 6.1
+666.4 25.2
+667.5 9.2
+668.6 1.8
+671.4 0.9
+672.3 2.8
+673.4 0.5
+675.6 2.7
+676.2 0.9
+678.6 2.6
+682.4 1.4
+683.7 5.2
+685.2 0.8
+686.3 2.0
+689.5 101.2
+690.4 19.0
+691.2 0.9
+692.1 3.7
+693.6 2.3
+694.6 1.4
+696.9 6.5
+698.3 6.8
+700.3 2.8
+701.1 1.3
+703.4 0.8
+704.4 1.8
+705.5 4.5
+706.7 8.8
+707.4 5.1
+708.0 4.9
+710.9 1.2
+711.8 0.5
+712.8 2.6
+714.5 7.3
+716.5 1.6
+718.7 4.1
+720.8 0.5
+721.4 4.2
+723.8 0.5
+726.3 1.0
+728.5 3.3
+732.5 1.9
+734.3 4.0
+735.2 3.9
+735.9 4.9
+737.5 6.6
+738.6 3.4
+742.1 1.7
+744.1 6.5
+745.6 1.2
+746.3 1.5
+749.6 4.0
+751.5 1.8
+753.2 5.5
+754.5 5.9
+756.4 3.7
+757.4 7.3
+758.6 4.5
+760.5 4.3
+762.2 34.8
+763.0 2.4
+764.1 6.3
+764.9 9.7
+765.9 0.5
+769.0 16.9
+769.6 4.4
+770.9 56.8
+771.7 40.8
+772.6 2.8
+773.3 2.0
+774.4 1.1
+775.4 2.0
+777.9 378.8
+778.6 242.3
+779.7 4.5
+781.0 0.7
+783.1 4.2
+784.7 8.1
+785.7 0.9
+788.3 2.9
+789.0 1.1
+790.3 1.7
+791.8 8.4
+793.5 2.4
+794.4 6.6
+795.2 2.8
+796.2 2.9
+797.0 5.4
+797.8 0.6
+798.6 3.8
+799.9 4.2
+802.5 27.3
+803.6 22.7
+804.7 5.1
+807.3 2.4
+808.5 0.8
+809.7 2.6
+811.4 6.5
+812.4 8.9
+815.6 3.7
+817.1 8.5
+819.3 5.9
+821.3 0.9
+822.0 4.8
+823.8 2.0
+825.4 1.6
+826.4 7.5
+828.6 1.7
+830.4 3.9
+831.8 2.7
+833.3 82.6
+834.1 2.4
+835.3 4.9
+836.3 1.2
+837.8 6.0
+839.1 2.6
+840.4 6.4
+842.1 170.0
+843.1 15.7
+844.0 2.8
+845.2 3.4
+846.2 1.2
+847.7 3.5
+848.4 5.4
+849.7 2.7
+850.7 6.0
+851.4 4.7
+852.0 2.9
+853.5 4.7
+854.7 10.7
+855.5 3.4
+859.1 11.9
+860.0 8.7
+860.8 3.1
+863.6 2.7
+865.8 10.3
+866.4 3.7
+867.6 14.1
+868.4 0.9
+869.2 0.5
+870.8 11.1
+872.0 10.9
+873.2 1.7
+874.5 0.3
+876.1 7.7
+878.9 6.1
+879.6 5.0
+880.8 22.1
+882.0 12.5
+883.7 4.4
+884.4 15.2
+885.5 6.6
+886.2 2.8
+887.6 8.9
+888.7 3.0
+889.9 1.5
+891.6 22.2
+893.0 7.2
+894.3 6.6
+895.0 2.0
+896.0 1.3
+896.9 4.8
+898.6 6.4
+899.3 8.6
+900.9 8.4
+901.6 8.2
+902.8 7.4
+903.6 3.3
+904.3 2.6
+904.9 7.8
+905.7 2.5
+907.1 1.9
+908.4 12.2
+909.2 0.5
+910.1 4.3
+911.3 3.0
+912.8 15.4
+913.8 10.2
+914.9 6.2
+915.8 1.6
+917.6 34.8
+918.3 8.4
+919.0 1.5
+919.8 3.1
+921.2 5.6
+922.1 12.6
+923.2 8.5
+923.8 1.7
+924.5 5.5
+926.4 14.2
+927.3 8.8
+928.4 10.4
+929.0 4.5
+930.9 10.1
+931.7 26.8
+932.6 8.0
+933.3 5.8
+935.1 6.8
+936.4 3.8
+937.2 11.9
+938.6 13.7
+940.2 639.9
+941.2 119.1
+942.5 28.1
+943.2 3.0
+944.5 1.8
+945.3 6.6
+946.8 2.9
+948.2 6.9
+949.0 4.6
+949.9 2.7
+951.3 10.3
+952.0 5.9
+952.7 1.6
+954.4 14.7
+955.3 20.0
+956.6 28.5
+958.0 3.6
+959.0 5.3
+959.9 7.1
+960.7 21.1
+963.0 9.4
+963.8 1.0
+964.9 13.6
+965.6 6.6
+967.9 32.1
+968.6 12.8
+969.5 25.1
+970.1 2.1
+971.3 9.4
+972.1 2.1
+973.0 7.8
+973.6 23.0
+974.5 5.2
+975.7 25.3
+977.0 124.7
+977.7 154.3
+978.5 27.4
+979.6 32.0
+980.3 8.3
+981.4 9.1
+982.7 37.1
+983.6 2.9
+984.6 2.3
+985.8 13.1
+986.6 19.7
+987.7 22.7
+988.4 3.2
+989.8 15.1
+990.5 12.8
+991.5 13.9
+992.2 7.8
+993.1 28.5
+994.2 11.9
+995.2 13.4
+995.8 60.7
+996.5 45.1
+997.1 11.0
+998.0 14.4
+999.4 35.5
+1000.4 5.2
+1001.2 21.4
+1002.1 6.7
+1003.4 18.4
+1004.6 84.8
+1005.7 15.3
+1006.4 11.5
+1007.1 14.4
+1008.1 4.8
+1008.8 33.9
+1010.3 45.7
+1011.4 32.6
+1012.3 11.2
+1013.6 60.2
+1015.0 54.7
+1015.9 7.8
+1016.5 12.9
+1017.5 31.9
+1018.5 10.2
+1019.4 10.6
+1020.8 5.6
+1021.5 29.5
+1022.5 36.6
+1024.1 3.9
+1031.0 1.7
+1032.3 2.9
+1034.0 3.9
+1034.9 0.5
+1037.2 1.5
+1038.9 1.0
+1040.2 3.7
+1045.6 2.9
+1047.6 0.6
+1048.7 6.0
+1051.8 5.2
+1054.9 2.0
+1056.3 3.7
+1058.3 1.6
+1059.3 2.1
+1062.9 6.0
+1065.5 5.3
+1066.5 3.8
+1069.2 5.3
+1070.0 0.8
+1073.4 2.7
+1076.0 2.5
+1077.2 8.2
+1077.8 1.6
+1078.9 3.5
+1079.9 3.6
+1080.6 10.6
+1082.8 6.1
+1083.9 5.9
+1085.4 5.7
+1086.9 4.0
+1087.6 13.9
+1088.6 17.2
+1089.6 24.5
+1090.4 11.4
+1091.3 1.6
+1092.5 7.6
+1093.6 7.0
+1095.8 2.1
+1098.0 8.9
+1099.8 2.4
+1100.9 6.1
+1101.8 8.8
+1105.6 2.7
+1107.3 0.5
+1108.9 14.3
+1109.5 15.3
+1111.0 4.2
+1112.6 4.8
+1114.5 3.1
+1115.5 8.8
+1120.3 14.5
+1121.2 2.4
+1123.4 3.5
+1125.3 2.9
+1126.6 2.0
+1131.0 5.8
+1132.1 1.4
+1134.1 6.6
+1134.8 7.3
+1135.7 7.8
+1138.4 7.7
+1139.8 16.1
+1142.5 168.8
+1143.6 85.8
+1144.4 6.7
+1145.0 3.9
+1147.1 20.9
+1147.8 1.9
+1148.9 0.8
+1149.7 4.7
+1150.6 7.6
+1152.1 9.1
+1153.2 5.4
+1154.0 7.5
+1156.0 7.2
+1158.3 15.5
+1159.8 1.0
+1160.8 1.0
+1164.0 11.8
+1166.4 34.0
+1167.4 2.9
+1169.5 2.3
+1171.4 3.6
+1172.4 3.6
+1173.6 10.1
+1176.7 2.1
+1178.7 15.9
+1179.5 4.5
+1180.6 1.2
+1182.5 1.0
+1183.3 6.8
+1184.5 2.1
+1185.5 8.4
+1186.4 10.8
+1188.5 0.3
+1190.5 1.9
+1191.7 6.3
+1194.2 10.6
+1195.1 22.9
+1196.0 4.6
+1196.6 2.8
+1198.5 87.0
+1199.6 41.4
+1200.6 2.8
+1201.7 7.7
+1203.5 38.7
+1204.4 97.9
+1206.6 7.3
+1207.7 13.3
+1210.0 9.9
+1211.4 7.2
+1212.1 0.8
+1212.9 5.6
+1213.6 37.7
+1214.5 18.2
+1216.5 306.6
+1217.6 147.3
+1218.8 24.8
+1219.9 13.6
+1221.1 4.7
+1222.2 2.0
+1228.8 2.0
+1229.9 7.6
+1230.6 11.2
+1231.7 7.9
+1233.1 13.5
+1234.1 4.6
+1236.0 11.9
+1238.1 3.9
+1239.0 10.1
+1239.6 51.8
+1240.5 5.2
+1241.1 3.2
+1242.6 1.3
+1244.4 3.4
+1245.4 4.9
+1247.2 7.4
+1248.1 29.4
+1248.8 19.6
+1250.1 9.6
+1252.1 5.4
+1252.7 16.5
+1254.0 8.4
+1255.8 7.2
+1256.5 0.4
+1259.9 5.6
+1261.5 9.8
+1263.9 4.2
+1266.1 0.6
+1267.0 2.9
+1268.3 10.2
+1269.2 10.8
+1269.9 6.0
+1271.2 10.8
+1273.2 1.4
+1274.5 10.7
+1275.2 19.7
+1276.2 13.1
+1278.0 17.0
+1278.7 3.8
+1281.1 4.5
+1282.3 12.3
+1283.5 34.5
+1284.2 41.3
+1285.0 3.2
+1286.2 5.8
+1287.7 15.6
+1288.5 4.6
+1289.7 1.1
+1292.0 5.6
+1293.0 8.2
+1294.7 5.0
+1295.9 7.4
+1297.0 15.3
+1299.0 8.0
+1301.7 1.8
+1302.8 3.2
+1304.1 1.6
+1305.5 1.6
+1306.1 0.4
+1307.6 3.7
+1308.4 8.4
+1310.9 8.2
+1312.8 3.5
+1314.0 4.4
+1314.9 3.5
+1316.3 7.8
+1318.9 19.9
+1319.6 12.6
+1320.3 7.7
+1323.6 1.0
+1328.7 27.8
+1329.7 20.4
+1330.7 3.5
+1331.4 2.4
+1332.2 7.5
+1333.0 22.3
+1334.6 4.7
+1335.4 1.6
+1337.2 2.8
+1342.1 45.7
+1343.1 5.7
+1344.9 8.9
+1346.0 0.7
+1348.3 6.8
+1351.7 6.0
+1352.8 4.1
+1354.4 10.1
+1355.4 21.7
+1357.8 8.6
+1358.6 6.1
+1361.0 12.2
+1362.4 51.2
+1363.1 22.6
+1365.4 2.9
+1366.8 1.0
+1368.9 14.0
+1369.7 2.2
+1371.8 0.6
+1374.4 4.3
+1375.5 1.7
+1376.8 3.9
+1378.0 3.8
+1381.8 1.4
+1383.6 1.6
+1384.2 2.4
+1384.9 13.2
+1388.4 3.8
+1389.6 3.8
+1392.5 1.4
+1393.4 3.1
+1394.6 28.0
+1395.8 10.4
+1396.6 11.0
+1399.2 2.7
+1402.5 3.9
+1403.2 8.5
+1404.7 6.9
+1405.7 8.0
+1406.7 6.2
+1408.5 12.5
+1410.3 5.0
+1412.5 86.7
+1413.7 56.2
+1414.7 11.3
+1416.7 1.7
+1417.7 6.1
+1418.5 20.2
+1419.3 5.9
+1420.2 9.2
+1421.1 5.0
+1423.8 6.9
+1424.7 1.5
+1426.5 9.3
+1427.1 2.4
+1429.4 2.2
+1430.9 10.2
+1432.7 8.0
+1433.3 5.5
+1434.9 6.9
+1437.5 4.1
+1438.5 4.8
+1439.1 3.9
+1440.3 15.3
+1442.5 9.0
+1445.2 2.3
+1445.9 1.2
+1449.2 2.1
+1450.6 9.9
+1453.3 2.0
+1454.2 2.2
+1455.6 4.7
+1457.5 10.9
+1458.4 5.4
+1459.5 1.6
+1460.2 1.3
+1464.1 9.7
+1465.8 29.0
+1467.0 11.2
+1470.0 10.2
+1470.8 1.8
+1472.1 11.7
+1473.3 8.8
+1474.6 14.5
+1475.5 62.2
+1476.3 9.5
+1477.9 2.2
+1480.5 3.2
+1483.6 5.3
+1486.0 8.0
+1487.6 8.8
+1489.9 8.2
+1491.2 4.8
+1491.8 7.1
+1492.8 16.1
+1499.5 0.5
+1502.4 2.7
+1504.0 5.0
+1505.4 9.9
+1506.4 6.0
+1507.3 2.7
+1508.5 4.2
+1511.0 4.0
+1519.2 13.6
+1522.7 33.2
+1523.7 20.8
+1524.6 8.5
+1526.5 3.1
+1527.2 1.3
+1533.9 1.5
+1536.5 2.2
+1537.4 0.8
+1538.0 0.7
+1538.8 8.8
+1539.8 18.1
+1540.8 224.7
+1541.8 99.2
+1542.9 52.9
+1546.2 4.1
+1548.9 0.8
+1553.2 2.6
+1554.8 142.1
+1555.7 61.4
+1556.9 15.2
+1558.9 2.0
+1560.5 1.7
+1563.2 0.9
+1565.1 1.9
+1572.9 2.7
+1574.0 2.0
+1577.7 1.4
+1578.8 0.8
+1579.7 0.6
+1581.8 1.9
+1582.6 2.5
+1583.5 2.1
+1586.8 3.0
+1593.5 2.3
+1594.1 1.2
+1596.7 0.5
+1599.7 0.9
+1600.8 0.4
+1603.0 2.3
+1605.6 1.9
+1606.4 2.4
+1615.6 2.9
+1619.1 1.1
+1619.8 4.7
+1620.8 1.6
+1626.7 3.3
+1632.0 0.4
+1632.9 0.4
+1634.4 0.4
+1637.0 4.6
+1637.8 3.1
+1644.4 2.4
+1647.8 0.5
+1648.9 1.2
+1656.4 1.1
+1662.0 1.2
+1665.2 0.8
+1667.0 6.0
+1668.7 1.8
+1671.1 0.5
+1674.9 3.2
+1676.7 6.0
+1679.8 5.7
+1682.4 4.9
+1683.8 5.2
+1693.5 0.8
+1703.1 1.9
+1712.6 4.2
+1715.3 2.4
+1716.5 5.4
+1717.7 2.4
+1722.5 4.0
+1730.1 5.1
+1730.9 2.6
+1733.9 6.9
+1737.6 1.3
+1740.4 3.7
+1741.6 3.8
+1743.1 1.9
+1748.7 2.3
+1751.5 2.6
+1752.8 2.8
+1754.5 1.4
+1758.4 3.9
+1759.0 0.8
+1760.0 3.2
+1761.3 2.7
+1763.8 3.5
+1767.4 9.3
+1768.2 5.0
+1770.6 1.0
+1773.1 5.8
+1774.0 3.0
+1783.0 4.2
+1784.7 0.8
+1789.9 4.4
+1792.6 0.3
+1796.9 1.3
+1798.5 1.2
+1805.7 0.5
+1815.6 0.7
+1820.9 3.0
+1834.1 0.8
+1843.9 1.0
+1860.8 0.5
+1866.4 1.8
+1881.1 2.1
+1881.8 6.1
+1883.1 2.0
+1887.9 1.9
+1891.2 4.7
+1902.1 2.0
+1902.8 1.3
+1909.7 0.4
+1911.1 2.9
+1911.9 5.6
+1917.7 1.3
+1922.2 2.4
+1926.9 2.2
+1927.7 1.8
+1935.0 4.5
+1936.0 3.4
+1937.5 5.0
+1950.8 0.9
+1952.4 4.6
+1953.6 15.3
+1954.2 4.1
+1955.0 1.4
+1983.0 4.9
+1986.1 0.5
+S	140	140	717.06
+I	ID	179
+I	RTime	8.8483
+Z	1	717.06
+218.3 1.2
+242.2 5.0
+252.4 4.1
+263.2 2.4
+270.4 1.2
+272.1 2.0
+283.2 3.9
+303.5 3.4
+312.3 1.3
+313.3 4.0
+317.4 6.5
+323.0 3.5
+324.5 2.5
+328.2 5.9
+329.2 6.1
+331.2 7.8
+332.5 3.0
+339.9 1.7
+347.0 2.2
+348.5 0.8
+353.3 1.7
+355.3 5.0
+361.3 1.5
+365.0 3.2
+370.2 5.0
+379.3 4.6
+381.2 2.0
+383.3 1.7
+387.3 6.5
+388.3 1.3
+391.9 2.5
+394.2 4.1
+396.0 2.5
+400.3 4.1
+404.6 1.5
+406.2 5.0
+413.3 2.2
+415.4 1.6
+417.8 1.7
+422.1 3.5
+423.3 17.6
+425.1 2.0
+432.3 2.2
+440.3 1.6
+441.2 15.1
+447.6 6.4
+448.9 1.5
+451.5 2.9
+457.1 6.0
+458.3 5.0
+459.3 4.5
+463.2 2.4
+467.6 2.7
+470.3 1.2
+472.4 1.2
+474.0 0.8
+475.5 8.1
+476.4 2.2
+481.0 2.0
+482.4 2.4
+487.5 2.2
+492.6 3.5
+498.2 7.6
+500.6 3.0
+502.3 4.3
+505.0 1.7
+525.3 2.2
+529.2 2.4
+553.3 1.8
+560.7 2.7
+567.3 1.7
+571.2 6.8
+572.4 2.2
+578.5 8.1
+579.3 5.4
+582.3 4.9
+588.1 5.6
+589.2 1.6
+590.5 1.8
+601.3 4.9
+602.2 1.6
+609.4 2.7
+612.4 3.9
+637.4 1.3
+638.5 7.5
+639.4 2.7
+651.9 1.5
+656.1 2.5
+664.5 9.6
+665.5 8.3
+668.7 1.2
+672.4 3.4
+673.6 11.6
+674.7 2.5
+675.6 7.5
+676.9 2.9
+681.4 8.5
+682.6 13.8
+683.5 2.5
+685.6 2.2
+686.3 10.6
+687.3 2.7
+698.2 19.8
+699.3 51.2
+700.5 14.3
+707.7 8.0
+776.3 5.4
+953.6 3.4
+S	141	141	497.29
+Z	3	1489.85
+143.1 29.2
+147.0 34.6
+172.3 23.6
+186.2 43.8
+215.5 14.5
+217.1 54.7
+228.3 27.3
+228.9 59.9
+230.2 19.9
+234.2 100.5
+239.5 70.1
+242.2 43.9
+260.2 233.6
+262.1 218.6
+301.1 34.2
+302.5 137.0
+312.0 19.9
+317.3 164.2
+327.2 82.4
+329.3 632.1
+332.2 36.5
+337.2 91.3
+338.6 126.7
+343.7 392.1
+344.3 60.1
+352.6 329.0
+353.3 98.8
+357.2 34.6
+359.3 29.2
+368.2 21.7
+375.4 75.0
+376.7 29.3
+382.1 27.3
+384.9 261.6
+386.0 29.1
+387.3 23.6
+389.2 25.7
+392.3 43.6
+393.8 955.6
+394.6 63.9
+397.9 42.8
+400.7 18.1
+407.2 19.9
+410.4 36.5
+413.8 70.2
+416.5 609.9
+417.3 253.3
+423.5 49.4
+424.4 63.8
+426.7 18.1
+431.3 102.7
+435.3 179.9
+438.1 25.4
+441.5 44.5
+443.4 206.8
+444.2 25.4
+448.5 134.3
+450.5 28.9
+452.0 56.7
+453.9 38.3
+459.2 20.0
+460.6 93.3
+461.8 100.9
+465.8 25.7
+469.3 34.9
+470.0 31.0
+473.6 448.8
+474.2 160.7
+474.9 59.6
+475.6 41.8
+477.0 210.4
+480.0 145.8
+482.2 281.0
+483.2 191.5
+484.7 54.1
+485.8 604.7
+487.5 319.8
+488.3 92.6
+504.2 129.8
+505.7 101.0
+509.0 27.2
+523.9 27.3
+526.1 135.3
+527.1 34.7
+529.5 73.3
+537.9 32.9
+542.9 128.0
+544.3 861.7
+545.4 109.3
+552.8 46.1
+557.2 51.0
+569.0 36.9
+569.6 41.9
+571.7 19.9
+576.3 35.0
+577.9 145.3
+579.3 69.2
+580.5 104.8
+581.7 79.8
+584.0 91.2
+586.5 96.6
+587.4 638.4
+588.4 51.5
+590.3 34.5
+601.4 18.0
+602.2 36.5
+605.2 520.1
+606.2 224.3
+606.8 81.4
+614.9 612.3
+616.0 723.4
+617.0 49.0
+618.0 152.0
+620.1 98.2
+622.1 25.5
+624.5 40.2
+628.4 27.3
+633.9 25.5
+636.0 34.5
+640.5 133.6
+644.2 139.8
+645.0 49.0
+646.5 32.8
+647.7 66.1
+657.4 856.5
+658.5 60.0
+659.4 45.7
+660.1 29.4
+669.4 54.7
+672.4 362.0
+673.3 65.2
+676.5 58.7
+685.3 68.1
+686.4 349.2
+687.5 43.7
+688.7 160.7
+689.6 76.9
+690.3 25.4
+694.6 100.3
+695.5 32.8
+699.8 25.6
+702.4 25.5
+704.1 581.1
+705.3 61.4
+716.4 18.1
+719.2 21.8
+741.1 83.1
+750.4 38.3
+768.4 52.8
+769.8 20.1
+770.5 38.4
+781.9 58.6
+782.6 25.4
+786.6 1184.7
+787.5 86.3
+796.8 43.9
+798.5 21.8
+815.4 82.1
+816.3 79.8
+817.4 38.4
+826.4 49.9
+833.3 539.0
+834.4 97.2
+835.5 14.4
+855.5 29.1
+857.2 40.1
+861.1 25.7
+879.3 18.1
+895.7 27.3
+912.6 21.8
+928.3 32.9
+945.6 40.5
+963.7 82.4
+971.5 37.9
+987.9 21.7
+1060.7 36.5
+1074.3 129.7
+1083.0 32.8
+1118.4 31.2
+1230.7 60.3
+1259.6 25.4
+S	142	142	715.07
+I	ID	181
+I	RTime	8.9364
+Z	1	715.07
+251.2 1.5
+259.2 2.2
+272.4 2.2
+275.0 2.2
+287.5 1.7
+310.9 1.5
+317.4 5.3
+334.3 2.0
+340.2 4.9
+345.3 0.8
+367.5 1.7
+376.1 1.2
+388.2 2.0
+389.6 4.8
+394.2 2.9
+396.2 4.0
+415.1 1.5
+418.5 1.8
+440.2 1.8
+444.4 1.2
+445.4 2.7
+446.4 3.9
+447.1 2.5
+453.3 4.5
+476.3 0.8
+478.5 2.7
+489.3 1.2
+493.3 2.2
+495.9 2.7
+499.2 8.6
+500.4 4.9
+501.2 1.2
+502.5 1.2
+505.2 1.1
+506.4 0.8
+523.5 2.7
+538.2 2.0
+540.5 1.6
+541.3 3.5
+545.9 4.1
+550.3 3.2
+551.2 1.6
+558.9 6.3
+559.6 1.6
+568.2 3.2
+569.1 2.9
+569.8 5.5
+585.5 3.7
+586.3 5.1
+587.3 9.1
+597.4 1.7
+599.3 10.1
+602.7 0.8
+609.2 2.7
+617.3 2.7
+621.0 3.4
+623.5 2.5
+637.9 5.6
+649.8 5.1
+652.5 4.5
+655.1 1.2
+656.7 4.8
+658.2 9.5
+671.1 6.0
+679.3 15.3
+680.3 3.7
+681.5 3.4
+685.3 4.4
+688.9 6.4
+691.1 4.4
+696.5 26.3
+697.5 38.9
+698.4 6.6
+706.2 4.4
+707.0 6.0
+S	143	143	452.85
+I	ID	211
+I	RTime	10.4434
+Z	2	904.69
+136.4 1.3
+144.2 1.7
+145.2 3.7
+147.1 2.5
+161.1 2.7
+171.2 1.7
+175.1 3.4
+176.3 2.7
+179.6 1.6
+184.2 14.6
+194.3 2.5
+198.2 1.2
+201.1 1.2
+212.2 3.5
+213.0 1.2
+215.3 1.6
+228.2 9.6
+230.1 1.2
+231.0 2.7
+233.2 1.2
+234.1 3.9
+235.0 1.7
+237.1 4.0
+238.9 8.1
+240.1 1.2
+242.5 1.7
+243.6 2.5
+246.3 1.5
+250.4 1.2
+256.8 2.7
+258.1 3.0
+259.2 6.3
+271.3 1.2
+275.2 2.5
+278.0 1.0
+286.3 1.3
+291.4 19.2
+292.2 2.2
+292.9 2.0
+294.2 1.7
+301.1 1.3
+304.3 6.0
+306.4 8.5
+307.4 14.3
+309.0 1.8
+312.3 2.5
+314.1 3.0
+317.3 4.4
+320.4 1.1
+322.4 1.2
+324.3 3.4
+325.1 6.8
+326.2 3.2
+337.1 1.0
+338.3 52.2
+343.9 4.1
+353.5 1.2
+356.1 3.0
+357.0 1.2
+359.3 3.0
+360.0 13.3
+363.7 1.6
+365.4 2.7
+374.4 4.6
+379.4 5.4
+381.1 1.7
+387.0 2.2
+388.6 4.1
+393.2 1.5
+394.9 3.0
+397.9 9.8
+399.2 14.8
+401.3 3.2
+402.4 2.4
+403.9 59.9
+404.7 6.1
+409.4 13.0
+411.2 1.7
+416.0 7.0
+417.2 4.4
+420.5 1.2
+422.9 4.1
+425.3 2.5
+426.3 3.0
+429.1 2.0
+430.3 8.6
+431.0 3.5
+434.2 20.8
+435.3 44.5
+436.3 12.8
+437.0 2.9
+443.5 39.2
+444.6 21.7
+475.4 2.9
+501.5 5.1
+508.3 3.5
+513.4 6.0
+517.6 2.5
+518.3 1.1
+530.5 4.0
+532.4 3.2
+548.6 11.8
+549.3 1.0
+556.9 4.3
+561.4 1.3
+565.4 1.7
+581.3 3.5
+606.0 2.7
+645.6 2.2
+656.6 1.2
+660.2 2.5
+661.2 5.6
+665.4 3.0
+666.2 5.1
+676.6 3.4
+677.4 2.0
+678.4 30.5
+688.5 1.2
+720.5 6.1
+747.3 1.5
+758.3 3.7
+760.3 1.7
+776.3 1.6
+799.4 2.5
+800.2 4.0
+817.4 1.7
+S	144	144	497.29
+Z	3	1489.85
+148.3 23.5
+155.2 31.3
+169.1 31.2
+170.3 28.7
+172.1 52.1
+173.0 109.0
+199.3 59.7
+201.3 26.1
+234.2 150.5
+242.3 95.9
+243.4 34.0
+259.9 31.3
+262.2 194.2
+263.8 96.0
+267.2 44.2
+272.6 39.0
+283.1 23.6
+294.2 75.3
+313.0 44.8
+317.2 302.6
+320.7 64.9
+329.3 354.0
+330.1 26.0
+338.9 328.6
+340.1 23.5
+340.9 114.4
+341.8 46.8
+343.9 196.6
+345.1 52.6
+352.7 433.8
+354.5 41.7
+355.3 39.3
+361.4 21.0
+363.4 29.2
+365.1 39.0
+375.5 57.1
+376.5 83.2
+379.2 63.4
+384.2 31.3
+384.9 273.6
+389.0 200.9
+392.5 21.1
+393.8 788.6
+399.0 54.7
+405.3 52.0
+406.3 64.9
+408.0 73.2
+408.8 208.8
+414.8 134.7
+416.3 397.0
+417.3 366.5
+420.2 90.7
+423.0 64.9
+423.7 268.7
+425.4 28.7
+426.2 28.7
+434.5 68.0
+438.7 191.6
+439.9 36.5
+443.4 134.8
+445.5 111.6
+450.4 31.3
+451.7 69.4
+452.3 326.4
+453.3 23.5
+454.3 163.2
+456.3 29.3
+458.9 121.7
+460.5 493.0
+461.3 66.7
+462.3 155.6
+466.1 57.5
+467.9 33.9
+469.9 145.2
+471.9 90.9
+472.7 31.5
+473.8 219.6
+474.6 266.7
+476.7 133.6
+477.3 93.7
+479.1 292.2
+481.1 431.7
+482.4 379.5
+483.4 143.6
+484.2 501.3
+485.1 349.5
+485.9 184.6
+486.6 458.5
+487.5 98.0
+488.2 199.0
+504.0 111.4
+511.2 59.8
+512.2 59.8
+516.0 67.5
+516.7 57.1
+525.3 191.9
+526.4 33.9
+527.5 158.1
+528.8 62.3
+529.4 78.1
+530.8 78.2
+531.4 108.9
+537.9 132.0
+540.9 76.5
+544.4 870.9
+545.4 177.0
+552.7 165.8
+555.7 59.7
+557.9 133.7
+563.6 59.7
+569.3 85.6
+571.6 197.5
+572.3 33.8
+573.9 179.4
+574.7 36.4
+577.9 390.3
+579.5 39.0
+582.2 292.2
+585.1 121.8
+587.2 1020.2
+588.0 197.5
+589.5 116.6
+590.6 36.4
+595.2 503.7
+596.0 33.3
+597.3 769.3
+598.1 166.9
+601.5 209.7
+605.2 596.1
+606.3 98.6
+607.1 140.5
+608.4 41.7
+609.7 49.5
+610.5 283.6
+611.4 26.1
+615.0 711.5
+615.6 549.6
+616.8 26.2
+618.3 80.8
+619.4 204.6
+621.3 156.3
+624.9 52.3
+627.3 29.0
+632.3 36.4
+635.8 675.1
+636.6 191.4
+638.4 28.8
+640.5 212.9
+641.7 96.4
+644.2 638.7
+645.1 598.4
+645.8 64.9
+647.4 39.1
+650.3 18.8
+653.5 62.4
+654.2 20.9
+656.9 39.3
+657.6 678.0
+658.5 381.4
+663.1 62.8
+664.3 73.0
+668.7 21.2
+669.9 31.3
+672.2 243.7
+672.9 98.6
+675.0 75.4
+679.5 75.2
+681.3 26.4
+685.3 78.0
+686.4 305.4
+687.5 28.9
+688.2 64.9
+693.6 77.9
+704.3 568.6
+705.0 50.5
+707.8 147.7
+709.2 73.3
+716.4 181.3
+717.6 46.8
+719.2 98.5
+726.3 31.3
+744.1 33.9
+756.3 65.0
+758.2 54.5
+764.3 52.6
+766.1 36.5
+768.8 65.1
+769.6 49.3
+772.7 63.1
+779.6 67.6
+786.6 1868.3
+787.6 64.8
+799.6 44.4
+815.3 93.4
+816.2 116.4
+817.2 26.6
+829.1 26.2
+833.3 825.2
+834.1 49.1
+838.6 66.0
+867.0 96.2
+879.6 64.9
+885.9 59.8
+911.7 70.1
+912.6 34.0
+929.2 70.9
+943.5 23.5
+944.3 75.2
+1039.6 44.2
+1074.5 103.7
+1081.8 49.5
+1196.6 99.3
+1231.5 46.9
+1342.8 31.4
+S	145	145	717.06
+I	ID	226
+I	RTime	11.1652
+Z	1	717.06
+199.9 2.9
+213.0 1.8
+226.3 2.0
+228.4 1.2
+229.3 3.5
+242.1 1.8
+253.1 2.4
+254.2 2.4
+258.1 1.5
+259.1 3.2
+270.2 1.6
+272.2 1.0
+275.3 2.5
+276.2 2.7
+277.2 2.0
+286.3 5.8
+295.4 1.5
+299.5 1.2
+303.1 3.0
+309.2 4.5
+310.0 3.0
+312.1 3.9
+313.3 2.4
+314.5 2.2
+317.2 5.0
+317.9 1.6
+319.2 2.0
+325.1 2.2
+326.2 3.4
+326.9 2.5
+328.3 1.7
+329.3 2.0
+330.3 2.0
+331.2 2.4
+332.5 1.7
+337.1 1.2
+340.1 1.1
+342.0 2.7
+343.1 6.4
+347.4 1.2
+352.5 1.3
+353.2 2.5
+357.3 2.0
+361.3 2.2
+367.2 1.7
+368.4 6.5
+369.5 9.5
+370.2 1.3
+380.1 1.3
+381.5 4.4
+387.3 4.1
+395.3 1.0
+400.3 1.6
+402.9 3.5
+411.3 3.2
+412.9 2.9
+415.0 3.5
+419.2 2.9
+422.3 3.5
+423.1 4.1
+425.0 1.2
+429.4 2.9
+431.5 2.5
+438.1 5.5
+439.9 4.6
+441.2 4.0
+442.5 3.2
+453.4 1.3
+455.0 1.2
+458.3 17.8
+459.2 5.8
+460.4 3.9
+464.4 1.2
+468.4 1.6
+470.3 2.2
+471.3 6.5
+474.7 6.0
+475.4 10.0
+481.4 3.2
+484.3 1.3
+486.4 2.9
+487.2 2.5
+489.4 5.0
+490.2 2.4
+491.4 1.0
+495.9 2.0
+500.3 2.2
+502.2 6.8
+504.5 1.6
+508.4 2.2
+524.1 3.0
+525.5 2.0
+526.3 1.2
+528.9 1.3
+531.4 1.1
+532.5 5.0
+536.3 5.5
+539.0 5.1
+542.1 3.2
+543.3 1.2
+545.2 2.2
+551.5 2.5
+552.4 3.4
+553.2 9.8
+556.6 6.3
+558.2 3.0
+559.3 7.5
+566.0 3.2
+568.6 2.2
+570.2 6.5
+572.3 5.5
+587.4 7.0
+588.3 8.8
+589.2 15.5
+593.5 1.1
+600.3 4.9
+602.3 2.0
+603.3 3.2
+604.7 4.3
+610.0 6.3
+618.6 7.3
+619.3 2.2
+623.9 3.7
+625.6 1.1
+633.2 3.0
+647.2 1.2
+650.3 4.3
+652.3 3.5
+655.6 2.7
+656.6 3.0
+664.5 8.6
+670.7 8.3
+672.6 1.2
+674.4 5.4
+675.6 10.5
+680.4 3.7
+681.4 8.6
+682.2 12.6
+683.5 6.6
+698.6 15.3
+699.4 70.0
+700.4 46.2
+707.6 9.6
+708.5 11.0
+815.4 1.3
+816.5 1.3
+824.4 3.0
+973.5 2.7
+974.3 10.6
+1018.2 2.0
+1041.4 1.2
+1059.5 1.7
+1152.4 1.7
+1228.6 6.3
+1259.8 2.7
+S	146	146	692.68
+Z	2	1384.35
+198.9 92.5
+200.5 45.5
+201.1 27.0
+204.2 1072.5
+205.1 320.7
+207.2 18.4
+209.4 43.6
+211.1 32.8
+216.2 64.1
+217.2 263.2
+219.3 28.8
+224.3 37.6
+225.4 66.0
+226.2 291.3
+227.3 26.5
+232.2 31.0
+234.5 68.7
+236.2 33.3
+237.3 113.7
+240.3 84.5
+241.3 287.9
+242.1 233.7
+243.1 50.3
+244.0 135.9
+245.2 78.9
+246.2 46.3
+247.2 96.7
+248.2 104.5
+250.4 57.4
+252.3 99.8
+254.2 160.2
+255.9 81.4
+259.2 410.7
+260.2 243.1
+261.7 217.6
+262.3 2117.3
+263.4 106.4
+264.2 59.4
+266.0 50.0
+267.2 43.7
+271.9 89.2
+275.0 167.9
+276.3 35.8
+277.2 139.7
+280.2 140.4
+282.2 61.8
+284.3 12.4
+286.1 49.2
+287.1 26.4
+288.2 98.3
+290.4 35.3
+294.2 20.3
+296.2 39.0
+297.3 77.8
+298.3 46.0
+300.3 137.5
+301.2 31.8
+302.2 61.9
+303.4 68.8
+304.3 119.5
+305.4 93.2
+306.8 19.1
+308.2 50.8
+310.0 20.9
+311.4 86.0
+312.4 54.9
+313.1 20.4
+314.1 493.9
+315.3 1824.6
+316.2 202.0
+317.2 32.3
+318.3 62.2
+320.1 20.3
+323.3 56.1
+324.2 79.2
+325.0 50.6
+326.2 41.9
+327.2 64.9
+328.2 270.3
+329.5 123.1
+331.0 46.8
+332.2 195.9
+333.2 1920.3
+334.3 290.0
+335.2 175.3
+337.3 18.5
+338.4 45.9
+341.7 81.3
+343.3 43.8
+344.3 154.3
+345.5 124.3
+346.3 171.5
+347.2 23.3
+349.1 80.0
+351.2 24.9
+353.2 560.4
+354.4 395.0
+355.3 73.8
+357.2 37.9
+358.4 130.5
+359.4 146.7
+360.6 208.4
+361.4 176.7
+362.1 20.1
+363.2 61.3
+364.3 377.0
+368.2 103.4
+369.3 17.7
+371.1 1228.2
+372.3 1149.1
+373.3 1005.0
+374.4 88.1
+375.0 30.3
+375.7 67.8
+378.3 133.9
+379.2 41.1
+381.7 26.4
+383.2 139.5
+384.2 21.8
+386.2 21.2
+388.1 55.6
+389.2 1377.2
+390.3 2086.0
+391.3 152.1
+394.4 25.2
+396.2 19.1
+397.2 88.0
+399.4 183.2
+400.3 44.7
+401.2 99.3
+402.7 60.9
+404.0 81.8
+404.9 31.7
+406.5 35.8
+407.5 212.3
+408.4 32.7
+409.3 58.7
+410.5 10.2
+411.2 207.5
+412.2 17.7
+413.0 51.8
+414.2 100.4
+415.3 148.4
+416.2 25.0
+417.4 25.7
+419.2 26.5
+420.2 142.1
+422.1 26.7
+425.1 382.2
+426.4 151.8
+428.3 145.1
+429.4 75.9
+430.1 93.6
+431.4 198.8
+432.3 275.9
+433.4 292.8
+438.4 55.1
+440.4 50.9
+441.7 101.3
+443.3 1498.8
+444.2 435.4
+445.2 167.6
+446.4 3014.2
+447.3 438.8
+448.2 208.5
+449.2 142.8
+451.5 46.4
+453.2 103.6
+454.2 24.0
+455.4 71.8
+456.4 81.5
+458.3 178.7
+459.4 188.9
+461.3 12968.0
+462.4 1368.9
+463.4 106.7
+466.8 32.4
+467.4 189.0
+468.3 22.4
+469.3 59.1
+470.8 397.8
+471.6 14.2
+473.3 177.1
+474.4 162.2
+475.1 12.0
+476.6 81.1
+478.4 55.1
+479.4 270.7
+480.2 102.2
+482.1 56.3
+483.3 155.1
+484.3 140.1
+485.5 41.7
+487.3 113.7
+491.4 62.1
+494.3 50.3
+495.4 51.0
+496.7 82.9
+498.3 132.7
+500.1 785.1
+501.2 141.6
+502.2 98.7
+503.1 27.2
+504.3 104.2
+505.6 61.9
+508.3 515.0
+509.3 37.6
+510.2 60.4
+512.3 421.6
+513.3 139.9
+514.3 18.4
+516.0 42.0
+516.7 57.9
+518.2 1144.7
+519.2 408.8
+520.5 88.0
+523.1 227.4
+523.8 146.8
+525.4 69.4
+526.5 48.0
+528.4 259.5
+530.4 1307.5
+531.4 274.8
+532.5 85.0
+534.8 94.3
+535.6 239.8
+536.4 1256.4
+537.2 196.7
+538.4 313.5
+540.3 164.0
+541.4 49.1
+542.5 85.7
+543.4 43.8
+544.5 276.2
+545.4 63.5
+546.0 165.7
+547.6 153.1
+548.4 75.2
+549.4 104.0
+550.4 112.4
+551.3 23.6
+554.7 161.9
+556.4 114.9
+557.4 136.4
+558.1 59.6
+559.4 35.5
+560.4 186.8
+561.4 482.8
+562.4 275.3
+564.5 71.7
+565.6 56.9
+566.3 175.0
+568.8 183.5
+570.6 44.4
+571.6 343.3
+574.3 4212.2
+575.4 4053.3
+576.5 948.0
+577.4 112.4
+578.5 121.2
+579.5 283.0
+580.4 63.9
+581.6 303.2
+582.5 284.7
+583.5 333.5
+584.6 67.0
+585.7 77.0
+587.2 54.5
+587.8 150.8
+588.7 241.5
+589.5 184.5
+590.6 2218.1
+591.3 372.4
+592.1 141.0
+594.3 51.6
+595.2 65.2
+597.0 3165.6
+597.9 539.9
+599.3 3491.7
+600.0 2279.4
+600.8 562.1
+601.9 120.7
+603.1 223.5
+603.9 217.0
+605.8 7553.3
+606.5 1737.7
+607.2 273.2
+608.4 169.0
+609.4 619.2
+610.7 742.4
+612.2 207.9
+613.8 640.9
+614.7 79.3
+616.6 234.5
+618.5 289.0
+619.3 515.5
+620.3 544.4
+621.3 54.7
+622.8 73.5
+624.5 348.6
+625.6 330.6
+626.5 512.6
+627.5 319.3
+628.5 371.1
+629.2 128.7
+630.6 220.6
+631.4 243.1
+632.7 464.8
+633.5 698.7
+634.4 309.1
+635.2 480.7
+636.6 175.3
+637.4 194.5
+638.9 210.3
+639.5 157.5
+640.4 136.1
+641.5 159.3
+642.3 226.9
+643.4 80.8
+644.3 686.4
+645.4 2000.9
+646.4 598.8
+647.5 256.5
+648.6 303.2
+649.9 229.5
+650.7 516.2
+651.4 1410.5
+652.4 387.7
+654.1 87.3
+655.7 1375.0
+656.5 1591.0
+657.3 152.2
+658.3 220.7
+659.4 709.9
+660.1 509.6
+661.2 1329.7
+662.0 49.3
+663.1 97.0
+664.2 671.7
+665.1 434.3
+666.1 334.4
+667.9 170.5
+668.9 511.8
+669.6 282.9
+670.2 147.9
+670.9 35.1
+671.9 191.3
+673.2 1370.3
+673.9 2992.9
+674.5 2544.4
+675.5 736.3
+676.3 193.0
+677.6 194.7
+679.0 157.9
+679.9 254.2
+681.0 458.9
+682.3 7235.5
+683.1 25157.5
+684.0 1432.3
+685.2 281.0
+686.1 40.7
+686.8 36.5
+687.5 24.8
+694.5 17.1
+700.0 78.2
+702.1 686.2
+703.4 234.8
+704.5 189.9
+705.7 61.5
+706.5 97.6
+707.6 114.0
+709.4 315.5
+710.3 38.2
+713.1 44.0
+714.6 259.2
+715.6 142.6
+716.7 139.6
+717.5 76.4
+718.5 164.4
+719.7 424.3
+720.5 541.6
+721.4 95.3
+722.2 74.6
+723.5 143.5
+726.6 141.7
+727.5 57.4
+729.4 58.9
+730.3 321.4
+732.4 5006.4
+733.6 875.9
+734.4 563.1
+735.3 684.1
+736.4 283.8
+738.3 2388.5
+739.5 1153.6
+740.3 106.8
+742.9 535.7
+745.7 413.6
+746.7 88.1
+748.4 191.1
+749.3 222.4
+750.3 554.7
+751.1 162.0
+752.3 172.5
+753.6 28.1
+755.2 241.1
+756.2 62.1
+757.6 468.7
+758.5 199.3
+761.0 93.3
+761.6 30.0
+763.0 94.9
+764.4 72.8
+766.0 168.5
+767.8 119.0
+769.1 56.9
+770.0 175.2
+772.3 493.3
+773.3 642.9
+774.3 333.7
+775.2 347.2
+776.9 202.0
+778.6 48.9
+779.5 258.7
+780.2 148.4
+781.2 129.8
+784.6 99.9
+785.6 161.3
+787.2 35.0
+789.3 340.8
+790.3 1234.2
+791.3 1918.0
+792.5 614.3
+793.7 124.4
+794.5 36.8
+796.6 41.2
+798.2 144.0
+800.4 24.7
+802.3 176.6
+803.5 366.5
+804.4 132.7
+805.4 98.5
+806.7 500.0
+807.5 1235.7
+808.3 369.1
+809.3 1958.1
+810.4 465.3
+811.5 286.2
+812.3 230.9
+813.6 31.5
+814.7 88.1
+815.5 73.9
+816.3 147.3
+817.5 78.6
+819.6 87.8
+820.5 416.9
+821.4 400.1
+824.4 167.5
+825.6 85.3
+826.5 117.0
+829.8 373.6
+830.6 182.5
+832.2 71.8
+833.6 274.4
+835.6 201.4
+836.3 18.8
+837.6 145.4
+839.4 151.7
+840.6 93.5
+842.1 86.4
+842.8 154.3
+843.6 33.0
+844.4 110.0
+845.9 47.2
+847.5 6821.9
+848.5 1883.3
+849.3 124.0
+850.6 40.9
+851.6 314.9
+852.5 2233.5
+853.5 2049.4
+854.6 513.2
+858.0 65.6
+858.7 92.3
+859.5 66.1
+860.1 19.8
+861.3 49.2
+862.8 67.1
+868.0 137.9
+868.9 53.8
+870.5 38.0
+872.1 40.5
+873.6 79.4
+874.7 217.7
+875.6 265.3
+877.3 181.8
+878.3 479.3
+879.8 222.7
+880.6 11.9
+881.8 21.5
+882.8 41.4
+886.2 1714.0
+887.2 265.8
+888.4 65.0
+889.5 146.7
+892.4 66.1
+894.4 123.4
+898.4 65.2
+900.0 165.3
+901.4 393.3
+902.3 167.4
+904.3 3886.9
+905.3 1523.3
+906.4 226.9
+907.2 149.4
+908.5 114.0
+909.5 19.1
+910.6 176.9
+911.4 46.2
+912.8 64.9
+914.1 76.8
+915.0 187.4
+916.0 35.8
+917.1 83.0
+918.2 449.9
+919.4 1273.9
+920.5 671.1
+922.4 7456.8
+923.4 1897.2
+924.7 283.2
+928.1 75.4
+931.9 303.0
+932.5 111.9
+933.7 183.8
+934.5 18.8
+936.4 1343.8
+937.3 1069.5
+938.8 1064.4
+939.5 5239.4
+940.5 3319.7
+941.5 1127.1
+942.4 194.3
+945.8 25.0
+947.3 111.9
+948.5 213.3
+949.4 356.1
+950.5 46.9
+951.9 37.4
+954.3 42.5
+956.4 256.4
+957.3 384.8
+958.5 609.5
+959.5 185.9
+960.1 15.3
+962.7 55.1
+963.6 87.2
+968.1 169.7
+969.4 74.1
+971.5 132.9
+975.3 2002.4
+976.3 1119.9
+977.3 845.2
+978.5 305.3
+979.4 100.2
+981.2 364.3
+981.9 38.1
+986.6 33.2
+987.5 117.1
+989.1 62.8
+993.4 2751.4
+994.5 9096.5
+995.5 2366.4
+996.3 279.5
+997.2 138.6
+999.7 44.3
+1000.5 33.4
+1002.8 62.1
+1004.6 113.9
+1007.5 21.3
+1009.4 113.8
+1010.5 269.7
+1011.7 90.4
+1014.3 375.7
+1015.7 84.9
+1018.3 40.7
+1019.3 62.1
+1021.7 57.6
+1023.2 99.2
+1025.4 106.0
+1027.4 87.2
+1030.0 90.5
+1031.4 415.7
+1032.5 960.2
+1033.5 837.7
+1034.3 76.6
+1035.9 133.2
+1037.0 99.1
+1037.7 257.0
+1038.4 169.1
+1047.3 70.6
+1049.4 2546.4
+1050.4 1673.5
+1051.5 692.9
+1052.6 591.6
+1053.4 36.0
+1054.6 65.1
+1057.6 41.2
+1059.3 80.5
+1059.9 62.9
+1060.7 70.4
+1061.5 259.7
+1063.1 71.2
+1064.5 291.8
+1065.5 167.2
+1066.7 29.4
+1067.4 47.6
+1068.5 5412.6
+1069.5 3715.4
+1070.5 672.5
+1071.6 53.7
+1074.4 44.7
+1077.7 104.4
+1078.6 63.1
+1082.7 230.1
+1083.6 340.9
+1084.5 236.2
+1085.6 92.1
+1086.7 387.0
+1087.6 194.0
+1089.8 156.7
+1090.9 62.4
+1091.6 69.0
+1092.7 89.2
+1094.6 97.1
+1095.3 25.0
+1097.8 43.2
+1103.5 823.8
+1104.5 383.3
+1105.4 260.2
+1106.0 76.4
+1107.7 72.0
+1108.8 27.9
+1111.8 59.3
+1116.3 16.9
+1117.9 37.4
+1118.7 131.8
+1121.4 3006.5
+1122.5 1563.0
+1123.6 1715.0
+1124.7 1249.1
+1125.6 17.6
+1126.7 31.8
+1131.5 32.2
+1132.6 118.2
+1134.7 61.8
+1135.9 28.2
+1137.7 121.3
+1140.2 106.9
+1142.6 62.4
+1143.4 88.6
+1144.3 174.3
+1146.5 28.0
+1147.7 21.7
+1148.7 105.0
+1151.6 103.8
+1154.9 99.2
+1156.9 57.3
+1160.4 581.4
+1161.4 1384.3
+1162.4 713.1
+1163.4 229.0
+1165.7 174.8
+1166.8 18.0
+1167.6 129.8
+1168.5 21.7
+1169.5 67.2
+1170.6 89.2
+1178.4 4996.5
+1179.5 3805.6
+1180.5 1026.4
+1181.5 311.6
+1182.9 66.7
+1184.6 38.6
+1188.5 20.1
+1190.5 31.6
+1191.8 69.1
+1192.6 131.6
+1193.3 101.2
+1194.6 170.5
+1197.5 3669.4
+1198.6 3270.5
+1199.7 399.0
+1200.8 140.7
+1205.0 43.0
+1206.9 170.2
+1207.8 48.8
+1210.6 6246.0
+1211.6 2004.1
+1212.7 229.1
+1216.6 60.9
+1217.4 147.5
+1218.6 236.4
+1219.5 171.5
+1220.7 38.0
+1233.6 122.2
+1234.5 226.9
+1235.4 686.8
+1236.5 1880.7
+1237.4 495.6
+1238.3 34.3
+1239.7 81.5
+1247.1 65.3
+1248.8 29.4
+1252.3 81.3
+1253.2 38.7
+1254.5 41.9
+1255.9 18.5
+1268.7 60.3
+1271.4 28.1
+1283.9 62.9
+1320.6 50.0
+1323.1 35.5
+1374.6 25.1
+S	147	147	614.58
+Z	2	1228.15
+175.1 15.3
+179.1 1228.8
+180.0 36.5
+183.0 23.7
+184.1 26.2
+185.1 24.7
+186.3 11.0
+191.2 10.1
+193.1 30.6
+195.1 9.3
+197.0 212.6
+198.0 40.2
+199.3 5.8
+201.2 22.0
+205.2 78.1
+207.3 8.6
+209.0 25.2
+211.1 22.7
+212.3 20.1
+213.2 13.6
+214.4 61.4
+215.2 283.2
+216.1 74.5
+217.1 42.0
+219.2 72.5
+225.2 26.2
+227.2 129.5
+229.2 84.1
+231.2 26.5
+233.1 191.1
+233.8 23.2
+238.0 15.8
+240.2 19.0
+241.1 40.2
+242.3 10.3
+244.2 133.0
+245.4 32.2
+251.1 79.0
+253.2 19.0
+254.1 43.2
+255.0 238.1
+256.2 80.4
+257.1 32.7
+258.3 51.4
+259.2 9.8
+260.1 56.0
+261.3 20.7
+263.3 38.0
+264.2 8.5
+265.2 17.1
+267.3 29.2
+268.1 6.9
+269.2 84.5
+273.1 142.6
+273.9 9.1
+275.3 15.3
+276.3 7.0
+278.2 16.3
+281.1 43.2
+283.0 56.0
+285.2 77.0
+290.0 9.3
+291.2 107.5
+292.0 11.0
+293.0 6.0
+294.9 19.8
+298.2 8.3
+299.1 125.9
+300.2 38.5
+301.5 28.2
+303.0 22.7
+304.6 10.1
+306.0 18.1
+308.1 22.8
+309.2 266.2
+310.5 19.2
+311.4 11.6
+313.2 280.0
+314.2 12.8
+314.9 25.0
+316.3 51.7
+317.1 119.3
+318.9 14.3
+320.3 16.5
+322.3 47.9
+324.3 13.6
+325.3 14.6
+327.0 1036.5
+328.0 76.9
+329.2 117.4
+331.3 27.2
+332.1 16.5
+333.2 94.8
+334.0 12.6
+335.0 123.5
+337.4 51.2
+338.0 20.6
+339.1 63.4
+341.2 96.1
+342.1 104.6
+343.3 156.0
+344.0 38.5
+345.2 593.2
+346.3 38.9
+347.2 39.9
+348.9 122.3
+350.1 11.6
+351.3 12.5
+354.1 153.5
+355.1 74.0
+355.9 67.9
+357.2 1407.0
+358.3 279.8
+359.2 38.7
+359.9 27.2
+361.1 103.9
+363.1 727.2
+364.0 5.5
+365.6 34.7
+367.2 168.1
+368.3 12.3
+369.2 30.8
+371.3 91.4
+372.2 22.3
+373.3 191.1
+374.1 24.8
+375.5 7.5
+376.3 20.7
+377.3 12.6
+378.0 16.2
+379.1 156.5
+380.0 39.0
+381.8 22.2
+383.2 152.3
+385.1 2612.8
+386.2 399.7
+387.2 90.6
+388.7 16.5
+389.3 86.1
+390.3 38.4
+391.6 12.6
+393.0 9.6
+395.3 21.2
+397.2 323.3
+398.3 26.3
+399.3 38.7
+400.4 91.5
+401.2 541.7
+402.2 116.0
+403.5 101.6
+404.5 20.8
+405.3 16.3
+407.3 43.2
+408.3 16.5
+409.3 12.6
+410.2 56.0
+411.4 50.4
+413.4 16.2
+415.3 42.9
+417.1 35.7
+419.2 49.0
+422.2 25.7
+423.2 75.6
+424.2 24.7
+425.2 44.2
+428.8 21.2
+430.7 57.5
+431.8 24.2
+433.3 512.2
+434.3 56.0
+437.1 11.8
+438.4 30.8
+440.2 8.1
+441.4 156.0
+442.3 39.9
+443.4 107.0
+447.3 224.0
+448.2 39.7
+449.1 73.4
+451.4 15.3
+452.1 10.8
+453.0 19.0
+455.2 66.9
+456.4 202.1
+457.3 9.0
+459.4 38.7
+460.4 133.8
+461.0 17.3
+462.5 48.9
+463.2 26.2
+465.0 26.5
+466.1 47.2
+467.3 141.1
+468.5 87.8
+469.4 157.1
+470.2 7.5
+471.3 385.0
+472.5 56.9
+473.6 69.6
+474.4 33.2
+475.0 8.8
+477.1 326.8
+478.0 36.7
+479.2 106.9
+480.5 47.7
+481.4 46.0
+484.3 10.0
+485.4 12.8
+487.3 485.2
+488.4 74.3
+489.3 421.7
+490.4 103.6
+491.3 101.0
+493.6 153.5
+494.6 5.6
+495.3 55.9
+496.4 25.8
+497.4 78.5
+498.2 232.6
+499.2 314.1
+500.2 128.3
+501.1 123.0
+502.2 34.0
+503.1 93.9
+503.8 11.6
+505.1 113.5
+508.2 64.8
+509.2 324.0
+510.4 98.0
+513.1 247.1
+514.0 156.8
+515.2 19.2
+517.3 155.3
+518.6 191.3
+519.4 14.1
+521.2 39.4
+522.3 43.2
+523.0 5.0
+524.1 44.4
+525.3 170.6
+526.3 15.6
+527.3 475.7
+528.3 28.1
+529.3 32.7
+530.8 343.2
+531.4 480.3
+532.2 126.0
+533.3 33.2
+534.1 9.0
+535.0 117.8
+536.5 38.5
+537.3 52.0
+539.2 209.3
+540.2 720.0
+541.0 261.8
+542.7 11.1
+543.3 149.6
+544.4 168.1
+545.6 86.5
+546.5 26.0
+547.6 52.4
+549.4 893.2
+550.3 119.9
+551.4 79.0
+552.3 78.1
+553.4 233.1
+554.5 112.5
+555.3 19.1
+556.3 151.8
+557.3 186.0
+558.3 124.0
+560.3 109.6
+561.3 576.5
+562.2 68.5
+564.5 14.5
+565.5 136.6
+566.8 123.9
+568.4 326.2
+569.3 161.6
+570.3 185.3
+571.4 560.7
+572.5 165.1
+573.1 184.3
+574.5 247.8
+575.4 369.0
+577.8 316.7
+578.4 148.3
+579.3 475.7
+580.1 48.4
+581.4 370.6
+583.2 965.7
+584.0 750.0
+584.7 112.6
+585.4 186.1
+586.8 362.6
+587.6 645.5
+588.7 63.4
+590.4 2135.3
+592.2 6666.3
+592.9 2467.3
+593.9 137.6
+595.4 934.9
+596.4 3312.8
+597.4 748.0
+599.2 2026.6
+599.9 800.7
+601.1 366.0
+602.3 78.1
+603.0 15.1
+605.2 15364.2
+605.9 5292.8
+606.6 1431.0
+607.8 15.6
+617.1 12.3
+620.0 40.0
+621.6 35.0
+623.2 27.3
+625.3 35.7
+626.4 95.4
+627.3 402.2
+628.3 53.2
+629.1 39.0
+631.2 925.4
+632.2 151.3
+633.6 93.3
+635.6 19.1
+637.4 86.9
+638.3 14.6
+642.4 23.7
+643.5 15.8
+645.5 6.0
+646.2 10.1
+647.0 26.2
+647.7 33.5
+648.5 42.0
+649.4 150.3
+650.4 50.9
+655.3 29.8
+657.1 88.0
+658.8 11.1
+659.7 82.5
+660.5 113.1
+661.2 165.1
+662.5 89.9
+663.3 57.0
+665.4 43.2
+667.5 12.5
+668.4 27.2
+669.6 54.4
+671.4 149.6
+672.3 30.6
+673.4 382.7
+674.4 166.8
+675.4 10.3
+676.3 20.8
+679.8 16.6
+681.5 11.1
+683.5 18.6
+684.4 6.0
+685.5 43.0
+686.7 73.9
+687.5 232.6
+688.4 251.6
+689.3 971.5
+690.4 346.8
+691.5 29.2
+693.7 12.6
+694.4 37.2
+695.2 34.2
+696.2 12.3
+697.2 29.3
+698.3 16.0
+700.1 8.1
+701.2 377.2
+702.3 116.8
+703.3 16.3
+704.5 53.0
+705.4 103.1
+706.3 61.2
+707.3 87.3
+708.4 12.1
+710.2 28.5
+711.6 155.0
+712.4 46.5
+715.2 228.8
+716.4 81.0
+718.2 9.3
+719.4 51.4
+720.7 113.0
+721.5 7.5
+722.2 25.5
+723.6 23.0
+725.1 24.6
+727.6 20.1
+728.4 30.6
+729.4 437.2
+730.3 198.8
+731.4 30.2
+732.5 264.3
+733.3 2286.3
+734.3 727.7
+735.4 124.5
+743.0 53.5
+751.3 171.3
+752.5 22.2
+754.2 29.7
+756.2 7.4
+759.3 42.5
+769.4 31.7
+771.3 10.3
+772.4 24.6
+773.3 36.2
+774.6 35.7
+779.5 5.9
+785.1 31.0
+785.7 39.2
+786.7 39.5
+787.4 38.5
+789.5 5.3
+790.2 47.5
+792.6 15.3
+793.2 50.5
+798.5 25.7
+799.6 24.5
+800.6 48.4
+801.4 37.5
+803.3 875.0
+804.4 308.0
+805.4 67.0
+806.4 7.4
+807.5 6.8
+808.8 6.0
+812.4 16.2
+813.4 51.9
+814.3 25.5
+816.8 81.5
+817.5 26.1
+821.6 50.0
+822.8 27.2
+825.4 313.2
+826.4 52.7
+827.4 24.0
+828.4 59.5
+829.4 217.1
+830.3 102.1
+831.4 834.7
+832.3 312.7
+833.4 26.2
+834.4 14.0
+835.4 69.8
+836.6 11.5
+837.6 14.3
+839.4 31.7
+840.5 38.5
+841.4 37.2
+843.4 3634.1
+844.4 1543.1
+845.4 254.1
+846.5 157.6
+847.4 984.2
+848.5 482.1
+849.4 265.7
+850.3 161.6
+851.3 26.3
+857.6 47.2
+858.3 31.3
+865.3 75.6
+869.1 12.5
+873.4 69.1
+875.8 11.1
+876.5 77.3
+877.3 40.5
+880.3 8.5
+883.2 9.5
+884.3 15.5
+885.5 6.9
+887.5 29.3
+889.2 93.9
+891.4 480.1
+892.4 102.6
+893.3 8.0
+894.5 19.3
+897.5 6.5
+901.5 134.3
+902.3 43.7
+903.5 20.3
+907.5 54.4
+911.5 19.0
+913.3 44.9
+914.3 10.5
+915.5 12.1
+916.5 7.9
+918.8 246.0
+919.4 692.2
+920.4 385.1
+921.5 33.2
+922.5 11.3
+927.8 30.0
+929.4 13.8
+933.1 133.8
+934.3 180.6
+935.4 26.7
+936.4 45.2
+937.0 93.1
+937.7 53.7
+938.7 34.0
+941.3 8.6
+942.6 70.0
+944.2 40.2
+948.2 34.4
+949.4 39.5
+950.4 30.5
+952.4 15.6
+954.4 14.6
+956.0 44.5
+957.4 15.1
+959.5 79.9
+960.4 50.5
+961.5 6.5
+962.4 51.7
+969.3 42.0
+973.5 109.0
+974.8 76.8
+975.4 54.5
+976.6 116.3
+977.4 444.0
+978.6 131.8
+979.3 13.0
+985.2 19.8
+987.6 59.5
+991.3 21.2
+992.5 85.0
+993.5 23.8
+994.6 22.1
+995.4 74.3
+1001.6 67.6
+1003.4 113.8
+1004.4 106.5
+1005.6 220.5
+1006.5 101.5
+1007.5 93.0
+1008.2 18.3
+1009.5 10.3
+1012.7 23.3
+1013.4 122.0
+1014.3 60.4
+1015.6 33.0
+1018.8 116.0
+1019.5 378.1
+1020.5 329.5
+1021.4 2229.1
+1022.4 954.2
+1023.5 387.7
+1024.8 55.0
+1031.3 1171.4
+1032.3 430.7
+1033.5 151.8
+1034.4 6.5
+1035.3 68.9
+1036.2 98.6
+1037.3 43.5
+1038.5 38.4
+1047.7 157.6
+1048.5 1219.0
+1049.4 8415.9
+1050.3 4427.1
+1051.4 1148.6
+1052.5 103.5
+1053.1 4.5
+1056.4 20.7
+1061.3 37.5
+1065.0 26.8
+1066.6 289.2
+1067.5 1958.6
+1068.4 1101.4
+1069.4 213.6
+1070.6 17.5
+1078.5 18.3
+1079.7 137.6
+1080.8 63.7
+1082.7 15.8
+1152.7 10.6
+1161.3 8.8
+1162.7 9.6
+1164.1 12.0
+1164.7 23.0
+1165.6 28.7
+1171.4 37.5
+1187.5 72.1
+1191.5 360.5
+1205.3 466.6
+1206.5 344.0
+1207.4 19.1
+1208.4 11.5
+S	148	148	713.07
+I	ID	204
+I	RTime	10.0689
+Z	1	713.07
+234.5 1.5
+256.7 2.5
+275.2 4.3
+284.4 1.7
+287.3 2.4
+291.1 1.2
+292.4 12.3
+293.3 2.5
+310.0 1.7
+331.2 2.4
+338.3 2.4
+380.1 0.8
+383.1 1.6
+386.3 1.1
+390.6 2.7
+391.6 1.6
+392.3 1.7
+401.3 2.2
+414.2 3.0
+421.5 6.8
+425.1 2.2
+433.6 1.8
+435.2 7.4
+438.1 3.7
+439.2 6.5
+440.1 1.7
+441.0 2.7
+443.5 1.1
+455.2 1.6
+461.2 2.5
+465.2 2.5
+469.2 1.8
+470.5 11.5
+471.5 10.8
+476.8 2.7
+477.5 3.2
+479.2 2.5
+486.5 2.5
+490.6 2.7
+493.2 1.6
+495.4 2.0
+496.5 6.5
+497.4 1.6
+498.1 1.5
+499.1 11.8
+505.4 4.1
+510.5 3.5
+515.6 2.9
+520.0 3.9
+521.4 1.3
+524.4 3.4
+525.4 1.3
+535.0 3.2
+536.2 9.5
+538.5 4.0
+549.5 2.9
+550.5 6.9
+552.2 4.3
+553.5 3.0
+560.4 1.7
+566.2 6.0
+567.2 6.8
+576.0 1.8
+581.3 3.0
+582.3 2.9
+583.1 1.6
+584.5 5.8
+606.1 3.2
+608.5 1.2
+609.3 1.8
+616.4 1.6
+648.6 1.1
+651.4 1.2
+652.4 1.2
+655.6 1.5
+656.4 1.2
+657.1 6.0
+659.4 3.5
+660.4 1.8
+668.4 10.3
+676.5 2.5
+677.1 2.0
+683.7 2.0
+684.3 1.8
+694.4 12.1
+695.4 68.5
+696.2 9.6
+703.4 9.3
+704.5 4.5
+812.8 2.4
+823.5 1.5
+842.5 3.4
+987.3 4.8
+S	149	149	733.77
+Z	2	1466.53
+209.1 46.7
+216.1 20.0
+217.0 18.3
+220.2 47.7
+221.2 15.9
+226.0 180.7
+227.1 61.5
+228.1 62.8
+231.2 8.4
+238.2 127.0
+239.2 40.1
+240.2 36.3
+244.0 590.5
+245.1 207.9
+245.9 9.0
+246.9 37.8
+248.7 23.8
+254.9 9.9
+255.5 13.2
+258.1 12.9
+259.0 7.1
+260.1 6.5
+262.1 28.7
+266.2 12.3
+269.2 32.6
+271.1 6.8
+274.0 23.6
+279.3 3.8
+280.3 9.9
+284.1 126.5
+285.1 52.2
+286.9 11.7
+288.2 75.9
+289.9 49.9
+294.2 207.3
+295.3 92.6
+296.3 5.6
+297.3 65.7
+299.1 32.0
+306.3 13.6
+307.5 21.7
+308.2 270.5
+309.1 58.9
+314.8 87.3
+316.0 60.2
+325.1 161.9
+326.2 218.8
+328.5 47.1
+331.1 25.2
+339.1 10.7
+340.1 20.8
+341.1 22.6
+343.2 2009.8
+344.1 550.5
+345.3 65.1
+346.2 32.5
+347.2 6.6
+349.8 7.8
+351.4 11.1
+356.2 4.9
+357.2 23.8
+358.3 41.5
+360.0 3.9
+362.1 11.1
+364.2 12.6
+366.9 158.0
+367.9 10.3
+369.1 67.5
+370.2 7.7
+373.3 10.6
+375.1 274.9
+378.3 29.6
+384.1 136.3
+385.2 182.5
+386.2 14.9
+390.1 4.9
+396.2 11.2
+401.4 231.7
+402.4 49.9
+403.1 6.4
+407.3 269.8
+408.3 88.7
+409.3 54.4
+410.2 38.3
+412.2 77.8
+413.2 152.3
+414.1 7.7
+414.9 8.8
+419.6 13.3
+420.3 20.5
+422.1 18.9
+423.3 4.4
+427.3 8.5
+428.8 27.3
+430.2 334.8
+431.2 117.7
+438.5 24.1
+439.2 28.5
+441.2 8.4
+442.2 22.8
+443.8 56.1
+447.4 27.6
+448.2 13.1
+449.0 5.1
+451.3 14.0
+455.2 60.7
+456.1 8.4
+457.4 28.5
+460.2 25.6
+465.1 15.7
+466.1 150.1
+467.1 20.7
+468.3 39.2
+469.2 79.2
+470.2 75.4
+471.2 39.6
+472.6 42.3
+473.3 32.3
+474.3 96.7
+474.9 12.2
+477.3 8.0
+483.1 568.9
+484.1 411.0
+485.2 134.4
+485.8 18.0
+486.6 11.5
+488.1 762.7
+493.1 36.7
+498.2 24.5
+501.2 364.5
+502.2 177.6
+503.0 75.9
+504.3 20.3
+507.1 65.4
+507.8 6.2
+509.2 14.5
+510.4 25.8
+515.0 44.6
+516.0 31.0
+518.1 42.2
+520.3 105.9
+521.4 101.2
+522.0 6.6
+522.7 36.3
+526.4 30.0
+527.2 24.9
+528.1 6.6
+530.4 254.2
+531.4 124.2
+537.4 9.5
+539.5 45.9
+540.7 71.4
+541.4 18.1
+542.2 60.4
+543.1 20.8
+544.4 10.0
+545.3 23.2
+546.4 16.9
+547.4 41.4
+556.3 146.1
+557.1 14.4
+558.0 8.9
+559.3 45.9
+560.3 28.1
+563.9 11.9
+565.5 21.2
+569.0 61.6
+570.0 56.6
+573.2 49.1
+580.3 48.9
+581.5 48.7
+584.3 238.0
+585.0 68.0
+587.2 77.1
+588.2 43.0
+589.3 24.0
+590.0 17.0
+591.6 29.9
+593.7 16.1
+595.2 6.8
+597.0 167.4
+598.1 196.0
+599.4 22.1
+601.1 1292.5
+601.7 22.0
+603.2 57.1
+604.0 40.8
+605.2 46.5
+606.2 10.5
+607.8 8.7
+610.7 268.5
+611.8 73.0
+614.2 185.5
+615.1 611.4
+616.2 485.6
+617.1 234.6
+618.4 33.0
+619.0 4.0
+620.7 23.1
+624.0 34.9
+626.1 24.1
+627.2 19.9
+628.4 110.0
+632.2 1291.5
+633.2 854.1
+634.2 261.8
+635.1 81.6
+638.5 10.0
+639.2 29.4
+641.9 66.4
+643.1 48.4
+643.9 61.8
+644.8 71.8
+647.5 29.4
+648.2 23.6
+649.2 39.5
+650.7 56.0
+651.3 30.0
+657.6 42.0
+660.6 64.9
+662.4 6.7
+664.8 4.7
+666.8 344.2
+667.8 60.3
+670.4 10.8
+671.5 40.7
+673.2 5.7
+674.9 33.9
+676.5 9.1
+678.1 14.5
+680.2 102.2
+681.1 39.3
+681.8 17.7
+683.1 44.9
+684.6 61.4
+685.7 30.7
+688.1 51.4
+690.6 15.7
+695.8 70.6
+696.6 21.2
+697.4 55.5
+698.1 16.2
+698.7 20.6
+701.3 44.8
+702.4 8.2
+703.0 48.6
+704.1 43.2
+706.8 95.3
+708.1 26.4
+709.3 25.7
+710.0 10.9
+711.3 44.3
+712.6 97.3
+713.3 67.8
+714.6 123.5
+715.7 92.6
+716.5 128.8
+717.4 10.7
+718.3 99.9
+719.0 9.1
+721.1 336.3
+721.8 579.4
+723.4 756.0
+724.6 204.7
+725.4 24.0
+726.9 10.3
+749.3 14.0
+750.1 3.7
+754.3 36.1
+755.6 34.2
+757.5 74.8
+763.2 84.9
+764.3 106.1
+769.1 9.7
+769.9 10.8
+773.3 16.0
+774.6 21.4
+776.4 29.4
+778.1 15.7
+778.8 14.4
+784.5 80.0
+785.3 57.8
+791.3 20.6
+793.5 34.1
+795.2 11.1
+797.2 14.9
+799.6 88.1
+800.3 14.0
+801.0 31.2
+805.4 17.5
+809.8 18.2
+812.7 14.1
+814.1 17.9
+814.8 7.3
+817.5 51.4
+819.6 32.7
+820.5 125.7
+822.7 11.6
+825.8 33.0
+826.7 22.8
+827.8 81.2
+831.4 1701.0
+832.5 3316.9
+833.5 807.9
+834.2 32.2
+834.9 387.7
+835.9 132.3
+837.3 32.3
+838.2 70.2
+839.5 6.1
+840.2 56.0
+841.5 150.0
+844.7 7.2
+845.4 23.5
+846.8 60.8
+847.9 67.3
+850.8 38.4
+851.5 11.0
+855.8 214.2
+856.7 308.0
+857.7 198.4
+859.4 58.9
+861.5 4.8
+864.5 10.0
+866.5 13.8
+877.2 10.0
+878.0 16.3
+880.4 5.6
+882.6 16.9
+884.5 25.3
+886.7 27.3
+888.3 20.7
+890.4 69.2
+899.3 447.8
+900.5 144.1
+901.7 34.1
+903.0 140.7
+904.0 75.1
+905.2 9.0
+905.9 9.8
+907.6 36.9
+912.0 151.6
+913.3 48.9
+916.8 27.0
+918.2 25.3
+919.4 16.1
+920.8 13.8
+922.0 43.3
+924.3 39.3
+926.2 76.2
+927.2 125.4
+938.9 35.8
+939.9 206.3
+941.1 125.9
+941.8 23.5
+943.5 90.9
+944.4 124.8
+945.5 69.4
+946.7 100.1
+947.3 76.8
+948.0 83.3
+949.0 65.0
+950.1 45.5
+951.2 29.8
+952.5 5.6
+953.3 6.1
+954.5 60.8
+955.1 103.9
+956.0 243.9
+956.7 171.3
+957.3 47.2
+958.5 51.6
+959.5 95.9
+960.2 77.3
+960.8 79.6
+962.4 940.6
+963.4 1859.2
+964.5 615.7
+965.6 104.2
+966.7 42.0
+967.3 134.1
+968.6 466.7
+969.6 143.5
+970.4 35.2
+971.3 10.6
+972.3 7.7
+976.8 175.6
+977.6 75.3
+979.6 10.6
+981.4 7.1
+986.1 184.0
+987.0 17.4
+988.0 91.5
+988.9 71.0
+990.3 100.1
+992.0 117.1
+992.9 26.2
+993.6 29.2
+995.8 17.5
+996.5 20.4
+1001.4 35.1
+1003.7 133.5
+1004.5 27.4
+1010.9 68.0
+1012.1 381.5
+1013.0 757.2
+1013.9 165.5
+1016.7 14.1
+1018.1 120.3
+1021.6 24.7
+1023.4 17.2
+1025.5 39.0
+1028.4 22.9
+1033.5 377.1
+1034.5 813.4
+1035.5 535.5
+1036.4 198.5
+1037.3 34.6
+1038.3 74.8
+1039.3 39.2
+1040.6 13.2
+1041.2 34.1
+1052.2 11.7
+1056.3 219.0
+1057.3 436.1
+1058.7 65.7
+1059.8 62.9
+1060.6 9.6
+1067.1 29.6
+1068.5 27.4
+1071.7 29.6
+1080.3 119.3
+1081.2 11.8
+1082.4 15.8
+1089.3 26.5
+1093.4 11.7
+1103.7 23.7
+1105.1 78.1
+1107.7 3.7
+1118.5 23.6
+1119.2 10.8
+1120.5 1238.9
+1121.5 4241.0
+1122.5 1509.1
+1123.5 546.2
+1124.4 124.0
+1126.7 7.4
+1128.2 21.7
+1134.5 21.8
+1152.5 8.9
+1153.4 10.6
+1154.3 14.2
+1155.5 19.2
+1167.7 7.7
+1169.4 183.1
+1170.3 329.1
+1171.5 66.2
+1173.0 53.3
+1177.1 16.2
+1191.4 9.5
+1195.2 118.1
+1196.2 32.2
+1197.5 13.8
+1198.4 38.9
+1203.6 38.6
+1204.6 45.5
+1205.4 6.9
+1208.3 10.2
+1213.6 13.3
+1219.5 544.1
+1220.6 1969.5
+1221.6 598.8
+1222.5 111.3
+1223.5 57.1
+1232.6 13.2
+1233.4 11.6
+1239.9 16.4
+1261.3 7.7
+1281.5 42.9
+1288.4 23.3
+1299.5 13.2
+1300.5 32.8
+1310.4 71.8
+1311.6 9.3
+1316.4 95.6
+1317.4 199.9
+1318.4 140.0
+1320.7 22.4
+1335.5 26.7
+1374.3 8.2
+1378.4 17.3
+1410.1 7.2
+1437.1 11.7
+1441.4 25.8
+1442.0 11.1
+S	150	150	832.24
+I	ID	101
+I	RTime	4.8019
+Z	1	832.24
+249.1 3.2
+251.1 2.4
+264.8 2.0
+267.2 3.4
+269.2 1.0
+281.0 20.3
+285.3 2.7
+298.7 4.4
+325.2 6.0
+330.1 7.5
+332.2 1.1
+341.1 8.1
+347.0 2.7
+355.1 70.1
+357.1 2.0
+359.0 2.0
+383.4 2.2
+387.2 2.7
+401.1 2.4
+404.1 3.9
+415.1 2.5
+428.9 9.6
+443.5 1.8
+483.1 2.0
+488.5 6.0
+501.2 9.8
+502.9 7.3
+512.1 2.0
+519.6 2.0
+524.2 9.0
+525.2 4.0
+542.3 2.2
+545.3 5.5
+549.7 13.5
+551.6 0.8
+555.3 2.5
+557.4 2.5
+560.1 3.9
+567.3 11.3
+576.1 1.7
+576.9 1.6
+581.4 6.4
+582.6 1.5
+598.2 1.2
+599.4 2.7
+608.6 1.8
+609.5 8.8
+629.1 6.6
+629.9 4.0
+630.6 2.0
+632.4 2.2
+637.0 2.5
+638.9 36.5
+639.6 11.8
+642.3 0.8
+646.0 32.7
+647.1 17.6
+648.7 10.1
+651.1 2.4
+653.2 5.5
+654.1 1.6
+657.8 0.8
+659.5 2.0
+660.2 5.5
+667.4 3.7
+668.4 7.1
+669.5 1.3
+676.1 8.1
+681.1 1.2
+685.3 1.3
+686.3 3.0
+690.6 1.7
+695.4 9.3
+696.1 3.0
+701.2 1.6
+703.4 13.1
+704.7 4.4
+707.3 1.6
+724.2 2.7
+726.3 3.7
+729.3 3.4
+733.8 9.6
+736.8 4.9
+738.4 1.1
+744.9 13.6
+746.1 4.8
+750.7 6.8
+756.6 15.3
+757.5 1.2
+762.7 1.6
+764.1 13.5
+765.1 3.7
+766.6 0.8
+767.6 9.1
+768.4 2.5
+772.0 3.0
+776.1 2.9
+778.4 2.0
+784.6 3.7
+799.0 5.4
+800.4 5.4
+801.5 13.6
+802.2 6.1
+803.1 10.3
+805.3 4.5
+806.7 7.5
+813.2 5.3
+814.2 23.7
+815.1 10.6
+823.0 31.3
+823.9 11.1
+S	151	151	651.62
+Z	2	1302.23
+194.4 12.4
+197.2 19.4
+198.0 22.8
+199.2 21.9
+201.1 63.1
+207.8 23.1
+215.1 250.2
+217.1 9.9
+222.2 7.0
+223.5 11.7
+225.1 13.4
+227.1 13.2
+229.0 208.2
+230.3 26.6
+239.2 36.3
+240.1 38.1
+242.1 24.5
+243.1 453.3
+245.1 51.7
+248.2 43.1
+251.3 53.2
+255.1 16.0
+257.1 88.9
+258.1 80.8
+259.2 14.3
+261.2 25.3
+264.2 17.5
+267.1 37.1
+269.3 18.3
+271.3 20.5
+274.3 56.3
+275.1 358.5
+276.1 72.0
+282.2 23.3
+286.0 26.9
+289.2 33.6
+290.6 18.7
+291.8 90.9
+292.4 27.6
+295.1 12.3
+297.3 32.5
+300.1 110.7
+308.1 23.4
+310.0 29.0
+311.3 13.7
+312.1 33.6
+318.1 50.8
+324.9 19.4
+326.3 71.9
+328.1 62.1
+328.7 7.4
+330.0 78.6
+331.2 45.0
+336.3 19.0
+338.0 27.1
+340.5 18.6
+343.2 23.0
+344.0 72.3
+344.7 44.0
+345.4 84.3
+346.1 926.1
+347.2 170.1
+348.9 12.7
+351.2 38.7
+352.7 40.7
+354.1 186.2
+356.3 100.9
+357.3 93.7
+358.3 90.6
+359.3 27.3
+368.3 25.4
+371.1 12.5
+373.2 36.9
+377.2 33.9
+379.3 15.6
+381.5 70.5
+385.4 30.5
+389.2 29.5
+393.1 22.1
+395.1 42.0
+396.2 14.8
+397.5 31.4
+398.6 62.9
+401.2 28.2
+402.3 85.3
+403.2 5.5
+403.9 23.6
+405.3 18.9
+407.0 49.5
+409.7 108.9
+411.4 174.8
+412.1 50.5
+413.2 33.1
+415.3 66.1
+417.3 43.4
+418.9 19.8
+422.1 96.0
+424.2 17.1
+425.2 80.0
+426.3 8.0
+428.1 37.8
+429.2 70.3
+430.2 60.2
+431.5 74.6
+433.5 266.6
+434.5 220.6
+439.2 57.7
+439.8 28.9
+441.1 44.0
+443.2 479.6
+445.3 753.4
+446.4 116.4
+448.3 18.9
+452.5 277.4
+453.3 51.6
+455.0 100.5
+457.1 235.9
+458.5 291.7
+459.2 18.3
+460.5 167.5
+461.6 55.5
+463.2 10.6
+466.3 154.5
+467.4 106.5
+468.4 20.1
+469.6 9.6
+471.1 70.7
+472.1 87.0
+473.2 148.5
+474.2 58.4
+475.2 194.2
+477.2 61.8
+479.2 25.3
+484.4 839.2
+485.4 106.5
+491.2 9.5
+492.6 7.7
+493.9 27.2
+497.3 161.4
+500.1 48.1
+503.4 112.4
+504.5 90.2
+506.3 7.8
+508.2 36.8
+509.8 83.9
+512.5 150.7
+513.8 209.3
+514.4 58.2
+515.5 26.2
+517.4 77.8
+520.3 22.2
+520.9 20.1
+522.0 115.2
+524.2 549.4
+525.0 351.2
+525.8 24.8
+527.1 183.2
+528.1 68.1
+528.8 9.0
+531.2 53.3
+533.3 12.7
+534.9 217.3
+536.5 81.6
+537.4 635.8
+538.3 206.4
+539.0 32.6
+540.0 111.0
+540.9 19.7
+542.5 129.7
+544.0 544.2
+545.3 30.1
+546.4 18.7
+547.6 92.1
+549.9 60.0
+551.2 79.0
+552.1 123.9
+553.6 103.7
+554.3 455.4
+555.2 59.6
+556.2 47.2
+557.0 59.6
+558.4 33.6
+560.3 873.4
+561.0 199.6
+561.8 123.4
+566.2 129.0
+567.3 65.4
+568.2 81.6
+568.9 13.4
+570.3 210.8
+572.3 3708.9
+573.1 304.0
+574.1 43.5
+575.2 182.2
+575.9 34.4
+577.2 38.8
+578.5 26.5
+579.7 84.0
+580.4 90.5
+582.3 11.0
+583.6 67.7
+585.4 48.8
+586.5 151.1
+589.2 33.8
+590.9 100.3
+592.2 40.6
+593.2 63.3
+594.4 1160.5
+595.3 30.1
+598.2 85.1
+599.4 55.9
+601.2 54.9
+602.4 175.6
+603.4 188.6
+604.7 70.9
+607.3 22.3
+609.3 283.7
+610.5 122.6
+611.2 47.5
+613.2 23.4
+614.2 104.0
+615.4 617.7
+616.5 394.9
+617.3 4955.5
+618.4 1744.1
+619.4 358.8
+620.2 26.4
+621.5 561.0
+622.4 144.4
+623.4 8.7
+624.5 129.8
+625.3 187.4
+626.5 145.5
+628.3 59.8
+629.0 9.1
+630.4 26.2
+631.1 41.7
+632.2 93.0
+633.4 502.4
+634.1 195.5
+634.9 90.6
+635.6 11.5
+637.3 252.0
+639.7 411.1
+640.4 241.6
+641.2 665.7
+642.5 2485.0
+643.5 292.1
+644.5 49.7
+645.5 6.9
+655.1 18.3
+657.3 108.8
+658.3 67.2
+660.2 130.2
+663.4 32.2
+665.0 11.5
+666.6 135.8
+667.2 300.6
+668.3 180.9
+669.3 11.3
+671.2 17.5
+673.1 26.9
+674.0 71.3
+674.7 48.8
+675.7 29.4
+677.1 38.1
+678.3 24.8
+682.5 64.1
+683.4 81.4
+685.3 1741.9
+686.2 501.3
+687.1 99.1
+689.5 7.8
+696.4 26.3
+699.3 110.7
+700.2 8.8
+701.3 44.1
+704.4 86.3
+708.5 1456.1
+709.3 23.7
+710.2 32.4
+711.4 54.3
+712.1 74.9
+714.7 38.0
+720.6 25.3
+723.1 114.4
+724.0 16.9
+725.4 38.7
+728.6 111.2
+730.3 1772.4
+731.4 755.5
+732.5 260.3
+733.1 25.9
+735.5 17.5
+737.5 98.5
+739.0 41.2
+740.6 33.7
+742.2 414.9
+743.2 210.9
+744.3 175.7
+745.1 17.2
+749.2 107.5
+756.3 100.5
+762.8 72.6
+763.9 23.3
+765.2 173.6
+766.5 65.2
+768.3 56.9
+769.6 63.7
+770.4 109.3
+772.9 407.9
+775.6 92.8
+776.4 34.3
+780.2 18.8
+783.6 62.3
+784.3 128.4
+785.4 24.6
+786.4 21.4
+789.3 66.1
+791.3 6.9
+792.3 35.1
+792.9 22.5
+795.3 17.1
+796.2 30.0
+798.3 31.4
+799.0 68.3
+801.4 3804.7
+802.1 95.7
+802.8 127.6
+803.7 33.1
+804.6 6.4
+805.5 34.4
+806.6 60.2
+807.4 41.0
+808.6 18.6
+810.6 73.2
+811.3 30.5
+813.8 72.6
+814.5 23.0
+817.7 8.9
+819.5 64.9
+822.4 9.4
+824.1 51.3
+825.3 98.1
+826.4 23.5
+829.4 35.1
+830.3 55.3
+833.7 22.8
+836.4 766.9
+837.5 218.0
+838.4 153.0
+839.4 182.2
+840.5 37.5
+841.5 137.4
+842.6 42.8
+843.9 50.4
+845.1 119.3
+847.4 42.9
+849.3 204.7
+851.8 70.4
+853.3 64.8
+854.1 32.7
+857.3 958.0
+858.0 10189.7
+859.3 1245.6
+860.4 627.2
+861.5 121.1
+862.9 239.0
+864.0 190.3
+864.6 25.3
+870.4 29.4
+871.4 105.4
+875.5 18.0
+876.4 61.2
+878.7 167.8
+879.6 52.6
+881.1 8.7
+882.3 44.3
+883.1 69.6
+885.5 43.0
+893.4 45.4
+894.5 149.3
+895.4 128.9
+897.6 25.5
+899.4 22.8
+901.4 112.6
+903.4 313.7
+904.4 213.0
+905.5 42.2
+906.3 11.8
+911.5 49.2
+913.5 691.4
+914.5 79.1
+916.3 26.0
+919.6 25.9
+920.4 133.3
+922.5 876.1
+923.2 9.7
+925.5 81.8
+927.4 66.1
+928.3 95.4
+929.5 25.4
+932.4 74.6
+934.0 57.1
+938.4 230.8
+939.4 28.5
+940.6 66.5
+942.2 67.0
+946.2 53.4
+949.6 79.4
+951.2 16.1
+953.3 83.7
+954.7 22.3
+956.3 1267.6
+957.4 235.4
+958.3 313.3
+960.7 12.7
+965.3 8.9
+966.5 77.3
+969.7 6.1
+971.4 10.7
+974.5 1716.0
+975.5 583.1
+976.4 87.3
+977.4 88.4
+981.4 10.6
+987.3 27.4
+991.3 37.3
+992.4 29.1
+997.6 96.6
+1001.5 24.8
+1003.7 33.8
+1004.8 17.2
+1008.9 167.8
+1009.5 238.3
+1010.4 107.9
+1012.6 21.2
+1013.7 30.6
+1014.9 27.0
+1016.4 43.4
+1020.6 25.4
+1022.1 15.7
+1023.2 8.0
+1024.5 19.8
+1027.3 694.6
+1028.3 323.3
+1029.4 156.4
+1031.3 76.2
+1039.5 10.7
+1041.4 20.4
+1044.4 21.7
+1047.3 224.5
+1048.5 99.7
+1049.5 95.1
+1050.7 57.6
+1054.7 72.9
+1056.7 9.4
+1073.5 728.2
+1074.5 535.6
+1075.7 231.9
+1076.4 39.6
+1083.7 48.6
+1086.2 118.6
+1087.5 234.4
+1088.3 34.6
+1089.4 43.6
+1090.5 47.4
+1094.4 103.0
+1100.5 17.9
+1118.0 29.3
+1119.4 80.6
+1121.5 81.2
+1127.4 61.3
+1128.4 35.5
+1129.3 52.2
+1136.2 32.7
+1137.5 138.2
+1138.1 42.7
+1139.3 106.9
+1140.1 36.5
+1153.3 58.3
+1155.3 1150.5
+1156.4 576.3
+1157.5 314.9
+1159.5 26.0
+1171.7 29.6
+1173.2 17.9
+1173.9 7.1
+1187.4 93.7
+1188.5 27.0
+1189.2 30.8
+1198.5 26.9
+1199.6 20.4
+1231.4 119.5
+1266.3 47.2
+S	152	152	531.22
+I	ID	74
+I	RTime	3.4297
+Z	2	1061.43
+155.0 0.8
+170.3 1.5
+172.2 1.1
+177.2 1.7
+195.0 1.2
+197.4 1.0
+200.3 2.0
+212.1 2.4
+216.3 1.8
+226.0 1.5
+252.0 0.8
+258.1 1.6
+272.3 4.8
+273.2 3.2
+274.3 2.5
+276.4 1.7
+285.2 0.8
+288.1 20.6
+297.2 1.8
+299.2 2.7
+306.3 5.9
+309.1 1.5
+317.4 8.1
+320.2 1.5
+321.4 3.0
+325.1 4.0
+326.1 1.2
+328.2 3.7
+335.1 1.6
+335.8 3.0
+336.9 2.2
+344.8 1.7
+357.2 1.2
+358.8 3.0
+363.0 0.8
+367.3 5.3
+368.3 1.0
+375.3 13.1
+376.4 2.7
+377.3 4.0
+385.4 5.3
+389.4 3.0
+391.3 2.2
+394.4 1.8
+397.1 1.6
+402.5 13.8
+403.3 51.2
+404.4 6.5
+410.7 5.8
+415.6 4.8
+421.8 4.5
+424.2 9.5
+426.4 11.5
+427.5 2.0
+430.9 6.8
+433.4 12.1
+434.2 1.6
+434.9 5.0
+439.1 2.5
+441.2 6.4
+443.4 1.1
+446.3 3.7
+447.4 3.0
+451.1 7.5
+452.9 2.7
+453.7 8.0
+456.6 9.1
+459.3 4.0
+463.9 5.8
+467.5 12.1
+470.3 3.2
+471.1 5.5
+471.7 8.0
+472.3 4.4
+473.7 9.1
+476.5 2.9
+477.3 1.6
+478.5 10.8
+479.3 4.1
+482.0 8.5
+485.8 13.0
+486.4 2.0
+487.9 22.2
+489.2 0.8
+492.0 19.5
+493.5 12.8
+494.6 9.8
+495.5 4.5
+496.4 5.5
+498.3 8.1
+499.7 6.0
+500.8 6.3
+502.8 3.0
+503.8 3.4
+504.5 15.6
+509.1 5.8
+511.0 4.0
+512.5 5.1
+513.2 21.3
+514.4 14.0
+519.7 11.3
+520.3 4.0
+522.2 30.8
+523.1 7.8
+529.4 0.8
+530.9 2.0
+542.1 4.3
+545.1 4.5
+550.0 4.8
+558.7 1.5
+566.0 3.9
+569.1 2.2
+570.9 2.9
+584.0 2.5
+585.4 1.0
+601.5 12.6
+604.8 1.0
+614.9 7.4
+616.0 13.6
+632.3 11.6
+635.0 3.4
+640.6 3.5
+641.8 4.0
+650.4 6.4
+651.6 17.5
+658.4 2.4
+660.0 2.2
+662.6 1.8
+674.4 7.0
+678.1 2.0
+687.8 1.8
+688.4 3.4
+689.3 13.3
+690.5 3.7
+691.5 3.7
+694.4 2.7
+696.8 10.5
+699.0 3.5
+705.4 5.1
+714.9 5.5
+729.3 3.7
+732.6 2.2
+738.3 2.0
+758.9 6.8
+772.3 3.5
+785.1 1.0
+786.2 13.3
+788.5 3.0
+803.5 2.2
+814.3 2.7
+833.4 1.5
+843.6 1.5
+875.4 2.5
+896.3 4.4
+914.7 3.0
+916.4 4.0
+928.3 2.9
+932.6 5.0
+S	153	153	613.79
+Z	2	1226.57
+177.1 3.8
+180.0 1.9
+185.0 4.0
+192.1 2.8
+198.3 1.1
+199.1 2.0
+202.1 0.4
+206.8 2.2
+210.2 2.5
+211.1 1.0
+213.6 0.4
+216.0 3.6
+221.0 2.1
+222.1 14.6
+223.2 7.9
+224.1 6.9
+230.3 2.1
+239.0 2.2
+239.9 2.6
+247.1 0.3
+248.2 7.8
+249.3 0.7
+250.2 1.8
+250.9 1.1
+254.2 1.8
+259.0 3.3
+260.0 0.6
+264.9 1.8
+266.2 2.1
+267.2 7.7
+268.2 8.9
+269.2 26.1
+270.1 8.5
+276.6 0.7
+281.3 6.3
+282.2 14.7
+283.2 6.9
+284.1 8.3
+285.1 7.9
+286.0 8.5
+287.1 9.9
+288.1 6.3
+290.7 1.1
+297.0 6.0
+298.6 7.2
+299.6 4.0
+300.6 2.4
+301.5 3.4
+302.4 2.7
+304.1 1.9
+306.0 5.6
+307.0 3.7
+317.2 1.3
+319.2 53.9
+320.3 5.6
+324.8 0.5
+333.2 0.6
+334.3 0.4
+335.3 0.6
+339.2 4.2
+341.1 3.9
+342.0 0.6
+354.0 0.4
+355.2 62.0
+356.1 108.7
+357.1 160.0
+358.1 153.6
+359.2 51.3
+368.5 5.6
+370.9 3.6
+372.1 5.6
+373.0 8.8
+374.1 13.5
+375.2 1.9
+376.2 17.8
+377.2 6.4
+391.1 2.1
+392.6 2.7
+401.2 2.8
+403.6 3.1
+404.3 1.5
+405.3 1.0
+410.5 0.4
+414.2 1.2
+417.2 6.6
+418.2 6.6
+419.2 4.0
+422.1 0.9
+427.2 0.4
+429.1 4.3
+430.1 6.0
+431.2 2.4
+433.2 1.8
+434.1 2.0
+435.7 0.4
+436.7 2.6
+438.0 2.3
+447.3 16.2
+448.1 2.6
+449.3 3.8
+451.3 1.9
+455.3 3.2
+455.9 3.5
+462.2 0.9
+463.3 21.6
+465.2 5.4
+468.9 1.2
+469.7 2.3
+472.7 1.2
+474.7 0.8
+477.1 2.2
+480.1 2.5
+481.3 0.8
+485.2 1.6
+486.8 8.2
+490.1 14.8
+491.3 3.1
+492.2 0.8
+493.2 0.7
+494.6 2.0
+496.5 4.4
+497.4 1.1
+499.5 12.0
+500.2 3.3
+501.0 0.2
+502.5 7.6
+504.8 7.2
+506.0 10.8
+507.1 4.4
+507.9 16.7
+508.5 5.3
+509.1 2.9
+510.0 0.4
+511.1 1.7
+512.3 12.4
+513.3 3.7
+514.2 1.6
+515.3 5.2
+516.6 43.1
+517.3 6.8
+518.9 4.3
+519.5 1.4
+520.8 0.8
+524.3 6.3
+525.6 50.0
+526.5 0.5
+527.7 12.8
+528.5 9.4
+529.5 4.9
+530.5 11.3
+531.3 4.7
+532.4 7.7
+533.3 1.8
+534.4 16.8
+535.2 2.1
+536.6 2.2
+537.5 10.8
+538.4 14.8
+539.1 3.7
+541.6 0.2
+542.5 9.9
+543.8 6.2
+546.2 10.3
+546.9 9.9
+548.2 7.8
+549.0 1.7
+550.8 21.3
+551.7 41.9
+552.5 14.0
+553.5 2.5
+554.1 0.5
+555.7 3.9
+560.0 158.5
+560.9 47.0
+563.2 5.9
+565.0 5.6
+568.8 108.0
+569.5 65.8
+570.4 3.4
+571.5 2.9
+574.7 5.8
+576.6 3.4
+577.9 13.5
+578.6 4.4
+580.0 7.1
+580.8 3.7
+581.5 3.5
+583.7 3.1
+584.4 4.4
+586.8 11.6
+587.5 34.8
+588.9 7.4
+589.5 5.3
+590.3 1.6
+594.7 11.3
+595.7 87.8
+596.5 57.6
+597.6 6.0
+598.8 0.4
+600.9 5.2
+602.0 1.9
+603.4 5.6
+604.6 202.4
+605.5 40.1
+612.4 5.4
+615.3 1.6
+622.2 0.4
+625.2 1.7
+631.1 0.6
+637.5 1.3
+643.7 3.4
+644.4 4.0
+657.5 1.4
+658.2 1.6
+659.1 1.0
+660.5 6.3
+661.3 0.4
+667.4 1.6
+670.4 1.6
+672.6 2.3
+674.1 8.1
+676.2 4.3
+678.3 27.1
+679.4 5.7
+689.8 1.7
+690.4 2.1
+692.2 0.4
+692.9 1.5
+694.5 1.8
+709.8 6.6
+711.1 1.7
+719.3 1.2
+727.5 1.4
+728.4 2.4
+729.5 6.8
+730.5 1.4
+731.3 4.5
+733.7 0.5
+745.2 7.8
+746.2 7.1
+747.1 3.0
+755.4 2.8
+761.3 1.3
+763.3 12.4
+764.5 5.5
+767.4 1.0
+779.5 49.0
+780.5 12.6
+781.4 2.5
+783.4 1.7
+786.2 1.8
+797.5 0.9
+799.5 1.4
+800.5 1.0
+807.7 1.8
+815.2 5.0
+817.6 4.4
+818.4 2.2
+828.5 1.2
+832.1 1.2
+833.3 13.8
+834.4 5.3
+836.8 0.4
+850.1 6.2
+851.0 6.4
+851.7 6.6
+852.5 3.0
+858.7 6.2
+859.3 1.0
+872.4 2.8
+878.1 3.3
+889.5 7.2
+890.5 7.1
+891.6 8.6
+893.3 0.7
+904.5 6.4
+905.7 0.8
+907.4 18.8
+908.5 9.4
+909.2 0.9
+909.8 1.3
+910.5 3.0
+917.3 1.0
+921.4 4.1
+936.4 2.8
+946.5 1.3
+960.7 5.2
+972.8 1.9
+975.7 0.4
+978.6 39.0
+979.7 14.3
+980.5 3.3
+990.3 2.5
+991.5 1.9
+992.6 7.5
+994.5 1.0
+1006.6 0.4
+1008.5 7.0
+1009.5 2.7
+1014.3 1.3
+1031.4 3.4
+1032.4 7.6
+1033.5 4.1
+1040.7 1.7
+1049.5 84.2
+1050.5 35.3
+1051.6 17.8
+1052.2 0.6
+1052.8 2.6
+1054.5 3.0
+1055.2 0.8
+1104.5 3.7
+1118.2 2.2
+1155.7 2.4
+S	154	154	717.06
+I	ID	168
+I	RTime	8.2686
+Z	1	717.06
+212.3 1.7
+222.2 1.0
+228.1 4.4
+239.8 4.5
+243.3 3.4
+295.9 2.0
+312.0 1.1
+312.9 2.2
+320.3 1.1
+323.7 2.9
+325.6 2.0
+331.3 9.0
+333.3 1.8
+341.3 3.2
+345.1 3.0
+347.4 3.0
+353.5 3.2
+355.2 3.0
+361.2 2.2
+368.3 2.0
+369.4 1.0
+385.0 1.2
+394.4 2.9
+405.5 2.4
+410.2 1.8
+425.3 2.2
+426.5 1.1
+440.3 1.2
+441.0 1.1
+442.2 3.2
+445.0 5.0
+447.3 4.1
+449.7 1.5
+456.1 3.2
+458.3 9.5
+475.5 5.5
+479.3 3.7
+487.7 4.0
+492.3 2.7
+496.3 2.5
+497.6 3.7
+500.6 6.4
+501.6 4.0
+502.3 1.1
+503.1 3.0
+512.2 2.2
+514.5 3.9
+516.3 2.2
+524.2 2.0
+525.1 6.1
+526.4 3.2
+531.4 2.2
+540.6 1.2
+545.2 2.2
+548.4 3.5
+570.4 2.5
+571.4 2.2
+580.4 4.1
+588.9 10.1
+589.6 4.9
+602.3 3.0
+610.0 1.2
+629.1 3.7
+654.7 2.2
+659.7 6.5
+664.5 4.0
+666.2 1.3
+672.5 6.6
+681.3 6.4
+698.5 9.5
+699.5 3.7
+700.4 2.5
+707.7 42.0
+899.0 2.0
+1004.7 5.5
+S	155	155	419.32
+I	ID	195
+I	RTime	9.6355
+Z	2	837.63
+122.0 1.8
+127.1 12.1
+129.1 2.0
+141.2 2.2
+145.3 1.5
+148.8 1.7
+154.2 2.5
+155.0 14.1
+158.3 2.0
+161.2 2.5
+167.0 2.7
+172.1 10.0
+174.2 1.2
+175.1 15.8
+185.4 2.0
+194.9 2.7
+198.0 2.0
+201.3 1.2
+203.2 1.2
+212.2 3.4
+216.3 7.0
+219.2 2.2
+224.3 3.2
+226.2 16.2
+229.2 3.0
+231.1 7.8
+233.2 1.3
+234.0 4.8
+235.2 2.2
+240.3 1.7
+243.1 3.7
+246.3 2.2
+252.4 2.4
+255.1 17.7
+256.2 16.7
+259.0 1.7
+260.4 1.2
+261.3 4.3
+266.2 1.2
+268.0 2.0
+272.3 11.3
+273.2 2.7
+275.0 22.8
+276.2 1.7
+277.1 1.2
+278.0 21.1
+283.3 14.0
+284.3 2.2
+286.3 2.0
+288.2 2.5
+289.4 1.7
+290.4 23.5
+291.1 10.1
+293.2 2.0
+297.2 1.2
+297.8 3.2
+300.1 3.0
+301.2 1.7
+303.6 3.7
+304.2 34.4
+306.4 2.2
+310.4 2.2
+312.3 1.2
+315.0 3.4
+317.5 1.2
+320.4 1.2
+324.0 4.1
+326.3 4.3
+327.2 3.4
+329.3 36.7
+330.4 1.5
+333.3 1.0
+338.0 3.0
+339.2 0.8
+341.7 12.3
+343.3 2.5
+345.2 3.2
+348.0 1.0
+349.0 2.2
+352.4 5.1
+354.3 1.3
+356.2 3.4
+357.1 4.3
+360.4 3.4
+366.3 20.1
+367.6 1.7
+370.2 2.7
+372.1 1.2
+373.2 3.5
+373.9 2.7
+375.2 2.7
+376.3 3.7
+380.5 8.3
+383.3 17.2
+384.4 10.0
+385.2 8.6
+386.3 4.0
+387.3 9.3
+388.4 4.0
+389.4 4.3
+390.4 16.5
+394.5 4.0
+395.2 10.0
+401.2 202.1
+402.3 42.0
+403.3 10.8
+410.1 70.0
+411.3 2.2
+448.9 1.6
+457.7 3.2
+463.4 3.4
+478.8 1.6
+491.1 7.8
+492.3 3.2
+507.4 1.5
+508.4 13.8
+520.6 10.8
+536.0 17.0
+547.3 2.0
+548.1 2.0
+551.4 11.1
+554.4 49.2
+555.3 10.3
+564.3 3.7
+565.4 2.7
+587.3 3.5
+593.0 3.9
+594.5 2.2
+610.9 12.5
+611.5 67.0
+612.5 34.5
+613.5 5.6
+622.2 3.4
+624.3 3.0
+630.6 2.9
+646.5 1.8
+662.3 5.3
+665.3 1.5
+668.6 2.0
+682.4 53.2
+683.3 8.0
+709.4 10.1
+749.3 1.3
+777.2 1.2
+814.8 4.0
+816.6 3.9
+S	156	156	1032.44
+Z	3	3095.30
+298.0 1.7
+308.4 0.8
+312.0 1.1
+319.0 1.6
+325.1 19.8
+326.3 1.1
+328.1 1.9
+329.3 1.6
+334.5 0.2
+335.7 0.6
+337.1 2.1
+341.2 12.0
+342.2 21.8
+343.2 3.8
+354.1 1.0
+355.3 2.4
+356.1 0.8
+357.3 0.8
+359.0 0.5
+363.5 1.6
+365.1 0.6
+365.9 2.2
+370.7 5.3
+371.5 4.7
+372.2 1.7
+374.3 2.7
+374.9 0.8
+383.1 0.3
+385.1 2.5
+389.3 13.8
+390.4 2.7
+391.4 1.3
+394.4 1.5
+396.4 2.2
+399.5 1.2
+400.1 2.0
+408.6 4.2
+411.0 1.4
+413.1 28.8
+414.2 7.2
+416.9 1.1
+423.3 1.0
+424.1 3.0
+426.2 3.0
+427.1 2.5
+430.5 2.6
+431.3 7.0
+432.1 1.4
+434.9 1.1
+436.2 1.2
+437.2 0.2
+439.2 2.7
+440.0 1.4
+441.4 0.8
+442.2 1.9
+452.2 7.9
+453.4 8.1
+454.1 11.2
+454.8 1.9
+456.0 1.8
+457.9 0.9
+459.0 0.5
+464.9 0.6
+470.0 7.1
+471.1 1.9
+472.2 10.4
+473.3 2.1
+475.1 0.6
+479.1 2.3
+481.4 0.3
+487.3 4.3
+489.2 1.7
+493.6 1.9
+494.2 5.8
+495.1 3.1
+497.4 1.1
+504.0 31.2
+504.7 1.2
+505.4 5.0
+506.0 1.5
+507.0 1.3
+512.2 2.7
+512.8 3.3
+514.2 0.8
+516.3 5.2
+523.2 2.9
+524.1 10.6
+525.0 10.5
+525.9 1.6
+527.3 1.1
+530.1 6.1
+531.3 1.0
+532.3 1.6
+534.4 2.2
+540.9 5.0
+542.2 1.2
+543.1 2.3
+544.3 2.3
+547.3 1.8
+549.7 3.7
+550.4 1.0
+551.2 15.0
+552.3 2.5
+553.3 2.7
+554.9 1.9
+558.1 3.6
+559.1 2.0
+561.8 4.5
+563.5 4.2
+564.1 3.3
+565.2 2.8
+567.5 0.5
+572.0 146.7
+572.7 6.7
+574.8 1.1
+578.5 2.2
+582.8 7.6
+583.5 7.0
+584.3 4.6
+585.2 2.0
+589.1 2.1
+591.2 0.3
+592.1 2.5
+594.5 1.3
+595.9 2.5
+598.8 2.9
+600.2 10.7
+601.2 10.2
+602.0 3.3
+607.3 40.9
+608.8 0.5
+609.4 2.8
+610.0 6.3
+613.3 2.9
+614.3 1.4
+616.1 11.5
+617.0 2.7
+618.3 75.4
+619.2 29.0
+620.5 2.9
+621.2 3.3
+622.2 0.9
+625.0 2.6
+627.3 0.5
+630.4 3.0
+632.2 4.7
+632.8 1.2
+633.5 4.0
+635.1 1.0
+638.2 4.7
+640.0 0.5
+641.2 4.4
+642.2 3.0
+644.3 1.3
+646.1 2.8
+647.2 1.8
+648.3 3.8
+649.1 8.1
+650.1 1.7
+651.0 6.0
+653.1 1.7
+655.5 4.3
+656.1 1.8
+657.4 10.0
+658.0 1.9
+660.0 1.2
+663.1 5.8
+664.2 13.4
+665.0 16.7
+666.1 42.2
+667.1 24.1
+668.5 4.0
+671.3 3.9
+672.2 2.4
+676.5 1.5
+678.8 8.6
+683.2 2.6
+684.3 3.5
+687.2 4.2
+689.2 221.6
+690.2 91.0
+691.5 8.0
+692.8 4.6
+696.4 3.6
+697.7 19.7
+698.6 9.1
+701.1 1.2
+702.2 3.0
+703.1 0.7
+703.9 2.8
+705.8 8.7
+707.0 38.0
+707.8 21.6
+709.2 1.8
+710.7 3.1
+713.1 5.2
+714.2 3.6
+715.3 6.3
+716.2 3.7
+717.4 1.9
+718.1 2.7
+719.3 3.2
+720.1 12.4
+722.2 1.3
+724.4 1.5
+726.5 8.8
+727.6 3.3
+731.3 1.9
+732.9 8.3
+733.5 1.0
+735.4 4.3
+736.3 2.7
+737.3 19.8
+738.4 3.1
+739.2 3.5
+741.3 4.5
+744.0 1.3
+745.9 4.2
+747.3 5.3
+748.0 3.6
+749.2 4.9
+750.1 0.8
+752.2 3.0
+753.5 23.3
+754.3 9.8
+755.3 8.3
+756.2 3.7
+756.9 1.3
+757.5 9.9
+759.6 6.7
+762.1 50.4
+762.8 4.6
+763.4 14.4
+764.4 6.8
+765.3 8.6
+766.2 3.0
+767.3 4.2
+769.0 66.0
+770.0 17.1
+770.9 416.5
+771.7 94.7
+772.3 18.2
+775.5 3.3
+778.0 1637.1
+778.9 311.7
+780.1 13.0
+781.4 3.0
+782.5 1.3
+784.4 8.1
+785.5 5.1
+786.2 2.5
+786.9 0.7
+790.2 1.9
+792.0 1.6
+793.5 1.4
+795.2 1.3
+798.3 3.2
+799.0 6.5
+802.3 47.4
+803.3 19.0
+804.2 7.4
+805.4 1.3
+808.1 8.5
+810.4 14.6
+811.4 1.6
+812.1 3.2
+814.5 11.1
+816.8 0.9
+819.9 24.3
+822.4 1.4
+824.5 3.7
+825.9 1.9
+827.2 2.6
+831.1 3.8
+832.7 63.9
+833.5 102.6
+834.7 1.9
+837.2 5.1
+837.9 1.5
+838.7 4.0
+839.3 0.3
+842.0 477.5
+843.0 95.7
+844.1 6.0
+845.0 9.2
+846.0 9.4
+848.2 6.4
+849.7 8.4
+851.5 5.0
+854.2 3.3
+855.4 4.9
+856.3 6.1
+858.0 1.7
+858.8 3.8
+860.9 3.8
+862.6 6.5
+863.6 4.0
+864.6 6.4
+865.5 7.4
+866.3 12.3
+867.2 6.2
+874.6 2.9
+876.4 8.8
+878.6 8.5
+879.3 3.7
+880.5 2.5
+881.2 0.4
+882.4 11.7
+884.0 26.2
+885.1 21.5
+888.3 1.5
+890.2 1.7
+891.4 14.3
+892.3 3.6
+894.2 4.4
+895.5 6.5
+897.1 2.6
+898.2 2.8
+899.7 3.0
+901.2 12.0
+902.0 8.9
+904.2 0.7
+905.6 7.1
+908.4 6.4
+909.1 6.2
+909.8 1.3
+911.2 5.7
+913.1 9.2
+915.4 1.1
+917.3 69.9
+918.3 34.2
+919.2 1.7
+919.9 3.8
+920.7 4.1
+923.6 11.3
+924.8 4.9
+925.4 0.6
+926.2 3.4
+927.2 1.8
+928.2 1.1
+929.3 6.1
+931.2 79.4
+932.1 53.8
+932.9 0.2
+933.9 9.3
+937.7 1.4
+940.0 1941.3
+941.0 519.2
+941.9 55.3
+943.1 45.3
+944.1 50.1
+945.1 43.2
+946.1 22.7
+948.2 14.9
+949.2 2.8
+949.9 1.8
+951.5 12.7
+952.2 8.2
+954.4 9.3
+955.4 2.4
+956.3 3.0
+957.3 1.9
+958.5 17.8
+959.5 21.8
+961.0 6.2
+961.9 3.2
+962.5 30.9
+963.6 3.5
+964.2 0.5
+966.3 4.2
+967.0 9.0
+968.1 52.2
+969.0 41.0
+970.3 3.9
+971.8 1.7
+972.9 6.1
+973.9 31.8
+975.0 12.4
+976.8 312.1
+977.5 377.0
+978.4 29.8
+979.1 22.8
+980.3 15.2
+981.5 4.0
+983.8 28.2
+984.6 15.0
+986.8 1.0
+988.1 3.5
+988.7 5.5
+989.3 2.3
+990.2 12.8
+991.7 4.3
+993.4 3.5
+994.5 6.5
+995.4 6.2
+996.5 16.9
+997.4 1.6
+998.3 5.0
+999.2 7.8
+999.9 13.0
+1001.3 7.1
+1002.2 6.1
+1004.2 24.2
+1005.2 14.1
+1006.3 0.3
+1009.0 3.6
+1010.4 1.5
+1011.4 8.1
+1012.6 13.4
+1013.6 22.1
+1014.4 20.9
+1015.2 19.5
+1016.4 9.5
+1017.3 9.5
+1018.1 6.1
+1019.3 12.8
+1020.3 35.0
+1021.1 13.5
+1021.8 10.7
+1023.0 19.6
+1024.0 4.0
+1033.2 5.9
+1034.1 2.5
+1041.0 1.4
+1041.7 7.6
+1044.9 7.9
+1045.6 6.0
+1046.4 7.5
+1047.3 3.3
+1047.9 3.8
+1049.6 4.4
+1051.3 3.2
+1052.6 1.8
+1055.0 3.9
+1060.1 4.1
+1068.9 7.4
+1069.7 6.5
+1070.3 2.9
+1071.4 3.8
+1072.0 1.7
+1073.3 4.4
+1076.6 4.5
+1077.4 8.9
+1078.3 5.8
+1080.4 1.7
+1081.3 3.1
+1082.0 3.4
+1083.3 2.5
+1085.0 3.0
+1087.3 30.6
+1088.2 21.3
+1089.5 47.5
+1090.2 24.3
+1091.1 8.1
+1092.6 0.4
+1093.9 5.9
+1094.9 1.7
+1095.7 3.3
+1100.1 1.2
+1106.2 20.8
+1107.0 16.1
+1108.4 31.3
+1109.6 5.2
+1112.1 0.4
+1118.4 5.0
+1122.5 11.3
+1123.6 8.8
+1125.2 13.6
+1126.5 10.7
+1127.2 0.6
+1128.9 4.0
+1131.0 1.9
+1133.4 1.9
+1134.7 1.2
+1136.1 1.5
+1137.9 3.8
+1138.9 6.9
+1140.0 4.6
+1142.3 431.5
+1143.4 240.7
+1144.4 46.0
+1145.6 8.0
+1147.2 41.5
+1148.1 14.4
+1149.3 3.6
+1150.2 1.3
+1151.4 5.9
+1153.3 3.6
+1154.0 3.3
+1154.8 1.9
+1161.3 0.6
+1162.3 5.5
+1163.6 2.3
+1165.8 45.9
+1166.5 62.0
+1167.4 16.4
+1168.2 3.5
+1169.4 4.1
+1170.6 10.7
+1171.2 1.7
+1172.3 2.3
+1173.5 0.8
+1174.2 1.0
+1175.6 2.0
+1177.4 2.1
+1179.9 8.7
+1180.7 2.8
+1181.4 15.3
+1182.4 3.8
+1183.5 4.9
+1184.8 1.8
+1185.5 2.2
+1186.9 0.3
+1188.4 2.9
+1189.9 7.9
+1190.7 3.1
+1191.6 2.4
+1192.2 3.8
+1194.3 51.4
+1195.0 16.9
+1195.8 12.3
+1196.6 1.2
+1198.3 180.3
+1199.2 121.2
+1200.2 46.7
+1201.3 5.3
+1203.3 125.1
+1204.1 281.0
+1205.0 59.0
+1206.3 1.6
+1207.6 4.7
+1208.4 1.5
+1210.2 6.8
+1213.3 125.3
+1214.4 65.0
+1216.3 864.6
+1217.3 428.7
+1218.4 132.5
+1219.4 22.0
+1220.5 1.3
+1222.2 0.7
+1223.1 3.8
+1226.1 1.8
+1230.5 47.5
+1231.3 4.6
+1232.4 2.0
+1234.5 5.2
+1235.6 7.1
+1236.7 5.1
+1237.4 2.2
+1239.1 128.4
+1240.0 57.3
+1240.9 5.8
+1242.5 1.2
+1243.9 5.2
+1245.1 3.6
+1247.6 81.3
+1248.4 72.8
+1249.7 7.1
+1252.0 1.6
+1261.9 2.0
+1262.7 4.7
+1263.4 0.5
+1265.3 1.7
+1266.9 0.7
+1270.8 4.3
+1274.4 12.4
+1275.5 6.9
+1277.0 2.0
+1280.3 3.8
+1281.7 1.0
+1283.3 144.2
+1284.0 43.2
+1284.9 1.6
+1286.0 1.2
+1287.6 24.4
+1289.4 4.9
+1292.3 5.0
+1294.4 4.8
+1295.9 74.8
+1297.0 41.6
+1298.4 7.1
+1299.2 3.4
+1300.2 4.6
+1301.2 2.0
+1302.4 1.8
+1305.0 4.1
+1306.8 7.9
+1308.2 2.1
+1309.5 1.7
+1311.3 2.6
+1313.3 3.1
+1314.6 7.1
+1317.8 2.0
+1319.3 19.6
+1320.1 6.7
+1321.0 0.6
+1321.8 3.2
+1328.3 73.8
+1329.4 54.9
+1330.4 6.1
+1334.9 8.3
+1338.0 1.2
+1338.7 1.4
+1342.2 4.2
+1344.5 5.4
+1345.4 10.3
+1350.6 1.6
+1353.2 9.3
+1354.1 30.7
+1355.1 0.5
+1360.3 1.3
+1362.4 83.8
+1363.4 13.5
+1364.1 2.0
+1364.8 4.0
+1366.1 3.8
+1367.2 2.4
+1370.6 1.6
+1376.0 0.6
+1377.4 20.9
+1378.4 4.6
+1382.1 4.3
+1384.5 3.9
+1390.2 1.6
+1391.4 6.3
+1393.6 3.5
+1394.4 35.9
+1395.6 46.9
+1396.4 10.0
+1398.0 5.3
+1398.7 10.2
+1403.1 1.9
+1406.2 2.3
+1407.5 1.9
+1408.6 8.3
+1410.0 6.3
+1410.6 2.5
+1412.3 252.4
+1413.4 130.2
+1414.4 44.1
+1415.2 7.8
+1417.9 25.5
+1418.6 23.5
+1419.3 11.0
+1421.5 0.4
+1422.2 2.7
+1423.2 5.9
+1424.7 3.5
+1426.5 42.0
+1427.3 33.9
+1428.2 20.4
+1431.6 2.9
+1432.9 1.3
+1439.1 2.8
+1441.7 7.5
+1442.6 2.4
+1447.4 2.2
+1449.6 1.4
+1455.9 2.5
+1457.6 28.2
+1458.5 18.0
+1459.5 1.9
+1462.4 2.1
+1463.2 1.2
+1465.6 11.3
+1466.7 24.7
+1467.5 2.6
+1474.5 91.8
+1475.3 106.0
+1476.0 35.1
+1476.7 4.7
+1479.6 1.5
+1485.4 4.3
+1490.2 0.4
+1491.4 11.4
+1492.5 3.7
+1493.3 0.9
+1496.3 1.7
+1502.6 3.3
+1504.7 3.1
+1505.4 5.8
+1507.5 0.3
+1513.5 5.5
+1517.0 1.7
+1519.4 2.1
+1520.4 4.9
+1522.3 131.1
+1523.4 81.8
+1524.4 35.7
+1525.3 1.9
+1536.4 9.0
+1537.6 14.8
+1538.4 11.7
+1540.3 478.5
+1541.4 441.3
+1542.5 126.7
+1543.3 22.3
+1544.1 12.2
+1554.4 329.6
+1555.4 230.3
+1556.4 88.7
+1557.5 16.9
+1559.1 1.4
+1560.8 2.3
+1566.4 4.6
+1576.5 8.5
+1577.4 4.4
+1578.5 1.5
+1584.7 1.3
+1590.7 2.1
+1593.6 11.3
+1594.6 4.7
+1610.1 5.9
+1614.8 1.8
+1617.4 4.6
+1619.8 2.2
+1620.5 0.6
+1629.5 12.8
+1630.5 6.2
+1632.6 1.5
+1638.3 2.1
+1641.9 1.8
+1644.5 0.8
+1650.1 0.5
+1653.2 1.6
+1656.7 1.1
+1661.4 0.6
+1665.2 6.8
+1666.3 15.7
+1667.6 11.1
+1669.3 0.4
+1673.3 3.6
+1674.1 2.1
+1677.9 2.4
+1682.4 17.6
+1683.7 11.7
+1684.5 6.0
+1691.1 2.8
+1692.4 2.6
+1701.5 0.3
+1706.3 1.8
+1708.8 0.5
+1715.5 2.1
+1728.6 2.2
+1729.3 0.6
+1733.6 0.4
+1740.3 4.1
+1741.7 3.5
+1748.6 3.1
+1749.5 3.3
+1751.9 4.3
+1767.0 2.5
+1767.7 16.6
+1769.9 3.8
+1771.7 6.3
+1773.9 7.8
+1781.5 5.9
+1782.5 1.0
+1783.8 1.4
+1786.2 4.9
+1802.7 1.9
+1812.5 4.5
+1819.5 15.4
+1832.7 4.0
+1836.8 1.1
+1861.4 1.5
+1863.4 5.7
+1866.2 3.9
+1875.9 3.2
+1878.5 4.4
+1879.4 1.0
+1880.3 2.0
+1881.2 1.5
+1881.8 7.9
+1882.6 7.5
+1883.4 0.6
+1884.2 4.8
+1895.5 2.4
+1896.7 1.0
+1898.2 4.9
+1917.2 2.1
+1919.6 2.9
+1934.6 4.6
+1935.4 15.7
+1936.1 5.1
+1936.7 12.2
+1937.6 3.0
+1950.1 2.3
+1952.6 23.4
+1953.6 38.9
+1954.6 21.0
+1955.4 0.8
+1968.8 0.5
+1995.4 4.5
+S	157	157	509.32
+I	ID	74
+I	RTime	3.4364
+Z	2	1017.63
+144.1 2.7
+154.2 1.2
+155.1 2.9
+161.1 3.5
+163.8 1.6
+168.2 3.0
+175.2 0.6
+180.1 2.2
+187.3 2.7
+200.2 1.2
+201.2 3.5
+203.2 1.3
+205.2 4.6
+209.3 1.6
+214.3 6.6
+215.1 2.2
+218.1 1.7
+219.1 3.7
+221.1 9.5
+226.2 8.0
+231.3 1.7
+234.1 2.2
+244.2 10.6
+246.7 4.6
+248.2 64.9
+258.2 5.8
+258.9 0.6
+266.2 121.3
+271.1 0.8
+272.2 1.6
+275.2 2.5
+282.8 1.3
+284.1 2.9
+289.3 21.0
+290.4 4.8
+294.0 1.7
+300.1 1.7
+303.5 1.1
+310.6 2.5
+312.3 3.0
+326.2 2.7
+328.4 3.2
+329.6 1.2
+331.4 1.2
+333.3 7.0
+334.2 1.5
+335.3 2.7
+343.3 2.7
+344.1 3.4
+345.2 2.5
+347.1 5.0
+349.0 2.2
+350.2 2.9
+352.0 3.0
+354.2 3.4
+358.4 1.1
+359.4 1.8
+361.3 6.6
+363.3 10.8
+364.3 1.2
+371.2 2.0
+372.5 6.0
+375.9 1.7
+379.0 5.3
+380.0 5.4
+381.3 25.2
+386.8 2.9
+387.5 1.2
+388.2 8.8
+391.7 3.5
+393.4 17.7
+394.4 10.8
+395.2 2.5
+400.3 32.0
+401.2 16.0
+402.2 21.7
+402.9 4.3
+404.4 5.5
+405.3 3.0
+406.6 3.2
+409.3 26.0
+411.2 1.1
+412.0 45.2
+413.2 3.5
+414.4 2.5
+415.1 2.7
+417.4 2.0
+418.0 1.6
+418.8 6.5
+421.3 2.7
+422.6 3.5
+423.5 10.6
+424.4 1.7
+426.9 1.1
+427.8 4.0
+428.4 3.2
+432.2 3.7
+433.2 1.2
+439.1 1.7
+440.0 4.0
+442.2 6.3
+443.2 1.2
+445.0 14.8
+446.6 8.6
+448.9 6.9
+450.5 2.7
+451.3 2.5
+455.4 37.7
+456.4 21.2
+459.4 10.0
+460.3 9.3
+461.3 18.6
+462.4 2.0
+464.0 1.2
+464.9 4.1
+465.5 2.5
+467.9 4.8
+468.5 2.0
+470.6 4.4
+471.3 5.6
+472.6 9.6
+473.7 43.0
+474.4 2.0
+475.4 7.4
+478.8 3.9
+479.5 3.4
+481.1 2.2
+482.6 8.6
+483.3 4.1
+484.3 11.3
+485.5 10.6
+487.1 22.6
+487.8 16.5
+489.0 10.3
+489.7 1.1
+491.2 100.6
+491.9 41.2
+492.7 4.0
+495.2 5.3
+497.2 32.5
+497.9 17.2
+499.7 45.4
+500.7 44.2
+501.6 8.1
+506.6 1.3
+509.3 7.0
+517.2 3.2
+526.4 6.6
+527.3 3.0
+533.5 7.9
+536.0 4.6
+538.9 4.4
+541.1 3.2
+542.4 1.6
+543.3 8.3
+544.9 0.6
+547.8 2.9
+549.1 2.9
+550.8 3.5
+552.3 1.2
+555.8 1.5
+557.4 5.5
+560.9 4.9
+565.8 4.0
+576.3 7.5
+578.4 3.7
+580.4 3.2
+581.3 4.0
+583.5 1.3
+587.2 6.0
+589.7 3.0
+600.0 2.0
+601.4 11.6
+602.4 5.0
+604.4 11.6
+605.3 5.0
+611.2 8.5
+613.2 1.7
+618.5 5.9
+623.4 10.6
+634.9 6.4
+635.7 5.4
+636.5 4.4
+638.5 5.5
+639.6 5.0
+640.6 1.3
+645.3 9.8
+646.3 2.5
+648.5 3.7
+651.0 1.6
+657.3 7.1
+658.4 4.1
+659.3 5.6
+666.4 2.5
+667.3 3.4
+668.4 1.1
+673.5 0.8
+675.3 12.1
+676.5 4.6
+681.9 3.4
+682.7 12.8
+689.6 24.3
+690.6 1.3
+691.5 1.1
+692.6 15.5
+693.4 3.0
+698.8 5.5
+700.8 1.7
+704.6 1.8
+705.4 2.7
+710.5 1.8
+711.2 2.7
+712.5 2.4
+716.5 6.4
+719.4 7.9
+725.5 2.2
+729.4 9.1
+730.3 2.5
+734.2 2.0
+735.5 1.0
+736.4 5.4
+743.4 7.4
+747.3 2.7
+760.0 3.9
+761.4 1.7
+771.5 2.5
+774.4 2.4
+785.2 3.7
+786.6 6.1
+790.5 2.0
+791.5 1.7
+800.3 2.2
+803.6 10.6
+804.6 12.6
+817.8 9.1
+818.7 2.0
+828.6 2.5
+844.5 4.5
+853.5 2.0
+854.5 4.1
+857.4 6.9
+861.1 1.3
+871.2 5.0
+888.6 6.5
+890.5 2.2
+910.1 2.2
+915.3 4.0
+943.3 0.8
+956.6 2.0
+S	158	158	427.38
+I	ID	91
+I	RTime	4.2795
+Z	2	853.75
+129.1 31.6
+141.3 4.9
+144.0 1.0
+147.1 10.1
+148.0 1.5
+149.2 2.5
+151.1 2.7
+157.1 1.7
+159.0 1.7
+161.0 2.7
+175.2 3.2
+179.3 1.2
+180.3 2.9
+185.1 5.0
+186.1 3.0
+199.2 2.2
+200.3 1.1
+201.2 2.0
+203.1 2.7
+203.9 1.1
+209.0 4.1
+210.3 2.2
+218.4 8.6
+219.1 3.7
+224.2 2.0
+225.0 1.1
+232.2 6.0
+241.2 2.2
+243.0 1.1
+247.2 1.7
+249.2 1.2
+250.2 2.0
+251.2 11.1
+253.3 7.4
+254.3 4.5
+254.9 1.8
+259.1 1.6
+263.1 3.0
+265.2 3.0
+266.0 2.7
+267.1 12.6
+268.9 89.8
+269.6 1.0
+271.8 3.5
+272.4 7.8
+273.2 1.2
+279.4 1.8
+280.2 5.1
+281.2 4.6
+282.2 23.6
+283.3 3.0
+287.1 40.5
+289.0 7.0
+290.0 8.3
+291.1 20.7
+294.2 2.2
+295.8 8.1
+297.2 3.4
+298.2 32.2
+299.2 39.5
+300.2 53.0
+301.4 1.2
+311.6 14.3
+312.3 31.8
+313.4 8.8
+316.4 4.6
+318.1 3.7
+319.1 1.7
+321.7 1.5
+323.3 2.5
+333.4 1.2
+336.4 2.5
+337.2 0.8
+337.9 4.0
+340.4 1.2
+344.7 7.0
+345.8 7.0
+348.4 3.0
+349.1 2.2
+350.4 5.3
+351.3 1.6
+352.4 3.5
+353.5 7.1
+354.5 2.9
+356.1 2.9
+357.3 1.7
+359.1 22.7
+360.5 3.9
+361.7 6.0
+362.9 19.6
+366.4 4.0
+367.2 19.2
+368.1 4.3
+369.2 2.7
+370.3 1.3
+381.1 43.2
+382.2 6.6
+383.3 11.8
+384.1 12.1
+385.0 1.3
+386.3 3.7
+389.4 1.5
+391.2 11.1
+392.3 33.2
+393.3 10.6
+394.1 8.6
+395.4 16.2
+397.2 10.5
+398.2 4.9
+399.3 2.7
+401.1 2.0
+402.6 3.4
+404.0 7.8
+409.2 120.3
+410.2 50.9
+411.5 11.5
+417.9 173.3
+419.0 50.0
+419.7 0.8
+426.5 1.6
+471.1 1.8
+486.4 3.4
+487.3 4.5
+497.3 2.2
+503.3 4.1
+517.3 1.2
+528.5 1.1
+538.6 4.5
+542.4 2.2
+547.3 3.2
+561.0 1.5
+568.4 1.8
+575.5 4.6
+591.4 3.0
+594.3 3.0
+600.0 1.5
+601.2 4.5
+607.2 2.4
+614.4 1.3
+617.4 1.2
+618.1 2.0
+619.2 6.8
+635.5 15.1
+636.1 1.5
+640.4 1.7
+664.6 3.9
+670.4 3.2
+672.3 5.6
+681.3 2.2
+688.3 8.3
+689.5 3.7
+691.5 3.0
+698.3 12.5
+705.3 12.8
+706.2 10.6
+707.3 11.1
+714.8 4.1
+715.4 20.7
+716.3 2.0
+717.3 2.2
+724.7 5.6
+831.4 2.7
+832.4 2.9
+S	159	159	745.75
+Z	2	1490.49
+224.9 11.6
+227.2 4.7
+232.3 5.0
+234.1 65.0
+235.2 4.8
+238.1 23.0
+240.4 16.4
+242.3 5.9
+245.2 3.8
+246.3 29.4
+249.1 4.4
+250.3 9.3
+254.0 35.3
+254.8 2.3
+255.8 4.9
+259.1 12.8
+260.3 49.6
+262.0 59.5
+263.2 13.0
+270.2 10.6
+271.3 3.3
+274.1 3.5
+288.1 31.6
+290.1 110.7
+291.1 23.7
+297.3 4.8
+300.2 7.0
+305.2 22.2
+308.1 37.7
+309.5 8.5
+316.1 100.0
+317.3 139.6
+318.3 42.7
+319.2 5.2
+325.3 17.8
+327.0 12.3
+328.3 16.5
+330.0 5.3
+339.4 4.1
+340.2 3.8
+341.3 14.7
+342.5 11.2
+343.3 16.3
+347.6 19.7
+348.3 11.5
+351.4 8.8
+355.3 5.6
+356.5 9.4
+357.4 75.7
+358.3 45.4
+359.2 26.2
+360.1 11.9
+361.2 60.1
+362.4 11.2
+364.1 6.4
+371.3 11.6
+373.2 14.6
+375.2 243.6
+376.1 31.5
+377.4 12.5
+379.1 88.3
+380.1 22.5
+382.2 15.9
+383.4 9.8
+385.3 24.9
+386.3 9.7
+391.4 50.8
+393.4 3.7
+397.3 7.1
+400.2 6.6
+401.3 11.2
+402.3 29.3
+403.3 89.1
+404.2 18.7
+407.1 120.2
+408.1 15.7
+409.3 40.0
+412.4 4.4
+414.5 5.9
+416.3 339.6
+417.4 11.5
+420.2 22.6
+421.3 143.3
+422.4 76.6
+423.3 6.6
+424.2 2.1
+425.1 23.9
+426.4 31.8
+427.8 2.9
+430.6 19.4
+436.2 22.2
+437.6 13.9
+439.2 22.4
+440.4 9.0
+446.7 18.0
+449.0 50.4
+452.3 17.4
+453.6 23.7
+457.0 3.1
+458.4 4.7
+459.3 13.4
+461.5 16.7
+462.3 18.5
+463.7 10.5
+465.3 29.8
+466.3 16.9
+468.6 8.0
+471.2 20.3
+472.5 23.0
+473.3 22.9
+474.5 91.9
+475.3 7.1
+476.1 18.2
+477.2 13.7
+484.3 16.9
+487.3 7.3
+490.9 9.5
+497.1 32.0
+499.8 34.3
+500.5 21.6
+501.4 13.9
+504.3 38.5
+505.5 29.3
+508.3 14.9
+509.3 24.6
+509.9 7.2
+511.2 32.1
+515.1 2.1
+518.1 11.0
+520.6 19.1
+521.4 9.0
+522.6 76.1
+525.3 12.0
+526.3 36.3
+527.3 21.7
+530.3 11.0
+532.1 25.7
+533.4 2.4
+534.5 140.5
+535.3 23.6
+536.3 4.9
+538.1 19.7
+538.8 30.3
+540.8 53.6
+542.5 76.7
+543.6 74.1
+544.3 252.5
+545.4 110.0
+546.6 7.3
+551.1 18.1
+553.0 13.8
+555.3 3.8
+557.0 23.5
+562.3 38.9
+563.0 10.4
+564.1 33.4
+565.4 6.9
+567.1 47.8
+568.2 20.2
+569.4 55.7
+571.5 27.3
+573.2 42.1
+576.9 15.1
+578.1 119.2
+578.9 106.4
+580.2 4.8
+585.0 49.7
+585.9 40.0
+587.2 86.4
+588.5 28.7
+589.4 22.6
+590.7 52.6
+591.6 30.1
+592.3 8.7
+593.4 12.1
+594.4 6.6
+595.5 11.3
+597.7 44.2
+598.6 14.8
+599.4 40.5
+600.3 3.3
+602.3 14.5
+603.3 100.8
+605.7 188.4
+606.6 38.5
+607.5 14.1
+608.4 24.4
+609.5 55.3
+610.4 21.4
+612.0 43.0
+614.9 45.2
+615.8 73.9
+616.8 12.3
+617.6 16.0
+618.2 48.5
+619.3 4.6
+620.3 24.1
+621.7 47.5
+623.0 64.6
+624.3 72.6
+625.4 44.6
+626.3 3.6
+627.5 42.6
+628.6 67.0
+629.4 51.3
+630.1 14.2
+631.9 52.9
+632.8 54.1
+634.2 39.3
+635.5 28.1
+637.3 11.3
+639.0 40.7
+640.2 26.0
+643.4 10.9
+644.3 40.9
+645.5 32.5
+648.6 58.4
+651.5 20.1
+652.5 78.4
+654.3 83.6
+655.1 30.1
+656.9 118.0
+657.7 269.9
+658.5 211.8
+659.8 24.5
+660.6 7.8
+661.7 14.4
+663.3 44.8
+666.1 21.8
+666.8 33.7
+667.6 28.6
+669.3 59.6
+670.0 23.0
+670.8 74.6
+671.4 60.2
+672.7 4.6
+673.8 28.5
+674.6 18.4
+675.6 39.7
+676.5 13.1
+677.2 16.6
+677.9 86.8
+678.9 90.2
+680.2 61.8
+682.6 34.5
+683.4 30.2
+684.2 28.3
+685.1 86.4
+686.3 140.6
+687.3 116.5
+688.5 108.2
+689.3 4.8
+690.5 34.8
+691.3 21.5
+693.0 95.1
+694.1 198.1
+695.6 141.9
+698.6 10.6
+699.6 182.3
+700.7 93.1
+701.6 199.0
+702.6 74.0
+704.4 426.8
+705.0 175.9
+706.0 184.9
+707.6 150.9
+708.9 180.1
+709.9 358.4
+710.7 115.9
+711.9 61.3
+713.2 22.6
+714.2 26.0
+715.6 100.5
+716.4 53.3
+717.2 98.1
+718.9 189.5
+719.9 41.9
+720.6 73.5
+721.9 94.1
+723.7 23.2
+725.6 40.1
+727.2 100.1
+728.2 146.3
+729.0 43.0
+729.7 128.5
+730.9 142.0
+731.7 61.5
+732.5 170.7
+733.1 161.5
+734.6 60.2
+735.6 307.2
+736.5 484.5
+737.4 99.4
+739.3 23.7
+749.3 24.9
+750.5 14.2
+751.8 3.9
+754.2 8.5
+755.3 47.1
+759.1 47.4
+760.0 32.2
+762.6 80.8
+763.3 17.0
+764.6 29.3
+765.7 5.6
+767.7 34.1
+769.3 148.9
+770.5 123.3
+772.1 292.8
+773.2 46.6
+774.6 1.4
+775.7 62.0
+777.0 138.5
+777.7 46.3
+778.3 30.2
+779.4 53.1
+780.5 18.7
+781.4 55.4
+782.5 2.4
+783.1 5.2
+784.3 25.8
+785.8 160.9
+786.6 417.8
+787.6 254.1
+788.5 39.3
+789.9 21.1
+792.8 50.7
+795.2 40.2
+797.5 16.4
+798.4 13.7
+799.5 133.9
+800.6 12.3
+802.3 26.7
+803.4 71.8
+804.3 7.7
+805.4 5.5
+806.7 67.9
+807.8 79.2
+809.3 208.5
+810.0 53.7
+813.1 457.4
+814.0 31.2
+814.7 186.5
+815.6 337.7
+816.7 197.3
+817.6 92.0
+818.6 15.0
+820.3 45.6
+821.6 8.2
+823.9 115.3
+824.5 31.7
+826.4 42.7
+827.5 23.9
+830.0 52.3
+831.2 22.4
+832.4 84.5
+833.5 229.5
+834.6 96.1
+835.5 79.0
+837.0 21.4
+838.4 62.0
+839.5 120.0
+840.6 70.4
+843.3 52.9
+844.5 62.1
+846.6 67.0
+847.4 22.4
+848.3 24.6
+849.6 16.2
+851.1 58.5
+851.9 89.5
+852.8 43.8
+853.5 15.6
+854.5 70.2
+855.4 23.8
+857.0 508.8
+857.7 278.0
+858.8 977.4
+859.9 159.4
+861.3 143.3
+862.1 29.3
+862.7 47.6
+864.0 120.6
+864.9 7.2
+866.1 65.1
+868.5 78.3
+870.5 89.5
+871.5 198.8
+872.8 74.3
+873.6 4.7
+874.7 106.8
+877.0 193.6
+877.8 136.1
+879.4 324.3
+880.2 74.2
+881.3 38.1
+882.0 5.0
+883.5 24.0
+884.6 33.7
+885.6 233.8
+886.4 80.7
+887.4 4.4
+888.6 48.9
+889.9 213.8
+891.1 422.6
+892.0 342.6
+892.9 67.4
+894.0 78.6
+895.2 118.7
+895.9 23.6
+897.6 105.2
+898.7 88.7
+899.8 63.6
+900.4 15.2
+901.8 39.9
+902.7 90.2
+904.6 139.9
+905.6 77.5
+906.7 9.0
+907.3 33.8
+908.2 33.0
+909.6 17.0
+910.3 7.3
+911.5 10.7
+912.2 69.3
+912.9 44.1
+913.7 9.4
+915.3 184.6
+916.1 93.0
+918.5 72.4
+920.6 28.8
+921.9 40.4
+922.7 38.3
+923.8 91.9
+924.9 64.2
+925.9 85.0
+926.9 110.2
+928.5 72.6
+929.5 150.7
+930.9 146.6
+932.7 18.6
+933.5 7.0
+936.7 41.4
+939.1 64.6
+940.1 6.2
+941.7 28.5
+942.5 2.6
+943.7 60.4
+944.5 417.4
+946.1 861.2
+947.2 109.0
+948.5 274.9
+949.5 30.5
+951.0 161.4
+952.5 7.5
+953.8 51.6
+955.4 18.8
+957.9 4.4
+960.0 42.9
+963.3 28.1
+965.4 36.9
+967.9 21.0
+969.9 16.2
+970.5 31.7
+972.0 17.4
+973.8 38.9
+974.6 17.7
+975.4 105.0
+976.9 18.2
+978.4 43.5
+979.8 73.9
+982.7 40.3
+984.1 16.1
+985.3 45.4
+986.5 286.3
+987.4 255.5
+988.6 47.8
+993.3 4.7
+997.0 116.7
+998.1 36.2
+998.8 32.9
+1000.1 79.5
+1000.9 41.9
+1003.2 8.5
+1003.9 16.9
+1005.2 47.7
+1007.7 91.1
+1008.4 96.4
+1009.3 70.6
+1010.1 87.8
+1011.1 14.9
+1012.8 37.0
+1014.6 77.4
+1015.5 20.7
+1016.8 4.2
+1019.8 51.8
+1024.6 16.4
+1027.8 8.1
+1029.6 22.8
+1030.9 58.8
+1036.7 50.6
+1038.1 20.5
+1040.0 15.7
+1041.3 65.3
+1041.9 1.4
+1042.9 32.9
+1043.7 44.9
+1045.1 28.8
+1046.7 62.6
+1047.5 27.6
+1048.6 84.0
+1049.3 34.0
+1050.5 13.8
+1051.6 81.2
+1052.3 32.3
+1053.1 19.7
+1056.4 98.8
+1057.3 26.9
+1058.4 93.8
+1060.2 60.2
+1061.6 17.4
+1062.8 9.0
+1063.5 33.8
+1065.5 12.2
+1067.7 496.3
+1068.6 379.9
+1069.6 207.0
+1071.1 94.9
+1072.6 11.9
+1074.4 147.1
+1075.5 97.4
+1078.0 24.1
+1080.1 26.2
+1081.8 31.1
+1085.6 24.9
+1087.5 6.3
+1090.3 23.0
+1094.7 37.1
+1095.8 32.5
+1096.5 14.0
+1097.8 64.8
+1098.6 53.5
+1100.5 13.8
+1102.8 21.5
+1107.1 2.3
+1108.2 88.2
+1109.1 7.3
+1110.7 11.6
+1113.2 104.7
+1114.0 1.8
+1115.7 289.8
+1116.7 131.9
+1117.9 4.1
+1126.4 4.8
+1127.6 12.7
+1130.8 17.0
+1140.3 21.6
+1142.7 6.0
+1151.6 35.6
+1152.6 16.7
+1154.6 182.6
+1155.6 241.1
+1156.7 70.8
+1157.8 39.1
+1159.7 18.4
+1160.8 29.4
+1163.0 3.0
+1165.2 35.4
+1166.9 11.3
+1169.5 25.3
+1171.0 9.7
+1173.7 308.0
+1174.6 188.7
+1175.7 50.3
+1178.3 6.2
+1181.6 24.3
+1183.0 14.5
+1190.7 14.8
+1191.4 22.8
+1200.0 7.9
+1205.5 58.9
+1211.7 27.7
+1212.7 62.2
+1214.3 13.2
+1221.8 15.5
+1222.7 4.5
+1224.3 16.1
+1225.7 22.2
+1226.8 30.3
+1228.1 46.2
+1228.8 287.3
+1229.7 104.9
+1230.6 424.6
+1231.5 77.3
+1235.7 5.8
+1238.6 24.8
+1242.7 8.2
+1243.9 2.6
+1249.7 9.3
+1252.8 9.7
+1254.0 41.1
+1254.9 54.4
+1257.0 18.1
+1265.2 22.1
+1266.2 46.6
+1273.6 14.2
+1286.3 27.6
+1295.9 23.7
+1311.9 9.5
+1314.1 7.1
+1315.4 31.2
+1318.1 17.3
+1321.6 18.5
+1323.8 37.9
+1324.6 77.6
+1326.2 52.8
+1326.9 11.8
+1327.7 7.9
+1336.6 15.0
+1342.0 10.8
+1342.7 52.0
+1343.6 272.2
+1344.5 130.9
+1345.7 44.6
+1350.9 12.0
+1351.9 22.7
+1352.7 66.0
+1356.6 4.9
+1372.1 3.4
+1373.8 4.2
+1388.3 5.0
+1392.2 20.6
+1411.9 6.2
+1437.9 4.5
+1495.7 11.2
diff --git a/doc/user/example-files/search.target.txt b/doc/user/example-files/search.target.txt
new file mode 100644
index 0000000..b4193e0
--- /dev/null
+++ b/doc/user/example-files/search.target.txt
@@ -0,0 +1,721 @@
+scan	charge	spectrum precursor m/z	spectrum neutral mass	peptide mass	delta_cn	sp score	sp rank	xcorr score	xcorr rank	b/y ions matched	b/y ions total	matches/spectrum	sequence	cleavage type	protein id	flanking aa	unshuffled sequence
+10	2	636.3400	1270.6644	1270.4917	0	56.458275	1	0.843481	1	5	22	6	SGLIVEIQGVQK	trypsin-full-digest	YDR093W	KE	
+10	2	636.3400	1270.6644	1273.4087	0.50464863	49.409576	2	0.41781947	2	4	20	6	TVLDLEVNNTR	trypsin-full-digest	YDR093W	RT	
+10	2	636.3400	1270.6644	1272.5227	0.82345378	22.858458	4	0.1489134	3	4	22	6	MSVEPVVVIDGK	trypsin-full-digest	YIL133C	-G	
+10	2	636.3400	1270.6644	1271.5254	0.99421889	7.6680117	5	0.0048762476	4	2	20	6	KPQVYPALLSR	trypsin-full-digest	YLR371W	KV	
+10	2	636.3400	1270.6644	1270.3618	1.2562495	42.079628	3	-0.21614161	5	4	20	6	TDLPEGEEKPR	trypsin-full-digest	YPL106C	KI	
+11	2	745.2700	1488.5244	1489.7319	0	2799.7004	1	4.9665937	1	21	24	5	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+11	2	745.2700	1488.5244	1486.6195	0.78361297	150.82512	2	1.0747064	2	8	26	5	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+11	2	745.2700	1488.5244	1490.6510	0.92498112	27.513174	5	0.37258846	3	3	24	5	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+11	2	745.2700	1488.5244	1488.7063	0.95597595	86.188286	3	0.21864961	4	5	24	5	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+11	2	745.2700	1488.5244	1485.6539	0.98590338	70.940605	4	0.070012115	5	5	22	5	QEAIYEVYITEK	trypsin-full-digest	YLR371W	RN	
+12	3	472.5600	1414.6565	1411.7252	0	107.23654	1	0.70944363	1	12	44	8	IISYAQGFMLIR	trypsin-full-digest	YHR183W	KE	
+12	3	472.5600	1414.6565	1412.5806	0.29089656	67.485161	3	0.50306892	2	11	44	8	IVNMYGTTETQR	trypsin-full-digest	YBR115C	RA	
+12	3	472.5600	1414.6565	1414.5780	0.30653799	39.472534	6	0.49197221	3	8	40	8	NTLEEYIYTLR	trypsin-full-digest	YPL106C	KG	
+12	3	472.5600	1414.6565	1414.6240	0.33313781	55.1306	4	0.47310114	4	9	44	8	VLEFHPFDPVSK	trypsin-full-digest	YGL008C	KK	
+12	3	472.5600	1414.6565	1413.6769	0.51874274	94.480415	2	0.34142488	5	11	48	8	YGPLLVDIIDPAK	trypsin-full-digest	YKL127W	KA	
+13	1	717.0600	716.0522	717.8204	0	41.040947	2	0.6652953	1	4	10	16	SLEITR	trypsin-full-digest	YLR371W	KD	
+13	1	717.0600	716.0522	716.8506	0.065693147	47.344681	1	0.62158996	2	4	12	16	DVMPAGK	trypsin-full-digest	YBR115C	KG	
+13	1	717.0600	716.0522	715.9341	0.07201229	21.613161	4	0.61738586	3	3	10	16	LLPFVK	trypsin-full-digest	YLR340W	KG	
+13	1	717.0600	716.0522	713.7887	0.64012295	39.931419	3	0.23942451	4	4	12	16	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+13	1	717.0600	716.0522	716.7893	0.67106682	5.8860817	10	0.21883771	5	2	12	16	EAAELGK	trypsin-full-digest	YBR118W	KG	
+14	2	559.1000	1116.1843	1119.1559	0	66.227585	1	0.53043324	1	5	16	11	YHIEEEGSR	trypsin-full-digest	YCR012W	RK	
+14	2	559.1000	1116.1843	1118.2635	0.13069028	23.070383	3	0.46111077	2	4	16	11	FFCALFDAK	trypsin-full-digest	YKL127W	KK	
+14	2	559.1000	1116.1843	1116.1615	0.29996294	12.308622	6	0.37132293	3	3	16	11	YDGAFDCLR	trypsin-full-digest	YBL030C	KK	
+14	2	559.1000	1116.1843	1117.3536	0.48043215	23.054535	4	0.27559605	4	5	18	11	FLDGQIALLK	trypsin-full-digest	YBL076C	KK	
+14	2	559.1000	1116.1843	1116.2769	0.61405927	10.694719	7	0.2047158	5	3	18	11	LVDEVVDSLK	trypsin-full-digest	YMR235C	RF	
+14	3	559.1000	1674.2765	1675.6885	0	63.059669	1	0.767111	1	13	60	5	ATAGDTHLGGEDFDNR	trypsin-full-digest	YLL024C	KL	
+14	3	559.1000	1674.2765	1671.7804	1.2015421	33.726143	2	-0.15460518	2	8	48	5	ITYSSDYFDELYR	trypsin-full-digest	YOR168W	KL	
+14	3	559.1000	1674.2765	1676.9332	1.3099092	29.03307	3	-0.23773479	3	7	56	5	YLTNTGNLLLASQIR	trypsin-full-digest	YBL076C	KH	
+14	3	559.1000	1674.2765	1673.7159	1.5774156	10.770131	5	-0.44294184	4	6	56	5	HEAEWSGLSNDATTR	trypsin-full-digest	YDL223C	RN	
+14	3	559.1000	1674.2765	1673.7625	1.8034767	21.514181	4	-0.61635584	5	7	64	5	TTHPVSHGHSGSSTGPK	trypsin-full-digest	YDL223C	KS	
+15	2	732.1300	1462.2444	1462.7675	0	1342.2397	1	3.8226082	1	19	24	5	NEVSAMPTLLLFK	trypsin-full-digest	YLR043C	KN	
+15	2	732.1300	1462.2444	1460.6036	0.92579734	21.992445	3	0.28364772	2	4	22	5	EEPDLENLLFNK	trypsin-full-digest	YHR183W	RF	
+15	2	732.1300	1462.2444	1463.5709	0.93476593	3.2144897	4	0.24936424	3	2	24	5	TCVVETPTLNSDK	trypsin-full-digest	YBR115C	RS	
+15	2	732.1300	1462.2444	1460.4707	0.94384331	46.283249	2	0.2146651	4	6	24	5	ELGDAYVSSDEEF	trypsin-full-digest	YLR249W	K-	
+15	2	732.1300	1462.2444	1459.6195	0.98524964	2.9621341	5	0.056384861	5	2	26	5	SQVDEIVLVGGSTR	trypsin-full-digest	YLL024C	KI	
+16	1	713.0700	712.0622	713.7887	0	40.185627	2	0.4695082	1	4	12	9	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+16	1	713.0700	712.0622	710.7880	0.34402412	97.301079	1	0.30798605	2	6	12	9	HIDAGAK	trypsin-full-digest	YGR192C	KK	
+16	1	713.0700	712.0622	714.8626	0.65348947	8.9418478	5	0.16268952	3	2	10	9	ALPTWK	trypsin-full-digest	YMR235C	KD	
+16	1	713.0700	712.0622	710.8309	1.0855368	13.639264	3	-0.040160265	4	2	10	9	AFAQFK	trypsin-full-digest	YJR069C	KE	
+16	1	713.0700	712.0622	712.8472	1.3372214	9.0141134	4	-0.15832822	5	2	12	9	TPGGILR	trypsin-full-digest	YER056C-A	KA	
+17	2	495.2500	988.4844	989.0935	0	94.401619	2	0.65849799	1	5	16	3	SLEASVIDR	trypsin-full-digest	YBR115C	KN	
+17	2	495.2500	988.4844	988.1950	0.14087622	47.611462	3	0.56573129	2	4	18	3	TPLPPAPAPK	trypsin-full-digest	YBL030C	KK	
+17	2	495.2500	988.4844	987.0771	0.40132889	150.00021	1	0.39422372	3	6	16	3	YSFLEGGSK	trypsin-full-digest	YGL009C	KL	
+18	3	1032.4000	3094.1765	3095.2366	0	1794.3577	1	4.4612322	1	41	108	2	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+18	3	1032.4000	3094.1765	3095.4709	0.91822755	28.71706	2	0.364806	2	10	112	2	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+19	2	604.2900	1206.5643	1207.4535	0	4.0179791	2	0.085511789	1	2	18	2	DTLKPMAIYR	trypsin-full-digest	YLR371W	RV	
+19	2	604.2900	1206.5643	1204.3109	1.6698694	10.554982	1	-0.057281736	2	3	20	2	VNGDAHVISHR	trypsin-full-digest	YGR157W	RA	
+19	3	604.2900	1809.8464	1808.0363	0	139.71983	1	0.43815228	1	14	68	4	GYLVAMTGDGVNDAPSLK	trypsin-full-digest	YGL008C	RK	
+19	3	604.2900	1809.8464	1810.0775	0.73968351	45.731903	3	0.11405826	2	9	68	4	LQDGVPDSIALLAEAGIK	trypsin-full-digest	YDR093W	RL	
+19	3	604.2900	1809.8464	1810.0824	1.4776366	58.53331	2	-0.20927754	3	8	52	4	LLNFIDELTNWYIR	trypsin-full-digest	YBL076C	KF	
+19	3	604.2900	1809.8464	1812.0063	1.701064	40.476826	4	-0.30717278	4	10	64	4	YTVSFIEGDGIGPEISK	trypsin-full-digest	YOR136W	KS	
+20	2	450.9000	899.7844	902.0154	0	14.423851	3	0.1545447	1	3	16	12	STVVSANPK	trypsin-full-digest	YOR267C	KK	
+20	2	450.9000	899.7844	897.0107	0.43213871	30.959551	2	0.087759949	2	3	12	12	LDDEFMK	trypsin-full-digest	YMR309C	RS	
+20	2	450.9000	899.7844	898.0265	0.48145139	5.8385301	5	0.080138937	3	2	14	12	FFADAVTK	trypsin-full-digest	YHR183W	KA	
+20	2	450.9000	899.7844	896.9524	0.78898019	50.266438	1	0.032611992	4	3	14	12	SSFNDISK	trypsin-full-digest	YMR309C	KL	
+20	2	450.9000	899.7844	902.0586	1.8137401	13.619667	4	-0.12575921	5	3	16	12	QGVTSLGIK	trypsin-full-digest	YML092C	KA	
+21	1	805.0000	803.9922	804.8956	0	124.69447	1	0.80470002	1	5	12	20	ESTIDIK	trypsin-full-digest	YOR267C	KI	
+21	1	805.0000	803.9922	804.8957	0.14753152	83.322594	2	0.68598139	2	4	12	20	ESVTEIK	trypsin-full-digest	YGR157W	KA	
+21	1	805.0000	803.9922	803.8675	0.27760506	22.862658	9	0.58131123	3	3	12	20	ELDTAQK	trypsin-full-digest	YGR192C	KH	
+21	1	805.0000	803.9922	805.9292	0.56622195	59.186016	3	0.34906122	4	5	12	20	FSPSQLK	trypsin-full-digest	YMR073C	KN	
+21	1	805.0000	803.9922	804.8577	0.63594806	38.015034	6	0.2929526	5	3	10	20	EWNQTK	trypsin-full-digest	YDR093W	KF	
+22	1	1489.8500	1488.8422	1489.7319	0	374.82031	1	3.0246928	1	14	24	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+22	1	1489.8500	1488.8422	1486.6195	0.84436226	36.411674	2	0.47075641	2	6	26	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+22	1	1489.8500	1488.8422	1490.6510	1.00218	3.5401781	4	-0.0065939161	3	2	24	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+22	1	1489.8500	1488.8422	1488.7063	1.0877013	4.2567067	3	-0.26526943	4	2	24	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+23	1	805.0000	803.9922	804.8957	0	151.28577	1	0.60042703	1	6	12	20	ESVTEIK	trypsin-full-digest	YGR157W	KA	
+23	1	805.0000	803.9922	803.8675	0.23424846	53.851978	4	0.45977792	2	4	12	20	ELDTAQK	trypsin-full-digest	YGR192C	KH	
+23	1	805.0000	803.9922	804.8956	0.25316995	72.456558	2	0.44841695	3	4	12	20	ESTIDIK	trypsin-full-digest	YOR267C	KI	
+23	1	805.0000	803.9922	804.9012	0.29283255	23.882532	11	0.42460245	4	3	12	20	VAHTSYK	trypsin-full-digest	YML092C	KR	
+23	1	805.0000	803.9922	804.8987	0.47863716	46.161007	5	0.31304035	5	4	12	20	VSTTLER	trypsin-full-digest	YDR093W	RR	
+24	3	830.6200	2488.8364	2490.7063	0	26.858793	1	0.14122425	1	13	84	2	AAGQLDQLVEDYINDELEIVSR	trypsin-full-digest	YBR115C	RI	
+24	3	830.6200	2488.8364	2489.7822	1.78395	18.704006	2	-0.11071275	2	10	84	2	VMPYSTGLTTPLSNFEAQQNYK	trypsin-full-digest	YBL076C	KD	
+25	2	745.5500	1489.0844	1489.7319	0	1807.792	1	4.2164721	1	19	24	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+25	2	745.5500	1489.0844	1486.6195	0.81398946	106.51873	3	0.78430814	2	7	26	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+25	2	745.5500	1489.0844	1488.7063	0.82931358	207.0804	2	0.71969455	3	8	24	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+25	2	745.5500	1489.0844	1490.6510	0.85102826	25.70677	4	0.62813509	4	3	24	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+26	2	692.3800	1382.7444	1382.4467	0	2156.4043	1	3.8436441	1	20	24	5	TASEFDSAIAQDK	trypsin-full-digest	YLR043C	KL	
+26	2	692.3800	1382.7444	1381.6099	0.87371606	76.68457	2	0.48539051	2	5	22	5	LAMFLTDSNTIR	trypsin-full-digest	YDR037W	RE	
+26	2	692.3800	1382.7444	1381.5258	0.90621096	30.044098	3	0.36049169	3	4	22	5	MSESNAHFSFPK	trypsin-full-digest	YBL076C	-E	
+26	2	692.3800	1382.7444	1380.6042	1.055408	21.984407	4	-0.21296872	4	3	22	5	EVVELPLLSPER	trypsin-full-digest	YKL145W	RF	
+26	2	692.3800	1382.7444	1383.6108	1.0793326	2.7308655	5	-0.30492619	5	1	26	5	NVIVSGIVLAADGR	trypsin-full-digest	YBL076C	KK	
+27	2	732.5500	1463.0844	1462.7675	0	1126.2389	1	2.6634736	1	17	24	4	NEVSAMPTLLLFK	trypsin-full-digest	YLR043C	KN	
+27	2	732.5500	1463.0844	1460.6036	0.81959116	66.824799	3	0.48051417	2	6	22	4	EEPDLENLLFNK	trypsin-full-digest	YHR183W	RF	
+27	2	732.5500	1463.0844	1460.4707	0.88409299	92.661507	2	0.30871528	3	7	24	4	ELGDAYVSSDEEF	trypsin-full-digest	YLR249W	K-	
+27	2	732.5500	1463.0844	1463.5709	0.96493638	15.490486	4	0.093391061	4	3	24	4	TCVVETPTLNSDK	trypsin-full-digest	YBR115C	RS	
+28	2	613.2600	1224.5044	1222.3203	0	26.820997	2	0.5495218	1	4	22	5	GGEGEVSVFVSR	trypsin-full-digest	YDR037W	KV	
+28	2	613.2600	1224.5044	1223.4375	0.018783558	28.635321	1	0.53919983	2	4	20	5	LIDFGSAVVFR	trypsin-full-digest	YOR267C	KY	
+28	2	613.2600	1224.5044	1224.3788	0.8169654	6.3640132	5	0.1005815	3	2	18	5	LAFLENQDFK	trypsin-full-digest	YBR115C	RL	
+28	2	613.2600	1224.5044	1227.4233	0.84511566	13.379468	3	0.085112311	4	3	18	5	IEVLEQELVR	trypsin-full-digest	YGR086C	KA	
+28	2	613.2600	1224.5044	1223.2670	0.96065545	8.3532753	4	0.021620696	5	2	18	5	YYGGNEHIDR	trypsin-full-digest	YLR058C	RM	
+29	2	614.2600	1226.5044	1229.3525	0	21.443193	1	0.31570217	1	3	20	3	EILGTDEPTVR	trypsin-full-digest	YKL127W	KT	
+29	2	614.2600	1226.5044	1224.3788	0.23751414	15.323318	2	0.24071844	2	3	18	3	LAFLENQDFK	trypsin-full-digest	YBR115C	RL	
+29	2	614.2600	1226.5044	1227.4233	1.4932648	2.4419763	3	-0.15572478	3	1	18	3	IEVLEQELVR	trypsin-full-digest	YGR086C	KA	
+30	1	715.0700	714.0622	716.7460	0	23.359188	1	0.30748594	1	3	10	12	KPDDDK	trypsin-full-digest	YKL145W	KI	
+30	1	715.0700	714.0622	716.7893	0.64147574	6.6294503	3	0.11024117	2	2	12	12	EAAELGK	trypsin-full-digest	YBR118W	KG	
+30	1	715.0700	714.0622	713.7887	0.78619045	4.9657464	4	0.065743424	3	2	12	12	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+30	1	715.0700	714.0622	716.8852	0.82486218	1.6637436	9	0.05385242	4	1	10	12	ALLICK	trypsin-full-digest	YDR093W	KG	
+30	1	715.0700	714.0622	712.8472	0.84074181	8.0855684	2	0.048969656	5	2	12	12	TPGGILR	trypsin-full-digest	YER056C-A	KA	
+31	3	501.2200	1500.6365	1500.4829	0	75.014168	1	0.738213	1	9	44	3	YLPNGDCECCGR	trypsin-full-digest	YBR115C	RA	
+31	3	501.2200	1500.6365	1497.7600	0.61014986	57.982483	2	0.28779244	2	8	48	3	LHHAFFVGDILTK	trypsin-full-digest	YBR115C	KR	
+31	3	501.2200	1500.6365	1500.7172	0.6992386	25.314043	3	0.22202596	3	5	48	3	AALLNQYFAQAYK	trypsin-full-digest	YGL245W	KG	
+32	3	1032.7900	3095.3467	3095.2366	0	1021.062	1	4.1811695	1	33	108	2	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+32	3	1032.7900	3095.3467	3095.4709	1.08211	25.482035	2	-0.34331581	2	8	112	2	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+33	2	433.7900	865.5644	868.0007	0	24.923223	2	0.27615401	1	3	14	13	EPGVPTIR	trypsin-full-digest	YDR399W	KI	
+33	2	433.7900	865.5644	863.9689	0.25559467	20.780163	4	0.20557052	2	2	12	13	EYQVIGR	trypsin-full-digest	YMR242C	KR	
+33	2	433.7900	865.5644	863.9843	0.3070561	21.143938	3	0.19135924	3	3	14	13	MSSNAQVK	trypsin-full-digest	YBL030C	-T	
+33	2	433.7900	865.5644	864.9566	0.67410392	11.694733	7	0.089997508	4	2	12	13	NIQHPEK	trypsin-full-digest	YDL223C	KN	
+33	2	433.7900	865.5644	868.0435	0.77937192	10.029391	8	0.060927331	5	2	12	13	AYVQFLK	trypsin-full-digest	YKL127W	KE	
+33	3	433.7900	1298.3466	1295.5011	0	142.93625	1	0.74851775	1	11	44	5	TSFFQALGVPTK	trypsin-full-digest	YLR340W	KI	
+33	3	433.7900	1298.3466	1300.4741	1.1231706	11.750471	5	-0.092195369	2	3	40	5	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+33	3	433.7900	1298.3466	1298.5687	1.2744842	56.905846	2	-0.20545629	3	6	40	5	LNNPAIALMWR	trypsin-full-digest	YHR183W	KG	
+33	3	433.7900	1298.3466	1299.4120	1.2848094	14.490228	4	-0.21318488	4	4	36	5	FEELCADLFR	trypsin-full-digest	YLL024C	RS	
+33	3	433.7900	1298.3466	1299.4670	1.4924383	46.446587	3	-0.36859885	5	7	40	5	MPYTLSDAHHK	trypsin-full-digest	YLR058C	-L	
+34	2	750.9200	1499.8243	1500.4829	0	35.232906	1	0.51629972	1	4	22	3	YLPNGDCECCGR	trypsin-full-digest	YBR115C	RA	
+34	2	750.9200	1499.8243	1500.7172	0.51376176	11.712827	3	0.25104466	2	2	24	3	AALLNQYFAQAYK	trypsin-full-digest	YGL245W	KG	
+34	2	750.9200	1499.8243	1497.7600	0.79214215	14.823524	2	0.10731694	3	3	24	3	LHHAFFVGDILTK	trypsin-full-digest	YBR115C	KR	
+35	1	709.0700	708.0622	708.7692	0	14.558948	3	0.26784292	1	2	10	8	DFQTAK	trypsin-full-digest	YMR309C	KD	
+35	1	709.0700	708.0622	709.8869	0.36011532	11.018554	4	0.17138858	2	2	10	8	SIHILK	trypsin-full-digest	YMR242C	RV	
+35	1	709.0700	708.0622	710.8309	0.46457091	52.933228	1	0.14341089	3	3	10	8	AFAQFK	trypsin-full-digest	YJR069C	KE	
+35	1	709.0700	708.0622	710.7880	0.66859102	16.86434	2	0.088765554	4	2	12	8	HIDAGAK	trypsin-full-digest	YGR192C	KK	
+35	1	709.0700	708.0622	707.7845	0.86462736	2.7231455	5	0.036258604	5	1	10	8	FESAVR	trypsin-full-digest	YOR168W	RK	
+36	2	427.3800	852.7444	853.0293	0	107.2902	1	0.787049	1	6	16	13	GPLATPIGK	trypsin-full-digest	YOR136W	KG	
+36	2	427.3800	852.7444	852.0445	0.28271866	70.995552	2	0.56453556	2	5	14	13	HASLILAK	trypsin-full-digest	YMR235C	KA	
+36	2	427.3800	852.7444	852.8194	0.68353808	50.631237	3	0.24907105	3	3	12	13	DSCTENK	trypsin-full-digest	YNL166C	KE	
+36	2	427.3800	852.7444	855.0451	0.69871479	31.401226	4	0.23712622	4	4	14	13	LLGPQLSK	trypsin-full-digest	YGL135W	RA	
+36	2	427.3800	852.7444	852.0011	0.70649135	10.25797	8	0.2310057	5	2	14	13	LPLNPNGK	trypsin-full-digest	YBR115C	KV	
+37	2	652.3400	1302.6644	1301.4161	0	613.67346	1	2.9785695	1	18	22	8	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+37	2	652.3400	1302.6644	1301.4161	0.77743554	51.197414	3	0.66292375	2	6	22	8	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+37	2	652.3400	1302.6644	1303.4968	0.8709349	69.481659	2	0.3844294	3	8	22	8	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+37	2	652.3400	1302.6644	1304.4626	0.90986937	19.165369	5	0.26846039	4	5	22	8	IPGTFEPDTLSK	trypsin-full-digest	YDL223C	KS	
+37	2	652.3400	1302.6644	1300.4741	0.92362046	8.7759972	6	0.22750174	5	3	20	8	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+38	3	1032.3900	3094.1465	3095.2366	0	1161.2994	1	4.266221	1	34	108	2	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+38	3	1032.3900	3094.1465	3095.4709	0.91375649	57.854763	2	0.36793384	2	12	112	2	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+39	2	613.1300	1224.2444	1223.4375	0	19.768681	2	0.47953755	1	3	20	5	LIDFGSAVVFR	trypsin-full-digest	YOR267C	KY	
+39	2	613.1300	1224.2444	1222.3203	0.55245852	38.796162	1	0.21461295	2	5	22	5	GGEGEVSVFVSR	trypsin-full-digest	YDR037W	KV	
+39	2	613.1300	1224.2444	1221.2867	0.68277049	5.8917556	5	0.15212347	3	2	22	5	TTTPAATSEQSK	trypsin-full-digest	YDL223C	KV	
+39	2	613.1300	1224.2444	1223.2670	0.94518626	8.5665131	4	0.026285237	4	2	18	5	YYGGNEHIDR	trypsin-full-digest	YLR058C	RM	
+39	2	613.1300	1224.2444	1224.3788	1.0179251	15.589462	3	-0.0085957637	5	3	18	5	LAFLENQDFK	trypsin-full-digest	YBR115C	RL	
+40	2	636.3700	1270.7244	1270.4917	0	35.940578	2	0.80229896	1	4	22	6	SGLIVEIQGVQK	trypsin-full-digest	YDR093W	KE	
+40	2	636.3700	1270.7244	1273.4087	0.023744045	95.220009	1	0.78324914	2	6	20	6	TVLDLEVNNTR	trypsin-full-digest	YDR093W	RT	
+40	2	636.3700	1270.7244	1272.5227	0.83309722	23.839369	3	0.13390592	3	4	22	6	MSVEPVVVIDGK	trypsin-full-digest	YIL133C	-G	
+40	2	636.3700	1270.7244	1271.5254	0.85973752	0.86187017	6	0.11253244	4	1	20	6	KPQVYPALLSR	trypsin-full-digest	YLR371W	KV	
+40	2	636.3700	1270.7244	1272.3778	1.3148003	14.258236	4	-0.25256389	5	4	22	6	VTAVVESPEGER	trypsin-full-digest	YGL008C	KI	
+41	2	1003.8400	2005.6644	2006.3051	0	419.7645	1	3.8897491	1	16	34	3	SGVGICATCVLRPDLLFK	trypsin-full-digest	YEL027W	KN	
+41	2	1003.8400	2005.6644	2004.0973	0.74423027	39.264839	2	0.99488002	2	5	36	3	EANPSTQVPQSDTFPNGSK	trypsin-full-digest	YMR145C	RR	
+41	2	1003.8400	2005.6644	2005.2764	1.0753206	9.034647	3	-0.29297847	3	4	34	3	IPDIENSVNMVPVDHVAR	trypsin-full-digest	YBR115C	KV	
+42	3	1032.2600	3093.7566	3095.2366	0	1344.3297	1	4.2084866	1	36	108	3	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+42	3	1032.2600	3093.7566	3095.4709	1.0023168	51.772331	2	-0.0097504091	2	11	112	3	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+42	3	1032.2600	3093.7566	3090.7644	1.1557556	13.163209	3	-0.65549535	3	6	112	3	NIVPVIMAGIIAIYGLVVSVLVCYSLGQK	trypsin-full-digest	YEL027W	KQ	
+43	1	713.0700	712.0622	710.7880	0	35.014496	3	0.36360914	1	4	12	9	HIDAGAK	trypsin-full-digest	YGR192C	KK	
+43	1	713.0700	712.0622	714.7765	0.043656271	37.214542	2	0.34773532	2	4	12	9	SGPTPTR	trypsin-full-digest	YDL223C	KS	
+43	1	713.0700	712.0622	713.7887	0.12476196	39.507935	1	0.31824455	3	4	12	9	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+43	1	713.0700	712.0622	710.8309	1.0670638	12.245291	4	-0.024385018	4	2	10	9	AFAQFK	trypsin-full-digest	YJR069C	KE	
+43	1	713.0700	712.0622	714.8626	1.256899	9.9744434	5	-0.093410835	5	2	10	9	ALPTWK	trypsin-full-digest	YMR235C	KD	
+44	2	1002.5200	2003.0244	2000.2000	0	4.9326487	2	0.64485914	1	3	28	4	FESIIHEFDPWFNYR	trypsin-full-digest	YGL022W	KA	
+44	2	1002.5200	2003.0244	2005.2764	0.12105732	35.548817	1	0.56679422	2	6	34	4	IPDIENSVNMVPVDHVAR	trypsin-full-digest	YBR115C	KV	
+44	2	1002.5200	2003.0244	2000.1700	0.99633354	3.1540933	3	0.0023643672	3	2	34	4	ESDTGLAPSHLWDIMGDR	trypsin-full-digest	YKL145W	KQ	
+44	2	1002.5200	2003.0244	2004.0973	1.272543	2.1951361	4	-0.17575185	4	2	36	4	EANPSTQVPQSDTFPNGSK	trypsin-full-digest	YMR145C	RR	
+45	2	419.3200	836.6244	837.9280	0	120.29333	1	0.93879902	1	8	12	10	ETSNFIK	trypsin-full-digest	YBR118W	KK	
+45	2	419.3200	836.6244	839.0054	0.21616718	73.09761	2	0.73586148	2	6	14	10	IAGLNPVR	trypsin-full-digest	YPL106C	RI	
+45	2	419.3200	836.6244	835.9554	0.55938864	40.067127	4	0.41364554	3	5	12	10	FDNLLSK	trypsin-full-digest	YDL198C	R-	
+45	2	419.3200	836.6244	835.0110	0.65359831	45.420536	3	0.32520157	4	4	12	10	EYILGLK	trypsin-full-digest	YDL198C	KD	
+45	2	419.3200	836.6244	835.9554	0.72016436	31.306742	5	0.26270941	5	5	14	10	IGDYAGIK	trypsin-full-digest	YMR303C	KW	
+46	2	613.8100	1225.6044	1224.3788	0	7.4563694	3	0.28366849	1	2	18	4	LAFLENQDFK	trypsin-full-digest	YBR115C	RL	
+46	2	613.8100	1225.6044	1223.4375	0.78064227	9.3816624	2	0.06222488	2	2	20	4	LIDFGSAVVFR	trypsin-full-digest	YOR267C	KY	
+46	2	613.8100	1225.6044	1227.4233	0.89254183	12.353053	1	0.030482505	3	2	18	4	IEVLEQELVR	trypsin-full-digest	YGR086C	KA	
+46	2	613.8100	1225.6044	1223.2670	1.9748561	3.6607263	4	-0.27653596	4	1	18	4	YYGGNEHIDR	trypsin-full-digest	YLR058C	RM	
+47	2	731.7700	1461.5244	1462.7675	0	977.83374	1	2.9550073	1	16	24	5	NEVSAMPTLLLFK	trypsin-full-digest	YLR043C	KN	
+47	2	731.7700	1461.5244	1460.6036	0.76668084	39.054245	4	0.68945986	2	5	22	5	EEPDLENLLFNK	trypsin-full-digest	YHR183W	RF	
+47	2	731.7700	1461.5244	1459.6195	0.77189511	53.278816	3	0.67405158	3	6	26	5	SQVDEIVLVGGSTR	trypsin-full-digest	YLL024C	KI	
+47	2	731.7700	1461.5244	1460.4707	0.88700467	20.282669	5	0.333902	4	3	24	5	ELGDAYVSSDEEF	trypsin-full-digest	YLR249W	K-	
+47	2	731.7700	1461.5244	1463.5709	0.93729258	89.043457	2	0.18530098	5	7	24	5	TCVVETPTLNSDK	trypsin-full-digest	YBR115C	RS	
+48	2	692.1400	1382.2644	1382.4467	0	1650.222	1	3.2511344	1	19	24	7	TASEFDSAIAQDK	trypsin-full-digest	YLR043C	KL	
+48	2	692.1400	1382.2644	1379.3623	0.91646332	111.14242	2	0.27158907	2	7	24	7	FDDGAGGDNEVQR	trypsin-full-digest	YKL145W	RT	
+48	2	692.1400	1382.2644	1381.6099	0.94984984	56.814457	3	0.16304493	3	5	22	7	LAMFLTDSNTIR	trypsin-full-digest	YDR037W	RE	
+48	2	692.1400	1382.2644	1381.5258	1.0133696	15.170854	4	-0.043466073	4	3	22	7	MSESNAHFSFPK	trypsin-full-digest	YBL076C	-E	
+48	2	692.1400	1382.2644	1379.5791	1.0143504	13.739942	5	-0.046654966	5	3	24	7	LIVTAHSSSHSIK	trypsin-full-digest	YLR371W	RY	
+49	2	652.2200	1302.4243	1301.4161	0	1331.3566	1	2.9836347	1	19	22	9	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+49	2	652.2200	1302.4243	1301.4161	0.47995821	476.32742	2	1.5516148	2	13	22	9	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+49	2	652.2200	1302.4243	1300.4741	0.68522078	147.28616	3	0.93918622	3	8	20	9	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+49	2	652.2200	1302.4243	1303.4968	0.76649767	98.610008	4	0.69668561	4	7	22	9	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+49	2	652.2200	1302.4243	1304.4626	0.83955383	96.138992	5	0.47871277	5	7	22	9	IPGTFEPDTLSK	trypsin-full-digest	YDL223C	KS	
+50	2	651.2900	1300.5643	1301.4161	0	1851.6044	1	4.5879292	1	20	22	10	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+50	2	651.2900	1300.5643	1301.4161	0.68850791	133.35484	2	1.4291036	2	8	22	10	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+50	2	651.2900	1300.5643	1303.4968	0.83599889	122.15955	3	0.75242537	3	7	22	10	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+50	2	651.2900	1300.5643	1298.5687	0.91140366	20.537592	6	0.40647364	4	3	20	10	LNNPAIALMWR	trypsin-full-digest	YHR183W	KG	
+50	2	651.2900	1300.5643	1300.4741	0.93134964	60.500343	4	0.31496304	5	5	20	10	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+51	2	498.7000	995.3844	996.0446	0	619.99927	1	2.5252917	1	13	18	14	NGFQTGSASK	trypsin-full-digest	YLR185W	KA	
+51	2	498.7000	995.3844	993.0570	0.73925728	16.682711	7	0.65845144	2	3	14	14	GEINCCLK	trypsin-full-digest	YOR267C	RQ	
+51	2	498.7000	995.3844	998.1502	0.76451415	156.03938	2	0.59467053	3	8	20	14	IAAVGAANGVR	trypsin-full-digest	YKL127W	KK	
+51	2	498.7000	995.3844	998.1038	0.81507969	33.531857	5	0.46697778	4	4	16	14	SSIQLGEHK	trypsin-full-digest	YLR371W	KK	
+51	2	498.7000	995.3844	993.2323	0.85587269	60.745483	3	0.36396354	5	5	14	14	VSILMFQR	trypsin-full-digest	YPL266W	RE	
+52	2	501.1300	1000.2444	999.1753	0	142.79124	1	1.1606123	1	8	16	10	EALGELVIR	trypsin-full-digest	YPL215W	KA	
+52	2	501.1300	1000.2444	998.1502	0.34597751	99.963516	2	0.75906658	2	7	20	10	IAAVGAANGVR	trypsin-full-digest	YKL127W	KK	
+52	2	501.1300	1000.2444	1003.0769	0.72584987	20.871323	6	0.31818202	3	3	16	10	NLDGETNLK	trypsin-full-digest	YDR093W	KV	
+52	2	501.1300	1000.2444	1003.1383	0.7358076	44.979645	4	0.30662498	4	5	18	10	AVNTGMEPGK	trypsin-full-digest	YLR340W	RT	
+52	2	501.1300	1000.2444	1000.1217	0.74814993	32.278728	5	0.29230028	5	4	12	10	EAYYWLR	trypsin-full-digest	YGL022W	RM	
+52	3	501.1300	1500.3666	1500.7172	0	43.558441	1	0.55699539	1	8	48	3	AALLNQYFAQAYK	trypsin-full-digest	YGL245W	KG	
+52	3	501.1300	1500.3666	1500.4829	1.2666898	20.81834	2	-0.14854498	2	6	44	3	YLPNGDCECCGR	trypsin-full-digest	YBR115C	RA	
+52	3	501.1300	1500.3666	1497.7600	2.3426661	5.7192822	3	-0.74785888	3	3	48	3	LHHAFFVGDILTK	trypsin-full-digest	YBR115C	KR	
+53	2	745.7500	1489.4844	1489.7319	0	2781.0261	1	5.3343987	1	21	24	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+53	2	745.7500	1489.4844	1486.6195	0.76325125	235.51993	2	1.2629123	2	10	26	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+53	2	745.7500	1489.4844	1490.6510	0.9047128	25.391062	4	0.50830007	3	3	24	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+53	2	745.7500	1489.4844	1488.7063	0.95565957	74.514969	3	0.23652941	4	5	24	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+54	3	410.2000	1227.5765	1227.4233	0	56.159355	1	0.036128547	1	6	36	2	IEVLEQELVR	trypsin-full-digest	YGR086C	KA	
+54	3	410.2000	1227.5765	1229.3525	5.2370372	44.455582	2	-0.153078	2	7	40	2	EILGTDEPTVR	trypsin-full-digest	YKL127W	KT	
+55	2	475.8100	949.6044	949.0466	0	26.808455	2	0.71967018	1	4	14	9	MSQQDNVK	trypsin-full-digest	YDR037W	-A	
+55	2	475.8100	949.6044	950.1027	0.18550882	35.054756	1	0.58616501	2	5	14	9	SFLESVIR	trypsin-full-digest	YBR009C	KD	
+55	2	475.8100	949.6044	950.0160	0.27314121	11.84093	6	0.52309859	3	3	14	9	QTNPESFK	trypsin-full-digest	YDL198C	RG	
+55	2	475.8100	949.6044	951.0929	0.44186732	13.180162	5	0.40167144	4	3	14	9	EHAPWALK	trypsin-full-digest	YGL009C	RD	
+55	2	475.8100	949.6044	949.1149	0.47345805	13.361526	4	0.37893653	5	3	14	9	IFENVSIK	trypsin-full-digest	YDR205W	KA	
+56	2	902.9600	1803.9044	1801.9713	0	271.61176	1	1.4312	1	12	32	2	AEAESLVAEAQLSNITR	trypsin-full-digest	YGR086C	RS	
+56	2	902.9600	1803.9044	1805.0215	0.91516519	30.447412	2	0.12141556	2	5	32	2	LSAIESLAGVEILCSDK	trypsin-full-digest	YGL008C	KT	
+57	2	564.6800	1127.3444	1126.2928	0	1.6282531	8	0.38786855	1	1	18	9	GDVVMIYSSR	trypsin-full-digest	YBR115C	RG	
+57	2	564.6800	1127.3444	1129.2966	0.69543523	16.327734	3	0.1181311	2	4	18	9	NVVAVEMDPR	trypsin-full-digest	YPL266W	KM	
+57	2	564.6800	1127.3444	1126.2004	0.80020344	2.7844698	7	0.077494793	3	1	18	9	CTINGVSYGR	trypsin-full-digest	YDR093W	KA	
+57	2	564.6800	1127.3444	1125.2004	0.85385883	19.824213	2	0.056683555	4	3	20	9	YESATASALVN	trypsin-full-digest	YDR064W	K-	
+57	2	564.6800	1127.3444	1126.2340	0.9029569	32.730118	1	0.037639961	5	3	16	9	DEGLFNLYR	trypsin-full-digest	YDL198C	RG	
+58	2	565.6500	1129.2844	1130.2659	0	10.387362	3	0.17425571	1	2	18	6	NSPWVVDSVK	trypsin-full-digest	YOR168W	KN	
+58	2	565.6500	1129.2844	1129.2966	0.032992441	7.5589361	6	0.16850659	2	2	18	6	NVVAVEMDPR	trypsin-full-digest	YPL266W	KM	
+58	2	565.6500	1129.2844	1131.1674	0.27751508	33.858917	1	0.12589712	3	4	20	6	IDQASGAAQDR	trypsin-full-digest	YLR371W	RH	
+58	2	565.6500	1129.2844	1126.2928	1.4995954	21.486506	2	-0.087057345	4	3	18	6	GDVVMIYSSR	trypsin-full-digest	YBR115C	RG	
+58	2	565.6500	1129.2844	1129.3646	2.1613607	8.9149437	5	-0.20237374	5	2	18	6	GITIDIALWK	trypsin-full-digest	YBR118W	RF	
+59	2	474.3000	946.5844	945.0836	0	163.22826	1	0.79811859	1	6	14	7	LQTIIDSR	trypsin-full-digest	YMR309C	RG	
+59	2	474.3000	946.5844	946.0281	0.48343256	26.635284	6	0.41228208	2	4	16	7	LSVATADNR	trypsin-full-digest	YLR249W	KH	
+59	2	474.3000	946.5844	949.0466	0.51973206	79.889168	3	0.38331077	3	6	14	7	MSQQDNVK	trypsin-full-digest	YDR037W	-A	
+59	2	474.3000	946.5844	949.1149	0.74977499	81.326645	2	0.19970922	4	4	14	7	IFENVSIK	trypsin-full-digest	YDR205W	KA	
+59	2	474.3000	946.5844	945.0836	0.7771157	41.841644	4	0.1778881	5	5	20	7	LLGSGAGGSVK	trypsin-full-digest	YOR267C	KV	
+59	3	474.3000	1419.8765	1417.4955	0	122.20961	1	0.76713252	1	13	56	7	ADTGIAVEGATDAAR	trypsin-full-digest	YGL008C	KS	
+59	3	474.3000	1419.8765	1419.5200	0.60215867	52.378551	3	0.30519703	2	9	44	7	GEDELWCVINGK	trypsin-full-digest	YMR073C	KV	
+59	3	474.3000	1419.8765	1420.7550	0.64994532	79.130165	2	0.26853833	3	9	48	7	GVDLMVCVMGVLK	trypsin-full-digest	YBR115C	RA	
+59	3	474.3000	1419.8765	1420.5975	0.78942293	27.125801	5	0.16154051	4	7	44	7	LLARPGDSLYCR	trypsin-full-digest	YPL266W	RL	
+59	3	474.3000	1419.8765	1422.5168	0.95424658	50.471569	4	0.035098951	5	7	44	7	NFHNAIDEFSTK	trypsin-full-digest	YDR093W	KE	
+60	1	713.3600	712.3522	710.7880	0	24.40822	1	0.43409193	1	4	12	9	HIDAGAK	trypsin-full-digest	YGR192C	KK	
+60	1	713.3600	712.3522	713.7887	0.54279155	22.626112	3	0.1984705	2	3	12	9	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+60	1	713.3600	712.3522	713.7881	0.66906232	1.9599029	6	0.14365739	3	1	12	9	TLYGFGG	trypsin-full-digest	YBR009C	R-	
+60	1	713.3600	712.3522	714.8626	0.7312721	13.145251	4	0.1166526	4	2	10	9	ALPTWK	trypsin-full-digest	YMR235C	KD	
+60	1	713.3600	712.3522	714.7765	1.0561372	24.213102	2	-0.024368707	5	4	12	9	SGPTPTR	trypsin-full-digest	YDL223C	KS	
+61	2	1004.4300	2006.8444	2006.3051	0	871.86584	1	3.8326077	1	18	34	4	SGVGICATCVLRPDLLFK	trypsin-full-digest	YEL027W	KN	
+61	2	1004.4300	2006.8444	2004.0973	0.74373084	43.846146	3	0.98217922	2	5	36	4	EANPSTQVPQSDTFPNGSK	trypsin-full-digest	YMR145C	RR	
+61	2	1004.4300	2006.8444	2009.1975	1.0181385	50.501587	2	-0.069518089	3	6	38	4	YDSPVSSPITSASELGSIAK	trypsin-full-digest	YNL166C	KL	
+61	2	1004.4300	2006.8444	2005.2764	1.057922	4.156528	4	-0.22199231	4	2	34	4	IPDIENSVNMVPVDHVAR	trypsin-full-digest	YBR115C	KV	
+62	2	745.8600	1489.7043	1489.7319	0	2761.3391	1	5.301578	1	21	24	3	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+62	2	745.8600	1489.7043	1490.6510	0.86824602	44.483547	3	0.69850397	2	4	24	3	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+62	2	745.8600	1489.7043	1488.7063	0.96409976	82.697823	2	0.19032791	3	5	24	3	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+63	2	444.4100	886.8044	886.9603	0	26.139324	4	0.71276307	1	3	14	8	DLDRPGSK	trypsin-full-digest	YOR063W	RF	
+63	2	444.4100	886.8044	886.9292	0.39397162	26.822899	3	0.43195465	2	3	12	8	SHTLCNR	trypsin-full-digest	YLR185W	KC	
+63	2	444.4100	886.8044	887.0439	0.68880337	42.980015	1	0.22180946	3	3	14	8	ELQSLLGK	trypsin-full-digest	YCR012W	KD	
+63	2	444.4100	886.8044	886.0563	0.75538975	41.696362	2	0.17434917	4	4	14	8	ALLDEVVK	trypsin-full-digest	YCR012W	KS	
+63	2	444.4100	886.8044	887.0092	0.8485781	12.152888	5	0.10792796	5	2	12	8	RPTNPFR	trypsin-full-digest	YNL166C	RV	
+64	2	676.1000	1350.1843	1348.5188	0	29.814545	1	0.20261776	1	4	22	2	LVETLPSSYPSR	trypsin-full-digest	YBR115C	KE	
+64	2	676.1000	1350.1843	1351.3583	2.6623373	0	2	-0.33681905	2	0	20	2	DETCESNPFPR	trypsin-full-digest	YLR298C	RL	
+64	3	676.1000	2025.2765	2027.1876	0	24.818066	1	0.08459115	1	7	80	1	NVIAETGAGQHGVATATACAK	trypsin-full-digest	YGL026C	KF	
+65	2	452.8500	903.6844	904.0949	0	97.185295	4	0.74056631	1	5	14	20	HAFMGTLK	trypsin-full-digest	YOR063W	KK	
+65	2	452.8500	903.6844	904.9293	0.022225995	153.16431	1	0.72410649	2	7	14	20	EQPESTSK	trypsin-full-digest	YDL223C	KN	
+65	2	452.8500	903.6844	904.8859	0.29299486	40.426414	9	0.52358419	3	4	14	20	ESTPDNDK	trypsin-full-digest	YOR267C	KE	
+65	2	452.8500	903.6844	903.0921	0.32120171	101.14278	3	0.50269514	4	6	14	20	NLALLFGR	trypsin-full-digest	YLR371W	RS	
+65	2	452.8500	903.6844	905.1050	0.45861647	20.786068	15	0.4009304	5	3	16	20	IALIAGYGK	trypsin-full-digest	YGR086C	KA	
+66	2	427.3800	852.7444	853.0293	0	86.936096	2	0.80033225	1	5	16	13	GPLATPIGK	trypsin-full-digest	YOR136W	KG	
+66	2	427.3800	852.7444	855.0049	0.097246684	152.10268	1	0.72250259	2	7	16	13	SALVPGGVR	trypsin-full-digest	YLR058C	KI	
+66	2	427.3800	852.7444	851.9758	0.47781974	63.129513	3	0.4179177	3	5	14	13	SSMGPAFR	trypsin-full-digest	YGL135W	KL	
+66	2	427.3800	852.7444	852.8194	0.61674178	31.039164	4	0.30673394	4	3	12	13	DSCTENK	trypsin-full-digest	YNL166C	KE	
+66	2	427.3800	852.7444	852.0011	0.80157036	15.659703	9	0.15880965	5	3	14	13	LPLNPNGK	trypsin-full-digest	YBR115C	KV	
+67	2	692.1500	1382.2844	1382.4467	0	1821.1417	1	4.1942277	1	19	24	7	TASEFDSAIAQDK	trypsin-full-digest	YLR043C	KL	
+67	2	692.1500	1382.2844	1381.5258	0.82534504	46.728306	3	0.73254275	2	5	22	7	MSESNAHFSFPK	trypsin-full-digest	YBL076C	-E	
+67	2	692.1500	1382.2844	1381.6099	0.88650858	119.8332	2	0.47600889	3	6	22	7	LAMFLTDSNTIR	trypsin-full-digest	YDR037W	RE	
+67	2	692.1500	1382.2844	1379.5791	0.92010963	43.565853	4	0.33507845	4	5	24	7	LIVTAHSSSHSIK	trypsin-full-digest	YLR371W	RY	
+67	2	692.1500	1382.2844	1379.3623	0.940844	29.001404	5	0.24811386	5	4	24	7	FDDGAGGDNEVQR	trypsin-full-digest	YKL145W	RT	
+68	2	468.8000	935.5844	935.0446	0	49.533195	4	0.74895662	1	6	14	11	LNLEGDFK	trypsin-full-digest	YGL245W	KK	
+68	2	468.8000	935.5844	933.9707	0.16079384	12.465908	7	0.62852901	2	4	16	11	NTISEAGDK	trypsin-full-digest	YLL024C	KL	
+68	2	468.8000	935.5844	935.1315	0.23179226	71.465187	2	0.57535428	3	5	16	11	VLPGPEVPK	trypsin-full-digest	YHR183W	KD	
+68	2	468.8000	935.5844	935.8565	0.28700686	98.048073	1	0.53400093	4	6	14	11	EDDSNNDK	trypsin-full-digest	YOR267C	KE	
+68	2	468.8000	935.5844	937.0202	0.62856978	36.394066	6	0.27818513	5	4	16	11	SDGVAGLYR	trypsin-full-digest	YBL030C	KG	
+68	3	468.8000	1403.3765	1404.5829	0	40.724213	2	0.37462369	1	9	44	6	TTLHYALSELEK	trypsin-full-digest	YDR399W	RD	
+68	3	468.8000	1403.3765	1404.4968	0.58936948	13.110674	6	0.15383191	2	7	56	6	VASANATAAESDVAK	trypsin-full-digest	YIL133C	KQ	
+68	3	468.8000	1403.3765	1405.7032	0.81445163	74.083321	1	0.069510803	3	11	48	6	GFLPSVVGIVVYR	trypsin-full-digest	YBL030C	RG	
+68	3	468.8000	1403.3765	1402.6282	1.1776992	21.763506	3	-0.066570319	4	8	44	6	MTSGYYLGELLR	trypsin-full-digest	YFR053C	KL	
+68	3	468.8000	1403.3765	1405.4899	1.3059314	15.813335	4	-0.11460918	5	6	44	6	STSTVNLNNHYR	trypsin-full-digest	YOR267C	KA	
+69	2	652.4800	1302.9443	1301.4161	0	866.42224	1	3.2185082	1	16	22	8	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+69	2	652.4800	1302.9443	1301.4161	0.61322856	165.8327	2	1.2448272	2	8	22	8	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+69	2	652.4800	1302.9443	1303.4968	0.75579822	75.887726	4	0.7859655	3	6	22	8	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+69	2	652.4800	1302.9443	1300.4741	0.77344012	113.19061	3	0.72918487	4	7	20	8	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+69	2	652.4800	1302.9443	1304.4626	0.87005603	46.928429	5	0.4182258	5	5	22	8	IPGTFEPDTLSK	trypsin-full-digest	YDL223C	KS	
+70	2	691.9500	1381.8844	1382.4467	0	1932.3346	1	3.9032106	1	19	24	7	TASEFDSAIAQDK	trypsin-full-digest	YLR043C	KL	
+70	2	691.9500	1381.8844	1381.5258	0.84123105	49.488419	4	0.61970872	2	5	22	7	MSESNAHFSFPK	trypsin-full-digest	YBL076C	-E	
+70	2	691.9500	1381.8844	1379.3623	0.87033457	72.380486	3	0.5061115	3	6	24	7	FDDGAGGDNEVQR	trypsin-full-digest	YKL145W	RT	
+70	2	691.9500	1381.8844	1381.6099	0.89363277	82.036919	2	0.41517377	4	5	22	7	LAMFLTDSNTIR	trypsin-full-digest	YDR037W	RE	
+70	2	691.9500	1381.8844	1380.6042	0.98013854	8.8494978	6	0.077523351	5	2	22	7	EVVELPLLSPER	trypsin-full-digest	YKL145W	RF	
+71	2	488.7600	975.5044	974.1251	0	51.582912	1	0.57350701	1	5	16	10	STSANILLR	trypsin-full-digest	YDR205W	KL	
+71	2	488.7600	975.5044	974.0044	0.23152198	34.17643	2	0.44072753	2	4	14	10	DQPGLCER	trypsin-full-digest	YDR037W	RF	
+71	2	488.7600	975.5044	974.0121	0.52275521	6.3304238	6	0.27370325	3	2	12	10	HHHNHHR	trypsin-full-digest	YDL223C	KH	
+71	2	488.7600	975.5044	978.1595	0.53639543	6.1636882	7	0.26588047	4	2	16	10	HTAIVNPVK	trypsin-full-digest	YGL245W	RI	
+71	2	488.7600	975.5044	975.0636	0.64310586	7.7996826	5	0.20468129	5	2	16	10	DISTPDLSK	trypsin-full-digest	YDR093W	KV	
+72	2	651.6300	1301.2444	1301.4161	0	1339.0245	1	3.3731258	1	18	22	10	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+72	2	651.6300	1301.2444	1301.4161	0.61750263	258.82028	2	1.2902117	2	9	22	10	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+72	2	651.6300	1301.2444	1303.4968	0.82103974	53.011913	3	0.60365552	3	5	22	10	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+72	2	651.6300	1301.2444	1298.5687	0.86949509	32.90501	4	0.44020939	4	4	20	10	LNNPAIALMWR	trypsin-full-digest	YHR183W	KG	
+72	2	651.6300	1301.2444	1300.4741	0.89867258	29.368866	6	0.3417902	5	3	20	10	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+73	2	452.8500	903.6844	902.0586	0	56.347805	2	1.0837035	1	6	16	20	QGVTSLGIK	trypsin-full-digest	YML092C	KA	
+73	2	452.8500	903.6844	906.0465	0.21322978	68.521774	1	0.85262567	2	5	14	20	FDIGDLVK	trypsin-full-digest	YLR298C	RA	
+73	2	452.8500	903.6844	904.0338	0.41111323	23.418583	9	0.63817865	3	3	14	20	VSHTVSFK	trypsin-full-digest	YOR168W	KS	
+73	2	452.8500	903.6844	902.0587	0.5519315	24.958044	8	0.48557344	4	4	16	20	VIAVTNGTK	trypsin-full-digest	YGL026C	KT	
+73	2	452.8500	903.6844	904.8859	0.60063833	11.533216	15	0.43278965	5	3	14	20	ESTPDNDK	trypsin-full-digest	YOR267C	KE	
+73	3	452.8500	1355.5265	1354.3092	0	97.742645	1	0.66088116	1	10	48	7	GDDEANGATSFDR	trypsin-full-digest	YOR063W	KT	
+73	3	452.8500	1355.5265	1355.5164	0.41827905	96.809456	2	0.38444841	2	10	44	7	YQVTVIDAPGHR	trypsin-full-digest	YBR118W	KD	
+73	3	452.8500	1355.5265	1355.6616	0.59096551	21.397329	7	0.27032319	3	5	44	7	GMLNVQLLVVNR	trypsin-full-digest	YBR115C	KN	
+73	3	452.8500	1355.5265	1357.6157	0.76384509	52.985188	3	0.15607032	4	9	48	7	APIVAYAELIAAR	trypsin-full-digest	YGL245W	KI	
+73	3	452.8500	1355.5265	1354.4875	0.84334892	43.882256	4	0.10352775	5	7	40	7	GEYHFFQGITR	trypsin-full-digest	YJR069C	RG	
+74	2	427.3800	852.7444	853.0293	0	46.593933	3	0.44586661	1	4	16	13	GPLATPIGK	trypsin-full-digest	YOR136W	KG	
+74	2	427.3800	852.7444	854.0171	0.19086304	46.874577	2	0.36076716	2	4	14	13	THILSGVK	trypsin-full-digest	YDR093W	RN	
+74	2	427.3800	852.7444	849.9823	0.44673637	43.607098	5	0.24668178	3	4	12	13	IADQYLK	trypsin-full-digest	YPL215W	RD	
+74	2	427.3800	852.7444	852.0445	0.4754456	8.7929144	11	0.23388129	4	2	14	13	HASLILAK	trypsin-full-digest	YMR235C	KA	
+74	2	427.3800	852.7444	852.8194	0.49826011	39.332458	6	0.22370906	5	3	12	13	DSCTENK	trypsin-full-digest	YNL166C	KE	
+75	2	877.2700	1752.5244	1752.8573	0	1072.6307	1	3.9823563	1	16	26	4	LVSWYDNEYGYSTR	trypsin-full-digest	YGR192C	KV	
+75	2	877.2700	1752.5244	1753.9385	1.020926	7.8260818	2	-0.083334833	2	3	30	4	ACIIFFDEIDAVGGAR	trypsin-full-digest	YKL145W	KF	
+75	2	877.2700	1752.5244	1750.8798	1.100632	4.3475466	3	-0.4007521	3	2	30	4	AEETIAWLDSNTTATK	trypsin-full-digest	YLL024C	KE	
+75	2	877.2700	1752.5244	1754.9578	1.1276983	0	4	-0.50854033	4	0	34	4	ISHVSTGGGASLELLEGK	trypsin-full-digest	YCR012W	KE	
+76	2	731.8100	1461.6044	1462.7675	0	1339.4905	1	3.6146004	1	19	24	5	NEVSAMPTLLLFK	trypsin-full-digest	YLR043C	KN	
+76	2	731.8100	1461.6044	1463.5709	0.89022428	15.232876	4	0.3967953	2	4	24	5	TCVVETPTLNSDK	trypsin-full-digest	YBR115C	RS	
+76	2	731.8100	1461.6044	1460.6036	0.90547442	10.096539	5	0.34167209	3	3	22	5	EEPDLENLLFNK	trypsin-full-digest	YHR183W	RF	
+76	2	731.8100	1461.6044	1460.4707	0.94390142	21.407425	2	0.2027739	4	4	24	5	ELGDAYVSSDEEF	trypsin-full-digest	YLR249W	K-	
+76	2	731.8100	1461.6044	1459.6195	0.97492385	21.211966	3	0.090640165	5	5	26	5	SQVDEIVLVGGSTR	trypsin-full-digest	YLL024C	KI	
+77	2	745.4300	1488.8444	1489.7319	0	2646.4438	1	4.6354041	1	21	24	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+77	2	745.4300	1488.8444	1486.6195	0.80580199	209.53319	2	0.9001863	2	9	26	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+77	2	745.4300	1488.8444	1490.6510	0.8935802	27.22241	4	0.49329877	3	3	24	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+77	2	745.4300	1488.8444	1488.7063	0.9329536	57.869457	3	0.31078729	4	4	24	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+78	2	452.2200	902.4244	902.0586	0	102.61301	1	0.80108744	1	7	16	19	QGVTSLGIK	trypsin-full-digest	YML092C	KA	
+78	2	452.2200	902.4244	904.9293	0.10703871	74.167198	2	0.71534008	2	5	14	19	EQPESTSK	trypsin-full-digest	YDL223C	KN	
+78	2	452.2200	902.4244	903.0513	0.43047881	35.246094	5	0.45623627	3	4	12	19	QFWLGPR	trypsin-full-digest	YBR115C	RD	
+78	2	452.2200	902.4244	903.9957	0.504062	42.685417	4	0.39728969	4	4	14	19	GWGWTAAR	trypsin-full-digest	YDL198C	RN	
+78	2	452.2200	902.4244	901.9256	0.5203054	7.4105458	15	0.38427731	5	2	14	19	APLEDDDK	trypsin-full-digest	YKL145W	KK	
+78	3	452.2200	1353.6365	1354.4875	0	109.16689	2	0.85549891	1	10	40	7	GEYHFFQGITR	trypsin-full-digest	YJR069C	RG	
+78	3	452.2200	1353.6365	1355.6616	0.046028499	77.322945	4	0.81612158	2	9	44	7	GMLNVQLLVVNR	trypsin-full-digest	YBR115C	KN	
+78	3	452.2200	1353.6365	1354.3092	0.4786047	101.63564	3	0.44605312	3	10	48	7	GDDEANGATSFDR	trypsin-full-digest	YOR063W	KT	
+78	3	452.2200	1353.6365	1355.5164	0.55555004	147.19391	1	0.38022646	4	11	44	7	YQVTVIDAPGHR	trypsin-full-digest	YBR118W	KD	
+78	3	452.2200	1353.6365	1355.4419	0.86263269	69.608704	5	0.11751757	5	8	48	7	FDSGTSGSQNMPK	trypsin-full-digest	YDL223C	KA	
+79	2	559.1000	1116.1843	1119.1559	0	22.954494	2	0.23699306	1	3	16	11	YHIEEEGSR	trypsin-full-digest	YCR012W	RK	
+79	2	559.1000	1116.1843	1118.3104	0.074480131	12.163911	5	0.21934178	2	3	16	11	INMIEELEK	trypsin-full-digest	YDR037W	RV	
+79	2	559.1000	1116.1843	1113.3398	0.39199558	8.6371117	6	0.14409283	3	3	18	11	AIMVNFGYAK	trypsin-full-digest	YOR168W	KY	
+79	2	559.1000	1116.1843	1113.1975	0.57595927	14.989534	4	0.10049471	4	4	16	11	DYFGAHTFR	trypsin-full-digest	YHR183W	RV	
+79	2	559.1000	1116.1843	1117.3536	0.65604508	35.847515	1	0.081514932	5	6	18	11	FLDGQIALLK	trypsin-full-digest	YBL076C	KK	
+80	2	509.2700	1016.5244	1017.1068	0	150.40614	1	0.90325707	1	6	16	9	ITSGQELNR	trypsin-full-digest	YDL198C	KV	
+80	2	509.2700	1016.5244	1017.1035	0.1405158	98.749428	2	0.77633518	2	5	16	9	VSSAEYYAK	trypsin-full-digest	YIL133C	KK	
+80	2	509.2700	1016.5244	1015.1717	0.84938502	54.884029	3	0.13604406	3	4	16	9	LDAELVLDK	trypsin-full-digest	YNL166C	KF	
+80	2	509.2700	1016.5244	1017.2080	0.85867649	17.96553	6	0.12765144	4	2	16	9	MTAFYSGIK	trypsin-full-digest	YMR309C	RV	
+80	2	509.2700	1016.5244	1018.0887	1.0889183	2.9468262	8	-0.080316156	5	1	14	9	LEEIETER	trypsin-full-digest	YMR235C	KL	
+81	2	427.3800	852.7444	853.0293	0	40.234848	3	0.71672249	1	3	16	13	GPLATPIGK	trypsin-full-digest	YOR136W	KG	
+81	2	427.3800	852.7444	854.0171	0.1037989	48.62289	2	0.64232749	2	4	14	13	THILSGVK	trypsin-full-digest	YDR093W	RN	
+81	2	427.3800	852.7444	852.0445	0.55270237	26.911837	6	0.32058826	3	3	14	13	HASLILAK	trypsin-full-digest	YMR235C	KA	
+81	2	427.3800	852.7444	851.9758	0.58951396	66.419243	1	0.29420456	4	5	14	13	SSMGPAFR	trypsin-full-digest	YGL135W	KL	
+81	2	427.3800	852.7444	851.8712	0.75772524	33.243809	4	0.17364377	5	4	12	13	FQTGEDR	trypsin-full-digest	YLR249W	RE	
+82	2	452.8500	903.6844	904.8859	0	64.193161	2	0.5262	1	4	14	20	ESTPDNDK	trypsin-full-digest	YOR267C	KE	
+82	2	452.8500	903.6844	906.0465	0.11277704	56.972046	3	0.46685672	2	4	14	20	FDIGDLVK	trypsin-full-digest	YLR298C	RA	
+82	2	452.8500	903.6844	904.9293	0.2270361	47.524639	5	0.4067336	3	4	14	20	EQPESTSK	trypsin-full-digest	YDL223C	KN	
+82	2	452.8500	903.6844	903.0002	0.42635316	51.255814	4	0.30185297	4	4	16	20	DTGVVDAVK	trypsin-full-digest	YNL166C	KV	
+82	2	452.8500	903.6844	904.0338	0.52230549	64.921379	1	0.25136286	5	4	14	20	VSHTVSFK	trypsin-full-digest	YOR168W	KS	
+82	3	452.8500	1355.5265	1355.5164	0	156.55568	2	0.72244394	1	10	44	7	YQVTVIDAPGHR	trypsin-full-digest	YBR118W	KD	
+82	3	452.8500	1355.5265	1355.4419	0.25582105	104.23301	4	0.53762758	2	10	48	7	FDSGTSGSQNMPK	trypsin-full-digest	YDL223C	KA	
+82	3	452.8500	1355.5265	1354.3928	0.72055531	159.81966	1	0.20188312	3	11	48	7	SGDAETAAYDNIK	trypsin-full-digest	YDL223C	KN	
+82	3	452.8500	1355.5265	1355.6616	0.78724837	51.907604	6	0.15370114	4	6	44	7	GMLNVQLLVVNR	trypsin-full-digest	YBR115C	KN	
+82	3	452.8500	1355.5265	1357.6157	1.0172542	42.36615	7	-0.012465239	5	7	48	7	APIVAYAELIAAR	trypsin-full-digest	YGL245W	KI	
+83	2	468.8000	935.5844	937.0202	0	165.04073	1	0.70322478	1	8	16	11	SDGVAGLYR	trypsin-full-digest	YBL030C	KG	
+83	2	468.8000	935.5844	937.0635	0.051904984	157.04977	2	0.66672391	2	7	14	11	LTSQGIYR	trypsin-full-digest	YGR157W	KY	
+83	2	468.8000	935.5844	935.1315	0.23450169	68.503082	4	0.53831738	3	5	16	11	VLPGPEVPK	trypsin-full-digest	YHR183W	KD	
+83	2	468.8000	935.5844	935.0446	0.30850619	18.517334	6	0.48627558	4	3	14	11	LNLEGDFK	trypsin-full-digest	YGL245W	KK	
+83	2	468.8000	935.5844	935.8565	0.42743704	51.483372	5	0.40264046	5	4	14	11	EDDSNNDK	trypsin-full-digest	YOR267C	KE	
+83	3	468.8000	1403.3765	1404.4968	0	43.463505	3	0.39917707	1	11	56	6	VASANATAAESDVAK	trypsin-full-digest	YIL133C	KQ	
+83	3	468.8000	1403.3765	1404.5829	0.13736853	77.41394	1	0.34434271	2	10	44	6	TTLHYALSELEK	trypsin-full-digest	YDR399W	RD	
+83	3	468.8000	1403.3765	1405.7032	0.552109	64.443207	2	0.17878783	3	9	48	6	GFLPSVVGIVVYR	trypsin-full-digest	YBL030C	RG	
+83	3	468.8000	1403.3765	1405.4899	1.5814054	3.3649597	6	-0.23208369	4	2	44	6	STSTVNLNNHYR	trypsin-full-digest	YOR267C	KA	
+83	3	468.8000	1403.3765	1402.6282	1.6719476	5.7472043	5	-0.26822606	5	4	44	6	MTSGYYLGELLR	trypsin-full-digest	YFR053C	KL	
+84	2	440.0600	878.1044	877.0109	0	18.001448	6	0.8047384	1	4	14	12	QGIYGLAR	trypsin-full-digest	YKL127W	KS	
+84	2	440.0600	878.1044	877.0080	0.18432704	45.319706	2	0.65640336	2	5	14	12	LSTSVGWK	trypsin-full-digest	YIL133C	KY	
+84	2	440.0600	878.1044	876.0233	0.21106918	59.926601	1	0.63488293	3	6	14	12	FVVGLGER	trypsin-full-digest	YKL145W	KV	
+84	2	440.0600	878.1044	875.8907	0.38777286	23.468019	5	0.4926827	4	4	12	12	LEEQDSR	trypsin-full-digest	YMR145C	KR	
+84	2	440.0600	878.1044	877.0135	0.43924966	8.4855242	9	0.45125732	5	2	12	12	NFGVWVR	trypsin-full-digest	YMR242C	KY	
+85	3	497.6200	1489.8365	1489.7319	0	2629.9929	1	5.015099	1	28	48	3	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+85	3	497.6200	1489.8365	1488.7063	0.84448564	590.96753	2	0.77991986	2	17	48	3	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+85	3	497.6200	1489.8365	1490.6510	0.92268771	84.568672	3	0.3877289	3	9	48	3	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+86	1	713.0700	712.0622	713.7887	0	42.898697	1	0.25811729	1	4	12	9	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+86	1	713.0700	712.0622	710.7880	0.43596756	26.317953	2	0.14558652	2	3	12	9	HIDAGAK	trypsin-full-digest	YGR192C	KK	
+86	1	713.0700	712.0622	713.7881	0.89537442	14.902379	3	0.027005678	3	2	12	9	TLYGFGG	trypsin-full-digest	YBR009C	R-	
+86	1	713.0700	712.0622	714.7765	1.1662105	13.06544	4	-0.042901821	4	2	12	9	SGPTPTR	trypsin-full-digest	YDL223C	KS	
+86	1	713.0700	712.0622	709.8033	1.3344504	6.7109046	5	-0.086327426	5	2	14	9	AHGGVAAK	trypsin-full-digest	YCR034W	RV	
+87	2	501.1300	1000.2444	998.1502	0	82.180992	1	0.94085401	1	6	20	10	IAAVGAANGVR	trypsin-full-digest	YKL127W	KK	
+87	2	501.1300	1000.2444	999.1753	0.0071040629	52.168655	3	0.93417013	2	5	16	10	EALGELVIR	trypsin-full-digest	YPL215W	KA	
+87	2	501.1300	1000.2444	1003.0769	0.31822187	32.207912	4	0.64145368	3	4	16	10	NLDGETNLK	trypsin-full-digest	YDR093W	KV	
+87	2	501.1300	1000.2444	1003.1383	0.40787295	56.638897	2	0.55710512	4	6	18	10	AVNTGMEPGK	trypsin-full-digest	YLR340W	RT	
+87	2	501.1300	1000.2444	998.1038	0.58649296	12.313833	6	0.38904974	5	3	16	10	SSIQLGEHK	trypsin-full-digest	YLR371W	KK	
+87	3	501.1300	1500.3666	1500.7172	0	41.45351	1	0.32945254	1	8	48	3	AALLNQYFAQAYK	trypsin-full-digest	YGL245W	KG	
+87	3	501.1300	1500.3666	1497.7600	1.226549	22.535898	2	-0.074637152	2	6	48	3	LHHAFFVGDILTK	trypsin-full-digest	YBR115C	KR	
+87	3	501.1300	1500.3666	1500.4829	1.4662495	19.797424	3	-0.15360707	3	6	44	3	YLPNGDCECCGR	trypsin-full-digest	YBR115C	RA	
+88	2	419.3200	836.6244	835.8872	0	24.406082	2	0.40368167	1	3	12	10	SDNVMDR	trypsin-full-digest	YBL076C	KW	
+88	2	419.3200	836.6244	834.0013	0.31547526	12.321632	4	0.27633008	2	2	12	10	LSMSQLR	trypsin-full-digest	YOR267C	KS	
+88	2	419.3200	836.6244	839.0054	0.49235049	17.52681	3	0.2049288	3	3	14	10	IAGLNPVR	trypsin-full-digest	YPL106C	RI	
+88	2	419.3200	836.6244	835.0110	0.76761371	2.3227963	9	0.093810096	4	1	12	10	EYILGLK	trypsin-full-digest	YDL198C	KD	
+88	2	419.3200	836.6244	837.9280	0.8460986	7.1517234	5	0.062127165	5	2	12	10	ETSNFIK	trypsin-full-digest	YBR118W	KK	
+89	2	452.8500	903.6844	906.0465	0	67.909523	1	0.66419196	1	5	14	20	FDIGDLVK	trypsin-full-digest	YLR298C	RA	
+89	2	452.8500	903.6844	904.8859	0.11163299	46.654369	2	0.59004623	2	5	14	20	ESTPDNDK	trypsin-full-digest	YOR267C	KE	
+89	2	452.8500	903.6844	903.0513	0.32041824	4.8063245	13	0.45137274	3	2	12	20	QFWLGPR	trypsin-full-digest	YBR115C	RD	
+89	2	452.8500	903.6844	900.9867	0.48289984	21.544519	4	0.34345376	4	3	12	20	ITADYYR	trypsin-full-digest	YLR298C	RN	
+89	2	452.8500	903.6844	905.0593	0.5430572	1.1933155	18	0.30349773	5	1	16	20	VSSTSLALK	trypsin-full-digest	YLR371W	RR	
+89	3	452.8500	1355.5265	1355.4419	0	115.35501	2	1.0529802	1	13	48	7	FDSGTSGSQNMPK	trypsin-full-digest	YDL223C	KA	
+89	3	452.8500	1355.5265	1354.3092	0.6454857	152.35396	1	0.37329653	2	12	48	7	GDDEANGATSFDR	trypsin-full-digest	YOR063W	KT	
+89	3	452.8500	1355.5265	1357.6157	0.64984179	32.56052	6	0.36870968	3	8	48	7	APIVAYAELIAAR	trypsin-full-digest	YGL245W	KI	
+89	3	452.8500	1355.5265	1355.6616	0.69778049	44.920116	4	0.31823114	4	7	44	7	GMLNVQLLVVNR	trypsin-full-digest	YBR115C	KN	
+89	3	452.8500	1355.5265	1354.3928	0.86221355	78.549049	3	0.14508639	5	11	48	7	SGDAETAAYDNIK	trypsin-full-digest	YDL223C	KN	
+90	3	1032.0000	3092.9766	3095.2366	0	1014.6406	1	4.1437883	1	32	108	3	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+90	3	1032.0000	3092.9766	3095.4709	0.99053985	48.36216	2	0.039200895	2	12	112	3	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+90	3	1032.0000	3092.9766	3090.7644	1.2211008	8.0220041	3	-0.91619474	3	5	112	3	NIVPVIMAGIIAIYGLVVSVLVCYSLGQK	trypsin-full-digest	YEL027W	KQ	
+91	2	466.0900	930.1644	932.2044	0	65.519272	2	0.60412568	1	5	14	9	MIAPMIEK	trypsin-full-digest	YLR043C	KF	
+91	2	466.0900	930.1644	933.0876	0.026813155	100.87474	1	0.58792716	2	6	14	9	MSIPETQK	trypsin-full-digest	YMR303C	-A	
+91	2	466.0900	930.1644	930.0287	0.048423041	58.461544	3	0.57487208	3	4	14	9	QVSDIVNR	trypsin-full-digest	YGR157W	RI	
+91	2	466.0900	930.1644	931.0996	0.40841615	30.83877	5	0.357391	4	4	14	9	LWVLTGDK	trypsin-full-digest	YDR093W	KV	
+91	2	466.0900	930.1644	930.0690	0.71705782	42.043987	4	0.17093264	5	4	14	9	IETGELIR	trypsin-full-digest	YLR371W	KC	
+92	3	497.2800	1488.8165	1489.7319	0	1872.1616	1	3.8966787	1	24	48	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+92	3	497.2800	1488.8165	1486.6195	0.83217859	344.51291	2	0.65394616	2	14	52	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+92	3	497.2800	1488.8165	1488.7063	0.84458709	281.42068	3	0.60559422	3	13	48	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+92	3	497.2800	1488.8165	1490.6510	1.0214745	92.455688	4	-0.083679095	4	9	48	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+93	2	693.0300	1384.0444	1382.4467	0	1282.8864	1	3.071521	1	18	24	5	TASEFDSAIAQDK	trypsin-full-digest	YLR043C	KL	
+93	2	693.0300	1384.0444	1381.5258	0.82522219	24.710701	3	0.53683364	2	4	22	5	MSESNAHFSFPK	trypsin-full-digest	YBL076C	-E	
+93	2	693.0300	1384.0444	1381.6099	0.92968917	132.91029	2	0.21596114	3	7	22	5	LAMFLTDSNTIR	trypsin-full-digest	YDR037W	RE	
+93	2	693.0300	1384.0444	1386.6718	1.0372562	2.1949697	5	-0.11443344	4	1	20	5	LAEMIPQFFYK	trypsin-full-digest	YDR093W	RN	
+93	2	693.0300	1384.0444	1383.6108	1.0673972	2.2312288	4	-0.20701215	5	1	26	5	NVIVSGIVLAADGR	trypsin-full-digest	YBL076C	KK	
+94	3	669.4400	2005.2965	2006.3051	0	676.56519	1	2.6910779	1	27	68	3	SGVGICATCVLRPDLLFK	trypsin-full-digest	YEL027W	KN	
+94	3	669.4400	2005.2965	2004.0973	0.97163469	106.12769	2	0.076333262	2	14	72	3	EANPSTQVPQSDTFPNGSK	trypsin-full-digest	YMR145C	RR	
+94	3	669.4400	2005.2965	2005.2764	1.1398195	27.866337	3	-0.37626526	3	8	68	3	IPDIENSVNMVPVDHVAR	trypsin-full-digest	YBR115C	KV	
+95	2	1004.4600	2006.9044	2006.3051	0	723.72211	1	3.9027524	1	16	34	4	SGVGICATCVLRPDLLFK	trypsin-full-digest	YEL027W	KN	
+95	2	1004.4600	2006.9044	2004.0973	0.82395792	26.607611	3	0.68704855	2	4	36	4	EANPSTQVPQSDTFPNGSK	trypsin-full-digest	YMR145C	RR	
+95	2	1004.4600	2006.9044	2009.1975	0.9481867	26.953934	2	0.2022146	3	4	38	4	YDSPVSSPITSASELGSIAK	trypsin-full-digest	YNL166C	KL	
+95	2	1004.4600	2006.9044	2005.2764	0.99055701	8.0184507	4	0.036853641	4	3	34	4	IPDIENSVNMVPVDHVAR	trypsin-full-digest	YBR115C	KV	
+96	2	652.2400	1302.4644	1301.4161	0	1587.1769	1	4.1044731	1	18	22	9	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+96	2	652.2400	1302.4644	1301.4161	0.77718401	146.15948	2	0.9145422	2	7	22	9	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+96	2	652.2400	1302.4644	1303.4968	0.78656965	136.04576	3	0.87601912	3	7	22	9	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+96	2	652.2400	1302.4644	1301.4192	0.8966037	43.772213	5	0.42438722	4	4	22	9	DALPSVTSEQVR	trypsin-full-digest	YBL076C	KE	
+96	2	652.2400	1302.4644	1304.4626	0.9150939	87.347191	4	0.34849483	5	6	22	9	IPGTFEPDTLSK	trypsin-full-digest	YDL223C	KS	
+97	2	433.7800	865.5444	863.9689	0	22.758293	3	0.22999756	1	2	12	13	EYQVIGR	trypsin-full-digest	YMR242C	KR	
+97	2	433.7800	865.5444	865.1040	0.27651593	141.54544	1	0.16639957	2	5	10	13	FLWMIR	trypsin-full-digest	YGL022W	KI	
+97	2	433.7800	865.5444	862.9965	1.1270387	31.535526	2	-0.029218594	3	3	14	13	IMDTAGQK	trypsin-full-digest	YHR183W	KG	
+97	2	433.7800	865.5444	867.9752	1.3190436	0	8	-0.073379271	4	0	12	13	MANFETR	trypsin-full-digest	YNL166C	KR	
+97	2	433.7800	865.5444	863.9843	1.572087	18.824604	5	-0.13157864	5	3	14	13	MSSNAQVK	trypsin-full-digest	YBL030C	-T	
+97	3	433.7800	1298.3165	1295.5011	0	108.83713	1	0.50911599	1	9	44	5	TSFFQALGVPTK	trypsin-full-digest	YLR340W	KI	
+97	3	433.7800	1298.3165	1300.4741	0.5583092	77.047203	3	0.22487184	2	8	40	5	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+97	3	433.7800	1298.3165	1299.4670	0.79660463	95.325806	2	0.10355183	3	9	40	5	MPYTLSDAHHK	trypsin-full-digest	YLR058C	-L	
+97	3	433.7800	1298.3165	1298.5687	1.2789003	34.471161	5	-0.1419926	4	5	40	5	LNNPAIALMWR	trypsin-full-digest	YHR183W	KG	
+97	3	433.7800	1298.3165	1299.4120	1.4781585	36.938969	4	-0.24343814	5	5	36	5	FEELCADLFR	trypsin-full-digest	YLL024C	RS	
+98	2	751.2800	1500.5444	1500.4829	0	85.739204	1	0.73663002	1	6	22	3	YLPNGDCECCGR	trypsin-full-digest	YBR115C	RA	
+98	2	751.2800	1500.5444	1497.7600	0.39315757	57.672653	2	0.44701836	2	6	24	3	LHHAFFVGDILTK	trypsin-full-digest	YBR115C	KR	
+98	2	751.2800	1500.5444	1500.7172	1.3417306	5.9268188	3	-0.25172904	3	2	24	3	AALLNQYFAQAYK	trypsin-full-digest	YGL245W	KG	
+99	3	581.9500	1742.8265	1740.0070	0	95.88134	1	0.48460686	1	11	56	3	MNSLVTQYAAPLFER	trypsin-full-digest	YCR034W	-Y	
+99	3	581.9500	1742.8265	1742.9492	0.37074959	43.33564	2	0.30493906	2	7	56	3	SLLNIDPHSSDYLIR	trypsin-full-digest	YMR309C	KL	
+99	3	581.9500	1742.8265	1742.9031	1.6881881	9.5394077	3	-0.33350065	3	4	56	3	ESLVEVNFADLYTSR	trypsin-full-digest	YMR235C	RL	
+100	1	763.1100	762.1022	764.9664	0	10.836562	7	0.33078977	1	2	12	15	LVLVHGK	trypsin-full-digest	YDR093W	RW	
+100	1	763.1100	762.1022	759.8577	0.046465401	32.205807	1	0.3154195	2	4	14	15	SGDAALVK	trypsin-full-digest	YBR118W	KF	
+100	1	763.1100	762.1022	762.9196	0.28373277	20.508097	2	0.23693387	3	3	12	15	MAAELTK	trypsin-full-digest	YPL266W	RR	
+100	1	763.1100	762.1022	761.8761	0.46104947	18.759415	4	0.17827933	4	3	10	15	DPVIYR	trypsin-full-digest	YGL245W	RC	
+100	1	763.1100	762.1022	764.8363	0.46744531	19.572428	3	0.17616364	5	3	12	15	YGADALR	trypsin-full-digest	YBL076C	KL	
+101	1	833.2400	832.2322	829.9922	0	25.544271	2	0.28301004	1	3	14	16	DIVSAVVK	trypsin-full-digest	YMR303C	KA	
+101	1	833.2400	832.2322	834.0013	0.083209559	14.410157	3	0.2594609	2	2	12	16	LSMSQLR	trypsin-full-digest	YOR267C	KS	
+101	1	833.2400	832.2322	832.9573	0.3484197	67.488708	1	0.18440376	3	3	12	16	NAPAWFK	trypsin-full-digest	YDR064W	RL	
+101	1	833.2400	832.2322	835.0112	0.46711424	2.5795839	10	0.15081201	4	1	12	16	TIFVVEK	trypsin-full-digest	YMR309C	KG	
+101	1	833.2400	832.2322	834.9862	0.69176388	4.319622	8	0.087233908	5	1	16	16	AAATAAMTK	trypsin-full-digest	YLR249W	KA	
+102	2	733.2200	1464.4243	1462.7675	0	963.87823	1	3.3292608	1	16	24	3	NEVSAMPTLLLFK	trypsin-full-digest	YLR043C	KN	
+102	2	733.2200	1464.4243	1463.5709	0.91493738	1.7641164	3	0.28319573	2	1	24	3	TCVVETPTLNSDK	trypsin-full-digest	YBR115C	RS	
+102	2	733.2200	1464.4243	1466.6692	0.93777496	36.194633	2	0.20716341	3	4	22	3	DFMVEQELLNTK	trypsin-full-digest	YFR053C	KD	
+103	2	559.1000	1116.1843	1119.1559	0	27.676226	1	0.44975054	1	3	16	11	YHIEEEGSR	trypsin-full-digest	YCR012W	RK	
+103	2	559.1000	1116.1843	1114.1895	0.19610925	9.8223457	3	0.3615503	2	3	16	11	TLQPNPECR	trypsin-full-digest	YDR093W	RF	
+103	2	559.1000	1116.1843	1116.1615	0.39587018	7.9366827	4	0.27170771	3	3	16	11	YDGAFDCLR	trypsin-full-digest	YBL030C	KK	
+103	2	559.1000	1116.1843	1113.1975	0.65997499	0.809264	11	0.15292643	4	1	16	11	DYFGAHTFR	trypsin-full-digest	YHR183W	RV	
+103	2	559.1000	1116.1843	1115.2114	0.77206689	17.480232	2	0.10251305	5	4	18	11	DVSNSKPNVR	trypsin-full-digest	YMR073C	RF	
+104	2	565.2200	1128.4243	1129.2966	0	8.6711378	3	0.40850091	1	2	18	7	NVVAVEMDPR	trypsin-full-digest	YPL266W	KM	
+104	2	565.2200	1128.4243	1126.2340	0.37231663	18.984291	1	0.25640923	2	2	16	7	DEGLFNLYR	trypsin-full-digest	YDL198C	RG	
+104	2	565.2200	1128.4243	1126.2928	0.73227251	7.3460369	4	0.10936692	3	2	18	7	GDVVMIYSSR	trypsin-full-digest	YBR115C	RG	
+104	2	565.2200	1128.4243	1131.1674	1.013297	15.935033	2	-0.0054318211	4	3	20	7	IDQASGAAQDR	trypsin-full-digest	YLR371W	RH	
+104	2	565.2200	1128.4243	1126.2004	1.2105	3.8605995	5	-0.085989423	5	1	18	7	CTINGVSYGR	trypsin-full-digest	YDR093W	KA	
+105	2	483.1200	964.2244	964.0862	0	29.478136	2	0.52027655	1	4	14	9	SDTPLLYR	trypsin-full-digest	YBL076C	RS	
+105	2	483.1200	964.2244	965.1637	0.12127268	45.200874	1	0.45718122	2	4	14	9	VLVHTQIR	trypsin-full-digest	YOR063W	RK	
+105	2	483.1200	964.2244	967.0465	0.58198601	15.500867	4	0.21748286	3	3	16	9	GADSVIYSR	trypsin-full-digest	YDR093W	KL	
+105	2	483.1200	964.2244	962.1570	0.77023834	26.160965	3	0.1195396	4	3	14	9	LFTLEAIR	trypsin-full-digest	YOR168W	RR	
+105	2	483.1200	964.2244	962.1136	0.78001142	1.991576	5	0.1144549	5	1	14	9	LALIDDFR	trypsin-full-digest	YGL022W	KE	
+106	1	713.0700	712.0622	713.7887	0	19.851704	2	0.24297184	1	3	12	9	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+106	1	713.0700	712.0622	710.7880	0.56537306	9.3046618	4	0.10560211	2	2	12	9	HIDAGAK	trypsin-full-digest	YGR192C	KK	
+106	1	713.0700	712.0622	714.8626	0.81795621	2.3578839	9	0.044231515	3	1	10	9	ALPTWK	trypsin-full-digest	YMR235C	KD	
+106	1	713.0700	712.0622	710.8309	0.96226132	9.7281923	3	0.0091694407	4	2	10	9	AFAQFK	trypsin-full-digest	YJR069C	KE	
+106	1	713.0700	712.0622	709.8033	1.3992343	6.9487085	5	-0.097002678	5	2	14	9	AHGGVAAK	trypsin-full-digest	YCR034W	RV	
+107	2	433.7800	865.5444	866.0430	0	2.096514	11	0.18164477	1	1	12	13	NDFIMVK	trypsin-full-digest	YOR063W	KG	
+107	2	433.7800	865.5444	863.9689	0.0033280628	54.479156	1	0.18104024	2	3	12	13	EYQVIGR	trypsin-full-digest	YMR242C	KR	
+107	2	433.7800	865.5444	864.9566	0.31438479	3.6916726	8	0.12453841	3	1	12	13	NIQHPEK	trypsin-full-digest	YDL223C	KN	
+107	2	433.7800	865.5444	864.0271	0.50945479	18.027445	5	0.089104973	4	2	12	13	LAEWMSK	trypsin-full-digest	YBR115C	RY	
+107	2	433.7800	865.5444	867.8272	0.59848398	17.266714	6	0.072933286	5	2	12	13	DSDDNFR	trypsin-full-digest	YOR267C	RL	
+107	3	433.7800	1298.3165	1295.5011	0	217.9725	1	0.61248285	1	10	44	5	TSFFQALGVPTK	trypsin-full-digest	YLR340W	KI	
+107	3	433.7800	1298.3165	1299.4670	0.57715613	143.61385	2	0.25898463	2	9	40	5	MPYTLSDAHHK	trypsin-full-digest	YLR058C	-L	
+107	3	433.7800	1298.3165	1298.5687	1.2572666	93.581177	3	-0.15757143	3	7	40	5	LNNPAIALMWR	trypsin-full-digest	YHR183W	KG	
+107	3	433.7800	1298.3165	1299.4120	1.3784283	34.675423	4	-0.23178086	4	5	36	5	FEELCADLFR	trypsin-full-digest	YLL024C	RS	
+107	3	433.7800	1298.3165	1300.4741	1.4784603	26.163458	5	-0.29304871	5	4	40	5	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+108	3	1032.5000	3094.4766	3095.2366	0	612.73865	1	3.6182745	1	28	108	2	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+108	3	1032.5000	3094.4766	3095.4709	0.90336043	41.487244	2	0.34966859	2	10	112	2	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+109	2	419.3200	836.6244	835.8872	0	24.110601	5	0.3558453	1	3	12	10	SDNVMDR	trypsin-full-digest	YBL076C	KW	
+109	2	419.3200	836.6244	839.0054	0.1598686	21.904999	6	0.29895681	2	3	14	10	IAGLNPVR	trypsin-full-digest	YPL106C	RI	
+109	2	419.3200	836.6244	835.0110	0.52057219	15.567754	8	0.17060213	3	3	12	10	EYILGLK	trypsin-full-digest	YDL198C	KD	
+109	2	419.3200	836.6244	835.9554	0.6000371	95.850708	1	0.14232492	4	6	14	10	IGDYAGIK	trypsin-full-digest	YMR303C	KW	
+109	2	419.3200	836.6244	837.9280	0.63456231	5.9988446	9	0.13003929	5	2	12	10	ETSNFIK	trypsin-full-digest	YBR118W	KK	
+110	2	613.1900	1224.3644	1222.3203	0	20.85313	1	0.51401627	1	3	22	4	GGEGEVSVFVSR	trypsin-full-digest	YDR037W	KV	
+110	2	613.1900	1224.3644	1223.4375	0.0089263823	11.477989	3	0.50942796	2	2	20	4	LIDFGSAVVFR	trypsin-full-digest	YOR267C	KY	
+110	2	613.1900	1224.3644	1223.2670	0.44400001	14.988181	2	0.28579304	3	2	18	4	YYGGNEHIDR	trypsin-full-digest	YLR058C	RM	
+110	2	613.1900	1224.3644	1224.3788	0.87815511	8.9747524	4	0.062630266	4	2	18	4	LAFLENQDFK	trypsin-full-digest	YBR115C	RL	
+111	3	1033.0200	3096.0366	3095.2366	0	934.97644	1	4.0064011	1	31	108	2	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+111	3	1033.0200	3096.0366	3095.4709	0.9004131	97.407951	2	0.39898497	2	13	112	2	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+112	2	403.3000	804.5844	803.8675	0	66.118599	2	0.9786734	1	5	12	20	ELDTAQK	trypsin-full-digest	YGR192C	KH	
+112	2	403.3000	804.5844	803.9288	0.26627362	49.190113	6	0.71807849	2	5	14	20	GSMADVPK	trypsin-full-digest	YFR053C	KE	
+112	2	403.3000	804.5844	804.8577	0.52704316	56.694237	3	0.46287027	3	5	10	20	EWNQTK	trypsin-full-digest	YDR093W	KF	
+112	2	403.3000	804.5844	801.9383	0.61698544	10.482521	12	0.37484616	4	3	14	20	LSPGITSK	trypsin-full-digest	YGL009C	KD	
+112	2	403.3000	804.5844	804.8957	0.67115271	76.747498	1	0.32183412	5	6	12	20	ESVTEIK	trypsin-full-digest	YGR157W	KA	
+112	3	403.3000	1206.8765	1204.3109	0	33.421028	1	0.73118997	1	6	40	2	VNGDAHVISHR	trypsin-full-digest	YGR157W	RA	
+112	3	403.3000	1206.8765	1207.4535	0.65048796	28.29888	2	0.25555971	2	6	36	2	DTLKPMAIYR	trypsin-full-digest	YLR371W	RV	
+113	2	751.4200	1500.8243	1500.4829	0	2.2083549	1	0.20484404	1	2	22	2	YLPNGDCECCGR	trypsin-full-digest	YBR115C	RA	
+113	2	751.4200	1500.8243	1500.7172	1.3362254	0.41176486	2	-0.068873771	2	1	24	2	AALLNQYFAQAYK	trypsin-full-digest	YGL245W	KG	
+114	3	670.5500	2008.6265	2006.3051	0	431.85522	1	2.2389128	1	24	68	2	SGVGICATCVLRPDLLFK	trypsin-full-digest	YEL027W	KN	
+114	3	670.5500	2008.6265	2009.1975	0.7732603	74.17244	2	0.50765038	2	14	76	2	YDSPVSSPITSASELGSIAK	trypsin-full-digest	YNL166C	KL	
+115	2	452.8500	903.6844	905.0214	0	68.137947	2	0.39396563	1	4	12	20	HHEELLK	trypsin-full-digest	YOR267C	RE	
+115	2	452.8500	903.6844	904.9293	0.15361577	75.46859	1	0.33344629	2	5	14	20	EQPESTSK	trypsin-full-digest	YDL223C	KN	
+115	2	452.8500	903.6844	903.0513	0.26712555	40.726894	6	0.28872734	3	4	12	20	QFWLGPR	trypsin-full-digest	YBR115C	RD	
+115	2	452.8500	903.6844	905.1050	0.30531314	38.380623	7	0.27368274	4	4	16	20	IALIAGYGK	trypsin-full-digest	YGR086C	KA	
+115	2	452.8500	903.6844	903.0921	0.33805606	49.166584	4	0.26078317	5	5	14	20	NLALLFGR	trypsin-full-digest	YLR371W	RS	
+116	2	613.3100	1224.6044	1224.3788	0	30.347525	2	0.61062574	1	4	18	5	LAFLENQDFK	trypsin-full-digest	YBR115C	RL	
+116	2	613.3100	1224.6044	1222.3203	0.40603259	55.583378	1	0.36269179	2	5	22	5	GGEGEVSVFVSR	trypsin-full-digest	YDR037W	KV	
+116	2	613.3100	1224.6044	1223.4375	0.463314	28.741871	3	0.32771429	3	3	20	5	LIDFGSAVVFR	trypsin-full-digest	YOR267C	KY	
+116	2	613.3100	1224.6044	1223.2670	1.3308802	4.6025863	4	-0.20204397	4	1	18	5	YYGGNEHIDR	trypsin-full-digest	YLR058C	RM	
+116	2	613.3100	1224.6044	1227.4233	1.5334202	3.0746751	5	-0.32572013	5	1	18	5	IEVLEQELVR	trypsin-full-digest	YGR086C	KA	
+117	2	652.5200	1303.0244	1301.4161	0	1256.421	1	3.6139576	1	18	22	8	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+117	2	652.5200	1303.0244	1301.4161	0.77656871	141.89146	2	0.80747122	2	7	22	8	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+117	2	652.5200	1303.0244	1300.4741	0.85818648	125.72668	3	0.51250803	3	8	20	8	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+117	2	652.5200	1303.0244	1304.4626	0.90605557	53.969692	5	0.3395111	4	5	22	8	IPGTFEPDTLSK	trypsin-full-digest	YDL223C	KS	
+117	2	652.5200	1303.0244	1303.4968	0.91972971	114.00854	4	0.29009345	5	7	22	8	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+118	3	1031.9399	3092.7964	3095.2366	0	2070.8057	1	4.5130448	1	42	108	3	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+118	3	1031.9399	3092.7964	3095.4709	0.9686414	41.307964	2	0.14152278	2	10	112	3	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+118	3	1031.9399	3092.7964	3090.7644	1.0997559	28.020123	3	-0.45020282	3	9	112	3	NIVPVIMAGIIAIYGLVVSVLVCYSLGQK	trypsin-full-digest	YEL027W	KQ	
+119	2	651.7700	1301.5244	1301.4161	0	1300.1331	1	3.780313	1	17	22	11	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+119	2	651.7700	1301.5244	1301.4161	0.71379524	221.25522	2	1.0819436	2	9	22	11	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+119	2	651.7700	1301.5244	1298.5687	0.81658727	125.39308	4	0.69335759	3	7	20	11	LNNPAIALMWR	trypsin-full-digest	YHR183W	KG	
+119	2	651.7700	1301.5244	1303.4968	0.84427452	163.24036	3	0.58869106	4	8	22	11	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+119	2	651.7700	1301.5244	1304.4626	0.85154969	104.09963	5	0.56118876	5	7	22	11	IPGTFEPDTLSK	trypsin-full-digest	YDL223C	KS	
+120	2	409.2100	816.4044	818.8417	0	124.02093	1	0.57712847	1	5	12	9	QSNDSLR	trypsin-full-digest	YOR267C	KS	
+120	2	409.2100	816.4044	815.9681	0.20467918	48.632717	3	0.45900229	2	3	12	9	SLNLTLR	trypsin-full-digest	YOR136W	RK	
+120	2	409.2100	816.4044	814.8504	0.22414759	34.387234	4	0.44776651	3	3	12	9	APELDDR	trypsin-full-digest	YBR115C	KN	
+120	2	409.2100	816.4044	816.9555	0.3102152	25.83992	6	0.39809445	4	2	12	9	HLSSVFK	trypsin-full-digest	YPL266W	KF	
+120	2	409.2100	816.4044	818.9838	0.33361226	99.746979	2	0.38459134	5	4	12	9	LEEAMVK	trypsin-full-digest	YMR309C	KL	
+121	2	651.5800	1301.1444	1301.4161	0	1479.4915	1	4.3240523	1	18	22	10	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+121	2	651.5800	1301.1444	1303.4968	0.78806555	74.371384	3	0.91641569	2	5	22	10	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+121	2	651.5800	1301.1444	1300.4741	0.86330932	74.331306	4	0.5910576	3	5	20	10	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+121	2	651.5800	1301.1444	1301.4161	0.86501253	103.94946	2	0.58369279	4	6	22	10	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+121	2	651.5800	1301.1444	1301.4192	0.88314486	54.668568	5	0.50528789	5	5	22	10	DALPSVTSEQVR	trypsin-full-digest	YBL076C	KE	
+122	1	760.2200	759.2122	759.8577	0	70.539841	1	0.42828295	1	5	14	13	SGDAALVK	trypsin-full-digest	YBR118W	KF	
+122	1	760.2200	759.2122	758.7892	0.059807912	19.467524	5	0.40266824	2	3	12	13	GSSQQPR	trypsin-full-digest	YEL027W	RL	
+122	1	760.2200	759.2122	756.8137	0.21858351	17.001827	6	0.33466735	3	3	12	13	SHSEGLK	trypsin-full-digest	YMR235C	KV	
+122	1	760.2200	759.2122	758.8753	0.24966337	23.554132	4	0.32135639	4	3	10	13	IGWDLR	trypsin-full-digest	YGL026C	KF	
+122	1	760.2200	759.2122	759.8577	0.46435907	69.700447	2	0.22940588	5	5	12	13	NSTIPTK	trypsin-full-digest	YLL024C	RK	
+123	2	565.0300	1128.0444	1129.2966	0	15.687304	2	0.33831081	1	3	18	7	NVVAVEMDPR	trypsin-full-digest	YPL266W	KM	
+123	2	565.0300	1128.0444	1125.2004	0.22678033	19.670055	1	0.26158857	2	4	20	7	YESATASALVN	trypsin-full-digest	YDR064W	K-	
+123	2	565.0300	1128.0444	1130.2659	0.40167227	10.035781	4	0.20242074	3	2	18	7	NSPWVVDSVK	trypsin-full-digest	YOR168W	KN	
+123	2	565.0300	1128.0444	1126.2340	0.41678071	10.784776	3	0.19730939	4	2	16	7	DEGLFNLYR	trypsin-full-digest	YDL198C	RG	
+123	2	565.0300	1128.0444	1126.2004	1.3182964	10.035781	4	-0.10768311	5	2	18	7	CTINGVSYGR	trypsin-full-digest	YDR093W	KA	
+124	2	495.0600	988.1044	987.0771	0	147.71281	1	1.242798	1	7	16	3	YSFLEGGSK	trypsin-full-digest	YGL009C	KL	
+124	2	495.0600	988.1044	989.0935	0.68469864	6.1323128	3	0.39185587	2	2	16	3	SLEASVIDR	trypsin-full-digest	YBR115C	KN	
+124	2	495.0600	988.1044	988.1950	0.79839063	12.011983	2	0.25055972	3	3	18	3	TPLPPAPAPK	trypsin-full-digest	YBL030C	KK	
+125	1	805.0000	803.9922	804.8957	0	67.403206	1	0.68201995	1	4	12	20	ESVTEIK	trypsin-full-digest	YGR157W	KA	
+125	1	805.0000	803.9922	802.9286	0.3362076	46.575958	2	0.45271966	2	4	12	20	THAIFSK	trypsin-full-digest	YGR157W	KI	
+125	1	805.0000	803.9922	804.8956	0.49661425	22.291025	6	0.34331912	3	2	12	20	ESTIDIK	trypsin-full-digest	YOR267C	KI	
+125	1	805.0000	803.9922	804.8577	0.50674599	32.34922	4	0.33640909	4	3	10	20	EWNQTK	trypsin-full-digest	YDR093W	KF	
+125	1	805.0000	803.9922	803.8675	0.57547224	26.311508	5	0.28953642	5	3	12	20	ELDTAQK	trypsin-full-digest	YGR192C	KH	
+126	2	745.2600	1488.5044	1489.7319	0	573.63257	1	3.4199548	1	14	24	5	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+126	2	745.2600	1488.5044	1486.6195	0.79367924	34.449203	4	0.70560771	2	5	26	5	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+126	2	745.2600	1488.5044	1488.7063	0.84733301	35.298698	3	0.52211416	3	4	24	5	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+126	2	745.2600	1488.5044	1485.6539	0.94492072	53.523678	2	0.18836875	4	5	22	5	QEAIYEVYITEK	trypsin-full-digest	YLR371W	RN	
+126	2	745.2600	1488.5044	1490.6510	0.97745997	6.6915894	5	0.077085875	5	2	24	5	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+127	2	474.7400	947.4644	947.0990	0	49.968937	1	0.57516605	1	4	14	8	LTWLADTK	trypsin-full-digest	YGL245W	KD	
+127	2	474.7400	947.4644	949.1149	0.36377129	24.094387	5	0.36593714	2	4	14	8	IFENVSIK	trypsin-full-digest	YDR205W	KA	
+127	2	474.7400	947.4644	945.0836	0.50043005	19.564295	6	0.28733566	3	3	14	8	LQTIIDSR	trypsin-full-digest	YMR309C	RG	
+127	2	474.7400	947.4644	945.0836	0.73157567	26.662403	4	0.15438858	4	4	20	8	LLGSGAGGSVK	trypsin-full-digest	YOR267C	KV	
+127	2	474.7400	947.4644	950.1027	0.78049624	49.048164	2	0.12625112	5	5	14	8	SFLESVIR	trypsin-full-digest	YBR009C	KD	
+128	1	711.0700	710.0622	709.8869	0	12.085135	3	0.16219591	1	2	10	9	SIHILK	trypsin-full-digest	YMR242C	RV	
+128	1	711.0700	710.0622	710.7880	0.71393204	8.2783346	4	0.046399057	2	2	12	9	HIDAGAK	trypsin-full-digest	YGR192C	KK	
+128	1	711.0700	710.0622	710.8309	0.72429669	23.710316	1	0.044717953	3	3	10	9	AFAQFK	trypsin-full-digest	YJR069C	KE	
+128	1	711.0700	710.0622	712.8472	0.97089922	19.031324	2	0.0047200308	4	3	12	9	TPGGILR	trypsin-full-digest	YER056C-A	KA	
+128	1	711.0700	710.0622	708.8125	1.0198404	2.5368099	6	-0.0032180157	5	1	10	9	FSLQSK	trypsin-full-digest	YMR145C	RS	
+129	2	523.2900	1044.5643	1045.1577	0	46.084091	1	0.65602416	1	4	16	6	ELEELTGVR	trypsin-full-digest	YBL076C	KN	
+129	2	523.2900	1044.5643	1044.1908	0.96237737	15.760937	4	0.024681358	2	3	16	6	QTHSMAELK	trypsin-full-digest	YOR267C	KR	
+129	2	523.2900	1044.5643	1045.2443	1.032151	5.7093325	5	-0.021091802	3	2	18	6	LNITGTVLSK	trypsin-full-digest	YOR168W	RR	
+129	2	523.2900	1044.5643	1047.2213	1.041258	3.3512132	6	-0.027066199	4	1	12	6	YWYFLQK	trypsin-full-digest	YMR242C	RL	
+129	2	523.2900	1044.5643	1046.2346	1.1082737	16.434448	3	-0.071030214	5	3	16	6	YKPGEAILR	trypsin-full-digest	YOR168W	KM	
+130	2	733.0300	1464.0444	1462.7675	0	1393.9764	1	3.6638756	1	19	24	3	NEVSAMPTLLLFK	trypsin-full-digest	YLR043C	KN	
+130	2	733.0300	1464.0444	1463.5709	0.95259821	6.5836983	3	0.17367421	2	3	24	3	TCVVETPTLNSDK	trypsin-full-digest	YBR115C	RS	
+130	2	733.0300	1464.0444	1466.6692	0.96637368	7.5720978	2	0.12320261	3	2	22	3	DFMVEQELLNTK	trypsin-full-digest	YFR053C	KD	
+131	2	745.8500	1489.6843	1489.7319	0	2819.5974	1	5.3028259	1	21	24	3	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+131	2	745.8500	1489.6843	1488.7063	0.8833434	85.206764	2	0.61860967	2	5	24	3	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+131	2	745.8500	1489.6843	1490.6510	0.90654737	26.993124	3	0.49556294	3	3	24	3	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+132	2	474.7400	947.4644	945.0836	0	54.108074	1	0.59248811	1	4	14	8	LQTIIDSR	trypsin-full-digest	YMR309C	RG	
+132	2	474.7400	947.4644	947.0990	0.13254599	25.854864	6	0.51395619	2	3	14	8	LTWLADTK	trypsin-full-digest	YGL245W	KD	
+132	2	474.7400	947.4644	950.1027	0.17679264	34.256989	3	0.48774058	3	4	14	8	SFLESVIR	trypsin-full-digest	YBR009C	KD	
+132	2	474.7400	947.4644	949.0466	0.2716538	48.32312	2	0.43153647	4	4	14	8	MSQQDNVK	trypsin-full-digest	YDR037W	-A	
+132	2	474.7400	947.4644	946.0281	0.31869599	26.415321	5	0.40366453	5	4	16	8	LSVATADNR	trypsin-full-digest	YLR249W	KH	
+133	2	483.1200	964.2244	965.1637	0	66.851875	1	0.60504568	1	6	14	9	VLVHTQIR	trypsin-full-digest	YOR063W	RK	
+133	2	483.1200	964.2244	962.1136	0.27866718	28.080624	3	0.43643931	2	4	14	9	LALIDDFR	trypsin-full-digest	YGL022W	KE	
+133	2	483.1200	964.2244	962.1570	0.71846265	42.350151	2	0.17034295	3	5	14	9	LFTLEAIR	trypsin-full-digest	YOR168W	RR	
+133	2	483.1200	964.2244	967.0465	0.89122903	6.9606466	4	0.065811396	4	2	16	9	GADSVIYSR	trypsin-full-digest	YDR093W	KL	
+133	2	483.1200	964.2244	966.0991	1.1542394	4.0717926	6	-0.093321867	5	2	14	9	DLTEFLTK	trypsin-full-digest	YGR157W	KV	
+134	2	457.5500	913.0844	914.1131	0	103.68198	1	1.1871964	1	7	16	11	QTVAVGVIK	trypsin-full-digest	YBR118W	RS	
+134	2	457.5500	913.0844	915.0573	0.51189619	31.804583	4	0.5794751	2	4	16	11	QGQAAIISK	trypsin-full-digest	YLR371W	KT	
+134	2	457.5500	913.0844	914.1532	0.54558873	37.778015	3	0.53947538	3	4	14	11	SIILLIDK	trypsin-full-digest	YLR371W	KK	
+134	2	457.5500	913.0844	914.0292	0.57700694	22.956854	5	0.50217581	4	3	14	11	QNNIAVQK	trypsin-full-digest	YMR309C	KR	
+134	2	457.5500	913.0844	914.0289	0.78891629	38.178898	2	0.2505978	5	4	14	11	AFHVTPDK	trypsin-full-digest	YLR058C	KW	
+135	2	1004.9900	2007.9644	2006.3051	0	933.36005	1	4.2101994	1	19	34	3	SGVGICATCVLRPDLLFK	trypsin-full-digest	YEL027W	KN	
+135	2	1004.9900	2007.9644	2009.1975	1.0327803	34.554996	2	-0.13801165	2	5	38	3	YDSPVSSPITSASELGSIAK	trypsin-full-digest	YNL166C	KL	
+135	2	1004.9900	2007.9644	2005.2764	1.0644609	3.5093601	3	-0.27139318	3	2	34	3	IPDIENSVNMVPVDHVAR	trypsin-full-digest	YBR115C	KV	
+136	1	717.0700	716.0622	716.7893	0	33.504017	6	0.72184199	1	4	12	16	EAAELGK	trypsin-full-digest	YBR118W	KG	
+136	1	717.0700	716.0622	714.7765	0.10004064	114.26469	1	0.64962846	2	6	12	16	SGPTPTR	trypsin-full-digest	YDL223C	KS	
+136	1	717.0700	716.0622	717.8204	0.1884166	23.559481	8	0.58583498	3	3	10	16	SLEITR	trypsin-full-digest	YLR371W	KD	
+136	1	717.0700	716.0622	718.7643	0.38262898	39.344013	5	0.44564432	4	4	10	16	GAEWEK	trypsin-full-digest	YGL009C	KA	
+136	1	717.0700	716.0622	713.7887	0.49265304	44.671604	4	0.36622435	5	4	12	16	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+137	3	497.2900	1488.8466	1489.7319	0	1202.3578	1	3.5980604	1	22	48	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+137	3	497.2900	1488.8466	1488.7063	0.81239575	238.33492	2	0.67501152	2	13	48	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+137	3	497.2900	1488.8466	1490.6510	0.91495377	106.84063	3	0.30600145	3	10	48	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+137	3	497.2900	1488.8466	1486.6195	0.96376705	104.79422	4	0.13036823	4	9	52	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+138	1	719.0600	718.0522	716.8506	0	52.676434	1	0.83089995	1	4	12	13	DVMPAGK	trypsin-full-digest	YBR115C	KG	
+138	1	719.0600	718.0522	717.8204	0.24423222	27.570053	4	0.62796742	2	3	10	13	SLEITR	trypsin-full-digest	YLR371W	KD	
+138	1	719.0600	718.0522	718.8077	0.44881228	42.191254	2	0.45798185	3	3	10	13	FDNVPK	trypsin-full-digest	YGL009C	KR	
+138	1	719.0600	718.0522	717.8817	0.54288805	30.408899	3	0.37981433	4	3	10	13	QSKPMK	trypsin-full-digest	YDR093W	RD	
+138	1	719.0600	718.0522	718.7643	0.58580309	26.714539	5	0.34415618	5	2	10	13	GAEWEK	trypsin-full-digest	YGL009C	KA	
+139	3	1032.0900	3093.2463	3095.2366	0	1460.1478	1	3.9592109	1	39	108	3	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+139	3	1032.0900	3093.2463	3095.4709	0.89455146	39.019924	2	0.41749313	2	11	112	3	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+139	3	1032.0900	3093.2463	3090.7644	1.1534919	13.67534	3	-0.60770655	3	6	112	3	NIVPVIMAGIIAIYGLVVSVLVCYSLGQK	trypsin-full-digest	YEL027W	KQ	
+140	1	717.0600	716.0522	716.7893	0	31.130041	3	0.59465551	1	4	12	16	EAAELGK	trypsin-full-digest	YBR118W	KG	
+140	1	717.0600	716.0522	716.7460	0.0037337129	23.396549	6	0.59243524	2	3	10	16	KPDDDK	trypsin-full-digest	YKL145W	KI	
+140	1	717.0600	716.0522	714.7765	0.42896518	40.463547	2	0.339569	3	4	12	16	SGPTPTR	trypsin-full-digest	YDL223C	KS	
+140	1	717.0600	716.0522	718.8077	0.43547797	48.258392	1	0.33569613	4	4	10	16	FDNVPK	trypsin-full-digest	YGL009C	KR	
+140	1	717.0600	716.0522	717.8817	0.44567406	29.726236	4	0.32963297	5	3	10	16	QSKPMK	trypsin-full-digest	YDR093W	RD	
+141	3	497.2900	1488.8466	1489.7319	0	1504.3676	1	4.4072876	1	24	48	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+141	3	497.2900	1488.8466	1486.6195	0.81095272	174.72479	3	0.83318573	2	12	52	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+141	3	497.2900	1488.8466	1488.7063	0.8131507	369.57693	2	0.82349861	3	15	48	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+141	3	497.2900	1488.8466	1490.6510	0.96138328	67.817703	4	0.17019501	4	8	48	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+142	1	715.0700	714.0622	716.7893	0	72.108284	1	0.72181535	1	5	12	12	EAAELGK	trypsin-full-digest	YBR118W	KG	
+142	1	715.0700	714.0622	713.7887	0.55028677	11.598034	6	0.32460991	2	2	12	12	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+142	1	715.0700	714.0622	714.7765	0.71276796	21.419298	3	0.20732848	3	3	12	12	SGPTPTR	trypsin-full-digest	YDL223C	KS	
+142	1	715.0700	714.0622	716.8506	0.7541483	8.9955482	8	0.17745954	4	2	12	12	DVMPAGK	trypsin-full-digest	YBR115C	KG	
+142	1	715.0700	714.0622	715.9341	0.7584759	12.551558	4	0.17433582	5	2	10	12	LLPFVK	trypsin-full-digest	YLR340W	KG	
+143	2	452.8500	903.6844	906.0465	0	200.59422	1	0.94311553	1	8	14	20	FDIGDLVK	trypsin-full-digest	YLR298C	RA	
+143	2	452.8500	903.6844	905.0214	0.28600335	74.133629	3	0.67338133	2	5	12	20	HHEELLK	trypsin-full-digest	YOR267C	RE	
+143	2	452.8500	903.6844	904.0949	0.36352864	52.860504	6	0.60026604	3	5	14	20	HAFMGTLK	trypsin-full-digest	YOR063W	KK	
+143	2	452.8500	903.6844	904.0338	0.41108957	83.931282	2	0.55541056	4	6	14	20	VSHTVSFK	trypsin-full-digest	YOR168W	KS	
+143	2	452.8500	903.6844	904.9293	0.41509125	34.957909	12	0.55163652	5	4	14	20	EQPESTSK	trypsin-full-digest	YDL223C	KN	
+144	3	497.2900	1488.8466	1489.7319	0	1053.226	1	3.5541759	1	21	48	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+144	3	497.2900	1488.8466	1488.7063	0.86864299	272.68655	2	0.46686584	2	13	48	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
+144	3	497.2900	1488.8466	1486.6195	1.0075978	137.61798	3	-0.027004087	3	11	52	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+144	3	497.2900	1488.8466	1490.6510	1.0094203	64.820557	4	-0.033481151	4	7	48	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+145	1	717.0600	716.0522	714.7765	0	58.588223	1	0.90983647	1	5	12	16	SGPTPTR	trypsin-full-digest	YDL223C	KS	
+145	1	717.0600	716.0522	715.9341	0.44376087	41.323978	3	0.50608665	2	4	10	16	LLPFVK	trypsin-full-digest	YLR340W	KG	
+145	1	717.0600	716.0522	716.7893	0.48714566	22.007057	7	0.46661359	3	3	12	16	EAAELGK	trypsin-full-digest	YBR118W	KG	
+145	1	717.0600	716.0522	713.7887	0.49324587	33.729961	4	0.46106339	4	4	12	16	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+145	1	717.0600	716.0522	717.8204	0.53495586	9.8458958	9	0.42311412	5	2	10	16	SLEITR	trypsin-full-digest	YLR371W	KD	
+146	2	692.6800	1383.3444	1382.4467	0	2011.0013	1	3.8734953	1	19	24	5	TASEFDSAIAQDK	trypsin-full-digest	YLR043C	KL	
+146	2	692.6800	1383.3444	1381.6099	0.68104291	337.00198	2	1.2354789	2	10	22	5	LAMFLTDSNTIR	trypsin-full-digest	YDR037W	RE	
+146	2	692.6800	1383.3444	1381.5258	0.88333881	9.5191793	3	0.45188648	3	2	22	5	MSESNAHFSFPK	trypsin-full-digest	YBL076C	-E	
+146	2	692.6800	1383.3444	1380.6042	1.0289	3.3277209	5	-0.11194392	4	1	22	5	EVVELPLLSPER	trypsin-full-digest	YKL145W	RF	
+146	2	692.6800	1383.3444	1383.6108	1.1577057	7.8270969	4	-0.61087209	5	2	26	5	NVIVSGIVLAADGR	trypsin-full-digest	YBL076C	KK	
+147	2	614.5800	1227.1444	1227.4233	0	7.4682322	1	0.01874348	1	2	18	3	IEVLEQELVR	trypsin-full-digest	YGR086C	KA	
+147	2	614.5800	1227.1444	1224.3788	3.5171313	1.7642522	3	-0.0471798	2	1	18	3	LAFLENQDFK	trypsin-full-digest	YBR115C	RL	
+147	2	614.5800	1227.1444	1229.3525	6.4989333	4.1427054	2	-0.10306915	3	2	20	3	EILGTDEPTVR	trypsin-full-digest	YKL127W	KT	
+148	1	713.0700	712.0622	713.7887	0	24.496252	4	0.33537182	1	3	12	9	NPAVGEK	trypsin-full-digest	YGL245W	KK	
+148	1	713.0700	712.0622	713.7881	0.33931932	46.403988	3	0.22157368	2	4	12	9	TLYGFGG	trypsin-full-digest	YBR009C	R-	
+148	1	713.0700	712.0622	710.7880	0.54243892	48.601635	2	0.1534531	3	4	12	9	HIDAGAK	trypsin-full-digest	YGR192C	KK	
+148	1	713.0700	712.0622	712.8472	0.59844357	11.41906	5	0.1346707	4	3	12	9	TPGGILR	trypsin-full-digest	YER056C-A	KA	
+148	1	713.0700	712.0622	710.8309	0.78597832	59.82716	1	0.071776837	5	4	10	9	AFAQFK	trypsin-full-digest	YJR069C	KE	
+149	2	733.7700	1465.5244	1462.7675	0	1203.868	1	3.1824079	1	18	24	3	NEVSAMPTLLLFK	trypsin-full-digest	YLR043C	KN	
+149	2	733.7700	1465.5244	1466.6692	0.92764938	7.8815074	2	0.23024926	2	2	22	3	DFMVEQELLNTK	trypsin-full-digest	YFR053C	KD	
+149	2	733.7700	1465.5244	1463.5709	0.96620041	1.0003113	3	0.10756414	3	1	24	3	TCVVETPTLNSDK	trypsin-full-digest	YBR115C	RS	
+150	1	832.2400	831.2322	834.0013	0	12.4148	2	0.15348957	1	2	12	12	LSMSQLR	trypsin-full-digest	YOR267C	KS	
+150	1	832.2400	831.2322	832.9573	0.33006737	31.373159	1	0.10282768	2	2	12	12	NAPAWFK	trypsin-full-digest	YDR064W	RL	
+150	1	832.2400	831.2322	832.9578	0.37659156	10.274959	3	0.095686696	3	2	14	12	VAINGFGR	trypsin-full-digest	YGR192C	RI	
+150	1	832.2400	831.2322	830.9366	0.58833861	3.6209517	5	0.063185729	4	1	12	12	VTDVIER	trypsin-full-digest	YDR093W	KE	
+150	1	832.2400	831.2322	829.9922	1.1218611	2.9467273	6	-0.018704401	5	1	14	12	DIVSAVVK	trypsin-full-digest	YMR303C	KA	
+151	2	651.6200	1301.2244	1301.4161	0	1202.2273	1	4.0469213	1	17	22	10	LDVDELGDVAQK	trypsin-full-digest	YLR043C	KN	
+151	2	651.6200	1301.2244	1301.4192	0.77860552	43.713001	5	0.89596611	2	5	22	10	DALPSVTSEQVR	trypsin-full-digest	YBL076C	KE	
+151	2	651.6200	1301.2244	1301.4161	0.77958488	94.108009	3	0.89200252	3	6	22	10	ETAQDSPELLAK	trypsin-full-digest	YPL215W	KS	
+151	2	651.6200	1301.2244	1303.4968	0.78279489	228.81261	2	0.87901193	4	9	22	10	LAVCGIAAICQK	trypsin-full-digest	YFR053C	RR	
+151	2	651.6200	1301.2244	1300.4741	0.85280436	85.688034	4	0.59568912	5	6	20	10	ISEGIWPEEIK	trypsin-full-digest	YGL022W	RE	
+152	2	531.2200	1060.4243	1059.2889	0	26.479269	2	0.6205802	1	3	16	8	MNLQELLAK	trypsin-full-digest	YDR205W	-V	
+152	2	531.2200	1060.4243	1060.2126	0.056052148	86.054985	1	0.58579534	2	5	18	8	GTIEIVSDVK	trypsin-full-digest	YLR340W	RV	
+152	2	531.2200	1060.4243	1060.1289	0.84516138	11.819891	7	0.096089773	3	2	16	8	EISDAQEIR	trypsin-full-digest	YMR145C	KL	
+152	2	531.2200	1060.4243	1058.1594	0.8702845	24.158962	4	0.080498867	4	3	18	8	DQKPGTSGLR	trypsin-full-digest	YKL127W	KK	
+152	2	531.2200	1060.4243	1062.1960	1.003428	7.30264	8	-0.0021273475	5	2	16	8	FANWIANAR	trypsin-full-digest	YBL076C	RD	
+153	2	613.7900	1225.5643	1224.3788	0	5.6870127	2	0.16703272	1	2	18	4	LAFLENQDFK	trypsin-full-digest	YBR115C	RL	
+153	2	613.7900	1225.5643	1223.4375	1.2733541	7.349463	1	-0.045659065	2	2	20	4	LIDFGSAVVFR	trypsin-full-digest	YOR267C	KY	
+153	2	613.7900	1225.5643	1223.2670	2.1510031	2.7957928	4	-0.19225518	3	1	18	4	YYGGNEHIDR	trypsin-full-digest	YLR058C	RM	
+153	2	613.7900	1225.5643	1227.4233	2.5895705	4.6158304	3	-0.26551029	4	2	18	4	IEVLEQELVR	trypsin-full-digest	YGR086C	KA	
+154	1	717.0600	716.0522	716.8506	0	215.65358	1	0.59496731	1	6	12	16	DVMPAGK	trypsin-full-digest	YBR115C	KG	
+154	1	717.0600	716.0522	716.7460	0.072602049	154.65167	2	0.55177146	2	5	10	16	KPDDDK	trypsin-full-digest	YKL145W	KI	
+154	1	717.0600	716.0522	716.7893	0.41614333	80.299057	4	0.34737563	3	4	12	16	EAAELGK	trypsin-full-digest	YBR118W	KG	
+154	1	717.0600	716.0522	715.9341	0.48545897	47.664581	7	0.30613509	4	3	10	16	LLPFVK	trypsin-full-digest	YLR340W	KG	
+154	1	717.0600	716.0522	717.8817	0.5674172	68.329742	6	0.25737262	5	3	10	16	QSKPMK	trypsin-full-digest	YDR093W	RD	
+155	2	419.3200	836.6244	835.8872	0	69.90876	1	0.78055704	1	5	12	10	SDNVMDR	trypsin-full-digest	YBL076C	KW	
+155	2	419.3200	836.6244	835.9554	0.60037106	41.898266	2	0.31193319	2	4	14	10	IGDYAGIK	trypsin-full-digest	YMR303C	KW	
+155	2	419.3200	836.6244	834.8437	0.75223875	8.1968241	7	0.19339177	3	2	12	10	YDSTHGR	trypsin-full-digest	YGR192C	KY	
+155	2	419.3200	836.6244	839.0054	0.80877531	7.8815541	8	0.14926179	4	2	14	10	IAGLNPVR	trypsin-full-digest	YPL106C	RI	
+155	2	419.3200	836.6244	834.0013	0.8121413	29.737709	3	0.14663443	5	3	12	10	LSMSQLR	trypsin-full-digest	YOR267C	KS	
+156	3	1032.4399	3094.2964	3095.2366	0	1813.374	1	5.0189385	1	42	108	2	ELESAAYDHAEPVQPEDAPQDIANDELK	trypsin-full-digest	YGL009C	KD	
+156	3	1032.4399	3094.2964	3095.4709	0.96011585	39.488911	2	0.20017597	2	10	112	2	YPFEDGVTMAHGIVGSDPYLAPEVITSTK	trypsin-full-digest	YOR267C	RS	
+157	2	509.3200	1016.6244	1017.1068	0	158.00694	1	1.1119214	1	7	16	9	ITSGQELNR	trypsin-full-digest	YDL198C	KV	
+157	2	509.3200	1016.6244	1017.1035	0.43675607	28.964193	3	0.62628299	2	3	16	9	VSSAEYYAK	trypsin-full-digest	YIL133C	KK	
+157	2	509.3200	1016.6244	1018.1962	0.61605942	23.395197	4	0.42691177	3	3	16	9	MQSVIDLGR	trypsin-full-digest	YBL076C	RN	
+157	2	509.3200	1016.6244	1018.0887	0.80515426	42.167759	2	0.21665314	4	3	14	9	LEEIETER	trypsin-full-digest	YMR235C	KL	
+157	2	509.3200	1016.6244	1018.1529	0.98998845	10.166105	8	0.011132082	5	2	16	9	VALNGEEMR	trypsin-full-digest	YDR093W	KR	
+158	2	427.3800	852.7444	852.0445	0	280.23941	1	1.6478953	1	8	14	13	HASLILAK	trypsin-full-digest	YMR235C	KA	
+158	2	427.3800	852.7444	852.8194	0.72617084	44.829403	4	0.45124179	2	4	12	13	DSCTENK	trypsin-full-digest	YNL166C	KE	
+158	2	427.3800	852.7444	849.9823	0.72882479	92.955452	2	0.44686839	3	5	12	13	IADQYLK	trypsin-full-digest	YPL215W	RD	
+158	2	427.3800	852.7444	853.0293	0.75062484	38.825851	5	0.41094413	4	4	16	13	GPLATPIGK	trypsin-full-digest	YOR136W	KG	
+158	2	427.3800	852.7444	852.0011	0.82441694	10.621344	11	0.28934249	5	2	14	13	LPLNPNGK	trypsin-full-digest	YBR115C	KV	
+159	2	745.7500	1489.4844	1489.7319	0	1736.3658	1	4.2195272	1	18	24	4	NFLETVELQVGLK	trypsin-full-digest	YGL135W	RN	
+159	2	745.7500	1489.4844	1486.6195	0.81333941	176.23169	2	0.78761947	2	8	26	4	SPMPQNNTLGGENK	trypsin-full-digest	YNL166C	KL	
+159	2	745.7500	1489.4844	1490.6510	0.92798012	23.23929	4	0.30388993	3	3	24	4	ESVMEHNFGDVVK	trypsin-full-digest	YOR168W	KN	
+159	2	745.7500	1489.4844	1488.7063	0.95878029	29.159029	3	0.17392777	4	3	24	4	FHVSISNPEFLAK	trypsin-full-digest	YDR037W	KY	
diff --git a/doc/user/example-files/small-yeast.fasta b/doc/user/example-files/small-yeast.fasta
new file mode 100644
index 0000000..2d25ef0
--- /dev/null
+++ b/doc/user/example-files/small-yeast.fasta
@@ -0,0 +1,165 @@
+>YBL030C PET9 SGDID:S000000126, Chr II from 164000-163044, reverse complement, Verified ORF, "Major ADP/ATP carrier of the mitochondrial inner membrane, exchanges cytosolic ADP for mitochondrially synthesized ATP; required for viability in many common lab strains carrying a mutation in the polymorphic SAL1 gene"
+MSSNAQVKTPLPPAPAPKKESNFLIDFLMGGVSAAVAKTAASPIERVKLLIQNQDEMLKQGTLDRKYAGILDCFKRTATQEGVISFWRGNTANVIRYFPTQALNFAFKDKIKAMFGFKKEEGYAKWFAGNLASGGAAGALSLLFVYSLDYARTRLAADSKSSKKGGARQFNGLIDVYKKTLKSDGVAGLYRGFLPSVVGIVVYRGLYFGMYDSLKPLLLTGSLEGSFLASFLLGWVVTTGASTCSYPLDTVRRRMMMTSGQAVKYDGAFDCLRKIVAAEGVGSLFKGCGANILRGVAGAGVISMYDQLQMILFGKKFK
+
+>YBL076C ILS1 SGDID:S000000172, Chr II from 84259-81041, reverse complement, Verified ORF, "Cytoplasmic isoleucine-tRNA synthetase, target of the G1-specific inhibitor reveromycin A"
+MSESNAHFSFPKEEEKVLSLWDEIDAFHTSLELTKDKPEFSFFDGPPFATGTPHYGHILASTIKDIVPRYATMTGHHVERRFGWDTHGVPIEHIIDKKLGITGKDDVFKYGLENYNNECRSIVMTYASDWRKTIGRLGRWIDFDNDYKTMYPSFMESTWWAFKQLHEKGQVYRGFKVMPYSTGLTTPLSNFEAQQNYKDVNDPAVTIGFNVIGQEKTQLVAWTTTPWTLPSNLSLCVNADFEYVKIYDETRDRYFILLESLIKTLYKKPKNEKYKIVEKIKGSDLVGLKYEPLFPYFAEQFHETAFRVISDDYVTSDSGTGIVHNAPAFGEEDNAACLKNGVISEDSVLPNAIDDLGRFTKDVPDFEGVYVKDADKLIIKYLTNTGNLLLASQIRHSYPFCWRSDTPLLYRSVPAWFVRVKNIVPQMLDSVMKSHWVPNTIKEKRFANWIANARDWNVSRNRYWGTPIPLWVSDDFEEVVCVGSIKELEELT [...]
+
+>YBR009C HHF1 SGDID:S000000213, Chr II from 255682-255371, reverse complement, Verified ORF, "One of two identical histone H4 proteins (see also HHF2); core histone required for chromatin assembly and chromosome function; contributes to telomeric silencing; N-terminal domain involved in maintaining genomic integrity"
+MSGRGKGGKGLGKGGAKRHRKILRDNIQGITKPAIRRLARRGGVKRISGLIYEEVRAVLKSFLESVIRDSVTYTEHAKRKTVTSLDVVYALKRQGRTLYGFGG
+
+>YBR115C LYS2 SGDID:S000000319, Chr II from 473920-469742, reverse complement, Verified ORF, "Alpha aminoadipate reductase, catalyzes the reduction of alpha-aminoadipate to alpha-aminoadipate 6-semialdehyde, which is the fifth step in biosynthesis of lysine; activation requires posttranslational phosphopantetheinylation by Lys5p"
+MTNEKVWIEKLDNPTLSVLPHDFLRPQQEPYTKQATYSLQLPQLDVPHDSFSNKYAVALSVWAALIYRVTGDDDIVLYIANNKILRFNIQPTWSFNELYSTINNELNKLNSIEANFSFDELAEKIQSCQDLERTPQLFRLAFLENQDFKLDEFKHHLVDFALNLDTSNNAHVLNLIYNSLLYSNERVTIVADQFTQYLTAALSDPSNCITKISLITASSKDSLPDPTKNLGWCDFVGCIHDIFQDNAEAFPERTCVVETPTLNSDKSRSFTYRDINRTSNIVAHYLIKTGIKRGDVVMIYSSRGVDLMVCVMGVLKAGATFSVIDPAYPPARQTIYLGVAKPRGLIVIRAAGQLDQLVEDYINDELEIVSRINSIAIQENGTIEGGKLDNGEDVLAPYDHYKDTRTGVVVGPDSNPTLSFTSGSEGIPKGVLGRHFSLAYYFNWMSKRFNLTENDKFTMLSGIAHDPIQRDMFTPLFLGAQLYVPTQDDIGT [...]
+
+>YBR118W TEF2 SGDID:S000000322, Chr II from 477665-479041, Verified ORF, "Translational elongation factor EF-1 alpha; also encoded by TEF1; functions in the binding reaction of aminoacyl-tRNA (AA-tRNA) to ribosomes"
+MGKEKSHINVVVIGHVDSGKSTTTGHLIYKCGGIDKRTIEKFEKEAAELGKGSFKYAWVLDKLKAERERGITIDIALWKFETPKYQVTVIDAPGHRDFIKNMITGTSQADCAILIIAGGVGEFEAGISKDGQTREHALLAFTLGVRQLIVAVNKMDSVKWDESRFQEIVKETSNFIKKVGYNPKTVPFVPISGWNGDNMIEATTNAPWYKGWEKETKAGVVKGKTLLEAIDAIEQPSRPTDKPLRLPLQDVYKIGGIGTVPVGRVETGVIKPGMVVTFAPAGVTTEVKSVEMHHEQLEQGVPGDNVGFNVKNVSVKEIRRGNVCGDAKNDPPKGCASFNATVIVLNHPGQISAGYSPVLDCHTAHIACRFDELLEKNDRRSGKKLEDHPKFLKSGDAALVKFVPSKPMCVEAFSEYPPLGRFAVRDMRQTVAVGVIKSVDKTEKAAKVTKAAQKAAKK
+
+>YCR012W PGK1 SGDID:S000000605, Chr III from 137744-138994, Verified ORF, "3-phosphoglycerate kinase, catalyzes transfer of high-energy phosphoryl groups from the acyl phosphate of 1,3-bisphosphoglycerate to ADP to produce ATP; key enzyme in glycolysis and gluconeogenesis"
+MSLSSKLSVQDLDLKDKRVFIRVDFNVPLDGKKITSNQRIVAALPTIKYVLEHHPRYVVLASHLGRPNGERNEKYSLAPVAKELQSLLGKDVTFLNDCVGPEVEAAVKASAPGSVILLENLRYHIEEEGSRKVDGQKVKASKEDVQKFRHELSSLADVYINDAFGTAHRAHSSMVGFDLPQRAAGFLLEKELKYFGKALENPTRPFLAILGGAKVADKIQLIDNLLDKVDSIIIGGGMAFTFKKVLENTEIGDSIFDKAGAEIVPKLMEKAKAKGVEVVLPVDFIIADAFSADANTKTVTDKEGIPAGWQGLDNGPESRKLFAATVAKAKTIVWNGPPGVFEFEKFAAGTKALLDEVVKSSAAGNTVIIGGGDTATVAKKYGVTDKISHVSTGGGASLELLEGKELPGVAFLSEKK
+
+>YCR034W FEN1 SGDID:S000000630, Chr III from 190588-191631, Verified ORF, "Fatty acid elongase, involved in sphingolipid biosynthesis; acts on fatty acids of up to 24 carbons in length; mutations have regulatory effects on 1,3-beta-glucan synthase, vacuolar ATPase, and the secretory pathway"
+MNSLVTQYAAPLFERYPQLHDYLPTLERPFFNISLWEHFDDVVTRVTNGRFVPSEFQFIAGELPLSTLPPVLYAITAYYVIIFGGRFLLSKSKPFKLNGLFQLHNLVLTSLSLTLLLLMVEQLVPIIVQHGLYFAICNIGAWTQPLVTLYYMNYIVKFIEFIDTFFLVLKHKKLTFLHTYHHGATALLCYTQLMGTTSISWVPISLNLGVHVVMYWYYFLAARGIRVWWKEWVTRFQIIQFVLDIGFIYFAVYQKAVHLYFPILPHCGDCVGSTTATFAGCAIISSYLVLFISFYINVYKRKGTKTSRVVKRAHGGVAAKVNEYVNVDLKNVPTPSPSPKPQHRRKR
+
+>YDL198C GGC1 SGDID:S000002357, Chr IV from 104552-103650, reverse complement, Verified ORF, "Mitochondrial GTP/GDP transporter, essential for mitochondrial genome maintenance; has a role in mitochondrial iron transport; member of the mitochondrial carrier family"
+MPHTDKKQSGLARLLGSASAGIMEIAVFHPVDTISKRLMSNHTKITSGQELNRVIFRDHFSEPLGKRLFTLFPGLGYAASYKVLQRVYKYGGQPFANEFLNKHYKKDFDNLFGEKTGKAMRSAAAGSLIGIGEIVLLPLDVLKIKRQTNPESFKGRGFIKILRDEGLFNLYRGWGWTAARNAPGSFALFGGNAFAKEYILGLKDYSQATWSQNFISSIVGACSSLIVSAPLDVIKTRIQNRNFDNPESGLRIVKNTLKNEGVTAFFKGLTPKLLTTGPKLVFSFALAQSLIPRFDNLLSK
+
+>YDL223C HBT1 SGDID:S000002382, Chr IV from 60406-57266, reverse complement, Verified ORF, "Substrate of the Hub1p ubiquitin-like protein that localizes to the shmoo tip (mating projection); mutants are defective for mating projection formation, thereby implicating Hbt1p in polarized cell morphogenesis"
+MNMNESISKDGQGEEEQNNFSFGGKPGSYDSNSDSAQRKKSFSTTKPTEYNLPKEQPESTSKNLETKAKNILLPWRKKHNKDSETPHEDTEADANRRANVTSDVNPVSADTKSSSGPNATITTHGYSYVKTTTPAATSEQSKVKTSPPTSHEHSNIKASPTAHRHSKGDAGHPSIATTHNHSTSKAATSPVTHTHGHSSATTSPVTHTHGHASVKTTSPTNTHEHSKANTGPSATATTHGHINVKTTHPVSHGHSGSSTGPKSTAAAQDHSSTKTNPSVTHGHTSVKDNSSATKGYSNTDSNSDRDVIPGSFRGMTGTDVNPVDPSVYTSTGPKSNVSSGMNAVDPSVYTDTSSKSADRRKYSGNTATGPPQDTIKEIAQNVKMDESEQTGLKNDQVSGSDAIQQQTMEPEPKAAVGTSGFVSQQPSYHDSNKNIQHPEKNKVDNKNISERAAEKFNIERDDILESADDYQQKNIKSKTDSNWGPIEYSSSA [...]
+
+>YDR037W KRS1 SGDID:S000002444, Chr IV from 525437-527212, Verified ORF, "Lysyl-tRNA synthetase; also identified as a negative regulator of general control of amino acid biosynthesis "
+MSQQDNVKAAAEGVANLHLDEATGEMVSKSELKKRIKQRQVEAKKAAKKAAAQPKPASKKKTDLFADLDPSQYFETRSRQIQELRKTHEPNPYPHKFHVSISNPEFLAKYAHLKKGETLPEEKVSIAGRIHAKRESGSKLKFYVLHGDGVEVQLMSQLQDYCDPDSYEKDHDLLKRGDIVGVEGYVGRTQPKKGGEGEVSVFVSRVQLLTPCLHMLPADHFGFKDQETRYRKRYLDLIMNKDARNRFITRSEIIRYIRRFLDQRKFIEVETPMMNVIAGGATAKPFITHHNDLDMDMYMRIAPELFLKQLVVGGLDRVYEIGRQFRNEGIDMTHNPEFTTCEFYQAYADVYDLMDMTELMFSEMVKEITGSYIIKYHPDPADPAKELELNFSRPWKRINMIEELEKVFNVKFPSGDQLHTAETGEFLKKILVDNKLECPPPLTNARMLDKLVGELEDTCINPTFIFGHPQMMSPLAKYSRDQPGLCERFEVF [...]
+
+>YDR064W RPS13 SGDID:S000002471, Chr IV from 579456-579476,580016-580450, Verified ORF, "Protein component of the small (40S) ribosomal subunit; has similarity to E. coli S15 and rat S13 ribosomal proteins"
+MGRMHSAGKGISSSAIPYSRNAPAWFKLSSESVIEQIVKYARKGLTPSQIGVLLRDAHGVTQARVITGNKIMRILKSNGLAPEIPEDLYYLIKKAVSVRKHLERNRKDKDAKFRLILIESRIHRLARYYRTVAVLPPNWKYESATASALVN
+
+>YDR093W DNF2 SGDID:S000002500, Chr IV from 631279-636117, Verified ORF, "Aminophospholipid translocase (flippase) that localizes primarily to the plasma membrane; contributes to endocytosis, protein transport and cell polarity; type 4 P-type ATPase"
+MSSPSKPTSPFVDDIEHESGSASNGLSSMSPFDDSFQFEKPSSAHGNIEVAKTGGSVLKRQSKPMKDISTPDLSKVTFDGIDDYSNDNDINDDDELNGKKTEIHEHENEVDDDLHSFQATPMPNTGGFEDVELDNNEGSNNDSQADHKLKRVRFGTRRNKSGRIDINRSKTLKWAKKNFHNAIDEFSTKEDSLENSALQNRSDELRTVYYNLPLPEDMLDEDGLPLAVYPRNKIRTTKYTPLTFFPKNILFQFHNFANIYFLILLILGAFQIFGVTNPGFASVPLIVIVIITAIKDGIEDSRRTVLDLEVNNTRTHILSGVKNENVAVDNVSLWRRFKKANTRALIKIFEYFSENLTAAGREKKLQKKREELRRKRNSRSFGPRGSLDSIGSYRMSADFGRPSLDYENLNQTMSQANRYNDGENLVDRTLQPNPECRFAKDYWKNVKVGDIVRVHNNDEIPADMILLSTSDVDGACYVETKNLDGETNLKVR [...]
+
+>YDR205W MSC2 SGDID:S000002613, Chr IV from 859343-861517, Verified ORF, "Member of the cation diffusion facilitator family, localizes to the endoplasmic reticulum and nucleus; mutations affect the cellular distribution of zinc and also confer defects in meiotic recombination between homologous chromatids"
+MNLQELLAKVPLLLSYPTIILSSNLIVPSHNDLISRAASTSAAEYADEKLIFFSTDHAIRLIFLPTFVASSFNLFAHYFNFINYSSRRKYYVLFTAIYFLSILTAIFHPIQSTCITLLIIKLLTTADESSPKIALNFKTILKTFVPFITLTLVILRWDPSFDASSGDVNKISTSLAAYALLILTLRYASPLILSTLSSSIGVVSKDTSVAQHSISRNKRFPLILVLPIFSFVLLYLMTIVNKTYNIQLLMVFVFFGCLSIFFLSLKDLFTEDGNQKKGGQEDEYCRMFDIKYMISYLWLTRFTILLTGIMAIVVHFLSFNEITSSIKTDLLSLLFVVVAEYVSSFSNKQPDSHSHNHAHHHSHLTDSLPLENESMFKQMALNKDTRSIFSFLLLNTAFMFVQLLYSFRSKSLGLLSDSLHMALDCTSLLLGLIAGVLTKKPASDKFPFGLNYLGTLAGFTNGVLLLGIVCGIFVEAIERIFNPIHLHATNEL [...]
+
+>YDR399W HPT1 SGDID:S000002807, Chr IV from 1270060-1270725, Verified ORF, "Dimeric hypoxanthine-guanine phosphoribosyltransferase, catalyzes the formation of both inosine monophosphate and guanosine monophosphate; mutations in the human homolog HPRT1 can cause Lesch-Nyhan syndrome and Kelley-Seegmiller syndrome"
+MSANDKQYISYNNVHQLCQVSAERIKNFKPDLIIAIGGGGFIPARILRTFLKEPGVPTIRIFAIILSLYEDLNSVGSEVEEVGVKVSRTQWIDYEQCKLDLVGKNVLIVDEVDDTRTTLHYALSELEKDAAEQAKAKGIDTEKSPEMKTNFGIFVLHDKQKPKKADLPAEMLNDKNRYFAAKTVPDKWYAYPWESTDIVFHTRMAIEQGNDIFIPEQEHKQ
+
+>YEL027W CUP5 SGDID:S000000753, Chr V from 100769-101251, Verified ORF, "Proteolipid subunit of the vacuolar H(+)-ATPase V0 sector (subunit c; dicyclohexylcarbodiimide binding subunit); required for vacuolar acidification and important for copper and iron metal ion homeostasis"
+MTELCPVYAPFFGAIGCASAIIFTSLGAAYGTAKSGVGICATCVLRPDLLFKNIVPVIMAGIIAIYGLVVSVLVCYSLGQKQALYTGFIQLGAGLSVGLSGLAAGFAIGIVGDAGVRGSSQQPRLFVGMILILIFAEVLGLYGLIVALLLNSRATQDVVC
+
+>YER056C-A RPL34A SGDID:S000002135, Chr V from 270183-270147,269749-269421, reverse complement, Verified ORF, "Protein component of the large (60S) ribosomal subunit, nearly identical to Rpl34Bp and has similarity to rat L34 ribosomal protein"
+MAQRVTFRRRNPYNTRSNKIKVVKTPGGILRAQHVKKLATRPKCGDCGSALQGISTLRPRQYATVSKTHKTVSRAYGGSRCANCVKERIIRAFLIEEQKIVKKVVKEQTEAAKKSEKKAKK
+
+>YFR053C HXK1 SGDID:S000001949, Chr VI from 255036-253579, reverse complement, Verified ORF, "Hexokinase isoenzyme 1, a cytosolic protein that catalyzes phosphorylation of glucose during glucose metabolism; expression is highest during growth on non-glucose carbon sources; glucose-induced repression involves the hexokinase Hxk2p"
+MVHLGPKKPQARKGSMADVPKELMDEIHQLEDMFTVDSETLRKVVKHFIDELNKGLTKKGGNIPMIPGWVMEFPTGKESGNYLAIDLGGTNLRVVLVKLSGNHTFDTTQSKYKLPHDMRTTKHQEELWSFIADSLKDFMVEQELLNTKDTLPLGFTFSYPASQNKINEGILQRWTKGFDIPNVEGHDVVPLLQNEISKRELPIEIVALINDTVGTLIASYYTDPETKMGVIFGTGVNGAFYDVVSDIEKLEGKLADDIPSNSPMAINCEYGSFDNEHLVLPRTKYDVAVDEQSPRPGQQAFEKMTSGYYLGELLRLVLLELNEKGLMLKDQDLSKLKQPYIMDTSYPARIEDDPFENLEDTDDIFQKDFGVKTTLPERKLIRRLCELIGTRAARLAVCGIAAICQKRGYKTGHIAADGSVYNKYPGFKEAAAKGLRDIYGWTGDASKDPITIVPAEDGSGAGAAVIAALSEKRIAEGKSLGIIGA
+
+>YGL008C PMA1 SGDID:S000002976, Chr VII from 482671-479915, reverse complement, Verified ORF, "Plasma membrane H+-ATPase, pumps protons out of the cell; major regulator of cytoplasmic pH and plasma membrane potential; part of the P2 subgroup of cation-transporting ATPases"
+MTDTSSSSSSSSASSVSAHQPTQEKPAKTYDDAASESSDDDDIDALIEELQSNHGVDDEDSDNDGPVAAGEARPVPEEYLQTDPSYGLTSDEVLKRRKKYGLNQMADEKESLVVKFVMFFVGPIQFVMEAAAILAAGLSDWVDFGVICGLLMLNAGVGFVQEFQAGSIVDELKKTLANTAVVIRDGQLVEIPANEVVPGDILQLEDGTVIPTDGRIVTEDCFLQIDQSAITGESLAVDKHYGDQTFSSSTVKRGEGFMVVTATGDNTFVGRAAALVNKAAGGQGHFTEVLNGIGIILLVLVIATLLLVWTACFYRTNGIVRILRYTLGITIIGVPVGLPAVVTTTMAVGAAYLAKKQAIVQKLSAIESLAGVEILCSDKTGTLTKNKLSLHEPYTVEGVSPDDLMLTACLAASRKKKGLDAIDKAFLKSLKQYPKAKDALTKYKVLEFHPFDPVSKKVTAVVESPEGERIVCVKGAPLFVLKTVEEDHPIPE [...]
+>YGL009C LEU1 SGDID:S000002977, Chr VII from 478657-476318, reverse complement, Verified ORF, "Isopropylmalate isomerase, catalyzes the second step in the leucine biosynthesis pathway"
+MVYTPSKGPRTLYDKVFDAHVVHQDENGSFLLYIDRHLVHEVTSPQAFEGLENAGRKVRRVDCTLATVDHNIPTESRKNFKSLDTFIKQTDSRLQVKTLENNVKQFGVPYFGMSDARQGIVHTIGPEEGFTLPGTTVVCGDSHTSTHGAFGSLAFGIGTSEVEHVLATQTIIQAKSKNMRITVNGKLSPGITSKDLILYIIGLIGTAGGTGCVIEFAGEAIEALSMEARMSMCNMAIEAGARAGMIKPDETTFQYTKGRPLAPKGAEWEKAVAYWKTLKTDEGAKFDHEINIEAVDVIPTITWGTSPQDALPITGSVPDPKNVTDPIKKSGMERALAYMGLEPNTPLKSIKVDKVFIGSCTNGRIEDLRSAAAVVRGQKLASNIKLAMVVPGSGLVKKQAEAEGLDKIFQEAGFEWREAGCSICLGMNPDILDAYERCASTSNRNFEGRQGALSRTHLMSPAMAAAAGIAGHFVDIREFEYKDQDQSSPKVE [...]
+
+>YGL022W STT3 SGDID:S000002990, Chr VII from 452409-454565, Verified ORF, "Subunit of the oligosaccharyltransferase complex of the ER lumen, which catalyzes asparagine-linked glycosylation of newly synthesized proteins; forms a subcomplex with Ost3p and Ost4p and is directly involved in catalysis"
+MGSDRSCVLSVFQTILKLVIFVAIFGAAISSRLFAVIKFESIIHEFDPWFNYRATKYLVNNSFYKFLNWFDDRTWYPLGRVTGGTLYPGLMTTSAFIWHALRNWLGLPIDIRNVCVLFAPLFSGVTAWATYEFTKEIKDASAGLLAAGFIAIVPGYISRSVAGSYDNEAIAITLLMVTFMFWIKAQKTGSIMHATCAALFYFYMVSAWGGYVFITNLIPLHVFLLILMGRYSSKLYSAYTTWYAIGTVASMQIPFVGFLPIRSNDHMAALGVFGLIQIVAFGDFVKGQISTAKFKVIMMVSLFLILVLGVVGLSALTYMGLIAPWTGRFYSLWDTNYAKIHIPIIASVSEHQPVSWPAFFFDTHFLIWLFPAGVFLLFLDLKDEHVFVIAYSVLCSYFAGVMVRLMLTLTPVICVSAAVALSKIFDIYLDFKTSDRKYAIKPAALLAKLIVSGSFIFYLYLFVFHSTWVTRTAYSSPSVVLPSQTPDGKLAL [...]
+
+>YGL026C TRP5 SGDID:S000002994, Chr VII from 448540-446417, reverse complement, Verified ORF, "Tryptophan synthase involved in tryptophan biosynthesis, regulated by the general control system of amino acid biosynthesis"
+MSEQLRQTFANAKKENRNALVTFMTAGYPTVKDTVPILKGFQDGGVDIIELGMPFSDPIADGPTIQLSNTVALQNGVTLPQTLEMVSQARNEGVTVPIILMGYYNPILNYGEERFIQDAAKAGANGFIIVDLPPEEALKVRNYINDNGLSLIPLVAPSTTDERLELLSHIADSFVYVVSRMGTTGVQSSVASDLDELISRVRKYTKDTPLAVGFGVSTREHFQSVGSVADGVVIGSKIVTLCGDAPEGKRYDVAKEYVQGILNGAKHKVLSKDEFFAFQKESLKSANVKKEILDEFDENHKHPIRFGDFGGQYVPEALHACLRELEKGFDEAVADPTFWEDFKSLYSYIGRPSSLHKAERLTEHCQGAQIWLKREDLNHTGSHKINNALAQVLLAKRLGKKNVIAETGAGQHGVATATACAKFGLTCTVFMGAEDVRRQALNVFRMRILGAKVIAVTNGTKTLRDATSEAFRFWVTNLKTTYYVVGSAIGPH [...]
+
+>YGL135W RPL1B SGDID:S000003103, Chr VII from 254646-255299, Verified ORF, "N-terminally acetylated protein component of the large (60S) ribosomal subunit, nearly identical to Rpl1Ap and has similarity to E. coli L1 and rat L10a ribosomal proteins; rpl1a rpl1b double null mutation is lethal"
+MSKITSSQVREHVKELLKYSNETKKRNFLETVELQVGLKNYDPQRDKRFSGSLKLPNCPRPNMSICIFGDAFDVDRAKSCGVDAMSVDDLKKLNKNKKLIKKLSKKYNAFIASEVLIKQVPRLLGPQLSKAGKFPTPVSHNDDLYGKVTDVRSTIKFQLKKVLCLAVAVGNVEMEEDVLVNQILMSVNFFVSLLKKNWQNVGSLVVKSSMGPAFRLY
+
+>YGL245W GUS1 SGDID:S000003214, Chr VII from 39023-41149, Verified ORF, "Glutamyl-tRNA synthetase (GluRS), forms a complex with methionyl-tRNA synthetase (Mes1p) and Arc1p; complex formation increases the catalytic efficiency of both tRNA synthetases and ensures their correct localization to the cytoplasm"
+MPSTLTINGKAPIVAYAELIAARIVNALAPNSIAIKLVDDKKAPAAKLDDATEDVFNKITSKFAAIFDNGDKEQVAKWVNLAQKELVIKNFAKLSQSLETLDSQLNLRTFILGGLKYSAADVACWGALRSNGMCGSIIKNKVDVNVSRWYTLLEMDPIFGEAHDFLSKSLLELKKSANVGKKKETHKANFEIDLPDAKMGEVVTRFPPEPSGYLHIGHAKAALLNQYFAQAYKGKLIIRFDDTNPSKEKEEFQDSILEDLDLLGIKGDRITYSSDYFQEMYDYCVQMIKDGKAYCDDTPTEKMREERMDGVASARRDRSVEENLRIFTEEMKNGTEEGLKNCVRAKIDYKALNKTLRDPVIYRCNLTPHHRTGSTWKIYPTYDFCVPIVDAIEGVTHALRTIEYRDRNAQYDWMLQALRLRKVHIWDFARINFVRTLLSKRKLQWMVDKDLVGNWDDPRFPTVRGVRRRGMTVEGLRNFVLSQGPSRNVINL [...]
+
+>YGR086C PIL1 SGDID:S000003318, Chr VII from 650621-649602, reverse complement, Verified ORF, "Primary component of eisosomes, which are large immobile patch structures at the cell cortex associated with endocytosis, along with Lsp1p and Sur7p; null mutants show activation of Pkc1p/Ypk1p stress resistance pathways"
+MHRTYSLRNSRAPTASQLQNPPPPPSTTKGRFFGKGGLAYSFRRSAAGAFGPELSRKLSQLVKIEKNVLRSMELTANERRDAAKQLSIWGLENDDDVSDITDKLGVLIYEVSELDDQFIDRYDQYRLTLKSIRDIEGSVQPSRDRKDKITDKIAYLKYKDPQSPKIEVLEQELVRAEAESLVAEAQLSNITRSKLRAAFNYQFDSIIEHSEKIALIAGYGKALLELLDDSPVTPGETRPAYDGYEASKQIIIDAESALNEWTLDSAQVKPTLSFKQDYEDFEPEEGEEEEEEDGQGRWSEDEQEDGQIEEPEQEEEGAVEEHEQVGHQQSESLPQQTTA
+
+>YGR157W CHO2 SGDID:S000003389, Chr VII from 802445-805054, Verified ORF, "Phosphatidylethanolamine methyltransferase (PEMT), catalyzes the first step in the conversion of phosphatidylethanolamine to phosphatidylcholine during the methylation pathway of phosphatidylcholine biosynthesis"
+MSSCKTTLSEMVGSVTKDRGTINVEARTRSSNVTFKPPVTHDMVRSLFDPTLKKSLLEKCIALAIISNFFICYWVFQRFGLQFTKYFFLVQYLFWRIAYNLGIGLVLHYQSHYETLTNCAKTHAIFSKIPQNKDANSNFSTNSNSFSEKFWNFIRKFCQYEIRSKMPKEYDLFAYPEEINVWLIFRQFVDLILMQDFVTYIIYVYLSIPYSWVQIFNWRSLLGVILILFNIWVKLDAHRVVKDYAWYWGDFFFLEESELIFDGVFNISPHPMYSIGYLGYYGLSLICNDYKVLLVSVFGHYSQFLFLKYVENPHIERTYGDGTDSDSQMNSRIDDLISKENYDYSRPLINMGLSFNNFNKLRFTDYFTIGTVAALMLGTIMNARFINLNYLFITVFVTKLVSWLFISTILYKQSQSKWFTRLFLENGYTQVYSYEQWQFIYNYYLVLTYTLMIIHTGLQIWSNFSNINNSQLIFGLILVALQTWCDKETRLA [...]
+
+>YGR192C TDH3 SGDID:S000003424, Chr VII from 883815-882817, reverse complement, Verified ORF, "Glyceraldehyde-3-phosphate dehydrogenase, isozyme 3, involved in glycolysis and gluconeogenesis; tetramer that catalyzes the reaction of glyceraldehyde-3-phosphate to 1,3 bis-phosphoglycerate; detected in the cytoplasm and cell-wall "
+MVRVAINGFGRIGRLVMRIALSRPNVEVVALNDPFITNDYAAYMFKYDSTHGRYAGEVSHDDKHIIVDGKKIATYQERDPANLPWGSSNVDIAIDSTGVFKELDTAQKHIDAGAKKVVITAPSSTAPMFVMGVNEEKYTSDLKIVSNASCTTNCLAPLAKVINDAFGIEEGLMTTVHSLTATQKTVDGPSHKDWRGGRTASGNIIPSSTGAAKAVGKVLPELQGKLTGMAFRVPTVDVSVVDLTVKLNKETTYDEIKKVVKAAAEGKLKGVLGYTEDAVVSSDFLGDSHSSIFDASAGIQLSPKFVKLVSWYDNEYGYSTRVVDLVEHVAKA
+
+>YHR021C RPS27B SGDID:S000001063, Chr VIII from 148662-148660,148109-147864, reverse complement, Verified ORF, "Protein component of the small (40S) ribosomal subunit; nearly identical to Rps27Ap and has similarity to rat S27 ribosomal protein"
+MVLVQDLLHPTAASEARKHKLKTLVQGPRSYFLDVKCPGCLNITTVFSHAQTAVTCESCSTVLCTPTGGKAKLSEGTSFRRK
+
+>YHR183W GND1 SGDID:S000001226, Chr VIII from 470960-472429, Verified ORF, "6-phosphogluconate dehydrogenase (decarboxylating), catalyzes an NADPH regenerating reaction in the pentose phosphate pathway; required for growth on D-glucono-delta-lactone and adaptation to oxidative stress"
+MSADFGLIGLAVMGQNLILNAADHGFTVCAYNRTQSKVDHFLANEAKGKSIIGATSIEDFISKLKRPRKVMLLVKAGAPVDALINQIVPLLEKGDIIIDGGNSHFPDSNRRYEELKKKGILFVGSGVSGGEEGARYGPSLMPGGSEEAWPHIKNIFQSISAKSDGEPCCEWVGPAGAGHYVKMVHNGIEYGDMQLICEAYDIMKRLGGFTDKEISDVFAKWNNGVLDSFLVEITRDILKFDDVDGKPLVEKIMDTAGQKGTGKWTAINALDLGMPVTLIGEAVFARCLSALKNERIRASKVLPGPEVPKDAVKDREQFVDDLEQALYASKIISYAQGFMLIREAAATYGWKLNNPAIALMWRGGCIIRSVFLGQITKAYREEPDLENLLFNKFFADAVTKAQSGWRKSIALATTYGIPTPAFSTALSFYDGYRSERLPANLLQAQRDYFGAHTFRVLPECASDNLPVDKDIHINWTGHGGNVSSSTYQA
+
+>YIL133C RPL16A SGDID:S000001395, Chr IX from 99416-99386,99095-98527, reverse complement, Verified ORF, "N-terminally acetylated protein component of the large (60S) ribosomal subunit, binds to 5.8 S rRNA; has similarity to Rpl16Bp, E. coli L13 and rat L13a ribosomal proteins; transcriptionally regulated by Rap1p"
+MSVEPVVVIDGKGHLVGRLASVVAKQLLNGQKIVVVRAEELNISGEFFRNKLKYHDFLRKATAFNKTRGPFHFRAPSRIFYKALRGMVSHKTARGKAALERLKVFEGIPPPYDKKKRVVVPQALRVLRLKPGRKYTTLGKLSTSVGWKYEDVVAKLEAKRKVSSAEYYAKKRAFTKKVASANATAAESDVAKQLAALGY
+
+>YJR069C HAM1 SGDID:S000003830, Chr X from 569392-568799, reverse complement, Verified ORF, "Protein of unknown function that is involved in DNA repair; mutant is sensitive to the base analog, 6-N-hydroxylaminopurine, while gene disruption does not increase the rate of spontaneous mutagenesis"
+MSNNEIVFVTGNANKLKEVQSILTQEVDNNNKTIHLINEALDLEELQDTDLNAIALAKGKQAVAALGKGKPVFVEDTALRFDEFNGLPGAYIKWFLKSMGLEKIVKMLEPFENKNAEAVTTICFADSRGEYHFFQGITRGKIVPSRGPTTFGWDSIFEPFDSHGLTYAEMSKDAKNAISHRGKAFAQFKEYLYQNDF
+
+>YKL127W PGM1 SGDID:S000001610, Chr XI from 203185-204897, Verified ORF, "Phosphoglucomutase, minor isoform; catalyzes the conversion from glucose-1-phosphate to glucose-6-phosphate, which is a key step in hexose metabolism"
+MSLLIDSVPTVAYKDQKPGTSGLRKKTKVFMDEPHYTENFIQATMQSIPNGSEGTTLVVGGDGRFYNDVIMNKIAAVGAANGVRKLVIGQGGLLSTPAASHIIRTYEEKCTGGGIILTASHNPGGPENDLGIKYNLPNGGPAPESVTNAIWEASKKLTHYKIIKNFPKLNLNKLGKNQKYGPLLVDIIDPAKAYVQFLKEIFDFDLIKSFLAKQRKDKGWKLLFDSLNGITGPYGKAIFVDEFGLPAEEVLQNWHPLPDFGGLHPDPNLTYARTLVDRVDREKIAFGAASDGDGDRNMIYGYGPAFVSPGDSVAIIAEYAPEIPYFAKQGIYGLARSFPTSSAIDRVAAKKGLRCYEVPTGWKFFCALFDAKKLSICGEESFGTGSNHIREKDGLWAIIAWLNILAIYHRRNPEKEASIKTIQDEFWNEYGRTFFTRYDYEHIECEQAEKVVALLSEFVSRPNVCGSHFPADESLTVIDCGDFSYRDLDGSI [...]
+
+>YKL145W RPT1 SGDID:S000001628, Chr XI from 174218-175621, Verified ORF, "One of six ATPases of the 19S regulatory particle of the 26S proteasome involved in the degradation of ubiquitinated substrates; required for optimal CDC20 transcription; interacts with Rpn12p and the E3 ubiquitin-protein ligase Ubr1p"
+MPPKEDWEKYKAPLEDDDKKPDDDKIVPLTEGDIQVLKSYGAAPYAAKLKQTENDLKDIEARIKEKAGVKESDTGLAPSHLWDIMGDRQRLGEEHPLQVARCTKIIKGNGESDETTTDNNNSGNSNSNSNQQSTDADEDDEDAKYVINLKQIAKFVVGLGERVSPTDIEEGMRVGVDRSKYNIELPLPPRIDPSVTMMTVEEKPDVTYSDVGGCKDQIEKLREVVELPLLSPERFATLGIDPPKGILLYGPPGTGKTLCARAVANRTDATFIRVIGSELVQKYVGEGARMVRELFEMARTKKACIIFFDEIDAVGGARFDDGAGGDNEVQRTMLELITQLDGFDPRGNIKVMFATNRPNTLDPALLRPGRIDRKVEFSLPDLEGRANIFRIHSKSMSVERGIRWELISRLCPNSTGAELRSVCTEAGMFAIRARRKVATEKDFLKAVDKVISGYKKFSSTSRYMQYN
+>YKL145W-A YKL145W-A SGDID:S000028841, Chr XI from 174963-175055, Dubious ORF, "Dubious open reading frame, unlikely to encode a protein; completely overlaps the verified essential gene RPT1; identified by expression profiling and mass spectrometry"
+MGHLVLVRHYVLVLLLIELMQLLLGSLGLS
+
+>YLL024C SSA2 SGDID:S000003947, Chr XII from 97484-95565, reverse complement, Verified ORF, "ATP binding protein involved in protein folding and vacuolar import of proteins; member of heat shock protein 70 (HSP70) family; associated with the chaperonin-containing T-complex; present in the cytoplasm, vacuolar membrane and cell wall"
+MSKAVGIDLGTTYSCVAHFSNDRVDIIANDQGNRTTPSFVGFTDTERLIGDAAKNQAAMNPANTVFDAKRLIGRNFNDPEVQGDMKHFPFKLIDVDGKPQIQVEFKGETKNFTPEQISSMVLGKMKETAESYLGAKVNDAVVTVPAYFNDSQRQATKDAGTIAGLNVLRIINEPTAAAIAYGLDKKGKEEHVLIFDLGGGTFDVSLLSIEDGIFEVKATAGDTHLGGEDFDNRLVNHFIQEFKRKNKKDLSTNQRALRRLRTACERAKRTLSSSAQTSVEIDSLFEGIDFYTSITRARFEELCADLFRSTLDPVEKVLRDAKLDKSQVDEIVLVGGSTRIPKVQKLVTDYFNGKEPNRSINPDEAVAYGAAVQAAILTGDESSKTQDLLLLDVAPLSLGIETAGGVMTKLIPRNSTIPTKKSEVFSTYADNQPGVLIQVFEGERAKTKDNNLLGKFELSGIPPAPRGVPQIEVTFDVDSNGILNVSAVEKGT [...]
+
+>YLR043C TRX1 SGDID:S000004033, Chr XII from 232014-231703, reverse complement, Verified ORF, "Cytoplasmic thioredoxin isoenzyme of the thioredoxin system which protects cells against both oxidative and reductive stress, forms LMA1 complex with Pbi2p, acts as a cofactor for Tsa1p, required for ER-Golgi transport and vacuole inheritance"
+MVTQFKTASEFDSAIAQDKLVVVDFYATWCGPCKMIAPMIEKFSEQYPQADFYKLDVDELGDVAQKNEVSAMPTLLLFKNGKEVAKVVGANPAAIKQAIAANA
+
+>YLR058C SHM2 SGDID:S000004048, Chr XII from 259402-257993, reverse complement, Verified ORF, "Cytosolic serine hydroxymethyltransferase, involved in one-carbon metabolism"
+MPYTLSDAHHKLITSHLVDTDPEVDSIIKDEIERQKHSIDLIASENFTSTSVFDALGTPLSNKYSEGYPGARYYGGNEHIDRMEILCQQRALKAFHVTPDKWGVNVQTLSGSPANLQVYQAIMKPHERLMGLYLPDGGHLSHGYATENRKISAVSTYFESFPYRVNPETGIIDYDTLEKNAILYRPKVLVAGTSAYCRLIDYKRMREIADKCGAYLMVDMAHISGLIAAGVIPSPFEYADIVTTTTHKSLRGPRGAMIFFRRGVRSINPKTGKEVLYDLENPINFSVFPGHQGGPHNHTIAALATALKQAATPEFKEYQTQVLKNAKALESEFKNLGYRLVSNGTDSHMVLVSLREKGVDGARVEYICEKINIALNKNSIPGDKSALVPGGVRIGAPAMTTRGMGEEDFHRIVQYINKAVEFAQQVQQSLPKDACRLKDFKAKVDEGSDVLNTWKKEIYDWAGEYPLAV
+
+>YLR185W RPL37A SGDID:S000004175, Chr XII from 522665-522671,523031-523290, Verified ORF, "Protein component of the large (60S) ribosomal subunit, has similarity to Rpl37Bp and to rat L37 ribosomal protein"
+MGKGTPSFGKRHNKSHTLCNRCGRRSFHVQKKTCSSCGYPAAKTRSYNWGAKAKRRHTTGTGRMRYLKHVSRRFKNGFQTGSASKASA
+
+>YLR249W YEF3 SGDID:S000004239, Chr XII from 636782-639916, Verified ORF, "Translational elongation factor, stimulates the binding of aminoacyl-tRNA (AA-tRNA) to ribosomes by releasing EF-1 alpha from the ribosomal complex; contains two ABC cassettes; binds and hydrolyses ATP"
+MSDSQQSIKVLEELFQKLSVATADNRHEIASEVASFLNGNIIEHDVPEHFFGELAKGIKDKKTAANAMQAVAHIANQSNLSPSVEPYIVQLVPAICTNAGNKDKEIQSVASETLISIVNAVNPVAIKALLPHLTNAIVETNKWQEKIAILAAISAMVDAAKDQVALRMPELIPVLSETMWDTKKEVKAAATAAMTKATETVDNKDIERFIPSLIQCIADPTEVPETVHLLGATTFVAEVTPATLSIMVPLLSRGLNERETGIKRKSAVIIDNMCKLVEDPQVIAPFLGKLLPGLKSNFATIADPEAREVTLRALKTLRRVGNVGEDDAIPEVSHAGDVSTTLQVVNELLKDETVAPRFKIVVEYIAAIGADLIDERIIDQQAWFTHITPYMTIFLHEKKAKDILDEFRKRAVDNIPVGPNFDDEEDEGEDLCNCEFSLAYGAKILLNKTQLRLKRARRYGICGPNGCGKSTLMRAIANGQVDGFPTQEECRT [...]
+
+>YLR298C YHC1 SGDID:S000004289, Chr XII from 725418-724723, reverse complement, Verified ORF, "Component of the U1 snRNP complex required for pre-mRNA splicing; putative ortholog of human U1C protein, which is involved in formation of a complex between U1 snRNP and the pre-mRNA 5' splice site"
+MTRYYCEYCHSYLTHDTLSVRKSHLVGKNHLRITADYYRNKARDIINKHNHKRRHIGKRGRKERENSSQNETLKVTCLSNKEKRHIMHVKKMNQKELAQTSIDTLKLLYDGSPGYSKVFVDANRFDIGDLVKASKLPQRANEKSAHHSFKQTSRSRDETCESNPFPRLNNPKKLEPPKILSQWSNTIPKTSIFYSVDILQTTIKESKKRMHSDGIRKPSSANGYKRRRYGN
+
+>YLR340W RPP0 SGDID:S000004332, Chr XII from 805887-806825, Verified ORF, "Conserved ribosomal protein P0 similar to rat P0, human P0, and E. coli L10e; shown to be phosphorylated on serine 302"
+MGGIREKKAEYFAKLREYLEEYKSLFVVGVDNVSSQQMHEVRKELRGRAVVLMGKNTMVRRAIRGFLSDLPDFEKLLPFVKGNVGFVFTNEPLTEIKNVIVSNRVAAPARAGAVAPEDIWVRAVNTGMEPGKTSFFQALGVPTKIARGTIEIVSDVKVVDAGNKVGQSEASLLNLLNISPFTFGLTVVQVYDNGQVFPSSILDITDEELVSHFVSAVSTIASISLAIGYPTLPSVGHTLINNYKDLLAVAIAASYHYPEIEDLVDRIENPEKYAAAAPAATSAASGDAAPAEEAAAEEEEESDDDMGFGLFD
+
+>YLR371W ROM2 SGDID:S000004363, Chr XII from 862713-866783, Verified ORF, "GDP/GTP exchange protein (GEP) for Rho1p and Rho2p; mutations are synthetically lethal with mutations in rom1, which also encodes a GEP"
+MSETNVDSLGDRNDIYSQIFGVERRPDSFATFDSDSHGDISSQLLPNRIENIQNLNVLLSEDIANDIIIAKQRRRSGVEAAIDDSDIPNNEMKGKSSNYILSQQTNIKEVPDTQSLSSADNTPVSSPKKARDATSSHPIVHAKSMSHIYSTSNSASRQAKHYNDHPLPPMSPRNEVYQKNKSTTAFVPKRKPSLPQLALAGLKKQSSFSTGSASTTPTQARKSPLQGFGFFSRPSSKDLHEQHQHHQHIQHNNINNHNNNNTNNNGAHYQVGSSNSNYPQHSHSISSRSMSLNSSTLKNIASSFQSKTSNSRKATQKYDITSNPFSDPHHHHHHHHSSNSHSSLNNVHGSGNSSSVMGSSSNIGLGLKTRVSSTSLALKRYTSVSGTSLSSPRRSSMTPLSASRPVMSASSKKPQVYPALLSRVATKFKSSIQLGEHKKDGLVYRDAFTGQQAVDVICAIIRTSDRNLALLFGRSLDAQKLFHDVVYEHRLR [...]
+
+>YML092C PRE8 SGDID:S000004557, Chr XIII from 86739-85987, reverse complement, Verified ORF, "20S proteasome beta-type subunit"
+MTDRYSFSLTTFSPSGKLGQIDYALTAVKQGVTSLGIKATNGVVIATEKKSSSPLAMSETLSKVSLLTPDIGAVYSGMGPDYRVLVDKSRKVAHTSYKRIYGEYPPTKLLVSEVAKIMQEATQSGGVRPFGVSLLIAGHDEFNGFSLYQVDPSGSYFPWKATAIGKGSVAAKTFLEKRWNDELELEDAIHIALLTLKESVEGEFNGDTIELAIIGDENPDLLGYTGIPTDKGPRFRKLTSQEINDRLEAL
+
+>YMR073C YMR073C SGDID:S000004677, Chr XIII from 412872-412267, reverse complement, Uncharacterized ORF, "Putative protein of unknown function; proposed to be involved in resistance to carboplatin and cisplatin; shares similarity to a human cytochrome oxidoreductase"
+MSSDGMNRDVSNSKPNVRFAAPQRLSVAHPAISSPLHMPMSKSSRKPLVRTKIRLDPGHSALDWHSLTSNPANYYTKFVSLQLIQDLLDDPVFQKDNFKFSPSQLKNQLLVQKIPLYKIMPPLRINRKIVKKHCKGEDELWCVINGKVYDISSYLKFHPGGTDILIKHRNSDDLITYFNKYHQWVNYEKLLQVCFIGVVCE
+
+>YMR145C NDE1 SGDID:S000004753, Chr XIII from 556474-554792, reverse complement, Verified ORF, "Mitochondrial external NADH dehydrogenase, catalyzes the oxidation of cytosolic NADH; Nde1p and Nde2p are involved in providing the cytosolic NADH to the mitochondrial respiratory chain"
+MIRQSLMKTVWANSSRFSLQSKSGLVKYAKNRSFHAARNLLEDKKVILQKVAPTTGVVAKQSFFKRTGKFTLKALLYSALAGTAYVSYSLYREANPSTQVPQSDTFPNGSKRKTLVILGSGWGSVSLLKNLDTTLYNVVVVSPRNYFLFTPLLPSTPVGTIELKSIVEPVRTIARRSHGEVHYYEAEAYDVDPENKTIKVKSSAKNNDYDLDLKYDYLVVGVGAQPNTFGTPGVYEYSSFLKEISDAQEIRLKIMSSIEKAASLSPKDPERARLLSFVVVGGGPTGVEFAAELRDYVDQDLRKWMPELSKEIKVTLVEALPNILNMFDKYLVDYAQDLFKEEKIDLRLKTMVKKVDATTITAKTGDGDIENIPYGVLVWATGNAPREVSKNLMTKLEEQDSRRGLLIDNKLQLLGAKGSIFAIGDCTFHPGLFPTAQVAHQEGEYLAQYFKKAYKIDQLNWKMTHAKDDSEVARLKNQIVKTQSQIEDFKYN [...]
+
+>YMR235C RNA1 SGDID:S000004848, Chr XIII from 742734-741511, reverse complement, Verified ORF, "GTPase activating protein (GAP) for Gsp1p, involved in nuclear transport"
+MATLHFVPQHEEEQVYSISGKALKLTTSDDIKPYLEELAALKTCTKLDLSGNTIGTEASEALAKCIAENTQVRESLVEVNFADLYTSRLVDEVVDSLKFLLPVLLKCPHLEIVNLSDNAFGLRTIELLEDYIAHAVNIKHLILSNNGMGPFAGERIGKALFHLAQNKKAASKPFLETFICGRNRLENGSAVYLALGLKSHSEGLKVVKLYQNGIRPKGVATLIHYGLQYLKNLEILDLQDNTFTKHASLILAKALPTWKDSLFELNLNDCLLKTAGSDEVFKVFTEVKFPNLHVLKFEYNEMAQETIEVSFLPAMEKGNLPELEKLEINGNRLDEDSDALDLLQSKFDDLEVDDFEEVDSEDEEGEDEEDEDEDEKLEEIETERLEKELLEVQVDDLAERLAETEIK
+
+>YMR242C RPL20A SGDID:S000004855, Chr XIII from 754196-754178,753741-753224, reverse complement, Verified ORF, "Protein component of the large (60S) ribosomal subunit, nearly identical to Rpl20Bp and has similarity to rat L18a ribosomal protein"
+MPQKWKMAHFKEYQVIGRRLPTESVPEPKLFRMRIFASNEVIAKSRYWYFLQKLHKVKKASGEIVSINQINEAHPTKVKNFGVWVRYDSRSGTHNMYKEIRDVSRVAAVETLYQDMAARHRARFRSIHILKVAEIEKTADVKRQYVKQFLTKDLKFPLPHRVQKSTKTFSYKRPSTFY
+
+>YMR303C ADH2 SGDID:S000004918, Chr XIII from 874336-873290, reverse complement, Verified ORF, "Glucose-repressible alcohol dehydrogenase II, catalyzes the conversion of ethanol to acetaldehyde; involved in the production of certain carboxylate esters; regulated by ADR1"
+MSIPETQKAIIFYESNGKLEHKDIPVPKPKPNELLINVKYSGVCHTDLHAWHGDWPLPTKLPLVGGHEGAGVVVGMGENVKGWKIGDYAGIKWLNGSCMACEYCELGNESNCPHADLSGYTHDGSFQEYATADAVQAAHIPQGTDLAEVAPILCAGITVYKALKSANLRAGHWAAISGAAGGLGSLAVQYAKAMGYRVLGIDGGPGKEELFTSLGGEVFIDFTKEKDIVSAVVKATNGGAHGIINVSVSEAAIEASTRYCRANGTVVLVGLPAGAKCSSDVFNHVVKSISIVGSYVGNRADTREALDFFARGLVKSPIKVVGLSSLPEIYEKMEKGQIAGRYVVDTSK
+
+>YMR309C NIP1 SGDID:S000004926, Chr XIII from 895425-892987, reverse complement, Verified ORF, "Subunit of the eukaryotic translation initiation factor 3 (eIF3), involved in the assembly of preinitiation complex and start codon selection"
+MSRFFSSNYEYDVASSSSEEDLLSSSEEDLLSSSSSESELDQESDDSFFNESESESEADVDSDDSDAKPYGPDWFKKSEFRKQGGGSNKFLKSSNYDSSDEESDEEDGKKVVKSAKEKLLDEMQDVYNKISQAENSDDWLTISNEFDLISRLLVRAQQQNWGTPNIFIKVVAQVEDAVNNTQQADLKNKAVARAYNTTKQRVKKVSRENEDSMAKFRNDPESFDKEPTADLDISANGFTISSSQGNDQAVQEDFFTRLQTIIDSRGKKTVNQQSLISTLEELLTVAEKPYEFIMAYLTLIPSRFDASANLSYQPIDQWKSSFNDISKLLSILDQTIDTYQVNEFADPIDFIEDEPKEDSDGVKRILGSIFSFVERLDDEFMKSLLNIDPHSSDYLIRLRDEQSIYNLILRTQLYFEATLKDEHDLERALTRPFVKRLDHIYYKSENLIKIMETAAWNIIPAQFKSKFTSKDQLDSADYVDNLIDGLSTILSK [...]
+
+>YNL166C BNI5 SGDID:S000005110, Chr XIV from 323567-322221, reverse complement, Verified ORF, "Protein involved in organization of septins at the mother-bud neck, may interact directly with the Cdc11p septin, localizes to bud neck in a septin-dependent manner"
+MGLDQDKIKKRLSQIEIDINQMNQMIDENLQLVEPAEDEAVEDNVKDTGVVDAVKVAETALFSGNDGADSNPGDSAQVEEHKTAQVHIPTENEANKSTDDPSQLSVTQPFIAKEQITHTAIAIGDSYNSFVANSAGNEKAKDSCTENKEDGTVNIDQNRGEADVEIIENNDDEWEDEKSDVEEGRVDKGTEENSEIESFKSPMPQNNTLGGENKLDAELVLDKFSSANKDLDIQPQTIVVGGDNEYNHESSRLADQTPHDDNSENCPNRSGGSTPLDSQTKIFIPKKNSKEDGTNINHFNSDGDGQKKMANFETRRPTNPFRVISVSSNSNSRNGSRKSSLNKYDSPVSSPITSASELGSIAKLEKRHDYLSMKCIKLQKEIDYLNKMNAQGSLSMEDGKRLHRAVVKLQEYLDKKTKEKYEVGVLLSRHLRKQIDRGENGQFWIGTK
+
+>YOR063W RPL3 SGDID:S000005589, Chr XV from 444688-445851, Verified ORF, "Protein component of the large (60S) ribosomal subunit, has similarity to E. coli L3 and rat L3 ribosomal proteins; involved in the replication and maintenance of killer double stranded RNA virus"
+MSHRKYEAPRHGHLGFLPRKRAASIRARVKAFPKDDRSKPVALTSFLGYKAGMTTIVRDLDRPGSKFHKREVVEAVTVVDTPPVVVVGVVGYVETPRGLRSLTTVWAEHLSDEVKRRFYKNWYKSKKKAFTKYSAKYAQDGAGIERELARIKKYASVVRVLVHTQIRKTPLAQKKAHLAEIQLNGGSISEKVDWAREHFEKTVAVDSVFEQNEMIDAIAVTKGHGFEGVTHRWGTKKLPRKTHRGLRKVACIGAWHPAHVMWSVARAGQRGYHSRTSINHKIYRVGKGDDEANGATSFDRTKKTITPMGGFVHYGEIKNDFIMVKGCIPGNRKRIVTLRKSLYTNTSRKALEEVSLKWIDTASKFGKGRFQTPAEKHAFMGTLKKDL
+
+>YOR136W IDH2 SGDID:S000005662, Chr XV from 580251-581360, Verified ORF, "Subunit of mitochondrial NAD(+)-dependent isocitrate dehydrogenase, which catalyzes the oxidation of isocitrate to alpha-ketoglutarate in the TCA cycle"
+MLRNTFFRNTSRRFLATVKQPSIGRYTGKPNPSTGKYTVSFIEGDGIGPEISKSVKKIFSAANVPIEWESCDVSPIFVNGLTTIPDPAVQSITKNLVALKGPLATPIGKGHRSLNLTLRKTFGLFANVRPAKSIEGFKTTYENVDLVLIRENTEGEYSGIEHIVCPGVVQSIKLITRDASERVIRYAFEYARAIGRPRVIVVHKSTIQRLADGLFVNVAKELSKEYPDLTLETELIDNSVLKVVTNPSAYTDAVSVCPNLYGDILSDLNSGLSAGSLGLTPSANIGHKISIFEAVHGSAPDIAGQDKANPTALLLSSVMMLNHMGLTNHADQIQNAVLSTIASGPENRTGDLAGTATTSSFTEAVIKRL
+
+>YOR168W GLN4 SGDID:S000005694, Chr XV from 649304-651733, Verified ORF, "Glutamine tRNA synthetase, monomeric class I tRNA synthetase that catalyzes the specific glutaminylation of tRNA(Glu); N-terminal domain proposed to be involved in enzyme-tRNA interactions"
+MSSVEELTQLFSQVGFEDKKVKEIVKNKKVSDSLYKLIKETPSDYQWNKSTRALVHNLASFVKGTDLPKSELIVNGIINGDLKTSLQVDAAFKYVKANGEASTKMGMNENSGVGIEITEDQVRNYVMQYIQENKERILTERYKLVPGIFADVKNLKELKWADPRSFKPIIDQEVLKLLGPKDERDLIKKKTKNNEKKKTNSAKKSSDNSASSGPKRTMFNEGFLGDLHKVGENPQAYPELMKEHLEVTGGKVRTRFPPEPNGYLHIGHSKAIMVNFGYAKYHNGTCYLRFDDTNPEKEAPEYFESIKRMVSWLGFKPWKITYSSDYFDELYRLAEVLIKNGKAYVCHCTAEEIKRGRGIKEDGTPGGERYACKHRDQSIEQNLQEFRDMRDGKYKPGEAILRMKQDLNSPSPQMWDLIAYRVLNAPHPRTGTKWRIYPTYDFTHCLVDSMENITHSLCTTEFYLSRESYEWLCDQVHVFRPAQREYGRLNIT [...]
+
+>YOR267C HRK1 SGDID:S000005793, Chr XV from 824866-822587, reverse complement, Verified ORF, "Protein kinase implicated in activation of the plasma membrane H(+)-ATPase Pma1p in response to glucose metabolism; plays a role in ion homeostasis"
+MPNLLSRNPFHGHHNDHHHDRENSSNNPPQLIRSSKSFLNFIGRKQSNDSLRSEKSTDSMKSTTTTTNYTTTNLNNNTHSHSNATSISTNNYNNNYETNHHHNISHGLHDYTSPASPKQTHSMAELKRFFRPSVNKKLSMSQLRSKKHSTHSPPPSKSTSTVNLNNHYRAQHPHGFTDHYAHTQSAIPPSTDSILSLSNNINIYHDDCILAQKYGKLGKLLGSGAGGSVKVLVRPTDGATFAVKEFRPRKPNESVKEYAKKCTAEFCIGSTLHHPNVIETVDVFSDSKQNKYYEVMEYCPIDFFAVVMTGKMSRGEINCCLKQLTEGVKYLHSMGLAHRDLKLDNCVMTSQGILKLIDFGSAVVFRYPFEDGVTMAHGIVGSDPYLAPEVITSTKSYDPQCVDIWSIGIIYCCMVLKRFPWKAPRDSDDNFRLYCMPDDIEHDYVESARHHEELLKERKEKRQRFLNHSDCSAINQQQPAHESNLKTVQNQV [...]
+
+>YPL106C SSE1 SGDID:S000006027, Chr XVI from 352272-350191, reverse complement, Verified ORF, "ATPase that is a component of the heat shock protein Hsp90 chaperone complex; binds unfolded proteins; member of the heat shock protein 70 (HSP70) family; localized to the cytoplasm"
+MSTPFGLDLGNNNSVLAVARNRGIDIVVNEVSNRSTPSVVGFGPKNRYLGETGKNKQTSNIKNTVANLKRIIGLDYHHPDFEQESKHFTSKLVELDDKKTGAEVRFAGEKHVFSATQLAAMFIDKVKDTVKQDTKANITDVCIAVPPWYTEEQRYNIADAARIAGLNPVRIVNDVTAAGVSYGIFKTDLPEGEEKPRIVAFVDIGHSSYTCSIMAFKKGQLKVLGTACDKHFGGRDFDLAITEHFADEFKTKYKIDIRENPKAYNRILTAAEKLKKVLSANTNAPFSVESVMNDVDVSSQLSREELEELVKPLLERVTEPVTKALAQAKLSAEEVDFVEIIGGTTRIPTLKQSISEAFGKPLSTTLNQDEAIAKGAAFICAIHSPTLRVRPFKFEDIHPYSVSYSWDKQVEDEDHMEVFPAGSSFPSTKLITLNRTGDFSMAASYTDITQLPPNTPEQIANWEITGVQLPEGQDSVPVKLKLRCDPSGLHTI [...]
+
+>YPL215W CBP3 SGDID:S000006136, Chr XVI from 147415-148422, Verified ORF, "Mitochondrial protein required for assembly of ubiquinol cytochrome-c reductase complex (cytochrome bc1 complex); interacts with Cbp4p and function is partially redundant with that of Cbp4p"
+MMSVNRFTSGRLPVFLRKSPFYYSRAYLHQTCVFKQNKETAQDSPELLAKSSHLNSKPLDVSNKAPVKTAQNKIPLAHSKYESSKYELPKWKEALGELVIRAFHLDMDRVRAGPVAGSYYYKICKEQGLQYEDEPLSETAKYFYEDLKLPRTFSQWFQITVLHEWILFVRMRAMPFKYGRNYQQKLVDRTFSDIELRLFEEMKVNSGRIADQYLKDFNTQLRGAIFAYDEGFATDDGTLATAVWRNLFGGRKNIDMVHLESVVRYIYSQLYVLSRLSDREFATGKFKFVPPGVKVEKLTPKQEEELKAKTIAKYEALDKDPKTLPSERSRLSYTN
+
+>YPL266W DIM1 SGDID:S000006187, Chr XVI from 39121-40077, Verified ORF, "Essential 18S rRNA dimethylase, responsible for conserved m6(2)Am6(2)A dimethylation in 3'-terminal loop of 18 S rRNA, part of 90S and 40S pre-particles in nucleolus, involved in pre-ribosomal RNA processing"
+MGKAAKKKYSGATSSKQVSAEKHLSSVFKFNTDLGQHILKNPLVAQGIVDKAQIRPSDVVLEVGPGTGNLTVRILEQAKNVVAVEMDPRMAAELTKRVRGTPVEKKLEIMLGDFMKTELPYFDICISNTPYQISSPLVFKLINQPRPPRVSILMFQREFALRLLARPGDSLYCRLSANVQMWANVTHIMKVGKNNFRPPPQVESSVVRLEIKNPRPQVDYNEWDGLLRIVFVRKNRTISAGFKSTTVMDILEKNYKTFLAMNNEMVDDTKGSMHDVVKEKIDTVLKETDLGDKRAGKCDQNDFLRLLYAFHQVGIHFS
diff --git a/doc/user/example-files/target.sqt b/doc/user/example-files/target.sqt
new file mode 100644
index 0000000..3c4e472
--- /dev/null
+++ b/doc/user/example-files/target.sqt
@@ -0,0 +1,33 @@
+H	SQTGenerator Crux
+H	SQTGeneratorVersion 1.0
+H	Comment Crux was written by...
+H	Comment ref...
+H	StartTime	Tue Dec  2 15:22:50 2008
+H	EndTime                               
+H	Database	test_crux_index/test-binary-fasta
+H	DBSeqLength	?
+H	DBLocusCount	4
+H	PrecursorMasses	average
+H	FragmentMasses	mono
+H	Alg-PreMasTol	3.0
+H	Alg-FragMassTol	0.50
+H	Alg-XCorrMode	0
+H	Comment	preliminary algorithm sp
+H	Comment	final algorithm xcorr
+H	StaticMod	C=160.139
+H	Alg-DisplayTop	5
+H	EnzymeSpec	tryptic
+H	Line fields: S, scan number, scan number,charge, 0, precursor m/z, 0, 0, number of matches
+H	Line fields: M, rank by xcorr score, rank by sp score, peptide mass, deltaCn, xcorr score, sp score, number ions matched, total ions compared, sequence
+S	14	14	2	0.00	server	500.41	0.00	0.00	1
+M	1	1	1001.15	0.00	0.29	98.43	6	14	K.FHLELSQK.D	U
+L	gi|6381999|ref|NP_009311.2|
+S	14	14	3	0.00	server	500.41	0.00	0.00	1
+M	1	1	1495.81	0.00	-0.09	55.08	8	44	R.VMFTTFYMITNK.Y	U
+L	gi|6382000|ref|NP_009314.2|
+S	15	15	2	0.00	server	488.82	0.00	0.00	1
+M	1	1	973.09	0.00	-0.10	0.00	0	16	K.SGATAYIYK.A	U
+L	gi|6381999|ref|NP_009311.2|
+S	15	15	3	0.00	server	488.82	0.00	0.00	1
+M	1	1	1464.81	0.00	0.13	15.58	5	44	K.QYLLLNIAYLLK.L	U
+L	gi|6381999|ref|NP_009311.2|
diff --git a/doc/user/extract-columns.html b/doc/user/extract-columns.html
new file mode 100644
index 0000000..0d799f5
--- /dev/null
+++ b/doc/user/extract-columns.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>extract-columns</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>extract-columns</h1>
+<h2>Usage:</h2>
+<p><code>crux extract-columns [options] <tsv file> <column names></code></p>
+<h2>Description:</h2>
+<p>Given a tab-delimited file and a comma-delimited list of column names, extract the requested columns.</p>
+<h2>Input:</h2>
+<ul>
+  <li><code>tsv file</code> – A tab-delimited file, with column headers in the first row. Use "-" to read from standard input.</li>
+  <li><code>column names</code> – A comma-delimited list of column names.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – the requested columns in tab-delimited format. The columns are printed in the same order that they appear in the input column list.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--delimiter <string></code> – Specify the input and output delimiter to use when processing the delimited file.  The argument can be either a single character or the keyword 'tab.' Default = <code>tab</code>.</li>
+  <li class="nobullet"><code>--header T|F</code> – Print the header line of the file, in addition to the columns that match. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/extract-rows.html b/doc/user/extract-rows.html
new file mode 100644
index 0000000..033c1f9
--- /dev/null
+++ b/doc/user/extract-rows.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>extract-rows</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>extract-rows</h1>
+<h2>Usage:</h2>
+<p><code>crux extract-rows [options] <tsv file> <column name> <column value></code></p>
+<h2>Description:</h2>
+Given a tab-delimited file, a column name and a column cell value, extract the rows that have the matching values for that column.
+<h2>Input:</h2>
+<ul>
+  <li><code>tsv file</code> – A tab-delimited file, with column headers in the first row. Use "-" to read from standard input.</li>
+  <li><code>column name</code> – A column name.</li>
+  <li><code>column value</code> – A cell value for a column.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – the rows for which the value observed in the specified column of the input file match the <column value> given on the command line.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--delimiter <string></code> – Specify the input and output delimiter to use when processing the delimited file.  The argument can be either a single character or the keyword 'tab.' Default = <code>tab</code>.</li>
+  <li class="nobullet"><code>--header T|F</code> – Print the header line of the file, in addition to the columns that match. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--comparison eq|gt|gte|lt|lte|neq</code> – Specify the operator that is used to compare an entry in the specified column to the value given on the command line. Legal values are as follows:<ul><li>eq – The two values are equal</li><li>lt – The file value is less than the argument value</li><li>lte – The file value is less than or equal to the argument value</li><li>gt – The file value is greater than the argument value</li><li>gt [...]
+  <li class="nobullet"><code>--column-type int|real|string</code> – Specifies the data type of the column, either an integer (int), a floating point number (real), or a string. Default = <code>string</code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/faq.html b/doc/user/faq.html
new file mode 100644
index 0000000..d33cf22
--- /dev/null
+++ b/doc/user/faq.html
@@ -0,0 +1,638 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux FAQs</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="index.html">Home</a></li>
+			    <li><a href="download.html">Download</a></li>
+			    <li><a href="fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>Crux Frequently Asked Questions</h2>
+
+		<ol>
+
+		<li>
+		<b>What is the difference between Tide and Comet?</b></li>
+
+		<p>
+		The differences are as follows:
+		<ul>
+		<li>
+		Tide converts your FASTA file to an index (either as part
+		of <code>tide-search</code> or by using <code>tide-index</code>),
+		whereas Comet does searching directly from the FASTA file.  The
+		indexing step allows Tide to pre-compute many parts of the search
+		procedure, thereby making the search faster.
+		<li>
+		Comet is multi-threaded, whereas Tide runs on a single thread.  On
+		multi-threaded CPUs, this feature can offset the speed difference
+		between Comet and Tide.</li>
+		<li>
+		For each match, Comet reports the <i>total</i> number of candidate
+		peptides, whereas Tide reports the number of <i>distinct</i> candidate
+		peptides.</li>
+		<li>
+		Comet provides an option to report an E-value in addition to the raw
+		XCorr score, whereas Tide provides an option to report a p-value.  The
+		methods for computing these two statistical confidence measures are
+		quite different.</li>
+		<li>
+		Some options are available only in Comet (various options related to
+		different types of theoretical fragment ions, max_fragment_charge,
+		nucleotide_reading_frame, etc.) whereas others are only available in
+		Tide (e.g., keep-terminal-aminos).</li>
+		</ul></p>
+
+		<p>
+		Overall, for a given set of spectra, the XCorr scores computed by
+		Comet and by Tide should be quite similar to one another, assuming
+		that the various search parameters are set similarly between the two
+		algorithms.  Below is a table summarizing the correspondence between
+		the two sets of parameters.  The specified values will yield nearly
+		identical XCorr scores from the two search engines.</p>
+
+		<table border="1">
+		<tr>
+		<td>
+		<b>Tide parameter</b></td>
+		<td>
+		<b>Tide value</b></td>
+		<td>
+		<b>Comet parameter</b></td>
+		<td>
+		<b>Comet value</b></td>
+		</tr>
+
+		<tr>
+		<td>
+		enzyme</td>
+		<td>
+		trypsin</td>
+		<td>
+		search_enzyme_number</td>
+		<td>
+		1</td>
+		</tr>
+
+		<tr>
+		<td>
+		digestion</td>
+		<td>
+		full-digest</td>
+		<td>
+		num_enzyme_termini</td>
+		<td>
+		2</td>
+		</tr>
+
+		<tr>
+		<td>
+		missed-cleavages</td>
+		<td>
+		0</td>
+		<td>
+		allowed_missed_cleavage</td>
+		<td>
+		0</td>
+		</tr>
+
+		<tr>
+		<td>
+		min-peaks</td>
+		<td>
+		10</td>
+		<td>
+		minimum_peaks</td>
+		<td>
+		10</td>
+		</tr>
+
+		<tr>
+		<td>
+		precursor-window</td>
+		<td>
+		3</td>
+		<td>
+		peptide_mass_tolerance</td>
+		<td>
+		3</td>
+		</tr>
+
+		<tr>
+		<td>
+		precursor-window-type</td>
+		<td>
+		mass</td>
+		<td>
+		peptide_mass_units</td>
+		<td>
+		0</td>
+		</tr>
+
+		<tr>
+		<td>
+		fragment-mass</td>
+		<td>
+		mono</td>
+		<td>
+		mass_type_fragment</td>
+		<td>
+		1</td>
+		</tr>
+
+		<tr>
+		<td>
+		decoy-format</td>
+		<td>
+		peptide-reverse</td>
+		<td>
+		N/A</td>
+		<td>
+		 </td>
+		</tr>
+
+		<tr>
+		<td>
+		keep-terminal-aminos</td>
+		<td>
+		C</td>
+		<td>
+		N/A</td>
+		<td>
+		 </td>
+		</tr>
+
+		<tr>
+		<td>
+		concat</td>
+		<td>
+		T</td>
+		<td>
+		decoy_search</td>
+		<td>
+		1</td>
+		</tr>
+
+		<tr>
+		<td>
+		top-match</td>
+		<td>
+		5</td>
+		<td>
+		num_results, num_output_lines</td>
+		<td>
+		6, 5</td>
+		</tr>
+
+		<tr>
+		<td>
+		remove-precursor-peak</td>
+		<td>
+		T</td>
+		<td>
+		remove_precursor_peak</td>
+		<td>
+		1</td>
+		</tr>
+
+		<tr>
+		<td>
+		remove-precursor-tolerance</td>
+		<td>
+		15</td>
+		<td>
+		remove_precursor_tolerance</td>
+		<td>
+		15</td>
+		</tr>
+
+		<tr>
+		<td>
+		use-flanking-peaks</td>
+		<td>
+		F</td>
+		<td>
+		theoretical_fragment_ions</td>
+		<td>
+		1</td>
+		</tr>
+
+		<tr>
+		<td>
+		use-neutral-loss-peaks</td>
+		<td>
+		F</td>
+		<td>
+		use_NL_ions</td>
+		<td>
+		F</td>
+		</tr>
+
+		<tr>
+		<td>
+		mz-bin-width</td>
+		<td>
+		1.0005079</td>
+		<td>
+		fragment_bin_tol</td>
+		<td>
+		1.0005079</td>
+		</tr>
+
+		<tr>
+		<td>
+		mz-bin-offset</td>
+		<td>
+		0.4</td>
+		<td>
+		fragment_bin_offset</td>
+		<td>
+		0.4</td>
+		</tr>
+
+		<tr>
+		<td>
+		min-mass, max-mass</td>
+		<td>
+		200, 7200</td>
+		<td>
+		digest_mass_range</td>
+		<td>
+		200 7200</td>
+		</tr>
+
+		<tr>
+		<td>
+		N/A</td>
+		<td>
+		 </td>
+		<td>
+		max_fragment_charge</td>
+		<td>
+		2</td>
+		</tr>
+
+		</table>
+
+		<p>
+		Here is a scatter plot of XCorr scores from a search run with the
+		parameters listed above:</p>
+
+		<img src="images/stored-xcorr.png">
+
+
+		<li>
+		<b>What operating systems does Crux work with?</b></li>
+
+		<p>
+		Crux is written in C++, so in principle it should work on virtually
+		any modern operating system.  We provide pre-compiled binaries for
+		Linux, MacOS and Windows.</p>
+
+		<li>
+		<b>How does Crux compute the masses of peptides and peptide
+		  fragments?</b></li>
+
+		<p>
+		<ul>
+
+		<li>
+		Each amino acid can be characterized either by its monoisotopic mass,
+		which is the mass of the most abundant isotopic form of that amino acid,
+		or the average mass, which is a weighted average of the masses of all
+		the isotopic forms.  By default, Crux uses average mass to calculate
+		peptide masses, though this behavior can be controlled by the
+		<code>isotopic-mass</code> option to <code>tide-index</code> and the
+		<code>mass_type_parent</code> option to <code>comet</code>.  For
+		fragments, <code>tide-search</code> always uses the monoisotopic mass,
+		whereas <code>comet</code> allows selection
+		via <code>mass_type_fragment</code>.</li>
+
+		<li>
+		The neutral mass of a peptide is not the sum of the masses of its
+		amino acids.  The N-terminus and C-terminus of the peptide together
+		contribute an additional water molecule, whose mass is either
+		18.010564684 Da (monoisotopic) or 18.0153 Da (average).</li>
+		<li>
+		A charged peptide has an additional approximately 1 Da mass for each
+		charge, corresponding to the mass of a hydrogen atom.  The exact mass
+		to be added depends on whether we are using the monoisotopic mass
+		(1.007825035) or average mass (1.00794).</li>
+
+		<li>When a peptide fragments, each b-ion will have a mass equal to
+		the sum of its amino acids plus one hydrogen for each charge on the
+		fragment, while each y-ion will have a mass equal to the sum of its
+		amino acids plus water plus one hydrogen for each charge on the
+		fragment.</li>
+
+		<li>
+		By default, both Tide and Comet add a static modification of
+		57.021464 Da to all cysteines.  This is because in most protein
+		preparation protocols the peptides are alkylated with iodoacetamide,
+		resulting in carbamidomethylation of cysteine. The alkylation step
+		prevents the reformation of disulfide bonds.  Other alykylation
+		reagents may be used, in which case the appropriate mass shift can be
+		specified with the <code>C=[mass]</code> option
+		to <code>tide-index</code> or the <code>add_C_cysteine</code> option
+		to <code>comet</code>.</li>
+
+		</ul>
+		</p>
+
+		<li>
+		<b>How does Crux assign fragment masses to bins prior to computing
+		the XCorr score?</b>
+		</li>
+
+		<p>The XCorr score is essentially a dot product between a preprocessed
+		form of the observed spectrum and the theoretical spectrum derived
+		from the candidate peptide. In order to compute this dot product, the
+		masses of the fragments in both spectra are assigned to discrete mass
+		bins. This can be viewed as a form of rounding, but with more control
+		over the discrete masses. Two parameters, <code>mz-bin-width</code> and
+		<code>mz-bin-offset</code>, control the size and location of the bins,
+		and are used to convert fragment masses according to this formula:</p>
+
+		<p align=center>binned mass = floor( ( original mass / <code>bin-width</code> ) + 1.0 - <code>bin-offset</code> )</p>
+
+		<p>
+		The default values <code>bin-width</code>=1.0005079
+		and <code>bin-offset</code>=0.40 are suitable for most low-resolution
+		datasets.
+		</p>
+
+		<li>
+		<b>How does Crux estimate the possible charge states of the peptides when the
+		   information is not provided within the spectra file?</b>
+		</li>
+
+		<p>
+		Crux calculates the ratio of two values: (1) the sum of the
+		intensities from the peaks in the fragmentation spectrum whose m/z is
+		greater than the precursor m/z versus (2) the sum of the peaks whose
+		m/z is smaller than the precursor.  If this ratio is greater than or
+		equal to a calculated threshold based upon the location of the
+		precursor m/z and the max m/z in the spectrum, Crux then assigns both
+		+2 and +3 as possible charge states to the spectrum.  Otherwise, Crux
+		assigns +1 as the charge state.  The algorithm is based upon the
+		observation that fragmentation spectra collected from +1 peptides
+		should have no peaks above the precursor m/z.  In contrast, a peptide
+		of charge state greater than +1 can generate fragment ions of lower
+		charge whose m/z is greater than the precursor m/z, thus indicating a
+		multiply charged precursor.</p>
+
+		<p>
+		Note that, in addition, <code>comet</code> includes
+		a <code>precursor_charge</code> parameter.  If the first number in
+		this parameter is set to 0, i.e., <code>precursor_charge = 0 0</code>,
+		then the charge state rule above is applied.  However, if a user
+		specifies a precursor charge range, i.e., <code>precursor_charge = 1
+		5</code>, then Comet will search every spectrum through this range of
+		assumed charge states for every spectrum whose precursor charge
+		is unknown.</p>
+
+		<li>
+		<b>How does Crux create peptides from the given set of proteins in the
+		  database?</b></li>
+
+		<p>
+		The options <code>enzyme</code> (for <code>tide-index</code>)
+		and <code>search_enzyme_number</code> (for <code>comet</code>) define
+		the enzymatic cleavage rules.  When <code>enzyme=no-enzyme</code>
+		or <code>search_enzyme_number=0</code>, then any subsequence of a
+		protein may be considered as a candidate peptide. For other values of
+		these parameters, the residues at the termini of the protein
+		subsequence must follow specific rules.  For example, trypsin requires
+		that the preceeding residue must be an R or K and the following
+		residue may not be a P.</p>
+
+		<p>
+		When <code>digestion=full-digest</code> (for <code>tide-index</code>)
+		or <code>num_enzyme_termini=2</code> (for <code>comet</code>), then
+		these rules must be true at both ends of the peptide.  When it
+		is <code>digestion=partial-digest</code>
+		or <code>num_enzyme_termini=1</code>, then the rules must be true at
+		at least one of the ends.  The <code>missed-cleavages</code>
+		and <code>allowed_missed_cleavages</code> parameters control the
+		maximum number of cleavage sites that may lie within the peptide
+		sequence.</p>
+
+		<p>
+		Note that if <code>enzyme=no-enzyme</code>
+		or <code>search_enzyme_number=0</code>, then
+		the <code>digestion</code>, <code>num_enzyme_termini</code>, <code>missed-cleavages</code>
+		and <code>allowed_missed_cleaveages</code> parameters are not used.</p>
+
+
+		<li>
+		<b>How does Crux select candidate peptides from the database?</b></li>
+
+		<p>
+		The Crux search tools (<code>tide-index</code> and <code>comet</code>)
+		select candidate peptides for each spectrum based on its precursor
+		singly charged mass (m+h) or the mass-to-charge (m/z) and an assumed
+		charge state (specified in the input file).  If the m+h and charge is
+		provided in the input file (e.g., from the Z lines of an MS2 file),
+		then the precursor mass is calculated from the m+h minus the mass of a
+		proton. Otherwise, the precursor mass is calculated from the precursor
+		m/z and an assumed charge.  A mass window is defined in one of three
+		ways based on the
+		<code>precursor-window-type</code> and <code>precursor-window</code>
+		options.</p>
+
+		<ul>
+		<li>  
+		If the <code>precursor-window-type</code> is set to <code>mz</code>,
+		then the window is calculated as spectrum precursor m/z ±
+		<code>precursor-window</code> and the resulting range is converted
+		to mass using the charge state with the formula:<br>  
+		Mass=m/z * charge - MASS_PROTON * charge, where MASS_PROTON=1.00727646677
+		</li>
+
+		<li>
+		If the <code>precursor-window-type</code> is set to <code>mass</code>, then
+		the window is defined as the precursor mass ± 
+		<code>precursor-window</code>.
+		</li>
+
+		<li>
+		If the <code>precursor-window-type</code> is set to <code>ppm</code>
+		(parts per million), then the window spans from the precursor mass /
+		(1.0 + window * 1e-6) to precursor mass / (1.0 - window * 1e-6).</li>
+		</ul>
+
+		<p>
+		Candidate peptides are those whose mass falls within the defined
+		window.  The peptide mass is computed as the sum of the average amino
+		acid masses plus 18 Da for the terminal OH group.  Candidate peptides
+		can also be constrained by minimum and maximum allowed length. </p>
+
+		<li>
+		<b>How can I search my ITRAQ data?</b></li>
+
+		<p>
+		ITRAQ and other tagged seaches can be done by using terninal
+		modifications.  For example, if your tag has a mass of 304.199040, add
+		these lines to your parameter file:
+		<pre>
+nmod=304.199040:-1
+cmod=304.199040:-1
+		</pre>
+		<p>
+		Crux will then generate peptides with this modification (+304.199904)
+		on the n-terminus, the c-terminus and on both termini.  The -1 in the
+		option means to add the modification regardless of where the peptide
+		terminus lies relative to the rest of the protein.
+
+		<li>
+		<b>What happens if I decrease the size of the precursor window during
+		searching?</b></li>
+
+		<p>
+		Reducing the precursor mass tolerance has two main benefits.  One is
+		reduced search time, and the other is improved statistical power to
+		detect matches.  With a smaller window, fewer candidates are tested
+		against a spectrum.  As a result, the statistical confidence measure
+		calculated after multiple testing correction will be more significant.
+		Of course, the flipside is that if you make the precursor window too
+		small, then you may end up throwing out correct identifications.
+		Control over the size of the window is provided by the using
+		the <code>precursor-window</code> and
+		<code>precursor-window-type</code> options.</p>
+
+		<li>
+		  <b>How can I run many jobs in parallel?</b>
+
+
+		  <p>
+		In combination with GNU parallel, parallelization of Crux can be
+		achieved rather painlessly. For example, to run tide-search on a set
+		of spectrum files, you can just get your spectra files into a filelist:</p>
+
+		<pre>
+find . -name "*.mzXML" > file.list
+		</pre>
+
+		<p>
+		Then, with a bit of bash magic, run parallel as follows (assuming
+		there are 100 files in file.list):</p>
+
+		<pre>
+parallel --xapply crux tide-search <options> --fileroot {1} {2} database.db ::: $(seq 1 100) ::: $(cat file.list)
+		</pre>
+
+		  <p>
+		    <i>Thanks to Ben Temperton for this answer.</i></p>
+		    
+		<li>
+		<b>How can I contribute to Crux?</b></li>
+
+		<p>
+		Patches implementing new features can be emailed to the development
+		team at crux-support at uw.edu for review and inclusion in subsequent
+		releases of Crux.</p>
+
+		<li>
+		<b>Where does the name "Crux" come from?</b></li>
+
+		<p>
+		Thin air.  The name is not an acronym or a reference to anything in
+		particular.</p>
+
+		</ol>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/file-formats/barista-xml-format.html b/doc/user/file-formats/barista-xml-format.html
new file mode 100644
index 0000000..5e007d9
--- /dev/null
+++ b/doc/user/file-formats/barista-xml-format.html
@@ -0,0 +1,249 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Template</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>barista.xml </h2>
+		<p>
+		The barista.xml is an XML files that used to record four main 
+		parts: 
+		</p>
+		<pre>
+&lt proteins &gt ... &lt /proteins &gt
+&lt subset_proteins &gt ... &lt /subset_proteins &gt
+&lt peptides &gt ... &lt /peptides &gt
+&lt psms &gt ... &lt /psms &gt
+		</pre>
+		<p>
+		<ol>
+		<li>
+		<b>Proteins:</b>contains the ranked list of groups of indistinguishable
+		target proteins.  Each protein entry includes the following fields:
+		<ol>
+		<li>
+		<b>protein group:</b> a number that identifies a group. </li>
+		<li>
+		<b>q-value: </b>The minimal protein-level false discovery rate at which this
+		protein is deemed significant.  This q-value is computed based on the
+		ranking of the proteins induced by the Barista score.</li>
+		<li>
+		<b>score:</b> The score assigned to the proteins by Barista.  Higher values
+		correspond to more confident identifications.</code>
+		<li>
+		<b>protein_ids:</b> proteins in the protein group. </li>
+		<li>
+		<b>alternative_peptide_id: </b>peptides are considered indistinguishable if
+		they have identical amino acid sequences or they differ only by I/L or
+		T/S in the same position in the peptide. If the peptides shared by the
+		group are not identical, they are listed immediately after the
+		proteins they belong to. </li>
+		<li><b>
+		peptide_ids:</b> belong to each of the proteins in the
+		group.</li>
+		</ol>
+
+		<br>
+		For example, suppose that
+		<dl>
+		<dd> <b> protein_a </b> has peptide  <b> KLEAEVEALKK </b>  &nbsp &nbsp &nbsp  // 'L' in second position </dd>
+		          <dd> and peptide  <b> VLGAK </b>  </dd>            
+		<dd> <b> protein_b </b> has peptide  <b> KIEAEVEALKK </b>  &nbsp &nbsp &nbsp  // 'I' in second position
+		          <dd> and peptide  <b> VLGAK </b> </dd>
+		</dl>
+
+		<br>
+		Then the xml entry could look like this <br />
+		<pre>
+&lt proteins &gt
+&lt q_value &gt 0 &lt /q_value &gt
+&lt score &gt 8.9 &gt &lt /score &gt
+&lt protein_group group_id="1" &gt
+&lt protein_ids &gt
+&lt protein_id &gt protein_a &lt /protein_id &gt
+&lt alternative_peptide_id &gt KLEAEVEALKK &lt /alternative_peptide_id &gt
+&lt protein_id &gt protein_b &lt /protein_id &gt
+&lt alternative_peptide_id &gt KIEAEVEALKK &lt /alternative_peptide_id &gt
+&lt /protein_ids &gt
+&lt peptide_ids &gt
+&lt peptide_id &gt VLGAK &lt /peptide_id &gt
+&lt /peptide_ids &gt
+&lt /protein_group &gt
+&lt /proteins &gt
+		</pre>
+		</li>
+		</p>
+		<li>
+		<p>
+		<b>Subset proteins</b> contains groups of indistinguishable proteins, which
+		   constitute a subset of some group in the proteins section in
+		   terms of the peptides identified in these proteins. Each entry includes
+		<ol>
+		<li>
+		group id and parent group id: the identifier of the group and the
+		identifier of the protein group which has the superset of the peptide
+		set belonging the current group
+		</li>
+		<li>
+		protein_ids : proteins that belong to the group
+		</li>
+		<li>
+		peptide_ids: peptides that belong to the proteins in the group.
+		</li>
+		</ol>
+		</li>
+		</p>
+		<li>
+		<p>
+		<b>Peptides</b> contains a ranked list of target peptides. Each peptide entry
+		includes:
+		<ol>
+		<li>
+		peptide: Peptide amino acid sequence.
+		<li>
+		q-value: The minimal peptide-level false discovery rate at which this
+		peptide is deemed significant.  This q-value is computed based on the
+		ranking of the peptides induced by the Barista score.</li>
+		<li>
+		score: The score assigned to the peptide by Barista.  Higher values
+		correspond to more confident identifications.</li>
+		<li>
+		main_psm_id: The PSM identifier based on which the peptide received
+		its score. A peptide score is the maximum over all the PSMs that
+		contain this peptide. </li>
+		<li>
+		psm_ids: The identifiers of all the PMS that contain this peptide .</li>
+		<li>
+		protein_ids: All the proteins that contain this peptide and were
+		infered based on some PSMs from the database search. </li>
+		</ol>
+
+		</li>
+		</p>
+		<li>
+		<p>
+		<b>PSMs</b> contains ranked list of target peptide-spectrum matches. The
+		following columns are included:
+		<ol>
+		<li>
+		psm_id: PSM identifier. </li>
+		<li>
+		q-value: The minimal PSM-level false discovery rate at which this PSM
+		is deemed significant.  This q-value is computed based on the ranking
+		of the PSMs induced by the Barista score.</li>
+		<li>
+		score: The score assigned to the PSM by Barista.  Higher values
+		correspond to more confident identifications.</code>
+		<li>
+		scan: the scan number</li>
+		<li>
+		charge: the inferred charge state</li>
+		<li>
+		precursor_mass: precrusor mass as recorded during the MS1 scan </li>
+		<li>
+		peptide: the peptide sequence</li>
+		<li>
+		filename: name of the file in which the PSM appears</li>
+		</ol>
+		</p>
+		</ol>
+		</li>
+	<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="../tutorials/install.html">Installation</a></li>
+				<li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/file-formats/fasta-format.html b/doc/user/file-formats/fasta-format.html
new file mode 100644
index 0000000..13cb395
--- /dev/null
+++ b/doc/user/file-formats/fasta-format.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Template</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<H2>FASTA file format</H2>
+
+		<p>
+		Crux searches protein sequence databases given in FASTA format.  The
+		format is very simple. Every entry consists of a sequence identifier
+		(ID), an optional comment (COMMENT), and a sequence (SEQUENCE). The
+		format looks like this:
+		</p>
+
+		<pre>
+>ID COMMENT
+SEQUENCE
+		</pre>
+
+		<p>
+		The special character ">" marks the beginning of a new sequence.
+		The ">" character is followed immediately by the sequence
+		identifier. The rest of that line is occupied by the optional
+		comment. Subsequent lines contain the sequence itself.
+		</p>
+
+		<p>Some rules about representing sequences:</p>
+
+		<ul style="padding:0; font-size:14px;">
+
+		<li>
+		A single protein sequence can span multiple lines.  The > character
+		occurring at the beginning of the line indicates the end of the
+		sequence.</li>
+
+		<li>
+		Case doesn't matter. Crux Suite converts everything to uppercase.</li>
+
+		<li>
+		White space (spaces and newlines) within the sequence are
+		ignored.</li>
+
+		<li>
+		Characters should be from the amino acid alphabet, which contains
+		twenty characters for amino acids ("ACDEFGHIKLMNPQRSTVWY") and is
+		augmented by four more ambiguous characters ("BUXZ"):</li>
+
+		<pre>
+A  alanine                         P  proline
+B  aspartate or asparagine         Q  glutamine
+C  cystine                         R  arginine
+D  aspartate                       S  serine
+E  glutamate                       T  threonine
+F  phenylalanine                   U  any
+G  glycine                         V  valine
+H  histidine                       W  tryptophan
+I  isoleucine                      Y  tyrosine
+K  lysine                          Z  glutamate or glutamine
+L  leucine                         X  any
+M  methionine                      
+N  asparagine
+		</pre>
+
+		</ul>
+
+		<p>
+		<a href="sample.fasta">Here</a> is an example of three sequences in
+		FASTA format.</p>
+
+	<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="../tutorials/install.html">Installation</a></li>
+				<li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/file-formats/features.html b/doc/user/file-formats/features.html
new file mode 100644
index 0000000..eb81b6a
--- /dev/null
+++ b/doc/user/file-formats/features.html
@@ -0,0 +1,398 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Template</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<div id="content">
+			<h2>Features used by percolator and q-ranker</h2>
+
+			<p>
+			Following is a list of the features used by the <span class="code">crux
+			percolator</span> and <span class="code">crux q-ranker</span> commands to represent
+			each peptide-spectrum match (PSM).</p>
+
+
+			<table border="1" align="center" id="featurestable">
+			<tr>
+			<!--table header-->
+			<th>Number</th>
+			<th>Name</th>
+			<th>Type</th>
+			<th>Description</th>
+			<th>Percolator</th>
+			<th>q-ranker</th>
+			<th>barista</th>
+			</tr>
+			<!--tr backgoud(grey)"#DEDEDE"-->
+			<!--check mark : "&#10003" or "&#10004, not supported use:  -->
+
+			<tr bgcolor="#DEDEDE" >
+			<td>1</td>
+			<td><code>lnrSp</code></td>
+			<td>Float</td>
+			<td>The natural logarithm of the rank of the match
+			based on the Sp score</td>
+			<td>&#10003</td>
+			<td></td>
+			<td></td>
+			</tr>
+
+			<tr>
+			<td>2</td>
+			<td><code>deltLCn</code></td>
+			<td>Float</td>
+			<td>The difference between this PSM's XCorr and the
+			XCorr of the <i>last-ranked</i> PSM for this spectrum, divided by
+			this PSM's XCorr or 1, whichever is larger.</td>
+			<td>&#10003</td>
+			<td></td>
+			<td></td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE" >
+			<td>3</td>
+			<td><code>deltCn</code></td>
+			<td>Float</td>
+			<td>The difference between this PSM's XCorr and the
+			XCorr of the <i>next-ranked</i> PSM for this spectrum, divided by
+			this PSM's XCorr or 1, whichever is larger.
+			Note that this definition differs from that of the
+			standard delta Cn reported by SEQUEST<sup>®</sup>.</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td>4</td>
+			<td><code>Xcorr / XCorr Score</code></td>
+			<td>Float</td>
+			<td>The SEQUEST cross-correlation score</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>5</td>
+			<td><code>Sp / Sp score</code></td>
+			<td>Float</td>
+			<td>The preliminary SEQUEST score.</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td>6</td>
+			<td><code>IonFrac</code></td>
+			<td>Float</td>
+			<td>The fraction of b and y ions theoretical ions matched to the spectrum</td>
+			<td>&#10003</td>
+			<td></td>
+			<td></td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>7</td>
+			<td><code>Mass</code></td>
+			<td>Float</td>
+			<td>The observed mass [M+H]<sup>+</sup></td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td>8</td>
+			<td><code>PepLen</code></td>
+			<td>Integer</td>
+			<td>The length of the matched peptide, in residues</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>9-11</td>
+			<td><code>Charge[n]</code></td>
+			<td>Boolean</td>
+			<td>Is this a 1+/2+/3+ charged spectrum?</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td>12</td>
+			<td><code>enzN</code></td>
+			<td>Boolean</td>
+			<td>Is the peptide preceded by an enzymatic (tryptic) site?</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>13</td>
+			<td><code>enzC</code></td>
+			<td>Boolean</td>
+			<td>Does the peptide have an enzymatic (tryptic) C-terminus?</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td>14</td>
+			<td><code>enzInt</code></td>
+			<td>Integer</td>
+			<td>Number of missed internal enzymatic (tryptic) sites</td>
+			<td>&#10003</td>
+			<td></td>
+			<td></td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>15</td>
+			<td><code>lnNumSP</code></td>
+			<td>Float</td>
+			<td>The natural logarithm of the number of database
+			peptides within the specified precursor range</td>
+			<td>&#10003</td>
+			<td></td>
+			<td></td>
+			</tr>
+
+			<tr>
+			<td>16</td>
+			<td><code>dM</code></td>
+			<td>Float</td>
+			<td>The difference between the calculated and observed mass</td>
+			<td>&#10003</td>
+			<td> </td>
+			<td> </td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>17</td>
+			<td><code>absdM</code></td>
+			<td>Float</td>
+			<td>The absolute value of the difference between the calculated and observed mass</td>
+			<td>&#10003</td>
+			<td> </td>
+			<td> </td>
+			</tr>
+
+			<tr>
+			<td>18</td>
+			<td><code>label</code></td>
+			<td>Boolean</td>
+			<td>Is this decoy or target?</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+
+			<tr bgcolor="#DEDEDE">
+			<td>19</td>
+			<td><code>xcorr rank</code></td>
+			<td>Integer</td>
+			<td>The rank of this PSM when sorted by xcorr</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td>20</td>
+			<td><code>Sp rank</code></td>
+			<td>Integer</td>
+			<td>The rank of this PSM when sorted by sp score.</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE" >
+			<td>21</td>
+			<td><code>missed cleavage</code></td>
+			<td>Boolean</td>
+			<td>Does the peptide contain one or more missed cleavage sites?</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td>22</td>
+			<td><code>number of sequence comparisons</code></td>
+			<td>Integer</td>
+			<td>The number of sequence comparisons</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>23</td>
+			<td><code>delta mass</code></td>
+			<td>Float</td>
+			<td>Difference between measured and calculated mass</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr-->
+
+			<tr>
+			<td>24</td>
+			<td><code>abs(delta mass)</code></td>
+			<td>Float</td>
+			<td>Absolute value of delta mass</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>25</td>
+			<td><code>b ions</code></td>
+			<td>Float</td>
+			<td>The XCorr from the theoretical b-ions.</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td>26</td>
+			<td><code>y ions</code></td>
+			<td>Float</td>
+			<td>The XCorr from the theoretical y-ions.</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr bgcolor="#DEDEDE">
+			<td>27</td>
+			<td><code>flanking</code></td>
+			<td>Float</td>
+			<td>The XCorr from the flanking peaks</td>
+			<td> </td>
+			<td>&#10003</td>
+			<td>&#10003</td>
+			</tr>
+
+			<tr>
+			<td><b>Total</b></td>
+			<td> </td>
+			<td> </td>
+			<td></td>
+			<td><b>17</td>
+			<td><b>20</td>
+			<td><b>20</b></td>
+			</tr>
+			</table>
+		</div>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="../tutorials/install.html">Installation</a></li>
+				<li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/file-formats/ms2-format.html b/doc/user/file-formats/ms2-format.html
new file mode 100644
index 0000000..a5d385a
--- /dev/null
+++ b/doc/user/file-formats/ms2-format.html
@@ -0,0 +1,283 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Template</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>MS2 file format</h2>
+		<p>
+		The MS2 file format is used to record MS/MS spectra.
+		A full description of the MS2 file format may be found in:
+		<cite>
+		McDonald,W.H. et al.
+		MS1, MS2, and SQT-three unified, compact, and easily parsed file formats for the storage
+		of shotgun proteomic spectra and identifications. Rapid Commun. Mass Spectrom.
+		<b>18</b>, 2162-2168 (2004).
+		</cite>
+		</p>
+		<p>
+		An MS2 file consists of a header followed by one or more sets of scan data. 
+		The header and scan data are broken into records, one record per line. 
+		The fields within a record are separated by white space.
+		The header records list information applicable to all the scans in the file.
+		Each scan begins with a few records describing the parameters for that scan.
+		This is followed by pairs of m/z and intensity values, one pair per line.
+		</p>
+		<p>
+		A sample MS2 file may be found <a href="../example-files/demo.ms2">here</a>.
+		</p>
+		<h3>Header details</h3>
+		<p>
+		Each line in the header must begin with an <code>H</code>.
+		This is followed by a field label, and then a field value,
+		all separated by white space.
+		The field label must be one of the labels listed  below,
+		while the field value can be an aribrary string.
+		A typical header is shown below.
+		</p>
+		<pre>
+H	CreationDate	2/14/2007 6:19:18 PM
+H	Extractor	MakeMS2
+H	ExtractorVersion	1.0
+H	Comments	MakeMS2 written by Michael J. MacCoss, 2004
+H	ExtractorOptions	MS2/MS1
+		</pre>
+		<p>
+		The following field labels must appear in the header:
+		</p>
+		<table style="text-align: left;">
+		<caption style="text-align: left;">Required header field labels</caption>
+		<thead>
+		<tr>
+		<th>Field Label</th>
+		<th>Description</th>
+		</tr>
+		</thead>
+		<tbody>
+		<tr>
+		<td>CreationDate</td><td>The date and time when the file was created</td>
+		</tr>
+		<tr>
+		<td>Extractor</td><td>The name of the software used to create the MS2 file</td>
+		</tr>
+		<tr>
+		<td>ExtractorVersion</td><td>The version number of the Extractor software</td>
+		</tr>
+		<tr>
+		<td>ExtractorOptions</td><td>The options used in running the extractor software</td>
+		</tr>
+		</tbody>
+		</table>
+		<p>
+		The following field labels are optional, and may appear in the header:
+		</p>
+		<table style="text-align: left;">
+		<caption style="text-align: left;">Optional header field labels</caption>
+		<thead>
+		<tr>
+		<th>Field Label</th>
+		<th>Description</th>
+		</tr>
+		</thead>
+		<tbody>
+		<tr>
+		<td>IAnalyzer</td>
+		<td>Name of software used to conduct charge-state independent analysis of the spectra</td>
+		</tr>
+		<tr>
+		<td>IAnalyzerVersion</td>
+		<td>The version number of the IAnalyzer software</td>
+		</tr>
+		<tr>
+		<td>IAnalyzerOptions</td>
+		<td>The options used in running the IAnalyzer software</td>
+		</tr>
+		<tr>
+		<td>DAnalyzer</td>
+		<td>Name of software used to conduct charge-state dependent analysis of the spectra</td>
+		</tr>
+		<tr>
+		<td>DAnalyzerVersion</td>
+		<td>The version number of the DAnalyzer software</td>
+		</tr>
+		<tr>
+		<td>DAnalyzerOptions</td>
+		<td>The options used in running the DAnalyzer software</td>
+		</tr>
+		<tr>
+		<td>SortedBy</td>
+		<td>Name of field use to sort spectra<td>
+		</tr>
+		<tr>
+		<td>InstrumentType</td>
+		<td>The type of mass analyzer used<td>
+		</tr>
+		<tr>
+		<td>Comment</td>
+		<td>Remarks. Multiple comment lines are allowed<td>
+		</tr>
+		<tr>
+		<td>InstrumentSN</td>
+		<td>Serial number of the mass spectrometer used<td>
+		</tr>
+		</tbody>
+		</table>
+		<h3>Scan details</h3>
+		<p>
+		Each scan begins with a few records listing the parameters describing the spectrum.
+		These lines must begin with S, I, Z, or D.
+		The records are followed by pairs of m/z and intensity values, one pair per line.
+		A fragment of a typical scan is shown below.
+		</p>
+		<pre>
+S	10	10	636.34
+Z	2	1271.67
+187.4 12.5
+193.1 19.5
+194.3 13.7
+198.3 29.8
+199.1 12.2
+		</pre>
+		</p>
+		<table style="text-align: left;">
+		<caption style="text-align: left;">Record types for scans</caption>
+		<thead>
+		<tr>
+		<th>Symbol</th>
+		<th>Description</th>
+		<th>Generic form</th>
+		<th>Required</th>
+		</tr>
+		</thead>
+		<tbody>
+		<tr>
+		<td>S</td>
+		<td>scan</td>
+		<td><code>S [first scan] [second scan] [pre m/z]</code></td>
+		<td>yes</td>
+		</tr>
+		<tr>
+		<td>I</td>
+		<td>Charge independent analysis</td>
+		<td><code>I [field label] [field value]</code></td>
+		<td>no</td>
+		</tr>
+		<tr>
+		<td>Z</td>
+		<td>Charge</td>
+		<td><code>I [charge] [mass]</code></td>
+		<td>yes</td>
+		</tr>
+		<tr>
+		<td>D</td>
+		<td>Charge dependent analysis</td>
+		<td><code>I [field label] [field value]</code></td>
+		<td>no</td>
+		</tr>
+		<tr>
+		<td>[data]</td>
+		<td>m/z intensity paris</td>
+		<td><code>[m/z] [intensity]</code></td>
+		<td>yes</td>
+		</tr>
+		</tbody>
+		</table>
+	<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="../tutorials/install.html">Installation</a></li>
+				<li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/file-formats/parameter-file.html b/doc/user/file-formats/parameter-file.html
new file mode 100644
index 0000000..6c4fe1d
--- /dev/null
+++ b/doc/user/file-formats/parameter-file.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Template</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>Crux parameter files</h2>
+
+		<b>Description:</b>
+		<p>A file containing parameters and their arguments passed to a crux
+		program to control various aspects of execution.  Every command-line
+		option and many additional options can be read from a parameter
+		file.  If an option is specified in a file and on the command line,
+		the command line value will be used.
+		</p>
+
+		<b>Usage:</b>
+		<p><span class="code"><program name> --parameter-file <file name> [<argument>+]</span></p>
+
+		<b>Format:</b>
+		<p>The parameter file can contain parameter lines, comment lines and
+		blank lines.  Parameter lines are name-value pairs separated by  an
+		equal sign, '=' with no spaces in between.  Comment lines must begin
+		with '#'.  Blank lines should contain no spaces or tabs before the newline.
+		</p>
+
+		<p>
+		<a href="../commands/default.params">Here</a> is a sample parameter file
+		containing the default values for every parameter/option available to
+		all crux programs.</p>
+			<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="../tutorials/install.html">Installation</a></li>
+				<li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/file-formats/sample.fasta b/doc/user/file-formats/sample.fasta
new file mode 100644
index 0000000..1f51f20
--- /dev/null
+++ b/doc/user/file-formats/sample.fasta
@@ -0,0 +1,17 @@
+>ICYA_MANSE 
+GDIFYPGYCPDVKPVNDFDLSAFAGAWHEIAKLPLENENQGKCTIAEYKY
+DGKKASVYNSFVSNGVKEYMEGDLEIAPDAKYTKQGKYVMTFKFGQRVVN
+LVPWVLATDYKNYAINYNCDYHPDKKAHSIHAWILSKSKVLEGNTKEVVD
+NVLKTFSHLIDASKFISNDFSEAACQYSTTYSLTGPDRH
+
+>LACB_BOVIN 
+MKCLLLALALTCGAQALIVTQTMKGLDIQKVAGTWYSLAMAASDISLLDA
+QSAPLRVYVEELKPTPEGDLEILLQKWENGECAQKKIIAEKTKIPAVFKI
+DALNENKVLVLDTDYKKYLLFCMENSAEPEQSLACQCLVRTPEVDDEALE
+KFDKALKALPMHIRLSFNPTQLEEQCHI
+
+>BBP_PIEBR 
+NVYHDGACPEVKPVDNFDWSNYHGKWWEVAKYPNSVEKYGKCGWAEYTPE
+GKSVKVSNYHVIHGKEYFIEGTAYPVGDSKIGKIYHKLTYGGVTKENVFN
+VLSTDNKNYIIGYYCKYDEDKKGHQDFVWVLSRSKVLTGEAKTAVENYLI
+GSPVVDSQKLVYSDFSEAACKVN
diff --git a/doc/user/file-formats/sqt-format.html b/doc/user/file-formats/sqt-format.html
new file mode 100644
index 0000000..1540f6d
--- /dev/null
+++ b/doc/user/file-formats/sqt-format.html
@@ -0,0 +1,329 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Template</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>SQT file format</h2>
+		<p>
+		The SQT file format is used to record the matches between MS/MS spectra
+		and a sequence database.
+		A full description of the SQT file format may be found in:</p>
+
+		McDonald, W.H. et al.
+		<a href="http://onlinelibrary.wiley.com/doi/10.1002/rcm.1603/abstract">"MS1, MS2, and SQT-three unified, compact, and easily parsed file formats for the storage
+		of shotgun proteomic spectra and identifications."</a> <i>Rapid
+		    Communications in Mass Spectrometry.</i> <b>18</b>, 2162-2168 (2004).
+		</blockquote>
+
+		<p>
+		An SQT file consists of a header followed by one or more spectrum matches.
+		The header and match data are broken into records, one record per line. 
+		Fields within a record are separated by white space.
+		</p>
+		<p>
+		A sample SQT file may be found <a href="../example-files/target.sqt">here</a>.
+		</p>
+
+		<h3>Header details</h3>
+		<p>
+		Each line in the header must begin with an <code>H</code>.
+		This is followed by a field label, and then a field value,
+		all separated by white space.
+		The field label must be one of the labels listed  below,
+		while the field value can be an aribrary string.
+		A typical header is shown below.
+		</p>
+		<pre>
+H	SQTGenerator Crux
+H	SQTGeneratorVersion 1.0
+H	Comment Crux was written by...
+H	Comment ref...
+H	StartTime	Tue Dec  2 15:22:50 2008
+H	EndTime                               
+H	Database	test_crux_index/test-binary-fasta
+H	DBSeqLength	?
+H	DBLocusCount	4
+H	PrecursorMasses	average
+H	FragmentMasses	mono
+H	Alg-PreMasTol	3.0
+H	Alg-FragMassTol	0.50
+H	Alg-XCorrMode	0
+H	Comment	preliminary algorithm sp
+H	Comment	final algorithm xcorr
+H	StaticMod	C=160.139
+H	Alg-DisplayTop	5
+H	EnzymeSpec	tryptic
+		</pre>
+		<p>
+		The following field labels must appear in the header:
+		</p>
+		<table style="text-align: left;">
+		<caption style="text-align: left;">Required header field labels</caption>
+		<thead>
+		<tr>
+		<th>Field Label</th>
+		<th>Description</th>
+		</tr>
+		</thead>
+		<tbody>
+		<tr>
+		<td>SQTGenerator</td><td>The name of the software used to create the SQT file</td>
+		</tr>
+		<tr>
+		<td>SQTGeneratorVersion</td><td>The version number of the SQTGenerator software</td>
+		</tr>
+		<tr>
+		<td>Database</td><td>Path to sequence database used to generate the SQT file</td>
+		</tr>
+		<tr>
+		<td>FragmentMasses</td>
+		<td>Were average or mono-istopic residue masses used to predict the fragment ion mass</td>
+		</tr>
+		<tr>
+		<td>PrecursorMasses</td>
+		<td>Were average or mono-istopic residue masses used to predict the precursor ion mass</td>
+		</tr>
+		<tr>
+		<td>StartTime</td><td>Time when SQT file was created</td>
+		</tr>
+		<tr>
+		<td>StaticMod</td>
+		<td>Non-standard amino-acid masses used in identification 
+		(repeat this record if there are multiple non-standard masses)</td>
+		</tr>
+		<tr>
+		<td>DynamicMod</td>
+		<td>List of dynamic modifications used in identification</td>
+		</tr>
+		</tbody>
+		</table>
+		<p>
+		The following field labels are optional, and may appear in the header:
+		</p>
+		<table style="text-align: left;">
+		<caption style="text-align: left;">Optional header field labels</caption>
+		<thead>
+		<tr>
+		<th>Field Label</th>
+		<th>Description</th>
+		</tr>
+		</thead>
+		<tbody>
+		<tr>
+		<td>Comment</td>
+		<td>Remarks. Multiple comment lines are allowed<td>
+		</tr>
+		<tr>
+		<td>DBSeqLength</td>
+		<td>Number of aminio acids in sequence database</td>
+		</tr>
+		<tr>
+		<td>DBLocusCount</td>
+		<td>Number of proteins in sequence database</td>
+		</tr>
+		<tr>
+		<td>DBMD5Sum</td>
+		<td>MD5 checksum of sequence database</td>
+		</tr>
+		<tr>
+		<td>SortedBy</td>
+		<td>Name of field use to sort spectra<td>
+		</tr>
+		<tr>
+		<td>Alg-</td>
+		<td>Field names begining with Alg- are algorithm specific<td>
+		</tr>
+		<tr>
+		<td>*</td>
+		<td>Other field names are allowed, but may not contain white-space<td>
+		</tr>
+		</tbody>
+		</table>
+
+		<h3>Match details</h3>
+		<p>
+		Each spectrum match begins with a spectrum (S) record, 
+		each S record is followed by one or more match (M) records,
+		and each M record is followed by one or more Locus (L) records.
+		The S record contains the scan number and other details for the spectum,
+		the M records contains the highest scoring peptide matches for the parent spectrum,
+		and the L records give the names of proteins containing the parent match peptide.
+		</p>
+		<pre>
+S	45894	45894	2	1	maccoss007	2038.59	9199.5	147.1	153628
+M	  1	 27	2040.244	0.0000	 1.5881	 245.6	 11	34	    V.YKCAADKQDATVVELTNL.T	U
+L	YCR102C
+M	  2	 68	2038.265	0.0116	 1.5698	 208.4	 11	36	    S.TQSGIVAEQALLHSLNENL.S	U
+L	YGR080W
+M	  3	 34	2039.247	0.1582	 1.3369	 239.3	 11	36	    I.NEKTSPALVIPTPDAENEI.S	U
+L	YLR035C
+M	  4	322	2040.365	0.1699	 1.3183	 160.0	  9	36	    I.LKESKSVQPGKAIPDIIES.P	U
+L	YJL126W
+M	  5	 74	2039.453	0.2288	 1.2248	 203.6	 10	32	    D.MISVDLKTPLVIFKCHH.G	U
+L	YAL002W
+M	 65	  1	2041.246	0.4179	 0.9245	 370.2	 13	32	    S.CCGLSLPGLHDLLRHYE.E	U
+L	YLR403W
+S	45904	45904	3	1	maccoss007	2834.54	10103.7	246.4	152668
+M	  1	237	2833.059	0.0000	 1.9175	 273.1	 20	108	        N.NSGSDTVDPLAGLNNLRNSIKSAGNGME.N	U
+L	YDR505C
+M	  2	223	2834.278	0.1390	 1.6510	 274.8	 18	96	        G.HLSRISNIDDILISMRMDAFDSLIG.Y	U
+L	YLR247C
+M	  3	 52	2835.100	0.1503	 1.6292	 324.1	 20	96	  S.KSTTEPIQLNNKHDLHLGQELTEST.V	U
+L	YDR098C-B
+L	YDR365W-B
+L	YER138C
+L	YGR027W-B
+		</pre>
+		</p>
+		<table style="text-align: left;">
+		<caption style="text-align: left;">Record types for scans</caption>
+		<thead>
+		<tr>
+		<th>Symbol</th>
+		<th>Description</th>
+		<th>Generic form</th>
+		<th>Required</th>
+		</tr>
+		</thead>
+		<tbody>
+		<tr>
+		<td>S</td>
+		<td>Spectrum</td>
+		<td><code>S [low scan] [high scan] [charge] [process time] 
+		<br />
+		[server] [experimental neutral mass] [total ion intensity] [lowest Sp] [# of seq. matched]
+		</code></td>
+		<td>yes</td>
+		</tr>
+		<tr>
+		<td>M</td>
+		<td>Match</td>
+		<td><code>M [rank by Xcorr] [rank by Sp] [calculated mass]
+		<br />
+		[DeltaCN] [Xcorr] [Sp] [matched ions] [expected ions] [sequence matched] 
+		<br />
+		[validation status U = unknown, Y = yes, N = no, M = Maybe]
+		</code></td>
+		<td>yes</td>
+		</tr>
+		<tr>
+		<td>L</td>
+		<td>Locus</td>
+		<td><code>L [locus name] [description if available]</code></td>
+		<td>yes</td>
+		</tr>
+		</tbody>
+		</table>
+
+		<h3>Differences between Crux's SQT format and the published
+		  version</h3>
+
+		<ul>
+		<li>
+		Relative to the original specification of SQT, Crux expects an
+		additional field [total ion intensity] in the "S" lines.</li>
+		<li>
+		In the original specification, the FragmentMasses and PrecursorMasses
+		header lines used the values  "AVG" or "MONO", but Crux uses "average"
+		and "mono".</li>
+		</ul>
+			<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="../tutorials/install.html">Installation</a></li>
+				<li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/file-formats/txt-format.html b/doc/user/file-formats/txt-format.html
new file mode 100644
index 0000000..690a9fe
--- /dev/null
+++ b/doc/user/file-formats/txt-format.html
@@ -0,0 +1,1363 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Tab-delimited File Format</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>Tab-delimited file format</h2>
+		<p>
+		Various programs in Crux report their output and read inputs in tab-delimited text format. Each such file consists of a single line containing the tab-separated names of fields, followed by one or more lines giving the corresponding field values.
+		</p>
+		<table border="1" id="tabformat">
+		<!-- table headers-->
+		<tr>
+		<th rowspan="2">Name</th>
+		<th rowspan="2">Description</th>
+		<th rowspan="2">comet</th>
+		<th rowspan="2">tide</th>
+		<th rowspan="2">cascade-search</th>
+		<th rowspan="2">search-for-xlinks</th>
+		<th rowspan="2">search-for-xlinks (new)</th>
+		<th colspan="4">barista</th>
+		<th rowspan="2">q-ranker</th>
+		<th colspan="3">percolator</th>
+		<th rowspan="2">spectral-counts</th>
+		</tr>
+
+		<tr>
+		<!--barista-->
+		<th>PSM</th>
+		<th>peptides</th>
+		<th>proteins</th>
+		<th>sub-proteins</th>
+		<!--percolator-->
+		<th>PSM</th>
+		<th>peptides</th>
+		<th>proteins</th>
+		</tr>
+
+		<!--"✓"= "✓" or "&#10004"-->
+		<!--"✕"= "&#10005" or "&#10006"-->
+		<!--"–"=&#8211-->
+
+		<tr bgcolor="#DEDEDE">
+		<td>file</td>
+		<td>The name of the file containing the scan.</td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>fileidx</td>
+		<td>The integer index of the file containing the scan.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>scan</td>
+		<td>The identifying number of each scan.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>charge</td>
+		<td>The charge state for this spectrum in this PSM.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>spectrum precursor m/z</td>
+		<td>The observed m/z of the spectrum precursor ion.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>spectrum neutral mass</td>
+		<td>The computed mass of the spectrum precursor at the given charge   state. This is equal to the precursor m/z minus the mass of a proton (1.00727646677 Da), all multiplied by the charge.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>peptide mass</td>
+		<td>The mass of the peptide sequence, computed as the sum of the the amino acid masses plus the mass of water (18.010564684 Da or 18.0153 Da, depending on whether we are using monoisotopic or average mass).</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>delta_cn</td>
+		<td>The normalized difference in XCorr for this PSM
+		relative to the next ranked PSM for the same spectrum
+		and charge. The denominator for normalization is the
+		minimum of the current XCorr and 1.0.
+		If <code>exact-p-value=T</code>, then the difference
+		is computed between -log(p-value) rather than XCorr,
+		and no normalization is applied.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		  <td>delta_lcn</td>
+		<td>Similar to delta_cn, except that the difference
+		is computed with respect to the lowest reported XCorr
+		score for a given spectrum and charge state.</td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>sp score</td>
+		<td>The SEQUEST-type preliminary score.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>sp rank</td>
+		<td>The rank of this PSM when sorted by Sp score.  Note that,
+		  in <code>tide-search</code>, the Sp score is only computed for PSMs
+		  that are reported to the user.  Hence, the rank of the Sp score
+		  will be in the range from 1 to <i>n</i>, where the value
+		  of <i>n</i> is determined by the <code>--top-match</code> parameter.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>xcorr score</td>
+		<td>The SEQUEST-type cross correlation score.
+		This column only appears when <code>exact-p-value=F</code>.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>exact p-value</td>
+		<td>The p-value computed as described in
+		  <a href="http://www.ncbi.nlm.nih.gov/pubmed/24895379">"Computing Exact p-values
+		  for a Cross-correlation Shotgun Proteomics Score Function"</a>.
+		  This column only appears when <code>exact-p-value=T</code>.</td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>refactored xcorr</td>
+		<td>A discretized version of XCorr, used to compute the p-value.
+		This column only appears when <code>exact-p-value=T</code>.</td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>xcorr rank</td>
+		<td>The rank of this PSM when sorted by xcorr.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>p-value</td>
+		<td>The p-value computed from the estimated Weibull parameters of the score distribution for this spectrum.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>percolator score</td>
+		<td>The discriminant score assigned by percolator.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>percolator q-value</td>
+		<td>The q-value assigned by percolator.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>percolator PEP</td>
+		<td>The posterior error probability assigned by percolator.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>q-ranker score</td>
+		<td>The discriminant score assigned by q-ranker.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>q-ranker q-value</td>
+		<td>The q-value assigned by q-ranker.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>q-ranker PEP</td>
+		<td>The posterior error probability estimated from the q-ranker score</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>barista score</td>
+		<td>The discriminant score assigned by barista.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>barista q-value</td>
+		<td>The q-value assigned by barista.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>barista PEP</td>
+		<td>The PEP assigned by barista</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>b/y ions matched</td>
+		<td>The number of b-ions and y-ions in the peptide that have a corresponding peak in the spectrum.</td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>b/y ions total</td>
+		<td>The total number of b- and y-ions predicted for this peptide.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>total matches/spectrum</td>
+		<td>The number of candidate peptides in the database found for this
+		  spectrum, including duplicates.  Note that this is always the number of target candidate
+		  peptides, even if the PSM involves a decoy peptide.</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>distinct matches/spectrum</td>
+		<td>The number of unique candidate peptides in the database found for this
+		  spectrum.  Note that this is always the number of target candidate
+		  peptides, even if the PSM involves a decoy peptide.</td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+
+		<tr>
+		<td>sequence</td>
+		<td>The peptide sequence, not including any modifications.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>modified sequence</td>
+		<td>The peptide sequence, with modifications included.</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		  <td>modifications</td>
+                  <!-- This description needs to be expanded considerably.  -->
+		<td>Variable modifications applied to the sequence.</td>
+		<td></td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>cleavage type</td>
+		<td>The cleavage rules for generating this peptide based on the user-specified enzyme specificity.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>protein id</td>
+		<td>A comma-separated list of proteins in which this peptide
+		  appears. Optionally, the protein name may be followed by a number in parentheses giving the start position of the peptide in the protein.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>flanking aa</td>
+		<td>The amino acids that precede and follow this
+		peptide in the parent protein ID.  If the peptide
+		occurs in more than one protein, then this column
+		will contain a comma-separated list of pairs of amino
+		acids.</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>original target sequence</td>
+		<td>The unmodified target sequence. For a target PSM,
+		the value in this column will be identical to the
+		value in the "sequence" column.  For a decoy PSM,
+		this column will contain the corresponding target
+		sequence.</td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>RAW</td>
+		<td>The raw (unnormalized) count of spectra per peptide</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		</tr>
+
+		<tr>
+		<td>SIN</td>
+		<td>A protein quantification score</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>NSAF</td>
+		<td>The normalized spectral abundace factor</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>&#10003</td>
+		<td>&#10003</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		</tr>
+
+		<tr>
+		<td>dNSAF</td>
+		<td>The distributed normalized spectral abundace factor</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>EMPAI</td>
+		<td>The exponentially modified protein abundance index</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		</tr>
+
+		<tr>
+		<td> parsimony rank</td>
+		<td>The protein rank based on its spectral-counts score.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>psm_id</td>
+		<td>PSM identifier.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>protein group number</td>
+		<td>Protein group index</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>peptides-scan.charge</td>
+		<td>Peptides belonging to each protein in the group, with scan and charge (for example, EAMPK-001285.2)</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>proteins</td>
+		<td>Proteins in the protein group. Each protein can be followed by peptides in parenthesis, if they belong only to this particular protein in the group. Since peptides are considered indistinguishable if they have identical amino acid sequences or they differ only by I/L or T/S in the same position in the peptide, the peptides shared by the group may not all be identical.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>parent group numbers</td>
+		<td>The numbers of the protein groups in the barista.target.proteins.txt that are supersets of this group in terms of peptides.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>peptide mass mono</td>
+		<td>Monoisotopic peptide mass</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>peptide mass average</td>
+		<td>Average peptide mass</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>mass error(ppm)</td>
+		<td>The mass error (in ppm) between the observed precursor mass and the
+		    cross-link peptide product</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>protein id(loc)</td>
+		<td>List of protein IDs that give rise to the first and second peptide in the
+		    cross-link peptide product. (loc) indicates the location of the
+		    peptide in the protein.  The ";" separates the protein ids from the
+		    first and second peptide.</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>protein id(loc) 1</td>
+		<td>List of protein IDs that give rise to the first peptide in the
+		    cross-link peptide product. (loc) indicates the location of the
+		    peptide in the protein</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>protein id(loc) 2</td>
+		<td>List of protein IDs that give rise to the second peptide in the
+		    cross-link peptide product. (loc) indicates the location of the
+		    peptide in the protein</td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>by total</td>
+		<td>Total number of b-y ions in product</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>by observable (0-1200)</td>
+		<td>Total number of b and y ions observable in the 0-1200 m/z range</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>by observable bin (0-1200)</td>
+		<td>Total number of b and y ions observable in the 0-1200 m/z range
+		  using 1 Da bins</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>by observable (0-max)</td>
+		<td>Total number of b and y ions observable in the entire m/z range</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>by observable bin (0-max)</td>
+		<td>Total number of b and y ions observable in the entire m/z range
+		  using 1 Da bins</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>by observed bin</td>
+		<td>Total number of b-y ions observed in spectrum</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>ion current total</td>
+		<td>Total ion current for spectrum</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr bgcolor="#DEDEDE">
+		<td>ion current observed</td>
+		<td>Total ion current observed for matching b-y ions</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		<tr>
+		<td>ions observable bin (0-1200)</td>
+		<td>Total ions observable (b, y, flanks, and neutral losses) within 0-1200 m/z range</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td>✓</td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		<td> </td>
+		</tr>
+
+		</table> 
+<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="../tutorials/install.html">Installation</a></li>
+				<li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/fileformats.html b/doc/user/fileformats.html
new file mode 100644
index 0000000..51aaf71
--- /dev/null
+++ b/doc/user/fileformats.html
@@ -0,0 +1,387 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux File Formats</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="index.html">Home</a></li>
+			    <li><a href="download.html">Download</a></li>
+			    <li><a href="fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<div id="content">
+			<h2>File formats</h2>
+
+			<table id="fileFormatsTable">
+			<tr>
+			<td> </td>
+			<td>bullseye</td>
+			<td>tide-index</td>
+			<td>tide-search</td>
+			<td>comet</td>
+			<td>percolator</td>
+			<td>q-ranker</td>
+			<td>barista</td>
+			<td>search-for-xlinks</td>
+			<td>spectral-counts</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="file-formats/ms2-format.html">MS1</a>
+			</td>
+			<td>in</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="file-formats/ms2-format.html">MS2</a>
+			(<a href="example-files/demo.ms2">sample</a>) / CMS2
+			</td>
+			<td>in/out</td>
+			<td> </td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="http://www.matrixscience.com/help/data_file_help.html">MGF</a>
+			</td>
+			<td>in/out</td>
+			<td> </td>
+			<td>in</td>
+			<td> </td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="http://www.psidev.info/mzml_1_0_0">mzML</a>,
+			<a href="http://tools.proteomecenter.org/wiki/index.php?title=Formats:mzXML">mzXML</a>
+			</td>
+			<td>in</td>
+			<td> </td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			</tr>
+
+			<tr>
+			<td>
+			Thermo .raw files
+			(Windows only)
+			</td>
+			<td>in</td>
+			<td> </td>
+			<td>in</td>
+			<td>in</td>
+			<td> </td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="http://proteowizard.sourceforge.net/formats.shtml">Other
+			  proprietary vendor formats</a>  (Windows only)
+			</td>
+			<td> </td>
+			<td> </td>
+			<td>in</td>
+			<td> </td>
+			<td> </td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="file-formats/fasta-format.html">FASTA</a>
+			(<a href="file-formats/sample.fasta">sample</a>)
+			</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td>in</td>
+			<td> </td>
+			</tr>
+
+			<tr>
+			<td>
+			database index
+			</td>
+			<td> </td>
+			<td>out</td>
+			<td>in</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="file-formats/txt-format.html">Tab-delimited text</a>
+			(<a href="example-files/search.target.txt">sample</a>)
+			</td>
+			<td> </td>
+			<td> </td>
+			<td>out</td>
+			<td>out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>out</td>
+			<td>in/out</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="http://tools.proteomecenter.org/wiki/index.php?title=Formats:pepXML">
+			pepXML</a>
+			</td>
+			<td> </td>
+			<td> </td>
+			<td>out</td>
+			<td>out</td>
+			<td>in/out</td>
+			<td>out</td>
+			<td>out</td>
+			<td> </td>
+			<td>in</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="https://github.com/percolator/percolator/wiki/Interface">PIN</a>
+			</td>
+			<td> </td>
+			<td> </td>
+			<td>out</td>
+			<td> </td>
+			<td>in</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="https://github.com/percolator/percolator/wiki/Interface">POUT</a>
+			</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td>out</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="http://www.psidev.info/mzidentml">mzIdentML</a>
+			</td>
+			<td> </td>
+			<td> </td>
+			<td>out</td>
+			<td>out</td>
+			<td>out</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td>in</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="file-formats/sqt-format.html">SQT</a>
+			</td>
+			<td> </td>
+			<td> </td>
+			<td>out</td>
+			<td>out</td>
+			<td>in</td>
+			<td>in</td>
+			<td>in</td>
+			<td> </td>
+			<td>in</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="file-formats/features.html">Feature file</a>
+			</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td>in/out</td>
+			<td>out</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="file-formats/barista-xml-format.html">Barista XML</a>
+			</td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td> </td>
+			<td>out</td>
+			<td> </td>
+			<td> </td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="file-formats/parameter-file.html">Crux parameters</a>
+			(<a href="example-files/default.params">sample</a>)
+			</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			<td>in/out</td>
+			</tr>
+
+			</table>
+		</div>
+	<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/generate-peptides.html b/doc/user/generate-peptides.html
new file mode 100644
index 0000000..dc0ec41
--- /dev/null
+++ b/doc/user/generate-peptides.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>generate-peptides</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>generate-peptides</h1>
+<h2>Usage:</h2>
+<p><code>crux generate-peptides [options] <protein fasta file></code></p>
+<h2>Description:</h2>
+<p>This command takes as input a protein FASTA file and outputs the corresponding list of peptides, as well as a matched list of decoy peptides and decoy proteins. Decoys are generated either by reversing or shuffling the non-terminal amino acids of each peptide. The program will shuffle each peptide multiple times to attempt to ensure that there is no overlap between the target and decoy peptides. For homopolymers, this is not possible. In this case, the occurrence of these target/decoy [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>protein fasta file</code> – The name of the file in FASTA format from which to retrieve proteins.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>generate-peptides.target.txt</code> – A text file containing the target peptides, one per line. Each line has three tab-delimited columns, containing the peptide sequence, the m+h mass of the unmodified peptide, and a comma-delimited list of protein IDs in which the peptide occurs.</li>
+  <li><code>generate-peptides.decoy.txt</code> – A text file containing the decoy peptides, one per line. Each line has three tab-delimited columns, containing the peptide sequence, the m+h mass of the unmodified peptide, and a comma-delimited list of protein IDs in which the peptide occurs. There is a one-to-one correspondence between targets and decoys.</li>
+  <li><code>generate-peptides.proteins.decoy.txt</code> – a FASTA format file containing decoy proteins, in which all of the peptides have been replaced with their shuffled or reversed counterparts. Note that this file will only be created if the enzyme specificity is "full-digest" and no missed cleavages are allowed.</li>
+  <li><code>generate-peptides.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>generate-peptides.log.txt</code> – a log file containing a copy of all messages that were printed to the screen during execution.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Peptide properties</h3>
+<ul>
+  <li class="nobullet"><code>--min-mass <float></code> – The minimum mass (in Da) of peptides to consider. Default = <code>200</code>.</li>
+  <li class="nobullet"><code>--max-mass <float></code> – The maximum mass (in Da) of peptides to consider. Default = <code>7200</code>.</li>
+  <li class="nobullet"><code>--min-length <integer></code> – The minimum length of peptides to consider. Default = <code>6</code>.</li>
+  <li class="nobullet"><code>--max-length <integer></code> – The maximum length of peptides to consider. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--isotopic-mass average|mono</code> – Specify the type of isotopic masses to use when calculating the peptide mass. Default = <code>mono</code>.</li>
+  <li class="nobullet"><code>--clip-nterm-methionine T|F</code> – When set to T, for each protein that begins with methionine, tide-index will put two copies of the leading peptide into the index, with and without the N-terminal methionine. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Decoy database generation</h3>
+<ul>
+  <li class="nobullet"><code>--seed <string></code> – When given a unsigned integer value seeds the random number generator with that value. When given the string "time" seeds the random number generator with the system time. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--decoy-format none|shuffle|peptide-reverse|protein-reverse</code> – Include a decoy version of every peptide by shuffling or reversing the target sequence or protein. In shuffle or peptide-reverse mode, each peptide is either reversed or shuffled, leaving the N-terminal and C-terminal amino acids in place. Note that peptides appear multiple times in the target database are only shuffled once. In peptide-reverse mode, palindromic peptides are shuffled.  [...]
+  <li class="nobullet"><code>--keep-terminal-aminos N|C|NC|none</code> – When creating decoy peptides using decoy-format=shuffle or decoy-format=peptide-reverse, this option specifies whether the N-terminal and C-terminal amino acids are kept in place or allowed to be shuffled or reversed. For a target peptide "EAMPK" with decoy-format=peptide-reverse, setting keep-terminal-aminos to "NC" will yield "EPMAK"; setting it to "C" will yield "PMAEK"; setting it to "N" will yield "EKPMA" [...]
+</ul>
+</li>
+<li class="nobullet">
+<h3>Enzymatic digestion</h3>
+<ul>
+  <li class="nobullet"><code>--enzyme no-enzyme|trypsin|trypsin/p|chymotrypsin|elastase|clostripain|cyanogen-bromide|iodosobenzoate|proline-endopeptidase|staph-protease|asp-n|lys-c|lys-n|arg-c|glu-c|pepsin-a|elastase-trypsin-chymotrypsin|custom-enzyme</code> – Specify the enzyme used to digest the proteins in silico. Available enzymes (with the corresponding digestion rules indicated in parentheses) include no-enzyme ([X]|[X]), trypsin ([RK]|{P}), trypsin/p ([RK]|[]), chymotrypsin  [...]
+  <li class="nobullet"><code>--custom-enzyme <string></code> – Specify rules for in silico digestion of protein sequences. Overrides the enzyme option. Two lists of residues are given enclosed in square brackets or curly braces and separated by a |. The first list contains residues required/prohibited before the cleavage site and the second list is residues after the cleavage site. If the residues are required for digestion, they are in square brackets, '[' and ']'. If the re [...]
+  <li class="nobullet"><code>--digestion full-digest|partial-digest|non-specific-digest</code> – Specify whether every peptide in the database must have two enzymatic termini (full-digest) or if peptides with only one enzymatic terminus are also included (partial-digest). Default = <code>full-digest</code>.</li>
+  <li class="nobullet"><code>--missed-cleavages <integer></code> – Maximum number of missed cleavages per peptide to allow in enzymatic digestion. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/get-ms2-spectrum.html b/doc/user/get-ms2-spectrum.html
new file mode 100644
index 0000000..a42c4a8
--- /dev/null
+++ b/doc/user/get-ms2-spectrum.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>get-ms2-spectrum</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>get-ms2-spectrum</h1>
+<h2>Usage:</h2>
+<p><code>crux get-ms2-spectrum [options] <ms2 file></code></p>
+<h2>Description:</h2>
+<p>Extract one or more MS-MS spectra from an MS2 file by scan number. Optionally output summary statistics for each spectrum.</p>
+<h2>Input:</h2>
+<ul>
+  <li><code>ms2 file</code> – File containing spectra to be searched.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – the requested spectrum or spectra in MS2 format.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>get-ms2-spectrum options</h3>
+<ul>
+  <li class="nobullet"><code>--stats T|F</code> – Rather than the spectrum, output summary statistics to standard output. Each statistic is placed on a separate line, in the format <name>:<value> (e.g. "TIC:1000.0").<br>The following statistics are reported for the entire spectrum:<ul><li>Precursor m/z</li><li>Total Ion Current</li><li>Base Peak Intensity</li><li>Number of peaks</li><li>Minimum m/z</li><li>Maximum m/z</li></ul>In addition, for each possible spectrum charge state, t [...]
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search parameters</h3>
+<ul>
+  <li class="nobullet"><code>--scan-number <string></code> – A single scan number or a range of numbers to be searched. Range should be specified as 'first-last' which will include scans 'first' and 'last'. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--remove-precursor-tolerance <float></code> – This parameter specifies the tolerance (in Th) around each precursor m/z that is removed when the --remove-precursor-peak option is invoked. Default = <code>1.5</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+  <li class="nobullet"><code>--use-z-line T|F</code> – Specify whether, when parsing an MS2 spectrum file, Crux obtains the precursor mass information from the "S" line or the "Z" line.  Default = <code>true</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/glossary.html b/doc/user/glossary.html
new file mode 100644
index 0000000..998f042
--- /dev/null
+++ b/doc/user/glossary.html
@@ -0,0 +1,165 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux glossary</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="index.html">Home</a></li>
+			    <li><a href="download.html">Download</a></li>
+			    <li><a href="fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		  <h2>Crux glossary</h2>
+
+		  <h3>Mass spectrometry terminology</h3>
+
+		  <ul>
+
+		    <li><b>c-term peptide</b>: The last peptide in the protein,
+		      occurring at the c-terminal end of the protein.</li>
+		    
+		    <li><b>decoy peptide</b>: A shuffled, reversed or randomly
+		      generated peptide sequence. Matches to decoy peptides are used
+		      for two purposes: to estimate statistical confidence measures
+		      such as the false discovery rate, and to train machine learning
+		      methods to recognize correctly identified spectra.</li>
+
+		    <li><b>modification</b>: A chemical modification of a single amino
+		      acid, typically corresponding to the addition of a molecular
+		      group to the amino acid side chain.</li>
+		    
+		    <li><b>n-term peptide</b>: The first peptide in the protein,
+		      occurring at the n-terminal end of the protein.</li>
+		    
+		    <li><b>peptide</b>: A subsequence of a protein.</li>
+		    
+		    <li><b>peptide-spectrum match (PSM)</b>: An observed spectrum
+		      paired with a peptide sequence, along with a score quantifying
+		      the quality of the match.</li>
+
+		    <li><b>static modification</b>: A chemical modification of a
+		      single amino that is expected to occur on every instance of that
+		      amino acid.  A common example is carbamidomethylation of
+		      cysteine, which adds 57.02146 Da to the mass of every
+		      cysteine.</li>
+
+		    <li><b>target peptide</b>: A real peptide, usually drawn from a
+		      protein database.</li>
+
+		    <li><b>trypsin</b>: An enzyme used to cleave a protein into
+		      peptides.</li>
+		    
+		    <li><b>variable modification</b>: A chemical modification of a
+		      single amino that is expected to occur on some instances of that
+		      amino acid but not others.  A common example is phosphorylation
+		      of serine, threonine or tyrosine, which adds a mass of 79.966331
+		      Da to each of those amino acids.</li>
+
+		  </ul>
+
+		  <h3>Analysis terminology</h3>
+
+		  <ul>
+
+		  <li><b>false discovery rate (FDR)</b>: Estimated proportion of
+		    incorrectly identifications among a set of PSMs, peptides or
+		    proteins.</li>
+
+		  <li><b>support vector machine (SVM)</b>: A machine learning method
+		    that learns to classify data objects into two groups.</li>
+
+		  </ul>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/hardklor.html b/doc/user/hardklor.html
new file mode 100644
index 0000000..fc8f219
--- /dev/null
+++ b/doc/user/hardklor.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>hardklor</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>hardklor</h1>
+<h2>Usage:</h2>
+<p><code>crux hardklor [options] <spectra></code></p>
+<h2>Description:</h2>
+<p>Hardklör analyzes high-resolution mass spectra, identifying protein or peptide isotope distributions and determining the corresponding monoisotopic masses and charge states. The algorithm aims to identify persistence peptide isotope distribution (PPIDs), i.e., isotope distributions that recur over multiple scans. Hardklör is specifically designed to handle overlapping isotope distributions in a single spectrum. A detailed description of the Hardklör algorithm is given i [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>spectra</code> – The name of a file from which to parse high-resolution spectra. The file may be in MS1 (.ms1), binary MS1 (.bms1), compressed MS1 (.cms1), or mzXML (.mzXML) format.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>hardklor.mono.txt</code> – a tab-delimited text file containing one line for each isotope distribution. The columns appear in the following order:<ol><li><strong>scan</strong>: The scan number assigned to this spectrum in the input file.</li><li><strong>retention time</strong>: The time (in seconds) at which the spectrum was collected.</li><li><strong>mass</strong>: The uncharged monoisotopic mass of the protein or peptide.</li><li><strong>charge</strong>: The inferred  [...]
+  <li><code>hardklor.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>hardklor.log.txt</code> – a log file containing a copy of all messages that were printed to stderr.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>hardklor options</h3>
+<ul>
+  <li class="nobullet"><code>--hardklor-algorithm basic|version1|version2</code> – Determines which spectral feature detection algorithm to use. Different results are possible with each algorithm, and there are pros and cons to each. There are three algorithms to choose from:<ul><li>basic – Performs unoptimized deconvolution and is provided for legacy purposes only.</li><li>version1 – Uses the optimizations developed during the 1.0+ series. It is very accurate, but has  [...]
+  <li class="nobullet"><code>--averagine-mod <string></code> – Defines alternative averagine models in the analysis that incorporate additional atoms and/or isotopic enrichments. Modifications are represented as text strings. Inclusion of additional atoms in the model is done using by entering an atomic formula, such as: PO2 or Cl. Inclusion of isotopic enrichment to the model is done by specifying the percent enrichment (as a decimal) followed by the atom being enriched and  [...]
+  <li class="nobullet"><code>--boxcar-averaging <integer></code> – Boxcar averaging is a sliding window that averages n adjacent spectra prior to feature detection. Averaging generally improves the signal-to-noise ratio of features in the spectra, as well as improving the shape of isotopic envelopes. However, averaging will also change the observed peak intensities. Averaging with too wide a window will increase the occurrence of overlapping features and broaden the chromatog [...]
+  <li class="nobullet"><code>--boxcar-filter <integer></code> – This parameter is only functional when boxcar-averaging is used. The filter will remove any peaks not seen in n scans in the boxcar window. The effect is to reduce peak accumulation due to noise and reduce chromatographic broadening of peaks. Caution should be used as over-filtering can occur. The suggested number of scans to set for filtering should be equal to or less than the boxcar-averaging window size. A va [...]
+  <li class="nobullet"><code>--boxcar-filter-ppm <float></code> – This parameter is only functional when boxcar-filter is used. The value specifies the mass tolerance in ppm for declaring a peak the same prior to filtering across all scans in the boxcar window. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--centroided T|F</code> – Indicates whether the data contain profile or centroided peaks. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--cdm B|F|P|Q|S</code> – Choose the charge state determination method. There are five methods to choose from:<ul><li>B – Basic method, assume all charge states are possible.</li><li>F – Fast Fourier transform.</li><li>P – Patterson algorithm.</li><li>Q – QuickCharge method, uses inverse peak distances.</li><li>S – Senko method, or combined Fast Fourier Transform and Patterson algorithm.</li></ul> Default = <code>Q</code>.</li>
+  <li class="nobullet"><code>--min-charge <integer></code> – Specifies the minimum charge state to allow when finding spectral features. It is best to set this value to the lowest assumed charge state to be present. If set higher than actual charge states that are present, those features will not be identified or incorrectly assigned a different charge state and mass. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--max-charge <integer></code> – Specifies the maximum charge state to allow when finding spectral features. It is best to set this value to a practical number (i.e. do not set it to 20 when doing a tryptic shotgun analysis). If set higher than actual charge states that are present, the algorithm will perform significantly slower without any improvement in results. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--corr <float></code> – Sets the correlation threshold (cosine similarity) for accepting each predicted feature. Default = <code>0.85</code>.</li>
+  <li class="nobullet"><code>--depth <integer></code> – Sets the depth of combinatorial analysis. For a given set of peaks in a spectrum, search for up to this number of combined peptides that explain the observed peaks. The analysis stops before depth is reached if the current number of deconvolved features explains the observed peaks with a correlation score above the threshold defined with the correlation parameter. Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--distribution-area T|F</code> – When reporting each feature, report abundance as the sum of all isotope peaks. The value reported is the estimate of the correct peak heights based on the averagine model scaled to the observed peak heights. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--hardklor-data-file <string></code> – Specifies an ASCII text file that defines symbols for the periodic table. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--instrument fticr|orbitrap|tof|qit</code> – Indicates the type of instrument used to collect data. This parameter, combined with the resolution parameter, define how spectra will be centroided (if you provide profile spectra) and the accuracy when aligning observed peaks to the models. Default = <code>fticr</code>.</li>
+  <li class="nobullet"><code>--isotope-data-file <string></code> – Specifies an ASCII text file that can be read to override the natural isotope abundances for all elements. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--max-features <integer></code> – Specifies the maximum number of models to build for a set of peaks being analyzed. Regardless of the setting, the number of models will never exceed the number of peaks in the current set. However, as many of the low abundance peaks are noise or tail ends of distributions, defining models for them is detrimental to the analysis. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--mzxml-filter <integer></code> – Filters the spectra prior to analysis for the requested MS/MS level. For example, if the data contain MS and MS/MS spectra, setting mzxml-filter = 1 will analyze only the MS scan events. Setting mzxml-filter = 2 will analyze only the MS/MS scan events. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--mz-max <float></code> – Constrains the search in each spectrum to signals below this value in Thomsons. Setting to 0 disables this feature. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--mz-min <float></code> – Constrains the search in each spectrum to signals above this value in Thomsons. Setting to 0 disables this feature. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--mz-window <float></code> – Only used when algorithm = version1. Defines the maximum window size in Thomsons to analyze when deconvolving peaks in a spectrum into features. Default = <code>4</code>.</li>
+  <li class="nobullet"><code>--resolution <float></code> – Specifies the resolution of the instrument at 400 m/z for the data being analyzed. Default = <code>100000</code>.</li>
+  <li class="nobullet"><code>--scan-range-max <integer></code> – Used to restrict analysis to spectra with scan numbers below this parameter value. A value of 0 disables this feature. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--scan-range-min <integer></code> – Used to restrict analysis to spectra with scan numbers above this parameter value. A value of 0 disables this feature. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--sensitivity <integer></code> – Set the sensitivity level. There are four levels: 0 (low), 1 (moderate), 2 (high), and 3 (max). Increasing the sensitivity will increase computation time, but will also yield more isotope distributions. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--signal-to-noise <float></code> – Filters spectra to remove peaks below this signal-to-noise ratio prior to finding features. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--smooth <integer></code> – Uses Savitzky-Golay smoothing on profile peak data prior to centroiding the spectra. This parameter is recommended for low resolution spectra only. Smoothing data causes peak depression and broadening. Only use odd numbers for the degree of smoothing (as it defines a window centered on each data point). Higher values will produce smoother peaks, but with greater depression and broadening. Setting this parameter to 0 dis [...]
+  <li class="nobullet"><code>--sn-window <float></code> – Set the signal-to-noise window length (in m/z). Because noise may be non-uniform across a spectrum, this value adjusts the segment size considered when calculating a signal-over-noise ratio. Default = <code>250</code>.</li>
+  <li class="nobullet"><code>--static-sn T|F</code> – Applies the lowest noise threshold of any sn_window across the entire mass range for a spectrum. Setting this parameter to 0 turns off this feature, and different noise thresholds will be used for each local mass window in a spectrum. Default = <code>true</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/images/crux-logo-skyline.png b/doc/user/images/crux-logo-skyline.png
new file mode 100644
index 0000000..35925e5
Binary files /dev/null and b/doc/user/images/crux-logo-skyline.png differ
diff --git a/doc/user/images/crux-logo-text.png b/doc/user/images/crux-logo-text.png
new file mode 100644
index 0000000..9734858
Binary files /dev/null and b/doc/user/images/crux-logo-text.png differ
diff --git a/doc/user/images/crux-logo.png b/doc/user/images/crux-logo.png
new file mode 100644
index 0000000..4630dfb
Binary files /dev/null and b/doc/user/images/crux-logo.png differ
diff --git a/doc/user/images/hamburger-menu.png b/doc/user/images/hamburger-menu.png
new file mode 100644
index 0000000..31aff54
Binary files /dev/null and b/doc/user/images/hamburger-menu.png differ
diff --git a/doc/user/images/linkicon.png b/doc/user/images/linkicon.png
new file mode 100644
index 0000000..b882099
Binary files /dev/null and b/doc/user/images/linkicon.png differ
diff --git a/doc/user/images/schematic.png b/doc/user/images/schematic.png
new file mode 100644
index 0000000..f151dfd
Binary files /dev/null and b/doc/user/images/schematic.png differ
diff --git a/doc/user/images/stored-xcorr.png b/doc/user/images/stored-xcorr.png
new file mode 100644
index 0000000..a341958
Binary files /dev/null and b/doc/user/images/stored-xcorr.png differ
diff --git a/doc/user/images/tutorialicon.png b/doc/user/images/tutorialicon.png
new file mode 100644
index 0000000..4b9a603
Binary files /dev/null and b/doc/user/images/tutorialicon.png differ
diff --git a/doc/user/index.html b/doc/user/index.html
new file mode 100644
index 0000000..a092a8e
--- /dev/null
+++ b/doc/user/index.html
@@ -0,0 +1,390 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux tandem mass spectrometry analysis software</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+<!--(index.html only) Start JS function for dynamically resizing the image map that links elements on schematic.png-->
+<script type="text/javascript">
+window.onload = function () {
+    var ImageMap = function (map, img) {
+		var n,
+			areas = map.getElementsByTagName('area'),
+			len = areas.length,
+			coords = [],
+			previousWidth = 1125; // width of original schematic.png
+		for (n = 0; n < len; n++) {
+			coords[n] = areas[n].coords.split(',');
+		}
+		this.resize = function () {
+			var n, m, clen,
+				x = img.offsetWidth / previousWidth;
+			for (n = 0; n < len; n++) {
+				clen = coords[n].length;
+				for (m = 0; m < clen; m++) {
+					coords[n][m] *= x;
+				}
+				areas[n].coords = coords[n].join(',');
+			}
+			previousWidth = img.width;
+			return true;
+		};
+		window.onresize = this.resize;
+	}
+
+	imageMap = new ImageMap(document.getElementById('schematic_map'), document.getElementById('schematic_image'));
+	imageMap.resize();
+}
+</script>
+<!--(index.html only) End JS -->
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="index.html">Home</a></li>
+			    <li><a href="download.html">Download</a></li>
+			    <li><a href="fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<div id="schematic">
+			<img id="schematic_image" src="images/schematic.png" usemap="#commands-files" border="0" width="100%" alt="" />
+			<map name="commands-files" id="schematic_map">
+			  <area shape="rect" coords="253,135,349,169" alt="tide-index" href="commands/tide-index.html">
+			  <area shape="rect" coords="260,247,342,278" alt="bullseye" href="commands/bullseye.html">
+			  <area shape="rect" coords="510,100,612,132" alt="tide-search" href="commands/tide-search.html">
+			  <area shape="rect" coords="528,191,595,222" alt="comet" href="commands/comet.html">
+			  <area shape="rect" coords="512,281,613,335" alt="search-for-xlinks" href="commands/search-for-xlinks.html">
+			  <area shape="rect" coords="776,100,873,132" alt="percolator" href="commands/percolator.html">
+			  <area shape="rect" coords="791,160,861,192" alt="barista" href="commands/barista.html">
+			  <area shape="rect" coords="783,222,866,252" alt="q-ranker" href="commands/q-ranker.html">
+			  <area shape="rect" coords="784,281,867,334" alt="spectral-counts" href="commands/spectral-counts.html">
+			</map>
+			<img src="images/crux-logo.png" style="width:200px; float:left; padding:10px;">
+			<p>The Crux mass spectrometry analysis toolkit is an open source project that aims to provide users with a cross-platform suite of analysis tools for interpreting protein mass spectrometry data.  The toolkit includes several search engines for both standard and cross-linked database search, as well as a variety of pre- and post-processing engines for assigning high-resolution precursor masses to spectra, assigning statistical confidence estimates to spectra, peptides and proteins, and [...]
+			<br />
+			<span class="indentcitation">Christopher Y. Park, Aaron A. Klammer, Lukas Käll, Michael
+			J. MacCoss and William Stafford
+			Noble.  <a href="http://noble.gs.washington.edu/papers/park2008rapid.html">"Rapid
+			and accurate peptide identification from tandem mass spectra."</a>
+			<i>Journal of Proteome Research.</i> 7(7):3022-3027, 2008.</li></span>
+			<br /><br />
+		
+			For a more up-to-date description of Crux, please read:<br />
+
+			<span class="indentcitation">Sean McIlwain, Kaipo Tamura, Attila Kertesz-Farkas,
+			Charles E.  Grant, Benjamin Diament, Barbara Frewen, J. Jeffry
+			Howbert, Michael R. Hoopmann, Lukas Käll, Jimmy K. Eng, Michael
+			J. MacCoss and William Stafford
+			Noble.  <a href="http://pubs.acs.org/doi/abs/10.1021/pr500741y">"Crux:
+			rapid open source protein tandem mass spectrometry
+			analysis."</a> <i>Journal of Proteome Research.</i>
+			13(10):4488-4491, 2014.</span>
+			</p>
+		</div>
+
+
+		<br />
+		<p/>
+		Crux is provided as a single executable that supports the following
+		commands:</p>
+		<table id="commandstable">
+
+			<tr>
+			<td colspan="2"><b>Primary commands</b></td>
+			</tr>
+
+			<tr>
+			<td><a href="commands/bullseye.html">bullseye</a></td>
+			<td>Assign high resolution precursor m/z values to MS/MS data using the Hardklör algorithm.
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/tide-index.html">tide-index</a></td>
+			<td>
+			Create an index of all peptides in a fasta file, for use in subsequent
+			calls to <code>tide-search</code>.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/tide-search.html">tide-search</a></td>
+			<td>
+			Search a collection of spectra against a sequence database, provided
+			either as a FASTA file or an index, returning a collection of
+			peptide-spectrum matches (PSMs).  This is a fast search engine, but it
+			runs most quickly if provided with a peptide index built
+			with <code>tide-index</code>.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/cascade-search.html">cascade-search</a></td>
+			<td>
+			An iterative procedure for incorporating information about peptide
+			groups into the database search and confidence estimation
+			procedure.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/comet.html">comet</a></td>
+			<td>
+			Search a collection of spectra against a sequence database, returning
+			a collection of PSMs.  This search engine runs directly on a protein
+			database in FASTA format.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/percolator.html">percolator</a></td>
+			<td>
+			Re-rank and assign confidence estimates to a collection of PSMs using
+			the Percolator algorithm.  Optionally, also produce protein rankings
+			using the Fido algorithm.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/q-ranker.html">q-ranker</a></td>
+			<td>
+			Re-rank a collection of PSMs using the Q-ranker algorithm.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/barista.html">barista</a></td>
+			<td>
+			Rank PSMs, peptides and proteins, assigning a confidence measure to each
+			identification.</td></tr> 
+
+			<tr>
+			<td>
+			<a href="commands/search-for-xlinks.html">search-for-xlinks</a></td>
+			<td>
+			Search a collection of spectra against a sequence database, finding
+			cross-linked peptide matches.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/spectral-counts.html">spectral-counts</a></td>
+			<td>
+			Quantify peptides or proteins using one of three spectral counting
+			methods.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/pipeline.html">pipeline</a></td>
+			<td>
+			Given one or more sets of tandem mass spectra as well as a protein
+			database, this command runs a series of Crux tools and reports all of
+			the results in a single output directory. 
+			</td></tr>
+
+			<tr>
+			<td colspan="2"><b>Utilities</b></td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/assign-confidence.html">assign-confidence</a></td>
+			<td>
+			Assign statistical confidence measures to each PSM in a given set.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/generate-peptides.html">generate-peptides</a></td>
+			<td>
+			Extract from a given set of protein sequences a list of target and
+			decoy peptides fitting the specified criteria.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/get-ms2-spectrum.html">get-ms2-spectrum</a></td>
+			<td>
+			Extract one or more fragmentation spectra, specified by scan number, from
+			an <code>MS2</code> file.</td>
+			</tr>
+
+			<tr>
+			<td><a href="commands/hardklor.html">hardklör</a></td>
+			<td>Identify isotopic distributions from high-resolution mass spectra.</td>
+			</tr>
+
+			<tr>
+			<td><a href="commands/make-pin.html">make-pin</a></td>
+			<td>Given a set of search results files, generate a pin file for input to
+			<code>crux percolator</code></td>
+			</tr>
+
+      <tr>
+      <td><a href="commands/param-medic.html">param-medic</a></td>
+      <td>Examine the spectra in a file to estimate the best precursor
+      and fragment error tolerances for database search.</td>
+      </tr>
+
+			<tr>
+			<td>
+			<a href="commands/predict-peptide-ions.html">predict-peptide-ions</a></td>
+			<td>
+			Given a peptide and a charge state, predict the m/z values of the
+			resulting fragment ions.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/print-processed-spectra.html">print-processed-spectra</a></td>
+			<td>
+			Process spectra as for scoring xcorr and print the results to a file.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/psm-convert.html">psm-convert</a></td>
+			<td>
+			Convert a file containing peptide-spectrum matches (PSMs) from one
+			format to another.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/subtract-index.html">subtract-index</a></td>
+			<td>Subtract one index file from another, assuming both were generated
+			by tide-index.</td></tr>
+
+			<tr>
+			<td>
+			<a href="commands/xlink-assign-ions.html">xlink-assign-ions</a></td>
+			<td>Given a spectrum and a pair of cross-linked peptides, assign theoretical
+			ion type labels to peaks in the observed spectrum.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/xlink-score-spectrum.html">xlink-score-spectrum</a></td>
+			<td>Takes a defined cross-linked peptide, a spectra file, and a scan number,
+			and will calculate the XCorr score a number of different ways.</td>
+			</tr>
+
+			<tr>
+			<td>
+			version</td>
+			<td>
+			Print the Crux version number to standard output, then exit.</td>
+			</tr>
+
+			<tr>
+			<td colspan="2"><b>Utilities for processing tab-delimited text files</b>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/extract-columns.html">extract-columns</a></td>
+			<td>Print specified columns from a tab-delimited file.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/extract-rows.html">extract-rows</a></td>
+			<td>Print specified rows from a tab-delimited file.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/stat-column.html">stat-column</a></td>
+			<td>Collect summary statistics from a column in a tab-delimited file.</td>
+			</tr>
+
+			<tr>
+			<td>
+			<a href="commands/sort-by-column.html">sort-by-column</a></td>
+			<td>Sort a tab-delimited file by a column.</td>
+			</tr>
+
+		</table>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/make-pin.html b/doc/user/make-pin.html
new file mode 100644
index 0000000..dbf3496
--- /dev/null
+++ b/doc/user/make-pin.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>make-pin</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>make-pin</h1>
+<h2>Usage:</h2>
+<p><code>crux make-pin [options] <target input></code></p>
+<h2>Description:</h2>
+<p>Make-pin is a utility program that combines a collection of target and decoy peptide-spectrum matches (PSMs) into a single file in pin format, according to <a href="https://github.com/percolator/percolator/wiki/Interface">this format</a>. The resulting file can be provided as input to <code><a href="percolator.html">crux percolator</a></code>.</p><p><code>make-pin</code> requires as input two sets of PSMs, one set derived from matching observed spectra against real ("target" [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>target input</code> – One or more files, each containing a collection of peptide-spectrum matches (PSMs) in <a href="../file-formats/txt-format.html">tab-delimited text</a>, <a href="http://tools.proteomecenter.org/wiki/index.php?title=Formats:pepXML">PepXML</a>, or <a href="http://www.psidev.info/mzidentml">mzIdentML</a> format. In tab-delimited text format, only the specified score column is required. However if --estimation-method is tdc, then the columns "scan" and  [...]
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>make-pin.pin</code> – a tab-delimited file containing the input target and decoy PSMs in pin format. This file can be changed to an absolute path (see --output-file option).</li>
+  <li><code>make-pin.params.txt</code> – a file containing the name and value of all parameters for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>make-pin.log.txt</code> – a log file containing a copy of all messages that were printed to standard error.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--top-match <integer></code> – Specify the number of matches to report for each spectrum. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--list-of-files T|F</code> – Specify that the search results are provided as lists of files, rather than as individual files. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--output-file <string></code> – Path where pin file will be written instead of make-pin.pin. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/mstoolkit.html b/doc/user/mstoolkit.html
new file mode 100644
index 0000000..06696e6
--- /dev/null
+++ b/doc/user/mstoolkit.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>MSToolKit</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="index.html">Home</a></li>
+			    <li><a href="download.html">Download</a></li>
+			    <li><a href="fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>MSToolkit</h2>
+		<p>
+		MSToolkit is a library for handling mass spectrometry data in various file
+		formats. Crux is capable of using MSToolkit to parse spectrum files. The
+		ProteoWizard parser is used by default, but the MSToolkit parser can be used by
+		commands that support the <span class="code">spectrum-parser</span> parameter.
+		</p>
+		<p>
+		The following is a list of spectrum file formats supported by MSToolkit.
+		</p>
+		<ul>
+		<li>MS1/CMS1/BMS1</li>
+		<li><a href="file-formats/ms2-format.html">MS2</a>/CMS2/BMS2</li>
+		<li>ZS</li>
+		<li>UZS</li>
+		<li>MSMAT</li>
+		<li>RAW</li>
+		<li><a href="http://tools.proteomecenter.org/wiki/index.php?title=Formats:mzXML">MZXML[.GZ]</a></li>
+		<li>MZ5</li>
+		<li><a href="http://www.psidev.info/mzml_1_0_0">MZML[.GZ]</a></li>
+		<li><a href="http://www.matrixscience.com/help/data_file_help.html">MGF</a> (Mascot Generic Format)</li>
+		<li>SQLITE3</li>
+		<li>PSM</li>
+		</ul>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/param-medic.html b/doc/user/param-medic.html
new file mode 100644
index 0000000..894cd35
--- /dev/null
+++ b/doc/user/param-medic.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>param-medic</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>param-medic</h1>
+<h2>Usage:</h2>
+<p><code>crux param-medic [options] <spectrum-file>+</code></p>
+<h2>Description:</h2>
+<p>Examine the spectra in a file to estimate the best precursor and fragment error tolerances for database search.</p>
+<h2>Input:</h2>
+<ul>
+  <li><code>spectrum-file+</code> – File from which to parse fragmentation spectra.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – the estimated parameter values for precursor mass tolerance (in ppm) and fragment bin size (in Th), as well as the standard deviations of the estimated error distributions for precursor and fragment masses.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>param-medic options</h3>
+<ul>
+  <li class="nobullet"><code>--pm-min-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>400</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-frag-mz <float></code> – Minimum fragment m/z value to use in measurement error estimation. Default = <code>150</code>.</li>
+  <li class="nobullet"><code>--pm-max-frag-mz <float></code> – Maximum fragment m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-scan-frag-peaks <integer></code> – Minimum fragment peaks an MS/MS scan must contain to be used in measurement error estimation. Default = <code>40</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-delta-ppm <float></code> – Maximum ppm distance between precursor m/z values to consider two scans potentially generated by the same peptide for measurement error estimation. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--pm-charge <integer></code> – Precursor charge state to consider MS/MS spectra from, in measurement error estimation. Ideally, this should be the most frequently occurring charge state in the given data. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--pm-top-n-frag-peaks <integer></code> – Number of most-intense fragment peaks to consider for measurement error estimation, per MS/MS spectrum. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--pm-pair-top-n-frag-peaks <integer></code> – Number of fragment peaks per spectrum pair to be used in fragment error estimation. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--pm-min-common-frag-peaks <integer></code> – Number of the most-intense peaks that two spectra must share in order to potentially be generated by the same peptide, for measurement error estimation. Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--pm-max-scan-separation <integer></code> – Maximum number of scans two spectra can be separated by in order to be considered potentially generated by the same peptide, for measurement error estimation. Default = <code>1000</code>.</li>
+  <li class="nobullet"><code>--pm-min-peak-pairs <integer></code> – Minimum number of peak pairs (for precursor or fragment) that must be successfully paired in order to attempt to estimate measurement error distribution. Default = <code>100</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/param-table.html b/doc/user/param-table.html
new file mode 100644
index 0000000..ae72dd0
--- /dev/null
+++ b/doc/user/param-table.html
@@ -0,0 +1,678 @@
+<!DOCTYPE HTML>
+<html><head><meta charset="UTF-8">
+<title>Crux parameters</title>
+<link href="../crux.css" rel="styleSheet" type="text/css"></head>
+<body><h1>Crux parameters</h1>
+<table border="1" align="center">
+<tr><td> </td><td>assign-confidence</td><td>barista</td><td>cascade-search</td><td>comet</td><td>create-docs</td><td>bullseye</td><td>hardklor</td><td>extract-columns</td><td>extract-rows</td><td>generate-peptides</td><td>get-ms2-spectrum</td><td>make-pin</td><td>param-medic</td><td>percolator</td><td>pipeline</td><td>predict-peptide-ions</td><td>print-processed-spectra</td><td>psm-convert</td><td>q-ranker</td><td>read-tide-index</td><td>search-for-xlinks</td><td>sort-by-column</td> [...]
+<tr bgcolor="#DEDEDE">
+<td>estimation-method</td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>decoy-prefix</td><td>✓</td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>score</td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>sidak</td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>verbosity</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td> [...]
+<tr>
+<td>parameter-file</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>overwrite</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>output-dir</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>list-of-files</td><td>✓</td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>combine-charge-states</td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>combine-modified-peptides</td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>fileroot</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>enzyme</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>separate-searches</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>pepxml-output</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>txt-output</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>skip-cleanup</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>re-run</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use-spec-features</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>feature-file-out</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>optimization</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>spectrum-parser</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>q-value-threshold</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>precursor-window</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>auto-precursor-window</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>precursor-window-type</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>spectrum-min-mz</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>spectrum-max-mz</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>min-peaks</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>spectrum-charge</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>scan-number</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>store-spectra</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>store-index</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>concat</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>compute-sp</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>remove-precursor-peak</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>remove-precursor-tolerance</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>print-search-progress</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use-z-line</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>sqt-output</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>mzid-output</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>pin-output</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>file-column</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>exact-p-value</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use-neutral-loss-peaks</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>use-flanking-peaks</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td></tr>
+<tr bgcolor="#DEDEDE">
+<td>mz-bin-width</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td></tr>
+<tr>
+<td>auto-mz-bin-width</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>mz-bin-offset</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>max-precursor-charge</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>peptide-centric-search</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>isotope-error</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>skip-preprocessing</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>num-threads</td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>pm-min-precursor-mz</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>pm-max-precursor-mz</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>pm-min-frag-mz</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>pm-max-frag-mz</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>pm-min-scan-frag-peaks</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>pm-max-precursor-delta-ppm</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>pm-charge</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>pm-top-n-frag-peaks</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>pm-pair-top-n-frag-peaks</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>pm-min-common-frag-peaks</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>pm-max-scan-separation</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr>
+<td>pm-min-peak-pairs</td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>decoy_search</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>num_threads</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>peptide_mass_tolerance</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>auto_peptide_mass_tolerance</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>peptide_mass_units</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>mass_type_parent</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>mass_type_fragment</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>precursor_tolerance_type</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>isotope_error</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>search_enzyme_number</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>num_enzyme_termini</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>allowed_missed_cleavage</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>fragment_bin_tol</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>fragment_bin_offset</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>auto_fragment_bin_tol</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>theoretical_fragment_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use_A_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>use_B_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use_C_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>use_X_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use_Y_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>use_Z_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use_NL_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>output_sqtfile</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>output_txtfile</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>output_pepxmlfile</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>output_percolatorfile</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>output_outfiles</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>print_expect_score</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>num_output_lines</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>show_fragment_ions</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>sample_enzyme_number</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>scan_range</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>precursor_charge</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>override_charge</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>ms_level</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>activation_method</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>digest_mass_range</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>num_results</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>skip_researching</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>max_fragment_charge</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>max_precursor_charge</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>nucleotide_reading_frame</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>clip_nterm_methionine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>spectrum_batch_size</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>decoy_prefix</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>output_suffix</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>mass_offsets</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>minimum_peaks</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>minimum_intensity</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>remove_precursor_peak</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>remove_precursor_tolerance</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>clear_mz_range</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>variable_mod01</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>variable_mod02</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>variable_mod03</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>variable_mod04</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>variable_mod05</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>variable_mod06</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>variable_mod07</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>variable_mod08</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>variable_mod09</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>max_variable_mods_in_peptide</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>require_variable_mod</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_Cterm_peptide</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_Nterm_peptide</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_Cterm_protein</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_Nterm_protein</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_A_alanine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_B_user_amino_acid</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_C_cysteine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_D_aspartic_acid</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_E_glutamic_acid</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_F_phenylalanine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_G_glycine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_H_histidine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_I_isoleucine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_J_user_amino_acid</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_K_lysine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_L_leucine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_M_methionine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_N_asparagine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_O_ornithine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_P_proline</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_Q_glutamine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_R_arginine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_S_serine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_T_threonine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_U_selenocysteine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_V_valine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_W_tryptophan</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_X_user_amino_acid</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>add_Y_tyrosine</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>add_Z_user_amino_acid</td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>max-persist</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>exact-match</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>exact-tolerance</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>persist-tolerance</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>gap-tolerance</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>scan-tolerance</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>bullseye-max-mass</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>bullseye-min-mass</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>retention-tolerance</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>spectrum-format</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>hardklor-algorithm</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>averagine-mod</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>boxcar-averaging</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>boxcar-filter</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>boxcar-filter-ppm</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>centroided</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>cdm</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>min-charge</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>max-charge</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>corr</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>depth</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>distribution-area</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>hardklor-data-file</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>instrument</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>isotope-data-file</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>max-features</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>mzxml-filter</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>mz-max</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>mz-min</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>mz-window</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>resolution</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>scan-range-max</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>scan-range-min</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>sensitivity</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>signal-to-noise</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>smooth</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>sn-window</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>static-sn</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>delimiter</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>header</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>comparison</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>column-type</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>min-mass</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>max-mass</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>min-length</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>max-length</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>custom-enzyme</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>digestion</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>missed-cleavages</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>isotopic-mass</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>seed</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>clip-nterm-methionine</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>decoy-format</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>keep-terminal-aminos</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>stats</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>top-match</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>output-file</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>pout-output</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>feature-file-in</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>picked-protein</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>protein-enzyme</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>protein-report-fragments</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>protein-report-duplicates</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>protein</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>decoy-xml-output</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>subset-max-train</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>c-pos</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>c-neg</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>train-fdr</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>test-fdr</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>maxiter</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>quick-validation</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>output-weights</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>init-weights</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>default-direction</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>unitnorm</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>fido-alpha</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>fido-beta</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>fido-gamma</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>test-each-iteration</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>override</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>percolator-seed</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>klammer</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>only-psms</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>fido-empirical-protein-q</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>fido-gridsearch-depth</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>fido-gridsearch-mse-threshold</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>fido-fast-gridsearch</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>fido-protein-truncation-threshold</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>fido-no-split-large-components</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>tdc</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>search-input</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>bullseye</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>search-engine</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>post-processor</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>primary-ions</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>precursor-ions</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>isotope</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>flanking</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>max-ion-charge</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>fragment-mass</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td></tr>
+<tr>
+<td>nh3</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>h2o</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>stop-after</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>output-units</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>input-format</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>distinct-matches</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>protein-database</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use-old-xlink</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>xlink-include-linears</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>xlink-include-deadends</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>xlink-include-selfloops</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>xlink-include-inter</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>xlink-include-intra</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>xlink-include-inter-intra</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>xlink-prevents-cleavage</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>require-xlink-candidate</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>xlink-top-n</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>max-xlink-mods</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>mod</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>cmod</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>nmod</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>max-mods</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>precursor-window-weibull</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>precursor-window-type-weibull</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>min-weibull-points</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use-a-ions</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td></tr>
+<tr>
+<td>use-b-ions</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use-c-ions</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td></tr>
+<tr>
+<td>use-x-ions</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td></tr>
+<tr bgcolor="#DEDEDE">
+<td>use-y-ions</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td></tr>
+<tr>
+<td>use-z-ions</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td></tr>
+<tr bgcolor="#DEDEDE">
+<td>mod-mass-format</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>isotope-windows</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>compute-p-values</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>A</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>C</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>D</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>E</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>F</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>G</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>H</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>I</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>K</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>L</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>M</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>N</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>P</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>Q</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>R</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>S</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>T</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>V</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>W</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>Y</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>ascending</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>parsimony</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>threshold</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>threshold-type</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>input-ms2</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>unique-mapping</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>quant-level</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>measure</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>custom-threshold-name</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>custom-threshold-min</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>mzid-use-pass-threshold</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>precision</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td><td>✓</td><td> </td></tr>
+<tr>
+<td>peptide-list</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>mods-spec</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>cterm-peptide-mods-spec</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>nterm-peptide-mods-spec</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>min-mods</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>allow-dups</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr>
+<td>temp-dir</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td><td> </td><td> </td><td> </td></tr>
+<tr bgcolor="#DEDEDE">
+<td>xlink-score-method</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>✓</td></tr>
+</table></body></html>
diff --git a/doc/user/percolator.html b/doc/user/percolator.html
new file mode 100644
index 0000000..06119a2
--- /dev/null
+++ b/doc/user/percolator.html
@@ -0,0 +1,209 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>percolator</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>percolator</h1>
+<h2>Usage:</h2>
+<p><code>crux percolator [options] <peptide-spectrum matches></code></p>
+<h2>Description:</h2>
+<p>Percolator is a semi-supervised learning algorithm that dynamically learns to separate target from decoy peptide-spectrum matches (PSMs). The algorithm is described in this article:</p><blockquote> Lukas Käll, Jesse Canterbury, Jason Weston, William Stafford Noble and Michael J. MacCoss. <a href="http://noble.gs.washington.edu/papers/kall2007semi-supervised.html">"Semi-supervised learning for peptide identification from shotgun proteomics datasets."</a> <em>Nature Metho [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>peptide-spectrum matches</code> – A collection of target and decoy peptide-spectrum matches (PSMs). Input may be in one of five formats: PIN, SQT, pepXML, <a href="../file-formats/txt-format.html">Crux tab-delimited text</a>, or a list of files (when list-of-files=T). Note that if the input is provided as SQT, pepXML, or Crux tab-delimited text, then a PIN file will be generated in the output directory prior to execution.Crux determines the format of the input file by e [...]
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>percolator.target.proteins.txt</code> – a tab-delimited file containing the target protein matches. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.decoy.proteins.txt</code> – a tab-delimited file containing the decoy protein matches. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.target.peptides.txt</code> – a tab-delimited file containing the target peptide matches. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.decoy.peptides.txt</code> – a tab-delimited file containing the decoy peptide matches. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.target.psms.txt</code> – a tab-delimited file containing the target PSMs. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.decoy.psms.txt</code> – a tab-delimited file containing the decoy PSMs. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.params.txt</code> – a file containing the name and value of all parameters for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>percolator.pep.xml</code> – a file containing the PSMs in <a href="http://tools.proteomecenter.org/wiki/index.php?title=Formats:pepXML">pepXML format</a>. This file can be used as input to some of the tools in the <a href="http://tools.proteomecenter.org/wiki/index.php?title=Software:TPP">Transproteomic Pipeline</a>.</li>
+  <li><code>percolator.mzid</code> – a file containing the protein, peptide, and spectrum matches in <a href="http://www.psidev.info/mzidentml">mzIdentML format</a>.</li>
+  <li><code>percolator.log.txt</code> – a log file containing a copy of all messages that were printed to standard error.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Protein inference options</h3>
+<ul>
+  <li class="nobullet"><code>--picked-protein <string></code> – Use the picked protein-level FDR to infer protein probabilities, provide the fasta file as the argument to this flag. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--protein-enzyme no_enzyme|elastase|pepsin|proteinasek|thermolysin|trypsinp|chymotrypsin|lys-n|lys-c|arg-c|asp-n|glu-c|trypsin</code> – Type of enzyme Default = <code>trypsin</code>.</li>
+  <li class="nobullet"><code>--protein-report-fragments T|F</code> – By default, if the peptides associated with protein A are a proper subset of the peptides associated with protein B, then protein A is eliminated and all the peptides are considered as evidence for protein B. Note that this filtering is done based on the complete set of peptides in the database, not based on the identified peptides in the search results. Alternatively, if this option is set and if all of the ident [...]
+  <li class="nobullet"><code>--protein-report-duplicates T|F</code> – If multiple database proteins contain exactly the same set of peptides, then Percolator will randomly discard all but one of the proteins. If this option is set, then the IDs of these duplicated proteins will be reported as a comma-separated list. Not available for Fido. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Fido options</h3>
+<ul>
+  <li class="nobullet"><code>--protein T|F</code> – Use the Fido algorithm to infer protein probabilities. Must be true to use any of the Fido options. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fido-alpha <float></code> – Specify the probability with which a present protein emits an associated peptide. Set by grid search (see --fido-gridsearch-depth parameter) if not specified. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--fido-beta <float></code> – Specify the probability of the creation of a peptide from noise. Set by grid search (see --fido-gridsearch-depth parameter) if not specified. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--fido-gamma <float></code> – Specify the prior probability that a protein is present in the sample. Set by grid search (see --fido-gridsearch-depth parameter) if not specified. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--fido-empirical-protein-q T|F</code> – Estimate empirical p-values and q-values for proteins using target-decoy analysis. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fido-gridsearch-depth <integer></code> – Set depth of the grid search for alpha, beta and gamma estimation. The values considered, for each possible value of the --fido-gridsearch-depth parameter, are as follows:<ul><li>0: alpha = {0.01, 0.04, 0.09, 0.16, 0.25, 0.36, 0.5}; beta = {0.0, 0.01, 0.15, 0.025, 0.035, 0.05, 0.1}; gamma = {0.1, 0.25, 0.5, 0.75}.</li><li>1: alpha = {0.01, 0.04, 0.09, 0.16, 0.25, 0.36}; beta = {0.0, 0.01, 0.15, 0.025, 0.0 [...]
+  <li class="nobullet"><code>--fido-gridsearch-mse-threshold <float></code> – Q-value threshold that will be used in the computation of the MSE and ROC AUC score in the grid search. Default = <code>0.05</code>.</li>
+  <li class="nobullet"><code>--fido-fast-gridsearch <float></code> – Apply the specified threshold to PSM, peptide and protein probabilities to obtain a faster estimate of the alpha, beta and gamma parameters. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--fido-protein-truncation-threshold <float></code> – To speed up inference, proteins for which none of the associated peptides has a probability exceeding the specified threshold will be assigned probability = 0. Default = <code>0.01</code>.</li>
+  <li class="nobullet"><code>--fido-no-split-large-components T|F</code> – Do not approximate the posterior distribution by allowing large graph components to be split into subgraphs. The splitting is done by duplicating peptides with low probabilities. Splitting continues until the number of possible configurations of each subgraph is below 2^18 Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>General options</h3>
+<ul>
+  <li class="nobullet"><code>--only-psms T|F</code> – Do not remove redundant peptides; keep all PSMs and exclude peptide level probability. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--tdc T|F</code> – Use target-decoy competition to assign q-values and PEPs. When set to F, the mix-max method, which estimates the proportion pi0 of incorrect target PSMs, is used instead. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--search-input auto|separate|concatenated</code> – Specify the type of target-decoy search. Using 'auto', percolator attempts to detect the search type automatically.  Using 'separate' specifies two searches: one against target and one against decoy protein db. Using 'concatenated' specifies a single search on concatenated target-decoy protein db. Default = <code>auto</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>SVM training options</h3>
+<ul>
+  <li class="nobullet"><code>--subset-max-train <integer></code> – Only train Percolator on a subset of PSMs, and use the resulting score vector to evaluate the other PSMs. Recommended when analyzing huge numbers (>1 million) of PSMs. When set to 0, all PSMs are used for training as normal. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--c-pos <float></code> – Penalty for mistakes made on positive examples. If this value is set to 0, then it is set via cross validation over the values {0.1, 1, 10}, selecting the value that yields the largest number of PSMs identified at the q-value threshold set via the --test-fdr parameter. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--c-neg <float></code> – Penalty for mistake made on negative examples. If not specified, then this value is set by cross validation over {0.1, 1, 10}. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--train-fdr <float></code> – False discovery rate threshold to define positive examples in training. Default = <code>0.01</code>.</li>
+  <li class="nobullet"><code>--test-fdr <float></code> – False discovery rate threshold used in selecting hyperparameters during internal cross-validation and for reporting the final results. Default = <code>0.01</code>.</li>
+  <li class="nobullet"><code>--maxiter <integer></code> – Maximum number of iterations for training. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--quick-validation T|F</code> – Quicker execution by reduced internal cross-validation. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--test-each-iteration T|F</code> – Measure performance on test set each iteration. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--percolator-seed <string></code> – When given a unsigned integer value seeds the random number generator with that value. When given the string "time" seeds the random number generator with the system time. Default = <code>1</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>SVM feature input options</h3>
+<ul>
+  <li class="nobullet"><code>--output-weights T|F</code> – Output final weights to a file named "percolator.weights.txt". Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--init-weights <string></code> – Read initial weights from the given file (one per line). Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--default-direction <string></code> – In its initial round of training, Percolator uses one feature to induce a ranking of PSMs. By default, Percolator will select the feature that produces the largest set of target PSMs at a specified FDR threshold (cf. --train-fdr). This option allows the user to specify which feature is used for the initial ranking, using the name as a string from <a href="../file-formats/features.html">this table</a>. The name [...]
+  <li class="nobullet"><code>--unitnorm T|F</code> – Use unit normalization (i.e., linearly rescale each PSM's feature vector to have a Euclidean length of 1), instead of standard deviation normalization. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--override T|F</code> – By default, Percolator will examine the learned weights for each feature, and if the weight appears to be problematic, then percolator will discard the learned weights and instead employ a previously trained, static score vector. This switch allows this error checking to be overriden. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--klammer T|F</code> – Use retention time features calculated as in "Improving tandem mass spectrum identification using peptide retention time prediction across diverse chromatography conditions" by Klammer AA, Yi X, MacCoss MJ and Noble WS. (<em>Analytical Chemistry</em>. 2007 Aug 15;79(16):6111-8.). Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--txt-output T|F</code> – Output a tab-delimited results file to the output directory. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--pout-output T|F</code> – Output a Percolator <a href="https://github.com/percolator/percolator/blob/master/src/xml/percolator_out.xsd">pout.xml</a> format results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mzid-output T|F</code> – Output an mzIdentML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pepxml-output T|F</code> – Output a pepXML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--feature-file-out T|F</code> – Output the computed features in <a href="../file-formats/features.html">tab-delimited text format</a>. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--list-of-files T|F</code> – Specify that the search results are provided as lists of files, rather than as individual files. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--feature-file-in T|F</code> – When set to T, interpret the input file as a PIN file. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--decoy-xml-output T|F</code> – Include decoys (PSMs, peptides, and/or proteins) in the XML output. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--top-match <integer></code> – Specify the number of matches to report for each spectrum. Default = <code>5</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/pipeline.html b/doc/user/pipeline.html
new file mode 100644
index 0000000..0de721e
--- /dev/null
+++ b/doc/user/pipeline.html
@@ -0,0 +1,460 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>pipeline</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>pipeline</h1>
+<h2>Usage:</h2>
+<p><code>crux pipeline [options] <mass spectra>+ <peptide source></code></p>
+<h2>Description:</h2>
+<p>Given one or more sets of tandem mass spectra as well as a protein database, this command runs a series of Crux tools and reports all of the results in a single output directory. There are three steps in the pipeline:</p><ol><li><a href="bullseye.html">Bullseye</a> to assign high-resolution precursor m/z values to MS/MS data. This step is optional.</li><li>Database searching using either <a href="tide-search.html">Tide-search</a> or <a href="comet.html">Comet</a>. The database can be  [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>mass spectra+</code> – The name of the file(s) from which to parse the fragmentation spectra, in any of the <a href="http://proteowizard.sourceforge.net/tools.shtml">file formats supported by ProteoWizard</a>. Alteratively, with Tide-search, these files may be binary spectrum files produced by a previous run of <code>crux tide-search</code> using the <code>store-spectra</code> parameter.</li>
+  <li><code>peptide source</code> – Either the name of a file in fasta format from which to retrieve proteins and peptides or an index created by a previous run of <code>crux tide-index</code> (for Tide searching).</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>bullseye.pid.<format></code> – a file containing the fragmentation spectra for which accurate masses were successfully inferred. Unless otherwise specified (with the --spectrum-format option), the output file format is ".ms2". Note that if the output format is ".ms2," then a single spectrum may have multiple "Z" lines, each indicating a charge state and accurate mass. In addition, Bullseye inserts an "I" line (for charge-dependent analysis) corresponding to each "Z" lin [...]
+  <li><code>bullseye.no-pid.<format></code> – a file containing the fragmentation spectra for which accurate masses were not inferred.</li>
+  <li><code>hardklor.mono.txt</code> – a tab-delimited text file containing one line for each isotope distribution, as described <a href="hardklor.html">here</a>.</li>
+  <li><code>bullseye.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>bullseye.log.txt</code> – a log file containing a copy of all messages that were printed to standard error.</li>
+  <li><code>tide-search.target.txt</code> – a tab-delimited text file containing the target PSMs. See <a href="../file-formats/txt-format.html">txt file format</a> for a list of the fields.</li>
+  <li><code>tide-search.decoy.txt</code> – a tab-delimited text file containing the decoy PSMs. This file will only be created if the index was created with decoys.</li>
+  <li><code>tide-search.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other Crux programs.</li>
+  <li><code>tide-search.log.txt</code> – a log file containing a copy of all messages that were printed to the screen during execution.</li>
+  <li><code>comet.target.txt</code> – a tab-delimited text file containing the target PSMs. See <a href="../file-formats/txt-format.html">txt file format</a> for a list of the fields.</li>
+  <li><code>comet.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>comet.log.txt</code> – a log file containing a copy of all messages that were printed to standard error.</li>
+  <li><code>percolator.target.proteins.txt</code> – a tab-delimited file containing the target protein matches. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.decoy.proteins.txt</code> – a tab-delimited file containing the decoy protein matches. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.target.peptides.txt</code> – a tab-delimited file containing the target peptide matches. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.decoy.peptides.txt</code> – a tab-delimited file containing the decoy peptide matches. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.target.psms.txt</code> – a tab-delimited file containing the target PSMs. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.decoy.psms.txt</code> – a tab-delimited file containing the decoy PSMs. See <a href="../file-formats/txt-format.html">here</a> for a list of the fields.</li>
+  <li><code>percolator.params.txt</code> – a file containing the name and value of all parameters for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>percolator.pep.xml</code> – a file containing the PSMs in <a href="http://tools.proteomecenter.org/wiki/index.php?title=Formats:pepXML">pepXML format</a>. This file can be used as input to some of the tools in the <a href="http://tools.proteomecenter.org/wiki/index.php?title=Software:TPP">Transproteomic Pipeline</a>.</li>
+  <li><code>percolator.mzid</code> – a file containing the protein, peptide, and spectrum matches in <a href="http://www.psidev.info/mzidentml">mzIdentML format</a>.</li>
+  <li><code>percolator.log.txt</code> – a log file containing a copy of all messages that were printed to standard error.</li>
+  <li><code>assign-confidence.target.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited text file</a> that contains the targets, sorted by score. The file will contain one new column, named "<method> q-value", where <method> is either "tdc" or "mix-max".</li>
+  <li><code>assign-confidence.log.txt</code> – a log file containing a copy of all messages that were printed to stderr.</li>
+  <li><code>assign-confidence.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>pipeline options</h3>
+<ul>
+  <li class="nobullet"><code>--bullseye T|F</code> – Run the Bullseye algorithm on the given MS data, using it to assign high-resolution precursor values to the MS/MS data. If a spectrum file ends with .ms2 or .cms2, matching .ms1/.cms1 files will be used as the MS1 file. Otherwise, it is assumed that the spectrum file contains both MS1 and MS2 scans. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--search-engine comet|tide-search</code> – Specify which search engine to use. Default = <code>tide-search</code>.</li>
+  <li class="nobullet"><code>--post-processor percolator|assign-confidence|none</code> – Specify which post-processor to apply to the search results. Default = <code>percolator</code>.</li>
+  <li class="nobullet"><code>--estimation-method mix-max|tdc|peptide-level</code> – Specify the method used to estimate q-values.  The mix-max procedure or target-decoy competition apply to PSMs. The peptide-level option eliminates any PSM for which there exists a better scoring PSM involving the same peptide, and then uses decoys to assign confidence estimates. Default = <code>tdc</code>.</li>
+  <li class="nobullet"><code>--score <string></code> – Specify the column (for tab-delimited input) or tag (for XML input) used as input to the q-value estimation procedure. If this parameter is unspecified, then the program searches for "xcorr score", "evalue" (comet), "exact p-value" score fields in this order in the input file.  Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--sidak T|F</code> – Adjust the score using the Sidak adjustment and reports them in a new column in the output file. Note that this adjustment only makes sense if the given scores are p-values, and that it requires the presence of the "distinct matches/spectrum" feature for each PSM. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--combine-charge-states T|F</code> – Specify this parameter to T in order to combine charge states with peptide sequencesin peptide-centric search. Works only if estimation-method = peptide-level. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--combine-modified-peptides T|F</code> – Specify this parameter to T in order to treat peptides carrying different or no modifications as being the same. Works only if estimation = peptide-level. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Identifying PPIDs in MS1 spectra</h3>
+<ul>
+  <li class="nobullet"><code>--max-persist <float></code> – Ignore PPIDs that persist for longer than this length of time in the MS1 spectra. The unit of time is whatever unit is used in your data file (usually minutes). These PPIDs are considered contaminants. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--persist-tolerance <float></code> – Set the mass tolerance (+/-ppm) for finding PPIDs in consecutive MS1 scans. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--gap-tolerance <integer></code> – Allowed gap size when checking for PPIDs across consecutive MS1 scans. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--scan-tolerance <integer></code> – Total number of MS1 scans over which a PPID must be observed to be considered real. Gaps in persistence are allowed by setting --gap-tolerance. Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--bullseye-max-mass <float></code> – Only consider PPIDs below this maximum mass in daltons. Default = <code>8000</code>.</li>
+  <li class="nobullet"><code>--bullseye-min-mass <float></code> – Only consider PPIDs above this minimum mass in daltons. Default = <code>600</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Matching PPIDs to MS2 spectra</h3>
+<ul>
+  <li class="nobullet"><code>--exact-match T|F</code> – When true, require an exact match (as defined by --exact-tolerance) between the center of the precursor isolation window in the MS2 scan and the base isotopic peak of the PPID. If this option is set to false and no exact match is observed, then attempt to match using a wider m/z tolerance. This wider tolerance is calculated using the PPID's monoisotopic mass and charge (the higher the charge, the smaller the window). Default = [...]
+  <li class="nobullet"><code>--exact-tolerance <float></code> – Set the tolerance (+/-ppm) for --exact-match. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--retention-tolerance <float></code> – Set the tolerance (+/-units) around the retention time over which a PPID can be matches to the MS2 spectrum. The unit of time is whatever unit is used in your data file (usually minutes). Default = <code>0.5</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Precursor selection</h3>
+<ul>
+  <li class="nobullet"><code>--precursor-window <float></code> – Tolerance used for matching peptides to spectra. Peptides must be within +/- 'precursor-window' of the spectrum value. The precursor window units depend upon precursor-window-type. Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--auto-precursor-window false|warn|fail</code> – Automatically estimate optimal value for the precursor-window parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--precursor-window-type mass|mz|ppm</code> – Specify the units for the window that is used to select peptides around the precursor mass location (mass, mz, ppm). The magnitude of the window is defined by the precursor-window option, and candidate peptides must fall within this window. For the mass window-type, the spectrum precursor m+h value is converted to mass, and the window is defined as that mass +/- precursor-window. If the m+h value is not avail [...]
+  <li class="nobullet"><code>--max-precursor-charge <integer></code> – The maximum charge state of a spectra to consider in search. Default = <code>5</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search parameters</h3>
+<ul>
+  <li class="nobullet"><code>--spectrum-min-mz <float></code> – The lowest spectrum m/z to search in the ms2 file. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--spectrum-max-mz <float></code> – The highest spectrum m/z to search in the ms2 file. Default = <code>1e+09</code>.</li>
+  <li class="nobullet"><code>--min-peaks <integer></code> – The minimum number of peaks a spectrum must have for it to be searched. Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--spectrum-charge 1|2|3|all</code> – The spectrum charges to search. With 'all' every spectrum will be searched and spectra with multiple charge states will be searched once at each charge state. With 1, 2, or 3 only spectra with that charge state will be searched. Default = <code>all</code>.</li>
+  <li class="nobullet"><code>--scan-number <string></code> – A single scan number or a range of numbers to be searched. Range should be specified as 'first-last' which will include scans 'first' and 'last'. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--compute-sp T|F</code> – Compute the preliminary score Sp for all candidate peptides. Report this score in the output, along with the corresponding rank, the number of matched ions and the total number of ions. This option is recommended if results are to be analyzed by Percolator or Barista. If sqt-output is enabled, then compute-sp is automatically enabled and cannot be overridden. Note that the Sp computation requires re-processing each observed spe [...]
+  <li class="nobullet"><code>--remove-precursor-peak T|F</code> – If true, all peaks around the precursor m/z will be removed, within a range specified by the --remove-precursor-tolerance option. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--remove-precursor-tolerance <float></code> – This parameter specifies the tolerance (in Th) around each precursor m/z that is removed when the --remove-precursor-peak option is invoked. Default = <code>1.5</code>.</li>
+  <li class="nobullet"><code>--exact-p-value T|F</code> – Enable the calculation of exact p-values for the XCorr score as described in <a href="http://www.ncbi.nlm.nih.gov/pubmed/24895379">this article</a>. Calculation of p-values increases the running time but increases the number of identifications at a fixed confidence threshold. The p-values will be reported in a new column with header "exact p-value", and the "xcorr score" column will be replaced with a "refactored xcorr" colu [...]
+  <li class="nobullet"><code>--use-neutral-loss-peaks T|F</code> – Controls whether neutral loss ions are considered in the search. Two types of neutral losses are included and are applied only to singly charged b- and y-ions: loss of ammonia (NH3, 17.0086343 Da) and H2O (18.0091422). Each neutral loss peak has intensity 1/5 of the primary peak. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--use-flanking-peaks T|F</code> – Include flanking peaks around singly charged b and y theoretical ions. Each flanking peak occurs in the adjacent m/z bin and has half the intensity of the primary peak. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mz-bin-width <float></code> – Before calculation of the XCorr score, the m/z axes of the observed and theoretical spectra are discretized. This parameter specifies the size of each bin. The exact formula for computing the discretized m/z value is floor((x/mz-bin-width) + 1.0 - mz-bin-offset), where x is the observed m/z value. For low resolution ion trap ms/ms data 1.0005079 and for high resolution ms/ms 0.02 is recommended. Default = <code>1.00 [...]
+  <li class="nobullet"><code>--auto-mz-bin-width false|warn|fail</code> – Automatically estimate optimal value for the mz-bin-width parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mz-bin-offset <float></code> – In the discretization of the m/z axes of the observed and theoretical spectra, this parameter specifies the location of the left edge of the first bin, relative to mass = 0 (i.e., mz-bin-offset = 0.xx means the left edge of the first bin will be located at +0.xx Da). Default = <code>0.4</code>.</li>
+  <li class="nobullet"><code>--peptide-centric-search T|F</code> – Carries out a peptide-centric search. For each peptide the top-scoring spectra are reported, in contrast to the standard spectrum-centric search where the top-scoring peptides are reported. Note that in this case the "xcorr rank" column will contain the rank of the given spectrum with respect to the given candidate peptide, rather than vice versa (which is the default). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--isotope-error <string></code> – List of positive, non-zero integers. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--skip-preprocessing T|F</code> – Skip preprocessing steps on spectra. Default = F. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Protein inference options</h3>
+<ul>
+  <li class="nobullet"><code>--picked-protein <string></code> – Use the picked protein-level FDR to infer protein probabilities, provide the fasta file as the argument to this flag. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--protein-enzyme no_enzyme|elastase|pepsin|proteinasek|thermolysin|trypsinp|chymotrypsin|lys-n|lys-c|arg-c|asp-n|glu-c|trypsin</code> – Type of enzyme Default = <code>trypsin</code>.</li>
+  <li class="nobullet"><code>--protein-report-fragments T|F</code> – By default, if the peptides associated with protein A are a proper subset of the peptides associated with protein B, then protein A is eliminated and all the peptides are considered as evidence for protein B. Note that this filtering is done based on the complete set of peptides in the database, not based on the identified peptides in the search results. Alternatively, if this option is set and if all of the ident [...]
+  <li class="nobullet"><code>--protein-report-duplicates T|F</code> – If multiple database proteins contain exactly the same set of peptides, then Percolator will randomly discard all but one of the proteins. If this option is set, then the IDs of these duplicated proteins will be reported as a comma-separated list. Not available for Fido. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Fido options</h3>
+<ul>
+  <li class="nobullet"><code>--protein T|F</code> – Use the Fido algorithm to infer protein probabilities. Must be true to use any of the Fido options. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fido-alpha <float></code> – Specify the probability with which a present protein emits an associated peptide. Set by grid search (see --fido-gridsearch-depth parameter) if not specified. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--fido-beta <float></code> – Specify the probability of the creation of a peptide from noise. Set by grid search (see --fido-gridsearch-depth parameter) if not specified. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--fido-gamma <float></code> – Specify the prior probability that a protein is present in the sample. Set by grid search (see --fido-gridsearch-depth parameter) if not specified. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--fido-empirical-protein-q T|F</code> – Estimate empirical p-values and q-values for proteins using target-decoy analysis. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fido-gridsearch-depth <integer></code> – Set depth of the grid search for alpha, beta and gamma estimation. The values considered, for each possible value of the --fido-gridsearch-depth parameter, are as follows:<ul><li>0: alpha = {0.01, 0.04, 0.09, 0.16, 0.25, 0.36, 0.5}; beta = {0.0, 0.01, 0.15, 0.025, 0.035, 0.05, 0.1}; gamma = {0.1, 0.25, 0.5, 0.75}.</li><li>1: alpha = {0.01, 0.04, 0.09, 0.16, 0.25, 0.36}; beta = {0.0, 0.01, 0.15, 0.025, 0.0 [...]
+  <li class="nobullet"><code>--fido-gridsearch-mse-threshold <float></code> – Q-value threshold that will be used in the computation of the MSE and ROC AUC score in the grid search. Default = <code>0.05</code>.</li>
+  <li class="nobullet"><code>--fido-fast-gridsearch <float></code> – Apply the specified threshold to PSM, peptide and protein probabilities to obtain a faster estimate of the alpha, beta and gamma parameters. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--fido-protein-truncation-threshold <float></code> – To speed up inference, proteins for which none of the associated peptides has a probability exceeding the specified threshold will be assigned probability = 0. Default = <code>0.01</code>.</li>
+  <li class="nobullet"><code>--fido-no-split-large-components T|F</code> – Do not approximate the posterior distribution by allowing large graph components to be split into subgraphs. The splitting is done by duplicating peptides with low probabilities. Splitting continues until the number of possible configurations of each subgraph is below 2^18 Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Database</h3>
+<ul>
+  <li class="nobullet"><code>--decoy_search <integer></code> – 0=no, 1=concatenated search, 2=separate search. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>CPU threads</h3>
+<ul>
+  <li class="nobullet"><code>--num-threads <integer></code> – 0=poll CPU to set num threads; else specify num threads directly. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--num_threads <integer></code> – 0=poll CPU to set num threads; else specify num threads directly. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Masses</h3>
+<ul>
+  <li class="nobullet"><code>--peptide_mass_tolerance <float></code> – Controls the mass tolerance value.  The mass tolerance is set at +/- the specified number i.e. an entered value of "1.0" applies a -1.0 to +1.0 tolerance. The units of the mass tolerance is controlled by the parameter "peptide_mass_units".  Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--auto_peptide_mass_tolerance false|warn|fail</code> – Automatically estimate optimal value for the peptide_mass_tolerancel parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--peptide_mass_units <integer></code> – 0=amu, 1=mmu, 2=ppm. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--mass_type_parent <integer></code> – 0=average masses, 1=monoisotopic masses. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--mass_type_fragment <integer></code> – 0=average masses, 1=monoisotopic masses. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--precursor_tolerance_type <integer></code> – 0=singly charged peptide mass, 1=precursor m/z. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--isotope_error <integer></code> – 0=off, 1=on -1/0/1/2/3 (standard C13 error), 2=-8/-4/0/4/8 (for +4/+8 labeling). Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search enzyme</h3>
+<ul>
+  <li class="nobullet"><code>--search_enzyme_number <integer></code> – Specify a search enzyme from the end of the parameter file. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--num_enzyme_termini <integer></code> – valid values are 1 (semi-digested), 2 (fully digested), 8 N-term, 9 C-term. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--allowed_missed_cleavage <integer></code> – Maximum value is 5; for enzyme search. Default = <code>2</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Fragment ions</h3>
+<ul>
+  <li class="nobullet"><code>--fragment_bin_tol <float></code> – Binning to use on fragment ions. Default = <code>1.000507</code>.</li>
+  <li class="nobullet"><code>--fragment_bin_offset <float></code> – Offset position to start the binning (0.0 to 1.0). Default = <code>0.4</code>.</li>
+  <li class="nobullet"><code>--auto_fragment_bin_tol false|warn|fail</code> – Automatically estimate optimal value for the fragment_bin_tol parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--theoretical_fragment_ions <integer></code> – 0=default peak shape, 1=M peak only. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--use_A_ions <integer></code> – Controls whether or not A-ions are considered in the search (0 - no, 1 - yes). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--use_B_ions <integer></code> – Controls whether or not B-ions are considered in the search (0 - no, 1 - yes). Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--use_C_ions <integer></code> – Controls whether or not C-ions are considered in the search (0 - no, 1 - yes). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--use_X_ions <integer></code> – Controls whether or not X-ions are considered in the search (0 - no, 1 - yes). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--use_Y_ions <integer></code> – Controls whether or not Y-ions are considered in the search (0 - no, 1 - yes). Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--use_Z_ions <integer></code> – Controls whether or not Z-ions are considered in the search (0 - no, 1 - yes). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--use_NL_ions <integer></code> – 0=no, 1= yes to consider NH3/H2O neutral loss peak. Default = <code>1</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>mzXML/mzML parameters</h3>
+<ul>
+  <li class="nobullet"><code>--scan_range <string></code> – Start and scan scan range to search; 0 as first entry ignores parameter. Default = <code>0 0</code>.</li>
+  <li class="nobullet"><code>--precursor_charge <string></code> – Precursor charge range to analyze; does not override mzXML charge; 0 as first entry ignores parameter. Default = <code>0 0</code>.</li>
+  <li class="nobullet"><code>--override_charge <integer></code> – Specifies the whether to override existing precursor charge state information when present in the files with the charge range specified by the "precursor_charge" parameter. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--ms_level <integer></code> – MS level to analyze, valid are levels 2 or 3. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--activation_method ALL|CID|ECD|ETD|PQD|HCD|IRMPD</code> – Specifies which scan types are searched. Default = <code>ALL</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Miscellaneous parameters</h3>
+<ul>
+  <li class="nobullet"><code>--digest_mass_range <string></code> – MH+ peptide mass range to analyze. Default = <code>600.0 5000.0</code>.</li>
+  <li class="nobullet"><code>--num_results <integer></code> – Number of search hits to store internally. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--skip_researching <integer></code> – For '.out' file output only, 0=search everything again, 1=don't search if .out exists. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--max_fragment_charge <integer></code> – Set maximum fragment charge state to analyze (allowed max 5). Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--max_precursor_charge <integer></code> – Set maximum precursor charge state to analyze (allowed max 9). Default = <code>6</code>.</li>
+  <li class="nobullet"><code>--nucleotide_reading_frame <integer></code> – 0=proteinDB, 1-6, 7=forward three, 8=reverse three, 9=all six. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--clip_nterm_methionine <integer></code> – 0=leave sequences as-is; 1=also consider sequence w/o N-term methionine. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--spectrum_batch_size <integer></code> – Maximum number of spectra to search at a time; 0 to search the entire scan range in one loop. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--decoy_prefix <string></code> – Specifies the prefix of the protein names that indicates a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--output_suffix <string></code> – Specifies the suffix string that is appended to the base output name for the pep.xml, pin.xml, txt and sqt output files. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--mass_offsets <string></code> – Specifies one or more mass offsets to apply. This value(s) are effectively subtracted from each precursor mass such that peptides that are smaller than the precursor mass by the offset value can still be matched to the respective spectrum. Default = <code><empty></code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Spectral processing</h3>
+<ul>
+  <li class="nobullet"><code>--minimum_peaks <integer></code> – Minimum number of peaks in spectrum to search. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--minimum_intensity <float></code> – Minimum intensity value to read in. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--remove_precursor_peak <integer></code> – 0=no, 1=yes, 2=all charge reduced precursor peaks (for ETD). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--remove_precursor_tolerance <float></code> – +- Da tolerance for precursor removal. Default = <code>1.5</code>.</li>
+  <li class="nobullet"><code>--clear_mz_range <string></code> – For iTRAQ/TMT type data; will clear out all peaks in the specified m/z range. Default = <code>0.0 0.0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Variable modifications</h3>
+<ul>
+  <li class="nobullet"><code>--variable_mod01 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod02 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod03 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod04 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod05 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod06 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod07 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod08 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--variable_mod09 <string></code> – Up to 9 variable modifications are supported; format: "<mass> <residues> <0=variable/1=binary> <max mods per a peptide>" e.g. 79.966331 STY 0 3. Default = <code>0.0 null 0 4 -1 0 0</code>.</li>
+  <li class="nobullet"><code>--max_variable_mods_in_peptide <integer></code> – Specifies the total/maximum number of residues that can be modified in a peptide. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--require_variable_mod <integer></code> – Controls whether the analyzed peptides must contain at least one variable modification. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Static modifications</h3>
+<ul>
+  <li class="nobullet"><code>--add_Cterm_peptide <float></code> – Specifiy a static modification to the c-terminus of all peptides. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Nterm_peptide <float></code> – Specify a static modification to the n-terminus of all peptides. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Cterm_protein <float></code> – Specify a static modification to the c-terminal peptide of each protein. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Nterm_protein <float></code> – Specify a static modification to the n-terminal peptide of each protein. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_A_alanine <float></code> – Specify a static modification to the residue A. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_B_user_amino_acid <float></code> – Specify a static modification to the residue B. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_C_cysteine <float></code> – Specify a static modification to the residue C. Default = <code>57.021464</code>.</li>
+  <li class="nobullet"><code>--add_D_aspartic_acid <float></code> – Specify a static modification to the residue D. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_E_glutamic_acid <float></code> – Specify a static modification to the residue E. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_F_phenylalanine <float></code> – Specify a static modification to the residue F. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_G_glycine <float></code> – Specify a static modification to the residue G. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_H_histidine <float></code> – Specify a static modification to the residue H. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_I_isoleucine <float></code> – Specify a static modification to the residue I. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_J_user_amino_acid <float></code> – Specify a static modification to the residue J. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_K_lysine <float></code> – Specify a static modification to the residue K. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_L_leucine <float></code> – Specify a static modification to the residue L. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_M_methionine <float></code> – Specify a static modification to the residue M. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_N_asparagine <float></code> – Specify a static modification to the residue N. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_O_ornithine <float></code> – Specify a static modification to the residue O. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_P_proline <float></code> – Specify a static modification to the residue P. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Q_glutamine <float></code> – Specify a static modification to the residue Q. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_R_arginine <float></code> – Specify a static modification to the residue R. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_S_serine <float></code> – Specify a static modification to the residue S. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_T_threonine <float></code> – Specify a static modification to the residue T. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_U_selenocysteine <float></code> – Specify a static modification to the residue U. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_V_valine <float></code> – Specify a static modification to the residue V. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_W_tryptophan <float></code> – Specify a static modification to the residue W. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_X_user_amino_acid <float></code> – Specify a static modification to the residue X. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Y_tyrosine <float></code> – Specify a static modification to the residue Y. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--add_Z_user_amino_acid <float></code> – Specify a static modification to the residue Z. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>General options</h3>
+<ul>
+  <li class="nobullet"><code>--only-psms T|F</code> – Do not remove redundant peptides; keep all PSMs and exclude peptide level probability. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--tdc T|F</code> – Use target-decoy competition to assign q-values and PEPs. When set to F, the mix-max method, which estimates the proportion pi0 of incorrect target PSMs, is used instead. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--search-input auto|separate|concatenated</code> – Specify the type of target-decoy search. Using 'auto', percolator attempts to detect the search type automatically.  Using 'separate' specifies two searches: one against target and one against decoy protein db. Using 'concatenated' specifies a single search on concatenated target-decoy protein db. Default = <code>auto</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>SVM training options</h3>
+<ul>
+  <li class="nobullet"><code>--subset-max-train <integer></code> – Only train Percolator on a subset of PSMs, and use the resulting score vector to evaluate the other PSMs. Recommended when analyzing huge numbers (>1 million) of PSMs. When set to 0, all PSMs are used for training as normal. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--c-pos <float></code> – Penalty for mistakes made on positive examples. If this value is set to 0, then it is set via cross validation over the values {0.1, 1, 10}, selecting the value that yields the largest number of PSMs identified at the q-value threshold set via the --test-fdr parameter. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--c-neg <float></code> – Penalty for mistake made on negative examples. If not specified, then this value is set by cross validation over {0.1, 1, 10}. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--train-fdr <float></code> – False discovery rate threshold to define positive examples in training. Default = <code>0.01</code>.</li>
+  <li class="nobullet"><code>--test-fdr <float></code> – False discovery rate threshold used in selecting hyperparameters during internal cross-validation and for reporting the final results. Default = <code>0.01</code>.</li>
+  <li class="nobullet"><code>--maxiter <integer></code> – Maximum number of iterations for training. Default = <code>10</code>.</li>
+  <li class="nobullet"><code>--quick-validation T|F</code> – Quicker execution by reduced internal cross-validation. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--test-each-iteration T|F</code> – Measure performance on test set each iteration. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--percolator-seed <string></code> – When given a unsigned integer value seeds the random number generator with that value. When given the string "time" seeds the random number generator with the system time. Default = <code>1</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>SVM feature input options</h3>
+<ul>
+  <li class="nobullet"><code>--output-weights T|F</code> – Output final weights to a file named "percolator.weights.txt". Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--init-weights <string></code> – Read initial weights from the given file (one per line). Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--default-direction <string></code> – In its initial round of training, Percolator uses one feature to induce a ranking of PSMs. By default, Percolator will select the feature that produces the largest set of target PSMs at a specified FDR threshold (cf. --train-fdr). This option allows the user to specify which feature is used for the initial ranking, using the name as a string from <a href="../file-formats/features.html">this table</a>. The name [...]
+  <li class="nobullet"><code>--unitnorm T|F</code> – Use unit normalization (i.e., linearly rescale each PSM's feature vector to have a Euclidean length of 1), instead of standard deviation normalization. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--override T|F</code> – By default, Percolator will examine the learned weights for each feature, and if the weight appears to be problematic, then percolator will discard the learned weights and instead employ a previously trained, static score vector. This switch allows this error checking to be overriden. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--klammer T|F</code> – Use retention time features calculated as in "Improving tandem mass spectrum identification using peptide retention time prediction across diverse chromatography conditions" by Klammer AA, Yi X, MacCoss MJ and Noble WS. (<em>Analytical Chemistry</em>. 2007 Aug 15;79(16):6111-8.). Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>param-medic options</h3>
+<ul>
+  <li class="nobullet"><code>--pm-min-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>400</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-frag-mz <float></code> – Minimum fragment m/z value to use in measurement error estimation. Default = <code>150</code>.</li>
+  <li class="nobullet"><code>--pm-max-frag-mz <float></code> – Maximum fragment m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-scan-frag-peaks <integer></code> – Minimum fragment peaks an MS/MS scan must contain to be used in measurement error estimation. Default = <code>40</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-delta-ppm <float></code> – Maximum ppm distance between precursor m/z values to consider two scans potentially generated by the same peptide for measurement error estimation. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--pm-charge <integer></code> – Precursor charge state to consider MS/MS spectra from, in measurement error estimation. Ideally, this should be the most frequently occurring charge state in the given data. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--pm-top-n-frag-peaks <integer></code> – Number of most-intense fragment peaks to consider for measurement error estimation, per MS/MS spectrum. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--pm-pair-top-n-frag-peaks <integer></code> – Number of fragment peaks per spectrum pair to be used in fragment error estimation. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--pm-min-common-frag-peaks <integer></code> – Number of the most-intense peaks that two spectra must share in order to potentially be generated by the same peptide, for measurement error estimation. Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--pm-max-scan-separation <integer></code> – Maximum number of scans two spectra can be separated by in order to be considered potentially generated by the same peptide, for measurement error estimation. Default = <code>1000</code>.</li>
+  <li class="nobullet"><code>--pm-min-peak-pairs <integer></code> – Minimum number of peak pairs (for precursor or fragment) that must be successfully paired in order to attempt to estimate measurement error distribution. Default = <code>100</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--spectrum-format |ms2|bms2|cms2|mgf</code> – The format to write the output spectra to. If empty, the spectra will be output in the same format as the MS2 input. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--top-match <integer></code> – Specify the number of matches to report for each spectrum. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--store-spectra <string></code> – Specify the name of the file where the binarized fragmentation spectra will be stored. Subsequent runs of crux tide-search will execute more quickly if provided with the spectra in binary format. The filename is specified relative to the current working directory, not the Crux output directory (as specified by --output-dir). This option is not valid if multiple input spectrum files are given. Default = <code><e [...]
+  <li class="nobullet"><code>--store-index <string></code> – When providing a FASTA file as the index, the generated binary index will be stored at the given path. This option has no effect if a binary index is provided as the index. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--concat T|F</code> – When set to T, target and decoy search results are reported in a single file, and only the top-scoring N matches (as specified via --top-match) are reported for each spectrum, irrespective of whether the matches involve target or decoy peptides. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--print-search-progress <integer></code> – Show search progress by printing every n spectra searched. Set to 0 to show no search progress. Default = <code>1000</code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+  <li class="nobullet"><code>--use-z-line T|F</code> – Specify whether, when parsing an MS2 spectrum file, Crux obtains the precursor mass information from the "S" line or the "Z" line.  Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--txt-output T|F</code> – Output a tab-delimited results file to the output directory. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--sqt-output T|F</code> – Outputs an SQT results file to the output directory. Note that if sqt-output is enabled, then compute-sp is automatically enabled and cannot be overridden. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pepxml-output T|F</code> – Output a pepXML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mzid-output T|F</code> – Output an mzIdentML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pin-output T|F</code> – Output a Percolator input (PIN) file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--file-column T|F</code> – Include the file column in tab-delimited output. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--output_sqtfile <integer></code> – 0=no, 1=yes  write sqt file. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--output_txtfile <integer></code> – 0=no, 1=yes  write tab-delimited text file. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--output_pepxmlfile <integer></code> – 0=no, 1=yes  write pep.xml file. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--output_percolatorfile <integer></code> – 0=no, 1=yes write percolator file. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--output_outfiles <integer></code> – 0=no, 1=yes  write .out files. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--print_expect_score <integer></code> – 0=no, 1=yes to replace Sp with expect in out & sqt. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--num_output_lines <integer></code> – num peptide results to show. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--show_fragment_ions <integer></code> – 0=no, 1=yes for out files only. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--sample_enzyme_number <integer></code> – Sample enzyme which is possibly different than the one applied to the search. Used to calculate NTT & NMC in pepXML output. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--pout-output T|F</code> – Output a Percolator <a href="https://github.com/percolator/percolator/blob/master/src/xml/percolator_out.xsd">pout.xml</a> format results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--feature-file-out T|F</code> – Output the computed features in <a href="../file-formats/features.html">tab-delimited text format</a>. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--list-of-files T|F</code> – Specify that the search results are provided as lists of files, rather than as individual files. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--feature-file-in T|F</code> – When set to T, interpret the input file as a PIN file. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--decoy-xml-output T|F</code> – Include decoys (PSMs, peptides, and/or proteins) in the XML output. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/predict-peptide-ions.html b/doc/user/predict-peptide-ions.html
new file mode 100644
index 0000000..552c290
--- /dev/null
+++ b/doc/user/predict-peptide-ions.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>predict-peptide-ions</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>predict-peptide-ions</h1>
+<h2>Usage:</h2>
+<p><code>crux predict-peptide-ions [options] <peptide sequence> <charge state></code></p>
+<h2>Description:</h2>
+<p>Given a peptide and a charge state, predict the corresponding fragment ions according to the provided options.</p>
+<h2>Input:</h2>
+<ul>
+  <li><code>peptide sequence</code> – The peptide sequence.</li>
+  <li><code>charge state</code> – The charge state of the peptide.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – a series of lines, describing how the ions were predicted. <blockquote style="font-family: monospace;"># PEPTIDE: <peptide sequence><br># CHARGE: <peptide charge></blockquote>The program then prints a one-line header that labels the tab-delimited columns, followed by one line per ion:<blockquote style="font-family: monospace;">m/z mass charge ion-series peptide-bond-index nh3 h2o isotope flank</blockquo [...]
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>predict-peptide-ions options</h3>
+<ul>
+  <li class="nobullet"><code>--primary-ions a|b|y|by|bya</code> – Predict the specified primary ion series. 'a' indicates a-ions only, 'b' indicates b-ions only, 'y' indicates y-ions only, 'by' indicates both b and y, 'bya' indicates b, y, and a. Default = <code>by</code>.</li>
+  <li class="nobullet"><code>--precursor-ions T|F</code> – Predict the precursor ions, and all associated ions (neutral losses, multiple charge states) consistent with the other specified options. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--isotope <integer></code> – Predict the given number of isotope peaks (0|1|2). Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--flanking T|F</code> – Predict flanking peaks for b- and y ions. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--nh3 <integer></code> – Include among the predicted peaks b/y ions with up to n losses of nh3. For example, for --nh3 2, predict a peak for each b- and y-ion with the loss of one nh3 group and predict a second peak for each b- and y-ion with the loss of two nh3 groups. These peaks will have 1 and 2, respectively, in the NH3 column of the output. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--h2o <integer></code> – Include in the predicted peaks, b/y ions with the loss of 1 to n water molecules. See --nh3 for an example. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search parameters</h3>
+<ul>
+  <li class="nobullet"><code>--max-ion-charge <string></code> – Predict theoretical ions up to max charge state (1, 2, ... ,6) or up to the charge state of the peptide ("peptide"). If the max-ion-charge is greater than the charge state of the peptide, then the maximum is the peptide charge.  Default = <code>peptide</code>.</li>
+  <li class="nobullet"><code>--fragment-mass average|mono</code> – Specify which isotopes to use in calculating fragment ion mass. Default = <code>mono</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/print-processed-spectra.html b/doc/user/print-processed-spectra.html
new file mode 100644
index 0000000..1ba0ca2
--- /dev/null
+++ b/doc/user/print-processed-spectra.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>print-processed-spectra</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>print-processed-spectra</h1>
+<h2>Usage:</h2>
+<p><code>crux print-processed-spectra [options] <ms2 file> <output file></code></p>
+<h2>Description:</h2>
+<p>Pre-process each spectrum in a given file in preparation for computing XCorr. The pre-processing steps are described in detail in this paper:</p><blockquote>J. K. Eng, B. Fischer, J. Grossman and M. J. MacCoss. <a href="http://pubs.acs.org/doi/abs/10.1021/pr800420s">"A fast SEQUEST cross correlation algorithm process the peaks as for computing."</a> <em>Journal of Proteome Research</em>. 7(10):4598-4602, 2008.</blockquote><p>The output of this program is equivalent to the sp [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>ms2 file</code> – File containing spectra to be searched.</li>
+  <li><code>output file</code> – File where spectrum will be written.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>output file</code> – The name of the file in which the processed spectra will be printed in MS2 format.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>print-processed-spectra options</h3>
+<ul>
+  <li class="nobullet"><code>--stop-after remove-precursor|square-root|remove-grass|ten-bin|xcorr</code> – Stop after the specified pre-processing step. Default = <code>xcorr</code>.</li>
+  <li class="nobullet"><code>--output-units mz|bin</code> – Specify the output units for processed spectra. Default = <code>bin</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+  <li class="nobullet"><code>--use-z-line T|F</code> – Specify whether, when parsing an MS2 spectrum file, Crux obtains the precursor mass information from the "S" line or the "Z" line.  Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/psm-convert.html b/doc/user/psm-convert.html
new file mode 100644
index 0000000..296d0d6
--- /dev/null
+++ b/doc/user/psm-convert.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>psm-convert</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>psm-convert</h1>
+<h2>Usage:</h2>
+<p><code>crux psm-convert [options] <input PSM file> <output format></code></p>
+<h2>Description:</h2>
+Reads in a file containing peptide-spectrum matches (PSMs) in one of the variety of supported formats and outputs the same PSMs in a different format
+<h2>Input:</h2>
+<ul>
+  <li><code>input PSM file</code> – The name of a PSM file in tab-delimited text, SQT, pepXML or mzIdentML format</li>
+  <li><code>output format</code> – The desired format of the output file. Legal values are tsv, html, sqt, pin, pepxml, mzidentml.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>psm-convert.log.txt</code> – a log file containing a copy of all messages that were printed to stderr.</li>
+  <li><code>psm-convert.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>psm-convert options</h3>
+<ul>
+  <li class="nobullet"><code>--input-format auto|tsv|sqt|pepxml|mzidentml</code> – Legal values are auto, tsv, sqt, pepxml or mzidentml format. Default = <code>auto</code>.</li>
+  <li class="nobullet"><code>--distinct-matches T|F</code> – Whether matches/ion are distinct (as opposed to total). Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--protein-database <string></code> – The name of the file in FASTA format. Default = <code><empty></code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/q-ranker.html b/doc/user/q-ranker.html
new file mode 100644
index 0000000..0a4abc2
--- /dev/null
+++ b/doc/user/q-ranker.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>q-ranker</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>q-ranker</h1>
+<h2>Usage:</h2>
+<p><code>crux q-ranker [options] <fragmentation spectra> <search results></code></p>
+<h2>Description:</h2>
+<p>Q-ranker dynamically learns to separate target from decoy PSMs. The algorithm is described in this article:</p><blockquote>Marina Spivak, Jason Weston, Leon Bottou and William Stafford Noble. <a href="http://noble.gs.washington.edu/papers/spivak2009improvements.html">"Direct <em>q</em> value optimization methods for peptide identification from shotgun proteomics data sets."</a> <em>Journal of Proteome Research</em>. 8(7):3737-3745, 2009.</blockquote><p>For more on q-values a [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>fragmentation spectra</code> – The fragmentation spectra must be provided in <a href="../file-formats/ms2-format.html">MS2</a>, mzXML, or MGF format.</li>
+  <li><code>search results</code> – Search results in the <a href="../file-formats/txt-format.html">tab-delimited text format</a> produced by Crux or in <a href="../file-formats/sqt-format.html">SQT format</a>. Like the spectra, the search results can be provided as a single file, a list of files or a directory of files. Note, however, that the input mode for spectra and for search results must be the same; i.e., if you provide a list of files for the spectra, then you must also pr [...]
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>qranker.target.pep.xml</code> – An xml file containing ranked list of target peptide-spectrum matches. Thefollowing entries are included: scan, charge, psm_id, q-value, score, precursor_mass, peptide, filename.</li>
+  <li><code>qranker.decoy.pep.xml</code> – An xml file containing ranked list of decoy peptide-spectrum matches.</li>
+  <li><code>qranker.target.psm.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited text format</a> containing a ranked list of target peptide-spectrum matches with the associated Q-ranker scores and q-values.</li>
+  <li><code>qranker.decoy.psm.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited text format</a> containing a ranked list of decoy peptide-spectrum matches with the associated Q-ranker scores and q-values.</li>
+  <li><code>qranker.log.txt</code> – a file where the program reports its progress.</li>
+  <li><code>qranker.params.txt</code> – a file with the values of all the options given to the current run.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>q-ranker options</h3>
+<ul>
+  <li class="nobullet"><code>--separate-searches <string></code> – If the target and decoy searches were run separately, rather than using a concatenated database, then the program will assume that the database search results provided as a required argument are from the target database search. This option then allows the user to specify the location of the decoy search results. Like the required arguments, these search results can be provided as a single file, a list of files [...]
+  <li class="nobullet"><code>--skip-cleanup T|F</code> – Analysis begins with a pre-processsing step that creates a set of lookup tables which are then used during training. Normally, these lookup tables are deleted at the end of the analysis, but setting this option to T prevents the deletion of these tables. Subsequently, analyses can be repeated more efficiently by specifying the --re-run option. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--re-run <string></code> – Re-run a previous analysis using a previously computed set of lookup tables. For this option to work, the --skip-cleanup option must have been set to true when the program was run the first time. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--use-spec-features T|F</code> – Use an enriched feature set, including separate features for each ion type. Default = <code>true</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Enzymatic digestion</h3>
+<ul>
+  <li class="nobullet"><code>--enzyme no-enzyme|trypsin|trypsin/p|chymotrypsin|elastase|clostripain|cyanogen-bromide|iodosobenzoate|proline-endopeptidase|staph-protease|asp-n|lys-c|lys-n|arg-c|glu-c|pepsin-a|elastase-trypsin-chymotrypsin|custom-enzyme</code> – Specify the enzyme used to digest the proteins in silico. Available enzymes (with the corresponding digestion rules indicated in parentheses) include no-enzyme ([X]|[X]), trypsin ([RK]|{P}), trypsin/p ([RK]|[]), chymotrypsin  [...]
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pepxml-output T|F</code> – Output a pepXML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--txt-output T|F</code> – Output a tab-delimited results file to the output directory. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--list-of-files T|F</code> – Specify that the search results are provided as lists of files, rather than as individual files. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--feature-file-out T|F</code> – Output the computed features in <a href="../file-formats/features.html">tab-delimited text format</a>. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/read-tide-index.html b/doc/user/read-tide-index.html
new file mode 100644
index 0000000..12ed72e
--- /dev/null
+++ b/doc/user/read-tide-index.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>read-tide-index</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>read-tide-index</h1>
+<h2>Usage:</h2>
+<p><code>crux read-tide-index [options] <tide database></code></p>
+<h2>Description:</h2>
+Reads an index generated by tide-index and outputs information about the peptides it contains.
+<h2>Input:</h2>
+<ul>
+  <li><code>tide database</code> – Either a FASTA file or a directory containing a database index created by a previous run of crux tide-index.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>read-tide-index.peptides.txt</code> – a tab-delimited file containing two columns with headers: the peptide, and a semicolon-delimited list of IDs of the proteins that peptide occurs in.</li>
+  <li><code>read-tide-index.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>read-tide-index.log.txt</code> – a log file containing a copy of all messages that were printed to the screen during execution.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<p>This command does not support any optional parameters.</p>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/release-notes.html b/doc/user/release-notes.html
new file mode 100644
index 0000000..750d3d5
--- /dev/null
+++ b/doc/user/release-notes.html
@@ -0,0 +1,1849 @@
+<html>
+<head>
+<title>Release notes for Crux</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="index.html">Home</a></li>
+			    <li><a href="download.html">Download</a></li>
+			    <li><a href="fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+    <blockquote> 
+    <h2>Release notes for Crux</h2>
+
+<h3>Version 3.1</h3> January 10, 2017
+
+<h4>Major changes</h4>
+
+<ul>
+
+  <li>8 Nov 2016: Updated Percolator to use the latest version on GitHub.</li>
+  <li>31 Oct 2016: Added param-medic options to Comet and Tide</li>
+  <li>11 Oct 2016: Added the param-medic command.</li>
+  <li>07 Sept 2016: Added isotope-error parameter to Tide.</li>
+  <li>30 Aug 2016: Updated Percolator to version 3.00.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+  <li>
+    9 Jan 2017: Added search-input option to Percolator.</li>
+
+  <li>
+    29 Dec 2016: Allow assign-confidence to rank by Percolator score.</li>
+
+  <li>
+    1 Nov 2016: Added tdc and subset-max-train options to Percolator.</li>
+
+  <li>
+    20 Sept 2016: Percolator changed to use a modified version of its
+    native output.</li>
+
+  <li>
+    30 Nov 2016: Added +1 to the numerator of the FDR estimation when
+    carrying out target-decoy competition.  This correction was
+    proposed by Barber and
+    Candes, <a href="https://arxiv.org/abs/1404.5609"><i>Annals of
+    Statistics</i></a>, 2015, as well as by He et al.,
+    <a href="http://arxiv.org/abs/1501.00537"</a>arXiv:1501.00537</a>,
+    2015.</li>
+       
+  <li>
+    8 Aug 2016: Fixed incorrect default value for the cpos parameter
+    to percolator.</li>
+
+  <li>Many other minor bug fixes and enhancements.</li>
+
+</ul>
+
+<hr/>
+
+<h3>Version 3.0</h3> August 1, 2016
+
+<h4>Major changes</h4>
+
+<ul>
+
+<li>
+The <code>tide-search</code> command now supports threading. See the
+<code>num-threads</code> parameter for details.</li>
+
+<li>
+Added the <code>pipeline</a> command to run a series of commands, and
+the <code>cascade-search</code> to run searches across a series of
+databases.</li>
+
+<li>
+Renamed the command <code>calibrate-scores</code>
+to <code>assign-confidence</code> and completely revamped its
+functionality.</li>
+
+<li>
+The <code>search-for-xlinks</code> command offers parameters to
+control categories of
+candidates: <code>xlink-include-inter</code>, <code>xlink-include-intra</code>,
+and
+<code>xlink-include-inter-intra</code>.</li>
+
+<li>
+Added the <code>peptide-centric-search</code> option to tide-search.</li>
+
+<li>
+Compiling the Mac OS version now requires OS X Yosemite. It can be built
+from source using the Clang compilers distributed with the latest version of
+XCode.</li>
+
+<li>
+32-bit and 64-bit Windows versions are now available, built using Visual Studio 2013.</li>
+
+<li>
+Updated Percolator to version 2.10.</li>
+
+<li>
+Updated Hardklor to version 2.30.</li>
+
+<li>
+Updated Comet to version 2016.01 rev. 1.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+The Windows version of Crux can be built with support for vendor specific file
+formats disabled.</li>
+
+<li>
+Added the <code>temp-dir</code> option
+to <code>tide-index</code>.</li>
+
+<li>
+The utilities <code>create-docs</code>, <code>subtract-index</code>,
+and <code>psm-convert</code> were added to Crux.</li>
+
+<li>The <code>generate-peptides</code> application has been revamped.</li>
+
+<li>Fixed a bug in <code>barista</code> that occurred when the number of
+peptides exceeded the number of PSMs.</li>
+
+<li>Precursor mass selection is fixed in <code>tide-search</code> when units
+are m/z.</li>
+
+<li><code>hardklor</code> and <code>bullseye</code> now use standard logging.</li>
+
+<li>Version number added to log files. Additionally, the version numbers of
+<code>percolator</code>, <code>comet</code>, and <code>boost</code> are shown
+in the output of the <code>version</code> command.</li>
+
+<li>
+Short usage message is displayed on error (the full usage message is still
+displayed when a command is entered with no arguments).</li>
+
+<li>
+<code>feature-in-file</code> parameter added to <code>percolator</code>.</li>
+
+<li>
+The <code>seed</code> parameter for <code>percolator</code> has been renamed
+to <code>percolator-seed</code>.</li>
+
+<li>
+<code>comet</code> exits with return code 1 on failure, rather than 0.</li>
+
+<li>
+Default value for <code>use_sparse_matrix</code> changed to <code>1</code>.</li>
+
+<li>
+Default value for <code>use-neutral-loss-peaks<code> changed to <code>true</code>.</li>
+
+<li>
+<code>xlink-score-method</code> parameter added to <code>xlink-score-spectrum</code>.</li>
+
+<li>
+deltaLCn column added to <code>tide-search</code> tab-delimited output.</li>
+
+<li>
+Bug fixed in reporting flanking amino acids in <code>PostProcessProtein.cpp</code>.</li>
+
+<li>
+<code>Mix-max</code> procedure is updated to handle ties among target and decoy scores.</li>
+
+<li>
+Default value of <code>use-neutral-loss-peaks</code> changed to <code>true</code></li>
+
+<li>
+<code>Exact p-value</code> calculation takes into account the flanking and neutral loss peaks. </li>
+
+<li>
+A bug was fixed in the naming of the Percolator input (.pin) file that
+is produced by Comet when the <code>output_percolatorfile</code>
+option is turned on.  Previously, the file was named "comet.tsv"; now
+it is "comet.target.pin."</li>
+
+<li>
+<code>Assign-confidence</code> can take multiple input files.
+</li>
+
+<li>
+The <code>comet</code> command can take multiple input files.
+</li>
+
+<li>
+The <code>sidak</code> option has been added
+to <code>assign-confidence</code> to perform a Sidak adjustment.
+</li>
+
+<li>
+The <code>peptide-level</code> option has been added
+to <code>assign-confidence</code>.
+</li>
+
+<li>
+The refactored XCorr score has been re-scaled (by dividing by 20) to
+put it into a range that is comparable to that of the original XCorr score.</li>
+
+<li>
+The default value of <code>mz-bin-offset</code> has been changed from
+0.68 to 0.40.</li>
+
+<li>
+The <code>percolator</code> command outputs the <code>pout</code> XML format
+again (controlled by the <code>pout-output</code> parameter).</li>
+
+<li>
+The <code>percolator</code> command can output its native output by using the
+<code>original-output</code> parameter.</li>
+
+<li>
+Fixed a bug in <code>tide-search</code> causing it to fail when
+<code>remove-precursor-peak</code> removed all peaks in a spectrum.</li>
+
+<li>
+The <code>max-precursor-charge</code> parameter
+for <code>tide-search</code> has been introduced.</li>
+
+<li>
+Fixed a bug in candidate peptide selection when m/z tolerance is
+used.</li>
+
+<li>
+Added the <code>read-tide-index</code> command, which reads an index produced
+by <code>tide-index</code> and prints a list of peptides it contains.</li>
+
+<li>
+Added the <code>stop-after</code> option to print-processed-spectra, which
+controls the point at which to stop preprocessing.</li>
+
+<li>
+The <code>tide-search</code> command now accepts multiple spectrum input files.
+</li>
+
+<li>
+Added the <code>use-z-line</code> option to specify whether precursor
+information is taken from the S or Z line when parsing MS2 files using
+ProteoWizard.</li>
+
+<li>
+Added missing options to the <code>percolator</code> command.</li>
+
+<li>
+The <code>tide-search</code> command may now accept a FASTA database in
+place of the index, in which case <code>tide-index</code> will be run prior to
+the search. The <code>store-index</code> option allows the generated index
+to be saved.</li>
+
+<li>
+The <code>assign-confidence</code> command will automatically detect
+score type if the <code>score</code> parameter is not specified, searching for
+xcorr, e-value, or exact p-values.</li>
+
+<li>
+The <code>cascade-search</code> will report the source index database of the 
+peptide for all identified PSMs.</li>
+
+<li>
+The <code>top-match</code> parameter has been removed from
+<code>cascade-search</code>.</li>
+
+<li>
+<code>Assign-confidence</code> has got new options: "combine-modified-peptide" 
+and "combine-charge-states".</li>
+
+<li>
+<code>Assign-confidence</code> now supports top-match>1 in peptide-level filtering 
+mode.</li>
+
+<li>
+<code>Assign-confidence</code> can use smoothed-p-value scores for PSM ranking.</li>
+
+<li>
+<code>Assign-confidence</code> now does not carry out target-decoy competition in 
+peptide-level filtering mode.</li>
+
+<li>
+Added the <code>xlink-assign-ions</code> and <code>xlink-score-spectrum
+</code> commands.</li>
+
+<li>
+Rearranged estimation methods in <code>assign-confidence</code>.</li>
+
+<li>
+Added top-match option for <code>estimation-method=peptide-level</code> 
+case in <code>assign-confidence</code>.</li>
+
+<li>
+Modified assign-confidence so that ties during target-decoy
+competition are broken randomly.</li>
+
+<li>
+Changed the Percolator output feature "file" to contain the name of
+  the file containing the spectrum (if available), rather than the
+  name of the file containing the PSM.</li>
+
+<li>
+Added to <code>search-for-xlinks</code>, <code>xlink-assign-ions</code>
+  and <code>xlink-score-spectrum</code> parameters of the form
+  "use-a-ion" for a, b, c, x, y, and z-ions.</li>
+
+<li>Various other minor bug/leak fixes and performance enhancements.</li>
+
+<li>Added the <code>allow-dups</code> option to tide-index.</li>
+
+</ul>
+
+<hr></hr>
+
+
+<h3>Version 2.1</h3> October 8, 2014
+
+<h4>Major enhancements</h4>
+
+<ul>
+
+<li>
+The <code>tide-search</code> command now supports calculation of exact
+p-values via dynamic programming, as described
+in <a href="http://www.ncbi.nlm.nih.gov/pubmed/24895379">this
+article</a>.  The p-value calculation is controlled with
+the <code>exact-p-value</code> parameter.</li>
+
+<li>
+<code>search-for-xlinks</code> now supports variable modifications and
+larger protein databases.  This new code is disabled by default, but
+can be turned on by setting the
+parameter <code>use-old-xlink=F</code>.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+The default value of <code>mz_bin_offset</code> has been changed to 0.40 from 0.68.</li>
+
+<li>
+The <code>centroided</code> parameter for the <code>hardklor</code> command is
+now implemented.</li>
+
+<li>
+The <code>spectrum-format</code> parameter for the <code>bullseye</code> command
+works properly.</li>
+
+<li>
+The <code>tide-search</code> command now uses information from the Z line rather
+than the S line when reading spectrum files in the MS2 file format.</li>
+
+<li>
+The <code>tide-search</code> command now accepts the
+<code>spectrum-parser</code> parameter.</li>
+
+<li>
+The <code>protein-database</code> parameter
+to <code>spectral-counts</code> now only accepts fasta files.  Parsing
+of a protein index is no longer supported.</li>
+
+<li>
+A bug was fixed in the <code>spectral-counts</code> command that prevented 
+<code>tide-search</code> output files from being parsed correctly.</li>   
+
+<li>
+The <code>default-direction</code> parameter now takes a string value of the feature
+name rather than an integer.
+</li>
+
+<li>
+The parameters <code>mz-bin-width</code> and <code>mz-bin-offset</code> have been added
+to <code>tide-search</code>.</li>
+
+<li>
+Percolator output now includes, for each PSM, the name of the file
+in which the spectrum resides.
+</li>
+
+<li>
+The parameters <code>clip-nterm-methionine</code>, <code>keep-terminal-aminos</code>, and <code>min-mods</code> have been added to <code>tide-index</code>.
+</li>
+
+<li>
+The parameters <code>use-flanking-peaks</code>
+and <code>use-neutral-loss-peaks</code> have been added to
+<code>tide-search</code>.</li>
+
+<li>
+The calculation of XCorr was simplified in Tide.  In the new version, 
+<code>tide-index</code> only generates peptides and sorts them,
+leaving the generation of theoretical peaks to be done entirely on the
+fly by <code>tide-search</code>.</li>
+
+<li>
+The <code>tide-search</code> command now prints search progress reports both to
+the screen and to the log file. The interval at which progress is printed can
+be controlled using the <code>print-search-progress</code> parameter.</li>
+
+<li>
+The <code>calibrate-scores</code> command now outputs files with the stem
+"calibrate-scores" rather than "qvalue."</li>
+
+<li>
+The <code>use-flanking-peaks</code> parameter now has a default value of
+false.</li>
+
+<li>
+The Comet search engine was updated to version 2014011.</li>
+
+<li>
+The MSToolkit parser was updated to the latest version (r73).</li>
+
+<li>
+The <code>version</code> command now outputs the revision number.</code>
+
+<li>
+Various improvements in performance and error handling were implemented.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 2.0</h3> June 6, 2014
+<h4>Major enhancements</h4>
+<ul>
+
+<li>
+Two new search engines are now included in Crux: Comet and Tide.  The
+old search engine, search-for-matches, has been retired.</li>
+
+<li>Percolator has been updated to version 2.07.</li>
+
+<li>
+Crux now compiles in native Windows, rather than requiring
+Cygwin.  Consequently, Crux running under Windows can parse vendor
+proprietary formats using the appropriate Proteowizard libraries.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+The "enyzme" parameters "lysc", "lysn", "arg_c", "glue_c", and
+"pepsin_a" were renamed to "lys-c", "lys-n", "arg-c", "glue-c", and
+"pepsin-a".</li>
+
+<li>
+Percolator outputs decoy files in addition to target files.</li>
+
+<li>
+Percolator tab-delimited peptides output now contain a posterior error
+probability (PEP) column.</li>
+
+<li>
+The Percolator tab-delimited peptide output has been corrected to show
+the PSM with the best score, rather than the worst.</li>
+
+<li>
+The Percolator tab-delimited PSMs output "matches/spectrum" value has
+been corrected.</li>
+
+<li>
+A new utility command, <code>make-pin</code>, is provided to create
+input files for use by Percolator.</li>
+
+<li>
+The <code>spectrum-min-mass</code> and <code>spectrum-max-mass</code>
+options have been renamed to <code>spectrum-min-mz</code> and
+<code>spectrum-max-mz</code>, respectively.</li>
+
+<li>
+A <code>spectrum-parser</code> option was added to <code>q-ranker</code> and
+<code>barista</code>.</li>
+
+<li>
+A bug was fixed in <code>q-ranker</code> and <code>barista</code> when
+reading peptides with modifications.</li>
+
+<li>
+Fixed the <code>q-ranker</code> tab delimited output so that, for a
+given peptide, flanking amino acids are reported for each protein that
+contains that peptide, rather than only reporting one set of flanking
+amino acids.</li>
+
+<li>
+A bug was fixed in <code>percolator</code>, wherein the first and last
+two characters were being truncated from peptide sequences when the
+input was missing the flanking amino acids or when the charge state
+was not indicated in the PSM IDs.</li>
+
+<li>
+The crux spectrum parser has been removed.</li>
+
+<li>
+Q-ranker now outputs decoy files.</li>
+
+<li>
+The Boost.Random library is now being used for random number
+generation.</li>
+
+<li>
+<code>calibrate-scores</code> no longer requires a protein input.</li>
+
+<li>
+<code>calibrate-scores</code> now only takes the top match per
+spectrum and charge.</li>
+
+<li>
+<code>get-ms2-spectrum</code> now prints z-lines with Bullseye
+files.</li>
+
+<li>
+Various performance and error handling improvements.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.40</h3> May 22, 2013
+<h4>Major enchancements</h4>
+<ul>
+
+<li>
+Crux Percolator was updated from version 1.05 to the latest release,
+version 2.04.</li>
+
+</ul>
+<h4>Minor changes</h4>
+<ul>
+
+<li>
+<p>The formula that is used to convert fragment m/z values from real
+numbers into integers was modified.  Previously, the conversion was<br>
+<pre>
+  floor( (x / mz-bin-size) + 0.5 + mz-bin-offset )
+</pre>
+<br>The new conversion formula is <br>
+<pre>
+  floor( (x / mz-bin-size) + 1.0 - mz-bin-offset )
+</pre>
+<br>The default values of the two parameters (mz-bin-size and
+mz-bin-offset) have not changed.  The allowed range of the
+mz-bin-offset parameter was previously [-1,1], but has been changed to
+[0,1].</p>
+
+<p>
+To understand the motivation for the changed formula, note that the
+mz-bin-offset parameter controls the location of bin edges, relative
+to integer masses on the mass scale.  In general, mz-bin-offset should
+be chosen so that bin edges fall between the expected clusters of
+fragment masses.  For fragments with 1+ charge, masses will cluster
+near integer values (after dividing by mz-bin-width), and the ideal
+value of mz-bin-offset would be 0.5.  For mixtures of fragments with
+1+ and 2+ charges, masses will cluster near integer and half-integer
+values, so mz-bin-offset near 0.25 or 0.75 would produce bin edges
+that best avoid the clusters of fragment masses.  The old conversion
+formula did not correctly locate bin edges, given a chosen
+mz-bin-offset.  The new conversion formula produces a proper
+translation of mz-bin-offset into bin edge locations.</p></li>
+
+<li>
+The <code>seed</code> parameter is now available to control the
+seeding of random number generator.  The default value is 1.
+<code>seed</code> is available as a parameter from all applications.
+It can be set as a command line option for 
+<code>crux search-for-matches</code>
+and 
+<code>crux percolator</code>.
+</li>
+
+<li>
+The default value of the <code>decoys</code> parameter for <code>crux
+search-for-matches</code> was incorrectly documented.  The default is
+actually <code>peptide-shuffle</code>, but the documentation said the
+default was <code>protein-shuffle</code>.  The documentation has been
+corrected.</li>
+
+<li>
+The incorrectly labeled column header <code>xcorr rank</code> in barista and
+q-ranker feature files has been corrected to <code>xcorr score</code>.
+</li>
+
+<li>
+The q-ranker output file <code>qranker_output.xml</code> has been renamed to
+<code>qranker.xml</code>.
+</li>
+
+<li>
+The deltaCn computation has been modified to be consistent with
+Percolator. Rather than using
+<br /><pre>
+     deltaCn<sub>i</sub> = (xcorr<sub>1</sub> - xcorr<sub>i+1</sub>) / xcorr<sub>1</sub>
+</pre><br />
+it is now computed using<br />
+<pre>
+     deltaCn<sub>i</sub> = (xcorr<sub>i</sub> - xcorr<sub>i+1</sub>) / max(xcorr<sub>i</sub>, 1.0)
+</pre><br />
+</li>
+
+<li>
+Percolator now accepts inputs in SQT, PepXML, and tab-delimited formats in addition to 
+the PinXML format.
+</li>
+
+<li>
+Flags were added to several commands allowing the user to control
+whether various results files are created in the output directory:
+<ul>
+  <li><code>--sqt-output <T|F></code> (search-for-matches)</li>
+  <li><code>--mzid-output <T|F></code> (search-for-matches, percolator)</li>
+  <li><code>--pinxml-output <T|F></code> (search-for-matches)</li>
+  <li><code>--pepxml-output <T|F></code> (search-for-matches, q-ranker, barista, percolator)</li>
+  <li><code>--txt-output <T|F></code> (search-for-matches, q-ranker, barista, percolator)</li>
+</ul>
+By default, all of these flags are set to false except <code>txt-output</code>.
+</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.39</h3> October 6, 2012
+
+<h4>Major enchancements</h4>
+
+<ul>
+
+<li>
+Crux is now released under an Apache license for all users.
+</li>
+
+
+<li>
+Parsing MS/MS spectra is now supported using <a href="http://proteowizard.sourceforge.net/">Proteowizard</a> (v. 3.0.3950).  
+This allows Crux to
+handle MS/MS spectra in mzML (1.0 and 1.1), mzXML, MGF, MS2 and CMS2
+formats.
+Use <code>spectrum-parser=pwiz</code> to enable Proteowizard parsing.</li>
+<li>
+Crux now uses <code>cmake</code> for the build process rather than
+<code>autoconf</code>/<code>automake</code>.
+</li>
+</ul>
+<h3>Minor changes</h3>
+<ul>
+
+<li>
+The Tide database search software is no longer distributed as part of Crux because its license is not compatible with the new Crux license.
+</li>
+
+<li>
+Support for PIN XML output was added to <code>crux
+search-for-matches</code>.
+</li>
+<li>
+Fixed a bug in <code>crux create-index</code> on Windows and Cygin
+that caused the program to fail with the message:
+<br /><pre>
+WARNING: Cannot rename directory
+FATAL: Failed to create index
+</pre>
+</li>
+<li>
+The parameter <code>protein database</code> is now an option rather than a required argument for <code>crux spectral-counts</code>.
+</li>
+<li>
+mzIdentML file support has been added for <code>crux spectral-counts</code>.
+</li>
+<li>
+PepXML file support has been fixed for <code>crux spectral-counts</code> .
+</li>
+<li>
+Fixed bug in packedNorm() that sometimes generated incorrect values for the posterior error probability.
+</li>
+<li>
+Fixed bug in <code>crux create-index</code> on Windows and Cygwin that caused it to fail on Windows and Cygin.
+</li>
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.38</h3> July 20, 2012
+
+<h4>Major enhancements</h4>
+
+<ul>
+
+<li>
+Hardklor and Bullseye, tools for analyzing high-resolution precursor
+spectra, are now incorporated into Crux.</li>
+
+<li>
+Barista has been modified extensively so that it more closely
+resembles the other tools in Crux:</li>
+
+<ul>
+<li>
+Barista and Q-ranker accept search results in tab-delimited format, in addition to
+SQT format.</li>
+<li>
+Barista now reports posterior error probabilities, in addition to
+q-values, for PSMs, peptides and proteins.</li>
+<li>
+Barista's pep.xml output has been updated to be compatible with the
+TransProteomic Pipeline (TPP).</li>
+</ul>
+
+<li>
+The <code>sequest-search</code> command has been removed.  The
+functionality of this command is still available using options for
+the <code>search-for-matches</code> command (see
+the <a href="faq.html">frequently asked questions list</a> for
+details).</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+<code>crux predict-peptide-ions</code> calculates the mass shift
+resulting from the nh3 or h2o neutral loss correctly.  Previously, a
+neutral loss resulted in an addition of mass rather than subtraction.
+</li>
+
+<li>
+<code>crux predict-peptide-ions</code> reports ion-type as
+'b','y','a', or 'p' rather than a number (i.e. 0, 1, 2, 3).</li>
+
+<li>
+<code>crux predict-peptide-ions</code> now only allows one type of
+neutral loss modification per ion.  Previously, multiple different
+types of neutral loss could be applied simultaneously to a single
+ion.</li>
+
+<li>
+The <code>neutral-losses</code> option was removed from <code>crux
+predict-peptide-ions</code>, due to its redundancy with the supported
+the <code>--nh3</code> and <code>--h2o</code> options.</li>
+
+<li>
+<code>crux predict-peptide-ions</code> supports 'bya' in the
+<code>--primary-ions</code> parameter, which will generate 
+the a-ion series in addition to the 'b' and 'y' ions.</li> 
+
+<li>
+The spectrum parsing is updated so that peaks with zero intensity are
+ignored.</li>
+
+<li>
+<code>crux spectral-counts</code> now has an option to compute the raw
+spectral count.</li>
+
+<li>
+<code>crux spectral-counts</code> now has an option to compute dNSAF
+values.</li>
+
+<li>
+A bug in <code>crux spectral-counts</code> was fixed so that it now
+properly normalizes the NSAF value.</li>
+
+<li>
+Multiple missed cleavages are now handled by <code>crux
+search-for-xlinks</code> using the missed-cleavages parameter.
+Previously, this was unsupported.</li>
+
+<li>
+Ambiguous amino acids are handled differently.  'J' is interpreted to
+indicate 'I' or 'L'.  Peptides containing B, Z, and X are no longer be
+allowed, and a warning is issued when these amino acid codes are
+encountered.</li>
+
+<li>
+The stand-alone <code>crux-predict-peptide-ions</code>
+and <code>crux-generate-peptides</code> applications have been integrated
+into the main <code>crux</code> application.</li>
+
+<li>
+A bug has been fixed that affected the intensity adjustment of
+observed spectra when the bin width was set much larger or smaller
+than 1.</li>
+
+<li>
+Beginning with version 1.37, q-ranker erroneously included decoy PSMs
+along with target PSMs in the q-ranker.target.psms.txt file.  All PSMs
+were sorted by q-ranker score so the targets and decoys were mixed
+together with no accompanying labels.  This bug has been fixed so that
+Q-ranker once again returns only target PSMs.</li>
+
+<li>
+The search option <code>display-summed-masses</code> has been replaced by
+<code>mod-mass-format</code>.  With this option, there is a new format
+for reporting modificiations: the mass in the square braces is that of the
+preceeding amino acid plus the modification mass.  This format is compliant
+with TPP pep.xml output.</li>
+
+<li>
+Modifications are reported differently in the pep.xml header to be
+compliant with the TPP.</li>
+
+<li>
+The command <code>crux compute-q-values</code> now reports posterior
+error probabilities in addition to q-values.  Consequently, the
+command was renamed <code>crux calibrate-scores</code>.</li>
+
+<li>
+Crux now provides an explicit error message when an incorrectly
+formatted MS2 file is parsed.  Previously, crux simply reported that
+no spectra were found.</li>
+
+<li>
+Several additional scores were added to the <code>q-ranker</code>
+pep.xml files.</li>
+
+<li>Fixed the build procedure to work on both Lion and pre-Lion versions of OS X.</li>
+
+<li>Fixed a bug in the normalization of the observed spectra.
+Previously, after the 10-bin normalization of intensities, peaks with
+heights below 5% of the maximum were not being removed.</li>
+
+<li>
+When a fragmentation spectra file is read, the assumed
+peptide charge state information can be missing for the scans.  
+In cases where this information has not been provided, 
+Crux will now estimate the possible charge states.
+</li>
+
+<li>
+The feature files for Q-ranker and Barista now contain a header
+describing each feature.
+</li>
+
+<li>
+Q-ranker and Barista now output all of the fields provided in the
+input search files.
+</li>
+
+</ul>
+
+<hr></hr>
+
+
+<h3>Version 1.37</h3> December 22, 2011
+
+<h4>Major enhancements</h4>
+
+<ul>
+<li>
+Added <code>crux barista</code>, a tool for inferring protein
+identifications.</li>
+
+<li>
+Reimplemented <code>crux q-ranker</code> with new outputs and
+command-line syntax.</li>
+
+<li>
+Percolator and compute-q-values now compute and report posterior error
+probabilities, in addition to q-values.</li>
+
+<li>
+<code>crux create-index</code> now generates and store decoy
+peptides in the index.  Decoys can still be generated on-the-fly when
+searching .fasta files.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+A pair of options, <code>cterm-fixed</code>
+and <code>nterm-fixed</code>, allow fixed terminal peptide
+modifications, i.e., a mass shift applied to every peptide on either or
+both termini.</li>
+
+<li>
+A bug in the spectrum processing code was fixed, which was erroneously
+eliminating a few of the highest m/z fragment peaks.  Xcorrs have
+changed slightly as a result.</li>
+
+<li>
+Simplified the <code>--mz-bin-width</code> and 
+</code>--mz-offset</code> parameters so that <code>--xcorr-var-bin</code>
+is no longer needed.</li>
+
+<li>
+Indexes now store information about any static mods used when they
+were created.</li>
+
+<li>
+In the tab-delimited output files the 'matches/spectrum' column gives
+the number of target peptides compared to the spectrum and the decoy
+file has an additional column, 'decoy matches/spectrum' that gives the
+number of decoy peptides compared to the spectrum.  These two numbers
+may differ when decoys are not generated on-the-fly.</li>
+<li>
+The header lines of Barista and QRanker include all of the columns 
+in the search results.</li>
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.36</h3> August 4, 2011
+
+<h4>Tide changes</h4>
+
+<ul>
+
+<li>
+Added support for user-specifiable variable and static amino acid
+modifications.</li>
+
+<li>
+Tide's version of XCorr has been modified so that it is always
+identical to those of a recent version SEQUEST<sup>®</sup>.</li>
+
+<li>
+Added support for user-specifiable maximum number of missed enzyme
+cleavage points.</li>
+
+<li>
+Tide now performs basic charge state inference when this information
+is missing from the spectrum input files.</li>
+
+<li>
+User-specifiable output formatting, using new
+the <code>tide-results</code> utility, including
+  <ul>
+  <li>Text format with user-specifiable fields.
+  <li>SQT format.
+  <li>PepXML format.
+  <li>Choose whether to display all proteins in which each peptide occurs or
+just one representative.
+  </ul>
+
+<li>
+Note that new file formats are created
+by <code>tide-index</code>. Index files created by previous versions
+of Tide should not be used with the new version.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+<li>
+Q-ranker now reports q-values instead of false discovery rates.</li>
+
+<li>
+Corrected several errors in the pep.xml output, related to reporting
+the spectrum filename, charge, and neutral mass.</li>
+
+<li>
+Changed the <code>missed-cleavages</code> option to allow specifying
+the maximum number of missed cleavages in a peptide rather than
+specifying none/any.</li>
+
+<li>
+Fixed a bug that did not print the spectrum file name correctly in the
+pep.xml files.</li>
+
+<li>
+Improved the error message produced by <code>crux
+spectral-counts</code> when the input PSM file does not contain the
+required q-values.</li>
+
+<li>
+Previously, Crux's theoretical spectrum includes two flanking peaks
+around each b- and y-ion.  The new
+Boolean flag <code>use-flanking-peaks</code>, allows these to be
+either on or off.  Flanking peaks are by default in 
+<code>crux sequest-search</code> but are not used by default
+in <code>crux search-for-matches</code>.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.35</h3> March 23, 2011
+
+<h4>Major enhancements</h4>
+
+<ul>
+
+<li>
+Added the <code>crux spectral-counts</code> command for estimating
+protein quantification.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+The spectrum neutral mass is now calculated from the m+h value
+provided by the Z-lines of an MS2 file.  Also, multiple z-lines of a
+spectrum that have the same charge are now supported.  With these
+changes, <code>crux search-for-matches</code> and <code>crux
+sequest-search</code> can now take advantage of accurate precursor
+masses in MS2 files generated by Bullseye (Hsieh et al. <i>J. Proteome
+Res.</i>  9(2):1138-43, 2010).</li>
+
+<li>
+Made the <code>pep.xml</code> file header produced by Crux compatible
+with the Transproteomic Pipeline.</li>
+
+<li>
+Introduced several changes to improve performance on MacOS X.</li>
+
+<li>
+Added an <code>nterm</code> option to the link argument of <code>crux
+search-for-xlinks</code>.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.34</h3> December 22, 2010
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+The default value of the "pi-zero" parameter has been changed from 0.9
+to 1.0.</li>
+
+<li>
+A new option <code>--peptide-list</code> has been added to <code>crux
+create-index</code>.  When set to T, this option causes an ASCII
+file of peptides to be included in the output directory.  Each line
+of the file lists the peptide sequence and its neutral mass.</li>
+
+<li>
+The default bin offset was returned to 0.68.  It had erroneously been
+changed to 0 in version 1.33.</li>
+
+<li>
+A new option <code>--compute-sp</code> has been added to <code>crux
+search-for-matches</code>.  When set to true, all candidate peptides
+will be scored by Sp in addition to xcorr.  This option is recommended
+for generating input to <code>percolator</code>
+or <code>q-ranker</code>.</li>
+
+<li>
+Added <code>max-ion-charge</code> parameter to designate the maximum
+charge for theoretical ions in <code>crux search-for-xlinks</code> and 
+<code>crux xlink-assign-ions</code>.
+
+<li>
+Modifications may optionally indicate if they prevent cleavage or
+prevent cross linking.
+
+<li>
+Results are printed to .pep.xml files in addition to .txt files.
+
+<li>
+Added a <code>mass-precision</code> option which sets how many digits
+are written for all mass and m/z values in .txt, .sqt, and .ms2 files.
+
+<li>
+The columns printed to the .txt files now vary with the 
+<code>crux</code> command being run and the settings so that unused
+columns are not printed.  
+
+<li>
+Fixed a bug that limited what files were used as input for post-search
+commands (e.g. <code>crux percolator</code>) based on fileroot.  Now
+files with different fileroots can be analyzed together.
+
+<li>
+Fixed a bug that caused searches using fasta files to search peptides 
+multiple times if they appeared in a file multiple times.
+
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.33</h3> July 7, 2010
+
+<h4>Major enhancements</h4>
+
+<ul>
+
+<li>
+The command line syntax
+for <code>compute-q-values</code>, <code>percolator</code>
+and <code>q-ranker</code> was modified to allow the programs to read
+from and write to separate directories.</li>
+
+<li>
+A bug in q-ranker and percolator was fixed.  This bug was introduced
+several versions ago, and it led to erroneously many PSMs receiving
+very small q-values.  The problem relates to the scaling of the delta
+Cn feature, and the fix is a temporary stopgap: we remove the feature
+entirely.  The next version should have the corrected feature in
+place.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+A new option <code>--min-peaks</code> has been added to set a filter 
+for the minimum number of peaks a spectrum must have in order for it
+to be searched.  The default minimum is 20 peaks.</li>
+
+<li>
+The hardcoded limit for the number of proteins allowed in a database 
+has been removed.</li>
+
+<li>
+The hardcoded limit for the number of spectra and the number of 
+peaks/spectrum has been removed.</li>
+
+<li>
+A new option <code>--xcorr-var-bin</code> has been added to toggle the
+new binning of the m/z axis.  The default bin offset was returned back
+to 0, but the default bin width is still 1.000508. (<i>Note: this
+erroneous change was subsequently reverted in version 1.34</i>.)
+</li>
+
+<li>
+The option <code>--max-ion-charge</code> now places a limit on the
+maximum charge state of the ions generated for the xcorr theoretical 
+spectra for <code>crux search-for-xlinks</code>.  This change is also 
+supported by <code>xlink-assign-ions</code>.
+
+<li>
+The option <code>--no-xval</code> was added to q-ranker, allowing
+faster execution by skipping the internal cross-validation to select
+hyperparameters.</li>
+
+<li>
+The precision of modification masses written to the .txt files now matches 
+the maximum precision given in the parameter file.
+
+<li>
+Sub-options <code>prevents cleavage</code> and 
+<code>prevents cross-link</code> have been added to variable modifications 
+and support has been provided for the <code>"prevents cleavage"</code> 
+sub-option.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.32</h3> July 6, 2010
+
+<h4>Major enhancement</h4>
+
+<ul>
+
+<li>
+Version 1.32 includes changes only to Tide. A new binary is introduced
+— a modified version of ProteoWizard's <b>msconvert</b> program
+— that is capable of converting spectrum data from a wide range
+of file formats into Tide-readable <i>.spectrumrecords</i> input
+files.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+<b>tide-import-spectra</b> is removed from the distribution. Although
+it was faster than msconvert, it was specific to ms2 files, whereas
+msconvert now works with any ProteoWizard-supported file format.</li>
+
+<li>
+A standalone utility for reading binary <i>.spectrumrecords</i> files
+is introduced, called <b>read-spectrumrecords</b>. This program is
+useful, for example, for visually checking the output of msconvert.</li>
+
+<li>
+Demo input files <b>worm-06-10000.spectrumrecords</b>
+and <b>yeast-02-10000.spectrumrecords</b> now replace their
+counterparts worm-06-10000.ms2 and yeast-02-10000.ms2. With the
+introduction of Tide-compatible msconvert, ms2 files are in no way
+special to Tide anymore. Any ProteoWizard-supported file format can be
+converted to the <i>.spectrumrecords</i> format for use with
+Tide. Starting with data files in Tide's spectrumrecords format
+eliminates the conversion step in the Tide search demo.</li>
+
+<li>
+The old demo scripts worm-demo.sh and yeast-demo.sh have each been
+replaced by a pair of new scripts that demonstrate the indexing and
+searching steps separately. This is in order to highlight the two-step
+process and the fact that indexing needs to be done just once for each
+fasta file, whereafter the index may be reused indefinitely to perform
+searches.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.31</h3> June 2, 2010
+
+<h4>Major enhancements</h4>
+
+<ul>
+
+<li>
+This version of Crux is released with a demo version of a new search
+engine, Tide.  Tide is an independent
+reimplementation of the SEQUEST<sup>®</sup> algorithm. The
+immediate ancestor of Tide is the Crux <code>search-for-matches</code>
+command, but Tide has been completely re-engineered to achieve a
+thousandfold improvement in speed while exactly replicating Crux XCorr
+scores.  Currently, Tide is not fully integrated with Crux, and is
+available only in binary executable format.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+<li>
+Two options have been added to <code>crux search-for-matches</code>
+(<code>--mz-bin-width</code> and <code>--mz-bin-offset</code>) to
+allow control of the binning of the m/z axis.</li>
+
+<li>
+The <code>ion-tolerance</code> option was removed from the search
+tools.</li>
+
+<li>
+The default location of the left edge of the first bin along the m/z
+axis is 0.68, rather than 0.0.  This change makes bin edges less
+likely to fall near fragment peak locations.  The default bin width
+has also changed from 1.001141 to 1.000508</li>
+
+<li>
+The log file now includes information about the date and time that the
+command was issued, the name of the computer on which the command was
+run, and the elapsed wall clock time at the end of the run.</li>
+
+<li>
+The command line option <code>--version T</code> has been replaced
+with a command <code>crux version</code> that prints the version
+number to standard output and then exits.</li>
+
+<li>
+The header for the feature file produced optionally by 
+<code>crux percolator</code> and <code>crux q-ranker</code> now includes names
+for the first two columns, scan number and label (i.e. target or decoy peptide).
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.30</h3> May 5, 2010
+
+<h4>Major enhancements</h4>
+
+<ul>
+<li>
+A new command, <code>xlink-search</code>, has been added.  This command
+searches a collection of spectra against a sequence database, finding
+cross-linked peptide matches.  The algorithm was described in the
+following article:</li>
+
+<blockquote>
+Sean McIlwain, Paul Draghicescu, Pragya Singh, David R. Goodlett and
+William Stafford
+Noble.  <a href="http://noble.gs.washington.edu/proj/xhhc/">"Detecting
+cross-linked peptides by searching against a database of cross-linked
+peptide pairs."</a> <i>Journal of Proteome Research</i>.  2010.
+</blockquote>
+
+<li>
+A new search command, <code>sequest-search</code>, was added.  The
+original command, <code>search-for-matches</code>, behaves as before
+except that no .sqt files are printed and no Sp scoring is performed.
+The new <code>sequest-search</code> emulates SEQUEST<sup>®</sup>
+searching.  It first scores all candidate peptides with the Sp score,
+then ranks and filters the results by that score, scoring the
+remaining candidates with xcorr.  Results are printed to .txt and .sqt
+files.</li>
+
+<li>
+The .mzXML file format is now supported for crux search-for-matches
+and crux sequest-search when the <code>--use-mstoolkit</code> option
+is set to TRUE.</li>
+
+<li>
+The .csm output files from <code>search-for-matches</code> are no
+longer produced and post-search operations take .txt files as input.
+</li>
+
+</ul>
+
+<h4>
+Minor changes</h4>
+
+<ul>
+
+<li>
+Replaced <code>mass-window</code> parameter with <code>
+precursor-window</code> and added <code>precursor-window-type</code>
+for selecting windows of type mass, m/z, or ppm. 
+</li>
+
+<li>
+The <code>feature-file</code> option is now true/false instead of
+taking a file name.  The file is named '<fileroot>.<qranker|
+percolator>.features.txt'.  A header with the column names was
+added to the file.</li>
+
+<li>
+The new option, <code>--scan-number</code>, performs a search on a 
+specified subset of the spectra in the given file.</li>
+
+<li>
+When only one decoy file is produced, the name is now 'decoy.txt'
+instead of 'decoy-1.txt'
+
+<li>
+In the .txt files, protein names are now followed by the start index
+of the peptide.
+
+<li>
+Modified sequences are reported differently in the .txt files.
+Instead of modifications being represented by symbols (*,@,#, etc.)
+they are indicated with the mass shift of the modification within
+square brackets.  As before, the modification information follows the
+residue that is modified.  If multiple modifications appear on one
+residue, the masses may either be summed together or printed
+separately in a comma separated list.  This behavior is controlled by
+the <code>--display-summed-mod-masses</code> option.</li>
+
+<li>
+The modified decoy sequences are generated differently.  Before, all
+modified peptides were generated and each one was shuffled to create a
+decoy peptide.  Now a peptide is shuffled once for each peptide_mod
+and all modifications are applied to that same shuffled peptide.</li>
+
+<li>
+The 'percolator rank' column is now based on percolator scores instead
+of percolator q-values.  For cases where two PSMs have different
+percolator scores but the same q-value, the ranks will reflect the
+score differences.</li>
+
+<li>
+The Weibull parameters used for computing p-values are now printed to
+the .txt files.</li> 
+
+<li>
+The reporting of DeltaCn has changed.  For PSMs of rank i, deltaCn
+used to computed be as deltaCn_i = (xcorr_0 - xcorr_i) / xcorr_0.
+Thus, deltaCn for the top-ranked PSM was always 0.  Now deltaCn_i =
+(xcorr_0 - xcorr_i+1) / xcorr_0.  This change only
+affects <code>search-for-matches</code>,
+not <code>sequest-search</code>.  It also means that 
+<code>q-ranker</code> and <code>percolator</code> use the correct
+DeltaCn values.
+</li>
+
+<li>
+A new command, <code>print-processed-spectra</code>, performs
+XCorr-style pre-processing on all spectra in a given file.</li>
+
+<li>
+A small bug was fixed, in which even if the user requested average
+mass, the search programs still used monoisotopic mass in the
+calculation of XCorr and Sp.</li>
+
+<li>
+Protein fasta files are now parsed protein-by-protein so that parsing
+large files does not use excessive amounts of memory.</li>
+
+<li>
+A limit was removed on how many peptides a protein can produce.</li>
+
+<li>
+Crux is now built with g++ instead of gcc.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.22</h3> September 16, 2009
+
+<h4>
+Major enhancements</h4>
+
+<ul>
+
+<li>
+Crux is now distributed in two versions, a full version that is
+covered by the same type of license as before (free to non-profit
+users, and via a licensing fee to commercial users), as well as a
+stripped-down version that is released under an open source license.
+The stripped-down version does not include the database search
+functionality but does include all of the post-processing tools.  We
+are unable to release the entire Crux package under an open source
+license due to intellectual property issues.  Both versions of Crux
+are available via the Crux web
+page: <a href="http://noble.gs.washington.edu/proj/crux/">http://noble.gs.washington.edu/proj/crux/</a>.</li>
+
+<li>
+A new tool, q-ranker, is available for estimating peptide-spectrum
+match q-values.  This tool was described in the following article:
+
+<blockquote>
+Marina Spivak, Jason Weston, Leon Bottou, Lukas Käll and William
+Stafford Noble.  "Improvements to the Percolator algorithm for peptide
+identification from shotgun proteomics data sets." <i>Journal of
+Proteome Research.</i></blockquote></li>
+
+<li>
+Version 1.05 of <code>percolator</code> has now been integrated into
+the Crux source tree.  A separate installation
+of <code>percolator</code> is no longer needed for basic
+<code>percolator</code> functionality. Note, however,
+that <code>percolator</code> remains under active development.  You
+may therefore wish to install the current, stand-alone version
+of <code>percolator</code> and run it separately to take advantage of
+new features.</li>
+
+</ul>
+
+<h4>Minor changes</h4>
+
+<ul>
+
+<li>
+The internal normalization of the observed spectra has been modifed to
+drop those peaks whose intensity is less than 1/20 of the maximum
+intensity in the spectrum.  This brings the xcorr score
+for <code>crux</code> into closer agreement with the xcorr score
+for SEQUEST<sup>®</sup>.</li>
+
+<li>
+Compute-q-values now generates three different q-values (1) from
+p-values using an analytical null model, (2) from decoys and xcorr
+using an empirical null model, or (3) from decoys and p-values using
+an empirical null model.  All three types of q-values are computed
+when p-values and decoys are present in the search results.</li>
+
+<li>
+A parameter file is now automatically written to the output
+directory.</li>
+
+<li>
+A log file recording messages sent to stderr has been added for
+<code>search-for-matches</code>, <code>compute-q-values</code>,
+and <code>percolator</code>.</li>
+
+<li>
+The <code>--use-mz-window</code> parameter is now available for
+<code>search-for-matches</code>.  When enabled, peptides must be
+within +/- 'm/z-window' of the spectrum m/z.  The m/z-window value is
+taken from <code>mass-window</code>.</li>
+
+<li>
+A numerical bug in the Weibull p-value calculation was fixed, which
+had previously caused occasional erroneous NaNs to be output.</li>
+
+<li>
+The Weibull estimated p-values generated
+by <code>search-for-matches</code> are now returned as p-values
+instead of as -log(p-value).  The corresponding q-values returned from
+<code>compute-q-values</code> are also now returned without the -log
+transform.</li>
+
+<li>
+The <code>--precision</code> option has been changed to control the
+total number of significant digits printed instead of the number of
+digits after the decimal point.  The default precision has changed
+from 6 to 8.</li>
+
+<li>
+The parameters estimated for the Weibull distribution (used for
+computing p-values) now use the xcorrs from all PSMs for a spectrum
+instead of a random selection of 500.</li>
+
+<li>
+The estimation of Weibull distribution parameters requires a minimum
+number of scored PSMs.  In the previous version, spectra with fewer
+PSMs than the minimum were not given a p-value.  Crux will now
+generate extra decoys until there are enough scores.</li>
+
+<li>
+The p-values for decoy PSMs are now generated from the same Weibull
+distribution parameters as are used for the targets of the same
+spectrum.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.21</h3> May 14, 2009
+
+<ul>
+
+<li>
+The output for <code>search-for-matches</code>, 
+<code>compute-q-values</code>, and <code>percolator</code>
+has been revised extensively.
+<code>crux</code> will now create a directory, and all output files
+will be created in that directory. 
+By default the directory will be named <code>crux-output</code>,
+but this can be changed using the new <code>output-dir</code> option.
+<br>
+The output files for <code>search-for-matches</code> will be:
+<ul>
+<li><code>search.target.csm</code></li>
+<li><code>search.decoy-?.csm</code></li>
+<li><code>search.target.sqt</code></li>
+<li><code>search.target.txt</code></li>
+</ul>
+The output files for <code>compute-q-values</code> will be:
+<ul>
+<li><code>qvalues.target.sqt</code></li>
+<li><code>qvalues.target.txt</code></li>
+</ul>
+The output files for <code>percolator</code> will be:
+<ul>
+<li><code>percolator.target.sqt</code></li>
+<li><code>percolator.target.txt</code></li>
+</ul>
+</li>
+<li>
+The <code>fileroot</code> option has been added.
+This option is used to specify a string which will be added as a prefix
+to all output files.
+</li>
+<li>
+The option <code>cleavages</code> was replaced with two
+options, <code>enzyme</code> which specifies the name of an enzyme
+(e.g.trypsin) and <code>digestion</code> which indicates
+the degree of specificity, partial or full digest.  The full list of
+available enzymes is in the html docs and in the usage statement.
+See also <code>custom-enzyme</code> below.
+
+<li>
+The option <code>custom-enzyme</code> allows users to define arbitrary
+digestion rules.  This overrides the <code>enzyme</code> option.
+Syntax for the custom digestion rule is the same the syntax used by
+X!Tandem and is described in the html docs.
+
+<li>
+The number of PSMs per spectrum printed to the output files is now
+controlled by one option, <code>top-match</code>.  This
+makes <code>max-sqt-result</code> obsolete.
+
+<li>
+It is now possible to control how many decoy sequences are generated
+and in which file(s) they are returned.  There is a new
+option, <code>num-decoys-per-target</code>, which can be used to
+generate more than one shuffled peptide per spectrum.  This
+replaces <code>number-decoy-set</code>.    
+
+<li>
+A new option, <code>decoy-location</code> has been introduced.  The
+three possible values are 'target-file' where all PSMs (target and
+decoys) are sorted together for each spectrum and returned in one
+file, 'one-decoy-file' where target PSMs are printed to one file and
+all decoys are printed to another, and 'separate-decoy-files' where
+there are as many decoy files as there are decoys per target.
+
+<li>
+Protein names for decoy matches are now prepended with 'rand_' in the
+SQT files as in 
+'L rand_Y45678'.
+
+<li>
+The option <code>unique-peptides</code> only applies
+to <code>crux-generate-matches</code>.  Each peptide is stored in the
+index exactly once with references to all protein sources.  Searches with
+fasta files print each peptide only once.
+
+<li>
+The precision of the masses and scores printed to the sqt and text
+files can now be specified by the user.  The default precision changed
+from 2 to 6.</li>
+
+<li>
+Search progress is now reported by printing every 10th spectrum that is
+searched.  The verbosity can be adjusted with the  parameter
+<code>print-search-progress</code>.
+
+<li>
+Decoy (shuffled) sequences now keep the first and last residue the
+same as the target sequence that was shuffled to produce it.  This is
+a reversion to previous behavior.
+
+<li>
+It is now possible to skip the Sp score and score all PSMs with xcorr.
+The default procedure is still to score all peptides for one spectrum
+with Sp, rank by Sp, and eliminate all but the best-ranking PSMs (by
+default, the top 500).  The remaining PSMs are scored by xcorr,
+re-ranked by xcorr and the top results returned.  By setting
+max-rank-preliminary=0, the Sp scoring is skipped and xcorr is
+computed for all PSMs.</li>
+
+<li>
+A new parameter <code>reverse-sequence</code> can be used to generate
+decoy peptides by reversing them rather than shuffling.  The first and
+last residues are left unmoved.  If the sequence is a palindrome ,
+then a decoy will be generated by shuffling and a note to that effect
+will be printed at the DETAILED INFO level of output (verbosity =
+40).</li>
+
+<li>
+P-values are now computed for decoy peptides.</li>
+
+<li>
+The algorithm used to calculated the xcorr score has been modified so
+that xcorr score will be in better agreement with scores generated by
+SEQUEST<sup>®</sup>.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.20</h3> January 6, 2009
+
+<ul>
+
+<li>
+Generating peptides and searching with up to eleven different dynamic
+modifications is now possible.  New options associated with this
+feature are mod, cmod, nmod, max-mods, max-aas-modified.
+
+<li>
+The format of the .csm files has changed and files written by older
+versions of crux are not readable with crux version 1.2.
+
+<li>
+When the option <code>cleavages</code> is set to <code>all</code>,
+peptide generation ignores all tryptic cleavage sites, effectively setting
+the <code>missed-cleavages</code> option to <code>TRUE</code>
+regardless of user settings.
+
+<li>
+When one spectrum has identical xcorr scores for different sequences,
+the rank of all those matches will be the same.  Matches with the next
+highest score will rank one below.
+
+<li>
+The options for setting the preliminary and primary score type have
+been removed and are fixed as Sp and xcorr, respectively.  A new
+option, <code>compute-p-values=<T | F></code>, was added to
+control p-value computation.
+
+<li>
+The SQT file contains the spectrum calculated mass instead of observed
+mass/charge on the S line.
+
+<li>
+There is now a test for confirming that the file downloaded from the
+crux website was not corrupted.  See installation instructions for
+details. 
+
+<li>
+Calculating a p-value requires a minimum of 40 matches.  Spectra with
+fewer than 40 matches will have p-value scores returned as NaN and a
+warning will be printed at the DETAILED_INFO level (40) of verbosity.
+
+<li>
+Fixed error in generating neutral-loss peaks created as part of the
+theoretical spectrum. 
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.02</h3> December 1, 2008
+
+<ul>
+
+<li>
+Three programs, <code>crux-create-index</code>,
+<code>crux-search-for-matches</code>,
+and <code>crux-analyze-matches</code>, were merged into one program
+named
+<code>crux</code>.</li>
+
+<li>
+Percolator is now truly optional as all Crux programs will build
+without it.</li>
+
+<li>
+Fragment masses can now be calculated as average or mono-isotopic.
+This is controlled by the <code>fragment-mass</code> option in the
+parameter file.</li>
+
+<li>
+The name of the score-type option that calculates p-values was changed
+from xcorr-logp to xcorr-pvalue.</li>
+
+<li>
+SQT files have two new lines in the header which describe the
+arrangement of values in the results.</li>
+
+<li>
+HTML documentation was updated to reflect the above changes.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.01</h3>
+
+<p>October 15, 2008</p>
+
+<ul>
+
+<li>
+A bug limiting the length of the name of an index file was fixed.</li>
+
+<li>
+Modifications were made so that Crux will build with version
+1.05 of Percolator.  This is the only supported version of
+Percolator.</li>
+
+<li>
+Memory leaks in <code>crux-search-for-matches</code> were patched.</li>
+
+<li>
+The <code>--version</code> option was added.</li>
+
+</ul>
+
+<hr></hr>
+
+<h3>Version 1.0</h3>
+
+<p>March 4, 2008</p>
+
+<blockquote>
+Initial release
+</blockquote>
+	<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
+
diff --git a/doc/user/runall b/doc/user/runall
new file mode 100755
index 0000000..94d37db
--- /dev/null
+++ b/doc/user/runall
@@ -0,0 +1,28 @@
+#!/bin/bash -x
+
+# These three options make it harder to for some part of a script to
+# fail without you recognizing it. nounset means that references to an
+# unset variable result in an error. This means that you can no longer
+# do stuff like this if VAR is potentially unset, because "$VAR" returns
+# an error rather than "":
+#
+# if [ "$VAR" ]; then
+#
+# fi
+#
+# To explicitly indicate that you are OK with the variable potentially
+# being empty you can instead use ${VAR:-}.
+
+# To avoid errexit for a single command, use "|| true", e.g.,
+#    diff foo foobar || true
+
+set -o nounset
+set -o pipefail
+set -o errexit 
+set -o xtrace
+
+CRUX=../../src/crux
+for command in `$CRUX create-docs list`; do
+  $CRUX create-docs $command > $command.html
+done
+$CRUX create-docs default-params > default.params
diff --git a/doc/user/search-for-xlinks.html b/doc/user/search-for-xlinks.html
new file mode 100644
index 0000000..0af3430
--- /dev/null
+++ b/doc/user/search-for-xlinks.html
@@ -0,0 +1,256 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>search-for-xlinks</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>search-for-xlinks</h1>
+<h2>Usage:</h2>
+<p><code>crux search-for-xlinks [options] <ms2 file> <protein fasta file> <link sites> <link mass></code></p>
+<h2>Description:</h2>
+<p>This command compares a set of spectra to cross-linked peptides derived from a protein database in FASTA format. For each spectrum, the program generates a list of candidate molecules, including linear peptides, dead-end products, self-loop products and cross-linked products, with masses that lie within a specified range of the spectrum's precursor mass. These candidate molecules are ranked using XCorr, and the XCorr scores are assigned statistical confidence estimates using an empiri [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>ms2 file</code> – File containing spectra to be searched.</li>
+  <li><code>protein fasta file</code> – The name of the file in FASTA format from which to retrieve proteins.</li>
+  <li><code>link sites</code> – A comma delimited list of the amino acids to allow cross-links with. For example, "A:K,A:D" means that the cross linker can attach A to K or A to D. Cross-links involving the N-terminus of a protein can be specified as a link site by using "nterm". For example, "nterm:K" means that a cross-link can attach a protein's N-terminus to a lysine.</li>
+  <li><code>link mass</code> – The mass modification of the linker when attached to a peptide.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>search-for-xlinks.target.txt</code> – a tab-delimited text file containing the peptide-spectrum matches (PSMs). See the <a href="../file-formats/txt-format.html">txt file format</a> for a list of the fields.</li>
+  <li><code>search-for-xlinks.decoy.txt</code> – a tab-delimited text file containing the decoy PSMs. See the <a href="../file-formats/txt-format.html">txt file format</a> for a list of the fields.</li>
+  <li><code>search-for-xlinks.qvalues.txt</code> – a tab-delimited text file containing the top ranked PSMs with calculated q-values. See the <a href="../file-formats/txt-format.html">txt file format</a> for a list of the fields.</li>
+  <li><code>search-for-xlinks.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>search-for-xlinks.log.txt</code> – a log file containing a copy of all messages that were printed to stderr.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>search-for-xlinks options</h3>
+<ul>
+  <li class="nobullet"><code>--require-xlink-candidate T|F</code> – If there is no cross-link candidate found, then don't bother looking for linear, self-loop, and dead-link candidates. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--xlink-top-n <integer></code> – Top-n open-mod peptides to consider in the second pass, value of 0 will search all candiates. Default = <code>250</code>.</li>
+  <li class="nobullet"><code>--cmod <string></code> – Specify a variable modification to apply to C-terminus of peptides. <mass change>:<max distance from protein c-term (-1 for no max)>. Note that this parameter only takes effect when specified in the parameter file. Default = <code>NO MODS</code>.</li>
+  <li class="nobullet"><code>--nmod <string></code> – Specify a variable modification to apply to N-terminus of peptides.  <mass change>:<max distance from protein n-term (-1 for no max)> Note that this parameter only takes effect when specified in the parameter file. Default = <code>NO MODS</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Peptide properties</h3>
+<ul>
+  <li class="nobullet"><code>--min-mass <float></code> – The minimum mass (in Da) of peptides to consider. Default = <code>200</code>.</li>
+  <li class="nobullet"><code>--max-mass <float></code> – The maximum mass (in Da) of peptides to consider. Default = <code>7200</code>.</li>
+  <li class="nobullet"><code>--min-length <integer></code> – The minimum length of peptides to consider. Default = <code>6</code>.</li>
+  <li class="nobullet"><code>--max-length <integer></code> – The maximum length of peptides to consider. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--isotopic-mass average|mono</code> – Specify the type of isotopic masses to use when calculating the peptide mass. Default = <code>mono</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Amino acid modifications</h3>
+<ul>
+  <li class="nobullet"><code>--mod <string></code> – Consider modifications on any amino acid in aa list with at most max-per-peptide in one peptide. The parameter takes the form <mass change>:<aa list>:<max per peptide>:<prevents cleavage>:<prevents cross-link>. This parameter may be included with different values multiple times so long as the total number of mod, cmod, and nmod parameters does not exceed 11. The "prevents cleavage" and "prevent [...]
+  <li class="nobullet"><code>--max-mods <integer></code> – The maximum number of modifications that can be applied to a single peptide. Default = <code>255</code>.</li>
+  <li class="nobullet"><code>--A <float></code> – Change the mass of all amino acids 'A' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--C <float></code> – Change the mass of all amino acids 'C' by the given amount. Default = <code>57.021464</code>.</li>
+  <li class="nobullet"><code>--D <float></code> – Change the mass of all amino acids 'D' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--E <float></code> – Change the mass of all amino acids 'E' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--F <float></code> – Change the mass of all amino acids 'F' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--G <float></code> – Change the mass of all amino acids 'G' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--H <float></code> – Change the mass of all amino acids 'H' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--I <float></code> – Change the mass of all amino acids 'I' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--K <float></code> – Change the mass of all amino acids 'K' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--L <float></code> – Change the mass of all amino acids 'L' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--M <float></code> – Change the mass of all amino acids 'M' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--N <float></code> – Change the mass of all amino acids 'N' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--P <float></code> – Change the mass of all amino acids 'P' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--Q <float></code> – Change the mass of all amino acids 'Q' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--R <float></code> – Change the mass of all amino acids 'R' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--S <float></code> – Change the mass of all amino acids 'S' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--T <float></code> – Change the mass of all amino acids 'T' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--V <float></code> – Change the mass of all amino acids 'V' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--W <float></code> – Change the mass of all amino acids 'W' by the given amount. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--Y <float></code> – Change the mass of all amino acids 'Y' by the given amount. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Decoy database generation</h3>
+<ul>
+  <li class="nobullet"><code>--seed <string></code> – When given a unsigned integer value seeds the random number generator with that value. When given the string "time" seeds the random number generator with the system time. Default = <code>1</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Enzymatic digestion</h3>
+<ul>
+  <li class="nobullet"><code>--enzyme no-enzyme|trypsin|trypsin/p|chymotrypsin|elastase|clostripain|cyanogen-bromide|iodosobenzoate|proline-endopeptidase|staph-protease|asp-n|lys-c|lys-n|arg-c|glu-c|pepsin-a|elastase-trypsin-chymotrypsin|custom-enzyme</code> – Specify the enzyme used to digest the proteins in silico. Available enzymes (with the corresponding digestion rules indicated in parentheses) include no-enzyme ([X]|[X]), trypsin ([RK]|{P}), trypsin/p ([RK]|[]), chymotrypsin  [...]
+  <li class="nobullet"><code>--custom-enzyme <string></code> – Specify rules for in silico digestion of protein sequences. Overrides the enzyme option. Two lists of residues are given enclosed in square brackets or curly braces and separated by a |. The first list contains residues required/prohibited before the cleavage site and the second list is residues after the cleavage site. If the residues are required for digestion, they are in square brackets, '[' and ']'. If the re [...]
+  <li class="nobullet"><code>--digestion full-digest|partial-digest|non-specific-digest</code> – Specify whether every peptide in the database must have two enzymatic termini (full-digest) or if peptides with only one enzymatic terminus are also included (partial-digest). Default = <code>full-digest</code>.</li>
+  <li class="nobullet"><code>--missed-cleavages <integer></code> – Maximum number of missed cleavages per peptide to allow in enzymatic digestion. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Precursor selection</h3>
+<ul>
+  <li class="nobullet"><code>--precursor-window <float></code> – Tolerance used for matching peptides to spectra. Peptides must be within +/- 'precursor-window' of the spectrum value. The precursor window units depend upon precursor-window-type. Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--precursor-window-type mass|mz|ppm</code> – Specify the units for the window that is used to select peptides around the precursor mass location (mass, mz, ppm). The magnitude of the window is defined by the precursor-window option, and candidate peptides must fall within this window. For the mass window-type, the spectrum precursor m+h value is converted to mass, and the window is defined as that mass +/- precursor-window. If the m+h value is not avail [...]
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search parameters</h3>
+<ul>
+  <li class="nobullet"><code>--spectrum-min-mz <float></code> – The lowest spectrum m/z to search in the ms2 file. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--spectrum-max-mz <float></code> – The highest spectrum m/z to search in the ms2 file. Default = <code>1e+09</code>.</li>
+  <li class="nobullet"><code>--spectrum-charge 1|2|3|all</code> – The spectrum charges to search. With 'all' every spectrum will be searched and spectra with multiple charge states will be searched once at each charge state. With 1, 2, or 3 only spectra with that charge state will be searched. Default = <code>all</code>.</li>
+  <li class="nobullet"><code>--compute-sp T|F</code> – Compute the preliminary score Sp for all candidate peptides. Report this score in the output, along with the corresponding rank, the number of matched ions and the total number of ions. This option is recommended if results are to be analyzed by Percolator or Barista. If sqt-output is enabled, then compute-sp is automatically enabled and cannot be overridden. Note that the Sp computation requires re-processing each observed spe [...]
+  <li class="nobullet"><code>--precursor-window-weibull <float></code> – Search decoy peptides within +/- precursor-window-weibull of the precursor mass. The resulting scores are used only for fitting the Weibull distribution Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--precursor-window-type-weibull mass|mz|ppm</code> – Window type to use in conjunction with the precursor-window-weibull parameter. Default = <code>mass</code>.</li>
+  <li class="nobullet"><code>--min-weibull-points <integer></code> – Keep shuffling and collecting XCorr scores until the minimum number of points for weibull fitting (using targets and decoys) is achieved. Default = <code>4000</code>.</li>
+  <li class="nobullet"><code>--max-ion-charge <string></code> – Predict theoretical ions up to max charge state (1, 2, ... ,6) or up to the charge state of the peptide ("peptide"). If the max-ion-charge is greater than the charge state of the peptide, then the maximum is the peptide charge.  Default = <code>peptide</code>.</li>
+  <li class="nobullet"><code>--scan-number <string></code> – A single scan number or a range of numbers to be searched. Range should be specified as 'first-last' which will include scans 'first' and 'last'. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--mz-bin-width <float></code> – Before calculation of the XCorr score, the m/z axes of the observed and theoretical spectra are discretized. This parameter specifies the size of each bin. The exact formula for computing the discretized m/z value is floor((x/mz-bin-width) + 1.0 - mz-bin-offset), where x is the observed m/z value. For low resolution ion trap ms/ms data 1.0005079 and for high resolution ms/ms 0.02 is recommended. Default = <code>1.00 [...]
+  <li class="nobullet"><code>--mz-bin-offset <float></code> – In the discretization of the m/z axes of the observed and theoretical spectra, this parameter specifies the location of the left edge of the first bin, relative to mass = 0 (i.e., mz-bin-offset = 0.xx means the left edge of the first bin will be located at +0.xx Da). Default = <code>0.4</code>.</li>
+  <li class="nobullet"><code>--mod-mass-format mod-only|total|separate</code> – Specify how sequence modifications are reported in various output files. Each modification is reported as a number enclosed in square braces following the modified residue; however, the number may correspond to one of three different masses: (1) 'mod-only' reports the value of the mass shift induced by the modification; (2) 'total' reports the mass of the residue with the modification (residue mass plus [...]
+  <li class="nobullet"><code>--use-flanking-peaks T|F</code> – Include flanking peaks around singly charged b and y theoretical ions. Each flanking peak occurs in the adjacent m/z bin and has half the intensity of the primary peak. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fragment-mass average|mono</code> – Specify which isotopes to use in calculating fragment ion mass. Default = <code>mono</code>.</li>
+  <li class="nobullet"><code>--isotope-windows <string></code> – Provides a list of isotopic windows to search. For example, -1,0,1 will search in three disjoint windows: (1) precursor_mass - neutron_mass +/- window, (2) precursor_mass +/- window, and (3) precursor_mass + neutron_mass +/- window. The window size is defined from the precursor-window and precursor-window-type parameters. This option is only available when use-old-xlink=F. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--compute-p-values T|F</code> – Estimate the parameters of the score distribution for each spectrum by fitting to a Weibull distribution, and compute a p-value for each xlink product. This option is only available when use-old-xlink=F. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Fragment ion parameters</h3>
+<ul>
+  <li class="nobullet"><code>--use-a-ions T|F</code> – Consider a-ions in the search? Note that an a-ion is equivalent to a neutral loss of CO from the b-ion.  Peak height is 10 (in arbitrary units). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--use-b-ions T|F</code> – Consider b-ions in the search? Peak height is 50 (in arbitrary units). Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--use-c-ions T|F</code> – Consider c-ions in the search? Peak height is 50 (in arbitrary units). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--use-x-ions T|F</code> – Consider x-ions in the search? Peak height is 10 (in arbitrary units). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--use-y-ions T|F</code> – Consider y-ions in the search? Peak height is 50 (in arbitrary units). Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--use-z-ions T|F</code> – Consider z-ions in the search? Peak height is 50 (in arbitrary units). Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Cross-linking parameters</h3>
+<ul>
+  <li class="nobullet"><code>--use-old-xlink T|F</code> – Use the old version of xlink-searching algorithm. When false, a new version of the code is run. The new version supports variable modifications and can handle more complex databases. This new code is still in development and should be considered a beta release. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--xlink-include-linears T|F</code> – Include linear peptides in the search. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--xlink-include-deadends T|F</code> – Include dead-end peptides in the search. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--xlink-include-selfloops T|F</code> – Include self-loop peptides in the search. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--xlink-include-inter T|F</code> – Include inter-protein cross-link candidates within the search. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--xlink-include-intra T|F</code> – Include intra-protein cross-link candiates within the search. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--xlink-include-inter-intra T|F</code> – Include crosslink candidates that are both inter and intra. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--xlink-prevents-cleavage <string></code> – List of amino acids for which the cross-linker can prevent cleavage. This option is only available when use-old-xlink=F. Default = <code>K</code>.</li>
+  <li class="nobullet"><code>--max-xlink-mods <integer></code> – Specify the maximum number of modifications allowed on a crosslinked peptide. This option is only available when use-old-xlink=F. Default = <code>255</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+  <li class="nobullet"><code>--use-z-line T|F</code> – Specify whether, when parsing an MS2 spectrum file, Crux obtains the precursor mass information from the "S" line or the "Z" line.  Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--top-match <integer></code> – Specify the number of matches to report for each spectrum. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/sort-by-column.html b/doc/user/sort-by-column.html
new file mode 100644
index 0000000..81fc8f2
--- /dev/null
+++ b/doc/user/sort-by-column.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>sort-by-column</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>sort-by-column</h1>
+<h2>Usage:</h2>
+<p><code>crux sort-by-column [options] <tsv file> <column name></code></p>
+<h2>Description:</h2>
+<p>Sort the rows of a tab-delimited file according to the values in a specified column.</p>
+<h2>Input:</h2>
+<ul>
+  <li><code>tsv file</code> – A tab-delimited file, with column headers in the first row. Use "-" to read from standard input.</li>
+  <li><code>column name</code> – A column name.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – a copy of the given file, with rows sorted according to the values in the specified column.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--delimiter <string></code> – Specify the input and output delimiter to use when processing the delimited file.  The argument can be either a single character or the keyword 'tab.' Default = <code>tab</code>.</li>
+  <li class="nobullet"><code>--header T|F</code> – Print the header line of the file, in addition to the columns that match. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--column-type int|real|string</code> – Specifies the data type of the column, either an integer (int), a floating point number (real), or a string. Default = <code>string</code>.</li>
+  <li class="nobullet"><code>--ascending T|F</code> – Sort in ascending (T) or descending (F) order. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/spectral-counts.html b/doc/user/spectral-counts.html
new file mode 100644
index 0000000..f95b686
--- /dev/null
+++ b/doc/user/spectral-counts.html
@@ -0,0 +1,152 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>spectral-counts</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>spectral-counts</h1>
+<h2>Usage:</h2>
+<p><code>crux spectral-counts [options] <input PSMs></code></p>
+<h2>Description:</h2>
+<p>Given a collection of scored PSMs, produce a list of proteins or peptides ranked by a quantification score. Spectral-counts supports four types of quantification: Normalized Spectral Abundance Factor (NSAF), Distributed Normalized Spectral Abundance (dNSAF), Normalized Spectral Index (SI<sub>N</sub>) and Exponentially Modified Protein Abundance Index (emPAI). The NSAF method is from <a href="http://www.ncbi.nlm.nih.gov/pubmed/17138671">Paoletti et al. (2006)</a>. The SI<sub>N</sub> me [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>input PSMs</code> – A PSM file in either tab delimited text format (as produced by percolator, q-ranker, or barista) or pepXML format.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>spectral-counts.target.txt</code> – a tab-delimited text file containing the protein IDs and their corresponding scores, in sorted order.</li>
+  <li><code>spectral-counts.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other Crux programs.</li>
+  <li><code>spectral-counts.log.txt</code> – All messages written to standard error.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>spectral-counts options</h3>
+<ul>
+  <li class="nobullet"><code>--parsimony none|simple|greedy</code> – Perform a parsimony analysis on the proteins, and report a "parsimony rank" column in the output file. This column contains integers indicating the protein's rank in a list sorted by spectral counts. If the parsimony analysis results in two proteins being merged, then their parsimony rank is the same. In such a case, the rank is assigned based on the largest spectral count of any protein in the merged meta-protein [...]
+  <li class="nobullet"><code>--threshold <float></code> – Only consider PSMs with a threshold value. By default, q-values are thresholded using a specified threshold value. This behavior can be changed using the --custom-threshold and --threshold-min parameters. Default = <code>0.01</code>.</li>
+  <li class="nobullet"><code>--threshold-type none|qvalue|custom</code> – Determines what type of threshold to use when filtering matches. none : read all matches, qvalue : use calculated q-value from percolator or q-ranker, custom : use --custom-threshold-name and --custom-threshold-min parameters. Default = <code>qvalue</code>.</li>
+  <li class="nobullet"><code>--input-ms2 <string></code> – MS2 file corresponding to the psm file. Required to measure the SIN. Ignored for NSAF, dNSAF and EMPAI. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--unique-mapping T|F</code> – Ignore peptides that map to multiple proteins. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--quant-level protein|peptide</code> – Quantification at protein or peptide level. Default = <code>protein</code>.</li>
+  <li class="nobullet"><code>--measure RAW|NSAF|dNSAF|SIN|EMPAI</code> – Type of analysis to make on the match results: (RAW|NSAF|dNSAF|SIN|EMPAI). With exception of the RAW metric, the database of sequences need to be provided using --protein-database. Default = <code>NSAF</code>.</li>
+  <li class="nobullet"><code>--custom-threshold-name <string></code> – Specify which field to apply the threshold to. The direction of the threshold (<= or >=) is governed by --custom-threshold-min. By default, the threshold applies to the q-value, specified by "percolator q-value", "q-ranker q-value", "decoy q-value (xcorr)", or "barista q-value". Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--custom-threshold-min T|F</code> – When selecting matches with a custom threshold, custom-threshold-min determines whether to filter matches with custom-threshold-name values that are greater-than or equal (F) or less-than or equal (T) than the threshold. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--mzid-use-pass-threshold T|F</code> – Use mzid's passThreshold attribute to filter matches. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--protein-database <string></code> – The name of the file in FASTA format. Default = <code><empty></code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/stat-column.html b/doc/user/stat-column.html
new file mode 100644
index 0000000..71d8dc9
--- /dev/null
+++ b/doc/user/stat-column.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>stat-column</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>stat-column</h1>
+<h2>Usage:</h2>
+<p><code>crux stat-column [options] <tsv file> <column name></code></p>
+<h2>Description:</h2>
+<p>Given a tab-delimited file, collect summary statistics on the values within a specified column. The specified column must contain numeric values.</p>
+<h2>Input:</h2>
+<ul>
+  <li><code>tsv file</code> – A tab-delimited file, with column headers in the first row. Use "-" to read from standard input.</li>
+  <li><code>column name</code> – A column name.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – The program prints to standard output the following statistics for the specified column: number of rows, minimum, maximum, sum, average, and median of the data values.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--delimiter <string></code> – Specify the input and output delimiter to use when processing the delimited file.  The argument can be either a single character or the keyword 'tab.' Default = <code>tab</code>.</li>
+  <li class="nobullet"><code>--header T|F</code> – Print the header line of the file, in addition to the columns that match. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--precision <integer></code> – Set the precision for scores written to sqt and text files. Default = <code>8</code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/styles.css b/doc/user/styles.css
new file mode 100644
index 0000000..6eb6d2b
--- /dev/null
+++ b/doc/user/styles.css
@@ -0,0 +1,570 @@
+ at import url(https://fonts.googleapis.com/css?family=Roboto:400,300,600);
+
+* {
+    margin: 0;
+}
+a {
+  border: none;
+  text-decoration: none;
+}
+html {
+    font-size: 100%; /* 1 */
+    -webkit-text-size-adjust: 100%; /* 2 */
+    -ms-text-size-adjust: 100%; /* 2 */
+}
+
+body {
+    background-color: #ece8e5;
+     margin: 0;
+    padding: 0;
+	
+}
+
+/*Sticky Footer*/
+html, body {
+  height: 100%;
+    font-family: Arial,Verdana,sans-serif;
+	font-size:14px;
+}
+
+table {
+    border-collapse: collapse;
+}
+table > thead, th{
+  border: 1px solid #000;
+  padding:5px;
+  background: #4d87a2;
+  color:#f3f3f7;
+  font-weight: 400;
+  font-family: 'Roboto', sans-serif;
+}
+caption 
+{    font-weight: 400;
+    font-family: 'Roboto', sans-serif;
+    padding-left:10px;
+}
+table tr:nth-child(even) {
+  background: #f3f3f7;
+}
+
+.code {
+  background:#F8F8FF; 
+  border:black dashed 1px; 
+  padding:1px;
+  font:monospace;
+  padding-left:3px;
+  padding-right:3px;
+  padding-bottom:0px;
+  display: inline-block; /* box only as wide as content */
+}
+code {
+  font-family: monospace;
+}
+.page-wrap {
+  min-height: 100%;
+  margin-bottom: -180px; /* equal to footer height */  
+  width:100%;
+}
+.page-wrap:after {
+  content: "";
+  display: block;  
+}
+pre {
+    white-space: pre-wrap;       /* Since CSS 2.1 */
+    white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
+    white-space: -pre-wrap;      /* Opera 4-6 */
+    white-space: -o-pre-wrap;    /* Opera 7 */
+    word-wrap: break-word;       /* Internet Explorer 5.5+ */
+    padding: 10px;
+    background: #eee;
+    border-radius: 5px;
+    overflow-x: auto;
+    background: #f3f3f7;
+    border: 1px solid #dedee3;
+    margin-bottom: 22px;
+    font-family: monospace;
+    font-size: 12px;
+    overflow-x: auto;
+    white-space: pre-wrap; 
+    padding-bottom:0px;
+    display: inline-block;
+    padding-right:20px;
+}
+/* Content STYLES */
+#content {
+    background-color: #FFF;
+    min-height: calc(100vh - 280px);
+    width:80%;
+    margin:auto;
+    min-width:320px;
+    overflow: break-word;
+    padding:10px;
+    padding-bottom:20px;
+}
+#content p {
+  font-size:14px;
+  padding-top:5px;
+  padding-bottom:5px;
+}
+#content h2 {
+  font-size:30px;
+  color:#034463;
+  font-size: 30px; 
+  font-weight: 600; 
+  line-height: 30px; 
+  margin: 5px; 
+  text-align: center;
+  font-family: 'Roboto', sans-serif;
+}
+#content h3 {
+  font-size:20px;
+  padding:5px;
+  padding-top:15px;
+  padding-bottom:2px;
+  font-weight:400;
+  font-family: 'Roboto', sans-serif;
+}
+#content h4 {
+  font-size:16px;
+  padding:2px;
+  padding-left:5px;
+}
+#content a {
+  color: #2188b8;
+}
+#content a:hover {
+  color: #AA2244;
+}
+#content ul > li {
+
+}
+.nobullet {
+	 list-style-type: none;
+}
+/*END content STYLES*/
+#centerfooter {
+   display: inline-block;
+}
+.site-footer, .page-wrap:after {
+  height: 180px; 
+  text-align: center;
+}
+.site-footer {
+  background: #FFF;
+  color: #076FA2;
+  font-size:12px !important;
+  padding-top:30px;
+  /*margin-top:20px;*/
+  border-top: 2px solid #69B2D5;
+    font-family:Arial,Verdana,sans-serif !important;
+}
+.site-footer a{
+  color: #076FA2;
+  text-decoration: none;
+}
+.site-footer a:hover{
+  color: #2682AF;
+  text-decoration: none;
+}
+.site-footer h3 {
+  color:#034463;
+    font-size:16px;
+    line-height:22px;
+    border-bottom: 2px solid #B3DAED;
+    width:200px;
+}
+.site-footer img {
+  float:left;
+  padding-right:6px;
+}
+.footerimportantlinks {
+  float:left;
+  margin-left:50px;
+  height:100px;
+  text-align: left;
+}
+.footerimportantlinks ul{
+  float:left;
+  list-style-type: none;
+  margin-left:-40px;
+  margin-top:4px;
+ -moz-column-count: 2;
+    -moz-column-gap: 10px;
+    -webkit-column-count: 2;
+    -webkit-column-gap: 10px;
+    column-count: 2;
+    column-gap: 10px;
+
+}
+.footerimportantlinks li{
+  margin-top:5px;
+  width:150px;
+}
+.tutoriallinks {
+  margin-left:50px;
+}
+.tutoriallinks ul {
+   -moz-column-count: 1;
+    -moz-column-gap: 10px;
+    -webkit-column-count: 1;
+    -webkit-column-gap: 10px;
+    column-count: 1;
+    column-gap: 10px;
+}
+.tutoriallinks li {
+  width:300px;
+}
+#footertext {
+    float:left;
+    margin-top:20px;
+    padding-top:5px;
+    margin-left:20px;
+    height:100px;
+    width:300px;
+    border-top: 2px solid #B3DAED;
+}
+#footertext p {
+    text-align: center;
+    font-size:11px;
+}
+#footertext a {
+    color: #05577F;
+    text-decoration: underline;
+}
+/*******************/
+/* Responsive Menu */
+nav {
+    height: 100px;
+    overflow: show;
+    width: 100%;
+    background: #FFF;
+    font-size: 13pt;
+    font-weight: bold;
+    position: relative;
+    border-bottom: 2px solid #69B2D5;
+    min-width:300px;
+}
+
+#navitems a {
+    display: inline-block;
+    text-align: center;
+    text-decoration: none;
+    line-height: 40px;
+    padding-left:10px;
+    padding-right:10px;
+    color:#4f8bac;
+    /*text-shadow: 1px 1px 0px #283744;*/
+}
+
+nav header {
+    display: none;
+        
+}
+
+nav ul {
+    padding: 0;
+    width:100%;
+    /*margin-left:370px;*/
+    float:left;
+    padding-left: 20px;
+    /*margin: 0 auto; /* CENTER MENU */
+    width: 400px;
+    height: 40px;
+    margin-top:60px;
+    background: #FFF;
+}
+nav li {
+    display: inline;
+    float: left;
+}
+
+#logo{
+    float:left;
+    height:100px;
+    margin-left:10%;
+}
+
+nav li a {
+    border-right: 1px solid #4199C4;
+    box-sizing:border-box;
+    -moz-box-sizing:border-box;
+    -webkit-box-sizing:border-box;
+}
+
+nav li:last-child a {
+    border-right: 0;
+}
+#navitems a:hover, #navitems a:active {
+    background-color: #B3DAED;
+}
+
+ at media screen and (max-width: 1124px) { 
+  .page-wrap {
+    min-height: 100%;
+    margin-bottom: -250px; /* equal to footer height */
+  }
+  .site-footer, .page-wrap:after {
+    height: 250px; 
+  }
+  #footertext {
+    padding-top:40px;
+    border:none;
+    margin-top:20px;
+    display: inline;
+    width:90%;
+    padding-left: 20px;
+    padding-right:20px;
+    text-align: center;
+  }
+}
+/*Styles for 780px (footer changes)*/
+ at media screen and (max-width: 780px) {
+   table {
+      margin:0;
+    }
+    #content {
+      width:100%;
+    }
+    body {
+      background-color: #FFF;
+    }
+  nav { 
+        height: 140px;
+    }
+    
+    nav ul {
+        width: 100%;
+        display: block;
+        height: auto;
+        margin-top:0px;
+    }
+    
+    .footerimportantlinks {
+      margin-left:50px;
+      margin-top:10px;
+    }
+    .page-wrap {
+      min-height: 100%;
+      margin-bottom: -300px; /* equal to footer height */
+    }
+    .site-footer, .page-wrap:after {
+      height: 300px; 
+    }
+}
+ at media screen and (max-width: 730px) {
+    .page-wrap {
+      min-height: 100%;
+      margin-bottom: -380px; /* equal to footer height */
+    }
+    .site-footer, .page-wrap:after {
+      height: 380px; 
+    }
+}
+/*Styles for screen 600px and lower*/
+ at media screen and (max-width: 600px) {
+    nav { 
+        height: 182px;
+    }
+    
+    nav ul {
+        width: 100%;
+        display: block;
+        height: auto;
+    }
+    nav li {
+        width: 50%;
+        float: left;
+        position: relative;
+    }
+    nav li a {
+        border: none;
+    }
+    #navitems a {
+        text-align: left;
+        width: 100%;
+        text-indent: 25px;
+        background: #FFF;
+    }
+}
+
+/*Styles for screen 515px and lower*/
+ at media only screen and (max-width : 515px) {
+    #logo {
+        height: 33px;
+        padding-top:0px;
+    }
+     
+    nav {
+        border-bottom: 0;
+        width: 100%;
+        height: 33px;
+        padding: 7px 0 0 0;
+        
+    }
+    nav ul {
+        display: none;
+        height: auto;
+        padding: 0 0 0 0;
+        clear: both;
+        background: #2188b8; 
+    
+    }
+    .btn {
+        width: 24px;
+        height: 22px;
+        background: #034463;
+        float: left;
+        cursor: pointer;
+        margin: 0 10px 0 10px;
+        padding: 3px 0px 0 6px;
+        -webkit-border-radius: 2px;
+        -moz-border-radius: 2px;
+          border-radius: 2px;
+        background:url('images/hamburger-menu.png') no-repeat center;
+    }
+    
+    .btn .icon {
+  display: block;
+  width: 18px;
+  height: 2px;
+  margin-top: 3px;
+  background-color: #034463;
+  -webkit-border-radius: 1px;
+     -moz-border-radius: 1px;
+          border-radius: 1px;
+  -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+     -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+          box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+}
+
+    
+    
+    
+}
+
+/*Smartphone*/
+ at media only screen and (max-width : 320px) {
+    nav li {
+        display: block;
+        float: none;
+        width: 100%;
+    }
+    nav li a {
+        border-bottom: 1px solid #787878;
+    }
+}
+
+/*index.html*/
+/***********/
+blockquote {
+  font-family:monospace;
+}
+.indentcitation {
+	border-left:4px solid #034463;
+	padding: 0px 10px;
+  -webkit-box-decoration-break: clone;
+  box-decoration-break: clone;
+  break-word:none;
+  background-color:#f9f9f9;
+}
+#schematic img {
+  width:calc(100% + 20px);
+  margin-left:-10px;
+  margin-top:-10px;
+}
+#schematic p {
+    font-size:14px;
+    margin:0;
+    padding:0;
+    width: calc(100%-10px);
+    padding:10px;
+}
+#commandstable {
+  font-family:monospace;
+  font-size:15px;
+}
+
+#commandstable b {
+  font-size:17px;
+  font-family: Arial;
+  line-height: 40px;
+  vertical-align: text-bottom;
+}
+#commandstable td {
+  padding:5px;
+  border:none;
+}
+#commandstable td:nth-child(even) {
+  padding-left:10px;
+  font-family: Arial;
+}
+/* fileformats.html */
+#fileFormatsTable {
+  border-collapse: collapse;
+  margin-left:auto;
+  margin-right: auto;
+  padding:0;
+}
+#fileFormatsTable tr:nth-child(even) {
+  background: #DEDEDE;
+}
+#fileFormatsTable th, td {
+  padding-top:5px;
+  padding-bottom: 5px;
+  padding-left:3px;
+  border: 1px solid #000;
+}
+
+/* features.html */
+#featurestable {
+  text-align: left;
+  font-size:14px;
+}
+
+#featurestable td{
+  padding-left:3px;
+}
+
+/*txt-format.html*/
+#tabformat td {
+  padding:3px;
+  font-size:14px;
+}
+
+/*search.html*/
+.searchtable td {
+  padding:2px 4px 2px 4px;
+  border:1px solid #000;
+  font-size:12px;
+  word-wrap: break-word;
+}
+
+/*STYLES FOR ALL AUTOGENERATED CONTENT*/
+.autogenerated h1 {
+ font-size:30px;
+  color:#034463;
+  font-size: 30px; 
+  font-weight: 600; 
+  line-height: 30px; 
+  margin: 5px; 
+  text-align: center;
+  font-family: 'Roboto', sans-serif;
+}
+.autogenerated h2, h3, h4 {
+  color: #000 !important;
+  font-size:16px !important;
+  margin:2px !important;
+  text-align: left !important;
+  line-height: 16px !important;
+  font-weight:600 !important;
+}
+.autogenerated h2 {
+  margin-top:10px !important;
+}
+.autogenerated h3 {
+  font-size:14px !important;
+  padding:0px !important;
+}
+.autogenerated ul {
+  padding-left:20px;
+}
\ No newline at end of file
diff --git a/doc/user/subtract-index.html b/doc/user/subtract-index.html
new file mode 100644
index 0000000..8a925b0
--- /dev/null
+++ b/doc/user/subtract-index.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>subtract-index</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>subtract-index</h1>
+<h2>Usage:</h2>
+<p><code>crux subtract-index [options] <tide index 1> <tide index 2> <output index></code></p>
+<h2>Description:</h2>
+<p>This command takes two peptide indices, created by the tide-index command, and subtracts the second index from the first. The result is an output index that contains peptides that appear in the first index but not the second.</p>
+<h2>Input:</h2>
+<ul>
+  <li><code>tide index 1</code> – A peptide index produced using tide-index</li>
+  <li><code>tide index 2</code> – A second peptide index, to be subtracted from the first index.</li>
+  <li><code>output index</code> – A new peptide index containing all peptides that occur in thefirst index but not the second.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>subtract-index.target.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited text file</a> containing the target peptides.</li>
+  <li><code>subtract-index.decoy.txt</code> – a <a href="../file-formats/txt-format.html">tab-delimited text file</a> containing the decoy peptides.</li>
+  <li><code>subtract-index.log.txt</code> – a log file containing a copy of all messages that were printed to stderr.</li>
+  <li><code>subtract-index.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--peptide-list T|F</code> – Create in the output directory a text file listing of all the peptides in the database, along with their neutral masses, one per line. If decoys are generated, then a second file will be created containing the decoy peptides. Decoys that also appear in the target database are marked with an asterisk in a third column. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/template.html b/doc/user/template.html
new file mode 100644
index 0000000..6ba71fa
--- /dev/null
+++ b/doc/user/template.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Template</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="index.html">Home</a></li>
+			    <li><a href="download.html">Download</a></li>
+			    <li><a href="fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="faq.html">Crux FAQ</a></li>
+				<li><a href="glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="tutorials/install.html">Installation</a></li>
+				<li><a href="tutorials/gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="tutorials/customizedsearch.html">Customization and search options</a></li>
+				<li><a href="tutorials/spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/tide-index.html b/doc/user/tide-index.html
new file mode 100644
index 0000000..770cc21
--- /dev/null
+++ b/doc/user/tide-index.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>tide-index</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>tide-index</h1>
+<h2>Usage:</h2>
+<p><code>crux tide-index [options] <protein fasta file> <index name></code></p>
+<h2>Description:</h2>
+<p>Tide is a tool for identifying peptides from tandem mass spectra. It is an independent reimplementation of the SEQUEST<sup>®</sup> algorithm, which assigns peptides to spectra by comparing the observed spectra to a catalog of theoretical spectra derived from a database of known proteins. Tide's primary advantage is its speed. Our published paper provides more detail on how Tide works. If you use Tide in your research, please cite:</p><blockquote>Benjamin J. Diament and William Sta [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>protein fasta file</code> – The name of the file in FASTA format from which to retrieve proteins.</li>
+  <li><code>index name</code> – The desired name of the binary index.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>index</code> – A binary index, using the name specified on the command line.</li>
+  <li><code>tide-index.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.</li>
+  <li><code>tide-index.log.txt</code> – a log file containing a copy of all messages that were printed to the screen during execution.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Peptide properties</h3>
+<ul>
+  <li class="nobullet"><code>--max-length <integer></code> – The maximum length of peptides to consider. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--max-mass <float></code> – The maximum mass (in Da) of peptides to consider. Default = <code>7200</code>.</li>
+  <li class="nobullet"><code>--min-length <integer></code> – The minimum length of peptides to consider. Default = <code>6</code>.</li>
+  <li class="nobullet"><code>--min-mass <float></code> – The minimum mass (in Da) of peptides to consider. Default = <code>200</code>.</li>
+  <li class="nobullet"><code>--isotopic-mass average|mono</code> – Specify the type of isotopic masses to use when calculating the peptide mass. Default = <code>mono</code>.</li>
+  <li class="nobullet"><code>--clip-nterm-methionine T|F</code> – When set to T, for each protein that begins with methionine, tide-index will put two copies of the leading peptide into the index, with and without the N-terminal methionine. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Amino acid modifications</h3>
+<ul>
+  <li class="nobullet"><code>--mods-spec <string></code> – The general form of a modification specification has three components, as exemplified by <span style="color: red;">1</span><span style="color: green;">STY</span>+<span style="color: blue">79.966331</span>.<br>The three components are: [<span style="color: red;">max_per_peptide</span>]<span style="color: green;">residues</span>[+/-]<span style-"color: blue;">mass_change</span><br>In the example, <span style="color: red [...]
+  <li class="nobullet"><code>--cterm-peptide-mods-spec <string></code> – Specify peptide c-terminal modifications. See nterm-peptide-mods-spec for syntax. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--nterm-peptide-mods-spec <string></code> – Specify peptide n-terminal modifications. Like --mods-spec, this specification has three components, but with a slightly different syntax. The <span style="color: red;">max_per_peptide</span> can be either "1", in which case it defines a variable terminal modification, or missing, in which case the modification is static. The <span style="color: green;">residues</span> field indicates which amino acids a [...]
+  <li class="nobullet"><code>--max-mods <integer></code> – The maximum number of modifications that can be applied to a single peptide. Default = <code>255</code>.</li>
+  <li class="nobullet"><code>--min-mods <integer></code> – The minimum number of modifications that can be applied to a single peptide. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Decoy database generation</h3>
+<ul>
+  <li class="nobullet"><code>--decoy-format none|shuffle|peptide-reverse|protein-reverse</code> – Include a decoy version of every peptide by shuffling or reversing the target sequence or protein. In shuffle or peptide-reverse mode, each peptide is either reversed or shuffled, leaving the N-terminal and C-terminal amino acids in place. Note that peptides appear multiple times in the target database are only shuffled once. In peptide-reverse mode, palindromic peptides are shuffled.  [...]
+  <li class="nobullet"><code>--keep-terminal-aminos N|C|NC|none</code> – When creating decoy peptides using decoy-format=shuffle or decoy-format=peptide-reverse, this option specifies whether the N-terminal and C-terminal amino acids are kept in place or allowed to be shuffled or reversed. For a target peptide "EAMPK" with decoy-format=peptide-reverse, setting keep-terminal-aminos to "NC" will yield "EPMAK"; setting it to "C" will yield "PMAEK"; setting it to "N" will yield "EKPMA" [...]
+  <li class="nobullet"><code>--seed <string></code> – When given a unsigned integer value seeds the random number generator with that value. When given the string "time" seeds the random number generator with the system time. Default = <code>1</code>.</li>
+  <li class="nobullet"><code>--allow-dups T|F</code> – Prevent duplicate peptides between the target and decoy databases. When set to "F", the program keeps all target and previously generated decoy peptides in memory. A shuffled decoy will be re-shuffled multiple times to avoid duplication. If a non-duplicated peptide cannot be generated, the decoy is skipped entirely. When set to "T", every decoy is added to the database without checking for duplication. This option reduces the m [...]
+</ul>
+</li>
+<li class="nobullet">
+<h3>Enzymatic digestion</h3>
+<ul>
+  <li class="nobullet"><code>--enzyme no-enzyme|trypsin|trypsin/p|chymotrypsin|elastase|clostripain|cyanogen-bromide|iodosobenzoate|proline-endopeptidase|staph-protease|asp-n|lys-c|lys-n|arg-c|glu-c|pepsin-a|elastase-trypsin-chymotrypsin|custom-enzyme</code> – Specify the enzyme used to digest the proteins in silico. Available enzymes (with the corresponding digestion rules indicated in parentheses) include no-enzyme ([X]|[X]), trypsin ([RK]|{P}), trypsin/p ([RK]|[]), chymotrypsin  [...]
+  <li class="nobullet"><code>--custom-enzyme <string></code> – Specify rules for in silico digestion of protein sequences. Overrides the enzyme option. Two lists of residues are given enclosed in square brackets or curly braces and separated by a |. The first list contains residues required/prohibited before the cleavage site and the second list is residues after the cleavage site. If the residues are required for digestion, they are in square brackets, '[' and ']'. If the re [...]
+  <li class="nobullet"><code>--digestion full-digest|partial-digest|non-specific-digest</code> – Specify whether every peptide in the database must have two enzymatic termini (full-digest) or if peptides with only one enzymatic terminus are also included (partial-digest). Default = <code>full-digest</code>.</li>
+  <li class="nobullet"><code>--missed-cleavages <integer></code> – Maximum number of missed cleavages per peptide to allow in enzymatic digestion. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--decoy-prefix <string></code> – Specifies the prefix of the protein names that indicate a decoy. Default = <code>decoy_</code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--peptide-list T|F</code> – Create in the output directory a text file listing of all the peptides in the database, along with their neutral masses, one per line. If decoys are generated, then a second file will be created containing the decoy peptides. Decoys that also appear in the target database are marked with an asterisk in a third column. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--temp-dir <string></code> – The name of the directory where temporary files will be created. If this parameter is blank, then the system temporary directory will be used Default = <code><empty></code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/tide-search.html b/doc/user/tide-search.html
new file mode 100644
index 0000000..d973456
--- /dev/null
+++ b/doc/user/tide-search.html
@@ -0,0 +1,204 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>tide-search</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>tide-search</h1>
+<h2>Usage:</h2>
+<p><code>crux tide-search [options] <tide spectra file>+ <tide database></code></p>
+<h2>Description:</h2>
+<p>Tide is a tool for identifying peptides from tandem mass spectra. It is an independent reimplementation of the SEQUEST<sup>®</sup> algorithm, which assigns peptides to spectra by comparing the observed spectra to a catalog of theoretical spectra derived from a database of known proteins. Tide's primary advantage is its speed. Our published paper provides more detail on how Tide works. If you use Tide in your research, please cite:</p><blockquote>Benjamin J. Diament and William Sta [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>tide spectra file+</code> – The name of one or more files from which to parse the fragmentation spectra, in any of the file formats supported by ProteoWizard. Alternatively, the argument may be one or more binary spectrum files produced by a previous run of crux tide-search using the store-spectra parameter.</li>
+  <li><code>tide database</code> – Either a FASTA file or a directory containing a database index created by a previous run of crux tide-index.</li>
+</ul>
+<h2>Output:</h2>
+<p>The program writes files to the folder <code>crux-output</code> by default. The name of the output folder can be set by the user using the <code>--output-dir</code> option. The following files will be created:
+<ul>
+  <li><code>tide-search.target.txt</code> – a tab-delimited text file containing the target PSMs. See <a href="../file-formats/txt-format.html">txt file format</a> for a list of the fields.</li>
+  <li><code>tide-search.decoy.txt</code> – a tab-delimited text file containing the decoy PSMs. This file will only be created if the index was created with decoys.</li>
+  <li><code>tide-search.params.txt</code> – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other Crux programs.</li>
+  <li><code>tide-search.log.txt</code> – a log file containing a copy of all messages that were printed to the screen during execution.</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Precursor selection</h3>
+<ul>
+  <li class="nobullet"><code>--precursor-window <float></code> – Tolerance used for matching peptides to spectra. Peptides must be within +/- 'precursor-window' of the spectrum value. The precursor window units depend upon precursor-window-type. Default = <code>3</code>.</li>
+  <li class="nobullet"><code>--auto-precursor-window false|warn|fail</code> – Automatically estimate optimal value for the precursor-window parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--precursor-window-type mass|mz|ppm</code> – Specify the units for the window that is used to select peptides around the precursor mass location (mass, mz, ppm). The magnitude of the window is defined by the precursor-window option, and candidate peptides must fall within this window. For the mass window-type, the spectrum precursor m+h value is converted to mass, and the window is defined as that mass +/- precursor-window. If the m+h value is not avail [...]
+  <li class="nobullet"><code>--max-precursor-charge <integer></code> – The maximum charge state of a spectra to consider in search. Default = <code>5</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search parameters</h3>
+<ul>
+  <li class="nobullet"><code>--spectrum-min-mz <float></code> – The lowest spectrum m/z to search in the ms2 file. Default = <code>0</code>.</li>
+  <li class="nobullet"><code>--spectrum-max-mz <float></code> – The highest spectrum m/z to search in the ms2 file. Default = <code>1e+09</code>.</li>
+  <li class="nobullet"><code>--min-peaks <integer></code> – The minimum number of peaks a spectrum must have for it to be searched. Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--spectrum-charge 1|2|3|all</code> – The spectrum charges to search. With 'all' every spectrum will be searched and spectra with multiple charge states will be searched once at each charge state. With 1, 2, or 3 only spectra with that charge state will be searched. Default = <code>all</code>.</li>
+  <li class="nobullet"><code>--scan-number <string></code> – A single scan number or a range of numbers to be searched. Range should be specified as 'first-last' which will include scans 'first' and 'last'. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--compute-sp T|F</code> – Compute the preliminary score Sp for all candidate peptides. Report this score in the output, along with the corresponding rank, the number of matched ions and the total number of ions. This option is recommended if results are to be analyzed by Percolator or Barista. If sqt-output is enabled, then compute-sp is automatically enabled and cannot be overridden. Note that the Sp computation requires re-processing each observed spe [...]
+  <li class="nobullet"><code>--remove-precursor-peak T|F</code> – If true, all peaks around the precursor m/z will be removed, within a range specified by the --remove-precursor-tolerance option. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--remove-precursor-tolerance <float></code> – This parameter specifies the tolerance (in Th) around each precursor m/z that is removed when the --remove-precursor-peak option is invoked. Default = <code>1.5</code>.</li>
+  <li class="nobullet"><code>--exact-p-value T|F</code> – Enable the calculation of exact p-values for the XCorr score as described in <a href="http://www.ncbi.nlm.nih.gov/pubmed/24895379">this article</a>. Calculation of p-values increases the running time but increases the number of identifications at a fixed confidence threshold. The p-values will be reported in a new column with header "exact p-value", and the "xcorr score" column will be replaced with a "refactored xcorr" colu [...]
+  <li class="nobullet"><code>--use-neutral-loss-peaks T|F</code> – Controls whether neutral loss ions are considered in the search. Two types of neutral losses are included and are applied only to singly charged b- and y-ions: loss of ammonia (NH3, 17.0086343 Da) and H2O (18.0091422). Each neutral loss peak has intensity 1/5 of the primary peak. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--use-flanking-peaks T|F</code> – Include flanking peaks around singly charged b and y theoretical ions. Each flanking peak occurs in the adjacent m/z bin and has half the intensity of the primary peak. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mz-bin-width <float></code> – Before calculation of the XCorr score, the m/z axes of the observed and theoretical spectra are discretized. This parameter specifies the size of each bin. The exact formula for computing the discretized m/z value is floor((x/mz-bin-width) + 1.0 - mz-bin-offset), where x is the observed m/z value. For low resolution ion trap ms/ms data 1.0005079 and for high resolution ms/ms 0.02 is recommended. Default = <code>1.00 [...]
+  <li class="nobullet"><code>--auto-mz-bin-width false|warn|fail</code> – Automatically estimate optimal value for the mz-bin-width parameter from the spectra themselves. false=no estimation, warn=try to estimate but use the default value in case of failure, fail=try to estimate and quit in case of failure. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mz-bin-offset <float></code> – In the discretization of the m/z axes of the observed and theoretical spectra, this parameter specifies the location of the left edge of the first bin, relative to mass = 0 (i.e., mz-bin-offset = 0.xx means the left edge of the first bin will be located at +0.xx Da). Default = <code>0.4</code>.</li>
+  <li class="nobullet"><code>--peptide-centric-search T|F</code> – Carries out a peptide-centric search. For each peptide the top-scoring spectra are reported, in contrast to the standard spectrum-centric search where the top-scoring peptides are reported. Note that in this case the "xcorr rank" column will contain the rank of the given spectrum with respect to the given candidate peptide, rather than vice versa (which is the default). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--isotope-error <string></code> – List of positive, non-zero integers. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--skip-preprocessing T|F</code> – Skip preprocessing steps on spectra. Default = F. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>CPU threads</h3>
+<ul>
+  <li class="nobullet"><code>--num-threads <integer></code> – 0=poll CPU to set num threads; else specify num threads directly. Default = <code>0</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>param-medic options</h3>
+<ul>
+  <li class="nobullet"><code>--pm-min-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>400</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-mz <float></code> – Minimum precursor m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-frag-mz <float></code> – Minimum fragment m/z value to use in measurement error estimation. Default = <code>150</code>.</li>
+  <li class="nobullet"><code>--pm-max-frag-mz <float></code> – Maximum fragment m/z value to use in measurement error estimation. Default = <code>1800</code>.</li>
+  <li class="nobullet"><code>--pm-min-scan-frag-peaks <integer></code> – Minimum fragment peaks an MS/MS scan must contain to be used in measurement error estimation. Default = <code>40</code>.</li>
+  <li class="nobullet"><code>--pm-max-precursor-delta-ppm <float></code> – Maximum ppm distance between precursor m/z values to consider two scans potentially generated by the same peptide for measurement error estimation. Default = <code>50</code>.</li>
+  <li class="nobullet"><code>--pm-charge <integer></code> – Precursor charge state to consider MS/MS spectra from, in measurement error estimation. Ideally, this should be the most frequently occurring charge state in the given data. Default = <code>2</code>.</li>
+  <li class="nobullet"><code>--pm-top-n-frag-peaks <integer></code> – Number of most-intense fragment peaks to consider for measurement error estimation, per MS/MS spectrum. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--pm-pair-top-n-frag-peaks <integer></code> – Number of fragment peaks per spectrum pair to be used in fragment error estimation. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--pm-min-common-frag-peaks <integer></code> – Number of the most-intense peaks that two spectra must share in order to potentially be generated by the same peptide, for measurement error estimation. Default = <code>20</code>.</li>
+  <li class="nobullet"><code>--pm-max-scan-separation <integer></code> – Maximum number of scans two spectra can be separated by in order to be considered potentially generated by the same peptide, for measurement error estimation. Default = <code>1000</code>.</li>
+  <li class="nobullet"><code>--pm-min-peak-pairs <integer></code> – Minimum number of peak pairs (for precursor or fragment) that must be successfully paired in order to attempt to estimate measurement error distribution. Default = <code>100</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--top-match <integer></code> – Specify the number of matches to report for each spectrum. Default = <code>5</code>.</li>
+  <li class="nobullet"><code>--store-spectra <string></code> – Specify the name of the file where the binarized fragmentation spectra will be stored. Subsequent runs of crux tide-search will execute more quickly if provided with the spectra in binary format. The filename is specified relative to the current working directory, not the Crux output directory (as specified by --output-dir). This option is not valid if multiple input spectrum files are given. Default = <code><e [...]
+  <li class="nobullet"><code>--store-index <string></code> – When providing a FASTA file as the index, the generated binary index will be stored at the given path. This option has no effect if a binary index is provided as the index. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--concat T|F</code> – When set to T, target and decoy search results are reported in a single file, and only the top-scoring N matches (as specified via --top-match) are reported for each spectrum, irrespective of whether the matches involve target or decoy peptides. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--print-search-progress <integer></code> – Show search progress by printing every n spectra searched. Set to 0 to show no search progress. Default = <code>1000</code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+  <li class="nobullet"><code>--use-z-line T|F</code> – Specify whether, when parsing an MS2 spectrum file, Crux obtains the precursor mass information from the "S" line or the "Z" line.  Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--txt-output T|F</code> – Output a tab-delimited results file to the output directory. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--sqt-output T|F</code> – Outputs an SQT results file to the output directory. Note that if sqt-output is enabled, then compute-sp is automatically enabled and cannot be overridden. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pepxml-output T|F</code> – Output a pepXML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--mzid-output T|F</code> – Output an mzIdentML results file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--pin-output T|F</code> – Output a Percolator input (PIN) file to the output directory. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--fileroot <string></code> – The fileroot string will be added as a prefix to all output file names. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--file-column T|F</code> – Include the file column in tab-delimited output. Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--output-dir <string></code> – The name of the directory where output files will be created. Default = <code>crux-output</code>.</li>
+  <li class="nobullet"><code>--overwrite T|F</code> – Replace existing files if true or fail when trying to overwrite a file if false. Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--parameter-file <string></code> – A file containing parameters.  See the <a href="../file-formats/parameter-file.html">parameter documentation</a> page for details. Default = <code><empty></code>.</li>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/tutorials/customizedsearch.html b/doc/user/tutorials/customizedsearch.html
new file mode 100644
index 0000000..7f75f4c
--- /dev/null
+++ b/doc/user/tutorials/customizedsearch.html
@@ -0,0 +1,299 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Customization and search options</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>Customization and search options</h2>
+
+		<p><span class="prog">Crux</span> allows the user the flexibility to
+		change many of the search and analysis parameters.  Attributes like
+		the output format and which peptides are selected from the protein
+		database are controlled through numerous options.  This page
+		starts with some general information about options and then describe
+		the use of some key <span class="prog">crux</span> options.
+		</p>
+
+		<a name="intro"></a>
+		<h3>Introduction to options</h3>
+
+		<p>
+		A <span class="prog">crux</span> command is made up of four parts:
+		executable name, command, options, and required arguments. Let's use
+		a <span class="prog">crux tide-search</span> command as an example.
+		Here is the general form.</p>
+
+		<div class="code"><code>
+		$ crux tide-search [options] <mass spectra> <peptide index>
+		</code>
+		</div>
+
+		<p>
+		In this case, the command is <span class="prog">tide-search</span>.
+		This is followed by zero or more optional arguments.  Finally, the
+		required arguments, listed above inside angle brackets, include the
+		name of the file containing the spectra to be identified and the name
+		of a peptide index produced previously by
+		the <span class="prog">tide-index</span> command.</p>
+
+		<p>
+		All of the available options are described for each command on
+		the <a href="../index.html">documentation</a> pages.  You can also get a
+		list of available options by running a command with no arguments.
+		For example, the command</p>
+
+		<div class="code"><code>
+		$ crux tide-search</code>
+		</div>
+
+		<p>
+		will produce output that looks like this:</p>
+
+		<pre>
+bash-3.2$ ~/proj/crux/trunk/src/c/crux tide-search
+FATAL: Error in command line. Error # 5
+The required argument <tide spectra file> is missing.
+
+USAGE:
+
+   crux tide-search [options] <tide spectra file> <tide database index> 
+
+REQUIRED ARGUMENTS:
+
+  <tide spectra file> The name of the file from which to parse the fragmentation spectra, in any of the file formats supported by ProteoWizard. Alternatively, the argument may be a binary spectrum file produced by a previous run of crux tide-search using the store-spectra parameter.
+  <tide database index> A directory containing a database index created by a previous run of crux tide-index.
+
+OPTIONAL ARGUMENTS:
+
+  [--precursor-window <double>]
+     Search peptides within +/- 'precursor-window' of the spectrum mass. 
+     Definition of precursor window depends upon precursor-window-type.
+     Default=3.0.
+  [--precursor-window-type <string>]
+     Window type to use for selecting candidate peptides. 
+     <string>=mass|mz|ppm. Default=mass.
+  [--spectrum-min-mz <double>]
+     The lowest spectrum m/z to search. Default=0.0.
+  [--spectrum-max-mz <double>]
+     The highest spectrum m/z to search. Default=no maximum.
+  [--min-peaks <int>]
+     The minimum number of peaks a spectrum must have for it to be
+     searched. Default=20.
+...
+		</pre>
+
+		<p>The first three lines are telling you that you forgot the required
+		arguments and are reminding you what they are.  The following lines
+		list all the options (only five of which are shown
+		above).  <span class="prog">Crux</span> options all begin with two
+		dashes followed by the option name.  The name is followed by a space
+		and the appropriate argument.  This example increases the verbosity to
+		40:
+		</p>
+
+		<div class="code"><code>
+		$ crux tide-search --verbosity 40 sample.ms2 yeast.fasta</code>
+		</div>
+
+		<a name="file"></a>
+		<h3>Specifying options via a parameter file</h3>
+
+		<p>
+		The second option listed
+		above, <span class="out">--parameter-file</span>, is available for all
+		Crux commands.  The parameter file allows multiple options to be
+		specified in a file.  All of the command line options can be put in a
+		parameter file, but the format is slightly different.  In the
+		parameter file, the two leading dashes are removed from the option
+		name, and the option name and value must be separated by an equal sign
+		instead of a space:
+		</p>
+		<div class=code><code>
+		<option name>=<argument></code>
+		</div>
+
+		<p>
+		The above example, in which we changed the verbosity, would look like this
+		in a parameter file:</p>
+
+		<div class="code"><code>
+		verbosity=40
+		</code>
+		</div>
+
+		<p>
+		The parameter file allows only one option per line.  Lines beginning
+		with "#" are considered comments and are ignored.  A sample parameter
+		file can be found <a href="../file-formats/parameter-file.html">here</a>.  Command
+		line and parameter file options may be used separately or together.
+		If an option is specified in both places, then value on the command
+		line will be used.
+		</p>
+
+		<p>
+		During execution of any Crux command, a parameter file containing the
+		name and value of all the options for the current operation
+		will be automatically be saved in the output directory.  Note that not
+		all parameters in the file may have been used in the operation.  The
+		parameter file will be named
+		<code><command>.params.txt</code>,
+		where <code><tag></code> is the name of the command that was
+		executed.</p>
+
+		<a name="shared"></a>
+		<h3>Shared options</h3>
+
+		<p>
+		In addition to <code>--parameter-file</code>, Crux includes several 
+		other options that are shared across all, or nearly all, Crux commands.
+		</p>
+
+		<ul>
+		<li>
+		<code>--output-dir <filename></code> – 
+		The name of the directory where output files will be created.
+		Default = crux-output.</li>
+
+		<li>
+		<code>--fileroot <string></code> – 
+		The <code>fileroot</code> string will be added as a prefix to all
+		output file names. Default = none.</li>
+
+		<li>
+		<code>--overwrite <T|F></code> – By default, if Crux
+		detects that the output file it is about to produce already exists,
+		then Crux will exit with an error.  This option allows Crux to
+		overwrite existing files.</li>
+
+		<li>
+		<code>--verbosity <0-100></code> – Specify the verbosity
+		of the current command. Each level prints the following messages,
+		including all those at lower verbosity levels: 0-fatal errors,
+		10-non-fatal errors, 20-warnings, 30-information on the progress of
+		execution, 40-more progress information, 50-debug info, 60-detailed
+		debug info. Default = 30.</li>
+
+		<li>
+		In addition, many Crux commands include various options of the form
+		<code>--<format>-output</code>.  These options take Boolean
+		arguments (specified as "T" or "F") and indicate whether output files
+		in the specified format should be produced.  For example, in addition
+		to tab-delimited text format, <code>tide-search</code> can produce
+		output in PepXML, MZid, SQT and PINxml formats.</li>
+
+		</ul>
+
+		<a name="index"></a>
+		<h3>Changing the indexing and searching parameters</h3>
+
+		<p>
+		Various options to <span class="prog">tide-index</span> control how
+		the proteins in the database are converted to peptides.  These options
+		fall into several categories, allowing specification of peptide
+		properties such as minimum and maximum length, enzymatic digestion
+		rules, decoy database generation and specification of various static
+		and variable modifications.  These options are fully
+		documented <a href="../commands/tide-index.html">here</a>.  Similarly,
+		the <code><a href="../commands/tide-search.html">tide-search</a></code>
+		documentation describes options for selecting which spectra to score,
+		the rules for selecting candidate peptides for a given spectrum, and
+		for deciding what kinds of scores to report.</p>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="install.html">Installation</a></li>
+				<li><a href="gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="customizedsearch.html">Customization and search options</a></li>
+				<li><a href="spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/tutorials/gettingstarted.html b/doc/user/tutorials/gettingstarted.html
new file mode 100644
index 0000000..023bacb
--- /dev/null
+++ b/doc/user/tutorials/gettingstarted.html
@@ -0,0 +1,218 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Getting started with Crux</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>Getting started with Crux</h2>
+
+		<p> This page will talk about setting up your environment and choosing
+		your input files.  Be sure to have completed the software <a
+		href="install.html">installation</a> first.
+		</p>
+
+		<a name="env"></a>
+		<h3>Your environment</h3>
+		<p>For this tutorial, we'll assume you are working in a Linux/Unix
+		type shell (<a href="http://www.cygwin.com/">cygwin</a> is a good
+		choice for Windows users) and already know some basic 
+		commands for changing directories, listing files, and other simple
+		tasks.  To successfully run the sample commands, you'll need to work from 
+		a directory for which you have write permission. Anywhere
+		in your home directory should work.  Create a new directory and
+		navigate to it.</p> 
+		<div class=code><code>
+		$ mkdir crux-demo<br>
+		$ cd crux-demo</code>
+		</div>
+		<p>
+		We will refer to this directory, <code>'crux-demo'</code>, as the
+		<em>working directory</em>.</p> 
+		<p>Next, make sure that the computer knows where to look for the
+		<span class=prog>crux</span> programs.  Try this command. </p>
+		<div class=code><code> 
+		$ which crux</code>
+		</div>
+		<p>
+		If it returns a single line with a path ending in <span
+		class=out>crux</span>, then you are set.  If not,
+		review the <a href="install.html#path">installation instructions</a> on setting your
+		<span class=code>$PATH</span> environment variable.
+
+		</p>
+
+		<a name=ms2></a>
+		<h3>Input file: mass spectra</h3>
+		<p>Included in the <span class=prog>crux</span> distribution in the
+		<span class=file>doc/example-files</span> directory are some 
+		sample files containing mass spectra.  We will use the <a
+		href="../example-files/demo.ms2">demo.ms2</a> for this tutorial.  Locate the
+		file and copy it to the current working directory.
+		</p>
+		<p>The beginning of the file looks like this.
+		</p>
+		<pre>
+H       CreationDate    2/14/2007 6:19:18 PM
+H       Extractor       MakeMS2
+H       ExtractorVersion        1.0
+H       Comments        MakeMS2 written by Michael J. MacCoss, 2004
+H       ExtractorOptions        MS2/MS1
+S       10      10      636.34
+Z       2       1271.67
+187.4 12.5
+193.1 19.5
+194.3 13.7
+		</pre>
+		<div class=note><em>NOTE: There are two kinds of optional lines which
+		may be included for each spectrum.  Lines beginning with </em><span
+		class=file>I</span><em> are contain information independent of the
+		charge state. Following a </em> <span class=file>Z</span><em> line may
+		be one beginning with </em><span class=file>D</span><em> containing
+		information specific to the above charge state. </em>
+		</div>
+
+		<p>
+		The first lines beginning with <span class=file>H</span> are the
+		header lines and contain information about the program that generated
+		the file, the date it was created, and so on.  The line starting with
+		<span class=file>S</span> begins the information about the first
+		spectrum.  Following the <span class=file>S</span> is the scan number
+		(twice) and the m/z of the precursor ion.  The lines beginning with
+		<span class=file>Z</span> list the possible charge states of the
+		spectrum (in this case 2) and the mass of the peptide at that
+		charge state.  Following the <span class=file>Z</span> lines is the
+		list of peaks for the spectrum.  The subsequent spectra in the file
+		repeat this pattern of <span class=file>S</span> line, <span
+		class=file>Z</span> line(s), and peak list.  <span
+		class=file>demo.ms2</span> contains 150 spectra.
+		</p>
+
+		<a name="fasta"></a>
+		<h3>Input file: protein database (fasta file)</h3>
+		<p>The second input file you will need is a protein database. 
+		This file is in fasta format and contains
+		a list of proteins you expect to find in your sample and their
+		sequences.  A sample fasta file is also comes with the distribution in
+		<span class=file>doc/example-files</span>. We will use <a
+		href="../example-files/small-yeast.fasta">small-yeast.fasta</a>.  Copy it to your
+		current working directory. 
+		</p>
+
+		<p>The beginning of the file looks like this.
+		</p>
+
+		<pre>
+>YBL030C PET9 SGDID:S000000126, Chr II from 164000-163044, reverse complement, Verified ORF, "Major ADP/ATP carrier of the mitochondrial inner membrane, exchanges cytosolic ADP for mitochondrially synthesized ATP; required for viability in many common lab strains carrying a mutation in the polymorphic SAL1 gene"
+MSSNAQVKTPLPPAPAPKKESNFLIDFLMGGVSAAVAKTAASPIERVKLLIQNQDEML
+KQGTLDRKYAGILDCFKRTATQEGVISFWRGNTANVIRYFPTQALNFAFKDKIKAMFG
+FKKEEGYAKWFAGNLASGGAAGALSLLFVYSLDYARTRLAADSKSSKKGGARQFNGLI
+DVYKKTLKSDGVAGLYRGFLPSVVGIVVYRGLYFGMYDSLKPLLLTGSLEGSFLASFL
+LGWVVTTGASTCSYPLDTVRRRMMMTSGQAVKYDGAFDCLRKIVAAEGVGSLFKGCGA
+NILRGVAGAGVISMYDQLQMILFGKKFK 
+		</pre>
+
+		<p>Lines beginning with <span class=file>></span> give the name of
+		a protein.  The first word is the protein name followed by an optional
+		description of any length.  The following lines contain the protein
+		sequence.  Proteins may or may not be separated by blank lines.
+		<span class=file>small-yeast.fasta</span> contains 56 proteins.
+		</p>
+	<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="install.html">Installation</a></li>
+				<li><a href="gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="customizedsearch.html">Customization and search options</a></li>
+				<li><a href="spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/tutorials/install.html b/doc/user/tutorials/install.html
new file mode 100644
index 0000000..3468902
--- /dev/null
+++ b/doc/user/tutorials/install.html
@@ -0,0 +1,805 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Crux Installation Instructions</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<div id="main">
+		<h2>Crux Installation Instructions</h2>
+
+		<p/>
+		This page will walk you through the steps of
+		installing <span class=prog>crux<span/> on your computer.
+		Seperate sections describe the installation for 
+		<a href="#LINUX">Linux</a>,
+		<a href="#OSX">OS X</a>,
+		and
+		<a href="#WINDOWS">Windows</a>.
+		You have the choice of installing precompiled binaries or building
+		Crux from the source code.
+		The compiled binaries offer the easiest installation option.  
+
+		<a name="LINUX"></a>
+		<h3>Linux</h3>
+		<b>Note:</b> when typing the commands shown in these instructions
+		do not type the
+		leading <code>$</code> before each command; it indicates the
+		prompt. These instructions will refer to your home directory as
+		<code>$HOME</code>.  You can type <code>$HOME</code> in the commands
+		or you can use the fully qualified path to your home directory which
+		may be something like <code>/home/yourname/</code>.  Note that you can
+		find out the location of your home directory by logging in and
+		typing <code>pwd</code> or <code>echo $HOME</code>.
+		<h3>Installing Pre-compiled Crux Binaries on Linux</h3>
+		<ul>
+		<li><b>Download the files</b> 
+		<p/>
+		<span class=prog>Crux</span> is freely
+		available for download under an
+		<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 license</a>.  
+		On the download page click on the link "Linux [architecture]
+		Build (zipped)" to download them to your computer.
+		If your computer is running a 32-bit version of Linux select the
+		i686 version.
+		If your computer is running a 64-bit version of Linux select the
+		x86_64 version.
+		If a window pops
+		up, select the "Save" button.
+		To check that the file was
+		transfered correctly, run this command
+
+		<div class=code><code>
+		$ md5sum <i>[downloaded file]</i></code>
+		</div>
+		<p/>
+		and compare the output to the "MD5 checksum" link next to the file you
+		downloaded.  
+		<p/>
+		</li>
+
+		<li><b>Unpack and install the files</b>
+		<p/>
+		The file you downloaded
+		should be named something like 
+		<span class=file>crux-x.xx-XXXX-GNU-Linux.zip</span>
+		where <span class=file>x.xx</span>
+		is replaced with the most current release version.
+		and 
+		<span class=file>XXXX</span> is either i686 or x86_64.
+		Move this file 
+		to a convenient location and unpack the file with this command.
+
+		<div class=code><code>
+		$ unzip crux-x.xx-XXXX-GNU-Linux.zip</code>
+		</div>
+		<p/>
+		You should now have a new directory,
+		<span class=file>crux-x.xx-XXXX-GNU-Linux</span>,
+		with two subdirectories <span class=file>bin</span>, and <span
+		class=file>doc</span>.  The <span class=prog>crux</span> programs are
+		in the <span class=file>bin</span> directory. You may want to move 
+		these files somewhere
+		more convenient for you, but otherwise, that completes the
+		installation!  Skip ahead to 
+		<a href="#linux_path">Setting the PATH on Linux and OS X</a>
+		for notes on how to run the executables.
+		</ul>
+		<h3>Building Crux From Source on Linux</h3>
+		<ul>
+		<li><b>Prerequisites</b>
+		<p/>
+		To build Crux from source on Linux you must have installed the
+		following software:
+		<ul>
+		<li><code>gcc</code></li>
+		<li><code>g++</code></li>
+		<li><code>cmake</code></li>
+		<li><code>make</code></li>
+		<li><code>svn</code></li>
+		<li><code>wget</code> (must support SSL)</li>
+		</ul>
+		<p/>
+		Building <span class=prog>crux</span> also requires the
+		<a href="http://proteowizard.sourceforge.net"><span class=prog>Proteowizard</span></a>
+		and 
+		<a href="http://per-colator.com"><span class=prog>Percolator</span></a>
+		libraries. 
+		These will automatically be copied from the <span class=prog>Proteowizard</span>
+		and <span class=prog>Percolator</span>
+		repositories and statically linked into <span class=prog>crux</span>.
+
+		<li><b>Download the files</b> 
+		<p/>
+		The <span class=prog>Crux</span> source is freely
+		available for download under an
+		<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 license></a>.  
+		On the download page click on the link "Source (tarred, gzipped)",
+		and choose save to disk if prompted. 
+		To check that the file was
+		transfered correctly, run this command
+
+		<div class=code><code>
+		$ md5sum <i>[downloaded file]</i></code>
+		</div>
+		<p/>
+		and compare the output to the "MD5 checksum" link next to the file you
+		selected on the Crux download page.  
+		<p/>
+		The file you downloaded should be named something like 
+		<span class=file>crux-x.xx.source.tar.gz</span>, 
+		where <span class=file>x.xx</span>
+		is replaced with the most current release version.
+		<li><b>Unpack the files</b>
+		<p/>
+		Move the downloaded file to a
+		convenient location and unpack it with this command.
+
+		<div class=code>
+		$ tar -zxvf crux-x.xx.Source.tar.gz
+		</div>
+		A new directory named <span class=file>crux-x.xx.Source</span> will be
+		created and a long list of files will stream by as they are being put
+		into the new directory.
+		<p/>
+		</li>
+
+		<li><b>Configure the build</b> 
+		<p/>
+		Move into the <span class=file>crux-x.xx.Source</span>
+		directory from step 1.
+		Run the command
+		<div class=code><code>
+		cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=<install directory> .
+		</code>
+		</div>
+		<p/>
+		where <span class=file><install directory></span> is
+		the location where you wish to install the <span class=prog>crux</span> programs. 
+		If you want <span class=prog>crux</span> to go in <span class=file>$HOME/bin</span>,
+		then <span class=file><install directory></span> would be <span class=file>$HOME</span>.
+		The installation process will automatically put the programs in a directory called
+		<span class=file>bin</span>.
+		<p/>
+		Note, this configuration will build with optimizations turned on,
+		and will not include debug symbols.
+		To build with optimizations turned off,
+		and debug symbols included,
+		use the command:
+		<div class=code><code>
+		cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX:PATH=<install directory> .
+		</code>
+		</div>
+		</li>
+		<p/>
+		<li><b>Build and install</b>
+		<p/>
+		To complete the process, run these two commands.</li>
+		<div class=code><code>
+		$ make<br>
+		$ make install
+		</code>
+		</div>
+		<p/>
+		The <span class=prog>crux</span> programs are
+		in the <span class=file>bin</span> subdirectory
+		of the
+		<span class=file><install directory></span>
+		That completes the installation!  Skip ahead to 
+		<a href="#linux_path">Setting the PATH on Linux and OS X</a>
+		for notes on how to run the executables.
+		</ul>
+		<a name="OSX"></a>
+		<h3>OS X</h3>
+		<span class=prog>Crux</span> requires OS X Yosemite or later.
+		<p/>
+		<b>Note:</b> 
+		when typing the commands shown in these instructions do not type the
+		leading <code>$</code> before each command; it indicates the
+		prompt. These instructions will refer to your home directory as
+		<code>$HOME</code>.  You can type <code>$HOME</code> in the commands
+		or you can use the fully qualified path to your home directory which
+		may be something like <code>/home/yourname/</code>.  Note that you can
+		find out the location of your home directory by logging in and
+		typing <code>pwd</code> or <code>echo $HOME</code>.
+		<p/>
+		To install and use <code>crux</code> on OS X
+		you'll need to be familiar with the <span class=code>Terminal</span>
+		application.
+		<h3>Installing Pre-compiled Crux Binaries on OS X</h3>
+		<ul>
+		<li><b>Download the files</b> 
+		<p/>
+		<span class=prog>Crux</span> is freely
+		available for download under an
+		<a href=""http://www.apache.org/licenses/LICENSE-2.0>Apache 2.0 license</a>.  
+		On the download page click on the link "OS X x86_64 Build (zipped)" 
+		to download them to your computer.
+		If a window pops
+		up, select the "Save" button.
+		To check that the file was
+		transfered correctly, run this command
+
+		<div class=code><code>
+		$ md5 <i>[downloaded file]</i></code>
+		</div>
+		<p/>
+		and compare the output to the "MD5 checksum" link next to the file you
+		downloaded.  
+		<p/>
+		</li>
+
+		<li><b>Unpack and install the files</b>
+		<p/>
+		The file you downloaded
+		should be named something like 
+		<span class=file>crux-x.xx.Darwin.x86_64.zip</span>
+		where <span class=file>x.xx</span>
+		is replaced with the most current release version.
+		Move this file 
+		to a convenient location and unpack the file with this command.
+
+		<div class=code><code>
+		$ unzip crux-x.xx.Darwin.x86_64.zip</code>
+		</div>
+		<p/>
+		You should now have a new directory,
+		<span class=file>crux-x.xx.Darwin.x86_64</span>,
+		with two subdirectories <span class=file>bin</span>, and <span
+		class=file>doc</span>.  The <span class=prog>crux</span> programs are
+		in the <span class=file>bin</span> directory. You may want to move 
+		these files somewhere
+		more convenient for you, but otherwise, that completes the
+		installation!  Skip ahead to 
+		<a href="#linux_path">Setting the PATH on Linux and OS X</a>
+		for notes on how to run the executables.
+		</ul>
+		<h3>Building Crux From Source on OS X</h3>
+		<ul>
+		<li><b>Prerequisites</b>
+		<p/>
+		To build Crux from source on OS X you must have installed the
+		following software:
+		<ul>
+		<li><code>OS X Yosemite or later</code></li>
+		<li><code>XCode 6.3.1 or later</code></li>
+		<li><code>XCode Command Line Tools</code></li>
+		<li><code>cmake</code></li>
+		<li><code>make</code></li>
+		<li><code>svn</code></li>
+		<li><code>wget</code> (must support SSL)</li>
+		<li><code>gnutar</code> (Apple's version of tar is incompatible with GNU's
+    version of tar)</li>
+		</ul>
+		<p/>
+		Building <span class=prog>crux</span> also requires the
+		<a href="http://proteowizard.sourceforge.net"><span class=prog>Proteowizard</span></a>
+		and 
+		<a href="http://per-colator.com"><span class=prog>Percolator</span></a>
+		libraries. 
+		These will automatically be copied from the <span class=prog>Proteowizard</span>
+		and <span class=prog>Percolator</span>
+		repositories and statically linked into <span class=prog>crux</span>.
+		<p />
+		Building <span class=prog>Crux</span> on OS X requires a current version of
+		<span class=prog>XCode</span>, and the XCode command line tools.
+		Earlier versions of <span class=prog>Crux</span> 
+		had to be built using the GCC compilers.
+		which are no supported by Apple.
+    If you have the both the GCC and Apple compilers installed, you'll need to
+    adjust the <span class=prog>PATH</span> environment variable so that the
+    Apple compilers are found first.
+    Alternatively, you can specify which compilers should be used by setting
+    the <span class=prog>CC</span>, and <span class=prog>CXX</span>.
+    For example,
+		<div class=code>
+    <code>
+    export CC=/usr/bin/gcc
+    <br />
+    export CXX=/usr/bin/g++
+    </code>
+		</div>
+		<p/>
+		The programs
+		<span class=prog>cmake</span>,
+		<span class=prog>svn</span>,
+		and
+		<span class=prog>wget</span>,
+		can be installed from 
+		<a href="https://www.macports.org">MacPorts</a>
+		or 
+		<a href="http://brew.sh">Homebrew</a>.
+		Note that you must install the <span class=prog>ssl</span> variant of 
+		<span class=prog>wget</span>:
+		<div class=code>
+		<code>
+		$ sudo port install wget +ssl
+		</code>
+		</div>
+		<p/>
+		<li><b>Download the files</b> 
+		<p/>
+		The <span class=prog>Crux</span> source is freely
+		available for download under an
+		<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 license></a>.  
+		On the download page click on the link "Source (tarred, gzipped)",
+		and choose save to disk if prompted. 
+		To check that the file was
+		transfered correctly, run this command
+
+		<div class=code><code>
+		$ md5sum <i>[downloaded file]</i></code>
+		</div>
+		<p/>
+		and compare the output to the "MD5 checksum" link next to the file you
+		selected on the Crux download page.  
+		<p/>
+		The file you downloaded should be named something like 
+		<span class=file>crux-x.xx.source.tar.gz</span>, 
+		where <span class=file>x.xx</span>
+		is replaced with the most current release version.
+		<li><b>Unpack the files</b>
+		<p/>
+		Move the downloaded file to a
+		convenient location and unpack it with this command.
+
+		<div class=code>
+		$ tar -zxvf crux-x.xx.Source.tar.gz
+		</div>
+		A new directory named <span class=file>crux-x.xx.Source</span> will be
+		created and a long list of files will stream by as they are being put
+		into the new directory.
+		<p/>
+		</li>
+
+		<li><b>Configure the build</b> 
+		<p/>
+		Move into the <span class=file>crux-x.xx.Source</span>
+		directory from step 1.
+		Run the command
+		<div class=code><code>
+		cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=<install directory> .
+		</code>
+		</div>
+		<p/>
+		where <span class=file><install directory></span> is
+		the location where you wish to install the <span class=prog>crux</span> programs. 
+		If you want <span class=prog>crux</span> to go in <span class=file>$HOME/bin</span>,
+		then <span class=file><install directory></span> would be <span class=file>$HOME</span>.
+		The installation process will automatically put the programs in a directory called
+		<span class=file>bin</span>.
+		<p/>
+		Note, this configuration will build with optimizations turned on,
+		and will not include debug symbols.
+		To build with optimizations turned off,
+		and debug symbols included,
+		use the command:
+		<div class=code><code>
+		cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX:PATH=<install directory> .
+		</code>
+		</div>
+		</li>
+		<p/>
+		<li><b>Build and install</b>
+		<p/>
+		To complete the process, run these two commands.</li>
+		<div class=code><code>
+		$ make<br>
+		$ make install
+		</code>
+		</div>
+		<p/>
+		The <span class=prog>crux</span> programs are
+		in the <span class=file>bin</span> subdirectory
+		of the
+		<span class=file><install directory></span>
+		That completes the installation!  Skip ahead to 
+		<a href="#linux_path">Setting the PATH on Linux and OS X</a>
+		for notes on how to run the executables.
+		</ul>
+
+		<a name="linux_path"></a>
+		<h3>Setting the PATH on Linux and OS X</h3>
+		<ul>
+		<li>
+		<p/>
+		On Linux and OS X systems you can always run any of the programs by specifying its full
+		path.  For example,</p>
+
+		<div class=code><code>
+		$ <em><install directory></em>/bin/crux comet</code>
+		</div>
+
+		<p>In this final step of the installation, we'll set things up so that
+		you can also run any of the programs by just typing its name.  This is
+		done with an environment variable called <span
+		class=code>$PATH</span>.  <span class=code>$PATH</span> is a list of
+		places that the computer looks for executable programs.  Find out what
+		is in the current list with this command:
+
+		<div class=code><code>
+		$ echo $PATH</code><br>
+		</div>
+		<p>The value returned might look something like this:
+		<code>
+		/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
+		</code>
+		<p>The first directory in this colon-separated list, <span
+		class=out>/usr/local/bin</span>, is the first place the computer looks
+		for a program.  If it doesn't find the program there it tries <span
+		class=out>/usr/bin</span> and so on down the list.  You can either
+		move the crux executable files into one of these directories already
+		in your PATH, or you can add <span
+		class=code><em><install directory></em></span> to PATH with this
+		command.  (Remember to replace the word <em><install directory></em> with the
+		actual location of your installation)</p> 
+
+		<div class=code><code>
+		$ export PATH=$PATH:<install directory>/bin</code>
+		</div>
+
+		<p>Try '<span class=code>echo $PATH</span>' again to see that the
+		change was made.  <em><install directory>/bin</em> should be at the end of the
+		list.  Now you can 
+		run the <span class=prog>crux</span> programs by just typing their
+		names.  Try this.</p>
+
+		<div class=code><code>
+		$ crux comet</code>
+		</div>
+
+		<p>The change to <span class=code>$PATH</span> is only temporary.  As
+		soon as you close the window, the change will disappear.  In order to
+		make the change every time you log on, add the line <span
+		class=code>export PATH=$PATH:<install directory>/bin</span> to the file <span
+		class=out>.bashrc</span> located in your home directory.  You will
+		have to log on again for the change to take effect.
+		</ul>
+		<a name="WINDOWS"></a>
+		<h3>Windows</h3>
+		<h3>Installing Pre-compiled Crux Binaries on Windows</h3>
+
+		<ul>
+		<li><b>Prerequisites</b>
+		<p/>
+		To run Crux with support for vendor specific file formats
+		on Windows you must have installed the following software:
+		<ul>
+		<li>
+		<a href="https://thermo.flexnetoperations.com/control/thmo/login">
+		<code>Thermo MSFileReader</code></a>
+    </li>
+		<li>
+		<a href="https://www.microsoft.com/en-us/download/details.aspx?id=40784">
+		<code>Visual C++ 2013 Runtime Libraries</code></a>
+    </li>
+		</ul>
+		<p/>
+		<li><b>Download the files</b> 
+		<p/>
+		<span class=prog>Crux</span> is freely
+		available for download under an
+		<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 license</a>.  
+		On the download page click on the link "Windows x86
+		Build (zipped)" to download them to your computer.
+		If a window pops up, select the "Save" button.
+		</li>
+		<li><b>Unpack and install the files</b>
+		<p/>
+		Browse to the downloaded file in Windows Explorer.
+		Right click on the file and choose "Expand All ...".
+		You should now have a new directory,
+		<span class=file>crux-x.xx</span>,
+		with two subdirectories <span class=file>bin</span>, and <span
+		class=file>doc</span>.  The <span class=prog>crux</span> programs are
+		in the <span class=file>bin</span> directory. You may want to move 
+		these files somewhere
+		more convenient for you, but otherwise, that completes the
+		installation!  Skip ahead to 
+		<a href="#windows_path">Setting the PATH on Windows</a>
+		for notes on how to run the executables.
+		</ul>
+
+		<h3>Building Crux From Source on Windows</h3>
+		<ul>
+		<li><b>Prerequisites</b>
+		<p/>
+		To build Crux from source on Windows you must have installed the
+		following software:
+		<ul>
+		<li><code>
+		<a
+		href="http://www.visualstudio.com/downloads/download-visual-studio-vs#DownloadFamilies_4">Microsoft
+		Visual C++ 2013</a></code></li>
+		<li><a href="http://www.cmake.org/cmake/resources/software.html"><code>CMake</code></a></li>
+		<li><a href="http://sourceforge.net/projects/win32svn/"><code>SVN</code></a></li>
+		<li><a href="http://getgnuwin32.sourceforge.net"><code>wget</code> (must support SSL)</a></li>
+		<li><a
+		href="https://thermo.flexnetoperations.com/control/thmo/login">
+		<code>Thermo MSFileReader</code></a> (This may be omitted if support for 
+		vendor specific file formats is disabled.)</li>
+		</ul>
+		<p/>
+		<b>Other verions of Visual Studio will not be able to build Crux!</b>
+		You must have Visual Studio 2013.
+		Visual Studio 2013 Express for Windows Desktop does work.
+		<p/>
+		<span class=code>wget</span> is available as part of the GnuWin32 package.
+		The easiest way to install this is via the 
+		<a href="http://getgnuwin32.sourceforge.net"><code>GetGnuWin32</code></a>
+		package manager.
+		<span class=code>wget</span> must support SSL, so install the optional
+		packages provided by
+		<a href="http://getgnuwin32.sourceforge.net"><code>GetGnuWin32</code></a> .
+		<p/>
+		<span class=code>wget</span> and 
+		<span class=code>svn</span> must be included in the execution PATH
+		for your system.
+		See the section <i>Setting the PATH on Windows</i> for more information.
+		<p/>
+		<li><b>Download the file</b> 
+		<p/>
+		The <span class=prog>Crux</span> source is freely
+		available for download under an
+		<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 license></a>.  
+		On the download page click on the link "Source (zipped)",
+		and choose save to disk if prompted. 
+		<p/>
+		The file you downloaded should be named something like 
+		<span class=file>crux-x.xx.Source.zip</span>, 
+		where <span class=file>x.xx</span>
+		is replaced with the most current release version.
+		<p />
+		<li><b>Unpack the files</b> 
+		<p />
+		Unpack the downloaded file using Windows Explorer.
+		Right click on the file icon and click on "Extract All ...".
+		A new directory named <span class=file>crux-x.xx.Source</span> will be
+		created containing the source code and documentation for Crux.
+		<p/>
+		<b>Note</b> Windows has a fixed maximum path length of 270 characters.
+		The Crux build creates several levels of directories so it
+		is very easy to exceed this limit. 
+		This will cause the build to fail.
+		To avoid this problem we recommend keeping the Crux source and build trees 
+		very near the disk root (typically
+		<span class=code>C:\</span>
+
+		</li>
+		<li>
+		<p/>
+		<b>Open the command line development environment.</b>
+		<p/>
+		Under the "Start" button
+		open the "Visual Studio 2013" folder, then open the "Visual Studio Tools"
+		folder, and double-click on "Developer Command Prompt for VS2013".
+		This will launch a 
+		<span class=file>cmd</span> shell configured to use the 
+		Microsoft development tools.
+		</li>
+		<li><b>Configure</b> 
+		<p/>
+		In the <span class=file>cmd</span> shell  you just opened,
+		move into the <span class=file>crux-x.xx.Source</span>
+		directory from step 1.
+		Run the command
+		<div class=code><code>
+		cmake -DCMAKE_INSTALL_PREFIX:PATH=<install directory> -G "Visual Studio
+		12 Win64" .
+		</code>
+		</div>
+		<p/>
+		where <span class=file><install directory></span> is
+		the location where you wish to install the <span class=prog>crux</span> programs. 
+		Note that, somewhat confusingly, Visual Studio 2013 is version 12.
+		<p/>
+		If you wish to disable support for vendor specific file formats,
+		use this command instead
+		<p/>
+		<div class=code><code>
+		cmake 
+		-DCMAKE_INSTALL_PREFIX:PATH=<install directory> -DINCLUDE_VENDOR_LIBRARIES=FALSE -G "Visual Studio 12 Win64" .
+		</code>
+		</div>
+		<p/>
+		<li><b>Build and install</b> 
+		<p/>
+		To complete the process run the commands</li>
+		<div class=code><code>
+		cmake --build . --config Release --target ALL_BUILD
+		<br/>
+		cmake --build . --config Release --target INSTALL
+		</code>
+		<p/>
+		Once you've run the configuration step
+		you can also build and debug Crux from within the Visual Studio IDE.
+		CMake will generate a file named
+		<span class=file>crux.sln</span>. 
+		Open this file in Visual Studio.
+		You can select the build configuration: Release or Debug
+		in the combo box under the menu bar.
+		<p/>
+		<b>Note</b> The Crux build will not automatically generate
+		debugging symbols even if you've selected the Debug configuration.
+		Right click on the Crux folder in the "Solution Explorer" and
+		select "Properties" from the pop-up menu.
+		In the "Properties" page select the "Debugging" item under the "Linker"
+		properties. Set "Generate Debug Info" to "Yes".
+		<p/>
+		Changes made to the Visual Studio solution and project files will be lost
+		the next time CMake regenerates the project.
+		</div>
+		<p/>
+
+		</ul>
+		</ul>
+
+		<a name="windows_path"></a>
+		<h3>Setting the PATH on Windows</h3>
+		<ul>
+		<li>
+		On Windows systems you can always run any of the programs by specifying its full
+		path.  For example,</p>
+
+		<div class=code><code>
+		C:\ <em><install directory></em>\bin\crux comet</code>
+		</div>
+
+		<p>In this final step of the installation, we'll set things up so that
+		you can also run any of the programs by just typing its name.  This is
+		done with an environment variable called <span
+		class=code>PATH</span>.  <span class=code>PATH</span> is a list of
+		directoires that the computer looks for executable programs.  Find out what
+		is in the current list with this command:
+		<p/>
+		<div class=code><code>
+		C:\ echo %PATH%</code><br>
+		</div>
+		<p/>
+		<p>The value returned might look something like this:
+		<p/>
+		<div class=code><code>
+		<code>
+		C:\Windows;C:\Windows\system32;c:\Program Files\Microsoft Visual 
+		Studio 10.0\Common7\IDE\;c:\Program Files\Microsoft 
+		Visual Studio 10.0\VC\BIN;C:\Program Files\Common Files\Microsoft Shared\
+		Windows Live;C:\Windows\System32\Wbem;C:\Windows\S
+		ystem32\WindowsPowerShell\v1.0\;c:\Program files\Notepad++;C:\Program Files\Tort
+		oiseSVN\bin;C:\Program Files\Windows Live\Shared;C:\Program Files\CMake 2.8\bin;
+		C:\Program Files\PuTTY;C:\Program Files\Subversion\bin;C:\GnuWin32\bin;
+		</code>
+		</div>
+		<p>The first directory in this semicolon-separated list, <span
+		class=out>C:\Windows</span>, is the first place the computer looks
+		for a program.  If it doesn't find the program there it tries <span
+		class=out>C:\WIndows\system32</span> and so on down the list.  You can either
+		move the crux executable files into one of these directories already
+		in your PATH, or you can add <span
+		class=code><em><install directory></em></span> to PATH with this
+		command.  (Remember to replace the word <em><install directory></em> with the
+		actual location of your installation)</p> 
+		<div class=code><code>
+		  set PATH=%PATH%;<install directory>\bin;</code><br>
+		</div>
+		<p>The change to <span class=code>PATH</span> is only temporary.
+		To make a permanent change to the path follow the following steps:
+		<ol>
+		<li>Open the "Control Panel".</li>
+		<li>Click on "System and Security".</li>
+		<li>Click on "Advanced System Settings" in the list on the left 
+		(you may be asked to give an administrative password).
+		<li>
+		You'll  presented with a dialog box titled "System Properties".
+		Click on the button labeled "Environment Variables".
+		<li>
+		You'll be presented with a new dialog box containing two list boxes: one for user
+		environment variables, and one for system environment variables.
+		Select the 
+		<span class=code>PATH</span>
+		variable in the system variables list, and click on the "Edit ..." button.
+		<li>
+		Add the full path to the directory containing the Crux executables to the 
+		list of directories. Remember that each
+		<span class=code>PATH</span>
+		entry should end with a semi-colon.
+		</ol>
+
+		</div>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="install.html">Installation</a></li>
+				<li><a href="gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="customizedsearch.html">Customization and search options</a></li>
+				<li><a href="spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/tutorials/search.html b/doc/user/tutorials/search.html
new file mode 100644
index 0000000..2788a27
--- /dev/null
+++ b/doc/user/tutorials/search.html
@@ -0,0 +1,422 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Running a Simple Search Using Tide and Percolator</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>Running a Simple Search Using Tide and Percolator</h2>
+
+		<p>
+		Now that you have your environment <a href="gettingstarted.html">set
+		up</a> and the two input files in your working directory, you can
+		conduct the search. The search process compares each spectrum
+		in <span class=file>demo.ms2</span> to peptides (subsequences of the
+		proteins) in fasta files provided in a
+		dirctory, <span class=file>yeast-index/</span>.  Peptides whose
+		precursor mass is close to that of the observed spectrum are scored
+		against that spectrum, and the top scores are reported in the output.
+		To conduct the search, we first create a peptide index
+		using <code>tide-index</code> and then execute the search
+		using <code>tide-search</code>.</p>
+
+		<ol>
+		<li>
+		<div class=code>
+		<code>$ crux tide-index small-yeast.fasta yeast-index </code>
+		</div>
+
+		<p>
+		While generating the peptide index, you will see output like this:</p>
+
+		<pre>
+INFO: CPU: pyrrolysine.gs.washington.edu
+INFO: Crux version: 2.1
+INFO: Fri Feb  5 11:24:02 PST 2016
+COMMAND LINE: ./crux tide-index small-yeast.fasta yeast-index
+INFO: Running tide-index...
+INFO: Writing results to output directory 'yeast-index'.
+INFO: Reading small-yeast.fasta and computing unmodified peptides...
+INFO: Writing decoy fasta...
+INFO: Reading proteins
+INFO: Precomputing theoretical spectra...
+INFO: Elapsed time: 0.0973 s
+INFO: Finished crux tide-index.
+INFO: Return Code:0
+		</pre>
+
+		<p>
+		This command produces the peptide index in <code>yeast-index</code>
+		and also produces a directory <code>crux-output</code> containing 
+		the following files:
+		<ol>
+
+		<li>
+		tide-index.decoy.fasta – a set of decoy proteins, derived from
+		the proteins in the input set,</li>
+
+		<li>
+		tide-search.params.txt – a record of all the parameters used in
+		the search, and</li>
+
+		<li>tide-search.log.txt – a log file containing a copy of all
+		  the messages printed to the screen during the search.</li>
+		</ol>
+
+		<p>
+		Now you can run this command:</p></li>
+
+		<div class=code>
+		<li><code>$ crux tide-search --compute-sp T demo.ms2 yeast-index</code>
+		</div>
+
+		<p>While the search is running, you will see output like this:</p>
+
+		<pre>
+INFO: CPU: pyrrolysine.gs.washington.edu
+INFO: Crux version: 2.1
+INFO: Fri Feb  5 11:24:23 PST 2016
+COMMAND LINE: ./crux tide-search --compute-sp T demo.ms2 yeast-index
+INFO: Running tide-search...
+INFO: Reading index yeast-index
+INFO: Converting demo.ms2 to spectrumrecords format
+INFO: Reading spectra file crux-output/demo.ms2.spectrumrecords.tmp
+INFO: Sorting spectra
+INFO: Running search
+INFO: Time per spectrum-charge combination: 0.002318 s.
+INFO: Average number of candidates per spectrum-charge combination: 15.204820 
+INFO: Elapsed time: 0.389 s
+INFO: Finished crux tide-search.
+INFO: Return Code:0
+		</pre>
+
+		<p>
+		The <span class=file>crux-output</span> directory now contains four new files
+		containing the search results:
+
+		<ol>
+
+		<li>
+		tide-search.target.txt – search results
+		in <a href="../file-formats/txt-format.html">tab-delimited format</a>.</li>
+
+		<li>
+		tide-search.decoy.txt – search results from a decoy database
+		in <a href="../file-formats/txt-format.html">tab-delimited format</a>.</li>
+
+		<li>
+		tide-search.params.txt – a record of all the parameters used in
+		the search.</li>
+
+		<li>tide-search.log.txt – a log file containing a copy of all
+		  the messages printed to the screen during the search.</li>
+		</ol>
+
+		</p>
+		</li>
+
+		<p>
+		  Note that the peptide-spectrum matches (PSMs) in the
+		  tide-search.target.txt are sorted by the precursor m/z value
+		  associated with the spectrum. If you want to see which PSMs got the
+		  highest XCorr scores, you can do so like this:</p>
+
+		<div class=code>
+		<li><code>$ crux sort-by-column --column-type real --ascending T crux-output/tide-search.target.txt "xcorr score" > crux-output/tide-search.target.sort.txt</code>
+		</div>
+
+		<p>
+		  The first lines of the resulting sorted output file should look like this:</p>
+
+		<table class="searchtable">
+		<td><b>file</b></td><td><b>scan</b></td><td><b>charge</b></td><td><b>spectrum precursor m/z</b></td><td><b>spectrum neutral mass</b></td><td><b>peptide mass</b></td><td><b>delta_cn</b></td><td><b>sp score</b></td><td><b>sp rank</b></td><td><b>xcorr score</b></td><td><b>xcorr rank</b></td><td><b>b/y ions matched</b></td><td><b>b/y ions total</b></td><td><b>distinct matches/spectrum</b></td><td><b>sequence</b></td><td><b>cleavage type</b></td><td><b>protein id</b></td><td><b>flanking aa< [...]
+		<tr>
+		<td>demo.ms2</td><td>85</td><td>3</td><td>497.618</td><td>1489.83</td><td>1488.82</td><td>0.936932</td><td>2430.56</td><td>1</td><td>5.20757</td><td>1</td><td>27</td><td>48</td><td>3</td><td>NFLETVELQVGLK</td><td>trypsin-full-digest</td><td>YGL135W(27)</td><td>RN</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>118</td><td>3</td><td>1031.94</td><td>3092.8</td><td>3093.41</td><td>0.949698</td><td>2383.16</td><td>1</td><td>4.76204</td><td>1</td><td>44</td><td>108</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C(500)</td><td>KD</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>156</td><td>3</td><td>1032.44</td><td>3094.3</td><td>3093.41</td><td>0.938358</td><td>1929.77</td><td>1</td><td>4.7476</td><td>1</td><td>43</td><td>108</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C(500)</td><td>KD</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>18</td><td>3</td><td>1032.4</td><td>3094.18</td><td>3093.41</td><td>0.902056</td><td>1732.23</td><td>1</td><td>4.48933</td><td>1</td><td>40</td><td>108</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C(500)</td><td>KD</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>11</td><td>2</td><td>745.269</td><td>1488.52</td><td>1488.82</td><td>0.822851</td><td>2816.6</td><td>1</td><td>4.44855</td><td>1</td><td>21</td><td>24</td><td>4</td><td>NFLETVELQVGLK</td><td>trypsin-full-digest</td><td>YGL135W(27)</td><td>RN</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>53</td><td>2</td><td>745.749</td><td>1489.48</td><td>1488.82</td><td>0.935648</td><td>2797.78</td><td>1</td><td>4.39828</td><td>1</td><td>21</td><td>24</td><td>3</td><td>NFLETVELQVGLK</td><td>trypsin-full-digest</td><td>YGL135W(27)</td><td>RN</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>38</td><td>3</td><td>1032.39</td><td>3094.15</td><td>3093.41</td><td>0.975741</td><td>1460.28</td><td>1</td><td>4.39627</td><td>1</td><td>37</td><td>108</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C(500)</td><td>KD</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>42</td><td>3</td><td>1032.26</td><td>3093.76</td><td>3093.41</td><td>1.0216</td><td>1509.47</td><td>1</td><td>4.35676</td><td>1</td><td>38</td><td>108</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C(500)</td><td>KD</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>111</td><td>3</td><td>1033.02</td><td>3096.04</td><td>3093.41</td><td>0.952727</td><td>1366.71</td><td>1</td><td>4.3498</td><td>1</td><td>36</td><td>108</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C(500)</td><td>KD</td></tr>
+		<tr>
+		<td>demo.ms2</td><td>62</td><td>2</td><td>745.859</td><td>1489.7</td><td>1488.82</td><td>0.913711</td><td>2766.65</td><td>1</td><td>4.34057</td><td>1</td><td>21</td><td>24</td><td>3</td><td>NFLETVELQVGLK</td><td>trypsin-full-digest</td><td>YGL135W(27)</td><td>RN</td></tr>
+		</table>
+
+
+		<p>
+		The final step is to post-process the search results using Percolator.
+		Each spectrum has been compared to many peptides and we would like to
+		return only the best match for each spectrum.  We also expect that
+		some fraction of the spectra will not be identifiable as peptides (due
+		to chemical noise, multiple peptides co-eluting, poor fragmentation,
+		etc.).  The analysis step filters out those spectra and ranks the
+		matches by quality.
+		</p></li>
+
+		<li>
+		<div class=code><code>
+		$ crux percolator crux-output/tide-search.target.txt</code>
+		</div>
+
+		<p>While the analysis is running, you will see output like this
+		</p>
+
+		<pre>
+INFO: CPU: pyrrolysine.gs.washington.edu
+INFO: Crux version: 2.1
+INFO: Fri Feb  5 11:25:51 PST 2016
+COMMAND LINE: ./crux percolator crux-output/tide-search.target.txt
+INFO: Reading file crux-output/tide-search.target.txt
+INFO: Running make-pin
+INFO: Parsing crux-output/tide-search.target.txt
+INFO: Parsing crux-output/tide-search.decoy.txt
+INFO: There are 690 target matches and 690 decoys
+INFO: Finished make-pin.
+INFO: Percolator version 2.09, Build Date Sep 22 2015 14:29:11
+INFO: Copyright (c) 2006-9 University of Washington. All rights reserved.
+INFO: Written by Lukas Käll (lukall at u.washington.edu) in the
+INFO: Department of Genome Sciences at the University of Washington.
+INFO: Issued command:
+INFO: percolator -r crux-output/percolator.target.peptides.txt -v 2 -P decoy_ --seed 1 -p 0.01 -n 0 --trainFDR 0.01 --testFDR 0.01 --maxiter 10 -s crux-output/make-pin.pin
+INFO: Started Fri Feb  5 11:25:52 2016
+INFO:  on pyrrolysine.gs.washington.edu
+INFO: Hyperparameters selectionFdr=0.01, Cpos=0.01, Cneg=0, maxNiter=10
+INFO: Reading Tab delimited input from datafile crux-output/make-pin.pin
+INFO: Features:
+INFO: lnrSp deltCn XCorr Sp IonFrac PepLen Charge1 Charge2 Charge3 enzN enzC enzInt lnNumSP dM absdM 
+INFO: Train/test set contains 690 positives and 690 negatives, size ratio=1 and pi0=1
+INFO: selecting cneg by cross validation
+INFO: Selected feature number 4 as initial search direction, could separate 39 positives in that direction
+INFO: Selected feature number 3 as initial search direction, could separate 38 positives in that direction
+INFO: Selected feature number 3 as initial search direction, could separate 30 positives in that direction
+INFO: Estimating 53 over q=0.01 in initial direction
+INFO: Reading in data and feature calculation took 0.03 cpu seconds or 0 seconds wall time
+INFO: ---Training with Cpos=0.01, Cneg selected by cross validation, fdr=0.01
+INFO: Iteration 1 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 2 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 3 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 4 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 5 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 6 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 7 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 8 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 9 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Iteration 10 :	After the iteration step, 53 target PSMs with q<0.01 were estimated by cross validation
+INFO: Obtained weights (only showing weights of first cross validation set)
+INFO: # first line contains normalized weights, second line the raw weights
+INFO: lnrSp	deltCn	XCorr	Sp	IonFrac	PepLen	Charge1	Charge2	Charge3	enzN	enzC	enzInt	lnNumSP	dM	absdM	m0
+INFO: 0.0352	0.0014	0.1465	0.2956	-0.0130	0.0224	0.0051	-0.0025	-0.0020	0.0000	0.0000	-0.0001	-0.0049	-0.0055	0.0169	-0.9248
+INFO: 0.0580	0.0069	0.2096	0.0010	-0.0922	0.0052	0.0136	-0.0052	-0.0053	0.0000	0.0000	-0.0006	-0.0077	-0.0059	0.0300	-1.1931
+INFO: After all training done, 56 target PSMs with q<0.0100 were found when measuring on the test set
+INFO: Found 56 target PSMs scoring over 1.0000% FDR level on testset
+INFO: Merging results from 3 datasets
+INFO: Target Decoy Competition yielded 116 target PSMs and 50 decoy PSMs
+INFO: Tossing out "redundant" PSMs keeping only the best scoring PSM for each unique peptide.
+INFO: Calibrating statistics - calculating q values
+INFO: Merged list gives 9 peptides over q=0.0100
+INFO: Calibrating statistics - calculating Posterior error probabilities (PEPs)
+INFO: Processing took 0.67 cpu seconds or 0 seconds wall time
+INFO: Elapsed time: 0.933 s
+INFO: Finished crux percolator.
+INFO: Return Code:0
+		</pre>
+
+		<p>
+		The <span class=file>crux-output</span> directory will now contain
+		eight new files:</p>
+		<ol>
+
+		<li>
+		percolator.target.psms.txt – a list of peptide-spectrum matches
+		(PSMs), ranked by quality,</li>
+
+		<li>
+		percolator.target.peptides.txt – a list of peptides, ranked by
+		quality,</li>
+
+		<li>
+		percolator.decoy.psms.txt – a ranked list of decoy PSMs, </li>
+
+		<li>
+		percolator.decoy.peptides.txt – a ranked list of decoy peptides,</li>
+
+		<li>
+		percolator.pout.xml – a single XML output file containing all of
+		the Percolator results,</li>
+
+		<li>
+		make-pin.pin.xml: an intermediate XML format file that is used by
+		Percolator.</li>
+
+		<li>
+		percolator.params.txt – parameter file, and</li>
+
+		<li>
+		percolator.log.txt – log file.</li>
+
+		</ol>
+		</p>
+
+		<p>
+		  As before, you might want to sort the Percolator output files, this
+		  time by the "percolator score" column:</p>
+
+
+		<li>
+		<div class=code><code>
+		$ crux sort-by-column --column-type real --ascending T crux-output/percolator.target.psms.txt "percolator score" > crux-output/percolator.target.psms.sort.txt
+		</code>
+		</div>
+
+		<p>
+		The beginning of the resulting percolator.target.psms.sort.txt file will look like
+		this:</p>
+
+		<table class="searchtable">
+		<td><b>file</b></td><td><b>file_idx</b></td><td><b>scan</b></td><td><b>charge</b></td><td><b>spectrum precursor m/z</b></td><td><b>spectrum neutral mass</b></td><td><b>peptide mass</b></td><td><b>percolator score</b></td><td><b>percolator rank</b></td><td><b>percolator q-value</b></td><td><b>total matches/spectrum</b></td><td><b>sequence</b></td><td><b>cleavage type</b></td><td><b>protein id</b></td><td><b>flanking aa</b></td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>118</td><td>3</td><td>1031.9407</td><td>3092.8000</td><td>3095.2366</td><td>8.6190662</td><td>1</td><td>0</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C</td><td>KD</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>26</td><td>2</td><td>692.3773</td><td>1382.7400</td><td>1382.4467</td><td>7.0481362</td><td>2</td><td>0</td><td>6</td><td>TASEFDSAIAQDK</td><td>trypsin-full-digest</td><td>YLR043C</td><td>KL</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>53</td><td>2</td><td>745.7473</td><td>1489.4800</td><td>1489.7318</td><td>6.7469611</td><td>3</td><td>0</td><td>3</td><td>NFLETVELQVGLK</td><td>trypsin-full-digest</td><td>YGL135W</td><td>RN</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>62</td><td>2</td><td>745.8572</td><td>1489.7000</td><td>1489.7318</td><td>6.6489625</td><td>4</td><td>0</td><td>3</td><td>NFLETVELQVGLK</td><td>trypsin-full-digest</td><td>YGL135W</td><td>RN</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>146</td><td>2</td><td>692.6772</td><td>1383.3400</td><td>1382.4467</td><td>6.6027999</td><td>5</td><td>0</td><td>5</td><td>TASEFDSAIAQDK</td><td>trypsin-full-digest</td><td>YLR043C</td><td>KL</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>131</td><td>2</td><td>745.8473</td><td>1489.6801</td><td>1489.7318</td><td>6.5627294</td><td>6</td><td>0</td><td>3</td><td>NFLETVELQVGLK</td><td>trypsin-full-digest</td><td>YGL135W</td><td>RN</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>50</td><td>2</td><td>651.2873</td><td>1300.5601</td><td>1301.4160</td><td>6.3757763</td><td>7</td><td>0</td><td>10</td><td>LDVDELGDVAQK</td><td>trypsin-full-digest</td><td>YLR043C</td><td>KN</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>42</td><td>3</td><td>1032.2606</td><td>3093.7600</td><td>3095.2366</td><td>5.8047724</td><td>8</td><td>0</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C</td><td>KD</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>90</td><td>3</td><td>1032.0006</td><td>3092.9800</td><td>3095.2366</td><td>5.4775882</td><td>9</td><td>0</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C</td><td>KD</td></tr>
+		<tr>
+		<td>crux-output/tide-search.target.txt</td><td>1</td><td>111</td><td>3</td><td>1033.0206</td><td>3096.0400</td><td>3095.2366</td><td>5.4364419</td><td>10</td><td>0</td><td>2</td><td>ELESAAYDHAEPVQPEDAPQDIANDELK</td><td>trypsin-full-digest</td><td>YGL009C</td><td>KD</td></tr>
+		</table>
+
+		<p>
+		In this output, the PSMs are ranked by "percolator score," with higher
+		scores indicating a higher quality match. The associated statistical
+		confidence estimate is reported as a "percolator q-value," interpreted
+		as the minimal false discovery rate threshold at which this match is
+		deemed significant.  In the list above, all of the matches have
+		q-values of 0, meaning that they are highly significant.
+		The meanings of the remaining columns are
+		described <a href="../file-formats/txt-format.html">here</a>.  Note that when you run
+		Percolator on your own computer, the results may be somewhat
+		different than the ones reported here.  This is because Percolator
+		involves randomly subdividing the data in a cross-validation scheme
+		(described in detail
+		<a href="http://bmcbioinformatics.biomedcentral.com/articles/10.1186/1471-2105-13-S16-S3">here</a>.)</p>
+		</li>
+		</ol>
+	<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="install.html">Installation</a></li>
+				<li><a href="gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="customizedsearch.html">Customization and search options</a></li>
+				<li><a href="spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/tutorials/spectralcounts.html b/doc/user/tutorials/spectralcounts.html
new file mode 100644
index 0000000..4e5be1c
--- /dev/null
+++ b/doc/user/tutorials/spectralcounts.html
@@ -0,0 +1,182 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Using spectral-counts</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+	// Main Menu
+	$( document ).ready(function() {
+			var pull 		= $('.btn');
+				menu 		= $('nav ul');
+				menuHeight	= menu.height();
+
+			$(pull).on('click', function(e) {
+				e.preventDefault();
+				menu.slideToggle();
+			});
+
+			$(window).resize(function(){
+	    		var w = $(window).width();
+	    		if(w > 320 && menu.is(':hidden')) {
+	    			menu.removeAttr('style');
+	    		} 
+			});
+	});
+</script>
+</head>
+<body>
+	<div class="page-wrap">
+	 	<nav>
+			<div class="btn">
+		    </div>
+		    <img src="../images/crux-logo.png" id="logo"></a>
+			<ul id="navitems">
+			    <li><a href="../index.html">Home</a></li>
+			    <li><a href="../download.html">Download</a></li>
+			    <li><a href="../fileformats.html">File Formats</a></li>
+		        <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+		    </ul>
+		</nav>
+		<div id="content">
+		<!-- START CONTENT -->
+		<h2>Using spectral-counts</h2>
+
+		<p> 
+		After you have run a <a href="search.html">search</a> and
+		assigned confidence to your identified PSMs, you can now calculate
+		relative quantification values for the proteins by running the
+		command:<br>
+
+		<div class=code>
+		<code>$ crux spectral-counts --protein-database small-yeast.fasta ./crux-output/percolator.target.psms.txt</code>
+		</div>
+		<br>
+		Alternatively, you can use the pepXML output by q-ranker using the command:<br>
+		<br>
+		<div class=code>
+		<code>$ crux spectral-counts --protein-database small-yeast.fasta ./crux-output/percolator.target.psms.txt</code>
+		</div>
+
+		<p>While the command is running, you will see output like this
+		</p>
+
+		<pre>
+INFO: Beginning spectral-counts.
+INFO: Total proteins found: 56
+INFO: Number of matches passed the threshold 116
+		</pre>
+
+		<p>When the command is finished, it will print</p>
+		<pre>
+INFO: Finished crux spectral-counts.
+		</pre>
+
+		<p>
+		Within the <code>crux-output</code> directory, there will be three new files:
+		<li>spectral-counts.target.txt – tab-delimited file of the <code>spectral-counts</code> results</li>
+		<li>spectral-counts.params.txt – the parameters used for running <code>spectral-counts</code></li>
+		<li>spectral-counts.log.txt – the log output of <code>spectral-counts</code></li>
+		</p>
+
+		<p>The spectral-counts.target.txt file will look something like:<br>
+		<pre>
+protein id 	NSAF
+YLR043C 	0.61643416
+YGL135W 	0.17810018
+YEL027W 	0.10352074
+YGL009C 	0.035437137
+YLR185W 	0.031369921
+YJR069C 	0.014012959
+YGR192C 	0.0083149187
+YMR235C 	0.0067826854
+YBR118W 	0.0060274079
+		</pre>
+
+		<p>
+		In this output, the first field is the identifier and the second field
+		is the spectral-counting measure (NSAF, dNSAF, SIN, or EMPAI) result
+		for each protein.  To select which measure is computed, see the
+		<a href="../commands/spectral-counts.html">crux spectral-counts</a> documentation.</p>
+
+
+		<h3>Using peptideprophet probability from pepXML</h3>
+		<p><code>crux spectral-counts</code> also supports using the Peptide Prophet probability provided in the pepXML file.  Use the command:<br>
+		<br>
+		<div class=code>
+		<code>$ crux spectral-counts --protein-database small-yeast.fasta --threshold-type custom --custom-threshold-name peptideprophet --threshold 0.9 --custom-threshold-min F target.pep.xml</code>
+		</div>          
+		This code will filter out matches whose Peptide Prophet probability is < 0.9 and calculate NSAF for the proteins of the remaining PSMs.<br>
+
+		<h3>Using mzIdentML files with spectral-counts</h3>
+		<p><code>crux spectral-counts</code> also supports mzIdentML as input.  For example, </p> 
+		<div class="code">
+			$ crux spectral-counts --measure RAW file.mzid
+		</div>
+		<p>
+		If the protein sequences are not provided in the mzIdentML file, then you will have to provide
+		a database using the <span class="code">protein-database</span> parameter for the NSAF, dNSAF, EMPAI, and SIN metrics.
+		</p>
+		<!-- END CONTENT -->
+		</div>
+	</div>
+
+<footer class="site-footer">
+	<div id="centerfooter">
+		<div class="footerimportantlinks">
+			<img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+			<ul>
+				<li><a href="../faq.html">Crux FAQ</a></li>
+				<li><a href="../glossary.html">Glossary of terminology</a></li>
+				<li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+				<li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+				<li><a href="../release-notes.html">Release Notes</a></li>
+				<li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+				<li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+				<li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+			</ul>
+		</div>
+		<div class="footerimportantlinks tutoriallinks">
+			<img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+			<ul>
+				<li><a href="install.html">Installation</a></li>
+				<li><a href="gettingstarted.html">Getting started with Crux</a></li>
+				<li><a href="search.html">Running a simple search using Tide and Percolator</a></li>
+				<li><a href="customizedsearch.html">Customization and search options</a></li>
+				<li><a href="spectralcounts.html">Using spectral-counts</a></li>
+			</ul>
+		</div>
+		<div id="footertext">
+			<p>
+				The original version of Crux was written by Chris Park and Aaron Klammer
+				under the supervision
+				of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+				MacCoss</a>
+				and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+				Stafford Noble</a> in the Department of Genome Sciences at the
+				University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+				<br />The complete list of contributors
+				can be found <a href="../contributors.html">here</a>.
+				<br />
+				<br />
+				Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+			</p>
+		</div>
+	</div>
+</footer>
+	
+</body>
+
+</html>
diff --git a/doc/user/xlink-assign-ions.html b/doc/user/xlink-assign-ions.html
new file mode 100644
index 0000000..84897bb
--- /dev/null
+++ b/doc/user/xlink-assign-ions.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>xlink-assign-ions</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>xlink-assign-ions</h1>
+<h2>Usage:</h2>
+<p><code>crux xlink-assign-ions [options] <peptide A> <peptide B> <pos A> <pos B> <link mass> <charge state> <scan number> <ms2 file></code></p>
+<h2>Description:</h2>
+Given a spectrum and a pair of cross-linked peptides, assign theoretical ion type labels to peaks in the observed spectrum.
+<h2>Input:</h2>
+<ul>
+  <li><code>peptide A</code> – The sequence of peptide A.</li>
+  <li><code>peptide B</code> – The sequence of peptide B.</li>
+  <li><code>pos A</code> – Position of cross-link on peptide A</li>
+  <li><code>pos B</code> – Position of cross-link on peptide B</li>
+  <li><code>link mass</code> – The mass modification of the linker when attached to a peptide.</li>
+  <li><code>charge state</code> – The charge state of the peptide.</li>
+  <li><code>scan number</code> – Scan number identifying the spectrum.</li>
+  <li><code>ms2 file</code> – File containing spectra to be searched.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – tab-delimited text in which each row is a peak in the observed spectrum, and the columns are <ol><li>The m/z value.</li><li>The observed intensity.</li><li>The matched intensity.</li><li>The calculated m/z value of the theoretical peak.</li><li>The mass associated with the observed peak.</li><li>The mass difference (in ppm) between the observed and theoretical peaks.</li><li>The ion type, specified as b or y, followed by the charge state in parentheses.< [...]
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>Search parameters</h3>
+<ul>
+  <li class="nobullet"><code>--fragment-mass average|mono</code> – Specify which isotopes to use in calculating fragment ion mass. Default = <code>mono</code>.</li>
+  <li class="nobullet"><code>--max-ion-charge <string></code> – Predict theoretical ions up to max charge state (1, 2, ... ,6) or up to the charge state of the peptide ("peptide"). If the max-ion-charge is greater than the charge state of the peptide, then the maximum is the peptide charge.  Default = <code>peptide</code>.</li>
+  <li class="nobullet"><code>--mz-bin-width <float></code> – Before calculation of the XCorr score, the m/z axes of the observed and theoretical spectra are discretized. This parameter specifies the size of each bin. The exact formula for computing the discretized m/z value is floor((x/mz-bin-width) + 1.0 - mz-bin-offset), where x is the observed m/z value. For low resolution ion trap ms/ms data 1.0005079 and for high resolution ms/ms 0.02 is recommended. Default = <code>1.00 [...]
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+  <li class="nobullet"><code>--spectrum-parser pwiz|mstoolkit</code> – Specify the parser to use for reading in MS/MS spectra. The default, ProteoWizard parser can read the MS/MS file formats listed <a href="http://proteowizard.sourceforge.net/formats.shtml">here</a>. The alternative is <a href="../mstoolkit.html">MSToolkit parser</a>. If the ProteoWizard parser fails to read your files properly, you may want to try the MSToolkit parser instead. Default = <code>pwiz</code>.</li>
+  <li class="nobullet"><code>--precision <integer></code> – Set the precision for scores written to sqt and text files. Default = <code>8</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/user/xlink-score-spectrum.html b/doc/user/xlink-score-spectrum.html
new file mode 100644
index 0000000..be37984
--- /dev/null
+++ b/doc/user/xlink-score-spectrum.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>xlink-score-spectrum</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<link rel="stylesheet" type="text/css" href="../styles.css">
+<script type="text/javascript"
+  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+</script>
+<script type="text/javascript">
+  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});
+</script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-26136956-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript">
+  // Main Menu
+  $( document ).ready(function() {
+      var pull 		= $('.btn');
+        menu 		= $('nav ul');
+        menuHeight	= menu.height();
+      $(pull).on('click', function(e) {
+        e.preventDefault();
+        menu.slideToggle();
+      });
+      $(window).resize(function(){
+          var w = $(window).width();
+          if(w > 320 && menu.is(':hidden')) {
+            menu.removeAttr('style');
+          } 
+      });
+  });
+</script>
+</head>
+<body>
+  <div class="page-wrap">
+    <nav>
+      <div class="btn">
+        </div>
+        <img src="../images/crux-logo.png" id="logo"></a>
+      <ul id="navitems">
+          <li><a href="../index.html">Home</a></li>
+          <li><a href="../download.html">Download</a></li>
+          <li><a href="../fileformats.html">File Formats</a></li>
+            <li><a href="http://groups.google.com/group/crux-users">Contact</a></li> <!--Link to google support board-->
+        </ul>
+    </nav>
+    <div id="content" class="autogenerated">
+    <!-- START CONTENT -->
+<h1>xlink-score-spectrum</h1>
+<h2>Usage:</h2>
+<p><code>crux xlink-score-spectrum [options] <peptide A> <peptide B> <pos A> <pos B> <link mass> <charge state> <scan number> <ms2 file></code></p>
+<h2>Description:</h2>
+Given a cross-linked peptide and a spectrum calculate the corresponding XCorr score a number of different ways, depending upon the xlink-score-method parameter:<ul><li>composite – compute a combined XCorr score</li><li>modification - score the two peptides separately, treating the second peptide as a variable modification on the first peptide</li><li>concatenated - score as the concatenation of the two peptides.  Note that this mode gives four scores, corresponding to the two relat [...]
+<h2>Input:</h2>
+<ul>
+  <li><code>peptide A</code> – The sequence of peptide A.</li>
+  <li><code>peptide B</code> – The sequence of peptide B.</li>
+  <li><code>pos A</code> – Position of cross-link on peptide A</li>
+  <li><code>pos B</code> – Position of cross-link on peptide B</li>
+  <li><code>link mass</code> – The mass modification of the linker when attached to a peptide.</li>
+  <li><code>charge state</code> – The charge state of the peptide.</li>
+  <li><code>scan number</code> – Scan number identifying the spectrum.</li>
+  <li><code>ms2 file</code> – File containing spectra to be searched.</li>
+</ul>
+<h2>Output:</h2>
+<ul>
+  <li><code>stdout</code> – XCorr score(s) in descending order</li>
+</ul>
+<h2>Options:</h2>
+<ul style="list-style-type: none;">
+<li class="nobullet">
+<h3>xlink-score-spectrum options</h3>
+<ul>
+  <li class="nobullet"><code>--xlink-score-method composite|modification|concatenated</code> – Score method for xlink {composite, modification, concatenated}. Default = <code>composite</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Search parameters</h3>
+<ul>
+  <li class="nobullet"><code>--use-flanking-peaks T|F</code> – Include flanking peaks around singly charged b and y theoretical ions. Each flanking peak occurs in the adjacent m/z bin and has half the intensity of the primary peak. Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Fragment ion parameters</h3>
+<ul>
+  <li class="nobullet"><code>--use-a-ions T|F</code> – Consider a-ions in the search? Note that an a-ion is equivalent to a neutral loss of CO from the b-ion.  Peak height is 10 (in arbitrary units). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--use-b-ions T|F</code> – Consider b-ions in the search? Peak height is 50 (in arbitrary units). Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--use-c-ions T|F</code> – Consider c-ions in the search? Peak height is 50 (in arbitrary units). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--use-x-ions T|F</code> – Consider x-ions in the search? Peak height is 10 (in arbitrary units). Default = <code>false</code>.</li>
+  <li class="nobullet"><code>--use-y-ions T|F</code> – Consider y-ions in the search? Peak height is 50 (in arbitrary units). Default = <code>true</code>.</li>
+  <li class="nobullet"><code>--use-z-ions T|F</code> – Consider z-ions in the search? Peak height is 50 (in arbitrary units). Default = <code>false</code>.</li>
+</ul>
+</li>
+<li class="nobullet">
+<h3>Input and output</h3>
+<ul>
+  <li class="nobullet"><code>--verbosity <integer></code> – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = <code>30</code>.</li>
+</ul>
+</li>
+
+</ul>
+    <!-- END CONTENT -->
+    </div>
+  </div>
+<footer class="site-footer">
+  <div id="centerfooter">
+    <div class="footerimportantlinks">
+      <img src="../images/linkicon.png" style="width:16px; height:16px"><h3>Important links</h3>
+      <ul>
+        <li><a href="../faq.html">Crux FAQ</a></li>
+        <li><a href="../glossary.html">Glossary of terminology</a></li>
+        <li><a href="http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ">Google Scholar profile</a></li>
+        <li><a href="https://github.com/crux-toolkit/crux-toolkit">GitHub</a></li>
+        <li><a href="../release-notes.html">Release Notes</a></li>
+        <li><a href="https://mailman1.u.washington.edu/mailman/listinfo/crux-users" title="Receive announcements of new versions">Join the mailing list</a></li>
+        <li><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache license</a></li>
+        <li><a href="http://groups.google.com/group/crux-users">Support Board</a></li>
+      </ul>
+    </div>
+    <div class="footerimportantlinks tutoriallinks">
+      <img src="../images/tutorialicon.png" style="height:16px"><h3>Tutorials</h3>
+      <ul>
+        <li><a href="../tutorials/install.html">Installation</a></li>
+        <li><a href="../tutorials/gettingstarted.html">Getting started with Crux</a></li>
+        <li><a href="../tutorials/search.html">Running a simple search using Tide and Percolator</a></li>
+        <li><a href="../tutorials/customizedsearch.html">Customization and search options</a></li>
+        <li><a href="../tutorials/spectralcounts.html">Using spectral-counts</a></li>
+      </ul>
+    </div>
+    <div id="footertext">
+      <p>
+        The original version of Crux was written by Chris Park and Aaron Klammer
+        under the supervision
+        of <a href="http://www.gs.washington.edu/faculty/maccoss.htm">Prof. Michael
+        MacCoss</a>
+        and <a href="http://noble.gs.washington.edu/~noble">Prof. William
+        Stafford Noble</a> in the Department of Genome Sciences at the
+        University of Washington, Seattle.  Website by <a href="http://www.yuvalboss.com/">Yuval Boss</a>. 
+        <br />The complete list of contributors
+        can be found <a href="../contributors.html">here</a>.
+        <br />
+        <br />
+        Maintenance and development of Crux is funded by the <a href="https://www.nih.gov/">National Institutes of Health</a> award P41 GM103533. 
+      </p>
+    </div>
+  </div>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/ext/CMakeLists.txt b/ext/CMakeLists.txt
new file mode 100644
index 0000000..8954251
--- /dev/null
+++ b/ext/CMakeLists.txt
@@ -0,0 +1,342 @@
+include(ExternalProject)
+
+INCLUDE_DIRECTORIES(BEFORE SYSTEM ${CMAKE_CURRENT_BINARY_DIR}/include)
+
+if (UNIX)
+  SET(ENV{BOOSTROOT} ${CMAKE_CURRENT_BINARY_DIR})
+  SET(ENV{LIBPATH} ${CMAKE_CURRENT_BINARY_DIR}/lib:$ENV{LIBPATH})
+  SET(ENV{LD_LIBRARY_PATH} ${CMAKE_CURRENT_BINARY_DIR}/lib:$ENV{LD_LIBRARY_PATH})
+  SET(ENV{PATH} ${CMAKE_CURRENT_BINARY_DIR}/bin:$ENV{PATH})
+  SET(CPP_ARGS "-I${CMAKE_CURRENT_BINARY_DIR}/include")
+  SET(LD_ARGS "-L${CMAKE_CURRENT_BINARY_DIR}/lib")
+endif (UNIX)
+SET(ENV{CMAKE_PREFIX_PATH} ${CMAKE_CURRENT_BINARY_DIR})
+SET(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR})
+SET(USE_LATEST_PWIZ ON CACHE BOOL "Use lastest version of ProteoWizard")
+
+if (WIN32 AND NOT CYGWIN)
+  # If windows build we need to select 32/64 bit platform
+  if (CMAKE_GENERATOR MATCHES "^.*Win64$")
+    SET(MSBUILD_PLATFORM "x64")
+  else (CMAKE_GENERATOR MATCHES "^.*Win64$")
+    SET(MSBUILD_PLATFORM "Win32")
+  endif (CMAKE_GENERATOR MATCHES "^.*Win64$")
+
+  # On Windows we should build vendor libraries by default
+  if (NOT DEFINED INCLUDE_VENDOR_LIBRARIES)
+    set(INCLUDE_VENDOR_LIBRARIES TRUE)
+  endif (NOT DEFINED INCLUDE_VENDOR_LIBRARIES)
+  if (INCLUDE_VENDOR_LIBRARIES)
+    message(STATUS "Including vendor libraries.")
+  else (INCLUDE_VENDOR_LIBRARIES)
+    message(STATUS "Not including vendor libraries.")
+  endif (INCLUDE_VENDOR_LIBRARIES)
+endif (WIN32 AND NOT CYGWIN)
+
+# Download and build a partial distribution of the pwiz source
+# from the ProteoWizard TeamCity repository.
+if (WIN32 AND NOT CYGWIN)
+    ExternalProject_Add(
+      ProteoWizard
+    URL http://noble.gs.washington.edu/crux-downloads/pwiz-src-3_0_10273.tar.bz2
+    DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/downloads
+    PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build
+    CONFIGURE_COMMAND ""
+    BUILD_COMMAND 
+      ${CMAKE_COMMAND} 
+        -DMSBUILD_PLATFORM=${MSBUILD_PLATFORM}
+        -DBUILD_TYPE:STRING=${CMAKE_CFG_INTDIR}
+        -DPREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}
+        -DWORKING_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/build/src/ProteoWizard
+        -DINCLUDE_VENDOR_LIBRARIES:BOOLEAN=${INCLUDE_VENDOR_LIBRARIES}
+        -P  ${CMAKE_CURRENT_SOURCE_DIR}/build_pwiz.cmake
+    INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory
+      ${CMAKE_CURRENT_SOURCE_DIR}/patches/boost ${CMAKE_CURRENT_BINARY_DIR}/include/boost
+    BUILD_IN_SOURCE 1
+  )
+  # On Windows we have to do some extra house keeping
+  ExternalProject_Add_Step(
+    ProteoWizard
+    windows_post_install
+    COMMAND
+      ${CMAKE_COMMAND} 
+        -DBUILD_TYPE:STRING=${CMAKE_CFG_INTDIR}
+        -DPREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}
+        -P  ${CMAKE_CURRENT_SOURCE_DIR}/post_install_pwiz.cmake
+    DEPENDEES install
+  )
+else (WIN32 AND NOT CYGWIN)
+  ExternalProject_Add(
+    ProteoWizard
+    URL http://noble.gs.washington.edu/crux-downloads/pwiz-src-3_0_10273.tar.bz2
+    DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/downloads
+    PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build
+    CONFIGURE_COMMAND ""
+    BUILD_COMMAND 
+      ${CMAKE_COMMAND} 
+        -DBUILD_TYPE:STRING=${CMAKE_CFG_INTDIR}
+        -DPREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}
+        -DWORKING_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/build/src/ProteoWizard
+        -P  ${CMAKE_CURRENT_SOURCE_DIR}/build_pwiz.cmake
+      INSTALL_COMMAND
+        ${CMAKE_CURRENT_SOURCE_DIR}/create_links.sh 
+           --prefix=${CMAKE_CURRENT_BINARY_DIR}
+        COMMAND ${CMAKE_COMMAND} -E copy
+          ${CMAKE_CURRENT_SOURCE_DIR}/patches/boost/asio.hpp
+          ${CMAKE_CURRENT_BINARY_DIR}/include/boost
+        COMMAND ${CMAKE_COMMAND} -E copy_directory 
+          ${CMAKE_CURRENT_SOURCE_DIR}/patches/boost/asio 
+          ${CMAKE_CURRENT_BINARY_DIR}/include/boost/asio
+        COMMAND ${CMAKE_COMMAND} -E copy_directory
+          ${CMAKE_CURRENT_BINARY_DIR}/build/src/ProteoWizard/libraries/boost_aux/boost/utility
+          ${CMAKE_CURRENT_BINARY_DIR}/include/boost/utility
+        COMMAND ${CMAKE_COMMAND} -E copy
+          ${CMAKE_CURRENT_BINARY_DIR}/build/src/ProteoWizard/libraries/boost_1_56_0/boost/date_time/gregorian_calendar.ipp
+          ${CMAKE_CURRENT_BINARY_DIR}/include/boost/date_time
+      BUILD_IN_SOURCE 1
+  )
+endif (WIN32 AND NOT CYGWIN)
+
+ExternalProject_Add(
+  percolator
+  GIT_REPOSITORY https://github.com/percolator/percolator.git
+  GIT_TAG "6f20e6b"
+  PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build
+  CMAKE_ARGS -DCMAKE_VERBOSE_MAKEFILE=ON
+    -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}
+    -DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_BINARY_DIR}
+    -DCMAKE_BUILD_TYPE=${CMAKE_CFG_INTDIR}
+    -DCRUX=${CMAKE_CURRENT_SOURCE_DIR}/..
+    -DEXT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}/include
+  INSTALL_COMMAND ""
+)
+
+if (UNIX) 
+  ExternalProject_Add(
+    protobuf-2.5.0
+    PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build
+    DOWNLOAD_COMMAND
+          ${CMAKE_COMMAND} 
+            -DDOWNLOAD_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/downloads
+            -DWORKING_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/build/src
+            -P  ${CMAKE_CURRENT_SOURCE_DIR}/download_pbuffers.cmake
+    CONFIGURE_COMMAND
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/protobuf-2.5.0/configure
+      --prefix=${CMAKE_CURRENT_BINARY_DIR}
+      --enable-shared=no
+    BUILD_COMMAND make
+    INSTALL_COMMAND make install
+    BUILD_IN_SOURCE 1
+ )
+elseif (WIN32 AND NOT CYGWIN)
+  # Update Microsoft VS project files and build ProtocolBuffers using MSBuild
+  ExternalProject_Add(
+    protobuf-2.5.0
+    PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build
+    DOWNLOAD_COMMAND
+          ${CMAKE_COMMAND} 
+            -DDOWNLOAD_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/downloads
+            -DWORKING_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/build/src
+            -P  ${CMAKE_CURRENT_SOURCE_DIR}/download_pbuffers.cmake
+    PATCH_COMMAND ${CMAKE_COMMAND} -E copy_directory 
+      ${CMAKE_CURRENT_SOURCE_DIR}/patches/protobuf/vsprojects/ 
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/protobuf-2.5.0/vsprojects/ &&
+      ${CMAKE_COMMAND} -E copy_directory 
+      ${CMAKE_CURRENT_SOURCE_DIR}/patches/protobuf/src/ 
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/protobuf-2.5.0/src/
+    CONFIGURE_COMMAND ""
+    BUILD_COMMAND msbuild 
+      /p:Configuration=${CMAKE_CFG_INTDIR}
+      /p:Platform=${MSBUILD_PLATFORM} 
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/protobuf-2.5.0/vsprojects/libprotobuf.vcxproj &&
+      msbuild
+      /p:Configuration=${CMAKE_CFG_INTDIR}
+      /p:Platform=${MSBUILD_PLATFORM} 
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/protobuf-2.5.0/vsprojects/libprotoc.vcxproj &&
+      msbuild
+      /p:Configuration=${CMAKE_CFG_INTDIR}
+      /p:Platform=${MSBUILD_PLATFORM} 
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/protobuf-2.5.0/vsprojects/protoc.vcxproj
+    INSTALL_COMMAND ""
+    BUILD_IN_SOURCE 1
+  )
+  ExternalProject_Add_Step(
+    protobuf-2.5.0
+    copy_binaries
+    COMMAND ${CMAKE_COMMAND} -E copy 
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/protobuf-2.5.0/vsprojects/${MSBUILD_PLATFORM}/${CMAKE_CFG_INTDIR}/protoc.exe
+      ${CMAKE_CURRENT_BINARY_DIR}/bin/protoc.exe
+    COMMAND ${CMAKE_COMMAND} -E copy 
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/protobuf-2.5.0/vsprojects/${MSBUILD_PLATFORM}/${CMAKE_CFG_INTDIR}/libprotobuf.lib
+      ${CMAKE_CURRENT_BINARY_DIR}/lib/protobuf.lib
+    DEPENDEES install
+  )
+endif (UNIX)
+
+ExternalProject_Add(
+  gflags-2.1.2
+  DOWNLOAD_COMMAND
+        ${CMAKE_COMMAND} 
+          -DDOWNLOAD_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/downloads
+          -DWORKING_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/build/src
+          -P  ${CMAKE_CURRENT_SOURCE_DIR}/download_gflags.cmake
+  PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build
+  CMAKE_ARGS -DCMAKE_VERBOSE_MAKEFILE=ON
+    -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}
+    -DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_BINARY_DIR}
+    -DCMAKE_BUILD_TYPE=${CMAKE_CFG_INTDIR}
+  PATCH_COMMAND ""
+)
+
+if (UNIX) 
+  # Get Comet source from SVN and buld using it's own makefile
+  ExternalProject_Add(
+    comet
+    SVN_REPOSITORY svn://svn.code.sf.net/p/comet-ms/code/tags/release_2016011/
+    PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build
+    UPDATE_COMMAND ""
+    CONFIGURE_COMMAND ""
+    PATCH_COMMAND cp
+      ${CMAKE_CURRENT_SOURCE_DIR}/patches/comet/CometSearch/CometSearchManager.cpp
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/comet/CometSearch/
+    BUILD_COMMAND make -C MSToolkit
+      COMMAND make -C CometSearch CXXFLAGS=-DCRUX 
+    INSTALL_COMMAND ""
+    BUILD_IN_SOURCE 1
+  )  
+  # Copy the Comet and MSToolkit include files and libraries to
+  # the desired directories.
+  add_custom_command(
+    TARGET comet
+    POST_BUILD
+    COMMAND 
+      [ -d ${CMAKE_CURRENT_BINARY_DIR}/include/MSToolkit ] ||
+        mkdir ${CMAKE_CURRENT_BINARY_DIR}/include/MSToolkit
+    COMMAND 
+      cp -p
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/comet/MSToolkit/include/*
+      ${CMAKE_CURRENT_BINARY_DIR}/include/MSToolkit
+    COMMAND 
+      cp -p
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/comet/MSToolkit/libmstoolkitlite.a
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/comet/CometSearch/libcometsearch.a
+      ${CMAKE_CURRENT_BINARY_DIR}/lib
+    COMMAND 
+      [ -d ${CMAKE_CURRENT_BINARY_DIR}/include/CometSearch ] ||
+        mkdir ${CMAKE_CURRENT_BINARY_DIR}/include/CometSearch
+    COMMAND
+      cp -p
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/comet/CometSearch/Common.h
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/comet/CometSearch/CometData.h
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/comet/CometSearch/CometSearch.h
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/comet/CometSearch/CometSearchManager.h
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/comet/CometSearch/CometPreprocess.h
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/comet/CometSearch/ThreadPool.h
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/comet/CometSearch/Threading.h
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/comet/CometSearch/OSSpecificThreading.h
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/comet/CometSearch/CometInterfaces.h
+      ${CMAKE_CURRENT_BINARY_DIR}/include/CometSearch
+  )
+elseif (WIN32 AND NOT CYGWIN)
+  set(LIBPATH "${CMAKE_CURRENT_BINARY_DIR}/lib;")
+  ExternalProject_Add(
+    comet
+    SVN_REPOSITORY http://svn.code.sf.net/p/comet-ms/code/tags/release_2016011/
+    PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build
+    UPDATE_COMMAND ""
+    # Copy the Comet and MSToolkit include files and libraries to
+    # the desired directories.
+    CONFIGURE_COMMAND 
+      ${CMAKE_COMMAND} -E copy_directory 
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/comet/MSToolkit/include
+      ${CMAKE_CURRENT_BINARY_DIR}/include/MSToolkit/
+    PATCH_COMMAND 
+      ${CMAKE_COMMAND} 
+        -DSOURCE_DIR:STRING=${CMAKE_CURRENT_SOURCE_DIR}
+        -DBINARY_DIR:STRING=${CMAKE_CURRENT_BINARY_DIR}
+        -P ${CMAKE_CURRENT_SOURCE_DIR}/patch-comet.cmake
+    BUILD_COMMAND 
+      ${CMAKE_COMMAND} 
+        -DLIBPATH:STRING="${LIBPATH}"
+        -DMSBUILD_ARGS:STRING=/p:Configuration=${CMAKE_CFG_INTDIR}
+        -DMSBUILD_PLATFORM=${MSBUILD_PLATFORM}
+        -DPROJ_FILE:STRING=comet.sln
+        -P ${CMAKE_CURRENT_SOURCE_DIR}/build-comet.cmake
+    INSTALL_COMMAND ""
+    BUILD_IN_SOURCE 1
+  )  
+  ExternalProject_Add_Step(
+    comet
+    copy_comet_library
+    COMMAND ${CMAKE_COMMAND} -E copy 
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/comet/${MSBUILD_PLATFORM}/${CMAKE_CFG_INTDIR}/CometSearch.lib
+      ${CMAKE_CURRENT_BINARY_DIR}/lib/CometSearch.lib
+    COMMAND ${CMAKE_COMMAND} -E copy 
+      ${CMAKE_CURRENT_BINARY_DIR}/build/src/comet/${MSBUILD_PLATFORM}/${CMAKE_CFG_INTDIR}/MSToolkitLite.lib
+      ${CMAKE_CURRENT_BINARY_DIR}/lib/MSToolkitLite.lib
+    DEPENDEES install
+  )
+endif (UNIX)
+
+
+# On Windows we have to include the vendor libraries in the package
+if (WIN32 AND NOT CYGWIN)
+  if (INCLUDE_VENDOR_LIBRARIES)
+    if (CMAKE_GENERATOR MATCHES "^.*Win64$")
+      set(
+        vendor_binaries
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/agtsampleinforw.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/baf2sql_c.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/BaseCommon.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/BaseDataAccess.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/BaseError.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/BaseTof.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.Compression.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.Data.AnalystDataProvider.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.Data.CommonInterfaces.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.Data.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.Data.WiffReader.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.InternalRawXYProcessing.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.Muni.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.RawXYProcessing.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.StructuredStorage.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.Utility.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/fileio_x64.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/fregistry_x64.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/MassSpecDataReader.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/MIDAC.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/MSFileReader.XRawfile2.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/build/src/ProteoWizard/pwiz_aux/msrc/utility/vendor_api/Waters/vc12_x64/cdt.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/build/src/ProteoWizard/pwiz_aux/msrc/utility/vendor_api/Waters/vc12_x64/MassLynxRaw.dll
+      )
+    else (CMAKE_GENERATOR MATCHES "^.*Win64$")
+      set(
+        vendor_binaries
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/agtsampleinforw.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/baf2sql_c.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/BaseCommon.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/BaseDataAccess.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/BaseError.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/BaseTof.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.Compression.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.Data.AnalystDataProvider.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.Data.CommonInterfaces.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.Data.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.Data.WiffReader.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.InternalRawXYProcessing.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.Muni.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.RawXYProcessing.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.StructuredStorage.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/Clearcore2.Utility.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/fileio.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/fregistry.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/MassSpecDataReader.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/MIDAC.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/lib/MSFileReader.XRawfile2.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/build/src/ProteoWizard/pwiz_aux/msrc/utility/vendor_api/Waters/vc12_x86/cdt.dll
+        ${CMAKE_CURRENT_BINARY_DIR}/build/src/ProteoWizard/pwiz_aux/msrc/utility/vendor_api/Waters/vc12_x86/MassLynxRaw.dll
+      )
+    endif (CMAKE_GENERATOR MATCHES "^.*Win64$")
+    install (FILES ${vendor_binaries} DESTINATION bin)
+  endif (INCLUDE_VENDOR_LIBRARIES)
+endif (WIN32 AND NOT CYGWIN)
diff --git a/ext/Makefile b/ext/Makefile
new file mode 100644
index 0000000..bf31446
--- /dev/null
+++ b/ext/Makefile
@@ -0,0 +1,267 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 2.8
+
+# Default target executed when no arguments are given to make.
+default_target: all
+.PHONY : default_target
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+# A target that is always out of date.
+cmake_force:
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake
+
+# The command to remove a file.
+RM = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The program to use to edit the cache.
+CMAKE_EDIT_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target edit_cache
+edit_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+.PHONY : edit_cache/fast
+
+# Special rule for the target install
+install: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install
+
+# Special rule for the target install
+install/fast: preinstall/fast
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install/fast
+
+# Special rule for the target install/local
+install/local: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local
+
+# Special rule for the target install/local
+install/local/fast: install/local
+.PHONY : install/local/fast
+
+# Special rule for the target install/strip
+install/strip: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip
+
+# Special rule for the target install/strip
+install/strip/fast: install/strip
+.PHONY : install/strip/fast
+
+# Special rule for the target list_install_components
+list_install_components:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
+.PHONY : list_install_components
+
+# Special rule for the target list_install_components
+list_install_components/fast: list_install_components
+.PHONY : list_install_components/fast
+
+# Special rule for the target package
+package: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackConfig.cmake
+.PHONY : package
+
+# Special rule for the target package
+package/fast: package
+.PHONY : package/fast
+
+# Special rule for the target package_source
+package_source:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool for source..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackSourceConfig.cmake /data/TeamCity/buildAgent/work/779d99b0241b2175/CPackSourceConfig.cmake
+.PHONY : package_source
+
+# Special rule for the target package_source
+package_source/fast: package_source
+.PHONY : package_source/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+.PHONY : rebuild_cache/fast
+
+# The main all target
+all: cmake_check_build_system
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles /data/TeamCity/buildAgent/work/779d99b0241b2175/ext/CMakeFiles/progress.marks
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 ext/all
+	$(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 ext/clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 ext/preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 ext/preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+.PHONY : depend
+
+# Convenience name for target.
+ext/CMakeFiles/ProteoWizard.dir/rule:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 ext/CMakeFiles/ProteoWizard.dir/rule
+.PHONY : ext/CMakeFiles/ProteoWizard.dir/rule
+
+# Convenience name for target.
+ProteoWizard: ext/CMakeFiles/ProteoWizard.dir/rule
+.PHONY : ProteoWizard
+
+# fast build rule for target.
+ProteoWizard/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f ext/CMakeFiles/ProteoWizard.dir/build.make ext/CMakeFiles/ProteoWizard.dir/build
+.PHONY : ProteoWizard/fast
+
+# Convenience name for target.
+ext/CMakeFiles/comet.dir/rule:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 ext/CMakeFiles/comet.dir/rule
+.PHONY : ext/CMakeFiles/comet.dir/rule
+
+# Convenience name for target.
+comet: ext/CMakeFiles/comet.dir/rule
+.PHONY : comet
+
+# fast build rule for target.
+comet/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f ext/CMakeFiles/comet.dir/build.make ext/CMakeFiles/comet.dir/build
+.PHONY : comet/fast
+
+# Convenience name for target.
+ext/CMakeFiles/gflags-2.1.2.dir/rule:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 ext/CMakeFiles/gflags-2.1.2.dir/rule
+.PHONY : ext/CMakeFiles/gflags-2.1.2.dir/rule
+
+# Convenience name for target.
+gflags-2.1.2: ext/CMakeFiles/gflags-2.1.2.dir/rule
+.PHONY : gflags-2.1.2
+
+# fast build rule for target.
+gflags-2.1.2/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f ext/CMakeFiles/gflags-2.1.2.dir/build.make ext/CMakeFiles/gflags-2.1.2.dir/build
+.PHONY : gflags-2.1.2/fast
+
+# Convenience name for target.
+ext/CMakeFiles/percolator.dir/rule:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 ext/CMakeFiles/percolator.dir/rule
+.PHONY : ext/CMakeFiles/percolator.dir/rule
+
+# Convenience name for target.
+percolator: ext/CMakeFiles/percolator.dir/rule
+.PHONY : percolator
+
+# fast build rule for target.
+percolator/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f ext/CMakeFiles/percolator.dir/build.make ext/CMakeFiles/percolator.dir/build
+.PHONY : percolator/fast
+
+# Convenience name for target.
+ext/CMakeFiles/protobuf-2.5.0.dir/rule:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 ext/CMakeFiles/protobuf-2.5.0.dir/rule
+.PHONY : ext/CMakeFiles/protobuf-2.5.0.dir/rule
+
+# Convenience name for target.
+protobuf-2.5.0: ext/CMakeFiles/protobuf-2.5.0.dir/rule
+.PHONY : protobuf-2.5.0
+
+# fast build rule for target.
+protobuf-2.5.0/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f ext/CMakeFiles/protobuf-2.5.0.dir/build.make ext/CMakeFiles/protobuf-2.5.0.dir/build
+.PHONY : protobuf-2.5.0/fast
+
+# Help Target
+help:
+	@echo "The following are some of the valid targets for this Makefile:"
+	@echo "... all (the default if no target is provided)"
+	@echo "... clean"
+	@echo "... depend"
+	@echo "... ProteoWizard"
+	@echo "... comet"
+	@echo "... edit_cache"
+	@echo "... gflags-2.1.2"
+	@echo "... install"
+	@echo "... install/local"
+	@echo "... install/strip"
+	@echo "... list_install_components"
+	@echo "... package"
+	@echo "... package_source"
+	@echo "... percolator"
+	@echo "... protobuf-2.5.0"
+	@echo "... rebuild_cache"
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/ext/build-comet.cmake b/ext/build-comet.cmake
new file mode 100644
index 0000000..0b0ed78
--- /dev/null
+++ b/ext/build-comet.cmake
@@ -0,0 +1,10 @@
+message(LIB="$ENV{LIB}")
+message(LIBPATH="$ENV{LIBPATH}")
+message(MSBUILD_ARGS=${MSBUILD_ARGS})
+message(PROJ_FILE=${PROJ_FILE})
+set(ENV{LIBPATH} "$ENV{LIBPATH};${LIBPATH}")
+set(ENV{LIB} "$ENV{LIB};${LIBPATH}")
+message(LIB="$ENV{LIB}")
+message(LIBPATH="$ENV{LIBPATH}")
+message(MSBUILD_PLATFORM="${MSBUILD_PLATFORM}")
+execute_process(COMMAND msbuild /p:platform=${MSBUILD_PLATFORM} /p:useenv=true ${MSBUILD_ARGS} ${PROJ_FILE})
diff --git a/ext/build_pwiz.cmake b/ext/build_pwiz.cmake
new file mode 100644
index 0000000..c8e077e
--- /dev/null
+++ b/ext/build_pwiz.cmake
@@ -0,0 +1,77 @@
+# This is a CMake script for building ProteoWizard.
+# We construct the command line for building ProteoWizard 
+# based upond the platform (UNIX or Windows) and the build
+# type (Release or Debug)
+
+# This script expects two variables to be passed on the command line:
+#   BUILD_TYPE, the building configuration: Release or Debug
+#   PREFIX, the location to store binaries from the build.
+#   WORKING_DIR, the location where the expanded source files can be found
+
+# This macro checks download status codes for errors
+macro (check_status status_code)
+  if (${status_code} EQUAL 0)
+    message(STATUS "Built ProteoWizard.")
+  else ()
+    message(
+      FATAL_ERROR 
+      "ProteoWizard build failed"
+    )
+  endif (${status_code} EQUAL 0)
+endmacro (check_status)
+
+# Set up arguments needed for ProteoWizard build.
+# quickbuild.sh is the script provided by ProteoWizard on UNIX
+# and quickbuild.bat is the corresponding script on Windows
+set(pwiz_build_args ${pwiz_build_args} --prefix=${PREFIX})
+
+# Get number of processors
+if (EXISTS "/proc/cpuinfo")
+  file(STRINGS "/proc/cpuinfo" procs REGEX "^processor.: [0-9]+$")
+  list(LENGTH procs PROCESSOR_COUNT)
+elseif (APPLE)
+  find_program(cmd_sys_pro "sysctl")
+  if (cmd_sys_pro)
+    execute_process(COMMAND ${cmd_sys_pro} -n hw.ncpu OUTPUT_VARIABLE info)
+    set(PROCESSOR_COUNT "${info}")
+  endif()
+elseif (WIN32)
+  set(PROCESSOR_COUNT "$ENV{NUMBER_OF_PROCESSORS}")
+endif()
+if (PROCESSOR_COUNT)
+  message("ProteoWizard build will use ${PROCESSOR_COUNT} threads")
+  set(pwiz_build_args ${pwiz_build_args} -j${PROCESSOR_COUNT})
+endif()
+
+if (WIN32 AND NOT CYGWIN)
+  set(pwiz_build "pwiz_tools\\build-apps.bat")
+  if (MSBUILD_PLATFORM STREQUAL "x64")
+    set(pwiz_build_args ${pwiz_build_args} 64)
+  elseif (MSBUILD_PLATFORM STREQUAL "Win32")
+    set(pwiz_build_args ${pwiz_build_args} 32)
+  else (MSBUILD_PLATFORM STREQUAL "Win32")
+    message(FATAL_ERROR "${MSBUILD_PLATFORM}: Windows build architecture unknown.")
+  endif (MSBUILD_PLATFORM STREQUAL "x64")
+  set(pwiz_build_args ${pwiz_build_args} --layout=versioned)
+  set(pwiz_build_args ${pwiz_build_args} --link=static)
+  set(pwiz_build_args ${pwiz_build_args} toolset=msvc-12.0)
+  set(pwiz_build_args ${pwiz_build_args} --i-agree-to-the-vendor-licenses)
+  set(pwiz_build_args ${pwiz_build_args} --without-mz5)
+else()
+  set(pwiz_build ./quickbuild.sh)
+  set(pwiz_build_args ${pwiz_build_args} --without-binary-msdata)
+  set(pwiz_build_args ${pwiz_build_args} --layout=system)
+  set(pwiz_build_args ${pwiz_build_args} runtime-link=shared)
+endif (WIN32 AND NOT CYGWIN)
+
+if (${BUILD_TYPE} MATCHES "Debug")
+  set(pwiz_build_args ${pwiz_build_args} variant=debug)
+endif (${BUILD_TYPE} MATCHES "Debug")
+
+set(pwiz_build_args ${pwiz_build_args} libraries)
+
+execute_process(
+  COMMAND ${pwiz_build} ${pwiz_build_args}
+  RESULT_VARIABLE status
+)
+check_status(status)
diff --git a/ext/cmake_install.cmake b/ext/cmake_install.cmake
new file mode 100644
index 0000000..2ad1b4d
--- /dev/null
+++ b/ext/cmake_install.cmake
@@ -0,0 +1,34 @@
+# Install script for directory: /data/TeamCity/buildAgent/work/779d99b0241b2175/ext
+
+# Set the install prefix
+IF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+  SET(CMAKE_INSTALL_PREFIX "/data/TeamCity/buildAgent/work/779d99b0241b2175/ext")
+ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+  IF(BUILD_TYPE)
+    STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+  ELSE(BUILD_TYPE)
+    SET(CMAKE_INSTALL_CONFIG_NAME "Release")
+  ENDIF(BUILD_TYPE)
+  MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+
+# Set the component getting installed.
+IF(NOT CMAKE_INSTALL_COMPONENT)
+  IF(COMPONENT)
+    MESSAGE(STATUS "Install component: \"${COMPONENT}\"")
+    SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+  ELSE(COMPONENT)
+    SET(CMAKE_INSTALL_COMPONENT)
+  ENDIF(COMPONENT)
+ENDIF(NOT CMAKE_INSTALL_COMPONENT)
+
+# Install shared libraries without execute permission?
+IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+  SET(CMAKE_INSTALL_SO_NO_EXE "0")
+ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+
diff --git a/ext/create_links.sh b/ext/create_links.sh
new file mode 100755
index 0000000..b0c509a
--- /dev/null
+++ b/ext/create_links.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+#
+# script for creating symbolic links to the boost libraries (for LINUX)
+#
+
+echo "CREATING GENERICALLY NAMED SYMBOLIC LINKS TO LIBRARIES"
+
+install_path=.
+for arg in $*; do
+    echo "arg:$arg"
+    if [[ $arg = --prefix=* ]]; then
+        echo "parsing $arg"
+        install_path=`echo "$arg" | cut -d"=" -f2`
+    fi
+
+done
+
+echo "path:$install_path"
+
+
+
+cd $install_path/lib
+
+ln -s -f libboost_chrono*-mt.a libboost_chrono.a
+ln -s -f libboost_date_time-*-mt.a libboost_date_time-mt-s.a
+ln -s -f libboost_date_time-*-mt.a libboost_date_time.a
+ln -s -f libboost_iostreams-*-mt.a libboost_iostreams-mt-s.a 
+ln -s -f libboost_iostreams-*-mt.a libboost_iostreams.a 
+ln -s -f libboost_serialization-*-mt.a libboost_serialization-mt-s.a
+ln -s -f libboost_serialization-*-mt.a libboost_serialization.a
+ln -s -f libboost_thread-*-mt.a libboost_thread-mt-s.a 
+ln -s -f libboost_thread-*-mt.a libboost_thread.a 
+ln -s -f libgd-*-mt-2_1.a libgd-mt-s-2_1.a   
+ln -s -f libgd-*-mt-2_1.a libgd.a   
+[ -f libzlib.a ] &&
+  { ln -s -f libzlib.a libz-mt-s-1_2.a; ln -s -f libzlib.a libz.a; } ||
+  { ln -s -f libz-*-mt-1_2.a libz-mt-s-1_2.a; ln -s -f libz-*-mt-1_2.a libz.a; }
+ln -s -f libboost_filesystem-*-mt.a libboost_filesystem-mt-s.a 
+ln -s -f libboost_filesystem-*-mt.a libboost_filesystem.a 
+ln -s -f libboost_system-*-mt.a libboost_system-mt-s.a 
+ln -s -f libboost_system-*-mt.a libboost_system.a 
+ln -s -f libfreetype-*-mt-2_4.a  libfreetype-mt-s-2_4.a
+ln -s -f libfreetype-*-mt-2_4.a  libfreetype.a
+
diff --git a/ext/download-pwiz-tarball.sh b/ext/download-pwiz-tarball.sh
new file mode 100755
index 0000000..a55054a
--- /dev/null
+++ b/ext/download-pwiz-tarball.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+# This script downloads the source tarball for the most recent successful build of
+# ProteoWizard including dependencies (build type = bt81)
+
+set -e
+set -o pipefail
+
+build_id=$(wget --no-check-certificate -q -O -\
+  https://teamcity.labkey.org:/app/rest/buildTypes/id:bt81/builds\?status=SUCCESS\&count=1\&guest=1)
+build_id=$(echo $build_id| sed 's/^.*build id=.\([0-9]*\).*/\1/')
+echo "build_id=" $build_id
+version=$(wget --no-check-certificate -q -O -\
+  https://teamcity.labkey.org/repository/download/bt81/$build_id:id/VERSION?guest=1)
+version=$(echo $version|sed 's/\./_/g')
+echo "version = " $version
+wget --no-check-certificate \
+  https://teamcity.labkey.org:/guestAuth/repository/download/bt81/.lastSuccessful/pwiz-src-$version.tar.bz2
diff --git a/ext/download_gflags.cmake b/ext/download_gflags.cmake
new file mode 100644
index 0000000..334682b
--- /dev/null
+++ b/ext/download_gflags.cmake
@@ -0,0 +1,66 @@
+# This is a CMake script for downloading the partial source distribution of 
+# Google gflags from its GitHub repository.
+#
+# We have to use 'wget' for downloading because the GitHub site uses
+# HTTPS rather than HTTP. HTTPS is not directly supported by the standard 
+# build of CMake.
+#
+# This script expects two variables to be passed on the command line:
+#   DOWNLOAD_DIR, the location to store the downloaded tar ball.
+#   WORKING_DIR, the location where the expanded source files
+
+# This macro checks download status codes for errors
+macro (check_status download_name status_code error_message)
+  if (${status_code} EQUAL 0)
+    message(STATUS "Downloaded ${download_name}.")
+  else (${status_code} EQUAL 0)
+    message(
+      FATAL_ERROR 
+      "Unable to download ${download_name} "
+      "\nError message: ${error_message}." 
+      "\nDownload of Google gflags failed."
+    )
+  endif (${status_code} EQUAL 0)
+endmacro (check_status)
+
+# 'wget' has to be available
+find_program(wget "wget")
+if (${wget} STREQUAL "wget-NOTFOUND")
+  message(
+    FATAL_ERROR
+    "The program 'wget' was not found.\n"
+    "'wget' is required in order to download Google gflags."
+  )
+endif (${wget} STREQUAL "wget-NOTFOUND")
+# 'tar' has to be available
+find_program(tar "tar")
+if (${tar} STREQUAL "tar-NOTFOUND")
+  message(
+    FATAL_ERROR
+    "The program 'tar' was not found.\n"
+    "'tar' is required in order to download Google gflags."
+  )
+endif (${tar} STREQUAL "tar-NOTFOUND")
+
+set(download_url "https://codeload.github.com/gflags/gflags/tar.gz/v2.1.2")
+set(filename "gflags-2.1.2.tar.gz")
+execute_process(
+  COMMAND ${wget} --no-check-certificate -nv -O ${DOWNLOAD_DIR}/${filename} "${download_url}"
+  RESULT_VARIABLE status
+  ERROR_VARIABLE error_message
+  OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+check_status("Google gflags distribution" status ${error_message})
+
+# Expand the tar file into the working directory
+#  COMMAND ${tar} --strip-components=1 -xf ${DOWNLOAD_DIR}/${filename} 
+execute_process(
+  COMMAND ${CMAKE_COMMAND} -E tar xf ${DOWNLOAD_DIR}/${filename}
+  RESULT_VARIABLE status
+  WORKING_DIRECTORY ${WORKING_DIR}
+)
+if (${status} EQUAL 0)
+  message(STATUS "Generated Google gflags source files.")
+else (${status} EQUAL 0)
+  message(FATAL_ERROR "Unable to generate Google gflags source files.")
+endif (${status} EQUAL 0)
diff --git a/ext/download_pbuffers.cmake b/ext/download_pbuffers.cmake
new file mode 100644
index 0000000..6d14ce9
--- /dev/null
+++ b/ext/download_pbuffers.cmake
@@ -0,0 +1,65 @@
+# This is a CMake script for downloading the partial source distribution of 
+# Google Protocol Buffers from its GitHub repository.
+#
+# We have to use 'wget' for downloading because the GitHub site uses
+# HTTPS rather than HTTP. HTTPS is not directly supported by the standard 
+# build of CMake.
+#
+# This script expects two variables to be passed on the command line:
+#   DOWNLOAD_DIR, the location to store the downloaded tar ball.
+#   WORKING_DIR, the location where the expanded source files
+
+# This macro checks download status codes for errors
+macro (check_status download_name status_code error_message)
+  if (${status_code} EQUAL 0)
+    message(STATUS "Downloaded ${download_name}.")
+  else (${status_code} EQUAL 0)
+    message(
+      FATAL_ERROR 
+      "Unable to download ${download_name} "
+      "\nError message: ${error_message}." 
+      "\nDownload of Google Protocol Buffers failed."
+    )
+  endif (${status_code} EQUAL 0)
+endmacro (check_status)
+
+# 'wget' has to be available
+find_program(wget "wget")
+if (${wget} STREQUAL "wget-NOTFOUND")
+  message(
+    FATAL_ERROR
+    "The program 'wget' was not found.\n"
+    "'wget' is required in order to download Google Protocol Buffers."
+  )
+endif (${wget} STREQUAL "wget-NOTFOUND")
+# 'tar' has to be available
+find_program(tar "tar")
+if (${tar} STREQUAL "tar-NOTFOUND")
+  message(
+    FATAL_ERROR
+    "The program 'tar' was not found.\n"
+    "'tar' is required in order to download Google Protocol Buffers."
+  )
+endif (${tar} STREQUAL "tar-NOTFOUND")
+
+set(download_url "https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.bz2")
+set(filename "protobuf-2.5.0.tar.bz2")
+execute_process(
+  COMMAND ${wget} --no-check-certificate -nv -O ${DOWNLOAD_DIR}/${filename} "${download_url}"
+  RESULT_VARIABLE status
+  ERROR_VARIABLE error_message
+  OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+check_status("Google Protocol Buffers distribution" status ${error_message})
+
+# Expand the tar file into the working directory
+execute_process(
+  COMMAND ${CMAKE_COMMAND} -E tar xf ${DOWNLOAD_DIR}/${filename}
+  RESULT_VARIABLE status
+  WORKING_DIRECTORY ${WORKING_DIR}
+)
+if (${status} EQUAL 0)
+  message(STATUS "Generated Google Protocol Buffers source files.")
+else (${status} EQUAL 0)
+  message(FATAL_ERROR "Unable to generate Google Protocol Buffers source files.")
+endif (${status} EQUAL 0)
diff --git a/ext/download_pwiz.cmake b/ext/download_pwiz.cmake
new file mode 100644
index 0000000..907c4ab
--- /dev/null
+++ b/ext/download_pwiz.cmake
@@ -0,0 +1,103 @@
+# This is a CMake script for downloading the partial source distribution of 
+# Proteowizard from its Team City repository.
+#
+# We have to use 'wget' for downloading because the Proteowizard site uses
+# HTTPS rather than HTTP. HTTPS is not directly supported by the standard 
+# build of CMake.
+#
+# To get the URL for the distribution tarball we have to find the build id, 
+# then use the build id to look up the Proteowizard version number.
+# Once we have the version number we can build the URL for downloading the distribution.
+
+# This script expects two variables to be passed on the command line:
+#   DOWNLOAD_DIR, the location to store the downloaded tar ball.
+#   WORKING_DIR, the location where the expanded source files
+
+# This macro checks download status codes for errors
+macro (check_status download_name status_code error_message)
+  if (${status_code} EQUAL 0)
+    message(STATUS "Downloaded ${download_name}.")
+  else (${status_code} EQUAL 0)
+    message(
+      FATAL_ERROR 
+      "Unable to download ${download_name} "
+      "\nError message: ${error_message}." 
+      "\nDownload of Proteowizard failed."
+    )
+  endif (${status_code} EQUAL 0)
+endmacro (check_status)
+
+# 'wget' has to be available
+find_program(wget "wget")
+if (${wget} STREQUAL "wget-NOTFOUND")
+  message(
+    FATAL_ERROR
+    "The program 'wget' was not found.\n"
+    "'wget' is required in order to download ProteoWizard."
+  )
+endif (${wget} STREQUAL "wget-NOTFOUND")
+
+# Team City performs several different builds. We want the one
+# for Pwiz source without Skyline but with vendor library suppport.
+set(build_type "bt81")
+
+set(
+  build_info_url 
+  https://teamcity.labkey.org:/app/rest/buildTypes/id:${build_type}/builds?status=SUCCESS&count=1&guest=1
+)
+execute_process(
+  COMMAND ${wget} --no-check-certificate -nv -O build.info.txt "${build_info_url}"
+  RESULT_VARIABLE status
+  OUTPUT_VARIABLE build_info 
+  ERROR_VARIABLE error_message
+  OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+check_status("build info" status ${error_message})
+file (STRINGS "build.info.txt" build_info)
+
+# Using the build id download the version string
+string(REGEX REPLACE "^.*build id=\"([0-9]+)\".*$" "\\1" build_id "${build_info}")
+set(
+  build_info_url https://teamcity.labkey.org/repository/download/${build_type}/${build_id}:id/VERSION?guest=1
+)
+execute_process(
+  COMMAND ${wget} --no-check-certificate -nv -O version.info.txt "${build_info_url}"
+  RESULT_VARIABLE status
+  OUTPUT_VARIABLE version_info 
+  ERROR_VARIABLE error_message
+  OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+check_status("version string" status ${error_message})
+file (STRINGS "version.info.txt" version_info)
+
+# Use the version string to build the URL
+set(
+  base_download_url
+  "https://teamcity.labkey.org:/guestAuth/repository/download/${build_type}/.lastSuccessful/"
+)
+string(REGEX REPLACE "^([0-9]+) ([0-9]+) ([0-9]+).*$" "\\1_\\2_\\3" version_id "${version_info}")
+set(filename pwiz-src-${version_id}.tar.bz2)
+set(
+  download_url 
+  "${base_download_url}${filename}"
+)
+# Using the version string download the file
+execute_process(
+  COMMAND ${wget} --no-check-certificate -nv -O ${DOWNLOAD_DIR}/${filename} "${download_url}"
+  RESULT_VARIABLE status
+  ERROR_VARIABLE error_message
+  OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+check_status("Proteowizard distribution" status ${error_message})
+
+# Expand the tar file into the working directory
+execute_process(
+  COMMAND ${CMAKE_COMMAND} -E tar xf ${DOWNLOAD_DIR}/${filename}
+  RESULT_VARIABLE status
+  WORKING_DIRECTORY ${WORKING_DIR}
+)
+if (${status} EQUAL 0)
+  message(STATUS "Generated ProteoWizard source files.")
+else (${status} EQUAL 0)
+  message(FATAL_ERROR "Unable to generate ProteoWizard source files.")
+endif (${status} EQUAL 0)
diff --git a/ext/fdstream.hpp b/ext/fdstream.hpp
new file mode 100644
index 0000000..585e03d
--- /dev/null
+++ b/ext/fdstream.hpp
@@ -0,0 +1,184 @@
+/* The following code declares classes to read from and write to
+ * file descriptore or file handles.
+ *
+ * See
+ *      http://www.josuttis.com/cppcode
+ * for details and the latest version.
+ *
+ * - open:
+ *      - integrating BUFSIZ on some systems?
+ *      - optimized reading of multiple characters
+ *      - stream for reading AND writing
+ *      - i18n
+ *
+ * (C) Copyright Nicolai M. Josuttis 2001.
+ * Permission to copy, use, modify, sell and distribute this software
+ * is granted provided this copyright notice appears in all copies.
+ * This software is provided "as is" without express or implied
+ * warranty, and with no claim as to its suitability for any purpose.
+ *
+ * Version: Jul 28, 2002
+ * History:
+ *  Jul 28, 2002: bugfix memcpy() => memmove()
+ *                fdinbuf::underflow(): cast for return statements
+ *  Aug 05, 2001: first public version
+ */
+#ifndef BOOST_FDSTREAM_HPP
+#define BOOST_FDSTREAM_HPP
+
+#include <istream>
+#include <ostream>
+#include <streambuf>
+// for EOF:
+#include <cstdio>
+// for memmove():
+#include <cstring>
+
+
+// low-level read and write functions
+#ifdef _MSC_VER
+# include <io.h>
+#else
+# include <unistd.h>
+//extern "C" {
+//    int write (int fd, const char* buf, int num);
+//    int read (int fd, char* buf, int num);
+//}
+#endif
+
+
+// BEGIN namespace BOOST
+namespace boost {
+
+
+/************************************************************
+ * fdostream
+ * - a stream that writes on a file descriptor
+ ************************************************************/
+
+
+class fdoutbuf : public std::streambuf {
+  protected:
+    int fd;    // file descriptor
+  public:
+    // constructor
+    fdoutbuf (int _fd) : fd(_fd) {
+    }
+  protected:
+    // write one character
+    virtual int_type overflow (int_type c) {
+        if (c != EOF) {
+            char z = c;
+            if (write (fd, &z, 1) != 1) {
+                return EOF;
+            }
+        }
+        return c;
+    }
+    // write multiple characters
+    virtual
+    std::streamsize xsputn (const char* s,
+                            std::streamsize num) {
+        return write(fd,s,num);
+    }
+};
+
+class fdostream : public std::ostream {
+  protected:
+    fdoutbuf buf;
+  public:
+    fdostream (int fd) : std::ostream(0), buf(fd) {
+        rdbuf(&buf);
+    }
+};
+
+
+/************************************************************
+ * fdistream
+ * - a stream that reads on a file descriptor
+ ************************************************************/
+
+class fdinbuf : public std::streambuf {
+  protected:
+    int fd;    // file descriptor
+  protected:
+    /* data buffer:
+     * - at most, pbSize characters in putback area plus
+     * - at most, bufSize characters in ordinary read buffer
+     */
+    static const int pbSize = 4;        // size of putback area
+    static const int bufSize = 1024;    // size of the data buffer
+    char buffer[bufSize+pbSize];        // data buffer
+
+  public:
+    /* constructor
+     * - initialize file descriptor
+     * - initialize empty data buffer
+     * - no putback area
+     * => force underflow()
+     */
+    fdinbuf (int _fd) : fd(_fd) {
+        setg (buffer+pbSize,     // beginning of putback area
+              buffer+pbSize,     // read position
+              buffer+pbSize);    // end position
+    }
+
+  protected:
+    // insert new characters into the buffer
+    virtual int_type underflow () {
+#ifndef _MSC_VER
+        using std::memmove;
+#endif
+
+        // is read position before end of buffer?
+        if (gptr() < egptr()) {
+            return traits_type::to_int_type(*gptr());
+        }
+
+        /* process size of putback area
+         * - use number of characters read
+         * - but at most size of putback area
+         */
+        int numPutback;
+        numPutback = gptr() - eback();
+        if (numPutback > pbSize) {
+            numPutback = pbSize;
+        }
+
+        /* copy up to pbSize characters previously read into
+         * the putback area
+         */
+        memmove (buffer+(pbSize-numPutback), gptr()-numPutback,
+                numPutback);
+
+        // read at most bufSize new characters
+        int num;
+        num = read (fd, buffer+pbSize, bufSize);
+        if (num <= 0) {
+            // ERROR or EOF
+            return EOF;
+        }
+
+        // reset buffer pointers
+        setg (buffer+(pbSize-numPutback),   // beginning of putback area
+              buffer+pbSize,                // read position
+              buffer+pbSize+num);           // end of buffer
+
+        // return next character
+        return traits_type::to_int_type(*gptr());
+    }
+};
+
+class fdistream : public std::istream {
+  protected:
+    fdinbuf buf;
+  public:
+    fdistream (int fd) : std::istream(0), buf(fd) {
+        rdbuf(&buf);
+    }
+};
+
+
+} // END namespace boost
+
+#endif /*BOOST_FDSTREAM_HPP*/
diff --git a/ext/patch-comet.cmake b/ext/patch-comet.cmake
new file mode 100644
index 0000000..ec63c0c
--- /dev/null
+++ b/ext/patch-comet.cmake
@@ -0,0 +1,73 @@
+# This is a CMake script for patching Comet on Windows for use in the Crux
+# build.
+
+# This script expects two variables to be passed on the command line:
+#   SOURCE_DIR, the path to the directory containing the patch source.
+#   BINARY_DIR, the path to the directory containing the patch destination.
+
+# This macro checks download status codes for errors
+macro (check_status status_code)
+  if (${status_code} EQUAL 0)
+    message(STATUS "Patched Comet.")
+  else ()
+    message(
+      FATAL_ERROR 
+      "Comet patch failed"
+    )
+  endif (${status_code} EQUAL 0)
+endmacro (check_status)
+
+# This macro checks download status codes for errors
+if (WIN32 AND NOT CYGWIN)
+    message(${SOURCE_DIR}/patches/comet/Comet.sln)
+    message(${BINARY_DIR}/build/src/comet/Comet.sln)
+    execute_process(
+      COMMAND ${CMAKE_COMMAND} -E copy 
+        ${SOURCE_DIR}/patches/comet/Comet.sln
+        ${BINARY_DIR}/build/src/comet/Comet.sln
+        RESULT_VARIABLE status
+    )
+    message(${SOURCE_DIR}/patches/comet/Comet.vcxproj)
+    message(${BINARY_DIR}/build/src/comet/Comet.vcxproj)
+    execute_process(
+      COMMAND ${CMAKE_COMMAND} -E copy 
+        ${SOURCE_DIR}/patches/comet/Comet.vcxproj
+        ${BINARY_DIR}/build/src/comet/Comet.vcxproj
+        RESULT_VARIABLE status
+    )
+    message(${SOURCE_DIR}/patches/comet/CometSearch/CometSearch.vcxproj)
+    message(${BINARY_DIR}/build/src/comet/CometSearch/CometSearch.vcxproj)
+    execute_process(
+      COMMAND ${CMAKE_COMMAND} -E copy 
+        ${SOURCE_DIR}/patches/comet/CometSearch/CometSearch.vcxproj
+        ${BINARY_DIR}/build/src/comet/CometSearch/CometSearch.vcxproj
+        RESULT_VARIABLE status
+    )
+    message(${SOURCE_DIR}/patches/comet/MSToolkit/MSToolkitLite.vcxproj)
+    message(${BINARY_DIR}/build/src/comet/MSToolkit/MSToolkitLite.vcxproj)
+    execute_process(
+      COMMAND ${CMAKE_COMMAND} -E copy 
+        ${SOURCE_DIR}/patches/comet/MSToolkit/MSToolkitLite.vcxproj
+        ${BINARY_DIR}/build/src/comet/MSToolkit/MSToolkitLite.vcxproj
+        RESULT_VARIABLE status
+    )
+    check_status(status)
+    message(${SOURCE_DIR}/patches/comet/MSToolkit/RAWReader.cpp)
+    message(${BINARY_DIR}/build/src/comet/MSToolkit/src/MSToolkit/RAWReader.cpp)
+    execute_process(
+      COMMAND ${CMAKE_COMMAND} -E copy 
+        ${SOURCE_DIR}/patches/comet/MSToolkit/RAWReader.cpp
+        ${BINARY_DIR}/build/src/comet/MSToolkit/src/MSToolkit/RAWReader.cpp
+        RESULT_VARIABLE status
+    )
+    check_status(status)
+    message(${SOURCE_DIR}/patches/comet/CometSearch/CometSearchManager.cpp)
+    message(${BINARY_DIR}/build/src/comet/CometSearch/CometSearchManager.cpp)
+    execute_process(
+      COMMAND ${CMAKE_COMMAND} -E copy 
+        ${SOURCE_DIR}/patches/comet/CometSearch/CometSearchManager.cpp
+        ${BINARY_DIR}/build/src/comet/CometSearch/CometSearchManager.cpp
+        RESULT_VARIABLE status
+    )
+    check_status(status)
+endif (WIN32 AND NOT CYGWIN)
diff --git a/ext/patches/XSD/mac_xdr_fix/xdr-stream-extraction.hxx b/ext/patches/XSD/mac_xdr_fix/xdr-stream-extraction.hxx
new file mode 100644
index 0000000..0e4b8f7
--- /dev/null
+++ b/ext/patches/XSD/mac_xdr_fix/xdr-stream-extraction.hxx
@@ -0,0 +1,308 @@
+// file      : xsd/cxx/tree/xdr-stream-extraction.hxx
+// author    : Boris Kolpackov <boris at codesynthesis.com>
+// copyright : Copyright (c) 2005-2011 Code Synthesis Tools CC
+// license   : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_CXX_TREE_XDR_STREAM_EXTRACTION_HXX
+#define XSD_CXX_TREE_XDR_STREAM_EXTRACTION_HXX
+
+#include <rpc/types.h>
+#include <rpc/xdr.h>
+
+// Of course BSD has to be different and name its functions u_intXX
+// instead of uintXX. Plus it does not have XX == 8.
+//
+#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__)
+#  if !defined(XSD_CXX_TREE_ASSUME_SUN_XDR) && !defined(xdr_int8_t)
+#    define xdr_int8_t(x, y) xdr_char(x, reinterpret_cast<char*> (y))
+#    define xdr_uint8_t(x, y) xdr_u_char(x, reinterpret_cast<unsigned char*> (y))
+#    define xdr_uint16_t xdr_u_int16_t
+#    define xdr_uint32_t xdr_u_int32_t
+#    define xdr_uint64_t xdr_u_int64_t
+#  endif
+#endif
+
+#include <string>
+
+#include <xsd/cxx/tree/buffer.hxx>
+#include <xsd/cxx/tree/istream.hxx>
+#include <xsd/cxx/tree/xdr-stream-common.hxx>
+
+namespace xsd
+{
+  namespace cxx
+  {
+    namespace tree
+    {
+      struct xdr_stream_extraction: xdr_stream_operation
+      {
+        virtual const char*
+        what () const throw ()
+        {
+          return "XDR stream extraction operation failed";
+        }
+      };
+
+
+      // as_size
+      //
+#ifdef XSD_CXX_TREE_USE_64_BIT_SIZE
+      template <typename T>
+      inline istream<XDR>&
+      operator>> (istream<XDR>& s, istream<XDR>::as_size<T>& x)
+      {
+        uint64_t v;
+
+        if (!xdr_uint64_t (&s.impl (), &v) || v > ~(T (0)))
+          throw xdr_stream_extraction ();
+
+        x.x_ = static_cast<T> (v);
+
+        return s;
+      }
+#else
+      template <typename T>
+      inline istream<XDR>&
+      operator>> (istream<XDR>& s, istream<XDR>::as_size<T>& x)
+      {
+        uint32_t v;
+
+        if (!xdr_uint32_t (&s.impl (), &v))
+          throw xdr_stream_extraction ();
+
+        x.x_ = static_cast<T> (v);
+
+        return s;
+      }
+#endif
+
+
+      // 8-bit
+      //
+      template <typename T>
+      inline istream<XDR>&
+      operator>> (istream<XDR>& s, istream<XDR>::as_int8<T>& x)
+      {
+        int8_t v;
+
+        if (!xdr_int8_t (&s.impl (), &v))
+          throw xdr_stream_extraction ();
+
+        x.x_ = static_cast<T> (v);
+
+        return s;
+      }
+
+      template <typename T>
+      inline istream<XDR>&
+      operator>> (istream<XDR>& s, istream<XDR>::as_uint8<T>& x)
+      {
+        uint8_t v;
+
+        if (!xdr_uint8_t (&s.impl (), &v))
+          throw xdr_stream_extraction ();
+
+        x.x_ = static_cast<T> (v);
+
+        return s;
+      }
+
+
+      // 16-bit
+      //
+      template <typename T>
+      inline istream<XDR>&
+      operator>> (istream<XDR>& s, istream<XDR>::as_int16<T>& x)
+      {
+        int16_t v;
+
+        if (!xdr_int16_t (&s.impl (), &v))
+          throw xdr_stream_extraction ();
+
+        x.x_ = static_cast<T> (v);
+
+        return s;
+      }
+
+      template <typename T>
+      inline istream<XDR>&
+      operator>> (istream<XDR>& s, istream<XDR>::as_uint16<T>& x)
+      {
+        uint16_t v;
+
+        if (!xdr_uint16_t (&s.impl (), &v))
+          throw xdr_stream_extraction ();
+
+        x.x_ = static_cast<T> (v);
+
+        return s;
+      }
+
+
+      // 32-bit
+      //
+      template <typename T>
+      inline istream<XDR>&
+      operator>> (istream<XDR>& s, istream<XDR>::as_int32<T>& x)
+      {
+        int32_t v;
+
+        if (!xdr_int32_t (&s.impl (), &v))
+          throw xdr_stream_extraction ();
+
+        x.x_ = static_cast<T> (v);
+
+        return s;
+      }
+
+      template <typename T>
+      inline istream<XDR>&
+      operator>> (istream<XDR>& s, istream<XDR>::as_uint32<T>& x)
+      {
+        uint32_t v;
+
+        if (!xdr_uint32_t (&s.impl (), &v))
+          throw xdr_stream_extraction ();
+
+        x.x_ = static_cast<T> (v);
+
+        return s;
+      }
+
+
+      // 64-bit
+      //
+      template <typename T>
+      inline istream<XDR>&
+      operator>> (istream<XDR>& s, istream<XDR>::as_int64<T>& x)
+      {
+        int64_t v;
+
+        if (!xdr_int64_t (&s.impl (), &v))
+          throw xdr_stream_extraction ();
+
+        x.x_ = static_cast<T> (v);
+
+        return s;
+      }
+
+      template <typename T>
+      inline istream<XDR>&
+      operator>> (istream<XDR>& s, istream<XDR>::as_uint64<T>& x)
+      {
+        uint64_t v;
+
+        if (!xdr_uint64_t (&s.impl (), &v))
+          throw xdr_stream_extraction ();
+
+        x.x_ = static_cast<T> (v);
+
+        return s;
+      }
+
+
+      // Boolean
+      //
+      template <typename T>
+      inline istream<XDR>&
+      operator>> (istream<XDR>& s, istream<XDR>::as_bool<T>& x)
+      {
+        bool_t v;
+
+        if (!xdr_bool (&s.impl (), &v))
+          throw xdr_stream_extraction ();
+
+        x.x_ = static_cast<T> (v);
+
+        return s;
+      }
+
+
+      // Floating-point
+      //
+      template <typename T>
+      inline istream<XDR>&
+      operator>> (istream<XDR>& s, istream<XDR>::as_float32<T>& x)
+      {
+        float v;
+
+        if (!xdr_float (&s.impl (), &v))
+          throw xdr_stream_extraction ();
+
+        x.x_ = static_cast<T> (v);
+
+        return s;
+      }
+
+      template <typename T>
+      inline istream<XDR>&
+      operator>> (istream<XDR>& s, istream<XDR>::as_float64<T>& x)
+      {
+        double v;
+
+        if (!xdr_double (&s.impl (), &v))
+          throw xdr_stream_extraction ();
+
+        x.x_ = static_cast<T> (v);
+
+        return s;
+      }
+
+      // Extraction of std::basic_string.
+      //
+
+      inline istream<XDR>&
+      operator>> (istream<XDR>& s, std::basic_string<char>& x)
+      {
+        unsigned int n;
+
+        if (!xdr_u_int (&s.impl (), &n))
+          throw xdr_stream_extraction ();
+
+        // Dangerous but fast.
+        //
+	x.clear ();
+
+	if (n != 0)
+	{
+          x.resize (n);
+          char* p (const_cast<char*> (x.c_str ()));
+
+          if (!xdr_opaque (&s.impl (), p, n))
+            throw xdr_stream_extraction ();
+	}
+
+        return s;
+      }
+
+      // Wide strings are not supported by XDR.
+      //
+      // inline istream<XDR>&
+      // operator>> (istream<XDR>& s, std::basic_string<wchar_t>& x)
+      // {
+      // }
+
+
+      // Extraction of a binary buffer.
+      //
+      template <typename C>
+      istream<XDR>&
+      operator>> (istream<XDR>& s, buffer<C>& x)
+      {
+        unsigned int n;
+
+        if (!xdr_u_int (&s.impl (), &n))
+          throw xdr_stream_extraction ();
+
+        x.size (n);
+
+        if (!xdr_opaque (&s.impl (), x.data (), n))
+          throw xdr_stream_extraction ();
+
+        return s;
+      }
+    }
+  }
+}
+
+#endif  // XSD_CXX_TREE_XDR_STREAM_EXTRACTION_HXX
diff --git a/ext/patches/XSD/mac_xdr_fix/xdr-stream-insertion.hxx b/ext/patches/XSD/mac_xdr_fix/xdr-stream-insertion.hxx
new file mode 100644
index 0000000..b81deb5
--- /dev/null
+++ b/ext/patches/XSD/mac_xdr_fix/xdr-stream-insertion.hxx
@@ -0,0 +1,277 @@
+// file      : xsd/cxx/tree/xdr-stream-insertion.hxx
+// author    : Boris Kolpackov <boris at codesynthesis.com>
+// copyright : Copyright (c) 2005-2011 Code Synthesis Tools CC
+// license   : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_CXX_TREE_XDR_STREAM_INSERTION_HXX
+#define XSD_CXX_TREE_XDR_STREAM_INSERTION_HXX
+
+#include <rpc/types.h>
+// In Cygwin these types seem not to have been defined.
+typedef	unsigned char		u_char;
+typedef	unsigned short	u_short;
+typedef	unsigned int		u_int;
+typedef	unsigned long		u_long;
+#include <rpc/xdr.h>
+
+// Of course BSD has to be different and name its functions u_intXX
+// instead of uintXX. Plus it does not have XX == 8.
+//
+#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__)
+#  if !defined(XSD_CXX_TREE_ASSUME_SUN_XDR) && !defined(xdr_int8_t)
+#    define xdr_int8_t(x, y) xdr_char(x, reinterpret_cast<char*> (y))
+#    define xdr_uint8_t(x, y) xdr_u_char(x, reinterpret_cast<unsigned char*> (y))
+#    define xdr_uint16_t xdr_u_int16_t
+#    define xdr_uint32_t xdr_u_int32_t
+#    define xdr_uint64_t xdr_u_int64_t
+#  endif
+#endif
+
+#include <string>
+
+#include <xsd/cxx/tree/buffer.hxx>
+#include <xsd/cxx/tree/ostream.hxx>
+#include <xsd/cxx/tree/xdr-stream-common.hxx>
+
+namespace xsd
+{
+  namespace cxx
+  {
+    namespace tree
+    {
+      struct xdr_stream_insertion: xdr_stream_operation
+      {
+        virtual const char*
+        what () const throw ()
+        {
+          return "XDR stream insertion operation failed";
+        }
+      };
+
+      // as_size
+      //
+#ifdef XSD_CXX_TREE_USE_64_BIT_SIZE
+      template <typename T>
+      inline ostream<XDR>&
+      operator<< (ostream<XDR>& s, ostream<XDR>::as_size<T> x)
+      {
+        uint64_t v (static_cast<uint64_t> (x.x_));
+
+        if (!xdr_uint64_t (&s.impl (), &v))
+          throw xdr_stream_insertion ();
+
+        return s;
+      }
+#else
+      template <typename T>
+      inline ostream<XDR>&
+      operator<< (ostream<XDR>& s, ostream<XDR>::as_size<T> x)
+      {
+        uint32_t v (static_cast<uint32_t> (x.x_));
+
+        if (x.x_ > ~(uint32_t (0)) || !xdr_uint32_t (&s.impl (), &v))
+          throw xdr_stream_insertion ();
+
+        return s;
+      }
+#endif
+
+
+      // 8-bit
+      //
+      template <typename T>
+      inline ostream<XDR>&
+      operator<< (ostream<XDR>& s, ostream<XDR>::as_int8<T> x)
+      {
+        int8_t v (static_cast<int8_t> (x.x_));
+
+        if (!xdr_int8_t (&s.impl (), &v))
+          throw xdr_stream_insertion ();
+
+        return s;
+      }
+
+      template <typename T>
+      inline ostream<XDR>&
+      operator<< (ostream<XDR>& s, ostream<XDR>::as_uint8<T> x)
+      {
+        uint8_t v (static_cast<uint8_t> (x.x_));
+
+        if (!xdr_uint8_t (&s.impl (), &v))
+          throw xdr_stream_insertion ();
+
+        return s;
+      }
+
+
+      // 16-bit
+      //
+      template <typename T>
+      inline ostream<XDR>&
+      operator<< (ostream<XDR>& s, ostream<XDR>::as_int16<T> x)
+      {
+        int16_t v (static_cast<int16_t> (x.x_));
+
+        if (!xdr_int16_t (&s.impl (), &v))
+          throw xdr_stream_insertion ();
+
+        return s;
+      }
+
+      template <typename T>
+      inline ostream<XDR>&
+      operator<< (ostream<XDR>& s, ostream<XDR>::as_uint16<T> x)
+      {
+        uint16_t v (static_cast<uint16_t> (x.x_));
+
+        if (!xdr_uint16_t (&s.impl (), &v))
+          throw xdr_stream_insertion ();
+
+        return s;
+      }
+
+
+      // 32-bit
+      //
+      template <typename T>
+      inline ostream<XDR>&
+      operator<< (ostream<XDR>& s, ostream<XDR>::as_int32<T> x)
+      {
+        int32_t v (static_cast<int32_t> (x.x_));
+
+        if (!xdr_int32_t (&s.impl (), &v))
+          throw xdr_stream_insertion ();
+
+        return s;
+      }
+
+      template <typename T>
+      inline ostream<XDR>&
+      operator<< (ostream<XDR>& s, ostream<XDR>::as_uint32<T> x)
+      {
+        uint32_t v (static_cast<uint32_t> (x.x_));
+
+        if (!xdr_uint32_t (&s.impl (), &v))
+          throw xdr_stream_insertion ();
+
+        return s;
+      }
+
+
+      // 64-bit
+      //
+      template <typename T>
+      inline ostream<XDR>&
+      operator<< (ostream<XDR>& s, ostream<XDR>::as_int64<T> x)
+      {
+        int64_t v (static_cast<int64_t> (x.x_));
+
+        if (!xdr_int64_t (&s.impl (), &v))
+          throw xdr_stream_insertion ();
+
+        return s;
+      }
+
+      template <typename T>
+      inline ostream<XDR>&
+      operator<< (ostream<XDR>& s, ostream<XDR>::as_uint64<T> x)
+      {
+        uint64_t v (static_cast<uint64_t> (x.x_));
+
+        if (!xdr_uint64_t (&s.impl (), &v))
+          throw xdr_stream_insertion ();
+
+        return s;
+      }
+
+
+      // Boolean
+      //
+      template <typename T>
+      inline ostream<XDR>&
+      operator<< (ostream<XDR>& s, ostream<XDR>::as_bool<T> x)
+      {
+        bool_t v (static_cast<bool_t> (x.x_));
+
+        if (!xdr_bool (&s.impl (), &v))
+          throw xdr_stream_insertion ();
+
+        return s;
+      }
+
+
+      // Floating-point
+      //
+      template <typename T>
+      inline ostream<XDR>&
+      operator<< (ostream<XDR>& s, ostream<XDR>::as_float32<T> x)
+      {
+        float v (static_cast<float> (x.x_));
+
+        if (!xdr_float (&s.impl (), &v))
+          throw xdr_stream_insertion ();
+
+        return s;
+      }
+
+      template <typename T>
+      inline ostream<XDR>&
+      operator<< (ostream<XDR>& s, ostream<XDR>::as_float64<T> x)
+      {
+        double v (static_cast<double> (x.x_));
+
+        if (!xdr_double (&s.impl (), &v))
+          throw xdr_stream_insertion ();
+
+        return s;
+      }
+
+      // Insertion of std::basic_string.
+      //
+
+      inline ostream<XDR>&
+      operator<< (ostream<XDR>& s, const std::basic_string<char>& x)
+      {
+        // XDR strings are hard-wired with a 32 bit (unsigned int) length.
+        //
+        char* p (const_cast<char*> (x.c_str ()));
+        unsigned int n (static_cast<unsigned int> (x.length ()));
+
+        if (x.length () > ~((unsigned int) 0) ||
+            !xdr_u_int (&s.impl (), &n) ||
+            !xdr_opaque (&s.impl (), p, n))
+          throw xdr_stream_insertion ();
+
+        return s;
+      }
+
+      // Wide strings are not supported by XDR.
+      //
+      // inline ostream<XDR>&
+      // operator<< (ostream<XDR>& s, const std::basic_string<wchar_t>& x)
+      // {
+      // }
+
+
+      // Insertion of a binary buffer.
+      //
+      template <typename C>
+      ostream<XDR>&
+      operator<< (ostream<XDR>& s, const buffer<C>& x)
+      {
+        // It is not possible to write an array with a 64-bit size.
+        //
+        unsigned int n (static_cast<unsigned int> (x.size ()));
+
+        if (x.size () > ~((unsigned int) 0) ||
+            !xdr_u_int (&s.impl (), &n) ||
+            !xdr_opaque (&s.impl (), const_cast<char*> (x.data ()), n))
+          throw xdr_stream_insertion ();
+
+        return s;
+      }
+    }
+  }
+}
+
+#endif  // XSD_CXX_TREE_XDR_STREAM_INSERTION_HXX
diff --git a/ext/patches/boost/asio.hpp b/ext/patches/boost/asio.hpp
new file mode 100644
index 0000000..871fcbe
--- /dev/null
+++ b/ext/patches/boost/asio.hpp
@@ -0,0 +1,121 @@
+//
+// asio.hpp
+// ~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See www.boost.org/libs/asio for documentation.
+//
+
+#ifndef BOOST_ASIO_HPP
+#define BOOST_ASIO_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/basic_datagram_socket.hpp>
+#include <boost/asio/basic_deadline_timer.hpp>
+#include <boost/asio/basic_io_object.hpp>
+#include <boost/asio/basic_raw_socket.hpp>
+#include <boost/asio/basic_seq_packet_socket.hpp>
+#include <boost/asio/basic_serial_port.hpp>
+#include <boost/asio/basic_signal_set.hpp>
+#include <boost/asio/basic_socket_acceptor.hpp>
+#include <boost/asio/basic_socket_iostream.hpp>
+#include <boost/asio/basic_socket_streambuf.hpp>
+#include <boost/asio/basic_stream_socket.hpp>
+#include <boost/asio/basic_streambuf.hpp>
+#include <boost/asio/basic_waitable_timer.hpp>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/buffered_read_stream_fwd.hpp>
+#include <boost/asio/buffered_read_stream.hpp>
+#include <boost/asio/buffered_stream_fwd.hpp>
+#include <boost/asio/buffered_stream.hpp>
+#include <boost/asio/buffered_write_stream_fwd.hpp>
+#include <boost/asio/buffered_write_stream.hpp>
+#include <boost/asio/buffers_iterator.hpp>
+#include <boost/asio/completion_condition.hpp>
+#include <boost/asio/connect.hpp>
+#include <boost/asio/coroutine.hpp>
+#include <boost/asio/datagram_socket_service.hpp>
+#include <boost/asio/deadline_timer_service.hpp>
+#include <boost/asio/deadline_timer.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/generic/basic_endpoint.hpp>
+#include <boost/asio/generic/datagram_protocol.hpp>
+#include <boost/asio/generic/raw_protocol.hpp>
+#include <boost/asio/generic/seq_packet_protocol.hpp>
+#include <boost/asio/generic/stream_protocol.hpp>
+#include <boost/asio/handler_alloc_hook.hpp>
+#include <boost/asio/handler_continuation_hook.hpp>
+#include <boost/asio/handler_invoke_hook.hpp>
+#include <boost/asio/handler_type.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ip/address.hpp>
+#include <boost/asio/ip/address_v4.hpp>
+#include <boost/asio/ip/address_v6.hpp>
+#include <boost/asio/ip/basic_endpoint.hpp>
+#include <boost/asio/ip/basic_resolver.hpp>
+#include <boost/asio/ip/basic_resolver_entry.hpp>
+#include <boost/asio/ip/basic_resolver_iterator.hpp>
+#include <boost/asio/ip/basic_resolver_query.hpp>
+#include <boost/asio/ip/host_name.hpp>
+#include <boost/asio/ip/icmp.hpp>
+#include <boost/asio/ip/multicast.hpp>
+#include <boost/asio/ip/resolver_query_base.hpp>
+#include <boost/asio/ip/resolver_service.hpp>
+#include <boost/asio/ip/tcp.hpp>
+#include <boost/asio/ip/udp.hpp>
+#include <boost/asio/ip/unicast.hpp>
+#include <boost/asio/ip/v6_only.hpp>
+#include <boost/asio/is_read_buffered.hpp>
+#include <boost/asio/is_write_buffered.hpp>
+#include <boost/asio/local/basic_endpoint.hpp>
+#include <boost/asio/local/connect_pair.hpp>
+#include <boost/asio/local/datagram_protocol.hpp>
+#include <boost/asio/local/stream_protocol.hpp>
+#include <boost/asio/placeholders.hpp>
+#include <boost/asio/posix/basic_descriptor.hpp>
+#include <boost/asio/posix/basic_stream_descriptor.hpp>
+#include <boost/asio/posix/descriptor_base.hpp>
+#include <boost/asio/posix/stream_descriptor.hpp>
+#include <boost/asio/posix/stream_descriptor_service.hpp>
+#include <boost/asio/raw_socket_service.hpp>
+#include <boost/asio/read.hpp>
+#include <boost/asio/read_at.hpp>
+#include <boost/asio/read_until.hpp>
+#include <boost/asio/seq_packet_socket_service.hpp>
+#include <boost/asio/serial_port.hpp>
+#include <boost/asio/serial_port_base.hpp>
+#include <boost/asio/serial_port_service.hpp>
+#include <boost/asio/signal_set.hpp>
+#include <boost/asio/signal_set_service.hpp>
+#include <boost/asio/socket_acceptor_service.hpp>
+#include <boost/asio/socket_base.hpp>
+#include <boost/asio/strand.hpp>
+#include <boost/asio/stream_socket_service.hpp>
+#include <boost/asio/streambuf.hpp>
+#include <boost/asio/time_traits.hpp>
+#include <boost/asio/version.hpp>
+#include <boost/asio/wait_traits.hpp>
+#include <boost/asio/waitable_timer_service.hpp>
+#include <boost/asio/windows/basic_handle.hpp>
+#include <boost/asio/windows/basic_object_handle.hpp>
+#include <boost/asio/windows/basic_random_access_handle.hpp>
+#include <boost/asio/windows/basic_stream_handle.hpp>
+#include <boost/asio/windows/object_handle.hpp>
+#include <boost/asio/windows/object_handle_service.hpp>
+#include <boost/asio/windows/overlapped_ptr.hpp>
+#include <boost/asio/windows/random_access_handle.hpp>
+#include <boost/asio/windows/random_access_handle_service.hpp>
+#include <boost/asio/windows/stream_handle.hpp>
+#include <boost/asio/windows/stream_handle_service.hpp>
+#include <boost/asio/write.hpp>
+#include <boost/asio/write_at.hpp>
+
+#endif // BOOST_ASIO_HPP
diff --git a/ext/patches/boost/asio/async_result.hpp b/ext/patches/boost/asio/async_result.hpp
new file mode 100644
index 0000000..4f09b9a
--- /dev/null
+++ b/ext/patches/boost/asio/async_result.hpp
@@ -0,0 +1,96 @@
+//
+// async_result.hpp
+// ~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_ASYNC_RESULT_HPP
+#define BOOST_ASIO_ASYNC_RESULT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/handler_type.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// An interface for customising the behaviour of an initiating function.
+/**
+ * This template may be specialised for user-defined handler types.
+ */
+template <typename Handler>
+class async_result
+{
+public:
+  /// The return type of the initiating function.
+  typedef void type;
+
+  /// Construct an async result from a given handler.
+  /**
+   * When using a specalised async_result, the constructor has an opportunity
+   * to initialise some state associated with the handler, which is then
+   * returned from the initiating function.
+   */
+  explicit async_result(Handler&)
+  {
+  }
+
+  /// Obtain the value to be returned from the initiating function.
+  type get()
+  {
+  }
+};
+
+namespace detail {
+
+// Helper template to deduce the true type of a handler, capture a local copy
+// of the handler, and then create an async_result for the handler.
+template <typename Handler, typename Signature>
+struct async_result_init
+{
+  explicit async_result_init(BOOST_ASIO_MOVE_ARG(Handler) orig_handler)
+    : handler(BOOST_ASIO_MOVE_CAST(Handler)(orig_handler)),
+      result(handler)
+  {
+  }
+
+  typename handler_type<Handler, Signature>::type handler;
+  async_result<typename handler_type<Handler, Signature>::type> result;
+};
+
+template <typename Handler, typename Signature>
+struct async_result_type_helper
+{
+  typedef typename async_result<
+      typename handler_type<Handler, Signature>::type
+    >::type type;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(GENERATING_DOCUMENTATION)
+# define BOOST_ASIO_INITFN_RESULT_TYPE(h, sig) \
+  void_or_deduced
+#elif defined(_MSC_VER) && (_MSC_VER < 1500)
+# define BOOST_ASIO_INITFN_RESULT_TYPE(h, sig) \
+  typename ::boost::asio::detail::async_result_type_helper<h, sig>::type
+#else
+# define BOOST_ASIO_INITFN_RESULT_TYPE(h, sig) \
+  typename ::boost::asio::async_result< \
+    typename ::boost::asio::handler_type<h, sig>::type>::type
+#endif
+
+#endif // BOOST_ASIO_ASYNC_RESULT_HPP
diff --git a/ext/patches/boost/asio/basic_datagram_socket.hpp b/ext/patches/boost/asio/basic_datagram_socket.hpp
new file mode 100644
index 0000000..196b45e
--- /dev/null
+++ b/ext/patches/boost/asio/basic_datagram_socket.hpp
@@ -0,0 +1,951 @@
+//
+// basic_datagram_socket.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BASIC_DATAGRAM_SOCKET_HPP
+#define BOOST_ASIO_BASIC_DATAGRAM_SOCKET_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/basic_socket.hpp>
+#include <boost/asio/datagram_socket_service.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/detail/type_traits.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Provides datagram-oriented socket functionality.
+/**
+ * The basic_datagram_socket class template provides asynchronous and blocking
+ * datagram-oriented socket functionality.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ */
+template <typename Protocol,
+    typename DatagramSocketService = datagram_socket_service<Protocol> >
+class basic_datagram_socket
+  : public basic_socket<Protocol, DatagramSocketService>
+{
+public:
+  /// (Deprecated: Use native_handle_type.) The native representation of a
+  /// socket.
+  typedef typename DatagramSocketService::native_handle_type native_type;
+
+  /// The native representation of a socket.
+  typedef typename DatagramSocketService::native_handle_type native_handle_type;
+
+  /// The protocol type.
+  typedef Protocol protocol_type;
+
+  /// The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+  /// Construct a basic_datagram_socket without opening it.
+  /**
+   * This constructor creates a datagram socket without opening it. The open()
+   * function must be called before data can be sent or received on the socket.
+   *
+   * @param io_service The io_service object that the datagram socket will use
+   * to dispatch handlers for any asynchronous operations performed on the
+   * socket.
+   */
+  explicit basic_datagram_socket(boost::asio::io_service& io_service)
+    : basic_socket<Protocol, DatagramSocketService>(io_service)
+  {
+  }
+
+  /// Construct and open a basic_datagram_socket.
+  /**
+   * This constructor creates and opens a datagram socket.
+   *
+   * @param io_service The io_service object that the datagram socket will use
+   * to dispatch handlers for any asynchronous operations performed on the
+   * socket.
+   *
+   * @param protocol An object specifying protocol parameters to be used.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_datagram_socket(boost::asio::io_service& io_service,
+      const protocol_type& protocol)
+    : basic_socket<Protocol, DatagramSocketService>(io_service, protocol)
+  {
+  }
+
+  /// Construct a basic_datagram_socket, opening it and binding it to the given
+  /// local endpoint.
+  /**
+   * This constructor creates a datagram socket and automatically opens it bound
+   * to the specified endpoint on the local machine. The protocol used is the
+   * protocol associated with the given endpoint.
+   *
+   * @param io_service The io_service object that the datagram socket will use
+   * to dispatch handlers for any asynchronous operations performed on the
+   * socket.
+   *
+   * @param endpoint An endpoint on the local machine to which the datagram
+   * socket will be bound.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_datagram_socket(boost::asio::io_service& io_service,
+      const endpoint_type& endpoint)
+    : basic_socket<Protocol, DatagramSocketService>(io_service, endpoint)
+  {
+  }
+
+  /// Construct a basic_datagram_socket on an existing native socket.
+  /**
+   * This constructor creates a datagram socket object to hold an existing
+   * native socket.
+   *
+   * @param io_service The io_service object that the datagram socket will use
+   * to dispatch handlers for any asynchronous operations performed on the
+   * socket.
+   *
+   * @param protocol An object specifying protocol parameters to be used.
+   *
+   * @param native_socket The new underlying socket implementation.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_datagram_socket(boost::asio::io_service& io_service,
+      const protocol_type& protocol, const native_handle_type& native_socket)
+    : basic_socket<Protocol, DatagramSocketService>(
+        io_service, protocol, native_socket)
+  {
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a basic_datagram_socket from another.
+  /**
+   * This constructor moves a datagram socket from one object to another.
+   *
+   * @param other The other basic_datagram_socket object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_datagram_socket(io_service&) constructor.
+   */
+  basic_datagram_socket(basic_datagram_socket&& other)
+    : basic_socket<Protocol, DatagramSocketService>(
+        BOOST_ASIO_MOVE_CAST(basic_datagram_socket)(other))
+  {
+  }
+
+  /// Move-assign a basic_datagram_socket from another.
+  /**
+   * This assignment operator moves a datagram socket from one object to
+   * another.
+   *
+   * @param other The other basic_datagram_socket object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_datagram_socket(io_service&) constructor.
+   */
+  basic_datagram_socket& operator=(basic_datagram_socket&& other)
+  {
+    basic_socket<Protocol, DatagramSocketService>::operator=(
+        BOOST_ASIO_MOVE_CAST(basic_datagram_socket)(other));
+    return *this;
+  }
+
+  /// Move-construct a basic_datagram_socket from a socket of another protocol
+  /// type.
+  /**
+   * This constructor moves a datagram socket from one object to another.
+   *
+   * @param other The other basic_datagram_socket object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_datagram_socket(io_service&) constructor.
+   */
+  template <typename Protocol1, typename DatagramSocketService1>
+  basic_datagram_socket(
+      basic_datagram_socket<Protocol1, DatagramSocketService1>&& other,
+      typename enable_if<is_convertible<Protocol1, Protocol>::value>::type* = 0)
+    : basic_socket<Protocol, DatagramSocketService>(
+        BOOST_ASIO_MOVE_CAST2(basic_datagram_socket<
+          Protocol1, DatagramSocketService1>)(other))
+  {
+  }
+
+  /// Move-assign a basic_datagram_socket from a socket of another protocol
+  /// type.
+  /**
+   * This assignment operator moves a datagram socket from one object to
+   * another.
+   *
+   * @param other The other basic_datagram_socket object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_datagram_socket(io_service&) constructor.
+   */
+  template <typename Protocol1, typename DatagramSocketService1>
+  typename enable_if<is_convertible<Protocol1, Protocol>::value,
+      basic_datagram_socket>::type& operator=(
+        basic_datagram_socket<Protocol1, DatagramSocketService1>&& other)
+  {
+    basic_socket<Protocol, DatagramSocketService>::operator=(
+        BOOST_ASIO_MOVE_CAST2(basic_datagram_socket<
+          Protocol1, DatagramSocketService1>)(other));
+    return *this;
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Send some data on a connected socket.
+  /**
+   * This function is used to send data on the datagram socket. The function
+   * call will block until the data has been sent successfully or an error
+   * occurs.
+   *
+   * @param buffers One ore more data buffers to be sent on the socket.
+   *
+   * @returns The number of bytes sent.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The send operation can only be used with a connected socket. Use
+   * the send_to function to send data on an unconnected datagram socket.
+   *
+   * @par Example
+   * To send a single data buffer use the @ref buffer function as follows:
+   * @code socket.send(boost::asio::buffer(data, size)); @endcode
+   * See the @ref buffer documentation for information on sending multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t send(const ConstBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().send(
+        this->get_implementation(), buffers, 0, ec);
+    boost::asio::detail::throw_error(ec, "send");
+    return s;
+  }
+
+  /// Send some data on a connected socket.
+  /**
+   * This function is used to send data on the datagram socket. The function
+   * call will block until the data has been sent successfully or an error
+   * occurs.
+   *
+   * @param buffers One ore more data buffers to be sent on the socket.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @returns The number of bytes sent.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The send operation can only be used with a connected socket. Use
+   * the send_to function to send data on an unconnected datagram socket.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t send(const ConstBufferSequence& buffers,
+      socket_base::message_flags flags)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().send(
+        this->get_implementation(), buffers, flags, ec);
+    boost::asio::detail::throw_error(ec, "send");
+    return s;
+  }
+
+  /// Send some data on a connected socket.
+  /**
+   * This function is used to send data on the datagram socket. The function
+   * call will block until the data has been sent successfully or an error
+   * occurs.
+   *
+   * @param buffers One or more data buffers to be sent on the socket.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes sent.
+   *
+   * @note The send operation can only be used with a connected socket. Use
+   * the send_to function to send data on an unconnected datagram socket.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t send(const ConstBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return this->get_service().send(
+        this->get_implementation(), buffers, flags, ec);
+  }
+
+  /// Start an asynchronous send on a connected socket.
+  /**
+   * This function is used to asynchronously send data on the datagram socket.
+   * The function call always returns immediately.
+   *
+   * @param buffers One or more data buffers to be sent on the socket. Although
+   * the buffers object may be copied as necessary, ownership of the underlying
+   * memory blocks is retained by the caller, which must guarantee that they
+   * remain valid until the handler is called.
+   *
+   * @param handler The handler to be called when the send operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes sent.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The async_send operation can only be used with a connected socket.
+   * Use the async_send_to function to send data on an unconnected datagram
+   * socket.
+   *
+   * @par Example
+   * To send a single data buffer use the @ref buffer function as follows:
+   * @code
+   * socket.async_send(boost::asio::buffer(data, size), handler);
+   * @endcode
+   * See the @ref buffer documentation for information on sending multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_send(const ConstBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WriteHandler.
+    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+    return this->get_service().async_send(this->get_implementation(),
+        buffers, 0, BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Start an asynchronous send on a connected socket.
+  /**
+   * This function is used to asynchronously send data on the datagram socket.
+   * The function call always returns immediately.
+   *
+   * @param buffers One or more data buffers to be sent on the socket. Although
+   * the buffers object may be copied as necessary, ownership of the underlying
+   * memory blocks is retained by the caller, which must guarantee that they
+   * remain valid until the handler is called.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @param handler The handler to be called when the send operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes sent.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The async_send operation can only be used with a connected socket.
+   * Use the async_send_to function to send data on an unconnected datagram
+   * socket.
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_send(const ConstBufferSequence& buffers,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WriteHandler.
+    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+    return this->get_service().async_send(this->get_implementation(),
+        buffers, flags, BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Send a datagram to the specified endpoint.
+  /**
+   * This function is used to send a datagram to the specified remote endpoint.
+   * The function call will block until the data has been sent successfully or
+   * an error occurs.
+   *
+   * @param buffers One or more data buffers to be sent to the remote endpoint.
+   *
+   * @param destination The remote endpoint to which the data will be sent.
+   *
+   * @returns The number of bytes sent.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @par Example
+   * To send a single data buffer use the @ref buffer function as follows:
+   * @code
+   * boost::asio::ip::udp::endpoint destination(
+   *     boost::asio::ip::address::from_string("1.2.3.4"), 12345);
+   * socket.send_to(boost::asio::buffer(data, size), destination);
+   * @endcode
+   * See the @ref buffer documentation for information on sending multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t send_to(const ConstBufferSequence& buffers,
+      const endpoint_type& destination)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().send_to(
+        this->get_implementation(), buffers, destination, 0, ec);
+    boost::asio::detail::throw_error(ec, "send_to");
+    return s;
+  }
+
+  /// Send a datagram to the specified endpoint.
+  /**
+   * This function is used to send a datagram to the specified remote endpoint.
+   * The function call will block until the data has been sent successfully or
+   * an error occurs.
+   *
+   * @param buffers One or more data buffers to be sent to the remote endpoint.
+   *
+   * @param destination The remote endpoint to which the data will be sent.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @returns The number of bytes sent.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t send_to(const ConstBufferSequence& buffers,
+      const endpoint_type& destination, socket_base::message_flags flags)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().send_to(
+        this->get_implementation(), buffers, destination, flags, ec);
+    boost::asio::detail::throw_error(ec, "send_to");
+    return s;
+  }
+
+  /// Send a datagram to the specified endpoint.
+  /**
+   * This function is used to send a datagram to the specified remote endpoint.
+   * The function call will block until the data has been sent successfully or
+   * an error occurs.
+   *
+   * @param buffers One or more data buffers to be sent to the remote endpoint.
+   *
+   * @param destination The remote endpoint to which the data will be sent.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes sent.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t send_to(const ConstBufferSequence& buffers,
+      const endpoint_type& destination, socket_base::message_flags flags,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().send_to(this->get_implementation(),
+        buffers, destination, flags, ec);
+  }
+
+  /// Start an asynchronous send.
+  /**
+   * This function is used to asynchronously send a datagram to the specified
+   * remote endpoint. The function call always returns immediately.
+   *
+   * @param buffers One or more data buffers to be sent to the remote endpoint.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param destination The remote endpoint to which the data will be sent.
+   * Copies will be made of the endpoint as required.
+   *
+   * @param handler The handler to be called when the send operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes sent.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @par Example
+   * To send a single data buffer use the @ref buffer function as follows:
+   * @code
+   * boost::asio::ip::udp::endpoint destination(
+   *     boost::asio::ip::address::from_string("1.2.3.4"), 12345);
+   * socket.async_send_to(
+   *     boost::asio::buffer(data, size), destination, handler);
+   * @endcode
+   * See the @ref buffer documentation for information on sending multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_send_to(const ConstBufferSequence& buffers,
+      const endpoint_type& destination,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WriteHandler.
+    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+    return this->get_service().async_send_to(
+        this->get_implementation(), buffers, destination, 0,
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Start an asynchronous send.
+  /**
+   * This function is used to asynchronously send a datagram to the specified
+   * remote endpoint. The function call always returns immediately.
+   *
+   * @param buffers One or more data buffers to be sent to the remote endpoint.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @param destination The remote endpoint to which the data will be sent.
+   * Copies will be made of the endpoint as required.
+   *
+   * @param handler The handler to be called when the send operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes sent.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_send_to(const ConstBufferSequence& buffers,
+      const endpoint_type& destination, socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WriteHandler.
+    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+    return this->get_service().async_send_to(
+        this->get_implementation(), buffers, destination, flags,
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Receive some data on a connected socket.
+  /**
+   * This function is used to receive data on the datagram socket. The function
+   * call will block until data has been received successfully or an error
+   * occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @returns The number of bytes received.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The receive operation can only be used with a connected socket. Use
+   * the receive_from function to receive data on an unconnected datagram
+   * socket.
+   *
+   * @par Example
+   * To receive into a single data buffer use the @ref buffer function as
+   * follows:
+   * @code socket.receive(boost::asio::buffer(data, size)); @endcode
+   * See the @ref buffer documentation for information on receiving into
+   * multiple buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive(const MutableBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().receive(
+        this->get_implementation(), buffers, 0, ec);
+    boost::asio::detail::throw_error(ec, "receive");
+    return s;
+  }
+
+  /// Receive some data on a connected socket.
+  /**
+   * This function is used to receive data on the datagram socket. The function
+   * call will block until data has been received successfully or an error
+   * occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @param flags Flags specifying how the receive call is to be made.
+   *
+   * @returns The number of bytes received.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The receive operation can only be used with a connected socket. Use
+   * the receive_from function to receive data on an unconnected datagram
+   * socket.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive(const MutableBufferSequence& buffers,
+      socket_base::message_flags flags)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().receive(
+        this->get_implementation(), buffers, flags, ec);
+    boost::asio::detail::throw_error(ec, "receive");
+    return s;
+  }
+
+  /// Receive some data on a connected socket.
+  /**
+   * This function is used to receive data on the datagram socket. The function
+   * call will block until data has been received successfully or an error
+   * occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @param flags Flags specifying how the receive call is to be made.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes received.
+   *
+   * @note The receive operation can only be used with a connected socket. Use
+   * the receive_from function to receive data on an unconnected datagram
+   * socket.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive(const MutableBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return this->get_service().receive(
+        this->get_implementation(), buffers, flags, ec);
+  }
+
+  /// Start an asynchronous receive on a connected socket.
+  /**
+   * This function is used to asynchronously receive data from the datagram
+   * socket. The function call always returns immediately.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param handler The handler to be called when the receive operation
+   * completes. Copies will be made of the handler as required. The function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes received.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The async_receive operation can only be used with a connected socket.
+   * Use the async_receive_from function to receive data on an unconnected
+   * datagram socket.
+   *
+   * @par Example
+   * To receive into a single data buffer use the @ref buffer function as
+   * follows:
+   * @code
+   * socket.async_receive(boost::asio::buffer(data, size), handler);
+   * @endcode
+   * See the @ref buffer documentation for information on receiving into
+   * multiple buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive(const MutableBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    return this->get_service().async_receive(this->get_implementation(),
+        buffers, 0, BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+
+  /// Start an asynchronous receive on a connected socket.
+  /**
+   * This function is used to asynchronously receive data from the datagram
+   * socket. The function call always returns immediately.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param flags Flags specifying how the receive call is to be made.
+   *
+   * @param handler The handler to be called when the receive operation
+   * completes. Copies will be made of the handler as required. The function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes received.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The async_receive operation can only be used with a connected socket.
+   * Use the async_receive_from function to receive data on an unconnected
+   * datagram socket.
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive(const MutableBufferSequence& buffers,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    return this->get_service().async_receive(this->get_implementation(),
+        buffers, flags, BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+
+  /// Receive a datagram with the endpoint of the sender.
+  /**
+   * This function is used to receive a datagram. The function call will block
+   * until data has been received successfully or an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @param sender_endpoint An endpoint object that receives the endpoint of
+   * the remote sender of the datagram.
+   *
+   * @returns The number of bytes received.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @par Example
+   * To receive into a single data buffer use the @ref buffer function as
+   * follows:
+   * @code
+   * boost::asio::ip::udp::endpoint sender_endpoint;
+   * socket.receive_from(
+   *     boost::asio::buffer(data, size), sender_endpoint);
+   * @endcode
+   * See the @ref buffer documentation for information on receiving into
+   * multiple buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive_from(const MutableBufferSequence& buffers,
+      endpoint_type& sender_endpoint)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().receive_from(
+        this->get_implementation(), buffers, sender_endpoint, 0, ec);
+    boost::asio::detail::throw_error(ec, "receive_from");
+    return s;
+  }
+  
+  /// Receive a datagram with the endpoint of the sender.
+  /**
+   * This function is used to receive a datagram. The function call will block
+   * until data has been received successfully or an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @param sender_endpoint An endpoint object that receives the endpoint of
+   * the remote sender of the datagram.
+   *
+   * @param flags Flags specifying how the receive call is to be made.
+   *
+   * @returns The number of bytes received.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive_from(const MutableBufferSequence& buffers,
+      endpoint_type& sender_endpoint, socket_base::message_flags flags)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().receive_from(
+        this->get_implementation(), buffers, sender_endpoint, flags, ec);
+    boost::asio::detail::throw_error(ec, "receive_from");
+    return s;
+  }
+  
+  /// Receive a datagram with the endpoint of the sender.
+  /**
+   * This function is used to receive a datagram. The function call will block
+   * until data has been received successfully or an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @param sender_endpoint An endpoint object that receives the endpoint of
+   * the remote sender of the datagram.
+   *
+   * @param flags Flags specifying how the receive call is to be made.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes received.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive_from(const MutableBufferSequence& buffers,
+      endpoint_type& sender_endpoint, socket_base::message_flags flags,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().receive_from(this->get_implementation(),
+        buffers, sender_endpoint, flags, ec);
+  }
+
+  /// Start an asynchronous receive.
+  /**
+   * This function is used to asynchronously receive a datagram. The function
+   * call always returns immediately.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param sender_endpoint An endpoint object that receives the endpoint of
+   * the remote sender of the datagram. Ownership of the sender_endpoint object
+   * is retained by the caller, which must guarantee that it is valid until the
+   * handler is called.
+   *
+   * @param handler The handler to be called when the receive operation
+   * completes. Copies will be made of the handler as required. The function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes received.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @par Example
+   * To receive into a single data buffer use the @ref buffer function as
+   * follows:
+   * @code socket.async_receive_from(
+   *     boost::asio::buffer(data, size), sender_endpoint, handler); @endcode
+   * See the @ref buffer documentation for information on receiving into
+   * multiple buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive_from(const MutableBufferSequence& buffers,
+      endpoint_type& sender_endpoint,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    return this->get_service().async_receive_from(
+        this->get_implementation(), buffers, sender_endpoint, 0,
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+
+  /// Start an asynchronous receive.
+  /**
+   * This function is used to asynchronously receive a datagram. The function
+   * call always returns immediately.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param sender_endpoint An endpoint object that receives the endpoint of
+   * the remote sender of the datagram. Ownership of the sender_endpoint object
+   * is retained by the caller, which must guarantee that it is valid until the
+   * handler is called.
+   *
+   * @param flags Flags specifying how the receive call is to be made.
+   *
+   * @param handler The handler to be called when the receive operation
+   * completes. Copies will be made of the handler as required. The function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes received.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive_from(const MutableBufferSequence& buffers,
+      endpoint_type& sender_endpoint, socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    return this->get_service().async_receive_from(
+        this->get_implementation(), buffers, sender_endpoint, flags,
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_BASIC_DATAGRAM_SOCKET_HPP
diff --git a/ext/patches/boost/asio/basic_deadline_timer.hpp b/ext/patches/boost/asio/basic_deadline_timer.hpp
new file mode 100644
index 0000000..ed61719
--- /dev/null
+++ b/ext/patches/boost/asio/basic_deadline_timer.hpp
@@ -0,0 +1,520 @@
+//
+// basic_deadline_timer.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BASIC_DEADLINE_TIMER_HPP
+#define BOOST_ASIO_BASIC_DEADLINE_TIMER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <cstddef>
+#include <boost/asio/basic_io_object.hpp>
+#include <boost/asio/deadline_timer_service.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Provides waitable timer functionality.
+/**
+ * The basic_deadline_timer class template provides the ability to perform a
+ * blocking or asynchronous wait for a timer to expire.
+ *
+ * A deadline timer is always in one of two states: "expired" or "not expired".
+ * If the wait() or async_wait() function is called on an expired timer, the
+ * wait operation will complete immediately.
+ *
+ * Most applications will use the boost::asio::deadline_timer typedef.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ *
+ * @par Examples
+ * Performing a blocking wait:
+ * @code
+ * // Construct a timer without setting an expiry time.
+ * boost::asio::deadline_timer timer(io_service);
+ *
+ * // Set an expiry time relative to now.
+ * timer.expires_from_now(boost::posix_time::seconds(5));
+ *
+ * // Wait for the timer to expire.
+ * timer.wait();
+ * @endcode
+ *
+ * @par 
+ * Performing an asynchronous wait:
+ * @code
+ * void handler(const boost::system::error_code& error)
+ * {
+ *   if (!error)
+ *   {
+ *     // Timer expired.
+ *   }
+ * }
+ *
+ * ...
+ *
+ * // Construct a timer with an absolute expiry time.
+ * boost::asio::deadline_timer timer(io_service,
+ *     boost::posix_time::time_from_string("2005-12-07 23:59:59.000"));
+ *
+ * // Start an asynchronous wait.
+ * timer.async_wait(handler);
+ * @endcode
+ *
+ * @par Changing an active deadline_timer's expiry time
+ *
+ * Changing the expiry time of a timer while there are pending asynchronous
+ * waits causes those wait operations to be cancelled. To ensure that the action
+ * associated with the timer is performed only once, use something like this:
+ * used:
+ *
+ * @code
+ * void on_some_event()
+ * {
+ *   if (my_timer.expires_from_now(seconds(5)) > 0)
+ *   {
+ *     // We managed to cancel the timer. Start new asynchronous wait.
+ *     my_timer.async_wait(on_timeout);
+ *   }
+ *   else
+ *   {
+ *     // Too late, timer has already expired!
+ *   }
+ * }
+ *
+ * void on_timeout(const boost::system::error_code& e)
+ * {
+ *   if (e != boost::asio::error::operation_aborted)
+ *   {
+ *     // Timer was not cancelled, take necessary action.
+ *   }
+ * }
+ * @endcode
+ *
+ * @li The boost::asio::basic_deadline_timer::expires_from_now() function
+ * cancels any pending asynchronous waits, and returns the number of
+ * asynchronous waits that were cancelled. If it returns 0 then you were too
+ * late and the wait handler has already been executed, or will soon be
+ * executed. If it returns 1 then the wait handler was successfully cancelled.
+ *
+ * @li If a wait handler is cancelled, the boost::system::error_code passed to
+ * it contains the value boost::asio::error::operation_aborted.
+ */
+template <typename Time,
+    typename TimeTraits = boost::asio::time_traits<Time>,
+    typename TimerService = deadline_timer_service<Time, TimeTraits> >
+class basic_deadline_timer
+  : public basic_io_object<TimerService>
+{
+public:
+  /// The time traits type.
+  typedef TimeTraits traits_type;
+
+  /// The time type.
+  typedef typename traits_type::time_type time_type;
+
+  /// The duration type.
+  typedef typename traits_type::duration_type duration_type;
+
+  /// Constructor.
+  /**
+   * This constructor creates a timer without setting an expiry time. The
+   * expires_at() or expires_from_now() functions must be called to set an
+   * expiry time before the timer can be waited on.
+   *
+   * @param io_service The io_service object that the timer will use to dispatch
+   * handlers for any asynchronous operations performed on the timer.
+   */
+  explicit basic_deadline_timer(boost::asio::io_service& io_service)
+    : basic_io_object<TimerService>(io_service)
+  {
+  }
+
+  /// Constructor to set a particular expiry time as an absolute time.
+  /**
+   * This constructor creates a timer and sets the expiry time.
+   *
+   * @param io_service The io_service object that the timer will use to dispatch
+   * handlers for any asynchronous operations performed on the timer.
+   *
+   * @param expiry_time The expiry time to be used for the timer, expressed
+   * as an absolute time.
+   */
+  basic_deadline_timer(boost::asio::io_service& io_service,
+      const time_type& expiry_time)
+    : basic_io_object<TimerService>(io_service)
+  {
+    boost::system::error_code ec;
+    this->service.expires_at(this->implementation, expiry_time, ec);
+    boost::asio::detail::throw_error(ec, "expires_at");
+  }
+
+  /// Constructor to set a particular expiry time relative to now.
+  /**
+   * This constructor creates a timer and sets the expiry time.
+   *
+   * @param io_service The io_service object that the timer will use to dispatch
+   * handlers for any asynchronous operations performed on the timer.
+   *
+   * @param expiry_time The expiry time to be used for the timer, relative to
+   * now.
+   */
+  basic_deadline_timer(boost::asio::io_service& io_service,
+      const duration_type& expiry_time)
+    : basic_io_object<TimerService>(io_service)
+  {
+    boost::system::error_code ec;
+    this->service.expires_from_now(this->implementation, expiry_time, ec);
+    boost::asio::detail::throw_error(ec, "expires_from_now");
+  }
+
+  /// Cancel any asynchronous operations that are waiting on the timer.
+  /**
+   * This function forces the completion of any pending asynchronous wait
+   * operations against the timer. The handler for each cancelled operation will
+   * be invoked with the boost::asio::error::operation_aborted error code.
+   *
+   * Cancelling the timer does not change the expiry time.
+   *
+   * @return The number of asynchronous operations that were cancelled.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note If the timer has already expired when cancel() is called, then the
+   * handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  std::size_t cancel()
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->service.cancel(this->implementation, ec);
+    boost::asio::detail::throw_error(ec, "cancel");
+    return s;
+  }
+
+  /// Cancel any asynchronous operations that are waiting on the timer.
+  /**
+   * This function forces the completion of any pending asynchronous wait
+   * operations against the timer. The handler for each cancelled operation will
+   * be invoked with the boost::asio::error::operation_aborted error code.
+   *
+   * Cancelling the timer does not change the expiry time.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @return The number of asynchronous operations that were cancelled.
+   *
+   * @note If the timer has already expired when cancel() is called, then the
+   * handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  std::size_t cancel(boost::system::error_code& ec)
+  {
+    return this->service.cancel(this->implementation, ec);
+  }
+
+  /// Cancels one asynchronous operation that is waiting on the timer.
+  /**
+   * This function forces the completion of one pending asynchronous wait
+   * operation against the timer. Handlers are cancelled in FIFO order. The
+   * handler for the cancelled operation will be invoked with the
+   * boost::asio::error::operation_aborted error code.
+   *
+   * Cancelling the timer does not change the expiry time.
+   *
+   * @return The number of asynchronous operations that were cancelled. That is,
+   * either 0 or 1.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note If the timer has already expired when cancel_one() is called, then
+   * the handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  std::size_t cancel_one()
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->service.cancel_one(this->implementation, ec);
+    boost::asio::detail::throw_error(ec, "cancel_one");
+    return s;
+  }
+
+  /// Cancels one asynchronous operation that is waiting on the timer.
+  /**
+   * This function forces the completion of one pending asynchronous wait
+   * operation against the timer. Handlers are cancelled in FIFO order. The
+   * handler for the cancelled operation will be invoked with the
+   * boost::asio::error::operation_aborted error code.
+   *
+   * Cancelling the timer does not change the expiry time.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @return The number of asynchronous operations that were cancelled. That is,
+   * either 0 or 1.
+   *
+   * @note If the timer has already expired when cancel_one() is called, then
+   * the handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  std::size_t cancel_one(boost::system::error_code& ec)
+  {
+    return this->service.cancel_one(this->implementation, ec);
+  }
+
+  /// Get the timer's expiry time as an absolute time.
+  /**
+   * This function may be used to obtain the timer's current expiry time.
+   * Whether the timer has expired or not does not affect this value.
+   */
+  time_type expires_at() const
+  {
+    return this->service.expires_at(this->implementation);
+  }
+
+  /// Set the timer's expiry time as an absolute time.
+  /**
+   * This function sets the expiry time. Any pending asynchronous wait
+   * operations will be cancelled. The handler for each cancelled operation will
+   * be invoked with the boost::asio::error::operation_aborted error code.
+   *
+   * @param expiry_time The expiry time to be used for the timer.
+   *
+   * @return The number of asynchronous operations that were cancelled.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note If the timer has already expired when expires_at() is called, then
+   * the handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  std::size_t expires_at(const time_type& expiry_time)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->service.expires_at(
+        this->implementation, expiry_time, ec);
+    boost::asio::detail::throw_error(ec, "expires_at");
+    return s;
+  }
+
+  /// Set the timer's expiry time as an absolute time.
+  /**
+   * This function sets the expiry time. Any pending asynchronous wait
+   * operations will be cancelled. The handler for each cancelled operation will
+   * be invoked with the boost::asio::error::operation_aborted error code.
+   *
+   * @param expiry_time The expiry time to be used for the timer.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @return The number of asynchronous operations that were cancelled.
+   *
+   * @note If the timer has already expired when expires_at() is called, then
+   * the handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  std::size_t expires_at(const time_type& expiry_time,
+      boost::system::error_code& ec)
+  {
+    return this->service.expires_at(this->implementation, expiry_time, ec);
+  }
+
+  /// Get the timer's expiry time relative to now.
+  /**
+   * This function may be used to obtain the timer's current expiry time.
+   * Whether the timer has expired or not does not affect this value.
+   */
+  duration_type expires_from_now() const
+  {
+    return this->service.expires_from_now(this->implementation);
+  }
+
+  /// Set the timer's expiry time relative to now.
+  /**
+   * This function sets the expiry time. Any pending asynchronous wait
+   * operations will be cancelled. The handler for each cancelled operation will
+   * be invoked with the boost::asio::error::operation_aborted error code.
+   *
+   * @param expiry_time The expiry time to be used for the timer.
+   *
+   * @return The number of asynchronous operations that were cancelled.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note If the timer has already expired when expires_from_now() is called,
+   * then the handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  std::size_t expires_from_now(const duration_type& expiry_time)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->service.expires_from_now(
+        this->implementation, expiry_time, ec);
+    boost::asio::detail::throw_error(ec, "expires_from_now");
+    return s;
+  }
+
+  /// Set the timer's expiry time relative to now.
+  /**
+   * This function sets the expiry time. Any pending asynchronous wait
+   * operations will be cancelled. The handler for each cancelled operation will
+   * be invoked with the boost::asio::error::operation_aborted error code.
+   *
+   * @param expiry_time The expiry time to be used for the timer.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @return The number of asynchronous operations that were cancelled.
+   *
+   * @note If the timer has already expired when expires_from_now() is called,
+   * then the handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  std::size_t expires_from_now(const duration_type& expiry_time,
+      boost::system::error_code& ec)
+  {
+    return this->service.expires_from_now(
+        this->implementation, expiry_time, ec);
+  }
+
+  /// Perform a blocking wait on the timer.
+  /**
+   * This function is used to wait for the timer to expire. This function
+   * blocks and does not return until the timer has expired.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void wait()
+  {
+    boost::system::error_code ec;
+    this->service.wait(this->implementation, ec);
+    boost::asio::detail::throw_error(ec, "wait");
+  }
+
+  /// Perform a blocking wait on the timer.
+  /**
+   * This function is used to wait for the timer to expire. This function
+   * blocks and does not return until the timer has expired.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  void wait(boost::system::error_code& ec)
+  {
+    this->service.wait(this->implementation, ec);
+  }
+
+  /// Start an asynchronous wait on the timer.
+  /**
+   * This function may be used to initiate an asynchronous wait against the
+   * timer. It always returns immediately.
+   *
+   * For each call to async_wait(), the supplied handler will be called exactly
+   * once. The handler will be called when:
+   *
+   * @li The timer has expired.
+   *
+   * @li The timer was cancelled, in which case the handler is passed the error
+   * code boost::asio::error::operation_aborted.
+   *
+   * @param handler The handler to be called when the timer expires. Copies
+   * will be made of the handler as required. The function signature of the
+   * handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error // Result of operation.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   */
+  template <typename WaitHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WaitHandler,
+      void (boost::system::error_code))
+  async_wait(BOOST_ASIO_MOVE_ARG(WaitHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WaitHandler.
+    BOOST_ASIO_WAIT_HANDLER_CHECK(WaitHandler, handler) type_check;
+
+    return this->service.async_wait(this->implementation,
+        BOOST_ASIO_MOVE_CAST(WaitHandler)(handler));
+  }
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+       // || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_BASIC_DEADLINE_TIMER_HPP
diff --git a/ext/patches/boost/asio/basic_io_object.hpp b/ext/patches/boost/asio/basic_io_object.hpp
new file mode 100644
index 0000000..0ac4426
--- /dev/null
+++ b/ext/patches/boost/asio/basic_io_object.hpp
@@ -0,0 +1,242 @@
+//
+// basic_io_object.hpp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BASIC_IO_OBJECT_HPP
+#define BOOST_ASIO_BASIC_IO_OBJECT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+namespace detail
+{
+  // Type trait used to determine whether a service supports move.
+  template <typename IoObjectService>
+  class service_has_move
+  {
+  private:
+    typedef IoObjectService service_type;
+    typedef typename service_type::implementation_type implementation_type;
+
+    template <typename T, typename U>
+    static auto eval(T* t, U* u) -> decltype(t->move_construct(*u, *u), char());
+    static char (&eval(...))[2];
+
+  public:
+    static const bool value =
+      sizeof(service_has_move::eval(
+        static_cast<service_type*>(0),
+        static_cast<implementation_type*>(0))) == 1;
+  };
+}
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+/// Base class for all I/O objects.
+/**
+ * @note All I/O objects are non-copyable. However, when using C++0x, certain
+ * I/O objects do support move construction and move assignment.
+ */
+#if !defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+template <typename IoObjectService>
+#else
+template <typename IoObjectService,
+    bool Movable = detail::service_has_move<IoObjectService>::value>
+#endif
+class basic_io_object
+{
+public:
+  /// The type of the service that will be used to provide I/O operations.
+  typedef IoObjectService service_type;
+
+  /// The underlying implementation type of I/O object.
+  typedef typename service_type::implementation_type implementation_type;
+
+  /// Get the io_service associated with the object.
+  /**
+   * This function may be used to obtain the io_service object that the I/O
+   * object uses to dispatch handlers for asynchronous operations.
+   *
+   * @return A reference to the io_service object that the I/O object will use
+   * to dispatch handlers. Ownership is not transferred to the caller.
+   */
+  boost::asio::io_service& get_io_service()
+  {
+    return service.get_io_service();
+  }
+
+protected:
+  /// Construct a basic_io_object.
+  /**
+   * Performs:
+   * @code get_service().construct(get_implementation()); @endcode
+   */
+  explicit basic_io_object(boost::asio::io_service& io_service)
+    : service(boost::asio::use_service<IoObjectService>(io_service))
+  {
+    service.construct(implementation);
+  }
+
+#if defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a basic_io_object.
+  /**
+   * Performs:
+   * @code get_service().move_construct(
+   *     get_implementation(), other.get_implementation()); @endcode
+   *
+   * @note Available only for services that support movability,
+   */
+  basic_io_object(basic_io_object&& other);
+
+  /// Move-assign a basic_io_object.
+  /**
+   * Performs:
+   * @code get_service().move_assign(get_implementation(),
+   *     other.get_service(), other.get_implementation()); @endcode
+   *
+   * @note Available only for services that support movability,
+   */
+  basic_io_object& operator=(basic_io_object&& other);
+#endif // defined(GENERATING_DOCUMENTATION)
+
+  /// Protected destructor to prevent deletion through this type.
+  /**
+   * Performs:
+   * @code get_service().destroy(get_implementation()); @endcode
+   */
+  ~basic_io_object()
+  {
+    service.destroy(implementation);
+  }
+
+  /// Get the service associated with the I/O object.
+  service_type& get_service()
+  {
+    return service;
+  }
+
+  /// Get the service associated with the I/O object.
+  const service_type& get_service() const
+  {
+    return service;
+  }
+
+  /// (Deprecated: Use get_service().) The service associated with the I/O
+  /// object.
+  /**
+   * @note Available only for services that do not support movability.
+   */
+  service_type& service;
+
+  /// Get the underlying implementation of the I/O object.
+  implementation_type& get_implementation()
+  {
+    return implementation;
+  }
+
+  /// Get the underlying implementation of the I/O object.
+  const implementation_type& get_implementation() const
+  {
+    return implementation;
+  }
+
+  /// (Deprecated: Use get_implementation().) The underlying implementation of
+  /// the I/O object.
+  implementation_type implementation;
+
+private:
+  basic_io_object(const basic_io_object&);
+  basic_io_object& operator=(const basic_io_object&);
+};
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+// Specialisation for movable objects.
+template <typename IoObjectService>
+class basic_io_object<IoObjectService, true>
+{
+public:
+  typedef IoObjectService service_type;
+  typedef typename service_type::implementation_type implementation_type;
+
+  boost::asio::io_service& get_io_service()
+  {
+    return service_->get_io_service();
+  }
+
+protected:
+  explicit basic_io_object(boost::asio::io_service& io_service)
+    : service_(&boost::asio::use_service<IoObjectService>(io_service))
+  {
+    service_->construct(implementation);
+  }
+
+  basic_io_object(basic_io_object&& other)
+    : service_(&other.get_service())
+  {
+    service_->move_construct(implementation, other.implementation);
+  }
+
+  ~basic_io_object()
+  {
+    service_->destroy(implementation);
+  }
+
+  basic_io_object& operator=(basic_io_object&& other)
+  {
+    service_->move_assign(implementation,
+        *other.service_, other.implementation);
+    service_ = other.service_;
+    return *this;
+  }
+
+  service_type& get_service()
+  {
+    return *service_;
+  }
+
+  const service_type& get_service() const
+  {
+    return *service_;
+  }
+
+  implementation_type& get_implementation()
+  {
+    return implementation;
+  }
+
+  const implementation_type& get_implementation() const
+  {
+    return implementation;
+  }
+
+  implementation_type implementation;
+
+private:
+  basic_io_object(const basic_io_object&);
+  void operator=(const basic_io_object&);
+
+  IoObjectService* service_;
+};
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_BASIC_IO_OBJECT_HPP
diff --git a/ext/patches/boost/asio/basic_raw_socket.hpp b/ext/patches/boost/asio/basic_raw_socket.hpp
new file mode 100644
index 0000000..d24c58c
--- /dev/null
+++ b/ext/patches/boost/asio/basic_raw_socket.hpp
@@ -0,0 +1,942 @@
+//
+// basic_raw_socket.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BASIC_RAW_SOCKET_HPP
+#define BOOST_ASIO_BASIC_RAW_SOCKET_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/basic_socket.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/detail/type_traits.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/raw_socket_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Provides raw-oriented socket functionality.
+/**
+ * The basic_raw_socket class template provides asynchronous and blocking
+ * raw-oriented socket functionality.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ */
+template <typename Protocol,
+    typename RawSocketService = raw_socket_service<Protocol> >
+class basic_raw_socket
+  : public basic_socket<Protocol, RawSocketService>
+{
+public:
+  /// (Deprecated: Use native_handle_type.) The native representation of a
+  /// socket.
+  typedef typename RawSocketService::native_handle_type native_type;
+
+  /// The native representation of a socket.
+  typedef typename RawSocketService::native_handle_type native_handle_type;
+
+  /// The protocol type.
+  typedef Protocol protocol_type;
+
+  /// The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+  /// Construct a basic_raw_socket without opening it.
+  /**
+   * This constructor creates a raw socket without opening it. The open()
+   * function must be called before data can be sent or received on the socket.
+   *
+   * @param io_service The io_service object that the raw socket will use
+   * to dispatch handlers for any asynchronous operations performed on the
+   * socket.
+   */
+  explicit basic_raw_socket(boost::asio::io_service& io_service)
+    : basic_socket<Protocol, RawSocketService>(io_service)
+  {
+  }
+
+  /// Construct and open a basic_raw_socket.
+  /**
+   * This constructor creates and opens a raw socket.
+   *
+   * @param io_service The io_service object that the raw socket will use
+   * to dispatch handlers for any asynchronous operations performed on the
+   * socket.
+   *
+   * @param protocol An object specifying protocol parameters to be used.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_raw_socket(boost::asio::io_service& io_service,
+      const protocol_type& protocol)
+    : basic_socket<Protocol, RawSocketService>(io_service, protocol)
+  {
+  }
+
+  /// Construct a basic_raw_socket, opening it and binding it to the given
+  /// local endpoint.
+  /**
+   * This constructor creates a raw socket and automatically opens it bound
+   * to the specified endpoint on the local machine. The protocol used is the
+   * protocol associated with the given endpoint.
+   *
+   * @param io_service The io_service object that the raw socket will use
+   * to dispatch handlers for any asynchronous operations performed on the
+   * socket.
+   *
+   * @param endpoint An endpoint on the local machine to which the raw
+   * socket will be bound.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_raw_socket(boost::asio::io_service& io_service,
+      const endpoint_type& endpoint)
+    : basic_socket<Protocol, RawSocketService>(io_service, endpoint)
+  {
+  }
+
+  /// Construct a basic_raw_socket on an existing native socket.
+  /**
+   * This constructor creates a raw socket object to hold an existing
+   * native socket.
+   *
+   * @param io_service The io_service object that the raw socket will use
+   * to dispatch handlers for any asynchronous operations performed on the
+   * socket.
+   *
+   * @param protocol An object specifying protocol parameters to be used.
+   *
+   * @param native_socket The new underlying socket implementation.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_raw_socket(boost::asio::io_service& io_service,
+      const protocol_type& protocol, const native_handle_type& native_socket)
+    : basic_socket<Protocol, RawSocketService>(
+        io_service, protocol, native_socket)
+  {
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a basic_raw_socket from another.
+  /**
+   * This constructor moves a raw socket from one object to another.
+   *
+   * @param other The other basic_raw_socket object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_raw_socket(io_service&) constructor.
+   */
+  basic_raw_socket(basic_raw_socket&& other)
+    : basic_socket<Protocol, RawSocketService>(
+        BOOST_ASIO_MOVE_CAST(basic_raw_socket)(other))
+  {
+  }
+
+  /// Move-assign a basic_raw_socket from another.
+  /**
+   * This assignment operator moves a raw socket from one object to another.
+   *
+   * @param other The other basic_raw_socket object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_raw_socket(io_service&) constructor.
+   */
+  basic_raw_socket& operator=(basic_raw_socket&& other)
+  {
+    basic_socket<Protocol, RawSocketService>::operator=(
+        BOOST_ASIO_MOVE_CAST(basic_raw_socket)(other));
+    return *this;
+  }
+
+  /// Move-construct a basic_raw_socket from a socket of another protocol type.
+  /**
+   * This constructor moves a raw socket from one object to another.
+   *
+   * @param other The other basic_raw_socket object from which the move will
+   * occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_raw_socket(io_service&) constructor.
+   */
+  template <typename Protocol1, typename RawSocketService1>
+  basic_raw_socket(basic_raw_socket<Protocol1, RawSocketService1>&& other,
+      typename enable_if<is_convertible<Protocol1, Protocol>::value>::type* = 0)
+    : basic_socket<Protocol, RawSocketService>(
+        BOOST_ASIO_MOVE_CAST2(basic_raw_socket<
+          Protocol1, RawSocketService1>)(other))
+  {
+  }
+
+  /// Move-assign a basic_raw_socket from a socket of another protocol type.
+  /**
+   * This assignment operator moves a raw socket from one object to another.
+   *
+   * @param other The other basic_raw_socket object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_raw_socket(io_service&) constructor.
+   */
+  template <typename Protocol1, typename RawSocketService1>
+  typename enable_if<is_convertible<Protocol1, Protocol>::value,
+      basic_raw_socket>::type& operator=(
+        basic_raw_socket<Protocol1, RawSocketService1>&& other)
+  {
+    basic_socket<Protocol, RawSocketService>::operator=(
+        BOOST_ASIO_MOVE_CAST2(basic_raw_socket<
+          Protocol1, RawSocketService1>)(other));
+    return *this;
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Send some data on a connected socket.
+  /**
+   * This function is used to send data on the raw socket. The function call
+   * will block until the data has been sent successfully or an error occurs.
+   *
+   * @param buffers One ore more data buffers to be sent on the socket.
+   *
+   * @returns The number of bytes sent.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The send operation can only be used with a connected socket. Use
+   * the send_to function to send data on an unconnected raw socket.
+   *
+   * @par Example
+   * To send a single data buffer use the @ref buffer function as follows:
+   * @code socket.send(boost::asio::buffer(data, size)); @endcode
+   * See the @ref buffer documentation for information on sending multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t send(const ConstBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().send(
+        this->get_implementation(), buffers, 0, ec);
+    boost::asio::detail::throw_error(ec, "send");
+    return s;
+  }
+
+  /// Send some data on a connected socket.
+  /**
+   * This function is used to send data on the raw socket. The function call
+   * will block until the data has been sent successfully or an error occurs.
+   *
+   * @param buffers One ore more data buffers to be sent on the socket.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @returns The number of bytes sent.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The send operation can only be used with a connected socket. Use
+   * the send_to function to send data on an unconnected raw socket.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t send(const ConstBufferSequence& buffers,
+      socket_base::message_flags flags)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().send(
+        this->get_implementation(), buffers, flags, ec);
+    boost::asio::detail::throw_error(ec, "send");
+    return s;
+  }
+
+  /// Send some data on a connected socket.
+  /**
+   * This function is used to send data on the raw socket. The function call
+   * will block until the data has been sent successfully or an error occurs.
+   *
+   * @param buffers One or more data buffers to be sent on the socket.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes sent.
+   *
+   * @note The send operation can only be used with a connected socket. Use
+   * the send_to function to send data on an unconnected raw socket.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t send(const ConstBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return this->get_service().send(
+        this->get_implementation(), buffers, flags, ec);
+  }
+
+  /// Start an asynchronous send on a connected socket.
+  /**
+   * This function is used to send data on the raw socket. The function call
+   * will block until the data has been sent successfully or an error occurs.
+   *
+   * @param buffers One or more data buffers to be sent on the socket. Although
+   * the buffers object may be copied as necessary, ownership of the underlying
+   * memory blocks is retained by the caller, which must guarantee that they
+   * remain valid until the handler is called.
+   *
+   * @param handler The handler to be called when the send operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes sent.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The async_send operation can only be used with a connected socket.
+   * Use the async_send_to function to send data on an unconnected raw
+   * socket.
+   *
+   * @par Example
+   * To send a single data buffer use the @ref buffer function as follows:
+   * @code
+   * socket.async_send(boost::asio::buffer(data, size), handler);
+   * @endcode
+   * See the @ref buffer documentation for information on sending multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_send(const ConstBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WriteHandler.
+    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+    return this->get_service().async_send(this->get_implementation(),
+        buffers, 0, BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Start an asynchronous send on a connected socket.
+  /**
+   * This function is used to send data on the raw socket. The function call
+   * will block until the data has been sent successfully or an error occurs.
+   *
+   * @param buffers One or more data buffers to be sent on the socket. Although
+   * the buffers object may be copied as necessary, ownership of the underlying
+   * memory blocks is retained by the caller, which must guarantee that they
+   * remain valid until the handler is called.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @param handler The handler to be called when the send operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes sent.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The async_send operation can only be used with a connected socket.
+   * Use the async_send_to function to send data on an unconnected raw
+   * socket.
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_send(const ConstBufferSequence& buffers,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WriteHandler.
+    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+    return this->get_service().async_send(this->get_implementation(),
+        buffers, flags, BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Send raw data to the specified endpoint.
+  /**
+   * This function is used to send raw data to the specified remote endpoint.
+   * The function call will block until the data has been sent successfully or
+   * an error occurs.
+   *
+   * @param buffers One or more data buffers to be sent to the remote endpoint.
+   *
+   * @param destination The remote endpoint to which the data will be sent.
+   *
+   * @returns The number of bytes sent.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @par Example
+   * To send a single data buffer use the @ref buffer function as follows:
+   * @code
+   * boost::asio::ip::udp::endpoint destination(
+   *     boost::asio::ip::address::from_string("1.2.3.4"), 12345);
+   * socket.send_to(boost::asio::buffer(data, size), destination);
+   * @endcode
+   * See the @ref buffer documentation for information on sending multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t send_to(const ConstBufferSequence& buffers,
+      const endpoint_type& destination)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().send_to(
+        this->get_implementation(), buffers, destination, 0, ec);
+    boost::asio::detail::throw_error(ec, "send_to");
+    return s;
+  }
+
+  /// Send raw data to the specified endpoint.
+  /**
+   * This function is used to send raw data to the specified remote endpoint.
+   * The function call will block until the data has been sent successfully or
+   * an error occurs.
+   *
+   * @param buffers One or more data buffers to be sent to the remote endpoint.
+   *
+   * @param destination The remote endpoint to which the data will be sent.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @returns The number of bytes sent.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t send_to(const ConstBufferSequence& buffers,
+      const endpoint_type& destination, socket_base::message_flags flags)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().send_to(
+        this->get_implementation(), buffers, destination, flags, ec);
+    boost::asio::detail::throw_error(ec, "send_to");
+    return s;
+  }
+
+  /// Send raw data to the specified endpoint.
+  /**
+   * This function is used to send raw data to the specified remote endpoint.
+   * The function call will block until the data has been sent successfully or
+   * an error occurs.
+   *
+   * @param buffers One or more data buffers to be sent to the remote endpoint.
+   *
+   * @param destination The remote endpoint to which the data will be sent.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes sent.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t send_to(const ConstBufferSequence& buffers,
+      const endpoint_type& destination, socket_base::message_flags flags,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().send_to(this->get_implementation(),
+        buffers, destination, flags, ec);
+  }
+
+  /// Start an asynchronous send.
+  /**
+   * This function is used to asynchronously send raw data to the specified
+   * remote endpoint. The function call always returns immediately.
+   *
+   * @param buffers One or more data buffers to be sent to the remote endpoint.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param destination The remote endpoint to which the data will be sent.
+   * Copies will be made of the endpoint as required.
+   *
+   * @param handler The handler to be called when the send operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes sent.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @par Example
+   * To send a single data buffer use the @ref buffer function as follows:
+   * @code
+   * boost::asio::ip::udp::endpoint destination(
+   *     boost::asio::ip::address::from_string("1.2.3.4"), 12345);
+   * socket.async_send_to(
+   *     boost::asio::buffer(data, size), destination, handler);
+   * @endcode
+   * See the @ref buffer documentation for information on sending multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_send_to(const ConstBufferSequence& buffers,
+      const endpoint_type& destination,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WriteHandler.
+    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+    return this->get_service().async_send_to(this->get_implementation(),
+        buffers, destination, 0, BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Start an asynchronous send.
+  /**
+   * This function is used to asynchronously send raw data to the specified
+   * remote endpoint. The function call always returns immediately.
+   *
+   * @param buffers One or more data buffers to be sent to the remote endpoint.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @param destination The remote endpoint to which the data will be sent.
+   * Copies will be made of the endpoint as required.
+   *
+   * @param handler The handler to be called when the send operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes sent.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_send_to(const ConstBufferSequence& buffers,
+      const endpoint_type& destination, socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WriteHandler.
+    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+    return this->get_service().async_send_to(
+        this->get_implementation(), buffers, destination, flags,
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Receive some data on a connected socket.
+  /**
+   * This function is used to receive data on the raw socket. The function
+   * call will block until data has been received successfully or an error
+   * occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @returns The number of bytes received.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The receive operation can only be used with a connected socket. Use
+   * the receive_from function to receive data on an unconnected raw
+   * socket.
+   *
+   * @par Example
+   * To receive into a single data buffer use the @ref buffer function as
+   * follows:
+   * @code socket.receive(boost::asio::buffer(data, size)); @endcode
+   * See the @ref buffer documentation for information on receiving into
+   * multiple buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive(const MutableBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().receive(
+        this->get_implementation(), buffers, 0, ec);
+    boost::asio::detail::throw_error(ec, "receive");
+    return s;
+  }
+
+  /// Receive some data on a connected socket.
+  /**
+   * This function is used to receive data on the raw socket. The function
+   * call will block until data has been received successfully or an error
+   * occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @param flags Flags specifying how the receive call is to be made.
+   *
+   * @returns The number of bytes received.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The receive operation can only be used with a connected socket. Use
+   * the receive_from function to receive data on an unconnected raw
+   * socket.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive(const MutableBufferSequence& buffers,
+      socket_base::message_flags flags)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().receive(
+        this->get_implementation(), buffers, flags, ec);
+    boost::asio::detail::throw_error(ec, "receive");
+    return s;
+  }
+
+  /// Receive some data on a connected socket.
+  /**
+   * This function is used to receive data on the raw socket. The function
+   * call will block until data has been received successfully or an error
+   * occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @param flags Flags specifying how the receive call is to be made.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes received.
+   *
+   * @note The receive operation can only be used with a connected socket. Use
+   * the receive_from function to receive data on an unconnected raw
+   * socket.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive(const MutableBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return this->get_service().receive(
+        this->get_implementation(), buffers, flags, ec);
+  }
+
+  /// Start an asynchronous receive on a connected socket.
+  /**
+   * This function is used to asynchronously receive data from the raw
+   * socket. The function call always returns immediately.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param handler The handler to be called when the receive operation
+   * completes. Copies will be made of the handler as required. The function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes received.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The async_receive operation can only be used with a connected socket.
+   * Use the async_receive_from function to receive data on an unconnected
+   * raw socket.
+   *
+   * @par Example
+   * To receive into a single data buffer use the @ref buffer function as
+   * follows:
+   * @code
+   * socket.async_receive(boost::asio::buffer(data, size), handler);
+   * @endcode
+   * See the @ref buffer documentation for information on receiving into
+   * multiple buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive(const MutableBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    return this->get_service().async_receive(this->get_implementation(),
+        buffers, 0, BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+
+  /// Start an asynchronous receive on a connected socket.
+  /**
+   * This function is used to asynchronously receive data from the raw
+   * socket. The function call always returns immediately.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param flags Flags specifying how the receive call is to be made.
+   *
+   * @param handler The handler to be called when the receive operation
+   * completes. Copies will be made of the handler as required. The function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes received.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The async_receive operation can only be used with a connected socket.
+   * Use the async_receive_from function to receive data on an unconnected
+   * raw socket.
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive(const MutableBufferSequence& buffers,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    return this->get_service().async_receive(this->get_implementation(),
+        buffers, flags, BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+
+  /// Receive raw data with the endpoint of the sender.
+  /**
+   * This function is used to receive raw data. The function call will block
+   * until data has been received successfully or an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @param sender_endpoint An endpoint object that receives the endpoint of
+   * the remote sender of the data.
+   *
+   * @returns The number of bytes received.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @par Example
+   * To receive into a single data buffer use the @ref buffer function as
+   * follows:
+   * @code
+   * boost::asio::ip::udp::endpoint sender_endpoint;
+   * socket.receive_from(
+   *     boost::asio::buffer(data, size), sender_endpoint);
+   * @endcode
+   * See the @ref buffer documentation for information on receiving into
+   * multiple buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive_from(const MutableBufferSequence& buffers,
+      endpoint_type& sender_endpoint)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().receive_from(
+        this->get_implementation(), buffers, sender_endpoint, 0, ec);
+    boost::asio::detail::throw_error(ec, "receive_from");
+    return s;
+  }
+  
+  /// Receive raw data with the endpoint of the sender.
+  /**
+   * This function is used to receive raw data. The function call will block
+   * until data has been received successfully or an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @param sender_endpoint An endpoint object that receives the endpoint of
+   * the remote sender of the data.
+   *
+   * @param flags Flags specifying how the receive call is to be made.
+   *
+   * @returns The number of bytes received.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive_from(const MutableBufferSequence& buffers,
+      endpoint_type& sender_endpoint, socket_base::message_flags flags)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().receive_from(
+        this->get_implementation(), buffers, sender_endpoint, flags, ec);
+    boost::asio::detail::throw_error(ec, "receive_from");
+    return s;
+  }
+  
+  /// Receive raw data with the endpoint of the sender.
+  /**
+   * This function is used to receive raw data. The function call will block
+   * until data has been received successfully or an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @param sender_endpoint An endpoint object that receives the endpoint of
+   * the remote sender of the data.
+   *
+   * @param flags Flags specifying how the receive call is to be made.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes received.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive_from(const MutableBufferSequence& buffers,
+      endpoint_type& sender_endpoint, socket_base::message_flags flags,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().receive_from(this->get_implementation(),
+        buffers, sender_endpoint, flags, ec);
+  }
+
+  /// Start an asynchronous receive.
+  /**
+   * This function is used to asynchronously receive raw data. The function
+   * call always returns immediately.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param sender_endpoint An endpoint object that receives the endpoint of
+   * the remote sender of the data. Ownership of the sender_endpoint object
+   * is retained by the caller, which must guarantee that it is valid until the
+   * handler is called.
+   *
+   * @param handler The handler to be called when the receive operation
+   * completes. Copies will be made of the handler as required. The function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes received.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @par Example
+   * To receive into a single data buffer use the @ref buffer function as
+   * follows:
+   * @code socket.async_receive_from(
+   *     boost::asio::buffer(data, size), 0, sender_endpoint, handler); @endcode
+   * See the @ref buffer documentation for information on receiving into
+   * multiple buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive_from(const MutableBufferSequence& buffers,
+      endpoint_type& sender_endpoint,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    return this->get_service().async_receive_from(
+        this->get_implementation(), buffers, sender_endpoint, 0,
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+
+  /// Start an asynchronous receive.
+  /**
+   * This function is used to asynchronously receive raw data. The function
+   * call always returns immediately.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param sender_endpoint An endpoint object that receives the endpoint of
+   * the remote sender of the data. Ownership of the sender_endpoint object
+   * is retained by the caller, which must guarantee that it is valid until the
+   * handler is called.
+   *
+   * @param flags Flags specifying how the receive call is to be made.
+   *
+   * @param handler The handler to be called when the receive operation
+   * completes. Copies will be made of the handler as required. The function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes received.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive_from(const MutableBufferSequence& buffers,
+      endpoint_type& sender_endpoint, socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    return this->get_service().async_receive_from(
+        this->get_implementation(), buffers, sender_endpoint, flags,
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_BASIC_RAW_SOCKET_HPP
diff --git a/ext/patches/boost/asio/basic_seq_packet_socket.hpp b/ext/patches/boost/asio/basic_seq_packet_socket.hpp
new file mode 100644
index 0000000..92a5026
--- /dev/null
+++ b/ext/patches/boost/asio/basic_seq_packet_socket.hpp
@@ -0,0 +1,567 @@
+//
+// basic_seq_packet_socket.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BASIC_SEQ_PACKET_SOCKET_HPP
+#define BOOST_ASIO_BASIC_SEQ_PACKET_SOCKET_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/basic_socket.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/seq_packet_socket_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Provides sequenced packet socket functionality.
+/**
+ * The basic_seq_packet_socket class template provides asynchronous and blocking
+ * sequenced packet socket functionality.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ */
+template <typename Protocol,
+    typename SeqPacketSocketService = seq_packet_socket_service<Protocol> >
+class basic_seq_packet_socket
+  : public basic_socket<Protocol, SeqPacketSocketService>
+{
+public:
+  /// (Deprecated: Use native_handle_type.) The native representation of a
+  /// socket.
+  typedef typename SeqPacketSocketService::native_handle_type native_type;
+
+  /// The native representation of a socket.
+  typedef typename SeqPacketSocketService::native_handle_type
+    native_handle_type;
+
+  /// The protocol type.
+  typedef Protocol protocol_type;
+
+  /// The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+  /// Construct a basic_seq_packet_socket without opening it.
+  /**
+   * This constructor creates a sequenced packet socket without opening it. The
+   * socket needs to be opened and then connected or accepted before data can
+   * be sent or received on it.
+   *
+   * @param io_service The io_service object that the sequenced packet socket
+   * will use to dispatch handlers for any asynchronous operations performed on
+   * the socket.
+   */
+  explicit basic_seq_packet_socket(boost::asio::io_service& io_service)
+    : basic_socket<Protocol, SeqPacketSocketService>(io_service)
+  {
+  }
+
+  /// Construct and open a basic_seq_packet_socket.
+  /**
+   * This constructor creates and opens a sequenced_packet socket. The socket
+   * needs to be connected or accepted before data can be sent or received on
+   * it.
+   *
+   * @param io_service The io_service object that the sequenced packet socket
+   * will use to dispatch handlers for any asynchronous operations performed on
+   * the socket.
+   *
+   * @param protocol An object specifying protocol parameters to be used.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_seq_packet_socket(boost::asio::io_service& io_service,
+      const protocol_type& protocol)
+    : basic_socket<Protocol, SeqPacketSocketService>(io_service, protocol)
+  {
+  }
+
+  /// Construct a basic_seq_packet_socket, opening it and binding it to the
+  /// given local endpoint.
+  /**
+   * This constructor creates a sequenced packet socket and automatically opens
+   * it bound to the specified endpoint on the local machine. The protocol used
+   * is the protocol associated with the given endpoint.
+   *
+   * @param io_service The io_service object that the sequenced packet socket
+   * will use to dispatch handlers for any asynchronous operations performed on
+   * the socket.
+   *
+   * @param endpoint An endpoint on the local machine to which the sequenced
+   * packet socket will be bound.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_seq_packet_socket(boost::asio::io_service& io_service,
+      const endpoint_type& endpoint)
+    : basic_socket<Protocol, SeqPacketSocketService>(io_service, endpoint)
+  {
+  }
+
+  /// Construct a basic_seq_packet_socket on an existing native socket.
+  /**
+   * This constructor creates a sequenced packet socket object to hold an
+   * existing native socket.
+   *
+   * @param io_service The io_service object that the sequenced packet socket
+   * will use to dispatch handlers for any asynchronous operations performed on
+   * the socket.
+   *
+   * @param protocol An object specifying protocol parameters to be used.
+   *
+   * @param native_socket The new underlying socket implementation.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_seq_packet_socket(boost::asio::io_service& io_service,
+      const protocol_type& protocol, const native_handle_type& native_socket)
+    : basic_socket<Protocol, SeqPacketSocketService>(
+        io_service, protocol, native_socket)
+  {
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a basic_seq_packet_socket from another.
+  /**
+   * This constructor moves a sequenced packet socket from one object to
+   * another.
+   *
+   * @param other The other basic_seq_packet_socket object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_seq_packet_socket(io_service&) constructor.
+   */
+  basic_seq_packet_socket(basic_seq_packet_socket&& other)
+    : basic_socket<Protocol, SeqPacketSocketService>(
+        BOOST_ASIO_MOVE_CAST(basic_seq_packet_socket)(other))
+  {
+  }
+
+  /// Move-assign a basic_seq_packet_socket from another.
+  /**
+   * This assignment operator moves a sequenced packet socket from one object to
+   * another.
+   *
+   * @param other The other basic_seq_packet_socket object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_seq_packet_socket(io_service&) constructor.
+   */
+  basic_seq_packet_socket& operator=(basic_seq_packet_socket&& other)
+  {
+    basic_socket<Protocol, SeqPacketSocketService>::operator=(
+        BOOST_ASIO_MOVE_CAST(basic_seq_packet_socket)(other));
+    return *this;
+  }
+
+  /// Move-construct a basic_seq_packet_socket from a socket of another protocol
+  /// type.
+  /**
+   * This constructor moves a sequenced packet socket from one object to
+   * another.
+   *
+   * @param other The other basic_seq_packet_socket object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_seq_packet_socket(io_service&) constructor.
+   */
+  template <typename Protocol1, typename SeqPacketSocketService1>
+  basic_seq_packet_socket(
+      basic_seq_packet_socket<Protocol1, SeqPacketSocketService1>&& other,
+      typename enable_if<is_convertible<Protocol1, Protocol>::value>::type* = 0)
+    : basic_socket<Protocol, SeqPacketSocketService>(
+        BOOST_ASIO_MOVE_CAST2(basic_seq_packet_socket<
+          Protocol1, SeqPacketSocketService1>)(other))
+  {
+  }
+
+  /// Move-assign a basic_seq_packet_socket from a socket of another protocol
+  /// type.
+  /**
+   * This assignment operator moves a sequenced packet socket from one object to
+   * another.
+   *
+   * @param other The other basic_seq_packet_socket object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_seq_packet_socket(io_service&) constructor.
+   */
+  template <typename Protocol1, typename SeqPacketSocketService1>
+  typename enable_if<is_convertible<Protocol1, Protocol>::value,
+      basic_seq_packet_socket>::type& operator=(
+        basic_seq_packet_socket<Protocol1, SeqPacketSocketService1>&& other)
+  {
+    basic_socket<Protocol, SeqPacketSocketService>::operator=(
+        BOOST_ASIO_MOVE_CAST2(basic_seq_packet_socket<
+          Protocol1, SeqPacketSocketService1>)(other));
+    return *this;
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Send some data on the socket.
+  /**
+   * This function is used to send data on the sequenced packet socket. The
+   * function call will block until the data has been sent successfully, or an
+   * until error occurs.
+   *
+   * @param buffers One or more data buffers to be sent on the socket.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @returns The number of bytes sent.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @par Example
+   * To send a single data buffer use the @ref buffer function as follows:
+   * @code
+   * socket.send(boost::asio::buffer(data, size), 0);
+   * @endcode
+   * See the @ref buffer documentation for information on sending multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t send(const ConstBufferSequence& buffers,
+      socket_base::message_flags flags)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().send(
+        this->get_implementation(), buffers, flags, ec);
+    boost::asio::detail::throw_error(ec, "send");
+    return s;
+  }
+
+  /// Send some data on the socket.
+  /**
+   * This function is used to send data on the sequenced packet socket. The
+   * function call will block the data has been sent successfully, or an until
+   * error occurs.
+   *
+   * @param buffers One or more data buffers to be sent on the socket.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes sent. Returns 0 if an error occurred.
+   *
+   * @note The send operation may not transmit all of the data to the peer.
+   * Consider using the @ref write function if you need to ensure that all data
+   * is written before the blocking operation completes.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t send(const ConstBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return this->get_service().send(
+        this->get_implementation(), buffers, flags, ec);
+  }
+
+  /// Start an asynchronous send.
+  /**
+   * This function is used to asynchronously send data on the sequenced packet
+   * socket. The function call always returns immediately.
+   *
+   * @param buffers One or more data buffers to be sent on the socket. Although
+   * the buffers object may be copied as necessary, ownership of the underlying
+   * memory blocks is retained by the caller, which must guarantee that they
+   * remain valid until the handler is called.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @param handler The handler to be called when the send operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes sent.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @par Example
+   * To send a single data buffer use the @ref buffer function as follows:
+   * @code
+   * socket.async_send(boost::asio::buffer(data, size), 0, handler);
+   * @endcode
+   * See the @ref buffer documentation for information on sending multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_send(const ConstBufferSequence& buffers,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WriteHandler.
+    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+    return this->get_service().async_send(this->get_implementation(),
+        buffers, flags, BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Receive some data on the socket.
+  /**
+   * This function is used to receive data on the sequenced packet socket. The
+   * function call will block until data has been received successfully, or
+   * until an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @param out_flags After the receive call completes, contains flags
+   * associated with the received data. For example, if the
+   * socket_base::message_end_of_record bit is set then the received data marks
+   * the end of a record.
+   *
+   * @returns The number of bytes received.
+   *
+   * @throws boost::system::system_error Thrown on failure. An error code of
+   * boost::asio::error::eof indicates that the connection was closed by the
+   * peer.
+   *
+   * @par Example
+   * To receive into a single data buffer use the @ref buffer function as
+   * follows:
+   * @code
+   * socket.receive(boost::asio::buffer(data, size), out_flags);
+   * @endcode
+   * See the @ref buffer documentation for information on receiving into
+   * multiple buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive(const MutableBufferSequence& buffers,
+      socket_base::message_flags& out_flags)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().receive(
+        this->get_implementation(), buffers, 0, out_flags, ec);
+    boost::asio::detail::throw_error(ec, "receive");
+    return s;
+  }
+
+  /// Receive some data on the socket.
+  /**
+   * This function is used to receive data on the sequenced packet socket. The
+   * function call will block until data has been received successfully, or
+   * until an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @param in_flags Flags specifying how the receive call is to be made.
+   *
+   * @param out_flags After the receive call completes, contains flags
+   * associated with the received data. For example, if the
+   * socket_base::message_end_of_record bit is set then the received data marks
+   * the end of a record.
+   *
+   * @returns The number of bytes received.
+   *
+   * @throws boost::system::system_error Thrown on failure. An error code of
+   * boost::asio::error::eof indicates that the connection was closed by the
+   * peer.
+   *
+   * @note The receive operation may not receive all of the requested number of
+   * bytes. Consider using the @ref read function if you need to ensure that the
+   * requested amount of data is read before the blocking operation completes.
+   *
+   * @par Example
+   * To receive into a single data buffer use the @ref buffer function as
+   * follows:
+   * @code
+   * socket.receive(boost::asio::buffer(data, size), 0, out_flags);
+   * @endcode
+   * See the @ref buffer documentation for information on receiving into
+   * multiple buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive(const MutableBufferSequence& buffers,
+      socket_base::message_flags in_flags,
+      socket_base::message_flags& out_flags)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().receive(
+        this->get_implementation(), buffers, in_flags, out_flags, ec);
+    boost::asio::detail::throw_error(ec, "receive");
+    return s;
+  }
+
+  /// Receive some data on a connected socket.
+  /**
+   * This function is used to receive data on the sequenced packet socket. The
+   * function call will block until data has been received successfully, or
+   * until an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @param in_flags Flags specifying how the receive call is to be made.
+   *
+   * @param out_flags After the receive call completes, contains flags
+   * associated with the received data. For example, if the
+   * socket_base::message_end_of_record bit is set then the received data marks
+   * the end of a record.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes received. Returns 0 if an error occurred.
+   *
+   * @note The receive operation may not receive all of the requested number of
+   * bytes. Consider using the @ref read function if you need to ensure that the
+   * requested amount of data is read before the blocking operation completes.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive(const MutableBufferSequence& buffers,
+      socket_base::message_flags in_flags,
+      socket_base::message_flags& out_flags, boost::system::error_code& ec)
+  {
+    return this->get_service().receive(this->get_implementation(),
+        buffers, in_flags, out_flags, ec);
+  }
+
+  /// Start an asynchronous receive.
+  /**
+   * This function is used to asynchronously receive data from the sequenced
+   * packet socket. The function call always returns immediately.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param out_flags Once the asynchronous operation completes, contains flags
+   * associated with the received data. For example, if the
+   * socket_base::message_end_of_record bit is set then the received data marks
+   * the end of a record. The caller must guarantee that the referenced
+   * variable remains valid until the handler is called.
+   *
+   * @param handler The handler to be called when the receive operation
+   * completes. Copies will be made of the handler as required. The function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes received.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @par Example
+   * To receive into a single data buffer use the @ref buffer function as
+   * follows:
+   * @code
+   * socket.async_receive(boost::asio::buffer(data, size), out_flags, handler);
+   * @endcode
+   * See the @ref buffer documentation for information on receiving into
+   * multiple buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive(const MutableBufferSequence& buffers,
+      socket_base::message_flags& out_flags,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    return this->get_service().async_receive(
+        this->get_implementation(), buffers, 0, out_flags,
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+
+  /// Start an asynchronous receive.
+  /**
+   * This function is used to asynchronously receive data from the sequenced
+   * data socket. The function call always returns immediately.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param in_flags Flags specifying how the receive call is to be made.
+   *
+   * @param out_flags Once the asynchronous operation completes, contains flags
+   * associated with the received data. For example, if the
+   * socket_base::message_end_of_record bit is set then the received data marks
+   * the end of a record. The caller must guarantee that the referenced
+   * variable remains valid until the handler is called.
+   *
+   * @param handler The handler to be called when the receive operation
+   * completes. Copies will be made of the handler as required. The function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes received.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @par Example
+   * To receive into a single data buffer use the @ref buffer function as
+   * follows:
+   * @code
+   * socket.async_receive(
+   *     boost::asio::buffer(data, size),
+   *     0, out_flags, handler);
+   * @endcode
+   * See the @ref buffer documentation for information on receiving into
+   * multiple buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive(const MutableBufferSequence& buffers,
+      socket_base::message_flags in_flags,
+      socket_base::message_flags& out_flags,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    return this->get_service().async_receive(
+        this->get_implementation(), buffers, in_flags, out_flags,
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_BASIC_SEQ_PACKET_SOCKET_HPP
diff --git a/ext/patches/boost/asio/basic_serial_port.hpp b/ext/patches/boost/asio/basic_serial_port.hpp
new file mode 100644
index 0000000..b7278e0
--- /dev/null
+++ b/ext/patches/boost/asio/basic_serial_port.hpp
@@ -0,0 +1,697 @@
+//
+// basic_serial_port.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2008 Rep Invariant Systems, Inc. (info at repinvariant.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BASIC_SERIAL_PORT_HPP
+#define BOOST_ASIO_BASIC_SERIAL_PORT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_SERIAL_PORT) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <string>
+#include <boost/asio/basic_io_object.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/serial_port_base.hpp>
+#include <boost/asio/serial_port_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Provides serial port functionality.
+/**
+ * The basic_serial_port class template provides functionality that is common
+ * to all serial ports.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ */
+template <typename SerialPortService = serial_port_service>
+class basic_serial_port
+  : public basic_io_object<SerialPortService>,
+    public serial_port_base
+{
+public:
+  /// (Deprecated: Use native_handle_type.) The native representation of a
+  /// serial port.
+  typedef typename SerialPortService::native_handle_type native_type;
+
+  /// The native representation of a serial port.
+  typedef typename SerialPortService::native_handle_type native_handle_type;
+
+  /// A basic_serial_port is always the lowest layer.
+  typedef basic_serial_port<SerialPortService> lowest_layer_type;
+
+  /// Construct a basic_serial_port without opening it.
+  /**
+   * This constructor creates a serial port without opening it.
+   *
+   * @param io_service The io_service object that the serial port will use to
+   * dispatch handlers for any asynchronous operations performed on the port.
+   */
+  explicit basic_serial_port(boost::asio::io_service& io_service)
+    : basic_io_object<SerialPortService>(io_service)
+  {
+  }
+
+  /// Construct and open a basic_serial_port.
+  /**
+   * This constructor creates and opens a serial port for the specified device
+   * name.
+   *
+   * @param io_service The io_service object that the serial port will use to
+   * dispatch handlers for any asynchronous operations performed on the port.
+   *
+   * @param device The platform-specific device name for this serial
+   * port.
+   */
+  explicit basic_serial_port(boost::asio::io_service& io_service,
+      const char* device)
+    : basic_io_object<SerialPortService>(io_service)
+  {
+    boost::system::error_code ec;
+    this->get_service().open(this->get_implementation(), device, ec);
+    boost::asio::detail::throw_error(ec, "open");
+  }
+
+  /// Construct and open a basic_serial_port.
+  /**
+   * This constructor creates and opens a serial port for the specified device
+   * name.
+   *
+   * @param io_service The io_service object that the serial port will use to
+   * dispatch handlers for any asynchronous operations performed on the port.
+   *
+   * @param device The platform-specific device name for this serial
+   * port.
+   */
+  explicit basic_serial_port(boost::asio::io_service& io_service,
+      const std::string& device)
+    : basic_io_object<SerialPortService>(io_service)
+  {
+    boost::system::error_code ec;
+    this->get_service().open(this->get_implementation(), device, ec);
+    boost::asio::detail::throw_error(ec, "open");
+  }
+
+  /// Construct a basic_serial_port on an existing native serial port.
+  /**
+   * This constructor creates a serial port object to hold an existing native
+   * serial port.
+   *
+   * @param io_service The io_service object that the serial port will use to
+   * dispatch handlers for any asynchronous operations performed on the port.
+   *
+   * @param native_serial_port A native serial port.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_serial_port(boost::asio::io_service& io_service,
+      const native_handle_type& native_serial_port)
+    : basic_io_object<SerialPortService>(io_service)
+  {
+    boost::system::error_code ec;
+    this->get_service().assign(this->get_implementation(),
+        native_serial_port, ec);
+    boost::asio::detail::throw_error(ec, "assign");
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a basic_serial_port from another.
+  /**
+   * This constructor moves a serial port from one object to another.
+   *
+   * @param other The other basic_serial_port object from which the move will
+   * occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_serial_port(io_service&) constructor.
+   */
+  basic_serial_port(basic_serial_port&& other)
+    : basic_io_object<SerialPortService>(
+        BOOST_ASIO_MOVE_CAST(basic_serial_port)(other))
+  {
+  }
+
+  /// Move-assign a basic_serial_port from another.
+  /**
+   * This assignment operator moves a serial port from one object to another.
+   *
+   * @param other The other basic_serial_port object from which the move will
+   * occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_serial_port(io_service&) constructor.
+   */
+  basic_serial_port& operator=(basic_serial_port&& other)
+  {
+    basic_io_object<SerialPortService>::operator=(
+        BOOST_ASIO_MOVE_CAST(basic_serial_port)(other));
+    return *this;
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Get a reference to the lowest layer.
+  /**
+   * This function returns a reference to the lowest layer in a stack of
+   * layers. Since a basic_serial_port cannot contain any further layers, it
+   * simply returns a reference to itself.
+   *
+   * @return A reference to the lowest layer in the stack of layers. Ownership
+   * is not transferred to the caller.
+   */
+  lowest_layer_type& lowest_layer()
+  {
+    return *this;
+  }
+
+  /// Get a const reference to the lowest layer.
+  /**
+   * This function returns a const reference to the lowest layer in a stack of
+   * layers. Since a basic_serial_port cannot contain any further layers, it
+   * simply returns a reference to itself.
+   *
+   * @return A const reference to the lowest layer in the stack of layers.
+   * Ownership is not transferred to the caller.
+   */
+  const lowest_layer_type& lowest_layer() const
+  {
+    return *this;
+  }
+
+  /// Open the serial port using the specified device name.
+  /**
+   * This function opens the serial port for the specified device name.
+   *
+   * @param device The platform-specific device name.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void open(const std::string& device)
+  {
+    boost::system::error_code ec;
+    this->get_service().open(this->get_implementation(), device, ec);
+    boost::asio::detail::throw_error(ec, "open");
+  }
+
+  /// Open the serial port using the specified device name.
+  /**
+   * This function opens the serial port using the given platform-specific
+   * device name.
+   *
+   * @param device The platform-specific device name.
+   *
+   * @param ec Set the indicate what error occurred, if any.
+   */
+  boost::system::error_code open(const std::string& device,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().open(this->get_implementation(), device, ec);
+  }
+
+  /// Assign an existing native serial port to the serial port.
+  /*
+   * This function opens the serial port to hold an existing native serial port.
+   *
+   * @param native_serial_port A native serial port.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void assign(const native_handle_type& native_serial_port)
+  {
+    boost::system::error_code ec;
+    this->get_service().assign(this->get_implementation(),
+        native_serial_port, ec);
+    boost::asio::detail::throw_error(ec, "assign");
+  }
+
+  /// Assign an existing native serial port to the serial port.
+  /*
+   * This function opens the serial port to hold an existing native serial port.
+   *
+   * @param native_serial_port A native serial port.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code assign(const native_handle_type& native_serial_port,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().assign(this->get_implementation(),
+        native_serial_port, ec);
+  }
+
+  /// Determine whether the serial port is open.
+  bool is_open() const
+  {
+    return this->get_service().is_open(this->get_implementation());
+  }
+
+  /// Close the serial port.
+  /**
+   * This function is used to close the serial port. Any asynchronous read or
+   * write operations will be cancelled immediately, and will complete with the
+   * boost::asio::error::operation_aborted error.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void close()
+  {
+    boost::system::error_code ec;
+    this->get_service().close(this->get_implementation(), ec);
+    boost::asio::detail::throw_error(ec, "close");
+  }
+
+  /// Close the serial port.
+  /**
+   * This function is used to close the serial port. Any asynchronous read or
+   * write operations will be cancelled immediately, and will complete with the
+   * boost::asio::error::operation_aborted error.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code close(boost::system::error_code& ec)
+  {
+    return this->get_service().close(this->get_implementation(), ec);
+  }
+
+  /// (Deprecated: Use native_handle().) Get the native serial port
+  /// representation.
+  /**
+   * This function may be used to obtain the underlying representation of the
+   * serial port. This is intended to allow access to native serial port
+   * functionality that is not otherwise provided.
+   */
+  native_type native()
+  {
+    return this->get_service().native_handle(this->get_implementation());
+  }
+
+  /// Get the native serial port representation.
+  /**
+   * This function may be used to obtain the underlying representation of the
+   * serial port. This is intended to allow access to native serial port
+   * functionality that is not otherwise provided.
+   */
+  native_handle_type native_handle()
+  {
+    return this->get_service().native_handle(this->get_implementation());
+  }
+
+  /// Cancel all asynchronous operations associated with the serial port.
+  /**
+   * This function causes all outstanding asynchronous read or write operations
+   * to finish immediately, and the handlers for cancelled operations will be
+   * passed the boost::asio::error::operation_aborted error.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void cancel()
+  {
+    boost::system::error_code ec;
+    this->get_service().cancel(this->get_implementation(), ec);
+    boost::asio::detail::throw_error(ec, "cancel");
+  }
+
+  /// Cancel all asynchronous operations associated with the serial port.
+  /**
+   * This function causes all outstanding asynchronous read or write operations
+   * to finish immediately, and the handlers for cancelled operations will be
+   * passed the boost::asio::error::operation_aborted error.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code cancel(boost::system::error_code& ec)
+  {
+    return this->get_service().cancel(this->get_implementation(), ec);
+  }
+
+  /// Send a break sequence to the serial port.
+  /**
+   * This function causes a break sequence of platform-specific duration to be
+   * sent out the serial port.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void send_break()
+  {
+    boost::system::error_code ec;
+    this->get_service().send_break(this->get_implementation(), ec);
+    boost::asio::detail::throw_error(ec, "send_break");
+  }
+
+  /// Send a break sequence to the serial port.
+  /**
+   * This function causes a break sequence of platform-specific duration to be
+   * sent out the serial port.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code send_break(boost::system::error_code& ec)
+  {
+    return this->get_service().send_break(this->get_implementation(), ec);
+  }
+
+  /// Set an option on the serial port.
+  /**
+   * This function is used to set an option on the serial port.
+   *
+   * @param option The option value to be set on the serial port.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @sa SettableSerialPortOption @n
+   * boost::asio::serial_port_base::baud_rate @n
+   * boost::asio::serial_port_base::flow_control @n
+   * boost::asio::serial_port_base::parity @n
+   * boost::asio::serial_port_base::stop_bits @n
+   * boost::asio::serial_port_base::character_size
+   */
+  template <typename SettableSerialPortOption>
+  void set_option(const SettableSerialPortOption& option)
+  {
+    boost::system::error_code ec;
+    this->get_service().set_option(this->get_implementation(), option, ec);
+    boost::asio::detail::throw_error(ec, "set_option");
+  }
+
+  /// Set an option on the serial port.
+  /**
+   * This function is used to set an option on the serial port.
+   *
+   * @param option The option value to be set on the serial port.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @sa SettableSerialPortOption @n
+   * boost::asio::serial_port_base::baud_rate @n
+   * boost::asio::serial_port_base::flow_control @n
+   * boost::asio::serial_port_base::parity @n
+   * boost::asio::serial_port_base::stop_bits @n
+   * boost::asio::serial_port_base::character_size
+   */
+  template <typename SettableSerialPortOption>
+  boost::system::error_code set_option(const SettableSerialPortOption& option,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().set_option(
+        this->get_implementation(), option, ec);
+  }
+
+  /// Get an option from the serial port.
+  /**
+   * This function is used to get the current value of an option on the serial
+   * port.
+   *
+   * @param option The option value to be obtained from the serial port.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @sa GettableSerialPortOption @n
+   * boost::asio::serial_port_base::baud_rate @n
+   * boost::asio::serial_port_base::flow_control @n
+   * boost::asio::serial_port_base::parity @n
+   * boost::asio::serial_port_base::stop_bits @n
+   * boost::asio::serial_port_base::character_size
+   */
+  template <typename GettableSerialPortOption>
+  void get_option(GettableSerialPortOption& option)
+  {
+    boost::system::error_code ec;
+    this->get_service().get_option(this->get_implementation(), option, ec);
+    boost::asio::detail::throw_error(ec, "get_option");
+  }
+
+  /// Get an option from the serial port.
+  /**
+   * This function is used to get the current value of an option on the serial
+   * port.
+   *
+   * @param option The option value to be obtained from the serial port.
+   *
+   * @param ec Set to indicate what error occured, if any.
+   *
+   * @sa GettableSerialPortOption @n
+   * boost::asio::serial_port_base::baud_rate @n
+   * boost::asio::serial_port_base::flow_control @n
+   * boost::asio::serial_port_base::parity @n
+   * boost::asio::serial_port_base::stop_bits @n
+   * boost::asio::serial_port_base::character_size
+   */
+  template <typename GettableSerialPortOption>
+  boost::system::error_code get_option(GettableSerialPortOption& option,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().get_option(
+        this->get_implementation(), option, ec);
+  }
+
+  /// Write some data to the serial port.
+  /**
+   * This function is used to write data to the serial port. The function call
+   * will block until one or more bytes of the data has been written
+   * successfully, or until an error occurs.
+   *
+   * @param buffers One or more data buffers to be written to the serial port.
+   *
+   * @returns The number of bytes written.
+   *
+   * @throws boost::system::system_error Thrown on failure. An error code of
+   * boost::asio::error::eof indicates that the connection was closed by the
+   * peer.
+   *
+   * @note The write_some operation may not transmit all of the data to the
+   * peer. Consider using the @ref write function if you need to ensure that
+   * all data is written before the blocking operation completes.
+   *
+   * @par Example
+   * To write a single data buffer use the @ref buffer function as follows:
+   * @code
+   * serial_port.write_some(boost::asio::buffer(data, size));
+   * @endcode
+   * See the @ref buffer documentation for information on writing multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().write_some(
+        this->get_implementation(), buffers, ec);
+    boost::asio::detail::throw_error(ec, "write_some");
+    return s;
+  }
+
+  /// Write some data to the serial port.
+  /**
+   * This function is used to write data to the serial port. The function call
+   * will block until one or more bytes of the data has been written
+   * successfully, or until an error occurs.
+   *
+   * @param buffers One or more data buffers to be written to the serial port.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes written. Returns 0 if an error occurred.
+   *
+   * @note The write_some operation may not transmit all of the data to the
+   * peer. Consider using the @ref write function if you need to ensure that
+   * all data is written before the blocking operation completes.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().write_some(
+        this->get_implementation(), buffers, ec);
+  }
+
+  /// Start an asynchronous write.
+  /**
+   * This function is used to asynchronously write data to the serial port.
+   * The function call always returns immediately.
+   *
+   * @param buffers One or more data buffers to be written to the serial port.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param handler The handler to be called when the write operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes written.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The write operation may not transmit all of the data to the peer.
+   * Consider using the @ref async_write function if you need to ensure that all
+   * data is written before the asynchronous operation completes.
+   *
+   * @par Example
+   * To write a single data buffer use the @ref buffer function as follows:
+   * @code
+   * serial_port.async_write_some(boost::asio::buffer(data, size), handler);
+   * @endcode
+   * See the @ref buffer documentation for information on writing multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_write_some(const ConstBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WriteHandler.
+    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+    return this->get_service().async_write_some(this->get_implementation(),
+        buffers, BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Read some data from the serial port.
+  /**
+   * This function is used to read data from the serial port. The function
+   * call will block until one or more bytes of data has been read successfully,
+   * or until an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be read.
+   *
+   * @returns The number of bytes read.
+   *
+   * @throws boost::system::system_error Thrown on failure. An error code of
+   * boost::asio::error::eof indicates that the connection was closed by the
+   * peer.
+   *
+   * @note The read_some operation may not read all of the requested number of
+   * bytes. Consider using the @ref read function if you need to ensure that
+   * the requested amount of data is read before the blocking operation
+   * completes.
+   *
+   * @par Example
+   * To read into a single data buffer use the @ref buffer function as follows:
+   * @code
+   * serial_port.read_some(boost::asio::buffer(data, size));
+   * @endcode
+   * See the @ref buffer documentation for information on reading into multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().read_some(
+        this->get_implementation(), buffers, ec);
+    boost::asio::detail::throw_error(ec, "read_some");
+    return s;
+  }
+
+  /// Read some data from the serial port.
+  /**
+   * This function is used to read data from the serial port. The function
+   * call will block until one or more bytes of data has been read successfully,
+   * or until an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be read.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes read. Returns 0 if an error occurred.
+   *
+   * @note The read_some operation may not read all of the requested number of
+   * bytes. Consider using the @ref read function if you need to ensure that
+   * the requested amount of data is read before the blocking operation
+   * completes.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().read_some(
+        this->get_implementation(), buffers, ec);
+  }
+
+  /// Start an asynchronous read.
+  /**
+   * This function is used to asynchronously read data from the serial port.
+   * The function call always returns immediately.
+   *
+   * @param buffers One or more buffers into which the data will be read.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param handler The handler to be called when the read operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes read.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The read operation may not read all of the requested number of bytes.
+   * Consider using the @ref async_read function if you need to ensure that the
+   * requested amount of data is read before the asynchronous operation
+   * completes.
+   *
+   * @par Example
+   * To read into a single data buffer use the @ref buffer function as follows:
+   * @code
+   * serial_port.async_read_some(boost::asio::buffer(data, size), handler);
+   * @endcode
+   * See the @ref buffer documentation for information on reading into multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_read_some(const MutableBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    return this->get_service().async_read_some(this->get_implementation(),
+        buffers, BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_SERIAL_PORT)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_BASIC_SERIAL_PORT_HPP
diff --git a/ext/patches/boost/asio/basic_signal_set.hpp b/ext/patches/boost/asio/basic_signal_set.hpp
new file mode 100644
index 0000000..2b0656d
--- /dev/null
+++ b/ext/patches/boost/asio/basic_signal_set.hpp
@@ -0,0 +1,386 @@
+//
+// basic_signal_set.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BASIC_SIGNAL_SET_HPP
+#define BOOST_ASIO_BASIC_SIGNAL_SET_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <boost/asio/basic_io_object.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/signal_set_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Provides signal functionality.
+/**
+ * The basic_signal_set class template provides the ability to perform an
+ * asynchronous wait for one or more signals to occur.
+ *
+ * Most applications will use the boost::asio::signal_set typedef.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ *
+ * @par Example
+ * Performing an asynchronous wait:
+ * @code
+ * void handler(
+ *     const boost::system::error_code& error,
+ *     int signal_number)
+ * {
+ *   if (!error)
+ *   {
+ *     // A signal occurred.
+ *   }
+ * }
+ *
+ * ...
+ *
+ * // Construct a signal set registered for process termination.
+ * boost::asio::signal_set signals(io_service, SIGINT, SIGTERM);
+ *
+ * // Start an asynchronous wait for one of the signals to occur.
+ * signals.async_wait(handler);
+ * @endcode
+ *
+ * @par Queueing of signal notifications
+ *
+ * If a signal is registered with a signal_set, and the signal occurs when
+ * there are no waiting handlers, then the signal notification is queued. The
+ * next async_wait operation on that signal_set will dequeue the notification.
+ * If multiple notifications are queued, subsequent async_wait operations
+ * dequeue them one at a time. Signal notifications are dequeued in order of
+ * ascending signal number.
+ *
+ * If a signal number is removed from a signal_set (using the @c remove or @c
+ * erase member functions) then any queued notifications for that signal are
+ * discarded.
+ *
+ * @par Multiple registration of signals
+ *
+ * The same signal number may be registered with different signal_set objects.
+ * When the signal occurs, one handler is called for each signal_set object.
+ *
+ * Note that multiple registration only works for signals that are registered
+ * using Asio. The application must not also register a signal handler using
+ * functions such as @c signal() or @c sigaction().
+ *
+ * @par Signal masking on POSIX platforms
+ *
+ * POSIX allows signals to be blocked using functions such as @c sigprocmask()
+ * and @c pthread_sigmask(). For signals to be delivered, programs must ensure
+ * that any signals registered using signal_set objects are unblocked in at
+ * least one thread.
+ */
+template <typename SignalSetService = signal_set_service>
+class basic_signal_set
+  : public basic_io_object<SignalSetService>
+{
+public:
+  /// Construct a signal set without adding any signals.
+  /**
+   * This constructor creates a signal set without registering for any signals.
+   *
+   * @param io_service The io_service object that the signal set will use to
+   * dispatch handlers for any asynchronous operations performed on the set.
+   */
+  explicit basic_signal_set(boost::asio::io_service& io_service)
+    : basic_io_object<SignalSetService>(io_service)
+  {
+  }
+
+  /// Construct a signal set and add one signal.
+  /**
+   * This constructor creates a signal set and registers for one signal.
+   *
+   * @param io_service The io_service object that the signal set will use to
+   * dispatch handlers for any asynchronous operations performed on the set.
+   *
+   * @param signal_number_1 The signal number to be added.
+   *
+   * @note This constructor is equivalent to performing:
+   * @code boost::asio::signal_set signals(io_service);
+   * signals.add(signal_number_1); @endcode
+   */
+  basic_signal_set(boost::asio::io_service& io_service, int signal_number_1)
+    : basic_io_object<SignalSetService>(io_service)
+  {
+    boost::system::error_code ec;
+    this->service.add(this->implementation, signal_number_1, ec);
+    boost::asio::detail::throw_error(ec, "add");
+  }
+
+  /// Construct a signal set and add two signals.
+  /**
+   * This constructor creates a signal set and registers for two signals.
+   *
+   * @param io_service The io_service object that the signal set will use to
+   * dispatch handlers for any asynchronous operations performed on the set.
+   *
+   * @param signal_number_1 The first signal number to be added.
+   *
+   * @param signal_number_2 The second signal number to be added.
+   *
+   * @note This constructor is equivalent to performing:
+   * @code boost::asio::signal_set signals(io_service);
+   * signals.add(signal_number_1);
+   * signals.add(signal_number_2); @endcode
+   */
+  basic_signal_set(boost::asio::io_service& io_service, int signal_number_1,
+      int signal_number_2)
+    : basic_io_object<SignalSetService>(io_service)
+  {
+    boost::system::error_code ec;
+    this->service.add(this->implementation, signal_number_1, ec);
+    boost::asio::detail::throw_error(ec, "add");
+    this->service.add(this->implementation, signal_number_2, ec);
+    boost::asio::detail::throw_error(ec, "add");
+  }
+
+  /// Construct a signal set and add three signals.
+  /**
+   * This constructor creates a signal set and registers for three signals.
+   *
+   * @param io_service The io_service object that the signal set will use to
+   * dispatch handlers for any asynchronous operations performed on the set.
+   *
+   * @param signal_number_1 The first signal number to be added.
+   *
+   * @param signal_number_2 The second signal number to be added.
+   *
+   * @param signal_number_3 The third signal number to be added.
+   *
+   * @note This constructor is equivalent to performing:
+   * @code boost::asio::signal_set signals(io_service);
+   * signals.add(signal_number_1);
+   * signals.add(signal_number_2);
+   * signals.add(signal_number_3); @endcode
+   */
+  basic_signal_set(boost::asio::io_service& io_service, int signal_number_1,
+      int signal_number_2, int signal_number_3)
+    : basic_io_object<SignalSetService>(io_service)
+  {
+    boost::system::error_code ec;
+    this->service.add(this->implementation, signal_number_1, ec);
+    boost::asio::detail::throw_error(ec, "add");
+    this->service.add(this->implementation, signal_number_2, ec);
+    boost::asio::detail::throw_error(ec, "add");
+    this->service.add(this->implementation, signal_number_3, ec);
+    boost::asio::detail::throw_error(ec, "add");
+  }
+
+  /// Add a signal to a signal_set.
+  /**
+   * This function adds the specified signal to the set. It has no effect if the
+   * signal is already in the set.
+   *
+   * @param signal_number The signal to be added to the set.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void add(int signal_number)
+  {
+    boost::system::error_code ec;
+    this->service.add(this->implementation, signal_number, ec);
+    boost::asio::detail::throw_error(ec, "add");
+  }
+
+  /// Add a signal to a signal_set.
+  /**
+   * This function adds the specified signal to the set. It has no effect if the
+   * signal is already in the set.
+   *
+   * @param signal_number The signal to be added to the set.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code add(int signal_number,
+      boost::system::error_code& ec)
+  {
+    return this->service.add(this->implementation, signal_number, ec);
+  }
+
+  /// Remove a signal from a signal_set.
+  /**
+   * This function removes the specified signal from the set. It has no effect
+   * if the signal is not in the set.
+   *
+   * @param signal_number The signal to be removed from the set.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Removes any notifications that have been queued for the specified
+   * signal number.
+   */
+  void remove(int signal_number)
+  {
+    boost::system::error_code ec;
+    this->service.remove(this->implementation, signal_number, ec);
+    boost::asio::detail::throw_error(ec, "remove");
+  }
+
+  /// Remove a signal from a signal_set.
+  /**
+   * This function removes the specified signal from the set. It has no effect
+   * if the signal is not in the set.
+   *
+   * @param signal_number The signal to be removed from the set.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Removes any notifications that have been queued for the specified
+   * signal number.
+   */
+  boost::system::error_code remove(int signal_number,
+      boost::system::error_code& ec)
+  {
+    return this->service.remove(this->implementation, signal_number, ec);
+  }
+
+  /// Remove all signals from a signal_set.
+  /**
+   * This function removes all signals from the set. It has no effect if the set
+   * is already empty.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Removes all queued notifications.
+   */
+  void clear()
+  {
+    boost::system::error_code ec;
+    this->service.clear(this->implementation, ec);
+    boost::asio::detail::throw_error(ec, "clear");
+  }
+
+  /// Remove all signals from a signal_set.
+  /**
+   * This function removes all signals from the set. It has no effect if the set
+   * is already empty.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Removes all queued notifications.
+   */
+  boost::system::error_code clear(boost::system::error_code& ec)
+  {
+    return this->service.clear(this->implementation, ec);
+  }
+
+  /// Cancel all operations associated with the signal set.
+  /**
+   * This function forces the completion of any pending asynchronous wait
+   * operations against the signal set. The handler for each cancelled
+   * operation will be invoked with the boost::asio::error::operation_aborted
+   * error code.
+   *
+   * Cancellation does not alter the set of registered signals.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note If a registered signal occurred before cancel() is called, then the
+   * handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  void cancel()
+  {
+    boost::system::error_code ec;
+    this->service.cancel(this->implementation, ec);
+    boost::asio::detail::throw_error(ec, "cancel");
+  }
+
+  /// Cancel all operations associated with the signal set.
+  /**
+   * This function forces the completion of any pending asynchronous wait
+   * operations against the signal set. The handler for each cancelled
+   * operation will be invoked with the boost::asio::error::operation_aborted
+   * error code.
+   *
+   * Cancellation does not alter the set of registered signals.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note If a registered signal occurred before cancel() is called, then the
+   * handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  boost::system::error_code cancel(boost::system::error_code& ec)
+  {
+    return this->service.cancel(this->implementation, ec);
+  }
+
+  /// Start an asynchronous operation to wait for a signal to be delivered.
+  /**
+   * This function may be used to initiate an asynchronous wait against the
+   * signal set. It always returns immediately.
+   *
+   * For each call to async_wait(), the supplied handler will be called exactly
+   * once. The handler will be called when:
+   *
+   * @li One of the registered signals in the signal set occurs; or
+   *
+   * @li The signal set was cancelled, in which case the handler is passed the
+   * error code boost::asio::error::operation_aborted.
+   *
+   * @param handler The handler to be called when the signal occurs. Copies
+   * will be made of the handler as required. The function signature of the
+   * handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   int signal_number // Indicates which signal occurred.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   */
+  template <typename SignalHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(SignalHandler,
+      void (boost::system::error_code, int))
+  async_wait(BOOST_ASIO_MOVE_ARG(SignalHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a SignalHandler.
+    BOOST_ASIO_SIGNAL_HANDLER_CHECK(SignalHandler, handler) type_check;
+
+    return this->service.async_wait(this->implementation,
+        BOOST_ASIO_MOVE_CAST(SignalHandler)(handler));
+  }
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_BASIC_SIGNAL_SET_HPP
diff --git a/ext/patches/boost/asio/basic_socket.hpp b/ext/patches/boost/asio/basic_socket.hpp
new file mode 100644
index 0000000..a65ca47
--- /dev/null
+++ b/ext/patches/boost/asio/basic_socket.hpp
@@ -0,0 +1,1520 @@
+//
+// basic_socket.hpp
+// ~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BASIC_SOCKET_HPP
+#define BOOST_ASIO_BASIC_SOCKET_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/basic_io_object.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/detail/type_traits.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/socket_base.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Provides socket functionality.
+/**
+ * The basic_socket class template provides functionality that is common to both
+ * stream-oriented and datagram-oriented sockets.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ */
+template <typename Protocol, typename SocketService>
+class basic_socket
+  : public basic_io_object<SocketService>,
+    public socket_base
+{
+public:
+  /// (Deprecated: Use native_handle_type.) The native representation of a
+  /// socket.
+  typedef typename SocketService::native_handle_type native_type;
+
+  /// The native representation of a socket.
+  typedef typename SocketService::native_handle_type native_handle_type;
+
+  /// The protocol type.
+  typedef Protocol protocol_type;
+
+  /// The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+  /// A basic_socket is always the lowest layer.
+  typedef basic_socket<Protocol, SocketService> lowest_layer_type;
+
+  /// Construct a basic_socket without opening it.
+  /**
+   * This constructor creates a socket without opening it.
+   *
+   * @param io_service The io_service object that the socket will use to
+   * dispatch handlers for any asynchronous operations performed on the socket.
+   */
+  explicit basic_socket(boost::asio::io_service& io_service)
+    : basic_io_object<SocketService>(io_service)
+  {
+  }
+
+  /// Construct and open a basic_socket.
+  /**
+   * This constructor creates and opens a socket.
+   *
+   * @param io_service The io_service object that the socket will use to
+   * dispatch handlers for any asynchronous operations performed on the socket.
+   *
+   * @param protocol An object specifying protocol parameters to be used.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_socket(boost::asio::io_service& io_service,
+      const protocol_type& protocol)
+    : basic_io_object<SocketService>(io_service)
+  {
+    boost::system::error_code ec;
+    this->get_service().open(this->get_implementation(), protocol, ec);
+    boost::asio::detail::throw_error(ec, "open");
+  }
+
+  /// Construct a basic_socket, opening it and binding it to the given local
+  /// endpoint.
+  /**
+   * This constructor creates a socket and automatically opens it bound to the
+   * specified endpoint on the local machine. The protocol used is the protocol
+   * associated with the given endpoint.
+   *
+   * @param io_service The io_service object that the socket will use to
+   * dispatch handlers for any asynchronous operations performed on the socket.
+   *
+   * @param endpoint An endpoint on the local machine to which the socket will
+   * be bound.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_socket(boost::asio::io_service& io_service,
+      const endpoint_type& endpoint)
+    : basic_io_object<SocketService>(io_service)
+  {
+    boost::system::error_code ec;
+    const protocol_type protocol = endpoint.protocol();
+    this->get_service().open(this->get_implementation(), protocol, ec);
+    boost::asio::detail::throw_error(ec, "open");
+    this->get_service().bind(this->get_implementation(), endpoint, ec);
+    boost::asio::detail::throw_error(ec, "bind");
+  }
+
+  /// Construct a basic_socket on an existing native socket.
+  /**
+   * This constructor creates a socket object to hold an existing native socket.
+   *
+   * @param io_service The io_service object that the socket will use to
+   * dispatch handlers for any asynchronous operations performed on the socket.
+   *
+   * @param protocol An object specifying protocol parameters to be used.
+   *
+   * @param native_socket A native socket.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_socket(boost::asio::io_service& io_service,
+      const protocol_type& protocol, const native_handle_type& native_socket)
+    : basic_io_object<SocketService>(io_service)
+  {
+    boost::system::error_code ec;
+    this->get_service().assign(this->get_implementation(),
+        protocol, native_socket, ec);
+    boost::asio::detail::throw_error(ec, "assign");
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a basic_socket from another.
+  /**
+   * This constructor moves a socket from one object to another.
+   *
+   * @param other The other basic_socket object from which the move will
+   * occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_socket(io_service&) constructor.
+   */
+  basic_socket(basic_socket&& other)
+    : basic_io_object<SocketService>(
+        BOOST_ASIO_MOVE_CAST(basic_socket)(other))
+  {
+  }
+
+  /// Move-assign a basic_socket from another.
+  /**
+   * This assignment operator moves a socket from one object to another.
+   *
+   * @param other The other basic_socket object from which the move will
+   * occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_socket(io_service&) constructor.
+   */
+  basic_socket& operator=(basic_socket&& other)
+  {
+    basic_io_object<SocketService>::operator=(
+        BOOST_ASIO_MOVE_CAST(basic_socket)(other));
+    return *this;
+  }
+
+  // All sockets have access to each other's implementations.
+  template <typename Protocol1, typename SocketService1>
+  friend class basic_socket;
+
+  /// Move-construct a basic_socket from a socket of another protocol type.
+  /**
+   * This constructor moves a socket from one object to another.
+   *
+   * @param other The other basic_socket object from which the move will
+   * occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_socket(io_service&) constructor.
+   */
+  template <typename Protocol1, typename SocketService1>
+  basic_socket(basic_socket<Protocol1, SocketService1>&& other,
+      typename enable_if<is_convertible<Protocol1, Protocol>::value>::type* = 0)
+    : basic_io_object<SocketService>(other.get_io_service())
+  {
+    this->get_service().template converting_move_construct<Protocol1>(
+        this->get_implementation(), other.get_implementation());
+  }
+
+  /// Move-assign a basic_socket from a socket of another protocol type.
+  /**
+   * This assignment operator moves a socket from one object to another.
+   *
+   * @param other The other basic_socket object from which the move will
+   * occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_socket(io_service&) constructor.
+   */
+  template <typename Protocol1, typename SocketService1>
+  typename enable_if<is_convertible<Protocol1, Protocol>::value,
+      basic_socket>::type& operator=(
+        basic_socket<Protocol1, SocketService1>&& other)
+  {
+    basic_socket tmp(BOOST_ASIO_MOVE_CAST2(basic_socket<
+            Protocol1, SocketService1>)(other));
+    basic_io_object<SocketService>::operator=(
+        BOOST_ASIO_MOVE_CAST(basic_socket)(tmp));
+    return *this;
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Get a reference to the lowest layer.
+  /**
+   * This function returns a reference to the lowest layer in a stack of
+   * layers. Since a basic_socket cannot contain any further layers, it simply
+   * returns a reference to itself.
+   *
+   * @return A reference to the lowest layer in the stack of layers. Ownership
+   * is not transferred to the caller.
+   */
+  lowest_layer_type& lowest_layer()
+  {
+    return *this;
+  }
+
+  /// Get a const reference to the lowest layer.
+  /**
+   * This function returns a const reference to the lowest layer in a stack of
+   * layers. Since a basic_socket cannot contain any further layers, it simply
+   * returns a reference to itself.
+   *
+   * @return A const reference to the lowest layer in the stack of layers.
+   * Ownership is not transferred to the caller.
+   */
+  const lowest_layer_type& lowest_layer() const
+  {
+    return *this;
+  }
+
+  /// Open the socket using the specified protocol.
+  /**
+   * This function opens the socket so that it will use the specified protocol.
+   *
+   * @param protocol An object specifying protocol parameters to be used.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * socket.open(boost::asio::ip::tcp::v4());
+   * @endcode
+   */
+  void open(const protocol_type& protocol = protocol_type())
+  {
+    boost::system::error_code ec;
+    this->get_service().open(this->get_implementation(), protocol, ec);
+    boost::asio::detail::throw_error(ec, "open");
+  }
+
+  /// Open the socket using the specified protocol.
+  /**
+   * This function opens the socket so that it will use the specified protocol.
+   *
+   * @param protocol An object specifying which protocol is to be used.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * boost::system::error_code ec;
+   * socket.open(boost::asio::ip::tcp::v4(), ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * @endcode
+   */
+  boost::system::error_code open(const protocol_type& protocol,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().open(this->get_implementation(), protocol, ec);
+  }
+
+  /// Assign an existing native socket to the socket.
+  /*
+   * This function opens the socket to hold an existing native socket.
+   *
+   * @param protocol An object specifying which protocol is to be used.
+   *
+   * @param native_socket A native socket.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void assign(const protocol_type& protocol,
+      const native_handle_type& native_socket)
+  {
+    boost::system::error_code ec;
+    this->get_service().assign(this->get_implementation(),
+        protocol, native_socket, ec);
+    boost::asio::detail::throw_error(ec, "assign");
+  }
+
+  /// Assign an existing native socket to the socket.
+  /*
+   * This function opens the socket to hold an existing native socket.
+   *
+   * @param protocol An object specifying which protocol is to be used.
+   *
+   * @param native_socket A native socket.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code assign(const protocol_type& protocol,
+      const native_handle_type& native_socket, boost::system::error_code& ec)
+  {
+    return this->get_service().assign(this->get_implementation(),
+        protocol, native_socket, ec);
+  }
+
+  /// Determine whether the socket is open.
+  bool is_open() const
+  {
+    return this->get_service().is_open(this->get_implementation());
+  }
+
+  /// Close the socket.
+  /**
+   * This function is used to close the socket. Any asynchronous send, receive
+   * or connect operations will be cancelled immediately, and will complete
+   * with the boost::asio::error::operation_aborted error.
+   *
+   * @throws boost::system::system_error Thrown on failure. Note that, even if
+   * the function indicates an error, the underlying descriptor is closed.
+   *
+   * @note For portable behaviour with respect to graceful closure of a
+   * connected socket, call shutdown() before closing the socket.
+   */
+  void close()
+  {
+    boost::system::error_code ec;
+    this->get_service().close(this->get_implementation(), ec);
+    boost::asio::detail::throw_error(ec, "close");
+  }
+
+  /// Close the socket.
+  /**
+   * This function is used to close the socket. Any asynchronous send, receive
+   * or connect operations will be cancelled immediately, and will complete
+   * with the boost::asio::error::operation_aborted error.
+   *
+   * @param ec Set to indicate what error occurred, if any. Note that, even if
+   * the function indicates an error, the underlying descriptor is closed.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * ...
+   * boost::system::error_code ec;
+   * socket.close(ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * @endcode
+   *
+   * @note For portable behaviour with respect to graceful closure of a
+   * connected socket, call shutdown() before closing the socket.
+   */
+  boost::system::error_code close(boost::system::error_code& ec)
+  {
+    return this->get_service().close(this->get_implementation(), ec);
+  }
+
+  /// (Deprecated: Use native_handle().) Get the native socket representation.
+  /**
+   * This function may be used to obtain the underlying representation of the
+   * socket. This is intended to allow access to native socket functionality
+   * that is not otherwise provided.
+   */
+  native_type native()
+  {
+    return this->get_service().native_handle(this->get_implementation());
+  }
+
+  /// Get the native socket representation.
+  /**
+   * This function may be used to obtain the underlying representation of the
+   * socket. This is intended to allow access to native socket functionality
+   * that is not otherwise provided.
+   */
+  native_handle_type native_handle()
+  {
+    return this->get_service().native_handle(this->get_implementation());
+  }
+
+  /// Cancel all asynchronous operations associated with the socket.
+  /**
+   * This function causes all outstanding asynchronous connect, send and receive
+   * operations to finish immediately, and the handlers for cancelled operations
+   * will be passed the boost::asio::error::operation_aborted error.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls to cancel() will always fail with
+   * boost::asio::error::operation_not_supported when run on Windows XP, Windows
+   * Server 2003, and earlier versions of Windows, unless
+   * BOOST_ASIO_ENABLE_CANCELIO is defined. However, the CancelIo function has
+   * two issues that should be considered before enabling its use:
+   *
+   * @li It will only cancel asynchronous operations that were initiated in the
+   * current thread.
+   *
+   * @li It can appear to complete without error, but the request to cancel the
+   * unfinished operations may be silently ignored by the operating system.
+   * Whether it works or not seems to depend on the drivers that are installed.
+   *
+   * For portable cancellation, consider using one of the following
+   * alternatives:
+   *
+   * @li Disable asio's I/O completion port backend by defining
+   * BOOST_ASIO_DISABLE_IOCP.
+   *
+   * @li Use the close() function to simultaneously cancel the outstanding
+   * operations and close the socket.
+   *
+   * When running on Windows Vista, Windows Server 2008, and later, the
+   * CancelIoEx function is always used. This function does not have the
+   * problems described above.
+   */
+#if defined(BOOST_ASIO_MSVC) && (BOOST_ASIO_MSVC >= 1400) \
+  && (!defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0600) \
+  && !defined(BOOST_ASIO_ENABLE_CANCELIO)
+  __declspec(deprecated("By default, this function always fails with "
+        "operation_not_supported when used on Windows XP, Windows Server 2003, "
+        "or earlier. Consult documentation for details."))
+#endif
+  void cancel()
+  {
+    boost::system::error_code ec;
+    this->get_service().cancel(this->get_implementation(), ec);
+    boost::asio::detail::throw_error(ec, "cancel");
+  }
+
+  /// Cancel all asynchronous operations associated with the socket.
+  /**
+   * This function causes all outstanding asynchronous connect, send and receive
+   * operations to finish immediately, and the handlers for cancelled operations
+   * will be passed the boost::asio::error::operation_aborted error.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls to cancel() will always fail with
+   * boost::asio::error::operation_not_supported when run on Windows XP, Windows
+   * Server 2003, and earlier versions of Windows, unless
+   * BOOST_ASIO_ENABLE_CANCELIO is defined. However, the CancelIo function has
+   * two issues that should be considered before enabling its use:
+   *
+   * @li It will only cancel asynchronous operations that were initiated in the
+   * current thread.
+   *
+   * @li It can appear to complete without error, but the request to cancel the
+   * unfinished operations may be silently ignored by the operating system.
+   * Whether it works or not seems to depend on the drivers that are installed.
+   *
+   * For portable cancellation, consider using one of the following
+   * alternatives:
+   *
+   * @li Disable asio's I/O completion port backend by defining
+   * BOOST_ASIO_DISABLE_IOCP.
+   *
+   * @li Use the close() function to simultaneously cancel the outstanding
+   * operations and close the socket.
+   *
+   * When running on Windows Vista, Windows Server 2008, and later, the
+   * CancelIoEx function is always used. This function does not have the
+   * problems described above.
+   */
+#if defined(BOOST_ASIO_MSVC) && (BOOST_ASIO_MSVC >= 1400) \
+  && (!defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0600) \
+  && !defined(BOOST_ASIO_ENABLE_CANCELIO)
+  __declspec(deprecated("By default, this function always fails with "
+        "operation_not_supported when used on Windows XP, Windows Server 2003, "
+        "or earlier. Consult documentation for details."))
+#endif
+  boost::system::error_code cancel(boost::system::error_code& ec)
+  {
+    return this->get_service().cancel(this->get_implementation(), ec);
+  }
+
+  /// Determine whether the socket is at the out-of-band data mark.
+  /**
+   * This function is used to check whether the socket input is currently
+   * positioned at the out-of-band data mark.
+   *
+   * @return A bool indicating whether the socket is at the out-of-band data
+   * mark.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  bool at_mark() const
+  {
+    boost::system::error_code ec;
+    bool b = this->get_service().at_mark(this->get_implementation(), ec);
+    boost::asio::detail::throw_error(ec, "at_mark");
+    return b;
+  }
+
+  /// Determine whether the socket is at the out-of-band data mark.
+  /**
+   * This function is used to check whether the socket input is currently
+   * positioned at the out-of-band data mark.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @return A bool indicating whether the socket is at the out-of-band data
+   * mark.
+   */
+  bool at_mark(boost::system::error_code& ec) const
+  {
+    return this->get_service().at_mark(this->get_implementation(), ec);
+  }
+
+  /// Determine the number of bytes available for reading.
+  /**
+   * This function is used to determine the number of bytes that may be read
+   * without blocking.
+   *
+   * @return The number of bytes that may be read without blocking, or 0 if an
+   * error occurs.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  std::size_t available() const
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().available(
+        this->get_implementation(), ec);
+    boost::asio::detail::throw_error(ec, "available");
+    return s;
+  }
+
+  /// Determine the number of bytes available for reading.
+  /**
+   * This function is used to determine the number of bytes that may be read
+   * without blocking.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @return The number of bytes that may be read without blocking, or 0 if an
+   * error occurs.
+   */
+  std::size_t available(boost::system::error_code& ec) const
+  {
+    return this->get_service().available(this->get_implementation(), ec);
+  }
+
+  /// Bind the socket to the given local endpoint.
+  /**
+   * This function binds the socket to the specified endpoint on the local
+   * machine.
+   *
+   * @param endpoint An endpoint on the local machine to which the socket will
+   * be bound.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * socket.open(boost::asio::ip::tcp::v4());
+   * socket.bind(boost::asio::ip::tcp::endpoint(
+   *       boost::asio::ip::tcp::v4(), 12345));
+   * @endcode
+   */
+  void bind(const endpoint_type& endpoint)
+  {
+    boost::system::error_code ec;
+    this->get_service().bind(this->get_implementation(), endpoint, ec);
+    boost::asio::detail::throw_error(ec, "bind");
+  }
+
+  /// Bind the socket to the given local endpoint.
+  /**
+   * This function binds the socket to the specified endpoint on the local
+   * machine.
+   *
+   * @param endpoint An endpoint on the local machine to which the socket will
+   * be bound.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * socket.open(boost::asio::ip::tcp::v4());
+   * boost::system::error_code ec;
+   * socket.bind(boost::asio::ip::tcp::endpoint(
+   *       boost::asio::ip::tcp::v4(), 12345), ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * @endcode
+   */
+  boost::system::error_code bind(const endpoint_type& endpoint,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().bind(this->get_implementation(), endpoint, ec);
+  }
+
+  /// Connect the socket to the specified endpoint.
+  /**
+   * This function is used to connect a socket to the specified remote endpoint.
+   * The function call will block until the connection is successfully made or
+   * an error occurs.
+   *
+   * The socket is automatically opened if it is not already open. If the
+   * connect fails, and the socket was automatically opened, the socket is
+   * not returned to the closed state.
+   *
+   * @param peer_endpoint The remote endpoint to which the socket will be
+   * connected.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * boost::asio::ip::tcp::endpoint endpoint(
+   *     boost::asio::ip::address::from_string("1.2.3.4"), 12345);
+   * socket.connect(endpoint);
+   * @endcode
+   */
+  void connect(const endpoint_type& peer_endpoint)
+  {
+    boost::system::error_code ec;
+    if (!is_open())
+    {
+      this->get_service().open(this->get_implementation(),
+          peer_endpoint.protocol(), ec);
+      boost::asio::detail::throw_error(ec, "connect");
+    }
+    this->get_service().connect(this->get_implementation(), peer_endpoint, ec);
+    boost::asio::detail::throw_error(ec, "connect");
+  }
+
+  /// Connect the socket to the specified endpoint.
+  /**
+   * This function is used to connect a socket to the specified remote endpoint.
+   * The function call will block until the connection is successfully made or
+   * an error occurs.
+   *
+   * The socket is automatically opened if it is not already open. If the
+   * connect fails, and the socket was automatically opened, the socket is
+   * not returned to the closed state.
+   *
+   * @param peer_endpoint The remote endpoint to which the socket will be
+   * connected.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * boost::asio::ip::tcp::endpoint endpoint(
+   *     boost::asio::ip::address::from_string("1.2.3.4"), 12345);
+   * boost::system::error_code ec;
+   * socket.connect(endpoint, ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * @endcode
+   */
+  boost::system::error_code connect(const endpoint_type& peer_endpoint,
+      boost::system::error_code& ec)
+  {
+    if (!is_open())
+    {
+      if (this->get_service().open(this->get_implementation(),
+            peer_endpoint.protocol(), ec))
+      {
+        return ec;
+      }
+    }
+
+    return this->get_service().connect(
+        this->get_implementation(), peer_endpoint, ec);
+  }
+
+  /// Start an asynchronous connect.
+  /**
+   * This function is used to asynchronously connect a socket to the specified
+   * remote endpoint. The function call always returns immediately.
+   *
+   * The socket is automatically opened if it is not already open. If the
+   * connect fails, and the socket was automatically opened, the socket is
+   * not returned to the closed state.
+   *
+   * @param peer_endpoint The remote endpoint to which the socket will be
+   * connected. Copies will be made of the endpoint object as required.
+   *
+   * @param handler The handler to be called when the connection operation
+   * completes. Copies will be made of the handler as required. The function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error // Result of operation
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @par Example
+   * @code
+   * void connect_handler(const boost::system::error_code& error)
+   * {
+   *   if (!error)
+   *   {
+   *     // Connect succeeded.
+   *   }
+   * }
+   *
+   * ...
+   *
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * boost::asio::ip::tcp::endpoint endpoint(
+   *     boost::asio::ip::address::from_string("1.2.3.4"), 12345);
+   * socket.async_connect(endpoint, connect_handler);
+   * @endcode
+   */
+  template <typename ConnectHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ConnectHandler,
+      void (boost::system::error_code))
+  async_connect(const endpoint_type& peer_endpoint,
+      BOOST_ASIO_MOVE_ARG(ConnectHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ConnectHandler.
+    BOOST_ASIO_CONNECT_HANDLER_CHECK(ConnectHandler, handler) type_check;
+
+    if (!is_open())
+    {
+      boost::system::error_code ec;
+      const protocol_type protocol = peer_endpoint.protocol();
+      if (this->get_service().open(this->get_implementation(), protocol, ec))
+      {
+        detail::async_result_init<
+          ConnectHandler, void (boost::system::error_code)> init(
+            BOOST_ASIO_MOVE_CAST(ConnectHandler)(handler));
+
+        this->get_io_service().post(
+            boost::asio::detail::bind_handler(
+              BOOST_ASIO_MOVE_CAST(BOOST_ASIO_HANDLER_TYPE(
+                ConnectHandler, void (boost::system::error_code)))(
+                  init.handler), ec));
+
+        return init.result.get();
+      }
+    }
+
+    return this->get_service().async_connect(this->get_implementation(),
+        peer_endpoint, BOOST_ASIO_MOVE_CAST(ConnectHandler)(handler));
+  }
+
+  /// Set an option on the socket.
+  /**
+   * This function is used to set an option on the socket.
+   *
+   * @param option The new option value to be set on the socket.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @sa SettableSocketOption @n
+   * boost::asio::socket_base::broadcast @n
+   * boost::asio::socket_base::do_not_route @n
+   * boost::asio::socket_base::keep_alive @n
+   * boost::asio::socket_base::linger @n
+   * boost::asio::socket_base::receive_buffer_size @n
+   * boost::asio::socket_base::receive_low_watermark @n
+   * boost::asio::socket_base::reuse_address @n
+   * boost::asio::socket_base::send_buffer_size @n
+   * boost::asio::socket_base::send_low_watermark @n
+   * boost::asio::ip::multicast::join_group @n
+   * boost::asio::ip::multicast::leave_group @n
+   * boost::asio::ip::multicast::enable_loopback @n
+   * boost::asio::ip::multicast::outbound_interface @n
+   * boost::asio::ip::multicast::hops @n
+   * boost::asio::ip::tcp::no_delay
+   *
+   * @par Example
+   * Setting the IPPROTO_TCP/TCP_NODELAY option:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * ...
+   * boost::asio::ip::tcp::no_delay option(true);
+   * socket.set_option(option);
+   * @endcode
+   */
+  template <typename SettableSocketOption>
+  void set_option(const SettableSocketOption& option)
+  {
+    boost::system::error_code ec;
+    this->get_service().set_option(this->get_implementation(), option, ec);
+    boost::asio::detail::throw_error(ec, "set_option");
+  }
+
+  /// Set an option on the socket.
+  /**
+   * This function is used to set an option on the socket.
+   *
+   * @param option The new option value to be set on the socket.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @sa SettableSocketOption @n
+   * boost::asio::socket_base::broadcast @n
+   * boost::asio::socket_base::do_not_route @n
+   * boost::asio::socket_base::keep_alive @n
+   * boost::asio::socket_base::linger @n
+   * boost::asio::socket_base::receive_buffer_size @n
+   * boost::asio::socket_base::receive_low_watermark @n
+   * boost::asio::socket_base::reuse_address @n
+   * boost::asio::socket_base::send_buffer_size @n
+   * boost::asio::socket_base::send_low_watermark @n
+   * boost::asio::ip::multicast::join_group @n
+   * boost::asio::ip::multicast::leave_group @n
+   * boost::asio::ip::multicast::enable_loopback @n
+   * boost::asio::ip::multicast::outbound_interface @n
+   * boost::asio::ip::multicast::hops @n
+   * boost::asio::ip::tcp::no_delay
+   *
+   * @par Example
+   * Setting the IPPROTO_TCP/TCP_NODELAY option:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * ...
+   * boost::asio::ip::tcp::no_delay option(true);
+   * boost::system::error_code ec;
+   * socket.set_option(option, ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * @endcode
+   */
+  template <typename SettableSocketOption>
+  boost::system::error_code set_option(const SettableSocketOption& option,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().set_option(
+        this->get_implementation(), option, ec);
+  }
+
+  /// Get an option from the socket.
+  /**
+   * This function is used to get the current value of an option on the socket.
+   *
+   * @param option The option value to be obtained from the socket.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @sa GettableSocketOption @n
+   * boost::asio::socket_base::broadcast @n
+   * boost::asio::socket_base::do_not_route @n
+   * boost::asio::socket_base::keep_alive @n
+   * boost::asio::socket_base::linger @n
+   * boost::asio::socket_base::receive_buffer_size @n
+   * boost::asio::socket_base::receive_low_watermark @n
+   * boost::asio::socket_base::reuse_address @n
+   * boost::asio::socket_base::send_buffer_size @n
+   * boost::asio::socket_base::send_low_watermark @n
+   * boost::asio::ip::multicast::join_group @n
+   * boost::asio::ip::multicast::leave_group @n
+   * boost::asio::ip::multicast::enable_loopback @n
+   * boost::asio::ip::multicast::outbound_interface @n
+   * boost::asio::ip::multicast::hops @n
+   * boost::asio::ip::tcp::no_delay
+   *
+   * @par Example
+   * Getting the value of the SOL_SOCKET/SO_KEEPALIVE option:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * ...
+   * boost::asio::ip::tcp::socket::keep_alive option;
+   * socket.get_option(option);
+   * bool is_set = option.value();
+   * @endcode
+   */
+  template <typename GettableSocketOption>
+  void get_option(GettableSocketOption& option) const
+  {
+    boost::system::error_code ec;
+    this->get_service().get_option(this->get_implementation(), option, ec);
+    boost::asio::detail::throw_error(ec, "get_option");
+  }
+
+  /// Get an option from the socket.
+  /**
+   * This function is used to get the current value of an option on the socket.
+   *
+   * @param option The option value to be obtained from the socket.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @sa GettableSocketOption @n
+   * boost::asio::socket_base::broadcast @n
+   * boost::asio::socket_base::do_not_route @n
+   * boost::asio::socket_base::keep_alive @n
+   * boost::asio::socket_base::linger @n
+   * boost::asio::socket_base::receive_buffer_size @n
+   * boost::asio::socket_base::receive_low_watermark @n
+   * boost::asio::socket_base::reuse_address @n
+   * boost::asio::socket_base::send_buffer_size @n
+   * boost::asio::socket_base::send_low_watermark @n
+   * boost::asio::ip::multicast::join_group @n
+   * boost::asio::ip::multicast::leave_group @n
+   * boost::asio::ip::multicast::enable_loopback @n
+   * boost::asio::ip::multicast::outbound_interface @n
+   * boost::asio::ip::multicast::hops @n
+   * boost::asio::ip::tcp::no_delay
+   *
+   * @par Example
+   * Getting the value of the SOL_SOCKET/SO_KEEPALIVE option:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * ...
+   * boost::asio::ip::tcp::socket::keep_alive option;
+   * boost::system::error_code ec;
+   * socket.get_option(option, ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * bool is_set = option.value();
+   * @endcode
+   */
+  template <typename GettableSocketOption>
+  boost::system::error_code get_option(GettableSocketOption& option,
+      boost::system::error_code& ec) const
+  {
+    return this->get_service().get_option(
+        this->get_implementation(), option, ec);
+  }
+
+  /// Perform an IO control command on the socket.
+  /**
+   * This function is used to execute an IO control command on the socket.
+   *
+   * @param command The IO control command to be performed on the socket.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @sa IoControlCommand @n
+   * boost::asio::socket_base::bytes_readable @n
+   * boost::asio::socket_base::non_blocking_io
+   *
+   * @par Example
+   * Getting the number of bytes ready to read:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * ...
+   * boost::asio::ip::tcp::socket::bytes_readable command;
+   * socket.io_control(command);
+   * std::size_t bytes_readable = command.get();
+   * @endcode
+   */
+  template <typename IoControlCommand>
+  void io_control(IoControlCommand& command)
+  {
+    boost::system::error_code ec;
+    this->get_service().io_control(this->get_implementation(), command, ec);
+    boost::asio::detail::throw_error(ec, "io_control");
+  }
+
+  /// Perform an IO control command on the socket.
+  /**
+   * This function is used to execute an IO control command on the socket.
+   *
+   * @param command The IO control command to be performed on the socket.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @sa IoControlCommand @n
+   * boost::asio::socket_base::bytes_readable @n
+   * boost::asio::socket_base::non_blocking_io
+   *
+   * @par Example
+   * Getting the number of bytes ready to read:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * ...
+   * boost::asio::ip::tcp::socket::bytes_readable command;
+   * boost::system::error_code ec;
+   * socket.io_control(command, ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * std::size_t bytes_readable = command.get();
+   * @endcode
+   */
+  template <typename IoControlCommand>
+  boost::system::error_code io_control(IoControlCommand& command,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().io_control(
+        this->get_implementation(), command, ec);
+  }
+
+  /// Gets the non-blocking mode of the socket.
+  /**
+   * @returns @c true if the socket's synchronous operations will fail with
+   * boost::asio::error::would_block if they are unable to perform the requested
+   * operation immediately. If @c false, synchronous operations will block
+   * until complete.
+   *
+   * @note The non-blocking mode has no effect on the behaviour of asynchronous
+   * operations. Asynchronous operations will never fail with the error
+   * boost::asio::error::would_block.
+   */
+  bool non_blocking() const
+  {
+    return this->get_service().non_blocking(this->get_implementation());
+  }
+
+  /// Sets the non-blocking mode of the socket.
+  /**
+   * @param mode If @c true, the socket's synchronous operations will fail with
+   * boost::asio::error::would_block if they are unable to perform the requested
+   * operation immediately. If @c false, synchronous operations will block
+   * until complete.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The non-blocking mode has no effect on the behaviour of asynchronous
+   * operations. Asynchronous operations will never fail with the error
+   * boost::asio::error::would_block.
+   */
+  void non_blocking(bool mode)
+  {
+    boost::system::error_code ec;
+    this->get_service().non_blocking(this->get_implementation(), mode, ec);
+    boost::asio::detail::throw_error(ec, "non_blocking");
+  }
+
+  /// Sets the non-blocking mode of the socket.
+  /**
+   * @param mode If @c true, the socket's synchronous operations will fail with
+   * boost::asio::error::would_block if they are unable to perform the requested
+   * operation immediately. If @c false, synchronous operations will block
+   * until complete.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note The non-blocking mode has no effect on the behaviour of asynchronous
+   * operations. Asynchronous operations will never fail with the error
+   * boost::asio::error::would_block.
+   */
+  boost::system::error_code non_blocking(
+      bool mode, boost::system::error_code& ec)
+  {
+    return this->get_service().non_blocking(
+        this->get_implementation(), mode, ec);
+  }
+
+  /// Gets the non-blocking mode of the native socket implementation.
+  /**
+   * This function is used to retrieve the non-blocking mode of the underlying
+   * native socket. This mode has no effect on the behaviour of the socket
+   * object's synchronous operations.
+   *
+   * @returns @c true if the underlying socket is in non-blocking mode and
+   * direct system calls may fail with boost::asio::error::would_block (or the
+   * equivalent system error).
+   *
+   * @note The current non-blocking mode is cached by the socket object.
+   * Consequently, the return value may be incorrect if the non-blocking mode
+   * was set directly on the native socket.
+   *
+   * @par Example
+   * This function is intended to allow the encapsulation of arbitrary
+   * non-blocking system calls as asynchronous operations, in a way that is
+   * transparent to the user of the socket object. The following example
+   * illustrates how Linux's @c sendfile system call might be encapsulated:
+   * @code template <typename Handler>
+   * struct sendfile_op
+   * {
+   *   tcp::socket& sock_;
+   *   int fd_;
+   *   Handler handler_;
+   *   off_t offset_;
+   *   std::size_t total_bytes_transferred_;
+   *
+   *   // Function call operator meeting WriteHandler requirements.
+   *   // Used as the handler for the async_write_some operation.
+   *   void operator()(boost::system::error_code ec, std::size_t)
+   *   {
+   *     // Put the underlying socket into non-blocking mode.
+   *     if (!ec)
+   *       if (!sock_.native_non_blocking())
+   *         sock_.native_non_blocking(true, ec);
+   *
+   *     if (!ec)
+   *     {
+   *       for (;;)
+   *       {
+   *         // Try the system call.
+   *         errno = 0;
+   *         int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
+   *         ec = boost::system::error_code(n < 0 ? errno : 0,
+   *             boost::asio::error::get_system_category());
+   *         total_bytes_transferred_ += ec ? 0 : n;
+   *
+   *         // Retry operation immediately if interrupted by signal.
+   *         if (ec == boost::asio::error::interrupted)
+   *           continue;
+   *
+   *         // Check if we need to run the operation again.
+   *         if (ec == boost::asio::error::would_block
+   *             || ec == boost::asio::error::try_again)
+   *         {
+   *           // We have to wait for the socket to become ready again.
+   *           sock_.async_write_some(boost::asio::null_buffers(), *this);
+   *           return;
+   *         }
+   *
+   *         if (ec || n == 0)
+   *         {
+   *           // An error occurred, or we have reached the end of the file.
+   *           // Either way we must exit the loop so we can call the handler.
+   *           break;
+   *         }
+   *
+   *         // Loop around to try calling sendfile again.
+   *       }
+   *     }
+   *
+   *     // Pass result back to user's handler.
+   *     handler_(ec, total_bytes_transferred_);
+   *   }
+   * };
+   *
+   * template <typename Handler>
+   * void async_sendfile(tcp::socket& sock, int fd, Handler h)
+   * {
+   *   sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
+   *   sock.async_write_some(boost::asio::null_buffers(), op);
+   * } @endcode
+   */
+  bool native_non_blocking() const
+  {
+    return this->get_service().native_non_blocking(this->get_implementation());
+  }
+
+  /// Sets the non-blocking mode of the native socket implementation.
+  /**
+   * This function is used to modify the non-blocking mode of the underlying
+   * native socket. It has no effect on the behaviour of the socket object's
+   * synchronous operations.
+   *
+   * @param mode If @c true, the underlying socket is put into non-blocking
+   * mode and direct system calls may fail with boost::asio::error::would_block
+   * (or the equivalent system error).
+   *
+   * @throws boost::system::system_error Thrown on failure. If the @c mode is
+   * @c false, but the current value of @c non_blocking() is @c true, this
+   * function fails with boost::asio::error::invalid_argument, as the
+   * combination does not make sense.
+   *
+   * @par Example
+   * This function is intended to allow the encapsulation of arbitrary
+   * non-blocking system calls as asynchronous operations, in a way that is
+   * transparent to the user of the socket object. The following example
+   * illustrates how Linux's @c sendfile system call might be encapsulated:
+   * @code template <typename Handler>
+   * struct sendfile_op
+   * {
+   *   tcp::socket& sock_;
+   *   int fd_;
+   *   Handler handler_;
+   *   off_t offset_;
+   *   std::size_t total_bytes_transferred_;
+   *
+   *   // Function call operator meeting WriteHandler requirements.
+   *   // Used as the handler for the async_write_some operation.
+   *   void operator()(boost::system::error_code ec, std::size_t)
+   *   {
+   *     // Put the underlying socket into non-blocking mode.
+   *     if (!ec)
+   *       if (!sock_.native_non_blocking())
+   *         sock_.native_non_blocking(true, ec);
+   *
+   *     if (!ec)
+   *     {
+   *       for (;;)
+   *       {
+   *         // Try the system call.
+   *         errno = 0;
+   *         int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
+   *         ec = boost::system::error_code(n < 0 ? errno : 0,
+   *             boost::asio::error::get_system_category());
+   *         total_bytes_transferred_ += ec ? 0 : n;
+   *
+   *         // Retry operation immediately if interrupted by signal.
+   *         if (ec == boost::asio::error::interrupted)
+   *           continue;
+   *
+   *         // Check if we need to run the operation again.
+   *         if (ec == boost::asio::error::would_block
+   *             || ec == boost::asio::error::try_again)
+   *         {
+   *           // We have to wait for the socket to become ready again.
+   *           sock_.async_write_some(boost::asio::null_buffers(), *this);
+   *           return;
+   *         }
+   *
+   *         if (ec || n == 0)
+   *         {
+   *           // An error occurred, or we have reached the end of the file.
+   *           // Either way we must exit the loop so we can call the handler.
+   *           break;
+   *         }
+   *
+   *         // Loop around to try calling sendfile again.
+   *       }
+   *     }
+   *
+   *     // Pass result back to user's handler.
+   *     handler_(ec, total_bytes_transferred_);
+   *   }
+   * };
+   *
+   * template <typename Handler>
+   * void async_sendfile(tcp::socket& sock, int fd, Handler h)
+   * {
+   *   sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
+   *   sock.async_write_some(boost::asio::null_buffers(), op);
+   * } @endcode
+   */
+  void native_non_blocking(bool mode)
+  {
+    boost::system::error_code ec;
+    this->get_service().native_non_blocking(
+        this->get_implementation(), mode, ec);
+    boost::asio::detail::throw_error(ec, "native_non_blocking");
+  }
+
+  /// Sets the non-blocking mode of the native socket implementation.
+  /**
+   * This function is used to modify the non-blocking mode of the underlying
+   * native socket. It has no effect on the behaviour of the socket object's
+   * synchronous operations.
+   *
+   * @param mode If @c true, the underlying socket is put into non-blocking
+   * mode and direct system calls may fail with boost::asio::error::would_block
+   * (or the equivalent system error).
+   *
+   * @param ec Set to indicate what error occurred, if any. If the @c mode is
+   * @c false, but the current value of @c non_blocking() is @c true, this
+   * function fails with boost::asio::error::invalid_argument, as the
+   * combination does not make sense.
+   *
+   * @par Example
+   * This function is intended to allow the encapsulation of arbitrary
+   * non-blocking system calls as asynchronous operations, in a way that is
+   * transparent to the user of the socket object. The following example
+   * illustrates how Linux's @c sendfile system call might be encapsulated:
+   * @code template <typename Handler>
+   * struct sendfile_op
+   * {
+   *   tcp::socket& sock_;
+   *   int fd_;
+   *   Handler handler_;
+   *   off_t offset_;
+   *   std::size_t total_bytes_transferred_;
+   *
+   *   // Function call operator meeting WriteHandler requirements.
+   *   // Used as the handler for the async_write_some operation.
+   *   void operator()(boost::system::error_code ec, std::size_t)
+   *   {
+   *     // Put the underlying socket into non-blocking mode.
+   *     if (!ec)
+   *       if (!sock_.native_non_blocking())
+   *         sock_.native_non_blocking(true, ec);
+   *
+   *     if (!ec)
+   *     {
+   *       for (;;)
+   *       {
+   *         // Try the system call.
+   *         errno = 0;
+   *         int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
+   *         ec = boost::system::error_code(n < 0 ? errno : 0,
+   *             boost::asio::error::get_system_category());
+   *         total_bytes_transferred_ += ec ? 0 : n;
+   *
+   *         // Retry operation immediately if interrupted by signal.
+   *         if (ec == boost::asio::error::interrupted)
+   *           continue;
+   *
+   *         // Check if we need to run the operation again.
+   *         if (ec == boost::asio::error::would_block
+   *             || ec == boost::asio::error::try_again)
+   *         {
+   *           // We have to wait for the socket to become ready again.
+   *           sock_.async_write_some(boost::asio::null_buffers(), *this);
+   *           return;
+   *         }
+   *
+   *         if (ec || n == 0)
+   *         {
+   *           // An error occurred, or we have reached the end of the file.
+   *           // Either way we must exit the loop so we can call the handler.
+   *           break;
+   *         }
+   *
+   *         // Loop around to try calling sendfile again.
+   *       }
+   *     }
+   *
+   *     // Pass result back to user's handler.
+   *     handler_(ec, total_bytes_transferred_);
+   *   }
+   * };
+   *
+   * template <typename Handler>
+   * void async_sendfile(tcp::socket& sock, int fd, Handler h)
+   * {
+   *   sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
+   *   sock.async_write_some(boost::asio::null_buffers(), op);
+   * } @endcode
+   */
+  boost::system::error_code native_non_blocking(
+      bool mode, boost::system::error_code& ec)
+  {
+    return this->get_service().native_non_blocking(
+        this->get_implementation(), mode, ec);
+  }
+
+  /// Get the local endpoint of the socket.
+  /**
+   * This function is used to obtain the locally bound endpoint of the socket.
+   *
+   * @returns An object that represents the local endpoint of the socket.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * ...
+   * boost::asio::ip::tcp::endpoint endpoint = socket.local_endpoint();
+   * @endcode
+   */
+  endpoint_type local_endpoint() const
+  {
+    boost::system::error_code ec;
+    endpoint_type ep = this->get_service().local_endpoint(
+        this->get_implementation(), ec);
+    boost::asio::detail::throw_error(ec, "local_endpoint");
+    return ep;
+  }
+
+  /// Get the local endpoint of the socket.
+  /**
+   * This function is used to obtain the locally bound endpoint of the socket.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns An object that represents the local endpoint of the socket.
+   * Returns a default-constructed endpoint object if an error occurred.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * ...
+   * boost::system::error_code ec;
+   * boost::asio::ip::tcp::endpoint endpoint = socket.local_endpoint(ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * @endcode
+   */
+  endpoint_type local_endpoint(boost::system::error_code& ec) const
+  {
+    return this->get_service().local_endpoint(this->get_implementation(), ec);
+  }
+
+  /// Get the remote endpoint of the socket.
+  /**
+   * This function is used to obtain the remote endpoint of the socket.
+   *
+   * @returns An object that represents the remote endpoint of the socket.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * ...
+   * boost::asio::ip::tcp::endpoint endpoint = socket.remote_endpoint();
+   * @endcode
+   */
+  endpoint_type remote_endpoint() const
+  {
+    boost::system::error_code ec;
+    endpoint_type ep = this->get_service().remote_endpoint(
+        this->get_implementation(), ec);
+    boost::asio::detail::throw_error(ec, "remote_endpoint");
+    return ep;
+  }
+
+  /// Get the remote endpoint of the socket.
+  /**
+   * This function is used to obtain the remote endpoint of the socket.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns An object that represents the remote endpoint of the socket.
+   * Returns a default-constructed endpoint object if an error occurred.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * ...
+   * boost::system::error_code ec;
+   * boost::asio::ip::tcp::endpoint endpoint = socket.remote_endpoint(ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * @endcode
+   */
+  endpoint_type remote_endpoint(boost::system::error_code& ec) const
+  {
+    return this->get_service().remote_endpoint(this->get_implementation(), ec);
+  }
+
+  /// Disable sends or receives on the socket.
+  /**
+   * This function is used to disable send operations, receive operations, or
+   * both.
+   *
+   * @param what Determines what types of operation will no longer be allowed.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @par Example
+   * Shutting down the send side of the socket:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * ...
+   * socket.shutdown(boost::asio::ip::tcp::socket::shutdown_send);
+   * @endcode
+   */
+  void shutdown(shutdown_type what)
+  {
+    boost::system::error_code ec;
+    this->get_service().shutdown(this->get_implementation(), what, ec);
+    boost::asio::detail::throw_error(ec, "shutdown");
+  }
+
+  /// Disable sends or receives on the socket.
+  /**
+   * This function is used to disable send operations, receive operations, or
+   * both.
+   *
+   * @param what Determines what types of operation will no longer be allowed.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @par Example
+   * Shutting down the send side of the socket:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * ...
+   * boost::system::error_code ec;
+   * socket.shutdown(boost::asio::ip::tcp::socket::shutdown_send, ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * @endcode
+   */
+  boost::system::error_code shutdown(shutdown_type what,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().shutdown(this->get_implementation(), what, ec);
+  }
+
+protected:
+  /// Protected destructor to prevent deletion through this type.
+  ~basic_socket()
+  {
+  }
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_BASIC_SOCKET_HPP
diff --git a/ext/patches/boost/asio/basic_socket_acceptor.hpp b/ext/patches/boost/asio/basic_socket_acceptor.hpp
new file mode 100644
index 0000000..624f36c
--- /dev/null
+++ b/ext/patches/boost/asio/basic_socket_acceptor.hpp
@@ -0,0 +1,1138 @@
+//
+// basic_socket_acceptor.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BASIC_SOCKET_ACCEPTOR_HPP
+#define BOOST_ASIO_BASIC_SOCKET_ACCEPTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/basic_io_object.hpp>
+#include <boost/asio/basic_socket.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/detail/type_traits.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/socket_acceptor_service.hpp>
+#include <boost/asio/socket_base.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Provides the ability to accept new connections.
+/**
+ * The basic_socket_acceptor class template is used for accepting new socket
+ * connections.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ *
+ * @par Example
+ * Opening a socket acceptor with the SO_REUSEADDR option enabled:
+ * @code
+ * boost::asio::ip::tcp::acceptor acceptor(io_service);
+ * boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), port);
+ * acceptor.open(endpoint.protocol());
+ * acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
+ * acceptor.bind(endpoint);
+ * acceptor.listen();
+ * @endcode
+ */
+template <typename Protocol,
+    typename SocketAcceptorService = socket_acceptor_service<Protocol> >
+class basic_socket_acceptor
+  : public basic_io_object<SocketAcceptorService>,
+    public socket_base
+{
+public:
+  /// (Deprecated: Use native_handle_type.) The native representation of an
+  /// acceptor.
+  typedef typename SocketAcceptorService::native_handle_type native_type;
+
+  /// The native representation of an acceptor.
+  typedef typename SocketAcceptorService::native_handle_type native_handle_type;
+
+  /// The protocol type.
+  typedef Protocol protocol_type;
+
+  /// The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+  /// Construct an acceptor without opening it.
+  /**
+   * This constructor creates an acceptor without opening it to listen for new
+   * connections. The open() function must be called before the acceptor can
+   * accept new socket connections.
+   *
+   * @param io_service The io_service object that the acceptor will use to
+   * dispatch handlers for any asynchronous operations performed on the
+   * acceptor.
+   */
+  explicit basic_socket_acceptor(boost::asio::io_service& io_service)
+    : basic_io_object<SocketAcceptorService>(io_service)
+  {
+  }
+
+  /// Construct an open acceptor.
+  /**
+   * This constructor creates an acceptor and automatically opens it.
+   *
+   * @param io_service The io_service object that the acceptor will use to
+   * dispatch handlers for any asynchronous operations performed on the
+   * acceptor.
+   *
+   * @param protocol An object specifying protocol parameters to be used.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_socket_acceptor(boost::asio::io_service& io_service,
+      const protocol_type& protocol)
+    : basic_io_object<SocketAcceptorService>(io_service)
+  {
+    boost::system::error_code ec;
+    this->get_service().open(this->get_implementation(), protocol, ec);
+    boost::asio::detail::throw_error(ec, "open");
+  }
+
+  /// Construct an acceptor opened on the given endpoint.
+  /**
+   * This constructor creates an acceptor and automatically opens it to listen
+   * for new connections on the specified endpoint.
+   *
+   * @param io_service The io_service object that the acceptor will use to
+   * dispatch handlers for any asynchronous operations performed on the
+   * acceptor.
+   *
+   * @param endpoint An endpoint on the local machine on which the acceptor
+   * will listen for new connections.
+   *
+   * @param reuse_addr Whether the constructor should set the socket option
+   * socket_base::reuse_address.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note This constructor is equivalent to the following code:
+   * @code
+   * basic_socket_acceptor<Protocol> acceptor(io_service);
+   * acceptor.open(endpoint.protocol());
+   * if (reuse_addr)
+   *   acceptor.set_option(socket_base::reuse_address(true));
+   * acceptor.bind(endpoint);
+   * acceptor.listen(listen_backlog);
+   * @endcode
+   */
+  basic_socket_acceptor(boost::asio::io_service& io_service,
+      const endpoint_type& endpoint, bool reuse_addr = true)
+    : basic_io_object<SocketAcceptorService>(io_service)
+  {
+    boost::system::error_code ec;
+    const protocol_type protocol = endpoint.protocol();
+    this->get_service().open(this->get_implementation(), protocol, ec);
+    boost::asio::detail::throw_error(ec, "open");
+    if (reuse_addr)
+    {
+      this->get_service().set_option(this->get_implementation(),
+          socket_base::reuse_address(true), ec);
+      boost::asio::detail::throw_error(ec, "set_option");
+    }
+    this->get_service().bind(this->get_implementation(), endpoint, ec);
+    boost::asio::detail::throw_error(ec, "bind");
+    this->get_service().listen(this->get_implementation(),
+        socket_base::max_connections, ec);
+    boost::asio::detail::throw_error(ec, "listen");
+  }
+
+  /// Construct a basic_socket_acceptor on an existing native acceptor.
+  /**
+   * This constructor creates an acceptor object to hold an existing native
+   * acceptor.
+   *
+   * @param io_service The io_service object that the acceptor will use to
+   * dispatch handlers for any asynchronous operations performed on the
+   * acceptor.
+   *
+   * @param protocol An object specifying protocol parameters to be used.
+   *
+   * @param native_acceptor A native acceptor.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_socket_acceptor(boost::asio::io_service& io_service,
+      const protocol_type& protocol, const native_handle_type& native_acceptor)
+    : basic_io_object<SocketAcceptorService>(io_service)
+  {
+    boost::system::error_code ec;
+    this->get_service().assign(this->get_implementation(),
+        protocol, native_acceptor, ec);
+    boost::asio::detail::throw_error(ec, "assign");
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a basic_socket_acceptor from another.
+  /**
+   * This constructor moves an acceptor from one object to another.
+   *
+   * @param other The other basic_socket_acceptor object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_socket_acceptor(io_service&) constructor.
+   */
+  basic_socket_acceptor(basic_socket_acceptor&& other)
+    : basic_io_object<SocketAcceptorService>(
+        BOOST_ASIO_MOVE_CAST(basic_socket_acceptor)(other))
+  {
+  }
+
+  /// Move-assign a basic_socket_acceptor from another.
+  /**
+   * This assignment operator moves an acceptor from one object to another.
+   *
+   * @param other The other basic_socket_acceptor object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_socket_acceptor(io_service&) constructor.
+   */
+  basic_socket_acceptor& operator=(basic_socket_acceptor&& other)
+  {
+    basic_io_object<SocketAcceptorService>::operator=(
+        BOOST_ASIO_MOVE_CAST(basic_socket_acceptor)(other));
+    return *this;
+  }
+
+  // All socket acceptors have access to each other's implementations.
+  template <typename Protocol1, typename SocketAcceptorService1>
+  friend class basic_socket_acceptor;
+
+  /// Move-construct a basic_socket_acceptor from an acceptor of another
+  /// protocol type.
+  /**
+   * This constructor moves an acceptor from one object to another.
+   *
+   * @param other The other basic_socket_acceptor object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_socket(io_service&) constructor.
+   */
+  template <typename Protocol1, typename SocketAcceptorService1>
+  basic_socket_acceptor(
+      basic_socket_acceptor<Protocol1, SocketAcceptorService1>&& other,
+      typename enable_if<is_convertible<Protocol1, Protocol>::value>::type* = 0)
+    : basic_io_object<SocketAcceptorService>(other.get_io_service())
+  {
+    this->get_service().template converting_move_construct<Protocol1>(
+        this->get_implementation(), other.get_implementation());
+  }
+
+  /// Move-assign a basic_socket_acceptor from an acceptor of another protocol
+  /// type.
+  /**
+   * This assignment operator moves an acceptor from one object to another.
+   *
+   * @param other The other basic_socket_acceptor object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_socket(io_service&) constructor.
+   */
+  template <typename Protocol1, typename SocketAcceptorService1>
+  typename enable_if<is_convertible<Protocol1, Protocol>::value,
+      basic_socket_acceptor>::type& operator=(
+        basic_socket_acceptor<Protocol1, SocketAcceptorService1>&& other)
+  {
+    basic_socket_acceptor tmp(BOOST_ASIO_MOVE_CAST2(basic_socket_acceptor<
+            Protocol1, SocketAcceptorService1>)(other));
+    basic_io_object<SocketAcceptorService>::operator=(
+        BOOST_ASIO_MOVE_CAST(basic_socket_acceptor)(tmp));
+    return *this;
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Open the acceptor using the specified protocol.
+  /**
+   * This function opens the socket acceptor so that it will use the specified
+   * protocol.
+   *
+   * @param protocol An object specifying which protocol is to be used.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * acceptor.open(boost::asio::ip::tcp::v4());
+   * @endcode
+   */
+  void open(const protocol_type& protocol = protocol_type())
+  {
+    boost::system::error_code ec;
+    this->get_service().open(this->get_implementation(), protocol, ec);
+    boost::asio::detail::throw_error(ec, "open");
+  }
+
+  /// Open the acceptor using the specified protocol.
+  /**
+   * This function opens the socket acceptor so that it will use the specified
+   * protocol.
+   *
+   * @param protocol An object specifying which protocol is to be used.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * boost::system::error_code ec;
+   * acceptor.open(boost::asio::ip::tcp::v4(), ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * @endcode
+   */
+  boost::system::error_code open(const protocol_type& protocol,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().open(this->get_implementation(), protocol, ec);
+  }
+
+  /// Assigns an existing native acceptor to the acceptor.
+  /*
+   * This function opens the acceptor to hold an existing native acceptor.
+   *
+   * @param protocol An object specifying which protocol is to be used.
+   *
+   * @param native_acceptor A native acceptor.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void assign(const protocol_type& protocol,
+      const native_handle_type& native_acceptor)
+  {
+    boost::system::error_code ec;
+    this->get_service().assign(this->get_implementation(),
+        protocol, native_acceptor, ec);
+    boost::asio::detail::throw_error(ec, "assign");
+  }
+
+  /// Assigns an existing native acceptor to the acceptor.
+  /*
+   * This function opens the acceptor to hold an existing native acceptor.
+   *
+   * @param protocol An object specifying which protocol is to be used.
+   *
+   * @param native_acceptor A native acceptor.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code assign(const protocol_type& protocol,
+      const native_handle_type& native_acceptor, boost::system::error_code& ec)
+  {
+    return this->get_service().assign(this->get_implementation(),
+        protocol, native_acceptor, ec);
+  }
+
+  /// Determine whether the acceptor is open.
+  bool is_open() const
+  {
+    return this->get_service().is_open(this->get_implementation());
+  }
+
+  /// Bind the acceptor to the given local endpoint.
+  /**
+   * This function binds the socket acceptor to the specified endpoint on the
+   * local machine.
+   *
+   * @param endpoint An endpoint on the local machine to which the socket
+   * acceptor will be bound.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 12345);
+   * acceptor.open(endpoint.protocol());
+   * acceptor.bind(endpoint);
+   * @endcode
+   */
+  void bind(const endpoint_type& endpoint)
+  {
+    boost::system::error_code ec;
+    this->get_service().bind(this->get_implementation(), endpoint, ec);
+    boost::asio::detail::throw_error(ec, "bind");
+  }
+
+  /// Bind the acceptor to the given local endpoint.
+  /**
+   * This function binds the socket acceptor to the specified endpoint on the
+   * local machine.
+   *
+   * @param endpoint An endpoint on the local machine to which the socket
+   * acceptor will be bound.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 12345);
+   * acceptor.open(endpoint.protocol());
+   * boost::system::error_code ec;
+   * acceptor.bind(endpoint, ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * @endcode
+   */
+  boost::system::error_code bind(const endpoint_type& endpoint,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().bind(this->get_implementation(), endpoint, ec);
+  }
+
+  /// Place the acceptor into the state where it will listen for new
+  /// connections.
+  /**
+   * This function puts the socket acceptor into the state where it may accept
+   * new connections.
+   *
+   * @param backlog The maximum length of the queue of pending connections.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void listen(int backlog = socket_base::max_connections)
+  {
+    boost::system::error_code ec;
+    this->get_service().listen(this->get_implementation(), backlog, ec);
+    boost::asio::detail::throw_error(ec, "listen");
+  }
+
+  /// Place the acceptor into the state where it will listen for new
+  /// connections.
+  /**
+   * This function puts the socket acceptor into the state where it may accept
+   * new connections.
+   *
+   * @param backlog The maximum length of the queue of pending connections.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * ...
+   * boost::system::error_code ec;
+   * acceptor.listen(boost::asio::socket_base::max_connections, ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * @endcode
+   */
+  boost::system::error_code listen(int backlog, boost::system::error_code& ec)
+  {
+    return this->get_service().listen(this->get_implementation(), backlog, ec);
+  }
+
+  /// Close the acceptor.
+  /**
+   * This function is used to close the acceptor. Any asynchronous accept
+   * operations will be cancelled immediately.
+   *
+   * A subsequent call to open() is required before the acceptor can again be
+   * used to again perform socket accept operations.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void close()
+  {
+    boost::system::error_code ec;
+    this->get_service().close(this->get_implementation(), ec);
+    boost::asio::detail::throw_error(ec, "close");
+  }
+
+  /// Close the acceptor.
+  /**
+   * This function is used to close the acceptor. Any asynchronous accept
+   * operations will be cancelled immediately.
+   *
+   * A subsequent call to open() is required before the acceptor can again be
+   * used to again perform socket accept operations.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * ...
+   * boost::system::error_code ec;
+   * acceptor.close(ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * @endcode
+   */
+  boost::system::error_code close(boost::system::error_code& ec)
+  {
+    return this->get_service().close(this->get_implementation(), ec);
+  }
+
+  /// (Deprecated: Use native_handle().) Get the native acceptor representation.
+  /**
+   * This function may be used to obtain the underlying representation of the
+   * acceptor. This is intended to allow access to native acceptor functionality
+   * that is not otherwise provided.
+   */
+  native_type native()
+  {
+    return this->get_service().native_handle(this->get_implementation());
+  }
+
+  /// Get the native acceptor representation.
+  /**
+   * This function may be used to obtain the underlying representation of the
+   * acceptor. This is intended to allow access to native acceptor functionality
+   * that is not otherwise provided.
+   */
+  native_handle_type native_handle()
+  {
+    return this->get_service().native_handle(this->get_implementation());
+  }
+
+  /// Cancel all asynchronous operations associated with the acceptor.
+  /**
+   * This function causes all outstanding asynchronous connect, send and receive
+   * operations to finish immediately, and the handlers for cancelled operations
+   * will be passed the boost::asio::error::operation_aborted error.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void cancel()
+  {
+    boost::system::error_code ec;
+    this->get_service().cancel(this->get_implementation(), ec);
+    boost::asio::detail::throw_error(ec, "cancel");
+  }
+
+  /// Cancel all asynchronous operations associated with the acceptor.
+  /**
+   * This function causes all outstanding asynchronous connect, send and receive
+   * operations to finish immediately, and the handlers for cancelled operations
+   * will be passed the boost::asio::error::operation_aborted error.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code cancel(boost::system::error_code& ec)
+  {
+    return this->get_service().cancel(this->get_implementation(), ec);
+  }
+
+  /// Set an option on the acceptor.
+  /**
+   * This function is used to set an option on the acceptor.
+   *
+   * @param option The new option value to be set on the acceptor.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @sa SettableSocketOption @n
+   * boost::asio::socket_base::reuse_address
+   * boost::asio::socket_base::enable_connection_aborted
+   *
+   * @par Example
+   * Setting the SOL_SOCKET/SO_REUSEADDR option:
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * ...
+   * boost::asio::ip::tcp::acceptor::reuse_address option(true);
+   * acceptor.set_option(option);
+   * @endcode
+   */
+  template <typename SettableSocketOption>
+  void set_option(const SettableSocketOption& option)
+  {
+    boost::system::error_code ec;
+    this->get_service().set_option(this->get_implementation(), option, ec);
+    boost::asio::detail::throw_error(ec, "set_option");
+  }
+
+  /// Set an option on the acceptor.
+  /**
+   * This function is used to set an option on the acceptor.
+   *
+   * @param option The new option value to be set on the acceptor.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @sa SettableSocketOption @n
+   * boost::asio::socket_base::reuse_address
+   * boost::asio::socket_base::enable_connection_aborted
+   *
+   * @par Example
+   * Setting the SOL_SOCKET/SO_REUSEADDR option:
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * ...
+   * boost::asio::ip::tcp::acceptor::reuse_address option(true);
+   * boost::system::error_code ec;
+   * acceptor.set_option(option, ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * @endcode
+   */
+  template <typename SettableSocketOption>
+  boost::system::error_code set_option(const SettableSocketOption& option,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().set_option(
+        this->get_implementation(), option, ec);
+  }
+
+  /// Get an option from the acceptor.
+  /**
+   * This function is used to get the current value of an option on the
+   * acceptor.
+   *
+   * @param option The option value to be obtained from the acceptor.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @sa GettableSocketOption @n
+   * boost::asio::socket_base::reuse_address
+   *
+   * @par Example
+   * Getting the value of the SOL_SOCKET/SO_REUSEADDR option:
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * ...
+   * boost::asio::ip::tcp::acceptor::reuse_address option;
+   * acceptor.get_option(option);
+   * bool is_set = option.get();
+   * @endcode
+   */
+  template <typename GettableSocketOption>
+  void get_option(GettableSocketOption& option)
+  {
+    boost::system::error_code ec;
+    this->get_service().get_option(this->get_implementation(), option, ec);
+    boost::asio::detail::throw_error(ec, "get_option");
+  }
+
+  /// Get an option from the acceptor.
+  /**
+   * This function is used to get the current value of an option on the
+   * acceptor.
+   *
+   * @param option The option value to be obtained from the acceptor.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @sa GettableSocketOption @n
+   * boost::asio::socket_base::reuse_address
+   *
+   * @par Example
+   * Getting the value of the SOL_SOCKET/SO_REUSEADDR option:
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * ...
+   * boost::asio::ip::tcp::acceptor::reuse_address option;
+   * boost::system::error_code ec;
+   * acceptor.get_option(option, ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * bool is_set = option.get();
+   * @endcode
+   */
+  template <typename GettableSocketOption>
+  boost::system::error_code get_option(GettableSocketOption& option,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().get_option(
+        this->get_implementation(), option, ec);
+  }
+
+  /// Perform an IO control command on the acceptor.
+  /**
+   * This function is used to execute an IO control command on the acceptor.
+   *
+   * @param command The IO control command to be performed on the acceptor.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @sa IoControlCommand @n
+   * boost::asio::socket_base::non_blocking_io
+   *
+   * @par Example
+   * Getting the number of bytes ready to read:
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * ...
+   * boost::asio::ip::tcp::acceptor::non_blocking_io command(true);
+   * socket.io_control(command);
+   * @endcode
+   */
+  template <typename IoControlCommand>
+  void io_control(IoControlCommand& command)
+  {
+    boost::system::error_code ec;
+    this->get_service().io_control(this->get_implementation(), command, ec);
+    boost::asio::detail::throw_error(ec, "io_control");
+  }
+
+  /// Perform an IO control command on the acceptor.
+  /**
+   * This function is used to execute an IO control command on the acceptor.
+   *
+   * @param command The IO control command to be performed on the acceptor.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @sa IoControlCommand @n
+   * boost::asio::socket_base::non_blocking_io
+   *
+   * @par Example
+   * Getting the number of bytes ready to read:
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * ...
+   * boost::asio::ip::tcp::acceptor::non_blocking_io command(true);
+   * boost::system::error_code ec;
+   * socket.io_control(command, ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * @endcode
+   */
+  template <typename IoControlCommand>
+  boost::system::error_code io_control(IoControlCommand& command,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().io_control(
+        this->get_implementation(), command, ec);
+  }
+
+  /// Gets the non-blocking mode of the acceptor.
+  /**
+   * @returns @c true if the acceptor's synchronous operations will fail with
+   * boost::asio::error::would_block if they are unable to perform the requested
+   * operation immediately. If @c false, synchronous operations will block
+   * until complete.
+   *
+   * @note The non-blocking mode has no effect on the behaviour of asynchronous
+   * operations. Asynchronous operations will never fail with the error
+   * boost::asio::error::would_block.
+   */
+  bool non_blocking() const
+  {
+    return this->get_service().non_blocking(this->get_implementation());
+  }
+
+  /// Sets the non-blocking mode of the acceptor.
+  /**
+   * @param mode If @c true, the acceptor's synchronous operations will fail
+   * with boost::asio::error::would_block if they are unable to perform the
+   * requested operation immediately. If @c false, synchronous operations will
+   * block until complete.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The non-blocking mode has no effect on the behaviour of asynchronous
+   * operations. Asynchronous operations will never fail with the error
+   * boost::asio::error::would_block.
+   */
+  void non_blocking(bool mode)
+  {
+    boost::system::error_code ec;
+    this->get_service().non_blocking(this->get_implementation(), mode, ec);
+    boost::asio::detail::throw_error(ec, "non_blocking");
+  }
+
+  /// Sets the non-blocking mode of the acceptor.
+  /**
+   * @param mode If @c true, the acceptor's synchronous operations will fail
+   * with boost::asio::error::would_block if they are unable to perform the
+   * requested operation immediately. If @c false, synchronous operations will
+   * block until complete.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note The non-blocking mode has no effect on the behaviour of asynchronous
+   * operations. Asynchronous operations will never fail with the error
+   * boost::asio::error::would_block.
+   */
+  boost::system::error_code non_blocking(
+      bool mode, boost::system::error_code& ec)
+  {
+    return this->get_service().non_blocking(
+        this->get_implementation(), mode, ec);
+  }
+
+  /// Gets the non-blocking mode of the native acceptor implementation.
+  /**
+   * This function is used to retrieve the non-blocking mode of the underlying
+   * native acceptor. This mode has no effect on the behaviour of the acceptor
+   * object's synchronous operations.
+   *
+   * @returns @c true if the underlying acceptor is in non-blocking mode and
+   * direct system calls may fail with boost::asio::error::would_block (or the
+   * equivalent system error).
+   *
+   * @note The current non-blocking mode is cached by the acceptor object.
+   * Consequently, the return value may be incorrect if the non-blocking mode
+   * was set directly on the native acceptor.
+   */
+  bool native_non_blocking() const
+  {
+    return this->get_service().native_non_blocking(this->get_implementation());
+  }
+
+  /// Sets the non-blocking mode of the native acceptor implementation.
+  /**
+   * This function is used to modify the non-blocking mode of the underlying
+   * native acceptor. It has no effect on the behaviour of the acceptor object's
+   * synchronous operations.
+   *
+   * @param mode If @c true, the underlying acceptor is put into non-blocking
+   * mode and direct system calls may fail with boost::asio::error::would_block
+   * (or the equivalent system error).
+   *
+   * @throws boost::system::system_error Thrown on failure. If the @c mode is
+   * @c false, but the current value of @c non_blocking() is @c true, this
+   * function fails with boost::asio::error::invalid_argument, as the
+   * combination does not make sense.
+   */
+  void native_non_blocking(bool mode)
+  {
+    boost::system::error_code ec;
+    this->get_service().native_non_blocking(
+        this->get_implementation(), mode, ec);
+    boost::asio::detail::throw_error(ec, "native_non_blocking");
+  }
+
+  /// Sets the non-blocking mode of the native acceptor implementation.
+  /**
+   * This function is used to modify the non-blocking mode of the underlying
+   * native acceptor. It has no effect on the behaviour of the acceptor object's
+   * synchronous operations.
+   *
+   * @param mode If @c true, the underlying acceptor is put into non-blocking
+   * mode and direct system calls may fail with boost::asio::error::would_block
+   * (or the equivalent system error).
+   *
+   * @param ec Set to indicate what error occurred, if any. If the @c mode is
+   * @c false, but the current value of @c non_blocking() is @c true, this
+   * function fails with boost::asio::error::invalid_argument, as the
+   * combination does not make sense.
+   */
+  boost::system::error_code native_non_blocking(
+      bool mode, boost::system::error_code& ec)
+  {
+    return this->get_service().native_non_blocking(
+        this->get_implementation(), mode, ec);
+  }
+
+  /// Get the local endpoint of the acceptor.
+  /**
+   * This function is used to obtain the locally bound endpoint of the acceptor.
+   *
+   * @returns An object that represents the local endpoint of the acceptor.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * ...
+   * boost::asio::ip::tcp::endpoint endpoint = acceptor.local_endpoint();
+   * @endcode
+   */
+  endpoint_type local_endpoint() const
+  {
+    boost::system::error_code ec;
+    endpoint_type ep = this->get_service().local_endpoint(
+        this->get_implementation(), ec);
+    boost::asio::detail::throw_error(ec, "local_endpoint");
+    return ep;
+  }
+
+  /// Get the local endpoint of the acceptor.
+  /**
+   * This function is used to obtain the locally bound endpoint of the acceptor.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns An object that represents the local endpoint of the acceptor.
+   * Returns a default-constructed endpoint object if an error occurred and the
+   * error handler did not throw an exception.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * ...
+   * boost::system::error_code ec;
+   * boost::asio::ip::tcp::endpoint endpoint = acceptor.local_endpoint(ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * @endcode
+   */
+  endpoint_type local_endpoint(boost::system::error_code& ec) const
+  {
+    return this->get_service().local_endpoint(this->get_implementation(), ec);
+  }
+
+  /// Accept a new connection.
+  /**
+   * This function is used to accept a new connection from a peer into the
+   * given socket. The function call will block until a new connection has been
+   * accepted successfully or an error occurs.
+   *
+   * @param peer The socket into which the new connection will be accepted.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * ...
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * acceptor.accept(socket);
+   * @endcode
+   */
+  template <typename Protocol1, typename SocketService>
+  void accept(basic_socket<Protocol1, SocketService>& peer,
+      typename enable_if<is_convertible<Protocol, Protocol1>::value>::type* = 0)
+  {
+    boost::system::error_code ec;
+    this->get_service().accept(this->get_implementation(),
+        peer, static_cast<endpoint_type*>(0), ec);
+    boost::asio::detail::throw_error(ec, "accept");
+  }
+
+  /// Accept a new connection.
+  /**
+   * This function is used to accept a new connection from a peer into the
+   * given socket. The function call will block until a new connection has been
+   * accepted successfully or an error occurs.
+   *
+   * @param peer The socket into which the new connection will be accepted.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * ...
+   * boost::asio::ip::tcp::soocket socket(io_service);
+   * boost::system::error_code ec;
+   * acceptor.accept(socket, ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * @endcode
+   */
+  template <typename Protocol1, typename SocketService>
+  boost::system::error_code accept(
+      basic_socket<Protocol1, SocketService>& peer,
+      boost::system::error_code& ec,
+      typename enable_if<is_convertible<Protocol, Protocol1>::value>::type* = 0)
+  {
+    return this->get_service().accept(this->get_implementation(),
+        peer, static_cast<endpoint_type*>(0), ec);
+  }
+
+  /// Start an asynchronous accept.
+  /**
+   * This function is used to asynchronously accept a new connection into a
+   * socket. The function call always returns immediately.
+   *
+   * @param peer The socket into which the new connection will be accepted.
+   * Ownership of the peer object is retained by the caller, which must
+   * guarantee that it is valid until the handler is called.
+   *
+   * @param handler The handler to be called when the accept operation
+   * completes. Copies will be made of the handler as required. The function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error // Result of operation.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @par Example
+   * @code
+   * void accept_handler(const boost::system::error_code& error)
+   * {
+   *   if (!error)
+   *   {
+   *     // Accept succeeded.
+   *   }
+   * }
+   *
+   * ...
+   *
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * ...
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * acceptor.async_accept(socket, accept_handler);
+   * @endcode
+   */
+  template <typename Protocol1, typename SocketService, typename AcceptHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(AcceptHandler,
+      void (boost::system::error_code))
+  async_accept(basic_socket<Protocol1, SocketService>& peer,
+      BOOST_ASIO_MOVE_ARG(AcceptHandler) handler,
+      typename enable_if<is_convertible<Protocol, Protocol1>::value>::type* = 0)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a AcceptHandler.
+    BOOST_ASIO_ACCEPT_HANDLER_CHECK(AcceptHandler, handler) type_check;
+
+    return this->get_service().async_accept(this->get_implementation(),
+        peer, static_cast<endpoint_type*>(0),
+        BOOST_ASIO_MOVE_CAST(AcceptHandler)(handler));
+  }
+
+  /// Accept a new connection and obtain the endpoint of the peer
+  /**
+   * This function is used to accept a new connection from a peer into the
+   * given socket, and additionally provide the endpoint of the remote peer.
+   * The function call will block until a new connection has been accepted
+   * successfully or an error occurs.
+   *
+   * @param peer The socket into which the new connection will be accepted.
+   *
+   * @param peer_endpoint An endpoint object which will receive the endpoint of
+   * the remote peer.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * ...
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * boost::asio::ip::tcp::endpoint endpoint;
+   * acceptor.accept(socket, endpoint);
+   * @endcode
+   */
+  template <typename SocketService>
+  void accept(basic_socket<protocol_type, SocketService>& peer,
+      endpoint_type& peer_endpoint)
+  {
+    boost::system::error_code ec;
+    this->get_service().accept(this->get_implementation(),
+        peer, &peer_endpoint, ec);
+    boost::asio::detail::throw_error(ec, "accept");
+  }
+
+  /// Accept a new connection and obtain the endpoint of the peer
+  /**
+   * This function is used to accept a new connection from a peer into the
+   * given socket, and additionally provide the endpoint of the remote peer.
+   * The function call will block until a new connection has been accepted
+   * successfully or an error occurs.
+   *
+   * @param peer The socket into which the new connection will be accepted.
+   *
+   * @param peer_endpoint An endpoint object which will receive the endpoint of
+   * the remote peer.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service);
+   * ...
+   * boost::asio::ip::tcp::socket socket(io_service);
+   * boost::asio::ip::tcp::endpoint endpoint;
+   * boost::system::error_code ec;
+   * acceptor.accept(socket, endpoint, ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * @endcode
+   */
+  template <typename SocketService>
+  boost::system::error_code accept(
+      basic_socket<protocol_type, SocketService>& peer,
+      endpoint_type& peer_endpoint, boost::system::error_code& ec)
+  {
+    return this->get_service().accept(
+        this->get_implementation(), peer, &peer_endpoint, ec);
+  }
+
+  /// Start an asynchronous accept.
+  /**
+   * This function is used to asynchronously accept a new connection into a
+   * socket, and additionally obtain the endpoint of the remote peer. The
+   * function call always returns immediately.
+   *
+   * @param peer The socket into which the new connection will be accepted.
+   * Ownership of the peer object is retained by the caller, which must
+   * guarantee that it is valid until the handler is called.
+   *
+   * @param peer_endpoint An endpoint object into which the endpoint of the
+   * remote peer will be written. Ownership of the peer_endpoint object is
+   * retained by the caller, which must guarantee that it is valid until the
+   * handler is called.
+   *
+   * @param handler The handler to be called when the accept operation
+   * completes. Copies will be made of the handler as required. The function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error // Result of operation.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   */
+  template <typename SocketService, typename AcceptHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(AcceptHandler,
+      void (boost::system::error_code))
+  async_accept(basic_socket<protocol_type, SocketService>& peer,
+      endpoint_type& peer_endpoint, BOOST_ASIO_MOVE_ARG(AcceptHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a AcceptHandler.
+    BOOST_ASIO_ACCEPT_HANDLER_CHECK(AcceptHandler, handler) type_check;
+
+    return this->get_service().async_accept(this->get_implementation(), peer,
+        &peer_endpoint, BOOST_ASIO_MOVE_CAST(AcceptHandler)(handler));
+  }
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_BASIC_SOCKET_ACCEPTOR_HPP
diff --git a/ext/patches/boost/asio/basic_socket_iostream.hpp b/ext/patches/boost/asio/basic_socket_iostream.hpp
new file mode 100644
index 0000000..e36cb82
--- /dev/null
+++ b/ext/patches/boost/asio/basic_socket_iostream.hpp
@@ -0,0 +1,288 @@
+//
+// basic_socket_iostream.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BASIC_SOCKET_IOSTREAM_HPP
+#define BOOST_ASIO_BASIC_SOCKET_IOSTREAM_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#include <istream>
+#include <ostream>
+#include <boost/asio/basic_socket_streambuf.hpp>
+#include <boost/asio/stream_socket_service.hpp>
+
+#if !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+
+# include <boost/asio/detail/variadic_templates.hpp>
+
+// A macro that should expand to:
+//   template <typename T1, ..., typename Tn>
+//   explicit basic_socket_iostream(T1 x1, ..., Tn xn)
+//     : std::basic_iostream<char>(
+//         &this->detail::socket_iostream_base<
+//           Protocol, StreamSocketService, Time,
+//           TimeTraits, TimerService>::streambuf_)
+//   {
+//     if (rdbuf()->connect(x1, ..., xn) == 0)
+//       this->setstate(std::ios_base::failbit);
+//   }
+// This macro should only persist within this file.
+
+# define BOOST_ASIO_PRIVATE_CTR_DEF(n) \
+  template <BOOST_ASIO_VARIADIC_TPARAMS(n)> \
+  explicit basic_socket_iostream(BOOST_ASIO_VARIADIC_PARAMS(n)) \
+    : std::basic_iostream<char>( \
+        &this->detail::socket_iostream_base< \
+          Protocol, StreamSocketService, Time, \
+          TimeTraits, TimerService>::streambuf_) \
+  { \
+    this->setf(std::ios_base::unitbuf); \
+    if (rdbuf()->connect(BOOST_ASIO_VARIADIC_ARGS(n)) == 0) \
+      this->setstate(std::ios_base::failbit); \
+  } \
+  /**/
+
+// A macro that should expand to:
+//   template <typename T1, ..., typename Tn>
+//   void connect(T1 x1, ..., Tn xn)
+//   {
+//     if (rdbuf()->connect(x1, ..., xn) == 0)
+//       this->setstate(std::ios_base::failbit);
+//   }
+// This macro should only persist within this file.
+
+# define BOOST_ASIO_PRIVATE_CONNECT_DEF(n) \
+  template <BOOST_ASIO_VARIADIC_TPARAMS(n)> \
+  void connect(BOOST_ASIO_VARIADIC_PARAMS(n)) \
+  { \
+    if (rdbuf()->connect(BOOST_ASIO_VARIADIC_ARGS(n)) == 0) \
+      this->setstate(std::ios_base::failbit); \
+  } \
+  /**/
+
+#endif // !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+// A separate base class is used to ensure that the streambuf is initialised
+// prior to the basic_socket_iostream's basic_iostream base class.
+template <typename Protocol, typename StreamSocketService,
+    typename Time, typename TimeTraits, typename TimerService>
+class socket_iostream_base
+{
+protected:
+  basic_socket_streambuf<Protocol, StreamSocketService,
+    Time, TimeTraits, TimerService> streambuf_;
+};
+
+}
+
+/// Iostream interface for a socket.
+template <typename Protocol,
+    typename StreamSocketService = stream_socket_service<Protocol>,
+#if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) \
+  || defined(GENERATING_DOCUMENTATION)
+    typename Time = boost::posix_time::ptime,
+    typename TimeTraits = boost::asio::time_traits<Time>,
+    typename TimerService = deadline_timer_service<Time, TimeTraits> >
+#else
+    typename Time = steady_timer::clock_type,
+    typename TimeTraits = steady_timer::traits_type,
+    typename TimerService = steady_timer::service_type>
+#endif
+class basic_socket_iostream
+  : private detail::socket_iostream_base<Protocol,
+        StreamSocketService, Time, TimeTraits, TimerService>,
+    public std::basic_iostream<char>
+{
+private:
+  // These typedefs are intended keep this class's implementation independent
+  // of whether it's using Boost.DateTime, Boost.Chrono or std::chrono.
+#if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+  typedef TimeTraits traits_helper;
+#else
+  typedef detail::chrono_time_traits<Time, TimeTraits> traits_helper;
+#endif
+
+public:
+  /// The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+#if defined(GENERATING_DOCUMENTATION)
+  /// The time type.
+  typedef typename TimeTraits::time_type time_type;
+
+  /// The duration type.
+  typedef typename TimeTraits::duration_type duration_type;
+#else
+  typedef typename traits_helper::time_type time_type;
+  typedef typename traits_helper::duration_type duration_type;
+#endif
+
+  /// Construct a basic_socket_iostream without establishing a connection.
+  basic_socket_iostream()
+    : std::basic_iostream<char>(
+        &this->detail::socket_iostream_base<
+          Protocol, StreamSocketService, Time,
+          TimeTraits, TimerService>::streambuf_)
+  {
+    this->setf(std::ios_base::unitbuf);
+  }
+
+#if defined(GENERATING_DOCUMENTATION)
+  /// Establish a connection to an endpoint corresponding to a resolver query.
+  /**
+   * This constructor automatically establishes a connection based on the
+   * supplied resolver query parameters. The arguments are used to construct
+   * a resolver query object.
+   */
+  template <typename T1, ..., typename TN>
+  explicit basic_socket_iostream(T1 t1, ..., TN tn);
+#elif defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+  template <typename... T>
+  explicit basic_socket_iostream(T... x)
+    : std::basic_iostream<char>(
+        &this->detail::socket_iostream_base<
+          Protocol, StreamSocketService, Time,
+          TimeTraits, TimerService>::streambuf_)
+  {
+    this->setf(std::ios_base::unitbuf);
+    if (rdbuf()->connect(x...) == 0)
+      this->setstate(std::ios_base::failbit);
+  }
+#else
+  BOOST_ASIO_VARIADIC_GENERATE(BOOST_ASIO_PRIVATE_CTR_DEF)
+#endif
+
+#if defined(GENERATING_DOCUMENTATION)
+  /// Establish a connection to an endpoint corresponding to a resolver query.
+  /**
+   * This function automatically establishes a connection based on the supplied
+   * resolver query parameters. The arguments are used to construct a resolver
+   * query object.
+   */
+  template <typename T1, ..., typename TN>
+  void connect(T1 t1, ..., TN tn);
+#elif defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+  template <typename... T>
+  void connect(T... x)
+  {
+    if (rdbuf()->connect(x...) == 0)
+      this->setstate(std::ios_base::failbit);
+  }
+#else
+  BOOST_ASIO_VARIADIC_GENERATE(BOOST_ASIO_PRIVATE_CONNECT_DEF)
+#endif
+
+  /// Close the connection.
+  void close()
+  {
+    if (rdbuf()->close() == 0)
+      this->setstate(std::ios_base::failbit);
+  }
+
+  /// Return a pointer to the underlying streambuf.
+  basic_socket_streambuf<Protocol, StreamSocketService,
+    Time, TimeTraits, TimerService>* rdbuf() const
+  {
+    return const_cast<basic_socket_streambuf<Protocol, StreamSocketService,
+      Time, TimeTraits, TimerService>*>(
+        &this->detail::socket_iostream_base<
+          Protocol, StreamSocketService, Time,
+          TimeTraits, TimerService>::streambuf_);
+  }
+
+  /// Get the last error associated with the stream.
+  /**
+   * @return An \c error_code corresponding to the last error from the stream.
+   *
+   * @par Example
+   * To print the error associated with a failure to establish a connection:
+   * @code tcp::iostream s("www.boost.org", "http");
+   * if (!s)
+   * {
+   *   std::cout << "Error: " << s.error().message() << std::endl;
+   * } @endcode
+   */
+  const boost::system::error_code& error() const
+  {
+    return rdbuf()->puberror();
+  }
+
+  /// Get the stream's expiry time as an absolute time.
+  /**
+   * @return An absolute time value representing the stream's expiry time.
+   */
+  time_type expires_at() const
+  {
+    return rdbuf()->expires_at();
+  }
+
+  /// Set the stream's expiry time as an absolute time.
+  /**
+   * This function sets the expiry time associated with the stream. Stream
+   * operations performed after this time (where the operations cannot be
+   * completed using the internal buffers) will fail with the error
+   * boost::asio::error::operation_aborted.
+   *
+   * @param expiry_time The expiry time to be used for the stream.
+   */
+  void expires_at(const time_type& expiry_time)
+  {
+    rdbuf()->expires_at(expiry_time);
+  }
+
+  /// Get the timer's expiry time relative to now.
+  /**
+   * @return A relative time value representing the stream's expiry time.
+   */
+  duration_type expires_from_now() const
+  {
+    return rdbuf()->expires_from_now();
+  }
+
+  /// Set the stream's expiry time relative to now.
+  /**
+   * This function sets the expiry time associated with the stream. Stream
+   * operations performed after this time (where the operations cannot be
+   * completed using the internal buffers) will fail with the error
+   * boost::asio::error::operation_aborted.
+   *
+   * @param expiry_time The expiry time to be used for the timer.
+   */
+  void expires_from_now(const duration_type& expiry_time)
+  {
+    rdbuf()->expires_from_now(expiry_time);
+  }
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+# undef BOOST_ASIO_PRIVATE_CTR_DEF
+# undef BOOST_ASIO_PRIVATE_CONNECT_DEF
+#endif // !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#endif // BOOST_ASIO_BASIC_SOCKET_IOSTREAM_HPP
diff --git a/ext/patches/boost/asio/basic_socket_streambuf.hpp b/ext/patches/boost/asio/basic_socket_streambuf.hpp
new file mode 100644
index 0000000..7ab62be
--- /dev/null
+++ b/ext/patches/boost/asio/basic_socket_streambuf.hpp
@@ -0,0 +1,569 @@
+//
+// basic_socket_streambuf.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BASIC_SOCKET_STREAMBUF_HPP
+#define BOOST_ASIO_BASIC_SOCKET_STREAMBUF_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#include <streambuf>
+#include <boost/asio/basic_socket.hpp>
+#include <boost/asio/deadline_timer_service.hpp>
+#include <boost/asio/detail/array.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/stream_socket_service.hpp>
+
+#if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+# include <boost/asio/deadline_timer.hpp>
+#else
+# include <boost/asio/steady_timer.hpp>
+#endif
+
+#if !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+
+# include <boost/asio/detail/variadic_templates.hpp>
+
+// A macro that should expand to:
+//   template <typename T1, ..., typename Tn>
+//   basic_socket_streambuf<Protocol, StreamSocketService,
+//     Time, TimeTraits, TimerService>* connect(
+//       T1 x1, ..., Tn xn)
+//   {
+//     init_buffers();
+//     this->basic_socket<Protocol, StreamSocketService>::close(ec_);
+//     typedef typename Protocol::resolver resolver_type;
+//     typedef typename resolver_type::query resolver_query;
+//     resolver_query query(x1, ..., xn);
+//     resolve_and_connect(query);
+//     return !ec_ ? this : 0;
+//   }
+// This macro should only persist within this file.
+
+# define BOOST_ASIO_PRIVATE_CONNECT_DEF(n) \
+  template <BOOST_ASIO_VARIADIC_TPARAMS(n)> \
+  basic_socket_streambuf<Protocol, StreamSocketService, \
+    Time, TimeTraits, TimerService>* connect(BOOST_ASIO_VARIADIC_PARAMS(n)) \
+  { \
+    init_buffers(); \
+    this->basic_socket<Protocol, StreamSocketService>::close(ec_); \
+    typedef typename Protocol::resolver resolver_type; \
+    typedef typename resolver_type::query resolver_query; \
+    resolver_query query(BOOST_ASIO_VARIADIC_ARGS(n)); \
+    resolve_and_connect(query); \
+    return !ec_ ? this : 0; \
+  } \
+  /**/
+
+#endif // !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+// A separate base class is used to ensure that the io_service is initialised
+// prior to the basic_socket_streambuf's basic_socket base class.
+class socket_streambuf_base
+{
+protected:
+  io_service io_service_;
+};
+
+} // namespace detail
+
+/// Iostream streambuf for a socket.
+template <typename Protocol,
+    typename StreamSocketService = stream_socket_service<Protocol>,
+#if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) \
+  || defined(GENERATING_DOCUMENTATION)
+    typename Time = boost::posix_time::ptime,
+    typename TimeTraits = boost::asio::time_traits<Time>,
+    typename TimerService = deadline_timer_service<Time, TimeTraits> >
+#else
+    typename Time = steady_timer::clock_type,
+    typename TimeTraits = steady_timer::traits_type,
+    typename TimerService = steady_timer::service_type>
+#endif
+class basic_socket_streambuf
+  : public std::streambuf,
+    private detail::socket_streambuf_base,
+    public basic_socket<Protocol, StreamSocketService>
+{
+private:
+  // These typedefs are intended keep this class's implementation independent
+  // of whether it's using Boost.DateTime, Boost.Chrono or std::chrono.
+#if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+  typedef TimeTraits traits_helper;
+#else
+  typedef detail::chrono_time_traits<Time, TimeTraits> traits_helper;
+#endif
+
+public:
+  /// The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+#if defined(GENERATING_DOCUMENTATION)
+  /// The time type.
+  typedef typename TimeTraits::time_type time_type;
+
+  /// The duration type.
+  typedef typename TimeTraits::duration_type duration_type;
+#else
+  typedef typename traits_helper::time_type time_type;
+  typedef typename traits_helper::duration_type duration_type;
+#endif
+
+  /// Construct a basic_socket_streambuf without establishing a connection.
+  basic_socket_streambuf()
+    : basic_socket<Protocol, StreamSocketService>(
+        this->detail::socket_streambuf_base::io_service_),
+      unbuffered_(false),
+      timer_service_(0),
+      timer_state_(no_timer)
+  {
+    init_buffers();
+  }
+
+  /// Destructor flushes buffered data.
+  virtual ~basic_socket_streambuf()
+  {
+    if (pptr() != pbase())
+      overflow(traits_type::eof());
+
+    destroy_timer();
+  }
+
+  /// Establish a connection.
+  /**
+   * This function establishes a connection to the specified endpoint.
+   *
+   * @return \c this if a connection was successfully established, a null
+   * pointer otherwise.
+   */
+  basic_socket_streambuf<Protocol, StreamSocketService,
+    Time, TimeTraits, TimerService>* connect(
+      const endpoint_type& endpoint)
+  {
+    init_buffers();
+
+    this->basic_socket<Protocol, StreamSocketService>::close(ec_);
+
+    if (timer_state_ == timer_has_expired)
+    {
+      ec_ = boost::asio::error::operation_aborted;
+      return 0;
+    }
+
+    io_handler handler = { this };
+    this->basic_socket<Protocol, StreamSocketService>::async_connect(
+        endpoint, handler);
+
+    ec_ = boost::asio::error::would_block;
+    this->get_service().get_io_service().reset();
+    do this->get_service().get_io_service().run_one();
+    while (ec_ == boost::asio::error::would_block);
+
+    return !ec_ ? this : 0;
+  }
+
+#if defined(GENERATING_DOCUMENTATION)
+  /// Establish a connection.
+  /**
+   * This function automatically establishes a connection based on the supplied
+   * resolver query parameters. The arguments are used to construct a resolver
+   * query object.
+   *
+   * @return \c this if a connection was successfully established, a null
+   * pointer otherwise.
+   */
+  template <typename T1, ..., typename TN>
+  basic_socket_streambuf<Protocol, StreamSocketService>* connect(
+      T1 t1, ..., TN tn);
+#elif defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+  template <typename... T>
+  basic_socket_streambuf<Protocol, StreamSocketService,
+    Time, TimeTraits, TimerService>* connect(T... x)
+  {
+    init_buffers();
+    this->basic_socket<Protocol, StreamSocketService>::close(ec_);
+    typedef typename Protocol::resolver resolver_type;
+    typedef typename resolver_type::query resolver_query;
+    resolver_query query(x...);
+    resolve_and_connect(query);
+    return !ec_ ? this : 0;
+  }
+#else
+  BOOST_ASIO_VARIADIC_GENERATE(BOOST_ASIO_PRIVATE_CONNECT_DEF)
+#endif
+
+  /// Close the connection.
+  /**
+   * @return \c this if a connection was successfully established, a null
+   * pointer otherwise.
+   */
+  basic_socket_streambuf<Protocol, StreamSocketService,
+    Time, TimeTraits, TimerService>* close()
+  {
+    sync();
+    this->basic_socket<Protocol, StreamSocketService>::close(ec_);
+    if (!ec_)
+      init_buffers();
+    return !ec_ ? this : 0;
+  }
+
+  /// Get the last error associated with the stream buffer.
+  /**
+   * @return An \c error_code corresponding to the last error from the stream
+   * buffer.
+   */
+  const boost::system::error_code& puberror() const
+  {
+    return error();
+  }
+
+  /// Get the stream buffer's expiry time as an absolute time.
+  /**
+   * @return An absolute time value representing the stream buffer's expiry
+   * time.
+   */
+  time_type expires_at() const
+  {
+    return timer_service_
+      ? timer_service_->expires_at(timer_implementation_)
+      : time_type();
+  }
+
+  /// Set the stream buffer's expiry time as an absolute time.
+  /**
+   * This function sets the expiry time associated with the stream. Stream
+   * operations performed after this time (where the operations cannot be
+   * completed using the internal buffers) will fail with the error
+   * boost::asio::error::operation_aborted.
+   *
+   * @param expiry_time The expiry time to be used for the stream.
+   */
+  void expires_at(const time_type& expiry_time)
+  {
+    construct_timer();
+
+    boost::system::error_code ec;
+    timer_service_->expires_at(timer_implementation_, expiry_time, ec);
+    boost::asio::detail::throw_error(ec, "expires_at");
+
+    start_timer();
+  }
+
+  /// Get the stream buffer's expiry time relative to now.
+  /**
+   * @return A relative time value representing the stream buffer's expiry time.
+   */
+  duration_type expires_from_now() const
+  {
+    return traits_helper::subtract(expires_at(), traits_helper::now());
+  }
+
+  /// Set the stream buffer's expiry time relative to now.
+  /**
+   * This function sets the expiry time associated with the stream. Stream
+   * operations performed after this time (where the operations cannot be
+   * completed using the internal buffers) will fail with the error
+   * boost::asio::error::operation_aborted.
+   *
+   * @param expiry_time The expiry time to be used for the timer.
+   */
+  void expires_from_now(const duration_type& expiry_time)
+  {
+    construct_timer();
+
+    boost::system::error_code ec;
+    timer_service_->expires_from_now(timer_implementation_, expiry_time, ec);
+    boost::asio::detail::throw_error(ec, "expires_from_now");
+
+    start_timer();
+  }
+
+protected:
+  int_type underflow()
+  {
+    if (gptr() == egptr())
+    {
+      if (timer_state_ == timer_has_expired)
+      {
+        ec_ = boost::asio::error::operation_aborted;
+        return traits_type::eof();
+      }
+
+      io_handler handler = { this };
+      this->get_service().async_receive(this->get_implementation(),
+          boost::asio::buffer(boost::asio::buffer(get_buffer_) + putback_max),
+          0, handler);
+
+      ec_ = boost::asio::error::would_block;
+      this->get_service().get_io_service().reset();
+      do this->get_service().get_io_service().run_one();
+      while (ec_ == boost::asio::error::would_block);
+      if (ec_)
+        return traits_type::eof();
+
+      setg(&get_buffer_[0], &get_buffer_[0] + putback_max,
+          &get_buffer_[0] + putback_max + bytes_transferred_);
+      return traits_type::to_int_type(*gptr());
+    }
+    else
+    {
+      return traits_type::eof();
+    }
+  }
+
+  int_type overflow(int_type c)
+  {
+    if (unbuffered_)
+    {
+      if (traits_type::eq_int_type(c, traits_type::eof()))
+      {
+        // Nothing to do.
+        return traits_type::not_eof(c);
+      }
+      else
+      {
+        if (timer_state_ == timer_has_expired)
+        {
+          ec_ = boost::asio::error::operation_aborted;
+          return traits_type::eof();
+        }
+
+        // Send the single character immediately.
+        char_type ch = traits_type::to_char_type(c);
+        io_handler handler = { this };
+        this->get_service().async_send(this->get_implementation(),
+            boost::asio::buffer(&ch, sizeof(char_type)), 0, handler);
+
+        ec_ = boost::asio::error::would_block;
+        this->get_service().get_io_service().reset();
+        do this->get_service().get_io_service().run_one();
+        while (ec_ == boost::asio::error::would_block);
+        if (ec_)
+          return traits_type::eof();
+
+        return c;
+      }
+    }
+    else
+    {
+      // Send all data in the output buffer.
+      boost::asio::const_buffer buffer =
+        boost::asio::buffer(pbase(), pptr() - pbase());
+      while (boost::asio::buffer_size(buffer) > 0)
+      {
+        if (timer_state_ == timer_has_expired)
+        {
+          ec_ = boost::asio::error::operation_aborted;
+          return traits_type::eof();
+        }
+
+        io_handler handler = { this };
+        this->get_service().async_send(this->get_implementation(),
+            boost::asio::buffer(buffer), 0, handler);
+
+        ec_ = boost::asio::error::would_block;
+        this->get_service().get_io_service().reset();
+        do this->get_service().get_io_service().run_one();
+        while (ec_ == boost::asio::error::would_block);
+        if (ec_)
+          return traits_type::eof();
+
+        buffer = buffer + bytes_transferred_;
+      }
+      setp(&put_buffer_[0], &put_buffer_[0] + put_buffer_.size());
+
+      // If the new character is eof then our work here is done.
+      if (traits_type::eq_int_type(c, traits_type::eof()))
+        return traits_type::not_eof(c);
+
+      // Add the new character to the output buffer.
+      *pptr() = traits_type::to_char_type(c);
+      pbump(1);
+      return c;
+    }
+  }
+
+  int sync()
+  {
+    return overflow(traits_type::eof());
+  }
+
+  std::streambuf* setbuf(char_type* s, std::streamsize n)
+  {
+    if (pptr() == pbase() && s == 0 && n == 0)
+    {
+      unbuffered_ = true;
+      setp(0, 0);
+      return this;
+    }
+
+    return 0;
+  }
+
+  /// Get the last error associated with the stream buffer.
+  /**
+   * @return An \c error_code corresponding to the last error from the stream
+   * buffer.
+   */
+  virtual const boost::system::error_code& error() const
+  {
+    return ec_;
+  }
+
+private:
+  void init_buffers()
+  {
+    setg(&get_buffer_[0],
+        &get_buffer_[0] + putback_max,
+        &get_buffer_[0] + putback_max);
+    if (unbuffered_)
+      setp(0, 0);
+    else
+      setp(&put_buffer_[0], &put_buffer_[0] + put_buffer_.size());
+  }
+
+  template <typename ResolverQuery>
+  void resolve_and_connect(const ResolverQuery& query)
+  {
+    typedef typename Protocol::resolver resolver_type;
+    typedef typename resolver_type::iterator iterator_type;
+    resolver_type resolver(detail::socket_streambuf_base::io_service_);
+    iterator_type i = resolver.resolve(query, ec_);
+    if (!ec_)
+    {
+      iterator_type end;
+      ec_ = boost::asio::error::host_not_found;
+      while (ec_ && i != end)
+      {
+        this->basic_socket<Protocol, StreamSocketService>::close(ec_);
+
+        if (timer_state_ == timer_has_expired)
+        {
+          ec_ = boost::asio::error::operation_aborted;
+          return;
+        }
+
+        io_handler handler = { this };
+        this->basic_socket<Protocol, StreamSocketService>::async_connect(
+            *i, handler);
+
+        ec_ = boost::asio::error::would_block;
+        this->get_service().get_io_service().reset();
+        do this->get_service().get_io_service().run_one();
+        while (ec_ == boost::asio::error::would_block);
+
+        ++i;
+      }
+    }
+  }
+
+  struct io_handler;
+  friend struct io_handler;
+  struct io_handler
+  {
+    basic_socket_streambuf* this_;
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred = 0)
+    {
+      this_->ec_ = ec;
+      this_->bytes_transferred_ = bytes_transferred;
+    }
+  };
+
+  struct timer_handler;
+  friend struct timer_handler;
+  struct timer_handler
+  {
+    basic_socket_streambuf* this_;
+
+    void operator()(const boost::system::error_code&)
+    {
+      time_type now = traits_helper::now();
+
+      time_type expiry_time = this_->timer_service_->expires_at(
+            this_->timer_implementation_);
+
+      if (traits_helper::less_than(now, expiry_time))
+      {
+        this_->timer_state_ = timer_is_pending;
+        this_->timer_service_->async_wait(this_->timer_implementation_, *this);
+      }
+      else
+      {
+        this_->timer_state_ = timer_has_expired;
+        boost::system::error_code ec;
+        this_->basic_socket<Protocol, StreamSocketService>::close(ec);
+      }
+    }
+  };
+
+  void construct_timer()
+  {
+    if (timer_service_ == 0)
+    {
+      TimerService& timer_service = use_service<TimerService>(
+          detail::socket_streambuf_base::io_service_);
+      timer_service.construct(timer_implementation_);
+      timer_service_ = &timer_service;
+    }
+  }
+
+  void destroy_timer()
+  {
+    if (timer_service_)
+      timer_service_->destroy(timer_implementation_);
+  }
+
+  void start_timer()
+  {
+    if (timer_state_ != timer_is_pending)
+    {
+      timer_handler handler = { this };
+      handler(boost::system::error_code());
+    }
+  }
+
+  enum { putback_max = 8 };
+  enum { buffer_size = 512 };
+  boost::asio::detail::array<char, buffer_size> get_buffer_;
+  boost::asio::detail::array<char, buffer_size> put_buffer_;
+  bool unbuffered_;
+  boost::system::error_code ec_;
+  std::size_t bytes_transferred_;
+  TimerService* timer_service_;
+  typename TimerService::implementation_type timer_implementation_;
+  enum state { no_timer, timer_is_pending, timer_has_expired } timer_state_;
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+# undef BOOST_ASIO_PRIVATE_CONNECT_DEF
+#endif // !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#endif // BOOST_ASIO_BASIC_SOCKET_STREAMBUF_HPP
diff --git a/ext/patches/boost/asio/basic_stream_socket.hpp b/ext/patches/boost/asio/basic_stream_socket.hpp
new file mode 100644
index 0000000..ed31554
--- /dev/null
+++ b/ext/patches/boost/asio/basic_stream_socket.hpp
@@ -0,0 +1,854 @@
+//
+// basic_stream_socket.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BASIC_STREAM_SOCKET_HPP
+#define BOOST_ASIO_BASIC_STREAM_SOCKET_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/basic_socket.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/stream_socket_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Provides stream-oriented socket functionality.
+/**
+ * The basic_stream_socket class template provides asynchronous and blocking
+ * stream-oriented socket functionality.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ *
+ * @par Concepts:
+ * AsyncReadStream, AsyncWriteStream, Stream, SyncReadStream, SyncWriteStream.
+ */
+template <typename Protocol,
+    typename StreamSocketService = stream_socket_service<Protocol> >
+class basic_stream_socket
+  : public basic_socket<Protocol, StreamSocketService>
+{
+public:
+  /// (Deprecated: Use native_handle_type.) The native representation of a
+  /// socket.
+  typedef typename StreamSocketService::native_handle_type native_type;
+
+  /// The native representation of a socket.
+  typedef typename StreamSocketService::native_handle_type native_handle_type;
+
+  /// The protocol type.
+  typedef Protocol protocol_type;
+
+  /// The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+  /// Construct a basic_stream_socket without opening it.
+  /**
+   * This constructor creates a stream socket without opening it. The socket
+   * needs to be opened and then connected or accepted before data can be sent
+   * or received on it.
+   *
+   * @param io_service The io_service object that the stream socket will use to
+   * dispatch handlers for any asynchronous operations performed on the socket.
+   */
+  explicit basic_stream_socket(boost::asio::io_service& io_service)
+    : basic_socket<Protocol, StreamSocketService>(io_service)
+  {
+  }
+
+  /// Construct and open a basic_stream_socket.
+  /**
+   * This constructor creates and opens a stream socket. The socket needs to be
+   * connected or accepted before data can be sent or received on it.
+   *
+   * @param io_service The io_service object that the stream socket will use to
+   * dispatch handlers for any asynchronous operations performed on the socket.
+   *
+   * @param protocol An object specifying protocol parameters to be used.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_stream_socket(boost::asio::io_service& io_service,
+      const protocol_type& protocol)
+    : basic_socket<Protocol, StreamSocketService>(io_service, protocol)
+  {
+  }
+
+  /// Construct a basic_stream_socket, opening it and binding it to the given
+  /// local endpoint.
+  /**
+   * This constructor creates a stream socket and automatically opens it bound
+   * to the specified endpoint on the local machine. The protocol used is the
+   * protocol associated with the given endpoint.
+   *
+   * @param io_service The io_service object that the stream socket will use to
+   * dispatch handlers for any asynchronous operations performed on the socket.
+   *
+   * @param endpoint An endpoint on the local machine to which the stream
+   * socket will be bound.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_stream_socket(boost::asio::io_service& io_service,
+      const endpoint_type& endpoint)
+    : basic_socket<Protocol, StreamSocketService>(io_service, endpoint)
+  {
+  }
+
+  /// Construct a basic_stream_socket on an existing native socket.
+  /**
+   * This constructor creates a stream socket object to hold an existing native
+   * socket.
+   *
+   * @param io_service The io_service object that the stream socket will use to
+   * dispatch handlers for any asynchronous operations performed on the socket.
+   *
+   * @param protocol An object specifying protocol parameters to be used.
+   *
+   * @param native_socket The new underlying socket implementation.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_stream_socket(boost::asio::io_service& io_service,
+      const protocol_type& protocol, const native_handle_type& native_socket)
+    : basic_socket<Protocol, StreamSocketService>(
+        io_service, protocol, native_socket)
+  {
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a basic_stream_socket from another.
+  /**
+   * This constructor moves a stream socket from one object to another.
+   *
+   * @param other The other basic_stream_socket object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_stream_socket(io_service&) constructor.
+   */
+  basic_stream_socket(basic_stream_socket&& other)
+    : basic_socket<Protocol, StreamSocketService>(
+        BOOST_ASIO_MOVE_CAST(basic_stream_socket)(other))
+  {
+  }
+
+  /// Move-assign a basic_stream_socket from another.
+  /**
+   * This assignment operator moves a stream socket from one object to another.
+   *
+   * @param other The other basic_stream_socket object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_stream_socket(io_service&) constructor.
+   */
+  basic_stream_socket& operator=(basic_stream_socket&& other)
+  {
+    basic_socket<Protocol, StreamSocketService>::operator=(
+        BOOST_ASIO_MOVE_CAST(basic_stream_socket)(other));
+    return *this;
+  }
+
+  /// Move-construct a basic_stream_socket from a socket of another protocol
+  /// type.
+  /**
+   * This constructor moves a stream socket from one object to another.
+   *
+   * @param other The other basic_stream_socket object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_stream_socket(io_service&) constructor.
+   */
+  template <typename Protocol1, typename StreamSocketService1>
+  basic_stream_socket(
+      basic_stream_socket<Protocol1, StreamSocketService1>&& other,
+      typename enable_if<is_convertible<Protocol1, Protocol>::value>::type* = 0)
+    : basic_socket<Protocol, StreamSocketService>(
+        BOOST_ASIO_MOVE_CAST2(basic_stream_socket<
+          Protocol1, StreamSocketService1>)(other))
+  {
+  }
+
+  /// Move-assign a basic_stream_socket from a socket of another protocol type.
+  /**
+   * This assignment operator moves a stream socket from one object to another.
+   *
+   * @param other The other basic_stream_socket object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_stream_socket(io_service&) constructor.
+   */
+  template <typename Protocol1, typename StreamSocketService1>
+  typename enable_if<is_convertible<Protocol1, Protocol>::value,
+      basic_stream_socket>::type& operator=(
+        basic_stream_socket<Protocol1, StreamSocketService1>&& other)
+  {
+    basic_socket<Protocol, StreamSocketService>::operator=(
+        BOOST_ASIO_MOVE_CAST2(basic_stream_socket<
+          Protocol1, StreamSocketService1>)(other));
+    return *this;
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Send some data on the socket.
+  /**
+   * This function is used to send data on the stream socket. The function
+   * call will block until one or more bytes of the data has been sent
+   * successfully, or an until error occurs.
+   *
+   * @param buffers One or more data buffers to be sent on the socket.
+   *
+   * @returns The number of bytes sent.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The send operation may not transmit all of the data to the peer.
+   * Consider using the @ref write function if you need to ensure that all data
+   * is written before the blocking operation completes.
+   *
+   * @par Example
+   * To send a single data buffer use the @ref buffer function as follows:
+   * @code
+   * socket.send(boost::asio::buffer(data, size));
+   * @endcode
+   * See the @ref buffer documentation for information on sending multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t send(const ConstBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().send(
+        this->get_implementation(), buffers, 0, ec);
+    boost::asio::detail::throw_error(ec, "send");
+    return s;
+  }
+
+  /// Send some data on the socket.
+  /**
+   * This function is used to send data on the stream socket. The function
+   * call will block until one or more bytes of the data has been sent
+   * successfully, or an until error occurs.
+   *
+   * @param buffers One or more data buffers to be sent on the socket.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @returns The number of bytes sent.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The send operation may not transmit all of the data to the peer.
+   * Consider using the @ref write function if you need to ensure that all data
+   * is written before the blocking operation completes.
+   *
+   * @par Example
+   * To send a single data buffer use the @ref buffer function as follows:
+   * @code
+   * socket.send(boost::asio::buffer(data, size), 0);
+   * @endcode
+   * See the @ref buffer documentation for information on sending multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t send(const ConstBufferSequence& buffers,
+      socket_base::message_flags flags)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().send(
+        this->get_implementation(), buffers, flags, ec);
+    boost::asio::detail::throw_error(ec, "send");
+    return s;
+  }
+
+  /// Send some data on the socket.
+  /**
+   * This function is used to send data on the stream socket. The function
+   * call will block until one or more bytes of the data has been sent
+   * successfully, or an until error occurs.
+   *
+   * @param buffers One or more data buffers to be sent on the socket.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes sent. Returns 0 if an error occurred.
+   *
+   * @note The send operation may not transmit all of the data to the peer.
+   * Consider using the @ref write function if you need to ensure that all data
+   * is written before the blocking operation completes.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t send(const ConstBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return this->get_service().send(
+        this->get_implementation(), buffers, flags, ec);
+  }
+
+  /// Start an asynchronous send.
+  /**
+   * This function is used to asynchronously send data on the stream socket.
+   * The function call always returns immediately.
+   *
+   * @param buffers One or more data buffers to be sent on the socket. Although
+   * the buffers object may be copied as necessary, ownership of the underlying
+   * memory blocks is retained by the caller, which must guarantee that they
+   * remain valid until the handler is called.
+   *
+   * @param handler The handler to be called when the send operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes sent.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The send operation may not transmit all of the data to the peer.
+   * Consider using the @ref async_write function if you need to ensure that all
+   * data is written before the asynchronous operation completes.
+   *
+   * @par Example
+   * To send a single data buffer use the @ref buffer function as follows:
+   * @code
+   * socket.async_send(boost::asio::buffer(data, size), handler);
+   * @endcode
+   * See the @ref buffer documentation for information on sending multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_send(const ConstBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WriteHandler.
+    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+    return this->get_service().async_send(
+        this->get_implementation(), buffers, 0,
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Start an asynchronous send.
+  /**
+   * This function is used to asynchronously send data on the stream socket.
+   * The function call always returns immediately.
+   *
+   * @param buffers One or more data buffers to be sent on the socket. Although
+   * the buffers object may be copied as necessary, ownership of the underlying
+   * memory blocks is retained by the caller, which must guarantee that they
+   * remain valid until the handler is called.
+   *
+   * @param flags Flags specifying how the send call is to be made.
+   *
+   * @param handler The handler to be called when the send operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes sent.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The send operation may not transmit all of the data to the peer.
+   * Consider using the @ref async_write function if you need to ensure that all
+   * data is written before the asynchronous operation completes.
+   *
+   * @par Example
+   * To send a single data buffer use the @ref buffer function as follows:
+   * @code
+   * socket.async_send(boost::asio::buffer(data, size), 0, handler);
+   * @endcode
+   * See the @ref buffer documentation for information on sending multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_send(const ConstBufferSequence& buffers,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WriteHandler.
+    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+    return this->get_service().async_send(
+        this->get_implementation(), buffers, flags,
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Receive some data on the socket.
+  /**
+   * This function is used to receive data on the stream socket. The function
+   * call will block until one or more bytes of data has been received
+   * successfully, or until an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @returns The number of bytes received.
+   *
+   * @throws boost::system::system_error Thrown on failure. An error code of
+   * boost::asio::error::eof indicates that the connection was closed by the
+   * peer.
+   *
+   * @note The receive operation may not receive all of the requested number of
+   * bytes. Consider using the @ref read function if you need to ensure that the
+   * requested amount of data is read before the blocking operation completes.
+   *
+   * @par Example
+   * To receive into a single data buffer use the @ref buffer function as
+   * follows:
+   * @code
+   * socket.receive(boost::asio::buffer(data, size));
+   * @endcode
+   * See the @ref buffer documentation for information on receiving into
+   * multiple buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive(const MutableBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().receive(
+        this->get_implementation(), buffers, 0, ec);
+    boost::asio::detail::throw_error(ec, "receive");
+    return s;
+  }
+
+  /// Receive some data on the socket.
+  /**
+   * This function is used to receive data on the stream socket. The function
+   * call will block until one or more bytes of data has been received
+   * successfully, or until an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @param flags Flags specifying how the receive call is to be made.
+   *
+   * @returns The number of bytes received.
+   *
+   * @throws boost::system::system_error Thrown on failure. An error code of
+   * boost::asio::error::eof indicates that the connection was closed by the
+   * peer.
+   *
+   * @note The receive operation may not receive all of the requested number of
+   * bytes. Consider using the @ref read function if you need to ensure that the
+   * requested amount of data is read before the blocking operation completes.
+   *
+   * @par Example
+   * To receive into a single data buffer use the @ref buffer function as
+   * follows:
+   * @code
+   * socket.receive(boost::asio::buffer(data, size), 0);
+   * @endcode
+   * See the @ref buffer documentation for information on receiving into
+   * multiple buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive(const MutableBufferSequence& buffers,
+      socket_base::message_flags flags)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().receive(
+        this->get_implementation(), buffers, flags, ec);
+    boost::asio::detail::throw_error(ec, "receive");
+    return s;
+  }
+
+  /// Receive some data on a connected socket.
+  /**
+   * This function is used to receive data on the stream socket. The function
+   * call will block until one or more bytes of data has been received
+   * successfully, or until an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   *
+   * @param flags Flags specifying how the receive call is to be made.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes received. Returns 0 if an error occurred.
+   *
+   * @note The receive operation may not receive all of the requested number of
+   * bytes. Consider using the @ref read function if you need to ensure that the
+   * requested amount of data is read before the blocking operation completes.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t receive(const MutableBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return this->get_service().receive(
+        this->get_implementation(), buffers, flags, ec);
+  }
+
+  /// Start an asynchronous receive.
+  /**
+   * This function is used to asynchronously receive data from the stream
+   * socket. The function call always returns immediately.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param handler The handler to be called when the receive operation
+   * completes. Copies will be made of the handler as required. The function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes received.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The receive operation may not receive all of the requested number of
+   * bytes. Consider using the @ref async_read function if you need to ensure
+   * that the requested amount of data is received before the asynchronous
+   * operation completes.
+   *
+   * @par Example
+   * To receive into a single data buffer use the @ref buffer function as
+   * follows:
+   * @code
+   * socket.async_receive(boost::asio::buffer(data, size), handler);
+   * @endcode
+   * See the @ref buffer documentation for information on receiving into
+   * multiple buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive(const MutableBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    return this->get_service().async_receive(this->get_implementation(),
+        buffers, 0, BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+
+  /// Start an asynchronous receive.
+  /**
+   * This function is used to asynchronously receive data from the stream
+   * socket. The function call always returns immediately.
+   *
+   * @param buffers One or more buffers into which the data will be received.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param flags Flags specifying how the receive call is to be made.
+   *
+   * @param handler The handler to be called when the receive operation
+   * completes. Copies will be made of the handler as required. The function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes received.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The receive operation may not receive all of the requested number of
+   * bytes. Consider using the @ref async_read function if you need to ensure
+   * that the requested amount of data is received before the asynchronous
+   * operation completes.
+   *
+   * @par Example
+   * To receive into a single data buffer use the @ref buffer function as
+   * follows:
+   * @code
+   * socket.async_receive(boost::asio::buffer(data, size), 0, handler);
+   * @endcode
+   * See the @ref buffer documentation for information on receiving into
+   * multiple buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive(const MutableBufferSequence& buffers,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    return this->get_service().async_receive(this->get_implementation(),
+        buffers, flags, BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+
+  /// Write some data to the socket.
+  /**
+   * This function is used to write data to the stream socket. The function call
+   * will block until one or more bytes of the data has been written
+   * successfully, or until an error occurs.
+   *
+   * @param buffers One or more data buffers to be written to the socket.
+   *
+   * @returns The number of bytes written.
+   *
+   * @throws boost::system::system_error Thrown on failure. An error code of
+   * boost::asio::error::eof indicates that the connection was closed by the
+   * peer.
+   *
+   * @note The write_some operation may not transmit all of the data to the
+   * peer. Consider using the @ref write function if you need to ensure that
+   * all data is written before the blocking operation completes.
+   *
+   * @par Example
+   * To write a single data buffer use the @ref buffer function as follows:
+   * @code
+   * socket.write_some(boost::asio::buffer(data, size));
+   * @endcode
+   * See the @ref buffer documentation for information on writing multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().send(
+        this->get_implementation(), buffers, 0, ec);
+    boost::asio::detail::throw_error(ec, "write_some");
+    return s;
+  }
+
+  /// Write some data to the socket.
+  /**
+   * This function is used to write data to the stream socket. The function call
+   * will block until one or more bytes of the data has been written
+   * successfully, or until an error occurs.
+   *
+   * @param buffers One or more data buffers to be written to the socket.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes written. Returns 0 if an error occurred.
+   *
+   * @note The write_some operation may not transmit all of the data to the
+   * peer. Consider using the @ref write function if you need to ensure that
+   * all data is written before the blocking operation completes.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().send(this->get_implementation(), buffers, 0, ec);
+  }
+
+  /// Start an asynchronous write.
+  /**
+   * This function is used to asynchronously write data to the stream socket.
+   * The function call always returns immediately.
+   *
+   * @param buffers One or more data buffers to be written to the socket.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param handler The handler to be called when the write operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes written.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The write operation may not transmit all of the data to the peer.
+   * Consider using the @ref async_write function if you need to ensure that all
+   * data is written before the asynchronous operation completes.
+   *
+   * @par Example
+   * To write a single data buffer use the @ref buffer function as follows:
+   * @code
+   * socket.async_write_some(boost::asio::buffer(data, size), handler);
+   * @endcode
+   * See the @ref buffer documentation for information on writing multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_write_some(const ConstBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WriteHandler.
+    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+    return this->get_service().async_send(this->get_implementation(),
+        buffers, 0, BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Read some data from the socket.
+  /**
+   * This function is used to read data from the stream socket. The function
+   * call will block until one or more bytes of data has been read successfully,
+   * or until an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be read.
+   *
+   * @returns The number of bytes read.
+   *
+   * @throws boost::system::system_error Thrown on failure. An error code of
+   * boost::asio::error::eof indicates that the connection was closed by the
+   * peer.
+   *
+   * @note The read_some operation may not read all of the requested number of
+   * bytes. Consider using the @ref read function if you need to ensure that
+   * the requested amount of data is read before the blocking operation
+   * completes.
+   *
+   * @par Example
+   * To read into a single data buffer use the @ref buffer function as follows:
+   * @code
+   * socket.read_some(boost::asio::buffer(data, size));
+   * @endcode
+   * See the @ref buffer documentation for information on reading into multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().receive(
+        this->get_implementation(), buffers, 0, ec);
+    boost::asio::detail::throw_error(ec, "read_some");
+    return s;
+  }
+
+  /// Read some data from the socket.
+  /**
+   * This function is used to read data from the stream socket. The function
+   * call will block until one or more bytes of data has been read successfully,
+   * or until an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be read.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes read. Returns 0 if an error occurred.
+   *
+   * @note The read_some operation may not read all of the requested number of
+   * bytes. Consider using the @ref read function if you need to ensure that
+   * the requested amount of data is read before the blocking operation
+   * completes.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().receive(
+        this->get_implementation(), buffers, 0, ec);
+  }
+
+  /// Start an asynchronous read.
+  /**
+   * This function is used to asynchronously read data from the stream socket.
+   * The function call always returns immediately.
+   *
+   * @param buffers One or more buffers into which the data will be read.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param handler The handler to be called when the read operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes read.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The read operation may not read all of the requested number of bytes.
+   * Consider using the @ref async_read function if you need to ensure that the
+   * requested amount of data is read before the asynchronous operation
+   * completes.
+   *
+   * @par Example
+   * To read into a single data buffer use the @ref buffer function as follows:
+   * @code
+   * socket.async_read_some(boost::asio::buffer(data, size), handler);
+   * @endcode
+   * See the @ref buffer documentation for information on reading into multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_read_some(const MutableBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    return this->get_service().async_receive(this->get_implementation(),
+        buffers, 0, BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_BASIC_STREAM_SOCKET_HPP
diff --git a/ext/patches/boost/asio/basic_streambuf.hpp b/ext/patches/boost/asio/basic_streambuf.hpp
new file mode 100644
index 0000000..4251398
--- /dev/null
+++ b/ext/patches/boost/asio/basic_streambuf.hpp
@@ -0,0 +1,371 @@
+//
+// basic_streambuf.hpp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BASIC_STREAMBUF_HPP
+#define BOOST_ASIO_BASIC_STREAMBUF_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#include <algorithm>
+#include <cstring>
+#include <stdexcept>
+#include <streambuf>
+#include <vector>
+#include <boost/asio/basic_streambuf_fwd.hpp>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/detail/limits.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/throw_exception.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Automatically resizable buffer class based on std::streambuf.
+/**
+ * The @c basic_streambuf class is derived from @c std::streambuf to associate
+ * the streambuf's input and output sequences with one or more character
+ * arrays. These character arrays are internal to the @c basic_streambuf
+ * object, but direct access to the array elements is provided to permit them
+ * to be used efficiently with I/O operations. Characters written to the output
+ * sequence of a @c basic_streambuf object are appended to the input sequence
+ * of the same object.
+ *
+ * The @c basic_streambuf class's public interface is intended to permit the
+ * following implementation strategies:
+ *
+ * @li A single contiguous character array, which is reallocated as necessary
+ * to accommodate changes in the size of the character sequence. This is the
+ * implementation approach currently used in Asio.
+ *
+ * @li A sequence of one or more character arrays, where each array is of the
+ * same size. Additional character array objects are appended to the sequence
+ * to accommodate changes in the size of the character sequence.
+ *
+ * @li A sequence of one or more character arrays of varying sizes. Additional
+ * character array objects are appended to the sequence to accommodate changes
+ * in the size of the character sequence.
+ *
+ * The constructor for basic_streambuf accepts a @c size_t argument specifying
+ * the maximum of the sum of the sizes of the input sequence and output
+ * sequence. During the lifetime of the @c basic_streambuf object, the following
+ * invariant holds:
+ * @code size() <= max_size()@endcode
+ * Any member function that would, if successful, cause the invariant to be
+ * violated shall throw an exception of class @c std::length_error.
+ *
+ * The constructor for @c basic_streambuf takes an Allocator argument. A copy
+ * of this argument is used for any memory allocation performed, by the
+ * constructor and by all member functions, during the lifetime of each @c
+ * basic_streambuf object.
+ *
+ * @par Examples
+ * Writing directly from an streambuf to a socket:
+ * @code
+ * boost::asio::streambuf b;
+ * std::ostream os(&b);
+ * os << "Hello, World!\n";
+ *
+ * // try sending some data in input sequence
+ * size_t n = sock.send(b.data());
+ *
+ * b.consume(n); // sent data is removed from input sequence
+ * @endcode
+ *
+ * Reading from a socket directly into a streambuf:
+ * @code
+ * boost::asio::streambuf b;
+ *
+ * // reserve 512 bytes in output sequence
+ * boost::asio::streambuf::mutable_buffers_type bufs = b.prepare(512);
+ *
+ * size_t n = sock.receive(bufs);
+ *
+ * // received data is "committed" from output sequence to input sequence
+ * b.commit(n);
+ *
+ * std::istream is(&b);
+ * std::string s;
+ * is >> s;
+ * @endcode
+ */
+#if defined(GENERATING_DOCUMENTATION)
+template <typename Allocator = std::allocator<char> >
+#else
+template <typename Allocator>
+#endif
+class basic_streambuf
+  : public std::streambuf,
+    private noncopyable
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The type used to represent the input sequence as a list of buffers.
+  typedef implementation_defined const_buffers_type;
+
+  /// The type used to represent the output sequence as a list of buffers.
+  typedef implementation_defined mutable_buffers_type;
+#else
+  typedef boost::asio::const_buffers_1 const_buffers_type;
+  typedef boost::asio::mutable_buffers_1 mutable_buffers_type;
+#endif
+
+  /// Construct a basic_streambuf object.
+  /**
+   * Constructs a streambuf with the specified maximum size. The initial size
+   * of the streambuf's input sequence is 0.
+   */
+  explicit basic_streambuf(
+      std::size_t maximum_size = (std::numeric_limits<std::size_t>::max)(),
+      const Allocator& allocator = Allocator())
+    : max_size_(maximum_size),
+      buffer_(allocator)
+  {
+    std::size_t pend = (std::min<std::size_t>)(max_size_, buffer_delta);
+    buffer_.resize((std::max<std::size_t>)(pend, 1));
+    setg(&buffer_[0], &buffer_[0], &buffer_[0]);
+    setp(&buffer_[0], &buffer_[0] + pend);
+  }
+
+  /// Get the size of the input sequence.
+  /**
+   * @returns The size of the input sequence. The value is equal to that
+   * calculated for @c s in the following code:
+   * @code
+   * size_t s = 0;
+   * const_buffers_type bufs = data();
+   * const_buffers_type::const_iterator i = bufs.begin();
+   * while (i != bufs.end())
+   * {
+   *   const_buffer buf(*i++);
+   *   s += buffer_size(buf);
+   * }
+   * @endcode
+   */
+  std::size_t size() const
+  {
+    return pptr() - gptr();
+  }
+
+  /// Get the maximum size of the basic_streambuf.
+  /**
+   * @returns The allowed maximum of the sum of the sizes of the input sequence
+   * and output sequence.
+   */
+  std::size_t max_size() const
+  {
+    return max_size_;
+  }
+
+  /// Get a list of buffers that represents the input sequence.
+  /**
+   * @returns An object of type @c const_buffers_type that satisfies
+   * ConstBufferSequence requirements, representing all character arrays in the
+   * input sequence.
+   *
+   * @note The returned object is invalidated by any @c basic_streambuf member
+   * function that modifies the input sequence or output sequence.
+   */
+  const_buffers_type data() const
+  {
+    return boost::asio::buffer(boost::asio::const_buffer(gptr(),
+          (pptr() - gptr()) * sizeof(char_type)));
+  }
+
+  /// Get a list of buffers that represents the output sequence, with the given
+  /// size.
+  /**
+   * Ensures that the output sequence can accommodate @c n characters,
+   * reallocating character array objects as necessary.
+   *
+   * @returns An object of type @c mutable_buffers_type that satisfies
+   * MutableBufferSequence requirements, representing character array objects
+   * at the start of the output sequence such that the sum of the buffer sizes
+   * is @c n.
+   *
+   * @throws std::length_error If <tt>size() + n > max_size()</tt>.
+   *
+   * @note The returned object is invalidated by any @c basic_streambuf member
+   * function that modifies the input sequence or output sequence.
+   */
+  mutable_buffers_type prepare(std::size_t n)
+  {
+    reserve(n);
+    return boost::asio::buffer(boost::asio::mutable_buffer(
+          pptr(), n * sizeof(char_type)));
+  }
+
+  /// Move characters from the output sequence to the input sequence.
+  /**
+   * Appends @c n characters from the start of the output sequence to the input
+   * sequence. The beginning of the output sequence is advanced by @c n
+   * characters.
+   *
+   * Requires a preceding call <tt>prepare(x)</tt> where <tt>x >= n</tt>, and
+   * no intervening operations that modify the input or output sequence.
+   *
+   * @note If @c n is greater than the size of the output sequence, the entire
+   * output sequence is moved to the input sequence and no error is issued.
+   */
+  void commit(std::size_t n)
+  {
+    if (pptr() + n > epptr())
+      n = epptr() - pptr();
+    pbump(static_cast<int>(n));
+    setg(eback(), gptr(), pptr());
+  }
+
+  /// Remove characters from the input sequence.
+  /**
+   * Removes @c n characters from the beginning of the input sequence.
+   *
+   * @note If @c n is greater than the size of the input sequence, the entire
+   * input sequence is consumed and no error is issued.
+   */
+  void consume(std::size_t n)
+  {
+    if (egptr() < pptr())
+      setg(&buffer_[0], gptr(), pptr());
+    if (gptr() + n > pptr())
+      n = pptr() - gptr();
+    gbump(static_cast<int>(n));
+  }
+
+protected:
+  enum { buffer_delta = 128 };
+
+  /// Override std::streambuf behaviour.
+  /**
+   * Behaves according to the specification of @c std::streambuf::underflow().
+   */
+  int_type underflow()
+  {
+    if (gptr() < pptr())
+    {
+      setg(&buffer_[0], gptr(), pptr());
+      return traits_type::to_int_type(*gptr());
+    }
+    else
+    {
+      return traits_type::eof();
+    }
+  }
+
+  /// Override std::streambuf behaviour.
+  /**
+   * Behaves according to the specification of @c std::streambuf::overflow(),
+   * with the specialisation that @c std::length_error is thrown if appending
+   * the character to the input sequence would require the condition
+   * <tt>size() > max_size()</tt> to be true.
+   */
+  int_type overflow(int_type c)
+  {
+    if (!traits_type::eq_int_type(c, traits_type::eof()))
+    {
+      if (pptr() == epptr())
+      {
+        std::size_t buffer_size = pptr() - gptr();
+        if (buffer_size < max_size_ && max_size_ - buffer_size < buffer_delta)
+        {
+          reserve(max_size_ - buffer_size);
+        }
+        else
+        {
+          reserve(buffer_delta);
+        }
+      }
+
+      *pptr() = traits_type::to_char_type(c);
+      pbump(1);
+      return c;
+    }
+
+    return traits_type::not_eof(c);
+  }
+
+  void reserve(std::size_t n)
+  {
+    // Get current stream positions as offsets.
+    std::size_t gnext = gptr() - &buffer_[0];
+    std::size_t pnext = pptr() - &buffer_[0];
+    std::size_t pend = epptr() - &buffer_[0];
+
+    // Check if there is already enough space in the put area.
+    if (n <= pend - pnext)
+    {
+      return;
+    }
+
+    // Shift existing contents of get area to start of buffer.
+    if (gnext > 0)
+    {
+      pnext -= gnext;
+      std::memmove(&buffer_[0], &buffer_[0] + gnext, pnext);
+    }
+
+    // Ensure buffer is large enough to hold at least the specified size.
+    if (n > pend - pnext)
+    {
+      if (n <= max_size_ && pnext <= max_size_ - n)
+      {
+        pend = pnext + n;
+        buffer_.resize((std::max<std::size_t>)(pend, 1));
+      }
+      else
+      {
+        std::length_error ex("boost::asio::streambuf too long");
+        boost::asio::detail::throw_exception(ex);
+      }
+    }
+
+    // Update stream positions.
+    setg(&buffer_[0], &buffer_[0], &buffer_[0] + pnext);
+    setp(&buffer_[0] + pnext, &buffer_[0] + pend);
+  }
+
+private:
+  std::size_t max_size_;
+  std::vector<char_type, Allocator> buffer_;
+
+  // Helper function to get the preferred size for reading data.
+  friend std::size_t read_size_helper(
+      basic_streambuf& sb, std::size_t max_size)
+  {
+    return std::min<std::size_t>(
+        std::max<std::size_t>(512, sb.buffer_.capacity() - sb.size()),
+        std::min<std::size_t>(max_size, sb.max_size() - sb.size()));
+  }
+};
+
+// Helper function to get the preferred size for reading data. Used for any
+// user-provided specialisations of basic_streambuf.
+template <typename Allocator>
+inline std::size_t read_size_helper(
+    basic_streambuf<Allocator>& sb, std::size_t max_size)
+{
+  return std::min<std::size_t>(512,
+      std::min<std::size_t>(max_size, sb.max_size() - sb.size()));
+}
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#endif // BOOST_ASIO_BASIC_STREAMBUF_HPP
diff --git a/ext/patches/boost/asio/basic_streambuf_fwd.hpp b/ext/patches/boost/asio/basic_streambuf_fwd.hpp
new file mode 100644
index 0000000..1b50079
--- /dev/null
+++ b/ext/patches/boost/asio/basic_streambuf_fwd.hpp
@@ -0,0 +1,35 @@
+//
+// basic_streambuf_fwd.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BASIC_STREAMBUF_FWD_HPP
+#define BOOST_ASIO_BASIC_STREAMBUF_FWD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#include <memory>
+
+namespace boost {
+namespace asio {
+
+template <typename Allocator = std::allocator<char> >
+class basic_streambuf;
+
+} // namespace asio
+} // namespace boost
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#endif // BOOST_ASIO_BASIC_STREAMBUF_FWD_HPP
diff --git a/ext/patches/boost/asio/basic_waitable_timer.hpp b/ext/patches/boost/asio/basic_waitable_timer.hpp
new file mode 100644
index 0000000..2f4f4bc
--- /dev/null
+++ b/ext/patches/boost/asio/basic_waitable_timer.hpp
@@ -0,0 +1,521 @@
+//
+// basic_waitable_timer.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BASIC_WAITABLE_TIMER_HPP
+#define BOOST_ASIO_BASIC_WAITABLE_TIMER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/basic_io_object.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/wait_traits.hpp>
+#include <boost/asio/waitable_timer_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Provides waitable timer functionality.
+/**
+ * The basic_waitable_timer class template provides the ability to perform a
+ * blocking or asynchronous wait for a timer to expire.
+ *
+ * A waitable timer is always in one of two states: "expired" or "not expired".
+ * If the wait() or async_wait() function is called on an expired timer, the
+ * wait operation will complete immediately.
+ *
+ * Most applications will use one of the boost::asio::steady_timer,
+ * boost::asio::system_timer or boost::asio::high_resolution_timer typedefs.
+ *
+ * @note This waitable timer functionality is for use with the C++11 standard
+ * library's @c <chrono> facility, or with the Boost.Chrono library.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ *
+ * @par Examples
+ * Performing a blocking wait (C++11):
+ * @code
+ * // Construct a timer without setting an expiry time.
+ * boost::asio::steady_timer timer(io_service);
+ *
+ * // Set an expiry time relative to now.
+ * timer.expires_from_now(std::chrono::seconds(5));
+ *
+ * // Wait for the timer to expire.
+ * timer.wait();
+ * @endcode
+ *
+ * @par 
+ * Performing an asynchronous wait (C++11):
+ * @code
+ * void handler(const boost::system::error_code& error)
+ * {
+ *   if (!error)
+ *   {
+ *     // Timer expired.
+ *   }
+ * }
+ *
+ * ...
+ *
+ * // Construct a timer with an absolute expiry time.
+ * boost::asio::steady_timer timer(io_service,
+ *     std::chrono::steady_clock::now() + std::chrono::seconds(60));
+ *
+ * // Start an asynchronous wait.
+ * timer.async_wait(handler);
+ * @endcode
+ *
+ * @par Changing an active waitable timer's expiry time
+ *
+ * Changing the expiry time of a timer while there are pending asynchronous
+ * waits causes those wait operations to be cancelled. To ensure that the action
+ * associated with the timer is performed only once, use something like this:
+ * used:
+ *
+ * @code
+ * void on_some_event()
+ * {
+ *   if (my_timer.expires_from_now(seconds(5)) > 0)
+ *   {
+ *     // We managed to cancel the timer. Start new asynchronous wait.
+ *     my_timer.async_wait(on_timeout);
+ *   }
+ *   else
+ *   {
+ *     // Too late, timer has already expired!
+ *   }
+ * }
+ *
+ * void on_timeout(const boost::system::error_code& e)
+ * {
+ *   if (e != boost::asio::error::operation_aborted)
+ *   {
+ *     // Timer was not cancelled, take necessary action.
+ *   }
+ * }
+ * @endcode
+ *
+ * @li The boost::asio::basic_waitable_timer::expires_from_now() function
+ * cancels any pending asynchronous waits, and returns the number of
+ * asynchronous waits that were cancelled. If it returns 0 then you were too
+ * late and the wait handler has already been executed, or will soon be
+ * executed. If it returns 1 then the wait handler was successfully cancelled.
+ *
+ * @li If a wait handler is cancelled, the boost::system::error_code passed to
+ * it contains the value boost::asio::error::operation_aborted.
+ */
+template <typename Clock,
+    typename WaitTraits = boost::asio::wait_traits<Clock>,
+    typename WaitableTimerService = waitable_timer_service<Clock, WaitTraits> >
+class basic_waitable_timer
+  : public basic_io_object<WaitableTimerService>
+{
+public:
+  /// The clock type.
+  typedef Clock clock_type;
+
+  /// The duration type of the clock.
+  typedef typename clock_type::duration duration;
+
+  /// The time point type of the clock.
+  typedef typename clock_type::time_point time_point;
+
+  /// The wait traits type.
+  typedef WaitTraits traits_type;
+
+  /// Constructor.
+  /**
+   * This constructor creates a timer without setting an expiry time. The
+   * expires_at() or expires_from_now() functions must be called to set an
+   * expiry time before the timer can be waited on.
+   *
+   * @param io_service The io_service object that the timer will use to dispatch
+   * handlers for any asynchronous operations performed on the timer.
+   */
+  explicit basic_waitable_timer(boost::asio::io_service& io_service)
+    : basic_io_object<WaitableTimerService>(io_service)
+  {
+  }
+
+  /// Constructor to set a particular expiry time as an absolute time.
+  /**
+   * This constructor creates a timer and sets the expiry time.
+   *
+   * @param io_service The io_service object that the timer will use to dispatch
+   * handlers for any asynchronous operations performed on the timer.
+   *
+   * @param expiry_time The expiry time to be used for the timer, expressed
+   * as an absolute time.
+   */
+  basic_waitable_timer(boost::asio::io_service& io_service,
+      const time_point& expiry_time)
+    : basic_io_object<WaitableTimerService>(io_service)
+  {
+    boost::system::error_code ec;
+    this->service.expires_at(this->implementation, expiry_time, ec);
+    boost::asio::detail::throw_error(ec, "expires_at");
+  }
+
+  /// Constructor to set a particular expiry time relative to now.
+  /**
+   * This constructor creates a timer and sets the expiry time.
+   *
+   * @param io_service The io_service object that the timer will use to dispatch
+   * handlers for any asynchronous operations performed on the timer.
+   *
+   * @param expiry_time The expiry time to be used for the timer, relative to
+   * now.
+   */
+  basic_waitable_timer(boost::asio::io_service& io_service,
+      const duration& expiry_time)
+    : basic_io_object<WaitableTimerService>(io_service)
+  {
+    boost::system::error_code ec;
+    this->service.expires_from_now(this->implementation, expiry_time, ec);
+    boost::asio::detail::throw_error(ec, "expires_from_now");
+  }
+
+  /// Cancel any asynchronous operations that are waiting on the timer.
+  /**
+   * This function forces the completion of any pending asynchronous wait
+   * operations against the timer. The handler for each cancelled operation will
+   * be invoked with the boost::asio::error::operation_aborted error code.
+   *
+   * Cancelling the timer does not change the expiry time.
+   *
+   * @return The number of asynchronous operations that were cancelled.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note If the timer has already expired when cancel() is called, then the
+   * handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  std::size_t cancel()
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->service.cancel(this->implementation, ec);
+    boost::asio::detail::throw_error(ec, "cancel");
+    return s;
+  }
+
+  /// Cancel any asynchronous operations that are waiting on the timer.
+  /**
+   * This function forces the completion of any pending asynchronous wait
+   * operations against the timer. The handler for each cancelled operation will
+   * be invoked with the boost::asio::error::operation_aborted error code.
+   *
+   * Cancelling the timer does not change the expiry time.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @return The number of asynchronous operations that were cancelled.
+   *
+   * @note If the timer has already expired when cancel() is called, then the
+   * handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  std::size_t cancel(boost::system::error_code& ec)
+  {
+    return this->service.cancel(this->implementation, ec);
+  }
+
+  /// Cancels one asynchronous operation that is waiting on the timer.
+  /**
+   * This function forces the completion of one pending asynchronous wait
+   * operation against the timer. Handlers are cancelled in FIFO order. The
+   * handler for the cancelled operation will be invoked with the
+   * boost::asio::error::operation_aborted error code.
+   *
+   * Cancelling the timer does not change the expiry time.
+   *
+   * @return The number of asynchronous operations that were cancelled. That is,
+   * either 0 or 1.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note If the timer has already expired when cancel_one() is called, then
+   * the handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  std::size_t cancel_one()
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->service.cancel_one(this->implementation, ec);
+    boost::asio::detail::throw_error(ec, "cancel_one");
+    return s;
+  }
+
+  /// Cancels one asynchronous operation that is waiting on the timer.
+  /**
+   * This function forces the completion of one pending asynchronous wait
+   * operation against the timer. Handlers are cancelled in FIFO order. The
+   * handler for the cancelled operation will be invoked with the
+   * boost::asio::error::operation_aborted error code.
+   *
+   * Cancelling the timer does not change the expiry time.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @return The number of asynchronous operations that were cancelled. That is,
+   * either 0 or 1.
+   *
+   * @note If the timer has already expired when cancel_one() is called, then
+   * the handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  std::size_t cancel_one(boost::system::error_code& ec)
+  {
+    return this->service.cancel_one(this->implementation, ec);
+  }
+
+  /// Get the timer's expiry time as an absolute time.
+  /**
+   * This function may be used to obtain the timer's current expiry time.
+   * Whether the timer has expired or not does not affect this value.
+   */
+  time_point expires_at() const
+  {
+    return this->service.expires_at(this->implementation);
+  }
+
+  /// Set the timer's expiry time as an absolute time.
+  /**
+   * This function sets the expiry time. Any pending asynchronous wait
+   * operations will be cancelled. The handler for each cancelled operation will
+   * be invoked with the boost::asio::error::operation_aborted error code.
+   *
+   * @param expiry_time The expiry time to be used for the timer.
+   *
+   * @return The number of asynchronous operations that were cancelled.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note If the timer has already expired when expires_at() is called, then
+   * the handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  std::size_t expires_at(const time_point& expiry_time)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->service.expires_at(
+        this->implementation, expiry_time, ec);
+    boost::asio::detail::throw_error(ec, "expires_at");
+    return s;
+  }
+
+  /// Set the timer's expiry time as an absolute time.
+  /**
+   * This function sets the expiry time. Any pending asynchronous wait
+   * operations will be cancelled. The handler for each cancelled operation will
+   * be invoked with the boost::asio::error::operation_aborted error code.
+   *
+   * @param expiry_time The expiry time to be used for the timer.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @return The number of asynchronous operations that were cancelled.
+   *
+   * @note If the timer has already expired when expires_at() is called, then
+   * the handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  std::size_t expires_at(const time_point& expiry_time,
+      boost::system::error_code& ec)
+  {
+    return this->service.expires_at(this->implementation, expiry_time, ec);
+  }
+
+  /// Get the timer's expiry time relative to now.
+  /**
+   * This function may be used to obtain the timer's current expiry time.
+   * Whether the timer has expired or not does not affect this value.
+   */
+  duration expires_from_now() const
+  {
+    return this->service.expires_from_now(this->implementation);
+  }
+
+  /// Set the timer's expiry time relative to now.
+  /**
+   * This function sets the expiry time. Any pending asynchronous wait
+   * operations will be cancelled. The handler for each cancelled operation will
+   * be invoked with the boost::asio::error::operation_aborted error code.
+   *
+   * @param expiry_time The expiry time to be used for the timer.
+   *
+   * @return The number of asynchronous operations that were cancelled.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note If the timer has already expired when expires_from_now() is called,
+   * then the handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  std::size_t expires_from_now(const duration& expiry_time)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->service.expires_from_now(
+        this->implementation, expiry_time, ec);
+    boost::asio::detail::throw_error(ec, "expires_from_now");
+    return s;
+  }
+
+  /// Set the timer's expiry time relative to now.
+  /**
+   * This function sets the expiry time. Any pending asynchronous wait
+   * operations will be cancelled. The handler for each cancelled operation will
+   * be invoked with the boost::asio::error::operation_aborted error code.
+   *
+   * @param expiry_time The expiry time to be used for the timer.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @return The number of asynchronous operations that were cancelled.
+   *
+   * @note If the timer has already expired when expires_from_now() is called,
+   * then the handlers for asynchronous wait operations will:
+   *
+   * @li have already been invoked; or
+   *
+   * @li have been queued for invocation in the near future.
+   *
+   * These handlers can no longer be cancelled, and therefore are passed an
+   * error code that indicates the successful completion of the wait operation.
+   */
+  std::size_t expires_from_now(const duration& expiry_time,
+      boost::system::error_code& ec)
+  {
+    return this->service.expires_from_now(
+        this->implementation, expiry_time, ec);
+  }
+
+  /// Perform a blocking wait on the timer.
+  /**
+   * This function is used to wait for the timer to expire. This function
+   * blocks and does not return until the timer has expired.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void wait()
+  {
+    boost::system::error_code ec;
+    this->service.wait(this->implementation, ec);
+    boost::asio::detail::throw_error(ec, "wait");
+  }
+
+  /// Perform a blocking wait on the timer.
+  /**
+   * This function is used to wait for the timer to expire. This function
+   * blocks and does not return until the timer has expired.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  void wait(boost::system::error_code& ec)
+  {
+    this->service.wait(this->implementation, ec);
+  }
+
+  /// Start an asynchronous wait on the timer.
+  /**
+   * This function may be used to initiate an asynchronous wait against the
+   * timer. It always returns immediately.
+   *
+   * For each call to async_wait(), the supplied handler will be called exactly
+   * once. The handler will be called when:
+   *
+   * @li The timer has expired.
+   *
+   * @li The timer was cancelled, in which case the handler is passed the error
+   * code boost::asio::error::operation_aborted.
+   *
+   * @param handler The handler to be called when the timer expires. Copies
+   * will be made of the handler as required. The function signature of the
+   * handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error // Result of operation.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   */
+  template <typename WaitHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WaitHandler,
+      void (boost::system::error_code))
+  async_wait(BOOST_ASIO_MOVE_ARG(WaitHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WaitHandler.
+    BOOST_ASIO_WAIT_HANDLER_CHECK(WaitHandler, handler) type_check;
+
+    return this->service.async_wait(this->implementation,
+        BOOST_ASIO_MOVE_CAST(WaitHandler)(handler));
+  }
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_BASIC_WAITABLE_TIMER_HPP
diff --git a/ext/patches/boost/asio/buffer.hpp b/ext/patches/boost/asio/buffer.hpp
new file mode 100644
index 0000000..c2b1249
--- /dev/null
+++ b/ext/patches/boost/asio/buffer.hpp
@@ -0,0 +1,2241 @@
+//
+// buffer.hpp
+// ~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BUFFER_HPP
+#define BOOST_ASIO_BUFFER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <cstring>
+#include <string>
+#include <vector>
+#include <boost/asio/detail/array_fwd.hpp>
+
+#if defined(BOOST_ASIO_MSVC)
+# if defined(_HAS_ITERATOR_DEBUGGING) && (_HAS_ITERATOR_DEBUGGING != 0)
+#  if !defined(BOOST_ASIO_DISABLE_BUFFER_DEBUGGING)
+#   define BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+#  endif // !defined(BOOST_ASIO_DISABLE_BUFFER_DEBUGGING)
+# endif // defined(_HAS_ITERATOR_DEBUGGING)
+#endif // defined(BOOST_ASIO_MSVC)
+
+#if defined(__GNUC__)
+# if defined(_GLIBCXX_DEBUG)
+#  if !defined(BOOST_ASIO_DISABLE_BUFFER_DEBUGGING)
+#   define BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+#  endif // !defined(BOOST_ASIO_DISABLE_BUFFER_DEBUGGING)
+# endif // defined(_GLIBCXX_DEBUG)
+#endif // defined(__GNUC__)
+
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+# include <boost/asio/detail/function.hpp>
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+
+#if defined(BOOST_ASIO_HAS_BOOST_WORKAROUND)
+# include <boost/detail/workaround.hpp>
+# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582)) \
+    || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590))
+#  define BOOST_ASIO_ENABLE_ARRAY_BUFFER_WORKAROUND
+# endif // BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+        // || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590))
+#endif // defined(BOOST_ASIO_HAS_BOOST_WORKAROUND)
+
+#if defined(BOOST_ASIO_ENABLE_ARRAY_BUFFER_WORKAROUND)
+# include <boost/asio/detail/type_traits.hpp>
+#endif // defined(BOOST_ASIO_ENABLE_ARRAY_BUFFER_WORKAROUND)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+class mutable_buffer;
+class const_buffer;
+
+namespace detail {
+void* buffer_cast_helper(const mutable_buffer&);
+const void* buffer_cast_helper(const const_buffer&);
+std::size_t buffer_size_helper(const mutable_buffer&);
+std::size_t buffer_size_helper(const const_buffer&);
+} // namespace detail
+
+/// Holds a buffer that can be modified.
+/**
+ * The mutable_buffer class provides a safe representation of a buffer that can
+ * be modified. It does not own the underlying data, and so is cheap to copy or
+ * assign.
+ *
+ * @par Accessing Buffer Contents
+ *
+ * The contents of a buffer may be accessed using the @ref buffer_size
+ * and @ref buffer_cast functions:
+ *
+ * @code boost::asio::mutable_buffer b1 = ...;
+ * std::size_t s1 = boost::asio::buffer_size(b1);
+ * unsigned char* p1 = boost::asio::buffer_cast<unsigned char*>(b1);
+ * @endcode
+ *
+ * The boost::asio::buffer_cast function permits violations of type safety, so
+ * uses of it in application code should be carefully considered.
+ */
+class mutable_buffer
+{
+public:
+  /// Construct an empty buffer.
+  mutable_buffer()
+    : data_(0),
+      size_(0)
+  {
+  }
+
+  /// Construct a buffer to represent a given memory range.
+  mutable_buffer(void* data, std::size_t size)
+    : data_(data),
+      size_(size)
+  {
+  }
+
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+  mutable_buffer(void* data, std::size_t size,
+      boost::asio::detail::function<void()> debug_check)
+    : data_(data),
+      size_(size),
+      debug_check_(debug_check)
+  {
+  }
+
+  const boost::asio::detail::function<void()>& get_debug_check() const
+  {
+    return debug_check_;
+  }
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+
+private:
+  friend void* boost::asio::detail::buffer_cast_helper(
+      const mutable_buffer& b);
+  friend std::size_t boost::asio::detail::buffer_size_helper(
+      const mutable_buffer& b);
+
+  void* data_;
+  std::size_t size_;
+
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+  boost::asio::detail::function<void()> debug_check_;
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+};
+
+namespace detail {
+
+inline void* buffer_cast_helper(const mutable_buffer& b)
+{
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+  if (b.size_ && b.debug_check_)
+    b.debug_check_();
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+  return b.data_;
+}
+
+inline std::size_t buffer_size_helper(const mutable_buffer& b)
+{
+  return b.size_;
+}
+
+} // namespace detail
+
+/// Adapts a single modifiable buffer so that it meets the requirements of the
+/// MutableBufferSequence concept.
+class mutable_buffers_1
+  : public mutable_buffer
+{
+public:
+  /// The type for each element in the list of buffers.
+  typedef mutable_buffer value_type;
+
+  /// A random-access iterator type that may be used to read elements.
+  typedef const mutable_buffer* const_iterator;
+
+  /// Construct to represent a given memory range.
+  mutable_buffers_1(void* data, std::size_t size)
+    : mutable_buffer(data, size)
+  {
+  }
+
+  /// Construct to represent a single modifiable buffer.
+  explicit mutable_buffers_1(const mutable_buffer& b)
+    : mutable_buffer(b)
+  {
+  }
+
+  /// Get a random-access iterator to the first element.
+  const_iterator begin() const
+  {
+    return this;
+  }
+
+  /// Get a random-access iterator for one past the last element.
+  const_iterator end() const
+  {
+    return begin() + 1;
+  }
+};
+
+/// Holds a buffer that cannot be modified.
+/**
+ * The const_buffer class provides a safe representation of a buffer that cannot
+ * be modified. It does not own the underlying data, and so is cheap to copy or
+ * assign.
+ *
+ * @par Accessing Buffer Contents
+ *
+ * The contents of a buffer may be accessed using the @ref buffer_size
+ * and @ref buffer_cast functions:
+ *
+ * @code boost::asio::const_buffer b1 = ...;
+ * std::size_t s1 = boost::asio::buffer_size(b1);
+ * const unsigned char* p1 = boost::asio::buffer_cast<const unsigned char*>(b1);
+ * @endcode
+ *
+ * The boost::asio::buffer_cast function permits violations of type safety, so
+ * uses of it in application code should be carefully considered.
+ */
+class const_buffer
+{
+public:
+  /// Construct an empty buffer.
+  const_buffer()
+    : data_(0),
+      size_(0)
+  {
+  }
+
+  /// Construct a buffer to represent a given memory range.
+  const_buffer(const void* data, std::size_t size)
+    : data_(data),
+      size_(size)
+  {
+  }
+
+  /// Construct a non-modifiable buffer from a modifiable one.
+  const_buffer(const mutable_buffer& b)
+    : data_(boost::asio::detail::buffer_cast_helper(b)),
+      size_(boost::asio::detail::buffer_size_helper(b))
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+      , debug_check_(b.get_debug_check())
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+  {
+  }
+
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+  const_buffer(const void* data, std::size_t size,
+      boost::asio::detail::function<void()> debug_check)
+    : data_(data),
+      size_(size),
+      debug_check_(debug_check)
+  {
+  }
+
+  const boost::asio::detail::function<void()>& get_debug_check() const
+  {
+    return debug_check_;
+  }
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+
+private:
+  friend const void* boost::asio::detail::buffer_cast_helper(
+      const const_buffer& b);
+  friend std::size_t boost::asio::detail::buffer_size_helper(
+      const const_buffer& b);
+
+  const void* data_;
+  std::size_t size_;
+
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+  boost::asio::detail::function<void()> debug_check_;
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+};
+
+namespace detail {
+
+inline const void* buffer_cast_helper(const const_buffer& b)
+{
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+  if (b.size_ && b.debug_check_)
+    b.debug_check_();
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+  return b.data_;
+}
+
+inline std::size_t buffer_size_helper(const const_buffer& b)
+{
+  return b.size_;
+}
+
+} // namespace detail
+
+/// Adapts a single non-modifiable buffer so that it meets the requirements of
+/// the ConstBufferSequence concept.
+class const_buffers_1
+  : public const_buffer
+{
+public:
+  /// The type for each element in the list of buffers.
+  typedef const_buffer value_type;
+
+  /// A random-access iterator type that may be used to read elements.
+  typedef const const_buffer* const_iterator;
+
+  /// Construct to represent a given memory range.
+  const_buffers_1(const void* data, std::size_t size)
+    : const_buffer(data, size)
+  {
+  }
+
+  /// Construct to represent a single non-modifiable buffer.
+  explicit const_buffers_1(const const_buffer& b)
+    : const_buffer(b)
+  {
+  }
+
+  /// Get a random-access iterator to the first element.
+  const_iterator begin() const
+  {
+    return this;
+  }
+
+  /// Get a random-access iterator for one past the last element.
+  const_iterator end() const
+  {
+    return begin() + 1;
+  }
+};
+
+/// An implementation of both the ConstBufferSequence and MutableBufferSequence
+/// concepts to represent a null buffer sequence.
+class null_buffers
+{
+public:
+  /// The type for each element in the list of buffers.
+  typedef mutable_buffer value_type;
+
+  /// A random-access iterator type that may be used to read elements.
+  typedef const mutable_buffer* const_iterator;
+
+  /// Get a random-access iterator to the first element.
+  const_iterator begin() const
+  {
+    return &buf_;
+  }
+
+  /// Get a random-access iterator for one past the last element.
+  const_iterator end() const
+  {
+    return &buf_;
+  }
+
+private:
+  mutable_buffer buf_;
+};
+
+/** @defgroup buffer_size boost::asio::buffer_size
+ *
+ * @brief The boost::asio::buffer_size function determines the total number of
+ * bytes in a buffer or buffer sequence.
+ */
+/*@{*/
+
+/// Get the number of bytes in a modifiable buffer.
+inline std::size_t buffer_size(const mutable_buffer& b)
+{
+  return detail::buffer_size_helper(b);
+}
+
+/// Get the number of bytes in a modifiable buffer.
+inline std::size_t buffer_size(const mutable_buffers_1& b)
+{
+  return detail::buffer_size_helper(b);
+}
+
+/// Get the number of bytes in a non-modifiable buffer.
+inline std::size_t buffer_size(const const_buffer& b)
+{
+  return detail::buffer_size_helper(b);
+}
+
+/// Get the number of bytes in a non-modifiable buffer.
+inline std::size_t buffer_size(const const_buffers_1& b)
+{
+  return detail::buffer_size_helper(b);
+}
+
+/// Get the total number of bytes in a buffer sequence.
+/** 
+ * The @c BufferSequence template parameter may meet either of the @c
+ * ConstBufferSequence or @c MutableBufferSequence type requirements.
+ */
+template <typename BufferSequence>
+inline std::size_t buffer_size(const BufferSequence& b)
+{
+  std::size_t total_buffer_size = 0;
+
+  typename BufferSequence::const_iterator iter = b.begin();
+  typename BufferSequence::const_iterator end = b.end();
+  for (; iter != end; ++iter)
+    total_buffer_size += detail::buffer_size_helper(*iter);
+
+  return total_buffer_size;
+}
+
+/*@}*/
+
+/** @defgroup buffer_cast boost::asio::buffer_cast
+ *
+ * @brief The boost::asio::buffer_cast function is used to obtain a pointer to
+ * the underlying memory region associated with a buffer.
+ *
+ * @par Examples:
+ *
+ * To access the memory of a non-modifiable buffer, use:
+ * @code boost::asio::const_buffer b1 = ...;
+ * const unsigned char* p1 = boost::asio::buffer_cast<const unsigned char*>(b1);
+ * @endcode
+ *
+ * To access the memory of a modifiable buffer, use:
+ * @code boost::asio::mutable_buffer b2 = ...;
+ * unsigned char* p2 = boost::asio::buffer_cast<unsigned char*>(b2);
+ * @endcode
+ *
+ * The boost::asio::buffer_cast function permits violations of type safety, so
+ * uses of it in application code should be carefully considered.
+ */
+/*@{*/
+
+/// Cast a non-modifiable buffer to a specified pointer to POD type.
+template <typename PointerToPodType>
+inline PointerToPodType buffer_cast(const mutable_buffer& b)
+{
+  return static_cast<PointerToPodType>(detail::buffer_cast_helper(b));
+}
+
+/// Cast a non-modifiable buffer to a specified pointer to POD type.
+template <typename PointerToPodType>
+inline PointerToPodType buffer_cast(const const_buffer& b)
+{
+  return static_cast<PointerToPodType>(detail::buffer_cast_helper(b));
+}
+
+/*@}*/
+
+/// Create a new modifiable buffer that is offset from the start of another.
+/**
+ * @relates mutable_buffer
+ */
+inline mutable_buffer operator+(const mutable_buffer& b, std::size_t start)
+{
+  if (start > buffer_size(b))
+    return mutable_buffer();
+  char* new_data = buffer_cast<char*>(b) + start;
+  std::size_t new_size = buffer_size(b) - start;
+  return mutable_buffer(new_data, new_size
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+      , b.get_debug_check()
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+      );
+}
+
+/// Create a new modifiable buffer that is offset from the start of another.
+/**
+ * @relates mutable_buffer
+ */
+inline mutable_buffer operator+(std::size_t start, const mutable_buffer& b)
+{
+  if (start > buffer_size(b))
+    return mutable_buffer();
+  char* new_data = buffer_cast<char*>(b) + start;
+  std::size_t new_size = buffer_size(b) - start;
+  return mutable_buffer(new_data, new_size
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+      , b.get_debug_check()
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+      );
+}
+
+/// Create a new non-modifiable buffer that is offset from the start of another.
+/**
+ * @relates const_buffer
+ */
+inline const_buffer operator+(const const_buffer& b, std::size_t start)
+{
+  if (start > buffer_size(b))
+    return const_buffer();
+  const char* new_data = buffer_cast<const char*>(b) + start;
+  std::size_t new_size = buffer_size(b) - start;
+  return const_buffer(new_data, new_size
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+      , b.get_debug_check()
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+      );
+}
+
+/// Create a new non-modifiable buffer that is offset from the start of another.
+/**
+ * @relates const_buffer
+ */
+inline const_buffer operator+(std::size_t start, const const_buffer& b)
+{
+  if (start > buffer_size(b))
+    return const_buffer();
+  const char* new_data = buffer_cast<const char*>(b) + start;
+  std::size_t new_size = buffer_size(b) - start;
+  return const_buffer(new_data, new_size
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+      , b.get_debug_check()
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+      );
+}
+
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+namespace detail {
+
+template <typename Iterator>
+class buffer_debug_check
+{
+public:
+  buffer_debug_check(Iterator iter)
+    : iter_(iter)
+  {
+  }
+
+  ~buffer_debug_check()
+  {
+#if defined(BOOST_ASIO_MSVC) && (BOOST_ASIO_MSVC == 1400)
+    // MSVC 8's string iterator checking may crash in a std::string::iterator
+    // object's destructor when the iterator points to an already-destroyed
+    // std::string object, unless the iterator is cleared first.
+    iter_ = Iterator();
+#endif // defined(BOOST_ASIO_MSVC) && (BOOST_ASIO_MSVC == 1400)
+  }
+
+  void operator()()
+  {
+    *iter_;
+  }
+
+private:
+  Iterator iter_;
+};
+
+} // namespace detail
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+
+/** @defgroup buffer boost::asio::buffer
+ *
+ * @brief The boost::asio::buffer function is used to create a buffer object to
+ * represent raw memory, an array of POD elements, a vector of POD elements,
+ * or a std::string.
+ *
+ * A buffer object represents a contiguous region of memory as a 2-tuple
+ * consisting of a pointer and size in bytes. A tuple of the form <tt>{void*,
+ * size_t}</tt> specifies a mutable (modifiable) region of memory. Similarly, a
+ * tuple of the form <tt>{const void*, size_t}</tt> specifies a const
+ * (non-modifiable) region of memory. These two forms correspond to the classes
+ * mutable_buffer and const_buffer, respectively. To mirror C++'s conversion
+ * rules, a mutable_buffer is implicitly convertible to a const_buffer, and the
+ * opposite conversion is not permitted.
+ *
+ * The simplest use case involves reading or writing a single buffer of a
+ * specified size:
+ *
+ * @code sock.send(boost::asio::buffer(data, size)); @endcode
+ *
+ * In the above example, the return value of boost::asio::buffer meets the
+ * requirements of the ConstBufferSequence concept so that it may be directly
+ * passed to the socket's write function. A buffer created for modifiable
+ * memory also meets the requirements of the MutableBufferSequence concept.
+ *
+ * An individual buffer may be created from a builtin array, std::vector,
+ * std::array or boost::array of POD elements. This helps prevent buffer
+ * overruns by automatically determining the size of the buffer:
+ *
+ * @code char d1[128];
+ * size_t bytes_transferred = sock.receive(boost::asio::buffer(d1));
+ *
+ * std::vector<char> d2(128);
+ * bytes_transferred = sock.receive(boost::asio::buffer(d2));
+ *
+ * std::array<char, 128> d3;
+ * bytes_transferred = sock.receive(boost::asio::buffer(d3));
+ *
+ * boost::array<char, 128> d4;
+ * bytes_transferred = sock.receive(boost::asio::buffer(d4)); @endcode
+ *
+ * In all three cases above, the buffers created are exactly 128 bytes long.
+ * Note that a vector is @e never automatically resized when creating or using
+ * a buffer. The buffer size is determined using the vector's <tt>size()</tt>
+ * member function, and not its capacity.
+ *
+ * @par Accessing Buffer Contents
+ *
+ * The contents of a buffer may be accessed using the @ref buffer_size and
+ * @ref buffer_cast functions:
+ *
+ * @code boost::asio::mutable_buffer b1 = ...;
+ * std::size_t s1 = boost::asio::buffer_size(b1);
+ * unsigned char* p1 = boost::asio::buffer_cast<unsigned char*>(b1);
+ *
+ * boost::asio::const_buffer b2 = ...;
+ * std::size_t s2 = boost::asio::buffer_size(b2);
+ * const void* p2 = boost::asio::buffer_cast<const void*>(b2); @endcode
+ *
+ * The boost::asio::buffer_cast function permits violations of type safety, so
+ * uses of it in application code should be carefully considered.
+ *
+ * For convenience, the @ref buffer_size function also works on buffer
+ * sequences (that is, types meeting the ConstBufferSequence or
+ * MutableBufferSequence type requirements). In this case, the function returns
+ * the total size of all buffers in the sequence.
+ *
+ * @par Buffer Copying
+ *
+ * The @ref buffer_copy function may be used to copy raw bytes between
+ * individual buffers and buffer sequences.
+ *
+ * In particular, when used with the @ref buffer_size, the @ref buffer_copy
+ * function can be used to linearise a sequence of buffers. For example:
+ *
+ * @code vector<const_buffer> buffers = ...;
+ *
+ * vector<unsigned char> data(boost::asio::buffer_size(buffers));
+ * boost::asio::buffer_copy(boost::asio::buffer(data), buffers); @endcode
+ *
+ * Note that @ref buffer_copy is implemented in terms of @c memcpy, and
+ * consequently it cannot be used to copy between overlapping memory regions.
+ *
+ * @par Buffer Invalidation
+ *
+ * A buffer object does not have any ownership of the memory it refers to. It
+ * is the responsibility of the application to ensure the memory region remains
+ * valid until it is no longer required for an I/O operation. When the memory
+ * is no longer available, the buffer is said to have been invalidated.
+ *
+ * For the boost::asio::buffer overloads that accept an argument of type
+ * std::vector, the buffer objects returned are invalidated by any vector
+ * operation that also invalidates all references, pointers and iterators
+ * referring to the elements in the sequence (C++ Std, 23.2.4)
+ *
+ * For the boost::asio::buffer overloads that accept an argument of type
+ * std::basic_string, the buffer objects returned are invalidated according to
+ * the rules defined for invalidation of references, pointers and iterators
+ * referring to elements of the sequence (C++ Std, 21.3).
+ *
+ * @par Buffer Arithmetic
+ *
+ * Buffer objects may be manipulated using simple arithmetic in a safe way
+ * which helps prevent buffer overruns. Consider an array initialised as
+ * follows:
+ *
+ * @code boost::array<char, 6> a = { 'a', 'b', 'c', 'd', 'e' }; @endcode
+ *
+ * A buffer object @c b1 created using:
+ *
+ * @code b1 = boost::asio::buffer(a); @endcode
+ *
+ * represents the entire array, <tt>{ 'a', 'b', 'c', 'd', 'e' }</tt>. An
+ * optional second argument to the boost::asio::buffer function may be used to
+ * limit the size, in bytes, of the buffer:
+ *
+ * @code b2 = boost::asio::buffer(a, 3); @endcode
+ *
+ * such that @c b2 represents the data <tt>{ 'a', 'b', 'c' }</tt>. Even if the
+ * size argument exceeds the actual size of the array, the size of the buffer
+ * object created will be limited to the array size.
+ *
+ * An offset may be applied to an existing buffer to create a new one:
+ *
+ * @code b3 = b1 + 2; @endcode
+ *
+ * where @c b3 will set to represent <tt>{ 'c', 'd', 'e' }</tt>. If the offset
+ * exceeds the size of the existing buffer, the newly created buffer will be
+ * empty.
+ *
+ * Both an offset and size may be specified to create a buffer that corresponds
+ * to a specific range of bytes within an existing buffer:
+ *
+ * @code b4 = boost::asio::buffer(b1 + 1, 3); @endcode
+ *
+ * so that @c b4 will refer to the bytes <tt>{ 'b', 'c', 'd' }</tt>.
+ *
+ * @par Buffers and Scatter-Gather I/O
+ *
+ * To read or write using multiple buffers (i.e. scatter-gather I/O), multiple
+ * buffer objects may be assigned into a container that supports the
+ * MutableBufferSequence (for read) or ConstBufferSequence (for write) concepts:
+ *
+ * @code
+ * char d1[128];
+ * std::vector<char> d2(128);
+ * boost::array<char, 128> d3;
+ *
+ * boost::array<mutable_buffer, 3> bufs1 = {
+ *   boost::asio::buffer(d1),
+ *   boost::asio::buffer(d2),
+ *   boost::asio::buffer(d3) };
+ * bytes_transferred = sock.receive(bufs1);
+ *
+ * std::vector<const_buffer> bufs2;
+ * bufs2.push_back(boost::asio::buffer(d1));
+ * bufs2.push_back(boost::asio::buffer(d2));
+ * bufs2.push_back(boost::asio::buffer(d3));
+ * bytes_transferred = sock.send(bufs2); @endcode
+ */
+/*@{*/
+
+/// Create a new modifiable buffer from an existing buffer.
+/**
+ * @returns <tt>mutable_buffers_1(b)</tt>.
+ */
+inline mutable_buffers_1 buffer(const mutable_buffer& b)
+{
+  return mutable_buffers_1(b);
+}
+
+/// Create a new modifiable buffer from an existing buffer.
+/**
+ * @returns A mutable_buffers_1 value equivalent to:
+ * @code mutable_buffers_1(
+ *     buffer_cast<void*>(b),
+ *     min(buffer_size(b), max_size_in_bytes)); @endcode
+ */
+inline mutable_buffers_1 buffer(const mutable_buffer& b,
+    std::size_t max_size_in_bytes)
+{
+  return mutable_buffers_1(
+      mutable_buffer(buffer_cast<void*>(b),
+        buffer_size(b) < max_size_in_bytes
+        ? buffer_size(b) : max_size_in_bytes
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+        , b.get_debug_check()
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+        ));
+}
+
+/// Create a new non-modifiable buffer from an existing buffer.
+/**
+ * @returns <tt>const_buffers_1(b)</tt>.
+ */
+inline const_buffers_1 buffer(const const_buffer& b)
+{
+  return const_buffers_1(b);
+}
+
+/// Create a new non-modifiable buffer from an existing buffer.
+/**
+ * @returns A const_buffers_1 value equivalent to:
+ * @code const_buffers_1(
+ *     buffer_cast<const void*>(b),
+ *     min(buffer_size(b), max_size_in_bytes)); @endcode
+ */
+inline const_buffers_1 buffer(const const_buffer& b,
+    std::size_t max_size_in_bytes)
+{
+  return const_buffers_1(
+      const_buffer(buffer_cast<const void*>(b),
+        buffer_size(b) < max_size_in_bytes
+        ? buffer_size(b) : max_size_in_bytes
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+        , b.get_debug_check()
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+        ));
+}
+
+/// Create a new modifiable buffer that represents the given memory range.
+/**
+ * @returns <tt>mutable_buffers_1(data, size_in_bytes)</tt>.
+ */
+inline mutable_buffers_1 buffer(void* data, std::size_t size_in_bytes)
+{
+  return mutable_buffers_1(mutable_buffer(data, size_in_bytes));
+}
+
+/// Create a new non-modifiable buffer that represents the given memory range.
+/**
+ * @returns <tt>const_buffers_1(data, size_in_bytes)</tt>.
+ */
+inline const_buffers_1 buffer(const void* data,
+    std::size_t size_in_bytes)
+{
+  return const_buffers_1(const_buffer(data, size_in_bytes));
+}
+
+/// Create a new modifiable buffer that represents the given POD array.
+/**
+ * @returns A mutable_buffers_1 value equivalent to:
+ * @code mutable_buffers_1(
+ *     static_cast<void*>(data),
+ *     N * sizeof(PodType)); @endcode
+ */
+template <typename PodType, std::size_t N>
+inline mutable_buffers_1 buffer(PodType (&data)[N])
+{
+  return mutable_buffers_1(mutable_buffer(data, N * sizeof(PodType)));
+}
+ 
+/// Create a new modifiable buffer that represents the given POD array.
+/**
+ * @returns A mutable_buffers_1 value equivalent to:
+ * @code mutable_buffers_1(
+ *     static_cast<void*>(data),
+ *     min(N * sizeof(PodType), max_size_in_bytes)); @endcode
+ */
+template <typename PodType, std::size_t N>
+inline mutable_buffers_1 buffer(PodType (&data)[N],
+    std::size_t max_size_in_bytes)
+{
+  return mutable_buffers_1(
+      mutable_buffer(data,
+        N * sizeof(PodType) < max_size_in_bytes
+        ? N * sizeof(PodType) : max_size_in_bytes));
+}
+ 
+/// Create a new non-modifiable buffer that represents the given POD array.
+/**
+ * @returns A const_buffers_1 value equivalent to:
+ * @code const_buffers_1(
+ *     static_cast<const void*>(data),
+ *     N * sizeof(PodType)); @endcode
+ */
+template <typename PodType, std::size_t N>
+inline const_buffers_1 buffer(const PodType (&data)[N])
+{
+  return const_buffers_1(const_buffer(data, N * sizeof(PodType)));
+}
+
+/// Create a new non-modifiable buffer that represents the given POD array.
+/**
+ * @returns A const_buffers_1 value equivalent to:
+ * @code const_buffers_1(
+ *     static_cast<const void*>(data),
+ *     min(N * sizeof(PodType), max_size_in_bytes)); @endcode
+ */
+template <typename PodType, std::size_t N>
+inline const_buffers_1 buffer(const PodType (&data)[N],
+    std::size_t max_size_in_bytes)
+{
+  return const_buffers_1(
+      const_buffer(data,
+        N * sizeof(PodType) < max_size_in_bytes
+        ? N * sizeof(PodType) : max_size_in_bytes));
+}
+
+#if defined(BOOST_ASIO_ENABLE_ARRAY_BUFFER_WORKAROUND)
+
+// Borland C++ and Sun Studio think the overloads:
+//
+//   unspecified buffer(boost::array<PodType, N>& array ...);
+//
+// and
+//
+//   unspecified buffer(boost::array<const PodType, N>& array ...);
+//
+// are ambiguous. This will be worked around by using a buffer_types traits
+// class that contains typedefs for the appropriate buffer and container
+// classes, based on whether PodType is const or non-const.
+
+namespace detail {
+
+template <bool IsConst>
+struct buffer_types_base;
+
+template <>
+struct buffer_types_base<false>
+{
+  typedef mutable_buffer buffer_type;
+  typedef mutable_buffers_1 container_type;
+};
+
+template <>
+struct buffer_types_base<true>
+{
+  typedef const_buffer buffer_type;
+  typedef const_buffers_1 container_type;
+};
+
+template <typename PodType>
+struct buffer_types
+  : public buffer_types_base<is_const<PodType>::value>
+{
+};
+
+} // namespace detail
+
+template <typename PodType, std::size_t N>
+inline typename detail::buffer_types<PodType>::container_type
+buffer(boost::array<PodType, N>& data)
+{
+  typedef typename boost::asio::detail::buffer_types<PodType>::buffer_type
+    buffer_type;
+  typedef typename boost::asio::detail::buffer_types<PodType>::container_type
+    container_type;
+  return container_type(
+      buffer_type(data.c_array(), data.size() * sizeof(PodType)));
+}
+
+template <typename PodType, std::size_t N>
+inline typename detail::buffer_types<PodType>::container_type
+buffer(boost::array<PodType, N>& data, std::size_t max_size_in_bytes)
+{
+  typedef typename boost::asio::detail::buffer_types<PodType>::buffer_type
+    buffer_type;
+  typedef typename boost::asio::detail::buffer_types<PodType>::container_type
+    container_type;
+  return container_type(
+      buffer_type(data.c_array(),
+        data.size() * sizeof(PodType) < max_size_in_bytes
+        ? data.size() * sizeof(PodType) : max_size_in_bytes));
+}
+
+#else // defined(BOOST_ASIO_ENABLE_ARRAY_BUFFER_WORKAROUND)
+
+/// Create a new modifiable buffer that represents the given POD array.
+/**
+ * @returns A mutable_buffers_1 value equivalent to:
+ * @code mutable_buffers_1(
+ *     data.data(),
+ *     data.size() * sizeof(PodType)); @endcode
+ */
+template <typename PodType, std::size_t N>
+inline mutable_buffers_1 buffer(boost::array<PodType, N>& data)
+{
+  return mutable_buffers_1(
+      mutable_buffer(data.c_array(), data.size() * sizeof(PodType)));
+}
+
+/// Create a new modifiable buffer that represents the given POD array.
+/**
+ * @returns A mutable_buffers_1 value equivalent to:
+ * @code mutable_buffers_1(
+ *     data.data(),
+ *     min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
+ */
+template <typename PodType, std::size_t N>
+inline mutable_buffers_1 buffer(boost::array<PodType, N>& data,
+    std::size_t max_size_in_bytes)
+{
+  return mutable_buffers_1(
+      mutable_buffer(data.c_array(),
+        data.size() * sizeof(PodType) < max_size_in_bytes
+        ? data.size() * sizeof(PodType) : max_size_in_bytes));
+}
+
+/// Create a new non-modifiable buffer that represents the given POD array.
+/**
+ * @returns A const_buffers_1 value equivalent to:
+ * @code const_buffers_1(
+ *     data.data(),
+ *     data.size() * sizeof(PodType)); @endcode
+ */
+template <typename PodType, std::size_t N>
+inline const_buffers_1 buffer(boost::array<const PodType, N>& data)
+{
+  return const_buffers_1(
+      const_buffer(data.data(), data.size() * sizeof(PodType)));
+}
+
+/// Create a new non-modifiable buffer that represents the given POD array.
+/**
+ * @returns A const_buffers_1 value equivalent to:
+ * @code const_buffers_1(
+ *     data.data(),
+ *     min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
+ */
+template <typename PodType, std::size_t N>
+inline const_buffers_1 buffer(boost::array<const PodType, N>& data,
+    std::size_t max_size_in_bytes)
+{
+  return const_buffers_1(
+      const_buffer(data.data(),
+        data.size() * sizeof(PodType) < max_size_in_bytes
+        ? data.size() * sizeof(PodType) : max_size_in_bytes));
+}
+
+#endif // defined(BOOST_ASIO_ENABLE_ARRAY_BUFFER_WORKAROUND)
+
+/// Create a new non-modifiable buffer that represents the given POD array.
+/**
+ * @returns A const_buffers_1 value equivalent to:
+ * @code const_buffers_1(
+ *     data.data(),
+ *     data.size() * sizeof(PodType)); @endcode
+ */
+template <typename PodType, std::size_t N>
+inline const_buffers_1 buffer(const boost::array<PodType, N>& data)
+{
+  return const_buffers_1(
+      const_buffer(data.data(), data.size() * sizeof(PodType)));
+}
+
+/// Create a new non-modifiable buffer that represents the given POD array.
+/**
+ * @returns A const_buffers_1 value equivalent to:
+ * @code const_buffers_1(
+ *     data.data(),
+ *     min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
+ */
+template <typename PodType, std::size_t N>
+inline const_buffers_1 buffer(const boost::array<PodType, N>& data,
+    std::size_t max_size_in_bytes)
+{
+  return const_buffers_1(
+      const_buffer(data.data(),
+        data.size() * sizeof(PodType) < max_size_in_bytes
+        ? data.size() * sizeof(PodType) : max_size_in_bytes));
+}
+
+#if defined(BOOST_ASIO_HAS_STD_ARRAY) || defined(GENERATING_DOCUMENTATION)
+
+/// Create a new modifiable buffer that represents the given POD array.
+/**
+ * @returns A mutable_buffers_1 value equivalent to:
+ * @code mutable_buffers_1(
+ *     data.data(),
+ *     data.size() * sizeof(PodType)); @endcode
+ */
+template <typename PodType, std::size_t N>
+inline mutable_buffers_1 buffer(std::array<PodType, N>& data)
+{
+  return mutable_buffers_1(
+      mutable_buffer(data.data(), data.size() * sizeof(PodType)));
+}
+
+/// Create a new modifiable buffer that represents the given POD array.
+/**
+ * @returns A mutable_buffers_1 value equivalent to:
+ * @code mutable_buffers_1(
+ *     data.data(),
+ *     min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
+ */
+template <typename PodType, std::size_t N>
+inline mutable_buffers_1 buffer(std::array<PodType, N>& data,
+    std::size_t max_size_in_bytes)
+{
+  return mutable_buffers_1(
+      mutable_buffer(data.data(),
+        data.size() * sizeof(PodType) < max_size_in_bytes
+        ? data.size() * sizeof(PodType) : max_size_in_bytes));
+}
+
+/// Create a new non-modifiable buffer that represents the given POD array.
+/**
+ * @returns A const_buffers_1 value equivalent to:
+ * @code const_buffers_1(
+ *     data.data(),
+ *     data.size() * sizeof(PodType)); @endcode
+ */
+template <typename PodType, std::size_t N>
+inline const_buffers_1 buffer(std::array<const PodType, N>& data)
+{
+  return const_buffers_1(
+      const_buffer(data.data(), data.size() * sizeof(PodType)));
+}
+
+/// Create a new non-modifiable buffer that represents the given POD array.
+/**
+ * @returns A const_buffers_1 value equivalent to:
+ * @code const_buffers_1(
+ *     data.data(),
+ *     min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
+ */
+template <typename PodType, std::size_t N>
+inline const_buffers_1 buffer(std::array<const PodType, N>& data,
+    std::size_t max_size_in_bytes)
+{
+  return const_buffers_1(
+      const_buffer(data.data(),
+        data.size() * sizeof(PodType) < max_size_in_bytes
+        ? data.size() * sizeof(PodType) : max_size_in_bytes));
+}
+
+/// Create a new non-modifiable buffer that represents the given POD array.
+/**
+ * @returns A const_buffers_1 value equivalent to:
+ * @code const_buffers_1(
+ *     data.data(),
+ *     data.size() * sizeof(PodType)); @endcode
+ */
+template <typename PodType, std::size_t N>
+inline const_buffers_1 buffer(const std::array<PodType, N>& data)
+{
+  return const_buffers_1(
+      const_buffer(data.data(), data.size() * sizeof(PodType)));
+}
+
+/// Create a new non-modifiable buffer that represents the given POD array.
+/**
+ * @returns A const_buffers_1 value equivalent to:
+ * @code const_buffers_1(
+ *     data.data(),
+ *     min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
+ */
+template <typename PodType, std::size_t N>
+inline const_buffers_1 buffer(const std::array<PodType, N>& data,
+    std::size_t max_size_in_bytes)
+{
+  return const_buffers_1(
+      const_buffer(data.data(),
+        data.size() * sizeof(PodType) < max_size_in_bytes
+        ? data.size() * sizeof(PodType) : max_size_in_bytes));
+}
+
+#endif // defined(BOOST_ASIO_HAS_STD_ARRAY) || defined(GENERATING_DOCUMENTATION)
+
+/// Create a new modifiable buffer that represents the given POD vector.
+/**
+ * @returns A mutable_buffers_1 value equivalent to:
+ * @code mutable_buffers_1(
+ *     data.size() ? &data[0] : 0,
+ *     data.size() * sizeof(PodType)); @endcode
+ *
+ * @note The buffer is invalidated by any vector operation that would also
+ * invalidate iterators.
+ */
+template <typename PodType, typename Allocator>
+inline mutable_buffers_1 buffer(std::vector<PodType, Allocator>& data)
+{
+  return mutable_buffers_1(
+      mutable_buffer(data.size() ? &data[0] : 0, data.size() * sizeof(PodType)
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+        , detail::buffer_debug_check<
+            typename std::vector<PodType, Allocator>::iterator
+          >(data.begin())
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+        ));
+}
+
+/// Create a new modifiable buffer that represents the given POD vector.
+/**
+ * @returns A mutable_buffers_1 value equivalent to:
+ * @code mutable_buffers_1(
+ *     data.size() ? &data[0] : 0,
+ *     min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
+ *
+ * @note The buffer is invalidated by any vector operation that would also
+ * invalidate iterators.
+ */
+template <typename PodType, typename Allocator>
+inline mutable_buffers_1 buffer(std::vector<PodType, Allocator>& data,
+    std::size_t max_size_in_bytes)
+{
+  return mutable_buffers_1(
+      mutable_buffer(data.size() ? &data[0] : 0,
+        data.size() * sizeof(PodType) < max_size_in_bytes
+        ? data.size() * sizeof(PodType) : max_size_in_bytes
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+        , detail::buffer_debug_check<
+            typename std::vector<PodType, Allocator>::iterator
+          >(data.begin())
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+        ));
+}
+
+/// Create a new non-modifiable buffer that represents the given POD vector.
+/**
+ * @returns A const_buffers_1 value equivalent to:
+ * @code const_buffers_1(
+ *     data.size() ? &data[0] : 0,
+ *     data.size() * sizeof(PodType)); @endcode
+ *
+ * @note The buffer is invalidated by any vector operation that would also
+ * invalidate iterators.
+ */
+template <typename PodType, typename Allocator>
+inline const_buffers_1 buffer(
+    const std::vector<PodType, Allocator>& data)
+{
+  return const_buffers_1(
+      const_buffer(data.size() ? &data[0] : 0, data.size() * sizeof(PodType)
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+        , detail::buffer_debug_check<
+            typename std::vector<PodType, Allocator>::const_iterator
+          >(data.begin())
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+        ));
+}
+
+/// Create a new non-modifiable buffer that represents the given POD vector.
+/**
+ * @returns A const_buffers_1 value equivalent to:
+ * @code const_buffers_1(
+ *     data.size() ? &data[0] : 0,
+ *     min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
+ *
+ * @note The buffer is invalidated by any vector operation that would also
+ * invalidate iterators.
+ */
+template <typename PodType, typename Allocator>
+inline const_buffers_1 buffer(
+    const std::vector<PodType, Allocator>& data, std::size_t max_size_in_bytes)
+{
+  return const_buffers_1(
+      const_buffer(data.size() ? &data[0] : 0,
+        data.size() * sizeof(PodType) < max_size_in_bytes
+        ? data.size() * sizeof(PodType) : max_size_in_bytes
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+        , detail::buffer_debug_check<
+            typename std::vector<PodType, Allocator>::const_iterator
+          >(data.begin())
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+        ));
+}
+
+/// Create a new non-modifiable buffer that represents the given string.
+/**
+ * @returns <tt>const_buffers_1(data.data(), data.size() * sizeof(Elem))</tt>.
+ *
+ * @note The buffer is invalidated by any non-const operation called on the
+ * given string object.
+ */
+template <typename Elem, typename Traits, typename Allocator>
+inline const_buffers_1 buffer(
+    const std::basic_string<Elem, Traits, Allocator>& data)
+{
+  return const_buffers_1(const_buffer(data.data(), data.size() * sizeof(Elem)
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+        , detail::buffer_debug_check<
+            typename std::basic_string<Elem, Traits, Allocator>::const_iterator
+          >(data.begin())
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+        ));
+}
+
+/// Create a new non-modifiable buffer that represents the given string.
+/**
+ * @returns A const_buffers_1 value equivalent to:
+ * @code const_buffers_1(
+ *     data.data(),
+ *     min(data.size() * sizeof(Elem), max_size_in_bytes)); @endcode
+ *
+ * @note The buffer is invalidated by any non-const operation called on the
+ * given string object.
+ */
+template <typename Elem, typename Traits, typename Allocator>
+inline const_buffers_1 buffer(
+    const std::basic_string<Elem, Traits, Allocator>& data,
+    std::size_t max_size_in_bytes)
+{
+  return const_buffers_1(
+      const_buffer(data.data(),
+        data.size() * sizeof(Elem) < max_size_in_bytes
+        ? data.size() * sizeof(Elem) : max_size_in_bytes
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+        , detail::buffer_debug_check<
+            typename std::basic_string<Elem, Traits, Allocator>::const_iterator
+          >(data.begin())
+#endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
+        ));
+}
+
+/*@}*/
+
+/** @defgroup buffer_copy boost::asio::buffer_copy
+ *
+ * @brief The boost::asio::buffer_copy function is used to copy bytes from a
+ * source buffer (or buffer sequence) to a target buffer (or buffer sequence).
+ *
+ * The @c buffer_copy function is available in two forms:
+ *
+ * @li A 2-argument form: @c buffer_copy(target, source)
+ *
+ * @li A 3-argument form: @c buffer_copy(target, source, max_bytes_to_copy)
+
+ * Both forms return the number of bytes actually copied. The number of bytes
+ * copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * @li @c If specified, @c max_bytes_to_copy.
+ *
+ * This prevents buffer overflow, regardless of the buffer sizes used in the
+ * copy operation.
+ *
+ * Note that @ref buffer_copy is implemented in terms of @c memcpy, and
+ * consequently it cannot be used to copy between overlapping memory regions.
+ */
+/*@{*/
+
+/// Copies bytes from a source buffer to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer representing the memory region from
+ * which the bytes will be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+inline std::size_t buffer_copy(const mutable_buffer& target,
+    const const_buffer& source)
+{
+  using namespace std; // For memcpy.
+  std::size_t target_size = buffer_size(target);
+  std::size_t source_size = buffer_size(source);
+  std::size_t n = target_size < source_size ? target_size : source_size;
+  memcpy(buffer_cast<void*>(target), buffer_cast<const void*>(source), n);
+  return n;
+}
+
+/// Copies bytes from a source buffer to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer representing the memory region from
+ * which the bytes will be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+inline std::size_t buffer_copy(const mutable_buffer& target,
+    const const_buffers_1& source)
+{
+  return buffer_copy(target, static_cast<const const_buffer&>(source));
+}
+
+/// Copies bytes from a source buffer to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A modifiable buffer representing the memory region from which
+ * the bytes will be copied. The contents of the source buffer will not be
+ * modified.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+inline std::size_t buffer_copy(const mutable_buffer& target,
+    const mutable_buffer& source)
+{
+  return buffer_copy(target, const_buffer(source));
+}
+
+/// Copies bytes from a source buffer to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A modifiable buffer representing the memory region from which
+ * the bytes will be copied. The contents of the source buffer will not be
+ * modified.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+inline std::size_t buffer_copy(const mutable_buffer& target,
+    const mutable_buffers_1& source)
+{
+  return buffer_copy(target, const_buffer(source));
+}
+
+/// Copies bytes from a source buffer sequence to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer sequence representing the memory
+ * regions from which the bytes will be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+template <typename ConstBufferSequence>
+std::size_t buffer_copy(const mutable_buffer& target,
+    const ConstBufferSequence& source)
+{
+  std::size_t total_bytes_copied = 0;
+
+  typename ConstBufferSequence::const_iterator source_iter = source.begin();
+  typename ConstBufferSequence::const_iterator source_end = source.end();
+
+  for (mutable_buffer target_buffer(target);
+      buffer_size(target_buffer) && source_iter != source_end; ++source_iter)
+  {
+    const_buffer source_buffer(*source_iter);
+    std::size_t bytes_copied = buffer_copy(target_buffer, source_buffer);
+    total_bytes_copied += bytes_copied;
+    target_buffer = target_buffer + bytes_copied;
+  }
+
+  return total_bytes_copied;
+}
+
+/// Copies bytes from a source buffer to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer representing the memory region from
+ * which the bytes will be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+inline std::size_t buffer_copy(const mutable_buffers_1& target,
+    const const_buffer& source)
+{
+  return buffer_copy(static_cast<const mutable_buffer&>(target), source);
+}
+
+/// Copies bytes from a source buffer to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer representing the memory region from
+ * which the bytes will be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+inline std::size_t buffer_copy(const mutable_buffers_1& target,
+    const const_buffers_1& source)
+{
+  return buffer_copy(static_cast<const mutable_buffer&>(target),
+      static_cast<const const_buffer&>(source));
+}
+
+/// Copies bytes from a source buffer to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A modifiable buffer representing the memory region from which
+ * the bytes will be copied. The contents of the source buffer will not be
+ * modified.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+inline std::size_t buffer_copy(const mutable_buffers_1& target,
+    const mutable_buffer& source)
+{
+  return buffer_copy(static_cast<const mutable_buffer&>(target),
+      const_buffer(source));
+}
+
+/// Copies bytes from a source buffer to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A modifiable buffer representing the memory region from which
+ * the bytes will be copied. The contents of the source buffer will not be
+ * modified.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+inline std::size_t buffer_copy(const mutable_buffers_1& target,
+    const mutable_buffers_1& source)
+{
+  return buffer_copy(static_cast<const mutable_buffer&>(target),
+      const_buffer(source));
+}
+
+/// Copies bytes from a source buffer sequence to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer sequence representing the memory
+ * regions from which the bytes will be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+template <typename ConstBufferSequence>
+inline std::size_t buffer_copy(const mutable_buffers_1& target,
+    const ConstBufferSequence& source)
+{
+  return buffer_copy(static_cast<const mutable_buffer&>(target), source);
+}
+
+/// Copies bytes from a source buffer to a target buffer sequence.
+/**
+ * @param target A modifiable buffer sequence representing the memory regions to
+ * which the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer representing the memory region from
+ * which the bytes will be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+template <typename MutableBufferSequence>
+std::size_t buffer_copy(const MutableBufferSequence& target,
+    const const_buffer& source)
+{
+  std::size_t total_bytes_copied = 0;
+
+  typename MutableBufferSequence::const_iterator target_iter = target.begin();
+  typename MutableBufferSequence::const_iterator target_end = target.end();
+
+  for (const_buffer source_buffer(source);
+      buffer_size(source_buffer) && target_iter != target_end; ++target_iter)
+  {
+    mutable_buffer target_buffer(*target_iter);
+    std::size_t bytes_copied = buffer_copy(target_buffer, source_buffer);
+    total_bytes_copied += bytes_copied;
+    source_buffer = source_buffer + bytes_copied;
+  }
+
+  return total_bytes_copied;
+}
+
+/// Copies bytes from a source buffer to a target buffer sequence.
+/**
+ * @param target A modifiable buffer sequence representing the memory regions to
+ * which the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer representing the memory region from
+ * which the bytes will be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+template <typename MutableBufferSequence>
+inline std::size_t buffer_copy(const MutableBufferSequence& target,
+    const const_buffers_1& source)
+{
+  return buffer_copy(target, static_cast<const const_buffer&>(source));
+}
+
+/// Copies bytes from a source buffer to a target buffer sequence.
+/**
+ * @param target A modifiable buffer sequence representing the memory regions to
+ * which the bytes will be copied.
+ *
+ * @param source A modifiable buffer representing the memory region from which
+ * the bytes will be copied. The contents of the source buffer will not be
+ * modified.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+template <typename MutableBufferSequence>
+inline std::size_t buffer_copy(const MutableBufferSequence& target,
+    const mutable_buffer& source)
+{
+  return buffer_copy(target, const_buffer(source));
+}
+
+/// Copies bytes from a source buffer to a target buffer sequence.
+/**
+ * @param target A modifiable buffer sequence representing the memory regions to
+ * which the bytes will be copied.
+ *
+ * @param source A modifiable buffer representing the memory region from which
+ * the bytes will be copied. The contents of the source buffer will not be
+ * modified.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+template <typename MutableBufferSequence>
+inline std::size_t buffer_copy(const MutableBufferSequence& target,
+    const mutable_buffers_1& source)
+{
+  return buffer_copy(target, const_buffer(source));
+}
+
+/// Copies bytes from a source buffer sequence to a target buffer sequence.
+/**
+ * @param target A modifiable buffer sequence representing the memory regions to
+ * which the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer sequence representing the memory
+ * regions from which the bytes will be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+template <typename MutableBufferSequence, typename ConstBufferSequence>
+std::size_t buffer_copy(const MutableBufferSequence& target,
+    const ConstBufferSequence& source)
+{
+  std::size_t total_bytes_copied = 0;
+
+  typename MutableBufferSequence::const_iterator target_iter = target.begin();
+  typename MutableBufferSequence::const_iterator target_end = target.end();
+  std::size_t target_buffer_offset = 0;
+
+  typename ConstBufferSequence::const_iterator source_iter = source.begin();
+  typename ConstBufferSequence::const_iterator source_end = source.end();
+  std::size_t source_buffer_offset = 0;
+
+  while (target_iter != target_end && source_iter != source_end)
+  {
+    mutable_buffer target_buffer =
+      mutable_buffer(*target_iter) + target_buffer_offset;
+
+    const_buffer source_buffer =
+      const_buffer(*source_iter) + source_buffer_offset;
+
+    std::size_t bytes_copied = buffer_copy(target_buffer, source_buffer);
+    total_bytes_copied += bytes_copied;
+
+    if (bytes_copied == buffer_size(target_buffer))
+    {
+      ++target_iter;
+      target_buffer_offset = 0;
+    }
+    else
+      target_buffer_offset += bytes_copied;
+
+    if (bytes_copied == buffer_size(source_buffer))
+    {
+      ++source_iter;
+      source_buffer_offset = 0;
+    }
+    else
+      source_buffer_offset += bytes_copied;
+  }
+
+  return total_bytes_copied;
+}
+
+/// Copies a limited number of bytes from a source buffer to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer representing the memory region from
+ * which the bytes will be copied.
+ *
+ * @param max_bytes_to_copy The maximum number of bytes to be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+inline std::size_t buffer_copy(const mutable_buffer& target,
+    const const_buffer& source, std::size_t max_bytes_to_copy)
+{
+  return buffer_copy(buffer(target, max_bytes_to_copy), source);
+}
+
+/// Copies a limited number of bytes from a source buffer to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer representing the memory region from
+ * which the bytes will be copied.
+ *
+ * @param max_bytes_to_copy The maximum number of bytes to be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+inline std::size_t buffer_copy(const mutable_buffer& target,
+    const const_buffers_1& source, std::size_t max_bytes_to_copy)
+{
+  return buffer_copy(buffer(target, max_bytes_to_copy), source);
+}
+
+/// Copies a limited number of bytes from a source buffer to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A modifiable buffer representing the memory region from which
+ * the bytes will be copied. The contents of the source buffer will not be
+ * modified.
+ *
+ * @param max_bytes_to_copy The maximum number of bytes to be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+inline std::size_t buffer_copy(const mutable_buffer& target,
+    const mutable_buffer& source, std::size_t max_bytes_to_copy)
+{
+  return buffer_copy(buffer(target, max_bytes_to_copy), source);
+}
+
+/// Copies a limited number of bytes from a source buffer to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A modifiable buffer representing the memory region from which
+ * the bytes will be copied. The contents of the source buffer will not be
+ * modified.
+ *
+ * @param max_bytes_to_copy The maximum number of bytes to be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+inline std::size_t buffer_copy(const mutable_buffer& target,
+    const mutable_buffers_1& source, std::size_t max_bytes_to_copy)
+{
+  return buffer_copy(buffer(target, max_bytes_to_copy), source);
+}
+
+/// Copies a limited number of bytes from a source buffer sequence to a target
+/// buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer sequence representing the memory
+ * regions from which the bytes will be copied.
+ *
+ * @param max_bytes_to_copy The maximum number of bytes to be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+template <typename ConstBufferSequence>
+inline std::size_t buffer_copy(const mutable_buffer& target,
+    const ConstBufferSequence& source, std::size_t max_bytes_to_copy)
+{
+  return buffer_copy(buffer(target, max_bytes_to_copy), source);
+}
+
+/// Copies a limited number of bytes from a source buffer to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer representing the memory region from
+ * which the bytes will be copied.
+ *
+ * @param max_bytes_to_copy The maximum number of bytes to be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+inline std::size_t buffer_copy(const mutable_buffers_1& target,
+    const const_buffer& source, std::size_t max_bytes_to_copy)
+{
+  return buffer_copy(buffer(target, max_bytes_to_copy), source);
+}
+
+/// Copies a limited number of bytes from a source buffer to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer representing the memory region from
+ * which the bytes will be copied.
+ *
+ * @param max_bytes_to_copy The maximum number of bytes to be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+inline std::size_t buffer_copy(const mutable_buffers_1& target,
+    const const_buffers_1& source, std::size_t max_bytes_to_copy)
+{
+  return buffer_copy(buffer(target, max_bytes_to_copy), source);
+}
+
+/// Copies a limited number of bytes from a source buffer to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A modifiable buffer representing the memory region from which
+ * the bytes will be copied. The contents of the source buffer will not be
+ * modified.
+ *
+ * @param max_bytes_to_copy The maximum number of bytes to be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+inline std::size_t buffer_copy(const mutable_buffers_1& target,
+    const mutable_buffer& source, std::size_t max_bytes_to_copy)
+{
+  return buffer_copy(buffer(target, max_bytes_to_copy), source);
+}
+
+/// Copies a limited number of bytes from a source buffer to a target buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A modifiable buffer representing the memory region from which
+ * the bytes will be copied. The contents of the source buffer will not be
+ * modified.
+ *
+ * @param max_bytes_to_copy The maximum number of bytes to be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+inline std::size_t buffer_copy(const mutable_buffers_1& target,
+    const mutable_buffers_1& source, std::size_t max_bytes_to_copy)
+{
+  return buffer_copy(buffer(target, max_bytes_to_copy), source);
+}
+
+/// Copies a limited number of bytes from a source buffer sequence to a target
+/// buffer.
+/**
+ * @param target A modifiable buffer representing the memory region to which
+ * the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer sequence representing the memory
+ * regions from which the bytes will be copied.
+ *
+ * @param max_bytes_to_copy The maximum number of bytes to be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+template <typename ConstBufferSequence>
+inline std::size_t buffer_copy(const mutable_buffers_1& target,
+    const ConstBufferSequence& source, std::size_t max_bytes_to_copy)
+{
+  return buffer_copy(buffer(target, max_bytes_to_copy), source);
+}
+
+/// Copies a limited number of bytes from a source buffer to a target buffer
+/// sequence.
+/**
+ * @param target A modifiable buffer sequence representing the memory regions to
+ * which the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer representing the memory region from
+ * which the bytes will be copied.
+ *
+ * @param max_bytes_to_copy The maximum number of bytes to be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+template <typename MutableBufferSequence>
+inline std::size_t buffer_copy(const MutableBufferSequence& target,
+    const const_buffer& source, std::size_t max_bytes_to_copy)
+{
+  return buffer_copy(target, buffer(source, max_bytes_to_copy));
+}
+
+/// Copies a limited number of bytes from a source buffer to a target buffer
+/// sequence.
+/**
+ * @param target A modifiable buffer sequence representing the memory regions to
+ * which the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer representing the memory region from
+ * which the bytes will be copied.
+ *
+ * @param max_bytes_to_copy The maximum number of bytes to be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+template <typename MutableBufferSequence>
+inline std::size_t buffer_copy(const MutableBufferSequence& target,
+    const const_buffers_1& source, std::size_t max_bytes_to_copy)
+{
+  return buffer_copy(target, buffer(source, max_bytes_to_copy));
+}
+
+/// Copies a limited number of bytes from a source buffer to a target buffer
+/// sequence.
+/**
+ * @param target A modifiable buffer sequence representing the memory regions to
+ * which the bytes will be copied.
+ *
+ * @param source A modifiable buffer representing the memory region from which
+ * the bytes will be copied. The contents of the source buffer will not be
+ * modified.
+ *
+ * @param max_bytes_to_copy The maximum number of bytes to be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+template <typename MutableBufferSequence>
+inline std::size_t buffer_copy(const MutableBufferSequence& target,
+    const mutable_buffer& source, std::size_t max_bytes_to_copy)
+{
+  return buffer_copy(target, buffer(source, max_bytes_to_copy));
+}
+
+/// Copies a limited number of bytes from a source buffer to a target buffer
+/// sequence.
+/**
+ * @param target A modifiable buffer sequence representing the memory regions to
+ * which the bytes will be copied.
+ *
+ * @param source A modifiable buffer representing the memory region from which
+ * the bytes will be copied. The contents of the source buffer will not be
+ * modified.
+ *
+ * @param max_bytes_to_copy The maximum number of bytes to be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+template <typename MutableBufferSequence>
+inline std::size_t buffer_copy(const MutableBufferSequence& target,
+    const mutable_buffers_1& source, std::size_t max_bytes_to_copy)
+{
+  return buffer_copy(target, buffer(source, max_bytes_to_copy));
+}
+
+/// Copies a limited number of bytes from a source buffer sequence to a target
+/// buffer sequence.
+/**
+ * @param target A modifiable buffer sequence representing the memory regions to
+ * which the bytes will be copied.
+ *
+ * @param source A non-modifiable buffer sequence representing the memory
+ * regions from which the bytes will be copied.
+ *
+ * @param max_bytes_to_copy The maximum number of bytes to be copied.
+ *
+ * @returns The number of bytes copied.
+ *
+ * @note The number of bytes copied is the lesser of:
+ *
+ * @li @c buffer_size(target)
+ *
+ * @li @c buffer_size(source)
+ *
+ * @li @c max_bytes_to_copy
+ *
+ * This function is implemented in terms of @c memcpy, and consequently it
+ * cannot be used to copy between overlapping memory regions.
+ */
+template <typename MutableBufferSequence, typename ConstBufferSequence>
+std::size_t buffer_copy(const MutableBufferSequence& target,
+    const ConstBufferSequence& source, std::size_t max_bytes_to_copy)
+{
+  std::size_t total_bytes_copied = 0;
+
+  typename MutableBufferSequence::const_iterator target_iter = target.begin();
+  typename MutableBufferSequence::const_iterator target_end = target.end();
+  std::size_t target_buffer_offset = 0;
+
+  typename ConstBufferSequence::const_iterator source_iter = source.begin();
+  typename ConstBufferSequence::const_iterator source_end = source.end();
+  std::size_t source_buffer_offset = 0;
+
+  while (total_bytes_copied != max_bytes_to_copy
+      && target_iter != target_end && source_iter != source_end)
+  {
+    mutable_buffer target_buffer =
+      mutable_buffer(*target_iter) + target_buffer_offset;
+
+    const_buffer source_buffer =
+      const_buffer(*source_iter) + source_buffer_offset;
+
+    std::size_t bytes_copied = buffer_copy(target_buffer,
+        source_buffer, max_bytes_to_copy - total_bytes_copied);
+    total_bytes_copied += bytes_copied;
+
+    if (bytes_copied == buffer_size(target_buffer))
+    {
+      ++target_iter;
+      target_buffer_offset = 0;
+    }
+    else
+      target_buffer_offset += bytes_copied;
+
+    if (bytes_copied == buffer_size(source_buffer))
+    {
+      ++source_iter;
+      source_buffer_offset = 0;
+    }
+    else
+      source_buffer_offset += bytes_copied;
+  }
+
+  return total_bytes_copied;
+}
+
+/*@}*/
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_BUFFER_HPP
diff --git a/ext/patches/boost/asio/buffered_read_stream.hpp b/ext/patches/boost/asio/buffered_read_stream.hpp
new file mode 100644
index 0000000..d8c92f7
--- /dev/null
+++ b/ext/patches/boost/asio/buffered_read_stream.hpp
@@ -0,0 +1,246 @@
+//
+// buffered_read_stream.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BUFFERED_READ_STREAM_HPP
+#define BOOST_ASIO_BUFFERED_READ_STREAM_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/buffered_read_stream_fwd.hpp>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_resize_guard.hpp>
+#include <boost/asio/detail/buffered_stream_storage.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/type_traits.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Adds buffering to the read-related operations of a stream.
+/**
+ * The buffered_read_stream class template can be used to add buffering to the
+ * synchronous and asynchronous read operations of a stream.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ *
+ * @par Concepts:
+ * AsyncReadStream, AsyncWriteStream, Stream, SyncReadStream, SyncWriteStream.
+ */
+template <typename Stream>
+class buffered_read_stream
+  : private noncopyable
+{
+public:
+  /// The type of the next layer.
+  typedef typename remove_reference<Stream>::type next_layer_type;
+
+  /// The type of the lowest layer.
+  typedef typename next_layer_type::lowest_layer_type lowest_layer_type;
+
+#if defined(GENERATING_DOCUMENTATION)
+  /// The default buffer size.
+  static const std::size_t default_buffer_size = implementation_defined;
+#else
+  BOOST_ASIO_STATIC_CONSTANT(std::size_t, default_buffer_size = 1024);
+#endif
+
+  /// Construct, passing the specified argument to initialise the next layer.
+  template <typename Arg>
+  explicit buffered_read_stream(Arg& a)
+    : next_layer_(a),
+      storage_(default_buffer_size)
+  {
+  }
+
+  /// Construct, passing the specified argument to initialise the next layer.
+  template <typename Arg>
+  buffered_read_stream(Arg& a, std::size_t buffer_size)
+    : next_layer_(a),
+      storage_(buffer_size)
+  {
+  }
+
+  /// Get a reference to the next layer.
+  next_layer_type& next_layer()
+  {
+    return next_layer_;
+  }
+
+  /// Get a reference to the lowest layer.
+  lowest_layer_type& lowest_layer()
+  {
+    return next_layer_.lowest_layer();
+  }
+
+  /// Get a const reference to the lowest layer.
+  const lowest_layer_type& lowest_layer() const
+  {
+    return next_layer_.lowest_layer();
+  }
+
+  /// Get the io_service associated with the object.
+  boost::asio::io_service& get_io_service()
+  {
+    return next_layer_.get_io_service();
+  }
+
+  /// Close the stream.
+  void close()
+  {
+    next_layer_.close();
+  }
+
+  /// Close the stream.
+  boost::system::error_code close(boost::system::error_code& ec)
+  {
+    return next_layer_.close(ec);
+  }
+
+  /// Write the given data to the stream. Returns the number of bytes written.
+  /// Throws an exception on failure.
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers)
+  {
+    return next_layer_.write_some(buffers);
+  }
+
+  /// Write the given data to the stream. Returns the number of bytes written,
+  /// or 0 if an error occurred.
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return next_layer_.write_some(buffers, ec);
+  }
+
+  /// Start an asynchronous write. The data being written must be valid for the
+  /// lifetime of the asynchronous operation.
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_write_some(const ConstBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    detail::async_result_init<
+      WriteHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+    next_layer_.async_write_some(buffers,
+        BOOST_ASIO_MOVE_CAST(BOOST_ASIO_HANDLER_TYPE(WriteHandler,
+            void (boost::system::error_code, std::size_t)))(init.handler));
+
+    return init.result.get();
+  }
+
+  /// Fill the buffer with some data. Returns the number of bytes placed in the
+  /// buffer as a result of the operation. Throws an exception on failure.
+  std::size_t fill();
+
+  /// Fill the buffer with some data. Returns the number of bytes placed in the
+  /// buffer as a result of the operation, or 0 if an error occurred.
+  std::size_t fill(boost::system::error_code& ec);
+
+  /// Start an asynchronous fill.
+  template <typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_fill(BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
+
+  /// Read some data from the stream. Returns the number of bytes read. Throws
+  /// an exception on failure.
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers);
+
+  /// Read some data from the stream. Returns the number of bytes read or 0 if
+  /// an error occurred.
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers,
+      boost::system::error_code& ec);
+
+  /// Start an asynchronous read. The buffer into which the data will be read
+  /// must be valid for the lifetime of the asynchronous operation.
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_read_some(const MutableBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
+
+  /// Peek at the incoming data on the stream. Returns the number of bytes read.
+  /// Throws an exception on failure.
+  template <typename MutableBufferSequence>
+  std::size_t peek(const MutableBufferSequence& buffers);
+
+  /// Peek at the incoming data on the stream. Returns the number of bytes read,
+  /// or 0 if an error occurred.
+  template <typename MutableBufferSequence>
+  std::size_t peek(const MutableBufferSequence& buffers,
+      boost::system::error_code& ec);
+
+  /// Determine the amount of data that may be read without blocking.
+  std::size_t in_avail()
+  {
+    return storage_.size();
+  }
+
+  /// Determine the amount of data that may be read without blocking.
+  std::size_t in_avail(boost::system::error_code& ec)
+  {
+    ec = boost::system::error_code();
+    return storage_.size();
+  }
+
+private:
+  /// Copy data out of the internal buffer to the specified target buffer.
+  /// Returns the number of bytes copied.
+  template <typename MutableBufferSequence>
+  std::size_t copy(const MutableBufferSequence& buffers)
+  {
+    std::size_t bytes_copied = boost::asio::buffer_copy(
+        buffers, storage_.data(), storage_.size());
+    storage_.consume(bytes_copied);
+    return bytes_copied;
+  }
+
+  /// Copy data from the internal buffer to the specified target buffer, without
+  /// removing the data from the internal buffer. Returns the number of bytes
+  /// copied.
+  template <typename MutableBufferSequence>
+  std::size_t peek_copy(const MutableBufferSequence& buffers)
+  {
+    return boost::asio::buffer_copy(buffers, storage_.data(), storage_.size());
+  }
+
+  /// The next layer.
+  Stream next_layer_;
+
+  // The data in the buffer.
+  detail::buffered_stream_storage storage_;
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/impl/buffered_read_stream.hpp>
+
+#endif // BOOST_ASIO_BUFFERED_READ_STREAM_HPP
diff --git a/ext/patches/boost/asio/buffered_read_stream_fwd.hpp b/ext/patches/boost/asio/buffered_read_stream_fwd.hpp
new file mode 100644
index 0000000..9cf88df
--- /dev/null
+++ b/ext/patches/boost/asio/buffered_read_stream_fwd.hpp
@@ -0,0 +1,27 @@
+//
+// buffered_read_stream_fwd.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BUFFERED_READ_STREAM_FWD_HPP
+#define BOOST_ASIO_BUFFERED_READ_STREAM_FWD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+namespace boost {
+namespace asio {
+
+template <typename Stream>
+class buffered_read_stream;
+
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_BUFFERED_READ_STREAM_FWD_HPP
diff --git a/ext/patches/boost/asio/buffered_stream.hpp b/ext/patches/boost/asio/buffered_stream.hpp
new file mode 100644
index 0000000..46040d0
--- /dev/null
+++ b/ext/patches/boost/asio/buffered_stream.hpp
@@ -0,0 +1,260 @@
+//
+// buffered_stream.hpp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BUFFERED_STREAM_HPP
+#define BOOST_ASIO_BUFFERED_STREAM_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/buffered_read_stream.hpp>
+#include <boost/asio/buffered_write_stream.hpp>
+#include <boost/asio/buffered_stream_fwd.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Adds buffering to the read- and write-related operations of a stream.
+/**
+ * The buffered_stream class template can be used to add buffering to the
+ * synchronous and asynchronous read and write operations of a stream.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ *
+ * @par Concepts:
+ * AsyncReadStream, AsyncWriteStream, Stream, SyncReadStream, SyncWriteStream.
+ */
+template <typename Stream>
+class buffered_stream
+  : private noncopyable
+{
+public:
+  /// The type of the next layer.
+  typedef typename remove_reference<Stream>::type next_layer_type;
+
+  /// The type of the lowest layer.
+  typedef typename next_layer_type::lowest_layer_type lowest_layer_type;
+
+  /// Construct, passing the specified argument to initialise the next layer.
+  template <typename Arg>
+  explicit buffered_stream(Arg& a)
+    : inner_stream_impl_(a),
+      stream_impl_(inner_stream_impl_)
+  {
+  }
+
+  /// Construct, passing the specified argument to initialise the next layer.
+  template <typename Arg>
+  explicit buffered_stream(Arg& a, std::size_t read_buffer_size,
+      std::size_t write_buffer_size)
+    : inner_stream_impl_(a, write_buffer_size),
+      stream_impl_(inner_stream_impl_, read_buffer_size)
+  {
+  }
+
+  /// Get a reference to the next layer.
+  next_layer_type& next_layer()
+  {
+    return stream_impl_.next_layer().next_layer();
+  }
+
+  /// Get a reference to the lowest layer.
+  lowest_layer_type& lowest_layer()
+  {
+    return stream_impl_.lowest_layer();
+  }
+
+  /// Get a const reference to the lowest layer.
+  const lowest_layer_type& lowest_layer() const
+  {
+    return stream_impl_.lowest_layer();
+  }
+
+  /// Get the io_service associated with the object.
+  boost::asio::io_service& get_io_service()
+  {
+    return stream_impl_.get_io_service();
+  }
+
+  /// Close the stream.
+  void close()
+  {
+    stream_impl_.close();
+  }
+
+  /// Close the stream.
+  boost::system::error_code close(boost::system::error_code& ec)
+  {
+    return stream_impl_.close(ec);
+  }
+
+  /// Flush all data from the buffer to the next layer. Returns the number of
+  /// bytes written to the next layer on the last write operation. Throws an
+  /// exception on failure.
+  std::size_t flush()
+  {
+    return stream_impl_.next_layer().flush();
+  }
+
+  /// Flush all data from the buffer to the next layer. Returns the number of
+  /// bytes written to the next layer on the last write operation, or 0 if an
+  /// error occurred.
+  std::size_t flush(boost::system::error_code& ec)
+  {
+    return stream_impl_.next_layer().flush(ec);
+  }
+
+  /// Start an asynchronous flush.
+  template <typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_flush(BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    return stream_impl_.next_layer().async_flush(
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Write the given data to the stream. Returns the number of bytes written.
+  /// Throws an exception on failure.
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers)
+  {
+    return stream_impl_.write_some(buffers);
+  }
+
+  /// Write the given data to the stream. Returns the number of bytes written,
+  /// or 0 if an error occurred.
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return stream_impl_.write_some(buffers, ec);
+  }
+
+  /// Start an asynchronous write. The data being written must be valid for the
+  /// lifetime of the asynchronous operation.
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_write_some(const ConstBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    return stream_impl_.async_write_some(buffers,
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Fill the buffer with some data. Returns the number of bytes placed in the
+  /// buffer as a result of the operation. Throws an exception on failure.
+  std::size_t fill()
+  {
+    return stream_impl_.fill();
+  }
+
+  /// Fill the buffer with some data. Returns the number of bytes placed in the
+  /// buffer as a result of the operation, or 0 if an error occurred.
+  std::size_t fill(boost::system::error_code& ec)
+  {
+    return stream_impl_.fill(ec);
+  }
+
+  /// Start an asynchronous fill.
+  template <typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_fill(BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    return stream_impl_.async_fill(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+
+  /// Read some data from the stream. Returns the number of bytes read. Throws
+  /// an exception on failure.
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers)
+  {
+    return stream_impl_.read_some(buffers);
+  }
+
+  /// Read some data from the stream. Returns the number of bytes read or 0 if
+  /// an error occurred.
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return stream_impl_.read_some(buffers, ec);
+  }
+
+  /// Start an asynchronous read. The buffer into which the data will be read
+  /// must be valid for the lifetime of the asynchronous operation.
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_read_some(const MutableBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    return stream_impl_.async_read_some(buffers,
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+
+  /// Peek at the incoming data on the stream. Returns the number of bytes read.
+  /// Throws an exception on failure.
+  template <typename MutableBufferSequence>
+  std::size_t peek(const MutableBufferSequence& buffers)
+  {
+    return stream_impl_.peek(buffers);
+  }
+
+  /// Peek at the incoming data on the stream. Returns the number of bytes read,
+  /// or 0 if an error occurred.
+  template <typename MutableBufferSequence>
+  std::size_t peek(const MutableBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return stream_impl_.peek(buffers, ec);
+  }
+
+  /// Determine the amount of data that may be read without blocking.
+  std::size_t in_avail()
+  {
+    return stream_impl_.in_avail();
+  }
+
+  /// Determine the amount of data that may be read without blocking.
+  std::size_t in_avail(boost::system::error_code& ec)
+  {
+    return stream_impl_.in_avail(ec);
+  }
+
+private:
+  // The buffered write stream.
+  typedef buffered_write_stream<Stream> write_stream_type;
+  write_stream_type inner_stream_impl_;
+
+  // The buffered read stream.
+  typedef buffered_read_stream<write_stream_type&> read_stream_type;
+  read_stream_type stream_impl_;
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_BUFFERED_STREAM_HPP
diff --git a/ext/patches/boost/asio/buffered_stream_fwd.hpp b/ext/patches/boost/asio/buffered_stream_fwd.hpp
new file mode 100644
index 0000000..6b8269d
--- /dev/null
+++ b/ext/patches/boost/asio/buffered_stream_fwd.hpp
@@ -0,0 +1,27 @@
+//
+// buffered_stream_fwd.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BUFFERED_STREAM_FWD_HPP
+#define BOOST_ASIO_BUFFERED_STREAM_FWD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+namespace boost {
+namespace asio {
+
+template <typename Stream>
+class buffered_stream;
+
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_BUFFERED_STREAM_FWD_HPP
diff --git a/ext/patches/boost/asio/buffered_write_stream.hpp b/ext/patches/boost/asio/buffered_write_stream.hpp
new file mode 100644
index 0000000..1a45c24
--- /dev/null
+++ b/ext/patches/boost/asio/buffered_write_stream.hpp
@@ -0,0 +1,238 @@
+//
+// buffered_write_stream.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BUFFERED_WRITE_STREAM_HPP
+#define BOOST_ASIO_BUFFERED_WRITE_STREAM_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/buffered_write_stream_fwd.hpp>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/completion_condition.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffered_stream_storage.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/type_traits.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/write.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Adds buffering to the write-related operations of a stream.
+/**
+ * The buffered_write_stream class template can be used to add buffering to the
+ * synchronous and asynchronous write operations of a stream.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ *
+ * @par Concepts:
+ * AsyncReadStream, AsyncWriteStream, Stream, SyncReadStream, SyncWriteStream.
+ */
+template <typename Stream>
+class buffered_write_stream
+  : private noncopyable
+{
+public:
+  /// The type of the next layer.
+  typedef typename remove_reference<Stream>::type next_layer_type;
+
+  /// The type of the lowest layer.
+  typedef typename next_layer_type::lowest_layer_type lowest_layer_type;
+
+#if defined(GENERATING_DOCUMENTATION)
+  /// The default buffer size.
+  static const std::size_t default_buffer_size = implementation_defined;
+#else
+  BOOST_ASIO_STATIC_CONSTANT(std::size_t, default_buffer_size = 1024);
+#endif
+
+  /// Construct, passing the specified argument to initialise the next layer.
+  template <typename Arg>
+  explicit buffered_write_stream(Arg& a)
+    : next_layer_(a),
+      storage_(default_buffer_size)
+  {
+  }
+
+  /// Construct, passing the specified argument to initialise the next layer.
+  template <typename Arg>
+  buffered_write_stream(Arg& a, std::size_t buffer_size)
+    : next_layer_(a),
+      storage_(buffer_size)
+  {
+  }
+
+  /// Get a reference to the next layer.
+  next_layer_type& next_layer()
+  {
+    return next_layer_;
+  }
+
+  /// Get a reference to the lowest layer.
+  lowest_layer_type& lowest_layer()
+  {
+    return next_layer_.lowest_layer();
+  }
+
+  /// Get a const reference to the lowest layer.
+  const lowest_layer_type& lowest_layer() const
+  {
+    return next_layer_.lowest_layer();
+  }
+
+  /// Get the io_service associated with the object.
+  boost::asio::io_service& get_io_service()
+  {
+    return next_layer_.get_io_service();
+  }
+
+  /// Close the stream.
+  void close()
+  {
+    next_layer_.close();
+  }
+
+  /// Close the stream.
+  boost::system::error_code close(boost::system::error_code& ec)
+  {
+    return next_layer_.close(ec);
+  }
+
+  /// Flush all data from the buffer to the next layer. Returns the number of
+  /// bytes written to the next layer on the last write operation. Throws an
+  /// exception on failure.
+  std::size_t flush();
+
+  /// Flush all data from the buffer to the next layer. Returns the number of
+  /// bytes written to the next layer on the last write operation, or 0 if an
+  /// error occurred.
+  std::size_t flush(boost::system::error_code& ec);
+
+  /// Start an asynchronous flush.
+  template <typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_flush(BOOST_ASIO_MOVE_ARG(WriteHandler) handler);
+
+  /// Write the given data to the stream. Returns the number of bytes written.
+  /// Throws an exception on failure.
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers);
+
+  /// Write the given data to the stream. Returns the number of bytes written,
+  /// or 0 if an error occurred and the error handler did not throw.
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers,
+      boost::system::error_code& ec);
+
+  /// Start an asynchronous write. The data being written must be valid for the
+  /// lifetime of the asynchronous operation.
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_write_some(const ConstBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler);
+
+  /// Read some data from the stream. Returns the number of bytes read. Throws
+  /// an exception on failure.
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers)
+  {
+    return next_layer_.read_some(buffers);
+  }
+
+  /// Read some data from the stream. Returns the number of bytes read or 0 if
+  /// an error occurred.
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return next_layer_.read_some(buffers, ec);
+  }
+
+  /// Start an asynchronous read. The buffer into which the data will be read
+  /// must be valid for the lifetime of the asynchronous operation.
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_read_some(const MutableBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    detail::async_result_init<
+      ReadHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+    next_layer_.async_read_some(buffers,
+        BOOST_ASIO_MOVE_CAST(BOOST_ASIO_HANDLER_TYPE(ReadHandler,
+            void (boost::system::error_code, std::size_t)))(init.handler));
+
+    return init.result.get();
+  }
+
+  /// Peek at the incoming data on the stream. Returns the number of bytes read.
+  /// Throws an exception on failure.
+  template <typename MutableBufferSequence>
+  std::size_t peek(const MutableBufferSequence& buffers)
+  {
+    return next_layer_.peek(buffers);
+  }
+
+  /// Peek at the incoming data on the stream. Returns the number of bytes read,
+  /// or 0 if an error occurred.
+  template <typename MutableBufferSequence>
+  std::size_t peek(const MutableBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return next_layer_.peek(buffers, ec);
+  }
+
+  /// Determine the amount of data that may be read without blocking.
+  std::size_t in_avail()
+  {
+    return next_layer_.in_avail();
+  }
+
+  /// Determine the amount of data that may be read without blocking.
+  std::size_t in_avail(boost::system::error_code& ec)
+  {
+    return next_layer_.in_avail(ec);
+  }
+
+private:
+  /// Copy data into the internal buffer from the specified source buffer.
+  /// Returns the number of bytes copied.
+  template <typename ConstBufferSequence>
+  std::size_t copy(const ConstBufferSequence& buffers);
+
+  /// The next layer.
+  Stream next_layer_;
+
+  // The data in the buffer.
+  detail::buffered_stream_storage storage_;
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/impl/buffered_write_stream.hpp>
+
+#endif // BOOST_ASIO_BUFFERED_WRITE_STREAM_HPP
diff --git a/ext/patches/boost/asio/buffered_write_stream_fwd.hpp b/ext/patches/boost/asio/buffered_write_stream_fwd.hpp
new file mode 100644
index 0000000..8a0990f
--- /dev/null
+++ b/ext/patches/boost/asio/buffered_write_stream_fwd.hpp
@@ -0,0 +1,27 @@
+//
+// buffered_write_stream_fwd.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BUFFERED_WRITE_STREAM_FWD_HPP
+#define BOOST_ASIO_BUFFERED_WRITE_STREAM_FWD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+namespace boost {
+namespace asio {
+
+template <typename Stream>
+class buffered_write_stream;
+
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_BUFFERED_WRITE_STREAM_FWD_HPP
diff --git a/ext/patches/boost/asio/buffers_iterator.hpp b/ext/patches/boost/asio/buffers_iterator.hpp
new file mode 100644
index 0000000..f8bc332
--- /dev/null
+++ b/ext/patches/boost/asio/buffers_iterator.hpp
@@ -0,0 +1,483 @@
+//
+// buffers_iterator.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_BUFFERS_ITERATOR_HPP
+#define BOOST_ASIO_BUFFERS_ITERATOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <iterator>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/detail/assert.hpp>
+#include <boost/asio/detail/type_traits.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+namespace detail
+{
+  template <bool IsMutable>
+  struct buffers_iterator_types_helper;
+
+  template <>
+  struct buffers_iterator_types_helper<false>
+  {
+    typedef const_buffer buffer_type;
+    template <typename ByteType>
+    struct byte_type
+    {
+      typedef typename add_const<ByteType>::type type;
+    };
+  };
+
+  template <>
+  struct buffers_iterator_types_helper<true>
+  {
+    typedef mutable_buffer buffer_type;
+    template <typename ByteType>
+    struct byte_type
+    {
+      typedef ByteType type;
+    };
+  };
+
+  template <typename BufferSequence, typename ByteType>
+  struct buffers_iterator_types
+  {
+    enum
+    {
+      is_mutable = is_convertible<
+          typename BufferSequence::value_type,
+          mutable_buffer>::value
+    };
+    typedef buffers_iterator_types_helper<is_mutable> helper;
+    typedef typename helper::buffer_type buffer_type;
+    typedef typename helper::template byte_type<ByteType>::type byte_type;
+  };
+}
+
+/// A random access iterator over the bytes in a buffer sequence.
+template <typename BufferSequence, typename ByteType = char>
+class buffers_iterator
+{
+private:
+  typedef typename detail::buffers_iterator_types<
+      BufferSequence, ByteType>::buffer_type buffer_type;
+
+public:
+  /// The type used for the distance between two iterators.
+  typedef std::ptrdiff_t difference_type;
+
+  /// The type of the value pointed to by the iterator.
+  typedef ByteType value_type;
+
+#if defined(GENERATING_DOCUMENTATION)
+  /// The type of the result of applying operator->() to the iterator.
+  /**
+   * If the buffer sequence stores buffer objects that are convertible to
+   * mutable_buffer, this is a pointer to a non-const ByteType. Otherwise, a
+   * pointer to a const ByteType.
+   */
+  typedef const_or_non_const_ByteType* pointer;
+#else // defined(GENERATING_DOCUMENTATION)
+  typedef typename detail::buffers_iterator_types<
+      BufferSequence, ByteType>::byte_type* pointer;
+#endif // defined(GENERATING_DOCUMENTATION)
+
+#if defined(GENERATING_DOCUMENTATION)
+  /// The type of the result of applying operator*() to the iterator.
+  /**
+   * If the buffer sequence stores buffer objects that are convertible to
+   * mutable_buffer, this is a reference to a non-const ByteType. Otherwise, a
+   * reference to a const ByteType.
+   */
+  typedef const_or_non_const_ByteType& reference;
+#else // defined(GENERATING_DOCUMENTATION)
+  typedef typename detail::buffers_iterator_types<
+      BufferSequence, ByteType>::byte_type& reference;
+#endif // defined(GENERATING_DOCUMENTATION)
+
+  /// The iterator category.
+  typedef std::random_access_iterator_tag iterator_category;
+
+  /// Default constructor. Creates an iterator in an undefined state.
+  buffers_iterator()
+    : current_buffer_(),
+      current_buffer_position_(0),
+      begin_(),
+      current_(),
+      end_(),
+      position_(0)
+  {
+  }
+
+  /// Construct an iterator representing the beginning of the buffers' data.
+  static buffers_iterator begin(const BufferSequence& buffers)
+#if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 3)
+    __attribute__ ((__noinline__))
+#endif // defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 3)
+  {
+    buffers_iterator new_iter;
+    new_iter.begin_ = buffers.begin();
+    new_iter.current_ = buffers.begin();
+    new_iter.end_ = buffers.end();
+    while (new_iter.current_ != new_iter.end_)
+    {
+      new_iter.current_buffer_ = *new_iter.current_;
+      if (boost::asio::buffer_size(new_iter.current_buffer_) > 0)
+        break;
+      ++new_iter.current_;
+    }
+    return new_iter;
+  }
+
+  /// Construct an iterator representing the end of the buffers' data.
+  static buffers_iterator end(const BufferSequence& buffers)
+#if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 3)
+    __attribute__ ((__noinline__))
+#endif // defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 3)
+  {
+    buffers_iterator new_iter;
+    new_iter.begin_ = buffers.begin();
+    new_iter.current_ = buffers.begin();
+    new_iter.end_ = buffers.end();
+    while (new_iter.current_ != new_iter.end_)
+    {
+      buffer_type buffer = *new_iter.current_;
+      new_iter.position_ += boost::asio::buffer_size(buffer);
+      ++new_iter.current_;
+    }
+    return new_iter;
+  }
+
+  /// Dereference an iterator.
+  reference operator*() const
+  {
+    return dereference();
+  }
+
+  /// Dereference an iterator.
+  pointer operator->() const
+  {
+    return &dereference();
+  }
+
+  /// Access an individual element.
+  reference operator[](std::ptrdiff_t difference) const
+  {
+    buffers_iterator tmp(*this);
+    tmp.advance(difference);
+    return *tmp;
+  }
+
+  /// Increment operator (prefix).
+  buffers_iterator& operator++()
+  {
+    increment();
+    return *this;
+  }
+
+  /// Increment operator (postfix).
+  buffers_iterator operator++(int)
+  {
+    buffers_iterator tmp(*this);
+    ++*this;
+    return tmp;
+  }
+
+  /// Decrement operator (prefix).
+  buffers_iterator& operator--()
+  {
+    decrement();
+    return *this;
+  }
+
+  /// Decrement operator (postfix).
+  buffers_iterator operator--(int)
+  {
+    buffers_iterator tmp(*this);
+    --*this;
+    return tmp;
+  }
+
+  /// Addition operator.
+  buffers_iterator& operator+=(std::ptrdiff_t difference)
+  {
+    advance(difference);
+    return *this;
+  }
+
+  /// Subtraction operator.
+  buffers_iterator& operator-=(std::ptrdiff_t difference)
+  {
+    advance(-difference);
+    return *this;
+  }
+
+  /// Addition operator.
+  friend buffers_iterator operator+(const buffers_iterator& iter,
+      std::ptrdiff_t difference)
+  {
+    buffers_iterator tmp(iter);
+    tmp.advance(difference);
+    return tmp;
+  }
+
+  /// Addition operator.
+  friend buffers_iterator operator+(std::ptrdiff_t difference,
+      const buffers_iterator& iter)
+  {
+    buffers_iterator tmp(iter);
+    tmp.advance(difference);
+    return tmp;
+  }
+
+  /// Subtraction operator.
+  friend buffers_iterator operator-(const buffers_iterator& iter,
+      std::ptrdiff_t difference)
+  {
+    buffers_iterator tmp(iter);
+    tmp.advance(-difference);
+    return tmp;
+  }
+
+  /// Subtraction operator.
+  friend std::ptrdiff_t operator-(const buffers_iterator& a,
+      const buffers_iterator& b)
+  {
+    return b.distance_to(a);
+  }
+
+  /// Test two iterators for equality.
+  friend bool operator==(const buffers_iterator& a, const buffers_iterator& b)
+  {
+    return a.equal(b);
+  }
+
+  /// Test two iterators for inequality.
+  friend bool operator!=(const buffers_iterator& a, const buffers_iterator& b)
+  {
+    return !a.equal(b);
+  }
+
+  /// Compare two iterators.
+  friend bool operator<(const buffers_iterator& a, const buffers_iterator& b)
+  {
+    return a.distance_to(b) > 0;
+  }
+
+  /// Compare two iterators.
+  friend bool operator<=(const buffers_iterator& a, const buffers_iterator& b)
+  {
+    return !(b < a);
+  }
+
+  /// Compare two iterators.
+  friend bool operator>(const buffers_iterator& a, const buffers_iterator& b)
+  {
+    return b < a;
+  }
+
+  /// Compare two iterators.
+  friend bool operator>=(const buffers_iterator& a, const buffers_iterator& b)
+  {
+    return !(a < b);
+  }
+
+private:
+  // Dereference the iterator.
+  reference dereference() const
+  {
+    return buffer_cast<pointer>(current_buffer_)[current_buffer_position_];
+  }
+
+  // Compare two iterators for equality.
+  bool equal(const buffers_iterator& other) const
+  {
+    return position_ == other.position_;
+  }
+
+  // Increment the iterator.
+  void increment()
+  {
+    BOOST_ASIO_ASSERT(current_ != end_ && "iterator out of bounds");
+    ++position_;
+
+    // Check if the increment can be satisfied by the current buffer.
+    ++current_buffer_position_;
+    if (current_buffer_position_ != boost::asio::buffer_size(current_buffer_))
+      return;
+
+    // Find the next non-empty buffer.
+    ++current_;
+    current_buffer_position_ = 0;
+    while (current_ != end_)
+    {
+      current_buffer_ = *current_;
+      if (boost::asio::buffer_size(current_buffer_) > 0)
+        return;
+      ++current_;
+    }
+  }
+
+  // Decrement the iterator.
+  void decrement()
+  {
+    BOOST_ASIO_ASSERT(position_ > 0 && "iterator out of bounds");
+    --position_;
+
+    // Check if the decrement can be satisfied by the current buffer.
+    if (current_buffer_position_ != 0)
+    {
+      --current_buffer_position_;
+      return;
+    }
+
+    // Find the previous non-empty buffer.
+    typename BufferSequence::const_iterator iter = current_;
+    while (iter != begin_)
+    {
+      --iter;
+      buffer_type buffer = *iter;
+      std::size_t buffer_size = boost::asio::buffer_size(buffer);
+      if (buffer_size > 0)
+      {
+        current_ = iter;
+        current_buffer_ = buffer;
+        current_buffer_position_ = buffer_size - 1;
+        return;
+      }
+    }
+  }
+
+  // Advance the iterator by the specified distance.
+  void advance(std::ptrdiff_t n)
+  {
+    if (n > 0)
+    {
+      BOOST_ASIO_ASSERT(current_ != end_ && "iterator out of bounds");
+      for (;;)
+      {
+        std::ptrdiff_t current_buffer_balance
+          = boost::asio::buffer_size(current_buffer_)
+          - current_buffer_position_;
+
+        // Check if the advance can be satisfied by the current buffer.
+        if (current_buffer_balance > n)
+        {
+          position_ += n;
+          current_buffer_position_ += n;
+          return;
+        }
+
+        // Update position.
+        n -= current_buffer_balance;
+        position_ += current_buffer_balance;
+
+        // Move to next buffer. If it is empty then it will be skipped on the
+        // next iteration of this loop.
+        if (++current_ == end_)
+        {
+          BOOST_ASIO_ASSERT(n == 0 && "iterator out of bounds");
+          current_buffer_ = buffer_type();
+          current_buffer_position_ = 0;
+          return;
+        }
+        current_buffer_ = *current_;
+        current_buffer_position_ = 0;
+      }
+    }
+    else if (n < 0)
+    {
+      std::size_t abs_n = -n;
+      BOOST_ASIO_ASSERT(position_ >= abs_n && "iterator out of bounds");
+      for (;;)
+      {
+        // Check if the advance can be satisfied by the current buffer.
+        if (current_buffer_position_ >= abs_n)
+        {
+          position_ -= abs_n;
+          current_buffer_position_ -= abs_n;
+          return;
+        }
+
+        // Update position.
+        abs_n -= current_buffer_position_;
+        position_ -= current_buffer_position_;
+
+        // Check if we've reached the beginning of the buffers.
+        if (current_ == begin_)
+        {
+          BOOST_ASIO_ASSERT(abs_n == 0 && "iterator out of bounds");
+          current_buffer_position_ = 0;
+          return;
+        }
+
+        // Find the previous non-empty buffer.
+        typename BufferSequence::const_iterator iter = current_;
+        while (iter != begin_)
+        {
+          --iter;
+          buffer_type buffer = *iter;
+          std::size_t buffer_size = boost::asio::buffer_size(buffer);
+          if (buffer_size > 0)
+          {
+            current_ = iter;
+            current_buffer_ = buffer;
+            current_buffer_position_ = buffer_size;
+            break;
+          }
+        }
+      }
+    }
+  }
+
+  // Determine the distance between two iterators.
+  std::ptrdiff_t distance_to(const buffers_iterator& other) const
+  {
+    return other.position_ - position_;
+  }
+
+  buffer_type current_buffer_;
+  std::size_t current_buffer_position_;
+  typename BufferSequence::const_iterator begin_;
+  typename BufferSequence::const_iterator current_;
+  typename BufferSequence::const_iterator end_;
+  std::size_t position_;
+};
+
+/// Construct an iterator representing the beginning of the buffers' data.
+template <typename BufferSequence>
+inline buffers_iterator<BufferSequence> buffers_begin(
+    const BufferSequence& buffers)
+{
+  return buffers_iterator<BufferSequence>::begin(buffers);
+}
+
+/// Construct an iterator representing the end of the buffers' data.
+template <typename BufferSequence>
+inline buffers_iterator<BufferSequence> buffers_end(
+    const BufferSequence& buffers)
+{
+  return buffers_iterator<BufferSequence>::end(buffers);
+}
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_BUFFERS_ITERATOR_HPP
diff --git a/ext/patches/boost/asio/completion_condition.hpp b/ext/patches/boost/asio/completion_condition.hpp
new file mode 100644
index 0000000..41e89b3
--- /dev/null
+++ b/ext/patches/boost/asio/completion_condition.hpp
@@ -0,0 +1,220 @@
+//
+// completion_condition.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_COMPLETION_CONDITION_HPP
+#define BOOST_ASIO_COMPLETION_CONDITION_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+namespace detail {
+
+// The default maximum number of bytes to transfer in a single operation.
+enum default_max_transfer_size_t { default_max_transfer_size = 65536 };
+
+// Adapt result of old-style completion conditions (which had a bool result
+// where true indicated that the operation was complete).
+inline std::size_t adapt_completion_condition_result(bool result)
+{
+  return result ? 0 : default_max_transfer_size;
+}
+
+// Adapt result of current completion conditions (which have a size_t result
+// where 0 means the operation is complete, and otherwise the result is the
+// maximum number of bytes to transfer on the next underlying operation).
+inline std::size_t adapt_completion_condition_result(std::size_t result)
+{
+  return result;
+}
+
+class transfer_all_t
+{
+public:
+  typedef std::size_t result_type;
+
+  template <typename Error>
+  std::size_t operator()(const Error& err, std::size_t)
+  {
+    return !!err ? 0 : default_max_transfer_size;
+  }
+};
+
+class transfer_at_least_t
+{
+public:
+  typedef std::size_t result_type;
+
+  explicit transfer_at_least_t(std::size_t minimum)
+    : minimum_(minimum)
+  {
+  }
+
+  template <typename Error>
+  std::size_t operator()(const Error& err, std::size_t bytes_transferred)
+  {
+    return (!!err || bytes_transferred >= minimum_)
+      ? 0 : default_max_transfer_size;
+  }
+
+private:
+  std::size_t minimum_;
+};
+
+class transfer_exactly_t
+{
+public:
+  typedef std::size_t result_type;
+
+  explicit transfer_exactly_t(std::size_t size)
+    : size_(size)
+  {
+  }
+
+  template <typename Error>
+  std::size_t operator()(const Error& err, std::size_t bytes_transferred)
+  {
+    return (!!err || bytes_transferred >= size_) ? 0 :
+      (size_ - bytes_transferred < default_max_transfer_size
+        ? size_ - bytes_transferred : std::size_t(default_max_transfer_size));
+  }
+
+private:
+  std::size_t size_;
+};
+
+} // namespace detail
+
+/**
+ * @defgroup completion_condition Completion Condition Function Objects
+ *
+ * Function objects used for determining when a read or write operation should
+ * complete.
+ */
+/*@{*/
+
+/// Return a completion condition function object that indicates that a read or
+/// write operation should continue until all of the data has been transferred,
+/// or until an error occurs.
+/**
+ * This function is used to create an object, of unspecified type, that meets
+ * CompletionCondition requirements.
+ *
+ * @par Example
+ * Reading until a buffer is full:
+ * @code
+ * boost::array<char, 128> buf;
+ * boost::system::error_code ec;
+ * std::size_t n = boost::asio::read(
+ *     sock, boost::asio::buffer(buf),
+ *     boost::asio::transfer_all(), ec);
+ * if (ec)
+ * {
+ *   // An error occurred.
+ * }
+ * else
+ * {
+ *   // n == 128
+ * }
+ * @endcode
+ */
+#if defined(GENERATING_DOCUMENTATION)
+unspecified transfer_all();
+#else
+inline detail::transfer_all_t transfer_all()
+{
+  return detail::transfer_all_t();
+}
+#endif
+
+/// Return a completion condition function object that indicates that a read or
+/// write operation should continue until a minimum number of bytes has been
+/// transferred, or until an error occurs.
+/**
+ * This function is used to create an object, of unspecified type, that meets
+ * CompletionCondition requirements.
+ *
+ * @par Example
+ * Reading until a buffer is full or contains at least 64 bytes:
+ * @code
+ * boost::array<char, 128> buf;
+ * boost::system::error_code ec;
+ * std::size_t n = boost::asio::read(
+ *     sock, boost::asio::buffer(buf),
+ *     boost::asio::transfer_at_least(64), ec);
+ * if (ec)
+ * {
+ *   // An error occurred.
+ * }
+ * else
+ * {
+ *   // n >= 64 && n <= 128
+ * }
+ * @endcode
+ */
+#if defined(GENERATING_DOCUMENTATION)
+unspecified transfer_at_least(std::size_t minimum);
+#else
+inline detail::transfer_at_least_t transfer_at_least(std::size_t minimum)
+{
+  return detail::transfer_at_least_t(minimum);
+}
+#endif
+
+/// Return a completion condition function object that indicates that a read or
+/// write operation should continue until an exact number of bytes has been
+/// transferred, or until an error occurs.
+/**
+ * This function is used to create an object, of unspecified type, that meets
+ * CompletionCondition requirements.
+ *
+ * @par Example
+ * Reading until a buffer is full or contains exactly 64 bytes:
+ * @code
+ * boost::array<char, 128> buf;
+ * boost::system::error_code ec;
+ * std::size_t n = boost::asio::read(
+ *     sock, boost::asio::buffer(buf),
+ *     boost::asio::transfer_exactly(64), ec);
+ * if (ec)
+ * {
+ *   // An error occurred.
+ * }
+ * else
+ * {
+ *   // n == 64
+ * }
+ * @endcode
+ */
+#if defined(GENERATING_DOCUMENTATION)
+unspecified transfer_exactly(std::size_t size);
+#else
+inline detail::transfer_exactly_t transfer_exactly(std::size_t size)
+{
+  return detail::transfer_exactly_t(size);
+}
+#endif
+
+/*@}*/
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_COMPLETION_CONDITION_HPP
diff --git a/ext/patches/boost/asio/connect.hpp b/ext/patches/boost/asio/connect.hpp
new file mode 100644
index 0000000..6f793fe
--- /dev/null
+++ b/ext/patches/boost/asio/connect.hpp
@@ -0,0 +1,825 @@
+//
+// connect.hpp
+// ~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_CONNECT_HPP
+#define BOOST_ASIO_CONNECT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/basic_socket.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/**
+ * @defgroup connect boost::asio::connect
+ *
+ * @brief Establishes a socket connection by trying each endpoint in a sequence.
+ */
+/*@{*/
+
+/// Establishes a socket connection by trying each endpoint in a sequence.
+/**
+ * This function attempts to connect a socket to one of a sequence of
+ * endpoints. It does this by repeated calls to the socket's @c connect member
+ * function, once for each endpoint in the sequence, until a connection is
+ * successfully established.
+ *
+ * @param s The socket to be connected. If the socket is already open, it will
+ * be closed.
+ *
+ * @param begin An iterator pointing to the start of a sequence of endpoints.
+ *
+ * @returns On success, an iterator denoting the successfully connected
+ * endpoint. Otherwise, the end iterator.
+ *
+ * @throws boost::system::system_error Thrown on failure. If the sequence is
+ * empty, the associated @c error_code is boost::asio::error::not_found.
+ * Otherwise, contains the error from the last connection attempt.
+ *
+ * @note This overload assumes that a default constructed object of type @c
+ * Iterator represents the end of the sequence. This is a valid assumption for
+ * iterator types such as @c boost::asio::ip::tcp::resolver::iterator.
+ *
+ * @par Example
+ * @code tcp::resolver r(io_service);
+ * tcp::resolver::query q("host", "service");
+ * tcp::socket s(io_service);
+ * boost::asio::connect(s, r.resolve(q)); @endcode
+ */
+template <typename Protocol, typename SocketService, typename Iterator>
+Iterator connect(basic_socket<Protocol, SocketService>& s, Iterator begin);
+
+/// Establishes a socket connection by trying each endpoint in a sequence.
+/**
+ * This function attempts to connect a socket to one of a sequence of
+ * endpoints. It does this by repeated calls to the socket's @c connect member
+ * function, once for each endpoint in the sequence, until a connection is
+ * successfully established.
+ *
+ * @param s The socket to be connected. If the socket is already open, it will
+ * be closed.
+ *
+ * @param begin An iterator pointing to the start of a sequence of endpoints.
+ *
+ * @param ec Set to indicate what error occurred, if any. If the sequence is
+ * empty, set to boost::asio::error::not_found. Otherwise, contains the error
+ * from the last connection attempt.
+ *
+ * @returns On success, an iterator denoting the successfully connected
+ * endpoint. Otherwise, the end iterator.
+ *
+ * @note This overload assumes that a default constructed object of type @c
+ * Iterator represents the end of the sequence. This is a valid assumption for
+ * iterator types such as @c boost::asio::ip::tcp::resolver::iterator.
+ *
+ * @par Example
+ * @code tcp::resolver r(io_service);
+ * tcp::resolver::query q("host", "service");
+ * tcp::socket s(io_service);
+ * boost::system::error_code ec;
+ * boost::asio::connect(s, r.resolve(q), ec);
+ * if (ec)
+ * {
+ *   // An error occurred.
+ * } @endcode
+ */
+template <typename Protocol, typename SocketService, typename Iterator>
+Iterator connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, boost::system::error_code& ec);
+
+/// Establishes a socket connection by trying each endpoint in a sequence.
+/**
+ * This function attempts to connect a socket to one of a sequence of
+ * endpoints. It does this by repeated calls to the socket's @c connect member
+ * function, once for each endpoint in the sequence, until a connection is
+ * successfully established.
+ *
+ * @param s The socket to be connected. If the socket is already open, it will
+ * be closed.
+ *
+ * @param begin An iterator pointing to the start of a sequence of endpoints.
+ *
+ * @param end An iterator pointing to the end of a sequence of endpoints.
+ *
+ * @returns On success, an iterator denoting the successfully connected
+ * endpoint. Otherwise, the end iterator.
+ *
+ * @throws boost::system::system_error Thrown on failure. If the sequence is
+ * empty, the associated @c error_code is boost::asio::error::not_found.
+ * Otherwise, contains the error from the last connection attempt.
+ *
+ * @par Example
+ * @code tcp::resolver r(io_service);
+ * tcp::resolver::query q("host", "service");
+ * tcp::resolver::iterator i = r.resolve(q), end;
+ * tcp::socket s(io_service);
+ * boost::asio::connect(s, i, end); @endcode
+ */
+template <typename Protocol, typename SocketService, typename Iterator>
+Iterator connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, Iterator end);
+
+/// Establishes a socket connection by trying each endpoint in a sequence.
+/**
+ * This function attempts to connect a socket to one of a sequence of
+ * endpoints. It does this by repeated calls to the socket's @c connect member
+ * function, once for each endpoint in the sequence, until a connection is
+ * successfully established.
+ *
+ * @param s The socket to be connected. If the socket is already open, it will
+ * be closed.
+ *
+ * @param begin An iterator pointing to the start of a sequence of endpoints.
+ *
+ * @param end An iterator pointing to the end of a sequence of endpoints.
+ *
+ * @param ec Set to indicate what error occurred, if any. If the sequence is
+ * empty, set to boost::asio::error::not_found. Otherwise, contains the error
+ * from the last connection attempt.
+ *
+ * @returns On success, an iterator denoting the successfully connected
+ * endpoint. Otherwise, the end iterator.
+ *
+ * @par Example
+ * @code tcp::resolver r(io_service);
+ * tcp::resolver::query q("host", "service");
+ * tcp::resolver::iterator i = r.resolve(q), end;
+ * tcp::socket s(io_service);
+ * boost::system::error_code ec;
+ * boost::asio::connect(s, i, end, ec);
+ * if (ec)
+ * {
+ *   // An error occurred.
+ * } @endcode
+ */
+template <typename Protocol, typename SocketService, typename Iterator>
+Iterator connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, Iterator end, boost::system::error_code& ec);
+
+/// Establishes a socket connection by trying each endpoint in a sequence.
+/**
+ * This function attempts to connect a socket to one of a sequence of
+ * endpoints. It does this by repeated calls to the socket's @c connect member
+ * function, once for each endpoint in the sequence, until a connection is
+ * successfully established.
+ *
+ * @param s The socket to be connected. If the socket is already open, it will
+ * be closed.
+ *
+ * @param begin An iterator pointing to the start of a sequence of endpoints.
+ *
+ * @param connect_condition A function object that is called prior to each
+ * connection attempt. The signature of the function object must be:
+ * @code Iterator connect_condition(
+ *     const boost::system::error_code& ec,
+ *     Iterator next); @endcode
+ * The @c ec parameter contains the result from the most recent connect
+ * operation. Before the first connection attempt, @c ec is always set to
+ * indicate success. The @c next parameter is an iterator pointing to the next
+ * endpoint to be tried. The function object should return the next iterator,
+ * but is permitted to return a different iterator so that endpoints may be
+ * skipped. The implementation guarantees that the function object will never
+ * be called with the end iterator.
+ *
+ * @returns On success, an iterator denoting the successfully connected
+ * endpoint. Otherwise, the end iterator.
+ *
+ * @throws boost::system::system_error Thrown on failure. If the sequence is
+ * empty, the associated @c error_code is boost::asio::error::not_found.
+ * Otherwise, contains the error from the last connection attempt.
+ *
+ * @note This overload assumes that a default constructed object of type @c
+ * Iterator represents the end of the sequence. This is a valid assumption for
+ * iterator types such as @c boost::asio::ip::tcp::resolver::iterator.
+ *
+ * @par Example
+ * The following connect condition function object can be used to output
+ * information about the individual connection attempts:
+ * @code struct my_connect_condition
+ * {
+ *   template <typename Iterator>
+ *   Iterator operator()(
+ *       const boost::system::error_code& ec,
+ *       Iterator next)
+ *   {
+ *     if (ec) std::cout << "Error: " << ec.message() << std::endl;
+ *     std::cout << "Trying: " << next->endpoint() << std::endl;
+ *     return next;
+ *   }
+ * }; @endcode
+ * It would be used with the boost::asio::connect function as follows:
+ * @code tcp::resolver r(io_service);
+ * tcp::resolver::query q("host", "service");
+ * tcp::socket s(io_service);
+ * tcp::resolver::iterator i = boost::asio::connect(
+ *     s, r.resolve(q), my_connect_condition());
+ * std::cout << "Connected to: " << i->endpoint() << std::endl; @endcode
+ */
+template <typename Protocol, typename SocketService,
+    typename Iterator, typename ConnectCondition>
+Iterator connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, ConnectCondition connect_condition);
+
+/// Establishes a socket connection by trying each endpoint in a sequence.
+/**
+ * This function attempts to connect a socket to one of a sequence of
+ * endpoints. It does this by repeated calls to the socket's @c connect member
+ * function, once for each endpoint in the sequence, until a connection is
+ * successfully established.
+ *
+ * @param s The socket to be connected. If the socket is already open, it will
+ * be closed.
+ *
+ * @param begin An iterator pointing to the start of a sequence of endpoints.
+ *
+ * @param connect_condition A function object that is called prior to each
+ * connection attempt. The signature of the function object must be:
+ * @code Iterator connect_condition(
+ *     const boost::system::error_code& ec,
+ *     Iterator next); @endcode
+ * The @c ec parameter contains the result from the most recent connect
+ * operation. Before the first connection attempt, @c ec is always set to
+ * indicate success. The @c next parameter is an iterator pointing to the next
+ * endpoint to be tried. The function object should return the next iterator,
+ * but is permitted to return a different iterator so that endpoints may be
+ * skipped. The implementation guarantees that the function object will never
+ * be called with the end iterator.
+ *
+ * @param ec Set to indicate what error occurred, if any. If the sequence is
+ * empty, set to boost::asio::error::not_found. Otherwise, contains the error
+ * from the last connection attempt.
+ *
+ * @returns On success, an iterator denoting the successfully connected
+ * endpoint. Otherwise, the end iterator.
+ *
+ * @note This overload assumes that a default constructed object of type @c
+ * Iterator represents the end of the sequence. This is a valid assumption for
+ * iterator types such as @c boost::asio::ip::tcp::resolver::iterator.
+ *
+ * @par Example
+ * The following connect condition function object can be used to output
+ * information about the individual connection attempts:
+ * @code struct my_connect_condition
+ * {
+ *   template <typename Iterator>
+ *   Iterator operator()(
+ *       const boost::system::error_code& ec,
+ *       Iterator next)
+ *   {
+ *     if (ec) std::cout << "Error: " << ec.message() << std::endl;
+ *     std::cout << "Trying: " << next->endpoint() << std::endl;
+ *     return next;
+ *   }
+ * }; @endcode
+ * It would be used with the boost::asio::connect function as follows:
+ * @code tcp::resolver r(io_service);
+ * tcp::resolver::query q("host", "service");
+ * tcp::socket s(io_service);
+ * boost::system::error_code ec;
+ * tcp::resolver::iterator i = boost::asio::connect(
+ *     s, r.resolve(q), my_connect_condition(), ec);
+ * if (ec)
+ * {
+ *   // An error occurred.
+ * }
+ * else
+ * {
+ *   std::cout << "Connected to: " << i->endpoint() << std::endl;
+ * } @endcode
+ */
+template <typename Protocol, typename SocketService,
+    typename Iterator, typename ConnectCondition>
+Iterator connect(basic_socket<Protocol, SocketService>& s, Iterator begin,
+    ConnectCondition connect_condition, boost::system::error_code& ec);
+
+/// Establishes a socket connection by trying each endpoint in a sequence.
+/**
+ * This function attempts to connect a socket to one of a sequence of
+ * endpoints. It does this by repeated calls to the socket's @c connect member
+ * function, once for each endpoint in the sequence, until a connection is
+ * successfully established.
+ *
+ * @param s The socket to be connected. If the socket is already open, it will
+ * be closed.
+ *
+ * @param begin An iterator pointing to the start of a sequence of endpoints.
+ *
+ * @param end An iterator pointing to the end of a sequence of endpoints.
+ *
+ * @param connect_condition A function object that is called prior to each
+ * connection attempt. The signature of the function object must be:
+ * @code Iterator connect_condition(
+ *     const boost::system::error_code& ec,
+ *     Iterator next); @endcode
+ * The @c ec parameter contains the result from the most recent connect
+ * operation. Before the first connection attempt, @c ec is always set to
+ * indicate success. The @c next parameter is an iterator pointing to the next
+ * endpoint to be tried. The function object should return the next iterator,
+ * but is permitted to return a different iterator so that endpoints may be
+ * skipped. The implementation guarantees that the function object will never
+ * be called with the end iterator.
+ *
+ * @returns On success, an iterator denoting the successfully connected
+ * endpoint. Otherwise, the end iterator.
+ *
+ * @throws boost::system::system_error Thrown on failure. If the sequence is
+ * empty, the associated @c error_code is boost::asio::error::not_found.
+ * Otherwise, contains the error from the last connection attempt.
+ *
+ * @par Example
+ * The following connect condition function object can be used to output
+ * information about the individual connection attempts:
+ * @code struct my_connect_condition
+ * {
+ *   template <typename Iterator>
+ *   Iterator operator()(
+ *       const boost::system::error_code& ec,
+ *       Iterator next)
+ *   {
+ *     if (ec) std::cout << "Error: " << ec.message() << std::endl;
+ *     std::cout << "Trying: " << next->endpoint() << std::endl;
+ *     return next;
+ *   }
+ * }; @endcode
+ * It would be used with the boost::asio::connect function as follows:
+ * @code tcp::resolver r(io_service);
+ * tcp::resolver::query q("host", "service");
+ * tcp::resolver::iterator i = r.resolve(q), end;
+ * tcp::socket s(io_service);
+ * i = boost::asio::connect(s, i, end, my_connect_condition());
+ * std::cout << "Connected to: " << i->endpoint() << std::endl; @endcode
+ */
+template <typename Protocol, typename SocketService,
+    typename Iterator, typename ConnectCondition>
+Iterator connect(basic_socket<Protocol, SocketService>& s, Iterator begin,
+    Iterator end, ConnectCondition connect_condition);
+
+/// Establishes a socket connection by trying each endpoint in a sequence.
+/**
+ * This function attempts to connect a socket to one of a sequence of
+ * endpoints. It does this by repeated calls to the socket's @c connect member
+ * function, once for each endpoint in the sequence, until a connection is
+ * successfully established.
+ *
+ * @param s The socket to be connected. If the socket is already open, it will
+ * be closed.
+ *
+ * @param begin An iterator pointing to the start of a sequence of endpoints.
+ *
+ * @param end An iterator pointing to the end of a sequence of endpoints.
+ *
+ * @param connect_condition A function object that is called prior to each
+ * connection attempt. The signature of the function object must be:
+ * @code Iterator connect_condition(
+ *     const boost::system::error_code& ec,
+ *     Iterator next); @endcode
+ * The @c ec parameter contains the result from the most recent connect
+ * operation. Before the first connection attempt, @c ec is always set to
+ * indicate success. The @c next parameter is an iterator pointing to the next
+ * endpoint to be tried. The function object should return the next iterator,
+ * but is permitted to return a different iterator so that endpoints may be
+ * skipped. The implementation guarantees that the function object will never
+ * be called with the end iterator.
+ *
+ * @param ec Set to indicate what error occurred, if any. If the sequence is
+ * empty, set to boost::asio::error::not_found. Otherwise, contains the error
+ * from the last connection attempt.
+ *
+ * @returns On success, an iterator denoting the successfully connected
+ * endpoint. Otherwise, the end iterator.
+ *
+ * @par Example
+ * The following connect condition function object can be used to output
+ * information about the individual connection attempts:
+ * @code struct my_connect_condition
+ * {
+ *   template <typename Iterator>
+ *   Iterator operator()(
+ *       const boost::system::error_code& ec,
+ *       Iterator next)
+ *   {
+ *     if (ec) std::cout << "Error: " << ec.message() << std::endl;
+ *     std::cout << "Trying: " << next->endpoint() << std::endl;
+ *     return next;
+ *   }
+ * }; @endcode
+ * It would be used with the boost::asio::connect function as follows:
+ * @code tcp::resolver r(io_service);
+ * tcp::resolver::query q("host", "service");
+ * tcp::resolver::iterator i = r.resolve(q), end;
+ * tcp::socket s(io_service);
+ * boost::system::error_code ec;
+ * i = boost::asio::connect(s, i, end, my_connect_condition(), ec);
+ * if (ec)
+ * {
+ *   // An error occurred.
+ * }
+ * else
+ * {
+ *   std::cout << "Connected to: " << i->endpoint() << std::endl;
+ * } @endcode
+ */
+template <typename Protocol, typename SocketService,
+    typename Iterator, typename ConnectCondition>
+Iterator connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, Iterator end, ConnectCondition connect_condition,
+    boost::system::error_code& ec);
+
+/*@}*/
+
+/**
+ * @defgroup async_connect boost::asio::async_connect
+ *
+ * @brief Asynchronously establishes a socket connection by trying each
+ * endpoint in a sequence.
+ */
+/*@{*/
+
+/// Asynchronously establishes a socket connection by trying each endpoint in a
+/// sequence.
+/**
+ * This function attempts to connect a socket to one of a sequence of
+ * endpoints. It does this by repeated calls to the socket's @c async_connect
+ * member function, once for each endpoint in the sequence, until a connection
+ * is successfully established.
+ *
+ * @param s The socket to be connected. If the socket is already open, it will
+ * be closed.
+ *
+ * @param begin An iterator pointing to the start of a sequence of endpoints.
+ *
+ * @param handler The handler to be called when the connect operation
+ * completes. Copies will be made of the handler as required. The function
+ * signature of the handler must be:
+ * @code void handler(
+ *   // Result of operation. if the sequence is empty, set to
+ *   // boost::asio::error::not_found. Otherwise, contains the
+ *   // error from the last connection attempt.
+ *   const boost::system::error_code& error,
+ *
+ *   // On success, an iterator denoting the successfully
+ *   // connected endpoint. Otherwise, the end iterator.
+ *   Iterator iterator
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation
+ * of the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @note This overload assumes that a default constructed object of type @c
+ * Iterator represents the end of the sequence. This is a valid assumption for
+ * iterator types such as @c boost::asio::ip::tcp::resolver::iterator.
+ *
+ * @par Example
+ * @code tcp::resolver r(io_service);
+ * tcp::resolver::query q("host", "service");
+ * tcp::socket s(io_service);
+ *
+ * // ...
+ *
+ * r.async_resolve(q, resolve_handler);
+ *
+ * // ...
+ *
+ * void resolve_handler(
+ *     const boost::system::error_code& ec,
+ *     tcp::resolver::iterator i)
+ * {
+ *   if (!ec)
+ *   {
+ *     boost::asio::async_connect(s, i, connect_handler);
+ *   }
+ * }
+ *
+ * // ...
+ *
+ * void connect_handler(
+ *     const boost::system::error_code& ec,
+ *     tcp::resolver::iterator i)
+ * {
+ *   // ...
+ * } @endcode
+ */
+template <typename Protocol, typename SocketService,
+    typename Iterator, typename ComposedConnectHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ComposedConnectHandler,
+    void (boost::system::error_code, Iterator))
+async_connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, BOOST_ASIO_MOVE_ARG(ComposedConnectHandler) handler);
+
+/// Asynchronously establishes a socket connection by trying each endpoint in a
+/// sequence.
+/**
+ * This function attempts to connect a socket to one of a sequence of
+ * endpoints. It does this by repeated calls to the socket's @c async_connect
+ * member function, once for each endpoint in the sequence, until a connection
+ * is successfully established.
+ *
+ * @param s The socket to be connected. If the socket is already open, it will
+ * be closed.
+ *
+ * @param begin An iterator pointing to the start of a sequence of endpoints.
+ *
+ * @param end An iterator pointing to the end of a sequence of endpoints.
+ *
+ * @param handler The handler to be called when the connect operation
+ * completes. Copies will be made of the handler as required. The function
+ * signature of the handler must be:
+ * @code void handler(
+ *   // Result of operation. if the sequence is empty, set to
+ *   // boost::asio::error::not_found. Otherwise, contains the
+ *   // error from the last connection attempt.
+ *   const boost::system::error_code& error,
+ *
+ *   // On success, an iterator denoting the successfully
+ *   // connected endpoint. Otherwise, the end iterator.
+ *   Iterator iterator
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation
+ * of the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @par Example
+ * @code tcp::resolver r(io_service);
+ * tcp::resolver::query q("host", "service");
+ * tcp::socket s(io_service);
+ *
+ * // ...
+ *
+ * r.async_resolve(q, resolve_handler);
+ *
+ * // ...
+ *
+ * void resolve_handler(
+ *     const boost::system::error_code& ec,
+ *     tcp::resolver::iterator i)
+ * {
+ *   if (!ec)
+ *   {
+ *     tcp::resolver::iterator end;
+ *     boost::asio::async_connect(s, i, end, connect_handler);
+ *   }
+ * }
+ *
+ * // ...
+ *
+ * void connect_handler(
+ *     const boost::system::error_code& ec,
+ *     tcp::resolver::iterator i)
+ * {
+ *   // ...
+ * } @endcode
+ */
+template <typename Protocol, typename SocketService,
+    typename Iterator, typename ComposedConnectHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ComposedConnectHandler,
+    void (boost::system::error_code, Iterator))
+async_connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, Iterator end,
+    BOOST_ASIO_MOVE_ARG(ComposedConnectHandler) handler);
+
+/// Asynchronously establishes a socket connection by trying each endpoint in a
+/// sequence.
+/**
+ * This function attempts to connect a socket to one of a sequence of
+ * endpoints. It does this by repeated calls to the socket's @c async_connect
+ * member function, once for each endpoint in the sequence, until a connection
+ * is successfully established.
+ *
+ * @param s The socket to be connected. If the socket is already open, it will
+ * be closed.
+ *
+ * @param begin An iterator pointing to the start of a sequence of endpoints.
+ *
+ * @param connect_condition A function object that is called prior to each
+ * connection attempt. The signature of the function object must be:
+ * @code Iterator connect_condition(
+ *     const boost::system::error_code& ec,
+ *     Iterator next); @endcode
+ * The @c ec parameter contains the result from the most recent connect
+ * operation. Before the first connection attempt, @c ec is always set to
+ * indicate success. The @c next parameter is an iterator pointing to the next
+ * endpoint to be tried. The function object should return the next iterator,
+ * but is permitted to return a different iterator so that endpoints may be
+ * skipped. The implementation guarantees that the function object will never
+ * be called with the end iterator.
+ *
+ * @param handler The handler to be called when the connect operation
+ * completes. Copies will be made of the handler as required. The function
+ * signature of the handler must be:
+ * @code void handler(
+ *   // Result of operation. if the sequence is empty, set to
+ *   // boost::asio::error::not_found. Otherwise, contains the
+ *   // error from the last connection attempt.
+ *   const boost::system::error_code& error,
+ *
+ *   // On success, an iterator denoting the successfully
+ *   // connected endpoint. Otherwise, the end iterator.
+ *   Iterator iterator
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation
+ * of the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @note This overload assumes that a default constructed object of type @c
+ * Iterator represents the end of the sequence. This is a valid assumption for
+ * iterator types such as @c boost::asio::ip::tcp::resolver::iterator.
+ *
+ * @par Example
+ * The following connect condition function object can be used to output
+ * information about the individual connection attempts:
+ * @code struct my_connect_condition
+ * {
+ *   template <typename Iterator>
+ *   Iterator operator()(
+ *       const boost::system::error_code& ec,
+ *       Iterator next)
+ *   {
+ *     if (ec) std::cout << "Error: " << ec.message() << std::endl;
+ *     std::cout << "Trying: " << next->endpoint() << std::endl;
+ *     return next;
+ *   }
+ * }; @endcode
+ * It would be used with the boost::asio::connect function as follows:
+ * @code tcp::resolver r(io_service);
+ * tcp::resolver::query q("host", "service");
+ * tcp::socket s(io_service);
+ *
+ * // ...
+ *
+ * r.async_resolve(q, resolve_handler);
+ *
+ * // ...
+ *
+ * void resolve_handler(
+ *     const boost::system::error_code& ec,
+ *     tcp::resolver::iterator i)
+ * {
+ *   if (!ec)
+ *   {
+ *     boost::asio::async_connect(s, i,
+ *         my_connect_condition(),
+ *         connect_handler);
+ *   }
+ * }
+ *
+ * // ...
+ *
+ * void connect_handler(
+ *     const boost::system::error_code& ec,
+ *     tcp::resolver::iterator i)
+ * {
+ *   if (ec)
+ *   {
+ *     // An error occurred.
+ *   }
+ *   else
+ *   {
+ *     std::cout << "Connected to: " << i->endpoint() << std::endl;
+ *   }
+ * } @endcode
+ */
+template <typename Protocol, typename SocketService, typename Iterator,
+    typename ConnectCondition, typename ComposedConnectHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ComposedConnectHandler,
+    void (boost::system::error_code, Iterator))
+async_connect(basic_socket<Protocol, SocketService>& s, Iterator begin,
+    ConnectCondition connect_condition,
+    BOOST_ASIO_MOVE_ARG(ComposedConnectHandler) handler);
+
+/// Asynchronously establishes a socket connection by trying each endpoint in a
+/// sequence.
+/**
+ * This function attempts to connect a socket to one of a sequence of
+ * endpoints. It does this by repeated calls to the socket's @c async_connect
+ * member function, once for each endpoint in the sequence, until a connection
+ * is successfully established.
+ *
+ * @param s The socket to be connected. If the socket is already open, it will
+ * be closed.
+ *
+ * @param begin An iterator pointing to the start of a sequence of endpoints.
+ *
+ * @param end An iterator pointing to the end of a sequence of endpoints.
+ *
+ * @param connect_condition A function object that is called prior to each
+ * connection attempt. The signature of the function object must be:
+ * @code Iterator connect_condition(
+ *     const boost::system::error_code& ec,
+ *     Iterator next); @endcode
+ * The @c ec parameter contains the result from the most recent connect
+ * operation. Before the first connection attempt, @c ec is always set to
+ * indicate success. The @c next parameter is an iterator pointing to the next
+ * endpoint to be tried. The function object should return the next iterator,
+ * but is permitted to return a different iterator so that endpoints may be
+ * skipped. The implementation guarantees that the function object will never
+ * be called with the end iterator.
+ *
+ * @param handler The handler to be called when the connect operation
+ * completes. Copies will be made of the handler as required. The function
+ * signature of the handler must be:
+ * @code void handler(
+ *   // Result of operation. if the sequence is empty, set to
+ *   // boost::asio::error::not_found. Otherwise, contains the
+ *   // error from the last connection attempt.
+ *   const boost::system::error_code& error,
+ *
+ *   // On success, an iterator denoting the successfully
+ *   // connected endpoint. Otherwise, the end iterator.
+ *   Iterator iterator
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation
+ * of the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @par Example
+ * The following connect condition function object can be used to output
+ * information about the individual connection attempts:
+ * @code struct my_connect_condition
+ * {
+ *   template <typename Iterator>
+ *   Iterator operator()(
+ *       const boost::system::error_code& ec,
+ *       Iterator next)
+ *   {
+ *     if (ec) std::cout << "Error: " << ec.message() << std::endl;
+ *     std::cout << "Trying: " << next->endpoint() << std::endl;
+ *     return next;
+ *   }
+ * }; @endcode
+ * It would be used with the boost::asio::connect function as follows:
+ * @code tcp::resolver r(io_service);
+ * tcp::resolver::query q("host", "service");
+ * tcp::socket s(io_service);
+ *
+ * // ...
+ *
+ * r.async_resolve(q, resolve_handler);
+ *
+ * // ...
+ *
+ * void resolve_handler(
+ *     const boost::system::error_code& ec,
+ *     tcp::resolver::iterator i)
+ * {
+ *   if (!ec)
+ *   {
+ *     tcp::resolver::iterator end;
+ *     boost::asio::async_connect(s, i, end,
+ *         my_connect_condition(),
+ *         connect_handler);
+ *   }
+ * }
+ *
+ * // ...
+ *
+ * void connect_handler(
+ *     const boost::system::error_code& ec,
+ *     tcp::resolver::iterator i)
+ * {
+ *   if (ec)
+ *   {
+ *     // An error occurred.
+ *   }
+ *   else
+ *   {
+ *     std::cout << "Connected to: " << i->endpoint() << std::endl;
+ *   }
+ * } @endcode
+ */
+template <typename Protocol, typename SocketService, typename Iterator,
+    typename ConnectCondition, typename ComposedConnectHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ComposedConnectHandler,
+    void (boost::system::error_code, Iterator))
+async_connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, Iterator end, ConnectCondition connect_condition,
+    BOOST_ASIO_MOVE_ARG(ComposedConnectHandler) handler);
+
+/*@}*/
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/impl/connect.hpp>
+
+#endif
diff --git a/ext/patches/boost/asio/coroutine.hpp b/ext/patches/boost/asio/coroutine.hpp
new file mode 100644
index 0000000..3f803b8
--- /dev/null
+++ b/ext/patches/boost/asio/coroutine.hpp
@@ -0,0 +1,330 @@
+//
+// coroutine.hpp
+// ~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_COROUTINE_HPP
+#define BOOST_ASIO_COROUTINE_HPP
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class coroutine_ref;
+
+} // namespace detail
+
+/// Provides support for implementing stackless coroutines.
+/**
+ * The @c coroutine class may be used to implement stackless coroutines. The
+ * class itself is used to store the current state of the coroutine.
+ *
+ * Coroutines are copy-constructible and assignable, and the space overhead is
+ * a single int. They can be used as a base class:
+ *
+ * @code class session : coroutine
+ * {
+ *   ...
+ * }; @endcode
+ *
+ * or as a data member:
+ *
+ * @code class session
+ * {
+ *   ...
+ *   coroutine coro_;
+ * }; @endcode
+ *
+ * or even bound in as a function argument using lambdas or @c bind(). The
+ * important thing is that as the application maintains a copy of the object
+ * for as long as the coroutine must be kept alive.
+ *
+ * @par Pseudo-keywords
+ *
+ * A coroutine is used in conjunction with certain "pseudo-keywords", which
+ * are implemented as macros. These macros are defined by a header file:
+ *
+ * @code #include <boost/asio/yield.hpp>@endcode
+ *
+ * and may conversely be undefined as follows:
+ *
+ * @code #include <boost/asio/unyield.hpp>@endcode
+ *
+ * <b>reenter</b>
+ *
+ * The @c reenter macro is used to define the body of a coroutine. It takes a
+ * single argument: a pointer or reference to a coroutine object. For example,
+ * if the base class is a coroutine object you may write:
+ *
+ * @code reenter (this)
+ * {
+ *   ... coroutine body ...
+ * } @endcode
+ *
+ * and if a data member or other variable you can write:
+ *
+ * @code reenter (coro_)
+ * {
+ *   ... coroutine body ...
+ * } @endcode
+ *
+ * When @c reenter is executed at runtime, control jumps to the location of the
+ * last @c yield or @c fork.
+ *
+ * The coroutine body may also be a single statement, such as:
+ *
+ * @code reenter (this) for (;;)
+ * {
+ *   ...
+ * } @endcode
+ *
+ * @b Limitation: The @c reenter macro is implemented using a switch. This
+ * means that you must take care when using local variables within the
+ * coroutine body. The local variable is not allowed in a position where
+ * reentering the coroutine could bypass the variable definition.
+ *
+ * <b>yield <em>statement</em></b>
+ *
+ * This form of the @c yield keyword is often used with asynchronous operations:
+ *
+ * @code yield socket_->async_read_some(buffer(*buffer_), *this); @endcode
+ *
+ * This divides into four logical steps:
+ *
+ * @li @c yield saves the current state of the coroutine.
+ * @li The statement initiates the asynchronous operation.
+ * @li The resume point is defined immediately following the statement.
+ * @li Control is transferred to the end of the coroutine body.
+ *
+ * When the asynchronous operation completes, the function object is invoked
+ * and @c reenter causes control to transfer to the resume point. It is
+ * important to remember to carry the coroutine state forward with the
+ * asynchronous operation. In the above snippet, the current class is a
+ * function object object with a coroutine object as base class or data member.
+ *
+ * The statement may also be a compound statement, and this permits us to
+ * define local variables with limited scope:
+ *
+ * @code yield
+ * {
+ *   mutable_buffers_1 b = buffer(*buffer_);
+ *   socket_->async_read_some(b, *this);
+ * } @endcode
+ *
+ * <b>yield return <em>expression</em> ;</b>
+ *
+ * This form of @c yield is often used in generators or coroutine-based parsers.
+ * For example, the function object:
+ *
+ * @code struct interleave : coroutine
+ * {
+ *   istream& is1;
+ *   istream& is2;
+ *   char operator()(char c)
+ *   {
+ *     reenter (this) for (;;)
+ *     {
+ *       yield return is1.get();
+ *       yield return is2.get();
+ *     }
+ *   }
+ * }; @endcode
+ *
+ * defines a trivial coroutine that interleaves the characters from two input
+ * streams.
+ *
+ * This type of @c yield divides into three logical steps:
+ *
+ * @li @c yield saves the current state of the coroutine.
+ * @li The resume point is defined immediately following the semicolon.
+ * @li The value of the expression is returned from the function.
+ *
+ * <b>yield ;</b>
+ *
+ * This form of @c yield is equivalent to the following steps:
+ *
+ * @li @c yield saves the current state of the coroutine.
+ * @li The resume point is defined immediately following the semicolon.
+ * @li Control is transferred to the end of the coroutine body.
+ *
+ * This form might be applied when coroutines are used for cooperative
+ * threading and scheduling is explicitly managed. For example:
+ *
+ * @code struct task : coroutine
+ * {
+ *   ...
+ *   void operator()()
+ *   {
+ *     reenter (this)
+ *     {
+ *       while (... not finished ...)
+ *       {
+ *         ... do something ...
+ *         yield;
+ *         ... do some more ...
+ *         yield;
+ *       }
+ *     }
+ *   }
+ *   ...
+ * };
+ * ...
+ * task t1, t2;
+ * for (;;)
+ * {
+ *   t1();
+ *   t2();
+ * } @endcode
+ *
+ * <b>yield break ;</b>
+ *
+ * The final form of @c yield is used to explicitly terminate the coroutine.
+ * This form is comprised of two steps:
+ *
+ * @li @c yield sets the coroutine state to indicate termination.
+ * @li Control is transferred to the end of the coroutine body.
+ *
+ * Once terminated, calls to is_complete() return true and the coroutine cannot
+ * be reentered.
+ *
+ * Note that a coroutine may also be implicitly terminated if the coroutine
+ * body is exited without a yield, e.g. by return, throw or by running to the
+ * end of the body.
+ *
+ * <b>fork <em>statement</em></b>
+ *
+ * The @c fork pseudo-keyword is used when "forking" a coroutine, i.e. splitting
+ * it into two (or more) copies. One use of @c fork is in a server, where a new
+ * coroutine is created to handle each client connection:
+ * 
+ * @code reenter (this)
+ * {
+ *   do
+ *   {
+ *     socket_.reset(new tcp::socket(io_service_));
+ *     yield acceptor->async_accept(*socket_, *this);
+ *     fork server(*this)();
+ *   } while (is_parent());
+ *   ... client-specific handling follows ...
+ * } @endcode
+ * 
+ * The logical steps involved in a @c fork are:
+ * 
+ * @li @c fork saves the current state of the coroutine.
+ * @li The statement creates a copy of the coroutine and either executes it
+ *     immediately or schedules it for later execution.
+ * @li The resume point is defined immediately following the semicolon.
+ * @li For the "parent", control immediately continues from the next line.
+ *
+ * The functions is_parent() and is_child() can be used to differentiate
+ * between parent and child. You would use these functions to alter subsequent
+ * control flow.
+ *
+ * Note that @c fork doesn't do the actual forking by itself. It is the
+ * application's responsibility to create a clone of the coroutine and call it.
+ * The clone can be called immediately, as above, or scheduled for delayed
+ * execution using something like io_service::post().
+ *
+ * @par Alternate macro names
+ *
+ * If preferred, an application can use macro names that follow a more typical
+ * naming convention, rather than the pseudo-keywords. These are:
+ *
+ * @li @c BOOST_ASIO_CORO_REENTER instead of @c reenter
+ * @li @c BOOST_ASIO_CORO_YIELD instead of @c yield
+ * @li @c BOOST_ASIO_CORO_FORK instead of @c fork
+ */
+class coroutine
+{
+public:
+  /// Constructs a coroutine in its initial state.
+  coroutine() : value_(0) {}
+
+  /// Returns true if the coroutine is the child of a fork.
+  bool is_child() const { return value_ < 0; }
+
+  /// Returns true if the coroutine is the parent of a fork.
+  bool is_parent() const { return !is_child(); }
+
+  /// Returns true if the coroutine has reached its terminal state.
+  bool is_complete() const { return value_ == -1; }
+
+private:
+  friend class detail::coroutine_ref;
+  int value_;
+};
+
+
+namespace detail {
+
+class coroutine_ref
+{
+public:
+  coroutine_ref(coroutine& c) : value_(c.value_), modified_(false) {}
+  coroutine_ref(coroutine* c) : value_(c->value_), modified_(false) {}
+  ~coroutine_ref() { if (!modified_) value_ = -1; }
+  operator int() const { return value_; }
+  int& operator=(int v) { modified_ = true; return value_ = v; }
+private:
+  void operator=(const coroutine_ref&);
+  int& value_;
+  bool modified_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#define BOOST_ASIO_CORO_REENTER(c) \
+  switch (::boost::asio::detail::coroutine_ref _coro_value = c) \
+    case -1: if (_coro_value) \
+    { \
+      goto terminate_coroutine; \
+      terminate_coroutine: \
+      _coro_value = -1; \
+      goto bail_out_of_coroutine; \
+      bail_out_of_coroutine: \
+      break; \
+    } \
+    else case 0:
+
+#define BOOST_ASIO_CORO_YIELD_IMPL(n) \
+  for (_coro_value = (n);;) \
+    if (_coro_value == 0) \
+    { \
+      case (n): ; \
+      break; \
+    } \
+    else \
+      switch (_coro_value ? 0 : 1) \
+        for (;;) \
+          case -1: if (_coro_value) \
+            goto terminate_coroutine; \
+          else for (;;) \
+            case 1: if (_coro_value) \
+              goto bail_out_of_coroutine; \
+            else case 0:
+
+#define BOOST_ASIO_CORO_FORK_IMPL(n) \
+  for (_coro_value = -(n);; _coro_value = (n)) \
+    if (_coro_value == (n)) \
+    { \
+      case -(n): ; \
+      break; \
+    } \
+    else
+
+#if defined(_MSC_VER)
+# define BOOST_ASIO_CORO_YIELD BOOST_ASIO_CORO_YIELD_IMPL(__COUNTER__ + 1)
+# define BOOST_ASIO_CORO_FORK BOOST_ASIO_CORO_FORK_IMPL(__COUNTER__ + 1)
+#else // defined(_MSC_VER)
+# define BOOST_ASIO_CORO_YIELD BOOST_ASIO_CORO_YIELD_IMPL(__LINE__)
+# define BOOST_ASIO_CORO_FORK BOOST_ASIO_CORO_FORK_IMPL(__LINE__)
+#endif // defined(_MSC_VER)
+
+#endif // BOOST_ASIO_COROUTINE_HPP
diff --git a/ext/patches/boost/asio/datagram_socket_service.hpp b/ext/patches/boost/asio/datagram_socket_service.hpp
new file mode 100644
index 0000000..63f7b25
--- /dev/null
+++ b/ext/patches/boost/asio/datagram_socket_service.hpp
@@ -0,0 +1,434 @@
+//
+// datagram_socket_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DATAGRAM_SOCKET_SERVICE_HPP
+#define BOOST_ASIO_DATAGRAM_SOCKET_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/detail/type_traits.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/null_socket_service.hpp>
+#elif defined(BOOST_ASIO_HAS_IOCP)
+# include <boost/asio/detail/win_iocp_socket_service.hpp>
+#else
+# include <boost/asio/detail/reactive_socket_service.hpp>
+#endif
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Default service implementation for a datagram socket.
+template <typename Protocol>
+class datagram_socket_service
+#if defined(GENERATING_DOCUMENTATION)
+  : public boost::asio::io_service::service
+#else
+  : public boost::asio::detail::service_base<datagram_socket_service<Protocol> >
+#endif
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The unique service identifier.
+  static boost::asio::io_service::id id;
+#endif
+
+  /// The protocol type.
+  typedef Protocol protocol_type;
+
+  /// The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+private:
+  // The type of the platform-specific implementation.
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  typedef detail::null_socket_service<Protocol> service_impl_type;
+#elif defined(BOOST_ASIO_HAS_IOCP)
+  typedef detail::win_iocp_socket_service<Protocol> service_impl_type;
+#else
+  typedef detail::reactive_socket_service<Protocol> service_impl_type;
+#endif
+
+public:
+  /// The type of a datagram socket.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined implementation_type;
+#else
+  typedef typename service_impl_type::implementation_type implementation_type;
+#endif
+
+  /// (Deprecated: Use native_handle_type.) The native socket type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_type;
+#else
+  typedef typename service_impl_type::native_handle_type native_type;
+#endif
+
+  /// The native socket type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_handle_type;
+#else
+  typedef typename service_impl_type::native_handle_type native_handle_type;
+#endif
+
+  /// Construct a new datagram socket service for the specified io_service.
+  explicit datagram_socket_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<
+        datagram_socket_service<Protocol> >(io_service),
+      service_impl_(io_service)
+  {
+  }
+
+  /// Construct a new datagram socket implementation.
+  void construct(implementation_type& impl)
+  {
+    service_impl_.construct(impl);
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a new datagram socket implementation.
+  void move_construct(implementation_type& impl,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_construct(impl, other_impl);
+  }
+
+  /// Move-assign from another datagram socket implementation.
+  void move_assign(implementation_type& impl,
+      datagram_socket_service& other_service,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_assign(impl, other_service.service_impl_, other_impl);
+  }
+
+  /// Move-construct a new datagram socket implementation from another protocol
+  /// type.
+  template <typename Protocol1>
+  void converting_move_construct(implementation_type& impl,
+      typename datagram_socket_service<
+        Protocol1>::implementation_type& other_impl,
+      typename enable_if<is_convertible<
+        Protocol1, Protocol>::value>::type* = 0)
+  {
+    service_impl_.template converting_move_construct<Protocol1>(
+        impl, other_impl);
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Destroy a datagram socket implementation.
+  void destroy(implementation_type& impl)
+  {
+    service_impl_.destroy(impl);
+  }
+
+  // Open a new datagram socket implementation.
+  boost::system::error_code open(implementation_type& impl,
+      const protocol_type& protocol, boost::system::error_code& ec)
+  {
+    if (protocol.type() == BOOST_ASIO_OS_DEF(SOCK_DGRAM))
+      service_impl_.open(impl, protocol, ec);
+    else
+      ec = boost::asio::error::invalid_argument;
+    return ec;
+  }
+
+  /// Assign an existing native socket to a datagram socket.
+  boost::system::error_code assign(implementation_type& impl,
+      const protocol_type& protocol, const native_handle_type& native_socket,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.assign(impl, protocol, native_socket, ec);
+  }
+
+  /// Determine whether the socket is open.
+  bool is_open(const implementation_type& impl) const
+  {
+    return service_impl_.is_open(impl);
+  }
+
+  /// Close a datagram socket implementation.
+  boost::system::error_code close(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.close(impl, ec);
+  }
+
+  /// (Deprecated: Use native_handle().) Get the native socket implementation.
+  native_type native(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Get the native socket implementation.
+  native_handle_type native_handle(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Cancel all asynchronous operations associated with the socket.
+  boost::system::error_code cancel(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.cancel(impl, ec);
+  }
+
+  /// Determine whether the socket is at the out-of-band data mark.
+  bool at_mark(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return service_impl_.at_mark(impl, ec);
+  }
+
+  /// Determine the number of bytes available for reading.
+  std::size_t available(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return service_impl_.available(impl, ec);
+  }
+
+  // Bind the datagram socket to the specified local endpoint.
+  boost::system::error_code bind(implementation_type& impl,
+      const endpoint_type& endpoint, boost::system::error_code& ec)
+  {
+    return service_impl_.bind(impl, endpoint, ec);
+  }
+
+  /// Connect the datagram socket to the specified endpoint.
+  boost::system::error_code connect(implementation_type& impl,
+      const endpoint_type& peer_endpoint, boost::system::error_code& ec)
+  {
+    return service_impl_.connect(impl, peer_endpoint, ec);
+  }
+
+  /// Start an asynchronous connect.
+  template <typename ConnectHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ConnectHandler,
+      void (boost::system::error_code))
+  async_connect(implementation_type& impl,
+      const endpoint_type& peer_endpoint,
+      BOOST_ASIO_MOVE_ARG(ConnectHandler) handler)
+  {
+    detail::async_result_init<
+      ConnectHandler, void (boost::system::error_code)> init(
+        BOOST_ASIO_MOVE_CAST(ConnectHandler)(handler));
+
+    service_impl_.async_connect(impl, peer_endpoint, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Set a socket option.
+  template <typename SettableSocketOption>
+  boost::system::error_code set_option(implementation_type& impl,
+      const SettableSocketOption& option, boost::system::error_code& ec)
+  {
+    return service_impl_.set_option(impl, option, ec);
+  }
+
+  /// Get a socket option.
+  template <typename GettableSocketOption>
+  boost::system::error_code get_option(const implementation_type& impl,
+      GettableSocketOption& option, boost::system::error_code& ec) const
+  {
+    return service_impl_.get_option(impl, option, ec);
+  }
+
+  /// Perform an IO control command on the socket.
+  template <typename IoControlCommand>
+  boost::system::error_code io_control(implementation_type& impl,
+      IoControlCommand& command, boost::system::error_code& ec)
+  {
+    return service_impl_.io_control(impl, command, ec);
+  }
+
+  /// Gets the non-blocking mode of the socket.
+  bool non_blocking(const implementation_type& impl) const
+  {
+    return service_impl_.non_blocking(impl);
+  }
+
+  /// Sets the non-blocking mode of the socket.
+  boost::system::error_code non_blocking(implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    return service_impl_.non_blocking(impl, mode, ec);
+  }
+
+  /// Gets the non-blocking mode of the native socket implementation.
+  bool native_non_blocking(const implementation_type& impl) const
+  {
+    return service_impl_.native_non_blocking(impl);
+  }
+
+  /// Sets the non-blocking mode of the native socket implementation.
+  boost::system::error_code native_non_blocking(implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    return service_impl_.native_non_blocking(impl, mode, ec);
+  }
+
+  /// Get the local endpoint.
+  endpoint_type local_endpoint(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return service_impl_.local_endpoint(impl, ec);
+  }
+
+  /// Get the remote endpoint.
+  endpoint_type remote_endpoint(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return service_impl_.remote_endpoint(impl, ec);
+  }
+
+  /// Disable sends or receives on the socket.
+  boost::system::error_code shutdown(implementation_type& impl,
+      socket_base::shutdown_type what, boost::system::error_code& ec)
+  {
+    return service_impl_.shutdown(impl, what, ec);
+  }
+
+  /// Send the given data to the peer.
+  template <typename ConstBufferSequence>
+  std::size_t send(implementation_type& impl,
+      const ConstBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return service_impl_.send(impl, buffers, flags, ec);
+  }
+
+  /// Start an asynchronous send.
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_send(implementation_type& impl, const ConstBufferSequence& buffers,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    detail::async_result_init<
+      WriteHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+    service_impl_.async_send(impl, buffers, flags, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Send a datagram to the specified endpoint.
+  template <typename ConstBufferSequence>
+  std::size_t send_to(implementation_type& impl,
+      const ConstBufferSequence& buffers, const endpoint_type& destination,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return service_impl_.send_to(impl, buffers, destination, flags, ec);
+  }
+
+  /// Start an asynchronous send.
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_send_to(implementation_type& impl,
+      const ConstBufferSequence& buffers, const endpoint_type& destination,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    detail::async_result_init<
+      WriteHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+    service_impl_.async_send_to(impl, buffers,
+        destination, flags, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Receive some data from the peer.
+  template <typename MutableBufferSequence>
+  std::size_t receive(implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return service_impl_.receive(impl, buffers, flags, ec);
+  }
+
+  /// Start an asynchronous receive.
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive(implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    detail::async_result_init<
+      ReadHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+    service_impl_.async_receive(impl, buffers, flags, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Receive a datagram with the endpoint of the sender.
+  template <typename MutableBufferSequence>
+  std::size_t receive_from(implementation_type& impl,
+      const MutableBufferSequence& buffers, endpoint_type& sender_endpoint,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return service_impl_.receive_from(impl, buffers, sender_endpoint, flags,
+        ec);
+  }
+
+  /// Start an asynchronous receive that will get the endpoint of the sender.
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive_from(implementation_type& impl,
+      const MutableBufferSequence& buffers, endpoint_type& sender_endpoint,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    detail::async_result_init<
+      ReadHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+    service_impl_.async_receive_from(impl, buffers,
+        sender_endpoint, flags, init.handler);
+
+    return init.result.get();
+  }
+
+private:
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+    service_impl_.shutdown_service();
+  }
+
+  // The platform-specific implementation.
+  service_impl_type service_impl_;
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DATAGRAM_SOCKET_SERVICE_HPP
diff --git a/ext/patches/boost/asio/deadline_timer.hpp b/ext/patches/boost/asio/deadline_timer.hpp
new file mode 100644
index 0000000..ffbee73
--- /dev/null
+++ b/ext/patches/boost/asio/deadline_timer.hpp
@@ -0,0 +1,42 @@
+//
+// deadline_timer.hpp
+// ~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DEADLINE_TIMER_HPP
+#define BOOST_ASIO_DEADLINE_TIMER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <boost/asio/detail/socket_types.hpp> // Must come before posix_time.
+#include <boost/asio/basic_deadline_timer.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+#include <boost/date_time/posix_time/posix_time_types.hpp>
+#include <boost/asio/detail/pop_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Typedef for the typical usage of timer. Uses a UTC clock.
+typedef basic_deadline_timer<boost::posix_time::ptime> deadline_timer;
+
+} // namespace asio
+} // namespace boost
+
+#endif // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+       // || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_DEADLINE_TIMER_HPP
diff --git a/ext/patches/boost/asio/deadline_timer_service.hpp b/ext/patches/boost/asio/deadline_timer_service.hpp
new file mode 100644
index 0000000..8d9f972
--- /dev/null
+++ b/ext/patches/boost/asio/deadline_timer_service.hpp
@@ -0,0 +1,173 @@
+//
+// deadline_timer_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DEADLINE_TIMER_SERVICE_HPP
+#define BOOST_ASIO_DEADLINE_TIMER_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <cstddef>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/detail/deadline_timer_service.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/time_traits.hpp>
+#include <boost/asio/detail/timer_queue_ptime.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Default service implementation for a timer.
+template <typename TimeType,
+    typename TimeTraits = boost::asio::time_traits<TimeType> >
+class deadline_timer_service
+#if defined(GENERATING_DOCUMENTATION)
+  : public boost::asio::io_service::service
+#else
+  : public boost::asio::detail::service_base<
+      deadline_timer_service<TimeType, TimeTraits> >
+#endif
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The unique service identifier.
+  static boost::asio::io_service::id id;
+#endif
+
+  /// The time traits type.
+  typedef TimeTraits traits_type;
+
+  /// The time type.
+  typedef typename traits_type::time_type time_type;
+
+  /// The duration type.
+  typedef typename traits_type::duration_type duration_type;
+
+private:
+  // The type of the platform-specific implementation.
+  typedef detail::deadline_timer_service<traits_type> service_impl_type;
+
+public:
+  /// The implementation type of the deadline timer.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined implementation_type;
+#else
+  typedef typename service_impl_type::implementation_type implementation_type;
+#endif
+
+  /// Construct a new timer service for the specified io_service.
+  explicit deadline_timer_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<
+        deadline_timer_service<TimeType, TimeTraits> >(io_service),
+      service_impl_(io_service)
+  {
+  }
+
+  /// Construct a new timer implementation.
+  void construct(implementation_type& impl)
+  {
+    service_impl_.construct(impl);
+  }
+
+  /// Destroy a timer implementation.
+  void destroy(implementation_type& impl)
+  {
+    service_impl_.destroy(impl);
+  }
+
+  /// Cancel any asynchronous wait operations associated with the timer.
+  std::size_t cancel(implementation_type& impl, boost::system::error_code& ec)
+  {
+    return service_impl_.cancel(impl, ec);
+  }
+
+  /// Cancels one asynchronous wait operation associated with the timer.
+  std::size_t cancel_one(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.cancel_one(impl, ec);
+  }
+
+  /// Get the expiry time for the timer as an absolute time.
+  time_type expires_at(const implementation_type& impl) const
+  {
+    return service_impl_.expires_at(impl);
+  }
+
+  /// Set the expiry time for the timer as an absolute time.
+  std::size_t expires_at(implementation_type& impl,
+      const time_type& expiry_time, boost::system::error_code& ec)
+  {
+    return service_impl_.expires_at(impl, expiry_time, ec);
+  }
+
+  /// Get the expiry time for the timer relative to now.
+  duration_type expires_from_now(const implementation_type& impl) const
+  {
+    return service_impl_.expires_from_now(impl);
+  }
+
+  /// Set the expiry time for the timer relative to now.
+  std::size_t expires_from_now(implementation_type& impl,
+      const duration_type& expiry_time, boost::system::error_code& ec)
+  {
+    return service_impl_.expires_from_now(impl, expiry_time, ec);
+  }
+
+  // Perform a blocking wait on the timer.
+  void wait(implementation_type& impl, boost::system::error_code& ec)
+  {
+    service_impl_.wait(impl, ec);
+  }
+
+  // Start an asynchronous wait on the timer.
+  template <typename WaitHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WaitHandler,
+      void (boost::system::error_code))
+  async_wait(implementation_type& impl,
+      BOOST_ASIO_MOVE_ARG(WaitHandler) handler)
+  {
+    detail::async_result_init<
+      WaitHandler, void (boost::system::error_code)> init(
+        BOOST_ASIO_MOVE_CAST(WaitHandler)(handler));
+
+    service_impl_.async_wait(impl, init.handler);
+
+    return init.result.get();
+  }
+
+private:
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+    service_impl_.shutdown_service();
+  }
+
+  // The platform-specific implementation.
+  service_impl_type service_impl_;
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+       // || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_DEADLINE_TIMER_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/addressof.hpp b/ext/patches/boost/asio/detail/addressof.hpp
new file mode 100644
index 0000000..269b9b6
--- /dev/null
+++ b/ext/patches/boost/asio/detail/addressof.hpp
@@ -0,0 +1,40 @@
+//
+// detail/addressof.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_ADDRESSOF_HPP
+#define BOOST_ASIO_DETAIL_ADDRESSOF_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_STD_ADDRESSOF)
+# include <memory>
+#else // defined(BOOST_ASIO_HAS_STD_ADDRESSOF)
+# include <boost/utility/addressof.hpp>
+#endif // defined(BOOST_ASIO_HAS_STD_ADDRESSOF)
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if defined(BOOST_ASIO_HAS_STD_ADDRESSOF)
+using std::addressof;
+#else // defined(BOOST_ASIO_HAS_STD_ADDRESSOF)
+using boost::addressof;
+#endif // defined(BOOST_ASIO_HAS_STD_ADDRESSOF)
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_ADDRESSOF_HPP
diff --git a/ext/patches/boost/asio/detail/array.hpp b/ext/patches/boost/asio/detail/array.hpp
new file mode 100644
index 0000000..c921731
--- /dev/null
+++ b/ext/patches/boost/asio/detail/array.hpp
@@ -0,0 +1,40 @@
+//
+// detail/array.hpp
+// ~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_ARRAY_HPP
+#define BOOST_ASIO_DETAIL_ARRAY_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_STD_ARRAY)
+# include <array>
+#else // defined(BOOST_ASIO_HAS_STD_ARRAY)
+# include <boost/array.hpp>
+#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if defined(BOOST_ASIO_HAS_STD_ARRAY)
+using std::array;
+#else // defined(BOOST_ASIO_HAS_STD_ARRAY)
+using boost::array;
+#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_ARRAY_HPP
diff --git a/ext/patches/boost/asio/detail/array_fwd.hpp b/ext/patches/boost/asio/detail/array_fwd.hpp
new file mode 100644
index 0000000..496685a
--- /dev/null
+++ b/ext/patches/boost/asio/detail/array_fwd.hpp
@@ -0,0 +1,34 @@
+//
+// detail/array_fwd.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_ARRAY_FWD_HPP
+#define BOOST_ASIO_DETAIL_ARRAY_FWD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+namespace boost {
+
+template<class T, std::size_t N>
+class array;
+
+} // namespace boost
+
+// Standard library components can't be forward declared, so we'll have to
+// include the array header. Fortunately, it's fairly lightweight and doesn't
+// add significantly to the compile time.
+#if defined(BOOST_ASIO_HAS_STD_ARRAY)
+# include <array>
+#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
+
+#endif // BOOST_ASIO_DETAIL_ARRAY_FWD_HPP
diff --git a/ext/patches/boost/asio/detail/assert.hpp b/ext/patches/boost/asio/detail/assert.hpp
new file mode 100644
index 0000000..c9c8305
--- /dev/null
+++ b/ext/patches/boost/asio/detail/assert.hpp
@@ -0,0 +1,32 @@
+//
+// detail/assert.hpp
+// ~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_ASSERT_HPP
+#define BOOST_ASIO_DETAIL_ASSERT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_BOOST_ASSERT)
+# include <boost/assert.hpp>
+#else // defined(BOOST_ASIO_HAS_BOOST_ASSERT)
+# include <cassert>
+#endif // defined(BOOST_ASIO_HAS_BOOST_ASSERT)
+
+#if defined(BOOST_ASIO_HAS_BOOST_ASSERT)
+# define BOOST_ASIO_ASSERT(expr) BOOST_ASSERT(expr)
+#else // defined(BOOST_ASIO_HAS_BOOST_ASSERT)
+# define BOOST_ASIO_ASSERT(expr) assert(expr)
+#endif // defined(BOOST_ASIO_HAS_BOOST_ASSERT)
+
+#endif // BOOST_ASIO_DETAIL_ASSERT_HPP
diff --git a/ext/patches/boost/asio/detail/atomic_count.hpp b/ext/patches/boost/asio/detail/atomic_count.hpp
new file mode 100644
index 0000000..63069a1
--- /dev/null
+++ b/ext/patches/boost/asio/detail/atomic_count.hpp
@@ -0,0 +1,47 @@
+//
+// detail/atomic_count.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_ATOMIC_COUNT_HPP
+#define BOOST_ASIO_DETAIL_ATOMIC_COUNT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_THREADS)
+// Nothing to include.
+#elif defined(BOOST_ASIO_HAS_STD_ATOMIC)
+# include <atomic>
+#else // defined(BOOST_ASIO_HAS_STD_ATOMIC)
+# include <boost/detail/atomic_count.hpp>
+#endif // defined(BOOST_ASIO_HAS_STD_ATOMIC)
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if !defined(BOOST_ASIO_HAS_THREADS)
+typedef long atomic_count;
+inline void increment(atomic_count& a, long b) { a += b; }
+#elif defined(BOOST_ASIO_HAS_STD_ATOMIC)
+typedef std::atomic<long> atomic_count;
+inline void increment(atomic_count& a, long b) { a += b; }
+#else // defined(BOOST_ASIO_HAS_STD_ATOMIC)
+typedef boost::detail::atomic_count atomic_count;
+inline void increment(atomic_count& a, long b) { while (b > 0) ++a, --b; }
+#endif // defined(BOOST_ASIO_HAS_STD_ATOMIC)
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_ATOMIC_COUNT_HPP
diff --git a/ext/patches/boost/asio/detail/base_from_completion_cond.hpp b/ext/patches/boost/asio/detail/base_from_completion_cond.hpp
new file mode 100644
index 0000000..e175045
--- /dev/null
+++ b/ext/patches/boost/asio/detail/base_from_completion_cond.hpp
@@ -0,0 +1,70 @@
+//
+// detail/base_from_completion_cond.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_BASE_FROM_COMPLETION_COND_HPP
+#define BOOST_ASIO_DETAIL_BASE_FROM_COMPLETION_COND_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/completion_condition.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename CompletionCondition>
+class base_from_completion_cond
+{
+protected:
+  explicit base_from_completion_cond(CompletionCondition completion_condition)
+    : completion_condition_(completion_condition)
+  {
+  }
+
+  std::size_t check_for_completion(
+      const boost::system::error_code& ec,
+      std::size_t total_transferred)
+  {
+    return detail::adapt_completion_condition_result(
+        completion_condition_(ec, total_transferred));
+  }
+
+private:
+  CompletionCondition completion_condition_;
+};
+
+template <>
+class base_from_completion_cond<transfer_all_t>
+{
+protected:
+  explicit base_from_completion_cond(transfer_all_t)
+  {
+  }
+
+  static std::size_t check_for_completion(
+      const boost::system::error_code& ec,
+      std::size_t total_transferred)
+  {
+    return transfer_all_t()(ec, total_transferred);
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_BASE_FROM_COMPLETION_COND_HPP
diff --git a/ext/patches/boost/asio/detail/bind_handler.hpp b/ext/patches/boost/asio/detail/bind_handler.hpp
new file mode 100644
index 0000000..4fea5a7
--- /dev/null
+++ b/ext/patches/boost/asio/detail/bind_handler.hpp
@@ -0,0 +1,491 @@
+//
+// detail/bind_handler.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_BIND_HANDLER_HPP
+#define BOOST_ASIO_DETAIL_BIND_HANDLER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_cont_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Handler, typename Arg1>
+class binder1
+{
+public:
+  binder1(const Handler& handler, const Arg1& arg1)
+    : handler_(handler),
+      arg1_(arg1)
+  {
+  }
+
+  binder1(Handler& handler, const Arg1& arg1)
+    : handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
+      arg1_(arg1)
+  {
+  }
+
+  void operator()()
+  {
+    handler_(static_cast<const Arg1&>(arg1_));
+  }
+
+  void operator()() const
+  {
+    handler_(arg1_);
+  }
+
+//private:
+  Handler handler_;
+  Arg1 arg1_;
+};
+
+template <typename Handler, typename Arg1>
+inline void* asio_handler_allocate(std::size_t size,
+    binder1<Handler, Arg1>* this_handler)
+{
+  return boost_asio_handler_alloc_helpers::allocate(
+      size, this_handler->handler_);
+}
+
+template <typename Handler, typename Arg1>
+inline void asio_handler_deallocate(void* pointer, std::size_t size,
+    binder1<Handler, Arg1>* this_handler)
+{
+  boost_asio_handler_alloc_helpers::deallocate(
+      pointer, size, this_handler->handler_);
+}
+
+template <typename Handler, typename Arg1>
+inline bool asio_handler_is_continuation(
+    binder1<Handler, Arg1>* this_handler)
+{
+  return boost_asio_handler_cont_helpers::is_continuation(
+      this_handler->handler_);
+}
+
+template <typename Function, typename Handler, typename Arg1>
+inline void asio_handler_invoke(Function& function,
+    binder1<Handler, Arg1>* this_handler)
+{
+  boost_asio_handler_invoke_helpers::invoke(
+      function, this_handler->handler_);
+}
+
+template <typename Function, typename Handler, typename Arg1>
+inline void asio_handler_invoke(const Function& function,
+    binder1<Handler, Arg1>* this_handler)
+{
+  boost_asio_handler_invoke_helpers::invoke(
+      function, this_handler->handler_);
+}
+
+template <typename Handler, typename Arg1>
+inline binder1<Handler, Arg1> bind_handler(Handler handler,
+    const Arg1& arg1)
+{
+  return binder1<Handler, Arg1>(handler, arg1);
+}
+
+template <typename Handler, typename Arg1, typename Arg2>
+class binder2
+{
+public:
+  binder2(const Handler& handler, const Arg1& arg1, const Arg2& arg2)
+    : handler_(handler),
+      arg1_(arg1),
+      arg2_(arg2)
+  {
+  }
+
+  binder2(Handler& handler, const Arg1& arg1, const Arg2& arg2)
+    : handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
+      arg1_(arg1),
+      arg2_(arg2)
+  {
+  }
+
+  void operator()()
+  {
+    handler_(static_cast<const Arg1&>(arg1_),
+        static_cast<const Arg2&>(arg2_));
+  }
+
+  void operator()() const
+  {
+    handler_(arg1_, arg2_);
+  }
+
+//private:
+  Handler handler_;
+  Arg1 arg1_;
+  Arg2 arg2_;
+};
+
+template <typename Handler, typename Arg1, typename Arg2>
+inline void* asio_handler_allocate(std::size_t size,
+    binder2<Handler, Arg1, Arg2>* this_handler)
+{
+  return boost_asio_handler_alloc_helpers::allocate(
+      size, this_handler->handler_);
+}
+
+template <typename Handler, typename Arg1, typename Arg2>
+inline void asio_handler_deallocate(void* pointer, std::size_t size,
+    binder2<Handler, Arg1, Arg2>* this_handler)
+{
+  boost_asio_handler_alloc_helpers::deallocate(
+      pointer, size, this_handler->handler_);
+}
+
+template <typename Handler, typename Arg1, typename Arg2>
+inline bool asio_handler_is_continuation(
+    binder2<Handler, Arg1, Arg2>* this_handler)
+{
+  return boost_asio_handler_cont_helpers::is_continuation(
+      this_handler->handler_);
+}
+
+template <typename Function, typename Handler, typename Arg1, typename Arg2>
+inline void asio_handler_invoke(Function& function,
+    binder2<Handler, Arg1, Arg2>* this_handler)
+{
+  boost_asio_handler_invoke_helpers::invoke(
+      function, this_handler->handler_);
+}
+
+template <typename Function, typename Handler, typename Arg1, typename Arg2>
+inline void asio_handler_invoke(const Function& function,
+    binder2<Handler, Arg1, Arg2>* this_handler)
+{
+  boost_asio_handler_invoke_helpers::invoke(
+      function, this_handler->handler_);
+}
+
+template <typename Handler, typename Arg1, typename Arg2>
+inline binder2<Handler, Arg1, Arg2> bind_handler(Handler handler,
+    const Arg1& arg1, const Arg2& arg2)
+{
+  return binder2<Handler, Arg1, Arg2>(handler, arg1, arg2);
+}
+
+template <typename Handler, typename Arg1, typename Arg2, typename Arg3>
+class binder3
+{
+public:
+  binder3(const Handler& handler, const Arg1& arg1, const Arg2& arg2,
+      const Arg3& arg3)
+    : handler_(handler),
+      arg1_(arg1),
+      arg2_(arg2),
+      arg3_(arg3)
+  {
+  }
+
+  binder3(Handler& handler, const Arg1& arg1, const Arg2& arg2,
+      const Arg3& arg3)
+    : handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
+      arg1_(arg1),
+      arg2_(arg2),
+      arg3_(arg3)
+  {
+  }
+
+  void operator()()
+  {
+    handler_(static_cast<const Arg1&>(arg1_),
+        static_cast<const Arg2&>(arg2_),
+        static_cast<const Arg3&>(arg3_));
+  }
+
+  void operator()() const
+  {
+    handler_(arg1_, arg2_, arg3_);
+  }
+
+//private:
+  Handler handler_;
+  Arg1 arg1_;
+  Arg2 arg2_;
+  Arg3 arg3_;
+};
+
+template <typename Handler, typename Arg1, typename Arg2, typename Arg3>
+inline void* asio_handler_allocate(std::size_t size,
+    binder3<Handler, Arg1, Arg2, Arg3>* this_handler)
+{
+  return boost_asio_handler_alloc_helpers::allocate(
+      size, this_handler->handler_);
+}
+
+template <typename Handler, typename Arg1, typename Arg2, typename Arg3>
+inline void asio_handler_deallocate(void* pointer, std::size_t size,
+    binder3<Handler, Arg1, Arg2, Arg3>* this_handler)
+{
+  boost_asio_handler_alloc_helpers::deallocate(
+      pointer, size, this_handler->handler_);
+}
+
+template <typename Handler, typename Arg1, typename Arg2, typename Arg3>
+inline bool asio_handler_is_continuation(
+    binder3<Handler, Arg1, Arg2, Arg3>* this_handler)
+{
+  return boost_asio_handler_cont_helpers::is_continuation(
+      this_handler->handler_);
+}
+
+template <typename Function, typename Handler, typename Arg1, typename Arg2,
+    typename Arg3>
+inline void asio_handler_invoke(Function& function,
+    binder3<Handler, Arg1, Arg2, Arg3>* this_handler)
+{
+  boost_asio_handler_invoke_helpers::invoke(
+      function, this_handler->handler_);
+}
+
+template <typename Function, typename Handler, typename Arg1, typename Arg2,
+    typename Arg3>
+inline void asio_handler_invoke(const Function& function,
+    binder3<Handler, Arg1, Arg2, Arg3>* this_handler)
+{
+  boost_asio_handler_invoke_helpers::invoke(
+      function, this_handler->handler_);
+}
+
+template <typename Handler, typename Arg1, typename Arg2, typename Arg3>
+inline binder3<Handler, Arg1, Arg2, Arg3> bind_handler(Handler handler,
+    const Arg1& arg1, const Arg2& arg2, const Arg3& arg3)
+{
+  return binder3<Handler, Arg1, Arg2, Arg3>(handler, arg1, arg2, arg3);
+}
+
+template <typename Handler, typename Arg1, typename Arg2, typename Arg3,
+    typename Arg4>
+class binder4
+{
+public:
+  binder4(const Handler& handler, const Arg1& arg1, const Arg2& arg2,
+      const Arg3& arg3, const Arg4& arg4)
+    : handler_(handler),
+      arg1_(arg1),
+      arg2_(arg2),
+      arg3_(arg3),
+      arg4_(arg4)
+  {
+  }
+
+  binder4(Handler& handler, const Arg1& arg1, const Arg2& arg2,
+      const Arg3& arg3, const Arg4& arg4)
+    : handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
+      arg1_(arg1),
+      arg2_(arg2),
+      arg3_(arg3),
+      arg4_(arg4)
+  {
+  }
+
+  void operator()()
+  {
+    handler_(static_cast<const Arg1&>(arg1_),
+        static_cast<const Arg2&>(arg2_),
+        static_cast<const Arg3&>(arg3_),
+        static_cast<const Arg4&>(arg4_));
+  }
+
+  void operator()() const
+  {
+    handler_(arg1_, arg2_, arg3_, arg4_);
+  }
+
+//private:
+  Handler handler_;
+  Arg1 arg1_;
+  Arg2 arg2_;
+  Arg3 arg3_;
+  Arg4 arg4_;
+};
+
+template <typename Handler, typename Arg1, typename Arg2, typename Arg3,
+    typename Arg4>
+inline void* asio_handler_allocate(std::size_t size,
+    binder4<Handler, Arg1, Arg2, Arg3, Arg4>* this_handler)
+{
+  return boost_asio_handler_alloc_helpers::allocate(
+      size, this_handler->handler_);
+}
+
+template <typename Handler, typename Arg1, typename Arg2, typename Arg3,
+    typename Arg4>
+inline void asio_handler_deallocate(void* pointer, std::size_t size,
+    binder4<Handler, Arg1, Arg2, Arg3, Arg4>* this_handler)
+{
+  boost_asio_handler_alloc_helpers::deallocate(
+      pointer, size, this_handler->handler_);
+}
+
+template <typename Handler, typename Arg1, typename Arg2, typename Arg3,
+    typename Arg4>
+inline bool asio_handler_is_continuation(
+    binder4<Handler, Arg1, Arg2, Arg3, Arg4>* this_handler)
+{
+  return boost_asio_handler_cont_helpers::is_continuation(
+      this_handler->handler_);
+}
+
+template <typename Function, typename Handler, typename Arg1, typename Arg2,
+    typename Arg3, typename Arg4>
+inline void asio_handler_invoke(Function& function,
+    binder4<Handler, Arg1, Arg2, Arg3, Arg4>* this_handler)
+{
+  boost_asio_handler_invoke_helpers::invoke(
+      function, this_handler->handler_);
+}
+
+template <typename Function, typename Handler, typename Arg1, typename Arg2,
+    typename Arg3, typename Arg4>
+inline void asio_handler_invoke(const Function& function,
+    binder4<Handler, Arg1, Arg2, Arg3, Arg4>* this_handler)
+{
+  boost_asio_handler_invoke_helpers::invoke(
+      function, this_handler->handler_);
+}
+
+template <typename Handler, typename Arg1, typename Arg2, typename Arg3,
+    typename Arg4>
+inline binder4<Handler, Arg1, Arg2, Arg3, Arg4> bind_handler(
+    Handler handler, const Arg1& arg1, const Arg2& arg2,
+    const Arg3& arg3, const Arg4& arg4)
+{
+  return binder4<Handler, Arg1, Arg2, Arg3, Arg4>(handler, arg1, arg2, arg3,
+      arg4);
+}
+
+template <typename Handler, typename Arg1, typename Arg2, typename Arg3,
+    typename Arg4, typename Arg5>
+class binder5
+{
+public:
+  binder5(const Handler& handler, const Arg1& arg1, const Arg2& arg2,
+      const Arg3& arg3, const Arg4& arg4, const Arg5& arg5)
+    : handler_(handler),
+      arg1_(arg1),
+      arg2_(arg2),
+      arg3_(arg3),
+      arg4_(arg4),
+      arg5_(arg5)
+  {
+  }
+
+  binder5(Handler& handler, const Arg1& arg1, const Arg2& arg2,
+      const Arg3& arg3, const Arg4& arg4, const Arg5& arg5)
+    : handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
+      arg1_(arg1),
+      arg2_(arg2),
+      arg3_(arg3),
+      arg4_(arg4),
+      arg5_(arg5)
+  {
+  }
+
+  void operator()()
+  {
+    handler_(static_cast<const Arg1&>(arg1_),
+        static_cast<const Arg2&>(arg2_),
+        static_cast<const Arg3&>(arg3_),
+        static_cast<const Arg4&>(arg4_),
+        static_cast<const Arg5&>(arg5_));
+  }
+
+  void operator()() const
+  {
+    handler_(arg1_, arg2_, arg3_, arg4_, arg5_);
+  }
+
+//private:
+  Handler handler_;
+  Arg1 arg1_;
+  Arg2 arg2_;
+  Arg3 arg3_;
+  Arg4 arg4_;
+  Arg5 arg5_;
+};
+
+template <typename Handler, typename Arg1, typename Arg2, typename Arg3,
+    typename Arg4, typename Arg5>
+inline void* asio_handler_allocate(std::size_t size,
+    binder5<Handler, Arg1, Arg2, Arg3, Arg4, Arg5>* this_handler)
+{
+  return boost_asio_handler_alloc_helpers::allocate(
+      size, this_handler->handler_);
+}
+
+template <typename Handler, typename Arg1, typename Arg2, typename Arg3,
+    typename Arg4, typename Arg5>
+inline void asio_handler_deallocate(void* pointer, std::size_t size,
+    binder5<Handler, Arg1, Arg2, Arg3, Arg4, Arg5>* this_handler)
+{
+  boost_asio_handler_alloc_helpers::deallocate(
+      pointer, size, this_handler->handler_);
+}
+
+template <typename Handler, typename Arg1, typename Arg2, typename Arg3,
+    typename Arg4, typename Arg5>
+inline bool asio_handler_is_continuation(
+    binder5<Handler, Arg1, Arg2, Arg3, Arg4, Arg5>* this_handler)
+{
+  return boost_asio_handler_cont_helpers::is_continuation(
+      this_handler->handler_);
+}
+
+template <typename Function, typename Handler, typename Arg1, typename Arg2,
+    typename Arg3, typename Arg4, typename Arg5>
+inline void asio_handler_invoke(Function& function,
+    binder5<Handler, Arg1, Arg2, Arg3, Arg4, Arg5>* this_handler)
+{
+  boost_asio_handler_invoke_helpers::invoke(
+      function, this_handler->handler_);
+}
+
+template <typename Function, typename Handler, typename Arg1, typename Arg2,
+    typename Arg3, typename Arg4, typename Arg5>
+inline void asio_handler_invoke(const Function& function,
+    binder5<Handler, Arg1, Arg2, Arg3, Arg4, Arg5>* this_handler)
+{
+  boost_asio_handler_invoke_helpers::invoke(
+      function, this_handler->handler_);
+}
+
+template <typename Handler, typename Arg1, typename Arg2, typename Arg3,
+    typename Arg4, typename Arg5>
+inline binder5<Handler, Arg1, Arg2, Arg3, Arg4, Arg5> bind_handler(
+    Handler handler, const Arg1& arg1, const Arg2& arg2,
+    const Arg3& arg3, const Arg4& arg4, const Arg5& arg5)
+{
+  return binder5<Handler, Arg1, Arg2, Arg3, Arg4, Arg5>(handler, arg1, arg2,
+      arg3, arg4, arg5);
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_BIND_HANDLER_HPP
diff --git a/ext/patches/boost/asio/detail/buffer_resize_guard.hpp b/ext/patches/boost/asio/detail/buffer_resize_guard.hpp
new file mode 100644
index 0000000..daa033c
--- /dev/null
+++ b/ext/patches/boost/asio/detail/buffer_resize_guard.hpp
@@ -0,0 +1,68 @@
+//
+// detail/buffer_resize_guard.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_BUFFER_RESIZE_GUARD_HPP
+#define BOOST_ASIO_DETAIL_BUFFER_RESIZE_GUARD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/limits.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+// Helper class to manage buffer resizing in an exception safe way.
+template <typename Buffer>
+class buffer_resize_guard
+{
+public:
+  // Constructor.
+  buffer_resize_guard(Buffer& buffer)
+    : buffer_(buffer),
+      old_size_(buffer.size())
+  {
+  }
+
+  // Destructor rolls back the buffer resize unless commit was called.
+  ~buffer_resize_guard()
+  {
+    if (old_size_ != (std::numeric_limits<size_t>::max)())
+    {
+      buffer_.resize(old_size_);
+    }
+  }
+
+  // Commit the resize transaction.
+  void commit()
+  {
+    old_size_ = (std::numeric_limits<size_t>::max)();
+  }
+
+private:
+  // The buffer being managed.
+  Buffer& buffer_;
+
+  // The size of the buffer at the time the guard was constructed.
+  size_t old_size_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_BUFFER_RESIZE_GUARD_HPP
diff --git a/ext/patches/boost/asio/detail/buffer_sequence_adapter.hpp b/ext/patches/boost/asio/detail/buffer_sequence_adapter.hpp
new file mode 100644
index 0000000..2a0cbde
--- /dev/null
+++ b/ext/patches/boost/asio/detail/buffer_sequence_adapter.hpp
@@ -0,0 +1,385 @@
+//
+// detail/buffer_sequence_adapter.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_BUFFER_SEQUENCE_ADAPTER_HPP
+#define BOOST_ASIO_DETAIL_BUFFER_SEQUENCE_ADAPTER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/detail/array_fwd.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class buffer_sequence_adapter_base
+{
+protected:
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  // The maximum number of buffers to support in a single operation.
+  enum { max_buffers = 1 };
+
+  typedef Windows::Storage::Streams::IBuffer^ native_buffer_type;
+
+  BOOST_ASIO_DECL static void init_native_buffer(
+      native_buffer_type& buf,
+      const boost::asio::mutable_buffer& buffer);
+
+  BOOST_ASIO_DECL static void init_native_buffer(
+      native_buffer_type& buf,
+      const boost::asio::const_buffer& buffer);
+#elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  // The maximum number of buffers to support in a single operation.
+  enum { max_buffers = 64 < max_iov_len ? 64 : max_iov_len };
+
+  typedef WSABUF native_buffer_type;
+
+  static void init_native_buffer(WSABUF& buf,
+      const boost::asio::mutable_buffer& buffer)
+  {
+    buf.buf = boost::asio::buffer_cast<char*>(buffer);
+    buf.len = static_cast<ULONG>(boost::asio::buffer_size(buffer));
+  }
+
+  static void init_native_buffer(WSABUF& buf,
+      const boost::asio::const_buffer& buffer)
+  {
+    buf.buf = const_cast<char*>(boost::asio::buffer_cast<const char*>(buffer));
+    buf.len = static_cast<ULONG>(boost::asio::buffer_size(buffer));
+  }
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  // The maximum number of buffers to support in a single operation.
+  enum { max_buffers = 64 < max_iov_len ? 64 : max_iov_len };
+
+  typedef iovec native_buffer_type;
+
+  static void init_iov_base(void*& base, void* addr)
+  {
+    base = addr;
+  }
+
+  template <typename T>
+  static void init_iov_base(T& base, void* addr)
+  {
+    base = static_cast<T>(addr);
+  }
+
+  static void init_native_buffer(iovec& iov,
+      const boost::asio::mutable_buffer& buffer)
+  {
+    init_iov_base(iov.iov_base, boost::asio::buffer_cast<void*>(buffer));
+    iov.iov_len = boost::asio::buffer_size(buffer);
+  }
+
+  static void init_native_buffer(iovec& iov,
+      const boost::asio::const_buffer& buffer)
+  {
+    init_iov_base(iov.iov_base, const_cast<void*>(
+          boost::asio::buffer_cast<const void*>(buffer)));
+    iov.iov_len = boost::asio::buffer_size(buffer);
+  }
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+};
+
+// Helper class to translate buffers into the native buffer representation.
+template <typename Buffer, typename Buffers>
+class buffer_sequence_adapter
+  : buffer_sequence_adapter_base
+{
+public:
+  explicit buffer_sequence_adapter(const Buffers& buffer_sequence)
+    : count_(0), total_buffer_size_(0)
+  {
+    typename Buffers::const_iterator iter = buffer_sequence.begin();
+    typename Buffers::const_iterator end = buffer_sequence.end();
+    for (; iter != end && count_ < max_buffers; ++iter, ++count_)
+    {
+      Buffer buffer(*iter);
+      init_native_buffer(buffers_[count_], buffer);
+      total_buffer_size_ += boost::asio::buffer_size(buffer);
+    }
+  }
+
+  native_buffer_type* buffers()
+  {
+    return buffers_;
+  }
+
+  std::size_t count() const
+  {
+    return count_;
+  }
+
+  bool all_empty() const
+  {
+    return total_buffer_size_ == 0;
+  }
+
+  static bool all_empty(const Buffers& buffer_sequence)
+  {
+    typename Buffers::const_iterator iter = buffer_sequence.begin();
+    typename Buffers::const_iterator end = buffer_sequence.end();
+    std::size_t i = 0;
+    for (; iter != end && i < max_buffers; ++iter, ++i)
+      if (boost::asio::buffer_size(Buffer(*iter)) > 0)
+        return false;
+    return true;
+  }
+
+  static void validate(const Buffers& buffer_sequence)
+  {
+    typename Buffers::const_iterator iter = buffer_sequence.begin();
+    typename Buffers::const_iterator end = buffer_sequence.end();
+    for (; iter != end; ++iter)
+    {
+      Buffer buffer(*iter);
+      boost::asio::buffer_cast<const void*>(buffer);
+    }
+  }
+
+  static Buffer first(const Buffers& buffer_sequence)
+  {
+    typename Buffers::const_iterator iter = buffer_sequence.begin();
+    typename Buffers::const_iterator end = buffer_sequence.end();
+    for (; iter != end; ++iter)
+    {
+      Buffer buffer(*iter);
+      if (boost::asio::buffer_size(buffer) != 0)
+        return buffer;
+    }
+    return Buffer();
+  }
+
+private:
+  native_buffer_type buffers_[max_buffers];
+  std::size_t count_;
+  std::size_t total_buffer_size_;
+};
+
+template <typename Buffer>
+class buffer_sequence_adapter<Buffer, boost::asio::mutable_buffers_1>
+  : buffer_sequence_adapter_base
+{
+public:
+  explicit buffer_sequence_adapter(
+      const boost::asio::mutable_buffers_1& buffer_sequence)
+  {
+    init_native_buffer(buffer_, Buffer(buffer_sequence));
+    total_buffer_size_ = boost::asio::buffer_size(buffer_sequence);
+  }
+
+  native_buffer_type* buffers()
+  {
+    return &buffer_;
+  }
+
+  std::size_t count() const
+  {
+    return 1;
+  }
+
+  bool all_empty() const
+  {
+    return total_buffer_size_ == 0;
+  }
+
+  static bool all_empty(const boost::asio::mutable_buffers_1& buffer_sequence)
+  {
+    return boost::asio::buffer_size(buffer_sequence) == 0;
+  }
+
+  static void validate(const boost::asio::mutable_buffers_1& buffer_sequence)
+  {
+    boost::asio::buffer_cast<const void*>(buffer_sequence);
+  }
+
+  static Buffer first(const boost::asio::mutable_buffers_1& buffer_sequence)
+  {
+    return Buffer(buffer_sequence);
+  }
+
+private:
+  native_buffer_type buffer_;
+  std::size_t total_buffer_size_;
+};
+
+template <typename Buffer>
+class buffer_sequence_adapter<Buffer, boost::asio::const_buffers_1>
+  : buffer_sequence_adapter_base
+{
+public:
+  explicit buffer_sequence_adapter(
+      const boost::asio::const_buffers_1& buffer_sequence)
+  {
+    init_native_buffer(buffer_, Buffer(buffer_sequence));
+    total_buffer_size_ = boost::asio::buffer_size(buffer_sequence);
+  }
+
+  native_buffer_type* buffers()
+  {
+    return &buffer_;
+  }
+
+  std::size_t count() const
+  {
+    return 1;
+  }
+
+  bool all_empty() const
+  {
+    return total_buffer_size_ == 0;
+  }
+
+  static bool all_empty(const boost::asio::const_buffers_1& buffer_sequence)
+  {
+    return boost::asio::buffer_size(buffer_sequence) == 0;
+  }
+
+  static void validate(const boost::asio::const_buffers_1& buffer_sequence)
+  {
+    boost::asio::buffer_cast<const void*>(buffer_sequence);
+  }
+
+  static Buffer first(const boost::asio::const_buffers_1& buffer_sequence)
+  {
+    return Buffer(buffer_sequence);
+  }
+
+private:
+  native_buffer_type buffer_;
+  std::size_t total_buffer_size_;
+};
+
+template <typename Buffer, typename Elem>
+class buffer_sequence_adapter<Buffer, boost::array<Elem, 2> >
+  : buffer_sequence_adapter_base
+{
+public:
+  explicit buffer_sequence_adapter(
+      const boost::array<Elem, 2>& buffer_sequence)
+  {
+    init_native_buffer(buffers_[0], Buffer(buffer_sequence[0]));
+    init_native_buffer(buffers_[1], Buffer(buffer_sequence[1]));
+    total_buffer_size_ = boost::asio::buffer_size(buffer_sequence[0])
+      + boost::asio::buffer_size(buffer_sequence[1]);
+  }
+
+  native_buffer_type* buffers()
+  {
+    return buffers_;
+  }
+
+  std::size_t count() const
+  {
+    return 2;
+  }
+
+  bool all_empty() const
+  {
+    return total_buffer_size_ == 0;
+  }
+
+  static bool all_empty(const boost::array<Elem, 2>& buffer_sequence)
+  {
+    return boost::asio::buffer_size(buffer_sequence[0]) == 0
+      && boost::asio::buffer_size(buffer_sequence[1]) == 0;
+  }
+
+  static void validate(const boost::array<Elem, 2>& buffer_sequence)
+  {
+    boost::asio::buffer_cast<const void*>(buffer_sequence[0]);
+    boost::asio::buffer_cast<const void*>(buffer_sequence[1]);
+  }
+
+  static Buffer first(const boost::array<Elem, 2>& buffer_sequence)
+  {
+    return Buffer(boost::asio::buffer_size(buffer_sequence[0]) != 0
+        ? buffer_sequence[0] : buffer_sequence[1]);
+  }
+
+private:
+  native_buffer_type buffers_[2];
+  std::size_t total_buffer_size_;
+};
+
+#if defined(BOOST_ASIO_HAS_STD_ARRAY)
+
+template <typename Buffer, typename Elem>
+class buffer_sequence_adapter<Buffer, std::array<Elem, 2> >
+  : buffer_sequence_adapter_base
+{
+public:
+  explicit buffer_sequence_adapter(
+      const std::array<Elem, 2>& buffer_sequence)
+  {
+    init_native_buffer(buffers_[0], Buffer(buffer_sequence[0]));
+    init_native_buffer(buffers_[1], Buffer(buffer_sequence[1]));
+    total_buffer_size_ = boost::asio::buffer_size(buffer_sequence[0])
+      + boost::asio::buffer_size(buffer_sequence[1]);
+  }
+
+  native_buffer_type* buffers()
+  {
+    return buffers_;
+  }
+
+  std::size_t count() const
+  {
+    return 2;
+  }
+
+  bool all_empty() const
+  {
+    return total_buffer_size_ == 0;
+  }
+
+  static bool all_empty(const std::array<Elem, 2>& buffer_sequence)
+  {
+    return boost::asio::buffer_size(buffer_sequence[0]) == 0
+      && boost::asio::buffer_size(buffer_sequence[1]) == 0;
+  }
+
+  static void validate(const std::array<Elem, 2>& buffer_sequence)
+  {
+    boost::asio::buffer_cast<const void*>(buffer_sequence[0]);
+    boost::asio::buffer_cast<const void*>(buffer_sequence[1]);
+  }
+
+  static Buffer first(const std::array<Elem, 2>& buffer_sequence)
+  {
+    return Buffer(boost::asio::buffer_size(buffer_sequence[0]) != 0
+        ? buffer_sequence[0] : buffer_sequence[1]);
+  }
+
+private:
+  native_buffer_type buffers_[2];
+  std::size_t total_buffer_size_;
+};
+
+#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/buffer_sequence_adapter.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_DETAIL_BUFFER_SEQUENCE_ADAPTER_HPP
diff --git a/ext/patches/boost/asio/detail/buffered_stream_storage.hpp b/ext/patches/boost/asio/detail/buffered_stream_storage.hpp
new file mode 100644
index 0000000..f0a4b93
--- /dev/null
+++ b/ext/patches/boost/asio/detail/buffered_stream_storage.hpp
@@ -0,0 +1,128 @@
+//
+// detail/buffered_stream_storage.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_BUFFERED_STREAM_STORAGE_HPP
+#define BOOST_ASIO_DETAIL_BUFFERED_STREAM_STORAGE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/detail/assert.hpp>
+#include <cstddef>
+#include <cstring>
+#include <vector>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class buffered_stream_storage
+{
+public:
+  // The type of the bytes stored in the buffer.
+  typedef unsigned char byte_type;
+
+  // The type used for offsets into the buffer.
+  typedef std::size_t size_type;
+
+  // Constructor.
+  explicit buffered_stream_storage(std::size_t buffer_capacity)
+    : begin_offset_(0),
+      end_offset_(0),
+      buffer_(buffer_capacity)
+  {
+  }
+
+  /// Clear the buffer.
+  void clear()
+  {
+    begin_offset_ = 0;
+    end_offset_ = 0;
+  }
+
+  // Return a pointer to the beginning of the unread data.
+  mutable_buffer data()
+  {
+    return boost::asio::buffer(buffer_) + begin_offset_;
+  }
+
+  // Return a pointer to the beginning of the unread data.
+  const_buffer data() const
+  {
+    return boost::asio::buffer(buffer_) + begin_offset_;
+  }
+
+  // Is there no unread data in the buffer.
+  bool empty() const
+  {
+    return begin_offset_ == end_offset_;
+  }
+
+  // Return the amount of unread data the is in the buffer.
+  size_type size() const
+  {
+    return end_offset_ - begin_offset_;
+  }
+
+  // Resize the buffer to the specified length.
+  void resize(size_type length)
+  {
+    BOOST_ASIO_ASSERT(length <= capacity());
+    if (begin_offset_ + length <= capacity())
+    {
+      end_offset_ = begin_offset_ + length;
+    }
+    else
+    {
+      using namespace std; // For memmove.
+      memmove(&buffer_[0], &buffer_[0] + begin_offset_, size());
+      end_offset_ = length;
+      begin_offset_ = 0;
+    }
+  }
+
+  // Return the maximum size for data in the buffer.
+  size_type capacity() const
+  {
+    return buffer_.size();
+  }
+
+  // Consume multiple bytes from the beginning of the buffer.
+  void consume(size_type count)
+  {
+    BOOST_ASIO_ASSERT(begin_offset_ + count <= end_offset_);
+    begin_offset_ += count;
+    if (empty())
+      clear();
+  }
+
+private:
+  // The offset to the beginning of the unread data.
+  size_type begin_offset_;
+
+  // The offset to the end of the unread data.
+  size_type end_offset_;
+  
+  // The data in the buffer.
+  std::vector<byte_type> buffer_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_BUFFERED_STREAM_STORAGE_HPP
diff --git a/ext/patches/boost/asio/detail/call_stack.hpp b/ext/patches/boost/asio/detail/call_stack.hpp
new file mode 100644
index 0000000..82ebd4f
--- /dev/null
+++ b/ext/patches/boost/asio/detail/call_stack.hpp
@@ -0,0 +1,127 @@
+//
+// detail/call_stack.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_CALL_STACK_HPP
+#define BOOST_ASIO_DETAIL_CALL_STACK_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/tss_ptr.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+// Helper class to determine whether or not the current thread is inside an
+// invocation of io_service::run() for a specified io_service object.
+template <typename Key, typename Value = unsigned char>
+class call_stack
+{
+public:
+  // Context class automatically pushes the key/value pair on to the stack.
+  class context
+    : private noncopyable
+  {
+  public:
+    // Push the key on to the stack.
+    explicit context(Key* k)
+      : key_(k),
+        next_(call_stack<Key, Value>::top_)
+    {
+      value_ = reinterpret_cast<unsigned char*>(this);
+      call_stack<Key, Value>::top_ = this;
+    }
+
+    // Push the key/value pair on to the stack.
+    context(Key* k, Value& v)
+      : key_(k),
+        value_(&v),
+        next_(call_stack<Key, Value>::top_)
+    {
+      call_stack<Key, Value>::top_ = this;
+    }
+
+    // Pop the key/value pair from the stack.
+    ~context()
+    {
+      call_stack<Key, Value>::top_ = next_;
+    }
+
+    // Find the next context with the same key.
+    Value* next_by_key() const
+    {
+      context* elem = next_;
+      while (elem)
+      {
+        if (elem->key_ == key_)
+          return elem->value_;
+        elem = elem->next_;
+      }
+      return 0;
+    }
+
+  private:
+    friend class call_stack<Key, Value>;
+
+    // The key associated with the context.
+    Key* key_;
+
+    // The value associated with the context.
+    Value* value_;
+
+    // The next element in the stack.
+    context* next_;
+  };
+
+  friend class context;
+
+  // Determine whether the specified owner is on the stack. Returns address of
+  // key if present, 0 otherwise.
+  static Value* contains(Key* k)
+  {
+    context* elem = top_;
+    while (elem)
+    {
+      if (elem->key_ == k)
+        return elem->value_;
+      elem = elem->next_;
+    }
+    return 0;
+  }
+
+  // Obtain the value at the top of the stack.
+  static Value* top()
+  {
+    context* elem = top_;
+    return elem ? elem->value_ : 0;
+  }
+
+private:
+  // The top of the stack of calls for the current thread.
+  static tss_ptr<context> top_;
+};
+
+template <typename Key, typename Value>
+tss_ptr<typename call_stack<Key, Value>::context>
+call_stack<Key, Value>::top_;
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_CALL_STACK_HPP
diff --git a/ext/patches/boost/asio/detail/chrono_time_traits.hpp b/ext/patches/boost/asio/detail/chrono_time_traits.hpp
new file mode 100644
index 0000000..72d4478
--- /dev/null
+++ b/ext/patches/boost/asio/detail/chrono_time_traits.hpp
@@ -0,0 +1,192 @@
+//
+// detail/chrono_time_traits.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_CHRONO_TIME_TRAITS_HPP
+#define BOOST_ASIO_DETAIL_CHRONO_TIME_TRAITS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/cstdint.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+// Helper template to compute the greatest common divisor.
+template <int64_t v1, int64_t v2>
+struct gcd { enum { value = gcd<v2, v1 % v2>::value }; };
+
+template <int64_t v1>
+struct gcd<v1, 0> { enum { value = v1 }; };
+
+// Adapts std::chrono clocks for use with a deadline timer.
+template <typename Clock, typename WaitTraits>
+struct chrono_time_traits
+{
+  // The clock type.
+  typedef Clock clock_type;
+
+  // The duration type of the clock.
+  typedef typename clock_type::duration duration_type;
+
+  // The time point type of the clock.
+  typedef typename clock_type::time_point time_type;
+
+  // The period of the clock.
+  typedef typename duration_type::period period_type;
+
+  // Get the current time.
+  static time_type now()
+  {
+    return clock_type::now();
+  }
+
+  // Add a duration to a time.
+  static time_type add(const time_type& t, const duration_type& d)
+  {
+    const time_type epoch;
+    if (t >= epoch)
+    {
+      if ((time_type::max)() - t < d)
+        return (time_type::max)();
+    }
+    else // t < epoch
+    {
+      if (-(t - (time_type::min)()) > d)
+        return (time_type::min)();
+    }
+
+    return t + d;
+  }
+
+  // Subtract one time from another.
+  static duration_type subtract(const time_type& t1, const time_type& t2)
+  {
+    const time_type epoch;
+    if (t1 >= epoch)
+    {
+      if (t2 >= epoch)
+      {
+        return t1 - t2;
+      }
+      else if (t2 == (time_type::min)())
+      {
+        return (duration_type::max)();
+      }
+      else if ((time_type::max)() - t1 < epoch - t2)
+      {
+        return (duration_type::max)();
+      }
+      else
+      {
+        return t1 - t2;
+      }
+    }
+    else // t1 < epoch
+    {
+      if (t2 < epoch)
+      {
+        return t1 - t2;
+      }
+      else if (t1 == (time_type::min)())
+      {
+        return (duration_type::min)();
+      }
+      else if ((time_type::max)() - t2 < epoch - t1)
+      {
+        return (duration_type::min)();
+      }
+      else
+      {
+        return -(t2 - t1);
+      }
+    }
+  }
+
+  // Test whether one time is less than another.
+  static bool less_than(const time_type& t1, const time_type& t2)
+  {
+    return t1 < t2;
+  }
+
+  // Implement just enough of the posix_time::time_duration interface to supply
+  // what the timer_queue requires.
+  class posix_time_duration
+  {
+  public:
+    explicit posix_time_duration(const duration_type& d)
+      : d_(d)
+    {
+    }
+
+    int64_t ticks() const
+    {
+      return d_.count();
+    }
+
+    int64_t total_seconds() const
+    {
+      return duration_cast<1, 1>();
+    }
+
+    int64_t total_milliseconds() const
+    {
+      return duration_cast<1, 1000>();
+    }
+
+    int64_t total_microseconds() const
+    {
+      return duration_cast<1, 1000000>();
+    }
+
+  private:
+    template <int64_t Num, int64_t Den>
+    int64_t duration_cast() const
+    {
+      const int64_t num1 = period_type::num / gcd<period_type::num, Num>::value;
+      const int64_t num2 = Num / gcd<period_type::num, Num>::value;
+
+      const int64_t den1 = period_type::den / gcd<period_type::den, Den>::value;
+      const int64_t den2 = Den / gcd<period_type::den, Den>::value;
+
+      const int64_t num = num1 * den2;
+      const int64_t den = num2 * den1;
+
+      if (num == 1 && den == 1)
+        return ticks();
+      else if (num != 1 && den == 1)
+        return ticks() * num;
+      else if (num == 1 && period_type::den != 1)
+        return ticks() / den;
+      else
+        return ticks() * num / den;
+    }
+
+    duration_type d_;
+  };
+
+  // Convert to POSIX duration type.
+  static posix_time_duration to_posix_duration(const duration_type& d)
+  {
+    return posix_time_duration(WaitTraits::to_wait_duration(d));
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_CHRONO_TIME_TRAITS_HPP
diff --git a/ext/patches/boost/asio/detail/completion_handler.hpp b/ext/patches/boost/asio/detail/completion_handler.hpp
new file mode 100644
index 0000000..4e68380
--- /dev/null
+++ b/ext/patches/boost/asio/detail/completion_handler.hpp
@@ -0,0 +1,83 @@
+//
+// detail/completion_handler.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_COMPLETION_HANDLER_HPP
+#define BOOST_ASIO_DETAIL_COMPLETION_HANDLER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/operation.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Handler>
+class completion_handler : public operation
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(completion_handler);
+
+  completion_handler(Handler& h)
+    : operation(&completion_handler::do_complete),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(h))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& /*ec*/,
+      std::size_t /*bytes_transferred*/)
+  {
+    // Take ownership of the handler object.
+    completion_handler* h(static_cast<completion_handler*>(base));
+    ptr p = { boost::asio::detail::addressof(h->handler_), h, h };
+
+    BOOST_ASIO_HANDLER_COMPLETION((h));
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    Handler handler(BOOST_ASIO_MOVE_CAST(Handler)(h->handler_));
+    p.h = boost::asio::detail::addressof(handler);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN(());
+      boost_asio_handler_invoke_helpers::invoke(handler, handler);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_COMPLETION_HANDLER_HPP
diff --git a/ext/patches/boost/asio/detail/config.hpp b/ext/patches/boost/asio/detail/config.hpp
new file mode 100644
index 0000000..fc90ee5
--- /dev/null
+++ b/ext/patches/boost/asio/detail/config.hpp
@@ -0,0 +1,906 @@
+//
+// detail/config.hpp
+// ~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_CONFIG_HPP
+#define BOOST_ASIO_DETAIL_CONFIG_HPP
+
+#if defined(BOOST_ASIO_STANDALONE)
+# define BOOST_ASIO_DISABLE_BOOST_ARRAY 1
+# define BOOST_ASIO_DISABLE_BOOST_ASSERT 1
+# define BOOST_ASIO_DISABLE_BOOST_BIND 1
+# define BOOST_ASIO_DISABLE_BOOST_CHRONO 1
+# define BOOST_ASIO_DISABLE_BOOST_DATE_TIME 1
+# define BOOST_ASIO_DISABLE_BOOST_LIMITS 1
+# define BOOST_ASIO_DISABLE_BOOST_REGEX 1
+# define BOOST_ASIO_DISABLE_BOOST_STATIC_CONSTANT 1
+# define BOOST_ASIO_DISABLE_BOOST_THROW_EXCEPTION 1
+# define BOOST_ASIO_DISABLE_BOOST_WORKAROUND 1
+#else // defined(BOOST_ASIO_STANDALONE)
+# include <boost/config.hpp>
+# include <boost/version.hpp>
+# define BOOST_ASIO_HAS_BOOST_CONFIG 1
+#endif // defined(BOOST_ASIO_STANDALONE)
+
+// Default to a header-only implementation. The user must specifically request
+// separate compilation by defining either BOOST_ASIO_SEPARATE_COMPILATION or
+// BOOST_ASIO_DYN_LINK (as a DLL/shared library implies separate compilation).
+#if !defined(BOOST_ASIO_HEADER_ONLY)
+# if !defined(BOOST_ASIO_SEPARATE_COMPILATION)
+#  if !defined(BOOST_ASIO_DYN_LINK)
+#   define BOOST_ASIO_HEADER_ONLY 1
+#  endif // !defined(BOOST_ASIO_DYN_LINK)
+# endif // !defined(BOOST_ASIO_SEPARATE_COMPILATION)
+#endif // !defined(BOOST_ASIO_HEADER_ONLY)
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# define BOOST_ASIO_DECL inline
+#else // defined(BOOST_ASIO_HEADER_ONLY)
+# if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__CODEGEARC__)
+// We need to import/export our code only if the user has specifically asked
+// for it by defining BOOST_ASIO_DYN_LINK.
+#  if defined(BOOST_ASIO_DYN_LINK)
+// Export if this is our own source, otherwise import.
+#   if defined(BOOST_ASIO_SOURCE)
+#    define BOOST_ASIO_DECL __declspec(dllexport)
+#   else // defined(BOOST_ASIO_SOURCE)
+#    define BOOST_ASIO_DECL __declspec(dllimport)
+#   endif // defined(BOOST_ASIO_SOURCE)
+#  endif // defined(BOOST_ASIO_DYN_LINK)
+# endif // defined(_MSC_VER) || defined(__BORLANDC__) || defined(__CODEGEARC__)
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+// If BOOST_ASIO_DECL isn't defined yet define it now.
+#if !defined(BOOST_ASIO_DECL)
+# define BOOST_ASIO_DECL
+#endif // !defined(BOOST_ASIO_DECL)
+
+// Microsoft Visual C++ detection.
+#if !defined(BOOST_ASIO_MSVC)
+# if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_MSVC)
+#  define BOOST_ASIO_MSVC BOOST_MSVC
+# elif defined(_MSC_VER) && !defined(__MWERKS__) && !defined(__EDG_VERSION__)
+#  define BOOST_ASIO_MSVC _MSC_VER
+# endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_MSVC)
+#endif // defined(BOOST_ASIO_MSVC)
+
+// Clang / libc++ detection.
+#if defined(__clang__)
+# if (__cplusplus >= 201103)
+#  if __has_include(<__config>)
+#   include <__config>
+#   if defined(_LIBCPP_VERSION)
+#    define BOOST_ASIO_HAS_CLANG_LIBCXX 1
+#   endif // defined(_LIBCPP_VERSION)
+#  endif // __has_include(<__config>)
+# endif // (__cplusplus >= 201103)
+#endif // defined(__clang__)
+
+// Support move construction and assignment on compilers known to allow it.
+#if !defined(BOOST_ASIO_HAS_MOVE)
+# if !defined(BOOST_ASIO_DISABLE_MOVE)
+#  if defined(__clang__)
+#   if __has_feature(__cxx_rvalue_references__)
+#    define BOOST_ASIO_HAS_MOVE 1
+#   endif // __has_feature(__cxx_rvalue_references__)
+#  endif // defined(__clang__)
+#  if defined(__GNUC__)
+#   if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
+#    if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#     define BOOST_ASIO_HAS_MOVE 1
+#    endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+#   endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
+#  endif // defined(__GNUC__)
+#  if defined(BOOST_ASIO_MSVC)
+#   if (_MSC_VER >= 1700)
+#    define BOOST_ASIO_HAS_MOVE 1
+#   endif // (_MSC_VER >= 1700)
+#  endif // defined(BOOST_ASIO_MSVC)
+# endif // !defined(BOOST_ASIO_DISABLE_MOVE)
+#endif // !defined(BOOST_ASIO_HAS_MOVE)
+
+// If BOOST_ASIO_MOVE_CAST isn't defined, and move support is available, define
+// BOOST_ASIO_MOVE_ARG and BOOST_ASIO_MOVE_CAST to take advantage of rvalue
+// references and perfect forwarding.
+#if defined(BOOST_ASIO_HAS_MOVE) && !defined(BOOST_ASIO_MOVE_CAST)
+# define BOOST_ASIO_MOVE_ARG(type) type&&
+# define BOOST_ASIO_MOVE_CAST(type) static_cast<type&&>
+# define BOOST_ASIO_MOVE_CAST2(type1, type2) static_cast<type1, type2&&>
+#endif // defined(BOOST_ASIO_HAS_MOVE) && !defined(BOOST_ASIO_MOVE_CAST)
+
+// If BOOST_ASIO_MOVE_CAST still isn't defined, default to a C++03-compatible
+// implementation. Note that older g++ and MSVC versions don't like it when you
+// pass a non-member function through a const reference, so for most compilers
+// we'll play it safe and stick with the old approach of passing the handler by
+// value.
+#if !defined(BOOST_ASIO_MOVE_CAST)
+# if defined(__GNUC__)
+#  if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 1)) || (__GNUC__ > 4)
+#   define BOOST_ASIO_MOVE_ARG(type) const type&
+#  else // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 1)) || (__GNUC__ > 4)
+#   define BOOST_ASIO_MOVE_ARG(type) type
+#  endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 1)) || (__GNUC__ > 4)
+# elif defined(BOOST_ASIO_MSVC)
+#  if (_MSC_VER >= 1400)
+#   define BOOST_ASIO_MOVE_ARG(type) const type&
+#  else // (_MSC_VER >= 1400)
+#   define BOOST_ASIO_MOVE_ARG(type) type
+#  endif // (_MSC_VER >= 1400)
+# else
+#  define BOOST_ASIO_MOVE_ARG(type) type
+# endif
+# define BOOST_ASIO_MOVE_CAST(type) static_cast<const type&>
+# define BOOST_ASIO_MOVE_CAST2(type1, type2) static_cast<const type1, type2&>
+#endif // !defined(BOOST_ASIO_MOVE_CAST)
+
+// Support variadic templates on compilers known to allow it.
+#if !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+# if !defined(BOOST_ASIO_DISABLE_VARIADIC_TEMPLATES)
+#  if defined(__clang__)
+#   if __has_feature(__cxx_variadic_templates__)
+#    define BOOST_ASIO_HAS_VARIADIC_TEMPLATES 1
+#   endif // __has_feature(__cxx_variadic_templates__)
+#  endif // defined(__clang__)
+#  if defined(__GNUC__)
+#   if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4)
+#    if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#     define BOOST_ASIO_HAS_VARIADIC_TEMPLATES 1
+#    endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+#   endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4)
+#  endif // defined(__GNUC__)
+# endif // !defined(BOOST_ASIO_DISABLE_VARIADIC_TEMPLATES)
+#endif // !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+
+// Support constexpr on compilers known to allow it.
+#if !defined(BOOST_ASIO_HAS_CONSTEXPR)
+# if !defined(BOOST_ASIO_DISABLE_CONSTEXPR)
+#  if defined(__clang__)
+#   if __has_feature(__cxx_constexpr__)
+#    define BOOST_ASIO_HAS_CONSTEXPR 1
+#   endif // __has_feature(__cxx_constexr__)
+#  endif // defined(__clang__)
+#  if defined(__GNUC__)
+#   if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
+#    if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#     define BOOST_ASIO_HAS_CONSTEXPR 1
+#    endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+#   endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
+#  endif // defined(__GNUC__)
+# endif // !defined(BOOST_ASIO_DISABLE_CONSTEXPR)
+#endif // !defined(BOOST_ASIO_HAS_CONSTEXPR)
+#if !defined(BOOST_ASIO_CONSTEXPR)
+# if defined(BOOST_ASIO_HAS_CONSTEXPR)
+#  define BOOST_ASIO_CONSTEXPR constexpr
+# else // defined(BOOST_ASIO_HAS_CONSTEXPR)
+#  define BOOST_ASIO_CONSTEXPR
+# endif // defined(BOOST_ASIO_HAS_CONSTEXPR)
+#endif // !defined(BOOST_ASIO_CONSTEXPR)
+
+// Standard library support for system errors.
+# if !defined(BOOST_ASIO_DISABLE_STD_SYSTEM_ERROR)
+#  if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#   define BOOST_ASIO_HAS_STD_SYSTEM_ERROR 1
+#  endif // defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#  if defined(__GNUC__)
+#   if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
+#    if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#     define BOOST_ASIO_HAS_STD_SYSTEM_ERROR 1
+#    endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+#   endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
+#  endif // defined(__GNUC__)
+#  if defined(BOOST_ASIO_MSVC)
+#   if (_MSC_VER >= 1700)
+#    define BOOST_ASIO_HAS_STD_SYSTEM_ERROR 1
+#   endif // (_MSC_VER >= 1700)
+#  endif // defined(BOOST_ASIO_MSVC)
+# endif // !defined(BOOST_ASIO_DISABLE_STD_SYSTEM_ERROR)
+
+// Compliant C++11 compilers put noexcept specifiers on error_category members.
+#if !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT)
+# if (BOOST_VERSION >= 105300)
+#  define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT BOOST_NOEXCEPT
+# elif defined(__clang__)
+#  if __has_feature(__cxx_noexcept__)
+#   define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT noexcept(true)
+#  endif // __has_feature(__cxx_noexcept__)
+# elif defined(__GNUC__)
+#  if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
+#   if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#     define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT noexcept(true)
+#   endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+#  endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
+# endif // defined(__GNUC__)
+# if !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT)
+#  define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT
+# endif // !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT)
+#endif // !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT)
+
+// Standard library support for arrays.
+#if !defined(BOOST_ASIO_HAS_STD_ARRAY)
+# if !defined(BOOST_ASIO_DISABLE_STD_ARRAY)
+#  if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#   define BOOST_ASIO_HAS_STD_ARRAY 1
+#  endif // defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#  if defined(__GNUC__)
+#   if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4)
+#    if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#     define BOOST_ASIO_HAS_STD_ARRAY 1
+#    endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+#   endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4)
+#  endif // defined(__GNUC__)
+#  if defined(BOOST_ASIO_MSVC)
+#   if (_MSC_VER >= 1600)
+#    define BOOST_ASIO_HAS_STD_ARRAY 1
+#   endif // (_MSC_VER >= 1600)
+#  endif // defined(BOOST_ASIO_MSVC)
+# endif // !defined(BOOST_ASIO_DISABLE_STD_ARRAY)
+#endif // !defined(BOOST_ASIO_HAS_STD_ARRAY)
+
+// Standard library support for shared_ptr and weak_ptr.
+#if !defined(BOOST_ASIO_HAS_STD_SHARED_PTR)
+# if !defined(BOOST_ASIO_DISABLE_STD_SHARED_PTR)
+#  if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#   define BOOST_ASIO_HAS_STD_SHARED_PTR 1
+#  endif // defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#  if defined(__GNUC__)
+#   if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4)
+#    if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#     define BOOST_ASIO_HAS_STD_SHARED_PTR 1
+#    endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+#   endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4)
+#  endif // defined(__GNUC__)
+#  if defined(BOOST_ASIO_MSVC)
+#   if (_MSC_VER >= 1600)
+#    define BOOST_ASIO_HAS_STD_SHARED_PTR 1
+#   endif // (_MSC_VER >= 1600)
+#  endif // defined(BOOST_ASIO_MSVC)
+# endif // !defined(BOOST_ASIO_DISABLE_STD_SHARED_PTR)
+#endif // !defined(BOOST_ASIO_HAS_STD_SHARED_PTR)
+
+// Standard library support for atomic operations.
+#if !defined(BOOST_ASIO_HAS_STD_ATOMIC)
+# if !defined(BOOST_ASIO_DISABLE_STD_ATOMIC)
+#  if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#   define BOOST_ASIO_HAS_STD_ATOMIC 1
+#  endif // defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#  if defined(__GNUC__)
+#   if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
+#    if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#     define BOOST_ASIO_HAS_STD_ATOMIC 1
+#    endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+#   endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
+#  endif // defined(__GNUC__)
+#  if defined(BOOST_ASIO_MSVC)
+#   if (_MSC_VER >= 1700)
+#    define BOOST_ASIO_HAS_STD_ATOMIC 1
+#   endif // (_MSC_VER >= 1700)
+#  endif // defined(BOOST_ASIO_MSVC)
+# endif // !defined(BOOST_ASIO_DISABLE_STD_ATOMIC)
+#endif // !defined(BOOST_ASIO_HAS_STD_ATOMIC)
+
+// Standard library support for chrono. Some standard libraries (such as the
+// libstdc++ shipped with gcc 4.6) provide monotonic_clock as per early C++0x
+// drafts, rather than the eventually standardised name of steady_clock.
+#if !defined(BOOST_ASIO_HAS_STD_CHRONO)
+# if !defined(BOOST_ASIO_DISABLE_STD_CHRONO)
+#  if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#   define BOOST_ASIO_HAS_STD_CHRONO 1
+#  endif // defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#  if defined(__GNUC__)
+#   if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
+#    if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#     define BOOST_ASIO_HAS_STD_CHRONO 1
+#     if ((__GNUC__ == 4) && (__GNUC_MINOR__ == 6))
+#      define BOOST_ASIO_HAS_STD_CHRONO_MONOTONIC_CLOCK 1
+#     endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ == 6))
+#    endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+#   endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
+#  endif // defined(__GNUC__)
+#  if defined(BOOST_ASIO_MSVC)
+#   if (_MSC_VER >= 1700)
+#    define BOOST_ASIO_HAS_STD_CHRONO 1
+#   endif // (_MSC_VER >= 1700)
+#  endif // defined(BOOST_ASIO_MSVC)
+# endif // !defined(BOOST_ASIO_DISABLE_STD_CHRONO)
+#endif // !defined(BOOST_ASIO_HAS_STD_CHRONO)
+
+// Boost support for chrono.
+#if !defined(BOOST_ASIO_HAS_BOOST_CHRONO)
+# if !defined(BOOST_ASIO_DISABLE_BOOST_CHRONO)
+#  if (BOOST_VERSION >= 104700)
+#   define BOOST_ASIO_HAS_BOOST_CHRONO 1
+#  endif // (BOOST_VERSION >= 104700)
+# endif // !defined(BOOST_ASIO_DISABLE_BOOST_CHRONO)
+#endif // !defined(BOOST_ASIO_HAS_BOOST_CHRONO)
+
+// Boost support for the DateTime library.
+#if !defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+# if !defined(BOOST_ASIO_DISABLE_BOOST_DATE_TIME)
+#  define BOOST_ASIO_HAS_BOOST_DATE_TIME 1
+# endif // !defined(BOOST_ASIO_DISABLE_BOOST_DATE_TIME)
+#endif // !defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+
+// Standard library support for addressof.
+#if !defined(BOOST_ASIO_HAS_STD_ADDRESSOF)
+# if !defined(BOOST_ASIO_DISABLE_STD_ADDRESSOF)
+#  if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#   define BOOST_ASIO_HAS_STD_ADDRESSOF 1
+#  endif // defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#  if defined(__GNUC__)
+#   if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
+#    if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#     define BOOST_ASIO_HAS_STD_ADDRESSOF 1
+#    endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+#   endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
+#  endif // defined(__GNUC__)
+#  if defined(BOOST_ASIO_MSVC)
+#   if (_MSC_VER >= 1700)
+#    define BOOST_ASIO_HAS_STD_ADDRESSOF 1
+#   endif // (_MSC_VER >= 1700)
+#  endif // defined(BOOST_ASIO_MSVC)
+# endif // !defined(BOOST_ASIO_DISABLE_STD_ADDRESSOF)
+#endif // !defined(BOOST_ASIO_HAS_STD_ADDRESSOF)
+
+// Standard library support for the function class.
+#if !defined(BOOST_ASIO_HAS_STD_FUNCTION)
+# if !defined(BOOST_ASIO_DISABLE_STD_FUNCTION)
+#  if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#   define BOOST_ASIO_HAS_STD_FUNCTION 1
+#  endif // defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#  if defined(__GNUC__)
+#   if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
+#    if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#     define BOOST_ASIO_HAS_STD_FUNCTION 1
+#    endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+#   endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
+#  endif // defined(__GNUC__)
+#  if defined(BOOST_ASIO_MSVC)
+#   if (_MSC_VER >= 1700)
+#    define BOOST_ASIO_HAS_STD_FUNCTION 1
+#   endif // (_MSC_VER >= 1700)
+#  endif // defined(BOOST_ASIO_MSVC)
+# endif // !defined(BOOST_ASIO_DISABLE_STD_FUNCTION)
+#endif // !defined(BOOST_ASIO_HAS_STD_FUNCTION)
+
+// Standard library support for type traits.
+#if !defined(BOOST_ASIO_HAS_STD_TYPE_TRAITS)
+# if !defined(BOOST_ASIO_DISABLE_STD_TYPE_TRAITS)
+#  if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#   define BOOST_ASIO_HAS_STD_TYPE_TRAITS 1
+#  endif // defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#  if defined(__GNUC__)
+#   if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
+#    if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#     define BOOST_ASIO_HAS_STD_TYPE_TRAITS 1
+#    endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+#   endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
+#  endif // defined(__GNUC__)
+#  if defined(BOOST_ASIO_MSVC)
+#   if (_MSC_VER >= 1700)
+#    define BOOST_ASIO_HAS_STD_TYPE_TRAITS 1
+#   endif // (_MSC_VER >= 1700)
+#  endif // defined(BOOST_ASIO_MSVC)
+# endif // !defined(BOOST_ASIO_DISABLE_STD_TYPE_TRAITS)
+#endif // !defined(BOOST_ASIO_HAS_STD_TYPE_TRAITS)
+
+// Standard library support for the cstdint header.
+#if !defined(BOOST_ASIO_HAS_CSTDINT)
+# if !defined(BOOST_ASIO_DISABLE_CSTDINT)
+#  if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#   define BOOST_ASIO_HAS_CSTDINT 1
+#  endif // defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#  if defined(__GNUC__)
+#   if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
+#    if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#     define BOOST_ASIO_HAS_CSTDINT 1
+#    endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+#   endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
+#  endif // defined(__GNUC__)
+#  if defined(BOOST_ASIO_MSVC)
+#   if (_MSC_VER >= 1700)
+#    define BOOST_ASIO_HAS_CSTDINT 1
+#   endif // (_MSC_VER >= 1700)
+#  endif // defined(BOOST_ASIO_MSVC)
+# endif // !defined(BOOST_ASIO_DISABLE_CSTDINT)
+#endif // !defined(BOOST_ASIO_HAS_CSTDINT)
+
+// Standard library support for the thread class.
+#if !defined(BOOST_ASIO_HAS_STD_THREAD)
+# if !defined(BOOST_ASIO_DISABLE_STD_THREAD)
+#  if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#   define BOOST_ASIO_HAS_STD_THREAD 1
+#  endif // defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#  if defined(__GNUC__)
+#   if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
+#    if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#     define BOOST_ASIO_HAS_STD_THREAD 1
+#    endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+#   endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
+#  endif // defined(__GNUC__)
+#  if defined(BOOST_ASIO_MSVC)
+#   if (_MSC_VER >= 1700)
+#    define BOOST_ASIO_HAS_STD_THREAD 1
+#   endif // (_MSC_VER >= 1700)
+#  endif // defined(BOOST_ASIO_MSVC)
+# endif // !defined(BOOST_ASIO_DISABLE_STD_THREAD)
+#endif // !defined(BOOST_ASIO_HAS_STD_THREAD)
+
+// Standard library support for the mutex and condition variable classes.
+#if !defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+# if !defined(BOOST_ASIO_DISABLE_STD_MUTEX_AND_CONDVAR)
+#  if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#   define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1
+#  endif // defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
+#  if defined(__GNUC__)
+#   if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
+#    if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#     define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1
+#    endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+#   endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
+#  endif // defined(__GNUC__)
+#  if defined(BOOST_ASIO_MSVC)
+#   if (_MSC_VER >= 1700)
+#    define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1
+#   endif // (_MSC_VER >= 1700)
+#  endif // defined(BOOST_ASIO_MSVC)
+# endif // !defined(BOOST_ASIO_DISABLE_STD_MUTEX_AND_CONDVAR)
+#endif // !defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+
+// WinRT target.
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# if defined(__cplusplus_winrt)
+#  include <winapifamily.h>
+#  if WINAPI_FAMILY_ONE_PARTITION(WINAPI_FAMILY, WINAPI_PARTITION_APP)
+#   define BOOST_ASIO_WINDOWS_RUNTIME 1
+#  endif // WINAPI_FAMILY_ONE_PARTITION(WINAPI_FAMILY, WINAPI_PARTITION_APP)
+# endif // defined(__cplusplus_winrt)
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+// Windows target. Excludes WinRT.
+#if !defined(BOOST_ASIO_WINDOWS)
+# if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+#  if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_WINDOWS)
+#   define BOOST_ASIO_WINDOWS 1
+#  elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
+#   define BOOST_ASIO_WINDOWS 1
+#  endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_WINDOWS)
+# endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+#endif // !defined(BOOST_ASIO_WINDOWS)
+
+// Windows: target OS version.
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+# if !defined(_WIN32_WINNT) && !defined(_WIN32_WINDOWS)
+#  if defined(_MSC_VER) || defined(__BORLANDC__)
+#   pragma message( \
+  "Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately. For example:\n"\
+  "- add -D_WIN32_WINNT=0x0501 to the compiler command line; or\n"\
+  "- add _WIN32_WINNT=0x0501 to your project's Preprocessor Definitions.\n"\
+  "Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target).")
+#  else // defined(_MSC_VER) || defined(__BORLANDC__)
+#   warning Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately.
+#   warning For example, add -D_WIN32_WINNT=0x0501 to the compiler command line.
+#   warning Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target).
+#  endif // defined(_MSC_VER) || defined(__BORLANDC__)
+#  define _WIN32_WINNT 0x0501
+# endif // !defined(_WIN32_WINNT) && !defined(_WIN32_WINDOWS)
+# if defined(_MSC_VER)
+#  if defined(_WIN32) && !defined(WIN32)
+#   if !defined(_WINSOCK2API_)
+#    define WIN32 // Needed for correct types in winsock2.h
+#   else // !defined(_WINSOCK2API_)
+#    error Please define the macro WIN32 in your compiler options
+#   endif // !defined(_WINSOCK2API_)
+#  endif // defined(_WIN32) && !defined(WIN32)
+# endif // defined(_MSC_VER)
+# if defined(__BORLANDC__)
+#  if defined(__WIN32__) && !defined(WIN32)
+#   if !defined(_WINSOCK2API_)
+#    define WIN32 // Needed for correct types in winsock2.h
+#   else // !defined(_WINSOCK2API_)
+#    error Please define the macro WIN32 in your compiler options
+#   endif // !defined(_WINSOCK2API_)
+#  endif // defined(__WIN32__) && !defined(WIN32)
+# endif // defined(__BORLANDC__)
+# if defined(__CYGWIN__)
+#  if !defined(__USE_W32_SOCKETS)
+#   error You must add -D__USE_W32_SOCKETS to your compiler options.
+#  endif // !defined(__USE_W32_SOCKETS)
+# endif // defined(__CYGWIN__)
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+// Windows: minimise header inclusion.
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+# if !defined(BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN)
+#  if !defined(WIN32_LEAN_AND_MEAN)
+#   define WIN32_LEAN_AND_MEAN
+#  endif // !defined(WIN32_LEAN_AND_MEAN)
+# endif // !defined(BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN)
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+// Windows: suppress definition of "min" and "max" macros.
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+# if !defined(BOOST_ASIO_NO_NOMINMAX)
+#  if !defined(NOMINMAX)
+#   define NOMINMAX 1
+#  endif // !defined(NOMINMAX)
+# endif // !defined(BOOST_ASIO_NO_NOMINMAX)
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+// Windows: IO Completion Ports.
+#if !defined(BOOST_ASIO_HAS_IOCP)
+# if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+#  if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0400)
+#   if !defined(UNDER_CE)
+#    if !defined(BOOST_ASIO_DISABLE_IOCP)
+#     define BOOST_ASIO_HAS_IOCP 1
+#    endif // !defined(BOOST_ASIO_DISABLE_IOCP)
+#   endif // !defined(UNDER_CE)
+#  endif // defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0400)
+# endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_HAS_IOCP)
+
+// Linux: epoll, eventfd and timerfd.
+#if defined(__linux__)
+# include <linux/version.h>
+# if !defined(BOOST_ASIO_HAS_EPOLL)
+#  if !defined(BOOST_ASIO_DISABLE_EPOLL)
+#   if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,45)
+#    define BOOST_ASIO_HAS_EPOLL 1
+#   endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,45)
+#  endif // !defined(BOOST_ASIO_DISABLE_EPOLL)
+# endif // !defined(BOOST_ASIO_HAS_EPOLL)
+# if !defined(BOOST_ASIO_HAS_EVENTFD)
+#  if !defined(BOOST_ASIO_DISABLE_EVENTFD)
+#   if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
+#    define BOOST_ASIO_HAS_EVENTFD 1
+#   endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
+#  endif // !defined(BOOST_ASIO_DISABLE_EVENTFD)
+# endif // !defined(BOOST_ASIO_HAS_EVENTFD)
+# if !defined(BOOST_ASIO_HAS_TIMERFD)
+#  if defined(BOOST_ASIO_HAS_EPOLL)
+#   if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 8)
+#    define BOOST_ASIO_HAS_TIMERFD 1
+#   endif // (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 8)
+#  endif // defined(BOOST_ASIO_HAS_EPOLL)
+# endif // !defined(BOOST_ASIO_HAS_TIMERFD)
+#endif // defined(__linux__)
+
+// Mac OS X, FreeBSD, NetBSD, OpenBSD: kqueue.
+#if (defined(__MACH__) && defined(__APPLE__)) \
+  || defined(__FreeBSD__) \
+  || defined(__NetBSD__) \
+  || defined(__OpenBSD__)
+# if !defined(BOOST_ASIO_HAS_KQUEUE)
+#  if !defined(BOOST_ASIO_DISABLE_KQUEUE)
+#   define BOOST_ASIO_HAS_KQUEUE 1
+#  endif // !defined(BOOST_ASIO_DISABLE_KQUEUE)
+# endif // !defined(BOOST_ASIO_HAS_KQUEUE)
+#endif // (defined(__MACH__) && defined(__APPLE__))
+       //   || defined(__FreeBSD__)
+       //   || defined(__NetBSD__)
+       //   || defined(__OpenBSD__)
+
+// Solaris: /dev/poll.
+#if defined(__sun)
+# if !defined(BOOST_ASIO_HAS_DEV_POLL)
+#  if !defined(BOOST_ASIO_DISABLE_DEV_POLL)
+#   define BOOST_ASIO_HAS_DEV_POLL 1
+#  endif // !defined(BOOST_ASIO_DISABLE_DEV_POLL)
+# endif // !defined(BOOST_ASIO_HAS_DEV_POLL)
+#endif // defined(__sun)
+
+// Serial ports.
+#if !defined(BOOST_ASIO_HAS_SERIAL_PORT)
+# if defined(BOOST_ASIO_HAS_IOCP) \
+  || !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  && !defined(__CYGWIN__)
+#  if !defined(__SYMBIAN32__)
+#   if !defined(BOOST_ASIO_DISABLE_SERIAL_PORT)
+#    define BOOST_ASIO_HAS_SERIAL_PORT 1
+#   endif // !defined(BOOST_ASIO_DISABLE_SERIAL_PORT)
+#  endif // !defined(__SYMBIAN32__)
+# endif // defined(BOOST_ASIO_HAS_IOCP)
+        //   || !defined(BOOST_ASIO_WINDOWS)
+        //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+        //   && !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_HAS_SERIAL_PORT)
+
+// Windows: stream handles.
+#if !defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE)
+# if !defined(BOOST_ASIO_DISABLE_WINDOWS_STREAM_HANDLE)
+#  if defined(BOOST_ASIO_HAS_IOCP)
+#   define BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE 1
+#  endif // defined(BOOST_ASIO_HAS_IOCP)
+# endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_STREAM_HANDLE)
+#endif // !defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE)
+
+// Windows: random access handles.
+#if !defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE)
+# if !defined(BOOST_ASIO_DISABLE_WINDOWS_RANDOM_ACCESS_HANDLE)
+#  if defined(BOOST_ASIO_HAS_IOCP)
+#   define BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE 1
+#  endif // defined(BOOST_ASIO_HAS_IOCP)
+# endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_RANDOM_ACCESS_HANDLE)
+#endif // !defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE)
+
+// Windows: object handles.
+#if !defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE)
+# if !defined(BOOST_ASIO_DISABLE_WINDOWS_OBJECT_HANDLE)
+#  if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+#   if !defined(UNDER_CE)
+#    define BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE 1
+#   endif // !defined(UNDER_CE)
+#  endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+# endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_OBJECT_HANDLE)
+#endif // !defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE)
+
+// Windows: OVERLAPPED wrapper.
+#if !defined(BOOST_ASIO_HAS_WINDOWS_OVERLAPPED_PTR)
+# if !defined(BOOST_ASIO_DISABLE_WINDOWS_OVERLAPPED_PTR)
+#  if defined(BOOST_ASIO_HAS_IOCP)
+#   define BOOST_ASIO_HAS_WINDOWS_OVERLAPPED_PTR 1
+#  endif // defined(BOOST_ASIO_HAS_IOCP)
+# endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_OVERLAPPED_PTR)
+#endif // !defined(BOOST_ASIO_HAS_WINDOWS_OVERLAPPED_PTR)
+
+// POSIX: stream-oriented file descriptors.
+#if !defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
+# if !defined(BOOST_ASIO_DISABLE_POSIX_STREAM_DESCRIPTOR)
+#  if !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  && !defined(__CYGWIN__)
+#   define BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR 1
+#  endif // !defined(BOOST_ASIO_WINDOWS)
+         //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+         //   && !defined(__CYGWIN__)
+# endif // !defined(BOOST_ASIO_DISABLE_POSIX_STREAM_DESCRIPTOR)
+#endif // !defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
+
+// UNIX domain sockets.
+#if !defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
+# if !defined(BOOST_ASIO_DISABLE_LOCAL_SOCKETS)
+#  if !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  && !defined(__CYGWIN__)
+#   define BOOST_ASIO_HAS_LOCAL_SOCKETS 1
+#  endif // !defined(BOOST_ASIO_WINDOWS)
+         //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+         //   && !defined(__CYGWIN__)
+# endif // !defined(BOOST_ASIO_DISABLE_LOCAL_SOCKETS)
+#endif // !defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
+
+// Can use sigaction() instead of signal().
+#if !defined(BOOST_ASIO_HAS_SIGACTION)
+# if !defined(BOOST_ASIO_DISABLE_SIGACTION)
+#  if !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  && !defined(__CYGWIN__)
+#   define BOOST_ASIO_HAS_SIGACTION 1
+#  endif // !defined(BOOST_ASIO_WINDOWS)
+         //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+         //   && !defined(__CYGWIN__)
+# endif // !defined(BOOST_ASIO_DISABLE_SIGACTION)
+#endif // !defined(BOOST_ASIO_HAS_SIGACTION)
+
+// Can use signal().
+#if !defined(BOOST_ASIO_HAS_SIGNAL)
+# if !defined(BOOST_ASIO_DISABLE_SIGNAL)
+#  if !defined(UNDER_CE)
+#   define BOOST_ASIO_HAS_SIGNAL 1
+#  endif // !defined(UNDER_CE)
+# endif // !defined(BOOST_ASIO_DISABLE_SIGNAL)
+#endif // !defined(BOOST_ASIO_HAS_SIGNAL)
+
+// Can use getaddrinfo() and getnameinfo().
+#if !defined(BOOST_ASIO_HAS_GETADDRINFO)
+# if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+#  if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501)
+#   define BOOST_ASIO_HAS_GETADDRINFO 1
+#  elif defined(UNDER_CE)
+#   define BOOST_ASIO_HAS_GETADDRINFO 1
+#  endif // defined(UNDER_CE)
+# elif !(defined(__MACH__) && defined(__APPLE__))
+#  define BOOST_ASIO_HAS_GETADDRINFO 1
+# endif // !(defined(__MACH__) && defined(__APPLE__))
+#endif // !defined(BOOST_ASIO_HAS_GETADDRINFO)
+
+// Whether standard iostreams are disabled.
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+# if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_NO_IOSTREAM)
+#  define BOOST_ASIO_NO_IOSTREAM 1
+# endif // !defined(BOOST_NO_IOSTREAM)
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+// Whether exception handling is disabled.
+#if !defined(BOOST_ASIO_NO_EXCEPTIONS)
+# if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_NO_EXCEPTIONS)
+#  define BOOST_ASIO_NO_EXCEPTIONS 1
+# endif // !defined(BOOST_NO_EXCEPTIONS)
+#endif // !defined(BOOST_ASIO_NO_EXCEPTIONS)
+
+// Whether the typeid operator is supported.
+#if !defined(BOOST_ASIO_NO_TYPEID)
+# if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_NO_TYPEID)
+#  define BOOST_ASIO_NO_TYPEID 1
+# endif // !defined(BOOST_NO_TYPEID)
+#endif // !defined(BOOST_ASIO_NO_TYPEID)
+
+// On POSIX (and POSIX-like) platforms we need to include unistd.h in order to
+// get access to the various platform feature macros, e.g. to be able to test
+// for threads support.
+#if !defined(BOOST_ASIO_HAS_UNISTD_H)
+# if !defined(BOOST_ASIO_HAS_BOOST_CONFIG)
+#  if defined(unix) \
+   || defined(__unix) \
+   || defined(_XOPEN_SOURCE) \
+   || defined(_POSIX_SOURCE) \
+   || (defined(__MACH__) && defined(__APPLE__)) \
+   || defined(__FreeBSD__) \
+   || defined(__NetBSD__) \
+   || defined(__OpenBSD__) \
+   || defined(__linux__)
+#   define BOOST_ASIO_HAS_UNISTD_H 1
+#  endif
+# endif // !defined(BOOST_ASIO_HAS_BOOST_CONFIG)
+#endif // !defined(BOOST_ASIO_HAS_UNISTD_H)
+#if defined(BOOST_ASIO_HAS_UNISTD_H)
+# include <unistd.h>
+#endif // defined(BOOST_ASIO_HAS_UNISTD_H)
+
+// Threads.
+#if !defined(BOOST_ASIO_HAS_THREADS)
+# if !defined(BOOST_ASIO_DISABLE_THREADS)
+#  if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_THREADS)
+#   define BOOST_ASIO_HAS_THREADS 1
+#  elif defined(_MSC_VER) && defined(_MT)
+#   define BOOST_ASIO_HAS_THREADS 1
+#  elif defined(__BORLANDC__) && defined(__MT__)
+#   define BOOST_ASIO_HAS_THREADS 1
+#  elif defined(_POSIX_THREADS)
+#   define BOOST_ASIO_HAS_THREADS 1
+#  endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_THREADS)
+# endif // !defined(BOOST_ASIO_DISABLE_THREADS)
+#endif // !defined(BOOST_ASIO_HAS_THREADS)
+
+// POSIX threads.
+#if !defined(BOOST_ASIO_HAS_PTHREADS)
+# if defined(BOOST_ASIO_HAS_THREADS)
+#  if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_PTHREADS)
+#   define BOOST_ASIO_HAS_PTHREADS 1
+#  elif defined(_POSIX_THREADS)
+#   define BOOST_ASIO_HAS_PTHREADS 1
+#  endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_PTHREADS)
+# endif // defined(BOOST_ASIO_HAS_THREADS)
+#endif // !defined(BOOST_ASIO_HAS_PTHREADS)
+
+// Helper to prevent macro expansion.
+#define BOOST_ASIO_PREVENT_MACRO_SUBSTITUTION
+
+// Helper to define in-class constants.
+#if !defined(BOOST_ASIO_STATIC_CONSTANT)
+# if !defined(BOOST_ASIO_DISABLE_BOOST_STATIC_CONSTANT)
+#  define BOOST_ASIO_STATIC_CONSTANT(type, assignment) \
+    BOOST_STATIC_CONSTANT(type, assignment)
+# else // !defined(BOOST_ASIO_DISABLE_BOOST_STATIC_CONSTANT)
+#  define BOOST_ASIO_STATIC_CONSTANT(type, assignment) \
+    static const type assignment
+# endif // !defined(BOOST_ASIO_DISABLE_BOOST_STATIC_CONSTANT)
+#endif // !defined(BOOST_ASIO_STATIC_CONSTANT)
+
+// Boost array library.
+#if !defined(BOOST_ASIO_HAS_BOOST_ARRAY)
+# if !defined(BOOST_ASIO_DISABLE_BOOST_ARRAY)
+#  define BOOST_ASIO_HAS_BOOST_ARRAY 1
+# endif // !defined(BOOST_ASIO_DISABLE_BOOST_ARRAY)
+#endif // !defined(BOOST_ASIO_HAS_BOOST_ARRAY)
+
+// Boost assert macro.
+#if !defined(BOOST_ASIO_HAS_BOOST_ASSERT)
+# if !defined(BOOST_ASIO_DISABLE_BOOST_ASSERT)
+#  define BOOST_ASIO_HAS_BOOST_ASSERT 1
+# endif // !defined(BOOST_ASIO_DISABLE_BOOST_ASSERT)
+#endif // !defined(BOOST_ASIO_HAS_BOOST_ASSERT)
+
+// Boost limits header.
+#if !defined(BOOST_ASIO_HAS_BOOST_LIMITS)
+# if !defined(BOOST_ASIO_DISABLE_BOOST_LIMITS)
+#  define BOOST_ASIO_HAS_BOOST_LIMITS 1
+# endif // !defined(BOOST_ASIO_DISABLE_BOOST_LIMITS)
+#endif // !defined(BOOST_ASIO_HAS_BOOST_LIMITS)
+
+// Boost throw_exception function.
+#if !defined(BOOST_ASIO_HAS_BOOST_THROW_EXCEPTION)
+# if !defined(BOOST_ASIO_DISABLE_BOOST_THROW_EXCEPTION)
+#  define BOOST_ASIO_HAS_BOOST_THROW_EXCEPTION 1
+# endif // !defined(BOOST_ASIO_DISABLE_BOOST_THROW_EXCEPTION)
+#endif // !defined(BOOST_ASIO_HAS_BOOST_THROW_EXCEPTION)
+
+// Boost regex library.
+#if !defined(BOOST_ASIO_HAS_BOOST_REGEX)
+# if !defined(BOOST_ASIO_DISABLE_BOOST_REGEX)
+#  define BOOST_ASIO_HAS_BOOST_REGEX 1
+# endif // !defined(BOOST_ASIO_DISABLE_BOOST_REGEX)
+#endif // !defined(BOOST_ASIO_HAS_BOOST_REGEX)
+
+// Boost bind function.
+#if !defined(BOOST_ASIO_HAS_BOOST_BIND)
+# if !defined(BOOST_ASIO_DISABLE_BOOST_BIND)
+#  define BOOST_ASIO_HAS_BOOST_BIND 1
+# endif // !defined(BOOST_ASIO_DISABLE_BOOST_BIND)
+#endif // !defined(BOOST_ASIO_HAS_BOOST_BIND)
+
+// Boost's BOOST_WORKAROUND macro.
+#if !defined(BOOST_ASIO_HAS_BOOST_WORKAROUND)
+# if !defined(BOOST_ASIO_DISABLE_BOOST_WORKAROUND)
+#  define BOOST_ASIO_HAS_BOOST_WORKAROUND 1
+# endif // !defined(BOOST_ASIO_DISABLE_BOOST_WORKAROUND)
+#endif // !defined(BOOST_ASIO_HAS_BOOST_WORKAROUND)
+
+// Microsoft Visual C++'s secure C runtime library.
+#if !defined(BOOST_ASIO_HAS_SECURE_RTL)
+# if !defined(BOOST_ASIO_DISABLE_SECURE_RTL)
+#  if defined(BOOST_ASIO_MSVC) \
+    && (BOOST_ASIO_MSVC >= 1400) \
+    && !defined(UNDER_CE)
+#   define BOOST_ASIO_HAS_SECURE_RTL 1
+#  endif // defined(BOOST_ASIO_MSVC)
+         // && (BOOST_ASIO_MSVC >= 1400)
+         // && !defined(UNDER_CE)
+# endif // !defined(BOOST_ASIO_DISABLE_SECURE_RTL)
+#endif // !defined(BOOST_ASIO_HAS_SECURE_RTL)
+
+// Handler hooking. Disabled for ancient Borland C++ and gcc compilers.
+#if !defined(BOOST_ASIO_HAS_HANDLER_HOOKS)
+# if !defined(BOOST_ASIO_DISABLE_HANDLER_HOOKS)
+#  if defined(__GNUC__)
+#   if (__GNUC__ >= 3)
+#    define BOOST_ASIO_HAS_HANDLER_HOOKS 1
+#   endif // (__GNUC__ >= 3)
+#  elif !defined(__BORLANDC__)
+#   define BOOST_ASIO_HAS_HANDLER_HOOKS 1
+#  endif // !defined(__BORLANDC__)
+# endif // !defined(BOOST_ASIO_DISABLE_HANDLER_HOOKS)
+#endif // !defined(BOOST_ASIO_HAS_HANDLER_HOOKS)
+
+// Support for the __thread keyword extension.
+#if !defined(BOOST_ASIO_DISABLE_THREAD_KEYWORD_EXTENSION)
+# if defined(__linux__)
+#  if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+#   if ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)
+#    if !defined(__INTEL_COMPILER) && !defined(__ICL)
+#     define BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION 1
+#     define BOOST_ASIO_THREAD_KEYWORD __thread
+#    elif defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1100)
+#     define BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION 1
+#    endif // defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1100)
+#   endif // ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)
+#  endif // defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+# endif // defined(__linux__)
+# if defined(BOOST_ASIO_MSVC) && defined(BOOST_ASIO_WINDOWS_RUNTIME)
+#  if (_MSC_VER >= 1700)
+#   define BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION 1
+#   define BOOST_ASIO_THREAD_KEYWORD __declspec(thread)
+#  endif // (_MSC_VER >= 1700)
+# endif // defined(BOOST_ASIO_MSVC) && defined(BOOST_ASIO_WINDOWS_RUNTIME)
+#endif // !defined(BOOST_ASIO_DISABLE_THREAD_KEYWORD_EXTENSION)
+#if !defined(BOOST_ASIO_THREAD_KEYWORD)
+# define BOOST_ASIO_THREAD_KEYWORD __thread
+#endif // !defined(BOOST_ASIO_THREAD_KEYWORD)
+
+// Support for POSIX ssize_t typedef.
+#if !defined(BOOST_ASIO_DISABLE_SSIZE_T)
+# if defined(__linux__) \
+   || (defined(__MACH__) && defined(__APPLE__))
+#  define BOOST_ASIO_HAS_SSIZE_T 1
+# endif // defined(__linux__)
+        //   || (defined(__MACH__) && defined(__APPLE__))
+#endif // !defined(BOOST_ASIO_DISABLE_SSIZE_T)
+
+#endif // BOOST_ASIO_DETAIL_CONFIG_HPP
diff --git a/ext/patches/boost/asio/detail/consuming_buffers.hpp b/ext/patches/boost/asio/detail/consuming_buffers.hpp
new file mode 100644
index 0000000..ad40d44
--- /dev/null
+++ b/ext/patches/boost/asio/detail/consuming_buffers.hpp
@@ -0,0 +1,294 @@
+//
+// detail/consuming_buffers.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_CONSUMING_BUFFERS_HPP
+#define BOOST_ASIO_DETAIL_CONSUMING_BUFFERS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <iterator>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/detail/limits.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+// A proxy iterator for a sub-range in a list of buffers.
+template <typename Buffer, typename Buffer_Iterator>
+class consuming_buffers_iterator
+{
+public:
+  /// The type used for the distance between two iterators.
+  typedef std::ptrdiff_t difference_type;
+
+  /// The type of the value pointed to by the iterator.
+  typedef Buffer value_type;
+
+  /// The type of the result of applying operator->() to the iterator.
+  typedef const Buffer* pointer;
+
+  /// The type of the result of applying operator*() to the iterator.
+  typedef const Buffer& reference;
+
+  /// The iterator category.
+  typedef std::forward_iterator_tag iterator_category;
+
+  // Default constructor creates an end iterator.
+  consuming_buffers_iterator()
+    : at_end_(true)
+  {
+  }
+
+  // Construct with a buffer for the first entry and an iterator
+  // range for the remaining entries.
+  consuming_buffers_iterator(bool at_end, const Buffer& first,
+      Buffer_Iterator begin_remainder, Buffer_Iterator end_remainder,
+      std::size_t max_size)
+    : at_end_(max_size > 0 ? at_end : true),
+      first_(buffer(first, max_size)),
+      begin_remainder_(begin_remainder),
+      end_remainder_(end_remainder),
+      offset_(0),
+      max_size_(max_size)
+  {
+  }
+
+  // Dereference an iterator.
+  const Buffer& operator*() const
+  {
+    return dereference();
+  }
+
+  // Dereference an iterator.
+  const Buffer* operator->() const
+  {
+    return &dereference();
+  }
+
+  // Increment operator (prefix).
+  consuming_buffers_iterator& operator++()
+  {
+    increment();
+    return *this;
+  }
+
+  // Increment operator (postfix).
+  consuming_buffers_iterator operator++(int)
+  {
+    consuming_buffers_iterator tmp(*this);
+    ++*this;
+    return tmp;
+  }
+
+  // Test two iterators for equality.
+  friend bool operator==(const consuming_buffers_iterator& a,
+      const consuming_buffers_iterator& b)
+  {
+    return a.equal(b);
+  }
+
+  // Test two iterators for inequality.
+  friend bool operator!=(const consuming_buffers_iterator& a,
+      const consuming_buffers_iterator& b)
+  {
+    return !a.equal(b);
+  }
+
+private:
+  void increment()
+  {
+    if (!at_end_)
+    {
+      if (begin_remainder_ == end_remainder_
+          || offset_ + buffer_size(first_) >= max_size_)
+      {
+        at_end_ = true;
+      }
+      else
+      {
+        offset_ += buffer_size(first_);
+        first_ = buffer(*begin_remainder_++, max_size_ - offset_);
+      }
+    }
+  }
+
+  bool equal(const consuming_buffers_iterator& other) const
+  {
+    if (at_end_ && other.at_end_)
+      return true;
+    return !at_end_ && !other.at_end_
+      && buffer_cast<const void*>(first_)
+        == buffer_cast<const void*>(other.first_)
+      && buffer_size(first_) == buffer_size(other.first_)
+      && begin_remainder_ == other.begin_remainder_
+      && end_remainder_ == other.end_remainder_;
+  }
+
+  const Buffer& dereference() const
+  {
+    return first_;
+  }
+
+  bool at_end_;
+  Buffer first_;
+  Buffer_Iterator begin_remainder_;
+  Buffer_Iterator end_remainder_;
+  std::size_t offset_;
+  std::size_t max_size_;
+};
+
+// A proxy for a sub-range in a list of buffers.
+template <typename Buffer, typename Buffers>
+class consuming_buffers
+{
+public:
+  // The type for each element in the list of buffers.
+  typedef Buffer value_type;
+
+  // A forward-only iterator type that may be used to read elements.
+  typedef consuming_buffers_iterator<Buffer, typename Buffers::const_iterator>
+    const_iterator;
+
+  // Construct to represent the entire list of buffers.
+  consuming_buffers(const Buffers& buffers)
+    : buffers_(buffers),
+      at_end_(buffers_.begin() == buffers_.end()),
+      begin_remainder_(buffers_.begin()),
+      max_size_((std::numeric_limits<std::size_t>::max)())
+  {
+    if (!at_end_)
+    {
+      first_ = *buffers_.begin();
+      ++begin_remainder_;
+    }
+  }
+
+  // Copy constructor.
+  consuming_buffers(const consuming_buffers& other)
+    : buffers_(other.buffers_),
+      at_end_(other.at_end_),
+      first_(other.first_),
+      begin_remainder_(buffers_.begin()),
+      max_size_(other.max_size_)
+  {
+    typename Buffers::const_iterator first = other.buffers_.begin();
+    typename Buffers::const_iterator second = other.begin_remainder_;
+    std::advance(begin_remainder_, std::distance(first, second));
+  }
+
+  // Assignment operator.
+  consuming_buffers& operator=(const consuming_buffers& other)
+  {
+    buffers_ = other.buffers_;
+    at_end_ = other.at_end_;
+    first_ = other.first_;
+    begin_remainder_ = buffers_.begin();
+    typename Buffers::const_iterator first = other.buffers_.begin();
+    typename Buffers::const_iterator second = other.begin_remainder_;
+    std::advance(begin_remainder_, std::distance(first, second));
+    max_size_ = other.max_size_;
+    return *this;
+  }
+
+  // Get a forward-only iterator to the first element.
+  const_iterator begin() const
+  {
+    return const_iterator(at_end_, first_,
+        begin_remainder_, buffers_.end(), max_size_);
+  }
+
+  // Get a forward-only iterator for one past the last element.
+  const_iterator end() const
+  {
+    return const_iterator();
+  }
+
+  // Set the maximum size for a single transfer.
+  void prepare(std::size_t max_size)
+  {
+    max_size_ = max_size;
+  }
+
+  // Consume the specified number of bytes from the buffers.
+  void consume(std::size_t size)
+  {
+    // Remove buffers from the start until the specified size is reached.
+    while (size > 0 && !at_end_)
+    {
+      if (buffer_size(first_) <= size)
+      {
+        size -= buffer_size(first_);
+        if (begin_remainder_ == buffers_.end())
+          at_end_ = true;
+        else
+          first_ = *begin_remainder_++;
+      }
+      else
+      {
+        first_ = first_ + size;
+        size = 0;
+      }
+    }
+
+    // Remove any more empty buffers at the start.
+    while (!at_end_ && buffer_size(first_) == 0)
+    {
+      if (begin_remainder_ == buffers_.end())
+        at_end_ = true;
+      else
+        first_ = *begin_remainder_++;
+    }
+  }
+
+private:
+  Buffers buffers_;
+  bool at_end_;
+  Buffer first_;
+  typename Buffers::const_iterator begin_remainder_;
+  std::size_t max_size_;
+};
+
+// Specialisation for null_buffers to ensure that the null_buffers type is
+// always passed through to the underlying read or write operation.
+template <typename Buffer>
+class consuming_buffers<Buffer, boost::asio::null_buffers>
+  : public boost::asio::null_buffers
+{
+public:
+  consuming_buffers(const boost::asio::null_buffers&)
+  {
+    // No-op.
+  }
+
+  void prepare(std::size_t)
+  {
+    // No-op.
+  }
+
+  void consume(std::size_t)
+  {
+    // No-op.
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_CONSUMING_BUFFERS_HPP
diff --git a/ext/patches/boost/asio/detail/cstdint.hpp b/ext/patches/boost/asio/detail/cstdint.hpp
new file mode 100644
index 0000000..7d4855a
--- /dev/null
+++ b/ext/patches/boost/asio/detail/cstdint.hpp
@@ -0,0 +1,48 @@
+//
+// detail/cstdint.hpp
+// ~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_CSTDINT_HPP
+#define BOOST_ASIO_DETAIL_CSTDINT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_CSTDINT)
+# include <cstdint>
+#else // defined(BOOST_ASIO_HAS_CSTDINT)
+# include <boost/cstdint.hpp>
+#endif // defined(BOOST_ASIO_HAS_CSTDINT)
+
+namespace boost {
+namespace asio {
+
+#if defined(BOOST_ASIO_HAS_CSTDINT)
+using std::int16_t;
+using std::uint16_t;
+using std::int32_t;
+using std::uint32_t;
+using std::int64_t;
+using std::uint64_t;
+#else // defined(BOOST_ASIO_HAS_CSTDINT)
+using boost::int16_t;
+using boost::uint16_t;
+using boost::int32_t;
+using boost::uint32_t;
+using boost::int64_t;
+using boost::uint64_t;
+#endif // defined(BOOST_ASIO_HAS_CSTDINT)
+
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_CSTDINT_HPP
diff --git a/ext/patches/boost/asio/detail/date_time_fwd.hpp b/ext/patches/boost/asio/detail/date_time_fwd.hpp
new file mode 100644
index 0000000..8d6d07b
--- /dev/null
+++ b/ext/patches/boost/asio/detail/date_time_fwd.hpp
@@ -0,0 +1,34 @@
+//
+// detail/date_time_fwd.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_DATE_TIME_FWD_HPP
+#define BOOST_ASIO_DETAIL_DATE_TIME_FWD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+namespace boost {
+namespace date_time {
+
+template<class T, class TimeSystem>
+class base_time;
+
+} // namespace date_time
+namespace posix_time {
+
+class ptime;
+
+} // namespace posix_time
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_DATE_TIME_FWD_HPP
diff --git a/ext/patches/boost/asio/detail/deadline_timer_service.hpp b/ext/patches/boost/asio/detail/deadline_timer_service.hpp
new file mode 100644
index 0000000..7002c47
--- /dev/null
+++ b/ext/patches/boost/asio/detail/deadline_timer_service.hpp
@@ -0,0 +1,229 @@
+//
+// detail/deadline_timer_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_DEADLINE_TIMER_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_DEADLINE_TIMER_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/timer_queue.hpp>
+#include <boost/asio/detail/timer_scheduler.hpp>
+#include <boost/asio/detail/wait_handler.hpp>
+#include <boost/asio/detail/wait_op.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <chrono>
+# include <thread>
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Time_Traits>
+class deadline_timer_service
+{
+public:
+  // The time type.
+  typedef typename Time_Traits::time_type time_type;
+
+  // The duration type.
+  typedef typename Time_Traits::duration_type duration_type;
+
+  // The implementation type of the timer. This type is dependent on the
+  // underlying implementation of the timer service.
+  struct implementation_type
+    : private boost::asio::detail::noncopyable
+  {
+    time_type expiry;
+    bool might_have_pending_waits;
+    typename timer_queue<Time_Traits>::per_timer_data timer_data;
+  };
+
+  // Constructor.
+  deadline_timer_service(boost::asio::io_service& io_service)
+    : scheduler_(boost::asio::use_service<timer_scheduler>(io_service))
+  {
+    scheduler_.init_task();
+    scheduler_.add_timer_queue(timer_queue_);
+  }
+
+  // Destructor.
+  ~deadline_timer_service()
+  {
+    scheduler_.remove_timer_queue(timer_queue_);
+  }
+
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+  }
+
+  // Construct a new timer implementation.
+  void construct(implementation_type& impl)
+  {
+    impl.expiry = time_type();
+    impl.might_have_pending_waits = false;
+  }
+
+  // Destroy a timer implementation.
+  void destroy(implementation_type& impl)
+  {
+    boost::system::error_code ec;
+    cancel(impl, ec);
+  }
+
+  // Cancel any asynchronous wait operations associated with the timer.
+  std::size_t cancel(implementation_type& impl, boost::system::error_code& ec)
+  {
+    if (!impl.might_have_pending_waits)
+    {
+      ec = boost::system::error_code();
+      return 0;
+    }
+
+    BOOST_ASIO_HANDLER_OPERATION(("deadline_timer", &impl, "cancel"));
+
+    std::size_t count = scheduler_.cancel_timer(timer_queue_, impl.timer_data);
+    impl.might_have_pending_waits = false;
+    ec = boost::system::error_code();
+    return count;
+  }
+
+  // Cancels one asynchronous wait operation associated with the timer.
+  std::size_t cancel_one(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    if (!impl.might_have_pending_waits)
+    {
+      ec = boost::system::error_code();
+      return 0;
+    }
+
+    BOOST_ASIO_HANDLER_OPERATION(("deadline_timer", &impl, "cancel_one"));
+
+    std::size_t count = scheduler_.cancel_timer(
+        timer_queue_, impl.timer_data, 1);
+    if (count == 0)
+      impl.might_have_pending_waits = false;
+    ec = boost::system::error_code();
+    return count;
+  }
+
+  // Get the expiry time for the timer as an absolute time.
+  time_type expires_at(const implementation_type& impl) const
+  {
+    return impl.expiry;
+  }
+
+  // Set the expiry time for the timer as an absolute time.
+  std::size_t expires_at(implementation_type& impl,
+      const time_type& expiry_time, boost::system::error_code& ec)
+  {
+    std::size_t count = cancel(impl, ec);
+    impl.expiry = expiry_time;
+    ec = boost::system::error_code();
+    return count;
+  }
+
+  // Get the expiry time for the timer relative to now.
+  duration_type expires_from_now(const implementation_type& impl) const
+  {
+    return Time_Traits::subtract(expires_at(impl), Time_Traits::now());
+  }
+
+  // Set the expiry time for the timer relative to now.
+  std::size_t expires_from_now(implementation_type& impl,
+      const duration_type& expiry_time, boost::system::error_code& ec)
+  {
+    return expires_at(impl,
+        Time_Traits::add(Time_Traits::now(), expiry_time), ec);
+  }
+
+  // Perform a blocking wait on the timer.
+  void wait(implementation_type& impl, boost::system::error_code& ec)
+  {
+    time_type now = Time_Traits::now();
+    ec = boost::system::error_code();
+    while (Time_Traits::less_than(now, impl.expiry) && !ec)
+    {
+      this->do_wait(Time_Traits::to_posix_duration(
+            Time_Traits::subtract(impl.expiry, now)), ec);
+      now = Time_Traits::now();
+    }
+  }
+
+  // Start an asynchronous wait on the timer.
+  template <typename Handler>
+  void async_wait(implementation_type& impl, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef wait_handler<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(handler);
+
+    impl.might_have_pending_waits = true;
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "deadline_timer", &impl, "async_wait"));
+
+    scheduler_.schedule_timer(timer_queue_, impl.expiry, impl.timer_data, p.p);
+    p.v = p.p = 0;
+  }
+
+private:
+  // Helper function to wait given a duration type. The duration type should
+  // either be of type boost::posix_time::time_duration, or implement the
+  // required subset of its interface.
+  template <typename Duration>
+  void do_wait(const Duration& timeout, boost::system::error_code& ec)
+  {
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+    std::this_thread::sleep_for(
+        std::chrono::seconds(timeout.total_seconds())
+        + std::chrono::microseconds(timeout.total_microseconds()));
+    ec = boost::system::error_code();
+#else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+    ::timeval tv;
+    tv.tv_sec = timeout.total_seconds();
+    tv.tv_usec = timeout.total_microseconds() % 1000000;
+    socket_ops::select(0, 0, 0, 0, &tv, ec);
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  }
+
+  // The queue of timers.
+  timer_queue<Time_Traits> timer_queue_;
+
+  // The object that schedules and executes timers. Usually a reactor.
+  timer_scheduler& scheduler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_DEADLINE_TIMER_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/dependent_type.hpp b/ext/patches/boost/asio/detail/dependent_type.hpp
new file mode 100644
index 0000000..255c8fe
--- /dev/null
+++ b/ext/patches/boost/asio/detail/dependent_type.hpp
@@ -0,0 +1,38 @@
+//
+// detail/dependent_type.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_DEPENDENT_TYPE_HPP
+#define BOOST_ASIO_DETAIL_DEPENDENT_TYPE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename DependsOn, typename T>
+struct dependent_type
+{
+  typedef T type;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_DEPENDENT_TYPE_HPP
diff --git a/ext/patches/boost/asio/detail/descriptor_ops.hpp b/ext/patches/boost/asio/detail/descriptor_ops.hpp
new file mode 100644
index 0000000..515c661
--- /dev/null
+++ b/ext/patches/boost/asio/detail/descriptor_ops.hpp
@@ -0,0 +1,119 @@
+//
+// detail/descriptor_ops.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_DESCRIPTOR_OPS_HPP
+#define BOOST_ASIO_DETAIL_DESCRIPTOR_OPS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  && !defined(__CYGWIN__)
+
+#include <cstddef>
+#include <boost/system/error_code.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+namespace descriptor_ops {
+
+// Descriptor state bits.
+enum
+{
+  // The user wants a non-blocking descriptor.
+  user_set_non_blocking = 1,
+
+  // The descriptor has been set non-blocking.
+  internal_non_blocking = 2,
+
+  // Helper "state" used to determine whether the descriptor is non-blocking.
+  non_blocking = user_set_non_blocking | internal_non_blocking,
+
+  // The descriptor may have been dup()-ed.
+  possible_dup = 4
+};
+
+typedef unsigned char state_type;
+
+template <typename ReturnType>
+inline ReturnType error_wrapper(ReturnType return_value,
+    boost::system::error_code& ec)
+{
+  ec = boost::system::error_code(errno,
+      boost::asio::error::get_system_category());
+  return return_value;
+}
+
+BOOST_ASIO_DECL int open(const char* path, int flags,
+    boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int close(int d, state_type& state,
+    boost::system::error_code& ec);
+
+BOOST_ASIO_DECL bool set_user_non_blocking(int d,
+    state_type& state, bool value, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL bool set_internal_non_blocking(int d,
+    state_type& state, bool value, boost::system::error_code& ec);
+
+typedef iovec buf;
+
+BOOST_ASIO_DECL std::size_t sync_read(int d, state_type state, buf* bufs,
+    std::size_t count, bool all_empty, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL bool non_blocking_read(int d, buf* bufs, std::size_t count,
+    boost::system::error_code& ec, std::size_t& bytes_transferred);
+
+BOOST_ASIO_DECL std::size_t sync_write(int d, state_type state,
+    const buf* bufs, std::size_t count, bool all_empty,
+    boost::system::error_code& ec);
+
+BOOST_ASIO_DECL bool non_blocking_write(int d,
+    const buf* bufs, std::size_t count,
+    boost::system::error_code& ec, std::size_t& bytes_transferred);
+
+BOOST_ASIO_DECL int ioctl(int d, state_type& state, long cmd,
+    ioctl_arg_type* arg, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int fcntl(int d, int cmd, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int fcntl(int d, int cmd,
+    long arg, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int poll_read(int d,
+    state_type state, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int poll_write(int d,
+    state_type state, boost::system::error_code& ec);
+
+} // namespace descriptor_ops
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/descriptor_ops.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // !defined(BOOST_ASIO_WINDOWS)
+       //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+       //   && !defined(__CYGWIN__)
+
+#endif // BOOST_ASIO_DETAIL_DESCRIPTOR_OPS_HPP
diff --git a/ext/patches/boost/asio/detail/descriptor_read_op.hpp b/ext/patches/boost/asio/detail/descriptor_read_op.hpp
new file mode 100644
index 0000000..d2bb5e3
--- /dev/null
+++ b/ext/patches/boost/asio/detail/descriptor_read_op.hpp
@@ -0,0 +1,121 @@
+//
+// detail/descriptor_read_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_DESCRIPTOR_READ_OP_HPP
+#define BOOST_ASIO_DETAIL_DESCRIPTOR_READ_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/descriptor_ops.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename MutableBufferSequence>
+class descriptor_read_op_base : public reactor_op
+{
+public:
+  descriptor_read_op_base(int descriptor,
+      const MutableBufferSequence& buffers, func_type complete_func)
+    : reactor_op(&descriptor_read_op_base::do_perform, complete_func),
+      descriptor_(descriptor),
+      buffers_(buffers)
+  {
+  }
+
+  static bool do_perform(reactor_op* base)
+  {
+    descriptor_read_op_base* o(static_cast<descriptor_read_op_base*>(base));
+
+    buffer_sequence_adapter<boost::asio::mutable_buffer,
+        MutableBufferSequence> bufs(o->buffers_);
+
+    return descriptor_ops::non_blocking_read(o->descriptor_,
+        bufs.buffers(), bufs.count(), o->ec_, o->bytes_transferred_);
+  }
+
+private:
+  int descriptor_;
+  MutableBufferSequence buffers_;
+};
+
+template <typename MutableBufferSequence, typename Handler>
+class descriptor_read_op
+  : public descriptor_read_op_base<MutableBufferSequence>
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(descriptor_read_op);
+
+  descriptor_read_op(int descriptor,
+      const MutableBufferSequence& buffers, Handler& handler)
+    : descriptor_read_op_base<MutableBufferSequence>(
+        descriptor, buffers, &descriptor_read_op::do_complete),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& /*ec*/,
+      std::size_t /*bytes_transferred*/)
+  {
+    // Take ownership of the handler object.
+    descriptor_read_op* o(static_cast<descriptor_read_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, o->ec_, o->bytes_transferred_);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+#endif // BOOST_ASIO_DETAIL_DESCRIPTOR_READ_OP_HPP
diff --git a/ext/patches/boost/asio/detail/descriptor_write_op.hpp b/ext/patches/boost/asio/detail/descriptor_write_op.hpp
new file mode 100644
index 0000000..1691d75
--- /dev/null
+++ b/ext/patches/boost/asio/detail/descriptor_write_op.hpp
@@ -0,0 +1,121 @@
+//
+// detail/descriptor_write_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_DESCRIPTOR_WRITE_OP_HPP
+#define BOOST_ASIO_DETAIL_DESCRIPTOR_WRITE_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/descriptor_ops.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename ConstBufferSequence>
+class descriptor_write_op_base : public reactor_op
+{
+public:
+  descriptor_write_op_base(int descriptor,
+      const ConstBufferSequence& buffers, func_type complete_func)
+    : reactor_op(&descriptor_write_op_base::do_perform, complete_func),
+      descriptor_(descriptor),
+      buffers_(buffers)
+  {
+  }
+
+  static bool do_perform(reactor_op* base)
+  {
+    descriptor_write_op_base* o(static_cast<descriptor_write_op_base*>(base));
+
+    buffer_sequence_adapter<boost::asio::const_buffer,
+        ConstBufferSequence> bufs(o->buffers_);
+
+    return descriptor_ops::non_blocking_write(o->descriptor_,
+        bufs.buffers(), bufs.count(), o->ec_, o->bytes_transferred_);
+  }
+
+private:
+  int descriptor_;
+  ConstBufferSequence buffers_;
+};
+
+template <typename ConstBufferSequence, typename Handler>
+class descriptor_write_op
+  : public descriptor_write_op_base<ConstBufferSequence>
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(descriptor_write_op);
+
+  descriptor_write_op(int descriptor,
+      const ConstBufferSequence& buffers, Handler& handler)
+    : descriptor_write_op_base<ConstBufferSequence>(
+        descriptor, buffers, &descriptor_write_op::do_complete),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& /*ec*/,
+      std::size_t /*bytes_transferred*/)
+  {
+    // Take ownership of the handler object.
+    descriptor_write_op* o(static_cast<descriptor_write_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, o->ec_, o->bytes_transferred_);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+#endif // BOOST_ASIO_DETAIL_DESCRIPTOR_WRITE_OP_HPP
diff --git a/ext/patches/boost/asio/detail/dev_poll_reactor.hpp b/ext/patches/boost/asio/detail/dev_poll_reactor.hpp
new file mode 100644
index 0000000..e8ff2d1
--- /dev/null
+++ b/ext/patches/boost/asio/detail/dev_poll_reactor.hpp
@@ -0,0 +1,212 @@
+//
+// detail/dev_poll_reactor.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_DEV_POLL_REACTOR_HPP
+#define BOOST_ASIO_DETAIL_DEV_POLL_REACTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_DEV_POLL)
+
+#include <cstddef>
+#include <vector>
+#include <sys/devpoll.h>
+#include <boost/asio/detail/hash_map.hpp>
+#include <boost/asio/detail/limits.hpp>
+#include <boost/asio/detail/mutex.hpp>
+#include <boost/asio/detail/op_queue.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/reactor_op_queue.hpp>
+#include <boost/asio/detail/select_interrupter.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/timer_queue_base.hpp>
+#include <boost/asio/detail/timer_queue_set.hpp>
+#include <boost/asio/detail/wait_op.hpp>
+#include <boost/asio/io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class dev_poll_reactor
+  : public boost::asio::detail::service_base<dev_poll_reactor>
+{
+public:
+  enum op_types { read_op = 0, write_op = 1,
+    connect_op = 1, except_op = 2, max_ops = 3 };
+
+  // Per-descriptor data.
+  struct per_descriptor_data
+  {
+  };
+
+  // Constructor.
+  BOOST_ASIO_DECL dev_poll_reactor(boost::asio::io_service& io_service);
+
+  // Destructor.
+  BOOST_ASIO_DECL ~dev_poll_reactor();
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Recreate internal descriptors following a fork.
+  BOOST_ASIO_DECL void fork_service(
+      boost::asio::io_service::fork_event fork_ev);
+
+  // Initialise the task.
+  BOOST_ASIO_DECL void init_task();
+
+  // Register a socket with the reactor. Returns 0 on success, system error
+  // code on failure.
+  BOOST_ASIO_DECL int register_descriptor(socket_type, per_descriptor_data&);
+
+  // Register a descriptor with an associated single operation. Returns 0 on
+  // success, system error code on failure.
+  BOOST_ASIO_DECL int register_internal_descriptor(
+      int op_type, socket_type descriptor,
+      per_descriptor_data& descriptor_data, reactor_op* op);
+
+  // Move descriptor registration from one descriptor_data object to another.
+  BOOST_ASIO_DECL void move_descriptor(socket_type descriptor,
+      per_descriptor_data& target_descriptor_data,
+      per_descriptor_data& source_descriptor_data);
+
+  // Post a reactor operation for immediate completion.
+  void post_immediate_completion(reactor_op* op, bool is_continuation)
+  {
+    io_service_.post_immediate_completion(op, is_continuation);
+  }
+
+  // Start a new operation. The reactor operation will be performed when the
+  // given descriptor is flagged as ready, or an error has occurred.
+  BOOST_ASIO_DECL void start_op(int op_type, socket_type descriptor,
+      per_descriptor_data&, reactor_op* op,
+      bool is_continuation, bool allow_speculative);
+
+  // Cancel all operations associated with the given descriptor. The
+  // handlers associated with the descriptor will be invoked with the
+  // operation_aborted error.
+  BOOST_ASIO_DECL void cancel_ops(socket_type descriptor, per_descriptor_data&);
+
+  // Cancel any operations that are running against the descriptor and remove
+  // its registration from the reactor.
+  BOOST_ASIO_DECL void deregister_descriptor(socket_type descriptor,
+      per_descriptor_data&, bool closing);
+
+  // Cancel any operations that are running against the descriptor and remove
+  // its registration from the reactor.
+  BOOST_ASIO_DECL void deregister_internal_descriptor(
+      socket_type descriptor, per_descriptor_data&);
+
+  // Add a new timer queue to the reactor.
+  template <typename Time_Traits>
+  void add_timer_queue(timer_queue<Time_Traits>& queue);
+
+  // Remove a timer queue from the reactor.
+  template <typename Time_Traits>
+  void remove_timer_queue(timer_queue<Time_Traits>& queue);
+
+  // Schedule a new operation in the given timer queue to expire at the
+  // specified absolute time.
+  template <typename Time_Traits>
+  void schedule_timer(timer_queue<Time_Traits>& queue,
+      const typename Time_Traits::time_type& time,
+      typename timer_queue<Time_Traits>::per_timer_data& timer, wait_op* op);
+
+  // Cancel the timer operations associated with the given token. Returns the
+  // number of operations that have been posted or dispatched.
+  template <typename Time_Traits>
+  std::size_t cancel_timer(timer_queue<Time_Traits>& queue,
+      typename timer_queue<Time_Traits>::per_timer_data& timer,
+      std::size_t max_cancelled = (std::numeric_limits<std::size_t>::max)());
+
+  // Run /dev/poll once until interrupted or events are ready to be dispatched.
+  BOOST_ASIO_DECL void run(bool block, op_queue<operation>& ops);
+
+  // Interrupt the select loop.
+  BOOST_ASIO_DECL void interrupt();
+
+private:
+  // Create the /dev/poll file descriptor. Throws an exception if the descriptor
+  // cannot be created.
+  BOOST_ASIO_DECL static int do_dev_poll_create();
+
+  // Helper function to add a new timer queue.
+  BOOST_ASIO_DECL void do_add_timer_queue(timer_queue_base& queue);
+
+  // Helper function to remove a timer queue.
+  BOOST_ASIO_DECL void do_remove_timer_queue(timer_queue_base& queue);
+
+  // Get the timeout value for the /dev/poll DP_POLL operation. The timeout
+  // value is returned as a number of milliseconds. A return value of -1
+  // indicates that the poll should block indefinitely.
+  BOOST_ASIO_DECL int get_timeout();
+
+  // Cancel all operations associated with the given descriptor. The do_cancel
+  // function of the handler objects will be invoked. This function does not
+  // acquire the dev_poll_reactor's mutex.
+  BOOST_ASIO_DECL void cancel_ops_unlocked(socket_type descriptor,
+      const boost::system::error_code& ec);
+
+  // Helper class used to reregister descriptors after a fork.
+  class fork_helper;
+  friend class fork_helper;
+
+  // Add a pending event entry for the given descriptor.
+  BOOST_ASIO_DECL ::pollfd& add_pending_event_change(int descriptor);
+
+  // The io_service implementation used to post completions.
+  io_service_impl& io_service_;
+
+  // Mutex to protect access to internal data.
+  boost::asio::detail::mutex mutex_;
+
+  // The /dev/poll file descriptor.
+  int dev_poll_fd_;
+
+  // Vector of /dev/poll events waiting to be written to the descriptor.
+  std::vector< ::pollfd> pending_event_changes_;
+
+  // Hash map to associate a descriptor with a pending event change index.
+  hash_map<int, std::size_t> pending_event_change_index_;
+
+  // The interrupter is used to break a blocking DP_POLL operation.
+  select_interrupter interrupter_;
+
+  // The queues of read, write and except operations.
+  reactor_op_queue<socket_type> op_queue_[max_ops];
+
+  // The timer queues.
+  timer_queue_set timer_queues_;
+
+  // Whether the service has been shut down.
+  bool shutdown_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/detail/impl/dev_poll_reactor.hpp>
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/dev_poll_reactor.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_HAS_DEV_POLL)
+
+#endif // BOOST_ASIO_DETAIL_DEV_POLL_REACTOR_HPP
diff --git a/ext/patches/boost/asio/detail/epoll_reactor.hpp b/ext/patches/boost/asio/detail/epoll_reactor.hpp
new file mode 100644
index 0000000..c8b86fb
--- /dev/null
+++ b/ext/patches/boost/asio/detail/epoll_reactor.hpp
@@ -0,0 +1,244 @@
+//
+// detail/epoll_reactor.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_EPOLL_REACTOR_HPP
+#define BOOST_ASIO_DETAIL_EPOLL_REACTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_EPOLL)
+
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/detail/atomic_count.hpp>
+#include <boost/asio/detail/limits.hpp>
+#include <boost/asio/detail/mutex.hpp>
+#include <boost/asio/detail/object_pool.hpp>
+#include <boost/asio/detail/op_queue.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/select_interrupter.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/timer_queue_base.hpp>
+#include <boost/asio/detail/timer_queue_set.hpp>
+#include <boost/asio/detail/wait_op.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class epoll_reactor
+  : public boost::asio::detail::service_base<epoll_reactor>
+{
+public:
+  enum op_types { read_op = 0, write_op = 1,
+    connect_op = 1, except_op = 2, max_ops = 3 };
+
+  // Per-descriptor queues.
+  class descriptor_state : operation
+  {
+    friend class epoll_reactor;
+    friend class object_pool_access;
+
+    descriptor_state* next_;
+    descriptor_state* prev_;
+
+    mutex mutex_;
+    epoll_reactor* reactor_;
+    int descriptor_;
+    uint32_t registered_events_;
+    op_queue<reactor_op> op_queue_[max_ops];
+    bool shutdown_;
+
+    BOOST_ASIO_DECL descriptor_state();
+    void set_ready_events(uint32_t events) { task_result_ = events; }
+    BOOST_ASIO_DECL operation* perform_io(uint32_t events);
+    BOOST_ASIO_DECL static void do_complete(
+        io_service_impl* owner, operation* base,
+        const boost::system::error_code& ec, std::size_t bytes_transferred);
+  };
+
+  // Per-descriptor data.
+  typedef descriptor_state* per_descriptor_data;
+
+  // Constructor.
+  BOOST_ASIO_DECL epoll_reactor(boost::asio::io_service& io_service);
+
+  // Destructor.
+  BOOST_ASIO_DECL ~epoll_reactor();
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Recreate internal descriptors following a fork.
+  BOOST_ASIO_DECL void fork_service(
+      boost::asio::io_service::fork_event fork_ev);
+
+  // Initialise the task.
+  BOOST_ASIO_DECL void init_task();
+
+  // Register a socket with the reactor. Returns 0 on success, system error
+  // code on failure.
+  BOOST_ASIO_DECL int register_descriptor(socket_type descriptor,
+      per_descriptor_data& descriptor_data);
+
+  // Register a descriptor with an associated single operation. Returns 0 on
+  // success, system error code on failure.
+  BOOST_ASIO_DECL int register_internal_descriptor(
+      int op_type, socket_type descriptor,
+      per_descriptor_data& descriptor_data, reactor_op* op);
+
+  // Move descriptor registration from one descriptor_data object to another.
+  BOOST_ASIO_DECL void move_descriptor(socket_type descriptor,
+      per_descriptor_data& target_descriptor_data,
+      per_descriptor_data& source_descriptor_data);
+
+  // Post a reactor operation for immediate completion.
+  void post_immediate_completion(reactor_op* op, bool is_continuation)
+  {
+    io_service_.post_immediate_completion(op, is_continuation);
+  }
+
+  // Start a new operation. The reactor operation will be performed when the
+  // given descriptor is flagged as ready, or an error has occurred.
+  BOOST_ASIO_DECL void start_op(int op_type, socket_type descriptor,
+      per_descriptor_data& descriptor_data, reactor_op* op,
+      bool is_continuation, bool allow_speculative);
+
+  // Cancel all operations associated with the given descriptor. The
+  // handlers associated with the descriptor will be invoked with the
+  // operation_aborted error.
+  BOOST_ASIO_DECL void cancel_ops(socket_type descriptor,
+      per_descriptor_data& descriptor_data);
+
+  // Cancel any operations that are running against the descriptor and remove
+  // its registration from the reactor.
+  BOOST_ASIO_DECL void deregister_descriptor(socket_type descriptor,
+      per_descriptor_data& descriptor_data, bool closing);
+
+  // Remote the descriptor's registration from the reactor.
+  BOOST_ASIO_DECL void deregister_internal_descriptor(
+      socket_type descriptor, per_descriptor_data& descriptor_data);
+
+  // Add a new timer queue to the reactor.
+  template <typename Time_Traits>
+  void add_timer_queue(timer_queue<Time_Traits>& timer_queue);
+
+  // Remove a timer queue from the reactor.
+  template <typename Time_Traits>
+  void remove_timer_queue(timer_queue<Time_Traits>& timer_queue);
+
+  // Schedule a new operation in the given timer queue to expire at the
+  // specified absolute time.
+  template <typename Time_Traits>
+  void schedule_timer(timer_queue<Time_Traits>& queue,
+      const typename Time_Traits::time_type& time,
+      typename timer_queue<Time_Traits>::per_timer_data& timer, wait_op* op);
+
+  // Cancel the timer operations associated with the given token. Returns the
+  // number of operations that have been posted or dispatched.
+  template <typename Time_Traits>
+  std::size_t cancel_timer(timer_queue<Time_Traits>& queue,
+      typename timer_queue<Time_Traits>::per_timer_data& timer,
+      std::size_t max_cancelled = (std::numeric_limits<std::size_t>::max)());
+
+  // Run epoll once until interrupted or events are ready to be dispatched.
+  BOOST_ASIO_DECL void run(bool block, op_queue<operation>& ops);
+
+  // Interrupt the select loop.
+  BOOST_ASIO_DECL void interrupt();
+
+private:
+  // The hint to pass to epoll_create to size its data structures.
+  enum { epoll_size = 20000 };
+
+  // Create the epoll file descriptor. Throws an exception if the descriptor
+  // cannot be created.
+  BOOST_ASIO_DECL static int do_epoll_create();
+
+  // Create the timerfd file descriptor. Does not throw.
+  BOOST_ASIO_DECL static int do_timerfd_create();
+
+  // Allocate a new descriptor state object.
+  BOOST_ASIO_DECL descriptor_state* allocate_descriptor_state();
+
+  // Free an existing descriptor state object.
+  BOOST_ASIO_DECL void free_descriptor_state(descriptor_state* s);
+
+  // Helper function to add a new timer queue.
+  BOOST_ASIO_DECL void do_add_timer_queue(timer_queue_base& queue);
+
+  // Helper function to remove a timer queue.
+  BOOST_ASIO_DECL void do_remove_timer_queue(timer_queue_base& queue);
+
+  // Called to recalculate and update the timeout.
+  BOOST_ASIO_DECL void update_timeout();
+
+  // Get the timeout value for the epoll_wait call. The timeout value is
+  // returned as a number of milliseconds. A return value of -1 indicates
+  // that epoll_wait should block indefinitely.
+  BOOST_ASIO_DECL int get_timeout();
+
+#if defined(BOOST_ASIO_HAS_TIMERFD)
+  // Get the timeout value for the timer descriptor. The return value is the
+  // flag argument to be used when calling timerfd_settime.
+  BOOST_ASIO_DECL int get_timeout(itimerspec& ts);
+#endif // defined(BOOST_ASIO_HAS_TIMERFD)
+
+  // The io_service implementation used to post completions.
+  io_service_impl& io_service_;
+
+  // Mutex to protect access to internal data.
+  mutex mutex_;
+
+  // The interrupter is used to break a blocking epoll_wait call.
+  select_interrupter interrupter_;
+
+  // The epoll file descriptor.
+  int epoll_fd_;
+
+  // The timer file descriptor.
+  int timer_fd_;
+
+  // The timer queues.
+  timer_queue_set timer_queues_;
+
+  // Whether the service has been shut down.
+  bool shutdown_;
+
+  // Mutex to protect access to the registered descriptors.
+  mutex registered_descriptors_mutex_;
+
+  // Keep track of all registered descriptors.
+  object_pool<descriptor_state> registered_descriptors_;
+
+  // Helper class to do post-perform_io cleanup.
+  struct perform_io_cleanup_on_block_exit;
+  friend struct perform_io_cleanup_on_block_exit;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/detail/impl/epoll_reactor.hpp>
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/epoll_reactor.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_HAS_EPOLL)
+
+#endif // BOOST_ASIO_DETAIL_EPOLL_REACTOR_HPP
diff --git a/ext/patches/boost/asio/detail/event.hpp b/ext/patches/boost/asio/detail/event.hpp
new file mode 100644
index 0000000..013bb88
--- /dev/null
+++ b/ext/patches/boost/asio/detail/event.hpp
@@ -0,0 +1,50 @@
+//
+// detail/event.hpp
+// ~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_EVENT_HPP
+#define BOOST_ASIO_DETAIL_EVENT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_THREADS)
+# include <boost/asio/detail/null_event.hpp>
+#elif defined(BOOST_ASIO_WINDOWS)
+# include <boost/asio/detail/win_event.hpp>
+#elif defined(BOOST_ASIO_HAS_PTHREADS)
+# include <boost/asio/detail/posix_event.hpp>
+#elif defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+# include <boost/asio/detail/std_event.hpp>
+#else
+# error Only Windows, POSIX and std::condition_variable are supported!
+#endif
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if !defined(BOOST_ASIO_HAS_THREADS)
+typedef null_event event;
+#elif defined(BOOST_ASIO_WINDOWS)
+typedef win_event event;
+#elif defined(BOOST_ASIO_HAS_PTHREADS)
+typedef posix_event event;
+#elif defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+typedef std_event event;
+#endif
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_EVENT_HPP
diff --git a/ext/patches/boost/asio/detail/eventfd_select_interrupter.hpp b/ext/patches/boost/asio/detail/eventfd_select_interrupter.hpp
new file mode 100644
index 0000000..5e67b34
--- /dev/null
+++ b/ext/patches/boost/asio/detail/eventfd_select_interrupter.hpp
@@ -0,0 +1,85 @@
+//
+// detail/eventfd_select_interrupter.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2008 Roelof Naude (roelof.naude at gmail dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_EVENTFD_SELECT_INTERRUPTER_HPP
+#define BOOST_ASIO_DETAIL_EVENTFD_SELECT_INTERRUPTER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_EVENTFD)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class eventfd_select_interrupter
+{
+public:
+  // Constructor.
+  BOOST_ASIO_DECL eventfd_select_interrupter();
+
+  // Destructor.
+  BOOST_ASIO_DECL ~eventfd_select_interrupter();
+
+  // Recreate the interrupter's descriptors. Used after a fork.
+  BOOST_ASIO_DECL void recreate();
+
+  // Interrupt the select call.
+  BOOST_ASIO_DECL void interrupt();
+
+  // Reset the select interrupt. Returns true if the call was interrupted.
+  BOOST_ASIO_DECL bool reset();
+
+  // Get the read descriptor to be passed to select.
+  int read_descriptor() const
+  {
+    return read_descriptor_;
+  }
+
+private:
+  // Open the descriptors. Throws on error.
+  BOOST_ASIO_DECL void open_descriptors();
+
+  // Close the descriptors.
+  BOOST_ASIO_DECL void close_descriptors();
+
+  // The read end of a connection used to interrupt the select call. This file
+  // descriptor is passed to select such that when it is time to stop, a single
+  // 64bit value will be written on the other end of the connection and this
+  // descriptor will become readable.
+  int read_descriptor_;
+
+  // The write end of a connection used to interrupt the select call. A single
+  // 64bit non-zero value may be written to this to wake up the select which is
+  // waiting for the other end to become readable. This descriptor will only
+  // differ from the read descriptor when a pipe is used.
+  int write_descriptor_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/eventfd_select_interrupter.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_HAS_EVENTFD)
+
+#endif // BOOST_ASIO_DETAIL_EVENTFD_SELECT_INTERRUPTER_HPP
diff --git a/ext/patches/boost/asio/detail/fd_set_adapter.hpp b/ext/patches/boost/asio/detail/fd_set_adapter.hpp
new file mode 100644
index 0000000..14a7e37
--- /dev/null
+++ b/ext/patches/boost/asio/detail/fd_set_adapter.hpp
@@ -0,0 +1,41 @@
+//
+// detail/fd_set_adapter.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_FD_SET_ADAPTER_HPP
+#define BOOST_ASIO_DETAIL_FD_SET_ADAPTER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/detail/posix_fd_set_adapter.hpp>
+#include <boost/asio/detail/win_fd_set_adapter.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+typedef win_fd_set_adapter fd_set_adapter;
+#else
+typedef posix_fd_set_adapter fd_set_adapter;
+#endif
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_FD_SET_ADAPTER_HPP
diff --git a/ext/patches/boost/asio/detail/fenced_block.hpp b/ext/patches/boost/asio/detail/fenced_block.hpp
new file mode 100644
index 0000000..af5a337
--- /dev/null
+++ b/ext/patches/boost/asio/detail/fenced_block.hpp
@@ -0,0 +1,78 @@
+//
+// detail/fenced_block.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_FENCED_BLOCK_HPP
+#define BOOST_ASIO_DETAIL_FENCED_BLOCK_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_THREADS) \
+  || defined(BOOST_ASIO_DISABLE_FENCED_BLOCK)
+# include <boost/asio/detail/null_fenced_block.hpp>
+#elif defined(__MACH__) && defined(__APPLE__)
+# include <boost/asio/detail/macos_fenced_block.hpp>
+#elif defined(__sun)
+# include <boost/asio/detail/solaris_fenced_block.hpp>
+#elif defined(__GNUC__) && defined(__arm__) \
+  && !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
+# include <boost/asio/detail/gcc_arm_fenced_block.hpp>
+#elif defined(__GNUC__) && (defined(__hppa) || defined(__hppa__))
+# include <boost/asio/detail/gcc_hppa_fenced_block.hpp>
+#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+# include <boost/asio/detail/gcc_x86_fenced_block.hpp>
+#elif defined(__GNUC__) \
+  && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)) \
+  && !defined(__INTEL_COMPILER) && !defined(__ICL) \
+  && !defined(__ICC) && !defined(__ECC) && !defined(__PATHSCALE__)
+# include <boost/asio/detail/gcc_sync_fenced_block.hpp>
+#elif defined(BOOST_ASIO_WINDOWS) && !defined(UNDER_CE)
+# include <boost/asio/detail/win_fenced_block.hpp>
+#else
+# include <boost/asio/detail/null_fenced_block.hpp>
+#endif
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if !defined(BOOST_ASIO_HAS_THREADS) \
+  || defined(BOOST_ASIO_DISABLE_FENCED_BLOCK)
+typedef null_fenced_block fenced_block;
+#elif defined(__MACH__) && defined(__APPLE__)
+typedef macos_fenced_block fenced_block;
+#elif defined(__sun)
+typedef solaris_fenced_block fenced_block;
+#elif defined(__GNUC__) && defined(__arm__) \
+  && !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
+typedef gcc_arm_fenced_block fenced_block;
+#elif defined(__GNUC__) && (defined(__hppa) || defined(__hppa__))
+typedef gcc_hppa_fenced_block fenced_block;
+#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+typedef gcc_x86_fenced_block fenced_block;
+#elif defined(__GNUC__) \
+  && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)) \
+  && !defined(__INTEL_COMPILER) && !defined(__ICL) \
+  && !defined(__ICC) && !defined(__ECC) && !defined(__PATHSCALE__)
+typedef gcc_sync_fenced_block fenced_block;
+#elif defined(BOOST_ASIO_WINDOWS) && !defined(UNDER_CE)
+typedef win_fenced_block fenced_block;
+#else
+typedef null_fenced_block fenced_block;
+#endif
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_FENCED_BLOCK_HPP
diff --git a/ext/patches/boost/asio/detail/function.hpp b/ext/patches/boost/asio/detail/function.hpp
new file mode 100644
index 0000000..b17edd3
--- /dev/null
+++ b/ext/patches/boost/asio/detail/function.hpp
@@ -0,0 +1,40 @@
+//
+// detail/function.hpp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_FUNCTION_HPP
+#define BOOST_ASIO_DETAIL_FUNCTION_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_STD_FUNCTION)
+# include <functional>
+#else // defined(BOOST_ASIO_HAS_STD_FUNCTION)
+# include <boost/function.hpp>
+#endif // defined(BOOST_ASIO_HAS_STD_FUNCTION)
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if defined(BOOST_ASIO_HAS_STD_FUNCTION)
+using std::function;
+#else // defined(BOOST_ASIO_HAS_STD_FUNCTION)
+using boost::function;
+#endif // defined(BOOST_ASIO_HAS_STD_FUNCTION)
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_FUNCTION_HPP
diff --git a/ext/patches/boost/asio/detail/gcc_arm_fenced_block.hpp b/ext/patches/boost/asio/detail/gcc_arm_fenced_block.hpp
new file mode 100644
index 0000000..8017eb1
--- /dev/null
+++ b/ext/patches/boost/asio/detail/gcc_arm_fenced_block.hpp
@@ -0,0 +1,91 @@
+//
+// detail/gcc_arm_fenced_block.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_GCC_ARM_FENCED_BLOCK_HPP
+#define BOOST_ASIO_DETAIL_GCC_ARM_FENCED_BLOCK_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(__GNUC__) && defined(__arm__)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class gcc_arm_fenced_block
+  : private noncopyable
+{
+public:
+  enum half_t { half };
+  enum full_t { full };
+
+  // Constructor for a half fenced block.
+  explicit gcc_arm_fenced_block(half_t)
+  {
+  }
+
+  // Constructor for a full fenced block.
+  explicit gcc_arm_fenced_block(full_t)
+  {
+    barrier();
+  }
+
+  // Destructor.
+  ~gcc_arm_fenced_block()
+  {
+    barrier();
+  }
+
+private:
+  static void barrier()
+  {
+#if defined(__ARM_ARCH_4__) \
+    || defined(__ARM_ARCH_4T__) \
+    || defined(__ARM_ARCH_5__) \
+    || defined(__ARM_ARCH_5E__) \
+    || defined(__ARM_ARCH_5T__) \
+    || defined(__ARM_ARCH_5TE__) \
+    || defined(__ARM_ARCH_5TEJ__) \
+    || defined(__ARM_ARCH_6__) \
+    || defined(__ARM_ARCH_6J__) \
+    || defined(__ARM_ARCH_6K__) \
+    || defined(__ARM_ARCH_6Z__) \
+    || defined(__ARM_ARCH_6ZK__) \
+    || defined(__ARM_ARCH_6T2__)
+# if defined(__thumb__)
+    // This is just a placeholder and almost certainly not sufficient.
+    __asm__ __volatile__ ("" : : : "memory");
+# else // defined(__thumb__)
+    int a = 0, b = 0;
+    __asm__ __volatile__ ("swp %0, %1, [%2]"
+        : "=&r"(a) : "r"(1), "r"(&b) : "memory", "cc");
+# endif // defined(__thumb__)
+#else
+    // ARMv7 and later.
+    __asm__ __volatile__ ("dmb" : : : "memory");
+#endif
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(__GNUC__) && defined(__arm__)
+
+#endif // BOOST_ASIO_DETAIL_GCC_ARM_FENCED_BLOCK_HPP
diff --git a/ext/patches/boost/asio/detail/gcc_hppa_fenced_block.hpp b/ext/patches/boost/asio/detail/gcc_hppa_fenced_block.hpp
new file mode 100644
index 0000000..ebe10e1
--- /dev/null
+++ b/ext/patches/boost/asio/detail/gcc_hppa_fenced_block.hpp
@@ -0,0 +1,68 @@
+//
+// detail/gcc_hppa_fenced_block.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_GCC_HPPA_FENCED_BLOCK_HPP
+#define BOOST_ASIO_DETAIL_GCC_HPPA_FENCED_BLOCK_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(__GNUC__) && (defined(__hppa) || defined(__hppa__))
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class gcc_hppa_fenced_block
+  : private noncopyable
+{
+public:
+  enum half_t { half };
+  enum full_t { full };
+
+  // Constructor for a half fenced block.
+  explicit gcc_hppa_fenced_block(half_t)
+  {
+  }
+
+  // Constructor for a full fenced block.
+  explicit gcc_hppa_fenced_block(full_t)
+  {
+    barrier();
+  }
+
+  // Destructor.
+  ~gcc_hppa_fenced_block()
+  {
+    barrier();
+  }
+
+private:
+  static void barrier()
+  {
+    // This is just a placeholder and almost certainly not sufficient.
+    __asm__ __volatile__ ("" : : : "memory");
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(__GNUC__) && (defined(__hppa) || defined(__hppa__))
+
+#endif // BOOST_ASIO_DETAIL_GCC_HPPA_FENCED_BLOCK_HPP
diff --git a/ext/patches/boost/asio/detail/gcc_sync_fenced_block.hpp b/ext/patches/boost/asio/detail/gcc_sync_fenced_block.hpp
new file mode 100644
index 0000000..ff968ef
--- /dev/null
+++ b/ext/patches/boost/asio/detail/gcc_sync_fenced_block.hpp
@@ -0,0 +1,65 @@
+//
+// detail/gcc_sync_fenced_block.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_GCC_SYNC_FENCED_BLOCK_HPP
+#define BOOST_ASIO_DETAIL_GCC_SYNC_FENCED_BLOCK_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(__GNUC__) \
+  && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)) \
+  && !defined(__INTEL_COMPILER) && !defined(__ICL) \
+  && !defined(__ICC) && !defined(__ECC) && !defined(__PATHSCALE__)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class gcc_sync_fenced_block
+  : private noncopyable
+{
+public:
+  enum half_or_full_t { half, full };
+
+  // Constructor.
+  explicit gcc_sync_fenced_block(half_or_full_t)
+    : value_(0)
+  {
+    __sync_lock_test_and_set(&value_, 1);
+  }
+
+  // Destructor.
+  ~gcc_sync_fenced_block()
+  {
+    __sync_lock_release(&value_);
+  }
+
+private:
+  int value_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(__GNUC__)
+       // && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4))
+       // && !defined(__INTEL_COMPILER) && !defined(__ICL)
+       // && !defined(__ICC) && !defined(__ECC) && !defined(__PATHSCALE__)
+
+#endif // BOOST_ASIO_DETAIL_GCC_SYNC_FENCED_BLOCK_HPP
diff --git a/ext/patches/boost/asio/detail/gcc_x86_fenced_block.hpp b/ext/patches/boost/asio/detail/gcc_x86_fenced_block.hpp
new file mode 100644
index 0000000..b0f4639
--- /dev/null
+++ b/ext/patches/boost/asio/detail/gcc_x86_fenced_block.hpp
@@ -0,0 +1,99 @@
+//
+// detail/gcc_x86_fenced_block.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_GCC_X86_FENCED_BLOCK_HPP
+#define BOOST_ASIO_DETAIL_GCC_X86_FENCED_BLOCK_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class gcc_x86_fenced_block
+  : private noncopyable
+{
+public:
+  enum half_t { half };
+  enum full_t { full };
+
+  // Constructor for a half fenced block.
+  explicit gcc_x86_fenced_block(half_t)
+  {
+  }
+
+  // Constructor for a full fenced block.
+  explicit gcc_x86_fenced_block(full_t)
+  {
+    lbarrier();
+  }
+
+  // Destructor.
+  ~gcc_x86_fenced_block()
+  {
+    sbarrier();
+  }
+
+private:
+  static int barrier()
+  {
+    int r = 0, m = 1;
+    __asm__ __volatile__ (
+        "xchgl %0, %1" :
+        "=r"(r), "=m"(m) :
+        "0"(1), "m"(m) :
+        "memory", "cc");
+    return r;
+  }
+
+  static void lbarrier()
+  {
+#if defined(__SSE2__)
+# if (__GNUC__ >= 4) && !defined(__INTEL_COMPILER) && !defined(__ICL)
+    __builtin_ia32_lfence();
+# else // (__GNUC__ >= 4) && !defined(__INTEL_COMPILER) && !defined(__ICL)
+    __asm__ __volatile__ ("lfence" ::: "memory");
+# endif // (__GNUC__ >= 4) && !defined(__INTEL_COMPILER) && !defined(__ICL)
+#else // defined(__SSE2__)
+    barrier();
+#endif // defined(__SSE2__)
+  }
+
+  static void sbarrier()
+  {
+#if defined(__SSE2__)
+# if (__GNUC__ >= 4) && !defined(__INTEL_COMPILER) && !defined(__ICL)
+    __builtin_ia32_sfence();
+# else // (__GNUC__ >= 4) && !defined(__INTEL_COMPILER) && !defined(__ICL)
+    __asm__ __volatile__ ("sfence" ::: "memory");
+# endif // (__GNUC__ >= 4) && !defined(__INTEL_COMPILER) && !defined(__ICL)
+#else // defined(__SSE2__)
+    barrier();
+#endif // defined(__SSE2__)
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+
+#endif // BOOST_ASIO_DETAIL_GCC_X86_FENCED_BLOCK_HPP
diff --git a/ext/patches/boost/asio/detail/handler_alloc_helpers.hpp b/ext/patches/boost/asio/detail/handler_alloc_helpers.hpp
new file mode 100644
index 0000000..9620f9b
--- /dev/null
+++ b/ext/patches/boost/asio/detail/handler_alloc_helpers.hpp
@@ -0,0 +1,82 @@
+//
+// detail/handler_alloc_helpers.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_HANDLER_ALLOC_HELPERS_HPP
+#define BOOST_ASIO_DETAIL_HANDLER_ALLOC_HELPERS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/handler_alloc_hook.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+// Calls to asio_handler_allocate and asio_handler_deallocate must be made from
+// a namespace that does not contain any overloads of these functions. The
+// boost_asio_handler_alloc_helpers namespace is defined here for that purpose.
+namespace boost_asio_handler_alloc_helpers {
+
+template <typename Handler>
+inline void* allocate(std::size_t s, Handler& h)
+{
+#if !defined(BOOST_ASIO_HAS_HANDLER_HOOKS)
+  return ::operator new(s);
+#else
+  using boost::asio::asio_handler_allocate;
+  return asio_handler_allocate(s, boost::asio::detail::addressof(h));
+#endif
+}
+
+template <typename Handler>
+inline void deallocate(void* p, std::size_t s, Handler& h)
+{
+#if !defined(BOOST_ASIO_HAS_HANDLER_HOOKS)
+  ::operator delete(p);
+#else
+  using boost::asio::asio_handler_deallocate;
+  asio_handler_deallocate(p, s, boost::asio::detail::addressof(h));
+#endif
+}
+
+} // namespace boost_asio_handler_alloc_helpers
+
+#define BOOST_ASIO_DEFINE_HANDLER_PTR(op) \
+  struct ptr \
+  { \
+    Handler* h; \
+    void* v; \
+    op* p; \
+    ~ptr() \
+    { \
+      reset(); \
+    } \
+    void reset() \
+    { \
+      if (p) \
+      { \
+        p->~op(); \
+        p = 0; \
+      } \
+      if (v) \
+      { \
+        boost_asio_handler_alloc_helpers::deallocate(v, sizeof(op), *h); \
+        v = 0; \
+      } \
+    } \
+  } \
+  /**/
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_HANDLER_ALLOC_HELPERS_HPP
diff --git a/ext/patches/boost/asio/detail/handler_cont_helpers.hpp b/ext/patches/boost/asio/detail/handler_cont_helpers.hpp
new file mode 100644
index 0000000..29ea02d
--- /dev/null
+++ b/ext/patches/boost/asio/detail/handler_cont_helpers.hpp
@@ -0,0 +1,45 @@
+//
+// detail/handler_cont_helpers.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_HANDLER_CONT_HELPERS_HPP
+#define BOOST_ASIO_DETAIL_HANDLER_CONT_HELPERS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/handler_continuation_hook.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+// Calls to asio_handler_is_continuation must be made from a namespace that
+// does not contain overloads of this function. This namespace is defined here
+// for that purpose.
+namespace boost_asio_handler_cont_helpers {
+
+template <typename Context>
+inline bool is_continuation(Context& context)
+{
+#if !defined(BOOST_ASIO_HAS_HANDLER_HOOKS)
+  return false;
+#else
+  using boost::asio::asio_handler_is_continuation;
+  return asio_handler_is_continuation(
+      boost::asio::detail::addressof(context));
+#endif
+}
+
+} // namespace boost_asio_handler_cont_helpers
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_HANDLER_CONT_HELPERS_HPP
diff --git a/ext/patches/boost/asio/detail/handler_invoke_helpers.hpp b/ext/patches/boost/asio/detail/handler_invoke_helpers.hpp
new file mode 100644
index 0000000..956f93f
--- /dev/null
+++ b/ext/patches/boost/asio/detail/handler_invoke_helpers.hpp
@@ -0,0 +1,57 @@
+//
+// detail/handler_invoke_helpers.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_HANDLER_INVOKE_HELPERS_HPP
+#define BOOST_ASIO_DETAIL_HANDLER_INVOKE_HELPERS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/handler_invoke_hook.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+// Calls to asio_handler_invoke must be made from a namespace that does not
+// contain overloads of this function. The boost_asio_handler_invoke_helpers
+// namespace is defined here for that purpose.
+namespace boost_asio_handler_invoke_helpers {
+
+template <typename Function, typename Context>
+inline void invoke(Function& function, Context& context)
+{
+#if !defined(BOOST_ASIO_HAS_HANDLER_HOOKS)
+  Function tmp(function);
+  tmp();
+#else
+  using boost::asio::asio_handler_invoke;
+  asio_handler_invoke(function, boost::asio::detail::addressof(context));
+#endif
+}
+
+template <typename Function, typename Context>
+inline void invoke(const Function& function, Context& context)
+{
+#if !defined(BOOST_ASIO_HAS_HANDLER_HOOKS)
+  Function tmp(function);
+  tmp();
+#else
+  using boost::asio::asio_handler_invoke;
+  asio_handler_invoke(function, boost::asio::detail::addressof(context));
+#endif
+}
+
+} // namespace boost_asio_handler_invoke_helpers
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_HANDLER_INVOKE_HELPERS_HPP
diff --git a/ext/patches/boost/asio/detail/handler_tracking.hpp b/ext/patches/boost/asio/detail/handler_tracking.hpp
new file mode 100644
index 0000000..c6e9ac4
--- /dev/null
+++ b/ext/patches/boost/asio/detail/handler_tracking.hpp
@@ -0,0 +1,161 @@
+//
+// detail/handler_tracking.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_HANDLER_TRACKING_HPP
+#define BOOST_ASIO_DETAIL_HANDLER_TRACKING_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_ENABLE_HANDLER_TRACKING)
+# include <boost/system/error_code.hpp>
+# include <boost/asio/detail/cstdint.hpp>
+# include <boost/asio/detail/static_mutex.hpp>
+# include <boost/asio/detail/tss_ptr.hpp>
+#endif // defined(BOOST_ASIO_ENABLE_HANDLER_TRACKING)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if defined(BOOST_ASIO_ENABLE_HANDLER_TRACKING)
+
+class handler_tracking
+{
+public:
+  class completion;
+
+  // Base class for objects containing tracked handlers.
+  class tracked_handler
+  {
+  private:
+    // Only the handler_tracking class will have access to the id.
+    friend class handler_tracking;
+    friend class completion;
+    uint64_t id_;
+
+  protected:
+    // Constructor initialises with no id.
+    tracked_handler() : id_(0) {}
+
+    // Prevent deletion through this type.
+    ~tracked_handler() {}
+  };
+
+  // Initialise the tracking system.
+  BOOST_ASIO_DECL static void init();
+
+  // Record the creation of a tracked handler.
+  BOOST_ASIO_DECL static void creation(tracked_handler* h,
+      const char* object_type, void* object, const char* op_name);
+
+  class completion
+  {
+  public:
+    // Constructor records that handler is to be invoked with no arguments.
+    BOOST_ASIO_DECL explicit completion(tracked_handler* h);
+
+    // Destructor records only when an exception is thrown from the handler, or
+    // if the memory is being freed without the handler having been invoked.
+    BOOST_ASIO_DECL ~completion();
+
+    // Records that handler is to be invoked with no arguments.
+    BOOST_ASIO_DECL void invocation_begin();
+
+    // Records that handler is to be invoked with one arguments.
+    BOOST_ASIO_DECL void invocation_begin(const boost::system::error_code& ec);
+
+    // Constructor records that handler is to be invoked with two arguments.
+    BOOST_ASIO_DECL void invocation_begin(
+        const boost::system::error_code& ec, std::size_t bytes_transferred);
+
+    // Constructor records that handler is to be invoked with two arguments.
+    BOOST_ASIO_DECL void invocation_begin(
+        const boost::system::error_code& ec, int signal_number);
+
+    // Constructor records that handler is to be invoked with two arguments.
+    BOOST_ASIO_DECL void invocation_begin(
+        const boost::system::error_code& ec, const char* arg);
+
+    // Record that handler invocation has ended.
+    BOOST_ASIO_DECL void invocation_end();
+
+  private:
+    friend class handler_tracking;
+    uint64_t id_;
+    bool invoked_;
+    completion* next_;
+  };
+
+  // Record an operation that affects pending handlers.
+  BOOST_ASIO_DECL static void operation(const char* object_type,
+      void* object, const char* op_name);
+
+  // Write a line of output.
+  BOOST_ASIO_DECL static void write_line(const char* format, ...);
+
+private:
+  struct tracking_state;
+  BOOST_ASIO_DECL static tracking_state* get_state();
+};
+
+# define BOOST_ASIO_INHERIT_TRACKED_HANDLER \
+  : public boost::asio::detail::handler_tracking::tracked_handler
+
+# define BOOST_ASIO_ALSO_INHERIT_TRACKED_HANDLER \
+  , public boost::asio::detail::handler_tracking::tracked_handler
+
+# define BOOST_ASIO_HANDLER_TRACKING_INIT \
+  boost::asio::detail::handler_tracking::init()
+
+# define BOOST_ASIO_HANDLER_CREATION(args) \
+  boost::asio::detail::handler_tracking::creation args
+
+# define BOOST_ASIO_HANDLER_COMPLETION(args) \
+  boost::asio::detail::handler_tracking::completion tracked_completion args
+
+# define BOOST_ASIO_HANDLER_INVOCATION_BEGIN(args) \
+  tracked_completion.invocation_begin args
+
+# define BOOST_ASIO_HANDLER_INVOCATION_END \
+  tracked_completion.invocation_end()
+
+# define BOOST_ASIO_HANDLER_OPERATION(args) \
+  boost::asio::detail::handler_tracking::operation args
+
+#else // defined(BOOST_ASIO_ENABLE_HANDLER_TRACKING)
+
+# define BOOST_ASIO_INHERIT_TRACKED_HANDLER
+# define BOOST_ASIO_ALSO_INHERIT_TRACKED_HANDLER
+# define BOOST_ASIO_HANDLER_TRACKING_INIT (void)0
+# define BOOST_ASIO_HANDLER_CREATION(args) (void)0
+# define BOOST_ASIO_HANDLER_COMPLETION(args) (void)0
+# define BOOST_ASIO_HANDLER_INVOCATION_BEGIN(args) (void)0
+# define BOOST_ASIO_HANDLER_INVOCATION_END (void)0
+# define BOOST_ASIO_HANDLER_OPERATION(args) (void)0
+
+#endif // defined(BOOST_ASIO_ENABLE_HANDLER_TRACKING)
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/handler_tracking.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_DETAIL_HANDLER_TRACKING_HPP
diff --git a/ext/patches/boost/asio/detail/handler_type_requirements.hpp b/ext/patches/boost/asio/detail/handler_type_requirements.hpp
new file mode 100644
index 0000000..406889a
--- /dev/null
+++ b/ext/patches/boost/asio/detail/handler_type_requirements.hpp
@@ -0,0 +1,490 @@
+//
+// detail/handler_type_requirements.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_HANDLER_TYPE_REQUIREMENTS_HPP
+#define BOOST_ASIO_DETAIL_HANDLER_TYPE_REQUIREMENTS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+// Older versions of gcc have difficulty compiling the sizeof expressions where
+// we test the handler type requirements. We'll disable checking of handler type
+// requirements for those compilers, but otherwise enable it by default.
+#if !defined(BOOST_ASIO_DISABLE_HANDLER_TYPE_REQUIREMENTS)
+# if !defined(__GNUC__) || (__GNUC__ >= 4)
+#  define BOOST_ASIO_ENABLE_HANDLER_TYPE_REQUIREMENTS 1
+# endif // !defined(__GNUC__) || (__GNUC__ >= 4)
+#endif // !defined(BOOST_ASIO_DISABLE_HANDLER_TYPE_REQUIREMENTS)
+
+// With C++0x we can use a combination of enhanced SFINAE and static_assert to
+// generate better template error messages. As this technique is not yet widely
+// portable, we'll only enable it for tested compilers.
+#if !defined(BOOST_ASIO_DISABLE_HANDLER_TYPE_REQUIREMENTS_ASSERT)
+# if defined(__GNUC__)
+#  if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
+#   if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#    define BOOST_ASIO_ENABLE_HANDLER_TYPE_REQUIREMENTS_ASSERT 1
+#   endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
+#  endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
+# endif // defined(__GNUC__)
+# if defined(BOOST_ASIO_MSVC)
+#  if (_MSC_VER >= 1600)
+#   define BOOST_ASIO_ENABLE_HANDLER_TYPE_REQUIREMENTS_ASSERT 1
+#  endif // (_MSC_VER >= 1600)
+# endif // defined(BOOST_ASIO_MSVC)
+# if defined(__clang__)
+#  if __has_feature(__cxx_static_assert__)
+#   define BOOST_ASIO_ENABLE_HANDLER_TYPE_REQUIREMENTS_ASSERT 1
+#  endif // __has_feature(cxx_static_assert)
+# endif // defined(__clang__)
+#endif // !defined(BOOST_ASIO_DISABLE_HANDLER_TYPE_REQUIREMENTS)
+
+#if defined(BOOST_ASIO_ENABLE_HANDLER_TYPE_REQUIREMENTS)
+# include <boost/asio/handler_type.hpp>
+#endif // defined(BOOST_ASIO_ENABLE_HANDLER_TYPE_REQUIREMENTS)
+
+// Newer gcc needs special treatment to suppress unused typedef warnings.
+#if defined(__GNUC__)
+# if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)) || (__GNUC__ > 4)
+#  define BOOST_ASIO_UNUSED_TYPEDEF __attribute__((__unused__))
+# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)) || (__GNUC__ > 4)
+#endif // defined(__GNUC__)
+#if !defined(BOOST_ASIO_UNUSED_TYPEDEF)
+# define BOOST_ASIO_UNUSED_TYPEDEF
+#endif // !defined(BOOST_ASIO_UNUSED_TYPEDEF)
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if defined(BOOST_ASIO_ENABLE_HANDLER_TYPE_REQUIREMENTS)
+
+# if defined(BOOST_ASIO_ENABLE_HANDLER_TYPE_REQUIREMENTS_ASSERT)
+
+template <typename Handler>
+auto zero_arg_handler_test(Handler h, void*)
+  -> decltype(
+    sizeof(Handler(static_cast<const Handler&>(h))),
+    ((h)()),
+    char(0));
+
+template <typename Handler>
+char (&zero_arg_handler_test(Handler, ...))[2];
+
+template <typename Handler, typename Arg1>
+auto one_arg_handler_test(Handler h, Arg1* a1)
+  -> decltype(
+    sizeof(Handler(static_cast<const Handler&>(h))),
+    ((h)(*a1)),
+    char(0));
+
+template <typename Handler>
+char (&one_arg_handler_test(Handler h, ...))[2];
+
+template <typename Handler, typename Arg1, typename Arg2>
+auto two_arg_handler_test(Handler h, Arg1* a1, Arg2* a2)
+  -> decltype(
+    sizeof(Handler(static_cast<const Handler&>(h))),
+    ((h)(*a1, *a2)),
+    char(0));
+
+template <typename Handler>
+char (&two_arg_handler_test(Handler, ...))[2];
+
+#  define BOOST_ASIO_HANDLER_TYPE_REQUIREMENTS_ASSERT(expr, msg) \
+     static_assert(expr, msg);
+
+# else // defined(BOOST_ASIO_ENABLE_HANDLER_TYPE_REQUIREMENTS_ASSERT)
+
+#  define BOOST_ASIO_HANDLER_TYPE_REQUIREMENTS_ASSERT(expr, msg)
+
+# endif // defined(BOOST_ASIO_ENABLE_HANDLER_TYPE_REQUIREMENTS_ASSERT)
+
+template <typename T> T& lvref();
+template <typename T> T& lvref(T);
+template <typename T> const T& clvref();
+template <typename T> const T& clvref(T);
+template <typename T> char argbyv(T);
+
+template <int>
+struct handler_type_requirements
+{
+};
+
+#define BOOST_ASIO_COMPLETION_HANDLER_CHECK( \
+    handler_type, handler) \
+  \
+  typedef BOOST_ASIO_HANDLER_TYPE(handler_type, \
+      void()) asio_true_handler_type; \
+  \
+  BOOST_ASIO_HANDLER_TYPE_REQUIREMENTS_ASSERT( \
+      sizeof(boost::asio::detail::zero_arg_handler_test( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>(), 0)) == 1, \
+      "CompletionHandler type requirements not met") \
+  \
+  typedef boost::asio::detail::handler_type_requirements< \
+      sizeof( \
+        boost::asio::detail::argbyv( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>())) + \
+      sizeof( \
+        boost::asio::detail::lvref< \
+          asio_true_handler_type>()(), \
+        char(0))> BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_READ_HANDLER_CHECK( \
+    handler_type, handler) \
+  \
+  typedef BOOST_ASIO_HANDLER_TYPE(handler_type, \
+      void(boost::system::error_code, std::size_t)) \
+    asio_true_handler_type; \
+  \
+  BOOST_ASIO_HANDLER_TYPE_REQUIREMENTS_ASSERT( \
+      sizeof(boost::asio::detail::two_arg_handler_test( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>(), \
+          static_cast<const boost::system::error_code*>(0), \
+          static_cast<const std::size_t*>(0))) == 1, \
+      "ReadHandler type requirements not met") \
+  \
+  typedef boost::asio::detail::handler_type_requirements< \
+      sizeof( \
+        boost::asio::detail::argbyv( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>())) + \
+      sizeof( \
+        boost::asio::detail::lvref< \
+          asio_true_handler_type>()( \
+            boost::asio::detail::lvref<const boost::system::error_code>(), \
+            boost::asio::detail::lvref<const std::size_t>()), \
+        char(0))> BOOST_ASIO_UNUSED_TYPEDEF
+
+
+#define BOOST_ASIO_WRITE_HANDLER_CHECK( \
+    handler_type, handler) \
+  \
+  typedef BOOST_ASIO_HANDLER_TYPE(handler_type, \
+      void(boost::system::error_code, std::size_t)) \
+    asio_true_handler_type; \
+  \
+  BOOST_ASIO_HANDLER_TYPE_REQUIREMENTS_ASSERT( \
+      sizeof(boost::asio::detail::two_arg_handler_test( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>(), \
+          static_cast<const boost::system::error_code*>(0), \
+          static_cast<const std::size_t*>(0))) == 1, \
+      "WriteHandler type requirements not met") \
+  \
+  typedef boost::asio::detail::handler_type_requirements< \
+      sizeof( \
+        boost::asio::detail::argbyv( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>())) + \
+      sizeof( \
+        boost::asio::detail::lvref< \
+          asio_true_handler_type>()( \
+            boost::asio::detail::lvref<const boost::system::error_code>(), \
+            boost::asio::detail::lvref<const std::size_t>()), \
+        char(0))> BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_ACCEPT_HANDLER_CHECK( \
+    handler_type, handler) \
+  \
+  typedef BOOST_ASIO_HANDLER_TYPE(handler_type, \
+      void(boost::system::error_code)) \
+    asio_true_handler_type; \
+  \
+  BOOST_ASIO_HANDLER_TYPE_REQUIREMENTS_ASSERT( \
+      sizeof(boost::asio::detail::one_arg_handler_test( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>(), \
+          static_cast<const boost::system::error_code*>(0))) == 1, \
+      "AcceptHandler type requirements not met") \
+  \
+  typedef boost::asio::detail::handler_type_requirements< \
+      sizeof( \
+        boost::asio::detail::argbyv( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>())) + \
+      sizeof( \
+        boost::asio::detail::lvref< \
+          asio_true_handler_type>()( \
+            boost::asio::detail::lvref<const boost::system::error_code>()), \
+        char(0))> BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_CONNECT_HANDLER_CHECK( \
+    handler_type, handler) \
+  \
+  typedef BOOST_ASIO_HANDLER_TYPE(handler_type, \
+      void(boost::system::error_code)) \
+    asio_true_handler_type; \
+  \
+  BOOST_ASIO_HANDLER_TYPE_REQUIREMENTS_ASSERT( \
+      sizeof(boost::asio::detail::one_arg_handler_test( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>(), \
+          static_cast<const boost::system::error_code*>(0))) == 1, \
+      "ConnectHandler type requirements not met") \
+  \
+  typedef boost::asio::detail::handler_type_requirements< \
+      sizeof( \
+        boost::asio::detail::argbyv( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>())) + \
+      sizeof( \
+        boost::asio::detail::lvref< \
+          asio_true_handler_type>()( \
+            boost::asio::detail::lvref<const boost::system::error_code>()), \
+        char(0))> BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_COMPOSED_CONNECT_HANDLER_CHECK( \
+    handler_type, handler, iter_type) \
+  \
+  typedef BOOST_ASIO_HANDLER_TYPE(handler_type, \
+      void(boost::system::error_code, iter_type)) \
+    asio_true_handler_type; \
+  \
+  BOOST_ASIO_HANDLER_TYPE_REQUIREMENTS_ASSERT( \
+      sizeof(boost::asio::detail::two_arg_handler_test( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>(), \
+          static_cast<const boost::system::error_code*>(0), \
+          static_cast<const iter_type*>(0))) == 1, \
+      "ComposedConnectHandler type requirements not met") \
+  \
+  typedef boost::asio::detail::handler_type_requirements< \
+      sizeof( \
+        boost::asio::detail::argbyv( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>())) + \
+      sizeof( \
+        boost::asio::detail::lvref< \
+          asio_true_handler_type>()( \
+            boost::asio::detail::lvref<const boost::system::error_code>(), \
+            boost::asio::detail::lvref<const iter_type>()), \
+        char(0))> BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_RESOLVE_HANDLER_CHECK( \
+    handler_type, handler, iter_type) \
+  \
+  typedef BOOST_ASIO_HANDLER_TYPE(handler_type, \
+      void(boost::system::error_code, iter_type)) \
+    asio_true_handler_type; \
+  \
+  BOOST_ASIO_HANDLER_TYPE_REQUIREMENTS_ASSERT( \
+      sizeof(boost::asio::detail::two_arg_handler_test( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>(), \
+          static_cast<const boost::system::error_code*>(0), \
+          static_cast<const iter_type*>(0))) == 1, \
+      "ResolveHandler type requirements not met") \
+  \
+  typedef boost::asio::detail::handler_type_requirements< \
+      sizeof( \
+        boost::asio::detail::argbyv( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>())) + \
+      sizeof( \
+        boost::asio::detail::lvref< \
+          asio_true_handler_type>()( \
+            boost::asio::detail::lvref<const boost::system::error_code>(), \
+            boost::asio::detail::lvref<const iter_type>()), \
+        char(0))> BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_WAIT_HANDLER_CHECK( \
+    handler_type, handler) \
+  \
+  typedef BOOST_ASIO_HANDLER_TYPE(handler_type, \
+      void(boost::system::error_code)) \
+    asio_true_handler_type; \
+  \
+  BOOST_ASIO_HANDLER_TYPE_REQUIREMENTS_ASSERT( \
+      sizeof(boost::asio::detail::one_arg_handler_test( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>(), \
+          static_cast<const boost::system::error_code*>(0))) == 1, \
+      "WaitHandler type requirements not met") \
+  \
+  typedef boost::asio::detail::handler_type_requirements< \
+      sizeof( \
+        boost::asio::detail::argbyv( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>())) + \
+      sizeof( \
+        boost::asio::detail::lvref< \
+          asio_true_handler_type>()( \
+            boost::asio::detail::lvref<const boost::system::error_code>()), \
+        char(0))> BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_SIGNAL_HANDLER_CHECK( \
+    handler_type, handler) \
+  \
+  typedef BOOST_ASIO_HANDLER_TYPE(handler_type, \
+      void(boost::system::error_code, int)) \
+    asio_true_handler_type; \
+  \
+  BOOST_ASIO_HANDLER_TYPE_REQUIREMENTS_ASSERT( \
+      sizeof(boost::asio::detail::two_arg_handler_test( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>(), \
+          static_cast<const boost::system::error_code*>(0), \
+          static_cast<const int*>(0))) == 1, \
+      "SignalHandler type requirements not met") \
+  \
+  typedef boost::asio::detail::handler_type_requirements< \
+      sizeof( \
+        boost::asio::detail::argbyv( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>())) + \
+      sizeof( \
+        boost::asio::detail::lvref< \
+          asio_true_handler_type>()( \
+            boost::asio::detail::lvref<const boost::system::error_code>(), \
+            boost::asio::detail::lvref<const int>()), \
+        char(0))> BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_HANDSHAKE_HANDLER_CHECK( \
+    handler_type, handler) \
+  \
+  typedef BOOST_ASIO_HANDLER_TYPE(handler_type, \
+      void(boost::system::error_code)) \
+    asio_true_handler_type; \
+  \
+  BOOST_ASIO_HANDLER_TYPE_REQUIREMENTS_ASSERT( \
+      sizeof(boost::asio::detail::one_arg_handler_test( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>(), \
+          static_cast<const boost::system::error_code*>(0))) == 1, \
+      "HandshakeHandler type requirements not met") \
+  \
+  typedef boost::asio::detail::handler_type_requirements< \
+      sizeof( \
+        boost::asio::detail::argbyv( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>())) + \
+      sizeof( \
+        boost::asio::detail::lvref< \
+          asio_true_handler_type>()( \
+            boost::asio::detail::lvref<const boost::system::error_code>()), \
+        char(0))> BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_BUFFERED_HANDSHAKE_HANDLER_CHECK( \
+    handler_type, handler) \
+  \
+  typedef BOOST_ASIO_HANDLER_TYPE(handler_type, \
+      void(boost::system::error_code, std::size_t)) \
+    asio_true_handler_type; \
+  \
+  BOOST_ASIO_HANDLER_TYPE_REQUIREMENTS_ASSERT( \
+      sizeof(boost::asio::detail::two_arg_handler_test( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>(), \
+          static_cast<const boost::system::error_code*>(0), \
+          static_cast<const std::size_t*>(0))) == 1, \
+      "BufferedHandshakeHandler type requirements not met") \
+  \
+  typedef boost::asio::detail::handler_type_requirements< \
+      sizeof( \
+        boost::asio::detail::argbyv( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>())) + \
+      sizeof( \
+        boost::asio::detail::lvref< \
+          asio_true_handler_type>()( \
+          boost::asio::detail::lvref<const boost::system::error_code>(), \
+          boost::asio::detail::lvref<const std::size_t>()), \
+        char(0))> BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_SHUTDOWN_HANDLER_CHECK( \
+    handler_type, handler) \
+  \
+  typedef BOOST_ASIO_HANDLER_TYPE(handler_type, \
+      void(boost::system::error_code)) \
+    asio_true_handler_type; \
+  \
+  BOOST_ASIO_HANDLER_TYPE_REQUIREMENTS_ASSERT( \
+      sizeof(boost::asio::detail::one_arg_handler_test( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>(), \
+          static_cast<const boost::system::error_code*>(0))) == 1, \
+      "ShutdownHandler type requirements not met") \
+  \
+  typedef boost::asio::detail::handler_type_requirements< \
+      sizeof( \
+        boost::asio::detail::argbyv( \
+          boost::asio::detail::clvref< \
+            asio_true_handler_type>())) + \
+      sizeof( \
+        boost::asio::detail::lvref< \
+          asio_true_handler_type>()( \
+            boost::asio::detail::lvref<const boost::system::error_code>()), \
+        char(0))> BOOST_ASIO_UNUSED_TYPEDEF
+
+#else // !defined(BOOST_ASIO_ENABLE_HANDLER_TYPE_REQUIREMENTS)
+
+#define BOOST_ASIO_COMPLETION_HANDLER_CHECK( \
+    handler_type, handler) \
+  typedef int BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_READ_HANDLER_CHECK( \
+    handler_type, handler) \
+  typedef int BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_WRITE_HANDLER_CHECK( \
+    handler_type, handler) \
+  typedef int BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_ACCEPT_HANDLER_CHECK( \
+    handler_type, handler) \
+  typedef int BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_CONNECT_HANDLER_CHECK( \
+    handler_type, handler) \
+  typedef int BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_COMPOSED_CONNECT_HANDLER_CHECK( \
+    handler_type, handler, iter_type) \
+  typedef int BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_RESOLVE_HANDLER_CHECK( \
+    handler_type, handler, iter_type) \
+  typedef int BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_WAIT_HANDLER_CHECK( \
+    handler_type, handler) \
+  typedef int BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_SIGNAL_HANDLER_CHECK( \
+    handler_type, handler) \
+  typedef int BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_HANDSHAKE_HANDLER_CHECK( \
+    handler_type, handler) \
+  typedef int BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_BUFFERED_HANDSHAKE_HANDLER_CHECK( \
+    handler_type, handler) \
+  typedef int BOOST_ASIO_UNUSED_TYPEDEF
+
+#define BOOST_ASIO_SHUTDOWN_HANDLER_CHECK( \
+    handler_type, handler) \
+  typedef int BOOST_ASIO_UNUSED_TYPEDEF
+
+#endif // !defined(BOOST_ASIO_ENABLE_HANDLER_TYPE_REQUIREMENTS)
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_HANDLER_TYPE_REQUIREMENTS_HPP
diff --git a/ext/patches/boost/asio/detail/hash_map.hpp b/ext/patches/boost/asio/detail/hash_map.hpp
new file mode 100644
index 0000000..cfd7704
--- /dev/null
+++ b/ext/patches/boost/asio/detail/hash_map.hpp
@@ -0,0 +1,333 @@
+//
+// detail/hash_map.hpp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_HASH_MAP_HPP
+#define BOOST_ASIO_DETAIL_HASH_MAP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <list>
+#include <utility>
+#include <boost/asio/detail/assert.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+# include <boost/asio/detail/socket_types.hpp>
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+inline std::size_t calculate_hash_value(int i)
+{
+  return static_cast<std::size_t>(i);
+}
+
+inline std::size_t calculate_hash_value(void* p)
+{
+  return reinterpret_cast<std::size_t>(p)
+    + (reinterpret_cast<std::size_t>(p) >> 3);
+}
+
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+inline std::size_t calculate_hash_value(SOCKET s)
+{
+  return static_cast<std::size_t>(s);
+}
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+// Note: assumes K and V are POD types.
+template <typename K, typename V>
+class hash_map
+  : private noncopyable
+{
+public:
+  // The type of a value in the map.
+  typedef std::pair<K, V> value_type;
+
+  // The type of a non-const iterator over the hash map.
+  typedef typename std::list<value_type>::iterator iterator;
+
+  // The type of a const iterator over the hash map.
+  typedef typename std::list<value_type>::const_iterator const_iterator;
+
+  // Constructor.
+  hash_map()
+    : size_(0),
+      buckets_(0),
+      num_buckets_(0)
+  {
+  }
+
+  // Destructor.
+  ~hash_map()
+  {
+    delete[] buckets_;
+  }
+
+  // Get an iterator for the beginning of the map.
+  iterator begin()
+  {
+    return values_.begin();
+  }
+
+  // Get an iterator for the beginning of the map.
+  const_iterator begin() const
+  {
+    return values_.begin();
+  }
+
+  // Get an iterator for the end of the map.
+  iterator end()
+  {
+    return values_.end();
+  }
+
+  // Get an iterator for the end of the map.
+  const_iterator end() const
+  {
+    return values_.end();
+  }
+
+  // Check whether the map is empty.
+  bool empty() const
+  {
+    return values_.empty();
+  }
+
+  // Find an entry in the map.
+  iterator find(const K& k)
+  {
+    if (num_buckets_)
+    {
+      size_t bucket = calculate_hash_value(k) % num_buckets_;
+      iterator it = buckets_[bucket].first;
+      if (it == values_.end())
+        return values_.end();
+      iterator end_it = buckets_[bucket].last;
+      ++end_it;
+      while (it != end_it)
+      {
+        if (it->first == k)
+          return it;
+        ++it;
+      }
+    }
+    return values_.end();
+  }
+
+  // Find an entry in the map.
+  const_iterator find(const K& k) const
+  {
+    if (num_buckets_)
+    {
+      size_t bucket = calculate_hash_value(k) % num_buckets_;
+      const_iterator it = buckets_[bucket].first;
+      if (it == values_.end())
+        return it;
+      const_iterator end_it = buckets_[bucket].last;
+      ++end_it;
+      while (it != end_it)
+      {
+        if (it->first == k)
+          return it;
+        ++it;
+      }
+    }
+    return values_.end();
+  }
+
+  // Insert a new entry into the map.
+  std::pair<iterator, bool> insert(const value_type& v)
+  {
+    if (size_ + 1 >= num_buckets_)
+      rehash(hash_size(size_ + 1));
+    size_t bucket = calculate_hash_value(v.first) % num_buckets_;
+    iterator it = buckets_[bucket].first;
+    if (it == values_.end())
+    {
+      buckets_[bucket].first = buckets_[bucket].last =
+        values_insert(values_.end(), v);
+      ++size_;
+      return std::pair<iterator, bool>(buckets_[bucket].last, true);
+    }
+    iterator end_it = buckets_[bucket].last;
+    ++end_it;
+    while (it != end_it)
+    {
+      if (it->first == v.first)
+        return std::pair<iterator, bool>(it, false);
+      ++it;
+    }
+    buckets_[bucket].last = values_insert(end_it, v);
+    ++size_;
+    return std::pair<iterator, bool>(buckets_[bucket].last, true);
+  }
+
+  // Erase an entry from the map.
+  void erase(iterator it)
+  {
+    BOOST_ASIO_ASSERT(it != values_.end());
+    BOOST_ASIO_ASSERT(num_buckets_ != 0);
+
+    size_t bucket = calculate_hash_value(it->first) % num_buckets_;
+    bool is_first = (it == buckets_[bucket].first);
+    bool is_last = (it == buckets_[bucket].last);
+    if (is_first && is_last)
+      buckets_[bucket].first = buckets_[bucket].last = values_.end();
+    else if (is_first)
+      ++buckets_[bucket].first;
+    else if (is_last)
+      --buckets_[bucket].last;
+
+    values_erase(it);
+    --size_;
+  }
+
+  // Erase a key from the map.
+  void erase(const K& k)
+  {
+    iterator it = find(k);
+    if (it != values_.end())
+      erase(it);
+  }
+
+  // Remove all entries from the map.
+  void clear()
+  {
+    // Clear the values.
+    values_.clear();
+    size_ = 0;
+
+    // Initialise all buckets to empty.
+    iterator end_it = values_.end();
+    for (size_t i = 0; i < num_buckets_; ++i)
+      buckets_[i].first = buckets_[i].last = end_it;
+  }
+
+private:
+  // Calculate the hash size for the specified number of elements.
+  static std::size_t hash_size(std::size_t num_elems)
+  {
+    static std::size_t sizes[] =
+    {
+#if defined(BOOST_ASIO_HASH_MAP_BUCKETS)
+      BOOST_ASIO_HASH_MAP_BUCKETS
+#else // BOOST_ASIO_HASH_MAP_BUCKETS
+      3, 13, 23, 53, 97, 193, 389, 769, 1543, 3079, 6151, 12289, 24593,
+      49157, 98317, 196613, 393241, 786433, 1572869, 3145739, 6291469,
+      12582917, 25165843
+#endif // BOOST_ASIO_HASH_MAP_BUCKETS
+    };
+    const std::size_t nth_size = sizeof(sizes) / sizeof(std::size_t) - 1;
+    for (std::size_t i = 0; i < nth_size; ++i)
+      if (num_elems < sizes[i])
+        return sizes[i];
+    return sizes[nth_size];
+  }
+
+  // Re-initialise the hash from the values already contained in the list.
+  void rehash(std::size_t num_buckets)
+  {
+    if (num_buckets == num_buckets_)
+      return;
+    num_buckets_ = num_buckets;
+    BOOST_ASIO_ASSERT(num_buckets_ != 0);
+
+    iterator end_iter = values_.end();
+
+    // Update number of buckets and initialise all buckets to empty.
+    bucket_type* tmp = new bucket_type[num_buckets_];
+    delete[] buckets_;
+    buckets_ = tmp;
+    for (std::size_t i = 0; i < num_buckets_; ++i)
+      buckets_[i].first = buckets_[i].last = end_iter;
+
+    // Put all values back into the hash.
+    iterator iter = values_.begin();
+    while (iter != end_iter)
+    {
+      std::size_t bucket = calculate_hash_value(iter->first) % num_buckets_;
+      if (buckets_[bucket].last == end_iter)
+      {
+        buckets_[bucket].first = buckets_[bucket].last = iter++;
+      }
+      else if (++buckets_[bucket].last == iter)
+      {
+        ++iter;
+      }
+      else
+      {
+        values_.splice(buckets_[bucket].last, values_, iter++);
+        --buckets_[bucket].last;
+      }
+    }
+  }
+
+  // Insert an element into the values list by splicing from the spares list,
+  // if a spare is available, and otherwise by inserting a new element.
+  iterator values_insert(iterator it, const value_type& v)
+  {
+    if (spares_.empty())
+    {
+      return values_.insert(it, v);
+    }
+    else
+    {
+      spares_.front() = v;
+      values_.splice(it, spares_, spares_.begin());
+      return --it;
+    }
+  }
+
+  // Erase an element from the values list by splicing it to the spares list.
+  void values_erase(iterator it)
+  {
+    *it = value_type();
+    spares_.splice(spares_.begin(), values_, it);
+  }
+
+  // The number of elements in the hash.
+  std::size_t size_;
+
+  // The list of all values in the hash map.
+  std::list<value_type> values_;
+
+  // The list of spare nodes waiting to be recycled. Assumes that POD types only
+  // are stored in the hash map.
+  std::list<value_type> spares_;
+
+  // The type for a bucket in the hash table.
+  struct bucket_type
+  {
+    iterator first;
+    iterator last;
+  };
+
+  // The buckets in the hash.
+  bucket_type* buckets_;
+
+  // The number of buckets in the hash.
+  std::size_t num_buckets_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_HASH_MAP_HPP
diff --git a/ext/patches/boost/asio/detail/impl/buffer_sequence_adapter.ipp b/ext/patches/boost/asio/detail/impl/buffer_sequence_adapter.ipp
new file mode 100644
index 0000000..8c8c08c
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/buffer_sequence_adapter.ipp
@@ -0,0 +1,120 @@
+//
+// detail/impl/buffer_sequence_adapter.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_BUFFER_SEQUENCE_ADAPTER_IPP
+#define BOOST_ASIO_DETAIL_IMPL_BUFFER_SEQUENCE_ADAPTER_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <robuffer.h>
+#include <windows.storage.streams.h>
+#include <wrl/implements.h>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class winrt_buffer_impl :
+  public Microsoft::WRL::RuntimeClass<
+    Microsoft::WRL::RuntimeClassFlags<
+      Microsoft::WRL::RuntimeClassType::WinRtClassicComMix>,
+    ABI::Windows::Storage::Streams::IBuffer,
+    Windows::Storage::Streams::IBufferByteAccess>
+{
+public:
+  explicit winrt_buffer_impl(const boost::asio::const_buffer& b)
+  {
+    bytes_ = const_cast<byte*>(boost::asio::buffer_cast<const byte*>(b));
+    length_ = boost::asio::buffer_size(b);
+    capacity_ = boost::asio::buffer_size(b);
+  }
+
+  explicit winrt_buffer_impl(const boost::asio::mutable_buffer& b)
+  {
+    bytes_ = const_cast<byte*>(boost::asio::buffer_cast<const byte*>(b));
+    length_ = 0;
+    capacity_ = boost::asio::buffer_size(b);
+  }
+
+  ~winrt_buffer_impl()
+  {
+  }
+
+  STDMETHODIMP Buffer(byte** value)
+  {
+    *value = bytes_;
+    return S_OK;
+  }
+
+  STDMETHODIMP get_Capacity(UINT32* value)
+  {
+    *value = capacity_;
+    return S_OK;
+  }
+
+  STDMETHODIMP get_Length(UINT32 *value)
+  {
+    *value = length_;
+    return S_OK;
+  }
+
+  STDMETHODIMP put_Length(UINT32 value)
+  {
+    if (value > capacity_)
+      return E_INVALIDARG;
+    length_ = value;
+    return S_OK;
+  }
+
+private:
+  byte* bytes_;
+  UINT32 length_;
+  UINT32 capacity_;
+};
+
+void buffer_sequence_adapter_base::init_native_buffer(
+    buffer_sequence_adapter_base::native_buffer_type& buf,
+    const boost::asio::mutable_buffer& buffer)
+{
+  std::memset(&buf, 0, sizeof(native_buffer_type));
+  Microsoft::WRL::ComPtr<IInspectable> insp
+    = Microsoft::WRL::Make<winrt_buffer_impl>(buffer);
+  buf = reinterpret_cast<Windows::Storage::Streams::IBuffer^>(insp.Get());
+}
+
+void buffer_sequence_adapter_base::init_native_buffer(
+    buffer_sequence_adapter_base::native_buffer_type& buf,
+    const boost::asio::const_buffer& buffer)
+{
+  std::memset(&buf, 0, sizeof(native_buffer_type));
+  Microsoft::WRL::ComPtr<IInspectable> insp
+    = Microsoft::WRL::Make<winrt_buffer_impl>(buffer);
+  Platform::Object^ buf_obj = reinterpret_cast<Platform::Object^>(insp.Get());
+  buf = reinterpret_cast<Windows::Storage::Streams::IBuffer^>(insp.Get());
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_BUFFER_SEQUENCE_ADAPTER_IPP
diff --git a/ext/patches/boost/asio/detail/impl/descriptor_ops.ipp b/ext/patches/boost/asio/detail/impl/descriptor_ops.ipp
new file mode 100644
index 0000000..84c93e3
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/descriptor_ops.ipp
@@ -0,0 +1,453 @@
+//
+// detail/impl/descriptor_ops.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_DESCRIPTOR_OPS_IPP
+#define BOOST_ASIO_DETAIL_IMPL_DESCRIPTOR_OPS_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cerrno>
+#include <boost/asio/detail/descriptor_ops.hpp>
+#include <boost/asio/error.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  && !defined(__CYGWIN__)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+namespace descriptor_ops {
+
+int open(const char* path, int flags, boost::system::error_code& ec)
+{
+  errno = 0;
+  int result = error_wrapper(::open(path, flags), ec);
+  if (result >= 0)
+    ec = boost::system::error_code();
+  return result;
+}
+
+int close(int d, state_type& state, boost::system::error_code& ec)
+{
+  int result = 0;
+  if (d != -1)
+  {
+    errno = 0;
+    result = error_wrapper(::close(d), ec);
+
+    if (result != 0
+        && (ec == boost::asio::error::would_block
+          || ec == boost::asio::error::try_again))
+    {
+      // According to UNIX Network Programming Vol. 1, it is possible for
+      // close() to fail with EWOULDBLOCK under certain circumstances. What
+      // isn't clear is the state of the descriptor after this error. The one
+      // current OS where this behaviour is seen, Windows, says that the socket
+      // remains open. Therefore we'll put the descriptor back into blocking
+      // mode and have another attempt at closing it.
+#if defined(__SYMBIAN32__)
+      int flags = ::fcntl(d, F_GETFL, 0);
+      if (flags >= 0)
+        ::fcntl(d, F_SETFL, flags & ~O_NONBLOCK);
+#else // defined(__SYMBIAN32__)
+      ioctl_arg_type arg = 0;
+      ::ioctl(d, FIONBIO, &arg);
+#endif // defined(__SYMBIAN32__)
+      state &= ~non_blocking;
+
+      errno = 0;
+      result = error_wrapper(::close(d), ec);
+    }
+  }
+
+  if (result == 0)
+    ec = boost::system::error_code();
+  return result;
+}
+
+bool set_user_non_blocking(int d, state_type& state,
+    bool value, boost::system::error_code& ec)
+{
+  if (d == -1)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return false;
+  }
+
+  errno = 0;
+#if defined(__SYMBIAN32__)
+  int result = error_wrapper(::fcntl(d, F_GETFL, 0), ec);
+  if (result >= 0)
+  {
+    errno = 0;
+    int flag = (value ? (result | O_NONBLOCK) : (result & ~O_NONBLOCK));
+    result = error_wrapper(::fcntl(d, F_SETFL, flag), ec);
+  }
+#else // defined(__SYMBIAN32__)
+  ioctl_arg_type arg = (value ? 1 : 0);
+  int result = error_wrapper(::ioctl(d, FIONBIO, &arg), ec);
+#endif // defined(__SYMBIAN32__)
+
+  if (result >= 0)
+  {
+    ec = boost::system::error_code();
+    if (value)
+      state |= user_set_non_blocking;
+    else
+    {
+      // Clearing the user-set non-blocking mode always overrides any
+      // internally-set non-blocking flag. Any subsequent asynchronous
+      // operations will need to re-enable non-blocking I/O.
+      state &= ~(user_set_non_blocking | internal_non_blocking);
+    }
+    return true;
+  }
+
+  return false;
+}
+
+bool set_internal_non_blocking(int d, state_type& state,
+    bool value, boost::system::error_code& ec)
+{
+  if (d == -1)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return false;
+  }
+
+  if (!value && (state & user_set_non_blocking))
+  {
+    // It does not make sense to clear the internal non-blocking flag if the
+    // user still wants non-blocking behaviour. Return an error and let the
+    // caller figure out whether to update the user-set non-blocking flag.
+    ec = boost::asio::error::invalid_argument;
+    return false;
+  }
+
+  errno = 0;
+#if defined(__SYMBIAN32__)
+  int result = error_wrapper(::fcntl(d, F_GETFL, 0), ec);
+  if (result >= 0)
+  {
+    errno = 0;
+    int flag = (value ? (result | O_NONBLOCK) : (result & ~O_NONBLOCK));
+    result = error_wrapper(::fcntl(d, F_SETFL, flag), ec);
+  }
+#else // defined(__SYMBIAN32__)
+  ioctl_arg_type arg = (value ? 1 : 0);
+  int result = error_wrapper(::ioctl(d, FIONBIO, &arg), ec);
+#endif // defined(__SYMBIAN32__)
+
+  if (result >= 0)
+  {
+    ec = boost::system::error_code();
+    if (value)
+      state |= internal_non_blocking;
+    else
+      state &= ~internal_non_blocking;
+    return true;
+  }
+
+  return false;
+}
+
+std::size_t sync_read(int d, state_type state, buf* bufs,
+    std::size_t count, bool all_empty, boost::system::error_code& ec)
+{
+  if (d == -1)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return 0;
+  }
+
+  // A request to read 0 bytes on a stream is a no-op.
+  if (all_empty)
+  {
+    ec = boost::system::error_code();
+    return 0;
+  }
+
+  // Read some data.
+  for (;;)
+  {
+    // Try to complete the operation without blocking.
+    errno = 0;
+    signed_size_type bytes = error_wrapper(::readv(
+          d, bufs, static_cast<int>(count)), ec);
+
+    // Check if operation succeeded.
+    if (bytes > 0)
+      return bytes;
+
+    // Check for EOF.
+    if (bytes == 0)
+    {
+      ec = boost::asio::error::eof;
+      return 0;
+    }
+
+    // Operation failed.
+    if ((state & user_set_non_blocking)
+        || (ec != boost::asio::error::would_block
+          && ec != boost::asio::error::try_again))
+      return 0;
+
+    // Wait for descriptor to become ready.
+    if (descriptor_ops::poll_read(d, 0, ec) < 0)
+      return 0;
+  }
+}
+
+bool non_blocking_read(int d, buf* bufs, std::size_t count,
+    boost::system::error_code& ec, std::size_t& bytes_transferred)
+{
+  for (;;)
+  {
+    // Read some data.
+    errno = 0;
+    signed_size_type bytes = error_wrapper(::readv(
+          d, bufs, static_cast<int>(count)), ec);
+
+    // Check for end of stream.
+    if (bytes == 0)
+    {
+      ec = boost::asio::error::eof;
+      return true;
+    }
+
+    // Retry operation if interrupted by signal.
+    if (ec == boost::asio::error::interrupted)
+      continue;
+
+    // Check if we need to run the operation again.
+    if (ec == boost::asio::error::would_block
+        || ec == boost::asio::error::try_again)
+      return false;
+
+    // Operation is complete.
+    if (bytes > 0)
+    {
+      ec = boost::system::error_code();
+      bytes_transferred = bytes;
+    }
+    else
+      bytes_transferred = 0;
+
+    return true;
+  }
+}
+
+std::size_t sync_write(int d, state_type state, const buf* bufs,
+    std::size_t count, bool all_empty, boost::system::error_code& ec)
+{
+  if (d == -1)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return 0;
+  }
+
+  // A request to write 0 bytes on a stream is a no-op.
+  if (all_empty)
+  {
+    ec = boost::system::error_code();
+    return 0;
+  }
+
+  // Write some data.
+  for (;;)
+  {
+    // Try to complete the operation without blocking.
+    errno = 0;
+    signed_size_type bytes = error_wrapper(::writev(
+          d, bufs, static_cast<int>(count)), ec);
+
+    // Check if operation succeeded.
+    if (bytes > 0)
+      return bytes;
+
+    // Operation failed.
+    if ((state & user_set_non_blocking)
+        || (ec != boost::asio::error::would_block
+          && ec != boost::asio::error::try_again))
+      return 0;
+
+    // Wait for descriptor to become ready.
+    if (descriptor_ops::poll_write(d, 0, ec) < 0)
+      return 0;
+  }
+}
+
+bool non_blocking_write(int d, const buf* bufs, std::size_t count,
+    boost::system::error_code& ec, std::size_t& bytes_transferred)
+{
+  for (;;)
+  {
+    // Write some data.
+    errno = 0;
+    signed_size_type bytes = error_wrapper(::writev(
+          d, bufs, static_cast<int>(count)), ec);
+
+    // Retry operation if interrupted by signal.
+    if (ec == boost::asio::error::interrupted)
+      continue;
+
+    // Check if we need to run the operation again.
+    if (ec == boost::asio::error::would_block
+        || ec == boost::asio::error::try_again)
+      return false;
+
+    // Operation is complete.
+    if (bytes >= 0)
+    {
+      ec = boost::system::error_code();
+      bytes_transferred = bytes;
+    }
+    else
+      bytes_transferred = 0;
+
+    return true;
+  }
+}
+
+int ioctl(int d, state_type& state, long cmd,
+    ioctl_arg_type* arg, boost::system::error_code& ec)
+{
+  if (d == -1)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return -1;
+  }
+
+  errno = 0;
+  int result = error_wrapper(::ioctl(d, cmd, arg), ec);
+
+  if (result >= 0)
+  {
+    ec = boost::system::error_code();
+
+    // When updating the non-blocking mode we always perform the ioctl syscall,
+    // even if the flags would otherwise indicate that the descriptor is
+    // already in the correct state. This ensures that the underlying
+    // descriptor is put into the state that has been requested by the user. If
+    // the ioctl syscall was successful then we need to update the flags to
+    // match.
+    if (cmd == static_cast<long>(FIONBIO))
+    {
+      if (*arg)
+      {
+        state |= user_set_non_blocking;
+      }
+      else
+      {
+        // Clearing the non-blocking mode always overrides any internally-set
+        // non-blocking flag. Any subsequent asynchronous operations will need
+        // to re-enable non-blocking I/O.
+        state &= ~(user_set_non_blocking | internal_non_blocking);
+      }
+    }
+  }
+
+  return result;
+}
+
+int fcntl(int d, int cmd, boost::system::error_code& ec)
+{
+  if (d == -1)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return -1;
+  }
+
+  errno = 0;
+  int result = error_wrapper(::fcntl(d, cmd), ec);
+  if (result != -1)
+    ec = boost::system::error_code();
+  return result;
+}
+
+int fcntl(int d, int cmd, long arg, boost::system::error_code& ec)
+{
+  if (d == -1)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return -1;
+  }
+
+  errno = 0;
+  int result = error_wrapper(::fcntl(d, cmd, arg), ec);
+  if (result != -1)
+    ec = boost::system::error_code();
+  return result;
+}
+
+int poll_read(int d, state_type state, boost::system::error_code& ec)
+{
+  if (d == -1)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return -1;
+  }
+
+  pollfd fds;
+  fds.fd = d;
+  fds.events = POLLIN;
+  fds.revents = 0;
+  int timeout = (state & user_set_non_blocking) ? 0 : -1;
+  errno = 0;
+  int result = error_wrapper(::poll(&fds, 1, timeout), ec);
+  if (result == 0)
+    ec = (state & user_set_non_blocking)
+      ? boost::asio::error::would_block : boost::system::error_code();
+  else if (result > 0)
+    ec = boost::system::error_code();
+  return result;
+}
+
+int poll_write(int d, state_type state, boost::system::error_code& ec)
+{
+  if (d == -1)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return -1;
+  }
+
+  pollfd fds;
+  fds.fd = d;
+  fds.events = POLLOUT;
+  fds.revents = 0;
+  int timeout = (state & user_set_non_blocking) ? 0 : -1;
+  errno = 0;
+  int result = error_wrapper(::poll(&fds, 1, timeout), ec);
+  if (result == 0)
+    ec = (state & user_set_non_blocking)
+      ? boost::asio::error::would_block : boost::system::error_code();
+  else if (result > 0)
+    ec = boost::system::error_code();
+  return result;
+}
+
+} // namespace descriptor_ops
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_WINDOWS)
+       //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+       //   && !defined(__CYGWIN__)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_DESCRIPTOR_OPS_IPP
diff --git a/ext/patches/boost/asio/detail/impl/dev_poll_reactor.hpp b/ext/patches/boost/asio/detail/impl/dev_poll_reactor.hpp
new file mode 100644
index 0000000..5be3037
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/dev_poll_reactor.hpp
@@ -0,0 +1,80 @@
+//
+// detail/impl/dev_poll_reactor.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_DEV_POLL_REACTOR_HPP
+#define BOOST_ASIO_DETAIL_IMPL_DEV_POLL_REACTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_DEV_POLL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Time_Traits>
+void dev_poll_reactor::add_timer_queue(timer_queue<Time_Traits>& queue)
+{
+  do_add_timer_queue(queue);
+}
+
+template <typename Time_Traits>
+void dev_poll_reactor::remove_timer_queue(timer_queue<Time_Traits>& queue)
+{
+  do_remove_timer_queue(queue);
+}
+
+template <typename Time_Traits>
+void dev_poll_reactor::schedule_timer(timer_queue<Time_Traits>& queue,
+    const typename Time_Traits::time_type& time,
+    typename timer_queue<Time_Traits>::per_timer_data& timer, wait_op* op)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+  if (shutdown_)
+  {
+    io_service_.post_immediate_completion(op, false);
+    return;
+  }
+
+  bool earliest = queue.enqueue_timer(time, timer, op);
+  io_service_.work_started();
+  if (earliest)
+    interrupter_.interrupt();
+}
+
+template <typename Time_Traits>
+std::size_t dev_poll_reactor::cancel_timer(timer_queue<Time_Traits>& queue,
+    typename timer_queue<Time_Traits>::per_timer_data& timer,
+    std::size_t max_cancelled)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  op_queue<operation> ops;
+  std::size_t n = queue.cancel_timer(timer, ops, max_cancelled);
+  lock.unlock();
+  io_service_.post_deferred_completions(ops);
+  return n;
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_DEV_POLL)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_DEV_POLL_REACTOR_HPP
diff --git a/ext/patches/boost/asio/detail/impl/dev_poll_reactor.ipp b/ext/patches/boost/asio/detail/impl/dev_poll_reactor.ipp
new file mode 100644
index 0000000..399c591
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/dev_poll_reactor.ipp
@@ -0,0 +1,447 @@
+//
+// detail/impl/dev_poll_reactor.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_DEV_POLL_REACTOR_IPP
+#define BOOST_ASIO_DETAIL_IMPL_DEV_POLL_REACTOR_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_DEV_POLL)
+
+#include <boost/asio/detail/dev_poll_reactor.hpp>
+#include <boost/asio/detail/assert.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+dev_poll_reactor::dev_poll_reactor(boost::asio::io_service& io_service)
+  : boost::asio::detail::service_base<dev_poll_reactor>(io_service),
+    io_service_(use_service<io_service_impl>(io_service)),
+    mutex_(),
+    dev_poll_fd_(do_dev_poll_create()),
+    interrupter_(),
+    shutdown_(false)
+{
+  // Add the interrupter's descriptor to /dev/poll.
+  ::pollfd ev = { 0, 0, 0 };
+  ev.fd = interrupter_.read_descriptor();
+  ev.events = POLLIN | POLLERR;
+  ev.revents = 0;
+  ::write(dev_poll_fd_, &ev, sizeof(ev));
+}
+
+dev_poll_reactor::~dev_poll_reactor()
+{
+  shutdown_service();
+  ::close(dev_poll_fd_);
+}
+
+void dev_poll_reactor::shutdown_service()
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  shutdown_ = true;
+  lock.unlock();
+
+  op_queue<operation> ops;
+
+  for (int i = 0; i < max_ops; ++i)
+    op_queue_[i].get_all_operations(ops);
+
+  timer_queues_.get_all_timers(ops);
+
+  io_service_.abandon_operations(ops);
+} 
+
+// Helper class to re-register all descriptors with /dev/poll.
+class dev_poll_reactor::fork_helper
+{
+public:
+  fork_helper(dev_poll_reactor* reactor, short events)
+    : reactor_(reactor), events_(events)
+  {
+  }
+
+  bool set(int descriptor)
+  {
+    ::pollfd& ev = reactor_->add_pending_event_change(descriptor);
+    ev.events = events_;
+    return true;
+  }
+
+private:
+  dev_poll_reactor* reactor_;
+  short events_;
+};
+
+void dev_poll_reactor::fork_service(boost::asio::io_service::fork_event fork_ev)
+{
+  if (fork_ev == boost::asio::io_service::fork_child)
+  {
+    detail::mutex::scoped_lock lock(mutex_);
+
+    if (dev_poll_fd_ != -1)
+      ::close(dev_poll_fd_);
+    dev_poll_fd_ = -1;
+    dev_poll_fd_ = do_dev_poll_create();
+
+    interrupter_.recreate();
+
+    // Add the interrupter's descriptor to /dev/poll.
+    ::pollfd ev = { 0, 0, 0 };
+    ev.fd = interrupter_.read_descriptor();
+    ev.events = POLLIN | POLLERR;
+    ev.revents = 0;
+    ::write(dev_poll_fd_, &ev, sizeof(ev));
+
+    // Re-register all descriptors with /dev/poll. The changes will be written
+    // to the /dev/poll descriptor the next time the reactor is run.
+    op_queue<operation> ops;
+    fork_helper read_op_helper(this, POLLERR | POLLHUP | POLLIN);
+    op_queue_[read_op].get_descriptors(read_op_helper, ops);
+    fork_helper write_op_helper(this, POLLERR | POLLHUP | POLLOUT);
+    op_queue_[write_op].get_descriptors(write_op_helper, ops);
+    fork_helper except_op_helper(this, POLLERR | POLLHUP | POLLPRI);
+    op_queue_[except_op].get_descriptors(except_op_helper, ops);
+    interrupter_.interrupt();
+
+    // The ops op_queue will always be empty because the fork_helper's set()
+    // member function never returns false.
+    BOOST_ASIO_ASSERT(ops.empty());
+  }
+}
+
+void dev_poll_reactor::init_task()
+{
+  io_service_.init_task();
+}
+
+int dev_poll_reactor::register_descriptor(socket_type, per_descriptor_data&)
+{
+  return 0;
+}
+
+int dev_poll_reactor::register_internal_descriptor(int op_type,
+    socket_type descriptor, per_descriptor_data&, reactor_op* op)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+  op_queue_[op_type].enqueue_operation(descriptor, op);
+  ::pollfd& ev = add_pending_event_change(descriptor);
+  ev.events = POLLERR | POLLHUP;
+  switch (op_type)
+  {
+  case read_op: ev.events |= POLLIN; break;
+  case write_op: ev.events |= POLLOUT; break;
+  case except_op: ev.events |= POLLPRI; break;
+  default: break;
+  }
+  interrupter_.interrupt();
+
+  return 0;
+}
+
+void dev_poll_reactor::move_descriptor(socket_type,
+    dev_poll_reactor::per_descriptor_data&,
+    dev_poll_reactor::per_descriptor_data&)
+{
+}
+
+void dev_poll_reactor::start_op(int op_type, socket_type descriptor,
+    dev_poll_reactor::per_descriptor_data&, reactor_op* op,
+    bool is_continuation, bool allow_speculative)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+  if (shutdown_)
+  {
+    post_immediate_completion(op, is_continuation);
+    return;
+  }
+
+  if (allow_speculative)
+  {
+    if (op_type != read_op || !op_queue_[except_op].has_operation(descriptor))
+    {
+      if (!op_queue_[op_type].has_operation(descriptor))
+      {
+        if (op->perform())
+        {
+          lock.unlock();
+          io_service_.post_immediate_completion(op, is_continuation);
+          return;
+        }
+      }
+    }
+  }
+
+  bool first = op_queue_[op_type].enqueue_operation(descriptor, op);
+  io_service_.work_started();
+  if (first)
+  {
+    ::pollfd& ev = add_pending_event_change(descriptor);
+    ev.events = POLLERR | POLLHUP;
+    if (op_type == read_op
+        || op_queue_[read_op].has_operation(descriptor))
+      ev.events |= POLLIN;
+    if (op_type == write_op
+        || op_queue_[write_op].has_operation(descriptor))
+      ev.events |= POLLOUT;
+    if (op_type == except_op
+        || op_queue_[except_op].has_operation(descriptor))
+      ev.events |= POLLPRI;
+    interrupter_.interrupt();
+  }
+}
+
+void dev_poll_reactor::cancel_ops(socket_type descriptor,
+    dev_poll_reactor::per_descriptor_data&)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  cancel_ops_unlocked(descriptor, boost::asio::error::operation_aborted);
+}
+
+void dev_poll_reactor::deregister_descriptor(socket_type descriptor,
+    dev_poll_reactor::per_descriptor_data&, bool)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+  // Remove the descriptor from /dev/poll.
+  ::pollfd& ev = add_pending_event_change(descriptor);
+  ev.events = POLLREMOVE;
+  interrupter_.interrupt();
+
+  // Cancel any outstanding operations associated with the descriptor.
+  cancel_ops_unlocked(descriptor, boost::asio::error::operation_aborted);
+}
+
+void dev_poll_reactor::deregister_internal_descriptor(
+    socket_type descriptor, dev_poll_reactor::per_descriptor_data&)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+  // Remove the descriptor from /dev/poll. Since this function is only called
+  // during a fork, we can apply the change immediately.
+  ::pollfd ev = { 0, 0, 0 };
+  ev.fd = descriptor;
+  ev.events = POLLREMOVE;
+  ev.revents = 0;
+  ::write(dev_poll_fd_, &ev, sizeof(ev));
+
+  // Destroy all operations associated with the descriptor.
+  op_queue<operation> ops;
+  boost::system::error_code ec;
+  for (int i = 0; i < max_ops; ++i)
+    op_queue_[i].cancel_operations(descriptor, ops, ec);
+}
+
+void dev_poll_reactor::run(bool block, op_queue<operation>& ops)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+  // We can return immediately if there's no work to do and the reactor is
+  // not supposed to block.
+  if (!block && op_queue_[read_op].empty() && op_queue_[write_op].empty()
+      && op_queue_[except_op].empty() && timer_queues_.all_empty())
+    return;
+
+  // Write the pending event registration changes to the /dev/poll descriptor.
+  std::size_t events_size = sizeof(::pollfd) * pending_event_changes_.size();
+  if (events_size > 0)
+  {
+    errno = 0;
+    int result = ::write(dev_poll_fd_,
+        &pending_event_changes_[0], events_size);
+    if (result != static_cast<int>(events_size))
+    {
+      boost::system::error_code ec = boost::system::error_code(
+          errno, boost::asio::error::get_system_category());
+      for (std::size_t i = 0; i < pending_event_changes_.size(); ++i)
+      {
+        int descriptor = pending_event_changes_[i].fd;
+        for (int j = 0; j < max_ops; ++j)
+          op_queue_[j].cancel_operations(descriptor, ops, ec);
+      }
+    }
+    pending_event_changes_.clear();
+    pending_event_change_index_.clear();
+  }
+
+  int timeout = block ? get_timeout() : 0;
+  lock.unlock();
+
+  // Block on the /dev/poll descriptor.
+  ::pollfd events[128] = { { 0, 0, 0 } };
+  ::dvpoll dp = { 0, 0, 0 };
+  dp.dp_fds = events;
+  dp.dp_nfds = 128;
+  dp.dp_timeout = timeout;
+  int num_events = ::ioctl(dev_poll_fd_, DP_POLL, &dp);
+
+  lock.lock();
+
+  // Dispatch the waiting events.
+  for (int i = 0; i < num_events; ++i)
+  {
+    int descriptor = events[i].fd;
+    if (descriptor == interrupter_.read_descriptor())
+    {
+      interrupter_.reset();
+    }
+    else
+    {
+      bool more_reads = false;
+      bool more_writes = false;
+      bool more_except = false;
+
+      // Exception operations must be processed first to ensure that any
+      // out-of-band data is read before normal data.
+      if (events[i].events & (POLLPRI | POLLERR | POLLHUP))
+        more_except =
+          op_queue_[except_op].perform_operations(descriptor, ops);
+      else
+        more_except = op_queue_[except_op].has_operation(descriptor);
+
+      if (events[i].events & (POLLIN | POLLERR | POLLHUP))
+        more_reads = op_queue_[read_op].perform_operations(descriptor, ops);
+      else
+        more_reads = op_queue_[read_op].has_operation(descriptor);
+
+      if (events[i].events & (POLLOUT | POLLERR | POLLHUP))
+        more_writes = op_queue_[write_op].perform_operations(descriptor, ops);
+      else
+        more_writes = op_queue_[write_op].has_operation(descriptor);
+
+      if ((events[i].events & (POLLERR | POLLHUP)) != 0
+            && !more_except && !more_reads && !more_writes)
+      {
+        // If we have an event and no operations associated with the
+        // descriptor then we need to delete the descriptor from /dev/poll.
+        // The poll operation can produce POLLHUP or POLLERR events when there
+        // is no operation pending, so if we do not remove the descriptor we
+        // can end up in a tight polling loop.
+        ::pollfd ev = { 0, 0, 0 };
+        ev.fd = descriptor;
+        ev.events = POLLREMOVE;
+        ev.revents = 0;
+        ::write(dev_poll_fd_, &ev, sizeof(ev));
+      }
+      else
+      {
+        ::pollfd ev = { 0, 0, 0 };
+        ev.fd = descriptor;
+        ev.events = POLLERR | POLLHUP;
+        if (more_reads)
+          ev.events |= POLLIN;
+        if (more_writes)
+          ev.events |= POLLOUT;
+        if (more_except)
+          ev.events |= POLLPRI;
+        ev.revents = 0;
+        int result = ::write(dev_poll_fd_, &ev, sizeof(ev));
+        if (result != sizeof(ev))
+        {
+          boost::system::error_code ec(errno,
+              boost::asio::error::get_system_category());
+          for (int j = 0; j < max_ops; ++j)
+            op_queue_[j].cancel_operations(descriptor, ops, ec);
+        }
+      }
+    }
+  }
+  timer_queues_.get_ready_timers(ops);
+}
+
+void dev_poll_reactor::interrupt()
+{
+  interrupter_.interrupt();
+}
+
+int dev_poll_reactor::do_dev_poll_create()
+{
+  int fd = ::open("/dev/poll", O_RDWR);
+  if (fd == -1)
+  {
+    boost::system::error_code ec(errno,
+        boost::asio::error::get_system_category());
+    boost::asio::detail::throw_error(ec, "/dev/poll");
+  }
+  return fd;
+}
+
+void dev_poll_reactor::do_add_timer_queue(timer_queue_base& queue)
+{
+  mutex::scoped_lock lock(mutex_);
+  timer_queues_.insert(&queue);
+}
+
+void dev_poll_reactor::do_remove_timer_queue(timer_queue_base& queue)
+{
+  mutex::scoped_lock lock(mutex_);
+  timer_queues_.erase(&queue);
+}
+
+int dev_poll_reactor::get_timeout()
+{
+  // By default we will wait no longer than 5 minutes. This will ensure that
+  // any changes to the system clock are detected after no longer than this.
+  return timer_queues_.wait_duration_msec(5 * 60 * 1000);
+}
+
+void dev_poll_reactor::cancel_ops_unlocked(socket_type descriptor,
+    const boost::system::error_code& ec)
+{
+  bool need_interrupt = false;
+  op_queue<operation> ops;
+  for (int i = 0; i < max_ops; ++i)
+    need_interrupt = op_queue_[i].cancel_operations(
+        descriptor, ops, ec) || need_interrupt;
+  io_service_.post_deferred_completions(ops);
+  if (need_interrupt)
+    interrupter_.interrupt();
+}
+
+::pollfd& dev_poll_reactor::add_pending_event_change(int descriptor)
+{
+  hash_map<int, std::size_t>::iterator iter
+    = pending_event_change_index_.find(descriptor);
+  if (iter == pending_event_change_index_.end())
+  {
+    std::size_t index = pending_event_changes_.size();
+    pending_event_changes_.reserve(pending_event_changes_.size() + 1);
+    pending_event_change_index_.insert(std::make_pair(descriptor, index));
+    pending_event_changes_.push_back(::pollfd());
+    pending_event_changes_[index].fd = descriptor;
+    pending_event_changes_[index].revents = 0;
+    return pending_event_changes_[index];
+  }
+  else
+  {
+    return pending_event_changes_[iter->second];
+  }
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_DEV_POLL)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_DEV_POLL_REACTOR_IPP
diff --git a/ext/patches/boost/asio/detail/impl/epoll_reactor.hpp b/ext/patches/boost/asio/detail/impl/epoll_reactor.hpp
new file mode 100644
index 0000000..a05b547
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/epoll_reactor.hpp
@@ -0,0 +1,78 @@
+//
+// detail/impl/epoll_reactor.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_EPOLL_REACTOR_HPP
+#define BOOST_ASIO_DETAIL_IMPL_EPOLL_REACTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#if defined(BOOST_ASIO_HAS_EPOLL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Time_Traits>
+void epoll_reactor::add_timer_queue(timer_queue<Time_Traits>& queue)
+{
+  do_add_timer_queue(queue);
+}
+
+template <typename Time_Traits>
+void epoll_reactor::remove_timer_queue(timer_queue<Time_Traits>& queue)
+{
+  do_remove_timer_queue(queue);
+}
+
+template <typename Time_Traits>
+void epoll_reactor::schedule_timer(timer_queue<Time_Traits>& queue,
+    const typename Time_Traits::time_type& time,
+    typename timer_queue<Time_Traits>::per_timer_data& timer, wait_op* op)
+{
+  mutex::scoped_lock lock(mutex_);
+
+  if (shutdown_)
+  {
+    io_service_.post_immediate_completion(op, false);
+    return;
+  }
+
+  bool earliest = queue.enqueue_timer(time, timer, op);
+  io_service_.work_started();
+  if (earliest)
+    update_timeout();
+}
+
+template <typename Time_Traits>
+std::size_t epoll_reactor::cancel_timer(timer_queue<Time_Traits>& queue,
+    typename timer_queue<Time_Traits>::per_timer_data& timer,
+    std::size_t max_cancelled)
+{
+  mutex::scoped_lock lock(mutex_);
+  op_queue<operation> ops;
+  std::size_t n = queue.cancel_timer(timer, ops, max_cancelled);
+  lock.unlock();
+  io_service_.post_deferred_completions(ops);
+  return n;
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_EPOLL)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_EPOLL_REACTOR_HPP
diff --git a/ext/patches/boost/asio/detail/impl/epoll_reactor.ipp b/ext/patches/boost/asio/detail/impl/epoll_reactor.ipp
new file mode 100644
index 0000000..0a2a273
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/epoll_reactor.ipp
@@ -0,0 +1,664 @@
+//
+// detail/impl/epoll_reactor.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_EPOLL_REACTOR_IPP
+#define BOOST_ASIO_DETAIL_IMPL_EPOLL_REACTOR_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_EPOLL)
+
+#include <cstddef>
+#include <sys/epoll.h>
+#include <boost/asio/detail/epoll_reactor.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#if defined(BOOST_ASIO_HAS_TIMERFD)
+# include <sys/timerfd.h>
+#endif // defined(BOOST_ASIO_HAS_TIMERFD)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+epoll_reactor::epoll_reactor(boost::asio::io_service& io_service)
+  : boost::asio::detail::service_base<epoll_reactor>(io_service),
+    io_service_(use_service<io_service_impl>(io_service)),
+    mutex_(),
+    interrupter_(),
+    epoll_fd_(do_epoll_create()),
+    timer_fd_(do_timerfd_create()),
+    shutdown_(false)
+{
+  // Add the interrupter's descriptor to epoll.
+  epoll_event ev = { 0, { 0 } };
+  ev.events = EPOLLIN | EPOLLERR | EPOLLET;
+  ev.data.ptr = &interrupter_;
+  epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, interrupter_.read_descriptor(), &ev);
+  interrupter_.interrupt();
+
+  // Add the timer descriptor to epoll.
+  if (timer_fd_ != -1)
+  {
+    ev.events = EPOLLIN | EPOLLERR;
+    ev.data.ptr = &timer_fd_;
+    epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, timer_fd_, &ev);
+  }
+}
+
+epoll_reactor::~epoll_reactor()
+{
+  if (epoll_fd_ != -1)
+    close(epoll_fd_);
+  if (timer_fd_ != -1)
+    close(timer_fd_);
+}
+
+void epoll_reactor::shutdown_service()
+{
+  mutex::scoped_lock lock(mutex_);
+  shutdown_ = true;
+  lock.unlock();
+
+  op_queue<operation> ops;
+
+  while (descriptor_state* state = registered_descriptors_.first())
+  {
+    for (int i = 0; i < max_ops; ++i)
+      ops.push(state->op_queue_[i]);
+    state->shutdown_ = true;
+    registered_descriptors_.free(state);
+  }
+
+  timer_queues_.get_all_timers(ops);
+
+  io_service_.abandon_operations(ops);
+}
+
+void epoll_reactor::fork_service(boost::asio::io_service::fork_event fork_ev)
+{
+  if (fork_ev == boost::asio::io_service::fork_child)
+  {
+    if (epoll_fd_ != -1)
+      ::close(epoll_fd_);
+    epoll_fd_ = -1;
+    epoll_fd_ = do_epoll_create();
+
+    if (timer_fd_ != -1)
+      ::close(timer_fd_);
+    timer_fd_ = -1;
+    timer_fd_ = do_timerfd_create();
+
+    interrupter_.recreate();
+
+    // Add the interrupter's descriptor to epoll.
+    epoll_event ev = { 0, { 0 } };
+    ev.events = EPOLLIN | EPOLLERR | EPOLLET;
+    ev.data.ptr = &interrupter_;
+    epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, interrupter_.read_descriptor(), &ev);
+    interrupter_.interrupt();
+
+    // Add the timer descriptor to epoll.
+    if (timer_fd_ != -1)
+    {
+      ev.events = EPOLLIN | EPOLLERR;
+      ev.data.ptr = &timer_fd_;
+      epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, timer_fd_, &ev);
+    }
+
+    update_timeout();
+
+    // Re-register all descriptors with epoll.
+    mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_);
+    for (descriptor_state* state = registered_descriptors_.first();
+        state != 0; state = state->next_)
+    {
+      ev.events = state->registered_events_;
+      ev.data.ptr = state;
+      int result = epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, state->descriptor_, &ev);
+      if (result != 0)
+      {
+        boost::system::error_code ec(errno,
+            boost::asio::error::get_system_category());
+        boost::asio::detail::throw_error(ec, "epoll re-registration");
+      }
+    }
+  }
+}
+
+void epoll_reactor::init_task()
+{
+  io_service_.init_task();
+}
+
+int epoll_reactor::register_descriptor(socket_type descriptor,
+    epoll_reactor::per_descriptor_data& descriptor_data)
+{
+  descriptor_data = allocate_descriptor_state();
+
+  {
+    mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
+
+    descriptor_data->reactor_ = this;
+    descriptor_data->descriptor_ = descriptor;
+    descriptor_data->shutdown_ = false;
+  }
+
+  epoll_event ev = { 0, { 0 } };
+  ev.events = EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLPRI | EPOLLET;
+  descriptor_data->registered_events_ = ev.events;
+  ev.data.ptr = descriptor_data;
+  int result = epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, descriptor, &ev);
+  if (result != 0)
+    return errno;
+
+  return 0;
+}
+
+int epoll_reactor::register_internal_descriptor(
+    int op_type, socket_type descriptor,
+    epoll_reactor::per_descriptor_data& descriptor_data, reactor_op* op)
+{
+  descriptor_data = allocate_descriptor_state();
+
+  {
+    mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
+
+    descriptor_data->reactor_ = this;
+    descriptor_data->descriptor_ = descriptor;
+    descriptor_data->shutdown_ = false;
+    descriptor_data->op_queue_[op_type].push(op);
+  }
+
+  epoll_event ev = { 0, { 0 } };
+  ev.events = EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLPRI | EPOLLET;
+  descriptor_data->registered_events_ = ev.events;
+  ev.data.ptr = descriptor_data;
+  int result = epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, descriptor, &ev);
+  if (result != 0)
+    return errno;
+
+  return 0;
+}
+
+void epoll_reactor::move_descriptor(socket_type,
+    epoll_reactor::per_descriptor_data& target_descriptor_data,
+    epoll_reactor::per_descriptor_data& source_descriptor_data)
+{
+  target_descriptor_data = source_descriptor_data;
+  source_descriptor_data = 0;
+}
+
+void epoll_reactor::start_op(int op_type, socket_type descriptor,
+    epoll_reactor::per_descriptor_data& descriptor_data, reactor_op* op,
+    bool is_continuation, bool allow_speculative)
+{
+  if (!descriptor_data)
+  {
+    op->ec_ = boost::asio::error::bad_descriptor;
+    post_immediate_completion(op, is_continuation);
+    return;
+  }
+
+  mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
+
+  if (descriptor_data->shutdown_)
+  {
+    post_immediate_completion(op, is_continuation);
+    return;
+  }
+
+  if (descriptor_data->op_queue_[op_type].empty())
+  {
+    if (allow_speculative
+        && (op_type != read_op
+          || descriptor_data->op_queue_[except_op].empty()))
+    {
+      if (op->perform())
+      {
+        descriptor_lock.unlock();
+        io_service_.post_immediate_completion(op, is_continuation);
+        return;
+      }
+
+      if (op_type == write_op)
+      {
+        if ((descriptor_data->registered_events_ & EPOLLOUT) == 0)
+        {
+          epoll_event ev = { 0, { 0 } };
+          ev.events = descriptor_data->registered_events_ | EPOLLOUT;
+          ev.data.ptr = descriptor_data;
+          if (epoll_ctl(epoll_fd_, EPOLL_CTL_MOD, descriptor, &ev) == 0)
+          {
+            descriptor_data->registered_events_ |= ev.events;
+          }
+          else
+          {
+            op->ec_ = boost::system::error_code(errno,
+                boost::asio::error::get_system_category());
+            io_service_.post_immediate_completion(op, is_continuation);
+            return;
+          }
+        }
+      }
+    }
+    else
+    {
+      if (op_type == write_op)
+      {
+        descriptor_data->registered_events_ |= EPOLLOUT;
+      }
+
+      epoll_event ev = { 0, { 0 } };
+      ev.events = descriptor_data->registered_events_;
+      ev.data.ptr = descriptor_data;
+      epoll_ctl(epoll_fd_, EPOLL_CTL_MOD, descriptor, &ev);
+    }
+  }
+
+  descriptor_data->op_queue_[op_type].push(op);
+  io_service_.work_started();
+}
+
+void epoll_reactor::cancel_ops(socket_type,
+    epoll_reactor::per_descriptor_data& descriptor_data)
+{
+  if (!descriptor_data)
+    return;
+
+  mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
+
+  op_queue<operation> ops;
+  for (int i = 0; i < max_ops; ++i)
+  {
+    while (reactor_op* op = descriptor_data->op_queue_[i].front())
+    {
+      op->ec_ = boost::asio::error::operation_aborted;
+      descriptor_data->op_queue_[i].pop();
+      ops.push(op);
+    }
+  }
+
+  descriptor_lock.unlock();
+
+  io_service_.post_deferred_completions(ops);
+}
+
+void epoll_reactor::deregister_descriptor(socket_type descriptor,
+    epoll_reactor::per_descriptor_data& descriptor_data, bool closing)
+{
+  if (!descriptor_data)
+    return;
+
+  mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
+
+  if (!descriptor_data->shutdown_)
+  {
+    if (closing)
+    {
+      // The descriptor will be automatically removed from the epoll set when
+      // it is closed.
+    }
+    else
+    {
+      epoll_event ev = { 0, { 0 } };
+      epoll_ctl(epoll_fd_, EPOLL_CTL_DEL, descriptor, &ev);
+    }
+
+    op_queue<operation> ops;
+    for (int i = 0; i < max_ops; ++i)
+    {
+      while (reactor_op* op = descriptor_data->op_queue_[i].front())
+      {
+        op->ec_ = boost::asio::error::operation_aborted;
+        descriptor_data->op_queue_[i].pop();
+        ops.push(op);
+      }
+    }
+
+    descriptor_data->descriptor_ = -1;
+    descriptor_data->shutdown_ = true;
+
+    descriptor_lock.unlock();
+
+    free_descriptor_state(descriptor_data);
+    descriptor_data = 0;
+
+    io_service_.post_deferred_completions(ops);
+  }
+}
+
+void epoll_reactor::deregister_internal_descriptor(socket_type descriptor,
+    epoll_reactor::per_descriptor_data& descriptor_data)
+{
+  if (!descriptor_data)
+    return;
+
+  mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
+
+  if (!descriptor_data->shutdown_)
+  {
+    epoll_event ev = { 0, { 0 } };
+    epoll_ctl(epoll_fd_, EPOLL_CTL_DEL, descriptor, &ev);
+
+    op_queue<operation> ops;
+    for (int i = 0; i < max_ops; ++i)
+      ops.push(descriptor_data->op_queue_[i]);
+
+    descriptor_data->descriptor_ = -1;
+    descriptor_data->shutdown_ = true;
+
+    descriptor_lock.unlock();
+
+    free_descriptor_state(descriptor_data);
+    descriptor_data = 0;
+  }
+}
+
+void epoll_reactor::run(bool block, op_queue<operation>& ops)
+{
+  // This code relies on the fact that the task_io_service queues the reactor
+  // task behind all descriptor operations generated by this function. This
+  // means, that by the time we reach this point, any previously returned
+  // descriptor operations have already been dequeued. Therefore it is now safe
+  // for us to reuse and return them for the task_io_service to queue again.
+
+  // Calculate a timeout only if timerfd is not used.
+  int timeout;
+  if (timer_fd_ != -1)
+    timeout = block ? -1 : 0;
+  else
+  {
+    mutex::scoped_lock lock(mutex_);
+    timeout = block ? get_timeout() : 0;
+  }
+
+  // Block on the epoll descriptor.
+  epoll_event events[128];
+  int num_events = epoll_wait(epoll_fd_, events, 128, timeout);
+
+#if defined(BOOST_ASIO_HAS_TIMERFD)
+  bool check_timers = (timer_fd_ == -1);
+#else // defined(BOOST_ASIO_HAS_TIMERFD)
+  bool check_timers = true;
+#endif // defined(BOOST_ASIO_HAS_TIMERFD)
+
+  // Dispatch the waiting events.
+  for (int i = 0; i < num_events; ++i)
+  {
+    void* ptr = events[i].data.ptr;
+    if (ptr == &interrupter_)
+    {
+      // No need to reset the interrupter since we're leaving the descriptor
+      // in a ready-to-read state and relying on edge-triggered notifications
+      // to make it so that we only get woken up when the descriptor's epoll
+      // registration is updated.
+
+#if defined(BOOST_ASIO_HAS_TIMERFD)
+      if (timer_fd_ == -1)
+        check_timers = true;
+#else // defined(BOOST_ASIO_HAS_TIMERFD)
+      check_timers = true;
+#endif // defined(BOOST_ASIO_HAS_TIMERFD)
+    }
+#if defined(BOOST_ASIO_HAS_TIMERFD)
+    else if (ptr == &timer_fd_)
+    {
+      check_timers = true;
+    }
+#endif // defined(BOOST_ASIO_HAS_TIMERFD)
+    else
+    {
+      // The descriptor operation doesn't count as work in and of itself, so we
+      // don't call work_started() here. This still allows the io_service to
+      // stop if the only remaining operations are descriptor operations.
+      descriptor_state* descriptor_data = static_cast<descriptor_state*>(ptr);
+      descriptor_data->set_ready_events(events[i].events);
+      ops.push(descriptor_data);
+    }
+  }
+
+  if (check_timers)
+  {
+    mutex::scoped_lock common_lock(mutex_);
+    timer_queues_.get_ready_timers(ops);
+
+#if defined(BOOST_ASIO_HAS_TIMERFD)
+    if (timer_fd_ != -1)
+    {
+      itimerspec new_timeout;
+      itimerspec old_timeout;
+      int flags = get_timeout(new_timeout);
+      timerfd_settime(timer_fd_, flags, &new_timeout, &old_timeout);
+    }
+#endif // defined(BOOST_ASIO_HAS_TIMERFD)
+  }
+}
+
+void epoll_reactor::interrupt()
+{
+  epoll_event ev = { 0, { 0 } };
+  ev.events = EPOLLIN | EPOLLERR | EPOLLET;
+  ev.data.ptr = &interrupter_;
+  epoll_ctl(epoll_fd_, EPOLL_CTL_MOD, interrupter_.read_descriptor(), &ev);
+}
+
+int epoll_reactor::do_epoll_create()
+{
+#if defined(EPOLL_CLOEXEC)
+  int fd = epoll_create1(EPOLL_CLOEXEC);
+#else // defined(EPOLL_CLOEXEC)
+  int fd = -1;
+  errno = EINVAL;
+#endif // defined(EPOLL_CLOEXEC)
+
+  if (fd == -1 && (errno == EINVAL || errno == ENOSYS))
+  {
+    fd = epoll_create(epoll_size);
+    if (fd != -1)
+      ::fcntl(fd, F_SETFD, FD_CLOEXEC);
+  }
+
+  if (fd == -1)
+  {
+    boost::system::error_code ec(errno,
+        boost::asio::error::get_system_category());
+    boost::asio::detail::throw_error(ec, "epoll");
+  }
+
+  return fd;
+}
+
+int epoll_reactor::do_timerfd_create()
+{
+#if defined(BOOST_ASIO_HAS_TIMERFD)
+# if defined(TFD_CLOEXEC)
+  int fd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC);
+# else // defined(TFD_CLOEXEC)
+  int fd = -1;
+  errno = EINVAL;
+# endif // defined(TFD_CLOEXEC)
+
+  if (fd == -1 && errno == EINVAL)
+  {
+    fd = timerfd_create(CLOCK_MONOTONIC, 0);
+    if (fd != -1)
+      ::fcntl(fd, F_SETFD, FD_CLOEXEC);
+  }
+
+  return fd;
+#else // defined(BOOST_ASIO_HAS_TIMERFD)
+  return -1;
+#endif // defined(BOOST_ASIO_HAS_TIMERFD)
+}
+
+epoll_reactor::descriptor_state* epoll_reactor::allocate_descriptor_state()
+{
+  mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_);
+  return registered_descriptors_.alloc();
+}
+
+void epoll_reactor::free_descriptor_state(epoll_reactor::descriptor_state* s)
+{
+  mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_);
+  registered_descriptors_.free(s);
+}
+
+void epoll_reactor::do_add_timer_queue(timer_queue_base& queue)
+{
+  mutex::scoped_lock lock(mutex_);
+  timer_queues_.insert(&queue);
+}
+
+void epoll_reactor::do_remove_timer_queue(timer_queue_base& queue)
+{
+  mutex::scoped_lock lock(mutex_);
+  timer_queues_.erase(&queue);
+}
+
+void epoll_reactor::update_timeout()
+{
+#if defined(BOOST_ASIO_HAS_TIMERFD)
+  if (timer_fd_ != -1)
+  {
+    itimerspec new_timeout;
+    itimerspec old_timeout;
+    int flags = get_timeout(new_timeout);
+    timerfd_settime(timer_fd_, flags, &new_timeout, &old_timeout);
+    return;
+  }
+#endif // defined(BOOST_ASIO_HAS_TIMERFD)
+  interrupt();
+}
+
+int epoll_reactor::get_timeout()
+{
+  // By default we will wait no longer than 5 minutes. This will ensure that
+  // any changes to the system clock are detected after no longer than this.
+  return timer_queues_.wait_duration_msec(5 * 60 * 1000);
+}
+
+#if defined(BOOST_ASIO_HAS_TIMERFD)
+int epoll_reactor::get_timeout(itimerspec& ts)
+{
+  ts.it_interval.tv_sec = 0;
+  ts.it_interval.tv_nsec = 0;
+
+  long usec = timer_queues_.wait_duration_usec(5 * 60 * 1000 * 1000);
+  ts.it_value.tv_sec = usec / 1000000;
+  ts.it_value.tv_nsec = usec ? (usec % 1000000) * 1000 : 1;
+
+  return usec ? 0 : TFD_TIMER_ABSTIME;
+}
+#endif // defined(BOOST_ASIO_HAS_TIMERFD)
+
+struct epoll_reactor::perform_io_cleanup_on_block_exit
+{
+  explicit perform_io_cleanup_on_block_exit(epoll_reactor* r)
+    : reactor_(r), first_op_(0)
+  {
+  }
+
+  ~perform_io_cleanup_on_block_exit()
+  {
+    if (first_op_)
+    {
+      // Post the remaining completed operations for invocation.
+      if (!ops_.empty())
+        reactor_->io_service_.post_deferred_completions(ops_);
+
+      // A user-initiated operation has completed, but there's no need to
+      // explicitly call work_finished() here. Instead, we'll take advantage of
+      // the fact that the task_io_service will call work_finished() once we
+      // return.
+    }
+    else
+    {
+      // No user-initiated operations have completed, so we need to compensate
+      // for the work_finished() call that the task_io_service will make once
+      // this operation returns.
+      reactor_->io_service_.work_started();
+    }
+  }
+
+  epoll_reactor* reactor_;
+  op_queue<operation> ops_;
+  operation* first_op_;
+};
+
+epoll_reactor::descriptor_state::descriptor_state()
+  : operation(&epoll_reactor::descriptor_state::do_complete)
+{
+}
+
+operation* epoll_reactor::descriptor_state::perform_io(uint32_t events)
+{
+  mutex_.lock();
+  perform_io_cleanup_on_block_exit io_cleanup(reactor_);
+  mutex::scoped_lock descriptor_lock(mutex_, mutex::scoped_lock::adopt_lock);
+
+  // Exception operations must be processed first to ensure that any
+  // out-of-band data is read before normal data.
+  static const int flag[max_ops] = { EPOLLIN, EPOLLOUT, EPOLLPRI };
+  for (int j = max_ops - 1; j >= 0; --j)
+  {
+    if (events & (flag[j] | EPOLLERR | EPOLLHUP))
+    {
+      while (reactor_op* op = op_queue_[j].front())
+      {
+        if (op->perform())
+        {
+          op_queue_[j].pop();
+          io_cleanup.ops_.push(op);
+        }
+        else
+          break;
+      }
+    }
+  }
+
+  // The first operation will be returned for completion now. The others will
+  // be posted for later by the io_cleanup object's destructor.
+  io_cleanup.first_op_ = io_cleanup.ops_.front();
+  io_cleanup.ops_.pop();
+  return io_cleanup.first_op_;
+}
+
+void epoll_reactor::descriptor_state::do_complete(
+    io_service_impl* owner, operation* base,
+    const boost::system::error_code& ec, std::size_t bytes_transferred)
+{
+  if (owner)
+  {
+    descriptor_state* descriptor_data = static_cast<descriptor_state*>(base);
+    uint32_t events = static_cast<uint32_t>(bytes_transferred);
+    if (operation* op = descriptor_data->perform_io(events))
+    {
+      op->complete(*owner, ec, 0);
+    }
+  }
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_EPOLL)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_EPOLL_REACTOR_IPP
diff --git a/ext/patches/boost/asio/detail/impl/eventfd_select_interrupter.ipp b/ext/patches/boost/asio/detail/impl/eventfd_select_interrupter.ipp
new file mode 100644
index 0000000..fef1c0a
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/eventfd_select_interrupter.ipp
@@ -0,0 +1,167 @@
+//
+// detail/impl/eventfd_select_interrupter.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2008 Roelof Naude (roelof.naude at gmail dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_EVENTFD_SELECT_INTERRUPTER_IPP
+#define BOOST_ASIO_DETAIL_IMPL_EVENTFD_SELECT_INTERRUPTER_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_EVENTFD)
+
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#if __GLIBC__ == 2 && __GLIBC_MINOR__ < 8
+# include <asm/unistd.h>
+#else // __GLIBC__ == 2 && __GLIBC_MINOR__ < 8
+# include <sys/eventfd.h>
+#endif // __GLIBC__ == 2 && __GLIBC_MINOR__ < 8
+#include <boost/asio/detail/cstdint.hpp>
+#include <boost/asio/detail/eventfd_select_interrupter.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+eventfd_select_interrupter::eventfd_select_interrupter()
+{
+  open_descriptors();
+}
+
+void eventfd_select_interrupter::open_descriptors()
+{
+#if __GLIBC__ == 2 && __GLIBC_MINOR__ < 8
+  write_descriptor_ = read_descriptor_ = syscall(__NR_eventfd, 0);
+  if (read_descriptor_ != -1)
+  {
+    ::fcntl(read_descriptor_, F_SETFL, O_NONBLOCK);
+    ::fcntl(read_descriptor_, F_SETFD, FD_CLOEXEC);
+  }
+#else // __GLIBC__ == 2 && __GLIBC_MINOR__ < 8
+# if defined(EFD_CLOEXEC) && defined(EFD_NONBLOCK)
+  write_descriptor_ = read_descriptor_ =
+    ::eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK);
+# else // defined(EFD_CLOEXEC) && defined(EFD_NONBLOCK)
+  errno = EINVAL;
+  write_descriptor_ = read_descriptor_ = -1;
+# endif // defined(EFD_CLOEXEC) && defined(EFD_NONBLOCK)
+  if (read_descriptor_ == -1 && errno == EINVAL)
+  {
+    write_descriptor_ = read_descriptor_ = ::eventfd(0, 0);
+    if (read_descriptor_ != -1)
+    {
+      ::fcntl(read_descriptor_, F_SETFL, O_NONBLOCK);
+      ::fcntl(read_descriptor_, F_SETFD, FD_CLOEXEC);
+    }
+  }
+#endif // __GLIBC__ == 2 && __GLIBC_MINOR__ < 8
+
+  if (read_descriptor_ == -1)
+  {
+    int pipe_fds[2];
+    if (pipe(pipe_fds) == 0)
+    {
+      read_descriptor_ = pipe_fds[0];
+      ::fcntl(read_descriptor_, F_SETFL, O_NONBLOCK);
+      ::fcntl(read_descriptor_, F_SETFD, FD_CLOEXEC);
+      write_descriptor_ = pipe_fds[1];
+      ::fcntl(write_descriptor_, F_SETFL, O_NONBLOCK);
+      ::fcntl(write_descriptor_, F_SETFD, FD_CLOEXEC);
+    }
+    else
+    {
+      boost::system::error_code ec(errno,
+          boost::asio::error::get_system_category());
+      boost::asio::detail::throw_error(ec, "eventfd_select_interrupter");
+    }
+  }
+}
+
+eventfd_select_interrupter::~eventfd_select_interrupter()
+{
+  close_descriptors();
+}
+
+void eventfd_select_interrupter::close_descriptors()
+{
+  if (write_descriptor_ != -1 && write_descriptor_ != read_descriptor_)
+    ::close(write_descriptor_);
+  if (read_descriptor_ != -1)
+    ::close(read_descriptor_);
+}
+
+void eventfd_select_interrupter::recreate()
+{
+  close_descriptors();
+
+  write_descriptor_ = -1;
+  read_descriptor_ = -1;
+
+  open_descriptors();
+}
+
+void eventfd_select_interrupter::interrupt()
+{
+  uint64_t counter(1UL);
+  int result = ::write(write_descriptor_, &counter, sizeof(uint64_t));
+  (void)result;
+}
+
+bool eventfd_select_interrupter::reset()
+{
+  if (write_descriptor_ == read_descriptor_)
+  {
+    for (;;)
+    {
+      // Only perform one read. The kernel maintains an atomic counter.
+      uint64_t counter(0);
+      errno = 0;
+      int bytes_read = ::read(read_descriptor_, &counter, sizeof(uint64_t));
+      if (bytes_read < 0 && errno == EINTR)
+        continue;
+      bool was_interrupted = (bytes_read > 0);
+      return was_interrupted;
+    }
+  }
+  else
+  {
+    for (;;)
+    {
+      // Clear all data from the pipe.
+      char data[1024];
+      int bytes_read = ::read(read_descriptor_, data, sizeof(data));
+      if (bytes_read < 0 && errno == EINTR)
+        continue;
+      bool was_interrupted = (bytes_read > 0);
+      while (bytes_read == sizeof(data))
+        bytes_read = ::read(read_descriptor_, data, sizeof(data));
+      return was_interrupted;
+    }
+  }
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_EVENTFD)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_EVENTFD_SELECT_INTERRUPTER_IPP
diff --git a/ext/patches/boost/asio/detail/impl/handler_tracking.ipp b/ext/patches/boost/asio/detail/impl/handler_tracking.ipp
new file mode 100644
index 0000000..56e874a
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/handler_tracking.ipp
@@ -0,0 +1,307 @@
+//
+// detail/impl/handler_tracking.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_HANDLER_TRACKING_IPP
+#define BOOST_ASIO_DETAIL_IMPL_HANDLER_TRACKING_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_ENABLE_HANDLER_TRACKING)
+
+#include <cstdarg>
+#include <cstdio>
+#include <boost/asio/detail/handler_tracking.hpp>
+
+#if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+# include <boost/asio/time_traits.hpp>
+#else // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+# if defined(BOOST_ASIO_HAS_STD_CHRONO)
+#  include <chrono>
+# elif defined(BOOST_ASIO_HAS_BOOST_CHRONO)
+#  include <boost/chrono/system_clocks.hpp>
+# endif
+# include <boost/asio/detail/chrono_time_traits.hpp>
+# include <boost/asio/wait_traits.hpp>
+#endif // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+
+#if !defined(BOOST_ASIO_WINDOWS)
+# include <unistd.h>
+#endif // !defined(BOOST_ASIO_WINDOWS)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+struct handler_tracking_timestamp
+{
+  uint64_t seconds;
+  uint64_t microseconds;
+
+  handler_tracking_timestamp()
+  {
+#if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+    boost::posix_time::ptime epoch(boost::gregorian::date(1970, 1, 1));
+    boost::posix_time::time_duration now =
+      boost::posix_time::microsec_clock::universal_time() - epoch;
+#elif defined(BOOST_ASIO_HAS_STD_CHRONO)
+    typedef chrono_time_traits<std::chrono::system_clock,
+        boost::asio::wait_traits<std::chrono::system_clock> > traits_helper;
+    traits_helper::posix_time_duration now(
+        std::chrono::system_clock::now().time_since_epoch());
+#elif defined(BOOST_ASIO_HAS_BOOST_CHRONO)
+    typedef chrono_time_traits<boost::chrono::system_clock,
+        boost::asio::wait_traits<boost::chrono::system_clock> > traits_helper;
+    traits_helper::posix_time_duration now(
+        boost::chrono::system_clock::now().time_since_epoch());
+#endif
+    seconds = static_cast<uint64_t>(now.total_seconds());
+    microseconds = static_cast<uint64_t>(now.total_microseconds() % 1000000);
+  }
+};
+
+struct handler_tracking::tracking_state
+{
+  static_mutex mutex_;
+  uint64_t next_id_;
+  tss_ptr<completion>* current_completion_;
+};
+
+handler_tracking::tracking_state* handler_tracking::get_state()
+{
+  static tracking_state state = { BOOST_ASIO_STATIC_MUTEX_INIT, 1, 0 };
+  return &state;
+}
+
+void handler_tracking::init()
+{
+  static tracking_state* state = get_state();
+
+  state->mutex_.init();
+
+  static_mutex::scoped_lock lock(state->mutex_);
+  if (state->current_completion_ == 0)
+    state->current_completion_ = new tss_ptr<completion>;
+}
+
+void handler_tracking::creation(handler_tracking::tracked_handler* h,
+    const char* object_type, void* object, const char* op_name)
+{
+  static tracking_state* state = get_state();
+
+  static_mutex::scoped_lock lock(state->mutex_);
+  h->id_ = state->next_id_++;
+  lock.unlock();
+
+  handler_tracking_timestamp timestamp;
+
+  uint64_t current_id = 0;
+  if (completion* current_completion = *state->current_completion_)
+    current_id = current_completion->id_;
+
+  write_line(
+#if defined(BOOST_ASIO_WINDOWS)
+      "@asio|%I64u.%06I64u|%I64u*%I64u|%.20s@%p.%.50s\n",
+#else // defined(BOOST_ASIO_WINDOWS)
+      "@asio|%llu.%06llu|%llu*%llu|%.20s@%p.%.50s\n",
+#endif // defined(BOOST_ASIO_WINDOWS)
+      timestamp.seconds, timestamp.microseconds,
+      current_id, h->id_, object_type, object, op_name);
+}
+
+handler_tracking::completion::completion(handler_tracking::tracked_handler* h)
+  : id_(h->id_),
+    invoked_(false),
+    next_(*get_state()->current_completion_)
+{
+  *get_state()->current_completion_ = this;
+}
+
+handler_tracking::completion::~completion()
+{
+  if (id_)
+  {
+    handler_tracking_timestamp timestamp;
+
+    write_line(
+#if defined(BOOST_ASIO_WINDOWS)
+        "@asio|%I64u.%06I64u|%c%I64u|\n",
+#else // defined(BOOST_ASIO_WINDOWS)
+        "@asio|%llu.%06llu|%c%llu|\n",
+#endif // defined(BOOST_ASIO_WINDOWS)
+        timestamp.seconds, timestamp.microseconds,
+        invoked_ ? '!' : '~', id_);
+  }
+
+  *get_state()->current_completion_ = next_;
+}
+
+void handler_tracking::completion::invocation_begin()
+{
+  handler_tracking_timestamp timestamp;
+
+  write_line(
+#if defined(BOOST_ASIO_WINDOWS)
+      "@asio|%I64u.%06I64u|>%I64u|\n",
+#else // defined(BOOST_ASIO_WINDOWS)
+      "@asio|%llu.%06llu|>%llu|\n",
+#endif // defined(BOOST_ASIO_WINDOWS)
+      timestamp.seconds, timestamp.microseconds, id_);
+
+  invoked_ = true;
+}
+
+void handler_tracking::completion::invocation_begin(
+    const boost::system::error_code& ec)
+{
+  handler_tracking_timestamp timestamp;
+
+  write_line(
+#if defined(BOOST_ASIO_WINDOWS)
+      "@asio|%I64u.%06I64u|>%I64u|ec=%.20s:%d\n",
+#else // defined(BOOST_ASIO_WINDOWS)
+      "@asio|%llu.%06llu|>%llu|ec=%.20s:%d\n",
+#endif // defined(BOOST_ASIO_WINDOWS)
+      timestamp.seconds, timestamp.microseconds,
+      id_, ec.category().name(), ec.value());
+
+  invoked_ = true;
+}
+
+void handler_tracking::completion::invocation_begin(
+    const boost::system::error_code& ec, std::size_t bytes_transferred)
+{
+  handler_tracking_timestamp timestamp;
+
+  write_line(
+#if defined(BOOST_ASIO_WINDOWS)
+      "@asio|%I64u.%06I64u|>%I64u|ec=%.20s:%d,bytes_transferred=%I64u\n",
+#else // defined(BOOST_ASIO_WINDOWS)
+      "@asio|%llu.%06llu|>%llu|ec=%.20s:%d,bytes_transferred=%llu\n",
+#endif // defined(BOOST_ASIO_WINDOWS)
+      timestamp.seconds, timestamp.microseconds,
+      id_, ec.category().name(), ec.value(),
+      static_cast<uint64_t>(bytes_transferred));
+
+  invoked_ = true;
+}
+
+void handler_tracking::completion::invocation_begin(
+    const boost::system::error_code& ec, int signal_number)
+{
+  handler_tracking_timestamp timestamp;
+
+  write_line(
+#if defined(BOOST_ASIO_WINDOWS)
+      "@asio|%I64u.%06I64u|>%I64u|ec=%.20s:%d,signal_number=%d\n",
+#else // defined(BOOST_ASIO_WINDOWS)
+      "@asio|%llu.%06llu|>%llu|ec=%.20s:%d,signal_number=%d\n",
+#endif // defined(BOOST_ASIO_WINDOWS)
+      timestamp.seconds, timestamp.microseconds,
+      id_, ec.category().name(), ec.value(), signal_number);
+
+  invoked_ = true;
+}
+
+void handler_tracking::completion::invocation_begin(
+    const boost::system::error_code& ec, const char* arg)
+{
+  handler_tracking_timestamp timestamp;
+
+  write_line(
+#if defined(BOOST_ASIO_WINDOWS)
+      "@asio|%I64u.%06I64u|>%I64u|ec=%.20s:%d,%.50s\n",
+#else // defined(BOOST_ASIO_WINDOWS)
+      "@asio|%llu.%06llu|>%llu|ec=%.20s:%d,%.50s\n",
+#endif // defined(BOOST_ASIO_WINDOWS)
+      timestamp.seconds, timestamp.microseconds,
+      id_, ec.category().name(), ec.value(), arg);
+
+  invoked_ = true;
+}
+
+void handler_tracking::completion::invocation_end()
+{
+  if (id_)
+  {
+    handler_tracking_timestamp timestamp;
+
+    write_line(
+#if defined(BOOST_ASIO_WINDOWS)
+        "@asio|%I64u.%06I64u|<%I64u|\n",
+#else // defined(BOOST_ASIO_WINDOWS)
+        "@asio|%llu.%06llu|<%llu|\n",
+#endif // defined(BOOST_ASIO_WINDOWS)
+        timestamp.seconds, timestamp.microseconds, id_);
+
+    id_ = 0;
+  }
+}
+
+void handler_tracking::operation(const char* object_type,
+    void* object, const char* op_name)
+{
+  static tracking_state* state = get_state();
+
+  handler_tracking_timestamp timestamp;
+
+  unsigned long long current_id = 0;
+  if (completion* current_completion = *state->current_completion_)
+    current_id = current_completion->id_;
+
+  write_line(
+#if defined(BOOST_ASIO_WINDOWS)
+      "@asio|%I64u.%06I64u|%I64u|%.20s@%p.%.50s\n",
+#else // defined(BOOST_ASIO_WINDOWS)
+      "@asio|%llu.%06llu|%llu|%.20s@%p.%.50s\n",
+#endif // defined(BOOST_ASIO_WINDOWS)
+      timestamp.seconds, timestamp.microseconds,
+      current_id, object_type, object, op_name);
+}
+
+void handler_tracking::write_line(const char* format, ...)
+{
+  using namespace std; // For sprintf (or equivalent).
+
+  va_list args;
+  va_start(args, format);
+
+  char line[256] = "";
+#if defined(BOOST_ASIO_HAS_SECURE_RTL)
+  int length = vsprintf_s(line, sizeof(line), format, args);
+#else // defined(BOOST_ASIO_HAS_SECURE_RTL)
+  int length = vsprintf(line, format, args);
+#endif // defined(BOOST_ASIO_HAS_SECURE_RTL)
+
+  va_end(args);
+
+#if defined(BOOST_ASIO_WINDOWS)
+  HANDLE stderr_handle = ::GetStdHandle(STD_ERROR_HANDLE);
+  DWORD bytes_written = 0;
+  ::WriteFile(stderr_handle, line, length, &bytes_written, 0);
+#else // defined(BOOST_ASIO_WINDOWS)
+  ::write(STDERR_FILENO, line, length);
+#endif // defined(BOOST_ASIO_WINDOWS)
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_ENABLE_HANDLER_TRACKING)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_HANDLER_TRACKING_IPP
diff --git a/ext/patches/boost/asio/detail/impl/kqueue_reactor.hpp b/ext/patches/boost/asio/detail/impl/kqueue_reactor.hpp
new file mode 100644
index 0000000..de090d1
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/kqueue_reactor.hpp
@@ -0,0 +1,82 @@
+//
+// detail/impl/kqueue_reactor.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2005 Stefan Arentz (stefan at soze dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_KQUEUE_REACTOR_HPP
+#define BOOST_ASIO_DETAIL_IMPL_KQUEUE_REACTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_KQUEUE)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Time_Traits>
+void kqueue_reactor::add_timer_queue(timer_queue<Time_Traits>& queue)
+{
+  do_add_timer_queue(queue);
+}
+
+// Remove a timer queue from the reactor.
+template <typename Time_Traits>
+void kqueue_reactor::remove_timer_queue(timer_queue<Time_Traits>& queue)
+{
+  do_remove_timer_queue(queue);
+}
+
+template <typename Time_Traits>
+void kqueue_reactor::schedule_timer(timer_queue<Time_Traits>& queue,
+    const typename Time_Traits::time_type& time,
+    typename timer_queue<Time_Traits>::per_timer_data& timer, wait_op* op)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+  if (shutdown_)
+  {
+    io_service_.post_immediate_completion(op, false);
+    return;
+  }
+
+  bool earliest = queue.enqueue_timer(time, timer, op);
+  io_service_.work_started();
+  if (earliest)
+    interrupt();
+}
+
+template <typename Time_Traits>
+std::size_t kqueue_reactor::cancel_timer(timer_queue<Time_Traits>& queue,
+    typename timer_queue<Time_Traits>::per_timer_data& timer,
+    std::size_t max_cancelled)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  op_queue<operation> ops;
+  std::size_t n = queue.cancel_timer(timer, ops, max_cancelled);
+  lock.unlock();
+  io_service_.post_deferred_completions(ops);
+  return n;
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_KQUEUE)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_KQUEUE_REACTOR_HPP
diff --git a/ext/patches/boost/asio/detail/impl/kqueue_reactor.ipp b/ext/patches/boost/asio/detail/impl/kqueue_reactor.ipp
new file mode 100644
index 0000000..e1212f7
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/kqueue_reactor.ipp
@@ -0,0 +1,465 @@
+//
+// detail/impl/kqueue_reactor.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2005 Stefan Arentz (stefan at soze dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_KQUEUE_REACTOR_IPP
+#define BOOST_ASIO_DETAIL_IMPL_KQUEUE_REACTOR_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_KQUEUE)
+
+#include <boost/asio/detail/kqueue_reactor.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+#if defined(__NetBSD__)
+# define BOOST_ASIO_KQUEUE_EV_SET(ev, ident, filt, flags, fflags, data, udata) \
+    EV_SET(ev, ident, filt, flags, fflags, data, \
+      reinterpret_cast<intptr_t>(static_cast<void*>(udata)))
+#else
+# define BOOST_ASIO_KQUEUE_EV_SET(ev, ident, filt, flags, fflags, data, udata) \
+    EV_SET(ev, ident, filt, flags, fflags, data, udata)
+#endif
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+kqueue_reactor::kqueue_reactor(boost::asio::io_service& io_service)
+  : boost::asio::detail::service_base<kqueue_reactor>(io_service),
+    io_service_(use_service<io_service_impl>(io_service)),
+    mutex_(),
+    kqueue_fd_(do_kqueue_create()),
+    interrupter_(),
+    shutdown_(false)
+{
+  struct kevent event;
+  BOOST_ASIO_KQUEUE_EV_SET(&event, interrupter_.read_descriptor(),
+      EVFILT_READ, EV_ADD, 0, 0, &interrupter_);
+  if (::kevent(kqueue_fd_, &event, 1, 0, 0, 0) == -1)
+  {
+    boost::system::error_code error(errno,
+        boost::asio::error::get_system_category());
+    boost::asio::detail::throw_error(error);
+  }
+}
+
+kqueue_reactor::~kqueue_reactor()
+{
+  close(kqueue_fd_);
+}
+
+void kqueue_reactor::shutdown_service()
+{
+  mutex::scoped_lock lock(mutex_);
+  shutdown_ = true;
+  lock.unlock();
+
+  op_queue<operation> ops;
+
+  while (descriptor_state* state = registered_descriptors_.first())
+  {
+    for (int i = 0; i < max_ops; ++i)
+      ops.push(state->op_queue_[i]);
+    state->shutdown_ = true;
+    registered_descriptors_.free(state);
+  }
+
+  timer_queues_.get_all_timers(ops);
+
+  io_service_.abandon_operations(ops);
+}
+
+void kqueue_reactor::fork_service(boost::asio::io_service::fork_event fork_ev)
+{
+  if (fork_ev == boost::asio::io_service::fork_child)
+  {
+    // The kqueue descriptor is automatically closed in the child.
+    kqueue_fd_ = -1;
+    kqueue_fd_ = do_kqueue_create();
+
+    interrupter_.recreate();
+
+    struct kevent event;
+    BOOST_ASIO_KQUEUE_EV_SET(&event, interrupter_.read_descriptor(),
+        EVFILT_READ, EV_ADD, 0, 0, &interrupter_);
+    if (::kevent(kqueue_fd_, &event, 1, 0, 0, 0) == -1)
+    {
+      boost::system::error_code error(errno,
+          boost::asio::error::get_system_category());
+      boost::asio::detail::throw_error(error);
+    }
+
+    // Re-register all descriptors with kqueue.
+    mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_);
+    for (descriptor_state* state = registered_descriptors_.first();
+        state != 0; state = state->next_)
+    {
+      struct kevent events[2];
+      BOOST_ASIO_KQUEUE_EV_SET(&events[0], state->descriptor_,
+          EVFILT_READ, EV_ADD | EV_CLEAR, 0, 0, state);
+      BOOST_ASIO_KQUEUE_EV_SET(&events[1], state->descriptor_,
+          EVFILT_WRITE, EV_ADD | EV_CLEAR, 0, 0, state);
+      if (::kevent(kqueue_fd_, events, 2, 0, 0, 0) == -1)
+      {
+        boost::system::error_code error(errno,
+            boost::asio::error::get_system_category());
+        boost::asio::detail::throw_error(error);
+      }
+    }
+  }
+}
+
+void kqueue_reactor::init_task()
+{
+  io_service_.init_task();
+}
+
+int kqueue_reactor::register_descriptor(socket_type descriptor,
+    kqueue_reactor::per_descriptor_data& descriptor_data)
+{
+  descriptor_data = allocate_descriptor_state();
+
+  mutex::scoped_lock lock(descriptor_data->mutex_);
+
+  descriptor_data->descriptor_ = descriptor;
+  descriptor_data->shutdown_ = false;
+
+  struct kevent events[2];
+  BOOST_ASIO_KQUEUE_EV_SET(&events[0], descriptor, EVFILT_READ,
+      EV_ADD | EV_CLEAR, 0, 0, descriptor_data);
+  BOOST_ASIO_KQUEUE_EV_SET(&events[1], descriptor, EVFILT_WRITE,
+      EV_ADD | EV_CLEAR, 0, 0, descriptor_data);
+  if (::kevent(kqueue_fd_, events, 2, 0, 0, 0) == -1)
+    return errno;
+
+  return 0;
+}
+
+int kqueue_reactor::register_internal_descriptor(
+    int op_type, socket_type descriptor,
+    kqueue_reactor::per_descriptor_data& descriptor_data, reactor_op* op)
+{
+  descriptor_data = allocate_descriptor_state();
+
+  mutex::scoped_lock lock(descriptor_data->mutex_);
+
+  descriptor_data->descriptor_ = descriptor;
+  descriptor_data->shutdown_ = false;
+  descriptor_data->op_queue_[op_type].push(op);
+
+  struct kevent events[2];
+  BOOST_ASIO_KQUEUE_EV_SET(&events[0], descriptor, EVFILT_READ,
+      EV_ADD | EV_CLEAR, 0, 0, descriptor_data);
+  BOOST_ASIO_KQUEUE_EV_SET(&events[1], descriptor, EVFILT_WRITE,
+      EV_ADD | EV_CLEAR, 0, 0, descriptor_data);
+  if (::kevent(kqueue_fd_, events, 2, 0, 0, 0) == -1)
+    return errno;
+
+  return 0;
+}
+
+void kqueue_reactor::move_descriptor(socket_type,
+    kqueue_reactor::per_descriptor_data& target_descriptor_data,
+    kqueue_reactor::per_descriptor_data& source_descriptor_data)
+{
+  target_descriptor_data = source_descriptor_data;
+  source_descriptor_data = 0;
+}
+
+void kqueue_reactor::start_op(int op_type, socket_type descriptor,
+    kqueue_reactor::per_descriptor_data& descriptor_data, reactor_op* op,
+    bool is_continuation, bool allow_speculative)
+{
+  if (!descriptor_data)
+  {
+    op->ec_ = boost::asio::error::bad_descriptor;
+    post_immediate_completion(op, is_continuation);
+    return;
+  }
+
+  mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
+
+  if (descriptor_data->shutdown_)
+  {
+    post_immediate_completion(op, is_continuation);
+    return;
+  }
+
+  bool first = descriptor_data->op_queue_[op_type].empty();
+  if (first)
+  {
+    if (allow_speculative
+        && (op_type != read_op
+          || descriptor_data->op_queue_[except_op].empty()))
+    {
+      if (op->perform())
+      {
+        descriptor_lock.unlock();
+        io_service_.post_immediate_completion(op, is_continuation);
+        return;
+      }
+    }
+    else
+    {
+      struct kevent events[2];
+      BOOST_ASIO_KQUEUE_EV_SET(&events[0], descriptor, EVFILT_READ,
+          EV_ADD | EV_CLEAR, 0, 0, descriptor_data);
+      BOOST_ASIO_KQUEUE_EV_SET(&events[1], descriptor, EVFILT_WRITE,
+          EV_ADD | EV_CLEAR, 0, 0, descriptor_data);
+      ::kevent(kqueue_fd_, events, 2, 0, 0, 0);
+    }
+  }
+
+  descriptor_data->op_queue_[op_type].push(op);
+  io_service_.work_started();
+}
+
+void kqueue_reactor::cancel_ops(socket_type,
+    kqueue_reactor::per_descriptor_data& descriptor_data)
+{
+  if (!descriptor_data)
+    return;
+
+  mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
+
+  op_queue<operation> ops;
+  for (int i = 0; i < max_ops; ++i)
+  {
+    while (reactor_op* op = descriptor_data->op_queue_[i].front())
+    {
+      op->ec_ = boost::asio::error::operation_aborted;
+      descriptor_data->op_queue_[i].pop();
+      ops.push(op);
+    }
+  }
+
+  descriptor_lock.unlock();
+
+  io_service_.post_deferred_completions(ops);
+}
+
+void kqueue_reactor::deregister_descriptor(socket_type descriptor,
+    kqueue_reactor::per_descriptor_data& descriptor_data, bool closing)
+{
+  if (!descriptor_data)
+    return;
+
+  mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
+
+  if (!descriptor_data->shutdown_)
+  {
+    if (closing)
+    {
+      // The descriptor will be automatically removed from the kqueue when it
+      // is closed.
+    }
+    else
+    {
+      struct kevent events[2];
+      BOOST_ASIO_KQUEUE_EV_SET(&events[0], descriptor,
+          EVFILT_READ, EV_DELETE, 0, 0, 0);
+      BOOST_ASIO_KQUEUE_EV_SET(&events[1], descriptor,
+          EVFILT_WRITE, EV_DELETE, 0, 0, 0);
+      ::kevent(kqueue_fd_, events, 2, 0, 0, 0);
+    }
+
+    op_queue<operation> ops;
+    for (int i = 0; i < max_ops; ++i)
+    {
+      while (reactor_op* op = descriptor_data->op_queue_[i].front())
+      {
+        op->ec_ = boost::asio::error::operation_aborted;
+        descriptor_data->op_queue_[i].pop();
+        ops.push(op);
+      }
+    }
+
+    descriptor_data->descriptor_ = -1;
+    descriptor_data->shutdown_ = true;
+
+    descriptor_lock.unlock();
+
+    free_descriptor_state(descriptor_data);
+    descriptor_data = 0;
+
+    io_service_.post_deferred_completions(ops);
+  }
+}
+
+void kqueue_reactor::deregister_internal_descriptor(socket_type descriptor,
+    kqueue_reactor::per_descriptor_data& descriptor_data)
+{
+  if (!descriptor_data)
+    return;
+
+  mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
+
+  if (!descriptor_data->shutdown_)
+  {
+    struct kevent events[2];
+    BOOST_ASIO_KQUEUE_EV_SET(&events[0], descriptor,
+        EVFILT_READ, EV_DELETE, 0, 0, 0);
+    BOOST_ASIO_KQUEUE_EV_SET(&events[1], descriptor,
+        EVFILT_WRITE, EV_DELETE, 0, 0, 0);
+    ::kevent(kqueue_fd_, events, 2, 0, 0, 0);
+
+    op_queue<operation> ops;
+    for (int i = 0; i < max_ops; ++i)
+      ops.push(descriptor_data->op_queue_[i]);
+
+    descriptor_data->descriptor_ = -1;
+    descriptor_data->shutdown_ = true;
+
+    descriptor_lock.unlock();
+
+    free_descriptor_state(descriptor_data);
+    descriptor_data = 0;
+  }
+}
+
+void kqueue_reactor::run(bool block, op_queue<operation>& ops)
+{
+  mutex::scoped_lock lock(mutex_);
+
+  // Determine how long to block while waiting for events.
+  timespec timeout_buf = { 0, 0 };
+  timespec* timeout = block ? get_timeout(timeout_buf) : &timeout_buf;
+
+  lock.unlock();
+
+  // Block on the kqueue descriptor.
+  struct kevent events[128];
+  int num_events = kevent(kqueue_fd_, 0, 0, events, 128, timeout);
+
+  // Dispatch the waiting events.
+  for (int i = 0; i < num_events; ++i)
+  {
+    void* ptr = reinterpret_cast<void*>(events[i].udata);
+    if (ptr == &interrupter_)
+    {
+      interrupter_.reset();
+    }
+    else
+    {
+      descriptor_state* descriptor_data = static_cast<descriptor_state*>(ptr);
+      mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
+
+      // Exception operations must be processed first to ensure that any
+      // out-of-band data is read before normal data.
+#if defined(__NetBSD__)
+      static const unsigned int filter[max_ops] =
+#else
+      static const int filter[max_ops] =
+#endif
+        { EVFILT_READ, EVFILT_WRITE, EVFILT_READ };
+      for (int j = max_ops - 1; j >= 0; --j)
+      {
+        if (events[i].filter == filter[j])
+        {
+          if (j != except_op || events[i].flags & EV_OOBAND)
+          {
+            while (reactor_op* op = descriptor_data->op_queue_[j].front())
+            {
+              if (events[i].flags & EV_ERROR)
+              {
+                op->ec_ = boost::system::error_code(
+                    static_cast<int>(events[i].data),
+                    boost::asio::error::get_system_category());
+                descriptor_data->op_queue_[j].pop();
+                ops.push(op);
+              }
+              if (op->perform())
+              {
+                descriptor_data->op_queue_[j].pop();
+                ops.push(op);
+              }
+              else
+                break;
+            }
+          }
+        }
+      }
+    }
+  }
+
+  lock.lock();
+  timer_queues_.get_ready_timers(ops);
+}
+
+void kqueue_reactor::interrupt()
+{
+  interrupter_.interrupt();
+}
+
+int kqueue_reactor::do_kqueue_create()
+{
+  int fd = ::kqueue();
+  if (fd == -1)
+  {
+    boost::system::error_code ec(errno,
+        boost::asio::error::get_system_category());
+    boost::asio::detail::throw_error(ec, "kqueue");
+  }
+  return fd;
+}
+
+kqueue_reactor::descriptor_state* kqueue_reactor::allocate_descriptor_state()
+{
+  mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_);
+  return registered_descriptors_.alloc();
+}
+
+void kqueue_reactor::free_descriptor_state(kqueue_reactor::descriptor_state* s)
+{
+  mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_);
+  registered_descriptors_.free(s);
+}
+
+void kqueue_reactor::do_add_timer_queue(timer_queue_base& queue)
+{
+  mutex::scoped_lock lock(mutex_);
+  timer_queues_.insert(&queue);
+}
+
+void kqueue_reactor::do_remove_timer_queue(timer_queue_base& queue)
+{
+  mutex::scoped_lock lock(mutex_);
+  timer_queues_.erase(&queue);
+}
+
+timespec* kqueue_reactor::get_timeout(timespec& ts)
+{
+  // By default we will wait no longer than 5 minutes. This will ensure that
+  // any changes to the system clock are detected after no longer than this.
+  long usec = timer_queues_.wait_duration_usec(5 * 60 * 1000 * 1000);
+  ts.tv_sec = usec / 1000000;
+  ts.tv_nsec = (usec % 1000000) * 1000;
+  return &ts;
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#undef BOOST_ASIO_KQUEUE_EV_SET
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_KQUEUE)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_KQUEUE_REACTOR_IPP
diff --git a/ext/patches/boost/asio/detail/impl/pipe_select_interrupter.ipp b/ext/patches/boost/asio/detail/impl/pipe_select_interrupter.ipp
new file mode 100644
index 0000000..309e45f
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/pipe_select_interrupter.ipp
@@ -0,0 +1,126 @@
+//
+// detail/impl/pipe_select_interrupter.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_PIPE_SELECT_INTERRUPTER_IPP
+#define BOOST_ASIO_DETAIL_IMPL_PIPE_SELECT_INTERRUPTER_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+#if !defined(BOOST_ASIO_WINDOWS)
+#if !defined(__CYGWIN__)
+#if !defined(__SYMBIAN32__)
+#if !defined(BOOST_ASIO_HAS_EVENTFD)
+
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <boost/asio/detail/pipe_select_interrupter.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+pipe_select_interrupter::pipe_select_interrupter()
+{
+  open_descriptors();
+}
+
+void pipe_select_interrupter::open_descriptors()
+{
+  int pipe_fds[2];
+  if (pipe(pipe_fds) == 0)
+  {
+    read_descriptor_ = pipe_fds[0];
+    ::fcntl(read_descriptor_, F_SETFL, O_NONBLOCK);
+    write_descriptor_ = pipe_fds[1];
+    ::fcntl(write_descriptor_, F_SETFL, O_NONBLOCK);
+
+#if defined(FD_CLOEXEC)
+    ::fcntl(read_descriptor_, F_SETFD, FD_CLOEXEC);
+    ::fcntl(write_descriptor_, F_SETFD, FD_CLOEXEC);
+#endif // defined(FD_CLOEXEC)
+  }
+  else
+  {
+    boost::system::error_code ec(errno,
+        boost::asio::error::get_system_category());
+    boost::asio::detail::throw_error(ec, "pipe_select_interrupter");
+  }
+}
+
+pipe_select_interrupter::~pipe_select_interrupter()
+{
+  close_descriptors();
+}
+
+void pipe_select_interrupter::close_descriptors()
+{
+  if (read_descriptor_ != -1)
+    ::close(read_descriptor_);
+  if (write_descriptor_ != -1)
+    ::close(write_descriptor_);
+}
+
+void pipe_select_interrupter::recreate()
+{
+  close_descriptors();
+
+  write_descriptor_ = -1;
+  read_descriptor_ = -1;
+
+  open_descriptors();
+}
+
+void pipe_select_interrupter::interrupt()
+{
+  char byte = 0;
+  signed_size_type result = ::write(write_descriptor_, &byte, 1);
+  (void)result;
+}
+
+bool pipe_select_interrupter::reset()
+{
+  for (;;)
+  {
+    char data[1024];
+    signed_size_type bytes_read = ::read(read_descriptor_, data, sizeof(data));
+    if (bytes_read < 0 && errno == EINTR)
+      continue;
+    bool was_interrupted = (bytes_read > 0);
+    while (bytes_read == sizeof(data))
+      bytes_read = ::read(read_descriptor_, data, sizeof(data));
+    return was_interrupted;
+  }
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_HAS_EVENTFD)
+#endif // !defined(__SYMBIAN32__)
+#endif // !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_WINDOWS)
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_PIPE_SELECT_INTERRUPTER_IPP
diff --git a/ext/patches/boost/asio/detail/impl/posix_event.ipp b/ext/patches/boost/asio/detail/impl/posix_event.ipp
new file mode 100644
index 0000000..bb2a3d2
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/posix_event.ipp
@@ -0,0 +1,49 @@
+//
+// detail/impl/posix_event.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_POSIX_EVENT_IPP
+#define BOOST_ASIO_DETAIL_IMPL_POSIX_EVENT_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_PTHREADS)
+
+#include <boost/asio/detail/posix_event.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+posix_event::posix_event()
+  : state_(0)
+{
+  int error = ::pthread_cond_init(&cond_, 0);
+  boost::system::error_code ec(error,
+      boost::asio::error::get_system_category());
+  boost::asio::detail::throw_error(ec, "event");
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_PTHREADS)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_POSIX_EVENT_IPP
diff --git a/ext/patches/boost/asio/detail/impl/posix_mutex.ipp b/ext/patches/boost/asio/detail/impl/posix_mutex.ipp
new file mode 100644
index 0000000..7cc3b6f
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/posix_mutex.ipp
@@ -0,0 +1,48 @@
+//
+// detail/impl/posix_mutex.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_POSIX_MUTEX_IPP
+#define BOOST_ASIO_DETAIL_IMPL_POSIX_MUTEX_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_PTHREADS)
+
+#include <boost/asio/detail/posix_mutex.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+posix_mutex::posix_mutex()
+{
+  int error = ::pthread_mutex_init(&mutex_, 0);
+  boost::system::error_code ec(error,
+      boost::asio::error::get_system_category());
+  boost::asio::detail::throw_error(ec, "mutex");
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_PTHREADS)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_POSIX_MUTEX_IPP
diff --git a/ext/patches/boost/asio/detail/impl/posix_thread.ipp b/ext/patches/boost/asio/detail/impl/posix_thread.ipp
new file mode 100644
index 0000000..386dc77
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/posix_thread.ipp
@@ -0,0 +1,76 @@
+//
+// detail/impl/posix_thread.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_POSIX_THREAD_IPP
+#define BOOST_ASIO_DETAIL_IMPL_POSIX_THREAD_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_PTHREADS)
+
+#include <boost/asio/detail/posix_thread.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+posix_thread::~posix_thread()
+{
+  if (!joined_)
+    ::pthread_detach(thread_);
+}
+
+void posix_thread::join()
+{
+  if (!joined_)
+  {
+    ::pthread_join(thread_, 0);
+    joined_ = true;
+  }
+}
+
+void posix_thread::start_thread(func_base* arg)
+{
+  int error = ::pthread_create(&thread_, 0,
+        boost_asio_detail_posix_thread_function, arg);
+  if (error != 0)
+  {
+    delete arg;
+    boost::system::error_code ec(error,
+        boost::asio::error::get_system_category());
+    boost::asio::detail::throw_error(ec, "thread");
+  }
+}
+
+void* boost_asio_detail_posix_thread_function(void* arg)
+{
+  posix_thread::auto_func_base_ptr func = {
+      static_cast<posix_thread::func_base*>(arg) };
+  func.ptr->run();
+  return 0;
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_PTHREADS)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_POSIX_THREAD_IPP
diff --git a/ext/patches/boost/asio/detail/impl/posix_tss_ptr.ipp b/ext/patches/boost/asio/detail/impl/posix_tss_ptr.ipp
new file mode 100644
index 0000000..3d83cff
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/posix_tss_ptr.ipp
@@ -0,0 +1,48 @@
+//
+// detail/impl/posix_tss_ptr.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_POSIX_TSS_PTR_IPP
+#define BOOST_ASIO_DETAIL_IMPL_POSIX_TSS_PTR_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_PTHREADS)
+
+#include <boost/asio/detail/posix_tss_ptr.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+void posix_tss_ptr_create(pthread_key_t& key)
+{
+  int error = ::pthread_key_create(&key, 0);
+  boost::system::error_code ec(error,
+      boost::asio::error::get_system_category());
+  boost::asio::detail::throw_error(ec, "tss");
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_PTHREADS)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_POSIX_TSS_PTR_IPP
diff --git a/ext/patches/boost/asio/detail/impl/reactive_descriptor_service.ipp b/ext/patches/boost/asio/detail/impl/reactive_descriptor_service.ipp
new file mode 100644
index 0000000..d046b93
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/reactive_descriptor_service.ipp
@@ -0,0 +1,210 @@
+//
+// detail/impl/reactive_descriptor_service.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_REACTIVE_DESCRIPTOR_SERVICE_IPP
+#define BOOST_ASIO_DETAIL_IMPL_REACTIVE_DESCRIPTOR_SERVICE_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  && !defined(__CYGWIN__)
+
+#include <boost/asio/error.hpp>
+#include <boost/asio/detail/reactive_descriptor_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+reactive_descriptor_service::reactive_descriptor_service(
+    boost::asio::io_service& io_service)
+  : reactor_(boost::asio::use_service<reactor>(io_service))
+{
+  reactor_.init_task();
+}
+
+void reactive_descriptor_service::shutdown_service()
+{
+}
+
+void reactive_descriptor_service::construct(
+    reactive_descriptor_service::implementation_type& impl)
+{
+  impl.descriptor_ = -1;
+  impl.state_ = 0;
+}
+
+void reactive_descriptor_service::move_construct(
+    reactive_descriptor_service::implementation_type& impl,
+    reactive_descriptor_service::implementation_type& other_impl)
+{
+  impl.descriptor_ = other_impl.descriptor_;
+  other_impl.descriptor_ = -1;
+
+  impl.state_ = other_impl.state_;
+  other_impl.state_ = 0;
+
+  reactor_.move_descriptor(impl.descriptor_,
+      impl.reactor_data_, other_impl.reactor_data_);
+}
+
+void reactive_descriptor_service::move_assign(
+    reactive_descriptor_service::implementation_type& impl,
+    reactive_descriptor_service& other_service,
+    reactive_descriptor_service::implementation_type& other_impl)
+{
+  destroy(impl);
+
+  impl.descriptor_ = other_impl.descriptor_;
+  other_impl.descriptor_ = -1;
+
+  impl.state_ = other_impl.state_;
+  other_impl.state_ = 0;
+
+  other_service.reactor_.move_descriptor(impl.descriptor_,
+      impl.reactor_data_, other_impl.reactor_data_);
+}
+
+void reactive_descriptor_service::destroy(
+    reactive_descriptor_service::implementation_type& impl)
+{
+  if (is_open(impl))
+  {
+    BOOST_ASIO_HANDLER_OPERATION(("descriptor", &impl, "close"));
+
+    reactor_.deregister_descriptor(impl.descriptor_, impl.reactor_data_,
+        (impl.state_ & descriptor_ops::possible_dup) == 0);
+  }
+
+  boost::system::error_code ignored_ec;
+  descriptor_ops::close(impl.descriptor_, impl.state_, ignored_ec);
+}
+
+boost::system::error_code reactive_descriptor_service::assign(
+    reactive_descriptor_service::implementation_type& impl,
+    const native_handle_type& native_descriptor, boost::system::error_code& ec)
+{
+  if (is_open(impl))
+  {
+    ec = boost::asio::error::already_open;
+    return ec;
+  }
+
+  if (int err = reactor_.register_descriptor(
+        native_descriptor, impl.reactor_data_))
+  {
+    ec = boost::system::error_code(err,
+        boost::asio::error::get_system_category());
+    return ec;
+  }
+
+  impl.descriptor_ = native_descriptor;
+  impl.state_ = descriptor_ops::possible_dup;
+  ec = boost::system::error_code();
+  return ec;
+}
+
+boost::system::error_code reactive_descriptor_service::close(
+    reactive_descriptor_service::implementation_type& impl,
+    boost::system::error_code& ec)
+{
+  if (is_open(impl))
+  {
+    BOOST_ASIO_HANDLER_OPERATION(("descriptor", &impl, "close"));
+
+    reactor_.deregister_descriptor(impl.descriptor_, impl.reactor_data_,
+        (impl.state_ & descriptor_ops::possible_dup) == 0);
+  }
+
+  descriptor_ops::close(impl.descriptor_, impl.state_, ec);
+
+  // The descriptor is closed by the OS even if close() returns an error.
+  //
+  // (Actually, POSIX says the state of the descriptor is unspecified. On
+  // Linux the descriptor is apparently closed anyway; e.g. see
+  //   http://lkml.org/lkml/2005/9/10/129
+  // We'll just have to assume that other OSes follow the same behaviour.)
+  construct(impl);
+
+  return ec;
+}
+
+reactive_descriptor_service::native_handle_type
+reactive_descriptor_service::release(
+    reactive_descriptor_service::implementation_type& impl)
+{
+  native_handle_type descriptor = impl.descriptor_;
+
+  if (is_open(impl))
+  {
+    BOOST_ASIO_HANDLER_OPERATION(("descriptor", &impl, "release"));
+
+    reactor_.deregister_descriptor(impl.descriptor_, impl.reactor_data_, false);
+    construct(impl);
+  }
+
+  return descriptor;
+}
+
+boost::system::error_code reactive_descriptor_service::cancel(
+    reactive_descriptor_service::implementation_type& impl,
+    boost::system::error_code& ec)
+{
+  if (!is_open(impl))
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return ec;
+  }
+
+  BOOST_ASIO_HANDLER_OPERATION(("descriptor", &impl, "cancel"));
+
+  reactor_.cancel_ops(impl.descriptor_, impl.reactor_data_);
+  ec = boost::system::error_code();
+  return ec;
+}
+
+void reactive_descriptor_service::start_op(
+    reactive_descriptor_service::implementation_type& impl,
+    int op_type, reactor_op* op, bool is_continuation,
+    bool is_non_blocking, bool noop)
+{
+  if (!noop)
+  {
+    if ((impl.state_ & descriptor_ops::non_blocking) ||
+        descriptor_ops::set_internal_non_blocking(
+          impl.descriptor_, impl.state_, true, op->ec_))
+    {
+      reactor_.start_op(op_type, impl.descriptor_,
+          impl.reactor_data_, op, is_continuation, is_non_blocking);
+      return;
+    }
+  }
+
+  reactor_.post_immediate_completion(op, is_continuation);
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_WINDOWS)
+       //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+       //   && !defined(__CYGWIN__)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_REACTIVE_DESCRIPTOR_SERVICE_IPP
diff --git a/ext/patches/boost/asio/detail/impl/reactive_serial_port_service.ipp b/ext/patches/boost/asio/detail/impl/reactive_serial_port_service.ipp
new file mode 100644
index 0000000..d8ddae5
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/reactive_serial_port_service.ipp
@@ -0,0 +1,153 @@
+//
+// detail/impl/reactive_serial_port_service.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2008 Rep Invariant Systems, Inc. (info at repinvariant.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_REACTIVE_SERIAL_PORT_SERVICE_IPP
+#define BOOST_ASIO_DETAIL_IMPL_REACTIVE_SERIAL_PORT_SERVICE_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_SERIAL_PORT)
+#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+#include <cstring>
+#include <boost/asio/detail/reactive_serial_port_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+reactive_serial_port_service::reactive_serial_port_service(
+    boost::asio::io_service& io_service)
+  : descriptor_service_(io_service)
+{
+}
+
+void reactive_serial_port_service::shutdown_service()
+{
+  descriptor_service_.shutdown_service();
+}
+
+boost::system::error_code reactive_serial_port_service::open(
+    reactive_serial_port_service::implementation_type& impl,
+    const std::string& device, boost::system::error_code& ec)
+{
+  if (is_open(impl))
+  {
+    ec = boost::asio::error::already_open;
+    return ec;
+  }
+
+  descriptor_ops::state_type state = 0;
+  int fd = descriptor_ops::open(device.c_str(),
+      O_RDWR | O_NONBLOCK | O_NOCTTY, ec);
+  if (fd < 0)
+    return ec;
+
+  int s = descriptor_ops::fcntl(fd, F_GETFL, ec);
+  if (s >= 0)
+    s = descriptor_ops::fcntl(fd, F_SETFL, s | O_NONBLOCK, ec);
+  if (s < 0)
+  {
+    boost::system::error_code ignored_ec;
+    descriptor_ops::close(fd, state, ignored_ec);
+    return ec;
+  }
+
+  // Set up default serial port options.
+  termios ios;
+  errno = 0;
+  s = descriptor_ops::error_wrapper(::tcgetattr(fd, &ios), ec);
+  if (s >= 0)
+  {
+#if defined(_BSD_SOURCE)
+    ::cfmakeraw(&ios);
+#else
+    ios.c_iflag &= ~(IGNBRK | BRKINT | PARMRK
+        | ISTRIP | INLCR | IGNCR | ICRNL | IXON);
+    ios.c_oflag &= ~OPOST;
+    ios.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
+    ios.c_cflag &= ~(CSIZE | PARENB);
+    ios.c_cflag |= CS8;
+#endif
+    ios.c_iflag |= IGNPAR;
+    ios.c_cflag |= CREAD | CLOCAL;
+    errno = 0;
+    s = descriptor_ops::error_wrapper(::tcsetattr(fd, TCSANOW, &ios), ec);
+  }
+  if (s < 0)
+  {
+    boost::system::error_code ignored_ec;
+    descriptor_ops::close(fd, state, ignored_ec);
+    return ec;
+  }
+
+  // We're done. Take ownership of the serial port descriptor.
+  if (descriptor_service_.assign(impl, fd, ec))
+  {
+    boost::system::error_code ignored_ec;
+    descriptor_ops::close(fd, state, ignored_ec);
+  }
+
+  return ec;
+}
+
+boost::system::error_code reactive_serial_port_service::do_set_option(
+    reactive_serial_port_service::implementation_type& impl,
+    reactive_serial_port_service::store_function_type store,
+    const void* option, boost::system::error_code& ec)
+{
+  termios ios;
+  errno = 0;
+  descriptor_ops::error_wrapper(::tcgetattr(
+        descriptor_service_.native_handle(impl), &ios), ec);
+  if (ec)
+    return ec;
+
+  if (store(option, ios, ec))
+    return ec;
+
+  errno = 0;
+  descriptor_ops::error_wrapper(::tcsetattr(
+        descriptor_service_.native_handle(impl), TCSANOW, &ios), ec);
+  return ec;
+}
+
+boost::system::error_code reactive_serial_port_service::do_get_option(
+    const reactive_serial_port_service::implementation_type& impl,
+    reactive_serial_port_service::load_function_type load,
+    void* option, boost::system::error_code& ec) const
+{
+  termios ios;
+  errno = 0;
+  descriptor_ops::error_wrapper(::tcgetattr(
+        descriptor_service_.native_handle(impl), &ios), ec);
+  if (ec)
+    return ec;
+
+  return load(option, ios, ec);
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#endif // defined(BOOST_ASIO_HAS_SERIAL_PORT)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_REACTIVE_SERIAL_PORT_SERVICE_IPP
diff --git a/ext/patches/boost/asio/detail/impl/reactive_socket_service_base.ipp b/ext/patches/boost/asio/detail/impl/reactive_socket_service_base.ipp
new file mode 100644
index 0000000..c53fc88
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/reactive_socket_service_base.ipp
@@ -0,0 +1,269 @@
+//
+// detail/reactive_socket_service_base.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_REACTIVE_SOCKET_SERVICE_BASE_IPP
+#define BOOST_ASIO_DETAIL_IMPL_REACTIVE_SOCKET_SERVICE_BASE_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_IOCP) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/detail/reactive_socket_service_base.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+reactive_socket_service_base::reactive_socket_service_base(
+    boost::asio::io_service& io_service)
+  : reactor_(use_service<reactor>(io_service))
+{
+  reactor_.init_task();
+}
+
+void reactive_socket_service_base::shutdown_service()
+{
+}
+
+void reactive_socket_service_base::construct(
+    reactive_socket_service_base::base_implementation_type& impl)
+{
+  impl.socket_ = invalid_socket;
+  impl.state_ = 0;
+}
+
+void reactive_socket_service_base::base_move_construct(
+    reactive_socket_service_base::base_implementation_type& impl,
+    reactive_socket_service_base::base_implementation_type& other_impl)
+{
+  impl.socket_ = other_impl.socket_;
+  other_impl.socket_ = invalid_socket;
+
+  impl.state_ = other_impl.state_;
+  other_impl.state_ = 0;
+
+  reactor_.move_descriptor(impl.socket_,
+      impl.reactor_data_, other_impl.reactor_data_);
+}
+
+void reactive_socket_service_base::base_move_assign(
+    reactive_socket_service_base::base_implementation_type& impl,
+    reactive_socket_service_base& other_service,
+    reactive_socket_service_base::base_implementation_type& other_impl)
+{
+  destroy(impl);
+
+  impl.socket_ = other_impl.socket_;
+  other_impl.socket_ = invalid_socket;
+
+  impl.state_ = other_impl.state_;
+  other_impl.state_ = 0;
+
+  other_service.reactor_.move_descriptor(impl.socket_,
+      impl.reactor_data_, other_impl.reactor_data_);
+}
+
+void reactive_socket_service_base::destroy(
+    reactive_socket_service_base::base_implementation_type& impl)
+{
+  if (impl.socket_ != invalid_socket)
+  {
+    BOOST_ASIO_HANDLER_OPERATION(("socket", &impl, "close"));
+
+    reactor_.deregister_descriptor(impl.socket_, impl.reactor_data_,
+        (impl.state_ & socket_ops::possible_dup) == 0);
+
+    boost::system::error_code ignored_ec;
+    socket_ops::close(impl.socket_, impl.state_, true, ignored_ec);
+  }
+}
+
+boost::system::error_code reactive_socket_service_base::close(
+    reactive_socket_service_base::base_implementation_type& impl,
+    boost::system::error_code& ec)
+{
+  if (is_open(impl))
+  {
+    BOOST_ASIO_HANDLER_OPERATION(("socket", &impl, "close"));
+
+    reactor_.deregister_descriptor(impl.socket_, impl.reactor_data_,
+        (impl.state_ & socket_ops::possible_dup) == 0);
+  }
+
+  socket_ops::close(impl.socket_, impl.state_, false, ec);
+
+  // The descriptor is closed by the OS even if close() returns an error.
+  //
+  // (Actually, POSIX says the state of the descriptor is unspecified. On
+  // Linux the descriptor is apparently closed anyway; e.g. see
+  //   http://lkml.org/lkml/2005/9/10/129
+  // We'll just have to assume that other OSes follow the same behaviour. The
+  // known exception is when Windows's closesocket() function fails with
+  // WSAEWOULDBLOCK, but this case is handled inside socket_ops::close().
+  construct(impl);
+
+  return ec;
+}
+
+boost::system::error_code reactive_socket_service_base::cancel(
+    reactive_socket_service_base::base_implementation_type& impl,
+    boost::system::error_code& ec)
+{
+  if (!is_open(impl))
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return ec;
+  }
+
+  BOOST_ASIO_HANDLER_OPERATION(("socket", &impl, "cancel"));
+
+  reactor_.cancel_ops(impl.socket_, impl.reactor_data_);
+  ec = boost::system::error_code();
+  return ec;
+}
+
+boost::system::error_code reactive_socket_service_base::do_open(
+    reactive_socket_service_base::base_implementation_type& impl,
+    int af, int type, int protocol, boost::system::error_code& ec)
+{
+  if (is_open(impl))
+  {
+    ec = boost::asio::error::already_open;
+    return ec;
+  }
+
+  socket_holder sock(socket_ops::socket(af, type, protocol, ec));
+  if (sock.get() == invalid_socket)
+    return ec;
+
+  if (int err = reactor_.register_descriptor(sock.get(), impl.reactor_data_))
+  {
+    ec = boost::system::error_code(err,
+        boost::asio::error::get_system_category());
+    return ec;
+  }
+
+  impl.socket_ = sock.release();
+  switch (type)
+  {
+  case SOCK_STREAM: impl.state_ = socket_ops::stream_oriented; break;
+  case SOCK_DGRAM: impl.state_ = socket_ops::datagram_oriented; break;
+  default: impl.state_ = 0; break;
+  }
+  ec = boost::system::error_code();
+  return ec;
+}
+
+boost::system::error_code reactive_socket_service_base::do_assign(
+    reactive_socket_service_base::base_implementation_type& impl, int type,
+    const reactive_socket_service_base::native_handle_type& native_socket,
+    boost::system::error_code& ec)
+{
+  if (is_open(impl))
+  {
+    ec = boost::asio::error::already_open;
+    return ec;
+  }
+
+  if (int err = reactor_.register_descriptor(
+        native_socket, impl.reactor_data_))
+  {
+    ec = boost::system::error_code(err,
+        boost::asio::error::get_system_category());
+    return ec;
+  }
+
+  impl.socket_ = native_socket;
+  switch (type)
+  {
+  case SOCK_STREAM: impl.state_ = socket_ops::stream_oriented; break;
+  case SOCK_DGRAM: impl.state_ = socket_ops::datagram_oriented; break;
+  default: impl.state_ = 0; break;
+  }
+  impl.state_ |= socket_ops::possible_dup;
+  ec = boost::system::error_code();
+  return ec;
+}
+
+void reactive_socket_service_base::start_op(
+    reactive_socket_service_base::base_implementation_type& impl,
+    int op_type, reactor_op* op, bool is_continuation,
+    bool is_non_blocking, bool noop)
+{
+  if (!noop)
+  {
+    if ((impl.state_ & socket_ops::non_blocking)
+        || socket_ops::set_internal_non_blocking(
+          impl.socket_, impl.state_, true, op->ec_))
+    {
+      reactor_.start_op(op_type, impl.socket_,
+          impl.reactor_data_, op, is_continuation, is_non_blocking);
+      return;
+    }
+  }
+
+  reactor_.post_immediate_completion(op, is_continuation);
+}
+
+void reactive_socket_service_base::start_accept_op(
+    reactive_socket_service_base::base_implementation_type& impl,
+    reactor_op* op, bool is_continuation, bool peer_is_open)
+{
+  if (!peer_is_open)
+    start_op(impl, reactor::read_op, op, true, is_continuation, false);
+  else
+  {
+    op->ec_ = boost::asio::error::already_open;
+    reactor_.post_immediate_completion(op, is_continuation);
+  }
+}
+
+void reactive_socket_service_base::start_connect_op(
+    reactive_socket_service_base::base_implementation_type& impl,
+    reactor_op* op, bool is_continuation,
+    const socket_addr_type* addr, size_t addrlen)
+{
+  if ((impl.state_ & socket_ops::non_blocking)
+      || socket_ops::set_internal_non_blocking(
+        impl.socket_, impl.state_, true, op->ec_))
+  {
+    if (socket_ops::connect(impl.socket_, addr, addrlen, op->ec_) != 0)
+    {
+      if (op->ec_ == boost::asio::error::in_progress
+          || op->ec_ == boost::asio::error::would_block)
+      {
+        op->ec_ = boost::system::error_code();
+        reactor_.start_op(reactor::connect_op, impl.socket_,
+            impl.reactor_data_, op, is_continuation, false);
+        return;
+      }
+    }
+  }
+
+  reactor_.post_immediate_completion(op, is_continuation);
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_HAS_IOCP)
+       //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_REACTIVE_SOCKET_SERVICE_BASE_IPP
diff --git a/ext/patches/boost/asio/detail/impl/resolver_service_base.ipp b/ext/patches/boost/asio/detail/impl/resolver_service_base.ipp
new file mode 100644
index 0000000..bffc4fb
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/resolver_service_base.ipp
@@ -0,0 +1,132 @@
+//
+// detail/impl/resolver_service_base.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_RESOLVER_SERVICE_BASE_IPP
+#define BOOST_ASIO_DETAIL_IMPL_RESOLVER_SERVICE_BASE_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/resolver_service_base.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class resolver_service_base::work_io_service_runner
+{
+public:
+  work_io_service_runner(boost::asio::io_service& io_service)
+    : io_service_(io_service) {}
+  void operator()() { io_service_.run(); }
+private:
+  boost::asio::io_service& io_service_;
+};
+
+resolver_service_base::resolver_service_base(
+    boost::asio::io_service& io_service)
+  : io_service_impl_(boost::asio::use_service<io_service_impl>(io_service)),
+    work_io_service_(new boost::asio::io_service),
+    work_io_service_impl_(boost::asio::use_service<
+        io_service_impl>(*work_io_service_)),
+    work_(new boost::asio::io_service::work(*work_io_service_)),
+    work_thread_(0)
+{
+}
+
+resolver_service_base::~resolver_service_base()
+{
+  shutdown_service();
+}
+
+void resolver_service_base::shutdown_service()
+{
+  work_.reset();
+  if (work_io_service_.get())
+  {
+    work_io_service_->stop();
+    if (work_thread_.get())
+    {
+      work_thread_->join();
+      work_thread_.reset();
+    }
+    work_io_service_.reset();
+  }
+}
+
+void resolver_service_base::fork_service(
+    boost::asio::io_service::fork_event fork_ev)
+{
+  if (work_thread_.get())
+  {
+    if (fork_ev == boost::asio::io_service::fork_prepare)
+    {
+      work_io_service_->stop();
+      work_thread_->join();
+    }
+    else
+    {
+      work_io_service_->reset();
+      work_thread_.reset(new boost::asio::detail::thread(
+            work_io_service_runner(*work_io_service_)));
+    }
+  }
+}
+
+void resolver_service_base::construct(
+    resolver_service_base::implementation_type& impl)
+{
+  impl.reset(static_cast<void*>(0), socket_ops::noop_deleter());
+}
+
+void resolver_service_base::destroy(
+    resolver_service_base::implementation_type& impl)
+{
+  BOOST_ASIO_HANDLER_OPERATION(("resolver", &impl, "cancel"));
+
+  impl.reset();
+}
+
+void resolver_service_base::cancel(
+    resolver_service_base::implementation_type& impl)
+{
+  BOOST_ASIO_HANDLER_OPERATION(("resolver", &impl, "cancel"));
+
+  impl.reset(static_cast<void*>(0), socket_ops::noop_deleter());
+}
+
+void resolver_service_base::start_resolve_op(operation* op)
+{
+  start_work_thread();
+  io_service_impl_.work_started();
+  work_io_service_impl_.post_immediate_completion(op, false);
+}
+
+void resolver_service_base::start_work_thread()
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  if (!work_thread_.get())
+  {
+    work_thread_.reset(new boost::asio::detail::thread(
+          work_io_service_runner(*work_io_service_)));
+  }
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_IMPL_RESOLVER_SERVICE_BASE_IPP
diff --git a/ext/patches/boost/asio/detail/impl/select_reactor.hpp b/ext/patches/boost/asio/detail/impl/select_reactor.hpp
new file mode 100644
index 0000000..8b7ac76
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/select_reactor.hpp
@@ -0,0 +1,89 @@
+//
+// detail/impl/select_reactor.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_SELECT_REACTOR_HPP
+#define BOOST_ASIO_DETAIL_IMPL_SELECT_REACTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP) \
+  || (!defined(BOOST_ASIO_HAS_DEV_POLL) \
+      && !defined(BOOST_ASIO_HAS_EPOLL) \
+      && !defined(BOOST_ASIO_HAS_KQUEUE) \
+      && !defined(BOOST_ASIO_WINDOWS_RUNTIME))
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Time_Traits>
+void select_reactor::add_timer_queue(timer_queue<Time_Traits>& queue)
+{
+  do_add_timer_queue(queue);
+}
+
+// Remove a timer queue from the reactor.
+template <typename Time_Traits>
+void select_reactor::remove_timer_queue(timer_queue<Time_Traits>& queue)
+{
+  do_remove_timer_queue(queue);
+}
+
+template <typename Time_Traits>
+void select_reactor::schedule_timer(timer_queue<Time_Traits>& queue,
+    const typename Time_Traits::time_type& time,
+    typename timer_queue<Time_Traits>::per_timer_data& timer, wait_op* op)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+  if (shutdown_)
+  {
+    io_service_.post_immediate_completion(op, false);
+    return;
+  }
+
+  bool earliest = queue.enqueue_timer(time, timer, op);
+  io_service_.work_started();
+  if (earliest)
+    interrupter_.interrupt();
+}
+
+template <typename Time_Traits>
+std::size_t select_reactor::cancel_timer(timer_queue<Time_Traits>& queue,
+    typename timer_queue<Time_Traits>::per_timer_data& timer,
+    std::size_t max_cancelled)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  op_queue<operation> ops;
+  std::size_t n = queue.cancel_timer(timer, ops, max_cancelled);
+  lock.unlock();
+  io_service_.post_deferred_completions(ops);
+  return n;
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+       //   || (!defined(BOOST_ASIO_HAS_DEV_POLL)
+       //       && !defined(BOOST_ASIO_HAS_EPOLL)
+       //       && !defined(BOOST_ASIO_HAS_KQUEUE)
+       //       && !defined(BOOST_ASIO_WINDOWS_RUNTIME))
+
+#endif // BOOST_ASIO_DETAIL_IMPL_SELECT_REACTOR_HPP
diff --git a/ext/patches/boost/asio/detail/impl/select_reactor.ipp b/ext/patches/boost/asio/detail/impl/select_reactor.ipp
new file mode 100644
index 0000000..fda191a
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/select_reactor.ipp
@@ -0,0 +1,315 @@
+//
+// detail/impl/select_reactor.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_SELECT_REACTOR_IPP
+#define BOOST_ASIO_DETAIL_IMPL_SELECT_REACTOR_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP) \
+  || (!defined(BOOST_ASIO_HAS_DEV_POLL) \
+      && !defined(BOOST_ASIO_HAS_EPOLL) \
+      && !defined(BOOST_ASIO_HAS_KQUEUE) \
+      && !defined(BOOST_ASIO_WINDOWS_RUNTIME))
+
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/fd_set_adapter.hpp>
+#include <boost/asio/detail/select_reactor.hpp>
+#include <boost/asio/detail/signal_blocker.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+select_reactor::select_reactor(boost::asio::io_service& io_service)
+  : boost::asio::detail::service_base<select_reactor>(io_service),
+    io_service_(use_service<io_service_impl>(io_service)),
+    mutex_(),
+    interrupter_(),
+#if defined(BOOST_ASIO_HAS_IOCP)
+    stop_thread_(false),
+    thread_(0),
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+    shutdown_(false)
+{
+#if defined(BOOST_ASIO_HAS_IOCP)
+  boost::asio::detail::signal_blocker sb;
+  thread_ = new boost::asio::detail::thread(
+      bind_handler(&select_reactor::call_run_thread, this));
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+}
+
+select_reactor::~select_reactor()
+{
+  shutdown_service();
+}
+
+void select_reactor::shutdown_service()
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  shutdown_ = true;
+#if defined(BOOST_ASIO_HAS_IOCP)
+  stop_thread_ = true;
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+  lock.unlock();
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+  if (thread_)
+  {
+    interrupter_.interrupt();
+    thread_->join();
+    delete thread_;
+    thread_ = 0;
+  }
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+  op_queue<operation> ops;
+
+  for (int i = 0; i < max_ops; ++i)
+    op_queue_[i].get_all_operations(ops);
+
+  timer_queues_.get_all_timers(ops);
+
+  io_service_.abandon_operations(ops);
+}
+
+void select_reactor::fork_service(boost::asio::io_service::fork_event fork_ev)
+{
+  if (fork_ev == boost::asio::io_service::fork_child)
+    interrupter_.recreate();
+}
+
+void select_reactor::init_task()
+{
+  io_service_.init_task();
+}
+
+int select_reactor::register_descriptor(socket_type,
+    select_reactor::per_descriptor_data&)
+{
+  return 0;
+}
+
+int select_reactor::register_internal_descriptor(
+    int op_type, socket_type descriptor,
+    select_reactor::per_descriptor_data&, reactor_op* op)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+  op_queue_[op_type].enqueue_operation(descriptor, op);
+  interrupter_.interrupt();
+
+  return 0;
+}
+
+void select_reactor::move_descriptor(socket_type,
+    select_reactor::per_descriptor_data&,
+    select_reactor::per_descriptor_data&)
+{
+}
+
+void select_reactor::start_op(int op_type, socket_type descriptor,
+    select_reactor::per_descriptor_data&, reactor_op* op,
+    bool is_continuation, bool)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+  if (shutdown_)
+  {
+    post_immediate_completion(op, is_continuation);
+    return;
+  }
+
+  bool first = op_queue_[op_type].enqueue_operation(descriptor, op);
+  io_service_.work_started();
+  if (first)
+    interrupter_.interrupt();
+}
+
+void select_reactor::cancel_ops(socket_type descriptor,
+    select_reactor::per_descriptor_data&)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  cancel_ops_unlocked(descriptor, boost::asio::error::operation_aborted);
+}
+
+void select_reactor::deregister_descriptor(socket_type descriptor,
+    select_reactor::per_descriptor_data&, bool)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  cancel_ops_unlocked(descriptor, boost::asio::error::operation_aborted);
+}
+
+void select_reactor::deregister_internal_descriptor(
+    socket_type descriptor, select_reactor::per_descriptor_data&)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  op_queue<operation> ops;
+  for (int i = 0; i < max_ops; ++i)
+    op_queue_[i].cancel_operations(descriptor, ops);
+}
+
+void select_reactor::run(bool block, op_queue<operation>& ops)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+  // Check if the thread is supposed to stop.
+  if (stop_thread_)
+    return;
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+  // Set up the descriptor sets.
+  for (int i = 0; i < max_select_ops; ++i)
+    fd_sets_[i].reset();
+  fd_sets_[read_op].set(interrupter_.read_descriptor());
+  socket_type max_fd = 0;
+  bool have_work_to_do = !timer_queues_.all_empty();
+  for (int i = 0; i < max_select_ops; ++i)
+  {
+    have_work_to_do = have_work_to_do || !op_queue_[i].empty();
+    fd_sets_[i].set(op_queue_[i], ops);
+    if (fd_sets_[i].max_descriptor() > max_fd)
+      max_fd = fd_sets_[i].max_descriptor();
+  }
+
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  // Connection operations on Windows use both except and write fd_sets.
+  have_work_to_do = have_work_to_do || !op_queue_[connect_op].empty();
+  fd_sets_[write_op].set(op_queue_[connect_op], ops);
+  if (fd_sets_[write_op].max_descriptor() > max_fd)
+    max_fd = fd_sets_[write_op].max_descriptor();
+  fd_sets_[except_op].set(op_queue_[connect_op], ops);
+  if (fd_sets_[except_op].max_descriptor() > max_fd)
+    max_fd = fd_sets_[except_op].max_descriptor();
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+  // We can return immediately if there's no work to do and the reactor is
+  // not supposed to block.
+  if (!block && !have_work_to_do)
+    return;
+
+  // Determine how long to block while waiting for events.
+  timeval tv_buf = { 0, 0 };
+  timeval* tv = block ? get_timeout(tv_buf) : &tv_buf;
+
+  lock.unlock();
+
+  // Block on the select call until descriptors become ready.
+  boost::system::error_code ec;
+  int retval = socket_ops::select(static_cast<int>(max_fd + 1),
+      fd_sets_[read_op], fd_sets_[write_op], fd_sets_[except_op], tv, ec);
+
+  // Reset the interrupter.
+  if (retval > 0 && fd_sets_[read_op].is_set(interrupter_.read_descriptor()))
+  {
+    interrupter_.reset();
+    --retval;
+  }
+
+  lock.lock();
+
+  // Dispatch all ready operations.
+  if (retval > 0)
+  {
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+    // Connection operations on Windows use both except and write fd_sets.
+    fd_sets_[except_op].perform(op_queue_[connect_op], ops);
+    fd_sets_[write_op].perform(op_queue_[connect_op], ops);
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+    // Exception operations must be processed first to ensure that any
+    // out-of-band data is read before normal data.
+    for (int i = max_select_ops - 1; i >= 0; --i)
+      fd_sets_[i].perform(op_queue_[i], ops);
+  }
+  timer_queues_.get_ready_timers(ops);
+}
+
+void select_reactor::interrupt()
+{
+  interrupter_.interrupt();
+}
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+void select_reactor::run_thread()
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  while (!stop_thread_)
+  {
+    lock.unlock();
+    op_queue<operation> ops;
+    run(true, ops);
+    io_service_.post_deferred_completions(ops);
+    lock.lock();
+  }
+}
+
+void select_reactor::call_run_thread(select_reactor* reactor)
+{
+  reactor->run_thread();
+}
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+void select_reactor::do_add_timer_queue(timer_queue_base& queue)
+{
+  mutex::scoped_lock lock(mutex_);
+  timer_queues_.insert(&queue);
+}
+
+void select_reactor::do_remove_timer_queue(timer_queue_base& queue)
+{
+  mutex::scoped_lock lock(mutex_);
+  timer_queues_.erase(&queue);
+}
+
+timeval* select_reactor::get_timeout(timeval& tv)
+{
+  // By default we will wait no longer than 5 minutes. This will ensure that
+  // any changes to the system clock are detected after no longer than this.
+  long usec = timer_queues_.wait_duration_usec(5 * 60 * 1000 * 1000);
+  tv.tv_sec = usec / 1000000;
+  tv.tv_usec = usec % 1000000;
+  return &tv;
+}
+
+void select_reactor::cancel_ops_unlocked(socket_type descriptor,
+    const boost::system::error_code& ec)
+{
+  bool need_interrupt = false;
+  op_queue<operation> ops;
+  for (int i = 0; i < max_ops; ++i)
+    need_interrupt = op_queue_[i].cancel_operations(
+        descriptor, ops, ec) || need_interrupt;
+  io_service_.post_deferred_completions(ops);
+  if (need_interrupt)
+    interrupter_.interrupt();
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+       //   || (!defined(BOOST_ASIO_HAS_DEV_POLL)
+       //       && !defined(BOOST_ASIO_HAS_EPOLL)
+       //       && !defined(BOOST_ASIO_HAS_KQUEUE))
+       //       && !defined(BOOST_ASIO_WINDOWS_RUNTIME))
+
+#endif // BOOST_ASIO_DETAIL_IMPL_SELECT_REACTOR_IPP
diff --git a/ext/patches/boost/asio/detail/impl/service_registry.hpp b/ext/patches/boost/asio/detail/impl/service_registry.hpp
new file mode 100644
index 0000000..71e23bb
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/service_registry.hpp
@@ -0,0 +1,90 @@
+//
+// detail/impl/service_registry.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_SERVICE_REGISTRY_HPP
+#define BOOST_ASIO_DETAIL_IMPL_SERVICE_REGISTRY_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Service, typename Arg>
+service_registry::service_registry(
+    boost::asio::io_service& o, Service*, Arg arg)
+  : owner_(o),
+    first_service_(new Service(o, arg))
+{
+  boost::asio::io_service::service::key key;
+  init_key(key, Service::id);
+  first_service_->key_ = key;
+  first_service_->next_ = 0;
+}
+
+template <typename Service>
+Service& service_registry::first_service()
+{
+  return *static_cast<Service*>(first_service_);
+}
+
+template <typename Service>
+Service& service_registry::use_service()
+{
+  boost::asio::io_service::service::key key;
+  init_key(key, Service::id);
+  factory_type factory = &service_registry::create<Service>;
+  return *static_cast<Service*>(do_use_service(key, factory));
+}
+
+template <typename Service>
+void service_registry::add_service(Service* new_service)
+{
+  boost::asio::io_service::service::key key;
+  init_key(key, Service::id);
+  return do_add_service(key, new_service);
+}
+
+template <typename Service>
+bool service_registry::has_service() const
+{
+  boost::asio::io_service::service::key key;
+  init_key(key, Service::id);
+  return do_has_service(key);
+}
+
+#if !defined(BOOST_ASIO_NO_TYPEID)
+template <typename Service>
+void service_registry::init_key(boost::asio::io_service::service::key& key,
+    const boost::asio::detail::service_id<Service>& /*id*/)
+{
+  key.type_info_ = &typeid(typeid_wrapper<Service>);
+  key.id_ = 0;
+}
+#endif // !defined(BOOST_ASIO_NO_TYPEID)
+
+template <typename Service>
+boost::asio::io_service::service* service_registry::create(
+    boost::asio::io_service& owner)
+{
+  return new Service(owner);
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_IMPL_SERVICE_REGISTRY_HPP
diff --git a/ext/patches/boost/asio/detail/impl/service_registry.ipp b/ext/patches/boost/asio/detail/impl/service_registry.ipp
new file mode 100644
index 0000000..46f9045
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/service_registry.ipp
@@ -0,0 +1,190 @@
+//
+// detail/impl/service_registry.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_SERVICE_REGISTRY_IPP
+#define BOOST_ASIO_DETAIL_IMPL_SERVICE_REGISTRY_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <vector>
+#include <boost/asio/detail/service_registry.hpp>
+#include <boost/asio/detail/throw_exception.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+service_registry::~service_registry()
+{
+  // Shutdown all services. This must be done in a separate loop before the
+  // services are destroyed since the destructors of user-defined handler
+  // objects may try to access other service objects.
+  boost::asio::io_service::service* service = first_service_;
+  while (service)
+  {
+    service->shutdown_service();
+    service = service->next_;
+  }
+
+  // Destroy all services.
+  while (first_service_)
+  {
+    boost::asio::io_service::service* next_service = first_service_->next_;
+    destroy(first_service_);
+    first_service_ = next_service;
+  }
+}
+
+void service_registry::notify_fork(boost::asio::io_service::fork_event fork_ev)
+{
+  // Make a copy of all of the services while holding the lock. We don't want
+  // to hold the lock while calling into each service, as it may try to call
+  // back into this class.
+  std::vector<boost::asio::io_service::service*> services;
+  {
+    boost::asio::detail::mutex::scoped_lock lock(mutex_);
+    boost::asio::io_service::service* service = first_service_;
+    while (service)
+    {
+      services.push_back(service);
+      service = service->next_;
+    }
+  }
+
+  // If processing the fork_prepare event, we want to go in reverse order of
+  // service registration, which happens to be the existing order of the
+  // services in the vector. For the other events we want to go in the other
+  // direction.
+  std::size_t num_services = services.size();
+  if (fork_ev == boost::asio::io_service::fork_prepare)
+    for (std::size_t i = 0; i < num_services; ++i)
+      services[i]->fork_service(fork_ev);
+  else
+    for (std::size_t i = num_services; i > 0; --i)
+      services[i - 1]->fork_service(fork_ev);
+}
+
+void service_registry::init_key(boost::asio::io_service::service::key& key,
+    const boost::asio::io_service::id& id)
+{
+  key.type_info_ = 0;
+  key.id_ = &id;
+}
+
+bool service_registry::keys_match(
+    const boost::asio::io_service::service::key& key1,
+    const boost::asio::io_service::service::key& key2)
+{
+  if (key1.id_ && key2.id_)
+    if (key1.id_ == key2.id_)
+      return true;
+  if (key1.type_info_ && key2.type_info_)
+    if (*key1.type_info_ == *key2.type_info_)
+      return true;
+  return false;
+}
+
+void service_registry::destroy(boost::asio::io_service::service* service)
+{
+  delete service;
+}
+
+boost::asio::io_service::service* service_registry::do_use_service(
+    const boost::asio::io_service::service::key& key,
+    factory_type factory)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+  // First see if there is an existing service object with the given key.
+  boost::asio::io_service::service* service = first_service_;
+  while (service)
+  {
+    if (keys_match(service->key_, key))
+      return service;
+    service = service->next_;
+  }
+
+  // Create a new service object. The service registry's mutex is not locked
+  // at this time to allow for nested calls into this function from the new
+  // service's constructor.
+  lock.unlock();
+  auto_service_ptr new_service = { factory(owner_) };
+  new_service.ptr_->key_ = key;
+  lock.lock();
+
+  // Check that nobody else created another service object of the same type
+  // while the lock was released.
+  service = first_service_;
+  while (service)
+  {
+    if (keys_match(service->key_, key))
+      return service;
+    service = service->next_;
+  }
+
+  // Service was successfully initialised, pass ownership to registry.
+  new_service.ptr_->next_ = first_service_;
+  first_service_ = new_service.ptr_;
+  new_service.ptr_ = 0;
+  return first_service_;
+}
+
+void service_registry::do_add_service(
+    const boost::asio::io_service::service::key& key,
+    boost::asio::io_service::service* new_service)
+{
+  if (&owner_ != &new_service->get_io_service())
+    boost::asio::detail::throw_exception(invalid_service_owner());
+
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+  // Check if there is an existing service object with the given key.
+  boost::asio::io_service::service* service = first_service_;
+  while (service)
+  {
+    if (keys_match(service->key_, key))
+      boost::asio::detail::throw_exception(service_already_exists());
+    service = service->next_;
+  }
+
+  // Take ownership of the service object.
+  new_service->key_ = key;
+  new_service->next_ = first_service_;
+  first_service_ = new_service;
+}
+
+bool service_registry::do_has_service(
+    const boost::asio::io_service::service::key& key) const
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+  boost::asio::io_service::service* service = first_service_;
+  while (service)
+  {
+    if (keys_match(service->key_, key))
+      return true;
+    service = service->next_;
+  }
+
+  return false;
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_IMPL_SERVICE_REGISTRY_IPP
diff --git a/ext/patches/boost/asio/detail/impl/signal_set_service.ipp b/ext/patches/boost/asio/detail/impl/signal_set_service.ipp
new file mode 100644
index 0000000..b1a7aa1
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/signal_set_service.ipp
@@ -0,0 +1,649 @@
+//
+// detail/impl/signal_set_service.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_SIGNAL_SET_SERVICE_IPP
+#define BOOST_ASIO_DETAIL_IMPL_SIGNAL_SET_SERVICE_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <cstring>
+#include <boost/asio/detail/reactor.hpp>
+#include <boost/asio/detail/signal_blocker.hpp>
+#include <boost/asio/detail/signal_set_service.hpp>
+#include <boost/asio/detail/static_mutex.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+struct signal_state
+{
+  // Mutex used for protecting global state.
+  static_mutex mutex_;
+
+  // The read end of the pipe used for signal notifications.
+  int read_descriptor_;
+
+  // The write end of the pipe used for signal notifications.
+  int write_descriptor_;
+
+  // Whether the signal state has been prepared for a fork.
+  bool fork_prepared_;
+
+  // The head of a linked list of all signal_set_service instances.
+  class signal_set_service* service_list_;
+
+  // A count of the number of objects that are registered for each signal.
+  std::size_t registration_count_[max_signal_number];
+};
+
+signal_state* get_signal_state()
+{
+  static signal_state state = {
+    BOOST_ASIO_STATIC_MUTEX_INIT, -1, -1, false, 0, { 0 } };
+  return &state;
+}
+
+void boost_asio_signal_handler(int signal_number)
+{
+#if defined(BOOST_ASIO_WINDOWS) \
+  || defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  || defined(__CYGWIN__)
+  signal_set_service::deliver_signal(signal_number);
+#else // defined(BOOST_ASIO_WINDOWS)
+      //   || defined(BOOST_ASIO_WINDOWS_RUNTIME)
+      //   || defined(__CYGWIN__)
+  int saved_errno = errno;
+  signal_state* state = get_signal_state();
+  signed_size_type result = ::write(state->write_descriptor_,
+      &signal_number, sizeof(signal_number));
+  (void)result;
+  errno = saved_errno;
+#endif // defined(BOOST_ASIO_WINDOWS)
+       //   || defined(BOOST_ASIO_WINDOWS_RUNTIME)
+       //   || defined(__CYGWIN__)
+
+#if defined(BOOST_ASIO_HAS_SIGNAL) && !defined(BOOST_ASIO_HAS_SIGACTION)
+  ::signal(signal_number, boost_asio_signal_handler);
+#endif // defined(BOOST_ASIO_HAS_SIGNAL) && !defined(BOOST_ASIO_HAS_SIGACTION)
+}
+
+#if !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  && !defined(__CYGWIN__)
+class signal_set_service::pipe_read_op : public reactor_op
+{
+public:
+  pipe_read_op()
+    : reactor_op(&pipe_read_op::do_perform, pipe_read_op::do_complete)
+  {
+  }
+
+  static bool do_perform(reactor_op*)
+  {
+    signal_state* state = get_signal_state();
+
+    int fd = state->read_descriptor_;
+    int signal_number = 0;
+    while (::read(fd, &signal_number, sizeof(int)) == sizeof(int))
+      if (signal_number >= 0 && signal_number < max_signal_number)
+        signal_set_service::deliver_signal(signal_number);
+
+    return false;
+  }
+
+  static void do_complete(io_service_impl* /*owner*/, operation* base,
+      const boost::system::error_code& /*ec*/,
+      std::size_t /*bytes_transferred*/)
+  {
+    pipe_read_op* o(static_cast<pipe_read_op*>(base));
+    delete o;
+  }
+};
+#endif // !defined(BOOST_ASIO_WINDOWS)
+       //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+       //   && !defined(__CYGWIN__)
+
+signal_set_service::signal_set_service(
+    boost::asio::io_service& io_service)
+  : io_service_(boost::asio::use_service<io_service_impl>(io_service)),
+#if !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  && !defined(__CYGWIN__)
+    reactor_(boost::asio::use_service<reactor>(io_service)),
+#endif // !defined(BOOST_ASIO_WINDOWS)
+       //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+       //   && !defined(__CYGWIN__)
+    next_(0),
+    prev_(0)
+{
+  get_signal_state()->mutex_.init();
+
+#if !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  && !defined(__CYGWIN__)
+  reactor_.init_task();
+#endif // !defined(BOOST_ASIO_WINDOWS)
+       //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+       //   && !defined(__CYGWIN__)
+
+  for (int i = 0; i < max_signal_number; ++i)
+    registrations_[i] = 0;
+
+  add_service(this);
+}
+
+signal_set_service::~signal_set_service()
+{
+  remove_service(this);
+}
+
+void signal_set_service::shutdown_service()
+{
+  remove_service(this);
+
+  op_queue<operation> ops;
+
+  for (int i = 0; i < max_signal_number; ++i)
+  {
+    registration* reg = registrations_[i];
+    while (reg)
+    {
+      ops.push(*reg->queue_);
+      reg = reg->next_in_table_;
+    }
+  }
+
+  io_service_.abandon_operations(ops);
+}
+
+void signal_set_service::fork_service(
+    boost::asio::io_service::fork_event fork_ev)
+{
+#if !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  && !defined(__CYGWIN__)
+  signal_state* state = get_signal_state();
+  static_mutex::scoped_lock lock(state->mutex_);
+
+  switch (fork_ev)
+  {
+  case boost::asio::io_service::fork_prepare:
+    {
+      int read_descriptor = state->read_descriptor_;
+      state->fork_prepared_ = true;
+      lock.unlock();
+      reactor_.deregister_internal_descriptor(read_descriptor, reactor_data_);
+    }
+    break;
+  case boost::asio::io_service::fork_parent:
+    if (state->fork_prepared_)
+    {
+      int read_descriptor = state->read_descriptor_;
+      state->fork_prepared_ = false;
+      lock.unlock();
+      reactor_.register_internal_descriptor(reactor::read_op,
+          read_descriptor, reactor_data_, new pipe_read_op);
+    }
+    break;
+  case boost::asio::io_service::fork_child:
+    if (state->fork_prepared_)
+    {
+      boost::asio::detail::signal_blocker blocker;
+      close_descriptors();
+      open_descriptors();
+      int read_descriptor = state->read_descriptor_;
+      state->fork_prepared_ = false;
+      lock.unlock();
+      reactor_.register_internal_descriptor(reactor::read_op,
+          read_descriptor, reactor_data_, new pipe_read_op);
+    }
+    break;
+  default:
+    break;
+  }
+#else // !defined(BOOST_ASIO_WINDOWS)
+      //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+      //   && !defined(__CYGWIN__)
+  (void)fork_ev;
+#endif // !defined(BOOST_ASIO_WINDOWS)
+       //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+       //   && !defined(__CYGWIN__)
+}
+
+void signal_set_service::construct(
+    signal_set_service::implementation_type& impl)
+{
+  impl.signals_ = 0;
+}
+
+void signal_set_service::destroy(
+    signal_set_service::implementation_type& impl)
+{
+  boost::system::error_code ignored_ec;
+  clear(impl, ignored_ec);
+  cancel(impl, ignored_ec);
+}
+
+boost::system::error_code signal_set_service::add(
+    signal_set_service::implementation_type& impl,
+    int signal_number, boost::system::error_code& ec)
+{
+  // Check that the signal number is valid.
+  if (signal_number < 0 || signal_number >= max_signal_number)
+  {
+    ec = boost::asio::error::invalid_argument;
+    return ec;
+  }
+
+  signal_state* state = get_signal_state();
+  static_mutex::scoped_lock lock(state->mutex_);
+
+  // Find the appropriate place to insert the registration.
+  registration** insertion_point = &impl.signals_;
+  registration* next = impl.signals_;
+  while (next && next->signal_number_ < signal_number)
+  {
+    insertion_point = &next->next_in_set_;
+    next = next->next_in_set_;
+  }
+
+  // Only do something if the signal is not already registered.
+  if (next == 0 || next->signal_number_ != signal_number)
+  {
+    registration* new_registration = new registration;
+
+#if defined(BOOST_ASIO_HAS_SIGNAL) || defined(BOOST_ASIO_HAS_SIGACTION)
+    // Register for the signal if we're the first.
+    if (state->registration_count_[signal_number] == 0)
+    {
+# if defined(BOOST_ASIO_HAS_SIGACTION)
+      using namespace std; // For memset.
+      struct sigaction sa;
+      memset(&sa, 0, sizeof(sa));
+      sa.sa_handler = boost_asio_signal_handler;
+      sigfillset(&sa.sa_mask);
+      if (::sigaction(signal_number, &sa, 0) == -1)
+# else // defined(BOOST_ASIO_HAS_SIGACTION)
+      if (::signal(signal_number, boost_asio_signal_handler) == SIG_ERR)
+# endif // defined(BOOST_ASIO_HAS_SIGACTION)
+      {
+# if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+        ec = boost::asio::error::invalid_argument;
+# else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+        ec = boost::system::error_code(errno,
+            boost::asio::error::get_system_category());
+# endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+        delete new_registration;
+        return ec;
+      }
+    }
+#endif // defined(BOOST_ASIO_HAS_SIGNAL) || defined(BOOST_ASIO_HAS_SIGACTION)
+
+    // Record the new registration in the set.
+    new_registration->signal_number_ = signal_number;
+    new_registration->queue_ = &impl.queue_;
+    new_registration->next_in_set_ = next;
+    *insertion_point = new_registration;
+
+    // Insert registration into the registration table.
+    new_registration->next_in_table_ = registrations_[signal_number];
+    if (registrations_[signal_number])
+      registrations_[signal_number]->prev_in_table_ = new_registration;
+    registrations_[signal_number] = new_registration;
+
+    ++state->registration_count_[signal_number];
+  }
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+boost::system::error_code signal_set_service::remove(
+    signal_set_service::implementation_type& impl,
+    int signal_number, boost::system::error_code& ec)
+{
+  // Check that the signal number is valid.
+  if (signal_number < 0 || signal_number >= max_signal_number)
+  {
+    ec = boost::asio::error::invalid_argument;
+    return ec;
+  }
+
+  signal_state* state = get_signal_state();
+  static_mutex::scoped_lock lock(state->mutex_);
+
+  // Find the signal number in the list of registrations.
+  registration** deletion_point = &impl.signals_;
+  registration* reg = impl.signals_;
+  while (reg && reg->signal_number_ < signal_number)
+  {
+    deletion_point = &reg->next_in_set_;
+    reg = reg->next_in_set_;
+  }
+
+  if (reg != 0 && reg->signal_number_ == signal_number)
+  {
+#if defined(BOOST_ASIO_HAS_SIGNAL) || defined(BOOST_ASIO_HAS_SIGACTION)
+    // Set signal handler back to the default if we're the last.
+    if (state->registration_count_[signal_number] == 1)
+    {
+# if defined(BOOST_ASIO_HAS_SIGACTION)
+      using namespace std; // For memset.
+      struct sigaction sa;
+      memset(&sa, 0, sizeof(sa));
+      sa.sa_handler = SIG_DFL;
+      if (::sigaction(signal_number, &sa, 0) == -1)
+# else // defined(BOOST_ASIO_HAS_SIGACTION)
+      if (::signal(signal_number, SIG_DFL) == SIG_ERR)
+# endif // defined(BOOST_ASIO_HAS_SIGACTION)
+      {
+# if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+        ec = boost::asio::error::invalid_argument;
+# else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+        ec = boost::system::error_code(errno,
+            boost::asio::error::get_system_category());
+# endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+        return ec;
+      }
+    }
+#endif // defined(BOOST_ASIO_HAS_SIGNAL) || defined(BOOST_ASIO_HAS_SIGACTION)
+
+    // Remove the registration from the set.
+    *deletion_point = reg->next_in_set_;
+
+    // Remove the registration from the registration table.
+    if (registrations_[signal_number] == reg)
+      registrations_[signal_number] = reg->next_in_table_;
+    if (reg->prev_in_table_)
+      reg->prev_in_table_->next_in_table_ = reg->next_in_table_;
+    if (reg->next_in_table_)
+      reg->next_in_table_->prev_in_table_ = reg->prev_in_table_;
+
+    --state->registration_count_[signal_number];
+
+    delete reg;
+  }
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+boost::system::error_code signal_set_service::clear(
+    signal_set_service::implementation_type& impl,
+    boost::system::error_code& ec)
+{
+  signal_state* state = get_signal_state();
+  static_mutex::scoped_lock lock(state->mutex_);
+
+  while (registration* reg = impl.signals_)
+  {
+#if defined(BOOST_ASIO_HAS_SIGNAL) || defined(BOOST_ASIO_HAS_SIGACTION)
+    // Set signal handler back to the default if we're the last.
+    if (state->registration_count_[reg->signal_number_] == 1)
+    {
+# if defined(BOOST_ASIO_HAS_SIGACTION)
+      using namespace std; // For memset.
+      struct sigaction sa;
+      memset(&sa, 0, sizeof(sa));
+      sa.sa_handler = SIG_DFL;
+      if (::sigaction(reg->signal_number_, &sa, 0) == -1)
+# else // defined(BOOST_ASIO_HAS_SIGACTION)
+      if (::signal(reg->signal_number_, SIG_DFL) == SIG_ERR)
+# endif // defined(BOOST_ASIO_HAS_SIGACTION)
+      {
+# if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+        ec = boost::asio::error::invalid_argument;
+# else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+        ec = boost::system::error_code(errno,
+            boost::asio::error::get_system_category());
+# endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+        return ec;
+      }
+    }
+#endif // defined(BOOST_ASIO_HAS_SIGNAL) || defined(BOOST_ASIO_HAS_SIGACTION)
+
+    // Remove the registration from the registration table.
+    if (registrations_[reg->signal_number_] == reg)
+      registrations_[reg->signal_number_] = reg->next_in_table_;
+    if (reg->prev_in_table_)
+      reg->prev_in_table_->next_in_table_ = reg->next_in_table_;
+    if (reg->next_in_table_)
+      reg->next_in_table_->prev_in_table_ = reg->prev_in_table_;
+
+    --state->registration_count_[reg->signal_number_];
+
+    impl.signals_ = reg->next_in_set_;
+    delete reg;
+  }
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+boost::system::error_code signal_set_service::cancel(
+    signal_set_service::implementation_type& impl,
+    boost::system::error_code& ec)
+{
+  BOOST_ASIO_HANDLER_OPERATION(("signal_set", &impl, "cancel"));
+
+  op_queue<operation> ops;
+  {
+    signal_state* state = get_signal_state();
+    static_mutex::scoped_lock lock(state->mutex_);
+
+    while (signal_op* op = impl.queue_.front())
+    {
+      op->ec_ = boost::asio::error::operation_aborted;
+      impl.queue_.pop();
+      ops.push(op);
+    }
+  }
+
+  io_service_.post_deferred_completions(ops);
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+void signal_set_service::deliver_signal(int signal_number)
+{
+  signal_state* state = get_signal_state();
+  static_mutex::scoped_lock lock(state->mutex_);
+
+  signal_set_service* service = state->service_list_;
+  while (service)
+  {
+    op_queue<operation> ops;
+
+    registration* reg = service->registrations_[signal_number];
+    while (reg)
+    {
+      if (reg->queue_->empty())
+      {
+        ++reg->undelivered_;
+      }
+      else
+      {
+        while (signal_op* op = reg->queue_->front())
+        {
+          op->signal_number_ = signal_number;
+          reg->queue_->pop();
+          ops.push(op);
+        }
+      }
+
+      reg = reg->next_in_table_;
+    }
+
+    service->io_service_.post_deferred_completions(ops);
+
+    service = service->next_;
+  }
+}
+
+void signal_set_service::add_service(signal_set_service* service)
+{
+  signal_state* state = get_signal_state();
+  static_mutex::scoped_lock lock(state->mutex_);
+
+#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+  // If this is the first service to be created, open a new pipe.
+  if (state->service_list_ == 0)
+    open_descriptors();
+#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+  // Insert service into linked list of all services.
+  service->next_ = state->service_list_;
+  service->prev_ = 0;
+  if (state->service_list_)
+    state->service_list_->prev_ = service;
+  state->service_list_ = service;
+
+#if !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  && !defined(__CYGWIN__)
+  // Register for pipe readiness notifications.
+  int read_descriptor = state->read_descriptor_;
+  lock.unlock();
+  service->reactor_.register_internal_descriptor(reactor::read_op,
+      read_descriptor, service->reactor_data_, new pipe_read_op);
+#endif // !defined(BOOST_ASIO_WINDOWS)
+       //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+       //   && !defined(__CYGWIN__)
+}
+
+void signal_set_service::remove_service(signal_set_service* service)
+{
+  signal_state* state = get_signal_state();
+  static_mutex::scoped_lock lock(state->mutex_);
+
+  if (service->next_ || service->prev_ || state->service_list_ == service)
+  {
+#if !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  && !defined(__CYGWIN__)
+    // Disable the pipe readiness notifications.
+    int read_descriptor = state->read_descriptor_;
+    lock.unlock();
+    service->reactor_.deregister_descriptor(
+        read_descriptor, service->reactor_data_, false);
+    lock.lock();
+#endif // !defined(BOOST_ASIO_WINDOWS)
+       //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+       //   && !defined(__CYGWIN__)
+
+    // Remove service from linked list of all services.
+    if (state->service_list_ == service)
+      state->service_list_ = service->next_;
+    if (service->prev_)
+      service->prev_->next_ = service->next_;
+    if (service->next_)
+      service->next_->prev_= service->prev_;
+    service->next_ = 0;
+    service->prev_ = 0;
+
+#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+    // If this is the last service to be removed, close the pipe.
+    if (state->service_list_ == 0)
+      close_descriptors();
+#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+  }
+}
+
+void signal_set_service::open_descriptors()
+{
+#if !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  && !defined(__CYGWIN__)
+  signal_state* state = get_signal_state();
+
+  int pipe_fds[2];
+  if (::pipe(pipe_fds) == 0)
+  {
+    state->read_descriptor_ = pipe_fds[0];
+    ::fcntl(state->read_descriptor_, F_SETFL, O_NONBLOCK);
+
+    state->write_descriptor_ = pipe_fds[1];
+    ::fcntl(state->write_descriptor_, F_SETFL, O_NONBLOCK);
+
+#if defined(FD_CLOEXEC)
+    ::fcntl(state->read_descriptor_, F_SETFD, FD_CLOEXEC);
+    ::fcntl(state->write_descriptor_, F_SETFD, FD_CLOEXEC);
+#endif // defined(FD_CLOEXEC)
+  }
+  else
+  {
+    boost::system::error_code ec(errno,
+        boost::asio::error::get_system_category());
+    boost::asio::detail::throw_error(ec, "signal_set_service pipe");
+  }
+#endif // !defined(BOOST_ASIO_WINDOWS)
+       //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+       //   && !defined(__CYGWIN__)
+}
+
+void signal_set_service::close_descriptors()
+{
+#if !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  && !defined(__CYGWIN__)
+  signal_state* state = get_signal_state();
+
+  if (state->read_descriptor_ != -1)
+    ::close(state->read_descriptor_);
+  state->read_descriptor_ = -1;
+
+  if (state->write_descriptor_ != -1)
+    ::close(state->write_descriptor_);
+  state->write_descriptor_ = -1;
+#endif // !defined(BOOST_ASIO_WINDOWS)
+       //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+       //   && !defined(__CYGWIN__)
+}
+
+void signal_set_service::start_wait_op(
+    signal_set_service::implementation_type& impl, signal_op* op)
+{
+  io_service_.work_started();
+
+  signal_state* state = get_signal_state();
+  static_mutex::scoped_lock lock(state->mutex_);
+
+  registration* reg = impl.signals_;
+  while (reg)
+  {
+    if (reg->undelivered_ > 0)
+    {
+      --reg->undelivered_;
+      op->signal_number_ = reg->signal_number_;
+      io_service_.post_deferred_completion(op);
+      return;
+    }
+
+    reg = reg->next_in_set_;
+  }
+
+  impl.queue_.push(op);
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_IMPL_SIGNAL_SET_SERVICE_IPP
diff --git a/ext/patches/boost/asio/detail/impl/socket_ops.ipp b/ext/patches/boost/asio/detail/impl/socket_ops.ipp
new file mode 100644
index 0000000..307e747
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/socket_ops.ipp
@@ -0,0 +1,3395 @@
+//
+// detail/impl/socket_ops.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SOCKET_OPS_IPP
+#define BOOST_ASIO_DETAIL_SOCKET_OPS_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <cctype>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <cerrno>
+#include <new>
+#include <boost/asio/detail/assert.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/error.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <codecvt>
+# include <locale>
+# include <string>
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) \
+  || defined(__MACH__) && defined(__APPLE__)
+# if defined(BOOST_ASIO_HAS_PTHREADS)
+#  include <pthread.h>
+# endif // defined(BOOST_ASIO_HAS_PTHREADS)
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+       // || defined(__MACH__) && defined(__APPLE__)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+namespace socket_ops {
+
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+struct msghdr { int msg_namelen; };
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+#if defined(__hpux)
+// HP-UX doesn't declare these functions extern "C", so they are declared again
+// here to avoid linker errors about undefined symbols.
+extern "C" char* if_indextoname(unsigned int, char*);
+extern "C" unsigned int if_nametoindex(const char*);
+#endif // defined(__hpux)
+
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+inline void clear_last_error()
+{
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  WSASetLastError(0);
+#else
+  errno = 0;
+#endif
+}
+
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+template <typename ReturnType>
+inline ReturnType error_wrapper(ReturnType return_value,
+    boost::system::error_code& ec)
+{
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  ec = boost::system::error_code(WSAGetLastError(),
+      boost::asio::error::get_system_category());
+#else
+  ec = boost::system::error_code(errno,
+      boost::asio::error::get_system_category());
+#endif
+  return return_value;
+}
+
+template <typename SockLenType>
+inline socket_type call_accept(SockLenType msghdr::*,
+    socket_type s, socket_addr_type* addr, std::size_t* addrlen)
+{
+  SockLenType tmp_addrlen = addrlen ? (SockLenType)*addrlen : 0;
+  socket_type result = ::accept(s, addr, addrlen ? &tmp_addrlen : 0);
+  if (addrlen)
+    *addrlen = (std::size_t)tmp_addrlen;
+  return result;
+}
+
+socket_type accept(socket_type s, socket_addr_type* addr,
+    std::size_t* addrlen, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return invalid_socket;
+  }
+
+  clear_last_error();
+
+  socket_type new_s = error_wrapper(call_accept(
+        &msghdr::msg_namelen, s, addr, addrlen), ec);
+  if (new_s == invalid_socket)
+    return new_s;
+
+#if defined(__MACH__) && defined(__APPLE__) || defined(__FreeBSD__)
+  int optval = 1;
+  int result = error_wrapper(::setsockopt(new_s,
+        SOL_SOCKET, SO_NOSIGPIPE, &optval, sizeof(optval)), ec);
+  if (result != 0)
+  {
+    ::close(new_s);
+    return invalid_socket;
+  }
+#endif
+
+  ec = boost::system::error_code();
+  return new_s;
+}
+
+socket_type sync_accept(socket_type s, state_type state,
+    socket_addr_type* addr, std::size_t* addrlen, boost::system::error_code& ec)
+{
+  // Accept a socket.
+  for (;;)
+  {
+    // Try to complete the operation without blocking.
+    socket_type new_socket = socket_ops::accept(s, addr, addrlen, ec);
+
+    // Check if operation succeeded.
+    if (new_socket != invalid_socket)
+      return new_socket;
+
+    // Operation failed.
+    if (ec == boost::asio::error::would_block
+        || ec == boost::asio::error::try_again)
+    {
+      if (state & user_set_non_blocking)
+        return invalid_socket;
+      // Fall through to retry operation.
+    }
+    else if (ec == boost::asio::error::connection_aborted)
+    {
+      if (state & enable_connection_aborted)
+        return invalid_socket;
+      // Fall through to retry operation.
+    }
+#if defined(EPROTO)
+    else if (ec.value() == EPROTO)
+    {
+      if (state & enable_connection_aborted)
+        return invalid_socket;
+      // Fall through to retry operation.
+    }
+#endif // defined(EPROTO)
+    else
+      return invalid_socket;
+
+    // Wait for socket to become ready.
+    if (socket_ops::poll_read(s, 0, ec) < 0)
+      return invalid_socket;
+  }
+}
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+void complete_iocp_accept(socket_type s,
+    void* output_buffer, DWORD address_length,
+    socket_addr_type* addr, std::size_t* addrlen,
+    socket_type new_socket, boost::system::error_code& ec)
+{
+  // Map non-portable errors to their portable counterparts.
+  if (ec.value() == ERROR_NETNAME_DELETED)
+    ec = boost::asio::error::connection_aborted;
+
+  if (!ec)
+  {
+    // Get the address of the peer.
+    if (addr && addrlen)
+    {
+      LPSOCKADDR local_addr = 0;
+      int local_addr_length = 0;
+      LPSOCKADDR remote_addr = 0;
+      int remote_addr_length = 0;
+      GetAcceptExSockaddrs(output_buffer, 0, address_length,
+          address_length, &local_addr, &local_addr_length,
+          &remote_addr, &remote_addr_length);
+      if (static_cast<std::size_t>(remote_addr_length) > *addrlen)
+      {
+        ec = boost::asio::error::invalid_argument;
+      }
+      else
+      {
+        using namespace std; // For memcpy.
+        memcpy(addr, remote_addr, remote_addr_length);
+        *addrlen = static_cast<std::size_t>(remote_addr_length);
+      }
+    }
+
+    // Need to set the SO_UPDATE_ACCEPT_CONTEXT option so that getsockname
+    // and getpeername will work on the accepted socket.
+    SOCKET update_ctx_param = s;
+    socket_ops::state_type state = 0;
+    socket_ops::setsockopt(new_socket, state,
+          SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT,
+          &update_ctx_param, sizeof(SOCKET), ec);
+  }
+}
+
+#else // defined(BOOST_ASIO_HAS_IOCP)
+
+bool non_blocking_accept(socket_type s,
+    state_type state, socket_addr_type* addr, std::size_t* addrlen,
+    boost::system::error_code& ec, socket_type& new_socket)
+{
+  for (;;)
+  {
+    // Accept the waiting connection.
+    new_socket = socket_ops::accept(s, addr, addrlen, ec);
+
+    // Check if operation succeeded.
+    if (new_socket != invalid_socket)
+      return true;
+
+    // Retry operation if interrupted by signal.
+    if (ec == boost::asio::error::interrupted)
+      continue;
+
+    // Operation failed.
+    if (ec == boost::asio::error::would_block
+        || ec == boost::asio::error::try_again)
+    {
+      if (state & user_set_non_blocking)
+        return true;
+      // Fall through to retry operation.
+    }
+    else if (ec == boost::asio::error::connection_aborted)
+    {
+      if (state & enable_connection_aborted)
+        return true;
+      // Fall through to retry operation.
+    }
+#if defined(EPROTO)
+    else if (ec.value() == EPROTO)
+    {
+      if (state & enable_connection_aborted)
+        return true;
+      // Fall through to retry operation.
+    }
+#endif // defined(EPROTO)
+    else
+      return true;
+
+    return false;
+  }
+}
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+template <typename SockLenType>
+inline int call_bind(SockLenType msghdr::*,
+    socket_type s, const socket_addr_type* addr, std::size_t addrlen)
+{
+  return ::bind(s, addr, (SockLenType)addrlen);
+}
+
+int bind(socket_type s, const socket_addr_type* addr,
+    std::size_t addrlen, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return socket_error_retval;
+  }
+
+  clear_last_error();
+  int result = error_wrapper(call_bind(
+        &msghdr::msg_namelen, s, addr, addrlen), ec);
+  if (result == 0)
+    ec = boost::system::error_code();
+  return result;
+}
+
+int close(socket_type s, state_type& state,
+    bool destruction, boost::system::error_code& ec)
+{
+  int result = 0;
+  if (s != invalid_socket)
+  {
+    // We don't want the destructor to block, so set the socket to linger in
+    // the background. If the user doesn't like this behaviour then they need
+    // to explicitly close the socket.
+    if (destruction && (state & user_set_linger))
+    {
+      ::linger opt;
+      opt.l_onoff = 0;
+      opt.l_linger = 0;
+      boost::system::error_code ignored_ec;
+      socket_ops::setsockopt(s, state, SOL_SOCKET,
+          SO_LINGER, &opt, sizeof(opt), ignored_ec);
+    }
+
+    clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+    result = error_wrapper(::closesocket(s), ec);
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+    result = error_wrapper(::close(s), ec);
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+    if (result != 0
+        && (ec == boost::asio::error::would_block
+          || ec == boost::asio::error::try_again))
+    {
+      // According to UNIX Network Programming Vol. 1, it is possible for
+      // close() to fail with EWOULDBLOCK under certain circumstances. What
+      // isn't clear is the state of the descriptor after this error. The one
+      // current OS where this behaviour is seen, Windows, says that the socket
+      // remains open. Therefore we'll put the descriptor back into blocking
+      // mode and have another attempt at closing it.
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+      ioctl_arg_type arg = 0;
+      ::ioctlsocket(s, FIONBIO, &arg);
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+# if defined(__SYMBIAN32__)
+      int flags = ::fcntl(s, F_GETFL, 0);
+      if (flags >= 0)
+        ::fcntl(s, F_SETFL, flags & ~O_NONBLOCK);
+# else // defined(__SYMBIAN32__)
+      ioctl_arg_type arg = 0;
+      ::ioctl(s, FIONBIO, &arg);
+# endif // defined(__SYMBIAN32__)
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+      state &= ~non_blocking;
+
+      clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+      result = error_wrapper(::closesocket(s), ec);
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+      result = error_wrapper(::close(s), ec);
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+    }
+  }
+
+  if (result == 0)
+    ec = boost::system::error_code();
+  return result;
+}
+
+bool set_user_non_blocking(socket_type s,
+    state_type& state, bool value, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return false;
+  }
+
+  clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  ioctl_arg_type arg = (value ? 1 : 0);
+  int result = error_wrapper(::ioctlsocket(s, FIONBIO, &arg), ec);
+#elif defined(__SYMBIAN32__)
+  int result = error_wrapper(::fcntl(s, F_GETFL, 0), ec);
+  if (result >= 0)
+  {
+    clear_last_error();
+    int flag = (value ? (result | O_NONBLOCK) : (result & ~O_NONBLOCK));
+    result = error_wrapper(::fcntl(s, F_SETFL, flag), ec);
+  }
+#else
+  ioctl_arg_type arg = (value ? 1 : 0);
+  int result = error_wrapper(::ioctl(s, FIONBIO, &arg), ec);
+#endif
+
+  if (result >= 0)
+  {
+    ec = boost::system::error_code();
+    if (value)
+      state |= user_set_non_blocking;
+    else
+    {
+      // Clearing the user-set non-blocking mode always overrides any
+      // internally-set non-blocking flag. Any subsequent asynchronous
+      // operations will need to re-enable non-blocking I/O.
+      state &= ~(user_set_non_blocking | internal_non_blocking);
+    }
+    return true;
+  }
+
+  return false;
+}
+
+bool set_internal_non_blocking(socket_type s,
+    state_type& state, bool value, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return false;
+  }
+
+  if (!value && (state & user_set_non_blocking))
+  {
+    // It does not make sense to clear the internal non-blocking flag if the
+    // user still wants non-blocking behaviour. Return an error and let the
+    // caller figure out whether to update the user-set non-blocking flag.
+    ec = boost::asio::error::invalid_argument;
+    return false;
+  }
+
+  clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  ioctl_arg_type arg = (value ? 1 : 0);
+  int result = error_wrapper(::ioctlsocket(s, FIONBIO, &arg), ec);
+#elif defined(__SYMBIAN32__)
+  int result = error_wrapper(::fcntl(s, F_GETFL, 0), ec);
+  if (result >= 0)
+  {
+    clear_last_error();
+    int flag = (value ? (result | O_NONBLOCK) : (result & ~O_NONBLOCK));
+    result = error_wrapper(::fcntl(s, F_SETFL, flag), ec);
+  }
+#else
+  ioctl_arg_type arg = (value ? 1 : 0);
+  int result = error_wrapper(::ioctl(s, FIONBIO, &arg), ec);
+#endif
+
+  if (result >= 0)
+  {
+    ec = boost::system::error_code();
+    if (value)
+      state |= internal_non_blocking;
+    else
+      state &= ~internal_non_blocking;
+    return true;
+  }
+
+  return false;
+}
+
+int shutdown(socket_type s, int what, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return socket_error_retval;
+  }
+
+  clear_last_error();
+  int result = error_wrapper(::shutdown(s, what), ec);
+  if (result == 0)
+    ec = boost::system::error_code();
+  return result;
+}
+
+template <typename SockLenType>
+inline int call_connect(SockLenType msghdr::*,
+    socket_type s, const socket_addr_type* addr, std::size_t addrlen)
+{
+  return ::connect(s, addr, (SockLenType)addrlen);
+}
+
+int connect(socket_type s, const socket_addr_type* addr,
+    std::size_t addrlen, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return socket_error_retval;
+  }
+
+  clear_last_error();
+  int result = error_wrapper(call_connect(
+        &msghdr::msg_namelen, s, addr, addrlen), ec);
+  if (result == 0)
+    ec = boost::system::error_code();
+#if defined(__linux__)
+  else if (ec == boost::asio::error::try_again)
+    ec = boost::asio::error::no_buffer_space;
+#endif // defined(__linux__)
+  return result;
+}
+
+void sync_connect(socket_type s, const socket_addr_type* addr,
+    std::size_t addrlen, boost::system::error_code& ec)
+{
+  // Perform the connect operation.
+  socket_ops::connect(s, addr, addrlen, ec);
+  if (ec != boost::asio::error::in_progress
+      && ec != boost::asio::error::would_block)
+  {
+    // The connect operation finished immediately.
+    return;
+  }
+
+  // Wait for socket to become ready.
+  if (socket_ops::poll_connect(s, ec) < 0)
+    return;
+
+  // Get the error code from the connect operation.
+  int connect_error = 0;
+  size_t connect_error_len = sizeof(connect_error);
+  if (socket_ops::getsockopt(s, 0, SOL_SOCKET, SO_ERROR,
+        &connect_error, &connect_error_len, ec) == socket_error_retval)
+    return;
+
+  // Return the result of the connect operation.
+  ec = boost::system::error_code(connect_error,
+      boost::asio::error::get_system_category());
+}
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+void complete_iocp_connect(socket_type s, boost::system::error_code& ec)
+{
+  if (!ec)
+  {
+    // Need to set the SO_UPDATE_CONNECT_CONTEXT option so that getsockname
+    // and getpeername will work on the connected socket.
+    socket_ops::state_type state = 0;
+    const int so_update_connect_context = 0x7010;
+    socket_ops::setsockopt(s, state, SOL_SOCKET,
+        so_update_connect_context, 0, 0, ec);
+  }
+}
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+bool non_blocking_connect(socket_type s, boost::system::error_code& ec)
+{
+  // Check if the connect operation has finished. This is required since we may
+  // get spurious readiness notifications from the reactor.
+#if defined(BOOST_ASIO_WINDOWS) \
+  || defined(__CYGWIN__) \
+  || defined(__SYMBIAN32__)
+  fd_set write_fds;
+  FD_ZERO(&write_fds);
+  FD_SET(s, &write_fds);
+  fd_set except_fds;
+  FD_ZERO(&except_fds);
+  FD_SET(s, &except_fds);
+  timeval zero_timeout;
+  zero_timeout.tv_sec = 0;
+  zero_timeout.tv_usec = 0;
+  int ready = ::select(s + 1, 0, &write_fds, &except_fds, &zero_timeout);
+#else // defined(BOOST_ASIO_WINDOWS)
+      // || defined(__CYGWIN__)
+      // || defined(__SYMBIAN32__)
+  pollfd fds;
+  fds.fd = s;
+  fds.events = POLLOUT;
+  fds.revents = 0;
+  int ready = ::poll(&fds, 1, 0);
+#endif // defined(BOOST_ASIO_WINDOWS)
+       // || defined(__CYGWIN__)
+       // || defined(__SYMBIAN32__)
+  if (ready == 0)
+  {
+    // The asynchronous connect operation is still in progress.
+    return false;
+  }
+
+  // Get the error code from the connect operation.
+  int connect_error = 0;
+  size_t connect_error_len = sizeof(connect_error);
+  if (socket_ops::getsockopt(s, 0, SOL_SOCKET, SO_ERROR,
+        &connect_error, &connect_error_len, ec) == 0)
+  {
+    if (connect_error)
+    {
+      ec = boost::system::error_code(connect_error,
+          boost::asio::error::get_system_category());
+    }
+    else
+      ec = boost::system::error_code();
+  }
+
+  return true;
+}
+
+int socketpair(int af, int type, int protocol,
+    socket_type sv[2], boost::system::error_code& ec)
+{
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  (void)(af);
+  (void)(type);
+  (void)(protocol);
+  (void)(sv);
+  ec = boost::asio::error::operation_not_supported;
+  return socket_error_retval;
+#else
+  clear_last_error();
+  int result = error_wrapper(::socketpair(af, type, protocol, sv), ec);
+  if (result == 0)
+    ec = boost::system::error_code();
+  return result;
+#endif
+}
+
+bool sockatmark(socket_type s, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return false;
+  }
+
+#if defined(SIOCATMARK)
+  ioctl_arg_type value = 0;
+# if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  int result = error_wrapper(::ioctlsocket(s, SIOCATMARK, &value), ec);
+# else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  int result = error_wrapper(::ioctl(s, SIOCATMARK, &value), ec);
+# endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  if (result == 0)
+    ec = boost::system::error_code();
+# if defined(ENOTTY)
+  if (ec.value() == ENOTTY)
+    ec = boost::asio::error::not_socket;
+# endif // defined(ENOTTY)
+#else // defined(SIOCATMARK)
+  int value = error_wrapper(::sockatmark(s), ec);
+  if (value != -1)
+    ec = boost::system::error_code();
+#endif // defined(SIOCATMARK)
+
+  return ec ? false : value != 0;
+}
+
+size_t available(socket_type s, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return 0;
+  }
+
+  ioctl_arg_type value = 0;
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  int result = error_wrapper(::ioctlsocket(s, FIONREAD, &value), ec);
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  int result = error_wrapper(::ioctl(s, FIONREAD, &value), ec);
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  if (result == 0)
+    ec = boost::system::error_code();
+#if defined(ENOTTY)
+  if (ec.value() == ENOTTY)
+    ec = boost::asio::error::not_socket;
+#endif // defined(ENOTTY)
+
+  return ec ? static_cast<size_t>(0) : static_cast<size_t>(value);
+}
+
+int listen(socket_type s, int backlog, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return socket_error_retval;
+  }
+
+  clear_last_error();
+  int result = error_wrapper(::listen(s, backlog), ec);
+  if (result == 0)
+    ec = boost::system::error_code();
+  return result;
+}
+
+inline void init_buf_iov_base(void*& base, void* addr)
+{
+  base = addr;
+}
+
+template <typename T>
+inline void init_buf_iov_base(T& base, void* addr)
+{
+  base = static_cast<T>(addr);
+}
+
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+typedef WSABUF buf;
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+typedef iovec buf;
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+void init_buf(buf& b, void* data, size_t size)
+{
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  b.buf = static_cast<char*>(data);
+  b.len = static_cast<u_long>(size);
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  init_buf_iov_base(b.iov_base, data);
+  b.iov_len = size;
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+}
+
+void init_buf(buf& b, const void* data, size_t size)
+{
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  b.buf = static_cast<char*>(const_cast<void*>(data));
+  b.len = static_cast<u_long>(size);
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  init_buf_iov_base(b.iov_base, const_cast<void*>(data));
+  b.iov_len = size;
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+}
+
+inline void init_msghdr_msg_name(void*& name, socket_addr_type* addr)
+{
+  name = addr;
+}
+
+inline void init_msghdr_msg_name(void*& name, const socket_addr_type* addr)
+{
+  name = const_cast<socket_addr_type*>(addr);
+}
+
+template <typename T>
+inline void init_msghdr_msg_name(T& name, socket_addr_type* addr)
+{
+  name = reinterpret_cast<T>(addr);
+}
+
+template <typename T>
+inline void init_msghdr_msg_name(T& name, const socket_addr_type* addr)
+{
+  name = reinterpret_cast<T>(const_cast<socket_addr_type*>(addr));
+}
+
+signed_size_type recv(socket_type s, buf* bufs, size_t count,
+    int flags, boost::system::error_code& ec)
+{
+  clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  // Receive some data.
+  DWORD recv_buf_count = static_cast<DWORD>(count);
+  DWORD bytes_transferred = 0;
+  DWORD recv_flags = flags;
+  int result = error_wrapper(::WSARecv(s, bufs,
+        recv_buf_count, &bytes_transferred, &recv_flags, 0, 0), ec);
+  if (ec.value() == ERROR_NETNAME_DELETED)
+    ec = boost::asio::error::connection_reset;
+  else if (ec.value() == ERROR_PORT_UNREACHABLE)
+    ec = boost::asio::error::connection_refused;
+  if (result != 0)
+    return socket_error_retval;
+  ec = boost::system::error_code();
+  return bytes_transferred;
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  msghdr msg = msghdr();
+  msg.msg_iov = bufs;
+  msg.msg_iovlen = static_cast<int>(count);
+  signed_size_type result = error_wrapper(::recvmsg(s, &msg, flags), ec);
+  if (result >= 0)
+    ec = boost::system::error_code();
+  return result;
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+}
+
+size_t sync_recv(socket_type s, state_type state, buf* bufs,
+    size_t count, int flags, bool all_empty, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return 0;
+  }
+
+  // A request to read 0 bytes on a stream is a no-op.
+  if (all_empty && (state & stream_oriented))
+  {
+    ec = boost::system::error_code();
+    return 0;
+  }
+
+  // Read some data.
+  for (;;)
+  {
+    // Try to complete the operation without blocking.
+    signed_size_type bytes = socket_ops::recv(s, bufs, count, flags, ec);
+
+    // Check if operation succeeded.
+    if (bytes > 0)
+      return bytes;
+
+    // Check for EOF.
+    if ((state & stream_oriented) && bytes == 0)
+    {
+      ec = boost::asio::error::eof;
+      return 0;
+    }
+
+    // Operation failed.
+    if ((state & user_set_non_blocking)
+        || (ec != boost::asio::error::would_block
+          && ec != boost::asio::error::try_again))
+      return 0;
+
+    // Wait for socket to become ready.
+    if (socket_ops::poll_read(s, 0, ec) < 0)
+      return 0;
+  }
+}
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+void complete_iocp_recv(state_type state,
+    const weak_cancel_token_type& cancel_token, bool all_empty,
+    boost::system::error_code& ec, size_t bytes_transferred)
+{
+  // Map non-portable errors to their portable counterparts.
+  if (ec.value() == ERROR_NETNAME_DELETED)
+  {
+    if (cancel_token.expired())
+      ec = boost::asio::error::operation_aborted;
+    else
+      ec = boost::asio::error::connection_reset;
+  }
+  else if (ec.value() == ERROR_PORT_UNREACHABLE)
+  {
+    ec = boost::asio::error::connection_refused;
+  }
+
+  // Check for connection closed.
+  else if (!ec && bytes_transferred == 0
+      && (state & stream_oriented) != 0
+      && !all_empty)
+  {
+    ec = boost::asio::error::eof;
+  }
+}
+
+#else // defined(BOOST_ASIO_HAS_IOCP)
+
+bool non_blocking_recv(socket_type s,
+    buf* bufs, size_t count, int flags, bool is_stream,
+    boost::system::error_code& ec, size_t& bytes_transferred)
+{
+  for (;;)
+  {
+    // Read some data.
+    signed_size_type bytes = socket_ops::recv(s, bufs, count, flags, ec);
+
+    // Check for end of stream.
+    if (is_stream && bytes == 0)
+    {
+      ec = boost::asio::error::eof;
+      return true;
+    }
+
+    // Retry operation if interrupted by signal.
+    if (ec == boost::asio::error::interrupted)
+      continue;
+
+    // Check if we need to run the operation again.
+    if (ec == boost::asio::error::would_block
+        || ec == boost::asio::error::try_again)
+      return false;
+
+    // Operation is complete.
+    if (bytes >= 0)
+    {
+      ec = boost::system::error_code();
+      bytes_transferred = bytes;
+    }
+    else
+      bytes_transferred = 0;
+
+    return true;
+  }
+}
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+signed_size_type recvfrom(socket_type s, buf* bufs, size_t count,
+    int flags, socket_addr_type* addr, std::size_t* addrlen,
+    boost::system::error_code& ec)
+{
+  clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  // Receive some data.
+  DWORD recv_buf_count = static_cast<DWORD>(count);
+  DWORD bytes_transferred = 0;
+  DWORD recv_flags = flags;
+  int tmp_addrlen = (int)*addrlen;
+  int result = error_wrapper(::WSARecvFrom(s, bufs, recv_buf_count,
+        &bytes_transferred, &recv_flags, addr, &tmp_addrlen, 0, 0), ec);
+  *addrlen = (std::size_t)tmp_addrlen;
+  if (ec.value() == ERROR_NETNAME_DELETED)
+    ec = boost::asio::error::connection_reset;
+  else if (ec.value() == ERROR_PORT_UNREACHABLE)
+    ec = boost::asio::error::connection_refused;
+  if (result != 0)
+    return socket_error_retval;
+  ec = boost::system::error_code();
+  return bytes_transferred;
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  msghdr msg = msghdr();
+  init_msghdr_msg_name(msg.msg_name, addr);
+  msg.msg_namelen = static_cast<int>(*addrlen);
+  msg.msg_iov = bufs;
+  msg.msg_iovlen = static_cast<int>(count);
+  signed_size_type result = error_wrapper(::recvmsg(s, &msg, flags), ec);
+  *addrlen = msg.msg_namelen;
+  if (result >= 0)
+    ec = boost::system::error_code();
+  return result;
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+}
+
+size_t sync_recvfrom(socket_type s, state_type state, buf* bufs,
+    size_t count, int flags, socket_addr_type* addr,
+    std::size_t* addrlen, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return 0;
+  }
+
+  // Read some data.
+  for (;;)
+  {
+    // Try to complete the operation without blocking.
+    signed_size_type bytes = socket_ops::recvfrom(
+        s, bufs, count, flags, addr, addrlen, ec);
+
+    // Check if operation succeeded.
+    if (bytes >= 0)
+      return bytes;
+
+    // Operation failed.
+    if ((state & user_set_non_blocking)
+        || (ec != boost::asio::error::would_block
+          && ec != boost::asio::error::try_again))
+      return 0;
+
+    // Wait for socket to become ready.
+    if (socket_ops::poll_read(s, 0, ec) < 0)
+      return 0;
+  }
+}
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+void complete_iocp_recvfrom(
+    const weak_cancel_token_type& cancel_token,
+    boost::system::error_code& ec)
+{
+  // Map non-portable errors to their portable counterparts.
+  if (ec.value() == ERROR_NETNAME_DELETED)
+  {
+    if (cancel_token.expired())
+      ec = boost::asio::error::operation_aborted;
+    else
+      ec = boost::asio::error::connection_reset;
+  }
+  else if (ec.value() == ERROR_PORT_UNREACHABLE)
+  {
+    ec = boost::asio::error::connection_refused;
+  }
+}
+
+#else // defined(BOOST_ASIO_HAS_IOCP)
+
+bool non_blocking_recvfrom(socket_type s,
+    buf* bufs, size_t count, int flags,
+    socket_addr_type* addr, std::size_t* addrlen,
+    boost::system::error_code& ec, size_t& bytes_transferred)
+{
+  for (;;)
+  {
+    // Read some data.
+    signed_size_type bytes = socket_ops::recvfrom(
+        s, bufs, count, flags, addr, addrlen, ec);
+
+    // Retry operation if interrupted by signal.
+    if (ec == boost::asio::error::interrupted)
+      continue;
+
+    // Check if we need to run the operation again.
+    if (ec == boost::asio::error::would_block
+        || ec == boost::asio::error::try_again)
+      return false;
+
+    // Operation is complete.
+    if (bytes >= 0)
+    {
+      ec = boost::system::error_code();
+      bytes_transferred = bytes;
+    }
+    else
+      bytes_transferred = 0;
+
+    return true;
+  }
+}
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+signed_size_type recvmsg(socket_type s, buf* bufs, size_t count,
+    int in_flags, int& out_flags, boost::system::error_code& ec)
+{
+  clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  out_flags = 0;
+  return socket_ops::recv(s, bufs, count, in_flags, ec);
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  msghdr msg = msghdr();
+  msg.msg_iov = bufs;
+  msg.msg_iovlen = static_cast<int>(count);
+  signed_size_type result = error_wrapper(::recvmsg(s, &msg, in_flags), ec);
+  if (result >= 0)
+  {
+    ec = boost::system::error_code();
+    out_flags = msg.msg_flags;
+  }
+  else
+    out_flags = 0;
+  return result;
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+}
+
+size_t sync_recvmsg(socket_type s, state_type state,
+    buf* bufs, size_t count, int in_flags, int& out_flags,
+    boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return 0;
+  }
+
+  // Read some data.
+  for (;;)
+  {
+    // Try to complete the operation without blocking.
+    signed_size_type bytes = socket_ops::recvmsg(
+        s, bufs, count, in_flags, out_flags, ec);
+
+    // Check if operation succeeded.
+    if (bytes >= 0)
+      return bytes;
+
+    // Operation failed.
+    if ((state & user_set_non_blocking)
+        || (ec != boost::asio::error::would_block
+          && ec != boost::asio::error::try_again))
+      return 0;
+
+    // Wait for socket to become ready.
+    if (socket_ops::poll_read(s, 0, ec) < 0)
+      return 0;
+  }
+}
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+void complete_iocp_recvmsg(
+    const weak_cancel_token_type& cancel_token,
+    boost::system::error_code& ec)
+{
+  // Map non-portable errors to their portable counterparts.
+  if (ec.value() == ERROR_NETNAME_DELETED)
+  {
+    if (cancel_token.expired())
+      ec = boost::asio::error::operation_aborted;
+    else
+      ec = boost::asio::error::connection_reset;
+  }
+  else if (ec.value() == ERROR_PORT_UNREACHABLE)
+  {
+    ec = boost::asio::error::connection_refused;
+  }
+}
+
+#else // defined(BOOST_ASIO_HAS_IOCP)
+
+bool non_blocking_recvmsg(socket_type s,
+    buf* bufs, size_t count, int in_flags, int& out_flags,
+    boost::system::error_code& ec, size_t& bytes_transferred)
+{
+  for (;;)
+  {
+    // Read some data.
+    signed_size_type bytes = socket_ops::recvmsg(
+        s, bufs, count, in_flags, out_flags, ec);
+
+    // Retry operation if interrupted by signal.
+    if (ec == boost::asio::error::interrupted)
+      continue;
+
+    // Check if we need to run the operation again.
+    if (ec == boost::asio::error::would_block
+        || ec == boost::asio::error::try_again)
+      return false;
+
+    // Operation is complete.
+    if (bytes >= 0)
+    {
+      ec = boost::system::error_code();
+      bytes_transferred = bytes;
+    }
+    else
+      bytes_transferred = 0;
+
+    return true;
+  }
+}
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+signed_size_type send(socket_type s, const buf* bufs, size_t count,
+    int flags, boost::system::error_code& ec)
+{
+  clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  // Send the data.
+  DWORD send_buf_count = static_cast<DWORD>(count);
+  DWORD bytes_transferred = 0;
+  DWORD send_flags = flags;
+  int result = error_wrapper(::WSASend(s, const_cast<buf*>(bufs),
+        send_buf_count, &bytes_transferred, send_flags, 0, 0), ec);
+  if (ec.value() == ERROR_NETNAME_DELETED)
+    ec = boost::asio::error::connection_reset;
+  else if (ec.value() == ERROR_PORT_UNREACHABLE)
+    ec = boost::asio::error::connection_refused;
+  if (result != 0)
+    return socket_error_retval;
+  ec = boost::system::error_code();
+  return bytes_transferred;
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  msghdr msg = msghdr();
+  msg.msg_iov = const_cast<buf*>(bufs);
+  msg.msg_iovlen = static_cast<int>(count);
+#if defined(__linux__)
+  flags |= MSG_NOSIGNAL;
+#endif // defined(__linux__)
+  signed_size_type result = error_wrapper(::sendmsg(s, &msg, flags), ec);
+  if (result >= 0)
+    ec = boost::system::error_code();
+  return result;
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+}
+
+size_t sync_send(socket_type s, state_type state, const buf* bufs,
+    size_t count, int flags, bool all_empty, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return 0;
+  }
+
+  // A request to write 0 bytes to a stream is a no-op.
+  if (all_empty && (state & stream_oriented))
+  {
+    ec = boost::system::error_code();
+    return 0;
+  }
+
+  // Read some data.
+  for (;;)
+  {
+    // Try to complete the operation without blocking.
+    signed_size_type bytes = socket_ops::send(s, bufs, count, flags, ec);
+
+    // Check if operation succeeded.
+    if (bytes >= 0)
+      return bytes;
+
+    // Operation failed.
+    if ((state & user_set_non_blocking)
+        || (ec != boost::asio::error::would_block
+          && ec != boost::asio::error::try_again))
+      return 0;
+
+    // Wait for socket to become ready.
+    if (socket_ops::poll_write(s, 0, ec) < 0)
+      return 0;
+  }
+}
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+void complete_iocp_send(
+    const weak_cancel_token_type& cancel_token,
+    boost::system::error_code& ec)
+{
+  // Map non-portable errors to their portable counterparts.
+  if (ec.value() == ERROR_NETNAME_DELETED)
+  {
+    if (cancel_token.expired())
+      ec = boost::asio::error::operation_aborted;
+    else
+      ec = boost::asio::error::connection_reset;
+  }
+  else if (ec.value() == ERROR_PORT_UNREACHABLE)
+  {
+    ec = boost::asio::error::connection_refused;
+  }
+}
+
+#else // defined(BOOST_ASIO_HAS_IOCP)
+
+bool non_blocking_send(socket_type s,
+    const buf* bufs, size_t count, int flags,
+    boost::system::error_code& ec, size_t& bytes_transferred)
+{
+  for (;;)
+  {
+    // Write some data.
+    signed_size_type bytes = socket_ops::send(s, bufs, count, flags, ec);
+
+    // Retry operation if interrupted by signal.
+    if (ec == boost::asio::error::interrupted)
+      continue;
+
+    // Check if we need to run the operation again.
+    if (ec == boost::asio::error::would_block
+        || ec == boost::asio::error::try_again)
+      return false;
+
+    // Operation is complete.
+    if (bytes >= 0)
+    {
+      ec = boost::system::error_code();
+      bytes_transferred = bytes;
+    }
+    else
+      bytes_transferred = 0;
+
+    return true;
+  }
+}
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+signed_size_type sendto(socket_type s, const buf* bufs, size_t count,
+    int flags, const socket_addr_type* addr, std::size_t addrlen,
+    boost::system::error_code& ec)
+{
+  clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  // Send the data.
+  DWORD send_buf_count = static_cast<DWORD>(count);
+  DWORD bytes_transferred = 0;
+  int result = error_wrapper(::WSASendTo(s, const_cast<buf*>(bufs),
+        send_buf_count, &bytes_transferred, flags, addr,
+        static_cast<int>(addrlen), 0, 0), ec);
+  if (ec.value() == ERROR_NETNAME_DELETED)
+    ec = boost::asio::error::connection_reset;
+  else if (ec.value() == ERROR_PORT_UNREACHABLE)
+    ec = boost::asio::error::connection_refused;
+  if (result != 0)
+    return socket_error_retval;
+  ec = boost::system::error_code();
+  return bytes_transferred;
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  msghdr msg = msghdr();
+  init_msghdr_msg_name(msg.msg_name, addr);
+  msg.msg_namelen = static_cast<int>(addrlen);
+  msg.msg_iov = const_cast<buf*>(bufs);
+  msg.msg_iovlen = static_cast<int>(count);
+#if defined(__linux__)
+  flags |= MSG_NOSIGNAL;
+#endif // defined(__linux__)
+  signed_size_type result = error_wrapper(::sendmsg(s, &msg, flags), ec);
+  if (result >= 0)
+    ec = boost::system::error_code();
+  return result;
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+}
+
+size_t sync_sendto(socket_type s, state_type state, const buf* bufs,
+    size_t count, int flags, const socket_addr_type* addr,
+    std::size_t addrlen, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return 0;
+  }
+
+  // Write some data.
+  for (;;)
+  {
+    // Try to complete the operation without blocking.
+    signed_size_type bytes = socket_ops::sendto(
+        s, bufs, count, flags, addr, addrlen, ec);
+
+    // Check if operation succeeded.
+    if (bytes >= 0)
+      return bytes;
+
+    // Operation failed.
+    if ((state & user_set_non_blocking)
+        || (ec != boost::asio::error::would_block
+          && ec != boost::asio::error::try_again))
+      return 0;
+
+    // Wait for socket to become ready.
+    if (socket_ops::poll_write(s, 0, ec) < 0)
+      return 0;
+  }
+}
+
+#if !defined(BOOST_ASIO_HAS_IOCP)
+
+bool non_blocking_sendto(socket_type s,
+    const buf* bufs, size_t count, int flags,
+    const socket_addr_type* addr, std::size_t addrlen,
+    boost::system::error_code& ec, size_t& bytes_transferred)
+{
+  for (;;)
+  {
+    // Write some data.
+    signed_size_type bytes = socket_ops::sendto(
+        s, bufs, count, flags, addr, addrlen, ec);
+
+    // Retry operation if interrupted by signal.
+    if (ec == boost::asio::error::interrupted)
+      continue;
+
+    // Check if we need to run the operation again.
+    if (ec == boost::asio::error::would_block
+        || ec == boost::asio::error::try_again)
+      return false;
+
+    // Operation is complete.
+    if (bytes >= 0)
+    {
+      ec = boost::system::error_code();
+      bytes_transferred = bytes;
+    }
+    else
+      bytes_transferred = 0;
+
+    return true;
+  }
+}
+
+#endif // !defined(BOOST_ASIO_HAS_IOCP)
+
+socket_type socket(int af, int type, int protocol,
+    boost::system::error_code& ec)
+{
+  clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  socket_type s = error_wrapper(::WSASocket(af, type, protocol, 0, 0,
+        WSA_FLAG_OVERLAPPED), ec);
+  if (s == invalid_socket)
+    return s;
+
+  if (af == BOOST_ASIO_OS_DEF(AF_INET6))
+  {
+    // Try to enable the POSIX default behaviour of having IPV6_V6ONLY set to
+    // false. This will only succeed on Windows Vista and later versions of
+    // Windows, where a dual-stack IPv4/v6 implementation is available.
+    DWORD optval = 0;
+    ::setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
+        reinterpret_cast<const char*>(&optval), sizeof(optval));
+  }
+
+  ec = boost::system::error_code();
+
+  return s;
+#elif defined(__MACH__) && defined(__APPLE__) || defined(__FreeBSD__)
+  socket_type s = error_wrapper(::socket(af, type, protocol), ec);
+  if (s == invalid_socket)
+    return s;
+
+  int optval = 1;
+  int result = error_wrapper(::setsockopt(s,
+        SOL_SOCKET, SO_NOSIGPIPE, &optval, sizeof(optval)), ec);
+  if (result != 0)
+  {
+    ::close(s);
+    return invalid_socket;
+  }
+
+  return s;
+#else
+  int s = error_wrapper(::socket(af, type, protocol), ec);
+  if (s >= 0)
+    ec = boost::system::error_code();
+  return s;
+#endif
+}
+
+template <typename SockLenType>
+inline int call_setsockopt(SockLenType msghdr::*,
+    socket_type s, int level, int optname,
+    const void* optval, std::size_t optlen)
+{
+  return ::setsockopt(s, level, optname,
+      (const char*)optval, (SockLenType)optlen);
+}
+
+int setsockopt(socket_type s, state_type& state, int level, int optname,
+    const void* optval, std::size_t optlen, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return socket_error_retval;
+  }
+
+  if (level == custom_socket_option_level && optname == always_fail_option)
+  {
+    ec = boost::asio::error::invalid_argument;
+    return socket_error_retval;
+  }
+
+  if (level == custom_socket_option_level
+      && optname == enable_connection_aborted_option)
+  {
+    if (optlen != sizeof(int))
+    {
+      ec = boost::asio::error::invalid_argument;
+      return socket_error_retval;
+    }
+
+    if (*static_cast<const int*>(optval))
+      state |= enable_connection_aborted;
+    else
+      state &= ~enable_connection_aborted;
+    ec = boost::system::error_code();
+    return 0;
+  }
+
+  if (level == SOL_SOCKET && optname == SO_LINGER)
+    state |= user_set_linger;
+
+#if defined(__BORLANDC__)
+  // Mysteriously, using the getsockopt and setsockopt functions directly with
+  // Borland C++ results in incorrect values being set and read. The bug can be
+  // worked around by using function addresses resolved with GetProcAddress.
+  if (HMODULE winsock_module = ::GetModuleHandleA("ws2_32"))
+  {
+    typedef int (WSAAPI *sso_t)(SOCKET, int, int, const char*, int);
+    if (sso_t sso = (sso_t)::GetProcAddress(winsock_module, "setsockopt"))
+    {
+      clear_last_error();
+      return error_wrapper(sso(s, level, optname,
+            reinterpret_cast<const char*>(optval),
+            static_cast<int>(optlen)), ec);
+    }
+  }
+  ec = boost::asio::error::fault;
+  return socket_error_retval;
+#else // defined(__BORLANDC__)
+  clear_last_error();
+  int result = error_wrapper(call_setsockopt(&msghdr::msg_namelen,
+        s, level, optname, optval, optlen), ec);
+  if (result == 0)
+  {
+    ec = boost::system::error_code();
+
+#if defined(__MACH__) && defined(__APPLE__) \
+  || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)
+    // To implement portable behaviour for SO_REUSEADDR with UDP sockets we
+    // need to also set SO_REUSEPORT on BSD-based platforms.
+    if ((state & datagram_oriented)
+        && level == SOL_SOCKET && optname == SO_REUSEADDR)
+    {
+      call_setsockopt(&msghdr::msg_namelen, s,
+          SOL_SOCKET, SO_REUSEPORT, optval, optlen);
+    }
+#endif
+  }
+
+  return result;
+#endif // defined(__BORLANDC__)
+}
+
+template <typename SockLenType>
+inline int call_getsockopt(SockLenType msghdr::*,
+    socket_type s, int level, int optname,
+    void* optval, std::size_t* optlen)
+{
+  SockLenType tmp_optlen = (SockLenType)*optlen;
+  int result = ::getsockopt(s, level, optname, (char*)optval, &tmp_optlen);
+  *optlen = (std::size_t)tmp_optlen;
+  return result;
+}
+
+int getsockopt(socket_type s, state_type state, int level, int optname,
+    void* optval, size_t* optlen, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return socket_error_retval;
+  }
+
+  if (level == custom_socket_option_level && optname == always_fail_option)
+  {
+    ec = boost::asio::error::invalid_argument;
+    return socket_error_retval;
+  }
+
+  if (level == custom_socket_option_level
+      && optname == enable_connection_aborted_option)
+  {
+    if (*optlen != sizeof(int))
+    {
+      ec = boost::asio::error::invalid_argument;
+      return socket_error_retval;
+    }
+
+    *static_cast<int*>(optval) = (state & enable_connection_aborted) ? 1 : 0;
+    ec = boost::system::error_code();
+    return 0;
+  }
+
+#if defined(__BORLANDC__)
+  // Mysteriously, using the getsockopt and setsockopt functions directly with
+  // Borland C++ results in incorrect values being set and read. The bug can be
+  // worked around by using function addresses resolved with GetProcAddress.
+  if (HMODULE winsock_module = ::GetModuleHandleA("ws2_32"))
+  {
+    typedef int (WSAAPI *gso_t)(SOCKET, int, int, char*, int*);
+    if (gso_t gso = (gso_t)::GetProcAddress(winsock_module, "getsockopt"))
+    {
+      clear_last_error();
+      int tmp_optlen = static_cast<int>(*optlen);
+      int result = error_wrapper(gso(s, level, optname,
+            reinterpret_cast<char*>(optval), &tmp_optlen), ec);
+      *optlen = static_cast<size_t>(tmp_optlen);
+      if (result != 0 && level == IPPROTO_IPV6 && optname == IPV6_V6ONLY
+          && ec.value() == WSAENOPROTOOPT && *optlen == sizeof(DWORD))
+      {
+        // Dual-stack IPv4/v6 sockets, and the IPV6_V6ONLY socket option, are
+        // only supported on Windows Vista and later. To simplify program logic
+        // we will fake success of getting this option and specify that the
+        // value is non-zero (i.e. true). This corresponds to the behavior of
+        // IPv6 sockets on Windows platforms pre-Vista.
+        *static_cast<DWORD*>(optval) = 1;
+        ec = boost::system::error_code();
+      }
+      return result;
+    }
+  }
+  ec = boost::asio::error::fault;
+  return socket_error_retval;
+#elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  clear_last_error();
+  int result = error_wrapper(call_getsockopt(&msghdr::msg_namelen,
+        s, level, optname, optval, optlen), ec);
+  if (result != 0 && level == IPPROTO_IPV6 && optname == IPV6_V6ONLY
+      && ec.value() == WSAENOPROTOOPT && *optlen == sizeof(DWORD))
+  {
+    // Dual-stack IPv4/v6 sockets, and the IPV6_V6ONLY socket option, are only
+    // supported on Windows Vista and later. To simplify program logic we will
+    // fake success of getting this option and specify that the value is
+    // non-zero (i.e. true). This corresponds to the behavior of IPv6 sockets
+    // on Windows platforms pre-Vista.
+    *static_cast<DWORD*>(optval) = 1;
+    ec = boost::system::error_code();
+  }
+  if (result == 0)
+    ec = boost::system::error_code();
+  return result;
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  clear_last_error();
+  int result = error_wrapper(call_getsockopt(&msghdr::msg_namelen,
+        s, level, optname, optval, optlen), ec);
+#if defined(__linux__)
+  if (result == 0 && level == SOL_SOCKET && *optlen == sizeof(int)
+      && (optname == SO_SNDBUF || optname == SO_RCVBUF))
+  {
+    // On Linux, setting SO_SNDBUF or SO_RCVBUF to N actually causes the kernel
+    // to set the buffer size to N*2. Linux puts additional stuff into the
+    // buffers so that only about half is actually available to the application.
+    // The retrieved value is divided by 2 here to make it appear as though the
+    // correct value has been set.
+    *static_cast<int*>(optval) /= 2;
+  }
+#endif // defined(__linux__)
+  if (result == 0)
+    ec = boost::system::error_code();
+  return result;
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+}
+
+template <typename SockLenType>
+inline int call_getpeername(SockLenType msghdr::*,
+    socket_type s, socket_addr_type* addr, std::size_t* addrlen)
+{
+  SockLenType tmp_addrlen = (SockLenType)*addrlen;
+  int result = ::getpeername(s, addr, &tmp_addrlen);
+  *addrlen = (std::size_t)tmp_addrlen;
+  return result;
+}
+
+int getpeername(socket_type s, socket_addr_type* addr,
+    std::size_t* addrlen, bool cached, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return socket_error_retval;
+  }
+
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  if (cached)
+  {
+    // Check if socket is still connected.
+    DWORD connect_time = 0;
+    size_t connect_time_len = sizeof(connect_time);
+    if (socket_ops::getsockopt(s, 0, SOL_SOCKET, SO_CONNECT_TIME,
+          &connect_time, &connect_time_len, ec) == socket_error_retval)
+    {
+      return socket_error_retval;
+    }
+    if (connect_time == 0xFFFFFFFF)
+    {
+      ec = boost::asio::error::not_connected;
+      return socket_error_retval;
+    }
+
+    // The cached value is still valid.
+    ec = boost::system::error_code();
+    return 0;
+  }
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  (void)cached;
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+  clear_last_error();
+  int result = error_wrapper(call_getpeername(
+        &msghdr::msg_namelen, s, addr, addrlen), ec);
+  if (result == 0)
+    ec = boost::system::error_code();
+  return result;
+}
+
+template <typename SockLenType>
+inline int call_getsockname(SockLenType msghdr::*,
+    socket_type s, socket_addr_type* addr, std::size_t* addrlen)
+{
+  SockLenType tmp_addrlen = (SockLenType)*addrlen;
+  int result = ::getsockname(s, addr, &tmp_addrlen);
+  *addrlen = (std::size_t)tmp_addrlen;
+  return result;
+}
+
+int getsockname(socket_type s, socket_addr_type* addr,
+    std::size_t* addrlen, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return socket_error_retval;
+  }
+
+  clear_last_error();
+  int result = error_wrapper(call_getsockname(
+        &msghdr::msg_namelen, s, addr, addrlen), ec);
+  if (result == 0)
+    ec = boost::system::error_code();
+  return result;
+}
+
+int ioctl(socket_type s, state_type& state, int cmd,
+    ioctl_arg_type* arg, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return socket_error_retval;
+  }
+
+  clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  int result = error_wrapper(::ioctlsocket(s, cmd, arg), ec);
+#elif defined(__MACH__) && defined(__APPLE__) \
+  || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)
+  int result = error_wrapper(::ioctl(s,
+        static_cast<unsigned int>(cmd), arg), ec);
+#else
+  int result = error_wrapper(::ioctl(s, cmd, arg), ec);
+#endif
+  if (result >= 0)
+  {
+    ec = boost::system::error_code();
+
+    // When updating the non-blocking mode we always perform the ioctl syscall,
+    // even if the flags would otherwise indicate that the socket is already in
+    // the correct state. This ensures that the underlying socket is put into
+    // the state that has been requested by the user. If the ioctl syscall was
+    // successful then we need to update the flags to match.
+    if (cmd == static_cast<int>(FIONBIO))
+    {
+      if (*arg)
+      {
+        state |= user_set_non_blocking;
+      }
+      else
+      {
+        // Clearing the non-blocking mode always overrides any internally-set
+        // non-blocking flag. Any subsequent asynchronous operations will need
+        // to re-enable non-blocking I/O.
+        state &= ~(user_set_non_blocking | internal_non_blocking);
+      }
+    }
+  }
+
+  return result;
+}
+
+int select(int nfds, fd_set* readfds, fd_set* writefds,
+    fd_set* exceptfds, timeval* timeout, boost::system::error_code& ec)
+{
+  clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  if (!readfds && !writefds && !exceptfds && timeout)
+  {
+    DWORD milliseconds = timeout->tv_sec * 1000 + timeout->tv_usec / 1000;
+    if (milliseconds == 0)
+      milliseconds = 1; // Force context switch.
+    ::Sleep(milliseconds);
+    ec = boost::system::error_code();
+    return 0;
+  }
+
+  // The select() call allows timeout values measured in microseconds, but the
+  // system clock (as wrapped by boost::posix_time::microsec_clock) typically
+  // has a resolution of 10 milliseconds. This can lead to a spinning select
+  // reactor, meaning increased CPU usage, when waiting for the earliest
+  // scheduled timeout if it's less than 10 milliseconds away. To avoid a tight
+  // spin we'll use a minimum timeout of 1 millisecond.
+  if (timeout && timeout->tv_sec == 0
+      && timeout->tv_usec > 0 && timeout->tv_usec < 1000)
+    timeout->tv_usec = 1000;
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+#if defined(__hpux) && defined(__SELECT)
+  timespec ts;
+  ts.tv_sec = timeout ? timeout->tv_sec : 0;
+  ts.tv_nsec = timeout ? timeout->tv_usec * 1000 : 0;
+  return error_wrapper(::pselect(nfds, readfds,
+        writefds, exceptfds, timeout ? &ts : 0, 0), ec);
+#else
+  int result = error_wrapper(::select(nfds, readfds,
+        writefds, exceptfds, timeout), ec);
+  if (result >= 0)
+    ec = boost::system::error_code();
+  return result;
+#endif
+}
+
+int poll_read(socket_type s, state_type state, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return socket_error_retval;
+  }
+
+#if defined(BOOST_ASIO_WINDOWS) \
+  || defined(__CYGWIN__) \
+  || defined(__SYMBIAN32__)
+  fd_set fds;
+  FD_ZERO(&fds);
+  FD_SET(s, &fds);
+  timeval zero_timeout;
+  zero_timeout.tv_sec = 0;
+  zero_timeout.tv_usec = 0;
+  timeval* timeout = (state & user_set_non_blocking) ? &zero_timeout : 0;
+  clear_last_error();
+  int result = error_wrapper(::select(s + 1, &fds, 0, 0, timeout), ec);
+#else // defined(BOOST_ASIO_WINDOWS)
+      // || defined(__CYGWIN__)
+      // || defined(__SYMBIAN32__)
+  pollfd fds;
+  fds.fd = s;
+  fds.events = POLLIN;
+  fds.revents = 0;
+  int timeout = (state & user_set_non_blocking) ? 0 : -1;
+  clear_last_error();
+  int result = error_wrapper(::poll(&fds, 1, timeout), ec);
+#endif // defined(BOOST_ASIO_WINDOWS)
+       // || defined(__CYGWIN__)
+       // || defined(__SYMBIAN32__)
+  if (result == 0)
+    ec = (state & user_set_non_blocking)
+      ? boost::asio::error::would_block : boost::system::error_code();
+  else if (result > 0)
+    ec = boost::system::error_code();
+  return result;
+}
+
+int poll_write(socket_type s, state_type state, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return socket_error_retval;
+  }
+
+#if defined(BOOST_ASIO_WINDOWS) \
+  || defined(__CYGWIN__) \
+  || defined(__SYMBIAN32__)
+  fd_set fds;
+  FD_ZERO(&fds);
+  FD_SET(s, &fds);
+  timeval zero_timeout;
+  zero_timeout.tv_sec = 0;
+  zero_timeout.tv_usec = 0;
+  timeval* timeout = (state & user_set_non_blocking) ? &zero_timeout : 0;
+  clear_last_error();
+  int result = error_wrapper(::select(s + 1, 0, &fds, 0, timeout), ec);
+#else // defined(BOOST_ASIO_WINDOWS)
+      // || defined(__CYGWIN__)
+      // || defined(__SYMBIAN32__)
+  pollfd fds;
+  fds.fd = s;
+  fds.events = POLLOUT;
+  fds.revents = 0;
+  int timeout = (state & user_set_non_blocking) ? 0 : -1;
+  clear_last_error();
+  int result = error_wrapper(::poll(&fds, 1, timeout), ec);
+#endif // defined(BOOST_ASIO_WINDOWS)
+       // || defined(__CYGWIN__)
+       // || defined(__SYMBIAN32__)
+  if (result == 0)
+    ec = (state & user_set_non_blocking)
+      ? boost::asio::error::would_block : boost::system::error_code();
+  else if (result > 0)
+    ec = boost::system::error_code();
+  return result;
+}
+
+int poll_connect(socket_type s, boost::system::error_code& ec)
+{
+  if (s == invalid_socket)
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return socket_error_retval;
+  }
+
+#if defined(BOOST_ASIO_WINDOWS) \
+  || defined(__CYGWIN__) \
+  || defined(__SYMBIAN32__)
+  fd_set write_fds;
+  FD_ZERO(&write_fds);
+  FD_SET(s, &write_fds);
+  fd_set except_fds;
+  FD_ZERO(&except_fds);
+  FD_SET(s, &except_fds);
+  clear_last_error();
+  int result = error_wrapper(::select(
+        s + 1, 0, &write_fds, &except_fds, 0), ec);
+  if (result >= 0)
+    ec = boost::system::error_code();
+  return result;
+#else // defined(BOOST_ASIO_WINDOWS)
+      // || defined(__CYGWIN__)
+      // || defined(__SYMBIAN32__)
+  pollfd fds;
+  fds.fd = s;
+  fds.events = POLLOUT;
+  fds.revents = 0;
+  clear_last_error();
+  int result = error_wrapper(::poll(&fds, 1, -1), ec);
+  if (result >= 0)
+    ec = boost::system::error_code();
+  return result;
+#endif // defined(BOOST_ASIO_WINDOWS)
+       // || defined(__CYGWIN__)
+       // || defined(__SYMBIAN32__)
+}
+
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+const char* inet_ntop(int af, const void* src, char* dest, size_t length,
+    unsigned long scope_id, boost::system::error_code& ec)
+{
+  clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  using namespace std; // For sprintf.
+  const unsigned char* bytes = static_cast<const unsigned char*>(src);
+  if (af == BOOST_ASIO_OS_DEF(AF_INET))
+  {
+    sprintf_s(dest, length, "%u.%u.%u.%u",
+        bytes[0], bytes[1], bytes[2], bytes[3]);
+    return dest;
+  }
+  else if (af == BOOST_ASIO_OS_DEF(AF_INET6))
+  {
+    size_t n = 0, b = 0, z = 0;
+    while (n < length && b < 16)
+    {
+      if (bytes[b] == 0 && bytes[b + 1] == 0 && z == 0)
+      {
+        do b += 2; while (b < 16 && bytes[b] == 0 && bytes[b + 1] == 0);
+        n += sprintf_s(dest + n, length - n, ":%s", b < 16 ? "" : ":"), ++z;
+      }
+      else
+      {
+        n += sprintf_s(dest + n, length - n, "%s%x", b ? ":" : "",
+            (static_cast<u_long_type>(bytes[b]) << 8) | bytes[b + 1]);
+        b += 2;
+      }
+    }
+    if (scope_id)
+      n += sprintf_s(dest + n, length - n, "%%%lu", scope_id);
+    return dest;
+  }
+  else
+  {
+    ec = boost::asio::error::address_family_not_supported;
+    return 0;
+  }
+#elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  using namespace std; // For memcpy.
+
+  if (af != BOOST_ASIO_OS_DEF(AF_INET) && af != BOOST_ASIO_OS_DEF(AF_INET6))
+  {
+    ec = boost::asio::error::address_family_not_supported;
+    return 0;
+  }
+
+  union
+  {
+    socket_addr_type base;
+    sockaddr_storage_type storage;
+    sockaddr_in4_type v4;
+    sockaddr_in6_type v6;
+  } address;
+  DWORD address_length;
+  if (af == BOOST_ASIO_OS_DEF(AF_INET))
+  {
+    address_length = sizeof(sockaddr_in4_type);
+    address.v4.sin_family = BOOST_ASIO_OS_DEF(AF_INET);
+    address.v4.sin_port = 0;
+    memcpy(&address.v4.sin_addr, src, sizeof(in4_addr_type));
+  }
+  else // AF_INET6
+  {
+    address_length = sizeof(sockaddr_in6_type);
+    address.v6.sin6_family = BOOST_ASIO_OS_DEF(AF_INET6);
+    address.v6.sin6_port = 0;
+    address.v6.sin6_flowinfo = 0;
+    address.v6.sin6_scope_id = scope_id;
+    memcpy(&address.v6.sin6_addr, src, sizeof(in6_addr_type));
+  }
+
+  DWORD string_length = static_cast<DWORD>(length);
+#if defined(BOOST_NO_ANSI_APIS) || (defined(_MSC_VER) && (_MSC_VER >= 1800))
+  LPWSTR string_buffer = (LPWSTR)_alloca(length * sizeof(WCHAR));
+  int result = error_wrapper(::WSAAddressToStringW(&address.base,
+        address_length, 0, string_buffer, &string_length), ec);
+  ::WideCharToMultiByte(CP_ACP, 0, string_buffer, -1, dest, length, 0, 0);
+#else
+  int result = error_wrapper(::WSAAddressToStringA(
+        &address.base, address_length, 0, dest, &string_length), ec);
+#endif
+
+  // Windows may set error code on success.
+  if (result != socket_error_retval)
+    ec = boost::system::error_code();
+
+  // Windows may not set an error code on failure.
+  else if (result == socket_error_retval && !ec)
+    ec = boost::asio::error::invalid_argument;
+
+  return result == socket_error_retval ? 0 : dest;
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  const char* result = error_wrapper(::inet_ntop(
+        af, src, dest, static_cast<int>(length)), ec);
+  if (result == 0 && !ec)
+    ec = boost::asio::error::invalid_argument;
+  if (result != 0 && af == BOOST_ASIO_OS_DEF(AF_INET6) && scope_id != 0)
+  {
+    using namespace std; // For strcat and sprintf.
+    char if_name[IF_NAMESIZE + 1] = "%";
+    const in6_addr_type* ipv6_address = static_cast<const in6_addr_type*>(src);
+    bool is_link_local = ((ipv6_address->s6_addr[0] == 0xfe)
+        && ((ipv6_address->s6_addr[1] & 0xc0) == 0x80));
+    bool is_multicast_link_local = ((ipv6_address->s6_addr[0] == 0xff)
+        && ((ipv6_address->s6_addr[1] & 0x0f) == 0x02));
+    if ((!is_link_local && !is_multicast_link_local)
+        || if_indextoname(static_cast<unsigned>(scope_id), if_name + 1) == 0)
+      sprintf(if_name + 1, "%lu", scope_id);
+    strcat(dest, if_name);
+  }
+  return result;
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+}
+
+int inet_pton(int af, const char* src, void* dest,
+    unsigned long* scope_id, boost::system::error_code& ec)
+{
+  clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  using namespace std; // For sscanf.
+  unsigned char* bytes = static_cast<unsigned char*>(dest);
+  if (af == BOOST_ASIO_OS_DEF(AF_INET))
+  {
+    unsigned int b0, b1, b2, b3;
+    if (sscanf_s(src, "%u.%u.%u.%u", &b0, &b1, &b2, &b3) != 4)
+    {
+      ec = boost::asio::error::invalid_argument;
+      return -1;
+    }
+    if (b0 > 255 || b1 > 255 || b2 > 255 || b3 > 255)
+    {
+      ec = boost::asio::error::invalid_argument;
+      return -1;
+    }
+    bytes[0] = static_cast<unsigned char>(b0);
+    bytes[1] = static_cast<unsigned char>(b1);
+    bytes[2] = static_cast<unsigned char>(b2);
+    bytes[3] = static_cast<unsigned char>(b3);
+    ec = boost::system::error_code();
+    return 1;
+  }
+  else if (af == BOOST_ASIO_OS_DEF(AF_INET6))
+  {
+    unsigned char* bytes = static_cast<unsigned char*>(dest);
+    std::memset(bytes, 0, 16);
+    unsigned char back_bytes[16] = { 0 };
+    int num_front_bytes = 0, num_back_bytes = 0;
+    const char* p = src;
+
+    enum { fword, fcolon, bword, scope, done } state = fword;
+    unsigned long current_word = 0;
+    while (state != done)
+    {
+      if (current_word > 0xFFFF)
+      {
+        ec = boost::asio::error::invalid_argument;
+        return -1;
+      }
+
+      switch (state)
+      {
+      case fword:
+        if (*p >= '0' && *p <= '9')
+          current_word = current_word * 16 + *p++ - '0';
+        else if (*p >= 'a' && *p <= 'f')
+          current_word = current_word * 16 + *p++ - 'a' + 10;
+        else if (*p >= 'A' && *p <= 'F')
+          current_word = current_word * 16 + *p++ - 'A' + 10;
+        else
+        {
+          if (num_front_bytes == 16)
+          {
+            ec = boost::asio::error::invalid_argument;
+            return -1;
+          }
+
+          bytes[num_front_bytes++] = (current_word >> 8) & 0xFF;
+          bytes[num_front_bytes++] = current_word & 0xFF;
+          current_word = 0;
+
+          if (*p == ':')
+            state = fcolon, ++p;
+          else if (*p == '%')
+            state = scope, ++p;
+          else if (*p == 0)
+            state = done;
+          else
+          {
+            ec = boost::asio::error::invalid_argument;
+            return -1;
+          }
+        }
+        break;
+
+      case fcolon:
+        if (*p == ':')
+          state = bword, ++p;
+        else
+          state = fword;
+        break;
+
+      case bword:
+        if (*p >= '0' && *p <= '9')
+          current_word = current_word * 16 + *p++ - '0';
+        else if (*p >= 'a' && *p <= 'f')
+          current_word = current_word * 16 + *p++ - 'a' + 10;
+        else if (*p >= 'A' && *p <= 'F')
+          current_word = current_word * 16 + *p++ - 'A' + 10;
+        else
+        {
+          if (num_front_bytes + num_back_bytes == 16)
+          {
+            ec = boost::asio::error::invalid_argument;
+            return -1;
+          }
+
+          back_bytes[num_back_bytes++] = (current_word >> 8) & 0xFF;
+          back_bytes[num_back_bytes++] = current_word & 0xFF;
+          current_word = 0;
+
+          if (*p == ':')
+            state = bword, ++p;
+          else if (*p == '%')
+            state = scope, ++p;
+          else if (*p == 0)
+            state = done;
+          else
+          {
+            ec = boost::asio::error::invalid_argument;
+            return -1;
+          }
+        }
+        break;
+
+      case scope:
+        if (*p >= '0' && *p <= '9')
+          current_word = current_word * 10 + *p++ - '0';
+        else if (*p == 0)
+          *scope_id = current_word, state = done;
+        else
+        {
+          ec = boost::asio::error::invalid_argument;
+          return -1;
+        }
+        break;
+
+      default:
+        break;
+      }
+    }
+
+    for (int i = 0; i < num_back_bytes; ++i)
+      bytes[16 - num_back_bytes + i] = back_bytes[i];
+
+    ec = boost::system::error_code();
+    return 1;
+  }
+  else
+  {
+    ec = boost::asio::error::address_family_not_supported;
+    return -1;
+  }
+#elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  using namespace std; // For memcpy and strcmp.
+
+  if (af != BOOST_ASIO_OS_DEF(AF_INET) && af != BOOST_ASIO_OS_DEF(AF_INET6))
+  {
+    ec = boost::asio::error::address_family_not_supported;
+    return -1;
+  }
+
+  union
+  {
+    socket_addr_type base;
+    sockaddr_storage_type storage;
+    sockaddr_in4_type v4;
+    sockaddr_in6_type v6;
+  } address;
+  int address_length = sizeof(sockaddr_storage_type);
+#if defined(BOOST_NO_ANSI_APIS) || (defined(_MSC_VER) && (_MSC_VER >= 1800))
+  int num_wide_chars = strlen(src) + 1;
+  LPWSTR wide_buffer = (LPWSTR)_alloca(num_wide_chars * sizeof(WCHAR));
+  ::MultiByteToWideChar(CP_ACP, 0, src, -1, wide_buffer, num_wide_chars);
+  int result = error_wrapper(::WSAStringToAddressW(
+        wide_buffer, af, 0, &address.base, &address_length), ec);
+#else
+  int result = error_wrapper(::WSAStringToAddressA(
+        const_cast<char*>(src), af, 0, &address.base, &address_length), ec);
+#endif
+
+  if (af == BOOST_ASIO_OS_DEF(AF_INET))
+  {
+    if (result != socket_error_retval)
+    {
+      memcpy(dest, &address.v4.sin_addr, sizeof(in4_addr_type));
+      ec = boost::system::error_code();
+    }
+    else if (strcmp(src, "255.255.255.255") == 0)
+    {
+      static_cast<in4_addr_type*>(dest)->s_addr = INADDR_NONE;
+      ec = boost::system::error_code();
+    }
+  }
+  else // AF_INET6
+  {
+    if (result != socket_error_retval)
+    {
+      memcpy(dest, &address.v6.sin6_addr, sizeof(in6_addr_type));
+      if (scope_id)
+        *scope_id = address.v6.sin6_scope_id;
+      ec = boost::system::error_code();
+    }
+  }
+
+  // Windows may not set an error code on failure.
+  if (result == socket_error_retval && !ec)
+    ec = boost::asio::error::invalid_argument;
+
+  if (result != socket_error_retval)
+    ec = boost::system::error_code();
+
+  return result == socket_error_retval ? -1 : 1;
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  int result = error_wrapper(::inet_pton(af, src, dest), ec);
+  if (result <= 0 && !ec)
+    ec = boost::asio::error::invalid_argument;
+  if (result > 0 && af == BOOST_ASIO_OS_DEF(AF_INET6) && scope_id)
+  {
+    using namespace std; // For strchr and atoi.
+    *scope_id = 0;
+    if (const char* if_name = strchr(src, '%'))
+    {
+      in6_addr_type* ipv6_address = static_cast<in6_addr_type*>(dest);
+      bool is_link_local = ((ipv6_address->s6_addr[0] == 0xfe)
+          && ((ipv6_address->s6_addr[1] & 0xc0) == 0x80));
+      bool is_multicast_link_local = ((ipv6_address->s6_addr[0] == 0xff)
+          && ((ipv6_address->s6_addr[1] & 0x0f) == 0x02));
+      if (is_link_local || is_multicast_link_local)
+        *scope_id = if_nametoindex(if_name + 1);
+      if (*scope_id == 0)
+        *scope_id = atoi(if_name + 1);
+    }
+  }
+  return result;
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+}
+
+int gethostname(char* name, int namelen, boost::system::error_code& ec)
+{
+  clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  try
+  {
+    using namespace Windows::Foundation::Collections;
+    using namespace Windows::Networking;
+    using namespace Windows::Networking::Connectivity;
+    IVectorView<HostName^>^ hostnames = NetworkInformation::GetHostNames();
+    for (unsigned i = 0; i < hostnames->Size; ++i)
+    {
+      HostName^ hostname = hostnames->GetAt(i);
+      if (hostname->Type == HostNameType::DomainName)
+      {
+        std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
+        std::string raw_name = converter.to_bytes(hostname->RawName->Data());
+        if (namelen > 0 && raw_name.size() < static_cast<std::size_t>(namelen))
+        {
+          strcpy_s(name, namelen, raw_name.c_str());
+          return 0;
+        }
+      }
+    }
+    return -1;
+  }
+  catch (Platform::Exception^ e)
+  {
+    ec = boost::system::error_code(e->HResult,
+        boost::system::system_category());
+    return -1;
+  }
+#else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  int result = error_wrapper(::gethostname(name, namelen), ec);
+# if defined(BOOST_ASIO_WINDOWS)
+  if (result == 0)
+    ec = boost::system::error_code();
+# endif // defined(BOOST_ASIO_WINDOWS)
+  return result;
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+}
+
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#if !defined(BOOST_ASIO_HAS_GETADDRINFO)
+
+// The following functions are only needed for emulation of getaddrinfo and
+// getnameinfo.
+
+inline boost::system::error_code translate_netdb_error(int error)
+{
+  switch (error)
+  {
+  case 0:
+    return boost::system::error_code();
+  case HOST_NOT_FOUND:
+    return boost::asio::error::host_not_found;
+  case TRY_AGAIN:
+    return boost::asio::error::host_not_found_try_again;
+  case NO_RECOVERY:
+    return boost::asio::error::no_recovery;
+  case NO_DATA:
+    return boost::asio::error::no_data;
+  default:
+    BOOST_ASIO_ASSERT(false);
+    return boost::asio::error::invalid_argument;
+  }
+}
+
+inline hostent* gethostbyaddr(const char* addr, int length, int af,
+    hostent* result, char* buffer, int buflength, boost::system::error_code& ec)
+{
+  clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  (void)(buffer);
+  (void)(buflength);
+  hostent* retval = error_wrapper(::gethostbyaddr(addr, length, af), ec);
+  if (!retval)
+    return 0;
+  ec = boost::system::error_code();
+  *result = *retval;
+  return retval;
+#elif defined(__sun) || defined(__QNX__)
+  int error = 0;
+  hostent* retval = error_wrapper(::gethostbyaddr_r(addr, length, af, result,
+        buffer, buflength, &error), ec);
+  if (error)
+    ec = translate_netdb_error(error);
+  return retval;
+#elif defined(__MACH__) && defined(__APPLE__)
+  (void)(buffer);
+  (void)(buflength);
+  int error = 0;
+  hostent* retval = error_wrapper(::getipnodebyaddr(
+        addr, length, af, &error), ec);
+  if (error)
+    ec = translate_netdb_error(error);
+  if (!retval)
+    return 0;
+  *result = *retval;
+  return retval;
+#else
+  hostent* retval = 0;
+  int error = 0;
+  error_wrapper(::gethostbyaddr_r(addr, length, af, result, buffer,
+        buflength, &retval, &error), ec);
+  if (error)
+    ec = translate_netdb_error(error);
+  return retval;
+#endif
+}
+
+inline hostent* gethostbyname(const char* name, int af, struct hostent* result,
+    char* buffer, int buflength, int ai_flags, boost::system::error_code& ec)
+{
+  clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  (void)(buffer);
+  (void)(buflength);
+  (void)(ai_flags);
+  if (af != BOOST_ASIO_OS_DEF(AF_INET))
+  {
+    ec = boost::asio::error::address_family_not_supported;
+    return 0;
+  }
+  hostent* retval = error_wrapper(::gethostbyname(name), ec);
+  if (!retval)
+    return 0;
+  ec = boost::system::error_code();
+  *result = *retval;
+  return result;
+#elif defined(__sun) || defined(__QNX__)
+  (void)(ai_flags);
+  if (af != BOOST_ASIO_OS_DEF(AF_INET))
+  {
+    ec = boost::asio::error::address_family_not_supported;
+    return 0;
+  }
+  int error = 0;
+  hostent* retval = error_wrapper(::gethostbyname_r(name, result, buffer,
+        buflength, &error), ec);
+  if (error)
+    ec = translate_netdb_error(error);
+  return retval;
+#elif defined(__MACH__) && defined(__APPLE__)
+  (void)(buffer);
+  (void)(buflength);
+  int error = 0;
+  hostent* retval = error_wrapper(::getipnodebyname(
+        name, af, ai_flags, &error), ec);
+  if (error)
+    ec = translate_netdb_error(error);
+  if (!retval)
+    return 0;
+  *result = *retval;
+  return retval;
+#else
+  (void)(ai_flags);
+  if (af != BOOST_ASIO_OS_DEF(AF_INET))
+  {
+    ec = boost::asio::error::address_family_not_supported;
+    return 0;
+  }
+  hostent* retval = 0;
+  int error = 0;
+  error_wrapper(::gethostbyname_r(name, result,
+        buffer, buflength, &retval, &error), ec);
+  if (error)
+    ec = translate_netdb_error(error);
+  return retval;
+#endif
+}
+
+inline void freehostent(hostent* h)
+{
+#if defined(__MACH__) && defined(__APPLE__)
+  if (h)
+    ::freehostent(h);
+#else
+  (void)(h);
+#endif
+}
+
+// Emulation of getaddrinfo based on implementation in:
+// Stevens, W. R., UNIX Network Programming Vol. 1, 2nd Ed., Prentice-Hall 1998.
+
+struct gai_search
+{
+  const char* host;
+  int family;
+};
+
+inline int gai_nsearch(const char* host,
+    const addrinfo_type* hints, gai_search (&search)[2])
+{
+  int search_count = 0;
+  if (host == 0 || host[0] == '\0')
+  {
+    if (hints->ai_flags & AI_PASSIVE)
+    {
+      // No host and AI_PASSIVE implies wildcard bind.
+      switch (hints->ai_family)
+      {
+      case BOOST_ASIO_OS_DEF(AF_INET):
+        search[search_count].host = "0.0.0.0";
+        search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
+        ++search_count;
+        break;
+      case BOOST_ASIO_OS_DEF(AF_INET6):
+        search[search_count].host = "0::0";
+        search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
+        ++search_count;
+        break;
+      case BOOST_ASIO_OS_DEF(AF_UNSPEC):
+        search[search_count].host = "0::0";
+        search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
+        ++search_count;
+        search[search_count].host = "0.0.0.0";
+        search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
+        ++search_count;
+        break;
+      default:
+        break;
+      }
+    }
+    else
+    {
+      // No host and not AI_PASSIVE means connect to local host.
+      switch (hints->ai_family)
+      {
+      case BOOST_ASIO_OS_DEF(AF_INET):
+        search[search_count].host = "localhost";
+        search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
+        ++search_count;
+        break;
+      case BOOST_ASIO_OS_DEF(AF_INET6):
+        search[search_count].host = "localhost";
+        search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
+        ++search_count;
+        break;
+      case BOOST_ASIO_OS_DEF(AF_UNSPEC):
+        search[search_count].host = "localhost";
+        search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
+        ++search_count;
+        search[search_count].host = "localhost";
+        search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
+        ++search_count;
+        break;
+      default:
+        break;
+      }
+    }
+  }
+  else
+  {
+    // Host is specified.
+    switch (hints->ai_family)
+    {
+    case BOOST_ASIO_OS_DEF(AF_INET):
+      search[search_count].host = host;
+      search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
+      ++search_count;
+      break;
+    case BOOST_ASIO_OS_DEF(AF_INET6):
+      search[search_count].host = host;
+      search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
+      ++search_count;
+      break;
+    case BOOST_ASIO_OS_DEF(AF_UNSPEC):
+      search[search_count].host = host;
+      search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
+      ++search_count;
+      search[search_count].host = host;
+      search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
+      ++search_count;
+      break;
+    default:
+      break;
+    }
+  }
+  return search_count;
+}
+
+template <typename T>
+inline T* gai_alloc(std::size_t size = sizeof(T))
+{
+  using namespace std;
+  T* p = static_cast<T*>(::operator new(size, std::nothrow));
+  if (p)
+    memset(p, 0, size);
+  return p;
+}
+
+inline void gai_free(void* p)
+{
+  ::operator delete(p);
+}
+
+inline void gai_strcpy(char* target, const char* source, std::size_t max_size)
+{
+  using namespace std;
+#if defined(BOOST_ASIO_HAS_SECURE_RTL)
+  strcpy_s(target, max_size, source);
+#else // defined(BOOST_ASIO_HAS_SECURE_RTL)
+  *target = 0;
+  strncat(target, source, max_size);
+#endif // defined(BOOST_ASIO_HAS_SECURE_RTL)
+}
+
+enum { gai_clone_flag = 1 << 30 };
+
+inline int gai_aistruct(addrinfo_type*** next, const addrinfo_type* hints,
+    const void* addr, int family)
+{
+  using namespace std;
+
+  addrinfo_type* ai = gai_alloc<addrinfo_type>();
+  if (ai == 0)
+    return EAI_MEMORY;
+
+  ai->ai_next = 0;
+  **next = ai;
+  *next = &ai->ai_next;
+
+  ai->ai_canonname = 0;
+  ai->ai_socktype = hints->ai_socktype;
+  if (ai->ai_socktype == 0)
+    ai->ai_flags |= gai_clone_flag;
+  ai->ai_protocol = hints->ai_protocol;
+  ai->ai_family = family;
+
+  switch (ai->ai_family)
+  {
+  case BOOST_ASIO_OS_DEF(AF_INET):
+    {
+      sockaddr_in4_type* sinptr = gai_alloc<sockaddr_in4_type>();
+      if (sinptr == 0)
+        return EAI_MEMORY;
+      sinptr->sin_family = BOOST_ASIO_OS_DEF(AF_INET);
+      memcpy(&sinptr->sin_addr, addr, sizeof(in4_addr_type));
+      ai->ai_addr = reinterpret_cast<sockaddr*>(sinptr);
+      ai->ai_addrlen = sizeof(sockaddr_in4_type);
+      break;
+    }
+  case BOOST_ASIO_OS_DEF(AF_INET6):
+    {
+      sockaddr_in6_type* sin6ptr = gai_alloc<sockaddr_in6_type>();
+      if (sin6ptr == 0)
+        return EAI_MEMORY;
+      sin6ptr->sin6_family = BOOST_ASIO_OS_DEF(AF_INET6);
+      memcpy(&sin6ptr->sin6_addr, addr, sizeof(in6_addr_type));
+      ai->ai_addr = reinterpret_cast<sockaddr*>(sin6ptr);
+      ai->ai_addrlen = sizeof(sockaddr_in6_type);
+      break;
+    }
+  default:
+    break;
+  }
+
+  return 0;
+}
+
+inline addrinfo_type* gai_clone(addrinfo_type* ai)
+{
+  using namespace std;
+
+  addrinfo_type* new_ai = gai_alloc<addrinfo_type>();
+  if (new_ai == 0)
+    return new_ai;
+
+  new_ai->ai_next = ai->ai_next;
+  ai->ai_next = new_ai;
+
+  new_ai->ai_flags = 0;
+  new_ai->ai_family = ai->ai_family;
+  new_ai->ai_socktype = ai->ai_socktype;
+  new_ai->ai_protocol = ai->ai_protocol;
+  new_ai->ai_canonname = 0;
+  new_ai->ai_addrlen = ai->ai_addrlen;
+  new_ai->ai_addr = gai_alloc<sockaddr>(ai->ai_addrlen);
+  memcpy(new_ai->ai_addr, ai->ai_addr, ai->ai_addrlen);
+
+  return new_ai;
+}
+
+inline int gai_port(addrinfo_type* aihead, int port, int socktype)
+{
+  int num_found = 0;
+
+  for (addrinfo_type* ai = aihead; ai; ai = ai->ai_next)
+  {
+    if (ai->ai_flags & gai_clone_flag)
+    {
+      if (ai->ai_socktype != 0)
+      {
+        ai = gai_clone(ai);
+        if (ai == 0)
+          return -1;
+        // ai now points to newly cloned entry.
+      }
+    }
+    else if (ai->ai_socktype != socktype)
+    {
+      // Ignore if mismatch on socket type.
+      continue;
+    }
+
+    ai->ai_socktype = socktype;
+
+    switch (ai->ai_family)
+    {
+    case BOOST_ASIO_OS_DEF(AF_INET):
+      {
+        sockaddr_in4_type* sinptr =
+          reinterpret_cast<sockaddr_in4_type*>(ai->ai_addr);
+        sinptr->sin_port = port;
+        ++num_found;
+        break;
+      }
+    case BOOST_ASIO_OS_DEF(AF_INET6):
+      {
+        sockaddr_in6_type* sin6ptr =
+          reinterpret_cast<sockaddr_in6_type*>(ai->ai_addr);
+        sin6ptr->sin6_port = port;
+        ++num_found;
+        break;
+      }
+    default:
+      break;
+    }
+  }
+
+  return num_found;
+}
+
+inline int gai_serv(addrinfo_type* aihead,
+    const addrinfo_type* hints, const char* serv)
+{
+  using namespace std;
+
+  int num_found = 0;
+
+  if (
+#if defined(AI_NUMERICSERV)
+      (hints->ai_flags & AI_NUMERICSERV) ||
+#endif
+      isdigit(static_cast<unsigned char>(serv[0])))
+  {
+    int port = htons(atoi(serv));
+    if (hints->ai_socktype)
+    {
+      // Caller specifies socket type.
+      int rc = gai_port(aihead, port, hints->ai_socktype);
+      if (rc < 0)
+        return EAI_MEMORY;
+      num_found += rc;
+    }
+    else
+    {
+      // Caller does not specify socket type.
+      int rc = gai_port(aihead, port, SOCK_STREAM);
+      if (rc < 0)
+        return EAI_MEMORY;
+      num_found += rc;
+      rc = gai_port(aihead, port, SOCK_DGRAM);
+      if (rc < 0)
+        return EAI_MEMORY;
+      num_found += rc;
+    }
+  }
+  else
+  {
+    // Try service name with TCP first, then UDP.
+    if (hints->ai_socktype == 0 || hints->ai_socktype == SOCK_STREAM)
+    {
+      servent* sptr = getservbyname(serv, "tcp");
+      if (sptr != 0)
+      {
+        int rc = gai_port(aihead, sptr->s_port, SOCK_STREAM);
+        if (rc < 0)
+          return EAI_MEMORY;
+        num_found += rc;
+      }
+    }
+    if (hints->ai_socktype == 0 || hints->ai_socktype == SOCK_DGRAM)
+    {
+      servent* sptr = getservbyname(serv, "udp");
+      if (sptr != 0)
+      {
+        int rc = gai_port(aihead, sptr->s_port, SOCK_DGRAM);
+        if (rc < 0)
+          return EAI_MEMORY;
+        num_found += rc;
+      }
+    }
+  }
+
+  if (num_found == 0)
+  {
+    if (hints->ai_socktype == 0)
+    {
+      // All calls to getservbyname() failed.
+      return EAI_NONAME;
+    }
+    else
+    {
+      // Service not supported for socket type.
+      return EAI_SERVICE;
+    }
+  }
+
+  return 0;
+}
+
+inline int gai_echeck(const char* host, const char* service,
+    int flags, int family, int socktype, int protocol)
+{
+  (void)(flags);
+  (void)(protocol);
+
+  // Host or service must be specified.
+  if (host == 0 || host[0] == '\0')
+    if (service == 0 || service[0] == '\0')
+      return EAI_NONAME;
+
+  // Check combination of family and socket type.
+  switch (family)
+  {
+  case BOOST_ASIO_OS_DEF(AF_UNSPEC):
+    break;
+  case BOOST_ASIO_OS_DEF(AF_INET):
+  case BOOST_ASIO_OS_DEF(AF_INET6):
+    if (service != 0 && service[0] != '\0')
+      if (socktype != 0 && socktype != SOCK_STREAM && socktype != SOCK_DGRAM)
+        return EAI_SOCKTYPE;
+    break;
+  default:
+    return EAI_FAMILY;
+  }
+
+  return 0;
+}
+
+inline void freeaddrinfo_emulation(addrinfo_type* aihead)
+{
+  addrinfo_type* ai = aihead;
+  while (ai)
+  {
+    gai_free(ai->ai_addr);
+    gai_free(ai->ai_canonname);
+    addrinfo_type* ainext = ai->ai_next;
+    gai_free(ai);
+    ai = ainext;
+  }
+}
+
+inline int getaddrinfo_emulation(const char* host, const char* service,
+    const addrinfo_type* hintsp, addrinfo_type** result)
+{
+  // Set up linked list of addrinfo structures.
+  addrinfo_type* aihead = 0;
+  addrinfo_type** ainext = &aihead;
+  char* canon = 0;
+
+  // Supply default hints if not specified by caller.
+  addrinfo_type hints = addrinfo_type();
+  hints.ai_family = BOOST_ASIO_OS_DEF(AF_UNSPEC);
+  if (hintsp)
+    hints = *hintsp;
+
+  // If the resolution is not specifically for AF_INET6, remove the AI_V4MAPPED
+  // and AI_ALL flags.
+#if defined(AI_V4MAPPED)
+  if (hints.ai_family != BOOST_ASIO_OS_DEF(AF_INET6))
+    hints.ai_flags &= ~AI_V4MAPPED;
+#endif
+#if defined(AI_ALL)
+  if (hints.ai_family != BOOST_ASIO_OS_DEF(AF_INET6))
+    hints.ai_flags &= ~AI_ALL;
+#endif
+
+  // Basic error checking.
+  int rc = gai_echeck(host, service, hints.ai_flags, hints.ai_family,
+      hints.ai_socktype, hints.ai_protocol);
+  if (rc != 0)
+  {
+    freeaddrinfo_emulation(aihead);
+    return rc;
+  }
+
+  gai_search search[2];
+  int search_count = gai_nsearch(host, &hints, search);
+  for (gai_search* sptr = search; sptr < search + search_count; ++sptr)
+  {
+    // Check for IPv4 dotted decimal string.
+    in4_addr_type inaddr;
+    boost::system::error_code ec;
+    if (socket_ops::inet_pton(BOOST_ASIO_OS_DEF(AF_INET),
+          sptr->host, &inaddr, 0, ec) == 1)
+    {
+      if (hints.ai_family != BOOST_ASIO_OS_DEF(AF_UNSPEC)
+          && hints.ai_family != BOOST_ASIO_OS_DEF(AF_INET))
+      {
+        freeaddrinfo_emulation(aihead);
+        gai_free(canon);
+        return EAI_FAMILY;
+      }
+      if (sptr->family == BOOST_ASIO_OS_DEF(AF_INET))
+      {
+        rc = gai_aistruct(&ainext, &hints, &inaddr, BOOST_ASIO_OS_DEF(AF_INET));
+        if (rc != 0)
+        {
+          freeaddrinfo_emulation(aihead);
+          gai_free(canon);
+          return rc;
+        }
+      }
+      continue;
+    }
+
+    // Check for IPv6 hex string.
+    in6_addr_type in6addr;
+    if (socket_ops::inet_pton(BOOST_ASIO_OS_DEF(AF_INET6),
+          sptr->host, &in6addr, 0, ec) == 1)
+    {
+      if (hints.ai_family != BOOST_ASIO_OS_DEF(AF_UNSPEC)
+          && hints.ai_family != BOOST_ASIO_OS_DEF(AF_INET6))
+      {
+        freeaddrinfo_emulation(aihead);
+        gai_free(canon);
+        return EAI_FAMILY;
+      }
+      if (sptr->family == BOOST_ASIO_OS_DEF(AF_INET6))
+      {
+        rc = gai_aistruct(&ainext, &hints, &in6addr,
+            BOOST_ASIO_OS_DEF(AF_INET6));
+        if (rc != 0)
+        {
+          freeaddrinfo_emulation(aihead);
+          gai_free(canon);
+          return rc;
+        }
+      }
+      continue;
+    }
+
+    // Look up hostname.
+    hostent hent;
+    char hbuf[8192] = "";
+    hostent* hptr = socket_ops::gethostbyname(sptr->host,
+        sptr->family, &hent, hbuf, sizeof(hbuf), hints.ai_flags, ec);
+    if (hptr == 0)
+    {
+      if (search_count == 2)
+      {
+        // Failure is OK if there are multiple searches.
+        continue;
+      }
+      freeaddrinfo_emulation(aihead);
+      gai_free(canon);
+      if (ec == boost::asio::error::host_not_found)
+        return EAI_NONAME;
+      if (ec == boost::asio::error::host_not_found_try_again)
+        return EAI_AGAIN;
+      if (ec == boost::asio::error::no_recovery)
+        return EAI_FAIL;
+      if (ec == boost::asio::error::no_data)
+        return EAI_NONAME;
+      return EAI_NONAME;
+    }
+
+    // Check for address family mismatch if one was specified.
+    if (hints.ai_family != BOOST_ASIO_OS_DEF(AF_UNSPEC)
+        && hints.ai_family != hptr->h_addrtype)
+    {
+      freeaddrinfo_emulation(aihead);
+      gai_free(canon);
+      socket_ops::freehostent(hptr);
+      return EAI_FAMILY;
+    }
+
+    // Save canonical name first time.
+    if (host != 0 && host[0] != '\0' && hptr->h_name && hptr->h_name[0]
+        && (hints.ai_flags & AI_CANONNAME) && canon == 0)
+    {
+      std::size_t canon_len = strlen(hptr->h_name) + 1;
+      canon = gai_alloc<char>(canon_len);
+      if (canon == 0)
+      {
+        freeaddrinfo_emulation(aihead);
+        socket_ops::freehostent(hptr);
+        return EAI_MEMORY;
+      }
+      gai_strcpy(canon, hptr->h_name, canon_len);
+    }
+
+    // Create an addrinfo structure for each returned address.
+    for (char** ap = hptr->h_addr_list; *ap; ++ap)
+    {
+      rc = gai_aistruct(&ainext, &hints, *ap, hptr->h_addrtype);
+      if (rc != 0)
+      {
+        freeaddrinfo_emulation(aihead);
+        gai_free(canon);
+        socket_ops::freehostent(hptr);
+        return EAI_FAMILY;
+      }
+    }
+
+    socket_ops::freehostent(hptr);
+  }
+
+  // Check if we found anything.
+  if (aihead == 0)
+  {
+    gai_free(canon);
+    return EAI_NONAME;
+  }
+
+  // Return canonical name in first entry.
+  if (host != 0 && host[0] != '\0' && (hints.ai_flags & AI_CANONNAME))
+  {
+    if (canon)
+    {
+      aihead->ai_canonname = canon;
+      canon = 0;
+    }
+    else
+    {
+      std::size_t canonname_len = strlen(search[0].host) + 1;
+      aihead->ai_canonname = gai_alloc<char>(canonname_len);
+      if (aihead->ai_canonname == 0)
+      {
+        freeaddrinfo_emulation(aihead);
+        return EAI_MEMORY;
+      }
+      gai_strcpy(aihead->ai_canonname, search[0].host, canonname_len);
+    }
+  }
+  gai_free(canon);
+
+  // Process the service name.
+  if (service != 0 && service[0] != '\0')
+  {
+    rc = gai_serv(aihead, &hints, service);
+    if (rc != 0)
+    {
+      freeaddrinfo_emulation(aihead);
+      return rc;
+    }
+  }
+
+  // Return result to caller.
+  *result = aihead;
+  return 0;
+}
+
+inline boost::system::error_code getnameinfo_emulation(
+    const socket_addr_type* sa, std::size_t salen, char* host,
+    std::size_t hostlen, char* serv, std::size_t servlen, int flags,
+    boost::system::error_code& ec)
+{
+  using namespace std;
+
+  const char* addr;
+  size_t addr_len;
+  unsigned short port;
+  switch (sa->sa_family)
+  {
+  case BOOST_ASIO_OS_DEF(AF_INET):
+    if (salen != sizeof(sockaddr_in4_type))
+    {
+      return ec = boost::asio::error::invalid_argument;
+    }
+    addr = reinterpret_cast<const char*>(
+        &reinterpret_cast<const sockaddr_in4_type*>(sa)->sin_addr);
+    addr_len = sizeof(in4_addr_type);
+    port = reinterpret_cast<const sockaddr_in4_type*>(sa)->sin_port;
+    break;
+  case BOOST_ASIO_OS_DEF(AF_INET6):
+    if (salen != sizeof(sockaddr_in6_type))
+    {
+      return ec = boost::asio::error::invalid_argument;
+    }
+    addr = reinterpret_cast<const char*>(
+        &reinterpret_cast<const sockaddr_in6_type*>(sa)->sin6_addr);
+    addr_len = sizeof(in6_addr_type);
+    port = reinterpret_cast<const sockaddr_in6_type*>(sa)->sin6_port;
+    break;
+  default:
+    return ec = boost::asio::error::address_family_not_supported;
+  }
+
+  if (host && hostlen > 0)
+  {
+    if (flags & NI_NUMERICHOST)
+    {
+      if (socket_ops::inet_ntop(sa->sa_family, addr, host, hostlen, 0, ec) == 0)
+      {
+        return ec;
+      }
+    }
+    else
+    {
+      hostent hent;
+      char hbuf[8192] = "";
+      hostent* hptr = socket_ops::gethostbyaddr(addr,
+          static_cast<int>(addr_len), sa->sa_family,
+          &hent, hbuf, sizeof(hbuf), ec);
+      if (hptr && hptr->h_name && hptr->h_name[0] != '\0')
+      {
+        if (flags & NI_NOFQDN)
+        {
+          char* dot = strchr(hptr->h_name, '.');
+          if (dot)
+          {
+            *dot = 0;
+          }
+        }
+        gai_strcpy(host, hptr->h_name, hostlen);
+        socket_ops::freehostent(hptr);
+      }
+      else
+      {
+        socket_ops::freehostent(hptr);
+        if (flags & NI_NAMEREQD)
+        {
+          return ec = boost::asio::error::host_not_found;
+        }
+        if (socket_ops::inet_ntop(sa->sa_family,
+              addr, host, hostlen, 0, ec) == 0)
+        {
+          return ec;
+        }
+      }
+    }
+  }
+
+  if (serv && servlen > 0)
+  {
+    if (flags & NI_NUMERICSERV)
+    {
+      if (servlen < 6)
+      {
+        return ec = boost::asio::error::no_buffer_space;
+      }
+#if defined(BOOST_ASIO_HAS_SECURE_RTL)
+      sprintf_s(serv, servlen, "%u", ntohs(port));
+#else // defined(BOOST_ASIO_HAS_SECURE_RTL)
+      sprintf(serv, "%u", ntohs(port));
+#endif // defined(BOOST_ASIO_HAS_SECURE_RTL)
+    }
+    else
+    {
+#if defined(BOOST_ASIO_HAS_PTHREADS)
+      static ::pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+      ::pthread_mutex_lock(&mutex);
+#endif // defined(BOOST_ASIO_HAS_PTHREADS)
+      servent* sptr = ::getservbyport(port, (flags & NI_DGRAM) ? "udp" : 0);
+      if (sptr && sptr->s_name && sptr->s_name[0] != '\0')
+      {
+        gai_strcpy(serv, sptr->s_name, servlen);
+      }
+      else
+      {
+        if (servlen < 6)
+        {
+          return ec = boost::asio::error::no_buffer_space;
+        }
+#if defined(BOOST_ASIO_HAS_SECURE_RTL)
+        sprintf_s(serv, servlen, "%u", ntohs(port));
+#else // defined(BOOST_ASIO_HAS_SECURE_RTL)
+        sprintf(serv, "%u", ntohs(port));
+#endif // defined(BOOST_ASIO_HAS_SECURE_RTL)
+      }
+#if defined(BOOST_ASIO_HAS_PTHREADS)
+      ::pthread_mutex_unlock(&mutex);
+#endif // defined(BOOST_ASIO_HAS_PTHREADS)
+    }
+  }
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+#endif // !defined(BOOST_ASIO_HAS_GETADDRINFO)
+
+inline boost::system::error_code translate_addrinfo_error(int error)
+{
+  switch (error)
+  {
+  case 0:
+    return boost::system::error_code();
+  case EAI_AGAIN:
+    return boost::asio::error::host_not_found_try_again;
+  case EAI_BADFLAGS:
+    return boost::asio::error::invalid_argument;
+  case EAI_FAIL:
+    return boost::asio::error::no_recovery;
+  case EAI_FAMILY:
+    return boost::asio::error::address_family_not_supported;
+  case EAI_MEMORY:
+    return boost::asio::error::no_memory;
+  case EAI_NONAME:
+#if defined(EAI_ADDRFAMILY)
+  case EAI_ADDRFAMILY:
+#endif
+#if defined(EAI_NODATA) && (EAI_NODATA != EAI_NONAME)
+  case EAI_NODATA:
+#endif
+    return boost::asio::error::host_not_found;
+  case EAI_SERVICE:
+    return boost::asio::error::service_not_found;
+  case EAI_SOCKTYPE:
+    return boost::asio::error::socket_type_not_supported;
+  default: // Possibly the non-portable EAI_SYSTEM.
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+    return boost::system::error_code(
+        WSAGetLastError(), boost::asio::error::get_system_category());
+#else
+    return boost::system::error_code(
+        errno, boost::asio::error::get_system_category());
+#endif
+  }
+}
+
+boost::system::error_code getaddrinfo(const char* host,
+    const char* service, const addrinfo_type& hints,
+    addrinfo_type** result, boost::system::error_code& ec)
+{
+  host = (host && *host) ? host : 0;
+  service = (service && *service) ? service : 0;
+  clear_last_error();
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+# if defined(BOOST_ASIO_HAS_GETADDRINFO)
+  // Building for Windows XP, Windows Server 2003, or later.
+  int error = ::getaddrinfo(host, service, &hints, result);
+  return ec = translate_addrinfo_error(error);
+# else
+  // Building for Windows 2000 or earlier.
+  typedef int (WSAAPI *gai_t)(const char*,
+      const char*, const addrinfo_type*, addrinfo_type**);
+  if (HMODULE winsock_module = ::GetModuleHandleA("ws2_32"))
+  {
+    if (gai_t gai = (gai_t)::GetProcAddress(winsock_module, "getaddrinfo"))
+    {
+      int error = gai(host, service, &hints, result);
+      return ec = translate_addrinfo_error(error);
+    }
+  }
+  int error = getaddrinfo_emulation(host, service, &hints, result);
+  return ec = translate_addrinfo_error(error);
+# endif
+#elif !defined(BOOST_ASIO_HAS_GETADDRINFO)
+  int error = getaddrinfo_emulation(host, service, &hints, result);
+  return ec = translate_addrinfo_error(error);
+#else
+  int error = ::getaddrinfo(host, service, &hints, result);
+  return ec = translate_addrinfo_error(error);
+#endif
+}
+
+boost::system::error_code background_getaddrinfo(
+    const weak_cancel_token_type& cancel_token, const char* host,
+    const char* service, const addrinfo_type& hints,
+    addrinfo_type** result, boost::system::error_code& ec)
+{
+  if (cancel_token.expired())
+    ec = boost::asio::error::operation_aborted;
+  else
+    socket_ops::getaddrinfo(host, service, hints, result, ec);
+  return ec;
+}
+
+void freeaddrinfo(addrinfo_type* ai)
+{
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+# if defined(BOOST_ASIO_HAS_GETADDRINFO)
+  // Building for Windows XP, Windows Server 2003, or later.
+  ::freeaddrinfo(ai);
+# else
+  // Building for Windows 2000 or earlier.
+  typedef int (WSAAPI *fai_t)(addrinfo_type*);
+  if (HMODULE winsock_module = ::GetModuleHandleA("ws2_32"))
+  {
+    if (fai_t fai = (fai_t)::GetProcAddress(winsock_module, "freeaddrinfo"))
+    {
+      fai(ai);
+      return;
+    }
+  }
+  freeaddrinfo_emulation(ai);
+# endif
+#elif !defined(BOOST_ASIO_HAS_GETADDRINFO)
+  freeaddrinfo_emulation(ai);
+#else
+  ::freeaddrinfo(ai);
+#endif
+}
+
+boost::system::error_code getnameinfo(const socket_addr_type* addr,
+    std::size_t addrlen, char* host, std::size_t hostlen,
+    char* serv, std::size_t servlen, int flags, boost::system::error_code& ec)
+{
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+# if defined(BOOST_ASIO_HAS_GETADDRINFO)
+  // Building for Windows XP, Windows Server 2003, or later.
+  clear_last_error();
+  int error = ::getnameinfo(addr, static_cast<socklen_t>(addrlen),
+      host, static_cast<DWORD>(hostlen),
+      serv, static_cast<DWORD>(servlen), flags);
+  return ec = translate_addrinfo_error(error);
+# else
+  // Building for Windows 2000 or earlier.
+  typedef int (WSAAPI *gni_t)(const socket_addr_type*,
+      int, char*, DWORD, char*, DWORD, int);
+  if (HMODULE winsock_module = ::GetModuleHandleA("ws2_32"))
+  {
+    if (gni_t gni = (gni_t)::GetProcAddress(winsock_module, "getnameinfo"))
+    {
+      clear_last_error();
+      int error = gni(addr, static_cast<int>(addrlen),
+          host, static_cast<DWORD>(hostlen),
+          serv, static_cast<DWORD>(servlen), flags);
+      return ec = translate_addrinfo_error(error);
+    }
+  }
+  clear_last_error();
+  return getnameinfo_emulation(addr, addrlen,
+      host, hostlen, serv, servlen, flags, ec);
+# endif
+#elif !defined(BOOST_ASIO_HAS_GETADDRINFO)
+  using namespace std; // For memcpy.
+  sockaddr_storage_type tmp_addr;
+  memcpy(&tmp_addr, addr, addrlen);
+  tmp_addr.ss_len = addrlen;
+  addr = reinterpret_cast<socket_addr_type*>(&tmp_addr);
+  clear_last_error();
+  return getnameinfo_emulation(addr, addrlen,
+      host, hostlen, serv, servlen, flags, ec);
+#else
+  clear_last_error();
+  int error = ::getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
+  return ec = translate_addrinfo_error(error);
+#endif
+}
+
+boost::system::error_code sync_getnameinfo(
+    const socket_addr_type* addr, std::size_t addrlen,
+    char* host, std::size_t hostlen, char* serv,
+    std::size_t servlen, int sock_type, boost::system::error_code& ec)
+{
+  // First try resolving with the service name. If that fails try resolving
+  // but allow the service to be returned as a number.
+  int flags = (sock_type == SOCK_DGRAM) ? NI_DGRAM : 0;
+  socket_ops::getnameinfo(addr, addrlen, host,
+      hostlen, serv, servlen, flags, ec);
+  if (ec)
+  {
+    socket_ops::getnameinfo(addr, addrlen, host, hostlen,
+        serv, servlen, flags | NI_NUMERICSERV, ec);
+  }
+
+  return ec;
+}
+
+boost::system::error_code background_getnameinfo(
+    const weak_cancel_token_type& cancel_token,
+    const socket_addr_type* addr, std::size_t addrlen,
+    char* host, std::size_t hostlen, char* serv,
+    std::size_t servlen, int sock_type, boost::system::error_code& ec)
+{
+  if (cancel_token.expired())
+  {
+    ec = boost::asio::error::operation_aborted;
+  }
+  else
+  {
+    // First try resolving with the service name. If that fails try resolving
+    // but allow the service to be returned as a number.
+    int flags = (sock_type == SOCK_DGRAM) ? NI_DGRAM : 0;
+    socket_ops::getnameinfo(addr, addrlen, host,
+        hostlen, serv, servlen, flags, ec);
+    if (ec)
+    {
+      socket_ops::getnameinfo(addr, addrlen, host, hostlen,
+          serv, servlen, flags | NI_NUMERICSERV, ec);
+    }
+  }
+
+  return ec;
+}
+
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+u_long_type network_to_host_long(u_long_type value)
+{
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  unsigned char* value_p = reinterpret_cast<unsigned char*>(&value);
+  u_long_type result = (static_cast<u_long_type>(value_p[0]) << 24)
+    | (static_cast<u_long_type>(value_p[1]) << 16)
+    | (static_cast<u_long_type>(value_p[2]) << 8)
+    | static_cast<u_long_type>(value_p[3]);
+  return result;
+#else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  return ntohl(value);
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+}
+
+u_long_type host_to_network_long(u_long_type value)
+{
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  u_long_type result;
+  unsigned char* result_p = reinterpret_cast<unsigned char*>(&result);
+  result_p[0] = static_cast<unsigned char>((value >> 24) & 0xFF);
+  result_p[1] = static_cast<unsigned char>((value >> 16) & 0xFF);
+  result_p[2] = static_cast<unsigned char>((value >> 8) & 0xFF);
+  result_p[3] = static_cast<unsigned char>(value & 0xFF);
+  return result;
+#else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  return htonl(value);
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+}
+
+u_short_type network_to_host_short(u_short_type value)
+{
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  unsigned char* value_p = reinterpret_cast<unsigned char*>(&value);
+  u_short_type result = (static_cast<u_long_type>(value_p[0]) << 8)
+    | static_cast<u_long_type>(value_p[1]);
+  return result;
+#else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  return ntohs(value);
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+}
+
+u_short_type host_to_network_short(u_short_type value)
+{
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  u_long_type result;
+  unsigned char* result_p = reinterpret_cast<unsigned char*>(&result);
+  result_p[0] = static_cast<unsigned char>((value >> 8) & 0xFF);
+  result_p[1] = static_cast<unsigned char>(value & 0xFF);
+  return result;
+#else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  return htons(value);
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+}
+
+} // namespace socket_ops
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_SOCKET_OPS_IPP
diff --git a/ext/patches/boost/asio/detail/impl/socket_select_interrupter.ipp b/ext/patches/boost/asio/detail/impl/socket_select_interrupter.ipp
new file mode 100644
index 0000000..4ea71c7
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/socket_select_interrupter.ipp
@@ -0,0 +1,177 @@
+//
+// detail/impl/socket_select_interrupter.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_SOCKET_SELECT_INTERRUPTER_IPP
+#define BOOST_ASIO_DETAIL_IMPL_SOCKET_SELECT_INTERRUPTER_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#if defined(BOOST_ASIO_WINDOWS) \
+  || defined(__CYGWIN__) \
+  || defined(__SYMBIAN32__)
+
+#include <cstdlib>
+#include <boost/asio/detail/socket_holder.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/socket_select_interrupter.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+socket_select_interrupter::socket_select_interrupter()
+{
+  open_descriptors();
+}
+
+void socket_select_interrupter::open_descriptors()
+{
+  boost::system::error_code ec;
+  socket_holder acceptor(socket_ops::socket(
+        AF_INET, SOCK_STREAM, IPPROTO_TCP, ec));
+  if (acceptor.get() == invalid_socket)
+    boost::asio::detail::throw_error(ec, "socket_select_interrupter");
+
+  int opt = 1;
+  socket_ops::state_type acceptor_state = 0;
+  socket_ops::setsockopt(acceptor.get(), acceptor_state,
+      SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt), ec);
+
+  using namespace std; // For memset.
+  sockaddr_in4_type addr;
+  std::size_t addr_len = sizeof(addr);
+  memset(&addr, 0, sizeof(addr));
+  addr.sin_family = AF_INET;
+  addr.sin_addr.s_addr = socket_ops::host_to_network_long(INADDR_LOOPBACK);
+  addr.sin_port = 0;
+  if (socket_ops::bind(acceptor.get(), (const socket_addr_type*)&addr,
+        addr_len, ec) == socket_error_retval)
+    boost::asio::detail::throw_error(ec, "socket_select_interrupter");
+
+  if (socket_ops::getsockname(acceptor.get(), (socket_addr_type*)&addr,
+        &addr_len, ec) == socket_error_retval)
+    boost::asio::detail::throw_error(ec, "socket_select_interrupter");
+
+  // Some broken firewalls on Windows will intermittently cause getsockname to
+  // return 0.0.0.0 when the socket is actually bound to 127.0.0.1. We
+  // explicitly specify the target address here to work around this problem.
+  addr.sin_addr.s_addr = socket_ops::host_to_network_long(INADDR_LOOPBACK);
+
+  if (socket_ops::listen(acceptor.get(),
+        SOMAXCONN, ec) == socket_error_retval)
+    boost::asio::detail::throw_error(ec, "socket_select_interrupter");
+
+  socket_holder client(socket_ops::socket(
+        AF_INET, SOCK_STREAM, IPPROTO_TCP, ec));
+  if (client.get() == invalid_socket)
+    boost::asio::detail::throw_error(ec, "socket_select_interrupter");
+
+  if (socket_ops::connect(client.get(), (const socket_addr_type*)&addr,
+        addr_len, ec) == socket_error_retval)
+    boost::asio::detail::throw_error(ec, "socket_select_interrupter");
+
+  socket_holder server(socket_ops::accept(acceptor.get(), 0, 0, ec));
+  if (server.get() == invalid_socket)
+    boost::asio::detail::throw_error(ec, "socket_select_interrupter");
+  
+  ioctl_arg_type non_blocking = 1;
+  socket_ops::state_type client_state = 0;
+  if (socket_ops::ioctl(client.get(), client_state,
+        FIONBIO, &non_blocking, ec))
+    boost::asio::detail::throw_error(ec, "socket_select_interrupter");
+
+  opt = 1;
+  socket_ops::setsockopt(client.get(), client_state,
+      IPPROTO_TCP, TCP_NODELAY, &opt, sizeof(opt), ec);
+
+  non_blocking = 1;
+  socket_ops::state_type server_state = 0;
+  if (socket_ops::ioctl(server.get(), server_state,
+        FIONBIO, &non_blocking, ec))
+    boost::asio::detail::throw_error(ec, "socket_select_interrupter");
+
+  opt = 1;
+  socket_ops::setsockopt(server.get(), server_state,
+      IPPROTO_TCP, TCP_NODELAY, &opt, sizeof(opt), ec);
+
+  read_descriptor_ = server.release();
+  write_descriptor_ = client.release();
+}
+
+socket_select_interrupter::~socket_select_interrupter()
+{
+  close_descriptors();
+}
+
+void socket_select_interrupter::close_descriptors()
+{
+  boost::system::error_code ec;
+  socket_ops::state_type state = socket_ops::internal_non_blocking;
+  if (read_descriptor_ != invalid_socket)
+    socket_ops::close(read_descriptor_, state, true, ec);
+  if (write_descriptor_ != invalid_socket)
+    socket_ops::close(write_descriptor_, state, true, ec);
+}
+
+void socket_select_interrupter::recreate()
+{
+  close_descriptors();
+
+  write_descriptor_ = invalid_socket;
+  read_descriptor_ = invalid_socket;
+
+  open_descriptors();
+}
+
+void socket_select_interrupter::interrupt()
+{
+  char byte = 0;
+  socket_ops::buf b;
+  socket_ops::init_buf(b, &byte, 1);
+  boost::system::error_code ec;
+  socket_ops::send(write_descriptor_, &b, 1, 0, ec);
+}
+
+bool socket_select_interrupter::reset()
+{
+  char data[1024];
+  socket_ops::buf b;
+  socket_ops::init_buf(b, data, sizeof(data));
+  boost::system::error_code ec;
+  int bytes_read = socket_ops::recv(read_descriptor_, &b, 1, 0, ec);
+  bool was_interrupted = (bytes_read > 0);
+  while (bytes_read == sizeof(data))
+    bytes_read = socket_ops::recv(read_descriptor_, &b, 1, 0, ec);
+  return was_interrupted;
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS)
+       // || defined(__CYGWIN__)
+       // || defined(__SYMBIAN32__)
+
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_SOCKET_SELECT_INTERRUPTER_IPP
diff --git a/ext/patches/boost/asio/detail/impl/strand_service.hpp b/ext/patches/boost/asio/detail/impl/strand_service.hpp
new file mode 100644
index 0000000..6e15042
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/strand_service.hpp
@@ -0,0 +1,120 @@
+//
+// detail/impl/strand_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_STRAND_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_IMPL_STRAND_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/call_stack.hpp>
+#include <boost/asio/detail/completion_handler.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+inline strand_service::strand_impl::strand_impl()
+  : operation(&strand_service::do_complete),
+    locked_(false)
+{
+}
+
+struct strand_service::on_dispatch_exit
+{
+  io_service_impl* io_service_;
+  strand_impl* impl_;
+
+  ~on_dispatch_exit()
+  {
+    impl_->mutex_.lock();
+    impl_->ready_queue_.push(impl_->waiting_queue_);
+    bool more_handlers = impl_->locked_ = !impl_->ready_queue_.empty();
+    impl_->mutex_.unlock();
+
+    if (more_handlers)
+      io_service_->post_immediate_completion(impl_, false);
+  }
+};
+
+template <typename Handler>
+void strand_service::dispatch(strand_service::implementation_type& impl,
+    Handler& handler)
+{
+  // If we are already in the strand then the handler can run immediately.
+  if (call_stack<strand_impl>::contains(impl))
+  {
+    fenced_block b(fenced_block::full);
+    boost_asio_handler_invoke_helpers::invoke(handler, handler);
+    return;
+  }
+
+  // Allocate and construct an operation to wrap the handler.
+  typedef completion_handler<Handler> op;
+  typename op::ptr p = { boost::asio::detail::addressof(handler),
+    boost_asio_handler_alloc_helpers::allocate(
+      sizeof(op), handler), 0 };
+  p.p = new (p.v) op(handler);
+
+  BOOST_ASIO_HANDLER_CREATION((p.p, "strand", impl, "dispatch"));
+
+  bool dispatch_immediately = do_dispatch(impl, p.p);
+  operation* o = p.p;
+  p.v = p.p = 0;
+
+  if (dispatch_immediately)
+  {
+    // Indicate that this strand is executing on the current thread.
+    call_stack<strand_impl>::context ctx(impl);
+
+    // Ensure the next handler, if any, is scheduled on block exit.
+    on_dispatch_exit on_exit = { &io_service_, impl };
+    (void)on_exit;
+
+    completion_handler<Handler>::do_complete(
+        &io_service_, o, boost::system::error_code(), 0);
+  }
+}
+
+// Request the io_service to invoke the given handler and return immediately.
+template <typename Handler>
+void strand_service::post(strand_service::implementation_type& impl,
+    Handler& handler)
+{
+  bool is_continuation =
+    boost_asio_handler_cont_helpers::is_continuation(handler);
+
+  // Allocate and construct an operation to wrap the handler.
+  typedef completion_handler<Handler> op;
+  typename op::ptr p = { boost::asio::detail::addressof(handler),
+    boost_asio_handler_alloc_helpers::allocate(
+      sizeof(op), handler), 0 };
+  p.p = new (p.v) op(handler);
+
+  BOOST_ASIO_HANDLER_CREATION((p.p, "strand", impl, "post"));
+
+  do_post(impl, p.p, is_continuation);
+  p.v = p.p = 0;
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_IMPL_STRAND_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/impl/strand_service.ipp b/ext/patches/boost/asio/detail/impl/strand_service.ipp
new file mode 100644
index 0000000..cd80e70
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/strand_service.ipp
@@ -0,0 +1,178 @@
+//
+// detail/impl/strand_service.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_STRAND_SERVICE_IPP
+#define BOOST_ASIO_DETAIL_IMPL_STRAND_SERVICE_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/call_stack.hpp>
+#include <boost/asio/detail/strand_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+struct strand_service::on_do_complete_exit
+{
+  io_service_impl* owner_;
+  strand_impl* impl_;
+
+  ~on_do_complete_exit()
+  {
+    impl_->mutex_.lock();
+    impl_->ready_queue_.push(impl_->waiting_queue_);
+    bool more_handlers = impl_->locked_ = !impl_->ready_queue_.empty();
+    impl_->mutex_.unlock();
+
+    if (more_handlers)
+      owner_->post_immediate_completion(impl_, true);
+  }
+};
+
+strand_service::strand_service(boost::asio::io_service& io_service)
+  : boost::asio::detail::service_base<strand_service>(io_service),
+    io_service_(boost::asio::use_service<io_service_impl>(io_service)),
+    mutex_(),
+    salt_(0)
+{
+}
+
+void strand_service::shutdown_service()
+{
+  op_queue<operation> ops;
+
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+  for (std::size_t i = 0; i < num_implementations; ++i)
+  {
+    if (strand_impl* impl = implementations_[i].get())
+    {
+      ops.push(impl->waiting_queue_);
+      ops.push(impl->ready_queue_);
+    }
+  }
+}
+
+void strand_service::construct(strand_service::implementation_type& impl)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+  std::size_t salt = salt_++;
+#if defined(BOOST_ASIO_ENABLE_SEQUENTIAL_STRAND_ALLOCATION)
+  std::size_t index = salt;
+#else // defined(BOOST_ASIO_ENABLE_SEQUENTIAL_STRAND_ALLOCATION)
+  std::size_t index = reinterpret_cast<std::size_t>(&impl);
+  index += (reinterpret_cast<std::size_t>(&impl) >> 3);
+  index ^= salt + 0x9e3779b9 + (index << 6) + (index >> 2);
+#endif // defined(BOOST_ASIO_ENABLE_SEQUENTIAL_STRAND_ALLOCATION)
+  index = index % num_implementations;
+
+  if (!implementations_[index].get())
+    implementations_[index].reset(new strand_impl);
+  impl = implementations_[index].get();
+}
+
+bool strand_service::running_in_this_thread(
+    const implementation_type& impl) const
+{
+  return call_stack<strand_impl>::contains(impl) != 0;
+}
+
+bool strand_service::do_dispatch(implementation_type& impl, operation* op)
+{
+  // If we are running inside the io_service, and no other handler already
+  // holds the strand lock, then the handler can run immediately.
+  bool can_dispatch = io_service_.can_dispatch();
+  impl->mutex_.lock();
+  if (can_dispatch && !impl->locked_)
+  {
+    // Immediate invocation is allowed.
+    impl->locked_ = true;
+    impl->mutex_.unlock();
+    return true;
+  }
+
+  if (impl->locked_)
+  {
+    // Some other handler already holds the strand lock. Enqueue for later.
+    impl->waiting_queue_.push(op);
+    impl->mutex_.unlock();
+  }
+  else
+  {
+    // The handler is acquiring the strand lock and so is responsible for
+    // scheduling the strand.
+    impl->locked_ = true;
+    impl->mutex_.unlock();
+    impl->ready_queue_.push(op);
+    io_service_.post_immediate_completion(impl, false);
+  }
+
+  return false;
+}
+
+void strand_service::do_post(implementation_type& impl,
+    operation* op, bool is_continuation)
+{
+  impl->mutex_.lock();
+  if (impl->locked_)
+  {
+    // Some other handler already holds the strand lock. Enqueue for later.
+    impl->waiting_queue_.push(op);
+    impl->mutex_.unlock();
+  }
+  else
+  {
+    // The handler is acquiring the strand lock and so is responsible for
+    // scheduling the strand.
+    impl->locked_ = true;
+    impl->mutex_.unlock();
+    impl->ready_queue_.push(op);
+    io_service_.post_immediate_completion(impl, is_continuation);
+  }
+}
+
+void strand_service::do_complete(io_service_impl* owner, operation* base,
+    const boost::system::error_code& ec, std::size_t /*bytes_transferred*/)
+{
+  if (owner)
+  {
+    strand_impl* impl = static_cast<strand_impl*>(base);
+
+    // Indicate that this strand is executing on the current thread.
+    call_stack<strand_impl>::context ctx(impl);
+
+    // Ensure the next handler, if any, is scheduled on block exit.
+    on_do_complete_exit on_exit = { owner, impl };
+    (void)on_exit;
+
+    // Run all ready handlers. No lock is required since the ready queue is
+    // accessed only within the strand.
+    while (operation* o = impl->ready_queue_.front())
+    {
+      impl->ready_queue_.pop();
+      o->complete(*owner, ec, 0);
+    }
+  }
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_IMPL_STRAND_SERVICE_IPP
diff --git a/ext/patches/boost/asio/detail/impl/task_io_service.hpp b/ext/patches/boost/asio/detail/impl/task_io_service.hpp
new file mode 100644
index 0000000..9ad3da3
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/task_io_service.hpp
@@ -0,0 +1,80 @@
+//
+// detail/impl/task_io_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_TASK_IO_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_IMPL_TASK_IO_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/completion_handler.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_cont_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Handler>
+void task_io_service::dispatch(Handler& handler)
+{
+  if (thread_call_stack::contains(this))
+  {
+    fenced_block b(fenced_block::full);
+    boost_asio_handler_invoke_helpers::invoke(handler, handler);
+  }
+  else
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef completion_handler<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "io_service", this, "dispatch"));
+
+    do_dispatch(p.p);
+    p.v = p.p = 0;
+  }
+}
+
+template <typename Handler>
+void task_io_service::post(Handler& handler)
+{
+  bool is_continuation =
+    boost_asio_handler_cont_helpers::is_continuation(handler);
+
+  // Allocate and construct an operation to wrap the handler.
+  typedef completion_handler<Handler> op;
+  typename op::ptr p = { boost::asio::detail::addressof(handler),
+    boost_asio_handler_alloc_helpers::allocate(
+      sizeof(op), handler), 0 };
+  p.p = new (p.v) op(handler);
+
+  BOOST_ASIO_HANDLER_CREATION((p.p, "io_service", this, "post"));
+
+  post_immediate_completion(p.p, is_continuation);
+  p.v = p.p = 0;
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_IMPL_TASK_IO_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/impl/task_io_service.ipp b/ext/patches/boost/asio/detail/impl/task_io_service.ipp
new file mode 100644
index 0000000..2190937
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/task_io_service.ipp
@@ -0,0 +1,476 @@
+//
+// detail/impl/task_io_service.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_TASK_IO_SERVICE_IPP
+#define BOOST_ASIO_DETAIL_IMPL_TASK_IO_SERVICE_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/detail/event.hpp>
+#include <boost/asio/detail/limits.hpp>
+#include <boost/asio/detail/reactor.hpp>
+#include <boost/asio/detail/task_io_service.hpp>
+#include <boost/asio/detail/task_io_service_thread_info.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+struct task_io_service::task_cleanup
+{
+  ~task_cleanup()
+  {
+    if (this_thread_->private_outstanding_work > 0)
+    {
+      boost::asio::detail::increment(
+          task_io_service_->outstanding_work_,
+          this_thread_->private_outstanding_work);
+    }
+    this_thread_->private_outstanding_work = 0;
+
+    // Enqueue the completed operations and reinsert the task at the end of
+    // the operation queue.
+    lock_->lock();
+    task_io_service_->task_interrupted_ = true;
+    task_io_service_->op_queue_.push(this_thread_->private_op_queue);
+    task_io_service_->op_queue_.push(&task_io_service_->task_operation_);
+  }
+
+  task_io_service* task_io_service_;
+  mutex::scoped_lock* lock_;
+  thread_info* this_thread_;
+};
+
+struct task_io_service::work_cleanup
+{
+  ~work_cleanup()
+  {
+    if (this_thread_->private_outstanding_work > 1)
+    {
+      boost::asio::detail::increment(
+          task_io_service_->outstanding_work_,
+          this_thread_->private_outstanding_work - 1);
+    }
+    else if (this_thread_->private_outstanding_work < 1)
+    {
+      task_io_service_->work_finished();
+    }
+    this_thread_->private_outstanding_work = 0;
+
+#if defined(BOOST_ASIO_HAS_THREADS)
+    if (!this_thread_->private_op_queue.empty())
+    {
+      lock_->lock();
+      task_io_service_->op_queue_.push(this_thread_->private_op_queue);
+    }
+#endif // defined(BOOST_ASIO_HAS_THREADS)
+  }
+
+  task_io_service* task_io_service_;
+  mutex::scoped_lock* lock_;
+  thread_info* this_thread_;
+};
+
+task_io_service::task_io_service(
+    boost::asio::io_service& io_service, std::size_t concurrency_hint)
+  : boost::asio::detail::service_base<task_io_service>(io_service),
+    one_thread_(concurrency_hint == 1),
+    mutex_(),
+    task_(0),
+    task_interrupted_(true),
+    outstanding_work_(0),
+    stopped_(false),
+    shutdown_(false)
+{
+  BOOST_ASIO_HANDLER_TRACKING_INIT;
+}
+
+void task_io_service::shutdown_service()
+{
+  mutex::scoped_lock lock(mutex_);
+  shutdown_ = true;
+  lock.unlock();
+
+  // Destroy handler objects.
+  while (!op_queue_.empty())
+  {
+    operation* o = op_queue_.front();
+    op_queue_.pop();
+    if (o != &task_operation_)
+      o->destroy();
+  }
+
+  // Reset to initial state.
+  task_ = 0;
+}
+
+void task_io_service::init_task()
+{
+  mutex::scoped_lock lock(mutex_);
+  if (!shutdown_ && !task_)
+  {
+    task_ = &use_service<reactor>(this->get_io_service());
+    op_queue_.push(&task_operation_);
+    wake_one_thread_and_unlock(lock);
+  }
+}
+
+std::size_t task_io_service::run(boost::system::error_code& ec)
+{
+  ec = boost::system::error_code();
+  if (outstanding_work_ == 0)
+  {
+    stop();
+    return 0;
+  }
+
+  thread_info this_thread;
+  this_thread.private_outstanding_work = 0;
+  thread_call_stack::context ctx(this, this_thread);
+
+  mutex::scoped_lock lock(mutex_);
+
+  std::size_t n = 0;
+  for (; do_run_one(lock, this_thread, ec); lock.lock())
+    if (n != (std::numeric_limits<std::size_t>::max)())
+      ++n;
+  return n;
+}
+
+std::size_t task_io_service::run_one(boost::system::error_code& ec)
+{
+  ec = boost::system::error_code();
+  if (outstanding_work_ == 0)
+  {
+    stop();
+    return 0;
+  }
+
+  thread_info this_thread;
+  this_thread.private_outstanding_work = 0;
+  thread_call_stack::context ctx(this, this_thread);
+
+  mutex::scoped_lock lock(mutex_);
+
+  return do_run_one(lock, this_thread, ec);
+}
+
+std::size_t task_io_service::poll(boost::system::error_code& ec)
+{
+  ec = boost::system::error_code();
+  if (outstanding_work_ == 0)
+  {
+    stop();
+    return 0;
+  }
+
+  thread_info this_thread;
+  this_thread.private_outstanding_work = 0;
+  thread_call_stack::context ctx(this, this_thread);
+
+  mutex::scoped_lock lock(mutex_);
+
+#if defined(BOOST_ASIO_HAS_THREADS)
+  // We want to support nested calls to poll() and poll_one(), so any handlers
+  // that are already on a thread-private queue need to be put on to the main
+  // queue now.
+  if (one_thread_)
+    if (thread_info* outer_thread_info = ctx.next_by_key())
+      op_queue_.push(outer_thread_info->private_op_queue);
+#endif // defined(BOOST_ASIO_HAS_THREADS)
+
+  std::size_t n = 0;
+  for (; do_poll_one(lock, this_thread, ec); lock.lock())
+    if (n != (std::numeric_limits<std::size_t>::max)())
+      ++n;
+  return n;
+}
+
+std::size_t task_io_service::poll_one(boost::system::error_code& ec)
+{
+  ec = boost::system::error_code();
+  if (outstanding_work_ == 0)
+  {
+    stop();
+    return 0;
+  }
+
+  thread_info this_thread;
+  this_thread.private_outstanding_work = 0;
+  thread_call_stack::context ctx(this, this_thread);
+
+  mutex::scoped_lock lock(mutex_);
+
+#if defined(BOOST_ASIO_HAS_THREADS)
+  // We want to support nested calls to poll() and poll_one(), so any handlers
+  // that are already on a thread-private queue need to be put on to the main
+  // queue now.
+  if (one_thread_)
+    if (thread_info* outer_thread_info = ctx.next_by_key())
+      op_queue_.push(outer_thread_info->private_op_queue);
+#endif // defined(BOOST_ASIO_HAS_THREADS)
+
+  return do_poll_one(lock, this_thread, ec);
+}
+
+void task_io_service::stop()
+{
+  mutex::scoped_lock lock(mutex_);
+  stop_all_threads(lock);
+}
+
+bool task_io_service::stopped() const
+{
+  mutex::scoped_lock lock(mutex_);
+  return stopped_;
+}
+
+void task_io_service::reset()
+{
+  mutex::scoped_lock lock(mutex_);
+  stopped_ = false;
+}
+
+void task_io_service::post_immediate_completion(
+    task_io_service::operation* op, bool is_continuation)
+{
+#if defined(BOOST_ASIO_HAS_THREADS)
+  if (one_thread_ || is_continuation)
+  {
+    if (thread_info* this_thread = thread_call_stack::contains(this))
+    {
+      ++this_thread->private_outstanding_work;
+      this_thread->private_op_queue.push(op);
+      return;
+    }
+  }
+#else // defined(BOOST_ASIO_HAS_THREADS)
+  (void)is_continuation;
+#endif // defined(BOOST_ASIO_HAS_THREADS)
+
+  work_started();
+  mutex::scoped_lock lock(mutex_);
+  op_queue_.push(op);
+  wake_one_thread_and_unlock(lock);
+}
+
+void task_io_service::post_deferred_completion(task_io_service::operation* op)
+{
+#if defined(BOOST_ASIO_HAS_THREADS)
+  if (one_thread_)
+  {
+    if (thread_info* this_thread = thread_call_stack::contains(this))
+    {
+      this_thread->private_op_queue.push(op);
+      return;
+    }
+  }
+#endif // defined(BOOST_ASIO_HAS_THREADS)
+
+  mutex::scoped_lock lock(mutex_);
+  op_queue_.push(op);
+  wake_one_thread_and_unlock(lock);
+}
+
+void task_io_service::post_deferred_completions(
+    op_queue<task_io_service::operation>& ops)
+{
+  if (!ops.empty())
+  {
+#if defined(BOOST_ASIO_HAS_THREADS)
+    if (one_thread_)
+    {
+      if (thread_info* this_thread = thread_call_stack::contains(this))
+      {
+        this_thread->private_op_queue.push(ops);
+        return;
+      }
+    }
+#endif // defined(BOOST_ASIO_HAS_THREADS)
+
+    mutex::scoped_lock lock(mutex_);
+    op_queue_.push(ops);
+    wake_one_thread_and_unlock(lock);
+  }
+}
+
+void task_io_service::do_dispatch(
+    task_io_service::operation* op)
+{
+  work_started();
+  mutex::scoped_lock lock(mutex_);
+  op_queue_.push(op);
+  wake_one_thread_and_unlock(lock);
+}
+
+void task_io_service::abandon_operations(
+    op_queue<task_io_service::operation>& ops)
+{
+  op_queue<task_io_service::operation> ops2;
+  ops2.push(ops);
+}
+
+std::size_t task_io_service::do_run_one(mutex::scoped_lock& lock,
+    task_io_service::thread_info& this_thread,
+    const boost::system::error_code& ec)
+{
+  while (!stopped_)
+  {
+    if (!op_queue_.empty())
+    {
+      // Prepare to execute first handler from queue.
+      operation* o = op_queue_.front();
+      op_queue_.pop();
+      bool more_handlers = (!op_queue_.empty());
+
+      if (o == &task_operation_)
+      {
+        task_interrupted_ = more_handlers;
+
+        if (more_handlers && !one_thread_)
+          wakeup_event_.unlock_and_signal_one(lock);
+        else
+          lock.unlock();
+
+        task_cleanup on_exit = { this, &lock, &this_thread };
+        (void)on_exit;
+
+        // Run the task. May throw an exception. Only block if the operation
+        // queue is empty and we're not polling, otherwise we want to return
+        // as soon as possible.
+        task_->run(!more_handlers, this_thread.private_op_queue);
+      }
+      else
+      {
+        std::size_t task_result = o->task_result_;
+
+        if (more_handlers && !one_thread_)
+          wake_one_thread_and_unlock(lock);
+        else
+          lock.unlock();
+
+        // Ensure the count of outstanding work is decremented on block exit.
+        work_cleanup on_exit = { this, &lock, &this_thread };
+        (void)on_exit;
+
+        // Complete the operation. May throw an exception. Deletes the object.
+        o->complete(*this, ec, task_result);
+
+        return 1;
+      }
+    }
+    else
+    {
+      wakeup_event_.clear(lock);
+      wakeup_event_.wait(lock);
+    }
+  }
+
+  return 0;
+}
+
+std::size_t task_io_service::do_poll_one(mutex::scoped_lock& lock,
+    task_io_service::thread_info& this_thread,
+    const boost::system::error_code& ec)
+{
+  if (stopped_)
+    return 0;
+
+  operation* o = op_queue_.front();
+  if (o == &task_operation_)
+  {
+    op_queue_.pop();
+    lock.unlock();
+
+    {
+      task_cleanup c = { this, &lock, &this_thread };
+      (void)c;
+
+      // Run the task. May throw an exception. Only block if the operation
+      // queue is empty and we're not polling, otherwise we want to return
+      // as soon as possible.
+      task_->run(false, this_thread.private_op_queue);
+    }
+
+    o = op_queue_.front();
+    if (o == &task_operation_)
+    {
+      wakeup_event_.maybe_unlock_and_signal_one(lock);
+      return 0;
+    }
+  }
+
+  if (o == 0)
+    return 0;
+
+  op_queue_.pop();
+  bool more_handlers = (!op_queue_.empty());
+
+  std::size_t task_result = o->task_result_;
+
+  if (more_handlers && !one_thread_)
+    wake_one_thread_and_unlock(lock);
+  else
+    lock.unlock();
+
+  // Ensure the count of outstanding work is decremented on block exit.
+  work_cleanup on_exit = { this, &lock, &this_thread };
+  (void)on_exit;
+
+  // Complete the operation. May throw an exception. Deletes the object.
+  o->complete(*this, ec, task_result);
+
+  return 1;
+}
+
+void task_io_service::stop_all_threads(
+    mutex::scoped_lock& lock)
+{
+  stopped_ = true;
+  wakeup_event_.signal_all(lock);
+
+  if (!task_interrupted_ && task_)
+  {
+    task_interrupted_ = true;
+    task_->interrupt();
+  }
+}
+
+void task_io_service::wake_one_thread_and_unlock(
+    mutex::scoped_lock& lock)
+{
+  if (!wakeup_event_.maybe_unlock_and_signal_one(lock))
+  {
+    if (!task_interrupted_ && task_)
+    {
+      task_interrupted_ = true;
+      task_->interrupt();
+    }
+    lock.unlock();
+  }
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_TASK_IO_SERVICE_IPP
diff --git a/ext/patches/boost/asio/detail/impl/throw_error.ipp b/ext/patches/boost/asio/detail/impl/throw_error.ipp
new file mode 100644
index 0000000..8c27912
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/throw_error.ipp
@@ -0,0 +1,47 @@
+//
+// detail/impl/throw_error.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_THROW_ERROR_IPP
+#define BOOST_ASIO_DETAIL_IMPL_THROW_ERROR_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/detail/throw_exception.hpp>
+#include <boost/system/system_error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+void do_throw_error(const boost::system::error_code& err)
+{
+  boost::system::system_error e(err);
+  boost::asio::detail::throw_exception(e);
+}
+
+void do_throw_error(const boost::system::error_code& err, const char* location)
+{
+  boost::system::system_error e(err, location);
+  boost::asio::detail::throw_exception(e);
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_IMPL_THROW_ERROR_IPP
diff --git a/ext/patches/boost/asio/detail/impl/timer_queue_ptime.ipp b/ext/patches/boost/asio/detail/impl/timer_queue_ptime.ipp
new file mode 100644
index 0000000..31184d8
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/timer_queue_ptime.ipp
@@ -0,0 +1,86 @@
+//
+// detail/impl/timer_queue_ptime.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_TIMER_QUEUE_PTIME_IPP
+#define BOOST_ASIO_DETAIL_IMPL_TIMER_QUEUE_PTIME_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/timer_queue_ptime.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+#if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+timer_queue<time_traits<boost::posix_time::ptime> >::timer_queue()
+{
+}
+
+timer_queue<time_traits<boost::posix_time::ptime> >::~timer_queue()
+{
+}
+
+bool timer_queue<time_traits<boost::posix_time::ptime> >::enqueue_timer(
+    const time_type& time, per_timer_data& timer, wait_op* op)
+{
+  return impl_.enqueue_timer(time, timer, op);
+}
+
+bool timer_queue<time_traits<boost::posix_time::ptime> >::empty() const
+{
+  return impl_.empty();
+}
+
+long timer_queue<time_traits<boost::posix_time::ptime> >::wait_duration_msec(
+    long max_duration) const
+{
+  return impl_.wait_duration_msec(max_duration);
+}
+
+long timer_queue<time_traits<boost::posix_time::ptime> >::wait_duration_usec(
+    long max_duration) const
+{
+  return impl_.wait_duration_usec(max_duration);
+}
+
+void timer_queue<time_traits<boost::posix_time::ptime> >::get_ready_timers(
+    op_queue<operation>& ops)
+{
+  impl_.get_ready_timers(ops);
+}
+
+void timer_queue<time_traits<boost::posix_time::ptime> >::get_all_timers(
+    op_queue<operation>& ops)
+{
+  impl_.get_all_timers(ops);
+}
+
+std::size_t timer_queue<time_traits<boost::posix_time::ptime> >::cancel_timer(
+    per_timer_data& timer, op_queue<operation>& ops, std::size_t max_cancelled)
+{
+  return impl_.cancel_timer(timer, ops, max_cancelled);
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_IMPL_TIMER_QUEUE_PTIME_IPP
diff --git a/ext/patches/boost/asio/detail/impl/timer_queue_set.ipp b/ext/patches/boost/asio/detail/impl/timer_queue_set.ipp
new file mode 100644
index 0000000..49ee860
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/timer_queue_set.ipp
@@ -0,0 +1,103 @@
+//
+// detail/impl/timer_queue_set.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_TIMER_QUEUE_SET_IPP
+#define BOOST_ASIO_DETAIL_IMPL_TIMER_QUEUE_SET_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/timer_queue_set.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+timer_queue_set::timer_queue_set()
+  : first_(0)
+{
+}
+
+void timer_queue_set::insert(timer_queue_base* q)
+{
+  q->next_ = first_;
+  first_ = q;
+}
+
+void timer_queue_set::erase(timer_queue_base* q)
+{
+  if (first_)
+  {
+    if (q == first_)
+    {
+      first_ = q->next_;
+      q->next_ = 0;
+      return;
+    }
+
+    for (timer_queue_base* p = first_; p->next_; p = p->next_)
+    {
+      if (p->next_ == q)
+      {
+        p->next_ = q->next_;
+        q->next_ = 0;
+        return;
+      }
+    }
+  }
+}
+
+bool timer_queue_set::all_empty() const
+{
+  for (timer_queue_base* p = first_; p; p = p->next_)
+    if (!p->empty())
+      return false;
+  return true;
+}
+
+long timer_queue_set::wait_duration_msec(long max_duration) const
+{
+  long min_duration = max_duration;
+  for (timer_queue_base* p = first_; p; p = p->next_)
+    min_duration = p->wait_duration_msec(min_duration);
+  return min_duration;
+}
+
+long timer_queue_set::wait_duration_usec(long max_duration) const
+{
+  long min_duration = max_duration;
+  for (timer_queue_base* p = first_; p; p = p->next_)
+    min_duration = p->wait_duration_usec(min_duration);
+  return min_duration;
+}
+
+void timer_queue_set::get_ready_timers(op_queue<operation>& ops)
+{
+  for (timer_queue_base* p = first_; p; p = p->next_)
+    p->get_ready_timers(ops);
+}
+
+void timer_queue_set::get_all_timers(op_queue<operation>& ops)
+{
+  for (timer_queue_base* p = first_; p; p = p->next_)
+    p->get_all_timers(ops);
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_IMPL_TIMER_QUEUE_SET_IPP
diff --git a/ext/patches/boost/asio/detail/impl/win_event.ipp b/ext/patches/boost/asio/detail/impl/win_event.ipp
new file mode 100644
index 0000000..5863a1b
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/win_event.ipp
@@ -0,0 +1,69 @@
+//
+// detail/win_event.ipp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_WIN_EVENT_IPP
+#define BOOST_ASIO_DETAIL_IMPL_WIN_EVENT_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS)
+
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/detail/win_event.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+win_event::win_event()
+  : state_(0)
+{
+  events_[0] = ::CreateEvent(0, true, false, 0);
+  if (!events_[0])
+  {
+    DWORD last_error = ::GetLastError();
+    boost::system::error_code ec(last_error,
+        boost::asio::error::get_system_category());
+    boost::asio::detail::throw_error(ec, "event");
+  }
+
+  events_[1] = ::CreateEvent(0, false, false, 0);
+  if (!events_[1])
+  {
+    DWORD last_error = ::GetLastError();
+    ::CloseHandle(events_[0]);
+    boost::system::error_code ec(last_error,
+        boost::asio::error::get_system_category());
+    boost::asio::detail::throw_error(ec, "event");
+  }
+}
+
+win_event::~win_event()
+{
+  ::CloseHandle(events_[0]);
+  ::CloseHandle(events_[1]);
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WIN_EVENT_IPP
diff --git a/ext/patches/boost/asio/detail/impl/win_iocp_handle_service.ipp b/ext/patches/boost/asio/detail/impl/win_iocp_handle_service.ipp
new file mode 100644
index 0000000..2c9fc16
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/win_iocp_handle_service.ipp
@@ -0,0 +1,527 @@
+//
+// detail/impl/win_iocp_handle_service.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2008 Rep Invariant Systems, Inc. (info at repinvariant.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_WIN_IOCP_HANDLE_SERVICE_IPP
+#define BOOST_ASIO_DETAIL_IMPL_WIN_IOCP_HANDLE_SERVICE_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/detail/win_iocp_handle_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class win_iocp_handle_service::overlapped_wrapper
+  : public OVERLAPPED
+{
+public:
+  explicit overlapped_wrapper(boost::system::error_code& ec)
+  {
+    Internal = 0;
+    InternalHigh = 0;
+    Offset = 0;
+    OffsetHigh = 0;
+
+    // Create a non-signalled manual-reset event, for GetOverlappedResult.
+    hEvent = ::CreateEvent(0, TRUE, FALSE, 0);
+    if (hEvent)
+    {
+      // As documented in GetQueuedCompletionStatus, setting the low order
+      // bit of this event prevents our synchronous writes from being treated
+      // as completion port events.
+      DWORD_PTR tmp = reinterpret_cast<DWORD_PTR>(hEvent);
+      hEvent = reinterpret_cast<HANDLE>(tmp | 1);
+    }
+    else
+    {
+      DWORD last_error = ::GetLastError();
+      ec = boost::system::error_code(last_error,
+          boost::asio::error::get_system_category());
+    }
+  }
+
+  ~overlapped_wrapper()
+  {
+    if (hEvent)
+    {
+      ::CloseHandle(hEvent);
+    }
+  }
+};
+
+win_iocp_handle_service::win_iocp_handle_service(
+    boost::asio::io_service& io_service)
+  : iocp_service_(boost::asio::use_service<win_iocp_io_service>(io_service)),
+    mutex_(),
+    impl_list_(0)
+{
+}
+
+void win_iocp_handle_service::shutdown_service()
+{
+  // Close all implementations, causing all operations to complete.
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  implementation_type* impl = impl_list_;
+  while (impl)
+  {
+    close_for_destruction(*impl);
+    impl = impl->next_;
+  }
+}
+
+void win_iocp_handle_service::construct(
+    win_iocp_handle_service::implementation_type& impl)
+{
+  impl.handle_ = INVALID_HANDLE_VALUE;
+  impl.safe_cancellation_thread_id_ = 0;
+
+  // Insert implementation into linked list of all implementations.
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  impl.next_ = impl_list_;
+  impl.prev_ = 0;
+  if (impl_list_)
+    impl_list_->prev_ = &impl;
+  impl_list_ = &impl;
+}
+
+void win_iocp_handle_service::move_construct(
+    win_iocp_handle_service::implementation_type& impl,
+    win_iocp_handle_service::implementation_type& other_impl)
+{
+  impl.handle_ = other_impl.handle_;
+  other_impl.handle_ = INVALID_HANDLE_VALUE;
+
+  impl.safe_cancellation_thread_id_ = other_impl.safe_cancellation_thread_id_;
+  other_impl.safe_cancellation_thread_id_ = 0;
+
+  // Insert implementation into linked list of all implementations.
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  impl.next_ = impl_list_;
+  impl.prev_ = 0;
+  if (impl_list_)
+    impl_list_->prev_ = &impl;
+  impl_list_ = &impl;
+}
+
+void win_iocp_handle_service::move_assign(
+    win_iocp_handle_service::implementation_type& impl,
+    win_iocp_handle_service& other_service,
+    win_iocp_handle_service::implementation_type& other_impl)
+{
+  close_for_destruction(impl);
+
+  if (this != &other_service)
+  {
+    // Remove implementation from linked list of all implementations.
+    boost::asio::detail::mutex::scoped_lock lock(mutex_);
+    if (impl_list_ == &impl)
+      impl_list_ = impl.next_;
+    if (impl.prev_)
+      impl.prev_->next_ = impl.next_;
+    if (impl.next_)
+      impl.next_->prev_= impl.prev_;
+    impl.next_ = 0;
+    impl.prev_ = 0;
+  }
+
+  impl.handle_ = other_impl.handle_;
+  other_impl.handle_ = INVALID_HANDLE_VALUE;
+
+  impl.safe_cancellation_thread_id_ = other_impl.safe_cancellation_thread_id_;
+  other_impl.safe_cancellation_thread_id_ = 0;
+
+  if (this != &other_service)
+  {
+    // Insert implementation into linked list of all implementations.
+    boost::asio::detail::mutex::scoped_lock lock(other_service.mutex_);
+    impl.next_ = other_service.impl_list_;
+    impl.prev_ = 0;
+    if (other_service.impl_list_)
+      other_service.impl_list_->prev_ = &impl;
+    other_service.impl_list_ = &impl;
+  }
+}
+
+void win_iocp_handle_service::destroy(
+    win_iocp_handle_service::implementation_type& impl)
+{
+  close_for_destruction(impl);
+  
+  // Remove implementation from linked list of all implementations.
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  if (impl_list_ == &impl)
+    impl_list_ = impl.next_;
+  if (impl.prev_)
+    impl.prev_->next_ = impl.next_;
+  if (impl.next_)
+    impl.next_->prev_= impl.prev_;
+  impl.next_ = 0;
+  impl.prev_ = 0;
+}
+
+boost::system::error_code win_iocp_handle_service::assign(
+    win_iocp_handle_service::implementation_type& impl,
+    const native_handle_type& handle, boost::system::error_code& ec)
+{
+  if (is_open(impl))
+  {
+    ec = boost::asio::error::already_open;
+    return ec;
+  }
+
+  if (iocp_service_.register_handle(handle, ec))
+    return ec;
+
+  impl.handle_ = handle;
+  ec = boost::system::error_code();
+  return ec;
+}
+
+boost::system::error_code win_iocp_handle_service::close(
+    win_iocp_handle_service::implementation_type& impl,
+    boost::system::error_code& ec)
+{
+  if (is_open(impl))
+  {
+    BOOST_ASIO_HANDLER_OPERATION(("handle", &impl, "close"));
+
+    if (!::CloseHandle(impl.handle_))
+    {
+      DWORD last_error = ::GetLastError();
+      ec = boost::system::error_code(last_error,
+          boost::asio::error::get_system_category());
+    }
+    else
+    {
+      ec = boost::system::error_code();
+    }
+
+    impl.handle_ = INVALID_HANDLE_VALUE;
+    impl.safe_cancellation_thread_id_ = 0;
+  }
+  else
+  {
+    ec = boost::system::error_code();
+  }
+
+  return ec;
+}
+
+boost::system::error_code win_iocp_handle_service::cancel(
+    win_iocp_handle_service::implementation_type& impl,
+    boost::system::error_code& ec)
+{
+  if (!is_open(impl))
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return ec;
+  }
+
+  BOOST_ASIO_HANDLER_OPERATION(("handle", &impl, "cancel"));
+
+  if (FARPROC cancel_io_ex_ptr = ::GetProcAddress(
+        ::GetModuleHandleA("KERNEL32"), "CancelIoEx"))
+  {
+    // The version of Windows supports cancellation from any thread.
+    typedef BOOL (WINAPI* cancel_io_ex_t)(HANDLE, LPOVERLAPPED);
+    cancel_io_ex_t cancel_io_ex = (cancel_io_ex_t)cancel_io_ex_ptr;
+    if (!cancel_io_ex(impl.handle_, 0))
+    {
+      DWORD last_error = ::GetLastError();
+      if (last_error == ERROR_NOT_FOUND)
+      {
+        // ERROR_NOT_FOUND means that there were no operations to be
+        // cancelled. We swallow this error to match the behaviour on other
+        // platforms.
+        ec = boost::system::error_code();
+      }
+      else
+      {
+        ec = boost::system::error_code(last_error,
+            boost::asio::error::get_system_category());
+      }
+    }
+    else
+    {
+      ec = boost::system::error_code();
+    }
+  }
+  else if (impl.safe_cancellation_thread_id_ == 0)
+  {
+    // No operations have been started, so there's nothing to cancel.
+    ec = boost::system::error_code();
+  }
+  else if (impl.safe_cancellation_thread_id_ == ::GetCurrentThreadId())
+  {
+    // Asynchronous operations have been started from the current thread only,
+    // so it is safe to try to cancel them using CancelIo.
+    if (!::CancelIo(impl.handle_))
+    {
+      DWORD last_error = ::GetLastError();
+      ec = boost::system::error_code(last_error,
+          boost::asio::error::get_system_category());
+    }
+    else
+    {
+      ec = boost::system::error_code();
+    }
+  }
+  else
+  {
+    // Asynchronous operations have been started from more than one thread,
+    // so cancellation is not safe.
+    ec = boost::asio::error::operation_not_supported;
+  }
+
+  return ec;
+}
+
+size_t win_iocp_handle_service::do_write(
+    win_iocp_handle_service::implementation_type& impl, uint64_t offset,
+    const boost::asio::const_buffer& buffer, boost::system::error_code& ec)
+{
+  if (!is_open(impl))
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return 0;
+  }
+
+  // A request to write 0 bytes on a handle is a no-op.
+  if (boost::asio::buffer_size(buffer) == 0)
+  {
+    ec = boost::system::error_code();
+    return 0;
+  }
+
+  overlapped_wrapper overlapped(ec);
+  if (ec)
+  {
+    return 0;
+  }
+
+  // Write the data. 
+  overlapped.Offset = offset & 0xFFFFFFFF;
+  overlapped.OffsetHigh = (offset >> 32) & 0xFFFFFFFF;
+  BOOL ok = ::WriteFile(impl.handle_,
+      boost::asio::buffer_cast<LPCVOID>(buffer),
+      static_cast<DWORD>(boost::asio::buffer_size(buffer)), 0, &overlapped);
+  if (!ok) 
+  {
+    DWORD last_error = ::GetLastError();
+    if (last_error != ERROR_IO_PENDING)
+    {
+      ec = boost::system::error_code(last_error,
+          boost::asio::error::get_system_category());
+      return 0;
+    }
+  }
+
+  // Wait for the operation to complete.
+  DWORD bytes_transferred = 0;
+  ok = ::GetOverlappedResult(impl.handle_,
+      &overlapped, &bytes_transferred, TRUE);
+  if (!ok)
+  {
+    DWORD last_error = ::GetLastError();
+    ec = boost::system::error_code(last_error,
+        boost::asio::error::get_system_category());
+    return 0;
+  }
+
+  ec = boost::system::error_code();
+  return bytes_transferred;
+}
+
+void win_iocp_handle_service::start_write_op(
+    win_iocp_handle_service::implementation_type& impl, uint64_t offset,
+    const boost::asio::const_buffer& buffer, operation* op)
+{
+  update_cancellation_thread_id(impl);
+  iocp_service_.work_started();
+
+  if (!is_open(impl))
+  {
+    iocp_service_.on_completion(op, boost::asio::error::bad_descriptor);
+  }
+  else if (boost::asio::buffer_size(buffer) == 0)
+  {
+    // A request to write 0 bytes on a handle is a no-op.
+    iocp_service_.on_completion(op);
+  }
+  else
+  {
+    DWORD bytes_transferred = 0;
+    op->Offset = offset & 0xFFFFFFFF;
+    op->OffsetHigh = (offset >> 32) & 0xFFFFFFFF;
+    BOOL ok = ::WriteFile(impl.handle_,
+        boost::asio::buffer_cast<LPCVOID>(buffer),
+        static_cast<DWORD>(boost::asio::buffer_size(buffer)),
+        &bytes_transferred, op);
+    DWORD last_error = ::GetLastError();
+    if (!ok && last_error != ERROR_IO_PENDING
+        && last_error != ERROR_MORE_DATA)
+    {
+      iocp_service_.on_completion(op, last_error, bytes_transferred);
+    }
+    else
+    {
+      iocp_service_.on_pending(op);
+    }
+  }
+}
+
+size_t win_iocp_handle_service::do_read(
+    win_iocp_handle_service::implementation_type& impl, uint64_t offset,
+    const boost::asio::mutable_buffer& buffer, boost::system::error_code& ec)
+{
+  if (!is_open(impl))
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return 0;
+  }
+  
+  // A request to read 0 bytes on a stream handle is a no-op.
+  if (boost::asio::buffer_size(buffer) == 0)
+  {
+    ec = boost::system::error_code();
+    return 0;
+  }
+
+  overlapped_wrapper overlapped(ec);
+  if (ec)
+  {
+    return 0;
+  }
+
+  // Read some data.
+  overlapped.Offset = offset & 0xFFFFFFFF;
+  overlapped.OffsetHigh = (offset >> 32) & 0xFFFFFFFF;
+  BOOL ok = ::ReadFile(impl.handle_,
+      boost::asio::buffer_cast<LPVOID>(buffer),
+      static_cast<DWORD>(boost::asio::buffer_size(buffer)), 0, &overlapped);
+  if (!ok) 
+  {
+    DWORD last_error = ::GetLastError();
+    if (last_error != ERROR_IO_PENDING && last_error != ERROR_MORE_DATA)
+    {
+      if (last_error == ERROR_HANDLE_EOF)
+      {
+        ec = boost::asio::error::eof;
+      }
+      else
+      {
+        ec = boost::system::error_code(last_error,
+            boost::asio::error::get_system_category());
+      }
+      return 0;
+    }
+  }
+
+  // Wait for the operation to complete.
+  DWORD bytes_transferred = 0;
+  ok = ::GetOverlappedResult(impl.handle_,
+      &overlapped, &bytes_transferred, TRUE);
+  if (!ok)
+  {
+    DWORD last_error = ::GetLastError();
+    if (last_error == ERROR_HANDLE_EOF)
+    {
+      ec = boost::asio::error::eof;
+    }
+    else
+    {
+      ec = boost::system::error_code(last_error,
+          boost::asio::error::get_system_category());
+    }
+    return (last_error == ERROR_MORE_DATA) ? bytes_transferred : 0;
+  }
+
+  ec = boost::system::error_code();
+  return bytes_transferred;
+}
+
+void win_iocp_handle_service::start_read_op(
+    win_iocp_handle_service::implementation_type& impl, uint64_t offset,
+    const boost::asio::mutable_buffer& buffer, operation* op)
+{
+  update_cancellation_thread_id(impl);
+  iocp_service_.work_started();
+
+  if (!is_open(impl))
+  {
+    iocp_service_.on_completion(op, boost::asio::error::bad_descriptor);
+  }
+  else if (boost::asio::buffer_size(buffer) == 0)
+  {
+    // A request to read 0 bytes on a handle is a no-op.
+    iocp_service_.on_completion(op);
+  }
+  else
+  {
+    DWORD bytes_transferred = 0;
+    op->Offset = offset & 0xFFFFFFFF;
+    op->OffsetHigh = (offset >> 32) & 0xFFFFFFFF;
+    BOOL ok = ::ReadFile(impl.handle_,
+        boost::asio::buffer_cast<LPVOID>(buffer),
+        static_cast<DWORD>(boost::asio::buffer_size(buffer)),
+        &bytes_transferred, op);
+    DWORD last_error = ::GetLastError();
+    if (!ok && last_error != ERROR_IO_PENDING
+        && last_error != ERROR_MORE_DATA)
+    {
+      iocp_service_.on_completion(op, last_error, bytes_transferred);
+    }
+    else
+    {
+      iocp_service_.on_pending(op);
+    }
+  }
+}
+
+void win_iocp_handle_service::update_cancellation_thread_id(
+    win_iocp_handle_service::implementation_type& impl)
+{
+  if (impl.safe_cancellation_thread_id_ == 0)
+    impl.safe_cancellation_thread_id_ = ::GetCurrentThreadId();
+  else if (impl.safe_cancellation_thread_id_ != ::GetCurrentThreadId())
+    impl.safe_cancellation_thread_id_ = ~DWORD(0);
+}
+
+void win_iocp_handle_service::close_for_destruction(implementation_type& impl)
+{
+  if (is_open(impl))
+  {
+    BOOST_ASIO_HANDLER_OPERATION(("handle", &impl, "close"));
+
+    ::CloseHandle(impl.handle_);
+    impl.handle_ = INVALID_HANDLE_VALUE;
+    impl.safe_cancellation_thread_id_ = 0;
+  }
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WIN_IOCP_HANDLE_SERVICE_IPP
diff --git a/ext/patches/boost/asio/detail/impl/win_iocp_io_service.hpp b/ext/patches/boost/asio/detail/impl/win_iocp_io_service.hpp
new file mode 100644
index 0000000..3933d0a
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/win_iocp_io_service.hpp
@@ -0,0 +1,132 @@
+//
+// detail/impl/win_iocp_io_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_WIN_IOCP_IO_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_IMPL_WIN_IOCP_IO_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/completion_handler.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Handler>
+void win_iocp_io_service::dispatch(Handler& handler)
+{
+  if (thread_call_stack::contains(this))
+  {
+    fenced_block b(fenced_block::full);
+    boost_asio_handler_invoke_helpers::invoke(handler, handler);
+  }
+  else
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef completion_handler<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "io_service", this, "dispatch"));
+
+    post_immediate_completion(p.p, false);
+    p.v = p.p = 0;
+  }
+}
+
+template <typename Handler>
+void win_iocp_io_service::post(Handler& handler)
+{
+  // Allocate and construct an operation to wrap the handler.
+  typedef completion_handler<Handler> op;
+  typename op::ptr p = { boost::asio::detail::addressof(handler),
+    boost_asio_handler_alloc_helpers::allocate(
+      sizeof(op), handler), 0 };
+  p.p = new (p.v) op(handler);
+
+  BOOST_ASIO_HANDLER_CREATION((p.p, "io_service", this, "post"));
+
+  post_immediate_completion(p.p, false);
+  p.v = p.p = 0;
+}
+
+template <typename Time_Traits>
+void win_iocp_io_service::add_timer_queue(
+    timer_queue<Time_Traits>& queue)
+{
+  do_add_timer_queue(queue);
+}
+
+template <typename Time_Traits>
+void win_iocp_io_service::remove_timer_queue(
+    timer_queue<Time_Traits>& queue)
+{
+  do_remove_timer_queue(queue);
+}
+
+template <typename Time_Traits>
+void win_iocp_io_service::schedule_timer(timer_queue<Time_Traits>& queue,
+    const typename Time_Traits::time_type& time,
+    typename timer_queue<Time_Traits>::per_timer_data& timer, wait_op* op)
+{
+  // If the service has been shut down we silently discard the timer.
+  if (::InterlockedExchangeAdd(&shutdown_, 0) != 0)
+  {
+    post_immediate_completion(op, false);
+    return;
+  }
+
+  mutex::scoped_lock lock(dispatch_mutex_);
+
+  bool earliest = queue.enqueue_timer(time, timer, op);
+  work_started();
+  if (earliest)
+    update_timeout();
+}
+
+template <typename Time_Traits>
+std::size_t win_iocp_io_service::cancel_timer(timer_queue<Time_Traits>& queue,
+    typename timer_queue<Time_Traits>::per_timer_data& timer,
+    std::size_t max_cancelled)
+{
+  // If the service has been shut down we silently ignore the cancellation.
+  if (::InterlockedExchangeAdd(&shutdown_, 0) != 0)
+    return 0;
+
+  mutex::scoped_lock lock(dispatch_mutex_);
+  op_queue<win_iocp_operation> ops;
+  std::size_t n = queue.cancel_timer(timer, ops, max_cancelled);
+  post_deferred_completions(ops);
+  return n;
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WIN_IOCP_IO_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/impl/win_iocp_io_service.ipp b/ext/patches/boost/asio/detail/impl/win_iocp_io_service.ipp
new file mode 100644
index 0000000..2050c13
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/win_iocp_io_service.ipp
@@ -0,0 +1,540 @@
+//
+// detail/impl/win_iocp_io_service.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_WIN_IOCP_IO_SERVICE_IPP
+#define BOOST_ASIO_DETAIL_IMPL_WIN_IOCP_IO_SERVICE_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/detail/cstdint.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/limits.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/detail/win_iocp_io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+struct win_iocp_io_service::work_finished_on_block_exit
+{
+  ~work_finished_on_block_exit()
+  {
+    io_service_->work_finished();
+  }
+
+  win_iocp_io_service* io_service_;
+};
+
+struct win_iocp_io_service::timer_thread_function
+{
+  void operator()()
+  {
+    while (::InterlockedExchangeAdd(&io_service_->shutdown_, 0) == 0)
+    {
+      if (::WaitForSingleObject(io_service_->waitable_timer_.handle,
+            INFINITE) == WAIT_OBJECT_0)
+      {
+        ::InterlockedExchange(&io_service_->dispatch_required_, 1);
+        ::PostQueuedCompletionStatus(io_service_->iocp_.handle,
+            0, wake_for_dispatch, 0);
+      }
+    }
+  }
+
+  win_iocp_io_service* io_service_;
+};
+
+win_iocp_io_service::win_iocp_io_service(
+    boost::asio::io_service& io_service, size_t concurrency_hint)
+  : boost::asio::detail::service_base<win_iocp_io_service>(io_service),
+    iocp_(),
+    outstanding_work_(0),
+    stopped_(0),
+    stop_event_posted_(0),
+    shutdown_(0),
+    gqcs_timeout_(get_gqcs_timeout()),
+    dispatch_required_(0)
+{
+  BOOST_ASIO_HANDLER_TRACKING_INIT;
+
+  iocp_.handle = ::CreateIoCompletionPort(INVALID_HANDLE_VALUE, 0, 0,
+      static_cast<DWORD>(concurrency_hint < DWORD(~0)
+        ? concurrency_hint : DWORD(~0)));
+  if (!iocp_.handle)
+  {
+    DWORD last_error = ::GetLastError();
+    boost::system::error_code ec(last_error,
+        boost::asio::error::get_system_category());
+    boost::asio::detail::throw_error(ec, "iocp");
+  }
+}
+
+void win_iocp_io_service::shutdown_service()
+{
+  ::InterlockedExchange(&shutdown_, 1);
+
+  if (timer_thread_.get())
+  {
+    LARGE_INTEGER timeout;
+    timeout.QuadPart = 1;
+    ::SetWaitableTimer(waitable_timer_.handle, &timeout, 1, 0, 0, FALSE);
+  }
+
+  while (::InterlockedExchangeAdd(&outstanding_work_, 0) > 0)
+  {
+    op_queue<win_iocp_operation> ops;
+    timer_queues_.get_all_timers(ops);
+    ops.push(completed_ops_);
+    if (!ops.empty())
+    {
+      while (win_iocp_operation* op = ops.front())
+      {
+        ops.pop();
+        ::InterlockedDecrement(&outstanding_work_);
+        op->destroy();
+      }
+    }
+    else
+    {
+      DWORD bytes_transferred = 0;
+      dword_ptr_t completion_key = 0;
+      LPOVERLAPPED overlapped = 0;
+      ::GetQueuedCompletionStatus(iocp_.handle, &bytes_transferred,
+          &completion_key, &overlapped, gqcs_timeout_);
+      if (overlapped)
+      {
+        ::InterlockedDecrement(&outstanding_work_);
+        static_cast<win_iocp_operation*>(overlapped)->destroy();
+      }
+    }
+  }
+
+  if (timer_thread_.get())
+    timer_thread_->join();
+}
+
+boost::system::error_code win_iocp_io_service::register_handle(
+    HANDLE handle, boost::system::error_code& ec)
+{
+  if (::CreateIoCompletionPort(handle, iocp_.handle, 0, 0) == 0)
+  {
+    DWORD last_error = ::GetLastError();
+    ec = boost::system::error_code(last_error,
+        boost::asio::error::get_system_category());
+  }
+  else
+  {
+    ec = boost::system::error_code();
+  }
+  return ec;
+}
+
+size_t win_iocp_io_service::run(boost::system::error_code& ec)
+{
+  if (::InterlockedExchangeAdd(&outstanding_work_, 0) == 0)
+  {
+    stop();
+    ec = boost::system::error_code();
+    return 0;
+  }
+
+  win_iocp_thread_info this_thread;
+  thread_call_stack::context ctx(this, this_thread);
+
+  size_t n = 0;
+  while (do_one(true, ec))
+    if (n != (std::numeric_limits<size_t>::max)())
+      ++n;
+  return n;
+}
+
+size_t win_iocp_io_service::run_one(boost::system::error_code& ec)
+{
+  if (::InterlockedExchangeAdd(&outstanding_work_, 0) == 0)
+  {
+    stop();
+    ec = boost::system::error_code();
+    return 0;
+  }
+
+  win_iocp_thread_info this_thread;
+  thread_call_stack::context ctx(this, this_thread);
+
+  return do_one(true, ec);
+}
+
+size_t win_iocp_io_service::poll(boost::system::error_code& ec)
+{
+  if (::InterlockedExchangeAdd(&outstanding_work_, 0) == 0)
+  {
+    stop();
+    ec = boost::system::error_code();
+    return 0;
+  }
+
+  win_iocp_thread_info this_thread;
+  thread_call_stack::context ctx(this, this_thread);
+
+  size_t n = 0;
+  while (do_one(false, ec))
+    if (n != (std::numeric_limits<size_t>::max)())
+      ++n;
+  return n;
+}
+
+size_t win_iocp_io_service::poll_one(boost::system::error_code& ec)
+{
+  if (::InterlockedExchangeAdd(&outstanding_work_, 0) == 0)
+  {
+    stop();
+    ec = boost::system::error_code();
+    return 0;
+  }
+
+  win_iocp_thread_info this_thread;
+  thread_call_stack::context ctx(this, this_thread);
+
+  return do_one(false, ec);
+}
+
+void win_iocp_io_service::stop()
+{
+  if (::InterlockedExchange(&stopped_, 1) == 0)
+  {
+    if (::InterlockedExchange(&stop_event_posted_, 1) == 0)
+    {
+      if (!::PostQueuedCompletionStatus(iocp_.handle, 0, 0, 0))
+      {
+        DWORD last_error = ::GetLastError();
+        boost::system::error_code ec(last_error,
+            boost::asio::error::get_system_category());
+        boost::asio::detail::throw_error(ec, "pqcs");
+      }
+    }
+  }
+}
+
+void win_iocp_io_service::post_deferred_completion(win_iocp_operation* op)
+{
+  // Flag the operation as ready.
+  op->ready_ = 1;
+
+  // Enqueue the operation on the I/O completion port.
+  if (!::PostQueuedCompletionStatus(iocp_.handle, 0, 0, op))
+  {
+    // Out of resources. Put on completed queue instead.
+    mutex::scoped_lock lock(dispatch_mutex_);
+    completed_ops_.push(op);
+    ::InterlockedExchange(&dispatch_required_, 1);
+  }
+}
+
+void win_iocp_io_service::post_deferred_completions(
+    op_queue<win_iocp_operation>& ops)
+{
+  while (win_iocp_operation* op = ops.front())
+  {
+    ops.pop();
+
+    // Flag the operation as ready.
+    op->ready_ = 1;
+
+    // Enqueue the operation on the I/O completion port.
+    if (!::PostQueuedCompletionStatus(iocp_.handle, 0, 0, op))
+    {
+      // Out of resources. Put on completed queue instead.
+      mutex::scoped_lock lock(dispatch_mutex_);
+      completed_ops_.push(op);
+      completed_ops_.push(ops);
+      ::InterlockedExchange(&dispatch_required_, 1);
+    }
+  }
+}
+
+void win_iocp_io_service::abandon_operations(
+    op_queue<win_iocp_operation>& ops)
+{
+  while (win_iocp_operation* op = ops.front())
+  {
+    ops.pop();
+    ::InterlockedDecrement(&outstanding_work_);
+    op->destroy();
+  }
+}
+
+void win_iocp_io_service::on_pending(win_iocp_operation* op)
+{
+  if (::InterlockedCompareExchange(&op->ready_, 1, 0) == 1)
+  {
+    // Enqueue the operation on the I/O completion port.
+    if (!::PostQueuedCompletionStatus(iocp_.handle,
+          0, overlapped_contains_result, op))
+    {
+      // Out of resources. Put on completed queue instead.
+      mutex::scoped_lock lock(dispatch_mutex_);
+      completed_ops_.push(op);
+      ::InterlockedExchange(&dispatch_required_, 1);
+    }
+  }
+}
+
+void win_iocp_io_service::on_completion(win_iocp_operation* op,
+    DWORD last_error, DWORD bytes_transferred)
+{
+  // Flag that the operation is ready for invocation.
+  op->ready_ = 1;
+
+  // Store results in the OVERLAPPED structure.
+  op->Internal = reinterpret_cast<ulong_ptr_t>(
+      &boost::asio::error::get_system_category());
+  op->Offset = last_error;
+  op->OffsetHigh = bytes_transferred;
+
+  // Enqueue the operation on the I/O completion port.
+  if (!::PostQueuedCompletionStatus(iocp_.handle,
+        0, overlapped_contains_result, op))
+  {
+    // Out of resources. Put on completed queue instead.
+    mutex::scoped_lock lock(dispatch_mutex_);
+    completed_ops_.push(op);
+    ::InterlockedExchange(&dispatch_required_, 1);
+  }
+}
+
+void win_iocp_io_service::on_completion(win_iocp_operation* op,
+    const boost::system::error_code& ec, DWORD bytes_transferred)
+{
+  // Flag that the operation is ready for invocation.
+  op->ready_ = 1;
+
+  // Store results in the OVERLAPPED structure.
+  op->Internal = reinterpret_cast<ulong_ptr_t>(&ec.category());
+  op->Offset = ec.value();
+  op->OffsetHigh = bytes_transferred;
+
+  // Enqueue the operation on the I/O completion port.
+  if (!::PostQueuedCompletionStatus(iocp_.handle,
+        0, overlapped_contains_result, op))
+  {
+    // Out of resources. Put on completed queue instead.
+    mutex::scoped_lock lock(dispatch_mutex_);
+    completed_ops_.push(op);
+    ::InterlockedExchange(&dispatch_required_, 1);
+  }
+}
+
+size_t win_iocp_io_service::do_one(bool block, boost::system::error_code& ec)
+{
+  for (;;)
+  {
+    // Try to acquire responsibility for dispatching timers and completed ops.
+    if (::InterlockedCompareExchange(&dispatch_required_, 0, 1) == 1)
+    {
+      mutex::scoped_lock lock(dispatch_mutex_);
+
+      // Dispatch pending timers and operations.
+      op_queue<win_iocp_operation> ops;
+      ops.push(completed_ops_);
+      timer_queues_.get_ready_timers(ops);
+      post_deferred_completions(ops);
+      update_timeout();
+    }
+
+    // Get the next operation from the queue.
+    DWORD bytes_transferred = 0;
+    dword_ptr_t completion_key = 0;
+    LPOVERLAPPED overlapped = 0;
+    ::SetLastError(0);
+    BOOL ok = ::GetQueuedCompletionStatus(iocp_.handle, &bytes_transferred,
+        &completion_key, &overlapped, block ? gqcs_timeout_ : 0);
+    DWORD last_error = ::GetLastError();
+
+    if (overlapped)
+    {
+      win_iocp_operation* op = static_cast<win_iocp_operation*>(overlapped);
+      boost::system::error_code result_ec(last_error,
+          boost::asio::error::get_system_category());
+
+      // We may have been passed the last_error and bytes_transferred in the
+      // OVERLAPPED structure itself.
+      if (completion_key == overlapped_contains_result)
+      {
+        result_ec = boost::system::error_code(static_cast<int>(op->Offset),
+            *reinterpret_cast<boost::system::error_category*>(op->Internal));
+        bytes_transferred = op->OffsetHigh;
+      }
+
+      // Otherwise ensure any result has been saved into the OVERLAPPED
+      // structure.
+      else
+      {
+        op->Internal = reinterpret_cast<ulong_ptr_t>(&result_ec.category());
+        op->Offset = result_ec.value();
+        op->OffsetHigh = bytes_transferred;
+      }
+
+      // Dispatch the operation only if ready. The operation may not be ready
+      // if the initiating function (e.g. a call to WSARecv) has not yet
+      // returned. This is because the initiating function still wants access
+      // to the operation's OVERLAPPED structure.
+      if (::InterlockedCompareExchange(&op->ready_, 1, 0) == 1)
+      {
+        // Ensure the count of outstanding work is decremented on block exit.
+        work_finished_on_block_exit on_exit = { this };
+        (void)on_exit;
+
+        op->complete(*this, result_ec, bytes_transferred);
+        ec = boost::system::error_code();
+        return 1;
+      }
+    }
+    else if (!ok)
+    {
+      if (last_error != WAIT_TIMEOUT)
+      {
+        ec = boost::system::error_code(last_error,
+            boost::asio::error::get_system_category());
+        return 0;
+      }
+
+      // If we're not polling we need to keep going until we get a real handler.
+      if (block)
+        continue;
+
+      ec = boost::system::error_code();
+      return 0;
+    }
+    else if (completion_key == wake_for_dispatch)
+    {
+      // We have been woken up to try to acquire responsibility for dispatching
+      // timers and completed operations.
+    }
+    else
+    {
+      // Indicate that there is no longer an in-flight stop event.
+      ::InterlockedExchange(&stop_event_posted_, 0);
+
+      // The stopped_ flag is always checked to ensure that any leftover
+      // stop events from a previous run invocation are ignored.
+      if (::InterlockedExchangeAdd(&stopped_, 0) != 0)
+      {
+        // Wake up next thread that is blocked on GetQueuedCompletionStatus.
+        if (::InterlockedExchange(&stop_event_posted_, 1) == 0)
+        {
+          if (!::PostQueuedCompletionStatus(iocp_.handle, 0, 0, 0))
+          {
+            last_error = ::GetLastError();
+            ec = boost::system::error_code(last_error,
+                boost::asio::error::get_system_category());
+            return 0;
+          }
+        }
+
+        ec = boost::system::error_code();
+        return 0;
+      }
+    }
+  }
+}
+
+DWORD win_iocp_io_service::get_gqcs_timeout()
+{
+  OSVERSIONINFOEX osvi;
+  ZeroMemory(&osvi, sizeof(osvi));
+  osvi.dwOSVersionInfoSize = sizeof(osvi);
+  osvi.dwMajorVersion = 6ul;
+
+  const uint64_t condition_mask = ::VerSetConditionMask(
+      0, VER_MAJORVERSION, VER_GREATER_EQUAL);
+
+  if (!!::VerifyVersionInfo(&osvi, VER_MAJORVERSION, condition_mask))
+    return INFINITE;
+
+  return default_gqcs_timeout;
+}
+
+void win_iocp_io_service::do_add_timer_queue(timer_queue_base& queue)
+{
+  mutex::scoped_lock lock(dispatch_mutex_);
+
+  timer_queues_.insert(&queue);
+
+  if (!waitable_timer_.handle)
+  {
+    waitable_timer_.handle = ::CreateWaitableTimer(0, FALSE, 0);
+    if (waitable_timer_.handle == 0)
+    {
+      DWORD last_error = ::GetLastError();
+      boost::system::error_code ec(last_error,
+          boost::asio::error::get_system_category());
+      boost::asio::detail::throw_error(ec, "timer");
+    }
+
+    LARGE_INTEGER timeout;
+    timeout.QuadPart = -max_timeout_usec;
+    timeout.QuadPart *= 10;
+    ::SetWaitableTimer(waitable_timer_.handle,
+        &timeout, max_timeout_msec, 0, 0, FALSE);
+  }
+
+  if (!timer_thread_.get())
+  {
+    timer_thread_function thread_function = { this };
+    timer_thread_.reset(new thread(thread_function, 65536));
+  }
+}
+
+void win_iocp_io_service::do_remove_timer_queue(timer_queue_base& queue)
+{
+  mutex::scoped_lock lock(dispatch_mutex_);
+
+  timer_queues_.erase(&queue);
+}
+
+void win_iocp_io_service::update_timeout()
+{
+  if (timer_thread_.get())
+  {
+    // There's no point updating the waitable timer if the new timeout period
+    // exceeds the maximum timeout. In that case, we might as well wait for the
+    // existing period of the timer to expire.
+    long timeout_usec = timer_queues_.wait_duration_usec(max_timeout_usec);
+    if (timeout_usec < max_timeout_usec)
+    {
+      LARGE_INTEGER timeout;
+      timeout.QuadPart = -timeout_usec;
+      timeout.QuadPart *= 10;
+      ::SetWaitableTimer(waitable_timer_.handle,
+          &timeout, max_timeout_msec, 0, 0, FALSE);
+    }
+  }
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WIN_IOCP_IO_SERVICE_IPP
diff --git a/ext/patches/boost/asio/detail/impl/win_iocp_serial_port_service.ipp b/ext/patches/boost/asio/detail/impl/win_iocp_serial_port_service.ipp
new file mode 100644
index 0000000..7a8e649
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/win_iocp_serial_port_service.ipp
@@ -0,0 +1,182 @@
+//
+// detail/impl/win_iocp_serial_port_service.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2008 Rep Invariant Systems, Inc. (info at repinvariant.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_WIN_IOCP_SERIAL_PORT_SERVICE_IPP
+#define BOOST_ASIO_DETAIL_IMPL_WIN_IOCP_SERIAL_PORT_SERVICE_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP) && defined(BOOST_ASIO_HAS_SERIAL_PORT)
+
+#include <cstring>
+#include <boost/asio/detail/win_iocp_serial_port_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+win_iocp_serial_port_service::win_iocp_serial_port_service(
+    boost::asio::io_service& io_service)
+  : handle_service_(io_service)
+{
+}
+
+void win_iocp_serial_port_service::shutdown_service()
+{
+}
+
+boost::system::error_code win_iocp_serial_port_service::open(
+    win_iocp_serial_port_service::implementation_type& impl,
+    const std::string& device, boost::system::error_code& ec)
+{
+  if (is_open(impl))
+  {
+    ec = boost::asio::error::already_open;
+    return ec;
+  }
+
+  // For convenience, add a leading \\.\ sequence if not already present.
+  std::string name = (device[0] == '\\') ? device : "\\\\.\\" + device;
+
+  // Open a handle to the serial port.
+  ::HANDLE handle = ::CreateFileA(name.c_str(),
+      GENERIC_READ | GENERIC_WRITE, 0, 0,
+      OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
+  if (handle == INVALID_HANDLE_VALUE)
+  {
+    DWORD last_error = ::GetLastError();
+    ec = boost::system::error_code(last_error,
+        boost::asio::error::get_system_category());
+    return ec;
+  }
+
+  // Determine the initial serial port parameters.
+  using namespace std; // For memset.
+  ::DCB dcb;
+  memset(&dcb, 0, sizeof(DCB));
+  dcb.DCBlength = sizeof(DCB);
+  if (!::GetCommState(handle, &dcb))
+  {
+    DWORD last_error = ::GetLastError();
+    ::CloseHandle(handle);
+    ec = boost::system::error_code(last_error,
+        boost::asio::error::get_system_category());
+    return ec;
+  }
+
+  // Set some default serial port parameters. This implementation does not
+  // support changing these, so they might as well be in a known state.
+  dcb.fBinary = TRUE; // Win32 only supports binary mode.
+  dcb.fDsrSensitivity = FALSE;
+  dcb.fNull = FALSE; // Do not ignore NULL characters.
+  dcb.fAbortOnError = FALSE; // Ignore serial framing errors.
+  if (!::SetCommState(handle, &dcb))
+  {
+    DWORD last_error = ::GetLastError();
+    ::CloseHandle(handle);
+    ec = boost::system::error_code(last_error,
+        boost::asio::error::get_system_category());
+    return ec;
+  }
+
+  // Set up timeouts so that the serial port will behave similarly to a
+  // network socket. Reads wait for at least one byte, then return with
+  // whatever they have. Writes return once everything is out the door.
+  ::COMMTIMEOUTS timeouts;
+  timeouts.ReadIntervalTimeout = 1;
+  timeouts.ReadTotalTimeoutMultiplier = 0;
+  timeouts.ReadTotalTimeoutConstant = 0;
+  timeouts.WriteTotalTimeoutMultiplier = 0;
+  timeouts.WriteTotalTimeoutConstant = 0;
+  if (!::SetCommTimeouts(handle, &timeouts))
+  {
+    DWORD last_error = ::GetLastError();
+    ::CloseHandle(handle);
+    ec = boost::system::error_code(last_error,
+        boost::asio::error::get_system_category());
+    return ec;
+  }
+
+  // We're done. Take ownership of the serial port handle.
+  if (handle_service_.assign(impl, handle, ec))
+    ::CloseHandle(handle);
+  return ec;
+}
+
+boost::system::error_code win_iocp_serial_port_service::do_set_option(
+    win_iocp_serial_port_service::implementation_type& impl,
+    win_iocp_serial_port_service::store_function_type store,
+    const void* option, boost::system::error_code& ec)
+{
+  using namespace std; // For memcpy.
+
+  ::DCB dcb;
+  memset(&dcb, 0, sizeof(DCB));
+  dcb.DCBlength = sizeof(DCB);
+  if (!::GetCommState(handle_service_.native_handle(impl), &dcb))
+  {
+    DWORD last_error = ::GetLastError();
+    ec = boost::system::error_code(last_error,
+        boost::asio::error::get_system_category());
+    return ec;
+  }
+
+  if (store(option, dcb, ec))
+    return ec;
+
+  if (!::SetCommState(handle_service_.native_handle(impl), &dcb))
+  {
+    DWORD last_error = ::GetLastError();
+    ec = boost::system::error_code(last_error,
+        boost::asio::error::get_system_category());
+    return ec;
+  }
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+boost::system::error_code win_iocp_serial_port_service::do_get_option(
+    const win_iocp_serial_port_service::implementation_type& impl,
+    win_iocp_serial_port_service::load_function_type load,
+    void* option, boost::system::error_code& ec) const
+{
+  using namespace std; // For memset.
+
+  ::DCB dcb;
+  memset(&dcb, 0, sizeof(DCB));
+  dcb.DCBlength = sizeof(DCB);
+  if (!::GetCommState(handle_service_.native_handle(impl), &dcb))
+  {
+    DWORD last_error = ::GetLastError();
+    ec = boost::system::error_code(last_error,
+        boost::asio::error::get_system_category());
+    return ec;
+  }
+
+  return load(option, dcb, ec);
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP) && defined(BOOST_ASIO_HAS_SERIAL_PORT)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WIN_IOCP_SERIAL_PORT_SERVICE_IPP
diff --git a/ext/patches/boost/asio/detail/impl/win_iocp_socket_service_base.ipp b/ext/patches/boost/asio/detail/impl/win_iocp_socket_service_base.ipp
new file mode 100644
index 0000000..99a90dc
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/win_iocp_socket_service_base.ipp
@@ -0,0 +1,730 @@
+//
+// detail/impl/win_iocp_socket_service_base.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_WIN_IOCP_SOCKET_SERVICE_BASE_IPP
+#define BOOST_ASIO_DETAIL_IMPL_WIN_IOCP_SOCKET_SERVICE_BASE_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/detail/win_iocp_socket_service_base.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+win_iocp_socket_service_base::win_iocp_socket_service_base(
+    boost::asio::io_service& io_service)
+  : io_service_(io_service),
+    iocp_service_(use_service<win_iocp_io_service>(io_service)),
+    reactor_(0),
+    connect_ex_(0),
+    mutex_(),
+    impl_list_(0)
+{
+}
+
+void win_iocp_socket_service_base::shutdown_service()
+{
+  // Close all implementations, causing all operations to complete.
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  base_implementation_type* impl = impl_list_;
+  while (impl)
+  {
+    boost::system::error_code ignored_ec;
+    close_for_destruction(*impl);
+    impl = impl->next_;
+  }
+}
+
+void win_iocp_socket_service_base::construct(
+    win_iocp_socket_service_base::base_implementation_type& impl)
+{
+  impl.socket_ = invalid_socket;
+  impl.state_ = 0;
+  impl.cancel_token_.reset();
+#if defined(BOOST_ASIO_ENABLE_CANCELIO)
+  impl.safe_cancellation_thread_id_ = 0;
+#endif // defined(BOOST_ASIO_ENABLE_CANCELIO)
+
+  // Insert implementation into linked list of all implementations.
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  impl.next_ = impl_list_;
+  impl.prev_ = 0;
+  if (impl_list_)
+    impl_list_->prev_ = &impl;
+  impl_list_ = &impl;
+}
+
+void win_iocp_socket_service_base::base_move_construct(
+    win_iocp_socket_service_base::base_implementation_type& impl,
+    win_iocp_socket_service_base::base_implementation_type& other_impl)
+{
+  impl.socket_ = other_impl.socket_;
+  other_impl.socket_ = invalid_socket;
+
+  impl.state_ = other_impl.state_;
+  other_impl.state_ = 0;
+
+  impl.cancel_token_ = other_impl.cancel_token_;
+  other_impl.cancel_token_.reset();
+
+#if defined(BOOST_ASIO_ENABLE_CANCELIO)
+  impl.safe_cancellation_thread_id_ = other_impl.safe_cancellation_thread_id_;
+  other_impl.safe_cancellation_thread_id_ = 0;
+#endif // defined(BOOST_ASIO_ENABLE_CANCELIO)
+
+  // Insert implementation into linked list of all implementations.
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  impl.next_ = impl_list_;
+  impl.prev_ = 0;
+  if (impl_list_)
+    impl_list_->prev_ = &impl;
+  impl_list_ = &impl;
+}
+
+void win_iocp_socket_service_base::base_move_assign(
+    win_iocp_socket_service_base::base_implementation_type& impl,
+    win_iocp_socket_service_base& other_service,
+    win_iocp_socket_service_base::base_implementation_type& other_impl)
+{
+  close_for_destruction(impl);
+
+  if (this != &other_service)
+  {
+    // Remove implementation from linked list of all implementations.
+    boost::asio::detail::mutex::scoped_lock lock(mutex_);
+    if (impl_list_ == &impl)
+      impl_list_ = impl.next_;
+    if (impl.prev_)
+      impl.prev_->next_ = impl.next_;
+    if (impl.next_)
+      impl.next_->prev_= impl.prev_;
+    impl.next_ = 0;
+    impl.prev_ = 0;
+  }
+
+  impl.socket_ = other_impl.socket_;
+  other_impl.socket_ = invalid_socket;
+
+  impl.state_ = other_impl.state_;
+  other_impl.state_ = 0;
+
+  impl.cancel_token_ = other_impl.cancel_token_;
+  other_impl.cancel_token_.reset();
+
+#if defined(BOOST_ASIO_ENABLE_CANCELIO)
+  impl.safe_cancellation_thread_id_ = other_impl.safe_cancellation_thread_id_;
+  other_impl.safe_cancellation_thread_id_ = 0;
+#endif // defined(BOOST_ASIO_ENABLE_CANCELIO)
+
+  if (this != &other_service)
+  {
+    // Insert implementation into linked list of all implementations.
+    boost::asio::detail::mutex::scoped_lock lock(other_service.mutex_);
+    impl.next_ = other_service.impl_list_;
+    impl.prev_ = 0;
+    if (other_service.impl_list_)
+      other_service.impl_list_->prev_ = &impl;
+    other_service.impl_list_ = &impl;
+  }
+}
+
+void win_iocp_socket_service_base::destroy(
+    win_iocp_socket_service_base::base_implementation_type& impl)
+{
+  close_for_destruction(impl);
+
+  // Remove implementation from linked list of all implementations.
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  if (impl_list_ == &impl)
+    impl_list_ = impl.next_;
+  if (impl.prev_)
+    impl.prev_->next_ = impl.next_;
+  if (impl.next_)
+    impl.next_->prev_= impl.prev_;
+  impl.next_ = 0;
+  impl.prev_ = 0;
+}
+
+boost::system::error_code win_iocp_socket_service_base::close(
+    win_iocp_socket_service_base::base_implementation_type& impl,
+    boost::system::error_code& ec)
+{
+  if (is_open(impl))
+  {
+    BOOST_ASIO_HANDLER_OPERATION(("socket", &impl, "close"));
+
+    // Check if the reactor was created, in which case we need to close the
+    // socket on the reactor as well to cancel any operations that might be
+    // running there.
+    reactor* r = static_cast<reactor*>(
+          interlocked_compare_exchange_pointer(
+            reinterpret_cast<void**>(&reactor_), 0, 0));
+    if (r)
+      r->deregister_descriptor(impl.socket_, impl.reactor_data_, true);
+  }
+
+  socket_ops::close(impl.socket_, impl.state_, false, ec);
+
+  impl.socket_ = invalid_socket;
+  impl.state_ = 0;
+  impl.cancel_token_.reset();
+#if defined(BOOST_ASIO_ENABLE_CANCELIO)
+  impl.safe_cancellation_thread_id_ = 0;
+#endif // defined(BOOST_ASIO_ENABLE_CANCELIO)
+
+  return ec;
+}
+
+boost::system::error_code win_iocp_socket_service_base::cancel(
+    win_iocp_socket_service_base::base_implementation_type& impl,
+    boost::system::error_code& ec)
+{
+  if (!is_open(impl))
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return ec;
+  }
+
+  BOOST_ASIO_HANDLER_OPERATION(("socket", &impl, "cancel"));
+
+  if (FARPROC cancel_io_ex_ptr = ::GetProcAddress(
+        ::GetModuleHandleA("KERNEL32"), "CancelIoEx"))
+  {
+    // The version of Windows supports cancellation from any thread.
+    typedef BOOL (WINAPI* cancel_io_ex_t)(HANDLE, LPOVERLAPPED);
+    cancel_io_ex_t cancel_io_ex = (cancel_io_ex_t)cancel_io_ex_ptr;
+    socket_type sock = impl.socket_;
+    HANDLE sock_as_handle = reinterpret_cast<HANDLE>(sock);
+    if (!cancel_io_ex(sock_as_handle, 0))
+    {
+      DWORD last_error = ::GetLastError();
+      if (last_error == ERROR_NOT_FOUND)
+      {
+        // ERROR_NOT_FOUND means that there were no operations to be
+        // cancelled. We swallow this error to match the behaviour on other
+        // platforms.
+        ec = boost::system::error_code();
+      }
+      else
+      {
+        ec = boost::system::error_code(last_error,
+            boost::asio::error::get_system_category());
+      }
+    }
+    else
+    {
+      ec = boost::system::error_code();
+    }
+  }
+#if defined(BOOST_ASIO_ENABLE_CANCELIO)
+  else if (impl.safe_cancellation_thread_id_ == 0)
+  {
+    // No operations have been started, so there's nothing to cancel.
+    ec = boost::system::error_code();
+  }
+  else if (impl.safe_cancellation_thread_id_ == ::GetCurrentThreadId())
+  {
+    // Asynchronous operations have been started from the current thread only,
+    // so it is safe to try to cancel them using CancelIo.
+    socket_type sock = impl.socket_;
+    HANDLE sock_as_handle = reinterpret_cast<HANDLE>(sock);
+    if (!::CancelIo(sock_as_handle))
+    {
+      DWORD last_error = ::GetLastError();
+      ec = boost::system::error_code(last_error,
+          boost::asio::error::get_system_category());
+    }
+    else
+    {
+      ec = boost::system::error_code();
+    }
+  }
+  else
+  {
+    // Asynchronous operations have been started from more than one thread,
+    // so cancellation is not safe.
+    ec = boost::asio::error::operation_not_supported;
+  }
+#else // defined(BOOST_ASIO_ENABLE_CANCELIO)
+  else
+  {
+    // Cancellation is not supported as CancelIo may not be used.
+    ec = boost::asio::error::operation_not_supported;
+  }
+#endif // defined(BOOST_ASIO_ENABLE_CANCELIO)
+
+  // Cancel any operations started via the reactor.
+  if (!ec)
+  {
+    reactor* r = static_cast<reactor*>(
+          interlocked_compare_exchange_pointer(
+            reinterpret_cast<void**>(&reactor_), 0, 0));
+    if (r)
+      r->cancel_ops(impl.socket_, impl.reactor_data_);
+  }
+
+  return ec;
+}
+
+boost::system::error_code win_iocp_socket_service_base::do_open(
+    win_iocp_socket_service_base::base_implementation_type& impl,
+    int family, int type, int protocol, boost::system::error_code& ec)
+{
+  if (is_open(impl))
+  {
+    ec = boost::asio::error::already_open;
+    return ec;
+  }
+
+  socket_holder sock(socket_ops::socket(family, type, protocol, ec));
+  if (sock.get() == invalid_socket)
+    return ec;
+
+  HANDLE sock_as_handle = reinterpret_cast<HANDLE>(sock.get());
+  if (iocp_service_.register_handle(sock_as_handle, ec))
+    return ec;
+
+  impl.socket_ = sock.release();
+  switch (type)
+  {
+  case SOCK_STREAM: impl.state_ = socket_ops::stream_oriented; break;
+  case SOCK_DGRAM: impl.state_ = socket_ops::datagram_oriented; break;
+  default: impl.state_ = 0; break;
+  }
+  impl.cancel_token_.reset(static_cast<void*>(0), socket_ops::noop_deleter());
+  ec = boost::system::error_code();
+  return ec;
+}
+
+boost::system::error_code win_iocp_socket_service_base::do_assign(
+    win_iocp_socket_service_base::base_implementation_type& impl,
+    int type, socket_type native_socket, boost::system::error_code& ec)
+{
+  if (is_open(impl))
+  {
+    ec = boost::asio::error::already_open;
+    return ec;
+  }
+
+  HANDLE sock_as_handle = reinterpret_cast<HANDLE>(native_socket);
+  if (iocp_service_.register_handle(sock_as_handle, ec))
+    return ec;
+
+  impl.socket_ = native_socket;
+  switch (type)
+  {
+  case SOCK_STREAM: impl.state_ = socket_ops::stream_oriented; break;
+  case SOCK_DGRAM: impl.state_ = socket_ops::datagram_oriented; break;
+  default: impl.state_ = 0; break;
+  }
+  impl.cancel_token_.reset(static_cast<void*>(0), socket_ops::noop_deleter());
+  ec = boost::system::error_code();
+  return ec;
+}
+
+void win_iocp_socket_service_base::start_send_op(
+    win_iocp_socket_service_base::base_implementation_type& impl,
+    WSABUF* buffers, std::size_t buffer_count,
+    socket_base::message_flags flags, bool noop, operation* op)
+{
+  update_cancellation_thread_id(impl);
+  iocp_service_.work_started();
+
+  if (noop)
+    iocp_service_.on_completion(op);
+  else if (!is_open(impl))
+    iocp_service_.on_completion(op, boost::asio::error::bad_descriptor);
+  else
+  {
+    DWORD bytes_transferred = 0;
+    int result = ::WSASend(impl.socket_, buffers,
+        static_cast<DWORD>(buffer_count), &bytes_transferred, flags, op, 0);
+    DWORD last_error = ::WSAGetLastError();
+    if (last_error == ERROR_PORT_UNREACHABLE)
+      last_error = WSAECONNREFUSED;
+    if (result != 0 && last_error != WSA_IO_PENDING)
+      iocp_service_.on_completion(op, last_error, bytes_transferred);
+    else
+      iocp_service_.on_pending(op);
+  }
+}
+
+void win_iocp_socket_service_base::start_send_to_op(
+    win_iocp_socket_service_base::base_implementation_type& impl,
+    WSABUF* buffers, std::size_t buffer_count,
+    const socket_addr_type* addr, int addrlen,
+    socket_base::message_flags flags, operation* op)
+{
+  update_cancellation_thread_id(impl);
+  iocp_service_.work_started();
+
+  if (!is_open(impl))
+    iocp_service_.on_completion(op, boost::asio::error::bad_descriptor);
+  else
+  {
+    DWORD bytes_transferred = 0;
+    int result = ::WSASendTo(impl.socket_, buffers,
+        static_cast<DWORD>(buffer_count),
+        &bytes_transferred, flags, addr, addrlen, op, 0);
+    DWORD last_error = ::WSAGetLastError();
+    if (last_error == ERROR_PORT_UNREACHABLE)
+      last_error = WSAECONNREFUSED;
+    if (result != 0 && last_error != WSA_IO_PENDING)
+      iocp_service_.on_completion(op, last_error, bytes_transferred);
+    else
+      iocp_service_.on_pending(op);
+  }
+}
+
+void win_iocp_socket_service_base::start_receive_op(
+    win_iocp_socket_service_base::base_implementation_type& impl,
+    WSABUF* buffers, std::size_t buffer_count,
+    socket_base::message_flags flags, bool noop, operation* op)
+{
+  update_cancellation_thread_id(impl);
+  iocp_service_.work_started();
+
+  if (noop)
+    iocp_service_.on_completion(op);
+  else if (!is_open(impl))
+    iocp_service_.on_completion(op, boost::asio::error::bad_descriptor);
+  else
+  {
+    DWORD bytes_transferred = 0;
+    DWORD recv_flags = flags;
+    int result = ::WSARecv(impl.socket_, buffers,
+        static_cast<DWORD>(buffer_count),
+        &bytes_transferred, &recv_flags, op, 0);
+    DWORD last_error = ::WSAGetLastError();
+    if (last_error == ERROR_NETNAME_DELETED)
+      last_error = WSAECONNRESET;
+    else if (last_error == ERROR_PORT_UNREACHABLE)
+      last_error = WSAECONNREFUSED;
+    if (result != 0 && last_error != WSA_IO_PENDING)
+      iocp_service_.on_completion(op, last_error, bytes_transferred);
+    else
+      iocp_service_.on_pending(op);
+  }
+}
+
+void win_iocp_socket_service_base::start_null_buffers_receive_op(
+    win_iocp_socket_service_base::base_implementation_type& impl,
+    socket_base::message_flags flags, reactor_op* op)
+{
+  if ((impl.state_ & socket_ops::stream_oriented) != 0)
+  {
+    // For stream sockets on Windows, we may issue a 0-byte overlapped
+    // WSARecv to wait until there is data available on the socket.
+    ::WSABUF buf = { 0, 0 };
+    start_receive_op(impl, &buf, 1, flags, false, op);
+  }
+  else
+  {
+    start_reactor_op(impl,
+        (flags & socket_base::message_out_of_band)
+          ? reactor::except_op : reactor::read_op,
+        op);
+  }
+}
+
+void win_iocp_socket_service_base::start_receive_from_op(
+    win_iocp_socket_service_base::base_implementation_type& impl,
+    WSABUF* buffers, std::size_t buffer_count, socket_addr_type* addr,
+    socket_base::message_flags flags, int* addrlen, operation* op)
+{
+  update_cancellation_thread_id(impl);
+  iocp_service_.work_started();
+
+  if (!is_open(impl))
+    iocp_service_.on_completion(op, boost::asio::error::bad_descriptor);
+  else
+  {
+    DWORD bytes_transferred = 0;
+    DWORD recv_flags = flags;
+    int result = ::WSARecvFrom(impl.socket_, buffers,
+        static_cast<DWORD>(buffer_count),
+        &bytes_transferred, &recv_flags, addr, addrlen, op, 0);
+    DWORD last_error = ::WSAGetLastError();
+    if (last_error == ERROR_PORT_UNREACHABLE)
+      last_error = WSAECONNREFUSED;
+    if (result != 0 && last_error != WSA_IO_PENDING)
+      iocp_service_.on_completion(op, last_error, bytes_transferred);
+    else
+      iocp_service_.on_pending(op);
+  }
+}
+
+void win_iocp_socket_service_base::start_accept_op(
+    win_iocp_socket_service_base::base_implementation_type& impl,
+    bool peer_is_open, socket_holder& new_socket, int family, int type,
+    int protocol, void* output_buffer, DWORD address_length, operation* op)
+{
+  update_cancellation_thread_id(impl);
+  iocp_service_.work_started();
+
+  if (!is_open(impl))
+    iocp_service_.on_completion(op, boost::asio::error::bad_descriptor);
+  else if (peer_is_open)
+    iocp_service_.on_completion(op, boost::asio::error::already_open);
+  else
+  {
+    boost::system::error_code ec;
+    new_socket.reset(socket_ops::socket(family, type, protocol, ec));
+    if (new_socket.get() == invalid_socket)
+      iocp_service_.on_completion(op, ec);
+    else
+    {
+      DWORD bytes_read = 0;
+      BOOL result = ::AcceptEx(impl.socket_, new_socket.get(), output_buffer,
+          0, address_length, address_length, &bytes_read, op);
+      DWORD last_error = ::WSAGetLastError();
+      if (!result && last_error != WSA_IO_PENDING)
+        iocp_service_.on_completion(op, last_error);
+      else
+        iocp_service_.on_pending(op);
+    }
+  }
+}
+
+void win_iocp_socket_service_base::restart_accept_op(
+    socket_type s, socket_holder& new_socket, int family, int type,
+    int protocol, void* output_buffer, DWORD address_length, operation* op)
+{
+  new_socket.reset();
+  iocp_service_.work_started();
+
+  boost::system::error_code ec;
+  new_socket.reset(socket_ops::socket(family, type, protocol, ec));
+  if (new_socket.get() == invalid_socket)
+    iocp_service_.on_completion(op, ec);
+  else
+  {
+    DWORD bytes_read = 0;
+    BOOL result = ::AcceptEx(s, new_socket.get(), output_buffer,
+        0, address_length, address_length, &bytes_read, op);
+    DWORD last_error = ::WSAGetLastError();
+    if (!result && last_error != WSA_IO_PENDING)
+      iocp_service_.on_completion(op, last_error);
+    else
+      iocp_service_.on_pending(op);
+  }
+}
+
+void win_iocp_socket_service_base::start_reactor_op(
+    win_iocp_socket_service_base::base_implementation_type& impl,
+    int op_type, reactor_op* op)
+{
+  reactor& r = get_reactor();
+  update_cancellation_thread_id(impl);
+
+  if (is_open(impl))
+  {
+    r.start_op(op_type, impl.socket_, impl.reactor_data_, op, false, false);
+    return;
+  }
+  else
+    op->ec_ = boost::asio::error::bad_descriptor;
+
+  iocp_service_.post_immediate_completion(op, false);
+}
+
+void win_iocp_socket_service_base::start_connect_op(
+    win_iocp_socket_service_base::base_implementation_type& impl,
+    int family, int type, const socket_addr_type* addr,
+    std::size_t addrlen, win_iocp_socket_connect_op_base* op)
+{
+  // If ConnectEx is available, use that.
+  if (family == BOOST_ASIO_OS_DEF(AF_INET)
+      || family == BOOST_ASIO_OS_DEF(AF_INET6))
+  {
+    if (connect_ex_fn connect_ex = get_connect_ex(impl, type))
+    {
+      union address_union
+      {
+        socket_addr_type base;
+        sockaddr_in4_type v4;
+        sockaddr_in6_type v6;
+      } a;
+
+      using namespace std; // For memset.
+      memset(&a, 0, sizeof(a));
+      a.base.sa_family = family;
+
+      socket_ops::bind(impl.socket_, &a.base,
+          family == BOOST_ASIO_OS_DEF(AF_INET)
+          ? sizeof(a.v4) : sizeof(a.v6), op->ec_);
+      if (op->ec_ && op->ec_ != boost::asio::error::invalid_argument)
+      {
+        iocp_service_.post_immediate_completion(op, false);
+        return;
+      }
+
+      op->connect_ex_ = true;
+      update_cancellation_thread_id(impl);
+      iocp_service_.work_started();
+
+      BOOL result = connect_ex(impl.socket_,
+          addr, static_cast<int>(addrlen), 0, 0, 0, op);
+      DWORD last_error = ::WSAGetLastError();
+      if (!result && last_error != WSA_IO_PENDING)
+        iocp_service_.on_completion(op, last_error);
+      else
+        iocp_service_.on_pending(op);
+      return;
+    }
+  }
+
+  // Otherwise, fall back to a reactor-based implementation.
+  reactor& r = get_reactor();
+  update_cancellation_thread_id(impl);
+
+  if ((impl.state_ & socket_ops::non_blocking) != 0
+      || socket_ops::set_internal_non_blocking(
+        impl.socket_, impl.state_, true, op->ec_))
+  {
+    if (socket_ops::connect(impl.socket_, addr, addrlen, op->ec_) != 0)
+    {
+      if (op->ec_ == boost::asio::error::in_progress
+          || op->ec_ == boost::asio::error::would_block)
+      {
+        op->ec_ = boost::system::error_code();
+        r.start_op(reactor::connect_op, impl.socket_,
+            impl.reactor_data_, op, false, false);
+        return;
+      }
+    }
+  }
+
+  r.post_immediate_completion(op, false);
+}
+
+void win_iocp_socket_service_base::close_for_destruction(
+    win_iocp_socket_service_base::base_implementation_type& impl)
+{
+  if (is_open(impl))
+  {
+    BOOST_ASIO_HANDLER_OPERATION(("socket", &impl, "close"));
+
+    // Check if the reactor was created, in which case we need to close the
+    // socket on the reactor as well to cancel any operations that might be
+    // running there.
+    reactor* r = static_cast<reactor*>(
+          interlocked_compare_exchange_pointer(
+            reinterpret_cast<void**>(&reactor_), 0, 0));
+    if (r)
+      r->deregister_descriptor(impl.socket_, impl.reactor_data_, true);
+  }
+
+  boost::system::error_code ignored_ec;
+  socket_ops::close(impl.socket_, impl.state_, true, ignored_ec);
+  impl.socket_ = invalid_socket;
+  impl.state_ = 0;
+  impl.cancel_token_.reset();
+#if defined(BOOST_ASIO_ENABLE_CANCELIO)
+  impl.safe_cancellation_thread_id_ = 0;
+#endif // defined(BOOST_ASIO_ENABLE_CANCELIO)
+}
+
+void win_iocp_socket_service_base::update_cancellation_thread_id(
+    win_iocp_socket_service_base::base_implementation_type& impl)
+{
+#if defined(BOOST_ASIO_ENABLE_CANCELIO)
+  if (impl.safe_cancellation_thread_id_ == 0)
+    impl.safe_cancellation_thread_id_ = ::GetCurrentThreadId();
+  else if (impl.safe_cancellation_thread_id_ != ::GetCurrentThreadId())
+    impl.safe_cancellation_thread_id_ = ~DWORD(0);
+#else // defined(BOOST_ASIO_ENABLE_CANCELIO)
+  (void)impl;
+#endif // defined(BOOST_ASIO_ENABLE_CANCELIO)
+}
+
+reactor& win_iocp_socket_service_base::get_reactor()
+{
+  reactor* r = static_cast<reactor*>(
+        interlocked_compare_exchange_pointer(
+          reinterpret_cast<void**>(&reactor_), 0, 0));
+  if (!r)
+  {
+    r = &(use_service<reactor>(io_service_));
+    interlocked_exchange_pointer(reinterpret_cast<void**>(&reactor_), r);
+  }
+  return *r;
+}
+
+win_iocp_socket_service_base::connect_ex_fn
+win_iocp_socket_service_base::get_connect_ex(
+    win_iocp_socket_service_base::base_implementation_type& impl, int type)
+{
+  if (type != BOOST_ASIO_OS_DEF(SOCK_STREAM)
+      && type != BOOST_ASIO_OS_DEF(SOCK_SEQPACKET))
+    return 0;
+
+  void* ptr = interlocked_compare_exchange_pointer(&connect_ex_, 0, 0);
+  if (!ptr)
+  {
+    GUID guid = { 0x25a207b9, 0xddf3, 0x4660,
+      { 0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e } };
+
+    DWORD bytes = 0;
+    if (::WSAIoctl(impl.socket_, SIO_GET_EXTENSION_FUNCTION_POINTER,
+          &guid, sizeof(guid), &ptr, sizeof(ptr), &bytes, 0, 0) != 0)
+    {
+      // Set connect_ex_ to a special value to indicate that ConnectEx is
+      // unavailable. That way we won't bother trying to look it up again.
+      ptr = this;
+    }
+
+    interlocked_exchange_pointer(&connect_ex_, ptr);
+  }
+
+  return reinterpret_cast<connect_ex_fn>(ptr == this ? 0 : ptr);
+}
+
+void* win_iocp_socket_service_base::interlocked_compare_exchange_pointer(
+    void** dest, void* exch, void* cmp)
+{
+#if defined(_M_IX86)
+  return reinterpret_cast<void*>(InterlockedCompareExchange(
+        reinterpret_cast<PLONG>(dest), reinterpret_cast<LONG>(exch),
+        reinterpret_cast<LONG>(cmp)));
+#else
+  return InterlockedCompareExchangePointer(dest, exch, cmp);
+#endif
+}
+
+void* win_iocp_socket_service_base::interlocked_exchange_pointer(
+    void** dest, void* val)
+{
+#if defined(_M_IX86)
+  return reinterpret_cast<void*>(InterlockedExchange(
+        reinterpret_cast<PLONG>(dest), reinterpret_cast<LONG>(val)));
+#else
+  return InterlockedExchangePointer(dest, val);
+#endif
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WIN_IOCP_SOCKET_SERVICE_BASE_IPP
diff --git a/ext/patches/boost/asio/detail/impl/win_mutex.ipp b/ext/patches/boost/asio/detail/impl/win_mutex.ipp
new file mode 100644
index 0000000..8661030
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/win_mutex.ipp
@@ -0,0 +1,80 @@
+//
+// detail/impl/win_mutex.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_WIN_MUTEX_IPP
+#define BOOST_ASIO_DETAIL_IMPL_WIN_MUTEX_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS)
+
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/detail/win_mutex.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+win_mutex::win_mutex()
+{
+  int error = do_init();
+  boost::system::error_code ec(error,
+      boost::asio::error::get_system_category());
+  boost::asio::detail::throw_error(ec, "mutex");
+}
+
+int win_mutex::do_init()
+{
+#if defined(__MINGW32__)
+  // Not sure if MinGW supports structured exception handling, so for now
+  // we'll just call the Windows API and hope.
+# if defined(UNDER_CE)
+  ::InitializeCriticalSection(&crit_section_);
+# else
+  if (!::InitializeCriticalSectionAndSpinCount(&crit_section_, 0x80000000))
+    return ::GetLastError();
+# endif
+  return 0;
+#else
+  __try
+  {
+# if defined(UNDER_CE)
+    ::InitializeCriticalSection(&crit_section_);
+# else
+    if (!::InitializeCriticalSectionAndSpinCount(&crit_section_, 0x80000000))
+      return ::GetLastError();
+# endif
+  }
+  __except(GetExceptionCode() == STATUS_NO_MEMORY
+      ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
+  {
+    return ERROR_OUTOFMEMORY;
+  }
+
+  return 0;
+#endif
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WIN_MUTEX_IPP
diff --git a/ext/patches/boost/asio/detail/impl/win_object_handle_service.ipp b/ext/patches/boost/asio/detail/impl/win_object_handle_service.ipp
new file mode 100644
index 0000000..938371d
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/win_object_handle_service.ipp
@@ -0,0 +1,446 @@
+//
+// detail/impl/win_object_handle_service.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2011 Boris Schaeling (boris at highscore.de)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_WIN_OBJECT_HANDLE_SERVICE_IPP
+#define BOOST_ASIO_DETAIL_IMPL_WIN_OBJECT_HANDLE_SERVICE_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE)
+
+#include <boost/asio/detail/win_object_handle_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+win_object_handle_service::win_object_handle_service(
+    boost::asio::io_service& io_service)
+  : io_service_(boost::asio::use_service<io_service_impl>(io_service)),
+    mutex_(),
+    impl_list_(0),
+    shutdown_(false)
+{
+}
+
+void win_object_handle_service::shutdown_service()
+{
+  mutex::scoped_lock lock(mutex_);
+
+  // Setting this flag to true prevents new objects from being registered, and
+  // new asynchronous wait operations from being started. We only need to worry
+  // about cleaning up the operations that are currently in progress.
+  shutdown_ = true;
+
+  op_queue<operation> ops;
+  for (implementation_type* impl = impl_list_; impl; impl = impl->next_)
+    ops.push(impl->op_queue_);
+
+  lock.unlock();
+
+  io_service_.abandon_operations(ops);
+}
+
+void win_object_handle_service::construct(
+    win_object_handle_service::implementation_type& impl)
+{
+  impl.handle_ = INVALID_HANDLE_VALUE;
+  impl.wait_handle_ = INVALID_HANDLE_VALUE;
+  impl.owner_ = this;
+
+  // Insert implementation into linked list of all implementations.
+  mutex::scoped_lock lock(mutex_);
+  if (!shutdown_)
+  {
+    impl.next_ = impl_list_;
+    impl.prev_ = 0;
+    if (impl_list_)
+      impl_list_->prev_ = &impl;
+    impl_list_ = &impl;
+  }
+}
+
+void win_object_handle_service::move_construct(
+    win_object_handle_service::implementation_type& impl,
+    win_object_handle_service::implementation_type& other_impl)
+{
+  mutex::scoped_lock lock(mutex_);
+
+  // Insert implementation into linked list of all implementations.
+  if (!shutdown_)
+  {
+    impl.next_ = impl_list_;
+    impl.prev_ = 0;
+    if (impl_list_)
+      impl_list_->prev_ = &impl;
+    impl_list_ = &impl;
+  }
+
+  impl.handle_ = other_impl.handle_;
+  other_impl.handle_ = INVALID_HANDLE_VALUE;
+  impl.wait_handle_ = other_impl.wait_handle_;
+  other_impl.wait_handle_ = INVALID_HANDLE_VALUE;
+  impl.op_queue_.push(other_impl.op_queue_);
+  impl.owner_ = this;
+
+  // We must not hold the lock while calling UnregisterWaitEx. This is because
+  // the registered callback function might be invoked while we are waiting for
+  // UnregisterWaitEx to complete.
+  lock.unlock();
+
+  if (impl.wait_handle_ != INVALID_HANDLE_VALUE)
+    ::UnregisterWaitEx(impl.wait_handle_, INVALID_HANDLE_VALUE);
+
+  if (!impl.op_queue_.empty())
+    register_wait_callback(impl, lock);
+}
+
+void win_object_handle_service::move_assign(
+    win_object_handle_service::implementation_type& impl,
+    win_object_handle_service& other_service,
+    win_object_handle_service::implementation_type& other_impl)
+{
+  boost::system::error_code ignored_ec;
+  close(impl, ignored_ec);
+
+  mutex::scoped_lock lock(mutex_);
+
+  if (this != &other_service)
+  {
+    // Remove implementation from linked list of all implementations.
+    if (impl_list_ == &impl)
+      impl_list_ = impl.next_;
+    if (impl.prev_)
+      impl.prev_->next_ = impl.next_;
+    if (impl.next_)
+      impl.next_->prev_= impl.prev_;
+    impl.next_ = 0;
+    impl.prev_ = 0;
+  }
+
+  impl.handle_ = other_impl.handle_;
+  other_impl.handle_ = INVALID_HANDLE_VALUE;
+  impl.wait_handle_ = other_impl.wait_handle_;
+  other_impl.wait_handle_ = INVALID_HANDLE_VALUE;
+  impl.op_queue_.push(other_impl.op_queue_);
+  impl.owner_ = this;
+
+  if (this != &other_service)
+  {
+    // Insert implementation into linked list of all implementations.
+    impl.next_ = other_service.impl_list_;
+    impl.prev_ = 0;
+    if (other_service.impl_list_)
+      other_service.impl_list_->prev_ = &impl;
+    other_service.impl_list_ = &impl;
+  }
+
+  // We must not hold the lock while calling UnregisterWaitEx. This is because
+  // the registered callback function might be invoked while we are waiting for
+  // UnregisterWaitEx to complete.
+  lock.unlock();
+
+  if (impl.wait_handle_ != INVALID_HANDLE_VALUE)
+    ::UnregisterWaitEx(impl.wait_handle_, INVALID_HANDLE_VALUE);
+
+  if (!impl.op_queue_.empty())
+    register_wait_callback(impl, lock);
+}
+
+void win_object_handle_service::destroy(
+    win_object_handle_service::implementation_type& impl)
+{
+  mutex::scoped_lock lock(mutex_);
+
+  // Remove implementation from linked list of all implementations.
+  if (impl_list_ == &impl)
+    impl_list_ = impl.next_;
+  if (impl.prev_)
+    impl.prev_->next_ = impl.next_;
+  if (impl.next_)
+    impl.next_->prev_= impl.prev_;
+  impl.next_ = 0;
+  impl.prev_ = 0;
+
+  if (is_open(impl))
+  {
+    BOOST_ASIO_HANDLER_OPERATION(("object_handle", &impl, "close"));
+
+    HANDLE wait_handle = impl.wait_handle_;
+    impl.wait_handle_ = INVALID_HANDLE_VALUE;
+
+    op_queue<operation> ops;
+    while (wait_op* op = impl.op_queue_.front())
+    {
+      op->ec_ = boost::asio::error::operation_aborted;
+      impl.op_queue_.pop();
+      ops.push(op);
+    }
+
+    // We must not hold the lock while calling UnregisterWaitEx. This is
+    // because the registered callback function might be invoked while we are
+    // waiting for UnregisterWaitEx to complete.
+    lock.unlock();
+
+    if (wait_handle != INVALID_HANDLE_VALUE)
+      ::UnregisterWaitEx(wait_handle, INVALID_HANDLE_VALUE);
+
+    ::CloseHandle(impl.handle_);
+    impl.handle_ = INVALID_HANDLE_VALUE;
+
+    io_service_.post_deferred_completions(ops);
+  }
+}
+
+boost::system::error_code win_object_handle_service::assign(
+    win_object_handle_service::implementation_type& impl,
+    const native_handle_type& handle, boost::system::error_code& ec)
+{
+  if (is_open(impl))
+  {
+    ec = boost::asio::error::already_open;
+    return ec;
+  }
+
+  impl.handle_ = handle;
+  ec = boost::system::error_code();
+  return ec;
+}
+
+boost::system::error_code win_object_handle_service::close(
+    win_object_handle_service::implementation_type& impl,
+    boost::system::error_code& ec)
+{
+  if (is_open(impl))
+  {
+    BOOST_ASIO_HANDLER_OPERATION(("object_handle", &impl, "close"));
+
+    mutex::scoped_lock lock(mutex_);
+
+    HANDLE wait_handle = impl.wait_handle_;
+    impl.wait_handle_ = INVALID_HANDLE_VALUE;
+
+    op_queue<operation> completed_ops;
+    while (wait_op* op = impl.op_queue_.front())
+    {
+      impl.op_queue_.pop();
+      op->ec_ = boost::asio::error::operation_aborted;
+      completed_ops.push(op);
+    }
+
+    // We must not hold the lock while calling UnregisterWaitEx. This is
+    // because the registered callback function might be invoked while we are
+    // waiting for UnregisterWaitEx to complete.
+    lock.unlock();
+
+    if (wait_handle != INVALID_HANDLE_VALUE)
+      ::UnregisterWaitEx(wait_handle, INVALID_HANDLE_VALUE);
+
+    if (::CloseHandle(impl.handle_))
+    {
+      impl.handle_ = INVALID_HANDLE_VALUE;
+      ec = boost::system::error_code();
+    }
+    else
+    {
+      DWORD last_error = ::GetLastError();
+      ec = boost::system::error_code(last_error,
+          boost::asio::error::get_system_category());
+    }
+
+    io_service_.post_deferred_completions(completed_ops);
+  }
+  else
+  {
+    ec = boost::system::error_code();
+  }
+
+  return ec;
+}
+
+boost::system::error_code win_object_handle_service::cancel(
+    win_object_handle_service::implementation_type& impl,
+    boost::system::error_code& ec)
+{
+  if (is_open(impl))
+  {
+    BOOST_ASIO_HANDLER_OPERATION(("object_handle", &impl, "cancel"));
+
+    mutex::scoped_lock lock(mutex_);
+
+    HANDLE wait_handle = impl.wait_handle_;
+    impl.wait_handle_ = INVALID_HANDLE_VALUE;
+
+    op_queue<operation> completed_ops;
+    while (wait_op* op = impl.op_queue_.front())
+    {
+      op->ec_ = boost::asio::error::operation_aborted;
+      impl.op_queue_.pop();
+      completed_ops.push(op);
+    }
+
+    // We must not hold the lock while calling UnregisterWaitEx. This is
+    // because the registered callback function might be invoked while we are
+    // waiting for UnregisterWaitEx to complete.
+    lock.unlock();
+
+    if (wait_handle != INVALID_HANDLE_VALUE)
+      ::UnregisterWaitEx(wait_handle, INVALID_HANDLE_VALUE);
+
+    ec = boost::system::error_code();
+
+    io_service_.post_deferred_completions(completed_ops);
+  }
+  else
+  {
+    ec = boost::asio::error::bad_descriptor;
+  }
+
+  return ec;
+}
+
+void win_object_handle_service::wait(
+    win_object_handle_service::implementation_type& impl,
+    boost::system::error_code& ec)
+{
+  switch (::WaitForSingleObject(impl.handle_, INFINITE))
+  {
+  case WAIT_FAILED:
+    {
+      DWORD last_error = ::GetLastError();
+      ec = boost::system::error_code(last_error,
+          boost::asio::error::get_system_category());
+      break;
+    }
+  case WAIT_OBJECT_0:
+  case WAIT_ABANDONED:
+  default:
+    ec = boost::system::error_code();
+    break;
+  }
+}
+
+void win_object_handle_service::start_wait_op(
+    win_object_handle_service::implementation_type& impl, wait_op* op)
+{
+  io_service_.work_started();
+
+  if (is_open(impl))
+  {
+    mutex::scoped_lock lock(mutex_);
+
+    if (!shutdown_)
+    {
+      impl.op_queue_.push(op);
+
+      // Only the first operation to be queued gets to register a wait callback.
+      // Subsequent operations have to wait for the first to finish.
+      if (impl.op_queue_.front() == op)
+        register_wait_callback(impl, lock);
+    }
+    else
+    {
+      lock.unlock();
+      io_service_.post_deferred_completion(op);
+    }
+  }
+  else
+  {
+    op->ec_ = boost::asio::error::bad_descriptor;
+    io_service_.post_deferred_completion(op);
+  }
+}
+
+void win_object_handle_service::register_wait_callback(
+    win_object_handle_service::implementation_type& impl,
+    mutex::scoped_lock& lock)
+{
+  lock.lock();
+
+  if (!RegisterWaitForSingleObject(&impl.wait_handle_,
+        impl.handle_, &win_object_handle_service::wait_callback,
+        &impl, INFINITE, WT_EXECUTEONLYONCE))
+  {
+    DWORD last_error = ::GetLastError();
+    boost::system::error_code ec(last_error,
+        boost::asio::error::get_system_category());
+
+    op_queue<operation> completed_ops;
+    while (wait_op* op = impl.op_queue_.front())
+    {
+      op->ec_ = ec;
+      impl.op_queue_.pop();
+      completed_ops.push(op);
+    }
+
+    lock.unlock();
+    io_service_.post_deferred_completions(completed_ops);
+  }
+}
+
+void win_object_handle_service::wait_callback(PVOID param, BOOLEAN)
+{
+  implementation_type* impl = static_cast<implementation_type*>(param);
+  mutex::scoped_lock lock(impl->owner_->mutex_);
+
+  if (impl->wait_handle_ != INVALID_HANDLE_VALUE)
+  {
+    ::UnregisterWaitEx(impl->wait_handle_, NULL);
+    impl->wait_handle_ = INVALID_HANDLE_VALUE;
+  }
+
+  if (wait_op* op = impl->op_queue_.front())
+  {
+    op_queue<operation> completed_ops;
+
+    op->ec_ = boost::system::error_code();
+    impl->op_queue_.pop();
+    completed_ops.push(op);
+
+    if (!impl->op_queue_.empty())
+    {
+      if (!RegisterWaitForSingleObject(&impl->wait_handle_,
+            impl->handle_, &win_object_handle_service::wait_callback,
+            param, INFINITE, WT_EXECUTEONLYONCE))
+      {
+        DWORD last_error = ::GetLastError();
+        boost::system::error_code ec(last_error,
+            boost::asio::error::get_system_category());
+
+        while ((op = impl->op_queue_.front()) != 0)
+        {
+          op->ec_ = ec;
+          impl->op_queue_.pop();
+          completed_ops.push(op);
+        }
+      }
+    }
+
+    lock.unlock();
+    impl->owner_->io_service_.post_deferred_completions(completed_ops);
+  }
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WIN_OBJECT_HANDLE_SERVICE_IPP
diff --git a/ext/patches/boost/asio/detail/impl/win_static_mutex.ipp b/ext/patches/boost/asio/detail/impl/win_static_mutex.ipp
new file mode 100644
index 0000000..3d9a484
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/win_static_mutex.ipp
@@ -0,0 +1,120 @@
+//
+// detail/impl/win_static_mutex.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_WIN_STATIC_MUTEX_IPP
+#define BOOST_ASIO_DETAIL_IMPL_WIN_STATIC_MUTEX_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS)
+
+#include <cstdio>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/detail/win_static_mutex.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+void win_static_mutex::init()
+{
+  int error = do_init();
+  boost::system::error_code ec(error,
+      boost::asio::error::get_system_category());
+  boost::asio::detail::throw_error(ec, "static_mutex");
+}
+
+int win_static_mutex::do_init()
+{
+  using namespace std; // For sprintf.
+  wchar_t mutex_name[128];
+#if defined(BOOST_ASIO_HAS_SECURE_RTL)
+  swprintf_s(
+#else // defined(BOOST_ASIO_HAS_SECURE_RTL)
+  _snwprintf(
+#endif // defined(BOOST_ASIO_HAS_SECURE_RTL)
+      mutex_name, 128, L"asio-58CCDC44-6264-4842-90C2-F3C545CB8AA7-%u-%p",
+      static_cast<unsigned int>(::GetCurrentProcessId()), this);
+
+  HANDLE mutex = ::CreateMutexW(0, TRUE, mutex_name);
+  DWORD last_error = ::GetLastError();
+  if (mutex == 0)
+    return ::GetLastError();
+
+  if (last_error == ERROR_ALREADY_EXISTS)
+    ::WaitForSingleObject(mutex, INFINITE);
+
+  if (initialised_)
+  {
+    ::ReleaseMutex(mutex);
+    ::CloseHandle(mutex);
+    return 0;
+  }
+
+#if defined(__MINGW32__)
+  // Not sure if MinGW supports structured exception handling, so for now
+  // we'll just call the Windows API and hope.
+# if defined(UNDER_CE)
+  ::InitializeCriticalSection(&crit_section_);
+# else
+  if (!::InitializeCriticalSectionAndSpinCount(&crit_section_, 0x80000000))
+  {
+    last_error = ::GetLastError();
+    ::ReleaseMutex(mutex);
+    ::CloseHandle(mutex);
+    return last_error;
+  }
+# endif
+#else
+  __try
+  {
+# if defined(UNDER_CE)
+    ::InitializeCriticalSection(&crit_section_);
+# else
+    if (!::InitializeCriticalSectionAndSpinCount(&crit_section_, 0x80000000))
+    {
+      last_error = ::GetLastError();
+      ::ReleaseMutex(mutex);
+      ::CloseHandle(mutex);
+      return last_error;
+    }
+# endif
+  }
+  __except(GetExceptionCode() == STATUS_NO_MEMORY
+      ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
+  {
+    ::ReleaseMutex(mutex);
+    ::CloseHandle(mutex);
+    return ERROR_OUTOFMEMORY;
+  }
+#endif
+
+  initialised_ = true;
+  ::ReleaseMutex(mutex);
+  ::CloseHandle(mutex);
+  return 0;
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WIN_STATIC_MUTEX_IPP
diff --git a/ext/patches/boost/asio/detail/impl/win_thread.ipp b/ext/patches/boost/asio/detail/impl/win_thread.ipp
new file mode 100644
index 0000000..26d0ad9
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/win_thread.ipp
@@ -0,0 +1,141 @@
+//
+// detail/impl/win_thread.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_WIN_THREAD_IPP
+#define BOOST_ASIO_DETAIL_IMPL_WIN_THREAD_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS) && !defined(UNDER_CE)
+
+#include <process.h>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/detail/win_thread.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+win_thread::~win_thread()
+{
+  ::CloseHandle(thread_);
+
+  // The exit_event_ handle is deliberately allowed to leak here since it
+  // is an error for the owner of an internal thread not to join() it.
+}
+
+void win_thread::join()
+{
+  HANDLE handles[2] = { exit_event_, thread_ };
+  ::WaitForMultipleObjects(2, handles, FALSE, INFINITE);
+  ::CloseHandle(exit_event_);
+  if (terminate_threads())
+  {
+    ::TerminateThread(thread_, 0);
+  }
+  else
+  {
+    ::QueueUserAPC(apc_function, thread_, 0);
+    ::WaitForSingleObject(thread_, INFINITE);
+  }
+}
+
+void win_thread::start_thread(func_base* arg, unsigned int stack_size)
+{
+  ::HANDLE entry_event = 0;
+  arg->entry_event_ = entry_event = ::CreateEvent(0, true, false, 0);
+  if (!entry_event)
+  {
+    DWORD last_error = ::GetLastError();
+    delete arg;
+    boost::system::error_code ec(last_error,
+        boost::asio::error::get_system_category());
+    boost::asio::detail::throw_error(ec, "thread.entry_event");
+  }
+
+  arg->exit_event_ = exit_event_ = ::CreateEvent(0, true, false, 0);
+  if (!exit_event_)
+  {
+    DWORD last_error = ::GetLastError();
+    delete arg;
+    boost::system::error_code ec(last_error,
+        boost::asio::error::get_system_category());
+    boost::asio::detail::throw_error(ec, "thread.exit_event");
+  }
+
+  unsigned int thread_id = 0;
+  thread_ = reinterpret_cast<HANDLE>(::_beginthreadex(0,
+        stack_size, win_thread_function, arg, 0, &thread_id));
+  if (!thread_)
+  {
+    DWORD last_error = ::GetLastError();
+    delete arg;
+    if (entry_event)
+      ::CloseHandle(entry_event);
+    if (exit_event_)
+      ::CloseHandle(exit_event_);
+    boost::system::error_code ec(last_error,
+        boost::asio::error::get_system_category());
+    boost::asio::detail::throw_error(ec, "thread");
+  }
+
+  if (entry_event)
+  {
+    ::WaitForSingleObject(entry_event, INFINITE);
+    ::CloseHandle(entry_event);
+  }
+}
+
+unsigned int __stdcall win_thread_function(void* arg)
+{
+  win_thread::auto_func_base_ptr func = {
+      static_cast<win_thread::func_base*>(arg) };
+
+  ::SetEvent(func.ptr->entry_event_);
+
+  func.ptr->run();
+
+  // Signal that the thread has finished its work, but rather than returning go
+  // to sleep to put the thread into a well known state. If the thread is being
+  // joined during global object destruction then it may be killed using
+  // TerminateThread (to avoid a deadlock in DllMain). Otherwise, the SleepEx
+  // call will be interrupted using QueueUserAPC and the thread will shut down
+  // cleanly.
+  HANDLE exit_event = func.ptr->exit_event_;
+  delete func.ptr;
+  func.ptr = 0;
+  ::SetEvent(exit_event);
+  ::SleepEx(INFINITE, TRUE);
+
+  return 0;
+}
+
+#if defined(WINVER) && (WINVER < 0x0500)
+void __stdcall apc_function(ULONG) {}
+#else
+void __stdcall apc_function(ULONG_PTR) {}
+#endif
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS) && !defined(UNDER_CE)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WIN_THREAD_IPP
diff --git a/ext/patches/boost/asio/detail/impl/win_tss_ptr.ipp b/ext/patches/boost/asio/detail/impl/win_tss_ptr.ipp
new file mode 100644
index 0000000..4b3bc38
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/win_tss_ptr.ipp
@@ -0,0 +1,59 @@
+//
+// detail/impl/win_tss_ptr.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_WIN_TSS_PTR_IPP
+#define BOOST_ASIO_DETAIL_IMPL_WIN_TSS_PTR_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS)
+
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/detail/win_tss_ptr.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+DWORD win_tss_ptr_create()
+{
+#if defined(UNDER_CE)
+  enum { out_of_indexes = 0xFFFFFFFF };
+#else
+  enum { out_of_indexes = TLS_OUT_OF_INDEXES };
+#endif
+
+  DWORD tss_key = ::TlsAlloc();
+  if (tss_key == out_of_indexes)
+  {
+    DWORD last_error = ::GetLastError();
+    boost::system::error_code ec(last_error,
+        boost::asio::error::get_system_category());
+    boost::asio::detail::throw_error(ec, "tss");
+  }
+  return tss_key;
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WIN_TSS_PTR_IPP
diff --git a/ext/patches/boost/asio/detail/impl/winrt_ssocket_service_base.ipp b/ext/patches/boost/asio/detail/impl/winrt_ssocket_service_base.ipp
new file mode 100644
index 0000000..ae896d4
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/winrt_ssocket_service_base.ipp
@@ -0,0 +1,614 @@
+//
+// detail/impl/winrt_ssocket_service_base.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_WINRT_SSOCKET_SERVICE_BASE_IPP
+#define BOOST_ASIO_DETAIL_IMPL_WINRT_SSOCKET_SERVICE_BASE_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <cstring>
+#include <boost/asio/detail/winrt_ssocket_service_base.hpp>
+#include <boost/asio/detail/winrt_async_op.hpp>
+#include <boost/asio/detail/winrt_utils.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+winrt_ssocket_service_base::winrt_ssocket_service_base(
+    boost::asio::io_service& io_service)
+  : io_service_(use_service<io_service_impl>(io_service)),
+    async_manager_(use_service<winrt_async_manager>(io_service)),
+    mutex_(),
+    impl_list_(0)
+{
+}
+
+void winrt_ssocket_service_base::shutdown_service()
+{
+  // Close all implementations, causing all operations to complete.
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  base_implementation_type* impl = impl_list_;
+  while (impl)
+  {
+    boost::system::error_code ignored_ec;
+    close(*impl, ignored_ec);
+    impl = impl->next_;
+  }
+}
+
+void winrt_ssocket_service_base::construct(
+    winrt_ssocket_service_base::base_implementation_type& impl)
+{
+  // Insert implementation into linked list of all implementations.
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  impl.next_ = impl_list_;
+  impl.prev_ = 0;
+  if (impl_list_)
+    impl_list_->prev_ = &impl;
+  impl_list_ = &impl;
+}
+
+void winrt_ssocket_service_base::base_move_construct(
+    winrt_ssocket_service_base::base_implementation_type& impl,
+    winrt_ssocket_service_base::base_implementation_type& other_impl)
+{
+  impl.socket_ = other_impl.socket_;
+  other_impl.socket_ = nullptr;
+
+  // Insert implementation into linked list of all implementations.
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  impl.next_ = impl_list_;
+  impl.prev_ = 0;
+  if (impl_list_)
+    impl_list_->prev_ = &impl;
+  impl_list_ = &impl;
+}
+
+void winrt_ssocket_service_base::base_move_assign(
+    winrt_ssocket_service_base::base_implementation_type& impl,
+    winrt_ssocket_service_base& other_service,
+    winrt_ssocket_service_base::base_implementation_type& other_impl)
+{
+  boost::system::error_code ignored_ec;
+  close(impl, ignored_ec);
+
+  if (this != &other_service)
+  {
+    // Remove implementation from linked list of all implementations.
+    boost::asio::detail::mutex::scoped_lock lock(mutex_);
+    if (impl_list_ == &impl)
+      impl_list_ = impl.next_;
+    if (impl.prev_)
+      impl.prev_->next_ = impl.next_;
+    if (impl.next_)
+      impl.next_->prev_= impl.prev_;
+    impl.next_ = 0;
+    impl.prev_ = 0;
+  }
+
+  impl.socket_ = other_impl.socket_;
+  other_impl.socket_ = nullptr;
+
+  if (this != &other_service)
+  {
+    // Insert implementation into linked list of all implementations.
+    boost::asio::detail::mutex::scoped_lock lock(other_service.mutex_);
+    impl.next_ = other_service.impl_list_;
+    impl.prev_ = 0;
+    if (other_service.impl_list_)
+      other_service.impl_list_->prev_ = &impl;
+    other_service.impl_list_ = &impl;
+  }
+}
+
+void winrt_ssocket_service_base::destroy(
+    winrt_ssocket_service_base::base_implementation_type& impl)
+{
+  boost::system::error_code ignored_ec;
+  close(impl, ignored_ec);
+
+  // Remove implementation from linked list of all implementations.
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  if (impl_list_ == &impl)
+    impl_list_ = impl.next_;
+  if (impl.prev_)
+    impl.prev_->next_ = impl.next_;
+  if (impl.next_)
+    impl.next_->prev_= impl.prev_;
+  impl.next_ = 0;
+  impl.prev_ = 0;
+}
+
+boost::system::error_code winrt_ssocket_service_base::close(
+    winrt_ssocket_service_base::base_implementation_type& impl,
+    boost::system::error_code& ec)
+{
+  if (impl.socket_)
+  {
+    delete impl.socket_;
+    impl.socket_ = nullptr;
+  }
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+std::size_t winrt_ssocket_service_base::do_get_endpoint(
+    const base_implementation_type& impl, bool local,
+    void* addr, std::size_t addr_len, boost::system::error_code& ec) const
+{
+  if (!is_open(impl))
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return addr_len;
+  }
+
+  try
+  {
+    std::string addr_string = winrt_utils::string(local
+        ? impl.socket_->Information->LocalAddress->CanonicalName
+        : impl.socket_->Information->RemoteAddress->CanonicalName);
+    unsigned short port = winrt_utils::integer(local
+        ? impl.socket_->Information->LocalPort
+        : impl.socket_->Information->RemotePort);
+    unsigned long scope = 0;
+
+    switch (reinterpret_cast<const socket_addr_type*>(addr)->sa_family)
+    {
+    case BOOST_ASIO_OS_DEF(AF_INET):
+      if (addr_len < sizeof(sockaddr_in4_type))
+      {
+        ec = boost::asio::error::invalid_argument;
+        return addr_len;
+      }
+      else
+      {
+        socket_ops::inet_pton(BOOST_ASIO_OS_DEF(AF_INET), addr_string.c_str(),
+            &reinterpret_cast<sockaddr_in4_type*>(addr)->sin_addr, &scope, ec);
+        reinterpret_cast<sockaddr_in4_type*>(addr)->sin_port
+          = socket_ops::host_to_network_short(port);
+        ec = boost::system::error_code();
+        return sizeof(sockaddr_in4_type);
+      }
+    case BOOST_ASIO_OS_DEF(AF_INET6):
+      if (addr_len < sizeof(sockaddr_in6_type))
+      {
+        ec = boost::asio::error::invalid_argument;
+        return addr_len;
+      }
+      else
+      {
+        socket_ops::inet_pton(BOOST_ASIO_OS_DEF(AF_INET6), addr_string.c_str(),
+            &reinterpret_cast<sockaddr_in6_type*>(addr)->sin6_addr, &scope, ec);
+        reinterpret_cast<sockaddr_in6_type*>(addr)->sin6_port
+          = socket_ops::host_to_network_short(port);
+        ec = boost::system::error_code();
+        return sizeof(sockaddr_in6_type);
+      }
+    default:
+      ec = boost::asio::error::address_family_not_supported;
+      return addr_len;
+    }
+  }
+  catch (Platform::Exception^ e)
+  {
+    ec = boost::system::error_code(e->HResult,
+        boost::system::system_category());
+    return addr_len;
+  }
+}
+
+boost::system::error_code winrt_ssocket_service_base::do_set_option(
+    winrt_ssocket_service_base::base_implementation_type& impl,
+    int level, int optname, const void* optval,
+    std::size_t optlen, boost::system::error_code& ec)
+{
+  if (!is_open(impl))
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return ec;
+  }
+
+  try
+  {
+    if (level == BOOST_ASIO_OS_DEF(SOL_SOCKET)
+        && optname == BOOST_ASIO_OS_DEF(SO_KEEPALIVE))
+    {
+      if (optlen == sizeof(int))
+      {
+        int value = 0;
+        std::memcpy(&value, optval, optlen);
+        impl.socket_->Control->KeepAlive = !!value;
+        ec = boost::system::error_code();
+      }
+      else
+      {
+        ec = boost::asio::error::invalid_argument;
+      }
+    }
+    else if (level == BOOST_ASIO_OS_DEF(IPPROTO_TCP)
+        && optname == BOOST_ASIO_OS_DEF(TCP_NODELAY))
+    {
+      if (optlen == sizeof(int))
+      {
+        int value = 0;
+        std::memcpy(&value, optval, optlen);
+        impl.socket_->Control->NoDelay = !!value;
+        ec = boost::system::error_code();
+      }
+      else
+      {
+        ec = boost::asio::error::invalid_argument;
+      }
+    }
+    else
+    {
+      ec = boost::asio::error::invalid_argument;
+    }
+  }
+  catch (Platform::Exception^ e)
+  {
+    ec = boost::system::error_code(e->HResult,
+        boost::system::system_category());
+  }
+
+  return ec;
+}
+
+void winrt_ssocket_service_base::do_get_option(
+    const winrt_ssocket_service_base::base_implementation_type& impl,
+    int level, int optname, void* optval,
+    std::size_t* optlen, boost::system::error_code& ec) const
+{
+  if (!is_open(impl))
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return;
+  }
+
+  try
+  {
+    if (level == BOOST_ASIO_OS_DEF(SOL_SOCKET)
+        && optname == BOOST_ASIO_OS_DEF(SO_KEEPALIVE))
+    {
+      if (*optlen >= sizeof(int))
+      {
+        int value = impl.socket_->Control->KeepAlive ? 1 : 0;
+        std::memcpy(optval, &value, sizeof(int));
+        *optlen = sizeof(int);
+        ec = boost::system::error_code();
+      }
+      else
+      {
+        ec = boost::asio::error::invalid_argument;
+      }
+    }
+    else if (level == BOOST_ASIO_OS_DEF(IPPROTO_TCP)
+        && optname == BOOST_ASIO_OS_DEF(TCP_NODELAY))
+    {
+      if (*optlen >= sizeof(int))
+      {
+        int value = impl.socket_->Control->NoDelay ? 1 : 0;
+        std::memcpy(optval, &value, sizeof(int));
+        *optlen = sizeof(int);
+        ec = boost::system::error_code();
+      }
+      else
+      {
+        ec = boost::asio::error::invalid_argument;
+      }
+    }
+    else
+    {
+      ec = boost::asio::error::invalid_argument;
+    }
+  }
+  catch (Platform::Exception^ e)
+  {
+    ec = boost::system::error_code(e->HResult,
+        boost::system::system_category());
+  }
+}
+
+boost::system::error_code winrt_ssocket_service_base::do_connect(
+    winrt_ssocket_service_base::base_implementation_type& impl,
+    const void* addr, boost::system::error_code& ec)
+{
+  if (!is_open(impl))
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return ec;
+  }
+
+  char addr_string[max_addr_v6_str_len];
+  unsigned short port;
+  switch (reinterpret_cast<const socket_addr_type*>(addr)->sa_family)
+  {
+  case BOOST_ASIO_OS_DEF(AF_INET):
+    socket_ops::inet_ntop(BOOST_ASIO_OS_DEF(AF_INET),
+        &reinterpret_cast<const sockaddr_in4_type*>(addr)->sin_addr,
+        addr_string, sizeof(addr_string), 0, ec);
+    port = socket_ops::network_to_host_short(
+        reinterpret_cast<const sockaddr_in4_type*>(addr)->sin_port);
+    break;
+  case BOOST_ASIO_OS_DEF(AF_INET6):
+    socket_ops::inet_ntop(BOOST_ASIO_OS_DEF(AF_INET6),
+        &reinterpret_cast<const sockaddr_in6_type*>(addr)->sin6_addr,
+        addr_string, sizeof(addr_string), 0, ec);
+    port = socket_ops::network_to_host_short(
+        reinterpret_cast<const sockaddr_in6_type*>(addr)->sin6_port);
+    break;
+  default:
+    ec = boost::asio::error::address_family_not_supported;
+    return ec;
+  }
+
+  if (!ec) try
+  {
+    async_manager_.sync(impl.socket_->ConnectAsync(
+          ref new Windows::Networking::HostName(
+            winrt_utils::string(addr_string)),
+          winrt_utils::string(port)), ec);
+  }
+  catch (Platform::Exception^ e)
+  {
+    ec = boost::system::error_code(e->HResult,
+        boost::system::system_category());
+  }
+
+  return ec;
+}
+
+void winrt_ssocket_service_base::start_connect_op(
+    winrt_ssocket_service_base::base_implementation_type& impl,
+    const void* addr, winrt_async_op<void>* op, bool is_continuation)
+{
+  if (!is_open(impl))
+  {
+    op->ec_ = boost::asio::error::bad_descriptor;
+    io_service_.post_immediate_completion(op, is_continuation);
+    return;
+  }
+
+  char addr_string[max_addr_v6_str_len];
+  unsigned short port = 0;
+  switch (reinterpret_cast<const socket_addr_type*>(addr)->sa_family)
+  {
+  case BOOST_ASIO_OS_DEF(AF_INET):
+    socket_ops::inet_ntop(BOOST_ASIO_OS_DEF(AF_INET),
+        &reinterpret_cast<const sockaddr_in4_type*>(addr)->sin_addr,
+        addr_string, sizeof(addr_string), 0, op->ec_);
+    port = socket_ops::network_to_host_short(
+        reinterpret_cast<const sockaddr_in4_type*>(addr)->sin_port);
+    break;
+  case BOOST_ASIO_OS_DEF(AF_INET6):
+    socket_ops::inet_ntop(BOOST_ASIO_OS_DEF(AF_INET6),
+        &reinterpret_cast<const sockaddr_in6_type*>(addr)->sin6_addr,
+        addr_string, sizeof(addr_string), 0, op->ec_);
+    port = socket_ops::network_to_host_short(
+        reinterpret_cast<const sockaddr_in6_type*>(addr)->sin6_port);
+    break;
+  default:
+    op->ec_ = boost::asio::error::address_family_not_supported;
+    break;
+  }
+
+  if (op->ec_)
+  {
+    io_service_.post_immediate_completion(op, is_continuation);
+    return;
+  }
+
+  try
+  {
+    async_manager_.async(impl.socket_->ConnectAsync(
+          ref new Windows::Networking::HostName(
+            winrt_utils::string(addr_string)),
+          winrt_utils::string(port)), op);
+  }
+  catch (Platform::Exception^ e)
+  {
+    op->ec_ = boost::system::error_code(
+        e->HResult, boost::system::system_category());
+    io_service_.post_immediate_completion(op, is_continuation);
+  }
+}
+
+std::size_t winrt_ssocket_service_base::do_send(
+    winrt_ssocket_service_base::base_implementation_type& impl,
+    const boost::asio::const_buffer& data,
+    socket_base::message_flags flags, boost::system::error_code& ec)
+{
+  if (flags)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return 0;
+  }
+
+  if (!is_open(impl))
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return 0;
+  }
+
+  try
+  {
+    buffer_sequence_adapter<boost::asio::const_buffer,
+      boost::asio::const_buffers_1> bufs(boost::asio::buffer(data));
+
+    if (bufs.all_empty())
+    {
+      ec = boost::system::error_code();
+      return 0;
+    }
+
+    return async_manager_.sync(
+        impl.socket_->OutputStream->WriteAsync(bufs.buffers()[0]), ec);
+  }
+  catch (Platform::Exception^ e)
+  {
+    ec = boost::system::error_code(e->HResult,
+        boost::system::system_category());
+    return 0;
+  }
+}
+
+void winrt_ssocket_service_base::start_send_op(
+      winrt_ssocket_service_base::base_implementation_type& impl,
+      const boost::asio::const_buffer& data, socket_base::message_flags flags,
+      winrt_async_op<unsigned int>* op, bool is_continuation)
+{
+  if (flags)
+  {
+    op->ec_ = boost::asio::error::operation_not_supported;
+    io_service_.post_immediate_completion(op, is_continuation);
+    return;
+  }
+
+  if (!is_open(impl))
+  {
+    op->ec_ = boost::asio::error::bad_descriptor;
+    io_service_.post_immediate_completion(op, is_continuation);
+    return;
+  }
+
+  try
+  {
+    buffer_sequence_adapter<boost::asio::const_buffer,
+        boost::asio::const_buffers_1> bufs(boost::asio::buffer(data));
+
+    if (bufs.all_empty())
+    {
+      io_service_.post_immediate_completion(op, is_continuation);
+      return;
+    }
+
+    async_manager_.async(
+        impl.socket_->OutputStream->WriteAsync(bufs.buffers()[0]), op);
+  }
+  catch (Platform::Exception^ e)
+  {
+    op->ec_ = boost::system::error_code(e->HResult,
+        boost::system::system_category());
+    io_service_.post_immediate_completion(op, is_continuation);
+  }
+}
+
+std::size_t winrt_ssocket_service_base::do_receive(
+    winrt_ssocket_service_base::base_implementation_type& impl,
+    const boost::asio::mutable_buffer& data,
+    socket_base::message_flags flags, boost::system::error_code& ec)
+{
+  if (flags)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return 0;
+  }
+
+  if (!is_open(impl))
+  {
+    ec = boost::asio::error::bad_descriptor;
+    return 0;
+  }
+
+  try
+  {
+    buffer_sequence_adapter<boost::asio::mutable_buffer,
+        boost::asio::mutable_buffers_1> bufs(boost::asio::buffer(data));
+
+    if (bufs.all_empty())
+    {
+      ec = boost::system::error_code();
+      return 0;
+    }
+
+    async_manager_.sync(
+        impl.socket_->InputStream->ReadAsync(
+          bufs.buffers()[0], bufs.buffers()[0]->Capacity,
+          Windows::Storage::Streams::InputStreamOptions::Partial), ec);
+
+    std::size_t bytes_transferred = bufs.buffers()[0]->Length;
+    if (bytes_transferred == 0 && !ec)
+    {
+      ec = boost::asio::error::eof;
+    }
+
+    return bytes_transferred;
+  }
+  catch (Platform::Exception^ e)
+  {
+    ec = boost::system::error_code(e->HResult,
+        boost::system::system_category());
+    return 0;
+  }
+}
+
+void winrt_ssocket_service_base::start_receive_op(
+      winrt_ssocket_service_base::base_implementation_type& impl,
+      const boost::asio::mutable_buffer& data, socket_base::message_flags flags,
+      winrt_async_op<Windows::Storage::Streams::IBuffer^>* op,
+      bool is_continuation)
+{
+  if (flags)
+  {
+    op->ec_ = boost::asio::error::operation_not_supported;
+    io_service_.post_immediate_completion(op, is_continuation);
+    return;
+  }
+
+  if (!is_open(impl))
+  {
+    op->ec_ = boost::asio::error::bad_descriptor;
+    io_service_.post_immediate_completion(op, is_continuation);
+    return;
+  }
+
+  try
+  {
+    buffer_sequence_adapter<boost::asio::mutable_buffer,
+        boost::asio::mutable_buffers_1> bufs(boost::asio::buffer(data));
+
+    if (bufs.all_empty())
+    {
+      io_service_.post_immediate_completion(op, is_continuation);
+      return;
+    }
+
+    async_manager_.async(
+        impl.socket_->InputStream->ReadAsync(
+          bufs.buffers()[0], bufs.buffers()[0]->Capacity,
+          Windows::Storage::Streams::InputStreamOptions::Partial), op);
+  }
+  catch (Platform::Exception^ e)
+  {
+    op->ec_ = boost::system::error_code(e->HResult,
+        boost::system::system_category());
+    io_service_.post_immediate_completion(op, is_continuation);
+  }
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WINRT_SSOCKET_SERVICE_BASE_IPP
diff --git a/ext/patches/boost/asio/detail/impl/winrt_timer_scheduler.hpp b/ext/patches/boost/asio/detail/impl/winrt_timer_scheduler.hpp
new file mode 100644
index 0000000..594a744
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/winrt_timer_scheduler.hpp
@@ -0,0 +1,81 @@
+//
+// detail/impl/winrt_timer_scheduler.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_WINRT_TIMER_SCHEDULER_HPP
+#define BOOST_ASIO_DETAIL_IMPL_WINRT_TIMER_SCHEDULER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Time_Traits>
+void winrt_timer_scheduler::add_timer_queue(timer_queue<Time_Traits>& queue)
+{
+  do_add_timer_queue(queue);
+}
+
+// Remove a timer queue from the reactor.
+template <typename Time_Traits>
+void winrt_timer_scheduler::remove_timer_queue(timer_queue<Time_Traits>& queue)
+{
+  do_remove_timer_queue(queue);
+}
+
+template <typename Time_Traits>
+void winrt_timer_scheduler::schedule_timer(timer_queue<Time_Traits>& queue,
+    const typename Time_Traits::time_type& time,
+    typename timer_queue<Time_Traits>::per_timer_data& timer, wait_op* op)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+
+  if (shutdown_)
+  {
+    io_service_.post_immediate_completion(op, false);
+    return;
+  }
+
+  bool earliest = queue.enqueue_timer(time, timer, op);
+  io_service_.work_started();
+  if (earliest)
+    event_.signal(lock);
+}
+
+template <typename Time_Traits>
+std::size_t winrt_timer_scheduler::cancel_timer(timer_queue<Time_Traits>& queue,
+    typename timer_queue<Time_Traits>::per_timer_data& timer,
+    std::size_t max_cancelled)
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  op_queue<operation> ops;
+  std::size_t n = queue.cancel_timer(timer, ops, max_cancelled);
+  lock.unlock();
+  io_service_.post_deferred_completions(ops);
+  return n;
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WINRT_TIMER_SCHEDULER_HPP
diff --git a/ext/patches/boost/asio/detail/impl/winrt_timer_scheduler.ipp b/ext/patches/boost/asio/detail/impl/winrt_timer_scheduler.ipp
new file mode 100644
index 0000000..d3cb2ac
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/winrt_timer_scheduler.ipp
@@ -0,0 +1,124 @@
+//
+// detail/impl/winrt_timer_scheduler.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_WINRT_TIMER_SCHEDULER_IPP
+#define BOOST_ASIO_DETAIL_IMPL_WINRT_TIMER_SCHEDULER_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/winrt_timer_scheduler.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+winrt_timer_scheduler::winrt_timer_scheduler(
+    boost::asio::io_service& io_service)
+  : boost::asio::detail::service_base<winrt_timer_scheduler>(io_service),
+    io_service_(use_service<io_service_impl>(io_service)),
+    mutex_(),
+    event_(),
+    timer_queues_(),
+    thread_(0),
+    stop_thread_(false),
+    shutdown_(false)
+{
+  thread_ = new boost::asio::detail::thread(
+      bind_handler(&winrt_timer_scheduler::call_run_thread, this));
+}
+
+winrt_timer_scheduler::~winrt_timer_scheduler()
+{
+  shutdown_service();
+}
+
+void winrt_timer_scheduler::shutdown_service()
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  shutdown_ = true;
+  stop_thread_ = true;
+  event_.signal(lock);
+  lock.unlock();
+
+  if (thread_)
+  {
+    thread_->join();
+    delete thread_;
+    thread_ = 0;
+  }
+
+  op_queue<operation> ops;
+  timer_queues_.get_all_timers(ops);
+  io_service_.abandon_operations(ops);
+}
+
+void winrt_timer_scheduler::fork_service(boost::asio::io_service::fork_event)
+{
+}
+
+void winrt_timer_scheduler::init_task()
+{
+}
+
+void winrt_timer_scheduler::run_thread()
+{
+  boost::asio::detail::mutex::scoped_lock lock(mutex_);
+  while (!stop_thread_)
+  {
+    const long max_wait_duration = 5 * 60 * 1000000;
+    long wait_duration = timer_queues_.wait_duration_usec(max_wait_duration);
+    event_.wait_for_usec(lock, wait_duration);
+    event_.clear(lock);
+    op_queue<operation> ops;
+    timer_queues_.get_ready_timers(ops);
+    if (!ops.empty())
+    {
+      lock.unlock();
+      io_service_.post_deferred_completions(ops);
+      lock.lock();
+    }
+  }
+}
+
+void winrt_timer_scheduler::call_run_thread(winrt_timer_scheduler* scheduler)
+{
+  scheduler->run_thread();
+}
+
+void winrt_timer_scheduler::do_add_timer_queue(timer_queue_base& queue)
+{
+  mutex::scoped_lock lock(mutex_);
+  timer_queues_.insert(&queue);
+}
+
+void winrt_timer_scheduler::do_remove_timer_queue(timer_queue_base& queue)
+{
+  mutex::scoped_lock lock(mutex_);
+  timer_queues_.erase(&queue);
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WINRT_TIMER_SCHEDULER_IPP
diff --git a/ext/patches/boost/asio/detail/impl/winsock_init.ipp b/ext/patches/boost/asio/detail/impl/winsock_init.ipp
new file mode 100644
index 0000000..158addd
--- /dev/null
+++ b/ext/patches/boost/asio/detail/impl/winsock_init.ipp
@@ -0,0 +1,84 @@
+//
+// detail/impl/winsock_init.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IMPL_WINSOCK_INIT_IPP
+#define BOOST_ASIO_DETAIL_IMPL_WINSOCK_INIT_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/winsock_init.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+void winsock_init_base::startup(data& d,
+    unsigned char major, unsigned char minor)
+{
+  if (::InterlockedIncrement(&d.init_count_) == 1)
+  {
+    WSADATA wsa_data;
+    long result = ::WSAStartup(MAKEWORD(major, minor), &wsa_data);
+    ::InterlockedExchange(&d.result_, result);
+  }
+}
+
+void winsock_init_base::manual_startup(data& d)
+{
+  if (::InterlockedIncrement(&d.init_count_) == 1)
+  {
+    ::InterlockedExchange(&d.result_, 0);
+  }
+}
+
+void winsock_init_base::cleanup(data& d)
+{
+  if (::InterlockedDecrement(&d.init_count_) == 0)
+  {
+    ::WSACleanup();
+  }
+}
+
+void winsock_init_base::manual_cleanup(data& d)
+{
+  ::InterlockedDecrement(&d.init_count_);
+}
+
+void winsock_init_base::throw_on_error(data& d)
+{
+  long result = ::InterlockedExchangeAdd(&d.result_, 0);
+  if (result != 0)
+  {
+    boost::system::error_code ec(result,
+        boost::asio::error::get_system_category());
+    boost::asio::detail::throw_error(ec, "winsock");
+  }
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+#endif // BOOST_ASIO_DETAIL_IMPL_WINSOCK_INIT_IPP
diff --git a/ext/patches/boost/asio/detail/io_control.hpp b/ext/patches/boost/asio/detail/io_control.hpp
new file mode 100644
index 0000000..e342899
--- /dev/null
+++ b/ext/patches/boost/asio/detail/io_control.hpp
@@ -0,0 +1,136 @@
+//
+// detail/io_control.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_IO_CONTROL_HPP
+#define BOOST_ASIO_DETAIL_IO_CONTROL_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+namespace io_control {
+
+// IO control command for non-blocking I/O.
+class non_blocking_io
+{
+public:
+  // Default constructor.
+  non_blocking_io()
+    : value_(0)
+  {
+  }
+
+  // Construct with a specific command value.
+  non_blocking_io(bool value)
+    : value_(value ? 1 : 0)
+  {
+  }
+
+  // Get the name of the IO control command.
+  int name() const
+  {
+    return static_cast<int>(BOOST_ASIO_OS_DEF(FIONBIO));
+  }
+
+  // Set the value of the I/O control command.
+  void set(bool value)
+  {
+    value_ = value ? 1 : 0;
+  }
+
+  // Get the current value of the I/O control command.
+  bool get() const
+  {
+    return value_ != 0;
+  }
+
+  // Get the address of the command data.
+  detail::ioctl_arg_type* data()
+  {
+    return &value_;
+  }
+
+  // Get the address of the command data.
+  const detail::ioctl_arg_type* data() const
+  {
+    return &value_;
+  }
+
+private:
+  detail::ioctl_arg_type value_;
+};
+
+// I/O control command for getting number of bytes available.
+class bytes_readable
+{
+public:
+  // Default constructor.
+  bytes_readable()
+    : value_(0)
+  {
+  }
+
+  // Construct with a specific command value.
+  bytes_readable(std::size_t value)
+    : value_(static_cast<detail::ioctl_arg_type>(value))
+  {
+  }
+
+  // Get the name of the IO control command.
+  int name() const
+  {
+    return static_cast<int>(BOOST_ASIO_OS_DEF(FIONREAD));
+  }
+
+  // Set the value of the I/O control command.
+  void set(std::size_t value)
+  {
+    value_ = static_cast<detail::ioctl_arg_type>(value);
+  }
+
+  // Get the current value of the I/O control command.
+  std::size_t get() const
+  {
+    return static_cast<std::size_t>(value_);
+  }
+
+  // Get the address of the command data.
+  detail::ioctl_arg_type* data()
+  {
+    return &value_;
+  }
+
+  // Get the address of the command data.
+  const detail::ioctl_arg_type* data() const
+  {
+    return &value_;
+  }
+
+private:
+  detail::ioctl_arg_type value_;
+};
+
+} // namespace io_control
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_IO_CONTROL_HPP
diff --git a/ext/patches/boost/asio/detail/keyword_tss_ptr.hpp b/ext/patches/boost/asio/detail/keyword_tss_ptr.hpp
new file mode 100644
index 0000000..d192ed2
--- /dev/null
+++ b/ext/patches/boost/asio/detail/keyword_tss_ptr.hpp
@@ -0,0 +1,72 @@
+//
+// detail/keyword_tss_ptr.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_KEYWORD_TSS_PTR_HPP
+#define BOOST_ASIO_DETAIL_KEYWORD_TSS_PTR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION)
+
+#include <boost/asio/detail/noncopyable.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename T>
+class keyword_tss_ptr
+  : private noncopyable
+{
+public:
+  // Constructor.
+  keyword_tss_ptr()
+  {
+  }
+
+  // Destructor.
+  ~keyword_tss_ptr()
+  {
+  }
+
+  // Get the value.
+  operator T*() const
+  {
+    return value_;
+  }
+
+  // Set the value.
+  void operator=(T* value)
+  {
+    value_ = value;
+  }
+
+private:
+  static BOOST_ASIO_THREAD_KEYWORD T* value_;
+};
+
+template <typename T>
+BOOST_ASIO_THREAD_KEYWORD T* keyword_tss_ptr<T>::value_;
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION)
+
+#endif // BOOST_ASIO_DETAIL_KEYWORD_TSS_PTR_HPP
diff --git a/ext/patches/boost/asio/detail/kqueue_reactor.hpp b/ext/patches/boost/asio/detail/kqueue_reactor.hpp
new file mode 100644
index 0000000..080f9d4
--- /dev/null
+++ b/ext/patches/boost/asio/detail/kqueue_reactor.hpp
@@ -0,0 +1,221 @@
+//
+// detail/kqueue_reactor.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2005 Stefan Arentz (stefan at soze dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_KQUEUE_REACTOR_HPP
+#define BOOST_ASIO_DETAIL_KQUEUE_REACTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_KQUEUE)
+
+#include <cstddef>
+#include <sys/types.h>
+#include <sys/event.h>
+#include <sys/time.h>
+#include <boost/asio/detail/limits.hpp>
+#include <boost/asio/detail/mutex.hpp>
+#include <boost/asio/detail/object_pool.hpp>
+#include <boost/asio/detail/op_queue.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/select_interrupter.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/timer_queue_base.hpp>
+#include <boost/asio/detail/timer_queue_set.hpp>
+#include <boost/asio/detail/wait_op.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+
+// Older versions of Mac OS X may not define EV_OOBAND.
+#if !defined(EV_OOBAND)
+# define EV_OOBAND EV_FLAG1
+#endif // !defined(EV_OOBAND)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class kqueue_reactor
+  : public boost::asio::detail::service_base<kqueue_reactor>
+{
+public:
+  enum op_types { read_op = 0, write_op = 1,
+    connect_op = 1, except_op = 2, max_ops = 3 };
+
+  // Per-descriptor queues.
+  struct descriptor_state
+  {
+    friend class kqueue_reactor;
+    friend class object_pool_access;
+
+    descriptor_state* next_;
+    descriptor_state* prev_;
+
+    mutex mutex_;
+    int descriptor_;
+    op_queue<reactor_op> op_queue_[max_ops];
+    bool shutdown_;
+  };
+
+  // Per-descriptor data.
+  typedef descriptor_state* per_descriptor_data;
+
+  // Constructor.
+  BOOST_ASIO_DECL kqueue_reactor(boost::asio::io_service& io_service);
+
+  // Destructor.
+  BOOST_ASIO_DECL ~kqueue_reactor();
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Recreate internal descriptors following a fork.
+  BOOST_ASIO_DECL void fork_service(
+      boost::asio::io_service::fork_event fork_ev);
+
+  // Initialise the task.
+  BOOST_ASIO_DECL void init_task();
+
+  // Register a socket with the reactor. Returns 0 on success, system error
+  // code on failure.
+  BOOST_ASIO_DECL int register_descriptor(socket_type descriptor,
+      per_descriptor_data& descriptor_data);
+
+  // Register a descriptor with an associated single operation. Returns 0 on
+  // success, system error code on failure.
+  BOOST_ASIO_DECL int register_internal_descriptor(
+      int op_type, socket_type descriptor,
+      per_descriptor_data& descriptor_data, reactor_op* op);
+
+  // Move descriptor registration from one descriptor_data object to another.
+  BOOST_ASIO_DECL void move_descriptor(socket_type descriptor,
+      per_descriptor_data& target_descriptor_data,
+      per_descriptor_data& source_descriptor_data);
+
+  // Post a reactor operation for immediate completion.
+  void post_immediate_completion(reactor_op* op, bool is_continuation)
+  {
+    io_service_.post_immediate_completion(op, is_continuation);
+  }
+
+  // Start a new operation. The reactor operation will be performed when the
+  // given descriptor is flagged as ready, or an error has occurred.
+  BOOST_ASIO_DECL void start_op(int op_type, socket_type descriptor,
+      per_descriptor_data& descriptor_data, reactor_op* op,
+      bool is_continuation, bool allow_speculative);
+
+  // Cancel all operations associated with the given descriptor. The
+  // handlers associated with the descriptor will be invoked with the
+  // operation_aborted error.
+  BOOST_ASIO_DECL void cancel_ops(socket_type descriptor,
+      per_descriptor_data& descriptor_data);
+
+  // Cancel any operations that are running against the descriptor and remove
+  // its registration from the reactor.
+  BOOST_ASIO_DECL void deregister_descriptor(socket_type descriptor,
+      per_descriptor_data& descriptor_data, bool closing);
+
+  // Remote the descriptor's registration from the reactor.
+  BOOST_ASIO_DECL void deregister_internal_descriptor(
+      socket_type descriptor, per_descriptor_data& descriptor_data);
+
+  // Add a new timer queue to the reactor.
+  template <typename Time_Traits>
+  void add_timer_queue(timer_queue<Time_Traits>& queue);
+
+  // Remove a timer queue from the reactor.
+  template <typename Time_Traits>
+  void remove_timer_queue(timer_queue<Time_Traits>& queue);
+
+  // Schedule a new operation in the given timer queue to expire at the
+  // specified absolute time.
+  template <typename Time_Traits>
+  void schedule_timer(timer_queue<Time_Traits>& queue,
+      const typename Time_Traits::time_type& time,
+      typename timer_queue<Time_Traits>::per_timer_data& timer, wait_op* op);
+
+  // Cancel the timer operations associated with the given token. Returns the
+  // number of operations that have been posted or dispatched.
+  template <typename Time_Traits>
+  std::size_t cancel_timer(timer_queue<Time_Traits>& queue,
+      typename timer_queue<Time_Traits>::per_timer_data& timer,
+      std::size_t max_cancelled = (std::numeric_limits<std::size_t>::max)());
+
+  // Run the kqueue loop.
+  BOOST_ASIO_DECL void run(bool block, op_queue<operation>& ops);
+
+  // Interrupt the kqueue loop.
+  BOOST_ASIO_DECL void interrupt();
+
+private:
+  // Create the kqueue file descriptor. Throws an exception if the descriptor
+  // cannot be created.
+  BOOST_ASIO_DECL static int do_kqueue_create();
+
+  // Allocate a new descriptor state object.
+  BOOST_ASIO_DECL descriptor_state* allocate_descriptor_state();
+
+  // Free an existing descriptor state object.
+  BOOST_ASIO_DECL void free_descriptor_state(descriptor_state* s);
+
+  // Helper function to add a new timer queue.
+  BOOST_ASIO_DECL void do_add_timer_queue(timer_queue_base& queue);
+
+  // Helper function to remove a timer queue.
+  BOOST_ASIO_DECL void do_remove_timer_queue(timer_queue_base& queue);
+
+  // Get the timeout value for the kevent call.
+  BOOST_ASIO_DECL timespec* get_timeout(timespec& ts);
+
+  // The io_service implementation used to post completions.
+  io_service_impl& io_service_;
+
+  // Mutex to protect access to internal data.
+  mutex mutex_;
+
+  // The kqueue file descriptor.
+  int kqueue_fd_;
+
+  // The interrupter is used to break a blocking kevent call.
+  select_interrupter interrupter_;
+
+  // The timer queues.
+  timer_queue_set timer_queues_;
+
+  // Whether the service has been shut down.
+  bool shutdown_;
+
+  // Mutex to protect access to the registered descriptors.
+  mutex registered_descriptors_mutex_;
+
+  // Keep track of all registered descriptors.
+  object_pool<descriptor_state> registered_descriptors_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/detail/impl/kqueue_reactor.hpp>
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/kqueue_reactor.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_HAS_KQUEUE)
+
+#endif // BOOST_ASIO_DETAIL_KQUEUE_REACTOR_HPP
diff --git a/ext/patches/boost/asio/detail/limits.hpp b/ext/patches/boost/asio/detail/limits.hpp
new file mode 100644
index 0000000..4dfdc4a
--- /dev/null
+++ b/ext/patches/boost/asio/detail/limits.hpp
@@ -0,0 +1,26 @@
+//
+// detail/limits.hpp
+// ~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_LIMITS_HPP
+#define BOOST_ASIO_DETAIL_LIMITS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_BOOST_LIMITS)
+# include <boost/limits.hpp>
+#else // defined(BOOST_ASIO_HAS_BOOST_LIMITS)
+# include <limits>
+#endif // defined(BOOST_ASIO_HAS_BOOST_LIMITS)
+
+#endif // BOOST_ASIO_DETAIL_LIMITS_HPP
diff --git a/ext/patches/boost/asio/detail/local_free_on_block_exit.hpp b/ext/patches/boost/asio/detail/local_free_on_block_exit.hpp
new file mode 100644
index 0000000..332d2a3
--- /dev/null
+++ b/ext/patches/boost/asio/detail/local_free_on_block_exit.hpp
@@ -0,0 +1,59 @@
+//
+// detail/local_free_on_block_exit.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_LOCAL_FREE_ON_BLOCK_EXIT_HPP
+#define BOOST_ASIO_DETAIL_LOCAL_FREE_ON_BLOCK_EXIT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class local_free_on_block_exit
+  : private noncopyable
+{
+public:
+  // Constructor blocks all signals for the calling thread.
+  explicit local_free_on_block_exit(void* p)
+    : p_(p)
+  {
+  }
+
+  // Destructor restores the previous signal mask.
+  ~local_free_on_block_exit()
+  {
+    ::LocalFree(p_);
+  }
+
+private:
+  void* p_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+#endif // BOOST_ASIO_DETAIL_LOCAL_FREE_ON_BLOCK_EXIT_HPP
diff --git a/ext/patches/boost/asio/detail/macos_fenced_block.hpp b/ext/patches/boost/asio/detail/macos_fenced_block.hpp
new file mode 100644
index 0000000..d36ea55
--- /dev/null
+++ b/ext/patches/boost/asio/detail/macos_fenced_block.hpp
@@ -0,0 +1,63 @@
+//
+// detail/macos_fenced_block.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_MACOS_FENCED_BLOCK_HPP
+#define BOOST_ASIO_DETAIL_MACOS_FENCED_BLOCK_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(__MACH__) && defined(__APPLE__)
+
+#include <libkern/OSAtomic.h>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class macos_fenced_block
+  : private noncopyable
+{
+public:
+  enum half_t { half };
+  enum full_t { full };
+
+  // Constructor for a half fenced block.
+  explicit macos_fenced_block(half_t)
+  {
+  }
+
+  // Constructor for a full fenced block.
+  explicit macos_fenced_block(full_t)
+  {
+    OSMemoryBarrier();
+  }
+
+  // Destructor.
+  ~macos_fenced_block()
+  {
+    OSMemoryBarrier();
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(__MACH__) && defined(__APPLE__)
+
+#endif // BOOST_ASIO_DETAIL_MACOS_FENCED_BLOCK_HPP
diff --git a/ext/patches/boost/asio/detail/mutex.hpp b/ext/patches/boost/asio/detail/mutex.hpp
new file mode 100644
index 0000000..2456417
--- /dev/null
+++ b/ext/patches/boost/asio/detail/mutex.hpp
@@ -0,0 +1,50 @@
+//
+// detail/mutex.hpp
+// ~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_MUTEX_HPP
+#define BOOST_ASIO_DETAIL_MUTEX_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_THREADS)
+# include <boost/asio/detail/null_mutex.hpp>
+#elif defined(BOOST_ASIO_WINDOWS)
+# include <boost/asio/detail/win_mutex.hpp>
+#elif defined(BOOST_ASIO_HAS_PTHREADS)
+# include <boost/asio/detail/posix_mutex.hpp>
+#elif defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+# include <boost/asio/detail/std_mutex.hpp>
+#else
+# error Only Windows, POSIX and std::mutex are supported!
+#endif
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if !defined(BOOST_ASIO_HAS_THREADS)
+typedef null_mutex mutex;
+#elif defined(BOOST_ASIO_WINDOWS)
+typedef win_mutex mutex;
+#elif defined(BOOST_ASIO_HAS_PTHREADS)
+typedef posix_mutex mutex;
+#elif defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+typedef std_mutex mutex;
+#endif
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_MUTEX_HPP
diff --git a/ext/patches/boost/asio/detail/noncopyable.hpp b/ext/patches/boost/asio/detail/noncopyable.hpp
new file mode 100644
index 0000000..666779c
--- /dev/null
+++ b/ext/patches/boost/asio/detail/noncopyable.hpp
@@ -0,0 +1,45 @@
+//
+// detail/noncopyable.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_NONCOPYABLE_HPP
+#define BOOST_ASIO_DETAIL_NONCOPYABLE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class noncopyable
+{
+protected:
+  noncopyable() {}
+  ~noncopyable() {}
+private:
+  noncopyable(const noncopyable&);
+  const noncopyable& operator=(const noncopyable&);
+};
+
+} // namespace detail
+
+using boost::asio::detail::noncopyable;
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_NONCOPYABLE_HPP
diff --git a/ext/patches/boost/asio/detail/null_event.hpp b/ext/patches/boost/asio/detail/null_event.hpp
new file mode 100644
index 0000000..a94c86f
--- /dev/null
+++ b/ext/patches/boost/asio/detail/null_event.hpp
@@ -0,0 +1,90 @@
+//
+// detail/null_event.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_NULL_EVENT_HPP
+#define BOOST_ASIO_DETAIL_NULL_EVENT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_THREADS)
+
+#include <boost/asio/detail/noncopyable.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class null_event
+  : private noncopyable
+{
+public:
+  // Constructor.
+  null_event()
+  {
+  }
+
+  // Destructor.
+  ~null_event()
+  {
+  }
+
+  // Signal the event. (Retained for backward compatibility.)
+  template <typename Lock>
+  void signal(Lock&)
+  {
+  }
+
+  // Signal all waiters.
+  template <typename Lock>
+  void signal_all(Lock&)
+  {
+  }
+
+  // Unlock the mutex and signal one waiter.
+  template <typename Lock>
+  void unlock_and_signal_one(Lock&)
+  {
+  }
+
+  // If there's a waiter, unlock the mutex and signal it.
+  template <typename Lock>
+  bool maybe_unlock_and_signal_one(Lock&)
+  {
+    return false;
+  }
+
+  // Reset the event.
+  template <typename Lock>
+  void clear(Lock&)
+  {
+  }
+
+  // Wait for the event to become signalled.
+  template <typename Lock>
+  void wait(Lock&)
+  {
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_HAS_THREADS)
+
+#endif // BOOST_ASIO_DETAIL_NULL_EVENT_HPP
diff --git a/ext/patches/boost/asio/detail/null_fenced_block.hpp b/ext/patches/boost/asio/detail/null_fenced_block.hpp
new file mode 100644
index 0000000..29cb778
--- /dev/null
+++ b/ext/patches/boost/asio/detail/null_fenced_block.hpp
@@ -0,0 +1,47 @@
+//
+// detail/null_fenced_block.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_NULL_FENCED_BLOCK_HPP
+#define BOOST_ASIO_DETAIL_NULL_FENCED_BLOCK_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class null_fenced_block
+  : private noncopyable
+{
+public:
+  enum half_or_full_t { half, full };
+
+  // Constructor.
+  explicit null_fenced_block(half_or_full_t)
+  {
+  }
+
+  // Destructor.
+  ~null_fenced_block()
+  {
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_NULL_FENCED_BLOCK_HPP
diff --git a/ext/patches/boost/asio/detail/null_mutex.hpp b/ext/patches/boost/asio/detail/null_mutex.hpp
new file mode 100644
index 0000000..a401387
--- /dev/null
+++ b/ext/patches/boost/asio/detail/null_mutex.hpp
@@ -0,0 +1,66 @@
+//
+// detail/null_mutex.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_NULL_MUTEX_HPP
+#define BOOST_ASIO_DETAIL_NULL_MUTEX_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_THREADS)
+
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/scoped_lock.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class null_mutex
+  : private noncopyable
+{
+public:
+  typedef boost::asio::detail::scoped_lock<null_mutex> scoped_lock;
+
+  // Constructor.
+  null_mutex()
+  {
+  }
+
+  // Destructor.
+  ~null_mutex()
+  {
+  }
+
+  // Lock the mutex.
+  void lock()
+  {
+  }
+
+  // Unlock the mutex.
+  void unlock()
+  {
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_HAS_THREADS)
+
+#endif // BOOST_ASIO_DETAIL_NULL_MUTEX_HPP
diff --git a/ext/patches/boost/asio/detail/null_reactor.hpp b/ext/patches/boost/asio/detail/null_reactor.hpp
new file mode 100644
index 0000000..3ae8973
--- /dev/null
+++ b/ext/patches/boost/asio/detail/null_reactor.hpp
@@ -0,0 +1,69 @@
+//
+// detail/null_reactor.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_NULL_REACTOR_HPP
+#define BOOST_ASIO_DETAIL_NULL_REACTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class null_reactor
+  : public boost::asio::detail::service_base<null_reactor>
+{
+public:
+  // Constructor.
+  null_reactor(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<null_reactor>(io_service)
+  {
+  }
+
+  // Destructor.
+  ~null_reactor()
+  {
+  }
+
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+  }
+
+  // No-op because should never be called.
+  void run(bool /*block*/, op_queue<operation>& /*ops*/)
+  {
+  }
+
+  // No-op.
+  void interrupt()
+  {
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_NULL_REACTOR_HPP
diff --git a/ext/patches/boost/asio/detail/null_signal_blocker.hpp b/ext/patches/boost/asio/detail/null_signal_blocker.hpp
new file mode 100644
index 0000000..d67bf23
--- /dev/null
+++ b/ext/patches/boost/asio/detail/null_signal_blocker.hpp
@@ -0,0 +1,71 @@
+//
+// detail/null_signal_blocker.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_NULL_SIGNAL_BLOCKER_HPP
+#define BOOST_ASIO_DETAIL_NULL_SIGNAL_BLOCKER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_THREADS) \
+  || defined(BOOST_ASIO_WINDOWS) \
+  || defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  || defined(__CYGWIN__) \
+  || defined(__SYMBIAN32__)
+
+#include <boost/asio/detail/noncopyable.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class null_signal_blocker
+  : private noncopyable
+{
+public:
+  // Constructor blocks all signals for the calling thread.
+  null_signal_blocker()
+  {
+  }
+
+  // Destructor restores the previous signal mask.
+  ~null_signal_blocker()
+  {
+  }
+
+  // Block all signals for the calling thread.
+  void block()
+  {
+  }
+
+  // Restore the previous signal mask.
+  void unblock()
+  {
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_HAS_THREADS)
+       // || defined(BOOST_ASIO_WINDOWS)
+       // || defined(BOOST_ASIO_WINDOWS_RUNTIME)
+       // || defined(__CYGWIN__)
+       // || defined(__SYMBIAN32__)
+
+#endif // BOOST_ASIO_DETAIL_NULL_SIGNAL_BLOCKER_HPP
diff --git a/ext/patches/boost/asio/detail/null_socket_service.hpp b/ext/patches/boost/asio/detail/null_socket_service.hpp
new file mode 100644
index 0000000..e5bc002
--- /dev/null
+++ b/ext/patches/boost/asio/detail/null_socket_service.hpp
@@ -0,0 +1,499 @@
+//
+// detail/null_socket_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_NULL_SOCKET_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_NULL_SOCKET_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/socket_base.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Protocol>
+class null_socket_service
+{
+public:
+  // The protocol type.
+  typedef Protocol protocol_type;
+
+  // The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+  // The native type of a socket.
+  typedef int native_handle_type;
+
+  // The implementation type of the socket.
+  struct implementation_type
+  {
+  };
+
+  // Constructor.
+  null_socket_service(boost::asio::io_service& io_service)
+    : io_service_(io_service)
+  {
+  }
+
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+  }
+
+  // Construct a new socket implementation.
+  void construct(implementation_type&)
+  {
+  }
+
+  // Move-construct a new socket implementation.
+  void move_construct(implementation_type&, implementation_type&)
+  {
+  }
+
+  // Move-assign from another socket implementation.
+  void move_assign(implementation_type&,
+      null_socket_service&, implementation_type&)
+  {
+  }
+
+  // Move-construct a new socket implementation from another protocol type.
+  template <typename Protocol1>
+  void converting_move_construct(implementation_type&,
+      typename null_socket_service<Protocol1>::implementation_type&)
+  {
+  }
+
+  // Destroy a socket implementation.
+  void destroy(implementation_type&)
+  {
+  }
+
+  // Open a new socket implementation.
+  boost::system::error_code open(implementation_type&,
+      const protocol_type&, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Assign a native socket to a socket implementation.
+  boost::system::error_code assign(implementation_type&, const protocol_type&,
+      const native_handle_type&, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Determine whether the socket is open.
+  bool is_open(const implementation_type&) const
+  {
+    return false;
+  }
+
+  // Destroy a socket implementation.
+  boost::system::error_code close(implementation_type&,
+      boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Get the native socket representation.
+  native_handle_type native_handle(implementation_type&)
+  {
+    return 0;
+  }
+
+  // Cancel all operations associated with the socket.
+  boost::system::error_code cancel(implementation_type&,
+      boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Determine whether the socket is at the out-of-band data mark.
+  bool at_mark(const implementation_type&,
+      boost::system::error_code& ec) const
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return false;
+  }
+
+  // Determine the number of bytes available for reading.
+  std::size_t available(const implementation_type&,
+      boost::system::error_code& ec) const
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return 0;
+  }
+
+  // Place the socket into the state where it will listen for new connections.
+  boost::system::error_code listen(implementation_type&,
+      int, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Perform an IO control command on the socket.
+  template <typename IO_Control_Command>
+  boost::system::error_code io_control(implementation_type&,
+      IO_Control_Command&, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Gets the non-blocking mode of the socket.
+  bool non_blocking(const implementation_type&) const
+  {
+    return false;
+  }
+
+  // Sets the non-blocking mode of the socket.
+  boost::system::error_code non_blocking(implementation_type&,
+      bool, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Gets the non-blocking mode of the native socket implementation.
+  bool native_non_blocking(const implementation_type&) const
+  {
+    return false;
+  }
+
+  // Sets the non-blocking mode of the native socket implementation.
+  boost::system::error_code native_non_blocking(implementation_type&,
+      bool, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Disable sends or receives on the socket.
+  boost::system::error_code shutdown(implementation_type&,
+      socket_base::shutdown_type, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Bind the socket to the specified local endpoint.
+  boost::system::error_code bind(implementation_type&,
+      const endpoint_type&, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Set a socket option.
+  template <typename Option>
+  boost::system::error_code set_option(implementation_type&,
+      const Option&, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Set a socket option.
+  template <typename Option>
+  boost::system::error_code get_option(const implementation_type&,
+      Option&, boost::system::error_code& ec) const
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Get the local endpoint.
+  endpoint_type local_endpoint(const implementation_type&,
+      boost::system::error_code& ec) const
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return endpoint_type();
+  }
+
+  // Get the remote endpoint.
+  endpoint_type remote_endpoint(const implementation_type&,
+      boost::system::error_code& ec) const
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return endpoint_type();
+  }
+
+  // Send the given data to the peer.
+  template <typename ConstBufferSequence>
+  std::size_t send(implementation_type&, const ConstBufferSequence&,
+      socket_base::message_flags, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return 0;
+  }
+
+  // Wait until data can be sent without blocking.
+  std::size_t send(implementation_type&, const null_buffers&,
+      socket_base::message_flags, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return 0;
+  }
+
+  // Start an asynchronous send. The data being sent must be valid for the
+  // lifetime of the asynchronous operation.
+  template <typename ConstBufferSequence, typename Handler>
+  void async_send(implementation_type&, const ConstBufferSequence&,
+      socket_base::message_flags, Handler& handler)
+  {
+    boost::system::error_code ec = boost::asio::error::operation_not_supported;
+    const std::size_t bytes_transferred = 0;
+    io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+  }
+
+  // Start an asynchronous wait until data can be sent without blocking.
+  template <typename Handler>
+  void async_send(implementation_type&, const null_buffers&,
+      socket_base::message_flags, Handler& handler)
+  {
+    boost::system::error_code ec = boost::asio::error::operation_not_supported;
+    const std::size_t bytes_transferred = 0;
+    io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+  }
+
+  // Receive some data from the peer. Returns the number of bytes received.
+  template <typename MutableBufferSequence>
+  std::size_t receive(implementation_type&, const MutableBufferSequence&,
+      socket_base::message_flags, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return 0;
+  }
+
+  // Wait until data can be received without blocking.
+  std::size_t receive(implementation_type&, const null_buffers&,
+      socket_base::message_flags, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return 0;
+  }
+
+  // Start an asynchronous receive. The buffer for the data being received
+  // must be valid for the lifetime of the asynchronous operation.
+  template <typename MutableBufferSequence, typename Handler>
+  void async_receive(implementation_type&, const MutableBufferSequence&,
+      socket_base::message_flags, Handler& handler)
+  {
+    boost::system::error_code ec = boost::asio::error::operation_not_supported;
+    const std::size_t bytes_transferred = 0;
+    io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+  }
+
+  // Wait until data can be received without blocking.
+  template <typename Handler>
+  void async_receive(implementation_type&, const null_buffers&,
+      socket_base::message_flags, Handler& handler)
+  {
+    boost::system::error_code ec = boost::asio::error::operation_not_supported;
+    const std::size_t bytes_transferred = 0;
+    io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+  }
+
+  // Receive some data with associated flags. Returns the number of bytes
+  // received.
+  template <typename MutableBufferSequence>
+  std::size_t receive_with_flags(implementation_type&,
+      const MutableBufferSequence&, socket_base::message_flags,
+      socket_base::message_flags&, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return 0;
+  }
+
+  // Wait until data can be received without blocking.
+  std::size_t receive_with_flags(implementation_type&,
+      const null_buffers&, socket_base::message_flags,
+      socket_base::message_flags&, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return 0;
+  }
+
+  // Start an asynchronous receive. The buffer for the data being received
+  // must be valid for the lifetime of the asynchronous operation.
+  template <typename MutableBufferSequence, typename Handler>
+  void async_receive_with_flags(implementation_type&,
+      const MutableBufferSequence&, socket_base::message_flags,
+      socket_base::message_flags&, Handler& handler)
+  {
+    boost::system::error_code ec = boost::asio::error::operation_not_supported;
+    const std::size_t bytes_transferred = 0;
+    io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+  }
+
+  // Wait until data can be received without blocking.
+  template <typename Handler>
+  void async_receive_with_flags(implementation_type&,
+      const null_buffers&, socket_base::message_flags,
+      socket_base::message_flags&, Handler& handler)
+  {
+    boost::system::error_code ec = boost::asio::error::operation_not_supported;
+    const std::size_t bytes_transferred = 0;
+    io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+  }
+
+  // Send a datagram to the specified endpoint. Returns the number of bytes
+  // sent.
+  template <typename ConstBufferSequence>
+  std::size_t send_to(implementation_type&, const ConstBufferSequence&,
+      const endpoint_type&, socket_base::message_flags,
+      boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return 0;
+  }
+
+  // Wait until data can be sent without blocking.
+  std::size_t send_to(implementation_type&, const null_buffers&,
+      const endpoint_type&, socket_base::message_flags,
+      boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return 0;
+  }
+
+  // Start an asynchronous send. The data being sent must be valid for the
+  // lifetime of the asynchronous operation.
+  template <typename ConstBufferSequence, typename Handler>
+  void async_send_to(implementation_type&, const ConstBufferSequence&,
+      const endpoint_type&, socket_base::message_flags,
+      Handler& handler)
+  {
+    boost::system::error_code ec = boost::asio::error::operation_not_supported;
+    const std::size_t bytes_transferred = 0;
+    io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+  }
+
+  // Start an asynchronous wait until data can be sent without blocking.
+  template <typename Handler>
+  void async_send_to(implementation_type&, const null_buffers&,
+      const endpoint_type&, socket_base::message_flags, Handler& handler)
+  {
+    boost::system::error_code ec = boost::asio::error::operation_not_supported;
+    const std::size_t bytes_transferred = 0;
+    io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+  }
+
+  // Receive a datagram with the endpoint of the sender. Returns the number of
+  // bytes received.
+  template <typename MutableBufferSequence>
+  std::size_t receive_from(implementation_type&, const MutableBufferSequence&,
+      endpoint_type&, socket_base::message_flags,
+      boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return 0;
+  }
+
+  // Wait until data can be received without blocking.
+  std::size_t receive_from(implementation_type&, const null_buffers&,
+      endpoint_type&, socket_base::message_flags,
+      boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return 0;
+  }
+
+  // Start an asynchronous receive. The buffer for the data being received and
+  // the sender_endpoint object must both be valid for the lifetime of the
+  // asynchronous operation.
+  template <typename MutableBufferSequence, typename Handler>
+  void async_receive_from(implementation_type&,
+      const MutableBufferSequence&, endpoint_type&,
+      socket_base::message_flags, Handler& handler)
+  {
+    boost::system::error_code ec = boost::asio::error::operation_not_supported;
+    const std::size_t bytes_transferred = 0;
+    io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+  }
+
+  // Wait until data can be received without blocking.
+  template <typename Handler>
+  void async_receive_from(implementation_type&,
+      const null_buffers&, endpoint_type&,
+      socket_base::message_flags, Handler& handler)
+  {
+    boost::system::error_code ec = boost::asio::error::operation_not_supported;
+    const std::size_t bytes_transferred = 0;
+    io_service_.post(detail::bind_handler(handler, ec, bytes_transferred));
+  }
+
+  // Accept a new connection.
+  template <typename Socket>
+  boost::system::error_code accept(implementation_type&,
+      Socket&, endpoint_type*, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Start an asynchronous accept. The peer and peer_endpoint objects
+  // must be valid until the accept's handler is invoked.
+  template <typename Socket, typename Handler>
+  void async_accept(implementation_type&, Socket&,
+      endpoint_type*, Handler& handler)
+  {
+    boost::system::error_code ec = boost::asio::error::operation_not_supported;
+    io_service_.post(detail::bind_handler(handler, ec));
+  }
+
+  // Connect the socket to the specified endpoint.
+  boost::system::error_code connect(implementation_type&,
+      const endpoint_type&, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Start an asynchronous connect.
+  template <typename Handler>
+  void async_connect(implementation_type&,
+      const endpoint_type&, Handler& handler)
+  {
+    boost::system::error_code ec = boost::asio::error::operation_not_supported;
+    io_service_.post(detail::bind_handler(handler, ec));
+  }
+
+private:
+  boost::asio::io_service& io_service_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_NULL_SOCKET_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/null_static_mutex.hpp b/ext/patches/boost/asio/detail/null_static_mutex.hpp
new file mode 100644
index 0000000..0019d22
--- /dev/null
+++ b/ext/patches/boost/asio/detail/null_static_mutex.hpp
@@ -0,0 +1,62 @@
+//
+// detail/null_static_mutex.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_NULL_STATIC_MUTEX_HPP
+#define BOOST_ASIO_DETAIL_NULL_STATIC_MUTEX_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_THREADS)
+
+#include <boost/asio/detail/scoped_lock.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+struct null_static_mutex
+{
+  typedef boost::asio::detail::scoped_lock<null_static_mutex> scoped_lock;
+
+  // Initialise the mutex.
+  void init()
+  {
+  }
+
+  // Lock the mutex.
+  void lock()
+  {
+  }
+
+  // Unlock the mutex.
+  void unlock()
+  {
+  }
+
+  int unused_;
+};
+
+#define BOOST_ASIO_NULL_STATIC_MUTEX_INIT { 0 }
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_HAS_THREADS)
+
+#endif // BOOST_ASIO_DETAIL_NULL_STATIC_MUTEX_HPP
diff --git a/ext/patches/boost/asio/detail/null_thread.hpp b/ext/patches/boost/asio/detail/null_thread.hpp
new file mode 100644
index 0000000..fe9fb01
--- /dev/null
+++ b/ext/patches/boost/asio/detail/null_thread.hpp
@@ -0,0 +1,63 @@
+//
+// detail/null_thread.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_NULL_THREAD_HPP
+#define BOOST_ASIO_DETAIL_NULL_THREAD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_THREADS)
+
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class null_thread
+  : private noncopyable
+{
+public:
+  // Constructor.
+  template <typename Function>
+  null_thread(Function, unsigned int = 0)
+  {
+    boost::asio::detail::throw_error(
+        boost::asio::error::operation_not_supported, "thread");
+  }
+
+  // Destructor.
+  ~null_thread()
+  {
+  }
+
+  // Wait for the thread to exit.
+  void join()
+  {
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_HAS_THREADS)
+
+#endif // BOOST_ASIO_DETAIL_NULL_THREAD_HPP
diff --git a/ext/patches/boost/asio/detail/null_tss_ptr.hpp b/ext/patches/boost/asio/detail/null_tss_ptr.hpp
new file mode 100644
index 0000000..2cfcbd1
--- /dev/null
+++ b/ext/patches/boost/asio/detail/null_tss_ptr.hpp
@@ -0,0 +1,70 @@
+//
+// detail/null_tss_ptr.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_NULL_TSS_PTR_HPP
+#define BOOST_ASIO_DETAIL_NULL_TSS_PTR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_THREADS)
+
+#include <boost/asio/detail/noncopyable.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename T>
+class null_tss_ptr
+  : private noncopyable
+{
+public:
+  // Constructor.
+  null_tss_ptr()
+    : value_(0)
+  {
+  }
+
+  // Destructor.
+  ~null_tss_ptr()
+  {
+  }
+
+  // Get the value.
+  operator T*() const
+  {
+    return value_;
+  }
+
+  // Set the value.
+  void operator=(T* value)
+  {
+    value_ = value;
+  }
+
+private:
+  T* value_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_HAS_THREADS)
+
+#endif // BOOST_ASIO_DETAIL_NULL_TSS_PTR_HPP
diff --git a/ext/patches/boost/asio/detail/object_pool.hpp b/ext/patches/boost/asio/detail/object_pool.hpp
new file mode 100644
index 0000000..1b8f94d
--- /dev/null
+++ b/ext/patches/boost/asio/detail/object_pool.hpp
@@ -0,0 +1,148 @@
+//
+// detail/object_pool.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_OBJECT_POOL_HPP
+#define BOOST_ASIO_DETAIL_OBJECT_POOL_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/noncopyable.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Object>
+class object_pool;
+
+class object_pool_access
+{
+public:
+  template <typename Object>
+  static Object* create()
+  {
+    return new Object;
+  }
+
+  template <typename Object>
+  static void destroy(Object* o)
+  {
+    delete o;
+  }
+
+  template <typename Object>
+  static Object*& next(Object* o)
+  {
+    return o->next_;
+  }
+
+  template <typename Object>
+  static Object*& prev(Object* o)
+  {
+    return o->prev_;
+  }
+};
+
+template <typename Object>
+class object_pool
+  : private noncopyable
+{
+public:
+  // Constructor.
+  object_pool()
+    : live_list_(0),
+      free_list_(0)
+  {
+  }
+
+  // Destructor destroys all objects.
+  ~object_pool()
+  {
+    destroy_list(live_list_);
+    destroy_list(free_list_);
+  }
+
+  // Get the object at the start of the live list.
+  Object* first()
+  {
+    return live_list_;
+  }
+
+  // Allocate a new object.
+  Object* alloc()
+  {
+    Object* o = free_list_;
+    if (o)
+      free_list_ = object_pool_access::next(free_list_);
+    else
+      o = object_pool_access::create<Object>();
+
+    object_pool_access::next(o) = live_list_;
+    object_pool_access::prev(o) = 0;
+    if (live_list_)
+      object_pool_access::prev(live_list_) = o;
+    live_list_ = o;
+
+    return o;
+  }
+
+  // Free an object. Moves it to the free list. No destructors are run.
+  void free(Object* o)
+  {
+    if (live_list_ == o)
+      live_list_ = object_pool_access::next(o);
+
+    if (object_pool_access::prev(o))
+    {
+      object_pool_access::next(object_pool_access::prev(o))
+        = object_pool_access::next(o);
+    }
+
+    if (object_pool_access::next(o))
+    {
+      object_pool_access::prev(object_pool_access::next(o))
+        = object_pool_access::prev(o);
+    }
+
+    object_pool_access::next(o) = free_list_;
+    object_pool_access::prev(o) = 0;
+    free_list_ = o;
+  }
+
+private:
+  // Helper function to destroy all elements in a list.
+  void destroy_list(Object* list)
+  {
+    while (list)
+    {
+      Object* o = list;
+      list = object_pool_access::next(o);
+      object_pool_access::destroy(o);
+    }
+  }
+
+  // The list of live objects.
+  Object* live_list_;
+
+  // The free list.
+  Object* free_list_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_OBJECT_POOL_HPP
diff --git a/ext/patches/boost/asio/detail/old_win_sdk_compat.hpp b/ext/patches/boost/asio/detail/old_win_sdk_compat.hpp
new file mode 100644
index 0000000..8ee6457
--- /dev/null
+++ b/ext/patches/boost/asio/detail/old_win_sdk_compat.hpp
@@ -0,0 +1,216 @@
+//
+// detail/old_win_sdk_compat.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_OLD_WIN_SDK_COMPAT_HPP
+#define BOOST_ASIO_DETAIL_OLD_WIN_SDK_COMPAT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+// Guess whether we are building against on old Platform SDK.
+#if !defined(IN6ADDR_ANY_INIT)
+#define BOOST_ASIO_HAS_OLD_WIN_SDK 1
+#endif // !defined(IN6ADDR_ANY_INIT)
+
+#if defined(BOOST_ASIO_HAS_OLD_WIN_SDK)
+
+// Emulation of types that are missing from old Platform SDKs.
+//
+// N.B. this emulation is also used if building for a Windows 2000 target with
+// a recent (i.e. Vista or later) SDK, as the SDK does not provide IPv6 support
+// in that case.
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+enum
+{
+  sockaddr_storage_maxsize = 128, // Maximum size.
+  sockaddr_storage_alignsize = (sizeof(__int64)), // Desired alignment.
+  sockaddr_storage_pad1size = (sockaddr_storage_alignsize - sizeof(short)),
+  sockaddr_storage_pad2size = (sockaddr_storage_maxsize -
+      (sizeof(short) + sockaddr_storage_pad1size + sockaddr_storage_alignsize))
+};
+
+struct sockaddr_storage_emulation
+{
+  short ss_family;
+  char __ss_pad1[sockaddr_storage_pad1size];
+  __int64 __ss_align;
+  char __ss_pad2[sockaddr_storage_pad2size];
+};
+
+struct in6_addr_emulation
+{
+  union
+  {
+    u_char Byte[16];
+    u_short Word[8];
+  } u;
+};
+
+#if !defined(s6_addr)
+# define _S6_un u
+# define _S6_u8 Byte
+# define s6_addr _S6_un._S6_u8
+#endif // !defined(s6_addr)
+
+struct sockaddr_in6_emulation
+{
+  short sin6_family;
+  u_short sin6_port;
+  u_long sin6_flowinfo;
+  in6_addr_emulation sin6_addr;
+  u_long sin6_scope_id;
+};
+
+struct ipv6_mreq_emulation
+{
+  in6_addr_emulation ipv6mr_multiaddr;
+  unsigned int ipv6mr_interface;
+};
+
+struct addrinfo_emulation
+{
+  int ai_flags;
+  int ai_family;
+  int ai_socktype;
+  int ai_protocol;
+  size_t ai_addrlen;
+  char* ai_canonname;
+  sockaddr* ai_addr;
+  addrinfo_emulation* ai_next;
+};
+
+#if !defined(AI_PASSIVE)
+# define AI_PASSIVE 0x1
+#endif
+
+#if !defined(AI_CANONNAME)
+# define AI_CANONNAME 0x2
+#endif
+
+#if !defined(AI_NUMERICHOST)
+# define AI_NUMERICHOST 0x4
+#endif
+
+#if !defined(EAI_AGAIN)
+# define EAI_AGAIN WSATRY_AGAIN
+#endif
+
+#if !defined(EAI_BADFLAGS)
+# define EAI_BADFLAGS WSAEINVAL
+#endif
+
+#if !defined(EAI_FAIL)
+# define EAI_FAIL WSANO_RECOVERY
+#endif
+
+#if !defined(EAI_FAMILY)
+# define EAI_FAMILY WSAEAFNOSUPPORT
+#endif
+
+#if !defined(EAI_MEMORY)
+# define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY
+#endif
+
+#if !defined(EAI_NODATA)
+# define EAI_NODATA WSANO_DATA
+#endif
+
+#if !defined(EAI_NONAME)
+# define EAI_NONAME WSAHOST_NOT_FOUND
+#endif
+
+#if !defined(EAI_SERVICE)
+# define EAI_SERVICE WSATYPE_NOT_FOUND
+#endif
+
+#if !defined(EAI_SOCKTYPE)
+# define EAI_SOCKTYPE WSAESOCKTNOSUPPORT
+#endif
+
+#if !defined(NI_NOFQDN)
+# define NI_NOFQDN 0x01
+#endif
+
+#if !defined(NI_NUMERICHOST)
+# define NI_NUMERICHOST 0x02
+#endif
+
+#if !defined(NI_NAMEREQD)
+# define NI_NAMEREQD 0x04
+#endif
+
+#if !defined(NI_NUMERICSERV)
+# define NI_NUMERICSERV 0x08
+#endif
+
+#if !defined(NI_DGRAM)
+# define NI_DGRAM 0x10
+#endif
+
+#if !defined(IPPROTO_IPV6)
+# define IPPROTO_IPV6 41
+#endif
+
+#if !defined(IPV6_UNICAST_HOPS)
+# define IPV6_UNICAST_HOPS 4
+#endif
+
+#if !defined(IPV6_MULTICAST_IF)
+# define IPV6_MULTICAST_IF 9
+#endif
+
+#if !defined(IPV6_MULTICAST_HOPS)
+# define IPV6_MULTICAST_HOPS 10
+#endif
+
+#if !defined(IPV6_MULTICAST_LOOP)
+# define IPV6_MULTICAST_LOOP 11
+#endif
+
+#if !defined(IPV6_JOIN_GROUP)
+# define IPV6_JOIN_GROUP 12
+#endif
+
+#if !defined(IPV6_LEAVE_GROUP)
+# define IPV6_LEAVE_GROUP 13
+#endif
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_OLD_WIN_SDK)
+
+// Even newer Platform SDKs that support IPv6 may not define IPV6_V6ONLY.
+#if !defined(IPV6_V6ONLY)
+# define IPV6_V6ONLY 27
+#endif
+
+// Some SDKs (e.g. Windows CE) don't define IPPROTO_ICMPV6.
+#if !defined(IPPROTO_ICMPV6)
+# define IPPROTO_ICMPV6 58
+#endif
+
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+#endif // BOOST_ASIO_DETAIL_OLD_WIN_SDK_COMPAT_HPP
diff --git a/ext/patches/boost/asio/detail/op_queue.hpp b/ext/patches/boost/asio/detail/op_queue.hpp
new file mode 100644
index 0000000..ac17b14
--- /dev/null
+++ b/ext/patches/boost/asio/detail/op_queue.hpp
@@ -0,0 +1,158 @@
+//
+// detail/op_queue.hpp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_OP_QUEUE_HPP
+#define BOOST_ASIO_DETAIL_OP_QUEUE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/noncopyable.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Operation>
+class op_queue;
+
+class op_queue_access
+{
+public:
+  template <typename Operation>
+  static Operation* next(Operation* o)
+  {
+    return static_cast<Operation*>(o->next_);
+  }
+
+  template <typename Operation1, typename Operation2>
+  static void next(Operation1*& o1, Operation2* o2)
+  {
+    o1->next_ = o2;
+  }
+
+  template <typename Operation>
+  static void destroy(Operation* o)
+  {
+    o->destroy();
+  }
+
+  template <typename Operation>
+  static Operation*& front(op_queue<Operation>& q)
+  {
+    return q.front_;
+  }
+
+  template <typename Operation>
+  static Operation*& back(op_queue<Operation>& q)
+  {
+    return q.back_;
+  }
+};
+
+template <typename Operation>
+class op_queue
+  : private noncopyable
+{
+public:
+  // Constructor.
+  op_queue()
+    : front_(0),
+      back_(0)
+  {
+  }
+
+  // Destructor destroys all operations.
+  ~op_queue()
+  {
+    while (Operation* op = front_)
+    {
+      pop();
+      op_queue_access::destroy(op);
+    }
+  }
+
+  // Get the operation at the front of the queue.
+  Operation* front()
+  {
+    return front_;
+  }
+
+  // Pop an operation from the front of the queue.
+  void pop()
+  {
+    if (front_)
+    {
+      Operation* tmp = front_;
+      front_ = op_queue_access::next(front_);
+      if (front_ == 0)
+        back_ = 0;
+      op_queue_access::next(tmp, static_cast<Operation*>(0));
+    }
+  }
+
+  // Push an operation on to the back of the queue.
+  void push(Operation* h)
+  {
+    op_queue_access::next(h, static_cast<Operation*>(0));
+    if (back_)
+    {
+      op_queue_access::next(back_, h);
+      back_ = h;
+    }
+    else
+    {
+      front_ = back_ = h;
+    }
+  }
+
+  // Push all operations from another queue on to the back of the queue. The
+  // source queue may contain operations of a derived type.
+  template <typename OtherOperation>
+  void push(op_queue<OtherOperation>& q)
+  {
+    if (Operation* other_front = op_queue_access::front(q))
+    {
+      if (back_)
+        op_queue_access::next(back_, other_front);
+      else
+        front_ = other_front;
+      back_ = op_queue_access::back(q);
+      op_queue_access::front(q) = 0;
+      op_queue_access::back(q) = 0;
+    }
+  }
+
+  // Whether the queue is empty.
+  bool empty() const
+  {
+    return front_ == 0;
+  }
+
+private:
+  friend class op_queue_access;
+
+  // The front of the queue.
+  Operation* front_;
+
+  // The back of the queue.
+  Operation* back_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_OP_QUEUE_HPP
diff --git a/ext/patches/boost/asio/detail/operation.hpp b/ext/patches/boost/asio/detail/operation.hpp
new file mode 100644
index 0000000..91b3392
--- /dev/null
+++ b/ext/patches/boost/asio/detail/operation.hpp
@@ -0,0 +1,40 @@
+//
+// detail/operation.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_OPERATION_HPP
+#define BOOST_ASIO_DETAIL_OPERATION_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+# include <boost/asio/detail/win_iocp_operation.hpp>
+#else
+# include <boost/asio/detail/task_io_service_operation.hpp>
+#endif
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+typedef win_iocp_operation operation;
+#else
+typedef task_io_service_operation operation;
+#endif
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_OPERATION_HPP
diff --git a/ext/patches/boost/asio/detail/pipe_select_interrupter.hpp b/ext/patches/boost/asio/detail/pipe_select_interrupter.hpp
new file mode 100644
index 0000000..dacab28
--- /dev/null
+++ b/ext/patches/boost/asio/detail/pipe_select_interrupter.hpp
@@ -0,0 +1,91 @@
+//
+// detail/pipe_select_interrupter.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_PIPE_SELECT_INTERRUPTER_HPP
+#define BOOST_ASIO_DETAIL_PIPE_SELECT_INTERRUPTER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS)
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+#if !defined(__CYGWIN__)
+#if !defined(__SYMBIAN32__)
+#if !defined(BOOST_ASIO_HAS_EVENTFD)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class pipe_select_interrupter
+{
+public:
+  // Constructor.
+  BOOST_ASIO_DECL pipe_select_interrupter();
+
+  // Destructor.
+  BOOST_ASIO_DECL ~pipe_select_interrupter();
+
+  // Recreate the interrupter's descriptors. Used after a fork.
+  BOOST_ASIO_DECL void recreate();
+
+  // Interrupt the select call.
+  BOOST_ASIO_DECL void interrupt();
+
+  // Reset the select interrupt. Returns true if the call was interrupted.
+  BOOST_ASIO_DECL bool reset();
+
+  // Get the read descriptor to be passed to select.
+  int read_descriptor() const
+  {
+    return read_descriptor_;
+  }
+
+private:
+  // Open the descriptors. Throws on error.
+  BOOST_ASIO_DECL void open_descriptors();
+
+  // Close the descriptors.
+  BOOST_ASIO_DECL void close_descriptors();
+
+  // The read end of a connection used to interrupt the select call. This file
+  // descriptor is passed to select such that when it is time to stop, a single
+  // byte will be written on the other end of the connection and this
+  // descriptor will become readable.
+  int read_descriptor_;
+
+  // The write end of a connection used to interrupt the select call. A single
+  // byte may be written to this to wake up the select which is waiting for the
+  // other end to become readable.
+  int write_descriptor_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/pipe_select_interrupter.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // !defined(BOOST_ASIO_HAS_EVENTFD)
+#endif // !defined(__SYMBIAN32__)
+#endif // !defined(__CYGWIN__)
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+#endif // !defined(BOOST_ASIO_WINDOWS)
+
+#endif // BOOST_ASIO_DETAIL_PIPE_SELECT_INTERRUPTER_HPP
diff --git a/ext/patches/boost/asio/detail/pop_options.hpp b/ext/patches/boost/asio/detail/pop_options.hpp
new file mode 100644
index 0000000..8ff4797
--- /dev/null
+++ b/ext/patches/boost/asio/detail/pop_options.hpp
@@ -0,0 +1,105 @@
+//
+// detail/pop_options.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// No header guard
+
+#if defined(__COMO__)
+
+// Comeau C++
+
+#elif defined(__DMC__)
+
+// Digital Mars C++
+
+#elif defined(__INTEL_COMPILER) || defined(__ICL) \
+  || defined(__ICC) || defined(__ECC)
+
+// Intel C++
+
+#elif defined(__GNUC__)
+
+// GNU C++
+
+# if defined(__MINGW32__) || defined(__CYGWIN__)
+#  pragma pack (pop)
+# endif
+
+# if defined(__OBJC__)
+#  if !defined(__APPLE_CC__) || (__APPLE_CC__ <= 1)
+#   if defined(BOOST_ASIO_OBJC_WORKAROUND)
+#    undef Protocol
+#    undef id
+#    undef BOOST_ASIO_OBJC_WORKAROUND
+#   endif
+#  endif
+# endif
+
+#elif defined(__KCC)
+
+// Kai C++
+
+#elif defined(__sgi)
+
+// SGI MIPSpro C++
+
+#elif defined(__DECCXX)
+
+// Compaq Tru64 Unix cxx
+
+#elif defined(__ghs)
+
+// Greenhills C++
+
+#elif defined(__BORLANDC__)
+
+// Borland C++
+
+# pragma option pop
+# pragma nopushoptwarn
+# pragma nopackwarning
+
+#elif defined(__MWERKS__)
+
+// Metrowerks CodeWarrior
+
+#elif defined(__SUNPRO_CC)
+
+// Sun Workshop Compiler C++
+
+#elif defined(__HP_aCC)
+
+// HP aCC
+
+#elif defined(__MRC__) || defined(__SC__)
+
+// MPW MrCpp or SCpp
+
+#elif defined(__IBMCPP__)
+
+// IBM Visual Age
+
+#elif defined(_MSC_VER)
+
+// Microsoft Visual C++
+//
+// Must remain the last #elif since some other vendors (Metrowerks, for example)
+// also #define _MSC_VER
+
+# pragma warning (pop)
+# pragma pack (pop)
+
+# if defined(__cplusplus_cli) || defined(__cplusplus_winrt)
+#  if defined(BOOST_ASIO_CLR_WORKAROUND)
+#   undef generic
+#   undef BOOST_ASIO_CLR_WORKAROUND
+#  endif
+# endif
+
+#endif
diff --git a/ext/patches/boost/asio/detail/posix_event.hpp b/ext/patches/boost/asio/detail/posix_event.hpp
new file mode 100644
index 0000000..febfca2
--- /dev/null
+++ b/ext/patches/boost/asio/detail/posix_event.hpp
@@ -0,0 +1,128 @@
+//
+// detail/posix_event.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_POSIX_EVENT_HPP
+#define BOOST_ASIO_DETAIL_POSIX_EVENT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_PTHREADS)
+
+#include <pthread.h>
+#include <boost/asio/detail/assert.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class posix_event
+  : private noncopyable
+{
+public:
+  // Constructor.
+  BOOST_ASIO_DECL posix_event();
+
+  // Destructor.
+  ~posix_event()
+  {
+    ::pthread_cond_destroy(&cond_);
+  }
+
+  // Signal the event. (Retained for backward compatibility.)
+  template <typename Lock>
+  void signal(Lock& lock)
+  {
+    this->signal_all(lock);
+  }
+
+  // Signal all waiters.
+  template <typename Lock>
+  void signal_all(Lock& lock)
+  {
+    BOOST_ASIO_ASSERT(lock.locked());
+    (void)lock;
+    state_ |= 1;
+    ::pthread_cond_broadcast(&cond_); // Ignore EINVAL.
+  }
+
+  // Unlock the mutex and signal one waiter.
+  template <typename Lock>
+  void unlock_and_signal_one(Lock& lock)
+  {
+    BOOST_ASIO_ASSERT(lock.locked());
+    state_ |= 1;
+    bool have_waiters = (state_ > 1);
+    lock.unlock();
+    if (have_waiters)
+      ::pthread_cond_signal(&cond_); // Ignore EINVAL.
+  }
+
+  // If there's a waiter, unlock the mutex and signal it.
+  template <typename Lock>
+  bool maybe_unlock_and_signal_one(Lock& lock)
+  {
+    BOOST_ASIO_ASSERT(lock.locked());
+    state_ |= 1;
+    if (state_ > 1)
+    {
+      lock.unlock();
+      ::pthread_cond_signal(&cond_); // Ignore EINVAL.
+      return true;
+    }
+    return false;
+  }
+
+  // Reset the event.
+  template <typename Lock>
+  void clear(Lock& lock)
+  {
+    BOOST_ASIO_ASSERT(lock.locked());
+    (void)lock;
+    state_ &= ~std::size_t(1);
+  }
+
+  // Wait for the event to become signalled.
+  template <typename Lock>
+  void wait(Lock& lock)
+  {
+    BOOST_ASIO_ASSERT(lock.locked());
+    while ((state_ & 1) == 0)
+    {
+      state_ += 2;
+      ::pthread_cond_wait(&cond_, &lock.mutex().mutex_); // Ignore EINVAL.
+      state_ -= 2;
+    }
+  }
+
+private:
+  ::pthread_cond_t cond_;
+  std::size_t state_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/posix_event.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_HAS_PTHREADS)
+
+#endif // BOOST_ASIO_DETAIL_POSIX_EVENT_HPP
diff --git a/ext/patches/boost/asio/detail/posix_fd_set_adapter.hpp b/ext/patches/boost/asio/detail/posix_fd_set_adapter.hpp
new file mode 100644
index 0000000..bf8ddc4
--- /dev/null
+++ b/ext/patches/boost/asio/detail/posix_fd_set_adapter.hpp
@@ -0,0 +1,120 @@
+//
+// detail/posix_fd_set_adapter.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_POSIX_FD_SET_ADAPTER_HPP
+#define BOOST_ASIO_DETAIL_POSIX_FD_SET_ADAPTER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(__CYGWIN__) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <cstring>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/reactor_op_queue.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+// Adapts the FD_SET type to meet the Descriptor_Set concept's requirements.
+class posix_fd_set_adapter : noncopyable
+{
+public:
+  posix_fd_set_adapter()
+    : max_descriptor_(invalid_socket)
+  {
+    using namespace std; // Needed for memset on Solaris.
+    FD_ZERO(&fd_set_);
+  }
+
+  void reset()
+  {
+    using namespace std; // Needed for memset on Solaris.
+    FD_ZERO(&fd_set_);
+  }
+
+  bool set(socket_type descriptor)
+  {
+    if (descriptor < (socket_type)FD_SETSIZE)
+    {
+      if (max_descriptor_ == invalid_socket || descriptor > max_descriptor_)
+        max_descriptor_ = descriptor;
+      FD_SET(descriptor, &fd_set_);
+      return true;
+    }
+    return false;
+  }
+
+  void set(reactor_op_queue<socket_type>& operations, op_queue<operation>& ops)
+  {
+    reactor_op_queue<socket_type>::iterator i = operations.begin();
+    while (i != operations.end())
+    {
+      reactor_op_queue<socket_type>::iterator op_iter = i++;
+      if (!set(op_iter->first))
+      {
+        boost::system::error_code ec(error::fd_set_failure);
+        operations.cancel_operations(op_iter, ops, ec);
+      }
+    }
+  }
+
+  bool is_set(socket_type descriptor) const
+  {
+    return FD_ISSET(descriptor, &fd_set_) != 0;
+  }
+
+  operator fd_set*()
+  {
+    return &fd_set_;
+  }
+
+  socket_type max_descriptor() const
+  {
+    return max_descriptor_;
+  }
+
+  void perform(reactor_op_queue<socket_type>& operations,
+      op_queue<operation>& ops) const
+  {
+    reactor_op_queue<socket_type>::iterator i = operations.begin();
+    while (i != operations.end())
+    {
+      reactor_op_queue<socket_type>::iterator op_iter = i++;
+      if (is_set(op_iter->first))
+        operations.perform_operations(op_iter, ops);
+    }
+  }
+
+private:
+  mutable fd_set fd_set_;
+  socket_type max_descriptor_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_WINDOWS)
+       // && !defined(__CYGWIN__)
+       // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_POSIX_FD_SET_ADAPTER_HPP
diff --git a/ext/patches/boost/asio/detail/posix_mutex.hpp b/ext/patches/boost/asio/detail/posix_mutex.hpp
new file mode 100644
index 0000000..8160c54
--- /dev/null
+++ b/ext/patches/boost/asio/detail/posix_mutex.hpp
@@ -0,0 +1,78 @@
+//
+// detail/posix_mutex.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_POSIX_MUTEX_HPP
+#define BOOST_ASIO_DETAIL_POSIX_MUTEX_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_PTHREADS)
+
+#include <pthread.h>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/scoped_lock.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class posix_event;
+
+class posix_mutex
+  : private noncopyable
+{
+public:
+  typedef boost::asio::detail::scoped_lock<posix_mutex> scoped_lock;
+
+  // Constructor.
+  BOOST_ASIO_DECL posix_mutex();
+
+  // Destructor.
+  ~posix_mutex()
+  {
+    ::pthread_mutex_destroy(&mutex_); // Ignore EBUSY.
+  }
+
+  // Lock the mutex.
+  void lock()
+  {
+    (void)::pthread_mutex_lock(&mutex_); // Ignore EINVAL.
+  }
+
+  // Unlock the mutex.
+  void unlock()
+  {
+    (void)::pthread_mutex_unlock(&mutex_); // Ignore EINVAL.
+  }
+
+private:
+  friend class posix_event;
+  ::pthread_mutex_t mutex_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/posix_mutex.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_HAS_PTHREADS)
+
+#endif // BOOST_ASIO_DETAIL_POSIX_MUTEX_HPP
diff --git a/ext/patches/boost/asio/detail/posix_signal_blocker.hpp b/ext/patches/boost/asio/detail/posix_signal_blocker.hpp
new file mode 100644
index 0000000..b564c68
--- /dev/null
+++ b/ext/patches/boost/asio/detail/posix_signal_blocker.hpp
@@ -0,0 +1,87 @@
+//
+// detail/posix_signal_blocker.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_POSIX_SIGNAL_BLOCKER_HPP
+#define BOOST_ASIO_DETAIL_POSIX_SIGNAL_BLOCKER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_PTHREADS)
+
+#include <csignal>
+#include <pthread.h>
+#include <signal.h>
+#include <boost/asio/detail/noncopyable.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class posix_signal_blocker
+  : private noncopyable
+{
+public:
+  // Constructor blocks all signals for the calling thread.
+  posix_signal_blocker()
+    : blocked_(false)
+  {
+    sigset_t new_mask;
+    sigfillset(&new_mask);
+    blocked_ = (pthread_sigmask(SIG_BLOCK, &new_mask, &old_mask_) == 0);
+  }
+
+  // Destructor restores the previous signal mask.
+  ~posix_signal_blocker()
+  {
+    if (blocked_)
+      pthread_sigmask(SIG_SETMASK, &old_mask_, 0);
+  }
+
+  // Block all signals for the calling thread.
+  void block()
+  {
+    if (!blocked_)
+    {
+      sigset_t new_mask;
+      sigfillset(&new_mask);
+      blocked_ = (pthread_sigmask(SIG_BLOCK, &new_mask, &old_mask_) == 0);
+    }
+  }
+
+  // Restore the previous signal mask.
+  void unblock()
+  {
+    if (blocked_)
+      blocked_ = (pthread_sigmask(SIG_SETMASK, &old_mask_, 0) != 0);
+  }
+
+private:
+  // Have signals been blocked.
+  bool blocked_;
+
+  // The previous signal mask.
+  sigset_t old_mask_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_PTHREADS)
+
+#endif // BOOST_ASIO_DETAIL_POSIX_SIGNAL_BLOCKER_HPP
diff --git a/ext/patches/boost/asio/detail/posix_static_mutex.hpp b/ext/patches/boost/asio/detail/posix_static_mutex.hpp
new file mode 100644
index 0000000..f702a45
--- /dev/null
+++ b/ext/patches/boost/asio/detail/posix_static_mutex.hpp
@@ -0,0 +1,66 @@
+//
+// detail/posix_static_mutex.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_POSIX_STATIC_MUTEX_HPP
+#define BOOST_ASIO_DETAIL_POSIX_STATIC_MUTEX_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_PTHREADS)
+
+#include <pthread.h>
+#include <boost/asio/detail/scoped_lock.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+struct posix_static_mutex
+{
+  typedef boost::asio::detail::scoped_lock<posix_static_mutex> scoped_lock;
+
+  // Initialise the mutex.
+  void init()
+  {
+    // Nothing to do.
+  }
+
+  // Lock the mutex.
+  void lock()
+  {
+    (void)::pthread_mutex_lock(&mutex_); // Ignore EINVAL.
+  }
+
+  // Unlock the mutex.
+  void unlock()
+  {
+    (void)::pthread_mutex_unlock(&mutex_); // Ignore EINVAL.
+  }
+
+  ::pthread_mutex_t mutex_;
+};
+
+#define BOOST_ASIO_POSIX_STATIC_MUTEX_INIT { PTHREAD_MUTEX_INITIALIZER }
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_PTHREADS)
+
+#endif // BOOST_ASIO_DETAIL_POSIX_STATIC_MUTEX_HPP
diff --git a/ext/patches/boost/asio/detail/posix_thread.hpp b/ext/patches/boost/asio/detail/posix_thread.hpp
new file mode 100644
index 0000000..8d2257b
--- /dev/null
+++ b/ext/patches/boost/asio/detail/posix_thread.hpp
@@ -0,0 +1,107 @@
+//
+// detail/posix_thread.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_POSIX_THREAD_HPP
+#define BOOST_ASIO_DETAIL_POSIX_THREAD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_PTHREADS)
+
+#include <pthread.h>
+#include <boost/asio/detail/noncopyable.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+extern "C"
+{
+  BOOST_ASIO_DECL void* boost_asio_detail_posix_thread_function(void* arg);
+}
+
+class posix_thread
+  : private noncopyable
+{
+public:
+  // Constructor.
+  template <typename Function>
+  posix_thread(Function f, unsigned int = 0)
+    : joined_(false)
+  {
+    start_thread(new func<Function>(f));
+  }
+
+  // Destructor.
+  BOOST_ASIO_DECL ~posix_thread();
+
+  // Wait for the thread to exit.
+  BOOST_ASIO_DECL void join();
+
+private:
+  friend void* boost_asio_detail_posix_thread_function(void* arg);
+
+  class func_base
+  {
+  public:
+    virtual ~func_base() {}
+    virtual void run() = 0;
+  };
+
+  struct auto_func_base_ptr
+  {
+    func_base* ptr;
+    ~auto_func_base_ptr() { delete ptr; }
+  };
+
+  template <typename Function>
+  class func
+    : public func_base
+  {
+  public:
+    func(Function f)
+      : f_(f)
+    {
+    }
+
+    virtual void run()
+    {
+      f_();
+    }
+
+  private:
+    Function f_;
+  };
+
+  BOOST_ASIO_DECL void start_thread(func_base* arg);
+
+  ::pthread_t thread_;
+  bool joined_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/posix_thread.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_HAS_PTHREADS)
+
+#endif // BOOST_ASIO_DETAIL_POSIX_THREAD_HPP
diff --git a/ext/patches/boost/asio/detail/posix_tss_ptr.hpp b/ext/patches/boost/asio/detail/posix_tss_ptr.hpp
new file mode 100644
index 0000000..516bf2c
--- /dev/null
+++ b/ext/patches/boost/asio/detail/posix_tss_ptr.hpp
@@ -0,0 +1,81 @@
+//
+// detail/posix_tss_ptr.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_POSIX_TSS_PTR_HPP
+#define BOOST_ASIO_DETAIL_POSIX_TSS_PTR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_PTHREADS)
+
+#include <pthread.h>
+#include <boost/asio/detail/noncopyable.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+// Helper function to create thread-specific storage.
+BOOST_ASIO_DECL void posix_tss_ptr_create(pthread_key_t& key);
+
+template <typename T>
+class posix_tss_ptr
+  : private noncopyable
+{
+public:
+  // Constructor.
+  posix_tss_ptr()
+  {
+    posix_tss_ptr_create(tss_key_);
+  }
+
+  // Destructor.
+  ~posix_tss_ptr()
+  {
+    ::pthread_key_delete(tss_key_);
+  }
+
+  // Get the value.
+  operator T*() const
+  {
+    return static_cast<T*>(::pthread_getspecific(tss_key_));
+  }
+
+  // Set the value.
+  void operator=(T* value)
+  {
+    ::pthread_setspecific(tss_key_, value);
+  }
+
+private:
+  // Thread-specific storage to allow unlocked access to determine whether a
+  // thread is a member of the pool.
+  pthread_key_t tss_key_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/posix_tss_ptr.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_HAS_PTHREADS)
+
+#endif // BOOST_ASIO_DETAIL_POSIX_TSS_PTR_HPP
diff --git a/ext/patches/boost/asio/detail/push_options.hpp b/ext/patches/boost/asio/detail/push_options.hpp
new file mode 100644
index 0000000..8725afa
--- /dev/null
+++ b/ext/patches/boost/asio/detail/push_options.hpp
@@ -0,0 +1,138 @@
+//
+// detail/push_options.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// No header guard
+
+#if defined(__COMO__)
+
+// Comeau C++
+
+#elif defined(__DMC__)
+
+// Digital Mars C++
+
+#elif defined(__INTEL_COMPILER) || defined(__ICL) \
+  || defined(__ICC) || defined(__ECC)
+
+// Intel C++
+
+#elif defined(__GNUC__)
+
+// GNU C++
+
+# if defined(__MINGW32__) || defined(__CYGWIN__)
+#  pragma pack (push, 8)
+# endif
+
+# if defined(__OBJC__)
+#  if !defined(__APPLE_CC__) || (__APPLE_CC__ <= 1)
+#   if !defined(BOOST_ASIO_DISABLE_OBJC_WORKAROUND)
+#    if !defined(Protocol) && !defined(id)
+#     define Protocol cpp_Protocol
+#     define id cpp_id
+#     define BOOST_ASIO_OBJC_WORKAROUND
+#    endif
+#   endif
+#  endif
+# endif
+
+#elif defined(__KCC)
+
+// Kai C++
+
+#elif defined(__sgi)
+
+// SGI MIPSpro C++
+
+#elif defined(__DECCXX)
+
+// Compaq Tru64 Unix cxx
+
+#elif defined(__ghs)
+
+// Greenhills C++
+
+#elif defined(__BORLANDC__)
+
+// Borland C++
+
+# pragma option push -a8 -b -Ve- -Vx- -w-inl -vi-
+# pragma nopushoptwarn
+# pragma nopackwarning
+# if !defined(__MT__)
+#  error Multithreaded RTL must be selected.
+# endif // !defined(__MT__)
+
+#elif defined(__MWERKS__)
+
+// Metrowerks CodeWarrior
+
+#elif defined(__SUNPRO_CC)
+
+// Sun Workshop Compiler C++
+
+#elif defined(__HP_aCC)
+
+// HP aCC
+
+#elif defined(__MRC__) || defined(__SC__)
+
+// MPW MrCpp or SCpp
+
+#elif defined(__IBMCPP__)
+
+// IBM Visual Age
+
+#elif defined(_MSC_VER)
+
+// Microsoft Visual C++
+//
+// Must remain the last #elif since some other vendors (Metrowerks, for example)
+// also #define _MSC_VER
+
+# pragma warning (disable:4103)
+# pragma warning (push)
+# pragma warning (disable:4127)
+# pragma warning (disable:4180)
+# pragma warning (disable:4244)
+# pragma warning (disable:4355)
+# pragma warning (disable:4510)
+# pragma warning (disable:4512)
+# pragma warning (disable:4610)
+# pragma warning (disable:4675)
+# if defined(_M_IX86) && defined(_Wp64)
+// The /Wp64 option is broken. If you want to check 64 bit portability, use a
+// 64 bit compiler!
+#  pragma warning (disable:4311)
+#  pragma warning (disable:4312)
+# endif // defined(_M_IX86) && defined(_Wp64)
+# pragma pack (push, 8)
+// Note that if the /Og optimisation flag is enabled with MSVC6, the compiler
+// has a tendency to incorrectly optimise away some calls to member template
+// functions, even though those functions contain code that should not be
+// optimised away! Therefore we will always disable this optimisation option
+// for the MSVC6 compiler.
+# if (_MSC_VER < 1300)
+#  pragma optimize ("g", off)
+# endif
+# if !defined(_MT)
+#  error Multithreaded RTL must be selected.
+# endif // !defined(_MT)
+
+# if defined(__cplusplus_cli) || defined(__cplusplus_winrt)
+#  if !defined(BOOST_ASIO_DISABLE_CLR_WORKAROUND)
+#   if !defined(generic)
+#    define generic cpp_generic
+#    define BOOST_ASIO_CLR_WORKAROUND
+#   endif
+#  endif
+# endif
+
+#endif
diff --git a/ext/patches/boost/asio/detail/reactive_descriptor_service.hpp b/ext/patches/boost/asio/detail/reactive_descriptor_service.hpp
new file mode 100644
index 0000000..2c2e828
--- /dev/null
+++ b/ext/patches/boost/asio/detail/reactive_descriptor_service.hpp
@@ -0,0 +1,324 @@
+//
+// detail/reactive_descriptor_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_REACTIVE_DESCRIPTOR_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_REACTIVE_DESCRIPTOR_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  && !defined(__CYGWIN__)
+
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/descriptor_ops.hpp>
+#include <boost/asio/detail/descriptor_read_op.hpp>
+#include <boost/asio/detail/descriptor_write_op.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/reactive_null_buffers_op.hpp>
+#include <boost/asio/detail/reactor.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class reactive_descriptor_service
+{
+public:
+  // The native type of a descriptor.
+  typedef int native_handle_type;
+
+  // The implementation type of the descriptor.
+  class implementation_type
+    : private boost::asio::detail::noncopyable
+  {
+  public:
+    // Default constructor.
+    implementation_type()
+      : descriptor_(-1),
+        state_(0)
+    {
+    }
+
+  private:
+    // Only this service will have access to the internal values.
+    friend class reactive_descriptor_service;
+
+    // The native descriptor representation.
+    int descriptor_;
+
+    // The current state of the descriptor.
+    descriptor_ops::state_type state_;
+
+    // Per-descriptor data used by the reactor.
+    reactor::per_descriptor_data reactor_data_;
+  };
+
+  // Constructor.
+  BOOST_ASIO_DECL reactive_descriptor_service(
+      boost::asio::io_service& io_service);
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Construct a new descriptor implementation.
+  BOOST_ASIO_DECL void construct(implementation_type& impl);
+
+  // Move-construct a new descriptor implementation.
+  BOOST_ASIO_DECL void move_construct(implementation_type& impl,
+      implementation_type& other_impl);
+
+  // Move-assign from another descriptor implementation.
+  BOOST_ASIO_DECL void move_assign(implementation_type& impl,
+      reactive_descriptor_service& other_service,
+      implementation_type& other_impl);
+
+  // Destroy a descriptor implementation.
+  BOOST_ASIO_DECL void destroy(implementation_type& impl);
+
+  // Assign a native descriptor to a descriptor implementation.
+  BOOST_ASIO_DECL boost::system::error_code assign(implementation_type& impl,
+      const native_handle_type& native_descriptor,
+      boost::system::error_code& ec);
+
+  // Determine whether the descriptor is open.
+  bool is_open(const implementation_type& impl) const
+  {
+    return impl.descriptor_ != -1;
+  }
+
+  // Destroy a descriptor implementation.
+  BOOST_ASIO_DECL boost::system::error_code close(implementation_type& impl,
+      boost::system::error_code& ec);
+
+  // Get the native descriptor representation.
+  native_handle_type native_handle(const implementation_type& impl) const
+  {
+    return impl.descriptor_;
+  }
+
+  // Release ownership of the native descriptor representation.
+  BOOST_ASIO_DECL native_handle_type release(implementation_type& impl);
+
+  // Cancel all operations associated with the descriptor.
+  BOOST_ASIO_DECL boost::system::error_code cancel(implementation_type& impl,
+      boost::system::error_code& ec);
+
+  // Perform an IO control command on the descriptor.
+  template <typename IO_Control_Command>
+  boost::system::error_code io_control(implementation_type& impl,
+      IO_Control_Command& command, boost::system::error_code& ec)
+  {
+    descriptor_ops::ioctl(impl.descriptor_, impl.state_,
+        command.name(), static_cast<ioctl_arg_type*>(command.data()), ec);
+    return ec;
+  }
+
+  // Gets the non-blocking mode of the descriptor.
+  bool non_blocking(const implementation_type& impl) const
+  {
+    return (impl.state_ & descriptor_ops::user_set_non_blocking) != 0;
+  }
+
+  // Sets the non-blocking mode of the descriptor.
+  boost::system::error_code non_blocking(implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    descriptor_ops::set_user_non_blocking(
+        impl.descriptor_, impl.state_, mode, ec);
+    return ec;
+  }
+
+  // Gets the non-blocking mode of the native descriptor implementation.
+  bool native_non_blocking(const implementation_type& impl) const
+  {
+    return (impl.state_ & descriptor_ops::internal_non_blocking) != 0;
+  }
+
+  // Sets the non-blocking mode of the native descriptor implementation.
+  boost::system::error_code native_non_blocking(implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    descriptor_ops::set_internal_non_blocking(
+        impl.descriptor_, impl.state_, mode, ec);
+    return ec;
+  }
+
+  // Write some data to the descriptor.
+  template <typename ConstBufferSequence>
+  size_t write_some(implementation_type& impl,
+      const ConstBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    buffer_sequence_adapter<boost::asio::const_buffer,
+        ConstBufferSequence> bufs(buffers);
+
+    return descriptor_ops::sync_write(impl.descriptor_, impl.state_,
+        bufs.buffers(), bufs.count(), bufs.all_empty(), ec);
+  }
+
+  // Wait until data can be written without blocking.
+  size_t write_some(implementation_type& impl,
+      const null_buffers&, boost::system::error_code& ec)
+  {
+    // Wait for descriptor to become ready.
+    descriptor_ops::poll_write(impl.descriptor_, impl.state_, ec);
+
+    return 0;
+  }
+
+  // Start an asynchronous write. The data being sent must be valid for the
+  // lifetime of the asynchronous operation.
+  template <typename ConstBufferSequence, typename Handler>
+  void async_write_some(implementation_type& impl,
+      const ConstBufferSequence& buffers, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef descriptor_write_op<ConstBufferSequence, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.descriptor_, buffers, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "descriptor", &impl, "async_write_some"));
+
+    start_op(impl, reactor::write_op, p.p, is_continuation, true,
+        buffer_sequence_adapter<boost::asio::const_buffer,
+          ConstBufferSequence>::all_empty(buffers));
+    p.v = p.p = 0;
+  }
+
+  // Start an asynchronous wait until data can be written without blocking.
+  template <typename Handler>
+  void async_write_some(implementation_type& impl,
+      const null_buffers&, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef reactive_null_buffers_op<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "descriptor",
+          &impl, "async_write_some(null_buffers)"));
+
+    start_op(impl, reactor::write_op, p.p, is_continuation, false, false);
+    p.v = p.p = 0;
+  }
+
+  // Read some data from the stream. Returns the number of bytes read.
+  template <typename MutableBufferSequence>
+  size_t read_some(implementation_type& impl,
+      const MutableBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    buffer_sequence_adapter<boost::asio::mutable_buffer,
+        MutableBufferSequence> bufs(buffers);
+
+    return descriptor_ops::sync_read(impl.descriptor_, impl.state_,
+        bufs.buffers(), bufs.count(), bufs.all_empty(), ec);
+  }
+
+  // Wait until data can be read without blocking.
+  size_t read_some(implementation_type& impl,
+      const null_buffers&, boost::system::error_code& ec)
+  {
+    // Wait for descriptor to become ready.
+    descriptor_ops::poll_read(impl.descriptor_, impl.state_, ec);
+
+    return 0;
+  }
+
+  // Start an asynchronous read. The buffer for the data being read must be
+  // valid for the lifetime of the asynchronous operation.
+  template <typename MutableBufferSequence, typename Handler>
+  void async_read_some(implementation_type& impl,
+      const MutableBufferSequence& buffers, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef descriptor_read_op<MutableBufferSequence, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.descriptor_, buffers, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "descriptor", &impl, "async_read_some"));
+
+    start_op(impl, reactor::read_op, p.p, is_continuation, true,
+        buffer_sequence_adapter<boost::asio::mutable_buffer,
+          MutableBufferSequence>::all_empty(buffers));
+    p.v = p.p = 0;
+  }
+
+  // Wait until data can be read without blocking.
+  template <typename Handler>
+  void async_read_some(implementation_type& impl,
+      const null_buffers&, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef reactive_null_buffers_op<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "descriptor",
+          &impl, "async_read_some(null_buffers)"));
+
+    start_op(impl, reactor::read_op, p.p, is_continuation, false, false);
+    p.v = p.p = 0;
+  }
+
+private:
+  // Start the asynchronous operation.
+  BOOST_ASIO_DECL void start_op(implementation_type& impl, int op_type,
+      reactor_op* op, bool is_continuation, bool is_non_blocking, bool noop);
+
+  // The selector that performs event demultiplexing for the service.
+  reactor& reactor_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/reactive_descriptor_service.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // !defined(BOOST_ASIO_WINDOWS)
+       //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+       //   && !defined(__CYGWIN__)
+
+#endif // BOOST_ASIO_DETAIL_REACTIVE_DESCRIPTOR_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/reactive_null_buffers_op.hpp b/ext/patches/boost/asio/detail/reactive_null_buffers_op.hpp
new file mode 100644
index 0000000..8834fdd
--- /dev/null
+++ b/ext/patches/boost/asio/detail/reactive_null_buffers_op.hpp
@@ -0,0 +1,90 @@
+//
+// detail/reactive_null_buffers_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_REACTIVE_NULL_BUFFERS_OP_HPP
+#define BOOST_ASIO_DETAIL_REACTIVE_NULL_BUFFERS_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Handler>
+class reactive_null_buffers_op : public reactor_op
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_null_buffers_op);
+
+  reactive_null_buffers_op(Handler& handler)
+    : reactor_op(&reactive_null_buffers_op::do_perform,
+        &reactive_null_buffers_op::do_complete),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static bool do_perform(reactor_op*)
+  {
+    return true;
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& /*ec*/,
+      std::size_t /*bytes_transferred*/)
+  {
+    // Take ownership of the handler object.
+    reactive_null_buffers_op* o(static_cast<reactive_null_buffers_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, o->ec_, o->bytes_transferred_);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_REACTIVE_NULL_BUFFERS_OP_HPP
diff --git a/ext/patches/boost/asio/detail/reactive_serial_port_service.hpp b/ext/patches/boost/asio/detail/reactive_serial_port_service.hpp
new file mode 100644
index 0000000..d4c68f1
--- /dev/null
+++ b/ext/patches/boost/asio/detail/reactive_serial_port_service.hpp
@@ -0,0 +1,236 @@
+//
+// detail/reactive_serial_port_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2008 Rep Invariant Systems, Inc. (info at repinvariant.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_REACTIVE_SERIAL_PORT_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_REACTIVE_SERIAL_PORT_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_SERIAL_PORT)
+#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+#include <string>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/serial_port_base.hpp>
+#include <boost/asio/detail/descriptor_ops.hpp>
+#include <boost/asio/detail/reactive_descriptor_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+// Extend reactive_descriptor_service to provide serial port support.
+class reactive_serial_port_service
+{
+public:
+  // The native type of a serial port.
+  typedef reactive_descriptor_service::native_handle_type native_handle_type;
+
+  // The implementation type of the serial port.
+  typedef reactive_descriptor_service::implementation_type implementation_type;
+
+  BOOST_ASIO_DECL reactive_serial_port_service(
+      boost::asio::io_service& io_service);
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Construct a new serial port implementation.
+  void construct(implementation_type& impl)
+  {
+    descriptor_service_.construct(impl);
+  }
+
+  // Move-construct a new serial port implementation.
+  void move_construct(implementation_type& impl,
+      implementation_type& other_impl)
+  {
+    descriptor_service_.move_construct(impl, other_impl);
+  }
+
+  // Move-assign from another serial port implementation.
+  void move_assign(implementation_type& impl,
+      reactive_serial_port_service& other_service,
+      implementation_type& other_impl)
+  {
+    descriptor_service_.move_assign(impl,
+        other_service.descriptor_service_, other_impl);
+  }
+
+  // Destroy a serial port implementation.
+  void destroy(implementation_type& impl)
+  {
+    descriptor_service_.destroy(impl);
+  }
+
+  // Open the serial port using the specified device name.
+  BOOST_ASIO_DECL boost::system::error_code open(implementation_type& impl,
+      const std::string& device, boost::system::error_code& ec);
+
+  // Assign a native descriptor to a serial port implementation.
+  boost::system::error_code assign(implementation_type& impl,
+      const native_handle_type& native_descriptor,
+      boost::system::error_code& ec)
+  {
+    return descriptor_service_.assign(impl, native_descriptor, ec);
+  }
+
+  // Determine whether the serial port is open.
+  bool is_open(const implementation_type& impl) const
+  {
+    return descriptor_service_.is_open(impl);
+  }
+
+  // Destroy a serial port implementation.
+  boost::system::error_code close(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return descriptor_service_.close(impl, ec);
+  }
+
+  // Get the native serial port representation.
+  native_handle_type native_handle(implementation_type& impl)
+  {
+    return descriptor_service_.native_handle(impl);
+  }
+
+  // Cancel all operations associated with the serial port.
+  boost::system::error_code cancel(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return descriptor_service_.cancel(impl, ec);
+  }
+
+  // Set an option on the serial port.
+  template <typename SettableSerialPortOption>
+  boost::system::error_code set_option(implementation_type& impl,
+      const SettableSerialPortOption& option, boost::system::error_code& ec)
+  {
+    return do_set_option(impl,
+        &reactive_serial_port_service::store_option<SettableSerialPortOption>,
+        &option, ec);
+  }
+
+  // Get an option from the serial port.
+  template <typename GettableSerialPortOption>
+  boost::system::error_code get_option(const implementation_type& impl,
+      GettableSerialPortOption& option, boost::system::error_code& ec) const
+  {
+    return do_get_option(impl,
+        &reactive_serial_port_service::load_option<GettableSerialPortOption>,
+        &option, ec);
+  }
+
+  // Send a break sequence to the serial port.
+  boost::system::error_code send_break(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    errno = 0;
+    descriptor_ops::error_wrapper(::tcsendbreak(
+          descriptor_service_.native_handle(impl), 0), ec);
+    return ec;
+  }
+
+  // Write the given data. Returns the number of bytes sent.
+  template <typename ConstBufferSequence>
+  size_t write_some(implementation_type& impl,
+      const ConstBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return descriptor_service_.write_some(impl, buffers, ec);
+  }
+
+  // Start an asynchronous write. The data being written must be valid for the
+  // lifetime of the asynchronous operation.
+  template <typename ConstBufferSequence, typename Handler>
+  void async_write_some(implementation_type& impl,
+      const ConstBufferSequence& buffers, Handler& handler)
+  {
+    descriptor_service_.async_write_some(impl, buffers, handler);
+  }
+
+  // Read some data. Returns the number of bytes received.
+  template <typename MutableBufferSequence>
+  size_t read_some(implementation_type& impl,
+      const MutableBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return descriptor_service_.read_some(impl, buffers, ec);
+  }
+
+  // Start an asynchronous read. The buffer for the data being received must be
+  // valid for the lifetime of the asynchronous operation.
+  template <typename MutableBufferSequence, typename Handler>
+  void async_read_some(implementation_type& impl,
+      const MutableBufferSequence& buffers, Handler& handler)
+  {
+    descriptor_service_.async_read_some(impl, buffers, handler);
+  }
+
+private:
+  // Function pointer type for storing a serial port option.
+  typedef boost::system::error_code (*store_function_type)(
+      const void*, termios&, boost::system::error_code&);
+
+  // Helper function template to store a serial port option.
+  template <typename SettableSerialPortOption>
+  static boost::system::error_code store_option(const void* option,
+      termios& storage, boost::system::error_code& ec)
+  {
+    return static_cast<const SettableSerialPortOption*>(option)->store(
+        storage, ec);
+  }
+
+  // Helper function to set a serial port option.
+  BOOST_ASIO_DECL boost::system::error_code do_set_option(
+      implementation_type& impl, store_function_type store,
+      const void* option, boost::system::error_code& ec);
+
+  // Function pointer type for loading a serial port option.
+  typedef boost::system::error_code (*load_function_type)(
+      void*, const termios&, boost::system::error_code&);
+
+  // Helper function template to load a serial port option.
+  template <typename GettableSerialPortOption>
+  static boost::system::error_code load_option(void* option,
+      const termios& storage, boost::system::error_code& ec)
+  {
+    return static_cast<GettableSerialPortOption*>(option)->load(storage, ec);
+  }
+
+  // Helper function to get a serial port option.
+  BOOST_ASIO_DECL boost::system::error_code do_get_option(
+      const implementation_type& impl, load_function_type load,
+      void* option, boost::system::error_code& ec) const;
+
+  // The implementation used for initiating asynchronous operations.
+  reactive_descriptor_service descriptor_service_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/reactive_serial_port_service.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+#endif // defined(BOOST_ASIO_HAS_SERIAL_PORT)
+
+#endif // BOOST_ASIO_DETAIL_REACTIVE_SERIAL_PORT_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/reactive_socket_accept_op.hpp b/ext/patches/boost/asio/detail/reactive_socket_accept_op.hpp
new file mode 100644
index 0000000..71661b8
--- /dev/null
+++ b/ext/patches/boost/asio/detail/reactive_socket_accept_op.hpp
@@ -0,0 +1,138 @@
+//
+// detail/reactive_socket_accept_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_REACTIVE_SOCKET_ACCEPT_OP_HPP
+#define BOOST_ASIO_DETAIL_REACTIVE_SOCKET_ACCEPT_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/socket_holder.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Socket, typename Protocol>
+class reactive_socket_accept_op_base : public reactor_op
+{
+public:
+  reactive_socket_accept_op_base(socket_type socket,
+      socket_ops::state_type state, Socket& peer, const Protocol& protocol,
+      typename Protocol::endpoint* peer_endpoint, func_type complete_func)
+    : reactor_op(&reactive_socket_accept_op_base::do_perform, complete_func),
+      socket_(socket),
+      state_(state),
+      peer_(peer),
+      protocol_(protocol),
+      peer_endpoint_(peer_endpoint)
+  {
+  }
+
+  static bool do_perform(reactor_op* base)
+  {
+    reactive_socket_accept_op_base* o(
+        static_cast<reactive_socket_accept_op_base*>(base));
+
+    std::size_t addrlen = o->peer_endpoint_ ? o->peer_endpoint_->capacity() : 0;
+    socket_type new_socket = invalid_socket;
+    bool result = socket_ops::non_blocking_accept(o->socket_,
+          o->state_, o->peer_endpoint_ ? o->peer_endpoint_->data() : 0,
+          o->peer_endpoint_ ? &addrlen : 0, o->ec_, new_socket);
+
+    // On success, assign new connection to peer socket object.
+    if (new_socket != invalid_socket)
+    {
+      socket_holder new_socket_holder(new_socket);
+      if (o->peer_endpoint_)
+        o->peer_endpoint_->resize(addrlen);
+      if (!o->peer_.assign(o->protocol_, new_socket, o->ec_))
+        new_socket_holder.release();
+    }
+
+    return result;
+  }
+
+private:
+  socket_type socket_;
+  socket_ops::state_type state_;
+  Socket& peer_;
+  Protocol protocol_;
+  typename Protocol::endpoint* peer_endpoint_;
+};
+
+template <typename Socket, typename Protocol, typename Handler>
+class reactive_socket_accept_op :
+  public reactive_socket_accept_op_base<Socket, Protocol>
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_socket_accept_op);
+
+  reactive_socket_accept_op(socket_type socket,
+      socket_ops::state_type state, Socket& peer, const Protocol& protocol,
+      typename Protocol::endpoint* peer_endpoint, Handler& handler)
+    : reactive_socket_accept_op_base<Socket, Protocol>(socket, state, peer,
+        protocol, peer_endpoint, &reactive_socket_accept_op::do_complete),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& /*ec*/,
+      std::size_t /*bytes_transferred*/)
+  {
+    // Take ownership of the handler object.
+    reactive_socket_accept_op* o(static_cast<reactive_socket_accept_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder1<Handler, boost::system::error_code>
+      handler(o->handler_, o->ec_);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_REACTIVE_SOCKET_ACCEPT_OP_HPP
diff --git a/ext/patches/boost/asio/detail/reactive_socket_connect_op.hpp b/ext/patches/boost/asio/detail/reactive_socket_connect_op.hpp
new file mode 100644
index 0000000..b247ce4
--- /dev/null
+++ b/ext/patches/boost/asio/detail/reactive_socket_connect_op.hpp
@@ -0,0 +1,108 @@
+//
+// detail/reactive_socket_connect_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_REACTIVE_SOCKET_CONNECT_OP_HPP
+#define BOOST_ASIO_DETAIL_REACTIVE_SOCKET_CONNECT_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class reactive_socket_connect_op_base : public reactor_op
+{
+public:
+  reactive_socket_connect_op_base(socket_type socket, func_type complete_func)
+    : reactor_op(&reactive_socket_connect_op_base::do_perform, complete_func),
+      socket_(socket)
+  {
+  }
+
+  static bool do_perform(reactor_op* base)
+  {
+    reactive_socket_connect_op_base* o(
+        static_cast<reactive_socket_connect_op_base*>(base));
+
+    return socket_ops::non_blocking_connect(o->socket_, o->ec_);
+  }
+
+private:
+  socket_type socket_;
+};
+
+template <typename Handler>
+class reactive_socket_connect_op : public reactive_socket_connect_op_base
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_socket_connect_op);
+
+  reactive_socket_connect_op(socket_type socket, Handler& handler)
+    : reactive_socket_connect_op_base(socket,
+        &reactive_socket_connect_op::do_complete),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& /*ec*/,
+      std::size_t /*bytes_transferred*/)
+  {
+    // Take ownership of the handler object.
+    reactive_socket_connect_op* o
+      (static_cast<reactive_socket_connect_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder1<Handler, boost::system::error_code>
+      handler(o->handler_, o->ec_);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_REACTIVE_SOCKET_CONNECT_OP_HPP
diff --git a/ext/patches/boost/asio/detail/reactive_socket_recv_op.hpp b/ext/patches/boost/asio/detail/reactive_socket_recv_op.hpp
new file mode 100644
index 0000000..24ff66a
--- /dev/null
+++ b/ext/patches/boost/asio/detail/reactive_socket_recv_op.hpp
@@ -0,0 +1,125 @@
+//
+// detail/reactive_socket_recv_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_REACTIVE_SOCKET_RECV_OP_HPP
+#define BOOST_ASIO_DETAIL_REACTIVE_SOCKET_RECV_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename MutableBufferSequence>
+class reactive_socket_recv_op_base : public reactor_op
+{
+public:
+  reactive_socket_recv_op_base(socket_type socket,
+      socket_ops::state_type state, const MutableBufferSequence& buffers,
+      socket_base::message_flags flags, func_type complete_func)
+    : reactor_op(&reactive_socket_recv_op_base::do_perform, complete_func),
+      socket_(socket),
+      state_(state),
+      buffers_(buffers),
+      flags_(flags)
+  {
+  }
+
+  static bool do_perform(reactor_op* base)
+  {
+    reactive_socket_recv_op_base* o(
+        static_cast<reactive_socket_recv_op_base*>(base));
+
+    buffer_sequence_adapter<boost::asio::mutable_buffer,
+        MutableBufferSequence> bufs(o->buffers_);
+
+    return socket_ops::non_blocking_recv(o->socket_,
+        bufs.buffers(), bufs.count(), o->flags_,
+        (o->state_ & socket_ops::stream_oriented) != 0,
+        o->ec_, o->bytes_transferred_);
+  }
+
+private:
+  socket_type socket_;
+  socket_ops::state_type state_;
+  MutableBufferSequence buffers_;
+  socket_base::message_flags flags_;
+};
+
+template <typename MutableBufferSequence, typename Handler>
+class reactive_socket_recv_op :
+  public reactive_socket_recv_op_base<MutableBufferSequence>
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_socket_recv_op);
+
+  reactive_socket_recv_op(socket_type socket,
+      socket_ops::state_type state, const MutableBufferSequence& buffers,
+      socket_base::message_flags flags, Handler& handler)
+    : reactive_socket_recv_op_base<MutableBufferSequence>(socket, state,
+        buffers, flags, &reactive_socket_recv_op::do_complete),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& /*ec*/,
+      std::size_t /*bytes_transferred*/)
+  {
+    // Take ownership of the handler object.
+    reactive_socket_recv_op* o(static_cast<reactive_socket_recv_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, o->ec_, o->bytes_transferred_);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_REACTIVE_SOCKET_RECV_OP_HPP
diff --git a/ext/patches/boost/asio/detail/reactive_socket_recvfrom_op.hpp b/ext/patches/boost/asio/detail/reactive_socket_recvfrom_op.hpp
new file mode 100644
index 0000000..fe7253b
--- /dev/null
+++ b/ext/patches/boost/asio/detail/reactive_socket_recvfrom_op.hpp
@@ -0,0 +1,135 @@
+//
+// detail/reactive_socket_recvfrom_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_REACTIVE_SOCKET_RECVFROM_OP_HPP
+#define BOOST_ASIO_DETAIL_REACTIVE_SOCKET_RECVFROM_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename MutableBufferSequence, typename Endpoint>
+class reactive_socket_recvfrom_op_base : public reactor_op
+{
+public:
+  reactive_socket_recvfrom_op_base(socket_type socket, int protocol_type,
+      const MutableBufferSequence& buffers, Endpoint& endpoint,
+      socket_base::message_flags flags, func_type complete_func)
+    : reactor_op(&reactive_socket_recvfrom_op_base::do_perform, complete_func),
+      socket_(socket),
+      protocol_type_(protocol_type),
+      buffers_(buffers),
+      sender_endpoint_(endpoint),
+      flags_(flags)
+  {
+  }
+
+  static bool do_perform(reactor_op* base)
+  {
+    reactive_socket_recvfrom_op_base* o(
+        static_cast<reactive_socket_recvfrom_op_base*>(base));
+
+    buffer_sequence_adapter<boost::asio::mutable_buffer,
+        MutableBufferSequence> bufs(o->buffers_);
+
+    std::size_t addr_len = o->sender_endpoint_.capacity();
+    bool result = socket_ops::non_blocking_recvfrom(o->socket_,
+        bufs.buffers(), bufs.count(), o->flags_,
+        o->sender_endpoint_.data(), &addr_len,
+        o->ec_, o->bytes_transferred_);
+
+    if (result && !o->ec_)
+      o->sender_endpoint_.resize(addr_len);
+
+    return result;
+  }
+
+private:
+  socket_type socket_;
+  int protocol_type_;
+  MutableBufferSequence buffers_;
+  Endpoint& sender_endpoint_;
+  socket_base::message_flags flags_;
+};
+
+template <typename MutableBufferSequence, typename Endpoint, typename Handler>
+class reactive_socket_recvfrom_op :
+  public reactive_socket_recvfrom_op_base<MutableBufferSequence, Endpoint>
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_socket_recvfrom_op);
+
+  reactive_socket_recvfrom_op(socket_type socket, int protocol_type,
+      const MutableBufferSequence& buffers, Endpoint& endpoint,
+      socket_base::message_flags flags, Handler& handler)
+    : reactive_socket_recvfrom_op_base<MutableBufferSequence, Endpoint>(
+        socket, protocol_type, buffers, endpoint, flags,
+        &reactive_socket_recvfrom_op::do_complete),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& /*ec*/,
+      std::size_t /*bytes_transferred*/)
+  {
+    // Take ownership of the handler object.
+    reactive_socket_recvfrom_op* o(
+        static_cast<reactive_socket_recvfrom_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, o->ec_, o->bytes_transferred_);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_REACTIVE_SOCKET_RECVFROM_OP_HPP
diff --git a/ext/patches/boost/asio/detail/reactive_socket_recvmsg_op.hpp b/ext/patches/boost/asio/detail/reactive_socket_recvmsg_op.hpp
new file mode 100644
index 0000000..75ba4e3
--- /dev/null
+++ b/ext/patches/boost/asio/detail/reactive_socket_recvmsg_op.hpp
@@ -0,0 +1,127 @@
+//
+// detail/reactive_socket_recvmsg_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_REACTIVE_SOCKET_RECVMSG_OP_HPP
+#define BOOST_ASIO_DETAIL_REACTIVE_SOCKET_RECVMSG_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/socket_base.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename MutableBufferSequence>
+class reactive_socket_recvmsg_op_base : public reactor_op
+{
+public:
+  reactive_socket_recvmsg_op_base(socket_type socket,
+      const MutableBufferSequence& buffers, socket_base::message_flags in_flags,
+      socket_base::message_flags& out_flags, func_type complete_func)
+    : reactor_op(&reactive_socket_recvmsg_op_base::do_perform, complete_func),
+      socket_(socket),
+      buffers_(buffers),
+      in_flags_(in_flags),
+      out_flags_(out_flags)
+  {
+  }
+
+  static bool do_perform(reactor_op* base)
+  {
+    reactive_socket_recvmsg_op_base* o(
+        static_cast<reactive_socket_recvmsg_op_base*>(base));
+
+    buffer_sequence_adapter<boost::asio::mutable_buffer,
+        MutableBufferSequence> bufs(o->buffers_);
+
+    return socket_ops::non_blocking_recvmsg(o->socket_,
+        bufs.buffers(), bufs.count(),
+        o->in_flags_, o->out_flags_,
+        o->ec_, o->bytes_transferred_);
+  }
+
+private:
+  socket_type socket_;
+  MutableBufferSequence buffers_;
+  socket_base::message_flags in_flags_;
+  socket_base::message_flags& out_flags_;
+};
+
+template <typename MutableBufferSequence, typename Handler>
+class reactive_socket_recvmsg_op :
+  public reactive_socket_recvmsg_op_base<MutableBufferSequence>
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_socket_recvmsg_op);
+
+  reactive_socket_recvmsg_op(socket_type socket,
+      const MutableBufferSequence& buffers, socket_base::message_flags in_flags,
+      socket_base::message_flags& out_flags, Handler& handler)
+    : reactive_socket_recvmsg_op_base<MutableBufferSequence>(socket, buffers,
+        in_flags, out_flags, &reactive_socket_recvmsg_op::do_complete),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& /*ec*/,
+      std::size_t /*bytes_transferred*/)
+  {
+    // Take ownership of the handler object.
+    reactive_socket_recvmsg_op* o(
+        static_cast<reactive_socket_recvmsg_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, o->ec_, o->bytes_transferred_);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_REACTIVE_SOCKET_RECVMSG_OP_HPP
diff --git a/ext/patches/boost/asio/detail/reactive_socket_send_op.hpp b/ext/patches/boost/asio/detail/reactive_socket_send_op.hpp
new file mode 100644
index 0000000..3940cb1
--- /dev/null
+++ b/ext/patches/boost/asio/detail/reactive_socket_send_op.hpp
@@ -0,0 +1,122 @@
+//
+// detail/reactive_socket_send_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_REACTIVE_SOCKET_SEND_OP_HPP
+#define BOOST_ASIO_DETAIL_REACTIVE_SOCKET_SEND_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename ConstBufferSequence>
+class reactive_socket_send_op_base : public reactor_op
+{
+public:
+  reactive_socket_send_op_base(socket_type socket,
+      const ConstBufferSequence& buffers,
+      socket_base::message_flags flags, func_type complete_func)
+    : reactor_op(&reactive_socket_send_op_base::do_perform, complete_func),
+      socket_(socket),
+      buffers_(buffers),
+      flags_(flags)
+  {
+  }
+
+  static bool do_perform(reactor_op* base)
+  {
+    reactive_socket_send_op_base* o(
+        static_cast<reactive_socket_send_op_base*>(base));
+
+    buffer_sequence_adapter<boost::asio::const_buffer,
+        ConstBufferSequence> bufs(o->buffers_);
+
+    return socket_ops::non_blocking_send(o->socket_,
+          bufs.buffers(), bufs.count(), o->flags_,
+          o->ec_, o->bytes_transferred_);
+  }
+
+private:
+  socket_type socket_;
+  ConstBufferSequence buffers_;
+  socket_base::message_flags flags_;
+};
+
+template <typename ConstBufferSequence, typename Handler>
+class reactive_socket_send_op :
+  public reactive_socket_send_op_base<ConstBufferSequence>
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_socket_send_op);
+
+  reactive_socket_send_op(socket_type socket,
+      const ConstBufferSequence& buffers,
+      socket_base::message_flags flags, Handler& handler)
+    : reactive_socket_send_op_base<ConstBufferSequence>(socket,
+        buffers, flags, &reactive_socket_send_op::do_complete),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& /*ec*/,
+      std::size_t /*bytes_transferred*/)
+  {
+    // Take ownership of the handler object.
+    reactive_socket_send_op* o(static_cast<reactive_socket_send_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, o->ec_, o->bytes_transferred_);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_REACTIVE_SOCKET_SEND_OP_HPP
diff --git a/ext/patches/boost/asio/detail/reactive_socket_sendto_op.hpp b/ext/patches/boost/asio/detail/reactive_socket_sendto_op.hpp
new file mode 100644
index 0000000..df85def
--- /dev/null
+++ b/ext/patches/boost/asio/detail/reactive_socket_sendto_op.hpp
@@ -0,0 +1,125 @@
+//
+// detail/reactive_socket_sendto_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_REACTIVE_SOCKET_SENDTO_OP_HPP
+#define BOOST_ASIO_DETAIL_REACTIVE_SOCKET_SENDTO_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename ConstBufferSequence, typename Endpoint>
+class reactive_socket_sendto_op_base : public reactor_op
+{
+public:
+  reactive_socket_sendto_op_base(socket_type socket,
+      const ConstBufferSequence& buffers, const Endpoint& endpoint,
+      socket_base::message_flags flags, func_type complete_func)
+    : reactor_op(&reactive_socket_sendto_op_base::do_perform, complete_func),
+      socket_(socket),
+      buffers_(buffers),
+      destination_(endpoint),
+      flags_(flags)
+  {
+  }
+
+  static bool do_perform(reactor_op* base)
+  {
+    reactive_socket_sendto_op_base* o(
+        static_cast<reactive_socket_sendto_op_base*>(base));
+
+    buffer_sequence_adapter<boost::asio::const_buffer,
+        ConstBufferSequence> bufs(o->buffers_);
+
+    return socket_ops::non_blocking_sendto(o->socket_,
+          bufs.buffers(), bufs.count(), o->flags_,
+          o->destination_.data(), o->destination_.size(),
+          o->ec_, o->bytes_transferred_);
+  }
+
+private:
+  socket_type socket_;
+  ConstBufferSequence buffers_;
+  Endpoint destination_;
+  socket_base::message_flags flags_;
+};
+
+template <typename ConstBufferSequence, typename Endpoint, typename Handler>
+class reactive_socket_sendto_op :
+  public reactive_socket_sendto_op_base<ConstBufferSequence, Endpoint>
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(reactive_socket_sendto_op);
+
+  reactive_socket_sendto_op(socket_type socket,
+      const ConstBufferSequence& buffers, const Endpoint& endpoint,
+      socket_base::message_flags flags, Handler& handler)
+    : reactive_socket_sendto_op_base<ConstBufferSequence, Endpoint>(socket,
+        buffers, endpoint, flags, &reactive_socket_sendto_op::do_complete),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& /*ec*/,
+      std::size_t /*bytes_transferred*/)
+  {
+    // Take ownership of the handler object.
+    reactive_socket_sendto_op* o(static_cast<reactive_socket_sendto_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, o->ec_, o->bytes_transferred_);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_REACTIVE_SOCKET_SENDTO_OP_HPP
diff --git a/ext/patches/boost/asio/detail/reactive_socket_service.hpp b/ext/patches/boost/asio/detail/reactive_socket_service.hpp
new file mode 100644
index 0000000..68ad22a
--- /dev/null
+++ b/ext/patches/boost/asio/detail/reactive_socket_service.hpp
@@ -0,0 +1,459 @@
+//
+// detail/reactive_socket_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_REACTIVE_SOCKET_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_REACTIVE_SOCKET_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/socket_base.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/reactive_null_buffers_op.hpp>
+#include <boost/asio/detail/reactive_socket_accept_op.hpp>
+#include <boost/asio/detail/reactive_socket_connect_op.hpp>
+#include <boost/asio/detail/reactive_socket_recvfrom_op.hpp>
+#include <boost/asio/detail/reactive_socket_sendto_op.hpp>
+#include <boost/asio/detail/reactive_socket_service_base.hpp>
+#include <boost/asio/detail/reactor.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/socket_holder.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Protocol>
+class reactive_socket_service :
+  public reactive_socket_service_base
+{
+public:
+  // The protocol type.
+  typedef Protocol protocol_type;
+
+  // The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+  // The native type of a socket.
+  typedef socket_type native_handle_type;
+
+  // The implementation type of the socket.
+  struct implementation_type :
+    reactive_socket_service_base::base_implementation_type
+  {
+    // Default constructor.
+    implementation_type()
+      : protocol_(endpoint_type().protocol())
+    {
+    }
+
+    // The protocol associated with the socket.
+    protocol_type protocol_;
+  };
+
+  // Constructor.
+  reactive_socket_service(boost::asio::io_service& io_service)
+    : reactive_socket_service_base(io_service)
+  {
+  }
+
+  // Move-construct a new socket implementation.
+  void move_construct(implementation_type& impl,
+      implementation_type& other_impl)
+  {
+    this->base_move_construct(impl, other_impl);
+
+    impl.protocol_ = other_impl.protocol_;
+    other_impl.protocol_ = endpoint_type().protocol();
+  }
+
+  // Move-assign from another socket implementation.
+  void move_assign(implementation_type& impl,
+      reactive_socket_service_base& other_service,
+      implementation_type& other_impl)
+  {
+    this->base_move_assign(impl, other_service, other_impl);
+
+    impl.protocol_ = other_impl.protocol_;
+    other_impl.protocol_ = endpoint_type().protocol();
+  }
+
+  // Move-construct a new socket implementation from another protocol type.
+  template <typename Protocol1>
+  void converting_move_construct(implementation_type& impl,
+      typename reactive_socket_service<
+        Protocol1>::implementation_type& other_impl)
+  {
+    this->base_move_construct(impl, other_impl);
+
+    impl.protocol_ = protocol_type(other_impl.protocol_);
+    other_impl.protocol_ = typename Protocol1::endpoint().protocol();
+  }
+
+  // Open a new socket implementation.
+  boost::system::error_code open(implementation_type& impl,
+      const protocol_type& protocol, boost::system::error_code& ec)
+  {
+    if (!do_open(impl, protocol.family(),
+          protocol.type(), protocol.protocol(), ec))
+      impl.protocol_ = protocol;
+    return ec;
+  }
+
+  // Assign a native socket to a socket implementation.
+  boost::system::error_code assign(implementation_type& impl,
+      const protocol_type& protocol, const native_handle_type& native_socket,
+      boost::system::error_code& ec)
+  {
+    if (!do_assign(impl, protocol.type(), native_socket, ec))
+      impl.protocol_ = protocol;
+    return ec;
+  }
+
+  // Get the native socket representation.
+  native_handle_type native_handle(implementation_type& impl)
+  {
+    return impl.socket_;
+  }
+
+  // Bind the socket to the specified local endpoint.
+  boost::system::error_code bind(implementation_type& impl,
+      const endpoint_type& endpoint, boost::system::error_code& ec)
+  {
+    socket_ops::bind(impl.socket_, endpoint.data(), endpoint.size(), ec);
+    return ec;
+  }
+
+  // Set a socket option.
+  template <typename Option>
+  boost::system::error_code set_option(implementation_type& impl,
+      const Option& option, boost::system::error_code& ec)
+  {
+    socket_ops::setsockopt(impl.socket_, impl.state_,
+        option.level(impl.protocol_), option.name(impl.protocol_),
+        option.data(impl.protocol_), option.size(impl.protocol_), ec);
+    return ec;
+  }
+
+  // Set a socket option.
+  template <typename Option>
+  boost::system::error_code get_option(const implementation_type& impl,
+      Option& option, boost::system::error_code& ec) const
+  {
+    std::size_t size = option.size(impl.protocol_);
+    socket_ops::getsockopt(impl.socket_, impl.state_,
+        option.level(impl.protocol_), option.name(impl.protocol_),
+        option.data(impl.protocol_), &size, ec);
+    if (!ec)
+      option.resize(impl.protocol_, size);
+    return ec;
+  }
+
+  // Get the local endpoint.
+  endpoint_type local_endpoint(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    endpoint_type endpoint;
+    std::size_t addr_len = endpoint.capacity();
+    if (socket_ops::getsockname(impl.socket_, endpoint.data(), &addr_len, ec))
+      return endpoint_type();
+    endpoint.resize(addr_len);
+    return endpoint;
+  }
+
+  // Get the remote endpoint.
+  endpoint_type remote_endpoint(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    endpoint_type endpoint;
+    std::size_t addr_len = endpoint.capacity();
+    if (socket_ops::getpeername(impl.socket_,
+          endpoint.data(), &addr_len, false, ec))
+      return endpoint_type();
+    endpoint.resize(addr_len);
+    return endpoint;
+  }
+
+  // Send a datagram to the specified endpoint. Returns the number of bytes
+  // sent.
+  template <typename ConstBufferSequence>
+  size_t send_to(implementation_type& impl, const ConstBufferSequence& buffers,
+      const endpoint_type& destination, socket_base::message_flags flags,
+      boost::system::error_code& ec)
+  {
+    buffer_sequence_adapter<boost::asio::const_buffer,
+        ConstBufferSequence> bufs(buffers);
+
+    return socket_ops::sync_sendto(impl.socket_, impl.state_,
+        bufs.buffers(), bufs.count(), flags,
+        destination.data(), destination.size(), ec);
+  }
+
+  // Wait until data can be sent without blocking.
+  size_t send_to(implementation_type& impl, const null_buffers&,
+      const endpoint_type&, socket_base::message_flags,
+      boost::system::error_code& ec)
+  {
+    // Wait for socket to become ready.
+    socket_ops::poll_write(impl.socket_, impl.state_, ec);
+
+    return 0;
+  }
+
+  // Start an asynchronous send. The data being sent must be valid for the
+  // lifetime of the asynchronous operation.
+  template <typename ConstBufferSequence, typename Handler>
+  void async_send_to(implementation_type& impl,
+      const ConstBufferSequence& buffers,
+      const endpoint_type& destination, socket_base::message_flags flags,
+      Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef reactive_socket_sendto_op<ConstBufferSequence,
+        endpoint_type, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.socket_, buffers, destination, flags, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_send_to"));
+
+    start_op(impl, reactor::write_op, p.p, is_continuation, true, false);
+    p.v = p.p = 0;
+  }
+
+  // Start an asynchronous wait until data can be sent without blocking.
+  template <typename Handler>
+  void async_send_to(implementation_type& impl, const null_buffers&,
+      const endpoint_type&, socket_base::message_flags, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef reactive_null_buffers_op<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket",
+          &impl, "async_send_to(null_buffers)"));
+
+    start_op(impl, reactor::write_op, p.p, is_continuation, false, false);
+    p.v = p.p = 0;
+  }
+
+  // Receive a datagram with the endpoint of the sender. Returns the number of
+  // bytes received.
+  template <typename MutableBufferSequence>
+  size_t receive_from(implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      endpoint_type& sender_endpoint, socket_base::message_flags flags,
+      boost::system::error_code& ec)
+  {
+    buffer_sequence_adapter<boost::asio::mutable_buffer,
+        MutableBufferSequence> bufs(buffers);
+
+    std::size_t addr_len = sender_endpoint.capacity();
+    std::size_t bytes_recvd = socket_ops::sync_recvfrom(
+        impl.socket_, impl.state_, bufs.buffers(), bufs.count(),
+        flags, sender_endpoint.data(), &addr_len, ec);
+
+    if (!ec)
+      sender_endpoint.resize(addr_len);
+
+    return bytes_recvd;
+  }
+
+  // Wait until data can be received without blocking.
+  size_t receive_from(implementation_type& impl, const null_buffers&,
+      endpoint_type& sender_endpoint, socket_base::message_flags,
+      boost::system::error_code& ec)
+  {
+    // Wait for socket to become ready.
+    socket_ops::poll_read(impl.socket_, impl.state_, ec);
+
+    // Reset endpoint since it can be given no sensible value at this time.
+    sender_endpoint = endpoint_type();
+
+    return 0;
+  }
+
+  // Start an asynchronous receive. The buffer for the data being received and
+  // the sender_endpoint object must both be valid for the lifetime of the
+  // asynchronous operation.
+  template <typename MutableBufferSequence, typename Handler>
+  void async_receive_from(implementation_type& impl,
+      const MutableBufferSequence& buffers, endpoint_type& sender_endpoint,
+      socket_base::message_flags flags, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef reactive_socket_recvfrom_op<MutableBufferSequence,
+        endpoint_type, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    int protocol = impl.protocol_.type();
+    p.p = new (p.v) op(impl.socket_, protocol,
+        buffers, sender_endpoint, flags, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket",
+          &impl, "async_receive_from"));
+
+    start_op(impl,
+        (flags & socket_base::message_out_of_band)
+          ? reactor::except_op : reactor::read_op,
+        p.p, is_continuation, true, false);
+    p.v = p.p = 0;
+  }
+
+  // Wait until data can be received without blocking.
+  template <typename Handler>
+  void async_receive_from(implementation_type& impl,
+      const null_buffers&, endpoint_type& sender_endpoint,
+      socket_base::message_flags flags, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef reactive_null_buffers_op<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket",
+          &impl, "async_receive_from(null_buffers)"));
+
+    // Reset endpoint since it can be given no sensible value at this time.
+    sender_endpoint = endpoint_type();
+
+    start_op(impl,
+        (flags & socket_base::message_out_of_band)
+          ? reactor::except_op : reactor::read_op,
+        p.p, is_continuation, false, false);
+    p.v = p.p = 0;
+  }
+
+  // Accept a new connection.
+  template <typename Socket>
+  boost::system::error_code accept(implementation_type& impl,
+      Socket& peer, endpoint_type* peer_endpoint, boost::system::error_code& ec)
+  {
+    // We cannot accept a socket that is already open.
+    if (peer.is_open())
+    {
+      ec = boost::asio::error::already_open;
+      return ec;
+    }
+
+    std::size_t addr_len = peer_endpoint ? peer_endpoint->capacity() : 0;
+    socket_holder new_socket(socket_ops::sync_accept(impl.socket_,
+          impl.state_, peer_endpoint ? peer_endpoint->data() : 0,
+          peer_endpoint ? &addr_len : 0, ec));
+
+    // On success, assign new connection to peer socket object.
+    if (new_socket.get() != invalid_socket)
+    {
+      if (peer_endpoint)
+        peer_endpoint->resize(addr_len);
+      if (!peer.assign(impl.protocol_, new_socket.get(), ec))
+        new_socket.release();
+    }
+
+    return ec;
+  }
+
+  // Start an asynchronous accept. The peer and peer_endpoint objects
+  // must be valid until the accept's handler is invoked.
+  template <typename Socket, typename Handler>
+  void async_accept(implementation_type& impl, Socket& peer,
+      endpoint_type* peer_endpoint, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef reactive_socket_accept_op<Socket, Protocol, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.socket_, impl.state_, peer,
+        impl.protocol_, peer_endpoint, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_accept"));
+
+    start_accept_op(impl, p.p, is_continuation, peer.is_open());
+    p.v = p.p = 0;
+  }
+
+  // Connect the socket to the specified endpoint.
+  boost::system::error_code connect(implementation_type& impl,
+      const endpoint_type& peer_endpoint, boost::system::error_code& ec)
+  {
+    socket_ops::sync_connect(impl.socket_,
+        peer_endpoint.data(), peer_endpoint.size(), ec);
+    return ec;
+  }
+
+  // Start an asynchronous connect.
+  template <typename Handler>
+  void async_connect(implementation_type& impl,
+      const endpoint_type& peer_endpoint, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef reactive_socket_connect_op<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.socket_, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_connect"));
+
+    start_connect_op(impl, p.p, is_continuation,
+        peer_endpoint.data(), peer_endpoint.size());
+    p.v = p.p = 0;
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_REACTIVE_SOCKET_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/reactive_socket_service_base.hpp b/ext/patches/boost/asio/detail/reactive_socket_service_base.hpp
new file mode 100644
index 0000000..9e880ac
--- /dev/null
+++ b/ext/patches/boost/asio/detail/reactive_socket_service_base.hpp
@@ -0,0 +1,452 @@
+//
+// detail/reactive_socket_service_base.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_REACTIVE_SOCKET_SERVICE_BASE_HPP
+#define BOOST_ASIO_DETAIL_REACTIVE_SOCKET_SERVICE_BASE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_IOCP) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/socket_base.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/reactive_null_buffers_op.hpp>
+#include <boost/asio/detail/reactive_socket_recv_op.hpp>
+#include <boost/asio/detail/reactive_socket_recvmsg_op.hpp>
+#include <boost/asio/detail/reactive_socket_send_op.hpp>
+#include <boost/asio/detail/reactor.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/socket_holder.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class reactive_socket_service_base
+{
+public:
+  // The native type of a socket.
+  typedef socket_type native_handle_type;
+
+  // The implementation type of the socket.
+  struct base_implementation_type
+  {
+    // The native socket representation.
+    socket_type socket_;
+
+    // The current state of the socket.
+    socket_ops::state_type state_;
+
+    // Per-descriptor data used by the reactor.
+    reactor::per_descriptor_data reactor_data_;
+  };
+
+  // Constructor.
+  BOOST_ASIO_DECL reactive_socket_service_base(
+      boost::asio::io_service& io_service);
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Construct a new socket implementation.
+  BOOST_ASIO_DECL void construct(base_implementation_type& impl);
+
+  // Move-construct a new socket implementation.
+  BOOST_ASIO_DECL void base_move_construct(base_implementation_type& impl,
+      base_implementation_type& other_impl);
+
+  // Move-assign from another socket implementation.
+  BOOST_ASIO_DECL void base_move_assign(base_implementation_type& impl,
+      reactive_socket_service_base& other_service,
+      base_implementation_type& other_impl);
+
+  // Destroy a socket implementation.
+  BOOST_ASIO_DECL void destroy(base_implementation_type& impl);
+
+  // Determine whether the socket is open.
+  bool is_open(const base_implementation_type& impl) const
+  {
+    return impl.socket_ != invalid_socket;
+  }
+
+  // Destroy a socket implementation.
+  BOOST_ASIO_DECL boost::system::error_code close(
+      base_implementation_type& impl, boost::system::error_code& ec);
+
+  // Get the native socket representation.
+  native_handle_type native_handle(base_implementation_type& impl)
+  {
+    return impl.socket_;
+  }
+
+  // Cancel all operations associated with the socket.
+  BOOST_ASIO_DECL boost::system::error_code cancel(
+      base_implementation_type& impl, boost::system::error_code& ec);
+
+  // Determine whether the socket is at the out-of-band data mark.
+  bool at_mark(const base_implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return socket_ops::sockatmark(impl.socket_, ec);
+  }
+
+  // Determine the number of bytes available for reading.
+  std::size_t available(const base_implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return socket_ops::available(impl.socket_, ec);
+  }
+
+  // Place the socket into the state where it will listen for new connections.
+  boost::system::error_code listen(base_implementation_type& impl,
+      int backlog, boost::system::error_code& ec)
+  {
+    socket_ops::listen(impl.socket_, backlog, ec);
+    return ec;
+  }
+
+  // Perform an IO control command on the socket.
+  template <typename IO_Control_Command>
+  boost::system::error_code io_control(base_implementation_type& impl,
+      IO_Control_Command& command, boost::system::error_code& ec)
+  {
+    socket_ops::ioctl(impl.socket_, impl.state_, command.name(),
+        static_cast<ioctl_arg_type*>(command.data()), ec);
+    return ec;
+  }
+
+  // Gets the non-blocking mode of the socket.
+  bool non_blocking(const base_implementation_type& impl) const
+  {
+    return (impl.state_ & socket_ops::user_set_non_blocking) != 0;
+  }
+
+  // Sets the non-blocking mode of the socket.
+  boost::system::error_code non_blocking(base_implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    socket_ops::set_user_non_blocking(impl.socket_, impl.state_, mode, ec);
+    return ec;
+  }
+
+  // Gets the non-blocking mode of the native socket implementation.
+  bool native_non_blocking(const base_implementation_type& impl) const
+  {
+    return (impl.state_ & socket_ops::internal_non_blocking) != 0;
+  }
+
+  // Sets the non-blocking mode of the native socket implementation.
+  boost::system::error_code native_non_blocking(base_implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    socket_ops::set_internal_non_blocking(impl.socket_, impl.state_, mode, ec);
+    return ec;
+  }
+
+  // Disable sends or receives on the socket.
+  boost::system::error_code shutdown(base_implementation_type& impl,
+      socket_base::shutdown_type what, boost::system::error_code& ec)
+  {
+    socket_ops::shutdown(impl.socket_, what, ec);
+    return ec;
+  }
+
+  // Send the given data to the peer.
+  template <typename ConstBufferSequence>
+  size_t send(base_implementation_type& impl,
+      const ConstBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    buffer_sequence_adapter<boost::asio::const_buffer,
+        ConstBufferSequence> bufs(buffers);
+
+    return socket_ops::sync_send(impl.socket_, impl.state_,
+        bufs.buffers(), bufs.count(), flags, bufs.all_empty(), ec);
+  }
+
+  // Wait until data can be sent without blocking.
+  size_t send(base_implementation_type& impl, const null_buffers&,
+      socket_base::message_flags, boost::system::error_code& ec)
+  {
+    // Wait for socket to become ready.
+    socket_ops::poll_write(impl.socket_, impl.state_, ec);
+
+    return 0;
+  }
+
+  // Start an asynchronous send. The data being sent must be valid for the
+  // lifetime of the asynchronous operation.
+  template <typename ConstBufferSequence, typename Handler>
+  void async_send(base_implementation_type& impl,
+      const ConstBufferSequence& buffers,
+      socket_base::message_flags flags, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef reactive_socket_send_op<ConstBufferSequence, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.socket_, buffers, flags, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_send"));
+
+    start_op(impl, reactor::write_op, p.p, is_continuation, true,
+        ((impl.state_ & socket_ops::stream_oriented)
+          && buffer_sequence_adapter<boost::asio::const_buffer,
+            ConstBufferSequence>::all_empty(buffers)));
+    p.v = p.p = 0;
+  }
+
+  // Start an asynchronous wait until data can be sent without blocking.
+  template <typename Handler>
+  void async_send(base_implementation_type& impl, const null_buffers&,
+      socket_base::message_flags, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef reactive_null_buffers_op<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket",
+          &impl, "async_send(null_buffers)"));
+
+    start_op(impl, reactor::write_op, p.p, is_continuation, false, false);
+    p.v = p.p = 0;
+  }
+
+  // Receive some data from the peer. Returns the number of bytes received.
+  template <typename MutableBufferSequence>
+  size_t receive(base_implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    buffer_sequence_adapter<boost::asio::mutable_buffer,
+        MutableBufferSequence> bufs(buffers);
+
+    return socket_ops::sync_recv(impl.socket_, impl.state_,
+        bufs.buffers(), bufs.count(), flags, bufs.all_empty(), ec);
+  }
+
+  // Wait until data can be received without blocking.
+  size_t receive(base_implementation_type& impl, const null_buffers&,
+      socket_base::message_flags, boost::system::error_code& ec)
+  {
+    // Wait for socket to become ready.
+    socket_ops::poll_read(impl.socket_, impl.state_, ec);
+
+    return 0;
+  }
+
+  // Start an asynchronous receive. The buffer for the data being received
+  // must be valid for the lifetime of the asynchronous operation.
+  template <typename MutableBufferSequence, typename Handler>
+  void async_receive(base_implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      socket_base::message_flags flags, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef reactive_socket_recv_op<MutableBufferSequence, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.socket_, impl.state_, buffers, flags, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_receive"));
+
+    start_op(impl,
+        (flags & socket_base::message_out_of_band)
+          ? reactor::except_op : reactor::read_op,
+        p.p, is_continuation,
+        (flags & socket_base::message_out_of_band) == 0,
+        ((impl.state_ & socket_ops::stream_oriented)
+          && buffer_sequence_adapter<boost::asio::mutable_buffer,
+            MutableBufferSequence>::all_empty(buffers)));
+    p.v = p.p = 0;
+  }
+
+  // Wait until data can be received without blocking.
+  template <typename Handler>
+  void async_receive(base_implementation_type& impl, const null_buffers&,
+      socket_base::message_flags flags, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef reactive_null_buffers_op<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket",
+          &impl, "async_receive(null_buffers)"));
+
+    start_op(impl,
+        (flags & socket_base::message_out_of_band)
+          ? reactor::except_op : reactor::read_op,
+        p.p, is_continuation, false, false);
+    p.v = p.p = 0;
+  }
+
+  // Receive some data with associated flags. Returns the number of bytes
+  // received.
+  template <typename MutableBufferSequence>
+  size_t receive_with_flags(base_implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      socket_base::message_flags in_flags,
+      socket_base::message_flags& out_flags, boost::system::error_code& ec)
+  {
+    buffer_sequence_adapter<boost::asio::mutable_buffer,
+        MutableBufferSequence> bufs(buffers);
+
+    return socket_ops::sync_recvmsg(impl.socket_, impl.state_,
+        bufs.buffers(), bufs.count(), in_flags, out_flags, ec);
+  }
+
+  // Wait until data can be received without blocking.
+  size_t receive_with_flags(base_implementation_type& impl,
+      const null_buffers&, socket_base::message_flags,
+      socket_base::message_flags& out_flags, boost::system::error_code& ec)
+  {
+    // Wait for socket to become ready.
+    socket_ops::poll_read(impl.socket_, impl.state_, ec);
+
+    // Clear out_flags, since we cannot give it any other sensible value when
+    // performing a null_buffers operation.
+    out_flags = 0;
+
+    return 0;
+  }
+
+  // Start an asynchronous receive. The buffer for the data being received
+  // must be valid for the lifetime of the asynchronous operation.
+  template <typename MutableBufferSequence, typename Handler>
+  void async_receive_with_flags(base_implementation_type& impl,
+      const MutableBufferSequence& buffers, socket_base::message_flags in_flags,
+      socket_base::message_flags& out_flags, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef reactive_socket_recvmsg_op<MutableBufferSequence, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.socket_, buffers, in_flags, out_flags, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket",
+          &impl, "async_receive_with_flags"));
+
+    start_op(impl,
+        (in_flags & socket_base::message_out_of_band)
+          ? reactor::except_op : reactor::read_op,
+        p.p, is_continuation,
+        (in_flags & socket_base::message_out_of_band) == 0, false);
+    p.v = p.p = 0;
+  }
+
+  // Wait until data can be received without blocking.
+  template <typename Handler>
+  void async_receive_with_flags(base_implementation_type& impl,
+      const null_buffers&, socket_base::message_flags in_flags,
+      socket_base::message_flags& out_flags, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef reactive_null_buffers_op<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl,
+          "async_receive_with_flags(null_buffers)"));
+
+    // Clear out_flags, since we cannot give it any other sensible value when
+    // performing a null_buffers operation.
+    out_flags = 0;
+
+    start_op(impl,
+        (in_flags & socket_base::message_out_of_band)
+          ? reactor::except_op : reactor::read_op,
+        p.p, is_continuation, false, false);
+    p.v = p.p = 0;
+  }
+
+protected:
+  // Open a new socket implementation.
+  BOOST_ASIO_DECL boost::system::error_code do_open(
+      base_implementation_type& impl, int af,
+      int type, int protocol, boost::system::error_code& ec);
+
+  // Assign a native socket to a socket implementation.
+  BOOST_ASIO_DECL boost::system::error_code do_assign(
+      base_implementation_type& impl, int type,
+      const native_handle_type& native_socket, boost::system::error_code& ec);
+
+  // Start the asynchronous read or write operation.
+  BOOST_ASIO_DECL void start_op(base_implementation_type& impl, int op_type,
+      reactor_op* op, bool is_continuation, bool is_non_blocking, bool noop);
+
+  // Start the asynchronous accept operation.
+  BOOST_ASIO_DECL void start_accept_op(base_implementation_type& impl,
+      reactor_op* op, bool is_continuation, bool peer_is_open);
+
+  // Start the asynchronous connect operation.
+  BOOST_ASIO_DECL void start_connect_op(base_implementation_type& impl,
+      reactor_op* op, bool is_continuation,
+      const socket_addr_type* addr, size_t addrlen);
+
+  // The selector that performs event demultiplexing for the service.
+  reactor& reactor_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/reactive_socket_service_base.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // !defined(BOOST_ASIO_HAS_IOCP)
+       //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_REACTIVE_SOCKET_SERVICE_BASE_HPP
diff --git a/ext/patches/boost/asio/detail/reactor.hpp b/ext/patches/boost/asio/detail/reactor.hpp
new file mode 100644
index 0000000..f5918e3
--- /dev/null
+++ b/ext/patches/boost/asio/detail/reactor.hpp
@@ -0,0 +1,32 @@
+//
+// detail/reactor.hpp
+// ~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_REACTOR_HPP
+#define BOOST_ASIO_DETAIL_REACTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/reactor_fwd.hpp>
+
+#if defined(BOOST_ASIO_HAS_EPOLL)
+# include <boost/asio/detail/epoll_reactor.hpp>
+#elif defined(BOOST_ASIO_HAS_KQUEUE)
+# include <boost/asio/detail/kqueue_reactor.hpp>
+#elif defined(BOOST_ASIO_HAS_DEV_POLL)
+# include <boost/asio/detail/dev_poll_reactor.hpp>
+#elif defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/null_reactor.hpp>
+#else
+# include <boost/asio/detail/select_reactor.hpp>
+#endif
+
+#endif // BOOST_ASIO_DETAIL_REACTOR_HPP
diff --git a/ext/patches/boost/asio/detail/reactor_fwd.hpp b/ext/patches/boost/asio/detail/reactor_fwd.hpp
new file mode 100644
index 0000000..75f2911
--- /dev/null
+++ b/ext/patches/boost/asio/detail/reactor_fwd.hpp
@@ -0,0 +1,42 @@
+//
+// detail/reactor_fwd.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_REACTOR_FWD_HPP
+#define BOOST_ASIO_DETAIL_REACTOR_FWD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+typedef class null_reactor reactor;
+#elif defined(BOOST_ASIO_HAS_IOCP)
+typedef class select_reactor reactor;
+#elif defined(BOOST_ASIO_HAS_EPOLL)
+typedef class epoll_reactor reactor;
+#elif defined(BOOST_ASIO_HAS_KQUEUE)
+typedef class kqueue_reactor reactor;
+#elif defined(BOOST_ASIO_HAS_DEV_POLL)
+typedef class dev_poll_reactor reactor;
+#else
+typedef class select_reactor reactor;
+#endif
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_REACTOR_FWD_HPP
diff --git a/ext/patches/boost/asio/detail/reactor_op.hpp b/ext/patches/boost/asio/detail/reactor_op.hpp
new file mode 100644
index 0000000..fab7143
--- /dev/null
+++ b/ext/patches/boost/asio/detail/reactor_op.hpp
@@ -0,0 +1,63 @@
+//
+// detail/reactor_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_REACTOR_OP_HPP
+#define BOOST_ASIO_DETAIL_REACTOR_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/operation.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class reactor_op
+  : public operation
+{
+public:
+  // The error code to be passed to the completion handler.
+  boost::system::error_code ec_;
+
+  // The number of bytes transferred, to be passed to the completion handler.
+  std::size_t bytes_transferred_;
+
+  // Perform the operation. Returns true if it is finished.
+  bool perform()
+  {
+    return perform_func_(this);
+  }
+
+protected:
+  typedef bool (*perform_func_type)(reactor_op*);
+
+  reactor_op(perform_func_type perform_func, func_type complete_func)
+    : operation(complete_func),
+      bytes_transferred_(0),
+      perform_func_(perform_func)
+  {
+  }
+
+private:
+  perform_func_type perform_func_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_REACTOR_OP_HPP
diff --git a/ext/patches/boost/asio/detail/reactor_op_queue.hpp b/ext/patches/boost/asio/detail/reactor_op_queue.hpp
new file mode 100644
index 0000000..f13365b
--- /dev/null
+++ b/ext/patches/boost/asio/detail/reactor_op_queue.hpp
@@ -0,0 +1,170 @@
+//
+// detail/reactor_op_queue.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_REACTOR_OP_QUEUE_HPP
+#define BOOST_ASIO_DETAIL_REACTOR_OP_QUEUE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/hash_map.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/op_queue.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Descriptor>
+class reactor_op_queue
+  : private noncopyable
+{
+public:
+  typedef Descriptor key_type;
+
+  struct mapped_type : op_queue<reactor_op>
+  {
+    mapped_type() {}
+    mapped_type(const mapped_type&) {}
+    void operator=(const mapped_type&) {}
+  };
+
+  typedef typename hash_map<key_type, mapped_type>::value_type value_type;
+  typedef typename hash_map<key_type, mapped_type>::iterator iterator;
+
+  // Constructor.
+  reactor_op_queue()
+    : operations_()
+  {
+  }
+
+  // Obtain iterators to all registered descriptors.
+  iterator begin() { return operations_.begin(); }
+  iterator end() { return operations_.end(); }
+
+  // Add a new operation to the queue. Returns true if this is the only
+  // operation for the given descriptor, in which case the reactor's event
+  // demultiplexing function call may need to be interrupted and restarted.
+  bool enqueue_operation(Descriptor descriptor, reactor_op* op)
+  {
+    std::pair<iterator, bool> entry =
+      operations_.insert(value_type(descriptor, mapped_type()));
+    entry.first->second.push(op);
+    return entry.second;
+  }
+
+  // Cancel all operations associated with the descriptor identified by the
+  // supplied iterator. Any operations pending for the descriptor will be
+  // cancelled. Returns true if any operations were cancelled, in which case
+  // the reactor's event demultiplexing function may need to be interrupted and
+  // restarted.
+  bool cancel_operations(iterator i, op_queue<operation>& ops,
+      const boost::system::error_code& ec =
+        boost::asio::error::operation_aborted)
+  {
+    if (i != operations_.end())
+    {
+      while (reactor_op* op = i->second.front())
+      {
+        op->ec_ = ec;
+        i->second.pop();
+        ops.push(op);
+      }
+      operations_.erase(i);
+      return true;
+    }
+
+    return false;
+  }
+
+  // Cancel all operations associated with the descriptor. Any operations
+  // pending for the descriptor will be cancelled. Returns true if any
+  // operations were cancelled, in which case the reactor's event
+  // demultiplexing function may need to be interrupted and restarted.
+  bool cancel_operations(Descriptor descriptor, op_queue<operation>& ops,
+      const boost::system::error_code& ec =
+        boost::asio::error::operation_aborted)
+  {
+    return this->cancel_operations(operations_.find(descriptor), ops, ec);
+  }
+
+  // Whether there are no operations in the queue.
+  bool empty() const
+  {
+    return operations_.empty();
+  }
+
+  // Determine whether there are any operations associated with the descriptor.
+  bool has_operation(Descriptor descriptor) const
+  {
+    return operations_.find(descriptor) != operations_.end();
+  }
+
+  // Perform the operations corresponding to the descriptor identified by the
+  // supplied iterator. Returns true if there are still unfinished operations
+  // queued for the descriptor.
+  bool perform_operations(iterator i, op_queue<operation>& ops)
+  {
+    if (i != operations_.end())
+    {
+      while (reactor_op* op = i->second.front())
+      {
+        if (op->perform())
+        {
+          i->second.pop();
+          ops.push(op);
+        }
+        else
+        {
+          return true;
+        }
+      }
+      operations_.erase(i);
+    }
+    return false;
+  }
+
+  // Perform the operations corresponding to the descriptor. Returns true if
+  // there are still unfinished operations queued for the descriptor.
+  bool perform_operations(Descriptor descriptor, op_queue<operation>& ops)
+  {
+    return this->perform_operations(operations_.find(descriptor), ops);
+  }
+
+  // Get all operations owned by the queue.
+  void get_all_operations(op_queue<operation>& ops)
+  {
+    iterator i = operations_.begin();
+    while (i != operations_.end())
+    {
+      iterator op_iter = i++;
+      ops.push(op_iter->second);
+      operations_.erase(op_iter);
+    }
+  }
+
+private:
+  // The operations that are currently executing asynchronously.
+  hash_map<key_type, mapped_type> operations_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_REACTOR_OP_QUEUE_HPP
diff --git a/ext/patches/boost/asio/detail/regex_fwd.hpp b/ext/patches/boost/asio/detail/regex_fwd.hpp
new file mode 100644
index 0000000..a36c727
--- /dev/null
+++ b/ext/patches/boost/asio/detail/regex_fwd.hpp
@@ -0,0 +1,35 @@
+//
+// detail/regex_fwd.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_REGEX_FWD_HPP
+#define BOOST_ASIO_DETAIL_REGEX_FWD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#if defined(BOOST_ASIO_HAS_BOOST_REGEX)
+
+#include <boost/regex_fwd.hpp>
+#include <boost/regex/v4/match_flags.hpp>
+
+namespace boost {
+
+template <class BidiIterator>
+struct sub_match;
+
+template <class BidiIterator, class Allocator>
+class match_results;
+
+} // namespace boost
+
+#endif // defined(BOOST_ASIO_HAS_BOOST_REGEX)
+
+#endif // BOOST_ASIO_DETAIL_REGEX_FWD_HPP
diff --git a/ext/patches/boost/asio/detail/resolve_endpoint_op.hpp b/ext/patches/boost/asio/detail/resolve_endpoint_op.hpp
new file mode 100644
index 0000000..f167696
--- /dev/null
+++ b/ext/patches/boost/asio/detail/resolve_endpoint_op.hpp
@@ -0,0 +1,123 @@
+//
+// detail/resolve_endpoint_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_RESOLVER_ENDPOINT_OP_HPP
+#define BOOST_ASIO_DETAIL_RESOLVER_ENDPOINT_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ip/basic_resolver_iterator.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/operation.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Protocol, typename Handler>
+class resolve_endpoint_op : public operation
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(resolve_endpoint_op);
+
+  typedef typename Protocol::endpoint endpoint_type;
+  typedef boost::asio::ip::basic_resolver_iterator<Protocol> iterator_type;
+
+  resolve_endpoint_op(socket_ops::weak_cancel_token_type cancel_token,
+      const endpoint_type& endpoint, io_service_impl& ios, Handler& handler)
+    : operation(&resolve_endpoint_op::do_complete),
+      cancel_token_(cancel_token),
+      endpoint_(endpoint),
+      io_service_impl_(ios),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& /*ec*/,
+      std::size_t /*bytes_transferred*/)
+  {
+    // Take ownership of the operation object.
+    resolve_endpoint_op* o(static_cast<resolve_endpoint_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    if (owner && owner != &o->io_service_impl_)
+    {
+      // The operation is being run on the worker io_service. Time to perform
+      // the resolver operation.
+    
+      // Perform the blocking endpoint resolution operation.
+      char host_name[NI_MAXHOST];
+      char service_name[NI_MAXSERV];
+      socket_ops::background_getnameinfo(o->cancel_token_, o->endpoint_.data(),
+          o->endpoint_.size(), host_name, NI_MAXHOST, service_name, NI_MAXSERV,
+          o->endpoint_.protocol().type(), o->ec_);
+      o->iter_ = iterator_type::create(o->endpoint_, host_name, service_name);
+
+      // Pass operation back to main io_service for completion.
+      o->io_service_impl_.post_deferred_completion(o);
+      p.v = p.p = 0;
+    }
+    else
+    {
+      // The operation has been returned to the main io_service. The completion
+      // handler is ready to be delivered.
+
+      BOOST_ASIO_HANDLER_COMPLETION((o));
+
+      // Make a copy of the handler so that the memory can be deallocated
+      // before the upcall is made. Even if we're not about to make an upcall,
+      // a sub-object of the handler may be the true owner of the memory
+      // associated with the handler. Consequently, a local copy of the handler
+      // is required to ensure that any owning sub-object remains valid until
+      // after we have deallocated the memory here.
+      detail::binder2<Handler, boost::system::error_code, iterator_type>
+        handler(o->handler_, o->ec_, o->iter_);
+      p.h = boost::asio::detail::addressof(handler.handler_);
+      p.reset();
+
+      if (owner)
+      {
+        fenced_block b(fenced_block::half);
+        BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, "..."));
+        boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+        BOOST_ASIO_HANDLER_INVOCATION_END;
+      }
+    }
+  }
+
+private:
+  socket_ops::weak_cancel_token_type cancel_token_;
+  endpoint_type endpoint_;
+  io_service_impl& io_service_impl_;
+  Handler handler_;
+  boost::system::error_code ec_;
+  iterator_type iter_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_RESOLVER_ENDPOINT_OP_HPP
diff --git a/ext/patches/boost/asio/detail/resolve_op.hpp b/ext/patches/boost/asio/detail/resolve_op.hpp
new file mode 100644
index 0000000..33a897e
--- /dev/null
+++ b/ext/patches/boost/asio/detail/resolve_op.hpp
@@ -0,0 +1,133 @@
+//
+// detail/resolve_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_RESOLVE_OP_HPP
+#define BOOST_ASIO_DETAIL_RESOLVE_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ip/basic_resolver_iterator.hpp>
+#include <boost/asio/ip/basic_resolver_query.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/operation.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Protocol, typename Handler>
+class resolve_op : public operation
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(resolve_op);
+
+  typedef boost::asio::ip::basic_resolver_query<Protocol> query_type;
+  typedef boost::asio::ip::basic_resolver_iterator<Protocol> iterator_type;
+
+  resolve_op(socket_ops::weak_cancel_token_type cancel_token,
+      const query_type& query, io_service_impl& ios, Handler& handler)
+    : operation(&resolve_op::do_complete),
+      cancel_token_(cancel_token),
+      query_(query),
+      io_service_impl_(ios),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
+      addrinfo_(0)
+  {
+  }
+
+  ~resolve_op()
+  {
+    if (addrinfo_)
+      socket_ops::freeaddrinfo(addrinfo_);
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& /*ec*/,
+      std::size_t /*bytes_transferred*/)
+  {
+    // Take ownership of the operation object.
+    resolve_op* o(static_cast<resolve_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    if (owner && owner != &o->io_service_impl_)
+    {
+      // The operation is being run on the worker io_service. Time to perform
+      // the resolver operation.
+    
+      // Perform the blocking host resolution operation.
+      socket_ops::background_getaddrinfo(o->cancel_token_,
+          o->query_.host_name().c_str(), o->query_.service_name().c_str(),
+          o->query_.hints(), &o->addrinfo_, o->ec_);
+
+      // Pass operation back to main io_service for completion.
+      o->io_service_impl_.post_deferred_completion(o);
+      p.v = p.p = 0;
+    }
+    else
+    {
+      // The operation has been returned to the main io_service. The completion
+      // handler is ready to be delivered.
+
+      BOOST_ASIO_HANDLER_COMPLETION((o));
+
+      // Make a copy of the handler so that the memory can be deallocated
+      // before the upcall is made. Even if we're not about to make an upcall,
+      // a sub-object of the handler may be the true owner of the memory
+      // associated with the handler. Consequently, a local copy of the handler
+      // is required to ensure that any owning sub-object remains valid until
+      // after we have deallocated the memory here.
+      detail::binder2<Handler, boost::system::error_code, iterator_type>
+        handler(o->handler_, o->ec_, iterator_type());
+      p.h = boost::asio::detail::addressof(handler.handler_);
+      if (o->addrinfo_)
+      {
+        handler.arg2_ = iterator_type::create(o->addrinfo_,
+            o->query_.host_name(), o->query_.service_name());
+      }
+      p.reset();
+
+      if (owner)
+      {
+        fenced_block b(fenced_block::half);
+        BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, "..."));
+        boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+        BOOST_ASIO_HANDLER_INVOCATION_END;
+      }
+    }
+  }
+
+private:
+  socket_ops::weak_cancel_token_type cancel_token_;
+  query_type query_;
+  io_service_impl& io_service_impl_;
+  Handler handler_;
+  boost::system::error_code ec_;
+  boost::asio::detail::addrinfo_type* addrinfo_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_RESOLVE_OP_HPP
diff --git a/ext/patches/boost/asio/detail/resolver_service.hpp b/ext/patches/boost/asio/detail/resolver_service.hpp
new file mode 100644
index 0000000..8e33d31
--- /dev/null
+++ b/ext/patches/boost/asio/detail/resolver_service.hpp
@@ -0,0 +1,131 @@
+//
+// detail/resolver_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_RESOLVER_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_RESOLVER_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/ip/basic_resolver_iterator.hpp>
+#include <boost/asio/ip/basic_resolver_query.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/resolve_endpoint_op.hpp>
+#include <boost/asio/detail/resolve_op.hpp>
+#include <boost/asio/detail/resolver_service_base.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Protocol>
+class resolver_service : public resolver_service_base
+{
+public:
+  // The implementation type of the resolver. A cancellation token is used to
+  // indicate to the background thread that the operation has been cancelled.
+  typedef socket_ops::shared_cancel_token_type implementation_type;
+
+  // The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+  // The query type.
+  typedef boost::asio::ip::basic_resolver_query<Protocol> query_type;
+
+  // The iterator type.
+  typedef boost::asio::ip::basic_resolver_iterator<Protocol> iterator_type;
+
+  // Constructor.
+  resolver_service(boost::asio::io_service& io_service)
+    : resolver_service_base(io_service)
+  {
+  }
+
+  // Resolve a query to a list of entries.
+  iterator_type resolve(implementation_type&, const query_type& query,
+      boost::system::error_code& ec)
+  {
+    boost::asio::detail::addrinfo_type* address_info = 0;
+
+    socket_ops::getaddrinfo(query.host_name().c_str(),
+        query.service_name().c_str(), query.hints(), &address_info, ec);
+    auto_addrinfo auto_address_info(address_info);
+
+    return ec ? iterator_type() : iterator_type::create(
+        address_info, query.host_name(), query.service_name());
+  }
+
+  // Asynchronously resolve a query to a list of entries.
+  template <typename Handler>
+  void async_resolve(implementation_type& impl,
+      const query_type& query, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef resolve_op<Protocol, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl, query, io_service_impl_, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "resolver", &impl, "async_resolve"));
+
+    start_resolve_op(p.p);
+    p.v = p.p = 0;
+  }
+
+  // Resolve an endpoint to a list of entries.
+  iterator_type resolve(implementation_type&,
+      const endpoint_type& endpoint, boost::system::error_code& ec)
+  {
+    char host_name[NI_MAXHOST];
+    char service_name[NI_MAXSERV];
+    socket_ops::sync_getnameinfo(endpoint.data(), endpoint.size(),
+        host_name, NI_MAXHOST, service_name, NI_MAXSERV,
+        endpoint.protocol().type(), ec);
+
+    return ec ? iterator_type() : iterator_type::create(
+        endpoint, host_name, service_name);
+  }
+
+  // Asynchronously resolve an endpoint to a list of entries.
+  template <typename Handler>
+  void async_resolve(implementation_type& impl,
+      const endpoint_type& endpoint, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef resolve_endpoint_op<Protocol, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl, endpoint, io_service_impl_, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "resolver", &impl, "async_resolve"));
+
+    start_resolve_op(p.p);
+    p.v = p.p = 0;
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_RESOLVER_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/resolver_service_base.hpp b/ext/patches/boost/asio/detail/resolver_service_base.hpp
new file mode 100644
index 0000000..9e4d458
--- /dev/null
+++ b/ext/patches/boost/asio/detail/resolver_service_base.hpp
@@ -0,0 +1,131 @@
+//
+// detail/resolver_service_base.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_RESOLVER_SERVICE_BASE_HPP
+#define BOOST_ASIO_DETAIL_RESOLVER_SERVICE_BASE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/detail/mutex.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/operation.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/scoped_ptr.hpp>
+#include <boost/asio/detail/thread.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class resolver_service_base
+{
+public:
+  // The implementation type of the resolver. A cancellation token is used to
+  // indicate to the background thread that the operation has been cancelled.
+  typedef socket_ops::shared_cancel_token_type implementation_type;
+
+  // Constructor.
+  BOOST_ASIO_DECL resolver_service_base(boost::asio::io_service& io_service);
+
+  // Destructor.
+  BOOST_ASIO_DECL ~resolver_service_base();
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Perform any fork-related housekeeping.
+  BOOST_ASIO_DECL void fork_service(
+      boost::asio::io_service::fork_event fork_ev);
+
+  // Construct a new resolver implementation.
+  BOOST_ASIO_DECL void construct(implementation_type& impl);
+
+  // Destroy a resolver implementation.
+  BOOST_ASIO_DECL void destroy(implementation_type&);
+
+  // Cancel pending asynchronous operations.
+  BOOST_ASIO_DECL void cancel(implementation_type& impl);
+
+protected:
+  // Helper function to start an asynchronous resolve operation.
+  BOOST_ASIO_DECL void start_resolve_op(operation* op);
+
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  // Helper class to perform exception-safe cleanup of addrinfo objects.
+  class auto_addrinfo
+    : private boost::asio::detail::noncopyable
+  {
+  public:
+    explicit auto_addrinfo(boost::asio::detail::addrinfo_type* ai)
+      : ai_(ai)
+    {
+    }
+
+    ~auto_addrinfo()
+    {
+      if (ai_)
+        socket_ops::freeaddrinfo(ai_);
+    }
+
+    operator boost::asio::detail::addrinfo_type*()
+    {
+      return ai_;
+    }
+
+  private:
+    boost::asio::detail::addrinfo_type* ai_;
+  };
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+  // Helper class to run the work io_service in a thread.
+  class work_io_service_runner;
+
+  // Start the work thread if it's not already running.
+  BOOST_ASIO_DECL void start_work_thread();
+
+  // The io_service implementation used to post completions.
+  io_service_impl& io_service_impl_;
+
+private:
+  // Mutex to protect access to internal data.
+  boost::asio::detail::mutex mutex_;
+
+  // Private io_service used for performing asynchronous host resolution.
+  boost::asio::detail::scoped_ptr<boost::asio::io_service> work_io_service_;
+
+  // The work io_service implementation used to post completions.
+  io_service_impl& work_io_service_impl_;
+
+  // Work for the private io_service to perform.
+  boost::asio::detail::scoped_ptr<boost::asio::io_service::work> work_;
+
+  // Thread used for running the work io_service's run loop.
+  boost::asio::detail::scoped_ptr<boost::asio::detail::thread> work_thread_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/resolver_service_base.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_DETAIL_RESOLVER_SERVICE_BASE_HPP
diff --git a/ext/patches/boost/asio/detail/scoped_lock.hpp b/ext/patches/boost/asio/detail/scoped_lock.hpp
new file mode 100644
index 0000000..1f1a72c
--- /dev/null
+++ b/ext/patches/boost/asio/detail/scoped_lock.hpp
@@ -0,0 +1,103 @@
+//
+// detail/scoped_lock.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SCOPED_LOCK_HPP
+#define BOOST_ASIO_DETAIL_SCOPED_LOCK_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/noncopyable.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+// Helper class to lock and unlock a mutex automatically.
+template <typename Mutex>
+class scoped_lock
+  : private noncopyable
+{
+public:
+  // Tag type used to distinguish constructors.
+  enum adopt_lock_t { adopt_lock };
+
+  // Constructor adopts a lock that is already held.
+  scoped_lock(Mutex& m, adopt_lock_t)
+    : mutex_(m),
+      locked_(true)
+  {
+  }
+
+  // Constructor acquires the lock.
+  explicit scoped_lock(Mutex& m)
+    : mutex_(m)
+  {
+    mutex_.lock();
+    locked_ = true;
+  }
+
+  // Destructor releases the lock.
+  ~scoped_lock()
+  {
+    if (locked_)
+      mutex_.unlock();
+  }
+
+  // Explicitly acquire the lock.
+  void lock()
+  {
+    if (!locked_)
+    {
+      mutex_.lock();
+      locked_ = true;
+    }
+  }
+
+  // Explicitly release the lock.
+  void unlock()
+  {
+    if (locked_)
+    {
+      mutex_.unlock();
+      locked_ = false;
+    }
+  }
+
+  // Test whether the lock is held.
+  bool locked() const
+  {
+    return locked_;
+  }
+
+  // Get the underlying mutex.
+  Mutex& mutex()
+  {
+    return mutex_;
+  }
+
+private:
+  // The underlying mutex.
+  Mutex& mutex_;
+
+  // Whether the mutex is currently locked or unlocked.
+  bool locked_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_SCOPED_LOCK_HPP
diff --git a/ext/patches/boost/asio/detail/scoped_ptr.hpp b/ext/patches/boost/asio/detail/scoped_ptr.hpp
new file mode 100644
index 0000000..73ebcf7
--- /dev/null
+++ b/ext/patches/boost/asio/detail/scoped_ptr.hpp
@@ -0,0 +1,81 @@
+//
+// detail/scoped_ptr.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SCOPED_PTR_HPP
+#define BOOST_ASIO_DETAIL_SCOPED_PTR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename T>
+class scoped_ptr
+{
+public:
+  // Constructor.
+  explicit scoped_ptr(T* p = 0)
+    : p_(p)
+  {
+  }
+
+  // Destructor.
+  ~scoped_ptr()
+  {
+    delete p_;
+  }
+
+  // Access.
+  T* get()
+  {
+    return p_;
+  }
+
+  // Access.
+  T* operator->()
+  {
+    return p_;
+  }
+
+  // Dereference.
+  T& operator*()
+  {
+    return *p_;
+  }
+
+  // Reset pointer.
+  void reset(T* p = 0)
+  {
+    delete p_;
+    p_ = p;
+  }
+
+private:
+  // Disallow copying and assignment.
+  scoped_ptr(const scoped_ptr&);
+  scoped_ptr& operator=(const scoped_ptr&);
+
+  T* p_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_SCOPED_PTR_HPP
diff --git a/ext/patches/boost/asio/detail/select_interrupter.hpp b/ext/patches/boost/asio/detail/select_interrupter.hpp
new file mode 100644
index 0000000..869fd65
--- /dev/null
+++ b/ext/patches/boost/asio/detail/select_interrupter.hpp
@@ -0,0 +1,48 @@
+//
+// detail/select_interrupter.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SELECT_INTERRUPTER_HPP
+#define BOOST_ASIO_DETAIL_SELECT_INTERRUPTER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) || defined(__SYMBIAN32__)
+# include <boost/asio/detail/socket_select_interrupter.hpp>
+#elif defined(BOOST_ASIO_HAS_EVENTFD)
+# include <boost/asio/detail/eventfd_select_interrupter.hpp>
+#else
+# include <boost/asio/detail/pipe_select_interrupter.hpp>
+#endif
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) || defined(__SYMBIAN32__)
+typedef socket_select_interrupter select_interrupter;
+#elif defined(BOOST_ASIO_HAS_EVENTFD)
+typedef eventfd_select_interrupter select_interrupter;
+#else
+typedef pipe_select_interrupter select_interrupter;
+#endif
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_SELECT_INTERRUPTER_HPP
diff --git a/ext/patches/boost/asio/detail/select_reactor.hpp b/ext/patches/boost/asio/detail/select_reactor.hpp
new file mode 100644
index 0000000..3d9aab2
--- /dev/null
+++ b/ext/patches/boost/asio/detail/select_reactor.hpp
@@ -0,0 +1,221 @@
+//
+// detail/select_reactor.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SELECT_REACTOR_HPP
+#define BOOST_ASIO_DETAIL_SELECT_REACTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP) \
+  || (!defined(BOOST_ASIO_HAS_DEV_POLL) \
+      && !defined(BOOST_ASIO_HAS_EPOLL) \
+      && !defined(BOOST_ASIO_HAS_KQUEUE) \
+      && !defined(BOOST_ASIO_WINDOWS_RUNTIME))
+
+#include <cstddef>
+#include <boost/asio/detail/fd_set_adapter.hpp>
+#include <boost/asio/detail/limits.hpp>
+#include <boost/asio/detail/mutex.hpp>
+#include <boost/asio/detail/op_queue.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/reactor_op_queue.hpp>
+#include <boost/asio/detail/select_interrupter.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/timer_queue_base.hpp>
+#include <boost/asio/detail/timer_queue_set.hpp>
+#include <boost/asio/detail/wait_op.hpp>
+#include <boost/asio/io_service.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+# include <boost/asio/detail/thread.hpp>
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class select_reactor
+  : public boost::asio::detail::service_base<select_reactor>
+{
+public:
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  enum op_types { read_op = 0, write_op = 1, except_op = 2,
+    max_select_ops = 3, connect_op = 3, max_ops = 4 };
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  enum op_types { read_op = 0, write_op = 1, except_op = 2,
+    max_select_ops = 3, connect_op = 1, max_ops = 3 };
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+  // Per-descriptor data.
+  struct per_descriptor_data
+  {
+  };
+
+  // Constructor.
+  BOOST_ASIO_DECL select_reactor(boost::asio::io_service& io_service);
+
+  // Destructor.
+  BOOST_ASIO_DECL ~select_reactor();
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Recreate internal descriptors following a fork.
+  BOOST_ASIO_DECL void fork_service(
+      boost::asio::io_service::fork_event fork_ev);
+
+  // Initialise the task, but only if the reactor is not in its own thread.
+  BOOST_ASIO_DECL void init_task();
+
+  // Register a socket with the reactor. Returns 0 on success, system error
+  // code on failure.
+  BOOST_ASIO_DECL int register_descriptor(socket_type, per_descriptor_data&);
+
+  // Register a descriptor with an associated single operation. Returns 0 on
+  // success, system error code on failure.
+  BOOST_ASIO_DECL int register_internal_descriptor(
+      int op_type, socket_type descriptor,
+      per_descriptor_data& descriptor_data, reactor_op* op);
+
+  // Post a reactor operation for immediate completion.
+  void post_immediate_completion(reactor_op* op, bool is_continuation)
+  {
+    io_service_.post_immediate_completion(op, is_continuation);
+  }
+
+  // Start a new operation. The reactor operation will be performed when the
+  // given descriptor is flagged as ready, or an error has occurred.
+  BOOST_ASIO_DECL void start_op(int op_type, socket_type descriptor,
+      per_descriptor_data&, reactor_op* op, bool is_continuation, bool);
+
+  // Cancel all operations associated with the given descriptor. The
+  // handlers associated with the descriptor will be invoked with the
+  // operation_aborted error.
+  BOOST_ASIO_DECL void cancel_ops(socket_type descriptor, per_descriptor_data&);
+
+  // Cancel any operations that are running against the descriptor and remove
+  // its registration from the reactor.
+  BOOST_ASIO_DECL void deregister_descriptor(socket_type descriptor,
+      per_descriptor_data&, bool closing);
+
+  // Remote the descriptor's registration from the reactor.
+  BOOST_ASIO_DECL void deregister_internal_descriptor(
+      socket_type descriptor, per_descriptor_data& descriptor_data);
+
+  // Move descriptor registration from one descriptor_data object to another.
+  BOOST_ASIO_DECL void move_descriptor(socket_type descriptor,
+      per_descriptor_data& target_descriptor_data,
+      per_descriptor_data& source_descriptor_data);
+
+  // Add a new timer queue to the reactor.
+  template <typename Time_Traits>
+  void add_timer_queue(timer_queue<Time_Traits>& queue);
+
+  // Remove a timer queue from the reactor.
+  template <typename Time_Traits>
+  void remove_timer_queue(timer_queue<Time_Traits>& queue);
+
+  // Schedule a new operation in the given timer queue to expire at the
+  // specified absolute time.
+  template <typename Time_Traits>
+  void schedule_timer(timer_queue<Time_Traits>& queue,
+      const typename Time_Traits::time_type& time,
+      typename timer_queue<Time_Traits>::per_timer_data& timer, wait_op* op);
+
+  // Cancel the timer operations associated with the given token. Returns the
+  // number of operations that have been posted or dispatched.
+  template <typename Time_Traits>
+  std::size_t cancel_timer(timer_queue<Time_Traits>& queue,
+      typename timer_queue<Time_Traits>::per_timer_data& timer,
+      std::size_t max_cancelled = (std::numeric_limits<std::size_t>::max)());
+
+  // Run select once until interrupted or events are ready to be dispatched.
+  BOOST_ASIO_DECL void run(bool block, op_queue<operation>& ops);
+
+  // Interrupt the select loop.
+  BOOST_ASIO_DECL void interrupt();
+
+private:
+#if defined(BOOST_ASIO_HAS_IOCP)
+  // Run the select loop in the thread.
+  BOOST_ASIO_DECL void run_thread();
+
+  // Entry point for the select loop thread.
+  BOOST_ASIO_DECL static void call_run_thread(select_reactor* reactor);
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+  // Helper function to add a new timer queue.
+  BOOST_ASIO_DECL void do_add_timer_queue(timer_queue_base& queue);
+
+  // Helper function to remove a timer queue.
+  BOOST_ASIO_DECL void do_remove_timer_queue(timer_queue_base& queue);
+
+  // Get the timeout value for the select call.
+  BOOST_ASIO_DECL timeval* get_timeout(timeval& tv);
+
+  // Cancel all operations associated with the given descriptor. This function
+  // does not acquire the select_reactor's mutex.
+  BOOST_ASIO_DECL void cancel_ops_unlocked(socket_type descriptor,
+      const boost::system::error_code& ec);
+
+  // The io_service implementation used to post completions.
+  io_service_impl& io_service_;
+
+  // Mutex to protect access to internal data.
+  boost::asio::detail::mutex mutex_;
+
+  // The interrupter is used to break a blocking select call.
+  select_interrupter interrupter_;
+
+  // The queues of read, write and except operations.
+  reactor_op_queue<socket_type> op_queue_[max_ops];
+
+  // The file descriptor sets to be passed to the select system call.
+  fd_set_adapter fd_sets_[max_select_ops];
+
+  // The timer queues.
+  timer_queue_set timer_queues_;
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+  // Does the reactor loop thread need to stop.
+  bool stop_thread_;
+
+  // The thread that is running the reactor loop.
+  boost::asio::detail::thread* thread_;
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+  // Whether the service has been shut down.
+  bool shutdown_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/detail/impl/select_reactor.hpp>
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/select_reactor.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+       //   || (!defined(BOOST_ASIO_HAS_DEV_POLL)
+       //       && !defined(BOOST_ASIO_HAS_EPOLL)
+       //       && !defined(BOOST_ASIO_HAS_KQUEUE)
+       //       && !defined(BOOST_ASIO_WINDOWS_RUNTIME))
+
+#endif // BOOST_ASIO_DETAIL_SELECT_REACTOR_HPP
diff --git a/ext/patches/boost/asio/detail/service_registry.hpp b/ext/patches/boost/asio/detail/service_registry.hpp
new file mode 100644
index 0000000..2a3fda5
--- /dev/null
+++ b/ext/patches/boost/asio/detail/service_registry.hpp
@@ -0,0 +1,158 @@
+//
+// detail/service_registry.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SERVICE_REGISTRY_HPP
+#define BOOST_ASIO_DETAIL_SERVICE_REGISTRY_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <typeinfo>
+#include <boost/asio/detail/mutex.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if defined(__GNUC__)
+# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#  pragma GCC visibility push (default)
+# endif // (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#endif // defined(__GNUC__)
+
+template <typename T>
+class typeid_wrapper {};
+
+#if defined(__GNUC__)
+# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#  pragma GCC visibility pop
+# endif // (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#endif // defined(__GNUC__)
+
+class service_registry
+  : private noncopyable
+{
+public:
+  // Constructor. Adds the initial service.
+  template <typename Service, typename Arg>
+  service_registry(boost::asio::io_service& o,
+      Service* initial_service, Arg arg);
+
+  // Destructor.
+  BOOST_ASIO_DECL ~service_registry();
+
+  // Notify all services of a fork event.
+  BOOST_ASIO_DECL void notify_fork(boost::asio::io_service::fork_event fork_ev);
+
+  // Get the first service object cast to the specified type. Called during
+  // io_service construction and so performs no locking or type checking.
+  template <typename Service>
+  Service& first_service();
+
+  // Get the service object corresponding to the specified service type. Will
+  // create a new service object automatically if no such object already
+  // exists. Ownership of the service object is not transferred to the caller.
+  template <typename Service>
+  Service& use_service();
+
+  // Add a service object. Throws on error, in which case ownership of the
+  // object is retained by the caller.
+  template <typename Service>
+  void add_service(Service* new_service);
+
+  // Check whether a service object of the specified type already exists.
+  template <typename Service>
+  bool has_service() const;
+
+private:
+  // Initialise a service's key based on its id.
+  BOOST_ASIO_DECL static void init_key(
+      boost::asio::io_service::service::key& key,
+      const boost::asio::io_service::id& id);
+
+#if !defined(BOOST_ASIO_NO_TYPEID)
+  // Initialise a service's key based on its id.
+  template <typename Service>
+  static void init_key(boost::asio::io_service::service::key& key,
+      const boost::asio::detail::service_id<Service>& /*id*/);
+#endif // !defined(BOOST_ASIO_NO_TYPEID)
+
+  // Check if a service matches the given id.
+  BOOST_ASIO_DECL static bool keys_match(
+      const boost::asio::io_service::service::key& key1,
+      const boost::asio::io_service::service::key& key2);
+
+  // The type of a factory function used for creating a service instance.
+  typedef boost::asio::io_service::service*
+    (*factory_type)(boost::asio::io_service&);
+
+  // Factory function for creating a service instance.
+  template <typename Service>
+  static boost::asio::io_service::service* create(
+      boost::asio::io_service& owner);
+
+  // Destroy a service instance.
+  BOOST_ASIO_DECL static void destroy(
+      boost::asio::io_service::service* service);
+
+  // Helper class to manage service pointers.
+  struct auto_service_ptr;
+  friend struct auto_service_ptr;
+  struct auto_service_ptr
+  {
+    boost::asio::io_service::service* ptr_;
+    ~auto_service_ptr() { destroy(ptr_); }
+  };
+
+  // Get the service object corresponding to the specified service key. Will
+  // create a new service object automatically if no such object already
+  // exists. Ownership of the service object is not transferred to the caller.
+  BOOST_ASIO_DECL boost::asio::io_service::service* do_use_service(
+      const boost::asio::io_service::service::key& key,
+      factory_type factory);
+
+  // Add a service object. Throws on error, in which case ownership of the
+  // object is retained by the caller.
+  BOOST_ASIO_DECL void do_add_service(
+      const boost::asio::io_service::service::key& key,
+      boost::asio::io_service::service* new_service);
+
+  // Check whether a service object with the specified key already exists.
+  BOOST_ASIO_DECL bool do_has_service(
+      const boost::asio::io_service::service::key& key) const;
+
+  // Mutex to protect access to internal data.
+  mutable boost::asio::detail::mutex mutex_;
+
+  // The owner of this service registry and the services it contains.
+  boost::asio::io_service& owner_;
+
+  // The first service in the list of contained services.
+  boost::asio::io_service::service* first_service_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/detail/impl/service_registry.hpp>
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/service_registry.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_DETAIL_SERVICE_REGISTRY_HPP
diff --git a/ext/patches/boost/asio/detail/shared_ptr.hpp b/ext/patches/boost/asio/detail/shared_ptr.hpp
new file mode 100644
index 0000000..c1182fd
--- /dev/null
+++ b/ext/patches/boost/asio/detail/shared_ptr.hpp
@@ -0,0 +1,40 @@
+//
+// detail/shared_ptr.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SHARED_PTR_HPP
+#define BOOST_ASIO_DETAIL_SHARED_PTR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_STD_SHARED_PTR)
+# include <memory>
+#else // defined(BOOST_ASIO_HAS_STD_SHARED_PTR)
+# include <boost/shared_ptr.hpp>
+#endif // defined(BOOST_ASIO_HAS_STD_SHARED_PTR)
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if defined(BOOST_ASIO_HAS_STD_SHARED_PTR)
+using std::shared_ptr;
+#else // defined(BOOST_ASIO_HAS_STD_SHARED_PTR)
+using boost::shared_ptr;
+#endif // defined(BOOST_ASIO_HAS_STD_SHARED_PTR)
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_SHARED_PTR_HPP
diff --git a/ext/patches/boost/asio/detail/signal_blocker.hpp b/ext/patches/boost/asio/detail/signal_blocker.hpp
new file mode 100644
index 0000000..4b883b0
--- /dev/null
+++ b/ext/patches/boost/asio/detail/signal_blocker.hpp
@@ -0,0 +1,46 @@
+//
+// detail/signal_blocker.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SIGNAL_BLOCKER_HPP
+#define BOOST_ASIO_DETAIL_SIGNAL_BLOCKER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_THREADS) || defined(BOOST_ASIO_WINDOWS) \
+  || defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  || defined(__CYGWIN__) || defined(__SYMBIAN32__)
+# include <boost/asio/detail/null_signal_blocker.hpp>
+#elif defined(BOOST_ASIO_HAS_PTHREADS)
+# include <boost/asio/detail/posix_signal_blocker.hpp>
+#else
+# error Only Windows and POSIX are supported!
+#endif
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if !defined(BOOST_ASIO_HAS_THREADS) || defined(BOOST_ASIO_WINDOWS) \
+  || defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  || defined(__CYGWIN__) || defined(__SYMBIAN32__)
+typedef null_signal_blocker signal_blocker;
+#elif defined(BOOST_ASIO_HAS_PTHREADS)
+typedef posix_signal_blocker signal_blocker;
+#endif
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_SIGNAL_BLOCKER_HPP
diff --git a/ext/patches/boost/asio/detail/signal_handler.hpp b/ext/patches/boost/asio/detail/signal_handler.hpp
new file mode 100644
index 0000000..2fdf08c
--- /dev/null
+++ b/ext/patches/boost/asio/detail/signal_handler.hpp
@@ -0,0 +1,84 @@
+//
+// detail/signal_handler.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SIGNAL_HANDLER_HPP
+#define BOOST_ASIO_DETAIL_SIGNAL_HANDLER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/signal_op.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Handler>
+class signal_handler : public signal_op
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(signal_handler);
+
+  signal_handler(Handler& h)
+    : signal_op(&signal_handler::do_complete),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(h))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& /*ec*/,
+      std::size_t /*bytes_transferred*/)
+  {
+    // Take ownership of the handler object.
+    signal_handler* h(static_cast<signal_handler*>(base));
+    ptr p = { boost::asio::detail::addressof(h->handler_), h, h };
+
+    BOOST_ASIO_HANDLER_COMPLETION((h));
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, int>
+      handler(h->handler_, h->ec_, h->signal_number_);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_SIGNAL_HANDLER_HPP
diff --git a/ext/patches/boost/asio/detail/signal_init.hpp b/ext/patches/boost/asio/detail/signal_init.hpp
new file mode 100644
index 0000000..461c83c
--- /dev/null
+++ b/ext/patches/boost/asio/detail/signal_init.hpp
@@ -0,0 +1,49 @@
+//
+// detail/signal_init.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SIGNAL_INIT_HPP
+#define BOOST_ASIO_DETAIL_SIGNAL_INIT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+#include <csignal>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <int Signal = SIGPIPE>
+class signal_init
+{
+public:
+  // Constructor.
+  signal_init()
+  {
+    std::signal(Signal, SIG_IGN);
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+#endif // BOOST_ASIO_DETAIL_SIGNAL_INIT_HPP
diff --git a/ext/patches/boost/asio/detail/signal_op.hpp b/ext/patches/boost/asio/detail/signal_op.hpp
new file mode 100644
index 0000000..730b629
--- /dev/null
+++ b/ext/patches/boost/asio/detail/signal_op.hpp
@@ -0,0 +1,51 @@
+//
+// detail/signal_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SIGNAL_OP_HPP
+#define BOOST_ASIO_DETAIL_SIGNAL_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/operation.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class signal_op
+  : public operation
+{
+public:
+  // The error code to be passed to the completion handler.
+  boost::system::error_code ec_;
+
+  // The signal number to be passed to the completion handler.
+  int signal_number_;
+
+protected:
+  signal_op(func_type func)
+    : operation(func),
+      signal_number_(0)
+  {
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_SIGNAL_OP_HPP
diff --git a/ext/patches/boost/asio/detail/signal_set_service.hpp b/ext/patches/boost/asio/detail/signal_set_service.hpp
new file mode 100644
index 0000000..05271f1
--- /dev/null
+++ b/ext/patches/boost/asio/detail/signal_set_service.hpp
@@ -0,0 +1,218 @@
+//
+// detail/signal_set_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SIGNAL_SET_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_SIGNAL_SET_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <cstddef>
+#include <signal.h>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/op_queue.hpp>
+#include <boost/asio/detail/signal_handler.hpp>
+#include <boost/asio/detail/signal_op.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+# include <boost/asio/detail/reactor.hpp>
+#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if defined(NSIG) && (NSIG > 0)
+enum { max_signal_number = NSIG };
+#else
+enum { max_signal_number = 128 };
+#endif
+
+extern BOOST_ASIO_DECL struct signal_state* get_signal_state();
+
+extern "C" BOOST_ASIO_DECL void boost_asio_signal_handler(int signal_number);
+
+class signal_set_service
+{
+public:
+  // Type used for tracking an individual signal registration.
+  class registration
+  {
+  public:
+    // Default constructor.
+    registration()
+      : signal_number_(0),
+        queue_(0),
+        undelivered_(0),
+        next_in_table_(0),
+        prev_in_table_(0),
+        next_in_set_(0)
+    {
+    }
+
+  private:
+    // Only this service will have access to the internal values.
+    friend class signal_set_service;
+
+    // The signal number that is registered.
+    int signal_number_;
+
+    // The waiting signal handlers.
+    op_queue<signal_op>* queue_;
+
+    // The number of undelivered signals.
+    std::size_t undelivered_;
+
+    // Pointers to adjacent registrations in the registrations_ table.
+    registration* next_in_table_;
+    registration* prev_in_table_;
+
+    // Link to next registration in the signal set.
+    registration* next_in_set_;
+  };
+
+  // The implementation type of the signal_set.
+  class implementation_type
+  {
+  public:
+    // Default constructor.
+    implementation_type()
+      : signals_(0)
+    {
+    }
+
+  private:
+    // Only this service will have access to the internal values.
+    friend class signal_set_service;
+
+    // The pending signal handlers.
+    op_queue<signal_op> queue_;
+
+    // Linked list of registered signals.
+    registration* signals_;
+  };
+
+  // Constructor.
+  BOOST_ASIO_DECL signal_set_service(boost::asio::io_service& io_service);
+
+  // Destructor.
+  BOOST_ASIO_DECL ~signal_set_service();
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Perform fork-related housekeeping.
+  BOOST_ASIO_DECL void fork_service(
+      boost::asio::io_service::fork_event fork_ev);
+
+  // Construct a new signal_set implementation.
+  BOOST_ASIO_DECL void construct(implementation_type& impl);
+
+  // Destroy a signal_set implementation.
+  BOOST_ASIO_DECL void destroy(implementation_type& impl);
+
+  // Add a signal to a signal_set.
+  BOOST_ASIO_DECL boost::system::error_code add(implementation_type& impl,
+      int signal_number, boost::system::error_code& ec);
+
+  // Remove a signal to a signal_set.
+  BOOST_ASIO_DECL boost::system::error_code remove(implementation_type& impl,
+      int signal_number, boost::system::error_code& ec);
+
+  // Remove all signals from a signal_set.
+  BOOST_ASIO_DECL boost::system::error_code clear(implementation_type& impl,
+      boost::system::error_code& ec);
+
+  // Cancel all operations associated with the signal set.
+  BOOST_ASIO_DECL boost::system::error_code cancel(implementation_type& impl,
+      boost::system::error_code& ec);
+
+  // Start an asynchronous operation to wait for a signal to be delivered.
+  template <typename Handler>
+  void async_wait(implementation_type& impl, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef signal_handler<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "signal_set", &impl, "async_wait"));
+
+    start_wait_op(impl, p.p);
+    p.v = p.p = 0;
+  }
+
+  // Deliver notification that a particular signal occurred.
+  BOOST_ASIO_DECL static void deliver_signal(int signal_number);
+
+private:
+  // Helper function to add a service to the global signal state.
+  BOOST_ASIO_DECL static void add_service(signal_set_service* service);
+
+  // Helper function to remove a service from the global signal state.
+  BOOST_ASIO_DECL static void remove_service(signal_set_service* service);
+
+  // Helper function to create the pipe descriptors.
+  BOOST_ASIO_DECL static void open_descriptors();
+
+  // Helper function to close the pipe descriptors.
+  BOOST_ASIO_DECL static void close_descriptors();
+
+  // Helper function to start a wait operation.
+  BOOST_ASIO_DECL void start_wait_op(implementation_type& impl, signal_op* op);
+
+  // The io_service instance used for dispatching handlers.
+  io_service_impl& io_service_;
+
+#if !defined(BOOST_ASIO_WINDOWS) \
+  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
+  && !defined(__CYGWIN__)
+  // The type used for registering for pipe reactor notifications.
+  class pipe_read_op;
+
+  // The reactor used for waiting for pipe readiness.
+  reactor& reactor_;
+
+  // The per-descriptor reactor data used for the pipe.
+  reactor::per_descriptor_data reactor_data_;
+#endif // !defined(BOOST_ASIO_WINDOWS)
+       //   && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+       //   && !defined(__CYGWIN__)
+
+  // A mapping from signal number to the registered signal sets.
+  registration* registrations_[max_signal_number];
+
+  // Pointers to adjacent services in linked list.
+  signal_set_service* next_;
+  signal_set_service* prev_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/signal_set_service.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_DETAIL_SIGNAL_SET_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/socket_holder.hpp b/ext/patches/boost/asio/detail/socket_holder.hpp
new file mode 100644
index 0000000..49183b0
--- /dev/null
+++ b/ext/patches/boost/asio/detail/socket_holder.hpp
@@ -0,0 +1,100 @@
+//
+// detail/socket_holder.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SOCKET_HOLDER_HPP
+#define BOOST_ASIO_DETAIL_SOCKET_HOLDER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+// Implement the resource acquisition is initialisation idiom for sockets.
+class socket_holder
+  : private noncopyable
+{
+public:
+  // Construct as an uninitialised socket.
+  socket_holder()
+    : socket_(invalid_socket)
+  {
+  }
+
+  // Construct to take ownership of the specified socket.
+  explicit socket_holder(socket_type s)
+    : socket_(s)
+  {
+  }
+
+  // Destructor.
+  ~socket_holder()
+  {
+    if (socket_ != invalid_socket)
+    {
+      boost::system::error_code ec;
+      socket_ops::state_type state = 0;
+      socket_ops::close(socket_, state, true, ec);
+    }
+  }
+
+  // Get the underlying socket.
+  socket_type get() const
+  {
+    return socket_;
+  }
+
+  // Reset to an uninitialised socket.
+  void reset()
+  {
+    if (socket_ != invalid_socket)
+    {
+      boost::system::error_code ec;
+      socket_ops::state_type state = 0;
+      socket_ops::close(socket_, state, true, ec);
+      socket_ = invalid_socket;
+    }
+  }
+
+  // Reset to take ownership of the specified socket.
+  void reset(socket_type s)
+  {
+    reset();
+    socket_ = s;
+  }
+
+  // Release ownership of the socket.
+  socket_type release()
+  {
+    socket_type tmp = socket_;
+    socket_ = invalid_socket;
+    return tmp;
+  }
+
+private:
+  // The underlying socket.
+  socket_type socket_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_SOCKET_HOLDER_HPP
diff --git a/ext/patches/boost/asio/detail/socket_ops.hpp b/ext/patches/boost/asio/detail/socket_ops.hpp
new file mode 100644
index 0000000..b66f768
--- /dev/null
+++ b/ext/patches/boost/asio/detail/socket_ops.hpp
@@ -0,0 +1,336 @@
+//
+// detail/socket_ops.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SOCKET_OPS_HPP
+#define BOOST_ASIO_DETAIL_SOCKET_OPS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <boost/system/error_code.hpp>
+#include <boost/asio/detail/shared_ptr.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/weak_ptr.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+namespace socket_ops {
+
+// Socket state bits.
+enum
+{
+  // The user wants a non-blocking socket.
+  user_set_non_blocking = 1,
+
+  // The socket has been set non-blocking.
+  internal_non_blocking = 2,
+
+  // Helper "state" used to determine whether the socket is non-blocking.
+  non_blocking = user_set_non_blocking | internal_non_blocking,
+
+  // User wants connection_aborted errors, which are disabled by default.
+  enable_connection_aborted = 4,
+
+  // The user set the linger option. Needs to be checked when closing.
+  user_set_linger = 8,
+
+  // The socket is stream-oriented.
+  stream_oriented = 16,
+
+  // The socket is datagram-oriented.
+  datagram_oriented = 32,
+
+  // The socket may have been dup()-ed.
+  possible_dup = 64
+};
+
+typedef unsigned char state_type;
+
+struct noop_deleter { void operator()(void*) {} };
+typedef shared_ptr<void> shared_cancel_token_type;
+typedef weak_ptr<void> weak_cancel_token_type;
+
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+BOOST_ASIO_DECL socket_type accept(socket_type s, socket_addr_type* addr,
+    std::size_t* addrlen, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL socket_type sync_accept(socket_type s,
+    state_type state, socket_addr_type* addr,
+    std::size_t* addrlen, boost::system::error_code& ec);
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL void complete_iocp_accept(socket_type s,
+    void* output_buffer, DWORD address_length,
+    socket_addr_type* addr, std::size_t* addrlen,
+    socket_type new_socket, boost::system::error_code& ec);
+
+#else // defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL bool non_blocking_accept(socket_type s,
+    state_type state, socket_addr_type* addr, std::size_t* addrlen,
+    boost::system::error_code& ec, socket_type& new_socket);
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL int bind(socket_type s, const socket_addr_type* addr,
+    std::size_t addrlen, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int close(socket_type s, state_type& state,
+    bool destruction, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL bool set_user_non_blocking(socket_type s,
+    state_type& state, bool value, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL bool set_internal_non_blocking(socket_type s,
+    state_type& state, bool value, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int shutdown(socket_type s,
+    int what, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int connect(socket_type s, const socket_addr_type* addr,
+    std::size_t addrlen, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL void sync_connect(socket_type s, const socket_addr_type* addr,
+    std::size_t addrlen, boost::system::error_code& ec);
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL void complete_iocp_connect(socket_type s,
+    boost::system::error_code& ec);
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL bool non_blocking_connect(socket_type s,
+    boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int socketpair(int af, int type, int protocol,
+    socket_type sv[2], boost::system::error_code& ec);
+
+BOOST_ASIO_DECL bool sockatmark(socket_type s, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL size_t available(socket_type s, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int listen(socket_type s,
+    int backlog, boost::system::error_code& ec);
+
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+typedef WSABUF buf;
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+typedef iovec buf;
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+BOOST_ASIO_DECL void init_buf(buf& b, void* data, size_t size);
+
+BOOST_ASIO_DECL void init_buf(buf& b, const void* data, size_t size);
+
+BOOST_ASIO_DECL signed_size_type recv(socket_type s, buf* bufs,
+    size_t count, int flags, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL size_t sync_recv(socket_type s, state_type state, buf* bufs,
+    size_t count, int flags, bool all_empty, boost::system::error_code& ec);
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL void complete_iocp_recv(state_type state,
+    const weak_cancel_token_type& cancel_token, bool all_empty,
+    boost::system::error_code& ec, size_t bytes_transferred);
+
+#else // defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL bool non_blocking_recv(socket_type s,
+    buf* bufs, size_t count, int flags, bool is_stream,
+    boost::system::error_code& ec, size_t& bytes_transferred);
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL signed_size_type recvfrom(socket_type s, buf* bufs,
+    size_t count, int flags, socket_addr_type* addr,
+    std::size_t* addrlen, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL size_t sync_recvfrom(socket_type s, state_type state,
+    buf* bufs, size_t count, int flags, socket_addr_type* addr,
+    std::size_t* addrlen, boost::system::error_code& ec);
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL void complete_iocp_recvfrom(
+    const weak_cancel_token_type& cancel_token,
+    boost::system::error_code& ec);
+
+#else // defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL bool non_blocking_recvfrom(socket_type s,
+    buf* bufs, size_t count, int flags,
+    socket_addr_type* addr, std::size_t* addrlen,
+    boost::system::error_code& ec, size_t& bytes_transferred);
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL signed_size_type recvmsg(socket_type s, buf* bufs,
+    size_t count, int in_flags, int& out_flags,
+    boost::system::error_code& ec);
+
+BOOST_ASIO_DECL size_t sync_recvmsg(socket_type s, state_type state,
+    buf* bufs, size_t count, int in_flags, int& out_flags,
+    boost::system::error_code& ec);
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL void complete_iocp_recvmsg(
+    const weak_cancel_token_type& cancel_token,
+    boost::system::error_code& ec);
+
+#else // defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL bool non_blocking_recvmsg(socket_type s,
+    buf* bufs, size_t count, int in_flags, int& out_flags,
+    boost::system::error_code& ec, size_t& bytes_transferred);
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL signed_size_type send(socket_type s, const buf* bufs,
+    size_t count, int flags, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL size_t sync_send(socket_type s, state_type state,
+    const buf* bufs, size_t count, int flags,
+    bool all_empty, boost::system::error_code& ec);
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL void complete_iocp_send(
+    const weak_cancel_token_type& cancel_token,
+    boost::system::error_code& ec);
+
+#else // defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL bool non_blocking_send(socket_type s,
+    const buf* bufs, size_t count, int flags,
+    boost::system::error_code& ec, size_t& bytes_transferred);
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL signed_size_type sendto(socket_type s, const buf* bufs,
+    size_t count, int flags, const socket_addr_type* addr,
+    std::size_t addrlen, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL size_t sync_sendto(socket_type s, state_type state,
+    const buf* bufs, size_t count, int flags, const socket_addr_type* addr,
+    std::size_t addrlen, boost::system::error_code& ec);
+
+#if !defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL bool non_blocking_sendto(socket_type s,
+    const buf* bufs, size_t count, int flags,
+    const socket_addr_type* addr, std::size_t addrlen,
+    boost::system::error_code& ec, size_t& bytes_transferred);
+
+#endif // !defined(BOOST_ASIO_HAS_IOCP)
+
+BOOST_ASIO_DECL socket_type socket(int af, int type, int protocol,
+    boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int setsockopt(socket_type s, state_type& state,
+    int level, int optname, const void* optval,
+    std::size_t optlen, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int getsockopt(socket_type s, state_type state,
+    int level, int optname, void* optval,
+    size_t* optlen, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int getpeername(socket_type s, socket_addr_type* addr,
+    std::size_t* addrlen, bool cached, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int getsockname(socket_type s, socket_addr_type* addr,
+    std::size_t* addrlen, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int ioctl(socket_type s, state_type& state,
+    int cmd, ioctl_arg_type* arg, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int select(int nfds, fd_set* readfds, fd_set* writefds,
+    fd_set* exceptfds, timeval* timeout, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int poll_read(socket_type s,
+    state_type state, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int poll_write(socket_type s,
+    state_type state, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int poll_connect(socket_type s, boost::system::error_code& ec);
+
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+BOOST_ASIO_DECL const char* inet_ntop(int af, const void* src, char* dest,
+    size_t length, unsigned long scope_id, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int inet_pton(int af, const char* src, void* dest,
+    unsigned long* scope_id, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL int gethostname(char* name,
+    int namelen, boost::system::error_code& ec);
+
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+BOOST_ASIO_DECL boost::system::error_code getaddrinfo(const char* host,
+    const char* service, const addrinfo_type& hints,
+    addrinfo_type** result, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL boost::system::error_code background_getaddrinfo(
+    const weak_cancel_token_type& cancel_token, const char* host,
+    const char* service, const addrinfo_type& hints,
+    addrinfo_type** result, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL void freeaddrinfo(addrinfo_type* ai);
+
+BOOST_ASIO_DECL boost::system::error_code getnameinfo(
+    const socket_addr_type* addr, std::size_t addrlen,
+    char* host, std::size_t hostlen, char* serv,
+    std::size_t servlen, int flags, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL boost::system::error_code sync_getnameinfo(
+    const socket_addr_type* addr, std::size_t addrlen,
+    char* host, std::size_t hostlen, char* serv,
+    std::size_t servlen, int sock_type, boost::system::error_code& ec);
+
+BOOST_ASIO_DECL boost::system::error_code background_getnameinfo(
+    const weak_cancel_token_type& cancel_token,
+    const socket_addr_type* addr, std::size_t addrlen,
+    char* host, std::size_t hostlen, char* serv,
+    std::size_t servlen, int sock_type, boost::system::error_code& ec);
+
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+BOOST_ASIO_DECL u_long_type network_to_host_long(u_long_type value);
+
+BOOST_ASIO_DECL u_long_type host_to_network_long(u_long_type value);
+
+BOOST_ASIO_DECL u_short_type network_to_host_short(u_short_type value);
+
+BOOST_ASIO_DECL u_short_type host_to_network_short(u_short_type value);
+
+} // namespace socket_ops
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/socket_ops.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_DETAIL_SOCKET_OPS_HPP
diff --git a/ext/patches/boost/asio/detail/socket_option.hpp b/ext/patches/boost/asio/detail/socket_option.hpp
new file mode 100644
index 0000000..3c0f760
--- /dev/null
+++ b/ext/patches/boost/asio/detail/socket_option.hpp
@@ -0,0 +1,318 @@
+//
+// detail/socket_option.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SOCKET_OPTION_HPP
+#define BOOST_ASIO_DETAIL_SOCKET_OPTION_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <stdexcept>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/throw_exception.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+namespace socket_option {
+
+// Helper template for implementing boolean-based options.
+template <int Level, int Name>
+class boolean
+{
+public:
+  // Default constructor.
+  boolean()
+    : value_(0)
+  {
+  }
+
+  // Construct with a specific option value.
+  explicit boolean(bool v)
+    : value_(v ? 1 : 0)
+  {
+  }
+
+  // Set the current value of the boolean.
+  boolean& operator=(bool v)
+  {
+    value_ = v ? 1 : 0;
+    return *this;
+  }
+
+  // Get the current value of the boolean.
+  bool value() const
+  {
+    return !!value_;
+  }
+
+  // Convert to bool.
+  operator bool() const
+  {
+    return !!value_;
+  }
+
+  // Test for false.
+  bool operator!() const
+  {
+    return !value_;
+  }
+
+  // Get the level of the socket option.
+  template <typename Protocol>
+  int level(const Protocol&) const
+  {
+    return Level;
+  }
+
+  // Get the name of the socket option.
+  template <typename Protocol>
+  int name(const Protocol&) const
+  {
+    return Name;
+  }
+
+  // Get the address of the boolean data.
+  template <typename Protocol>
+  int* data(const Protocol&)
+  {
+    return &value_;
+  }
+
+  // Get the address of the boolean data.
+  template <typename Protocol>
+  const int* data(const Protocol&) const
+  {
+    return &value_;
+  }
+
+  // Get the size of the boolean data.
+  template <typename Protocol>
+  std::size_t size(const Protocol&) const
+  {
+    return sizeof(value_);
+  }
+
+  // Set the size of the boolean data.
+  template <typename Protocol>
+  void resize(const Protocol&, std::size_t s)
+  {
+    // On some platforms (e.g. Windows Vista), the getsockopt function will
+    // return the size of a boolean socket option as one byte, even though a
+    // four byte integer was passed in.
+    switch (s)
+    {
+    case sizeof(char):
+      value_ = *reinterpret_cast<char*>(&value_) ? 1 : 0;
+      break;
+    case sizeof(value_):
+      break;
+    default:
+      {
+        std::length_error ex("boolean socket option resize");
+        boost::asio::detail::throw_exception(ex);
+      }
+    }
+  }
+
+private:
+  int value_;
+};
+
+// Helper template for implementing integer options.
+template <int Level, int Name>
+class integer
+{
+public:
+  // Default constructor.
+  integer()
+    : value_(0)
+  {
+  }
+
+  // Construct with a specific option value.
+  explicit integer(int v)
+    : value_(v)
+  {
+  }
+
+  // Set the value of the int option.
+  integer& operator=(int v)
+  {
+    value_ = v;
+    return *this;
+  }
+
+  // Get the current value of the int option.
+  int value() const
+  {
+    return value_;
+  }
+
+  // Get the level of the socket option.
+  template <typename Protocol>
+  int level(const Protocol&) const
+  {
+    return Level;
+  }
+
+  // Get the name of the socket option.
+  template <typename Protocol>
+  int name(const Protocol&) const
+  {
+    return Name;
+  }
+
+  // Get the address of the int data.
+  template <typename Protocol>
+  int* data(const Protocol&)
+  {
+    return &value_;
+  }
+
+  // Get the address of the int data.
+  template <typename Protocol>
+  const int* data(const Protocol&) const
+  {
+    return &value_;
+  }
+
+  // Get the size of the int data.
+  template <typename Protocol>
+  std::size_t size(const Protocol&) const
+  {
+    return sizeof(value_);
+  }
+
+  // Set the size of the int data.
+  template <typename Protocol>
+  void resize(const Protocol&, std::size_t s)
+  {
+    if (s != sizeof(value_))
+    {
+      std::length_error ex("integer socket option resize");
+      boost::asio::detail::throw_exception(ex);
+    }
+  }
+
+private:
+  int value_;
+};
+
+// Helper template for implementing linger options.
+template <int Level, int Name>
+class linger
+{
+public:
+  // Default constructor.
+  linger()
+  {
+    value_.l_onoff = 0;
+    value_.l_linger = 0;
+  }
+
+  // Construct with specific option values.
+  linger(bool e, int t)
+  {
+    enabled(e);
+    timeout BOOST_ASIO_PREVENT_MACRO_SUBSTITUTION(t);
+  }
+
+  // Set the value for whether linger is enabled.
+  void enabled(bool value)
+  {
+    value_.l_onoff = value ? 1 : 0;
+  }
+
+  // Get the value for whether linger is enabled.
+  bool enabled() const
+  {
+    return value_.l_onoff != 0;
+  }
+
+  // Set the value for the linger timeout.
+  void timeout BOOST_ASIO_PREVENT_MACRO_SUBSTITUTION(int value)
+  {
+#if defined(WIN32)
+    value_.l_linger = static_cast<u_short>(value);
+#else
+    value_.l_linger = value;
+#endif
+  }
+
+  // Get the value for the linger timeout.
+  int timeout BOOST_ASIO_PREVENT_MACRO_SUBSTITUTION() const
+  {
+    return static_cast<int>(value_.l_linger);
+  }
+
+  // Get the level of the socket option.
+  template <typename Protocol>
+  int level(const Protocol&) const
+  {
+    return Level;
+  }
+
+  // Get the name of the socket option.
+  template <typename Protocol>
+  int name(const Protocol&) const
+  {
+    return Name;
+  }
+
+  // Get the address of the linger data.
+  template <typename Protocol>
+  detail::linger_type* data(const Protocol&)
+  {
+    return &value_;
+  }
+
+  // Get the address of the linger data.
+  template <typename Protocol>
+  const detail::linger_type* data(const Protocol&) const
+  {
+    return &value_;
+  }
+
+  // Get the size of the linger data.
+  template <typename Protocol>
+  std::size_t size(const Protocol&) const
+  {
+    return sizeof(value_);
+  }
+
+  // Set the size of the int data.
+  template <typename Protocol>
+  void resize(const Protocol&, std::size_t s)
+  {
+    if (s != sizeof(value_))
+    {
+      std::length_error ex("linger socket option resize");
+      boost::asio::detail::throw_exception(ex);
+    }
+  }
+
+private:
+  detail::linger_type value_;
+};
+
+} // namespace socket_option
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_SOCKET_OPTION_HPP
diff --git a/ext/patches/boost/asio/detail/socket_select_interrupter.hpp b/ext/patches/boost/asio/detail/socket_select_interrupter.hpp
new file mode 100644
index 0000000..a0e5663
--- /dev/null
+++ b/ext/patches/boost/asio/detail/socket_select_interrupter.hpp
@@ -0,0 +1,93 @@
+//
+// detail/socket_select_interrupter.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SOCKET_SELECT_INTERRUPTER_HPP
+#define BOOST_ASIO_DETAIL_SOCKET_SELECT_INTERRUPTER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#if defined(BOOST_ASIO_WINDOWS) \
+  || defined(__CYGWIN__) \
+  || defined(__SYMBIAN32__)
+
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class socket_select_interrupter
+{
+public:
+  // Constructor.
+  BOOST_ASIO_DECL socket_select_interrupter();
+
+  // Destructor.
+  BOOST_ASIO_DECL ~socket_select_interrupter();
+
+  // Recreate the interrupter's descriptors. Used after a fork.
+  BOOST_ASIO_DECL void recreate();
+
+  // Interrupt the select call.
+  BOOST_ASIO_DECL void interrupt();
+
+  // Reset the select interrupt. Returns true if the call was interrupted.
+  BOOST_ASIO_DECL bool reset();
+
+  // Get the read descriptor to be passed to select.
+  socket_type read_descriptor() const
+  {
+    return read_descriptor_;
+  }
+
+private:
+  // Open the descriptors. Throws on error.
+  BOOST_ASIO_DECL void open_descriptors();
+
+  // Close the descriptors.
+  BOOST_ASIO_DECL void close_descriptors();
+
+  // The read end of a connection used to interrupt the select call. This file
+  // descriptor is passed to select such that when it is time to stop, a single
+  // byte will be written on the other end of the connection and this
+  // descriptor will become readable.
+  socket_type read_descriptor_;
+
+  // The write end of a connection used to interrupt the select call. A single
+  // byte may be written to this to wake up the select which is waiting for the
+  // other end to become readable.
+  socket_type write_descriptor_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/socket_select_interrupter.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_WINDOWS)
+       // || defined(__CYGWIN__)
+       // || defined(__SYMBIAN32__)
+
+#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_SOCKET_SELECT_INTERRUPTER_HPP
diff --git a/ext/patches/boost/asio/detail/socket_types.hpp b/ext/patches/boost/asio/detail/socket_types.hpp
new file mode 100644
index 0000000..5318c99
--- /dev/null
+++ b/ext/patches/boost/asio/detail/socket_types.hpp
@@ -0,0 +1,406 @@
+//
+// detail/socket_types.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SOCKET_TYPES_HPP
+#define BOOST_ASIO_DETAIL_SOCKET_TYPES_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+// Empty.
+#elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+# if defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)
+#  error WinSock.h has already been included
+# endif // defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)
+# if defined(__BORLANDC__)
+#  include <stdlib.h> // Needed for __errno
+#  if !defined(_WSPIAPI_H_)
+#   define _WSPIAPI_H_
+#   define BOOST_ASIO_WSPIAPI_H_DEFINED
+#  endif // !defined(_WSPIAPI_H_)
+# endif // defined(__BORLANDC__)
+# if defined(WINAPI_FAMILY)
+#  if ((WINAPI_FAMILY & WINAPI_PARTITION_DESKTOP) != 0)
+#   include <windows.h>
+#  endif // ((WINAPI_FAMILY & WINAPI_PARTITION_DESKTOP) != 0)
+# endif // defined(WINAPI_FAMILY)
+# include <winsock2.h>
+# include <ws2tcpip.h>
+# include <mswsock.h>
+# if defined(BOOST_ASIO_WSPIAPI_H_DEFINED)
+#  undef _WSPIAPI_H_
+#  undef BOOST_ASIO_WSPIAPI_H_DEFINED
+# endif // defined(BOOST_ASIO_WSPIAPI_H_DEFINED)
+# if !defined(BOOST_ASIO_NO_DEFAULT_LINKED_LIBS)
+#  if defined(UNDER_CE)
+#   pragma comment(lib, "ws2.lib")
+#  elif defined(_MSC_VER) || defined(__BORLANDC__)
+#   pragma comment(lib, "ws2_32.lib")
+#   pragma comment(lib, "mswsock.lib")
+#  endif // defined(_MSC_VER) || defined(__BORLANDC__)
+# endif // !defined(BOOST_ASIO_NO_DEFAULT_LINKED_LIBS)
+# include <boost/asio/detail/old_win_sdk_compat.hpp>
+#else
+# include <sys/ioctl.h>
+# if !defined(__SYMBIAN32__)
+#  include <sys/poll.h>
+# endif
+# include <sys/types.h>
+# include <sys/stat.h>
+# include <fcntl.h>
+# if defined(__hpux)
+#  include <sys/time.h>
+# endif
+# if !defined(__hpux) || defined(__SELECT)
+#  include <sys/select.h>
+# endif
+# include <sys/socket.h>
+# include <sys/uio.h>
+# include <sys/un.h>
+# include <netinet/in.h>
+# if !defined(__SYMBIAN32__)
+#  include <netinet/tcp.h>
+# endif
+# include <arpa/inet.h>
+# include <netdb.h>
+# include <net/if.h>
+# include <limits.h>
+# if defined(__sun)
+#  include <sys/filio.h>
+#  include <sys/sockio.h>
+# endif
+#endif
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+const int max_addr_v4_str_len = 256;
+const int max_addr_v6_str_len = 256;
+typedef unsigned __int32 u_long_type;
+typedef unsigned __int16 u_short_type;
+struct in4_addr_type { u_long_type s_addr; };
+struct in4_mreq_type { in4_addr_type imr_multiaddr, imr_interface; };
+struct in6_addr_type { unsigned char s6_addr[16]; };
+struct in6_mreq_type { in6_addr_type ipv6mr_multiaddr;
+  unsigned long ipv6mr_interface; };
+struct socket_addr_type { int sa_family; };
+struct sockaddr_in4_type { int sin_family;
+  in4_addr_type sin_addr; u_short_type sin_port; };
+struct sockaddr_in6_type { int sin6_family;
+  in6_addr_type sin6_addr; u_short_type sin6_port;
+  u_long_type sin6_flowinfo; u_long_type sin6_scope_id; };
+struct sockaddr_storage_type { int ss_family;
+  unsigned char ss_bytes[128 - sizeof(int)]; };
+struct addrinfo_type { int ai_flags;
+  int ai_family, ai_socktype, ai_protocol;
+  int ai_addrlen; const void* ai_addr;
+  const char* ai_canonname; addrinfo_type* ai_next; };
+struct linger_type { u_short_type l_onoff, l_linger; };
+typedef u_long_type ioctl_arg_type;
+typedef int signed_size_type;
+# define BOOST_ASIO_OS_DEF(c) BOOST_ASIO_OS_DEF_##c
+# define BOOST_ASIO_OS_DEF_AF_UNSPEC 0
+# define BOOST_ASIO_OS_DEF_AF_INET 2
+# define BOOST_ASIO_OS_DEF_AF_INET6 23
+# define BOOST_ASIO_OS_DEF_SOCK_STREAM 1
+# define BOOST_ASIO_OS_DEF_SOCK_DGRAM 2
+# define BOOST_ASIO_OS_DEF_SOCK_RAW 3
+# define BOOST_ASIO_OS_DEF_SOCK_SEQPACKET 5
+# define BOOST_ASIO_OS_DEF_IPPROTO_IP 0
+# define BOOST_ASIO_OS_DEF_IPPROTO_IPV6 41
+# define BOOST_ASIO_OS_DEF_IPPROTO_TCP 6
+# define BOOST_ASIO_OS_DEF_IPPROTO_UDP 17
+# define BOOST_ASIO_OS_DEF_IPPROTO_ICMP 1
+# define BOOST_ASIO_OS_DEF_IPPROTO_ICMPV6 58
+# define BOOST_ASIO_OS_DEF_FIONBIO 1
+# define BOOST_ASIO_OS_DEF_FIONREAD 2
+# define BOOST_ASIO_OS_DEF_INADDR_ANY 0
+# define BOOST_ASIO_OS_DEF_MSG_OOB 0x1
+# define BOOST_ASIO_OS_DEF_MSG_PEEK 0x2
+# define BOOST_ASIO_OS_DEF_MSG_DONTROUTE 0x4
+# define BOOST_ASIO_OS_DEF_MSG_EOR 0 // Not supported.
+# define BOOST_ASIO_OS_DEF_SHUT_RD 0x0
+# define BOOST_ASIO_OS_DEF_SHUT_WR 0x1
+# define BOOST_ASIO_OS_DEF_SHUT_RDWR 0x2
+# define BOOST_ASIO_OS_DEF_SOMAXCONN 0x7fffffff
+# define BOOST_ASIO_OS_DEF_SOL_SOCKET 0xffff
+# define BOOST_ASIO_OS_DEF_SO_BROADCAST 0x20
+# define BOOST_ASIO_OS_DEF_SO_DEBUG 0x1
+# define BOOST_ASIO_OS_DEF_SO_DONTROUTE 0x10
+# define BOOST_ASIO_OS_DEF_SO_KEEPALIVE 0x8
+# define BOOST_ASIO_OS_DEF_SO_LINGER 0x80
+# define BOOST_ASIO_OS_DEF_SO_SNDBUF 0x1001
+# define BOOST_ASIO_OS_DEF_SO_RCVBUF 0x1002
+# define BOOST_ASIO_OS_DEF_SO_SNDLOWAT 0x1003
+# define BOOST_ASIO_OS_DEF_SO_RCVLOWAT 0x1004
+# define BOOST_ASIO_OS_DEF_SO_REUSEADDR 0x4
+# define BOOST_ASIO_OS_DEF_TCP_NODELAY 0x1
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_IF 2
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_TTL 3
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_LOOP 4
+# define BOOST_ASIO_OS_DEF_IP_ADD_MEMBERSHIP 5
+# define BOOST_ASIO_OS_DEF_IP_DROP_MEMBERSHIP 6
+# define BOOST_ASIO_OS_DEF_IP_TTL 7
+# define BOOST_ASIO_OS_DEF_IPV6_UNICAST_HOPS 4
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_IF 9
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_HOPS 10
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_LOOP 11
+# define BOOST_ASIO_OS_DEF_IPV6_JOIN_GROUP 12
+# define BOOST_ASIO_OS_DEF_IPV6_LEAVE_GROUP 13
+# define BOOST_ASIO_OS_DEF_AI_CANONNAME 0x2
+# define BOOST_ASIO_OS_DEF_AI_PASSIVE 0x1
+# define BOOST_ASIO_OS_DEF_AI_NUMERICHOST 0x4
+# define BOOST_ASIO_OS_DEF_AI_NUMERICSERV 0x8
+# define BOOST_ASIO_OS_DEF_AI_V4MAPPED 0x800
+# define BOOST_ASIO_OS_DEF_AI_ALL 0x100
+# define BOOST_ASIO_OS_DEF_AI_ADDRCONFIG 0x400
+#elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+typedef SOCKET socket_type;
+const SOCKET invalid_socket = INVALID_SOCKET;
+const int socket_error_retval = SOCKET_ERROR;
+const int max_addr_v4_str_len = 256;
+const int max_addr_v6_str_len = 256;
+typedef sockaddr socket_addr_type;
+typedef in_addr in4_addr_type;
+typedef ip_mreq in4_mreq_type;
+typedef sockaddr_in sockaddr_in4_type;
+# if defined(BOOST_ASIO_HAS_OLD_WIN_SDK)
+typedef in6_addr_emulation in6_addr_type;
+typedef ipv6_mreq_emulation in6_mreq_type;
+typedef sockaddr_in6_emulation sockaddr_in6_type;
+typedef sockaddr_storage_emulation sockaddr_storage_type;
+typedef addrinfo_emulation addrinfo_type;
+# else
+typedef in6_addr in6_addr_type;
+typedef ipv6_mreq in6_mreq_type;
+typedef sockaddr_in6 sockaddr_in6_type;
+typedef sockaddr_storage sockaddr_storage_type;
+typedef addrinfo addrinfo_type;
+# endif
+typedef ::linger linger_type;
+typedef unsigned long ioctl_arg_type;
+typedef u_long u_long_type;
+typedef u_short u_short_type;
+typedef int signed_size_type;
+# define BOOST_ASIO_OS_DEF(c) BOOST_ASIO_OS_DEF_##c
+# define BOOST_ASIO_OS_DEF_AF_UNSPEC AF_UNSPEC
+# define BOOST_ASIO_OS_DEF_AF_INET AF_INET
+# define BOOST_ASIO_OS_DEF_AF_INET6 AF_INET6
+# define BOOST_ASIO_OS_DEF_SOCK_STREAM SOCK_STREAM
+# define BOOST_ASIO_OS_DEF_SOCK_DGRAM SOCK_DGRAM
+# define BOOST_ASIO_OS_DEF_SOCK_RAW SOCK_RAW
+# define BOOST_ASIO_OS_DEF_SOCK_SEQPACKET SOCK_SEQPACKET
+# define BOOST_ASIO_OS_DEF_IPPROTO_IP IPPROTO_IP
+# define BOOST_ASIO_OS_DEF_IPPROTO_IPV6 IPPROTO_IPV6
+# define BOOST_ASIO_OS_DEF_IPPROTO_TCP IPPROTO_TCP
+# define BOOST_ASIO_OS_DEF_IPPROTO_UDP IPPROTO_UDP
+# define BOOST_ASIO_OS_DEF_IPPROTO_ICMP IPPROTO_ICMP
+# define BOOST_ASIO_OS_DEF_IPPROTO_ICMPV6 IPPROTO_ICMPV6
+# define BOOST_ASIO_OS_DEF_FIONBIO FIONBIO
+# define BOOST_ASIO_OS_DEF_FIONREAD FIONREAD
+# define BOOST_ASIO_OS_DEF_INADDR_ANY INADDR_ANY
+# define BOOST_ASIO_OS_DEF_MSG_OOB MSG_OOB
+# define BOOST_ASIO_OS_DEF_MSG_PEEK MSG_PEEK
+# define BOOST_ASIO_OS_DEF_MSG_DONTROUTE MSG_DONTROUTE
+# define BOOST_ASIO_OS_DEF_MSG_EOR 0 // Not supported on Windows.
+# define BOOST_ASIO_OS_DEF_SHUT_RD SD_RECEIVE
+# define BOOST_ASIO_OS_DEF_SHUT_WR SD_SEND
+# define BOOST_ASIO_OS_DEF_SHUT_RDWR SD_BOTH
+# define BOOST_ASIO_OS_DEF_SOMAXCONN SOMAXCONN
+# define BOOST_ASIO_OS_DEF_SOL_SOCKET SOL_SOCKET
+# define BOOST_ASIO_OS_DEF_SO_BROADCAST SO_BROADCAST
+# define BOOST_ASIO_OS_DEF_SO_DEBUG SO_DEBUG
+# define BOOST_ASIO_OS_DEF_SO_DONTROUTE SO_DONTROUTE
+# define BOOST_ASIO_OS_DEF_SO_KEEPALIVE SO_KEEPALIVE
+# define BOOST_ASIO_OS_DEF_SO_LINGER SO_LINGER
+# define BOOST_ASIO_OS_DEF_SO_SNDBUF SO_SNDBUF
+# define BOOST_ASIO_OS_DEF_SO_RCVBUF SO_RCVBUF
+# define BOOST_ASIO_OS_DEF_SO_SNDLOWAT SO_SNDLOWAT
+# define BOOST_ASIO_OS_DEF_SO_RCVLOWAT SO_RCVLOWAT
+# define BOOST_ASIO_OS_DEF_SO_REUSEADDR SO_REUSEADDR
+# define BOOST_ASIO_OS_DEF_TCP_NODELAY TCP_NODELAY
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_IF IP_MULTICAST_IF
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_TTL IP_MULTICAST_TTL
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_LOOP IP_MULTICAST_LOOP
+# define BOOST_ASIO_OS_DEF_IP_ADD_MEMBERSHIP IP_ADD_MEMBERSHIP
+# define BOOST_ASIO_OS_DEF_IP_DROP_MEMBERSHIP IP_DROP_MEMBERSHIP
+# define BOOST_ASIO_OS_DEF_IP_TTL IP_TTL
+# define BOOST_ASIO_OS_DEF_IPV6_UNICAST_HOPS IPV6_UNICAST_HOPS
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_IF IPV6_MULTICAST_IF
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_HOPS IPV6_MULTICAST_HOPS
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_LOOP IPV6_MULTICAST_LOOP
+# define BOOST_ASIO_OS_DEF_IPV6_JOIN_GROUP IPV6_JOIN_GROUP
+# define BOOST_ASIO_OS_DEF_IPV6_LEAVE_GROUP IPV6_LEAVE_GROUP
+# define BOOST_ASIO_OS_DEF_AI_CANONNAME AI_CANONNAME
+# define BOOST_ASIO_OS_DEF_AI_PASSIVE AI_PASSIVE
+# define BOOST_ASIO_OS_DEF_AI_NUMERICHOST AI_NUMERICHOST
+# if defined(AI_NUMERICSERV)
+#  define BOOST_ASIO_OS_DEF_AI_NUMERICSERV AI_NUMERICSERV
+# else
+#  define BOOST_ASIO_OS_DEF_AI_NUMERICSERV 0
+# endif
+# if defined(AI_V4MAPPED)
+#  define BOOST_ASIO_OS_DEF_AI_V4MAPPED AI_V4MAPPED
+# else
+#  define BOOST_ASIO_OS_DEF_AI_V4MAPPED 0
+# endif
+# if defined(AI_ALL)
+#  define BOOST_ASIO_OS_DEF_AI_ALL AI_ALL
+# else
+#  define BOOST_ASIO_OS_DEF_AI_ALL 0
+# endif
+# if defined(AI_ADDRCONFIG)
+#  define BOOST_ASIO_OS_DEF_AI_ADDRCONFIG AI_ADDRCONFIG
+# else
+#  define BOOST_ASIO_OS_DEF_AI_ADDRCONFIG 0
+# endif
+# if defined (_WIN32_WINNT)
+const int max_iov_len = 64;
+# else
+const int max_iov_len = 16;
+# endif
+#else
+typedef int socket_type;
+const int invalid_socket = -1;
+const int socket_error_retval = -1;
+const int max_addr_v4_str_len = INET_ADDRSTRLEN;
+#if defined(INET6_ADDRSTRLEN)
+const int max_addr_v6_str_len = INET6_ADDRSTRLEN + 1 + IF_NAMESIZE;
+#else // defined(INET6_ADDRSTRLEN)
+const int max_addr_v6_str_len = 256;
+#endif // defined(INET6_ADDRSTRLEN)
+typedef sockaddr socket_addr_type;
+typedef in_addr in4_addr_type;
+# if defined(__hpux)
+// HP-UX doesn't provide ip_mreq when _XOPEN_SOURCE_EXTENDED is defined.
+struct in4_mreq_type
+{
+  struct in_addr imr_multiaddr;
+  struct in_addr imr_interface;
+};
+# else
+typedef ip_mreq in4_mreq_type;
+# endif
+typedef sockaddr_in sockaddr_in4_type;
+typedef in6_addr in6_addr_type;
+typedef ipv6_mreq in6_mreq_type;
+typedef sockaddr_in6 sockaddr_in6_type;
+typedef sockaddr_storage sockaddr_storage_type;
+typedef sockaddr_un sockaddr_un_type;
+typedef addrinfo addrinfo_type;
+typedef ::linger linger_type;
+typedef int ioctl_arg_type;
+typedef uint32_t u_long_type;
+typedef uint16_t u_short_type;
+#if defined(BOOST_ASIO_HAS_SSIZE_T)
+typedef ssize_t signed_size_type;
+#else // defined(BOOST_ASIO_HAS_SSIZE_T)
+typedef int signed_size_type;
+#endif // defined(BOOST_ASIO_HAS_SSIZE_T)
+# define BOOST_ASIO_OS_DEF(c) BOOST_ASIO_OS_DEF_##c
+# define BOOST_ASIO_OS_DEF_AF_UNSPEC AF_UNSPEC
+# define BOOST_ASIO_OS_DEF_AF_INET AF_INET
+# define BOOST_ASIO_OS_DEF_AF_INET6 AF_INET6
+# define BOOST_ASIO_OS_DEF_SOCK_STREAM SOCK_STREAM
+# define BOOST_ASIO_OS_DEF_SOCK_DGRAM SOCK_DGRAM
+# define BOOST_ASIO_OS_DEF_SOCK_RAW SOCK_RAW
+# define BOOST_ASIO_OS_DEF_SOCK_SEQPACKET SOCK_SEQPACKET
+# define BOOST_ASIO_OS_DEF_IPPROTO_IP IPPROTO_IP
+# define BOOST_ASIO_OS_DEF_IPPROTO_IPV6 IPPROTO_IPV6
+# define BOOST_ASIO_OS_DEF_IPPROTO_TCP IPPROTO_TCP
+# define BOOST_ASIO_OS_DEF_IPPROTO_UDP IPPROTO_UDP
+# define BOOST_ASIO_OS_DEF_IPPROTO_ICMP IPPROTO_ICMP
+# define BOOST_ASIO_OS_DEF_IPPROTO_ICMPV6 IPPROTO_ICMPV6
+# define BOOST_ASIO_OS_DEF_FIONBIO FIONBIO
+# define BOOST_ASIO_OS_DEF_FIONREAD FIONREAD
+# define BOOST_ASIO_OS_DEF_INADDR_ANY INADDR_ANY
+# define BOOST_ASIO_OS_DEF_MSG_OOB MSG_OOB
+# define BOOST_ASIO_OS_DEF_MSG_PEEK MSG_PEEK
+# define BOOST_ASIO_OS_DEF_MSG_DONTROUTE MSG_DONTROUTE
+# define BOOST_ASIO_OS_DEF_MSG_EOR MSG_EOR
+# define BOOST_ASIO_OS_DEF_SHUT_RD SHUT_RD
+# define BOOST_ASIO_OS_DEF_SHUT_WR SHUT_WR
+# define BOOST_ASIO_OS_DEF_SHUT_RDWR SHUT_RDWR
+# define BOOST_ASIO_OS_DEF_SOMAXCONN SOMAXCONN
+# define BOOST_ASIO_OS_DEF_SOL_SOCKET SOL_SOCKET
+# define BOOST_ASIO_OS_DEF_SO_BROADCAST SO_BROADCAST
+# define BOOST_ASIO_OS_DEF_SO_DEBUG SO_DEBUG
+# define BOOST_ASIO_OS_DEF_SO_DONTROUTE SO_DONTROUTE
+# define BOOST_ASIO_OS_DEF_SO_KEEPALIVE SO_KEEPALIVE
+# define BOOST_ASIO_OS_DEF_SO_LINGER SO_LINGER
+# define BOOST_ASIO_OS_DEF_SO_SNDBUF SO_SNDBUF
+# define BOOST_ASIO_OS_DEF_SO_RCVBUF SO_RCVBUF
+# define BOOST_ASIO_OS_DEF_SO_SNDLOWAT SO_SNDLOWAT
+# define BOOST_ASIO_OS_DEF_SO_RCVLOWAT SO_RCVLOWAT
+# define BOOST_ASIO_OS_DEF_SO_REUSEADDR SO_REUSEADDR
+# define BOOST_ASIO_OS_DEF_TCP_NODELAY TCP_NODELAY
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_IF IP_MULTICAST_IF
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_TTL IP_MULTICAST_TTL
+# define BOOST_ASIO_OS_DEF_IP_MULTICAST_LOOP IP_MULTICAST_LOOP
+# define BOOST_ASIO_OS_DEF_IP_ADD_MEMBERSHIP IP_ADD_MEMBERSHIP
+# define BOOST_ASIO_OS_DEF_IP_DROP_MEMBERSHIP IP_DROP_MEMBERSHIP
+# define BOOST_ASIO_OS_DEF_IP_TTL IP_TTL
+# define BOOST_ASIO_OS_DEF_IPV6_UNICAST_HOPS IPV6_UNICAST_HOPS
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_IF IPV6_MULTICAST_IF
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_HOPS IPV6_MULTICAST_HOPS
+# define BOOST_ASIO_OS_DEF_IPV6_MULTICAST_LOOP IPV6_MULTICAST_LOOP
+# define BOOST_ASIO_OS_DEF_IPV6_JOIN_GROUP IPV6_JOIN_GROUP
+# define BOOST_ASIO_OS_DEF_IPV6_LEAVE_GROUP IPV6_LEAVE_GROUP
+# define BOOST_ASIO_OS_DEF_AI_CANONNAME AI_CANONNAME
+# define BOOST_ASIO_OS_DEF_AI_PASSIVE AI_PASSIVE
+# define BOOST_ASIO_OS_DEF_AI_NUMERICHOST AI_NUMERICHOST
+# if defined(AI_NUMERICSERV)
+#  define BOOST_ASIO_OS_DEF_AI_NUMERICSERV AI_NUMERICSERV
+# else
+#  define BOOST_ASIO_OS_DEF_AI_NUMERICSERV 0
+# endif
+// Note: QNX Neutrino 6.3 defines AI_V4MAPPED, AI_ALL and AI_ADDRCONFIG but
+// does not implement them. Therefore they are specifically excluded here.
+# if defined(AI_V4MAPPED) && !defined(__QNXNTO__)
+#  define BOOST_ASIO_OS_DEF_AI_V4MAPPED AI_V4MAPPED
+# else
+#  define BOOST_ASIO_OS_DEF_AI_V4MAPPED 0
+# endif
+# if defined(AI_ALL) && !defined(__QNXNTO__)
+#  define BOOST_ASIO_OS_DEF_AI_ALL AI_ALL
+# else
+#  define BOOST_ASIO_OS_DEF_AI_ALL 0
+# endif
+# if defined(AI_ADDRCONFIG) && !defined(__QNXNTO__)
+#  define BOOST_ASIO_OS_DEF_AI_ADDRCONFIG AI_ADDRCONFIG
+# else
+#  define BOOST_ASIO_OS_DEF_AI_ADDRCONFIG 0
+# endif
+# if defined(IOV_MAX)
+const int max_iov_len = IOV_MAX;
+# else
+// POSIX platforms are not required to define IOV_MAX.
+const int max_iov_len = 16;
+# endif
+#endif
+const int custom_socket_option_level = 0xA5100000;
+const int enable_connection_aborted_option = 1;
+const int always_fail_option = 2;
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_SOCKET_TYPES_HPP
diff --git a/ext/patches/boost/asio/detail/solaris_fenced_block.hpp b/ext/patches/boost/asio/detail/solaris_fenced_block.hpp
new file mode 100644
index 0000000..89a850f
--- /dev/null
+++ b/ext/patches/boost/asio/detail/solaris_fenced_block.hpp
@@ -0,0 +1,63 @@
+//
+// detail/solaris_fenced_block.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_SOLARIS_FENCED_BLOCK_HPP
+#define BOOST_ASIO_DETAIL_SOLARIS_FENCED_BLOCK_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(__sun)
+
+#include <atomic.h>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class solaris_fenced_block
+  : private noncopyable
+{
+public:
+  enum half_t { half };
+  enum full_t { full };
+
+  // Constructor for a half fenced block.
+  explicit solaris_fenced_block(half_t)
+  {
+  }
+
+  // Constructor for a full fenced block.
+  explicit solaris_fenced_block(full_t)
+  {
+    membar_consumer();
+  }
+
+  // Destructor.
+  ~solaris_fenced_block()
+  {
+    membar_producer();
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(__sun)
+
+#endif // BOOST_ASIO_DETAIL_SOLARIS_FENCED_BLOCK_HPP
diff --git a/ext/patches/boost/asio/detail/static_mutex.hpp b/ext/patches/boost/asio/detail/static_mutex.hpp
new file mode 100644
index 0000000..3bbd198
--- /dev/null
+++ b/ext/patches/boost/asio/detail/static_mutex.hpp
@@ -0,0 +1,54 @@
+//
+// detail/static_mutex.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_STATIC_MUTEX_HPP
+#define BOOST_ASIO_DETAIL_STATIC_MUTEX_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_THREADS)
+# include <boost/asio/detail/null_static_mutex.hpp>
+#elif defined(BOOST_ASIO_WINDOWS)
+# include <boost/asio/detail/win_static_mutex.hpp>
+#elif defined(BOOST_ASIO_HAS_PTHREADS)
+# include <boost/asio/detail/posix_static_mutex.hpp>
+#elif defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+# include <boost/asio/detail/std_static_mutex.hpp>
+#else
+# error Only Windows and POSIX are supported!
+#endif
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if !defined(BOOST_ASIO_HAS_THREADS)
+typedef null_static_mutex static_mutex;
+# define BOOST_ASIO_STATIC_MUTEX_INIT BOOST_ASIO_NULL_STATIC_MUTEX_INIT
+#elif defined(BOOST_ASIO_WINDOWS)
+typedef win_static_mutex static_mutex;
+# define BOOST_ASIO_STATIC_MUTEX_INIT BOOST_ASIO_WIN_STATIC_MUTEX_INIT
+#elif defined(BOOST_ASIO_HAS_PTHREADS)
+typedef posix_static_mutex static_mutex;
+# define BOOST_ASIO_STATIC_MUTEX_INIT BOOST_ASIO_POSIX_STATIC_MUTEX_INIT
+#elif defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+typedef std_static_mutex static_mutex;
+# define BOOST_ASIO_STATIC_MUTEX_INIT BOOST_ASIO_STD_STATIC_MUTEX_INIT
+#endif
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_STATIC_MUTEX_HPP
diff --git a/ext/patches/boost/asio/detail/std_event.hpp b/ext/patches/boost/asio/detail/std_event.hpp
new file mode 100644
index 0000000..4b622af
--- /dev/null
+++ b/ext/patches/boost/asio/detail/std_event.hpp
@@ -0,0 +1,178 @@
+//
+// detail/std_event.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_STD_EVENT_HPP
+#define BOOST_ASIO_DETAIL_STD_EVENT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+
+#include <chrono>
+#include <condition_variable>
+#include <boost/asio/detail/assert.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class std_event
+  : private noncopyable
+{
+public:
+  // Constructor.
+  std_event()
+    : state_(0)
+  {
+  }
+
+  // Destructor.
+  ~std_event()
+  {
+  }
+
+  // Signal the event. (Retained for backward compatibility.)
+  template <typename Lock>
+  void signal(Lock& lock)
+  {
+    this->signal_all(lock);
+  }
+
+  // Signal all waiters.
+  template <typename Lock>
+  void signal_all(Lock& lock)
+  {
+    BOOST_ASIO_ASSERT(lock.locked());
+    (void)lock;
+    state_ |= 1;
+    cond_.notify_all();
+  }
+
+  // Unlock the mutex and signal one waiter.
+  template <typename Lock>
+  void unlock_and_signal_one(Lock& lock)
+  {
+    BOOST_ASIO_ASSERT(lock.locked());
+    state_ |= 1;
+    bool have_waiters = (state_ > 1);
+    lock.unlock();
+    if (have_waiters)
+      cond_.notify_one();
+  }
+
+  // If there's a waiter, unlock the mutex and signal it.
+  template <typename Lock>
+  bool maybe_unlock_and_signal_one(Lock& lock)
+  {
+    BOOST_ASIO_ASSERT(lock.locked());
+    state_ |= 1;
+    if (state_ > 1)
+    {
+      lock.unlock();
+      cond_.notify_one();
+      return true;
+    }
+    return false;
+  }
+
+  // Reset the event.
+  template <typename Lock>
+  void clear(Lock& lock)
+  {
+    BOOST_ASIO_ASSERT(lock.locked());
+    (void)lock;
+    state_ &= ~std::size_t(1);
+  }
+
+  // Wait for the event to become signalled.
+  template <typename Lock>
+  void wait(Lock& lock)
+  {
+    BOOST_ASIO_ASSERT(lock.locked());
+    unique_lock_adapter u_lock(lock);
+    while ((state_ & 1) == 0)
+    {
+      waiter w(state_);
+      cond_.wait(u_lock.unique_lock_);
+    }
+  }
+
+  // Timed wait for the event to become signalled.
+  template <typename Lock>
+  bool wait_for_usec(Lock& lock, long usec)
+  {
+    BOOST_ASIO_ASSERT(lock.locked());
+    unique_lock_adapter u_lock(lock);
+    if ((state_ & 1) == 0)
+    {
+      waiter w(state_);
+      cond_.wait_for(u_lock.unique_lock_, std::chrono::microseconds(usec));
+    }
+    return (state_ & 1) != 0;
+  }
+
+private:
+  // Helper class to temporarily adapt a scoped_lock into a unique_lock so that
+  // it can be passed to std::condition_variable::wait().
+  struct unique_lock_adapter
+  {
+    template <typename Lock>
+    explicit unique_lock_adapter(Lock& lock)
+      : unique_lock_(lock.mutex().mutex_, std::adopt_lock)
+    {
+    }
+
+    ~unique_lock_adapter()
+    {
+      unique_lock_.release();
+    }
+
+    std::unique_lock<std::mutex> unique_lock_;
+  };
+
+  // Helper to increment and decrement the state to track outstanding waiters.
+  class waiter
+  {
+  public:
+    explicit waiter(std::size_t& state)
+      : state_(state)
+    {
+      state_ += 2;
+    }
+
+    ~waiter()
+    {
+      state_ -= 2;
+    }
+
+  private:
+    std::size_t& state_;
+  };
+
+  std::condition_variable cond_;
+  std::size_t state_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+
+#endif // BOOST_ASIO_DETAIL_STD_EVENT_HPP
diff --git a/ext/patches/boost/asio/detail/std_mutex.hpp b/ext/patches/boost/asio/detail/std_mutex.hpp
new file mode 100644
index 0000000..e806aa0
--- /dev/null
+++ b/ext/patches/boost/asio/detail/std_mutex.hpp
@@ -0,0 +1,75 @@
+//
+// detail/std_mutex.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_STD_MUTEX_HPP
+#define BOOST_ASIO_DETAIL_STD_MUTEX_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+
+#include <mutex>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/scoped_lock.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class std_event;
+
+class std_mutex
+  : private noncopyable
+{
+public:
+  typedef boost::asio::detail::scoped_lock<std_mutex> scoped_lock;
+
+  // Constructor.
+  std_mutex()
+  {
+  }
+
+  // Destructor.
+  ~std_mutex()
+  {
+  }
+
+  // Lock the mutex.
+  void lock()
+  {
+    mutex_.lock();
+  }
+
+  // Unlock the mutex.
+  void unlock()
+  {
+    mutex_.unlock();
+  }
+
+private:
+  friend class std_event;
+  std::mutex mutex_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+
+#endif // BOOST_ASIO_DETAIL_STD_MUTEX_HPP
diff --git a/ext/patches/boost/asio/detail/std_static_mutex.hpp b/ext/patches/boost/asio/detail/std_static_mutex.hpp
new file mode 100644
index 0000000..5c4d654
--- /dev/null
+++ b/ext/patches/boost/asio/detail/std_static_mutex.hpp
@@ -0,0 +1,83 @@
+//
+// detail/std_static_mutex.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_STD_STATIC_MUTEX_HPP
+#define BOOST_ASIO_DETAIL_STD_STATIC_MUTEX_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+
+#include <mutex>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/scoped_lock.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class std_event;
+
+class std_static_mutex
+  : private noncopyable
+{
+public:
+  typedef boost::asio::detail::scoped_lock<std_static_mutex> scoped_lock;
+
+  // Constructor.
+  std_static_mutex(int)
+  {
+  }
+
+  // Destructor.
+  ~std_static_mutex()
+  {
+  }
+
+  // Initialise the mutex.
+  void init()
+  {
+    // Nothing to do.
+  }
+
+  // Lock the mutex.
+  void lock()
+  {
+    mutex_.lock();
+  }
+
+  // Unlock the mutex.
+  void unlock()
+  {
+    mutex_.unlock();
+  }
+
+private:
+  friend class std_event;
+  std::mutex mutex_;
+};
+
+#define BOOST_ASIO_STD_STATIC_MUTEX_INIT 0
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
+
+#endif // BOOST_ASIO_DETAIL_STD_STATIC_MUTEX_HPP
diff --git a/ext/patches/boost/asio/detail/std_thread.hpp b/ext/patches/boost/asio/detail/std_thread.hpp
new file mode 100644
index 0000000..61587e2
--- /dev/null
+++ b/ext/patches/boost/asio/detail/std_thread.hpp
@@ -0,0 +1,67 @@
+//
+// detail/std_thread.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_STD_THREAD_HPP
+#define BOOST_ASIO_DETAIL_STD_THREAD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_STD_THREAD)
+
+#include <thread>
+#include <boost/asio/detail/noncopyable.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class std_thread
+  : private noncopyable
+{
+public:
+  // Constructor.
+  template <typename Function>
+  std_thread(Function f, unsigned int = 0)
+    : thread_(f)
+  {
+  }
+
+  // Destructor.
+  ~std_thread()
+  {
+    join();
+  }
+
+  // Wait for the thread to exit.
+  void join()
+  {
+    if (thread_.joinable())
+      thread_.join();
+  }
+
+private:
+  std::thread thread_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_STD_THREAD)
+
+#endif // BOOST_ASIO_DETAIL_STD_THREAD_HPP
diff --git a/ext/patches/boost/asio/detail/strand_service.hpp b/ext/patches/boost/asio/detail/strand_service.hpp
new file mode 100644
index 0000000..d3046bb
--- /dev/null
+++ b/ext/patches/boost/asio/detail/strand_service.hpp
@@ -0,0 +1,144 @@
+//
+// detail/strand_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_STRAND_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_STRAND_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/detail/mutex.hpp>
+#include <boost/asio/detail/op_queue.hpp>
+#include <boost/asio/detail/operation.hpp>
+#include <boost/asio/detail/scoped_ptr.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+// Default service implementation for a strand.
+class strand_service
+  : public boost::asio::detail::service_base<strand_service>
+{
+private:
+  // Helper class to re-post the strand on exit.
+  struct on_do_complete_exit;
+
+  // Helper class to re-post the strand on exit.
+  struct on_dispatch_exit;
+
+public:
+
+  // The underlying implementation of a strand.
+  class strand_impl
+    : public operation
+  {
+  public:
+    strand_impl();
+
+  private:
+    // Only this service will have access to the internal values.
+    friend class strand_service;
+    friend struct on_do_complete_exit;
+    friend struct on_dispatch_exit;
+
+    // Mutex to protect access to internal data.
+    boost::asio::detail::mutex mutex_;
+
+    // Indicates whether the strand is currently "locked" by a handler. This
+    // means that there is a handler upcall in progress, or that the strand
+    // itself has been scheduled in order to invoke some pending handlers.
+    bool locked_;
+
+    // The handlers that are waiting on the strand but should not be run until
+    // after the next time the strand is scheduled. This queue must only be
+    // modified while the mutex is locked.
+    op_queue<operation> waiting_queue_;
+
+    // The handlers that are ready to be run. Logically speaking, these are the
+    // handlers that hold the strand's lock. The ready queue is only modified
+    // from within the strand and so may be accessed without locking the mutex.
+    op_queue<operation> ready_queue_;
+  };
+
+  typedef strand_impl* implementation_type;
+
+  // Construct a new strand service for the specified io_service.
+  BOOST_ASIO_DECL explicit strand_service(boost::asio::io_service& io_service);
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Construct a new strand implementation.
+  BOOST_ASIO_DECL void construct(implementation_type& impl);
+
+  // Request the io_service to invoke the given handler.
+  template <typename Handler>
+  void dispatch(implementation_type& impl, Handler& handler);
+
+  // Request the io_service to invoke the given handler and return immediately.
+  template <typename Handler>
+  void post(implementation_type& impl, Handler& handler);
+
+  // Determine whether the strand is running in the current thread.
+  BOOST_ASIO_DECL bool running_in_this_thread(
+      const implementation_type& impl) const;
+
+private:
+  // Helper function to dispatch a handler. Returns true if the handler should
+  // be dispatched immediately.
+  BOOST_ASIO_DECL bool do_dispatch(implementation_type& impl, operation* op);
+
+  // Helper fiunction to post a handler.
+  BOOST_ASIO_DECL void do_post(implementation_type& impl,
+      operation* op, bool is_continuation);
+
+  BOOST_ASIO_DECL static void do_complete(io_service_impl* owner,
+      operation* base, const boost::system::error_code& ec,
+      std::size_t bytes_transferred);
+
+  // The io_service implementation used to post completions.
+  io_service_impl& io_service_;
+
+  // Mutex to protect access to the array of implementations.
+  boost::asio::detail::mutex mutex_;
+
+  // Number of implementations shared between all strand objects.
+#if defined(BOOST_ASIO_STRAND_IMPLEMENTATIONS)
+  enum { num_implementations = BOOST_ASIO_STRAND_IMPLEMENTATIONS };
+#else // defined(BOOST_ASIO_STRAND_IMPLEMENTATIONS)
+  enum { num_implementations = 193 };
+#endif // defined(BOOST_ASIO_STRAND_IMPLEMENTATIONS)
+
+  // Pool of implementations.
+  scoped_ptr<strand_impl> implementations_[num_implementations];
+
+  // Extra value used when hashing to prevent recycled memory locations from
+  // getting the same strand implementation.
+  std::size_t salt_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/detail/impl/strand_service.hpp>
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/strand_service.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_DETAIL_STRAND_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/task_io_service.hpp b/ext/patches/boost/asio/detail/task_io_service.hpp
new file mode 100644
index 0000000..42b4c40
--- /dev/null
+++ b/ext/patches/boost/asio/detail/task_io_service.hpp
@@ -0,0 +1,203 @@
+//
+// detail/task_io_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_TASK_IO_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_TASK_IO_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/system/error_code.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/detail/atomic_count.hpp>
+#include <boost/asio/detail/call_stack.hpp>
+#include <boost/asio/detail/event.hpp>
+#include <boost/asio/detail/mutex.hpp>
+#include <boost/asio/detail/op_queue.hpp>
+#include <boost/asio/detail/reactor_fwd.hpp>
+#include <boost/asio/detail/task_io_service_operation.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+struct task_io_service_thread_info;
+
+class task_io_service
+  : public boost::asio::detail::service_base<task_io_service>
+{
+public:
+  typedef task_io_service_operation operation;
+
+  // Constructor. Specifies the number of concurrent threads that are likely to
+  // run the io_service. If set to 1 certain optimisation are performed.
+  BOOST_ASIO_DECL task_io_service(boost::asio::io_service& io_service,
+      std::size_t concurrency_hint = 0);
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Initialise the task, if required.
+  BOOST_ASIO_DECL void init_task();
+
+  // Run the event loop until interrupted or no more work.
+  BOOST_ASIO_DECL std::size_t run(boost::system::error_code& ec);
+
+  // Run until interrupted or one operation is performed.
+  BOOST_ASIO_DECL std::size_t run_one(boost::system::error_code& ec);
+
+  // Poll for operations without blocking.
+  BOOST_ASIO_DECL std::size_t poll(boost::system::error_code& ec);
+
+  // Poll for one operation without blocking.
+  BOOST_ASIO_DECL std::size_t poll_one(boost::system::error_code& ec);
+
+  // Interrupt the event processing loop.
+  BOOST_ASIO_DECL void stop();
+
+  // Determine whether the io_service is stopped.
+  BOOST_ASIO_DECL bool stopped() const;
+
+  // Reset in preparation for a subsequent run invocation.
+  BOOST_ASIO_DECL void reset();
+
+  // Notify that some work has started.
+  void work_started()
+  {
+    ++outstanding_work_;
+  }
+
+  // Notify that some work has finished.
+  void work_finished()
+  {
+    if (--outstanding_work_ == 0)
+      stop();
+  }
+
+  // Return whether a handler can be dispatched immediately.
+  bool can_dispatch()
+  {
+    return thread_call_stack::contains(this) != 0;
+  }
+
+  // Request invocation of the given handler.
+  template <typename Handler>
+  void dispatch(Handler& handler);
+
+  // Request invocation of the given handler and return immediately.
+  template <typename Handler>
+  void post(Handler& handler);
+
+  // Request invocation of the given operation and return immediately. Assumes
+  // that work_started() has not yet been called for the operation.
+  BOOST_ASIO_DECL void post_immediate_completion(
+      operation* op, bool is_continuation);
+
+  // Request invocation of the given operation and return immediately. Assumes
+  // that work_started() was previously called for the operation.
+  BOOST_ASIO_DECL void post_deferred_completion(operation* op);
+
+  // Request invocation of the given operations and return immediately. Assumes
+  // that work_started() was previously called for each operation.
+  BOOST_ASIO_DECL void post_deferred_completions(op_queue<operation>& ops);
+
+  // Process unfinished operations as part of a shutdown_service operation.
+  // Assumes that work_started() was previously called for the operations.
+  BOOST_ASIO_DECL void abandon_operations(op_queue<operation>& ops);
+
+private:
+  // Structure containing thread-specific data.
+  typedef task_io_service_thread_info thread_info;
+
+  // Enqueue the given operation following a failed attempt to dispatch the
+  // operation for immediate invocation.
+  BOOST_ASIO_DECL void do_dispatch(operation* op);
+
+  // Run at most one operation. May block.
+  BOOST_ASIO_DECL std::size_t do_run_one(mutex::scoped_lock& lock,
+      thread_info& this_thread, const boost::system::error_code& ec);
+
+  // Poll for at most one operation.
+  BOOST_ASIO_DECL std::size_t do_poll_one(mutex::scoped_lock& lock,
+      thread_info& this_thread, const boost::system::error_code& ec);
+
+  // Stop the task and all idle threads.
+  BOOST_ASIO_DECL void stop_all_threads(mutex::scoped_lock& lock);
+
+  // Wake a single idle thread, or the task, and always unlock the mutex.
+  BOOST_ASIO_DECL void wake_one_thread_and_unlock(
+      mutex::scoped_lock& lock);
+
+  // Helper class to perform task-related operations on block exit.
+  struct task_cleanup;
+  friend struct task_cleanup;
+
+  // Helper class to call work-related operations on block exit.
+  struct work_cleanup;
+  friend struct work_cleanup;
+
+  // Whether to optimise for single-threaded use cases.
+  const bool one_thread_;
+
+  // Mutex to protect access to internal data.
+  mutable mutex mutex_;
+
+  // Event to wake up blocked threads.
+  event wakeup_event_;
+
+  // The task to be run by this service.
+  reactor* task_;
+
+  // Operation object to represent the position of the task in the queue.
+  struct task_operation : operation
+  {
+    task_operation() : operation(0) {}
+  } task_operation_;
+
+  // Whether the task has been interrupted.
+  bool task_interrupted_;
+
+  // The count of unfinished work.
+  atomic_count outstanding_work_;
+
+  // The queue of handlers that are ready to be delivered.
+  op_queue<operation> op_queue_;
+
+  // Flag to indicate that the dispatcher has been stopped.
+  bool stopped_;
+
+  // Flag to indicate that the dispatcher has been shut down.
+  bool shutdown_;
+
+  // Per-thread call stack to track the state of each thread in the io_service.
+  typedef call_stack<task_io_service, thread_info> thread_call_stack;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/detail/impl/task_io_service.hpp>
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/task_io_service.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // !defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_TASK_IO_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/task_io_service_operation.hpp b/ext/patches/boost/asio/detail/task_io_service_operation.hpp
new file mode 100644
index 0000000..f04dff0
--- /dev/null
+++ b/ext/patches/boost/asio/detail/task_io_service_operation.hpp
@@ -0,0 +1,78 @@
+//
+// detail/task_io_service_operation.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_TASK_IO_SERVICE_OPERATION_HPP
+#define BOOST_ASIO_DETAIL_TASK_IO_SERVICE_OPERATION_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/system/error_code.hpp>
+#include <boost/asio/detail/handler_tracking.hpp>
+#include <boost/asio/detail/op_queue.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class task_io_service;
+
+// Base class for all operations. A function pointer is used instead of virtual
+// functions to avoid the associated overhead.
+class task_io_service_operation BOOST_ASIO_INHERIT_TRACKED_HANDLER
+{
+public:
+  void complete(task_io_service& owner,
+      const boost::system::error_code& ec, std::size_t bytes_transferred)
+  {
+    func_(&owner, this, ec, bytes_transferred);
+  }
+
+  void destroy()
+  {
+    func_(0, this, boost::system::error_code(), 0);
+  }
+
+protected:
+  typedef void (*func_type)(task_io_service*,
+      task_io_service_operation*,
+      const boost::system::error_code&, std::size_t);
+
+  task_io_service_operation(func_type func)
+    : next_(0),
+      func_(func),
+      task_result_(0)
+  {
+  }
+
+  // Prevents deletion through this type.
+  ~task_io_service_operation()
+  {
+  }
+
+private:
+  friend class op_queue_access;
+  task_io_service_operation* next_;
+  func_type func_;
+protected:
+  friend class task_io_service;
+  unsigned int task_result_; // Passed into bytes transferred.
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_TASK_IO_SERVICE_OPERATION_HPP
diff --git a/ext/patches/boost/asio/detail/task_io_service_thread_info.hpp b/ext/patches/boost/asio/detail/task_io_service_thread_info.hpp
new file mode 100644
index 0000000..ff59fbe
--- /dev/null
+++ b/ext/patches/boost/asio/detail/task_io_service_thread_info.hpp
@@ -0,0 +1,42 @@
+//
+// detail/task_io_service_thread_info.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_TASK_IO_SERVICE_THREAD_INFO_HPP
+#define BOOST_ASIO_DETAIL_TASK_IO_SERVICE_THREAD_INFO_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/op_queue.hpp>
+#include <boost/asio/detail/thread_info_base.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class task_io_service;
+class task_io_service_operation;
+
+struct task_io_service_thread_info : public thread_info_base
+{
+  op_queue<task_io_service_operation> private_op_queue;
+  long private_outstanding_work;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_TASK_IO_SERVICE_THREAD_INFO_HPP
diff --git a/ext/patches/boost/asio/detail/thread.hpp b/ext/patches/boost/asio/detail/thread.hpp
new file mode 100644
index 0000000..df4df6b
--- /dev/null
+++ b/ext/patches/boost/asio/detail/thread.hpp
@@ -0,0 +1,58 @@
+//
+// detail/thread.hpp
+// ~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_THREAD_HPP
+#define BOOST_ASIO_DETAIL_THREAD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_THREADS)
+# include <boost/asio/detail/null_thread.hpp>
+#elif defined(BOOST_ASIO_WINDOWS)
+# if defined(UNDER_CE)
+#  include <boost/asio/detail/wince_thread.hpp>
+# else
+#  include <boost/asio/detail/win_thread.hpp>
+# endif
+#elif defined(BOOST_ASIO_HAS_PTHREADS)
+# include <boost/asio/detail/posix_thread.hpp>
+#elif defined(BOOST_ASIO_HAS_STD_THREAD)
+# include <boost/asio/detail/std_thread.hpp>
+#else
+# error Only Windows, POSIX and std::thread are supported!
+#endif
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if !defined(BOOST_ASIO_HAS_THREADS)
+typedef null_thread thread;
+#elif defined(BOOST_ASIO_WINDOWS)
+# if defined(UNDER_CE)
+typedef wince_thread thread;
+# else
+typedef win_thread thread;
+# endif
+#elif defined(BOOST_ASIO_HAS_PTHREADS)
+typedef posix_thread thread;
+#elif defined(BOOST_ASIO_HAS_STD_THREAD)
+typedef std_thread thread;
+#endif
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_THREAD_HPP
diff --git a/ext/patches/boost/asio/detail/thread_info_base.hpp b/ext/patches/boost/asio/detail/thread_info_base.hpp
new file mode 100644
index 0000000..558d749
--- /dev/null
+++ b/ext/patches/boost/asio/detail/thread_info_base.hpp
@@ -0,0 +1,93 @@
+//
+// detail/thread_info_base.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_THREAD_INFO_BASE_HPP
+#define BOOST_ASIO_DETAIL_THREAD_INFO_BASE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <climits>
+#include <cstddef>
+#include <boost/asio/detail/noncopyable.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class thread_info_base
+  : private noncopyable
+{
+public:
+  thread_info_base()
+    : reusable_memory_(0)
+  {
+  }
+
+  ~thread_info_base()
+  {
+    if (reusable_memory_)
+      ::operator delete(reusable_memory_);
+  }
+
+  static void* allocate(thread_info_base* this_thread, std::size_t size)
+  {
+    if (this_thread && this_thread->reusable_memory_)
+    {
+      void* const pointer = this_thread->reusable_memory_;
+      this_thread->reusable_memory_ = 0;
+
+      unsigned char* const mem = static_cast<unsigned char*>(pointer);
+      if (static_cast<std::size_t>(mem[0]) >= size)
+      {
+        mem[size] = mem[0];
+        return pointer;
+      }
+
+      ::operator delete(pointer);
+    }
+
+    void* const pointer = ::operator new(size + 1);
+    unsigned char* const mem = static_cast<unsigned char*>(pointer);
+    mem[size] = (size <= UCHAR_MAX) ? static_cast<unsigned char>(size) : 0;
+    return pointer;
+  }
+
+  static void deallocate(thread_info_base* this_thread,
+      void* pointer, std::size_t size)
+  {
+    if (size <= UCHAR_MAX)
+    {
+      if (this_thread && this_thread->reusable_memory_ == 0)
+      {
+        unsigned char* const mem = static_cast<unsigned char*>(pointer);
+        mem[0] = mem[size];
+        this_thread->reusable_memory_ = pointer;
+        return;
+      }
+    }
+
+    ::operator delete(pointer);
+  }
+
+private:
+  void* reusable_memory_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_THREAD_INFO_BASE_HPP
diff --git a/ext/patches/boost/asio/detail/throw_error.hpp b/ext/patches/boost/asio/detail/throw_error.hpp
new file mode 100644
index 0000000..9cd37d7
--- /dev/null
+++ b/ext/patches/boost/asio/detail/throw_error.hpp
@@ -0,0 +1,55 @@
+//
+// detail/throw_error.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_THROW_ERROR_HPP
+#define BOOST_ASIO_DETAIL_THROW_ERROR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/system/error_code.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+BOOST_ASIO_DECL void do_throw_error(const boost::system::error_code& err);
+
+BOOST_ASIO_DECL void do_throw_error(const boost::system::error_code& err,
+    const char* location);
+
+inline void throw_error(const boost::system::error_code& err)
+{
+  if (err)
+    do_throw_error(err);
+}
+
+inline void throw_error(const boost::system::error_code& err,
+    const char* location)
+{
+  if (err)
+    do_throw_error(err, location);
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/throw_error.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_DETAIL_THROW_ERROR_HPP
diff --git a/ext/patches/boost/asio/detail/throw_exception.hpp b/ext/patches/boost/asio/detail/throw_exception.hpp
new file mode 100644
index 0000000..92e97e3
--- /dev/null
+++ b/ext/patches/boost/asio/detail/throw_exception.hpp
@@ -0,0 +1,53 @@
+//
+// detail/throw_exception.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_THROW_EXCEPTION_HPP
+#define BOOST_ASIO_DETAIL_THROW_EXCEPTION_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_BOOST_THROW_EXCEPTION)
+# include <boost/throw_exception.hpp>
+#endif // defined(BOOST_ASIO_BOOST_THROW_EXCEPTION)
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if defined(BOOST_ASIO_HAS_BOOST_THROW_EXCEPTION)
+using boost::throw_exception;
+#else // defined(BOOST_ASIO_HAS_BOOST_THROW_EXCEPTION)
+
+// Declare the throw_exception function for all targets.
+template <typename Exception>
+void throw_exception(const Exception& e);
+
+// Only define the throw_exception function when exceptions are enabled.
+// Otherwise, it is up to the application to provide a definition of this
+// function.
+# if !defined(BOOST_ASIO_NO_EXCEPTIONS)
+template <typename Exception>
+void throw_exception(const Exception& e)
+{
+  throw e;
+}
+# endif // !defined(BOOST_ASIO_NO_EXCEPTIONS)
+
+#endif // defined(BOOST_ASIO_HAS_BOOST_THROW_EXCEPTION)
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_THROW_EXCEPTION_HPP
diff --git a/ext/patches/boost/asio/detail/timer_queue.hpp b/ext/patches/boost/asio/detail/timer_queue.hpp
new file mode 100644
index 0000000..249a434
--- /dev/null
+++ b/ext/patches/boost/asio/detail/timer_queue.hpp
@@ -0,0 +1,334 @@
+//
+// detail/timer_queue.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_TIMER_QUEUE_HPP
+#define BOOST_ASIO_DETAIL_TIMER_QUEUE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <vector>
+#include <boost/asio/detail/cstdint.hpp>
+#include <boost/asio/detail/date_time_fwd.hpp>
+#include <boost/asio/detail/limits.hpp>
+#include <boost/asio/detail/op_queue.hpp>
+#include <boost/asio/detail/timer_queue_base.hpp>
+#include <boost/asio/detail/wait_op.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Time_Traits>
+class timer_queue
+  : public timer_queue_base
+{
+public:
+  // The time type.
+  typedef typename Time_Traits::time_type time_type;
+
+  // The duration type.
+  typedef typename Time_Traits::duration_type duration_type;
+
+  // Per-timer data.
+  class per_timer_data
+  {
+  public:
+    per_timer_data() : next_(0), prev_(0) {}
+
+  private:
+    friend class timer_queue;
+
+    // The operations waiting on the timer.
+    op_queue<wait_op> op_queue_;
+
+    // The index of the timer in the heap.
+    std::size_t heap_index_;
+
+    // Pointers to adjacent timers in a linked list.
+    per_timer_data* next_;
+    per_timer_data* prev_;
+  };
+
+  // Constructor.
+  timer_queue()
+    : timers_(),
+      heap_()
+  {
+  }
+
+  // Add a new timer to the queue. Returns true if this is the timer that is
+  // earliest in the queue, in which case the reactor's event demultiplexing
+  // function call may need to be interrupted and restarted.
+  bool enqueue_timer(const time_type& time, per_timer_data& timer, wait_op* op)
+  {
+    // Enqueue the timer object.
+    if (timer.prev_ == 0 && &timer != timers_)
+    {
+      if (this->is_positive_infinity(time))
+      {
+        // No heap entry is required for timers that never expire.
+        timer.heap_index_ = (std::numeric_limits<std::size_t>::max)();
+      }
+      else
+      {
+        // Put the new timer at the correct position in the heap. This is done
+        // first since push_back() can throw due to allocation failure.
+        timer.heap_index_ = heap_.size();
+        heap_entry entry = { time, &timer };
+        heap_.push_back(entry);
+        up_heap(heap_.size() - 1);
+      }
+
+      // Insert the new timer into the linked list of active timers.
+      timer.next_ = timers_;
+      timer.prev_ = 0;
+      if (timers_)
+        timers_->prev_ = &timer;
+      timers_ = &timer;
+    }
+
+    // Enqueue the individual timer operation.
+    timer.op_queue_.push(op);
+
+    // Interrupt reactor only if newly added timer is first to expire.
+    return timer.heap_index_ == 0 && timer.op_queue_.front() == op;
+  }
+
+  // Whether there are no timers in the queue.
+  virtual bool empty() const
+  {
+    return timers_ == 0;
+  }
+
+  // Get the time for the timer that is earliest in the queue.
+  virtual long wait_duration_msec(long max_duration) const
+  {
+    if (heap_.empty())
+      return max_duration;
+
+    return this->to_msec(
+        Time_Traits::to_posix_duration(
+          Time_Traits::subtract(heap_[0].time_, Time_Traits::now())),
+        max_duration);
+  }
+
+  // Get the time for the timer that is earliest in the queue.
+  virtual long wait_duration_usec(long max_duration) const
+  {
+    if (heap_.empty())
+      return max_duration;
+
+    return this->to_usec(
+        Time_Traits::to_posix_duration(
+          Time_Traits::subtract(heap_[0].time_, Time_Traits::now())),
+        max_duration);
+  }
+
+  // Dequeue all timers not later than the current time.
+  virtual void get_ready_timers(op_queue<operation>& ops)
+  {
+    if (!heap_.empty())
+    {
+      const time_type now = Time_Traits::now();
+      while (!heap_.empty() && !Time_Traits::less_than(now, heap_[0].time_))
+      {
+        per_timer_data* timer = heap_[0].timer_;
+        ops.push(timer->op_queue_);
+        remove_timer(*timer);
+      }
+    }
+  }
+
+  // Dequeue all timers.
+  virtual void get_all_timers(op_queue<operation>& ops)
+  {
+    while (timers_)
+    {
+      per_timer_data* timer = timers_;
+      timers_ = timers_->next_;
+      ops.push(timer->op_queue_);
+      timer->next_ = 0;
+      timer->prev_ = 0;
+    }
+
+    heap_.clear();
+  }
+
+  // Cancel and dequeue operations for the given timer.
+  std::size_t cancel_timer(per_timer_data& timer, op_queue<operation>& ops,
+      std::size_t max_cancelled = (std::numeric_limits<std::size_t>::max)())
+  {
+    std::size_t num_cancelled = 0;
+    if (timer.prev_ != 0 || &timer == timers_)
+    {
+      while (wait_op* op = (num_cancelled != max_cancelled)
+          ? timer.op_queue_.front() : 0)
+      {
+        op->ec_ = boost::asio::error::operation_aborted;
+        timer.op_queue_.pop();
+        ops.push(op);
+        ++num_cancelled;
+      }
+      if (timer.op_queue_.empty())
+        remove_timer(timer);
+    }
+    return num_cancelled;
+  }
+
+private:
+  // Move the item at the given index up the heap to its correct position.
+  void up_heap(std::size_t index)
+  {
+    std::size_t parent = (index - 1) / 2;
+    while (index > 0
+        && Time_Traits::less_than(heap_[index].time_, heap_[parent].time_))
+    {
+      swap_heap(index, parent);
+      index = parent;
+      parent = (index - 1) / 2;
+    }
+  }
+
+  // Move the item at the given index down the heap to its correct position.
+  void down_heap(std::size_t index)
+  {
+    std::size_t child = index * 2 + 1;
+    while (child < heap_.size())
+    {
+      std::size_t min_child = (child + 1 == heap_.size()
+          || Time_Traits::less_than(
+            heap_[child].time_, heap_[child + 1].time_))
+        ? child : child + 1;
+      if (Time_Traits::less_than(heap_[index].time_, heap_[min_child].time_))
+        break;
+      swap_heap(index, min_child);
+      index = min_child;
+      child = index * 2 + 1;
+    }
+  }
+
+  // Swap two entries in the heap.
+  void swap_heap(std::size_t index1, std::size_t index2)
+  {
+    heap_entry tmp = heap_[index1];
+    heap_[index1] = heap_[index2];
+    heap_[index2] = tmp;
+    heap_[index1].timer_->heap_index_ = index1;
+    heap_[index2].timer_->heap_index_ = index2;
+  }
+
+  // Remove a timer from the heap and list of timers.
+  void remove_timer(per_timer_data& timer)
+  {
+    // Remove the timer from the heap.
+    std::size_t index = timer.heap_index_;
+    if (!heap_.empty() && index < heap_.size())
+    {
+      if (index == heap_.size() - 1)
+      {
+        heap_.pop_back();
+      }
+      else
+      {
+        swap_heap(index, heap_.size() - 1);
+        heap_.pop_back();
+        std::size_t parent = (index - 1) / 2;
+        if (index > 0 && Time_Traits::less_than(
+              heap_[index].time_, heap_[parent].time_))
+          up_heap(index);
+        else
+          down_heap(index);
+      }
+    }
+
+    // Remove the timer from the linked list of active timers.
+    if (timers_ == &timer)
+      timers_ = timer.next_;
+    if (timer.prev_)
+      timer.prev_->next_ = timer.next_;
+    if (timer.next_)
+      timer.next_->prev_= timer.prev_;
+    timer.next_ = 0;
+    timer.prev_ = 0;
+  }
+
+  // Determine if the specified absolute time is positive infinity.
+  template <typename Time_Type>
+  static bool is_positive_infinity(const Time_Type&)
+  {
+    return false;
+  }
+
+  // Determine if the specified absolute time is positive infinity.
+  template <typename T, typename TimeSystem>
+  static bool is_positive_infinity(
+      const boost::date_time::base_time<T, TimeSystem>& time)
+  {
+    return time.is_pos_infinity();
+  }
+
+  // Helper function to convert a duration into milliseconds.
+  template <typename Duration>
+  long to_msec(const Duration& d, long max_duration) const
+  {
+    if (d.ticks() <= 0)
+      return 0;
+    int64_t msec = d.total_milliseconds();
+    if (msec == 0)
+      return 1;
+    if (msec > max_duration)
+      return max_duration;
+    return static_cast<long>(msec);
+  }
+
+  // Helper function to convert a duration into microseconds.
+  template <typename Duration>
+  long to_usec(const Duration& d, long max_duration) const
+  {
+    if (d.ticks() <= 0)
+      return 0;
+    int64_t usec = d.total_microseconds();
+    if (usec == 0)
+      return 1;
+    if (usec > max_duration)
+      return max_duration;
+    return static_cast<long>(usec);
+  }
+
+  // The head of a linked list of all active timers.
+  per_timer_data* timers_;
+
+  struct heap_entry
+  {
+    // The time when the timer should fire.
+    time_type time_;
+
+    // The associated timer with enqueued operations.
+    per_timer_data* timer_;
+  };
+
+  // The heap of timers, with the earliest timer at the front.
+  std::vector<heap_entry> heap_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_TIMER_QUEUE_HPP
diff --git a/ext/patches/boost/asio/detail/timer_queue_base.hpp b/ext/patches/boost/asio/detail/timer_queue_base.hpp
new file mode 100644
index 0000000..f397027
--- /dev/null
+++ b/ext/patches/boost/asio/detail/timer_queue_base.hpp
@@ -0,0 +1,70 @@
+//
+// detail/timer_queue_base.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_TIMER_QUEUE_BASE_HPP
+#define BOOST_ASIO_DETAIL_TIMER_QUEUE_BASE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/op_queue.hpp>
+#include <boost/asio/detail/operation.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class timer_queue_base
+  : private noncopyable
+{
+public:
+  // Constructor.
+  timer_queue_base() : next_(0) {}
+
+  // Destructor.
+  virtual ~timer_queue_base() {}
+
+  // Whether there are no timers in the queue.
+  virtual bool empty() const = 0;
+
+  // Get the time to wait until the next timer.
+  virtual long wait_duration_msec(long max_duration) const = 0;
+
+  // Get the time to wait until the next timer.
+  virtual long wait_duration_usec(long max_duration) const = 0;
+
+  // Dequeue all ready timers.
+  virtual void get_ready_timers(op_queue<operation>& ops) = 0;
+
+  // Dequeue all timers.
+  virtual void get_all_timers(op_queue<operation>& ops) = 0;
+
+private:
+  friend class timer_queue_set;
+
+  // Next timer queue in the set.
+  timer_queue_base* next_;
+};
+
+template <typename Time_Traits>
+class timer_queue;
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_TIMER_QUEUE_BASE_HPP
diff --git a/ext/patches/boost/asio/detail/timer_queue_ptime.hpp b/ext/patches/boost/asio/detail/timer_queue_ptime.hpp
new file mode 100644
index 0000000..3eaf095
--- /dev/null
+++ b/ext/patches/boost/asio/detail/timer_queue_ptime.hpp
@@ -0,0 +1,95 @@
+//
+// detail/timer_queue_ptime.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_TIMER_QUEUE_PTIME_HPP
+#define BOOST_ASIO_DETAIL_TIMER_QUEUE_PTIME_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/time_traits.hpp>
+#include <boost/asio/detail/timer_queue.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+#if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+struct forwarding_posix_time_traits : time_traits<boost::posix_time::ptime> {};
+
+// Template specialisation for the commonly used instantation.
+template <>
+class timer_queue<time_traits<boost::posix_time::ptime> >
+  : public timer_queue_base
+{
+public:
+  // The time type.
+  typedef boost::posix_time::ptime time_type;
+
+  // The duration type.
+  typedef boost::posix_time::time_duration duration_type;
+
+  // Per-timer data.
+  typedef timer_queue<forwarding_posix_time_traits>::per_timer_data
+    per_timer_data;
+
+  // Constructor.
+  BOOST_ASIO_DECL timer_queue();
+
+  // Destructor.
+  BOOST_ASIO_DECL virtual ~timer_queue();
+
+  // Add a new timer to the queue. Returns true if this is the timer that is
+  // earliest in the queue, in which case the reactor's event demultiplexing
+  // function call may need to be interrupted and restarted.
+  BOOST_ASIO_DECL bool enqueue_timer(const time_type& time,
+      per_timer_data& timer, wait_op* op);
+
+  // Whether there are no timers in the queue.
+  BOOST_ASIO_DECL virtual bool empty() const;
+
+  // Get the time for the timer that is earliest in the queue.
+  BOOST_ASIO_DECL virtual long wait_duration_msec(long max_duration) const;
+
+  // Get the time for the timer that is earliest in the queue.
+  BOOST_ASIO_DECL virtual long wait_duration_usec(long max_duration) const;
+
+  // Dequeue all timers not later than the current time.
+  BOOST_ASIO_DECL virtual void get_ready_timers(op_queue<operation>& ops);
+
+  // Dequeue all timers.
+  BOOST_ASIO_DECL virtual void get_all_timers(op_queue<operation>& ops);
+
+  // Cancel and dequeue operations for the given timer.
+  BOOST_ASIO_DECL std::size_t cancel_timer(
+      per_timer_data& timer, op_queue<operation>& ops,
+      std::size_t max_cancelled = (std::numeric_limits<std::size_t>::max)());
+
+private:
+  timer_queue<forwarding_posix_time_traits> impl_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/timer_queue_ptime.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_DETAIL_TIMER_QUEUE_PTIME_HPP
diff --git a/ext/patches/boost/asio/detail/timer_queue_set.hpp b/ext/patches/boost/asio/detail/timer_queue_set.hpp
new file mode 100644
index 0000000..fb8edd0
--- /dev/null
+++ b/ext/patches/boost/asio/detail/timer_queue_set.hpp
@@ -0,0 +1,68 @@
+//
+// detail/timer_queue_set.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_TIMER_QUEUE_SET_HPP
+#define BOOST_ASIO_DETAIL_TIMER_QUEUE_SET_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/timer_queue_base.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class timer_queue_set
+{
+public:
+  // Constructor.
+  BOOST_ASIO_DECL timer_queue_set();
+
+  // Add a timer queue to the set.
+  BOOST_ASIO_DECL void insert(timer_queue_base* q);
+
+  // Remove a timer queue from the set.
+  BOOST_ASIO_DECL void erase(timer_queue_base* q);
+
+  // Determine whether all queues are empty.
+  BOOST_ASIO_DECL bool all_empty() const;
+
+  // Get the wait duration in milliseconds.
+  BOOST_ASIO_DECL long wait_duration_msec(long max_duration) const;
+
+  // Get the wait duration in microseconds.
+  BOOST_ASIO_DECL long wait_duration_usec(long max_duration) const;
+
+  // Dequeue all ready timers.
+  BOOST_ASIO_DECL void get_ready_timers(op_queue<operation>& ops);
+
+  // Dequeue all timers.
+  BOOST_ASIO_DECL void get_all_timers(op_queue<operation>& ops);
+
+private:
+  timer_queue_base* first_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/timer_queue_set.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_DETAIL_TIMER_QUEUE_SET_HPP
diff --git a/ext/patches/boost/asio/detail/timer_scheduler.hpp b/ext/patches/boost/asio/detail/timer_scheduler.hpp
new file mode 100644
index 0000000..1eb6b82
--- /dev/null
+++ b/ext/patches/boost/asio/detail/timer_scheduler.hpp
@@ -0,0 +1,35 @@
+//
+// detail/timer_scheduler.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_TIMER_SCHEDULER_HPP
+#define BOOST_ASIO_DETAIL_TIMER_SCHEDULER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/timer_scheduler_fwd.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/winrt_timer_scheduler.hpp>
+#elif defined(BOOST_ASIO_HAS_IOCP)
+# include <boost/asio/detail/win_iocp_io_service.hpp>
+#elif defined(BOOST_ASIO_HAS_EPOLL)
+# include <boost/asio/detail/epoll_reactor.hpp>
+#elif defined(BOOST_ASIO_HAS_KQUEUE)
+# include <boost/asio/detail/kqueue_reactor.hpp>
+#elif defined(BOOST_ASIO_HAS_DEV_POLL)
+# include <boost/asio/detail/dev_poll_reactor.hpp>
+#else
+# include <boost/asio/detail/select_reactor.hpp>
+#endif
+
+#endif // BOOST_ASIO_DETAIL_TIMER_SCHEDULER_HPP
diff --git a/ext/patches/boost/asio/detail/timer_scheduler_fwd.hpp b/ext/patches/boost/asio/detail/timer_scheduler_fwd.hpp
new file mode 100644
index 0000000..e5aa34d
--- /dev/null
+++ b/ext/patches/boost/asio/detail/timer_scheduler_fwd.hpp
@@ -0,0 +1,42 @@
+//
+// detail/timer_scheduler_fwd.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_TIMER_SCHEDULER_FWD_HPP
+#define BOOST_ASIO_DETAIL_TIMER_SCHEDULER_FWD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+typedef class winrt_timer_scheduler timer_scheduler;
+#elif defined(BOOST_ASIO_HAS_IOCP)
+typedef class win_iocp_io_service timer_scheduler;
+#elif defined(BOOST_ASIO_HAS_EPOLL)
+typedef class epoll_reactor timer_scheduler;
+#elif defined(BOOST_ASIO_HAS_KQUEUE)
+typedef class kqueue_reactor timer_scheduler;
+#elif defined(BOOST_ASIO_HAS_DEV_POLL)
+typedef class dev_poll_reactor timer_scheduler;
+#else
+typedef class select_reactor timer_scheduler;
+#endif
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_TIMER_SCHEDULER_FWD_HPP
diff --git a/ext/patches/boost/asio/detail/tss_ptr.hpp b/ext/patches/boost/asio/detail/tss_ptr.hpp
new file mode 100644
index 0000000..9258fb8
--- /dev/null
+++ b/ext/patches/boost/asio/detail/tss_ptr.hpp
@@ -0,0 +1,71 @@
+//
+// detail/tss_ptr.hpp
+// ~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_TSS_PTR_HPP
+#define BOOST_ASIO_DETAIL_TSS_PTR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_THREADS)
+# include <boost/asio/detail/null_tss_ptr.hpp>
+#elif defined(BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION)
+# include <boost/asio/detail/keyword_tss_ptr.hpp>
+#elif defined(BOOST_ASIO_WINDOWS)
+# include <boost/asio/detail/win_tss_ptr.hpp>
+#elif defined(BOOST_ASIO_HAS_PTHREADS)
+# include <boost/asio/detail/posix_tss_ptr.hpp>
+#else
+# error Only Windows and POSIX are supported!
+#endif
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename T>
+class tss_ptr
+#if !defined(BOOST_ASIO_HAS_THREADS)
+  : public null_tss_ptr<T>
+#elif defined(BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION)
+  : public keyword_tss_ptr<T>
+#elif defined(BOOST_ASIO_WINDOWS)
+  : public win_tss_ptr<T>
+#elif defined(BOOST_ASIO_HAS_PTHREADS)
+  : public posix_tss_ptr<T>
+#endif
+{
+public:
+  void operator=(T* value)
+  {
+#if !defined(BOOST_ASIO_HAS_THREADS)
+    null_tss_ptr<T>::operator=(value);
+#elif defined(BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION)
+    keyword_tss_ptr<T>::operator=(value);
+#elif defined(BOOST_ASIO_WINDOWS)
+    win_tss_ptr<T>::operator=(value);
+#elif defined(BOOST_ASIO_HAS_PTHREADS)
+    posix_tss_ptr<T>::operator=(value);
+#endif
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_TSS_PTR_HPP
diff --git a/ext/patches/boost/asio/detail/type_traits.hpp b/ext/patches/boost/asio/detail/type_traits.hpp
new file mode 100644
index 0000000..5dab201
--- /dev/null
+++ b/ext/patches/boost/asio/detail/type_traits.hpp
@@ -0,0 +1,60 @@
+//
+// detail/type_traits.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_TYPE_TRAITS_HPP
+#define BOOST_ASIO_DETAIL_TYPE_TRAITS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_STD_TYPE_TRAITS)
+# include <type_traits>
+#else // defined(BOOST_ASIO_HAS_TYPE_TRAITS)
+# include <boost/type_traits/add_const.hpp>
+# include <boost/type_traits/is_const.hpp>
+# include <boost/type_traits/is_convertible.hpp>
+# include <boost/type_traits/is_function.hpp>
+# include <boost/type_traits/is_same.hpp>
+# include <boost/type_traits/remove_pointer.hpp>
+# include <boost/type_traits/remove_reference.hpp>
+# include <boost/utility/enable_if.hpp>
+#endif // defined(BOOST_ASIO_HAS_TYPE_TRAITS)
+
+namespace boost {
+namespace asio {
+
+#if defined(BOOST_ASIO_HAS_STD_TYPE_TRAITS)
+using std::add_const;
+using std::enable_if;
+using std::is_const;
+using std::is_convertible;
+using std::is_function;
+using std::is_same;
+using std::remove_pointer;
+using std::remove_reference;
+#else // defined(BOOST_ASIO_HAS_STD_TYPE_TRAITS)
+using boost::add_const;
+template <bool Condition, typename Type = void>
+struct enable_if : boost::enable_if_c<Condition, Type> {};
+using boost::is_const;
+using boost::is_convertible;
+using boost::is_function;
+using boost::is_same;
+using boost::remove_pointer;
+using boost::remove_reference;
+#endif // defined(BOOST_ASIO_HAS_STD_TYPE_TRAITS)
+
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_TYPE_TRAITS_HPP
diff --git a/ext/patches/boost/asio/detail/variadic_templates.hpp b/ext/patches/boost/asio/detail/variadic_templates.hpp
new file mode 100644
index 0000000..0530289
--- /dev/null
+++ b/ext/patches/boost/asio/detail/variadic_templates.hpp
@@ -0,0 +1,63 @@
+//
+// detail/variadic_templates.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_VARIADIC_TEMPLATES_HPP
+#define BOOST_ASIO_DETAIL_VARIADIC_TEMPLATES_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+
+# define BOOST_ASIO_VARIADIC_TPARAMS(n) BOOST_ASIO_VARIADIC_TPARAMS_##n
+
+# define BOOST_ASIO_VARIADIC_TPARAMS_1 \
+  typename T1
+# define BOOST_ASIO_VARIADIC_TPARAMS_2 \
+  typename T1, typename T2
+# define BOOST_ASIO_VARIADIC_TPARAMS_3 \
+  typename T1, typename T2, typename T3
+# define BOOST_ASIO_VARIADIC_TPARAMS_4 \
+  typename T1, typename T2, typename T3, typename T4
+# define BOOST_ASIO_VARIADIC_TPARAMS_5 \
+  typename T1, typename T2, typename T3, typename T4, typename T5
+
+# define BOOST_ASIO_VARIADIC_TARGS(n) BOOST_ASIO_VARIADIC_TARGS_##n
+
+# define BOOST_ASIO_VARIADIC_TARGS_1 x1
+# define BOOST_ASIO_VARIADIC_TARGS_2 x1, x2
+# define BOOST_ASIO_VARIADIC_TARGS_3 x1, x2, x3
+# define BOOST_ASIO_VARIADIC_TARGS_4 x1, x2, x3, x4
+# define BOOST_ASIO_VARIADIC_TARGS_5 x1, x2, x3, x4, x5
+
+# define BOOST_ASIO_VARIADIC_PARAMS(n) BOOST_ASIO_VARIADIC_PARAMS_##n
+
+# define BOOST_ASIO_VARIADIC_PARAMS_1 T1 x1
+# define BOOST_ASIO_VARIADIC_PARAMS_2 T1 x1, T2 x2
+# define BOOST_ASIO_VARIADIC_PARAMS_3 T1 x1, T2 x2, T3 x3
+# define BOOST_ASIO_VARIADIC_PARAMS_4 T1 x1, T2 x2, T3 x3, T4 x4
+# define BOOST_ASIO_VARIADIC_PARAMS_5 T1 x1, T2 x2, T3 x3, T4 x4, T5 x5
+
+# define BOOST_ASIO_VARIADIC_ARGS(n) BOOST_ASIO_VARIADIC_ARGS_##n
+
+# define BOOST_ASIO_VARIADIC_ARGS_1 x1
+# define BOOST_ASIO_VARIADIC_ARGS_2 x1, x2
+# define BOOST_ASIO_VARIADIC_ARGS_3 x1, x2, x3
+# define BOOST_ASIO_VARIADIC_ARGS_4 x1, x2, x3, x4
+# define BOOST_ASIO_VARIADIC_ARGS_5 x1, x2, x3, x4, x5
+
+# define BOOST_ASIO_VARIADIC_GENERATE(m) m(1) m(2) m(3) m(4) m(5)
+
+#endif // !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
+
+#endif // BOOST_ASIO_DETAIL_VARIADIC_TEMPLATES_HPP
diff --git a/ext/patches/boost/asio/detail/wait_handler.hpp b/ext/patches/boost/asio/detail/wait_handler.hpp
new file mode 100644
index 0000000..3f722a0
--- /dev/null
+++ b/ext/patches/boost/asio/detail/wait_handler.hpp
@@ -0,0 +1,85 @@
+//
+// detail/wait_handler.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WAIT_HANDLER_HPP
+#define BOOST_ASIO_DETAIL_WAIT_HANDLER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/wait_op.hpp>
+#include <boost/asio/io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Handler>
+class wait_handler : public wait_op
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(wait_handler);
+
+  wait_handler(Handler& h)
+    : wait_op(&wait_handler::do_complete),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(h))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& /*ec*/,
+      std::size_t /*bytes_transferred*/)
+  {
+    // Take ownership of the handler object.
+    wait_handler* h(static_cast<wait_handler*>(base));
+    ptr p = { boost::asio::detail::addressof(h->handler_), h, h };
+
+    BOOST_ASIO_HANDLER_COMPLETION((h));
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder1<Handler, boost::system::error_code>
+      handler(h->handler_, h->ec_);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_WAIT_HANDLER_HPP
diff --git a/ext/patches/boost/asio/detail/wait_op.hpp b/ext/patches/boost/asio/detail/wait_op.hpp
new file mode 100644
index 0000000..927f2e4
--- /dev/null
+++ b/ext/patches/boost/asio/detail/wait_op.hpp
@@ -0,0 +1,47 @@
+//
+// detail/wait_op.hpp
+// ~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WAIT_OP_HPP
+#define BOOST_ASIO_DETAIL_WAIT_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/operation.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class wait_op
+  : public operation
+{
+public:
+  // The error code to be passed to the completion handler.
+  boost::system::error_code ec_;
+
+protected:
+  wait_op(func_type func)
+    : operation(func)
+  {
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_WAIT_OP_HPP
diff --git a/ext/patches/boost/asio/detail/weak_ptr.hpp b/ext/patches/boost/asio/detail/weak_ptr.hpp
new file mode 100644
index 0000000..52ade1f
--- /dev/null
+++ b/ext/patches/boost/asio/detail/weak_ptr.hpp
@@ -0,0 +1,40 @@
+//
+// detail/weak_ptr.hpp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WEAK_PTR_HPP
+#define BOOST_ASIO_DETAIL_WEAK_PTR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_STD_SHARED_PTR)
+# include <memory>
+#else // defined(BOOST_ASIO_HAS_STD_SHARED_PTR)
+# include <boost/weak_ptr.hpp>
+#endif // defined(BOOST_ASIO_HAS_STD_SHARED_PTR)
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+#if defined(BOOST_ASIO_HAS_STD_SHARED_PTR)
+using std::weak_ptr;
+#else // defined(BOOST_ASIO_HAS_STD_SHARED_PTR)
+using boost::weak_ptr;
+#endif // defined(BOOST_ASIO_HAS_STD_SHARED_PTR)
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_DETAIL_WEAK_PTR_HPP
diff --git a/ext/patches/boost/asio/detail/win_event.hpp b/ext/patches/boost/asio/detail/win_event.hpp
new file mode 100644
index 0000000..6afdca3
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_event.hpp
@@ -0,0 +1,128 @@
+//
+// detail/win_event.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_EVENT_HPP
+#define BOOST_ASIO_DETAIL_WIN_EVENT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS)
+
+#include <boost/asio/detail/assert.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class win_event
+  : private noncopyable
+{
+public:
+  // Constructor.
+  BOOST_ASIO_DECL win_event();
+
+  // Destructor.
+  BOOST_ASIO_DECL ~win_event();
+
+  // Signal the event. (Retained for backward compatibility.)
+  template <typename Lock>
+  void signal(Lock& lock)
+  {
+    this->signal_all(lock);
+  }
+
+  // Signal all waiters.
+  template <typename Lock>
+  void signal_all(Lock& lock)
+  {
+    BOOST_ASIO_ASSERT(lock.locked());
+    (void)lock;
+    state_ |= 1;
+    ::SetEvent(events_[0]);
+  }
+
+  // Unlock the mutex and signal one waiter.
+  template <typename Lock>
+  void unlock_and_signal_one(Lock& lock)
+  {
+    BOOST_ASIO_ASSERT(lock.locked());
+    state_ |= 1;
+    bool have_waiters = (state_ > 1);
+    lock.unlock();
+    if (have_waiters)
+      ::SetEvent(events_[1]);
+  }
+
+  // If there's a waiter, unlock the mutex and signal it.
+  template <typename Lock>
+  bool maybe_unlock_and_signal_one(Lock& lock)
+  {
+    BOOST_ASIO_ASSERT(lock.locked());
+    state_ |= 1;
+    if (state_ > 1)
+    {
+      lock.unlock();
+      ::SetEvent(events_[1]);
+      return true;
+    }
+    return false;
+  }
+
+  // Reset the event.
+  template <typename Lock>
+  void clear(Lock& lock)
+  {
+    BOOST_ASIO_ASSERT(lock.locked());
+    (void)lock;
+    ::ResetEvent(events_[0]);
+    state_ &= ~std::size_t(1);
+  }
+
+  // Wait for the event to become signalled.
+  template <typename Lock>
+  void wait(Lock& lock)
+  {
+    BOOST_ASIO_ASSERT(lock.locked());
+    while ((state_ & 1) == 0)
+    {
+      state_ += 2;
+      lock.unlock();
+      ::WaitForMultipleObjects(2, events_, false, INFINITE);
+      lock.lock();
+      state_ -= 2;
+    }
+  }
+
+private:
+  HANDLE events_[2];
+  std::size_t state_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/win_event.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_WINDOWS)
+
+#endif // BOOST_ASIO_DETAIL_WIN_EVENT_HPP
diff --git a/ext/patches/boost/asio/detail/win_fd_set_adapter.hpp b/ext/patches/boost/asio/detail/win_fd_set_adapter.hpp
new file mode 100644
index 0000000..b14d11a
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_fd_set_adapter.hpp
@@ -0,0 +1,151 @@
+//
+// detail/win_fd_set_adapter.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_FD_SET_ADAPTER_HPP
+#define BOOST_ASIO_DETAIL_WIN_FD_SET_ADAPTER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/reactor_op_queue.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+// Adapts the FD_SET type to meet the Descriptor_Set concept's requirements.
+class win_fd_set_adapter : noncopyable
+{
+public:
+  enum { default_fd_set_size = 1024 };
+
+  win_fd_set_adapter()
+    : capacity_(default_fd_set_size),
+      max_descriptor_(invalid_socket)
+  {
+    fd_set_ = static_cast<win_fd_set*>(::operator new(
+          sizeof(win_fd_set) - sizeof(SOCKET)
+          + sizeof(SOCKET) * (capacity_)));
+    fd_set_->fd_count = 0;
+  }
+
+  ~win_fd_set_adapter()
+  {
+    ::operator delete(fd_set_);
+  }
+
+  void reset()
+  {
+    fd_set_->fd_count = 0;
+    max_descriptor_ = invalid_socket;
+  }
+
+  bool set(socket_type descriptor)
+  {
+    for (u_int i = 0; i < fd_set_->fd_count; ++i)
+      if (fd_set_->fd_array[i] == descriptor)
+        return true;
+
+    reserve(fd_set_->fd_count + 1);
+    fd_set_->fd_array[fd_set_->fd_count++] = descriptor;
+    return true;
+  }
+
+  void set(reactor_op_queue<socket_type>& operations, op_queue<operation>&)
+  {
+    reactor_op_queue<socket_type>::iterator i = operations.begin();
+    while (i != operations.end())
+    {
+      reactor_op_queue<socket_type>::iterator op_iter = i++;
+      reserve(fd_set_->fd_count + 1);
+      fd_set_->fd_array[fd_set_->fd_count++] = op_iter->first;
+    }
+  }
+
+  bool is_set(socket_type descriptor) const
+  {
+    return !!__WSAFDIsSet(descriptor,
+        const_cast<fd_set*>(reinterpret_cast<const fd_set*>(fd_set_)));
+  }
+
+  operator fd_set*()
+  {
+    return reinterpret_cast<fd_set*>(fd_set_);
+  }
+
+  socket_type max_descriptor() const
+  {
+    return max_descriptor_;
+  }
+
+  void perform(reactor_op_queue<socket_type>& operations,
+      op_queue<operation>& ops) const
+  {
+    for (u_int i = 0; i < fd_set_->fd_count; ++i)
+      operations.perform_operations(fd_set_->fd_array[i], ops);
+  }
+
+private:
+  // This structure is defined to be compatible with the Windows API fd_set
+  // structure, but without being dependent on the value of FD_SETSIZE. We use
+  // the "struct hack" to allow the number of descriptors to be varied at
+  // runtime.
+  struct win_fd_set
+  {
+    u_int fd_count;
+    SOCKET fd_array[1];
+  };
+
+  // Increase the fd_set_ capacity to at least the specified number of elements.
+  void reserve(u_int n)
+  {
+    if (n <= capacity_)
+      return;
+
+    u_int new_capacity = capacity_ + capacity_ / 2;
+    if (new_capacity < n)
+      new_capacity = n;
+
+    win_fd_set* new_fd_set = static_cast<win_fd_set*>(::operator new(
+          sizeof(win_fd_set) - sizeof(SOCKET)
+          + sizeof(SOCKET) * (new_capacity)));
+
+    new_fd_set->fd_count = fd_set_->fd_count;
+    for (u_int i = 0; i < fd_set_->fd_count; ++i)
+      new_fd_set->fd_array[i] = fd_set_->fd_array[i];
+
+    ::operator delete(fd_set_);
+    fd_set_ = new_fd_set;
+    capacity_ = new_capacity;
+  }
+
+  win_fd_set* fd_set_;
+  u_int capacity_;
+  socket_type max_descriptor_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+#endif // BOOST_ASIO_DETAIL_WIN_FD_SET_ADAPTER_HPP
diff --git a/ext/patches/boost/asio/detail/win_fenced_block.hpp b/ext/patches/boost/asio/detail/win_fenced_block.hpp
new file mode 100644
index 0000000..8fb0eaf
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_fenced_block.hpp
@@ -0,0 +1,91 @@
+//
+// detail/win_fenced_block.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_FENCED_BLOCK_HPP
+#define BOOST_ASIO_DETAIL_WIN_FENCED_BLOCK_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS) && !defined(UNDER_CE)
+
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class win_fenced_block
+  : private noncopyable
+{
+public:
+  enum half_t { half };
+  enum full_t { full };
+
+  // Constructor for a half fenced block.
+  explicit win_fenced_block(half_t)
+  {
+  }
+
+  // Constructor for a full fenced block.
+  explicit win_fenced_block(full_t)
+  {
+#if defined(__BORLANDC__)
+    LONG barrier = 0;
+    ::InterlockedExchange(&barrier, 1);
+#elif defined(BOOST_ASIO_MSVC) \
+  && ((BOOST_ASIO_MSVC < 1400) || !defined(MemoryBarrier))
+# if defined(_M_IX86)
+#  pragma warning(push)
+#  pragma warning(disable:4793)
+    LONG barrier;
+    __asm { xchg barrier, eax }
+#  pragma warning(pop)
+# endif // defined(_M_IX86)
+#else
+    MemoryBarrier();
+#endif
+  }
+
+  // Destructor.
+  ~win_fenced_block()
+  {
+#if defined(__BORLANDC__)
+    LONG barrier = 0;
+    ::InterlockedExchange(&barrier, 1);
+#elif defined(BOOST_ASIO_MSVC) \
+  && ((BOOST_ASIO_MSVC < 1400) || !defined(MemoryBarrier))
+# if defined(_M_IX86)
+#  pragma warning(push)
+#  pragma warning(disable:4793)
+    LONG barrier;
+    __asm { xchg barrier, eax }
+#  pragma warning(pop)
+# endif // defined(_M_IX86)
+#else
+    MemoryBarrier();
+#endif
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS) && !defined(UNDER_CE)
+
+#endif // BOOST_ASIO_DETAIL_WIN_FENCED_BLOCK_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_handle_read_op.hpp b/ext/patches/boost/asio/detail/win_iocp_handle_read_op.hpp
new file mode 100644
index 0000000..68aac67
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_handle_read_op.hpp
@@ -0,0 +1,111 @@
+//
+// detail/win_iocp_handle_read_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2008 Rep Invariant Systems, Inc. (info at repinvariant.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_HANDLE_READ_OP_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_HANDLE_READ_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/error.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/operation.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename MutableBufferSequence, typename Handler>
+class win_iocp_handle_read_op : public operation
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(win_iocp_handle_read_op);
+
+  win_iocp_handle_read_op(
+      const MutableBufferSequence& buffers, Handler& handler)
+    : operation(&win_iocp_handle_read_op::do_complete),
+      buffers_(buffers),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& result_ec,
+      std::size_t bytes_transferred)
+  {
+    boost::system::error_code ec(result_ec);
+
+    // Take ownership of the operation object.
+    win_iocp_handle_read_op* o(static_cast<win_iocp_handle_read_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+    if (owner)
+    {
+      // Check whether buffers are still valid.
+      buffer_sequence_adapter<boost::asio::mutable_buffer,
+          MutableBufferSequence>::validate(o->buffers_);
+    }
+#endif // defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+
+    // Map non-portable errors to their portable counterparts.
+    if (ec.value() == ERROR_HANDLE_EOF)
+      ec = boost::asio::error::eof;
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, ec, bytes_transferred);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  MutableBufferSequence buffers_;
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_HANDLE_READ_OP_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_handle_service.hpp b/ext/patches/boost/asio/detail/win_iocp_handle_service.hpp
new file mode 100644
index 0000000..288aeb6
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_handle_service.hpp
@@ -0,0 +1,324 @@
+//
+// detail/win_iocp_handle_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2008 Rep Invariant Systems, Inc. (info at repinvariant.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_HANDLE_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_HANDLE_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/cstdint.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/mutex.hpp>
+#include <boost/asio/detail/operation.hpp>
+#include <boost/asio/detail/win_iocp_handle_read_op.hpp>
+#include <boost/asio/detail/win_iocp_handle_write_op.hpp>
+#include <boost/asio/detail/win_iocp_io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class win_iocp_handle_service
+{
+public:
+  // The native type of a stream handle.
+  typedef HANDLE native_handle_type;
+
+  // The implementation type of the stream handle.
+  class implementation_type
+  {
+  public:
+    // Default constructor.
+    implementation_type()
+      : handle_(INVALID_HANDLE_VALUE),
+        safe_cancellation_thread_id_(0),
+        next_(0),
+        prev_(0)
+    {
+    }
+
+  private:
+    // Only this service will have access to the internal values.
+    friend class win_iocp_handle_service;
+
+    // The native stream handle representation.
+    native_handle_type handle_;
+
+    // The ID of the thread from which it is safe to cancel asynchronous
+    // operations. 0 means no asynchronous operations have been started yet.
+    // ~0 means asynchronous operations have been started from more than one
+    // thread, and cancellation is not supported for the handle.
+    DWORD safe_cancellation_thread_id_;
+
+    // Pointers to adjacent handle implementations in linked list.
+    implementation_type* next_;
+    implementation_type* prev_;
+  };
+
+  BOOST_ASIO_DECL win_iocp_handle_service(boost::asio::io_service& io_service);
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Construct a new handle implementation.
+  BOOST_ASIO_DECL void construct(implementation_type& impl);
+
+  // Move-construct a new handle implementation.
+  BOOST_ASIO_DECL void move_construct(implementation_type& impl,
+      implementation_type& other_impl);
+
+  // Move-assign from another handle implementation.
+  BOOST_ASIO_DECL void move_assign(implementation_type& impl,
+      win_iocp_handle_service& other_service,
+      implementation_type& other_impl);
+
+  // Destroy a handle implementation.
+  BOOST_ASIO_DECL void destroy(implementation_type& impl);
+
+  // Assign a native handle to a handle implementation.
+  BOOST_ASIO_DECL boost::system::error_code assign(implementation_type& impl,
+      const native_handle_type& handle, boost::system::error_code& ec);
+
+  // Determine whether the handle is open.
+  bool is_open(const implementation_type& impl) const
+  {
+    return impl.handle_ != INVALID_HANDLE_VALUE;
+  }
+
+  // Destroy a handle implementation.
+  BOOST_ASIO_DECL boost::system::error_code close(implementation_type& impl,
+      boost::system::error_code& ec);
+
+  // Get the native handle representation.
+  native_handle_type native_handle(const implementation_type& impl) const
+  {
+    return impl.handle_;
+  }
+
+  // Cancel all operations associated with the handle.
+  BOOST_ASIO_DECL boost::system::error_code cancel(implementation_type& impl,
+      boost::system::error_code& ec);
+
+  // Write the given data. Returns the number of bytes written.
+  template <typename ConstBufferSequence>
+  size_t write_some(implementation_type& impl,
+      const ConstBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return write_some_at(impl, 0, buffers, ec);
+  }
+
+  // Write the given data at the specified offset. Returns the number of bytes
+  // written.
+  template <typename ConstBufferSequence>
+  size_t write_some_at(implementation_type& impl, uint64_t offset,
+      const ConstBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    boost::asio::const_buffer buffer =
+      buffer_sequence_adapter<boost::asio::const_buffer,
+        ConstBufferSequence>::first(buffers);
+
+    return do_write(impl, offset, buffer, ec);
+  }
+
+  // Start an asynchronous write. The data being written must be valid for the
+  // lifetime of the asynchronous operation.
+  template <typename ConstBufferSequence, typename Handler>
+  void async_write_some(implementation_type& impl,
+      const ConstBufferSequence& buffers, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef win_iocp_handle_write_op<ConstBufferSequence, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(buffers, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "handle", &impl, "async_write_some"));
+
+    start_write_op(impl, 0,
+        buffer_sequence_adapter<boost::asio::const_buffer,
+          ConstBufferSequence>::first(buffers), p.p);
+    p.v = p.p = 0;
+  }
+
+  // Start an asynchronous write at a specified offset. The data being written
+  // must be valid for the lifetime of the asynchronous operation.
+  template <typename ConstBufferSequence, typename Handler>
+  void async_write_some_at(implementation_type& impl, uint64_t offset,
+      const ConstBufferSequence& buffers, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef win_iocp_handle_write_op<ConstBufferSequence, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(buffers, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "handle", &impl, "async_write_some_at"));
+
+    start_write_op(impl, offset,
+        buffer_sequence_adapter<boost::asio::const_buffer,
+          ConstBufferSequence>::first(buffers), p.p);
+    p.v = p.p = 0;
+  }
+
+  // Read some data. Returns the number of bytes received.
+  template <typename MutableBufferSequence>
+  size_t read_some(implementation_type& impl,
+      const MutableBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return read_some_at(impl, 0, buffers, ec);
+  }
+
+  // Read some data at a specified offset. Returns the number of bytes received.
+  template <typename MutableBufferSequence>
+  size_t read_some_at(implementation_type& impl, uint64_t offset,
+      const MutableBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    boost::asio::mutable_buffer buffer =
+      buffer_sequence_adapter<boost::asio::mutable_buffer,
+        MutableBufferSequence>::first(buffers);
+
+    return do_read(impl, offset, buffer, ec);
+  }
+
+  // Start an asynchronous read. The buffer for the data being received must be
+  // valid for the lifetime of the asynchronous operation.
+  template <typename MutableBufferSequence, typename Handler>
+  void async_read_some(implementation_type& impl,
+      const MutableBufferSequence& buffers, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef win_iocp_handle_read_op<MutableBufferSequence, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(buffers, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "handle", &impl, "async_read_some"));
+
+    start_read_op(impl, 0,
+        buffer_sequence_adapter<boost::asio::mutable_buffer,
+          MutableBufferSequence>::first(buffers), p.p);
+    p.v = p.p = 0;
+  }
+
+  // Start an asynchronous read at a specified offset. The buffer for the data
+  // being received must be valid for the lifetime of the asynchronous
+  // operation.
+  template <typename MutableBufferSequence, typename Handler>
+  void async_read_some_at(implementation_type& impl, uint64_t offset,
+      const MutableBufferSequence& buffers, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef win_iocp_handle_read_op<MutableBufferSequence, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(buffers, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "handle", &impl, "async_read_some_at"));
+
+    start_read_op(impl, offset,
+        buffer_sequence_adapter<boost::asio::mutable_buffer,
+          MutableBufferSequence>::first(buffers), p.p);
+    p.v = p.p = 0;
+  }
+
+private:
+  // Prevent the use of the null_buffers type with this service.
+  size_t write_some(implementation_type& impl,
+      const null_buffers& buffers, boost::system::error_code& ec);
+  size_t write_some_at(implementation_type& impl, uint64_t offset,
+      const null_buffers& buffers, boost::system::error_code& ec);
+  template <typename Handler>
+  void async_write_some(implementation_type& impl,
+      const null_buffers& buffers, Handler& handler);
+  template <typename Handler>
+  void async_write_some_at(implementation_type& impl, uint64_t offset,
+      const null_buffers& buffers, Handler& handler);
+  size_t read_some(implementation_type& impl,
+      const null_buffers& buffers, boost::system::error_code& ec);
+  size_t read_some_at(implementation_type& impl, uint64_t offset,
+      const null_buffers& buffers, boost::system::error_code& ec);
+  template <typename Handler>
+  void async_read_some(implementation_type& impl,
+      const null_buffers& buffers, Handler& handler);
+  template <typename Handler>
+  void async_read_some_at(implementation_type& impl, uint64_t offset,
+      const null_buffers& buffers, Handler& handler);
+
+  // Helper class for waiting for synchronous operations to complete.
+  class overlapped_wrapper;
+
+  // Helper function to perform a synchronous write operation.
+  BOOST_ASIO_DECL size_t do_write(implementation_type& impl,
+      uint64_t offset, const boost::asio::const_buffer& buffer,
+      boost::system::error_code& ec);
+
+  // Helper function to start a write operation.
+  BOOST_ASIO_DECL void start_write_op(implementation_type& impl,
+      uint64_t offset, const boost::asio::const_buffer& buffer,
+      operation* op);
+
+  // Helper function to perform a synchronous write operation.
+  BOOST_ASIO_DECL size_t do_read(implementation_type& impl,
+      uint64_t offset, const boost::asio::mutable_buffer& buffer,
+      boost::system::error_code& ec);
+
+  // Helper function to start a read operation.
+  BOOST_ASIO_DECL void start_read_op(implementation_type& impl,
+      uint64_t offset, const boost::asio::mutable_buffer& buffer,
+      operation* op);
+
+  // Update the ID of the thread from which cancellation is safe.
+  BOOST_ASIO_DECL void update_cancellation_thread_id(implementation_type& impl);
+
+  // Helper function to close a handle when the associated object is being
+  // destroyed.
+  BOOST_ASIO_DECL void close_for_destruction(implementation_type& impl);
+
+  // The IOCP service used for running asynchronous operations and dispatching
+  // handlers.
+  win_iocp_io_service& iocp_service_;
+
+  // Mutex to protect access to the linked list of implementations.
+  mutex mutex_;
+
+  // The head of a linked list of all implementations.
+  implementation_type* impl_list_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/win_iocp_handle_service.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_HANDLE_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_handle_write_op.hpp b/ext/patches/boost/asio/detail/win_iocp_handle_write_op.hpp
new file mode 100644
index 0000000..738c2f3
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_handle_write_op.hpp
@@ -0,0 +1,103 @@
+//
+// detail/win_iocp_handle_write_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2008 Rep Invariant Systems, Inc. (info at repinvariant.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_HANDLE_WRITE_OP_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_HANDLE_WRITE_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/error.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/operation.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename ConstBufferSequence, typename Handler>
+class win_iocp_handle_write_op : public operation
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(win_iocp_handle_write_op);
+
+  win_iocp_handle_write_op(const ConstBufferSequence& buffers, Handler& handler)
+    : operation(&win_iocp_handle_write_op::do_complete),
+      buffers_(buffers),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& ec, std::size_t bytes_transferred)
+  {
+    // Take ownership of the operation object.
+    win_iocp_handle_write_op* o(static_cast<win_iocp_handle_write_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+    if (owner)
+    {
+      // Check whether buffers are still valid.
+      buffer_sequence_adapter<boost::asio::const_buffer,
+          ConstBufferSequence>::validate(o->buffers_);
+    }
+#endif // defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, ec, bytes_transferred);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  ConstBufferSequence buffers_;
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_HANDLE_WRITE_OP_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_io_service.hpp b/ext/patches/boost/asio/detail/win_iocp_io_service.hpp
new file mode 100644
index 0000000..04678ed
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_io_service.hpp
@@ -0,0 +1,317 @@
+//
+// detail/win_iocp_io_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_IO_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_IO_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/detail/call_stack.hpp>
+#include <boost/asio/detail/limits.hpp>
+#include <boost/asio/detail/mutex.hpp>
+#include <boost/asio/detail/op_queue.hpp>
+#include <boost/asio/detail/scoped_ptr.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/thread.hpp>
+#include <boost/asio/detail/timer_queue_base.hpp>
+#include <boost/asio/detail/timer_queue_set.hpp>
+#include <boost/asio/detail/wait_op.hpp>
+#include <boost/asio/detail/win_iocp_operation.hpp>
+#include <boost/asio/detail/win_iocp_thread_info.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class wait_op;
+
+class win_iocp_io_service
+  : public boost::asio::detail::service_base<win_iocp_io_service>
+{
+public:
+
+  // Constructor. Specifies a concurrency hint that is passed through to the
+  // underlying I/O completion port.
+  BOOST_ASIO_DECL win_iocp_io_service(boost::asio::io_service& io_service,
+      size_t concurrency_hint = 0);
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Initialise the task. Nothing to do here.
+  void init_task()
+  {
+  }
+
+  // Register a handle with the IO completion port.
+  BOOST_ASIO_DECL boost::system::error_code register_handle(
+      HANDLE handle, boost::system::error_code& ec);
+
+  // Run the event loop until stopped or no more work.
+  BOOST_ASIO_DECL size_t run(boost::system::error_code& ec);
+
+  // Run until stopped or one operation is performed.
+  BOOST_ASIO_DECL size_t run_one(boost::system::error_code& ec);
+
+  // Poll for operations without blocking.
+  BOOST_ASIO_DECL size_t poll(boost::system::error_code& ec);
+
+  // Poll for one operation without blocking.
+  BOOST_ASIO_DECL size_t poll_one(boost::system::error_code& ec);
+
+  // Stop the event processing loop.
+  BOOST_ASIO_DECL void stop();
+
+  // Determine whether the io_service is stopped.
+  bool stopped() const
+  {
+    return ::InterlockedExchangeAdd(&stopped_, 0) != 0;
+  }
+
+  // Reset in preparation for a subsequent run invocation.
+  void reset()
+  {
+    ::InterlockedExchange(&stopped_, 0);
+  }
+
+  // Notify that some work has started.
+  void work_started()
+  {
+    ::InterlockedIncrement(&outstanding_work_);
+  }
+
+  // Notify that some work has finished.
+  void work_finished()
+  {
+    if (::InterlockedDecrement(&outstanding_work_) == 0)
+      stop();
+  }
+
+  // Return whether a handler can be dispatched immediately.
+  bool can_dispatch()
+  {
+    return thread_call_stack::contains(this) != 0;
+  }
+
+  // Request invocation of the given handler.
+  template <typename Handler>
+  void dispatch(Handler& handler);
+
+  // Request invocation of the given handler and return immediately.
+  template <typename Handler>
+  void post(Handler& handler);
+
+  // Request invocation of the given operation and return immediately. Assumes
+  // that work_started() has not yet been called for the operation.
+  void post_immediate_completion(win_iocp_operation* op, bool)
+  {
+    work_started();
+    post_deferred_completion(op);
+  }
+
+  // Request invocation of the given operation and return immediately. Assumes
+  // that work_started() was previously called for the operation.
+  BOOST_ASIO_DECL void post_deferred_completion(win_iocp_operation* op);
+
+  // Request invocation of the given operation and return immediately. Assumes
+  // that work_started() was previously called for the operations.
+  BOOST_ASIO_DECL void post_deferred_completions(
+      op_queue<win_iocp_operation>& ops);
+
+  // Request invocation of the given operation using the thread-private queue
+  // and return immediately. Assumes that work_started() has not yet been
+  // called for the operation.
+  void post_private_immediate_completion(win_iocp_operation* op)
+  {
+    post_immediate_completion(op, false);
+  }
+
+  // Request invocation of the given operation using the thread-private queue
+  // and return immediately. Assumes that work_started() was previously called
+  // for the operation.
+  void post_private_deferred_completion(win_iocp_operation* op)
+  {
+    post_deferred_completion(op);
+  }
+
+  // Process unfinished operations as part of a shutdown_service operation.
+  // Assumes that work_started() was previously called for the operations.
+  BOOST_ASIO_DECL void abandon_operations(op_queue<operation>& ops);
+
+  // Called after starting an overlapped I/O operation that did not complete
+  // immediately. The caller must have already called work_started() prior to
+  // starting the operation.
+  BOOST_ASIO_DECL void on_pending(win_iocp_operation* op);
+
+  // Called after starting an overlapped I/O operation that completed
+  // immediately. The caller must have already called work_started() prior to
+  // starting the operation.
+  BOOST_ASIO_DECL void on_completion(win_iocp_operation* op,
+      DWORD last_error = 0, DWORD bytes_transferred = 0);
+
+  // Called after starting an overlapped I/O operation that completed
+  // immediately. The caller must have already called work_started() prior to
+  // starting the operation.
+  BOOST_ASIO_DECL void on_completion(win_iocp_operation* op,
+      const boost::system::error_code& ec, DWORD bytes_transferred = 0);
+
+  // Add a new timer queue to the service.
+  template <typename Time_Traits>
+  void add_timer_queue(timer_queue<Time_Traits>& timer_queue);
+
+  // Remove a timer queue from the service.
+  template <typename Time_Traits>
+  void remove_timer_queue(timer_queue<Time_Traits>& timer_queue);
+
+  // Schedule a new operation in the given timer queue to expire at the
+  // specified absolute time.
+  template <typename Time_Traits>
+  void schedule_timer(timer_queue<Time_Traits>& queue,
+      const typename Time_Traits::time_type& time,
+      typename timer_queue<Time_Traits>::per_timer_data& timer, wait_op* op);
+
+  // Cancel the timer associated with the given token. Returns the number of
+  // handlers that have been posted or dispatched.
+  template <typename Time_Traits>
+  std::size_t cancel_timer(timer_queue<Time_Traits>& queue,
+      typename timer_queue<Time_Traits>::per_timer_data& timer,
+      std::size_t max_cancelled = (std::numeric_limits<std::size_t>::max)());
+
+private:
+#if defined(WINVER) && (WINVER < 0x0500)
+  typedef DWORD dword_ptr_t;
+  typedef ULONG ulong_ptr_t;
+#else // defined(WINVER) && (WINVER < 0x0500)
+  typedef DWORD_PTR dword_ptr_t;
+  typedef ULONG_PTR ulong_ptr_t;
+#endif // defined(WINVER) && (WINVER < 0x0500)
+
+  // Dequeues at most one operation from the I/O completion port, and then
+  // executes it. Returns the number of operations that were dequeued (i.e.
+  // either 0 or 1).
+  BOOST_ASIO_DECL size_t do_one(bool block, boost::system::error_code& ec);
+
+  // Helper to calculate the GetQueuedCompletionStatus timeout.
+  BOOST_ASIO_DECL static DWORD get_gqcs_timeout();
+
+  // Helper function to add a new timer queue.
+  BOOST_ASIO_DECL void do_add_timer_queue(timer_queue_base& queue);
+
+  // Helper function to remove a timer queue.
+  BOOST_ASIO_DECL void do_remove_timer_queue(timer_queue_base& queue);
+
+  // Called to recalculate and update the timeout.
+  BOOST_ASIO_DECL void update_timeout();
+
+  // Helper class to call work_finished() on block exit.
+  struct work_finished_on_block_exit;
+
+  // Helper class for managing a HANDLE.
+  struct auto_handle
+  {
+    HANDLE handle;
+    auto_handle() : handle(0) {}
+    ~auto_handle() { if (handle) ::CloseHandle(handle); }
+  };
+
+  // The IO completion port used for queueing operations.
+  auto_handle iocp_;
+
+  // The count of unfinished work.
+  long outstanding_work_;
+
+  // Flag to indicate whether the event loop has been stopped.
+  mutable long stopped_;
+
+  // Flag to indicate whether there is an in-flight stop event. Every event
+  // posted using PostQueuedCompletionStatus consumes non-paged pool, so to
+  // avoid exhausting this resouce we limit the number of outstanding events.
+  long stop_event_posted_;
+
+  // Flag to indicate whether the service has been shut down.
+  long shutdown_;
+
+  enum
+  {
+    // Timeout to use with GetQueuedCompletionStatus on older versions of
+    // Windows. Some versions of windows have a "bug" where a call to
+    // GetQueuedCompletionStatus can appear stuck even though there are events
+    // waiting on the queue. Using a timeout helps to work around the issue.
+    default_gqcs_timeout = 500,
+
+    // Maximum waitable timer timeout, in milliseconds.
+    max_timeout_msec = 5 * 60 * 1000,
+
+    // Maximum waitable timer timeout, in microseconds.
+    max_timeout_usec = max_timeout_msec * 1000,
+
+    // Completion key value used to wake up a thread to dispatch timers or
+    // completed operations.
+    wake_for_dispatch = 1,
+
+    // Completion key value to indicate that an operation has posted with the
+    // original last_error and bytes_transferred values stored in the fields of
+    // the OVERLAPPED structure.
+    overlapped_contains_result = 2
+  };
+
+  // Timeout to use with GetQueuedCompletionStatus.
+  const DWORD gqcs_timeout_;
+
+  // Function object for processing timeouts in a background thread.
+  struct timer_thread_function;
+  friend struct timer_thread_function;
+
+  // Background thread used for processing timeouts.
+  scoped_ptr<thread> timer_thread_;
+
+  // A waitable timer object used for waiting for timeouts.
+  auto_handle waitable_timer_;
+
+  // Non-zero if timers or completed operations need to be dispatched.
+  long dispatch_required_;
+
+  // Mutex for protecting access to the timer queues and completed operations.
+  mutex dispatch_mutex_;
+
+  // The timer queues.
+  timer_queue_set timer_queues_;
+
+  // The operations that are ready to dispatch.
+  op_queue<win_iocp_operation> completed_ops_;
+
+  // Per-thread call stack to track the state of each thread in the io_service.
+  typedef call_stack<win_iocp_io_service,
+      win_iocp_thread_info> thread_call_stack;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/detail/impl/win_iocp_io_service.hpp>
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/win_iocp_io_service.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_IO_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_null_buffers_op.hpp b/ext/patches/boost/asio/detail/win_iocp_null_buffers_op.hpp
new file mode 100644
index 0000000..6ec7f63
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_null_buffers_op.hpp
@@ -0,0 +1,121 @@
+//
+// detail/win_iocp_null_buffers_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_NULL_BUFFERS_OP_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_NULL_BUFFERS_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Handler>
+class win_iocp_null_buffers_op : public reactor_op
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(win_iocp_null_buffers_op);
+
+  win_iocp_null_buffers_op(socket_ops::weak_cancel_token_type cancel_token,
+      Handler& handler)
+    : reactor_op(&win_iocp_null_buffers_op::do_perform,
+        &win_iocp_null_buffers_op::do_complete),
+      cancel_token_(cancel_token),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static bool do_perform(reactor_op*)
+  {
+    return true;
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& result_ec,
+      std::size_t bytes_transferred)
+  {
+    boost::system::error_code ec(result_ec);
+
+    // Take ownership of the operation object.
+    win_iocp_null_buffers_op* o(static_cast<win_iocp_null_buffers_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+    // The reactor may have stored a result in the operation object.
+    if (o->ec_)
+      ec = o->ec_;
+
+    // Map non-portable errors to their portable counterparts.
+    if (ec.value() == ERROR_NETNAME_DELETED)
+    {
+      if (o->cancel_token_.expired())
+        ec = boost::asio::error::operation_aborted;
+      else
+        ec = boost::asio::error::connection_reset;
+    }
+    else if (ec.value() == ERROR_PORT_UNREACHABLE)
+    {
+      ec = boost::asio::error::connection_refused;
+    }
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, ec, bytes_transferred);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  socket_ops::weak_cancel_token_type cancel_token_;
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_NULL_BUFFERS_OP_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_operation.hpp b/ext/patches/boost/asio/detail/win_iocp_operation.hpp
new file mode 100644
index 0000000..3a0a759
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_operation.hpp
@@ -0,0 +1,97 @@
+//
+// detail/win_iocp_operation.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_OPERATION_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_OPERATION_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/detail/handler_tracking.hpp>
+#include <boost/asio/detail/op_queue.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/system/error_code.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class win_iocp_io_service;
+
+// Base class for all operations. A function pointer is used instead of virtual
+// functions to avoid the associated overhead.
+class win_iocp_operation
+  : public OVERLAPPED
+    BOOST_ASIO_ALSO_INHERIT_TRACKED_HANDLER
+{
+public:
+  void complete(win_iocp_io_service& owner,
+      const boost::system::error_code& ec,
+      std::size_t bytes_transferred)
+  {
+    func_(&owner, this, ec, bytes_transferred);
+  }
+
+  void destroy()
+  {
+    func_(0, this, boost::system::error_code(), 0);
+  }
+
+protected:
+  typedef void (*func_type)(
+      win_iocp_io_service*, win_iocp_operation*,
+      const boost::system::error_code&, std::size_t);
+
+  win_iocp_operation(func_type func)
+    : next_(0),
+      func_(func)
+  {
+    reset();
+  }
+
+  // Prevents deletion through this type.
+  ~win_iocp_operation()
+  {
+  }
+
+  void reset()
+  {
+    Internal = 0;
+    InternalHigh = 0;
+    Offset = 0;
+    OffsetHigh = 0;
+    hEvent = 0;
+    ready_ = 0;
+  }
+
+private:
+  friend class op_queue_access;
+  friend class win_iocp_io_service;
+  win_iocp_operation* next_;
+  func_type func_;
+  long ready_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_OPERATION_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_overlapped_op.hpp b/ext/patches/boost/asio/detail/win_iocp_overlapped_op.hpp
new file mode 100644
index 0000000..0e0db76
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_overlapped_op.hpp
@@ -0,0 +1,90 @@
+//
+// detail/win_iocp_overlapped_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_OVERLAPPED_OP_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_OVERLAPPED_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/error.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/operation.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Handler>
+class win_iocp_overlapped_op : public operation
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(win_iocp_overlapped_op);
+
+  win_iocp_overlapped_op(Handler& handler)
+    : operation(&win_iocp_overlapped_op::do_complete),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& ec, std::size_t bytes_transferred)
+  {
+    // Take ownership of the operation object.
+    win_iocp_overlapped_op* o(static_cast<win_iocp_overlapped_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, ec, bytes_transferred);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_OVERLAPPED_OP_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_overlapped_ptr.hpp b/ext/patches/boost/asio/detail/win_iocp_overlapped_ptr.hpp
new file mode 100644
index 0000000..b467db5
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_overlapped_ptr.hpp
@@ -0,0 +1,146 @@
+//
+// detail/win_iocp_overlapped_ptr.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_OVERLAPPED_PTR_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_OVERLAPPED_PTR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/win_iocp_overlapped_op.hpp>
+#include <boost/asio/detail/win_iocp_io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+// Wraps a handler to create an OVERLAPPED object for use with overlapped I/O.
+class win_iocp_overlapped_ptr
+  : private noncopyable
+{
+public:
+  // Construct an empty win_iocp_overlapped_ptr.
+  win_iocp_overlapped_ptr()
+    : ptr_(0),
+      iocp_service_(0)
+  {
+  }
+
+  // Construct an win_iocp_overlapped_ptr to contain the specified handler.
+  template <typename Handler>
+  explicit win_iocp_overlapped_ptr(
+      boost::asio::io_service& io_service, BOOST_ASIO_MOVE_ARG(Handler) handler)
+    : ptr_(0),
+      iocp_service_(0)
+  {
+    this->reset(io_service, BOOST_ASIO_MOVE_CAST(Handler)(handler));
+  }
+
+  // Destructor automatically frees the OVERLAPPED object unless released.
+  ~win_iocp_overlapped_ptr()
+  {
+    reset();
+  }
+
+  // Reset to empty.
+  void reset()
+  {
+    if (ptr_)
+    {
+      ptr_->destroy();
+      ptr_ = 0;
+      iocp_service_->work_finished();
+      iocp_service_ = 0;
+    }
+  }
+
+  // Reset to contain the specified handler, freeing any current OVERLAPPED
+  // object.
+  template <typename Handler>
+  void reset(boost::asio::io_service& io_service, Handler handler)
+  {
+    typedef win_iocp_overlapped_op<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "io_service",
+          &io_service.impl_, "overlapped"));
+
+    io_service.impl_.work_started();
+    reset();
+    ptr_ = p.p;
+    p.v = p.p = 0;
+    iocp_service_ = &io_service.impl_;
+  }
+
+  // Get the contained OVERLAPPED object.
+  OVERLAPPED* get()
+  {
+    return ptr_;
+  }
+
+  // Get the contained OVERLAPPED object.
+  const OVERLAPPED* get() const
+  {
+    return ptr_;
+  }
+
+  // Release ownership of the OVERLAPPED object.
+  OVERLAPPED* release()
+  {
+    if (ptr_)
+      iocp_service_->on_pending(ptr_);
+
+    OVERLAPPED* tmp = ptr_;
+    ptr_ = 0;
+    iocp_service_ = 0;
+    return tmp;
+  }
+
+  // Post completion notification for overlapped operation. Releases ownership.
+  void complete(const boost::system::error_code& ec,
+      std::size_t bytes_transferred)
+  {
+    if (ptr_)
+    {
+      iocp_service_->on_completion(ptr_, ec,
+          static_cast<DWORD>(bytes_transferred));
+      ptr_ = 0;
+      iocp_service_ = 0;
+    }
+  }
+
+private:
+  win_iocp_operation* ptr_;
+  win_iocp_io_service* iocp_service_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_OVERLAPPED_PTR_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_serial_port_service.hpp b/ext/patches/boost/asio/detail/win_iocp_serial_port_service.hpp
new file mode 100644
index 0000000..5e348c2
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_serial_port_service.hpp
@@ -0,0 +1,230 @@
+//
+// detail/win_iocp_serial_port_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2008 Rep Invariant Systems, Inc. (info at repinvariant.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_SERIAL_PORT_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_SERIAL_PORT_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP) && defined(BOOST_ASIO_HAS_SERIAL_PORT)
+
+#include <string>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/detail/win_iocp_handle_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+// Extend win_iocp_handle_service to provide serial port support.
+class win_iocp_serial_port_service
+{
+public:
+  // The native type of a serial port.
+  typedef win_iocp_handle_service::native_handle_type native_handle_type;
+
+  // The implementation type of the serial port.
+  typedef win_iocp_handle_service::implementation_type implementation_type;
+
+  // Constructor.
+  BOOST_ASIO_DECL win_iocp_serial_port_service(
+      boost::asio::io_service& io_service);
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Construct a new serial port implementation.
+  void construct(implementation_type& impl)
+  {
+    handle_service_.construct(impl);
+  }
+
+  // Move-construct a new serial port implementation.
+  void move_construct(implementation_type& impl,
+      implementation_type& other_impl)
+  {
+    handle_service_.move_construct(impl, other_impl);
+  }
+
+  // Move-assign from another serial port implementation.
+  void move_assign(implementation_type& impl,
+      win_iocp_serial_port_service& other_service,
+      implementation_type& other_impl)
+  {
+    handle_service_.move_assign(impl,
+        other_service.handle_service_, other_impl);
+  }
+
+  // Destroy a serial port implementation.
+  void destroy(implementation_type& impl)
+  {
+    handle_service_.destroy(impl);
+  }
+
+  // Open the serial port using the specified device name.
+  BOOST_ASIO_DECL boost::system::error_code open(implementation_type& impl,
+      const std::string& device, boost::system::error_code& ec);
+
+  // Assign a native handle to a serial port implementation.
+  boost::system::error_code assign(implementation_type& impl,
+      const native_handle_type& handle, boost::system::error_code& ec)
+  {
+    return handle_service_.assign(impl, handle, ec);
+  }
+
+  // Determine whether the serial port is open.
+  bool is_open(const implementation_type& impl) const
+  {
+    return handle_service_.is_open(impl);
+  }
+
+  // Destroy a serial port implementation.
+  boost::system::error_code close(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return handle_service_.close(impl, ec);
+  }
+
+  // Get the native serial port representation.
+  native_handle_type native_handle(implementation_type& impl)
+  {
+    return handle_service_.native_handle(impl);
+  }
+
+  // Cancel all operations associated with the handle.
+  boost::system::error_code cancel(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return handle_service_.cancel(impl, ec);
+  }
+
+  // Set an option on the serial port.
+  template <typename SettableSerialPortOption>
+  boost::system::error_code set_option(implementation_type& impl,
+      const SettableSerialPortOption& option, boost::system::error_code& ec)
+  {
+    return do_set_option(impl,
+        &win_iocp_serial_port_service::store_option<SettableSerialPortOption>,
+        &option, ec);
+  }
+
+  // Get an option from the serial port.
+  template <typename GettableSerialPortOption>
+  boost::system::error_code get_option(const implementation_type& impl,
+      GettableSerialPortOption& option, boost::system::error_code& ec) const
+  {
+    return do_get_option(impl,
+        &win_iocp_serial_port_service::load_option<GettableSerialPortOption>,
+        &option, ec);
+  }
+
+  // Send a break sequence to the serial port.
+  boost::system::error_code send_break(implementation_type&,
+      boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Write the given data. Returns the number of bytes sent.
+  template <typename ConstBufferSequence>
+  size_t write_some(implementation_type& impl,
+      const ConstBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return handle_service_.write_some(impl, buffers, ec);
+  }
+
+  // Start an asynchronous write. The data being written must be valid for the
+  // lifetime of the asynchronous operation.
+  template <typename ConstBufferSequence, typename Handler>
+  void async_write_some(implementation_type& impl,
+      const ConstBufferSequence& buffers, Handler& handler)
+  {
+    handle_service_.async_write_some(impl, buffers, handler);
+  }
+
+  // Read some data. Returns the number of bytes received.
+  template <typename MutableBufferSequence>
+  size_t read_some(implementation_type& impl,
+      const MutableBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return handle_service_.read_some(impl, buffers, ec);
+  }
+
+  // Start an asynchronous read. The buffer for the data being received must be
+  // valid for the lifetime of the asynchronous operation.
+  template <typename MutableBufferSequence, typename Handler>
+  void async_read_some(implementation_type& impl,
+      const MutableBufferSequence& buffers, Handler& handler)
+  {
+    handle_service_.async_read_some(impl, buffers, handler);
+  }
+
+private:
+  // Function pointer type for storing a serial port option.
+  typedef boost::system::error_code (*store_function_type)(
+      const void*, ::DCB&, boost::system::error_code&);
+
+  // Helper function template to store a serial port option.
+  template <typename SettableSerialPortOption>
+  static boost::system::error_code store_option(const void* option,
+      ::DCB& storage, boost::system::error_code& ec)
+  {
+    return static_cast<const SettableSerialPortOption*>(option)->store(
+        storage, ec);
+  }
+
+  // Helper function to set a serial port option.
+  BOOST_ASIO_DECL boost::system::error_code do_set_option(
+      implementation_type& impl, store_function_type store,
+      const void* option, boost::system::error_code& ec);
+
+  // Function pointer type for loading a serial port option.
+  typedef boost::system::error_code (*load_function_type)(
+      void*, const ::DCB&, boost::system::error_code&);
+
+  // Helper function template to load a serial port option.
+  template <typename GettableSerialPortOption>
+  static boost::system::error_code load_option(void* option,
+      const ::DCB& storage, boost::system::error_code& ec)
+  {
+    return static_cast<GettableSerialPortOption*>(option)->load(storage, ec);
+  }
+
+  // Helper function to get a serial port option.
+  BOOST_ASIO_DECL boost::system::error_code do_get_option(
+      const implementation_type& impl, load_function_type load,
+      void* option, boost::system::error_code& ec) const;
+
+  // The implementation used for initiating asynchronous operations.
+  win_iocp_handle_service handle_service_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/win_iocp_serial_port_service.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_HAS_IOCP) && defined(BOOST_ASIO_HAS_SERIAL_PORT)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_SERIAL_PORT_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_socket_accept_op.hpp b/ext/patches/boost/asio/detail/win_iocp_socket_accept_op.hpp
new file mode 100644
index 0000000..a860c52
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_socket_accept_op.hpp
@@ -0,0 +1,167 @@
+//
+// detail/win_iocp_socket_accept_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_ACCEPT_OP_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_ACCEPT_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/operation.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/win_iocp_socket_service_base.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Socket, typename Protocol, typename Handler>
+class win_iocp_socket_accept_op : public operation
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(win_iocp_socket_accept_op);
+
+  win_iocp_socket_accept_op(win_iocp_socket_service_base& socket_service,
+      socket_type socket, Socket& peer, const Protocol& protocol,
+      typename Protocol::endpoint* peer_endpoint,
+      bool enable_connection_aborted, Handler& handler)
+    : operation(&win_iocp_socket_accept_op::do_complete),
+      socket_service_(socket_service),
+      socket_(socket),
+      peer_(peer),
+      protocol_(protocol),
+      peer_endpoint_(peer_endpoint),
+      enable_connection_aborted_(enable_connection_aborted),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  socket_holder& new_socket()
+  {
+    return new_socket_;
+  }
+
+  void* output_buffer()
+  {
+    return output_buffer_;
+  }
+
+  DWORD address_length()
+  {
+    return sizeof(sockaddr_storage_type) + 16;
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& result_ec,
+      std::size_t /*bytes_transferred*/)
+  {
+    boost::system::error_code ec(result_ec);
+
+    // Take ownership of the operation object.
+    win_iocp_socket_accept_op* o(static_cast<win_iocp_socket_accept_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    if (owner)
+    {
+      typename Protocol::endpoint peer_endpoint;
+      std::size_t addr_len = peer_endpoint.capacity();
+      socket_ops::complete_iocp_accept(o->socket_,
+          o->output_buffer(), o->address_length(),
+          peer_endpoint.data(), &addr_len,
+          o->new_socket_.get(), ec);
+
+      // Restart the accept operation if we got the connection_aborted error
+      // and the enable_connection_aborted socket option is not set.
+      if (ec == boost::asio::error::connection_aborted
+          && !o->enable_connection_aborted_)
+      {
+        o->reset();
+        o->socket_service_.restart_accept_op(o->socket_,
+            o->new_socket_, o->protocol_.family(),
+            o->protocol_.type(), o->protocol_.protocol(),
+            o->output_buffer(), o->address_length(), o);
+        p.v = p.p = 0;
+        return;
+      }
+
+      // If the socket was successfully accepted, transfer ownership of the
+      // socket to the peer object.
+      if (!ec)
+      {
+        o->peer_.assign(o->protocol_,
+            typename Socket::native_handle_type(
+              o->new_socket_.get(), peer_endpoint), ec);
+        if (!ec)
+          o->new_socket_.release();
+      }
+
+      // Pass endpoint back to caller.
+      if (o->peer_endpoint_)
+        *o->peer_endpoint_ = peer_endpoint;
+    }
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder1<Handler, boost::system::error_code>
+      handler(o->handler_, ec);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  win_iocp_socket_service_base& socket_service_;
+  socket_type socket_;
+  socket_holder new_socket_;
+  Socket& peer_;
+  Protocol protocol_;
+  typename Protocol::endpoint* peer_endpoint_;
+  unsigned char output_buffer_[(sizeof(sockaddr_storage_type) + 16) * 2];
+  bool enable_connection_aborted_;
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_ACCEPT_OP_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_socket_connect_op.hpp b/ext/patches/boost/asio/detail/win_iocp_socket_connect_op.hpp
new file mode 100644
index 0000000..fc78da0
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_socket_connect_op.hpp
@@ -0,0 +1,126 @@
+//
+// detail/win_iocp_socket_connect_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_CONNECT_OP_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_CONNECT_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class win_iocp_socket_connect_op_base : public reactor_op
+{
+public:
+  win_iocp_socket_connect_op_base(socket_type socket, func_type complete_func)
+    : reactor_op(&win_iocp_socket_connect_op_base::do_perform, complete_func),
+      socket_(socket),
+      connect_ex_(false)
+  {
+  }
+
+  static bool do_perform(reactor_op* base)
+  {
+    win_iocp_socket_connect_op_base* o(
+        static_cast<win_iocp_socket_connect_op_base*>(base));
+
+    return socket_ops::non_blocking_connect(o->socket_, o->ec_);
+  }
+
+  socket_type socket_;
+  bool connect_ex_;
+};
+
+template <typename Handler>
+class win_iocp_socket_connect_op : public win_iocp_socket_connect_op_base
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(win_iocp_socket_connect_op);
+
+  win_iocp_socket_connect_op(socket_type socket, Handler& handler)
+    : win_iocp_socket_connect_op_base(socket,
+        &win_iocp_socket_connect_op::do_complete),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& result_ec,
+      std::size_t /*bytes_transferred*/)
+  {
+    boost::system::error_code ec(result_ec);
+
+    // Take ownership of the operation object.
+    win_iocp_socket_connect_op* o(
+        static_cast<win_iocp_socket_connect_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    if (owner)
+    {
+      if (o->connect_ex_)
+        socket_ops::complete_iocp_connect(o->socket_, ec);
+      else
+        ec = o->ec_;
+    }
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder1<Handler, boost::system::error_code>
+      handler(o->handler_, ec);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_CONNECT_OP_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_socket_recv_op.hpp b/ext/patches/boost/asio/detail/win_iocp_socket_recv_op.hpp
new file mode 100644
index 0000000..035dc4b
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_socket_recv_op.hpp
@@ -0,0 +1,117 @@
+//
+// detail/win_iocp_socket_recv_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_RECV_OP_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_RECV_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/operation.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename MutableBufferSequence, typename Handler>
+class win_iocp_socket_recv_op : public operation
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(win_iocp_socket_recv_op);
+
+  win_iocp_socket_recv_op(socket_ops::state_type state,
+      socket_ops::weak_cancel_token_type cancel_token,
+      const MutableBufferSequence& buffers, Handler& handler)
+    : operation(&win_iocp_socket_recv_op::do_complete),
+      state_(state),
+      cancel_token_(cancel_token),
+      buffers_(buffers),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& result_ec,
+      std::size_t bytes_transferred)
+  {
+    boost::system::error_code ec(result_ec);
+
+    // Take ownership of the operation object.
+    win_iocp_socket_recv_op* o(static_cast<win_iocp_socket_recv_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+    // Check whether buffers are still valid.
+    if (owner)
+    {
+      buffer_sequence_adapter<boost::asio::mutable_buffer,
+          MutableBufferSequence>::validate(o->buffers_);
+    }
+#endif // defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+
+    socket_ops::complete_iocp_recv(o->state_, o->cancel_token_,
+        buffer_sequence_adapter<boost::asio::mutable_buffer,
+          MutableBufferSequence>::all_empty(o->buffers_),
+        ec, bytes_transferred);
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, ec, bytes_transferred);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  socket_ops::state_type state_;
+  socket_ops::weak_cancel_token_type cancel_token_;
+  MutableBufferSequence buffers_;
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_RECV_OP_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_socket_recvfrom_op.hpp b/ext/patches/boost/asio/detail/win_iocp_socket_recvfrom_op.hpp
new file mode 100644
index 0000000..35c4033
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_socket_recvfrom_op.hpp
@@ -0,0 +1,125 @@
+//
+// detail/win_iocp_socket_recvfrom_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_RECVFROM_OP_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_RECVFROM_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/operation.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename MutableBufferSequence, typename Endpoint, typename Handler>
+class win_iocp_socket_recvfrom_op : public operation
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(win_iocp_socket_recvfrom_op);
+
+  win_iocp_socket_recvfrom_op(Endpoint& endpoint,
+      socket_ops::weak_cancel_token_type cancel_token,
+      const MutableBufferSequence& buffers, Handler& handler)
+    : operation(&win_iocp_socket_recvfrom_op::do_complete),
+      endpoint_(endpoint),
+      endpoint_size_(static_cast<int>(endpoint.capacity())),
+      cancel_token_(cancel_token),
+      buffers_(buffers),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  int& endpoint_size()
+  {
+    return endpoint_size_;
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& result_ec,
+      std::size_t bytes_transferred)
+  {
+    boost::system::error_code ec(result_ec);
+
+    // Take ownership of the operation object.
+    win_iocp_socket_recvfrom_op* o(
+        static_cast<win_iocp_socket_recvfrom_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+    // Check whether buffers are still valid.
+    if (owner)
+    {
+      buffer_sequence_adapter<boost::asio::mutable_buffer,
+          MutableBufferSequence>::validate(o->buffers_);
+    }
+#endif // defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+
+    socket_ops::complete_iocp_recvfrom(o->cancel_token_, ec);
+
+    // Record the size of the endpoint returned by the operation.
+    o->endpoint_.resize(o->endpoint_size_);
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, ec, bytes_transferred);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  Endpoint& endpoint_;
+  int endpoint_size_;
+  socket_ops::weak_cancel_token_type cancel_token_;
+  MutableBufferSequence buffers_;
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_RECVFROM_OP_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_socket_recvmsg_op.hpp b/ext/patches/boost/asio/detail/win_iocp_socket_recvmsg_op.hpp
new file mode 100644
index 0000000..1e895ce
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_socket_recvmsg_op.hpp
@@ -0,0 +1,118 @@
+//
+// detail/win_iocp_socket_recvmsg_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_RECVMSG_OP_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_RECVMSG_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/operation.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/socket_base.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename MutableBufferSequence, typename Handler>
+class win_iocp_socket_recvmsg_op : public operation
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(win_iocp_socket_recvmsg_op);
+
+  win_iocp_socket_recvmsg_op(
+      socket_ops::weak_cancel_token_type cancel_token,
+      const MutableBufferSequence& buffers,
+      socket_base::message_flags& out_flags, Handler& handler)
+    : operation(&win_iocp_socket_recvmsg_op::do_complete),
+      cancel_token_(cancel_token),
+      buffers_(buffers),
+      out_flags_(out_flags),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& result_ec,
+      std::size_t bytes_transferred)
+  {
+    boost::system::error_code ec(result_ec);
+
+    // Take ownership of the operation object.
+    win_iocp_socket_recvmsg_op* o(
+        static_cast<win_iocp_socket_recvmsg_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+    // Check whether buffers are still valid.
+    if (owner)
+    {
+      buffer_sequence_adapter<boost::asio::mutable_buffer,
+          MutableBufferSequence>::validate(o->buffers_);
+    }
+#endif // defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+
+    socket_ops::complete_iocp_recvmsg(o->cancel_token_, ec);
+    o->out_flags_ = 0;
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, ec, bytes_transferred);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  socket_ops::weak_cancel_token_type cancel_token_;
+  MutableBufferSequence buffers_;
+  socket_base::message_flags& out_flags_;
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_RECVMSG_OP_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_socket_send_op.hpp b/ext/patches/boost/asio/detail/win_iocp_socket_send_op.hpp
new file mode 100644
index 0000000..844d28b
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_socket_send_op.hpp
@@ -0,0 +1,111 @@
+//
+// detail/win_iocp_socket_send_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_SEND_OP_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_SEND_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/operation.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename ConstBufferSequence, typename Handler>
+class win_iocp_socket_send_op : public operation
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(win_iocp_socket_send_op);
+
+  win_iocp_socket_send_op(socket_ops::weak_cancel_token_type cancel_token,
+      const ConstBufferSequence& buffers, Handler& handler)
+    : operation(&win_iocp_socket_send_op::do_complete),
+      cancel_token_(cancel_token),
+      buffers_(buffers),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code& result_ec,
+      std::size_t bytes_transferred)
+  {
+    boost::system::error_code ec(result_ec);
+
+    // Take ownership of the operation object.
+    win_iocp_socket_send_op* o(static_cast<win_iocp_socket_send_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+    // Check whether buffers are still valid.
+    if (owner)
+    {
+      buffer_sequence_adapter<boost::asio::const_buffer,
+          ConstBufferSequence>::validate(o->buffers_);
+    }
+#endif // defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+
+    socket_ops::complete_iocp_send(o->cancel_token_, ec);
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, ec, bytes_transferred);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  socket_ops::weak_cancel_token_type cancel_token_;
+  ConstBufferSequence buffers_;
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_SEND_OP_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_socket_service.hpp b/ext/patches/boost/asio/detail/win_iocp_socket_service.hpp
new file mode 100644
index 0000000..4594adc
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_socket_service.hpp
@@ -0,0 +1,527 @@
+//
+// detail/win_iocp_socket_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <cstring>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/socket_base.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/mutex.hpp>
+#include <boost/asio/detail/operation.hpp>
+#include <boost/asio/detail/reactor.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/socket_holder.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/win_iocp_io_service.hpp>
+#include <boost/asio/detail/win_iocp_null_buffers_op.hpp>
+#include <boost/asio/detail/win_iocp_socket_accept_op.hpp>
+#include <boost/asio/detail/win_iocp_socket_connect_op.hpp>
+#include <boost/asio/detail/win_iocp_socket_recvfrom_op.hpp>
+#include <boost/asio/detail/win_iocp_socket_send_op.hpp>
+#include <boost/asio/detail/win_iocp_socket_service_base.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Protocol>
+class win_iocp_socket_service : public win_iocp_socket_service_base
+{
+public:
+  // The protocol type.
+  typedef Protocol protocol_type;
+
+  // The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+  // The native type of a socket.
+  class native_handle_type
+  {
+  public:
+    native_handle_type(socket_type s)
+      : socket_(s),
+        have_remote_endpoint_(false)
+    {
+    }
+
+    native_handle_type(socket_type s, const endpoint_type& ep)
+      : socket_(s),
+        have_remote_endpoint_(true),
+        remote_endpoint_(ep)
+    {
+    }
+
+    void operator=(socket_type s)
+    {
+      socket_ = s;
+      have_remote_endpoint_ = false;
+      remote_endpoint_ = endpoint_type();
+    }
+
+    operator socket_type() const
+    {
+      return socket_;
+    }
+
+    bool have_remote_endpoint() const
+    {
+      return have_remote_endpoint_;
+    }
+
+    endpoint_type remote_endpoint() const
+    {
+      return remote_endpoint_;
+    }
+
+  private:
+    socket_type socket_;
+    bool have_remote_endpoint_;
+    endpoint_type remote_endpoint_;
+  };
+
+  // The implementation type of the socket.
+  struct implementation_type :
+    win_iocp_socket_service_base::base_implementation_type
+  {
+    // Default constructor.
+    implementation_type()
+      : protocol_(endpoint_type().protocol()),
+        have_remote_endpoint_(false),
+        remote_endpoint_()
+    {
+    }
+
+    // The protocol associated with the socket.
+    protocol_type protocol_;
+
+    // Whether we have a cached remote endpoint.
+    bool have_remote_endpoint_;
+
+    // A cached remote endpoint.
+    endpoint_type remote_endpoint_;
+  };
+
+  // Constructor.
+  win_iocp_socket_service(boost::asio::io_service& io_service)
+    : win_iocp_socket_service_base(io_service)
+  {
+  }
+
+  // Move-construct a new socket implementation.
+  void move_construct(implementation_type& impl,
+      implementation_type& other_impl)
+  {
+    this->base_move_construct(impl, other_impl);
+
+    impl.protocol_ = other_impl.protocol_;
+    other_impl.protocol_ = endpoint_type().protocol();
+
+    impl.have_remote_endpoint_ = other_impl.have_remote_endpoint_;
+    other_impl.have_remote_endpoint_ = false;
+
+    impl.remote_endpoint_ = other_impl.remote_endpoint_;
+    other_impl.remote_endpoint_ = endpoint_type();
+  }
+
+  // Move-assign from another socket implementation.
+  void move_assign(implementation_type& impl,
+      win_iocp_socket_service_base& other_service,
+      implementation_type& other_impl)
+  {
+    this->base_move_assign(impl, other_service, other_impl);
+
+    impl.protocol_ = other_impl.protocol_;
+    other_impl.protocol_ = endpoint_type().protocol();
+
+    impl.have_remote_endpoint_ = other_impl.have_remote_endpoint_;
+    other_impl.have_remote_endpoint_ = false;
+
+    impl.remote_endpoint_ = other_impl.remote_endpoint_;
+    other_impl.remote_endpoint_ = endpoint_type();
+  }
+
+  // Move-construct a new socket implementation from another protocol type.
+  template <typename Protocol1>
+  void converting_move_construct(implementation_type& impl,
+      typename win_iocp_socket_service<
+        Protocol1>::implementation_type& other_impl)
+  {
+    this->base_move_construct(impl, other_impl);
+
+    impl.protocol_ = protocol_type(other_impl.protocol_);
+    other_impl.protocol_ = typename Protocol1::endpoint().protocol();
+
+    impl.have_remote_endpoint_ = other_impl.have_remote_endpoint_;
+    other_impl.have_remote_endpoint_ = false;
+
+    impl.remote_endpoint_ = other_impl.remote_endpoint_;
+    other_impl.remote_endpoint_ = typename Protocol1::endpoint();
+  }
+
+  // Open a new socket implementation.
+  boost::system::error_code open(implementation_type& impl,
+      const protocol_type& protocol, boost::system::error_code& ec)
+  {
+    if (!do_open(impl, protocol.family(),
+          protocol.type(), protocol.protocol(), ec))
+    {
+      impl.protocol_ = protocol;
+      impl.have_remote_endpoint_ = false;
+      impl.remote_endpoint_ = endpoint_type();
+    }
+    return ec;
+  }
+
+  // Assign a native socket to a socket implementation.
+  boost::system::error_code assign(implementation_type& impl,
+      const protocol_type& protocol, const native_handle_type& native_socket,
+      boost::system::error_code& ec)
+  {
+    if (!do_assign(impl, protocol.type(), native_socket, ec))
+    {
+      impl.protocol_ = protocol;
+      impl.have_remote_endpoint_ = native_socket.have_remote_endpoint();
+      impl.remote_endpoint_ = native_socket.remote_endpoint();
+    }
+    return ec;
+  }
+
+  // Get the native socket representation.
+  native_handle_type native_handle(implementation_type& impl)
+  {
+    if (impl.have_remote_endpoint_)
+      return native_handle_type(impl.socket_, impl.remote_endpoint_);
+    return native_handle_type(impl.socket_);
+  }
+
+  // Bind the socket to the specified local endpoint.
+  boost::system::error_code bind(implementation_type& impl,
+      const endpoint_type& endpoint, boost::system::error_code& ec)
+  {
+    socket_ops::bind(impl.socket_, endpoint.data(), endpoint.size(), ec);
+    return ec;
+  }
+
+  // Set a socket option.
+  template <typename Option>
+  boost::system::error_code set_option(implementation_type& impl,
+      const Option& option, boost::system::error_code& ec)
+  {
+    socket_ops::setsockopt(impl.socket_, impl.state_,
+        option.level(impl.protocol_), option.name(impl.protocol_),
+        option.data(impl.protocol_), option.size(impl.protocol_), ec);
+    return ec;
+  }
+
+  // Set a socket option.
+  template <typename Option>
+  boost::system::error_code get_option(const implementation_type& impl,
+      Option& option, boost::system::error_code& ec) const
+  {
+    std::size_t size = option.size(impl.protocol_);
+    socket_ops::getsockopt(impl.socket_, impl.state_,
+        option.level(impl.protocol_), option.name(impl.protocol_),
+        option.data(impl.protocol_), &size, ec);
+    if (!ec)
+      option.resize(impl.protocol_, size);
+    return ec;
+  }
+
+  // Get the local endpoint.
+  endpoint_type local_endpoint(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    endpoint_type endpoint;
+    std::size_t addr_len = endpoint.capacity();
+    if (socket_ops::getsockname(impl.socket_, endpoint.data(), &addr_len, ec))
+      return endpoint_type();
+    endpoint.resize(addr_len);
+    return endpoint;
+  }
+
+  // Get the remote endpoint.
+  endpoint_type remote_endpoint(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    endpoint_type endpoint = impl.remote_endpoint_;
+    std::size_t addr_len = endpoint.capacity();
+    if (socket_ops::getpeername(impl.socket_, endpoint.data(),
+          &addr_len, impl.have_remote_endpoint_, ec))
+      return endpoint_type();
+    endpoint.resize(addr_len);
+    return endpoint;
+  }
+
+  // Send a datagram to the specified endpoint. Returns the number of bytes
+  // sent.
+  template <typename ConstBufferSequence>
+  size_t send_to(implementation_type& impl, const ConstBufferSequence& buffers,
+      const endpoint_type& destination, socket_base::message_flags flags,
+      boost::system::error_code& ec)
+  {
+    buffer_sequence_adapter<boost::asio::const_buffer,
+        ConstBufferSequence> bufs(buffers);
+
+    return socket_ops::sync_sendto(impl.socket_, impl.state_,
+        bufs.buffers(), bufs.count(), flags,
+        destination.data(), destination.size(), ec);
+  }
+
+  // Wait until data can be sent without blocking.
+  size_t send_to(implementation_type& impl, const null_buffers&,
+      const endpoint_type&, socket_base::message_flags,
+      boost::system::error_code& ec)
+  {
+    // Wait for socket to become ready.
+    socket_ops::poll_write(impl.socket_, impl.state_, ec);
+
+    return 0;
+  }
+
+  // Start an asynchronous send. The data being sent must be valid for the
+  // lifetime of the asynchronous operation.
+  template <typename ConstBufferSequence, typename Handler>
+  void async_send_to(implementation_type& impl,
+      const ConstBufferSequence& buffers, const endpoint_type& destination,
+      socket_base::message_flags flags, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef win_iocp_socket_send_op<ConstBufferSequence, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.cancel_token_, buffers, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_send_to"));
+
+    buffer_sequence_adapter<boost::asio::const_buffer,
+        ConstBufferSequence> bufs(buffers);
+
+    start_send_to_op(impl, bufs.buffers(), bufs.count(),
+        destination.data(), static_cast<int>(destination.size()),
+        flags, p.p);
+    p.v = p.p = 0;
+  }
+
+  // Start an asynchronous wait until data can be sent without blocking.
+  template <typename Handler>
+  void async_send_to(implementation_type& impl, const null_buffers&,
+      const endpoint_type&, socket_base::message_flags, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef win_iocp_null_buffers_op<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.cancel_token_, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket",
+          &impl, "async_send_to(null_buffers)"));
+
+    start_reactor_op(impl, reactor::write_op, p.p);
+    p.v = p.p = 0;
+  }
+
+  // Receive a datagram with the endpoint of the sender. Returns the number of
+  // bytes received.
+  template <typename MutableBufferSequence>
+  size_t receive_from(implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      endpoint_type& sender_endpoint, socket_base::message_flags flags,
+      boost::system::error_code& ec)
+  {
+    buffer_sequence_adapter<boost::asio::mutable_buffer,
+        MutableBufferSequence> bufs(buffers);
+
+    std::size_t addr_len = sender_endpoint.capacity();
+    std::size_t bytes_recvd = socket_ops::sync_recvfrom(
+        impl.socket_, impl.state_, bufs.buffers(), bufs.count(),
+        flags, sender_endpoint.data(), &addr_len, ec);
+
+    if (!ec)
+      sender_endpoint.resize(addr_len);
+
+    return bytes_recvd;
+  }
+
+  // Wait until data can be received without blocking.
+  size_t receive_from(implementation_type& impl,
+      const null_buffers&, endpoint_type& sender_endpoint,
+      socket_base::message_flags, boost::system::error_code& ec)
+  {
+    // Wait for socket to become ready.
+    socket_ops::poll_read(impl.socket_, impl.state_, ec);
+
+    // Reset endpoint since it can be given no sensible value at this time.
+    sender_endpoint = endpoint_type();
+
+    return 0;
+  }
+
+  // Start an asynchronous receive. The buffer for the data being received and
+  // the sender_endpoint object must both be valid for the lifetime of the
+  // asynchronous operation.
+  template <typename MutableBufferSequence, typename Handler>
+  void async_receive_from(implementation_type& impl,
+      const MutableBufferSequence& buffers, endpoint_type& sender_endp,
+      socket_base::message_flags flags, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef win_iocp_socket_recvfrom_op<
+      MutableBufferSequence, endpoint_type, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(sender_endp, impl.cancel_token_, buffers, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_receive_from"));
+
+    buffer_sequence_adapter<boost::asio::mutable_buffer,
+        MutableBufferSequence> bufs(buffers);
+
+    start_receive_from_op(impl, bufs.buffers(), bufs.count(),
+        sender_endp.data(), flags, &p.p->endpoint_size(), p.p);
+    p.v = p.p = 0;
+  }
+
+  // Wait until data can be received without blocking.
+  template <typename Handler>
+  void async_receive_from(implementation_type& impl,
+      const null_buffers&, endpoint_type& sender_endpoint,
+      socket_base::message_flags flags, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef win_iocp_null_buffers_op<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.cancel_token_, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl,
+          "async_receive_from(null_buffers)"));
+
+    // Reset endpoint since it can be given no sensible value at this time.
+    sender_endpoint = endpoint_type();
+
+    start_null_buffers_receive_op(impl, flags, p.p);
+    p.v = p.p = 0;
+  }
+
+  // Accept a new connection.
+  template <typename Socket>
+  boost::system::error_code accept(implementation_type& impl, Socket& peer,
+      endpoint_type* peer_endpoint, boost::system::error_code& ec)
+  {
+    // We cannot accept a socket that is already open.
+    if (peer.is_open())
+    {
+      ec = boost::asio::error::already_open;
+      return ec;
+    }
+
+    std::size_t addr_len = peer_endpoint ? peer_endpoint->capacity() : 0;
+    socket_holder new_socket(socket_ops::sync_accept(impl.socket_,
+          impl.state_, peer_endpoint ? peer_endpoint->data() : 0,
+          peer_endpoint ? &addr_len : 0, ec));
+
+    // On success, assign new connection to peer socket object.
+    if (new_socket.get() != invalid_socket)
+    {
+      if (peer_endpoint)
+        peer_endpoint->resize(addr_len);
+      if (!peer.assign(impl.protocol_, new_socket.get(), ec))
+        new_socket.release();
+    }
+
+    return ec;
+  }
+
+  // Start an asynchronous accept. The peer and peer_endpoint objects
+  // must be valid until the accept's handler is invoked.
+  template <typename Socket, typename Handler>
+  void async_accept(implementation_type& impl, Socket& peer,
+      endpoint_type* peer_endpoint, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef win_iocp_socket_accept_op<Socket, protocol_type, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    bool enable_connection_aborted =
+      (impl.state_ & socket_ops::enable_connection_aborted) != 0;
+    p.p = new (p.v) op(*this, impl.socket_, peer, impl.protocol_,
+        peer_endpoint, enable_connection_aborted, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_accept"));
+
+    start_accept_op(impl, peer.is_open(), p.p->new_socket(),
+        impl.protocol_.family(), impl.protocol_.type(),
+        impl.protocol_.protocol(), p.p->output_buffer(),
+        p.p->address_length(), p.p);
+    p.v = p.p = 0;
+  }
+
+  // Connect the socket to the specified endpoint.
+  boost::system::error_code connect(implementation_type& impl,
+      const endpoint_type& peer_endpoint, boost::system::error_code& ec)
+  {
+    socket_ops::sync_connect(impl.socket_,
+        peer_endpoint.data(), peer_endpoint.size(), ec);
+    return ec;
+  }
+
+  // Start an asynchronous connect.
+  template <typename Handler>
+  void async_connect(implementation_type& impl,
+      const endpoint_type& peer_endpoint, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef win_iocp_socket_connect_op<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.socket_, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_connect"));
+
+    start_connect_op(impl, impl.protocol_.family(), impl.protocol_.type(),
+        peer_endpoint.data(), static_cast<int>(peer_endpoint.size()), p.p);
+    p.v = p.p = 0;
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_socket_service_base.hpp b/ext/patches/boost/asio/detail/win_iocp_socket_service_base.hpp
new file mode 100644
index 0000000..f0fa055
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_socket_service_base.hpp
@@ -0,0 +1,526 @@
+//
+// detail/win_iocp_socket_service_base.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_SERVICE_BASE_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_SERVICE_BASE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/socket_base.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/mutex.hpp>
+#include <boost/asio/detail/operation.hpp>
+#include <boost/asio/detail/reactor.hpp>
+#include <boost/asio/detail/reactor_op.hpp>
+#include <boost/asio/detail/socket_holder.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/win_iocp_io_service.hpp>
+#include <boost/asio/detail/win_iocp_null_buffers_op.hpp>
+#include <boost/asio/detail/win_iocp_socket_connect_op.hpp>
+#include <boost/asio/detail/win_iocp_socket_send_op.hpp>
+#include <boost/asio/detail/win_iocp_socket_recv_op.hpp>
+#include <boost/asio/detail/win_iocp_socket_recvmsg_op.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class win_iocp_socket_service_base
+{
+public:
+  // The implementation type of the socket.
+  struct base_implementation_type
+  {
+    // The native socket representation.
+    socket_type socket_;
+
+    // The current state of the socket.
+    socket_ops::state_type state_;
+
+    // We use a shared pointer as a cancellation token here to work around the
+    // broken Windows support for cancellation. MSDN says that when you call
+    // closesocket any outstanding WSARecv or WSASend operations will complete
+    // with the error ERROR_OPERATION_ABORTED. In practice they complete with
+    // ERROR_NETNAME_DELETED, which means you can't tell the difference between
+    // a local cancellation and the socket being hard-closed by the peer.
+    socket_ops::shared_cancel_token_type cancel_token_;
+
+    // Per-descriptor data used by the reactor.
+    reactor::per_descriptor_data reactor_data_;
+
+#if defined(BOOST_ASIO_ENABLE_CANCELIO)
+    // The ID of the thread from which it is safe to cancel asynchronous
+    // operations. 0 means no asynchronous operations have been started yet.
+    // ~0 means asynchronous operations have been started from more than one
+    // thread, and cancellation is not supported for the socket.
+    DWORD safe_cancellation_thread_id_;
+#endif // defined(BOOST_ASIO_ENABLE_CANCELIO)
+
+    // Pointers to adjacent socket implementations in linked list.
+    base_implementation_type* next_;
+    base_implementation_type* prev_;
+  };
+
+  // Constructor.
+  BOOST_ASIO_DECL win_iocp_socket_service_base(
+      boost::asio::io_service& io_service);
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Construct a new socket implementation.
+  BOOST_ASIO_DECL void construct(base_implementation_type& impl);
+
+  // Move-construct a new socket implementation.
+  BOOST_ASIO_DECL void base_move_construct(base_implementation_type& impl,
+      base_implementation_type& other_impl);
+
+  // Move-assign from another socket implementation.
+  BOOST_ASIO_DECL void base_move_assign(base_implementation_type& impl,
+      win_iocp_socket_service_base& other_service,
+      base_implementation_type& other_impl);
+
+  // Destroy a socket implementation.
+  BOOST_ASIO_DECL void destroy(base_implementation_type& impl);
+
+  // Determine whether the socket is open.
+  bool is_open(const base_implementation_type& impl) const
+  {
+    return impl.socket_ != invalid_socket;
+  }
+
+  // Destroy a socket implementation.
+  BOOST_ASIO_DECL boost::system::error_code close(
+      base_implementation_type& impl, boost::system::error_code& ec);
+
+  // Cancel all operations associated with the socket.
+  BOOST_ASIO_DECL boost::system::error_code cancel(
+      base_implementation_type& impl, boost::system::error_code& ec);
+
+  // Determine whether the socket is at the out-of-band data mark.
+  bool at_mark(const base_implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return socket_ops::sockatmark(impl.socket_, ec);
+  }
+
+  // Determine the number of bytes available for reading.
+  std::size_t available(const base_implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return socket_ops::available(impl.socket_, ec);
+  }
+
+  // Place the socket into the state where it will listen for new connections.
+  boost::system::error_code listen(base_implementation_type& impl,
+      int backlog, boost::system::error_code& ec)
+  {
+    socket_ops::listen(impl.socket_, backlog, ec);
+    return ec;
+  }
+
+  // Perform an IO control command on the socket.
+  template <typename IO_Control_Command>
+  boost::system::error_code io_control(base_implementation_type& impl,
+      IO_Control_Command& command, boost::system::error_code& ec)
+  {
+    socket_ops::ioctl(impl.socket_, impl.state_, command.name(),
+        static_cast<ioctl_arg_type*>(command.data()), ec);
+    return ec;
+  }
+
+  // Gets the non-blocking mode of the socket.
+  bool non_blocking(const base_implementation_type& impl) const
+  {
+    return (impl.state_ & socket_ops::user_set_non_blocking) != 0;
+  }
+
+  // Sets the non-blocking mode of the socket.
+  boost::system::error_code non_blocking(base_implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    socket_ops::set_user_non_blocking(impl.socket_, impl.state_, mode, ec);
+    return ec;
+  }
+
+  // Gets the non-blocking mode of the native socket implementation.
+  bool native_non_blocking(const base_implementation_type& impl) const
+  {
+    return (impl.state_ & socket_ops::internal_non_blocking) != 0;
+  }
+
+  // Sets the non-blocking mode of the native socket implementation.
+  boost::system::error_code native_non_blocking(base_implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    socket_ops::set_internal_non_blocking(impl.socket_, impl.state_, mode, ec);
+    return ec;
+  }
+
+  // Disable sends or receives on the socket.
+  boost::system::error_code shutdown(base_implementation_type& impl,
+      socket_base::shutdown_type what, boost::system::error_code& ec)
+  {
+    socket_ops::shutdown(impl.socket_, what, ec);
+    return ec;
+  }
+
+  // Send the given data to the peer. Returns the number of bytes sent.
+  template <typename ConstBufferSequence>
+  size_t send(base_implementation_type& impl,
+      const ConstBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    buffer_sequence_adapter<boost::asio::const_buffer,
+        ConstBufferSequence> bufs(buffers);
+
+    return socket_ops::sync_send(impl.socket_, impl.state_,
+        bufs.buffers(), bufs.count(), flags, bufs.all_empty(), ec);
+  }
+
+  // Wait until data can be sent without blocking.
+  size_t send(base_implementation_type& impl, const null_buffers&,
+      socket_base::message_flags, boost::system::error_code& ec)
+  {
+    // Wait for socket to become ready.
+    socket_ops::poll_write(impl.socket_, impl.state_, ec);
+
+    return 0;
+  }
+
+  // Start an asynchronous send. The data being sent must be valid for the
+  // lifetime of the asynchronous operation.
+  template <typename ConstBufferSequence, typename Handler>
+  void async_send(base_implementation_type& impl,
+      const ConstBufferSequence& buffers,
+      socket_base::message_flags flags, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef win_iocp_socket_send_op<ConstBufferSequence, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.cancel_token_, buffers, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_send"));
+
+    buffer_sequence_adapter<boost::asio::const_buffer,
+        ConstBufferSequence> bufs(buffers);
+
+    start_send_op(impl, bufs.buffers(), bufs.count(), flags,
+        (impl.state_ & socket_ops::stream_oriented) != 0 && bufs.all_empty(),
+        p.p);
+    p.v = p.p = 0;
+  }
+
+  // Start an asynchronous wait until data can be sent without blocking.
+  template <typename Handler>
+  void async_send(base_implementation_type& impl, const null_buffers&,
+      socket_base::message_flags, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef win_iocp_null_buffers_op<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.cancel_token_, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket",
+          &impl, "async_send(null_buffers)"));
+
+    start_reactor_op(impl, reactor::write_op, p.p);
+    p.v = p.p = 0;
+  }
+
+  // Receive some data from the peer. Returns the number of bytes received.
+  template <typename MutableBufferSequence>
+  size_t receive(base_implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    buffer_sequence_adapter<boost::asio::mutable_buffer,
+        MutableBufferSequence> bufs(buffers);
+
+    return socket_ops::sync_recv(impl.socket_, impl.state_,
+        bufs.buffers(), bufs.count(), flags, bufs.all_empty(), ec);
+  }
+
+  // Wait until data can be received without blocking.
+  size_t receive(base_implementation_type& impl, const null_buffers&,
+      socket_base::message_flags, boost::system::error_code& ec)
+  {
+    // Wait for socket to become ready.
+    socket_ops::poll_read(impl.socket_, impl.state_, ec);
+
+    return 0;
+  }
+
+  // Start an asynchronous receive. The buffer for the data being received
+  // must be valid for the lifetime of the asynchronous operation.
+  template <typename MutableBufferSequence, typename Handler>
+  void async_receive(base_implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      socket_base::message_flags flags, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef win_iocp_socket_recv_op<MutableBufferSequence, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.state_, impl.cancel_token_, buffers, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_receive"));
+
+    buffer_sequence_adapter<boost::asio::mutable_buffer,
+        MutableBufferSequence> bufs(buffers);
+
+    start_receive_op(impl, bufs.buffers(), bufs.count(), flags,
+        (impl.state_ & socket_ops::stream_oriented) != 0 && bufs.all_empty(),
+        p.p);
+    p.v = p.p = 0;
+  }
+
+  // Wait until data can be received without blocking.
+  template <typename Handler>
+  void async_receive(base_implementation_type& impl, const null_buffers&,
+      socket_base::message_flags flags, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef win_iocp_null_buffers_op<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.cancel_token_, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket",
+          &impl, "async_receive(null_buffers)"));
+
+    start_null_buffers_receive_op(impl, flags, p.p);
+    p.v = p.p = 0;
+  }
+
+  // Receive some data with associated flags. Returns the number of bytes
+  // received.
+  template <typename MutableBufferSequence>
+  size_t receive_with_flags(base_implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      socket_base::message_flags in_flags,
+      socket_base::message_flags& out_flags, boost::system::error_code& ec)
+  {
+    buffer_sequence_adapter<boost::asio::mutable_buffer,
+        MutableBufferSequence> bufs(buffers);
+
+    return socket_ops::sync_recvmsg(impl.socket_, impl.state_,
+        bufs.buffers(), bufs.count(), in_flags, out_flags, ec);
+  }
+
+  // Wait until data can be received without blocking.
+  size_t receive_with_flags(base_implementation_type& impl,
+      const null_buffers&, socket_base::message_flags,
+      socket_base::message_flags& out_flags, boost::system::error_code& ec)
+  {
+    // Wait for socket to become ready.
+    socket_ops::poll_read(impl.socket_, impl.state_, ec);
+
+    // Clear out_flags, since we cannot give it any other sensible value when
+    // performing a null_buffers operation.
+    out_flags = 0;
+
+    return 0;
+  }
+
+  // Start an asynchronous receive. The buffer for the data being received
+  // must be valid for the lifetime of the asynchronous operation.
+  template <typename MutableBufferSequence, typename Handler>
+  void async_receive_with_flags(base_implementation_type& impl,
+      const MutableBufferSequence& buffers, socket_base::message_flags in_flags,
+      socket_base::message_flags& out_flags, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef win_iocp_socket_recvmsg_op<MutableBufferSequence, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.cancel_token_, buffers, out_flags, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket",
+          &impl, "async_receive_with_flags"));
+
+    buffer_sequence_adapter<boost::asio::mutable_buffer,
+        MutableBufferSequence> bufs(buffers);
+
+    start_receive_op(impl, bufs.buffers(), bufs.count(), in_flags, false, p.p);
+    p.v = p.p = 0;
+  }
+
+  // Wait until data can be received without blocking.
+  template <typename Handler>
+  void async_receive_with_flags(base_implementation_type& impl,
+      const null_buffers&, socket_base::message_flags in_flags,
+      socket_base::message_flags& out_flags, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef win_iocp_null_buffers_op<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(impl.cancel_token_, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl,
+          "async_receive_with_flags(null_buffers)"));
+
+    // Reset out_flags since it can be given no sensible value at this time.
+    out_flags = 0;
+
+    start_null_buffers_receive_op(impl, in_flags, p.p);
+    p.v = p.p = 0;
+  }
+
+  // Helper function to restart an asynchronous accept operation.
+  BOOST_ASIO_DECL void restart_accept_op(socket_type s,
+      socket_holder& new_socket, int family, int type, int protocol,
+      void* output_buffer, DWORD address_length, operation* op);
+
+protected:
+  // Open a new socket implementation.
+  BOOST_ASIO_DECL boost::system::error_code do_open(
+      base_implementation_type& impl, int family, int type,
+      int protocol, boost::system::error_code& ec);
+
+  // Assign a native socket to a socket implementation.
+  BOOST_ASIO_DECL boost::system::error_code do_assign(
+      base_implementation_type& impl, int type,
+      socket_type native_socket, boost::system::error_code& ec);
+
+  // Helper function to start an asynchronous send operation.
+  BOOST_ASIO_DECL void start_send_op(base_implementation_type& impl,
+      WSABUF* buffers, std::size_t buffer_count,
+      socket_base::message_flags flags, bool noop, operation* op);
+
+  // Helper function to start an asynchronous send_to operation.
+  BOOST_ASIO_DECL void start_send_to_op(base_implementation_type& impl,
+      WSABUF* buffers, std::size_t buffer_count,
+      const socket_addr_type* addr, int addrlen,
+      socket_base::message_flags flags, operation* op);
+
+  // Helper function to start an asynchronous receive operation.
+  BOOST_ASIO_DECL void start_receive_op(base_implementation_type& impl,
+      WSABUF* buffers, std::size_t buffer_count,
+      socket_base::message_flags flags, bool noop, operation* op);
+
+  // Helper function to start an asynchronous null_buffers receive operation.
+  BOOST_ASIO_DECL void start_null_buffers_receive_op(
+      base_implementation_type& impl,
+      socket_base::message_flags flags, reactor_op* op);
+
+  // Helper function to start an asynchronous receive_from operation.
+  BOOST_ASIO_DECL void start_receive_from_op(base_implementation_type& impl,
+      WSABUF* buffers, std::size_t buffer_count, socket_addr_type* addr,
+      socket_base::message_flags flags, int* addrlen, operation* op);
+
+  // Helper function to start an asynchronous accept operation.
+  BOOST_ASIO_DECL void start_accept_op(base_implementation_type& impl,
+      bool peer_is_open, socket_holder& new_socket, int family, int type,
+      int protocol, void* output_buffer, DWORD address_length, operation* op);
+
+  // Start an asynchronous read or write operation using the reactor.
+  BOOST_ASIO_DECL void start_reactor_op(base_implementation_type& impl,
+      int op_type, reactor_op* op);
+
+  // Start the asynchronous connect operation using the reactor.
+  BOOST_ASIO_DECL void start_connect_op(base_implementation_type& impl,
+      int family, int type, const socket_addr_type* remote_addr,
+      std::size_t remote_addrlen, win_iocp_socket_connect_op_base* op);
+
+  // Helper function to close a socket when the associated object is being
+  // destroyed.
+  BOOST_ASIO_DECL void close_for_destruction(base_implementation_type& impl);
+
+  // Update the ID of the thread from which cancellation is safe.
+  BOOST_ASIO_DECL void update_cancellation_thread_id(
+      base_implementation_type& impl);
+
+  // Helper function to get the reactor. If no reactor has been created yet, a
+  // new one is obtained from the io_service and a pointer to it is cached in
+  // this service.
+  BOOST_ASIO_DECL reactor& get_reactor();
+
+  // The type of a ConnectEx function pointer, as old SDKs may not provide it.
+  typedef BOOL (PASCAL *connect_ex_fn)(SOCKET,
+      const socket_addr_type*, int, void*, DWORD, DWORD*, OVERLAPPED*);
+
+  // Helper function to get the ConnectEx pointer. If no ConnectEx pointer has
+  // been obtained yet, one is obtained using WSAIoctl and the pointer is
+  // cached. Returns a null pointer if ConnectEx is not available.
+  BOOST_ASIO_DECL connect_ex_fn get_connect_ex(
+      base_implementation_type& impl, int type);
+
+  // Helper function to emulate InterlockedCompareExchangePointer functionality
+  // for:
+  // - very old Platform SDKs; and
+  // - platform SDKs where MSVC's /Wp64 option causes spurious warnings.
+  BOOST_ASIO_DECL void* interlocked_compare_exchange_pointer(
+      void** dest, void* exch, void* cmp);
+
+  // Helper function to emulate InterlockedExchangePointer functionality for:
+  // - very old Platform SDKs; and
+  // - platform SDKs where MSVC's /Wp64 option causes spurious warnings.
+  BOOST_ASIO_DECL void* interlocked_exchange_pointer(void** dest, void* val);
+
+  // The io_service used to obtain the reactor, if required.
+  boost::asio::io_service& io_service_;
+
+  // The IOCP service used for running asynchronous operations and dispatching
+  // handlers.
+  win_iocp_io_service& iocp_service_;
+
+  // The reactor used for performing connect operations. This object is created
+  // only if needed.
+  reactor* reactor_;
+
+  // Pointer to ConnectEx implementation.
+  void* connect_ex_;
+
+  // Mutex to protect access to the linked list of implementations. 
+  boost::asio::detail::mutex mutex_;
+
+  // The head of a linked list of all implementations.
+  base_implementation_type* impl_list_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/win_iocp_socket_service_base.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_SOCKET_SERVICE_BASE_HPP
diff --git a/ext/patches/boost/asio/detail/win_iocp_thread_info.hpp b/ext/patches/boost/asio/detail/win_iocp_thread_info.hpp
new file mode 100644
index 0000000..de58a54
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_iocp_thread_info.hpp
@@ -0,0 +1,36 @@
+//
+// detail/win_iocp_thread_info.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_THREAD_INFO_HPP
+#define BOOST_ASIO_DETAIL_WIN_IOCP_THREAD_INFO_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/thread_info_base.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+struct win_iocp_thread_info : public thread_info_base
+{
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_WIN_IOCP_THREAD_INFO_HPP
diff --git a/ext/patches/boost/asio/detail/win_mutex.hpp b/ext/patches/boost/asio/detail/win_mutex.hpp
new file mode 100644
index 0000000..5dc2028
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_mutex.hpp
@@ -0,0 +1,80 @@
+//
+// detail/win_mutex.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_MUTEX_HPP
+#define BOOST_ASIO_DETAIL_WIN_MUTEX_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS)
+
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/scoped_lock.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class win_mutex
+  : private noncopyable
+{
+public:
+  typedef boost::asio::detail::scoped_lock<win_mutex> scoped_lock;
+
+  // Constructor.
+  BOOST_ASIO_DECL win_mutex();
+
+  // Destructor.
+  ~win_mutex()
+  {
+    ::DeleteCriticalSection(&crit_section_);
+  }
+
+  // Lock the mutex.
+  void lock()
+  {
+    ::EnterCriticalSection(&crit_section_);
+  }
+
+  // Unlock the mutex.
+  void unlock()
+  {
+    ::LeaveCriticalSection(&crit_section_);
+  }
+
+private:
+  // Initialisation must be performed in a separate function to the constructor
+  // since the compiler does not support the use of structured exceptions and
+  // C++ exceptions in the same function.
+  BOOST_ASIO_DECL int do_init();
+
+  ::CRITICAL_SECTION crit_section_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/win_mutex.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_WINDOWS)
+
+#endif // BOOST_ASIO_DETAIL_WIN_MUTEX_HPP
diff --git a/ext/patches/boost/asio/detail/win_object_handle_service.hpp b/ext/patches/boost/asio/detail/win_object_handle_service.hpp
new file mode 100644
index 0000000..ed91a7f
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_object_handle_service.hpp
@@ -0,0 +1,185 @@
+//
+// detail/win_object_handle_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2011 Boris Schaeling (boris at highscore.de)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_OBJECT_HANDLE_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_WIN_OBJECT_HANDLE_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/wait_handler.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class win_object_handle_service
+{
+public:
+  // The native type of an object handle.
+  typedef HANDLE native_handle_type;
+
+  // The implementation type of the object handle.
+  class implementation_type
+  {
+   public:
+    // Default constructor.
+    implementation_type()
+      : handle_(INVALID_HANDLE_VALUE),
+        wait_handle_(INVALID_HANDLE_VALUE),
+        owner_(0),
+        next_(0),
+        prev_(0)
+    {
+    }
+
+  private:
+    // Only this service will have access to the internal values.
+    friend class win_object_handle_service;
+
+    // The native object handle representation. May be accessed or modified
+    // without locking the mutex.
+    native_handle_type handle_;
+
+    // The handle used to unregister the wait operation. The mutex must be
+    // locked when accessing or modifying this member.
+    HANDLE wait_handle_;
+
+    // The operations waiting on the object handle. If there is a registered
+    // wait then the mutex must be locked when accessing or modifying this
+    // member
+    op_queue<wait_op> op_queue_;
+
+    // The service instance that owns the object handle implementation.
+    win_object_handle_service* owner_;
+
+    // Pointers to adjacent handle implementations in linked list. The mutex
+    // must be locked when accessing or modifying these members.
+    implementation_type* next_;
+    implementation_type* prev_;
+  };
+
+  // Constructor.
+  BOOST_ASIO_DECL win_object_handle_service(
+      boost::asio::io_service& io_service);
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Construct a new handle implementation.
+  BOOST_ASIO_DECL void construct(implementation_type& impl);
+
+  // Move-construct a new handle implementation.
+  BOOST_ASIO_DECL void move_construct(implementation_type& impl,
+      implementation_type& other_impl);
+
+  // Move-assign from another handle implementation.
+  BOOST_ASIO_DECL void move_assign(implementation_type& impl,
+      win_object_handle_service& other_service,
+      implementation_type& other_impl);
+
+  // Destroy a handle implementation.
+  BOOST_ASIO_DECL void destroy(implementation_type& impl);
+
+  // Assign a native handle to a handle implementation.
+  BOOST_ASIO_DECL boost::system::error_code assign(implementation_type& impl,
+      const native_handle_type& handle, boost::system::error_code& ec);
+
+  // Determine whether the handle is open.
+  bool is_open(const implementation_type& impl) const
+  {
+    return impl.handle_ != INVALID_HANDLE_VALUE && impl.handle_ != 0;
+  }
+
+  // Destroy a handle implementation.
+  BOOST_ASIO_DECL boost::system::error_code close(implementation_type& impl,
+      boost::system::error_code& ec);
+
+  // Get the native handle representation.
+  native_handle_type native_handle(const implementation_type& impl) const
+  {
+    return impl.handle_;
+  }
+
+  // Cancel all operations associated with the handle.
+  BOOST_ASIO_DECL boost::system::error_code cancel(implementation_type& impl,
+      boost::system::error_code& ec);
+
+  // Perform a synchronous wait for the object to enter a signalled state.
+  BOOST_ASIO_DECL void wait(implementation_type& impl,
+      boost::system::error_code& ec);
+
+  /// Start an asynchronous wait.
+  template <typename Handler>
+  void async_wait(implementation_type& impl, Handler& handler)
+  {
+    // Allocate and construct an operation to wrap the handler.
+    typedef wait_handler<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "object_handle", &impl, "async_wait"));
+
+    start_wait_op(impl, p.p);
+    p.v = p.p = 0;
+  }
+
+private:
+  // Helper function to start an asynchronous wait operation.
+  BOOST_ASIO_DECL void start_wait_op(implementation_type& impl, wait_op* op);
+
+  // Helper function to register a wait operation.
+  BOOST_ASIO_DECL void register_wait_callback(
+      implementation_type& impl, mutex::scoped_lock& lock);
+
+  // Callback function invoked when the registered wait completes.
+  static BOOST_ASIO_DECL VOID CALLBACK wait_callback(
+      PVOID param, BOOLEAN timeout);
+
+  // The io_service implementation used to post completions.
+  io_service_impl& io_service_;
+
+  // Mutex to protect access to internal state.
+  mutex mutex_;
+
+  // The head of a linked list of all implementations.
+  implementation_type* impl_list_;
+
+  // Flag to indicate that the dispatcher has been shut down.
+  bool shutdown_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/win_object_handle_service.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE)
+
+#endif // BOOST_ASIO_DETAIL_WIN_OBJECT_HANDLE_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/win_static_mutex.hpp b/ext/patches/boost/asio/detail/win_static_mutex.hpp
new file mode 100644
index 0000000..1baf27d
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_static_mutex.hpp
@@ -0,0 +1,76 @@
+//
+// detail/win_static_mutex.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_STATIC_MUTEX_HPP
+#define BOOST_ASIO_DETAIL_WIN_STATIC_MUTEX_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS)
+
+#include <boost/asio/detail/scoped_lock.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+struct win_static_mutex
+{
+  typedef boost::asio::detail::scoped_lock<win_static_mutex> scoped_lock;
+
+  // Initialise the mutex.
+  BOOST_ASIO_DECL void init();
+
+  // Initialisation must be performed in a separate function to the "public"
+  // init() function since the compiler does not support the use of structured
+  // exceptions and C++ exceptions in the same function.
+  BOOST_ASIO_DECL int do_init();
+
+  // Lock the mutex.
+  void lock()
+  {
+    ::EnterCriticalSection(&crit_section_);
+  }
+
+  // Unlock the mutex.
+  void unlock()
+  {
+    ::LeaveCriticalSection(&crit_section_);
+  }
+
+  bool initialised_;
+  ::CRITICAL_SECTION crit_section_;
+};
+
+#if defined(UNDER_CE)
+# define BOOST_ASIO_WIN_STATIC_MUTEX_INIT { false, { 0, 0, 0, 0, 0 } }
+#else // defined(UNDER_CE)
+# define BOOST_ASIO_WIN_STATIC_MUTEX_INIT { false, { 0, 0, 0, 0, 0, 0 } }
+#endif // defined(UNDER_CE)
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/win_static_mutex.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_WINDOWS)
+
+#endif // BOOST_ASIO_DETAIL_WIN_STATIC_MUTEX_HPP
diff --git a/ext/patches/boost/asio/detail/win_thread.hpp b/ext/patches/boost/asio/detail/win_thread.hpp
new file mode 100644
index 0000000..a5f2414
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_thread.hpp
@@ -0,0 +1,141 @@
+//
+// detail/win_thread.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_THREAD_HPP
+#define BOOST_ASIO_DETAIL_WIN_THREAD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS) && !defined(UNDER_CE)
+
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+BOOST_ASIO_DECL unsigned int __stdcall win_thread_function(void* arg);
+
+#if defined(WINVER) && (WINVER < 0x0500)
+BOOST_ASIO_DECL void __stdcall apc_function(ULONG data);
+#else
+BOOST_ASIO_DECL void __stdcall apc_function(ULONG_PTR data);
+#endif
+
+template <typename T>
+class win_thread_base
+{
+public:
+  static bool terminate_threads()
+  {
+    return ::InterlockedExchangeAdd(&terminate_threads_, 0) != 0;
+  }
+
+  static void set_terminate_threads(bool b)
+  {
+    ::InterlockedExchange(&terminate_threads_, b ? 1 : 0);
+  }
+
+private:
+  static long terminate_threads_;
+};
+
+template <typename T>
+long win_thread_base<T>::terminate_threads_ = 0;
+
+class win_thread
+  : private noncopyable,
+    public win_thread_base<win_thread>
+{
+public:
+  // Constructor.
+  template <typename Function>
+  win_thread(Function f, unsigned int stack_size = 0)
+    : thread_(0),
+      exit_event_(0)
+  {
+    start_thread(new func<Function>(f), stack_size);
+  }
+
+  // Destructor.
+  BOOST_ASIO_DECL ~win_thread();
+
+  // Wait for the thread to exit.
+  BOOST_ASIO_DECL void join();
+
+private:
+  friend BOOST_ASIO_DECL unsigned int __stdcall win_thread_function(void* arg);
+
+#if defined(WINVER) && (WINVER < 0x0500)
+  friend BOOST_ASIO_DECL void __stdcall apc_function(ULONG);
+#else
+  friend BOOST_ASIO_DECL void __stdcall apc_function(ULONG_PTR);
+#endif
+
+  class func_base
+  {
+  public:
+    virtual ~func_base() {}
+    virtual void run() = 0;
+    ::HANDLE entry_event_;
+    ::HANDLE exit_event_;
+  };
+
+  struct auto_func_base_ptr
+  {
+    func_base* ptr;
+    ~auto_func_base_ptr() { delete ptr; }
+  };
+
+  template <typename Function>
+  class func
+    : public func_base
+  {
+  public:
+    func(Function f)
+      : f_(f)
+    {
+    }
+
+    virtual void run()
+    {
+      f_();
+    }
+
+  private:
+    Function f_;
+  };
+
+  BOOST_ASIO_DECL void start_thread(func_base* arg, unsigned int stack_size);
+
+  ::HANDLE thread_;
+  ::HANDLE exit_event_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/win_thread.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_WINDOWS) && !defined(UNDER_CE)
+
+#endif // BOOST_ASIO_DETAIL_WIN_THREAD_HPP
diff --git a/ext/patches/boost/asio/detail/win_tss_ptr.hpp b/ext/patches/boost/asio/detail/win_tss_ptr.hpp
new file mode 100644
index 0000000..c96aa8d
--- /dev/null
+++ b/ext/patches/boost/asio/detail/win_tss_ptr.hpp
@@ -0,0 +1,81 @@
+//
+// detail/win_tss_ptr.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WIN_TSS_PTR_HPP
+#define BOOST_ASIO_DETAIL_WIN_TSS_PTR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS)
+
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+// Helper function to create thread-specific storage.
+BOOST_ASIO_DECL DWORD win_tss_ptr_create();
+
+template <typename T>
+class win_tss_ptr
+  : private noncopyable
+{
+public:
+  // Constructor.
+  win_tss_ptr()
+    : tss_key_(win_tss_ptr_create())
+  {
+  }
+
+  // Destructor.
+  ~win_tss_ptr()
+  {
+    ::TlsFree(tss_key_);
+  }
+
+  // Get the value.
+  operator T*() const
+  {
+    return static_cast<T*>(::TlsGetValue(tss_key_));
+  }
+
+  // Set the value.
+  void operator=(T* value)
+  {
+    ::TlsSetValue(tss_key_, value);
+  }
+
+private:
+  // Thread-specific storage to allow unlocked access to determine whether a
+  // thread is a member of the pool.
+  DWORD tss_key_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/win_tss_ptr.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_WINDOWS)
+
+#endif // BOOST_ASIO_DETAIL_WIN_TSS_PTR_HPP
diff --git a/ext/patches/boost/asio/detail/wince_thread.hpp b/ext/patches/boost/asio/detail/wince_thread.hpp
new file mode 100644
index 0000000..f1dbaed
--- /dev/null
+++ b/ext/patches/boost/asio/detail/wince_thread.hpp
@@ -0,0 +1,118 @@
+//
+// detail/wince_thread.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WINCE_THREAD_HPP
+#define BOOST_ASIO_DETAIL_WINCE_THREAD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS) && defined(UNDER_CE)
+
+#include <memory>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+DWORD WINAPI wince_thread_function(LPVOID arg);
+
+class wince_thread
+  : private noncopyable
+{
+public:
+  // Constructor.
+  template <typename Function>
+  wince_thread(Function f, unsigned int = 0)
+  {
+    std::auto_ptr<func_base> arg(new func<Function>(f));
+    DWORD thread_id = 0;
+    thread_ = ::CreateThread(0, 0, wince_thread_function,
+        arg.get(), 0, &thread_id);
+    if (!thread_)
+    {
+      DWORD last_error = ::GetLastError();
+      boost::system::error_code ec(last_error,
+          boost::asio::error::get_system_category());
+      boost::asio::detail::throw_error(ec, "thread");
+    }
+    arg.release();
+  }
+
+  // Destructor.
+  ~wince_thread()
+  {
+    ::CloseHandle(thread_);
+  }
+
+  // Wait for the thread to exit.
+  void join()
+  {
+    ::WaitForSingleObject(thread_, INFINITE);
+  }
+
+private:
+  friend DWORD WINAPI wince_thread_function(LPVOID arg);
+
+  class func_base
+  {
+  public:
+    virtual ~func_base() {}
+    virtual void run() = 0;
+  };
+
+  template <typename Function>
+  class func
+    : public func_base
+  {
+  public:
+    func(Function f)
+      : f_(f)
+    {
+    }
+
+    virtual void run()
+    {
+      f_();
+    }
+
+  private:
+    Function f_;
+  };
+
+  ::HANDLE thread_;
+};
+
+inline DWORD WINAPI wince_thread_function(LPVOID arg)
+{
+  std::auto_ptr<wince_thread::func_base> func(
+      static_cast<wince_thread::func_base*>(arg));
+  func->run();
+  return 0;
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS) && defined(UNDER_CE)
+
+#endif // BOOST_ASIO_DETAIL_WINCE_THREAD_HPP
diff --git a/ext/patches/boost/asio/detail/winrt_async_manager.hpp b/ext/patches/boost/asio/detail/winrt_async_manager.hpp
new file mode 100644
index 0000000..754b8e0
--- /dev/null
+++ b/ext/patches/boost/asio/detail/winrt_async_manager.hpp
@@ -0,0 +1,296 @@
+//
+// detail/winrt_async_manager.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WINRT_ASYNC_MANAGER_HPP
+#define BOOST_ASIO_DETAIL_WINRT_ASYNC_MANAGER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <future>
+#include <boost/asio/detail/atomic_count.hpp>
+#include <boost/asio/detail/winrt_async_op.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class winrt_async_manager
+  : public boost::asio::detail::service_base<winrt_async_manager>
+{
+public:
+  // Constructor.
+  winrt_async_manager(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<winrt_async_manager>(io_service),
+      io_service_(use_service<io_service_impl>(io_service)),
+      outstanding_ops_(1)
+  {
+  }
+
+  // Destructor.
+  ~winrt_async_manager()
+  {
+  }
+
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+    if (--outstanding_ops_ > 0)
+    {
+      // Block until last operation is complete.
+      std::future<void> f = promise_.get_future();
+      f.wait();
+    }
+  }
+
+  void sync(Windows::Foundation::IAsyncAction^ action,
+      boost::system::error_code& ec)
+  {
+    using namespace Windows::Foundation;
+    using Windows::Foundation::AsyncStatus;
+
+    auto promise = std::make_shared<std::promise<boost::system::error_code>>();
+    auto future = promise->get_future();
+
+    action->Completed = ref new AsyncActionCompletedHandler(
+      [promise](IAsyncAction^ action, AsyncStatus status)
+      {
+        switch (status)
+        {
+        case AsyncStatus::Canceled:
+          promise->set_value(boost::asio::error::operation_aborted);
+          break;
+        case AsyncStatus::Error:
+        case AsyncStatus::Completed:
+        default:
+          boost::system::error_code ec(
+              action->ErrorCode.Value,
+              boost::system::system_category());
+          promise->set_value(ec);
+          break;
+        }
+      });
+
+    ec = future.get();
+  }
+
+  template <typename TResult>
+  TResult sync(Windows::Foundation::IAsyncOperation<TResult>^ operation,
+      boost::system::error_code& ec)
+  {
+    using namespace Windows::Foundation;
+    using Windows::Foundation::AsyncStatus;
+
+    auto promise = std::make_shared<std::promise<boost::system::error_code>>();
+    auto future = promise->get_future();
+
+    operation->Completed = ref new AsyncOperationCompletedHandler<TResult>(
+      [promise](IAsyncOperation<TResult>^ operation, AsyncStatus status)
+      {
+        switch (status)
+        {
+        case AsyncStatus::Canceled:
+          promise->set_value(boost::asio::error::operation_aborted);
+          break;
+        case AsyncStatus::Error:
+        case AsyncStatus::Completed:
+        default:
+          boost::system::error_code ec(
+              operation->ErrorCode.Value,
+              boost::system::system_category());
+          promise->set_value(ec);
+          break;
+        }
+      });
+
+    ec = future.get();
+    return operation->GetResults();
+  }
+
+  template <typename TResult, typename TProgress>
+  TResult sync(
+      Windows::Foundation::IAsyncOperationWithProgress<
+        TResult, TProgress>^ operation,
+      boost::system::error_code& ec)
+  {
+    using namespace Windows::Foundation;
+    using Windows::Foundation::AsyncStatus;
+
+    auto promise = std::make_shared<std::promise<boost::system::error_code>>();
+    auto future = promise->get_future();
+
+    operation->Completed
+      = ref new AsyncOperationWithProgressCompletedHandler<TResult, TProgress>(
+        [promise](IAsyncOperationWithProgress<TResult, TProgress>^ operation,
+          AsyncStatus status)
+        {
+          switch (status)
+          {
+          case AsyncStatus::Canceled:
+            promise->set_value(boost::asio::error::operation_aborted);
+            break;
+          case AsyncStatus::Started:
+            break;
+          case AsyncStatus::Error:
+          case AsyncStatus::Completed:
+          default:
+            boost::system::error_code ec(
+                operation->ErrorCode.Value,
+                boost::system::system_category());
+            promise->set_value(ec);
+            break;
+          }
+        });
+
+    ec = future.get();
+    return operation->GetResults();
+  }
+
+  void async(Windows::Foundation::IAsyncAction^ action,
+      winrt_async_op<void>* handler)
+  {
+    using namespace Windows::Foundation;
+    using Windows::Foundation::AsyncStatus;
+
+    auto on_completed = ref new AsyncActionCompletedHandler(
+      [this, handler](IAsyncAction^ action, AsyncStatus status)
+      {
+        switch (status)
+        {
+        case AsyncStatus::Canceled:
+          handler->ec_ = boost::asio::error::operation_aborted;
+          break;
+        case AsyncStatus::Started:
+          return;
+        case AsyncStatus::Completed:
+        case AsyncStatus::Error:
+        default:
+          handler->ec_ = boost::system::error_code(
+              action->ErrorCode.Value,
+              boost::system::system_category());
+          break;
+        }
+        io_service_.post_deferred_completion(handler);
+        if (--outstanding_ops_ == 0)
+          promise_.set_value();
+      });
+
+    io_service_.work_started();
+    ++outstanding_ops_;
+    action->Completed = on_completed;
+  }
+
+  template <typename TResult>
+  void async(Windows::Foundation::IAsyncOperation<TResult>^ operation,
+      winrt_async_op<TResult>* handler)
+  {
+    using namespace Windows::Foundation;
+    using Windows::Foundation::AsyncStatus;
+
+    auto on_completed = ref new AsyncOperationCompletedHandler<TResult>(
+      [this, handler](IAsyncOperation<TResult>^ operation, AsyncStatus status)
+      {
+        switch (status)
+        {
+        case AsyncStatus::Canceled:
+          handler->ec_ = boost::asio::error::operation_aborted;
+          break;
+        case AsyncStatus::Started:
+          return;
+        case AsyncStatus::Completed:
+          handler->result_ = operation->GetResults();
+          // Fall through.
+        case AsyncStatus::Error:
+        default:
+          handler->ec_ = boost::system::error_code(
+              operation->ErrorCode.Value,
+              boost::system::system_category());
+          break;
+        }
+        io_service_.post_deferred_completion(handler);
+        if (--outstanding_ops_ == 0)
+          promise_.set_value();
+      });
+
+    io_service_.work_started();
+    ++outstanding_ops_;
+    operation->Completed = on_completed;
+  }
+
+  template <typename TResult, typename TProgress>
+  void async(
+      Windows::Foundation::IAsyncOperationWithProgress<
+        TResult, TProgress>^ operation,
+      winrt_async_op<TResult>* handler)
+  {
+    using namespace Windows::Foundation;
+    using Windows::Foundation::AsyncStatus;
+
+    auto on_completed
+      = ref new AsyncOperationWithProgressCompletedHandler<TResult, TProgress>(
+        [this, handler](IAsyncOperationWithProgress<
+          TResult, TProgress>^ operation, AsyncStatus status)
+        {
+          switch (status)
+          {
+          case AsyncStatus::Canceled:
+            handler->ec_ = boost::asio::error::operation_aborted;
+            break;
+          case AsyncStatus::Started:
+            return;
+          case AsyncStatus::Completed:
+            handler->result_ = operation->GetResults();
+            // Fall through.
+          case AsyncStatus::Error:
+          default:
+            handler->ec_ = boost::system::error_code(
+                operation->ErrorCode.Value,
+                boost::system::system_category());
+            break;
+          }
+          io_service_.post_deferred_completion(handler);
+          if (--outstanding_ops_ == 0)
+            promise_.set_value();
+        });
+
+    io_service_.work_started();
+    ++outstanding_ops_;
+    operation->Completed = on_completed;
+  }
+
+private:
+  // The io_service implementation used to post completed handlers.
+  io_service_impl& io_service_;
+
+  // Count of outstanding operations.
+  atomic_count outstanding_ops_;
+
+  // Used to keep wait for outstanding operations to complete.
+  std::promise<void> promise_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_ASYNC_MANAGER_HPP
diff --git a/ext/patches/boost/asio/detail/winrt_async_op.hpp b/ext/patches/boost/asio/detail/winrt_async_op.hpp
new file mode 100644
index 0000000..80f809b
--- /dev/null
+++ b/ext/patches/boost/asio/detail/winrt_async_op.hpp
@@ -0,0 +1,67 @@
+//
+// detail/winrt_async_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WINRT_ASYNC_OP_HPP
+#define BOOST_ASIO_DETAIL_WINRT_ASYNC_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/operation.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename TResult>
+class winrt_async_op
+  : public operation
+{
+public:
+  // The error code to be passed to the completion handler.
+  boost::system::error_code ec_;
+
+  // The result of the operation, to be passed to the completion handler.
+  TResult result_;
+
+protected:
+  winrt_async_op(func_type complete_func)
+    : operation(complete_func),
+      result_()
+  {
+  }
+};
+
+template <>
+class winrt_async_op<void>
+  : public operation
+{
+public:
+  // The error code to be passed to the completion handler.
+  boost::system::error_code ec_;
+
+protected:
+  winrt_async_op(func_type complete_func)
+    : operation(complete_func)
+  {
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_WINRT_ASYNC_OP_HPP
diff --git a/ext/patches/boost/asio/detail/winrt_resolve_op.hpp b/ext/patches/boost/asio/detail/winrt_resolve_op.hpp
new file mode 100644
index 0000000..5825483
--- /dev/null
+++ b/ext/patches/boost/asio/detail/winrt_resolve_op.hpp
@@ -0,0 +1,119 @@
+//
+// detail/winrt_resolve_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WINRT_RESOLVE_OP_HPP
+#define BOOST_ASIO_DETAIL_WINRT_RESOLVE_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/winrt_async_op.hpp>
+#include <boost/asio/ip/basic_resolver_iterator.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Protocol, typename Handler>
+class winrt_resolve_op :
+  public winrt_async_op<
+    Windows::Foundation::Collections::IVectorView<
+      Windows::Networking::EndpointPair^>^>
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(winrt_resolve_op);
+
+  typedef typename Protocol::endpoint endpoint_type;
+  typedef boost::asio::ip::basic_resolver_query<Protocol> query_type;
+  typedef boost::asio::ip::basic_resolver_iterator<Protocol> iterator_type;
+
+  winrt_resolve_op(const query_type& query, Handler& handler)
+    : winrt_async_op<
+        Windows::Foundation::Collections::IVectorView<
+          Windows::Networking::EndpointPair^>^>(
+            &winrt_resolve_op::do_complete),
+      query_(query),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code&, std::size_t)
+  {
+    // Take ownership of the operation object.
+    winrt_resolve_op* o(static_cast<winrt_resolve_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+    iterator_type iterator = iterator_type();
+    if (!o->ec_)
+    {
+      try
+      {
+        iterator = iterator_type::create(
+            o->result_, o->query_.hints(),
+            o->query_.host_name(), o->query_.service_name());
+      }
+      catch (Platform::Exception^ e)
+      {
+        o->ec_ = boost::system::error_code(e->HResult,
+            boost::system::system_category());
+      }
+    }
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, iterator_type>
+      handler(o->handler_, o->ec_, iterator);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  query_type query_;
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_RESOLVE_OP_HPP
diff --git a/ext/patches/boost/asio/detail/winrt_resolver_service.hpp b/ext/patches/boost/asio/detail/winrt_resolver_service.hpp
new file mode 100644
index 0000000..8f5fd43
--- /dev/null
+++ b/ext/patches/boost/asio/detail/winrt_resolver_service.hpp
@@ -0,0 +1,185 @@
+//
+// detail/winrt_resolver_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WINRT_RESOLVER_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_WINRT_RESOLVER_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/ip/basic_resolver_iterator.hpp>
+#include <boost/asio/ip/basic_resolver_query.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/winrt_async_manager.hpp>
+#include <boost/asio/detail/winrt_resolve_op.hpp>
+#include <boost/asio/detail/winrt_utils.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Protocol>
+class winrt_resolver_service
+{
+public:
+  // The implementation type of the resolver. A cancellation token is used to
+  // indicate to the asynchronous operation that the operation has been
+  // cancelled.
+  typedef socket_ops::shared_cancel_token_type implementation_type;
+
+  // The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+  // The query type.
+  typedef boost::asio::ip::basic_resolver_query<Protocol> query_type;
+
+  // The iterator type.
+  typedef boost::asio::ip::basic_resolver_iterator<Protocol> iterator_type;
+
+  // Constructor.
+  winrt_resolver_service(boost::asio::io_service& io_service)
+    : io_service_(use_service<io_service_impl>(io_service)),
+      async_manager_(use_service<winrt_async_manager>(io_service))
+  {
+  }
+
+  // Destructor.
+  ~winrt_resolver_service()
+  {
+  }
+
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+  }
+
+  // Perform any fork-related housekeeping.
+  void fork_service(boost::asio::io_service::fork_event)
+  {
+  }
+
+  // Construct a new resolver implementation.
+  void construct(implementation_type&)
+  {
+  }
+
+  // Destroy a resolver implementation.
+  void destroy(implementation_type&)
+  {
+  }
+
+  // Cancel pending asynchronous operations.
+  void cancel(implementation_type&)
+  {
+  }
+
+  // Resolve a query to a list of entries.
+  iterator_type resolve(implementation_type&,
+      const query_type& query, boost::system::error_code& ec)
+  {
+    try
+    {
+      using namespace Windows::Networking::Sockets;
+      auto endpoint_pairs = async_manager_.sync(
+          DatagramSocket::GetEndpointPairsAsync(
+            winrt_utils::host_name(query.host_name()),
+            winrt_utils::string(query.service_name())), ec);
+
+      if (ec)
+        return iterator_type();
+
+      return iterator_type::create(
+          endpoint_pairs, query.hints(),
+          query.host_name(), query.service_name());
+    }
+    catch (Platform::Exception^ e)
+    {
+      ec = boost::system::error_code(e->HResult,
+          boost::system::system_category());
+      return iterator_type();
+    }
+  }
+
+  // Asynchronously resolve a query to a list of entries.
+  template <typename Handler>
+  void async_resolve(implementation_type&,
+      const query_type& query, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef winrt_resolve_op<Protocol, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(query, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "resolver", &impl, "async_resolve"));
+
+    try
+    {
+      using namespace Windows::Networking::Sockets;
+      async_manager_.async(DatagramSocket::GetEndpointPairsAsync(
+            winrt_utils::host_name(query.host_name()),
+            winrt_utils::string(query.service_name())), p.p);
+      p.v = p.p = 0;
+    }
+    catch (Platform::Exception^ e)
+    {
+      p.p->ec_ = boost::system::error_code(
+          e->HResult, boost::system::system_category());
+      io_service_.post_immediate_completion(p.p, is_continuation);
+      p.v = p.p = 0;
+    }
+  }
+
+  // Resolve an endpoint to a list of entries.
+  iterator_type resolve(implementation_type&,
+      const endpoint_type&, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return iterator_type();
+  }
+
+  // Asynchronously resolve an endpoint to a list of entries.
+  template <typename Handler>
+  void async_resolve(implementation_type&,
+      const endpoint_type&, Handler& handler)
+  {
+    boost::system::error_code ec = boost::asio::error::operation_not_supported;
+    const iterator_type iterator;
+    io_service_.get_io_service().post(
+        detail::bind_handler(handler, ec, iterator));
+  }
+
+private:
+  io_service_impl& io_service_;
+  winrt_async_manager& async_manager_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_RESOLVER_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/winrt_socket_connect_op.hpp b/ext/patches/boost/asio/detail/winrt_socket_connect_op.hpp
new file mode 100644
index 0000000..2d94c0d
--- /dev/null
+++ b/ext/patches/boost/asio/detail/winrt_socket_connect_op.hpp
@@ -0,0 +1,92 @@
+//
+// detail/winrt_socket_connect_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WINRT_SOCKET_CONNECT_OP_HPP
+#define BOOST_ASIO_DETAIL_WINRT_SOCKET_CONNECT_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/winrt_async_op.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Handler>
+class winrt_socket_connect_op :
+  public winrt_async_op<void>
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(winrt_socket_connect_op);
+
+  winrt_socket_connect_op(Handler& handler)
+    : winrt_async_op<void>(&winrt_socket_connect_op::do_complete),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code&, std::size_t)
+  {
+    // Take ownership of the operation object.
+    winrt_socket_connect_op* o(static_cast<winrt_socket_connect_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder1<Handler, boost::system::error_code>
+      handler(o->handler_, o->ec_);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_SOCKET_CONNECT_OP_HPP
diff --git a/ext/patches/boost/asio/detail/winrt_socket_recv_op.hpp b/ext/patches/boost/asio/detail/winrt_socket_recv_op.hpp
new file mode 100644
index 0000000..1ad91de
--- /dev/null
+++ b/ext/patches/boost/asio/detail/winrt_socket_recv_op.hpp
@@ -0,0 +1,112 @@
+//
+// detail/winrt_socket_recv_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WINRT_SOCKET_RECV_OP_HPP
+#define BOOST_ASIO_DETAIL_WINRT_SOCKET_RECV_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/winrt_async_op.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename MutableBufferSequence, typename Handler>
+class winrt_socket_recv_op :
+  public winrt_async_op<Windows::Storage::Streams::IBuffer^>
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(winrt_socket_recv_op);
+
+  winrt_socket_recv_op(const MutableBufferSequence& buffers, Handler& handler)
+    : winrt_async_op<Windows::Storage::Streams::IBuffer^>(
+          &winrt_socket_recv_op::do_complete),
+      buffers_(buffers),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code&, std::size_t)
+  {
+    // Take ownership of the operation object.
+    winrt_socket_recv_op* o(static_cast<winrt_socket_recv_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+    // Check whether buffers are still valid.
+    if (owner)
+    {
+      buffer_sequence_adapter<boost::asio::mutable_buffer,
+          MutableBufferSequence>::validate(o->buffers_);
+    }
+#endif // defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+
+    std::size_t bytes_transferred = o->result_ ? o->result_->Length : 0;
+    if (bytes_transferred == 0 && !o->ec_ &&
+        !buffer_sequence_adapter<boost::asio::mutable_buffer,
+          MutableBufferSequence>::all_empty(o->buffers_))
+    {
+      o->ec_ = boost::asio::error::eof;
+    }
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, o->ec_, bytes_transferred);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  MutableBufferSequence buffers_;
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_SOCKET_RECV_OP_HPP
diff --git a/ext/patches/boost/asio/detail/winrt_socket_send_op.hpp b/ext/patches/boost/asio/detail/winrt_socket_send_op.hpp
new file mode 100644
index 0000000..d098f09
--- /dev/null
+++ b/ext/patches/boost/asio/detail/winrt_socket_send_op.hpp
@@ -0,0 +1,103 @@
+//
+// detail/winrt_socket_send_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WINRT_SOCKET_SEND_OP_HPP
+#define BOOST_ASIO_DETAIL_WINRT_SOCKET_SEND_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/fenced_block.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/winrt_async_op.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename ConstBufferSequence, typename Handler>
+class winrt_socket_send_op :
+  public winrt_async_op<unsigned int>
+{
+public:
+  BOOST_ASIO_DEFINE_HANDLER_PTR(winrt_socket_send_op);
+
+  winrt_socket_send_op(const ConstBufferSequence& buffers, Handler& handler)
+    : winrt_async_op<unsigned int>(&winrt_socket_send_op::do_complete),
+      buffers_(buffers),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  static void do_complete(io_service_impl* owner, operation* base,
+      const boost::system::error_code&, std::size_t)
+  {
+    // Take ownership of the operation object.
+    winrt_socket_send_op* o(static_cast<winrt_socket_send_op*>(base));
+    ptr p = { boost::asio::detail::addressof(o->handler_), o, o };
+
+    BOOST_ASIO_HANDLER_COMPLETION((o));
+
+#if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+    // Check whether buffers are still valid.
+    if (owner)
+    {
+      buffer_sequence_adapter<boost::asio::const_buffer,
+          ConstBufferSequence>::validate(o->buffers_);
+    }
+#endif // defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
+
+    // Make a copy of the handler so that the memory can be deallocated before
+    // the upcall is made. Even if we're not about to make an upcall, a
+    // sub-object of the handler may be the true owner of the memory associated
+    // with the handler. Consequently, a local copy of the handler is required
+    // to ensure that any owning sub-object remains valid until after we have
+    // deallocated the memory here.
+    detail::binder2<Handler, boost::system::error_code, std::size_t>
+      handler(o->handler_, o->ec_, o->result_);
+    p.h = boost::asio::detail::addressof(handler.handler_);
+    p.reset();
+
+    // Make the upcall if required.
+    if (owner)
+    {
+      fenced_block b(fenced_block::half);
+      BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_));
+      boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_);
+      BOOST_ASIO_HANDLER_INVOCATION_END;
+    }
+  }
+
+private:
+  ConstBufferSequence buffers_;
+  Handler handler_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_SOCKET_SEND_OP_HPP
diff --git a/ext/patches/boost/asio/detail/winrt_ssocket_service.hpp b/ext/patches/boost/asio/detail/winrt_ssocket_service.hpp
new file mode 100644
index 0000000..8886515
--- /dev/null
+++ b/ext/patches/boost/asio/detail/winrt_ssocket_service.hpp
@@ -0,0 +1,234 @@
+//
+// detail/winrt_ssocket_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WINRT_SSOCKET_SERVICE_HPP
+#define BOOST_ASIO_DETAIL_WINRT_SSOCKET_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/winrt_socket_connect_op.hpp>
+#include <boost/asio/detail/winrt_ssocket_service_base.hpp>
+#include <boost/asio/detail/winrt_utils.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+template <typename Protocol>
+class winrt_ssocket_service :
+  public winrt_ssocket_service_base
+{
+public:
+  // The protocol type.
+  typedef Protocol protocol_type;
+
+  // The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+  // The native type of a socket.
+  typedef Windows::Networking::Sockets::StreamSocket^ native_handle_type;
+
+  // The implementation type of the socket.
+  struct implementation_type : base_implementation_type
+  {
+    // Default constructor.
+    implementation_type()
+      : base_implementation_type(),
+        protocol_(endpoint_type().protocol())
+    {
+    }
+
+    // The protocol associated with the socket.
+    protocol_type protocol_;
+  };
+
+  // Constructor.
+  winrt_ssocket_service(boost::asio::io_service& io_service)
+    : winrt_ssocket_service_base(io_service)
+  {
+  }
+
+  // Move-construct a new socket implementation.
+  void move_construct(implementation_type& impl,
+      implementation_type& other_impl)
+  {
+    this->base_move_construct(impl, other_impl);
+
+    impl.protocol_ = other_impl.protocol_;
+    other_impl.protocol_ = endpoint_type().protocol();
+  }
+
+  // Move-assign from another socket implementation.
+  void move_assign(implementation_type& impl,
+      winrt_ssocket_service& other_service,
+      implementation_type& other_impl)
+  {
+    this->base_move_assign(impl, other_service, other_impl);
+
+    impl.protocol_ = other_impl.protocol_;
+    other_impl.protocol_ = endpoint_type().protocol();
+  }
+
+  // Move-construct a new socket implementation from another protocol type.
+  template <typename Protocol1>
+  void converting_move_construct(implementation_type& impl,
+      typename winrt_ssocket_service<
+        Protocol1>::implementation_type& other_impl)
+  {
+    this->base_move_construct(impl, other_impl);
+
+    impl.protocol_ = protocol_type(other_impl.protocol_);
+    other_impl.protocol_ = typename Protocol1::endpoint().protocol();
+  }
+
+  // Open a new socket implementation.
+  boost::system::error_code open(implementation_type& impl,
+      const protocol_type& protocol, boost::system::error_code& ec)
+  {
+    if (is_open(impl))
+    {
+      ec = boost::asio::error::already_open;
+      return ec;
+    }
+
+    try
+    {
+      impl.socket_ = ref new Windows::Networking::Sockets::StreamSocket;
+      impl.protocol_ = protocol;
+      ec = boost::system::error_code();
+    }
+    catch (Platform::Exception^ e)
+    {
+      ec = boost::system::error_code(e->HResult,
+            boost::system::system_category());
+    }
+
+    return ec;
+  }
+
+  // Assign a native socket to a socket implementation.
+  boost::system::error_code assign(implementation_type& impl,
+      const protocol_type& protocol, const native_handle_type& native_socket,
+      boost::system::error_code& ec)
+  {
+    if (is_open(impl))
+    {
+      ec = boost::asio::error::already_open;
+      return ec;
+    }
+
+    impl.socket_ = native_socket;
+    impl.protocol_ = protocol;
+    ec = boost::system::error_code();
+
+    return ec;
+  }
+
+  // Bind the socket to the specified local endpoint.
+  boost::system::error_code bind(implementation_type&,
+      const endpoint_type&, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Get the local endpoint.
+  endpoint_type local_endpoint(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    endpoint_type endpoint;
+    endpoint.resize(do_get_endpoint(impl, true,
+          endpoint.data(), endpoint.size(), ec));
+    return endpoint;
+  }
+
+  // Get the remote endpoint.
+  endpoint_type remote_endpoint(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    endpoint_type endpoint;
+    endpoint.resize(do_get_endpoint(impl, false,
+          endpoint.data(), endpoint.size(), ec));
+    return endpoint;
+  }
+
+  // Set a socket option.
+  template <typename Option>
+  boost::system::error_code set_option(implementation_type& impl,
+      const Option& option, boost::system::error_code& ec)
+  {
+    return do_set_option(impl, option.level(impl.protocol_),
+        option.name(impl.protocol_), option.data(impl.protocol_),
+        option.size(impl.protocol_), ec);
+  }
+
+  // Get a socket option.
+  template <typename Option>
+  boost::system::error_code get_option(const implementation_type& impl,
+      Option& option, boost::system::error_code& ec) const
+  {
+    std::size_t size = option.size(impl.protocol_);
+    do_get_option(impl, option.level(impl.protocol_),
+        option.name(impl.protocol_),
+        option.data(impl.protocol_), &size, ec);
+    if (!ec)
+      option.resize(impl.protocol_, size);
+    return ec;
+  }
+
+  // Connect the socket to the specified endpoint.
+  boost::system::error_code connect(implementation_type& impl,
+      const endpoint_type& peer_endpoint, boost::system::error_code& ec)
+  {
+    return do_connect(impl, peer_endpoint.data(), ec);
+  }
+
+  // Start an asynchronous connect.
+  template <typename Handler>
+  void async_connect(implementation_type& impl,
+      const endpoint_type& peer_endpoint, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef winrt_socket_connect_op<Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_connect"));
+
+    start_connect_op(impl, peer_endpoint.data(), p.p, is_continuation);
+    p.v = p.p = 0;
+  }
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_SSOCKET_SERVICE_HPP
diff --git a/ext/patches/boost/asio/detail/winrt_ssocket_service_base.hpp b/ext/patches/boost/asio/detail/winrt_ssocket_service_base.hpp
new file mode 100644
index 0000000..7181884
--- /dev/null
+++ b/ext/patches/boost/asio/detail/winrt_ssocket_service_base.hpp
@@ -0,0 +1,357 @@
+//
+// detail/winrt_ssocket_service_base.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WINRT_SSOCKET_SERVICE_BASE_HPP
+#define BOOST_ASIO_DETAIL_WINRT_SSOCKET_SERVICE_BASE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/socket_base.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/winrt_async_manager.hpp>
+#include <boost/asio/detail/winrt_socket_recv_op.hpp>
+#include <boost/asio/detail/winrt_socket_send_op.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class winrt_ssocket_service_base
+{
+public:
+  // The native type of a socket.
+  typedef Windows::Networking::Sockets::StreamSocket^ native_handle_type;
+
+  // The implementation type of the socket.
+  struct base_implementation_type
+  {
+    // Default constructor.
+    base_implementation_type()
+      : socket_(nullptr),
+        next_(0),
+        prev_(0)
+    {
+    }
+
+    // The underlying native socket.
+    native_handle_type socket_;
+
+    // Pointers to adjacent socket implementations in linked list.
+    base_implementation_type* next_;
+    base_implementation_type* prev_;
+  };
+
+  // Constructor.
+  BOOST_ASIO_DECL winrt_ssocket_service_base(
+      boost::asio::io_service& io_service);
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Construct a new socket implementation.
+  BOOST_ASIO_DECL void construct(base_implementation_type&);
+
+  // Move-construct a new socket implementation.
+  BOOST_ASIO_DECL void base_move_construct(base_implementation_type& impl,
+      base_implementation_type& other_impl);
+
+  // Move-assign from another socket implementation.
+  BOOST_ASIO_DECL void base_move_assign(base_implementation_type& impl,
+      winrt_ssocket_service_base& other_service,
+      base_implementation_type& other_impl);
+
+  // Destroy a socket implementation.
+  BOOST_ASIO_DECL void destroy(base_implementation_type& impl);
+
+  // Determine whether the socket is open.
+  bool is_open(const base_implementation_type& impl) const
+  {
+    return impl.socket_ != nullptr;
+  }
+
+  // Destroy a socket implementation.
+  BOOST_ASIO_DECL boost::system::error_code close(
+      base_implementation_type& impl, boost::system::error_code& ec);
+
+  // Get the native socket representation.
+  native_handle_type native_handle(base_implementation_type& impl)
+  {
+    return impl.socket_;
+  }
+
+  // Cancel all operations associated with the socket.
+  boost::system::error_code cancel(base_implementation_type&,
+      boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Determine whether the socket is at the out-of-band data mark.
+  bool at_mark(const base_implementation_type&,
+      boost::system::error_code& ec) const
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return false;
+  }
+
+  // Determine the number of bytes available for reading.
+  std::size_t available(const base_implementation_type&,
+      boost::system::error_code& ec) const
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return 0;
+  }
+
+  // Perform an IO control command on the socket.
+  template <typename IO_Control_Command>
+  boost::system::error_code io_control(base_implementation_type&,
+      IO_Control_Command&, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Gets the non-blocking mode of the socket.
+  bool non_blocking(const base_implementation_type&) const
+  {
+    return false;
+  }
+
+  // Sets the non-blocking mode of the socket.
+  boost::system::error_code non_blocking(base_implementation_type&,
+      bool, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Gets the non-blocking mode of the native socket implementation.
+  bool native_non_blocking(const base_implementation_type&) const
+  {
+    return false;
+  }
+
+  // Sets the non-blocking mode of the native socket implementation.
+  boost::system::error_code native_non_blocking(base_implementation_type&,
+      bool, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Disable sends or receives on the socket.
+  boost::system::error_code shutdown(base_implementation_type&,
+      socket_base::shutdown_type, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+
+  // Send the given data to the peer.
+  template <typename ConstBufferSequence>
+  std::size_t send(base_implementation_type& impl,
+      const ConstBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return do_send(impl,
+        buffer_sequence_adapter<boost::asio::const_buffer,
+          ConstBufferSequence>::first(buffers), flags, ec);
+  }
+
+  // Wait until data can be sent without blocking.
+  std::size_t send(base_implementation_type&, const null_buffers&,
+      socket_base::message_flags, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return 0;
+  }
+
+  // Start an asynchronous send. The data being sent must be valid for the
+  // lifetime of the asynchronous operation.
+  template <typename ConstBufferSequence, typename Handler>
+  void async_send(base_implementation_type& impl,
+      const ConstBufferSequence& buffers,
+      socket_base::message_flags flags, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef winrt_socket_send_op<ConstBufferSequence, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(buffers, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_send"));
+
+    start_send_op(impl,
+        buffer_sequence_adapter<boost::asio::const_buffer,
+          ConstBufferSequence>::first(buffers),
+        flags, p.p, is_continuation);
+    p.v = p.p = 0;
+  }
+
+  // Start an asynchronous wait until data can be sent without blocking.
+  template <typename Handler>
+  void async_send(base_implementation_type&, const null_buffers&,
+      socket_base::message_flags, Handler& handler)
+  {
+    boost::system::error_code ec = boost::asio::error::operation_not_supported;
+    const std::size_t bytes_transferred = 0;
+    io_service_.get_io_service().post(
+        detail::bind_handler(handler, ec, bytes_transferred));
+  }
+
+  // Receive some data from the peer. Returns the number of bytes received.
+  template <typename MutableBufferSequence>
+  std::size_t receive(base_implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return do_receive(impl,
+        buffer_sequence_adapter<boost::asio::mutable_buffer,
+          MutableBufferSequence>::first(buffers), flags, ec);
+  }
+
+  // Wait until data can be received without blocking.
+  std::size_t receive(base_implementation_type&, const null_buffers&,
+      socket_base::message_flags, boost::system::error_code& ec)
+  {
+    ec = boost::asio::error::operation_not_supported;
+    return 0;
+  }
+
+  // Start an asynchronous receive. The buffer for the data being received
+  // must be valid for the lifetime of the asynchronous operation.
+  template <typename MutableBufferSequence, typename Handler>
+  void async_receive(base_implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      socket_base::message_flags flags, Handler& handler)
+  {
+    bool is_continuation =
+      boost_asio_handler_cont_helpers::is_continuation(handler);
+
+    // Allocate and construct an operation to wrap the handler.
+    typedef winrt_socket_recv_op<MutableBufferSequence, Handler> op;
+    typename op::ptr p = { boost::asio::detail::addressof(handler),
+      boost_asio_handler_alloc_helpers::allocate(
+        sizeof(op), handler), 0 };
+    p.p = new (p.v) op(buffers, handler);
+
+    BOOST_ASIO_HANDLER_CREATION((p.p, "socket", &impl, "async_receive"));
+
+    start_receive_op(impl,
+        buffer_sequence_adapter<boost::asio::mutable_buffer,
+          MutableBufferSequence>::first(buffers),
+        flags, p.p, is_continuation);
+    p.v = p.p = 0;
+  }
+
+  // Wait until data can be received without blocking.
+  template <typename Handler>
+  void async_receive(base_implementation_type&, const null_buffers&,
+      socket_base::message_flags, Handler& handler)
+  {
+    boost::system::error_code ec = boost::asio::error::operation_not_supported;
+    const std::size_t bytes_transferred = 0;
+    io_service_.get_io_service().post(
+        detail::bind_handler(handler, ec, bytes_transferred));
+  }
+
+protected:
+  // Helper function to obtain endpoints associated with the connection.
+  BOOST_ASIO_DECL std::size_t do_get_endpoint(
+      const base_implementation_type& impl, bool local,
+      void* addr, std::size_t addr_len, boost::system::error_code& ec) const;
+
+  // Helper function to set a socket option.
+  BOOST_ASIO_DECL boost::system::error_code do_set_option(
+      base_implementation_type& impl,
+      int level, int optname, const void* optval,
+      std::size_t optlen, boost::system::error_code& ec);
+
+  // Helper function to get a socket option.
+  BOOST_ASIO_DECL void do_get_option(
+      const base_implementation_type& impl,
+      int level, int optname, void* optval,
+      std::size_t* optlen, boost::system::error_code& ec) const;
+
+  // Helper function to perform a synchronous connect.
+  BOOST_ASIO_DECL boost::system::error_code do_connect(
+      base_implementation_type& impl,
+      const void* addr, boost::system::error_code& ec);
+
+  // Helper function to start an asynchronous connect.
+  BOOST_ASIO_DECL void start_connect_op(
+      base_implementation_type& impl, const void* addr,
+      winrt_async_op<void>* op, bool is_continuation);
+
+  // Helper function to perform a synchronous send.
+  BOOST_ASIO_DECL std::size_t do_send(
+      base_implementation_type& impl, const boost::asio::const_buffer& data,
+      socket_base::message_flags flags, boost::system::error_code& ec);
+
+  // Helper function to start an asynchronous send.
+  BOOST_ASIO_DECL void start_send_op(base_implementation_type& impl,
+      const boost::asio::const_buffer& data, socket_base::message_flags flags,
+      winrt_async_op<unsigned int>* op, bool is_continuation);
+
+  // Helper function to perform a synchronous receive.
+  BOOST_ASIO_DECL std::size_t do_receive(
+      base_implementation_type& impl, const boost::asio::mutable_buffer& data,
+      socket_base::message_flags flags, boost::system::error_code& ec);
+
+  // Helper function to start an asynchronous receive.
+  BOOST_ASIO_DECL void start_receive_op(base_implementation_type& impl,
+      const boost::asio::mutable_buffer& data, socket_base::message_flags flags,
+      winrt_async_op<Windows::Storage::Streams::IBuffer^>* op,
+      bool is_continuation);
+
+  // The io_service implementation used for delivering completions.
+  io_service_impl& io_service_;
+
+  // The manager that keeps track of outstanding operations.
+  winrt_async_manager& async_manager_;
+
+  // Mutex to protect access to the linked list of implementations. 
+  boost::asio::detail::mutex mutex_;
+
+  // The head of a linked list of all implementations.
+  base_implementation_type* impl_list_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/winrt_ssocket_service_base.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_SSOCKET_SERVICE_BASE_HPP
diff --git a/ext/patches/boost/asio/detail/winrt_timer_scheduler.hpp b/ext/patches/boost/asio/detail/winrt_timer_scheduler.hpp
new file mode 100644
index 0000000..7925794
--- /dev/null
+++ b/ext/patches/boost/asio/detail/winrt_timer_scheduler.hpp
@@ -0,0 +1,133 @@
+//
+// detail/winrt_timer_scheduler.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WINRT_TIMER_SCHEDULER_HPP
+#define BOOST_ASIO_DETAIL_WINRT_TIMER_SCHEDULER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <cstddef>
+#include <boost/asio/detail/event.hpp>
+#include <boost/asio/detail/limits.hpp>
+#include <boost/asio/detail/mutex.hpp>
+#include <boost/asio/detail/op_queue.hpp>
+#include <boost/asio/detail/thread.hpp>
+#include <boost/asio/detail/timer_queue_base.hpp>
+#include <boost/asio/detail/timer_queue_set.hpp>
+#include <boost/asio/detail/wait_op.hpp>
+#include <boost/asio/io_service.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+# include <boost/asio/detail/thread.hpp>
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class winrt_timer_scheduler
+  : public boost::asio::detail::service_base<winrt_timer_scheduler>
+{
+public:
+  // Constructor.
+  BOOST_ASIO_DECL winrt_timer_scheduler(boost::asio::io_service& io_service);
+
+  // Destructor.
+  BOOST_ASIO_DECL ~winrt_timer_scheduler();
+
+  // Destroy all user-defined handler objects owned by the service.
+  BOOST_ASIO_DECL void shutdown_service();
+
+  // Recreate internal descriptors following a fork.
+  BOOST_ASIO_DECL void fork_service(
+      boost::asio::io_service::fork_event fork_ev);
+
+  // Initialise the task. No effect as this class uses its own thread.
+  BOOST_ASIO_DECL void init_task();
+
+  // Add a new timer queue to the reactor.
+  template <typename Time_Traits>
+  void add_timer_queue(timer_queue<Time_Traits>& queue);
+
+  // Remove a timer queue from the reactor.
+  template <typename Time_Traits>
+  void remove_timer_queue(timer_queue<Time_Traits>& queue);
+
+  // Schedule a new operation in the given timer queue to expire at the
+  // specified absolute time.
+  template <typename Time_Traits>
+  void schedule_timer(timer_queue<Time_Traits>& queue,
+      const typename Time_Traits::time_type& time,
+      typename timer_queue<Time_Traits>::per_timer_data& timer, wait_op* op);
+
+  // Cancel the timer operations associated with the given token. Returns the
+  // number of operations that have been posted or dispatched.
+  template <typename Time_Traits>
+  std::size_t cancel_timer(timer_queue<Time_Traits>& queue,
+      typename timer_queue<Time_Traits>::per_timer_data& timer,
+      std::size_t max_cancelled = (std::numeric_limits<std::size_t>::max)());
+
+private:
+  // Run the select loop in the thread.
+  BOOST_ASIO_DECL void run_thread();
+
+  // Entry point for the select loop thread.
+  BOOST_ASIO_DECL static void call_run_thread(winrt_timer_scheduler* reactor);
+
+  // Helper function to add a new timer queue.
+  BOOST_ASIO_DECL void do_add_timer_queue(timer_queue_base& queue);
+
+  // Helper function to remove a timer queue.
+  BOOST_ASIO_DECL void do_remove_timer_queue(timer_queue_base& queue);
+
+  // The io_service implementation used to post completions.
+  io_service_impl& io_service_;
+
+  // Mutex used to protect internal variables.
+  boost::asio::detail::mutex mutex_;
+
+  // Event used to wake up background thread.
+  boost::asio::detail::event event_;
+
+  // The timer queues.
+  timer_queue_set timer_queues_;
+
+  // The background thread that is waiting for timers to expire.
+  boost::asio::detail::thread* thread_;
+
+  // Does the background thread need to stop.
+  bool stop_thread_;
+
+  // Whether the service has been shut down.
+  bool shutdown_;
+};
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/detail/impl/winrt_timer_scheduler.hpp>
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/winrt_timer_scheduler.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_TIMER_SCHEDULER_HPP
diff --git a/ext/patches/boost/asio/detail/winrt_utils.hpp b/ext/patches/boost/asio/detail/winrt_utils.hpp
new file mode 100644
index 0000000..ff2a068
--- /dev/null
+++ b/ext/patches/boost/asio/detail/winrt_utils.hpp
@@ -0,0 +1,108 @@
+//
+// detail/winrt_utils.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WINRT_UTILS_HPP
+#define BOOST_ASIO_DETAIL_WINRT_UTILS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <codecvt>
+#include <cstdlib>
+#include <future>
+#include <locale>
+#include <memory>
+#include <robuffer.h>
+#include <windows.storage.streams.h>
+#include <wrl/implements.h>
+#include <boost/asio/buffer.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/asio/detail/addressof.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+namespace winrt_utils {
+
+inline Platform::String^ string(const char* from)
+{
+  std::wstring tmp(from, from + std::strlen(from));
+  return ref new Platform::String(tmp.c_str());
+}
+
+inline Platform::String^ string(const std::string& from)
+{
+  std::wstring tmp(from.begin(), from.end());
+  return ref new Platform::String(tmp.c_str());
+}
+
+inline std::string string(Platform::String^ from)
+{
+  std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
+  return converter.to_bytes(from->Data());
+}
+
+inline Platform::String^ string(unsigned short from)
+{
+  return string(std::to_string(from));
+}
+
+template <typename T>
+inline Platform::String^ string(const T& from)
+{
+  return string(from.to_string());
+}
+
+inline int integer(Platform::String^ from)
+{
+  return _wtoi(from->Data());
+}
+
+template <typename T>
+inline Windows::Networking::HostName^ host_name(const T& from)
+{
+  return ref new Windows::Networking::HostName((string)(from));
+}
+
+template <typename ConstBufferSequence>
+inline Windows::Storage::Streams::IBuffer^ buffer_dup(
+    const ConstBufferSequence& buffers)
+{
+  using Microsoft::WRL::ComPtr;
+  std::size_t size = boost::asio::buffer_size(buffers);
+  auto b = ref new Windows::Storage::Streams::Buffer(size);
+  ComPtr<IInspectable> insp = reinterpret_cast<IInspectable*>(b);
+  ComPtr<Windows::Storage::Streams::IBufferByteAccess> bacc;
+  insp.As(&bacc);
+  byte* bytes = nullptr;
+  bacc->Buffer(&bytes);
+  boost::asio::buffer_copy(boost::asio::buffer(bytes, size), buffers);
+  b->Length = size;
+  return b;
+}
+
+} // namespace winrt_utils
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#endif // BOOST_ASIO_DETAIL_WINRT_UTILS_HPP
diff --git a/ext/patches/boost/asio/detail/winsock_init.hpp b/ext/patches/boost/asio/detail/winsock_init.hpp
new file mode 100644
index 0000000..5b18fee
--- /dev/null
+++ b/ext/patches/boost/asio/detail/winsock_init.hpp
@@ -0,0 +1,130 @@
+//
+// detail/winsock_init.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WINSOCK_INIT_HPP
+#define BOOST_ASIO_DETAIL_WINSOCK_INIT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+class winsock_init_base
+{
+protected:
+  // Structure to track result of initialisation and number of uses. POD is used
+  // to ensure that the values are zero-initialised prior to any code being run.
+  struct data
+  {
+    long init_count_;
+    long result_;
+  };
+
+  BOOST_ASIO_DECL static void startup(data& d,
+      unsigned char major, unsigned char minor);
+
+  BOOST_ASIO_DECL static void manual_startup(data& d);
+
+  BOOST_ASIO_DECL static void cleanup(data& d);
+
+  BOOST_ASIO_DECL static void manual_cleanup(data& d);
+
+  BOOST_ASIO_DECL static void throw_on_error(data& d);
+};
+
+template <int Major = 2, int Minor = 0>
+class winsock_init : private winsock_init_base
+{
+public:
+  winsock_init(bool allow_throw = true)
+  {
+    startup(data_, Major, Minor);
+    if (allow_throw)
+      throw_on_error(data_);
+  }
+
+  winsock_init(const winsock_init&)
+  {
+    startup(data_, Major, Minor);
+    throw_on_error(data_);
+  }
+
+  ~winsock_init()
+  {
+    cleanup(data_);
+  }
+
+  // This class may be used to indicate that user code will manage Winsock
+  // initialisation and cleanup. This may be required in the case of a DLL, for
+  // example, where it is not safe to initialise Winsock from global object
+  // constructors.
+  //
+  // To prevent asio from initialising Winsock, the object must be constructed
+  // before any Asio's own global objects. With MSVC, this may be accomplished
+  // by adding the following code to the DLL:
+  //
+  //   #pragma warning(push)
+  //   #pragma warning(disable:4073)
+  //   #pragma init_seg(lib)
+  //   boost::asio::detail::winsock_init<>::manual manual_winsock_init;
+  //   #pragma warning(pop)
+  class manual
+  {
+  public:
+    manual()
+    {
+      manual_startup(data_);
+    }
+
+    manual(const manual&)
+    {
+      manual_startup(data_);
+    }
+
+    ~manual()
+    {
+      manual_cleanup(data_);
+    }
+  };
+
+private:
+  friend class manual;
+  static data data_;
+};
+
+template <int Major, int Minor>
+winsock_init_base::data winsock_init<Major, Minor>::data_;
+
+// Static variable to ensure that winsock is initialised before main, and
+// therefore before any other threads can get started.
+static const winsock_init<>& winsock_init_instance = winsock_init<>(false);
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/detail/impl/winsock_init.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+
+#endif // BOOST_ASIO_DETAIL_WINSOCK_INIT_HPP
diff --git a/ext/patches/boost/asio/detail/wrapped_handler.hpp b/ext/patches/boost/asio/detail/wrapped_handler.hpp
new file mode 100644
index 0000000..eb8eb51
--- /dev/null
+++ b/ext/patches/boost/asio/detail/wrapped_handler.hpp
@@ -0,0 +1,293 @@
+//
+// detail/wrapped_handler.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WRAPPED_HANDLER_HPP
+#define BOOST_ASIO_DETAIL_WRAPPED_HANDLER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_cont_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+struct is_continuation_delegated
+{
+  template <typename Dispatcher, typename Handler>
+  bool operator()(Dispatcher&, Handler& handler) const
+  {
+    return boost_asio_handler_cont_helpers::is_continuation(handler);
+  }
+};
+
+struct is_continuation_if_running
+{
+  template <typename Dispatcher, typename Handler>
+  bool operator()(Dispatcher& dispatcher, Handler&) const
+  {
+    return dispatcher.running_in_this_thread();
+  }
+};
+
+template <typename Dispatcher, typename Handler,
+    typename IsContinuation = is_continuation_delegated>
+class wrapped_handler
+{
+public:
+  typedef void result_type;
+
+  wrapped_handler(Dispatcher dispatcher, Handler& handler)
+    : dispatcher_(dispatcher),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+  wrapped_handler(const wrapped_handler& other)
+    : dispatcher_(other.dispatcher_),
+      handler_(other.handler_)
+  {
+  }
+
+  wrapped_handler(wrapped_handler&& other)
+    : dispatcher_(other.dispatcher_),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(other.handler_))
+  {
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+  void operator()()
+  {
+    dispatcher_.dispatch(BOOST_ASIO_MOVE_CAST(Handler)(handler_));
+  }
+
+  void operator()() const
+  {
+    dispatcher_.dispatch(handler_);
+  }
+
+  template <typename Arg1>
+  void operator()(const Arg1& arg1)
+  {
+    dispatcher_.dispatch(detail::bind_handler(handler_, arg1));
+  }
+
+  template <typename Arg1>
+  void operator()(const Arg1& arg1) const
+  {
+    dispatcher_.dispatch(detail::bind_handler(handler_, arg1));
+  }
+
+  template <typename Arg1, typename Arg2>
+  void operator()(const Arg1& arg1, const Arg2& arg2)
+  {
+    dispatcher_.dispatch(detail::bind_handler(handler_, arg1, arg2));
+  }
+
+  template <typename Arg1, typename Arg2>
+  void operator()(const Arg1& arg1, const Arg2& arg2) const
+  {
+    dispatcher_.dispatch(detail::bind_handler(handler_, arg1, arg2));
+  }
+
+  template <typename Arg1, typename Arg2, typename Arg3>
+  void operator()(const Arg1& arg1, const Arg2& arg2, const Arg3& arg3)
+  {
+    dispatcher_.dispatch(detail::bind_handler(handler_, arg1, arg2, arg3));
+  }
+
+  template <typename Arg1, typename Arg2, typename Arg3>
+  void operator()(const Arg1& arg1, const Arg2& arg2, const Arg3& arg3) const
+  {
+    dispatcher_.dispatch(detail::bind_handler(handler_, arg1, arg2, arg3));
+  }
+
+  template <typename Arg1, typename Arg2, typename Arg3, typename Arg4>
+  void operator()(const Arg1& arg1, const Arg2& arg2, const Arg3& arg3,
+      const Arg4& arg4)
+  {
+    dispatcher_.dispatch(
+        detail::bind_handler(handler_, arg1, arg2, arg3, arg4));
+  }
+
+  template <typename Arg1, typename Arg2, typename Arg3, typename Arg4>
+  void operator()(const Arg1& arg1, const Arg2& arg2, const Arg3& arg3,
+      const Arg4& arg4) const
+  {
+    dispatcher_.dispatch(
+        detail::bind_handler(handler_, arg1, arg2, arg3, arg4));
+  }
+
+  template <typename Arg1, typename Arg2, typename Arg3, typename Arg4,
+      typename Arg5>
+  void operator()(const Arg1& arg1, const Arg2& arg2, const Arg3& arg3,
+      const Arg4& arg4, const Arg5& arg5)
+  {
+    dispatcher_.dispatch(
+        detail::bind_handler(handler_, arg1, arg2, arg3, arg4, arg5));
+  }
+
+  template <typename Arg1, typename Arg2, typename Arg3, typename Arg4,
+      typename Arg5>
+  void operator()(const Arg1& arg1, const Arg2& arg2, const Arg3& arg3,
+      const Arg4& arg4, const Arg5& arg5) const
+  {
+    dispatcher_.dispatch(
+        detail::bind_handler(handler_, arg1, arg2, arg3, arg4, arg5));
+  }
+
+//private:
+  Dispatcher dispatcher_;
+  Handler handler_;
+};
+
+template <typename Handler, typename Context>
+class rewrapped_handler
+{
+public:
+  explicit rewrapped_handler(Handler& handler, const Context& context)
+    : context_(context),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  explicit rewrapped_handler(const Handler& handler, const Context& context)
+    : context_(context),
+      handler_(handler)
+  {
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+  rewrapped_handler(const rewrapped_handler& other)
+    : context_(other.context_),
+      handler_(other.handler_)
+  {
+  }
+
+  rewrapped_handler(rewrapped_handler&& other)
+    : context_(BOOST_ASIO_MOVE_CAST(Context)(other.context_)),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(other.handler_))
+  {
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+  void operator()()
+  {
+    handler_();
+  }
+
+  void operator()() const
+  {
+    handler_();
+  }
+
+//private:
+  Context context_;
+  Handler handler_;
+};
+
+template <typename Dispatcher, typename Handler, typename IsContinuation>
+inline void* asio_handler_allocate(std::size_t size,
+    wrapped_handler<Dispatcher, Handler, IsContinuation>* this_handler)
+{
+  return boost_asio_handler_alloc_helpers::allocate(
+      size, this_handler->handler_);
+}
+
+template <typename Dispatcher, typename Handler, typename IsContinuation>
+inline void asio_handler_deallocate(void* pointer, std::size_t size,
+    wrapped_handler<Dispatcher, Handler, IsContinuation>* this_handler)
+{
+  boost_asio_handler_alloc_helpers::deallocate(
+      pointer, size, this_handler->handler_);
+}
+
+template <typename Dispatcher, typename Handler, typename IsContinuation>
+inline bool asio_handler_is_continuation(
+    wrapped_handler<Dispatcher, Handler, IsContinuation>* this_handler)
+{
+  return IsContinuation()(this_handler->dispatcher_, this_handler->handler_);
+}
+
+template <typename Function, typename Dispatcher,
+    typename Handler, typename IsContinuation>
+inline void asio_handler_invoke(Function& function,
+    wrapped_handler<Dispatcher, Handler, IsContinuation>* this_handler)
+{
+  this_handler->dispatcher_.dispatch(
+      rewrapped_handler<Function, Handler>(
+        function, this_handler->handler_));
+}
+
+template <typename Function, typename Dispatcher,
+    typename Handler, typename IsContinuation>
+inline void asio_handler_invoke(const Function& function,
+    wrapped_handler<Dispatcher, Handler, IsContinuation>* this_handler)
+{
+  this_handler->dispatcher_.dispatch(
+      rewrapped_handler<Function, Handler>(
+        function, this_handler->handler_));
+}
+
+template <typename Handler, typename Context>
+inline void* asio_handler_allocate(std::size_t size,
+    rewrapped_handler<Handler, Context>* this_handler)
+{
+  return boost_asio_handler_alloc_helpers::allocate(
+      size, this_handler->context_);
+}
+
+template <typename Handler, typename Context>
+inline void asio_handler_deallocate(void* pointer, std::size_t size,
+    rewrapped_handler<Handler, Context>* this_handler)
+{
+  boost_asio_handler_alloc_helpers::deallocate(
+      pointer, size, this_handler->context_);
+}
+
+template <typename Dispatcher, typename Context>
+inline bool asio_handler_is_continuation(
+    rewrapped_handler<Dispatcher, Context>* this_handler)
+{
+  return boost_asio_handler_cont_helpers::is_continuation(
+      this_handler->context_);
+}
+
+template <typename Function, typename Handler, typename Context>
+inline void asio_handler_invoke(Function& function,
+    rewrapped_handler<Handler, Context>* this_handler)
+{
+  boost_asio_handler_invoke_helpers::invoke(
+      function, this_handler->context_);
+}
+
+template <typename Function, typename Handler, typename Context>
+inline void asio_handler_invoke(const Function& function,
+    rewrapped_handler<Handler, Context>* this_handler)
+{
+  boost_asio_handler_invoke_helpers::invoke(
+      function, this_handler->context_);
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_DETAIL_WRAPPED_HANDLER_HPP
diff --git a/ext/patches/boost/asio/error.hpp b/ext/patches/boost/asio/error.hpp
new file mode 100644
index 0000000..30bb197
--- /dev/null
+++ b/ext/patches/boost/asio/error.hpp
@@ -0,0 +1,336 @@
+//
+// error.hpp
+// ~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_ERROR_HPP
+#define BOOST_ASIO_ERROR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/cerrno.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/system/system_error.hpp>
+#if defined(BOOST_ASIO_WINDOWS) \
+  || defined(__CYGWIN__) \
+  || defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <winerror.h>
+#else
+# include <cerrno>
+# include <netdb.h>
+#endif
+
+#if defined(GENERATING_DOCUMENTATION)
+/// INTERNAL ONLY.
+# define BOOST_ASIO_NATIVE_ERROR(e) implementation_defined
+/// INTERNAL ONLY.
+# define BOOST_ASIO_SOCKET_ERROR(e) implementation_defined
+/// INTERNAL ONLY.
+# define BOOST_ASIO_NETDB_ERROR(e) implementation_defined
+/// INTERNAL ONLY.
+# define BOOST_ASIO_GETADDRINFO_ERROR(e) implementation_defined
+/// INTERNAL ONLY.
+# define BOOST_ASIO_WIN_OR_POSIX(e_win, e_posix) implementation_defined
+#elif defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# define BOOST_ASIO_NATIVE_ERROR(e) __HRESULT_FROM_WIN32(e)
+# define BOOST_ASIO_SOCKET_ERROR(e) __HRESULT_FROM_WIN32(WSA ## e)
+# define BOOST_ASIO_NETDB_ERROR(e) __HRESULT_FROM_WIN32(WSA ## e)
+# define BOOST_ASIO_GETADDRINFO_ERROR(e) __HRESULT_FROM_WIN32(WSA ## e)
+# define BOOST_ASIO_WIN_OR_POSIX(e_win, e_posix) e_win
+#elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+# define BOOST_ASIO_NATIVE_ERROR(e) e
+# define BOOST_ASIO_SOCKET_ERROR(e) WSA ## e
+# define BOOST_ASIO_NETDB_ERROR(e) WSA ## e
+# define BOOST_ASIO_GETADDRINFO_ERROR(e) WSA ## e
+# define BOOST_ASIO_WIN_OR_POSIX(e_win, e_posix) e_win
+#else
+# define BOOST_ASIO_NATIVE_ERROR(e) e
+# define BOOST_ASIO_SOCKET_ERROR(e) e
+# define BOOST_ASIO_NETDB_ERROR(e) e
+# define BOOST_ASIO_GETADDRINFO_ERROR(e) e
+# define BOOST_ASIO_WIN_OR_POSIX(e_win, e_posix) e_posix
+#endif
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace error {
+
+enum basic_errors
+{
+  /// Permission denied.
+  access_denied = BOOST_ASIO_SOCKET_ERROR(EACCES),
+
+  /// Address family not supported by protocol.
+  address_family_not_supported = BOOST_ASIO_SOCKET_ERROR(EAFNOSUPPORT),
+
+  /// Address already in use.
+  address_in_use = BOOST_ASIO_SOCKET_ERROR(EADDRINUSE),
+
+  /// Transport endpoint is already connected.
+  already_connected = BOOST_ASIO_SOCKET_ERROR(EISCONN),
+
+  /// Operation already in progress.
+  already_started = BOOST_ASIO_SOCKET_ERROR(EALREADY),
+
+  /// Broken pipe.
+  broken_pipe = BOOST_ASIO_WIN_OR_POSIX(
+      BOOST_ASIO_NATIVE_ERROR(ERROR_BROKEN_PIPE),
+      BOOST_ASIO_NATIVE_ERROR(EPIPE)),
+
+  /// A connection has been aborted.
+  connection_aborted = BOOST_ASIO_SOCKET_ERROR(ECONNABORTED),
+
+  /// Connection refused.
+  connection_refused = BOOST_ASIO_SOCKET_ERROR(ECONNREFUSED),
+
+  /// Connection reset by peer.
+  connection_reset = BOOST_ASIO_SOCKET_ERROR(ECONNRESET),
+
+  /// Bad file descriptor.
+  bad_descriptor = BOOST_ASIO_SOCKET_ERROR(EBADF),
+
+  /// Bad address.
+  fault = BOOST_ASIO_SOCKET_ERROR(EFAULT),
+
+  /// No route to host.
+  host_unreachable = BOOST_ASIO_SOCKET_ERROR(EHOSTUNREACH),
+
+  /// Operation now in progress.
+  in_progress = BOOST_ASIO_SOCKET_ERROR(EINPROGRESS),
+
+  /// Interrupted system call.
+  interrupted = BOOST_ASIO_SOCKET_ERROR(EINTR),
+
+  /// Invalid argument.
+  invalid_argument = BOOST_ASIO_SOCKET_ERROR(EINVAL),
+
+  /// Message too long.
+  message_size = BOOST_ASIO_SOCKET_ERROR(EMSGSIZE),
+
+  /// The name was too long.
+  name_too_long = BOOST_ASIO_SOCKET_ERROR(ENAMETOOLONG),
+
+  /// Network is down.
+  network_down = BOOST_ASIO_SOCKET_ERROR(ENETDOWN),
+
+  /// Network dropped connection on reset.
+  network_reset = BOOST_ASIO_SOCKET_ERROR(ENETRESET),
+
+  /// Network is unreachable.
+  network_unreachable = BOOST_ASIO_SOCKET_ERROR(ENETUNREACH),
+
+  /// Too many open files.
+  no_descriptors = BOOST_ASIO_SOCKET_ERROR(EMFILE),
+
+  /// No buffer space available.
+  no_buffer_space = BOOST_ASIO_SOCKET_ERROR(ENOBUFS),
+
+  /// Cannot allocate memory.
+  no_memory = BOOST_ASIO_WIN_OR_POSIX(
+      BOOST_ASIO_NATIVE_ERROR(ERROR_OUTOFMEMORY),
+      BOOST_ASIO_NATIVE_ERROR(ENOMEM)),
+
+  /// Operation not permitted.
+  no_permission = BOOST_ASIO_WIN_OR_POSIX(
+      BOOST_ASIO_NATIVE_ERROR(ERROR_ACCESS_DENIED),
+      BOOST_ASIO_NATIVE_ERROR(EPERM)),
+
+  /// Protocol not available.
+  no_protocol_option = BOOST_ASIO_SOCKET_ERROR(ENOPROTOOPT),
+
+  /// Transport endpoint is not connected.
+  not_connected = BOOST_ASIO_SOCKET_ERROR(ENOTCONN),
+
+  /// Socket operation on non-socket.
+  not_socket = BOOST_ASIO_SOCKET_ERROR(ENOTSOCK),
+
+  /// Operation cancelled.
+  operation_aborted = BOOST_ASIO_WIN_OR_POSIX(
+      BOOST_ASIO_NATIVE_ERROR(ERROR_OPERATION_ABORTED),
+      BOOST_ASIO_NATIVE_ERROR(ECANCELED)),
+
+  /// Operation not supported.
+  operation_not_supported = BOOST_ASIO_SOCKET_ERROR(EOPNOTSUPP),
+
+  /// Cannot send after transport endpoint shutdown.
+  shut_down = BOOST_ASIO_SOCKET_ERROR(ESHUTDOWN),
+
+  /// Connection timed out.
+  timed_out = BOOST_ASIO_SOCKET_ERROR(ETIMEDOUT),
+
+  /// Resource temporarily unavailable.
+  try_again = BOOST_ASIO_WIN_OR_POSIX(
+      BOOST_ASIO_NATIVE_ERROR(ERROR_RETRY),
+      BOOST_ASIO_NATIVE_ERROR(EAGAIN)),
+
+  /// The socket is marked non-blocking and the requested operation would block.
+  would_block = BOOST_ASIO_SOCKET_ERROR(EWOULDBLOCK)
+};
+
+enum netdb_errors
+{
+  /// Host not found (authoritative).
+  host_not_found = BOOST_ASIO_NETDB_ERROR(HOST_NOT_FOUND),
+
+  /// Host not found (non-authoritative).
+  host_not_found_try_again = BOOST_ASIO_NETDB_ERROR(TRY_AGAIN),
+
+  /// The query is valid but does not have associated address data.
+  no_data = BOOST_ASIO_NETDB_ERROR(NO_DATA),
+
+  /// A non-recoverable error occurred.
+  no_recovery = BOOST_ASIO_NETDB_ERROR(NO_RECOVERY)
+};
+
+enum addrinfo_errors
+{
+  /// The service is not supported for the given socket type.
+  service_not_found = BOOST_ASIO_WIN_OR_POSIX(
+      BOOST_ASIO_NATIVE_ERROR(WSATYPE_NOT_FOUND),
+      BOOST_ASIO_GETADDRINFO_ERROR(EAI_SERVICE)),
+
+  /// The socket type is not supported.
+  socket_type_not_supported = BOOST_ASIO_WIN_OR_POSIX(
+      BOOST_ASIO_NATIVE_ERROR(WSAESOCKTNOSUPPORT),
+      BOOST_ASIO_GETADDRINFO_ERROR(EAI_SOCKTYPE))
+};
+
+enum misc_errors
+{
+  /// Already open.
+  already_open = 1,
+
+  /// End of file or stream.
+  eof,
+
+  /// Element not found.
+  not_found,
+
+  /// The descriptor cannot fit into the select system call's fd_set.
+  fd_set_failure
+};
+
+inline const boost::system::error_category& get_system_category()
+{
+  return boost::system::system_category();
+}
+
+#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+extern BOOST_ASIO_DECL
+const boost::system::error_category& get_netdb_category();
+
+extern BOOST_ASIO_DECL
+const boost::system::error_category& get_addrinfo_category();
+
+#else // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+inline const boost::system::error_category& get_netdb_category()
+{
+  return get_system_category();
+}
+
+inline const boost::system::error_category& get_addrinfo_category()
+{
+  return get_system_category();
+}
+
+#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+extern BOOST_ASIO_DECL
+const boost::system::error_category& get_misc_category();
+
+static const boost::system::error_category& system_category
+  = boost::asio::error::get_system_category();
+static const boost::system::error_category& netdb_category
+  = boost::asio::error::get_netdb_category();
+static const boost::system::error_category& addrinfo_category
+  = boost::asio::error::get_addrinfo_category();
+static const boost::system::error_category& misc_category
+  = boost::asio::error::get_misc_category();
+
+} // namespace error
+} // namespace asio
+} // namespace boost
+
+namespace boost {
+namespace system {
+
+template<> struct is_error_code_enum<boost::asio::error::basic_errors>
+{
+  static const bool value = true;
+};
+
+template<> struct is_error_code_enum<boost::asio::error::netdb_errors>
+{
+  static const bool value = true;
+};
+
+template<> struct is_error_code_enum<boost::asio::error::addrinfo_errors>
+{
+  static const bool value = true;
+};
+
+template<> struct is_error_code_enum<boost::asio::error::misc_errors>
+{
+  static const bool value = true;
+};
+
+} // namespace system
+} // namespace boost
+
+namespace boost {
+namespace asio {
+namespace error {
+
+inline boost::system::error_code make_error_code(basic_errors e)
+{
+  return boost::system::error_code(
+      static_cast<int>(e), get_system_category());
+}
+
+inline boost::system::error_code make_error_code(netdb_errors e)
+{
+  return boost::system::error_code(
+      static_cast<int>(e), get_netdb_category());
+}
+
+inline boost::system::error_code make_error_code(addrinfo_errors e)
+{
+  return boost::system::error_code(
+      static_cast<int>(e), get_addrinfo_category());
+}
+
+inline boost::system::error_code make_error_code(misc_errors e)
+{
+  return boost::system::error_code(
+      static_cast<int>(e), get_misc_category());
+}
+
+} // namespace error
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#undef BOOST_ASIO_NATIVE_ERROR
+#undef BOOST_ASIO_SOCKET_ERROR
+#undef BOOST_ASIO_NETDB_ERROR
+#undef BOOST_ASIO_GETADDRINFO_ERROR
+#undef BOOST_ASIO_WIN_OR_POSIX
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/impl/error.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_ERROR_HPP
diff --git a/ext/patches/boost/asio/generic/basic_endpoint.hpp b/ext/patches/boost/asio/generic/basic_endpoint.hpp
new file mode 100644
index 0000000..f946c33
--- /dev/null
+++ b/ext/patches/boost/asio/generic/basic_endpoint.hpp
@@ -0,0 +1,195 @@
+//
+// generic/basic_endpoint.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_GENERIC_BASIC_ENDPOINT_HPP
+#define BOOST_ASIO_GENERIC_BASIC_ENDPOINT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/generic/detail/endpoint.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace generic {
+
+/// Describes an endpoint for any socket type.
+/**
+ * The boost::asio::generic::basic_endpoint class template describes an endpoint
+ * that may be associated with any socket type.
+ *
+ * @note The socket types sockaddr type must be able to fit into a
+ * @c sockaddr_storage structure.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ *
+ * @par Concepts:
+ * Endpoint.
+ */
+template <typename Protocol>
+class basic_endpoint
+{
+public:
+  /// The protocol type associated with the endpoint.
+  typedef Protocol protocol_type;
+
+  /// The type of the endpoint structure. This type is dependent on the
+  /// underlying implementation of the socket layer.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined data_type;
+#else
+  typedef boost::asio::detail::socket_addr_type data_type;
+#endif
+
+  /// Default constructor.
+  basic_endpoint()
+  {
+  }
+
+  /// Construct an endpoint from the specified socket address.
+  basic_endpoint(const void* socket_address,
+      std::size_t socket_address_size, int socket_protocol = 0)
+    : impl_(socket_address, socket_address_size, socket_protocol)
+  {
+  }
+
+  /// Construct an endpoint from the specific endpoint type.
+  template <typename Endpoint>
+  basic_endpoint(const Endpoint& endpoint)
+    : impl_(endpoint.data(), endpoint.size(), endpoint.protocol().protocol())
+  {
+  }
+
+  /// Copy constructor.
+  basic_endpoint(const basic_endpoint& other)
+    : impl_(other.impl_)
+  {
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+  /// Move constructor.
+  basic_endpoint(basic_endpoint&& other)
+    : impl_(other.impl_)
+  {
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+  /// Assign from another endpoint.
+  basic_endpoint& operator=(const basic_endpoint& other)
+  {
+    impl_ = other.impl_;
+    return *this;
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+  /// Move-assign from another endpoint.
+  basic_endpoint& operator=(basic_endpoint&& other)
+  {
+    impl_ = other.impl_;
+    return *this;
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+  /// The protocol associated with the endpoint.
+  protocol_type protocol() const
+  {
+    return protocol_type(impl_.family(), impl_.protocol());
+  }
+
+  /// Get the underlying endpoint in the native type.
+  data_type* data()
+  {
+    return impl_.data();
+  }
+
+  /// Get the underlying endpoint in the native type.
+  const data_type* data() const
+  {
+    return impl_.data();
+  }
+
+  /// Get the underlying size of the endpoint in the native type.
+  std::size_t size() const
+  {
+    return impl_.size();
+  }
+
+  /// Set the underlying size of the endpoint in the native type.
+  void resize(std::size_t new_size)
+  {
+    impl_.resize(new_size);
+  }
+
+  /// Get the capacity of the endpoint in the native type.
+  std::size_t capacity() const
+  {
+    return impl_.capacity();
+  }
+
+  /// Compare two endpoints for equality.
+  friend bool operator==(const basic_endpoint<Protocol>& e1,
+      const basic_endpoint<Protocol>& e2)
+  {
+    return e1.impl_ == e2.impl_;
+  }
+
+  /// Compare two endpoints for inequality.
+  friend bool operator!=(const basic_endpoint<Protocol>& e1,
+      const basic_endpoint<Protocol>& e2)
+  {
+    return !(e1.impl_ == e2.impl_);
+  }
+
+  /// Compare endpoints for ordering.
+  friend bool operator<(const basic_endpoint<Protocol>& e1,
+      const basic_endpoint<Protocol>& e2)
+  {
+    return e1.impl_ < e2.impl_;
+  }
+
+  /// Compare endpoints for ordering.
+  friend bool operator>(const basic_endpoint<Protocol>& e1,
+      const basic_endpoint<Protocol>& e2)
+  {
+    return e2.impl_ < e1.impl_;
+  }
+
+  /// Compare endpoints for ordering.
+  friend bool operator<=(const basic_endpoint<Protocol>& e1,
+      const basic_endpoint<Protocol>& e2)
+  {
+    return !(e2 < e1);
+  }
+
+  /// Compare endpoints for ordering.
+  friend bool operator>=(const basic_endpoint<Protocol>& e1,
+      const basic_endpoint<Protocol>& e2)
+  {
+    return !(e1 < e2);
+  }
+
+private:
+  // The underlying generic endpoint.
+  boost::asio::generic::detail::endpoint impl_;
+};
+
+} // namespace generic
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_GENERIC_BASIC_ENDPOINT_HPP
diff --git a/ext/patches/boost/asio/generic/datagram_protocol.hpp b/ext/patches/boost/asio/generic/datagram_protocol.hpp
new file mode 100644
index 0000000..85159f2
--- /dev/null
+++ b/ext/patches/boost/asio/generic/datagram_protocol.hpp
@@ -0,0 +1,125 @@
+//
+// generic/datagram_protocol.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_GENERIC_DATAGRAM_PROTOCOL_HPP
+#define BOOST_ASIO_GENERIC_DATAGRAM_PROTOCOL_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <typeinfo>
+#include <boost/asio/basic_datagram_socket.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/throw_exception.hpp>
+#include <boost/asio/generic/basic_endpoint.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace generic {
+
+/// Encapsulates the flags needed for a generic datagram-oriented socket.
+/**
+ * The boost::asio::generic::datagram_protocol class contains flags necessary
+ * for datagram-oriented sockets of any address family and protocol.
+ *
+ * @par Examples
+ * Constructing using a native address family and socket protocol:
+ * @code datagram_protocol p(AF_INET, IPPROTO_UDP); @endcode
+ * Constructing from a specific protocol type:
+ * @code datagram_protocol p(boost::asio::ip::udp::v4()); @endcode
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Safe.
+ *
+ * @par Concepts:
+ * Protocol.
+ */
+class datagram_protocol
+{
+public:
+  /// Construct a protocol object for a specific address family and protocol.
+  datagram_protocol(int address_family, int socket_protocol)
+    : family_(address_family),
+      protocol_(socket_protocol)
+  {
+  }
+
+  /// Construct a generic protocol object from a specific protocol.
+  /**
+   * @throws @c bad_cast Thrown if the source protocol is not datagram-oriented.
+   */
+  template <typename Protocol>
+  datagram_protocol(const Protocol& source_protocol)
+    : family_(source_protocol.family()),
+      protocol_(source_protocol.protocol())
+  {
+    if (source_protocol.type() != type())
+    {
+      std::bad_cast ex;
+      boost::asio::detail::throw_exception(ex);
+    }
+  }
+
+  /// Obtain an identifier for the type of the protocol.
+  int type() const
+  {
+    return BOOST_ASIO_OS_DEF(SOCK_DGRAM);
+  }
+
+  /// Obtain an identifier for the protocol.
+  int protocol() const
+  {
+    return protocol_;
+  }
+
+  /// Obtain an identifier for the protocol family.
+  int family() const
+  {
+    return family_;
+  }
+
+  /// Compare two protocols for equality.
+  friend bool operator==(const datagram_protocol& p1,
+      const datagram_protocol& p2)
+  {
+    return p1.family_ == p2.family_ && p1.protocol_ == p2.protocol_;
+  }
+
+  /// Compare two protocols for inequality.
+  friend bool operator!=(const datagram_protocol& p1,
+      const datagram_protocol& p2)
+  {
+    return !(p1 == p2);
+  }
+
+  /// The type of an endpoint.
+  typedef basic_endpoint<datagram_protocol> endpoint;
+
+  /// The generic socket type.
+  typedef basic_datagram_socket<datagram_protocol> socket;
+
+private:
+  int family_;
+  int protocol_;
+};
+
+} // namespace generic
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_GENERIC_DATAGRAM_PROTOCOL_HPP
diff --git a/ext/patches/boost/asio/generic/detail/endpoint.hpp b/ext/patches/boost/asio/generic/detail/endpoint.hpp
new file mode 100644
index 0000000..d156ed4
--- /dev/null
+++ b/ext/patches/boost/asio/generic/detail/endpoint.hpp
@@ -0,0 +1,135 @@
+//
+// generic/detail/endpoint.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_GENERIC_DETAIL_ENDPOINT_HPP
+#define BOOST_ASIO_GENERIC_DETAIL_ENDPOINT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <cstddef>
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace generic {
+namespace detail {
+
+// Helper class for implementing a generic socket endpoint.
+class endpoint
+{
+public:
+  // Default constructor.
+  BOOST_ASIO_DECL endpoint();
+
+  // Construct an endpoint from the specified raw bytes.
+  BOOST_ASIO_DECL endpoint(const void* sock_addr,
+      std::size_t sock_addr_size, int sock_protocol);
+
+  // Copy constructor.
+  endpoint(const endpoint& other)
+    : data_(other.data_),
+      size_(other.size_),
+      protocol_(other.protocol_)
+  {
+  }
+
+  // Assign from another endpoint.
+  endpoint& operator=(const endpoint& other)
+  {
+    data_ = other.data_;
+    size_ = other.size_;
+    protocol_ = other.protocol_;
+    return *this;
+  }
+
+  // Get the address family associated with the endpoint.
+  int family() const
+  {
+    return data_.base.sa_family;
+  }
+
+  // Get the socket protocol associated with the endpoint.
+  int protocol() const
+  {
+    return protocol_;
+  }
+
+  // Get the underlying endpoint in the native type.
+  boost::asio::detail::socket_addr_type* data()
+  {
+    return &data_.base;
+  }
+
+  // Get the underlying endpoint in the native type.
+  const boost::asio::detail::socket_addr_type* data() const
+  {
+    return &data_.base;
+  }
+
+  // Get the underlying size of the endpoint in the native type.
+  std::size_t size() const
+  {
+    return size_;
+  }
+
+  // Set the underlying size of the endpoint in the native type.
+  BOOST_ASIO_DECL void resize(std::size_t size);
+
+  // Get the capacity of the endpoint in the native type.
+  std::size_t capacity() const
+  {
+    return sizeof(boost::asio::detail::sockaddr_storage_type);
+  }
+
+  // Compare two endpoints for equality.
+  BOOST_ASIO_DECL friend bool operator==(
+      const endpoint& e1, const endpoint& e2);
+
+  // Compare endpoints for ordering.
+  BOOST_ASIO_DECL friend bool operator<(
+      const endpoint& e1, const endpoint& e2);
+
+private:
+  // The underlying socket address.
+  union data_union
+  {
+    boost::asio::detail::socket_addr_type base;
+    boost::asio::detail::sockaddr_storage_type generic;
+  } data_;
+
+  // The length of the socket address stored in the endpoint.
+  std::size_t size_;
+
+  // The socket protocol associated with the endpoint.
+  int protocol_;
+
+  // Initialise with a specified memory.
+  BOOST_ASIO_DECL void init(const void* sock_addr,
+      std::size_t sock_addr_size, int sock_protocol);
+};
+
+} // namespace detail
+} // namespace generic
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/generic/detail/impl/endpoint.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_GENERIC_DETAIL_ENDPOINT_HPP
diff --git a/ext/patches/boost/asio/generic/detail/impl/endpoint.ipp b/ext/patches/boost/asio/generic/detail/impl/endpoint.ipp
new file mode 100644
index 0000000..a8b09ae
--- /dev/null
+++ b/ext/patches/boost/asio/generic/detail/impl/endpoint.ipp
@@ -0,0 +1,111 @@
+//
+// generic/detail/impl/endpoint.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_GENERIC_DETAIL_IMPL_ENDPOINT_IPP
+#define BOOST_ASIO_GENERIC_DETAIL_IMPL_ENDPOINT_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <cstring>
+#include <typeinfo>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/detail/throw_exception.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/generic/detail/endpoint.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace generic {
+namespace detail {
+
+endpoint::endpoint()
+{
+  init(0, 0, 0);
+}
+
+endpoint::endpoint(const void* sock_addr,
+    std::size_t sock_addr_size, int sock_protocol)
+{
+  init(sock_addr, sock_addr_size, sock_protocol);
+}
+
+void endpoint::resize(std::size_t new_size)
+{
+  if (new_size > sizeof(boost::asio::detail::sockaddr_storage_type))
+  {
+    boost::system::error_code ec(boost::asio::error::invalid_argument);
+    boost::asio::detail::throw_error(ec);
+  }
+  else
+  {
+    size_ = new_size;
+    protocol_ = 0;
+  }
+}
+
+bool operator==(const endpoint& e1, const endpoint& e2)
+{
+  using namespace std; // For memcmp.
+  return e1.size() == e2.size() && memcmp(e1.data(), e2.data(), e1.size()) == 0;
+}
+
+bool operator<(const endpoint& e1, const endpoint& e2)
+{
+  if (e1.protocol() < e2.protocol())
+    return true;
+
+  if (e1.protocol() > e2.protocol())
+    return false;
+
+  using namespace std; // For memcmp.
+  std::size_t compare_size = e1.size() < e2.size() ? e1.size() : e2.size();
+  int compare_result = memcmp(e1.data(), e2.data(), compare_size);
+
+  if (compare_result < 0)
+    return true;
+
+  if (compare_result > 0)
+    return false;
+
+  return e1.size() < e2.size();
+}
+
+void endpoint::init(const void* sock_addr,
+    std::size_t sock_addr_size, int sock_protocol)
+{
+  if (sock_addr_size > sizeof(boost::asio::detail::sockaddr_storage_type))
+  {
+    boost::system::error_code ec(boost::asio::error::invalid_argument);
+    boost::asio::detail::throw_error(ec);
+  }
+
+  using namespace std; // For memset and memcpy.
+  memset(&data_.generic, 0, sizeof(boost::asio::detail::sockaddr_storage_type));
+  memcpy(&data_.generic, sock_addr, sock_addr_size);
+
+  size_ = sock_addr_size;
+  protocol_ = sock_protocol;
+}
+
+} // namespace detail
+} // namespace generic
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_GENERIC_DETAIL_IMPL_ENDPOINT_IPP
diff --git a/ext/patches/boost/asio/generic/raw_protocol.hpp b/ext/patches/boost/asio/generic/raw_protocol.hpp
new file mode 100644
index 0000000..a955297
--- /dev/null
+++ b/ext/patches/boost/asio/generic/raw_protocol.hpp
@@ -0,0 +1,123 @@
+//
+// generic/raw_protocol.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_GENERIC_RAW_PROTOCOL_HPP
+#define BOOST_ASIO_GENERIC_RAW_PROTOCOL_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <typeinfo>
+#include <boost/asio/basic_raw_socket.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/throw_exception.hpp>
+#include <boost/asio/generic/basic_endpoint.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace generic {
+
+/// Encapsulates the flags needed for a generic raw socket.
+/**
+ * The boost::asio::generic::raw_protocol class contains flags necessary for
+ * raw sockets of any address family and protocol.
+ *
+ * @par Examples
+ * Constructing using a native address family and socket protocol:
+ * @code raw_protocol p(AF_INET, IPPROTO_ICMP); @endcode
+ * Constructing from a specific protocol type:
+ * @code raw_protocol p(boost::asio::ip::icmp::v4()); @endcode
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Safe.
+ *
+ * @par Concepts:
+ * Protocol.
+ */
+class raw_protocol
+{
+public:
+  /// Construct a protocol object for a specific address family and protocol.
+  raw_protocol(int address_family, int socket_protocol)
+    : family_(address_family),
+      protocol_(socket_protocol)
+  {
+  }
+
+  /// Construct a generic protocol object from a specific protocol.
+  /**
+   * @throws @c bad_cast Thrown if the source protocol is not raw-oriented.
+   */
+  template <typename Protocol>
+  raw_protocol(const Protocol& source_protocol)
+    : family_(source_protocol.family()),
+      protocol_(source_protocol.protocol())
+  {
+    if (source_protocol.type() != type())
+    {
+      std::bad_cast ex;
+      boost::asio::detail::throw_exception(ex);
+    }
+  }
+
+  /// Obtain an identifier for the type of the protocol.
+  int type() const
+  {
+    return BOOST_ASIO_OS_DEF(SOCK_RAW);
+  }
+
+  /// Obtain an identifier for the protocol.
+  int protocol() const
+  {
+    return protocol_;
+  }
+
+  /// Obtain an identifier for the protocol family.
+  int family() const
+  {
+    return family_;
+  }
+
+  /// Compare two protocols for equality.
+  friend bool operator==(const raw_protocol& p1, const raw_protocol& p2)
+  {
+    return p1.family_ == p2.family_ && p1.protocol_ == p2.protocol_;
+  }
+
+  /// Compare two protocols for inequality.
+  friend bool operator!=(const raw_protocol& p1, const raw_protocol& p2)
+  {
+    return !(p1 == p2);
+  }
+
+  /// The type of an endpoint.
+  typedef basic_endpoint<raw_protocol> endpoint;
+
+  /// The generic socket type.
+  typedef basic_raw_socket<raw_protocol> socket;
+
+private:
+  int family_;
+  int protocol_;
+};
+
+} // namespace generic
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_GENERIC_RAW_PROTOCOL_HPP
diff --git a/ext/patches/boost/asio/generic/seq_packet_protocol.hpp b/ext/patches/boost/asio/generic/seq_packet_protocol.hpp
new file mode 100644
index 0000000..cb15c98
--- /dev/null
+++ b/ext/patches/boost/asio/generic/seq_packet_protocol.hpp
@@ -0,0 +1,124 @@
+//
+// generic/seq_packet_protocol.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_GENERIC_SEQ_PACKET_PROTOCOL_HPP
+#define BOOST_ASIO_GENERIC_SEQ_PACKET_PROTOCOL_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <typeinfo>
+#include <boost/asio/basic_seq_packet_socket.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/throw_exception.hpp>
+#include <boost/asio/generic/basic_endpoint.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace generic {
+
+/// Encapsulates the flags needed for a generic sequenced packet socket.
+/**
+ * The boost::asio::generic::seq_packet_protocol class contains flags necessary
+ * for seq_packet-oriented sockets of any address family and protocol.
+ *
+ * @par Examples
+ * Constructing using a native address family and socket protocol:
+ * @code seq_packet_protocol p(AF_INET, IPPROTO_SCTP); @endcode
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Safe.
+ *
+ * @par Concepts:
+ * Protocol.
+ */
+class seq_packet_protocol
+{
+public:
+  /// Construct a protocol object for a specific address family and protocol.
+  seq_packet_protocol(int address_family, int socket_protocol)
+    : family_(address_family),
+      protocol_(socket_protocol)
+  {
+  }
+
+  /// Construct a generic protocol object from a specific protocol.
+  /**
+   * @throws @c bad_cast Thrown if the source protocol is not based around
+   * sequenced packets.
+   */
+  template <typename Protocol>
+  seq_packet_protocol(const Protocol& source_protocol)
+    : family_(source_protocol.family()),
+      protocol_(source_protocol.protocol())
+  {
+    if (source_protocol.type() != type())
+    {
+      std::bad_cast ex;
+      boost::asio::detail::throw_exception(ex);
+    }
+  }
+
+  /// Obtain an identifier for the type of the protocol.
+  int type() const
+  {
+    return BOOST_ASIO_OS_DEF(SOCK_SEQPACKET);
+  }
+
+  /// Obtain an identifier for the protocol.
+  int protocol() const
+  {
+    return protocol_;
+  }
+
+  /// Obtain an identifier for the protocol family.
+  int family() const
+  {
+    return family_;
+  }
+
+  /// Compare two protocols for equality.
+  friend bool operator==(const seq_packet_protocol& p1,
+      const seq_packet_protocol& p2)
+  {
+    return p1.family_ == p2.family_ && p1.protocol_ == p2.protocol_;
+  }
+
+  /// Compare two protocols for inequality.
+  friend bool operator!=(const seq_packet_protocol& p1,
+      const seq_packet_protocol& p2)
+  {
+    return !(p1 == p2);
+  }
+
+  /// The type of an endpoint.
+  typedef basic_endpoint<seq_packet_protocol> endpoint;
+
+  /// The generic socket type.
+  typedef basic_seq_packet_socket<seq_packet_protocol> socket;
+
+private:
+  int family_;
+  int protocol_;
+};
+
+} // namespace generic
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_GENERIC_SEQ_PACKET_PROTOCOL_HPP
diff --git a/ext/patches/boost/asio/generic/stream_protocol.hpp b/ext/patches/boost/asio/generic/stream_protocol.hpp
new file mode 100644
index 0000000..e895b1d
--- /dev/null
+++ b/ext/patches/boost/asio/generic/stream_protocol.hpp
@@ -0,0 +1,129 @@
+//
+// generic/stream_protocol.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_GENERIC_STREAM_PROTOCOL_HPP
+#define BOOST_ASIO_GENERIC_STREAM_PROTOCOL_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <typeinfo>
+#include <boost/asio/basic_socket_iostream.hpp>
+#include <boost/asio/basic_stream_socket.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/throw_exception.hpp>
+#include <boost/asio/generic/basic_endpoint.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace generic {
+
+/// Encapsulates the flags needed for a generic stream-oriented socket.
+/**
+ * The boost::asio::generic::stream_protocol class contains flags necessary for
+ * stream-oriented sockets of any address family and protocol.
+ *
+ * @par Examples
+ * Constructing using a native address family and socket protocol:
+ * @code stream_protocol p(AF_INET, IPPROTO_TCP); @endcode
+ * Constructing from a specific protocol type:
+ * @code stream_protocol p(boost::asio::ip::tcp::v4()); @endcode
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Safe.
+ *
+ * @par Concepts:
+ * Protocol.
+ */
+class stream_protocol
+{
+public:
+  /// Construct a protocol object for a specific address family and protocol.
+  stream_protocol(int address_family, int socket_protocol)
+    : family_(address_family),
+      protocol_(socket_protocol)
+  {
+  }
+
+  /// Construct a generic protocol object from a specific protocol.
+  /**
+   * @throws @c bad_cast Thrown if the source protocol is not stream-oriented.
+   */
+  template <typename Protocol>
+  stream_protocol(const Protocol& source_protocol)
+    : family_(source_protocol.family()),
+      protocol_(source_protocol.protocol())
+  {
+    if (source_protocol.type() != type())
+    {
+      std::bad_cast ex;
+      boost::asio::detail::throw_exception(ex);
+    }
+  }
+
+  /// Obtain an identifier for the type of the protocol.
+  int type() const
+  {
+    return BOOST_ASIO_OS_DEF(SOCK_STREAM);
+  }
+
+  /// Obtain an identifier for the protocol.
+  int protocol() const
+  {
+    return protocol_;
+  }
+
+  /// Obtain an identifier for the protocol family.
+  int family() const
+  {
+    return family_;
+  }
+
+  /// Compare two protocols for equality.
+  friend bool operator==(const stream_protocol& p1, const stream_protocol& p2)
+  {
+    return p1.family_ == p2.family_ && p1.protocol_ == p2.protocol_;
+  }
+
+  /// Compare two protocols for inequality.
+  friend bool operator!=(const stream_protocol& p1, const stream_protocol& p2)
+  {
+    return !(p1 == p2);
+  }
+
+  /// The type of an endpoint.
+  typedef basic_endpoint<stream_protocol> endpoint;
+
+  /// The generic socket type.
+  typedef basic_stream_socket<stream_protocol> socket;
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+  /// The generic socket iostream type.
+  typedef basic_socket_iostream<stream_protocol> iostream;
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+private:
+  int family_;
+  int protocol_;
+};
+
+} // namespace generic
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_GENERIC_STREAM_PROTOCOL_HPP
diff --git a/ext/patches/boost/asio/handler_alloc_hook.hpp b/ext/patches/boost/asio/handler_alloc_hook.hpp
new file mode 100644
index 0000000..f1d3125
--- /dev/null
+++ b/ext/patches/boost/asio/handler_alloc_hook.hpp
@@ -0,0 +1,83 @@
+//
+// handler_alloc_hook.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_HANDLER_ALLOC_HOOK_HPP
+#define BOOST_ASIO_HANDLER_ALLOC_HOOK_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Default allocation function for handlers.
+/**
+ * Asynchronous operations may need to allocate temporary objects. Since
+ * asynchronous operations have a handler function object, these temporary
+ * objects can be said to be associated with the handler.
+ *
+ * Implement asio_handler_allocate and asio_handler_deallocate for your own
+ * handlers to provide custom allocation for these temporary objects.
+ *
+ * The default implementation of these allocation hooks uses <tt>::operator
+ * new</tt> and <tt>::operator delete</tt>.
+ *
+ * @note All temporary objects associated with a handler will be deallocated
+ * before the upcall to the handler is performed. This allows the same memory to
+ * be reused for a subsequent asynchronous operation initiated by the handler.
+ *
+ * @par Example
+ * @code
+ * class my_handler;
+ *
+ * void* asio_handler_allocate(std::size_t size, my_handler* context)
+ * {
+ *   return ::operator new(size);
+ * }
+ *
+ * void asio_handler_deallocate(void* pointer, std::size_t size,
+ *     my_handler* context)
+ * {
+ *   ::operator delete(pointer);
+ * }
+ * @endcode
+ */
+BOOST_ASIO_DECL void* asio_handler_allocate(
+    std::size_t size, ...);
+
+/// Default deallocation function for handlers.
+/**
+ * Implement asio_handler_allocate and asio_handler_deallocate for your own
+ * handlers to provide custom allocation for the associated temporary objects.
+ *
+ * The default implementation of these allocation hooks uses <tt>::operator
+ * new</tt> and <tt>::operator delete</tt>.
+ *
+ * @sa asio_handler_allocate.
+ */
+BOOST_ASIO_DECL void asio_handler_deallocate(
+    void* pointer, std::size_t size, ...);
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/impl/handler_alloc_hook.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_HANDLER_ALLOC_HOOK_HPP
diff --git a/ext/patches/boost/asio/handler_continuation_hook.hpp b/ext/patches/boost/asio/handler_continuation_hook.hpp
new file mode 100644
index 0000000..763af3f
--- /dev/null
+++ b/ext/patches/boost/asio/handler_continuation_hook.hpp
@@ -0,0 +1,56 @@
+//
+// handler_continuation_hook.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_HANDLER_CONTINUATION_HOOK_HPP
+#define BOOST_ASIO_HANDLER_CONTINUATION_HOOK_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Default continuation function for handlers.
+/**
+ * Asynchronous operations may represent a continuation of the asynchronous
+ * control flow associated with the current handler. The implementation can use
+ * this knowledge to optimise scheduling of the handler.
+ *
+ * Implement asio_handler_is_continuation for your own handlers to indicate
+ * when a handler represents a continuation.
+ *
+ * The default implementation of the continuation hook returns <tt>false</tt>.
+ *
+ * @par Example
+ * @code
+ * class my_handler;
+ *
+ * bool asio_handler_is_continuation(my_handler* context)
+ * {
+ *   return true;
+ * }
+ * @endcode
+ */
+inline bool asio_handler_is_continuation(...)
+{
+  return false;
+}
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_HANDLER_CONTINUATION_HOOK_HPP
diff --git a/ext/patches/boost/asio/handler_invoke_hook.hpp b/ext/patches/boost/asio/handler_invoke_hook.hpp
new file mode 100644
index 0000000..d4f7987
--- /dev/null
+++ b/ext/patches/boost/asio/handler_invoke_hook.hpp
@@ -0,0 +1,87 @@
+//
+// handler_invoke_hook.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_HANDLER_INVOKE_HOOK_HPP
+#define BOOST_ASIO_HANDLER_INVOKE_HOOK_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/** @defgroup asio_handler_invoke boost::asio::asio_handler_invoke
+ *
+ * @brief Default invoke function for handlers.
+ *
+ * Completion handlers for asynchronous operations are invoked by the
+ * io_service associated with the corresponding object (e.g. a socket or
+ * deadline_timer). Certain guarantees are made on when the handler may be
+ * invoked, in particular that a handler can only be invoked from a thread that
+ * is currently calling @c run() on the corresponding io_service object.
+ * Handlers may subsequently be invoked through other objects (such as
+ * io_service::strand objects) that provide additional guarantees.
+ *
+ * When asynchronous operations are composed from other asynchronous
+ * operations, all intermediate handlers should be invoked using the same
+ * method as the final handler. This is required to ensure that user-defined
+ * objects are not accessed in a way that may violate the guarantees. This
+ * hooking function ensures that the invoked method used for the final handler
+ * is accessible at each intermediate step.
+ *
+ * Implement asio_handler_invoke for your own handlers to specify a custom
+ * invocation strategy.
+ *
+ * This default implementation invokes the function object like so:
+ * @code function(); @endcode
+ * If necessary, the default implementation makes a copy of the function object
+ * so that the non-const operator() can be used.
+ *
+ * @par Example
+ * @code
+ * class my_handler;
+ *
+ * template <typename Function>
+ * void asio_handler_invoke(Function function, my_handler* context)
+ * {
+ *   context->strand_.dispatch(function);
+ * }
+ * @endcode
+ */
+/*@{*/
+
+/// Default handler invocation hook used for non-const function objects.
+template <typename Function>
+inline void asio_handler_invoke(Function& function, ...)
+{
+  function();
+}
+
+/// Default handler invocation hook used for const function objects.
+template <typename Function>
+inline void asio_handler_invoke(const Function& function, ...)
+{
+  Function tmp(function);
+  tmp();
+}
+
+/*@}*/
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_HANDLER_INVOKE_HOOK_HPP
diff --git a/ext/patches/boost/asio/handler_type.hpp b/ext/patches/boost/asio/handler_type.hpp
new file mode 100644
index 0000000..f09d634
--- /dev/null
+++ b/ext/patches/boost/asio/handler_type.hpp
@@ -0,0 +1,114 @@
+//
+// handler_type.hpp
+// ~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_HANDLER_TYPE_HPP
+#define BOOST_ASIO_HANDLER_TYPE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Default handler type traits provided for all handlers.
+/**
+ * The handler_type traits class is used for determining the concrete handler
+ * type to be used for an asynchronous operation. It allows the handler type to
+ * be determined at the point where the specific completion handler signature
+ * is known.
+ *
+ * This template may be specialised for user-defined handler types.
+ */
+template <typename Handler, typename Signature>
+struct handler_type
+{
+  /// The handler type for the specific signature.
+  typedef Handler type;
+};
+
+#if !defined(GENERATING_DOCUMENTATION)
+
+template <typename Handler, typename Signature>
+struct handler_type<const Handler, Signature>
+  : handler_type<Handler, Signature> {};
+
+template <typename Handler, typename Signature>
+struct handler_type<volatile Handler, Signature>
+  : handler_type<Handler, Signature> {};
+
+template <typename Handler, typename Signature>
+struct handler_type<const volatile Handler, Signature>
+  : handler_type<Handler, Signature> {};
+
+template <typename Handler, typename Signature>
+struct handler_type<const Handler&, Signature>
+  : handler_type<Handler, Signature> {};
+
+template <typename Handler, typename Signature>
+struct handler_type<volatile Handler&, Signature>
+  : handler_type<Handler, Signature> {};
+
+template <typename Handler, typename Signature>
+struct handler_type<const volatile Handler&, Signature>
+  : handler_type<Handler, Signature> {};
+
+template <typename Handler, typename Signature>
+struct handler_type<Handler&, Signature>
+  : handler_type<Handler, Signature> {};
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+template <typename Handler, typename Signature>
+struct handler_type<Handler&&, Signature>
+  : handler_type<Handler, Signature> {};
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+template <typename ReturnType, typename Signature>
+struct handler_type<ReturnType(), Signature>
+  : handler_type<ReturnType(*)(), Signature> {};
+
+template <typename ReturnType, typename Arg1, typename Signature>
+struct handler_type<ReturnType(Arg1), Signature>
+  : handler_type<ReturnType(*)(Arg1), Signature> {};
+
+template <typename ReturnType, typename Arg1, typename Arg2, typename Signature>
+struct handler_type<ReturnType(Arg1, Arg2), Signature>
+  : handler_type<ReturnType(*)(Arg1, Arg2), Signature> {};
+
+template <typename ReturnType, typename Arg1, typename Arg2, typename Arg3,
+    typename Signature>
+struct handler_type<ReturnType(Arg1, Arg2, Arg3), Signature>
+  : handler_type<ReturnType(*)(Arg1, Arg2, Arg3), Signature> {};
+
+template <typename ReturnType, typename Arg1, typename Arg2, typename Arg3,
+    typename Arg4, typename Signature>
+struct handler_type<ReturnType(Arg1, Arg2, Arg3, Arg4), Signature>
+  : handler_type<ReturnType(*)(Arg1, Arg2, Arg3, Arg4), Signature> {};
+
+template <typename ReturnType, typename Arg1, typename Arg2, typename Arg3,
+    typename Arg4, typename Arg5, typename Signature>
+struct handler_type<ReturnType(Arg1, Arg2, Arg3, Arg4, Arg5), Signature>
+  : handler_type<ReturnType(*)(Arg1, Arg2, Arg3, Arg4, Arg5), Signature> {};
+
+#endif // !defined(GENERATING_DOCUMENTATION)
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#define BOOST_ASIO_HANDLER_TYPE(h, sig) \
+  typename handler_type<h, sig>::type
+
+#endif // BOOST_ASIO_HANDLER_TYPE_HPP
diff --git a/ext/patches/boost/asio/high_resolution_timer.hpp b/ext/patches/boost/asio/high_resolution_timer.hpp
new file mode 100644
index 0000000..ac55ede
--- /dev/null
+++ b/ext/patches/boost/asio/high_resolution_timer.hpp
@@ -0,0 +1,65 @@
+//
+// high_resolution_timer.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_HIGH_RESOLUTION_TIMER_HPP
+#define BOOST_ASIO_HIGH_RESOLUTION_TIMER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_STD_CHRONO) \
+  || defined(BOOST_ASIO_HAS_BOOST_CHRONO) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#if defined(BOOST_ASIO_HAS_STD_CHRONO)
+# include <chrono>
+#elif defined(BOOST_ASIO_HAS_BOOST_CHRONO)
+# include <boost/chrono/system_clocks.hpp>
+#endif
+
+#include <boost/asio/basic_waitable_timer.hpp>
+
+namespace boost {
+namespace asio {
+
+#if defined(GENERATING_DOCUMENTATION)
+/// Typedef for a timer based on the high resolution clock.
+/**
+ * This typedef uses the C++11 @c <chrono> standard library facility, if
+ * available. Otherwise, it may use the Boost.Chrono library. To explicitly
+ * utilise Boost.Chrono, use the basic_waitable_timer template directly:
+ * @code
+ * typedef basic_waitable_timer<boost::chrono::high_resolution_clock> timer;
+ * @endcode
+ */
+typedef basic_waitable_timer<
+    chrono::high_resolution_clock>
+  high_resolution_timer;
+#elif defined(BOOST_ASIO_HAS_STD_CHRONO)
+typedef basic_waitable_timer<
+    std::chrono::high_resolution_clock>
+  high_resolution_timer;
+#elif defined(BOOST_ASIO_HAS_BOOST_CHRONO)
+typedef basic_waitable_timer<
+    boost::chrono::high_resolution_clock>
+  high_resolution_timer;
+#endif
+
+} // namespace asio
+} // namespace boost
+
+#endif // defined(BOOST_ASIO_HAS_STD_CHRONO) 
+       //   || defined(BOOST_ASIO_HAS_BOOST_CHRONO)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_HIGH_RESOLUTION_TIMER_HPP
diff --git a/ext/patches/boost/asio/impl/buffered_read_stream.hpp b/ext/patches/boost/asio/impl/buffered_read_stream.hpp
new file mode 100644
index 0000000..2685f1d
--- /dev/null
+++ b/ext/patches/boost/asio/impl/buffered_read_stream.hpp
@@ -0,0 +1,360 @@
+//
+// impl/buffered_read_stream.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IMPL_BUFFERED_READ_STREAM_HPP
+#define BOOST_ASIO_IMPL_BUFFERED_READ_STREAM_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_cont_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+template <typename Stream>
+std::size_t buffered_read_stream<Stream>::fill()
+{
+  detail::buffer_resize_guard<detail::buffered_stream_storage>
+    resize_guard(storage_);
+  std::size_t previous_size = storage_.size();
+  storage_.resize(storage_.capacity());
+  storage_.resize(previous_size + next_layer_.read_some(buffer(
+          storage_.data() + previous_size,
+          storage_.size() - previous_size)));
+  resize_guard.commit();
+  return storage_.size() - previous_size;
+}
+
+template <typename Stream>
+std::size_t buffered_read_stream<Stream>::fill(boost::system::error_code& ec)
+{
+  detail::buffer_resize_guard<detail::buffered_stream_storage>
+    resize_guard(storage_);
+  std::size_t previous_size = storage_.size();
+  storage_.resize(storage_.capacity());
+  storage_.resize(previous_size + next_layer_.read_some(buffer(
+          storage_.data() + previous_size,
+          storage_.size() - previous_size),
+        ec));
+  resize_guard.commit();
+  return storage_.size() - previous_size;
+}
+
+namespace detail
+{
+  template <typename ReadHandler>
+  class buffered_fill_handler
+  {
+  public:
+    buffered_fill_handler(detail::buffered_stream_storage& storage,
+        std::size_t previous_size, ReadHandler& handler)
+      : storage_(storage),
+        previous_size_(previous_size),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    buffered_fill_handler(const buffered_fill_handler& other)
+      : storage_(other.storage_),
+        previous_size_(other.previous_size_),
+        handler_(other.handler_)
+    {
+    }
+
+    buffered_fill_handler(buffered_fill_handler&& other)
+      : storage_(other.storage_),
+        previous_size_(other.previous_size_),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        const std::size_t bytes_transferred)
+    {
+      storage_.resize(previous_size_ + bytes_transferred);
+      handler_(ec, bytes_transferred);
+    }
+
+  //private:
+    detail::buffered_stream_storage& storage_;
+    std::size_t previous_size_;
+    ReadHandler handler_;
+  };
+
+  template <typename ReadHandler>
+  inline void* asio_handler_allocate(std::size_t size,
+      buffered_fill_handler<ReadHandler>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename ReadHandler>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      buffered_fill_handler<ReadHandler>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename ReadHandler>
+  inline bool asio_handler_is_continuation(
+      buffered_fill_handler<ReadHandler>* this_handler)
+  {
+    return boost_asio_handler_cont_helpers::is_continuation(
+          this_handler->handler_);
+  }
+
+  template <typename Function, typename ReadHandler>
+  inline void asio_handler_invoke(Function& function,
+      buffered_fill_handler<ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename ReadHandler>
+  inline void asio_handler_invoke(const Function& function,
+      buffered_fill_handler<ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+} // namespace detail
+
+template <typename Stream>
+template <typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+buffered_read_stream<Stream>::async_fill(
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ReadHandler.
+  BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+  detail::async_result_init<
+    ReadHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+  std::size_t previous_size = storage_.size();
+  storage_.resize(storage_.capacity());
+  next_layer_.async_read_some(
+      buffer(
+        storage_.data() + previous_size,
+        storage_.size() - previous_size),
+      detail::buffered_fill_handler<BOOST_ASIO_HANDLER_TYPE(
+        ReadHandler, void (boost::system::error_code, std::size_t))>(
+        storage_, previous_size, init.handler));
+
+  return init.result.get();
+}
+
+template <typename Stream>
+template <typename MutableBufferSequence>
+std::size_t buffered_read_stream<Stream>::read_some(
+    const MutableBufferSequence& buffers)
+{
+  if (boost::asio::buffer_size(buffers) == 0)
+    return 0;
+
+  if (storage_.empty())
+    this->fill();
+
+  return this->copy(buffers);
+}
+
+template <typename Stream>
+template <typename MutableBufferSequence>
+std::size_t buffered_read_stream<Stream>::read_some(
+    const MutableBufferSequence& buffers, boost::system::error_code& ec)
+{
+  ec = boost::system::error_code();
+
+  if (boost::asio::buffer_size(buffers) == 0)
+    return 0;
+
+  if (storage_.empty() && !this->fill(ec))
+    return 0;
+
+  return this->copy(buffers);
+}
+
+namespace detail
+{
+  template <typename MutableBufferSequence, typename ReadHandler>
+  class buffered_read_some_handler
+  {
+  public:
+    buffered_read_some_handler(detail::buffered_stream_storage& storage,
+        const MutableBufferSequence& buffers, ReadHandler& handler)
+      : storage_(storage),
+        buffers_(buffers),
+        handler_(handler)
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+      buffered_read_some_handler(const buffered_read_some_handler& other)
+        : storage_(other.storage_),
+          buffers_(other.buffers_),
+          handler_(other.handler_)
+      {
+      }
+
+      buffered_read_some_handler(buffered_read_some_handler&& other)
+        : storage_(other.storage_),
+          buffers_(other.buffers_),
+          handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+      {
+      }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec, std::size_t)
+    {
+      if (ec || storage_.empty())
+      {
+        const std::size_t length = 0;
+        handler_(ec, length);
+      }
+      else
+      {
+        const std::size_t bytes_copied = boost::asio::buffer_copy(
+            buffers_, storage_.data(), storage_.size());
+        storage_.consume(bytes_copied);
+        handler_(ec, bytes_copied);
+      }
+    }
+
+  //private:
+    detail::buffered_stream_storage& storage_;
+    MutableBufferSequence buffers_;
+    ReadHandler handler_;
+  };
+
+  template <typename MutableBufferSequence, typename ReadHandler>
+  inline void* asio_handler_allocate(std::size_t size,
+      buffered_read_some_handler<
+        MutableBufferSequence, ReadHandler>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename MutableBufferSequence, typename ReadHandler>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      buffered_read_some_handler<
+        MutableBufferSequence, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename MutableBufferSequence, typename ReadHandler>
+  inline bool asio_handler_is_continuation(
+      buffered_read_some_handler<
+        MutableBufferSequence, ReadHandler>* this_handler)
+  {
+    return boost_asio_handler_cont_helpers::is_continuation(
+          this_handler->handler_);
+  }
+
+  template <typename Function, typename MutableBufferSequence,
+      typename ReadHandler>
+  inline void asio_handler_invoke(Function& function,
+      buffered_read_some_handler<
+        MutableBufferSequence, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename MutableBufferSequence,
+      typename ReadHandler>
+  inline void asio_handler_invoke(const Function& function,
+      buffered_read_some_handler<
+        MutableBufferSequence, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+} // namespace detail
+
+template <typename Stream>
+template <typename MutableBufferSequence, typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+buffered_read_stream<Stream>::async_read_some(
+    const MutableBufferSequence& buffers,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ReadHandler.
+  BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+  detail::async_result_init<
+    ReadHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+  if (boost::asio::buffer_size(buffers) == 0 || !storage_.empty())
+  {
+    next_layer_.async_read_some(boost::asio::mutable_buffers_1(0, 0),
+        detail::buffered_read_some_handler<
+          MutableBufferSequence, BOOST_ASIO_HANDLER_TYPE(
+            ReadHandler, void (boost::system::error_code, std::size_t))>(
+            storage_, buffers, init.handler));
+  }
+  else
+  {
+    this->async_fill(detail::buffered_read_some_handler<
+          MutableBufferSequence, BOOST_ASIO_HANDLER_TYPE(
+            ReadHandler, void (boost::system::error_code, std::size_t))>(
+            storage_, buffers, init.handler));
+  }
+
+  return init.result.get();
+}
+
+template <typename Stream>
+template <typename MutableBufferSequence>
+std::size_t buffered_read_stream<Stream>::peek(
+    const MutableBufferSequence& buffers)
+{
+  if (storage_.empty())
+    this->fill();
+  return this->peek_copy(buffers);
+}
+
+template <typename Stream>
+template <typename MutableBufferSequence>
+std::size_t buffered_read_stream<Stream>::peek(
+    const MutableBufferSequence& buffers, boost::system::error_code& ec)
+{
+  ec = boost::system::error_code();
+  if (storage_.empty() && !this->fill(ec))
+    return 0;
+  return this->peek_copy(buffers);
+}
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IMPL_BUFFERED_READ_STREAM_HPP
diff --git a/ext/patches/boost/asio/impl/buffered_write_stream.hpp b/ext/patches/boost/asio/impl/buffered_write_stream.hpp
new file mode 100644
index 0000000..6bbfe7f
--- /dev/null
+++ b/ext/patches/boost/asio/impl/buffered_write_stream.hpp
@@ -0,0 +1,340 @@
+//
+// impl/buffered_write_stream.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IMPL_BUFFERED_WRITE_STREAM_HPP
+#define BOOST_ASIO_IMPL_BUFFERED_WRITE_STREAM_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_cont_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+template <typename Stream>
+std::size_t buffered_write_stream<Stream>::flush()
+{
+  std::size_t bytes_written = write(next_layer_,
+      buffer(storage_.data(), storage_.size()));
+  storage_.consume(bytes_written);
+  return bytes_written;
+}
+
+template <typename Stream>
+std::size_t buffered_write_stream<Stream>::flush(boost::system::error_code& ec)
+{
+  std::size_t bytes_written = write(next_layer_,
+      buffer(storage_.data(), storage_.size()),
+      transfer_all(), ec);
+  storage_.consume(bytes_written);
+  return bytes_written;
+}
+
+namespace detail
+{
+  template <typename WriteHandler>
+  class buffered_flush_handler
+  {
+  public:
+    buffered_flush_handler(detail::buffered_stream_storage& storage,
+        WriteHandler& handler)
+      : storage_(storage),
+        handler_(handler)
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    buffered_flush_handler(const buffered_flush_handler& other)
+      : storage_(other.storage_),
+        handler_(other.handler_)
+    {
+    }
+
+    buffered_flush_handler(buffered_flush_handler&& other)
+      : storage_(other.storage_),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        const std::size_t bytes_written)
+    {
+      storage_.consume(bytes_written);
+      handler_(ec, bytes_written);
+    }
+
+  //private:
+    detail::buffered_stream_storage& storage_;
+    WriteHandler handler_;
+  };
+
+  template <typename WriteHandler>
+  inline void* asio_handler_allocate(std::size_t size,
+      buffered_flush_handler<WriteHandler>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename WriteHandler>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      buffered_flush_handler<WriteHandler>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename WriteHandler>
+  inline bool asio_handler_is_continuation(
+      buffered_flush_handler<WriteHandler>* this_handler)
+  {
+    return boost_asio_handler_cont_helpers::is_continuation(
+          this_handler->handler_);
+  }
+
+  template <typename Function, typename WriteHandler>
+  inline void asio_handler_invoke(Function& function,
+      buffered_flush_handler<WriteHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename WriteHandler>
+  inline void asio_handler_invoke(const Function& function,
+      buffered_flush_handler<WriteHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+}
+
+template <typename Stream>
+template <typename WriteHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+buffered_write_stream<Stream>::async_flush(
+    BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a WriteHandler.
+  BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+  detail::async_result_init<
+    WriteHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+  async_write(next_layer_, buffer(storage_.data(), storage_.size()),
+      detail::buffered_flush_handler<BOOST_ASIO_HANDLER_TYPE(
+        WriteHandler, void (boost::system::error_code, std::size_t))>(
+        storage_, init.handler));
+
+  return init.result.get();
+}
+
+template <typename Stream>
+template <typename ConstBufferSequence>
+std::size_t buffered_write_stream<Stream>::write_some(
+    const ConstBufferSequence& buffers)
+{
+  if (boost::asio::buffer_size(buffers) == 0)
+    return 0;
+
+  if (storage_.size() == storage_.capacity())
+    this->flush();
+
+  return this->copy(buffers);
+}
+
+template <typename Stream>
+template <typename ConstBufferSequence>
+std::size_t buffered_write_stream<Stream>::write_some(
+    const ConstBufferSequence& buffers, boost::system::error_code& ec)
+{
+  ec = boost::system::error_code();
+
+  if (boost::asio::buffer_size(buffers) == 0)
+    return 0;
+
+  if (storage_.size() == storage_.capacity() && !flush(ec))
+    return 0;
+
+  return this->copy(buffers);
+}
+
+namespace detail
+{
+  template <typename ConstBufferSequence, typename WriteHandler>
+  class buffered_write_some_handler
+  {
+  public:
+    buffered_write_some_handler(detail::buffered_stream_storage& storage,
+        const ConstBufferSequence& buffers, WriteHandler& handler)
+      : storage_(storage),
+        buffers_(buffers),
+        handler_(handler)
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+      buffered_write_some_handler(const buffered_write_some_handler& other)
+        : storage_(other.storage_),
+          buffers_(other.buffers_),
+          handler_(other.handler_)
+      {
+      }
+
+      buffered_write_some_handler(buffered_write_some_handler&& other)
+        : storage_(other.storage_),
+          buffers_(other.buffers_),
+          handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_))
+      {
+      }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec, std::size_t)
+    {
+      if (ec)
+      {
+        const std::size_t length = 0;
+        handler_(ec, length);
+      }
+      else
+      {
+        std::size_t orig_size = storage_.size();
+        std::size_t space_avail = storage_.capacity() - orig_size;
+        std::size_t bytes_avail = boost::asio::buffer_size(buffers_);
+        std::size_t length = bytes_avail < space_avail
+          ? bytes_avail : space_avail;
+        storage_.resize(orig_size + length);
+        const std::size_t bytes_copied = boost::asio::buffer_copy(
+            storage_.data() + orig_size, buffers_, length);
+        handler_(ec, bytes_copied);
+      }
+    }
+
+  //private:
+    detail::buffered_stream_storage& storage_;
+    ConstBufferSequence buffers_;
+    WriteHandler handler_;
+  };
+
+  template <typename ConstBufferSequence, typename WriteHandler>
+  inline void* asio_handler_allocate(std::size_t size,
+      buffered_write_some_handler<
+        ConstBufferSequence, WriteHandler>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename ConstBufferSequence, typename WriteHandler>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      buffered_write_some_handler<
+        ConstBufferSequence, WriteHandler>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename ConstBufferSequence, typename WriteHandler>
+  inline bool asio_handler_is_continuation(
+      buffered_write_some_handler<
+        ConstBufferSequence, WriteHandler>* this_handler)
+  {
+    return boost_asio_handler_cont_helpers::is_continuation(
+          this_handler->handler_);
+  }
+
+  template <typename Function, typename ConstBufferSequence,
+      typename WriteHandler>
+  inline void asio_handler_invoke(Function& function,
+      buffered_write_some_handler<
+        ConstBufferSequence, WriteHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename ConstBufferSequence,
+      typename WriteHandler>
+  inline void asio_handler_invoke(const Function& function,
+      buffered_write_some_handler<
+        ConstBufferSequence, WriteHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+} // namespace detail
+
+template <typename Stream>
+template <typename ConstBufferSequence, typename WriteHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+buffered_write_stream<Stream>::async_write_some(
+    const ConstBufferSequence& buffers,
+    BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a WriteHandler.
+  BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+  detail::async_result_init<
+    WriteHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+  if (boost::asio::buffer_size(buffers) == 0
+      || storage_.size() < storage_.capacity())
+  {
+    next_layer_.async_write_some(boost::asio::const_buffers_1(0, 0),
+        detail::buffered_write_some_handler<
+          ConstBufferSequence, BOOST_ASIO_HANDLER_TYPE(
+            WriteHandler, void (boost::system::error_code, std::size_t))>(
+            storage_, buffers, init.handler));
+  }
+  else
+  {
+    this->async_flush(detail::buffered_write_some_handler<
+          ConstBufferSequence, BOOST_ASIO_HANDLER_TYPE(
+            WriteHandler, void (boost::system::error_code, std::size_t))>(
+            storage_, buffers, init.handler));
+  }
+
+  return init.result.get();
+}
+
+template <typename Stream>
+template <typename ConstBufferSequence>
+std::size_t buffered_write_stream<Stream>::copy(
+    const ConstBufferSequence& buffers)
+{
+  std::size_t orig_size = storage_.size();
+  std::size_t space_avail = storage_.capacity() - orig_size;
+  std::size_t bytes_avail = boost::asio::buffer_size(buffers);
+  std::size_t length = bytes_avail < space_avail ? bytes_avail : space_avail;
+  storage_.resize(orig_size + length);
+  return boost::asio::buffer_copy(
+      storage_.data() + orig_size, buffers, length);
+}
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IMPL_BUFFERED_WRITE_STREAM_HPP
diff --git a/ext/patches/boost/asio/impl/connect.hpp b/ext/patches/boost/asio/impl/connect.hpp
new file mode 100644
index 0000000..5f059bb
--- /dev/null
+++ b/ext/patches/boost/asio/impl/connect.hpp
@@ -0,0 +1,430 @@
+//
+// impl/connect.hpp
+// ~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IMPL_CONNECT_HPP
+#define BOOST_ASIO_IMPL_CONNECT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/consuming_buffers.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_cont_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+namespace detail
+{
+  struct default_connect_condition
+  {
+    template <typename Iterator>
+    Iterator operator()(const boost::system::error_code&, Iterator next)
+    {
+      return next;
+    }
+  };
+}
+
+template <typename Protocol, typename SocketService, typename Iterator>
+Iterator connect(basic_socket<Protocol, SocketService>& s, Iterator begin)
+{
+  boost::system::error_code ec;
+  Iterator result = connect(s, begin, ec);
+  boost::asio::detail::throw_error(ec, "connect");
+  return result;
+}
+
+template <typename Protocol, typename SocketService, typename Iterator>
+inline Iterator connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, boost::system::error_code& ec)
+{
+  return connect(s, begin, Iterator(), detail::default_connect_condition(), ec);
+}
+
+template <typename Protocol, typename SocketService, typename Iterator>
+Iterator connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, Iterator end)
+{
+  boost::system::error_code ec;
+  Iterator result = connect(s, begin, end, ec);
+  boost::asio::detail::throw_error(ec, "connect");
+  return result;
+}
+
+template <typename Protocol, typename SocketService, typename Iterator>
+inline Iterator connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, Iterator end, boost::system::error_code& ec)
+{
+  return connect(s, begin, end, detail::default_connect_condition(), ec);
+}
+
+template <typename Protocol, typename SocketService,
+    typename Iterator, typename ConnectCondition>
+Iterator connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, ConnectCondition connect_condition)
+{
+  boost::system::error_code ec;
+  Iterator result = connect(s, begin, connect_condition, ec);
+  boost::asio::detail::throw_error(ec, "connect");
+  return result;
+}
+
+template <typename Protocol, typename SocketService,
+    typename Iterator, typename ConnectCondition>
+inline Iterator connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, ConnectCondition connect_condition,
+    boost::system::error_code& ec)
+{
+  return connect(s, begin, Iterator(), connect_condition, ec);
+}
+
+template <typename Protocol, typename SocketService,
+    typename Iterator, typename ConnectCondition>
+Iterator connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, Iterator end, ConnectCondition connect_condition)
+{
+  boost::system::error_code ec;
+  Iterator result = connect(s, begin, end, connect_condition, ec);
+  boost::asio::detail::throw_error(ec, "connect");
+  return result;
+}
+
+template <typename Protocol, typename SocketService,
+    typename Iterator, typename ConnectCondition>
+Iterator connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, Iterator end, ConnectCondition connect_condition,
+    boost::system::error_code& ec)
+{
+  ec = boost::system::error_code();
+
+  for (Iterator iter = begin; iter != end; ++iter)
+  {
+    iter = connect_condition(ec, iter);
+    if (iter != end)
+    {
+      s.close(ec);
+      s.connect(*iter, ec);
+      if (!ec)
+        return iter;
+    }
+  }
+
+  if (!ec)
+    ec = boost::asio::error::not_found;
+
+  return end;
+}
+
+namespace detail
+{
+  // Enable the empty base class optimisation for the connect condition.
+  template <typename ConnectCondition>
+  class base_from_connect_condition
+  {
+  protected:
+    explicit base_from_connect_condition(
+        const ConnectCondition& connect_condition)
+      : connect_condition_(connect_condition)
+    {
+    }
+
+    template <typename Iterator>
+    void check_condition(const boost::system::error_code& ec,
+        Iterator& iter, Iterator& end)
+    {
+      if (iter != end)
+        iter = connect_condition_(ec, static_cast<const Iterator&>(iter));
+    }
+
+  private:
+    ConnectCondition connect_condition_;
+  };
+
+  // The default_connect_condition implementation is essentially a no-op. This
+  // template specialisation lets us eliminate all costs associated with it.
+  template <>
+  class base_from_connect_condition<default_connect_condition>
+  {
+  protected:
+    explicit base_from_connect_condition(const default_connect_condition&)
+    {
+    }
+
+    template <typename Iterator>
+    void check_condition(const boost::system::error_code&, Iterator&, Iterator&)
+    {
+    }
+  };
+
+  template <typename Protocol, typename SocketService, typename Iterator,
+      typename ConnectCondition, typename ComposedConnectHandler>
+  class connect_op : base_from_connect_condition<ConnectCondition>
+  {
+  public:
+    connect_op(basic_socket<Protocol, SocketService>& sock,
+        const Iterator& begin, const Iterator& end,
+        const ConnectCondition& connect_condition,
+        ComposedConnectHandler& handler)
+      : base_from_connect_condition<ConnectCondition>(connect_condition),
+        socket_(sock),
+        iter_(begin),
+        end_(end),
+        start_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(ComposedConnectHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    connect_op(const connect_op& other)
+      : base_from_connect_condition<ConnectCondition>(other),
+        socket_(other.socket_),
+        iter_(other.iter_),
+        end_(other.end_),
+        start_(other.start_),
+        handler_(other.handler_)
+    {
+    }
+
+    connect_op(connect_op&& other)
+      : base_from_connect_condition<ConnectCondition>(other),
+        socket_(other.socket_),
+        iter_(other.iter_),
+        end_(other.end_),
+        start_(other.start_),
+        handler_(BOOST_ASIO_MOVE_CAST(ComposedConnectHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(boost::system::error_code ec, int start = 0)
+    {
+      switch (start_ = start)
+      {
+        case 1:
+        for (;;)
+        {
+          this->check_condition(ec, iter_, end_);
+
+          if (iter_ != end_)
+          {
+            socket_.close(ec);
+            socket_.async_connect(*iter_,
+                BOOST_ASIO_MOVE_CAST(connect_op)(*this));
+            return;
+          }
+
+          if (start)
+          {
+            ec = boost::asio::error::not_found;
+            socket_.get_io_service().post(detail::bind_handler(*this, ec));
+            return;
+          }
+
+          default:
+
+          if (iter_ == end_)
+            break;
+
+          if (!socket_.is_open())
+          {
+            ec = boost::asio::error::operation_aborted;
+            break;
+          }
+
+          if (!ec)
+            break;
+
+          ++iter_;
+        }
+
+        handler_(static_cast<const boost::system::error_code&>(ec),
+            static_cast<const Iterator&>(iter_));
+      }
+    }
+
+  //private:
+    basic_socket<Protocol, SocketService>& socket_;
+    Iterator iter_;
+    Iterator end_;
+    int start_;
+    ComposedConnectHandler handler_;
+  };
+
+  template <typename Protocol, typename SocketService, typename Iterator,
+      typename ConnectCondition, typename ComposedConnectHandler>
+  inline void* asio_handler_allocate(std::size_t size,
+      connect_op<Protocol, SocketService, Iterator,
+        ConnectCondition, ComposedConnectHandler>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename Protocol, typename SocketService, typename Iterator,
+      typename ConnectCondition, typename ComposedConnectHandler>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      connect_op<Protocol, SocketService, Iterator,
+        ConnectCondition, ComposedConnectHandler>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename Protocol, typename SocketService, typename Iterator,
+      typename ConnectCondition, typename ComposedConnectHandler>
+  inline bool asio_handler_is_continuation(
+      connect_op<Protocol, SocketService, Iterator,
+        ConnectCondition, ComposedConnectHandler>* this_handler)
+  {
+    return boost_asio_handler_cont_helpers::is_continuation(
+        this_handler->handler_);
+  }
+
+  template <typename Function, typename Protocol,
+      typename SocketService, typename Iterator,
+      typename ConnectCondition, typename ComposedConnectHandler>
+  inline void asio_handler_invoke(Function& function,
+      connect_op<Protocol, SocketService, Iterator,
+        ConnectCondition, ComposedConnectHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename Protocol,
+      typename SocketService, typename Iterator,
+      typename ConnectCondition, typename ComposedConnectHandler>
+  inline void asio_handler_invoke(const Function& function,
+      connect_op<Protocol, SocketService, Iterator,
+        ConnectCondition, ComposedConnectHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+} // namespace detail
+
+template <typename Protocol, typename SocketService,
+    typename Iterator, typename ComposedConnectHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(ComposedConnectHandler,
+    void (boost::system::error_code, Iterator))
+async_connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, BOOST_ASIO_MOVE_ARG(ComposedConnectHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ComposedConnectHandler.
+  BOOST_ASIO_COMPOSED_CONNECT_HANDLER_CHECK(
+      ComposedConnectHandler, handler, Iterator) type_check;
+
+  detail::async_result_init<ComposedConnectHandler,
+    void (boost::system::error_code, Iterator)> init(
+      BOOST_ASIO_MOVE_CAST(ComposedConnectHandler)(handler));
+
+  detail::connect_op<Protocol, SocketService, Iterator,
+    detail::default_connect_condition, BOOST_ASIO_HANDLER_TYPE(
+      ComposedConnectHandler, void (boost::system::error_code, Iterator))>(s,
+        begin, Iterator(), detail::default_connect_condition(), init.handler)(
+          boost::system::error_code(), 1);
+
+  return init.result.get();
+}
+
+template <typename Protocol, typename SocketService,
+    typename Iterator, typename ComposedConnectHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(ComposedConnectHandler,
+    void (boost::system::error_code, Iterator))
+async_connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, Iterator end,
+    BOOST_ASIO_MOVE_ARG(ComposedConnectHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ComposedConnectHandler.
+  BOOST_ASIO_COMPOSED_CONNECT_HANDLER_CHECK(
+      ComposedConnectHandler, handler, Iterator) type_check;
+
+  detail::async_result_init<ComposedConnectHandler,
+    void (boost::system::error_code, Iterator)> init(
+      BOOST_ASIO_MOVE_CAST(ComposedConnectHandler)(handler));
+
+  detail::connect_op<Protocol, SocketService, Iterator,
+    detail::default_connect_condition, BOOST_ASIO_HANDLER_TYPE(
+      ComposedConnectHandler, void (boost::system::error_code, Iterator))>(s,
+        begin, end, detail::default_connect_condition(), init.handler)(
+          boost::system::error_code(), 1);
+
+  return init.result.get();
+}
+
+template <typename Protocol, typename SocketService, typename Iterator,
+    typename ConnectCondition, typename ComposedConnectHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(ComposedConnectHandler,
+    void (boost::system::error_code, Iterator))
+async_connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, ConnectCondition connect_condition,
+    BOOST_ASIO_MOVE_ARG(ComposedConnectHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ComposedConnectHandler.
+  BOOST_ASIO_COMPOSED_CONNECT_HANDLER_CHECK(
+      ComposedConnectHandler, handler, Iterator) type_check;
+
+  detail::async_result_init<ComposedConnectHandler,
+    void (boost::system::error_code, Iterator)> init(
+      BOOST_ASIO_MOVE_CAST(ComposedConnectHandler)(handler));
+
+  detail::connect_op<Protocol, SocketService, Iterator,
+    ConnectCondition, BOOST_ASIO_HANDLER_TYPE(
+      ComposedConnectHandler, void (boost::system::error_code, Iterator))>(s,
+        begin, Iterator(), connect_condition, init.handler)(
+          boost::system::error_code(), 1);
+
+  return init.result.get();
+}
+
+template <typename Protocol, typename SocketService, typename Iterator,
+    typename ConnectCondition, typename ComposedConnectHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(ComposedConnectHandler,
+    void (boost::system::error_code, Iterator))
+async_connect(basic_socket<Protocol, SocketService>& s,
+    Iterator begin, Iterator end, ConnectCondition connect_condition,
+    BOOST_ASIO_MOVE_ARG(ComposedConnectHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ComposedConnectHandler.
+  BOOST_ASIO_COMPOSED_CONNECT_HANDLER_CHECK(
+      ComposedConnectHandler, handler, Iterator) type_check;
+
+  detail::async_result_init<ComposedConnectHandler,
+    void (boost::system::error_code, Iterator)> init(
+      BOOST_ASIO_MOVE_CAST(ComposedConnectHandler)(handler));
+
+  detail::connect_op<Protocol, SocketService, Iterator,
+    ConnectCondition, BOOST_ASIO_HANDLER_TYPE(
+      ComposedConnectHandler, void (boost::system::error_code, Iterator))>(s,
+        begin, end, connect_condition, init.handler)(
+          boost::system::error_code(), 1);
+
+  return init.result.get();
+}
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IMPL_CONNECT_HPP
diff --git a/ext/patches/boost/asio/impl/error.ipp b/ext/patches/boost/asio/impl/error.ipp
new file mode 100644
index 0000000..9b020d9
--- /dev/null
+++ b/ext/patches/boost/asio/impl/error.ipp
@@ -0,0 +1,130 @@
+//
+// impl/error.ipp
+// ~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IMPL_ERROR_IPP
+#define BOOST_ASIO_IMPL_ERROR_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <string>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace error {
+
+#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+namespace detail {
+
+class netdb_category : public boost::system::error_category
+{
+public:
+  const char* name() const BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT
+  {
+    return "asio.netdb";
+  }
+
+  std::string message(int value) const
+  {
+    if (value == error::host_not_found)
+      return "Host not found (authoritative)";
+    if (value == error::host_not_found_try_again)
+      return "Host not found (non-authoritative), try again later";
+    if (value == error::no_data)
+      return "The query is valid, but it does not have associated data";
+    if (value == error::no_recovery)
+      return "A non-recoverable error occurred during database lookup";
+    return "asio.netdb error";
+  }
+};
+
+} // namespace detail
+
+const boost::system::error_category& get_netdb_category()
+{
+  static detail::netdb_category instance;
+  return instance;
+}
+
+namespace detail {
+
+class addrinfo_category : public boost::system::error_category
+{
+public:
+  const char* name() const BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT
+  {
+    return "asio.addrinfo";
+  }
+
+  std::string message(int value) const
+  {
+    if (value == error::service_not_found)
+      return "Service not found";
+    if (value == error::socket_type_not_supported)
+      return "Socket type not supported";
+    return "asio.addrinfo error";
+  }
+};
+
+} // namespace detail
+
+const boost::system::error_category& get_addrinfo_category()
+{
+  static detail::addrinfo_category instance;
+  return instance;
+}
+
+#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+namespace detail {
+
+class misc_category : public boost::system::error_category
+{
+public:
+  const char* name() const BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT
+  {
+    return "asio.misc";
+  }
+
+  std::string message(int value) const
+  {
+    if (value == error::already_open)
+      return "Already open";
+    if (value == error::eof)
+      return "End of file";
+    if (value == error::not_found)
+      return "Element not found";
+    if (value == error::fd_set_failure)
+      return "The descriptor does not fit into the select call's fd_set";
+    return "asio.misc error";
+  }
+};
+
+} // namespace detail
+
+const boost::system::error_category& get_misc_category()
+{
+  static detail::misc_category instance;
+  return instance;
+}
+
+} // namespace error
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IMPL_ERROR_IPP
diff --git a/ext/patches/boost/asio/impl/handler_alloc_hook.ipp b/ext/patches/boost/asio/impl/handler_alloc_hook.ipp
new file mode 100644
index 0000000..def2406
--- /dev/null
+++ b/ext/patches/boost/asio/impl/handler_alloc_hook.ipp
@@ -0,0 +1,79 @@
+//
+// impl/handler_alloc_hook.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IMPL_HANDLER_ALLOC_HOOK_IPP
+#define BOOST_ASIO_IMPL_HANDLER_ALLOC_HOOK_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/call_stack.hpp>
+#include <boost/asio/handler_alloc_hook.hpp>
+
+#if !defined(BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING)
+# if defined(BOOST_ASIO_HAS_IOCP)
+#  include <boost/asio/detail/win_iocp_thread_info.hpp>
+# else // defined(BOOST_ASIO_HAS_IOCP)
+#  include <boost/asio/detail/task_io_service_thread_info.hpp>
+# endif // defined(BOOST_ASIO_HAS_IOCP)
+#endif // !defined(BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+namespace detail { class win_iocp_io_service; }
+#endif // defined(BOOST_ASIO_HAS_IOCP)
+
+void* asio_handler_allocate(std::size_t size, ...)
+{
+#if !defined(BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING)
+# if defined(BOOST_ASIO_HAS_IOCP)
+  typedef detail::win_iocp_io_service io_service_impl;
+  typedef detail::win_iocp_thread_info thread_info;
+# else // defined(BOOST_ASIO_HAS_IOCP)
+  typedef detail::task_io_service io_service_impl;
+  typedef detail::task_io_service_thread_info thread_info;
+# endif // defined(BOOST_ASIO_HAS_IOCP)
+  typedef detail::call_stack<io_service_impl, thread_info> call_stack;
+  return thread_info::allocate(call_stack::top(), size);
+#else // !defined(BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING)
+  return ::operator new(size);
+#endif // !defined(BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING)
+}
+
+void asio_handler_deallocate(void* pointer, std::size_t size, ...)
+{
+#if !defined(BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING)
+# if defined(BOOST_ASIO_HAS_IOCP)
+  typedef detail::win_iocp_io_service io_service_impl;
+  typedef detail::win_iocp_thread_info thread_info;
+# else // defined(BOOST_ASIO_HAS_IOCP)
+  typedef detail::task_io_service io_service_impl;
+  typedef detail::task_io_service_thread_info thread_info;
+# endif // defined(BOOST_ASIO_HAS_IOCP)
+  typedef detail::call_stack<io_service_impl, thread_info> call_stack;
+  thread_info::deallocate(call_stack::top(), pointer, size);
+#else // !defined(BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING)
+  (void)size;
+  ::operator delete(pointer);
+#endif // !defined(BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING)
+}
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IMPL_HANDLER_ALLOC_HOOK_IPP
diff --git a/ext/patches/boost/asio/impl/io_service.hpp b/ext/patches/boost/asio/impl/io_service.hpp
new file mode 100644
index 0000000..bc87820
--- /dev/null
+++ b/ext/patches/boost/asio/impl/io_service.hpp
@@ -0,0 +1,156 @@
+//
+// impl/io_service.hpp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IMPL_IO_SERVICE_HPP
+#define BOOST_ASIO_IMPL_IO_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/service_registry.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+template <typename Service>
+inline Service& use_service(io_service& ios)
+{
+  // Check that Service meets the necessary type requirements.
+  (void)static_cast<io_service::service*>(static_cast<Service*>(0));
+  (void)static_cast<const io_service::id*>(&Service::id);
+
+  return ios.service_registry_->template use_service<Service>();
+}
+
+template <>
+inline detail::io_service_impl& use_service<detail::io_service_impl>(
+    io_service& ios)
+{
+  return ios.impl_;
+}
+
+template <typename Service>
+inline void add_service(io_service& ios, Service* svc)
+{
+  // Check that Service meets the necessary type requirements.
+  (void)static_cast<io_service::service*>(static_cast<Service*>(0));
+  (void)static_cast<const io_service::id*>(&Service::id);
+
+  ios.service_registry_->template add_service<Service>(svc);
+}
+
+template <typename Service>
+inline bool has_service(io_service& ios)
+{
+  // Check that Service meets the necessary type requirements.
+  (void)static_cast<io_service::service*>(static_cast<Service*>(0));
+  (void)static_cast<const io_service::id*>(&Service::id);
+
+  return ios.service_registry_->template has_service<Service>();
+}
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+# include <boost/asio/detail/win_iocp_io_service.hpp>
+#else
+# include <boost/asio/detail/task_io_service.hpp>
+#endif
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+template <typename CompletionHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(CompletionHandler, void ())
+io_service::dispatch(BOOST_ASIO_MOVE_ARG(CompletionHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a CompletionHandler.
+  BOOST_ASIO_COMPLETION_HANDLER_CHECK(CompletionHandler, handler) type_check;
+
+  detail::async_result_init<
+    CompletionHandler, void ()> init(
+      BOOST_ASIO_MOVE_CAST(CompletionHandler)(handler));
+
+  impl_.dispatch(init.handler);
+
+  return init.result.get();
+}
+
+template <typename CompletionHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(CompletionHandler, void ())
+io_service::post(BOOST_ASIO_MOVE_ARG(CompletionHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a CompletionHandler.
+  BOOST_ASIO_COMPLETION_HANDLER_CHECK(CompletionHandler, handler) type_check;
+
+  detail::async_result_init<
+    CompletionHandler, void ()> init(
+      BOOST_ASIO_MOVE_CAST(CompletionHandler)(handler));
+
+  impl_.post(init.handler);
+
+  return init.result.get();
+}
+
+template <typename Handler>
+#if defined(GENERATING_DOCUMENTATION)
+unspecified
+#else
+inline detail::wrapped_handler<io_service&, Handler>
+#endif
+io_service::wrap(Handler handler)
+{
+  return detail::wrapped_handler<io_service&, Handler>(*this, handler);
+}
+
+inline io_service::work::work(boost::asio::io_service& io_service)
+  : io_service_impl_(io_service.impl_)
+{
+  io_service_impl_.work_started();
+}
+
+inline io_service::work::work(const work& other)
+  : io_service_impl_(other.io_service_impl_)
+{
+  io_service_impl_.work_started();
+}
+
+inline io_service::work::~work()
+{
+  io_service_impl_.work_finished();
+}
+
+inline boost::asio::io_service& io_service::work::get_io_service()
+{
+  return io_service_impl_.get_io_service();
+}
+
+inline boost::asio::io_service& io_service::service::get_io_service()
+{
+  return owner_;
+}
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IMPL_IO_SERVICE_HPP
diff --git a/ext/patches/boost/asio/impl/io_service.ipp b/ext/patches/boost/asio/impl/io_service.ipp
new file mode 100644
index 0000000..814d031
--- /dev/null
+++ b/ext/patches/boost/asio/impl/io_service.ipp
@@ -0,0 +1,157 @@
+//
+// impl/io_service.ipp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IMPL_IO_SERVICE_IPP
+#define BOOST_ASIO_IMPL_IO_SERVICE_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/detail/limits.hpp>
+#include <boost/asio/detail/scoped_ptr.hpp>
+#include <boost/asio/detail/service_registry.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+
+#if defined(BOOST_ASIO_HAS_IOCP)
+# include <boost/asio/detail/win_iocp_io_service.hpp>
+#else
+# include <boost/asio/detail/task_io_service.hpp>
+#endif
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+io_service::io_service()
+  : service_registry_(new boost::asio::detail::service_registry(
+        *this, static_cast<impl_type*>(0),
+        (std::numeric_limits<std::size_t>::max)())),
+    impl_(service_registry_->first_service<impl_type>())
+{
+}
+
+io_service::io_service(std::size_t concurrency_hint)
+  : service_registry_(new boost::asio::detail::service_registry(
+        *this, static_cast<impl_type*>(0), concurrency_hint)),
+    impl_(service_registry_->first_service<impl_type>())
+{
+}
+
+io_service::~io_service()
+{
+  delete service_registry_;
+}
+
+std::size_t io_service::run()
+{
+  boost::system::error_code ec;
+  std::size_t s = impl_.run(ec);
+  boost::asio::detail::throw_error(ec);
+  return s;
+}
+
+std::size_t io_service::run(boost::system::error_code& ec)
+{
+  return impl_.run(ec);
+}
+
+std::size_t io_service::run_one()
+{
+  boost::system::error_code ec;
+  std::size_t s = impl_.run_one(ec);
+  boost::asio::detail::throw_error(ec);
+  return s;
+}
+
+std::size_t io_service::run_one(boost::system::error_code& ec)
+{
+  return impl_.run_one(ec);
+}
+
+std::size_t io_service::poll()
+{
+  boost::system::error_code ec;
+  std::size_t s = impl_.poll(ec);
+  boost::asio::detail::throw_error(ec);
+  return s;
+}
+
+std::size_t io_service::poll(boost::system::error_code& ec)
+{
+  return impl_.poll(ec);
+}
+
+std::size_t io_service::poll_one()
+{
+  boost::system::error_code ec;
+  std::size_t s = impl_.poll_one(ec);
+  boost::asio::detail::throw_error(ec);
+  return s;
+}
+
+std::size_t io_service::poll_one(boost::system::error_code& ec)
+{
+  return impl_.poll_one(ec);
+}
+
+void io_service::stop()
+{
+  impl_.stop();
+}
+
+bool io_service::stopped() const
+{
+  return impl_.stopped();
+}
+
+void io_service::reset()
+{
+  impl_.reset();
+}
+
+void io_service::notify_fork(boost::asio::io_service::fork_event event)
+{
+  service_registry_->notify_fork(event);
+}
+
+io_service::service::service(boost::asio::io_service& owner)
+  : owner_(owner),
+    next_(0)
+{
+}
+
+io_service::service::~service()
+{
+}
+
+void io_service::service::fork_service(boost::asio::io_service::fork_event)
+{
+}
+
+service_already_exists::service_already_exists()
+  : std::logic_error("Service already exists.")
+{
+}
+
+invalid_service_owner::invalid_service_owner()
+  : std::logic_error("Invalid service owner.")
+{
+}
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IMPL_IO_SERVICE_IPP
diff --git a/ext/patches/boost/asio/impl/read.hpp b/ext/patches/boost/asio/impl/read.hpp
new file mode 100644
index 0000000..b740028
--- /dev/null
+++ b/ext/patches/boost/asio/impl/read.hpp
@@ -0,0 +1,755 @@
+//
+// impl/read.hpp
+// ~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IMPL_READ_HPP
+#define BOOST_ASIO_IMPL_READ_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <algorithm>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/completion_condition.hpp>
+#include <boost/asio/detail/array_fwd.hpp>
+#include <boost/asio/detail/base_from_completion_cond.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/consuming_buffers.hpp>
+#include <boost/asio/detail/dependent_type.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_cont_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+template <typename SyncReadStream, typename MutableBufferSequence,
+    typename CompletionCondition>
+std::size_t read(SyncReadStream& s, const MutableBufferSequence& buffers,
+    CompletionCondition completion_condition, boost::system::error_code& ec)
+{
+  ec = boost::system::error_code();
+  boost::asio::detail::consuming_buffers<
+    mutable_buffer, MutableBufferSequence> tmp(buffers);
+  std::size_t total_transferred = 0;
+  tmp.prepare(detail::adapt_completion_condition_result(
+        completion_condition(ec, total_transferred)));
+  while (tmp.begin() != tmp.end())
+  {
+    std::size_t bytes_transferred = s.read_some(tmp, ec);
+    tmp.consume(bytes_transferred);
+    total_transferred += bytes_transferred;
+    tmp.prepare(detail::adapt_completion_condition_result(
+          completion_condition(ec, total_transferred)));
+  }
+  return total_transferred;
+}
+
+template <typename SyncReadStream, typename MutableBufferSequence>
+inline std::size_t read(SyncReadStream& s, const MutableBufferSequence& buffers)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = read(s, buffers, transfer_all(), ec);
+  boost::asio::detail::throw_error(ec, "read");
+  return bytes_transferred;
+}
+
+template <typename SyncReadStream, typename MutableBufferSequence>
+inline std::size_t read(SyncReadStream& s, const MutableBufferSequence& buffers,
+    boost::system::error_code& ec)
+{
+  return read(s, buffers, transfer_all(), ec);
+}
+
+template <typename SyncReadStream, typename MutableBufferSequence,
+    typename CompletionCondition>
+inline std::size_t read(SyncReadStream& s, const MutableBufferSequence& buffers,
+    CompletionCondition completion_condition)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = read(s, buffers, completion_condition, ec);
+  boost::asio::detail::throw_error(ec, "read");
+  return bytes_transferred;
+}
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+template <typename SyncReadStream, typename Allocator,
+    typename CompletionCondition>
+std::size_t read(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition, boost::system::error_code& ec)
+{
+  ec = boost::system::error_code();
+  std::size_t total_transferred = 0;
+  std::size_t max_size = detail::adapt_completion_condition_result(
+        completion_condition(ec, total_transferred));
+  std::size_t bytes_available = read_size_helper(b, max_size);
+  while (bytes_available > 0)
+  {
+    std::size_t bytes_transferred = s.read_some(b.prepare(bytes_available), ec);
+    b.commit(bytes_transferred);
+    total_transferred += bytes_transferred;
+    max_size = detail::adapt_completion_condition_result(
+          completion_condition(ec, total_transferred));
+    bytes_available = read_size_helper(b, max_size);
+  }
+  return total_transferred;
+}
+
+template <typename SyncReadStream, typename Allocator>
+inline std::size_t read(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = read(s, b, transfer_all(), ec);
+  boost::asio::detail::throw_error(ec, "read");
+  return bytes_transferred;
+}
+
+template <typename SyncReadStream, typename Allocator>
+inline std::size_t read(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b,
+    boost::system::error_code& ec)
+{
+  return read(s, b, transfer_all(), ec);
+}
+
+template <typename SyncReadStream, typename Allocator,
+    typename CompletionCondition>
+inline std::size_t read(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = read(s, b, completion_condition, ec);
+  boost::asio::detail::throw_error(ec, "read");
+  return bytes_transferred;
+}
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+namespace detail
+{
+  template <typename AsyncReadStream, typename MutableBufferSequence,
+      typename CompletionCondition, typename ReadHandler>
+  class read_op
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    read_op(AsyncReadStream& stream, const MutableBufferSequence& buffers,
+        CompletionCondition completion_condition, ReadHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        stream_(stream),
+        buffers_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    read_op(const read_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    read_op(read_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      switch (start_ = start)
+      {
+        case 1:
+        buffers_.prepare(this->check_for_completion(ec, total_transferred_));
+        for (;;)
+        {
+          stream_.async_read_some(buffers_,
+              BOOST_ASIO_MOVE_CAST(read_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          buffers_.consume(bytes_transferred);
+          buffers_.prepare(this->check_for_completion(ec, total_transferred_));
+          if ((!ec && bytes_transferred == 0)
+              || buffers_.begin() == buffers_.end())
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncReadStream& stream_;
+    boost::asio::detail::consuming_buffers<
+      mutable_buffer, MutableBufferSequence> buffers_;
+    int start_;
+    std::size_t total_transferred_;
+    ReadHandler handler_;
+  };
+
+  template <typename AsyncReadStream,
+      typename CompletionCondition, typename ReadHandler>
+  class read_op<AsyncReadStream, boost::asio::mutable_buffers_1,
+      CompletionCondition, ReadHandler>
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    read_op(AsyncReadStream& stream,
+        const boost::asio::mutable_buffers_1& buffers,
+        CompletionCondition completion_condition, ReadHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        stream_(stream),
+        buffer_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    read_op(const read_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffer_(other.buffer_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    read_op(read_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffer_(other.buffer_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      std::size_t n = 0;
+      switch (start_ = start)
+      {
+        case 1:
+        n = this->check_for_completion(ec, total_transferred_);
+        for (;;)
+        {
+          stream_.async_read_some(
+              boost::asio::buffer(buffer_ + total_transferred_, n),
+              BOOST_ASIO_MOVE_CAST(read_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          if ((!ec && bytes_transferred == 0)
+              || (n = this->check_for_completion(ec, total_transferred_)) == 0
+              || total_transferred_ == boost::asio::buffer_size(buffer_))
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncReadStream& stream_;
+    boost::asio::mutable_buffer buffer_;
+    int start_;
+    std::size_t total_transferred_;
+    ReadHandler handler_;
+  };
+
+  template <typename AsyncReadStream, typename Elem,
+      typename CompletionCondition, typename ReadHandler>
+  class read_op<AsyncReadStream, boost::array<Elem, 2>,
+      CompletionCondition, ReadHandler>
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    read_op(AsyncReadStream& stream, const boost::array<Elem, 2>& buffers,
+        CompletionCondition completion_condition, ReadHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        stream_(stream),
+        buffers_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    read_op(const read_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    read_op(read_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      typename boost::asio::detail::dependent_type<Elem,
+          boost::array<boost::asio::mutable_buffer, 2> >::type bufs = {{
+        boost::asio::mutable_buffer(buffers_[0]),
+        boost::asio::mutable_buffer(buffers_[1]) }};
+      std::size_t buffer_size0 = boost::asio::buffer_size(bufs[0]);
+      std::size_t buffer_size1 = boost::asio::buffer_size(bufs[1]);
+      std::size_t n = 0;
+      switch (start_ = start)
+      {
+        case 1:
+        n = this->check_for_completion(ec, total_transferred_);
+        for (;;)
+        {
+          bufs[0] = boost::asio::buffer(bufs[0] + total_transferred_, n);
+          bufs[1] = boost::asio::buffer(
+              bufs[1] + (total_transferred_ < buffer_size0
+                ? 0 : total_transferred_ - buffer_size0),
+              n - boost::asio::buffer_size(bufs[0]));
+          stream_.async_read_some(bufs, BOOST_ASIO_MOVE_CAST(read_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          if ((!ec && bytes_transferred == 0)
+              || (n = this->check_for_completion(ec, total_transferred_)) == 0
+              || total_transferred_ == buffer_size0 + buffer_size1)
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncReadStream& stream_;
+    boost::array<Elem, 2> buffers_;
+    int start_;
+    std::size_t total_transferred_;
+    ReadHandler handler_;
+  };
+
+#if defined(BOOST_ASIO_HAS_STD_ARRAY)
+
+  template <typename AsyncReadStream, typename Elem,
+      typename CompletionCondition, typename ReadHandler>
+  class read_op<AsyncReadStream, std::array<Elem, 2>,
+      CompletionCondition, ReadHandler>
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    read_op(AsyncReadStream& stream, const std::array<Elem, 2>& buffers,
+        CompletionCondition completion_condition, ReadHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        stream_(stream),
+        buffers_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    read_op(const read_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    read_op(read_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      typename boost::asio::detail::dependent_type<Elem,
+          std::array<boost::asio::mutable_buffer, 2> >::type bufs = {{
+        boost::asio::mutable_buffer(buffers_[0]),
+        boost::asio::mutable_buffer(buffers_[1]) }};
+      std::size_t buffer_size0 = boost::asio::buffer_size(bufs[0]);
+      std::size_t buffer_size1 = boost::asio::buffer_size(bufs[1]);
+      std::size_t n = 0;
+      switch (start_ = start)
+      {
+        case 1:
+        n = this->check_for_completion(ec, total_transferred_);
+        for (;;)
+        {
+          bufs[0] = boost::asio::buffer(bufs[0] + total_transferred_, n);
+          bufs[1] = boost::asio::buffer(
+              bufs[1] + (total_transferred_ < buffer_size0
+                ? 0 : total_transferred_ - buffer_size0),
+              n - boost::asio::buffer_size(bufs[0]));
+          stream_.async_read_some(bufs, BOOST_ASIO_MOVE_CAST(read_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          if ((!ec && bytes_transferred == 0)
+              || (n = this->check_for_completion(ec, total_transferred_)) == 0
+              || total_transferred_ == buffer_size0 + buffer_size1)
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncReadStream& stream_;
+    std::array<Elem, 2> buffers_;
+    int start_;
+    std::size_t total_transferred_;
+    ReadHandler handler_;
+  };
+
+#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
+
+  template <typename AsyncReadStream, typename MutableBufferSequence,
+      typename CompletionCondition, typename ReadHandler>
+  inline void* asio_handler_allocate(std::size_t size,
+      read_op<AsyncReadStream, MutableBufferSequence,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename AsyncReadStream, typename MutableBufferSequence,
+      typename CompletionCondition, typename ReadHandler>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      read_op<AsyncReadStream, MutableBufferSequence,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename AsyncReadStream, typename MutableBufferSequence,
+      typename CompletionCondition, typename ReadHandler>
+  inline bool asio_handler_is_continuation(
+      read_op<AsyncReadStream, MutableBufferSequence,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    return this_handler->start_ == 0 ? true
+      : boost_asio_handler_cont_helpers::is_continuation(
+          this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncReadStream,
+      typename MutableBufferSequence, typename CompletionCondition,
+      typename ReadHandler>
+  inline void asio_handler_invoke(Function& function,
+      read_op<AsyncReadStream, MutableBufferSequence,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncReadStream,
+      typename MutableBufferSequence, typename CompletionCondition,
+      typename ReadHandler>
+  inline void asio_handler_invoke(const Function& function,
+      read_op<AsyncReadStream, MutableBufferSequence,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+} // namespace detail
+
+template <typename AsyncReadStream, typename MutableBufferSequence,
+    typename CompletionCondition, typename ReadHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read(AsyncReadStream& s, const MutableBufferSequence& buffers,
+    CompletionCondition completion_condition,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ReadHandler.
+  BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+  detail::async_result_init<
+    ReadHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+  detail::read_op<AsyncReadStream, MutableBufferSequence,
+    CompletionCondition, BOOST_ASIO_HANDLER_TYPE(
+      ReadHandler, void (boost::system::error_code, std::size_t))>(
+        s, buffers, completion_condition, init.handler)(
+          boost::system::error_code(), 0, 1);
+
+  return init.result.get();
+}
+
+template <typename AsyncReadStream, typename MutableBufferSequence,
+    typename ReadHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read(AsyncReadStream& s, const MutableBufferSequence& buffers,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ReadHandler.
+  BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+  detail::async_result_init<
+    ReadHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+  detail::read_op<AsyncReadStream, MutableBufferSequence,
+    detail::transfer_all_t, BOOST_ASIO_HANDLER_TYPE(
+      ReadHandler, void (boost::system::error_code, std::size_t))>(
+        s, buffers, transfer_all(), init.handler)(
+          boost::system::error_code(), 0, 1);
+
+  return init.result.get();
+}
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+namespace detail
+{
+  template <typename AsyncReadStream, typename Allocator,
+      typename CompletionCondition, typename ReadHandler>
+  class read_streambuf_op
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    read_streambuf_op(AsyncReadStream& stream,
+        basic_streambuf<Allocator>& streambuf,
+        CompletionCondition completion_condition, ReadHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        stream_(stream),
+        streambuf_(streambuf),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    read_streambuf_op(const read_streambuf_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        streambuf_(other.streambuf_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    read_streambuf_op(read_streambuf_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        streambuf_(other.streambuf_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      std::size_t max_size, bytes_available;
+      switch (start_ = start)
+      {
+        case 1:
+        max_size = this->check_for_completion(ec, total_transferred_);
+        bytes_available = read_size_helper(streambuf_, max_size);
+        for (;;)
+        {
+          stream_.async_read_some(streambuf_.prepare(bytes_available),
+              BOOST_ASIO_MOVE_CAST(read_streambuf_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          streambuf_.commit(bytes_transferred);
+          max_size = this->check_for_completion(ec, total_transferred_);
+          bytes_available = read_size_helper(streambuf_, max_size);
+          if ((!ec && bytes_transferred == 0) || bytes_available == 0)
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncReadStream& stream_;
+    boost::asio::basic_streambuf<Allocator>& streambuf_;
+    int start_;
+    std::size_t total_transferred_;
+    ReadHandler handler_;
+  };
+
+  template <typename AsyncReadStream, typename Allocator,
+      typename CompletionCondition, typename ReadHandler>
+  inline void* asio_handler_allocate(std::size_t size,
+      read_streambuf_op<AsyncReadStream, Allocator,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename AsyncReadStream, typename Allocator,
+      typename CompletionCondition, typename ReadHandler>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      read_streambuf_op<AsyncReadStream, Allocator,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename AsyncReadStream, typename Allocator,
+      typename CompletionCondition, typename ReadHandler>
+  inline bool asio_handler_is_continuation(
+      read_streambuf_op<AsyncReadStream, Allocator,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    return this_handler->start_ == 0 ? true
+      : boost_asio_handler_cont_helpers::is_continuation(
+          this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncReadStream,
+      typename Allocator, typename CompletionCondition, typename ReadHandler>
+  inline void asio_handler_invoke(Function& function,
+      read_streambuf_op<AsyncReadStream, Allocator,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncReadStream,
+      typename Allocator, typename CompletionCondition, typename ReadHandler>
+  inline void asio_handler_invoke(const Function& function,
+      read_streambuf_op<AsyncReadStream, Allocator,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+} // namespace detail
+
+template <typename AsyncReadStream, typename Allocator,
+    typename CompletionCondition, typename ReadHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read(AsyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ReadHandler.
+  BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+  detail::async_result_init<
+    ReadHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+  detail::read_streambuf_op<AsyncReadStream, Allocator,
+    CompletionCondition, BOOST_ASIO_HANDLER_TYPE(
+      ReadHandler, void (boost::system::error_code, std::size_t))>(
+        s, b, completion_condition, init.handler)(
+          boost::system::error_code(), 0, 1);
+
+  return init.result.get();
+}
+
+template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read(AsyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ReadHandler.
+  BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+  detail::async_result_init<
+    ReadHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+  detail::read_streambuf_op<AsyncReadStream, Allocator,
+    detail::transfer_all_t, BOOST_ASIO_HANDLER_TYPE(
+      ReadHandler, void (boost::system::error_code, std::size_t))>(
+        s, b, transfer_all(), init.handler)(
+          boost::system::error_code(), 0, 1);
+
+  return init.result.get();
+}
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IMPL_READ_HPP
diff --git a/ext/patches/boost/asio/impl/read_at.hpp b/ext/patches/boost/asio/impl/read_at.hpp
new file mode 100644
index 0000000..03fcf18
--- /dev/null
+++ b/ext/patches/boost/asio/impl/read_at.hpp
@@ -0,0 +1,812 @@
+//
+// impl/read_at.hpp
+// ~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IMPL_READ_AT_HPP
+#define BOOST_ASIO_IMPL_READ_AT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <algorithm>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/completion_condition.hpp>
+#include <boost/asio/detail/array_fwd.hpp>
+#include <boost/asio/detail/base_from_completion_cond.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/consuming_buffers.hpp>
+#include <boost/asio/detail/dependent_type.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_cont_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+template <typename SyncRandomAccessReadDevice, typename MutableBufferSequence,
+    typename CompletionCondition>
+std::size_t read_at(SyncRandomAccessReadDevice& d,
+    uint64_t offset, const MutableBufferSequence& buffers,
+    CompletionCondition completion_condition, boost::system::error_code& ec)
+{
+  ec = boost::system::error_code();
+  boost::asio::detail::consuming_buffers<
+    mutable_buffer, MutableBufferSequence> tmp(buffers);
+  std::size_t total_transferred = 0;
+  tmp.prepare(detail::adapt_completion_condition_result(
+        completion_condition(ec, total_transferred)));
+  while (tmp.begin() != tmp.end())
+  {
+    std::size_t bytes_transferred = d.read_some_at(
+        offset + total_transferred, tmp, ec);
+    tmp.consume(bytes_transferred);
+    total_transferred += bytes_transferred;
+    tmp.prepare(detail::adapt_completion_condition_result(
+          completion_condition(ec, total_transferred)));
+  }
+  return total_transferred;
+}
+
+template <typename SyncRandomAccessReadDevice, typename MutableBufferSequence>
+inline std::size_t read_at(SyncRandomAccessReadDevice& d,
+    uint64_t offset, const MutableBufferSequence& buffers)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = read_at(
+      d, offset, buffers, transfer_all(), ec);
+  boost::asio::detail::throw_error(ec, "read_at");
+  return bytes_transferred;
+}
+
+template <typename SyncRandomAccessReadDevice, typename MutableBufferSequence>
+inline std::size_t read_at(SyncRandomAccessReadDevice& d,
+    uint64_t offset, const MutableBufferSequence& buffers,
+    boost::system::error_code& ec)
+{
+  return read_at(d, offset, buffers, transfer_all(), ec);
+}
+
+template <typename SyncRandomAccessReadDevice, typename MutableBufferSequence,
+    typename CompletionCondition>
+inline std::size_t read_at(SyncRandomAccessReadDevice& d,
+    uint64_t offset, const MutableBufferSequence& buffers,
+    CompletionCondition completion_condition)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = read_at(
+      d, offset, buffers, completion_condition, ec);
+  boost::asio::detail::throw_error(ec, "read_at");
+  return bytes_transferred;
+}
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+template <typename SyncRandomAccessReadDevice, typename Allocator,
+    typename CompletionCondition>
+std::size_t read_at(SyncRandomAccessReadDevice& d,
+    uint64_t offset, boost::asio::basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition, boost::system::error_code& ec)
+{
+  ec = boost::system::error_code();
+  std::size_t total_transferred = 0;
+  std::size_t max_size = detail::adapt_completion_condition_result(
+        completion_condition(ec, total_transferred));
+  std::size_t bytes_available = read_size_helper(b, max_size);
+  while (bytes_available > 0)
+  {
+    std::size_t bytes_transferred = d.read_some_at(
+        offset + total_transferred, b.prepare(bytes_available), ec);
+    b.commit(bytes_transferred);
+    total_transferred += bytes_transferred;
+    max_size = detail::adapt_completion_condition_result(
+          completion_condition(ec, total_transferred));
+    bytes_available = read_size_helper(b, max_size);
+  }
+  return total_transferred;
+}
+
+template <typename SyncRandomAccessReadDevice, typename Allocator>
+inline std::size_t read_at(SyncRandomAccessReadDevice& d,
+    uint64_t offset, boost::asio::basic_streambuf<Allocator>& b)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = read_at(
+      d, offset, b, transfer_all(), ec);
+  boost::asio::detail::throw_error(ec, "read_at");
+  return bytes_transferred;
+}
+
+template <typename SyncRandomAccessReadDevice, typename Allocator>
+inline std::size_t read_at(SyncRandomAccessReadDevice& d,
+    uint64_t offset, boost::asio::basic_streambuf<Allocator>& b,
+    boost::system::error_code& ec)
+{
+  return read_at(d, offset, b, transfer_all(), ec);
+}
+
+template <typename SyncRandomAccessReadDevice, typename Allocator,
+    typename CompletionCondition>
+inline std::size_t read_at(SyncRandomAccessReadDevice& d,
+    uint64_t offset, boost::asio::basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = read_at(
+      d, offset, b, completion_condition, ec);
+  boost::asio::detail::throw_error(ec, "read_at");
+  return bytes_transferred;
+}
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+namespace detail
+{
+  template <typename AsyncRandomAccessReadDevice,
+      typename MutableBufferSequence, typename CompletionCondition,
+      typename ReadHandler>
+  class read_at_op
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    read_at_op(AsyncRandomAccessReadDevice& device,
+        uint64_t offset, const MutableBufferSequence& buffers,
+        CompletionCondition completion_condition, ReadHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        device_(device),
+        offset_(offset),
+        buffers_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    read_at_op(const read_at_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    read_at_op(read_at_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      switch (start_ = start)
+      {
+        case 1:
+        buffers_.prepare(this->check_for_completion(ec, total_transferred_));
+        for (;;)
+        {
+          device_.async_read_some_at(offset_ + total_transferred_,
+              buffers_, BOOST_ASIO_MOVE_CAST(read_at_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          buffers_.consume(bytes_transferred);
+          buffers_.prepare(this->check_for_completion(ec, total_transferred_));
+          if ((!ec && bytes_transferred == 0)
+              || buffers_.begin() == buffers_.end())
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncRandomAccessReadDevice& device_;
+    uint64_t offset_;
+    boost::asio::detail::consuming_buffers<
+      mutable_buffer, MutableBufferSequence> buffers_;
+    int start_;
+    std::size_t total_transferred_;
+    ReadHandler handler_;
+  };
+
+  template <typename AsyncRandomAccessReadDevice,
+      typename CompletionCondition, typename ReadHandler>
+  class read_at_op<AsyncRandomAccessReadDevice,
+      boost::asio::mutable_buffers_1, CompletionCondition, ReadHandler>
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    read_at_op(AsyncRandomAccessReadDevice& device,
+        uint64_t offset, const boost::asio::mutable_buffers_1& buffers,
+        CompletionCondition completion_condition, ReadHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        device_(device),
+        offset_(offset),
+        buffer_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    read_at_op(const read_at_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffer_(other.buffer_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    read_at_op(read_at_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffer_(other.buffer_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      std::size_t n = 0;
+      switch (start_ = start)
+      {
+        case 1:
+        n = this->check_for_completion(ec, total_transferred_);
+        for (;;)
+        {
+          device_.async_read_some_at(offset_ + total_transferred_,
+              boost::asio::buffer(buffer_ + total_transferred_, n),
+              BOOST_ASIO_MOVE_CAST(read_at_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          if ((!ec && bytes_transferred == 0)
+              || (n = this->check_for_completion(ec, total_transferred_)) == 0
+              || total_transferred_ == boost::asio::buffer_size(buffer_))
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncRandomAccessReadDevice& device_;
+    uint64_t offset_;
+    boost::asio::mutable_buffer buffer_;
+    int start_;
+    std::size_t total_transferred_;
+    ReadHandler handler_;
+  };
+
+  template <typename AsyncRandomAccessReadDevice, typename Elem,
+      typename CompletionCondition, typename ReadHandler>
+  class read_at_op<AsyncRandomAccessReadDevice, boost::array<Elem, 2>,
+      CompletionCondition, ReadHandler>
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    read_at_op(AsyncRandomAccessReadDevice& device,
+        uint64_t offset, const boost::array<Elem, 2>& buffers,
+        CompletionCondition completion_condition, ReadHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        device_(device),
+        offset_(offset),
+        buffers_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    read_at_op(const read_at_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    read_at_op(read_at_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      typename boost::asio::detail::dependent_type<Elem,
+          boost::array<boost::asio::mutable_buffer, 2> >::type bufs = {{
+        boost::asio::mutable_buffer(buffers_[0]),
+        boost::asio::mutable_buffer(buffers_[1]) }};
+      std::size_t buffer_size0 = boost::asio::buffer_size(bufs[0]);
+      std::size_t buffer_size1 = boost::asio::buffer_size(bufs[1]);
+      std::size_t n = 0;
+      switch (start_ = start)
+      {
+        case 1:
+        n = this->check_for_completion(ec, total_transferred_);
+        for (;;)
+        {
+          bufs[0] = boost::asio::buffer(bufs[0] + total_transferred_, n);
+          bufs[1] = boost::asio::buffer(
+              bufs[1] + (total_transferred_ < buffer_size0
+                ? 0 : total_transferred_ - buffer_size0),
+              n - boost::asio::buffer_size(bufs[0]));
+          device_.async_read_some_at(offset_ + total_transferred_,
+              bufs, BOOST_ASIO_MOVE_CAST(read_at_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          if ((!ec && bytes_transferred == 0)
+              || (n = this->check_for_completion(ec, total_transferred_)) == 0
+              || total_transferred_ == buffer_size0 + buffer_size1)
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncRandomAccessReadDevice& device_;
+    uint64_t offset_;
+    boost::array<Elem, 2> buffers_;
+    int start_;
+    std::size_t total_transferred_;
+    ReadHandler handler_;
+  };
+
+#if defined(BOOST_ASIO_HAS_STD_ARRAY)
+
+  template <typename AsyncRandomAccessReadDevice, typename Elem,
+      typename CompletionCondition, typename ReadHandler>
+  class read_at_op<AsyncRandomAccessReadDevice, std::array<Elem, 2>,
+      CompletionCondition, ReadHandler>
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    read_at_op(AsyncRandomAccessReadDevice& device,
+        uint64_t offset, const std::array<Elem, 2>& buffers,
+        CompletionCondition completion_condition, ReadHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        device_(device),
+        offset_(offset),
+        buffers_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    read_at_op(const read_at_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    read_at_op(read_at_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      typename boost::asio::detail::dependent_type<Elem,
+          std::array<boost::asio::mutable_buffer, 2> >::type bufs = {{
+        boost::asio::mutable_buffer(buffers_[0]),
+        boost::asio::mutable_buffer(buffers_[1]) }};
+      std::size_t buffer_size0 = boost::asio::buffer_size(bufs[0]);
+      std::size_t buffer_size1 = boost::asio::buffer_size(bufs[1]);
+      std::size_t n = 0;
+      switch (start_ = start)
+      {
+        case 1:
+        n = this->check_for_completion(ec, total_transferred_);
+        for (;;)
+        {
+          bufs[0] = boost::asio::buffer(bufs[0] + total_transferred_, n);
+          bufs[1] = boost::asio::buffer(
+              bufs[1] + (total_transferred_ < buffer_size0
+                ? 0 : total_transferred_ - buffer_size0),
+              n - boost::asio::buffer_size(bufs[0]));
+          device_.async_read_some_at(offset_ + total_transferred_,
+              bufs, BOOST_ASIO_MOVE_CAST(read_at_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          if ((!ec && bytes_transferred == 0)
+              || (n = this->check_for_completion(ec, total_transferred_)) == 0
+              || total_transferred_ == buffer_size0 + buffer_size1)
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncRandomAccessReadDevice& device_;
+    uint64_t offset_;
+    std::array<Elem, 2> buffers_;
+    int start_;
+    std::size_t total_transferred_;
+    ReadHandler handler_;
+  };
+
+#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
+
+  template <typename AsyncRandomAccessReadDevice,
+      typename MutableBufferSequence, typename CompletionCondition,
+      typename ReadHandler>
+  inline void* asio_handler_allocate(std::size_t size,
+      read_at_op<AsyncRandomAccessReadDevice, MutableBufferSequence,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename AsyncRandomAccessReadDevice,
+      typename MutableBufferSequence, typename CompletionCondition,
+      typename ReadHandler>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      read_at_op<AsyncRandomAccessReadDevice, MutableBufferSequence,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename AsyncRandomAccessReadDevice,
+      typename MutableBufferSequence, typename CompletionCondition,
+      typename ReadHandler>
+  inline bool asio_handler_is_continuation(
+      read_at_op<AsyncRandomAccessReadDevice, MutableBufferSequence,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    return this_handler->start_ == 0 ? true
+      : boost_asio_handler_cont_helpers::is_continuation(
+          this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncRandomAccessReadDevice,
+      typename MutableBufferSequence, typename CompletionCondition,
+      typename ReadHandler>
+  inline void asio_handler_invoke(Function& function,
+      read_at_op<AsyncRandomAccessReadDevice, MutableBufferSequence,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncRandomAccessReadDevice,
+      typename MutableBufferSequence, typename CompletionCondition,
+      typename ReadHandler>
+  inline void asio_handler_invoke(const Function& function,
+      read_at_op<AsyncRandomAccessReadDevice, MutableBufferSequence,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename AsyncRandomAccessReadDevice,
+      typename MutableBufferSequence, typename CompletionCondition,
+      typename ReadHandler>
+  inline read_at_op<AsyncRandomAccessReadDevice,
+      MutableBufferSequence, CompletionCondition, ReadHandler>
+  make_read_at_op(AsyncRandomAccessReadDevice& d,
+      uint64_t offset, const MutableBufferSequence& buffers,
+      CompletionCondition completion_condition, ReadHandler handler)
+  {
+    return read_at_op<AsyncRandomAccessReadDevice,
+      MutableBufferSequence, CompletionCondition, ReadHandler>(
+        d, offset, buffers, completion_condition, handler);
+  }
+} // namespace detail
+
+template <typename AsyncRandomAccessReadDevice, typename MutableBufferSequence,
+    typename CompletionCondition, typename ReadHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read_at(AsyncRandomAccessReadDevice& d,
+    uint64_t offset, const MutableBufferSequence& buffers,
+    CompletionCondition completion_condition,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ReadHandler.
+  BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+  detail::async_result_init<
+    ReadHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+  detail::read_at_op<AsyncRandomAccessReadDevice, MutableBufferSequence,
+    CompletionCondition, BOOST_ASIO_HANDLER_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))>(
+        d, offset, buffers, completion_condition, init.handler)(
+          boost::system::error_code(), 0, 1);
+
+  return init.result.get();
+}
+
+template <typename AsyncRandomAccessReadDevice, typename MutableBufferSequence,
+    typename ReadHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read_at(AsyncRandomAccessReadDevice& d,
+    uint64_t offset, const MutableBufferSequence& buffers,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ReadHandler.
+  BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+  detail::async_result_init<
+    ReadHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+  detail::read_at_op<AsyncRandomAccessReadDevice, MutableBufferSequence,
+    detail::transfer_all_t, BOOST_ASIO_HANDLER_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))>(
+        d, offset, buffers, transfer_all(), init.handler)(
+          boost::system::error_code(), 0, 1);
+
+  return init.result.get();
+}
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+namespace detail
+{
+  template <typename AsyncRandomAccessReadDevice, typename Allocator,
+      typename CompletionCondition, typename ReadHandler>
+  class read_at_streambuf_op
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    read_at_streambuf_op(AsyncRandomAccessReadDevice& device,
+        uint64_t offset, basic_streambuf<Allocator>& streambuf,
+        CompletionCondition completion_condition, ReadHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        device_(device),
+        offset_(offset),
+        streambuf_(streambuf),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    read_at_streambuf_op(const read_at_streambuf_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        streambuf_(other.streambuf_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    read_at_streambuf_op(read_at_streambuf_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        streambuf_(other.streambuf_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      std::size_t max_size, bytes_available;
+      switch (start_ = start)
+      {
+        case 1:
+        max_size = this->check_for_completion(ec, total_transferred_);
+        bytes_available = read_size_helper(streambuf_, max_size);
+        for (;;)
+        {
+          device_.async_read_some_at(offset_ + total_transferred_,
+              streambuf_.prepare(bytes_available),
+              BOOST_ASIO_MOVE_CAST(read_at_streambuf_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          streambuf_.commit(bytes_transferred);
+          max_size = this->check_for_completion(ec, total_transferred_);
+          bytes_available = read_size_helper(streambuf_, max_size);
+          if ((!ec && bytes_transferred == 0) || bytes_available == 0)
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncRandomAccessReadDevice& device_;
+    uint64_t offset_;
+    boost::asio::basic_streambuf<Allocator>& streambuf_;
+    int start_;
+    std::size_t total_transferred_;
+    ReadHandler handler_;
+  };
+
+  template <typename AsyncRandomAccessReadDevice, typename Allocator,
+      typename CompletionCondition, typename ReadHandler>
+  inline void* asio_handler_allocate(std::size_t size,
+      read_at_streambuf_op<AsyncRandomAccessReadDevice, Allocator,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename AsyncRandomAccessReadDevice, typename Allocator,
+      typename CompletionCondition, typename ReadHandler>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      read_at_streambuf_op<AsyncRandomAccessReadDevice, Allocator,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename AsyncRandomAccessReadDevice, typename Allocator,
+      typename CompletionCondition, typename ReadHandler>
+  inline bool asio_handler_is_continuation(
+      read_at_streambuf_op<AsyncRandomAccessReadDevice, Allocator,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    return this_handler->start_ == 0 ? true
+      : boost_asio_handler_cont_helpers::is_continuation(
+          this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncRandomAccessReadDevice,
+      typename Allocator, typename CompletionCondition, typename ReadHandler>
+  inline void asio_handler_invoke(Function& function,
+      read_at_streambuf_op<AsyncRandomAccessReadDevice, Allocator,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncRandomAccessReadDevice,
+      typename Allocator, typename CompletionCondition, typename ReadHandler>
+  inline void asio_handler_invoke(const Function& function,
+      read_at_streambuf_op<AsyncRandomAccessReadDevice, Allocator,
+        CompletionCondition, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+} // namespace detail
+
+template <typename AsyncRandomAccessReadDevice, typename Allocator,
+    typename CompletionCondition, typename ReadHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read_at(AsyncRandomAccessReadDevice& d,
+    uint64_t offset, boost::asio::basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ReadHandler.
+  BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+  detail::async_result_init<
+    ReadHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+  detail::read_at_streambuf_op<AsyncRandomAccessReadDevice, Allocator,
+    CompletionCondition, BOOST_ASIO_HANDLER_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))>(
+        d, offset, b, completion_condition, init.handler)(
+          boost::system::error_code(), 0, 1);
+
+  return init.result.get();
+}
+
+template <typename AsyncRandomAccessReadDevice, typename Allocator,
+    typename ReadHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read_at(AsyncRandomAccessReadDevice& d,
+    uint64_t offset, boost::asio::basic_streambuf<Allocator>& b,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ReadHandler.
+  BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+  detail::async_result_init<
+    ReadHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+  detail::read_at_streambuf_op<AsyncRandomAccessReadDevice, Allocator,
+    detail::transfer_all_t, BOOST_ASIO_HANDLER_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))>(
+        d, offset, b, transfer_all(), init.handler)(
+          boost::system::error_code(), 0, 1);
+
+  return init.result.get();
+}
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IMPL_READ_AT_HPP
diff --git a/ext/patches/boost/asio/impl/read_until.hpp b/ext/patches/boost/asio/impl/read_until.hpp
new file mode 100644
index 0000000..3bf7b77
--- /dev/null
+++ b/ext/patches/boost/asio/impl/read_until.hpp
@@ -0,0 +1,1149 @@
+//
+// impl/read_until.hpp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IMPL_READ_UNTIL_HPP
+#define BOOST_ASIO_IMPL_READ_UNTIL_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <algorithm>
+#include <string>
+#include <vector>
+#include <utility>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/buffers_iterator.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_cont_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/limits.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+template <typename SyncReadStream, typename Allocator>
+inline std::size_t read_until(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, char delim)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = read_until(s, b, delim, ec);
+  boost::asio::detail::throw_error(ec, "read_until");
+  return bytes_transferred;
+}
+
+template <typename SyncReadStream, typename Allocator>
+std::size_t read_until(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, char delim,
+    boost::system::error_code& ec)
+{
+  std::size_t search_position = 0;
+  for (;;)
+  {
+    // Determine the range of the data to be searched.
+    typedef typename boost::asio::basic_streambuf<
+      Allocator>::const_buffers_type const_buffers_type;
+    typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
+    const_buffers_type buffers = b.data();
+    iterator begin = iterator::begin(buffers);
+    iterator start_pos = begin + search_position;
+    iterator end = iterator::end(buffers);
+
+    // Look for a match.
+    iterator iter = std::find(start_pos, end, delim);
+    if (iter != end)
+    {
+      // Found a match. We're done.
+      ec = boost::system::error_code();
+      return iter - begin + 1;
+    }
+    else
+    {
+      // No match. Next search can start with the new data.
+      search_position = end - begin;
+    }
+
+    // Check if buffer is full.
+    if (b.size() == b.max_size())
+    {
+      ec = error::not_found;
+      return 0;
+    }
+
+    // Need more data.
+    std::size_t bytes_to_read = read_size_helper(b, 65536);
+    b.commit(s.read_some(b.prepare(bytes_to_read), ec));
+    if (ec)
+      return 0;
+  }
+}
+
+template <typename SyncReadStream, typename Allocator>
+inline std::size_t read_until(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, const std::string& delim)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = read_until(s, b, delim, ec);
+  boost::asio::detail::throw_error(ec, "read_until");
+  return bytes_transferred;
+}
+
+namespace detail
+{
+  // Algorithm that finds a subsequence of equal values in a sequence. Returns
+  // (iterator,true) if a full match was found, in which case the iterator
+  // points to the beginning of the match. Returns (iterator,false) if a
+  // partial match was found at the end of the first sequence, in which case
+  // the iterator points to the beginning of the partial match. Returns
+  // (last1,false) if no full or partial match was found.
+  template <typename Iterator1, typename Iterator2>
+  std::pair<Iterator1, bool> partial_search(
+      Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2)
+  {
+    for (Iterator1 iter1 = first1; iter1 != last1; ++iter1)
+    {
+      Iterator1 test_iter1 = iter1;
+      Iterator2 test_iter2 = first2;
+      for (;; ++test_iter1, ++test_iter2)
+      {
+        if (test_iter2 == last2)
+          return std::make_pair(iter1, true);
+        if (test_iter1 == last1)
+        {
+          if (test_iter2 != first2)
+            return std::make_pair(iter1, false);
+          else
+            break;
+        }
+        if (*test_iter1 != *test_iter2)
+          break;
+      }
+    }
+    return std::make_pair(last1, false);
+  }
+} // namespace detail
+
+template <typename SyncReadStream, typename Allocator>
+std::size_t read_until(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, const std::string& delim,
+    boost::system::error_code& ec)
+{
+  std::size_t search_position = 0;
+  for (;;)
+  {
+    // Determine the range of the data to be searched.
+    typedef typename boost::asio::basic_streambuf<
+      Allocator>::const_buffers_type const_buffers_type;
+    typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
+    const_buffers_type buffers = b.data();
+    iterator begin = iterator::begin(buffers);
+    iterator start_pos = begin + search_position;
+    iterator end = iterator::end(buffers);
+
+    // Look for a match.
+    std::pair<iterator, bool> result = detail::partial_search(
+        start_pos, end, delim.begin(), delim.end());
+    if (result.first != end)
+    {
+      if (result.second)
+      {
+        // Full match. We're done.
+        ec = boost::system::error_code();
+        return result.first - begin + delim.length();
+      }
+      else
+      {
+        // Partial match. Next search needs to start from beginning of match.
+        search_position = result.first - begin;
+      }
+    }
+    else
+    {
+      // No match. Next search can start with the new data.
+      search_position = end - begin;
+    }
+
+    // Check if buffer is full.
+    if (b.size() == b.max_size())
+    {
+      ec = error::not_found;
+      return 0;
+    }
+
+    // Need more data.
+    std::size_t bytes_to_read = read_size_helper(b, 65536);
+    b.commit(s.read_some(b.prepare(bytes_to_read), ec));
+    if (ec)
+      return 0;
+  }
+}
+
+#if defined(BOOST_ASIO_HAS_BOOST_REGEX)
+
+template <typename SyncReadStream, typename Allocator>
+inline std::size_t read_until(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = read_until(s, b, expr, ec);
+  boost::asio::detail::throw_error(ec, "read_until");
+  return bytes_transferred;
+}
+
+template <typename SyncReadStream, typename Allocator>
+std::size_t read_until(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr,
+    boost::system::error_code& ec)
+{
+  std::size_t search_position = 0;
+  for (;;)
+  {
+    // Determine the range of the data to be searched.
+    typedef typename boost::asio::basic_streambuf<
+      Allocator>::const_buffers_type const_buffers_type;
+    typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
+    const_buffers_type buffers = b.data();
+    iterator begin = iterator::begin(buffers);
+    iterator start_pos = begin + search_position;
+    iterator end = iterator::end(buffers);
+
+    // Look for a match.
+    boost::match_results<iterator,
+      typename std::vector<boost::sub_match<iterator> >::allocator_type>
+        match_results;
+    if (regex_search(start_pos, end, match_results, expr,
+          boost::match_default | boost::match_partial))
+    {
+      if (match_results[0].matched)
+      {
+        // Full match. We're done.
+        ec = boost::system::error_code();
+        return match_results[0].second - begin;
+      }
+      else
+      {
+        // Partial match. Next search needs to start from beginning of match.
+        search_position = match_results[0].first - begin;
+      }
+    }
+    else
+    {
+      // No match. Next search can start with the new data.
+      search_position = end - begin;
+    }
+
+    // Check if buffer is full.
+    if (b.size() == b.max_size())
+    {
+      ec = error::not_found;
+      return 0;
+    }
+
+    // Need more data.
+    std::size_t bytes_to_read = read_size_helper(b, 65536);
+    b.commit(s.read_some(b.prepare(bytes_to_read), ec));
+    if (ec)
+      return 0;
+  }
+}
+
+#endif // defined(BOOST_ASIO_HAS_BOOST_REGEX)
+
+template <typename SyncReadStream, typename Allocator, typename MatchCondition>
+std::size_t read_until(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b,
+    MatchCondition match_condition, boost::system::error_code& ec,
+    typename enable_if<is_match_condition<MatchCondition>::value>::type*)
+{
+  std::size_t search_position = 0;
+  for (;;)
+  {
+    // Determine the range of the data to be searched.
+    typedef typename boost::asio::basic_streambuf<
+      Allocator>::const_buffers_type const_buffers_type;
+    typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
+    const_buffers_type buffers = b.data();
+    iterator begin = iterator::begin(buffers);
+    iterator start_pos = begin + search_position;
+    iterator end = iterator::end(buffers);
+
+    // Look for a match.
+    std::pair<iterator, bool> result = match_condition(start_pos, end);
+    if (result.second)
+    {
+      // Full match. We're done.
+      ec = boost::system::error_code();
+      return result.first - begin;
+    }
+    else if (result.first != end)
+    {
+      // Partial match. Next search needs to start from beginning of match.
+      search_position = result.first - begin;
+    }
+    else
+    {
+      // No match. Next search can start with the new data.
+      search_position = end - begin;
+    }
+
+    // Check if buffer is full.
+    if (b.size() == b.max_size())
+    {
+      ec = error::not_found;
+      return 0;
+    }
+
+    // Need more data.
+    std::size_t bytes_to_read = read_size_helper(b, 65536);
+    b.commit(s.read_some(b.prepare(bytes_to_read), ec));
+    if (ec)
+      return 0;
+  }
+}
+
+template <typename SyncReadStream, typename Allocator, typename MatchCondition>
+inline std::size_t read_until(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, MatchCondition match_condition,
+    typename enable_if<is_match_condition<MatchCondition>::value>::type*)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = read_until(s, b, match_condition, ec);
+  boost::asio::detail::throw_error(ec, "read_until");
+  return bytes_transferred;
+}
+
+namespace detail
+{
+  template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
+  class read_until_delim_op
+  {
+  public:
+    read_until_delim_op(AsyncReadStream& stream,
+        boost::asio::basic_streambuf<Allocator>& streambuf,
+        char delim, ReadHandler& handler)
+      : stream_(stream),
+        streambuf_(streambuf),
+        delim_(delim),
+        start_(0),
+        search_position_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    read_until_delim_op(const read_until_delim_op& other)
+      : stream_(other.stream_),
+        streambuf_(other.streambuf_),
+        delim_(other.delim_),
+        start_(other.start_),
+        search_position_(other.search_position_),
+        handler_(other.handler_)
+    {
+    }
+
+    read_until_delim_op(read_until_delim_op&& other)
+      : stream_(other.stream_),
+        streambuf_(other.streambuf_),
+        delim_(other.delim_),
+        start_(other.start_),
+        search_position_(other.search_position_),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      const std::size_t not_found = (std::numeric_limits<std::size_t>::max)();
+      std::size_t bytes_to_read;
+      switch (start_ = start)
+      {
+      case 1:
+        for (;;)
+        {
+          {
+            // Determine the range of the data to be searched.
+            typedef typename boost::asio::basic_streambuf<
+              Allocator>::const_buffers_type const_buffers_type;
+            typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
+            const_buffers_type buffers = streambuf_.data();
+            iterator begin = iterator::begin(buffers);
+            iterator start_pos = begin + search_position_;
+            iterator end = iterator::end(buffers);
+
+            // Look for a match.
+            iterator iter = std::find(start_pos, end, delim_);
+            if (iter != end)
+            {
+              // Found a match. We're done.
+              search_position_ = iter - begin + 1;
+              bytes_to_read = 0;
+            }
+
+            // No match yet. Check if buffer is full.
+            else if (streambuf_.size() == streambuf_.max_size())
+            {
+              search_position_ = not_found;
+              bytes_to_read = 0;
+            }
+
+            // Need to read some more data.
+            else
+            {
+              // Next search can start with the new data.
+              search_position_ = end - begin;
+              bytes_to_read = read_size_helper(streambuf_, 65536);
+            }
+          }
+
+          // Check if we're done.
+          if (!start && bytes_to_read == 0)
+            break;
+
+          // Start a new asynchronous read operation to obtain more data.
+          stream_.async_read_some(streambuf_.prepare(bytes_to_read),
+              BOOST_ASIO_MOVE_CAST(read_until_delim_op)(*this));
+          return; default:
+          streambuf_.commit(bytes_transferred);
+          if (ec || bytes_transferred == 0)
+            break;
+        }
+
+        const boost::system::error_code result_ec =
+          (search_position_ == not_found)
+          ? error::not_found : ec;
+
+        const std::size_t result_n =
+          (ec || search_position_ == not_found)
+          ? 0 : search_position_;
+
+        handler_(result_ec, result_n);
+      }
+    }
+
+  //private:
+    AsyncReadStream& stream_;
+    boost::asio::basic_streambuf<Allocator>& streambuf_;
+    char delim_;
+    int start_;
+    std::size_t search_position_;
+    ReadHandler handler_;
+  };
+
+  template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
+  inline void* asio_handler_allocate(std::size_t size,
+      read_until_delim_op<AsyncReadStream,
+        Allocator, ReadHandler>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      read_until_delim_op<AsyncReadStream,
+        Allocator, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
+  inline bool asio_handler_is_continuation(
+      read_until_delim_op<AsyncReadStream,
+        Allocator, ReadHandler>* this_handler)
+  {
+    return this_handler->start_ == 0 ? true
+      : boost_asio_handler_cont_helpers::is_continuation(
+          this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncReadStream, typename Allocator,
+      typename ReadHandler>
+  inline void asio_handler_invoke(Function& function,
+      read_until_delim_op<AsyncReadStream,
+        Allocator, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncReadStream, typename Allocator,
+      typename ReadHandler>
+  inline void asio_handler_invoke(const Function& function,
+      read_until_delim_op<AsyncReadStream,
+        Allocator, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+} // namespace detail
+
+template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read_until(AsyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, char delim,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ReadHandler.
+  BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+  detail::async_result_init<
+    ReadHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+  detail::read_until_delim_op<AsyncReadStream,
+    Allocator, BOOST_ASIO_HANDLER_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))>(
+        s, b, delim, init.handler)(
+          boost::system::error_code(), 0, 1);
+
+  return init.result.get();
+}
+
+namespace detail
+{
+  template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
+  class read_until_delim_string_op
+  {
+  public:
+    read_until_delim_string_op(AsyncReadStream& stream,
+        boost::asio::basic_streambuf<Allocator>& streambuf,
+        const std::string& delim, ReadHandler& handler)
+      : stream_(stream),
+        streambuf_(streambuf),
+        delim_(delim),
+        start_(0),
+        search_position_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    read_until_delim_string_op(const read_until_delim_string_op& other)
+      : stream_(other.stream_),
+        streambuf_(other.streambuf_),
+        delim_(other.delim_),
+        start_(other.start_),
+        search_position_(other.search_position_),
+        handler_(other.handler_)
+    {
+    }
+
+    read_until_delim_string_op(read_until_delim_string_op&& other)
+      : stream_(other.stream_),
+        streambuf_(other.streambuf_),
+        delim_(BOOST_ASIO_MOVE_CAST(std::string)(other.delim_)),
+        start_(other.start_),
+        search_position_(other.search_position_),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      const std::size_t not_found = (std::numeric_limits<std::size_t>::max)();
+      std::size_t bytes_to_read;
+      switch (start_ = start)
+      {
+      case 1:
+        for (;;)
+        {
+          {
+            // Determine the range of the data to be searched.
+            typedef typename boost::asio::basic_streambuf<
+              Allocator>::const_buffers_type const_buffers_type;
+            typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
+            const_buffers_type buffers = streambuf_.data();
+            iterator begin = iterator::begin(buffers);
+            iterator start_pos = begin + search_position_;
+            iterator end = iterator::end(buffers);
+
+            // Look for a match.
+            std::pair<iterator, bool> result = detail::partial_search(
+                start_pos, end, delim_.begin(), delim_.end());
+            if (result.first != end && result.second)
+            {
+              // Full match. We're done.
+              search_position_ = result.first - begin + delim_.length();
+              bytes_to_read = 0;
+            }
+
+            // No match yet. Check if buffer is full.
+            else if (streambuf_.size() == streambuf_.max_size())
+            {
+              search_position_ = not_found;
+              bytes_to_read = 0;
+            }
+
+            // Need to read some more data.
+            else
+            {
+              if (result.first != end)
+              {
+                // Partial match. Next search needs to start from beginning of
+                // match.
+                search_position_ = result.first - begin;
+              }
+              else
+              {
+                // Next search can start with the new data.
+                search_position_ = end - begin;
+              }
+
+              bytes_to_read = read_size_helper(streambuf_, 65536);
+            }
+          }
+
+          // Check if we're done.
+          if (!start && bytes_to_read == 0)
+            break;
+
+          // Start a new asynchronous read operation to obtain more data.
+          stream_.async_read_some(streambuf_.prepare(bytes_to_read),
+              BOOST_ASIO_MOVE_CAST(read_until_delim_string_op)(*this));
+          return; default:
+          streambuf_.commit(bytes_transferred);
+          if (ec || bytes_transferred == 0)
+            break;
+        }
+
+        const boost::system::error_code result_ec =
+          (search_position_ == not_found)
+          ? error::not_found : ec;
+
+        const std::size_t result_n =
+          (ec || search_position_ == not_found)
+          ? 0 : search_position_;
+
+        handler_(result_ec, result_n);
+      }
+    }
+
+  //private:
+    AsyncReadStream& stream_;
+    boost::asio::basic_streambuf<Allocator>& streambuf_;
+    std::string delim_;
+    int start_;
+    std::size_t search_position_;
+    ReadHandler handler_;
+  };
+
+  template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
+  inline void* asio_handler_allocate(std::size_t size,
+      read_until_delim_string_op<AsyncReadStream,
+        Allocator, ReadHandler>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      read_until_delim_string_op<AsyncReadStream,
+        Allocator, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
+  inline bool asio_handler_is_continuation(
+      read_until_delim_string_op<AsyncReadStream,
+        Allocator, ReadHandler>* this_handler)
+  {
+    return this_handler->start_ == 0 ? true
+      : boost_asio_handler_cont_helpers::is_continuation(
+          this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncReadStream,
+      typename Allocator, typename ReadHandler>
+  inline void asio_handler_invoke(Function& function,
+      read_until_delim_string_op<AsyncReadStream,
+        Allocator, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncReadStream,
+      typename Allocator, typename ReadHandler>
+  inline void asio_handler_invoke(const Function& function,
+      read_until_delim_string_op<AsyncReadStream,
+        Allocator, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+} // namespace detail
+
+template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read_until(AsyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, const std::string& delim,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ReadHandler.
+  BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+  detail::async_result_init<
+    ReadHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+  detail::read_until_delim_string_op<AsyncReadStream,
+    Allocator, BOOST_ASIO_HANDLER_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))>(
+        s, b, delim, init.handler)(
+          boost::system::error_code(), 0, 1);
+
+  return init.result.get();
+}
+
+#if defined(BOOST_ASIO_HAS_BOOST_REGEX)
+
+namespace detail
+{
+  template <typename AsyncReadStream, typename Allocator,
+      typename RegEx, typename ReadHandler>
+  class read_until_expr_op
+  {
+  public:
+    read_until_expr_op(AsyncReadStream& stream,
+        boost::asio::basic_streambuf<Allocator>& streambuf,
+        const boost::regex& expr, ReadHandler& handler)
+      : stream_(stream),
+        streambuf_(streambuf),
+        expr_(expr),
+        start_(0),
+        search_position_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    read_until_expr_op(const read_until_expr_op& other)
+      : stream_(other.stream_),
+        streambuf_(other.streambuf_),
+        expr_(other.expr_),
+        start_(other.start_),
+        search_position_(other.search_position_),
+        handler_(other.handler_)
+    {
+    }
+
+    read_until_expr_op(read_until_expr_op&& other)
+      : stream_(other.stream_),
+        streambuf_(other.streambuf_),
+        expr_(other.expr_),
+        start_(other.start_),
+        search_position_(other.search_position_),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      const std::size_t not_found = (std::numeric_limits<std::size_t>::max)();
+      std::size_t bytes_to_read;
+      switch (start_ = start)
+      {
+      case 1:
+        for (;;)
+        {
+          {
+            // Determine the range of the data to be searched.
+            typedef typename boost::asio::basic_streambuf<
+              Allocator>::const_buffers_type const_buffers_type;
+            typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
+            const_buffers_type buffers = streambuf_.data();
+            iterator begin = iterator::begin(buffers);
+            iterator start_pos = begin + search_position_;
+            iterator end = iterator::end(buffers);
+
+            // Look for a match.
+            boost::match_results<iterator,
+              typename std::vector<boost::sub_match<iterator> >::allocator_type>
+                match_results;
+            bool match = regex_search(start_pos, end, match_results, expr_,
+                boost::match_default | boost::match_partial);
+            if (match && match_results[0].matched)
+            {
+              // Full match. We're done.
+              search_position_ = match_results[0].second - begin;
+              bytes_to_read = 0;
+            }
+
+            // No match yet. Check if buffer is full.
+            else if (streambuf_.size() == streambuf_.max_size())
+            {
+              search_position_ = not_found;
+              bytes_to_read = 0;
+            }
+
+            // Need to read some more data.
+            else
+            {
+              if (match)
+              {
+                // Partial match. Next search needs to start from beginning of
+                // match.
+                search_position_ = match_results[0].first - begin;
+              }
+              else
+              {
+                // Next search can start with the new data.
+                search_position_ = end - begin;
+              }
+
+              bytes_to_read = read_size_helper(streambuf_, 65536);
+            }
+          }
+
+          // Check if we're done.
+          if (!start && bytes_to_read == 0)
+            break;
+
+          // Start a new asynchronous read operation to obtain more data.
+          stream_.async_read_some(streambuf_.prepare(bytes_to_read),
+              BOOST_ASIO_MOVE_CAST(read_until_expr_op)(*this));
+          return; default:
+          streambuf_.commit(bytes_transferred);
+          if (ec || bytes_transferred == 0)
+            break;
+        }
+
+        const boost::system::error_code result_ec =
+          (search_position_ == not_found)
+          ? error::not_found : ec;
+
+        const std::size_t result_n =
+          (ec || search_position_ == not_found)
+          ? 0 : search_position_;
+
+        handler_(result_ec, result_n);
+      }
+    }
+
+  //private:
+    AsyncReadStream& stream_;
+    boost::asio::basic_streambuf<Allocator>& streambuf_;
+    RegEx expr_;
+    int start_;
+    std::size_t search_position_;
+    ReadHandler handler_;
+  };
+
+  template <typename AsyncReadStream, typename Allocator,
+      typename RegEx, typename ReadHandler>
+  inline void* asio_handler_allocate(std::size_t size,
+      read_until_expr_op<AsyncReadStream,
+        Allocator, RegEx, ReadHandler>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename AsyncReadStream, typename Allocator,
+      typename RegEx, typename ReadHandler>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      read_until_expr_op<AsyncReadStream,
+        Allocator, RegEx, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename AsyncReadStream, typename Allocator,
+      typename RegEx, typename ReadHandler>
+  inline bool asio_handler_is_continuation(
+      read_until_expr_op<AsyncReadStream,
+        Allocator, RegEx, ReadHandler>* this_handler)
+  {
+    return this_handler->start_ == 0 ? true
+      : boost_asio_handler_cont_helpers::is_continuation(
+          this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncReadStream, typename Allocator,
+      typename RegEx, typename ReadHandler>
+  inline void asio_handler_invoke(Function& function,
+      read_until_expr_op<AsyncReadStream,
+        Allocator, RegEx, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncReadStream, typename Allocator,
+      typename RegEx, typename ReadHandler>
+  inline void asio_handler_invoke(const Function& function,
+      read_until_expr_op<AsyncReadStream,
+        Allocator, RegEx, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+} // namespace detail
+
+template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read_until(AsyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ReadHandler.
+  BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+  detail::async_result_init<
+    ReadHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+  detail::read_until_expr_op<AsyncReadStream, Allocator,
+    boost::regex, BOOST_ASIO_HANDLER_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))>(
+        s, b, expr, init.handler)(
+          boost::system::error_code(), 0, 1);
+
+  return init.result.get();
+}
+
+#endif // defined(BOOST_ASIO_HAS_BOOST_REGEX)
+
+namespace detail
+{
+  template <typename AsyncReadStream, typename Allocator,
+      typename MatchCondition, typename ReadHandler>
+  class read_until_match_op
+  {
+  public:
+    read_until_match_op(AsyncReadStream& stream,
+        boost::asio::basic_streambuf<Allocator>& streambuf,
+        MatchCondition match_condition, ReadHandler& handler)
+      : stream_(stream),
+        streambuf_(streambuf),
+        match_condition_(match_condition),
+        start_(0),
+        search_position_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    read_until_match_op(const read_until_match_op& other)
+      : stream_(other.stream_),
+        streambuf_(other.streambuf_),
+        match_condition_(other.match_condition_),
+        start_(other.start_),
+        search_position_(other.search_position_),
+        handler_(other.handler_)
+    {
+    }
+
+    read_until_match_op(read_until_match_op&& other)
+      : stream_(other.stream_),
+        streambuf_(other.streambuf_),
+        match_condition_(other.match_condition_),
+        start_(other.start_),
+        search_position_(other.search_position_),
+        handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      const std::size_t not_found = (std::numeric_limits<std::size_t>::max)();
+      std::size_t bytes_to_read;
+      switch (start_ = start)
+      {
+      case 1:
+        for (;;)
+        {
+          {
+            // Determine the range of the data to be searched.
+            typedef typename boost::asio::basic_streambuf<
+              Allocator>::const_buffers_type const_buffers_type;
+            typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
+            const_buffers_type buffers = streambuf_.data();
+            iterator begin = iterator::begin(buffers);
+            iterator start_pos = begin + search_position_;
+            iterator end = iterator::end(buffers);
+
+            // Look for a match.
+            std::pair<iterator, bool> result = match_condition_(start_pos, end);
+            if (result.second)
+            {
+              // Full match. We're done.
+              search_position_ = result.first - begin;
+              bytes_to_read = 0;
+            }
+
+            // No match yet. Check if buffer is full.
+            else if (streambuf_.size() == streambuf_.max_size())
+            {
+              search_position_ = not_found;
+              bytes_to_read = 0;
+            }
+
+            // Need to read some more data.
+            else
+            {
+              if (result.first != end)
+              {
+                // Partial match. Next search needs to start from beginning of
+                // match.
+                search_position_ = result.first - begin;
+              }
+              else
+              {
+                // Next search can start with the new data.
+                search_position_ = end - begin;
+              }
+
+              bytes_to_read = read_size_helper(streambuf_, 65536);
+            }
+          }
+
+          // Check if we're done.
+          if (!start && bytes_to_read == 0)
+            break;
+
+          // Start a new asynchronous read operation to obtain more data.
+          stream_.async_read_some(streambuf_.prepare(bytes_to_read),
+              BOOST_ASIO_MOVE_CAST(read_until_match_op)(*this));
+          return; default:
+          streambuf_.commit(bytes_transferred);
+          if (ec || bytes_transferred == 0)
+            break;
+        }
+
+        const boost::system::error_code result_ec =
+          (search_position_ == not_found)
+          ? error::not_found : ec;
+
+        const std::size_t result_n =
+          (ec || search_position_ == not_found)
+          ? 0 : search_position_;
+
+        handler_(result_ec, result_n);
+      }
+    }
+
+  //private:
+    AsyncReadStream& stream_;
+    boost::asio::basic_streambuf<Allocator>& streambuf_;
+    MatchCondition match_condition_;
+    int start_;
+    std::size_t search_position_;
+    ReadHandler handler_;
+  };
+
+  template <typename AsyncReadStream, typename Allocator,
+      typename MatchCondition, typename ReadHandler>
+  inline void* asio_handler_allocate(std::size_t size,
+      read_until_match_op<AsyncReadStream,
+        Allocator, MatchCondition, ReadHandler>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename AsyncReadStream, typename Allocator,
+      typename MatchCondition, typename ReadHandler>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      read_until_match_op<AsyncReadStream,
+        Allocator, MatchCondition, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename AsyncReadStream, typename Allocator,
+      typename MatchCondition, typename ReadHandler>
+  inline bool asio_handler_is_continuation(
+      read_until_match_op<AsyncReadStream,
+        Allocator, MatchCondition, ReadHandler>* this_handler)
+  {
+    return this_handler->start_ == 0 ? true
+      : boost_asio_handler_cont_helpers::is_continuation(
+          this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncReadStream, typename Allocator,
+      typename MatchCondition, typename ReadHandler>
+  inline void asio_handler_invoke(Function& function,
+      read_until_match_op<AsyncReadStream,
+        Allocator, MatchCondition, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncReadStream, typename Allocator,
+      typename MatchCondition, typename ReadHandler>
+  inline void asio_handler_invoke(const Function& function,
+      read_until_match_op<AsyncReadStream,
+        Allocator, MatchCondition, ReadHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+} // namespace detail
+
+template <typename AsyncReadStream, typename Allocator,
+    typename MatchCondition, typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read_until(AsyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b,
+    MatchCondition match_condition, BOOST_ASIO_MOVE_ARG(ReadHandler) handler,
+    typename enable_if<is_match_condition<MatchCondition>::value>::type*)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a ReadHandler.
+  BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+  detail::async_result_init<
+    ReadHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+  detail::read_until_match_op<AsyncReadStream, Allocator,
+    MatchCondition, BOOST_ASIO_HANDLER_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))>(
+        s, b, match_condition, init.handler)(
+          boost::system::error_code(), 0, 1);
+
+  return init.result.get();
+}
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IMPL_READ_UNTIL_HPP
diff --git a/ext/patches/boost/asio/impl/serial_port_base.hpp b/ext/patches/boost/asio/impl/serial_port_base.hpp
new file mode 100644
index 0000000..1fc7cb9
--- /dev/null
+++ b/ext/patches/boost/asio/impl/serial_port_base.hpp
@@ -0,0 +1,61 @@
+//
+// impl/serial_port_base.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2008 Rep Invariant Systems, Inc. (info at repinvariant.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IMPL_SERIAL_PORT_BASE_HPP
+#define BOOST_ASIO_IMPL_SERIAL_PORT_BASE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+inline serial_port_base::baud_rate::baud_rate(unsigned int rate)
+  : value_(rate)
+{
+}
+
+inline unsigned int serial_port_base::baud_rate::value() const
+{
+  return value_;
+}
+
+inline serial_port_base::flow_control::type
+serial_port_base::flow_control::value() const
+{
+  return value_;
+}
+
+inline serial_port_base::parity::type serial_port_base::parity::value() const
+{
+  return value_;
+}
+
+inline serial_port_base::stop_bits::type
+serial_port_base::stop_bits::value() const
+{
+  return value_;
+}
+
+inline unsigned int serial_port_base::character_size::value() const
+{
+  return value_;
+}
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IMPL_SERIAL_PORT_BASE_HPP
diff --git a/ext/patches/boost/asio/impl/serial_port_base.ipp b/ext/patches/boost/asio/impl/serial_port_base.ipp
new file mode 100644
index 0000000..c30601f
--- /dev/null
+++ b/ext/patches/boost/asio/impl/serial_port_base.ipp
@@ -0,0 +1,556 @@
+//
+// impl/serial_port_base.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2008 Rep Invariant Systems, Inc. (info at repinvariant.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IMPL_SERIAL_PORT_BASE_IPP
+#define BOOST_ASIO_IMPL_SERIAL_PORT_BASE_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_SERIAL_PORT)
+
+#include <stdexcept>
+#include <boost/asio/error.hpp>
+#include <boost/asio/serial_port_base.hpp>
+#include <boost/asio/detail/throw_exception.hpp>
+
+#if defined(GENERATING_DOCUMENTATION)
+# define BOOST_ASIO_OPTION_STORAGE implementation_defined
+#elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+# define BOOST_ASIO_OPTION_STORAGE DCB
+#else
+# define BOOST_ASIO_OPTION_STORAGE termios
+#endif
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+boost::system::error_code serial_port_base::baud_rate::store(
+    BOOST_ASIO_OPTION_STORAGE& storage, boost::system::error_code& ec) const
+{
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  storage.BaudRate = value_;
+#else
+  speed_t baud;
+  switch (value_)
+  {
+  // Do POSIX-specified rates first.
+  case 0: baud = B0; break;
+  case 50: baud = B50; break;
+  case 75: baud = B75; break;
+  case 110: baud = B110; break;
+  case 134: baud = B134; break;
+  case 150: baud = B150; break;
+  case 200: baud = B200; break;
+  case 300: baud = B300; break;
+  case 600: baud = B600; break;
+  case 1200: baud = B1200; break;
+  case 1800: baud = B1800; break;
+  case 2400: baud = B2400; break;
+  case 4800: baud = B4800; break;
+  case 9600: baud = B9600; break;
+  case 19200: baud = B19200; break;
+  case 38400: baud = B38400; break;
+  // And now the extended ones conditionally.
+# ifdef B7200
+  case 7200: baud = B7200; break;
+# endif
+# ifdef B14400
+  case 14400: baud = B14400; break;
+# endif
+# ifdef B57600
+  case 57600: baud = B57600; break;
+# endif
+# ifdef B115200
+  case 115200: baud = B115200; break;
+# endif
+# ifdef B230400
+  case 230400: baud = B230400; break;
+# endif
+# ifdef B460800
+  case 460800: baud = B460800; break;
+# endif
+# ifdef B500000
+  case 500000: baud = B500000; break;
+# endif
+# ifdef B576000
+  case 576000: baud = B576000; break;
+# endif
+# ifdef B921600
+  case 921600: baud = B921600; break;
+# endif
+# ifdef B1000000
+  case 1000000: baud = B1000000; break;
+# endif
+# ifdef B1152000
+  case 1152000: baud = B1152000; break;
+# endif
+# ifdef B2000000
+  case 2000000: baud = B2000000; break;
+# endif
+# ifdef B3000000
+  case 3000000: baud = B3000000; break;
+# endif
+# ifdef B3500000
+  case 3500000: baud = B3500000; break;
+# endif
+# ifdef B4000000
+  case 4000000: baud = B4000000; break;
+# endif
+  default:
+    ec = boost::asio::error::invalid_argument;
+    return ec;
+  }
+# if defined(_BSD_SOURCE)
+  ::cfsetspeed(&storage, baud);
+# else
+  ::cfsetispeed(&storage, baud);
+  ::cfsetospeed(&storage, baud);
+# endif
+#endif
+  ec = boost::system::error_code();
+  return ec;
+}
+
+boost::system::error_code serial_port_base::baud_rate::load(
+    const BOOST_ASIO_OPTION_STORAGE& storage, boost::system::error_code& ec)
+{
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  value_ = storage.BaudRate;
+#else
+  speed_t baud = ::cfgetospeed(&storage);
+  switch (baud)
+  {
+  // First do those specified by POSIX.
+  case B0: value_ = 0; break;
+  case B50: value_ = 50; break;
+  case B75: value_ = 75; break;
+  case B110: value_ = 110; break;
+  case B134: value_ = 134; break;
+  case B150: value_ = 150; break;
+  case B200: value_ = 200; break;
+  case B300: value_ = 300; break;
+  case B600: value_ = 600; break;
+  case B1200: value_ = 1200; break;
+  case B1800: value_ = 1800; break;
+  case B2400: value_ = 2400; break;
+  case B4800: value_ = 4800; break;
+  case B9600: value_ = 9600; break;
+  case B19200: value_ = 19200; break;
+  case B38400: value_ = 38400; break;
+  // Now conditionally handle a bunch of extended rates.
+# ifdef B7200
+  case B7200: value_ = 7200; break;
+# endif
+# ifdef B14400
+  case B14400: value_ = 14400; break;
+# endif
+# ifdef B57600
+  case B57600: value_ = 57600; break;
+# endif
+# ifdef B115200
+  case B115200: value_ = 115200; break;
+# endif
+# ifdef B230400
+  case B230400: value_ = 230400; break;
+# endif
+# ifdef B460800
+  case B460800: value_ = 460800; break;
+# endif
+# ifdef B500000
+  case B500000: value_ = 500000; break;
+# endif
+# ifdef B576000
+  case B576000: value_ = 576000; break;
+# endif
+# ifdef B921600
+  case B921600: value_ = 921600; break;
+# endif
+# ifdef B1000000
+  case B1000000: value_ = 1000000; break;
+# endif
+# ifdef B1152000
+  case B1152000: value_ = 1152000; break;
+# endif
+# ifdef B2000000
+  case B2000000: value_ = 2000000; break;
+# endif
+# ifdef B3000000
+  case B3000000: value_ = 3000000; break;
+# endif
+# ifdef B3500000
+  case B3500000: value_ = 3500000; break;
+# endif
+# ifdef B4000000
+  case B4000000: value_ = 4000000; break;
+# endif
+  default:
+    value_ = 0;
+    ec = boost::asio::error::invalid_argument;
+    return ec;
+  }
+#endif
+  ec = boost::system::error_code();
+  return ec;
+}
+
+serial_port_base::flow_control::flow_control(
+    serial_port_base::flow_control::type t)
+  : value_(t)
+{
+  if (t != none && t != software && t != hardware)
+  {
+    std::out_of_range ex("invalid flow_control value");
+    boost::asio::detail::throw_exception(ex);
+  }
+}
+
+boost::system::error_code serial_port_base::flow_control::store(
+    BOOST_ASIO_OPTION_STORAGE& storage, boost::system::error_code& ec) const
+{
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  storage.fOutxCtsFlow = FALSE;
+  storage.fOutxDsrFlow = FALSE;
+  storage.fTXContinueOnXoff = TRUE;
+  storage.fDtrControl = DTR_CONTROL_ENABLE;
+  storage.fDsrSensitivity = FALSE;
+  storage.fOutX = FALSE;
+  storage.fInX = FALSE;
+  storage.fRtsControl = RTS_CONTROL_ENABLE;
+  switch (value_)
+  {
+  case none:
+    break;
+  case software:
+    storage.fOutX = TRUE;
+    storage.fInX = TRUE;
+    break;
+  case hardware:
+    storage.fOutxCtsFlow = TRUE;
+    storage.fRtsControl = RTS_CONTROL_HANDSHAKE;
+    break;
+  default:
+    break;
+  }
+#else
+  switch (value_)
+  {
+  case none:
+    storage.c_iflag &= ~(IXOFF | IXON);
+# if defined(_BSD_SOURCE)
+    storage.c_cflag &= ~CRTSCTS;
+# elif defined(__QNXNTO__)
+    storage.c_cflag &= ~(IHFLOW | OHFLOW);
+# endif
+    break;
+  case software:
+    storage.c_iflag |= IXOFF | IXON;
+# if defined(_BSD_SOURCE)
+    storage.c_cflag &= ~CRTSCTS;
+# elif defined(__QNXNTO__)
+    storage.c_cflag &= ~(IHFLOW | OHFLOW);
+# endif
+    break;
+  case hardware:
+# if defined(_BSD_SOURCE)
+    storage.c_iflag &= ~(IXOFF | IXON);
+    storage.c_cflag |= CRTSCTS;
+    break;
+# elif defined(__QNXNTO__)
+    storage.c_iflag &= ~(IXOFF | IXON);
+    storage.c_cflag |= (IHFLOW | OHFLOW);
+    break;
+# else
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+# endif
+  default:
+    break;
+  }
+#endif
+  ec = boost::system::error_code();
+  return ec;
+}
+
+boost::system::error_code serial_port_base::flow_control::load(
+    const BOOST_ASIO_OPTION_STORAGE& storage, boost::system::error_code& ec)
+{
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  if (storage.fOutX && storage.fInX)
+  {
+    value_ = software;
+  }
+  else if (storage.fOutxCtsFlow && storage.fRtsControl == RTS_CONTROL_HANDSHAKE)
+  {
+    value_ = hardware;
+  }
+  else
+  {
+    value_ = none;
+  }
+#else
+  if (storage.c_iflag & (IXOFF | IXON))
+  {
+    value_ = software;
+  }
+# if defined(_BSD_SOURCE)
+  else if (storage.c_cflag & CRTSCTS)
+  {
+    value_ = hardware;
+  }
+# elif defined(__QNXNTO__)
+  else if (storage.c_cflag & IHFLOW && storage.c_cflag & OHFLOW)
+  {
+    value_ = hardware;
+  }
+# endif
+  else
+  {
+    value_ = none;
+  }
+#endif
+  ec = boost::system::error_code();
+  return ec;
+}
+
+serial_port_base::parity::parity(serial_port_base::parity::type t)
+  : value_(t)
+{
+  if (t != none && t != odd && t != even)
+  {
+    std::out_of_range ex("invalid parity value");
+    boost::asio::detail::throw_exception(ex);
+  }
+}
+
+boost::system::error_code serial_port_base::parity::store(
+    BOOST_ASIO_OPTION_STORAGE& storage, boost::system::error_code& ec) const
+{
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  switch (value_)
+  {
+  case none:
+    storage.fParity = FALSE;
+    storage.Parity = NOPARITY;
+    break;
+  case odd:
+    storage.fParity = TRUE;
+    storage.Parity = ODDPARITY;
+    break;
+  case even:
+    storage.fParity = TRUE;
+    storage.Parity = EVENPARITY;
+    break;
+  default:
+    break;
+  }
+#else
+  switch (value_)
+  {
+  case none:
+    storage.c_iflag |= IGNPAR;
+    storage.c_cflag &= ~(PARENB | PARODD);
+    break;
+  case even:
+    storage.c_iflag &= ~(IGNPAR | PARMRK);
+    storage.c_iflag |= INPCK;
+    storage.c_cflag |= PARENB;
+    storage.c_cflag &= ~PARODD;
+    break;
+  case odd:
+    storage.c_iflag &= ~(IGNPAR | PARMRK);
+    storage.c_iflag |= INPCK;
+    storage.c_cflag |= (PARENB | PARODD);
+    break;
+  default:
+    break;
+  }
+#endif
+  ec = boost::system::error_code();
+  return ec;
+}
+
+boost::system::error_code serial_port_base::parity::load(
+    const BOOST_ASIO_OPTION_STORAGE& storage, boost::system::error_code& ec)
+{
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  if (storage.Parity == EVENPARITY)
+  {
+    value_ = even;
+  }
+  else if (storage.Parity == ODDPARITY)
+  {
+    value_ = odd;
+  }
+  else
+  {
+    value_ = none;
+  }
+#else
+  if (storage.c_cflag & PARENB)
+  {
+    if (storage.c_cflag & PARODD)
+    {
+      value_ = odd;
+    }
+    else
+    {
+      value_ = even;
+    }
+  }
+  else
+  {
+    value_ = none;
+  }
+#endif
+  ec = boost::system::error_code();
+  return ec;
+}
+
+serial_port_base::stop_bits::stop_bits(
+    serial_port_base::stop_bits::type t)
+  : value_(t)
+{
+  if (t != one && t != onepointfive && t != two)
+  {
+    std::out_of_range ex("invalid stop_bits value");
+    boost::asio::detail::throw_exception(ex);
+  }
+}
+
+boost::system::error_code serial_port_base::stop_bits::store(
+    BOOST_ASIO_OPTION_STORAGE& storage, boost::system::error_code& ec) const
+{
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  switch (value_)
+  {
+  case one:
+    storage.StopBits = ONESTOPBIT;
+    break;
+  case onepointfive:
+    storage.StopBits = ONE5STOPBITS;
+    break;
+  case two:
+    storage.StopBits = TWOSTOPBITS;
+    break;
+  default:
+    break;
+  }
+#else
+  switch (value_)
+  {
+  case one:
+    storage.c_cflag &= ~CSTOPB;
+    break;
+  case two:
+    storage.c_cflag |= CSTOPB;
+    break;
+  default:
+    ec = boost::asio::error::operation_not_supported;
+    return ec;
+  }
+#endif
+  ec = boost::system::error_code();
+  return ec;
+}
+
+boost::system::error_code serial_port_base::stop_bits::load(
+    const BOOST_ASIO_OPTION_STORAGE& storage, boost::system::error_code& ec)
+{
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  if (storage.StopBits == ONESTOPBIT)
+  {
+    value_ = one;
+  }
+  else if (storage.StopBits == ONE5STOPBITS)
+  {
+    value_ = onepointfive;
+  }
+  else if (storage.StopBits == TWOSTOPBITS)
+  {
+    value_ = two;
+  }
+  else
+  {
+    value_ = one;
+  }
+#else
+  value_ = (storage.c_cflag & CSTOPB) ? two : one;
+#endif
+  ec = boost::system::error_code();
+  return ec;
+}
+
+serial_port_base::character_size::character_size(unsigned int t)
+  : value_(t)
+{
+  if (t < 5 || t > 8)
+  {
+    std::out_of_range ex("invalid character_size value");
+    boost::asio::detail::throw_exception(ex);
+  }
+}
+
+boost::system::error_code serial_port_base::character_size::store(
+    BOOST_ASIO_OPTION_STORAGE& storage, boost::system::error_code& ec) const
+{
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  storage.ByteSize = value_;
+#else
+  storage.c_cflag &= ~CSIZE;
+  switch (value_)
+  {
+  case 5: storage.c_cflag |= CS5; break;
+  case 6: storage.c_cflag |= CS6; break;
+  case 7: storage.c_cflag |= CS7; break;
+  case 8: storage.c_cflag |= CS8; break;
+  default: break;
+  }
+#endif
+  ec = boost::system::error_code();
+  return ec;
+}
+
+boost::system::error_code serial_port_base::character_size::load(
+    const BOOST_ASIO_OPTION_STORAGE& storage, boost::system::error_code& ec)
+{
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  value_ = storage.ByteSize;
+#else
+  if ((storage.c_cflag & CSIZE) == CS5) { value_ = 5; }
+  else if ((storage.c_cflag & CSIZE) == CS6) { value_ = 6; }
+  else if ((storage.c_cflag & CSIZE) == CS7) { value_ = 7; }
+  else if ((storage.c_cflag & CSIZE) == CS8) { value_ = 8; }
+  else
+  {
+    // Hmmm, use 8 for now.
+    value_ = 8;
+  }
+#endif
+  ec = boost::system::error_code();
+  return ec;
+}
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#undef BOOST_ASIO_OPTION_STORAGE
+
+#endif // defined(BOOST_ASIO_HAS_SERIAL_PORT)
+
+#endif // BOOST_ASIO_IMPL_SERIAL_PORT_BASE_IPP
diff --git a/ext/patches/boost/asio/impl/spawn.hpp b/ext/patches/boost/asio/impl/spawn.hpp
new file mode 100644
index 0000000..dc3647d
--- /dev/null
+++ b/ext/patches/boost/asio/impl/spawn.hpp
@@ -0,0 +1,338 @@
+//
+// impl/spawn.hpp
+// ~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IMPL_SPAWN_HPP
+#define BOOST_ASIO_IMPL_SPAWN_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_cont_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/shared_ptr.hpp>
+#include <boost/asio/handler_type.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+  template <typename Handler, typename T>
+  class coro_handler
+  {
+  public:
+    coro_handler(basic_yield_context<Handler> ctx)
+      : coro_(ctx.coro_.lock()),
+        ca_(ctx.ca_),
+        handler_(ctx.handler_),
+        ec_(ctx.ec_),
+        value_(0)
+    {
+    }
+
+    void operator()(T value)
+    {
+      *ec_ = boost::system::error_code();
+      *value_ = value;
+      (*coro_)();
+    }
+
+    void operator()(boost::system::error_code ec, T value)
+    {
+      *ec_ = ec;
+      *value_ = value;
+      (*coro_)();
+    }
+
+  //private:
+    shared_ptr<typename basic_yield_context<Handler>::callee_type> coro_;
+    typename basic_yield_context<Handler>::caller_type& ca_;
+    Handler& handler_;
+    boost::system::error_code* ec_;
+    T* value_;
+  };
+
+  template <typename Handler>
+  class coro_handler<Handler, void>
+  {
+  public:
+    coro_handler(basic_yield_context<Handler> ctx)
+      : coro_(ctx.coro_.lock()),
+        ca_(ctx.ca_),
+        handler_(ctx.handler_),
+        ec_(ctx.ec_)
+    {
+    }
+
+    void operator()()
+    {
+      *ec_ = boost::system::error_code();
+      (*coro_)();
+    }
+
+    void operator()(boost::system::error_code ec)
+    {
+      *ec_ = ec;
+      (*coro_)();
+    }
+
+  //private:
+    shared_ptr<typename basic_yield_context<Handler>::callee_type> coro_;
+    typename basic_yield_context<Handler>::caller_type& ca_;
+    Handler& handler_;
+    boost::system::error_code* ec_;
+  };
+
+  template <typename Handler, typename T>
+  inline void* asio_handler_allocate(std::size_t size,
+      coro_handler<Handler, T>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename Handler, typename T>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      coro_handler<Handler, T>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename Handler, typename T>
+  inline bool asio_handler_is_continuation(coro_handler<Handler, T>*)
+  {
+    return true;
+  }
+
+  template <typename Function, typename Handler, typename T>
+  inline void asio_handler_invoke(Function& function,
+      coro_handler<Handler, T>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename Handler, typename T>
+  inline void asio_handler_invoke(const Function& function,
+      coro_handler<Handler, T>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+} // namespace detail
+
+#if !defined(GENERATING_DOCUMENTATION)
+
+template <typename Handler, typename ReturnType>
+struct handler_type<basic_yield_context<Handler>, ReturnType()>
+{
+  typedef detail::coro_handler<Handler, void> type;
+};
+
+template <typename Handler, typename ReturnType, typename Arg1>
+struct handler_type<basic_yield_context<Handler>, ReturnType(Arg1)>
+{
+  typedef detail::coro_handler<Handler, Arg1> type;
+};
+
+template <typename Handler, typename ReturnType>
+struct handler_type<basic_yield_context<Handler>,
+    ReturnType(boost::system::error_code)>
+{
+  typedef detail::coro_handler<Handler, void> type;
+};
+
+template <typename Handler, typename ReturnType, typename Arg2>
+struct handler_type<basic_yield_context<Handler>,
+    ReturnType(boost::system::error_code, Arg2)>
+{
+  typedef detail::coro_handler<Handler, Arg2> type;
+};
+
+template <typename Handler, typename T>
+class async_result<detail::coro_handler<Handler, T> >
+{
+public:
+  typedef T type;
+
+  explicit async_result(detail::coro_handler<Handler, T>& h)
+    : handler_(h),
+      ca_(h.ca_)
+  {
+    out_ec_ = h.ec_;
+    if (!out_ec_) h.ec_ = &ec_;
+    h.value_ = &value_;
+  }
+
+  type get()
+  {
+    handler_.coro_.reset(); // Must not hold shared_ptr to coro while suspended.
+    ca_();
+    if (!out_ec_ && ec_) throw boost::system::system_error(ec_);
+    return value_;
+  }
+
+private:
+  detail::coro_handler<Handler, T>& handler_;
+  typename basic_yield_context<Handler>::caller_type& ca_;
+  boost::system::error_code* out_ec_;
+  boost::system::error_code ec_;
+  type value_;
+};
+
+template <typename Handler>
+class async_result<detail::coro_handler<Handler, void> >
+{
+public:
+  typedef void type;
+
+  explicit async_result(detail::coro_handler<Handler, void>& h)
+    : handler_(h),
+      ca_(h.ca_)
+  {
+    out_ec_ = h.ec_;
+    if (!out_ec_) h.ec_ = &ec_;
+  }
+
+  void get()
+  {
+    handler_.coro_.reset(); // Must not hold shared_ptr to coro while suspended.
+    ca_();
+    if (!out_ec_ && ec_) throw boost::system::system_error(ec_);
+  }
+
+private:
+  detail::coro_handler<Handler, void>& handler_;
+  typename basic_yield_context<Handler>::caller_type& ca_;
+  boost::system::error_code* out_ec_;
+  boost::system::error_code ec_;
+};
+
+namespace detail {
+
+  template <typename Handler, typename Function>
+  struct spawn_data : private noncopyable
+  {
+    spawn_data(BOOST_ASIO_MOVE_ARG(Handler) handler,
+        bool call_handler, BOOST_ASIO_MOVE_ARG(Function) function)
+      : handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler)),
+        call_handler_(call_handler),
+        function_(BOOST_ASIO_MOVE_CAST(Function)(function))
+    {
+    }
+
+    weak_ptr<typename basic_yield_context<Handler>::callee_type> coro_;
+    Handler handler_;
+    bool call_handler_;
+    Function function_;
+  };
+
+  template <typename Handler, typename Function>
+  struct coro_entry_point
+  {
+    void operator()(typename basic_yield_context<Handler>::caller_type& ca)
+    {
+      shared_ptr<spawn_data<Handler, Function> > data(data_);
+#if !defined(BOOST_COROUTINES_UNIDIRECT) && !defined(BOOST_COROUTINES_V2)
+      ca(); // Yield until coroutine pointer has been initialised.
+#endif // !defined(BOOST_COROUTINES_UNIDIRECT) && !defined(BOOST_COROUTINES_V2)
+      const basic_yield_context<Handler> yield(
+          data->coro_, ca, data->handler_);
+      (data->function_)(yield);
+      if (data->call_handler_)
+        (data->handler_)();
+    }
+
+    shared_ptr<spawn_data<Handler, Function> > data_;
+  };
+
+  template <typename Handler, typename Function>
+  struct spawn_helper
+  {
+    void operator()()
+    {
+      typedef typename basic_yield_context<Handler>::callee_type callee_type;
+      coro_entry_point<Handler, Function> entry_point = { data_ };
+      shared_ptr<callee_type> coro(new callee_type(entry_point, attributes_));
+      data_->coro_ = coro;
+      (*coro)();
+    }
+
+    shared_ptr<spawn_data<Handler, Function> > data_;
+    boost::coroutines::attributes attributes_;
+  };
+
+  inline void default_spawn_handler() {}
+
+} // namespace detail
+
+template <typename Handler, typename Function>
+void spawn(BOOST_ASIO_MOVE_ARG(Handler) handler,
+    BOOST_ASIO_MOVE_ARG(Function) function,
+    const boost::coroutines::attributes& attributes)
+{
+  detail::spawn_helper<Handler, Function> helper;
+  helper.data_.reset(
+      new detail::spawn_data<Handler, Function>(
+        BOOST_ASIO_MOVE_CAST(Handler)(handler), true,
+        BOOST_ASIO_MOVE_CAST(Function)(function)));
+  helper.attributes_ = attributes;
+  boost_asio_handler_invoke_helpers::invoke(helper, helper.data_->handler_);
+}
+
+template <typename Handler, typename Function>
+void spawn(basic_yield_context<Handler> ctx,
+    BOOST_ASIO_MOVE_ARG(Function) function,
+    const boost::coroutines::attributes& attributes)
+{
+  Handler handler(ctx.handler_); // Explicit copy that might be moved from.
+  detail::spawn_helper<Handler, Function> helper;
+  helper.data_.reset(
+      new detail::spawn_data<Handler, Function>(
+        BOOST_ASIO_MOVE_CAST(Handler)(handler), false,
+        BOOST_ASIO_MOVE_CAST(Function)(function)));
+  helper.attributes_ = attributes;
+  boost_asio_handler_invoke_helpers::invoke(helper, helper.data_->handler_);
+}
+
+template <typename Function>
+void spawn(boost::asio::io_service::strand strand,
+    BOOST_ASIO_MOVE_ARG(Function) function,
+    const boost::coroutines::attributes& attributes)
+{
+  boost::asio::spawn(strand.wrap(&detail::default_spawn_handler),
+      BOOST_ASIO_MOVE_CAST(Function)(function), attributes);
+}
+
+template <typename Function>
+void spawn(boost::asio::io_service& io_service,
+    BOOST_ASIO_MOVE_ARG(Function) function,
+    const boost::coroutines::attributes& attributes)
+{
+  boost::asio::spawn(boost::asio::io_service::strand(io_service),
+      BOOST_ASIO_MOVE_CAST(Function)(function), attributes);
+}
+
+#endif // !defined(GENERATING_DOCUMENTATION)
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IMPL_SPAWN_HPP
diff --git a/ext/patches/boost/asio/impl/src.cpp b/ext/patches/boost/asio/impl/src.cpp
new file mode 100644
index 0000000..c326ae8
--- /dev/null
+++ b/ext/patches/boost/asio/impl/src.cpp
@@ -0,0 +1,25 @@
+//
+// impl/src.cpp
+// ~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#if defined(_MSC_VER) \
+  || defined(__BORLANDC__) \
+  || defined(__DMC__)
+# pragma message ( \
+    "This file is deprecated. " \
+    "Please #include <boost/asio/impl/src.hpp> instead.")
+#elif defined(__GNUC__) \
+  || defined(__HP_aCC) \
+  || defined(__SUNPRO_CC) \
+  || defined(__IBMCPP__)
+# warning "This file is deprecated."
+# warning "Please #include <boost/asio/impl/src.hpp> instead."
+#endif
+
+#include <boost/asio/impl/src.hpp>
diff --git a/ext/patches/boost/asio/impl/src.hpp b/ext/patches/boost/asio/impl/src.hpp
new file mode 100644
index 0000000..dda5766
--- /dev/null
+++ b/ext/patches/boost/asio/impl/src.hpp
@@ -0,0 +1,73 @@
+//
+// impl/src.hpp
+// ~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IMPL_SRC_HPP
+#define BOOST_ASIO_IMPL_SRC_HPP
+
+#define BOOST_ASIO_SOURCE
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# error Do not compile Asio library source with BOOST_ASIO_HEADER_ONLY defined
+#endif
+
+#include <boost/asio/impl/error.ipp>
+#include <boost/asio/impl/handler_alloc_hook.ipp>
+#include <boost/asio/impl/io_service.ipp>
+#include <boost/asio/impl/serial_port_base.ipp>
+#include <boost/asio/detail/impl/buffer_sequence_adapter.ipp>
+#include <boost/asio/detail/impl/descriptor_ops.ipp>
+#include <boost/asio/detail/impl/dev_poll_reactor.ipp>
+#include <boost/asio/detail/impl/epoll_reactor.ipp>
+#include <boost/asio/detail/impl/eventfd_select_interrupter.ipp>
+#include <boost/asio/detail/impl/handler_tracking.ipp>
+#include <boost/asio/detail/impl/kqueue_reactor.ipp>
+#include <boost/asio/detail/impl/pipe_select_interrupter.ipp>
+#include <boost/asio/detail/impl/posix_event.ipp>
+#include <boost/asio/detail/impl/posix_mutex.ipp>
+#include <boost/asio/detail/impl/posix_thread.ipp>
+#include <boost/asio/detail/impl/posix_tss_ptr.ipp>
+#include <boost/asio/detail/impl/reactive_descriptor_service.ipp>
+#include <boost/asio/detail/impl/reactive_serial_port_service.ipp>
+#include <boost/asio/detail/impl/reactive_socket_service_base.ipp>
+#include <boost/asio/detail/impl/resolver_service_base.ipp>
+#include <boost/asio/detail/impl/select_reactor.ipp>
+#include <boost/asio/detail/impl/service_registry.ipp>
+#include <boost/asio/detail/impl/signal_set_service.ipp>
+#include <boost/asio/detail/impl/socket_ops.ipp>
+#include <boost/asio/detail/impl/socket_select_interrupter.ipp>
+#include <boost/asio/detail/impl/strand_service.ipp>
+#include <boost/asio/detail/impl/task_io_service.ipp>
+#include <boost/asio/detail/impl/throw_error.ipp>
+#include <boost/asio/detail/impl/timer_queue_ptime.ipp>
+#include <boost/asio/detail/impl/timer_queue_set.ipp>
+#include <boost/asio/detail/impl/win_iocp_handle_service.ipp>
+#include <boost/asio/detail/impl/win_iocp_io_service.ipp>
+#include <boost/asio/detail/impl/win_iocp_serial_port_service.ipp>
+#include <boost/asio/detail/impl/win_iocp_socket_service_base.ipp>
+#include <boost/asio/detail/impl/win_event.ipp>
+#include <boost/asio/detail/impl/win_mutex.ipp>
+#include <boost/asio/detail/impl/win_object_handle_service.ipp>
+#include <boost/asio/detail/impl/win_static_mutex.ipp>
+#include <boost/asio/detail/impl/win_thread.ipp>
+#include <boost/asio/detail/impl/win_tss_ptr.ipp>
+#include <boost/asio/detail/impl/winrt_ssocket_service_base.ipp>
+#include <boost/asio/detail/impl/winrt_timer_scheduler.ipp>
+#include <boost/asio/detail/impl/winsock_init.ipp>
+#include <boost/asio/generic/detail/impl/endpoint.ipp>
+#include <boost/asio/ip/impl/address.ipp>
+#include <boost/asio/ip/impl/address_v4.ipp>
+#include <boost/asio/ip/impl/address_v6.ipp>
+#include <boost/asio/ip/impl/host_name.ipp>
+#include <boost/asio/ip/detail/impl/endpoint.ipp>
+#include <boost/asio/local/detail/impl/endpoint.ipp>
+
+#endif // BOOST_ASIO_IMPL_SRC_HPP
diff --git a/ext/patches/boost/asio/impl/use_future.hpp b/ext/patches/boost/asio/impl/use_future.hpp
new file mode 100644
index 0000000..02368a7
--- /dev/null
+++ b/ext/patches/boost/asio/impl/use_future.hpp
@@ -0,0 +1,174 @@
+//
+// impl/use_future.hpp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IMPL_USE_FUTURE_HPP
+#define BOOST_ASIO_IMPL_USE_FUTURE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <future>
+#include <boost/asio/async_result.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/asio/handler_type.hpp>
+#include <boost/system/system_error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+  // Completion handler to adapt a promise as a completion handler.
+  template <typename T>
+  class promise_handler
+  {
+  public:
+    // Construct from use_future special value.
+    template <typename Allocator>
+    promise_handler(use_future_t<Allocator> uf)
+      : promise_(std::allocate_shared<std::promise<T> >(
+            uf.get_allocator(), std::allocator_arg, uf.get_allocator()))
+    {
+    }
+
+    void operator()(T t)
+    {
+      promise_->set_value(t);
+    }
+
+    void operator()(const boost::system::error_code& ec, T t)
+    {
+      if (ec)
+        promise_->set_exception(
+            std::make_exception_ptr(
+              boost::system::system_error(ec)));
+      else
+        promise_->set_value(t);
+    }
+
+  //private:
+    std::shared_ptr<std::promise<T> > promise_;
+  };
+
+  // Completion handler to adapt a void promise as a completion handler.
+  template <>
+  class promise_handler<void>
+  {
+  public:
+    // Construct from use_future special value. Used during rebinding.
+    template <typename Allocator>
+    promise_handler(use_future_t<Allocator> uf)
+      : promise_(std::allocate_shared<std::promise<void> >(
+            uf.get_allocator(), std::allocator_arg, uf.get_allocator()))
+    {
+    }
+
+    void operator()()
+    {
+      promise_->set_value();
+    }
+
+    void operator()(const boost::system::error_code& ec)
+    {
+      if (ec)
+        promise_->set_exception(
+            std::make_exception_ptr(
+              boost::system::system_error(ec)));
+      else
+        promise_->set_value();
+    }
+
+  //private:
+    std::shared_ptr<std::promise<void> > promise_;
+  };
+
+  // Ensure any exceptions thrown from the handler are propagated back to the
+  // caller via the future.
+  template <typename Function, typename T>
+  void asio_handler_invoke(Function f, promise_handler<T>* h)
+  {
+    std::shared_ptr<std::promise<T> > p(h->promise_);
+    try
+    {
+      f();
+    }
+    catch (...)
+    {
+      p->set_exception(std::current_exception());
+    }
+  }
+
+} // namespace detail
+
+#if !defined(GENERATING_DOCUMENTATION)
+
+// Handler traits specialisation for promise_handler.
+template <typename T>
+class async_result<detail::promise_handler<T> >
+{
+public:
+  // The initiating function will return a future.
+  typedef std::future<T> type;
+
+  // Constructor creates a new promise for the async operation, and obtains the
+  // corresponding future.
+  explicit async_result(detail::promise_handler<T>& h)
+  {
+    value_ = h.promise_->get_future();
+  }
+
+  // Obtain the future to be returned from the initiating function.
+  type get() { return std::move(value_); }
+
+private:
+  type value_;
+};
+
+// Handler type specialisation for use_future.
+template <typename Allocator, typename ReturnType>
+struct handler_type<use_future_t<Allocator>, ReturnType()>
+{
+  typedef detail::promise_handler<void> type;
+};
+
+// Handler type specialisation for use_future.
+template <typename Allocator, typename ReturnType, typename Arg1>
+struct handler_type<use_future_t<Allocator>, ReturnType(Arg1)>
+{
+  typedef detail::promise_handler<Arg1> type;
+};
+
+// Handler type specialisation for use_future.
+template <typename Allocator, typename ReturnType>
+struct handler_type<use_future_t<Allocator>,
+    ReturnType(boost::system::error_code)>
+{
+  typedef detail::promise_handler<void> type;
+};
+
+// Handler type specialisation for use_future.
+template <typename Allocator, typename ReturnType, typename Arg2>
+struct handler_type<use_future_t<Allocator>,
+    ReturnType(boost::system::error_code, Arg2)>
+{
+  typedef detail::promise_handler<Arg2> type;
+};
+
+#endif // !defined(GENERATING_DOCUMENTATION)
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IMPL_USE_FUTURE_HPP
diff --git a/ext/patches/boost/asio/impl/write.hpp b/ext/patches/boost/asio/impl/write.hpp
new file mode 100644
index 0000000..5ef8b41
--- /dev/null
+++ b/ext/patches/boost/asio/impl/write.hpp
@@ -0,0 +1,767 @@
+//
+// impl/write.hpp
+// ~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IMPL_WRITE_HPP
+#define BOOST_ASIO_IMPL_WRITE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/completion_condition.hpp>
+#include <boost/asio/detail/array_fwd.hpp>
+#include <boost/asio/detail/base_from_completion_cond.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/consuming_buffers.hpp>
+#include <boost/asio/detail/dependent_type.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_cont_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+template <typename SyncWriteStream, typename ConstBufferSequence,
+    typename CompletionCondition>
+std::size_t write(SyncWriteStream& s, const ConstBufferSequence& buffers,
+    CompletionCondition completion_condition, boost::system::error_code& ec)
+{
+  ec = boost::system::error_code();
+  boost::asio::detail::consuming_buffers<
+    const_buffer, ConstBufferSequence> tmp(buffers);
+  std::size_t total_transferred = 0;
+  tmp.prepare(detail::adapt_completion_condition_result(
+        completion_condition(ec, total_transferred)));
+  while (tmp.begin() != tmp.end())
+  {
+    std::size_t bytes_transferred = s.write_some(tmp, ec);
+    tmp.consume(bytes_transferred);
+    total_transferred += bytes_transferred;
+    tmp.prepare(detail::adapt_completion_condition_result(
+          completion_condition(ec, total_transferred)));
+  }
+  return total_transferred;
+}
+
+template <typename SyncWriteStream, typename ConstBufferSequence>
+inline std::size_t write(SyncWriteStream& s, const ConstBufferSequence& buffers)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = write(s, buffers, transfer_all(), ec);
+  boost::asio::detail::throw_error(ec, "write");
+  return bytes_transferred;
+}
+
+template <typename SyncWriteStream, typename ConstBufferSequence>
+inline std::size_t write(SyncWriteStream& s, const ConstBufferSequence& buffers,
+    boost::system::error_code& ec)
+{
+  return write(s, buffers, transfer_all(), ec);
+}
+
+template <typename SyncWriteStream, typename ConstBufferSequence,
+    typename CompletionCondition>
+inline std::size_t write(SyncWriteStream& s, const ConstBufferSequence& buffers,
+    CompletionCondition completion_condition)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = write(s, buffers, completion_condition, ec);
+  boost::asio::detail::throw_error(ec, "write");
+  return bytes_transferred;
+}
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+template <typename SyncWriteStream, typename Allocator,
+    typename CompletionCondition>
+std::size_t write(SyncWriteStream& s,
+    boost::asio::basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition, boost::system::error_code& ec)
+{
+  std::size_t bytes_transferred = write(s, b.data(), completion_condition, ec);
+  b.consume(bytes_transferred);
+  return bytes_transferred;
+}
+
+template <typename SyncWriteStream, typename Allocator>
+inline std::size_t write(SyncWriteStream& s,
+    boost::asio::basic_streambuf<Allocator>& b)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = write(s, b, transfer_all(), ec);
+  boost::asio::detail::throw_error(ec, "write");
+  return bytes_transferred;
+}
+
+template <typename SyncWriteStream, typename Allocator>
+inline std::size_t write(SyncWriteStream& s,
+    boost::asio::basic_streambuf<Allocator>& b,
+    boost::system::error_code& ec)
+{
+  return write(s, b, transfer_all(), ec);
+}
+
+template <typename SyncWriteStream, typename Allocator,
+    typename CompletionCondition>
+inline std::size_t write(SyncWriteStream& s,
+    boost::asio::basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = write(s, b, completion_condition, ec);
+  boost::asio::detail::throw_error(ec, "write");
+  return bytes_transferred;
+}
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+namespace detail
+{
+  template <typename AsyncWriteStream, typename ConstBufferSequence,
+      typename CompletionCondition, typename WriteHandler>
+  class write_op
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    write_op(AsyncWriteStream& stream, const ConstBufferSequence& buffers,
+        CompletionCondition completion_condition, WriteHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        stream_(stream),
+        buffers_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    write_op(const write_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    write_op(write_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      switch (start_ = start)
+      {
+        case 1:
+        buffers_.prepare(this->check_for_completion(ec, total_transferred_));
+        for (;;)
+        {
+          stream_.async_write_some(buffers_,
+              BOOST_ASIO_MOVE_CAST(write_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          buffers_.consume(bytes_transferred);
+          buffers_.prepare(this->check_for_completion(ec, total_transferred_));
+          if ((!ec && bytes_transferred == 0)
+              || buffers_.begin() == buffers_.end())
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncWriteStream& stream_;
+    boost::asio::detail::consuming_buffers<
+      const_buffer, ConstBufferSequence> buffers_;
+    int start_;
+    std::size_t total_transferred_;
+    WriteHandler handler_;
+  };
+
+  template <typename AsyncWriteStream,
+      typename CompletionCondition, typename WriteHandler>
+  class write_op<AsyncWriteStream, boost::asio::mutable_buffers_1,
+      CompletionCondition, WriteHandler>
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    write_op(AsyncWriteStream& stream,
+        const boost::asio::mutable_buffers_1& buffers,
+        CompletionCondition completion_condition,
+        WriteHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        stream_(stream),
+        buffer_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    write_op(const write_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffer_(other.buffer_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    write_op(write_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffer_(other.buffer_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      std::size_t n = 0;
+      switch (start_ = start)
+      {
+        case 1:
+        n = this->check_for_completion(ec, total_transferred_);
+        for (;;)
+        {
+          stream_.async_write_some(
+              boost::asio::buffer(buffer_ + total_transferred_, n),
+              BOOST_ASIO_MOVE_CAST(write_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          if ((!ec && bytes_transferred == 0)
+              || (n = this->check_for_completion(ec, total_transferred_)) == 0
+              || total_transferred_ == boost::asio::buffer_size(buffer_))
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncWriteStream& stream_;
+    boost::asio::mutable_buffer buffer_;
+    int start_;
+    std::size_t total_transferred_;
+    WriteHandler handler_;
+  };
+
+  template <typename AsyncWriteStream,
+      typename CompletionCondition, typename WriteHandler>
+  class write_op<AsyncWriteStream, boost::asio::const_buffers_1,
+      CompletionCondition, WriteHandler>
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    write_op(AsyncWriteStream& stream,
+        const boost::asio::const_buffers_1& buffers,
+        CompletionCondition completion_condition,
+        WriteHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        stream_(stream),
+        buffer_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    write_op(const write_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffer_(other.buffer_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    write_op(write_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffer_(other.buffer_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      std::size_t n = 0;
+      switch (start_ = start)
+      {
+        case 1:
+        n = this->check_for_completion(ec, total_transferred_);
+        for (;;)
+        {
+          stream_.async_write_some(
+              boost::asio::buffer(buffer_ + total_transferred_, n),
+              BOOST_ASIO_MOVE_CAST(write_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          if ((!ec && bytes_transferred == 0)
+              || (n = this->check_for_completion(ec, total_transferred_)) == 0
+              || total_transferred_ == boost::asio::buffer_size(buffer_))
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncWriteStream& stream_;
+    boost::asio::const_buffer buffer_;
+    int start_;
+    std::size_t total_transferred_;
+    WriteHandler handler_;
+  };
+
+  template <typename AsyncWriteStream, typename Elem,
+      typename CompletionCondition, typename WriteHandler>
+  class write_op<AsyncWriteStream, boost::array<Elem, 2>,
+      CompletionCondition, WriteHandler>
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    write_op(AsyncWriteStream& stream, const boost::array<Elem, 2>& buffers,
+        CompletionCondition completion_condition, WriteHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        stream_(stream),
+        buffers_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    write_op(const write_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    write_op(write_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      typename boost::asio::detail::dependent_type<Elem,
+          boost::array<boost::asio::const_buffer, 2> >::type bufs = {{
+        boost::asio::const_buffer(buffers_[0]),
+        boost::asio::const_buffer(buffers_[1]) }};
+      std::size_t buffer_size0 = boost::asio::buffer_size(bufs[0]);
+      std::size_t buffer_size1 = boost::asio::buffer_size(bufs[1]);
+      std::size_t n = 0;
+      switch (start_ = start)
+      {
+        case 1:
+        n = this->check_for_completion(ec, total_transferred_);
+        for (;;)
+        {
+          bufs[0] = boost::asio::buffer(bufs[0] + total_transferred_, n);
+          bufs[1] = boost::asio::buffer(
+              bufs[1] + (total_transferred_ < buffer_size0
+                ? 0 : total_transferred_ - buffer_size0),
+              n - boost::asio::buffer_size(bufs[0]));
+          stream_.async_write_some(bufs, BOOST_ASIO_MOVE_CAST(write_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          if ((!ec && bytes_transferred == 0)
+              || (n = this->check_for_completion(ec, total_transferred_)) == 0
+              || total_transferred_ == buffer_size0 + buffer_size1)
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncWriteStream& stream_;
+    boost::array<Elem, 2> buffers_;
+    int start_;
+    std::size_t total_transferred_;
+    WriteHandler handler_;
+  };
+
+#if defined(BOOST_ASIO_HAS_STD_ARRAY)
+
+  template <typename AsyncWriteStream, typename Elem,
+      typename CompletionCondition, typename WriteHandler>
+  class write_op<AsyncWriteStream, std::array<Elem, 2>,
+      CompletionCondition, WriteHandler>
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    write_op(AsyncWriteStream& stream, const std::array<Elem, 2>& buffers,
+        CompletionCondition completion_condition, WriteHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        stream_(stream),
+        buffers_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    write_op(const write_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    write_op(write_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        stream_(other.stream_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      typename boost::asio::detail::dependent_type<Elem,
+          std::array<boost::asio::const_buffer, 2> >::type bufs = {{
+        boost::asio::const_buffer(buffers_[0]),
+        boost::asio::const_buffer(buffers_[1]) }};
+      std::size_t buffer_size0 = boost::asio::buffer_size(bufs[0]);
+      std::size_t buffer_size1 = boost::asio::buffer_size(bufs[1]);
+      std::size_t n = 0;
+      switch (start_ = start)
+      {
+        case 1:
+        n = this->check_for_completion(ec, total_transferred_);
+        for (;;)
+        {
+          bufs[0] = boost::asio::buffer(bufs[0] + total_transferred_, n);
+          bufs[1] = boost::asio::buffer(
+              bufs[1] + (total_transferred_ < buffer_size0
+                ? 0 : total_transferred_ - buffer_size0),
+              n - boost::asio::buffer_size(bufs[0]));
+          stream_.async_write_some(bufs, BOOST_ASIO_MOVE_CAST(write_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          if ((!ec && bytes_transferred == 0)
+              || (n = this->check_for_completion(ec, total_transferred_)) == 0
+              || total_transferred_ == buffer_size0 + buffer_size1)
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncWriteStream& stream_;
+    std::array<Elem, 2> buffers_;
+    int start_;
+    std::size_t total_transferred_;
+    WriteHandler handler_;
+  };
+
+#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
+
+  template <typename AsyncWriteStream, typename ConstBufferSequence,
+      typename CompletionCondition, typename WriteHandler>
+  inline void* asio_handler_allocate(std::size_t size,
+      write_op<AsyncWriteStream, ConstBufferSequence,
+        CompletionCondition, WriteHandler>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename AsyncWriteStream, typename ConstBufferSequence,
+      typename CompletionCondition, typename WriteHandler>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      write_op<AsyncWriteStream, ConstBufferSequence,
+        CompletionCondition, WriteHandler>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename AsyncWriteStream, typename ConstBufferSequence,
+      typename CompletionCondition, typename WriteHandler>
+  inline bool asio_handler_is_continuation(
+      write_op<AsyncWriteStream, ConstBufferSequence,
+        CompletionCondition, WriteHandler>* this_handler)
+  {
+    return this_handler->start_ == 0 ? true
+      : boost_asio_handler_cont_helpers::is_continuation(
+          this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncWriteStream,
+      typename ConstBufferSequence, typename CompletionCondition,
+      typename WriteHandler>
+  inline void asio_handler_invoke(Function& function,
+      write_op<AsyncWriteStream, ConstBufferSequence,
+        CompletionCondition, WriteHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncWriteStream,
+      typename ConstBufferSequence, typename CompletionCondition,
+      typename WriteHandler>
+  inline void asio_handler_invoke(const Function& function,
+      write_op<AsyncWriteStream, ConstBufferSequence,
+        CompletionCondition, WriteHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+} // namespace detail
+
+template <typename AsyncWriteStream, typename ConstBufferSequence,
+  typename CompletionCondition, typename WriteHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+async_write(AsyncWriteStream& s, const ConstBufferSequence& buffers,
+    CompletionCondition completion_condition,
+    BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a WriteHandler.
+  BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+  detail::async_result_init<
+    WriteHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+  detail::write_op<AsyncWriteStream, ConstBufferSequence,
+    CompletionCondition, BOOST_ASIO_HANDLER_TYPE(
+      WriteHandler, void (boost::system::error_code, std::size_t))>(
+        s, buffers, completion_condition, init.handler)(
+          boost::system::error_code(), 0, 1);
+
+  return init.result.get();
+}
+
+template <typename AsyncWriteStream, typename ConstBufferSequence,
+    typename WriteHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+async_write(AsyncWriteStream& s, const ConstBufferSequence& buffers,
+    BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a WriteHandler.
+  BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+  detail::async_result_init<
+    WriteHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+  detail::write_op<AsyncWriteStream, ConstBufferSequence,
+    detail::transfer_all_t, BOOST_ASIO_HANDLER_TYPE(
+      WriteHandler, void (boost::system::error_code, std::size_t))>(
+        s, buffers, transfer_all(), init.handler)(
+          boost::system::error_code(), 0, 1);
+
+  return init.result.get();
+}
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+namespace detail
+{
+  template <typename Allocator, typename WriteHandler>
+  class write_streambuf_handler
+  {
+  public:
+    write_streambuf_handler(boost::asio::basic_streambuf<Allocator>& streambuf,
+        WriteHandler& handler)
+      : streambuf_(streambuf),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    write_streambuf_handler(const write_streambuf_handler& other)
+      : streambuf_(other.streambuf_),
+        handler_(other.handler_)
+    {
+    }
+
+    write_streambuf_handler(write_streambuf_handler&& other)
+      : streambuf_(other.streambuf_),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        const std::size_t bytes_transferred)
+    {
+      streambuf_.consume(bytes_transferred);
+      handler_(ec, bytes_transferred);
+    }
+
+  //private:
+    boost::asio::basic_streambuf<Allocator>& streambuf_;
+    WriteHandler handler_;
+  };
+
+  template <typename Allocator, typename WriteHandler>
+  inline void* asio_handler_allocate(std::size_t size,
+      write_streambuf_handler<Allocator, WriteHandler>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename Allocator, typename WriteHandler>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      write_streambuf_handler<Allocator, WriteHandler>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename Allocator, typename WriteHandler>
+  inline bool asio_handler_is_continuation(
+      write_streambuf_handler<Allocator, WriteHandler>* this_handler)
+  {
+    return boost_asio_handler_cont_helpers::is_continuation(
+        this_handler->handler_);
+  }
+
+  template <typename Function, typename Allocator, typename WriteHandler>
+  inline void asio_handler_invoke(Function& function,
+      write_streambuf_handler<Allocator, WriteHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename Allocator, typename WriteHandler>
+  inline void asio_handler_invoke(const Function& function,
+      write_streambuf_handler<Allocator, WriteHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+} // namespace detail
+
+template <typename AsyncWriteStream, typename Allocator,
+    typename CompletionCondition, typename WriteHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+async_write(AsyncWriteStream& s,
+    boost::asio::basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition,
+    BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a WriteHandler.
+  BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+  detail::async_result_init<
+    WriteHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+  async_write(s, b.data(), completion_condition,
+    detail::write_streambuf_handler<Allocator, BOOST_ASIO_HANDLER_TYPE(
+      WriteHandler, void (boost::system::error_code, std::size_t))>(
+        b, init.handler));
+
+  return init.result.get();
+}
+
+template <typename AsyncWriteStream, typename Allocator, typename WriteHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+async_write(AsyncWriteStream& s,
+    boost::asio::basic_streambuf<Allocator>& b,
+    BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a WriteHandler.
+  BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+  detail::async_result_init<
+    WriteHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+  async_write(s, b.data(), transfer_all(),
+    detail::write_streambuf_handler<Allocator, BOOST_ASIO_HANDLER_TYPE(
+      WriteHandler, void (boost::system::error_code, std::size_t))>(
+        b, init.handler));
+
+  return init.result.get();
+}
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IMPL_WRITE_HPP
diff --git a/ext/patches/boost/asio/impl/write_at.hpp b/ext/patches/boost/asio/impl/write_at.hpp
new file mode 100644
index 0000000..c4013c8
--- /dev/null
+++ b/ext/patches/boost/asio/impl/write_at.hpp
@@ -0,0 +1,827 @@
+//
+// impl/write_at.hpp
+// ~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IMPL_WRITE_AT_HPP
+#define BOOST_ASIO_IMPL_WRITE_AT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/completion_condition.hpp>
+#include <boost/asio/detail/array_fwd.hpp>
+#include <boost/asio/detail/base_from_completion_cond.hpp>
+#include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/consuming_buffers.hpp>
+#include <boost/asio/detail/dependent_type.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
+#include <boost/asio/detail/handler_cont_helpers.hpp>
+#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+template <typename SyncRandomAccessWriteDevice, typename ConstBufferSequence,
+    typename CompletionCondition>
+std::size_t write_at(SyncRandomAccessWriteDevice& d,
+    uint64_t offset, const ConstBufferSequence& buffers,
+    CompletionCondition completion_condition, boost::system::error_code& ec)
+{
+  ec = boost::system::error_code();
+  boost::asio::detail::consuming_buffers<
+    const_buffer, ConstBufferSequence> tmp(buffers);
+  std::size_t total_transferred = 0;
+  tmp.prepare(detail::adapt_completion_condition_result(
+        completion_condition(ec, total_transferred)));
+  while (tmp.begin() != tmp.end())
+  {
+    std::size_t bytes_transferred = d.write_some_at(
+        offset + total_transferred, tmp, ec);
+    tmp.consume(bytes_transferred);
+    total_transferred += bytes_transferred;
+    tmp.prepare(detail::adapt_completion_condition_result(
+          completion_condition(ec, total_transferred)));
+  }
+  return total_transferred;
+}
+
+template <typename SyncRandomAccessWriteDevice, typename ConstBufferSequence>
+inline std::size_t write_at(SyncRandomAccessWriteDevice& d,
+    uint64_t offset, const ConstBufferSequence& buffers)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = write_at(
+      d, offset, buffers, transfer_all(), ec);
+  boost::asio::detail::throw_error(ec, "write_at");
+  return bytes_transferred;
+}
+
+template <typename SyncRandomAccessWriteDevice, typename ConstBufferSequence>
+inline std::size_t write_at(SyncRandomAccessWriteDevice& d,
+    uint64_t offset, const ConstBufferSequence& buffers,
+    boost::system::error_code& ec)
+{
+  return write_at(d, offset, buffers, transfer_all(), ec);
+}
+
+template <typename SyncRandomAccessWriteDevice, typename ConstBufferSequence,
+    typename CompletionCondition>
+inline std::size_t write_at(SyncRandomAccessWriteDevice& d,
+    uint64_t offset, const ConstBufferSequence& buffers,
+    CompletionCondition completion_condition)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = write_at(
+      d, offset, buffers, completion_condition, ec);
+  boost::asio::detail::throw_error(ec, "write_at");
+  return bytes_transferred;
+}
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+template <typename SyncRandomAccessWriteDevice, typename Allocator,
+    typename CompletionCondition>
+std::size_t write_at(SyncRandomAccessWriteDevice& d,
+    uint64_t offset, boost::asio::basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition, boost::system::error_code& ec)
+{
+  std::size_t bytes_transferred = write_at(
+      d, offset, b.data(), completion_condition, ec);
+  b.consume(bytes_transferred);
+  return bytes_transferred;
+}
+
+template <typename SyncRandomAccessWriteDevice, typename Allocator>
+inline std::size_t write_at(SyncRandomAccessWriteDevice& d,
+    uint64_t offset, boost::asio::basic_streambuf<Allocator>& b)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = write_at(d, offset, b, transfer_all(), ec);
+  boost::asio::detail::throw_error(ec, "write_at");
+  return bytes_transferred;
+}
+
+template <typename SyncRandomAccessWriteDevice, typename Allocator>
+inline std::size_t write_at(SyncRandomAccessWriteDevice& d,
+    uint64_t offset, boost::asio::basic_streambuf<Allocator>& b,
+    boost::system::error_code& ec)
+{
+  return write_at(d, offset, b, transfer_all(), ec);
+}
+
+template <typename SyncRandomAccessWriteDevice, typename Allocator,
+    typename CompletionCondition>
+inline std::size_t write_at(SyncRandomAccessWriteDevice& d,
+    uint64_t offset, boost::asio::basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition)
+{
+  boost::system::error_code ec;
+  std::size_t bytes_transferred = write_at(
+      d, offset, b, completion_condition, ec);
+  boost::asio::detail::throw_error(ec, "write_at");
+  return bytes_transferred;
+}
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+namespace detail
+{
+  template <typename AsyncRandomAccessWriteDevice, typename ConstBufferSequence,
+      typename CompletionCondition, typename WriteHandler>
+  class write_at_op
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    write_at_op(AsyncRandomAccessWriteDevice& device,
+        uint64_t offset, const ConstBufferSequence& buffers,
+        CompletionCondition completion_condition, WriteHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        device_(device),
+        offset_(offset),
+        buffers_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    write_at_op(const write_at_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    write_at_op(write_at_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      switch (start_ = start)
+      {
+        case 1:
+        buffers_.prepare(this->check_for_completion(ec, total_transferred_));
+        for (;;)
+        {
+          device_.async_write_some_at(
+              offset_ + total_transferred_, buffers_,
+              BOOST_ASIO_MOVE_CAST(write_at_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          buffers_.consume(bytes_transferred);
+          buffers_.prepare(this->check_for_completion(ec, total_transferred_));
+          if ((!ec && bytes_transferred == 0)
+              || buffers_.begin() == buffers_.end())
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncRandomAccessWriteDevice& device_;
+    uint64_t offset_;
+    boost::asio::detail::consuming_buffers<
+      const_buffer, ConstBufferSequence> buffers_;
+    int start_;
+    std::size_t total_transferred_;
+    WriteHandler handler_;
+  };
+
+  template <typename AsyncRandomAccessWriteDevice,
+      typename CompletionCondition, typename WriteHandler>
+  class write_at_op<AsyncRandomAccessWriteDevice,
+      boost::asio::mutable_buffers_1, CompletionCondition, WriteHandler>
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    write_at_op(AsyncRandomAccessWriteDevice& device,
+        uint64_t offset, const boost::asio::mutable_buffers_1& buffers,
+        CompletionCondition completion_condition,
+        WriteHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        device_(device),
+        offset_(offset),
+        buffer_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    write_at_op(const write_at_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffer_(other.buffer_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    write_at_op(write_at_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffer_(other.buffer_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      std::size_t n = 0;
+      switch (start_ = start)
+      {
+        case 1:
+        n = this->check_for_completion(ec, total_transferred_);
+        for (;;)
+        {
+          device_.async_write_some_at(offset_ + total_transferred_,
+              boost::asio::buffer(buffer_ + total_transferred_, n),
+              BOOST_ASIO_MOVE_CAST(write_at_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          if ((!ec && bytes_transferred == 0)
+              || (n = this->check_for_completion(ec, total_transferred_)) == 0
+              || total_transferred_ == boost::asio::buffer_size(buffer_))
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncRandomAccessWriteDevice& device_;
+    uint64_t offset_;
+    boost::asio::mutable_buffer buffer_;
+    int start_;
+    std::size_t total_transferred_;
+    WriteHandler handler_;
+  };
+
+  template <typename AsyncRandomAccessWriteDevice,
+      typename CompletionCondition, typename WriteHandler>
+  class write_at_op<AsyncRandomAccessWriteDevice, boost::asio::const_buffers_1,
+      CompletionCondition, WriteHandler>
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    write_at_op(AsyncRandomAccessWriteDevice& device,
+        uint64_t offset, const boost::asio::const_buffers_1& buffers,
+        CompletionCondition completion_condition,
+        WriteHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        device_(device),
+        offset_(offset),
+        buffer_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    write_at_op(const write_at_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffer_(other.buffer_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    write_at_op(write_at_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffer_(other.buffer_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      std::size_t n = 0;
+      switch (start_ = start)
+      {
+        case 1:
+        n = this->check_for_completion(ec, total_transferred_);
+        for (;;)
+        {
+          device_.async_write_some_at(offset_ + total_transferred_,
+              boost::asio::buffer(buffer_ + total_transferred_, n),
+              BOOST_ASIO_MOVE_CAST(write_at_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          if ((!ec && bytes_transferred == 0)
+              || (n = this->check_for_completion(ec, total_transferred_)) == 0
+              || total_transferred_ == boost::asio::buffer_size(buffer_))
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncRandomAccessWriteDevice& device_;
+    uint64_t offset_;
+    boost::asio::const_buffer buffer_;
+    int start_;
+    std::size_t total_transferred_;
+    WriteHandler handler_;
+  };
+
+  template <typename AsyncRandomAccessWriteDevice, typename Elem,
+      typename CompletionCondition, typename WriteHandler>
+  class write_at_op<AsyncRandomAccessWriteDevice, boost::array<Elem, 2>,
+      CompletionCondition, WriteHandler>
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    write_at_op(AsyncRandomAccessWriteDevice& device,
+        uint64_t offset, const boost::array<Elem, 2>& buffers,
+        CompletionCondition completion_condition, WriteHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        device_(device),
+        offset_(offset),
+        buffers_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    write_at_op(const write_at_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    write_at_op(write_at_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      typename boost::asio::detail::dependent_type<Elem,
+          boost::array<boost::asio::const_buffer, 2> >::type bufs = {{
+        boost::asio::const_buffer(buffers_[0]),
+        boost::asio::const_buffer(buffers_[1]) }};
+      std::size_t buffer_size0 = boost::asio::buffer_size(bufs[0]);
+      std::size_t buffer_size1 = boost::asio::buffer_size(bufs[1]);
+      std::size_t n = 0;
+      switch (start_ = start)
+      {
+        case 1:
+        n = this->check_for_completion(ec, total_transferred_);
+        for (;;)
+        {
+          bufs[0] = boost::asio::buffer(bufs[0] + total_transferred_, n);
+          bufs[1] = boost::asio::buffer(
+              bufs[1] + (total_transferred_ < buffer_size0
+                ? 0 : total_transferred_ - buffer_size0),
+              n - boost::asio::buffer_size(bufs[0]));
+          device_.async_write_some_at(offset_ + total_transferred_,
+              bufs, BOOST_ASIO_MOVE_CAST(write_at_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          if ((!ec && bytes_transferred == 0)
+              || (n = this->check_for_completion(ec, total_transferred_)) == 0
+              || total_transferred_ == buffer_size0 + buffer_size1)
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncRandomAccessWriteDevice& device_;
+    uint64_t offset_;
+    boost::array<Elem, 2> buffers_;
+    int start_;
+    std::size_t total_transferred_;
+    WriteHandler handler_;
+  };
+
+#if defined(BOOST_ASIO_HAS_STD_ARRAY)
+
+  template <typename AsyncRandomAccessWriteDevice, typename Elem,
+      typename CompletionCondition, typename WriteHandler>
+  class write_at_op<AsyncRandomAccessWriteDevice, std::array<Elem, 2>,
+      CompletionCondition, WriteHandler>
+    : detail::base_from_completion_cond<CompletionCondition>
+  {
+  public:
+    write_at_op(AsyncRandomAccessWriteDevice& device,
+        uint64_t offset, const std::array<Elem, 2>& buffers,
+        CompletionCondition completion_condition, WriteHandler& handler)
+      : detail::base_from_completion_cond<
+          CompletionCondition>(completion_condition),
+        device_(device),
+        offset_(offset),
+        buffers_(buffers),
+        start_(0),
+        total_transferred_(0),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    write_at_op(const write_at_op& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(other.handler_)
+    {
+    }
+
+    write_at_op(write_at_op&& other)
+      : detail::base_from_completion_cond<CompletionCondition>(other),
+        device_(other.device_),
+        offset_(other.offset_),
+        buffers_(other.buffers_),
+        start_(other.start_),
+        total_transferred_(other.total_transferred_),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        std::size_t bytes_transferred, int start = 0)
+    {
+      typename boost::asio::detail::dependent_type<Elem,
+          std::array<boost::asio::const_buffer, 2> >::type bufs = {{
+        boost::asio::const_buffer(buffers_[0]),
+        boost::asio::const_buffer(buffers_[1]) }};
+      std::size_t buffer_size0 = boost::asio::buffer_size(bufs[0]);
+      std::size_t buffer_size1 = boost::asio::buffer_size(bufs[1]);
+      std::size_t n = 0;
+      switch (start_ = start)
+      {
+        case 1:
+        n = this->check_for_completion(ec, total_transferred_);
+        for (;;)
+        {
+          bufs[0] = boost::asio::buffer(bufs[0] + total_transferred_, n);
+          bufs[1] = boost::asio::buffer(
+              bufs[1] + (total_transferred_ < buffer_size0
+                ? 0 : total_transferred_ - buffer_size0),
+              n - boost::asio::buffer_size(bufs[0]));
+          device_.async_write_some_at(offset_ + total_transferred_,
+              bufs, BOOST_ASIO_MOVE_CAST(write_at_op)(*this));
+          return; default:
+          total_transferred_ += bytes_transferred;
+          if ((!ec && bytes_transferred == 0)
+              || (n = this->check_for_completion(ec, total_transferred_)) == 0
+              || total_transferred_ == buffer_size0 + buffer_size1)
+            break;
+        }
+
+        handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+      }
+    }
+
+  //private:
+    AsyncRandomAccessWriteDevice& device_;
+    uint64_t offset_;
+    std::array<Elem, 2> buffers_;
+    int start_;
+    std::size_t total_transferred_;
+    WriteHandler handler_;
+  };
+
+#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
+
+  template <typename AsyncRandomAccessWriteDevice, typename ConstBufferSequence,
+      typename CompletionCondition, typename WriteHandler>
+  inline void* asio_handler_allocate(std::size_t size,
+      write_at_op<AsyncRandomAccessWriteDevice, ConstBufferSequence,
+        CompletionCondition, WriteHandler>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename AsyncRandomAccessWriteDevice, typename ConstBufferSequence,
+      typename CompletionCondition, typename WriteHandler>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      write_at_op<AsyncRandomAccessWriteDevice, ConstBufferSequence,
+        CompletionCondition, WriteHandler>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename AsyncRandomAccessWriteDevice, typename ConstBufferSequence,
+      typename CompletionCondition, typename WriteHandler>
+  inline bool asio_handler_is_continuation(
+      write_at_op<AsyncRandomAccessWriteDevice, ConstBufferSequence,
+        CompletionCondition, WriteHandler>* this_handler)
+  {
+    return this_handler->start_ == 0 ? true
+      : boost_asio_handler_cont_helpers::is_continuation(
+          this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncRandomAccessWriteDevice,
+      typename ConstBufferSequence, typename CompletionCondition,
+      typename WriteHandler>
+  inline void asio_handler_invoke(Function& function,
+      write_at_op<AsyncRandomAccessWriteDevice, ConstBufferSequence,
+        CompletionCondition, WriteHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename AsyncRandomAccessWriteDevice,
+      typename ConstBufferSequence, typename CompletionCondition,
+      typename WriteHandler>
+  inline void asio_handler_invoke(const Function& function,
+      write_at_op<AsyncRandomAccessWriteDevice, ConstBufferSequence,
+        CompletionCondition, WriteHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename AsyncRandomAccessWriteDevice, typename ConstBufferSequence,
+      typename CompletionCondition, typename WriteHandler>
+  inline write_at_op<AsyncRandomAccessWriteDevice,
+      ConstBufferSequence, CompletionCondition, WriteHandler>
+  make_write_at_op(AsyncRandomAccessWriteDevice& d,
+      uint64_t offset, const ConstBufferSequence& buffers,
+      CompletionCondition completion_condition, WriteHandler handler)
+  {
+    return write_at_op<AsyncRandomAccessWriteDevice,
+      ConstBufferSequence, CompletionCondition, WriteHandler>(
+        d, offset, buffers, completion_condition, handler);
+  }
+} // namespace detail
+
+template <typename AsyncRandomAccessWriteDevice, typename ConstBufferSequence,
+    typename CompletionCondition, typename WriteHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+async_write_at(AsyncRandomAccessWriteDevice& d,
+    uint64_t offset, const ConstBufferSequence& buffers,
+    CompletionCondition completion_condition,
+    BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a WriteHandler.
+  BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+  detail::async_result_init<
+    WriteHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+  detail::write_at_op<AsyncRandomAccessWriteDevice, ConstBufferSequence,
+    CompletionCondition, BOOST_ASIO_HANDLER_TYPE(
+      WriteHandler, void (boost::system::error_code, std::size_t))>(
+        d, offset, buffers, completion_condition, init.handler)(
+          boost::system::error_code(), 0, 1);
+
+  return init.result.get();
+}
+
+template <typename AsyncRandomAccessWriteDevice, typename ConstBufferSequence,
+    typename WriteHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+async_write_at(AsyncRandomAccessWriteDevice& d,
+    uint64_t offset, const ConstBufferSequence& buffers,
+    BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a WriteHandler.
+  BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+  detail::async_result_init<
+    WriteHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+  detail::write_at_op<AsyncRandomAccessWriteDevice, ConstBufferSequence,
+    detail::transfer_all_t, BOOST_ASIO_HANDLER_TYPE(
+      WriteHandler, void (boost::system::error_code, std::size_t))>(
+        d, offset, buffers, transfer_all(), init.handler)(
+          boost::system::error_code(), 0, 1);
+
+  return init.result.get();
+}
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+namespace detail
+{
+  template <typename Allocator, typename WriteHandler>
+  class write_at_streambuf_op
+  {
+  public:
+    write_at_streambuf_op(
+        boost::asio::basic_streambuf<Allocator>& streambuf,
+        WriteHandler& handler)
+      : streambuf_(streambuf),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(handler))
+    {
+    }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+    write_at_streambuf_op(const write_at_streambuf_op& other)
+      : streambuf_(other.streambuf_),
+        handler_(other.handler_)
+    {
+    }
+
+    write_at_streambuf_op(write_at_streambuf_op&& other)
+      : streambuf_(other.streambuf_),
+        handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_))
+    {
+    }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+    void operator()(const boost::system::error_code& ec,
+        const std::size_t bytes_transferred)
+    {
+      streambuf_.consume(bytes_transferred);
+      handler_(ec, bytes_transferred);
+    }
+
+  //private:
+    boost::asio::basic_streambuf<Allocator>& streambuf_;
+    WriteHandler handler_;
+  };
+
+  template <typename Allocator, typename WriteHandler>
+  inline void* asio_handler_allocate(std::size_t size,
+      write_at_streambuf_op<Allocator, WriteHandler>* this_handler)
+  {
+    return boost_asio_handler_alloc_helpers::allocate(
+        size, this_handler->handler_);
+  }
+
+  template <typename Allocator, typename WriteHandler>
+  inline void asio_handler_deallocate(void* pointer, std::size_t size,
+      write_at_streambuf_op<Allocator, WriteHandler>* this_handler)
+  {
+    boost_asio_handler_alloc_helpers::deallocate(
+        pointer, size, this_handler->handler_);
+  }
+
+  template <typename Allocator, typename WriteHandler>
+  inline bool asio_handler_is_continuation(
+      write_at_streambuf_op<Allocator, WriteHandler>* this_handler)
+  {
+    return boost_asio_handler_cont_helpers::is_continuation(
+        this_handler->handler_);
+  }
+
+  template <typename Function, typename Allocator, typename WriteHandler>
+  inline void asio_handler_invoke(Function& function,
+      write_at_streambuf_op<Allocator, WriteHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Function, typename Allocator, typename WriteHandler>
+  inline void asio_handler_invoke(const Function& function,
+      write_at_streambuf_op<Allocator, WriteHandler>* this_handler)
+  {
+    boost_asio_handler_invoke_helpers::invoke(
+        function, this_handler->handler_);
+  }
+
+  template <typename Allocator, typename WriteHandler>
+  inline write_at_streambuf_op<Allocator, WriteHandler>
+  make_write_at_streambuf_op(
+      boost::asio::basic_streambuf<Allocator>& b, WriteHandler handler)
+  {
+    return write_at_streambuf_op<Allocator, WriteHandler>(b, handler);
+  }
+} // namespace detail
+
+template <typename AsyncRandomAccessWriteDevice, typename Allocator,
+    typename CompletionCondition, typename WriteHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+async_write_at(AsyncRandomAccessWriteDevice& d,
+    uint64_t offset, boost::asio::basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition,
+    BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a WriteHandler.
+  BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+  detail::async_result_init<
+    WriteHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+  async_write_at(d, offset, b.data(), completion_condition,
+    detail::write_at_streambuf_op<Allocator, BOOST_ASIO_HANDLER_TYPE(
+      WriteHandler, void (boost::system::error_code, std::size_t))>(
+        b, init.handler));
+
+  return init.result.get();
+}
+
+template <typename AsyncRandomAccessWriteDevice, typename Allocator,
+    typename WriteHandler>
+inline BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+async_write_at(AsyncRandomAccessWriteDevice& d,
+    uint64_t offset, boost::asio::basic_streambuf<Allocator>& b,
+    BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+{
+  // If you get an error on the following line it means that your handler does
+  // not meet the documented type requirements for a WriteHandler.
+  BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+  detail::async_result_init<
+    WriteHandler, void (boost::system::error_code, std::size_t)> init(
+      BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+  async_write_at(d, offset, b.data(), transfer_all(),
+    detail::write_at_streambuf_op<Allocator, BOOST_ASIO_HANDLER_TYPE(
+      WriteHandler, void (boost::system::error_code, std::size_t))>(
+        b, init.handler));
+
+  return init.result.get();
+}
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IMPL_WRITE_AT_HPP
diff --git a/ext/patches/boost/asio/io_service.hpp b/ext/patches/boost/asio/io_service.hpp
new file mode 100644
index 0000000..483612c
--- /dev/null
+++ b/ext/patches/boost/asio/io_service.hpp
@@ -0,0 +1,772 @@
+//
+// io_service.hpp
+// ~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IO_SERVICE_HPP
+#define BOOST_ASIO_IO_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <stdexcept>
+#include <typeinfo>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/wrapped_handler.hpp>
+#include <boost/system/error_code.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+# include <boost/asio/detail/winsock_init.hpp>
+#elif defined(__sun) || defined(__QNX__) || defined(__hpux) || defined(_AIX) \
+  || defined(__osf__)
+# include <boost/asio/detail/signal_init.hpp>
+#endif
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+class io_service;
+template <typename Service> Service& use_service(io_service& ios);
+template <typename Service> void add_service(io_service& ios, Service* svc);
+template <typename Service> bool has_service(io_service& ios);
+
+namespace detail {
+#if defined(BOOST_ASIO_HAS_IOCP)
+  typedef class win_iocp_io_service io_service_impl;
+  class win_iocp_overlapped_ptr;
+#else
+  typedef class task_io_service io_service_impl;
+#endif
+  class service_registry;
+} // namespace detail
+
+/// Provides core I/O functionality.
+/**
+ * The io_service class provides the core I/O functionality for users of the
+ * asynchronous I/O objects, including:
+ *
+ * @li boost::asio::ip::tcp::socket
+ * @li boost::asio::ip::tcp::acceptor
+ * @li boost::asio::ip::udp::socket
+ * @li boost::asio::deadline_timer.
+ *
+ * The io_service class also includes facilities intended for developers of
+ * custom asynchronous services.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Safe, with the specific exceptions of the reset() and
+ * notify_fork() functions. Calling reset() while there are unfinished run(),
+ * run_one(), poll() or poll_one() calls results in undefined behaviour. The
+ * notify_fork() function should not be called while any io_service function,
+ * or any function on an I/O object that is associated with the io_service, is
+ * being called in another thread.
+ *
+ * @par Concepts:
+ * Dispatcher.
+ *
+ * @par Synchronous and asynchronous operations
+ *
+ * Synchronous operations on I/O objects implicitly run the io_service object
+ * for an individual operation. The io_service functions run(), run_one(),
+ * poll() or poll_one() must be called for the io_service to perform
+ * asynchronous operations on behalf of a C++ program. Notification that an
+ * asynchronous operation has completed is delivered by invocation of the
+ * associated handler. Handlers are invoked only by a thread that is currently
+ * calling any overload of run(), run_one(), poll() or poll_one() for the
+ * io_service.
+ *
+ * @par Effect of exceptions thrown from handlers
+ *
+ * If an exception is thrown from a handler, the exception is allowed to
+ * propagate through the throwing thread's invocation of run(), run_one(),
+ * poll() or poll_one(). No other threads that are calling any of these
+ * functions are affected. It is then the responsibility of the application to
+ * catch the exception.
+ *
+ * After the exception has been caught, the run(), run_one(), poll() or
+ * poll_one() call may be restarted @em without the need for an intervening
+ * call to reset(). This allows the thread to rejoin the io_service object's
+ * thread pool without impacting any other threads in the pool.
+ *
+ * For example:
+ *
+ * @code
+ * boost::asio::io_service io_service;
+ * ...
+ * for (;;)
+ * {
+ *   try
+ *   {
+ *     io_service.run();
+ *     break; // run() exited normally
+ *   }
+ *   catch (my_exception& e)
+ *   {
+ *     // Deal with exception as appropriate.
+ *   }
+ * }
+ * @endcode
+ *
+ * @par Stopping the io_service from running out of work
+ *
+ * Some applications may need to prevent an io_service object's run() call from
+ * returning when there is no more work to do. For example, the io_service may
+ * be being run in a background thread that is launched prior to the
+ * application's asynchronous operations. The run() call may be kept running by
+ * creating an object of type boost::asio::io_service::work:
+ *
+ * @code boost::asio::io_service io_service;
+ * boost::asio::io_service::work work(io_service);
+ * ... @endcode
+ *
+ * To effect a shutdown, the application will then need to call the io_service
+ * object's stop() member function. This will cause the io_service run() call
+ * to return as soon as possible, abandoning unfinished operations and without
+ * permitting ready handlers to be dispatched.
+ *
+ * Alternatively, if the application requires that all operations and handlers
+ * be allowed to finish normally, the work object may be explicitly destroyed.
+ *
+ * @code boost::asio::io_service io_service;
+ * auto_ptr<boost::asio::io_service::work> work(
+ *     new boost::asio::io_service::work(io_service));
+ * ...
+ * work.reset(); // Allow run() to exit. @endcode
+ *
+ * @par The io_service class and I/O services
+ *
+ * Class io_service implements an extensible, type-safe, polymorphic set of I/O
+ * services, indexed by service type. An object of class io_service must be
+ * initialised before I/O objects such as sockets, resolvers and timers can be
+ * used. These I/O objects are distinguished by having constructors that accept
+ * an @c io_service& parameter.
+ *
+ * I/O services exist to manage the logical interface to the operating system on
+ * behalf of the I/O objects. In particular, there are resources that are shared
+ * across a class of I/O objects. For example, timers may be implemented in
+ * terms of a single timer queue. The I/O services manage these shared
+ * resources.
+ *
+ * Access to the services of an io_service is via three function templates,
+ * use_service(), add_service() and has_service().
+ *
+ * In a call to @c use_service<Service>(), the type argument chooses a service,
+ * making available all members of the named type. If @c Service is not present
+ * in an io_service, an object of type @c Service is created and added to the
+ * io_service. A C++ program can check if an io_service implements a
+ * particular service with the function template @c has_service<Service>().
+ *
+ * Service objects may be explicitly added to an io_service using the function
+ * template @c add_service<Service>(). If the @c Service is already present, the
+ * service_already_exists exception is thrown. If the owner of the service is
+ * not the same object as the io_service parameter, the invalid_service_owner
+ * exception is thrown.
+ *
+ * Once a service reference is obtained from an io_service object by calling
+ * use_service(), that reference remains usable as long as the owning io_service
+ * object exists.
+ *
+ * All I/O service implementations have io_service::service as a public base
+ * class. Custom I/O services may be implemented by deriving from this class and
+ * then added to an io_service using the facilities described above.
+ */
+class io_service
+  : private noncopyable
+{
+private:
+  typedef detail::io_service_impl impl_type;
+#if defined(BOOST_ASIO_HAS_IOCP)
+  friend class detail::win_iocp_overlapped_ptr;
+#endif
+
+public:
+  class work;
+  friend class work;
+
+  class id;
+
+  class service;
+
+  class strand;
+
+  /// Constructor.
+  BOOST_ASIO_DECL io_service();
+
+  /// Constructor.
+  /**
+   * Construct with a hint about the required level of concurrency.
+   *
+   * @param concurrency_hint A suggestion to the implementation on how many
+   * threads it should allow to run simultaneously.
+   */
+  BOOST_ASIO_DECL explicit io_service(std::size_t concurrency_hint);
+
+  /// Destructor.
+  /**
+   * On destruction, the io_service performs the following sequence of
+   * operations:
+   *
+   * @li For each service object @c svc in the io_service set, in reverse order
+   * of the beginning of service object lifetime, performs
+   * @c svc->shutdown_service().
+   *
+   * @li Uninvoked handler objects that were scheduled for deferred invocation
+   * on the io_service, or any associated strand, are destroyed.
+   *
+   * @li For each service object @c svc in the io_service set, in reverse order
+   * of the beginning of service object lifetime, performs
+   * <tt>delete static_cast<io_service::service*>(svc)</tt>.
+   *
+   * @note The destruction sequence described above permits programs to
+   * simplify their resource management by using @c shared_ptr<>. Where an
+   * object's lifetime is tied to the lifetime of a connection (or some other
+   * sequence of asynchronous operations), a @c shared_ptr to the object would
+   * be bound into the handlers for all asynchronous operations associated with
+   * it. This works as follows:
+   *
+   * @li When a single connection ends, all associated asynchronous operations
+   * complete. The corresponding handler objects are destroyed, and all
+   * @c shared_ptr references to the objects are destroyed.
+   *
+   * @li To shut down the whole program, the io_service function stop() is
+   * called to terminate any run() calls as soon as possible. The io_service
+   * destructor defined above destroys all handlers, causing all @c shared_ptr
+   * references to all connection objects to be destroyed.
+   */
+  BOOST_ASIO_DECL ~io_service();
+
+  /// Run the io_service object's event processing loop.
+  /**
+   * The run() function blocks until all work has finished and there are no
+   * more handlers to be dispatched, or until the io_service has been stopped.
+   *
+   * Multiple threads may call the run() function to set up a pool of threads
+   * from which the io_service may execute handlers. All threads that are
+   * waiting in the pool are equivalent and the io_service may choose any one
+   * of them to invoke a handler.
+   *
+   * A normal exit from the run() function implies that the io_service object
+   * is stopped (the stopped() function returns @c true). Subsequent calls to
+   * run(), run_one(), poll() or poll_one() will return immediately unless there
+   * is a prior call to reset().
+   *
+   * @return The number of handlers that were executed.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The run() function must not be called from a thread that is currently
+   * calling one of run(), run_one(), poll() or poll_one() on the same
+   * io_service object.
+   *
+   * The poll() function may also be used to dispatch ready handlers, but
+   * without blocking.
+   */
+  BOOST_ASIO_DECL std::size_t run();
+
+  /// Run the io_service object's event processing loop.
+  /**
+   * The run() function blocks until all work has finished and there are no
+   * more handlers to be dispatched, or until the io_service has been stopped.
+   *
+   * Multiple threads may call the run() function to set up a pool of threads
+   * from which the io_service may execute handlers. All threads that are
+   * waiting in the pool are equivalent and the io_service may choose any one
+   * of them to invoke a handler.
+   *
+   * A normal exit from the run() function implies that the io_service object
+   * is stopped (the stopped() function returns @c true). Subsequent calls to
+   * run(), run_one(), poll() or poll_one() will return immediately unless there
+   * is a prior call to reset().
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @return The number of handlers that were executed.
+   *
+   * @note The run() function must not be called from a thread that is currently
+   * calling one of run(), run_one(), poll() or poll_one() on the same
+   * io_service object.
+   *
+   * The poll() function may also be used to dispatch ready handlers, but
+   * without blocking.
+   */
+  BOOST_ASIO_DECL std::size_t run(boost::system::error_code& ec);
+
+  /// Run the io_service object's event processing loop to execute at most one
+  /// handler.
+  /**
+   * The run_one() function blocks until one handler has been dispatched, or
+   * until the io_service has been stopped.
+   *
+   * @return The number of handlers that were executed. A zero return value
+   * implies that the io_service object is stopped (the stopped() function
+   * returns @c true). Subsequent calls to run(), run_one(), poll() or
+   * poll_one() will return immediately unless there is a prior call to
+   * reset().
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  BOOST_ASIO_DECL std::size_t run_one();
+
+  /// Run the io_service object's event processing loop to execute at most one
+  /// handler.
+  /**
+   * The run_one() function blocks until one handler has been dispatched, or
+   * until the io_service has been stopped.
+   *
+   * @return The number of handlers that were executed. A zero return value
+   * implies that the io_service object is stopped (the stopped() function
+   * returns @c true). Subsequent calls to run(), run_one(), poll() or
+   * poll_one() will return immediately unless there is a prior call to
+   * reset().
+   *
+   * @return The number of handlers that were executed.
+   */
+  BOOST_ASIO_DECL std::size_t run_one(boost::system::error_code& ec);
+
+  /// Run the io_service object's event processing loop to execute ready
+  /// handlers.
+  /**
+   * The poll() function runs handlers that are ready to run, without blocking,
+   * until the io_service has been stopped or there are no more ready handlers.
+   *
+   * @return The number of handlers that were executed.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  BOOST_ASIO_DECL std::size_t poll();
+
+  /// Run the io_service object's event processing loop to execute ready
+  /// handlers.
+  /**
+   * The poll() function runs handlers that are ready to run, without blocking,
+   * until the io_service has been stopped or there are no more ready handlers.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @return The number of handlers that were executed.
+   */
+  BOOST_ASIO_DECL std::size_t poll(boost::system::error_code& ec);
+
+  /// Run the io_service object's event processing loop to execute one ready
+  /// handler.
+  /**
+   * The poll_one() function runs at most one handler that is ready to run,
+   * without blocking.
+   *
+   * @return The number of handlers that were executed.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  BOOST_ASIO_DECL std::size_t poll_one();
+
+  /// Run the io_service object's event processing loop to execute one ready
+  /// handler.
+  /**
+   * The poll_one() function runs at most one handler that is ready to run,
+   * without blocking.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @return The number of handlers that were executed.
+   */
+  BOOST_ASIO_DECL std::size_t poll_one(boost::system::error_code& ec);
+
+  /// Stop the io_service object's event processing loop.
+  /**
+   * This function does not block, but instead simply signals the io_service to
+   * stop. All invocations of its run() or run_one() member functions should
+   * return as soon as possible. Subsequent calls to run(), run_one(), poll()
+   * or poll_one() will return immediately until reset() is called.
+   */
+  BOOST_ASIO_DECL void stop();
+
+  /// Determine whether the io_service object has been stopped.
+  /**
+   * This function is used to determine whether an io_service object has been
+   * stopped, either through an explicit call to stop(), or due to running out
+   * of work. When an io_service object is stopped, calls to run(), run_one(),
+   * poll() or poll_one() will return immediately without invoking any
+   * handlers.
+   *
+   * @return @c true if the io_service object is stopped, otherwise @c false.
+   */
+  BOOST_ASIO_DECL bool stopped() const;
+
+  /// Reset the io_service in preparation for a subsequent run() invocation.
+  /**
+   * This function must be called prior to any second or later set of
+   * invocations of the run(), run_one(), poll() or poll_one() functions when a
+   * previous invocation of these functions returned due to the io_service
+   * being stopped or running out of work. After a call to reset(), the
+   * io_service object's stopped() function will return @c false.
+   *
+   * This function must not be called while there are any unfinished calls to
+   * the run(), run_one(), poll() or poll_one() functions.
+   */
+  BOOST_ASIO_DECL void reset();
+
+  /// Request the io_service to invoke the given handler.
+  /**
+   * This function is used to ask the io_service to execute the given handler.
+   *
+   * The io_service guarantees that the handler will only be called in a thread
+   * in which the run(), run_one(), poll() or poll_one() member functions is
+   * currently being invoked. The handler may be executed inside this function
+   * if the guarantee can be met.
+   *
+   * @param handler The handler to be called. The io_service will make
+   * a copy of the handler object as required. The function signature of the
+   * handler must be: @code void handler(); @endcode
+   *
+   * @note This function throws an exception only if:
+   *
+   * @li the handler's @c asio_handler_allocate function; or
+   *
+   * @li the handler's copy constructor
+   *
+   * throws an exception.
+   */
+  template <typename CompletionHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(CompletionHandler, void ())
+  dispatch(BOOST_ASIO_MOVE_ARG(CompletionHandler) handler);
+
+  /// Request the io_service to invoke the given handler and return immediately.
+  /**
+   * This function is used to ask the io_service to execute the given handler,
+   * but without allowing the io_service to call the handler from inside this
+   * function.
+   *
+   * The io_service guarantees that the handler will only be called in a thread
+   * in which the run(), run_one(), poll() or poll_one() member functions is
+   * currently being invoked.
+   *
+   * @param handler The handler to be called. The io_service will make
+   * a copy of the handler object as required. The function signature of the
+   * handler must be: @code void handler(); @endcode
+   *
+   * @note This function throws an exception only if:
+   *
+   * @li the handler's @c asio_handler_allocate function; or
+   *
+   * @li the handler's copy constructor
+   *
+   * throws an exception.
+   */
+  template <typename CompletionHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(CompletionHandler, void ())
+  post(BOOST_ASIO_MOVE_ARG(CompletionHandler) handler);
+
+  /// Create a new handler that automatically dispatches the wrapped handler
+  /// on the io_service.
+  /**
+   * This function is used to create a new handler function object that, when
+   * invoked, will automatically pass the wrapped handler to the io_service
+   * object's dispatch function.
+   *
+   * @param handler The handler to be wrapped. The io_service will make a copy
+   * of the handler object as required. The function signature of the handler
+   * must be: @code void handler(A1 a1, ... An an); @endcode
+   *
+   * @return A function object that, when invoked, passes the wrapped handler to
+   * the io_service object's dispatch function. Given a function object with the
+   * signature:
+   * @code R f(A1 a1, ... An an); @endcode
+   * If this function object is passed to the wrap function like so:
+   * @code io_service.wrap(f); @endcode
+   * then the return value is a function object with the signature
+   * @code void g(A1 a1, ... An an); @endcode
+   * that, when invoked, executes code equivalent to:
+   * @code io_service.dispatch(boost::bind(f, a1, ... an)); @endcode
+   */
+  template <typename Handler>
+#if defined(GENERATING_DOCUMENTATION)
+  unspecified
+#else
+  detail::wrapped_handler<io_service&, Handler>
+#endif
+  wrap(Handler handler);
+
+  /// Fork-related event notifications.
+  enum fork_event
+  {
+    /// Notify the io_service that the process is about to fork.
+    fork_prepare,
+
+    /// Notify the io_service that the process has forked and is the parent.
+    fork_parent,
+
+    /// Notify the io_service that the process has forked and is the child.
+    fork_child
+  };
+
+  /// Notify the io_service of a fork-related event.
+  /**
+   * This function is used to inform the io_service that the process is about
+   * to fork, or has just forked. This allows the io_service, and the services
+   * it contains, to perform any necessary housekeeping to ensure correct
+   * operation following a fork.
+   *
+   * This function must not be called while any other io_service function, or
+   * any function on an I/O object associated with the io_service, is being
+   * called in another thread. It is, however, safe to call this function from
+   * within a completion handler, provided no other thread is accessing the
+   * io_service.
+   *
+   * @param event A fork-related event.
+   *
+   * @throws boost::system::system_error Thrown on failure. If the notification
+   * fails the io_service object should no longer be used and should be
+   * destroyed.
+   *
+   * @par Example
+   * The following code illustrates how to incorporate the notify_fork()
+   * function:
+   * @code my_io_service.notify_fork(boost::asio::io_service::fork_prepare);
+   * if (fork() == 0)
+   * {
+   *   // This is the child process.
+   *   my_io_service.notify_fork(boost::asio::io_service::fork_child);
+   * }
+   * else
+   * {
+   *   // This is the parent process.
+   *   my_io_service.notify_fork(boost::asio::io_service::fork_parent);
+   * } @endcode
+   *
+   * @note For each service object @c svc in the io_service set, performs
+   * <tt>svc->fork_service();</tt>. When processing the fork_prepare event,
+   * services are visited in reverse order of the beginning of service object
+   * lifetime. Otherwise, services are visited in order of the beginning of
+   * service object lifetime.
+   */
+  BOOST_ASIO_DECL void notify_fork(boost::asio::io_service::fork_event event);
+
+  /// Obtain the service object corresponding to the given type.
+  /**
+   * This function is used to locate a service object that corresponds to
+   * the given service type. If there is no existing implementation of the
+   * service, then the io_service will create a new instance of the service.
+   *
+   * @param ios The io_service object that owns the service.
+   *
+   * @return The service interface implementing the specified service type.
+   * Ownership of the service interface is not transferred to the caller.
+   */
+  template <typename Service>
+  friend Service& use_service(io_service& ios);
+
+  /// Add a service object to the io_service.
+  /**
+   * This function is used to add a service to the io_service.
+   *
+   * @param ios The io_service object that owns the service.
+   *
+   * @param svc The service object. On success, ownership of the service object
+   * is transferred to the io_service. When the io_service object is destroyed,
+   * it will destroy the service object by performing:
+   * @code delete static_cast<io_service::service*>(svc) @endcode
+   *
+   * @throws boost::asio::service_already_exists Thrown if a service of the
+   * given type is already present in the io_service.
+   *
+   * @throws boost::asio::invalid_service_owner Thrown if the service's owning
+   * io_service is not the io_service object specified by the ios parameter.
+   */
+  template <typename Service>
+  friend void add_service(io_service& ios, Service* svc);
+
+  /// Determine if an io_service contains a specified service type.
+  /**
+   * This function is used to determine whether the io_service contains a
+   * service object corresponding to the given service type.
+   *
+   * @param ios The io_service object that owns the service.
+   *
+   * @return A boolean indicating whether the io_service contains the service.
+   */
+  template <typename Service>
+  friend bool has_service(io_service& ios);
+
+private:
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  detail::winsock_init<> init_;
+#elif defined(__sun) || defined(__QNX__) || defined(__hpux) || defined(_AIX) \
+  || defined(__osf__)
+  detail::signal_init<> init_;
+#endif
+
+  // The service registry.
+  boost::asio::detail::service_registry* service_registry_;
+
+  // The implementation.
+  impl_type& impl_;
+};
+
+/// Class to inform the io_service when it has work to do.
+/**
+ * The work class is used to inform the io_service when work starts and
+ * finishes. This ensures that the io_service object's run() function will not
+ * exit while work is underway, and that it does exit when there is no
+ * unfinished work remaining.
+ *
+ * The work class is copy-constructible so that it may be used as a data member
+ * in a handler class. It is not assignable.
+ */
+class io_service::work
+{
+public:
+  /// Constructor notifies the io_service that work is starting.
+  /**
+   * The constructor is used to inform the io_service that some work has begun.
+   * This ensures that the io_service object's run() function will not exit
+   * while the work is underway.
+   */
+  explicit work(boost::asio::io_service& io_service);
+
+  /// Copy constructor notifies the io_service that work is starting.
+  /**
+   * The constructor is used to inform the io_service that some work has begun.
+   * This ensures that the io_service object's run() function will not exit
+   * while the work is underway.
+   */
+  work(const work& other);
+
+  /// Destructor notifies the io_service that the work is complete.
+  /**
+   * The destructor is used to inform the io_service that some work has
+   * finished. Once the count of unfinished work reaches zero, the io_service
+   * object's run() function is permitted to exit.
+   */
+  ~work();
+
+  /// Get the io_service associated with the work.
+  boost::asio::io_service& get_io_service();
+
+private:
+  // Prevent assignment.
+  void operator=(const work& other);
+
+  // The io_service implementation.
+  detail::io_service_impl& io_service_impl_;
+};
+
+/// Class used to uniquely identify a service.
+class io_service::id
+  : private noncopyable
+{
+public:
+  /// Constructor.
+  id() {}
+};
+
+/// Base class for all io_service services.
+class io_service::service
+  : private noncopyable
+{
+public:
+  /// Get the io_service object that owns the service.
+  boost::asio::io_service& get_io_service();
+
+protected:
+  /// Constructor.
+  /**
+   * @param owner The io_service object that owns the service.
+   */
+  BOOST_ASIO_DECL service(boost::asio::io_service& owner);
+
+  /// Destructor.
+  BOOST_ASIO_DECL virtual ~service();
+
+private:
+  /// Destroy all user-defined handler objects owned by the service.
+  virtual void shutdown_service() = 0;
+
+  /// Handle notification of a fork-related event to perform any necessary
+  /// housekeeping.
+  /**
+   * This function is not a pure virtual so that services only have to
+   * implement it if necessary. The default implementation does nothing.
+   */
+  BOOST_ASIO_DECL virtual void fork_service(
+      boost::asio::io_service::fork_event event);
+
+  friend class boost::asio::detail::service_registry;
+  struct key
+  {
+    key() : type_info_(0), id_(0) {}
+    const std::type_info* type_info_;
+    const boost::asio::io_service::id* id_;
+  } key_;
+
+  boost::asio::io_service& owner_;
+  service* next_;
+};
+
+/// Exception thrown when trying to add a duplicate service to an io_service.
+class service_already_exists
+  : public std::logic_error
+{
+public:
+  BOOST_ASIO_DECL service_already_exists();
+};
+
+/// Exception thrown when trying to add a service object to an io_service where
+/// the service has a different owner.
+class invalid_service_owner
+  : public std::logic_error
+{
+public:
+  BOOST_ASIO_DECL invalid_service_owner();
+};
+
+namespace detail {
+
+// Special derived service id type to keep classes header-file only.
+template <typename Type>
+class service_id
+  : public boost::asio::io_service::id
+{
+};
+
+// Special service base class to keep classes header-file only.
+template <typename Type>
+class service_base
+  : public boost::asio::io_service::service
+{
+public:
+  static boost::asio::detail::service_id<Type> id;
+
+  // Constructor.
+  service_base(boost::asio::io_service& io_service)
+    : boost::asio::io_service::service(io_service)
+  {
+  }
+};
+
+template <typename Type>
+boost::asio::detail::service_id<Type> service_base<Type>::id;
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/impl/io_service.hpp>
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/impl/io_service.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_IO_SERVICE_HPP
diff --git a/ext/patches/boost/asio/ip/address.hpp b/ext/patches/boost/asio/ip/address.hpp
new file mode 100644
index 0000000..a04c7f0
--- /dev/null
+++ b/ext/patches/boost/asio/ip/address.hpp
@@ -0,0 +1,202 @@
+//
+// ip/address.hpp
+// ~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_ADDRESS_HPP
+#define BOOST_ASIO_IP_ADDRESS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <string>
+#include <boost/system/error_code.hpp>
+#include <boost/asio/ip/address_v4.hpp>
+#include <boost/asio/ip/address_v6.hpp>
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+# include <iosfwd>
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+/// Implements version-independent IP addresses.
+/**
+ * The boost::asio::ip::address class provides the ability to use either IP
+ * version 4 or version 6 addresses.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ */
+class address
+{
+public:
+  /// Default constructor.
+  BOOST_ASIO_DECL address();
+
+  /// Construct an address from an IPv4 address.
+  BOOST_ASIO_DECL address(const boost::asio::ip::address_v4& ipv4_address);
+
+  /// Construct an address from an IPv6 address.
+  BOOST_ASIO_DECL address(const boost::asio::ip::address_v6& ipv6_address);
+
+  /// Copy constructor.
+  BOOST_ASIO_DECL address(const address& other);
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+  /// Move constructor.
+  BOOST_ASIO_DECL address(address&& other);
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+  /// Assign from another address.
+  BOOST_ASIO_DECL address& operator=(const address& other);
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+  /// Move-assign from another address.
+  BOOST_ASIO_DECL address& operator=(address&& other);
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+  /// Assign from an IPv4 address.
+  BOOST_ASIO_DECL address& operator=(
+      const boost::asio::ip::address_v4& ipv4_address);
+
+  /// Assign from an IPv6 address.
+  BOOST_ASIO_DECL address& operator=(
+      const boost::asio::ip::address_v6& ipv6_address);
+
+  /// Get whether the address is an IP version 4 address.
+  bool is_v4() const
+  {
+    return type_ == ipv4;
+  }
+
+  /// Get whether the address is an IP version 6 address.
+  bool is_v6() const
+  {
+    return type_ == ipv6;
+  }
+
+  /// Get the address as an IP version 4 address.
+  BOOST_ASIO_DECL boost::asio::ip::address_v4 to_v4() const;
+
+  /// Get the address as an IP version 6 address.
+  BOOST_ASIO_DECL boost::asio::ip::address_v6 to_v6() const;
+
+  /// Get the address as a string in dotted decimal format.
+  BOOST_ASIO_DECL std::string to_string() const;
+
+  /// Get the address as a string in dotted decimal format.
+  BOOST_ASIO_DECL std::string to_string(boost::system::error_code& ec) const;
+
+  /// Create an address from an IPv4 address string in dotted decimal form,
+  /// or from an IPv6 address in hexadecimal notation.
+  BOOST_ASIO_DECL static address from_string(const char* str);
+
+  /// Create an address from an IPv4 address string in dotted decimal form,
+  /// or from an IPv6 address in hexadecimal notation.
+  BOOST_ASIO_DECL static address from_string(
+      const char* str, boost::system::error_code& ec);
+
+  /// Create an address from an IPv4 address string in dotted decimal form,
+  /// or from an IPv6 address in hexadecimal notation.
+  BOOST_ASIO_DECL static address from_string(const std::string& str);
+
+  /// Create an address from an IPv4 address string in dotted decimal form,
+  /// or from an IPv6 address in hexadecimal notation.
+  BOOST_ASIO_DECL static address from_string(
+      const std::string& str, boost::system::error_code& ec);
+
+  /// Determine whether the address is a loopback address.
+  BOOST_ASIO_DECL bool is_loopback() const;
+
+  /// Determine whether the address is unspecified.
+  BOOST_ASIO_DECL bool is_unspecified() const;
+
+  /// Determine whether the address is a multicast address.
+  BOOST_ASIO_DECL bool is_multicast() const;
+
+  /// Compare two addresses for equality.
+  BOOST_ASIO_DECL friend bool operator==(const address& a1, const address& a2);
+
+  /// Compare two addresses for inequality.
+  friend bool operator!=(const address& a1, const address& a2)
+  {
+    return !(a1 == a2);
+  }
+
+  /// Compare addresses for ordering.
+  BOOST_ASIO_DECL friend bool operator<(const address& a1, const address& a2);
+
+  /// Compare addresses for ordering.
+  friend bool operator>(const address& a1, const address& a2)
+  {
+    return a2 < a1;
+  }
+
+  /// Compare addresses for ordering.
+  friend bool operator<=(const address& a1, const address& a2)
+  {
+    return !(a2 < a1);
+  }
+
+  /// Compare addresses for ordering.
+  friend bool operator>=(const address& a1, const address& a2)
+  {
+    return !(a1 < a2);
+  }
+
+private:
+  // The type of the address.
+  enum { ipv4, ipv6 } type_;
+
+  // The underlying IPv4 address.
+  boost::asio::ip::address_v4 ipv4_address_;
+
+  // The underlying IPv6 address.
+  boost::asio::ip::address_v6 ipv6_address_;
+};
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/// Output an address as a string.
+/**
+ * Used to output a human-readable string for a specified address.
+ *
+ * @param os The output stream to which the string will be written.
+ *
+ * @param addr The address to be written.
+ *
+ * @return The output stream.
+ *
+ * @relates boost::asio::ip::address
+ */
+template <typename Elem, typename Traits>
+std::basic_ostream<Elem, Traits>& operator<<(
+    std::basic_ostream<Elem, Traits>& os, const address& addr);
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/ip/impl/address.hpp>
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/ip/impl/address.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_IP_ADDRESS_HPP
diff --git a/ext/patches/boost/asio/ip/address_v4.hpp b/ext/patches/boost/asio/ip/address_v4.hpp
new file mode 100644
index 0000000..d1761da
--- /dev/null
+++ b/ext/patches/boost/asio/ip/address_v4.hpp
@@ -0,0 +1,243 @@
+//
+// ip/address_v4.hpp
+// ~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_ADDRESS_V4_HPP
+#define BOOST_ASIO_IP_ADDRESS_V4_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <string>
+#include <boost/asio/detail/array.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/winsock_init.hpp>
+#include <boost/system/error_code.hpp>
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+# include <iosfwd>
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+/// Implements IP version 4 style addresses.
+/**
+ * The boost::asio::ip::address_v4 class provides the ability to use and
+ * manipulate IP version 4 addresses.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ */
+class address_v4
+{
+public:
+  /// The type used to represent an address as an array of bytes.
+  /**
+   * @note This type is defined in terms of the C++0x template @c std::array
+   * when it is available. Otherwise, it uses @c boost:array.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef array<unsigned char, 4> bytes_type;
+#else
+  typedef boost::asio::detail::array<unsigned char, 4> bytes_type;
+#endif
+
+  /// Default constructor.
+  address_v4()
+  {
+    addr_.s_addr = 0;
+  }
+
+  /// Construct an address from raw bytes.
+  BOOST_ASIO_DECL explicit address_v4(const bytes_type& bytes);
+
+  /// Construct an address from a unsigned long in host byte order.
+  BOOST_ASIO_DECL explicit address_v4(unsigned long addr);
+
+  /// Copy constructor.
+  address_v4(const address_v4& other)
+    : addr_(other.addr_)
+  {
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+  /// Move constructor.
+  address_v4(address_v4&& other)
+    : addr_(other.addr_)
+  {
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+  /// Assign from another address.
+  address_v4& operator=(const address_v4& other)
+  {
+    addr_ = other.addr_;
+    return *this;
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+  /// Move-assign from another address.
+  address_v4& operator=(address_v4&& other)
+  {
+    addr_ = other.addr_;
+    return *this;
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+  /// Get the address in bytes, in network byte order.
+  BOOST_ASIO_DECL bytes_type to_bytes() const;
+
+  /// Get the address as an unsigned long in host byte order
+  BOOST_ASIO_DECL unsigned long to_ulong() const;
+
+  /// Get the address as a string in dotted decimal format.
+  BOOST_ASIO_DECL std::string to_string() const;
+
+  /// Get the address as a string in dotted decimal format.
+  BOOST_ASIO_DECL std::string to_string(boost::system::error_code& ec) const;
+
+  /// Create an address from an IP address string in dotted decimal form.
+  BOOST_ASIO_DECL static address_v4 from_string(const char* str);
+
+  /// Create an address from an IP address string in dotted decimal form.
+  BOOST_ASIO_DECL static address_v4 from_string(
+      const char* str, boost::system::error_code& ec);
+
+  /// Create an address from an IP address string in dotted decimal form.
+  BOOST_ASIO_DECL static address_v4 from_string(const std::string& str);
+
+  /// Create an address from an IP address string in dotted decimal form.
+  BOOST_ASIO_DECL static address_v4 from_string(
+      const std::string& str, boost::system::error_code& ec);
+
+  /// Determine whether the address is a loopback address.
+  BOOST_ASIO_DECL bool is_loopback() const;
+
+  /// Determine whether the address is unspecified.
+  BOOST_ASIO_DECL bool is_unspecified() const;
+
+  /// Determine whether the address is a class A address.
+  BOOST_ASIO_DECL bool is_class_a() const;
+
+  /// Determine whether the address is a class B address.
+  BOOST_ASIO_DECL bool is_class_b() const;
+
+  /// Determine whether the address is a class C address.
+  BOOST_ASIO_DECL bool is_class_c() const;
+
+  /// Determine whether the address is a multicast address.
+  BOOST_ASIO_DECL bool is_multicast() const;
+
+  /// Compare two addresses for equality.
+  friend bool operator==(const address_v4& a1, const address_v4& a2)
+  {
+    return a1.addr_.s_addr == a2.addr_.s_addr;
+  }
+
+  /// Compare two addresses for inequality.
+  friend bool operator!=(const address_v4& a1, const address_v4& a2)
+  {
+    return a1.addr_.s_addr != a2.addr_.s_addr;
+  }
+
+  /// Compare addresses for ordering.
+  friend bool operator<(const address_v4& a1, const address_v4& a2)
+  {
+    return a1.to_ulong() < a2.to_ulong();
+  }
+
+  /// Compare addresses for ordering.
+  friend bool operator>(const address_v4& a1, const address_v4& a2)
+  {
+    return a1.to_ulong() > a2.to_ulong();
+  }
+
+  /// Compare addresses for ordering.
+  friend bool operator<=(const address_v4& a1, const address_v4& a2)
+  {
+    return a1.to_ulong() <= a2.to_ulong();
+  }
+
+  /// Compare addresses for ordering.
+  friend bool operator>=(const address_v4& a1, const address_v4& a2)
+  {
+    return a1.to_ulong() >= a2.to_ulong();
+  }
+
+  /// Obtain an address object that represents any address.
+  static address_v4 any()
+  {
+    return address_v4();
+  }
+
+  /// Obtain an address object that represents the loopback address.
+  static address_v4 loopback()
+  {
+    return address_v4(0x7F000001);
+  }
+
+  /// Obtain an address object that represents the broadcast address.
+  static address_v4 broadcast()
+  {
+    return address_v4(0xFFFFFFFF);
+  }
+
+  /// Obtain an address object that represents the broadcast address that
+  /// corresponds to the specified address and netmask.
+  BOOST_ASIO_DECL static address_v4 broadcast(
+      const address_v4& addr, const address_v4& mask);
+
+  /// Obtain the netmask that corresponds to the address, based on its address
+  /// class.
+  BOOST_ASIO_DECL static address_v4 netmask(const address_v4& addr);
+
+private:
+  // The underlying IPv4 address.
+  boost::asio::detail::in4_addr_type addr_;
+};
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/// Output an address as a string.
+/**
+ * Used to output a human-readable string for a specified address.
+ *
+ * @param os The output stream to which the string will be written.
+ *
+ * @param addr The address to be written.
+ *
+ * @return The output stream.
+ *
+ * @relates boost::asio::ip::address_v4
+ */
+template <typename Elem, typename Traits>
+std::basic_ostream<Elem, Traits>& operator<<(
+    std::basic_ostream<Elem, Traits>& os, const address_v4& addr);
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/ip/impl/address_v4.hpp>
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/ip/impl/address_v4.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_IP_ADDRESS_V4_HPP
diff --git a/ext/patches/boost/asio/ip/address_v6.hpp b/ext/patches/boost/asio/ip/address_v6.hpp
new file mode 100644
index 0000000..a60b6d3
--- /dev/null
+++ b/ext/patches/boost/asio/ip/address_v6.hpp
@@ -0,0 +1,248 @@
+//
+// ip/address_v6.hpp
+// ~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_ADDRESS_V6_HPP
+#define BOOST_ASIO_IP_ADDRESS_V6_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <string>
+#include <boost/asio/detail/array.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/winsock_init.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/asio/ip/address_v4.hpp>
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+# include <iosfwd>
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+/// Implements IP version 6 style addresses.
+/**
+ * The boost::asio::ip::address_v6 class provides the ability to use and
+ * manipulate IP version 6 addresses.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ */
+class address_v6
+{
+public:
+  /// The type used to represent an address as an array of bytes.
+  /**
+   * @note This type is defined in terms of the C++0x template @c std::array
+   * when it is available. Otherwise, it uses @c boost:array.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef array<unsigned char, 16> bytes_type;
+#else
+  typedef boost::asio::detail::array<unsigned char, 16> bytes_type;
+#endif
+
+  /// Default constructor.
+  BOOST_ASIO_DECL address_v6();
+
+  /// Construct an address from raw bytes and scope ID.
+  BOOST_ASIO_DECL explicit address_v6(const bytes_type& bytes,
+      unsigned long scope_id = 0);
+
+  /// Copy constructor.
+  BOOST_ASIO_DECL address_v6(const address_v6& other);
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+  /// Move constructor.
+  BOOST_ASIO_DECL address_v6(address_v6&& other);
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+  /// Assign from another address.
+  BOOST_ASIO_DECL address_v6& operator=(const address_v6& other);
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+  /// Move-assign from another address.
+  BOOST_ASIO_DECL address_v6& operator=(address_v6&& other);
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+  /// The scope ID of the address.
+  /**
+   * Returns the scope ID associated with the IPv6 address.
+   */
+  unsigned long scope_id() const
+  {
+    return scope_id_;
+  }
+
+  /// The scope ID of the address.
+  /**
+   * Modifies the scope ID associated with the IPv6 address.
+   */
+  void scope_id(unsigned long id)
+  {
+    scope_id_ = id;
+  }
+
+  /// Get the address in bytes, in network byte order.
+  BOOST_ASIO_DECL bytes_type to_bytes() const;
+
+  /// Get the address as a string.
+  BOOST_ASIO_DECL std::string to_string() const;
+
+  /// Get the address as a string.
+  BOOST_ASIO_DECL std::string to_string(boost::system::error_code& ec) const;
+
+  /// Create an address from an IP address string.
+  BOOST_ASIO_DECL static address_v6 from_string(const char* str);
+
+  /// Create an address from an IP address string.
+  BOOST_ASIO_DECL static address_v6 from_string(
+      const char* str, boost::system::error_code& ec);
+
+  /// Create an address from an IP address string.
+  BOOST_ASIO_DECL static address_v6 from_string(const std::string& str);
+
+  /// Create an address from an IP address string.
+  BOOST_ASIO_DECL static address_v6 from_string(
+      const std::string& str, boost::system::error_code& ec);
+
+  /// Converts an IPv4-mapped or IPv4-compatible address to an IPv4 address.
+  BOOST_ASIO_DECL address_v4 to_v4() const;
+
+  /// Determine whether the address is a loopback address.
+  BOOST_ASIO_DECL bool is_loopback() const;
+
+  /// Determine whether the address is unspecified.
+  BOOST_ASIO_DECL bool is_unspecified() const;
+
+  /// Determine whether the address is link local.
+  BOOST_ASIO_DECL bool is_link_local() const;
+
+  /// Determine whether the address is site local.
+  BOOST_ASIO_DECL bool is_site_local() const;
+
+  /// Determine whether the address is a mapped IPv4 address.
+  BOOST_ASIO_DECL bool is_v4_mapped() const;
+
+  /// Determine whether the address is an IPv4-compatible address.
+  BOOST_ASIO_DECL bool is_v4_compatible() const;
+
+  /// Determine whether the address is a multicast address.
+  BOOST_ASIO_DECL bool is_multicast() const;
+
+  /// Determine whether the address is a global multicast address.
+  BOOST_ASIO_DECL bool is_multicast_global() const;
+
+  /// Determine whether the address is a link-local multicast address.
+  BOOST_ASIO_DECL bool is_multicast_link_local() const;
+
+  /// Determine whether the address is a node-local multicast address.
+  BOOST_ASIO_DECL bool is_multicast_node_local() const;
+
+  /// Determine whether the address is a org-local multicast address.
+  BOOST_ASIO_DECL bool is_multicast_org_local() const;
+
+  /// Determine whether the address is a site-local multicast address.
+  BOOST_ASIO_DECL bool is_multicast_site_local() const;
+
+  /// Compare two addresses for equality.
+  BOOST_ASIO_DECL friend bool operator==(
+      const address_v6& a1, const address_v6& a2);
+
+  /// Compare two addresses for inequality.
+  friend bool operator!=(const address_v6& a1, const address_v6& a2)
+  {
+    return !(a1 == a2);
+  }
+
+  /// Compare addresses for ordering.
+  BOOST_ASIO_DECL friend bool operator<(
+      const address_v6& a1, const address_v6& a2);
+
+  /// Compare addresses for ordering.
+  friend bool operator>(const address_v6& a1, const address_v6& a2)
+  {
+    return a2 < a1;
+  }
+
+  /// Compare addresses for ordering.
+  friend bool operator<=(const address_v6& a1, const address_v6& a2)
+  {
+    return !(a2 < a1);
+  }
+
+  /// Compare addresses for ordering.
+  friend bool operator>=(const address_v6& a1, const address_v6& a2)
+  {
+    return !(a1 < a2);
+  }
+
+  /// Obtain an address object that represents any address.
+  static address_v6 any()
+  {
+    return address_v6();
+  }
+
+  /// Obtain an address object that represents the loopback address.
+  BOOST_ASIO_DECL static address_v6 loopback();
+
+  /// Create an IPv4-mapped IPv6 address.
+  BOOST_ASIO_DECL static address_v6 v4_mapped(const address_v4& addr);
+
+  /// Create an IPv4-compatible IPv6 address.
+  BOOST_ASIO_DECL static address_v6 v4_compatible(const address_v4& addr);
+
+private:
+  // The underlying IPv6 address.
+  boost::asio::detail::in6_addr_type addr_;
+
+  // The scope ID associated with the address.
+  unsigned long scope_id_;
+};
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/// Output an address as a string.
+/**
+ * Used to output a human-readable string for a specified address.
+ *
+ * @param os The output stream to which the string will be written.
+ *
+ * @param addr The address to be written.
+ *
+ * @return The output stream.
+ *
+ * @relates boost::asio::ip::address_v6
+ */
+template <typename Elem, typename Traits>
+std::basic_ostream<Elem, Traits>& operator<<(
+    std::basic_ostream<Elem, Traits>& os, const address_v6& addr);
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/ip/impl/address_v6.hpp>
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/ip/impl/address_v6.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_IP_ADDRESS_V6_HPP
diff --git a/ext/patches/boost/asio/ip/basic_endpoint.hpp b/ext/patches/boost/asio/ip/basic_endpoint.hpp
new file mode 100644
index 0000000..84b43a2
--- /dev/null
+++ b/ext/patches/boost/asio/ip/basic_endpoint.hpp
@@ -0,0 +1,265 @@
+//
+// ip/basic_endpoint.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_BASIC_ENDPOINT_HPP
+#define BOOST_ASIO_IP_BASIC_ENDPOINT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/ip/address.hpp>
+#include <boost/asio/ip/detail/endpoint.hpp>
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+# include <iosfwd>
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+/// Describes an endpoint for a version-independent IP socket.
+/**
+ * The boost::asio::ip::basic_endpoint class template describes an endpoint that
+ * may be associated with a particular socket.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ *
+ * @par Concepts:
+ * Endpoint.
+ */
+template <typename InternetProtocol>
+class basic_endpoint
+{
+public:
+  /// The protocol type associated with the endpoint.
+  typedef InternetProtocol protocol_type;
+
+  /// The type of the endpoint structure. This type is dependent on the
+  /// underlying implementation of the socket layer.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined data_type;
+#else
+  typedef boost::asio::detail::socket_addr_type data_type;
+#endif
+
+  /// Default constructor.
+  basic_endpoint()
+    : impl_()
+  {
+  }
+
+  /// Construct an endpoint using a port number, specified in the host's byte
+  /// order. The IP address will be the any address (i.e. INADDR_ANY or
+  /// in6addr_any). This constructor would typically be used for accepting new
+  /// connections.
+  /**
+   * @par Examples
+   * To initialise an IPv4 TCP endpoint for port 1234, use:
+   * @code
+   * boost::asio::ip::tcp::endpoint ep(boost::asio::ip::tcp::v4(), 1234);
+   * @endcode
+   *
+   * To specify an IPv6 UDP endpoint for port 9876, use:
+   * @code
+   * boost::asio::ip::udp::endpoint ep(boost::asio::ip::udp::v6(), 9876);
+   * @endcode
+   */
+  basic_endpoint(const InternetProtocol& internet_protocol,
+      unsigned short port_num)
+    : impl_(internet_protocol.family(), port_num)
+  {
+  }
+
+  /// Construct an endpoint using a port number and an IP address. This
+  /// constructor may be used for accepting connections on a specific interface
+  /// or for making a connection to a remote endpoint.
+  basic_endpoint(const boost::asio::ip::address& addr, unsigned short port_num)
+    : impl_(addr, port_num)
+  {
+  }
+
+  /// Copy constructor.
+  basic_endpoint(const basic_endpoint& other)
+    : impl_(other.impl_)
+  {
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+  /// Move constructor.
+  basic_endpoint(basic_endpoint&& other)
+    : impl_(other.impl_)
+  {
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+  /// Assign from another endpoint.
+  basic_endpoint& operator=(const basic_endpoint& other)
+  {
+    impl_ = other.impl_;
+    return *this;
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+  /// Move-assign from another endpoint.
+  basic_endpoint& operator=(basic_endpoint&& other)
+  {
+    impl_ = other.impl_;
+    return *this;
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+  /// The protocol associated with the endpoint.
+  protocol_type protocol() const
+  {
+    if (impl_.is_v4())
+      return InternetProtocol::v4();
+    return InternetProtocol::v6();
+  }
+
+  /// Get the underlying endpoint in the native type.
+  data_type* data()
+  {
+    return impl_.data();
+  }
+
+  /// Get the underlying endpoint in the native type.
+  const data_type* data() const
+  {
+    return impl_.data();
+  }
+
+  /// Get the underlying size of the endpoint in the native type.
+  std::size_t size() const
+  {
+    return impl_.size();
+  }
+
+  /// Set the underlying size of the endpoint in the native type.
+  void resize(std::size_t new_size)
+  {
+    impl_.resize(new_size);
+  }
+
+  /// Get the capacity of the endpoint in the native type.
+  std::size_t capacity() const
+  {
+    return impl_.capacity();
+  }
+
+  /// Get the port associated with the endpoint. The port number is always in
+  /// the host's byte order.
+  unsigned short port() const
+  {
+    return impl_.port();
+  }
+
+  /// Set the port associated with the endpoint. The port number is always in
+  /// the host's byte order.
+  void port(unsigned short port_num)
+  {
+    impl_.port(port_num);
+  }
+
+  /// Get the IP address associated with the endpoint.
+  boost::asio::ip::address address() const
+  {
+    return impl_.address();
+  }
+
+  /// Set the IP address associated with the endpoint.
+  void address(const boost::asio::ip::address& addr)
+  {
+    impl_.address(addr);
+  }
+
+  /// Compare two endpoints for equality.
+  friend bool operator==(const basic_endpoint<InternetProtocol>& e1,
+      const basic_endpoint<InternetProtocol>& e2)
+  {
+    return e1.impl_ == e2.impl_;
+  }
+
+  /// Compare two endpoints for inequality.
+  friend bool operator!=(const basic_endpoint<InternetProtocol>& e1,
+      const basic_endpoint<InternetProtocol>& e2)
+  {
+    return !(e1 == e2);
+  }
+
+  /// Compare endpoints for ordering.
+  friend bool operator<(const basic_endpoint<InternetProtocol>& e1,
+      const basic_endpoint<InternetProtocol>& e2)
+  {
+    return e1.impl_ < e2.impl_;
+  }
+
+  /// Compare endpoints for ordering.
+  friend bool operator>(const basic_endpoint<InternetProtocol>& e1,
+      const basic_endpoint<InternetProtocol>& e2)
+  {
+    return e2.impl_ < e1.impl_;
+  }
+
+  /// Compare endpoints for ordering.
+  friend bool operator<=(const basic_endpoint<InternetProtocol>& e1,
+      const basic_endpoint<InternetProtocol>& e2)
+  {
+    return !(e2 < e1);
+  }
+
+  /// Compare endpoints for ordering.
+  friend bool operator>=(const basic_endpoint<InternetProtocol>& e1,
+      const basic_endpoint<InternetProtocol>& e2)
+  {
+    return !(e1 < e2);
+  }
+
+private:
+  // The underlying IP endpoint.
+  boost::asio::ip::detail::endpoint impl_;
+};
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/// Output an endpoint as a string.
+/**
+ * Used to output a human-readable string for a specified endpoint.
+ *
+ * @param os The output stream to which the string will be written.
+ *
+ * @param endpoint The endpoint to be written.
+ *
+ * @return The output stream.
+ *
+ * @relates boost::asio::ip::basic_endpoint
+ */
+template <typename Elem, typename Traits, typename InternetProtocol>
+std::basic_ostream<Elem, Traits>& operator<<(
+    std::basic_ostream<Elem, Traits>& os,
+    const basic_endpoint<InternetProtocol>& endpoint);
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/ip/impl/basic_endpoint.hpp>
+
+#endif // BOOST_ASIO_IP_BASIC_ENDPOINT_HPP
diff --git a/ext/patches/boost/asio/ip/basic_resolver.hpp b/ext/patches/boost/asio/ip/basic_resolver.hpp
new file mode 100644
index 0000000..395696f
--- /dev/null
+++ b/ext/patches/boost/asio/ip/basic_resolver.hpp
@@ -0,0 +1,270 @@
+//
+// ip/basic_resolver.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_BASIC_RESOLVER_HPP
+#define BOOST_ASIO_IP_BASIC_RESOLVER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/basic_io_object.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/ip/basic_resolver_iterator.hpp>
+#include <boost/asio/ip/basic_resolver_query.hpp>
+#include <boost/asio/ip/resolver_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+/// Provides endpoint resolution functionality.
+/**
+ * The basic_resolver class template provides the ability to resolve a query
+ * to a list of endpoints.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ */
+template <typename InternetProtocol,
+    typename ResolverService = resolver_service<InternetProtocol> >
+class basic_resolver
+  : public basic_io_object<ResolverService>
+{
+public:
+  /// The protocol type.
+  typedef InternetProtocol protocol_type;
+
+  /// The endpoint type.
+  typedef typename InternetProtocol::endpoint endpoint_type;
+
+  /// The query type.
+  typedef basic_resolver_query<InternetProtocol> query;
+
+  /// The iterator type.
+  typedef basic_resolver_iterator<InternetProtocol> iterator;
+
+  /// Constructor.
+  /**
+   * This constructor creates a basic_resolver.
+   *
+   * @param io_service The io_service object that the resolver will use to
+   * dispatch handlers for any asynchronous operations performed on the timer.
+   */
+  explicit basic_resolver(boost::asio::io_service& io_service)
+    : basic_io_object<ResolverService>(io_service)
+  {
+  }
+
+  /// Cancel any asynchronous operations that are waiting on the resolver.
+  /**
+   * This function forces the completion of any pending asynchronous
+   * operations on the host resolver. The handler for each cancelled operation
+   * will be invoked with the boost::asio::error::operation_aborted error code.
+   */
+  void cancel()
+  {
+    return this->service.cancel(this->implementation);
+  }
+
+  /// Perform forward resolution of a query to a list of entries.
+  /**
+   * This function is used to resolve a query into a list of endpoint entries.
+   *
+   * @param q A query object that determines what endpoints will be returned.
+   *
+   * @returns A forward-only iterator that can be used to traverse the list
+   * of endpoint entries.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note A default constructed iterator represents the end of the list.
+   *
+   * A successful call to this function is guaranteed to return at least one
+   * entry.
+   */
+  iterator resolve(const query& q)
+  {
+    boost::system::error_code ec;
+    iterator i = this->service.resolve(this->implementation, q, ec);
+    boost::asio::detail::throw_error(ec, "resolve");
+    return i;
+  }
+
+  /// Perform forward resolution of a query to a list of entries.
+  /**
+   * This function is used to resolve a query into a list of endpoint entries.
+   *
+   * @param q A query object that determines what endpoints will be returned.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns A forward-only iterator that can be used to traverse the list
+   * of endpoint entries. Returns a default constructed iterator if an error
+   * occurs.
+   *
+   * @note A default constructed iterator represents the end of the list.
+   *
+   * A successful call to this function is guaranteed to return at least one
+   * entry.
+   */
+  iterator resolve(const query& q, boost::system::error_code& ec)
+  {
+    return this->service.resolve(this->implementation, q, ec);
+  }
+
+  /// Asynchronously perform forward resolution of a query to a list of entries.
+  /**
+   * This function is used to asynchronously resolve a query into a list of
+   * endpoint entries.
+   *
+   * @param q A query object that determines what endpoints will be returned.
+   *
+   * @param handler The handler to be called when the resolve operation
+   * completes. Copies will be made of the handler as required. The function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   resolver::iterator iterator             // Forward-only iterator that can
+   *                                           // be used to traverse the list
+   *                                           // of endpoint entries.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note A default constructed iterator represents the end of the list.
+   *
+   * A successful resolve operation is guaranteed to pass at least one entry to
+   * the handler.
+   */
+  template <typename ResolveHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ResolveHandler,
+      void (boost::system::error_code, iterator))
+  async_resolve(const query& q,
+      BOOST_ASIO_MOVE_ARG(ResolveHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ResolveHandler.
+    BOOST_ASIO_RESOLVE_HANDLER_CHECK(
+        ResolveHandler, handler, iterator) type_check;
+
+    return this->service.async_resolve(this->implementation, q,
+        BOOST_ASIO_MOVE_CAST(ResolveHandler)(handler));
+  }
+
+  /// Perform reverse resolution of an endpoint to a list of entries.
+  /**
+   * This function is used to resolve an endpoint into a list of endpoint
+   * entries.
+   *
+   * @param e An endpoint object that determines what endpoints will be
+   * returned.
+   *
+   * @returns A forward-only iterator that can be used to traverse the list
+   * of endpoint entries.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note A default constructed iterator represents the end of the list.
+   *
+   * A successful call to this function is guaranteed to return at least one
+   * entry.
+   */
+  iterator resolve(const endpoint_type& e)
+  {
+    boost::system::error_code ec;
+    iterator i = this->service.resolve(this->implementation, e, ec);
+    boost::asio::detail::throw_error(ec, "resolve");
+    return i;
+  }
+
+  /// Perform reverse resolution of an endpoint to a list of entries.
+  /**
+   * This function is used to resolve an endpoint into a list of endpoint
+   * entries.
+   *
+   * @param e An endpoint object that determines what endpoints will be
+   * returned.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns A forward-only iterator that can be used to traverse the list
+   * of endpoint entries. Returns a default constructed iterator if an error
+   * occurs.
+   *
+   * @note A default constructed iterator represents the end of the list.
+   *
+   * A successful call to this function is guaranteed to return at least one
+   * entry.
+   */
+  iterator resolve(const endpoint_type& e, boost::system::error_code& ec)
+  {
+    return this->service.resolve(this->implementation, e, ec);
+  }
+
+  /// Asynchronously perform reverse resolution of an endpoint to a list of
+  /// entries.
+  /**
+   * This function is used to asynchronously resolve an endpoint into a list of
+   * endpoint entries.
+   *
+   * @param e An endpoint object that determines what endpoints will be
+   * returned.
+   *
+   * @param handler The handler to be called when the resolve operation
+   * completes. Copies will be made of the handler as required. The function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   resolver::iterator iterator             // Forward-only iterator that can
+   *                                           // be used to traverse the list
+   *                                           // of endpoint entries.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note A default constructed iterator represents the end of the list.
+   *
+   * A successful resolve operation is guaranteed to pass at least one entry to
+   * the handler.
+   */
+  template <typename ResolveHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ResolveHandler,
+      void (boost::system::error_code, iterator))
+  async_resolve(const endpoint_type& e,
+      BOOST_ASIO_MOVE_ARG(ResolveHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ResolveHandler.
+    BOOST_ASIO_RESOLVE_HANDLER_CHECK(
+        ResolveHandler, handler, iterator) type_check;
+
+    return this->service.async_resolve(this->implementation, e,
+        BOOST_ASIO_MOVE_CAST(ResolveHandler)(handler));
+  }
+};
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_BASIC_RESOLVER_HPP
diff --git a/ext/patches/boost/asio/ip/basic_resolver_entry.hpp b/ext/patches/boost/asio/ip/basic_resolver_entry.hpp
new file mode 100644
index 0000000..b25e4e4
--- /dev/null
+++ b/ext/patches/boost/asio/ip/basic_resolver_entry.hpp
@@ -0,0 +1,96 @@
+//
+// ip/basic_resolver_entry.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_BASIC_RESOLVER_ENTRY_HPP
+#define BOOST_ASIO_IP_BASIC_RESOLVER_ENTRY_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <string>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+/// An entry produced by a resolver.
+/**
+ * The boost::asio::ip::basic_resolver_entry class template describes an entry
+ * as returned by a resolver.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ */
+template <typename InternetProtocol>
+class basic_resolver_entry
+{
+public:
+  /// The protocol type associated with the endpoint entry.
+  typedef InternetProtocol protocol_type;
+
+  /// The endpoint type associated with the endpoint entry.
+  typedef typename InternetProtocol::endpoint endpoint_type;
+
+  /// Default constructor.
+  basic_resolver_entry()
+  {
+  }
+
+  /// Construct with specified endpoint, host name and service name.
+  basic_resolver_entry(const endpoint_type& ep,
+      const std::string& host, const std::string& service)
+    : endpoint_(ep),
+      host_name_(host),
+      service_name_(service)
+  {
+  }
+
+  /// Get the endpoint associated with the entry.
+  endpoint_type endpoint() const
+  {
+    return endpoint_;
+  }
+
+  /// Convert to the endpoint associated with the entry.
+  operator endpoint_type() const
+  {
+    return endpoint_;
+  }
+
+  /// Get the host name associated with the entry.
+  std::string host_name() const
+  {
+    return host_name_;
+  }
+
+  /// Get the service name associated with the entry.
+  std::string service_name() const
+  {
+    return service_name_;
+  }
+
+private:
+  endpoint_type endpoint_;
+  std::string host_name_;
+  std::string service_name_;
+};
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_BASIC_RESOLVER_ENTRY_HPP
diff --git a/ext/patches/boost/asio/ip/basic_resolver_iterator.hpp b/ext/patches/boost/asio/ip/basic_resolver_iterator.hpp
new file mode 100644
index 0000000..ab14527
--- /dev/null
+++ b/ext/patches/boost/asio/ip/basic_resolver_iterator.hpp
@@ -0,0 +1,262 @@
+//
+// ip/basic_resolver_iterator.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_BASIC_RESOLVER_ITERATOR_HPP
+#define BOOST_ASIO_IP_BASIC_RESOLVER_ITERATOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <cstring>
+#include <iterator>
+#include <string>
+#include <vector>
+#include <boost/asio/detail/shared_ptr.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/ip/basic_resolver_entry.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/winrt_utils.hpp>
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+/// An iterator over the entries produced by a resolver.
+/**
+ * The boost::asio::ip::basic_resolver_iterator class template is used to define
+ * iterators over the results returned by a resolver.
+ *
+ * The iterator's value_type, obtained when the iterator is dereferenced, is:
+ * @code const basic_resolver_entry<InternetProtocol> @endcode
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ */
+template <typename InternetProtocol>
+class basic_resolver_iterator
+{
+public:
+  /// The type used for the distance between two iterators.
+  typedef std::ptrdiff_t difference_type;
+
+  /// The type of the value pointed to by the iterator.
+  typedef basic_resolver_entry<InternetProtocol> value_type;
+
+  /// The type of the result of applying operator->() to the iterator.
+  typedef const basic_resolver_entry<InternetProtocol>* pointer;
+
+  /// The type of the result of applying operator*() to the iterator.
+  typedef const basic_resolver_entry<InternetProtocol>& reference;
+
+  /// The iterator category.
+  typedef std::forward_iterator_tag iterator_category;
+
+  /// Default constructor creates an end iterator.
+  basic_resolver_iterator()
+    : index_(0)
+  {
+  }
+
+  /// Create an iterator from an addrinfo list returned by getaddrinfo.
+  static basic_resolver_iterator create(
+      boost::asio::detail::addrinfo_type* address_info,
+      const std::string& host_name, const std::string& service_name)
+  {
+    basic_resolver_iterator iter;
+    if (!address_info)
+      return iter;
+
+    std::string actual_host_name = host_name;
+    if (address_info->ai_canonname)
+      actual_host_name = address_info->ai_canonname;
+
+    iter.values_.reset(new values_type);
+
+    while (address_info)
+    {
+      if (address_info->ai_family == BOOST_ASIO_OS_DEF(AF_INET)
+          || address_info->ai_family == BOOST_ASIO_OS_DEF(AF_INET6))
+      {
+        using namespace std; // For memcpy.
+        typename InternetProtocol::endpoint endpoint;
+        endpoint.resize(static_cast<std::size_t>(address_info->ai_addrlen));
+        memcpy(endpoint.data(), address_info->ai_addr,
+            address_info->ai_addrlen);
+        iter.values_->push_back(
+            basic_resolver_entry<InternetProtocol>(endpoint,
+              actual_host_name, service_name));
+      }
+      address_info = address_info->ai_next;
+    }
+
+    return iter;
+  }
+
+  /// Create an iterator from an endpoint, host name and service name.
+  static basic_resolver_iterator create(
+      const typename InternetProtocol::endpoint& endpoint,
+      const std::string& host_name, const std::string& service_name)
+  {
+    basic_resolver_iterator iter;
+    iter.values_.reset(new values_type);
+    iter.values_->push_back(
+        basic_resolver_entry<InternetProtocol>(
+          endpoint, host_name, service_name));
+    return iter;
+  }
+
+  /// Create an iterator from a sequence of endpoints, host and service name.
+  template <typename EndpointIterator>
+  static basic_resolver_iterator create(
+      EndpointIterator begin, EndpointIterator end,
+      const std::string& host_name, const std::string& service_name)
+  {
+    basic_resolver_iterator iter;
+    if (begin != end)
+    {
+      iter.values_.reset(new values_type);
+      for (EndpointIterator ep_iter = begin; ep_iter != end; ++ep_iter)
+      {
+        iter.values_->push_back(
+            basic_resolver_entry<InternetProtocol>(
+              *ep_iter, host_name, service_name));
+      }
+    }
+    return iter;
+  }
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  /// Create an iterator from a Windows Runtime list of EndpointPair objects.
+  static basic_resolver_iterator create(
+      Windows::Foundation::Collections::IVectorView<
+        Windows::Networking::EndpointPair^>^ endpoints,
+      const boost::asio::detail::addrinfo_type& hints,
+      const std::string& host_name, const std::string& service_name)
+  {
+    basic_resolver_iterator iter;
+    if (endpoints->Size)
+    {
+      iter.values_.reset(new values_type);
+      for (unsigned int i = 0; i < endpoints->Size; ++i)
+      {
+        auto pair = endpoints->GetAt(i);
+
+        if (hints.ai_family == BOOST_ASIO_OS_DEF(AF_INET)
+            && pair->RemoteHostName->Type
+              != Windows::Networking::HostNameType::Ipv4)
+          continue;
+
+        if (hints.ai_family == BOOST_ASIO_OS_DEF(AF_INET6)
+            && pair->RemoteHostName->Type
+              != Windows::Networking::HostNameType::Ipv6)
+          continue;
+
+        iter.values_->push_back(
+            basic_resolver_entry<InternetProtocol>(
+              typename InternetProtocol::endpoint(
+                ip::address::from_string(
+                  boost::asio::detail::winrt_utils::string(
+                    pair->RemoteHostName->CanonicalName)),
+                boost::asio::detail::winrt_utils::integer(
+                  pair->RemoteServiceName)),
+              host_name, service_name));
+      }
+    }
+    return iter;
+  }
+#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
+
+  /// Dereference an iterator.
+  const basic_resolver_entry<InternetProtocol>& operator*() const
+  {
+    return dereference();
+  }
+
+  /// Dereference an iterator.
+  const basic_resolver_entry<InternetProtocol>* operator->() const
+  {
+    return &dereference();
+  }
+
+  /// Increment operator (prefix).
+  basic_resolver_iterator& operator++()
+  {
+    increment();
+    return *this;
+  }
+
+  /// Increment operator (postfix).
+  basic_resolver_iterator operator++(int)
+  {
+    basic_resolver_iterator tmp(*this);
+    ++*this;
+    return tmp;
+  }
+
+  /// Test two iterators for equality.
+  friend bool operator==(const basic_resolver_iterator& a,
+      const basic_resolver_iterator& b)
+  {
+    return a.equal(b);
+  }
+
+  /// Test two iterators for inequality.
+  friend bool operator!=(const basic_resolver_iterator& a,
+      const basic_resolver_iterator& b)
+  {
+    return !a.equal(b);
+  }
+
+private:
+  void increment()
+  {
+    if (++index_ == values_->size())
+    {
+      // Reset state to match a default constructed end iterator.
+      values_.reset();
+      index_ = 0;
+    }
+  }
+
+  bool equal(const basic_resolver_iterator& other) const
+  {
+    if (!values_ && !other.values_)
+      return true;
+    if (values_ != other.values_)
+      return false;
+    return index_ == other.index_;
+  }
+
+  const basic_resolver_entry<InternetProtocol>& dereference() const
+  {
+    return (*values_)[index_];
+  }
+
+  typedef std::vector<basic_resolver_entry<InternetProtocol> > values_type;
+  boost::asio::detail::shared_ptr<values_type> values_;
+  std::size_t index_;
+};
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_BASIC_RESOLVER_ITERATOR_HPP
diff --git a/ext/patches/boost/asio/ip/basic_resolver_query.hpp b/ext/patches/boost/asio/ip/basic_resolver_query.hpp
new file mode 100644
index 0000000..47cbe86
--- /dev/null
+++ b/ext/patches/boost/asio/ip/basic_resolver_query.hpp
@@ -0,0 +1,246 @@
+//
+// ip/basic_resolver_query.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_BASIC_RESOLVER_QUERY_HPP
+#define BOOST_ASIO_IP_BASIC_RESOLVER_QUERY_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <string>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/ip/resolver_query_base.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+/// An query to be passed to a resolver.
+/**
+ * The boost::asio::ip::basic_resolver_query class template describes a query
+ * that can be passed to a resolver.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ */
+template <typename InternetProtocol>
+class basic_resolver_query
+  : public resolver_query_base
+{
+public:
+  /// The protocol type associated with the endpoint query.
+  typedef InternetProtocol protocol_type;
+
+  /// Construct with specified service name for any protocol.
+  /**
+   * This constructor is typically used to perform name resolution for local
+   * service binding.
+   *
+   * @param service A string identifying the requested service. This may be a
+   * descriptive name or a numeric string corresponding to a port number.
+   *
+   * @param resolve_flags A set of flags that determine how name resolution
+   * should be performed. The default flags are suitable for local service
+   * binding.
+   *
+   * @note On POSIX systems, service names are typically defined in the file
+   * <tt>/etc/services</tt>. On Windows, service names may be found in the file
+   * <tt>c:\\windows\\system32\\drivers\\etc\\services</tt>. Operating systems
+   * may use additional locations when resolving service names.
+   */
+  basic_resolver_query(const std::string& service,
+      resolver_query_base::flags resolve_flags = passive | address_configured)
+    : hints_(),
+      host_name_(),
+      service_name_(service)
+  {
+    typename InternetProtocol::endpoint endpoint;
+    hints_.ai_flags = static_cast<int>(resolve_flags);
+    hints_.ai_family = PF_UNSPEC;
+    hints_.ai_socktype = endpoint.protocol().type();
+    hints_.ai_protocol = endpoint.protocol().protocol();
+    hints_.ai_addrlen = 0;
+    hints_.ai_canonname = 0;
+    hints_.ai_addr = 0;
+    hints_.ai_next = 0;
+  }
+
+  /// Construct with specified service name for a given protocol.
+  /**
+   * This constructor is typically used to perform name resolution for local
+   * service binding with a specific protocol version.
+   *
+   * @param protocol A protocol object, normally representing either the IPv4 or
+   * IPv6 version of an internet protocol.
+   *
+   * @param service A string identifying the requested service. This may be a
+   * descriptive name or a numeric string corresponding to a port number.
+   *
+   * @param resolve_flags A set of flags that determine how name resolution
+   * should be performed. The default flags are suitable for local service
+   * binding.
+   *
+   * @note On POSIX systems, service names are typically defined in the file
+   * <tt>/etc/services</tt>. On Windows, service names may be found in the file
+   * <tt>c:\\windows\\system32\\drivers\\etc\\services</tt>. Operating systems
+   * may use additional locations when resolving service names.
+   */
+  basic_resolver_query(const protocol_type& protocol,
+      const std::string& service,
+      resolver_query_base::flags resolve_flags = passive | address_configured)
+    : hints_(),
+      host_name_(),
+      service_name_(service)
+  {
+    hints_.ai_flags = static_cast<int>(resolve_flags);
+    hints_.ai_family = protocol.family();
+    hints_.ai_socktype = protocol.type();
+    hints_.ai_protocol = protocol.protocol();
+    hints_.ai_addrlen = 0;
+    hints_.ai_canonname = 0;
+    hints_.ai_addr = 0;
+    hints_.ai_next = 0;
+  }
+
+  /// Construct with specified host name and service name for any protocol.
+  /**
+   * This constructor is typically used to perform name resolution for
+   * communication with remote hosts.
+   *
+   * @param host A string identifying a location. May be a descriptive name or
+   * a numeric address string. If an empty string and the passive flag has been
+   * specified, the resolved endpoints are suitable for local service binding.
+   * If an empty string and passive is not specified, the resolved endpoints
+   * will use the loopback address.
+   *
+   * @param service A string identifying the requested service. This may be a
+   * descriptive name or a numeric string corresponding to a port number. May
+   * be an empty string, in which case all resolved endpoints will have a port
+   * number of 0.
+   *
+   * @param resolve_flags A set of flags that determine how name resolution
+   * should be performed. The default flags are suitable for communication with
+   * remote hosts.
+   *
+   * @note On POSIX systems, host names may be locally defined in the file
+   * <tt>/etc/hosts</tt>. On Windows, host names may be defined in the file
+   * <tt>c:\\windows\\system32\\drivers\\etc\\hosts</tt>. Remote host name
+   * resolution is performed using DNS. Operating systems may use additional
+   * locations when resolving host names (such as NETBIOS names on Windows).
+   *
+   * On POSIX systems, service names are typically defined in the file
+   * <tt>/etc/services</tt>. On Windows, service names may be found in the file
+   * <tt>c:\\windows\\system32\\drivers\\etc\\services</tt>. Operating systems
+   * may use additional locations when resolving service names.
+   */
+  basic_resolver_query(const std::string& host, const std::string& service,
+      resolver_query_base::flags resolve_flags = address_configured)
+    : hints_(),
+      host_name_(host),
+      service_name_(service)
+  {
+    typename InternetProtocol::endpoint endpoint;
+    hints_.ai_flags = static_cast<int>(resolve_flags);
+    hints_.ai_family = BOOST_ASIO_OS_DEF(AF_UNSPEC);
+    hints_.ai_socktype = endpoint.protocol().type();
+    hints_.ai_protocol = endpoint.protocol().protocol();
+    hints_.ai_addrlen = 0;
+    hints_.ai_canonname = 0;
+    hints_.ai_addr = 0;
+    hints_.ai_next = 0;
+  }
+
+  /// Construct with specified host name and service name for a given protocol.
+  /**
+   * This constructor is typically used to perform name resolution for
+   * communication with remote hosts.
+   *
+   * @param protocol A protocol object, normally representing either the IPv4 or
+   * IPv6 version of an internet protocol.
+   *
+   * @param host A string identifying a location. May be a descriptive name or
+   * a numeric address string. If an empty string and the passive flag has been
+   * specified, the resolved endpoints are suitable for local service binding.
+   * If an empty string and passive is not specified, the resolved endpoints
+   * will use the loopback address.
+   *
+   * @param service A string identifying the requested service. This may be a
+   * descriptive name or a numeric string corresponding to a port number. May
+   * be an empty string, in which case all resolved endpoints will have a port
+   * number of 0.
+   *
+   * @param resolve_flags A set of flags that determine how name resolution
+   * should be performed. The default flags are suitable for communication with
+   * remote hosts.
+   *
+   * @note On POSIX systems, host names may be locally defined in the file
+   * <tt>/etc/hosts</tt>. On Windows, host names may be defined in the file
+   * <tt>c:\\windows\\system32\\drivers\\etc\\hosts</tt>. Remote host name
+   * resolution is performed using DNS. Operating systems may use additional
+   * locations when resolving host names (such as NETBIOS names on Windows).
+   *
+   * On POSIX systems, service names are typically defined in the file
+   * <tt>/etc/services</tt>. On Windows, service names may be found in the file
+   * <tt>c:\\windows\\system32\\drivers\\etc\\services</tt>. Operating systems
+   * may use additional locations when resolving service names.
+   */
+  basic_resolver_query(const protocol_type& protocol,
+      const std::string& host, const std::string& service,
+      resolver_query_base::flags resolve_flags = address_configured)
+    : hints_(),
+      host_name_(host),
+      service_name_(service)
+  {
+    hints_.ai_flags = static_cast<int>(resolve_flags);
+    hints_.ai_family = protocol.family();
+    hints_.ai_socktype = protocol.type();
+    hints_.ai_protocol = protocol.protocol();
+    hints_.ai_addrlen = 0;
+    hints_.ai_canonname = 0;
+    hints_.ai_addr = 0;
+    hints_.ai_next = 0;
+  }
+
+  /// Get the hints associated with the query.
+  const boost::asio::detail::addrinfo_type& hints() const
+  {
+    return hints_;
+  }
+
+  /// Get the host name associated with the query.
+  std::string host_name() const
+  {
+    return host_name_;
+  }
+
+  /// Get the service name associated with the query.
+  std::string service_name() const
+  {
+    return service_name_;
+  }
+
+private:
+  boost::asio::detail::addrinfo_type hints_;
+  std::string host_name_;
+  std::string service_name_;
+};
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_BASIC_RESOLVER_QUERY_HPP
diff --git a/ext/patches/boost/asio/ip/detail/endpoint.hpp b/ext/patches/boost/asio/ip/detail/endpoint.hpp
new file mode 100644
index 0000000..184f4b9
--- /dev/null
+++ b/ext/patches/boost/asio/ip/detail/endpoint.hpp
@@ -0,0 +1,141 @@
+//
+// ip/detail/endpoint.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_DETAIL_ENDPOINT_HPP
+#define BOOST_ASIO_IP_DETAIL_ENDPOINT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <string>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/winsock_init.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/asio/ip/address.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+namespace detail {
+
+// Helper class for implementating an IP endpoint.
+class endpoint
+{
+public:
+  // Default constructor.
+  BOOST_ASIO_DECL endpoint();
+
+  // Construct an endpoint using a family and port number.
+  BOOST_ASIO_DECL endpoint(int family, unsigned short port_num);
+
+  // Construct an endpoint using an address and port number.
+  BOOST_ASIO_DECL endpoint(const boost::asio::ip::address& addr,
+      unsigned short port_num);
+
+  // Copy constructor.
+  endpoint(const endpoint& other)
+    : data_(other.data_)
+  {
+  }
+
+  // Assign from another endpoint.
+  endpoint& operator=(const endpoint& other)
+  {
+    data_ = other.data_;
+    return *this;
+  }
+
+  // Get the underlying endpoint in the native type.
+  boost::asio::detail::socket_addr_type* data()
+  {
+    return &data_.base;
+  }
+
+  // Get the underlying endpoint in the native type.
+  const boost::asio::detail::socket_addr_type* data() const
+  {
+    return &data_.base;
+  }
+
+  // Get the underlying size of the endpoint in the native type.
+  std::size_t size() const
+  {
+    if (is_v4())
+      return sizeof(boost::asio::detail::sockaddr_in4_type);
+    else
+      return sizeof(boost::asio::detail::sockaddr_in6_type);
+  }
+
+  // Set the underlying size of the endpoint in the native type.
+  BOOST_ASIO_DECL void resize(std::size_t new_size);
+
+  // Get the capacity of the endpoint in the native type.
+  std::size_t capacity() const
+  {
+    return sizeof(data_);
+  }
+
+  // Get the port associated with the endpoint.
+  BOOST_ASIO_DECL unsigned short port() const;
+
+  // Set the port associated with the endpoint.
+  BOOST_ASIO_DECL void port(unsigned short port_num);
+
+  // Get the IP address associated with the endpoint.
+  BOOST_ASIO_DECL boost::asio::ip::address address() const;
+
+  // Set the IP address associated with the endpoint.
+  BOOST_ASIO_DECL void address(const boost::asio::ip::address& addr);
+
+  // Compare two endpoints for equality.
+  BOOST_ASIO_DECL friend bool operator==(
+      const endpoint& e1, const endpoint& e2);
+
+  // Compare endpoints for ordering.
+  BOOST_ASIO_DECL friend bool operator<(
+      const endpoint& e1, const endpoint& e2);
+
+  // Determine whether the endpoint is IPv4.
+  bool is_v4() const
+  {
+    return data_.base.sa_family == BOOST_ASIO_OS_DEF(AF_INET);
+  }
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+  // Convert to a string.
+  BOOST_ASIO_DECL std::string to_string(boost::system::error_code& ec) const;
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+private:
+  // The underlying IP socket address.
+  union data_union
+  {
+    boost::asio::detail::socket_addr_type base;
+    boost::asio::detail::sockaddr_in4_type v4;
+    boost::asio::detail::sockaddr_in6_type v6;
+  } data_;
+};
+
+} // namespace detail
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/ip/detail/impl/endpoint.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_IP_DETAIL_ENDPOINT_HPP
diff --git a/ext/patches/boost/asio/ip/detail/impl/endpoint.ipp b/ext/patches/boost/asio/ip/detail/impl/endpoint.ipp
new file mode 100644
index 0000000..5921695
--- /dev/null
+++ b/ext/patches/boost/asio/ip/detail/impl/endpoint.ipp
@@ -0,0 +1,206 @@
+//
+// ip/detail/impl/endpoint.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_DETAIL_IMPL_ENDPOINT_IPP
+#define BOOST_ASIO_IP_DETAIL_IMPL_ENDPOINT_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstring>
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+# include <sstream>
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/ip/detail/endpoint.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+namespace detail {
+
+endpoint::endpoint()
+  : data_()
+{
+  data_.v4.sin_family = BOOST_ASIO_OS_DEF(AF_INET);
+  data_.v4.sin_port = 0;
+  data_.v4.sin_addr.s_addr = BOOST_ASIO_OS_DEF(INADDR_ANY);
+}
+
+endpoint::endpoint(int family, unsigned short port_num)
+  : data_()
+{
+  using namespace std; // For memcpy.
+  if (family == BOOST_ASIO_OS_DEF(AF_INET))
+  {
+    data_.v4.sin_family = BOOST_ASIO_OS_DEF(AF_INET);
+    data_.v4.sin_port =
+      boost::asio::detail::socket_ops::host_to_network_short(port_num);
+    data_.v4.sin_addr.s_addr = BOOST_ASIO_OS_DEF(INADDR_ANY);
+  }
+  else
+  {
+    data_.v6.sin6_family = BOOST_ASIO_OS_DEF(AF_INET6);
+    data_.v6.sin6_port =
+      boost::asio::detail::socket_ops::host_to_network_short(port_num);
+    data_.v6.sin6_flowinfo = 0;
+    data_.v6.sin6_addr.s6_addr[0] = 0; data_.v6.sin6_addr.s6_addr[1] = 0;
+    data_.v6.sin6_addr.s6_addr[2] = 0, data_.v6.sin6_addr.s6_addr[3] = 0;
+    data_.v6.sin6_addr.s6_addr[4] = 0, data_.v6.sin6_addr.s6_addr[5] = 0;
+    data_.v6.sin6_addr.s6_addr[6] = 0, data_.v6.sin6_addr.s6_addr[7] = 0;
+    data_.v6.sin6_addr.s6_addr[8] = 0, data_.v6.sin6_addr.s6_addr[9] = 0;
+    data_.v6.sin6_addr.s6_addr[10] = 0, data_.v6.sin6_addr.s6_addr[11] = 0;
+    data_.v6.sin6_addr.s6_addr[12] = 0, data_.v6.sin6_addr.s6_addr[13] = 0;
+    data_.v6.sin6_addr.s6_addr[14] = 0, data_.v6.sin6_addr.s6_addr[15] = 0;
+    data_.v6.sin6_scope_id = 0;
+  }
+}
+
+endpoint::endpoint(const boost::asio::ip::address& addr,
+    unsigned short port_num)
+  : data_()
+{
+  using namespace std; // For memcpy.
+  if (addr.is_v4())
+  {
+    data_.v4.sin_family = BOOST_ASIO_OS_DEF(AF_INET);
+    data_.v4.sin_port =
+      boost::asio::detail::socket_ops::host_to_network_short(port_num);
+    data_.v4.sin_addr.s_addr =
+      boost::asio::detail::socket_ops::host_to_network_long(
+          static_cast<boost::asio::detail::u_long_type>(
+            addr.to_v4().to_ulong()));
+  }
+  else
+  {
+    data_.v6.sin6_family = BOOST_ASIO_OS_DEF(AF_INET6);
+    data_.v6.sin6_port =
+      boost::asio::detail::socket_ops::host_to_network_short(port_num);
+    data_.v6.sin6_flowinfo = 0;
+    boost::asio::ip::address_v6 v6_addr = addr.to_v6();
+    boost::asio::ip::address_v6::bytes_type bytes = v6_addr.to_bytes();
+    memcpy(data_.v6.sin6_addr.s6_addr, bytes.data(), 16);
+    data_.v6.sin6_scope_id =
+      static_cast<boost::asio::detail::u_long_type>(
+        v6_addr.scope_id());
+  }
+}
+
+void endpoint::resize(std::size_t new_size)
+{
+  if (new_size > sizeof(boost::asio::detail::sockaddr_storage_type))
+  {
+    boost::system::error_code ec(boost::asio::error::invalid_argument);
+    boost::asio::detail::throw_error(ec);
+  }
+}
+
+unsigned short endpoint::port() const
+{
+  if (is_v4())
+  {
+    return boost::asio::detail::socket_ops::network_to_host_short(
+        data_.v4.sin_port);
+  }
+  else
+  {
+    return boost::asio::detail::socket_ops::network_to_host_short(
+        data_.v6.sin6_port);
+  }
+}
+
+void endpoint::port(unsigned short port_num)
+{
+  if (is_v4())
+  {
+    data_.v4.sin_port
+      = boost::asio::detail::socket_ops::host_to_network_short(port_num);
+  }
+  else
+  {
+    data_.v6.sin6_port
+      = boost::asio::detail::socket_ops::host_to_network_short(port_num);
+  }
+}
+
+boost::asio::ip::address endpoint::address() const
+{
+  using namespace std; // For memcpy.
+  if (is_v4())
+  {
+    return boost::asio::ip::address_v4(
+        boost::asio::detail::socket_ops::network_to_host_long(
+          data_.v4.sin_addr.s_addr));
+  }
+  else
+  {
+    boost::asio::ip::address_v6::bytes_type bytes;
+#if defined(BOOST_ASIO_HAS_STD_ARRAY)
+    memcpy(bytes.data(), data_.v6.sin6_addr.s6_addr, 16);
+#else // defined(BOOST_ASIO_HAS_STD_ARRAY)
+    memcpy(bytes.elems, data_.v6.sin6_addr.s6_addr, 16);
+#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
+    return boost::asio::ip::address_v6(bytes, data_.v6.sin6_scope_id);
+  }
+}
+
+void endpoint::address(const boost::asio::ip::address& addr)
+{
+  endpoint tmp_endpoint(addr, port());
+  data_ = tmp_endpoint.data_;
+}
+
+bool operator==(const endpoint& e1, const endpoint& e2)
+{
+  return e1.address() == e2.address() && e1.port() == e2.port();
+}
+
+bool operator<(const endpoint& e1, const endpoint& e2)
+{
+  if (e1.address() < e2.address())
+    return true;
+  if (e1.address() != e2.address())
+    return false;
+  return e1.port() < e2.port();
+}
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+std::string endpoint::to_string(boost::system::error_code& ec) const
+{
+  std::string a = address().to_string(ec);
+  if (ec)
+    return std::string();
+
+  std::ostringstream tmp_os;
+  tmp_os.imbue(std::locale::classic());
+  if (is_v4())
+    tmp_os << a;
+  else
+    tmp_os << '[' << a << ']';
+  tmp_os << ':' << port();
+
+  return tmp_os.str();
+}
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+} // namespace detail
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_DETAIL_IMPL_ENDPOINT_IPP
diff --git a/ext/patches/boost/asio/ip/detail/socket_option.hpp b/ext/patches/boost/asio/ip/detail/socket_option.hpp
new file mode 100644
index 0000000..c8e14e2
--- /dev/null
+++ b/ext/patches/boost/asio/ip/detail/socket_option.hpp
@@ -0,0 +1,571 @@
+//
+// detail/socket_option.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_DETAIL_SOCKET_OPTION_HPP
+#define BOOST_ASIO_IP_DETAIL_SOCKET_OPTION_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <cstring>
+#include <stdexcept>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/throw_exception.hpp>
+#include <boost/asio/ip/address.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+namespace detail {
+namespace socket_option {
+
+// Helper template for implementing multicast enable loopback options.
+template <int IPv4_Level, int IPv4_Name, int IPv6_Level, int IPv6_Name>
+class multicast_enable_loopback
+{
+public:
+#if defined(__sun) || defined(__osf__)
+  typedef unsigned char ipv4_value_type;
+  typedef unsigned char ipv6_value_type;
+#elif defined(_AIX) || defined(__hpux) || defined(__QNXNTO__) 
+  typedef unsigned char ipv4_value_type;
+  typedef unsigned int ipv6_value_type;
+#else
+  typedef int ipv4_value_type;
+  typedef int ipv6_value_type;
+#endif
+
+  // Default constructor.
+  multicast_enable_loopback()
+    : ipv4_value_(0),
+      ipv6_value_(0)
+  {
+  }
+
+  // Construct with a specific option value.
+  explicit multicast_enable_loopback(bool v)
+    : ipv4_value_(v ? 1 : 0),
+      ipv6_value_(v ? 1 : 0)
+  {
+  }
+
+  // Set the value of the boolean.
+  multicast_enable_loopback& operator=(bool v)
+  {
+    ipv4_value_ = v ? 1 : 0;
+    ipv6_value_ = v ? 1 : 0;
+    return *this;
+  }
+
+  // Get the current value of the boolean.
+  bool value() const
+  {
+    return !!ipv4_value_;
+  }
+
+  // Convert to bool.
+  operator bool() const
+  {
+    return !!ipv4_value_;
+  }
+
+  // Test for false.
+  bool operator!() const
+  {
+    return !ipv4_value_;
+  }
+
+  // Get the level of the socket option.
+  template <typename Protocol>
+  int level(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return IPv6_Level;
+    return IPv4_Level;
+  }
+
+  // Get the name of the socket option.
+  template <typename Protocol>
+  int name(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return IPv6_Name;
+    return IPv4_Name;
+  }
+
+  // Get the address of the boolean data.
+  template <typename Protocol>
+  void* data(const Protocol& protocol)
+  {
+    if (protocol.family() == PF_INET6)
+      return &ipv6_value_;
+    return &ipv4_value_;
+  }
+
+  // Get the address of the boolean data.
+  template <typename Protocol>
+  const void* data(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return &ipv6_value_;
+    return &ipv4_value_;
+  }
+
+  // Get the size of the boolean data.
+  template <typename Protocol>
+  std::size_t size(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return sizeof(ipv6_value_);
+    return sizeof(ipv4_value_);
+  }
+
+  // Set the size of the boolean data.
+  template <typename Protocol>
+  void resize(const Protocol& protocol, std::size_t s)
+  {
+    if (protocol.family() == PF_INET6)
+    {
+      if (s != sizeof(ipv6_value_))
+      {
+        std::length_error ex("multicast_enable_loopback socket option resize");
+        boost::asio::detail::throw_exception(ex);
+      }
+      ipv4_value_ = ipv6_value_ ? 1 : 0;
+    }
+    else
+    {
+      if (s != sizeof(ipv4_value_))
+      {
+        std::length_error ex("multicast_enable_loopback socket option resize");
+        boost::asio::detail::throw_exception(ex);
+      }
+      ipv6_value_ = ipv4_value_ ? 1 : 0;
+    }
+  }
+
+private:
+  ipv4_value_type ipv4_value_;
+  ipv6_value_type ipv6_value_;
+};
+
+// Helper template for implementing unicast hops options.
+template <int IPv4_Level, int IPv4_Name, int IPv6_Level, int IPv6_Name>
+class unicast_hops
+{
+public:
+  // Default constructor.
+  unicast_hops()
+    : value_(0)
+  {
+  }
+
+  // Construct with a specific option value.
+  explicit unicast_hops(int v)
+    : value_(v)
+  {
+  }
+
+  // Set the value of the option.
+  unicast_hops& operator=(int v)
+  {
+    value_ = v;
+    return *this;
+  }
+
+  // Get the current value of the option.
+  int value() const
+  {
+    return value_;
+  }
+
+  // Get the level of the socket option.
+  template <typename Protocol>
+  int level(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return IPv6_Level;
+    return IPv4_Level;
+  }
+
+  // Get the name of the socket option.
+  template <typename Protocol>
+  int name(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return IPv6_Name;
+    return IPv4_Name;
+  }
+
+  // Get the address of the data.
+  template <typename Protocol>
+  int* data(const Protocol&)
+  {
+    return &value_;
+  }
+
+  // Get the address of the data.
+  template <typename Protocol>
+  const int* data(const Protocol&) const
+  {
+    return &value_;
+  }
+
+  // Get the size of the data.
+  template <typename Protocol>
+  std::size_t size(const Protocol&) const
+  {
+    return sizeof(value_);
+  }
+
+  // Set the size of the data.
+  template <typename Protocol>
+  void resize(const Protocol&, std::size_t s)
+  {
+    if (s != sizeof(value_))
+    {
+      std::length_error ex("unicast hops socket option resize");
+      boost::asio::detail::throw_exception(ex);
+    }
+#if defined(__hpux)
+    if (value_ < 0)
+      value_ = value_ & 0xFF;
+#endif
+  }
+
+private:
+  int value_;
+};
+
+// Helper template for implementing multicast hops options.
+template <int IPv4_Level, int IPv4_Name, int IPv6_Level, int IPv6_Name>
+class multicast_hops
+{
+public:
+#if defined(BOOST_ASIO_WINDOWS) && defined(UNDER_CE)
+  typedef int ipv4_value_type;
+#else
+  typedef unsigned char ipv4_value_type;
+#endif
+  typedef int ipv6_value_type;
+
+  // Default constructor.
+  multicast_hops()
+    : ipv4_value_(0),
+      ipv6_value_(0)
+  {
+  }
+
+  // Construct with a specific option value.
+  explicit multicast_hops(int v)
+  {
+    if (v < 0 || v > 255)
+    {
+      std::out_of_range ex("multicast hops value out of range");
+      boost::asio::detail::throw_exception(ex);
+    }
+    ipv4_value_ = (ipv4_value_type)v;
+    ipv6_value_ = v;
+  }
+
+  // Set the value of the option.
+  multicast_hops& operator=(int v)
+  {
+    if (v < 0 || v > 255)
+    {
+      std::out_of_range ex("multicast hops value out of range");
+      boost::asio::detail::throw_exception(ex);
+    }
+    ipv4_value_ = (ipv4_value_type)v;
+    ipv6_value_ = v;
+    return *this;
+  }
+
+  // Get the current value of the option.
+  int value() const
+  {
+    return ipv6_value_;
+  }
+
+  // Get the level of the socket option.
+  template <typename Protocol>
+  int level(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return IPv6_Level;
+    return IPv4_Level;
+  }
+
+  // Get the name of the socket option.
+  template <typename Protocol>
+  int name(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return IPv6_Name;
+    return IPv4_Name;
+  }
+
+  // Get the address of the data.
+  template <typename Protocol>
+  void* data(const Protocol& protocol)
+  {
+    if (protocol.family() == PF_INET6)
+      return &ipv6_value_;
+    return &ipv4_value_;
+  }
+
+  // Get the address of the data.
+  template <typename Protocol>
+  const void* data(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return &ipv6_value_;
+    return &ipv4_value_;
+  }
+
+  // Get the size of the data.
+  template <typename Protocol>
+  std::size_t size(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return sizeof(ipv6_value_);
+    return sizeof(ipv4_value_);
+  }
+
+  // Set the size of the data.
+  template <typename Protocol>
+  void resize(const Protocol& protocol, std::size_t s)
+  {
+    if (protocol.family() == PF_INET6)
+    {
+      if (s != sizeof(ipv6_value_))
+      {
+        std::length_error ex("multicast hops socket option resize");
+        boost::asio::detail::throw_exception(ex);
+      }
+      if (ipv6_value_ < 0)
+        ipv4_value_ = 0;
+      else if (ipv6_value_ > 255)
+        ipv4_value_ = 255;
+      else
+        ipv4_value_ = (ipv4_value_type)ipv6_value_;
+    }
+    else
+    {
+      if (s != sizeof(ipv4_value_))
+      {
+        std::length_error ex("multicast hops socket option resize");
+        boost::asio::detail::throw_exception(ex);
+      }
+      ipv6_value_ = ipv4_value_;
+    }
+  }
+
+private:
+  ipv4_value_type ipv4_value_;
+  ipv6_value_type ipv6_value_;
+};
+
+// Helper template for implementing ip_mreq-based options.
+template <int IPv4_Level, int IPv4_Name, int IPv6_Level, int IPv6_Name>
+class multicast_request
+{
+public:
+  // Default constructor.
+  multicast_request()
+    : ipv4_value_(), // Zero-initialisation gives the "any" address.
+      ipv6_value_() // Zero-initialisation gives the "any" address.
+  {
+  }
+
+  // Construct with multicast address only.
+  explicit multicast_request(const boost::asio::ip::address& multicast_address)
+    : ipv4_value_(), // Zero-initialisation gives the "any" address.
+      ipv6_value_() // Zero-initialisation gives the "any" address.
+  {
+    if (multicast_address.is_v6())
+    {
+      using namespace std; // For memcpy.
+      boost::asio::ip::address_v6 ipv6_address = multicast_address.to_v6();
+      boost::asio::ip::address_v6::bytes_type bytes = ipv6_address.to_bytes();
+      memcpy(ipv6_value_.ipv6mr_multiaddr.s6_addr, bytes.data(), 16);
+      ipv6_value_.ipv6mr_interface = ipv6_address.scope_id();
+    }
+    else
+    {
+      ipv4_value_.imr_multiaddr.s_addr =
+        boost::asio::detail::socket_ops::host_to_network_long(
+            multicast_address.to_v4().to_ulong());
+      ipv4_value_.imr_interface.s_addr =
+        boost::asio::detail::socket_ops::host_to_network_long(
+            boost::asio::ip::address_v4::any().to_ulong());
+    }
+  }
+
+  // Construct with multicast address and IPv4 address specifying an interface.
+  explicit multicast_request(
+      const boost::asio::ip::address_v4& multicast_address,
+      const boost::asio::ip::address_v4& network_interface
+        = boost::asio::ip::address_v4::any())
+    : ipv6_value_() // Zero-initialisation gives the "any" address.
+  {
+    ipv4_value_.imr_multiaddr.s_addr =
+      boost::asio::detail::socket_ops::host_to_network_long(
+          multicast_address.to_ulong());
+    ipv4_value_.imr_interface.s_addr =
+      boost::asio::detail::socket_ops::host_to_network_long(
+          network_interface.to_ulong());
+  }
+
+  // Construct with multicast address and IPv6 network interface index.
+  explicit multicast_request(
+      const boost::asio::ip::address_v6& multicast_address,
+      unsigned long network_interface = 0)
+    : ipv4_value_() // Zero-initialisation gives the "any" address.
+  {
+    using namespace std; // For memcpy.
+    boost::asio::ip::address_v6::bytes_type bytes =
+      multicast_address.to_bytes();
+    memcpy(ipv6_value_.ipv6mr_multiaddr.s6_addr, bytes.data(), 16);
+    if (network_interface)
+      ipv6_value_.ipv6mr_interface = network_interface;
+    else
+      ipv6_value_.ipv6mr_interface = multicast_address.scope_id();
+  }
+
+  // Get the level of the socket option.
+  template <typename Protocol>
+  int level(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return IPv6_Level;
+    return IPv4_Level;
+  }
+
+  // Get the name of the socket option.
+  template <typename Protocol>
+  int name(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return IPv6_Name;
+    return IPv4_Name;
+  }
+
+  // Get the address of the option data.
+  template <typename Protocol>
+  const void* data(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return &ipv6_value_;
+    return &ipv4_value_;
+  }
+
+  // Get the size of the option data.
+  template <typename Protocol>
+  std::size_t size(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return sizeof(ipv6_value_);
+    return sizeof(ipv4_value_);
+  }
+
+private:
+  boost::asio::detail::in4_mreq_type ipv4_value_;
+  boost::asio::detail::in6_mreq_type ipv6_value_;
+};
+
+// Helper template for implementing options that specify a network interface.
+template <int IPv4_Level, int IPv4_Name, int IPv6_Level, int IPv6_Name>
+class network_interface
+{
+public:
+  // Default constructor.
+  network_interface()
+  {
+    ipv4_value_.s_addr =
+      boost::asio::detail::socket_ops::host_to_network_long(
+          boost::asio::ip::address_v4::any().to_ulong());
+    ipv6_value_ = 0;
+  }
+
+  // Construct with IPv4 interface.
+  explicit network_interface(const boost::asio::ip::address_v4& ipv4_interface)
+  {
+    ipv4_value_.s_addr =
+      boost::asio::detail::socket_ops::host_to_network_long(
+          ipv4_interface.to_ulong());
+    ipv6_value_ = 0;
+  }
+
+  // Construct with IPv6 interface.
+  explicit network_interface(unsigned int ipv6_interface)
+  {
+    ipv4_value_.s_addr =
+      boost::asio::detail::socket_ops::host_to_network_long(
+          boost::asio::ip::address_v4::any().to_ulong());
+    ipv6_value_ = ipv6_interface;
+  }
+
+  // Get the level of the socket option.
+  template <typename Protocol>
+  int level(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return IPv6_Level;
+    return IPv4_Level;
+  }
+
+  // Get the name of the socket option.
+  template <typename Protocol>
+  int name(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return IPv6_Name;
+    return IPv4_Name;
+  }
+
+  // Get the address of the option data.
+  template <typename Protocol>
+  const void* data(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return &ipv6_value_;
+    return &ipv4_value_;
+  }
+
+  // Get the size of the option data.
+  template <typename Protocol>
+  std::size_t size(const Protocol& protocol) const
+  {
+    if (protocol.family() == PF_INET6)
+      return sizeof(ipv6_value_);
+    return sizeof(ipv4_value_);
+  }
+
+private:
+  boost::asio::detail::in4_addr_type ipv4_value_;
+  unsigned int ipv6_value_;
+};
+
+} // namespace socket_option
+} // namespace detail
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_DETAIL_SOCKET_OPTION_HPP
diff --git a/ext/patches/boost/asio/ip/host_name.hpp b/ext/patches/boost/asio/ip/host_name.hpp
new file mode 100644
index 0000000..fd040cf
--- /dev/null
+++ b/ext/patches/boost/asio/ip/host_name.hpp
@@ -0,0 +1,44 @@
+//
+// ip/host_name.hpp
+// ~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_HOST_NAME_HPP
+#define BOOST_ASIO_IP_HOST_NAME_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <string>
+#include <boost/system/error_code.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+/// Get the current host name.
+BOOST_ASIO_DECL std::string host_name();
+
+/// Get the current host name.
+BOOST_ASIO_DECL std::string host_name(boost::system::error_code& ec);
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/ip/impl/host_name.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_IP_HOST_NAME_HPP
diff --git a/ext/patches/boost/asio/ip/icmp.hpp b/ext/patches/boost/asio/ip/icmp.hpp
new file mode 100644
index 0000000..573227c
--- /dev/null
+++ b/ext/patches/boost/asio/ip/icmp.hpp
@@ -0,0 +1,117 @@
+//
+// ip/icmp.hpp
+// ~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_ICMP_HPP
+#define BOOST_ASIO_IP_ICMP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/basic_raw_socket.hpp>
+#include <boost/asio/ip/basic_endpoint.hpp>
+#include <boost/asio/ip/basic_resolver.hpp>
+#include <boost/asio/ip/basic_resolver_iterator.hpp>
+#include <boost/asio/ip/basic_resolver_query.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+/// Encapsulates the flags needed for ICMP.
+/**
+ * The boost::asio::ip::icmp class contains flags necessary for ICMP sockets.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Safe.
+ *
+ * @par Concepts:
+ * Protocol, InternetProtocol.
+ */
+class icmp
+{
+public:
+  /// The type of a ICMP endpoint.
+  typedef basic_endpoint<icmp> endpoint;
+
+  /// Construct to represent the IPv4 ICMP protocol.
+  static icmp v4()
+  {
+    return icmp(BOOST_ASIO_OS_DEF(IPPROTO_ICMP),
+        BOOST_ASIO_OS_DEF(AF_INET));
+  }
+
+  /// Construct to represent the IPv6 ICMP protocol.
+  static icmp v6()
+  {
+    return icmp(BOOST_ASIO_OS_DEF(IPPROTO_ICMPV6),
+        BOOST_ASIO_OS_DEF(AF_INET6));
+  }
+
+  /// Obtain an identifier for the type of the protocol.
+  int type() const
+  {
+    return BOOST_ASIO_OS_DEF(SOCK_RAW);
+  }
+
+  /// Obtain an identifier for the protocol.
+  int protocol() const
+  {
+    return protocol_;
+  }
+
+  /// Obtain an identifier for the protocol family.
+  int family() const
+  {
+    return family_;
+  }
+
+  /// The ICMP socket type.
+  typedef basic_raw_socket<icmp> socket;
+
+  /// The ICMP resolver type.
+  typedef basic_resolver<icmp> resolver;
+
+  /// Compare two protocols for equality.
+  friend bool operator==(const icmp& p1, const icmp& p2)
+  {
+    return p1.protocol_ == p2.protocol_ && p1.family_ == p2.family_;
+  }
+
+  /// Compare two protocols for inequality.
+  friend bool operator!=(const icmp& p1, const icmp& p2)
+  {
+    return p1.protocol_ != p2.protocol_ || p1.family_ != p2.family_;
+  }
+
+private:
+  // Construct with a specific family.
+  explicit icmp(int protocol_id, int protocol_family)
+    : protocol_(protocol_id),
+      family_(protocol_family)
+  {
+  }
+
+  int protocol_;
+  int family_;
+};
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_ICMP_HPP
diff --git a/ext/patches/boost/asio/ip/impl/address.hpp b/ext/patches/boost/asio/ip/impl/address.hpp
new file mode 100644
index 0000000..e7a4892
--- /dev/null
+++ b/ext/patches/boost/asio/ip/impl/address.hpp
@@ -0,0 +1,55 @@
+//
+// ip/impl/address.hpp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_IMPL_ADDRESS_HPP
+#define BOOST_ASIO_IP_IMPL_ADDRESS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#include <boost/asio/detail/throw_error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+template <typename Elem, typename Traits>
+std::basic_ostream<Elem, Traits>& operator<<(
+    std::basic_ostream<Elem, Traits>& os, const address& addr)
+{
+  boost::system::error_code ec;
+  std::string s = addr.to_string(ec);
+  if (ec)
+  {
+    if (os.exceptions() & std::basic_ostream<Elem, Traits>::failbit)
+      boost::asio::detail::throw_error(ec);
+    else
+      os.setstate(std::basic_ostream<Elem, Traits>::failbit);
+  }
+  else
+    for (std::string::iterator i = s.begin(); i != s.end(); ++i)
+      os << os.widen(*i);
+  return os;
+}
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#endif // BOOST_ASIO_IP_IMPL_ADDRESS_HPP
diff --git a/ext/patches/boost/asio/ip/impl/address.ipp b/ext/patches/boost/asio/ip/impl/address.ipp
new file mode 100644
index 0000000..e11cb45
--- /dev/null
+++ b/ext/patches/boost/asio/ip/impl/address.ipp
@@ -0,0 +1,228 @@
+//
+// ip/impl/address.ipp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_IMPL_ADDRESS_IPP
+#define BOOST_ASIO_IP_IMPL_ADDRESS_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <typeinfo>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/detail/throw_exception.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/ip/address.hpp>
+#include <boost/system/system_error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+address::address()
+  : type_(ipv4),
+    ipv4_address_(),
+    ipv6_address_()
+{
+}
+
+address::address(const boost::asio::ip::address_v4& ipv4_address)
+  : type_(ipv4),
+    ipv4_address_(ipv4_address),
+    ipv6_address_()
+{
+}
+
+address::address(const boost::asio::ip::address_v6& ipv6_address)
+  : type_(ipv6),
+    ipv4_address_(),
+    ipv6_address_(ipv6_address)
+{
+}
+
+address::address(const address& other)
+  : type_(other.type_),
+    ipv4_address_(other.ipv4_address_),
+    ipv6_address_(other.ipv6_address_)
+{
+}
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+address::address(address&& other)
+  : type_(other.type_),
+    ipv4_address_(other.ipv4_address_),
+    ipv6_address_(other.ipv6_address_)
+{
+}
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+address& address::operator=(const address& other)
+{
+  type_ = other.type_;
+  ipv4_address_ = other.ipv4_address_;
+  ipv6_address_ = other.ipv6_address_;
+  return *this;
+}
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+address& address::operator=(address&& other)
+{
+  type_ = other.type_;
+  ipv4_address_ = other.ipv4_address_;
+  ipv6_address_ = other.ipv6_address_;
+  return *this;
+}
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+address& address::operator=(const boost::asio::ip::address_v4& ipv4_address)
+{
+  type_ = ipv4;
+  ipv4_address_ = ipv4_address;
+  ipv6_address_ = boost::asio::ip::address_v6();
+  return *this;
+}
+
+address& address::operator=(const boost::asio::ip::address_v6& ipv6_address)
+{
+  type_ = ipv6;
+  ipv4_address_ = boost::asio::ip::address_v4();
+  ipv6_address_ = ipv6_address;
+  return *this;
+}
+
+boost::asio::ip::address_v4 address::to_v4() const
+{
+  if (type_ != ipv4)
+  {
+    std::bad_cast ex;
+    boost::asio::detail::throw_exception(ex);
+  }
+  return ipv4_address_;
+}
+
+boost::asio::ip::address_v6 address::to_v6() const
+{
+  if (type_ != ipv6)
+  {
+    std::bad_cast ex;
+    boost::asio::detail::throw_exception(ex);
+  }
+  return ipv6_address_;
+}
+
+std::string address::to_string() const
+{
+  if (type_ == ipv6)
+    return ipv6_address_.to_string();
+  return ipv4_address_.to_string();
+}
+
+std::string address::to_string(boost::system::error_code& ec) const
+{
+  if (type_ == ipv6)
+    return ipv6_address_.to_string(ec);
+  return ipv4_address_.to_string(ec);
+}
+
+address address::from_string(const char* str)
+{
+  boost::system::error_code ec;
+  address addr = from_string(str, ec);
+  boost::asio::detail::throw_error(ec);
+  return addr;
+}
+
+address address::from_string(const char* str, boost::system::error_code& ec)
+{
+  boost::asio::ip::address_v6 ipv6_address =
+    boost::asio::ip::address_v6::from_string(str, ec);
+  if (!ec)
+  {
+    address tmp;
+    tmp.type_ = ipv6;
+    tmp.ipv6_address_ = ipv6_address;
+    return tmp;
+  }
+
+  boost::asio::ip::address_v4 ipv4_address =
+    boost::asio::ip::address_v4::from_string(str, ec);
+  if (!ec)
+  {
+    address tmp;
+    tmp.type_ = ipv4;
+    tmp.ipv4_address_ = ipv4_address;
+    return tmp;
+  }
+
+  return address();
+}
+
+address address::from_string(const std::string& str)
+{
+  return from_string(str.c_str());
+}
+
+address address::from_string(const std::string& str,
+    boost::system::error_code& ec)
+{
+  return from_string(str.c_str(), ec);
+}
+
+bool address::is_loopback() const
+{
+  return (type_ == ipv4)
+    ? ipv4_address_.is_loopback()
+    : ipv6_address_.is_loopback();
+}
+
+bool address::is_unspecified() const
+{
+  return (type_ == ipv4)
+    ? ipv4_address_.is_unspecified()
+    : ipv6_address_.is_unspecified();
+}
+
+bool address::is_multicast() const
+{
+  return (type_ == ipv4)
+    ? ipv4_address_.is_multicast()
+    : ipv6_address_.is_multicast();
+}
+
+bool operator==(const address& a1, const address& a2)
+{
+  if (a1.type_ != a2.type_)
+    return false;
+  if (a1.type_ == address::ipv6)
+    return a1.ipv6_address_ == a2.ipv6_address_;
+  return a1.ipv4_address_ == a2.ipv4_address_;
+}
+
+bool operator<(const address& a1, const address& a2)
+{
+  if (a1.type_ < a2.type_)
+    return true;
+  if (a1.type_ > a2.type_)
+    return false;
+  if (a1.type_ == address::ipv6)
+    return a1.ipv6_address_ < a2.ipv6_address_;
+  return a1.ipv4_address_ < a2.ipv4_address_;
+}
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_IMPL_ADDRESS_IPP
diff --git a/ext/patches/boost/asio/ip/impl/address_v4.hpp b/ext/patches/boost/asio/ip/impl/address_v4.hpp
new file mode 100644
index 0000000..13df75a
--- /dev/null
+++ b/ext/patches/boost/asio/ip/impl/address_v4.hpp
@@ -0,0 +1,55 @@
+//
+// ip/impl/address_v4.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_IMPL_ADDRESS_V4_HPP
+#define BOOST_ASIO_IP_IMPL_ADDRESS_V4_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#include <boost/asio/detail/throw_error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+template <typename Elem, typename Traits>
+std::basic_ostream<Elem, Traits>& operator<<(
+    std::basic_ostream<Elem, Traits>& os, const address_v4& addr)
+{
+  boost::system::error_code ec;
+  std::string s = addr.to_string(ec);
+  if (ec)
+  {
+    if (os.exceptions() & std::basic_ostream<Elem, Traits>::failbit)
+      boost::asio::detail::throw_error(ec);
+    else
+      os.setstate(std::basic_ostream<Elem, Traits>::failbit);
+  }
+  else
+    for (std::string::iterator i = s.begin(); i != s.end(); ++i)
+      os << os.widen(*i);
+  return os;
+}
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#endif // BOOST_ASIO_IP_IMPL_ADDRESS_V4_HPP
diff --git a/ext/patches/boost/asio/ip/impl/address_v4.ipp b/ext/patches/boost/asio/ip/impl/address_v4.ipp
new file mode 100644
index 0000000..2dd4bcc
--- /dev/null
+++ b/ext/patches/boost/asio/ip/impl/address_v4.ipp
@@ -0,0 +1,180 @@
+//
+// ip/impl/address_v4.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_IMPL_ADDRESS_V4_IPP
+#define BOOST_ASIO_IP_IMPL_ADDRESS_V4_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <climits>
+#include <stdexcept>
+#include <boost/asio/error.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/detail/throw_exception.hpp>
+#include <boost/asio/ip/address_v4.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+address_v4::address_v4(const address_v4::bytes_type& bytes)
+{
+#if UCHAR_MAX > 0xFF
+  if (bytes[0] > 0xFF || bytes[1] > 0xFF
+      || bytes[2] > 0xFF || bytes[3] > 0xFF)
+  {
+    std::out_of_range ex("address_v4 from bytes_type");
+    boost::asio::detail::throw_exception(ex);
+  }
+#endif // UCHAR_MAX > 0xFF
+
+  using namespace std; // For memcpy.
+  memcpy(&addr_.s_addr, bytes.data(), 4);
+}
+
+address_v4::address_v4(unsigned long addr)
+{
+#if ULONG_MAX > 0xFFFFFFFF
+  if (addr > 0xFFFFFFFF)
+  {
+    std::out_of_range ex("address_v4 from unsigned long");
+    boost::asio::detail::throw_exception(ex);
+  }
+#endif // ULONG_MAX > 0xFFFFFFFF
+
+  addr_.s_addr = boost::asio::detail::socket_ops::host_to_network_long(
+      static_cast<boost::asio::detail::u_long_type>(addr));
+}
+
+address_v4::bytes_type address_v4::to_bytes() const
+{
+  using namespace std; // For memcpy.
+  bytes_type bytes;
+#if defined(BOOST_ASIO_HAS_STD_ARRAY)
+  memcpy(bytes.data(), &addr_.s_addr, 4);
+#else // defined(BOOST_ASIO_HAS_STD_ARRAY)
+  memcpy(bytes.elems, &addr_.s_addr, 4);
+#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
+  return bytes;
+}
+
+unsigned long address_v4::to_ulong() const
+{
+  return boost::asio::detail::socket_ops::network_to_host_long(addr_.s_addr);
+}
+
+std::string address_v4::to_string() const
+{
+  boost::system::error_code ec;
+  std::string addr = to_string(ec);
+  boost::asio::detail::throw_error(ec);
+  return addr;
+}
+
+std::string address_v4::to_string(boost::system::error_code& ec) const
+{
+  char addr_str[boost::asio::detail::max_addr_v4_str_len];
+  const char* addr =
+    boost::asio::detail::socket_ops::inet_ntop(
+        BOOST_ASIO_OS_DEF(AF_INET), &addr_, addr_str,
+        boost::asio::detail::max_addr_v4_str_len, 0, ec);
+  if (addr == 0)
+    return std::string();
+  return addr;
+}
+
+address_v4 address_v4::from_string(const char* str)
+{
+  boost::system::error_code ec;
+  address_v4 addr = from_string(str, ec);
+  boost::asio::detail::throw_error(ec);
+  return addr;
+}
+
+address_v4 address_v4::from_string(
+    const char* str, boost::system::error_code& ec)
+{
+  address_v4 tmp;
+  if (boost::asio::detail::socket_ops::inet_pton(
+        BOOST_ASIO_OS_DEF(AF_INET), str, &tmp.addr_, 0, ec) <= 0)
+    return address_v4();
+  return tmp;
+}
+
+address_v4 address_v4::from_string(const std::string& str)
+{
+  return from_string(str.c_str());
+}
+
+address_v4 address_v4::from_string(
+    const std::string& str, boost::system::error_code& ec)
+{
+  return from_string(str.c_str(), ec);
+}
+
+bool address_v4::is_loopback() const
+{
+  return (to_ulong() & 0xFF000000) == 0x7F000000;
+}
+
+bool address_v4::is_unspecified() const
+{
+  return to_ulong() == 0;
+}
+
+bool address_v4::is_class_a() const
+{
+  return (to_ulong() & 0x80000000) == 0;
+}
+
+bool address_v4::is_class_b() const
+{
+  return (to_ulong() & 0xC0000000) == 0x80000000;
+}
+
+bool address_v4::is_class_c() const
+{
+  return (to_ulong() & 0xE0000000) == 0xC0000000;
+}
+
+bool address_v4::is_multicast() const
+{
+  return (to_ulong() & 0xF0000000) == 0xE0000000;
+}
+
+address_v4 address_v4::broadcast(const address_v4& addr, const address_v4& mask)
+{
+  return address_v4(addr.to_ulong() | (mask.to_ulong() ^ 0xFFFFFFFF));
+}
+
+address_v4 address_v4::netmask(const address_v4& addr)
+{
+  if (addr.is_class_a())
+    return address_v4(0xFF000000);
+  if (addr.is_class_b())
+    return address_v4(0xFFFF0000);
+  if (addr.is_class_c())
+    return address_v4(0xFFFFFF00);
+  return address_v4(0xFFFFFFFF);
+}
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_IMPL_ADDRESS_V4_IPP
diff --git a/ext/patches/boost/asio/ip/impl/address_v6.hpp b/ext/patches/boost/asio/ip/impl/address_v6.hpp
new file mode 100644
index 0000000..e192094
--- /dev/null
+++ b/ext/patches/boost/asio/ip/impl/address_v6.hpp
@@ -0,0 +1,55 @@
+//
+// ip/impl/address_v6.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_IMPL_ADDRESS_V6_HPP
+#define BOOST_ASIO_IP_IMPL_ADDRESS_V6_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#include <boost/asio/detail/throw_error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+template <typename Elem, typename Traits>
+std::basic_ostream<Elem, Traits>& operator<<(
+    std::basic_ostream<Elem, Traits>& os, const address_v6& addr)
+{
+  boost::system::error_code ec;
+  std::string s = addr.to_string(ec);
+  if (ec)
+  {
+    if (os.exceptions() & std::basic_ostream<Elem, Traits>::failbit)
+      boost::asio::detail::throw_error(ec);
+    else
+      os.setstate(std::basic_ostream<Elem, Traits>::failbit);
+  }
+  else
+    for (std::string::iterator i = s.begin(); i != s.end(); ++i)
+      os << os.widen(*i);
+  return os;
+}
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#endif // BOOST_ASIO_IP_IMPL_ADDRESS_V6_HPP
diff --git a/ext/patches/boost/asio/ip/impl/address_v6.ipp b/ext/patches/boost/asio/ip/impl/address_v6.ipp
new file mode 100644
index 0000000..0aeedd3
--- /dev/null
+++ b/ext/patches/boost/asio/ip/impl/address_v6.ipp
@@ -0,0 +1,300 @@
+//
+// ip/impl/address_v6.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_IMPL_ADDRESS_V6_IPP
+#define BOOST_ASIO_IP_IMPL_ADDRESS_V6_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstring>
+#include <stdexcept>
+#include <typeinfo>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/detail/throw_exception.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/ip/address_v6.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+address_v6::address_v6()
+  : addr_(),
+    scope_id_(0)
+{
+}
+
+address_v6::address_v6(const address_v6::bytes_type& bytes,
+    unsigned long scope)
+  : scope_id_(scope)
+{
+#if UCHAR_MAX > 0xFF
+  for (std::size_t i = 0; i < bytes.size(); ++i)
+  {
+    if (bytes[i] > 0xFF)
+    {
+      std::out_of_range ex("address_v6 from bytes_type");
+      boost::asio::detail::throw_exception(ex);
+    }
+  }
+#endif // UCHAR_MAX > 0xFF
+
+  using namespace std; // For memcpy.
+  memcpy(addr_.s6_addr, bytes.data(), 16);
+}
+
+address_v6::address_v6(const address_v6& other)
+  : addr_(other.addr_),
+    scope_id_(other.scope_id_)
+{
+}
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+address_v6::address_v6(address_v6&& other)
+  : addr_(other.addr_),
+    scope_id_(other.scope_id_)
+{
+}
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+address_v6& address_v6::operator=(const address_v6& other)
+{
+  addr_ = other.addr_;
+  scope_id_ = other.scope_id_;
+  return *this;
+}
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+address_v6& address_v6::operator=(address_v6&& other)
+{
+  addr_ = other.addr_;
+  scope_id_ = other.scope_id_;
+  return *this;
+}
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+address_v6::bytes_type address_v6::to_bytes() const
+{
+  using namespace std; // For memcpy.
+  bytes_type bytes;
+#if defined(BOOST_ASIO_HAS_STD_ARRAY)
+  memcpy(bytes.data(), addr_.s6_addr, 16);
+#else // defined(BOOST_ASIO_HAS_STD_ARRAY)
+  memcpy(bytes.elems, addr_.s6_addr, 16);
+#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
+  return bytes;
+}
+
+std::string address_v6::to_string() const
+{
+  boost::system::error_code ec;
+  std::string addr = to_string(ec);
+  boost::asio::detail::throw_error(ec);
+  return addr;
+}
+
+std::string address_v6::to_string(boost::system::error_code& ec) const
+{
+  char addr_str[boost::asio::detail::max_addr_v6_str_len];
+  const char* addr =
+    boost::asio::detail::socket_ops::inet_ntop(
+        BOOST_ASIO_OS_DEF(AF_INET6), &addr_, addr_str,
+        boost::asio::detail::max_addr_v6_str_len, scope_id_, ec);
+  if (addr == 0)
+    return std::string();
+  return addr;
+}
+
+address_v6 address_v6::from_string(const char* str)
+{
+  boost::system::error_code ec;
+  address_v6 addr = from_string(str, ec);
+  boost::asio::detail::throw_error(ec);
+  return addr;
+}
+
+address_v6 address_v6::from_string(
+    const char* str, boost::system::error_code& ec)
+{
+  address_v6 tmp;
+  if (boost::asio::detail::socket_ops::inet_pton(
+        BOOST_ASIO_OS_DEF(AF_INET6), str, &tmp.addr_, &tmp.scope_id_, ec) <= 0)
+    return address_v6();
+  return tmp;
+}
+
+address_v6 address_v6::from_string(const std::string& str)
+{
+  return from_string(str.c_str());
+}
+
+address_v6 address_v6::from_string(
+    const std::string& str, boost::system::error_code& ec)
+{
+  return from_string(str.c_str(), ec);
+}
+
+address_v4 address_v6::to_v4() const
+{
+  if (!is_v4_mapped() && !is_v4_compatible())
+  {
+    std::bad_cast ex;
+    boost::asio::detail::throw_exception(ex);
+  }
+
+  address_v4::bytes_type v4_bytes = { { addr_.s6_addr[12],
+    addr_.s6_addr[13], addr_.s6_addr[14], addr_.s6_addr[15] } };
+  return address_v4(v4_bytes);
+}
+
+bool address_v6::is_loopback() const
+{
+  return ((addr_.s6_addr[0] == 0) && (addr_.s6_addr[1] == 0)
+      && (addr_.s6_addr[2] == 0) && (addr_.s6_addr[3] == 0)
+      && (addr_.s6_addr[4] == 0) && (addr_.s6_addr[5] == 0)
+      && (addr_.s6_addr[6] == 0) && (addr_.s6_addr[7] == 0)
+      && (addr_.s6_addr[8] == 0) && (addr_.s6_addr[9] == 0)
+      && (addr_.s6_addr[10] == 0) && (addr_.s6_addr[11] == 0)
+      && (addr_.s6_addr[12] == 0) && (addr_.s6_addr[13] == 0)
+      && (addr_.s6_addr[14] == 0) && (addr_.s6_addr[15] == 1));
+}
+
+bool address_v6::is_unspecified() const
+{
+  return ((addr_.s6_addr[0] == 0) && (addr_.s6_addr[1] == 0)
+      && (addr_.s6_addr[2] == 0) && (addr_.s6_addr[3] == 0)
+      && (addr_.s6_addr[4] == 0) && (addr_.s6_addr[5] == 0)
+      && (addr_.s6_addr[6] == 0) && (addr_.s6_addr[7] == 0)
+      && (addr_.s6_addr[8] == 0) && (addr_.s6_addr[9] == 0)
+      && (addr_.s6_addr[10] == 0) && (addr_.s6_addr[11] == 0)
+      && (addr_.s6_addr[12] == 0) && (addr_.s6_addr[13] == 0)
+      && (addr_.s6_addr[14] == 0) && (addr_.s6_addr[15] == 0));
+}
+
+bool address_v6::is_link_local() const
+{
+  return ((addr_.s6_addr[0] == 0xfe) && ((addr_.s6_addr[1] & 0xc0) == 0x80));
+}
+
+bool address_v6::is_site_local() const
+{
+  return ((addr_.s6_addr[0] == 0xfe) && ((addr_.s6_addr[1] & 0xc0) == 0xc0));
+}
+
+bool address_v6::is_v4_mapped() const
+{
+  return ((addr_.s6_addr[0] == 0) && (addr_.s6_addr[1] == 0)
+      && (addr_.s6_addr[2] == 0) && (addr_.s6_addr[3] == 0)
+      && (addr_.s6_addr[4] == 0) && (addr_.s6_addr[5] == 0)
+      && (addr_.s6_addr[6] == 0) && (addr_.s6_addr[7] == 0)
+      && (addr_.s6_addr[8] == 0) && (addr_.s6_addr[9] == 0)
+      && (addr_.s6_addr[10] == 0xff) && (addr_.s6_addr[11] == 0xff));
+}
+
+bool address_v6::is_v4_compatible() const
+{
+  return ((addr_.s6_addr[0] == 0) && (addr_.s6_addr[1] == 0)
+      && (addr_.s6_addr[2] == 0) && (addr_.s6_addr[3] == 0)
+      && (addr_.s6_addr[4] == 0) && (addr_.s6_addr[5] == 0)
+      && (addr_.s6_addr[6] == 0) && (addr_.s6_addr[7] == 0)
+      && (addr_.s6_addr[8] == 0) && (addr_.s6_addr[9] == 0)
+      && (addr_.s6_addr[10] == 0) && (addr_.s6_addr[11] == 0)
+      && !((addr_.s6_addr[12] == 0)
+        && (addr_.s6_addr[13] == 0)
+        && (addr_.s6_addr[14] == 0)
+        && ((addr_.s6_addr[15] == 0) || (addr_.s6_addr[15] == 1))));
+}
+
+bool address_v6::is_multicast() const
+{
+  return (addr_.s6_addr[0] == 0xff);
+}
+
+bool address_v6::is_multicast_global() const
+{
+  return ((addr_.s6_addr[0] == 0xff) && ((addr_.s6_addr[1] & 0x0f) == 0x0e));
+}
+
+bool address_v6::is_multicast_link_local() const
+{
+  return ((addr_.s6_addr[0] == 0xff) && ((addr_.s6_addr[1] & 0x0f) == 0x02));
+}
+
+bool address_v6::is_multicast_node_local() const
+{
+  return ((addr_.s6_addr[0] == 0xff) && ((addr_.s6_addr[1] & 0x0f) == 0x01));
+}
+
+bool address_v6::is_multicast_org_local() const
+{
+  return ((addr_.s6_addr[0] == 0xff) && ((addr_.s6_addr[1] & 0x0f) == 0x08));
+}
+
+bool address_v6::is_multicast_site_local() const
+{
+  return ((addr_.s6_addr[0] == 0xff) && ((addr_.s6_addr[1] & 0x0f) == 0x05));
+}
+
+bool operator==(const address_v6& a1, const address_v6& a2)
+{
+  using namespace std; // For memcmp.
+  return memcmp(&a1.addr_, &a2.addr_,
+      sizeof(boost::asio::detail::in6_addr_type)) == 0
+    && a1.scope_id_ == a2.scope_id_;
+}
+
+bool operator<(const address_v6& a1, const address_v6& a2)
+{
+  using namespace std; // For memcmp.
+  int memcmp_result = memcmp(&a1.addr_, &a2.addr_,
+      sizeof(boost::asio::detail::in6_addr_type));
+  if (memcmp_result < 0)
+    return true;
+  if (memcmp_result > 0)
+    return false;
+  return a1.scope_id_ < a2.scope_id_;
+}
+
+address_v6 address_v6::loopback()
+{
+  address_v6 tmp;
+  tmp.addr_.s6_addr[15] = 1;
+  return tmp;
+}
+
+address_v6 address_v6::v4_mapped(const address_v4& addr)
+{
+  address_v4::bytes_type v4_bytes = addr.to_bytes();
+  bytes_type v6_bytes = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF,
+    v4_bytes[0], v4_bytes[1], v4_bytes[2], v4_bytes[3] } };
+  return address_v6(v6_bytes);
+}
+
+address_v6 address_v6::v4_compatible(const address_v4& addr)
+{
+  address_v4::bytes_type v4_bytes = addr.to_bytes();
+  bytes_type v6_bytes = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    v4_bytes[0], v4_bytes[1], v4_bytes[2], v4_bytes[3] } };
+  return address_v6(v6_bytes);
+}
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_IMPL_ADDRESS_V6_IPP
diff --git a/ext/patches/boost/asio/ip/impl/basic_endpoint.hpp b/ext/patches/boost/asio/ip/impl/basic_endpoint.hpp
new file mode 100644
index 0000000..075d68f
--- /dev/null
+++ b/ext/patches/boost/asio/ip/impl/basic_endpoint.hpp
@@ -0,0 +1,57 @@
+//
+// ip/impl/basic_endpoint.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_IMPL_BASIC_ENDPOINT_HPP
+#define BOOST_ASIO_IP_IMPL_BASIC_ENDPOINT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#include <boost/asio/detail/throw_error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+template <typename Elem, typename Traits, typename InternetProtocol>
+std::basic_ostream<Elem, Traits>& operator<<(
+    std::basic_ostream<Elem, Traits>& os,
+    const basic_endpoint<InternetProtocol>& endpoint)
+{
+  boost::asio::ip::detail::endpoint tmp_ep(endpoint.address(), endpoint.port());
+  boost::system::error_code ec;
+  std::string s = tmp_ep.to_string(ec);
+  if (ec)
+  {
+    if (os.exceptions() & std::basic_ostream<Elem, Traits>::failbit)
+      boost::asio::detail::throw_error(ec);
+    else
+      os.setstate(std::basic_ostream<Elem, Traits>::failbit);
+  }
+  else
+    for (std::string::iterator i = s.begin(); i != s.end(); ++i)
+      os << os.widen(*i);
+  return os;
+}
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#endif // BOOST_ASIO_IP_IMPL_BASIC_ENDPOINT_HPP
diff --git a/ext/patches/boost/asio/ip/impl/host_name.ipp b/ext/patches/boost/asio/ip/impl/host_name.ipp
new file mode 100644
index 0000000..8edf89d
--- /dev/null
+++ b/ext/patches/boost/asio/ip/impl/host_name.ipp
@@ -0,0 +1,56 @@
+//
+// ip/impl/host_name.ipp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_IMPL_HOST_NAME_IPP
+#define BOOST_ASIO_IP_IMPL_HOST_NAME_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/detail/winsock_init.hpp>
+#include <boost/asio/ip/host_name.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+std::string host_name()
+{
+  char name[1024];
+  boost::system::error_code ec;
+  if (boost::asio::detail::socket_ops::gethostname(name, sizeof(name), ec) != 0)
+  {
+    boost::asio::detail::throw_error(ec);
+    return std::string();
+  }
+  return std::string(name);
+}
+
+std::string host_name(boost::system::error_code& ec)
+{
+  char name[1024];
+  if (boost::asio::detail::socket_ops::gethostname(name, sizeof(name), ec) != 0)
+    return std::string();
+  return std::string(name);
+}
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_IMPL_HOST_NAME_IPP
diff --git a/ext/patches/boost/asio/ip/multicast.hpp b/ext/patches/boost/asio/ip/multicast.hpp
new file mode 100644
index 0000000..a822c66
--- /dev/null
+++ b/ext/patches/boost/asio/ip/multicast.hpp
@@ -0,0 +1,193 @@
+//
+// ip/multicast.hpp
+// ~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_MULTICAST_HPP
+#define BOOST_ASIO_IP_MULTICAST_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/ip/detail/socket_option.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+namespace multicast {
+
+/// Socket option to join a multicast group on a specified interface.
+/**
+ * Implements the IPPROTO_IP/IP_ADD_MEMBERSHIP socket option.
+ *
+ * @par Examples
+ * Setting the option to join a multicast group:
+ * @code
+ * boost::asio::ip::udp::socket socket(io_service); 
+ * ...
+ * boost::asio::ip::address multicast_address =
+ *   boost::asio::ip::address::from_string("225.0.0.1");
+ * boost::asio::ip::multicast::join_group option(multicast_address);
+ * socket.set_option(option);
+ * @endcode
+ *
+ * @par Concepts:
+ * SettableSocketOption.
+ */
+#if defined(GENERATING_DOCUMENTATION)
+typedef implementation_defined join_group;
+#else
+typedef boost::asio::ip::detail::socket_option::multicast_request<
+  BOOST_ASIO_OS_DEF(IPPROTO_IP),
+  BOOST_ASIO_OS_DEF(IP_ADD_MEMBERSHIP),
+  BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
+  BOOST_ASIO_OS_DEF(IPV6_JOIN_GROUP)> join_group;
+#endif
+
+/// Socket option to leave a multicast group on a specified interface.
+/**
+ * Implements the IPPROTO_IP/IP_DROP_MEMBERSHIP socket option.
+ *
+ * @par Examples
+ * Setting the option to leave a multicast group:
+ * @code
+ * boost::asio::ip::udp::socket socket(io_service); 
+ * ...
+ * boost::asio::ip::address multicast_address =
+ *   boost::asio::ip::address::from_string("225.0.0.1");
+ * boost::asio::ip::multicast::leave_group option(multicast_address);
+ * socket.set_option(option);
+ * @endcode
+ *
+ * @par Concepts:
+ * SettableSocketOption.
+ */
+#if defined(GENERATING_DOCUMENTATION)
+typedef implementation_defined leave_group;
+#else
+typedef boost::asio::ip::detail::socket_option::multicast_request<
+  BOOST_ASIO_OS_DEF(IPPROTO_IP),
+  BOOST_ASIO_OS_DEF(IP_DROP_MEMBERSHIP),
+  BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
+  BOOST_ASIO_OS_DEF(IPV6_LEAVE_GROUP)> leave_group;
+#endif
+
+/// Socket option for local interface to use for outgoing multicast packets.
+/**
+ * Implements the IPPROTO_IP/IP_MULTICAST_IF socket option.
+ *
+ * @par Examples
+ * Setting the option:
+ * @code
+ * boost::asio::ip::udp::socket socket(io_service); 
+ * ...
+ * boost::asio::ip::address_v4 local_interface =
+ *   boost::asio::ip::address_v4::from_string("1.2.3.4");
+ * boost::asio::ip::multicast::outbound_interface option(local_interface);
+ * socket.set_option(option);
+ * @endcode
+ *
+ * @par Concepts:
+ * SettableSocketOption.
+ */
+#if defined(GENERATING_DOCUMENTATION)
+typedef implementation_defined outbound_interface;
+#else
+typedef boost::asio::ip::detail::socket_option::network_interface<
+  BOOST_ASIO_OS_DEF(IPPROTO_IP),
+  BOOST_ASIO_OS_DEF(IP_MULTICAST_IF),
+  BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
+  BOOST_ASIO_OS_DEF(IPV6_MULTICAST_IF)> outbound_interface;
+#endif
+
+/// Socket option for time-to-live associated with outgoing multicast packets.
+/**
+ * Implements the IPPROTO_IP/IP_MULTICAST_TTL socket option.
+ *
+ * @par Examples
+ * Setting the option:
+ * @code
+ * boost::asio::ip::udp::socket socket(io_service); 
+ * ...
+ * boost::asio::ip::multicast::hops option(4);
+ * socket.set_option(option);
+ * @endcode
+ *
+ * @par
+ * Getting the current option value:
+ * @code
+ * boost::asio::ip::udp::socket socket(io_service); 
+ * ...
+ * boost::asio::ip::multicast::hops option;
+ * socket.get_option(option);
+ * int ttl = option.value();
+ * @endcode
+ *
+ * @par Concepts:
+ * GettableSocketOption, SettableSocketOption.
+ */
+#if defined(GENERATING_DOCUMENTATION)
+typedef implementation_defined hops;
+#else
+typedef boost::asio::ip::detail::socket_option::multicast_hops<
+  BOOST_ASIO_OS_DEF(IPPROTO_IP),
+  BOOST_ASIO_OS_DEF(IP_MULTICAST_TTL),
+  BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
+  BOOST_ASIO_OS_DEF(IPV6_MULTICAST_HOPS)> hops;
+#endif
+
+/// Socket option determining whether outgoing multicast packets will be
+/// received on the same socket if it is a member of the multicast group.
+/**
+ * Implements the IPPROTO_IP/IP_MULTICAST_LOOP socket option.
+ *
+ * @par Examples
+ * Setting the option:
+ * @code
+ * boost::asio::ip::udp::socket socket(io_service); 
+ * ...
+ * boost::asio::ip::multicast::enable_loopback option(true);
+ * socket.set_option(option);
+ * @endcode
+ *
+ * @par
+ * Getting the current option value:
+ * @code
+ * boost::asio::ip::udp::socket socket(io_service); 
+ * ...
+ * boost::asio::ip::multicast::enable_loopback option;
+ * socket.get_option(option);
+ * bool is_set = option.value();
+ * @endcode
+ *
+ * @par Concepts:
+ * GettableSocketOption, SettableSocketOption.
+ */
+#if defined(GENERATING_DOCUMENTATION)
+typedef implementation_defined enable_loopback;
+#else
+typedef boost::asio::ip::detail::socket_option::multicast_enable_loopback<
+  BOOST_ASIO_OS_DEF(IPPROTO_IP),
+  BOOST_ASIO_OS_DEF(IP_MULTICAST_LOOP),
+  BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
+  BOOST_ASIO_OS_DEF(IPV6_MULTICAST_LOOP)> enable_loopback;
+#endif
+
+} // namespace multicast
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_MULTICAST_HPP
diff --git a/ext/patches/boost/asio/ip/resolver_query_base.hpp b/ext/patches/boost/asio/ip/resolver_query_base.hpp
new file mode 100644
index 0000000..506d129
--- /dev/null
+++ b/ext/patches/boost/asio/ip/resolver_query_base.hpp
@@ -0,0 +1,132 @@
+//
+// ip/resolver_query_base.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_RESOLVER_QUERY_BASE_HPP
+#define BOOST_ASIO_IP_RESOLVER_QUERY_BASE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+/// The resolver_query_base class is used as a base for the
+/// basic_resolver_query class templates to provide a common place to define
+/// the flag constants.
+class resolver_query_base
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// A bitmask type (C++ Std [lib.bitmask.types]).
+  typedef unspecified flags;
+
+  /// Determine the canonical name of the host specified in the query.
+  static const flags canonical_name = implementation_defined;
+
+  /// Indicate that returned endpoint is intended for use as a locally bound
+  /// socket endpoint.
+  static const flags passive = implementation_defined;
+
+  /// Host name should be treated as a numeric string defining an IPv4 or IPv6
+  /// address and no name resolution should be attempted.
+  static const flags numeric_host = implementation_defined;
+
+  /// Service name should be treated as a numeric string defining a port number
+  /// and no name resolution should be attempted.
+  static const flags numeric_service = implementation_defined;
+
+  /// If the query protocol family is specified as IPv6, return IPv4-mapped
+  /// IPv6 addresses on finding no IPv6 addresses.
+  static const flags v4_mapped = implementation_defined;
+
+  /// If used with v4_mapped, return all matching IPv6 and IPv4 addresses.
+  static const flags all_matching = implementation_defined;
+
+  /// Only return IPv4 addresses if a non-loopback IPv4 address is configured
+  /// for the system. Only return IPv6 addresses if a non-loopback IPv6 address
+  /// is configured for the system.
+  static const flags address_configured = implementation_defined;
+#else
+  enum flags
+  {
+    canonical_name = BOOST_ASIO_OS_DEF(AI_CANONNAME),
+    passive = BOOST_ASIO_OS_DEF(AI_PASSIVE),
+    numeric_host = BOOST_ASIO_OS_DEF(AI_NUMERICHOST),
+    numeric_service = BOOST_ASIO_OS_DEF(AI_NUMERICSERV),
+    v4_mapped = BOOST_ASIO_OS_DEF(AI_V4MAPPED),
+    all_matching = BOOST_ASIO_OS_DEF(AI_ALL),
+    address_configured = BOOST_ASIO_OS_DEF(AI_ADDRCONFIG)
+  };
+
+  // Implement bitmask operations as shown in C++ Std [lib.bitmask.types].
+
+  friend flags operator&(flags x, flags y)
+  {
+    return static_cast<flags>(
+        static_cast<unsigned int>(x) & static_cast<unsigned int>(y));
+  }
+
+  friend flags operator|(flags x, flags y)
+  {
+    return static_cast<flags>(
+        static_cast<unsigned int>(x) | static_cast<unsigned int>(y));
+  }
+
+  friend flags operator^(flags x, flags y)
+  {
+    return static_cast<flags>(
+        static_cast<unsigned int>(x) ^ static_cast<unsigned int>(y));
+  }
+
+  friend flags operator~(flags x)
+  {
+    return static_cast<flags>(~static_cast<unsigned int>(x));
+  }
+
+  friend flags& operator&=(flags& x, flags y)
+  {
+    x = x & y;
+    return x;
+  }
+
+  friend flags& operator|=(flags& x, flags y)
+  {
+    x = x | y;
+    return x;
+  }
+
+  friend flags& operator^=(flags& x, flags y)
+  {
+    x = x ^ y;
+    return x;
+  }
+#endif
+
+protected:
+  /// Protected destructor to prevent deletion through this type.
+  ~resolver_query_base()
+  {
+  }
+};
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_RESOLVER_QUERY_BASE_HPP
diff --git a/ext/patches/boost/asio/ip/resolver_service.hpp b/ext/patches/boost/asio/ip/resolver_service.hpp
new file mode 100644
index 0000000..8f41091
--- /dev/null
+++ b/ext/patches/boost/asio/ip/resolver_service.hpp
@@ -0,0 +1,178 @@
+//
+// ip/resolver_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_RESOLVER_SERVICE_HPP
+#define BOOST_ASIO_IP_RESOLVER_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/async_result.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ip/basic_resolver_iterator.hpp>
+#include <boost/asio/ip/basic_resolver_query.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/winrt_resolver_service.hpp>
+#else
+# include <boost/asio/detail/resolver_service.hpp>
+#endif
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+/// Default service implementation for a resolver.
+template <typename InternetProtocol>
+class resolver_service
+#if defined(GENERATING_DOCUMENTATION)
+  : public boost::asio::io_service::service
+#else
+  : public boost::asio::detail::service_base<
+      resolver_service<InternetProtocol> >
+#endif
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The unique service identifier.
+  static boost::asio::io_service::id id;
+#endif
+
+  /// The protocol type.
+  typedef InternetProtocol protocol_type;
+
+  /// The endpoint type.
+  typedef typename InternetProtocol::endpoint endpoint_type;
+
+  /// The query type.
+  typedef basic_resolver_query<InternetProtocol> query_type;
+
+  /// The iterator type.
+  typedef basic_resolver_iterator<InternetProtocol> iterator_type;
+
+private:
+  // The type of the platform-specific implementation.
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  typedef boost::asio::detail::winrt_resolver_service<InternetProtocol>
+    service_impl_type;
+#else
+  typedef boost::asio::detail::resolver_service<InternetProtocol>
+    service_impl_type;
+#endif
+
+public:
+  /// The type of a resolver implementation.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined implementation_type;
+#else
+  typedef typename service_impl_type::implementation_type implementation_type;
+#endif
+
+  /// Construct a new resolver service for the specified io_service.
+  explicit resolver_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<
+        resolver_service<InternetProtocol> >(io_service),
+      service_impl_(io_service)
+  {
+  }
+
+  /// Construct a new resolver implementation.
+  void construct(implementation_type& impl)
+  {
+    service_impl_.construct(impl);
+  }
+
+  /// Destroy a resolver implementation.
+  void destroy(implementation_type& impl)
+  {
+    service_impl_.destroy(impl);
+  }
+
+  /// Cancel pending asynchronous operations.
+  void cancel(implementation_type& impl)
+  {
+    service_impl_.cancel(impl);
+  }
+
+  /// Resolve a query to a list of entries.
+  iterator_type resolve(implementation_type& impl, const query_type& query,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.resolve(impl, query, ec);
+  }
+
+  /// Asynchronously resolve a query to a list of entries.
+  template <typename ResolveHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ResolveHandler,
+      void (boost::system::error_code, iterator_type))
+  async_resolve(implementation_type& impl, const query_type& query,
+      BOOST_ASIO_MOVE_ARG(ResolveHandler) handler)
+  {
+    boost::asio::detail::async_result_init<
+      ResolveHandler, void (boost::system::error_code, iterator_type)> init(
+        BOOST_ASIO_MOVE_CAST(ResolveHandler)(handler));
+
+    service_impl_.async_resolve(impl, query, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Resolve an endpoint to a list of entries.
+  iterator_type resolve(implementation_type& impl,
+      const endpoint_type& endpoint, boost::system::error_code& ec)
+  {
+    return service_impl_.resolve(impl, endpoint, ec);
+  }
+
+  /// Asynchronously resolve an endpoint to a list of entries.
+  template <typename ResolveHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ResolveHandler,
+      void (boost::system::error_code, iterator_type))
+  async_resolve(implementation_type& impl, const endpoint_type& endpoint,
+      BOOST_ASIO_MOVE_ARG(ResolveHandler) handler)
+  {
+    boost::asio::detail::async_result_init<
+      ResolveHandler, void (boost::system::error_code, iterator_type)> init(
+        BOOST_ASIO_MOVE_CAST(ResolveHandler)(handler));
+
+    service_impl_.async_resolve(impl, endpoint, init.handler);
+
+    return init.result.get();
+  }
+
+private:
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+    service_impl_.shutdown_service();
+  }
+
+  // Perform any fork-related housekeeping.
+  void fork_service(boost::asio::io_service::fork_event event)
+  {
+    service_impl_.fork_service(event);
+  }
+
+  // The platform-specific implementation.
+  service_impl_type service_impl_;
+};
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_RESOLVER_SERVICE_HPP
diff --git a/ext/patches/boost/asio/ip/tcp.hpp b/ext/patches/boost/asio/ip/tcp.hpp
new file mode 100644
index 0000000..98892fc
--- /dev/null
+++ b/ext/patches/boost/asio/ip/tcp.hpp
@@ -0,0 +1,157 @@
+//
+// ip/tcp.hpp
+// ~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_TCP_HPP
+#define BOOST_ASIO_IP_TCP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/basic_socket_acceptor.hpp>
+#include <boost/asio/basic_socket_iostream.hpp>
+#include <boost/asio/basic_stream_socket.hpp>
+#include <boost/asio/detail/socket_option.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/ip/basic_endpoint.hpp>
+#include <boost/asio/ip/basic_resolver.hpp>
+#include <boost/asio/ip/basic_resolver_iterator.hpp>
+#include <boost/asio/ip/basic_resolver_query.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+/// Encapsulates the flags needed for TCP.
+/**
+ * The boost::asio::ip::tcp class contains flags necessary for TCP sockets.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Safe.
+ *
+ * @par Concepts:
+ * Protocol, InternetProtocol.
+ */
+class tcp
+{
+public:
+  /// The type of a TCP endpoint.
+  typedef basic_endpoint<tcp> endpoint;
+
+  /// Construct to represent the IPv4 TCP protocol.
+  static tcp v4()
+  {
+    return tcp(BOOST_ASIO_OS_DEF(AF_INET));
+  }
+
+  /// Construct to represent the IPv6 TCP protocol.
+  static tcp v6()
+  {
+    return tcp(BOOST_ASIO_OS_DEF(AF_INET6));
+  }
+
+  /// Obtain an identifier for the type of the protocol.
+  int type() const
+  {
+    return BOOST_ASIO_OS_DEF(SOCK_STREAM);
+  }
+
+  /// Obtain an identifier for the protocol.
+  int protocol() const
+  {
+    return BOOST_ASIO_OS_DEF(IPPROTO_TCP);
+  }
+
+  /// Obtain an identifier for the protocol family.
+  int family() const
+  {
+    return family_;
+  }
+
+  /// The TCP socket type.
+  typedef basic_stream_socket<tcp> socket;
+
+  /// The TCP acceptor type.
+  typedef basic_socket_acceptor<tcp> acceptor;
+
+  /// The TCP resolver type.
+  typedef basic_resolver<tcp> resolver;
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+  /// The TCP iostream type.
+  typedef basic_socket_iostream<tcp> iostream;
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+  /// Socket option for disabling the Nagle algorithm.
+  /**
+   * Implements the IPPROTO_TCP/TCP_NODELAY socket option.
+   *
+   * @par Examples
+   * Setting the option:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::ip::tcp::no_delay option(true);
+   * socket.set_option(option);
+   * @endcode
+   *
+   * @par
+   * Getting the current option value:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::ip::tcp::no_delay option;
+   * socket.get_option(option);
+   * bool is_set = option.value();
+   * @endcode
+   *
+   * @par Concepts:
+   * Socket_Option, Boolean_Socket_Option.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined no_delay;
+#else
+  typedef boost::asio::detail::socket_option::boolean<
+    BOOST_ASIO_OS_DEF(IPPROTO_TCP), BOOST_ASIO_OS_DEF(TCP_NODELAY)> no_delay;
+#endif
+
+  /// Compare two protocols for equality.
+  friend bool operator==(const tcp& p1, const tcp& p2)
+  {
+    return p1.family_ == p2.family_;
+  }
+
+  /// Compare two protocols for inequality.
+  friend bool operator!=(const tcp& p1, const tcp& p2)
+  {
+    return p1.family_ != p2.family_;
+  }
+
+private:
+  // Construct with a specific family.
+  explicit tcp(int protocol_family)
+    : family_(protocol_family)
+  {
+  }
+
+  int family_;
+};
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_TCP_HPP
diff --git a/ext/patches/boost/asio/ip/udp.hpp b/ext/patches/boost/asio/ip/udp.hpp
new file mode 100644
index 0000000..59e50d3
--- /dev/null
+++ b/ext/patches/boost/asio/ip/udp.hpp
@@ -0,0 +1,113 @@
+//
+// ip/udp.hpp
+// ~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_UDP_HPP
+#define BOOST_ASIO_IP_UDP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/basic_datagram_socket.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/ip/basic_endpoint.hpp>
+#include <boost/asio/ip/basic_resolver.hpp>
+#include <boost/asio/ip/basic_resolver_iterator.hpp>
+#include <boost/asio/ip/basic_resolver_query.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+/// Encapsulates the flags needed for UDP.
+/**
+ * The boost::asio::ip::udp class contains flags necessary for UDP sockets.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Safe.
+ *
+ * @par Concepts:
+ * Protocol, InternetProtocol.
+ */
+class udp
+{
+public:
+  /// The type of a UDP endpoint.
+  typedef basic_endpoint<udp> endpoint;
+
+  /// Construct to represent the IPv4 UDP protocol.
+  static udp v4()
+  {
+    return udp(BOOST_ASIO_OS_DEF(AF_INET));
+  }
+
+  /// Construct to represent the IPv6 UDP protocol.
+  static udp v6()
+  {
+    return udp(BOOST_ASIO_OS_DEF(AF_INET6));
+  }
+
+  /// Obtain an identifier for the type of the protocol.
+  int type() const
+  {
+    return BOOST_ASIO_OS_DEF(SOCK_DGRAM);
+  }
+
+  /// Obtain an identifier for the protocol.
+  int protocol() const
+  {
+    return BOOST_ASIO_OS_DEF(IPPROTO_UDP);
+  }
+
+  /// Obtain an identifier for the protocol family.
+  int family() const
+  {
+    return family_;
+  }
+
+  /// The UDP socket type.
+  typedef basic_datagram_socket<udp> socket;
+
+  /// The UDP resolver type.
+  typedef basic_resolver<udp> resolver;
+
+  /// Compare two protocols for equality.
+  friend bool operator==(const udp& p1, const udp& p2)
+  {
+    return p1.family_ == p2.family_;
+  }
+
+  /// Compare two protocols for inequality.
+  friend bool operator!=(const udp& p1, const udp& p2)
+  {
+    return p1.family_ != p2.family_;
+  }
+
+private:
+  // Construct with a specific family.
+  explicit udp(int protocol_family)
+    : family_(protocol_family)
+  {
+  }
+
+  int family_;
+};
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_UDP_HPP
diff --git a/ext/patches/boost/asio/ip/unicast.hpp b/ext/patches/boost/asio/ip/unicast.hpp
new file mode 100644
index 0000000..dd1d1aa
--- /dev/null
+++ b/ext/patches/boost/asio/ip/unicast.hpp
@@ -0,0 +1,72 @@
+//
+// ip/unicast.hpp
+// ~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_UNICAST_HPP
+#define BOOST_ASIO_IP_UNICAST_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/ip/detail/socket_option.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+namespace unicast {
+
+/// Socket option for time-to-live associated with outgoing unicast packets.
+/**
+ * Implements the IPPROTO_IP/IP_UNICAST_TTL socket option.
+ *
+ * @par Examples
+ * Setting the option:
+ * @code
+ * boost::asio::ip::udp::socket socket(io_service); 
+ * ...
+ * boost::asio::ip::unicast::hops option(4);
+ * socket.set_option(option);
+ * @endcode
+ *
+ * @par
+ * Getting the current option value:
+ * @code
+ * boost::asio::ip::udp::socket socket(io_service); 
+ * ...
+ * boost::asio::ip::unicast::hops option;
+ * socket.get_option(option);
+ * int ttl = option.value();
+ * @endcode
+ *
+ * @par Concepts:
+ * GettableSocketOption, SettableSocketOption.
+ */
+#if defined(GENERATING_DOCUMENTATION)
+typedef implementation_defined hops;
+#else
+typedef boost::asio::ip::detail::socket_option::unicast_hops<
+  BOOST_ASIO_OS_DEF(IPPROTO_IP),
+  BOOST_ASIO_OS_DEF(IP_TTL),
+  BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
+  BOOST_ASIO_OS_DEF(IPV6_UNICAST_HOPS)> hops;
+#endif
+
+} // namespace unicast
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_UNICAST_HPP
diff --git a/ext/patches/boost/asio/ip/v6_only.hpp b/ext/patches/boost/asio/ip/v6_only.hpp
new file mode 100644
index 0000000..0ab2445
--- /dev/null
+++ b/ext/patches/boost/asio/ip/v6_only.hpp
@@ -0,0 +1,71 @@
+//
+// ip/v6_only.hpp
+// ~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IP_V6_ONLY_HPP
+#define BOOST_ASIO_IP_V6_ONLY_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/socket_option.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ip {
+
+/// Socket option for determining whether an IPv6 socket supports IPv6
+/// communication only.
+/**
+ * Implements the IPPROTO_IPV6/IP_V6ONLY socket option.
+ *
+ * @par Examples
+ * Setting the option:
+ * @code
+ * boost::asio::ip::tcp::socket socket(io_service); 
+ * ...
+ * boost::asio::ip::v6_only option(true);
+ * socket.set_option(option);
+ * @endcode
+ *
+ * @par
+ * Getting the current option value:
+ * @code
+ * boost::asio::ip::tcp::socket socket(io_service); 
+ * ...
+ * boost::asio::ip::v6_only option;
+ * socket.get_option(option);
+ * bool v6_only = option.value();
+ * @endcode
+ *
+ * @par Concepts:
+ * GettableSocketOption, SettableSocketOption.
+ */
+#if defined(GENERATING_DOCUMENTATION)
+typedef implementation_defined v6_only;
+#elif defined(IPV6_V6ONLY)
+typedef boost::asio::detail::socket_option::boolean<
+    IPPROTO_IPV6, IPV6_V6ONLY> v6_only;
+#else
+typedef boost::asio::detail::socket_option::boolean<
+    boost::asio::detail::custom_socket_option_level,
+    boost::asio::detail::always_fail_option> v6_only;
+#endif
+
+} // namespace ip
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IP_V6_ONLY_HPP
diff --git a/ext/patches/boost/asio/is_read_buffered.hpp b/ext/patches/boost/asio/is_read_buffered.hpp
new file mode 100644
index 0000000..e0bd320
--- /dev/null
+++ b/ext/patches/boost/asio/is_read_buffered.hpp
@@ -0,0 +1,61 @@
+//
+// is_read_buffered.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IS_READ_BUFFERED_HPP
+#define BOOST_ASIO_IS_READ_BUFFERED_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/buffered_read_stream_fwd.hpp>
+#include <boost/asio/buffered_stream_fwd.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+namespace detail {
+
+template <typename Stream>
+char is_read_buffered_helper(buffered_stream<Stream>* s);
+
+template <typename Stream>
+char is_read_buffered_helper(buffered_read_stream<Stream>* s);
+
+struct is_read_buffered_big_type { char data[10]; };
+is_read_buffered_big_type is_read_buffered_helper(...);
+
+} // namespace detail
+
+/// The is_read_buffered class is a traits class that may be used to determine
+/// whether a stream type supports buffering of read data.
+template <typename Stream>
+class is_read_buffered
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The value member is true only if the Stream type supports buffering of
+  /// read data.
+  static const bool value;
+#else
+  BOOST_ASIO_STATIC_CONSTANT(bool,
+      value = sizeof(detail::is_read_buffered_helper((Stream*)0)) == 1);
+#endif
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IS_READ_BUFFERED_HPP
diff --git a/ext/patches/boost/asio/is_write_buffered.hpp b/ext/patches/boost/asio/is_write_buffered.hpp
new file mode 100644
index 0000000..6aae628
--- /dev/null
+++ b/ext/patches/boost/asio/is_write_buffered.hpp
@@ -0,0 +1,61 @@
+//
+// is_write_buffered.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_IS_WRITE_BUFFERED_HPP
+#define BOOST_ASIO_IS_WRITE_BUFFERED_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/buffered_stream_fwd.hpp>
+#include <boost/asio/buffered_write_stream_fwd.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+namespace detail {
+
+template <typename Stream>
+char is_write_buffered_helper(buffered_stream<Stream>* s);
+
+template <typename Stream>
+char is_write_buffered_helper(buffered_write_stream<Stream>* s);
+
+struct is_write_buffered_big_type { char data[10]; };
+is_write_buffered_big_type is_write_buffered_helper(...);
+
+} // namespace detail
+
+/// The is_write_buffered class is a traits class that may be used to determine
+/// whether a stream type supports buffering of written data.
+template <typename Stream>
+class is_write_buffered
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The value member is true only if the Stream type supports buffering of
+  /// written data.
+  static const bool value;
+#else
+  BOOST_ASIO_STATIC_CONSTANT(bool,
+      value = sizeof(detail::is_write_buffered_helper((Stream*)0)) == 1);
+#endif
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_IS_WRITE_BUFFERED_HPP
diff --git a/ext/patches/boost/asio/local/basic_endpoint.hpp b/ext/patches/boost/asio/local/basic_endpoint.hpp
new file mode 100644
index 0000000..66a06a2
--- /dev/null
+++ b/ext/patches/boost/asio/local/basic_endpoint.hpp
@@ -0,0 +1,241 @@
+//
+// local/basic_endpoint.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Derived from a public domain implementation written by Daniel Casimiro.
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_LOCAL_BASIC_ENDPOINT_HPP
+#define BOOST_ASIO_LOCAL_BASIC_ENDPOINT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_LOCAL_SOCKETS) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <boost/asio/local/detail/endpoint.hpp>
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+# include <iosfwd>
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace local {
+
+/// Describes an endpoint for a UNIX socket.
+/**
+ * The boost::asio::local::basic_endpoint class template describes an endpoint
+ * that may be associated with a particular UNIX socket.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ *
+ * @par Concepts:
+ * Endpoint.
+ */
+template <typename Protocol>
+class basic_endpoint
+{
+public:
+  /// The protocol type associated with the endpoint.
+  typedef Protocol protocol_type;
+
+  /// The type of the endpoint structure. This type is dependent on the
+  /// underlying implementation of the socket layer.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined data_type;
+#else
+  typedef boost::asio::detail::socket_addr_type data_type;
+#endif
+
+  /// Default constructor.
+  basic_endpoint()
+  {
+  }
+
+  /// Construct an endpoint using the specified path name.
+  basic_endpoint(const char* path_name)
+    : impl_(path_name)
+  {
+  }
+
+  /// Construct an endpoint using the specified path name.
+  basic_endpoint(const std::string& path_name)
+    : impl_(path_name)
+  {
+  }
+
+  /// Copy constructor.
+  basic_endpoint(const basic_endpoint& other)
+    : impl_(other.impl_)
+  {
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+  /// Move constructor.
+  basic_endpoint(basic_endpoint&& other)
+    : impl_(other.impl_)
+  {
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+  /// Assign from another endpoint.
+  basic_endpoint& operator=(const basic_endpoint& other)
+  {
+    impl_ = other.impl_;
+    return *this;
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+  /// Move-assign from another endpoint.
+  basic_endpoint& operator=(basic_endpoint&& other)
+  {
+    impl_ = other.impl_;
+    return *this;
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+  /// The protocol associated with the endpoint.
+  protocol_type protocol() const
+  {
+    return protocol_type();
+  }
+
+  /// Get the underlying endpoint in the native type.
+  data_type* data()
+  {
+    return impl_.data();
+  }
+
+  /// Get the underlying endpoint in the native type.
+  const data_type* data() const
+  {
+    return impl_.data();
+  }
+
+  /// Get the underlying size of the endpoint in the native type.
+  std::size_t size() const
+  {
+    return impl_.size();
+  }
+
+  /// Set the underlying size of the endpoint in the native type.
+  void resize(std::size_t new_size)
+  {
+    impl_.resize(new_size);
+  }
+
+  /// Get the capacity of the endpoint in the native type.
+  std::size_t capacity() const
+  {
+    return impl_.capacity();
+  }
+
+  /// Get the path associated with the endpoint.
+  std::string path() const
+  {
+    return impl_.path();
+  }
+
+  /// Set the path associated with the endpoint.
+  void path(const char* p)
+  {
+    impl_.path(p);
+  }
+
+  /// Set the path associated with the endpoint.
+  void path(const std::string& p)
+  {
+    impl_.path(p);
+  }
+
+  /// Compare two endpoints for equality.
+  friend bool operator==(const basic_endpoint<Protocol>& e1,
+      const basic_endpoint<Protocol>& e2)
+  {
+    return e1.impl_ == e2.impl_;
+  }
+
+  /// Compare two endpoints for inequality.
+  friend bool operator!=(const basic_endpoint<Protocol>& e1,
+      const basic_endpoint<Protocol>& e2)
+  {
+    return !(e1.impl_ == e2.impl_);
+  }
+
+  /// Compare endpoints for ordering.
+  friend bool operator<(const basic_endpoint<Protocol>& e1,
+      const basic_endpoint<Protocol>& e2)
+  {
+    return e1.impl_ < e2.impl_;
+  }
+
+  /// Compare endpoints for ordering.
+  friend bool operator>(const basic_endpoint<Protocol>& e1,
+      const basic_endpoint<Protocol>& e2)
+  {
+    return e2.impl_ < e1.impl_;
+  }
+
+  /// Compare endpoints for ordering.
+  friend bool operator<=(const basic_endpoint<Protocol>& e1,
+      const basic_endpoint<Protocol>& e2)
+  {
+    return !(e2 < e1);
+  }
+
+  /// Compare endpoints for ordering.
+  friend bool operator>=(const basic_endpoint<Protocol>& e1,
+      const basic_endpoint<Protocol>& e2)
+  {
+    return !(e1 < e2);
+  }
+
+private:
+  // The underlying UNIX domain endpoint.
+  boost::asio::local::detail::endpoint impl_;
+};
+
+/// Output an endpoint as a string.
+/**
+ * Used to output a human-readable string for a specified endpoint.
+ *
+ * @param os The output stream to which the string will be written.
+ *
+ * @param endpoint The endpoint to be written.
+ *
+ * @return The output stream.
+ *
+ * @relates boost::asio::local::basic_endpoint
+ */
+template <typename Elem, typename Traits, typename Protocol>
+std::basic_ostream<Elem, Traits>& operator<<(
+    std::basic_ostream<Elem, Traits>& os,
+    const basic_endpoint<Protocol>& endpoint)
+{
+  os << endpoint.path();
+  return os;
+}
+
+} // namespace local
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_LOCAL_BASIC_ENDPOINT_HPP
diff --git a/ext/patches/boost/asio/local/connect_pair.hpp b/ext/patches/boost/asio/local/connect_pair.hpp
new file mode 100644
index 0000000..2d4c46a
--- /dev/null
+++ b/ext/patches/boost/asio/local/connect_pair.hpp
@@ -0,0 +1,106 @@
+//
+// local/connect_pair.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_LOCAL_CONNECT_PAIR_HPP
+#define BOOST_ASIO_LOCAL_CONNECT_PAIR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_LOCAL_SOCKETS) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <boost/asio/basic_socket.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/local/basic_endpoint.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace local {
+
+/// Create a pair of connected sockets.
+template <typename Protocol, typename SocketService1, typename SocketService2>
+void connect_pair(
+    basic_socket<Protocol, SocketService1>& socket1,
+    basic_socket<Protocol, SocketService2>& socket2);
+
+/// Create a pair of connected sockets.
+template <typename Protocol, typename SocketService1, typename SocketService2>
+boost::system::error_code connect_pair(
+    basic_socket<Protocol, SocketService1>& socket1,
+    basic_socket<Protocol, SocketService2>& socket2,
+    boost::system::error_code& ec);
+
+template <typename Protocol, typename SocketService1, typename SocketService2>
+inline void connect_pair(
+    basic_socket<Protocol, SocketService1>& socket1,
+    basic_socket<Protocol, SocketService2>& socket2)
+{
+  boost::system::error_code ec;
+  connect_pair(socket1, socket2, ec);
+  boost::asio::detail::throw_error(ec, "connect_pair");
+}
+
+template <typename Protocol, typename SocketService1, typename SocketService2>
+inline boost::system::error_code connect_pair(
+    basic_socket<Protocol, SocketService1>& socket1,
+    basic_socket<Protocol, SocketService2>& socket2,
+    boost::system::error_code& ec)
+{
+  // Check that this function is only being used with a UNIX domain socket.
+  boost::asio::local::basic_endpoint<Protocol>* tmp
+    = static_cast<typename Protocol::endpoint*>(0);
+  (void)tmp;
+
+  Protocol protocol;
+  boost::asio::detail::socket_type sv[2];
+  if (boost::asio::detail::socket_ops::socketpair(protocol.family(),
+        protocol.type(), protocol.protocol(), sv, ec)
+      == boost::asio::detail::socket_error_retval)
+    return ec;
+
+  if (socket1.assign(protocol, sv[0], ec))
+  {
+    boost::system::error_code temp_ec;
+    boost::asio::detail::socket_ops::state_type state[2] = { 0, 0 };
+    boost::asio::detail::socket_ops::close(sv[0], state[0], true, temp_ec);
+    boost::asio::detail::socket_ops::close(sv[1], state[1], true, temp_ec);
+    return ec;
+  }
+
+  if (socket2.assign(protocol, sv[1], ec))
+  {
+    boost::system::error_code temp_ec;
+    socket1.close(temp_ec);
+    boost::asio::detail::socket_ops::state_type state = 0;
+    boost::asio::detail::socket_ops::close(sv[1], state, true, temp_ec);
+    return ec;
+  }
+
+  return ec;
+}
+
+} // namespace local
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_LOCAL_CONNECT_PAIR_HPP
diff --git a/ext/patches/boost/asio/local/datagram_protocol.hpp b/ext/patches/boost/asio/local/datagram_protocol.hpp
new file mode 100644
index 0000000..6621170
--- /dev/null
+++ b/ext/patches/boost/asio/local/datagram_protocol.hpp
@@ -0,0 +1,82 @@
+//
+// local/datagram_protocol.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_LOCAL_DATAGRAM_PROTOCOL_HPP
+#define BOOST_ASIO_LOCAL_DATAGRAM_PROTOCOL_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_LOCAL_SOCKETS) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <boost/asio/basic_datagram_socket.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/local/basic_endpoint.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace local {
+
+/// Encapsulates the flags needed for datagram-oriented UNIX sockets.
+/**
+ * The boost::asio::local::datagram_protocol class contains flags necessary for
+ * datagram-oriented UNIX domain sockets.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Safe.
+ *
+ * @par Concepts:
+ * Protocol.
+ */
+class datagram_protocol
+{
+public:
+  /// Obtain an identifier for the type of the protocol.
+  int type() const
+  {
+    return SOCK_DGRAM;
+  }
+
+  /// Obtain an identifier for the protocol.
+  int protocol() const
+  {
+    return 0;
+  }
+
+  /// Obtain an identifier for the protocol family.
+  int family() const
+  {
+    return AF_UNIX;
+  }
+
+  /// The type of a UNIX domain endpoint.
+  typedef basic_endpoint<datagram_protocol> endpoint;
+
+  /// The UNIX domain socket type.
+  typedef basic_datagram_socket<datagram_protocol> socket;
+};
+
+} // namespace local
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_LOCAL_DATAGRAM_PROTOCOL_HPP
diff --git a/ext/patches/boost/asio/local/detail/endpoint.hpp b/ext/patches/boost/asio/local/detail/endpoint.hpp
new file mode 100644
index 0000000..1ca3aea
--- /dev/null
+++ b/ext/patches/boost/asio/local/detail/endpoint.hpp
@@ -0,0 +1,135 @@
+//
+// local/detail/endpoint.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Derived from a public domain implementation written by Daniel Casimiro.
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_LOCAL_DETAIL_ENDPOINT_HPP
+#define BOOST_ASIO_LOCAL_DETAIL_ENDPOINT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
+
+#include <cstddef>
+#include <string>
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace local {
+namespace detail {
+
+// Helper class for implementing a UNIX domain endpoint.
+class endpoint
+{
+public:
+  // Default constructor.
+  BOOST_ASIO_DECL endpoint();
+
+  // Construct an endpoint using the specified path name.
+  BOOST_ASIO_DECL endpoint(const char* path_name);
+
+  // Construct an endpoint using the specified path name.
+  BOOST_ASIO_DECL endpoint(const std::string& path_name);
+
+  // Copy constructor.
+  endpoint(const endpoint& other)
+    : data_(other.data_),
+      path_length_(other.path_length_)
+  {
+  }
+
+  // Assign from another endpoint.
+  endpoint& operator=(const endpoint& other)
+  {
+    data_ = other.data_;
+    path_length_ = other.path_length_;
+    return *this;
+  }
+
+  // Get the underlying endpoint in the native type.
+  boost::asio::detail::socket_addr_type* data()
+  {
+    return &data_.base;
+  }
+
+  // Get the underlying endpoint in the native type.
+  const boost::asio::detail::socket_addr_type* data() const
+  {
+    return &data_.base;
+  }
+
+  // Get the underlying size of the endpoint in the native type.
+  std::size_t size() const
+  {
+    return path_length_
+      + offsetof(boost::asio::detail::sockaddr_un_type, sun_path);
+  }
+
+  // Set the underlying size of the endpoint in the native type.
+  BOOST_ASIO_DECL void resize(std::size_t size);
+
+  // Get the capacity of the endpoint in the native type.
+  std::size_t capacity() const
+  {
+    return sizeof(boost::asio::detail::sockaddr_un_type);
+  }
+
+  // Get the path associated with the endpoint.
+  BOOST_ASIO_DECL std::string path() const;
+
+  // Set the path associated with the endpoint.
+  BOOST_ASIO_DECL void path(const char* p);
+
+  // Set the path associated with the endpoint.
+  BOOST_ASIO_DECL void path(const std::string& p);
+
+  // Compare two endpoints for equality.
+  BOOST_ASIO_DECL friend bool operator==(
+      const endpoint& e1, const endpoint& e2);
+
+  // Compare endpoints for ordering.
+  BOOST_ASIO_DECL friend bool operator<(
+      const endpoint& e1, const endpoint& e2);
+
+private:
+  // The underlying UNIX socket address.
+  union data_union
+  {
+    boost::asio::detail::socket_addr_type base;
+    boost::asio::detail::sockaddr_un_type local;
+  } data_;
+
+  // The length of the path associated with the endpoint.
+  std::size_t path_length_;
+
+  // Initialise with a specified path.
+  BOOST_ASIO_DECL void init(const char* path, std::size_t path_length);
+};
+
+} // namespace detail
+} // namespace local
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/local/detail/impl/endpoint.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
+
+#endif // BOOST_ASIO_LOCAL_DETAIL_ENDPOINT_HPP
diff --git a/ext/patches/boost/asio/local/detail/impl/endpoint.ipp b/ext/patches/boost/asio/local/detail/impl/endpoint.ipp
new file mode 100644
index 0000000..4ba18a1
--- /dev/null
+++ b/ext/patches/boost/asio/local/detail/impl/endpoint.ipp
@@ -0,0 +1,130 @@
+//
+// local/detail/impl/endpoint.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Derived from a public domain implementation written by Daniel Casimiro.
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_LOCAL_DETAIL_IMPL_ENDPOINT_IPP
+#define BOOST_ASIO_LOCAL_DETAIL_IMPL_ENDPOINT_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
+
+#include <cstring>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/local/detail/endpoint.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace local {
+namespace detail {
+
+endpoint::endpoint()
+{
+  init("", 0);
+}
+
+endpoint::endpoint(const char* path_name)
+{
+  using namespace std; // For strlen.
+  init(path_name, strlen(path_name));
+}
+
+endpoint::endpoint(const std::string& path_name)
+{
+  init(path_name.data(), path_name.length());
+}
+
+void endpoint::resize(std::size_t new_size)
+{
+  if (new_size > sizeof(boost::asio::detail::sockaddr_un_type))
+  {
+    boost::system::error_code ec(boost::asio::error::invalid_argument);
+    boost::asio::detail::throw_error(ec);
+  }
+  else if (new_size == 0)
+  {
+    path_length_ = 0;
+  }
+  else
+  {
+    path_length_ = new_size
+      - offsetof(boost::asio::detail::sockaddr_un_type, sun_path);
+
+    // The path returned by the operating system may be NUL-terminated.
+    if (path_length_ > 0 && data_.local.sun_path[path_length_ - 1] == 0)
+      --path_length_;
+  }
+}
+
+std::string endpoint::path() const
+{
+  return std::string(data_.local.sun_path, path_length_);
+}
+
+void endpoint::path(const char* p)
+{
+  using namespace std; // For strlen.
+  init(p, strlen(p));
+}
+
+void endpoint::path(const std::string& p)
+{
+  init(p.data(), p.length());
+}
+
+bool operator==(const endpoint& e1, const endpoint& e2)
+{
+  return e1.path() == e2.path();
+}
+
+bool operator<(const endpoint& e1, const endpoint& e2)
+{
+  return e1.path() < e2.path();
+}
+
+void endpoint::init(const char* path_name, std::size_t path_length)
+{
+  if (path_length > sizeof(data_.local.sun_path) - 1)
+  {
+    // The buffer is not large enough to store this address.
+    boost::system::error_code ec(boost::asio::error::name_too_long);
+    boost::asio::detail::throw_error(ec);
+  }
+
+  using namespace std; // For memcpy.
+  data_.local = boost::asio::detail::sockaddr_un_type();
+  data_.local.sun_family = AF_UNIX;
+  memcpy(data_.local.sun_path, path_name, path_length);
+  path_length_ = path_length;
+
+  // NUL-terminate normal path names. Names that start with a NUL are in the
+  // UNIX domain protocol's "abstract namespace" and are not NUL-terminated.
+  if (path_length > 0 && data_.local.sun_path[0] == 0)
+    data_.local.sun_path[path_length] = 0;
+}
+
+} // namespace detail
+} // namespace local
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
+
+#endif // BOOST_ASIO_LOCAL_DETAIL_IMPL_ENDPOINT_IPP
diff --git a/ext/patches/boost/asio/local/stream_protocol.hpp b/ext/patches/boost/asio/local/stream_protocol.hpp
new file mode 100644
index 0000000..bdf23c3
--- /dev/null
+++ b/ext/patches/boost/asio/local/stream_protocol.hpp
@@ -0,0 +1,92 @@
+//
+// local/stream_protocol.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_LOCAL_STREAM_PROTOCOL_HPP
+#define BOOST_ASIO_LOCAL_STREAM_PROTOCOL_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_LOCAL_SOCKETS) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <boost/asio/basic_socket_acceptor.hpp>
+#include <boost/asio/basic_socket_iostream.hpp>
+#include <boost/asio/basic_stream_socket.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/local/basic_endpoint.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace local {
+
+/// Encapsulates the flags needed for stream-oriented UNIX sockets.
+/**
+ * The boost::asio::local::stream_protocol class contains flags necessary for
+ * stream-oriented UNIX domain sockets.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Safe.
+ *
+ * @par Concepts:
+ * Protocol.
+ */
+class stream_protocol
+{
+public:
+  /// Obtain an identifier for the type of the protocol.
+  int type() const
+  {
+    return SOCK_STREAM;
+  }
+
+  /// Obtain an identifier for the protocol.
+  int protocol() const
+  {
+    return 0;
+  }
+
+  /// Obtain an identifier for the protocol family.
+  int family() const
+  {
+    return AF_UNIX;
+  }
+
+  /// The type of a UNIX domain endpoint.
+  typedef basic_endpoint<stream_protocol> endpoint;
+
+  /// The UNIX domain socket type.
+  typedef basic_stream_socket<stream_protocol> socket;
+
+  /// The UNIX domain acceptor type.
+  typedef basic_socket_acceptor<stream_protocol> acceptor;
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+  /// The UNIX domain iostream type.
+  typedef basic_socket_iostream<stream_protocol> iostream;
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+};
+
+} // namespace local
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_LOCAL_STREAM_PROTOCOL_HPP
diff --git a/ext/patches/boost/asio/placeholders.hpp b/ext/patches/boost/asio/placeholders.hpp
new file mode 100644
index 0000000..f042a53
--- /dev/null
+++ b/ext/patches/boost/asio/placeholders.hpp
@@ -0,0 +1,125 @@
+//
+// placeholders.hpp
+// ~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_PLACEHOLDERS_HPP
+#define BOOST_ASIO_PLACEHOLDERS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_BOOST_BIND)
+# include <boost/bind/arg.hpp>
+#endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace placeholders {
+
+#if defined(GENERATING_DOCUMENTATION)
+
+/// An argument placeholder, for use with boost::bind(), that corresponds to
+/// the error argument of a handler for any of the asynchronous functions.
+unspecified error;
+
+/// An argument placeholder, for use with boost::bind(), that corresponds to
+/// the bytes_transferred argument of a handler for asynchronous functions such
+/// as boost::asio::basic_stream_socket::async_write_some or
+/// boost::asio::async_write.
+unspecified bytes_transferred;
+
+/// An argument placeholder, for use with boost::bind(), that corresponds to
+/// the iterator argument of a handler for asynchronous functions such as
+/// boost::asio::basic_resolver::async_resolve.
+unspecified iterator;
+
+/// An argument placeholder, for use with boost::bind(), that corresponds to
+/// the signal_number argument of a handler for asynchronous functions such as
+/// boost::asio::signal_set::async_wait.
+unspecified signal_number;
+
+#elif defined(BOOST_ASIO_HAS_BOOST_BIND)
+# if defined(__BORLANDC__) || defined(__GNUC__)
+
+inline boost::arg<1> error()
+{
+  return boost::arg<1>();
+}
+
+inline boost::arg<2> bytes_transferred()
+{
+  return boost::arg<2>();
+}
+
+inline boost::arg<2> iterator()
+{
+  return boost::arg<2>();
+}
+
+inline boost::arg<2> signal_number()
+{
+  return boost::arg<2>();
+}
+
+# else
+
+namespace detail
+{
+  template <int Number>
+  struct placeholder
+  {
+    static boost::arg<Number>& get()
+    {
+      static boost::arg<Number> result;
+      return result;
+    }
+  };
+}
+
+#  if defined(BOOST_ASIO_MSVC) && (BOOST_ASIO_MSVC < 1400)
+
+static boost::arg<1>& error
+  = boost::asio::placeholders::detail::placeholder<1>::get();
+static boost::arg<2>& bytes_transferred
+  = boost::asio::placeholders::detail::placeholder<2>::get();
+static boost::arg<2>& iterator
+  = boost::asio::placeholders::detail::placeholder<2>::get();
+static boost::arg<2>& signal_number
+  = boost::asio::placeholders::detail::placeholder<2>::get();
+
+#  else
+
+namespace
+{
+  boost::arg<1>& error
+    = boost::asio::placeholders::detail::placeholder<1>::get();
+  boost::arg<2>& bytes_transferred
+    = boost::asio::placeholders::detail::placeholder<2>::get();
+  boost::arg<2>& iterator
+    = boost::asio::placeholders::detail::placeholder<2>::get();
+  boost::arg<2>& signal_number
+    = boost::asio::placeholders::detail::placeholder<2>::get();
+} // namespace
+
+#  endif
+# endif
+#endif
+
+} // namespace placeholders
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_PLACEHOLDERS_HPP
diff --git a/ext/patches/boost/asio/posix/basic_descriptor.hpp b/ext/patches/boost/asio/posix/basic_descriptor.hpp
new file mode 100644
index 0000000..d958999
--- /dev/null
+++ b/ext/patches/boost/asio/posix/basic_descriptor.hpp
@@ -0,0 +1,492 @@
+//
+// posix/basic_descriptor.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_POSIX_BASIC_DESCRIPTOR_HPP
+#define BOOST_ASIO_POSIX_BASIC_DESCRIPTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <boost/asio/basic_io_object.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/posix/descriptor_base.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace posix {
+
+/// Provides POSIX descriptor functionality.
+/**
+ * The posix::basic_descriptor class template provides the ability to wrap a
+ * POSIX descriptor.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ */
+template <typename DescriptorService>
+class basic_descriptor
+  : public basic_io_object<DescriptorService>,
+    public descriptor_base
+{
+public:
+  /// (Deprecated: Use native_handle_type.) The native representation of a
+  /// descriptor.
+  typedef typename DescriptorService::native_handle_type native_type;
+
+  /// The native representation of a descriptor.
+  typedef typename DescriptorService::native_handle_type native_handle_type;
+
+  /// A basic_descriptor is always the lowest layer.
+  typedef basic_descriptor<DescriptorService> lowest_layer_type;
+
+  /// Construct a basic_descriptor without opening it.
+  /**
+   * This constructor creates a descriptor without opening it.
+   *
+   * @param io_service The io_service object that the descriptor will use to
+   * dispatch handlers for any asynchronous operations performed on the
+   * descriptor.
+   */
+  explicit basic_descriptor(boost::asio::io_service& io_service)
+    : basic_io_object<DescriptorService>(io_service)
+  {
+  }
+
+  /// Construct a basic_descriptor on an existing native descriptor.
+  /**
+   * This constructor creates a descriptor object to hold an existing native
+   * descriptor.
+   *
+   * @param io_service The io_service object that the descriptor will use to
+   * dispatch handlers for any asynchronous operations performed on the
+   * descriptor.
+   *
+   * @param native_descriptor A native descriptor.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_descriptor(boost::asio::io_service& io_service,
+      const native_handle_type& native_descriptor)
+    : basic_io_object<DescriptorService>(io_service)
+  {
+    boost::system::error_code ec;
+    this->get_service().assign(this->get_implementation(),
+        native_descriptor, ec);
+    boost::asio::detail::throw_error(ec, "assign");
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a basic_descriptor from another.
+  /**
+   * This constructor moves a descriptor from one object to another.
+   *
+   * @param other The other basic_descriptor object from which the move will
+   * occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_descriptor(io_service&) constructor.
+   */
+  basic_descriptor(basic_descriptor&& other)
+    : basic_io_object<DescriptorService>(
+        BOOST_ASIO_MOVE_CAST(basic_descriptor)(other))
+  {
+  }
+
+  /// Move-assign a basic_descriptor from another.
+  /**
+   * This assignment operator moves a descriptor from one object to another.
+   *
+   * @param other The other basic_descriptor object from which the move will
+   * occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_descriptor(io_service&) constructor.
+   */
+  basic_descriptor& operator=(basic_descriptor&& other)
+  {
+    basic_io_object<DescriptorService>::operator=(
+        BOOST_ASIO_MOVE_CAST(basic_descriptor)(other));
+    return *this;
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Get a reference to the lowest layer.
+  /**
+   * This function returns a reference to the lowest layer in a stack of
+   * layers. Since a basic_descriptor cannot contain any further layers, it
+   * simply returns a reference to itself.
+   *
+   * @return A reference to the lowest layer in the stack of layers. Ownership
+   * is not transferred to the caller.
+   */
+  lowest_layer_type& lowest_layer()
+  {
+    return *this;
+  }
+
+  /// Get a const reference to the lowest layer.
+  /**
+   * This function returns a const reference to the lowest layer in a stack of
+   * layers. Since a basic_descriptor cannot contain any further layers, it
+   * simply returns a reference to itself.
+   *
+   * @return A const reference to the lowest layer in the stack of layers.
+   * Ownership is not transferred to the caller.
+   */
+  const lowest_layer_type& lowest_layer() const
+  {
+    return *this;
+  }
+
+  /// Assign an existing native descriptor to the descriptor.
+  /*
+   * This function opens the descriptor to hold an existing native descriptor.
+   *
+   * @param native_descriptor A native descriptor.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void assign(const native_handle_type& native_descriptor)
+  {
+    boost::system::error_code ec;
+    this->get_service().assign(this->get_implementation(),
+        native_descriptor, ec);
+    boost::asio::detail::throw_error(ec, "assign");
+  }
+
+  /// Assign an existing native descriptor to the descriptor.
+  /*
+   * This function opens the descriptor to hold an existing native descriptor.
+   *
+   * @param native_descriptor A native descriptor.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code assign(const native_handle_type& native_descriptor,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().assign(
+        this->get_implementation(), native_descriptor, ec);
+  }
+
+  /// Determine whether the descriptor is open.
+  bool is_open() const
+  {
+    return this->get_service().is_open(this->implementation);
+  }
+
+  /// Close the descriptor.
+  /**
+   * This function is used to close the descriptor. Any asynchronous read or
+   * write operations will be cancelled immediately, and will complete with the
+   * boost::asio::error::operation_aborted error.
+   *
+   * @throws boost::system::system_error Thrown on failure. Note that, even if
+   * the function indicates an error, the underlying descriptor is closed.
+   */
+  void close()
+  {
+    boost::system::error_code ec;
+    this->get_service().close(this->get_implementation(), ec);
+    boost::asio::detail::throw_error(ec, "close");
+  }
+
+  /// Close the descriptor.
+  /**
+   * This function is used to close the descriptor. Any asynchronous read or
+   * write operations will be cancelled immediately, and will complete with the
+   * boost::asio::error::operation_aborted error.
+   *
+   * @param ec Set to indicate what error occurred, if any. Note that, even if
+   * the function indicates an error, the underlying descriptor is closed.
+   */
+  boost::system::error_code close(boost::system::error_code& ec)
+  {
+    return this->get_service().close(this->get_implementation(), ec);
+  }
+
+  /// (Deprecated: Use native_handle().) Get the native descriptor
+  /// representation.
+  /**
+   * This function may be used to obtain the underlying representation of the
+   * descriptor. This is intended to allow access to native descriptor
+   * functionality that is not otherwise provided.
+   */
+  native_type native()
+  {
+    return this->get_service().native_handle(this->implementation);
+  }
+
+  /// Get the native descriptor representation.
+  /**
+   * This function may be used to obtain the underlying representation of the
+   * descriptor. This is intended to allow access to native descriptor
+   * functionality that is not otherwise provided.
+   */
+  native_handle_type native_handle()
+  {
+    return this->get_service().native_handle(this->implementation);
+  }
+
+  /// Release ownership of the native descriptor implementation.
+  /**
+   * This function may be used to obtain the underlying representation of the
+   * descriptor. After calling this function, @c is_open() returns false. The
+   * caller is responsible for closing the descriptor.
+   *
+   * All outstanding asynchronous read or write operations will finish
+   * immediately, and the handlers for cancelled operations will be passed the
+   * boost::asio::error::operation_aborted error.
+   */
+  native_handle_type release()
+  {
+    return this->get_service().release(this->implementation);
+  }
+
+  /// Cancel all asynchronous operations associated with the descriptor.
+  /**
+   * This function causes all outstanding asynchronous read or write operations
+   * to finish immediately, and the handlers for cancelled operations will be
+   * passed the boost::asio::error::operation_aborted error.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void cancel()
+  {
+    boost::system::error_code ec;
+    this->get_service().cancel(this->get_implementation(), ec);
+    boost::asio::detail::throw_error(ec, "cancel");
+  }
+
+  /// Cancel all asynchronous operations associated with the descriptor.
+  /**
+   * This function causes all outstanding asynchronous read or write operations
+   * to finish immediately, and the handlers for cancelled operations will be
+   * passed the boost::asio::error::operation_aborted error.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code cancel(boost::system::error_code& ec)
+  {
+    return this->get_service().cancel(this->get_implementation(), ec);
+  }
+
+  /// Perform an IO control command on the descriptor.
+  /**
+   * This function is used to execute an IO control command on the descriptor.
+   *
+   * @param command The IO control command to be performed on the descriptor.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @sa IoControlCommand @n
+   * boost::asio::posix::descriptor_base::bytes_readable @n
+   * boost::asio::posix::descriptor_base::non_blocking_io
+   *
+   * @par Example
+   * Getting the number of bytes ready to read:
+   * @code
+   * boost::asio::posix::stream_descriptor descriptor(io_service);
+   * ...
+   * boost::asio::posix::stream_descriptor::bytes_readable command;
+   * descriptor.io_control(command);
+   * std::size_t bytes_readable = command.get();
+   * @endcode
+   */
+  template <typename IoControlCommand>
+  void io_control(IoControlCommand& command)
+  {
+    boost::system::error_code ec;
+    this->get_service().io_control(this->get_implementation(), command, ec);
+    boost::asio::detail::throw_error(ec, "io_control");
+  }
+
+  /// Perform an IO control command on the descriptor.
+  /**
+   * This function is used to execute an IO control command on the descriptor.
+   *
+   * @param command The IO control command to be performed on the descriptor.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @sa IoControlCommand @n
+   * boost::asio::posix::descriptor_base::bytes_readable @n
+   * boost::asio::posix::descriptor_base::non_blocking_io
+   *
+   * @par Example
+   * Getting the number of bytes ready to read:
+   * @code
+   * boost::asio::posix::stream_descriptor descriptor(io_service);
+   * ...
+   * boost::asio::posix::stream_descriptor::bytes_readable command;
+   * boost::system::error_code ec;
+   * descriptor.io_control(command, ec);
+   * if (ec)
+   * {
+   *   // An error occurred.
+   * }
+   * std::size_t bytes_readable = command.get();
+   * @endcode
+   */
+  template <typename IoControlCommand>
+  boost::system::error_code io_control(IoControlCommand& command,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().io_control(
+        this->get_implementation(), command, ec);
+  }
+
+  /// Gets the non-blocking mode of the descriptor.
+  /**
+   * @returns @c true if the descriptor's synchronous operations will fail with
+   * boost::asio::error::would_block if they are unable to perform the requested
+   * operation immediately. If @c false, synchronous operations will block
+   * until complete.
+   *
+   * @note The non-blocking mode has no effect on the behaviour of asynchronous
+   * operations. Asynchronous operations will never fail with the error
+   * boost::asio::error::would_block.
+   */
+  bool non_blocking() const
+  {
+    return this->get_service().non_blocking(this->implementation);
+  }
+
+  /// Sets the non-blocking mode of the descriptor.
+  /**
+   * @param mode If @c true, the descriptor's synchronous operations will fail
+   * with boost::asio::error::would_block if they are unable to perform the
+   * requested operation immediately. If @c false, synchronous operations will
+   * block until complete.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The non-blocking mode has no effect on the behaviour of asynchronous
+   * operations. Asynchronous operations will never fail with the error
+   * boost::asio::error::would_block.
+   */
+  void non_blocking(bool mode)
+  {
+    boost::system::error_code ec;
+    this->get_service().non_blocking(this->get_implementation(), mode, ec);
+    boost::asio::detail::throw_error(ec, "non_blocking");
+  }
+
+  /// Sets the non-blocking mode of the descriptor.
+  /**
+   * @param mode If @c true, the descriptor's synchronous operations will fail
+   * with boost::asio::error::would_block if they are unable to perform the
+   * requested operation immediately. If @c false, synchronous operations will
+   * block until complete.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note The non-blocking mode has no effect on the behaviour of asynchronous
+   * operations. Asynchronous operations will never fail with the error
+   * boost::asio::error::would_block.
+   */
+  boost::system::error_code non_blocking(
+      bool mode, boost::system::error_code& ec)
+  {
+    return this->get_service().non_blocking(
+        this->get_implementation(), mode, ec);
+  }
+
+  /// Gets the non-blocking mode of the native descriptor implementation.
+  /**
+   * This function is used to retrieve the non-blocking mode of the underlying
+   * native descriptor. This mode has no effect on the behaviour of the
+   * descriptor object's synchronous operations.
+   *
+   * @returns @c true if the underlying descriptor is in non-blocking mode and
+   * direct system calls may fail with boost::asio::error::would_block (or the
+   * equivalent system error).
+   *
+   * @note The current non-blocking mode is cached by the descriptor object.
+   * Consequently, the return value may be incorrect if the non-blocking mode
+   * was set directly on the native descriptor.
+   */
+  bool native_non_blocking() const
+  {
+    return this->get_service().native_non_blocking(this->implementation);
+  }
+
+  /// Sets the non-blocking mode of the native descriptor implementation.
+  /**
+   * This function is used to modify the non-blocking mode of the underlying
+   * native descriptor. It has no effect on the behaviour of the descriptor
+   * object's synchronous operations.
+   *
+   * @param mode If @c true, the underlying descriptor is put into non-blocking
+   * mode and direct system calls may fail with boost::asio::error::would_block
+   * (or the equivalent system error).
+   *
+   * @throws boost::system::system_error Thrown on failure. If the @c mode is
+   * @c false, but the current value of @c non_blocking() is @c true, this
+   * function fails with boost::asio::error::invalid_argument, as the
+   * combination does not make sense.
+   */
+  void native_non_blocking(bool mode)
+  {
+    boost::system::error_code ec;
+    this->get_service().native_non_blocking(
+        this->get_implementation(), mode, ec);
+    boost::asio::detail::throw_error(ec, "native_non_blocking");
+  }
+
+  /// Sets the non-blocking mode of the native descriptor implementation.
+  /**
+   * This function is used to modify the non-blocking mode of the underlying
+   * native descriptor. It has no effect on the behaviour of the descriptor
+   * object's synchronous operations.
+   *
+   * @param mode If @c true, the underlying descriptor is put into non-blocking
+   * mode and direct system calls may fail with boost::asio::error::would_block
+   * (or the equivalent system error).
+   *
+   * @param ec Set to indicate what error occurred, if any. If the @c mode is
+   * @c false, but the current value of @c non_blocking() is @c true, this
+   * function fails with boost::asio::error::invalid_argument, as the
+   * combination does not make sense.
+   */
+  boost::system::error_code native_non_blocking(
+      bool mode, boost::system::error_code& ec)
+  {
+    return this->get_service().native_non_blocking(
+        this->get_implementation(), mode, ec);
+  }
+
+protected:
+  /// Protected destructor to prevent deletion through this type.
+  ~basic_descriptor()
+  {
+  }
+};
+
+} // namespace posix
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_POSIX_BASIC_DESCRIPTOR_HPP
diff --git a/ext/patches/boost/asio/posix/basic_stream_descriptor.hpp b/ext/patches/boost/asio/posix/basic_stream_descriptor.hpp
new file mode 100644
index 0000000..952567f
--- /dev/null
+++ b/ext/patches/boost/asio/posix/basic_stream_descriptor.hpp
@@ -0,0 +1,364 @@
+//
+// posix/basic_stream_descriptor.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_POSIX_BASIC_STREAM_DESCRIPTOR_HPP
+#define BOOST_ASIO_POSIX_BASIC_STREAM_DESCRIPTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <cstddef>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/posix/basic_descriptor.hpp>
+#include <boost/asio/posix/stream_descriptor_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace posix {
+
+/// Provides stream-oriented descriptor functionality.
+/**
+ * The posix::basic_stream_descriptor class template provides asynchronous and
+ * blocking stream-oriented descriptor functionality.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ *
+ * @par Concepts:
+ * AsyncReadStream, AsyncWriteStream, Stream, SyncReadStream, SyncWriteStream.
+ */
+template <typename StreamDescriptorService = stream_descriptor_service>
+class basic_stream_descriptor
+  : public basic_descriptor<StreamDescriptorService>
+{
+public:
+  /// (Deprecated: Use native_handle_type.) The native representation of a
+  /// descriptor.
+  typedef typename StreamDescriptorService::native_handle_type native_type;
+
+  /// The native representation of a descriptor.
+  typedef typename StreamDescriptorService::native_handle_type
+    native_handle_type;
+
+  /// Construct a basic_stream_descriptor without opening it.
+  /**
+   * This constructor creates a stream descriptor without opening it. The
+   * descriptor needs to be opened and then connected or accepted before data
+   * can be sent or received on it.
+   *
+   * @param io_service The io_service object that the stream descriptor will
+   * use to dispatch handlers for any asynchronous operations performed on the
+   * descriptor.
+   */
+  explicit basic_stream_descriptor(boost::asio::io_service& io_service)
+    : basic_descriptor<StreamDescriptorService>(io_service)
+  {
+  }
+
+  /// Construct a basic_stream_descriptor on an existing native descriptor.
+  /**
+   * This constructor creates a stream descriptor object to hold an existing
+   * native descriptor.
+   *
+   * @param io_service The io_service object that the stream descriptor will
+   * use to dispatch handlers for any asynchronous operations performed on the
+   * descriptor.
+   *
+   * @param native_descriptor The new underlying descriptor implementation.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_stream_descriptor(boost::asio::io_service& io_service,
+      const native_handle_type& native_descriptor)
+    : basic_descriptor<StreamDescriptorService>(io_service, native_descriptor)
+  {
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a basic_stream_descriptor from another.
+  /**
+   * This constructor moves a stream descriptor from one object to another.
+   *
+   * @param other The other basic_stream_descriptor object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_stream_descriptor(io_service&) constructor.
+   */
+  basic_stream_descriptor(basic_stream_descriptor&& other)
+    : basic_descriptor<StreamDescriptorService>(
+        BOOST_ASIO_MOVE_CAST(basic_stream_descriptor)(other))
+  {
+  }
+
+  /// Move-assign a basic_stream_descriptor from another.
+  /**
+   * This assignment operator moves a stream descriptor from one object to
+   * another.
+   *
+   * @param other The other basic_stream_descriptor object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_stream_descriptor(io_service&) constructor.
+   */
+  basic_stream_descriptor& operator=(basic_stream_descriptor&& other)
+  {
+    basic_descriptor<StreamDescriptorService>::operator=(
+        BOOST_ASIO_MOVE_CAST(basic_stream_descriptor)(other));
+    return *this;
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Write some data to the descriptor.
+  /**
+   * This function is used to write data to the stream descriptor. The function
+   * call will block until one or more bytes of the data has been written
+   * successfully, or until an error occurs.
+   *
+   * @param buffers One or more data buffers to be written to the descriptor.
+   *
+   * @returns The number of bytes written.
+   *
+   * @throws boost::system::system_error Thrown on failure. An error code of
+   * boost::asio::error::eof indicates that the connection was closed by the
+   * peer.
+   *
+   * @note The write_some operation may not transmit all of the data to the
+   * peer. Consider using the @ref write function if you need to ensure that
+   * all data is written before the blocking operation completes.
+   *
+   * @par Example
+   * To write a single data buffer use the @ref buffer function as follows:
+   * @code
+   * descriptor.write_some(boost::asio::buffer(data, size));
+   * @endcode
+   * See the @ref buffer documentation for information on writing multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().write_some(
+        this->get_implementation(), buffers, ec);
+    boost::asio::detail::throw_error(ec, "write_some");
+    return s;
+  }
+
+  /// Write some data to the descriptor.
+  /**
+   * This function is used to write data to the stream descriptor. The function
+   * call will block until one or more bytes of the data has been written
+   * successfully, or until an error occurs.
+   *
+   * @param buffers One or more data buffers to be written to the descriptor.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes written. Returns 0 if an error occurred.
+   *
+   * @note The write_some operation may not transmit all of the data to the
+   * peer. Consider using the @ref write function if you need to ensure that
+   * all data is written before the blocking operation completes.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().write_some(
+        this->get_implementation(), buffers, ec);
+  }
+
+  /// Start an asynchronous write.
+  /**
+   * This function is used to asynchronously write data to the stream
+   * descriptor. The function call always returns immediately.
+   *
+   * @param buffers One or more data buffers to be written to the descriptor.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param handler The handler to be called when the write operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes written.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The write operation may not transmit all of the data to the peer.
+   * Consider using the @ref async_write function if you need to ensure that all
+   * data is written before the asynchronous operation completes.
+   *
+   * @par Example
+   * To write a single data buffer use the @ref buffer function as follows:
+   * @code
+   * descriptor.async_write_some(boost::asio::buffer(data, size), handler);
+   * @endcode
+   * See the @ref buffer documentation for information on writing multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_write_some(const ConstBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WriteHandler.
+    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+    return this->get_service().async_write_some(this->get_implementation(),
+        buffers, BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Read some data from the descriptor.
+  /**
+   * This function is used to read data from the stream descriptor. The function
+   * call will block until one or more bytes of data has been read successfully,
+   * or until an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be read.
+   *
+   * @returns The number of bytes read.
+   *
+   * @throws boost::system::system_error Thrown on failure. An error code of
+   * boost::asio::error::eof indicates that the connection was closed by the
+   * peer.
+   *
+   * @note The read_some operation may not read all of the requested number of
+   * bytes. Consider using the @ref read function if you need to ensure that
+   * the requested amount of data is read before the blocking operation
+   * completes.
+   *
+   * @par Example
+   * To read into a single data buffer use the @ref buffer function as follows:
+   * @code
+   * descriptor.read_some(boost::asio::buffer(data, size));
+   * @endcode
+   * See the @ref buffer documentation for information on reading into multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().read_some(
+        this->get_implementation(), buffers, ec);
+    boost::asio::detail::throw_error(ec, "read_some");
+    return s;
+  }
+
+  /// Read some data from the descriptor.
+  /**
+   * This function is used to read data from the stream descriptor. The function
+   * call will block until one or more bytes of data has been read successfully,
+   * or until an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be read.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes read. Returns 0 if an error occurred.
+   *
+   * @note The read_some operation may not read all of the requested number of
+   * bytes. Consider using the @ref read function if you need to ensure that
+   * the requested amount of data is read before the blocking operation
+   * completes.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().read_some(
+        this->get_implementation(), buffers, ec);
+  }
+
+  /// Start an asynchronous read.
+  /**
+   * This function is used to asynchronously read data from the stream
+   * descriptor. The function call always returns immediately.
+   *
+   * @param buffers One or more buffers into which the data will be read.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param handler The handler to be called when the read operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes read.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The read operation may not read all of the requested number of bytes.
+   * Consider using the @ref async_read function if you need to ensure that the
+   * requested amount of data is read before the asynchronous operation
+   * completes.
+   *
+   * @par Example
+   * To read into a single data buffer use the @ref buffer function as follows:
+   * @code
+   * descriptor.async_read_some(boost::asio::buffer(data, size), handler);
+   * @endcode
+   * See the @ref buffer documentation for information on reading into multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_read_some(const MutableBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    return this->get_service().async_read_some(this->get_implementation(),
+        buffers, BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+};
+
+} // namespace posix
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_POSIX_BASIC_STREAM_DESCRIPTOR_HPP
diff --git a/ext/patches/boost/asio/posix/descriptor_base.hpp b/ext/patches/boost/asio/posix/descriptor_base.hpp
new file mode 100644
index 0000000..884ea5d
--- /dev/null
+++ b/ext/patches/boost/asio/posix/descriptor_base.hpp
@@ -0,0 +1,99 @@
+//
+// posix/descriptor_base.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_POSIX_DESCRIPTOR_BASE_HPP
+#define BOOST_ASIO_POSIX_DESCRIPTOR_BASE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <boost/asio/detail/io_control.hpp>
+#include <boost/asio/detail/socket_option.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace posix {
+
+/// The descriptor_base class is used as a base for the basic_stream_descriptor
+/// class template so that we have a common place to define the associated
+/// IO control commands.
+class descriptor_base
+{
+public:
+  /// (Deprecated: Use non_blocking().) IO control command to set the blocking
+  /// mode of the descriptor.
+  /**
+   * Implements the FIONBIO IO control command.
+   *
+   * @par Example
+   * @code
+   * boost::asio::posix::stream_descriptor descriptor(io_service); 
+   * ...
+   * boost::asio::descriptor_base::non_blocking_io command(true);
+   * descriptor.io_control(command);
+   * @endcode
+   *
+   * @par Concepts:
+   * IoControlCommand.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined non_blocking_io;
+#else
+  typedef boost::asio::detail::io_control::non_blocking_io non_blocking_io;
+#endif
+
+  /// IO control command to get the amount of data that can be read without
+  /// blocking.
+  /**
+   * Implements the FIONREAD IO control command.
+   *
+   * @par Example
+   * @code
+   * boost::asio::posix::stream_descriptor descriptor(io_service); 
+   * ...
+   * boost::asio::descriptor_base::bytes_readable command(true);
+   * descriptor.io_control(command);
+   * std::size_t bytes_readable = command.get();
+   * @endcode
+   *
+   * @par Concepts:
+   * IoControlCommand.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined bytes_readable;
+#else
+  typedef boost::asio::detail::io_control::bytes_readable bytes_readable;
+#endif
+
+protected:
+  /// Protected destructor to prevent deletion through this type.
+  ~descriptor_base()
+  {
+  }
+};
+
+} // namespace posix
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_POSIX_DESCRIPTOR_BASE_HPP
diff --git a/ext/patches/boost/asio/posix/stream_descriptor.hpp b/ext/patches/boost/asio/posix/stream_descriptor.hpp
new file mode 100644
index 0000000..76a449c
--- /dev/null
+++ b/ext/patches/boost/asio/posix/stream_descriptor.hpp
@@ -0,0 +1,39 @@
+//
+// posix/stream_descriptor.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_POSIX_STREAM_DESCRIPTOR_HPP
+#define BOOST_ASIO_POSIX_STREAM_DESCRIPTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <boost/asio/posix/basic_stream_descriptor.hpp>
+
+namespace boost {
+namespace asio {
+namespace posix {
+
+/// Typedef for the typical usage of a stream-oriented descriptor.
+typedef basic_stream_descriptor<> stream_descriptor;
+
+} // namespace posix
+} // namespace asio
+} // namespace boost
+
+#endif // defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_POSIX_STREAM_DESCRIPTOR_HPP
diff --git a/ext/patches/boost/asio/posix/stream_descriptor_service.hpp b/ext/patches/boost/asio/posix/stream_descriptor_service.hpp
new file mode 100644
index 0000000..2c6aa88
--- /dev/null
+++ b/ext/patches/boost/asio/posix/stream_descriptor_service.hpp
@@ -0,0 +1,262 @@
+//
+// posix/stream_descriptor_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_POSIX_STREAM_DESCRIPTOR_SERVICE_HPP
+#define BOOST_ASIO_POSIX_STREAM_DESCRIPTOR_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <cstddef>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/detail/reactive_descriptor_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace posix {
+
+/// Default service implementation for a stream descriptor.
+class stream_descriptor_service
+#if defined(GENERATING_DOCUMENTATION)
+  : public boost::asio::io_service::service
+#else
+  : public boost::asio::detail::service_base<stream_descriptor_service>
+#endif
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The unique service identifier.
+  static boost::asio::io_service::id id;
+#endif
+
+private:
+  // The type of the platform-specific implementation.
+  typedef detail::reactive_descriptor_service service_impl_type;
+
+public:
+  /// The type of a stream descriptor implementation.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined implementation_type;
+#else
+  typedef service_impl_type::implementation_type implementation_type;
+#endif
+
+  /// (Deprecated: Use native_handle_type.) The native descriptor type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_type;
+#else
+  typedef service_impl_type::native_handle_type native_type;
+#endif
+
+  /// The native descriptor type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_handle_type;
+#else
+  typedef service_impl_type::native_handle_type native_handle_type;
+#endif
+
+  /// Construct a new stream descriptor service for the specified io_service.
+  explicit stream_descriptor_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<stream_descriptor_service>(io_service),
+      service_impl_(io_service)
+  {
+  }
+
+  /// Construct a new stream descriptor implementation.
+  void construct(implementation_type& impl)
+  {
+    service_impl_.construct(impl);
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a new stream descriptor implementation.
+  void move_construct(implementation_type& impl,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_construct(impl, other_impl);
+  }
+
+  /// Move-assign from another stream descriptor implementation.
+  void move_assign(implementation_type& impl,
+      stream_descriptor_service& other_service,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_assign(impl, other_service.service_impl_, other_impl);
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Destroy a stream descriptor implementation.
+  void destroy(implementation_type& impl)
+  {
+    service_impl_.destroy(impl);
+  }
+
+  /// Assign an existing native descriptor to a stream descriptor.
+  boost::system::error_code assign(implementation_type& impl,
+      const native_handle_type& native_descriptor,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.assign(impl, native_descriptor, ec);
+  }
+
+  /// Determine whether the descriptor is open.
+  bool is_open(const implementation_type& impl) const
+  {
+    return service_impl_.is_open(impl);
+  }
+
+  /// Close a stream descriptor implementation.
+  boost::system::error_code close(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.close(impl, ec);
+  }
+
+  /// (Deprecated: Use native_handle().) Get the native descriptor
+  /// implementation.
+  native_type native(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Get the native descriptor implementation.
+  native_handle_type native_handle(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Release ownership of the native descriptor implementation.
+  native_handle_type release(implementation_type& impl)
+  {
+    return service_impl_.release(impl);
+  }
+
+  /// Cancel all asynchronous operations associated with the descriptor.
+  boost::system::error_code cancel(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.cancel(impl, ec);
+  }
+
+  /// Perform an IO control command on the descriptor.
+  template <typename IoControlCommand>
+  boost::system::error_code io_control(implementation_type& impl,
+      IoControlCommand& command, boost::system::error_code& ec)
+  {
+    return service_impl_.io_control(impl, command, ec);
+  }
+
+  /// Gets the non-blocking mode of the descriptor.
+  bool non_blocking(const implementation_type& impl) const
+  {
+    return service_impl_.non_blocking(impl);
+  }
+
+  /// Sets the non-blocking mode of the descriptor.
+  boost::system::error_code non_blocking(implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    return service_impl_.non_blocking(impl, mode, ec);
+  }
+
+  /// Gets the non-blocking mode of the native descriptor implementation.
+  bool native_non_blocking(const implementation_type& impl) const
+  {
+    return service_impl_.native_non_blocking(impl);
+  }
+
+  /// Sets the non-blocking mode of the native descriptor implementation.
+  boost::system::error_code native_non_blocking(implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    return service_impl_.native_non_blocking(impl, mode, ec);
+  }
+
+  /// Write the given data to the stream.
+  template <typename ConstBufferSequence>
+  std::size_t write_some(implementation_type& impl,
+      const ConstBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return service_impl_.write_some(impl, buffers, ec);
+  }
+
+  /// Start an asynchronous write.
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_write_some(implementation_type& impl,
+      const ConstBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    boost::asio::detail::async_result_init<
+      WriteHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+    service_impl_.async_write_some(impl, buffers, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Read some data from the stream.
+  template <typename MutableBufferSequence>
+  std::size_t read_some(implementation_type& impl,
+      const MutableBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return service_impl_.read_some(impl, buffers, ec);
+  }
+
+  /// Start an asynchronous read.
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_read_some(implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    boost::asio::detail::async_result_init<
+      ReadHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+    service_impl_.async_read_some(impl, buffers, init.handler);
+
+    return init.result.get();
+  }
+
+private:
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+    service_impl_.shutdown_service();
+  }
+
+  // The platform-specific implementation.
+  service_impl_type service_impl_;
+};
+
+} // namespace posix
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_POSIX_STREAM_DESCRIPTOR_SERVICE_HPP
diff --git a/ext/patches/boost/asio/raw_socket_service.hpp b/ext/patches/boost/asio/raw_socket_service.hpp
new file mode 100644
index 0000000..7a67105
--- /dev/null
+++ b/ext/patches/boost/asio/raw_socket_service.hpp
@@ -0,0 +1,434 @@
+//
+// raw_socket_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_RAW_SOCKET_SERVICE_HPP
+#define BOOST_ASIO_RAW_SOCKET_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/detail/type_traits.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/null_socket_service.hpp>
+#elif defined(BOOST_ASIO_HAS_IOCP)
+# include <boost/asio/detail/win_iocp_socket_service.hpp>
+#else
+# include <boost/asio/detail/reactive_socket_service.hpp>
+#endif
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Default service implementation for a raw socket.
+template <typename Protocol>
+class raw_socket_service
+#if defined(GENERATING_DOCUMENTATION)
+  : public boost::asio::io_service::service
+#else
+  : public boost::asio::detail::service_base<raw_socket_service<Protocol> >
+#endif
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The unique service identifier.
+  static boost::asio::io_service::id id;
+#endif
+
+  /// The protocol type.
+  typedef Protocol protocol_type;
+
+  /// The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+private:
+  // The type of the platform-specific implementation.
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  typedef detail::null_socket_service<Protocol> service_impl_type;
+#elif defined(BOOST_ASIO_HAS_IOCP)
+  typedef detail::win_iocp_socket_service<Protocol> service_impl_type;
+#else
+  typedef detail::reactive_socket_service<Protocol> service_impl_type;
+#endif
+
+public:
+  /// The type of a raw socket.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined implementation_type;
+#else
+  typedef typename service_impl_type::implementation_type implementation_type;
+#endif
+
+  /// (Deprecated: Use native_handle_type.) The native socket type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_type;
+#else
+  typedef typename service_impl_type::native_handle_type native_type;
+#endif
+
+  /// The native socket type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_handle_type;
+#else
+  typedef typename service_impl_type::native_handle_type native_handle_type;
+#endif
+
+  /// Construct a new raw socket service for the specified io_service.
+  explicit raw_socket_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<
+        raw_socket_service<Protocol> >(io_service),
+      service_impl_(io_service)
+  {
+  }
+
+  /// Construct a new raw socket implementation.
+  void construct(implementation_type& impl)
+  {
+    service_impl_.construct(impl);
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a new raw socket implementation.
+  void move_construct(implementation_type& impl,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_construct(impl, other_impl);
+  }
+
+  /// Move-assign from another raw socket implementation.
+  void move_assign(implementation_type& impl,
+      raw_socket_service& other_service,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_assign(impl, other_service.service_impl_, other_impl);
+  }
+
+  /// Move-construct a new raw socket implementation from another protocol
+  /// type.
+  template <typename Protocol1>
+  void converting_move_construct(implementation_type& impl,
+      typename raw_socket_service<
+        Protocol1>::implementation_type& other_impl,
+      typename enable_if<is_convertible<
+        Protocol1, Protocol>::value>::type* = 0)
+  {
+    service_impl_.template converting_move_construct<Protocol1>(
+        impl, other_impl);
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Destroy a raw socket implementation.
+  void destroy(implementation_type& impl)
+  {
+    service_impl_.destroy(impl);
+  }
+
+  // Open a new raw socket implementation.
+  boost::system::error_code open(implementation_type& impl,
+      const protocol_type& protocol, boost::system::error_code& ec)
+  {
+    if (protocol.type() == BOOST_ASIO_OS_DEF(SOCK_RAW))
+      service_impl_.open(impl, protocol, ec);
+    else
+      ec = boost::asio::error::invalid_argument;
+    return ec;
+  }
+
+  /// Assign an existing native socket to a raw socket.
+  boost::system::error_code assign(implementation_type& impl,
+      const protocol_type& protocol, const native_handle_type& native_socket,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.assign(impl, protocol, native_socket, ec);
+  }
+
+  /// Determine whether the socket is open.
+  bool is_open(const implementation_type& impl) const
+  {
+    return service_impl_.is_open(impl);
+  }
+
+  /// Close a raw socket implementation.
+  boost::system::error_code close(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.close(impl, ec);
+  }
+
+  /// (Deprecated: Use native_handle().) Get the native socket implementation.
+  native_type native(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Get the native socket implementation.
+  native_handle_type native_handle(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Cancel all asynchronous operations associated with the socket.
+  boost::system::error_code cancel(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.cancel(impl, ec);
+  }
+
+  /// Determine whether the socket is at the out-of-band data mark.
+  bool at_mark(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return service_impl_.at_mark(impl, ec);
+  }
+
+  /// Determine the number of bytes available for reading.
+  std::size_t available(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return service_impl_.available(impl, ec);
+  }
+
+  // Bind the raw socket to the specified local endpoint.
+  boost::system::error_code bind(implementation_type& impl,
+      const endpoint_type& endpoint, boost::system::error_code& ec)
+  {
+    return service_impl_.bind(impl, endpoint, ec);
+  }
+
+  /// Connect the raw socket to the specified endpoint.
+  boost::system::error_code connect(implementation_type& impl,
+      const endpoint_type& peer_endpoint, boost::system::error_code& ec)
+  {
+    return service_impl_.connect(impl, peer_endpoint, ec);
+  }
+
+  /// Start an asynchronous connect.
+  template <typename ConnectHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ConnectHandler,
+      void (boost::system::error_code))
+  async_connect(implementation_type& impl,
+      const endpoint_type& peer_endpoint,
+      BOOST_ASIO_MOVE_ARG(ConnectHandler) handler)
+  {
+    detail::async_result_init<
+      ConnectHandler, void (boost::system::error_code)> init(
+        BOOST_ASIO_MOVE_CAST(ConnectHandler)(handler));
+
+    service_impl_.async_connect(impl, peer_endpoint, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Set a socket option.
+  template <typename SettableSocketOption>
+  boost::system::error_code set_option(implementation_type& impl,
+      const SettableSocketOption& option, boost::system::error_code& ec)
+  {
+    return service_impl_.set_option(impl, option, ec);
+  }
+
+  /// Get a socket option.
+  template <typename GettableSocketOption>
+  boost::system::error_code get_option(const implementation_type& impl,
+      GettableSocketOption& option, boost::system::error_code& ec) const
+  {
+    return service_impl_.get_option(impl, option, ec);
+  }
+
+  /// Perform an IO control command on the socket.
+  template <typename IoControlCommand>
+  boost::system::error_code io_control(implementation_type& impl,
+      IoControlCommand& command, boost::system::error_code& ec)
+  {
+    return service_impl_.io_control(impl, command, ec);
+  }
+
+  /// Gets the non-blocking mode of the socket.
+  bool non_blocking(const implementation_type& impl) const
+  {
+    return service_impl_.non_blocking(impl);
+  }
+
+  /// Sets the non-blocking mode of the socket.
+  boost::system::error_code non_blocking(implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    return service_impl_.non_blocking(impl, mode, ec);
+  }
+
+  /// Gets the non-blocking mode of the native socket implementation.
+  bool native_non_blocking(const implementation_type& impl) const
+  {
+    return service_impl_.native_non_blocking(impl);
+  }
+
+  /// Sets the non-blocking mode of the native socket implementation.
+  boost::system::error_code native_non_blocking(implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    return service_impl_.native_non_blocking(impl, mode, ec);
+  }
+
+  /// Get the local endpoint.
+  endpoint_type local_endpoint(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return service_impl_.local_endpoint(impl, ec);
+  }
+
+  /// Get the remote endpoint.
+  endpoint_type remote_endpoint(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return service_impl_.remote_endpoint(impl, ec);
+  }
+
+  /// Disable sends or receives on the socket.
+  boost::system::error_code shutdown(implementation_type& impl,
+      socket_base::shutdown_type what, boost::system::error_code& ec)
+  {
+    return service_impl_.shutdown(impl, what, ec);
+  }
+
+  /// Send the given data to the peer.
+  template <typename ConstBufferSequence>
+  std::size_t send(implementation_type& impl,
+      const ConstBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return service_impl_.send(impl, buffers, flags, ec);
+  }
+
+  /// Start an asynchronous send.
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_send(implementation_type& impl, const ConstBufferSequence& buffers,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    detail::async_result_init<
+      WriteHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+    service_impl_.async_send(impl, buffers, flags, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Send raw data to the specified endpoint.
+  template <typename ConstBufferSequence>
+  std::size_t send_to(implementation_type& impl,
+      const ConstBufferSequence& buffers, const endpoint_type& destination,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return service_impl_.send_to(impl, buffers, destination, flags, ec);
+  }
+
+  /// Start an asynchronous send.
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_send_to(implementation_type& impl,
+      const ConstBufferSequence& buffers, const endpoint_type& destination,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    detail::async_result_init<
+      WriteHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+    service_impl_.async_send_to(impl, buffers,
+        destination, flags, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Receive some data from the peer.
+  template <typename MutableBufferSequence>
+  std::size_t receive(implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return service_impl_.receive(impl, buffers, flags, ec);
+  }
+
+  /// Start an asynchronous receive.
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive(implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    detail::async_result_init<
+      ReadHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+    service_impl_.async_receive(impl, buffers, flags, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Receive raw data with the endpoint of the sender.
+  template <typename MutableBufferSequence>
+  std::size_t receive_from(implementation_type& impl,
+      const MutableBufferSequence& buffers, endpoint_type& sender_endpoint,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return service_impl_.receive_from(impl, buffers, sender_endpoint, flags,
+        ec);
+  }
+
+  /// Start an asynchronous receive that will get the endpoint of the sender.
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive_from(implementation_type& impl,
+      const MutableBufferSequence& buffers, endpoint_type& sender_endpoint,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    detail::async_result_init<
+      ReadHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+    service_impl_.async_receive_from(impl, buffers,
+        sender_endpoint, flags, init.handler);
+
+    return init.result.get();
+  }
+
+private:
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+    service_impl_.shutdown_service();
+  }
+
+  // The platform-specific implementation.
+  service_impl_type service_impl_;
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_RAW_SOCKET_SERVICE_HPP
diff --git a/ext/patches/boost/asio/read.hpp b/ext/patches/boost/asio/read.hpp
new file mode 100644
index 0000000..987781d
--- /dev/null
+++ b/ext/patches/boost/asio/read.hpp
@@ -0,0 +1,633 @@
+//
+// read.hpp
+// ~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_READ_HPP
+#define BOOST_ASIO_READ_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/basic_streambuf_fwd.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/**
+ * @defgroup read boost::asio::read
+ *
+ * @brief Attempt to read a certain amount of data from a stream before
+ * returning.
+ */
+/*@{*/
+
+/// Attempt to read a certain amount of data from a stream before returning.
+/**
+ * This function is used to read a certain number of bytes of data from a
+ * stream. The call will block until one of the following conditions is true:
+ *
+ * @li The supplied buffers are full. That is, the bytes transferred is equal to
+ * the sum of the buffer sizes.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param buffers One or more buffers into which the data will be read. The sum
+ * of the buffer sizes indicates the maximum number of bytes to read from the
+ * stream.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @par Example
+ * To read into a single data buffer use the @ref buffer function as follows:
+ * @code boost::asio::read(s, boost::asio::buffer(data, size)); @endcode
+ * See the @ref buffer documentation for information on reading into multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::read(
+ *     s, buffers,
+ *     boost::asio::transfer_all()); @endcode
+ */
+template <typename SyncReadStream, typename MutableBufferSequence>
+std::size_t read(SyncReadStream& s, const MutableBufferSequence& buffers);
+
+/// Attempt to read a certain amount of data from a stream before returning.
+/**
+ * This function is used to read a certain number of bytes of data from a
+ * stream. The call will block until one of the following conditions is true:
+ *
+ * @li The supplied buffers are full. That is, the bytes transferred is equal to
+ * the sum of the buffer sizes.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param buffers One or more buffers into which the data will be read. The sum
+ * of the buffer sizes indicates the maximum number of bytes to read from the
+ * stream.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @par Example
+ * To read into a single data buffer use the @ref buffer function as follows:
+ * @code boost::asio::read(s, boost::asio::buffer(data, size), ec); @endcode
+ * See the @ref buffer documentation for information on reading into multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::read(
+ *     s, buffers,
+ *     boost::asio::transfer_all(), ec); @endcode
+ */
+template <typename SyncReadStream, typename MutableBufferSequence>
+std::size_t read(SyncReadStream& s, const MutableBufferSequence& buffers,
+    boost::system::error_code& ec);
+
+/// Attempt to read a certain amount of data from a stream before returning.
+/**
+ * This function is used to read a certain number of bytes of data from a
+ * stream. The call will block until one of the following conditions is true:
+ *
+ * @li The supplied buffers are full. That is, the bytes transferred is equal to
+ * the sum of the buffer sizes.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param buffers One or more buffers into which the data will be read. The sum
+ * of the buffer sizes indicates the maximum number of bytes to read from the
+ * stream.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the read operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest read_some operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the read operation is complete. A non-zero
+ * return value indicates the maximum number of bytes to be read on the next
+ * call to the stream's read_some function.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @par Example
+ * To read into a single data buffer use the @ref buffer function as follows:
+ * @code boost::asio::read(s, boost::asio::buffer(data, size),
+ *     boost::asio::transfer_at_least(32)); @endcode
+ * See the @ref buffer documentation for information on reading into multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+template <typename SyncReadStream, typename MutableBufferSequence,
+  typename CompletionCondition>
+std::size_t read(SyncReadStream& s, const MutableBufferSequence& buffers,
+    CompletionCondition completion_condition);
+
+/// Attempt to read a certain amount of data from a stream before returning.
+/**
+ * This function is used to read a certain number of bytes of data from a
+ * stream. The call will block until one of the following conditions is true:
+ *
+ * @li The supplied buffers are full. That is, the bytes transferred is equal to
+ * the sum of the buffer sizes.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param buffers One or more buffers into which the data will be read. The sum
+ * of the buffer sizes indicates the maximum number of bytes to read from the
+ * stream.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the read operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest read_some operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the read operation is complete. A non-zero
+ * return value indicates the maximum number of bytes to be read on the next
+ * call to the stream's read_some function.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes read. If an error occurs, returns the total
+ * number of bytes successfully transferred prior to the error.
+ */
+template <typename SyncReadStream, typename MutableBufferSequence,
+    typename CompletionCondition>
+std::size_t read(SyncReadStream& s, const MutableBufferSequence& buffers,
+    CompletionCondition completion_condition, boost::system::error_code& ec);
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/// Attempt to read a certain amount of data from a stream before returning.
+/**
+ * This function is used to read a certain number of bytes of data from a
+ * stream. The call will block until one of the following conditions is true:
+ *
+ * @li The supplied buffer is full (that is, it has reached maximum size).
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param b The basic_streambuf object into which the data will be read.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::read(
+ *     s, b,
+ *     boost::asio::transfer_all()); @endcode
+ */
+template <typename SyncReadStream, typename Allocator>
+std::size_t read(SyncReadStream& s, basic_streambuf<Allocator>& b);
+
+/// Attempt to read a certain amount of data from a stream before returning.
+/**
+ * This function is used to read a certain number of bytes of data from a
+ * stream. The call will block until one of the following conditions is true:
+ *
+ * @li The supplied buffer is full (that is, it has reached maximum size).
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param b The basic_streambuf object into which the data will be read.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::read(
+ *     s, b,
+ *     boost::asio::transfer_all(), ec); @endcode
+ */
+template <typename SyncReadStream, typename Allocator>
+std::size_t read(SyncReadStream& s, basic_streambuf<Allocator>& b,
+    boost::system::error_code& ec);
+
+/// Attempt to read a certain amount of data from a stream before returning.
+/**
+ * This function is used to read a certain number of bytes of data from a
+ * stream. The call will block until one of the following conditions is true:
+ *
+ * @li The supplied buffer is full (that is, it has reached maximum size).
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param b The basic_streambuf object into which the data will be read.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the read operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest read_some operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the read operation is complete. A non-zero
+ * return value indicates the maximum number of bytes to be read on the next
+ * call to the stream's read_some function.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ */
+template <typename SyncReadStream, typename Allocator,
+    typename CompletionCondition>
+std::size_t read(SyncReadStream& s, basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition);
+
+/// Attempt to read a certain amount of data from a stream before returning.
+/**
+ * This function is used to read a certain number of bytes of data from a
+ * stream. The call will block until one of the following conditions is true:
+ *
+ * @li The supplied buffer is full (that is, it has reached maximum size).
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param b The basic_streambuf object into which the data will be read.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the read operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest read_some operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the read operation is complete. A non-zero
+ * return value indicates the maximum number of bytes to be read on the next
+ * call to the stream's read_some function.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes read. If an error occurs, returns the total
+ * number of bytes successfully transferred prior to the error.
+ */
+template <typename SyncReadStream, typename Allocator,
+    typename CompletionCondition>
+std::size_t read(SyncReadStream& s, basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition, boost::system::error_code& ec);
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/*@}*/
+/**
+ * @defgroup async_read boost::asio::async_read
+ *
+ * @brief Start an asynchronous operation to read a certain amount of data from
+ * a stream.
+ */
+/*@{*/
+
+/// Start an asynchronous operation to read a certain amount of data from a
+/// stream.
+/**
+ * This function is used to asynchronously read a certain number of bytes of
+ * data from a stream. The function call always returns immediately. The
+ * asynchronous operation will continue until one of the following conditions is
+ * true:
+ *
+ * @li The supplied buffers are full. That is, the bytes transferred is equal to
+ * the sum of the buffer sizes.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * async_read_some function, and is known as a <em>composed operation</em>. The
+ * program must ensure that the stream performs no other read operations (such
+ * as async_read, the stream's async_read_some function, or any other composed
+ * operations that perform reads) until this operation completes.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the AsyncReadStream concept.
+ *
+ * @param buffers One or more buffers into which the data will be read. The sum
+ * of the buffer sizes indicates the maximum number of bytes to read from the
+ * stream. Although the buffers object may be copied as necessary, ownership of
+ * the underlying memory blocks is retained by the caller, which must guarantee
+ * that they remain valid until the handler is called.
+ *
+ * @param handler The handler to be called when the read operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   const boost::system::error_code& error, // Result of operation.
+ *
+ *   std::size_t bytes_transferred           // Number of bytes copied into the
+ *                                           // buffers. If an error occurred,
+ *                                           // this will be the  number of
+ *                                           // bytes successfully transferred
+ *                                           // prior to the error.
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @par Example
+ * To read into a single data buffer use the @ref buffer function as follows:
+ * @code
+ * boost::asio::async_read(s, boost::asio::buffer(data, size), handler);
+ * @endcode
+ * See the @ref buffer documentation for information on reading into multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::async_read(
+ *     s, buffers,
+ *     boost::asio::transfer_all(),
+ *     handler); @endcode
+ */
+template <typename AsyncReadStream, typename MutableBufferSequence,
+    typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read(AsyncReadStream& s, const MutableBufferSequence& buffers,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
+
+/// Start an asynchronous operation to read a certain amount of data from a
+/// stream.
+/**
+ * This function is used to asynchronously read a certain number of bytes of
+ * data from a stream. The function call always returns immediately. The
+ * asynchronous operation will continue until one of the following conditions is
+ * true:
+ *
+ * @li The supplied buffers are full. That is, the bytes transferred is equal to
+ * the sum of the buffer sizes.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the AsyncReadStream concept.
+ *
+ * @param buffers One or more buffers into which the data will be read. The sum
+ * of the buffer sizes indicates the maximum number of bytes to read from the
+ * stream. Although the buffers object may be copied as necessary, ownership of
+ * the underlying memory blocks is retained by the caller, which must guarantee
+ * that they remain valid until the handler is called.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the read operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest async_read_some operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the read operation is complete. A non-zero
+ * return value indicates the maximum number of bytes to be read on the next
+ * call to the stream's async_read_some function.
+ *
+ * @param handler The handler to be called when the read operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   const boost::system::error_code& error, // Result of operation.
+ *
+ *   std::size_t bytes_transferred           // Number of bytes copied into the
+ *                                           // buffers. If an error occurred,
+ *                                           // this will be the  number of
+ *                                           // bytes successfully transferred
+ *                                           // prior to the error.
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @par Example
+ * To read into a single data buffer use the @ref buffer function as follows:
+ * @code boost::asio::async_read(s,
+ *     boost::asio::buffer(data, size),
+ *     boost::asio::transfer_at_least(32),
+ *     handler); @endcode
+ * See the @ref buffer documentation for information on reading into multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+template <typename AsyncReadStream, typename MutableBufferSequence,
+    typename CompletionCondition, typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read(AsyncReadStream& s, const MutableBufferSequence& buffers,
+    CompletionCondition completion_condition,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/// Start an asynchronous operation to read a certain amount of data from a
+/// stream.
+/**
+ * This function is used to asynchronously read a certain number of bytes of
+ * data from a stream. The function call always returns immediately. The
+ * asynchronous operation will continue until one of the following conditions is
+ * true:
+ *
+ * @li The supplied buffer is full (that is, it has reached maximum size).
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * async_read_some function, and is known as a <em>composed operation</em>. The
+ * program must ensure that the stream performs no other read operations (such
+ * as async_read, the stream's async_read_some function, or any other composed
+ * operations that perform reads) until this operation completes.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the AsyncReadStream concept.
+ *
+ * @param b A basic_streambuf object into which the data will be read. Ownership
+ * of the streambuf is retained by the caller, which must guarantee that it
+ * remains valid until the handler is called.
+ *
+ * @param handler The handler to be called when the read operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   const boost::system::error_code& error, // Result of operation.
+ *
+ *   std::size_t bytes_transferred           // Number of bytes copied into the
+ *                                           // buffers. If an error occurred,
+ *                                           // this will be the  number of
+ *                                           // bytes successfully transferred
+ *                                           // prior to the error.
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::async_read(
+ *     s, b,
+ *     boost::asio::transfer_all(),
+ *     handler); @endcode
+ */
+template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read(AsyncReadStream& s, basic_streambuf<Allocator>& b,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
+
+/// Start an asynchronous operation to read a certain amount of data from a
+/// stream.
+/**
+ * This function is used to asynchronously read a certain number of bytes of
+ * data from a stream. The function call always returns immediately. The
+ * asynchronous operation will continue until one of the following conditions is
+ * true:
+ *
+ * @li The supplied buffer is full (that is, it has reached maximum size).
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * async_read_some function, and is known as a <em>composed operation</em>. The
+ * program must ensure that the stream performs no other read operations (such
+ * as async_read, the stream's async_read_some function, or any other composed
+ * operations that perform reads) until this operation completes.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the AsyncReadStream concept.
+ *
+ * @param b A basic_streambuf object into which the data will be read. Ownership
+ * of the streambuf is retained by the caller, which must guarantee that it
+ * remains valid until the handler is called.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the read operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest async_read_some operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the read operation is complete. A non-zero
+ * return value indicates the maximum number of bytes to be read on the next
+ * call to the stream's async_read_some function.
+ *
+ * @param handler The handler to be called when the read operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   const boost::system::error_code& error, // Result of operation.
+ *
+ *   std::size_t bytes_transferred           // Number of bytes copied into the
+ *                                           // buffers. If an error occurred,
+ *                                           // this will be the  number of
+ *                                           // bytes successfully transferred
+ *                                           // prior to the error.
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ */
+template <typename AsyncReadStream, typename Allocator,
+    typename CompletionCondition, typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read(AsyncReadStream& s, basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/*@}*/
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/impl/read.hpp>
+
+#endif // BOOST_ASIO_READ_HPP
diff --git a/ext/patches/boost/asio/read_at.hpp b/ext/patches/boost/asio/read_at.hpp
new file mode 100644
index 0000000..a1ae28a
--- /dev/null
+++ b/ext/patches/boost/asio/read_at.hpp
@@ -0,0 +1,666 @@
+//
+// read_at.hpp
+// ~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_READ_AT_HPP
+#define BOOST_ASIO_READ_AT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/basic_streambuf_fwd.hpp>
+#include <boost/asio/detail/cstdint.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/**
+ * @defgroup read_at boost::asio::read_at
+ *
+ * @brief Attempt to read a certain amount of data at the specified offset
+ * before returning.
+ */
+/*@{*/
+
+/// Attempt to read a certain amount of data at the specified offset before
+/// returning.
+/**
+ * This function is used to read a certain number of bytes of data from a
+ * random access device at the specified offset. The call will block until one
+ * of the following conditions is true:
+ *
+ * @li The supplied buffers are full. That is, the bytes transferred is equal to
+ * the sum of the buffer sizes.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * read_some_at function.
+ *
+ * @param d The device from which the data is to be read. The type must support
+ * the SyncRandomAccessReadDevice concept.
+ *
+ * @param offset The offset at which the data will be read.
+ *
+ * @param buffers One or more buffers into which the data will be read. The sum
+ * of the buffer sizes indicates the maximum number of bytes to read from the
+ * device.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @par Example
+ * To read into a single data buffer use the @ref buffer function as follows:
+ * @code boost::asio::read_at(d, 42, boost::asio::buffer(data, size)); @endcode
+ * See the @ref buffer documentation for information on reading into multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::read_at(
+ *     d, 42, buffers,
+ *     boost::asio::transfer_all()); @endcode
+ */
+template <typename SyncRandomAccessReadDevice, typename MutableBufferSequence>
+std::size_t read_at(SyncRandomAccessReadDevice& d,
+    uint64_t offset, const MutableBufferSequence& buffers);
+
+/// Attempt to read a certain amount of data at the specified offset before
+/// returning.
+/**
+ * This function is used to read a certain number of bytes of data from a
+ * random access device at the specified offset. The call will block until one
+ * of the following conditions is true:
+ *
+ * @li The supplied buffers are full. That is, the bytes transferred is equal to
+ * the sum of the buffer sizes.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * read_some_at function.
+ *
+ * @param d The device from which the data is to be read. The type must support
+ * the SyncRandomAccessReadDevice concept.
+ *
+ * @param offset The offset at which the data will be read.
+ *
+ * @param buffers One or more buffers into which the data will be read. The sum
+ * of the buffer sizes indicates the maximum number of bytes to read from the
+ * device.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @par Example
+ * To read into a single data buffer use the @ref buffer function as follows:
+ * @code boost::asio::read_at(d, 42,
+ *     boost::asio::buffer(data, size), ec); @endcode
+ * See the @ref buffer documentation for information on reading into multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::read_at(
+ *     d, 42, buffers,
+ *     boost::asio::transfer_all(), ec); @endcode
+ */
+template <typename SyncRandomAccessReadDevice, typename MutableBufferSequence>
+std::size_t read_at(SyncRandomAccessReadDevice& d,
+    uint64_t offset, const MutableBufferSequence& buffers,
+    boost::system::error_code& ec);
+
+/// Attempt to read a certain amount of data at the specified offset before
+/// returning.
+/**
+ * This function is used to read a certain number of bytes of data from a
+ * random access device at the specified offset. The call will block until one
+ * of the following conditions is true:
+ *
+ * @li The supplied buffers are full. That is, the bytes transferred is equal to
+ * the sum of the buffer sizes.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * read_some_at function.
+ *
+ * @param d The device from which the data is to be read. The type must support
+ * the SyncRandomAccessReadDevice concept.
+ *
+ * @param offset The offset at which the data will be read.
+ *
+ * @param buffers One or more buffers into which the data will be read. The sum
+ * of the buffer sizes indicates the maximum number of bytes to read from the
+ * device.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the read operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest read_some_at operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the read operation is complete. A non-zero
+ * return value indicates the maximum number of bytes to be read on the next
+ * call to the device's read_some_at function.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @par Example
+ * To read into a single data buffer use the @ref buffer function as follows:
+ * @code boost::asio::read_at(d, 42, boost::asio::buffer(data, size),
+ *     boost::asio::transfer_at_least(32)); @endcode
+ * See the @ref buffer documentation for information on reading into multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+template <typename SyncRandomAccessReadDevice, typename MutableBufferSequence,
+    typename CompletionCondition>
+std::size_t read_at(SyncRandomAccessReadDevice& d,
+    uint64_t offset, const MutableBufferSequence& buffers,
+    CompletionCondition completion_condition);
+
+/// Attempt to read a certain amount of data at the specified offset before
+/// returning.
+/**
+ * This function is used to read a certain number of bytes of data from a
+ * random access device at the specified offset. The call will block until one
+ * of the following conditions is true:
+ *
+ * @li The supplied buffers are full. That is, the bytes transferred is equal to
+ * the sum of the buffer sizes.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * read_some_at function.
+ *
+ * @param d The device from which the data is to be read. The type must support
+ * the SyncRandomAccessReadDevice concept.
+ *
+ * @param offset The offset at which the data will be read.
+ *
+ * @param buffers One or more buffers into which the data will be read. The sum
+ * of the buffer sizes indicates the maximum number of bytes to read from the
+ * device.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the read operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest read_some_at operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the read operation is complete. A non-zero
+ * return value indicates the maximum number of bytes to be read on the next
+ * call to the device's read_some_at function.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes read. If an error occurs, returns the total
+ * number of bytes successfully transferred prior to the error.
+ */
+template <typename SyncRandomAccessReadDevice, typename MutableBufferSequence,
+    typename CompletionCondition>
+std::size_t read_at(SyncRandomAccessReadDevice& d,
+    uint64_t offset, const MutableBufferSequence& buffers,
+    CompletionCondition completion_condition, boost::system::error_code& ec);
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/// Attempt to read a certain amount of data at the specified offset before
+/// returning.
+/**
+ * This function is used to read a certain number of bytes of data from a
+ * random access device at the specified offset. The call will block until one
+ * of the following conditions is true:
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * read_some_at function.
+ *
+ * @param d The device from which the data is to be read. The type must support
+ * the SyncRandomAccessReadDevice concept.
+ *
+ * @param offset The offset at which the data will be read.
+ *
+ * @param b The basic_streambuf object into which the data will be read.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::read_at(
+ *     d, 42, b,
+ *     boost::asio::transfer_all()); @endcode
+ */
+template <typename SyncRandomAccessReadDevice, typename Allocator>
+std::size_t read_at(SyncRandomAccessReadDevice& d,
+    uint64_t offset, basic_streambuf<Allocator>& b);
+
+/// Attempt to read a certain amount of data at the specified offset before
+/// returning.
+/**
+ * This function is used to read a certain number of bytes of data from a
+ * random access device at the specified offset. The call will block until one
+ * of the following conditions is true:
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * read_some_at function.
+ *
+ * @param d The device from which the data is to be read. The type must support
+ * the SyncRandomAccessReadDevice concept.
+ *
+ * @param offset The offset at which the data will be read.
+ *
+ * @param b The basic_streambuf object into which the data will be read.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::read_at(
+ *     d, 42, b,
+ *     boost::asio::transfer_all(), ec); @endcode
+ */
+template <typename SyncRandomAccessReadDevice, typename Allocator>
+std::size_t read_at(SyncRandomAccessReadDevice& d,
+    uint64_t offset, basic_streambuf<Allocator>& b,
+    boost::system::error_code& ec);
+
+/// Attempt to read a certain amount of data at the specified offset before
+/// returning.
+/**
+ * This function is used to read a certain number of bytes of data from a
+ * random access device at the specified offset. The call will block until one
+ * of the following conditions is true:
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * read_some_at function.
+ *
+ * @param d The device from which the data is to be read. The type must support
+ * the SyncRandomAccessReadDevice concept.
+ *
+ * @param offset The offset at which the data will be read.
+ *
+ * @param b The basic_streambuf object into which the data will be read.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the read operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest read_some_at operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the read operation is complete. A non-zero
+ * return value indicates the maximum number of bytes to be read on the next
+ * call to the device's read_some_at function.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ */
+template <typename SyncRandomAccessReadDevice, typename Allocator,
+    typename CompletionCondition>
+std::size_t read_at(SyncRandomAccessReadDevice& d,
+    uint64_t offset, basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition);
+
+/// Attempt to read a certain amount of data at the specified offset before
+/// returning.
+/**
+ * This function is used to read a certain number of bytes of data from a
+ * random access device at the specified offset. The call will block until one
+ * of the following conditions is true:
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * read_some_at function.
+ *
+ * @param d The device from which the data is to be read. The type must support
+ * the SyncRandomAccessReadDevice concept.
+ *
+ * @param offset The offset at which the data will be read.
+ *
+ * @param b The basic_streambuf object into which the data will be read.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the read operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest read_some_at operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the read operation is complete. A non-zero
+ * return value indicates the maximum number of bytes to be read on the next
+ * call to the device's read_some_at function.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes read. If an error occurs, returns the total
+ * number of bytes successfully transferred prior to the error.
+ */
+template <typename SyncRandomAccessReadDevice, typename Allocator,
+    typename CompletionCondition>
+std::size_t read_at(SyncRandomAccessReadDevice& d,
+    uint64_t offset, basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition, boost::system::error_code& ec);
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/*@}*/
+/**
+ * @defgroup async_read_at boost::asio::async_read_at
+ *
+ * @brief Start an asynchronous operation to read a certain amount of data at
+ * the specified offset.
+ */
+/*@{*/
+
+/// Start an asynchronous operation to read a certain amount of data at the
+/// specified offset.
+/**
+ * This function is used to asynchronously read a certain number of bytes of
+ * data from a random access device at the specified offset. The function call
+ * always returns immediately. The asynchronous operation will continue until
+ * one of the following conditions is true:
+ *
+ * @li The supplied buffers are full. That is, the bytes transferred is equal to
+ * the sum of the buffer sizes.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * async_read_some_at function.
+ *
+ * @param d The device from which the data is to be read. The type must support
+ * the AsyncRandomAccessReadDevice concept.
+ *
+ * @param offset The offset at which the data will be read.
+ *
+ * @param buffers One or more buffers into which the data will be read. The sum
+ * of the buffer sizes indicates the maximum number of bytes to read from the
+ * device. Although the buffers object may be copied as necessary, ownership of
+ * the underlying memory blocks is retained by the caller, which must guarantee
+ * that they remain valid until the handler is called.
+ *
+ * @param handler The handler to be called when the read operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   // Result of operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes copied into the buffers. If an error
+ *   // occurred, this will be the number of bytes successfully
+ *   // transferred prior to the error.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @par Example
+ * To read into a single data buffer use the @ref buffer function as follows:
+ * @code
+ * boost::asio::async_read_at(d, 42, boost::asio::buffer(data, size), handler);
+ * @endcode
+ * See the @ref buffer documentation for information on reading into multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::async_read_at(
+ *     d, 42, buffers,
+ *     boost::asio::transfer_all(),
+ *     handler); @endcode
+ */
+template <typename AsyncRandomAccessReadDevice, typename MutableBufferSequence,
+    typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read_at(AsyncRandomAccessReadDevice& d, uint64_t offset,
+    const MutableBufferSequence& buffers,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
+
+/// Start an asynchronous operation to read a certain amount of data at the
+/// specified offset.
+/**
+ * This function is used to asynchronously read a certain number of bytes of
+ * data from a random access device at the specified offset. The function call
+ * always returns immediately. The asynchronous operation will continue until
+ * one of the following conditions is true:
+ *
+ * @li The supplied buffers are full. That is, the bytes transferred is equal to
+ * the sum of the buffer sizes.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * @param d The device from which the data is to be read. The type must support
+ * the AsyncRandomAccessReadDevice concept.
+ *
+ * @param offset The offset at which the data will be read.
+ *
+ * @param buffers One or more buffers into which the data will be read. The sum
+ * of the buffer sizes indicates the maximum number of bytes to read from the
+ * device. Although the buffers object may be copied as necessary, ownership of
+ * the underlying memory blocks is retained by the caller, which must guarantee
+ * that they remain valid until the handler is called.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the read operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest async_read_some_at operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the read operation is complete. A non-zero
+ * return value indicates the maximum number of bytes to be read on the next
+ * call to the device's async_read_some_at function.
+ *
+ * @param handler The handler to be called when the read operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   // Result of operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes copied into the buffers. If an error
+ *   // occurred, this will be the number of bytes successfully
+ *   // transferred prior to the error.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @par Example
+ * To read into a single data buffer use the @ref buffer function as follows:
+ * @code boost::asio::async_read_at(d, 42,
+ *     boost::asio::buffer(data, size),
+ *     boost::asio::transfer_at_least(32),
+ *     handler); @endcode
+ * See the @ref buffer documentation for information on reading into multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+template <typename AsyncRandomAccessReadDevice, typename MutableBufferSequence,
+    typename CompletionCondition, typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read_at(AsyncRandomAccessReadDevice& d,
+    uint64_t offset, const MutableBufferSequence& buffers,
+    CompletionCondition completion_condition,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/// Start an asynchronous operation to read a certain amount of data at the
+/// specified offset.
+/**
+ * This function is used to asynchronously read a certain number of bytes of
+ * data from a random access device at the specified offset. The function call
+ * always returns immediately. The asynchronous operation will continue until
+ * one of the following conditions is true:
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * async_read_some_at function.
+ *
+ * @param d The device from which the data is to be read. The type must support
+ * the AsyncRandomAccessReadDevice concept.
+ *
+ * @param offset The offset at which the data will be read.
+ *
+ * @param b A basic_streambuf object into which the data will be read. Ownership
+ * of the streambuf is retained by the caller, which must guarantee that it
+ * remains valid until the handler is called.
+ *
+ * @param handler The handler to be called when the read operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   // Result of operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes copied into the buffers. If an error
+ *   // occurred, this will be the number of bytes successfully
+ *   // transferred prior to the error.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::async_read_at(
+ *     d, 42, b,
+ *     boost::asio::transfer_all(),
+ *     handler); @endcode
+ */
+template <typename AsyncRandomAccessReadDevice, typename Allocator,
+    typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read_at(AsyncRandomAccessReadDevice& d, uint64_t offset,
+    basic_streambuf<Allocator>& b, BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
+
+/// Start an asynchronous operation to read a certain amount of data at the
+/// specified offset.
+/**
+ * This function is used to asynchronously read a certain number of bytes of
+ * data from a random access device at the specified offset. The function call
+ * always returns immediately. The asynchronous operation will continue until
+ * one of the following conditions is true:
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * async_read_some_at function.
+ *
+ * @param d The device from which the data is to be read. The type must support
+ * the AsyncRandomAccessReadDevice concept.
+ *
+ * @param offset The offset at which the data will be read.
+ *
+ * @param b A basic_streambuf object into which the data will be read. Ownership
+ * of the streambuf is retained by the caller, which must guarantee that it
+ * remains valid until the handler is called.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the read operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest async_read_some_at operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the read operation is complete. A non-zero
+ * return value indicates the maximum number of bytes to be read on the next
+ * call to the device's async_read_some_at function.
+ *
+ * @param handler The handler to be called when the read operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   // Result of operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes copied into the buffers. If an error
+ *   // occurred, this will be the number of bytes successfully
+ *   // transferred prior to the error.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ */
+template <typename AsyncRandomAccessReadDevice, typename Allocator,
+    typename CompletionCondition, typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read_at(AsyncRandomAccessReadDevice& d,
+    uint64_t offset, basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/*@}*/
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/impl/read_at.hpp>
+
+#endif // BOOST_ASIO_READ_AT_HPP
diff --git a/ext/patches/boost/asio/read_until.hpp b/ext/patches/boost/asio/read_until.hpp
new file mode 100644
index 0000000..8978910
--- /dev/null
+++ b/ext/patches/boost/asio/read_until.hpp
@@ -0,0 +1,925 @@
+//
+// read_until.hpp
+// ~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_READ_UNTIL_HPP
+#define BOOST_ASIO_READ_UNTIL_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#include <cstddef>
+#include <string>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/basic_streambuf.hpp>
+#include <boost/asio/detail/regex_fwd.hpp>
+#include <boost/asio/detail/type_traits.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+namespace detail
+{
+  char (&has_result_type_helper(...))[2];
+
+  template <typename T>
+  char has_result_type_helper(T*, typename T::result_type* = 0);
+
+  template <typename T>
+  struct has_result_type
+  {
+    enum { value = (sizeof((has_result_type_helper)((T*)(0))) == 1) };
+  };
+} // namespace detail
+
+/// Type trait used to determine whether a type can be used as a match condition
+/// function with read_until and async_read_until.
+template <typename T>
+struct is_match_condition
+{
+#if defined(GENERATING_DOCUMENTATION)
+  /// The value member is true if the type may be used as a match condition.
+  static const bool value;
+#else
+  enum
+  {
+    value = boost::asio::is_function<
+        typename boost::asio::remove_pointer<T>::type>::value
+      || detail::has_result_type<T>::value
+  };
+#endif
+};
+
+/**
+ * @defgroup read_until boost::asio::read_until
+ *
+ * @brief Read data into a streambuf until it contains a delimiter, matches a
+ * regular expression, or a function object indicates a match.
+ */
+/*@{*/
+
+/// Read data into a streambuf until it contains a specified delimiter.
+/**
+ * This function is used to read data into the specified streambuf until the
+ * streambuf's get area contains the specified delimiter. The call will block
+ * until one of the following conditions is true:
+ *
+ * @li The get area of the streambuf contains the specified delimiter.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function. If the streambuf's get area already contains the
+ * delimiter, the function returns immediately.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param b A streambuf object into which the data will be read.
+ *
+ * @param delim The delimiter character.
+ *
+ * @returns The number of bytes in the streambuf's get area up to and including
+ * the delimiter.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @note After a successful read_until operation, the streambuf may contain
+ * additional data beyond the delimiter. An application will typically leave
+ * that data in the streambuf for a subsequent read_until operation to examine.
+ *
+ * @par Example
+ * To read data into a streambuf until a newline is encountered:
+ * @code boost::asio::streambuf b;
+ * boost::asio::read_until(s, b, '\n');
+ * std::istream is(&b);
+ * std::string line;
+ * std::getline(is, line); @endcode
+ * After the @c read_until operation completes successfully, the buffer @c b
+ * contains the delimiter:
+ * @code { 'a', 'b', ..., 'c', '\n', 'd', 'e', ... } @endcode
+ * The call to @c std::getline then extracts the data up to and including the
+ * delimiter, so that the string @c line contains:
+ * @code { 'a', 'b', ..., 'c', '\n' } @endcode
+ * The remaining data is left in the buffer @c b as follows:
+ * @code { 'd', 'e', ... } @endcode
+ * This data may be the start of a new line, to be extracted by a subsequent
+ * @c read_until operation.
+ */
+template <typename SyncReadStream, typename Allocator>
+std::size_t read_until(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, char delim);
+
+/// Read data into a streambuf until it contains a specified delimiter.
+/**
+ * This function is used to read data into the specified streambuf until the
+ * streambuf's get area contains the specified delimiter. The call will block
+ * until one of the following conditions is true:
+ *
+ * @li The get area of the streambuf contains the specified delimiter.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function. If the streambuf's get area already contains the
+ * delimiter, the function returns immediately.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param b A streambuf object into which the data will be read.
+ *
+ * @param delim The delimiter character.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes in the streambuf's get area up to and including
+ * the delimiter. Returns 0 if an error occurred.
+ *
+ * @note After a successful read_until operation, the streambuf may contain
+ * additional data beyond the delimiter. An application will typically leave
+ * that data in the streambuf for a subsequent read_until operation to examine.
+ */
+template <typename SyncReadStream, typename Allocator>
+std::size_t read_until(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, char delim,
+    boost::system::error_code& ec);
+
+/// Read data into a streambuf until it contains a specified delimiter.
+/**
+ * This function is used to read data into the specified streambuf until the
+ * streambuf's get area contains the specified delimiter. The call will block
+ * until one of the following conditions is true:
+ *
+ * @li The get area of the streambuf contains the specified delimiter.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function. If the streambuf's get area already contains the
+ * delimiter, the function returns immediately.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param b A streambuf object into which the data will be read.
+ *
+ * @param delim The delimiter string.
+ *
+ * @returns The number of bytes in the streambuf's get area up to and including
+ * the delimiter.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @note After a successful read_until operation, the streambuf may contain
+ * additional data beyond the delimiter. An application will typically leave
+ * that data in the streambuf for a subsequent read_until operation to examine.
+ *
+ * @par Example
+ * To read data into a streambuf until a newline is encountered:
+ * @code boost::asio::streambuf b;
+ * boost::asio::read_until(s, b, "\r\n");
+ * std::istream is(&b);
+ * std::string line;
+ * std::getline(is, line); @endcode
+ * After the @c read_until operation completes successfully, the buffer @c b
+ * contains the delimiter:
+ * @code { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } @endcode
+ * The call to @c std::getline then extracts the data up to and including the
+ * delimiter, so that the string @c line contains:
+ * @code { 'a', 'b', ..., 'c', '\r', '\n' } @endcode
+ * The remaining data is left in the buffer @c b as follows:
+ * @code { 'd', 'e', ... } @endcode
+ * This data may be the start of a new line, to be extracted by a subsequent
+ * @c read_until operation.
+ */
+template <typename SyncReadStream, typename Allocator>
+std::size_t read_until(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, const std::string& delim);
+
+/// Read data into a streambuf until it contains a specified delimiter.
+/**
+ * This function is used to read data into the specified streambuf until the
+ * streambuf's get area contains the specified delimiter. The call will block
+ * until one of the following conditions is true:
+ *
+ * @li The get area of the streambuf contains the specified delimiter.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function. If the streambuf's get area already contains the
+ * delimiter, the function returns immediately.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param b A streambuf object into which the data will be read.
+ *
+ * @param delim The delimiter string.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes in the streambuf's get area up to and including
+ * the delimiter. Returns 0 if an error occurred.
+ *
+ * @note After a successful read_until operation, the streambuf may contain
+ * additional data beyond the delimiter. An application will typically leave
+ * that data in the streambuf for a subsequent read_until operation to examine.
+ */
+template <typename SyncReadStream, typename Allocator>
+std::size_t read_until(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, const std::string& delim,
+    boost::system::error_code& ec);
+
+#if defined(BOOST_ASIO_HAS_BOOST_REGEX) \
+  || defined(GENERATING_DOCUMENTATION)
+
+/// Read data into a streambuf until some part of the data it contains matches
+/// a regular expression.
+/**
+ * This function is used to read data into the specified streambuf until the
+ * streambuf's get area contains some data that matches a regular expression.
+ * The call will block until one of the following conditions is true:
+ *
+ * @li A substring of the streambuf's get area matches the regular expression.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function. If the streambuf's get area already contains data that
+ * matches the regular expression, the function returns immediately.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param b A streambuf object into which the data will be read.
+ *
+ * @param expr The regular expression.
+ *
+ * @returns The number of bytes in the streambuf's get area up to and including
+ * the substring that matches the regular expression.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @note After a successful read_until operation, the streambuf may contain
+ * additional data beyond that which matched the regular expression. An
+ * application will typically leave that data in the streambuf for a subsequent
+ * read_until operation to examine.
+ *
+ * @par Example
+ * To read data into a streambuf until a CR-LF sequence is encountered:
+ * @code boost::asio::streambuf b;
+ * boost::asio::read_until(s, b, boost::regex("\r\n"));
+ * std::istream is(&b);
+ * std::string line;
+ * std::getline(is, line); @endcode
+ * After the @c read_until operation completes successfully, the buffer @c b
+ * contains the data which matched the regular expression:
+ * @code { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } @endcode
+ * The call to @c std::getline then extracts the data up to and including the
+ * match, so that the string @c line contains:
+ * @code { 'a', 'b', ..., 'c', '\r', '\n' } @endcode
+ * The remaining data is left in the buffer @c b as follows:
+ * @code { 'd', 'e', ... } @endcode
+ * This data may be the start of a new line, to be extracted by a subsequent
+ * @c read_until operation.
+ */
+template <typename SyncReadStream, typename Allocator>
+std::size_t read_until(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr);
+
+/// Read data into a streambuf until some part of the data it contains matches
+/// a regular expression.
+/**
+ * This function is used to read data into the specified streambuf until the
+ * streambuf's get area contains some data that matches a regular expression.
+ * The call will block until one of the following conditions is true:
+ *
+ * @li A substring of the streambuf's get area matches the regular expression.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function. If the streambuf's get area already contains data that
+ * matches the regular expression, the function returns immediately.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param b A streambuf object into which the data will be read.
+ *
+ * @param expr The regular expression.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes in the streambuf's get area up to and including
+ * the substring that matches the regular expression. Returns 0 if an error
+ * occurred.
+ *
+ * @note After a successful read_until operation, the streambuf may contain
+ * additional data beyond that which matched the regular expression. An
+ * application will typically leave that data in the streambuf for a subsequent
+ * read_until operation to examine.
+ */
+template <typename SyncReadStream, typename Allocator>
+std::size_t read_until(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr,
+    boost::system::error_code& ec);
+
+#endif // defined(BOOST_ASIO_HAS_BOOST_REGEX)
+       // || defined(GENERATING_DOCUMENTATION)
+
+/// Read data into a streambuf until a function object indicates a match.
+/**
+ * This function is used to read data into the specified streambuf until a
+ * user-defined match condition function object, when applied to the data
+ * contained in the streambuf, indicates a successful match. The call will
+ * block until one of the following conditions is true:
+ *
+ * @li The match condition function object returns a std::pair where the second
+ * element evaluates to true.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function. If the match condition function object already indicates
+ * a match, the function returns immediately.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param b A streambuf object into which the data will be read.
+ *
+ * @param match_condition The function object to be called to determine whether
+ * a match exists. The signature of the function object must be:
+ * @code pair<iterator, bool> match_condition(iterator begin, iterator end);
+ * @endcode
+ * where @c iterator represents the type:
+ * @code buffers_iterator<basic_streambuf<Allocator>::const_buffers_type>
+ * @endcode
+ * The iterator parameters @c begin and @c end define the range of bytes to be
+ * scanned to determine whether there is a match. The @c first member of the
+ * return value is an iterator marking one-past-the-end of the bytes that have
+ * been consumed by the match function. This iterator is used to calculate the
+ * @c begin parameter for any subsequent invocation of the match condition. The
+ * @c second member of the return value is true if a match has been found, false
+ * otherwise.
+ *
+ * @returns The number of bytes in the streambuf's get area that have been fully
+ * consumed by the match function.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @note After a successful read_until operation, the streambuf may contain
+ * additional data beyond that which matched the function object. An application
+ * will typically leave that data in the streambuf for a subsequent
+ *
+ * @note The default implementation of the @c is_match_condition type trait
+ * evaluates to true for function pointers and function objects with a
+ * @c result_type typedef. It must be specialised for other user-defined
+ * function objects.
+ *
+ * @par Examples
+ * To read data into a streambuf until whitespace is encountered:
+ * @code typedef boost::asio::buffers_iterator<
+ *     boost::asio::streambuf::const_buffers_type> iterator;
+ *
+ * std::pair<iterator, bool>
+ * match_whitespace(iterator begin, iterator end)
+ * {
+ *   iterator i = begin;
+ *   while (i != end)
+ *     if (std::isspace(*i++))
+ *       return std::make_pair(i, true);
+ *   return std::make_pair(i, false);
+ * }
+ * ...
+ * boost::asio::streambuf b;
+ * boost::asio::read_until(s, b, match_whitespace);
+ * @endcode
+ *
+ * To read data into a streambuf until a matching character is found:
+ * @code class match_char
+ * {
+ * public:
+ *   explicit match_char(char c) : c_(c) {}
+ *
+ *   template <typename Iterator>
+ *   std::pair<Iterator, bool> operator()(
+ *       Iterator begin, Iterator end) const
+ *   {
+ *     Iterator i = begin;
+ *     while (i != end)
+ *       if (c_ == *i++)
+ *         return std::make_pair(i, true);
+ *     return std::make_pair(i, false);
+ *   }
+ *
+ * private:
+ *   char c_;
+ * };
+ *
+ * namespace asio {
+ *   template <> struct is_match_condition<match_char>
+ *     : public boost::true_type {};
+ * } // namespace asio
+ * ...
+ * boost::asio::streambuf b;
+ * boost::asio::read_until(s, b, match_char('a'));
+ * @endcode
+ */
+template <typename SyncReadStream, typename Allocator, typename MatchCondition>
+std::size_t read_until(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, MatchCondition match_condition,
+    typename enable_if<is_match_condition<MatchCondition>::value>::type* = 0);
+
+/// Read data into a streambuf until a function object indicates a match.
+/**
+ * This function is used to read data into the specified streambuf until a
+ * user-defined match condition function object, when applied to the data
+ * contained in the streambuf, indicates a successful match. The call will
+ * block until one of the following conditions is true:
+ *
+ * @li The match condition function object returns a std::pair where the second
+ * element evaluates to true.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function. If the match condition function object already indicates
+ * a match, the function returns immediately.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param b A streambuf object into which the data will be read.
+ *
+ * @param match_condition The function object to be called to determine whether
+ * a match exists. The signature of the function object must be:
+ * @code pair<iterator, bool> match_condition(iterator begin, iterator end);
+ * @endcode
+ * where @c iterator represents the type:
+ * @code buffers_iterator<basic_streambuf<Allocator>::const_buffers_type>
+ * @endcode
+ * The iterator parameters @c begin and @c end define the range of bytes to be
+ * scanned to determine whether there is a match. The @c first member of the
+ * return value is an iterator marking one-past-the-end of the bytes that have
+ * been consumed by the match function. This iterator is used to calculate the
+ * @c begin parameter for any subsequent invocation of the match condition. The
+ * @c second member of the return value is true if a match has been found, false
+ * otherwise.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes in the streambuf's get area that have been fully
+ * consumed by the match function. Returns 0 if an error occurred.
+ *
+ * @note After a successful read_until operation, the streambuf may contain
+ * additional data beyond that which matched the function object. An application
+ * will typically leave that data in the streambuf for a subsequent
+ *
+ * @note The default implementation of the @c is_match_condition type trait
+ * evaluates to true for function pointers and function objects with a
+ * @c result_type typedef. It must be specialised for other user-defined
+ * function objects.
+ */
+template <typename SyncReadStream, typename Allocator, typename MatchCondition>
+std::size_t read_until(SyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b,
+    MatchCondition match_condition, boost::system::error_code& ec,
+    typename enable_if<is_match_condition<MatchCondition>::value>::type* = 0);
+
+/*@}*/
+/**
+ * @defgroup async_read_until boost::asio::async_read_until
+ *
+ * @brief Start an asynchronous operation to read data into a streambuf until it
+ * contains a delimiter, matches a regular expression, or a function object
+ * indicates a match.
+ */
+/*@{*/
+
+/// Start an asynchronous operation to read data into a streambuf until it
+/// contains a specified delimiter.
+/**
+ * This function is used to asynchronously read data into the specified
+ * streambuf until the streambuf's get area contains the specified delimiter.
+ * The function call always returns immediately. The asynchronous operation
+ * will continue until one of the following conditions is true:
+ *
+ * @li The get area of the streambuf contains the specified delimiter.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * async_read_some function, and is known as a <em>composed operation</em>. If
+ * the streambuf's get area already contains the delimiter, this asynchronous
+ * operation completes immediately. The program must ensure that the stream
+ * performs no other read operations (such as async_read, async_read_until, the
+ * stream's async_read_some function, or any other composed operations that
+ * perform reads) until this operation completes.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the AsyncReadStream concept.
+ *
+ * @param b A streambuf object into which the data will be read. Ownership of
+ * the streambuf is retained by the caller, which must guarantee that it remains
+ * valid until the handler is called.
+ *
+ * @param delim The delimiter character.
+ *
+ * @param handler The handler to be called when the read operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   // Result of operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // The number of bytes in the streambuf's get
+ *   // area up to and including the delimiter.
+ *   // 0 if an error occurred.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @note After a successful async_read_until operation, the streambuf may
+ * contain additional data beyond the delimiter. An application will typically
+ * leave that data in the streambuf for a subsequent async_read_until operation
+ * to examine.
+ *
+ * @par Example
+ * To asynchronously read data into a streambuf until a newline is encountered:
+ * @code boost::asio::streambuf b;
+ * ...
+ * void handler(const boost::system::error_code& e, std::size_t size)
+ * {
+ *   if (!e)
+ *   {
+ *     std::istream is(&b);
+ *     std::string line;
+ *     std::getline(is, line);
+ *     ...
+ *   }
+ * }
+ * ...
+ * boost::asio::async_read_until(s, b, '\n', handler); @endcode
+ * After the @c async_read_until operation completes successfully, the buffer
+ * @c b contains the delimiter:
+ * @code { 'a', 'b', ..., 'c', '\n', 'd', 'e', ... } @endcode
+ * The call to @c std::getline then extracts the data up to and including the
+ * delimiter, so that the string @c line contains:
+ * @code { 'a', 'b', ..., 'c', '\n' } @endcode
+ * The remaining data is left in the buffer @c b as follows:
+ * @code { 'd', 'e', ... } @endcode
+ * This data may be the start of a new line, to be extracted by a subsequent
+ * @c async_read_until operation.
+ */
+template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read_until(AsyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b,
+    char delim, BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
+
+/// Start an asynchronous operation to read data into a streambuf until it
+/// contains a specified delimiter.
+/**
+ * This function is used to asynchronously read data into the specified
+ * streambuf until the streambuf's get area contains the specified delimiter.
+ * The function call always returns immediately. The asynchronous operation
+ * will continue until one of the following conditions is true:
+ *
+ * @li The get area of the streambuf contains the specified delimiter.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * async_read_some function, and is known as a <em>composed operation</em>. If
+ * the streambuf's get area already contains the delimiter, this asynchronous
+ * operation completes immediately. The program must ensure that the stream
+ * performs no other read operations (such as async_read, async_read_until, the
+ * stream's async_read_some function, or any other composed operations that
+ * perform reads) until this operation completes.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the AsyncReadStream concept.
+ *
+ * @param b A streambuf object into which the data will be read. Ownership of
+ * the streambuf is retained by the caller, which must guarantee that it remains
+ * valid until the handler is called.
+ *
+ * @param delim The delimiter string.
+ *
+ * @param handler The handler to be called when the read operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   // Result of operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // The number of bytes in the streambuf's get
+ *   // area up to and including the delimiter.
+ *   // 0 if an error occurred.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @note After a successful async_read_until operation, the streambuf may
+ * contain additional data beyond the delimiter. An application will typically
+ * leave that data in the streambuf for a subsequent async_read_until operation
+ * to examine.
+ *
+ * @par Example
+ * To asynchronously read data into a streambuf until a newline is encountered:
+ * @code boost::asio::streambuf b;
+ * ...
+ * void handler(const boost::system::error_code& e, std::size_t size)
+ * {
+ *   if (!e)
+ *   {
+ *     std::istream is(&b);
+ *     std::string line;
+ *     std::getline(is, line);
+ *     ...
+ *   }
+ * }
+ * ...
+ * boost::asio::async_read_until(s, b, "\r\n", handler); @endcode
+ * After the @c async_read_until operation completes successfully, the buffer
+ * @c b contains the delimiter:
+ * @code { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } @endcode
+ * The call to @c std::getline then extracts the data up to and including the
+ * delimiter, so that the string @c line contains:
+ * @code { 'a', 'b', ..., 'c', '\r', '\n' } @endcode
+ * The remaining data is left in the buffer @c b as follows:
+ * @code { 'd', 'e', ... } @endcode
+ * This data may be the start of a new line, to be extracted by a subsequent
+ * @c async_read_until operation.
+ */
+template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read_until(AsyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, const std::string& delim,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
+
+#if defined(BOOST_ASIO_HAS_BOOST_REGEX) \
+  || defined(GENERATING_DOCUMENTATION)
+
+/// Start an asynchronous operation to read data into a streambuf until some
+/// part of its data matches a regular expression.
+/**
+ * This function is used to asynchronously read data into the specified
+ * streambuf until the streambuf's get area contains some data that matches a
+ * regular expression. The function call always returns immediately. The
+ * asynchronous operation will continue until one of the following conditions
+ * is true:
+ *
+ * @li A substring of the streambuf's get area matches the regular expression.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * async_read_some function, and is known as a <em>composed operation</em>. If
+ * the streambuf's get area already contains data that matches the regular
+ * expression, this asynchronous operation completes immediately. The program
+ * must ensure that the stream performs no other read operations (such as
+ * async_read, async_read_until, the stream's async_read_some function, or any
+ * other composed operations that perform reads) until this operation
+ * completes.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the AsyncReadStream concept.
+ *
+ * @param b A streambuf object into which the data will be read. Ownership of
+ * the streambuf is retained by the caller, which must guarantee that it remains
+ * valid until the handler is called.
+ *
+ * @param expr The regular expression.
+ *
+ * @param handler The handler to be called when the read operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   // Result of operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // The number of bytes in the streambuf's get
+ *   // area up to and including the substring
+ *   // that matches the regular. expression.
+ *   // 0 if an error occurred.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @note After a successful async_read_until operation, the streambuf may
+ * contain additional data beyond that which matched the regular expression. An
+ * application will typically leave that data in the streambuf for a subsequent
+ * async_read_until operation to examine.
+ *
+ * @par Example
+ * To asynchronously read data into a streambuf until a CR-LF sequence is
+ * encountered:
+ * @code boost::asio::streambuf b;
+ * ...
+ * void handler(const boost::system::error_code& e, std::size_t size)
+ * {
+ *   if (!e)
+ *   {
+ *     std::istream is(&b);
+ *     std::string line;
+ *     std::getline(is, line);
+ *     ...
+ *   }
+ * }
+ * ...
+ * boost::asio::async_read_until(s, b, boost::regex("\r\n"), handler); @endcode
+ * After the @c async_read_until operation completes successfully, the buffer
+ * @c b contains the data which matched the regular expression:
+ * @code { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } @endcode
+ * The call to @c std::getline then extracts the data up to and including the
+ * match, so that the string @c line contains:
+ * @code { 'a', 'b', ..., 'c', '\r', '\n' } @endcode
+ * The remaining data is left in the buffer @c b as follows:
+ * @code { 'd', 'e', ... } @endcode
+ * This data may be the start of a new line, to be extracted by a subsequent
+ * @c async_read_until operation.
+ */
+template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read_until(AsyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr,
+    BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
+
+#endif // defined(BOOST_ASIO_HAS_BOOST_REGEX)
+       // || defined(GENERATING_DOCUMENTATION)
+
+/// Start an asynchronous operation to read data into a streambuf until a
+/// function object indicates a match.
+/**
+ * This function is used to asynchronously read data into the specified
+ * streambuf until a user-defined match condition function object, when applied
+ * to the data contained in the streambuf, indicates a successful match. The
+ * function call always returns immediately. The asynchronous operation will
+ * continue until one of the following conditions is true:
+ *
+ * @li The match condition function object returns a std::pair where the second
+ * element evaluates to true.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * async_read_some function, and is known as a <em>composed operation</em>. If
+ * the match condition function object already indicates a match, this
+ * asynchronous operation completes immediately. The program must ensure that
+ * the stream performs no other read operations (such as async_read,
+ * async_read_until, the stream's async_read_some function, or any other
+ * composed operations that perform reads) until this operation completes.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the AsyncReadStream concept.
+ *
+ * @param b A streambuf object into which the data will be read.
+ *
+ * @param match_condition The function object to be called to determine whether
+ * a match exists. The signature of the function object must be:
+ * @code pair<iterator, bool> match_condition(iterator begin, iterator end);
+ * @endcode
+ * where @c iterator represents the type:
+ * @code buffers_iterator<basic_streambuf<Allocator>::const_buffers_type>
+ * @endcode
+ * The iterator parameters @c begin and @c end define the range of bytes to be
+ * scanned to determine whether there is a match. The @c first member of the
+ * return value is an iterator marking one-past-the-end of the bytes that have
+ * been consumed by the match function. This iterator is used to calculate the
+ * @c begin parameter for any subsequent invocation of the match condition. The
+ * @c second member of the return value is true if a match has been found, false
+ * otherwise.
+ *
+ * @param handler The handler to be called when the read operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   // Result of operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // The number of bytes in the streambuf's get
+ *   // area that have been fully consumed by the
+ *   // match function. O if an error occurred.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @note After a successful async_read_until operation, the streambuf may
+ * contain additional data beyond that which matched the function object. An
+ * application will typically leave that data in the streambuf for a subsequent
+ * async_read_until operation to examine.
+ *
+ * @note The default implementation of the @c is_match_condition type trait
+ * evaluates to true for function pointers and function objects with a
+ * @c result_type typedef. It must be specialised for other user-defined
+ * function objects.
+ *
+ * @par Examples
+ * To asynchronously read data into a streambuf until whitespace is encountered:
+ * @code typedef boost::asio::buffers_iterator<
+ *     boost::asio::streambuf::const_buffers_type> iterator;
+ *
+ * std::pair<iterator, bool>
+ * match_whitespace(iterator begin, iterator end)
+ * {
+ *   iterator i = begin;
+ *   while (i != end)
+ *     if (std::isspace(*i++))
+ *       return std::make_pair(i, true);
+ *   return std::make_pair(i, false);
+ * }
+ * ...
+ * void handler(const boost::system::error_code& e, std::size_t size);
+ * ...
+ * boost::asio::streambuf b;
+ * boost::asio::async_read_until(s, b, match_whitespace, handler);
+ * @endcode
+ *
+ * To asynchronously read data into a streambuf until a matching character is
+ * found:
+ * @code class match_char
+ * {
+ * public:
+ *   explicit match_char(char c) : c_(c) {}
+ *
+ *   template <typename Iterator>
+ *   std::pair<Iterator, bool> operator()(
+ *       Iterator begin, Iterator end) const
+ *   {
+ *     Iterator i = begin;
+ *     while (i != end)
+ *       if (c_ == *i++)
+ *         return std::make_pair(i, true);
+ *     return std::make_pair(i, false);
+ *   }
+ *
+ * private:
+ *   char c_;
+ * };
+ *
+ * namespace asio {
+ *   template <> struct is_match_condition<match_char>
+ *     : public boost::true_type {};
+ * } // namespace asio
+ * ...
+ * void handler(const boost::system::error_code& e, std::size_t size);
+ * ...
+ * boost::asio::streambuf b;
+ * boost::asio::async_read_until(s, b, match_char('a'), handler);
+ * @endcode
+ */
+template <typename AsyncReadStream, typename Allocator,
+    typename MatchCondition, typename ReadHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+    void (boost::system::error_code, std::size_t))
+async_read_until(AsyncReadStream& s,
+    boost::asio::basic_streambuf<Allocator>& b,
+    MatchCondition match_condition, BOOST_ASIO_MOVE_ARG(ReadHandler) handler,
+    typename enable_if<is_match_condition<MatchCondition>::value>::type* = 0);
+
+/*@}*/
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/impl/read_until.hpp>
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#endif // BOOST_ASIO_READ_UNTIL_HPP
diff --git a/ext/patches/boost/asio/seq_packet_socket_service.hpp b/ext/patches/boost/asio/seq_packet_socket_service.hpp
new file mode 100644
index 0000000..b47ab53
--- /dev/null
+++ b/ext/patches/boost/asio/seq_packet_socket_service.hpp
@@ -0,0 +1,382 @@
+//
+// seq_packet_socket_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SEQ_PACKET_SOCKET_SERVICE_HPP
+#define BOOST_ASIO_SEQ_PACKET_SOCKET_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/detail/type_traits.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/null_socket_service.hpp>
+#elif defined(BOOST_ASIO_HAS_IOCP)
+# include <boost/asio/detail/win_iocp_socket_service.hpp>
+#else
+# include <boost/asio/detail/reactive_socket_service.hpp>
+#endif
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Default service implementation for a sequenced packet socket.
+template <typename Protocol>
+class seq_packet_socket_service
+#if defined(GENERATING_DOCUMENTATION)
+  : public boost::asio::io_service::service
+#else
+  : public boost::asio::detail::service_base<
+      seq_packet_socket_service<Protocol> >
+#endif
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The unique service identifier.
+  static boost::asio::io_service::id id;
+#endif
+
+  /// The protocol type.
+  typedef Protocol protocol_type;
+
+  /// The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+private:
+  // The type of the platform-specific implementation.
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  typedef detail::null_socket_service<Protocol> service_impl_type;
+#elif defined(BOOST_ASIO_HAS_IOCP)
+  typedef detail::win_iocp_socket_service<Protocol> service_impl_type;
+#else
+  typedef detail::reactive_socket_service<Protocol> service_impl_type;
+#endif
+
+public:
+  /// The type of a sequenced packet socket implementation.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined implementation_type;
+#else
+  typedef typename service_impl_type::implementation_type implementation_type;
+#endif
+
+  /// (Deprecated: Use native_handle_type.) The native socket type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_type;
+#else
+  typedef typename service_impl_type::native_handle_type native_type;
+#endif
+
+  /// The native socket type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_handle_type;
+#else
+  typedef typename service_impl_type::native_handle_type native_handle_type;
+#endif
+
+  /// Construct a new sequenced packet socket service for the specified
+  /// io_service.
+  explicit seq_packet_socket_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<
+        seq_packet_socket_service<Protocol> >(io_service),
+      service_impl_(io_service)
+  {
+  }
+
+  /// Construct a new sequenced packet socket implementation.
+  void construct(implementation_type& impl)
+  {
+    service_impl_.construct(impl);
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a new sequenced packet socket implementation.
+  void move_construct(implementation_type& impl,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_construct(impl, other_impl);
+  }
+
+  /// Move-assign from another sequenced packet socket implementation.
+  void move_assign(implementation_type& impl,
+      seq_packet_socket_service& other_service,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_assign(impl, other_service.service_impl_, other_impl);
+  }
+
+  /// Move-construct a new sequenced packet socket implementation from another
+  /// protocol type.
+  template <typename Protocol1>
+  void converting_move_construct(implementation_type& impl,
+      typename seq_packet_socket_service<
+        Protocol1>::implementation_type& other_impl,
+      typename enable_if<is_convertible<
+        Protocol1, Protocol>::value>::type* = 0)
+  {
+    service_impl_.template converting_move_construct<Protocol1>(
+        impl, other_impl);
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Destroy a sequenced packet socket implementation.
+  void destroy(implementation_type& impl)
+  {
+    service_impl_.destroy(impl);
+  }
+
+  /// Open a sequenced packet socket.
+  boost::system::error_code open(implementation_type& impl,
+      const protocol_type& protocol, boost::system::error_code& ec)
+  {
+    if (protocol.type() == BOOST_ASIO_OS_DEF(SOCK_SEQPACKET))
+      service_impl_.open(impl, protocol, ec);
+    else
+      ec = boost::asio::error::invalid_argument;
+    return ec;
+  }
+
+  /// Assign an existing native socket to a sequenced packet socket.
+  boost::system::error_code assign(implementation_type& impl,
+      const protocol_type& protocol, const native_handle_type& native_socket,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.assign(impl, protocol, native_socket, ec);
+  }
+
+  /// Determine whether the socket is open.
+  bool is_open(const implementation_type& impl) const
+  {
+    return service_impl_.is_open(impl);
+  }
+
+  /// Close a sequenced packet socket implementation.
+  boost::system::error_code close(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.close(impl, ec);
+  }
+
+  /// (Deprecated: Use native_handle().) Get the native socket implementation.
+  native_type native(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Get the native socket implementation.
+  native_handle_type native_handle(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Cancel all asynchronous operations associated with the socket.
+  boost::system::error_code cancel(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.cancel(impl, ec);
+  }
+
+  /// Determine whether the socket is at the out-of-band data mark.
+  bool at_mark(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return service_impl_.at_mark(impl, ec);
+  }
+
+  /// Determine the number of bytes available for reading.
+  std::size_t available(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return service_impl_.available(impl, ec);
+  }
+
+  /// Bind the sequenced packet socket to the specified local endpoint.
+  boost::system::error_code bind(implementation_type& impl,
+      const endpoint_type& endpoint, boost::system::error_code& ec)
+  {
+    return service_impl_.bind(impl, endpoint, ec);
+  }
+
+  /// Connect the sequenced packet socket to the specified endpoint.
+  boost::system::error_code connect(implementation_type& impl,
+      const endpoint_type& peer_endpoint, boost::system::error_code& ec)
+  {
+    return service_impl_.connect(impl, peer_endpoint, ec);
+  }
+
+  /// Start an asynchronous connect.
+  template <typename ConnectHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ConnectHandler,
+      void (boost::system::error_code))
+  async_connect(implementation_type& impl,
+      const endpoint_type& peer_endpoint,
+      BOOST_ASIO_MOVE_ARG(ConnectHandler) handler)
+  {
+    detail::async_result_init<
+      ConnectHandler, void (boost::system::error_code)> init(
+        BOOST_ASIO_MOVE_CAST(ConnectHandler)(handler));
+
+    service_impl_.async_connect(impl, peer_endpoint, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Set a socket option.
+  template <typename SettableSocketOption>
+  boost::system::error_code set_option(implementation_type& impl,
+      const SettableSocketOption& option, boost::system::error_code& ec)
+  {
+    return service_impl_.set_option(impl, option, ec);
+  }
+
+  /// Get a socket option.
+  template <typename GettableSocketOption>
+  boost::system::error_code get_option(const implementation_type& impl,
+      GettableSocketOption& option, boost::system::error_code& ec) const
+  {
+    return service_impl_.get_option(impl, option, ec);
+  }
+
+  /// Perform an IO control command on the socket.
+  template <typename IoControlCommand>
+  boost::system::error_code io_control(implementation_type& impl,
+      IoControlCommand& command, boost::system::error_code& ec)
+  {
+    return service_impl_.io_control(impl, command, ec);
+  }
+
+  /// Gets the non-blocking mode of the socket.
+  bool non_blocking(const implementation_type& impl) const
+  {
+    return service_impl_.non_blocking(impl);
+  }
+
+  /// Sets the non-blocking mode of the socket.
+  boost::system::error_code non_blocking(implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    return service_impl_.non_blocking(impl, mode, ec);
+  }
+
+  /// Gets the non-blocking mode of the native socket implementation.
+  bool native_non_blocking(const implementation_type& impl) const
+  {
+    return service_impl_.native_non_blocking(impl);
+  }
+
+  /// Sets the non-blocking mode of the native socket implementation.
+  boost::system::error_code native_non_blocking(implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    return service_impl_.native_non_blocking(impl, mode, ec);
+  }
+
+  /// Get the local endpoint.
+  endpoint_type local_endpoint(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return service_impl_.local_endpoint(impl, ec);
+  }
+
+  /// Get the remote endpoint.
+  endpoint_type remote_endpoint(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return service_impl_.remote_endpoint(impl, ec);
+  }
+
+  /// Disable sends or receives on the socket.
+  boost::system::error_code shutdown(implementation_type& impl,
+      socket_base::shutdown_type what, boost::system::error_code& ec)
+  {
+    return service_impl_.shutdown(impl, what, ec);
+  }
+
+  /// Send the given data to the peer.
+  template <typename ConstBufferSequence>
+  std::size_t send(implementation_type& impl,
+      const ConstBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return service_impl_.send(impl, buffers, flags, ec);
+  }
+
+  /// Start an asynchronous send.
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_send(implementation_type& impl,
+      const ConstBufferSequence& buffers,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    detail::async_result_init<
+      WriteHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+    service_impl_.async_send(impl, buffers, flags, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Receive some data from the peer.
+  template <typename MutableBufferSequence>
+  std::size_t receive(implementation_type& impl,
+      const MutableBufferSequence& buffers, socket_base::message_flags in_flags,
+      socket_base::message_flags& out_flags, boost::system::error_code& ec)
+  {
+    return service_impl_.receive_with_flags(impl,
+        buffers, in_flags, out_flags, ec);
+  }
+
+  /// Start an asynchronous receive.
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive(implementation_type& impl,
+      const MutableBufferSequence& buffers, socket_base::message_flags in_flags,
+      socket_base::message_flags& out_flags,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    detail::async_result_init<
+      ReadHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+    service_impl_.async_receive_with_flags(impl,
+        buffers, in_flags, out_flags, init.handler);
+
+    return init.result.get();
+  }
+
+private:
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+    service_impl_.shutdown_service();
+  }
+
+  // The platform-specific implementation.
+  service_impl_type service_impl_;
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SEQ_PACKET_SOCKET_SERVICE_HPP
diff --git a/ext/patches/boost/asio/serial_port.hpp b/ext/patches/boost/asio/serial_port.hpp
new file mode 100644
index 0000000..e114f5a
--- /dev/null
+++ b/ext/patches/boost/asio/serial_port.hpp
@@ -0,0 +1,38 @@
+//
+// serial_port.hpp
+// ~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2008 Rep Invariant Systems, Inc. (info at repinvariant.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SERIAL_PORT_HPP
+#define BOOST_ASIO_SERIAL_PORT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_SERIAL_PORT) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <boost/asio/basic_serial_port.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Typedef for the typical usage of a serial port.
+typedef basic_serial_port<> serial_port;
+
+} // namespace asio
+} // namespace boost
+
+#endif // defined(BOOST_ASIO_HAS_SERIAL_PORT)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_SERIAL_PORT_HPP
diff --git a/ext/patches/boost/asio/serial_port_base.hpp b/ext/patches/boost/asio/serial_port_base.hpp
new file mode 100644
index 0000000..df7679e
--- /dev/null
+++ b/ext/patches/boost/asio/serial_port_base.hpp
@@ -0,0 +1,169 @@
+//
+// serial_port_base.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2008 Rep Invariant Systems, Inc. (info at repinvariant.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SERIAL_PORT_BASE_HPP
+#define BOOST_ASIO_SERIAL_PORT_BASE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_SERIAL_PORT) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+# include <termios.h>
+#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/system/error_code.hpp>
+
+#if defined(GENERATING_DOCUMENTATION)
+# define BOOST_ASIO_OPTION_STORAGE implementation_defined
+#elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+# define BOOST_ASIO_OPTION_STORAGE DCB
+#else
+# define BOOST_ASIO_OPTION_STORAGE termios
+#endif
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// The serial_port_base class is used as a base for the basic_serial_port class
+/// template so that we have a common place to define the serial port options.
+class serial_port_base
+{
+public:
+  /// Serial port option to permit changing the baud rate.
+  /**
+   * Implements changing the baud rate for a given serial port.
+   */
+  class baud_rate
+  {
+  public:
+    explicit baud_rate(unsigned int rate = 0);
+    unsigned int value() const;
+    BOOST_ASIO_DECL boost::system::error_code store(
+        BOOST_ASIO_OPTION_STORAGE& storage,
+        boost::system::error_code& ec) const;
+    BOOST_ASIO_DECL boost::system::error_code load(
+        const BOOST_ASIO_OPTION_STORAGE& storage,
+        boost::system::error_code& ec);
+  private:
+    unsigned int value_;
+  };
+
+  /// Serial port option to permit changing the flow control.
+  /**
+   * Implements changing the flow control for a given serial port.
+   */
+  class flow_control
+  {
+  public:
+    enum type { none, software, hardware };
+    BOOST_ASIO_DECL explicit flow_control(type t = none);
+    type value() const;
+    BOOST_ASIO_DECL boost::system::error_code store(
+        BOOST_ASIO_OPTION_STORAGE& storage,
+        boost::system::error_code& ec) const;
+    BOOST_ASIO_DECL boost::system::error_code load(
+        const BOOST_ASIO_OPTION_STORAGE& storage,
+        boost::system::error_code& ec);
+  private:
+    type value_;
+  };
+
+  /// Serial port option to permit changing the parity.
+  /**
+   * Implements changing the parity for a given serial port.
+   */
+  class parity
+  {
+  public:
+    enum type { none, odd, even };
+    BOOST_ASIO_DECL explicit parity(type t = none);
+    type value() const;
+    BOOST_ASIO_DECL boost::system::error_code store(
+        BOOST_ASIO_OPTION_STORAGE& storage,
+        boost::system::error_code& ec) const;
+    BOOST_ASIO_DECL boost::system::error_code load(
+        const BOOST_ASIO_OPTION_STORAGE& storage,
+        boost::system::error_code& ec);
+  private:
+    type value_;
+  };
+
+  /// Serial port option to permit changing the number of stop bits.
+  /**
+   * Implements changing the number of stop bits for a given serial port.
+   */
+  class stop_bits
+  {
+  public:
+    enum type { one, onepointfive, two };
+    BOOST_ASIO_DECL explicit stop_bits(type t = one);
+    type value() const;
+    BOOST_ASIO_DECL boost::system::error_code store(
+        BOOST_ASIO_OPTION_STORAGE& storage,
+        boost::system::error_code& ec) const;
+    BOOST_ASIO_DECL boost::system::error_code load(
+        const BOOST_ASIO_OPTION_STORAGE& storage,
+        boost::system::error_code& ec);
+  private:
+    type value_;
+  };
+
+  /// Serial port option to permit changing the character size.
+  /**
+   * Implements changing the character size for a given serial port.
+   */
+  class character_size
+  {
+  public:
+    BOOST_ASIO_DECL explicit character_size(unsigned int t = 8);
+    unsigned int value() const;
+    BOOST_ASIO_DECL boost::system::error_code store(
+        BOOST_ASIO_OPTION_STORAGE& storage,
+        boost::system::error_code& ec) const;
+    BOOST_ASIO_DECL boost::system::error_code load(
+        const BOOST_ASIO_OPTION_STORAGE& storage,
+        boost::system::error_code& ec);
+  private:
+    unsigned int value_;
+  };
+
+protected:
+  /// Protected destructor to prevent deletion through this type.
+  ~serial_port_base()
+  {
+  }
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#undef BOOST_ASIO_OPTION_STORAGE
+
+#include <boost/asio/impl/serial_port_base.hpp>
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/impl/serial_port_base.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // defined(BOOST_ASIO_HAS_SERIAL_PORT)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_SERIAL_PORT_BASE_HPP
diff --git a/ext/patches/boost/asio/serial_port_service.hpp b/ext/patches/boost/asio/serial_port_service.hpp
new file mode 100644
index 0000000..4f53da8
--- /dev/null
+++ b/ext/patches/boost/asio/serial_port_service.hpp
@@ -0,0 +1,255 @@
+//
+// serial_port_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SERIAL_PORT_SERVICE_HPP
+#define BOOST_ASIO_SERIAL_PORT_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_SERIAL_PORT) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <cstddef>
+#include <string>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/detail/reactive_serial_port_service.hpp>
+#include <boost/asio/detail/win_iocp_serial_port_service.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/serial_port_base.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Default service implementation for a serial port.
+class serial_port_service
+#if defined(GENERATING_DOCUMENTATION)
+  : public boost::asio::io_service::service
+#else
+  : public boost::asio::detail::service_base<serial_port_service>
+#endif
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The unique service identifier.
+  static boost::asio::io_service::id id;
+#endif
+
+private:
+  // The type of the platform-specific implementation.
+#if defined(BOOST_ASIO_HAS_IOCP)
+  typedef detail::win_iocp_serial_port_service service_impl_type;
+#else
+  typedef detail::reactive_serial_port_service service_impl_type;
+#endif
+
+public:
+  /// The type of a serial port implementation.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined implementation_type;
+#else
+  typedef service_impl_type::implementation_type implementation_type;
+#endif
+
+  /// (Deprecated: Use native_handle_type.) The native handle type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_type;
+#else
+  typedef service_impl_type::native_handle_type native_type;
+#endif
+
+  /// The native handle type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_handle_type;
+#else
+  typedef service_impl_type::native_handle_type native_handle_type;
+#endif
+
+  /// Construct a new serial port service for the specified io_service.
+  explicit serial_port_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<serial_port_service>(io_service),
+      service_impl_(io_service)
+  {
+  }
+
+  /// Construct a new serial port implementation.
+  void construct(implementation_type& impl)
+  {
+    service_impl_.construct(impl);
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a new serial port implementation.
+  void move_construct(implementation_type& impl,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_construct(impl, other_impl);
+  }
+
+  /// Move-assign from another serial port implementation.
+  void move_assign(implementation_type& impl,
+      serial_port_service& other_service,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_assign(impl, other_service.service_impl_, other_impl);
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Destroy a serial port implementation.
+  void destroy(implementation_type& impl)
+  {
+    service_impl_.destroy(impl);
+  }
+
+  /// Open a serial port.
+  boost::system::error_code open(implementation_type& impl,
+      const std::string& device, boost::system::error_code& ec)
+  {
+    return service_impl_.open(impl, device, ec);
+  }
+
+  /// Assign an existing native handle to a serial port.
+  boost::system::error_code assign(implementation_type& impl,
+      const native_handle_type& handle, boost::system::error_code& ec)
+  {
+    return service_impl_.assign(impl, handle, ec);
+  }
+
+  /// Determine whether the handle is open.
+  bool is_open(const implementation_type& impl) const
+  {
+    return service_impl_.is_open(impl);
+  }
+
+  /// Close a serial port implementation.
+  boost::system::error_code close(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.close(impl, ec);
+  }
+
+  /// (Deprecated: Use native_handle().) Get the native handle implementation.
+  native_type native(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Get the native handle implementation.
+  native_handle_type native_handle(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Cancel all asynchronous operations associated with the handle.
+  boost::system::error_code cancel(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.cancel(impl, ec);
+  }
+
+  /// Set a serial port option.
+  template <typename SettableSerialPortOption>
+  boost::system::error_code set_option(implementation_type& impl,
+      const SettableSerialPortOption& option, boost::system::error_code& ec)
+  {
+    return service_impl_.set_option(impl, option, ec);
+  }
+
+  /// Get a serial port option.
+  template <typename GettableSerialPortOption>
+  boost::system::error_code get_option(const implementation_type& impl,
+      GettableSerialPortOption& option, boost::system::error_code& ec) const
+  {
+    return service_impl_.get_option(impl, option, ec);
+  }
+
+  /// Send a break sequence to the serial port.
+  boost::system::error_code send_break(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.send_break(impl, ec);
+  }
+
+  /// Write the given data to the stream.
+  template <typename ConstBufferSequence>
+  std::size_t write_some(implementation_type& impl,
+      const ConstBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return service_impl_.write_some(impl, buffers, ec);
+  }
+
+  /// Start an asynchronous write.
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_write_some(implementation_type& impl,
+      const ConstBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    detail::async_result_init<
+      WriteHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+    service_impl_.async_write_some(impl, buffers, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Read some data from the stream.
+  template <typename MutableBufferSequence>
+  std::size_t read_some(implementation_type& impl,
+      const MutableBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return service_impl_.read_some(impl, buffers, ec);
+  }
+
+  /// Start an asynchronous read.
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_read_some(implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    detail::async_result_init<
+      ReadHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+    service_impl_.async_read_some(impl, buffers, init.handler);
+
+    return init.result.get();
+  }
+
+private:
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+    service_impl_.shutdown_service();
+  }
+
+  // The platform-specific implementation.
+  service_impl_type service_impl_;
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_SERIAL_PORT)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_SERIAL_PORT_SERVICE_HPP
diff --git a/ext/patches/boost/asio/signal_set.hpp b/ext/patches/boost/asio/signal_set.hpp
new file mode 100644
index 0000000..44d4dfa
--- /dev/null
+++ b/ext/patches/boost/asio/signal_set.hpp
@@ -0,0 +1,30 @@
+//
+// signal_set.hpp
+// ~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SIGNAL_SET_HPP
+#define BOOST_ASIO_SIGNAL_SET_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/basic_signal_set.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Typedef for the typical usage of a signal set.
+typedef basic_signal_set<> signal_set;
+
+} // namespace asio
+} // namespace boost
+
+#endif // BOOST_ASIO_SIGNAL_SET_HPP
diff --git a/ext/patches/boost/asio/signal_set_service.hpp b/ext/patches/boost/asio/signal_set_service.hpp
new file mode 100644
index 0000000..92b334c
--- /dev/null
+++ b/ext/patches/boost/asio/signal_set_service.hpp
@@ -0,0 +1,136 @@
+//
+// signal_set_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SIGNAL_SET_SERVICE_HPP
+#define BOOST_ASIO_SIGNAL_SET_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/detail/signal_set_service.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Default service implementation for a signal set.
+class signal_set_service
+#if defined(GENERATING_DOCUMENTATION)
+  : public boost::asio::io_service::service
+#else
+  : public boost::asio::detail::service_base<signal_set_service>
+#endif
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The unique service identifier.
+  static boost::asio::io_service::id id;
+#endif
+
+public:
+  /// The type of a signal set implementation.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined implementation_type;
+#else
+  typedef detail::signal_set_service::implementation_type implementation_type;
+#endif
+
+  /// Construct a new signal set service for the specified io_service.
+  explicit signal_set_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<signal_set_service>(io_service),
+      service_impl_(io_service)
+  {
+  }
+
+  /// Construct a new signal set implementation.
+  void construct(implementation_type& impl)
+  {
+    service_impl_.construct(impl);
+  }
+
+  /// Destroy a signal set implementation.
+  void destroy(implementation_type& impl)
+  {
+    service_impl_.destroy(impl);
+  }
+
+  /// Add a signal to a signal_set.
+  boost::system::error_code add(implementation_type& impl,
+      int signal_number, boost::system::error_code& ec)
+  {
+    return service_impl_.add(impl, signal_number, ec);
+  }
+
+  /// Remove a signal to a signal_set.
+  boost::system::error_code remove(implementation_type& impl,
+      int signal_number, boost::system::error_code& ec)
+  {
+    return service_impl_.remove(impl, signal_number, ec);
+  }
+
+  /// Remove all signals from a signal_set.
+  boost::system::error_code clear(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.clear(impl, ec);
+  }
+
+  /// Cancel all operations associated with the signal set.
+  boost::system::error_code cancel(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.cancel(impl, ec);
+  }
+
+  // Start an asynchronous operation to wait for a signal to be delivered.
+  template <typename SignalHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(SignalHandler,
+      void (boost::system::error_code, int))
+  async_wait(implementation_type& impl,
+      BOOST_ASIO_MOVE_ARG(SignalHandler) handler)
+  {
+    detail::async_result_init<
+      SignalHandler, void (boost::system::error_code, int)> init(
+        BOOST_ASIO_MOVE_CAST(SignalHandler)(handler));
+
+    service_impl_.async_wait(impl, init.handler);
+
+    return init.result.get();
+  }
+
+private:
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+    service_impl_.shutdown_service();
+  }
+
+  // Perform any fork-related housekeeping.
+  void fork_service(boost::asio::io_service::fork_event event)
+  {
+    service_impl_.fork_service(event);
+  }
+
+  // The platform-specific implementation.
+  detail::signal_set_service service_impl_;
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SIGNAL_SET_SERVICE_HPP
diff --git a/ext/patches/boost/asio/socket_acceptor_service.hpp b/ext/patches/boost/asio/socket_acceptor_service.hpp
new file mode 100644
index 0000000..87ea518
--- /dev/null
+++ b/ext/patches/boost/asio/socket_acceptor_service.hpp
@@ -0,0 +1,304 @@
+//
+// socket_acceptor_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SOCKET_ACCEPTOR_SERVICE_HPP
+#define BOOST_ASIO_SOCKET_ACCEPTOR_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/basic_socket.hpp>
+#include <boost/asio/detail/type_traits.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/null_socket_service.hpp>
+#elif defined(BOOST_ASIO_HAS_IOCP)
+# include <boost/asio/detail/win_iocp_socket_service.hpp>
+#else
+# include <boost/asio/detail/reactive_socket_service.hpp>
+#endif
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Default service implementation for a socket acceptor.
+template <typename Protocol>
+class socket_acceptor_service
+#if defined(GENERATING_DOCUMENTATION)
+  : public boost::asio::io_service::service
+#else
+  : public boost::asio::detail::service_base<socket_acceptor_service<Protocol> >
+#endif
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The unique service identifier.
+  static boost::asio::io_service::id id;
+#endif
+
+  /// The protocol type.
+  typedef Protocol protocol_type;
+
+  /// The endpoint type.
+  typedef typename protocol_type::endpoint endpoint_type;
+
+private:
+  // The type of the platform-specific implementation.
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  typedef detail::null_socket_service<Protocol> service_impl_type;
+#elif defined(BOOST_ASIO_HAS_IOCP)
+  typedef detail::win_iocp_socket_service<Protocol> service_impl_type;
+#else
+  typedef detail::reactive_socket_service<Protocol> service_impl_type;
+#endif
+
+public:
+  /// The native type of the socket acceptor.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined implementation_type;
+#else
+  typedef typename service_impl_type::implementation_type implementation_type;
+#endif
+
+  /// (Deprecated: Use native_handle_type.) The native acceptor type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_type;
+#else
+  typedef typename service_impl_type::native_handle_type native_type;
+#endif
+
+  /// The native acceptor type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_handle_type;
+#else
+  typedef typename service_impl_type::native_handle_type native_handle_type;
+#endif
+
+  /// Construct a new socket acceptor service for the specified io_service.
+  explicit socket_acceptor_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<
+        socket_acceptor_service<Protocol> >(io_service),
+      service_impl_(io_service)
+  {
+  }
+
+  /// Construct a new socket acceptor implementation.
+  void construct(implementation_type& impl)
+  {
+    service_impl_.construct(impl);
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a new socket acceptor implementation.
+  void move_construct(implementation_type& impl,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_construct(impl, other_impl);
+  }
+
+  /// Move-assign from another socket acceptor implementation.
+  void move_assign(implementation_type& impl,
+      socket_acceptor_service& other_service,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_assign(impl, other_service.service_impl_, other_impl);
+  }
+
+  /// Move-construct a new socket acceptor implementation from another protocol
+  /// type.
+  template <typename Protocol1>
+  void converting_move_construct(implementation_type& impl,
+      typename socket_acceptor_service<
+        Protocol1>::implementation_type& other_impl,
+      typename enable_if<is_convertible<
+        Protocol1, Protocol>::value>::type* = 0)
+  {
+    service_impl_.template converting_move_construct<Protocol1>(
+        impl, other_impl);
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Destroy a socket acceptor implementation.
+  void destroy(implementation_type& impl)
+  {
+    service_impl_.destroy(impl);
+  }
+
+  /// Open a new socket acceptor implementation.
+  boost::system::error_code open(implementation_type& impl,
+      const protocol_type& protocol, boost::system::error_code& ec)
+  {
+    return service_impl_.open(impl, protocol, ec);
+  }
+
+  /// Assign an existing native acceptor to a socket acceptor.
+  boost::system::error_code assign(implementation_type& impl,
+      const protocol_type& protocol, const native_handle_type& native_acceptor,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.assign(impl, protocol, native_acceptor, ec);
+  }
+
+  /// Determine whether the acceptor is open.
+  bool is_open(const implementation_type& impl) const
+  {
+    return service_impl_.is_open(impl);
+  }
+
+  /// Cancel all asynchronous operations associated with the acceptor.
+  boost::system::error_code cancel(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.cancel(impl, ec);
+  }
+
+  /// Bind the socket acceptor to the specified local endpoint.
+  boost::system::error_code bind(implementation_type& impl,
+      const endpoint_type& endpoint, boost::system::error_code& ec)
+  {
+    return service_impl_.bind(impl, endpoint, ec);
+  }
+
+  /// Place the socket acceptor into the state where it will listen for new
+  /// connections.
+  boost::system::error_code listen(implementation_type& impl, int backlog,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.listen(impl, backlog, ec);
+  }
+
+  /// Close a socket acceptor implementation.
+  boost::system::error_code close(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.close(impl, ec);
+  }
+
+  /// (Deprecated: Use native_handle().) Get the native acceptor implementation.
+  native_type native(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Get the native acceptor implementation.
+  native_handle_type native_handle(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Set a socket option.
+  template <typename SettableSocketOption>
+  boost::system::error_code set_option(implementation_type& impl,
+      const SettableSocketOption& option, boost::system::error_code& ec)
+  {
+    return service_impl_.set_option(impl, option, ec);
+  }
+
+  /// Get a socket option.
+  template <typename GettableSocketOption>
+  boost::system::error_code get_option(const implementation_type& impl,
+      GettableSocketOption& option, boost::system::error_code& ec) const
+  {
+    return service_impl_.get_option(impl, option, ec);
+  }
+
+  /// Perform an IO control command on the socket.
+  template <typename IoControlCommand>
+  boost::system::error_code io_control(implementation_type& impl,
+      IoControlCommand& command, boost::system::error_code& ec)
+  {
+    return service_impl_.io_control(impl, command, ec);
+  }
+
+  /// Gets the non-blocking mode of the acceptor.
+  bool non_blocking(const implementation_type& impl) const
+  {
+    return service_impl_.non_blocking(impl);
+  }
+
+  /// Sets the non-blocking mode of the acceptor.
+  boost::system::error_code non_blocking(implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    return service_impl_.non_blocking(impl, mode, ec);
+  }
+
+  /// Gets the non-blocking mode of the native acceptor implementation.
+  bool native_non_blocking(const implementation_type& impl) const
+  {
+    return service_impl_.native_non_blocking(impl);
+  }
+
+  /// Sets the non-blocking mode of the native acceptor implementation.
+  boost::system::error_code native_non_blocking(implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    return service_impl_.native_non_blocking(impl, mode, ec);
+  }
+
+  /// Get the local endpoint.
+  endpoint_type local_endpoint(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return service_impl_.local_endpoint(impl, ec);
+  }
+
+  /// Accept a new connection.
+  template <typename Protocol1, typename SocketService>
+  boost::system::error_code accept(implementation_type& impl,
+      basic_socket<Protocol1, SocketService>& peer,
+      endpoint_type* peer_endpoint, boost::system::error_code& ec,
+      typename enable_if<is_convertible<Protocol, Protocol1>::value>::type* = 0)
+  {
+    return service_impl_.accept(impl, peer, peer_endpoint, ec);
+  }
+
+  /// Start an asynchronous accept.
+  template <typename Protocol1, typename SocketService, typename AcceptHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(AcceptHandler,
+      void (boost::system::error_code))
+  async_accept(implementation_type& impl,
+      basic_socket<Protocol1, SocketService>& peer,
+      endpoint_type* peer_endpoint,
+      BOOST_ASIO_MOVE_ARG(AcceptHandler) handler,
+      typename enable_if<is_convertible<Protocol, Protocol1>::value>::type* = 0)
+  {
+    detail::async_result_init<
+      AcceptHandler, void (boost::system::error_code)> init(
+        BOOST_ASIO_MOVE_CAST(AcceptHandler)(handler));
+
+    service_impl_.async_accept(impl, peer, peer_endpoint, init.handler);
+
+    return init.result.get();
+  }
+
+private:
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+    service_impl_.shutdown_service();
+  }
+
+  // The platform-specific implementation.
+  service_impl_type service_impl_;
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SOCKET_ACCEPTOR_SERVICE_HPP
diff --git a/ext/patches/boost/asio/socket_base.hpp b/ext/patches/boost/asio/socket_base.hpp
new file mode 100644
index 0000000..3191d13
--- /dev/null
+++ b/ext/patches/boost/asio/socket_base.hpp
@@ -0,0 +1,522 @@
+//
+// socket_base.hpp
+// ~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SOCKET_BASE_HPP
+#define BOOST_ASIO_SOCKET_BASE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/detail/io_control.hpp>
+#include <boost/asio/detail/socket_option.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// The socket_base class is used as a base for the basic_stream_socket and
+/// basic_datagram_socket class templates so that we have a common place to
+/// define the shutdown_type and enum.
+class socket_base
+{
+public:
+  /// Different ways a socket may be shutdown.
+  enum shutdown_type
+  {
+#if defined(GENERATING_DOCUMENTATION)
+    /// Shutdown the receive side of the socket.
+    shutdown_receive = implementation_defined,
+
+    /// Shutdown the send side of the socket.
+    shutdown_send = implementation_defined,
+
+    /// Shutdown both send and receive on the socket.
+    shutdown_both = implementation_defined
+#else
+    shutdown_receive = BOOST_ASIO_OS_DEF(SHUT_RD),
+    shutdown_send = BOOST_ASIO_OS_DEF(SHUT_WR),
+    shutdown_both = BOOST_ASIO_OS_DEF(SHUT_RDWR)
+#endif
+  };
+
+  /// Bitmask type for flags that can be passed to send and receive operations.
+  typedef int message_flags;
+
+#if defined(GENERATING_DOCUMENTATION)
+  /// Peek at incoming data without removing it from the input queue.
+  static const int message_peek = implementation_defined;
+
+  /// Process out-of-band data.
+  static const int message_out_of_band = implementation_defined;
+
+  /// Specify that the data should not be subject to routing.
+  static const int message_do_not_route = implementation_defined;
+
+  /// Specifies that the data marks the end of a record.
+  static const int message_end_of_record = implementation_defined;
+#else
+  BOOST_ASIO_STATIC_CONSTANT(int,
+      message_peek = BOOST_ASIO_OS_DEF(MSG_PEEK));
+  BOOST_ASIO_STATIC_CONSTANT(int,
+      message_out_of_band = BOOST_ASIO_OS_DEF(MSG_OOB));
+  BOOST_ASIO_STATIC_CONSTANT(int,
+      message_do_not_route = BOOST_ASIO_OS_DEF(MSG_DONTROUTE));
+  BOOST_ASIO_STATIC_CONSTANT(int,
+      message_end_of_record = BOOST_ASIO_OS_DEF(MSG_EOR));
+#endif
+
+  /// Socket option to permit sending of broadcast messages.
+  /**
+   * Implements the SOL_SOCKET/SO_BROADCAST socket option.
+   *
+   * @par Examples
+   * Setting the option:
+   * @code
+   * boost::asio::ip::udp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::broadcast option(true);
+   * socket.set_option(option);
+   * @endcode
+   *
+   * @par
+   * Getting the current option value:
+   * @code
+   * boost::asio::ip::udp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::broadcast option;
+   * socket.get_option(option);
+   * bool is_set = option.value();
+   * @endcode
+   *
+   * @par Concepts:
+   * Socket_Option, Boolean_Socket_Option.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined broadcast;
+#else
+  typedef boost::asio::detail::socket_option::boolean<
+    BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_BROADCAST)>
+      broadcast;
+#endif
+
+  /// Socket option to enable socket-level debugging.
+  /**
+   * Implements the SOL_SOCKET/SO_DEBUG socket option.
+   *
+   * @par Examples
+   * Setting the option:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::debug option(true);
+   * socket.set_option(option);
+   * @endcode
+   *
+   * @par
+   * Getting the current option value:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::debug option;
+   * socket.get_option(option);
+   * bool is_set = option.value();
+   * @endcode
+   *
+   * @par Concepts:
+   * Socket_Option, Boolean_Socket_Option.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined debug;
+#else
+  typedef boost::asio::detail::socket_option::boolean<
+    BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_DEBUG)> debug;
+#endif
+
+  /// Socket option to prevent routing, use local interfaces only.
+  /**
+   * Implements the SOL_SOCKET/SO_DONTROUTE socket option.
+   *
+   * @par Examples
+   * Setting the option:
+   * @code
+   * boost::asio::ip::udp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::do_not_route option(true);
+   * socket.set_option(option);
+   * @endcode
+   *
+   * @par
+   * Getting the current option value:
+   * @code
+   * boost::asio::ip::udp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::do_not_route option;
+   * socket.get_option(option);
+   * bool is_set = option.value();
+   * @endcode
+   *
+   * @par Concepts:
+   * Socket_Option, Boolean_Socket_Option.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined do_not_route;
+#else
+  typedef boost::asio::detail::socket_option::boolean<
+    BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_DONTROUTE)>
+      do_not_route;
+#endif
+
+  /// Socket option to send keep-alives.
+  /**
+   * Implements the SOL_SOCKET/SO_KEEPALIVE socket option.
+   *
+   * @par Examples
+   * Setting the option:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::keep_alive option(true);
+   * socket.set_option(option);
+   * @endcode
+   *
+   * @par
+   * Getting the current option value:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::keep_alive option;
+   * socket.get_option(option);
+   * bool is_set = option.value();
+   * @endcode
+   *
+   * @par Concepts:
+   * Socket_Option, Boolean_Socket_Option.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined keep_alive;
+#else
+  typedef boost::asio::detail::socket_option::boolean<
+    BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_KEEPALIVE)> keep_alive;
+#endif
+
+  /// Socket option for the send buffer size of a socket.
+  /**
+   * Implements the SOL_SOCKET/SO_SNDBUF socket option.
+   *
+   * @par Examples
+   * Setting the option:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::send_buffer_size option(8192);
+   * socket.set_option(option);
+   * @endcode
+   *
+   * @par
+   * Getting the current option value:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::send_buffer_size option;
+   * socket.get_option(option);
+   * int size = option.value();
+   * @endcode
+   *
+   * @par Concepts:
+   * Socket_Option, Integer_Socket_Option.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined send_buffer_size;
+#else
+  typedef boost::asio::detail::socket_option::integer<
+    BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_SNDBUF)>
+      send_buffer_size;
+#endif
+
+  /// Socket option for the send low watermark.
+  /**
+   * Implements the SOL_SOCKET/SO_SNDLOWAT socket option.
+   *
+   * @par Examples
+   * Setting the option:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::send_low_watermark option(1024);
+   * socket.set_option(option);
+   * @endcode
+   *
+   * @par
+   * Getting the current option value:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::send_low_watermark option;
+   * socket.get_option(option);
+   * int size = option.value();
+   * @endcode
+   *
+   * @par Concepts:
+   * Socket_Option, Integer_Socket_Option.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined send_low_watermark;
+#else
+  typedef boost::asio::detail::socket_option::integer<
+    BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_SNDLOWAT)>
+      send_low_watermark;
+#endif
+
+  /// Socket option for the receive buffer size of a socket.
+  /**
+   * Implements the SOL_SOCKET/SO_RCVBUF socket option.
+   *
+   * @par Examples
+   * Setting the option:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::receive_buffer_size option(8192);
+   * socket.set_option(option);
+   * @endcode
+   *
+   * @par
+   * Getting the current option value:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::receive_buffer_size option;
+   * socket.get_option(option);
+   * int size = option.value();
+   * @endcode
+   *
+   * @par Concepts:
+   * Socket_Option, Integer_Socket_Option.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined receive_buffer_size;
+#else
+  typedef boost::asio::detail::socket_option::integer<
+    BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_RCVBUF)>
+      receive_buffer_size;
+#endif
+
+  /// Socket option for the receive low watermark.
+  /**
+   * Implements the SOL_SOCKET/SO_RCVLOWAT socket option.
+   *
+   * @par Examples
+   * Setting the option:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::receive_low_watermark option(1024);
+   * socket.set_option(option);
+   * @endcode
+   *
+   * @par
+   * Getting the current option value:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::receive_low_watermark option;
+   * socket.get_option(option);
+   * int size = option.value();
+   * @endcode
+   *
+   * @par Concepts:
+   * Socket_Option, Integer_Socket_Option.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined receive_low_watermark;
+#else
+  typedef boost::asio::detail::socket_option::integer<
+    BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_RCVLOWAT)>
+      receive_low_watermark;
+#endif
+
+  /// Socket option to allow the socket to be bound to an address that is
+  /// already in use.
+  /**
+   * Implements the SOL_SOCKET/SO_REUSEADDR socket option.
+   *
+   * @par Examples
+   * Setting the option:
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service); 
+   * ...
+   * boost::asio::socket_base::reuse_address option(true);
+   * acceptor.set_option(option);
+   * @endcode
+   *
+   * @par
+   * Getting the current option value:
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service); 
+   * ...
+   * boost::asio::socket_base::reuse_address option;
+   * acceptor.get_option(option);
+   * bool is_set = option.value();
+   * @endcode
+   *
+   * @par Concepts:
+   * Socket_Option, Boolean_Socket_Option.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined reuse_address;
+#else
+  typedef boost::asio::detail::socket_option::boolean<
+    BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_REUSEADDR)>
+      reuse_address;
+#endif
+
+  /// Socket option to specify whether the socket lingers on close if unsent
+  /// data is present.
+  /**
+   * Implements the SOL_SOCKET/SO_LINGER socket option.
+   *
+   * @par Examples
+   * Setting the option:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::linger option(true, 30);
+   * socket.set_option(option);
+   * @endcode
+   *
+   * @par
+   * Getting the current option value:
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::linger option;
+   * socket.get_option(option);
+   * bool is_set = option.enabled();
+   * unsigned short timeout = option.timeout();
+   * @endcode
+   *
+   * @par Concepts:
+   * Socket_Option, Linger_Socket_Option.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined linger;
+#else
+  typedef boost::asio::detail::socket_option::linger<
+    BOOST_ASIO_OS_DEF(SOL_SOCKET), BOOST_ASIO_OS_DEF(SO_LINGER)>
+      linger;
+#endif
+
+  /// Socket option to report aborted connections on accept.
+  /**
+   * Implements a custom socket option that determines whether or not an accept
+   * operation is permitted to fail with boost::asio::error::connection_aborted.
+   * By default the option is false.
+   *
+   * @par Examples
+   * Setting the option:
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service); 
+   * ...
+   * boost::asio::socket_base::enable_connection_aborted option(true);
+   * acceptor.set_option(option);
+   * @endcode
+   *
+   * @par
+   * Getting the current option value:
+   * @code
+   * boost::asio::ip::tcp::acceptor acceptor(io_service); 
+   * ...
+   * boost::asio::socket_base::enable_connection_aborted option;
+   * acceptor.get_option(option);
+   * bool is_set = option.value();
+   * @endcode
+   *
+   * @par Concepts:
+   * Socket_Option, Boolean_Socket_Option.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined enable_connection_aborted;
+#else
+  typedef boost::asio::detail::socket_option::boolean<
+    boost::asio::detail::custom_socket_option_level,
+    boost::asio::detail::enable_connection_aborted_option>
+    enable_connection_aborted;
+#endif
+
+  /// (Deprecated: Use non_blocking().) IO control command to
+  /// set the blocking mode of the socket.
+  /**
+   * Implements the FIONBIO IO control command.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::non_blocking_io command(true);
+   * socket.io_control(command);
+   * @endcode
+   *
+   * @par Concepts:
+   * IO_Control_Command, Boolean_IO_Control_Command.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined non_blocking_io;
+#else
+  typedef boost::asio::detail::io_control::non_blocking_io non_blocking_io;
+#endif
+
+  /// IO control command to get the amount of data that can be read without
+  /// blocking.
+  /**
+   * Implements the FIONREAD IO control command.
+   *
+   * @par Example
+   * @code
+   * boost::asio::ip::tcp::socket socket(io_service); 
+   * ...
+   * boost::asio::socket_base::bytes_readable command(true);
+   * socket.io_control(command);
+   * std::size_t bytes_readable = command.get();
+   * @endcode
+   *
+   * @par Concepts:
+   * IO_Control_Command, Size_IO_Control_Command.
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined bytes_readable;
+#else
+  typedef boost::asio::detail::io_control::bytes_readable bytes_readable;
+#endif
+
+  /// The maximum length of the queue of pending incoming connections.
+#if defined(GENERATING_DOCUMENTATION)
+  static const int max_connections = implementation_defined;
+#else
+  BOOST_ASIO_STATIC_CONSTANT(int, max_connections
+      = BOOST_ASIO_OS_DEF(SOMAXCONN));
+#endif
+
+protected:
+  /// Protected destructor to prevent deletion through this type.
+  ~socket_base()
+  {
+  }
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SOCKET_BASE_HPP
diff --git a/ext/patches/boost/asio/spawn.hpp b/ext/patches/boost/asio/spawn.hpp
new file mode 100644
index 0000000..4f1c086
--- /dev/null
+++ b/ext/patches/boost/asio/spawn.hpp
@@ -0,0 +1,267 @@
+//
+// spawn.hpp
+// ~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SPAWN_HPP
+#define BOOST_ASIO_SPAWN_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/coroutine/all.hpp>
+#include <boost/asio/detail/weak_ptr.hpp>
+#include <boost/asio/detail/wrapped_handler.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/strand.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Context object the represents the currently executing coroutine.
+/**
+ * The basic_yield_context class is used to represent the currently executing
+ * stackful coroutine. A basic_yield_context may be passed as a handler to an
+ * asynchronous operation. For example:
+ *
+ * @code template <typename Handler>
+ * void my_coroutine(basic_yield_context<Handler> yield)
+ * {
+ *   ...
+ *   std::size_t n = my_socket.async_read_some(buffer, yield);
+ *   ...
+ * } @endcode
+ *
+ * The initiating function (async_read_some in the above example) suspends the
+ * current coroutine. The coroutine is resumed when the asynchronous operation
+ * completes, and the result of the operation is returned.
+ */
+template <typename Handler>
+class basic_yield_context
+{
+public:
+  /// The coroutine callee type, used by the implementation.
+  /**
+   * When using Boost.Coroutine v1, this type is:
+   * @code typename coroutine<void()> @endcode
+   * When using Boost.Coroutine v2 (unidirectional coroutines), this type is:
+   * @code push_coroutine<void> @endcode
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined callee_type;
+#elif defined(BOOST_COROUTINES_UNIDIRECT) || defined(BOOST_COROUTINES_V2)
+  typedef boost::coroutines::push_coroutine<void> callee_type;
+#else
+  typedef boost::coroutines::coroutine<void()> callee_type;
+#endif
+  
+  /// The coroutine caller type, used by the implementation.
+  /**
+   * When using Boost.Coroutine v1, this type is:
+   * @code typename coroutine<void()>::caller_type @endcode
+   * When using Boost.Coroutine v2 (unidirectional coroutines), this type is:
+   * @code pull_coroutine<void> @endcode
+   */
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined caller_type;
+#elif defined(BOOST_COROUTINES_UNIDIRECT) || defined(BOOST_COROUTINES_V2)
+  typedef boost::coroutines::pull_coroutine<void> caller_type;
+#else
+  typedef boost::coroutines::coroutine<void()>::caller_type caller_type;
+#endif
+
+  /// Construct a yield context to represent the specified coroutine.
+  /**
+   * Most applications do not need to use this constructor. Instead, the
+   * spawn() function passes a yield context as an argument to the coroutine
+   * function.
+   */
+  basic_yield_context(
+      const detail::weak_ptr<callee_type>& coro,
+      caller_type& ca, Handler& handler)
+    : coro_(coro),
+      ca_(ca),
+      handler_(handler),
+      ec_(0)
+  {
+  }
+
+  /// Return a yield context that sets the specified error_code.
+  /**
+   * By default, when a yield context is used with an asynchronous operation, a
+   * non-success error_code is converted to system_error and thrown. This
+   * operator may be used to specify an error_code object that should instead be
+   * set with the asynchronous operation's result. For example:
+   *
+   * @code template <typename Handler>
+   * void my_coroutine(basic_yield_context<Handler> yield)
+   * {
+   *   ...
+   *   std::size_t n = my_socket.async_read_some(buffer, yield[ec]);
+   *   if (ec)
+   *   {
+   *     // An error occurred.
+   *   }
+   *   ...
+   * } @endcode
+   */
+  basic_yield_context operator[](boost::system::error_code& ec) const
+  {
+    basic_yield_context tmp(*this);
+    tmp.ec_ = &ec;
+    return tmp;
+  }
+
+#if defined(GENERATING_DOCUMENTATION)
+private:
+#endif // defined(GENERATING_DOCUMENTATION)
+  detail::weak_ptr<callee_type> coro_;
+  caller_type& ca_;
+  Handler& handler_;
+  boost::system::error_code* ec_;
+};
+
+#if defined(GENERATING_DOCUMENTATION)
+/// Context object that represents the currently executing coroutine.
+typedef basic_yield_context<unspecified> yield_context;
+#else // defined(GENERATING_DOCUMENTATION)
+typedef basic_yield_context<
+  detail::wrapped_handler<
+    io_service::strand, void(*)(),
+    detail::is_continuation_if_running> > yield_context;
+#endif // defined(GENERATING_DOCUMENTATION)
+
+/**
+ * @defgroup spawn boost::asio::spawn
+ *
+ * @brief Start a new stackful coroutine.
+ *
+ * The spawn() function is a high-level wrapper over the Boost.Coroutine
+ * library. This function enables programs to implement asynchronous logic in a
+ * synchronous manner, as illustrated by the following example:
+ *
+ * @code boost::asio::spawn(my_strand, do_echo);
+ *
+ * // ...
+ *
+ * void do_echo(boost::asio::yield_context yield)
+ * {
+ *   try
+ *   {
+ *     char data[128];
+ *     for (;;)
+ *     {
+ *       std::size_t length =
+ *         my_socket.async_read_some(
+ *           boost::asio::buffer(data), yield);
+ *
+ *       boost::asio::async_write(my_socket,
+ *           boost::asio::buffer(data, length), yield);
+ *     }
+ *   }
+ *   catch (std::exception& e)
+ *   {
+ *     // ...
+ *   }
+ * } @endcode
+ */
+/*@{*/
+
+/// Start a new stackful coroutine, calling the specified handler when it
+/// completes.
+/**
+ * This function is used to launch a new coroutine.
+ *
+ * @param handler A handler to be called when the coroutine exits. More
+ * importantly, the handler provides an execution context (via the the handler
+ * invocation hook) for the coroutine. The handler must have the signature:
+ * @code void handler(); @endcode
+ *
+ * @param function The coroutine function. The function must have the signature:
+ * @code void function(basic_yield_context<Handler> yield); @endcode
+ *
+ * @param attributes Boost.Coroutine attributes used to customise the coroutine.
+ */
+template <typename Handler, typename Function>
+void spawn(BOOST_ASIO_MOVE_ARG(Handler) handler,
+    BOOST_ASIO_MOVE_ARG(Function) function,
+    const boost::coroutines::attributes& attributes
+      = boost::coroutines::attributes());
+
+/// Start a new stackful coroutine, inheriting the execution context of another.
+/**
+ * This function is used to launch a new coroutine.
+ *
+ * @param ctx Identifies the current coroutine as a parent of the new
+ * coroutine. This specifies that the new coroutine should inherit the
+ * execution context of the parent. For example, if the parent coroutine is
+ * executing in a particular strand, then the new coroutine will execute in the
+ * same strand.
+ *
+ * @param function The coroutine function. The function must have the signature:
+ * @code void function(basic_yield_context<Handler> yield); @endcode
+ *
+ * @param attributes Boost.Coroutine attributes used to customise the coroutine.
+ */
+template <typename Handler, typename Function>
+void spawn(basic_yield_context<Handler> ctx,
+    BOOST_ASIO_MOVE_ARG(Function) function,
+    const boost::coroutines::attributes& attributes
+      = boost::coroutines::attributes());
+
+/// Start a new stackful coroutine that executes in the context of a strand.
+/**
+ * This function is used to launch a new coroutine.
+ *
+ * @param strand Identifies a strand. By starting multiple coroutines on the
+ * same strand, the implementation ensures that none of those coroutines can
+ * execute simultaneously.
+ *
+ * @param function The coroutine function. The function must have the signature:
+ * @code void function(yield_context yield); @endcode
+ *
+ * @param attributes Boost.Coroutine attributes used to customise the coroutine.
+ */
+template <typename Function>
+void spawn(boost::asio::io_service::strand strand,
+    BOOST_ASIO_MOVE_ARG(Function) function,
+    const boost::coroutines::attributes& attributes
+      = boost::coroutines::attributes());
+
+/// Start a new stackful coroutine that executes on a given io_service.
+/**
+ * This function is used to launch a new coroutine.
+ *
+ * @param io_service Identifies the io_service that will run the coroutine. The
+ * new coroutine is implicitly given its own strand within this io_service.
+ *
+ * @param function The coroutine function. The function must have the signature:
+ * @code void function(yield_context yield); @endcode
+ *
+ * @param attributes Boost.Coroutine attributes used to customise the coroutine.
+ */
+template <typename Function>
+void spawn(boost::asio::io_service& io_service,
+    BOOST_ASIO_MOVE_ARG(Function) function,
+    const boost::coroutines::attributes& attributes
+      = boost::coroutines::attributes());
+
+/*@}*/
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/impl/spawn.hpp>
+
+#endif // BOOST_ASIO_SPAWN_HPP
diff --git a/ext/patches/boost/asio/ssl.hpp b/ext/patches/boost/asio/ssl.hpp
new file mode 100644
index 0000000..9c09a0a
--- /dev/null
+++ b/ext/patches/boost/asio/ssl.hpp
@@ -0,0 +1,30 @@
+//
+// ssl.hpp
+// ~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_HPP
+#define BOOST_ASIO_SSL_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/ssl/basic_context.hpp>
+#include <boost/asio/ssl/context.hpp>
+#include <boost/asio/ssl/context_base.hpp>
+#include <boost/asio/ssl/context_service.hpp>
+#include <boost/asio/ssl/error.hpp>
+#include <boost/asio/ssl/rfc2818_verification.hpp>
+#include <boost/asio/ssl/stream.hpp>
+#include <boost/asio/ssl/stream_base.hpp>
+#include <boost/asio/ssl/stream_service.hpp>
+#include <boost/asio/ssl/verify_context.hpp>
+#include <boost/asio/ssl/verify_mode.hpp>
+
+#endif // BOOST_ASIO_SSL_HPP
diff --git a/ext/patches/boost/asio/ssl/basic_context.hpp b/ext/patches/boost/asio/ssl/basic_context.hpp
new file mode 100644
index 0000000..7f58e53
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/basic_context.hpp
@@ -0,0 +1,42 @@
+//
+// ssl/basic_context.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_BASIC_CONTEXT_HPP
+#define BOOST_ASIO_SSL_BASIC_CONTEXT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <boost/asio/ssl/old/basic_context.hpp>
+#endif // defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+
+#if defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+using boost::asio::ssl::old::basic_context;
+
+#endif // defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_BASIC_CONTEXT_HPP
diff --git a/ext/patches/boost/asio/ssl/context.hpp b/ext/patches/boost/asio/ssl/context.hpp
new file mode 100644
index 0000000..4390c00
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/context.hpp
@@ -0,0 +1,789 @@
+//
+// ssl/context.hpp
+// ~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_CONTEXT_HPP
+#define BOOST_ASIO_SSL_CONTEXT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <boost/asio/ssl/basic_context.hpp>
+# include <boost/asio/ssl/context_service.hpp>
+#else // defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <string>
+# include <boost/asio/buffer.hpp>
+# include <boost/asio/io_service.hpp>
+# include <boost/asio/ssl/context_base.hpp>
+# include <boost/asio/ssl/detail/openssl_types.hpp>
+# include <boost/asio/ssl/detail/openssl_init.hpp>
+# include <boost/asio/ssl/detail/password_callback.hpp>
+# include <boost/asio/ssl/detail/verify_callback.hpp>
+# include <boost/asio/ssl/verify_mode.hpp>
+#endif // defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+
+#if defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+/// Typedef for the typical usage of context.
+typedef basic_context<context_service> context;
+
+#else // defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+class context
+  : public context_base,
+    private noncopyable
+{
+public:
+  /// The native handle type of the SSL context.
+  typedef SSL_CTX* native_handle_type;
+
+  /// (Deprecated: Use native_handle_type.) The native type of the SSL context.
+  typedef SSL_CTX* impl_type;
+
+  /// Constructor.
+  BOOST_ASIO_DECL explicit context(method m);
+
+  /// Deprecated constructor taking a reference to an io_service object.
+  BOOST_ASIO_DECL context(boost::asio::io_service&, method m);
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a context from another.
+  /**
+   * This constructor moves an SSL context from one object to another.
+   *
+   * @param other The other context object from which the move will occur.
+   *
+   * @note Following the move, the following operations only are valid for the
+   * moved-from object:
+   * @li Destruction.
+   * @li As a target for move-assignment.
+   */
+  BOOST_ASIO_DECL context(context&& other);
+
+  /// Move-assign a context from another.
+  /**
+   * This assignment operator moves an SSL context from one object to another.
+   *
+   * @param other The other context object from which the move will occur.
+   *
+   * @note Following the move, the following operations only are valid for the
+   * moved-from object:
+   * @li Destruction.
+   * @li As a target for move-assignment.
+   */
+  BOOST_ASIO_DECL context& operator=(context&& other);
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Destructor.
+  BOOST_ASIO_DECL ~context();
+
+  /// Get the underlying implementation in the native type.
+  /**
+   * This function may be used to obtain the underlying implementation of the
+   * context. This is intended to allow access to context functionality that is
+   * not otherwise provided.
+   */
+  BOOST_ASIO_DECL native_handle_type native_handle();
+
+  /// (Deprecated: Use native_handle().) Get the underlying implementation in
+  /// the native type.
+  /**
+   * This function may be used to obtain the underlying implementation of the
+   * context. This is intended to allow access to context functionality that is
+   * not otherwise provided.
+   */
+  BOOST_ASIO_DECL impl_type impl();
+
+  /// Clear options on the context.
+  /**
+   * This function may be used to configure the SSL options used by the context.
+   *
+   * @param o A bitmask of options. The available option values are defined in
+   * the context_base class. The specified options, if currently enabled on the
+   * context, are cleared.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_clear_options.
+   */
+  BOOST_ASIO_DECL void clear_options(options o);
+
+  /// Clear options on the context.
+  /**
+   * This function may be used to configure the SSL options used by the context.
+   *
+   * @param o A bitmask of options. The available option values are defined in
+   * the context_base class. The specified options, if currently enabled on the
+   * context, are cleared.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_clear_options.
+   */
+  BOOST_ASIO_DECL boost::system::error_code clear_options(options o,
+      boost::system::error_code& ec);
+
+  /// Set options on the context.
+  /**
+   * This function may be used to configure the SSL options used by the context.
+   *
+   * @param o A bitmask of options. The available option values are defined in
+   * the context_base class. The options are bitwise-ored with any existing
+   * value for the options.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_set_options.
+   */
+  BOOST_ASIO_DECL void set_options(options o);
+
+  /// Set options on the context.
+  /**
+   * This function may be used to configure the SSL options used by the context.
+   *
+   * @param o A bitmask of options. The available option values are defined in
+   * the context_base class. The options are bitwise-ored with any existing
+   * value for the options.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_set_options.
+   */
+  BOOST_ASIO_DECL boost::system::error_code set_options(options o,
+      boost::system::error_code& ec);
+
+  /// Set the peer verification mode.
+  /**
+   * This function may be used to configure the peer verification mode used by
+   * the context.
+   *
+   * @param v A bitmask of peer verification modes. See @ref verify_mode for
+   * available values.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_set_verify.
+   */
+  BOOST_ASIO_DECL void set_verify_mode(verify_mode v);
+
+  /// Set the peer verification mode.
+  /**
+   * This function may be used to configure the peer verification mode used by
+   * the context.
+   *
+   * @param v A bitmask of peer verification modes. See @ref verify_mode for
+   * available values.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_set_verify.
+   */
+  BOOST_ASIO_DECL boost::system::error_code set_verify_mode(
+      verify_mode v, boost::system::error_code& ec);
+
+  /// Set the peer verification depth.
+  /**
+   * This function may be used to configure the maximum verification depth
+   * allowed by the context.
+   *
+   * @param depth Maximum depth for the certificate chain verification that
+   * shall be allowed.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_set_verify_depth.
+   */
+  BOOST_ASIO_DECL void set_verify_depth(int depth);
+
+  /// Set the peer verification depth.
+  /**
+   * This function may be used to configure the maximum verification depth
+   * allowed by the context.
+   *
+   * @param depth Maximum depth for the certificate chain verification that
+   * shall be allowed.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_set_verify_depth.
+   */
+  BOOST_ASIO_DECL boost::system::error_code set_verify_depth(
+      int depth, boost::system::error_code& ec);
+
+  /// Set the callback used to verify peer certificates.
+  /**
+   * This function is used to specify a callback function that will be called
+   * by the implementation when it needs to verify a peer certificate.
+   *
+   * @param callback The function object to be used for verifying a certificate.
+   * The function signature of the handler must be:
+   * @code bool verify_callback(
+   *   bool preverified, // True if the certificate passed pre-verification.
+   *   verify_context& ctx // The peer certificate and other context.
+   * ); @endcode
+   * The return value of the callback is true if the certificate has passed
+   * verification, false otherwise.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_set_verify.
+   */
+  template <typename VerifyCallback>
+  void set_verify_callback(VerifyCallback callback);
+
+  /// Set the callback used to verify peer certificates.
+  /**
+   * This function is used to specify a callback function that will be called
+   * by the implementation when it needs to verify a peer certificate.
+   *
+   * @param callback The function object to be used for verifying a certificate.
+   * The function signature of the handler must be:
+   * @code bool verify_callback(
+   *   bool preverified, // True if the certificate passed pre-verification.
+   *   verify_context& ctx // The peer certificate and other context.
+   * ); @endcode
+   * The return value of the callback is true if the certificate has passed
+   * verification, false otherwise.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_set_verify.
+   */
+  template <typename VerifyCallback>
+  boost::system::error_code set_verify_callback(VerifyCallback callback,
+      boost::system::error_code& ec);
+
+  /// Load a certification authority file for performing verification.
+  /**
+   * This function is used to load one or more trusted certification authorities
+   * from a file.
+   *
+   * @param filename The name of a file containing certification authority
+   * certificates in PEM format.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_load_verify_locations.
+   */
+  BOOST_ASIO_DECL void load_verify_file(const std::string& filename);
+
+  /// Load a certification authority file for performing verification.
+  /**
+   * This function is used to load the certificates for one or more trusted
+   * certification authorities from a file.
+   *
+   * @param filename The name of a file containing certification authority
+   * certificates in PEM format.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_load_verify_locations.
+   */
+  BOOST_ASIO_DECL boost::system::error_code load_verify_file(
+      const std::string& filename, boost::system::error_code& ec);
+
+  /// Add certification authority for performing verification.
+  /**
+   * This function is used to add one trusted certification authority
+   * from a memory buffer.
+   *
+   * @param ca The buffer containing the certification authority certificate.
+   * The certificate must use the PEM format.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_get_cert_store and @c X509_STORE_add_cert.
+   */
+  BOOST_ASIO_DECL void add_certificate_authority(const const_buffer& ca);
+
+  /// Add certification authority for performing verification.
+  /**
+   * This function is used to add one trusted certification authority
+   * from a memory buffer.
+   *
+   * @param ca The buffer containing the certification authority certificate.
+   * The certificate must use the PEM format.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_get_cert_store and @c X509_STORE_add_cert.
+   */
+  BOOST_ASIO_DECL boost::system::error_code add_certificate_authority(
+      const const_buffer& ca, boost::system::error_code& ec);
+
+  /// Configures the context to use the default directories for finding
+  /// certification authority certificates.
+  /**
+   * This function specifies that the context should use the default,
+   * system-dependent directories for locating certification authority
+   * certificates.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_set_default_verify_paths.
+   */
+  BOOST_ASIO_DECL void set_default_verify_paths();
+
+  /// Configures the context to use the default directories for finding
+  /// certification authority certificates.
+  /**
+   * This function specifies that the context should use the default,
+   * system-dependent directories for locating certification authority
+   * certificates.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_set_default_verify_paths.
+   */
+  BOOST_ASIO_DECL boost::system::error_code set_default_verify_paths(
+      boost::system::error_code& ec);
+
+  /// Add a directory containing certificate authority files to be used for
+  /// performing verification.
+  /**
+   * This function is used to specify the name of a directory containing
+   * certification authority certificates. Each file in the directory must
+   * contain a single certificate. The files must be named using the subject
+   * name's hash and an extension of ".0".
+   *
+   * @param path The name of a directory containing the certificates.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_load_verify_locations.
+   */
+  BOOST_ASIO_DECL void add_verify_path(const std::string& path);
+
+  /// Add a directory containing certificate authority files to be used for
+  /// performing verification.
+  /**
+   * This function is used to specify the name of a directory containing
+   * certification authority certificates. Each file in the directory must
+   * contain a single certificate. The files must be named using the subject
+   * name's hash and an extension of ".0".
+   *
+   * @param path The name of a directory containing the certificates.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_load_verify_locations.
+   */
+  BOOST_ASIO_DECL boost::system::error_code add_verify_path(
+      const std::string& path, boost::system::error_code& ec);
+
+  /// Use a certificate from a memory buffer.
+  /**
+   * This function is used to load a certificate into the context from a buffer.
+   *
+   * @param certificate The buffer containing the certificate.
+   *
+   * @param format The certificate format (ASN.1 or PEM).
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_use_certificate or SSL_CTX_use_certificate_ASN1.
+   */
+  BOOST_ASIO_DECL void use_certificate(
+      const const_buffer& certificate, file_format format);
+
+  /// Use a certificate from a memory buffer.
+  /**
+   * This function is used to load a certificate into the context from a buffer.
+   *
+   * @param certificate The buffer containing the certificate.
+   *
+   * @param format The certificate format (ASN.1 or PEM).
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_use_certificate or SSL_CTX_use_certificate_ASN1.
+   */
+  BOOST_ASIO_DECL boost::system::error_code use_certificate(
+      const const_buffer& certificate, file_format format,
+      boost::system::error_code& ec);
+
+  /// Use a certificate from a file.
+  /**
+   * This function is used to load a certificate into the context from a file.
+   *
+   * @param filename The name of the file containing the certificate.
+   *
+   * @param format The file format (ASN.1 or PEM).
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_use_certificate_file.
+   */
+  BOOST_ASIO_DECL void use_certificate_file(
+      const std::string& filename, file_format format);
+
+  /// Use a certificate from a file.
+  /**
+   * This function is used to load a certificate into the context from a file.
+   *
+   * @param filename The name of the file containing the certificate.
+   *
+   * @param format The file format (ASN.1 or PEM).
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_use_certificate_file.
+   */
+  BOOST_ASIO_DECL boost::system::error_code use_certificate_file(
+      const std::string& filename, file_format format,
+      boost::system::error_code& ec);
+
+  /// Use a certificate chain from a memory buffer.
+  /**
+   * This function is used to load a certificate chain into the context from a
+   * buffer.
+   *
+   * @param chain The buffer containing the certificate chain. The certificate
+   * chain must use the PEM format.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_use_certificate and SSL_CTX_add_extra_chain_cert.
+   */
+  BOOST_ASIO_DECL void use_certificate_chain(const const_buffer& chain);
+
+  /// Use a certificate chain from a memory buffer.
+  /**
+   * This function is used to load a certificate chain into the context from a
+   * buffer.
+   *
+   * @param chain The buffer containing the certificate chain. The certificate
+   * chain must use the PEM format.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_use_certificate and SSL_CTX_add_extra_chain_cert.
+   */
+  BOOST_ASIO_DECL boost::system::error_code use_certificate_chain(
+      const const_buffer& chain, boost::system::error_code& ec);
+
+  /// Use a certificate chain from a file.
+  /**
+   * This function is used to load a certificate chain into the context from a
+   * file.
+   *
+   * @param filename The name of the file containing the certificate. The file
+   * must use the PEM format.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_use_certificate_chain_file.
+   */
+  BOOST_ASIO_DECL void use_certificate_chain_file(const std::string& filename);
+
+  /// Use a certificate chain from a file.
+  /**
+   * This function is used to load a certificate chain into the context from a
+   * file.
+   *
+   * @param filename The name of the file containing the certificate. The file
+   * must use the PEM format.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_use_certificate_chain_file.
+   */
+  BOOST_ASIO_DECL boost::system::error_code use_certificate_chain_file(
+      const std::string& filename, boost::system::error_code& ec);
+
+  /// Use a private key from a memory buffer.
+  /**
+   * This function is used to load a private key into the context from a buffer.
+   *
+   * @param private_key The buffer containing the private key.
+   *
+   * @param format The private key format (ASN.1 or PEM).
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_use_PrivateKey or SSL_CTX_use_PrivateKey_ASN1.
+   */
+  BOOST_ASIO_DECL void use_private_key(
+      const const_buffer& private_key, file_format format);
+
+  /// Use a private key from a memory buffer.
+  /**
+   * This function is used to load a private key into the context from a buffer.
+   *
+   * @param private_key The buffer containing the private key.
+   *
+   * @param format The private key format (ASN.1 or PEM).
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_use_PrivateKey or SSL_CTX_use_PrivateKey_ASN1.
+   */
+  BOOST_ASIO_DECL boost::system::error_code use_private_key(
+      const const_buffer& private_key, file_format format,
+      boost::system::error_code& ec);
+
+  /// Use a private key from a file.
+  /**
+   * This function is used to load a private key into the context from a file.
+   *
+   * @param filename The name of the file containing the private key.
+   *
+   * @param format The file format (ASN.1 or PEM).
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_use_PrivateKey_file.
+   */
+  BOOST_ASIO_DECL void use_private_key_file(
+      const std::string& filename, file_format format);
+
+  /// Use a private key from a file.
+  /**
+   * This function is used to load a private key into the context from a file.
+   *
+   * @param filename The name of the file containing the private key.
+   *
+   * @param format The file format (ASN.1 or PEM).
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_use_PrivateKey_file.
+   */
+  BOOST_ASIO_DECL boost::system::error_code use_private_key_file(
+      const std::string& filename, file_format format,
+      boost::system::error_code& ec);
+
+  /// Use an RSA private key from a memory buffer.
+  /**
+   * This function is used to load an RSA private key into the context from a
+   * buffer.
+   *
+   * @param private_key The buffer containing the RSA private key.
+   *
+   * @param format The private key format (ASN.1 or PEM).
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_use_RSAPrivateKey or SSL_CTX_use_RSAPrivateKey_ASN1.
+   */
+  BOOST_ASIO_DECL void use_rsa_private_key(
+      const const_buffer& private_key, file_format format);
+
+  /// Use an RSA private key from a memory buffer.
+  /**
+   * This function is used to load an RSA private key into the context from a
+   * buffer.
+   *
+   * @param private_key The buffer containing the RSA private key.
+   *
+   * @param format The private key format (ASN.1 or PEM).
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_use_RSAPrivateKey or SSL_CTX_use_RSAPrivateKey_ASN1.
+   */
+  BOOST_ASIO_DECL boost::system::error_code use_rsa_private_key(
+      const const_buffer& private_key, file_format format,
+      boost::system::error_code& ec);
+
+  /// Use an RSA private key from a file.
+  /**
+   * This function is used to load an RSA private key into the context from a
+   * file.
+   *
+   * @param filename The name of the file containing the RSA private key.
+   *
+   * @param format The file format (ASN.1 or PEM).
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_use_RSAPrivateKey_file.
+   */
+  BOOST_ASIO_DECL void use_rsa_private_key_file(
+      const std::string& filename, file_format format);
+
+  /// Use an RSA private key from a file.
+  /**
+   * This function is used to load an RSA private key into the context from a
+   * file.
+   *
+   * @param filename The name of the file containing the RSA private key.
+   *
+   * @param format The file format (ASN.1 or PEM).
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_use_RSAPrivateKey_file.
+   */
+  BOOST_ASIO_DECL boost::system::error_code use_rsa_private_key_file(
+      const std::string& filename, file_format format,
+      boost::system::error_code& ec);
+
+  /// Use the specified memory buffer to obtain the temporary Diffie-Hellman
+  /// parameters.
+  /**
+   * This function is used to load Diffie-Hellman parameters into the context
+   * from a buffer.
+   *
+   * @param dh The memory buffer containing the Diffie-Hellman parameters. The
+   * buffer must use the PEM format.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_set_tmp_dh.
+   */
+  BOOST_ASIO_DECL void use_tmp_dh(const const_buffer& dh);
+
+  /// Use the specified memory buffer to obtain the temporary Diffie-Hellman
+  /// parameters.
+  /**
+   * This function is used to load Diffie-Hellman parameters into the context
+   * from a buffer.
+   *
+   * @param dh The memory buffer containing the Diffie-Hellman parameters. The
+   * buffer must use the PEM format.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_set_tmp_dh.
+   */
+  BOOST_ASIO_DECL boost::system::error_code use_tmp_dh(
+      const const_buffer& dh, boost::system::error_code& ec);
+
+  /// Use the specified file to obtain the temporary Diffie-Hellman parameters.
+  /**
+   * This function is used to load Diffie-Hellman parameters into the context
+   * from a file.
+   *
+   * @param filename The name of the file containing the Diffie-Hellman
+   * parameters. The file must use the PEM format.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_set_tmp_dh.
+   */
+  BOOST_ASIO_DECL void use_tmp_dh_file(const std::string& filename);
+
+  /// Use the specified file to obtain the temporary Diffie-Hellman parameters.
+  /**
+   * This function is used to load Diffie-Hellman parameters into the context
+   * from a file.
+   *
+   * @param filename The name of the file containing the Diffie-Hellman
+   * parameters. The file must use the PEM format.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_set_tmp_dh.
+   */
+  BOOST_ASIO_DECL boost::system::error_code use_tmp_dh_file(
+      const std::string& filename, boost::system::error_code& ec);
+
+  /// Set the password callback.
+  /**
+   * This function is used to specify a callback function to obtain password
+   * information about an encrypted key in PEM format.
+   *
+   * @param callback The function object to be used for obtaining the password.
+   * The function signature of the handler must be:
+   * @code std::string password_callback(
+   *   std::size_t max_length,  // The maximum size for a password.
+   *   password_purpose purpose // Whether password is for reading or writing.
+   * ); @endcode
+   * The return value of the callback is a string containing the password.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_CTX_set_default_passwd_cb.
+   */
+  template <typename PasswordCallback>
+  void set_password_callback(PasswordCallback callback);
+
+  /// Set the password callback.
+  /**
+   * This function is used to specify a callback function to obtain password
+   * information about an encrypted key in PEM format.
+   *
+   * @param callback The function object to be used for obtaining the password.
+   * The function signature of the handler must be:
+   * @code std::string password_callback(
+   *   std::size_t max_length,  // The maximum size for a password.
+   *   password_purpose purpose // Whether password is for reading or writing.
+   * ); @endcode
+   * The return value of the callback is a string containing the password.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_CTX_set_default_passwd_cb.
+   */
+  template <typename PasswordCallback>
+  boost::system::error_code set_password_callback(PasswordCallback callback,
+      boost::system::error_code& ec);
+
+private:
+  struct bio_cleanup;
+  struct x509_cleanup;
+  struct evp_pkey_cleanup;
+  struct rsa_cleanup;
+  struct dh_cleanup;
+
+  // Helper function used to set a peer certificate verification callback.
+  BOOST_ASIO_DECL boost::system::error_code do_set_verify_callback(
+      detail::verify_callback_base* callback, boost::system::error_code& ec);
+
+  // Callback used when the SSL implementation wants to verify a certificate.
+  BOOST_ASIO_DECL static int verify_callback_function(
+      int preverified, X509_STORE_CTX* ctx);
+
+  // Helper function used to set a password callback.
+  BOOST_ASIO_DECL boost::system::error_code do_set_password_callback(
+      detail::password_callback_base* callback, boost::system::error_code& ec);
+
+  // Callback used when the SSL implementation wants a password.
+  BOOST_ASIO_DECL static int password_callback_function(
+      char* buf, int size, int purpose, void* data);
+
+  // Helper function to set the temporary Diffie-Hellman parameters from a BIO.
+  BOOST_ASIO_DECL boost::system::error_code do_use_tmp_dh(
+      BIO* bio, boost::system::error_code& ec);
+
+  // Helper function to make a BIO from a memory buffer.
+  BOOST_ASIO_DECL BIO* make_buffer_bio(const const_buffer& b);
+
+  // The underlying native implementation.
+  native_handle_type handle_;
+
+  // Ensure openssl is initialised.
+  boost::asio::ssl::detail::openssl_init<> init_;
+};
+
+#endif // defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/ssl/impl/context.hpp>
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/ssl/impl/context.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_SSL_CONTEXT_HPP
diff --git a/ext/patches/boost/asio/ssl/context_base.hpp b/ext/patches/boost/asio/ssl/context_base.hpp
new file mode 100644
index 0000000..6c0d03a
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/context_base.hpp
@@ -0,0 +1,169 @@
+//
+// ssl/context_base.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_CONTEXT_BASE_HPP
+#define BOOST_ASIO_SSL_CONTEXT_BASE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/ssl/detail/openssl_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+
+/// The context_base class is used as a base for the basic_context class
+/// template so that we have a common place to define various enums.
+class context_base
+{
+public:
+  /// Different methods supported by a context.
+  enum method
+  {
+    /// Generic SSL version 2.
+    sslv2,
+
+    /// SSL version 2 client.
+    sslv2_client,
+
+    /// SSL version 2 server.
+    sslv2_server,
+
+    /// Generic SSL version 3.
+    sslv3,
+
+    /// SSL version 3 client.
+    sslv3_client,
+
+    /// SSL version 3 server.
+    sslv3_server,
+
+    /// Generic TLS version 1.
+    tlsv1,
+
+    /// TLS version 1 client.
+    tlsv1_client,
+
+    /// TLS version 1 server.
+    tlsv1_server,
+
+    /// Generic SSL/TLS.
+    sslv23,
+
+    /// SSL/TLS client.
+    sslv23_client,
+
+    /// SSL/TLS server.
+    sslv23_server,
+
+    /// Generic TLS version 1.1.
+    tlsv11,
+
+    /// TLS version 1.1 client.
+    tlsv11_client,
+
+    /// TLS version 1.1 server.
+    tlsv11_server,
+
+    /// Generic TLS version 1.2.
+    tlsv12,
+
+    /// TLS version 1.2 client.
+    tlsv12_client,
+
+    /// TLS version 1.2 server.
+    tlsv12_server
+  };
+
+  /// Bitmask type for SSL options.
+  typedef long options;
+
+#if defined(GENERATING_DOCUMENTATION)
+  /// Implement various bug workarounds.
+  static const long default_workarounds = implementation_defined;
+
+  /// Always create a new key when using tmp_dh parameters.
+  static const long single_dh_use = implementation_defined;
+
+  /// Disable SSL v2.
+  static const long no_sslv2 = implementation_defined;
+
+  /// Disable SSL v3.
+  static const long no_sslv3 = implementation_defined;
+
+  /// Disable TLS v1.
+  static const long no_tlsv1 = implementation_defined;
+
+  /// Disable compression. Compression is disabled by default.
+  static const long no_compression = implementation_defined;
+#else
+  BOOST_ASIO_STATIC_CONSTANT(long, default_workarounds = SSL_OP_ALL);
+  BOOST_ASIO_STATIC_CONSTANT(long, single_dh_use = SSL_OP_SINGLE_DH_USE);
+  BOOST_ASIO_STATIC_CONSTANT(long, no_sslv2 = SSL_OP_NO_SSLv2);
+  BOOST_ASIO_STATIC_CONSTANT(long, no_sslv3 = SSL_OP_NO_SSLv3);
+  BOOST_ASIO_STATIC_CONSTANT(long, no_tlsv1 = SSL_OP_NO_TLSv1);
+# if defined(SSL_OP_NO_COMPRESSION)
+  BOOST_ASIO_STATIC_CONSTANT(long, no_compression = SSL_OP_NO_COMPRESSION);
+# else // defined(SSL_OP_NO_COMPRESSION)
+  BOOST_ASIO_STATIC_CONSTANT(long, no_compression = 0x20000L);
+# endif // defined(SSL_OP_NO_COMPRESSION)
+#endif
+
+  /// File format types.
+  enum file_format
+  {
+    /// ASN.1 file.
+    asn1,
+
+    /// PEM file.
+    pem
+  };
+
+#if !defined(GENERATING_DOCUMENTATION)
+  // The following types and constants are preserved for backward compatibility.
+  // New programs should use the equivalents of the same names that are defined
+  // in the boost::asio::ssl namespace.
+  typedef int verify_mode;
+  BOOST_ASIO_STATIC_CONSTANT(int, verify_none = SSL_VERIFY_NONE);
+  BOOST_ASIO_STATIC_CONSTANT(int, verify_peer = SSL_VERIFY_PEER);
+  BOOST_ASIO_STATIC_CONSTANT(int,
+      verify_fail_if_no_peer_cert = SSL_VERIFY_FAIL_IF_NO_PEER_CERT);
+  BOOST_ASIO_STATIC_CONSTANT(int, verify_client_once = SSL_VERIFY_CLIENT_ONCE);
+#endif
+
+  /// Purpose of PEM password.
+  enum password_purpose
+  {
+    /// The password is needed for reading/decryption.
+    for_reading,
+
+    /// The password is needed for writing/encryption.
+    for_writing
+  };
+
+protected:
+  /// Protected destructor to prevent deletion through this type.
+  ~context_base()
+  {
+  }
+};
+
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_CONTEXT_BASE_HPP
diff --git a/ext/patches/boost/asio/ssl/context_service.hpp b/ext/patches/boost/asio/ssl/context_service.hpp
new file mode 100644
index 0000000..0df119c
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/context_service.hpp
@@ -0,0 +1,42 @@
+//
+// ssl/context_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_CONTEXT_SERVICE_HPP
+#define BOOST_ASIO_SSL_CONTEXT_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+  
+#if defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <boost/asio/ssl/old/context_service.hpp>
+#endif // defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+
+#if defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+using boost::asio::ssl::old::context_service;
+
+#endif // defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_CONTEXT_SERVICE_HPP
diff --git a/ext/patches/boost/asio/ssl/detail/buffered_handshake_op.hpp b/ext/patches/boost/asio/ssl/detail/buffered_handshake_op.hpp
new file mode 100644
index 0000000..ce98311
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/detail/buffered_handshake_op.hpp
@@ -0,0 +1,112 @@
+//
+// ssl/detail/buffered_handshake_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_DETAIL_BUFFERED_HANDSHAKE_OP_HPP
+#define BOOST_ASIO_SSL_DETAIL_BUFFERED_HANDSHAKE_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <boost/asio/ssl/detail/engine.hpp>
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace detail {
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+template <typename ConstBufferSequence>
+class buffered_handshake_op
+{
+public:
+  buffered_handshake_op(stream_base::handshake_type type,
+      const ConstBufferSequence& buffers)
+    : type_(type),
+      buffers_(buffers),
+      total_buffer_size_(boost::asio::buffer_size(buffers_))
+  {
+  }
+
+  engine::want operator()(engine& eng,
+      boost::system::error_code& ec,
+      std::size_t& bytes_transferred) const
+  {
+    typename ConstBufferSequence::const_iterator iter = buffers_.begin();
+    typename ConstBufferSequence::const_iterator end = buffers_.end();
+    std::size_t accumulated_size = 0;
+
+    for (;;)
+    {
+      engine::want want = eng.handshake(type_, ec);
+      if (want != engine::want_input_and_retry
+          || bytes_transferred == total_buffer_size_)
+        return want;
+
+      // Find the next buffer piece to be fed to the engine.
+      while (iter != end)
+      {
+        const_buffer buffer(*iter);
+
+        // Skip over any buffers which have already been consumed by the engine.
+        if (bytes_transferred >= accumulated_size + buffer_size(buffer))
+        {
+          accumulated_size += buffer_size(buffer);
+          ++iter;
+          continue;
+        }
+
+        // The current buffer may have been partially consumed by the engine on
+        // a previous iteration. If so, adjust the buffer to point to the
+        // unused portion.
+        if (bytes_transferred > accumulated_size)
+          buffer = buffer + (bytes_transferred - accumulated_size);
+
+        // Pass the buffer to the engine, and update the bytes transferred to
+        // reflect the total number of bytes consumed so far.
+        bytes_transferred += buffer_size(buffer);
+        buffer = eng.put_input(buffer);
+        bytes_transferred -= buffer_size(buffer);
+        break;
+      }
+    }
+  }
+
+  template <typename Handler>
+  void call_handler(Handler& handler,
+      const boost::system::error_code& ec,
+      const std::size_t& bytes_transferred) const
+  {
+    handler(ec, bytes_transferred);
+  }
+
+private:
+  stream_base::handshake_type type_;
+  ConstBufferSequence buffers_;
+  std::size_t total_buffer_size_;
+};
+
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace detail
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_DETAIL_BUFFERED_HANDSHAKE_OP_HPP
diff --git a/ext/patches/boost/asio/ssl/detail/engine.hpp b/ext/patches/boost/asio/ssl/detail/engine.hpp
new file mode 100644
index 0000000..6964d3d
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/detail/engine.hpp
@@ -0,0 +1,166 @@
+//
+// ssl/detail/engine.hpp
+// ~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_DETAIL_ENGINE_HPP
+#define BOOST_ASIO_SSL_DETAIL_ENGINE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <boost/asio/buffer.hpp>
+# include <boost/asio/detail/static_mutex.hpp>
+# include <boost/asio/ssl/detail/openssl_types.hpp>
+# include <boost/asio/ssl/detail/verify_callback.hpp>
+# include <boost/asio/ssl/stream_base.hpp>
+# include <boost/asio/ssl/verify_mode.hpp>
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace detail {
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+class engine
+{
+public:
+  enum want
+  {
+    // Returned by functions to indicate that the engine wants input. The input
+    // buffer should be updated to point to the data. The engine then needs to
+    // be called again to retry the operation.
+    want_input_and_retry = -2,
+
+    // Returned by functions to indicate that the engine wants to write output.
+    // The output buffer points to the data to be written. The engine then
+    // needs to be called again to retry the operation.
+    want_output_and_retry = -1,
+
+    // Returned by functions to indicate that the engine doesn't need input or
+    // output.
+    want_nothing = 0,
+
+    // Returned by functions to indicate that the engine wants to write output.
+    // The output buffer points to the data to be written. After that the
+    // operation is complete, and the engine does not need to be called again.
+    want_output = 1
+  };
+
+  // Construct a new engine for the specified context.
+  BOOST_ASIO_DECL explicit engine(SSL_CTX* context);
+
+  // Destructor.
+  BOOST_ASIO_DECL ~engine();
+
+  // Get the underlying implementation in the native type.
+  BOOST_ASIO_DECL SSL* native_handle();
+
+  // Set the peer verification mode.
+  BOOST_ASIO_DECL boost::system::error_code set_verify_mode(
+      verify_mode v, boost::system::error_code& ec);
+
+  // Set the peer verification depth.
+  BOOST_ASIO_DECL boost::system::error_code set_verify_depth(
+      int depth, boost::system::error_code& ec);
+
+  // Set a peer certificate verification callback.
+  BOOST_ASIO_DECL boost::system::error_code set_verify_callback(
+      verify_callback_base* callback, boost::system::error_code& ec);
+
+  // Perform an SSL handshake using either SSL_connect (client-side) or
+  // SSL_accept (server-side).
+  BOOST_ASIO_DECL want handshake(
+      stream_base::handshake_type type, boost::system::error_code& ec);
+
+  // Perform a graceful shutdown of the SSL session.
+  BOOST_ASIO_DECL want shutdown(boost::system::error_code& ec);
+
+  // Write bytes to the SSL session.
+  BOOST_ASIO_DECL want write(const boost::asio::const_buffer& data,
+      boost::system::error_code& ec, std::size_t& bytes_transferred);
+
+  // Read bytes from the SSL session.
+  BOOST_ASIO_DECL want read(const boost::asio::mutable_buffer& data,
+      boost::system::error_code& ec, std::size_t& bytes_transferred);
+
+  // Get output data to be written to the transport.
+  BOOST_ASIO_DECL boost::asio::mutable_buffers_1 get_output(
+      const boost::asio::mutable_buffer& data);
+
+  // Put input data that was read from the transport.
+  BOOST_ASIO_DECL boost::asio::const_buffer put_input(
+      const boost::asio::const_buffer& data);
+
+  // Map an error::eof code returned by the underlying transport according to
+  // the type and state of the SSL session. Returns a const reference to the
+  // error code object, suitable for passing to a completion handler.
+  BOOST_ASIO_DECL const boost::system::error_code& map_error_code(
+      boost::system::error_code& ec) const;
+
+private:
+  // Disallow copying and assignment.
+  engine(const engine&);
+  engine& operator=(const engine&);
+
+  // Callback used when the SSL implementation wants to verify a certificate.
+  BOOST_ASIO_DECL static int verify_callback_function(
+      int preverified, X509_STORE_CTX* ctx);
+
+  // The SSL_accept function may not be thread safe. This mutex is used to
+  // protect all calls to the SSL_accept function.
+  BOOST_ASIO_DECL static boost::asio::detail::static_mutex& accept_mutex();
+
+  // Perform one operation. Returns >= 0 on success or error, want_read if the
+  // operation needs more input, or want_write if it needs to write some output
+  // before the operation can complete.
+  BOOST_ASIO_DECL want perform(int (engine::* op)(void*, std::size_t),
+      void* data, std::size_t length, boost::system::error_code& ec,
+      std::size_t* bytes_transferred);
+
+  // Adapt the SSL_accept function to the signature needed for perform().
+  BOOST_ASIO_DECL int do_accept(void*, std::size_t);
+
+  // Adapt the SSL_connect function to the signature needed for perform().
+  BOOST_ASIO_DECL int do_connect(void*, std::size_t);
+
+  // Adapt the SSL_shutdown function to the signature needed for perform().
+  BOOST_ASIO_DECL int do_shutdown(void*, std::size_t);
+
+  // Adapt the SSL_read function to the signature needed for perform().
+  BOOST_ASIO_DECL int do_read(void* data, std::size_t length);
+
+  // Adapt the SSL_write function to the signature needed for perform().
+  BOOST_ASIO_DECL int do_write(void* data, std::size_t length);
+
+  SSL* ssl_;
+  BIO* ext_bio_;
+};
+
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace detail
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/ssl/detail/impl/engine.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_SSL_DETAIL_ENGINE_HPP
diff --git a/ext/patches/boost/asio/ssl/detail/handshake_op.hpp b/ext/patches/boost/asio/ssl/detail/handshake_op.hpp
new file mode 100644
index 0000000..a962f42
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/detail/handshake_op.hpp
@@ -0,0 +1,70 @@
+//
+// ssl/detail/handshake_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_DETAIL_HANDSHAKE_OP_HPP
+#define BOOST_ASIO_SSL_DETAIL_HANDSHAKE_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <boost/asio/ssl/detail/engine.hpp>
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace detail {
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+class handshake_op
+{
+public:
+  handshake_op(stream_base::handshake_type type)
+    : type_(type)
+  {
+  }
+
+  engine::want operator()(engine& eng,
+      boost::system::error_code& ec,
+      std::size_t& bytes_transferred) const
+  {
+    bytes_transferred = 0;
+    return eng.handshake(type_, ec);
+  }
+
+  template <typename Handler>
+  void call_handler(Handler& handler,
+      const boost::system::error_code& ec,
+      const std::size_t&) const
+  {
+    handler(ec);
+  }
+
+private:
+  stream_base::handshake_type type_;
+};
+
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace detail
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_DETAIL_HANDSHAKE_OP_HPP
diff --git a/ext/patches/boost/asio/ssl/detail/impl/engine.ipp b/ext/patches/boost/asio/ssl/detail/impl/engine.ipp
new file mode 100644
index 0000000..8587a66
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/detail/impl/engine.ipp
@@ -0,0 +1,328 @@
+//
+// ssl/detail/impl/engine.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_DETAIL_IMPL_ENGINE_IPP
+#define BOOST_ASIO_SSL_DETAIL_IMPL_ENGINE_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <boost/asio/detail/throw_error.hpp>
+# include <boost/asio/error.hpp>
+# include <boost/asio/ssl/detail/engine.hpp>
+# include <boost/asio/ssl/error.hpp>
+# include <boost/asio/ssl/verify_context.hpp>
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace detail {
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+engine::engine(SSL_CTX* context)
+  : ssl_(::SSL_new(context))
+{
+  if (!ssl_)
+  {
+    boost::system::error_code ec(
+        static_cast<int>(::ERR_get_error()),
+        boost::asio::error::get_ssl_category());
+    boost::asio::detail::throw_error(ec, "engine");
+  }
+
+  accept_mutex().init();
+
+  ::SSL_set_mode(ssl_, SSL_MODE_ENABLE_PARTIAL_WRITE);
+  ::SSL_set_mode(ssl_, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);
+#if defined(SSL_MODE_RELEASE_BUFFERS)
+  ::SSL_set_mode(ssl_, SSL_MODE_RELEASE_BUFFERS);
+#endif // defined(SSL_MODE_RELEASE_BUFFERS)
+
+  ::BIO* int_bio = 0;
+  ::BIO_new_bio_pair(&int_bio, 0, &ext_bio_, 0);
+  ::SSL_set_bio(ssl_, int_bio, int_bio);
+}
+
+engine::~engine()
+{
+  if (SSL_get_app_data(ssl_))
+  {
+    delete static_cast<verify_callback_base*>(SSL_get_app_data(ssl_));
+    SSL_set_app_data(ssl_, 0);
+  }
+
+  ::BIO_free(ext_bio_);
+  ::SSL_free(ssl_);
+}
+
+SSL* engine::native_handle()
+{
+  return ssl_;
+}
+
+boost::system::error_code engine::set_verify_mode(
+    verify_mode v, boost::system::error_code& ec)
+{
+  ::SSL_set_verify(ssl_, v, ::SSL_get_verify_callback(ssl_));
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+boost::system::error_code engine::set_verify_depth(
+    int depth, boost::system::error_code& ec)
+{
+  ::SSL_set_verify_depth(ssl_, depth);
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+boost::system::error_code engine::set_verify_callback(
+    verify_callback_base* callback, boost::system::error_code& ec)
+{
+  if (SSL_get_app_data(ssl_))
+    delete static_cast<verify_callback_base*>(SSL_get_app_data(ssl_));
+
+  SSL_set_app_data(ssl_, callback);
+
+  ::SSL_set_verify(ssl_, ::SSL_get_verify_mode(ssl_),
+      &engine::verify_callback_function);
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+int engine::verify_callback_function(int preverified, X509_STORE_CTX* ctx)
+{
+  if (ctx)
+  {
+    if (SSL* ssl = static_cast<SSL*>(
+          ::X509_STORE_CTX_get_ex_data(
+            ctx, ::SSL_get_ex_data_X509_STORE_CTX_idx())))
+    {
+      if (SSL_get_app_data(ssl))
+      {
+        verify_callback_base* callback =
+          static_cast<verify_callback_base*>(
+              SSL_get_app_data(ssl));
+
+        verify_context verify_ctx(ctx);
+        return callback->call(preverified != 0, verify_ctx) ? 1 : 0;
+      }
+    }
+  }
+
+  return 0;
+}
+
+engine::want engine::handshake(
+    stream_base::handshake_type type, boost::system::error_code& ec)
+{
+  return perform((type == boost::asio::ssl::stream_base::client)
+      ? &engine::do_connect : &engine::do_accept, 0, 0, ec, 0);
+}
+
+engine::want engine::shutdown(boost::system::error_code& ec)
+{
+  return perform(&engine::do_shutdown, 0, 0, ec, 0);
+}
+
+engine::want engine::write(const boost::asio::const_buffer& data,
+    boost::system::error_code& ec, std::size_t& bytes_transferred)
+{
+  if (boost::asio::buffer_size(data) == 0)
+  {
+    ec = boost::system::error_code();
+    return engine::want_nothing;
+  }
+
+  return perform(&engine::do_write,
+      const_cast<void*>(boost::asio::buffer_cast<const void*>(data)),
+      boost::asio::buffer_size(data), ec, &bytes_transferred);
+}
+
+engine::want engine::read(const boost::asio::mutable_buffer& data,
+    boost::system::error_code& ec, std::size_t& bytes_transferred)
+{
+  if (boost::asio::buffer_size(data) == 0)
+  {
+    ec = boost::system::error_code();
+    return engine::want_nothing;
+  }
+
+  return perform(&engine::do_read,
+      boost::asio::buffer_cast<void*>(data),
+      boost::asio::buffer_size(data), ec, &bytes_transferred);
+}
+
+boost::asio::mutable_buffers_1 engine::get_output(
+    const boost::asio::mutable_buffer& data)
+{
+  int length = ::BIO_read(ext_bio_,
+      boost::asio::buffer_cast<void*>(data),
+      static_cast<int>(boost::asio::buffer_size(data)));
+
+  return boost::asio::buffer(data,
+      length > 0 ? static_cast<std::size_t>(length) : 0);
+}
+
+boost::asio::const_buffer engine::put_input(
+    const boost::asio::const_buffer& data)
+{
+  int length = ::BIO_write(ext_bio_,
+      boost::asio::buffer_cast<const void*>(data),
+      static_cast<int>(boost::asio::buffer_size(data)));
+
+  return boost::asio::buffer(data +
+      (length > 0 ? static_cast<std::size_t>(length) : 0));
+}
+
+const boost::system::error_code& engine::map_error_code(
+    boost::system::error_code& ec) const
+{
+  // We only want to map the error::eof code.
+  if (ec != boost::asio::error::eof)
+    return ec;
+
+  // If there's data yet to be read, it's an error.
+  if (BIO_wpending(ext_bio_))
+  {
+    ec = boost::system::error_code(
+        ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SHORT_READ),
+        boost::asio::error::get_ssl_category());
+    return ec;
+  }
+
+  // SSL v2 doesn't provide a protocol-level shutdown, so an eof on the
+  // underlying transport is passed through.
+  if (ssl_ && ssl_->version == SSL2_VERSION)
+    return ec;
+
+  // Otherwise, the peer should have negotiated a proper shutdown.
+  if ((::SSL_get_shutdown(ssl_) & SSL_RECEIVED_SHUTDOWN) == 0)
+  {
+    ec = boost::system::error_code(
+        ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SHORT_READ),
+        boost::asio::error::get_ssl_category());
+  }
+
+  return ec;
+}
+
+boost::asio::detail::static_mutex& engine::accept_mutex()
+{
+  static boost::asio::detail::static_mutex mutex = BOOST_ASIO_STATIC_MUTEX_INIT;
+  return mutex;
+}
+
+engine::want engine::perform(int (engine::* op)(void*, std::size_t),
+    void* data, std::size_t length, boost::system::error_code& ec,
+    std::size_t* bytes_transferred)
+{
+  std::size_t pending_output_before = ::BIO_ctrl_pending(ext_bio_);
+  int result = (this->*op)(data, length);
+  int ssl_error = ::SSL_get_error(ssl_, result);
+  int sys_error = static_cast<int>(::ERR_get_error());
+  std::size_t pending_output_after = ::BIO_ctrl_pending(ext_bio_);
+
+  if (ssl_error == SSL_ERROR_SSL)
+  {
+    ec = boost::system::error_code(sys_error,
+        boost::asio::error::get_ssl_category());
+    return want_nothing;
+  }
+
+  if (ssl_error == SSL_ERROR_SYSCALL)
+  {
+    ec = boost::system::error_code(sys_error,
+        boost::asio::error::get_system_category());
+    return want_nothing;
+  }
+
+  if (result > 0 && bytes_transferred)
+    *bytes_transferred = static_cast<std::size_t>(result);
+
+  if (ssl_error == SSL_ERROR_WANT_WRITE)
+  {
+    ec = boost::system::error_code();
+    return want_output_and_retry;
+  }
+  else if (pending_output_after > pending_output_before)
+  {
+    ec = boost::system::error_code();
+    return result > 0 ? want_output : want_output_and_retry;
+  }
+  else if (ssl_error == SSL_ERROR_WANT_READ)
+  {
+    ec = boost::system::error_code();
+    return want_input_and_retry;
+  }
+  else if (::SSL_get_shutdown(ssl_) & SSL_RECEIVED_SHUTDOWN)
+  {
+    ec = boost::asio::error::eof;
+    return want_nothing;
+  }
+  else
+  {
+    ec = boost::system::error_code();
+    return want_nothing;
+  }
+}
+
+int engine::do_accept(void*, std::size_t)
+{
+  boost::asio::detail::static_mutex::scoped_lock lock(accept_mutex());
+  return ::SSL_accept(ssl_);
+}
+
+int engine::do_connect(void*, std::size_t)
+{
+  return ::SSL_connect(ssl_);
+}
+
+int engine::do_shutdown(void*, std::size_t)
+{
+  int result = ::SSL_shutdown(ssl_);
+  if (result == 0)
+    result = ::SSL_shutdown(ssl_);
+  return result;
+}
+
+int engine::do_read(void* data, std::size_t length)
+{
+  return ::SSL_read(ssl_, data,
+      length < INT_MAX ? static_cast<int>(length) : INT_MAX);
+}
+
+int engine::do_write(void* data, std::size_t length)
+{
+  return ::SSL_write(ssl_, data,
+      length < INT_MAX ? static_cast<int>(length) : INT_MAX);
+}
+
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace detail
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_DETAIL_IMPL_ENGINE_IPP
diff --git a/ext/patches/boost/asio/ssl/detail/impl/openssl_init.ipp b/ext/patches/boost/asio/ssl/detail/impl/openssl_init.ipp
new file mode 100644
index 0000000..906bb5f
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/detail/impl/openssl_init.ipp
@@ -0,0 +1,147 @@
+//
+// ssl/detail/impl/openssl_init.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_DETAIL_IMPL_OPENSSL_INIT_IPP
+#define BOOST_ASIO_SSL_DETAIL_IMPL_OPENSSL_INIT_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <vector>
+#include <boost/asio/detail/assert.hpp>
+#include <boost/asio/detail/mutex.hpp>
+#include <boost/asio/detail/tss_ptr.hpp>
+#include <boost/asio/ssl/detail/openssl_init.hpp>
+#include <boost/asio/ssl/detail/openssl_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace detail {
+
+class openssl_init_base::do_init
+{
+public:
+  do_init()
+  {
+    ::SSL_library_init();
+    ::SSL_load_error_strings();        
+    ::OpenSSL_add_all_algorithms();
+
+    mutexes_.resize(::CRYPTO_num_locks());
+    for (size_t i = 0; i < mutexes_.size(); ++i)
+      mutexes_[i].reset(new boost::asio::detail::mutex);
+    ::CRYPTO_set_locking_callback(&do_init::openssl_locking_func);
+    ::CRYPTO_set_id_callback(&do_init::openssl_id_func);
+
+#if !defined(SSL_OP_NO_COMPRESSION) \
+  && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+    null_compression_methods_ = sk_SSL_COMP_new_null();
+#endif // !defined(SSL_OP_NO_COMPRESSION)
+       // && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+  }
+
+  ~do_init()
+  {
+#if !defined(SSL_OP_NO_COMPRESSION) \
+  && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+    sk_SSL_COMP_free(null_compression_methods_);
+#endif // !defined(SSL_OP_NO_COMPRESSION)
+       // && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+
+    ::CRYPTO_set_id_callback(0);
+    ::CRYPTO_set_locking_callback(0);
+    ::ERR_free_strings();
+    ::ERR_remove_state(0);
+    ::EVP_cleanup();
+    ::CRYPTO_cleanup_all_ex_data();
+    ::CONF_modules_unload(1);
+#if !defined(OPENSSL_NO_ENGINE)
+    ::ENGINE_cleanup();
+#endif // !defined(OPENSSL_NO_ENGINE)
+  }
+
+#if !defined(SSL_OP_NO_COMPRESSION) \
+  && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+  STACK_OF(SSL_COMP)* get_null_compression_methods() const
+  {
+    return null_compression_methods_;
+  }
+#endif // !defined(SSL_OP_NO_COMPRESSION)
+       // && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+
+private:
+  static unsigned long openssl_id_func()
+  {
+#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+    return ::GetCurrentThreadId();
+#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+    void* id = instance()->thread_id_;
+    if (id == 0)
+      instance()->thread_id_ = id = &id; // Ugh.
+    BOOST_ASIO_ASSERT(sizeof(unsigned long) >= sizeof(void*));
+    return reinterpret_cast<unsigned long>(id);
+#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+  }
+
+  static void openssl_locking_func(int mode, int n, 
+    const char* /*file*/, int /*line*/)
+  {
+    if (mode & CRYPTO_LOCK)
+      instance()->mutexes_[n]->lock();
+    else
+      instance()->mutexes_[n]->unlock();
+  }
+
+  // Mutexes to be used in locking callbacks.
+  std::vector<boost::asio::detail::shared_ptr<
+        boost::asio::detail::mutex> > mutexes_;
+
+#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+  // The thread identifiers to be used by openssl.
+  boost::asio::detail::tss_ptr<void> thread_id_;
+#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+#if !defined(SSL_OP_NO_COMPRESSION) \
+  && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+  STACK_OF(SSL_COMP)* null_compression_methods_;
+#endif // !defined(SSL_OP_NO_COMPRESSION)
+       // && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+};
+
+boost::asio::detail::shared_ptr<openssl_init_base::do_init>
+openssl_init_base::instance()
+{
+  static boost::asio::detail::shared_ptr<do_init> init(new do_init);
+  return init;
+}
+
+#if !defined(SSL_OP_NO_COMPRESSION) \
+  && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+STACK_OF(SSL_COMP)* openssl_init_base::get_null_compression_methods()
+{
+  return instance()->get_null_compression_methods();
+}
+#endif // !defined(SSL_OP_NO_COMPRESSION)
+       // && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+
+} // namespace detail
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_DETAIL_IMPL_OPENSSL_INIT_IPP
diff --git a/ext/patches/boost/asio/ssl/detail/io.hpp b/ext/patches/boost/asio/ssl/detail/io.hpp
new file mode 100644
index 0000000..38bf160
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/detail/io.hpp
@@ -0,0 +1,349 @@
+//
+// ssl/detail/io.hpp
+// ~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_DETAIL_IO_HPP
+#define BOOST_ASIO_SSL_DETAIL_IO_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <boost/asio/ssl/detail/engine.hpp>
+# include <boost/asio/ssl/detail/stream_core.hpp>
+# include <boost/asio/write.hpp>
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace detail {
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+template <typename Stream, typename Operation>
+std::size_t io(Stream& next_layer, stream_core& core,
+    const Operation& op, boost::system::error_code& ec)
+{
+  std::size_t bytes_transferred = 0;
+  do switch (op(core.engine_, ec, bytes_transferred))
+  {
+  case engine::want_input_and_retry:
+
+    // If the input buffer is empty then we need to read some more data from
+    // the underlying transport.
+    if (boost::asio::buffer_size(core.input_) == 0)
+      core.input_ = boost::asio::buffer(core.input_buffer_,
+          next_layer.read_some(core.input_buffer_, ec));
+
+    // Pass the new input data to the engine.
+    core.input_ = core.engine_.put_input(core.input_);
+
+    // Try the operation again.
+    continue;
+
+  case engine::want_output_and_retry:
+
+    // Get output data from the engine and write it to the underlying
+    // transport.
+    boost::asio::write(next_layer,
+        core.engine_.get_output(core.output_buffer_), ec);
+
+    // Try the operation again.
+    continue;
+
+  case engine::want_output:
+
+    // Get output data from the engine and write it to the underlying
+    // transport.
+    boost::asio::write(next_layer,
+        core.engine_.get_output(core.output_buffer_), ec);
+
+    // Operation is complete. Return result to caller.
+    core.engine_.map_error_code(ec);
+    return bytes_transferred;
+
+  default:
+
+    // Operation is complete. Return result to caller.
+    core.engine_.map_error_code(ec);
+    return bytes_transferred;
+
+  } while (!ec);
+
+  // Operation failed. Return result to caller.
+  core.engine_.map_error_code(ec);
+  return 0;
+}
+
+template <typename Stream, typename Operation, typename Handler>
+class io_op
+{
+public:
+  io_op(Stream& next_layer, stream_core& core,
+      const Operation& op, Handler& handler)
+    : next_layer_(next_layer),
+      core_(core),
+      op_(op),
+      start_(0),
+      want_(engine::want_nothing),
+      bytes_transferred_(0),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE)
+  io_op(const io_op& other)
+    : next_layer_(other.next_layer_),
+      core_(other.core_),
+      op_(other.op_),
+      start_(other.start_),
+      want_(other.want_),
+      ec_(other.ec_),
+      bytes_transferred_(other.bytes_transferred_),
+      handler_(other.handler_)
+  {
+  }
+
+  io_op(io_op&& other)
+    : next_layer_(other.next_layer_),
+      core_(other.core_),
+      op_(other.op_),
+      start_(other.start_),
+      want_(other.want_),
+      ec_(other.ec_),
+      bytes_transferred_(other.bytes_transferred_),
+      handler_(BOOST_ASIO_MOVE_CAST(Handler)(other.handler_))
+  {
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
+
+  void operator()(boost::system::error_code ec,
+      std::size_t bytes_transferred = ~std::size_t(0), int start = 0)
+  {
+    switch (start_ = start)
+    {
+    case 1: // Called after at least one async operation.
+      do
+      {
+        switch (want_ = op_(core_.engine_, ec_, bytes_transferred_))
+        {
+        case engine::want_input_and_retry:
+
+          // If the input buffer already has data in it we can pass it to the
+          // engine and then retry the operation immediately.
+          if (boost::asio::buffer_size(core_.input_) != 0)
+          {
+            core_.input_ = core_.engine_.put_input(core_.input_);
+            continue;
+          }
+
+          // The engine wants more data to be read from input. However, we
+          // cannot allow more than one read operation at a time on the
+          // underlying transport. The pending_read_ timer's expiry is set to
+          // pos_infin if a read is in progress, and neg_infin otherwise.
+          if (core_.pending_read_.expires_at() == core_.neg_infin())
+          {
+            // Prevent other read operations from being started.
+            core_.pending_read_.expires_at(core_.pos_infin());
+
+            // Start reading some data from the underlying transport.
+            next_layer_.async_read_some(
+                boost::asio::buffer(core_.input_buffer_),
+                BOOST_ASIO_MOVE_CAST(io_op)(*this));
+          }
+          else
+          {
+            // Wait until the current read operation completes.
+            core_.pending_read_.async_wait(BOOST_ASIO_MOVE_CAST(io_op)(*this));
+          }
+
+          // Yield control until asynchronous operation completes. Control
+          // resumes at the "default:" label below.
+          return;
+
+        case engine::want_output_and_retry:
+        case engine::want_output:
+
+          // The engine wants some data to be written to the output. However, we
+          // cannot allow more than one write operation at a time on the
+          // underlying transport. The pending_write_ timer's expiry is set to
+          // pos_infin if a write is in progress, and neg_infin otherwise.
+          if (core_.pending_write_.expires_at() == core_.neg_infin())
+          {
+            // Prevent other write operations from being started.
+            core_.pending_write_.expires_at(core_.pos_infin());
+
+            // Start writing all the data to the underlying transport.
+            boost::asio::async_write(next_layer_,
+                core_.engine_.get_output(core_.output_buffer_),
+                BOOST_ASIO_MOVE_CAST(io_op)(*this));
+          }
+          else
+          {
+            // Wait until the current write operation completes.
+            core_.pending_write_.async_wait(BOOST_ASIO_MOVE_CAST(io_op)(*this));
+          }
+
+          // Yield control until asynchronous operation completes. Control
+          // resumes at the "default:" label below.
+          return;
+
+        default:
+
+          // The SSL operation is done and we can invoke the handler, but we
+          // have to keep in mind that this function might be being called from
+          // the async operation's initiating function. In this case we're not
+          // allowed to call the handler directly. Instead, issue a zero-sized
+          // read so the handler runs "as-if" posted using io_service::post().
+          if (start)
+          {
+            next_layer_.async_read_some(
+                boost::asio::buffer(core_.input_buffer_, 0),
+                BOOST_ASIO_MOVE_CAST(io_op)(*this));
+
+            // Yield control until asynchronous operation completes. Control
+            // resumes at the "default:" label below.
+            return;
+          }
+          else
+          {
+            // Continue on to run handler directly.
+            break;
+          }
+        }
+
+        default:
+        if (bytes_transferred != ~std::size_t(0) && !ec_)
+          ec_ = ec;
+
+        switch (want_)
+        {
+        case engine::want_input_and_retry:
+
+          // Add received data to the engine's input.
+          core_.input_ = boost::asio::buffer(
+              core_.input_buffer_, bytes_transferred);
+          core_.input_ = core_.engine_.put_input(core_.input_);
+
+          // Release any waiting read operations.
+          core_.pending_read_.expires_at(core_.neg_infin());
+
+          // Try the operation again.
+          continue;
+
+        case engine::want_output_and_retry:
+
+          // Release any waiting write operations.
+          core_.pending_write_.expires_at(core_.neg_infin());
+
+          // Try the operation again.
+          continue;
+
+        case engine::want_output:
+
+          // Release any waiting write operations.
+          core_.pending_write_.expires_at(core_.neg_infin());
+
+          // Fall through to call handler.
+
+        default:
+
+          // Pass the result to the handler.
+          op_.call_handler(handler_,
+              core_.engine_.map_error_code(ec_),
+              ec_ ? 0 : bytes_transferred_);
+
+          // Our work here is done.
+          return;
+        }
+      } while (!ec_);
+
+      // Operation failed. Pass the result to the handler.
+      op_.call_handler(handler_, core_.engine_.map_error_code(ec_), 0);
+    }
+  }
+
+//private:
+  Stream& next_layer_;
+  stream_core& core_;
+  Operation op_;
+  int start_;
+  engine::want want_;
+  boost::system::error_code ec_;
+  std::size_t bytes_transferred_;
+  Handler handler_;
+};
+
+template <typename Stream, typename Operation,  typename Handler>
+inline void* asio_handler_allocate(std::size_t size,
+    io_op<Stream, Operation, Handler>* this_handler)
+{
+  return boost_asio_handler_alloc_helpers::allocate(
+      size, this_handler->handler_);
+}
+
+template <typename Stream, typename Operation, typename Handler>
+inline void asio_handler_deallocate(void* pointer, std::size_t size,
+    io_op<Stream, Operation, Handler>* this_handler)
+{
+  boost_asio_handler_alloc_helpers::deallocate(
+      pointer, size, this_handler->handler_);
+}
+
+template <typename Stream, typename Operation, typename Handler>
+inline bool asio_handler_is_continuation(
+    io_op<Stream, Operation, Handler>* this_handler)
+{
+  return this_handler->start_ == 0 ? true
+    : boost_asio_handler_cont_helpers::is_continuation(this_handler->handler_);
+}
+
+template <typename Function, typename Stream,
+    typename Operation, typename Handler>
+inline void asio_handler_invoke(Function& function,
+    io_op<Stream, Operation, Handler>* this_handler)
+{
+  boost_asio_handler_invoke_helpers::invoke(
+      function, this_handler->handler_);
+}
+
+template <typename Function, typename Stream,
+    typename Operation, typename Handler>
+inline void asio_handler_invoke(const Function& function,
+    io_op<Stream, Operation, Handler>* this_handler)
+{
+  boost_asio_handler_invoke_helpers::invoke(
+      function, this_handler->handler_);
+}
+
+template <typename Stream, typename Operation, typename Handler>
+inline void async_io(Stream& next_layer, stream_core& core,
+    const Operation& op, Handler& handler)
+{
+  io_op<Stream, Operation, Handler>(
+    next_layer, core, op, handler)(
+      boost::system::error_code(), 0, 1);
+}
+
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace detail
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_DETAIL_IO_HPP
diff --git a/ext/patches/boost/asio/ssl/detail/openssl_init.hpp b/ext/patches/boost/asio/ssl/detail/openssl_init.hpp
new file mode 100644
index 0000000..90782da
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/detail/openssl_init.hpp
@@ -0,0 +1,103 @@
+//
+// ssl/detail/openssl_init.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_DETAIL_OPENSSL_INIT_HPP
+#define BOOST_ASIO_SSL_DETAIL_OPENSSL_INIT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstring>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/shared_ptr.hpp>
+#include <boost/asio/ssl/detail/openssl_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace detail {
+
+class openssl_init_base
+  : private noncopyable
+{
+protected:
+  // Class that performs the actual initialisation.
+  class do_init;
+
+  // Helper function to manage a do_init singleton. The static instance of the
+  // openssl_init object ensures that this function is always called before
+  // main, and therefore before any other threads can get started. The do_init
+  // instance must be static in this function to ensure that it gets
+  // initialised before any other global objects try to use it.
+  BOOST_ASIO_DECL static boost::asio::detail::shared_ptr<do_init> instance();
+
+#if !defined(SSL_OP_NO_COMPRESSION) \
+  && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+  // Get an empty stack of compression methods, to be used when disabling
+  // compression.
+  BOOST_ASIO_DECL static STACK_OF(SSL_COMP)* get_null_compression_methods();
+#endif // !defined(SSL_OP_NO_COMPRESSION)
+       // && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+};
+
+template <bool Do_Init = true>
+class openssl_init : private openssl_init_base
+{
+public:
+  // Constructor.
+  openssl_init()
+    : ref_(instance())
+  {
+    using namespace std; // For memmove.
+
+    // Ensure openssl_init::instance_ is linked in.
+    openssl_init* tmp = &instance_;
+    memmove(&tmp, &tmp, sizeof(openssl_init*));
+  }
+
+  // Destructor.
+  ~openssl_init()
+  {
+  }
+
+#if !defined(SSL_OP_NO_COMPRESSION) \
+  && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+  using openssl_init_base::get_null_compression_methods;
+#endif // !defined(SSL_OP_NO_COMPRESSION)
+       // && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+
+private:
+  // Instance to force initialisation of openssl at global scope.
+  static openssl_init instance_;
+
+  // Reference to singleton do_init object to ensure that openssl does not get
+  // cleaned up until the last user has finished with it.
+  boost::asio::detail::shared_ptr<do_init> ref_;
+};
+
+template <bool Do_Init>
+openssl_init<Do_Init> openssl_init<Do_Init>::instance_;
+
+} // namespace detail
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/ssl/detail/impl/openssl_init.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_SSL_DETAIL_OPENSSL_INIT_HPP
diff --git a/ext/patches/boost/asio/ssl/detail/openssl_types.hpp b/ext/patches/boost/asio/ssl/detail/openssl_types.hpp
new file mode 100644
index 0000000..2c80f4b
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/detail/openssl_types.hpp
@@ -0,0 +1,28 @@
+//
+// ssl/detail/openssl_types.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_DETAIL_OPENSSL_TYPES_HPP
+#define BOOST_ASIO_SSL_DETAIL_OPENSSL_TYPES_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <openssl/conf.h>
+#include <openssl/ssl.h>
+#if !defined(OPENSSL_NO_ENGINE)
+# include <openssl/engine.h>
+#endif // !defined(OPENSSL_NO_ENGINE)
+#include <openssl/err.h>
+#include <openssl/x509v3.h>
+#include <boost/asio/detail/socket_types.hpp>
+
+#endif // BOOST_ASIO_SSL_DETAIL_OPENSSL_TYPES_HPP
diff --git a/ext/patches/boost/asio/ssl/detail/password_callback.hpp b/ext/patches/boost/asio/ssl/detail/password_callback.hpp
new file mode 100644
index 0000000..2f570b2
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/detail/password_callback.hpp
@@ -0,0 +1,74 @@
+//
+// ssl/detail/password_callback.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_DETAIL_PASSWORD_CALLBACK_HPP
+#define BOOST_ASIO_SSL_DETAIL_PASSWORD_CALLBACK_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <cstddef>
+# include <string>
+# include <boost/asio/ssl/context_base.hpp>
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace detail {
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+class password_callback_base
+{
+public:
+  virtual ~password_callback_base()
+  {
+  }
+
+  virtual std::string call(std::size_t size,
+      context_base::password_purpose purpose) = 0;
+};
+
+template <typename PasswordCallback>
+class password_callback : public password_callback_base
+{
+public:
+  explicit password_callback(PasswordCallback callback)
+    : callback_(callback)
+  {
+  }
+
+  virtual std::string call(std::size_t size,
+      context_base::password_purpose purpose)
+  {
+    return callback_(size, purpose);
+  }
+
+private:
+  PasswordCallback callback_;
+};
+
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace detail
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_DETAIL_PASSWORD_CALLBACK_HPP
diff --git a/ext/patches/boost/asio/ssl/detail/read_op.hpp b/ext/patches/boost/asio/ssl/detail/read_op.hpp
new file mode 100644
index 0000000..6f6a687
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/detail/read_op.hpp
@@ -0,0 +1,75 @@
+//
+// ssl/detail/read_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_DETAIL_READ_OP_HPP
+#define BOOST_ASIO_SSL_DETAIL_READ_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <boost/asio/detail/buffer_sequence_adapter.hpp>
+# include <boost/asio/ssl/detail/engine.hpp>
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace detail {
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+template <typename MutableBufferSequence>
+class read_op
+{
+public:
+  read_op(const MutableBufferSequence& buffers)
+    : buffers_(buffers)
+  {
+  }
+
+  engine::want operator()(engine& eng,
+      boost::system::error_code& ec,
+      std::size_t& bytes_transferred) const
+  {
+    boost::asio::mutable_buffer buffer =
+      boost::asio::detail::buffer_sequence_adapter<boost::asio::mutable_buffer,
+        MutableBufferSequence>::first(buffers_);
+
+    return eng.read(buffer, ec, bytes_transferred);
+  }
+
+  template <typename Handler>
+  void call_handler(Handler& handler,
+      const boost::system::error_code& ec,
+      const std::size_t& bytes_transferred) const
+  {
+    handler(ec, bytes_transferred);
+  }
+
+private:
+  MutableBufferSequence buffers_;
+};
+
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace detail
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_DETAIL_READ_OP_HPP
diff --git a/ext/patches/boost/asio/ssl/detail/shutdown_op.hpp b/ext/patches/boost/asio/ssl/detail/shutdown_op.hpp
new file mode 100644
index 0000000..0af1c34
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/detail/shutdown_op.hpp
@@ -0,0 +1,62 @@
+//
+// ssl/detail/shutdown_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_DETAIL_SHUTDOWN_OP_HPP
+#define BOOST_ASIO_SSL_DETAIL_SHUTDOWN_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <boost/asio/ssl/detail/engine.hpp>
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace detail {
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+class shutdown_op
+{
+public:
+  engine::want operator()(engine& eng,
+      boost::system::error_code& ec,
+      std::size_t& bytes_transferred) const
+  {
+    bytes_transferred = 0;
+    return eng.shutdown(ec);
+  }
+
+  template <typename Handler>
+  void call_handler(Handler& handler,
+      const boost::system::error_code& ec,
+      const std::size_t&) const
+  {
+    handler(ec);
+  }
+};
+
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace detail
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_DETAIL_SHUTDOWN_OP_HPP
diff --git a/ext/patches/boost/asio/ssl/detail/stream_core.hpp b/ext/patches/boost/asio/ssl/detail/stream_core.hpp
new file mode 100644
index 0000000..1fcb150
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/detail/stream_core.hpp
@@ -0,0 +1,128 @@
+//
+// ssl/detail/stream_core.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_DETAIL_STREAM_CORE_HPP
+#define BOOST_ASIO_SSL_DETAIL_STREAM_CORE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+#  include <boost/asio/deadline_timer.hpp>
+# else // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+#  include <boost/asio/steady_timer.hpp>
+# endif // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+# include <boost/asio/ssl/detail/engine.hpp>
+# include <boost/asio/buffer.hpp>
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace detail {
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+struct stream_core
+{
+  // According to the OpenSSL documentation, this is the buffer size that is
+  // sufficient to hold the largest possible TLS record.
+  enum { max_tls_record_size = 17 * 1024 };
+
+  stream_core(SSL_CTX* context, boost::asio::io_service& io_service)
+    : engine_(context),
+      pending_read_(io_service),
+      pending_write_(io_service),
+      output_buffer_space_(max_tls_record_size),
+      output_buffer_(boost::asio::buffer(output_buffer_space_)),
+      input_buffer_space_(max_tls_record_size),
+      input_buffer_(boost::asio::buffer(input_buffer_space_))
+  {
+    pending_read_.expires_at(neg_infin());
+    pending_write_.expires_at(neg_infin());
+  }
+
+  ~stream_core()
+  {
+  }
+
+  // The SSL engine.
+  engine engine_;
+
+#if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+  // Timer used for storing queued read operations.
+  boost::asio::deadline_timer pending_read_;
+
+  // Timer used for storing queued write operations.
+  boost::asio::deadline_timer pending_write_;
+
+  // Helper function for obtaining a time value that always fires.
+  static boost::asio::deadline_timer::time_type neg_infin()
+  {
+    return boost::posix_time::neg_infin;
+  }
+
+  // Helper function for obtaining a time value that never fires.
+  static boost::asio::deadline_timer::time_type pos_infin()
+  {
+    return boost::posix_time::pos_infin;
+  }
+#else // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+  // Timer used for storing queued read operations.
+  boost::asio::steady_timer pending_read_;
+
+  // Timer used for storing queued write operations.
+  boost::asio::steady_timer pending_write_;
+
+  // Helper function for obtaining a time value that always fires.
+  static boost::asio::steady_timer::time_point neg_infin()
+  {
+    return (boost::asio::steady_timer::time_point::min)();
+  }
+
+  // Helper function for obtaining a time value that never fires.
+  static boost::asio::steady_timer::time_point pos_infin()
+  {
+    return (boost::asio::steady_timer::time_point::max)();
+  }
+#endif // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+
+  // Buffer space used to prepare output intended for the transport.
+  std::vector<unsigned char> output_buffer_space_;
+
+  // A buffer that may be used to prepare output intended for the transport.
+  const boost::asio::mutable_buffers_1 output_buffer_;
+
+  // Buffer space used to read input intended for the engine.
+  std::vector<unsigned char> input_buffer_space_;
+
+  // A buffer that may be used to read input intended for the engine.
+  const boost::asio::mutable_buffers_1 input_buffer_;
+
+  // The buffer pointing to the engine's unconsumed input.
+  boost::asio::const_buffer input_;
+};
+
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace detail
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_DETAIL_STREAM_CORE_HPP
diff --git a/ext/patches/boost/asio/ssl/detail/verify_callback.hpp b/ext/patches/boost/asio/ssl/detail/verify_callback.hpp
new file mode 100644
index 0000000..68c669c
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/detail/verify_callback.hpp
@@ -0,0 +1,70 @@
+//
+// ssl/detail/verify_callback.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_DETAIL_VERIFY_CALLBACK_HPP
+#define BOOST_ASIO_SSL_DETAIL_VERIFY_CALLBACK_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <boost/asio/ssl/verify_context.hpp>
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace detail {
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+class verify_callback_base
+{
+public:
+  virtual ~verify_callback_base()
+  {
+  }
+
+  virtual bool call(bool preverified, verify_context& ctx) = 0;
+};
+
+template <typename VerifyCallback>
+class verify_callback : public verify_callback_base
+{
+public:
+  explicit verify_callback(VerifyCallback callback)
+    : callback_(callback)
+  {
+  }
+
+  virtual bool call(bool preverified, verify_context& ctx)
+  {
+    return callback_(preverified, ctx);
+  }
+
+private:
+  VerifyCallback callback_;
+};
+
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace detail
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_DETAIL_VERIFY_CALLBACK_HPP
diff --git a/ext/patches/boost/asio/ssl/detail/write_op.hpp b/ext/patches/boost/asio/ssl/detail/write_op.hpp
new file mode 100644
index 0000000..e748901
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/detail/write_op.hpp
@@ -0,0 +1,75 @@
+//
+// ssl/detail/write_op.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_DETAIL_WRITE_OP_HPP
+#define BOOST_ASIO_SSL_DETAIL_WRITE_OP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <boost/asio/detail/buffer_sequence_adapter.hpp>
+# include <boost/asio/ssl/detail/engine.hpp>
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace detail {
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+template <typename ConstBufferSequence>
+class write_op
+{
+public:
+  write_op(const ConstBufferSequence& buffers)
+    : buffers_(buffers)
+  {
+  }
+
+  engine::want operator()(engine& eng,
+      boost::system::error_code& ec,
+      std::size_t& bytes_transferred) const
+  {
+    boost::asio::const_buffer buffer =
+      boost::asio::detail::buffer_sequence_adapter<boost::asio::const_buffer,
+        ConstBufferSequence>::first(buffers_);
+
+    return eng.write(buffer, ec, bytes_transferred);
+  }
+
+  template <typename Handler>
+  void call_handler(Handler& handler,
+      const boost::system::error_code& ec,
+      const std::size_t& bytes_transferred) const
+  {
+    handler(ec, bytes_transferred);
+  }
+
+private:
+  ConstBufferSequence buffers_;
+};
+
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace detail
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_DETAIL_WRITE_OP_HPP
diff --git a/ext/patches/boost/asio/ssl/error.hpp b/ext/patches/boost/asio/ssl/error.hpp
new file mode 100644
index 0000000..dae24de
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/error.hpp
@@ -0,0 +1,72 @@
+//
+// ssl/error.hpp
+// ~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_ERROR_HPP
+#define BOOST_ASIO_SSL_ERROR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/system/error_code.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace error {
+
+enum ssl_errors
+{
+};
+
+extern BOOST_ASIO_DECL
+const boost::system::error_category& get_ssl_category();
+
+static const boost::system::error_category& ssl_category
+  = boost::asio::error::get_ssl_category();
+
+} // namespace error
+} // namespace asio
+} // namespace boost
+
+namespace boost {
+namespace system {
+
+template<> struct is_error_code_enum<boost::asio::error::ssl_errors>
+{
+  static const bool value = true;
+};
+
+} // namespace system
+} // namespace boost
+
+namespace boost {
+namespace asio {
+namespace error {
+
+inline boost::system::error_code make_error_code(ssl_errors e)
+{
+  return boost::system::error_code(
+      static_cast<int>(e), get_ssl_category());
+}
+
+} // namespace error
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/ssl/impl/error.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_SSL_ERROR_HPP
diff --git a/ext/patches/boost/asio/ssl/impl/context.hpp b/ext/patches/boost/asio/ssl/impl/context.hpp
new file mode 100644
index 0000000..1bfdc4f
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/impl/context.hpp
@@ -0,0 +1,73 @@
+//
+// ssl/impl/context.hpp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_IMPL_CONTEXT_HPP
+#define BOOST_ASIO_SSL_IMPL_CONTEXT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <boost/asio/detail/throw_error.hpp>
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+template <typename VerifyCallback>
+void context::set_verify_callback(VerifyCallback callback)
+{
+  boost::system::error_code ec;
+  this->set_verify_callback(callback, ec);
+  boost::asio::detail::throw_error(ec, "set_verify_callback");
+}
+
+template <typename VerifyCallback>
+boost::system::error_code context::set_verify_callback(
+    VerifyCallback callback, boost::system::error_code& ec)
+{
+  return do_set_verify_callback(
+      new detail::verify_callback<VerifyCallback>(callback), ec);
+}
+
+template <typename PasswordCallback>
+void context::set_password_callback(PasswordCallback callback)
+{
+  boost::system::error_code ec;
+  this->set_password_callback(callback, ec);
+  boost::asio::detail::throw_error(ec, "set_password_callback");
+}
+
+template <typename PasswordCallback>
+boost::system::error_code context::set_password_callback(
+    PasswordCallback callback, boost::system::error_code& ec)
+{
+  return do_set_password_callback(
+      new detail::password_callback<PasswordCallback>(callback), ec);
+}
+
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_IMPL_CONTEXT_HPP
diff --git a/ext/patches/boost/asio/ssl/impl/context.ipp b/ext/patches/boost/asio/ssl/impl/context.ipp
new file mode 100644
index 0000000..07c6b0a
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/impl/context.ipp
@@ -0,0 +1,952 @@
+//
+// ssl/impl/context.ipp
+// ~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_IMPL_CONTEXT_IPP
+#define BOOST_ASIO_SSL_IMPL_CONTEXT_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <cstring>
+# include <boost/asio/detail/throw_error.hpp>
+# include <boost/asio/error.hpp>
+# include <boost/asio/ssl/context.hpp>
+# include <boost/asio/ssl/error.hpp>
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+struct context::bio_cleanup
+{
+  BIO* p;
+  ~bio_cleanup() { if (p) ::BIO_free(p); }
+};
+
+struct context::x509_cleanup
+{
+  X509* p;
+  ~x509_cleanup() { if (p) ::X509_free(p); }
+};
+
+struct context::evp_pkey_cleanup
+{
+  EVP_PKEY* p;
+  ~evp_pkey_cleanup() { if (p) ::EVP_PKEY_free(p); }
+};
+
+struct context::rsa_cleanup
+{
+  RSA* p;
+  ~rsa_cleanup() { if (p) ::RSA_free(p); }
+};
+
+struct context::dh_cleanup
+{
+  DH* p;
+  ~dh_cleanup() { if (p) ::DH_free(p); }
+};
+
+context::context(context::method m)
+  : handle_(0)
+{
+  switch (m)
+  {
+#if defined(OPENSSL_NO_SSL2)
+  case context::sslv2:
+  case context::sslv2_client:
+  case context::sslv2_server:
+    boost::asio::detail::throw_error(
+        boost::asio::error::invalid_argument, "context");
+    break;
+#else // defined(OPENSSL_NO_SSL2)
+  case context::sslv2:
+    handle_ = ::SSL_CTX_new(::SSLv2_method());
+    break;
+  case context::sslv2_client:
+    handle_ = ::SSL_CTX_new(::SSLv2_client_method());
+    break;
+  case context::sslv2_server:
+    handle_ = ::SSL_CTX_new(::SSLv2_server_method());
+    break;
+#endif // defined(OPENSSL_NO_SSL2)
+  case context::sslv3:
+    handle_ = ::SSL_CTX_new(::SSLv3_method());
+    break;
+  case context::sslv3_client:
+    handle_ = ::SSL_CTX_new(::SSLv3_client_method());
+    break;
+  case context::sslv3_server:
+    handle_ = ::SSL_CTX_new(::SSLv3_server_method());
+    break;
+  case context::tlsv1:
+    handle_ = ::SSL_CTX_new(::TLSv1_method());
+    break;
+  case context::tlsv1_client:
+    handle_ = ::SSL_CTX_new(::TLSv1_client_method());
+    break;
+  case context::tlsv1_server:
+    handle_ = ::SSL_CTX_new(::TLSv1_server_method());
+    break;
+  case context::sslv23:
+    handle_ = ::SSL_CTX_new(::SSLv23_method());
+    break;
+  case context::sslv23_client:
+    handle_ = ::SSL_CTX_new(::SSLv23_client_method());
+    break;
+  case context::sslv23_server:
+    handle_ = ::SSL_CTX_new(::SSLv23_server_method());
+    break;
+#if defined(SSL_TXT_TLSV1_1)
+  case context::tlsv11:
+    handle_ = ::SSL_CTX_new(::TLSv1_1_method());
+    break;
+  case context::tlsv11_client:
+    handle_ = ::SSL_CTX_new(::TLSv1_1_client_method());
+    break;
+  case context::tlsv11_server:
+    handle_ = ::SSL_CTX_new(::TLSv1_1_server_method());
+    break;
+#else // defined(SSL_TXT_TLSV1_1)
+  case context::tlsv11:
+  case context::tlsv11_client:
+  case context::tlsv11_server:
+    boost::asio::detail::throw_error(
+        boost::asio::error::invalid_argument, "context");
+    break;
+#endif // defined(SSL_TXT_TLSV1_1)
+#if defined(SSL_TXT_TLSV1_2)
+  case context::tlsv12:
+    handle_ = ::SSL_CTX_new(::TLSv1_2_method());
+    break;
+  case context::tlsv12_client:
+    handle_ = ::SSL_CTX_new(::TLSv1_2_client_method());
+    break;
+  case context::tlsv12_server:
+    handle_ = ::SSL_CTX_new(::TLSv1_2_server_method());
+    break;
+#else // defined(SSL_TXT_TLSV1_2) 
+  case context::tlsv12:
+  case context::tlsv12_client:
+  case context::tlsv12_server:
+    boost::asio::detail::throw_error(
+        boost::asio::error::invalid_argument, "context");
+    break;
+#endif // defined(SSL_TXT_TLSV1_2) 
+  default:
+    handle_ = ::SSL_CTX_new(0);
+    break;
+  }
+
+  if (handle_ == 0)
+  {
+    boost::system::error_code ec(
+        static_cast<int>(::ERR_get_error()),
+        boost::asio::error::get_ssl_category());
+    boost::asio::detail::throw_error(ec, "context");
+  }
+
+  set_options(no_compression);
+}
+
+context::context(boost::asio::io_service&, context::method m)
+  : handle_(0)
+{
+  context tmp(m);
+  handle_ = tmp.handle_;
+  tmp.handle_ = 0;
+}
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+context::context(context&& other)
+{
+  handle_ = other.handle_;
+  other.handle_ = 0;
+}
+
+context& context::operator=(context&& other)
+{
+  context tmp(BOOST_ASIO_MOVE_CAST(context)(*this));
+  handle_ = other.handle_;
+  other.handle_ = 0;
+  return *this;
+}
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+context::~context()
+{
+  if (handle_)
+  {
+    if (handle_->default_passwd_callback_userdata)
+    {
+      detail::password_callback_base* callback =
+        static_cast<detail::password_callback_base*>(
+            handle_->default_passwd_callback_userdata);
+      delete callback;
+      handle_->default_passwd_callback_userdata = 0;
+    }
+
+    if (SSL_CTX_get_app_data(handle_))
+    {
+      detail::verify_callback_base* callback =
+        static_cast<detail::verify_callback_base*>(
+            SSL_CTX_get_app_data(handle_));
+      delete callback;
+      SSL_CTX_set_app_data(handle_, 0);
+    }
+
+    ::SSL_CTX_free(handle_);
+  }
+}
+
+context::native_handle_type context::native_handle()
+{
+  return handle_;
+}
+
+context::impl_type context::impl()
+{
+  return handle_;
+}
+
+void context::clear_options(context::options o)
+{
+  boost::system::error_code ec;
+  clear_options(o, ec);
+  boost::asio::detail::throw_error(ec, "clear_options");
+}
+
+boost::system::error_code context::clear_options(
+    context::options o, boost::system::error_code& ec)
+{
+#if (OPENSSL_VERSION_NUMBER >= 0x009080DFL) \
+  && (OPENSSL_VERSION_NUMBER != 0x00909000L)
+# if !defined(SSL_OP_NO_COMPRESSION)
+  if ((o & context::no_compression) != 0)
+  {
+# if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+    handle_->comp_methods = SSL_COMP_get_compression_methods();
+# endif // (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+    o ^= context::no_compression;
+  }
+# endif // !defined(SSL_OP_NO_COMPRESSION)
+
+  ::SSL_CTX_clear_options(handle_, o);
+
+  ec = boost::system::error_code();
+#else // (OPENSSL_VERSION_NUMBER >= 0x009080DFL)
+      //   && (OPENSSL_VERSION_NUMBER != 0x00909000L)
+  (void)o;
+  ec = boost::asio::error::operation_not_supported;
+#endif // (OPENSSL_VERSION_NUMBER >= 0x009080DFL)
+       //   && (OPENSSL_VERSION_NUMBER != 0x00909000L)
+  return ec;
+}
+
+void context::set_options(context::options o)
+{
+  boost::system::error_code ec;
+  set_options(o, ec);
+  boost::asio::detail::throw_error(ec, "set_options");
+}
+
+boost::system::error_code context::set_options(
+    context::options o, boost::system::error_code& ec)
+{
+#if !defined(SSL_OP_NO_COMPRESSION)
+  if ((o & context::no_compression) != 0)
+  {
+#if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+    handle_->comp_methods =
+      boost::asio::ssl::detail::openssl_init<>::get_null_compression_methods();
+#endif // (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+    o ^= context::no_compression;
+  }
+#endif // !defined(SSL_OP_NO_COMPRESSION)
+
+  ::SSL_CTX_set_options(handle_, o);
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+void context::set_verify_mode(verify_mode v)
+{
+  boost::system::error_code ec;
+  set_verify_mode(v, ec);
+  boost::asio::detail::throw_error(ec, "set_verify_mode");
+}
+
+boost::system::error_code context::set_verify_mode(
+    verify_mode v, boost::system::error_code& ec)
+{
+  ::SSL_CTX_set_verify(handle_, v, ::SSL_CTX_get_verify_callback(handle_));
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+void context::set_verify_depth(int depth)
+{
+  boost::system::error_code ec;
+  set_verify_depth(depth, ec);
+  boost::asio::detail::throw_error(ec, "set_verify_depth");
+}
+
+boost::system::error_code context::set_verify_depth(
+    int depth, boost::system::error_code& ec)
+{
+  ::SSL_CTX_set_verify_depth(handle_, depth);
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+void context::load_verify_file(const std::string& filename)
+{
+  boost::system::error_code ec;
+  load_verify_file(filename, ec);
+  boost::asio::detail::throw_error(ec, "load_verify_file");
+}
+
+boost::system::error_code context::load_verify_file(
+    const std::string& filename, boost::system::error_code& ec)
+{
+  if (::SSL_CTX_load_verify_locations(handle_, filename.c_str(), 0) != 1)
+  {
+    ec = boost::system::error_code(
+        static_cast<int>(::ERR_get_error()),
+        boost::asio::error::get_ssl_category());
+    return ec;
+  }
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+void context::add_certificate_authority(const const_buffer& ca)
+{
+  boost::system::error_code ec;
+  add_certificate_authority(ca, ec);
+  boost::asio::detail::throw_error(ec, "add_certificate_authority");
+}
+
+boost::system::error_code context::add_certificate_authority(
+    const const_buffer& ca, boost::system::error_code& ec)
+{
+  ::ERR_clear_error();
+
+  bio_cleanup bio = { make_buffer_bio(ca) };
+  if (bio.p)
+  {
+    x509_cleanup cert = { ::PEM_read_bio_X509(bio.p, 0, 0, 0) };
+    if (cert.p)
+    {
+      if (X509_STORE* store = ::SSL_CTX_get_cert_store(handle_))
+      {
+        if (::X509_STORE_add_cert(store, cert.p) == 1)
+        {
+          ec = boost::system::error_code();
+          return ec;
+        }
+      }
+    }
+  }
+
+  ec = boost::system::error_code(
+      static_cast<int>(::ERR_get_error()),
+      boost::asio::error::get_ssl_category());
+  return ec;
+}
+
+void context::set_default_verify_paths()
+{
+  boost::system::error_code ec;
+  set_default_verify_paths(ec);
+  boost::asio::detail::throw_error(ec, "set_default_verify_paths");
+}
+
+boost::system::error_code context::set_default_verify_paths(
+    boost::system::error_code& ec)
+{
+  if (::SSL_CTX_set_default_verify_paths(handle_) != 1)
+  {
+    ec = boost::system::error_code(
+        static_cast<int>(::ERR_get_error()),
+        boost::asio::error::get_ssl_category());
+    return ec;
+  }
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+void context::add_verify_path(const std::string& path)
+{
+  boost::system::error_code ec;
+  add_verify_path(path, ec);
+  boost::asio::detail::throw_error(ec, "add_verify_path");
+}
+
+boost::system::error_code context::add_verify_path(
+    const std::string& path, boost::system::error_code& ec)
+{
+  if (::SSL_CTX_load_verify_locations(handle_, 0, path.c_str()) != 1)
+  {
+    ec = boost::system::error_code(
+        static_cast<int>(::ERR_get_error()),
+        boost::asio::error::get_ssl_category());
+    return ec;
+  }
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+void context::use_certificate(
+    const const_buffer& certificate, file_format format)
+{
+  boost::system::error_code ec;
+  use_certificate(certificate, format, ec);
+  boost::asio::detail::throw_error(ec, "use_certificate");
+}
+
+boost::system::error_code context::use_certificate(
+    const const_buffer& certificate, file_format format,
+    boost::system::error_code& ec)
+{
+  ::ERR_clear_error();
+
+  if (format == context_base::asn1)
+  {
+    if (::SSL_CTX_use_certificate_ASN1(handle_,
+          static_cast<int>(buffer_size(certificate)),
+          buffer_cast<const unsigned char*>(certificate)) == 1)
+    {
+      ec = boost::system::error_code();
+      return ec;
+    }
+  }
+  else if (format == context_base::pem)
+  {
+    bio_cleanup bio = { make_buffer_bio(certificate) };
+    if (bio.p)
+    {
+      x509_cleanup cert = { ::PEM_read_bio_X509(bio.p, 0, 0, 0) };
+      if (cert.p)
+      {
+        if (::SSL_CTX_use_certificate(handle_, cert.p) == 1)
+        {
+          ec = boost::system::error_code();
+          return ec;
+        }
+      }
+    }
+  }
+  else
+  {
+    ec = boost::asio::error::invalid_argument;
+    return ec;
+  }
+
+  ec = boost::system::error_code(
+      static_cast<int>(::ERR_get_error()),
+      boost::asio::error::get_ssl_category());
+  return ec;
+}
+
+void context::use_certificate_file(
+    const std::string& filename, file_format format)
+{
+  boost::system::error_code ec;
+  use_certificate_file(filename, format, ec);
+  boost::asio::detail::throw_error(ec, "use_certificate_file");
+}
+
+boost::system::error_code context::use_certificate_file(
+    const std::string& filename, file_format format,
+    boost::system::error_code& ec)
+{
+  int file_type;
+  switch (format)
+  {
+  case context_base::asn1:
+    file_type = SSL_FILETYPE_ASN1;
+    break;
+  case context_base::pem:
+    file_type = SSL_FILETYPE_PEM;
+    break;
+  default:
+    {
+      ec = boost::asio::error::invalid_argument;
+      return ec;
+    }
+  }
+
+  if (::SSL_CTX_use_certificate_file(handle_, filename.c_str(), file_type) != 1)
+  {
+    ec = boost::system::error_code(
+        static_cast<int>(::ERR_get_error()),
+        boost::asio::error::get_ssl_category());
+    return ec;
+  }
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+void context::use_certificate_chain(const const_buffer& chain)
+{
+  boost::system::error_code ec;
+  use_certificate_chain(chain, ec);
+  boost::asio::detail::throw_error(ec, "use_certificate_chain");
+}
+
+boost::system::error_code context::use_certificate_chain(
+    const const_buffer& chain, boost::system::error_code& ec)
+{
+  ::ERR_clear_error();
+
+  bio_cleanup bio = { make_buffer_bio(chain) };
+  if (bio.p)
+  {
+    x509_cleanup cert = {
+      ::PEM_read_bio_X509_AUX(bio.p, 0,
+          handle_->default_passwd_callback,
+          handle_->default_passwd_callback_userdata) };
+    if (!cert.p)
+    {
+      ec = boost::system::error_code(ERR_R_PEM_LIB,
+          boost::asio::error::get_ssl_category());
+      return ec;
+    }
+
+    int result = ::SSL_CTX_use_certificate(handle_, cert.p);
+    if (result == 0 || ::ERR_peek_error() != 0)
+    {
+      ec = boost::system::error_code(
+          static_cast<int>(::ERR_get_error()),
+          boost::asio::error::get_ssl_category());
+      return ec;
+    }
+
+    if (handle_->extra_certs)
+    {
+      ::sk_X509_pop_free(handle_->extra_certs, X509_free);
+      handle_->extra_certs = 0;
+    }
+
+    while (X509* cacert = ::PEM_read_bio_X509(bio.p, 0,
+          handle_->default_passwd_callback,
+          handle_->default_passwd_callback_userdata))
+    {
+      if (!::SSL_CTX_add_extra_chain_cert(handle_, cacert))
+      {
+        ec = boost::system::error_code(
+            static_cast<int>(::ERR_get_error()),
+            boost::asio::error::get_ssl_category());
+        return ec;
+      }
+    }
+  
+    result = ::ERR_peek_last_error();
+    if ((ERR_GET_LIB(result) == ERR_LIB_PEM)
+        && (ERR_GET_REASON(result) == PEM_R_NO_START_LINE))
+    {
+      ::ERR_clear_error();
+      ec = boost::system::error_code();
+      return ec;
+    }
+  }
+
+  ec = boost::system::error_code(
+      static_cast<int>(::ERR_get_error()),
+      boost::asio::error::get_ssl_category());
+  return ec;
+}
+
+void context::use_certificate_chain_file(const std::string& filename)
+{
+  boost::system::error_code ec;
+  use_certificate_chain_file(filename, ec);
+  boost::asio::detail::throw_error(ec, "use_certificate_chain_file");
+}
+
+boost::system::error_code context::use_certificate_chain_file(
+    const std::string& filename, boost::system::error_code& ec)
+{
+  if (::SSL_CTX_use_certificate_chain_file(handle_, filename.c_str()) != 1)
+  {
+    ec = boost::system::error_code(
+        static_cast<int>(::ERR_get_error()),
+        boost::asio::error::get_ssl_category());
+    return ec;
+  }
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+void context::use_private_key(
+    const const_buffer& private_key, context::file_format format)
+{
+  boost::system::error_code ec;
+  use_private_key(private_key, format, ec);
+  boost::asio::detail::throw_error(ec, "use_private_key");
+}
+
+boost::system::error_code context::use_private_key(
+    const const_buffer& private_key, context::file_format format,
+    boost::system::error_code& ec)
+{
+  ::ERR_clear_error();
+
+  bio_cleanup bio = { make_buffer_bio(private_key) };
+  if (bio.p)
+  {
+    evp_pkey_cleanup evp_private_key = { 0 };
+    switch (format)
+    {
+    case context_base::asn1:
+      evp_private_key.p = ::d2i_PrivateKey_bio(bio.p, 0);
+      break;
+    case context_base::pem:
+      evp_private_key.p = ::PEM_read_bio_PrivateKey(bio.p, 0, 0, 0);
+      break;
+    default:
+      {
+        ec = boost::asio::error::invalid_argument;
+        return ec;
+      }
+    }
+
+    if (evp_private_key.p)
+    {
+      if (::SSL_CTX_use_PrivateKey(handle_, evp_private_key.p) == 1)
+      {
+        ec = boost::system::error_code();
+        return ec;
+      }
+    }
+  }
+
+  ec = boost::system::error_code(
+      static_cast<int>(::ERR_get_error()),
+      boost::asio::error::get_ssl_category());
+  return ec;
+}
+
+void context::use_private_key_file(
+    const std::string& filename, context::file_format format)
+{
+  boost::system::error_code ec;
+  use_private_key_file(filename, format, ec);
+  boost::asio::detail::throw_error(ec, "use_private_key_file");
+}
+
+void context::use_rsa_private_key(
+    const const_buffer& private_key, context::file_format format)
+{
+  boost::system::error_code ec;
+  use_rsa_private_key(private_key, format, ec);
+  boost::asio::detail::throw_error(ec, "use_rsa_private_key");
+}
+
+boost::system::error_code context::use_rsa_private_key(
+    const const_buffer& private_key, context::file_format format,
+    boost::system::error_code& ec)
+{
+  ::ERR_clear_error();
+
+  bio_cleanup bio = { make_buffer_bio(private_key) };
+  if (bio.p)
+  {
+    rsa_cleanup rsa_private_key = { 0 };
+    switch (format)
+    {
+    case context_base::asn1:
+      rsa_private_key.p = ::d2i_RSAPrivateKey_bio(bio.p, 0);
+      break;
+    case context_base::pem:
+      rsa_private_key.p = ::PEM_read_bio_RSAPrivateKey(bio.p, 0, 0, 0);
+      break;
+    default:
+      {
+        ec = boost::asio::error::invalid_argument;
+        return ec;
+      }
+    }
+
+    if (rsa_private_key.p)
+    {
+      if (::SSL_CTX_use_RSAPrivateKey(handle_, rsa_private_key.p) == 1)
+      {
+        ec = boost::system::error_code();
+        return ec;
+      }
+    }
+  }
+
+  ec = boost::system::error_code(
+      static_cast<int>(::ERR_get_error()),
+      boost::asio::error::get_ssl_category());
+  return ec;
+}
+
+boost::system::error_code context::use_private_key_file(
+    const std::string& filename, context::file_format format,
+    boost::system::error_code& ec)
+{
+  int file_type;
+  switch (format)
+  {
+  case context_base::asn1:
+    file_type = SSL_FILETYPE_ASN1;
+    break;
+  case context_base::pem:
+    file_type = SSL_FILETYPE_PEM;
+    break;
+  default:
+    {
+      ec = boost::asio::error::invalid_argument;
+      return ec;
+    }
+  }
+
+  if (::SSL_CTX_use_PrivateKey_file(handle_, filename.c_str(), file_type) != 1)
+  {
+    ec = boost::system::error_code(
+        static_cast<int>(::ERR_get_error()),
+        boost::asio::error::get_ssl_category());
+    return ec;
+  }
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+void context::use_rsa_private_key_file(
+    const std::string& filename, context::file_format format)
+{
+  boost::system::error_code ec;
+  use_rsa_private_key_file(filename, format, ec);
+  boost::asio::detail::throw_error(ec, "use_rsa_private_key_file");
+}
+
+boost::system::error_code context::use_rsa_private_key_file(
+    const std::string& filename, context::file_format format,
+    boost::system::error_code& ec)
+{
+  int file_type;
+  switch (format)
+  {
+  case context_base::asn1:
+    file_type = SSL_FILETYPE_ASN1;
+    break;
+  case context_base::pem:
+    file_type = SSL_FILETYPE_PEM;
+    break;
+  default:
+    {
+      ec = boost::asio::error::invalid_argument;
+      return ec;
+    }
+  }
+
+  if (::SSL_CTX_use_RSAPrivateKey_file(
+        handle_, filename.c_str(), file_type) != 1)
+  {
+    ec = boost::system::error_code(
+        static_cast<int>(::ERR_get_error()),
+        boost::asio::error::get_ssl_category());
+    return ec;
+  }
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+void context::use_tmp_dh(const const_buffer& dh)
+{
+  boost::system::error_code ec;
+  use_tmp_dh(dh, ec);
+  boost::asio::detail::throw_error(ec, "use_tmp_dh");
+}
+
+boost::system::error_code context::use_tmp_dh(
+    const const_buffer& dh, boost::system::error_code& ec)
+{
+  bio_cleanup bio = { make_buffer_bio(dh) };
+  if (bio.p)
+  {
+    return do_use_tmp_dh(bio.p, ec);
+  }
+
+  ec = boost::system::error_code(
+      static_cast<int>(::ERR_get_error()),
+      boost::asio::error::get_ssl_category());
+  return ec;
+}
+
+void context::use_tmp_dh_file(const std::string& filename)
+{
+  boost::system::error_code ec;
+  use_tmp_dh_file(filename, ec);
+  boost::asio::detail::throw_error(ec, "use_tmp_dh_file");
+}
+
+boost::system::error_code context::use_tmp_dh_file(
+    const std::string& filename, boost::system::error_code& ec)
+{
+  bio_cleanup bio = { ::BIO_new_file(filename.c_str(), "r") };
+  if (bio.p)
+  {
+    return do_use_tmp_dh(bio.p, ec);
+  }
+
+  ec = boost::system::error_code(
+      static_cast<int>(::ERR_get_error()),
+      boost::asio::error::get_ssl_category());
+  return ec;
+}
+
+boost::system::error_code context::do_use_tmp_dh(
+    BIO* bio, boost::system::error_code& ec)
+{
+  ::ERR_clear_error();
+
+  dh_cleanup dh = { ::PEM_read_bio_DHparams(bio, 0, 0, 0) };
+  if (dh.p)
+  {
+    if (::SSL_CTX_set_tmp_dh(handle_, dh.p) == 1)
+    {
+      ec = boost::system::error_code();
+      return ec;
+    }
+  }
+
+  ec = boost::system::error_code(
+      static_cast<int>(::ERR_get_error()),
+      boost::asio::error::get_ssl_category());
+  return ec;
+}
+
+boost::system::error_code context::do_set_verify_callback(
+    detail::verify_callback_base* callback, boost::system::error_code& ec)
+{
+  if (SSL_CTX_get_app_data(handle_))
+  {
+    delete static_cast<detail::verify_callback_base*>(
+        SSL_CTX_get_app_data(handle_));
+  }
+
+  SSL_CTX_set_app_data(handle_, callback);
+
+  ::SSL_CTX_set_verify(handle_,
+      ::SSL_CTX_get_verify_mode(handle_),
+      &context::verify_callback_function);
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+int context::verify_callback_function(int preverified, X509_STORE_CTX* ctx)
+{
+  if (ctx)
+  {
+    if (SSL* ssl = static_cast<SSL*>(
+          ::X509_STORE_CTX_get_ex_data(
+            ctx, ::SSL_get_ex_data_X509_STORE_CTX_idx())))
+    {
+      if (SSL_CTX* handle = ::SSL_get_SSL_CTX(ssl))
+      {
+        if (SSL_CTX_get_app_data(handle))
+        {
+          detail::verify_callback_base* callback =
+            static_cast<detail::verify_callback_base*>(
+                SSL_CTX_get_app_data(handle));
+
+          verify_context verify_ctx(ctx);
+          return callback->call(preverified != 0, verify_ctx) ? 1 : 0;
+        }
+      }
+    }
+  }
+
+  return 0;
+}
+
+boost::system::error_code context::do_set_password_callback(
+    detail::password_callback_base* callback, boost::system::error_code& ec)
+{
+  if (handle_->default_passwd_callback_userdata)
+    delete static_cast<detail::password_callback_base*>(
+        handle_->default_passwd_callback_userdata);
+
+  handle_->default_passwd_callback_userdata = callback;
+
+  SSL_CTX_set_default_passwd_cb(handle_, &context::password_callback_function);
+
+  ec = boost::system::error_code();
+  return ec;
+}
+
+int context::password_callback_function(
+    char* buf, int size, int purpose, void* data)
+{
+  using namespace std; // For strncat and strlen.
+
+  if (data)
+  {
+    detail::password_callback_base* callback =
+      static_cast<detail::password_callback_base*>(data);
+
+    std::string passwd = callback->call(static_cast<std::size_t>(size),
+        purpose ? context_base::for_writing : context_base::for_reading);
+
+#if defined(BOOST_ASIO_HAS_SECURE_RTL)
+    strcpy_s(buf, size, passwd.c_str());
+#else // defined(BOOST_ASIO_HAS_SECURE_RTL)
+    *buf = '\0';
+    strncat(buf, passwd.c_str(), size);
+#endif // defined(BOOST_ASIO_HAS_SECURE_RTL)
+
+    return static_cast<int>(strlen(buf));
+  }
+
+  return 0;
+}
+
+BIO* context::make_buffer_bio(const const_buffer& b)
+{
+  return ::BIO_new_mem_buf(
+      const_cast<void*>(buffer_cast<const void*>(b)),
+      static_cast<int>(buffer_size(b)));
+}
+
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_IMPL_CONTEXT_IPP
diff --git a/ext/patches/boost/asio/ssl/impl/error.ipp b/ext/patches/boost/asio/ssl/impl/error.ipp
new file mode 100644
index 0000000..c85c9ed
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/impl/error.ipp
@@ -0,0 +1,59 @@
+//
+// ssl/impl/error.ipp
+// ~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_IMPL_ERROR_IPP
+#define BOOST_ASIO_SSL_IMPL_ERROR_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/ssl/error.hpp>
+#include <boost/asio/ssl/detail/openssl_init.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace error {
+
+namespace detail {
+
+class ssl_category : public boost::system::error_category
+{
+public:
+  const char* name() const BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT
+  {
+    return "asio.ssl";
+  }
+
+  std::string message(int value) const
+  {
+    const char* s = ::ERR_reason_error_string(value);
+    return s ? s : "asio.ssl error";
+  }
+};
+
+} // namespace detail
+
+const boost::system::error_category& get_ssl_category()
+{
+  static detail::ssl_category instance;
+  return instance;
+}
+
+} // namespace error
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_IMPL_ERROR_IPP
diff --git a/ext/patches/boost/asio/ssl/impl/rfc2818_verification.ipp b/ext/patches/boost/asio/ssl/impl/rfc2818_verification.ipp
new file mode 100644
index 0000000..e036204
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/impl/rfc2818_verification.ipp
@@ -0,0 +1,168 @@
+//
+// ssl/impl/rfc2818_verification.ipp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_IMPL_RFC2818_VERIFICATION_IPP
+#define BOOST_ASIO_SSL_IMPL_RFC2818_VERIFICATION_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <cctype>
+# include <cstring>
+# include <boost/asio/ip/address.hpp>
+# include <boost/asio/ssl/rfc2818_verification.hpp>
+# include <boost/asio/ssl/detail/openssl_types.hpp>
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+bool rfc2818_verification::operator()(
+    bool preverified, verify_context& ctx) const
+{
+  using namespace std; // For memcmp.
+
+  // Don't bother looking at certificates that have failed pre-verification.
+  if (!preverified)
+    return false;
+
+  // We're only interested in checking the certificate at the end of the chain.
+  int depth = X509_STORE_CTX_get_error_depth(ctx.native_handle());
+  if (depth > 0)
+    return true;
+
+  // Try converting the host name to an address. If it is an address then we
+  // need to look for an IP address in the certificate rather than a host name.
+  boost::system::error_code ec;
+  ip::address address = ip::address::from_string(host_, ec);
+  bool is_address = !ec;
+
+  X509* cert = X509_STORE_CTX_get_current_cert(ctx.native_handle());
+
+  // Go through the alternate names in the certificate looking for matching DNS
+  // or IP address entries.
+  GENERAL_NAMES* gens = static_cast<GENERAL_NAMES*>(
+      X509_get_ext_d2i(cert, NID_subject_alt_name, 0, 0));
+  for (int i = 0; i < sk_GENERAL_NAME_num(gens); ++i)
+  {
+    GENERAL_NAME* gen = sk_GENERAL_NAME_value(gens, i);
+    if (gen->type == GEN_DNS && !is_address)
+    {
+      ASN1_IA5STRING* domain = gen->d.dNSName;
+      if (domain->type == V_ASN1_IA5STRING && domain->data && domain->length)
+      {
+        const char* pattern = reinterpret_cast<const char*>(domain->data);
+        std::size_t pattern_length = domain->length;
+        if (match_pattern(pattern, pattern_length, host_.c_str()))
+        {
+          GENERAL_NAMES_free(gens);
+          return true;
+        }
+      }
+    }
+    else if (gen->type == GEN_IPADD && is_address)
+    {
+      ASN1_OCTET_STRING* ip_address = gen->d.iPAddress;
+      if (ip_address->type == V_ASN1_OCTET_STRING && ip_address->data)
+      {
+        if (address.is_v4() && ip_address->length == 4)
+        {
+          ip::address_v4::bytes_type bytes = address.to_v4().to_bytes();
+          if (memcmp(bytes.data(), ip_address->data, 4) == 0)
+          {
+            GENERAL_NAMES_free(gens);
+            return true;
+          }
+        }
+        else if (address.is_v6() && ip_address->length == 16)
+        {
+          ip::address_v6::bytes_type bytes = address.to_v6().to_bytes();
+          if (memcmp(bytes.data(), ip_address->data, 16) == 0)
+          {
+            GENERAL_NAMES_free(gens);
+            return true;
+          }
+        }
+      }
+    }
+  }
+  GENERAL_NAMES_free(gens);
+
+  // No match in the alternate names, so try the common names. We should only
+  // use the "most specific" common name, which is the last one in the list.
+  X509_NAME* name = X509_get_subject_name(cert);
+  int i = -1;
+  ASN1_STRING* common_name = 0;
+  while ((i = X509_NAME_get_index_by_NID(name, NID_commonName, i)) >= 0)
+  {
+    X509_NAME_ENTRY* name_entry = X509_NAME_get_entry(name, i);
+    common_name = X509_NAME_ENTRY_get_data(name_entry);
+  }
+  if (common_name && common_name->data && common_name->length)
+  {
+    const char* pattern = reinterpret_cast<const char*>(common_name->data);
+    std::size_t pattern_length = common_name->length;
+    if (match_pattern(pattern, pattern_length, host_.c_str()))
+      return true;
+  }
+
+  return false;
+}
+
+bool rfc2818_verification::match_pattern(const char* pattern,
+    std::size_t pattern_length, const char* host)
+{
+  using namespace std; // For tolower.
+
+  const char* p = pattern;
+  const char* p_end = p + pattern_length;
+  const char* h = host;
+
+  while (p != p_end && *h)
+  {
+    if (*p == '*')
+    {
+      ++p;
+      while (*h && *h != '.')
+        if (match_pattern(p, p_end - p, h++))
+          return true;
+    }
+    else if (tolower(*p) == tolower(*h))
+    {
+      ++p;
+      ++h;
+    }
+    else
+    {
+      return false;
+    }
+  }
+
+  return p == p_end && !*h;
+}
+
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_IMPL_RFC2818_VERIFICATION_IPP
diff --git a/ext/patches/boost/asio/ssl/impl/src.hpp b/ext/patches/boost/asio/ssl/impl/src.hpp
new file mode 100644
index 0000000..175e3d6
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/impl/src.hpp
@@ -0,0 +1,28 @@
+//
+// impl/ssl/src.hpp
+// ~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_IMPL_SRC_HPP
+#define BOOST_ASIO_SSL_IMPL_SRC_HPP
+
+#define BOOST_ASIO_SOURCE
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# error Do not compile Asio library source with BOOST_ASIO_HEADER_ONLY defined
+#endif
+
+#include <boost/asio/ssl/impl/context.ipp>
+#include <boost/asio/ssl/impl/error.ipp>
+#include <boost/asio/ssl/detail/impl/engine.ipp>
+#include <boost/asio/ssl/detail/impl/openssl_init.ipp>
+#include <boost/asio/ssl/impl/rfc2818_verification.ipp>
+
+#endif // BOOST_ASIO_SSL_IMPL_SRC_HPP
diff --git a/ext/patches/boost/asio/ssl/old/basic_context.hpp b/ext/patches/boost/asio/ssl/old/basic_context.hpp
new file mode 100644
index 0000000..f2c54a1
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/old/basic_context.hpp
@@ -0,0 +1,436 @@
+//
+// ssl/old/basic_context.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_OLD_BASIC_CONTEXT_HPP
+#define BOOST_ASIO_SSL_OLD_BASIC_CONTEXT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <string>
+#include <boost/noncopyable.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ssl/context_base.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace old {
+
+/// SSL context.
+template <typename Service>
+class basic_context
+  : public context_base,
+    private boost::noncopyable
+{
+public:
+  /// The type of the service that will be used to provide context operations.
+  typedef Service service_type;
+
+  /// The native implementation type of the SSL context.
+  typedef typename service_type::impl_type impl_type;
+
+  /// Constructor.
+  basic_context(boost::asio::io_service& io_service, method m)
+    : service_(boost::asio::use_service<Service>(io_service)),
+      impl_(service_.null())
+  {
+    service_.create(impl_, m);
+  }
+
+  /// Destructor.
+  ~basic_context()
+  {
+    service_.destroy(impl_);
+  }
+
+  /// Get the underlying implementation in the native type.
+  /**
+   * This function may be used to obtain the underlying implementation of the
+   * context. This is intended to allow access to context functionality that is
+   * not otherwise provided.
+   */
+  impl_type impl()
+  {
+    return impl_;
+  }
+
+  /// Set options on the context.
+  /**
+   * This function may be used to configure the SSL options used by the context.
+   *
+   * @param o A bitmask of options. The available option values are defined in
+   * the context_base class. The options are bitwise-ored with any existing
+   * value for the options.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void set_options(options o)
+  {
+    boost::system::error_code ec;
+    service_.set_options(impl_, o, ec);
+    boost::asio::detail::throw_error(ec);
+  }
+
+  /// Set options on the context.
+  /**
+   * This function may be used to configure the SSL options used by the context.
+   *
+   * @param o A bitmask of options. The available option values are defined in
+   * the context_base class. The options are bitwise-ored with any existing
+   * value for the options.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code set_options(options o,
+      boost::system::error_code& ec)
+  {
+    return service_.set_options(impl_, o, ec);
+  }
+
+  /// Set the peer verification mode.
+  /**
+   * This function may be used to configure the peer verification mode used by
+   * the context.
+   *
+   * @param v A bitmask of peer verification modes. The available verify_mode
+   * values are defined in the context_base class.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void set_verify_mode(verify_mode v)
+  {
+    boost::system::error_code ec;
+    service_.set_verify_mode(impl_, v, ec);
+    boost::asio::detail::throw_error(ec);
+  }
+
+  /// Set the peer verification mode.
+  /**
+   * This function may be used to configure the peer verification mode used by
+   * the context.
+   *
+   * @param v A bitmask of peer verification modes. The available verify_mode
+   * values are defined in the context_base class.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code set_verify_mode(verify_mode v,
+      boost::system::error_code& ec)
+  {
+    return service_.set_verify_mode(impl_, v, ec);
+  }
+
+  /// Load a certification authority file for performing verification.
+  /**
+   * This function is used to load one or more trusted certification authorities
+   * from a file.
+   *
+   * @param filename The name of a file containing certification authority
+   * certificates in PEM format.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void load_verify_file(const std::string& filename)
+  {
+    boost::system::error_code ec;
+    service_.load_verify_file(impl_, filename, ec);
+    boost::asio::detail::throw_error(ec);
+  }
+
+  /// Load a certification authority file for performing verification.
+  /**
+   * This function is used to load the certificates for one or more trusted
+   * certification authorities from a file.
+   *
+   * @param filename The name of a file containing certification authority
+   * certificates in PEM format.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code load_verify_file(const std::string& filename,
+      boost::system::error_code& ec)
+  {
+    return service_.load_verify_file(impl_, filename, ec);
+  }
+
+  /// Add a directory containing certificate authority files to be used for
+  /// performing verification.
+  /**
+   * This function is used to specify the name of a directory containing
+   * certification authority certificates. Each file in the directory must
+   * contain a single certificate. The files must be named using the subject
+   * name's hash and an extension of ".0".
+   *
+   * @param path The name of a directory containing the certificates.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void add_verify_path(const std::string& path)
+  {
+    boost::system::error_code ec;
+    service_.add_verify_path(impl_, path, ec);
+    boost::asio::detail::throw_error(ec);
+  }
+
+  /// Add a directory containing certificate authority files to be used for
+  /// performing verification.
+  /**
+   * This function is used to specify the name of a directory containing
+   * certification authority certificates. Each file in the directory must
+   * contain a single certificate. The files must be named using the subject
+   * name's hash and an extension of ".0".
+   *
+   * @param path The name of a directory containing the certificates.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code add_verify_path(const std::string& path,
+      boost::system::error_code& ec)
+  {
+    return service_.add_verify_path(impl_, path, ec);
+  }
+
+  /// Use a certificate from a file.
+  /**
+   * This function is used to load a certificate into the context from a file.
+   *
+   * @param filename The name of the file containing the certificate.
+   *
+   * @param format The file format (ASN.1 or PEM).
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void use_certificate_file(const std::string& filename, file_format format)
+  {
+    boost::system::error_code ec;
+    service_.use_certificate_file(impl_, filename, format, ec);
+    boost::asio::detail::throw_error(ec);
+  }
+
+  /// Use a certificate from a file.
+  /**
+   * This function is used to load a certificate into the context from a file.
+   *
+   * @param filename The name of the file containing the certificate.
+   *
+   * @param format The file format (ASN.1 or PEM).
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code use_certificate_file(const std::string& filename,
+      file_format format, boost::system::error_code& ec)
+  {
+    return service_.use_certificate_file(impl_, filename, format, ec);
+  }
+
+  /// Use a certificate chain from a file.
+  /**
+   * This function is used to load a certificate chain into the context from a
+   * file.
+   *
+   * @param filename The name of the file containing the certificate. The file
+   * must use the PEM format.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void use_certificate_chain_file(const std::string& filename)
+  {
+    boost::system::error_code ec;
+    service_.use_certificate_chain_file(impl_, filename, ec);
+    boost::asio::detail::throw_error(ec);
+  }
+
+  /// Use a certificate chain from a file.
+  /**
+   * This function is used to load a certificate chain into the context from a
+   * file.
+   *
+   * @param filename The name of the file containing the certificate. The file
+   * must use the PEM format.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code use_certificate_chain_file(
+      const std::string& filename, boost::system::error_code& ec)
+  {
+    return service_.use_certificate_chain_file(impl_, filename, ec);
+  }
+
+  /// Use a private key from a file.
+  /**
+   * This function is used to load a private key into the context from a file.
+   *
+   * @param filename The name of the file containing the private key.
+   *
+   * @param format The file format (ASN.1 or PEM).
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void use_private_key_file(const std::string& filename, file_format format)
+  {
+    boost::system::error_code ec;
+    service_.use_private_key_file(impl_, filename, format, ec);
+    boost::asio::detail::throw_error(ec);
+  }
+
+  /// Use a private key from a file.
+  /**
+   * This function is used to load a private key into the context from a file.
+   *
+   * @param filename The name of the file containing the private key.
+   *
+   * @param format The file format (ASN.1 or PEM).
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code use_private_key_file(const std::string& filename,
+      file_format format, boost::system::error_code& ec)
+  {
+    return service_.use_private_key_file(impl_, filename, format, ec);
+  }
+
+  /// Use an RSA private key from a file.
+  /**
+   * This function is used to load an RSA private key into the context from a
+   * file.
+   *
+   * @param filename The name of the file containing the RSA private key.
+   *
+   * @param format The file format (ASN.1 or PEM).
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void use_rsa_private_key_file(const std::string& filename, file_format format)
+  {
+    boost::system::error_code ec;
+    service_.use_rsa_private_key_file(impl_, filename, format, ec);
+    boost::asio::detail::throw_error(ec);
+  }
+
+  /// Use an RSA private key from a file.
+  /**
+   * This function is used to load an RSA private key into the context from a
+   * file.
+   *
+   * @param filename The name of the file containing the RSA private key.
+   *
+   * @param format The file format (ASN.1 or PEM).
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code use_rsa_private_key_file(
+      const std::string& filename, file_format format,
+      boost::system::error_code& ec)
+  {
+    return service_.use_rsa_private_key_file(impl_, filename, format, ec);
+  }
+
+  /// Use the specified file to obtain the temporary Diffie-Hellman parameters.
+  /**
+   * This function is used to load Diffie-Hellman parameters into the context
+   * from a file.
+   *
+   * @param filename The name of the file containing the Diffie-Hellman
+   * parameters. The file must use the PEM format.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void use_tmp_dh_file(const std::string& filename)
+  {
+    boost::system::error_code ec;
+    service_.use_tmp_dh_file(impl_, filename, ec);
+    boost::asio::detail::throw_error(ec);
+  }
+
+  /// Use the specified file to obtain the temporary Diffie-Hellman parameters.
+  /**
+   * This function is used to load Diffie-Hellman parameters into the context
+   * from a file.
+   *
+   * @param filename The name of the file containing the Diffie-Hellman
+   * parameters. The file must use the PEM format.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code use_tmp_dh_file(const std::string& filename,
+      boost::system::error_code& ec)
+  {
+    return service_.use_tmp_dh_file(impl_, filename, ec);
+  }
+
+  /// Set the password callback.
+  /**
+   * This function is used to specify a callback function to obtain password
+   * information about an encrypted key in PEM format.
+   *
+   * @param callback The function object to be used for obtaining the password.
+   * The function signature of the handler must be:
+   * @code std::string password_callback(
+   *   std::size_t max_length,  // The maximum size for a password.
+   *   password_purpose purpose // Whether password is for reading or writing.
+   * ); @endcode
+   * The return value of the callback is a string containing the password.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  template <typename PasswordCallback>
+  void set_password_callback(PasswordCallback callback)
+  {
+    boost::system::error_code ec;
+    service_.set_password_callback(impl_, callback, ec);
+    boost::asio::detail::throw_error(ec);
+  }
+
+  /// Set the password callback.
+  /**
+   * This function is used to specify a callback function to obtain password
+   * information about an encrypted key in PEM format.
+   *
+   * @param callback The function object to be used for obtaining the password.
+   * The function signature of the handler must be:
+   * @code std::string password_callback(
+   *   std::size_t max_length,  // The maximum size for a password.
+   *   password_purpose purpose // Whether password is for reading or writing.
+   * ); @endcode
+   * The return value of the callback is a string containing the password.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  template <typename PasswordCallback>
+  boost::system::error_code set_password_callback(PasswordCallback callback,
+      boost::system::error_code& ec)
+  {
+    return service_.set_password_callback(impl_, callback, ec);
+  }
+
+private:
+  /// The backend service implementation.
+  service_type& service_;
+
+  /// The underlying native implementation.
+  impl_type impl_;
+};
+
+} // namespace old
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_OLD_BASIC_CONTEXT_HPP
diff --git a/ext/patches/boost/asio/ssl/old/context_service.hpp b/ext/patches/boost/asio/ssl/old/context_service.hpp
new file mode 100644
index 0000000..1915792
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/old/context_service.hpp
@@ -0,0 +1,176 @@
+//
+// ssl/old/context_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_OLD_CONTEXT_SERVICE_HPP
+#define BOOST_ASIO_SSL_OLD_CONTEXT_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <string>
+#include <boost/noncopyable.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ssl/context_base.hpp>
+#include <boost/asio/ssl/old/detail/openssl_context_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace old {
+
+/// Default service implementation for a context.
+class context_service
+#if defined(GENERATING_DOCUMENTATION)
+  : public boost::asio::io_service::service
+#else
+  : public boost::asio::detail::service_base<context_service>
+#endif
+{
+private:
+  // The type of the platform-specific implementation.
+  typedef old::detail::openssl_context_service service_impl_type;
+
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The unique service identifier.
+  static boost::asio::io_service::id id;
+#endif
+
+  /// The type of the context.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined impl_type;
+#else
+  typedef service_impl_type::impl_type impl_type;
+#endif
+
+  /// Constructor.
+  explicit context_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<context_service>(io_service),
+      service_impl_(boost::asio::use_service<service_impl_type>(io_service))
+  {
+  }
+
+  /// Return a null context implementation.
+  impl_type null() const
+  {
+    return service_impl_.null();
+  }
+
+  /// Create a new context implementation.
+  void create(impl_type& impl, context_base::method m)
+  {
+    service_impl_.create(impl, m);
+  }
+
+  /// Destroy a context implementation.
+  void destroy(impl_type& impl)
+  {
+    service_impl_.destroy(impl);
+  }
+
+  /// Set options on the context.
+  boost::system::error_code set_options(impl_type& impl,
+      context_base::options o, boost::system::error_code& ec)
+  {
+    return service_impl_.set_options(impl, o, ec);
+  }
+
+  /// Set peer verification mode.
+  boost::system::error_code set_verify_mode(impl_type& impl,
+      context_base::verify_mode v, boost::system::error_code& ec)
+  {
+    return service_impl_.set_verify_mode(impl, v, ec);
+  }
+
+  /// Load a certification authority file for performing verification.
+  boost::system::error_code load_verify_file(impl_type& impl,
+      const std::string& filename, boost::system::error_code& ec)
+  {
+    return service_impl_.load_verify_file(impl, filename, ec);
+  }
+
+  /// Add a directory containing certification authority files to be used for
+  /// performing verification.
+  boost::system::error_code add_verify_path(impl_type& impl,
+      const std::string& path, boost::system::error_code& ec)
+  {
+    return service_impl_.add_verify_path(impl, path, ec);
+  }
+
+  /// Use a certificate from a file.
+  boost::system::error_code use_certificate_file(impl_type& impl,
+      const std::string& filename, context_base::file_format format,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.use_certificate_file(impl, filename, format, ec);
+  }
+
+  /// Use a certificate chain from a file.
+  boost::system::error_code use_certificate_chain_file(impl_type& impl,
+      const std::string& filename, boost::system::error_code& ec)
+  {
+    return service_impl_.use_certificate_chain_file(impl, filename, ec);
+  }
+
+  /// Use a private key from a file.
+  boost::system::error_code use_private_key_file(impl_type& impl,
+      const std::string& filename, context_base::file_format format,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.use_private_key_file(impl, filename, format, ec);
+  }
+
+  /// Use an RSA private key from a file.
+  boost::system::error_code use_rsa_private_key_file(impl_type& impl,
+      const std::string& filename, context_base::file_format format,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.use_rsa_private_key_file(impl, filename, format, ec);
+  }
+
+  /// Use the specified file to obtain the temporary Diffie-Hellman parameters.
+  boost::system::error_code use_tmp_dh_file(impl_type& impl,
+      const std::string& filename, boost::system::error_code& ec)
+  {
+    return service_impl_.use_tmp_dh_file(impl, filename, ec);
+  }
+
+  /// Set the password callback.
+  template <typename PasswordCallback>
+  boost::system::error_code set_password_callback(impl_type& impl,
+      PasswordCallback callback, boost::system::error_code& ec)
+  {
+    return service_impl_.set_password_callback(impl, callback, ec);
+  }
+
+private:
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+  }
+
+  // The service that provides the platform-specific implementation.
+  service_impl_type& service_impl_;
+};
+
+} // namespace old
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_OLD_CONTEXT_SERVICE_HPP
diff --git a/ext/patches/boost/asio/ssl/old/detail/openssl_context_service.hpp b/ext/patches/boost/asio/ssl/old/detail/openssl_context_service.hpp
new file mode 100644
index 0000000..0f3ddbb
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/old/detail/openssl_context_service.hpp
@@ -0,0 +1,388 @@
+//
+// ssl/old/detail/openssl_context_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_OLD_DETAIL_OPENSSL_CONTEXT_SERVICE_HPP
+#define BOOST_ASIO_SSL_OLD_DETAIL_OPENSSL_CONTEXT_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstring>
+#include <string>
+#include <boost/function.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ssl/context_base.hpp>
+#include <boost/asio/ssl/detail/openssl_init.hpp>
+#include <boost/asio/ssl/detail/openssl_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace old {
+namespace detail {
+
+class openssl_context_service
+  : public boost::asio::detail::service_base<openssl_context_service>
+{
+public:
+  // The native type of the context.
+  typedef ::SSL_CTX* impl_type;
+
+  // The type for the password callback function object.
+  typedef boost::function<std::string(std::size_t,
+      context_base::password_purpose)> password_callback_type;
+
+  // Constructor.
+  openssl_context_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<openssl_context_service>(io_service)
+  {
+  }
+
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+  }
+
+  // Return a null context implementation.
+  static impl_type null()
+  {
+    return 0;
+  }
+
+  // Create a new context implementation.
+  void create(impl_type& impl, context_base::method m)
+  {
+    switch (m)
+    {
+#if defined(OPENSSL_NO_SSL2)
+    case context_base::sslv2:
+    case context_base::sslv2_client:
+    case context_base::sslv2_server:
+      boost::asio::detail::throw_error(boost::asio::error::invalid_argument);
+      break;
+#else // defined(OPENSSL_NO_SSL2)
+    case context_base::sslv2:
+      impl = ::SSL_CTX_new(::SSLv2_method());
+      break;
+    case context_base::sslv2_client:
+      impl = ::SSL_CTX_new(::SSLv2_client_method());
+      break;
+    case context_base::sslv2_server:
+      impl = ::SSL_CTX_new(::SSLv2_server_method());
+      break;
+#endif // defined(OPENSSL_NO_SSL2)
+    case context_base::sslv3:
+      impl = ::SSL_CTX_new(::SSLv3_method());
+      break;
+    case context_base::sslv3_client:
+      impl = ::SSL_CTX_new(::SSLv3_client_method());
+      break;
+    case context_base::sslv3_server:
+      impl = ::SSL_CTX_new(::SSLv3_server_method());
+      break;
+    case context_base::tlsv1:
+      impl = ::SSL_CTX_new(::TLSv1_method());
+      break;
+    case context_base::tlsv1_client:
+      impl = ::SSL_CTX_new(::TLSv1_client_method());
+      break;
+    case context_base::tlsv1_server:
+      impl = ::SSL_CTX_new(::TLSv1_server_method());
+      break;
+    case context_base::sslv23:
+      impl = ::SSL_CTX_new(::SSLv23_method());
+      break;
+    case context_base::sslv23_client:
+      impl = ::SSL_CTX_new(::SSLv23_client_method());
+      break;
+    case context_base::sslv23_server:
+      impl = ::SSL_CTX_new(::SSLv23_server_method());
+      break;
+    default:
+      impl = ::SSL_CTX_new(0);
+      break;
+    }
+  }
+
+  // Destroy a context implementation.
+  void destroy(impl_type& impl)
+  {
+    if (impl != null())
+    {
+      if (impl->default_passwd_callback_userdata)
+      {
+        password_callback_type* callback =
+          static_cast<password_callback_type*>(
+              impl->default_passwd_callback_userdata);
+        delete callback;
+        impl->default_passwd_callback_userdata = 0;
+      }
+
+      ::SSL_CTX_free(impl);
+      impl = null();
+    }
+  }
+
+  // Set options on the context.
+  boost::system::error_code set_options(impl_type& impl,
+      context_base::options o, boost::system::error_code& ec)
+  {
+    ::SSL_CTX_set_options(impl, o);
+
+    ec = boost::system::error_code();
+    return ec;
+  }
+
+  // Set peer verification mode.
+  boost::system::error_code set_verify_mode(impl_type& impl,
+      context_base::verify_mode v, boost::system::error_code& ec)
+  {
+    ::SSL_CTX_set_verify(impl, v, 0);
+
+    ec = boost::system::error_code();
+    return ec;
+  }
+
+  // Load a certification authority file for performing verification.
+  boost::system::error_code load_verify_file(impl_type& impl,
+      const std::string& filename, boost::system::error_code& ec)
+  {
+    if (::SSL_CTX_load_verify_locations(impl, filename.c_str(), 0) != 1)
+    {
+      ec = boost::asio::error::invalid_argument;
+      return ec;
+    }
+
+    ec = boost::system::error_code();
+    return ec;
+  }
+
+  // Add a directory containing certification authority files to be used for
+  // performing verification.
+  boost::system::error_code add_verify_path(impl_type& impl,
+      const std::string& path, boost::system::error_code& ec)
+  {
+    if (::SSL_CTX_load_verify_locations(impl, 0, path.c_str()) != 1)
+    {
+      ec = boost::asio::error::invalid_argument;
+      return ec;
+    }
+
+    ec = boost::system::error_code();
+    return ec;
+  }
+
+  // Use a certificate from a file.
+  boost::system::error_code use_certificate_file(impl_type& impl,
+      const std::string& filename, context_base::file_format format,
+      boost::system::error_code& ec)
+  {
+    int file_type;
+    switch (format)
+    {
+    case context_base::asn1:
+      file_type = SSL_FILETYPE_ASN1;
+      break;
+    case context_base::pem:
+      file_type = SSL_FILETYPE_PEM;
+      break;
+    default:
+      {
+        ec = boost::asio::error::invalid_argument;
+        return ec;
+      }
+    }
+
+    if (::SSL_CTX_use_certificate_file(impl, filename.c_str(), file_type) != 1)
+    {
+      ec = boost::asio::error::invalid_argument;
+      return ec;
+    }
+
+    ec = boost::system::error_code();
+    return ec;
+  }
+
+  // Use a certificate chain from a file.
+  boost::system::error_code use_certificate_chain_file(impl_type& impl,
+      const std::string& filename, boost::system::error_code& ec)
+  {
+    if (::SSL_CTX_use_certificate_chain_file(impl, filename.c_str()) != 1)
+    {
+      ec = boost::asio::error::invalid_argument;
+      return ec;
+    }
+
+    ec = boost::system::error_code();
+    return ec;
+  }
+
+  // Use a private key from a file.
+  boost::system::error_code use_private_key_file(impl_type& impl,
+      const std::string& filename, context_base::file_format format,
+      boost::system::error_code& ec)
+  {
+    int file_type;
+    switch (format)
+    {
+    case context_base::asn1:
+      file_type = SSL_FILETYPE_ASN1;
+      break;
+    case context_base::pem:
+      file_type = SSL_FILETYPE_PEM;
+      break;
+    default:
+      {
+        ec = boost::asio::error::invalid_argument;
+        return ec;
+      }
+    }
+
+    if (::SSL_CTX_use_PrivateKey_file(impl, filename.c_str(), file_type) != 1)
+    {
+      ec = boost::asio::error::invalid_argument;
+      return ec;
+    }
+
+    ec = boost::system::error_code();
+    return ec;
+  }
+
+  // Use an RSA private key from a file.
+  boost::system::error_code use_rsa_private_key_file(impl_type& impl,
+      const std::string& filename, context_base::file_format format,
+      boost::system::error_code& ec)
+  {
+    int file_type;
+    switch (format)
+    {
+    case context_base::asn1:
+      file_type = SSL_FILETYPE_ASN1;
+      break;
+    case context_base::pem:
+      file_type = SSL_FILETYPE_PEM;
+      break;
+    default:
+      {
+        ec = boost::asio::error::invalid_argument;
+        return ec;
+      }
+    }
+
+    if (::SSL_CTX_use_RSAPrivateKey_file(
+          impl, filename.c_str(), file_type) != 1)
+    {
+      ec = boost::asio::error::invalid_argument;
+      return ec;
+    }
+
+    ec = boost::system::error_code();
+    return ec;
+  }
+
+  // Use the specified file to obtain the temporary Diffie-Hellman parameters.
+  boost::system::error_code use_tmp_dh_file(impl_type& impl,
+      const std::string& filename, boost::system::error_code& ec)
+  {
+    ::BIO* bio = ::BIO_new_file(filename.c_str(), "r");
+    if (!bio)
+    {
+      ec = boost::asio::error::invalid_argument;
+      return ec;
+    }
+
+    ::DH* dh = ::PEM_read_bio_DHparams(bio, 0, 0, 0);
+    if (!dh)
+    {
+      ::BIO_free(bio);
+      ec = boost::asio::error::invalid_argument;
+      return ec;
+    }
+
+    ::BIO_free(bio);
+    int result = ::SSL_CTX_set_tmp_dh(impl, dh);
+    ::DH_free(dh);
+    if (result != 1)
+    {
+      ec = boost::asio::error::invalid_argument;
+      return ec;
+    }
+
+    ec = boost::system::error_code();
+    return ec;
+  }
+
+  static int password_callback(char* buf, int size, int purpose, void* data)
+  {
+    using namespace std; // For strncat and strlen.
+
+    if (data)
+    {
+      password_callback_type* callback =
+        static_cast<password_callback_type*>(data);
+      std::string passwd = (*callback)(static_cast<std::size_t>(size),
+          purpose ? context_base::for_writing : context_base::for_reading);
+      *buf = '\0';
+      strncat(buf, passwd.c_str(), size);
+      return strlen(buf);
+    }
+
+    return 0;
+  }
+
+  // Set the password callback.
+  template <typename Password_Callback>
+  boost::system::error_code set_password_callback(impl_type& impl,
+      Password_Callback callback, boost::system::error_code& ec)
+  {
+    // Allocate callback function object if not already present.
+    if (impl->default_passwd_callback_userdata)
+    {
+      password_callback_type* callback_function =
+        static_cast<password_callback_type*>(
+            impl->default_passwd_callback_userdata);
+      *callback_function = callback;
+    }
+    else
+    {
+      password_callback_type* callback_function =
+        new password_callback_type(callback);
+      impl->default_passwd_callback_userdata = callback_function;
+    }
+
+    // Set the password callback.
+    SSL_CTX_set_default_passwd_cb(impl,
+        &openssl_context_service::password_callback);
+
+    ec = boost::system::error_code();
+    return ec;
+  }
+
+private:
+  // Ensure openssl is initialised.
+  boost::asio::ssl::detail::openssl_init<> init_;
+};
+
+} // namespace detail
+} // namespace old
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_OLD_DETAIL_OPENSSL_CONTEXT_SERVICE_HPP
diff --git a/ext/patches/boost/asio/ssl/old/detail/openssl_operation.hpp b/ext/patches/boost/asio/ssl/old/detail/openssl_operation.hpp
new file mode 100644
index 0000000..3f6338c
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/old/detail/openssl_operation.hpp
@@ -0,0 +1,526 @@
+//
+// ssl/old/detail/openssl_operation.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_OLD_DETAIL_OPENSSL_OPERATION_HPP
+#define BOOST_ASIO_SSL_OLD_DETAIL_OPENSSL_OPERATION_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/function.hpp>
+#include <boost/bind.hpp>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/detail/assert.hpp>
+#include <boost/asio/detail/socket_ops.hpp>
+#include <boost/asio/placeholders.hpp>
+#include <boost/asio/ssl/detail/openssl_types.hpp>
+#include <boost/asio/ssl/error.hpp>
+#include <boost/asio/strand.hpp>
+#include <boost/system/system_error.hpp>
+#include <boost/asio/write.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace old {
+namespace detail {
+
+typedef boost::function<int (::SSL*)> ssl_primitive_func; 
+typedef boost::function<void (const boost::system::error_code&, int)>
+  user_handler_func;
+
+// Network send_/recv buffer implementation
+//
+//
+class net_buffer
+{
+  static const int  NET_BUF_SIZE = 16*1024 + 256; // SSL record size + spare
+
+  unsigned char buf_[NET_BUF_SIZE];
+  unsigned char* data_start_;
+  unsigned char* data_end_;
+
+public:
+  net_buffer()
+  {
+    data_start_ = data_end_ = buf_;
+  }
+  unsigned char* get_unused_start() { return data_end_; }
+  unsigned char* get_data_start() { return data_start_; }
+  size_t get_unused_len() { return (NET_BUF_SIZE - (data_end_ - buf_)); }    
+  size_t get_data_len() { return (data_end_ - data_start_); }    
+  void data_added(size_t count)
+  { 
+    data_end_ += count; 
+    data_end_ = data_end_ > (buf_ + NET_BUF_SIZE)? 
+      (buf_ + NET_BUF_SIZE):
+      data_end_; 
+  }
+  void data_removed(size_t count) 
+  { 
+    data_start_ += count; 
+    if (data_start_ >= data_end_) reset(); 
+  }
+  void reset() { data_start_ = buf_; data_end_ = buf_; }               
+  bool has_data() { return (data_start_ < data_end_); }
+}; // class net_buffer
+
+//
+// Operation class
+//
+//
+template <typename Stream>
+class openssl_operation
+{
+public:
+
+  // Constructor for asynchronous operations
+  openssl_operation(ssl_primitive_func primitive,
+                    Stream& socket,
+                    net_buffer& recv_buf,
+                    SSL* session,
+                    BIO* ssl_bio,
+                    user_handler_func  handler,
+                    boost::asio::io_service::strand& strand
+                    )
+    : primitive_(primitive)
+    , user_handler_(handler)
+    , strand_(&strand)
+    , recv_buf_(recv_buf)
+    , socket_(socket)
+    , ssl_bio_(ssl_bio)
+    , session_(session)
+  {
+    write_ = boost::bind(
+      &openssl_operation::do_async_write, 
+      this, boost::arg<1>(), boost::arg<2>()
+    );
+    read_ = boost::bind(
+      &openssl_operation::do_async_read, 
+      this
+    );
+    handler_= boost::bind(
+      &openssl_operation::async_user_handler, 
+      this, boost::arg<1>(), boost::arg<2>()
+    );
+  }
+
+  // Constructor for synchronous operations
+  openssl_operation(ssl_primitive_func primitive,
+                    Stream& socket,
+                    net_buffer& recv_buf,
+                    SSL* session,
+                    BIO* ssl_bio)
+    : primitive_(primitive)
+    , strand_(0)
+    , recv_buf_(recv_buf)
+    , socket_(socket)
+    , ssl_bio_(ssl_bio)
+    , session_(session)
+  {      
+    write_ = boost::bind(
+      &openssl_operation::do_sync_write, 
+      this, boost::arg<1>(), boost::arg<2>()
+    );
+    read_ = boost::bind(
+      &openssl_operation::do_sync_read, 
+      this
+    );
+    handler_ = boost::bind(
+      &openssl_operation::sync_user_handler, 
+      this, boost::arg<1>(), boost::arg<2>()
+      );
+  }
+
+  // Start operation
+  // In case of asynchronous it returns 0, in sync mode returns success code
+  // or throws an error...
+  int start()
+  {
+    int rc = primitive_( session_ );
+
+    bool is_operation_done = (rc > 0);  
+                // For connect/accept/shutdown, the operation
+                // is done, when return code is 1
+                // for write, it is done, when is retcode > 0
+                // for read, it is done when retcode > 0
+
+    int error_code =  !is_operation_done ?
+          ::SSL_get_error( session_, rc ) :
+          0;        
+    int sys_error_code = ERR_get_error();
+
+    if (error_code == SSL_ERROR_SSL)
+      return handler_(boost::system::error_code(
+            sys_error_code, boost::asio::error::get_ssl_category()), rc);
+
+    bool is_read_needed = (error_code == SSL_ERROR_WANT_READ);
+    bool is_write_needed = (error_code == SSL_ERROR_WANT_WRITE ||
+                              ::BIO_ctrl_pending( ssl_bio_ ));
+    bool is_shut_down_received = 
+      ((::SSL_get_shutdown( session_ ) & SSL_RECEIVED_SHUTDOWN) == 
+          SSL_RECEIVED_SHUTDOWN);
+    bool is_shut_down_sent = 
+      ((::SSL_get_shutdown( session_ ) & SSL_SENT_SHUTDOWN) ==
+            SSL_SENT_SHUTDOWN);
+
+    if (is_shut_down_sent && is_shut_down_received
+        && is_operation_done && !is_write_needed)
+      // SSL connection is shut down cleanly
+      return handler_(boost::system::error_code(), 1);
+
+    if (is_shut_down_received && !is_operation_done)
+      // Shutdown has been requested, while we were reading or writing...
+      // abort our action...
+      return handler_(boost::asio::error::shut_down, 0);
+
+    if (!is_operation_done && !is_read_needed && !is_write_needed 
+      && !is_shut_down_sent)
+    {
+      // The operation has failed... It is not completed and does 
+      // not want network communication nor does want to send shutdown out...
+      if (error_code == SSL_ERROR_SYSCALL)
+      {
+        return handler_(boost::system::error_code(
+              sys_error_code, boost::asio::error::system_category), rc); 
+      }
+      else
+      {
+        return handler_(boost::system::error_code(
+              sys_error_code, boost::asio::error::get_ssl_category()), rc); 
+      }
+    }
+
+    if (!is_operation_done && !is_write_needed)
+    {
+      // We may have left over data that we can pass to SSL immediately
+      if (recv_buf_.get_data_len() > 0)
+      {
+        // Pass the buffered data to SSL
+        int written = ::BIO_write
+        ( 
+          ssl_bio_, 
+          recv_buf_.get_data_start(), 
+          recv_buf_.get_data_len() 
+        );
+
+        if (written > 0)
+        {
+          recv_buf_.data_removed(written);
+        }
+        else if (written < 0)
+        {
+          if (!BIO_should_retry(ssl_bio_))
+          {
+            // Some serios error with BIO....
+            return handler_(boost::asio::error::no_recovery, 0);
+          }
+        }
+
+        return start();
+      }
+      else if (is_read_needed || (is_shut_down_sent && !is_shut_down_received))
+      {
+        return read_();
+      }
+    }
+
+    // Continue with operation, flush any SSL data out to network...
+    return write_(is_operation_done, rc); 
+  }
+
+// Private implementation
+private:
+  typedef boost::function<int (const boost::system::error_code&, int)>
+    int_handler_func;
+  typedef boost::function<int (bool, int)> write_func;
+  typedef boost::function<int ()> read_func;
+
+  ssl_primitive_func  primitive_;
+  user_handler_func  user_handler_;
+  boost::asio::io_service::strand* strand_;
+  write_func  write_;
+  read_func  read_;
+  int_handler_func handler_;
+    
+  net_buffer send_buf_; // buffers for network IO
+
+  // The recv buffer is owned by the stream, not the operation, since there can
+  // be left over bytes after passing the data up to the application, and these
+  // bytes need to be kept around for the next read operation issued by the
+  // application.
+  net_buffer& recv_buf_;
+
+  Stream& socket_;
+  BIO*    ssl_bio_;
+  SSL*    session_;
+
+  //
+  int sync_user_handler(const boost::system::error_code& error, int rc)
+  {
+    if (!error)
+      return rc;
+
+    throw boost::system::system_error(error);
+  }
+    
+  int async_user_handler(boost::system::error_code error, int rc)
+  {
+    if (rc < 0)
+    {
+      if (!error)
+        error = boost::asio::error::no_recovery;
+      rc = 0;
+    }
+
+    user_handler_(error, rc);
+    return 0;
+  }
+
+  // Writes bytes asynchronously from SSL to NET
+  int  do_async_write(bool is_operation_done, int rc) 
+  {
+    int len = ::BIO_ctrl_pending( ssl_bio_ );
+    if ( len )
+    { 
+      // There is something to write into net, do it...
+      len = (int)send_buf_.get_unused_len() > len? 
+        len: 
+        send_buf_.get_unused_len();
+        
+      if (len == 0)
+      {
+        // In case our send buffer is full, we have just to wait until 
+        // previous send to complete...
+        return 0;
+      }
+
+      // Read outgoing data from bio
+      len = ::BIO_read( ssl_bio_, send_buf_.get_unused_start(), len); 
+         
+      if (len > 0)
+      {
+        unsigned char *data_start = send_buf_.get_unused_start();
+        send_buf_.data_added(len);
+ 
+        BOOST_ASIO_ASSERT(strand_);
+        boost::asio::async_write
+        ( 
+          socket_, 
+          boost::asio::buffer(data_start, len),
+          strand_->wrap
+          (
+            boost::bind
+            (
+              &openssl_operation::async_write_handler, 
+              this, 
+              is_operation_done,
+              rc, 
+              boost::asio::placeholders::error, 
+              boost::asio::placeholders::bytes_transferred
+            )
+          )
+        );
+                  
+        return 0;
+      }
+      else if (!BIO_should_retry(ssl_bio_))
+      {
+        // Seems like fatal error
+        // reading from SSL BIO has failed...
+        handler_(boost::asio::error::no_recovery, 0);
+        return 0;
+      }
+    }
+    
+    if (is_operation_done)
+    {
+      // Finish the operation, with success
+      handler_(boost::system::error_code(), rc);
+      return 0;
+    }
+    
+    // OPeration is not done and writing to net has been made...
+    // start operation again
+    start();
+          
+    return 0;
+  }
+
+  void async_write_handler(bool is_operation_done, int rc, 
+    const boost::system::error_code& error, size_t bytes_sent)
+  {
+    if (!error)
+    {
+      // Remove data from send buffer
+      send_buf_.data_removed(bytes_sent);
+
+      if (is_operation_done)
+        handler_(boost::system::error_code(), rc);
+      else
+        // Since the operation was not completed, try it again...
+        start();
+    }
+    else 
+      handler_(error, rc);
+  }
+
+  int do_async_read()
+  {
+    // Wait for new data
+    BOOST_ASIO_ASSERT(strand_);
+    socket_.async_read_some
+    ( 
+      boost::asio::buffer(recv_buf_.get_unused_start(),
+        recv_buf_.get_unused_len()),
+      strand_->wrap
+      (
+        boost::bind
+        (
+          &openssl_operation::async_read_handler, 
+          this, 
+          boost::asio::placeholders::error, 
+          boost::asio::placeholders::bytes_transferred
+        )
+      )
+    );
+    return 0;
+  }
+
+  void async_read_handler(const boost::system::error_code& error,
+      size_t bytes_recvd)
+  {
+    if (!error)
+    {
+      recv_buf_.data_added(bytes_recvd);
+
+      // Pass the received data to SSL
+      int written = ::BIO_write
+      ( 
+        ssl_bio_, 
+        recv_buf_.get_data_start(), 
+        recv_buf_.get_data_len() 
+      );
+
+      if (written > 0)
+      {
+        recv_buf_.data_removed(written);
+      }
+      else if (written < 0)
+      {
+        if (!BIO_should_retry(ssl_bio_))
+        {
+          // Some serios error with BIO....
+          handler_(boost::asio::error::no_recovery, 0);
+          return;
+        }
+      }
+
+      // and try the SSL primitive again
+      start();
+    }
+    else
+    {
+      // Error in network level...
+      // SSL can't continue either...
+      handler_(error, 0);
+    }
+  }
+
+  // Syncronous functions...
+  int do_sync_write(bool is_operation_done, int rc)
+  {
+    int len = ::BIO_ctrl_pending( ssl_bio_ );
+    if ( len )
+    { 
+      // There is something to write into net, do it...
+      len = (int)send_buf_.get_unused_len() > len? 
+        len: 
+        send_buf_.get_unused_len();
+        
+      // Read outgoing data from bio
+      len = ::BIO_read( ssl_bio_, send_buf_.get_unused_start(), len); 
+         
+      if (len > 0)
+      {
+        size_t sent_len = boost::asio::write( 
+                  socket_, 
+                  boost::asio::buffer(send_buf_.get_unused_start(), len)
+                  );
+
+        send_buf_.data_added(len);
+        send_buf_.data_removed(sent_len);
+      }          
+      else if (!BIO_should_retry(ssl_bio_))
+      {
+        // Seems like fatal error
+        // reading from SSL BIO has failed...
+        throw boost::system::system_error(boost::asio::error::no_recovery);
+      }
+    }
+    
+    if (is_operation_done)
+      // Finish the operation, with success
+      return rc;
+                
+    // Operation is not finished, start again.
+    return start();
+  }
+
+  int do_sync_read()
+  {
+    size_t len = socket_.read_some
+      ( 
+        boost::asio::buffer(recv_buf_.get_unused_start(),
+          recv_buf_.get_unused_len())
+      );
+
+    // Write data to ssl
+    recv_buf_.data_added(len);
+
+    // Pass the received data to SSL
+    int written = ::BIO_write
+    ( 
+      ssl_bio_, 
+      recv_buf_.get_data_start(), 
+      recv_buf_.get_data_len() 
+    );
+
+    if (written > 0)
+    {
+      recv_buf_.data_removed(written);
+    }
+    else if (written < 0)
+    {
+      if (!BIO_should_retry(ssl_bio_))
+      {
+        // Some serios error with BIO....
+        throw boost::system::system_error(boost::asio::error::no_recovery);
+      }
+    }
+
+    // Try the operation again
+    return start();
+  }
+}; // class openssl_operation
+
+} // namespace detail
+} // namespace old
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_OLD_DETAIL_OPENSSL_OPERATION_HPP
diff --git a/ext/patches/boost/asio/ssl/old/detail/openssl_stream_service.hpp b/ext/patches/boost/asio/ssl/old/detail/openssl_stream_service.hpp
new file mode 100644
index 0000000..752ea31
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/old/detail/openssl_stream_service.hpp
@@ -0,0 +1,573 @@
+//
+// ssl/old/detail/stream_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_OLD_DETAIL_OPENSSL_STREAM_SERVICE_HPP
+#define BOOST_ASIO_SSL_OLD_DETAIL_OPENSSL_STREAM_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <climits>
+#include <memory>
+#include <boost/config.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/function.hpp>
+#include <boost/bind.hpp>
+#include <boost/asio/detail/buffer_sequence_adapter.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ssl/basic_context.hpp>
+#include <boost/asio/ssl/stream_base.hpp>
+#include <boost/asio/ssl/old/detail/openssl_operation.hpp>
+#include <boost/asio/ssl/detail/openssl_types.hpp>
+#include <boost/asio/strand.hpp>
+#include <boost/system/system_error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace old {
+namespace detail {
+
+class openssl_stream_service
+  : public boost::asio::detail::service_base<openssl_stream_service>
+{
+private:
+  enum { max_buffer_size = INT_MAX };
+
+  //Base handler for asyncrhonous operations
+  template <typename Stream>
+  class base_handler
+  {
+  public:
+    typedef boost::function<
+      void (const boost::system::error_code&, size_t)> func_t;
+
+    base_handler(boost::asio::io_service& io_service)
+      : op_(NULL)
+      , io_service_(io_service)
+      , work_(io_service)
+    {}
+    
+    void do_func(const boost::system::error_code& error, size_t size)
+    {
+      func_(error, size);
+    }
+        
+    void set_operation(openssl_operation<Stream>* op) { op_ = op; }
+    void set_func(func_t func) { func_ = func; }
+
+    ~base_handler()
+    {
+      delete op_;
+    }
+
+  private:
+    func_t func_;
+    openssl_operation<Stream>* op_;
+    boost::asio::io_service& io_service_;
+    boost::asio::io_service::work work_;
+  };  // class base_handler
+
+  // Handler for asynchronous IO (write/read) operations
+  template<typename Stream, typename Handler>
+  class io_handler 
+    : public base_handler<Stream>
+  {
+  public:
+    io_handler(Handler handler, boost::asio::io_service& io_service)
+      : base_handler<Stream>(io_service)
+      , handler_(handler)
+    {
+      this->set_func(boost::bind(
+        &io_handler<Stream, Handler>::handler_impl, 
+        this, boost::arg<1>(), boost::arg<2>() ));
+    }
+
+  private:
+    Handler handler_;
+    void handler_impl(const boost::system::error_code& error, size_t size)
+    {
+      std::auto_ptr<io_handler<Stream, Handler> > this_ptr(this);
+      handler_(error, size);
+    }
+  };  // class io_handler 
+
+  // Handler for asyncrhonous handshake (connect, accept) functions
+  template <typename Stream, typename Handler>
+  class handshake_handler
+    : public base_handler<Stream>
+  {
+  public:
+    handshake_handler(Handler handler, boost::asio::io_service& io_service)
+      : base_handler<Stream>(io_service)
+      , handler_(handler)
+    {
+      this->set_func(boost::bind(
+        &handshake_handler<Stream, Handler>::handler_impl, 
+        this, boost::arg<1>(), boost::arg<2>() ));
+    }
+
+  private:
+    Handler handler_;
+    void handler_impl(const boost::system::error_code& error, size_t)
+    {
+      std::auto_ptr<handshake_handler<Stream, Handler> > this_ptr(this);
+      handler_(error);
+    }
+
+  };  // class handshake_handler
+
+  // Handler for asyncrhonous shutdown
+  template <typename Stream, typename Handler>
+  class shutdown_handler
+    : public base_handler<Stream>
+  {
+  public:
+    shutdown_handler(Handler handler, boost::asio::io_service& io_service)
+      : base_handler<Stream>(io_service),
+        handler_(handler)
+    { 
+      this->set_func(boost::bind(
+        &shutdown_handler<Stream, Handler>::handler_impl, 
+        this, boost::arg<1>(), boost::arg<2>() ));
+    }
+
+  private:
+    Handler handler_;
+    void handler_impl(const boost::system::error_code& error, size_t)
+    {
+      std::auto_ptr<shutdown_handler<Stream, Handler> > this_ptr(this);
+      handler_(error);
+    }
+  };  // class shutdown_handler
+
+public:
+  // The implementation type.
+  typedef struct impl_struct
+  {
+    ::SSL* ssl;
+    ::BIO* ext_bio;
+    net_buffer recv_buf;
+  } * impl_type;
+
+  // Construct a new stream socket service for the specified io_service.
+  explicit openssl_stream_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<openssl_stream_service>(io_service),
+      strand_(io_service)
+  {
+  }
+
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+  }
+
+  // Return a null stream implementation.
+  impl_type null() const
+  {
+    return 0;
+  }
+
+  // Create a new stream implementation.
+  template <typename Stream, typename Context_Service>
+  void create(impl_type& impl, Stream& /*next_layer*/,
+      basic_context<Context_Service>& context)
+  {
+    impl = new impl_struct;
+    impl->ssl = ::SSL_new(context.impl());
+    ::SSL_set_mode(impl->ssl, SSL_MODE_ENABLE_PARTIAL_WRITE);
+    ::SSL_set_mode(impl->ssl, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);
+    ::BIO* int_bio = 0;
+    impl->ext_bio = 0;
+    ::BIO_new_bio_pair(&int_bio, 8192, &impl->ext_bio, 8192);
+    ::SSL_set_bio(impl->ssl, int_bio, int_bio);
+  }
+
+  // Destroy a stream implementation.
+  template <typename Stream>
+  void destroy(impl_type& impl, Stream& /*next_layer*/)
+  {
+    if (impl != 0)
+    {
+      ::BIO_free(impl->ext_bio);
+      ::SSL_free(impl->ssl);
+      delete impl;
+      impl = 0;
+    }
+  }
+
+  // Perform SSL handshaking.
+  template <typename Stream>
+  boost::system::error_code handshake(impl_type& impl, Stream& next_layer,
+      stream_base::handshake_type type, boost::system::error_code& ec)
+  {
+    try
+    {
+      openssl_operation<Stream> op(
+        type == stream_base::client ?
+          &ssl_wrap<mutex_type>::SSL_connect:
+          &ssl_wrap<mutex_type>::SSL_accept,
+        next_layer,
+        impl->recv_buf,
+        impl->ssl,
+        impl->ext_bio);
+      op.start();
+    }
+    catch (boost::system::system_error& e)
+    {
+      ec = e.code();
+      return ec;
+    }
+
+    ec = boost::system::error_code();
+    return ec;
+  }
+
+  // Start an asynchronous SSL handshake.
+  template <typename Stream, typename Handler>
+  void async_handshake(impl_type& impl, Stream& next_layer,
+      stream_base::handshake_type type, Handler handler)
+  {
+    typedef handshake_handler<Stream, Handler> connect_handler;
+
+    connect_handler* local_handler = 
+      new connect_handler(handler, get_io_service());
+
+    openssl_operation<Stream>* op = new openssl_operation<Stream>
+    (
+      type == stream_base::client ?
+        &ssl_wrap<mutex_type>::SSL_connect:
+        &ssl_wrap<mutex_type>::SSL_accept,
+      next_layer,
+      impl->recv_buf,
+      impl->ssl,
+      impl->ext_bio,
+      boost::bind
+      (
+        &base_handler<Stream>::do_func, 
+        local_handler,
+        boost::arg<1>(),
+        boost::arg<2>()
+      ),
+      strand_
+    );
+    local_handler->set_operation(op);
+
+    strand_.post(boost::bind(&openssl_operation<Stream>::start, op));
+  }
+
+  // Shut down SSL on the stream.
+  template <typename Stream>
+  boost::system::error_code shutdown(impl_type& impl, Stream& next_layer,
+      boost::system::error_code& ec)
+  {
+    try
+    {
+      openssl_operation<Stream> op(
+        &ssl_wrap<mutex_type>::SSL_shutdown,
+        next_layer,
+        impl->recv_buf,
+        impl->ssl,
+        impl->ext_bio);
+      op.start();
+    }
+    catch (boost::system::system_error& e)
+    {
+      ec = e.code();
+      return ec;
+    }
+
+    ec = boost::system::error_code();
+    return ec;
+  }
+
+  // Asynchronously shut down SSL on the stream.
+  template <typename Stream, typename Handler>
+  void async_shutdown(impl_type& impl, Stream& next_layer, Handler handler)
+  {
+    typedef shutdown_handler<Stream, Handler> disconnect_handler;
+
+    disconnect_handler* local_handler = 
+      new disconnect_handler(handler, get_io_service());
+
+    openssl_operation<Stream>* op = new openssl_operation<Stream>
+    (
+      &ssl_wrap<mutex_type>::SSL_shutdown,
+      next_layer,
+      impl->recv_buf,
+      impl->ssl,
+      impl->ext_bio,
+      boost::bind
+      (
+        &base_handler<Stream>::do_func, 
+        local_handler, 
+        boost::arg<1>(),
+        boost::arg<2>()
+      ),
+      strand_
+    );
+    local_handler->set_operation(op);
+
+    strand_.post(boost::bind(&openssl_operation<Stream>::start, op));        
+  }
+
+  // Write some data to the stream.
+  template <typename Stream, typename Const_Buffers>
+  std::size_t write_some(impl_type& impl, Stream& next_layer,
+      const Const_Buffers& buffers, boost::system::error_code& ec)
+  {
+    size_t bytes_transferred = 0;
+    try
+    {
+      boost::asio::const_buffer buffer =
+        boost::asio::detail::buffer_sequence_adapter<
+          boost::asio::const_buffer, Const_Buffers>::first(buffers);
+
+      std::size_t buffer_size = boost::asio::buffer_size(buffer);
+      if (buffer_size > max_buffer_size)
+        buffer_size = max_buffer_size;
+      else if (buffer_size == 0)
+      {
+        ec = boost::system::error_code();
+        return 0;
+      }
+
+      boost::function<int (SSL*)> send_func =
+        boost::bind(boost::type<int>(), &::SSL_write, boost::arg<1>(),  
+            boost::asio::buffer_cast<const void*>(buffer),
+            static_cast<int>(buffer_size));
+      openssl_operation<Stream> op(
+        send_func,
+        next_layer,
+        impl->recv_buf,
+        impl->ssl,
+        impl->ext_bio
+      );
+      bytes_transferred = static_cast<size_t>(op.start());
+    }
+    catch (boost::system::system_error& e)
+    {
+      ec = e.code();
+      return 0;
+    }
+
+    ec = boost::system::error_code();
+    return bytes_transferred;
+  }
+
+  // Start an asynchronous write.
+  template <typename Stream, typename Const_Buffers, typename Handler>
+  void async_write_some(impl_type& impl, Stream& next_layer,
+      const Const_Buffers& buffers, Handler handler)
+  {
+    typedef io_handler<Stream, Handler> send_handler;
+
+    boost::asio::const_buffer buffer =
+      boost::asio::detail::buffer_sequence_adapter<
+        boost::asio::const_buffer, Const_Buffers>::first(buffers);
+
+    std::size_t buffer_size = boost::asio::buffer_size(buffer);
+    if (buffer_size > max_buffer_size)
+      buffer_size = max_buffer_size;
+    else if (buffer_size == 0)
+    {
+      get_io_service().post(boost::asio::detail::bind_handler(
+            handler, boost::system::error_code(), 0));
+      return;
+    }
+
+    send_handler* local_handler = new send_handler(handler, get_io_service());
+
+    boost::function<int (SSL*)> send_func =
+      boost::bind(boost::type<int>(), &::SSL_write, boost::arg<1>(),
+          boost::asio::buffer_cast<const void*>(buffer),
+          static_cast<int>(buffer_size));
+
+    openssl_operation<Stream>* op = new openssl_operation<Stream>
+    (
+      send_func,
+      next_layer,
+      impl->recv_buf,
+      impl->ssl,
+      impl->ext_bio,
+      boost::bind
+      (
+        &base_handler<Stream>::do_func, 
+        local_handler, 
+        boost::arg<1>(),
+        boost::arg<2>()
+      ),
+      strand_
+    );
+    local_handler->set_operation(op);
+
+    strand_.post(boost::bind(&openssl_operation<Stream>::start, op));        
+  }
+
+  // Read some data from the stream.
+  template <typename Stream, typename Mutable_Buffers>
+  std::size_t read_some(impl_type& impl, Stream& next_layer,
+      const Mutable_Buffers& buffers, boost::system::error_code& ec)
+  {
+    size_t bytes_transferred = 0;
+    try
+    {
+      boost::asio::mutable_buffer buffer =
+        boost::asio::detail::buffer_sequence_adapter<
+          boost::asio::mutable_buffer, Mutable_Buffers>::first(buffers);
+
+      std::size_t buffer_size = boost::asio::buffer_size(buffer);
+      if (buffer_size > max_buffer_size)
+        buffer_size = max_buffer_size;
+      else if (buffer_size == 0)
+      {
+        ec = boost::system::error_code();
+        return 0;
+      }
+
+      boost::function<int (SSL*)> recv_func =
+        boost::bind(boost::type<int>(), &::SSL_read, boost::arg<1>(),
+            boost::asio::buffer_cast<void*>(buffer),
+            static_cast<int>(buffer_size));
+      openssl_operation<Stream> op(recv_func,
+        next_layer,
+        impl->recv_buf,
+        impl->ssl,
+        impl->ext_bio
+      );
+
+      bytes_transferred = static_cast<size_t>(op.start());
+    }
+    catch (boost::system::system_error& e)
+    {
+      ec = e.code();
+      return 0;
+    }
+
+    ec = boost::system::error_code();
+    return bytes_transferred;
+  }
+
+  // Start an asynchronous read.
+  template <typename Stream, typename Mutable_Buffers, typename Handler>
+  void async_read_some(impl_type& impl, Stream& next_layer,
+      const Mutable_Buffers& buffers, Handler handler)
+  {
+    typedef io_handler<Stream, Handler> recv_handler;
+
+    boost::asio::mutable_buffer buffer =
+      boost::asio::detail::buffer_sequence_adapter<
+        boost::asio::mutable_buffer, Mutable_Buffers>::first(buffers);
+
+    std::size_t buffer_size = boost::asio::buffer_size(buffer);
+    if (buffer_size > max_buffer_size)
+      buffer_size = max_buffer_size;
+    else if (buffer_size == 0)
+    {
+      get_io_service().post(boost::asio::detail::bind_handler(
+            handler, boost::system::error_code(), 0));
+      return;
+    }
+
+    recv_handler* local_handler = new recv_handler(handler, get_io_service());
+
+    boost::function<int (SSL*)> recv_func =
+      boost::bind(boost::type<int>(), &::SSL_read, boost::arg<1>(),
+          boost::asio::buffer_cast<void*>(buffer),
+          static_cast<int>(buffer_size));
+
+    openssl_operation<Stream>* op = new openssl_operation<Stream>
+    (
+      recv_func,
+      next_layer,
+      impl->recv_buf,
+      impl->ssl,
+      impl->ext_bio,
+      boost::bind
+      (
+        &base_handler<Stream>::do_func, 
+        local_handler, 
+        boost::arg<1>(),
+        boost::arg<2>()
+      ),
+      strand_
+    );
+    local_handler->set_operation(op);
+
+    strand_.post(boost::bind(&openssl_operation<Stream>::start, op));        
+  }
+
+  // Peek at the incoming data on the stream.
+  template <typename Stream, typename Mutable_Buffers>
+  std::size_t peek(impl_type& /*impl*/, Stream& /*next_layer*/,
+      const Mutable_Buffers& /*buffers*/, boost::system::error_code& ec)
+  {
+    ec = boost::system::error_code();
+    return 0;
+  }
+
+  // Determine the amount of data that may be read without blocking.
+  template <typename Stream>
+  std::size_t in_avail(impl_type& /*impl*/, Stream& /*next_layer*/,
+      boost::system::error_code& ec)
+  {
+    ec = boost::system::error_code();
+    return 0;
+  }
+
+private:  
+  boost::asio::io_service::strand strand_;
+
+  typedef boost::asio::detail::mutex mutex_type;
+  
+  template<typename Mutex>
+  struct ssl_wrap
+  {
+    static Mutex ssl_mutex_;
+
+    static int SSL_accept(SSL *ssl)
+    {
+      typename Mutex::scoped_lock lock(ssl_mutex_);
+      return ::SSL_accept(ssl);
+    }
+  
+    static int SSL_connect(SSL *ssl)
+    {
+      typename Mutex::scoped_lock lock(ssl_mutex_);
+      return ::SSL_connect(ssl);
+    }
+  
+    static int SSL_shutdown(SSL *ssl)
+    {
+      typename Mutex::scoped_lock lock(ssl_mutex_);
+      return ::SSL_shutdown(ssl);  
+    }    
+  };  
+};
+
+template<typename Mutex>
+Mutex openssl_stream_service::ssl_wrap<Mutex>::ssl_mutex_;
+
+} // namespace detail
+} // namespace old
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_OLD_DETAIL_OPENSSL_STREAM_SERVICE_HPP
diff --git a/ext/patches/boost/asio/ssl/old/stream.hpp b/ext/patches/boost/asio/ssl/old/stream.hpp
new file mode 100644
index 0000000..fbba3be
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/old/stream.hpp
@@ -0,0 +1,503 @@
+//
+// ssl/old/stream.hpp
+// ~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_OLD_STREAM_HPP
+#define BOOST_ASIO_SSL_OLD_STREAM_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/noncopyable.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/detail/type_traits.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/ssl/basic_context.hpp>
+#include <boost/asio/ssl/stream_base.hpp>
+#include <boost/asio/ssl/stream_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace old {
+
+/// Provides stream-oriented functionality using SSL.
+/**
+ * The stream class template provides asynchronous and blocking stream-oriented
+ * functionality using SSL.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ *
+ * @par Example
+ * To use the SSL stream template with an ip::tcp::socket, you would write:
+ * @code
+ * boost::asio::io_service io_service;
+ * boost::asio::ssl::context context(io_service, boost::asio::ssl::context::sslv23);
+ * boost::asio::ssl::stream<boost::asio::ip::tcp::socket> sock(io_service, context);
+ * @endcode
+ *
+ * @par Concepts:
+ * AsyncReadStream, AsyncWriteStream, Stream, SyncRead_Stream, SyncWriteStream.
+ */
+template <typename Stream, typename Service = old::stream_service>
+class stream
+  : public stream_base,
+    private boost::noncopyable
+{
+public:
+  /// The type of the next layer.
+  typedef typename remove_reference<Stream>::type next_layer_type;
+
+  /// The type of the lowest layer.
+  typedef typename next_layer_type::lowest_layer_type lowest_layer_type;
+
+  /// The type of the service that will be used to provide stream operations.
+  typedef Service service_type;
+
+  /// The native implementation type of the stream.
+  typedef typename service_type::impl_type impl_type;
+
+  /// Construct a stream.
+  /**
+   * This constructor creates a stream and initialises the underlying stream
+   * object.
+   *
+   * @param arg The argument to be passed to initialise the underlying stream.
+   *
+   * @param context The SSL context to be used for the stream.
+   */
+  template <typename Arg, typename Context_Service>
+  explicit stream(Arg& arg, basic_context<Context_Service>& context)
+    : next_layer_(arg),
+      service_(boost::asio::use_service<Service>(next_layer_.get_io_service())),
+      impl_(service_.null())
+  {
+    service_.create(impl_, next_layer_, context);
+  }
+
+  /// Destructor.
+  ~stream()
+  {
+    service_.destroy(impl_, next_layer_);
+  }
+
+  /// Get the io_service associated with the object.
+  /**
+   * This function may be used to obtain the io_service object that the stream
+   * uses to dispatch handlers for asynchronous operations.
+   *
+   * @return A reference to the io_service object that stream will use to
+   * dispatch handlers. Ownership is not transferred to the caller.
+   */
+  boost::asio::io_service& get_io_service()
+  {
+    return next_layer_.get_io_service();
+  }
+
+  /// Get a reference to the next layer.
+  /**
+   * This function returns a reference to the next layer in a stack of stream
+   * layers.
+   *
+   * @return A reference to the next layer in the stack of stream layers.
+   * Ownership is not transferred to the caller.
+   */
+  next_layer_type& next_layer()
+  {
+    return next_layer_;
+  }
+
+  /// Get a reference to the lowest layer.
+  /**
+   * This function returns a reference to the lowest layer in a stack of
+   * stream layers.
+   *
+   * @return A reference to the lowest layer in the stack of stream layers.
+   * Ownership is not transferred to the caller.
+   */
+  lowest_layer_type& lowest_layer()
+  {
+    return next_layer_.lowest_layer();
+  }
+
+  /// Get a const reference to the lowest layer.
+  /**
+   * This function returns a const reference to the lowest layer in a stack of
+   * stream layers.
+   *
+   * @return A const reference to the lowest layer in the stack of stream
+   * layers. Ownership is not transferred to the caller.
+   */
+  const lowest_layer_type& lowest_layer() const
+  {
+    return next_layer_.lowest_layer();
+  }
+
+  /// Get the underlying implementation in the native type.
+  /**
+   * This function may be used to obtain the underlying implementation of the
+   * context. This is intended to allow access to stream functionality that is
+   * not otherwise provided.
+   */
+  impl_type impl()
+  {
+    return impl_;
+  }
+
+  /// Perform SSL handshaking.
+  /**
+   * This function is used to perform SSL handshaking on the stream. The
+   * function call will block until handshaking is complete or an error occurs.
+   *
+   * @param type The type of handshaking to be performed, i.e. as a client or as
+   * a server.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void handshake(handshake_type type)
+  {
+    boost::system::error_code ec;
+    service_.handshake(impl_, next_layer_, type, ec);
+    boost::asio::detail::throw_error(ec);
+  }
+
+  /// Perform SSL handshaking.
+  /**
+   * This function is used to perform SSL handshaking on the stream. The
+   * function call will block until handshaking is complete or an error occurs.
+   *
+   * @param type The type of handshaking to be performed, i.e. as a client or as
+   * a server.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code handshake(handshake_type type,
+      boost::system::error_code& ec)
+  {
+    return service_.handshake(impl_, next_layer_, type, ec);
+  }
+
+  /// Start an asynchronous SSL handshake.
+  /**
+   * This function is used to asynchronously perform an SSL handshake on the
+   * stream. This function call always returns immediately.
+   *
+   * @param type The type of handshaking to be performed, i.e. as a client or as
+   * a server.
+   *
+   * @param handler The handler to be called when the handshake operation
+   * completes. Copies will be made of the handler as required. The equivalent
+   * function signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error // Result of operation.
+   * ); @endcode
+   */
+  template <typename HandshakeHandler>
+  void async_handshake(handshake_type type, HandshakeHandler handler)
+  {
+    service_.async_handshake(impl_, next_layer_, type, handler);
+  }
+
+  /// Shut down SSL on the stream.
+  /**
+   * This function is used to shut down SSL on the stream. The function call
+   * will block until SSL has been shut down or an error occurs.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void shutdown()
+  {
+    boost::system::error_code ec;
+    service_.shutdown(impl_, next_layer_, ec);
+    boost::asio::detail::throw_error(ec);
+  }
+
+  /// Shut down SSL on the stream.
+  /**
+   * This function is used to shut down SSL on the stream. The function call
+   * will block until SSL has been shut down or an error occurs.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code shutdown(boost::system::error_code& ec)
+  {
+    return service_.shutdown(impl_, next_layer_, ec);
+  }
+
+  /// Asynchronously shut down SSL on the stream.
+  /**
+   * This function is used to asynchronously shut down SSL on the stream. This
+   * function call always returns immediately.
+   *
+   * @param handler The handler to be called when the handshake operation
+   * completes. Copies will be made of the handler as required. The equivalent
+   * function signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error // Result of operation.
+   * ); @endcode
+   */
+  template <typename ShutdownHandler>
+  void async_shutdown(ShutdownHandler handler)
+  {
+    service_.async_shutdown(impl_, next_layer_, handler);
+  }
+
+  /// Write some data to the stream.
+  /**
+   * This function is used to write data on the stream. The function call will
+   * block until one or more bytes of data has been written successfully, or
+   * until an error occurs.
+   *
+   * @param buffers The data to be written.
+   *
+   * @returns The number of bytes written.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The write_some operation may not transmit all of the data to the
+   * peer. Consider using the @ref write function if you need to ensure that all
+   * data is written before the blocking operation completes.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = service_.write_some(impl_, next_layer_, buffers, ec);
+    boost::asio::detail::throw_error(ec);
+    return s;
+  }
+
+  /// Write some data to the stream.
+  /**
+   * This function is used to write data on the stream. The function call will
+   * block until one or more bytes of data has been written successfully, or
+   * until an error occurs.
+   *
+   * @param buffers The data to be written to the stream.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes written. Returns 0 if an error occurred.
+   *
+   * @note The write_some operation may not transmit all of the data to the
+   * peer. Consider using the @ref write function if you need to ensure that all
+   * data is written before the blocking operation completes.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return service_.write_some(impl_, next_layer_, buffers, ec);
+  }
+
+  /// Start an asynchronous write.
+  /**
+   * This function is used to asynchronously write one or more bytes of data to
+   * the stream. The function call always returns immediately.
+   *
+   * @param buffers The data to be written to the stream. Although the buffers
+   * object may be copied as necessary, ownership of the underlying buffers is
+   * retained by the caller, which must guarantee that they remain valid until
+   * the handler is called.
+   *
+   * @param handler The handler to be called when the write operation completes.
+   * Copies will be made of the handler as required. The equivalent function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes written.
+   * ); @endcode
+   *
+   * @note The async_write_some operation may not transmit all of the data to
+   * the peer. Consider using the @ref async_write function if you need to
+   * ensure that all data is written before the blocking operation completes.
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  void async_write_some(const ConstBufferSequence& buffers,
+      WriteHandler handler)
+  {
+    service_.async_write_some(impl_, next_layer_, buffers, handler);
+  }
+
+  /// Read some data from the stream.
+  /**
+   * This function is used to read data from the stream. The function call will
+   * block until one or more bytes of data has been read successfully, or until
+   * an error occurs.
+   *
+   * @param buffers The buffers into which the data will be read.
+   *
+   * @returns The number of bytes read.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The read_some operation may not read all of the requested number of
+   * bytes. Consider using the @ref read function if you need to ensure that the
+   * requested amount of data is read before the blocking operation completes.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = service_.read_some(impl_, next_layer_, buffers, ec);
+    boost::asio::detail::throw_error(ec);
+    return s;
+  }
+
+  /// Read some data from the stream.
+  /**
+   * This function is used to read data from the stream. The function call will
+   * block until one or more bytes of data has been read successfully, or until
+   * an error occurs.
+   *
+   * @param buffers The buffers into which the data will be read.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes read. Returns 0 if an error occurred.
+   *
+   * @note The read_some operation may not read all of the requested number of
+   * bytes. Consider using the @ref read function if you need to ensure that the
+   * requested amount of data is read before the blocking operation completes.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return service_.read_some(impl_, next_layer_, buffers, ec);
+  }
+
+  /// Start an asynchronous read.
+  /**
+   * This function is used to asynchronously read one or more bytes of data from
+   * the stream. The function call always returns immediately.
+   *
+   * @param buffers The buffers into which the data will be read. Although the
+   * buffers object may be copied as necessary, ownership of the underlying
+   * buffers is retained by the caller, which must guarantee that they remain
+   * valid until the handler is called.
+   *
+   * @param handler The handler to be called when the read operation completes.
+   * Copies will be made of the handler as required. The equivalent function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes read.
+   * ); @endcode
+   *
+   * @note The async_read_some operation may not read all of the requested
+   * number of bytes. Consider using the @ref async_read function if you need to
+   * ensure that the requested amount of data is read before the asynchronous
+   * operation completes.
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  void async_read_some(const MutableBufferSequence& buffers,
+      ReadHandler handler)
+  {
+    service_.async_read_some(impl_, next_layer_, buffers, handler);
+  }
+
+  /// Peek at the incoming data on the stream.
+  /**
+   * This function is used to peek at the incoming data on the stream, without
+   * removing it from the input queue. The function call will block until data
+   * has been read successfully or an error occurs.
+   *
+   * @param buffers The buffers into which the data will be read.
+   *
+   * @returns The number of bytes read.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t peek(const MutableBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = service_.peek(impl_, next_layer_, buffers, ec);
+    boost::asio::detail::throw_error(ec);
+    return s;
+  }
+
+  /// Peek at the incoming data on the stream.
+  /**
+   * This function is used to peek at the incoming data on the stream, withoutxi
+   * removing it from the input queue. The function call will block until data
+   * has been read successfully or an error occurs.
+   *
+   * @param buffers The buffers into which the data will be read.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes read. Returns 0 if an error occurred.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t peek(const MutableBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return service_.peek(impl_, next_layer_, buffers, ec);
+  }
+
+  /// Determine the amount of data that may be read without blocking.
+  /**
+   * This function is used to determine the amount of data, in bytes, that may
+   * be read from the stream without blocking.
+   *
+   * @returns The number of bytes of data that can be read without blocking.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  std::size_t in_avail()
+  {
+    boost::system::error_code ec;
+    std::size_t s = service_.in_avail(impl_, next_layer_, ec);
+    boost::asio::detail::throw_error(ec);
+    return s;
+  }
+
+  /// Determine the amount of data that may be read without blocking.
+  /**
+   * This function is used to determine the amount of data, in bytes, that may
+   * be read from the stream without blocking.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes of data that can be read without blocking.
+   */
+  std::size_t in_avail(boost::system::error_code& ec)
+  {
+    return service_.in_avail(impl_, next_layer_, ec);
+  }
+
+private:
+  /// The next layer.
+  Stream next_layer_;
+
+  /// The backend service implementation.
+  service_type& service_;
+
+  /// The underlying native implementation.
+  impl_type impl_;
+};
+
+} // namespace old
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_OLD_STREAM_HPP
diff --git a/ext/patches/boost/asio/ssl/old/stream_service.hpp b/ext/patches/boost/asio/ssl/old/stream_service.hpp
new file mode 100644
index 0000000..37b9447
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/old/stream_service.hpp
@@ -0,0 +1,186 @@
+//
+// ssl/old/stream_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
+// Copyright (c) 2005-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_OLD_STREAM_SERVICE_HPP
+#define BOOST_ASIO_SSL_OLD_STREAM_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/noncopyable.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ssl/basic_context.hpp>
+#include <boost/asio/ssl/old/detail/openssl_stream_service.hpp>
+#include <boost/asio/ssl/stream_base.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+namespace old {
+
+/// Default service implementation for an SSL stream.
+class stream_service
+#if defined(GENERATING_DOCUMENTATION)
+  : public boost::asio::io_service::service
+#else
+  : public boost::asio::detail::service_base<stream_service>
+#endif
+{
+private:
+  // The type of the platform-specific implementation.
+  typedef old::detail::openssl_stream_service service_impl_type;
+
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The unique service identifier.
+  static boost::asio::io_service::id id;
+#endif
+
+  /// The type of a stream implementation.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined impl_type;
+#else
+  typedef service_impl_type::impl_type impl_type;
+#endif
+
+  /// Construct a new stream service for the specified io_service.
+  explicit stream_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<stream_service>(io_service),
+      service_impl_(boost::asio::use_service<service_impl_type>(io_service))
+  {
+  }
+
+  /// Return a null stream implementation.
+  impl_type null() const
+  {
+    return service_impl_.null();
+  }
+
+  /// Create a new stream implementation.
+  template <typename Stream, typename Context_Service>
+  void create(impl_type& impl, Stream& next_layer,
+      basic_context<Context_Service>& context)
+  {
+    service_impl_.create(impl, next_layer, context);
+  }
+
+  /// Destroy a stream implementation.
+  template <typename Stream>
+  void destroy(impl_type& impl, Stream& next_layer)
+  {
+    service_impl_.destroy(impl, next_layer);
+  }
+
+  /// Perform SSL handshaking.
+  template <typename Stream>
+  boost::system::error_code handshake(impl_type& impl, Stream& next_layer,
+      stream_base::handshake_type type, boost::system::error_code& ec)
+  {
+    return service_impl_.handshake(impl, next_layer, type, ec);
+  }
+
+  /// Start an asynchronous SSL handshake.
+  template <typename Stream, typename HandshakeHandler>
+  void async_handshake(impl_type& impl, Stream& next_layer,
+      stream_base::handshake_type type, HandshakeHandler handler)
+  {
+    service_impl_.async_handshake(impl, next_layer, type, handler);
+  }
+
+  /// Shut down SSL on the stream.
+  template <typename Stream>
+  boost::system::error_code shutdown(impl_type& impl, Stream& next_layer,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.shutdown(impl, next_layer, ec);
+  }
+
+  /// Asynchronously shut down SSL on the stream.
+  template <typename Stream, typename ShutdownHandler>
+  void async_shutdown(impl_type& impl, Stream& next_layer,
+      ShutdownHandler handler)
+  {
+    service_impl_.async_shutdown(impl, next_layer, handler);
+  }
+
+  /// Write some data to the stream.
+  template <typename Stream, typename ConstBufferSequence>
+  std::size_t write_some(impl_type& impl, Stream& next_layer,
+      const ConstBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return service_impl_.write_some(impl, next_layer, buffers, ec);
+  }
+
+  /// Start an asynchronous write.
+  template <typename Stream, typename ConstBufferSequence,
+      typename WriteHandler>
+  void async_write_some(impl_type& impl, Stream& next_layer,
+      const ConstBufferSequence& buffers, WriteHandler handler)
+  {
+    service_impl_.async_write_some(impl, next_layer, buffers, handler);
+  }
+
+  /// Read some data from the stream.
+  template <typename Stream, typename MutableBufferSequence>
+  std::size_t read_some(impl_type& impl, Stream& next_layer,
+      const MutableBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return service_impl_.read_some(impl, next_layer, buffers, ec);
+  }
+
+  /// Start an asynchronous read.
+  template <typename Stream, typename MutableBufferSequence,
+      typename ReadHandler>
+  void async_read_some(impl_type& impl, Stream& next_layer,
+      const MutableBufferSequence& buffers, ReadHandler handler)
+  {
+    service_impl_.async_read_some(impl, next_layer, buffers, handler);
+  }
+
+  /// Peek at the incoming data on the stream.
+  template <typename Stream, typename MutableBufferSequence>
+  std::size_t peek(impl_type& impl, Stream& next_layer,
+      const MutableBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return service_impl_.peek(impl, next_layer, buffers, ec);
+  }
+
+  /// Determine the amount of data that may be read without blocking.
+  template <typename Stream>
+  std::size_t in_avail(impl_type& impl, Stream& next_layer,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.in_avail(impl, next_layer, ec);
+  }
+
+private:
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+  }
+
+  // The service that provides the platform-specific implementation.
+  service_impl_type& service_impl_;
+};
+
+} // namespace old
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_OLD_STREAM_SERVICE_HPP
diff --git a/ext/patches/boost/asio/ssl/rfc2818_verification.hpp b/ext/patches/boost/asio/ssl/rfc2818_verification.hpp
new file mode 100644
index 0000000..6f9062d
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/rfc2818_verification.hpp
@@ -0,0 +1,102 @@
+//
+// ssl/rfc2818_verification.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_RFC2818_VERIFICATION_HPP
+#define BOOST_ASIO_SSL_RFC2818_VERIFICATION_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <string>
+# include <boost/asio/ssl/detail/openssl_types.hpp>
+# include <boost/asio/ssl/verify_context.hpp>
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+/// Verifies a certificate against a hostname according to the rules described
+/// in RFC 2818.
+/**
+ * @par Example
+ * The following example shows how to synchronously open a secure connection to
+ * a given host name:
+ * @code
+ * using boost::asio::ip::tcp;
+ * namespace ssl = boost::asio::ssl;
+ * typedef ssl::stream<tcp::socket> ssl_socket;
+ *
+ * // Create a context that uses the default paths for finding CA certificates.
+ * ssl::context ctx(ssl::context::sslv23);
+ * ctx.set_default_verify_paths();
+ *
+ * // Open a socket and connect it to the remote host.
+ * boost::asio::io_service io_service;
+ * ssl_socket sock(io_service, ctx);
+ * tcp::resolver resolver(io_service);
+ * tcp::resolver::query query("host.name", "https");
+ * boost::asio::connect(sock.lowest_layer(), resolver.resolve(query));
+ * sock.lowest_layer().set_option(tcp::no_delay(true));
+ *
+ * // Perform SSL handshake and verify the remote host's certificate.
+ * sock.set_verify_mode(ssl::verify_peer);
+ * sock.set_verify_callback(ssl::rfc2818_verification("host.name"));
+ * sock.handshake(ssl_socket::client);
+ *
+ * // ... read and write as normal ...
+ * @endcode
+ */
+class rfc2818_verification
+{
+public:
+  /// The type of the function object's result.
+  typedef bool result_type;
+
+  /// Constructor.
+  explicit rfc2818_verification(const std::string& host)
+    : host_(host)
+  {
+  }
+
+  /// Perform certificate verification.
+  BOOST_ASIO_DECL bool operator()(bool preverified, verify_context& ctx) const;
+
+private:
+  // Helper function to check a host name against a pattern.
+  BOOST_ASIO_DECL static bool match_pattern(const char* pattern,
+      std::size_t pattern_length, const char* host);
+
+  // Helper function to check a host name against an IPv4 address
+  // The host name to be checked.
+  std::string host_;
+};
+
+#endif // defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#if defined(BOOST_ASIO_HEADER_ONLY)
+# include <boost/asio/ssl/impl/rfc2818_verification.ipp>
+#endif // defined(BOOST_ASIO_HEADER_ONLY)
+
+#endif // BOOST_ASIO_SSL_RFC2818_VERIFICATION_HPP
diff --git a/ext/patches/boost/asio/ssl/stream.hpp b/ext/patches/boost/asio/ssl/stream.hpp
new file mode 100644
index 0000000..e003bc4
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/stream.hpp
@@ -0,0 +1,758 @@
+//
+// ssl/stream.hpp
+// ~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_STREAM_HPP
+#define BOOST_ASIO_SSL_STREAM_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <boost/asio/ssl/old/stream.hpp>
+#else // defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <boost/asio/async_result.hpp>
+# include <boost/asio/detail/buffer_sequence_adapter.hpp>
+# include <boost/asio/detail/handler_type_requirements.hpp>
+# include <boost/asio/detail/noncopyable.hpp>
+# include <boost/asio/detail/type_traits.hpp>
+# include <boost/asio/ssl/context.hpp>
+# include <boost/asio/ssl/detail/buffered_handshake_op.hpp>
+# include <boost/asio/ssl/detail/handshake_op.hpp>
+# include <boost/asio/ssl/detail/io.hpp>
+# include <boost/asio/ssl/detail/read_op.hpp>
+# include <boost/asio/ssl/detail/shutdown_op.hpp>
+# include <boost/asio/ssl/detail/stream_core.hpp>
+# include <boost/asio/ssl/detail/write_op.hpp>
+# include <boost/asio/ssl/stream_base.hpp>
+#endif // defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+
+#if defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+using boost::asio::ssl::old::stream;
+
+#else // defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+/// Provides stream-oriented functionality using SSL.
+/**
+ * The stream class template provides asynchronous and blocking stream-oriented
+ * functionality using SSL.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe. The application must also ensure that all
+ * asynchronous operations are performed within the same implicit or explicit
+ * strand.
+ *
+ * @par Example
+ * To use the SSL stream template with an ip::tcp::socket, you would write:
+ * @code
+ * boost::asio::io_service io_service;
+ * boost::asio::ssl::context ctx(boost::asio::ssl::context::sslv23);
+ * boost::asio::ssl::stream<asio:ip::tcp::socket> sock(io_service, ctx);
+ * @endcode
+ *
+ * @par Concepts:
+ * AsyncReadStream, AsyncWriteStream, Stream, SyncReadStream, SyncWriteStream.
+ */
+template <typename Stream>
+class stream :
+  public stream_base,
+  private noncopyable
+{
+public:
+  /// The native handle type of the SSL stream.
+  typedef SSL* native_handle_type;
+
+  /// Structure for use with deprecated impl_type.
+  struct impl_struct
+  {
+    SSL* ssl;
+  };
+
+  /// (Deprecated: Use native_handle_type.) The underlying implementation type.
+  typedef impl_struct* impl_type;
+
+  /// The type of the next layer.
+  typedef typename remove_reference<Stream>::type next_layer_type;
+
+  /// The type of the lowest layer.
+  typedef typename next_layer_type::lowest_layer_type lowest_layer_type;
+
+  /// Construct a stream.
+  /**
+   * This constructor creates a stream and initialises the underlying stream
+   * object.
+   *
+   * @param arg The argument to be passed to initialise the underlying stream.
+   *
+   * @param ctx The SSL context to be used for the stream.
+   */
+  template <typename Arg>
+  stream(Arg& arg, context& ctx)
+    : next_layer_(arg),
+      core_(ctx.native_handle(), next_layer_.lowest_layer().get_io_service())
+  {
+    backwards_compatible_impl_.ssl = core_.engine_.native_handle();
+  }
+
+  /// Destructor.
+  ~stream()
+  {
+  }
+
+  /// Get the io_service associated with the object.
+  /**
+   * This function may be used to obtain the io_service object that the stream
+   * uses to dispatch handlers for asynchronous operations.
+   *
+   * @return A reference to the io_service object that stream will use to
+   * dispatch handlers. Ownership is not transferred to the caller.
+   */
+  boost::asio::io_service& get_io_service()
+  {
+    return next_layer_.lowest_layer().get_io_service();
+  }
+
+  /// Get the underlying implementation in the native type.
+  /**
+   * This function may be used to obtain the underlying implementation of the
+   * context. This is intended to allow access to context functionality that is
+   * not otherwise provided.
+   *
+   * @par Example
+   * The native_handle() function returns a pointer of type @c SSL* that is
+   * suitable for passing to functions such as @c SSL_get_verify_result and
+   * @c SSL_get_peer_certificate:
+   * @code
+   * boost::asio::ssl::stream<asio:ip::tcp::socket> sock(io_service, ctx);
+   *
+   * // ... establish connection and perform handshake ...
+   *
+   * if (X509* cert = SSL_get_peer_certificate(sock.native_handle()))
+   * {
+   *   if (SSL_get_verify_result(sock.native_handle()) == X509_V_OK)
+   *   {
+   *     // ...
+   *   }
+   * }
+   * @endcode
+   */
+  native_handle_type native_handle()
+  {
+    return core_.engine_.native_handle();
+  }
+
+  /// (Deprecated: Use native_handle().) Get the underlying implementation in
+  /// the native type.
+  /**
+   * This function may be used to obtain the underlying implementation of the
+   * context. This is intended to allow access to stream functionality that is
+   * not otherwise provided.
+   */
+  impl_type impl()
+  {
+    return &backwards_compatible_impl_;
+  }
+
+  /// Get a reference to the next layer.
+  /**
+   * This function returns a reference to the next layer in a stack of stream
+   * layers.
+   *
+   * @return A reference to the next layer in the stack of stream layers.
+   * Ownership is not transferred to the caller.
+   */
+  const next_layer_type& next_layer() const
+  {
+    return next_layer_;
+  }
+
+  /// Get a reference to the next layer.
+  /**
+   * This function returns a reference to the next layer in a stack of stream
+   * layers.
+   *
+   * @return A reference to the next layer in the stack of stream layers.
+   * Ownership is not transferred to the caller.
+   */
+  next_layer_type& next_layer()
+  {
+    return next_layer_;
+  }
+
+  /// Get a reference to the lowest layer.
+  /**
+   * This function returns a reference to the lowest layer in a stack of
+   * stream layers.
+   *
+   * @return A reference to the lowest layer in the stack of stream layers.
+   * Ownership is not transferred to the caller.
+   */
+  lowest_layer_type& lowest_layer()
+  {
+    return next_layer_.lowest_layer();
+  }
+
+  /// Get a reference to the lowest layer.
+  /**
+   * This function returns a reference to the lowest layer in a stack of
+   * stream layers.
+   *
+   * @return A reference to the lowest layer in the stack of stream layers.
+   * Ownership is not transferred to the caller.
+   */
+  const lowest_layer_type& lowest_layer() const
+  {
+    return next_layer_.lowest_layer();
+  }
+
+  /// Set the peer verification mode.
+  /**
+   * This function may be used to configure the peer verification mode used by
+   * the stream. The new mode will override the mode inherited from the context.
+   *
+   * @param v A bitmask of peer verification modes. See @ref verify_mode for
+   * available values.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_set_verify.
+   */
+  void set_verify_mode(verify_mode v)
+  {
+    boost::system::error_code ec;
+    set_verify_mode(v, ec);
+    boost::asio::detail::throw_error(ec, "set_verify_mode");
+  }
+
+  /// Set the peer verification mode.
+  /**
+   * This function may be used to configure the peer verification mode used by
+   * the stream. The new mode will override the mode inherited from the context.
+   *
+   * @param v A bitmask of peer verification modes. See @ref verify_mode for
+   * available values.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_set_verify.
+   */
+  boost::system::error_code set_verify_mode(
+      verify_mode v, boost::system::error_code& ec)
+  {
+    return core_.engine_.set_verify_mode(v, ec);
+  }
+
+  /// Set the peer verification depth.
+  /**
+   * This function may be used to configure the maximum verification depth
+   * allowed by the stream.
+   *
+   * @param depth Maximum depth for the certificate chain verification that
+   * shall be allowed.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_set_verify_depth.
+   */
+  void set_verify_depth(int depth)
+  {
+    boost::system::error_code ec;
+    set_verify_depth(depth, ec);
+    boost::asio::detail::throw_error(ec, "set_verify_depth");
+  }
+
+  /// Set the peer verification depth.
+  /**
+   * This function may be used to configure the maximum verification depth
+   * allowed by the stream.
+   *
+   * @param depth Maximum depth for the certificate chain verification that
+   * shall be allowed.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_set_verify_depth.
+   */
+  boost::system::error_code set_verify_depth(
+      int depth, boost::system::error_code& ec)
+  {
+    return core_.engine_.set_verify_depth(depth, ec);
+  }
+
+  /// Set the callback used to verify peer certificates.
+  /**
+   * This function is used to specify a callback function that will be called
+   * by the implementation when it needs to verify a peer certificate.
+   *
+   * @param callback The function object to be used for verifying a certificate.
+   * The function signature of the handler must be:
+   * @code bool verify_callback(
+   *   bool preverified, // True if the certificate passed pre-verification.
+   *   verify_context& ctx // The peer certificate and other context.
+   * ); @endcode
+   * The return value of the callback is true if the certificate has passed
+   * verification, false otherwise.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note Calls @c SSL_set_verify.
+   */
+  template <typename VerifyCallback>
+  void set_verify_callback(VerifyCallback callback)
+  {
+    boost::system::error_code ec;
+    this->set_verify_callback(callback, ec);
+    boost::asio::detail::throw_error(ec, "set_verify_callback");
+  }
+
+  /// Set the callback used to verify peer certificates.
+  /**
+   * This function is used to specify a callback function that will be called
+   * by the implementation when it needs to verify a peer certificate.
+   *
+   * @param callback The function object to be used for verifying a certificate.
+   * The function signature of the handler must be:
+   * @code bool verify_callback(
+   *   bool preverified, // True if the certificate passed pre-verification.
+   *   verify_context& ctx // The peer certificate and other context.
+   * ); @endcode
+   * The return value of the callback is true if the certificate has passed
+   * verification, false otherwise.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @note Calls @c SSL_set_verify.
+   */
+  template <typename VerifyCallback>
+  boost::system::error_code set_verify_callback(VerifyCallback callback,
+      boost::system::error_code& ec)
+  {
+    return core_.engine_.set_verify_callback(
+        new detail::verify_callback<VerifyCallback>(callback), ec);
+  }
+
+  /// Perform SSL handshaking.
+  /**
+   * This function is used to perform SSL handshaking on the stream. The
+   * function call will block until handshaking is complete or an error occurs.
+   *
+   * @param type The type of handshaking to be performed, i.e. as a client or as
+   * a server.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void handshake(handshake_type type)
+  {
+    boost::system::error_code ec;
+    handshake(type, ec);
+    boost::asio::detail::throw_error(ec, "handshake");
+  }
+
+  /// Perform SSL handshaking.
+  /**
+   * This function is used to perform SSL handshaking on the stream. The
+   * function call will block until handshaking is complete or an error occurs.
+   *
+   * @param type The type of handshaking to be performed, i.e. as a client or as
+   * a server.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code handshake(handshake_type type,
+      boost::system::error_code& ec)
+  {
+    detail::io(next_layer_, core_, detail::handshake_op(type), ec);
+    return ec;
+  }
+
+  /// Perform SSL handshaking.
+  /**
+   * This function is used to perform SSL handshaking on the stream. The
+   * function call will block until handshaking is complete or an error occurs.
+   *
+   * @param type The type of handshaking to be performed, i.e. as a client or as
+   * a server.
+   *
+   * @param buffers The buffered data to be reused for the handshake.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  template <typename ConstBufferSequence>
+  void handshake(handshake_type type, const ConstBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    handshake(type, buffers, ec);
+    boost::asio::detail::throw_error(ec, "handshake");
+  }
+
+  /// Perform SSL handshaking.
+  /**
+   * This function is used to perform SSL handshaking on the stream. The
+   * function call will block until handshaking is complete or an error occurs.
+   *
+   * @param type The type of handshaking to be performed, i.e. as a client or as
+   * a server.
+   *
+   * @param buffers The buffered data to be reused for the handshake.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  template <typename ConstBufferSequence>
+  boost::system::error_code handshake(handshake_type type,
+      const ConstBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    detail::io(next_layer_, core_,
+        detail::buffered_handshake_op<ConstBufferSequence>(type, buffers), ec);
+    return ec;
+  }
+
+  /// Start an asynchronous SSL handshake.
+  /**
+   * This function is used to asynchronously perform an SSL handshake on the
+   * stream. This function call always returns immediately.
+   *
+   * @param type The type of handshaking to be performed, i.e. as a client or as
+   * a server.
+   *
+   * @param handler The handler to be called when the handshake operation
+   * completes. Copies will be made of the handler as required. The equivalent
+   * function signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error // Result of operation.
+   * ); @endcode
+   */
+  template <typename HandshakeHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(HandshakeHandler,
+      void (boost::system::error_code))
+  async_handshake(handshake_type type,
+      BOOST_ASIO_MOVE_ARG(HandshakeHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a HandshakeHandler.
+    BOOST_ASIO_HANDSHAKE_HANDLER_CHECK(HandshakeHandler, handler) type_check;
+
+    boost::asio::detail::async_result_init<
+      HandshakeHandler, void (boost::system::error_code)> init(
+        BOOST_ASIO_MOVE_CAST(HandshakeHandler)(handler));
+
+    detail::async_io(next_layer_, core_,
+        detail::handshake_op(type), init.handler);
+
+    return init.result.get();
+  }
+
+  /// Start an asynchronous SSL handshake.
+  /**
+   * This function is used to asynchronously perform an SSL handshake on the
+   * stream. This function call always returns immediately.
+   *
+   * @param type The type of handshaking to be performed, i.e. as a client or as
+   * a server.
+   *
+   * @param buffers The buffered data to be reused for the handshake. Although
+   * the buffers object may be copied as necessary, ownership of the underlying
+   * buffers is retained by the caller, which must guarantee that they remain
+   * valid until the handler is called.
+   *
+   * @param handler The handler to be called when the handshake operation
+   * completes. Copies will be made of the handler as required. The equivalent
+   * function signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred // Amount of buffers used in handshake.
+   * ); @endcode
+   */
+  template <typename ConstBufferSequence, typename BufferedHandshakeHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(BufferedHandshakeHandler,
+      void (boost::system::error_code, std::size_t))
+  async_handshake(handshake_type type, const ConstBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(BufferedHandshakeHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a BufferedHandshakeHandler.
+    BOOST_ASIO_BUFFERED_HANDSHAKE_HANDLER_CHECK(
+        BufferedHandshakeHandler, handler) type_check;
+
+    boost::asio::detail::async_result_init<BufferedHandshakeHandler,
+      void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(BufferedHandshakeHandler)(handler));
+
+    detail::async_io(next_layer_, core_,
+        detail::buffered_handshake_op<ConstBufferSequence>(type, buffers),
+        init.handler);
+
+    return init.result.get();
+  }
+
+  /// Shut down SSL on the stream.
+  /**
+   * This function is used to shut down SSL on the stream. The function call
+   * will block until SSL has been shut down or an error occurs.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void shutdown()
+  {
+    boost::system::error_code ec;
+    shutdown(ec);
+    boost::asio::detail::throw_error(ec, "shutdown");
+  }
+
+  /// Shut down SSL on the stream.
+  /**
+   * This function is used to shut down SSL on the stream. The function call
+   * will block until SSL has been shut down or an error occurs.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code shutdown(boost::system::error_code& ec)
+  {
+    detail::io(next_layer_, core_, detail::shutdown_op(), ec);
+    return ec;
+  }
+
+  /// Asynchronously shut down SSL on the stream.
+  /**
+   * This function is used to asynchronously shut down SSL on the stream. This
+   * function call always returns immediately.
+   *
+   * @param handler The handler to be called when the handshake operation
+   * completes. Copies will be made of the handler as required. The equivalent
+   * function signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error // Result of operation.
+   * ); @endcode
+   */
+  template <typename ShutdownHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ShutdownHandler,
+      void (boost::system::error_code))
+  async_shutdown(BOOST_ASIO_MOVE_ARG(ShutdownHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ShutdownHandler.
+    BOOST_ASIO_SHUTDOWN_HANDLER_CHECK(ShutdownHandler, handler) type_check;
+
+    boost::asio::detail::async_result_init<
+      ShutdownHandler, void (boost::system::error_code)> init(
+        BOOST_ASIO_MOVE_CAST(ShutdownHandler)(handler));
+
+    detail::async_io(next_layer_, core_, detail::shutdown_op(), init.handler);
+
+    return init.result.get();
+  }
+
+  /// Write some data to the stream.
+  /**
+   * This function is used to write data on the stream. The function call will
+   * block until one or more bytes of data has been written successfully, or
+   * until an error occurs.
+   *
+   * @param buffers The data to be written.
+   *
+   * @returns The number of bytes written.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The write_some operation may not transmit all of the data to the
+   * peer. Consider using the @ref write function if you need to ensure that all
+   * data is written before the blocking operation completes.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t n = write_some(buffers, ec);
+    boost::asio::detail::throw_error(ec, "write_some");
+    return n;
+  }
+
+  /// Write some data to the stream.
+  /**
+   * This function is used to write data on the stream. The function call will
+   * block until one or more bytes of data has been written successfully, or
+   * until an error occurs.
+   *
+   * @param buffers The data to be written to the stream.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes written. Returns 0 if an error occurred.
+   *
+   * @note The write_some operation may not transmit all of the data to the
+   * peer. Consider using the @ref write function if you need to ensure that all
+   * data is written before the blocking operation completes.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return detail::io(next_layer_, core_,
+        detail::write_op<ConstBufferSequence>(buffers), ec);
+  }
+
+  /// Start an asynchronous write.
+  /**
+   * This function is used to asynchronously write one or more bytes of data to
+   * the stream. The function call always returns immediately.
+   *
+   * @param buffers The data to be written to the stream. Although the buffers
+   * object may be copied as necessary, ownership of the underlying buffers is
+   * retained by the caller, which must guarantee that they remain valid until
+   * the handler is called.
+   *
+   * @param handler The handler to be called when the write operation completes.
+   * Copies will be made of the handler as required. The equivalent function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes written.
+   * ); @endcode
+   *
+   * @note The async_write_some operation may not transmit all of the data to
+   * the peer. Consider using the @ref async_write function if you need to
+   * ensure that all data is written before the blocking operation completes.
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_write_some(const ConstBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WriteHandler.
+    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+    boost::asio::detail::async_result_init<
+      WriteHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+    detail::async_io(next_layer_, core_,
+        detail::write_op<ConstBufferSequence>(buffers), init.handler);
+
+    return init.result.get();
+  }
+
+  /// Read some data from the stream.
+  /**
+   * This function is used to read data from the stream. The function call will
+   * block until one or more bytes of data has been read successfully, or until
+   * an error occurs.
+   *
+   * @param buffers The buffers into which the data will be read.
+   *
+   * @returns The number of bytes read.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   *
+   * @note The read_some operation may not read all of the requested number of
+   * bytes. Consider using the @ref read function if you need to ensure that the
+   * requested amount of data is read before the blocking operation completes.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t n = read_some(buffers, ec);
+    boost::asio::detail::throw_error(ec, "read_some");
+    return n;
+  }
+
+  /// Read some data from the stream.
+  /**
+   * This function is used to read data from the stream. The function call will
+   * block until one or more bytes of data has been read successfully, or until
+   * an error occurs.
+   *
+   * @param buffers The buffers into which the data will be read.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes read. Returns 0 if an error occurred.
+   *
+   * @note The read_some operation may not read all of the requested number of
+   * bytes. Consider using the @ref read function if you need to ensure that the
+   * requested amount of data is read before the blocking operation completes.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return detail::io(next_layer_, core_,
+        detail::read_op<MutableBufferSequence>(buffers), ec);
+  }
+
+  /// Start an asynchronous read.
+  /**
+   * This function is used to asynchronously read one or more bytes of data from
+   * the stream. The function call always returns immediately.
+   *
+   * @param buffers The buffers into which the data will be read. Although the
+   * buffers object may be copied as necessary, ownership of the underlying
+   * buffers is retained by the caller, which must guarantee that they remain
+   * valid until the handler is called.
+   *
+   * @param handler The handler to be called when the read operation completes.
+   * Copies will be made of the handler as required. The equivalent function
+   * signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes read.
+   * ); @endcode
+   *
+   * @note The async_read_some operation may not read all of the requested
+   * number of bytes. Consider using the @ref async_read function if you need to
+   * ensure that the requested amount of data is read before the asynchronous
+   * operation completes.
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_read_some(const MutableBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    boost::asio::detail::async_result_init<
+      ReadHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+    detail::async_io(next_layer_, core_,
+        detail::read_op<MutableBufferSequence>(buffers), init.handler);
+
+    return init.result.get();
+  }
+
+private:
+  Stream next_layer_;
+  detail::stream_core core_;
+  impl_struct backwards_compatible_impl_;
+};
+
+#endif // defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_STREAM_HPP
diff --git a/ext/patches/boost/asio/ssl/stream_base.hpp b/ext/patches/boost/asio/ssl/stream_base.hpp
new file mode 100644
index 0000000..38e2c71
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/stream_base.hpp
@@ -0,0 +1,54 @@
+//
+// ssl/stream_base.hpp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_STREAM_BASE_HPP
+#define BOOST_ASIO_SSL_STREAM_BASE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+
+/// The stream_base class is used as a base for the boost::asio::ssl::stream
+/// class template so that we have a common place to define various enums.
+class stream_base
+{
+public:
+  /// Different handshake types.
+  enum handshake_type
+  {
+    /// Perform handshaking as a client.
+    client,
+
+    /// Perform handshaking as a server.
+    server
+  };
+
+protected:
+  /// Protected destructor to prevent deletion through this type.
+  ~stream_base()
+  {
+  }
+};
+
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_STREAM_BASE_HPP
diff --git a/ext/patches/boost/asio/ssl/stream_service.hpp b/ext/patches/boost/asio/ssl/stream_service.hpp
new file mode 100644
index 0000000..27b4e9c
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/stream_service.hpp
@@ -0,0 +1,42 @@
+//
+// ssl/stream_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_STREAM_SERVICE_HPP
+#define BOOST_ASIO_SSL_STREAM_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <boost/asio/ssl/old/stream_service.hpp>
+#endif // defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+
+#if defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+using boost::asio::ssl::old::stream_service;
+
+#endif // defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_STREAM_SERVICE_HPP
diff --git a/ext/patches/boost/asio/ssl/verify_context.hpp b/ext/patches/boost/asio/ssl/verify_context.hpp
new file mode 100644
index 0000000..ebf3db1
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/verify_context.hpp
@@ -0,0 +1,75 @@
+//
+// ssl/verify_context.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_VERIFY_CONTEXT_HPP
+#define BOOST_ASIO_SSL_VERIFY_CONTEXT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+# include <boost/asio/detail/noncopyable.hpp>
+# include <boost/asio/ssl/detail/openssl_types.hpp>
+#endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+
+#if !defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+/// A simple wrapper around the X509_STORE_CTX type, used during verification of
+/// a peer certificate.
+/**
+ * @note The verify_context does not own the underlying X509_STORE_CTX object.
+ */
+class verify_context
+  : private noncopyable
+{
+public:
+  /// The native handle type of the verification context.
+  typedef X509_STORE_CTX* native_handle_type;
+
+  /// Constructor.
+  explicit verify_context(native_handle_type handle)
+    : handle_(handle)
+  {
+  }
+
+  /// Get the underlying implementation in the native type.
+  /**
+   * This function may be used to obtain the underlying implementation of the
+   * context. This is intended to allow access to context functionality that is
+   * not otherwise provided.
+   */
+  native_handle_type native_handle()
+  {
+    return handle_;
+  }
+
+private:
+  // The underlying native implementation.
+  native_handle_type handle_;
+};
+
+#endif // defined(BOOST_ASIO_ENABLE_OLD_SSL)
+
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_VERIFY_CONTEXT_HPP
diff --git a/ext/patches/boost/asio/ssl/verify_mode.hpp b/ext/patches/boost/asio/ssl/verify_mode.hpp
new file mode 100644
index 0000000..1b7bee3
--- /dev/null
+++ b/ext/patches/boost/asio/ssl/verify_mode.hpp
@@ -0,0 +1,65 @@
+//
+// ssl/verify_mode.hpp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SSL_VERIFY_MODE_HPP
+#define BOOST_ASIO_SSL_VERIFY_MODE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/ssl/detail/openssl_types.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace ssl {
+
+/// Bitmask type for peer verification.
+/**
+ * Possible values are:
+ *
+ * @li @ref verify_none
+ * @li @ref verify_peer
+ * @li @ref verify_fail_if_no_peer_cert
+ * @li @ref verify_client_once
+ */
+typedef int verify_mode;
+
+#if defined(GENERATING_DOCUMENTATION)
+/// No verification.
+const int verify_none = implementation_defined;
+
+/// Verify the peer.
+const int verify_peer = implementation_defined;
+
+/// Fail verification if the peer has no certificate. Ignored unless
+/// @ref verify_peer is set.
+const int verify_fail_if_no_peer_cert = implementation_defined;
+
+/// Do not request client certificate on renegotiation. Ignored unless
+/// @ref verify_peer is set.
+const int verify_client_once = implementation_defined;
+#else
+const int verify_none = SSL_VERIFY_NONE;
+const int verify_peer = SSL_VERIFY_PEER;
+const int verify_fail_if_no_peer_cert = SSL_VERIFY_FAIL_IF_NO_PEER_CERT;
+const int verify_client_once = SSL_VERIFY_CLIENT_ONCE;
+#endif
+
+} // namespace ssl
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_SSL_VERIFY_MODE_HPP
diff --git a/ext/patches/boost/asio/steady_timer.hpp b/ext/patches/boost/asio/steady_timer.hpp
new file mode 100644
index 0000000..0303f7a
--- /dev/null
+++ b/ext/patches/boost/asio/steady_timer.hpp
@@ -0,0 +1,63 @@
+//
+// steady_timer.hpp
+// ~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_STEADY_TIMER_HPP
+#define BOOST_ASIO_STEADY_TIMER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_STD_CHRONO) \
+  || defined(BOOST_ASIO_HAS_BOOST_CHRONO) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#if defined(BOOST_ASIO_HAS_STD_CHRONO)
+# include <chrono>
+#elif defined(BOOST_ASIO_HAS_BOOST_CHRONO)
+# include <boost/chrono/system_clocks.hpp>
+#endif
+
+#include <boost/asio/basic_waitable_timer.hpp>
+
+namespace boost {
+namespace asio {
+
+#if defined(GENERATING_DOCUMENTATION)
+/// Typedef for a timer based on the steady clock.
+/**
+ * This typedef uses the C++11 @c <chrono> standard library facility, if
+ * available. Otherwise, it may use the Boost.Chrono library. To explicitly
+ * utilise Boost.Chrono, use the basic_waitable_timer template directly:
+ * @code
+ * typedef basic_waitable_timer<boost::chrono::steady_clock> timer;
+ * @endcode
+ */
+typedef basic_waitable_timer<chrono::steady_clock> steady_timer;
+#elif defined(BOOST_ASIO_HAS_STD_CHRONO)
+# if defined(BOOST_ASIO_HAS_STD_CHRONO_MONOTONIC_CLOCK)
+typedef basic_waitable_timer<std::chrono::monotonic_clock> steady_timer;
+# else // defined(BOOST_ASIO_HAS_STD_CHRONO_MONOTONIC_CLOCK)
+typedef basic_waitable_timer<std::chrono::steady_clock> steady_timer;
+# endif // defined(BOOST_ASIO_HAS_STD_CHRONO_MONOTONIC_CLOCK)
+#elif defined(BOOST_ASIO_HAS_BOOST_CHRONO)
+typedef basic_waitable_timer<boost::chrono::steady_clock> steady_timer;
+#endif
+
+} // namespace asio
+} // namespace boost
+
+#endif // defined(BOOST_ASIO_HAS_STD_CHRONO) 
+       //   || defined(BOOST_ASIO_HAS_BOOST_CHRONO)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_STEADY_TIMER_HPP
diff --git a/ext/patches/boost/asio/strand.hpp b/ext/patches/boost/asio/strand.hpp
new file mode 100644
index 0000000..6a25d5f
--- /dev/null
+++ b/ext/patches/boost/asio/strand.hpp
@@ -0,0 +1,253 @@
+//
+// strand.hpp
+// ~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_STRAND_HPP
+#define BOOST_ASIO_STRAND_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/strand_service.hpp>
+#include <boost/asio/detail/wrapped_handler.hpp>
+#include <boost/asio/io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Provides serialised handler execution.
+/**
+ * The io_service::strand class provides the ability to post and dispatch
+ * handlers with the guarantee that none of those handlers will execute
+ * concurrently.
+ *
+ * @par Order of handler invocation
+ * Given:
+ *
+ * @li a strand object @c s
+ *
+ * @li an object @c a meeting completion handler requirements
+ *
+ * @li an object @c a1 which is an arbitrary copy of @c a made by the
+ * implementation
+ *
+ * @li an object @c b meeting completion handler requirements
+ *
+ * @li an object @c b1 which is an arbitrary copy of @c b made by the
+ * implementation
+ *
+ * if any of the following conditions are true:
+ *
+ * @li @c s.post(a) happens-before @c s.post(b)
+ * 
+ * @li @c s.post(a) happens-before @c s.dispatch(b), where the latter is
+ * performed outside the strand
+ * 
+ * @li @c s.dispatch(a) happens-before @c s.post(b), where the former is
+ * performed outside the strand
+ * 
+ * @li @c s.dispatch(a) happens-before @c s.dispatch(b), where both are
+ * performed outside the strand
+ *   
+ * then @c asio_handler_invoke(a1, &a1) happens-before
+ * @c asio_handler_invoke(b1, &b1).
+ * 
+ * Note that in the following case:
+ * @code async_op_1(..., s.wrap(a));
+ * async_op_2(..., s.wrap(b)); @endcode
+ * the completion of the first async operation will perform @c s.dispatch(a),
+ * and the second will perform @c s.dispatch(b), but the order in which those
+ * are performed is unspecified. That is, you cannot state whether one
+ * happens-before the other. Therefore none of the above conditions are met and
+ * no ordering guarantee is made.
+ *
+ * @note The implementation makes no guarantee that handlers posted or
+ * dispatched through different @c strand objects will be invoked concurrently.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Safe.
+ *
+ * @par Concepts:
+ * Dispatcher.
+ */
+class io_service::strand
+{
+public:
+  /// Constructor.
+  /**
+   * Constructs the strand.
+   *
+   * @param io_service The io_service object that the strand will use to
+   * dispatch handlers that are ready to be run.
+   */
+  explicit strand(boost::asio::io_service& io_service)
+    : service_(boost::asio::use_service<
+        boost::asio::detail::strand_service>(io_service))
+  {
+    service_.construct(impl_);
+  }
+
+  /// Destructor.
+  /**
+   * Destroys a strand.
+   *
+   * Handlers posted through the strand that have not yet been invoked will
+   * still be dispatched in a way that meets the guarantee of non-concurrency.
+   */
+  ~strand()
+  {
+  }
+
+  /// Get the io_service associated with the strand.
+  /**
+   * This function may be used to obtain the io_service object that the strand
+   * uses to dispatch handlers for asynchronous operations.
+   *
+   * @return A reference to the io_service object that the strand will use to
+   * dispatch handlers. Ownership is not transferred to the caller.
+   */
+  boost::asio::io_service& get_io_service()
+  {
+    return service_.get_io_service();
+  }
+
+  /// Request the strand to invoke the given handler.
+  /**
+   * This function is used to ask the strand to execute the given handler.
+   *
+   * The strand object guarantees that handlers posted or dispatched through
+   * the strand will not be executed concurrently. The handler may be executed
+   * inside this function if the guarantee can be met. If this function is
+   * called from within a handler that was posted or dispatched through the same
+   * strand, then the new handler will be executed immediately.
+   *
+   * The strand's guarantee is in addition to the guarantee provided by the
+   * underlying io_service. The io_service guarantees that the handler will only
+   * be called in a thread in which the io_service's run member function is
+   * currently being invoked.
+   *
+   * @param handler The handler to be called. The strand will make a copy of the
+   * handler object as required. The function signature of the handler must be:
+   * @code void handler(); @endcode
+   */
+  template <typename CompletionHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(CompletionHandler, void ())
+  dispatch(BOOST_ASIO_MOVE_ARG(CompletionHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a CompletionHandler.
+    BOOST_ASIO_COMPLETION_HANDLER_CHECK(CompletionHandler, handler) type_check;
+
+    detail::async_result_init<
+      CompletionHandler, void ()> init(
+        BOOST_ASIO_MOVE_CAST(CompletionHandler)(handler));
+
+    service_.dispatch(impl_, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Request the strand to invoke the given handler and return
+  /// immediately.
+  /**
+   * This function is used to ask the strand to execute the given handler, but
+   * without allowing the strand to call the handler from inside this function.
+   *
+   * The strand object guarantees that handlers posted or dispatched through
+   * the strand will not be executed concurrently. The strand's guarantee is in
+   * addition to the guarantee provided by the underlying io_service. The
+   * io_service guarantees that the handler will only be called in a thread in
+   * which the io_service's run member function is currently being invoked.
+   *
+   * @param handler The handler to be called. The strand will make a copy of the
+   * handler object as required. The function signature of the handler must be:
+   * @code void handler(); @endcode
+   */
+  template <typename CompletionHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(CompletionHandler, void ())
+  post(BOOST_ASIO_MOVE_ARG(CompletionHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a CompletionHandler.
+    BOOST_ASIO_COMPLETION_HANDLER_CHECK(CompletionHandler, handler) type_check;
+
+    detail::async_result_init<
+      CompletionHandler, void ()> init(
+        BOOST_ASIO_MOVE_CAST(CompletionHandler)(handler));
+
+    service_.post(impl_, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Create a new handler that automatically dispatches the wrapped handler
+  /// on the strand.
+  /**
+   * This function is used to create a new handler function object that, when
+   * invoked, will automatically pass the wrapped handler to the strand's
+   * dispatch function.
+   *
+   * @param handler The handler to be wrapped. The strand will make a copy of
+   * the handler object as required. The function signature of the handler must
+   * be: @code void handler(A1 a1, ... An an); @endcode
+   *
+   * @return A function object that, when invoked, passes the wrapped handler to
+   * the strand's dispatch function. Given a function object with the signature:
+   * @code R f(A1 a1, ... An an); @endcode
+   * If this function object is passed to the wrap function like so:
+   * @code strand.wrap(f); @endcode
+   * then the return value is a function object with the signature
+   * @code void g(A1 a1, ... An an); @endcode
+   * that, when invoked, executes code equivalent to:
+   * @code strand.dispatch(boost::bind(f, a1, ... an)); @endcode
+   */
+  template <typename Handler>
+#if defined(GENERATING_DOCUMENTATION)
+  unspecified
+#else
+  detail::wrapped_handler<strand, Handler, detail::is_continuation_if_running>
+#endif
+  wrap(Handler handler)
+  {
+    return detail::wrapped_handler<io_service::strand, Handler,
+        detail::is_continuation_if_running>(*this, handler);
+  }
+
+  /// Determine whether the strand is running in the current thread.
+  /**
+   * @return @c true if the current thread is executing a handler that was
+   * submitted to the strand using post(), dispatch() or wrap(). Otherwise
+   * returns @c false.
+   */
+  bool running_in_this_thread() const
+  {
+    return service_.running_in_this_thread(impl_);
+  }
+
+private:
+  boost::asio::detail::strand_service& service_;
+  boost::asio::detail::strand_service::implementation_type impl_;
+};
+
+/// Typedef for backwards compatibility.
+typedef boost::asio::io_service::strand strand;
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_STRAND_HPP
diff --git a/ext/patches/boost/asio/stream_socket_service.hpp b/ext/patches/boost/asio/stream_socket_service.hpp
new file mode 100644
index 0000000..ac671d2
--- /dev/null
+++ b/ext/patches/boost/asio/stream_socket_service.hpp
@@ -0,0 +1,378 @@
+//
+// stream_socket_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_STREAM_SOCKET_SERVICE_HPP
+#define BOOST_ASIO_STREAM_SOCKET_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/detail/type_traits.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# include <boost/asio/detail/winrt_ssocket_service.hpp>
+#elif defined(BOOST_ASIO_HAS_IOCP)
+# include <boost/asio/detail/win_iocp_socket_service.hpp>
+#else
+# include <boost/asio/detail/reactive_socket_service.hpp>
+#endif
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Default service implementation for a stream socket.
+template <typename Protocol>
+class stream_socket_service
+#if defined(GENERATING_DOCUMENTATION)
+  : public boost::asio::io_service::service
+#else
+  : public boost::asio::detail::service_base<stream_socket_service<Protocol> >
+#endif
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The unique service identifier.
+  static boost::asio::io_service::id id;
+#endif
+
+  /// The protocol type.
+  typedef Protocol protocol_type;
+
+  /// The endpoint type.
+  typedef typename Protocol::endpoint endpoint_type;
+
+private:
+  // The type of the platform-specific implementation.
+#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
+  typedef detail::winrt_ssocket_service<Protocol> service_impl_type;
+#elif defined(BOOST_ASIO_HAS_IOCP)
+  typedef detail::win_iocp_socket_service<Protocol> service_impl_type;
+#else
+  typedef detail::reactive_socket_service<Protocol> service_impl_type;
+#endif
+
+public:
+  /// The type of a stream socket implementation.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined implementation_type;
+#else
+  typedef typename service_impl_type::implementation_type implementation_type;
+#endif
+
+  /// (Deprecated: Use native_handle_type.) The native socket type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_type;
+#else
+  typedef typename service_impl_type::native_handle_type native_type;
+#endif
+
+  /// The native socket type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_handle_type;
+#else
+  typedef typename service_impl_type::native_handle_type native_handle_type;
+#endif
+
+  /// Construct a new stream socket service for the specified io_service.
+  explicit stream_socket_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<
+        stream_socket_service<Protocol> >(io_service),
+      service_impl_(io_service)
+  {
+  }
+
+  /// Construct a new stream socket implementation.
+  void construct(implementation_type& impl)
+  {
+    service_impl_.construct(impl);
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a new stream socket implementation.
+  void move_construct(implementation_type& impl,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_construct(impl, other_impl);
+  }
+
+  /// Move-assign from another stream socket implementation.
+  void move_assign(implementation_type& impl,
+      stream_socket_service& other_service,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_assign(impl, other_service.service_impl_, other_impl);
+  }
+
+  /// Move-construct a new stream socket implementation from another protocol
+  /// type.
+  template <typename Protocol1>
+  void converting_move_construct(implementation_type& impl,
+      typename stream_socket_service<
+        Protocol1>::implementation_type& other_impl,
+      typename enable_if<is_convertible<
+        Protocol1, Protocol>::value>::type* = 0)
+  {
+    service_impl_.template converting_move_construct<Protocol1>(
+        impl, other_impl);
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Destroy a stream socket implementation.
+  void destroy(implementation_type& impl)
+  {
+    service_impl_.destroy(impl);
+  }
+
+  /// Open a stream socket.
+  boost::system::error_code open(implementation_type& impl,
+      const protocol_type& protocol, boost::system::error_code& ec)
+  {
+    if (protocol.type() == BOOST_ASIO_OS_DEF(SOCK_STREAM))
+      service_impl_.open(impl, protocol, ec);
+    else
+      ec = boost::asio::error::invalid_argument;
+    return ec;
+  }
+
+  /// Assign an existing native socket to a stream socket.
+  boost::system::error_code assign(implementation_type& impl,
+      const protocol_type& protocol, const native_handle_type& native_socket,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.assign(impl, protocol, native_socket, ec);
+  }
+
+  /// Determine whether the socket is open.
+  bool is_open(const implementation_type& impl) const
+  {
+    return service_impl_.is_open(impl);
+  }
+
+  /// Close a stream socket implementation.
+  boost::system::error_code close(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.close(impl, ec);
+  }
+
+  /// (Deprecated: Use native_handle().) Get the native socket implementation.
+  native_type native(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Get the native socket implementation.
+  native_handle_type native_handle(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Cancel all asynchronous operations associated with the socket.
+  boost::system::error_code cancel(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.cancel(impl, ec);
+  }
+
+  /// Determine whether the socket is at the out-of-band data mark.
+  bool at_mark(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return service_impl_.at_mark(impl, ec);
+  }
+
+  /// Determine the number of bytes available for reading.
+  std::size_t available(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return service_impl_.available(impl, ec);
+  }
+
+  /// Bind the stream socket to the specified local endpoint.
+  boost::system::error_code bind(implementation_type& impl,
+      const endpoint_type& endpoint, boost::system::error_code& ec)
+  {
+    return service_impl_.bind(impl, endpoint, ec);
+  }
+
+  /// Connect the stream socket to the specified endpoint.
+  boost::system::error_code connect(implementation_type& impl,
+      const endpoint_type& peer_endpoint, boost::system::error_code& ec)
+  {
+    return service_impl_.connect(impl, peer_endpoint, ec);
+  }
+
+  /// Start an asynchronous connect.
+  template <typename ConnectHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ConnectHandler,
+      void (boost::system::error_code))
+  async_connect(implementation_type& impl,
+      const endpoint_type& peer_endpoint,
+      BOOST_ASIO_MOVE_ARG(ConnectHandler) handler)
+  {
+    detail::async_result_init<
+      ConnectHandler, void (boost::system::error_code)> init(
+        BOOST_ASIO_MOVE_CAST(ConnectHandler)(handler));
+
+    service_impl_.async_connect(impl, peer_endpoint, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Set a socket option.
+  template <typename SettableSocketOption>
+  boost::system::error_code set_option(implementation_type& impl,
+      const SettableSocketOption& option, boost::system::error_code& ec)
+  {
+    return service_impl_.set_option(impl, option, ec);
+  }
+
+  /// Get a socket option.
+  template <typename GettableSocketOption>
+  boost::system::error_code get_option(const implementation_type& impl,
+      GettableSocketOption& option, boost::system::error_code& ec) const
+  {
+    return service_impl_.get_option(impl, option, ec);
+  }
+
+  /// Perform an IO control command on the socket.
+  template <typename IoControlCommand>
+  boost::system::error_code io_control(implementation_type& impl,
+      IoControlCommand& command, boost::system::error_code& ec)
+  {
+    return service_impl_.io_control(impl, command, ec);
+  }
+
+  /// Gets the non-blocking mode of the socket.
+  bool non_blocking(const implementation_type& impl) const
+  {
+    return service_impl_.non_blocking(impl);
+  }
+
+  /// Sets the non-blocking mode of the socket.
+  boost::system::error_code non_blocking(implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    return service_impl_.non_blocking(impl, mode, ec);
+  }
+
+  /// Gets the non-blocking mode of the native socket implementation.
+  bool native_non_blocking(const implementation_type& impl) const
+  {
+    return service_impl_.native_non_blocking(impl);
+  }
+
+  /// Sets the non-blocking mode of the native socket implementation.
+  boost::system::error_code native_non_blocking(implementation_type& impl,
+      bool mode, boost::system::error_code& ec)
+  {
+    return service_impl_.native_non_blocking(impl, mode, ec);
+  }
+
+  /// Get the local endpoint.
+  endpoint_type local_endpoint(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return service_impl_.local_endpoint(impl, ec);
+  }
+
+  /// Get the remote endpoint.
+  endpoint_type remote_endpoint(const implementation_type& impl,
+      boost::system::error_code& ec) const
+  {
+    return service_impl_.remote_endpoint(impl, ec);
+  }
+
+  /// Disable sends or receives on the socket.
+  boost::system::error_code shutdown(implementation_type& impl,
+      socket_base::shutdown_type what, boost::system::error_code& ec)
+  {
+    return service_impl_.shutdown(impl, what, ec);
+  }
+
+  /// Send the given data to the peer.
+  template <typename ConstBufferSequence>
+  std::size_t send(implementation_type& impl,
+      const ConstBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return service_impl_.send(impl, buffers, flags, ec);
+  }
+
+  /// Start an asynchronous send.
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_send(implementation_type& impl,
+      const ConstBufferSequence& buffers,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    detail::async_result_init<
+      WriteHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+    service_impl_.async_send(impl, buffers, flags, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Receive some data from the peer.
+  template <typename MutableBufferSequence>
+  std::size_t receive(implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      socket_base::message_flags flags, boost::system::error_code& ec)
+  {
+    return service_impl_.receive(impl, buffers, flags, ec);
+  }
+
+  /// Start an asynchronous receive.
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_receive(implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      socket_base::message_flags flags,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    detail::async_result_init<
+      ReadHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+    service_impl_.async_receive(impl, buffers, flags, init.handler);
+
+    return init.result.get();
+  }
+
+private:
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+    service_impl_.shutdown_service();
+  }
+
+  // The platform-specific implementation.
+  service_impl_type service_impl_;
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_STREAM_SOCKET_SERVICE_HPP
diff --git a/ext/patches/boost/asio/streambuf.hpp b/ext/patches/boost/asio/streambuf.hpp
new file mode 100644
index 0000000..28d2b99
--- /dev/null
+++ b/ext/patches/boost/asio/streambuf.hpp
@@ -0,0 +1,35 @@
+//
+// streambuf.hpp
+// ~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_STREAMBUF_HPP
+#define BOOST_ASIO_STREAMBUF_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#include <boost/asio/basic_streambuf.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Typedef for the typical usage of basic_streambuf.
+typedef basic_streambuf<> streambuf;
+
+} // namespace asio
+} // namespace boost
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+#endif // BOOST_ASIO_STREAMBUF_HPP
diff --git a/ext/patches/boost/asio/system_timer.hpp b/ext/patches/boost/asio/system_timer.hpp
new file mode 100644
index 0000000..86de280
--- /dev/null
+++ b/ext/patches/boost/asio/system_timer.hpp
@@ -0,0 +1,59 @@
+//
+// system_timer.hpp
+// ~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_SYSTEM_TIMER_HPP
+#define BOOST_ASIO_SYSTEM_TIMER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_STD_CHRONO) \
+  || defined(BOOST_ASIO_HAS_BOOST_CHRONO) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#if defined(BOOST_ASIO_HAS_STD_CHRONO)
+# include <chrono>
+#elif defined(BOOST_ASIO_HAS_BOOST_CHRONO)
+# include <boost/chrono/system_clocks.hpp>
+#endif
+
+#include <boost/asio/basic_waitable_timer.hpp>
+
+namespace boost {
+namespace asio {
+
+#if defined(GENERATING_DOCUMENTATION)
+/// Typedef for a timer based on the system clock.
+/**
+ * This typedef uses the C++11 @c <chrono> standard library facility, if
+ * available. Otherwise, it may use the Boost.Chrono library. To explicitly
+ * utilise Boost.Chrono, use the basic_waitable_timer template directly:
+ * @code
+ * typedef basic_waitable_timer<boost::chrono::system_clock> timer;
+ * @endcode
+ */
+typedef basic_waitable_timer<chrono::system_clock> system_timer;
+#elif defined(BOOST_ASIO_HAS_STD_CHRONO)
+typedef basic_waitable_timer<std::chrono::system_clock> system_timer;
+#elif defined(BOOST_ASIO_HAS_BOOST_CHRONO)
+typedef basic_waitable_timer<boost::chrono::system_clock> system_timer;
+#endif
+
+} // namespace asio
+} // namespace boost
+
+#endif // defined(BOOST_ASIO_HAS_STD_CHRONO) 
+       //   || defined(BOOST_ASIO_HAS_BOOST_CHRONO)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_SYSTEM_TIMER_HPP
diff --git a/ext/patches/boost/asio/time_traits.hpp b/ext/patches/boost/asio/time_traits.hpp
new file mode 100644
index 0000000..35d1f76
--- /dev/null
+++ b/ext/patches/boost/asio/time_traits.hpp
@@ -0,0 +1,90 @@
+//
+// time_traits.hpp
+// ~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_TIME_TRAITS_HPP
+#define BOOST_ASIO_TIME_TRAITS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/socket_types.hpp> // Must come before posix_time.
+
+#if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <boost/asio/detail/push_options.hpp>
+#include <boost/date_time/posix_time/posix_time_types.hpp>
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Time traits suitable for use with the deadline timer.
+template <typename Time>
+struct time_traits;
+
+/// Time traits specialised for posix_time.
+template <>
+struct time_traits<boost::posix_time::ptime>
+{
+  /// The time type.
+  typedef boost::posix_time::ptime time_type;
+
+  /// The duration type.
+  typedef boost::posix_time::time_duration duration_type;
+
+  /// Get the current time.
+  static time_type now()
+  {
+#if defined(BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK)
+    return boost::posix_time::microsec_clock::universal_time();
+#else // defined(BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK)
+    return boost::posix_time::second_clock::universal_time();
+#endif // defined(BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK)
+  }
+
+  /// Add a duration to a time.
+  static time_type add(const time_type& t, const duration_type& d)
+  {
+    return t + d;
+  }
+
+  /// Subtract one time from another.
+  static duration_type subtract(const time_type& t1, const time_type& t2)
+  {
+    return t1 - t2;
+  }
+
+  /// Test whether one time is less than another.
+  static bool less_than(const time_type& t1, const time_type& t2)
+  {
+    return t1 < t2;
+  }
+
+  /// Convert to POSIX duration type.
+  static boost::posix_time::time_duration to_posix_duration(
+      const duration_type& d)
+  {
+    return d;
+  }
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
+       // || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_TIME_TRAITS_HPP
diff --git a/ext/patches/boost/asio/unyield.hpp b/ext/patches/boost/asio/unyield.hpp
new file mode 100644
index 0000000..ad94427
--- /dev/null
+++ b/ext/patches/boost/asio/unyield.hpp
@@ -0,0 +1,21 @@
+//
+// unyield.hpp
+// ~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifdef reenter
+# undef reenter
+#endif
+
+#ifdef yield
+# undef yield
+#endif
+
+#ifdef fork
+# undef fork
+#endif
diff --git a/ext/patches/boost/asio/use_future.hpp b/ext/patches/boost/asio/use_future.hpp
new file mode 100644
index 0000000..8ac567a
--- /dev/null
+++ b/ext/patches/boost/asio/use_future.hpp
@@ -0,0 +1,94 @@
+//
+// use_future.hpp
+// ~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_USE_FUTURE_HPP
+#define BOOST_ASIO_USE_FUTURE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <memory>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Class used to specify that an asynchronous operation should return a future.
+/**
+ * The use_future_t class is used to indicate that an asynchronous operation
+ * should return a std::future object. A use_future_t object may be passed as a
+ * handler to an asynchronous operation, typically using the special value @c
+ * boost::asio::use_future. For example:
+ *
+ * @code std::future<std::size_t> my_future
+ *   = my_socket.async_read_some(my_buffer, boost::asio::use_future); @endcode
+ *
+ * The initiating function (async_read_some in the above example) returns a
+ * future that will receive the result of the operation. If the operation
+ * completes with an error_code indicating failure, it is converted into a
+ * system_error and passed back to the caller via the future.
+ */
+template <typename Allocator = std::allocator<void> >
+class use_future_t
+{
+public:
+  /// The allocator type. The allocator is used when constructing the
+  /// @c std::promise object for a given asynchronous operation.
+  typedef Allocator allocator_type;
+
+  /// Construct using default-constructed allocator.
+  BOOST_ASIO_CONSTEXPR use_future_t()
+  {
+  }
+
+  /// Construct using specified allocator.
+  explicit use_future_t(const Allocator& allocator)
+    : allocator_(allocator)
+  {
+  }
+
+  /// Specify an alternate allocator.
+  template <typename OtherAllocator>
+  use_future_t<OtherAllocator> operator[](const OtherAllocator& allocator) const
+  {
+    return use_future_t<OtherAllocator>(allocator);
+  }
+
+  /// Obtain allocator.
+  allocator_type get_allocator() const
+  {
+    return allocator_;
+  }
+
+private:
+  Allocator allocator_;
+};
+
+/// A special value, similar to std::nothrow.
+/**
+ * See the documentation for boost::asio::use_future_t for a usage example.
+ */
+#if defined(BOOST_ASIO_HAS_CONSTEXPR) || defined(GENERATING_DOCUMENTATION)
+constexpr use_future_t<> use_future;
+#elif defined(BOOST_ASIO_MSVC)
+__declspec(selectany) use_future_t<> use_future;
+#endif
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/impl/use_future.hpp>
+
+#endif // BOOST_ASIO_USE_FUTURE_HPP
diff --git a/ext/patches/boost/asio/version.hpp b/ext/patches/boost/asio/version.hpp
new file mode 100644
index 0000000..c55f192
--- /dev/null
+++ b/ext/patches/boost/asio/version.hpp
@@ -0,0 +1,23 @@
+//
+// version.hpp
+// ~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_VERSION_HPP
+#define BOOST_ASIO_VERSION_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+// BOOST_ASIO_VERSION % 100 is the sub-minor version
+// BOOST_ASIO_VERSION / 100 % 1000 is the minor version
+// BOOST_ASIO_VERSION / 100000 is the major version
+#define BOOST_ASIO_VERSION 101004 // 1.10.4
+
+#endif // BOOST_ASIO_VERSION_HPP
diff --git a/ext/patches/boost/asio/wait_traits.hpp b/ext/patches/boost/asio/wait_traits.hpp
new file mode 100644
index 0000000..5f55457
--- /dev/null
+++ b/ext/patches/boost/asio/wait_traits.hpp
@@ -0,0 +1,43 @@
+//
+// wait_traits.hpp
+// ~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_WAIT_TRAITS_HPP
+#define BOOST_ASIO_WAIT_TRAITS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Wait traits suitable for use with the basic_waitable_timer class template.
+template <typename Clock>
+struct wait_traits
+{
+  /// Convert a clock duration into a duration used for waiting.
+  /** 
+   * @returns @c d.
+   */
+  static typename Clock::duration to_wait_duration(
+      const typename Clock::duration& d)
+  {
+    return d;
+  }
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_WAIT_TRAITS_HPP
diff --git a/ext/patches/boost/asio/waitable_timer_service.hpp b/ext/patches/boost/asio/waitable_timer_service.hpp
new file mode 100644
index 0000000..73317b6
--- /dev/null
+++ b/ext/patches/boost/asio/waitable_timer_service.hpp
@@ -0,0 +1,170 @@
+//
+// waitable_timer_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_WAITABLE_TIMER_SERVICE_HPP
+#define BOOST_ASIO_WAITABLE_TIMER_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/detail/chrono_time_traits.hpp>
+#include <boost/asio/detail/deadline_timer_service.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/wait_traits.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/// Default service implementation for a timer.
+template <typename Clock,
+    typename WaitTraits = boost::asio::wait_traits<Clock> >
+class waitable_timer_service
+#if defined(GENERATING_DOCUMENTATION)
+  : public boost::asio::io_service::service
+#else
+  : public boost::asio::detail::service_base<
+      waitable_timer_service<Clock, WaitTraits> >
+#endif
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The unique service identifier.
+  static boost::asio::io_service::id id;
+#endif
+
+  /// The clock type.
+  typedef Clock clock_type;
+
+  /// The duration type of the clock.
+  typedef typename clock_type::duration duration;
+
+  /// The time point type of the clock.
+  typedef typename clock_type::time_point time_point;
+
+  /// The wait traits type.
+  typedef WaitTraits traits_type;
+
+private:
+  // The type of the platform-specific implementation.
+  typedef detail::deadline_timer_service<
+    detail::chrono_time_traits<Clock, WaitTraits> > service_impl_type;
+
+public:
+  /// The implementation type of the waitable timer.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined implementation_type;
+#else
+  typedef typename service_impl_type::implementation_type implementation_type;
+#endif
+
+  /// Construct a new timer service for the specified io_service.
+  explicit waitable_timer_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<
+        waitable_timer_service<Clock, WaitTraits> >(io_service),
+      service_impl_(io_service)
+  {
+  }
+
+  /// Construct a new timer implementation.
+  void construct(implementation_type& impl)
+  {
+    service_impl_.construct(impl);
+  }
+
+  /// Destroy a timer implementation.
+  void destroy(implementation_type& impl)
+  {
+    service_impl_.destroy(impl);
+  }
+
+  /// Cancel any asynchronous wait operations associated with the timer.
+  std::size_t cancel(implementation_type& impl, boost::system::error_code& ec)
+  {
+    return service_impl_.cancel(impl, ec);
+  }
+
+  /// Cancels one asynchronous wait operation associated with the timer.
+  std::size_t cancel_one(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.cancel_one(impl, ec);
+  }
+
+  /// Get the expiry time for the timer as an absolute time.
+  time_point expires_at(const implementation_type& impl) const
+  {
+    return service_impl_.expires_at(impl);
+  }
+
+  /// Set the expiry time for the timer as an absolute time.
+  std::size_t expires_at(implementation_type& impl,
+      const time_point& expiry_time, boost::system::error_code& ec)
+  {
+    return service_impl_.expires_at(impl, expiry_time, ec);
+  }
+
+  /// Get the expiry time for the timer relative to now.
+  duration expires_from_now(const implementation_type& impl) const
+  {
+    return service_impl_.expires_from_now(impl);
+  }
+
+  /// Set the expiry time for the timer relative to now.
+  std::size_t expires_from_now(implementation_type& impl,
+      const duration& expiry_time, boost::system::error_code& ec)
+  {
+    return service_impl_.expires_from_now(impl, expiry_time, ec);
+  }
+
+  // Perform a blocking wait on the timer.
+  void wait(implementation_type& impl, boost::system::error_code& ec)
+  {
+    service_impl_.wait(impl, ec);
+  }
+
+  // Start an asynchronous wait on the timer.
+  template <typename WaitHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WaitHandler,
+      void (boost::system::error_code))
+  async_wait(implementation_type& impl,
+      BOOST_ASIO_MOVE_ARG(WaitHandler) handler)
+  {
+    detail::async_result_init<
+      WaitHandler, void (boost::system::error_code)> init(
+        BOOST_ASIO_MOVE_CAST(WaitHandler)(handler));
+
+    service_impl_.async_wait(impl, init.handler);
+
+    return init.result.get();
+  }
+
+private:
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+    service_impl_.shutdown_service();
+  }
+
+  // The platform-specific implementation.
+  service_impl_type service_impl_;
+};
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // BOOST_ASIO_WAITABLE_TIMER_SERVICE_HPP
diff --git a/ext/patches/boost/asio/windows/basic_handle.hpp b/ext/patches/boost/asio/windows/basic_handle.hpp
new file mode 100644
index 0000000..f3c252e
--- /dev/null
+++ b/ext/patches/boost/asio/windows/basic_handle.hpp
@@ -0,0 +1,283 @@
+//
+// windows/basic_handle.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_WINDOWS_BASIC_HANDLE_HPP
+#define BOOST_ASIO_WINDOWS_BASIC_HANDLE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE) \
+  || defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE) \
+  || defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <boost/asio/basic_io_object.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace windows {
+
+/// Provides Windows handle functionality.
+/**
+ * The windows::basic_handle class template provides the ability to wrap a
+ * Windows handle.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ */
+template <typename HandleService>
+class basic_handle
+  : public basic_io_object<HandleService>
+{
+public:
+  /// (Deprecated: Use native_handle_type.) The native representation of a
+  /// handle.
+  typedef typename HandleService::native_handle_type native_type;
+
+  /// The native representation of a handle.
+  typedef typename HandleService::native_handle_type native_handle_type;
+
+  /// A basic_handle is always the lowest layer.
+  typedef basic_handle<HandleService> lowest_layer_type;
+
+  /// Construct a basic_handle without opening it.
+  /**
+   * This constructor creates a handle without opening it.
+   *
+   * @param io_service The io_service object that the handle will use to
+   * dispatch handlers for any asynchronous operations performed on the handle.
+   */
+  explicit basic_handle(boost::asio::io_service& io_service)
+    : basic_io_object<HandleService>(io_service)
+  {
+  }
+
+  /// Construct a basic_handle on an existing native handle.
+  /**
+   * This constructor creates a handle object to hold an existing native handle.
+   *
+   * @param io_service The io_service object that the handle will use to
+   * dispatch handlers for any asynchronous operations performed on the handle.
+   *
+   * @param handle A native handle.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_handle(boost::asio::io_service& io_service,
+      const native_handle_type& handle)
+    : basic_io_object<HandleService>(io_service)
+  {
+    boost::system::error_code ec;
+    this->get_service().assign(this->get_implementation(), handle, ec);
+    boost::asio::detail::throw_error(ec, "assign");
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a basic_handle from another.
+  /**
+   * This constructor moves a handle from one object to another.
+   *
+   * @param other The other basic_handle object from which the move will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_handle(io_service&) constructor.
+   */
+  basic_handle(basic_handle&& other)
+    : basic_io_object<HandleService>(
+        BOOST_ASIO_MOVE_CAST(basic_handle)(other))
+  {
+  }
+
+  /// Move-assign a basic_handle from another.
+  /**
+   * This assignment operator moves a handle from one object to another.
+   *
+   * @param other The other basic_handle object from which the move will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_handle(io_service&) constructor.
+   */
+  basic_handle& operator=(basic_handle&& other)
+  {
+    basic_io_object<HandleService>::operator=(
+        BOOST_ASIO_MOVE_CAST(basic_handle)(other));
+    return *this;
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Get a reference to the lowest layer.
+  /**
+   * This function returns a reference to the lowest layer in a stack of
+   * layers. Since a basic_handle cannot contain any further layers, it simply
+   * returns a reference to itself.
+   *
+   * @return A reference to the lowest layer in the stack of layers. Ownership
+   * is not transferred to the caller.
+   */
+  lowest_layer_type& lowest_layer()
+  {
+    return *this;
+  }
+
+  /// Get a const reference to the lowest layer.
+  /**
+   * This function returns a const reference to the lowest layer in a stack of
+   * layers. Since a basic_handle cannot contain any further layers, it simply
+   * returns a reference to itself.
+   *
+   * @return A const reference to the lowest layer in the stack of layers.
+   * Ownership is not transferred to the caller.
+   */
+  const lowest_layer_type& lowest_layer() const
+  {
+    return *this;
+  }
+
+  /// Assign an existing native handle to the handle.
+  /*
+   * This function opens the handle to hold an existing native handle.
+   *
+   * @param handle A native handle.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void assign(const native_handle_type& handle)
+  {
+    boost::system::error_code ec;
+    this->get_service().assign(this->get_implementation(), handle, ec);
+    boost::asio::detail::throw_error(ec, "assign");
+  }
+
+  /// Assign an existing native handle to the handle.
+  /*
+   * This function opens the handle to hold an existing native handle.
+   *
+   * @param handle A native handle.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code assign(const native_handle_type& handle,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().assign(this->get_implementation(), handle, ec);
+  }
+
+  /// Determine whether the handle is open.
+  bool is_open() const
+  {
+    return this->get_service().is_open(this->get_implementation());
+  }
+
+  /// Close the handle.
+  /**
+   * This function is used to close the handle. Any asynchronous read or write
+   * operations will be cancelled immediately, and will complete with the
+   * boost::asio::error::operation_aborted error.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void close()
+  {
+    boost::system::error_code ec;
+    this->get_service().close(this->get_implementation(), ec);
+    boost::asio::detail::throw_error(ec, "close");
+  }
+
+  /// Close the handle.
+  /**
+   * This function is used to close the handle. Any asynchronous read or write
+   * operations will be cancelled immediately, and will complete with the
+   * boost::asio::error::operation_aborted error.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code close(boost::system::error_code& ec)
+  {
+    return this->get_service().close(this->get_implementation(), ec);
+  }
+
+  /// (Deprecated: Use native_handle().) Get the native handle representation.
+  /**
+   * This function may be used to obtain the underlying representation of the
+   * handle. This is intended to allow access to native handle functionality
+   * that is not otherwise provided.
+   */
+  native_type native()
+  {
+    return this->get_service().native_handle(this->get_implementation());
+  }
+
+  /// Get the native handle representation.
+  /**
+   * This function may be used to obtain the underlying representation of the
+   * handle. This is intended to allow access to native handle functionality
+   * that is not otherwise provided.
+   */
+  native_handle_type native_handle()
+  {
+    return this->get_service().native_handle(this->get_implementation());
+  }
+
+  /// Cancel all asynchronous operations associated with the handle.
+  /**
+   * This function causes all outstanding asynchronous read or write operations
+   * to finish immediately, and the handlers for cancelled operations will be
+   * passed the boost::asio::error::operation_aborted error.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void cancel()
+  {
+    boost::system::error_code ec;
+    this->get_service().cancel(this->get_implementation(), ec);
+    boost::asio::detail::throw_error(ec, "cancel");
+  }
+
+  /// Cancel all asynchronous operations associated with the handle.
+  /**
+   * This function causes all outstanding asynchronous read or write operations
+   * to finish immediately, and the handlers for cancelled operations will be
+   * passed the boost::asio::error::operation_aborted error.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  boost::system::error_code cancel(boost::system::error_code& ec)
+  {
+    return this->get_service().cancel(this->get_implementation(), ec);
+  }
+
+protected:
+  /// Protected destructor to prevent deletion through this type.
+  ~basic_handle()
+  {
+  }
+};
+
+} // namespace windows
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE)
+       //   || defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE)
+       //   || defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_WINDOWS_BASIC_HANDLE_HPP
diff --git a/ext/patches/boost/asio/windows/basic_object_handle.hpp b/ext/patches/boost/asio/windows/basic_object_handle.hpp
new file mode 100644
index 0000000..44687a3
--- /dev/null
+++ b/ext/patches/boost/asio/windows/basic_object_handle.hpp
@@ -0,0 +1,180 @@
+//
+// windows/basic_object_handle.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2011 Boris Schaeling (boris at highscore.de)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_WINDOWS_BASIC_OBJECT_HANDLE_HPP
+#define BOOST_ASIO_WINDOWS_BASIC_OBJECT_HANDLE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/windows/basic_handle.hpp>
+#include <boost/asio/windows/object_handle_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace windows {
+
+/// Provides object-oriented handle functionality.
+/**
+ * The windows::basic_object_handle class template provides asynchronous and
+ * blocking object-oriented handle functionality.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ */
+template <typename ObjectHandleService = object_handle_service>
+class basic_object_handle
+  : public basic_handle<ObjectHandleService>
+{
+public:
+  /// The native representation of a handle.
+  typedef typename ObjectHandleService::native_handle_type native_handle_type;
+
+  /// Construct a basic_object_handle without opening it.
+  /**
+   * This constructor creates an object handle without opening it.
+   *
+   * @param io_service The io_service object that the object handle will use to
+   * dispatch handlers for any asynchronous operations performed on the handle.
+   */
+  explicit basic_object_handle(boost::asio::io_service& io_service)
+    : basic_handle<ObjectHandleService>(io_service)
+  {
+  }
+
+  /// Construct a basic_object_handle on an existing native handle.
+  /**
+   * This constructor creates an object handle object to hold an existing native
+   * handle.
+   *
+   * @param io_service The io_service object that the object handle will use to
+   * dispatch handlers for any asynchronous operations performed on the handle.
+   *
+   * @param native_handle The new underlying handle implementation.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_object_handle(boost::asio::io_service& io_service,
+      const native_handle_type& native_handle)
+    : basic_handle<ObjectHandleService>(io_service, native_handle)
+  {
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a basic_object_handle from another.
+  /**
+   * This constructor moves an object handle from one object to another.
+   *
+   * @param other The other basic_object_handle object from which the move will
+   * occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_object_handle(io_service&) constructor.
+   */
+  basic_object_handle(basic_object_handle&& other)
+    : basic_handle<ObjectHandleService>(
+        BOOST_ASIO_MOVE_CAST(basic_object_handle)(other))
+  {
+  }
+
+  /// Move-assign a basic_object_handle from another.
+  /**
+   * This assignment operator moves an object handle from one object to another.
+   *
+   * @param other The other basic_object_handle object from which the move will
+   * occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_object_handle(io_service&) constructor.
+   */
+  basic_object_handle& operator=(basic_object_handle&& other)
+  {
+    basic_handle<ObjectHandleService>::operator=(
+        BOOST_ASIO_MOVE_CAST(basic_object_handle)(other));
+    return *this;
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Perform a blocking wait on the object handle.
+  /**
+   * This function is used to wait for the object handle to be set to the
+   * signalled state. This function blocks and does not return until the object
+   * handle has been set to the signalled state.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  void wait()
+  {
+    boost::system::error_code ec;
+    this->get_service().wait(this->get_implementation(), ec);
+    boost::asio::detail::throw_error(ec, "wait");
+  }
+
+  /// Perform a blocking wait on the object handle.
+  /**
+   * This function is used to wait for the object handle to be set to the
+   * signalled state. This function blocks and does not return until the object
+   * handle has been set to the signalled state.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   */
+  void wait(boost::system::error_code& ec)
+  {
+    this->get_service().wait(this->get_implementation(), ec);
+  }
+
+  /// Start an asynchronous wait on the object handle.
+  /**
+   * This function is be used to initiate an asynchronous wait against the
+   * object handle. It always returns immediately.
+   *
+   * @param handler The handler to be called when the object handle is set to
+   * the signalled state. Copies will be made of the handler as required. The
+   * function signature of the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error // Result of operation.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   */
+  template <typename WaitHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WaitHandler,
+      void (boost::system::error_code))
+  async_wait(BOOST_ASIO_MOVE_ARG(WaitHandler) handler)
+  {
+    return this->get_service().async_wait(this->get_implementation(),
+        BOOST_ASIO_MOVE_CAST(WaitHandler)(handler));
+  }
+};
+
+} // namespace windows
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_WINDOWS_BASIC_OBJECT_HANDLE_HPP
diff --git a/ext/patches/boost/asio/windows/basic_random_access_handle.hpp b/ext/patches/boost/asio/windows/basic_random_access_handle.hpp
new file mode 100644
index 0000000..77f6a5c
--- /dev/null
+++ b/ext/patches/boost/asio/windows/basic_random_access_handle.hpp
@@ -0,0 +1,378 @@
+//
+// windows/basic_random_access_handle.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_WINDOWS_BASIC_RANDOM_ACCESS_HANDLE_HPP
+#define BOOST_ASIO_WINDOWS_BASIC_RANDOM_ACCESS_HANDLE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <cstddef>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/windows/basic_handle.hpp>
+#include <boost/asio/windows/random_access_handle_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace windows {
+
+/// Provides random-access handle functionality.
+/**
+ * The windows::basic_random_access_handle class template provides asynchronous
+ * and blocking random-access handle functionality.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ */
+template <typename RandomAccessHandleService = random_access_handle_service>
+class basic_random_access_handle
+  : public basic_handle<RandomAccessHandleService>
+{
+public:
+  /// (Deprecated: Use native_handle_type.) The native representation of a
+  /// handle.
+  typedef typename RandomAccessHandleService::native_handle_type native_type;
+
+  /// The native representation of a handle.
+  typedef typename RandomAccessHandleService::native_handle_type
+    native_handle_type;
+
+  /// Construct a basic_random_access_handle without opening it.
+  /**
+   * This constructor creates a random-access handle without opening it. The
+   * handle needs to be opened before data can be written to or read from it.
+   *
+   * @param io_service The io_service object that the random-access handle will
+   * use to dispatch handlers for any asynchronous operations performed on the
+   * handle.
+   */
+  explicit basic_random_access_handle(boost::asio::io_service& io_service)
+    : basic_handle<RandomAccessHandleService>(io_service)
+  {
+  }
+
+  /// Construct a basic_random_access_handle on an existing native handle.
+  /**
+   * This constructor creates a random-access handle object to hold an existing
+   * native handle.
+   *
+   * @param io_service The io_service object that the random-access handle will
+   * use to dispatch handlers for any asynchronous operations performed on the
+   * handle.
+   *
+   * @param handle The new underlying handle implementation.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_random_access_handle(boost::asio::io_service& io_service,
+      const native_handle_type& handle)
+    : basic_handle<RandomAccessHandleService>(io_service, handle)
+  {
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a basic_random_access_handle from another.
+  /**
+   * This constructor moves a random-access handle from one object to another.
+   *
+   * @param other The other basic_random_access_handle object from which the
+   * move will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_random_access_handle(io_service&)
+   * constructor.
+   */
+  basic_random_access_handle(basic_random_access_handle&& other)
+    : basic_handle<RandomAccessHandleService>(
+        BOOST_ASIO_MOVE_CAST(basic_random_access_handle)(other))
+  {
+  }
+
+  /// Move-assign a basic_random_access_handle from another.
+  /**
+   * This assignment operator moves a random-access handle from one object to
+   * another.
+   *
+   * @param other The other basic_random_access_handle object from which the
+   * move will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_random_access_handle(io_service&)
+   * constructor.
+   */
+  basic_random_access_handle& operator=(basic_random_access_handle&& other)
+  {
+    basic_handle<RandomAccessHandleService>::operator=(
+        BOOST_ASIO_MOVE_CAST(basic_random_access_handle)(other));
+    return *this;
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Write some data to the handle at the specified offset.
+  /**
+   * This function is used to write data to the random-access handle. The
+   * function call will block until one or more bytes of the data has been
+   * written successfully, or until an error occurs.
+   *
+   * @param offset The offset at which the data will be written.
+   *
+   * @param buffers One or more data buffers to be written to the handle.
+   *
+   * @returns The number of bytes written.
+   *
+   * @throws boost::system::system_error Thrown on failure. An error code of
+   * boost::asio::error::eof indicates that the connection was closed by the
+   * peer.
+   *
+   * @note The write_some_at operation may not write all of the data. Consider
+   * using the @ref write_at function if you need to ensure that all data is
+   * written before the blocking operation completes.
+   *
+   * @par Example
+   * To write a single data buffer use the @ref buffer function as follows:
+   * @code
+   * handle.write_some_at(42, boost::asio::buffer(data, size));
+   * @endcode
+   * See the @ref buffer documentation for information on writing multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t write_some_at(uint64_t offset,
+      const ConstBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().write_some_at(
+        this->get_implementation(), offset, buffers, ec);
+    boost::asio::detail::throw_error(ec, "write_some_at");
+    return s;
+  }
+
+  /// Write some data to the handle at the specified offset.
+  /**
+   * This function is used to write data to the random-access handle. The
+   * function call will block until one or more bytes of the data has been
+   * written successfully, or until an error occurs.
+   *
+   * @param offset The offset at which the data will be written.
+   *
+   * @param buffers One or more data buffers to be written to the handle.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes written. Returns 0 if an error occurred.
+   *
+   * @note The write_some operation may not transmit all of the data to the
+   * peer. Consider using the @ref write_at function if you need to ensure that
+   * all data is written before the blocking operation completes.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t write_some_at(uint64_t offset,
+      const ConstBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return this->get_service().write_some_at(
+        this->get_implementation(), offset, buffers, ec);
+  }
+
+  /// Start an asynchronous write at the specified offset.
+  /**
+   * This function is used to asynchronously write data to the random-access
+   * handle. The function call always returns immediately.
+   *
+   * @param offset The offset at which the data will be written.
+   *
+   * @param buffers One or more data buffers to be written to the handle.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param handler The handler to be called when the write operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes written.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The write operation may not transmit all of the data to the peer.
+   * Consider using the @ref async_write_at function if you need to ensure that
+   * all data is written before the asynchronous operation completes.
+   *
+   * @par Example
+   * To write a single data buffer use the @ref buffer function as follows:
+   * @code
+   * handle.async_write_some_at(42, boost::asio::buffer(data, size), handler);
+   * @endcode
+   * See the @ref buffer documentation for information on writing multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_write_some_at(uint64_t offset,
+      const ConstBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WriteHandler.
+    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+    return this->get_service().async_write_some_at(this->get_implementation(),
+        offset, buffers, BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Read some data from the handle at the specified offset.
+  /**
+   * This function is used to read data from the random-access handle. The
+   * function call will block until one or more bytes of data has been read
+   * successfully, or until an error occurs.
+   *
+   * @param offset The offset at which the data will be read.
+   *
+   * @param buffers One or more buffers into which the data will be read.
+   *
+   * @returns The number of bytes read.
+   *
+   * @throws boost::system::system_error Thrown on failure. An error code of
+   * boost::asio::error::eof indicates that the connection was closed by the
+   * peer.
+   *
+   * @note The read_some operation may not read all of the requested number of
+   * bytes. Consider using the @ref read_at function if you need to ensure that
+   * the requested amount of data is read before the blocking operation
+   * completes.
+   *
+   * @par Example
+   * To read into a single data buffer use the @ref buffer function as follows:
+   * @code
+   * handle.read_some_at(42, boost::asio::buffer(data, size));
+   * @endcode
+   * See the @ref buffer documentation for information on reading into multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t read_some_at(uint64_t offset,
+      const MutableBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().read_some_at(
+        this->get_implementation(), offset, buffers, ec);
+    boost::asio::detail::throw_error(ec, "read_some_at");
+    return s;
+  }
+
+  /// Read some data from the handle at the specified offset.
+  /**
+   * This function is used to read data from the random-access handle. The
+   * function call will block until one or more bytes of data has been read
+   * successfully, or until an error occurs.
+   *
+   * @param offset The offset at which the data will be read.
+   *
+   * @param buffers One or more buffers into which the data will be read.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes read. Returns 0 if an error occurred.
+   *
+   * @note The read_some operation may not read all of the requested number of
+   * bytes. Consider using the @ref read_at function if you need to ensure that
+   * the requested amount of data is read before the blocking operation
+   * completes.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t read_some_at(uint64_t offset,
+      const MutableBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return this->get_service().read_some_at(
+        this->get_implementation(), offset, buffers, ec);
+  }
+
+  /// Start an asynchronous read at the specified offset.
+  /**
+   * This function is used to asynchronously read data from the random-access
+   * handle. The function call always returns immediately.
+   *
+   * @param offset The offset at which the data will be read.
+   *
+   * @param buffers One or more buffers into which the data will be read.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param handler The handler to be called when the read operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes read.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The read operation may not read all of the requested number of bytes.
+   * Consider using the @ref async_read_at function if you need to ensure that
+   * the requested amount of data is read before the asynchronous operation
+   * completes.
+   *
+   * @par Example
+   * To read into a single data buffer use the @ref buffer function as follows:
+   * @code
+   * handle.async_read_some_at(42, boost::asio::buffer(data, size), handler);
+   * @endcode
+   * See the @ref buffer documentation for information on reading into multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_read_some_at(uint64_t offset,
+      const MutableBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    return this->get_service().async_read_some_at(this->get_implementation(),
+        offset, buffers, BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+};
+
+} // namespace windows
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_WINDOWS_BASIC_RANDOM_ACCESS_HANDLE_HPP
diff --git a/ext/patches/boost/asio/windows/basic_stream_handle.hpp b/ext/patches/boost/asio/windows/basic_stream_handle.hpp
new file mode 100644
index 0000000..fe34d9b
--- /dev/null
+++ b/ext/patches/boost/asio/windows/basic_stream_handle.hpp
@@ -0,0 +1,361 @@
+//
+// windows/basic_stream_handle.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_WINDOWS_BASIC_STREAM_HANDLE_HPP
+#define BOOST_ASIO_WINDOWS_BASIC_STREAM_HANDLE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <cstddef>
+#include <boost/asio/detail/handler_type_requirements.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/windows/basic_handle.hpp>
+#include <boost/asio/windows/stream_handle_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace windows {
+
+/// Provides stream-oriented handle functionality.
+/**
+ * The windows::basic_stream_handle class template provides asynchronous and
+ * blocking stream-oriented handle functionality.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ *
+ * @par Concepts:
+ * AsyncReadStream, AsyncWriteStream, Stream, SyncReadStream, SyncWriteStream.
+ */
+template <typename StreamHandleService = stream_handle_service>
+class basic_stream_handle
+  : public basic_handle<StreamHandleService>
+{
+public:
+  /// (Deprecated: Use native_handle_type.) The native representation of a
+  /// handle.
+  typedef typename StreamHandleService::native_handle_type native_type;
+
+  /// The native representation of a handle.
+  typedef typename StreamHandleService::native_handle_type native_handle_type;
+
+  /// Construct a basic_stream_handle without opening it.
+  /**
+   * This constructor creates a stream handle without opening it. The handle
+   * needs to be opened and then connected or accepted before data can be sent
+   * or received on it.
+   *
+   * @param io_service The io_service object that the stream handle will use to
+   * dispatch handlers for any asynchronous operations performed on the handle.
+   */
+  explicit basic_stream_handle(boost::asio::io_service& io_service)
+    : basic_handle<StreamHandleService>(io_service)
+  {
+  }
+
+  /// Construct a basic_stream_handle on an existing native handle.
+  /**
+   * This constructor creates a stream handle object to hold an existing native
+   * handle.
+   *
+   * @param io_service The io_service object that the stream handle will use to
+   * dispatch handlers for any asynchronous operations performed on the handle.
+   *
+   * @param handle The new underlying handle implementation.
+   *
+   * @throws boost::system::system_error Thrown on failure.
+   */
+  basic_stream_handle(boost::asio::io_service& io_service,
+      const native_handle_type& handle)
+    : basic_handle<StreamHandleService>(io_service, handle)
+  {
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a basic_stream_handle from another.
+  /**
+   * This constructor moves a stream handle from one object to another.
+   *
+   * @param other The other basic_stream_handle object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_stream_handle(io_service&) constructor.
+   */
+  basic_stream_handle(basic_stream_handle&& other)
+    : basic_handle<StreamHandleService>(
+        BOOST_ASIO_MOVE_CAST(basic_stream_handle)(other))
+  {
+  }
+
+  /// Move-assign a basic_stream_handle from another.
+  /**
+   * This assignment operator moves a stream handle from one object to
+   * another.
+   *
+   * @param other The other basic_stream_handle object from which the move
+   * will occur.
+   *
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_stream_handle(io_service&) constructor.
+   */
+  basic_stream_handle& operator=(basic_stream_handle&& other)
+  {
+    basic_handle<StreamHandleService>::operator=(
+        BOOST_ASIO_MOVE_CAST(basic_stream_handle)(other));
+    return *this;
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Write some data to the handle.
+  /**
+   * This function is used to write data to the stream handle. The function call
+   * will block until one or more bytes of the data has been written
+   * successfully, or until an error occurs.
+   *
+   * @param buffers One or more data buffers to be written to the handle.
+   *
+   * @returns The number of bytes written.
+   *
+   * @throws boost::system::system_error Thrown on failure. An error code of
+   * boost::asio::error::eof indicates that the connection was closed by the
+   * peer.
+   *
+   * @note The write_some operation may not transmit all of the data to the
+   * peer. Consider using the @ref write function if you need to ensure that
+   * all data is written before the blocking operation completes.
+   *
+   * @par Example
+   * To write a single data buffer use the @ref buffer function as follows:
+   * @code
+   * handle.write_some(boost::asio::buffer(data, size));
+   * @endcode
+   * See the @ref buffer documentation for information on writing multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().write_some(
+        this->get_implementation(), buffers, ec);
+    boost::asio::detail::throw_error(ec, "write_some");
+    return s;
+  }
+
+  /// Write some data to the handle.
+  /**
+   * This function is used to write data to the stream handle. The function call
+   * will block until one or more bytes of the data has been written
+   * successfully, or until an error occurs.
+   *
+   * @param buffers One or more data buffers to be written to the handle.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes written. Returns 0 if an error occurred.
+   *
+   * @note The write_some operation may not transmit all of the data to the
+   * peer. Consider using the @ref write function if you need to ensure that
+   * all data is written before the blocking operation completes.
+   */
+  template <typename ConstBufferSequence>
+  std::size_t write_some(const ConstBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().write_some(
+        this->get_implementation(), buffers, ec);
+  }
+
+  /// Start an asynchronous write.
+  /**
+   * This function is used to asynchronously write data to the stream handle.
+   * The function call always returns immediately.
+   *
+   * @param buffers One or more data buffers to be written to the handle.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param handler The handler to be called when the write operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes written.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The write operation may not transmit all of the data to the peer.
+   * Consider using the @ref async_write function if you need to ensure that all
+   * data is written before the asynchronous operation completes.
+   *
+   * @par Example
+   * To write a single data buffer use the @ref buffer function as follows:
+   * @code
+   * handle.async_write_some(boost::asio::buffer(data, size), handler);
+   * @endcode
+   * See the @ref buffer documentation for information on writing multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_write_some(const ConstBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a WriteHandler.
+    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+    return this->get_service().async_write_some(this->get_implementation(),
+        buffers, BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+  }
+
+  /// Read some data from the handle.
+  /**
+   * This function is used to read data from the stream handle. The function
+   * call will block until one or more bytes of data has been read successfully,
+   * or until an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be read.
+   *
+   * @returns The number of bytes read.
+   *
+   * @throws boost::system::system_error Thrown on failure. An error code of
+   * boost::asio::error::eof indicates that the connection was closed by the
+   * peer.
+   *
+   * @note The read_some operation may not read all of the requested number of
+   * bytes. Consider using the @ref read function if you need to ensure that
+   * the requested amount of data is read before the blocking operation
+   * completes.
+   *
+   * @par Example
+   * To read into a single data buffer use the @ref buffer function as follows:
+   * @code
+   * handle.read_some(boost::asio::buffer(data, size));
+   * @endcode
+   * See the @ref buffer documentation for information on reading into multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers)
+  {
+    boost::system::error_code ec;
+    std::size_t s = this->get_service().read_some(
+        this->get_implementation(), buffers, ec);
+    boost::asio::detail::throw_error(ec, "read_some");
+    return s;
+  }
+
+  /// Read some data from the handle.
+  /**
+   * This function is used to read data from the stream handle. The function
+   * call will block until one or more bytes of data has been read successfully,
+   * or until an error occurs.
+   *
+   * @param buffers One or more buffers into which the data will be read.
+   *
+   * @param ec Set to indicate what error occurred, if any.
+   *
+   * @returns The number of bytes read. Returns 0 if an error occurred.
+   *
+   * @note The read_some operation may not read all of the requested number of
+   * bytes. Consider using the @ref read function if you need to ensure that
+   * the requested amount of data is read before the blocking operation
+   * completes.
+   */
+  template <typename MutableBufferSequence>
+  std::size_t read_some(const MutableBufferSequence& buffers,
+      boost::system::error_code& ec)
+  {
+    return this->get_service().read_some(
+        this->get_implementation(), buffers, ec);
+  }
+
+  /// Start an asynchronous read.
+  /**
+   * This function is used to asynchronously read data from the stream handle.
+   * The function call always returns immediately.
+   *
+   * @param buffers One or more buffers into which the data will be read.
+   * Although the buffers object may be copied as necessary, ownership of the
+   * underlying memory blocks is retained by the caller, which must guarantee
+   * that they remain valid until the handler is called.
+   *
+   * @param handler The handler to be called when the read operation completes.
+   * Copies will be made of the handler as required. The function signature of
+   * the handler must be:
+   * @code void handler(
+   *   const boost::system::error_code& error, // Result of operation.
+   *   std::size_t bytes_transferred           // Number of bytes read.
+   * ); @endcode
+   * Regardless of whether the asynchronous operation completes immediately or
+   * not, the handler will not be invoked from within this function. Invocation
+   * of the handler will be performed in a manner equivalent to using
+   * boost::asio::io_service::post().
+   *
+   * @note The read operation may not read all of the requested number of bytes.
+   * Consider using the @ref async_read function if you need to ensure that the
+   * requested amount of data is read before the asynchronous operation
+   * completes.
+   *
+   * @par Example
+   * To read into a single data buffer use the @ref buffer function as follows:
+   * @code
+   * handle.async_read_some(boost::asio::buffer(data, size), handler);
+   * @endcode
+   * See the @ref buffer documentation for information on reading into multiple
+   * buffers in one go, and how to use it with arrays, boost::array or
+   * std::vector.
+   */
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_read_some(const MutableBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    // If you get an error on the following line it means that your handler does
+    // not meet the documented type requirements for a ReadHandler.
+    BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+    return this->get_service().async_read_some(this->get_implementation(),
+        buffers, BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+  }
+};
+
+} // namespace windows
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_WINDOWS_BASIC_STREAM_HANDLE_HPP
diff --git a/ext/patches/boost/asio/windows/object_handle.hpp b/ext/patches/boost/asio/windows/object_handle.hpp
new file mode 100644
index 0000000..4b2ea12
--- /dev/null
+++ b/ext/patches/boost/asio/windows/object_handle.hpp
@@ -0,0 +1,40 @@
+//
+// windows/object_handle.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2011 Boris Schaeling (boris at highscore.de)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_WINDOWS_OBJECT_HANDLE_HPP
+#define BOOST_ASIO_WINDOWS_OBJECT_HANDLE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <boost/asio/windows/basic_object_handle.hpp>
+
+namespace boost {
+namespace asio {
+namespace windows {
+
+/// Typedef for the typical usage of an object handle.
+typedef basic_object_handle<> object_handle;
+
+} // namespace windows
+} // namespace asio
+} // namespace boost
+
+#endif // defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_WINDOWS_OBJECT_HANDLE_HPP
diff --git a/ext/patches/boost/asio/windows/object_handle_service.hpp b/ext/patches/boost/asio/windows/object_handle_service.hpp
new file mode 100644
index 0000000..d4c6eee
--- /dev/null
+++ b/ext/patches/boost/asio/windows/object_handle_service.hpp
@@ -0,0 +1,179 @@
+//
+// windows/object_handle_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2011 Boris Schaeling (boris at highscore.de)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_WINDOWS_OBJECT_HANDLE_SERVICE_HPP
+#define BOOST_ASIO_WINDOWS_OBJECT_HANDLE_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/detail/win_object_handle_service.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace windows {
+
+/// Default service implementation for an object handle.
+class object_handle_service
+#if defined(GENERATING_DOCUMENTATION)
+  : public boost::asio::io_service::service
+#else
+  : public boost::asio::detail::service_base<object_handle_service>
+#endif
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The unique service identifier.
+  static boost::asio::io_service::id id;
+#endif
+
+private:
+  // The type of the platform-specific implementation.
+  typedef detail::win_object_handle_service service_impl_type;
+
+public:
+  /// The type of an object handle implementation.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined implementation_type;
+#else
+  typedef service_impl_type::implementation_type implementation_type;
+#endif
+
+  /// The native handle type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_handle_type;
+#else
+  typedef service_impl_type::native_handle_type native_handle_type;
+#endif
+
+  /// Construct a new object handle service for the specified io_service.
+  explicit object_handle_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<object_handle_service>(io_service),
+      service_impl_(io_service)
+  {
+  }
+
+  /// Construct a new object handle implementation.
+  void construct(implementation_type& impl)
+  {
+    service_impl_.construct(impl);
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a new object handle implementation.
+  void move_construct(implementation_type& impl,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_construct(impl, other_impl);
+  }
+
+  /// Move-assign from another object handle implementation.
+  void move_assign(implementation_type& impl,
+      object_handle_service& other_service,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_assign(impl, other_service.service_impl_, other_impl);
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Destroy an object handle implementation.
+  void destroy(implementation_type& impl)
+  {
+    service_impl_.destroy(impl);
+  }
+
+  /// Assign an existing native handle to an object handle.
+  boost::system::error_code assign(implementation_type& impl,
+      const native_handle_type& handle, boost::system::error_code& ec)
+  {
+    return service_impl_.assign(impl, handle, ec);
+  }
+
+  /// Determine whether the handle is open.
+  bool is_open(const implementation_type& impl) const
+  {
+    return service_impl_.is_open(impl);
+  }
+
+  /// Close an object handle implementation.
+  boost::system::error_code close(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.close(impl, ec);
+  }
+
+  /// Get the native handle implementation.
+  native_handle_type native_handle(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Cancel all asynchronous operations associated with the handle.
+  boost::system::error_code cancel(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.cancel(impl, ec);
+  }
+
+  // Wait for a signaled state.
+  void wait(implementation_type& impl, boost::system::error_code& ec)
+  {
+    service_impl_.wait(impl, ec);
+  }
+
+  /// Start an asynchronous wait.
+  template <typename WaitHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WaitHandler,
+      void (boost::system::error_code))
+  async_wait(implementation_type& impl,
+      BOOST_ASIO_MOVE_ARG(WaitHandler) handler)
+  {
+    boost::asio::detail::async_result_init<
+      WaitHandler, void (boost::system::error_code)> init(
+        BOOST_ASIO_MOVE_CAST(WaitHandler)(handler));
+
+    service_impl_.async_wait(impl, init.handler);
+
+    return init.result.get();
+  }
+
+private:
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+    service_impl_.shutdown_service();
+  }
+
+  // The platform-specific implementation.
+  service_impl_type service_impl_;
+};
+
+} // namespace windows
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_WINDOWS_OBJECT_HANDLE_SERVICE_HPP
diff --git a/ext/patches/boost/asio/windows/overlapped_ptr.hpp b/ext/patches/boost/asio/windows/overlapped_ptr.hpp
new file mode 100644
index 0000000..66f519d
--- /dev/null
+++ b/ext/patches/boost/asio/windows/overlapped_ptr.hpp
@@ -0,0 +1,118 @@
+//
+// windows/overlapped_ptr.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_WINDOWS_OVERLAPPED_PTR_HPP
+#define BOOST_ASIO_WINDOWS_OVERLAPPED_PTR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_WINDOWS_OVERLAPPED_PTR) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/win_iocp_overlapped_ptr.hpp>
+#include <boost/asio/io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace windows {
+
+/// Wraps a handler to create an OVERLAPPED object for use with overlapped I/O.
+/**
+ * A special-purpose smart pointer used to wrap an application handler so that
+ * it can be passed as the LPOVERLAPPED argument to overlapped I/O functions.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe. at n
+ * @e Shared @e objects: Unsafe.
+ */
+class overlapped_ptr
+  : private noncopyable
+{
+public:
+  /// Construct an empty overlapped_ptr.
+  overlapped_ptr()
+    : impl_()
+  {
+  }
+
+  /// Construct an overlapped_ptr to contain the specified handler.
+  template <typename Handler>
+  explicit overlapped_ptr(boost::asio::io_service& io_service,
+      BOOST_ASIO_MOVE_ARG(Handler) handler)
+    : impl_(io_service, BOOST_ASIO_MOVE_CAST(Handler)(handler))
+  {
+  }
+
+  /// Destructor automatically frees the OVERLAPPED object unless released.
+  ~overlapped_ptr()
+  {
+  }
+
+  /// Reset to empty.
+  void reset()
+  {
+    impl_.reset();
+  }
+
+  /// Reset to contain the specified handler, freeing any current OVERLAPPED
+  /// object.
+  template <typename Handler>
+  void reset(boost::asio::io_service& io_service,
+      BOOST_ASIO_MOVE_ARG(Handler) handler)
+  {
+    impl_.reset(io_service, BOOST_ASIO_MOVE_CAST(Handler)(handler));
+  }
+
+  /// Get the contained OVERLAPPED object.
+  OVERLAPPED* get()
+  {
+    return impl_.get();
+  }
+
+  /// Get the contained OVERLAPPED object.
+  const OVERLAPPED* get() const
+  {
+    return impl_.get();
+  }
+
+  /// Release ownership of the OVERLAPPED object.
+  OVERLAPPED* release()
+  {
+    return impl_.release();
+  }
+
+  /// Post completion notification for overlapped operation. Releases ownership.
+  void complete(const boost::system::error_code& ec,
+      std::size_t bytes_transferred)
+  {
+    impl_.complete(ec, bytes_transferred);
+  }
+
+private:
+  detail::win_iocp_overlapped_ptr impl_;
+};
+
+} // namespace windows
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_WINDOWS_OVERLAPPED_PTR)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_WINDOWS_OVERLAPPED_PTR_HPP
diff --git a/ext/patches/boost/asio/windows/random_access_handle.hpp b/ext/patches/boost/asio/windows/random_access_handle.hpp
new file mode 100644
index 0000000..b376fc9
--- /dev/null
+++ b/ext/patches/boost/asio/windows/random_access_handle.hpp
@@ -0,0 +1,39 @@
+//
+// windows/random_access_handle.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_WINDOWS_RANDOM_ACCESS_HANDLE_HPP
+#define BOOST_ASIO_WINDOWS_RANDOM_ACCESS_HANDLE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <boost/asio/windows/basic_random_access_handle.hpp>
+
+namespace boost {
+namespace asio {
+namespace windows {
+
+/// Typedef for the typical usage of a random-access handle.
+typedef basic_random_access_handle<> random_access_handle;
+
+} // namespace windows
+} // namespace asio
+} // namespace boost
+
+#endif // defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_WINDOWS_RANDOM_ACCESS_HANDLE_HPP
diff --git a/ext/patches/boost/asio/windows/random_access_handle_service.hpp b/ext/patches/boost/asio/windows/random_access_handle_service.hpp
new file mode 100644
index 0000000..bdb50dd
--- /dev/null
+++ b/ext/patches/boost/asio/windows/random_access_handle_service.hpp
@@ -0,0 +1,222 @@
+//
+// windows/random_access_handle_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_WINDOWS_RANDOM_ACCESS_HANDLE_SERVICE_HPP
+#define BOOST_ASIO_WINDOWS_RANDOM_ACCESS_HANDLE_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <cstddef>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/detail/cstdint.hpp>
+#include <boost/asio/detail/win_iocp_handle_service.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace windows {
+
+/// Default service implementation for a random-access handle.
+class random_access_handle_service
+#if defined(GENERATING_DOCUMENTATION)
+  : public boost::asio::io_service::service
+#else
+  : public boost::asio::detail::service_base<random_access_handle_service>
+#endif
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The unique service identifier.
+  static boost::asio::io_service::id id;
+#endif
+
+private:
+  // The type of the platform-specific implementation.
+  typedef detail::win_iocp_handle_service service_impl_type;
+
+public:
+  /// The type of a random-access handle implementation.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined implementation_type;
+#else
+  typedef service_impl_type::implementation_type implementation_type;
+#endif
+
+  /// (Deprecated: Use native_handle_type.) The native handle type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_type;
+#else
+  typedef service_impl_type::native_handle_type native_type;
+#endif
+
+  /// The native handle type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_handle_type;
+#else
+  typedef service_impl_type::native_handle_type native_handle_type;
+#endif
+
+  /// Construct a new random-access handle service for the specified io_service.
+  explicit random_access_handle_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<
+        random_access_handle_service>(io_service),
+      service_impl_(io_service)
+  {
+  }
+
+  /// Construct a new random-access handle implementation.
+  void construct(implementation_type& impl)
+  {
+    service_impl_.construct(impl);
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a new random-access handle implementation.
+  void move_construct(implementation_type& impl,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_construct(impl, other_impl);
+  }
+
+  /// Move-assign from another random-access handle implementation.
+  void move_assign(implementation_type& impl,
+      random_access_handle_service& other_service,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_assign(impl, other_service.service_impl_, other_impl);
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Destroy a random-access handle implementation.
+  void destroy(implementation_type& impl)
+  {
+    service_impl_.destroy(impl);
+  }
+
+  /// Assign an existing native handle to a random-access handle.
+  boost::system::error_code assign(implementation_type& impl,
+      const native_handle_type& handle, boost::system::error_code& ec)
+  {
+    return service_impl_.assign(impl, handle, ec);
+  }
+
+  /// Determine whether the handle is open.
+  bool is_open(const implementation_type& impl) const
+  {
+    return service_impl_.is_open(impl);
+  }
+
+  /// Close a random-access handle implementation.
+  boost::system::error_code close(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.close(impl, ec);
+  }
+
+  /// (Deprecated: Use native_handle().) Get the native handle implementation.
+  native_type native(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Get the native handle implementation.
+  native_handle_type native_handle(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Cancel all asynchronous operations associated with the handle.
+  boost::system::error_code cancel(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.cancel(impl, ec);
+  }
+
+  /// Write the given data at the specified offset.
+  template <typename ConstBufferSequence>
+  std::size_t write_some_at(implementation_type& impl, uint64_t offset,
+      const ConstBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return service_impl_.write_some_at(impl, offset, buffers, ec);
+  }
+
+  /// Start an asynchronous write at the specified offset.
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_write_some_at(implementation_type& impl,
+      uint64_t offset, const ConstBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    boost::asio::detail::async_result_init<
+      WriteHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+    service_impl_.async_write_some_at(impl, offset, buffers, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Read some data from the specified offset.
+  template <typename MutableBufferSequence>
+  std::size_t read_some_at(implementation_type& impl, uint64_t offset,
+      const MutableBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return service_impl_.read_some_at(impl, offset, buffers, ec);
+  }
+
+  /// Start an asynchronous read at the specified offset.
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_read_some_at(implementation_type& impl,
+      uint64_t offset, const MutableBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    boost::asio::detail::async_result_init<
+      ReadHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+    service_impl_.async_read_some_at(impl, offset, buffers, init.handler);
+
+    return init.result.get();
+  }
+
+private:
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+    service_impl_.shutdown_service();
+  }
+
+  // The platform-specific implementation.
+  service_impl_type service_impl_;
+};
+
+} // namespace windows
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_WINDOWS_RANDOM_ACCESS_HANDLE_SERVICE_HPP
diff --git a/ext/patches/boost/asio/windows/stream_handle.hpp b/ext/patches/boost/asio/windows/stream_handle.hpp
new file mode 100644
index 0000000..bff8ad6
--- /dev/null
+++ b/ext/patches/boost/asio/windows/stream_handle.hpp
@@ -0,0 +1,39 @@
+//
+// windows/stream_handle.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_WINDOWS_STREAM_HANDLE_HPP
+#define BOOST_ASIO_WINDOWS_STREAM_HANDLE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <boost/asio/windows/basic_stream_handle.hpp>
+
+namespace boost {
+namespace asio {
+namespace windows {
+
+/// Typedef for the typical usage of a stream-oriented handle.
+typedef basic_stream_handle<> stream_handle;
+
+} // namespace windows
+} // namespace asio
+} // namespace boost
+
+#endif // defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_WINDOWS_STREAM_HANDLE_HPP
diff --git a/ext/patches/boost/asio/windows/stream_handle_service.hpp b/ext/patches/boost/asio/windows/stream_handle_service.hpp
new file mode 100644
index 0000000..cd799cc
--- /dev/null
+++ b/ext/patches/boost/asio/windows/stream_handle_service.hpp
@@ -0,0 +1,220 @@
+//
+// windows/stream_handle_service.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_WINDOWS_STREAM_HANDLE_SERVICE_HPP
+#define BOOST_ASIO_WINDOWS_STREAM_HANDLE_SERVICE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#include <cstddef>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/detail/win_iocp_handle_service.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/io_service.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace windows {
+
+/// Default service implementation for a stream handle.
+class stream_handle_service
+#if defined(GENERATING_DOCUMENTATION)
+  : public boost::asio::io_service::service
+#else
+  : public boost::asio::detail::service_base<stream_handle_service>
+#endif
+{
+public:
+#if defined(GENERATING_DOCUMENTATION)
+  /// The unique service identifier.
+  static boost::asio::io_service::id id;
+#endif
+
+private:
+  // The type of the platform-specific implementation.
+  typedef detail::win_iocp_handle_service service_impl_type;
+
+public:
+  /// The type of a stream handle implementation.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined implementation_type;
+#else
+  typedef service_impl_type::implementation_type implementation_type;
+#endif
+
+  /// (Deprecated: Use native_handle_type.) The native handle type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_type;
+#else
+  typedef service_impl_type::native_handle_type native_type;
+#endif
+
+  /// The native handle type.
+#if defined(GENERATING_DOCUMENTATION)
+  typedef implementation_defined native_handle_type;
+#else
+  typedef service_impl_type::native_handle_type native_handle_type;
+#endif
+
+  /// Construct a new stream handle service for the specified io_service.
+  explicit stream_handle_service(boost::asio::io_service& io_service)
+    : boost::asio::detail::service_base<stream_handle_service>(io_service),
+      service_impl_(io_service)
+  {
+  }
+
+  /// Construct a new stream handle implementation.
+  void construct(implementation_type& impl)
+  {
+    service_impl_.construct(impl);
+  }
+
+#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+  /// Move-construct a new stream handle implementation.
+  void move_construct(implementation_type& impl,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_construct(impl, other_impl);
+  }
+
+  /// Move-assign from another stream handle implementation.
+  void move_assign(implementation_type& impl,
+      stream_handle_service& other_service,
+      implementation_type& other_impl)
+  {
+    service_impl_.move_assign(impl, other_service.service_impl_, other_impl);
+  }
+#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+  /// Destroy a stream handle implementation.
+  void destroy(implementation_type& impl)
+  {
+    service_impl_.destroy(impl);
+  }
+
+  /// Assign an existing native handle to a stream handle.
+  boost::system::error_code assign(implementation_type& impl,
+      const native_handle_type& handle, boost::system::error_code& ec)
+  {
+    return service_impl_.assign(impl, handle, ec);
+  }
+
+  /// Determine whether the handle is open.
+  bool is_open(const implementation_type& impl) const
+  {
+    return service_impl_.is_open(impl);
+  }
+
+  /// Close a stream handle implementation.
+  boost::system::error_code close(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.close(impl, ec);
+  }
+
+  /// (Deprecated: Use native_handle().) Get the native handle implementation.
+  native_type native(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Get the native handle implementation.
+  native_handle_type native_handle(implementation_type& impl)
+  {
+    return service_impl_.native_handle(impl);
+  }
+
+  /// Cancel all asynchronous operations associated with the handle.
+  boost::system::error_code cancel(implementation_type& impl,
+      boost::system::error_code& ec)
+  {
+    return service_impl_.cancel(impl, ec);
+  }
+
+  /// Write the given data to the stream.
+  template <typename ConstBufferSequence>
+  std::size_t write_some(implementation_type& impl,
+      const ConstBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return service_impl_.write_some(impl, buffers, ec);
+  }
+
+  /// Start an asynchronous write.
+  template <typename ConstBufferSequence, typename WriteHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+      void (boost::system::error_code, std::size_t))
+  async_write_some(implementation_type& impl,
+      const ConstBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(WriteHandler) handler)
+  {
+    boost::asio::detail::async_result_init<
+      WriteHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(WriteHandler)(handler));
+
+    service_impl_.async_write_some(impl, buffers, init.handler);
+
+    return init.result.get();
+  }
+
+  /// Read some data from the stream.
+  template <typename MutableBufferSequence>
+  std::size_t read_some(implementation_type& impl,
+      const MutableBufferSequence& buffers, boost::system::error_code& ec)
+  {
+    return service_impl_.read_some(impl, buffers, ec);
+  }
+
+  /// Start an asynchronous read.
+  template <typename MutableBufferSequence, typename ReadHandler>
+  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
+      void (boost::system::error_code, std::size_t))
+  async_read_some(implementation_type& impl,
+      const MutableBufferSequence& buffers,
+      BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
+  {
+    boost::asio::detail::async_result_init<
+      ReadHandler, void (boost::system::error_code, std::size_t)> init(
+        BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
+
+    service_impl_.async_read_some(impl, buffers, init.handler);
+
+    return init.result.get();
+  }
+
+private:
+  // Destroy all user-defined handler objects owned by the service.
+  void shutdown_service()
+  {
+    service_impl_.shutdown_service();
+  }
+
+  // The platform-specific implementation.
+  service_impl_type service_impl_;
+};
+
+} // namespace windows
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE)
+       //   || defined(GENERATING_DOCUMENTATION)
+
+#endif // BOOST_ASIO_WINDOWS_STREAM_HANDLE_SERVICE_HPP
diff --git a/ext/patches/boost/asio/write.hpp b/ext/patches/boost/asio/write.hpp
new file mode 100644
index 0000000..78d84d0
--- /dev/null
+++ b/ext/patches/boost/asio/write.hpp
@@ -0,0 +1,620 @@
+//
+// write.hpp
+// ~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_WRITE_HPP
+#define BOOST_ASIO_WRITE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/basic_streambuf_fwd.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/**
+ * @defgroup write boost::asio::write
+ *
+ * @brief Write a certain amount of data to a stream before returning.
+ */
+/*@{*/
+
+/// Write all of the supplied data to a stream before returning.
+/**
+ * This function is used to write a certain number of bytes of data to a stream.
+ * The call will block until one of the following conditions is true:
+ *
+ * @li All of the data in the supplied buffers has been written. That is, the
+ * bytes transferred is equal to the sum of the buffer sizes.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * write_some function.
+ *
+ * @param s The stream to which the data is to be written. The type must support
+ * the SyncWriteStream concept.
+ *
+ * @param buffers One or more buffers containing the data to be written. The sum
+ * of the buffer sizes indicates the maximum number of bytes to write to the
+ * stream.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @par Example
+ * To write a single data buffer use the @ref buffer function as follows:
+ * @code boost::asio::write(s, boost::asio::buffer(data, size)); @endcode
+ * See the @ref buffer documentation for information on writing multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::write(
+ *     s, buffers,
+ *     boost::asio::transfer_all()); @endcode
+ */
+template <typename SyncWriteStream, typename ConstBufferSequence>
+std::size_t write(SyncWriteStream& s, const ConstBufferSequence& buffers);
+
+/// Write all of the supplied data to a stream before returning.
+/**
+ * This function is used to write a certain number of bytes of data to a stream.
+ * The call will block until one of the following conditions is true:
+ *
+ * @li All of the data in the supplied buffers has been written. That is, the
+ * bytes transferred is equal to the sum of the buffer sizes.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * write_some function.
+ *
+ * @param s The stream to which the data is to be written. The type must support
+ * the SyncWriteStream concept.
+ *
+ * @param buffers One or more buffers containing the data to be written. The sum
+ * of the buffer sizes indicates the maximum number of bytes to write to the
+ * stream.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @par Example
+ * To write a single data buffer use the @ref buffer function as follows:
+ * @code boost::asio::write(s, boost::asio::buffer(data, size), ec); @endcode
+ * See the @ref buffer documentation for information on writing multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::write(
+ *     s, buffers,
+ *     boost::asio::transfer_all(), ec); @endcode
+ */
+template <typename SyncWriteStream, typename ConstBufferSequence>
+std::size_t write(SyncWriteStream& s, const ConstBufferSequence& buffers,
+    boost::system::error_code& ec);
+
+/// Write a certain amount of data to a stream before returning.
+/**
+ * This function is used to write a certain number of bytes of data to a stream.
+ * The call will block until one of the following conditions is true:
+ *
+ * @li All of the data in the supplied buffers has been written. That is, the
+ * bytes transferred is equal to the sum of the buffer sizes.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * write_some function.
+ *
+ * @param s The stream to which the data is to be written. The type must support
+ * the SyncWriteStream concept.
+ *
+ * @param buffers One or more buffers containing the data to be written. The sum
+ * of the buffer sizes indicates the maximum number of bytes to write to the
+ * stream.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the write operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest write_some operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the write operation is complete. A
+ * non-zero return value indicates the maximum number of bytes to be written on
+ * the next call to the stream's write_some function.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @par Example
+ * To write a single data buffer use the @ref buffer function as follows:
+ * @code boost::asio::write(s, boost::asio::buffer(data, size),
+ *     boost::asio::transfer_at_least(32)); @endcode
+ * See the @ref buffer documentation for information on writing multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+template <typename SyncWriteStream, typename ConstBufferSequence,
+    typename CompletionCondition>
+std::size_t write(SyncWriteStream& s, const ConstBufferSequence& buffers,
+    CompletionCondition completion_condition);
+
+/// Write a certain amount of data to a stream before returning.
+/**
+ * This function is used to write a certain number of bytes of data to a stream.
+ * The call will block until one of the following conditions is true:
+ *
+ * @li All of the data in the supplied buffers has been written. That is, the
+ * bytes transferred is equal to the sum of the buffer sizes.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * write_some function.
+ *
+ * @param s The stream to which the data is to be written. The type must support
+ * the SyncWriteStream concept.
+ *
+ * @param buffers One or more buffers containing the data to be written. The sum
+ * of the buffer sizes indicates the maximum number of bytes to write to the
+ * stream.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the write operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest write_some operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the write operation is complete. A
+ * non-zero return value indicates the maximum number of bytes to be written on
+ * the next call to the stream's write_some function.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes written. If an error occurs, returns the total
+ * number of bytes successfully transferred prior to the error.
+ */
+template <typename SyncWriteStream, typename ConstBufferSequence,
+    typename CompletionCondition>
+std::size_t write(SyncWriteStream& s, const ConstBufferSequence& buffers,
+    CompletionCondition completion_condition, boost::system::error_code& ec);
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/// Write all of the supplied data to a stream before returning.
+/**
+ * This function is used to write a certain number of bytes of data to a stream.
+ * The call will block until one of the following conditions is true:
+ *
+ * @li All of the data in the supplied basic_streambuf has been written.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * write_some function.
+ *
+ * @param s The stream to which the data is to be written. The type must support
+ * the SyncWriteStream concept.
+ *
+ * @param b The basic_streambuf object from which data will be written.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::write(
+ *     s, b,
+ *     boost::asio::transfer_all()); @endcode
+ */
+template <typename SyncWriteStream, typename Allocator>
+std::size_t write(SyncWriteStream& s, basic_streambuf<Allocator>& b);
+
+/// Write all of the supplied data to a stream before returning.
+/**
+ * This function is used to write a certain number of bytes of data to a stream.
+ * The call will block until one of the following conditions is true:
+ *
+ * @li All of the data in the supplied basic_streambuf has been written.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * write_some function.
+ *
+ * @param s The stream to which the data is to be written. The type must support
+ * the SyncWriteStream concept.
+ *
+ * @param b The basic_streambuf object from which data will be written.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::write(
+ *     s, b,
+ *     boost::asio::transfer_all(), ec); @endcode
+ */
+template <typename SyncWriteStream, typename Allocator>
+std::size_t write(SyncWriteStream& s, basic_streambuf<Allocator>& b,
+    boost::system::error_code& ec);
+
+/// Write a certain amount of data to a stream before returning.
+/**
+ * This function is used to write a certain number of bytes of data to a stream.
+ * The call will block until one of the following conditions is true:
+ *
+ * @li All of the data in the supplied basic_streambuf has been written.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * write_some function.
+ *
+ * @param s The stream to which the data is to be written. The type must support
+ * the SyncWriteStream concept.
+ *
+ * @param b The basic_streambuf object from which data will be written.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the write operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest write_some operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the write operation is complete. A
+ * non-zero return value indicates the maximum number of bytes to be written on
+ * the next call to the stream's write_some function.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ */
+template <typename SyncWriteStream, typename Allocator,
+    typename CompletionCondition>
+std::size_t write(SyncWriteStream& s, basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition);
+
+/// Write a certain amount of data to a stream before returning.
+/**
+ * This function is used to write a certain number of bytes of data to a stream.
+ * The call will block until one of the following conditions is true:
+ *
+ * @li All of the data in the supplied basic_streambuf has been written.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * write_some function.
+ *
+ * @param s The stream to which the data is to be written. The type must support
+ * the SyncWriteStream concept.
+ *
+ * @param b The basic_streambuf object from which data will be written.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the write operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest write_some operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the write operation is complete. A
+ * non-zero return value indicates the maximum number of bytes to be written on
+ * the next call to the stream's write_some function.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes written. If an error occurs, returns the total
+ * number of bytes successfully transferred prior to the error.
+ */
+template <typename SyncWriteStream, typename Allocator,
+    typename CompletionCondition>
+std::size_t write(SyncWriteStream& s, basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition, boost::system::error_code& ec);
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/*@}*/
+/**
+ * @defgroup async_write boost::asio::async_write
+ *
+ * @brief Start an asynchronous operation to write a certain amount of data to a
+ * stream.
+ */
+/*@{*/
+
+/// Start an asynchronous operation to write all of the supplied data to a
+/// stream.
+/**
+ * This function is used to asynchronously write a certain number of bytes of
+ * data to a stream. The function call always returns immediately. The
+ * asynchronous operation will continue until one of the following conditions
+ * is true:
+ *
+ * @li All of the data in the supplied buffers has been written. That is, the
+ * bytes transferred is equal to the sum of the buffer sizes.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * async_write_some function, and is known as a <em>composed operation</em>. The
+ * program must ensure that the stream performs no other write operations (such
+ * as async_write, the stream's async_write_some function, or any other composed
+ * operations that perform writes) until this operation completes.
+ *
+ * @param s The stream to which the data is to be written. The type must support
+ * the AsyncWriteStream concept.
+ *
+ * @param buffers One or more buffers containing the data to be written.
+ * Although the buffers object may be copied as necessary, ownership of the
+ * underlying memory blocks is retained by the caller, which must guarantee
+ * that they remain valid until the handler is called.
+ *
+ * @param handler The handler to be called when the write operation completes.
+ * Copies will be made of the handler as required. The function signature of
+ * the handler must be:
+ * @code void handler(
+ *   const boost::system::error_code& error, // Result of operation.
+ *
+ *   std::size_t bytes_transferred           // Number of bytes written from the
+ *                                           // buffers. If an error occurred,
+ *                                           // this will be less than the sum
+ *                                           // of the buffer sizes.
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @par Example
+ * To write a single data buffer use the @ref buffer function as follows:
+ * @code
+ * boost::asio::async_write(s, boost::asio::buffer(data, size), handler);
+ * @endcode
+ * See the @ref buffer documentation for information on writing multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+template <typename AsyncWriteStream, typename ConstBufferSequence,
+    typename WriteHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+async_write(AsyncWriteStream& s, const ConstBufferSequence& buffers,
+    BOOST_ASIO_MOVE_ARG(WriteHandler) handler);
+
+/// Start an asynchronous operation to write a certain amount of data to a
+/// stream.
+/**
+ * This function is used to asynchronously write a certain number of bytes of
+ * data to a stream. The function call always returns immediately. The
+ * asynchronous operation will continue until one of the following conditions
+ * is true:
+ *
+ * @li All of the data in the supplied buffers has been written. That is, the
+ * bytes transferred is equal to the sum of the buffer sizes.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * async_write_some function, and is known as a <em>composed operation</em>. The
+ * program must ensure that the stream performs no other write operations (such
+ * as async_write, the stream's async_write_some function, or any other composed
+ * operations that perform writes) until this operation completes.
+ *
+ * @param s The stream to which the data is to be written. The type must support
+ * the AsyncWriteStream concept.
+ *
+ * @param buffers One or more buffers containing the data to be written.
+ * Although the buffers object may be copied as necessary, ownership of the
+ * underlying memory blocks is retained by the caller, which must guarantee
+ * that they remain valid until the handler is called.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the write operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest async_write_some operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the write operation is complete. A
+ * non-zero return value indicates the maximum number of bytes to be written on
+ * the next call to the stream's async_write_some function.
+ *
+ * @param handler The handler to be called when the write operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   const boost::system::error_code& error, // Result of operation.
+ *
+ *   std::size_t bytes_transferred           // Number of bytes written from the
+ *                                           // buffers. If an error occurred,
+ *                                           // this will be less than the sum
+ *                                           // of the buffer sizes.
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @par Example
+ * To write a single data buffer use the @ref buffer function as follows:
+ * @code boost::asio::async_write(s,
+ *     boost::asio::buffer(data, size),
+ *     boost::asio::transfer_at_least(32),
+ *     handler); @endcode
+ * See the @ref buffer documentation for information on writing multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+template <typename AsyncWriteStream, typename ConstBufferSequence,
+    typename CompletionCondition, typename WriteHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+async_write(AsyncWriteStream& s, const ConstBufferSequence& buffers,
+    CompletionCondition completion_condition,
+    BOOST_ASIO_MOVE_ARG(WriteHandler) handler);
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/// Start an asynchronous operation to write all of the supplied data to a
+/// stream.
+/**
+ * This function is used to asynchronously write a certain number of bytes of
+ * data to a stream. The function call always returns immediately. The
+ * asynchronous operation will continue until one of the following conditions
+ * is true:
+ *
+ * @li All of the data in the supplied basic_streambuf has been written.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * async_write_some function, and is known as a <em>composed operation</em>. The
+ * program must ensure that the stream performs no other write operations (such
+ * as async_write, the stream's async_write_some function, or any other composed
+ * operations that perform writes) until this operation completes.
+ *
+ * @param s The stream to which the data is to be written. The type must support
+ * the AsyncWriteStream concept.
+ *
+ * @param b A basic_streambuf object from which data will be written. Ownership
+ * of the streambuf is retained by the caller, which must guarantee that it
+ * remains valid until the handler is called.
+ *
+ * @param handler The handler to be called when the write operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   const boost::system::error_code& error, // Result of operation.
+ *
+ *   std::size_t bytes_transferred           // Number of bytes written from the
+ *                                           // buffers. If an error occurred,
+ *                                           // this will be less than the sum
+ *                                           // of the buffer sizes.
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ */
+template <typename AsyncWriteStream, typename Allocator, typename WriteHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+async_write(AsyncWriteStream& s, basic_streambuf<Allocator>& b,
+    BOOST_ASIO_MOVE_ARG(WriteHandler) handler);
+
+/// Start an asynchronous operation to write a certain amount of data to a
+/// stream.
+/**
+ * This function is used to asynchronously write a certain number of bytes of
+ * data to a stream. The function call always returns immediately. The
+ * asynchronous operation will continue until one of the following conditions
+ * is true:
+ *
+ * @li All of the data in the supplied basic_streambuf has been written.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * async_write_some function, and is known as a <em>composed operation</em>. The
+ * program must ensure that the stream performs no other write operations (such
+ * as async_write, the stream's async_write_some function, or any other composed
+ * operations that perform writes) until this operation completes.
+ *
+ * @param s The stream to which the data is to be written. The type must support
+ * the AsyncWriteStream concept.
+ *
+ * @param b A basic_streambuf object from which data will be written. Ownership
+ * of the streambuf is retained by the caller, which must guarantee that it
+ * remains valid until the handler is called.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the write operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest async_write_some operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the write operation is complete. A
+ * non-zero return value indicates the maximum number of bytes to be written on
+ * the next call to the stream's async_write_some function.
+ *
+ * @param handler The handler to be called when the write operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   const boost::system::error_code& error, // Result of operation.
+ *
+ *   std::size_t bytes_transferred           // Number of bytes written from the
+ *                                           // buffers. If an error occurred,
+ *                                           // this will be less than the sum
+ *                                           // of the buffer sizes.
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ */
+template <typename AsyncWriteStream, typename Allocator,
+    typename CompletionCondition, typename WriteHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+async_write(AsyncWriteStream& s, basic_streambuf<Allocator>& b,
+    CompletionCondition completion_condition,
+    BOOST_ASIO_MOVE_ARG(WriteHandler) handler);
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/*@}*/
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/impl/write.hpp>
+
+#endif // BOOST_ASIO_WRITE_HPP
diff --git a/ext/patches/boost/asio/write_at.hpp b/ext/patches/boost/asio/write_at.hpp
new file mode 100644
index 0000000..fa1b19c
--- /dev/null
+++ b/ext/patches/boost/asio/write_at.hpp
@@ -0,0 +1,672 @@
+//
+// write_at.hpp
+// ~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_ASIO_WRITE_AT_HPP
+#define BOOST_ASIO_WRITE_AT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+#include <cstddef>
+#include <boost/asio/async_result.hpp>
+#include <boost/asio/basic_streambuf_fwd.hpp>
+#include <boost/asio/detail/cstdint.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+
+/**
+ * @defgroup write_at boost::asio::write_at
+ *
+ * @brief Write a certain amount of data at a specified offset before returning.
+ */
+/*@{*/
+
+/// Write all of the supplied data at the specified offset before returning.
+/**
+ * This function is used to write a certain number of bytes of data to a random
+ * access device at a specified offset. The call will block until one of the
+ * following conditions is true:
+ *
+ * @li All of the data in the supplied buffers has been written. That is, the
+ * bytes transferred is equal to the sum of the buffer sizes.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * write_some_at function.
+ *
+ * @param d The device to which the data is to be written. The type must support
+ * the SyncRandomAccessWriteDevice concept.
+ *
+ * @param offset The offset at which the data will be written.
+ *
+ * @param buffers One or more buffers containing the data to be written. The sum
+ * of the buffer sizes indicates the maximum number of bytes to write to the
+ * device.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @par Example
+ * To write a single data buffer use the @ref buffer function as follows:
+ * @code boost::asio::write_at(d, 42, boost::asio::buffer(data, size)); @endcode
+ * See the @ref buffer documentation for information on writing multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::write_at(
+ *     d, offset, buffers,
+ *     boost::asio::transfer_all()); @endcode
+ */
+template <typename SyncRandomAccessWriteDevice, typename ConstBufferSequence>
+std::size_t write_at(SyncRandomAccessWriteDevice& d,
+    uint64_t offset, const ConstBufferSequence& buffers);
+
+/// Write all of the supplied data at the specified offset before returning.
+/**
+ * This function is used to write a certain number of bytes of data to a random
+ * access device at a specified offset. The call will block until one of the
+ * following conditions is true:
+ *
+ * @li All of the data in the supplied buffers has been written. That is, the
+ * bytes transferred is equal to the sum of the buffer sizes.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * write_some_at function.
+ *
+ * @param d The device to which the data is to be written. The type must support
+ * the SyncRandomAccessWriteDevice concept.
+ *
+ * @param offset The offset at which the data will be written.
+ *
+ * @param buffers One or more buffers containing the data to be written. The sum
+ * of the buffer sizes indicates the maximum number of bytes to write to the
+ * device.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @par Example
+ * To write a single data buffer use the @ref buffer function as follows:
+ * @code boost::asio::write_at(d, 42,
+ *     boost::asio::buffer(data, size), ec); @endcode
+ * See the @ref buffer documentation for information on writing multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::write_at(
+ *     d, offset, buffers,
+ *     boost::asio::transfer_all(), ec); @endcode
+ */
+template <typename SyncRandomAccessWriteDevice, typename ConstBufferSequence>
+std::size_t write_at(SyncRandomAccessWriteDevice& d,
+    uint64_t offset, const ConstBufferSequence& buffers,
+    boost::system::error_code& ec);
+
+/// Write a certain amount of data at a specified offset before returning.
+/**
+ * This function is used to write a certain number of bytes of data to a random
+ * access device at a specified offset. The call will block until one of the
+ * following conditions is true:
+ *
+ * @li All of the data in the supplied buffers has been written. That is, the
+ * bytes transferred is equal to the sum of the buffer sizes.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * write_some_at function.
+ *
+ * @param d The device to which the data is to be written. The type must support
+ * the SyncRandomAccessWriteDevice concept.
+ *
+ * @param offset The offset at which the data will be written.
+ *
+ * @param buffers One or more buffers containing the data to be written. The sum
+ * of the buffer sizes indicates the maximum number of bytes to write to the
+ * device.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the write operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest write_some_at operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the write operation is complete. A
+ * non-zero return value indicates the maximum number of bytes to be written on
+ * the next call to the device's write_some_at function.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @par Example
+ * To write a single data buffer use the @ref buffer function as follows:
+ * @code boost::asio::write_at(d, 42, boost::asio::buffer(data, size),
+ *     boost::asio::transfer_at_least(32)); @endcode
+ * See the @ref buffer documentation for information on writing multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+template <typename SyncRandomAccessWriteDevice, typename ConstBufferSequence,
+    typename CompletionCondition>
+std::size_t write_at(SyncRandomAccessWriteDevice& d,
+    uint64_t offset, const ConstBufferSequence& buffers,
+    CompletionCondition completion_condition);
+
+/// Write a certain amount of data at a specified offset before returning.
+/**
+ * This function is used to write a certain number of bytes of data to a random
+ * access device at a specified offset. The call will block until one of the
+ * following conditions is true:
+ *
+ * @li All of the data in the supplied buffers has been written. That is, the
+ * bytes transferred is equal to the sum of the buffer sizes.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * write_some_at function.
+ *
+ * @param d The device to which the data is to be written. The type must support
+ * the SyncRandomAccessWriteDevice concept.
+ *
+ * @param offset The offset at which the data will be written.
+ *
+ * @param buffers One or more buffers containing the data to be written. The sum
+ * of the buffer sizes indicates the maximum number of bytes to write to the
+ * device.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the write operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest write_some_at operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the write operation is complete. A
+ * non-zero return value indicates the maximum number of bytes to be written on
+ * the next call to the device's write_some_at function.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes written. If an error occurs, returns the total
+ * number of bytes successfully transferred prior to the error.
+ */
+template <typename SyncRandomAccessWriteDevice, typename ConstBufferSequence,
+    typename CompletionCondition>
+std::size_t write_at(SyncRandomAccessWriteDevice& d,
+    uint64_t offset, const ConstBufferSequence& buffers,
+    CompletionCondition completion_condition, boost::system::error_code& ec);
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/// Write all of the supplied data at the specified offset before returning.
+/**
+ * This function is used to write a certain number of bytes of data to a random
+ * access device at a specified offset. The call will block until one of the
+ * following conditions is true:
+ *
+ * @li All of the data in the supplied basic_streambuf has been written.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * write_some_at function.
+ *
+ * @param d The device to which the data is to be written. The type must support
+ * the SyncRandomAccessWriteDevice concept.
+ *
+ * @param offset The offset at which the data will be written.
+ *
+ * @param b The basic_streambuf object from which data will be written.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::write_at(
+ *     d, 42, b,
+ *     boost::asio::transfer_all()); @endcode
+ */
+template <typename SyncRandomAccessWriteDevice, typename Allocator>
+std::size_t write_at(SyncRandomAccessWriteDevice& d,
+    uint64_t offset, basic_streambuf<Allocator>& b);
+
+/// Write all of the supplied data at the specified offset before returning.
+/**
+ * This function is used to write a certain number of bytes of data to a random
+ * access device at a specified offset. The call will block until one of the
+ * following conditions is true:
+ *
+ * @li All of the data in the supplied basic_streambuf has been written.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * write_some_at function.
+ *
+ * @param d The device to which the data is to be written. The type must support
+ * the SyncRandomAccessWriteDevice concept.
+ *
+ * @param offset The offset at which the data will be written.
+ *
+ * @param b The basic_streambuf object from which data will be written.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::write_at(
+ *     d, 42, b,
+ *     boost::asio::transfer_all(), ec); @endcode
+ */
+template <typename SyncRandomAccessWriteDevice, typename Allocator>
+std::size_t write_at(SyncRandomAccessWriteDevice& d,
+    uint64_t offset, basic_streambuf<Allocator>& b,
+    boost::system::error_code& ec);
+
+/// Write a certain amount of data at a specified offset before returning.
+/**
+ * This function is used to write a certain number of bytes of data to a random
+ * access device at a specified offset. The call will block until one of the
+ * following conditions is true:
+ *
+ * @li All of the data in the supplied basic_streambuf has been written.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * write_some_at function.
+ *
+ * @param d The device to which the data is to be written. The type must support
+ * the SyncRandomAccessWriteDevice concept.
+ *
+ * @param offset The offset at which the data will be written.
+ *
+ * @param b The basic_streambuf object from which data will be written.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the write operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest write_some_at operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the write operation is complete. A
+ * non-zero return value indicates the maximum number of bytes to be written on
+ * the next call to the device's write_some_at function.
+ *
+ * @returns The number of bytes transferred.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ */
+template <typename SyncRandomAccessWriteDevice, typename Allocator,
+    typename CompletionCondition>
+std::size_t write_at(SyncRandomAccessWriteDevice& d, uint64_t offset,
+    basic_streambuf<Allocator>& b, CompletionCondition completion_condition);
+
+/// Write a certain amount of data at a specified offset before returning.
+/**
+ * This function is used to write a certain number of bytes of data to a random
+ * access device at a specified offset. The call will block until one of the
+ * following conditions is true:
+ *
+ * @li All of the data in the supplied basic_streambuf has been written.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * write_some_at function.
+ *
+ * @param d The device to which the data is to be written. The type must support
+ * the SyncRandomAccessWriteDevice concept.
+ *
+ * @param offset The offset at which the data will be written.
+ *
+ * @param b The basic_streambuf object from which data will be written.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the write operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest write_some_at operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the write operation is complete. A
+ * non-zero return value indicates the maximum number of bytes to be written on
+ * the next call to the device's write_some_at function.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes written. If an error occurs, returns the total
+ * number of bytes successfully transferred prior to the error.
+ */
+template <typename SyncRandomAccessWriteDevice, typename Allocator,
+    typename CompletionCondition>
+std::size_t write_at(SyncRandomAccessWriteDevice& d, uint64_t offset,
+    basic_streambuf<Allocator>& b, CompletionCondition completion_condition,
+    boost::system::error_code& ec);
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/*@}*/
+/**
+ * @defgroup async_write_at boost::asio::async_write_at
+ *
+ * @brief Start an asynchronous operation to write a certain amount of data at
+ * the specified offset.
+ */
+/*@{*/
+
+/// Start an asynchronous operation to write all of the supplied data at the
+/// specified offset.
+/**
+ * This function is used to asynchronously write a certain number of bytes of
+ * data to a random access device at a specified offset. The function call
+ * always returns immediately. The asynchronous operation will continue until
+ * one of the following conditions is true:
+ *
+ * @li All of the data in the supplied buffers has been written. That is, the
+ * bytes transferred is equal to the sum of the buffer sizes.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * async_write_some_at function, and is known as a <em>composed operation</em>.
+ * The program must ensure that the device performs no <em>overlapping</em>
+ * write operations (such as async_write_at, the device's async_write_some_at
+ * function, or any other composed operations that perform writes) until this
+ * operation completes. Operations are overlapping if the regions defined by
+ * their offsets, and the numbers of bytes to write, intersect.
+ *
+ * @param d The device to which the data is to be written. The type must support
+ * the AsyncRandomAccessWriteDevice concept.
+ *
+ * @param offset The offset at which the data will be written.
+ *
+ * @param buffers One or more buffers containing the data to be written.
+ * Although the buffers object may be copied as necessary, ownership of the
+ * underlying memory blocks is retained by the caller, which must guarantee
+ * that they remain valid until the handler is called.
+ *
+ * @param handler The handler to be called when the write operation completes.
+ * Copies will be made of the handler as required. The function signature of
+ * the handler must be:
+ * @code void handler(
+ *   // Result of operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes written from the buffers. If an error
+ *   // occurred, this will be less than the sum of the buffer sizes.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @par Example
+ * To write a single data buffer use the @ref buffer function as follows:
+ * @code
+ * boost::asio::async_write_at(d, 42, boost::asio::buffer(data, size), handler);
+ * @endcode
+ * See the @ref buffer documentation for information on writing multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+template <typename AsyncRandomAccessWriteDevice, typename ConstBufferSequence,
+    typename WriteHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+async_write_at(AsyncRandomAccessWriteDevice& d, uint64_t offset,
+    const ConstBufferSequence& buffers,
+    BOOST_ASIO_MOVE_ARG(WriteHandler) handler);
+
+/// Start an asynchronous operation to write a certain amount of data at the
+/// specified offset.
+/**
+ * This function is used to asynchronously write a certain number of bytes of
+ * data to a random access device at a specified offset. The function call
+ * always returns immediately. The asynchronous operation will continue until
+ * one of the following conditions is true:
+ *
+ * @li All of the data in the supplied buffers has been written. That is, the
+ * bytes transferred is equal to the sum of the buffer sizes.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * async_write_some_at function, and is known as a <em>composed operation</em>.
+ * The program must ensure that the device performs no <em>overlapping</em>
+ * write operations (such as async_write_at, the device's async_write_some_at
+ * function, or any other composed operations that perform writes) until this
+ * operation completes. Operations are overlapping if the regions defined by
+ * their offsets, and the numbers of bytes to write, intersect.
+ *
+ * @param d The device to which the data is to be written. The type must support
+ * the AsyncRandomAccessWriteDevice concept.
+ *
+ * @param offset The offset at which the data will be written.
+ *
+ * @param buffers One or more buffers containing the data to be written.
+ * Although the buffers object may be copied as necessary, ownership of the
+ * underlying memory blocks is retained by the caller, which must guarantee
+ * that they remain valid until the handler is called.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the write operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest async_write_some_at operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the write operation is complete. A
+ * non-zero return value indicates the maximum number of bytes to be written on
+ * the next call to the device's async_write_some_at function.
+ *
+ * @param handler The handler to be called when the write operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   // Result of operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes written from the buffers. If an error
+ *   // occurred, this will be less than the sum of the buffer sizes.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @par Example
+ * To write a single data buffer use the @ref buffer function as follows:
+ * @code boost::asio::async_write_at(d, 42,
+ *     boost::asio::buffer(data, size),
+ *     boost::asio::transfer_at_least(32),
+ *     handler); @endcode
+ * See the @ref buffer documentation for information on writing multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+template <typename AsyncRandomAccessWriteDevice, typename ConstBufferSequence,
+    typename CompletionCondition, typename WriteHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+async_write_at(AsyncRandomAccessWriteDevice& d,
+    uint64_t offset, const ConstBufferSequence& buffers,
+    CompletionCondition completion_condition,
+    BOOST_ASIO_MOVE_ARG(WriteHandler) handler);
+
+#if !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/// Start an asynchronous operation to write all of the supplied data at the
+/// specified offset.
+/**
+ * This function is used to asynchronously write a certain number of bytes of
+ * data to a random access device at a specified offset. The function call
+ * always returns immediately. The asynchronous operation will continue until
+ * one of the following conditions is true:
+ *
+ * @li All of the data in the supplied basic_streambuf has been written.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * async_write_some_at function, and is known as a <em>composed operation</em>.
+ * The program must ensure that the device performs no <em>overlapping</em>
+ * write operations (such as async_write_at, the device's async_write_some_at
+ * function, or any other composed operations that perform writes) until this
+ * operation completes. Operations are overlapping if the regions defined by
+ * their offsets, and the numbers of bytes to write, intersect.
+ *
+ * @param d The device to which the data is to be written. The type must support
+ * the AsyncRandomAccessWriteDevice concept.
+ *
+ * @param offset The offset at which the data will be written.
+ *
+ * @param b A basic_streambuf object from which data will be written. Ownership
+ * of the streambuf is retained by the caller, which must guarantee that it
+ * remains valid until the handler is called.
+ *
+ * @param handler The handler to be called when the write operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   // Result of operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes written from the buffers. If an error
+ *   // occurred, this will be less than the sum of the buffer sizes.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ */
+template <typename AsyncRandomAccessWriteDevice, typename Allocator,
+    typename WriteHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+async_write_at(AsyncRandomAccessWriteDevice& d, uint64_t offset,
+    basic_streambuf<Allocator>& b, BOOST_ASIO_MOVE_ARG(WriteHandler) handler);
+
+/// Start an asynchronous operation to write a certain amount of data at the
+/// specified offset.
+/**
+ * This function is used to asynchronously write a certain number of bytes of
+ * data to a random access device at a specified offset. The function call
+ * always returns immediately. The asynchronous operation will continue until
+ * one of the following conditions is true:
+ *
+ * @li All of the data in the supplied basic_streambuf has been written.
+ *
+ * @li The completion_condition function object returns 0.
+ *
+ * This operation is implemented in terms of zero or more calls to the device's
+ * async_write_some_at function, and is known as a <em>composed operation</em>.
+ * The program must ensure that the device performs no <em>overlapping</em>
+ * write operations (such as async_write_at, the device's async_write_some_at
+ * function, or any other composed operations that perform writes) until this
+ * operation completes. Operations are overlapping if the regions defined by
+ * their offsets, and the numbers of bytes to write, intersect.
+ *
+ * @param d The device to which the data is to be written. The type must support
+ * the AsyncRandomAccessWriteDevice concept.
+ *
+ * @param offset The offset at which the data will be written.
+ *
+ * @param b A basic_streambuf object from which data will be written. Ownership
+ * of the streambuf is retained by the caller, which must guarantee that it
+ * remains valid until the handler is called.
+ *
+ * @param completion_condition The function object to be called to determine
+ * whether the write operation is complete. The signature of the function object
+ * must be:
+ * @code std::size_t completion_condition(
+ *   // Result of latest async_write_some_at operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes transferred so far.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * A return value of 0 indicates that the write operation is complete. A
+ * non-zero return value indicates the maximum number of bytes to be written on
+ * the next call to the device's async_write_some_at function.
+ *
+ * @param handler The handler to be called when the write operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ *   // Result of operation.
+ *   const boost::system::error_code& error,
+ *
+ *   // Number of bytes written from the buffers. If an error
+ *   // occurred, this will be less than the sum of the buffer sizes.
+ *   std::size_t bytes_transferred
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ */
+template <typename AsyncRandomAccessWriteDevice, typename Allocator,
+    typename CompletionCondition, typename WriteHandler>
+BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler,
+    void (boost::system::error_code, std::size_t))
+async_write_at(AsyncRandomAccessWriteDevice& d, uint64_t offset,
+    basic_streambuf<Allocator>& b, CompletionCondition completion_condition,
+    BOOST_ASIO_MOVE_ARG(WriteHandler) handler);
+
+#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
+
+/*@}*/
+
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#include <boost/asio/impl/write_at.hpp>
+
+#endif // BOOST_ASIO_WRITE_AT_HPP
diff --git a/ext/patches/boost/asio/yield.hpp b/ext/patches/boost/asio/yield.hpp
new file mode 100644
index 0000000..3f10852
--- /dev/null
+++ b/ext/patches/boost/asio/yield.hpp
@@ -0,0 +1,23 @@
+//
+// yield.hpp
+// ~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include "coroutine.hpp"
+
+#ifndef reenter
+# define reenter(c) BOOST_ASIO_CORO_REENTER(c)
+#endif
+
+#ifndef yield
+# define yield BOOST_ASIO_CORO_YIELD
+#endif
+
+#ifndef fork
+# define fork BOOST_ASIO_CORO_FORK
+#endif
diff --git a/ext/patches/comet/Comet.sln b/ext/patches/comet/Comet.sln
new file mode 100644
index 0000000..c0b3af0
--- /dev/null
+++ b/ext/patches/comet/Comet.sln
@@ -0,0 +1,81 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Comet", "Comet.vcxproj", "{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}"
+	ProjectSection(ProjectDependencies) = postProject
+		{887C017B-8E91-4CCE-85C6-4D36D4033F1B} = {887C017B-8E91-4CCE-85C6-4D36D4033F1B}
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5} = {8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MSToolkitLite", "MSToolkit\MSToolkitLite.vcxproj", "{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CometSearch", "CometSearch\CometSearch.vcxproj", "{887C017B-8E91-4CCE-85C6-4D36D4033F1B}"
+	ProjectSection(ProjectDependencies) = postProject
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5} = {8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Mixed Platforms = Debug|Mixed Platforms
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|Mixed Platforms = Release|Mixed Platforms
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}.Debug|Mixed Platforms.Build.0 = Debug|x64
+		{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}.Debug|Win32.ActiveCfg = Debug|Win32
+		{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}.Debug|Win32.Build.0 = Debug|Win32
+		{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}.Debug|x64.ActiveCfg = Debug|x64
+		{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}.Debug|x64.Build.0 = Debug|x64
+		{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}.Debug|x86.ActiveCfg = Debug|Win32
+		{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}.Debug|x86.Build.0 = Debug|Win32
+		{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}.Release|Mixed Platforms.Build.0 = Release|x64
+		{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}.Release|Win32.ActiveCfg = Release|Win32
+		{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}.Release|Win32.Build.0 = Release|Win32
+		{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}.Release|x64.ActiveCfg = Release|x64
+		{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}.Release|x64.Build.0 = Release|x64
+		{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}.Release|x86.ActiveCfg = Release|Win32
+		{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}.Release|x86.Build.0 = Release|Win32
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}.Debug|Mixed Platforms.Build.0 = Debug|x64
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}.Debug|Win32.ActiveCfg = Debug|Win32
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}.Debug|Win32.Build.0 = Debug|Win32
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}.Debug|x64.ActiveCfg = Debug|x64
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}.Debug|x64.Build.0 = Debug|x64
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}.Debug|x86.ActiveCfg = Debug|Win32
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}.Debug|x86.Build.0 = Debug|Win32
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}.Release|Mixed Platforms.Build.0 = Release|x64
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}.Release|Win32.ActiveCfg = Release|Win32
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}.Release|Win32.Build.0 = Release|Win32
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}.Release|x64.ActiveCfg = Release|x64
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}.Release|x64.Build.0 = Release|x64
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}.Release|x86.ActiveCfg = Release|Win32
+		{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}.Release|x86.Build.0 = Release|Win32
+		{887C017B-8E91-4CCE-85C6-4D36D4033F1B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+		{887C017B-8E91-4CCE-85C6-4D36D4033F1B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+		{887C017B-8E91-4CCE-85C6-4D36D4033F1B}.Debug|Win32.ActiveCfg = Debug|Win32
+		{887C017B-8E91-4CCE-85C6-4D36D4033F1B}.Debug|Win32.Build.0 = Debug|Win32
+		{887C017B-8E91-4CCE-85C6-4D36D4033F1B}.Debug|x64.ActiveCfg = Debug|x64
+		{887C017B-8E91-4CCE-85C6-4D36D4033F1B}.Debug|x64.Build.0 = Debug|x64
+		{887C017B-8E91-4CCE-85C6-4D36D4033F1B}.Debug|x86.ActiveCfg = Debug|Win32
+		{887C017B-8E91-4CCE-85C6-4D36D4033F1B}.Debug|x86.Build.0 = Debug|Win32
+		{887C017B-8E91-4CCE-85C6-4D36D4033F1B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+		{887C017B-8E91-4CCE-85C6-4D36D4033F1B}.Release|Mixed Platforms.Build.0 = Release|Win32
+		{887C017B-8E91-4CCE-85C6-4D36D4033F1B}.Release|Win32.ActiveCfg = Release|Win32
+		{887C017B-8E91-4CCE-85C6-4D36D4033F1B}.Release|Win32.Build.0 = Release|Win32
+		{887C017B-8E91-4CCE-85C6-4D36D4033F1B}.Release|x64.ActiveCfg = Release|x64
+		{887C017B-8E91-4CCE-85C6-4D36D4033F1B}.Release|x64.Build.0 = Release|x64
+		{887C017B-8E91-4CCE-85C6-4D36D4033F1B}.Release|x86.ActiveCfg = Release|Win32
+		{887C017B-8E91-4CCE-85C6-4D36D4033F1B}.Release|x86.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/ext/patches/comet/Comet.vcxproj b/ext/patches/comet/Comet.vcxproj
new file mode 100644
index 0000000..a0a4224
--- /dev/null
+++ b/ext/patches/comet/Comet.vcxproj
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{EC89AD31-11AD-4CE2-AA1D-FFFFF716DE33}</ProjectGuid>
+    <RootNamespace>Comet</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+    <UseOfMfc>Static</UseOfMfc>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <IntDir>$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <AdditionalIncludeDirectories>pthreads-w32\include;MSToolkit\include;CometSearch;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <StringPooling>true</StringPooling>
+      <FunctionLevelLinking>false</FunctionLevelLinking>
+      <FloatingPointModel>Fast</FloatingPointModel>
+      <FloatingPointExceptions>false</FloatingPointExceptions>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <ErrorReporting>Prompt</ErrorReporting>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+      <MinimalRebuild>false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
+      <AdditionalDependencies>ws2_32.lib;setargv.obj;MSToolkitLite.lib;CometSearch.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>pthreads-w32\include;MSToolkit\include;CometSearch;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
+      <IntrinsicFunctions>false</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
+      <OmitFramePointers>false</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <StringPooling>false</StringPooling>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <FloatingPointModel>Fast</FloatingPointModel>
+      <FloatingPointExceptions>false</FloatingPointExceptions>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
+      <AdditionalDependencies>ws2_32.lib;setargv.obj;MSToolkitLite.lib;CometSearch.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OptimizeReferences>true</OptimizeReferences>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>false</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>pthreads-w32\include;MSToolkit\include;CometSearch;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <StringPooling>true</StringPooling>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <FloatingPointModel>Fast</FloatingPointModel>
+      <FloatingPointExceptions>false</FloatingPointExceptions>
+      <PreprocessorDefinitions>_UNICODE;UNICODE;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>
+      </EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
+      <AdditionalDependencies>ws2_32.lib;setargv.obj;MSToolkitLite.lib;CometSearch.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>false</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>MSToolkit\include;CometSearch;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>
+      </PreprocessorDefinitions>
+      <FloatingPointModel>Fast</FloatingPointModel>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <StringPooling>true</StringPooling>
+      <FloatingPointExceptions>false</FloatingPointExceptions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>
+      </EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>ws2_32.lib;setargv.obj;MSToolkitLite.lib;CometSearch.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="Comet.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="Comet.rc" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="icon\comet.ico" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="resource.h" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/ext/patches/comet/CometSearch/CometSearch.vcxproj b/ext/patches/comet/CometSearch/CometSearch.vcxproj
new file mode 100644
index 0000000..71ddff9
--- /dev/null
+++ b/ext/patches/comet/CometSearch/CometSearch.vcxproj
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{887C017B-8E91-4CCE-85C6-4D36D4033F1B}</ProjectGuid>
+    <RootNamespace>CometSearch</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <IntDir>$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <AdditionalIncludeDirectories>..\pthreads-w32\include;..\MSToolkit\include;</AdditionalIncludeDirectories>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <StringPooling>true</StringPooling>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <FunctionLevelLinking>false</FunctionLevelLinking>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <FloatingPointModel>Fast</FloatingPointModel>
+      <FloatingPointExceptions>false</FloatingPointExceptions>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>..\pthreads-w32\include;..\MSToolkit\include;</AdditionalIncludeDirectories>
+      <FloatingPointModel>Fast</FloatingPointModel>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>false</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>..\pthreads-w32\include;..\MSToolkit\include;</AdditionalIncludeDirectories>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <StringPooling>true</StringPooling>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <FloatingPointModel>Fast</FloatingPointModel>
+      <FloatingPointExceptions>false</FloatingPointExceptions>
+      <PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>false</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>..\MSToolkit\include;</AdditionalIncludeDirectories>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <StringPooling>true</StringPooling>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <FloatingPointModel>Fast</FloatingPointModel>
+      <FloatingPointExceptions>false</FloatingPointExceptions>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="CometData.h" />
+    <ClInclude Include="CometDataInternal.h" />
+    <ClInclude Include="CometDecoys.h" />
+    <ClInclude Include="CometInterfaces.h" />
+    <ClInclude Include="CometMassSpecUtils.h" />
+    <ClInclude Include="CometPostAnalysis.h" />
+    <ClInclude Include="CometPreprocess.h" />
+    <ClInclude Include="CometSearch.h" />
+    <ClInclude Include="CometSearchManager.h" />
+    <ClInclude Include="CometStatus.h" />
+    <ClInclude Include="CometWriteOut.h" />
+    <ClInclude Include="CometWritePepXML.h" />
+    <ClInclude Include="CometWritePercolator.h" />
+    <ClInclude Include="CometWriteSqt.h" />
+    <ClInclude Include="CometWriteTxt.h" />
+    <ClInclude Include="Common.h" />
+    <ClInclude Include="OSSpecificThreading.h" />
+    <ClInclude Include="Threading.h" />
+    <ClInclude Include="ThreadPool.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="CometInterfaces.cpp" />
+    <ClCompile Include="CometMassSpecUtils.cpp" />
+    <ClCompile Include="CometPostAnalysis.cpp" />
+    <ClCompile Include="CometPreprocess.cpp" />
+    <ClCompile Include="CometSearch.cpp" />
+    <ClCompile Include="CometSearchManager.cpp" />
+    <ClCompile Include="CometWriteOut.cpp" />
+    <ClCompile Include="CometWritePepXML.cpp" />
+    <ClCompile Include="CometWritePercolator.cpp" />
+    <ClCompile Include="CometWriteSqt.cpp" />
+    <ClCompile Include="CometWriteTxt.cpp" />
+    <ClCompile Include="Threading.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/ext/patches/comet/CometSearch/CometSearchManager.cpp b/ext/patches/comet/CometSearch/CometSearchManager.cpp
new file mode 100644
index 0000000..e05ab8c
--- /dev/null
+++ b/ext/patches/comet/CometSearch/CometSearchManager.cpp
@@ -0,0 +1,2108 @@
+/*
+   Copyright 2013 University of Washington
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+*/
+
+#include "Common.h"
+#include "CometMassSpecUtils.h"
+#include "CometSearch.h"
+#include "CometPostAnalysis.h"
+#include "CometPreprocess.h"
+#include "CometWriteOut.h"
+#include "CometWriteSqt.h"
+#include "CometWriteTxt.h"
+#include "CometWritePepXML.h"
+#include "CometWritePercolator.h"
+#include "Threading.h"
+#include "ThreadPool.h"
+#include "CometDataInternal.h"
+#include "CometSearchManager.h"
+#include "CometStatus.h"
+
+#undef PERF_DEBUG
+
+std::vector<Query*>           g_pvQuery;
+std::vector<InputFileInfo *>  g_pvInputFiles;
+StaticParams                  g_staticParams;
+MassRange                     g_massRange;
+Mutex                         g_pvQueryMutex;
+Mutex                         g_preprocessMemoryPoolMutex;
+Mutex                         g_searchMemoryPoolMutex;
+CometStatus                   g_cometStatus;
+
+/******************************************************************************
+*
+* Static helper functions
+*
+******************************************************************************/
+static void GetHostName()
+{
+#ifdef _WIN32
+   WSADATA WSAData;
+   WSAStartup(MAKEWORD(1, 0), &WSAData);
+
+   if (gethostname(g_staticParams.szHostName, SIZE_FILE) != 0)
+      strcpy(g_staticParams.szHostName, "locahost");
+
+   WSACleanup();
+#else
+   if (gethostname(g_staticParams.szHostName, SIZE_FILE) != 0)
+      strcpy(g_staticParams.szHostName, "locahost");
+#endif
+
+   char *pStr;
+   if ((pStr = strchr(g_staticParams.szHostName, '.'))!=NULL)
+      *pStr = '\0';
+}
+
+static InputType GetInputType(const char *pszFileName)
+{
+   int iLen = strlen(pszFileName);
+
+   if (!STRCMP_IGNORE_CASE(pszFileName + iLen - 6, ".mzXML")
+         || !STRCMP_IGNORE_CASE(pszFileName + iLen - 5, ".mzML")
+         || !STRCMP_IGNORE_CASE(pszFileName + iLen - 9, ".mzXML.gz")
+         || !STRCMP_IGNORE_CASE(pszFileName + iLen - 8, ".mzML.gz"))
+
+   {
+      return InputType_MZXML;
+   }
+   else if (!STRCMP_IGNORE_CASE(pszFileName + iLen - 4, ".raw"))
+   {
+      return InputType_RAW;
+   }
+   else if (!STRCMP_IGNORE_CASE(pszFileName + iLen - 4, ".ms2")
+         || !STRCMP_IGNORE_CASE(pszFileName + iLen - 5, ".cms2"))
+   {
+      return InputType_MS2;
+   }
+   else if (!STRCMP_IGNORE_CASE(pszFileName + iLen - 4, ".mgf"))
+   {
+      return InputType_MGF;
+   }
+
+   return InputType_UNKNOWN;
+}
+
+static bool UpdateInputFile(InputFileInfo *pFileInfo)
+{
+   bool bUpdateBaseName = false;
+   char szTmpBaseName[SIZE_FILE];
+
+   // Make sure not set on command line OR more than 1 input file
+   // Need to do this check here before g_staticParams.inputFile is set to *pFileInfo
+   if (g_staticParams.inputFile.szBaseName[0] =='\0' || g_pvInputFiles.size()>1)
+      bUpdateBaseName = true;
+   else
+      strcpy(szTmpBaseName, g_staticParams.inputFile.szBaseName);
+
+   g_staticParams.inputFile = *pFileInfo;
+
+   g_staticParams.inputFile.iInputType = GetInputType(g_staticParams.inputFile.szFileName);
+
+   if (InputType_UNKNOWN == g_staticParams.inputFile.iInputType)
+   {
+       return false;
+   }
+   int iLen = strlen(g_staticParams.inputFile.szFileName);
+
+   // per request, perform quick check to validate file still exists
+   // to avoid creating stub output files in these cases.
+   FILE *fp;
+   if ( (fp=fopen(g_staticParams.inputFile.szFileName, "r"))==NULL)
+   {
+      char szErrorMsg[256];
+      sprintf(szErrorMsg,  " Error - cannot read input file \"%s\".\n",
+            g_staticParams.inputFile.szFileName);
+      string strErrorMsg(szErrorMsg);
+      g_cometStatus.SetStatus(CometResult_Failed, strErrorMsg);
+      logerr(szErrorMsg);
+      return false;
+   }
+   else
+   {
+      fclose(fp);
+   }
+
+#ifndef CRUX
+   if (bUpdateBaseName) // set individual basename from input file
+   {
+      char *pStr;
+
+      strcpy(g_staticParams.inputFile.szBaseName, g_staticParams.inputFile.szFileName);
+
+      if ( (pStr = strrchr(g_staticParams.inputFile.szBaseName, '.')))
+         *pStr = '\0';
+
+      if (!STRCMP_IGNORE_CASE(g_staticParams.inputFile.szFileName + iLen - 9, ".mzXML.gz")
+            || !STRCMP_IGNORE_CASE(g_staticParams.inputFile.szFileName + iLen - 8, ".mzML.gz"))
+      {
+         if ( (pStr = strrchr(g_staticParams.inputFile.szBaseName, '.')))
+            *pStr = '\0';
+      }
+   }
+   else
+   {
+      strcpy(g_staticParams.inputFile.szBaseName, szTmpBaseName);  // set basename from command line
+   }
+#endif
+
+   // Create .out directory.
+   if (g_staticParams.options.bOutputOutFiles)
+   {
+#ifdef _WIN32
+      if (_mkdir(g_staticParams.inputFile.szBaseName) == -1)
+      {
+         errno_t err;
+         _get_errno(&err);
+
+         if (err != EEXIST)
+         {
+            char szErrorMsg[256];
+            sprintf(szErrorMsg,  " Error - could not create directory \"%s\".\n",
+                  g_staticParams.inputFile.szBaseName);
+            string strErrorMsg(szErrorMsg);
+            g_cometStatus.SetStatus(CometResult_Failed, strErrorMsg);
+            logerr(szErrorMsg);
+            return false;
+         }
+      }
+      if (g_staticParams.options.iDecoySearch == 2)
+      {
+         char szDecoyDir[SIZE_FILE];
+         sprintf(szDecoyDir, "%s_decoy", g_staticParams.inputFile.szBaseName);
+
+         if (_mkdir(szDecoyDir) == -1)
+         {
+            errno_t err;
+            _get_errno(&err);
+
+            if (err != EEXIST)
+            {
+               char szErrorMsg[256];
+               sprintf(szErrorMsg,  " Error - could not create directory \"%s\".\n",  szDecoyDir);
+               string strErrorMsg(szErrorMsg);
+               g_cometStatus.SetStatus(CometResult_Failed, strErrorMsg);
+               logerr(szErrorMsg);
+               return false;
+            }
+         }
+      }
+#else
+      if ((mkdir(g_staticParams.inputFile.szBaseName, 0775) == -1) && (errno != EEXIST))
+      {
+         char szErrorMsg[256];
+         sprintf(szErrorMsg,  " Error - could not create directory \"%s\".\n",
+               g_staticParams.inputFile.szBaseName);
+         string strErrorMsg(szErrorMsg);
+         g_cometStatus.SetStatus(CometResult_Failed, strErrorMsg);
+         logerr(szErrorMsg);
+         return false;
+      }
+      if (g_staticParams.options.iDecoySearch == 2)
+      {
+         char szDecoyDir[SIZE_FILE];
+         sprintf(szDecoyDir, "%s_decoy", g_staticParams.inputFile.szBaseName);
+
+         if ((mkdir(szDecoyDir , 0775) == -1) && (errno != EEXIST))
+         {
+            char szErrorMsg[256];
+            sprintf(szErrorMsg,  " Error - could not create directory \"%s\".\n",  szDecoyDir);
+            string strErrorMsg(szErrorMsg);
+            g_cometStatus.SetStatus(CometResult_Failed, strErrorMsg);
+            logerr(szErrorMsg);
+            return false;
+         }
+      }
+#endif
+   }
+
+   return true;
+}
+
+static void SetMSLevelFilter(MSReader &mstReader)
+{
+   vector<MSSpectrumType> msLevel;
+   if (g_staticParams.options.iMSLevel == 3)
+   {
+      msLevel.push_back(MS3);
+   }
+   else
+   {
+      msLevel.push_back(MS2);
+   }
+   mstReader.setFilter(msLevel);
+}
+
+// Allocate memory for the _pResults struct for each g_pvQuery entry.
+static bool AllocateResultsMem()
+{
+   for (unsigned i=0; i<g_pvQuery.size(); i++)
+   {
+      Query* pQuery = g_pvQuery.at(i);
+
+      try
+      {
+         pQuery->_pResults = new Results[g_staticParams.options.iNumStored];
+      }
+      catch (std::bad_alloc& ba)
+      {
+         char szErrorMsg[256];
+         sprintf(szErrorMsg, " Error - new(_pResults[]). bad_alloc: %s.\n", ba.what());
+         string strErrorMsg(szErrorMsg);
+         g_cometStatus.SetStatus(CometResult_Failed, strErrorMsg);
+         logerr(szErrorMsg);
+         return false;
+      }
+
+      if (g_staticParams.options.iDecoySearch==2)
+      {
+         try
+         {
+            pQuery->_pDecoys = new Results[g_staticParams.options.iNumStored];
+         }
+         catch (std::bad_alloc& ba)
+         {
+            char szErrorMsg[256];
+            sprintf(szErrorMsg, " Error - new(_pDecoys[]). bad_alloc: %s.\n", ba.what());
+            string strErrorMsg(szErrorMsg);
+            g_cometStatus.SetStatus(CometResult_Failed, strErrorMsg);
+            logerr(szErrorMsg);
+            return false;
+         }
+      }
+
+      for (int j=0; j<g_staticParams.options.iNumStored; j++)
+      {
+         pQuery->_pResults[j].dPepMass = 0.0;
+         pQuery->_pResults[j].dExpect = 0.0;
+         pQuery->_pResults[j].fScoreSp = 0.0;
+         pQuery->_pResults[j].fXcorr = XCORR_CUTOFF;
+         pQuery->_pResults[j].iDuplicateCount = 0;
+         pQuery->_pResults[j].iLenPeptide = 0;
+         pQuery->_pResults[j].iRankSp = 0;
+         pQuery->_pResults[j].iMatchedIons = 0;
+         pQuery->_pResults[j].iTotalIons = 0;
+         pQuery->_pResults[j].szPeptide[0] = '\0';
+         pQuery->_pResults[j].szProtein[0] = '\0';
+
+         if (g_staticParams.options.iDecoySearch==2)
+         {
+            pQuery->_pDecoys[j].dPepMass = 0.0;
+            pQuery->_pDecoys[j].dExpect = 0.0;
+            pQuery->_pDecoys[j].fScoreSp = 0.0;
+            pQuery->_pDecoys[j].fXcorr = XCORR_CUTOFF;
+            pQuery->_pDecoys[j].iDuplicateCount = 0;
+            pQuery->_pDecoys[j].iLenPeptide = 0;
+            pQuery->_pDecoys[j].iRankSp = 0;
+            pQuery->_pDecoys[j].iMatchedIons = 0;
+            pQuery->_pDecoys[j].iTotalIons = 0;
+            pQuery->_pDecoys[j].szPeptide[0] = '\0';
+            pQuery->_pDecoys[j].szProtein[0] = '\0';
+         }
+      }
+   }
+
+   return true;
+}
+
+static bool compareByPeptideMass(Query const* a, Query const* b)
+{
+   return (a->_pepMassInfo.dExpPepMass < b->_pepMassInfo.dExpPepMass);
+}
+
+static bool compareByScanNumber(Query const* a, Query const* b)
+{
+   return (a->_spectrumInfoInternal.iScanNumber < b->_spectrumInfoInternal.iScanNumber);
+}
+
+static void CalcRunTime(time_t tStartTime)
+{
+   char szOutFileTimeString[512];
+   time_t tEndTime;
+   int iTmp;
+
+   time(&tEndTime);
+
+   int iElapseTime=(int)difftime(tEndTime, tStartTime);
+
+   // Print out header/search info.
+   sprintf(szOutFileTimeString, "%s,", g_staticParams.szDate);
+   if ( (iTmp = (int)(iElapseTime/3600) )>0)
+      sprintf(szOutFileTimeString+strlen(szOutFileTimeString), " %d hr.", iTmp);
+   if ( (iTmp = (int)((iElapseTime-(int)(iElapseTime/3600)*3600)/60) )>0)
+      sprintf(szOutFileTimeString+strlen(szOutFileTimeString), " %d min.", iTmp);
+   if ( (iTmp = (int)((iElapseTime-((int)(iElapseTime/3600))*3600)%60) )>0)
+      sprintf(szOutFileTimeString+strlen(szOutFileTimeString), " %d sec.", iTmp);
+   if (iElapseTime == 0)
+      sprintf(szOutFileTimeString+strlen(szOutFileTimeString), " 0 sec.");
+   sprintf(szOutFileTimeString+strlen(szOutFileTimeString), " on %s", g_staticParams.szHostName);
+
+   g_staticParams.iElapseTime = iElapseTime;
+   strncpy(g_staticParams.szOutFileTimeString, szOutFileTimeString, 256);
+   g_staticParams.szOutFileTimeString[255]='\0';
+}
+
+static void PrintParameters()
+{
+   // print parameters
+
+   char szIsotope[16];
+   char szPeak[16];
+
+   sprintf(g_staticParams.szIonSeries, "ion series ABCXYZ nl: %d%d%d%d%d%d %d",
+         g_staticParams.ionInformation.iIonVal[ION_SERIES_A],
+         g_staticParams.ionInformation.iIonVal[ION_SERIES_B],
+         g_staticParams.ionInformation.iIonVal[ION_SERIES_C],
+         g_staticParams.ionInformation.iIonVal[ION_SERIES_X],
+         g_staticParams.ionInformation.iIonVal[ION_SERIES_Y],
+         g_staticParams.ionInformation.iIonVal[ION_SERIES_Z],
+         g_staticParams.ionInformation.bUseNeutralLoss);
+
+   char szUnits[8];
+   char szDecoy[20];
+   char szReadingFrame[20];
+   char szRemovePrecursor[20];
+
+   if (g_staticParams.tolerances.iMassToleranceUnits==0)
+      strcpy(szUnits, " AMU");
+   else if (g_staticParams.tolerances.iMassToleranceUnits==1)
+      strcpy(szUnits, " MMU");
+   else
+      strcpy(szUnits, " PPM");
+
+   if (g_staticParams.options.iDecoySearch)
+      sprintf(szDecoy, " DECOY%d", g_staticParams.options.iDecoySearch);
+   else
+      szDecoy[0]=0;
+
+   if (g_staticParams.options.iRemovePrecursor)
+      sprintf(szRemovePrecursor, " REMOVEPREC%d", g_staticParams.options.iRemovePrecursor);
+   else
+      szRemovePrecursor[0]=0;
+
+   if (g_staticParams.options.iWhichReadingFrame)
+      sprintf(szReadingFrame, " FRAME%d", g_staticParams.options.iWhichReadingFrame);
+   else
+      szReadingFrame[0]=0;
+
+   szIsotope[0]='\0';
+   if (g_staticParams.tolerances.iIsotopeError==1)
+      strcpy(szIsotope, "ISOTOPE1");
+   else if (g_staticParams.tolerances.iIsotopeError==2)
+      strcpy(szIsotope, "ISOTOPE2");
+
+   szPeak[0]='\0';
+   if (g_staticParams.ionInformation.iTheoreticalFragmentIons==1)
+      strcpy(szPeak, "PEAK1");
+
+   sprintf(g_staticParams.szDisplayLine, "display top %d, %s%s%s%s%s%s%s%s",
+         g_staticParams.options.iNumPeptideOutputLines,
+         szRemovePrecursor,
+         szReadingFrame,
+         szPeak,
+         szUnits,
+         (g_staticParams.tolerances.iMassToleranceType==0?" MH+":" m/z"),
+         szIsotope,
+         szDecoy,
+         (g_staticParams.options.bClipNtermMet?" CLIPMET":"") );
+}
+
+static bool ValidateOutputFormat()
+{
+   if (!g_staticParams.options.bOutputSqtStream
+         && !g_staticParams.options.bOutputSqtFile
+         && !g_staticParams.options.bOutputTxtFile
+         && !g_staticParams.options.bOutputPepXMLFile
+         && !g_staticParams.options.bOutputPercolatorFile
+         && !g_staticParams.options.bOutputOutFiles)
+   {
+      string strError = " Please specify at least one output format.";
+
+      g_cometStatus.SetStatus(CometResult_Failed, strError);
+      string strErrorFormat = strError + "\n";
+      logerr(strErrorFormat.c_str());
+      return false;
+   }
+
+   return true;
+}
+
+static bool ValidateSequenceDatabaseFile()
+{
+   FILE *fpcheck;
+
+   // Quick sanity check to make sure sequence db file is present before spending
+   // time reading & processing spectra and then reporting this error.
+   if ((fpcheck=fopen(g_staticParams.databaseInfo.szDatabase, "r")) == NULL)
+   {
+      char szErrorMsg[256];
+      sprintf(szErrorMsg, " Error - cannot read database file \"%s\".\n Check that the file exists and is readable.\n",
+            g_staticParams.databaseInfo.szDatabase);
+      string strErrorMsg(szErrorMsg);
+      g_cometStatus.SetStatus(CometResult_Failed, strErrorMsg);
+      logerr(szErrorMsg);
+      return false;
+   }
+
+   fclose(fpcheck);
+   return true;
+}
+
+static bool ValidateScanRange()
+{
+   if (g_staticParams.options.scanRange.iEnd < g_staticParams.options.scanRange.iStart && g_staticParams.options.scanRange.iEnd != 0)
+   {
+      char szErrorMsg[256];
+      sprintf(szErrorMsg, " Error - start scan is %d but end scan is %d.\n The end scan must be >= to the start scan.\n",
+            g_staticParams.options.scanRange.iStart,
+            g_staticParams.options.scanRange.iEnd);
+      string strErrorMsg(szErrorMsg);
+      g_cometStatus.SetStatus(CometResult_Failed, strErrorMsg);
+      logerr(szErrorMsg);
+      return false;
+   }
+
+   return true;
+}
+
+/******************************************************************************
+*
+* CometSearchManager class implementation.
+*
+******************************************************************************/
+
+CometSearchManager::CometSearchManager()
+{
+   // Initialize the mutexes we'll use to protect global data.
+   Threading::CreateMutex(&g_pvQueryMutex);
+
+   // Initialize the mutex we'll use to protect the preprocess memory pool
+   Threading::CreateMutex(&g_preprocessMemoryPoolMutex);
+
+   // Initialize the mutex we'll use to protect the search memory pool
+   Threading::CreateMutex(&g_searchMemoryPoolMutex);
+
+   // Initialize the Comet version
+   SetParam("# comet_version ", comet_version, comet_version);
+}
+
+CometSearchManager::~CometSearchManager()
+{
+   // Destroy the mutex we used to protect g_pvQuery.
+   Threading::DestroyMutex(g_pvQueryMutex);
+
+   // Destroy the mutex we used to protect the preprocess memory pool
+   Threading::DestroyMutex(g_preprocessMemoryPoolMutex);
+
+   // Destroy the mutex we used to protect the search memory pool
+   Threading::DestroyMutex(g_searchMemoryPoolMutex);
+
+   // Clean up the input files vector
+   for (int i=0; i<(int)g_pvInputFiles.size(); i++)
+   {
+      delete g_pvInputFiles.at(i);
+   }
+   g_pvInputFiles.clear();
+
+   for (std::map<string, CometParam*>::iterator it = _mapStaticParams.begin(); it != _mapStaticParams.end(); ++it)
+   {
+      delete it->second;
+   }
+   _mapStaticParams.clear();
+}
+
+bool CometSearchManager::InitializeStaticParams()
+{
+   int iIntData;
+   double dDoubleData;
+   string strData;
+   IntRange intRangeData;
+   DoubleRange doubleRangeData;
+
+   if (GetParamValue("database_name", strData))
+   {
+      strcpy(g_staticParams.databaseInfo.szDatabase, strData.c_str());
+   }
+
+   if (GetParamValue("decoy_prefix", strData))
+   {
+      strcpy(g_staticParams.szDecoyPrefix, strData.c_str());
+   }
+
+   if (GetParamValue("output_suffix", strData))
+   {
+      strcpy(g_staticParams.szOutputSuffix, strData.c_str());
+   }
+
+   GetParamValue("mass_offsets", g_staticParams.vectorMassOffsets);
+
+   GetParamValue("xcorr_processing_offset", g_staticParams.iXcorrProcessingOffset);
+
+   GetParamValue("nucleotide_reading_frame", g_staticParams.options.iWhichReadingFrame);
+
+   GetParamValue("mass_type_parent", g_staticParams.massUtility.bMonoMassesParent);
+
+   GetParamValue("mass_type_fragment", g_staticParams.massUtility.bMonoMassesFragment);
+
+   GetParamValue("show_fragment_ions", g_staticParams.options.bShowFragmentIons);
+
+   GetParamValue("num_threads", g_staticParams.options.iNumThreads);
+
+   GetParamValue("clip_nterm_methionine", g_staticParams.options.bClipNtermMet);
+
+   GetParamValue("theoretical_fragment_ions", g_staticParams.ionInformation.iTheoreticalFragmentIons);
+   if ((g_staticParams.ionInformation.iTheoreticalFragmentIons < 0)
+         || (g_staticParams.ionInformation.iTheoreticalFragmentIons > 1))
+   {
+      g_staticParams.ionInformation.iTheoreticalFragmentIons = 0;
+   }
+
+   GetParamValue("use_A_ions", g_staticParams.ionInformation.iIonVal[ION_SERIES_A]);
+
+   GetParamValue("use_B_ions", g_staticParams.ionInformation.iIonVal[ION_SERIES_B]);
+
+   GetParamValue("use_C_ions", g_staticParams.ionInformation.iIonVal[ION_SERIES_C]);
+
+   GetParamValue("use_X_ions", g_staticParams.ionInformation.iIonVal[ION_SERIES_X]);
+
+   GetParamValue("use_Y_ions", g_staticParams.ionInformation.iIonVal[ION_SERIES_Y]);
+
+   GetParamValue("use_Z_ions", g_staticParams.ionInformation.iIonVal[ION_SERIES_Z]);
+
+   GetParamValue("use_NL_ions", g_staticParams.ionInformation.bUseNeutralLoss);
+
+   GetParamValue("variable_mod01", g_staticParams.variableModParameters.varModList[VMOD_1_INDEX]);
+
+   GetParamValue("variable_mod02", g_staticParams.variableModParameters.varModList[VMOD_2_INDEX]);
+
+   GetParamValue("variable_mod03", g_staticParams.variableModParameters.varModList[VMOD_3_INDEX]);
+
+   GetParamValue("variable_mod04", g_staticParams.variableModParameters.varModList[VMOD_4_INDEX]);
+
+   GetParamValue("variable_mod05", g_staticParams.variableModParameters.varModList[VMOD_5_INDEX]);
+
+   GetParamValue("variable_mod06", g_staticParams.variableModParameters.varModList[VMOD_6_INDEX]);
+
+   GetParamValue("variable_mod07", g_staticParams.variableModParameters.varModList[VMOD_7_INDEX]);
+
+   GetParamValue("variable_mod08", g_staticParams.variableModParameters.varModList[VMOD_8_INDEX]);
+
+   GetParamValue("variable_mod09", g_staticParams.variableModParameters.varModList[VMOD_9_INDEX]);
+
+   if (GetParamValue("max_variable_mods_in_peptide", iIntData))
+   {
+      if (iIntData > 0)
+      {
+         g_staticParams.variableModParameters.iMaxVarModPerPeptide = iIntData;
+      }
+   }
+
+   GetParamValue("require_variable_mod", g_staticParams.variableModParameters.bRequireVarMod);
+
+   GetParamValue("fragment_bin_tol", g_staticParams.tolerances.dFragmentBinSize);
+   if (g_staticParams.tolerances.dFragmentBinSize < 0.01)
+   {
+      g_staticParams.tolerances.dFragmentBinSize = 0.01;
+   }
+
+   GetParamValue("fragment_bin_offset", g_staticParams.tolerances.dFragmentBinStartOffset);
+
+   GetParamValue("peptide_mass_tolerance", g_staticParams.tolerances.dInputTolerance);
+
+   GetParamValue("precursor_tolerance_type", g_staticParams.tolerances.iMassToleranceType);
+   if ((g_staticParams.tolerances.iMassToleranceType < 0)
+         || (g_staticParams.tolerances.iMassToleranceType > 1))
+   {
+      g_staticParams.tolerances.iMassToleranceType = 0;
+   }
+
+   GetParamValue("peptide_mass_units", g_staticParams.tolerances.iMassToleranceUnits);
+   if ((g_staticParams.tolerances.iMassToleranceUnits < 0)
+         || (g_staticParams.tolerances.iMassToleranceUnits > 2))
+   {
+      g_staticParams.tolerances.iMassToleranceUnits = 0;  // 0=amu, 1=mmu, 2=ppm
+   }
+
+   GetParamValue("isotope_error", g_staticParams.tolerances.iIsotopeError);
+   if ((g_staticParams.tolerances.iIsotopeError < 0)
+         || (g_staticParams.tolerances.iIsotopeError > 2))
+   {
+      g_staticParams.tolerances.iIsotopeError = 0;
+   }
+
+   GetParamValue("num_output_lines", g_staticParams.options.iNumPeptideOutputLines);
+
+   GetParamValue("num_results", g_staticParams.options.iNumStored);
+
+   GetParamValue("remove_precursor_peak", g_staticParams.options.iRemovePrecursor);
+
+   GetParamValue("remove_precursor_tolerance", g_staticParams.options.dRemovePrecursorTol);
+
+   if (GetParamValue("clear_mz_range", doubleRangeData))
+   {
+      if ((doubleRangeData.dEnd >= doubleRangeData.dStart) && (doubleRangeData.dStart >= 0.0))
+      {
+         g_staticParams.options.clearMzRange.dStart = doubleRangeData.dStart;
+         g_staticParams.options.clearMzRange.dEnd = doubleRangeData.dEnd;
+      }
+   }
+
+   GetParamValue("print_expect_score", g_staticParams.options.bPrintExpectScore);
+
+   GetParamValue("output_sqtstream", g_staticParams.options.bOutputSqtStream);
+
+   GetParamValue("output_sqtfile", g_staticParams.options.bOutputSqtFile);
+
+   GetParamValue("output_txtfile", g_staticParams.options.bOutputTxtFile);
+
+   GetParamValue("output_pepxmlfile", g_staticParams.options.bOutputPepXMLFile);
+
+   GetParamValue("output_percolatorfile", g_staticParams.options.bOutputPercolatorFile);
+
+   GetParamValue("output_outfiles", g_staticParams.options.bOutputOutFiles);
+
+   GetParamValue("skip_researching", g_staticParams.options.bSkipAlreadyDone);
+
+   GetParamValue("add_Cterm_peptide", g_staticParams.staticModifications.dAddCterminusPeptide);
+
+   GetParamValue("add_Nterm_peptide", g_staticParams.staticModifications.dAddNterminusPeptide);
+
+   GetParamValue("add_Cterm_protein", g_staticParams.staticModifications.dAddCterminusProtein);
+
+   GetParamValue("add_Nterm_protein", g_staticParams.staticModifications.dAddNterminusProtein);
+
+   if (GetParamValue("add_G_glycine", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'G'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_A_alanine", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'A'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_S_serine", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'S'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_P_proline", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'P'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_V_valine", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'V'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_T_threonine", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'T'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_C_cysteine", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'C'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_L_leucine", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'L'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_I_isoleucine", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'I'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_N_asparagine", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'N'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_O_ornithine", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'O'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_D_aspartic_acid", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'D'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_Q_glutamine", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'Q'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_K_lysine", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'K'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_E_glutamic_acid", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'E'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_M_methionine", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'M'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_H_histidine", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'H'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_F_phenylalanine", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'F'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_R_arginine", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'R'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_Y_tyrosine", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'Y'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_W_tryptophan", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'W'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_B_user_amino_acid", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'B'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_J_user_amino_acid", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'J'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_U_user_amino_acid", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'U'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_X_user_amino_acid", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'X'] = dDoubleData;
+   }
+
+   if (GetParamValue("add_Z_user_amino_acid", dDoubleData))
+   {
+      g_staticParams.staticModifications.pdStaticMods[(int)'Z'] = dDoubleData;
+   }
+
+   GetParamValue("num_enzyme_termini", g_staticParams.options.iEnzymeTermini);
+   if ((g_staticParams.options.iEnzymeTermini != 1)
+         && (g_staticParams.options.iEnzymeTermini != 8)
+         && (g_staticParams.options.iEnzymeTermini != 9))
+   {
+      g_staticParams.options.iEnzymeTermini = 2;
+   }
+
+   if (GetParamValue("scan_range", intRangeData))
+   {
+      if ((intRangeData.iEnd >= intRangeData.iStart) && (intRangeData.iStart > 0))
+      {
+         g_staticParams.options.scanRange.iStart = intRangeData.iStart;
+         g_staticParams.options.scanRange.iEnd = intRangeData.iEnd;
+      }
+   }
+
+   if (GetParamValue("spectrum_batch_size", iIntData))
+   {
+      if (iIntData > 0)
+      {
+         g_staticParams.options.iSpectrumBatchSize = iIntData;
+      }
+   }
+
+   iIntData = 0;
+   if (GetParamValue("minimum_peaks", iIntData))
+   {
+      if (iIntData > 0)
+      {
+         g_staticParams.options.iMinPeaks = iIntData;
+      }
+   }
+
+   if (GetParamValue("override_charge", iIntData))
+   {
+      if (iIntData > 0)
+      {
+         g_staticParams.options.bOverrideCharge = iIntData;
+      }
+   }
+
+   if (GetParamValue("precursor_charge", intRangeData))
+   {
+      if ((intRangeData.iStart > 0) && (intRangeData.iEnd >= intRangeData.iStart))
+      {
+         g_staticParams.options.iStartCharge = intRangeData.iStart;
+         g_staticParams.options.iEndCharge = intRangeData.iEnd;
+      }
+   }
+
+   iIntData = 0;
+   if (GetParamValue("max_fragment_charge", iIntData))
+   {
+      if (iIntData > MAX_FRAGMENT_CHARGE)
+      {
+         iIntData = MAX_FRAGMENT_CHARGE;
+      }
+
+      if (iIntData > 0)
+      {
+         g_staticParams.options.iMaxFragmentCharge = iIntData;
+      }
+      // else will go to default value (3)
+   }
+
+   iIntData = 0;
+   if (GetParamValue("max_precursor_charge", iIntData))
+   {
+      if (iIntData > MAX_PRECURSOR_CHARGE)
+      {
+         iIntData = MAX_PRECURSOR_CHARGE;
+      }
+
+      if (iIntData > 0)
+      {
+         g_staticParams.options.iMaxPrecursorCharge = iIntData;
+      }
+      // else will go to default value (6)
+   }
+
+   if (GetParamValue("digest_mass_range", doubleRangeData))
+   {
+      if ((doubleRangeData.dEnd >= doubleRangeData.dStart) && (doubleRangeData.dStart >= 0.0))
+      {
+         g_staticParams.options.dPeptideMassLow = doubleRangeData.dStart;
+         g_staticParams.options.dPeptideMassHigh = doubleRangeData.dEnd;
+      }
+   }
+
+   if (GetParamValue("ms_level", iIntData))
+   {
+      if (iIntData == 3)
+      {
+         g_staticParams.options.iMSLevel = 3;
+      }
+      // else will go to default value (2)
+   }
+
+   if (GetParamValue("activation_method", strData))
+   {
+      strcpy(g_staticParams.options.szActivationMethod, strData.c_str());
+   }
+
+   GetParamValue("minimum_intensity", g_staticParams.options.dMinIntensity);
+   if (g_staticParams.options.dMinIntensity < 0.0)
+   {
+      g_staticParams.options.dMinIntensity = 0.0;
+   }
+
+   GetParamValue("decoy_search", g_staticParams.options.iDecoySearch);
+   if ((g_staticParams.options.iDecoySearch < 0) || (g_staticParams.options.iDecoySearch > 2))
+   {
+      g_staticParams.options.iDecoySearch = 0;
+   }
+
+   // Set dInverseBinWidth to its inverse in order to use a multiply instead of divide in BIN macro.
+   // Safe to divide by dFragmentBinSize because of check earlier where minimum value is 0.01.
+   g_staticParams.dInverseBinWidth = 1.0 /g_staticParams.tolerances.dFragmentBinSize;
+   g_staticParams.dOneMinusBinOffset = 1.0 - g_staticParams.tolerances.dFragmentBinStartOffset;
+
+   // Set masses to either average or monoisotopic.
+   CometMassSpecUtils::AssignMass(g_staticParams.massUtility.pdAAMassParent,
+                                  g_staticParams.massUtility.bMonoMassesParent,
+                                  &g_staticParams.massUtility.dOH2parent);
+
+   CometMassSpecUtils::AssignMass(g_staticParams.massUtility.pdAAMassFragment,
+                                  g_staticParams.massUtility.bMonoMassesFragment,
+                                  &g_staticParams.massUtility.dOH2fragment);
+
+   g_staticParams.massUtility.dCO = g_staticParams.massUtility.pdAAMassFragment[(int)'c']
+            + g_staticParams.massUtility.pdAAMassFragment[(int)'o'];
+
+   g_staticParams.massUtility.dH2O = g_staticParams.massUtility.pdAAMassFragment[(int)'h']
+            + g_staticParams.massUtility.pdAAMassFragment[(int)'h']
+            + g_staticParams.massUtility.pdAAMassFragment[(int)'o'];
+
+   g_staticParams.massUtility.dNH3 = g_staticParams.massUtility.pdAAMassFragment[(int)'n']
+            + g_staticParams.massUtility.pdAAMassFragment[(int)'h']
+            + g_staticParams.massUtility.pdAAMassFragment[(int)'h']
+            + g_staticParams.massUtility.pdAAMassFragment[(int)'h'];
+
+   g_staticParams.massUtility.dNH2 = g_staticParams.massUtility.pdAAMassFragment[(int)'n']
+            + g_staticParams.massUtility.pdAAMassFragment[(int)'h']
+            + g_staticParams.massUtility.pdAAMassFragment[(int)'h'];
+
+   g_staticParams.massUtility.dCOminusH2 = g_staticParams.massUtility.dCO
+            - g_staticParams.massUtility.pdAAMassFragment[(int)'h']
+            - g_staticParams.massUtility.pdAAMassFragment[(int)'h'];
+
+   GetHostName();
+
+   // If # threads not specified, poll system to get # threads to launch.
+   if (g_staticParams.options.iNumThreads <= 0)
+   {
+      int iNumCPUCores;
+#ifdef _WIN32
+      SYSTEM_INFO sysinfo;
+      GetSystemInfo( &sysinfo );
+      iNumCPUCores = sysinfo.dwNumberOfProcessors;
+
+      // if user specifies a negative # threads, subtract this from # cores
+      if (g_staticParams.options.iNumThreads < 0)
+         g_staticParams.options.iNumThreads = iNumCPUCores + g_staticParams.options.iNumThreads;
+      else
+         g_staticParams.options.iNumThreads = iNumCPUCores;
+#else
+      iNumCPUCores= sysconf( _SC_NPROCESSORS_ONLN );
+
+      if (g_staticParams.options.iNumThreads < 0)
+         g_staticParams.options.iNumThreads = iNumCPUCores + g_staticParams.options.iNumThreads;
+      else
+         g_staticParams.options.iNumThreads = iNumCPUCores;
+
+      // if set, use the environment variable NSLOTS which is defined in the qsub command
+      const char * nSlots = ::getenv("NSLOTS");
+      if (nSlots != NULL)
+      {
+         int detectedThreads = atoi(nSlots);
+         if (detectedThreads > 0)
+         {
+            g_staticParams.options.iNumThreads = detectedThreads;
+         }
+      }
+#endif
+      if (g_staticParams.options.iNumThreads < 1 || g_staticParams.options.iNumThreads > MAX_THREADS)
+         g_staticParams.options.iNumThreads = 2;  // Default to 2 threads.
+   }
+
+   // Set masses to either average or monoisotopic.
+   CometMassSpecUtils::AssignMass(g_staticParams.massUtility.pdAAMassParent,
+                                  g_staticParams.massUtility.bMonoMassesParent,
+                                  &g_staticParams.massUtility.dOH2parent);
+
+   CometMassSpecUtils::AssignMass(g_staticParams.massUtility.pdAAMassFragment,
+                                  g_staticParams.massUtility.bMonoMassesFragment,
+                                  &g_staticParams.massUtility.dOH2fragment);
+
+   g_staticParams.massUtility.dCO = g_staticParams.massUtility.pdAAMassFragment[(int)'c']
+            + g_staticParams.massUtility.pdAAMassFragment[(int)'o'];
+
+   g_staticParams.massUtility.dH2O = g_staticParams.massUtility.pdAAMassFragment[(int)'h']
+            + g_staticParams.massUtility.pdAAMassFragment[(int)'h']
+            + g_staticParams.massUtility.pdAAMassFragment[(int)'o'];
+
+   g_staticParams.massUtility.dNH3 = g_staticParams.massUtility.pdAAMassFragment[(int)'n']
+            + g_staticParams.massUtility.pdAAMassFragment[(int)'h']
+            + g_staticParams.massUtility.pdAAMassFragment[(int)'h']
+            + g_staticParams.massUtility.pdAAMassFragment[(int)'h'];
+
+   g_staticParams.massUtility.dNH2 = g_staticParams.massUtility.pdAAMassFragment[(int)'n']
+            + g_staticParams.massUtility.pdAAMassFragment[(int)'h']
+            + g_staticParams.massUtility.pdAAMassFragment[(int)'h'];
+
+   g_staticParams.massUtility.dCOminusH2 = g_staticParams.massUtility.dCO
+            - g_staticParams.massUtility.pdAAMassFragment[(int)'h']
+            - g_staticParams.massUtility.pdAAMassFragment[(int)'h'];
+
+   GetParamValue("[COMET_ENZYME_INFO]", g_staticParams.enzymeInformation);
+   if (!strncmp(g_staticParams.enzymeInformation.szSearchEnzymeBreakAA, "-", 1)
+         && !strncmp(g_staticParams.enzymeInformation.szSearchEnzymeNoBreakAA, "-", 1))
+   {
+      g_staticParams.options.bNoEnzymeSelected = 1;
+   }
+   else
+   {
+      g_staticParams.options.bNoEnzymeSelected = 0;
+   }
+
+   GetParamValue("allowed_missed_cleavage", g_staticParams.enzymeInformation.iAllowedMissedCleavage);
+   if (g_staticParams.enzymeInformation.iAllowedMissedCleavage < 0)
+   {
+      g_staticParams.enzymeInformation.iAllowedMissedCleavage = 0;
+   }
+
+   // Load ion series to consider, useA, useB, useY are for neutral losses.
+   g_staticParams.ionInformation.iNumIonSeriesUsed = 0;
+   for (int i=0; i<6; i++)
+   {
+      if (g_staticParams.ionInformation.iIonVal[i] > 0)
+         g_staticParams.ionInformation.piSelectedIonSeries[g_staticParams.ionInformation.iNumIonSeriesUsed++] = i;
+   }
+
+   // Variable mod search for AAs listed in szVarModChar.
+   g_staticParams.szMod[0] = '\0';
+   g_staticParams.variableModParameters.bVarModSearch = false;
+   g_staticParams.variableModParameters.bBinaryModSearch = false;
+   g_staticParams.variableModParameters.bRequireVarMod = false;
+
+   for (int i=0; i<VMODS; i++)
+   {
+      if (!isEqual(g_staticParams.variableModParameters.varModList[i].dVarModMass, 0.0)
+            && (g_staticParams.variableModParameters.varModList[i].szVarModChar[0]!='\0'))
+      {
+         sprintf(g_staticParams.szMod + strlen(g_staticParams.szMod), "(%s%c %+0.6f) ",
+               g_staticParams.variableModParameters.varModList[i].szVarModChar,
+               g_staticParams.variableModParameters.cModCode[i],
+               g_staticParams.variableModParameters.varModList[i].dVarModMass);
+
+         g_staticParams.variableModParameters.bVarModSearch = true;
+
+         if (g_staticParams.variableModParameters.varModList[i].iBinaryMod)
+            g_staticParams.variableModParameters.bBinaryModSearch = true;
+
+         if (g_staticParams.variableModParameters.varModList[i].bRequireThisMod)
+            g_staticParams.variableModParameters.bRequireVarMod = true;
+
+      }
+   }
+
+   // Do Sp scoring after search based on how many lines to print out.
+   if (g_staticParams.options.iNumStored < 1)
+      g_staticParams.options.iNumStored = 1;
+
+   if (g_staticParams.options.iNumPeptideOutputLines > g_staticParams.options.iNumStored)
+      g_staticParams.options.iNumPeptideOutputLines = g_staticParams.options.iNumStored;
+   else if (g_staticParams.options.iNumPeptideOutputLines < 1)
+      g_staticParams.options.iNumPeptideOutputLines = 1;
+
+   if (g_staticParams.peaksInformation.iNumMatchPeaks > 5)
+      g_staticParams.peaksInformation.iNumMatchPeaks = 5;
+
+   // FIX how to deal with term mod on both peptide and protein?
+   if (!isEqual(g_staticParams.staticModifications.dAddCterminusPeptide, 0.0))
+   {
+      sprintf(g_staticParams.szMod + strlen(g_staticParams.szMod), "+ct=%0.6f ",
+            g_staticParams.staticModifications.dAddCterminusPeptide);
+   }
+
+   if (!isEqual(g_staticParams.staticModifications.dAddNterminusPeptide, 0.0))
+   {
+      sprintf(g_staticParams.szMod + strlen(g_staticParams.szMod), "+nt=%0.6f ",
+            g_staticParams.staticModifications.dAddNterminusPeptide);
+   }
+
+   if (!isEqual(g_staticParams.staticModifications.dAddCterminusProtein, 0.0))
+   {
+      sprintf(g_staticParams.szMod + strlen(g_staticParams.szMod), "+ctprot=%0.6f ",
+            g_staticParams.staticModifications.dAddCterminusProtein);
+   }
+
+   if (!isEqual(g_staticParams.staticModifications.dAddNterminusProtein, 0.0))
+   {
+      sprintf(g_staticParams.szMod + strlen(g_staticParams.szMod), "+ntprot=%0.6f ",
+            g_staticParams.staticModifications.dAddNterminusProtein);
+   }
+
+   for (int i=65; i<=90; i++)  // 65-90 represents upper case letters in ASCII
+   {
+      if (!isEqual(g_staticParams.staticModifications.pdStaticMods[i], 0.0))
+      {
+         sprintf(g_staticParams.szMod + strlen(g_staticParams.szMod), "%c=%0.6f ", i,
+               g_staticParams.massUtility.pdAAMassParent[i] += g_staticParams.staticModifications.pdStaticMods[i]);
+         g_staticParams.massUtility.pdAAMassFragment[i] += g_staticParams.staticModifications.pdStaticMods[i];
+      }
+      else if (i=='B' || i=='J' || i=='X' || i=='Z')
+      {
+         g_staticParams.massUtility.pdAAMassParent[i] = 999999.;
+         g_staticParams.massUtility.pdAAMassFragment[i] = 999999.;
+      }
+   }
+
+   // Print out enzyme name to g_staticParams.szMod.
+   if (!g_staticParams.options.bNoEnzymeSelected)
+   {
+      char szTmp[4];
+
+      szTmp[0]='\0';
+      if (g_staticParams.options.iEnzymeTermini != 2)
+         sprintf(szTmp, ":%d", g_staticParams.options.iEnzymeTermini);
+
+      sprintf(g_staticParams.szMod + strlen(g_staticParams.szMod), "Enzyme:%s (%d%s)",
+            g_staticParams.enzymeInformation.szSearchEnzymeName,
+            g_staticParams.enzymeInformation.iAllowedMissedCleavage,
+            szTmp);
+   }
+   else
+   {
+      sprintf(g_staticParams.szMod + strlen(g_staticParams.szMod), "Enzyme:%s",
+            g_staticParams.enzymeInformation.szSearchEnzymeName);
+   }
+
+   if (g_staticParams.tolerances.dFragmentBinStartOffset < 0.0
+         || g_staticParams.tolerances.dFragmentBinStartOffset >1.0)
+   {
+      char szErrorMsg[256];
+      sprintf(szErrorMsg,  " Error - bin offset %f must between 0.0 and 1.0\n",
+            g_staticParams.tolerances.dFragmentBinStartOffset);
+      string strErrorMsg(szErrorMsg);
+      g_cometStatus.SetStatus(CometResult_Failed, strErrorMsg);
+      logerr(szErrorMsg);
+      return false;
+   }
+
+   if (!g_staticParams.options.bOutputOutFiles)
+   {
+      g_staticParams.options.bSkipAlreadyDone = 0;
+   }
+
+   g_staticParams.precalcMasses.dNtermProton = g_staticParams.staticModifications.dAddNterminusPeptide
+      + PROTON_MASS;
+
+   g_staticParams.precalcMasses.dCtermOH2Proton = g_staticParams.staticModifications.dAddCterminusPeptide
+      + g_staticParams.massUtility.dOH2fragment
+      + PROTON_MASS;
+
+   g_staticParams.precalcMasses.dOH2ProtonCtermNterm = g_staticParams.massUtility.dOH2parent
+      + PROTON_MASS
+      + g_staticParams.staticModifications.dAddCterminusPeptide
+      + g_staticParams.staticModifications.dAddNterminusPeptide;
+
+   return true;
+}
+
+void CometSearchManager::AddInputFiles(vector<InputFileInfo*> &pvInputFiles)
+{
+   int numInputFiles = pvInputFiles.size();
+   for (int i = 0; i < numInputFiles; i++)
+   {
+      g_pvInputFiles.push_back(pvInputFiles.at(i));
+   }
+}
+
+void CometSearchManager::SetOutputFileBaseName(const char *pszBaseName)
+{
+   strcpy(g_staticParams.inputFile.szBaseName, pszBaseName);
+}
+
+std::map<std::string, CometParam*>& CometSearchManager::GetParamsMap()
+{
+   return _mapStaticParams;
+}
+
+void CometSearchManager::SetParam(const string &name, const string &strValue, const string& value)
+{
+   CometParam *pParam = new TypedCometParam<string>(CometParamType_String, strValue, value);
+   pair<map<string, CometParam*>::iterator,bool> ret = _mapStaticParams.insert(std::pair<std::string, CometParam*>(name, pParam));
+   if (false == ret.second)
+   {
+      _mapStaticParams.erase(name);
+      _mapStaticParams.insert(std::pair<std::string, CometParam*>(name, pParam));
+   }
+}
+
+bool CometSearchManager::GetParamValue(const string &name, string& value)
+{
+   std::map<string, CometParam*>::iterator it;
+   it = _mapStaticParams.find(name);
+   if (it == _mapStaticParams.end())
+   {
+      return false;
+   }
+
+   TypedCometParam<string> *pParam = static_cast<TypedCometParam<string>*>(it->second);
+   value = pParam->GetValue();
+   return true;
+}
+
+void CometSearchManager::SetParam(const std::string &name, const string &strValue, const int &value)
+{
+   CometParam *pParam = new TypedCometParam<int>(CometParamType_Int, strValue, value);
+   pair<map<string, CometParam*>::iterator,bool> ret = _mapStaticParams.insert(std::pair<std::string, CometParam*>(name, pParam));
+   if (false == ret.second)
+   {
+      _mapStaticParams.erase(name);
+      _mapStaticParams.insert(std::pair<std::string, CometParam*>(name, pParam));
+   }
+}
+
+bool CometSearchManager::GetParamValue(const string &name, int& value)
+{
+   std::map<string, CometParam*>::iterator it;
+   it = _mapStaticParams.find(name);
+   if (it == _mapStaticParams.end())
+   {
+      return false;
+   }
+
+   TypedCometParam<int> *pParam = static_cast<TypedCometParam<int>*>(it->second);
+   value = pParam->GetValue();
+   return true;
+}
+
+void CometSearchManager::SetParam(const string &name, const string &strValue, const double &value)
+{
+   CometParam *pParam = new TypedCometParam<double>(CometParamType_Double, strValue, value);
+   pair<map<string, CometParam*>::iterator,bool> ret = _mapStaticParams.insert(std::pair<std::string, CometParam*>(name, pParam));
+   if (false == ret.second)
+   {
+      _mapStaticParams.erase(name);
+      _mapStaticParams.insert(std::pair<std::string, CometParam*>(name, pParam));
+   }
+}
+
+bool CometSearchManager::GetParamValue(const string &name, double& value)
+{
+   std::map<string, CometParam*>::iterator it;
+   it = _mapStaticParams.find(name);
+   if (it == _mapStaticParams.end())
+   {
+      return false;
+   }
+
+   TypedCometParam<double> *pParam = static_cast<TypedCometParam<double>*>(it->second);
+   value = pParam->GetValue();
+   return true;
+}
+
+void CometSearchManager::SetParam(const string &name, const string &strValue, const VarMods &value)
+{
+   CometParam *pParam = new TypedCometParam<VarMods>(CometParamType_VarMods, strValue, value);
+   pair<map<string, CometParam*>::iterator,bool> ret = _mapStaticParams.insert(std::pair<std::string, CometParam*>(name, pParam));
+   if (false == ret.second)
+   {
+      _mapStaticParams.erase(name);
+      _mapStaticParams.insert(std::pair<std::string, CometParam*>(name, pParam));
+   }
+}
+
+bool CometSearchManager::GetParamValue(const string &name, VarMods & value)
+{
+   std::map<string, CometParam*>::iterator it;
+   it = _mapStaticParams.find(name);
+   if (it == _mapStaticParams.end())
+   {
+      return false;
+   }
+
+   TypedCometParam<VarMods> *pParam = static_cast<TypedCometParam<VarMods>*>(it->second);
+   value = pParam->GetValue();
+   return true;
+}
+
+void CometSearchManager::SetParam(const string &name, const string &strValue, const DoubleRange &value)
+{
+   CometParam *pParam = new TypedCometParam<DoubleRange>(CometParamType_DoubleRange, strValue, value);
+   pair<map<string, CometParam*>::iterator,bool> ret = _mapStaticParams.insert(std::pair<std::string, CometParam*>(name, pParam));
+   if (false == ret.second)
+   {
+      _mapStaticParams.erase(name);
+      _mapStaticParams.insert(std::pair<std::string, CometParam*>(name, pParam));
+   }
+}
+
+bool CometSearchManager::GetParamValue(const string &name, DoubleRange &value)
+{
+   std::map<string, CometParam*>::iterator it;
+   it = _mapStaticParams.find(name);
+   if (it == _mapStaticParams.end())
+   {
+      return false;
+   }
+
+   TypedCometParam<DoubleRange> *pParam = static_cast<TypedCometParam<DoubleRange>*>(it->second);
+   value = pParam->GetValue();
+   return true;
+}
+
+void CometSearchManager::SetParam(const string &name, const string &strValue, const IntRange &value)
+{
+   CometParam *pParam = new TypedCometParam<IntRange>(CometParamType_IntRange, strValue, value);
+   pair<map<string, CometParam*>::iterator,bool> ret = _mapStaticParams.insert(std::pair<std::string, CometParam*>(name, pParam));
+   if (false == ret.second)
+   {
+      _mapStaticParams.erase(name);
+      _mapStaticParams.insert(std::pair<std::string, CometParam*>(name, pParam));
+   }
+}
+
+bool CometSearchManager::GetParamValue(const string &name, IntRange &value)
+{
+   std::map<string, CometParam*>::iterator it;
+   it = _mapStaticParams.find(name);
+   if (it == _mapStaticParams.end())
+   {
+      return false;
+   }
+
+   TypedCometParam<IntRange> *pParam = static_cast<TypedCometParam<IntRange>*>(it->second);
+   value = pParam->GetValue();
+   return true;
+}
+
+void CometSearchManager::SetParam(const string &name, const string &strValue, const EnzymeInfo &value)
+{
+   CometParam *pParam = new TypedCometParam<EnzymeInfo>(CometParamType_EnzymeInfo, strValue, value);
+   pair<map<string, CometParam*>::iterator,bool> ret = _mapStaticParams.insert(std::pair<std::string, CometParam*>(name, pParam));
+   if (false == ret.second)
+   {
+      _mapStaticParams.erase(name);
+      _mapStaticParams.insert(std::pair<std::string, CometParam*>(name, pParam));
+   }
+}
+
+bool CometSearchManager::GetParamValue(const string &name, EnzymeInfo &value)
+{
+   std::map<string, CometParam*>::iterator it;
+   it = _mapStaticParams.find(name);
+   if (it == _mapStaticParams.end())
+   {
+      return false;
+   }
+
+   TypedCometParam<EnzymeInfo> *pParam = static_cast<TypedCometParam<EnzymeInfo>*>(it->second);
+   value = pParam->GetValue();
+   return true;
+}
+
+void CometSearchManager::SetParam(const string &name, const string &strValue, const vector<double> &value)
+{
+   CometParam *pParam = new TypedCometParam< vector<double> >(CometParamType_DoubleVector, strValue, value);
+   pair<map<string, CometParam*>::iterator,bool> ret = _mapStaticParams.insert(std::pair<std::string, CometParam*>(name, pParam));
+   if (false == ret.second)
+   {
+      _mapStaticParams.erase(name);
+      _mapStaticParams.insert(std::pair<std::string, CometParam*>(name, pParam));
+   }
+}
+
+bool CometSearchManager::GetParamValue(const string &name,  vector<double> &value)
+{
+   std::map<string, CometParam*>::iterator it;
+   it = _mapStaticParams.find(name);
+   if (it == _mapStaticParams.end())
+   {
+      return false;
+   }
+
+   TypedCometParam< vector<double> > *pParam = static_cast<TypedCometParam< vector<double> >*>(it->second);
+   value = pParam->GetValue();
+
+   return true;
+}
+
+bool CometSearchManager::IsSearchError()
+{
+    return g_cometStatus.IsError();
+}
+
+void CometSearchManager::GetStatusMessage(string &strStatusMsg)
+{
+   g_cometStatus.GetStatusMsg(strStatusMsg);
+}
+
+bool CometSearchManager::IsValidCometVersion(const string &version)
+{
+    // Major version number must match to current binary
+    const char *pszCometVersion = version.c_str();
+    return strstr(comet_version, pszCometVersion);
+}
+
+void CometSearchManager::CancelSearch()
+{
+    g_cometStatus.SetStatus(CometResult_Cancelled, string("Search was cancelled."));
+}
+
+bool CometSearchManager::IsCancelSearch()
+{
+    return g_cometStatus.IsCancel();
+}
+
+void CometSearchManager::ResetSearchStatus()
+{
+    g_cometStatus.ResetStatus();
+}
+
+bool CometSearchManager::DoSearch()
+{
+   char szOut[256];
+
+   if (!InitializeStaticParams())
+   {
+      return false;
+   }
+
+   PrintParameters();
+
+   if (!ValidateOutputFormat())
+   {
+      return false;
+   }
+
+   if (!ValidateSequenceDatabaseFile())
+   {
+      return false;
+   }
+
+   if (!ValidateScanRange())
+   {
+      return false;
+   }
+
+   bool bSucceeded = true;
+
+   if (!g_staticParams.options.bOutputSqtStream)
+   {
+      sprintf(szOut, " Comet version \"%s\"\n\n", comet_version);
+      logout(szOut);
+      fflush(stdout);
+   }
+
+   for (int i=0; i<(int)g_pvInputFiles.size(); i++)
+   {
+      bSucceeded = UpdateInputFile(g_pvInputFiles.at(i));
+      if (!bSucceeded)
+      {
+         break;
+      }
+
+      time_t tStartTime;
+      time(&tStartTime);
+      strftime(g_staticParams.szDate, 26, "%m/%d/%Y, %I:%M:%S %p", localtime(&tStartTime));
+
+      if (!g_staticParams.options.bOutputSqtStream)
+      {
+         sprintf(szOut, " Search start:  %s\n", g_staticParams.szDate);
+         sprintf(szOut+strlen(szOut), " - Input file: %s\n", g_staticParams.inputFile.szFileName);
+         logout(szOut);
+         fflush(stdout);
+      }
+
+      int iFirstScan = g_staticParams.inputFile.iFirstScan;             // First scan to search specified by user.
+      int iLastScan = g_staticParams.inputFile.iLastScan;               // Last scan to search specified by user.
+      int iPercentStart = 0;                                            // percentage within input file for start scan of batch
+      int iPercentEnd = 0;                                              // percentage within input file for end scan of batch
+      int iAnalysisType = g_staticParams.inputFile.iAnalysisType;       // 1=dta (retired),
+                                                                        // 2=specific scan,
+                                                                        // 3=specific scan + charge,
+                                                                        // 4=scan range,
+                                                                        // 5=entire file
+
+      // For SQT & pepXML output file, check if they can be written to before doing anything else.
+      FILE *fpout_sqt=NULL;
+      FILE *fpoutd_sqt=NULL;
+      FILE *fpout_pepxml=NULL;
+      FILE *fpoutd_pepxml=NULL;
+      FILE *fpout_percolator=NULL;
+      FILE *fpout_txt=NULL;
+      FILE *fpoutd_txt=NULL;
+
+      char szOutputSQT[SIZE_FILE];
+      char szOutputDecoySQT[SIZE_FILE];
+      char szOutputPepXML[SIZE_FILE];
+      char szOutputDecoyPepXML[SIZE_FILE];
+      char szOutputPercolator[SIZE_FILE];
+      char szOutputTxt[SIZE_FILE];
+      char szOutputDecoyTxt[SIZE_FILE];
+
+      if (g_staticParams.options.bOutputSqtFile)
+      {
+         if (iAnalysisType == AnalysisType_EntireFile)
+         {
+#ifdef CRUX
+            sprintf(szOutputSQT, "%s%s.target.sqt",
+                  g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix);
+#else
+            sprintf(szOutputSQT, "%s%s.sqt",
+                  g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix);
+#endif
+         }
+         else
+         {
+#ifdef CRUX
+            sprintf(szOutputSQT, "%s%s.%d-%d.target.sqt",
+                  g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix, iFirstScan, iLastScan);
+#else
+            sprintf(szOutputSQT, "%s%s.%d-%d.sqt",
+                  g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix, iFirstScan, iLastScan);
+#endif
+         }
+
+         if ((fpout_sqt = fopen(szOutputSQT, "w")) == NULL)
+         {
+            char szErrorMsg[256];
+            sprintf(szErrorMsg,  " Error - cannot write to file \"%s\".\n",  szOutputSQT);
+            string strErrorMsg(szErrorMsg);
+            g_cometStatus.SetStatus(CometResult_Failed, strErrorMsg);
+            logerr(szErrorMsg);
+            bSucceeded = false;
+         }
+
+         CometWriteSqt::PrintSqtHeader(fpout_sqt, *this);
+
+         if (bSucceeded && (g_staticParams.options.iDecoySearch == 2))
+         {
+            if (iAnalysisType == AnalysisType_EntireFile)
+            {
+               sprintf(szOutputDecoySQT, "%s%s.decoy.sqt",
+                     g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix);
+            }
+            else
+            {
+               sprintf(szOutputDecoySQT, "%s%s.%d-%d.decoy.sqt",
+                     g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix, iFirstScan, iLastScan);
+            }
+
+            if ((fpoutd_sqt = fopen(szOutputDecoySQT, "w")) == NULL)
+            {
+               char szErrorMsg[256];
+               sprintf(szErrorMsg,  " Error - cannot write to decoy file \"%s\".\n",  szOutputDecoySQT);
+               string strErrorMsg(szErrorMsg);
+               g_cometStatus.SetStatus(CometResult_Failed, strErrorMsg);
+               logerr(szErrorMsg);
+               bSucceeded = false;
+            }
+
+            CometWriteSqt::PrintSqtHeader(fpoutd_sqt, *this);
+         }
+      }
+
+      if (bSucceeded && g_staticParams.options.bOutputTxtFile)
+      {
+         if (iAnalysisType == AnalysisType_EntireFile)
+         {
+#ifdef CRUX
+            sprintf(szOutputTxt, "%s%s.target.txt",
+                  g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix);
+#else
+            sprintf(szOutputTxt, "%s%s.txt",
+                  g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix);
+#endif
+         }
+         else
+         {
+#ifdef CRUX
+            sprintf(szOutputTxt, "%s%s.%d-%d.target.txt",
+                  g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix, iFirstScan, iLastScan);
+#else
+            sprintf(szOutputTxt, "%s%s.%d-%d.txt",
+                  g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix, iFirstScan, iLastScan);
+#endif
+         }
+
+         if ((fpout_txt = fopen(szOutputTxt, "w")) == NULL)
+         {
+            char szErrorMsg[256];
+            sprintf(szErrorMsg,  " Error - cannot write to file \"%s\".\n",  szOutputTxt);
+            string strErrorMsg(szErrorMsg);
+            g_cometStatus.SetStatus(CometResult_Failed, strErrorMsg);
+            logerr(szErrorMsg);
+            bSucceeded = false;
+         }
+
+         CometWriteTxt::PrintTxtHeader(fpout_txt);
+
+         if (bSucceeded && (g_staticParams.options.iDecoySearch == 2))
+         {
+            if (iAnalysisType == AnalysisType_EntireFile)
+            {
+               sprintf(szOutputDecoyTxt, "%s%s.decoy.txt",
+                     g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix);
+            }
+            else
+            {
+               sprintf(szOutputDecoyTxt, "%s%s.%d-%d.decoy.txt",
+                     g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix, iFirstScan, iLastScan);
+            }
+
+            if ((fpoutd_txt= fopen(szOutputDecoyTxt, "w")) == NULL)
+            {
+               char szErrorMsg[256];
+               sprintf(szErrorMsg,  " Error - cannot write to decoy file \"%s\".\n",  szOutputDecoyTxt);
+               string strErrorMsg(szErrorMsg);
+               g_cometStatus.SetStatus(CometResult_Failed, strErrorMsg);
+               logerr(szErrorMsg);
+               bSucceeded = false;
+            }
+
+            CometWriteTxt::PrintTxtHeader(fpoutd_txt);
+         }
+      }
+
+      if (bSucceeded && g_staticParams.options.bOutputPepXMLFile)
+      {
+         if (iAnalysisType == AnalysisType_EntireFile)
+         {
+#ifdef CRUX
+            sprintf(szOutputPepXML, "%s%s.target.pep.xml",
+                  g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix);
+#else
+            sprintf(szOutputPepXML, "%s%s.pep.xml",
+                  g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix);
+#endif
+         }
+         else
+         {
+#ifdef CRUX
+            sprintf(szOutputPepXML, "%s%s.%d-%d.target.pep.xml",
+                  g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix, iFirstScan, iLastScan);
+#else
+            sprintf(szOutputPepXML, "%s%s.%d-%d.pep.xml",
+                  g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix, iFirstScan, iLastScan);
+#endif
+         }
+
+         if ((fpout_pepxml = fopen(szOutputPepXML, "w")) == NULL)
+         {
+            char szErrorMsg[256];
+            sprintf(szErrorMsg,  " Error - cannot write to file \"%s\".\n",  szOutputPepXML);
+            string strErrorMsg(szErrorMsg);
+            g_cometStatus.SetStatus(CometResult_Failed, strErrorMsg);
+            logerr(szErrorMsg);
+            bSucceeded = false;
+         }
+
+         if (bSucceeded)
+         {
+            bSucceeded = CometWritePepXML::WritePepXMLHeader(fpout_pepxml, *this);
+         }
+
+         if (bSucceeded && (g_staticParams.options.iDecoySearch == 2))
+         {
+            if (iAnalysisType == AnalysisType_EntireFile)
+            {
+               sprintf(szOutputDecoyPepXML, "%s%s.decoy.pep.xml",
+                     g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix);
+            }
+            else
+            {
+               sprintf(szOutputDecoyPepXML, "%s%s.%d-%d.decoy.pep.xml",
+                     g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix, iFirstScan, iLastScan);
+            }
+
+            if ((fpoutd_pepxml = fopen(szOutputDecoyPepXML, "w")) == NULL)
+            {
+               char szErrorMsg[256];
+               sprintf(szErrorMsg,  " Error - cannot write to decoy file \"%s\".\n",  szOutputDecoyPepXML);
+               string strErrorMsg(szErrorMsg);
+               g_cometStatus.SetStatus(CometResult_Failed, strErrorMsg);
+               logerr(szErrorMsg);
+               bSucceeded = false;
+            }
+
+            if (bSucceeded)
+            {
+               bSucceeded = CometWritePepXML::WritePepXMLHeader(fpoutd_pepxml, *this);
+            }
+         }
+      }
+
+      if (bSucceeded && g_staticParams.options.bOutputPercolatorFile)
+      {
+         if (iAnalysisType == AnalysisType_EntireFile)
+         {
+#ifdef CRUX
+            sprintf(szOutputPercolator, "%s%s.target.pin",
+#else
+            sprintf(szOutputPercolator, "%s%s.pin",
+#endif
+                  g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix);
+         }
+         else
+         {
+#ifdef CRUX
+            sprintf(szOutputPercolator, "%s%s.%d-%d.target.pin",
+#else
+            sprintf(szOutputPercolator, "%s%s.%d-%d.pin",
+#endif
+                  g_staticParams.inputFile.szBaseName, g_staticParams.szOutputSuffix, iFirstScan, iLastScan);
+         }
+
+         if ((fpout_percolator = fopen(szOutputPercolator, "w")) == NULL)
+         {
+            char szErrorMsg[256];
+            sprintf(szErrorMsg,  " Error - cannot write to file \"%s\".\n",  szOutputPercolator);
+            string strErrorMsg(szErrorMsg);
+            g_cometStatus.SetStatus(CometResult_Failed, strErrorMsg);
+            logerr(szErrorMsg);
+            bSucceeded = false;
+         }
+
+         if (bSucceeded)
+         {
+            // We need knowledge of max charge state in all searches
+            // here in order to write the featureDescription header
+
+            CometWritePercolator::WritePercolatorHeader(fpout_percolator);
+         }
+      }
+
+      if (bSucceeded)
+      {
+         //MH: Allocate memory shared by threads during spectral processing.
+         bSucceeded = CometPreprocess::AllocateMemory(g_staticParams.options.iNumThreads);
+         if (!bSucceeded)
+         {
+            break;
+         }
+
+         // Allocate memory shared by threads during search
+         bSucceeded = CometSearch::AllocateMemory(g_staticParams.options.iNumThreads);
+         if (!bSucceeded)
+         {
+            break;
+         }
+
+         // For file access using MSToolkit.
+         MSReader mstReader;
+
+         // We want to read only MS2/MS3 scans.
+         SetMSLevelFilter(mstReader);
+
+         int iTotalSpectraSearched = 0;
+
+         // We need to reset some of the static variables in-between input files
+         CometPreprocess::Reset();
+
+         int iBatchNum = 0;
+         while (!CometPreprocess::DoneProcessingAllSpectra()) // Loop through iMaxSpectraPerSearch
+         {
+            iBatchNum++;
+
+#ifdef PERF_DEBUG
+            time_t tTotalSearchStartTime;
+            time_t tTotalSearchEndTime;
+            time_t tLoadAndPreprocessSpectraStartTime;
+            time_t tLoadAndPreprocessSpectraEndTime;
+            time_t tRunSearchStartTime;
+            time_t tRunSearchEndTime;
+            time_t tPostAnalysisStartTime;
+            time_t tPostAnalysisEndTime;
+
+            char szTimeBuffer[32];
+            szTimeBuffer[0] = '\0';
+#endif
+
+            // Load and preprocess all the spectra.
+            if (!g_staticParams.options.bOutputSqtStream)
+            {
+               logout("   - Load spectra:");
+
+#ifdef PERF_DEBUG
+               char szOut[128];
+               time(&tLoadAndPreprocessSpectraStartTime);
+               strftime(szTimeBuffer, 26, "%m/%d/%Y, %I:%M:%S %p", localtime(&tLoadAndPreprocessSpectraStartTime));
+               sprintf(szOut, " - Start LoadAndPreprocessSpectra:  %s\n", szTimeBuffer);
+               logout(szOut);
+#endif
+
+               fflush(stdout);
+            }
+
+            g_cometStatus.SetStatusMsg(string("Loading and processing input spectra"));
+
+            // IMPORTANT: From this point onwards, because we've loaded some
+            // spectra, we MUST "goto cleanup_results" before exiting the loop,
+            // or we will create a memory leak!
+            bSucceeded = CometPreprocess::LoadAndPreprocessSpectra(mstReader,
+                iFirstScan, iLastScan, iAnalysisType,
+                g_staticParams.options.iNumThreads,  // min # threads
+                g_staticParams.options.iNumThreads); // max # threads
+            if (!bSucceeded)
+            {
+               goto cleanup_results;
+            }
+
+            iPercentStart = iPercentEnd;
+            iPercentEnd = mstReader.getPercent();
+
+#ifdef PERF_DEBUG
+            if (!g_staticParams.options.bOutputSqtStream)
+            {
+               char szOut[128];
+               time(&tLoadAndPreprocessSpectraEndTime);
+               strftime(szTimeBuffer, 26, "%m/%d/%Y, %I:%M:%S %p", localtime(&tLoadAndPreprocessSpectraEndTime));
+               sprintf(szOut, " - End LoadAndPreprocessSpectra:  %s\n", szTimeBuffer);
+               logout(szOut);
+               int iElapsedTime=(int)difftime(tLoadAndPreprocessSpectraEndTime, tLoadAndPreprocessSpectraStartTime);
+               sprintf(szOut, " - Time spent in LoadAndPreprocessSpectra:  %d seconds\n", iElapsedTime);
+               logout(szOut);
+               fflush(stdout);
+            }
+#endif
+
+            if (g_pvQuery.empty())
+               break; // no search to run
+            else
+               iTotalSpectraSearched += g_pvQuery.size();
+
+            bSucceeded = AllocateResultsMem();
+            if (!bSucceeded)
+            {
+               goto cleanup_results;
+            }
+
+            char szStatusMsg[256];
+            sprintf(szStatusMsg, " %d\n", (int)g_pvQuery.size());
+            if (!g_staticParams.options.bOutputSqtStream)
+            {
+               char szOut[128];
+               sprintf(szOut, "%s", szStatusMsg);
+               logout(szOut);
+            }
+            g_cometStatus.SetStatusMsg(string(szStatusMsg));
+
+            // Sort g_pvQuery vector by dExpPepMass.
+            std::sort(g_pvQuery.begin(), g_pvQuery.end(), compareByPeptideMass);
+
+            g_massRange.dMinMass = g_pvQuery.at(0)->_pepMassInfo.dPeptideMassToleranceMinus;
+            g_massRange.dMaxMass = g_pvQuery.at(g_pvQuery.size()-1)->_pepMassInfo.dPeptideMassTolerancePlus;
+
+#ifdef PERF_DEBUG
+            if (!g_staticParams.options.bOutputSqtStream)
+            {
+               char szOut[128];
+               time(&tRunSearchStartTime);
+               strftime(szTimeBuffer, 26, "%m/%d/%Y, %I:%M:%S %p", localtime(&tRunSearchStartTime));
+               sprintf(szOut, " - Start RunSearch:  %s\n", szTimeBuffer);
+               logout(szOut);
+               fflush(stdout);
+
+            }
+#endif
+
+            bSucceeded = !g_cometStatus.IsError() && !g_cometStatus.IsCancel();
+            if (!bSucceeded)
+            {
+               goto cleanup_results;
+            }
+
+            g_cometStatus.SetStatusMsg(string("Running search..."));
+
+            // Now that spectra are loaded to memory and sorted, do search.
+            bSucceeded = CometSearch::RunSearch(g_staticParams.options.iNumThreads, g_staticParams.options.iNumThreads, iPercentStart, iPercentEnd);
+            if (!bSucceeded)
+            {
+               goto cleanup_results;
+            }
+
+#ifdef PERF_DEBUG
+            if (!g_staticParams.options.bOutputSqtStream)
+            {
+               char szOut[128];
+               time(&tRunSearchEndTime);
+               strftime(szTimeBuffer, 26, "%m/%d/%Y, %I:%M:%S %p", localtime(&tRunSearchEndTime));
+               sprintf(szOut, " - End RunSearch:  %s\n", szTimeBuffer);
+               logout(szOut);
+
+               int iElapsedTime=(int)difftime(tRunSearchEndTime, tRunSearchStartTime);
+               sprintf(szOut, " - Time spent in RunSearch:  %d seconds\n", iElapsedTime);
+               logout(szOut);
+
+               time(&tPostAnalysisStartTime);
+               strftime(szTimeBuffer, 26, "%m/%d/%Y, %I:%M:%S %p", localtime(&tPostAnalysisStartTime));
+               sprintf(szOut, " - Start PostAnalysis:  %s\n", szTimeBuffer);
+               logout(szOut);
+
+               fflush(stdout);
+            }
+#endif
+
+            bSucceeded = !g_cometStatus.IsError() && !g_cometStatus.IsCancel();
+            if (!bSucceeded)
+            {
+               goto cleanup_results;
+            }
+
+            if (!g_staticParams.options.bOutputSqtStream)
+            {
+               logout("     - Post analysis:");
+               fflush(stdout);
+            }
+
+            g_cometStatus.SetStatusMsg(string("Performing post-search analysis ..."));
+
+            // Sort each entry by xcorr, calculate E-values, etc.
+            bSucceeded = CometPostAnalysis::PostAnalysis(g_staticParams.options.iNumThreads, g_staticParams.options.iNumThreads);
+            if (!bSucceeded)
+            {
+               goto cleanup_results;
+            }
+
+#ifdef PERF_DEBUG
+            if (!g_staticParams.options.bOutputSqtStream)
+            {
+               char szOut[128];
+               time(&tPostAnalysisEndTime);
+               strftime(szTimeBuffer, 26, "%m/%d/%Y, %I:%M:%S %p", localtime(&tPostAnalysisEndTime));
+               sprintf(szOut, " - End PostAnalysis:  %s\n", szTimeBuffer);
+               logout(szOut);
+               int iElapsedTime=(int)difftime(tPostAnalysisEndTime, tPostAnalysisStartTime);
+               sprintf(szOut, " - Time spent in PostAnalysis:  %d seconds\n", iElapsedTime);
+               logout(szOut);
+               fflush(stdout);
+            }
+#endif
+
+            // Sort g_pvQuery vector by scan.
+            std::sort(g_pvQuery.begin(), g_pvQuery.end(), compareByScanNumber);
+
+            CalcRunTime(tStartTime);
+
+            if (!g_staticParams.options.bOutputSqtStream)
+            {
+               logout("  done\n");
+               fflush(stdout);
+            }
+
+            if (g_staticParams.options.bOutputOutFiles)
+            {
+               bSucceeded = CometWriteOut::WriteOut();
+               if (!bSucceeded)
+               {
+                  goto cleanup_results;
+               }
+            }
+
+            if (g_staticParams.options.bOutputPepXMLFile)
+               CometWritePepXML::WritePepXML(fpout_pepxml, fpoutd_pepxml);
+
+            if (g_staticParams.options.bOutputPercolatorFile)
+            {
+               bSucceeded = CometWritePercolator::WritePercolator(fpout_percolator);
+               if (!bSucceeded)
+               {
+                  goto cleanup_results;
+               }
+            }
+
+            if (g_staticParams.options.bOutputTxtFile)
+               CometWriteTxt::WriteTxt(fpout_txt, fpoutd_txt);
+
+            //// Write SQT last as I destroy the g_staticParams.szMod string during that process
+            if (g_staticParams.options.bOutputSqtStream || g_staticParams.options.bOutputSqtFile)
+               CometWriteSqt::WriteSqt(fpout_sqt, fpoutd_sqt);
+
+   cleanup_results:
+            // Deleting each Query object in the vector calls its destructor, which
+            // frees the spectral memory (see definition for Query in CometData.h).
+            for (int i=0; i<(int)g_pvQuery.size(); i++)
+               delete g_pvQuery.at(i);
+
+            g_pvQuery.clear();
+
+            if (!bSucceeded)
+            {
+               break;
+            }
+         }
+
+         if (bSucceeded)
+         {
+            if (iTotalSpectraSearched == 0)
+            {
+               logout(" Warning - no spectra searched.\n\n");
+            }
+
+            if (!g_staticParams.options.bOutputSqtStream)
+            {
+               char szOut[128];
+#ifdef PERF_DEBUG
+               time_t tStartTimeSave = tStartTime;
+#endif
+               time(&tStartTime);
+               strftime(g_staticParams.szDate, 26, "%m/%d/%Y, %I:%M:%S %p", localtime(&tStartTime));
+               sprintf(szOut, " Search end:    %s\n\n", g_staticParams.szDate);
+               logout(szOut);
+#ifdef PERF_DEBUG
+               int iElapsedTime=(int)difftime(tStartTime, tStartTimeSave);
+               sprintf(szOut, " - Total search time:  %d seconds\n", iElapsedTime);
+               logout(szOut);
+#endif
+            }
+
+            if (NULL != fpout_pepxml)
+            {
+               CometWritePepXML::WritePepXMLEndTags(fpout_pepxml);
+            }
+
+            if (NULL != fpoutd_pepxml)
+            {
+               CometWritePepXML::WritePepXMLEndTags(fpoutd_pepxml);
+            }
+         }
+      }
+
+      //MH: Deallocate spectral processing memory.
+      CometPreprocess::DeallocateMemory(g_staticParams.options.iNumThreads);
+
+      // Deallocate search memory
+      CometSearch::DeallocateMemory(g_staticParams.options.iNumThreads);
+
+      if (NULL != fpout_pepxml)
+      {
+         fclose(fpout_pepxml);
+         fpout_pepxml = NULL;
+      }
+
+      if (NULL != fpoutd_pepxml)
+      {
+         fclose(fpoutd_pepxml);
+         fpoutd_pepxml = NULL;
+      }
+
+      if (NULL != fpout_percolator)
+      {
+         fclose(fpout_percolator);
+         fpout_percolator = NULL;
+      }
+
+      if (NULL != fpout_sqt)
+      {
+         fclose(fpout_sqt);
+         fpout_sqt = NULL;
+      }
+
+      if (NULL != fpoutd_sqt)
+      {
+         fclose(fpoutd_sqt);
+         fpoutd_sqt = NULL;
+      }
+
+      if (NULL != fpout_txt)
+      {
+         fclose(fpout_txt);
+         fpout_txt = NULL;
+      }
+
+      if (NULL != fpoutd_txt)
+      {
+         fclose(fpoutd_txt);
+         fpoutd_txt = NULL;
+      }
+
+      if (!bSucceeded)
+      {
+         break;
+      }
+   }
+
+   return bSucceeded;
+}
+
diff --git a/ext/patches/comet/MSToolkit/MSToolkitLite.vcxproj b/ext/patches/comet/MSToolkit/MSToolkitLite.vcxproj
new file mode 100644
index 0000000..f2a3547
--- /dev/null
+++ b/ext/patches/comet/MSToolkit/MSToolkitLite.vcxproj
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{8093FAFA-4AA1-4E88-A83E-1B433A96AAE5}</ProjectGuid>
+    <RootNamespace>MSToolkitLite</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <UseOfMfc>false</UseOfMfc>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\</IntDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\</IntDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <AdditionalIncludeDirectories>./include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions);COMPILED_FROM_DSP;_NOSQLITE;XML_STATIC</PreprocessorDefinitions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <FloatingPointModel>Fast</FloatingPointModel>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <StringPooling>true</StringPooling>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <FunctionLevelLinking>false</FunctionLevelLinking>
+      <FloatingPointExceptions>false</FloatingPointExceptions>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <Optimization>Full</Optimization>
+      <AdditionalIncludeDirectories>./include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;WIN32;_LIB;COMPILED_FROM_DSP;_NOSQLITE;XML_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <StringPooling>true</StringPooling>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <FunctionLevelLinking>false</FunctionLevelLinking>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <FloatingPointModel>Fast</FloatingPointModel>
+      <FloatingPointExceptions>false</FloatingPointExceptions>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>./include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;COMPILED_FROM_DSP;_NOSQLITE;XML_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>false</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ObjectFileName>$(IntDir)MSToolkitLite\</ObjectFileName>
+      <ProgramDataBaseFileName>$(IntDir)MSToolkitLite\vc90.pdb</ProgramDataBaseFileName>
+      <XMLDocumentationFileName>$(IntDir)MSToolkitLite\</XMLDocumentationFileName>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <StringPooling>true</StringPooling>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <FloatingPointModel>Fast</FloatingPointModel>
+      <FloatingPointExceptions>false</FloatingPointExceptions>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>./include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;COMPILED_FROM_DSP;_NOSQLITE;XML_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>false</FunctionLevelLinking>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <ObjectFileName>$(IntDir)MSToolkitLite\</ObjectFileName>
+      <ProgramDataBaseFileName>$(IntDir)MSToolkitLite\vc90.pdb</ProgramDataBaseFileName>
+      <XMLDocumentationFileName>$(IntDir)MSToolkitLite\</XMLDocumentationFileName>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <OmitFramePointers>true</OmitFramePointers>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <StringPooling>true</StringPooling>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <FloatingPointModel>Fast</FloatingPointModel>
+      <FloatingPointExceptions>false</FloatingPointExceptions>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="src\expat-2.0.1\xmlparse.cpp" />
+    <ClCompile Include="src\expat-2.0.1\xmlrole.cpp" />
+    <ClCompile Include="src\expat-2.0.1\xmltok.cpp" />
+    <ClCompile Include="src\expat-2.0.1\xmltok_impl.cpp" />
+    <ClCompile Include="src\expat-2.0.1\xmltok_ns.cpp" />
+    <ClCompile Include="src\MSToolkit\MSObject.cpp" />
+    <ClCompile Include="src\MSToolkit\MSReader.cpp" />
+    <ClCompile Include="src\MSToolkit\mzMLWriter.cpp" />
+    <ClCompile Include="src\MSToolkit\RAWReader.cpp" />
+    <ClCompile Include="src\MSToolkit\Spectrum.cpp" />
+    <ClCompile Include="src\mzParser\BasicChromatogram.cpp" />
+    <ClCompile Include="src\mzParser\BasicSpectrum.cpp" />
+    <ClCompile Include="src\mzParser\Czran.cpp" />
+    <ClCompile Include="src\mzParser\MSNumpress.cpp" />
+    <ClCompile Include="src\mzParser\mzp_base64.cpp" />
+    <ClCompile Include="src\mzParser\mzParser.cpp" />
+    <ClCompile Include="src\mzParser\PWIZface.cpp" />
+    <ClCompile Include="src\mzParser\RAMPface.cpp" />
+    <ClCompile Include="src\mzParser\saxhandler.cpp" />
+    <ClCompile Include="src\mzParser\saxmzmlhandler.cpp" />
+    <ClCompile Include="src\mzParser\saxmzxmlhandler.cpp" />
+    <ClCompile Include="src\zLib-1.2.5\adler32.c" />
+    <ClCompile Include="src\zLib-1.2.5\compress.c" />
+    <ClCompile Include="src\zLib-1.2.5\crc32.c" />
+    <ClCompile Include="src\zLib-1.2.5\deflate.c" />
+    <ClCompile Include="src\zLib-1.2.5\gzclose.c" />
+    <ClCompile Include="src\zLib-1.2.5\gzlib.c" />
+    <ClCompile Include="src\zLib-1.2.5\gzread.c" />
+    <ClCompile Include="src\zLib-1.2.5\gzwrite.c" />
+    <ClCompile Include="src\zLib-1.2.5\infback.c" />
+    <ClCompile Include="src\zLib-1.2.5\inffast.c" />
+    <ClCompile Include="src\zLib-1.2.5\inflate.c" />
+    <ClCompile Include="src\zLib-1.2.5\inftrees.c" />
+    <ClCompile Include="src\zLib-1.2.5\trees.c" />
+    <ClCompile Include="src\zLib-1.2.5\uncompr.c" />
+    <ClCompile Include="src\zLib-1.2.5\zutil.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="ReadMe.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="include\ascii.h" />
+    <ClInclude Include="include\asciitab.h" />
+    <ClInclude Include="include\crc32.h" />
+    <ClInclude Include="include\deflate.h" />
+    <ClInclude Include="include\expat.h" />
+    <ClInclude Include="include\expat_config.h" />
+    <ClInclude Include="include\expat_external.h" />
+    <ClInclude Include="include\gzguts.h" />
+    <ClInclude Include="include\iasciitab.h" />
+    <ClInclude Include="include\inffast.h" />
+    <ClInclude Include="include\inffixed.h" />
+    <ClInclude Include="include\inflate.h" />
+    <ClInclude Include="include\inftrees.h" />
+    <ClInclude Include="include\internal.h" />
+    <ClInclude Include="include\latin1tab.h" />
+    <ClInclude Include="include\MSObject.h" />
+    <ClInclude Include="include\MSReader.h" />
+    <ClInclude Include="include\MSToolkitTypes.h" />
+    <ClInclude Include="include\mzMLWriter.h" />
+    <ClInclude Include="include\mzParser.h" />
+    <ClInclude Include="include\nametab.h" />
+    <ClInclude Include="include\RAWReader.h" />
+    <ClInclude Include="include\Spectrum.h" />
+    <ClInclude Include="include\szlib.h" />
+    <ClInclude Include="include\trees.h" />
+    <ClInclude Include="include\utf8tab.h" />
+    <ClInclude Include="include\winconfig.h" />
+    <ClInclude Include="include\xmlrole.h" />
+    <ClInclude Include="include\xmltok.h" />
+    <ClInclude Include="include\xmltok_impl.h" />
+    <ClInclude Include="include\zconf.h" />
+    <ClInclude Include="include\zlib.h" />
+    <ClInclude Include="include\zutil.h" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/ext/patches/comet/MSToolkit/RAWReader.cpp b/ext/patches/comet/MSToolkit/RAWReader.cpp
new file mode 100644
index 0000000..17fe54f
--- /dev/null
+++ b/ext/patches/comet/MSToolkit/RAWReader.cpp
@@ -0,0 +1,672 @@
+#include "RAWReader.h"
+
+using namespace MSToolkit;
+
+// ==========================
+// Constructors & Destructors
+// ==========================
+RAWReader::RAWReader(){
+
+  CoInitialize( NULL );
+	bRaw = initRaw();
+  rawCurSpec=0;
+  rawTotSpec=0;
+  rawAvg=false;
+  rawAvgWidth=1;
+  rawAvgCutoff=1000;
+	rawFileOpen=false;
+  rawLabel=false;
+  rawUserFilterExact=true;
+  strcpy(rawCurrentFile,".");
+  strcpy(rawInstrument,"unknown");
+  strcpy(rawManufacturer,"Thermo Scientific");
+  strcpy(rawUserFilter,"");
+	msLevelFilter=NULL;
+
+}
+
+RAWReader::~RAWReader(){
+
+  if(bRaw){
+    if(rawFileOpen) m_Raw->Close();
+    m_Raw.Release();
+    m_Raw=NULL;
+  }
+	msLevelFilter=NULL;
+
+}
+
+int RAWReader::calcChargeState(double precursormz, double highmass, VARIANT* varMassList, long nArraySize) {
+// Assumes spectrum is +1 or +2.  Figures out charge by
+// seeing if signal is present above the parent mass
+// indicating +2 (by taking ratio above/below precursor)
+
+	bool bFound;
+	long i, iStart;
+	double dLeftSum,dRightSum;
+	double FractionWindow;
+	double CorrectionFactor;
+
+	dLeftSum = 0.00001;
+	dRightSum = 0.00001;
+
+	DataPeak* pDataPeaks = NULL;
+	SAFEARRAY FAR* psa = varMassList->parray;
+	SafeArrayAccessData( psa, (void**)(&pDataPeaks) );
+
+//-------------
+// calc charge
+//-------------
+	bFound=false;
+	i=0;
+	while(i<nArraySize && !bFound){
+    if(pDataPeaks[i].dMass < precursormz - 20){
+			//do nothing
+		} else {
+			bFound = true;
+      iStart = i;
+    }
+    i++;
+	}
+	if(!bFound) iStart = nArraySize;
+
+	for(i=0;i<iStart;i++)	dLeftSum = dLeftSum + pDataPeaks[i].dIntensity;
+
+	bFound=false;
+	i=0;
+	while(i<nArraySize && !bFound){
+    if(pDataPeaks[i].dMass < precursormz + 20){
+			//do nothing
+		} else {
+      bFound = true;
+      iStart = i;
+    }
+    i++;
+	}
+
+	if(!bFound) {
+		SafeArrayUnaccessData( psa );
+		psa = NULL;
+		pDataPeaks = NULL;
+		return 1;
+	}
+	if(iStart = 0) iStart++;
+
+	for(i=iStart;i<nArraySize;i++) dRightSum = dRightSum + pDataPeaks[i].dIntensity;
+
+	if(precursormz * 2 < highmass){
+    CorrectionFactor = 1;
+	} else {
+    FractionWindow = (precursormz * 2) - highmass;
+    CorrectionFactor = (precursormz - FractionWindow) / precursormz;
+	}
+
+	if(dLeftSum > 0 && (dRightSum / dLeftSum) < (0.2 * CorrectionFactor)){
+		SafeArrayUnaccessData( psa );
+		psa=NULL;
+		pDataPeaks=NULL;
+		return 1;
+	} else {
+		SafeArrayUnaccessData( psa );
+		psa=NULL;
+		pDataPeaks=NULL;
+    return 0;  //Set charge to 0 to indicate that both +2 and +3 spectra should be created
+	}
+
+  //When all else fails, return 0
+  return 0;
+}
+
+MSSpectrumType RAWReader::evaluateFilter(long scan, char* chFilter, vector<double>& MZs, bool& bCentroid, double& cv, MSActivation& act) {
+
+  BSTR Filter = NULL;
+	char cStr[256];
+	string tStr;
+	string mzVal;
+	int stop;
+  bool bSA=false;
+
+	//For non-ATL and non-MFC conversions
+	int sl;
+
+  //Initialize raw values to default
+	MZs.clear();
+  cv=0;
+
+  m_Raw->GetFilterForScanNum(scan, &Filter);
+	sl = SysStringLen(Filter)+1;
+	WideCharToMultiByte(CP_ACP,0,Filter,-1,chFilter,sl,NULL,NULL);
+	SysFreeString(Filter);
+
+	strcpy(cStr,chFilter);
+	MSSpectrumType mst=Unspecified;
+	char* tok;
+	tok=strtok(cStr," \n");
+	while(tok!=NULL){
+
+		if(strcmp(tok,"c")==0){
+      bCentroid=true;
+		} else if(strlen(tok)>2 && tok[0]=='c' && tok[1]=='v'){
+      cv=atof(tok+3);
+		} else if(strcmp(tok,"d")==0){
+		} else if(strcmp(tok,"ESI")==0){
+		} else if(strcmp(tok,"FTMS")==0){
+		} else if(strcmp(tok,"Full")==0){
+		} else if(strcmp(tok,"ITMS")==0){
+		} else if(strcmp(tok,"lock")==0){
+		} else if(strcmp(tok,"ms")==0){
+			mst=MS1;
+		} else if(strcmp(tok,"msx")==0){
+			mst=MSX;
+		} else if(strcmp(tok,"ms2")==0){
+			if(mst!=MSX) mst=MS2;
+		} else if(strcmp(tok,"ms3")==0){
+			if(mst!=MSX) mst=MS3;
+		} else if(strcmp(tok,"NSI")==0){
+		} else if(strcmp(tok,"p")==0){
+      bCentroid=false;
+    } else if(strcmp(tok,"r")==0){ //appears in fusion data, no documentation
+    } else if(strcmp(tok,"sa")==0){
+      bSA=true;
+		} else if(strncmp(tok,"sid",3)==0){
+		} else if(strcmp(tok,"SRM")==0){
+			mst=SRM;
+		} else if(strcmp(tok,"u")==0){
+			mst=UZS;
+		} else if(strcmp(tok,"w")==0){ //wideband activation?
+		} else if(strcmp(tok,"Z")==0){
+			if(mst!=UZS) mst=ZS;
+		} else if(strcmp(tok,"+")==0){
+		} else if(strcmp(tok,"-")==0){
+		} else if(strcmp(tok,"t")==0){ //turbo scan
+		} else if(strcmp(tok,"E")==0){ //enhanced
+		} else if(strchr(tok,'@')!=NULL){
+			tStr=tok;
+			stop=tStr.find("@");
+			mzVal=tStr.substr(0,stop);
+			MZs.push_back(atof(&mzVal[0]));
+      mzVal=tStr.substr(stop+1,3);
+      if(mzVal.compare("cid")==0){
+        act=mstCID;
+      } else if(mzVal.compare("hcd")==0){
+        act=mstHCD;
+      } else if(mzVal.compare("etd")==0){
+        if(bSA) act=mstETDSA;
+        else act=mstETD;
+      } else {
+        cout << "Unknown activation method: " << &mzVal[0] << endl;
+        act=mstNA;
+      }
+
+		} else if(strchr(tok,'[')!=NULL){
+		} else {
+			cout << "Unknown token: " << tok << endl;
+		}
+
+		tok=strtok(NULL," \n");
+	}
+
+	return mst;
+
+}
+
+void RAWReader::getInstrument(char* str){
+  strcpy(str,rawInstrument);
+}
+
+long RAWReader::getLastScanNumber(){
+	return rawCurSpec;
+}
+
+void RAWReader::getManufacturer(char* str){
+  strcpy(str,rawManufacturer);
+}
+
+long RAWReader::getScanCount(){
+	return rawTotSpec;
+}
+
+bool RAWReader::getStatus(){
+	return bRaw;
+}
+
+bool RAWReader::initRaw(){
+
+	int raw=0;
+
+	IXRawfile2Ptr m_Raw2;
+	IXRawfile3Ptr m_Raw3;
+	IXRawfile4Ptr m_Raw4;
+	IXRawfile5Ptr m_Raw5;
+
+	//Example of Xcalibur/Foundation first
+	//if(FAILED(m_Raw5.CreateInstance("XRawfile.XRawfile.1"))){'
+
+	//Try MSFileReader - using ProteoWizard strategy
+  if(FAILED(m_Raw5.CreateInstance("MSFileReader.XRawfile.1"))){
+		if(FAILED(m_Raw4.CreateInstance("MSFileReader.XRawfile.1"))){
+			if(FAILED(m_Raw3.CreateInstance("MSFileReader.XRawfile.1"))){
+				if(FAILED(m_Raw2.CreateInstance("MSFileReader.XRawfile.1"))){
+					if(FAILED(m_Raw.CreateInstance("MSFileReader.XRawfile.1"))){
+            raw=0;
+						//cout << "Cannot load Thermo MSFileReader. Cannot read .RAW files." << endl;
+					} else {
+						raw=1;
+					}
+				} else {
+					m_Raw=m_Raw2;
+					raw=2;
+				}
+			} else {
+				m_Raw=m_Raw3;
+				raw=3;
+			}
+		} else {
+			m_Raw=m_Raw4;
+			raw=4;
+		}
+	} else {
+		m_Raw=m_Raw5;
+		raw=5;
+	}
+	
+	if(raw>0) return true;
+	return false;
+}
+
+bool RAWReader::readRawFile(const char *c, Spectrum &s, int scNum){
+
+	//General purpose function members
+	bool bCheckNext;
+  bool bNewFile;
+
+	char chFilter[256];
+  char curFilter[256];
+	
+	double dRTime;
+	double highmass=0.0;
+	double pm1;
+	double pw;
+
+	long i;
+  long j;
+	long lArraySize=0;
+
+	vector<double> MZs;
+
+	DataPeak* pDataPeaks = NULL;
+  HRESULT lRet;
+	MSSpectrumType MSn;
+	SAFEARRAY FAR* psa;
+  TCHAR pth[MAX_PATH];
+  VARIANT varMassList;
+	VARIANT varPeakFlags;
+
+  //Members for gathering averaged scans
+	int charge;
+  int sl;
+	int widthCount;
+	
+	long FirstBkg1=0;
+	long FirstBkg2=0;
+  long LastBkg1=0;
+  long LastBkg2=0;
+	long lowerBound;
+  long upperBound;
+    
+  BSTR rawFilter=NULL;
+  BSTR testStr;
+
+	//Additional members for Scan Information
+  bool bCentroid;
+
+  double cv;    //Compensation Voltage
+  double BPI;   //Base peak intensity
+	double BPM;   //Base peak mass
+	double td;    //temp double value
+	double TIC;
+
+	long tl;      //temp long value
+  MSActivation act;
+
+	VARIANT Charge;
+	VARIANT ConversionA;
+  VARIANT ConversionB;
+	VARIANT ConversionC;
+  VARIANT ConversionD;
+	VARIANT ConversionE;
+  VARIANT ConversionI;
+  VARIANT IIT;  //ion injection time
+	VARIANT MonoMZ;
+  VARIANT PrecursorInfo;
+
+  if(!bRaw) return false;
+
+	//Clear spectrum object
+  s.clear();
+
+  if(c==NULL){
+		//continue reading current file
+    if(!rawFileOpen) return false;
+    if(scNum>0) rawCurSpec=scNum;
+    else rawCurSpec++;
+    if(rawCurSpec>rawTotSpec) return false;
+    bNewFile=false;
+  } else {
+	
+    //check if requested file is already open
+    if(rawFileOpen) {
+      if(strcmp(c,rawCurrentFile)==0){
+        if(scNum>0) rawCurSpec=scNum;
+        else rawCurSpec++;
+        if(rawCurSpec>rawTotSpec) return false;
+        bNewFile=false;
+      } else {
+        //new file requested, so close the existing one
+        lRet = m_Raw->Close();
+        rawFileOpen=false;
+        bNewFile=true;
+      }
+    } else {
+      bNewFile=true;
+    }
+
+    if(bNewFile){
+      MultiByteToWideChar(CP_ACP,0,c,-1,(LPWSTR)pth,MAX_PATH);
+      lRet = m_Raw->Open((LPWSTR)pth);
+		  if(lRet != ERROR_SUCCESS) {
+			  cerr << "Cannot open " << c << endl;
+			  return false;
+		  }
+	    else lRet = m_Raw->SetCurrentController(0,1);
+      rawFileOpen=true;
+      m_Raw->GetNumSpectra(&rawTotSpec);
+      testStr=NULL;
+      m_Raw->GetInstModel(&testStr);
+      sl = SysStringLen(testStr)+1;
+	    WideCharToMultiByte(CP_ACP,0,testStr,-1,rawInstrument,sl,NULL,NULL);
+      SysFreeString(testStr);
+      strcpy(rawCurrentFile,c);
+
+		  //if scan number is requested, grab it
+      if(scNum>0) rawCurSpec=scNum;
+      else rawCurSpec=1;
+      if(rawCurSpec>rawTotSpec) return false;
+    }
+  }
+
+	//Initialize members
+	strcpy(chFilter,"");
+  strcpy(curFilter,"");
+	VariantInit(&varMassList);
+	VariantInit(&varPeakFlags);
+	VariantInit(&IIT);
+  VariantInit(&ConversionA);
+  VariantInit(&ConversionB);
+	VariantInit(&ConversionC);
+  VariantInit(&ConversionD);
+	VariantInit(&ConversionE);
+  VariantInit(&ConversionI);
+	VariantInit(&Charge);
+	VariantInit(&MonoMZ);
+  VariantInit(&PrecursorInfo);
+
+  rawPrecursorInfo preInfo;
+
+	//Rather than grab the next scan number, get the next scan based on a user-filter (if supplied).
+  //if the filter was set, make sure we pass the filter
+  while(true){
+
+	  MSn = evaluateFilter(rawCurSpec, curFilter, MZs, bCentroid,cv,act);
+
+    //check for spectrum filter (string)
+    if(strlen(rawUserFilter)>0){
+      bCheckNext=false;
+      if(rawUserFilterExact) {
+        if(strcmp(curFilter,rawUserFilter)!=0) bCheckNext=true;
+      } else {
+        if(strstr(curFilter,rawUserFilter)==NULL) bCheckNext=true;
+      }
+
+      //if string doesn't match, get next scan until it does match or EOF
+      if(bCheckNext){
+        if(scNum>0) return false;
+        rawCurSpec++;
+        if(rawCurSpec>rawTotSpec) return false;
+        continue;
+      }
+    }
+
+    //check for msLevel filter
+    if(msLevelFilter->size()>0 && find(msLevelFilter->begin(), msLevelFilter->end(), MSn) == msLevelFilter->end()) {
+      if(scNum>0) return false;
+      rawCurSpec++;
+      if(rawCurSpec>rawTotSpec) return false;
+    } else {
+      break;
+    }
+  }
+
+	//Get spectrum meta data
+  //Get lump precursor info first. Note that MSX data likely has multiple precursor infos
+#ifdef _WIN64
+  BYTE* pData;
+  m_Raw->GetPrecursorInfoFromScanNum(rawCurSpec, &PrecursorInfo, &tl);
+  SafeArrayAccessData(PrecursorInfo.parray, (void**)&pData);
+  if (tl > 0){
+    //getting only first value!!! Note this does not support MSX here!!!
+    //TODO ? : rewrite MSX support to use this function? If so, how would 32-bit systems do this? This function
+    //doesn't seem to work on 32-bit MSFileReader...
+    memcpy(&preInfo, pData, sizeof(rawPrecursorInfo));
+  } else {
+    preInfo.charge=0;
+    preInfo.dIsoMZ=0;
+    preInfo.dMonoMZ=0;
+    preInfo.parScanNum=0;
+  }
+  SafeArrayUnaccessData(PrecursorInfo.parray);
+#else 
+  sl=lstrlenA("Monoisotopic M/Z:");
+	testStr = SysAllocStringLen(NULL,sl);
+	MultiByteToWideChar(CP_ACP,0,"Monoisotopic M/Z:",sl,testStr,sl);
+	m_Raw->GetTrailerExtraValueForScanNum(rawCurSpec, testStr, &MonoMZ);
+	SysFreeString(testStr);
+  preInfo.dMonoMZ=MonoMZ.dblVal;
+
+	sl=lstrlenA("Charge State:");
+	testStr = SysAllocStringLen(NULL,sl);
+	MultiByteToWideChar(CP_ACP,0,"Charge State:",sl,testStr,sl);
+	m_Raw->GetTrailerExtraValueForScanNum(rawCurSpec, testStr, &Charge);
+	SysFreeString(testStr);
+  preInfo.charge=Charge.iVal;
+#endif
+
+	sl=lstrlenA("Ion Injection Time (ms):");
+  testStr = SysAllocStringLen(NULL,sl);
+  MultiByteToWideChar(CP_ACP,0,"Ion Injection Time (ms):",sl,testStr,sl);
+  m_Raw->GetTrailerExtraValueForScanNum(rawCurSpec, testStr, &IIT);
+  SysFreeString(testStr);
+
+	sl=lstrlenA("Conversion Parameter A:");
+	testStr = SysAllocStringLen(NULL,sl);
+	MultiByteToWideChar(CP_ACP,0,"Conversion Parameter A:",sl,testStr,sl);
+	m_Raw->GetTrailerExtraValueForScanNum(rawCurSpec, testStr, &ConversionA);
+	SysFreeString(testStr);
+
+	testStr = SysAllocStringLen(NULL,sl);
+	MultiByteToWideChar(CP_ACP,0,"Conversion Parameter B:",sl,testStr,sl);
+	m_Raw->GetTrailerExtraValueForScanNum(rawCurSpec, testStr, &ConversionB);
+	SysFreeString(testStr);
+
+	testStr = SysAllocStringLen(NULL,sl);
+	MultiByteToWideChar(CP_ACP,0,"Conversion Parameter C:",sl,testStr,sl);
+	m_Raw->GetTrailerExtraValueForScanNum(rawCurSpec, testStr, &ConversionC);
+	SysFreeString(testStr);
+
+	testStr = SysAllocStringLen(NULL,sl);
+	MultiByteToWideChar(CP_ACP,0,"Conversion Parameter D:",sl,testStr,sl);
+	m_Raw->GetTrailerExtraValueForScanNum(rawCurSpec, testStr, &ConversionD);
+	SysFreeString(testStr);
+
+	testStr = SysAllocStringLen(NULL,sl);
+	MultiByteToWideChar(CP_ACP,0,"Conversion Parameter E:",sl,testStr,sl);
+	m_Raw->GetTrailerExtraValueForScanNum(rawCurSpec, testStr, &ConversionE);
+	SysFreeString(testStr);
+
+	testStr = SysAllocStringLen(NULL,sl);
+	MultiByteToWideChar(CP_ACP,0,"Conversion Parameter I:",sl,testStr,sl);
+	m_Raw->GetTrailerExtraValueForScanNum(rawCurSpec, testStr, &ConversionI);
+	SysFreeString(testStr);
+
+  m_Raw->GetScanHeaderInfoForScanNum(rawCurSpec, &tl, &td, &td, &td, &TIC, &BPM, &BPI, &tl, &tl, &td);
+  m_Raw->RTFromScanNum(rawCurSpec,&dRTime);
+
+  //Get the peaks
+	//Average raw files if requested by user
+  if(rawAvg){
+    widthCount=0;
+    lowerBound=0;
+    upperBound=0;
+    for(i=rawCurSpec-1;i>0;i--){
+      evaluateFilter(i, chFilter, MZs, bCentroid,cv,act);
+      if(strcmp(curFilter,chFilter)==0){
+        widthCount++;
+        if(widthCount==rawAvgWidth) {
+          lowerBound=i;
+          break;
+        }
+      }
+    }
+    if(lowerBound==0) lowerBound=rawCurSpec; //this will have "edge" effects
+
+    widthCount=0;
+    for(i=rawCurSpec+1;i<rawTotSpec;i++){
+      evaluateFilter(i, chFilter, MZs, bCentroid,cv,act);
+      if(strcmp(curFilter,chFilter)==0){
+        widthCount++;
+        if(widthCount==rawAvgWidth) {
+          upperBound=i;
+          break;
+        }
+      }
+    }
+    if(upperBound==0) upperBound=rawCurSpec; //this will have "edge" effects
+
+    m_Raw->GetFilterForScanNum(i, &rawFilter);
+    j=m_Raw->GetAverageMassList(&lowerBound, &upperBound, &FirstBkg1, &LastBkg1, &FirstBkg2, &LastBkg2,
+      rawFilter, 1, rawAvgCutoff, 0, FALSE, &pw, &varMassList, &varPeakFlags, &lArraySize );
+    SysFreeString(rawFilter);
+    rawFilter=NULL;
+
+  } else {
+
+		//Get regular spectrum data
+		sl=lstrlenA("");
+		testStr = SysAllocStringLen(NULL,sl);
+		MultiByteToWideChar(CP_ACP,0,"",sl,testStr,sl);
+		j=m_Raw->GetMassListFromScanNum(&rawCurSpec,testStr,0,0,0,FALSE,&pw,&varMassList,&varPeakFlags,&lArraySize);
+		SysFreeString(testStr);
+  }
+
+	//Handle MS2 and MS3 files differently to create Z-lines
+	if(MSn==MS2 || MSn==MS3){
+
+		//if charge state is assigned to spectrum, add Z-lines.
+		if(preInfo.charge>0){ //if(Charge.iVal>0){
+			if(preInfo.dMonoMZ>0.01) { //if(MonoMZ.dblVal>0.01) {
+				//pm1 = MonoMZ.dblVal * Charge.iVal - ((Charge.iVal-1)*1.007276466);
+        pm1 = preInfo.dMonoMZ * preInfo.charge - ((preInfo.charge - 1)*1.007276466);
+        s.setMZ(MZs[0], preInfo.dMonoMZ);
+			}	else {
+        pm1 = MZs[0] * preInfo.charge - ((preInfo.charge - 1)*1.007276466);
+				s.setMZ(MZs[0]);
+			}
+      s.addZState(preInfo.charge, pm1);
+      s.setCharge(preInfo.charge);
+    } else {
+			s.setMZ(MZs[0]);
+      charge = calcChargeState(MZs[0], highmass, &varMassList, lArraySize);
+
+      //Charge greater than 0 means the charge state is known
+      if(charge>0){
+        pm1 = MZs[0]*charge - ((charge-1)*1.007276466);
+  	    s.addZState(charge,pm1);
+
+      //Charge of 0 means unknown charge state, therefore, compute +2 and +3 states.
+      } else {
+        pm1 = MZs[0]*2 - 1.007276466;
+        s.addZState(2,pm1);
+        pm1 = MZs[0]*3 - 2*1.007276466;
+        s.addZState(3,pm1);
+      }
+
+    }
+
+  } //endif MS2 and MS3
+
+	if(MSn==MSX){
+		for(i=0;i<(int)MZs.size();i++){
+			if(i==0) s.setMZ(MZs[i],0);
+			else s.addMZ(MZs[i],0);
+		}
+		s.setCharge(0);
+	}
+
+	//Set basic scan info
+  if(bCentroid) s.setCentroidStatus(1);
+  else s.setCentroidStatus(0);
+  s.setRawFilter(curFilter);
+  s.setActivationMethod(act);
+	s.setScanNumber((int)rawCurSpec);
+  s.setScanNumber((int)rawCurSpec,true);
+	s.setRTime((float)dRTime);
+	s.setFileType(MSn);
+  s.setBPI((float)BPI);
+  s.setBPM(BPM);
+  s.setCompensationVoltage(cv);
+  s.setConversionA(ConversionA.dblVal);
+  s.setConversionB(ConversionB.dblVal);
+	s.setConversionC(ConversionC.dblVal);
+  s.setConversionD(ConversionD.dblVal);
+	s.setConversionE(ConversionE.dblVal);
+  s.setConversionI(ConversionI.dblVal);
+  s.setTIC(TIC);
+  s.setIonInjectionTime(IIT.fltVal);
+	if(MSn==SRM) s.setMZ(MZs[0]);
+  switch(MSn){
+    case MS1: s.setMsLevel(1); break;
+    case MS2: s.setMsLevel(2); break;
+    case MS3: s.setMsLevel(3); break;
+		case MSX: s.setMsLevel(2); break;
+    default: s.setMsLevel(0); break;
+  }
+	psa = varMassList.parray;
+  SafeArrayAccessData( psa, (void**)(&pDataPeaks) );
+  for(j=0;j<lArraySize;j++)	s.add(pDataPeaks[j].dMass,(float)pDataPeaks[j].dIntensity);
+  SafeArrayUnaccessData( psa );
+
+  //Clean up memory
+	VariantClear(&Charge);
+	VariantClear(&MonoMZ);
+  VariantClear(&IIT);
+  VariantClear(&ConversionA);
+  VariantClear(&ConversionB);
+	VariantClear(&ConversionC);
+  VariantClear(&ConversionD);
+	VariantClear(&ConversionE);
+  VariantClear(&ConversionI);
+	VariantClear(&varMassList);
+	VariantClear(&varPeakFlags);
+  VariantClear(&PrecursorInfo);
+
+  return true;
+
+}
+
+void RAWReader::setMSLevelFilter(vector<MSSpectrumType>* v){
+	msLevelFilter=v;
+}
+
+void RAWReader::setRawFilter(char *c){
+  strcpy(rawUserFilter,c);
+}
diff --git a/ext/patches/google-gflags/libgflags.vcxproj b/ext/patches/google-gflags/libgflags.vcxproj
new file mode 100644
index 0000000..066c9a0
--- /dev/null
+++ b/ext/patches/google-gflags/libgflags.vcxproj
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{FB27FBDB-E6C0-4D00-A7F8-1EEEF1B48ABC}</ProjectGuid>
+    <RootNamespace>libgflags</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>11.0.60610.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGFLAGS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <OutputFile>$(OutDir)libgflags-debug.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(OutDir)libgflags-debug.pdb</ProgramDatabaseFile>
+      <SubSystem>Windows</SubSystem>
+      <ImportLibrary>$(OutDir)libgflags-debug.lib</ImportLibrary>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGFLAGS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <OutputFile>$(OutDir)libgflags-debug.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(OutDir)libgflags-debug.pdb</ProgramDatabaseFile>
+      <SubSystem>Windows</SubSystem>
+      <ImportLibrary>$(OutDir)libgflags-debug.lib</ImportLibrary>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGFLAGS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <OutputFile>$(OutDir)libgflags.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <ImportLibrary>$(OutDir)libgflags.lib</ImportLibrary>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGFLAGS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <OutputFile>$(OutDir)libgflags.dll</OutputFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <ImportLibrary>$(OutDir)libgflags.lib</ImportLibrary>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\src\gflags.cc">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">MultiThreadedDebugDLL</RuntimeLibrary>
+      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">MultiThreadedDebugDLL</RuntimeLibrary>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MultiThreadedDLL</RuntimeLibrary>
+      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <ClCompile Include="..\..\src\gflags_reporting.cc">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">MultiThreadedDebugDLL</RuntimeLibrary>
+      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">MultiThreadedDebugDLL</RuntimeLibrary>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MultiThreadedDLL</RuntimeLibrary>
+      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <ClCompile Include="..\..\src\gflags_completions.cc">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">MultiThreadedDebugDLL</RuntimeLibrary>
+      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">MultiThreadedDebugDLL</RuntimeLibrary>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MultiThreadedDLL</RuntimeLibrary>
+      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <ClCompile Include="..\..\src\windows\port.cc">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">MultiThreadedDebugDLL</RuntimeLibrary>
+      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">MultiThreadedDebugDLL</RuntimeLibrary>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MultiThreadedDLL</RuntimeLibrary>
+      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\src\mutex.h" />
+    <ClInclude Include="..\..\src\windows\gflags\gflags.h" />
+    <ClInclude Include="..\..\src\windows\gflags\gflags_declare.h" />
+    <ClInclude Include="..\..\src\windows\gflags\gflags_completions.h" />
+    <ClInclude Include="..\..\src\windows\config.h" />
+    <ClInclude Include="..\..\src\windows\port.h" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/ext/patches/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc b/ext/patches/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc
new file mode 100644
index 0000000..34412fc
--- /dev/null
+++ b/ext/patches/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc
@@ -0,0 +1,392 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Author: kenton at google.com (Kenton Varda)
+//  Based on original Protocol Buffers design by
+//  Sanjay Ghemawat, Jeff Dean, and others.
+
+#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
+#include <google/protobuf/stubs/common.h>
+#include <google/protobuf/stubs/stl_util.h>
+#include <algorithm>
+
+namespace google {
+namespace protobuf {
+namespace io {
+
+namespace {
+
+// Default block size for Copying{In,Out}putStreamAdaptor.
+static const int kDefaultBlockSize = 8192;
+
+}  // namespace
+
+ArrayInputStream::ArrayInputStream(const void* data, int size,
+                                   int block_size)
+  : data_(reinterpret_cast<const uint8*>(data)),
+    size_(size),
+    block_size_(block_size > 0 ? block_size : size),
+    position_(0),
+    last_returned_size_(0) {
+}
+
+ArrayInputStream::~ArrayInputStream() {
+}
+
+bool ArrayInputStream::Next(const void** data, int* size) {
+  if (position_ < size_) {
+    last_returned_size_ = min(block_size_, size_ - position_);
+    *data = data_ + position_;
+    *size = last_returned_size_;
+    position_ += last_returned_size_;
+    return true;
+  } else {
+    // We're at the end of the array.
+    last_returned_size_ = 0;   // Don't let caller back up.
+    return false;
+  }
+}
+
+void ArrayInputStream::BackUp(int count) {
+  GOOGLE_CHECK_GT(last_returned_size_, 0)
+      << "BackUp() can only be called after a successful Next().";
+  GOOGLE_CHECK_LE(count, last_returned_size_);
+  GOOGLE_CHECK_GE(count, 0);
+  position_ -= count;
+  last_returned_size_ = 0;  // Don't let caller back up further.
+}
+
+bool ArrayInputStream::Skip(int count) {
+  GOOGLE_CHECK_GE(count, 0);
+  last_returned_size_ = 0;   // Don't let caller back up.
+  if (count > size_ - position_) {
+    position_ = size_;
+    return false;
+  } else {
+    position_ += count;
+    return true;
+  }
+}
+
+int64 ArrayInputStream::ByteCount() const {
+  return position_;
+}
+
+
+// ===================================================================
+
+ArrayOutputStream::ArrayOutputStream(void* data, int size, int block_size)
+  : data_(reinterpret_cast<uint8*>(data)),
+    size_(size),
+    block_size_(block_size > 0 ? block_size : size),
+    position_(0),
+    last_returned_size_(0) {
+}
+
+ArrayOutputStream::~ArrayOutputStream() {
+}
+
+bool ArrayOutputStream::Next(void** data, int* size) {
+  if (position_ < size_) {
+    last_returned_size_ = min(block_size_, size_ - position_);
+    *data = data_ + position_;
+    *size = last_returned_size_;
+    position_ += last_returned_size_;
+    return true;
+  } else {
+    // We're at the end of the array.
+    last_returned_size_ = 0;   // Don't let caller back up.
+    return false;
+  }
+}
+
+void ArrayOutputStream::BackUp(int count) {
+  GOOGLE_CHECK_GT(last_returned_size_, 0)
+      << "BackUp() can only be called after a successful Next().";
+  GOOGLE_CHECK_LE(count, last_returned_size_);
+  GOOGLE_CHECK_GE(count, 0);
+  position_ -= count;
+  last_returned_size_ = 0;  // Don't let caller back up further.
+}
+
+int64 ArrayOutputStream::ByteCount() const {
+  return position_;
+}
+
+// ===================================================================
+
+StringOutputStream::StringOutputStream(string* target)
+  : target_(target) {
+}
+
+StringOutputStream::~StringOutputStream() {
+}
+
+bool StringOutputStream::Next(void** data, int* size) {
+  int old_size = target_->size();
+
+  // Grow the string.
+  if (old_size < target_->capacity()) {
+    // Resize the string to match its capacity, since we can get away
+    // without a memory allocation this way.
+    STLStringResizeUninitialized(target_, target_->capacity());
+  } else {
+    // Size has reached capacity, so double the size.  Also make sure
+    // that the new size is at least kMinimumSize.
+    STLStringResizeUninitialized(
+      target_,
+      max(old_size * 2,
+          kMinimumSize + 0));  // "+ 0" works around GCC4 weirdness.
+  }
+
+  *data = string_as_array(target_) + old_size;
+  *size = target_->size() - old_size;
+  return true;
+}
+
+void StringOutputStream::BackUp(int count) {
+  GOOGLE_CHECK_GE(count, 0);
+  GOOGLE_CHECK_LE(count, target_->size());
+  target_->resize(target_->size() - count);
+}
+
+int64 StringOutputStream::ByteCount() const {
+  return target_->size();
+}
+
+// ===================================================================
+
+CopyingInputStream::~CopyingInputStream() {}
+
+int CopyingInputStream::Skip(int count) {
+  char junk[4096];
+  int skipped = 0;
+  while (skipped < count) {
+    int bytes = Read(junk, min(count - skipped,
+                               implicit_cast<int>(sizeof(junk))));
+    if (bytes <= 0) {
+      // EOF or read error.
+      return skipped;
+    }
+    skipped += bytes;
+  }
+  return skipped;
+}
+
+CopyingInputStreamAdaptor::CopyingInputStreamAdaptor(
+    CopyingInputStream* copying_stream, int block_size)
+  : copying_stream_(copying_stream),
+    owns_copying_stream_(false),
+    failed_(false),
+    position_(0),
+    buffer_size_(block_size > 0 ? block_size : kDefaultBlockSize),
+    buffer_used_(0),
+    backup_bytes_(0) {
+}
+
+CopyingInputStreamAdaptor::~CopyingInputStreamAdaptor() {
+  if (owns_copying_stream_) {
+    delete copying_stream_;
+  }
+}
+
+bool CopyingInputStreamAdaptor::Next(const void** data, int* size) {
+  if (failed_) {
+    // Already failed on a previous read.
+    return false;
+  }
+
+  AllocateBufferIfNeeded();
+
+  if (backup_bytes_ > 0) {
+    // We have data left over from a previous BackUp(), so just return that.
+    *data = buffer_.get() + buffer_used_ - backup_bytes_;
+    *size = backup_bytes_;
+    backup_bytes_ = 0;
+    return true;
+  }
+
+  // Read new data into the buffer.
+  buffer_used_ = copying_stream_->Read(buffer_.get(), buffer_size_);
+  if (buffer_used_ <= 0) {
+    // EOF or read error.  We don't need the buffer anymore.
+    if (buffer_used_ < 0) {
+      // Read error (not EOF).
+      failed_ = true;
+    }
+    FreeBuffer();
+    return false;
+  }
+  position_ += buffer_used_;
+
+  *size = buffer_used_;
+  *data = buffer_.get();
+  return true;
+}
+
+void CopyingInputStreamAdaptor::BackUp(int count) {
+  GOOGLE_CHECK(backup_bytes_ == 0 && buffer_.get() != NULL)
+    << " BackUp() can only be called after Next().";
+  GOOGLE_CHECK_LE(count, buffer_used_)
+    << " Can't back up over more bytes than were returned by the last call"
+       " to Next().";
+  GOOGLE_CHECK_GE(count, 0)
+    << " Parameter to BackUp() can't be negative.";
+
+  backup_bytes_ = count;
+}
+
+bool CopyingInputStreamAdaptor::Skip(int count) {
+  GOOGLE_CHECK_GE(count, 0);
+
+  if (failed_) {
+    // Already failed on a previous read.
+    return false;
+  }
+
+  // First skip any bytes left over from a previous BackUp().
+  if (backup_bytes_ >= count) {
+    // We have more data left over than we're trying to skip.  Just chop it.
+    backup_bytes_ -= count;
+    return true;
+  }
+
+  count -= backup_bytes_;
+  backup_bytes_ = 0;
+
+  int skipped = copying_stream_->Skip(count);
+  position_ += skipped;
+  return skipped == count;
+}
+
+int64 CopyingInputStreamAdaptor::ByteCount() const {
+  return position_ - backup_bytes_;
+}
+
+void CopyingInputStreamAdaptor::AllocateBufferIfNeeded() {
+  if (buffer_.get() == NULL) {
+    buffer_.reset(new uint8[buffer_size_]);
+  }
+}
+
+void CopyingInputStreamAdaptor::FreeBuffer() {
+  GOOGLE_CHECK_EQ(backup_bytes_, 0);
+  buffer_used_ = 0;
+  buffer_.reset();
+}
+
+// ===================================================================
+
+CopyingOutputStream::~CopyingOutputStream() {}
+
+CopyingOutputStreamAdaptor::CopyingOutputStreamAdaptor(
+    CopyingOutputStream* copying_stream, int block_size)
+  : copying_stream_(copying_stream),
+    owns_copying_stream_(false),
+    failed_(false),
+    position_(0),
+    buffer_size_(block_size > 0 ? block_size : kDefaultBlockSize),
+    buffer_used_(0) {
+}
+
+CopyingOutputStreamAdaptor::~CopyingOutputStreamAdaptor() {
+  WriteBuffer();
+  if (owns_copying_stream_) {
+    delete copying_stream_;
+  }
+}
+
+bool CopyingOutputStreamAdaptor::Flush() {
+  return WriteBuffer();
+}
+
+bool CopyingOutputStreamAdaptor::Next(void** data, int* size) {
+  if (buffer_used_ == buffer_size_) {
+    if (!WriteBuffer()) return false;
+  }
+
+  AllocateBufferIfNeeded();
+
+  *data = buffer_.get() + buffer_used_;
+  *size = buffer_size_ - buffer_used_;
+  buffer_used_ = buffer_size_;
+  return true;
+}
+
+void CopyingOutputStreamAdaptor::BackUp(int count) {
+  GOOGLE_CHECK_GE(count, 0);
+  GOOGLE_CHECK_EQ(buffer_used_, buffer_size_)
+    << " BackUp() can only be called after Next().";
+  GOOGLE_CHECK_LE(count, buffer_used_)
+    << " Can't back up over more bytes than were returned by the last call"
+       " to Next().";
+
+  buffer_used_ -= count;
+}
+
+int64 CopyingOutputStreamAdaptor::ByteCount() const {
+  return position_ + buffer_used_;
+}
+
+bool CopyingOutputStreamAdaptor::WriteBuffer() {
+  if (failed_) {
+    // Already failed on a previous write.
+    return false;
+  }
+
+  if (buffer_used_ == 0) return true;
+
+  if (copying_stream_->Write(buffer_.get(), buffer_used_)) {
+    position_ += buffer_used_;
+    buffer_used_ = 0;
+    return true;
+  } else {
+    failed_ = true;
+    FreeBuffer();
+    return false;
+  }
+}
+
+void CopyingOutputStreamAdaptor::AllocateBufferIfNeeded() {
+  if (buffer_ == NULL) {
+    buffer_.reset(new uint8[buffer_size_]);
+  }
+}
+
+void CopyingOutputStreamAdaptor::FreeBuffer() {
+  buffer_used_ = 0;
+  buffer_.reset();
+}
+
+// ===================================================================
+
+}  // namespace io
+}  // namespace protobuf
+}  // namespace google
diff --git a/ext/patches/protobuf/vsprojects/libprotobuf-lite.vcxproj b/ext/patches/protobuf/vsprojects/libprotobuf-lite.vcxproj
new file mode 100644
index 0000000..172af61
--- /dev/null
+++ b/ext/patches/protobuf/vsprojects/libprotobuf-lite.vcxproj
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{49EA010D-706F-4BE2-A397-77854B72A040}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\extension_set.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_util.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream_inl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\message_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\repeated_field.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\common.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\hash.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\map-util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\once.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\platform_macros.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stl_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stringprintf.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\template_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\type_traits.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite_inl.h" />
+    <ClInclude Include="config.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\extension_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_util.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\coded_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\message_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\repeated_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\common.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\once.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\stringprintf.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format_lite.cc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/ext/patches/protobuf/vsprojects/libprotobuf.vcxproj b/ext/patches/protobuf/vsprojects/libprotobuf.vcxproj
new file mode 100644
index 0000000..3de33b3
--- /dev/null
+++ b/ext/patches/protobuf/vsprojects/libprotobuf.vcxproj
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+      <IntDir>\$(Platform)\$(Configuration)\</IntDir>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+      <IntDir>\$(Platform)\$(Configuration)\</IntDir>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+      <IntDir>\$(Platform)\$(Configuration)\</IntDir>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+      <IntDir>\$(Platform)\$(Configuration)\</IntDir>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{3E283F37-A4ED-41B7-A3E6-A2D89D131A30}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Win32\Debug\</OutDir>
+    <IntDir>Win32\Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <outdir>x64\Debug\</outdir>
+    <intdir>x64\Debug\</intdir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <outdir>Win32\Release\</outdir>
+    <intdir>Win32\Release\</intdir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <outdir>x64\Release\</outdir>
+    <intdir>x64\Release\</intdir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\importer.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\parser.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor_database.h" />
+    <ClInclude Include="..\src\google\protobuf\dynamic_message.h" />
+    <ClInclude Include="..\src\google\protobuf\extension_set.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_reflection.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_util.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream_inl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\gzip_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\printer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\tokenizer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\message.h" />
+    <ClInclude Include="..\src\google\protobuf\message_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\reflection_ops.h" />
+    <ClInclude Include="..\src\google\protobuf\repeated_field.h" />
+    <ClInclude Include="..\src\google\protobuf\service.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\common.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\hash.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\map-util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\once.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\platform_macros.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stl_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stringprintf.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\strutil.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\substitute.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\template_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\type_traits.h" />
+    <ClInclude Include="..\src\google\protobuf\text_format.h" />
+    <ClInclude Include="..\src\google\protobuf\unknown_field_set.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite_inl.h" />
+    <ClInclude Include="config.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\importer.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\parser.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor_database.cc" />
+    <ClCompile Include="..\src\google\protobuf\dynamic_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set_heavy.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_reflection.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_util.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\coded_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\gzip_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\printer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\tokenizer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\message.cc" />
+    <ClCompile Include="..\src\google\protobuf\message_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\reflection_ops.cc" />
+    <ClCompile Include="..\src\google\protobuf\repeated_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\service.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\common.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\once.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\stringprintf.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\structurally_valid.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\strutil.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\substitute.cc" />
+    <ClCompile Include="..\src\google\protobuf\text_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\unknown_field_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format_lite.cc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/ext/patches/protobuf/vsprojects/libprotobuf.vcxproj.old b/ext/patches/protobuf/vsprojects/libprotobuf.vcxproj.old
new file mode 100644
index 0000000..8f5205b
--- /dev/null
+++ b/ext/patches/protobuf/vsprojects/libprotobuf.vcxproj.old
@@ -0,0 +1,1624 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{3E283F37-A4ED-41B7-A3E6-A2D89D131A30}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\importer.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\parser.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor_database.h" />
+    <ClInclude Include="..\src\google\protobuf\dynamic_message.h" />
+    <ClInclude Include="..\src\google\protobuf\extension_set.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_reflection.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_util.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream_inl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\gzip_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\printer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\tokenizer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\message.h" />
+    <ClInclude Include="..\src\google\protobuf\message_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\reflection_ops.h" />
+    <ClInclude Include="..\src\google\protobuf\repeated_field.h" />
+    <ClInclude Include="..\src\google\protobuf\service.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\common.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\hash.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\map-util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\once.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\platform_macros.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stl_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stringprintf.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\strutil.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\substitute.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\template_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\type_traits.h" />
+    <ClInclude Include="..\src\google\protobuf\text_format.h" />
+    <ClInclude Include="..\src\google\protobuf\unknown_field_set.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite_inl.h" />
+    <ClInclude Include="config.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\importer.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\parser.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor_database.cc" />
+    <ClCompile Include="..\src\google\protobuf\dynamic_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set_heavy.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_reflection.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_util.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\coded_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\gzip_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\printer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\tokenizer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\message.cc" />
+    <ClCompile Include="..\src\google\protobuf\message_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\reflection_ops.cc" />
+    <ClCompile Include="..\src\google\protobuf\repeated_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\service.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\common.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\once.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\stringprintf.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\structurally_valid.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\strutil.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\substitute.cc" />
+    <ClCompile Include="..\src\google\protobuf\text_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\unknown_field_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format_lite.cc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{3E283F37-A4ED-41B7-A3E6-A2D89D131A30}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\importer.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\parser.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor_database.h" />
+    <ClInclude Include="..\src\google\protobuf\dynamic_message.h" />
+    <ClInclude Include="..\src\google\protobuf\extension_set.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_reflection.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_util.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream_inl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\gzip_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\printer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\tokenizer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\message.h" />
+    <ClInclude Include="..\src\google\protobuf\message_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\reflection_ops.h" />
+    <ClInclude Include="..\src\google\protobuf\repeated_field.h" />
+    <ClInclude Include="..\src\google\protobuf\service.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\common.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\hash.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\map-util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\once.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\platform_macros.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stl_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stringprintf.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\strutil.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\substitute.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\template_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\type_traits.h" />
+    <ClInclude Include="..\src\google\protobuf\text_format.h" />
+    <ClInclude Include="..\src\google\protobuf\unknown_field_set.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite_inl.h" />
+    <ClInclude Include="config.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\importer.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\parser.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor_database.cc" />
+    <ClCompile Include="..\src\google\protobuf\dynamic_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set_heavy.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_reflection.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_util.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\coded_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\gzip_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\printer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\tokenizer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\message.cc" />
+    <ClCompile Include="..\src\google\protobuf\message_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\reflection_ops.cc" />
+    <ClCompile Include="..\src\google\protobuf\repeated_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\service.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\common.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\once.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\stringprintf.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\structurally_valid.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\strutil.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\substitute.cc" />
+    <ClCompile Include="..\src\google\protobuf\text_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\unknown_field_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format_lite.cc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{3E283F37-A4ED-41B7-A3E6-A2D89D131A30}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\importer.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\parser.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor_database.h" />
+    <ClInclude Include="..\src\google\protobuf\dynamic_message.h" />
+    <ClInclude Include="..\src\google\protobuf\extension_set.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_reflection.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_util.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream_inl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\gzip_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\printer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\tokenizer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\message.h" />
+    <ClInclude Include="..\src\google\protobuf\message_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\reflection_ops.h" />
+    <ClInclude Include="..\src\google\protobuf\repeated_field.h" />
+    <ClInclude Include="..\src\google\protobuf\service.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\common.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\hash.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\map-util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\once.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\platform_macros.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stl_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stringprintf.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\strutil.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\substitute.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\template_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\type_traits.h" />
+    <ClInclude Include="..\src\google\protobuf\text_format.h" />
+    <ClInclude Include="..\src\google\protobuf\unknown_field_set.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite_inl.h" />
+    <ClInclude Include="config.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\importer.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\parser.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor_database.cc" />
+    <ClCompile Include="..\src\google\protobuf\dynamic_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set_heavy.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_reflection.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_util.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\coded_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\gzip_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\printer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\tokenizer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\message.cc" />
+    <ClCompile Include="..\src\google\protobuf\message_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\reflection_ops.cc" />
+    <ClCompile Include="..\src\google\protobuf\repeated_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\service.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\common.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\once.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\stringprintf.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\structurally_valid.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\strutil.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\substitute.cc" />
+    <ClCompile Include="..\src\google\protobuf\text_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\unknown_field_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format_lite.cc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{3E283F37-A4ED-41B7-A3E6-A2D89D131A30}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\importer.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\parser.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor_database.h" />
+    <ClInclude Include="..\src\google\protobuf\dynamic_message.h" />
+    <ClInclude Include="..\src\google\protobuf\extension_set.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_reflection.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_util.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream_inl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\gzip_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\printer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\tokenizer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\message.h" />
+    <ClInclude Include="..\src\google\protobuf\message_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\reflection_ops.h" />
+    <ClInclude Include="..\src\google\protobuf\repeated_field.h" />
+    <ClInclude Include="..\src\google\protobuf\service.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\common.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\hash.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\map-util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\once.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\platform_macros.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stl_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stringprintf.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\strutil.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\substitute.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\template_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\type_traits.h" />
+    <ClInclude Include="..\src\google\protobuf\text_format.h" />
+    <ClInclude Include="..\src\google\protobuf\unknown_field_set.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite_inl.h" />
+    <ClInclude Include="config.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\importer.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\parser.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor_database.cc" />
+    <ClCompile Include="..\src\google\protobuf\dynamic_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set_heavy.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_reflection.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_util.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\coded_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\gzip_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\printer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\tokenizer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\message.cc" />
+    <ClCompile Include="..\src\google\protobuf\message_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\reflection_ops.cc" />
+    <ClCompile Include="..\src\google\protobuf\repeated_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\service.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\common.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\once.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\stringprintf.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\structurally_valid.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\strutil.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\substitute.cc" />
+    <ClCompile Include="..\src\google\protobuf\text_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\unknown_field_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format_lite.cc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{3E283F37-A4ED-41B7-A3E6-A2D89D131A30}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\importer.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\parser.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor_database.h" />
+    <ClInclude Include="..\src\google\protobuf\dynamic_message.h" />
+    <ClInclude Include="..\src\google\protobuf\extension_set.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_reflection.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_util.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream_inl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\gzip_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\printer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\tokenizer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\message.h" />
+    <ClInclude Include="..\src\google\protobuf\message_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\reflection_ops.h" />
+    <ClInclude Include="..\src\google\protobuf\repeated_field.h" />
+    <ClInclude Include="..\src\google\protobuf\service.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\common.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\hash.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\map-util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\once.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\platform_macros.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stl_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stringprintf.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\strutil.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\substitute.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\template_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\type_traits.h" />
+    <ClInclude Include="..\src\google\protobuf\text_format.h" />
+    <ClInclude Include="..\src\google\protobuf\unknown_field_set.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite_inl.h" />
+    <ClInclude Include="config.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\importer.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\parser.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor_database.cc" />
+    <ClCompile Include="..\src\google\protobuf\dynamic_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set_heavy.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_reflection.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_util.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\coded_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\gzip_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\printer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\tokenizer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\message.cc" />
+    <ClCompile Include="..\src\google\protobuf\message_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\reflection_ops.cc" />
+    <ClCompile Include="..\src\google\protobuf\repeated_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\service.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\common.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\once.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\stringprintf.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\structurally_valid.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\strutil.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\substitute.cc" />
+    <ClCompile Include="..\src\google\protobuf\text_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\unknown_field_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format_lite.cc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{3E283F37-A4ED-41B7-A3E6-A2D89D131A30}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\importer.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\parser.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor_database.h" />
+    <ClInclude Include="..\src\google\protobuf\dynamic_message.h" />
+    <ClInclude Include="..\src\google\protobuf\extension_set.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_reflection.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_util.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream_inl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\gzip_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\printer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\tokenizer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\message.h" />
+    <ClInclude Include="..\src\google\protobuf\message_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\reflection_ops.h" />
+    <ClInclude Include="..\src\google\protobuf\repeated_field.h" />
+    <ClInclude Include="..\src\google\protobuf\service.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\common.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\hash.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\map-util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\once.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\platform_macros.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stl_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stringprintf.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\strutil.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\substitute.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\template_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\type_traits.h" />
+    <ClInclude Include="..\src\google\protobuf\text_format.h" />
+    <ClInclude Include="..\src\google\protobuf\unknown_field_set.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite_inl.h" />
+    <ClInclude Include="config.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\importer.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\parser.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor_database.cc" />
+    <ClCompile Include="..\src\google\protobuf\dynamic_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set_heavy.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_reflection.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_util.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\coded_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\gzip_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\printer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\tokenizer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\message.cc" />
+    <ClCompile Include="..\src\google\protobuf\message_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\reflection_ops.cc" />
+    <ClCompile Include="..\src\google\protobuf\repeated_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\service.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\common.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\once.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\stringprintf.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\structurally_valid.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\strutil.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\substitute.cc" />
+    <ClCompile Include="..\src\google\protobuf\text_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\unknown_field_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format_lite.cc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{3E283F37-A4ED-41B7-A3E6-A2D89D131A30}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\importer.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\parser.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor_database.h" />
+    <ClInclude Include="..\src\google\protobuf\dynamic_message.h" />
+    <ClInclude Include="..\src\google\protobuf\extension_set.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_reflection.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_util.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream_inl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\gzip_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\printer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\tokenizer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\message.h" />
+    <ClInclude Include="..\src\google\protobuf\message_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\reflection_ops.h" />
+    <ClInclude Include="..\src\google\protobuf\repeated_field.h" />
+    <ClInclude Include="..\src\google\protobuf\service.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\common.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\hash.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\map-util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\once.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\platform_macros.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stl_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stringprintf.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\strutil.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\substitute.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\template_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\type_traits.h" />
+    <ClInclude Include="..\src\google\protobuf\text_format.h" />
+    <ClInclude Include="..\src\google\protobuf\unknown_field_set.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite_inl.h" />
+    <ClInclude Include="config.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\importer.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\parser.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor_database.cc" />
+    <ClCompile Include="..\src\google\protobuf\dynamic_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set_heavy.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_reflection.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_util.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\coded_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\gzip_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\printer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\tokenizer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\message.cc" />
+    <ClCompile Include="..\src\google\protobuf\message_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\reflection_ops.cc" />
+    <ClCompile Include="..\src\google\protobuf\repeated_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\service.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\common.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\once.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\stringprintf.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\structurally_valid.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\strutil.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\substitute.cc" />
+    <ClCompile Include="..\src\google\protobuf\text_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\unknown_field_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format_lite.cc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{3E283F37-A4ED-41B7-A3E6-A2D89D131A30}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\importer.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\parser.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\descriptor_database.h" />
+    <ClInclude Include="..\src\google\protobuf\dynamic_message.h" />
+    <ClInclude Include="..\src\google\protobuf\extension_set.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_reflection.h" />
+    <ClInclude Include="..\src\google\protobuf\generated_message_util.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\coded_stream_inl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\gzip_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\printer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\tokenizer.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl.h" />
+    <ClInclude Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\message.h" />
+    <ClInclude Include="..\src\google\protobuf\message_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\reflection_ops.h" />
+    <ClInclude Include="..\src\google\protobuf\repeated_field.h" />
+    <ClInclude Include="..\src\google\protobuf\service.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\common.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\hash.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\map-util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\once.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\platform_macros.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stl_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\stringprintf.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\strutil.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\substitute.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\template_util.h" />
+    <ClInclude Include="..\src\google\protobuf\stubs\type_traits.h" />
+    <ClInclude Include="..\src\google\protobuf\text_format.h" />
+    <ClInclude Include="..\src\google\protobuf\unknown_field_set.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite.h" />
+    <ClInclude Include="..\src\google\protobuf\wire_format_lite_inl.h" />
+    <ClInclude Include="config.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\importer.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\parser.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor_database.cc" />
+    <ClCompile Include="..\src\google\protobuf\dynamic_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set_heavy.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_reflection.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_util.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\coded_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\gzip_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\printer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\tokenizer.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_impl_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\message.cc" />
+    <ClCompile Include="..\src\google\protobuf\message_lite.cc" />
+    <ClCompile Include="..\src\google\protobuf\reflection_ops.cc" />
+    <ClCompile Include="..\src\google\protobuf\repeated_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\service.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\common.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\once.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\stringprintf.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\structurally_valid.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\strutil.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\substitute.cc" />
+    <ClCompile Include="..\src\google\protobuf\text_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\unknown_field_set.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format_lite.cc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/ext/patches/protobuf/vsprojects/libprotoc.vcxproj b/ext/patches/protobuf/vsprojects/libprotoc.vcxproj
new file mode 100644
index 0000000..f174243
--- /dev/null
+++ b/ext/patches/protobuf/vsprojects/libprotoc.vcxproj
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+      <IntDir>\$(Platform)\$(Configuration)\</IntDir>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+      <IntDir>\$(Platform)\$(Configuration)\</IntDir>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+      <IntDir>\$(Platform)\$(Configuration)\</IntDir>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+      <IntDir>\$(Platform)\$(Configuration)\</IntDir>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\code_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\command_line_interface.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_options.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_doc_comment.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\python\python_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\subprocess.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\zip_writer.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\code_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\command_line_interface.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_doc_comment.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\python\python_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\subprocess.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\zip_writer.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/ext/patches/protobuf/vsprojects/libprotoc.vcxproj.old b/ext/patches/protobuf/vsprojects/libprotoc.vcxproj.old
new file mode 100644
index 0000000..da875a6
--- /dev/null
+++ b/ext/patches/protobuf/vsprojects/libprotoc.vcxproj.old
@@ -0,0 +1,1600 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\code_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\command_line_interface.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_options.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_doc_comment.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\python\python_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\subprocess.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\zip_writer.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\code_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\command_line_interface.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_doc_comment.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\python\python_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\subprocess.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\zip_writer.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\code_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\command_line_interface.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_options.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_doc_comment.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\python\python_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\subprocess.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\zip_writer.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\code_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\command_line_interface.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_doc_comment.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\python\python_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\subprocess.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\zip_writer.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\code_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\command_line_interface.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_options.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_doc_comment.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\python\python_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\subprocess.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\zip_writer.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\code_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\command_line_interface.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_doc_comment.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\python\python_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\subprocess.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\zip_writer.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\code_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\command_line_interface.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_options.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_doc_comment.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\python\python_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\subprocess.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\zip_writer.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\code_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\command_line_interface.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_doc_comment.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\python\python_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\subprocess.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\zip_writer.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\code_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\command_line_interface.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_options.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_doc_comment.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\python\python_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\subprocess.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\zip_writer.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\code_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\command_line_interface.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_doc_comment.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\python\python_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\subprocess.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\zip_writer.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\code_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\command_line_interface.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_options.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_doc_comment.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\python\python_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\subprocess.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\zip_writer.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\code_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\command_line_interface.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_doc_comment.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\python\python_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\subprocess.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\zip_writer.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\code_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\command_line_interface.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_options.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_doc_comment.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\python\python_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\subprocess.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\zip_writer.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\code_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\command_line_interface.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_doc_comment.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\python\python_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\subprocess.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\zip_writer.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\code_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\command_line_interface.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_options.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_doc_comment.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_enum_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_extension.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_file.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_helpers.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_message_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_primitive_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_service.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\java\java_string_field.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\plugin.pb.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\python\python_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\subprocess.h" />
+    <ClInclude Include="..\src\google\protobuf\compiler\zip_writer.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\code_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\command_line_interface.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_doc_comment.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_enum_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_extension.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_file.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_helpers.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_message_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_primitive_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_service.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_string_field.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\plugin.pb.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\python\python_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\subprocess.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\zip_writer.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/ext/patches/protobuf/vsprojects/lite-test.vcxproj b/ext/patches/protobuf/vsprojects/lite-test.vcxproj
new file mode 100644
index 0000000..16d9e2c
--- /dev/null
+++ b/ext/patches/protobuf/vsprojects/lite-test.vcxproj
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{12015ACE-42BE-4952-A5A0-44A9A46908E2}</ProjectGuid>
+    <RootNamespace>tests</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <CustomBuildStep>
+      <Message />
+      <Command />
+    </CustomBuildStep>
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;../gtest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_VARIADIC_MAX=10;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <CustomBuildStep>
+      <Message>
+      </Message>
+      <Command>
+      </Command>
+    </CustomBuildStep>
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;../gtest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_VARIADIC_MAX=10;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <CustomBuildStep>
+      <Message />
+      <Command />
+    </CustomBuildStep>
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;../gtest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_VARIADIC_MAX=10;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <CustomBuildStep>
+      <Message>
+      </Message>
+      <Command>
+      </Command>
+    </CustomBuildStep>
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;../gtest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_VARIADIC_MAX=10;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\test_util_lite.h" />
+    <ClInclude Include="google\protobuf\unittest_import_lite.pb.h" />
+    <ClInclude Include="google\protobuf\unittest_import_public_lite.pb.h" />
+    <ClInclude Include="google\protobuf\unittest_lite.pb.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\lite_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\test_util_lite.cc" />
+    <ClCompile Include="google\protobuf\unittest_import_lite.pb.cc" />
+    <ClCompile Include="google\protobuf\unittest_import_public_lite.pb.cc" />
+    <ClCompile Include="google\protobuf\unittest_lite.pb.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <CustomBuild Include="..\src\google\protobuf\unittest_import_lite.proto">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating unittest_import_lite.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating unittest_import_lite.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_lite.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_lite.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">google\protobuf\unittest_import_lite.pb.h;google\protobuf\unittest_import_lite.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">google\protobuf\unittest_import_lite.pb.h;google\protobuf\unittest_import_lite.pb.cc;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating unittest_import_lite.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating unittest_import_lite.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_lite.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_lite.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">google\protobuf\unittest_import_lite.pb.h;google\protobuf\unittest_import_lite.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">google\protobuf\unittest_import_lite.pb.h;google\protobuf\unittest_import_lite.pb.cc;%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="..\src\google\protobuf\unittest_import_public_lite.proto">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating unittest_import_public_lite.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating unittest_import_public_lite.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public_lite.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public_lite.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">google\protobuf\unittest_import_public_lite.pb.h;google\protobuf\unittest_import_public_lite.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">google\protobuf\unittest_import_public_lite.pb.h;google\protobuf\unittest_import_public_lite.pb.cc;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating unittest_import_public_lite.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating unittest_import_public_lite.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public_lite.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public_lite.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">google\protobuf\unittest_import_public_lite.pb.h;google\protobuf\unittest_import_public_lite.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">google\protobuf\unittest_import_public_lite.pb.h;google\protobuf\unittest_import_public_lite.pb.cc;%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="..\src\google\protobuf\unittest_lite.proto">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating unittest_lite.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating unittest_lite.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">google\protobuf\unittest_lite.pb.h;google\protobuf\unittest_lite.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">google\protobuf\unittest_lite.pb.h;google\protobuf\unittest_lite.pb.cc;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating unittest_lite.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating unittest_lite.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">google\protobuf\unittest_lite.pb.h;google\protobuf\unittest_lite.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">google\protobuf\unittest_lite.pb.h;google\protobuf\unittest_lite.pb.cc;%(Outputs)</Outputs>
+    </CustomBuild>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf-lite.vcxproj">
+      <Project>{49ea010d-706f-4be2-a397-77854b72a040}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="protoc.vcxproj">
+      <Project>{1738d5f6-ed1e-47e0-b2f0-456864b93c1e}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/ext/patches/protobuf/vsprojects/protoc.vcxproj b/ext/patches/protobuf/vsprojects/protoc.vcxproj
new file mode 100644
index 0000000..3a420aa
--- /dev/null
+++ b/ext/patches/protobuf/vsprojects/protoc.vcxproj
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{1738D5F6-ED1E-47E0-B2F0-456864B93C1E}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>\$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\main.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="libprotoc.vcxproj">
+      <Project>{b84ff31a-5f9a-46f8-ab22-dbfc9bece3be}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/ext/patches/protobuf/vsprojects/protoc.vcxproj.old b/ext/patches/protobuf/vsprojects/protoc.vcxproj.old
new file mode 100644
index 0000000..7992e3a
--- /dev/null
+++ b/ext/patches/protobuf/vsprojects/protoc.vcxproj.old
@@ -0,0 +1,1328 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{1738D5F6-ED1E-47E0-B2F0-456864B93C1E}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\main.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="libprotoc.vcxproj">
+      <Project>{b84ff31a-5f9a-46f8-ab22-dbfc9bece3be}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{1738D5F6-ED1E-47E0-B2F0-456864B93C1E}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\main.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="libprotoc.vcxproj">
+      <Project>{b84ff31a-5f9a-46f8-ab22-dbfc9bece3be}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{1738D5F6-ED1E-47E0-B2F0-456864B93C1E}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\main.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="libprotoc.vcxproj">
+      <Project>{b84ff31a-5f9a-46f8-ab22-dbfc9bece3be}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{1738D5F6-ED1E-47E0-B2F0-456864B93C1E}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\main.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="libprotoc.vcxproj">
+      <Project>{b84ff31a-5f9a-46f8-ab22-dbfc9bece3be}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{1738D5F6-ED1E-47E0-B2F0-456864B93C1E}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\main.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="libprotoc.vcxproj">
+      <Project>{b84ff31a-5f9a-46f8-ab22-dbfc9bece3be}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{1738D5F6-ED1E-47E0-B2F0-456864B93C1E}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\main.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="libprotoc.vcxproj">
+      <Project>{b84ff31a-5f9a-46f8-ab22-dbfc9bece3be}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{1738D5F6-ED1E-47E0-B2F0-456864B93C1E}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\main.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="libprotoc.vcxproj">
+      <Project>{b84ff31a-5f9a-46f8-ab22-dbfc9bece3be}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{1738D5F6-ED1E-47E0-B2F0-456864B93C1E}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\main.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="libprotoc.vcxproj">
+      <Project>{b84ff31a-5f9a-46f8-ab22-dbfc9bece3be}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/ext/patches/protobuf/vsprojects/test_plugin.vcxproj b/ext/patches/protobuf/vsprojects/test_plugin.vcxproj
new file mode 100644
index 0000000..4792640
--- /dev/null
+++ b/ext/patches/protobuf/vsprojects/test_plugin.vcxproj
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{CBBD34E5-02B0-40D5-B6D8-BFEA83E18B32}</ProjectGuid>
+    <RootNamespace>test_plugin</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <CustomBuildStep>
+      <Message />
+      <Command />
+    </CustomBuildStep>
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;../gtest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_VARIADIC_MAX=10;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <CustomBuildStep>
+      <Message>
+      </Message>
+      <Command>
+      </Command>
+    </CustomBuildStep>
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;../gtest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_VARIADIC_MAX=10;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <CustomBuildStep>
+      <Message />
+      <Command />
+    </CustomBuildStep>
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;../gtest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_VARIADIC_MAX=10;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <CustomBuildStep>
+      <Message>
+      </Message>
+      <Command>
+      </Command>
+    </CustomBuildStep>
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;../gtest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_VARIADIC_MAX=10;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\mock_code_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\testing\file.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\mock_code_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\test_plugin.cc" />
+    <ClCompile Include="..\src\google\protobuf\testing\file.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\gtest\msvc\gtest.vcxproj">
+      <Project>{c8f6c172-56f2-4e76-b5fa-c3b423b31be7}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="libprotoc.vcxproj">
+      <Project>{b84ff31a-5f9a-46f8-ab22-dbfc9bece3be}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/ext/patches/protobuf/vsprojects/tests.vcxproj b/ext/patches/protobuf/vsprojects/tests.vcxproj
new file mode 100644
index 0000000..c162efe
--- /dev/null
+++ b/ext/patches/protobuf/vsprojects/tests.vcxproj
@@ -0,0 +1,446 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{4DF72760-C055-40A5-A77E-30A17E2AC2DB}</ProjectGuid>
+    <RootNamespace>tests</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>Release\</OutDir>
+    <IntDir>Release\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <CustomBuildStep>
+      <Message />
+      <Command />
+    </CustomBuildStep>
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;../gtest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_VARIADIC_MAX=10;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <CustomBuildStep>
+      <Message>
+      </Message>
+      <Command>
+      </Command>
+    </CustomBuildStep>
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../src;.;../gtest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_VARIADIC_MAX=10;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <CustomBuildStep>
+      <Message />
+      <Command />
+    </CustomBuildStep>
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;../gtest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_VARIADIC_MAX=10;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <CustomBuildStep>
+      <Message>
+      </Message>
+      <Command>
+      </Command>
+    </CustomBuildStep>
+    <ClCompile>
+      <AdditionalOptions>/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>../src;.;../gtest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_VARIADIC_MAX=10;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\google\protobuf\compiler\mock_code_generator.h" />
+    <ClInclude Include="..\src\google\protobuf\testing\file.h" />
+    <ClInclude Include="..\src\google\protobuf\testing\googletest.h" />
+    <ClInclude Include="..\src\google\protobuf\test_util.h" />
+    <ClInclude Include="google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.h" />
+    <ClInclude Include="google\protobuf\unittest.pb.h" />
+    <ClInclude Include="google\protobuf\unittest_custom_options.pb.h" />
+    <ClInclude Include="google\protobuf\unittest_embed_optimize_for.pb.h" />
+    <ClInclude Include="google\protobuf\unittest_import.pb.h" />
+    <ClInclude Include="google\protobuf\unittest_import_public.pb.h" />
+    <ClInclude Include="google\protobuf\unittest_lite_imports_nonline.pb.h" />
+    <ClInclude Include="google\protobuf\unittest_mset.pb.h" />
+    <ClInclude Include="google\protobuf\unittest_no_generic_services.pb.h" />
+    <ClInclude Include="google\protobuf\unittest_optimize_for.pb.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\google\protobuf\compiler\command_line_interface_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_bootstrap_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_plugin_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\cpp\cpp_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\importer_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_doc_comment_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\java\java_plugin_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\mock_code_generator.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\parser_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\compiler\python\python_plugin_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor_database_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\descriptor_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\dynamic_message_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\extension_set_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\generated_message_reflection_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\coded_stream_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\printer_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\tokenizer_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\io\zero_copy_stream_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\message_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\reflection_ops_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\repeated_field_reflection_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\repeated_field_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\common_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\once_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\stringprintf_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\structurally_valid_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\strutil_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\template_util_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\stubs\type_traits_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\testing\file.cc" />
+    <ClCompile Include="..\src\google\protobuf\testing\googletest.cc" />
+    <ClCompile Include="..\src\google\protobuf\test_util.cc" />
+    <ClCompile Include="..\src\google\protobuf\text_format_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\unknown_field_set_unittest.cc" />
+    <ClCompile Include="..\src\google\protobuf\wire_format_unittest.cc" />
+    <ClCompile Include="google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.cc" />
+    <ClCompile Include="google\protobuf\unittest.pb.cc" />
+    <ClCompile Include="google\protobuf\unittest_custom_options.pb.cc" />
+    <ClCompile Include="google\protobuf\unittest_embed_optimize_for.pb.cc" />
+    <ClCompile Include="google\protobuf\unittest_import.pb.cc" />
+    <ClCompile Include="google\protobuf\unittest_import_public.pb.cc" />
+    <ClCompile Include="google\protobuf\unittest_lite_imports_nonlite.pb.cc" />
+    <ClCompile Include="google\protobuf\unittest_mset.pb.cc" />
+    <ClCompile Include="google\protobuf\unittest_no_generic_services.pb.cc" />
+    <ClCompile Include="google\protobuf\unittest_optimize_for.pb.cc" />
+  </ItemGroup>
+  <ItemGroup>
+    <CustomBuild Include="..\src\google\protobuf\compiler\cpp\cpp_test_bad_identifiers.proto">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating cpp_test_bad_identifiers.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating cpp_test_bad_identifiers.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.h;google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.h;google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.cc;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating cpp_test_bad_identifiers.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating cpp_test_bad_identifiers.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.h;google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.h;google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.cc;%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="..\src\google\protobuf\unittest.proto">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating unittest.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating unittest.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">google\protobuf\unittest.pb.h;google\protobuf\unittest.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">google\protobuf\unittest.pb.h;google\protobuf\unittest.pb.cc;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating unittest.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating unittest.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">google\protobuf\unittest.pb.h;google\protobuf\unittest.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">google\protobuf\unittest.pb.h;google\protobuf\unittest.pb.cc;%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="..\src\google\protobuf\unittest_custom_options.proto">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating unittest_custom_options.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating unittest_custom_options.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_custom_options.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_custom_options.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">google\protobuf\unittest_custom_options.pb.h;google\protobuf\unittest_custom_options.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">google\protobuf\unittest_custom_options.pb.h;google\protobuf\unittest_custom_options.pb.cc;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating unittest_custom_options.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating unittest_custom_options.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_custom_options.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_custom_options.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">google\protobuf\unittest_custom_options.pb.h;google\protobuf\unittest_custom_options.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">google\protobuf\unittest_custom_options.pb.h;google\protobuf\unittest_custom_options.pb.cc;%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="..\src\google\protobuf\unittest_embed_optimize_for.proto">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating unittest_embed_optimize_for.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating unittest_embed_optimize_for.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_embed_optimize_for.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_embed_optimize_for.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">google\protobuf\unittest_embed_optimize_for.pb.h;google\protobuf\unittest_embed_optimize_for.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">google\protobuf\unittest_embed_optimize_for.pb.h;google\protobuf\unittest_embed_optimize_for.pb.cc;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating unittest_embed_optimize_for.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating unittest_embed_optimize_for.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_embed_optimize_for.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_embed_optimize_for.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">google\protobuf\unittest_embed_optimize_for.pb.h;google\protobuf\unittest_embed_optimize_for.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">google\protobuf\unittest_embed_optimize_for.pb.h;google\protobuf\unittest_embed_optimize_for.pb.cc;%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="..\src\google\protobuf\unittest_import.proto">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating unittest_import.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating unittest_import.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">google\protobuf\unittest_import.pb.h;google\protobuf\unittest_import.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">google\protobuf\unittest_import.pb.h;google\protobuf\unittest_import.pb.cc;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating unittest_import.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating unittest_import.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">google\protobuf\unittest_import.pb.h;google\protobuf\unittest_import.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">google\protobuf\unittest_import.pb.h;google\protobuf\unittest_import.pb.cc;%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="..\src\google\protobuf\unittest_import_public.proto">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating unittest_import_public.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating unittest_import_public.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">google\protobuf\unittest_import_public.pb.h;google\protobuf\unittest_import_public.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">google\protobuf\unittest_import_public.pb.h;google\protobuf\unittest_import_public.pb.cc;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating unittest_import_public.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating unittest_import_public.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">google\protobuf\unittest_import_public.pb.h;google\protobuf\unittest_import_public.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">google\protobuf\unittest_import_public.pb.h;google\protobuf\unittest_import_public.pb.cc;%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="..\src\google\protobuf\unittest_lite_imports_nonlite.proto">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating unittest_lite_imports_nonlite.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating unittest_lite_imports_nonlite.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite_imports_nonlite.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite_imports_nonlite.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">google\protobuf\unittest_lite_imports_nonlite.pb.h;google\protobuf\unittest_lite_imports_nonlite.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">google\protobuf\unittest_lite_imports_nonlite.pb.h;google\protobuf\unittest_lite_imports_nonlite.pb.cc;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating unittest_lite_imports_nonlite.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating unittest_lite_imports_nonlite.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite_imports_nonlite.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite_imports_nonlite.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">google\protobuf\unittest_lite_imports_nonlite.pb.h;google\protobuf\unittest_lite_imports_nonlite.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">google\protobuf\unittest_lite_imports_nonlite.pb.h;google\protobuf\unittest_lite_imports_nonlite.pb.cc;%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="..\src\google\protobuf\unittest_mset.proto">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating unittest_mset.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating unittest_mset.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_mset.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_mset.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">google\protobuf\unittest_mset.pb.h;google\protobuf\unittest_mset.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">google\protobuf\unittest_mset.pb.h;google\protobuf\unittest_mset.pb.cc;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating unittest_mset.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating unittest_mset.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_mset.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_mset.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">google\protobuf\unittest_mset.pb.h;google\protobuf\unittest_mset.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">google\protobuf\unittest_mset.pb.h;google\protobuf\unittest_mset.pb.cc;%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="..\src\google\protobuf\unittest_no_generic_services.proto">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating unittest_no_generic_services.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating unittest_no_generic_services.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_generic_services.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_generic_services.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">google\protobuf\unittest_no_generic_services.pb.h;google\protobuf\unittest_no_generic_services.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">google\protobuf\unittest_no_generic_services.pb.h;google\protobuf\unittest_no_generic_services.pb.cc;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating unittest_no_generic_services.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating unittest_no_generic_services.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_generic_services.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_generic_services.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">google\protobuf\unittest_no_generic_services.pb.h;google\protobuf\unittest_no_generic_services.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">google\protobuf\unittest_no_generic_services.pb.h;google\protobuf\unittest_no_generic_services.pb.cc;%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="..\src\google\protobuf\unittest_optimize_for.proto">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating unittest_optimize_for.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating unittest_optimize_for.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_optimize_for.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_optimize_for.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">google\protobuf\unittest_optimize_for.pb.h;google\protobuf\unittest_optimize_for.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">google\protobuf\unittest_optimize_for.pb.h;google\protobuf\unittest_optimize_for.pb.cc;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating unittest_optimize_for.pb.{h,cc}...</Message>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating unittest_optimize_for.pb.{h,cc}...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_optimize_for.proto
+</Command>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_optimize_for.proto
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">google\protobuf\unittest_optimize_for.pb.h;google\protobuf\unittest_optimize_for.pb.cc;%(Outputs)</Outputs>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">google\protobuf\unittest_optimize_for.pb.h;google\protobuf\unittest_optimize_for.pb.cc;%(Outputs)</Outputs>
+    </CustomBuild>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\gtest\msvc\gtest.vcxproj">
+      <Project>{c8f6c172-56f2-4e76-b5fa-c3b423b31be7}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="..\gtest\msvc\gtest_main.vcxproj">
+      <Project>{3af54c8a-10bf-4332-9147-f68ed9862032}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="libprotobuf.vcxproj">
+      <Project>{3e283f37-a4ed-41b7-a3e6-a2d89d131a30}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="libprotoc.vcxproj">
+      <Project>{b84ff31a-5f9a-46f8-ab22-dbfc9bece3be}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="protoc.vcxproj">
+      <Project>{1738d5f6-ed1e-47e0-b2f0-456864b93c1e}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="test_plugin.vcxproj">
+      <Project>{cbbd34e5-02b0-40d5-b6d8-bfea83e18b32}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/ext/post_install_pwiz.cmake b/ext/post_install_pwiz.cmake
new file mode 100644
index 0000000..5bbcf00
--- /dev/null
+++ b/ext/post_install_pwiz.cmake
@@ -0,0 +1,62 @@
+# This is a CMake script for installing ProteoWizard for use in building crux.
+# We have to rename one of the boost libraries and install the Thermo RAW
+# reader DLL
+
+# This script expects two variables to be passed on the command line:
+#   BUILD_TYPE, the building configuration: Release or Debug
+#   PREFIX, the location to store binaries from the build.
+
+# This macro checks download status codes for errors
+macro (check_status status_code)
+  if (${status_code} EQUAL 0)
+    message(STATUS "Fixed ProteoWizard install.")
+  else ()
+    message(
+      FATAL_ERROR 
+      "ProteoWizard install failed"
+    )
+  endif (${status_code} EQUAL 0)
+endmacro (check_status)
+
+if (WIN32 AND NOT CYGWIN)
+  if (${BUILD_TYPE} MATCHES "Debug")
+    execute_process(
+      COMMAND ${CMAKE_COMMAND} -E copy 
+        ${PREFIX}/lib/libboost_filesystem-vc120-mt-gd.lib
+        ${PREFIX}/lib/libboost_filesystem-vc120-mt-gd-1_56.lib
+      RESULT_VARIABLE status
+    )
+    execute_process(
+      COMMAND ${CMAKE_COMMAND} -E copy 
+        ${PREFIX}/lib/libboost_nowide-vc120-mt-gd.lib
+        ${PREFIX}/lib/libboost_nowide-vc120-mt-gd-1_56.lib
+      RESULT_VARIABLE status
+    )
+  else()
+    execute_process(
+      COMMAND ${CMAKE_COMMAND} -E copy 
+        ${PREFIX}/lib/libboost_filesystem-vc120-mt.lib
+        ${PREFIX}/lib/libboost_filesystem-vc120-mt-1_56.lib
+      RESULT_VARIABLE status
+    )
+    execute_process(
+      COMMAND ${CMAKE_COMMAND} -E copy 
+        ${PREFIX}/lib/libboost_nowide-vc120-mt.lib
+        ${PREFIX}/lib/libboost_nowide-vc120-mt-1_56.lib
+      RESULT_VARIABLE status
+    )
+    execute_process(
+      COMMAND ${CMAKE_COMMAND} -E copy 
+        ${PREFIX}/lib/libboost_chrono-vc120-mt.lib
+        ${PREFIX}/lib/libboost_chrono-vc120-mt-1_56.lib
+      RESULT_VARIABLE status
+    )
+  endif (${BUILD_TYPE} MATCHES "Debug")
+  check_status(status)
+  execute_process(
+    COMMAND regsvr32 
+      /s
+      ${PREFIX}/lib/MSFileReader.XRawfile2.dll
+  )
+  # Don't care about status of regsvr32 command
+endif (WIN32 AND NOT CYGWIN)
diff --git a/install_manifest.txt b/install_manifest.txt
new file mode 100644
index 0000000..d76fb2c
--- /dev/null
+++ b/install_manifest.txt
@@ -0,0 +1,189 @@
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/./license.txt
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./xlink-score-spectrum.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./mstoolkit.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./q-ranker.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./release-notes.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./faq.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./spectral-counts.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./Makefile
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./cascade-search.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./tide-index.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./bullseye.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./param-medic.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./CMakeFiles/CMakeDirectoryInformation.cmake
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./CMakeFiles/progress.marks
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./CMakeFiles/create-docs.dir/build.make
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./CMakeFiles/create-docs.dir/progress.make
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./CMakeFiles/create-docs.dir/DependInfo.cmake
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./CMakeFiles/create-docs.dir/depend.internal
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./CMakeFiles/create-docs.dir/depend.make
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./CMakeFiles/create-docs.dir/cmake_clean.cmake
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./commands/hardklor_standalone_to_crux.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./commands/bullseye_standalone_to_crux.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./sort-by-column.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./index.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./percolator.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./deploy-to-web.sh
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./file-formats/barista-xml-format.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./file-formats/sample.fasta
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./file-formats/txt-format.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./file-formats/sqt-format.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./file-formats/features.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./file-formats/parameter-file.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./file-formats/ms2-format.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./file-formats/fasta-format.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./styles.css
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./predict-peptide-ions.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./print-processed-spectra.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./default.params
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./search-for-xlinks.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./generate-peptides.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./tide-search.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./hardklor.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./example-files/search.target.txt
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./example-files/small-yeast.fasta
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./example-files/default.params
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./example-files/target.sqt
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./example-files/demo.ms2
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./subtract-index.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./read-tide-index.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./.svnignore
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./images/tutorialicon.png
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./images/linkicon.png
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./images/crux-logo-skyline.png
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./images/crux-logo-text.png
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./images/crux-logo.png
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./images/hamburger-menu.png
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./images/schematic.png
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./images/stored-xcorr.png
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./pipeline.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./xlink-assign-ions.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./template.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./contributors.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./fileformats.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./barista.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./param-table.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./glossary.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./create-docs.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./cmake_install.cmake
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./create-docs.cmake
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./stat-column.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./download.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./extract-rows.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./extract-columns.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./psm-convert.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./assign-confidence.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./tutorials/gettingstarted.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./tutorials/search.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./tutorials/install.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./tutorials/customizedsearch.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./tutorials/spectralcounts.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./demos/demo1.sh
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./demos/tsv2html.py
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./make-pin.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./get-ms2-spectrum.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./runall
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/num_enzyme_termini.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/variable_mod06.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_P_proline.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/peptide_mass_tolerance.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_X_user_amino_acid.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_W_tryptophan.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/skip_researching.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/use_Y_ions.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/use_NL_ions.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/variable_mod08.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/num_output_lines.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/output_percolatorfile.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/peptide_mass_units.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_I_isoleucine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_S_serine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/comet.params
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/print_expect_score.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/variable_mod03.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/max_variable_mods_in_peptide.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/use_B_ions.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/spectrum_batch_size.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/decoy_search.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/remove_precursor_peak.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_N_asparagine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/mass_type_fragment.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/clip_nterm_methionine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_F_phenylalanine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/nucleotide_reading_frame.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/scan_range.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_V_valine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/minimum_peaks.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_G_glycine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_D_aspartic_acid.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/fragment_bin_tol.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/max_fragment_charge.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/index.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_C_cysteine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_L_leucine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/isotope_error.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_Nterm_peptide.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_R_arginine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/output_outfiles.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_O_ornithine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/max_precursor_charge.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/head.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/override_charge.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/use_sparse_matrix.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_Y_tyrosine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_A_alanine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/variable_mod09.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/show_fragment_ions.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_Cterm_protein.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/combined.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/num_threads.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/output_pepxmlfile.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/digest_mass_range.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/use_Z_ions.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_M_methionine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/output_sqtfile.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_Q_glutamine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_B_user_amino_acid.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/minimum_intensity.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/remove_precursor_tolerance.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/use_A_ions.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/variable_mod05.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/use_C_ions.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/ms_level.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/fragment_bin_offset.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/variable_mod01.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/search_enzyme_number.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/use_X_ions.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_H_histidine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/variable_mod04.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_U_user_amino_acid.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_Cterm_peptide.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/variable_mod02.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/mass_type_parent.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_Z_user_amino_acid.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/activation_method.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_J_user_amino_acid.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/theoretical_fragment_ions.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_T_threonine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/allowed_missed_cleavage.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/output_txtfile.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/output_suffix.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/precursor_charge.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/database_name.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/content.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/convertCometPHPs.py
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_Nterm_protein.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/num_results.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/sample_enzyme_number.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_K_lysine.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/footer.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/require_variable_mod.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/variable_mod07.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/runall
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/output_sqtstream.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/decoy_prefix.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/add_E_glutamic_acid.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/topmenu.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/doc/./comet-options/clear_mz_range.html
+/data/TeamCity/buildAgent/work/779d99b0241b2175/_CPack_Packages/Linux/ZIP/crux-3.1.Linux.x86_64/bin/crux
diff --git a/license.txt b/license.txt
new file mode 100644
index 0000000..9176754
--- /dev/null
+++ b/license.txt
@@ -0,0 +1,12 @@
+Copyright 2007-2013 University of Washington
+Licensed under the Apache License, Version 2.0 (the "License"); 
+you may not use this file except in compliance with the License. 
+You may obtain a copy of the License at 
+
+  http://www.apache.org/licenses/LICENSE-2.0 
+
+Unless required by applicable law or agreed to in writing, software 
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+See the License for the specific language governing permissions and 
+limitations under the License. 
diff --git a/make-version-header.cmake b/make-version-header.cmake
new file mode 100644
index 0000000..6818ae1
--- /dev/null
+++ b/make-version-header.cmake
@@ -0,0 +1,24 @@
+if (EXISTS ${CMAKE_SOURCE_DIR}/.svn)
+  include(FindSubversion)
+
+# extract working copy information for SOURCE_DIR into MY_XXX variables
+  Subversion_WC_INFO(${SOURCE_DIR} MY)
+
+  file(WRITE crux_version.h.txt "#define CRUX_VERSION \"${CRUX_VERSION}.${MY_WC_REVISION}\"\n")
+
+# Copy the file to the final header only if the version changes
+# reduces needless rebuilds
+  execute_process(
+    COMMAND 
+      ${CMAKE_COMMAND} -E copy_if_different crux_version.h.txt crux_version.h
+  )
+else (EXISTS ${CMAKE_SOURCE_DIR}/.svn)
+  file(WRITE crux_version.h.txt "#define CRUX_VERSION \"${CRUX_VERSION}\"\n")
+
+# Copy the file to the final header only if the version changes
+# reduces needless rebuilds
+  execute_process(
+    COMMAND 
+      ${CMAKE_COMMAND} -E copy_if_different crux_version.h.txt crux_version.h
+  )
+endif (EXISTS ${CMAKE_SOURCE_DIR}/.svn)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000..46e3091
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,445 @@
+cmake_minimum_required(VERSION 2.8.4)
+cmake_policy(VERSION 2.8.4)
+
+add_subdirectory(app/bullseye)
+add_subdirectory(app/hardklor)
+add_subdirectory(app/qranker-barista)
+add_subdirectory(app/xlink)
+add_subdirectory(app/tide)
+
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+include_directories(.)
+include_directories(app/bullseye)
+include_directories(app/hardklor)
+include_directories(app/qranker-barista)
+include_directories(app/xlink)
+include_directories(${CMAKE_SOURCE_DIR}/src/io)
+include_directories(${CMAKE_SOURCE_DIR}/ext)
+include_directories(${CMAKE_BINARY_DIR})
+include_directories(${CMAKE_BINARY_DIR}/ext)
+include_directories(${CMAKE_BINARY_DIR}/ext/include)
+include_directories(${CMAKE_BINARY_DIR}/ext/include/CometSearch)
+include_directories(${CMAKE_BINARY_DIR}/ext/include/MSToolkit)
+include_directories(${CMAKE_BINARY_DIR}/ext/build/src/ProteoWizard/libraries/boost_1_56_0)
+include_directories(${CMAKE_BINARY_DIR}/ext/build/src/ProteoWizard/libraries/boost_aux)
+include_directories(${CMAKE_BINARY_DIR}/ext/build/src/percolator/src/)
+include_directories(${CMAKE_BINARY_DIR}/ext/build/src/percolator/src/fido)
+include_directories(${CMAKE_BINARY_DIR}/ext/build/src/percolator/src/picked_protein)
+include_directories(${CMAKE_BINARY_DIR}/ext/build/src/percolator-build/src/)
+include_directories(${CMAKE_BINARY_DIR}/ext/build/src/percolator-build/src/fido)
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/app/tide/protoobj)
+if (WIN32 AND NOT Cygwin)
+  # Needed to put DLL containing type libraries
+  # in include path for Windows
+  include_directories(${CMAKE_BINARY_DIR}/ext/lib)
+  # Needed to include gflags/gflags.h on Windows
+  include_directories(${CMAKE_BINARY_DIR}/ext/build/src/google-gflags/src/windows)
+  # Needed to include google/protobuf on Windows
+  include_directories(${CMAKE_BINARY_DIR}/ext/build/src/protobuf-2.5.0/src)
+  SET(
+    CMAKE_EXE_LINKER_FLAGS 
+    "${CMAKE_EXE_LINKER_FLAGS} /VERBOSE:LIB /NODEFAULTLIB:libboost_date_time-vc120-mt-1_56 /NODEFAULTLIB:libboost_system-vc120-mt-1_56 /NODEFAULTLIB:libboost_thread-vc120-mt-1_56"
+  )
+  SET(
+  CMAKE_EXE_LINKER_FLAGS_DEBUG 
+  "${CMAKE_EXE_LINKER_FLAGS}
+  /VERBOSE:LIB /NODEFAULTLIB:libboost_chrono-vc120-mt-gd-1_56 /NODEFAULTLIB:libboost_date_time-vc120-mt-gd-1_56 /NODEFAULTLIB:libboost_system-vc120-mt-gd-1_56 /NODEFAULTLIB:libboost_thread-vc120-mt-gd-1_56"
+)
+  #  Need Comet base directory for Windows
+  include_directories(${CMAKE_BINARY_DIR}/ext/build/src/comet/)
+
+  # On Windows we should build vendor libraries by default
+  if (NOT DEFINED INCLUDE_VENDOR_LIBRARIES)
+    set(INCLUDE_VENDOR_LIBRARIES TRUE)
+  endif (NOT DEFINED INCLUDE_VENDOR_LIBRARIES)
+
+endif (WIN32 AND NOT Cygwin)
+
+link_directories(.)
+link_directories(./app/bullseye)
+link_directories(./app/hardklor)
+link_directories(./app/qranker-barista)
+link_directories(./app/xlink)
+link_directories(${CMAKE_BINARY_DIR}/ext/lib)
+link_directories(${CMAKE_BINARY_DIR}/ext/build/src/percolator-build/src) 
+link_directories(${CMAKE_BINARY_DIR}/ext/build/src/percolator-build/src/fido)
+link_directories(${CMAKE_BINARY_DIR}/ext/build/src/percolator-build/src/picked_protein)
+if (WIN32 AND NOT Cygwin)
+ # Needed for windows build of vendor libraries
+  if (CMAKE_GENERATOR MATCHES "^.*Win64$")
+    link_directories(
+      ${CMAKE_BINARY_DIR}/ext/build/src/ProteoWizard/pwiz_aux/msrc/utility/vendor_api/Waters/vc12_x64
+      ${CMAKE_BINARY_DIR}/ext/build/src/ProteoWizard/pwiz_aux/msrc/utility/vendor_api/Bruker/x64
+    )
+  else (CMAKE_GENERATOR MATCHES "^.*Win64$")
+    link_directories(
+      ${CMAKE_BINARY_DIR}/ext/build/src/ProteoWizard/pwiz_aux/msrc/utility/vendor_api/Waters/vc12_x86
+      ${CMAKE_BINARY_DIR}/ext/build/src/ProteoWizard/pwiz_aux/msrc/utility/vendor_api/Bruker/x86
+    )
+  endif (CMAKE_GENERATOR MATCHES "^.*Win64$")
+endif (WIN32 AND NOT Cygwin)
+
+set (
+  crux_lib_files
+  app/SubtractIndexApplication.cpp
+  app/CascadeSearchApplication.cpp
+  app/AssignConfidenceApplication.cpp
+  util/Alphabet.cpp
+  util/AminoAcidUtil.cpp
+  util/ArgParser.cpp
+  util/CacheableMass.cpp
+  util/GlobalParams.cpp
+  io/carp.cpp
+  util/CarpStreamBuf.cpp
+  app/CometApplication.cpp
+  app/ComputeQValues.cpp
+  app/CreateDocs.cpp
+  util/crux-utils.cpp
+  model/Database.cpp
+  model/DatabaseProteinIterator.cpp
+  model/DatabasePeptideIterator.cpp
+  app/CruxApplication.cpp
+  app/CruxApplicationList.cpp
+  io/DelimitedFile.cpp
+  io/DelimitedFileReader.cpp
+  io/DelimitedFileWriter.cpp
+  app/ExtractColumns.cpp
+  app/ExtractRows.cpp
+  util/FileUtils.cpp
+  model/FilteredSpectrumChargeIterator.cpp
+  model/GeneratePeptidesIterator.cpp
+  app/GetMs2Spectrum.cpp
+  io/HTMLWriter.cpp
+  model/Ion.cpp
+  model/IonConstraint.cpp
+  model/IonFilteredIterator.cpp
+  model/IonSeries.cpp
+  util/linked_list.cpp
+  io/LineFileReader.cpp
+  util/mass.cpp
+  app/MakePinApplication.cpp
+  model/Match.cpp
+  io/MatchColumns.cpp
+  io/MatchFileReader.cpp
+  io/MatchFileWriter.cpp
+  model/MatchCollection.cpp
+  model/MatchCollectionIterator.cpp
+  io/MatchCollectionParser.cpp
+  model/MatchIterator.cpp
+  util/MathUtil.cpp
+  model/Modification.cpp
+  util/modifications.cpp
+  model/ModifiedPeptidesIterator.cpp
+  io/MSToolkitSpectrumCollection.cpp
+  io/MzIdentMLReader.cpp
+  io/MzIdentMLWriter.cpp
+  io/OutputFiles.cpp
+  parameter.cpp
+  app/ParamMedicApplication.cpp
+  util/Params.cpp
+  model/Peak.cpp
+  model/Peptide.cpp
+  model/PeptideConstraint.cpp
+  util/peptide_modifications.cpp
+  model/PeptideSrc.cpp
+  io/PepXMLReader.cpp
+  io/PepXMLWriter.cpp
+  app/PercolatorAdapter.cpp
+  app/PercolatorApplication.cpp
+  io/PinWriter.cpp
+  app/Pipeline.cpp
+  app/GeneratePeptides.cpp
+  model/PostProcessProtein.cpp
+  app/PredictPeptideIons.cpp
+  app/PrintProcessedSpectra.cpp
+  app/PrintVersion.cpp
+  model/Protein.cpp
+  model/ProteinPeptideIterator.cpp
+  model/ProteinIndex.cpp
+  model/ProteinIndexIterator.cpp
+  model/ProteinMatchCollection.cpp
+  app/PSMConvertApplication.cpp
+  io/PSMReader.cpp
+  io/PSMWriter.cpp
+  model/AbstractMatch.cpp
+  model/ProteinMatch.cpp
+  model/PeptideMatch.cpp
+  io/PMCDelimitedFileWriter.cpp
+  io/PMCPepXMLWriter.cpp
+  io/PMCSQTWriter.cpp
+  model/SpectrumMatch.cpp
+  io/PWIZSpectrumCollection.cpp
+  app/ReadSpectrumRecordsApplication.cpp
+  app/ReadTideIndex.cpp
+  app/SortColumn.cpp
+  model/Scorer.cpp
+  app/SpectralCounts.cpp
+  io/SpectrumCollection.cpp
+  io/SpectrumCollectionFactory.cpp
+  model/Spectrum.cpp
+  io/SpectrumRecordWriter.cpp
+  model/SpectrumZState.cpp
+  app/StatColumn.cpp
+  util/StringUtils.cpp
+  io/SQTReader.cpp
+  io/SQTWriter.cpp
+  app/TideIndexApplication.cpp
+  app/TideMatchSet.cpp
+  app/TideSearchApplication.cpp
+  util/utils.cpp
+)
+
+if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+  set(
+    crux_lib_files
+    ${crux_lib_files}
+    util/WinCrux.cpp
+  )
+endif (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+
+add_library(
+  crux-support
+  STATIC
+  ${crux_lib_files}
+)
+add_dependencies(crux-support tide-support)
+
+if (APPLE)
+  set(OPENMP_FOUND FALSE)
+else(APPLE)
+  find_package(OpenMP)
+  if (OPENMP_FOUND)
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+  endif(OPENMP_FOUND)
+endif(APPLE)
+
+set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG")
+set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DNDEBUG")
+set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG")
+
+if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+    set_property(
+      DIRECTORY
+      APPEND
+      PROPERTY
+      COMPILE_DEFINITIONS
+      _CRT_SECURE_NO_WARNINGS
+     NOMINMAX
+    )
+else (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+	set_property(
+	  DIRECTORY
+    APPEND
+	  PROPERTY
+	  COMPILE_DEFINITIONS
+	  _LARGEFILE_SOURCE
+	  _LARGEFILE64_SOURCE
+	  _BSD_SOURCE
+	  _POSIX_C_SOURCE=199506L
+	  _FILE_OFFSET_BITS=64
+	  _GNU_SOURCE
+	  GCC
+	  CRUX
+	  HAVE_EXPAT_CONFIG_H
+	)
+	if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+	  set_property(
+      DIRECTORY
+      APPEND
+      PROPERTY
+      COMPILE_DEFINITIONS
+      DARWIN
+      _DARWIN_C_SOURCE
+	  )
+	  if (${CMAKE_SYSTEM_VERSION} VERSION_LESS "12")
+      set_property(
+        DIRECTORY
+        APPEND
+        PROPERTY
+        COMPILE_DEFINITIONS
+        PRE_MOUNTAIN_LION
+      )
+	  endif (${CMAKE_SYSTEM_VERSION} VERSION_LESS "12")
+	  if (${CMAKE_SYSTEM_VERSION} VERSION_LESS "11")
+      set_property(
+        DIRECTORY
+        APPEND
+        PROPERTY
+        COMPILE_DEFINITIONS
+        PRE_LION
+      )
+    endif(${CMAKE_SYSTEM_VERSION} VERSION_LESS "11")
+  endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+endif (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+
+add_executable(crux crux-main.cpp)
+if (WIN32 AND NOT CYGWIN)
+  set_property(
+    TARGET crux 
+    PROPERTY 
+      COMPILE_DEFINITIONS 
+      MAIN
+      GFLAGS_DLL_DECL= 
+      GFLAGS_DLL_DECLARE_FLAG= 
+      GFLAGS_DLL_DEFINE_FLAG=
+  )
+else (WIN32 AND NOT CYGWIN)
+  set_property(
+    TARGET
+    crux
+    PROPERTY
+    COMPILE_DEFINITIONS
+    MAIN
+  )
+endif (WIN32 AND NOT CYGWIN)
+
+if (WIN32 AND NOT CYGWIN)
+  # These definititions are needed to set the
+  # the proper calling conventions (static lib)
+  # for Boost and expat. Expat is used in the
+  # MSToolkit library.
+  add_definitions(-DBOOST_ALL_NO_LIB)
+  add_definitions(-DXML_STATIC)
+  if (INCLUDE_VENDOR_LIBRARIES)
+    add_definitions(-DINCLUDE_VENDOR_LIBRARIES)
+  endif (INCLUDE_VENDOR_LIBRARIES)
+endif (WIN32 AND NOT CYGWIN)
+
+# The rt library is not needed for OS X
+if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+  set(RT_LIBRARY "")
+else(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+  set(RT_LIBRARY "rt")
+endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+
+if (WIN32 AND NOT CYGWIN)
+  if (INCLUDE_VENDOR_LIBRARIES)
+    set (
+      PWIZ_LIBRARIES
+      libpwiz_data_identdata
+      libpwiz_data_identdata_version
+      libpwiz_data_misc
+      libpwiz_data_msdata
+      libpwiz_data_msdata_version
+      libpwiz_data_proteome
+      libpwiz_data_common
+      libpwiz_data_vendor_readers
+      libpwiz_reader_abi
+      libpwiz_reader_abi_t2d
+      libpwiz_reader_agilent
+      libpwiz_reader_shimadzu
+      libpwiz_reader_thermo
+      libpwiz_reader_waters
+      libpwiz_vendor_api_abi
+      libpwiz_vendor_api_agilent
+      libpwiz_vendor_api_shimadzu
+      libpwiz_vendor_api_thermo
+      libpwiz_utility_chemistry
+      libpwiz_utility_minimxml
+      libpwiz_utility_misc
+      libpwiz_version
+      libSHA1
+      libzlib
+      MassLynxRaw
+      cdt
+    )
+  else (INCLUDE_VENDOR_LIBRARIES)
+    set (
+      PWIZ_LIBRARIES
+      libpwiz_data_identdata
+      libpwiz_data_identdata_version
+      libpwiz_data_misc
+      libpwiz_data_msdata
+      libpwiz_data_msdata_version
+      libpwiz_data_proteome
+      libpwiz_data_common
+      libpwiz_utility_chemistry
+      libpwiz_utility_minimxml
+      libpwiz_utility_misc
+      libpwiz_version
+      libSHA1
+      libzlib
+    )
+  endif (INCLUDE_VENDOR_LIBRARIES)
+  target_link_libraries(
+    crux
+    barista
+    bullseye
+    hardklor
+    cometsearch
+    perclibrary
+    fido
+    picked_protein
+    xlink
+    gflags
+    crux-support
+    tide-support
+    mstoolkitlite
+    protobuf
+    ${PWIZ_LIBRARIES}
+    ws2_32
+    shlwapi
+    optimized libboost_system-vc120-mt
+    optimized libboost_iostreams-vc120-mt
+    optimized libboost_nowide-vc120-mt
+    optimized libboost_filesystem-vc120-mt
+    optimized libboost_thread-vc120-mt
+    optimized libboost_chrono-vc120-mt
+    debug libboost_system-vc120-mt-gd
+    debug libboost_iostreams-vc120-mt-gd
+    debug libboost_nowide-vc120-mt-gd
+    debug libboost_filesystem-vc120-mt-gd
+    debug libboost_thread-vc120-mt-gd
+    debug libboost_chrono-vc120-mt-gd
+  )
+else()
+  target_link_libraries(
+    crux
+    xlink
+    barista
+    bullseye
+    crux-support
+    tide-support
+    protobuf
+    gflags
+    cometsearch
+    dl
+    hardklor
+    m
+    ${RT_LIBRARY}
+    mstoolkitlite
+    perclibrary
+    fido
+    picked_protein
+    pwiz_data_identdata
+    pwiz_data_identdata_version
+    pwiz_data_misc
+    pwiz_data_msdata
+    pwiz_data_msdata_version
+    pwiz_data_proteome
+    pwiz_data_common
+    pwiz_utility_chemistry
+    pwiz_utility_minimxml
+    pwiz_utility_misc
+    pwiz_version
+    SHA1
+    boost_system-mt-s
+    boost_iostreams-mt-s
+    z-mt-s-1_2
+    boost_filesystem-mt-s
+    boost_thread-mt-s
+    boost_chrono
+    boost_filesystem
+    boost_system
+    pthread
+  )
+endif(WIN32 AND NOT CYGWIN)
+
+install (
+  TARGETS
+  crux
+  DESTINATION
+  bin
+)
+
diff --git a/src/Makefile b/src/Makefile
new file mode 100644
index 0000000..aad9066
--- /dev/null
+++ b/src/Makefile
@@ -0,0 +1,3111 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 2.8
+
+# Default target executed when no arguments are given to make.
+default_target: all
+.PHONY : default_target
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+# A target that is always out of date.
+cmake_force:
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake
+
+# The command to remove a file.
+RM = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The program to use to edit the cache.
+CMAKE_EDIT_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target edit_cache
+edit_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+.PHONY : edit_cache/fast
+
+# Special rule for the target install
+install: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install
+
+# Special rule for the target install
+install/fast: preinstall/fast
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install/fast
+
+# Special rule for the target install/local
+install/local: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local
+
+# Special rule for the target install/local
+install/local/fast: install/local
+.PHONY : install/local/fast
+
+# Special rule for the target install/strip
+install/strip: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip
+
+# Special rule for the target install/strip
+install/strip/fast: install/strip
+.PHONY : install/strip/fast
+
+# Special rule for the target list_install_components
+list_install_components:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
+.PHONY : list_install_components
+
+# Special rule for the target list_install_components
+list_install_components/fast: list_install_components
+.PHONY : list_install_components/fast
+
+# Special rule for the target package
+package: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackConfig.cmake
+.PHONY : package
+
+# Special rule for the target package
+package/fast: package
+.PHONY : package/fast
+
+# Special rule for the target package_source
+package_source:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool for source..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackSourceConfig.cmake /data/TeamCity/buildAgent/work/779d99b0241b2175/CPackSourceConfig.cmake
+.PHONY : package_source
+
+# Special rule for the target package_source
+package_source/fast: package_source
+.PHONY : package_source/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+.PHONY : rebuild_cache/fast
+
+# The main all target
+all: cmake_check_build_system
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles /data/TeamCity/buildAgent/work/779d99b0241b2175/src/CMakeFiles/progress.marks
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/all
+	$(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+.PHONY : depend
+
+# Convenience name for target.
+src/CMakeFiles/crux.dir/rule:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/crux.dir/rule
+.PHONY : src/CMakeFiles/crux.dir/rule
+
+# Convenience name for target.
+crux: src/CMakeFiles/crux.dir/rule
+.PHONY : crux
+
+# fast build rule for target.
+crux/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux.dir/build.make src/CMakeFiles/crux.dir/build
+.PHONY : crux/fast
+
+# Convenience name for target.
+src/CMakeFiles/crux-support.dir/rule:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/crux-support.dir/rule
+.PHONY : src/CMakeFiles/crux-support.dir/rule
+
+# Convenience name for target.
+crux-support: src/CMakeFiles/crux-support.dir/rule
+.PHONY : crux-support
+
+# fast build rule for target.
+crux-support/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/build
+.PHONY : crux-support/fast
+
+app/AssignConfidenceApplication.o: app/AssignConfidenceApplication.cpp.o
+.PHONY : app/AssignConfidenceApplication.o
+
+# target to build an object file
+app/AssignConfidenceApplication.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/AssignConfidenceApplication.cpp.o
+.PHONY : app/AssignConfidenceApplication.cpp.o
+
+app/AssignConfidenceApplication.i: app/AssignConfidenceApplication.cpp.i
+.PHONY : app/AssignConfidenceApplication.i
+
+# target to preprocess a source file
+app/AssignConfidenceApplication.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/AssignConfidenceApplication.cpp.i
+.PHONY : app/AssignConfidenceApplication.cpp.i
+
+app/AssignConfidenceApplication.s: app/AssignConfidenceApplication.cpp.s
+.PHONY : app/AssignConfidenceApplication.s
+
+# target to generate assembly for a file
+app/AssignConfidenceApplication.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/AssignConfidenceApplication.cpp.s
+.PHONY : app/AssignConfidenceApplication.cpp.s
+
+app/CascadeSearchApplication.o: app/CascadeSearchApplication.cpp.o
+.PHONY : app/CascadeSearchApplication.o
+
+# target to build an object file
+app/CascadeSearchApplication.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/CascadeSearchApplication.cpp.o
+.PHONY : app/CascadeSearchApplication.cpp.o
+
+app/CascadeSearchApplication.i: app/CascadeSearchApplication.cpp.i
+.PHONY : app/CascadeSearchApplication.i
+
+# target to preprocess a source file
+app/CascadeSearchApplication.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/CascadeSearchApplication.cpp.i
+.PHONY : app/CascadeSearchApplication.cpp.i
+
+app/CascadeSearchApplication.s: app/CascadeSearchApplication.cpp.s
+.PHONY : app/CascadeSearchApplication.s
+
+# target to generate assembly for a file
+app/CascadeSearchApplication.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/CascadeSearchApplication.cpp.s
+.PHONY : app/CascadeSearchApplication.cpp.s
+
+app/CometApplication.o: app/CometApplication.cpp.o
+.PHONY : app/CometApplication.o
+
+# target to build an object file
+app/CometApplication.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/CometApplication.cpp.o
+.PHONY : app/CometApplication.cpp.o
+
+app/CometApplication.i: app/CometApplication.cpp.i
+.PHONY : app/CometApplication.i
+
+# target to preprocess a source file
+app/CometApplication.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/CometApplication.cpp.i
+.PHONY : app/CometApplication.cpp.i
+
+app/CometApplication.s: app/CometApplication.cpp.s
+.PHONY : app/CometApplication.s
+
+# target to generate assembly for a file
+app/CometApplication.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/CometApplication.cpp.s
+.PHONY : app/CometApplication.cpp.s
+
+app/ComputeQValues.o: app/ComputeQValues.cpp.o
+.PHONY : app/ComputeQValues.o
+
+# target to build an object file
+app/ComputeQValues.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ComputeQValues.cpp.o
+.PHONY : app/ComputeQValues.cpp.o
+
+app/ComputeQValues.i: app/ComputeQValues.cpp.i
+.PHONY : app/ComputeQValues.i
+
+# target to preprocess a source file
+app/ComputeQValues.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ComputeQValues.cpp.i
+.PHONY : app/ComputeQValues.cpp.i
+
+app/ComputeQValues.s: app/ComputeQValues.cpp.s
+.PHONY : app/ComputeQValues.s
+
+# target to generate assembly for a file
+app/ComputeQValues.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ComputeQValues.cpp.s
+.PHONY : app/ComputeQValues.cpp.s
+
+app/CreateDocs.o: app/CreateDocs.cpp.o
+.PHONY : app/CreateDocs.o
+
+# target to build an object file
+app/CreateDocs.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/CreateDocs.cpp.o
+.PHONY : app/CreateDocs.cpp.o
+
+app/CreateDocs.i: app/CreateDocs.cpp.i
+.PHONY : app/CreateDocs.i
+
+# target to preprocess a source file
+app/CreateDocs.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/CreateDocs.cpp.i
+.PHONY : app/CreateDocs.cpp.i
+
+app/CreateDocs.s: app/CreateDocs.cpp.s
+.PHONY : app/CreateDocs.s
+
+# target to generate assembly for a file
+app/CreateDocs.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/CreateDocs.cpp.s
+.PHONY : app/CreateDocs.cpp.s
+
+app/CruxApplication.o: app/CruxApplication.cpp.o
+.PHONY : app/CruxApplication.o
+
+# target to build an object file
+app/CruxApplication.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/CruxApplication.cpp.o
+.PHONY : app/CruxApplication.cpp.o
+
+app/CruxApplication.i: app/CruxApplication.cpp.i
+.PHONY : app/CruxApplication.i
+
+# target to preprocess a source file
+app/CruxApplication.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/CruxApplication.cpp.i
+.PHONY : app/CruxApplication.cpp.i
+
+app/CruxApplication.s: app/CruxApplication.cpp.s
+.PHONY : app/CruxApplication.s
+
+# target to generate assembly for a file
+app/CruxApplication.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/CruxApplication.cpp.s
+.PHONY : app/CruxApplication.cpp.s
+
+app/CruxApplicationList.o: app/CruxApplicationList.cpp.o
+.PHONY : app/CruxApplicationList.o
+
+# target to build an object file
+app/CruxApplicationList.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/CruxApplicationList.cpp.o
+.PHONY : app/CruxApplicationList.cpp.o
+
+app/CruxApplicationList.i: app/CruxApplicationList.cpp.i
+.PHONY : app/CruxApplicationList.i
+
+# target to preprocess a source file
+app/CruxApplicationList.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/CruxApplicationList.cpp.i
+.PHONY : app/CruxApplicationList.cpp.i
+
+app/CruxApplicationList.s: app/CruxApplicationList.cpp.s
+.PHONY : app/CruxApplicationList.s
+
+# target to generate assembly for a file
+app/CruxApplicationList.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/CruxApplicationList.cpp.s
+.PHONY : app/CruxApplicationList.cpp.s
+
+app/ExtractColumns.o: app/ExtractColumns.cpp.o
+.PHONY : app/ExtractColumns.o
+
+# target to build an object file
+app/ExtractColumns.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ExtractColumns.cpp.o
+.PHONY : app/ExtractColumns.cpp.o
+
+app/ExtractColumns.i: app/ExtractColumns.cpp.i
+.PHONY : app/ExtractColumns.i
+
+# target to preprocess a source file
+app/ExtractColumns.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ExtractColumns.cpp.i
+.PHONY : app/ExtractColumns.cpp.i
+
+app/ExtractColumns.s: app/ExtractColumns.cpp.s
+.PHONY : app/ExtractColumns.s
+
+# target to generate assembly for a file
+app/ExtractColumns.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ExtractColumns.cpp.s
+.PHONY : app/ExtractColumns.cpp.s
+
+app/ExtractRows.o: app/ExtractRows.cpp.o
+.PHONY : app/ExtractRows.o
+
+# target to build an object file
+app/ExtractRows.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ExtractRows.cpp.o
+.PHONY : app/ExtractRows.cpp.o
+
+app/ExtractRows.i: app/ExtractRows.cpp.i
+.PHONY : app/ExtractRows.i
+
+# target to preprocess a source file
+app/ExtractRows.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ExtractRows.cpp.i
+.PHONY : app/ExtractRows.cpp.i
+
+app/ExtractRows.s: app/ExtractRows.cpp.s
+.PHONY : app/ExtractRows.s
+
+# target to generate assembly for a file
+app/ExtractRows.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ExtractRows.cpp.s
+.PHONY : app/ExtractRows.cpp.s
+
+app/GeneratePeptides.o: app/GeneratePeptides.cpp.o
+.PHONY : app/GeneratePeptides.o
+
+# target to build an object file
+app/GeneratePeptides.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/GeneratePeptides.cpp.o
+.PHONY : app/GeneratePeptides.cpp.o
+
+app/GeneratePeptides.i: app/GeneratePeptides.cpp.i
+.PHONY : app/GeneratePeptides.i
+
+# target to preprocess a source file
+app/GeneratePeptides.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/GeneratePeptides.cpp.i
+.PHONY : app/GeneratePeptides.cpp.i
+
+app/GeneratePeptides.s: app/GeneratePeptides.cpp.s
+.PHONY : app/GeneratePeptides.s
+
+# target to generate assembly for a file
+app/GeneratePeptides.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/GeneratePeptides.cpp.s
+.PHONY : app/GeneratePeptides.cpp.s
+
+app/GetMs2Spectrum.o: app/GetMs2Spectrum.cpp.o
+.PHONY : app/GetMs2Spectrum.o
+
+# target to build an object file
+app/GetMs2Spectrum.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/GetMs2Spectrum.cpp.o
+.PHONY : app/GetMs2Spectrum.cpp.o
+
+app/GetMs2Spectrum.i: app/GetMs2Spectrum.cpp.i
+.PHONY : app/GetMs2Spectrum.i
+
+# target to preprocess a source file
+app/GetMs2Spectrum.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/GetMs2Spectrum.cpp.i
+.PHONY : app/GetMs2Spectrum.cpp.i
+
+app/GetMs2Spectrum.s: app/GetMs2Spectrum.cpp.s
+.PHONY : app/GetMs2Spectrum.s
+
+# target to generate assembly for a file
+app/GetMs2Spectrum.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/GetMs2Spectrum.cpp.s
+.PHONY : app/GetMs2Spectrum.cpp.s
+
+app/MakePinApplication.o: app/MakePinApplication.cpp.o
+.PHONY : app/MakePinApplication.o
+
+# target to build an object file
+app/MakePinApplication.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/MakePinApplication.cpp.o
+.PHONY : app/MakePinApplication.cpp.o
+
+app/MakePinApplication.i: app/MakePinApplication.cpp.i
+.PHONY : app/MakePinApplication.i
+
+# target to preprocess a source file
+app/MakePinApplication.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/MakePinApplication.cpp.i
+.PHONY : app/MakePinApplication.cpp.i
+
+app/MakePinApplication.s: app/MakePinApplication.cpp.s
+.PHONY : app/MakePinApplication.s
+
+# target to generate assembly for a file
+app/MakePinApplication.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/MakePinApplication.cpp.s
+.PHONY : app/MakePinApplication.cpp.s
+
+app/PSMConvertApplication.o: app/PSMConvertApplication.cpp.o
+.PHONY : app/PSMConvertApplication.o
+
+# target to build an object file
+app/PSMConvertApplication.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PSMConvertApplication.cpp.o
+.PHONY : app/PSMConvertApplication.cpp.o
+
+app/PSMConvertApplication.i: app/PSMConvertApplication.cpp.i
+.PHONY : app/PSMConvertApplication.i
+
+# target to preprocess a source file
+app/PSMConvertApplication.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PSMConvertApplication.cpp.i
+.PHONY : app/PSMConvertApplication.cpp.i
+
+app/PSMConvertApplication.s: app/PSMConvertApplication.cpp.s
+.PHONY : app/PSMConvertApplication.s
+
+# target to generate assembly for a file
+app/PSMConvertApplication.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PSMConvertApplication.cpp.s
+.PHONY : app/PSMConvertApplication.cpp.s
+
+app/ParamMedicApplication.o: app/ParamMedicApplication.cpp.o
+.PHONY : app/ParamMedicApplication.o
+
+# target to build an object file
+app/ParamMedicApplication.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ParamMedicApplication.cpp.o
+.PHONY : app/ParamMedicApplication.cpp.o
+
+app/ParamMedicApplication.i: app/ParamMedicApplication.cpp.i
+.PHONY : app/ParamMedicApplication.i
+
+# target to preprocess a source file
+app/ParamMedicApplication.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ParamMedicApplication.cpp.i
+.PHONY : app/ParamMedicApplication.cpp.i
+
+app/ParamMedicApplication.s: app/ParamMedicApplication.cpp.s
+.PHONY : app/ParamMedicApplication.s
+
+# target to generate assembly for a file
+app/ParamMedicApplication.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ParamMedicApplication.cpp.s
+.PHONY : app/ParamMedicApplication.cpp.s
+
+app/PercolatorAdapter.o: app/PercolatorAdapter.cpp.o
+.PHONY : app/PercolatorAdapter.o
+
+# target to build an object file
+app/PercolatorAdapter.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PercolatorAdapter.cpp.o
+.PHONY : app/PercolatorAdapter.cpp.o
+
+app/PercolatorAdapter.i: app/PercolatorAdapter.cpp.i
+.PHONY : app/PercolatorAdapter.i
+
+# target to preprocess a source file
+app/PercolatorAdapter.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PercolatorAdapter.cpp.i
+.PHONY : app/PercolatorAdapter.cpp.i
+
+app/PercolatorAdapter.s: app/PercolatorAdapter.cpp.s
+.PHONY : app/PercolatorAdapter.s
+
+# target to generate assembly for a file
+app/PercolatorAdapter.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PercolatorAdapter.cpp.s
+.PHONY : app/PercolatorAdapter.cpp.s
+
+app/PercolatorApplication.o: app/PercolatorApplication.cpp.o
+.PHONY : app/PercolatorApplication.o
+
+# target to build an object file
+app/PercolatorApplication.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PercolatorApplication.cpp.o
+.PHONY : app/PercolatorApplication.cpp.o
+
+app/PercolatorApplication.i: app/PercolatorApplication.cpp.i
+.PHONY : app/PercolatorApplication.i
+
+# target to preprocess a source file
+app/PercolatorApplication.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PercolatorApplication.cpp.i
+.PHONY : app/PercolatorApplication.cpp.i
+
+app/PercolatorApplication.s: app/PercolatorApplication.cpp.s
+.PHONY : app/PercolatorApplication.s
+
+# target to generate assembly for a file
+app/PercolatorApplication.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PercolatorApplication.cpp.s
+.PHONY : app/PercolatorApplication.cpp.s
+
+app/Pipeline.o: app/Pipeline.cpp.o
+.PHONY : app/Pipeline.o
+
+# target to build an object file
+app/Pipeline.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/Pipeline.cpp.o
+.PHONY : app/Pipeline.cpp.o
+
+app/Pipeline.i: app/Pipeline.cpp.i
+.PHONY : app/Pipeline.i
+
+# target to preprocess a source file
+app/Pipeline.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/Pipeline.cpp.i
+.PHONY : app/Pipeline.cpp.i
+
+app/Pipeline.s: app/Pipeline.cpp.s
+.PHONY : app/Pipeline.s
+
+# target to generate assembly for a file
+app/Pipeline.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/Pipeline.cpp.s
+.PHONY : app/Pipeline.cpp.s
+
+app/PredictPeptideIons.o: app/PredictPeptideIons.cpp.o
+.PHONY : app/PredictPeptideIons.o
+
+# target to build an object file
+app/PredictPeptideIons.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PredictPeptideIons.cpp.o
+.PHONY : app/PredictPeptideIons.cpp.o
+
+app/PredictPeptideIons.i: app/PredictPeptideIons.cpp.i
+.PHONY : app/PredictPeptideIons.i
+
+# target to preprocess a source file
+app/PredictPeptideIons.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PredictPeptideIons.cpp.i
+.PHONY : app/PredictPeptideIons.cpp.i
+
+app/PredictPeptideIons.s: app/PredictPeptideIons.cpp.s
+.PHONY : app/PredictPeptideIons.s
+
+# target to generate assembly for a file
+app/PredictPeptideIons.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PredictPeptideIons.cpp.s
+.PHONY : app/PredictPeptideIons.cpp.s
+
+app/PrintProcessedSpectra.o: app/PrintProcessedSpectra.cpp.o
+.PHONY : app/PrintProcessedSpectra.o
+
+# target to build an object file
+app/PrintProcessedSpectra.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PrintProcessedSpectra.cpp.o
+.PHONY : app/PrintProcessedSpectra.cpp.o
+
+app/PrintProcessedSpectra.i: app/PrintProcessedSpectra.cpp.i
+.PHONY : app/PrintProcessedSpectra.i
+
+# target to preprocess a source file
+app/PrintProcessedSpectra.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PrintProcessedSpectra.cpp.i
+.PHONY : app/PrintProcessedSpectra.cpp.i
+
+app/PrintProcessedSpectra.s: app/PrintProcessedSpectra.cpp.s
+.PHONY : app/PrintProcessedSpectra.s
+
+# target to generate assembly for a file
+app/PrintProcessedSpectra.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PrintProcessedSpectra.cpp.s
+.PHONY : app/PrintProcessedSpectra.cpp.s
+
+app/PrintVersion.o: app/PrintVersion.cpp.o
+.PHONY : app/PrintVersion.o
+
+# target to build an object file
+app/PrintVersion.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PrintVersion.cpp.o
+.PHONY : app/PrintVersion.cpp.o
+
+app/PrintVersion.i: app/PrintVersion.cpp.i
+.PHONY : app/PrintVersion.i
+
+# target to preprocess a source file
+app/PrintVersion.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PrintVersion.cpp.i
+.PHONY : app/PrintVersion.cpp.i
+
+app/PrintVersion.s: app/PrintVersion.cpp.s
+.PHONY : app/PrintVersion.s
+
+# target to generate assembly for a file
+app/PrintVersion.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/PrintVersion.cpp.s
+.PHONY : app/PrintVersion.cpp.s
+
+app/ReadSpectrumRecordsApplication.o: app/ReadSpectrumRecordsApplication.cpp.o
+.PHONY : app/ReadSpectrumRecordsApplication.o
+
+# target to build an object file
+app/ReadSpectrumRecordsApplication.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ReadSpectrumRecordsApplication.cpp.o
+.PHONY : app/ReadSpectrumRecordsApplication.cpp.o
+
+app/ReadSpectrumRecordsApplication.i: app/ReadSpectrumRecordsApplication.cpp.i
+.PHONY : app/ReadSpectrumRecordsApplication.i
+
+# target to preprocess a source file
+app/ReadSpectrumRecordsApplication.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ReadSpectrumRecordsApplication.cpp.i
+.PHONY : app/ReadSpectrumRecordsApplication.cpp.i
+
+app/ReadSpectrumRecordsApplication.s: app/ReadSpectrumRecordsApplication.cpp.s
+.PHONY : app/ReadSpectrumRecordsApplication.s
+
+# target to generate assembly for a file
+app/ReadSpectrumRecordsApplication.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ReadSpectrumRecordsApplication.cpp.s
+.PHONY : app/ReadSpectrumRecordsApplication.cpp.s
+
+app/ReadTideIndex.o: app/ReadTideIndex.cpp.o
+.PHONY : app/ReadTideIndex.o
+
+# target to build an object file
+app/ReadTideIndex.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ReadTideIndex.cpp.o
+.PHONY : app/ReadTideIndex.cpp.o
+
+app/ReadTideIndex.i: app/ReadTideIndex.cpp.i
+.PHONY : app/ReadTideIndex.i
+
+# target to preprocess a source file
+app/ReadTideIndex.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ReadTideIndex.cpp.i
+.PHONY : app/ReadTideIndex.cpp.i
+
+app/ReadTideIndex.s: app/ReadTideIndex.cpp.s
+.PHONY : app/ReadTideIndex.s
+
+# target to generate assembly for a file
+app/ReadTideIndex.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/ReadTideIndex.cpp.s
+.PHONY : app/ReadTideIndex.cpp.s
+
+app/SortColumn.o: app/SortColumn.cpp.o
+.PHONY : app/SortColumn.o
+
+# target to build an object file
+app/SortColumn.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/SortColumn.cpp.o
+.PHONY : app/SortColumn.cpp.o
+
+app/SortColumn.i: app/SortColumn.cpp.i
+.PHONY : app/SortColumn.i
+
+# target to preprocess a source file
+app/SortColumn.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/SortColumn.cpp.i
+.PHONY : app/SortColumn.cpp.i
+
+app/SortColumn.s: app/SortColumn.cpp.s
+.PHONY : app/SortColumn.s
+
+# target to generate assembly for a file
+app/SortColumn.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/SortColumn.cpp.s
+.PHONY : app/SortColumn.cpp.s
+
+app/SpectralCounts.o: app/SpectralCounts.cpp.o
+.PHONY : app/SpectralCounts.o
+
+# target to build an object file
+app/SpectralCounts.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/SpectralCounts.cpp.o
+.PHONY : app/SpectralCounts.cpp.o
+
+app/SpectralCounts.i: app/SpectralCounts.cpp.i
+.PHONY : app/SpectralCounts.i
+
+# target to preprocess a source file
+app/SpectralCounts.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/SpectralCounts.cpp.i
+.PHONY : app/SpectralCounts.cpp.i
+
+app/SpectralCounts.s: app/SpectralCounts.cpp.s
+.PHONY : app/SpectralCounts.s
+
+# target to generate assembly for a file
+app/SpectralCounts.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/SpectralCounts.cpp.s
+.PHONY : app/SpectralCounts.cpp.s
+
+app/StatColumn.o: app/StatColumn.cpp.o
+.PHONY : app/StatColumn.o
+
+# target to build an object file
+app/StatColumn.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/StatColumn.cpp.o
+.PHONY : app/StatColumn.cpp.o
+
+app/StatColumn.i: app/StatColumn.cpp.i
+.PHONY : app/StatColumn.i
+
+# target to preprocess a source file
+app/StatColumn.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/StatColumn.cpp.i
+.PHONY : app/StatColumn.cpp.i
+
+app/StatColumn.s: app/StatColumn.cpp.s
+.PHONY : app/StatColumn.s
+
+# target to generate assembly for a file
+app/StatColumn.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/StatColumn.cpp.s
+.PHONY : app/StatColumn.cpp.s
+
+app/SubtractIndexApplication.o: app/SubtractIndexApplication.cpp.o
+.PHONY : app/SubtractIndexApplication.o
+
+# target to build an object file
+app/SubtractIndexApplication.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/SubtractIndexApplication.cpp.o
+.PHONY : app/SubtractIndexApplication.cpp.o
+
+app/SubtractIndexApplication.i: app/SubtractIndexApplication.cpp.i
+.PHONY : app/SubtractIndexApplication.i
+
+# target to preprocess a source file
+app/SubtractIndexApplication.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/SubtractIndexApplication.cpp.i
+.PHONY : app/SubtractIndexApplication.cpp.i
+
+app/SubtractIndexApplication.s: app/SubtractIndexApplication.cpp.s
+.PHONY : app/SubtractIndexApplication.s
+
+# target to generate assembly for a file
+app/SubtractIndexApplication.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/SubtractIndexApplication.cpp.s
+.PHONY : app/SubtractIndexApplication.cpp.s
+
+app/TideIndexApplication.o: app/TideIndexApplication.cpp.o
+.PHONY : app/TideIndexApplication.o
+
+# target to build an object file
+app/TideIndexApplication.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/TideIndexApplication.cpp.o
+.PHONY : app/TideIndexApplication.cpp.o
+
+app/TideIndexApplication.i: app/TideIndexApplication.cpp.i
+.PHONY : app/TideIndexApplication.i
+
+# target to preprocess a source file
+app/TideIndexApplication.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/TideIndexApplication.cpp.i
+.PHONY : app/TideIndexApplication.cpp.i
+
+app/TideIndexApplication.s: app/TideIndexApplication.cpp.s
+.PHONY : app/TideIndexApplication.s
+
+# target to generate assembly for a file
+app/TideIndexApplication.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/TideIndexApplication.cpp.s
+.PHONY : app/TideIndexApplication.cpp.s
+
+app/TideMatchSet.o: app/TideMatchSet.cpp.o
+.PHONY : app/TideMatchSet.o
+
+# target to build an object file
+app/TideMatchSet.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/TideMatchSet.cpp.o
+.PHONY : app/TideMatchSet.cpp.o
+
+app/TideMatchSet.i: app/TideMatchSet.cpp.i
+.PHONY : app/TideMatchSet.i
+
+# target to preprocess a source file
+app/TideMatchSet.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/TideMatchSet.cpp.i
+.PHONY : app/TideMatchSet.cpp.i
+
+app/TideMatchSet.s: app/TideMatchSet.cpp.s
+.PHONY : app/TideMatchSet.s
+
+# target to generate assembly for a file
+app/TideMatchSet.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/TideMatchSet.cpp.s
+.PHONY : app/TideMatchSet.cpp.s
+
+app/TideSearchApplication.o: app/TideSearchApplication.cpp.o
+.PHONY : app/TideSearchApplication.o
+
+# target to build an object file
+app/TideSearchApplication.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/TideSearchApplication.cpp.o
+.PHONY : app/TideSearchApplication.cpp.o
+
+app/TideSearchApplication.i: app/TideSearchApplication.cpp.i
+.PHONY : app/TideSearchApplication.i
+
+# target to preprocess a source file
+app/TideSearchApplication.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/TideSearchApplication.cpp.i
+.PHONY : app/TideSearchApplication.cpp.i
+
+app/TideSearchApplication.s: app/TideSearchApplication.cpp.s
+.PHONY : app/TideSearchApplication.s
+
+# target to generate assembly for a file
+app/TideSearchApplication.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/app/TideSearchApplication.cpp.s
+.PHONY : app/TideSearchApplication.cpp.s
+
+crux-main.o: crux-main.cpp.o
+.PHONY : crux-main.o
+
+# target to build an object file
+crux-main.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux.dir/build.make src/CMakeFiles/crux.dir/crux-main.cpp.o
+.PHONY : crux-main.cpp.o
+
+crux-main.i: crux-main.cpp.i
+.PHONY : crux-main.i
+
+# target to preprocess a source file
+crux-main.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux.dir/build.make src/CMakeFiles/crux.dir/crux-main.cpp.i
+.PHONY : crux-main.cpp.i
+
+crux-main.s: crux-main.cpp.s
+.PHONY : crux-main.s
+
+# target to generate assembly for a file
+crux-main.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux.dir/build.make src/CMakeFiles/crux.dir/crux-main.cpp.s
+.PHONY : crux-main.cpp.s
+
+io/DelimitedFile.o: io/DelimitedFile.cpp.o
+.PHONY : io/DelimitedFile.o
+
+# target to build an object file
+io/DelimitedFile.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/DelimitedFile.cpp.o
+.PHONY : io/DelimitedFile.cpp.o
+
+io/DelimitedFile.i: io/DelimitedFile.cpp.i
+.PHONY : io/DelimitedFile.i
+
+# target to preprocess a source file
+io/DelimitedFile.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/DelimitedFile.cpp.i
+.PHONY : io/DelimitedFile.cpp.i
+
+io/DelimitedFile.s: io/DelimitedFile.cpp.s
+.PHONY : io/DelimitedFile.s
+
+# target to generate assembly for a file
+io/DelimitedFile.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/DelimitedFile.cpp.s
+.PHONY : io/DelimitedFile.cpp.s
+
+io/DelimitedFileReader.o: io/DelimitedFileReader.cpp.o
+.PHONY : io/DelimitedFileReader.o
+
+# target to build an object file
+io/DelimitedFileReader.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/DelimitedFileReader.cpp.o
+.PHONY : io/DelimitedFileReader.cpp.o
+
+io/DelimitedFileReader.i: io/DelimitedFileReader.cpp.i
+.PHONY : io/DelimitedFileReader.i
+
+# target to preprocess a source file
+io/DelimitedFileReader.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/DelimitedFileReader.cpp.i
+.PHONY : io/DelimitedFileReader.cpp.i
+
+io/DelimitedFileReader.s: io/DelimitedFileReader.cpp.s
+.PHONY : io/DelimitedFileReader.s
+
+# target to generate assembly for a file
+io/DelimitedFileReader.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/DelimitedFileReader.cpp.s
+.PHONY : io/DelimitedFileReader.cpp.s
+
+io/DelimitedFileWriter.o: io/DelimitedFileWriter.cpp.o
+.PHONY : io/DelimitedFileWriter.o
+
+# target to build an object file
+io/DelimitedFileWriter.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/DelimitedFileWriter.cpp.o
+.PHONY : io/DelimitedFileWriter.cpp.o
+
+io/DelimitedFileWriter.i: io/DelimitedFileWriter.cpp.i
+.PHONY : io/DelimitedFileWriter.i
+
+# target to preprocess a source file
+io/DelimitedFileWriter.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/DelimitedFileWriter.cpp.i
+.PHONY : io/DelimitedFileWriter.cpp.i
+
+io/DelimitedFileWriter.s: io/DelimitedFileWriter.cpp.s
+.PHONY : io/DelimitedFileWriter.s
+
+# target to generate assembly for a file
+io/DelimitedFileWriter.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/DelimitedFileWriter.cpp.s
+.PHONY : io/DelimitedFileWriter.cpp.s
+
+io/HTMLWriter.o: io/HTMLWriter.cpp.o
+.PHONY : io/HTMLWriter.o
+
+# target to build an object file
+io/HTMLWriter.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/HTMLWriter.cpp.o
+.PHONY : io/HTMLWriter.cpp.o
+
+io/HTMLWriter.i: io/HTMLWriter.cpp.i
+.PHONY : io/HTMLWriter.i
+
+# target to preprocess a source file
+io/HTMLWriter.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/HTMLWriter.cpp.i
+.PHONY : io/HTMLWriter.cpp.i
+
+io/HTMLWriter.s: io/HTMLWriter.cpp.s
+.PHONY : io/HTMLWriter.s
+
+# target to generate assembly for a file
+io/HTMLWriter.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/HTMLWriter.cpp.s
+.PHONY : io/HTMLWriter.cpp.s
+
+io/LineFileReader.o: io/LineFileReader.cpp.o
+.PHONY : io/LineFileReader.o
+
+# target to build an object file
+io/LineFileReader.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/LineFileReader.cpp.o
+.PHONY : io/LineFileReader.cpp.o
+
+io/LineFileReader.i: io/LineFileReader.cpp.i
+.PHONY : io/LineFileReader.i
+
+# target to preprocess a source file
+io/LineFileReader.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/LineFileReader.cpp.i
+.PHONY : io/LineFileReader.cpp.i
+
+io/LineFileReader.s: io/LineFileReader.cpp.s
+.PHONY : io/LineFileReader.s
+
+# target to generate assembly for a file
+io/LineFileReader.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/LineFileReader.cpp.s
+.PHONY : io/LineFileReader.cpp.s
+
+io/MSToolkitSpectrumCollection.o: io/MSToolkitSpectrumCollection.cpp.o
+.PHONY : io/MSToolkitSpectrumCollection.o
+
+# target to build an object file
+io/MSToolkitSpectrumCollection.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MSToolkitSpectrumCollection.cpp.o
+.PHONY : io/MSToolkitSpectrumCollection.cpp.o
+
+io/MSToolkitSpectrumCollection.i: io/MSToolkitSpectrumCollection.cpp.i
+.PHONY : io/MSToolkitSpectrumCollection.i
+
+# target to preprocess a source file
+io/MSToolkitSpectrumCollection.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MSToolkitSpectrumCollection.cpp.i
+.PHONY : io/MSToolkitSpectrumCollection.cpp.i
+
+io/MSToolkitSpectrumCollection.s: io/MSToolkitSpectrumCollection.cpp.s
+.PHONY : io/MSToolkitSpectrumCollection.s
+
+# target to generate assembly for a file
+io/MSToolkitSpectrumCollection.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MSToolkitSpectrumCollection.cpp.s
+.PHONY : io/MSToolkitSpectrumCollection.cpp.s
+
+io/MatchCollectionParser.o: io/MatchCollectionParser.cpp.o
+.PHONY : io/MatchCollectionParser.o
+
+# target to build an object file
+io/MatchCollectionParser.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MatchCollectionParser.cpp.o
+.PHONY : io/MatchCollectionParser.cpp.o
+
+io/MatchCollectionParser.i: io/MatchCollectionParser.cpp.i
+.PHONY : io/MatchCollectionParser.i
+
+# target to preprocess a source file
+io/MatchCollectionParser.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MatchCollectionParser.cpp.i
+.PHONY : io/MatchCollectionParser.cpp.i
+
+io/MatchCollectionParser.s: io/MatchCollectionParser.cpp.s
+.PHONY : io/MatchCollectionParser.s
+
+# target to generate assembly for a file
+io/MatchCollectionParser.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MatchCollectionParser.cpp.s
+.PHONY : io/MatchCollectionParser.cpp.s
+
+io/MatchColumns.o: io/MatchColumns.cpp.o
+.PHONY : io/MatchColumns.o
+
+# target to build an object file
+io/MatchColumns.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MatchColumns.cpp.o
+.PHONY : io/MatchColumns.cpp.o
+
+io/MatchColumns.i: io/MatchColumns.cpp.i
+.PHONY : io/MatchColumns.i
+
+# target to preprocess a source file
+io/MatchColumns.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MatchColumns.cpp.i
+.PHONY : io/MatchColumns.cpp.i
+
+io/MatchColumns.s: io/MatchColumns.cpp.s
+.PHONY : io/MatchColumns.s
+
+# target to generate assembly for a file
+io/MatchColumns.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MatchColumns.cpp.s
+.PHONY : io/MatchColumns.cpp.s
+
+io/MatchFileReader.o: io/MatchFileReader.cpp.o
+.PHONY : io/MatchFileReader.o
+
+# target to build an object file
+io/MatchFileReader.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MatchFileReader.cpp.o
+.PHONY : io/MatchFileReader.cpp.o
+
+io/MatchFileReader.i: io/MatchFileReader.cpp.i
+.PHONY : io/MatchFileReader.i
+
+# target to preprocess a source file
+io/MatchFileReader.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MatchFileReader.cpp.i
+.PHONY : io/MatchFileReader.cpp.i
+
+io/MatchFileReader.s: io/MatchFileReader.cpp.s
+.PHONY : io/MatchFileReader.s
+
+# target to generate assembly for a file
+io/MatchFileReader.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MatchFileReader.cpp.s
+.PHONY : io/MatchFileReader.cpp.s
+
+io/MatchFileWriter.o: io/MatchFileWriter.cpp.o
+.PHONY : io/MatchFileWriter.o
+
+# target to build an object file
+io/MatchFileWriter.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MatchFileWriter.cpp.o
+.PHONY : io/MatchFileWriter.cpp.o
+
+io/MatchFileWriter.i: io/MatchFileWriter.cpp.i
+.PHONY : io/MatchFileWriter.i
+
+# target to preprocess a source file
+io/MatchFileWriter.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MatchFileWriter.cpp.i
+.PHONY : io/MatchFileWriter.cpp.i
+
+io/MatchFileWriter.s: io/MatchFileWriter.cpp.s
+.PHONY : io/MatchFileWriter.s
+
+# target to generate assembly for a file
+io/MatchFileWriter.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MatchFileWriter.cpp.s
+.PHONY : io/MatchFileWriter.cpp.s
+
+io/MzIdentMLReader.o: io/MzIdentMLReader.cpp.o
+.PHONY : io/MzIdentMLReader.o
+
+# target to build an object file
+io/MzIdentMLReader.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MzIdentMLReader.cpp.o
+.PHONY : io/MzIdentMLReader.cpp.o
+
+io/MzIdentMLReader.i: io/MzIdentMLReader.cpp.i
+.PHONY : io/MzIdentMLReader.i
+
+# target to preprocess a source file
+io/MzIdentMLReader.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MzIdentMLReader.cpp.i
+.PHONY : io/MzIdentMLReader.cpp.i
+
+io/MzIdentMLReader.s: io/MzIdentMLReader.cpp.s
+.PHONY : io/MzIdentMLReader.s
+
+# target to generate assembly for a file
+io/MzIdentMLReader.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MzIdentMLReader.cpp.s
+.PHONY : io/MzIdentMLReader.cpp.s
+
+io/MzIdentMLWriter.o: io/MzIdentMLWriter.cpp.o
+.PHONY : io/MzIdentMLWriter.o
+
+# target to build an object file
+io/MzIdentMLWriter.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MzIdentMLWriter.cpp.o
+.PHONY : io/MzIdentMLWriter.cpp.o
+
+io/MzIdentMLWriter.i: io/MzIdentMLWriter.cpp.i
+.PHONY : io/MzIdentMLWriter.i
+
+# target to preprocess a source file
+io/MzIdentMLWriter.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MzIdentMLWriter.cpp.i
+.PHONY : io/MzIdentMLWriter.cpp.i
+
+io/MzIdentMLWriter.s: io/MzIdentMLWriter.cpp.s
+.PHONY : io/MzIdentMLWriter.s
+
+# target to generate assembly for a file
+io/MzIdentMLWriter.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/MzIdentMLWriter.cpp.s
+.PHONY : io/MzIdentMLWriter.cpp.s
+
+io/OutputFiles.o: io/OutputFiles.cpp.o
+.PHONY : io/OutputFiles.o
+
+# target to build an object file
+io/OutputFiles.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/OutputFiles.cpp.o
+.PHONY : io/OutputFiles.cpp.o
+
+io/OutputFiles.i: io/OutputFiles.cpp.i
+.PHONY : io/OutputFiles.i
+
+# target to preprocess a source file
+io/OutputFiles.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/OutputFiles.cpp.i
+.PHONY : io/OutputFiles.cpp.i
+
+io/OutputFiles.s: io/OutputFiles.cpp.s
+.PHONY : io/OutputFiles.s
+
+# target to generate assembly for a file
+io/OutputFiles.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/OutputFiles.cpp.s
+.PHONY : io/OutputFiles.cpp.s
+
+io/PMCDelimitedFileWriter.o: io/PMCDelimitedFileWriter.cpp.o
+.PHONY : io/PMCDelimitedFileWriter.o
+
+# target to build an object file
+io/PMCDelimitedFileWriter.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PMCDelimitedFileWriter.cpp.o
+.PHONY : io/PMCDelimitedFileWriter.cpp.o
+
+io/PMCDelimitedFileWriter.i: io/PMCDelimitedFileWriter.cpp.i
+.PHONY : io/PMCDelimitedFileWriter.i
+
+# target to preprocess a source file
+io/PMCDelimitedFileWriter.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PMCDelimitedFileWriter.cpp.i
+.PHONY : io/PMCDelimitedFileWriter.cpp.i
+
+io/PMCDelimitedFileWriter.s: io/PMCDelimitedFileWriter.cpp.s
+.PHONY : io/PMCDelimitedFileWriter.s
+
+# target to generate assembly for a file
+io/PMCDelimitedFileWriter.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PMCDelimitedFileWriter.cpp.s
+.PHONY : io/PMCDelimitedFileWriter.cpp.s
+
+io/PMCPepXMLWriter.o: io/PMCPepXMLWriter.cpp.o
+.PHONY : io/PMCPepXMLWriter.o
+
+# target to build an object file
+io/PMCPepXMLWriter.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PMCPepXMLWriter.cpp.o
+.PHONY : io/PMCPepXMLWriter.cpp.o
+
+io/PMCPepXMLWriter.i: io/PMCPepXMLWriter.cpp.i
+.PHONY : io/PMCPepXMLWriter.i
+
+# target to preprocess a source file
+io/PMCPepXMLWriter.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PMCPepXMLWriter.cpp.i
+.PHONY : io/PMCPepXMLWriter.cpp.i
+
+io/PMCPepXMLWriter.s: io/PMCPepXMLWriter.cpp.s
+.PHONY : io/PMCPepXMLWriter.s
+
+# target to generate assembly for a file
+io/PMCPepXMLWriter.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PMCPepXMLWriter.cpp.s
+.PHONY : io/PMCPepXMLWriter.cpp.s
+
+io/PMCSQTWriter.o: io/PMCSQTWriter.cpp.o
+.PHONY : io/PMCSQTWriter.o
+
+# target to build an object file
+io/PMCSQTWriter.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PMCSQTWriter.cpp.o
+.PHONY : io/PMCSQTWriter.cpp.o
+
+io/PMCSQTWriter.i: io/PMCSQTWriter.cpp.i
+.PHONY : io/PMCSQTWriter.i
+
+# target to preprocess a source file
+io/PMCSQTWriter.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PMCSQTWriter.cpp.i
+.PHONY : io/PMCSQTWriter.cpp.i
+
+io/PMCSQTWriter.s: io/PMCSQTWriter.cpp.s
+.PHONY : io/PMCSQTWriter.s
+
+# target to generate assembly for a file
+io/PMCSQTWriter.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PMCSQTWriter.cpp.s
+.PHONY : io/PMCSQTWriter.cpp.s
+
+io/PSMReader.o: io/PSMReader.cpp.o
+.PHONY : io/PSMReader.o
+
+# target to build an object file
+io/PSMReader.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PSMReader.cpp.o
+.PHONY : io/PSMReader.cpp.o
+
+io/PSMReader.i: io/PSMReader.cpp.i
+.PHONY : io/PSMReader.i
+
+# target to preprocess a source file
+io/PSMReader.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PSMReader.cpp.i
+.PHONY : io/PSMReader.cpp.i
+
+io/PSMReader.s: io/PSMReader.cpp.s
+.PHONY : io/PSMReader.s
+
+# target to generate assembly for a file
+io/PSMReader.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PSMReader.cpp.s
+.PHONY : io/PSMReader.cpp.s
+
+io/PSMWriter.o: io/PSMWriter.cpp.o
+.PHONY : io/PSMWriter.o
+
+# target to build an object file
+io/PSMWriter.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PSMWriter.cpp.o
+.PHONY : io/PSMWriter.cpp.o
+
+io/PSMWriter.i: io/PSMWriter.cpp.i
+.PHONY : io/PSMWriter.i
+
+# target to preprocess a source file
+io/PSMWriter.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PSMWriter.cpp.i
+.PHONY : io/PSMWriter.cpp.i
+
+io/PSMWriter.s: io/PSMWriter.cpp.s
+.PHONY : io/PSMWriter.s
+
+# target to generate assembly for a file
+io/PSMWriter.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PSMWriter.cpp.s
+.PHONY : io/PSMWriter.cpp.s
+
+io/PWIZSpectrumCollection.o: io/PWIZSpectrumCollection.cpp.o
+.PHONY : io/PWIZSpectrumCollection.o
+
+# target to build an object file
+io/PWIZSpectrumCollection.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PWIZSpectrumCollection.cpp.o
+.PHONY : io/PWIZSpectrumCollection.cpp.o
+
+io/PWIZSpectrumCollection.i: io/PWIZSpectrumCollection.cpp.i
+.PHONY : io/PWIZSpectrumCollection.i
+
+# target to preprocess a source file
+io/PWIZSpectrumCollection.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PWIZSpectrumCollection.cpp.i
+.PHONY : io/PWIZSpectrumCollection.cpp.i
+
+io/PWIZSpectrumCollection.s: io/PWIZSpectrumCollection.cpp.s
+.PHONY : io/PWIZSpectrumCollection.s
+
+# target to generate assembly for a file
+io/PWIZSpectrumCollection.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PWIZSpectrumCollection.cpp.s
+.PHONY : io/PWIZSpectrumCollection.cpp.s
+
+io/PepXMLReader.o: io/PepXMLReader.cpp.o
+.PHONY : io/PepXMLReader.o
+
+# target to build an object file
+io/PepXMLReader.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PepXMLReader.cpp.o
+.PHONY : io/PepXMLReader.cpp.o
+
+io/PepXMLReader.i: io/PepXMLReader.cpp.i
+.PHONY : io/PepXMLReader.i
+
+# target to preprocess a source file
+io/PepXMLReader.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PepXMLReader.cpp.i
+.PHONY : io/PepXMLReader.cpp.i
+
+io/PepXMLReader.s: io/PepXMLReader.cpp.s
+.PHONY : io/PepXMLReader.s
+
+# target to generate assembly for a file
+io/PepXMLReader.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PepXMLReader.cpp.s
+.PHONY : io/PepXMLReader.cpp.s
+
+io/PepXMLWriter.o: io/PepXMLWriter.cpp.o
+.PHONY : io/PepXMLWriter.o
+
+# target to build an object file
+io/PepXMLWriter.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PepXMLWriter.cpp.o
+.PHONY : io/PepXMLWriter.cpp.o
+
+io/PepXMLWriter.i: io/PepXMLWriter.cpp.i
+.PHONY : io/PepXMLWriter.i
+
+# target to preprocess a source file
+io/PepXMLWriter.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PepXMLWriter.cpp.i
+.PHONY : io/PepXMLWriter.cpp.i
+
+io/PepXMLWriter.s: io/PepXMLWriter.cpp.s
+.PHONY : io/PepXMLWriter.s
+
+# target to generate assembly for a file
+io/PepXMLWriter.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PepXMLWriter.cpp.s
+.PHONY : io/PepXMLWriter.cpp.s
+
+io/PinWriter.o: io/PinWriter.cpp.o
+.PHONY : io/PinWriter.o
+
+# target to build an object file
+io/PinWriter.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PinWriter.cpp.o
+.PHONY : io/PinWriter.cpp.o
+
+io/PinWriter.i: io/PinWriter.cpp.i
+.PHONY : io/PinWriter.i
+
+# target to preprocess a source file
+io/PinWriter.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PinWriter.cpp.i
+.PHONY : io/PinWriter.cpp.i
+
+io/PinWriter.s: io/PinWriter.cpp.s
+.PHONY : io/PinWriter.s
+
+# target to generate assembly for a file
+io/PinWriter.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/PinWriter.cpp.s
+.PHONY : io/PinWriter.cpp.s
+
+io/SQTReader.o: io/SQTReader.cpp.o
+.PHONY : io/SQTReader.o
+
+# target to build an object file
+io/SQTReader.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/SQTReader.cpp.o
+.PHONY : io/SQTReader.cpp.o
+
+io/SQTReader.i: io/SQTReader.cpp.i
+.PHONY : io/SQTReader.i
+
+# target to preprocess a source file
+io/SQTReader.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/SQTReader.cpp.i
+.PHONY : io/SQTReader.cpp.i
+
+io/SQTReader.s: io/SQTReader.cpp.s
+.PHONY : io/SQTReader.s
+
+# target to generate assembly for a file
+io/SQTReader.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/SQTReader.cpp.s
+.PHONY : io/SQTReader.cpp.s
+
+io/SQTWriter.o: io/SQTWriter.cpp.o
+.PHONY : io/SQTWriter.o
+
+# target to build an object file
+io/SQTWriter.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/SQTWriter.cpp.o
+.PHONY : io/SQTWriter.cpp.o
+
+io/SQTWriter.i: io/SQTWriter.cpp.i
+.PHONY : io/SQTWriter.i
+
+# target to preprocess a source file
+io/SQTWriter.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/SQTWriter.cpp.i
+.PHONY : io/SQTWriter.cpp.i
+
+io/SQTWriter.s: io/SQTWriter.cpp.s
+.PHONY : io/SQTWriter.s
+
+# target to generate assembly for a file
+io/SQTWriter.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/SQTWriter.cpp.s
+.PHONY : io/SQTWriter.cpp.s
+
+io/SpectrumCollection.o: io/SpectrumCollection.cpp.o
+.PHONY : io/SpectrumCollection.o
+
+# target to build an object file
+io/SpectrumCollection.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/SpectrumCollection.cpp.o
+.PHONY : io/SpectrumCollection.cpp.o
+
+io/SpectrumCollection.i: io/SpectrumCollection.cpp.i
+.PHONY : io/SpectrumCollection.i
+
+# target to preprocess a source file
+io/SpectrumCollection.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/SpectrumCollection.cpp.i
+.PHONY : io/SpectrumCollection.cpp.i
+
+io/SpectrumCollection.s: io/SpectrumCollection.cpp.s
+.PHONY : io/SpectrumCollection.s
+
+# target to generate assembly for a file
+io/SpectrumCollection.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/SpectrumCollection.cpp.s
+.PHONY : io/SpectrumCollection.cpp.s
+
+io/SpectrumCollectionFactory.o: io/SpectrumCollectionFactory.cpp.o
+.PHONY : io/SpectrumCollectionFactory.o
+
+# target to build an object file
+io/SpectrumCollectionFactory.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/SpectrumCollectionFactory.cpp.o
+.PHONY : io/SpectrumCollectionFactory.cpp.o
+
+io/SpectrumCollectionFactory.i: io/SpectrumCollectionFactory.cpp.i
+.PHONY : io/SpectrumCollectionFactory.i
+
+# target to preprocess a source file
+io/SpectrumCollectionFactory.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/SpectrumCollectionFactory.cpp.i
+.PHONY : io/SpectrumCollectionFactory.cpp.i
+
+io/SpectrumCollectionFactory.s: io/SpectrumCollectionFactory.cpp.s
+.PHONY : io/SpectrumCollectionFactory.s
+
+# target to generate assembly for a file
+io/SpectrumCollectionFactory.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/SpectrumCollectionFactory.cpp.s
+.PHONY : io/SpectrumCollectionFactory.cpp.s
+
+io/SpectrumRecordWriter.o: io/SpectrumRecordWriter.cpp.o
+.PHONY : io/SpectrumRecordWriter.o
+
+# target to build an object file
+io/SpectrumRecordWriter.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/SpectrumRecordWriter.cpp.o
+.PHONY : io/SpectrumRecordWriter.cpp.o
+
+io/SpectrumRecordWriter.i: io/SpectrumRecordWriter.cpp.i
+.PHONY : io/SpectrumRecordWriter.i
+
+# target to preprocess a source file
+io/SpectrumRecordWriter.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/SpectrumRecordWriter.cpp.i
+.PHONY : io/SpectrumRecordWriter.cpp.i
+
+io/SpectrumRecordWriter.s: io/SpectrumRecordWriter.cpp.s
+.PHONY : io/SpectrumRecordWriter.s
+
+# target to generate assembly for a file
+io/SpectrumRecordWriter.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/SpectrumRecordWriter.cpp.s
+.PHONY : io/SpectrumRecordWriter.cpp.s
+
+io/carp.o: io/carp.cpp.o
+.PHONY : io/carp.o
+
+# target to build an object file
+io/carp.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/carp.cpp.o
+.PHONY : io/carp.cpp.o
+
+io/carp.i: io/carp.cpp.i
+.PHONY : io/carp.i
+
+# target to preprocess a source file
+io/carp.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/carp.cpp.i
+.PHONY : io/carp.cpp.i
+
+io/carp.s: io/carp.cpp.s
+.PHONY : io/carp.s
+
+# target to generate assembly for a file
+io/carp.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/io/carp.cpp.s
+.PHONY : io/carp.cpp.s
+
+model/AbstractMatch.o: model/AbstractMatch.cpp.o
+.PHONY : model/AbstractMatch.o
+
+# target to build an object file
+model/AbstractMatch.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/AbstractMatch.cpp.o
+.PHONY : model/AbstractMatch.cpp.o
+
+model/AbstractMatch.i: model/AbstractMatch.cpp.i
+.PHONY : model/AbstractMatch.i
+
+# target to preprocess a source file
+model/AbstractMatch.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/AbstractMatch.cpp.i
+.PHONY : model/AbstractMatch.cpp.i
+
+model/AbstractMatch.s: model/AbstractMatch.cpp.s
+.PHONY : model/AbstractMatch.s
+
+# target to generate assembly for a file
+model/AbstractMatch.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/AbstractMatch.cpp.s
+.PHONY : model/AbstractMatch.cpp.s
+
+model/Database.o: model/Database.cpp.o
+.PHONY : model/Database.o
+
+# target to build an object file
+model/Database.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Database.cpp.o
+.PHONY : model/Database.cpp.o
+
+model/Database.i: model/Database.cpp.i
+.PHONY : model/Database.i
+
+# target to preprocess a source file
+model/Database.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Database.cpp.i
+.PHONY : model/Database.cpp.i
+
+model/Database.s: model/Database.cpp.s
+.PHONY : model/Database.s
+
+# target to generate assembly for a file
+model/Database.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Database.cpp.s
+.PHONY : model/Database.cpp.s
+
+model/DatabasePeptideIterator.o: model/DatabasePeptideIterator.cpp.o
+.PHONY : model/DatabasePeptideIterator.o
+
+# target to build an object file
+model/DatabasePeptideIterator.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/DatabasePeptideIterator.cpp.o
+.PHONY : model/DatabasePeptideIterator.cpp.o
+
+model/DatabasePeptideIterator.i: model/DatabasePeptideIterator.cpp.i
+.PHONY : model/DatabasePeptideIterator.i
+
+# target to preprocess a source file
+model/DatabasePeptideIterator.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/DatabasePeptideIterator.cpp.i
+.PHONY : model/DatabasePeptideIterator.cpp.i
+
+model/DatabasePeptideIterator.s: model/DatabasePeptideIterator.cpp.s
+.PHONY : model/DatabasePeptideIterator.s
+
+# target to generate assembly for a file
+model/DatabasePeptideIterator.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/DatabasePeptideIterator.cpp.s
+.PHONY : model/DatabasePeptideIterator.cpp.s
+
+model/DatabaseProteinIterator.o: model/DatabaseProteinIterator.cpp.o
+.PHONY : model/DatabaseProteinIterator.o
+
+# target to build an object file
+model/DatabaseProteinIterator.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/DatabaseProteinIterator.cpp.o
+.PHONY : model/DatabaseProteinIterator.cpp.o
+
+model/DatabaseProteinIterator.i: model/DatabaseProteinIterator.cpp.i
+.PHONY : model/DatabaseProteinIterator.i
+
+# target to preprocess a source file
+model/DatabaseProteinIterator.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/DatabaseProteinIterator.cpp.i
+.PHONY : model/DatabaseProteinIterator.cpp.i
+
+model/DatabaseProteinIterator.s: model/DatabaseProteinIterator.cpp.s
+.PHONY : model/DatabaseProteinIterator.s
+
+# target to generate assembly for a file
+model/DatabaseProteinIterator.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/DatabaseProteinIterator.cpp.s
+.PHONY : model/DatabaseProteinIterator.cpp.s
+
+model/FilteredSpectrumChargeIterator.o: model/FilteredSpectrumChargeIterator.cpp.o
+.PHONY : model/FilteredSpectrumChargeIterator.o
+
+# target to build an object file
+model/FilteredSpectrumChargeIterator.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/FilteredSpectrumChargeIterator.cpp.o
+.PHONY : model/FilteredSpectrumChargeIterator.cpp.o
+
+model/FilteredSpectrumChargeIterator.i: model/FilteredSpectrumChargeIterator.cpp.i
+.PHONY : model/FilteredSpectrumChargeIterator.i
+
+# target to preprocess a source file
+model/FilteredSpectrumChargeIterator.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/FilteredSpectrumChargeIterator.cpp.i
+.PHONY : model/FilteredSpectrumChargeIterator.cpp.i
+
+model/FilteredSpectrumChargeIterator.s: model/FilteredSpectrumChargeIterator.cpp.s
+.PHONY : model/FilteredSpectrumChargeIterator.s
+
+# target to generate assembly for a file
+model/FilteredSpectrumChargeIterator.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/FilteredSpectrumChargeIterator.cpp.s
+.PHONY : model/FilteredSpectrumChargeIterator.cpp.s
+
+model/GeneratePeptidesIterator.o: model/GeneratePeptidesIterator.cpp.o
+.PHONY : model/GeneratePeptidesIterator.o
+
+# target to build an object file
+model/GeneratePeptidesIterator.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/GeneratePeptidesIterator.cpp.o
+.PHONY : model/GeneratePeptidesIterator.cpp.o
+
+model/GeneratePeptidesIterator.i: model/GeneratePeptidesIterator.cpp.i
+.PHONY : model/GeneratePeptidesIterator.i
+
+# target to preprocess a source file
+model/GeneratePeptidesIterator.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/GeneratePeptidesIterator.cpp.i
+.PHONY : model/GeneratePeptidesIterator.cpp.i
+
+model/GeneratePeptidesIterator.s: model/GeneratePeptidesIterator.cpp.s
+.PHONY : model/GeneratePeptidesIterator.s
+
+# target to generate assembly for a file
+model/GeneratePeptidesIterator.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/GeneratePeptidesIterator.cpp.s
+.PHONY : model/GeneratePeptidesIterator.cpp.s
+
+model/Ion.o: model/Ion.cpp.o
+.PHONY : model/Ion.o
+
+# target to build an object file
+model/Ion.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Ion.cpp.o
+.PHONY : model/Ion.cpp.o
+
+model/Ion.i: model/Ion.cpp.i
+.PHONY : model/Ion.i
+
+# target to preprocess a source file
+model/Ion.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Ion.cpp.i
+.PHONY : model/Ion.cpp.i
+
+model/Ion.s: model/Ion.cpp.s
+.PHONY : model/Ion.s
+
+# target to generate assembly for a file
+model/Ion.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Ion.cpp.s
+.PHONY : model/Ion.cpp.s
+
+model/IonConstraint.o: model/IonConstraint.cpp.o
+.PHONY : model/IonConstraint.o
+
+# target to build an object file
+model/IonConstraint.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/IonConstraint.cpp.o
+.PHONY : model/IonConstraint.cpp.o
+
+model/IonConstraint.i: model/IonConstraint.cpp.i
+.PHONY : model/IonConstraint.i
+
+# target to preprocess a source file
+model/IonConstraint.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/IonConstraint.cpp.i
+.PHONY : model/IonConstraint.cpp.i
+
+model/IonConstraint.s: model/IonConstraint.cpp.s
+.PHONY : model/IonConstraint.s
+
+# target to generate assembly for a file
+model/IonConstraint.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/IonConstraint.cpp.s
+.PHONY : model/IonConstraint.cpp.s
+
+model/IonFilteredIterator.o: model/IonFilteredIterator.cpp.o
+.PHONY : model/IonFilteredIterator.o
+
+# target to build an object file
+model/IonFilteredIterator.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/IonFilteredIterator.cpp.o
+.PHONY : model/IonFilteredIterator.cpp.o
+
+model/IonFilteredIterator.i: model/IonFilteredIterator.cpp.i
+.PHONY : model/IonFilteredIterator.i
+
+# target to preprocess a source file
+model/IonFilteredIterator.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/IonFilteredIterator.cpp.i
+.PHONY : model/IonFilteredIterator.cpp.i
+
+model/IonFilteredIterator.s: model/IonFilteredIterator.cpp.s
+.PHONY : model/IonFilteredIterator.s
+
+# target to generate assembly for a file
+model/IonFilteredIterator.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/IonFilteredIterator.cpp.s
+.PHONY : model/IonFilteredIterator.cpp.s
+
+model/IonSeries.o: model/IonSeries.cpp.o
+.PHONY : model/IonSeries.o
+
+# target to build an object file
+model/IonSeries.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/IonSeries.cpp.o
+.PHONY : model/IonSeries.cpp.o
+
+model/IonSeries.i: model/IonSeries.cpp.i
+.PHONY : model/IonSeries.i
+
+# target to preprocess a source file
+model/IonSeries.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/IonSeries.cpp.i
+.PHONY : model/IonSeries.cpp.i
+
+model/IonSeries.s: model/IonSeries.cpp.s
+.PHONY : model/IonSeries.s
+
+# target to generate assembly for a file
+model/IonSeries.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/IonSeries.cpp.s
+.PHONY : model/IonSeries.cpp.s
+
+model/Match.o: model/Match.cpp.o
+.PHONY : model/Match.o
+
+# target to build an object file
+model/Match.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Match.cpp.o
+.PHONY : model/Match.cpp.o
+
+model/Match.i: model/Match.cpp.i
+.PHONY : model/Match.i
+
+# target to preprocess a source file
+model/Match.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Match.cpp.i
+.PHONY : model/Match.cpp.i
+
+model/Match.s: model/Match.cpp.s
+.PHONY : model/Match.s
+
+# target to generate assembly for a file
+model/Match.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Match.cpp.s
+.PHONY : model/Match.cpp.s
+
+model/MatchCollection.o: model/MatchCollection.cpp.o
+.PHONY : model/MatchCollection.o
+
+# target to build an object file
+model/MatchCollection.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/MatchCollection.cpp.o
+.PHONY : model/MatchCollection.cpp.o
+
+model/MatchCollection.i: model/MatchCollection.cpp.i
+.PHONY : model/MatchCollection.i
+
+# target to preprocess a source file
+model/MatchCollection.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/MatchCollection.cpp.i
+.PHONY : model/MatchCollection.cpp.i
+
+model/MatchCollection.s: model/MatchCollection.cpp.s
+.PHONY : model/MatchCollection.s
+
+# target to generate assembly for a file
+model/MatchCollection.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/MatchCollection.cpp.s
+.PHONY : model/MatchCollection.cpp.s
+
+model/MatchCollectionIterator.o: model/MatchCollectionIterator.cpp.o
+.PHONY : model/MatchCollectionIterator.o
+
+# target to build an object file
+model/MatchCollectionIterator.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/MatchCollectionIterator.cpp.o
+.PHONY : model/MatchCollectionIterator.cpp.o
+
+model/MatchCollectionIterator.i: model/MatchCollectionIterator.cpp.i
+.PHONY : model/MatchCollectionIterator.i
+
+# target to preprocess a source file
+model/MatchCollectionIterator.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/MatchCollectionIterator.cpp.i
+.PHONY : model/MatchCollectionIterator.cpp.i
+
+model/MatchCollectionIterator.s: model/MatchCollectionIterator.cpp.s
+.PHONY : model/MatchCollectionIterator.s
+
+# target to generate assembly for a file
+model/MatchCollectionIterator.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/MatchCollectionIterator.cpp.s
+.PHONY : model/MatchCollectionIterator.cpp.s
+
+model/MatchIterator.o: model/MatchIterator.cpp.o
+.PHONY : model/MatchIterator.o
+
+# target to build an object file
+model/MatchIterator.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/MatchIterator.cpp.o
+.PHONY : model/MatchIterator.cpp.o
+
+model/MatchIterator.i: model/MatchIterator.cpp.i
+.PHONY : model/MatchIterator.i
+
+# target to preprocess a source file
+model/MatchIterator.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/MatchIterator.cpp.i
+.PHONY : model/MatchIterator.cpp.i
+
+model/MatchIterator.s: model/MatchIterator.cpp.s
+.PHONY : model/MatchIterator.s
+
+# target to generate assembly for a file
+model/MatchIterator.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/MatchIterator.cpp.s
+.PHONY : model/MatchIterator.cpp.s
+
+model/Modification.o: model/Modification.cpp.o
+.PHONY : model/Modification.o
+
+# target to build an object file
+model/Modification.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Modification.cpp.o
+.PHONY : model/Modification.cpp.o
+
+model/Modification.i: model/Modification.cpp.i
+.PHONY : model/Modification.i
+
+# target to preprocess a source file
+model/Modification.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Modification.cpp.i
+.PHONY : model/Modification.cpp.i
+
+model/Modification.s: model/Modification.cpp.s
+.PHONY : model/Modification.s
+
+# target to generate assembly for a file
+model/Modification.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Modification.cpp.s
+.PHONY : model/Modification.cpp.s
+
+model/ModifiedPeptidesIterator.o: model/ModifiedPeptidesIterator.cpp.o
+.PHONY : model/ModifiedPeptidesIterator.o
+
+# target to build an object file
+model/ModifiedPeptidesIterator.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ModifiedPeptidesIterator.cpp.o
+.PHONY : model/ModifiedPeptidesIterator.cpp.o
+
+model/ModifiedPeptidesIterator.i: model/ModifiedPeptidesIterator.cpp.i
+.PHONY : model/ModifiedPeptidesIterator.i
+
+# target to preprocess a source file
+model/ModifiedPeptidesIterator.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ModifiedPeptidesIterator.cpp.i
+.PHONY : model/ModifiedPeptidesIterator.cpp.i
+
+model/ModifiedPeptidesIterator.s: model/ModifiedPeptidesIterator.cpp.s
+.PHONY : model/ModifiedPeptidesIterator.s
+
+# target to generate assembly for a file
+model/ModifiedPeptidesIterator.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ModifiedPeptidesIterator.cpp.s
+.PHONY : model/ModifiedPeptidesIterator.cpp.s
+
+model/Peak.o: model/Peak.cpp.o
+.PHONY : model/Peak.o
+
+# target to build an object file
+model/Peak.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Peak.cpp.o
+.PHONY : model/Peak.cpp.o
+
+model/Peak.i: model/Peak.cpp.i
+.PHONY : model/Peak.i
+
+# target to preprocess a source file
+model/Peak.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Peak.cpp.i
+.PHONY : model/Peak.cpp.i
+
+model/Peak.s: model/Peak.cpp.s
+.PHONY : model/Peak.s
+
+# target to generate assembly for a file
+model/Peak.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Peak.cpp.s
+.PHONY : model/Peak.cpp.s
+
+model/Peptide.o: model/Peptide.cpp.o
+.PHONY : model/Peptide.o
+
+# target to build an object file
+model/Peptide.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Peptide.cpp.o
+.PHONY : model/Peptide.cpp.o
+
+model/Peptide.i: model/Peptide.cpp.i
+.PHONY : model/Peptide.i
+
+# target to preprocess a source file
+model/Peptide.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Peptide.cpp.i
+.PHONY : model/Peptide.cpp.i
+
+model/Peptide.s: model/Peptide.cpp.s
+.PHONY : model/Peptide.s
+
+# target to generate assembly for a file
+model/Peptide.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Peptide.cpp.s
+.PHONY : model/Peptide.cpp.s
+
+model/PeptideConstraint.o: model/PeptideConstraint.cpp.o
+.PHONY : model/PeptideConstraint.o
+
+# target to build an object file
+model/PeptideConstraint.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/PeptideConstraint.cpp.o
+.PHONY : model/PeptideConstraint.cpp.o
+
+model/PeptideConstraint.i: model/PeptideConstraint.cpp.i
+.PHONY : model/PeptideConstraint.i
+
+# target to preprocess a source file
+model/PeptideConstraint.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/PeptideConstraint.cpp.i
+.PHONY : model/PeptideConstraint.cpp.i
+
+model/PeptideConstraint.s: model/PeptideConstraint.cpp.s
+.PHONY : model/PeptideConstraint.s
+
+# target to generate assembly for a file
+model/PeptideConstraint.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/PeptideConstraint.cpp.s
+.PHONY : model/PeptideConstraint.cpp.s
+
+model/PeptideMatch.o: model/PeptideMatch.cpp.o
+.PHONY : model/PeptideMatch.o
+
+# target to build an object file
+model/PeptideMatch.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/PeptideMatch.cpp.o
+.PHONY : model/PeptideMatch.cpp.o
+
+model/PeptideMatch.i: model/PeptideMatch.cpp.i
+.PHONY : model/PeptideMatch.i
+
+# target to preprocess a source file
+model/PeptideMatch.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/PeptideMatch.cpp.i
+.PHONY : model/PeptideMatch.cpp.i
+
+model/PeptideMatch.s: model/PeptideMatch.cpp.s
+.PHONY : model/PeptideMatch.s
+
+# target to generate assembly for a file
+model/PeptideMatch.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/PeptideMatch.cpp.s
+.PHONY : model/PeptideMatch.cpp.s
+
+model/PeptideSrc.o: model/PeptideSrc.cpp.o
+.PHONY : model/PeptideSrc.o
+
+# target to build an object file
+model/PeptideSrc.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/PeptideSrc.cpp.o
+.PHONY : model/PeptideSrc.cpp.o
+
+model/PeptideSrc.i: model/PeptideSrc.cpp.i
+.PHONY : model/PeptideSrc.i
+
+# target to preprocess a source file
+model/PeptideSrc.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/PeptideSrc.cpp.i
+.PHONY : model/PeptideSrc.cpp.i
+
+model/PeptideSrc.s: model/PeptideSrc.cpp.s
+.PHONY : model/PeptideSrc.s
+
+# target to generate assembly for a file
+model/PeptideSrc.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/PeptideSrc.cpp.s
+.PHONY : model/PeptideSrc.cpp.s
+
+model/PostProcessProtein.o: model/PostProcessProtein.cpp.o
+.PHONY : model/PostProcessProtein.o
+
+# target to build an object file
+model/PostProcessProtein.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/PostProcessProtein.cpp.o
+.PHONY : model/PostProcessProtein.cpp.o
+
+model/PostProcessProtein.i: model/PostProcessProtein.cpp.i
+.PHONY : model/PostProcessProtein.i
+
+# target to preprocess a source file
+model/PostProcessProtein.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/PostProcessProtein.cpp.i
+.PHONY : model/PostProcessProtein.cpp.i
+
+model/PostProcessProtein.s: model/PostProcessProtein.cpp.s
+.PHONY : model/PostProcessProtein.s
+
+# target to generate assembly for a file
+model/PostProcessProtein.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/PostProcessProtein.cpp.s
+.PHONY : model/PostProcessProtein.cpp.s
+
+model/Protein.o: model/Protein.cpp.o
+.PHONY : model/Protein.o
+
+# target to build an object file
+model/Protein.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Protein.cpp.o
+.PHONY : model/Protein.cpp.o
+
+model/Protein.i: model/Protein.cpp.i
+.PHONY : model/Protein.i
+
+# target to preprocess a source file
+model/Protein.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Protein.cpp.i
+.PHONY : model/Protein.cpp.i
+
+model/Protein.s: model/Protein.cpp.s
+.PHONY : model/Protein.s
+
+# target to generate assembly for a file
+model/Protein.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Protein.cpp.s
+.PHONY : model/Protein.cpp.s
+
+model/ProteinIndex.o: model/ProteinIndex.cpp.o
+.PHONY : model/ProteinIndex.o
+
+# target to build an object file
+model/ProteinIndex.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ProteinIndex.cpp.o
+.PHONY : model/ProteinIndex.cpp.o
+
+model/ProteinIndex.i: model/ProteinIndex.cpp.i
+.PHONY : model/ProteinIndex.i
+
+# target to preprocess a source file
+model/ProteinIndex.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ProteinIndex.cpp.i
+.PHONY : model/ProteinIndex.cpp.i
+
+model/ProteinIndex.s: model/ProteinIndex.cpp.s
+.PHONY : model/ProteinIndex.s
+
+# target to generate assembly for a file
+model/ProteinIndex.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ProteinIndex.cpp.s
+.PHONY : model/ProteinIndex.cpp.s
+
+model/ProteinIndexIterator.o: model/ProteinIndexIterator.cpp.o
+.PHONY : model/ProteinIndexIterator.o
+
+# target to build an object file
+model/ProteinIndexIterator.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ProteinIndexIterator.cpp.o
+.PHONY : model/ProteinIndexIterator.cpp.o
+
+model/ProteinIndexIterator.i: model/ProteinIndexIterator.cpp.i
+.PHONY : model/ProteinIndexIterator.i
+
+# target to preprocess a source file
+model/ProteinIndexIterator.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ProteinIndexIterator.cpp.i
+.PHONY : model/ProteinIndexIterator.cpp.i
+
+model/ProteinIndexIterator.s: model/ProteinIndexIterator.cpp.s
+.PHONY : model/ProteinIndexIterator.s
+
+# target to generate assembly for a file
+model/ProteinIndexIterator.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ProteinIndexIterator.cpp.s
+.PHONY : model/ProteinIndexIterator.cpp.s
+
+model/ProteinMatch.o: model/ProteinMatch.cpp.o
+.PHONY : model/ProteinMatch.o
+
+# target to build an object file
+model/ProteinMatch.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ProteinMatch.cpp.o
+.PHONY : model/ProteinMatch.cpp.o
+
+model/ProteinMatch.i: model/ProteinMatch.cpp.i
+.PHONY : model/ProteinMatch.i
+
+# target to preprocess a source file
+model/ProteinMatch.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ProteinMatch.cpp.i
+.PHONY : model/ProteinMatch.cpp.i
+
+model/ProteinMatch.s: model/ProteinMatch.cpp.s
+.PHONY : model/ProteinMatch.s
+
+# target to generate assembly for a file
+model/ProteinMatch.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ProteinMatch.cpp.s
+.PHONY : model/ProteinMatch.cpp.s
+
+model/ProteinMatchCollection.o: model/ProteinMatchCollection.cpp.o
+.PHONY : model/ProteinMatchCollection.o
+
+# target to build an object file
+model/ProteinMatchCollection.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ProteinMatchCollection.cpp.o
+.PHONY : model/ProteinMatchCollection.cpp.o
+
+model/ProteinMatchCollection.i: model/ProteinMatchCollection.cpp.i
+.PHONY : model/ProteinMatchCollection.i
+
+# target to preprocess a source file
+model/ProteinMatchCollection.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ProteinMatchCollection.cpp.i
+.PHONY : model/ProteinMatchCollection.cpp.i
+
+model/ProteinMatchCollection.s: model/ProteinMatchCollection.cpp.s
+.PHONY : model/ProteinMatchCollection.s
+
+# target to generate assembly for a file
+model/ProteinMatchCollection.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ProteinMatchCollection.cpp.s
+.PHONY : model/ProteinMatchCollection.cpp.s
+
+model/ProteinPeptideIterator.o: model/ProteinPeptideIterator.cpp.o
+.PHONY : model/ProteinPeptideIterator.o
+
+# target to build an object file
+model/ProteinPeptideIterator.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ProteinPeptideIterator.cpp.o
+.PHONY : model/ProteinPeptideIterator.cpp.o
+
+model/ProteinPeptideIterator.i: model/ProteinPeptideIterator.cpp.i
+.PHONY : model/ProteinPeptideIterator.i
+
+# target to preprocess a source file
+model/ProteinPeptideIterator.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ProteinPeptideIterator.cpp.i
+.PHONY : model/ProteinPeptideIterator.cpp.i
+
+model/ProteinPeptideIterator.s: model/ProteinPeptideIterator.cpp.s
+.PHONY : model/ProteinPeptideIterator.s
+
+# target to generate assembly for a file
+model/ProteinPeptideIterator.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/ProteinPeptideIterator.cpp.s
+.PHONY : model/ProteinPeptideIterator.cpp.s
+
+model/Scorer.o: model/Scorer.cpp.o
+.PHONY : model/Scorer.o
+
+# target to build an object file
+model/Scorer.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Scorer.cpp.o
+.PHONY : model/Scorer.cpp.o
+
+model/Scorer.i: model/Scorer.cpp.i
+.PHONY : model/Scorer.i
+
+# target to preprocess a source file
+model/Scorer.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Scorer.cpp.i
+.PHONY : model/Scorer.cpp.i
+
+model/Scorer.s: model/Scorer.cpp.s
+.PHONY : model/Scorer.s
+
+# target to generate assembly for a file
+model/Scorer.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Scorer.cpp.s
+.PHONY : model/Scorer.cpp.s
+
+model/Spectrum.o: model/Spectrum.cpp.o
+.PHONY : model/Spectrum.o
+
+# target to build an object file
+model/Spectrum.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Spectrum.cpp.o
+.PHONY : model/Spectrum.cpp.o
+
+model/Spectrum.i: model/Spectrum.cpp.i
+.PHONY : model/Spectrum.i
+
+# target to preprocess a source file
+model/Spectrum.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Spectrum.cpp.i
+.PHONY : model/Spectrum.cpp.i
+
+model/Spectrum.s: model/Spectrum.cpp.s
+.PHONY : model/Spectrum.s
+
+# target to generate assembly for a file
+model/Spectrum.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/Spectrum.cpp.s
+.PHONY : model/Spectrum.cpp.s
+
+model/SpectrumMatch.o: model/SpectrumMatch.cpp.o
+.PHONY : model/SpectrumMatch.o
+
+# target to build an object file
+model/SpectrumMatch.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/SpectrumMatch.cpp.o
+.PHONY : model/SpectrumMatch.cpp.o
+
+model/SpectrumMatch.i: model/SpectrumMatch.cpp.i
+.PHONY : model/SpectrumMatch.i
+
+# target to preprocess a source file
+model/SpectrumMatch.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/SpectrumMatch.cpp.i
+.PHONY : model/SpectrumMatch.cpp.i
+
+model/SpectrumMatch.s: model/SpectrumMatch.cpp.s
+.PHONY : model/SpectrumMatch.s
+
+# target to generate assembly for a file
+model/SpectrumMatch.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/SpectrumMatch.cpp.s
+.PHONY : model/SpectrumMatch.cpp.s
+
+model/SpectrumZState.o: model/SpectrumZState.cpp.o
+.PHONY : model/SpectrumZState.o
+
+# target to build an object file
+model/SpectrumZState.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/SpectrumZState.cpp.o
+.PHONY : model/SpectrumZState.cpp.o
+
+model/SpectrumZState.i: model/SpectrumZState.cpp.i
+.PHONY : model/SpectrumZState.i
+
+# target to preprocess a source file
+model/SpectrumZState.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/SpectrumZState.cpp.i
+.PHONY : model/SpectrumZState.cpp.i
+
+model/SpectrumZState.s: model/SpectrumZState.cpp.s
+.PHONY : model/SpectrumZState.s
+
+# target to generate assembly for a file
+model/SpectrumZState.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/model/SpectrumZState.cpp.s
+.PHONY : model/SpectrumZState.cpp.s
+
+parameter.o: parameter.cpp.o
+.PHONY : parameter.o
+
+# target to build an object file
+parameter.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/parameter.cpp.o
+.PHONY : parameter.cpp.o
+
+parameter.i: parameter.cpp.i
+.PHONY : parameter.i
+
+# target to preprocess a source file
+parameter.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/parameter.cpp.i
+.PHONY : parameter.cpp.i
+
+parameter.s: parameter.cpp.s
+.PHONY : parameter.s
+
+# target to generate assembly for a file
+parameter.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/parameter.cpp.s
+.PHONY : parameter.cpp.s
+
+util/Alphabet.o: util/Alphabet.cpp.o
+.PHONY : util/Alphabet.o
+
+# target to build an object file
+util/Alphabet.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/Alphabet.cpp.o
+.PHONY : util/Alphabet.cpp.o
+
+util/Alphabet.i: util/Alphabet.cpp.i
+.PHONY : util/Alphabet.i
+
+# target to preprocess a source file
+util/Alphabet.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/Alphabet.cpp.i
+.PHONY : util/Alphabet.cpp.i
+
+util/Alphabet.s: util/Alphabet.cpp.s
+.PHONY : util/Alphabet.s
+
+# target to generate assembly for a file
+util/Alphabet.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/Alphabet.cpp.s
+.PHONY : util/Alphabet.cpp.s
+
+util/AminoAcidUtil.o: util/AminoAcidUtil.cpp.o
+.PHONY : util/AminoAcidUtil.o
+
+# target to build an object file
+util/AminoAcidUtil.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/AminoAcidUtil.cpp.o
+.PHONY : util/AminoAcidUtil.cpp.o
+
+util/AminoAcidUtil.i: util/AminoAcidUtil.cpp.i
+.PHONY : util/AminoAcidUtil.i
+
+# target to preprocess a source file
+util/AminoAcidUtil.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/AminoAcidUtil.cpp.i
+.PHONY : util/AminoAcidUtil.cpp.i
+
+util/AminoAcidUtil.s: util/AminoAcidUtil.cpp.s
+.PHONY : util/AminoAcidUtil.s
+
+# target to generate assembly for a file
+util/AminoAcidUtil.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/AminoAcidUtil.cpp.s
+.PHONY : util/AminoAcidUtil.cpp.s
+
+util/ArgParser.o: util/ArgParser.cpp.o
+.PHONY : util/ArgParser.o
+
+# target to build an object file
+util/ArgParser.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/ArgParser.cpp.o
+.PHONY : util/ArgParser.cpp.o
+
+util/ArgParser.i: util/ArgParser.cpp.i
+.PHONY : util/ArgParser.i
+
+# target to preprocess a source file
+util/ArgParser.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/ArgParser.cpp.i
+.PHONY : util/ArgParser.cpp.i
+
+util/ArgParser.s: util/ArgParser.cpp.s
+.PHONY : util/ArgParser.s
+
+# target to generate assembly for a file
+util/ArgParser.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/ArgParser.cpp.s
+.PHONY : util/ArgParser.cpp.s
+
+util/CacheableMass.o: util/CacheableMass.cpp.o
+.PHONY : util/CacheableMass.o
+
+# target to build an object file
+util/CacheableMass.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/CacheableMass.cpp.o
+.PHONY : util/CacheableMass.cpp.o
+
+util/CacheableMass.i: util/CacheableMass.cpp.i
+.PHONY : util/CacheableMass.i
+
+# target to preprocess a source file
+util/CacheableMass.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/CacheableMass.cpp.i
+.PHONY : util/CacheableMass.cpp.i
+
+util/CacheableMass.s: util/CacheableMass.cpp.s
+.PHONY : util/CacheableMass.s
+
+# target to generate assembly for a file
+util/CacheableMass.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/CacheableMass.cpp.s
+.PHONY : util/CacheableMass.cpp.s
+
+util/CarpStreamBuf.o: util/CarpStreamBuf.cpp.o
+.PHONY : util/CarpStreamBuf.o
+
+# target to build an object file
+util/CarpStreamBuf.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/CarpStreamBuf.cpp.o
+.PHONY : util/CarpStreamBuf.cpp.o
+
+util/CarpStreamBuf.i: util/CarpStreamBuf.cpp.i
+.PHONY : util/CarpStreamBuf.i
+
+# target to preprocess a source file
+util/CarpStreamBuf.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/CarpStreamBuf.cpp.i
+.PHONY : util/CarpStreamBuf.cpp.i
+
+util/CarpStreamBuf.s: util/CarpStreamBuf.cpp.s
+.PHONY : util/CarpStreamBuf.s
+
+# target to generate assembly for a file
+util/CarpStreamBuf.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/CarpStreamBuf.cpp.s
+.PHONY : util/CarpStreamBuf.cpp.s
+
+util/FileUtils.o: util/FileUtils.cpp.o
+.PHONY : util/FileUtils.o
+
+# target to build an object file
+util/FileUtils.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/FileUtils.cpp.o
+.PHONY : util/FileUtils.cpp.o
+
+util/FileUtils.i: util/FileUtils.cpp.i
+.PHONY : util/FileUtils.i
+
+# target to preprocess a source file
+util/FileUtils.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/FileUtils.cpp.i
+.PHONY : util/FileUtils.cpp.i
+
+util/FileUtils.s: util/FileUtils.cpp.s
+.PHONY : util/FileUtils.s
+
+# target to generate assembly for a file
+util/FileUtils.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/FileUtils.cpp.s
+.PHONY : util/FileUtils.cpp.s
+
+util/GlobalParams.o: util/GlobalParams.cpp.o
+.PHONY : util/GlobalParams.o
+
+# target to build an object file
+util/GlobalParams.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/GlobalParams.cpp.o
+.PHONY : util/GlobalParams.cpp.o
+
+util/GlobalParams.i: util/GlobalParams.cpp.i
+.PHONY : util/GlobalParams.i
+
+# target to preprocess a source file
+util/GlobalParams.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/GlobalParams.cpp.i
+.PHONY : util/GlobalParams.cpp.i
+
+util/GlobalParams.s: util/GlobalParams.cpp.s
+.PHONY : util/GlobalParams.s
+
+# target to generate assembly for a file
+util/GlobalParams.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/GlobalParams.cpp.s
+.PHONY : util/GlobalParams.cpp.s
+
+util/MathUtil.o: util/MathUtil.cpp.o
+.PHONY : util/MathUtil.o
+
+# target to build an object file
+util/MathUtil.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/MathUtil.cpp.o
+.PHONY : util/MathUtil.cpp.o
+
+util/MathUtil.i: util/MathUtil.cpp.i
+.PHONY : util/MathUtil.i
+
+# target to preprocess a source file
+util/MathUtil.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/MathUtil.cpp.i
+.PHONY : util/MathUtil.cpp.i
+
+util/MathUtil.s: util/MathUtil.cpp.s
+.PHONY : util/MathUtil.s
+
+# target to generate assembly for a file
+util/MathUtil.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/MathUtil.cpp.s
+.PHONY : util/MathUtil.cpp.s
+
+util/Params.o: util/Params.cpp.o
+.PHONY : util/Params.o
+
+# target to build an object file
+util/Params.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/Params.cpp.o
+.PHONY : util/Params.cpp.o
+
+util/Params.i: util/Params.cpp.i
+.PHONY : util/Params.i
+
+# target to preprocess a source file
+util/Params.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/Params.cpp.i
+.PHONY : util/Params.cpp.i
+
+util/Params.s: util/Params.cpp.s
+.PHONY : util/Params.s
+
+# target to generate assembly for a file
+util/Params.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/Params.cpp.s
+.PHONY : util/Params.cpp.s
+
+util/StringUtils.o: util/StringUtils.cpp.o
+.PHONY : util/StringUtils.o
+
+# target to build an object file
+util/StringUtils.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/StringUtils.cpp.o
+.PHONY : util/StringUtils.cpp.o
+
+util/StringUtils.i: util/StringUtils.cpp.i
+.PHONY : util/StringUtils.i
+
+# target to preprocess a source file
+util/StringUtils.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/StringUtils.cpp.i
+.PHONY : util/StringUtils.cpp.i
+
+util/StringUtils.s: util/StringUtils.cpp.s
+.PHONY : util/StringUtils.s
+
+# target to generate assembly for a file
+util/StringUtils.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/StringUtils.cpp.s
+.PHONY : util/StringUtils.cpp.s
+
+util/crux-utils.o: util/crux-utils.cpp.o
+.PHONY : util/crux-utils.o
+
+# target to build an object file
+util/crux-utils.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/crux-utils.cpp.o
+.PHONY : util/crux-utils.cpp.o
+
+util/crux-utils.i: util/crux-utils.cpp.i
+.PHONY : util/crux-utils.i
+
+# target to preprocess a source file
+util/crux-utils.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/crux-utils.cpp.i
+.PHONY : util/crux-utils.cpp.i
+
+util/crux-utils.s: util/crux-utils.cpp.s
+.PHONY : util/crux-utils.s
+
+# target to generate assembly for a file
+util/crux-utils.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/crux-utils.cpp.s
+.PHONY : util/crux-utils.cpp.s
+
+util/linked_list.o: util/linked_list.cpp.o
+.PHONY : util/linked_list.o
+
+# target to build an object file
+util/linked_list.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/linked_list.cpp.o
+.PHONY : util/linked_list.cpp.o
+
+util/linked_list.i: util/linked_list.cpp.i
+.PHONY : util/linked_list.i
+
+# target to preprocess a source file
+util/linked_list.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/linked_list.cpp.i
+.PHONY : util/linked_list.cpp.i
+
+util/linked_list.s: util/linked_list.cpp.s
+.PHONY : util/linked_list.s
+
+# target to generate assembly for a file
+util/linked_list.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/linked_list.cpp.s
+.PHONY : util/linked_list.cpp.s
+
+util/mass.o: util/mass.cpp.o
+.PHONY : util/mass.o
+
+# target to build an object file
+util/mass.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/mass.cpp.o
+.PHONY : util/mass.cpp.o
+
+util/mass.i: util/mass.cpp.i
+.PHONY : util/mass.i
+
+# target to preprocess a source file
+util/mass.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/mass.cpp.i
+.PHONY : util/mass.cpp.i
+
+util/mass.s: util/mass.cpp.s
+.PHONY : util/mass.s
+
+# target to generate assembly for a file
+util/mass.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/mass.cpp.s
+.PHONY : util/mass.cpp.s
+
+util/modifications.o: util/modifications.cpp.o
+.PHONY : util/modifications.o
+
+# target to build an object file
+util/modifications.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/modifications.cpp.o
+.PHONY : util/modifications.cpp.o
+
+util/modifications.i: util/modifications.cpp.i
+.PHONY : util/modifications.i
+
+# target to preprocess a source file
+util/modifications.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/modifications.cpp.i
+.PHONY : util/modifications.cpp.i
+
+util/modifications.s: util/modifications.cpp.s
+.PHONY : util/modifications.s
+
+# target to generate assembly for a file
+util/modifications.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/modifications.cpp.s
+.PHONY : util/modifications.cpp.s
+
+util/peptide_modifications.o: util/peptide_modifications.cpp.o
+.PHONY : util/peptide_modifications.o
+
+# target to build an object file
+util/peptide_modifications.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/peptide_modifications.cpp.o
+.PHONY : util/peptide_modifications.cpp.o
+
+util/peptide_modifications.i: util/peptide_modifications.cpp.i
+.PHONY : util/peptide_modifications.i
+
+# target to preprocess a source file
+util/peptide_modifications.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/peptide_modifications.cpp.i
+.PHONY : util/peptide_modifications.cpp.i
+
+util/peptide_modifications.s: util/peptide_modifications.cpp.s
+.PHONY : util/peptide_modifications.s
+
+# target to generate assembly for a file
+util/peptide_modifications.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/peptide_modifications.cpp.s
+.PHONY : util/peptide_modifications.cpp.s
+
+util/utils.o: util/utils.cpp.o
+.PHONY : util/utils.o
+
+# target to build an object file
+util/utils.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/utils.cpp.o
+.PHONY : util/utils.cpp.o
+
+util/utils.i: util/utils.cpp.i
+.PHONY : util/utils.i
+
+# target to preprocess a source file
+util/utils.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/utils.cpp.i
+.PHONY : util/utils.cpp.i
+
+util/utils.s: util/utils.cpp.s
+.PHONY : util/utils.s
+
+# target to generate assembly for a file
+util/utils.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/CMakeFiles/crux-support.dir/build.make src/CMakeFiles/crux-support.dir/util/utils.cpp.s
+.PHONY : util/utils.cpp.s
+
+# Help Target
+help:
+	@echo "The following are some of the valid targets for this Makefile:"
+	@echo "... all (the default if no target is provided)"
+	@echo "... clean"
+	@echo "... depend"
+	@echo "... crux"
+	@echo "... crux-support"
+	@echo "... edit_cache"
+	@echo "... install"
+	@echo "... install/local"
+	@echo "... install/strip"
+	@echo "... list_install_components"
+	@echo "... package"
+	@echo "... package_source"
+	@echo "... rebuild_cache"
+	@echo "... app/AssignConfidenceApplication.o"
+	@echo "... app/AssignConfidenceApplication.i"
+	@echo "... app/AssignConfidenceApplication.s"
+	@echo "... app/CascadeSearchApplication.o"
+	@echo "... app/CascadeSearchApplication.i"
+	@echo "... app/CascadeSearchApplication.s"
+	@echo "... app/CometApplication.o"
+	@echo "... app/CometApplication.i"
+	@echo "... app/CometApplication.s"
+	@echo "... app/ComputeQValues.o"
+	@echo "... app/ComputeQValues.i"
+	@echo "... app/ComputeQValues.s"
+	@echo "... app/CreateDocs.o"
+	@echo "... app/CreateDocs.i"
+	@echo "... app/CreateDocs.s"
+	@echo "... app/CruxApplication.o"
+	@echo "... app/CruxApplication.i"
+	@echo "... app/CruxApplication.s"
+	@echo "... app/CruxApplicationList.o"
+	@echo "... app/CruxApplicationList.i"
+	@echo "... app/CruxApplicationList.s"
+	@echo "... app/ExtractColumns.o"
+	@echo "... app/ExtractColumns.i"
+	@echo "... app/ExtractColumns.s"
+	@echo "... app/ExtractRows.o"
+	@echo "... app/ExtractRows.i"
+	@echo "... app/ExtractRows.s"
+	@echo "... app/GeneratePeptides.o"
+	@echo "... app/GeneratePeptides.i"
+	@echo "... app/GeneratePeptides.s"
+	@echo "... app/GetMs2Spectrum.o"
+	@echo "... app/GetMs2Spectrum.i"
+	@echo "... app/GetMs2Spectrum.s"
+	@echo "... app/MakePinApplication.o"
+	@echo "... app/MakePinApplication.i"
+	@echo "... app/MakePinApplication.s"
+	@echo "... app/PSMConvertApplication.o"
+	@echo "... app/PSMConvertApplication.i"
+	@echo "... app/PSMConvertApplication.s"
+	@echo "... app/ParamMedicApplication.o"
+	@echo "... app/ParamMedicApplication.i"
+	@echo "... app/ParamMedicApplication.s"
+	@echo "... app/PercolatorAdapter.o"
+	@echo "... app/PercolatorAdapter.i"
+	@echo "... app/PercolatorAdapter.s"
+	@echo "... app/PercolatorApplication.o"
+	@echo "... app/PercolatorApplication.i"
+	@echo "... app/PercolatorApplication.s"
+	@echo "... app/Pipeline.o"
+	@echo "... app/Pipeline.i"
+	@echo "... app/Pipeline.s"
+	@echo "... app/PredictPeptideIons.o"
+	@echo "... app/PredictPeptideIons.i"
+	@echo "... app/PredictPeptideIons.s"
+	@echo "... app/PrintProcessedSpectra.o"
+	@echo "... app/PrintProcessedSpectra.i"
+	@echo "... app/PrintProcessedSpectra.s"
+	@echo "... app/PrintVersion.o"
+	@echo "... app/PrintVersion.i"
+	@echo "... app/PrintVersion.s"
+	@echo "... app/ReadSpectrumRecordsApplication.o"
+	@echo "... app/ReadSpectrumRecordsApplication.i"
+	@echo "... app/ReadSpectrumRecordsApplication.s"
+	@echo "... app/ReadTideIndex.o"
+	@echo "... app/ReadTideIndex.i"
+	@echo "... app/ReadTideIndex.s"
+	@echo "... app/SortColumn.o"
+	@echo "... app/SortColumn.i"
+	@echo "... app/SortColumn.s"
+	@echo "... app/SpectralCounts.o"
+	@echo "... app/SpectralCounts.i"
+	@echo "... app/SpectralCounts.s"
+	@echo "... app/StatColumn.o"
+	@echo "... app/StatColumn.i"
+	@echo "... app/StatColumn.s"
+	@echo "... app/SubtractIndexApplication.o"
+	@echo "... app/SubtractIndexApplication.i"
+	@echo "... app/SubtractIndexApplication.s"
+	@echo "... app/TideIndexApplication.o"
+	@echo "... app/TideIndexApplication.i"
+	@echo "... app/TideIndexApplication.s"
+	@echo "... app/TideMatchSet.o"
+	@echo "... app/TideMatchSet.i"
+	@echo "... app/TideMatchSet.s"
+	@echo "... app/TideSearchApplication.o"
+	@echo "... app/TideSearchApplication.i"
+	@echo "... app/TideSearchApplication.s"
+	@echo "... crux-main.o"
+	@echo "... crux-main.i"
+	@echo "... crux-main.s"
+	@echo "... io/DelimitedFile.o"
+	@echo "... io/DelimitedFile.i"
+	@echo "... io/DelimitedFile.s"
+	@echo "... io/DelimitedFileReader.o"
+	@echo "... io/DelimitedFileReader.i"
+	@echo "... io/DelimitedFileReader.s"
+	@echo "... io/DelimitedFileWriter.o"
+	@echo "... io/DelimitedFileWriter.i"
+	@echo "... io/DelimitedFileWriter.s"
+	@echo "... io/HTMLWriter.o"
+	@echo "... io/HTMLWriter.i"
+	@echo "... io/HTMLWriter.s"
+	@echo "... io/LineFileReader.o"
+	@echo "... io/LineFileReader.i"
+	@echo "... io/LineFileReader.s"
+	@echo "... io/MSToolkitSpectrumCollection.o"
+	@echo "... io/MSToolkitSpectrumCollection.i"
+	@echo "... io/MSToolkitSpectrumCollection.s"
+	@echo "... io/MatchCollectionParser.o"
+	@echo "... io/MatchCollectionParser.i"
+	@echo "... io/MatchCollectionParser.s"
+	@echo "... io/MatchColumns.o"
+	@echo "... io/MatchColumns.i"
+	@echo "... io/MatchColumns.s"
+	@echo "... io/MatchFileReader.o"
+	@echo "... io/MatchFileReader.i"
+	@echo "... io/MatchFileReader.s"
+	@echo "... io/MatchFileWriter.o"
+	@echo "... io/MatchFileWriter.i"
+	@echo "... io/MatchFileWriter.s"
+	@echo "... io/MzIdentMLReader.o"
+	@echo "... io/MzIdentMLReader.i"
+	@echo "... io/MzIdentMLReader.s"
+	@echo "... io/MzIdentMLWriter.o"
+	@echo "... io/MzIdentMLWriter.i"
+	@echo "... io/MzIdentMLWriter.s"
+	@echo "... io/OutputFiles.o"
+	@echo "... io/OutputFiles.i"
+	@echo "... io/OutputFiles.s"
+	@echo "... io/PMCDelimitedFileWriter.o"
+	@echo "... io/PMCDelimitedFileWriter.i"
+	@echo "... io/PMCDelimitedFileWriter.s"
+	@echo "... io/PMCPepXMLWriter.o"
+	@echo "... io/PMCPepXMLWriter.i"
+	@echo "... io/PMCPepXMLWriter.s"
+	@echo "... io/PMCSQTWriter.o"
+	@echo "... io/PMCSQTWriter.i"
+	@echo "... io/PMCSQTWriter.s"
+	@echo "... io/PSMReader.o"
+	@echo "... io/PSMReader.i"
+	@echo "... io/PSMReader.s"
+	@echo "... io/PSMWriter.o"
+	@echo "... io/PSMWriter.i"
+	@echo "... io/PSMWriter.s"
+	@echo "... io/PWIZSpectrumCollection.o"
+	@echo "... io/PWIZSpectrumCollection.i"
+	@echo "... io/PWIZSpectrumCollection.s"
+	@echo "... io/PepXMLReader.o"
+	@echo "... io/PepXMLReader.i"
+	@echo "... io/PepXMLReader.s"
+	@echo "... io/PepXMLWriter.o"
+	@echo "... io/PepXMLWriter.i"
+	@echo "... io/PepXMLWriter.s"
+	@echo "... io/PinWriter.o"
+	@echo "... io/PinWriter.i"
+	@echo "... io/PinWriter.s"
+	@echo "... io/SQTReader.o"
+	@echo "... io/SQTReader.i"
+	@echo "... io/SQTReader.s"
+	@echo "... io/SQTWriter.o"
+	@echo "... io/SQTWriter.i"
+	@echo "... io/SQTWriter.s"
+	@echo "... io/SpectrumCollection.o"
+	@echo "... io/SpectrumCollection.i"
+	@echo "... io/SpectrumCollection.s"
+	@echo "... io/SpectrumCollectionFactory.o"
+	@echo "... io/SpectrumCollectionFactory.i"
+	@echo "... io/SpectrumCollectionFactory.s"
+	@echo "... io/SpectrumRecordWriter.o"
+	@echo "... io/SpectrumRecordWriter.i"
+	@echo "... io/SpectrumRecordWriter.s"
+	@echo "... io/carp.o"
+	@echo "... io/carp.i"
+	@echo "... io/carp.s"
+	@echo "... model/AbstractMatch.o"
+	@echo "... model/AbstractMatch.i"
+	@echo "... model/AbstractMatch.s"
+	@echo "... model/Database.o"
+	@echo "... model/Database.i"
+	@echo "... model/Database.s"
+	@echo "... model/DatabasePeptideIterator.o"
+	@echo "... model/DatabasePeptideIterator.i"
+	@echo "... model/DatabasePeptideIterator.s"
+	@echo "... model/DatabaseProteinIterator.o"
+	@echo "... model/DatabaseProteinIterator.i"
+	@echo "... model/DatabaseProteinIterator.s"
+	@echo "... model/FilteredSpectrumChargeIterator.o"
+	@echo "... model/FilteredSpectrumChargeIterator.i"
+	@echo "... model/FilteredSpectrumChargeIterator.s"
+	@echo "... model/GeneratePeptidesIterator.o"
+	@echo "... model/GeneratePeptidesIterator.i"
+	@echo "... model/GeneratePeptidesIterator.s"
+	@echo "... model/Ion.o"
+	@echo "... model/Ion.i"
+	@echo "... model/Ion.s"
+	@echo "... model/IonConstraint.o"
+	@echo "... model/IonConstraint.i"
+	@echo "... model/IonConstraint.s"
+	@echo "... model/IonFilteredIterator.o"
+	@echo "... model/IonFilteredIterator.i"
+	@echo "... model/IonFilteredIterator.s"
+	@echo "... model/IonSeries.o"
+	@echo "... model/IonSeries.i"
+	@echo "... model/IonSeries.s"
+	@echo "... model/Match.o"
+	@echo "... model/Match.i"
+	@echo "... model/Match.s"
+	@echo "... model/MatchCollection.o"
+	@echo "... model/MatchCollection.i"
+	@echo "... model/MatchCollection.s"
+	@echo "... model/MatchCollectionIterator.o"
+	@echo "... model/MatchCollectionIterator.i"
+	@echo "... model/MatchCollectionIterator.s"
+	@echo "... model/MatchIterator.o"
+	@echo "... model/MatchIterator.i"
+	@echo "... model/MatchIterator.s"
+	@echo "... model/Modification.o"
+	@echo "... model/Modification.i"
+	@echo "... model/Modification.s"
+	@echo "... model/ModifiedPeptidesIterator.o"
+	@echo "... model/ModifiedPeptidesIterator.i"
+	@echo "... model/ModifiedPeptidesIterator.s"
+	@echo "... model/Peak.o"
+	@echo "... model/Peak.i"
+	@echo "... model/Peak.s"
+	@echo "... model/Peptide.o"
+	@echo "... model/Peptide.i"
+	@echo "... model/Peptide.s"
+	@echo "... model/PeptideConstraint.o"
+	@echo "... model/PeptideConstraint.i"
+	@echo "... model/PeptideConstraint.s"
+	@echo "... model/PeptideMatch.o"
+	@echo "... model/PeptideMatch.i"
+	@echo "... model/PeptideMatch.s"
+	@echo "... model/PeptideSrc.o"
+	@echo "... model/PeptideSrc.i"
+	@echo "... model/PeptideSrc.s"
+	@echo "... model/PostProcessProtein.o"
+	@echo "... model/PostProcessProtein.i"
+	@echo "... model/PostProcessProtein.s"
+	@echo "... model/Protein.o"
+	@echo "... model/Protein.i"
+	@echo "... model/Protein.s"
+	@echo "... model/ProteinIndex.o"
+	@echo "... model/ProteinIndex.i"
+	@echo "... model/ProteinIndex.s"
+	@echo "... model/ProteinIndexIterator.o"
+	@echo "... model/ProteinIndexIterator.i"
+	@echo "... model/ProteinIndexIterator.s"
+	@echo "... model/ProteinMatch.o"
+	@echo "... model/ProteinMatch.i"
+	@echo "... model/ProteinMatch.s"
+	@echo "... model/ProteinMatchCollection.o"
+	@echo "... model/ProteinMatchCollection.i"
+	@echo "... model/ProteinMatchCollection.s"
+	@echo "... model/ProteinPeptideIterator.o"
+	@echo "... model/ProteinPeptideIterator.i"
+	@echo "... model/ProteinPeptideIterator.s"
+	@echo "... model/Scorer.o"
+	@echo "... model/Scorer.i"
+	@echo "... model/Scorer.s"
+	@echo "... model/Spectrum.o"
+	@echo "... model/Spectrum.i"
+	@echo "... model/Spectrum.s"
+	@echo "... model/SpectrumMatch.o"
+	@echo "... model/SpectrumMatch.i"
+	@echo "... model/SpectrumMatch.s"
+	@echo "... model/SpectrumZState.o"
+	@echo "... model/SpectrumZState.i"
+	@echo "... model/SpectrumZState.s"
+	@echo "... parameter.o"
+	@echo "... parameter.i"
+	@echo "... parameter.s"
+	@echo "... util/Alphabet.o"
+	@echo "... util/Alphabet.i"
+	@echo "... util/Alphabet.s"
+	@echo "... util/AminoAcidUtil.o"
+	@echo "... util/AminoAcidUtil.i"
+	@echo "... util/AminoAcidUtil.s"
+	@echo "... util/ArgParser.o"
+	@echo "... util/ArgParser.i"
+	@echo "... util/ArgParser.s"
+	@echo "... util/CacheableMass.o"
+	@echo "... util/CacheableMass.i"
+	@echo "... util/CacheableMass.s"
+	@echo "... util/CarpStreamBuf.o"
+	@echo "... util/CarpStreamBuf.i"
+	@echo "... util/CarpStreamBuf.s"
+	@echo "... util/FileUtils.o"
+	@echo "... util/FileUtils.i"
+	@echo "... util/FileUtils.s"
+	@echo "... util/GlobalParams.o"
+	@echo "... util/GlobalParams.i"
+	@echo "... util/GlobalParams.s"
+	@echo "... util/MathUtil.o"
+	@echo "... util/MathUtil.i"
+	@echo "... util/MathUtil.s"
+	@echo "... util/Params.o"
+	@echo "... util/Params.i"
+	@echo "... util/Params.s"
+	@echo "... util/StringUtils.o"
+	@echo "... util/StringUtils.i"
+	@echo "... util/StringUtils.s"
+	@echo "... util/crux-utils.o"
+	@echo "... util/crux-utils.i"
+	@echo "... util/crux-utils.s"
+	@echo "... util/linked_list.o"
+	@echo "... util/linked_list.i"
+	@echo "... util/linked_list.s"
+	@echo "... util/mass.o"
+	@echo "... util/mass.i"
+	@echo "... util/mass.s"
+	@echo "... util/modifications.o"
+	@echo "... util/modifications.i"
+	@echo "... util/modifications.s"
+	@echo "... util/peptide_modifications.o"
+	@echo "... util/peptide_modifications.i"
+	@echo "... util/peptide_modifications.s"
+	@echo "... util/utils.o"
+	@echo "... util/utils.i"
+	@echo "... util/utils.s"
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/src/Makefile.mzidentml b/src/Makefile.mzidentml
new file mode 100644
index 0000000..b3d6a76
--- /dev/null
+++ b/src/Makefile.mzidentml
@@ -0,0 +1,44 @@
+
+PWIZ_DIR=../external/include
+
+CC=g++
+COPTS=-I../external/include 
+
+MST_LIB=-L../external/MSToolkit/ -lMSToolkit
+CRUX_LIB=-L. -lcrux-support
+
+PWIZ_LIB_FILES = \
+  -lpwiz_data_msdata \
+  -lpwiz_data_common \
+  -lpwiz_data_identdata \
+  -lpwiz_data_msdata_version \
+  -lpwiz_data_misc \
+  -lpwiz_utility_chemistry \
+  -lpwiz_utility_misc \
+  -lpwiz_utility_minimxml \
+  -lpwiz_data_common \
+  -lpwiz_data_identdata \
+  -lpwiz_data_identdata_version \
+  -lpwiz_data_proteome \
+  -lboost_system-mt-s \
+  -lboost_iostreams-mt-s \
+  -lz-mt-s-1_2 \
+  -lboost_filesystem-mt-s \
+  -lboost_regex-mt-s \
+  -lboost_thread-mt-s \
+  -lpthread
+
+PWIZ_LIB=-L../external/lib ${PWIZ_LIB_FILES}
+
+
+all:mzid
+
+
+mzid.o:mzid.cpp 
+	g++ ${COPTS} -c mzid.cpp -o mzid.o
+
+mzid:mzid.o
+	g++ mzid.o ${CRUX_LIB} ${MST_LIB} ${PWIZ_LIB} -o mzid
+
+clean:
+	rm -f mzid MzIdentMLReader.o
diff --git a/src/app/AssignConfidenceApplication.cpp b/src/app/AssignConfidenceApplication.cpp
new file mode 100644
index 0000000..8f31fc3
--- /dev/null
+++ b/src/app/AssignConfidenceApplication.cpp
@@ -0,0 +1,1247 @@
+/**
+* \file AssignConfidenceApplication.h
+* AUTHOR: Attila Kertesz-Farkas
+* CREATE DATE: May 01, 2015
+****************************************************************************/
+
+#include "AssignConfidenceApplication.h"
+#include "io/MatchCollectionParser.h"
+#include "PosteriorEstimator.h"
+#include "util/FileUtils.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+
+#include "boost/tuple/tuple.hpp" // This will be <tuple> once we move to C++11.
+#include "boost/tuple/tuple_comparison.hpp"
+
+#include <map>
+#include <utility>
+
+using namespace std;
+using namespace Crux;
+
+static const int MAX_PSMS = 10000000;
+// 14th decimal place
+static const double EPSILON = 0.00000000000001;
+
+#ifdef _MSC_VER
+// The Microsoft 10.0 C++ compiler has trouble resolving the proper virtual
+// function call when the STL make_pair is combined with the STL ptr_fun.
+// They promise to fix this in v11, but until then we create our own wrapper
+// for this use of make_pair. (See corresponding ifdef block in compute_PEP)
+pair<double, bool> make_pair(double db, bool b);
+// pair<double,bool> make_pair(double db, bool b) {
+//     return std::pair<double,bool>(db, b);
+// }
+#endif
+
+
+/**
+* \returns a blank ComputeQValues object
+*/
+AssignConfidenceApplication::AssignConfidenceApplication():
+  spectrum_flag_(NULL), iteration_cnt_(0) {
+}
+
+/**
+* Destructor
+*/
+AssignConfidenceApplication::~AssignConfidenceApplication() {
+}
+
+/**
+ * Generate keys when building a hash on PSMs.
+ * http://stackoverflow.com/questions/98153/whats-the-best-hashing-algorithm-to-use-on-a-stl-string-when-using-hash-map/
+ */
+int stringToIndex(string myString) {
+  int returnValue = 0;
+  for(std::string::iterator it = myString.begin(); it != myString.end(); ++it) {
+    returnValue = (returnValue * 101) + (int)*it;
+  }
+  return(returnValue);
+}
+
+/**
+* main method for ComputeQValues
+*/
+
+int AssignConfidenceApplication::main(int argc, char** argv) {
+  return main(Params::GetStrings("target input"));
+}
+
+int AssignConfidenceApplication::main(const vector<string> input_files) {
+  // Prepare the output files if not in Cascade Search
+  if (spectrum_flag_ == NULL) {
+    output_ = new OutputFiles(this);
+  }
+  
+  ESTIMATION_METHOD_T estimation_method;
+  string method_param = Params::GetString("estimation-method");
+  carp(CARP_INFO, "Estimation method = %s.", method_param.c_str());
+  if (method_param == "tdc") {
+    estimation_method = TDC_METHOD;
+  } else if (method_param == "mix-max") {
+    estimation_method = MIXMAX_METHOD;
+  } else if (method_param == "peptide-level") {
+    estimation_method = PEPTIDE_LEVEL_METHOD;
+  } else {
+    carp(CARP_FATAL, "The estimation method \"%s\" is not supported.", method_param.c_str());
+  }
+    
+  // Perform the analysis.
+  if (input_files.size() == 0) {
+    carp(CARP_FATAL, "No input files found.");
+  }
+  if (estimation_method != PEPTIDE_LEVEL_METHOD &&
+      Params::GetBool("combine-modified-peptides")) {
+    carp(CARP_WARNING, "The \"combine-modified-peptides\" option is ignored when estimation-method is not peptide-level.");
+  }
+  bool sidak = Params::GetBool("sidak");
+
+  int top_match = 1;
+  if (estimation_method == PEPTIDE_LEVEL_METHOD) {
+    top_match = MAX_PSMS+1;
+  }
+
+  SCORER_TYPE_T score_type = INVALID_SCORER_TYPE;
+  SCORER_TYPE_T derived_score_type = INVALID_SCORER_TYPE;
+  bool ascending;
+
+  string score_param = Params::GetString("score");
+  if (!score_param.empty()) {
+    switch (get_column_idx(score_param.c_str())) {
+    case SP_SCORE_COL:
+      score_type = SP;    ///< SEQUEST preliminary score
+      break;
+    case XCORR_SCORE_COL:
+      score_type = XCORR;   ///< SEQUEST primary score
+      break;
+    case EVALUE_COL:
+      score_type = EVALUE;  ///< Comet e-value
+      break;
+    case PVALUE_COL:        ///< Search-for-xlinks p-value
+      score_type = LOGP_BONF_WEIBULL_XCORR;
+      break;
+    case PERCOLATOR_SCORE_COL:
+      score_type = PERCOLATOR_SCORE;
+      break;
+    case PERCOLATOR_QVALUE_COL:
+      score_type = PERCOLATOR_QVALUE;
+      break;
+    case PERCOLATOR_PEP_COL:
+      score_type = PERCOLATOR_PEP;
+      break;
+    case QRANKER_SCORE_COL:
+      score_type = QRANKER_SCORE;
+      break;
+    case QRANKER_QVALUE_COL:
+      score_type = QRANKER_QVALUE;
+      break;
+    case QRANKER_PEP_COL:
+      score_type = QRANKER_PEP;
+      break;
+    case BARISTA_SCORE_COL:
+      score_type = BARISTA_SCORE;
+      break;
+    case BARISTA_QVALUE_COL:
+      score_type = BARISTA_QVALUE;
+      break;
+    case EXACT_PVALUE_COL:
+      score_type = TIDE_SEARCH_EXACT_PVAL;
+      break;
+    case REFACTORED_SCORE_COL:
+      score_type = TIDE_SEARCH_REFACTORED_XCORR;
+      break;
+    case ELUTION_WINDOW_COL:
+      score_type = TIDE_SEARCH_EXACT_SMOOTHED;
+      break;      
+    default:
+      carp(CARP_FATAL, "The PSM feature \"%s\" is not supported.", score_param.c_str());
+    }
+  }
+
+  if (sidak && score_type != TIDE_SEARCH_EXACT_PVAL) {
+    carp(CARP_WARNING, "Sidak adjustment may not be compatible"
+      "with score: %s", score_param.c_str());
+  }
+
+  // Create two match collections, for targets and decoys.
+  MatchCollection* decoy_matches = new MatchCollection();
+  MatchCollection* target_matches = new MatchCollection();
+
+  bool distinct_matches = false;
+  MatchCollectionParser parser;
+  std::map<string, FLOAT_T> BestPeptideScore;
+  
+  for (vector<string>::const_iterator iter = input_files.begin(); iter != input_files.end(); ++iter) {
+    string target_path = *iter;
+    string decoy_path = *iter;
+
+    if (target_path.find("decoy") != string::npos) {
+      carp(CARP_FATAL, "%s appears to be a decoy file. Only target or concatenated files "
+        "should be given to assign-confidence because it automatically searches for "
+        "corresponding decoy files.", target_path.c_str());
+    }
+
+    check_target_decoy_files(target_path, decoy_path);
+
+    if (!FileUtils::Exists(target_path)) {
+      carp(CARP_FATAL, "Target file %s not found", target_path.c_str());
+    }
+
+    if (!FileUtils::Exists(decoy_path)) {
+      if (estimation_method == MIXMAX_METHOD) {
+        carp(CARP_FATAL, "Cannot find file %s.", decoy_path.c_str());
+        carp(CARP_FATAL, "Decoy file from separate target-decoy search is required "
+          "for mix-max q-value calculation");
+      }
+      carp(CARP_DEBUG, "Decoy file %s not found", decoy_path.c_str());
+      decoy_path = "";
+    }
+
+    MatchCollection* match_collection =
+      parser.create(target_path, Params::GetString("protein-database"));
+    distinct_matches = match_collection->getHasDistinctMatches();
+
+    carp(CARP_INFO, "Found %d PSMs in %s.", match_collection->getMatchTotal(),
+         target_path.c_str());
+    
+    // If necessary, automatically identify the score type.
+    if (score_type == INVALID_SCORER_TYPE) {
+      vector<SCORER_TYPE_T> scoreTypes;
+      scoreTypes.push_back(XCORR);
+      scoreTypes.push_back(EVALUE);
+      scoreTypes.push_back(TIDE_SEARCH_EXACT_PVAL);
+      scoreTypes.push_back(TIDE_SEARCH_EXACT_SMOOTHED);
+      scoreTypes.push_back(LOGP_BONF_WEIBULL_XCORR);
+      scoreTypes.push_back(PERCOLATOR_SCORE);
+      for (vector<SCORER_TYPE_T>::const_iterator i = scoreTypes.begin();
+           i != scoreTypes.end();
+           i++) {
+        if (match_collection->getScoredType(*i)) {
+          score_type = *i;
+          carp(CARP_INFO, "Automatically detected score type: %s",
+               scorer_type_to_string(score_type));
+          break;
+        }
+      }
+      if (score_type == INVALID_SCORER_TYPE) {
+        carp(CARP_FATAL, "Could not detect score type. Specify the score type using the "
+                         "\"score\" parameter.");
+      }
+    }
+    int direction = getDirection(score_type);
+    if (direction == -1) {
+      ascending = false;
+    } else if (direction == 1) {
+      ascending = true;
+    } else {
+      carp(CARP_FATAL, "Cannot infer sort order for score %s.",
+           scorer_type_to_string(score_type));
+    }
+    carp(CARP_INFO, "Score type=%s, sorting in %s order",
+         scorer_type_to_string(score_type),
+         ascending ? "ascending" : "descending");
+
+    if (!match_collection->getScoredType(score_type)) {
+      const char* score_str = scorer_type_to_string(score_type);
+      carp(CARP_FATAL, "The PSM feature \"%s\" was not found in file \"%s\".",
+           score_str, target_path.c_str());
+    }
+
+    // Find and keep the best score for each peptide.
+    if (estimation_method == PEPTIDE_LEVEL_METHOD) { 
+      peptide_level_filtering(match_collection, &BestPeptideScore, score_type, ascending);
+      carp(CARP_INFO, "%d distinct target peptides.", BestPeptideScore.size());
+    }
+
+    target_matches->setScoredType(score_type, match_collection->getScoredType(score_type));
+    target_matches->setScoredType(EVALUE, match_collection->getScoredType(EVALUE));
+    target_matches->setScoredType(DELTA_CN, match_collection->getScoredType(DELTA_CN));
+    target_matches->setScoredType(SP, match_collection->getScoredType(SP));
+    target_matches->setScoredType(BY_IONS_MATCHED, match_collection->getScoredType(BY_IONS_MATCHED));
+    target_matches->setScoredType(BY_IONS_TOTAL, match_collection->getScoredType(BY_IONS_TOTAL));
+    target_matches->setScoredType(SIDAK_ADJUSTED, sidak);
+    decoy_matches->setScoredType(SIDAK_ADJUSTED, sidak);
+
+    // Counters just to let the user know what's up.
+    int num_target_rank_skipped = 0;
+    int num_decoy_rank_skipped = 0;
+    int num_target_peptide_skipped = 0;
+    int num_decoy_peptide_skipped = 0;
+    
+    if (decoy_path != "") {
+      MatchCollection* temp_collection = parser.create(decoy_path, Params::GetString("protein-database"));
+      carp(CARP_INFO, "Found %d PSMs in %s.", temp_collection->getMatchTotal(),
+           decoy_path.c_str());
+
+      // Mark decoy matches
+      // key = (filename, scan number, charge, rank); value = index
+      std::map<boost::tuple <int, int, int, int>, int> pairidx;
+      int fileIndex;
+      int scanid;
+      int charge;
+      int rank;
+      int cnt = 0;
+      MatchIterator* temp_iter = new MatchIterator(temp_collection);
+      while (temp_iter->hasNext()) {
+        Crux::Match* decoy_match = temp_iter->next();
+        cnt++;
+
+        // Only use top-ranked matches.
+        if (decoy_match->getRank(XCORR) > top_match) {
+          num_decoy_rank_skipped++;
+          continue;
+        }
+
+        fileIndex = stringToIndex(decoy_match->getSpectrum()->getFullFilename());
+        scanid = decoy_match->getSpectrum()->getFirstScan();
+        charge = decoy_match->getCharge();
+        rank   = decoy_match->getRank(XCORR);
+        boost::tuple<int, int, int, int> myTuple (fileIndex, scanid, charge, rank);
+
+        decoy_match->setNullPeptide(true);
+        switch (estimation_method) {
+        case MIXMAX_METHOD:
+          // Put match directly in the final set of decoys, because no TDC.
+          decoy_matches->addMatch(decoy_match);
+          break;
+        case TDC_METHOD:
+        case PEPTIDE_LEVEL_METHOD:
+          // If the PSM is already there, that means there was a tie
+          // for top-ranked decoys.  In that case, there is no need to
+          // store a pointer to the second one.
+          if (pairidx[myTuple] == 0) {
+            pairidx[myTuple] = cnt;
+          }
+          break;
+        case NUMBER_METHOD_TYPES:
+        case INVALID_METHOD:
+          carp(CARP_FATAL, "No estimation method specified.");
+        }
+      }
+      delete temp_iter;
+
+      // Find and keep the best score for each decoy peptide.
+      if (estimation_method == PEPTIDE_LEVEL_METHOD) {
+        peptide_level_filtering(temp_collection, &BestPeptideScore, score_type, ascending);
+        carp(CARP_INFO, "%d distinct target+decoy peptides.", BestPeptideScore.size());
+      }
+
+      if (estimation_method != MIXMAX_METHOD) {
+        int decoy_idx;
+        int numCandidates;
+        int numCompetitions = 0;
+        int numLostDecoys = 0;
+        int numTies = 0;
+        MatchCollection* tdc_collection = new MatchCollection();
+        tdc_collection->setScoredType(score_type, true);
+        MatchIterator* target_iter = new MatchIterator(match_collection);
+        MatchIterator* decoy_iter = new MatchIterator(temp_collection);
+        while (target_iter->hasNext()) {
+          Crux::Match* target_match = target_iter->next();
+
+          // Only use top-ranked matches.
+          if (target_match->getRank(XCORR) > top_match) {
+            num_target_rank_skipped++;
+            continue;
+          }
+
+          // Retrieve the index of the corresponding decoy PSM.
+          Crux::Match* decoy_match;
+          fileIndex = stringToIndex(target_match->getSpectrum()->getFullFilename());
+          scanid = target_match->getSpectrum()->getFirstScan();
+          charge = target_match->getCharge();
+          rank   = target_match->getRank(XCORR);
+          decoy_idx = pairidx[boost::tuple <int, int, int, int>
+                              (fileIndex, scanid, charge, rank)];
+          if (decoy_idx == 0) {
+            carp(CARP_DEBUG,
+                 "Failed to find decoy for file=%s scan=%d charge=%d rank=%d.",
+                 target_match->getSpectrum()->getFullFilename(),
+                 scanid, charge, rank);
+            numLostDecoys++;
+          }
+
+    if (estimation_method == PEPTIDE_LEVEL_METHOD) {
+      if (decoy_idx > 0) {
+        decoy_match = decoy_iter->getMatch(decoy_idx - 1);
+        numCandidates = target_match->getTargetExperimentSize() + decoy_match->getTargetExperimentSize();
+        target_match->setTargetExperimentSize(numCandidates);
+        decoy_match->setTargetExperimentSize(numCandidates);
+        tdc_collection->addMatch(target_match);
+        tdc_collection->addMatch(decoy_match);
+      } else {
+        numCandidates = target_match->getTargetExperimentSize();
+        target_match->setTargetExperimentSize(numCandidates);
+        tdc_collection->addMatch(target_match);
+      }
+    } else {
+      if (decoy_idx > 0) {
+        decoy_match = decoy_iter->getMatch(decoy_idx - 1);
+      } else {
+        tdc_collection->addMatch(target_match);
+        continue;
+      }
+      numCandidates = target_match->getTargetExperimentSize() + decoy_match->getTargetExperimentSize();
+      target_match->setTargetExperimentSize(numCandidates);
+      decoy_match->setTargetExperimentSize(numCandidates);
+
+      // This is where the target-decoy competition happens.
+      carp(CARP_DEBUG, "TDC: Comparing target (%d, +%d) with score %g to decoy (%d, +%d) with score %g.",
+           target_match->getSpectrum()->getFirstScan(),
+           target_match->getCharge(),
+           target_match->getScore(score_type),
+           decoy_match->getSpectrum()->getFirstScan(),
+           decoy_match->getCharge(),
+           decoy_match->getScore(score_type));
+
+      float score_difference = target_match->getScore(score_type) - decoy_match->getScore(score_type);
+      numCompetitions++;
+      // Randomly break ties.
+      if (fabs(score_difference) < 1e-10) {
+        numTies++;
+        score_difference += 0.5 - ((double)myrandom() / UNIFORM_INT_DISTRIBUTION_MAX);
+      }
+      if (ascending) { // smaller scores are better
+        score_difference *= -1.0;
+      }
+      if (score_difference >= 0.0) {
+        tdc_collection->addMatch(target_match);
+      } else {
+        tdc_collection->addMatch(decoy_match);
+      }
+    }
+  }
+  delete target_iter;
+  delete decoy_iter;
+  delete match_collection;
+  match_collection = tdc_collection;
+  if (numCompetitions > 0) {
+    carp(CARP_INFO, "Randomly broke %d ties in %d target-decoy competitions.",
+         numTies, numCompetitions);
+  }
+  if (numLostDecoys > 0) {
+    carp(CARP_INFO, "Failed to find %d decoys.", numLostDecoys);
+  }
+      }
+      delete temp_collection;
+    }
+
+    // Iterate, gathering matches into one or two collections.
+    MatchIterator* match_iterator =
+      new MatchIterator(match_collection, score_type, false);
+    double sidak_adjustment;
+    while (match_iterator->hasNext()) {
+      Match* match = match_iterator->next();
+      bool is_decoy = match->getNullPeptide();
+
+      // Only use top-ranked matches.
+      if (match->getRank(XCORR) > top_match) {
+        if (is_decoy) {
+          num_decoy_rank_skipped++;
+        } else {
+          num_target_rank_skipped++;
+        }
+        continue;
+      }
+
+      // Find and keep the best score for each decoy peptide.
+      if (estimation_method == PEPTIDE_LEVEL_METHOD) {
+        FLOAT_T score = match->getScore(score_type);
+        string peptideStr = getPeptideSeq(match);
+
+        FLOAT_T bestScore;
+        try {
+          bestScore = BestPeptideScore.at(peptideStr);
+          if (bestScore != score) {  //not the best scoring peptide
+            if (is_decoy) {
+              num_decoy_peptide_skipped++;
+            } else {
+              num_target_peptide_skipped++;              
+            }
+            continue;
+          } else {
+            BestPeptideScore.at(peptideStr) += ascending ? -1.0 : 1.0;  //make sure only one best scoring peptide reported.
+          }
+        } catch (const std::out_of_range& oor) {
+          carp(CARP_DEBUG, "Error in peptide-level filtering");
+        }
+      }
+
+      // Do the Sidak correction.
+      if (sidak) {
+        if (match->getRank(XCORR) > 1) {
+          carp_once(CARP_WARNING, "Sidak correction is not defined for non-top-matches. Further warnings are not shown.");
+        }
+        sidak_adjustment = 1.0 - pow(1.0 - match->getScore(score_type), match->getTargetExperimentSize());
+        match->setScore(SIDAK_ADJUSTED, sidak_adjustment);
+      }
+
+      // Add this match to one of the collections.
+      if (is_decoy) {
+        decoy_matches->addMatch(match);
+      } else {
+        target_matches->addMatch(match);
+      }
+      Match::freeMatch(match);
+    }
+    delete match_iterator;
+    delete match_collection;
+    if (num_decoy_rank_skipped + num_target_rank_skipped > 0) {
+      carp(CARP_INFO, "Skipped %d target and %d decoy PSMs with rank > %d.",
+           num_target_rank_skipped, num_decoy_rank_skipped, top_match);
+    }
+    if (num_target_peptide_skipped + num_decoy_peptide_skipped > 0) {
+      carp(CARP_INFO, "Skipped %d target and %d decoy PSMs due to peptide-level filtering.",
+           num_target_peptide_skipped, num_decoy_peptide_skipped);
+    }
+  }
+
+  if (sidak) {
+    score_type = SIDAK_ADJUSTED;
+  }
+
+  target_matches->setScoredType(score_type, true);
+  decoy_matches->setScoredType(score_type, true);
+
+
+  // get from the input files which columns to print in the output files
+  if (iteration_cnt_ == 0) {
+    vector<bool> cols_to_print(NUMBER_MATCH_COLUMNS);
+    cols_to_print[FILE_COL] = Params::GetBool("file-column");
+    cols_to_print[SCAN_COL] = true;
+    cols_to_print[CHARGE_COL] = true;
+    cols_to_print[SPECTRUM_PRECURSOR_MZ_COL] = true;
+    cols_to_print[SPECTRUM_NEUTRAL_MASS_COL] = true;
+    cols_to_print[PEPTIDE_MASS_COL] = true;
+    cols_to_print[DELTA_CN_COL] = target_matches->getScoredType(DELTA_CN);
+    cols_to_print[SP_SCORE_COL] = target_matches->getScoredType(SP);
+    cols_to_print[SP_RANK_COL] = target_matches->getScoredType(SP);
+    cols_to_print[XCORR_SCORE_COL] = !target_matches->getScoredType(TIDE_SEARCH_EXACT_PVAL);
+    cols_to_print[XCORR_RANK_COL] = true;
+    cols_to_print[EVALUE_COL] = target_matches->getScoredType(EVALUE);
+    cols_to_print[EXACT_PVALUE_COL] = target_matches->getScoredType(TIDE_SEARCH_EXACT_PVAL);
+    cols_to_print[PVALUE_COL] = target_matches->getScoredType(LOGP_BONF_WEIBULL_XCORR);
+    cols_to_print[SIDAK_ADJUSTED_COL] = sidak;
+    if (target_matches->getScoredType(TIDE_SEARCH_EXACT_PVAL)) {
+      cols_to_print[REFACTORED_SCORE_COL] = true;
+    }
+    cols_to_print[BY_IONS_MATCHED_COL] = target_matches->getScoredType(BY_IONS_MATCHED);
+    cols_to_print[BY_IONS_TOTAL_COL] = target_matches->getScoredType(BY_IONS_TOTAL);
+
+    if (distinct_matches) {
+      cols_to_print[DISTINCT_MATCHES_SPECTRUM_COL] = true;
+    } else {
+      cols_to_print[MATCHES_SPECTRUM_COL] = true;
+    }
+    switch (estimation_method) {
+    case TDC_METHOD:
+    case PEPTIDE_LEVEL_METHOD: // FIXME: Make a peptide-level q-value column. --WSN 4 Feb 2016
+      cols_to_print[QVALUE_TDC_COL] = true;
+      break;
+    case MIXMAX_METHOD:
+      cols_to_print[QVALUE_MIXMAX_COL] = true;
+      break;
+    case NUMBER_METHOD_TYPES:
+    case INVALID_METHOD:
+      carp(CARP_FATAL, "No estimation method specified.");
+    }
+    cols_to_print[SEQUENCE_COL] = true;
+    cols_to_print[CLEAVAGE_TYPE_COL] = true;
+    cols_to_print[PROTEIN_ID_COL] = true;
+    cols_to_print[FLANKING_AA_COL] = true;
+    if (spectrum_flag_ != NULL) {
+      cols_to_print[INDEX_NAME_COL] = true;
+    }
+
+    output_->writeHeaders(cols_to_print);
+  }
+  switch (estimation_method) {
+  case TDC_METHOD:
+  case PEPTIDE_LEVEL_METHOD:
+    derived_score_type = QVALUE_TDC;
+    break;
+  case MIXMAX_METHOD:
+    derived_score_type = QVALUE_MIXMAX;
+    break;
+  case NUMBER_METHOD_TYPES:
+  case INVALID_METHOD:
+    carp(CARP_FATAL, "No estimation method specified.");
+  }
+
+  // Compute q-values.
+  FLOAT_T* target_scores = target_matches->extractScores(score_type);
+  int num_targets = target_matches->getMatchTotal();
+  FLOAT_T* decoy_scores = decoy_matches->extractScores(score_type);
+  int num_decoys = decoy_matches->getMatchTotal();
+  carp(CARP_INFO,
+       "There are %d target and %d decoy PSMs for q-value computation.",
+       num_targets, num_decoys);
+
+  FLOAT_T* qvalues = NULL;
+  switch (estimation_method) {
+  case TDC_METHOD:
+  case PEPTIDE_LEVEL_METHOD:
+    qvalues = compute_decoy_qvalues_tdc(target_scores, num_targets,
+      decoy_scores, num_decoys, ascending, 1.0);
+    break;
+  case MIXMAX_METHOD:
+    qvalues = compute_decoy_qvalues_mixmax(target_scores, num_targets,
+      decoy_scores, num_decoys,
+      ascending,
+      Params::GetDouble("pi-zero"));
+    break;
+  case NUMBER_METHOD_TYPES:
+  case INVALID_METHOD:
+      carp(CARP_FATAL, "No estimation method specified.");
+  }
+
+  unsigned int fdr1 = 0;
+  unsigned int fdr5 = 0;
+  unsigned int fdr10 = 0;
+  for (unsigned int i = 0; i < num_targets; ++i) {
+    if (qvalues[i] < 0.01) ++fdr1;
+    if (qvalues[i] < 0.05) ++fdr5;
+    if (qvalues[i] < 0.10) ++fdr10;
+  }
+  carp(CARP_INFO, "Number of PSMs at 1%% FDR = %d.", fdr1);
+  carp(CARP_INFO, "Number of PSMs at 5%% FDR = %d.", fdr5);
+  carp(CARP_INFO, "Number of PSMs at 10%% FDR = %d.", fdr10);
+
+  free(decoy_scores);
+
+  // Store p-values to q-values as a hash, and then assign them.
+  map<FLOAT_T, FLOAT_T> qvalue_hash
+    = store_arrays_as_hash(target_scores, qvalues, num_targets);
+
+  target_matches->assignQValues(&qvalue_hash, score_type, derived_score_type);
+
+  free(target_scores);
+  free(qvalues);
+  
+  // Store targets by score.
+  target_matches->sort(score_type);
+  if (spectrum_flag_ == NULL) {
+    output_->writeMatches(target_matches);
+    output_->writeFooters();
+    delete output_;
+  } else {
+    accepted_psms_ = 0;
+    //print out accepted matches in Cascade Search
+    MatchCollection* accepted_matches = new MatchCollection();
+    MatchIterator* match_iterator =
+      new MatchIterator(target_matches, score_type, false);
+
+    while (match_iterator->hasNext()) {
+      Match* match = match_iterator->next();
+
+      if (match->getScore(QVALUE_TDC) > Params::GetDouble("q-value-threshold")) {
+        break;
+      }
+      spectrum_flag_->insert(make_pair(pair<string, unsigned int>(
+        match->getSpectrum()->getFullFilename(),
+        match->getSpectrum()->getFirstScan() * 10 + match->getCharge()), true));
+      
+      match->setDatabaseIndexName(index_name_);
+
+      accepted_matches->addMatch(match);
+      ++accepted_psms_;
+    }
+    output_->writeMatches(accepted_matches);
+    delete accepted_matches;
+    delete match_iterator;
+  }
+  delete decoy_matches;
+  delete target_matches;
+
+  return 0;
+} // Main
+
+
+/**
+* Find the best-scoring match for each peptide in a given collection.
+* Only consider the top-ranked PSM per spectrum.
+*
+* Results are stored in the given match collection.
+*/
+void AssignConfidenceApplication::identify_best_psm_per_peptide(
+  MatchCollection* all_matches,
+  SCORER_TYPE_T score_type
+) {
+  /* Instantiate a hash table.  key = peptide; value = maximal xcorr
+     for that peptide. */
+  map<string, FLOAT_T> best_score_per_peptide;
+
+  // Store in the hash the best score per peptide.
+  MatchIterator* match_iterator 
+    = new MatchIterator(all_matches, score_type, false);
+  while(match_iterator->hasNext()) {
+    Match* match = match_iterator->next();
+
+    // Skip matches that are not top-ranked.
+    if (match->getRank(score_type) == 1) {
+      char *peptide = match->getModSequenceStrWithSymbols();
+      FLOAT_T this_score = match->getScore(score_type);
+
+      map<string, FLOAT_T>::iterator map_position 
+        = best_score_per_peptide.find(peptide);
+
+      if (map_position == best_score_per_peptide.end()) {
+        best_score_per_peptide[peptide] = this_score;
+      } else {
+        // FIXME: Need a generic compare operator for score_type.
+        if (map_position->second < this_score) {
+          best_score_per_peptide[peptide] = this_score;
+        }
+      }
+      free(peptide);
+    }
+  }
+  delete match_iterator;
+
+
+  // Set the best_per_peptide Boolean in the match, based on the hash.
+  match_iterator = new MatchIterator(all_matches, score_type, false);
+  while(match_iterator->hasNext()) {
+    Match* match = match_iterator->next();
+
+     // Skip matches that are not top-ranked.
+    if (match->getRank(score_type) == 1) {
+      char* peptide = match->getModSequenceStrWithSymbols();
+      FLOAT_T this_score = match->getScore(score_type);
+
+      map<string, FLOAT_T>::iterator map_position 
+        = best_score_per_peptide.find(peptide);
+
+      if (map_position->second == this_score) {
+        match->setBestPerPeptide();
+        
+        // Prevent ties from causing two peptides to be best.
+        best_score_per_peptide[peptide] = HUGE_VAL;
+      }
+      
+      free(peptide);
+    }
+  }
+  delete match_iterator;
+}
+
+
+/**
+ * The q-value is defined as the minimum FDR at which a given score is
+ * deemed significant.  This function takes a list of FDRs and
+ * converts them into q-values.  The FDRs should be ordered from
+ * lowest to highest, sorted according to the underlying score.
+ */
+void AssignConfidenceApplication::convert_fdr_to_qvalue(
+  FLOAT_T* qvalues,     ///< Come in as FDRs, go out as q-values.
+  int      num_values
+) {
+  FLOAT_T prev_fdr = qvalues[num_values - 1];
+  int idx;
+  for (idx=num_values - 2; idx >= 0; idx--) {
+    carp(CARP_DETAILED_DEBUG, "fdr[%i] = %.10f", idx, qvalues[idx]);
+    FLOAT_T this_fdr = qvalues[idx];
+    if (prev_fdr < this_fdr) {
+      qvalues[idx] = prev_fdr;
+    }
+    prev_fdr = qvalues[idx];
+    carp(CARP_DETAILED_DEBUG, "qvalue[%i] = %.10f", idx, qvalues[idx]);
+  }
+}
+
+/**
+ * Store two parallel arrays of floats in a hash table.
+ */
+map<FLOAT_T, FLOAT_T> AssignConfidenceApplication::store_arrays_as_hash(
+  FLOAT_T* keys, 
+  FLOAT_T* values,
+  int      num_values
+) {
+  map<FLOAT_T, FLOAT_T> return_value;
+  for (int idx=0; idx < num_values; idx++) {
+    carp(CARP_DETAILED_DEBUG, "%g maps to %g", keys[idx], values[idx]);
+    return_value[keys[idx]] = values[idx];
+  }
+  return(return_value);
+}
+
+/**
+ * \brief Compute q-values from a given set of scores, using a second
+ * set of scores as an empirical null.  Sorts the incoming target
+ * scores and returns a corresponding list of q-values.
+ *
+ * This function is only exported to allow unit testing.
+ */
+FLOAT_T* AssignConfidenceApplication::compute_decoy_qvalues_tdc(
+  FLOAT_T* target_scores,
+  int      num_targets,
+  FLOAT_T* decoy_scores,
+  int      num_decoys,
+  bool     ascending,
+  FLOAT_T  pi_zero
+) {
+  if ((num_targets == 0) || (num_decoys == 0)) {
+    carp(CARP_FATAL, "Cannot compute q-values (%d targets, %d nulls).",
+         num_targets, num_decoys);
+  }
+  carp(CARP_DEBUG, "Computing decoy q-values with %d targets and %d decoys.",
+       num_targets, num_decoys);
+
+  // Sort both sets of scores.
+  if (ascending) {
+    sort(target_scores, target_scores + num_targets, Match::ScoreLess);
+    sort(decoy_scores, decoy_scores + num_decoys, Match::ScoreLess);
+  } else {
+    sort(target_scores, target_scores + num_targets, Match::ScoreGreater);
+    sort(decoy_scores, decoy_scores + num_decoys, Match::ScoreGreater);
+  }
+
+  // Compute false discovery rate for each target score.
+  FLOAT_T* qvalues = (FLOAT_T*)mycalloc(num_targets, sizeof(FLOAT_T));
+  int decoy_idx = 0;
+  for (int target_idx = 0; target_idx < num_targets; target_idx++) {
+    FLOAT_T target_score = target_scores[target_idx];
+
+    // Find the index of the first decoy score greater than this target score.
+    if (ascending) {
+      while (decoy_idx < num_decoys &&
+             Match::ScoreLess(decoy_scores[decoy_idx], target_score)) {
+        carp(CARP_DEBUG, "Decoy score %g.", decoy_scores[decoy_idx]);
+        decoy_idx++;
+      }
+    } else {   
+      while (decoy_idx < num_decoys &&
+             Match::ScoreGreater(decoy_scores[decoy_idx], target_score)) {
+        carp(CARP_DEBUG, "Decoy score %g.", decoy_scores[decoy_idx]);
+        decoy_idx++;
+      }
+    }
+
+    // FDR = (#decoys + 1)/ #targets
+    FLOAT_T fdr = 
+      ((FLOAT_T)(decoy_idx + 1)/ (FLOAT_T)(target_idx + 1));
+    
+    if ( fdr > 1.0 ) {
+      fdr = 1.0;
+    }
+    
+    carp(CARP_DEBUG, "FDR for score %g = min(1,%d/%d) = %g",
+         target_score, decoy_idx, target_idx + 1, fdr);
+
+    qvalues[target_idx] = fdr;
+  }
+  
+  // Convert the FDRs into q-values.
+  convert_fdr_to_qvalue(qvalues, num_targets);
+
+  return qvalues;
+}
+
+FLOAT_T AssignConfidenceApplication::estimate_pi0(FLOAT_T* target_scores,
+  int      num_targets,
+  FLOAT_T* decoy_scores,
+  int      num_decoys,
+  bool     ascending
+) {
+  vector<pair<double, bool> > score_labels;
+  transform(target_scores, target_scores + num_targets,
+            back_inserter(score_labels),
+            bind2nd(ptr_fun<double, bool, pair<double, bool> >(make_pair), true));
+  transform(decoy_scores, decoy_scores + num_decoys,
+            back_inserter(score_labels),
+            bind2nd(ptr_fun<double, bool, pair<double, bool> >(make_pair), false));
+
+  // sort them 
+  if (ascending) {
+    sort(score_labels.begin(), score_labels.end());
+    PosteriorEstimator::setReversed(true);
+  } else {
+    sort(score_labels.begin(), score_labels.end(),
+       greater<pair<double, bool> > ());  
+  }
+  // get p-values
+  vector<double> pvals;
+  PosteriorEstimator::getPValues(score_labels, pvals);
+  
+  // estimate pi_zero
+  FLOAT_T pi_zero = PosteriorEstimator::estimatePi0(pvals);
+
+  carp(CARP_INFO, "Estimated pi_zero = %f", pi_zero);
+  return pi_zero;
+}
+
+/**
+ * \brief Compute q-values using mix-max procedure. This part is a
+ * reimplementation of Uri Keich's code written in R.
+ *
+ */
+FLOAT_T* AssignConfidenceApplication::compute_decoy_qvalues_mixmax(
+  FLOAT_T* target_scores,
+  int      num_targets,
+  FLOAT_T* decoy_scores,
+  int      num_decoys,
+  bool     ascending,
+  FLOAT_T  pi_zero
+) {
+  if ((num_targets == 0) || (num_decoys == 0)) {
+    carp(CARP_FATAL, "Cannot compute q-values (%d targets, %d decoys).",
+         num_targets, num_decoys);
+  }
+  if (num_targets != num_decoys) {
+    carp(CARP_WARNING, "The mix-max procedure is not well behaved when # targets (%d) != # of decoys (%d).",
+         num_targets, num_decoys);
+  }
+  //estimate pi0 from data if it is not given.
+  if (pi_zero == 1.0) {
+    
+      // put all of the scores in a single vector of pairs: score, is_target
+      vector<pair<double, bool> > score_labels;
+      transform(target_scores, target_scores + num_targets,
+                back_inserter(score_labels),
+                bind2nd(ptr_fun<double, bool, pair<double, bool> >(make_pair), true));
+      transform(decoy_scores, decoy_scores + num_decoys,
+                back_inserter(score_labels),
+                bind2nd(ptr_fun<double, bool, pair<double, bool> >(make_pair), false));
+
+      // sort them 
+      if (ascending) {
+        sort(score_labels.begin(), score_labels.end());
+        PosteriorEstimator::setReversed(true);
+      } else {
+        sort(score_labels.begin(), score_labels.end(),
+           greater<pair<double, bool> > ());  
+      }
+      // get p-values
+      vector<double> pvals;
+      PosteriorEstimator::getPValues(score_labels, pvals);
+      
+      // estimate pi_zero
+      pi_zero = PosteriorEstimator::estimatePi0(pvals);
+
+      carp(CARP_INFO, "Estimated pi_zero = %f", pi_zero);
+
+  }
+  // continue with mix-max procedure
+  for (int target_idx = 0; target_idx < num_targets; ++target_idx) {
+    carp(CARP_DEBUG, "target_scores[%d]=%lf decoy_scores[%d]=%lf",
+         target_idx, target_scores[target_idx],
+         target_idx, decoy_scores[target_idx]);
+  }
+
+  //Sort decoy and target stores
+  if (ascending) {
+    sort(target_scores, target_scores + num_targets, greater<FLOAT_T>());
+    sort(decoy_scores, decoy_scores + num_decoys, greater<FLOAT_T>());
+  } else {
+    sort(target_scores, target_scores + num_targets);
+    sort(decoy_scores, decoy_scores + num_decoys);
+  }
+
+  //histogram of the target scores.
+  double* h_w_le_z = new double[num_decoys + 1];   //histogram for N_{w<=z}
+  double* h_z_le_z = new double[num_decoys + 1];   //histogram for N_{z<=z}
+
+  int idx = 0;
+  int cnt = 0;
+  int i;
+  for (i = 0; i < num_decoys; ++i) {
+    while (idx < num_targets && ascending ?
+      decoy_scores[i] <= target_scores[idx] :
+      decoy_scores[i] >= target_scores[idx]) {
+      ++cnt;
+      ++idx;
+    }
+    h_w_le_z[i] = (double)cnt;
+  }
+  cnt = 0;
+  idx = 0;
+  for (i = 0; i < num_decoys; ++i) {
+    while (idx < num_targets && ascending ?
+      decoy_scores[i] <= decoy_scores[idx] :
+      decoy_scores[i] >= decoy_scores[idx]) {
+      ++cnt;
+      ++idx;
+    }
+    h_z_le_z[i] = (double)cnt;
+  }
+  h_w_le_z[num_decoys] = (double)(num_targets);
+  h_z_le_z[num_decoys] = (double)(num_decoys);
+  
+  FLOAT_T* fdrmod = new FLOAT_T[num_targets];
+  double estPx_lt_zj = 0.0;
+  double E_f1_mod_run_tot = 0.0;
+  int j = num_decoys-1;
+  int k = num_targets-1;
+  int n_z_ge_w = 0;
+  int n_w_ge_w = 0;
+  double qvalue;
+  double cnt_z, cnt_w;
+  double prev_fdr = -1;
+
+  for (i = num_targets - 1; i >= 0; --i) {
+    while (j >= 0 && (ascending ? 
+      decoy_scores[j] <= target_scores[i] : 
+      decoy_scores[j] >= target_scores[i])) {
+      cnt_w = h_w_le_z[j + 1];
+      cnt_z = h_z_le_z[j + 1];
+      estPx_lt_zj = (double)(cnt_w - pi_zero*cnt_z) / ((1.0 - pi_zero)*cnt_z);
+      estPx_lt_zj = estPx_lt_zj > 1 ? 1 : estPx_lt_zj;
+      estPx_lt_zj = estPx_lt_zj < 0 ? 0 : estPx_lt_zj;
+      E_f1_mod_run_tot += estPx_lt_zj * ((1.0 - pi_zero));
+      ++n_z_ge_w;
+      --j;
+    }
+    while (k >= 0 && (ascending ?
+      target_scores[k] <= target_scores[i] :
+      target_scores[k] >= target_scores[i])) {
+      ++n_w_ge_w;
+      --k;
+    }
+    qvalue = ((double)n_z_ge_w * pi_zero + E_f1_mod_run_tot) / (double)(n_w_ge_w);
+    fdrmod[i] = qvalue > 1.0 ? 1.0 : qvalue;
+    
+    //convert qvalues to fdr
+    if (prev_fdr > fdrmod[i])
+      fdrmod[i] = prev_fdr;
+
+    prev_fdr = fdrmod[i];
+  }
+  // Convert the FDRs into q-values.
+  delete[] h_w_le_z;
+  delete[] h_z_le_z;
+  return fdrmod;
+}
+
+void AssignConfidenceApplication::peptide_level_filtering(
+  MatchCollection* match_collection,
+  std::map<string, FLOAT_T>* BestPeptideScore, 
+  SCORER_TYPE_T score_type,
+  bool ascending) {
+
+    MatchIterator* temp_iter = new MatchIterator(match_collection);
+
+    while (temp_iter->hasNext()) {
+      Crux::Match* match = temp_iter->next();
+      FLOAT_T score = match->getScore(score_type);
+      string peptideStr = getPeptideSeq(match);
+
+      FLOAT_T bestScore = 0.0;
+      try {
+        bestScore = BestPeptideScore->at(peptideStr);
+      } catch (const std::out_of_range& oor) {
+        BestPeptideScore->insert(std::pair<string, FLOAT_T>(peptideStr, score));
+        continue;
+      }
+      if ((ascending && bestScore > score) || (!ascending && score > bestScore)) {
+        BestPeptideScore->at(peptideStr) = score;
+      }
+    }
+    delete temp_iter;
+}
+
+string AssignConfidenceApplication::getPeptideSeq(Match* match) {
+  string peptideSeq;
+  if (Params::GetBool("combine-modified-peptides")) {
+    peptideSeq = match->getPeptide()->getSequence();
+  } else {
+    peptideSeq = match->getPeptide()->getModifiedSequenceWithMasses();
+  }
+  if (Params::GetBool("combine-charge-states")) {
+    peptideSeq += StringUtils::ToString(match->getCharge());
+  }
+  return peptideSeq;
+}
+
+map<pair<string, unsigned int>, bool>* AssignConfidenceApplication::getSpectrumFlag() {
+  return spectrum_flag_;
+}
+
+void AssignConfidenceApplication::setSpectrumFlag(map<pair<string, unsigned int>, bool>* spectrum_flag) {
+  spectrum_flag_ = spectrum_flag;
+}
+
+void AssignConfidenceApplication::setIterationCnt(unsigned int iteration_cnt) {
+  iteration_cnt_ = iteration_cnt;
+}
+
+void AssignConfidenceApplication::setOutput(OutputFiles *output) {
+  output_ = output;
+}
+
+void AssignConfidenceApplication::setIndexName(string index_name) {
+  index_name_ = index_name;
+}
+
+unsigned int AssignConfidenceApplication::getAcceptedPSMs() {
+  return accepted_psms_;
+}
+
+int AssignConfidenceApplication::getDirection(SCORER_TYPE_T scoreType) {
+  // Return -1 for higher score better, 1 for lower score better, or 0 for unknown
+  switch (scoreType) {
+    case SP:
+    case XCORR:
+    case LOGP_BONF_WEIBULL_XCORR: // negative log p-values
+    case TIDE_SEARCH_REFACTORED_XCORR:
+    case PERCOLATOR_SCORE:
+      // higher score better, ascending = false
+      return -1;
+    case EVALUE:
+    case TIDE_SEARCH_EXACT_PVAL:
+    case TIDE_SEARCH_EXACT_SMOOTHED:
+      // lower score better, ascending = true
+      return 1;
+    default:
+      carp(CARP_FATAL, "Unknown score type %s", scorer_type_to_string(scoreType));
+      // unknown score type
+      return 0;
+  }
+}
+
+/**
+* \returns the command name for ComputeQValues
+*/
+string AssignConfidenceApplication::getName() const {
+  return "assign-confidence";
+}
+
+/**
+* \returns the description for ComputeQValues
+*/
+string AssignConfidenceApplication::getDescription() const {
+  return
+    "[[nohtml:Assign two types of statistical confidence measures (q-values "
+    "and posterior error probabilities) to each PSM in a given set.]]"
+    "[[html:<p>Given target and decoy scores, estimate a q-value for each "
+    "target score. The q-value is analogous to a p-value but incorporates "
+    "false discovery rate multiple testing correction. The q-value associated "
+    "with a score threshold T is defined as the minimal false discovery rate "
+    "(FDR) at which a score of T is deemed significant. In this setting, the "
+    "q-value accounts for the fact that we are analyzing a large collection of "
+    "scores. For confidence estimation afficionados, please note that this "
+    "definition of \"q-value\" is independent of the notion of \"positive FDR\" "
+    "as defined in (Storey <em>Annals of Statistics</em> 31:2013-2015:2003).</p>"
+    "<p>To estimate FDRs, <code>assign-confidence</code> uses one of two "
+    "different procedures. Both require that the input contain both target and "
+    "decoy scores. The default, target-decoy competition (TDC) procedure is "
+    "described in this article:</p><blockquote>Josh E. Elias and Steve P. Gygi. "
+    "\"Target-decoy search strategy for increased confidence in large-scale "
+    "protein identifications by mass spectrometry.\" <em>Nature Methods</em>. "
+    "4(3):207-14, 2007.</blockquote><p>Note that <code>assign-confidence</code> "
+    "implements a variant of the protocol proposed by Elias and Gygi: rather "
+    "than reporting a list that contains both targets and decoys, <code>"
+    "assign-confidence</code> reports only the targets. The FDR estimate is "
+    "adjusted accordingly (by dividing by 2).</p><p>The alternative, <em>"
+    "mix-max</em> procedure is described in this article:</p><blockquote>Uri "
+    "Keich, Attila Kertesz-Farkas and William Stafford Noble. "
+    "<a href=\"http://pubs.acs.org/doi/abs/10.1021/acs.jproteome.5b00081\">"
+    "\"An improved false discovery rate estimation procedure for shotgun proteomics.\"</a> "
+    "<i>Journal of Proteome Research</i>. 14(8):3148-3161, 2015.</blockquote>"
+    "<p>Note that the mix-max procedure requires as "
+    "input calibrated scores, such as Comet E-values or p-values produced "
+    "using Tide-s <code>exact-p-value</code> option.</p>"
+    "<p>The mix-max procedure requires that scores "
+    "are reported from separate target and decoy searches. Thus, this approach "
+    "is incompatible with a search that is run using the <code>--concat T"
+    "</code> option to <code>tide-search</code> or the <code>--decoy_search 2"
+    "</code> option to <code>comet</code>. On the other hand, the TDC "
+    "procedure can take as input "
+    "searches conducted in either mode (concatenated or separate). If given "
+    "separate search results and asked to do TDC estimation, <code>"
+    "assign-confidence</code> will carry out the target-decoy competition as "
+    "part of the confidence estimation procedure.</p><p>In each case, the "
+    "estimated FDRs are converted to q-values by sorting the scores then "
+    "taking, for each score, the minimum of the current FDR and all of the FDRs "
+    "below it in the ranked list.</p><p>A primer on multiple testing correction "
+    "can be found here:</p><blockquote>William Stafford Noble. <a href=\""
+    "http://www.nature.com/nbt/journal/v27/n12/full/nbt1209-1135.html\">\"How "
+    "does multiple testing correction work?\"</a> <em>Nature Biotechnology</em>. "
+    "27(12):1135-1137, 2009.</blockquote>]]";
+}
+
+/**
+* \returns the command arguments
+*/
+vector<string> AssignConfidenceApplication::getArgs() const {
+  string arr[] = {
+    "target input+"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+* \returns the command options
+*/
+vector<string> AssignConfidenceApplication::getOptions() const {
+  string arr[] = {
+    "estimation-method",
+    "decoy-prefix",
+    "score",
+    "sidak",
+    "verbosity",
+    "parameter-file",
+    "overwrite",
+    "output-dir",
+    "list-of-files",
+    "combine-charge-states",
+    "combine-modified-peptides",
+    "fileroot"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+* \returns the command outputs
+*/
+vector< pair<string, string> >  AssignConfidenceApplication::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("assign-confidence.target.txt",
+    "a <a href=\"../file-formats/txt-format.html\">tab-delimited text file</a> that contains the "
+    "targets, sorted by score. The file will contain one new column, named "
+    "\"<method> q-value\", where <method> is either \"tdc\" or \"mix-max\"."));
+  outputs.push_back(make_pair("assign-confidence.log.txt",
+    "a log file containing a copy of all messages that were printed to stderr."));
+  outputs.push_back(make_pair("assign-confidence.params.txt",
+    "a file containing the name and value of all parameters/options for the "
+    "current operation. Not all parameters in the file may have been used in "
+    "the operation. The resulting file can be used with the --parameter-file "
+    "option for other crux programs."));
+  return outputs;
+}
+
+/**
+* \returns the filestem for ComputeQValues
+*/
+string AssignConfidenceApplication::getFileStem() const {
+  return "assign-confidence";
+}
+
+COMMAND_T AssignConfidenceApplication::getCommand() const {
+  return QVALUE_COMMAND; // FIXME: Rename this. --WSN 4 Feb 2016
+}
+
+/**
+* \returns whether the application needs the output directory or not.
+*/
+bool AssignConfidenceApplication::needsOutputDirectory() const {
+  return true;
+}
+
+void AssignConfidenceApplication::processParams() {
+  if (Params::GetString("estimation-method") != "peptide-level") {
+    if (Params::GetInt("top-match") != 1 && !Params::IsDefault("top-match")) {
+      carp(CARP_WARNING, "assign-confidence can work with top-match = 1 only.");
+    }
+    Params::Set("top-match", 1);
+  }
+}
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
+ 
diff --git a/src/app/AssignConfidenceApplication.h b/src/app/AssignConfidenceApplication.h
new file mode 100644
index 0000000..d80c437
--- /dev/null
+++ b/src/app/AssignConfidenceApplication.h
@@ -0,0 +1,177 @@
+/**
+* \file AssignConfidenceApplication.h
+* AUTHOR: Attila Kertesz-Farkas
+* CREATE DATE: May 01, 2015
+****************************************************************************/
+
+#ifndef ASSIGNCONFIDENCE_H
+#define ASSIGNCONFIDENCE_H
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "io/carp.h"
+#include "util/crux-utils.h"
+#include "model/objects.h"
+#include "parameter.h"
+#include "model/Protein.h"
+#include "model/Spectrum.h"
+#include "io/SpectrumCollection.h"
+#include "model/Scorer.h"
+#include "model/Match.h"
+#include "model/MatchCollection.h"
+#include "io/OutputFiles.h"
+#include "model/Peptide.h"
+
+/**
+ * Legal values for the --estimation-method option.
+ */
+enum _estimation_method {
+  INVALID_METHOD,
+  MIXMAX_METHOD,       ///< compute q-values using mix-max (Uri Keich)
+  TDC_METHOD,          ///< compute q-values using TDC (Elias-Gygi)  
+  PEPTIDE_LEVEL_METHOD,///< simple peptide-level decoy-based estimation (WOTE)
+  NUMBER_METHOD_TYPES  ///< always keep this last so the value
+                        /// changes as cmds are added
+};
+
+typedef enum _estimation_method ESTIMATION_METHOD_T;
+
+class AssignConfidenceApplication : public CruxApplication {
+ protected:
+  map<pair<string, unsigned int>, bool>* spectrum_flag_;  // this variable is used in Cascade Search, this is an idicator 
+  unsigned int iteration_cnt_;
+  OutputFiles* output_;
+  unsigned int accepted_psms_;
+  string index_name_;
+
+ public:
+  map<pair<string, unsigned int>, bool>* getSpectrumFlag();
+  void setSpectrumFlag(map<pair<string, unsigned int>, bool>* spectrum_flag);
+  void setIterationCnt(unsigned int iteration_cnt);
+  void setOutput(OutputFiles *output);
+  unsigned int getAcceptedPSMs();
+  std::string getPeptideSeq(Crux::Match* match);
+
+  /**
+  * stores the name of the index file used in an iteration in Cascade Search.
+  */
+  void setIndexName(string index_name);
+
+  /**
+  * \returns a blank ComputeQValues object
+  */
+  AssignConfidenceApplication();
+
+  /**
+  * Destructor
+  */
+  ~AssignConfidenceApplication();
+
+  /**
+  * main method for ComputeQValues
+  */
+  virtual int main(int argc, char** argv);
+
+  virtual int main(const vector<string> input_files);
+
+  static int getDirection(SCORER_TYPE_T scoreType);
+
+  /**
+  * \returns the command name for ComputeQValues
+  */
+  virtual std::string getName() const;
+
+  /**
+  * \returns the description for ComputeQValues
+  */
+  virtual std::string getDescription() const;
+
+  /**
+  * \returns the command arguments
+  */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+  * \returns the command options
+  */
+  virtual std::vector<std::string> getOptions() const;
+
+  /**
+  * \returns the command outputs
+  */
+  virtual std::vector< std::pair<std::string, std::string> >  getOutputs() const;
+
+  /**
+  * \returns the filestem for ComputeQValues
+  */
+  virtual std::string getFileStem() const;
+
+  /**
+  * \returns the enum of the application, default MISC_COMMAND
+  */
+  virtual COMMAND_T getCommand() const;
+  
+  /**
+  * \Preprocesses the program arguments before finalizing them.
+  */
+  virtual void processParams();
+
+  /**
+  * \returns whether the application needs the output directory or not.
+  */
+  virtual bool needsOutputDirectory() const;
+
+  FLOAT_T* compute_decoy_qvalues_tdc(
+    FLOAT_T* target_scores,
+    int      num_targets,
+    FLOAT_T* decoy_scores,
+    int      num_decoys,
+    bool     reverse);
+
+  FLOAT_T* compute_qvalues_from_pvalues(
+    FLOAT_T* pvalues,
+    int      num_pvals,
+    FLOAT_T  pi_zero);
+
+  FLOAT_T estimate_pi0(FLOAT_T* target_scores,
+    int      num_targets,
+    FLOAT_T* decoy_scores,
+    int      num_decoys,
+    bool     ascending);
+
+  void peptide_level_filtering(
+    MatchCollection* match_collection,
+    std::map<string, FLOAT_T>* BestPeptideScore,
+    SCORER_TYPE_T score_type,
+    bool ascending);
+  
+  void identify_best_psm_per_peptide
+    (MatchCollection* all_matches,
+    SCORER_TYPE_T score_type);
+  void convert_fdr_to_qvalue
+    (FLOAT_T* qvalues,     ///< Come in as FDRs, go out as q-values.
+    int      num_values);
+  map<FLOAT_T, FLOAT_T> store_arrays_as_hash
+    (FLOAT_T* keys,
+    FLOAT_T* values,
+    int      num_values);
+  FLOAT_T* compute_decoy_qvalues_tdc(
+    FLOAT_T* target_scores,
+    int      num_targets,
+    FLOAT_T* decoy_scores,
+    int      num_decoys,
+    bool     forward,
+    FLOAT_T  pi_zero
+    );
+  FLOAT_T* compute_decoy_qvalues_mixmax(
+    FLOAT_T* target_scores,
+    int      num_targets,
+    FLOAT_T* decoy_scores,
+    int      num_decoys,
+    bool     ascending,
+    FLOAT_T  pi_zero
+    );
+};
+
+#endif //ASSIGNCONFIDENCE_H
+
diff --git a/src/app/CascadeSearchApplication.cpp b/src/app/CascadeSearchApplication.cpp
new file mode 100644
index 0000000..e7d8697
--- /dev/null
+++ b/src/app/CascadeSearchApplication.cpp
@@ -0,0 +1,228 @@
+/**
+ * \file CascadeSearchApplication.cpp
+ * \brief Iterative PSM meta-search via Cascade protocol
+ ************************************************************/
+#include "CascadeSearchApplication.h"
+#include "io/OutputFiles.h"
+#include "AssignConfidenceApplication.h"
+#include "TideSearchApplication.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+#include "util/FileUtils.h"
+#include "stdio.h"
+#include "boost/filesystem.hpp"
+
+using namespace std;
+
+int const CascadeSearchApplication::CASCADE_TERMINATION_CONDITION = 20;
+
+/**
+ * \returns a blank CascadeSearchApplication object
+ */
+CascadeSearchApplication::CascadeSearchApplication() {
+
+}
+
+/**
+ * Destructor
+ */
+CascadeSearchApplication::~CascadeSearchApplication() {
+}
+
+/**
+ * main method for CascadeSearchApplication
+ */
+int CascadeSearchApplication::main(int argc, char** argv) {
+  map<pair<string, unsigned int>, bool>* spectrum_flag = new map<pair<string, unsigned int>, bool>;
+
+  carp(CARP_INFO, "Running cascade-search...");
+
+  string database_string = Params::GetString("database-series");
+  vector<string> database_indeces = StringUtils::Split(database_string, ',');
+  OutputFiles* output = new OutputFiles(this);
+
+  int return_code;
+  for (unsigned int cascade_cnt = 0; cascade_cnt < database_indeces.size(); ++cascade_cnt) {
+
+    //carry out tide-search
+    TideSearchApplication TideSearchProgram;
+    TideSearchProgram.setSpectrumFlag(spectrum_flag);
+    return_code = TideSearchProgram.main(Params::GetStrings("tide spectra file"), database_indeces[cascade_cnt]);
+    if (return_code != 0) {
+      return return_code;
+    }
+
+    //pass the output from Tide-Search to Assign-Confidence
+    vector<string> bridge_file_name;
+    bridge_file_name.push_back(TideSearchProgram.getOutputFileName());
+
+    //carry out assign confidence
+    AssignConfidenceApplication AssignConfidenceProgram;
+    AssignConfidenceProgram.setSpectrumFlag(spectrum_flag);
+    AssignConfidenceProgram.setIterationCnt(cascade_cnt);
+    AssignConfidenceProgram.setOutput(output);
+    AssignConfidenceProgram.setIndexName(database_indeces[cascade_cnt]);
+
+    return_code = AssignConfidenceProgram.main(bridge_file_name);
+    if (return_code != 0) {
+      return return_code;
+    }
+    spectrum_flag = AssignConfidenceProgram.getSpectrumFlag();
+
+    //remove tide-search and assign-confidence output files.
+    string outputdir = Params::GetString("output-dir");
+    RemoveTempFiles(outputdir, TideSearchProgram.getName());
+    RemoveTempFiles(outputdir, AssignConfidenceProgram.getName());
+
+    int numAccepted = AssignConfidenceProgram.getAcceptedPSMs();
+    if (numAccepted < CASCADE_TERMINATION_CONDITION) {
+      carp(CARP_INFO,
+           "Terminating search early because only %d PSMs were accepted.",
+           numAccepted);
+      break;
+    }
+
+  }
+  delete output;
+
+  return 0;
+}
+
+/**
+ * \returns the command name for CascadeSearchApplication
+ */
+string CascadeSearchApplication::getName() const {
+  return "cascade-search";
+}
+
+/**
+ * \returns the description for CascadeSearchApplication
+ */
+string CascadeSearchApplication::getDescription() const {
+  return
+    "[[nohtml:An iterative procedure for incorporating information about "
+    "peptide groups into the database search and confidence estimation "
+    "procedure.]]"
+    "[[html:<p>Cascade-search is a general procedure for incorporating information about "
+    "peptide groups into the database search and confidence estimation procedure. Peptides "
+    "may be grouped according to, for example, their enzymatic properties (zero, one, or "
+    "two enzymatic termini) or the presence of different types of numbers of variable "
+    "modifications. The algorithm works on a series of databases, each corresponding to a "
+    "different peptide group. The database is searched in series, and after each search, any "
+    "spectrum that is identified with a user-specified confidence threshold is sequestered "
+    "from subsequent searches. The full cascade search procedure is described in this article: </p>"
+    "<blockquote>Attila Kertesz-Farkas, Uri Keich and William Stafford Noble. "
+    "<a href=\"http://pubs.acs.org/doi/abs/10.1021/pr501173s\">\"Tandem mass spectrum "
+    "identification via cascaded search.\"</a> <i>Journal of Proteome Research</i>. "
+    "14(8):3027-38, 2015. </blockquote>]]";
+}
+
+/**
+ * \returns the command arguments
+ */
+vector<string> CascadeSearchApplication::getArgs() const {
+  string arr[] = {
+    "tide spectra file+",
+    "database-series"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+
+/**
+ * \returns the command options
+ */
+vector<string> CascadeSearchApplication::getOptions() const {
+
+  string arr[] = {
+    "q-value-threshold"
+  };
+  vector<string> options(arr, arr + sizeof(arr) / sizeof(string));
+  addOptionsFrom<AssignConfidenceApplication>(&options);
+  addOptionsFrom<TideSearchApplication>(&options);
+  removeOptionFrom(&options, "top-match");
+
+  return options;
+}
+
+/**
+ * \returns the command outputs
+ */
+vector< pair<string, string> > CascadeSearchApplication::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("cascade-search.target.txt",
+    "a <a href=\"../file-formats/txt-format.html\">tab-delimited text file</a> containing the "
+    "target PSMs accepted at a pre-defined fdr."));
+  outputs.push_back(make_pair("cascade-search.log.txt",
+    "a log file containing a copy of all messages that were printed to stderr."));
+  outputs.push_back(make_pair("cascade-search.params.txt",
+    "a file containing the name and value of all parameters/options for the "
+    "current operation. Not all parameters in the file may have been used in "
+    "the operation. The resulting file can be used with the --parameter-file "
+    "option for other crux programs."));
+  return outputs;
+}
+
+/**
+ * \returns the filestem for CascadeSearchApplication
+ */
+string CascadeSearchApplication::getFileStem() const {
+  return "cascade-search";
+}
+
+COMMAND_T CascadeSearchApplication::getCommand() const {
+  return CASCADE_COMMAND;
+}
+
+/**
+ * \returns whether the application needs the output directory or not.
+ */
+bool CascadeSearchApplication::needsOutputDirectory() const {
+  return true;
+}
+
+void CascadeSearchApplication::processParams() {
+
+  if (Params::GetInt("top-match") != 1 && !Params::IsDefault("top-match")) {
+    carp(CARP_WARNING, "Cascade-Search can work with top-match = 1 only.");
+  }
+  Params::Set("top-match", 1);
+
+  if (Params::GetBool("exact-p-value")) {
+    Params::Set("score", "exact p-value");
+  }
+  if (Params::GetBool("pin-output")) {
+    carp(CARP_FATAL, "Cascade-Search cannot work with pinxml-output=T.");
+  }
+  if (Params::GetBool("pepxml-output")) {
+    carp(CARP_FATAL, "Cascade-Search cannot work with pepxml-output=T.");
+  }
+  if (Params::GetBool("mzid-output")) {
+    carp(CARP_FATAL, "Cascade-Search cannot work with mzid-output=T.");
+  }
+  if (Params::GetBool("sqt-output")) {
+    carp(CARP_FATAL, "Cascade-Search cannot work with sqt-output=T.");
+  }
+}
+
+void CascadeSearchApplication::RemoveTempFiles(const string& path, const string& prefix) {
+  boost::filesystem::directory_iterator end_itr; // Default ctor yields past-the-end
+  for (boost::filesystem::directory_iterator i(path); i != end_itr; ++i) {
+    // Skip if not a file
+    if (!boost::filesystem::is_regular_file(i->status())) {
+      continue;
+    }
+
+    string filename = i->path().filename().generic_string();
+    if (filename.compare(0, prefix.length(), prefix) == 0) {
+      FileUtils::Remove(FileUtils::Join(path, filename));
+    }
+  }
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/CascadeSearchApplication.h b/src/app/CascadeSearchApplication.h
new file mode 100644
index 0000000..847f849
--- /dev/null
+++ b/src/app/CascadeSearchApplication.h
@@ -0,0 +1,89 @@
+/**
+ * \file CascadeSearchApplication.h 
+ * AUTHOR: Attila Kertesz-Farkas
+ * CREATE DATE: 30 May 2015
+ * \brief Iterative PSM meta-search via Cascade protocol
+ ***********************************************************/
+#ifndef CascadeSearchApplication_H
+#define CascadeSearchApplication_H
+
+#include "CruxApplication.h"
+
+#include <string>
+
+class CascadeSearchApplication: public CruxApplication {
+
+ public:
+
+  /**
+   * \returns a blank CascadeSearchApplication object
+   */
+  CascadeSearchApplication();
+  
+  /**
+   * Destructor
+   */
+  ~CascadeSearchApplication();
+
+  /**
+   * main method for CascadeSearchApplication
+   */
+  virtual int main(int argc, char** argv);
+
+  /**
+   * \returns the command name for CascadeSearchApplication
+   */
+  virtual std::string getName() const;
+
+  /**
+   * \returns the description for CascadeSearchApplication
+   */
+  virtual std::string getDescription() const;
+
+  /**
+   * \returns the command arguments
+   */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+   * \returns the command options
+   */
+  virtual std::vector<std::string> getOptions() const;
+
+  /**
+   * \returns the command outputs
+   */
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+  /**
+   * \returns the filestem for CascadeSearchApplication
+   */
+  virtual std::string getFileStem() const;
+
+  /**
+   * \returns the enum of the application, default MISC_COMMAND
+   */
+  virtual COMMAND_T getCommand() const;
+
+  /**
+   * \returns whether the application needs the output directory or not.
+   */
+  virtual bool needsOutputDirectory() const;
+
+  virtual void processParams();
+  void RemoveTempFiles(const std::string& path, const std::string& prefix);
+
+
+  static const int CASCADE_TERMINATION_CONDITION;
+
+};
+
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/CometApplication.cpp b/src/app/CometApplication.cpp
new file mode 100644
index 0000000..17ff74e
--- /dev/null
+++ b/src/app/CometApplication.cpp
@@ -0,0 +1,546 @@
+/**
+ * \file CometApplication.cpp 
+ * \brief Runs comet
+ *****************************************************************************/
+#include "CometSearch/Common.h"
+#include "CometSearch/CometSearchManager.h"
+#include "util/AminoAcidUtil.h"
+#include "util/CarpStreamBuf.h"
+#include "util/FileUtils.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+#include "CometApplication.h"
+#include "ParamMedicApplication.h"
+#include "io/DelimitedFileWriter.h"
+#include "io/DelimitedFile.h"
+
+using namespace std;
+
+/**
+ * \returns a blank CometApplication object
+ */
+CometApplication::CometApplication() {
+}
+
+/**
+ * Destructor
+ */
+CometApplication::~CometApplication() {
+}
+
+/**
+ * main method for CometApplication
+ */
+int CometApplication::main(int argc, char** argv) {
+  return main(Params::GetStrings("input spectra"));
+}
+
+int CometApplication::main(const vector<string>& input_files) {
+  for (vector<string>::const_iterator i = input_files.begin(); i != input_files.end(); i++) {
+    if (!StringUtils::IEndsWith(*i, ".mzXML") && !StringUtils::IEndsWith(*i, ".mzML") &&
+        !StringUtils::IEndsWith(*i, ".mzXML.gz") && !StringUtils::IEndsWith(*i, ".mzML.gz") &&
+        !StringUtils::IEndsWith(*i, ".raw") && !StringUtils::IEndsWith(*i, ".mgf") &&
+        !StringUtils::IEndsWith(*i, ".ms2") && !StringUtils::IEndsWith(*i, ".cms2")) {
+      carp(CARP_FATAL, "The format of file '%s' is not supported.", i->c_str());
+    }
+  }
+
+  /* Re-route stderr to log file */
+  CarpStreamBuf buffer;
+  streambuf* old = std::cerr.rdbuf();
+  std::cerr.rdbuf(&buffer);
+
+  /* set parameters */
+  vector<InputFileInfo*> pv_input_files;
+  setCometParameters(input_files, pv_input_files);
+  searchManager_.AddInputFiles(pv_input_files);
+  
+  /* Run search */
+  bool success = searchManager_.DoSearch();
+
+  /* Recover stderr */
+  std::cerr.rdbuf(old);
+
+  return success ? 0 : 1;
+}
+
+void CometApplication::setString(const string& param) {
+  searchManager_.SetParam(param, Params::GetString(param), Params::GetString(param));
+}
+
+void CometApplication::setInt(const string& param) {
+  searchManager_.SetParam(param, Params::GetString(param), Params::GetInt(param));
+}
+
+void CometApplication::setIntRange(const string& param) {
+  vector<int> tokens = StringUtils::Fields<int>(Params::GetString(param));
+  IntRange r;
+  r.iStart = tokens[0];
+  r.iEnd = tokens[1];
+  searchManager_.SetParam(param, Params::GetString(param), r);
+}
+
+void CometApplication::setDouble(const string& param) {
+  searchManager_.SetParam(param, Params::GetString(param), Params::GetDouble(param));
+}
+
+void CometApplication::setDoubleRange(const string& param) {
+  vector<double> tokens = StringUtils::Fields<double>(Params::GetString(param));
+  DoubleRange r;
+  r.dStart = tokens[0];
+  r.dEnd = tokens[1];
+  searchManager_.SetParam(param, Params::GetString(param), r);
+}
+
+void CometApplication::setDoubleVector(const string& param) {
+  vector<double> v = StringUtils::Fields<double>(Params::GetString(param));
+  searchManager_.SetParam(param, Params::GetString(param), v);
+}
+
+void CometApplication::setVarMod(const string& param) {
+  vector<string> fields = StringUtils::Fields(Params::GetString(param));
+  if (fields.empty()) {
+    return;
+  }
+  VarMods m;
+  for (size_t i = 0; i < fields.size(); i++) {
+    string field = fields[i];
+    switch (i) {
+      case 0: m.dVarModMass = StringUtils::FromString<double>(field); break;
+      case 1: strcpy(m.szVarModChar, field.c_str()); break;
+      case 2: m.iBinaryMod = StringUtils::FromString<int>(field); break;
+      case 3: m.iMaxNumVarModAAPerMod = StringUtils::FromString<int>(field); break;
+      case 4: m.iVarModTermDistance = StringUtils::FromString<int>(field); break;
+      case 5: m.iWhichTerm = StringUtils::FromString<int>(field); break;
+      case 6: m.bRequireThisMod = StringUtils::FromString<int>(field); break;
+    }
+  }
+  searchManager_.SetParam(param, Params::GetString(param), m);
+}
+
+void CometApplication::setEnzyme(
+  const string& param,
+  const string& searchParam,
+  const string& sampleParam,
+  const string& missedCleavageParam) {
+  EnzymeInfo e;
+  double temp;
+  int search = Params::GetInt(searchParam);
+  if (search >= 0 && (size_t)search < get_comet_enzyme_info_lines().size()) {
+    const char* szParamBuf = get_comet_enzyme_info_lines()[search].c_str();
+    sscanf(szParamBuf, "%lf %48s %d %20s %20s\n",
+      &temp,
+      e.szSearchEnzymeName,
+      &e.iSearchEnzymeOffSet,
+      e.szSearchEnzymeBreakAA,
+      e.szSearchEnzymeNoBreakAA);
+  } else {
+    carp(CARP_FATAL, "search_enzyme_number=%d out of range (0-%d)",
+      search, get_comet_enzyme_info_lines().size() - 1);
+  }
+
+  int sample = Params::GetInt(sampleParam);
+  if (sample >= 0 && (size_t)sample < get_comet_enzyme_info_lines().size()) {
+    const char* szParamBuf = get_comet_enzyme_info_lines()[sample].c_str();
+    sscanf(szParamBuf, "%lf %48s %d %20s %20s\n",
+      &temp,
+      e.szSampleEnzymeName,
+      &e.iSampleEnzymeOffSet,
+      e.szSampleEnzymeBreakAA,
+      e.szSampleEnzymeNoBreakAA);
+  } else {
+    carp(CARP_FATAL, "sample_enzyme_number=%d out of range (0-%d)",
+      sample, get_comet_enzyme_info_lines().size() - 1);
+  }
+  e.iAllowedMissedCleavage = Params::GetInt(missedCleavageParam);
+  searchManager_.SetParam(param, "TODO", e);
+}
+
+/**
+ * Sets the parameters for the Comet application using the crux parameters
+ */
+void CometApplication::setCometParameters(
+  const vector<string>& spec_files,
+  vector<InputFileInfo*>& pvInputFiles ///<vector of input spectra files
+  ) {
+  string scan_range_str = Params::GetString("scan_range");
+  int analysis_type = AnalysisType_EntireFile;
+  int first_scan, last_scan;
+  if (scan_range_str != "0 0") {
+    analysis_type = AnalysisType_SpecificScanRange;
+    vector<string> tokens = StringUtils::Fields(scan_range_str);
+    first_scan = StringUtils::FromString<int>(tokens[0]);
+    last_scan = StringUtils::FromString<int>(tokens[1]);
+  }
+
+  for (vector<string>::const_iterator i = spec_files.begin(); i != spec_files.end(); i++) {
+    if (!FileUtils::Exists(*i)) {
+      carp(CARP_FATAL, "Spectra File Not Found:%s", i->c_str());
+    }
+    InputFileInfo* pInputFile = new InputFileInfo();
+    strcpy(pInputFile->szFileName, i->c_str());
+    pInputFile->iAnalysisType = analysis_type;
+    if (analysis_type == AnalysisType_SpecificScanRange) {
+      pInputFile->iFirstScan = first_scan;
+      pInputFile->iLastScan = last_scan;
+    }
+    string basename = make_file_path(getFileStem());
+    if (spec_files.size() > 1) {
+      basename += "." + FileUtils::Stem(*i);
+    }
+    strcpy(pInputFile->szBaseName, basename.c_str());
+    pvInputFiles.push_back(pInputFile);
+  }
+
+  // Database
+  setString("database_name");
+  setInt("decoy_search");
+  // CPU threads
+  setInt("num_threads");
+  // Masses
+  setDouble("peptide_mass_tolerance");
+  setInt("peptide_mass_units");
+  setInt("mass_type_parent");
+  setInt("mass_type_fragment");
+  setInt("precursor_tolerance_type");
+  setInt("isotope_error");
+  // Search enzyme
+  setInt("search_enzyme_number");
+  setInt("num_enzyme_termini");
+  setInt("allowed_missed_cleavage");
+  // Fragment ions
+  setDouble("fragment_bin_tol");
+  setDouble("fragment_bin_offset");
+  setInt("theoretical_fragment_ions");
+  setInt("use_A_ions");
+  setInt("use_B_ions");
+  setInt("use_C_ions");
+  setInt("use_X_ions");
+  setInt("use_Y_ions");
+  setInt("use_Z_ions");
+  setInt("use_NL_ions");
+  // Output
+  searchManager_.SetParam("output_sqtstream", "0", 0);
+  setInt("output_sqtfile");
+  setInt("output_txtfile");
+  setInt("output_pepxmlfile");
+  setInt("output_percolatorfile");
+  setInt("output_outfiles");
+  setInt("print_expect_score");
+  setInt("num_output_lines");
+  setInt("show_fragment_ions");
+  setInt("sample_enzyme_number");
+  // mzXML/mzML parameters
+  setIntRange("scan_range");
+  setIntRange("precursor_charge");
+  setInt("override_charge");
+  setInt("ms_level");
+  setString("activation_method");
+  // Misc. parameters
+  setDoubleRange("digest_mass_range");
+  setInt("num_results");
+  setInt("skip_researching");
+  setInt("max_fragment_charge");
+  setInt("max_precursor_charge");
+  setInt("nucleotide_reading_frame");
+  setInt("clip_nterm_methionine");
+  setInt("spectrum_batch_size");
+  setString("decoy_prefix");
+  setString("output_suffix");
+  setDoubleVector("mass_offsets");
+  // Spectral processing
+  setInt("minimum_peaks");
+  setDouble("minimum_intensity");
+  setInt("remove_precursor_peak");
+  setDouble("remove_precursor_tolerance");
+  setDoubleRange("clear_mz_range");
+  // Variable modifications
+  setVarMod("variable_mod01");
+  setVarMod("variable_mod02");
+  setVarMod("variable_mod03");
+  setVarMod("variable_mod04");
+  setVarMod("variable_mod05");
+  setVarMod("variable_mod06");
+  setVarMod("variable_mod07");
+  setVarMod("variable_mod08");
+  setVarMod("variable_mod09");
+  setInt("max_variable_mods_in_peptide");
+  setInt("require_variable_mod");
+  // Static modifications
+  setDouble("add_Cterm_peptide");
+  setDouble("add_Nterm_peptide");
+  setDouble("add_Cterm_protein");
+  setDouble("add_Nterm_protein");
+  for (char c = 'A'; c <= 'Z'; c++) {
+    string aaName = AminoAcidUtil::GetName(c);
+    aaName = aaName.empty() ? "user_amino_acid" : StringUtils::Replace(aaName, " ", "_");
+    string param = "add_" + string(1, c) + "_" + aaName;
+    setDouble(param);
+  }
+
+  setEnzyme("[COMET_ENZYME_INFO]",
+            "search_enzyme_number", "sample_enzyme_number", "allowed_missed_cleavage");
+}
+
+/**
+ * \returns the command name for CometApplication
+ */
+string CometApplication::getName() const {
+  return "comet";
+}
+
+/**
+ * \returns the description for CometApplication
+ */
+string CometApplication::getDescription() const {
+  return
+    "[[nohtml:Search a collection of spectra against a sequence database, "
+    "returning a collection of PSMs. This search engine runs directly on a "
+    "protein database in FASTA format.]]"
+    "[[html:<p>This command searches a protein database with a set of spectra, "
+    "assigning peptide sequences to the observed spectra. This search engine "
+    "was developed by Jimmy Eng at the University of Washington Proteomics "
+    "Resource.</p><p>Although its history goes back two decades, the Comet "
+    "search engine was first made publicly available in August 2012 on "
+    "SourceForge. Comet is multithreaded and supports multiple input and "
+    "output formats.</p><blockquote><a href=\"http://onlinelibrary.wiley.com/"
+    "doi/10.1002/pmic.201200439/abstract\">"Comet: an open source tandem "
+    "mass spectrometry sequence database search tool."</a> Eng JK, Jahan "
+    "TA, Hoopmann MR. <em>Proteomics</em>. 2012 Nov 12. doi: "
+    "10.1002/pmic201200439</blockquote>]]";
+}
+
+/**
+ * \returns the command arguments
+ */
+vector<string> CometApplication::getArgs() const {
+  string arr[] = {
+    "input spectra+",
+    "database_name"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command options
+ */
+vector<string> CometApplication::getOptions() const {
+  string arr[] = {
+    "fileroot",
+    "output-dir",
+    "overwrite",
+    "parameter-file",
+    "verbosity",
+    // Database
+    "decoy_search",
+    // CPU threads
+    "num_threads",
+    // Masses
+    "peptide_mass_tolerance",
+    "auto_peptide_mass_tolerance",
+    "peptide_mass_units",
+    "mass_type_parent",
+    "mass_type_fragment",
+    "precursor_tolerance_type",
+    "isotope_error",
+    // Search enzyme
+    "search_enzyme_number",
+    "num_enzyme_termini",
+    "allowed_missed_cleavage",
+    // Fragment ions
+    "fragment_bin_tol",
+    "fragment_bin_offset",
+    "auto_fragment_bin_tol",
+    "theoretical_fragment_ions",
+    "use_A_ions",
+    "use_B_ions",
+    "use_C_ions",
+    "use_X_ions",
+    "use_Y_ions",
+    "use_Z_ions",
+    "use_NL_ions",
+    // Output
+    "output_sqtfile",
+    "output_txtfile",
+    "output_pepxmlfile",
+    "output_percolatorfile",
+    "output_outfiles",
+    "print_expect_score",
+    "num_output_lines",
+    "show_fragment_ions",
+    "sample_enzyme_number",
+    // mzXML/mzML parameters
+    "scan_range",
+    "precursor_charge",
+    "override_charge",
+    "ms_level",
+    "activation_method",
+    // Misc. parameters
+    "digest_mass_range",
+    "num_results",
+    "skip_researching",
+    "max_fragment_charge",
+    "max_precursor_charge",
+    "nucleotide_reading_frame",
+    "clip_nterm_methionine",
+    "spectrum_batch_size",
+    "decoy_prefix",
+    "output_suffix",
+    "mass_offsets",
+    // Spectral processing
+    "minimum_peaks",
+    "minimum_intensity",
+    "remove_precursor_peak",
+    "remove_precursor_tolerance",
+    "clear_mz_range",
+    // Variable modifications
+    "variable_mod01",
+    "variable_mod02",
+    "variable_mod03",
+    "variable_mod04",
+    "variable_mod05",
+    "variable_mod06",
+    "variable_mod07",
+    "variable_mod08",
+    "variable_mod09",
+    "max_variable_mods_in_peptide",
+    "require_variable_mod",
+    // Static modifications
+    "add_Cterm_peptide",
+    "add_Nterm_peptide",
+    "add_Cterm_protein",
+    "add_Nterm_protein",
+    "add_A_alanine",
+    "add_B_user_amino_acid",
+    "add_C_cysteine",
+    "add_D_aspartic_acid",
+    "add_E_glutamic_acid",
+    "add_F_phenylalanine",
+    "add_G_glycine",
+    "add_H_histidine",
+    "add_I_isoleucine",
+    "add_J_user_amino_acid",
+    "add_K_lysine",
+    "add_L_leucine",
+    "add_M_methionine",
+    "add_N_asparagine",
+    "add_O_ornithine",
+    "add_P_proline",
+    "add_Q_glutamine",
+    "add_R_arginine",
+    "add_S_serine",
+    "add_T_threonine",
+    "add_U_selenocysteine",
+    "add_V_valine",
+    "add_W_tryptophan",
+    "add_X_user_amino_acid",
+    "add_Y_tyrosine",
+    "add_Z_user_amino_acid",
+    // param-medic
+    "pm-min-precursor-mz",
+    "pm-max-precursor-mz",
+    "pm-min-frag-mz",
+    "pm-max-frag-mz",
+    "pm-min-scan-frag-peaks",
+    "pm-max-precursor-delta-ppm",
+    "pm-charge",
+    "pm-top-n-frag-peaks",
+    "pm-pair-top-n-frag-peaks",
+    "pm-min-common-frag-peaks",
+    "pm-max-scan-separation",
+    "pm-min-peak-pairs"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command outputs
+ */
+vector< pair<string, string> > CometApplication::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("comet.target.txt",
+    "a tab-delimited text file containing the target PSMs. See <a href=\""
+    "../file-formats/txt-format.html\">"
+    "txt file format</a> for a list of the fields."));
+  outputs.push_back(make_pair("comet.params.txt",
+    "a file containing the name and value of all parameters/options for the "
+    "current operation. Not all parameters in the file may have been used in "
+    "the operation. The resulting file can be used with the --parameter-file "
+    "option for other crux programs."));
+  outputs.push_back(make_pair("comet.log.txt",
+    "a log file containing a copy of all messages that were printed to "
+    "standard error."));
+  return outputs;
+}
+
+COMMAND_T CometApplication::getCommand() const {
+  return COMET_COMMAND;
+}
+
+/**
+ * \returns whether the application needs the output directory or not. (default false).
+ */
+bool CometApplication::needsOutputDirectory() const {
+  return true;
+}
+
+void CometApplication::processParams() {
+  const string varModPrefix = "variable_mod0";
+  const string varModEmptyDefault = "0.0 null 0 4 -1 0 0";
+  for (int i = 1; i <= 9; i++) {
+    string mod = varModPrefix + StringUtils::ToString(i);
+    if (Params::GetString(mod).empty()) {
+      Params::Set(mod, varModEmptyDefault);
+    }
+  }
+  // run param-medic?
+  const string autoPrecursor = Params::GetString("auto_peptide_mass_tolerance");
+  const string autoFragment = Params::GetString("auto_fragment_bin_tol");
+  if (autoPrecursor != "false" || autoFragment != "false") {
+    if (autoPrecursor != "false" && Params::GetInt("peptide_mass_units") != 2) {
+      carp(CARP_FATAL, "Automatic peptide mass tolerance detection is only supported with ppm "
+                       "units. Please rerun with either auto_peptide_mass_tolerance set to 'false' "
+                       "or peptide_mass_units set to '2'.");
+    }
+    ParamMedicErrorCalculator errCalc;
+    errCalc.processFiles(Params::GetStrings("input spectra"));
+    string precursorFailure, fragmentFailure;
+    double precursorSigmaPpm = 0;
+    double fragmentSigmaPpm = 0;
+    double fragmentSigmaTh = 0;
+    double precursorPredictionPpm = 0;
+    double fragmentPredictionPpm = 0;
+    double fragmentPredictionTh = 0;
+    errCalc.calcMassErrorDist(&precursorFailure, &fragmentFailure,
+                              &precursorSigmaPpm, &fragmentSigmaPpm,
+                              &precursorPredictionPpm, &fragmentPredictionTh);
+
+    if (autoPrecursor != "false") {
+      if (precursorFailure.empty()) {
+        carp(CARP_INFO, "precursor ppm standard deviation: %f", precursorSigmaPpm);
+        carp(CARP_INFO, "Precursor error estimate (ppm): %.2f", precursorPredictionPpm);
+        Params::Set("peptide_mass_tolerance", precursorPredictionPpm);
+      } else {
+        carp(autoPrecursor == "fail" ? CARP_FATAL : CARP_ERROR,
+             "failed to calculate precursor error: %s", precursorFailure.c_str());
+      }
+    }
+    if (autoFragment != "false") {
+      if (fragmentFailure.empty()) {
+        carp(CARP_INFO, "fragment standard deviation (ppm): %f", fragmentSigmaPpm);
+        carp(CARP_INFO, "Fragment bin size estimate (Th): %.4f", fragmentPredictionTh);
+        Params::Set("fragment_bin_tol", fragmentPredictionTh);
+      } else {
+        carp(autoFragment == "fail" ? CARP_FATAL : CARP_ERROR,
+             "failed to calculate fragment error: %s", fragmentFailure.c_str());
+      }
+    }
+  }
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/CometApplication.h b/src/app/CometApplication.h
new file mode 100644
index 0000000..647fef0
--- /dev/null
+++ b/src/app/CometApplication.h
@@ -0,0 +1,102 @@
+/**
+ * \file CruxHardklorApplication.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 4 November 2011
+ * \brief Interface for calling hardklor.
+ *****************************************************************************/
+#ifndef COMETAPPLICATION_H
+#define COMETAPPLICATION_H
+
+#include "CruxApplication.h"
+#include "CometSearch/CometSearchManager.h"
+#include <string>
+#include <fstream>
+#include <iostream>
+
+class CometApplication: public CruxApplication {
+
+ protected:
+  CometSearchManager searchManager_;
+
+  void setString(const std::string& param);
+  void setInt(const std::string& param);
+  void setIntRange(const std::string& param);
+  void setDouble(const std::string& param);
+  void setDoubleRange(const std::string& param);
+  void setDoubleVector(const std::string& param);
+  void setVarMod(const std::string& param);
+  void setEnzyme(const std::string& param,
+                 const std::string& searchParam,
+                 const std::string& sampleParam,
+                 const std::string& missedCleavageParam);
+
+ public:
+
+  /**
+   * \returns a blank CometApplication object
+   */
+  CometApplication();
+
+  /**
+   * Destructor
+   */
+  ~CometApplication();
+
+  /**
+   * main method for CometApplication
+   */
+  virtual int main(int argc, char** argv);
+
+  int main(const std::vector<std::string>& input_files);
+
+  /**
+   * \returns the command name for CometApplication
+   */
+  virtual std::string getName() const;
+
+  /**
+   * \returns the description for CometApplication
+   */
+  virtual std::string getDescription() const;
+
+  /**
+   * \returns the command arguments
+   */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+   * \returns the command options
+   */
+  virtual std::vector<std::string> getOptions() const;
+
+  /**
+   * \returns the command outputs
+   */
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+  virtual COMMAND_T getCommand() const;
+
+  /**
+   * \returns whether the application needs the output directory or not. (default false).
+   */
+  virtual bool needsOutputDirectory() const;
+
+  virtual void processParams();
+
+  /**
+   * Sets the parameters for the Comet application using the crux parameters
+   */
+  void setCometParameters(
+    const std::vector<std::string>& spec_files,
+    std::vector<InputFileInfo*>& pvInputFiles ///<vector of input spectra files
+    );
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/ComputeQValues.cpp b/src/app/ComputeQValues.cpp
new file mode 100644
index 0000000..2628675
--- /dev/null
+++ b/src/app/ComputeQValues.cpp
@@ -0,0 +1,275 @@
+/**
+ * \file ComputeQValues.cpp
+ * \brief Object for calling compute-q-values
+ *****************************************************************************/
+#include "ComputeQValues.h"
+#include "io/OutputFiles.h"
+#include "util/Params.h"
+#include "PosteriorEstimator.h"
+
+
+using namespace std;
+
+#ifdef _MSC_VER
+// The Microsoft C++ compiler has trouble resolving the proper virtual
+// function call when the STL make_pair is combined with the STL ptr_fun.
+// They promise to fix this a later version, but until then we create our own wrapper
+// for this use of make_pair.
+pair<double, bool> make_pair(double db, bool b);
+#endif
+
+/**
+ * \returns a blank ComputeQValues object
+ */
+ComputeQValues::ComputeQValues() {
+
+}
+
+/**
+ * Destructor
+ */
+ComputeQValues::~ComputeQValues() {
+}
+
+/**
+ * main method for ComputeQValues
+ */
+int ComputeQValues::main(int argc, char** argv) {
+  vector<string> input_files = Params::GetStrings("target input");  
+
+  if (Params::GetBool("list-of-files")) {
+    get_files_from_list(input_files[0], input_files);
+  }
+  return main(input_files);
+}
+
+int ComputeQValues::main(const vector<string>& input_files) {
+  // Prepare the output files.
+ 
+  return 0;
+}
+
+/**
+ * Compute posterior error probabilities (PEP) from the given target
+ * and decoy scores.
+ * \returns A newly allocated array of PEP for the target scores
+ * sorted.
+ */
+
+#ifdef _MSC_VER
+// The Microsoft 10.0 C++ compiler has trouble resolving the proper virtual
+// function call when the STL make_pair is combined with the STL ptr_fun.
+// They promise to fix this in v11, but until then we create our own wrapper
+// for this use of make_pair. (See corresponding ifdef block in compute_PEP)
+pair<double, bool> make_pair(double db, bool b) {
+  return std::pair<double, bool>(db, b);
+}
+#endif
+double* ComputeQValues::compute_PEP(double* target_scores, ///< scores for target matches
+                        int num_targets,       ///< size of target_scores
+                        double* decoy_scores,  ///< scores for decoy matches
+                        int num_decoys,         ///< size of decoy_scores
+                        bool ascending ///< are the scores ascending or descending
+) {
+  if (target_scores == NULL || decoy_scores == NULL || num_targets == 0 || num_decoys == 0) {
+    carp(CARP_FATAL, "Cannot compute PEP without target or decoy scores.");
+  }
+//  pi0 = estimate_pi0(target_scores, num_targets, decoy_scores, num_decoys, ascending);
+
+  // put all of the scores in a single vector of pairs: score, is_target
+  vector<pair<double, bool> > score_labels;
+
+  transform(target_scores, target_scores + num_targets,
+            back_inserter(score_labels),
+            bind2nd(ptr_fun<double, bool, pair<double, bool> >(make_pair), true));
+  transform(decoy_scores, decoy_scores + num_decoys,
+            back_inserter(score_labels),
+            bind2nd(ptr_fun<double, bool, pair<double, bool> >(make_pair), false));
+
+  // sort them 
+  if (ascending) {
+    sort(score_labels.begin(), score_labels.end());
+    PosteriorEstimator::setReversed(true);
+  } else {
+    sort(score_labels.begin(), score_labels.end(),
+       greater<pair<double, bool> > ());  
+  }
+  // get p-values
+  vector<double> pvals;
+  PosteriorEstimator::getPValues(score_labels, pvals);
+  
+  // estimate pi0
+  double pi0 = PosteriorEstimator::estimatePi0(pvals);
+
+  // estimate PEPs
+  vector<double> PEP_vector;
+
+  PosteriorEstimator::estimatePEP(score_labels,
+    true, // usePi0
+    pi0, PEP_vector, 
+    true);  // include decoy PEPs
+
+  // now score_labels and PEPs are similarly sorted
+
+  // pull out the PEPs in the order that the scores were given
+  double* PEP_array = new double[PEP_vector.size()];
+
+  for (int target_idx = 0; target_idx < num_targets; target_idx++) {
+    // the score to return next    
+    double curr_target_score = target_scores[target_idx];
+
+    // find its position in score_labels
+    vector< pair<double, bool> >::iterator found_score_pos;
+    if (ascending) {
+      found_score_pos 
+        = lower_bound(score_labels.begin(), score_labels.end(), 
+                      make_pair(curr_target_score, true));
+    } else {
+      found_score_pos 
+        = lower_bound(score_labels.begin(), score_labels.end(), 
+                    make_pair(curr_target_score, true),
+                    greater<pair<double, bool> >()); 
+    }
+
+    size_t found_index = distance(score_labels.begin(), found_score_pos);
+
+    // pull out the PEP at the same position in PEP_vector
+    PEP_array[target_idx] = PEP_vector[found_index];
+  }
+
+  return PEP_array;
+}
+
+/**
+ * \returns the command name for ComputeQValues
+ */
+string ComputeQValues::getName() const {
+  return "assign-confidence";
+}
+
+/**
+ * \returns the description for ComputeQValues
+ */
+string ComputeQValues::getDescription() const {
+  return
+    "[[nohtml:Assign two types of statistical confidence measures (q-values "
+    "and posterior error probabilities) to each PSM in a given set.]]"
+    "[[html:<p>Given target and decoy scores, estimate a q-value for each "
+    "target score. The q-value is analogous to a p-value but incorporates "
+    "false discovery rate multiple testing correction. The q-value associated "
+    "with a score threshold T is defined as the minimal false discovery rate "
+    "(FDR) at which a score of T is deemed significant. In this setting, the "
+    "q-value accounts for the fact that we are analyzing a large collection of "
+    "scores. For confidence estimation afficionados, please note that this "
+    "definition of \"q-value\" is independent of the notion of \"positive FDR\" "
+    "as defined in (Storey <em>Annals of Statistics</em> 31:2013-2015:2003).</p>"
+    "<p>To estimate FDRs, <code>assign-confidence</code> uses one of two "
+    "different procedures. Both require that the input contain both target and "
+    "decoy scores. The default, target-decoy competition (TDC) procedure is "
+    "described in this article:</p><blockquote>Josh E. Elias and Steve P. Gygi. "
+    "\"Target-decoy search strategy for increased confidence in large-scale "
+    "protein identifications by mass spectrometry.\" <em>Nature Methods</em>. "
+    "4(3):207-14, 2007.</blockquote><p>Note that <code>assign-confidence</code> "
+    "implements a variant of the protocol proposed by Elias and Gygi: rather "
+    "than reporting a list that contains both targets and decoys, <code>"
+    "assign-confidence</code> reports only the targets. The FDR estimate is "
+    "adjusted accordingly (by dividing by 2).</p><p>The alternative, <em>"
+    "mix-max</em> procedure is described in this article:</p><blockquote>Uri "
+    "Keich, Attila Kertesz-Farkas and William Stafford Noble. \"An improved "
+    "false discovery rate estimation procedure for shotgun proteomics.\" "
+    "Submitted.</blockquote><p>Note that the mix-max procedure requires as "
+    "input calibrated scores, such as Comet E-values or p-values produced "
+    "using Tide-s <code>exact-p-value</code> option.</p>"
+    "<p>The mix-max procedure requires that scores "
+    "are reported from separate target and decoy searches. Thus, this approach "
+    "is incompatible with a search that is run using the <code>--concat T"
+    "</code> option to <code>tide-search</code> or the <code>--decoy_search 2"
+    "</code> option to <code>comet</code>. On the other hand, the TDC "
+    "procedure can take as input "
+    "searches conducted in either mode (concatenated or separate). If given "
+    "separate search results and asked to do TDC estimation, <code>"
+    "assign-confidence</code> will carry out the target-decoy competition as "
+    "part of the confidence estimation procedure.</p><p>In each case, the "
+    "estimated FDRs are converted to q-values by sorting the scores then "
+    "taking, for each score, the minimum of the current FDR and all of the FDRs "
+    "below it in the ranked list.</p><p>A primer on multiple testing correction "
+    "can be found here:</p><blockquote>William Stafford Noble. <a href=\""
+    "http://www.nature.com/nbt/journal/v27/n12/full/nbt1209-1135.html\">\"How "
+    "does multiple testing correction work?\"</a> <em>Nature Biotechnology</em>. "
+    "27(12):1135-1137, 2009.</blockquote>]]";
+}
+
+/**
+ * \returns the command arguments
+ */
+vector<string> ComputeQValues::getArgs() const {
+  string arr[] = {
+    "target input+"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command options
+ */
+vector<string> ComputeQValues::getOptions() const {
+  string arr[] = {
+    "estimation-method",
+    "decoy-prefix",
+    "score",
+    "sidak",
+    "peptide-level",
+    "verbosity",
+    "parameter-file",
+    "overwrite",
+    "output-dir",
+    "list-of-files",
+    "fileroot"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command outputs
+ */
+vector< pair<string, string> > ComputeQValues::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("assign-confidence.target.txt",
+    "a <a href=\"../file-formats/txt-format.html\">tab-delimited text file</a> that contains the "
+    "targets, sorted by score. The file will contain one new column, named "
+    "\"<method> q-value\", where <method> is either \"tdc\" or \"mix-max\"."));
+  outputs.push_back(make_pair("assign-confidence.log.txt",
+    "a log file containing a copy of all messages that were printed to stderr."));
+  outputs.push_back(make_pair("assign-confidence.params.txt",
+    "a file containing the name and value of all parameters/options for the "
+    "current operation. Not all parameters in the file may have been used in "
+    "the operation. The resulting file can be used with the --parameter-file "
+    "option for other crux programs."));
+  return outputs;
+}
+
+/**
+ * \returns the filestem for ComputeQValues
+ */
+string ComputeQValues::getFileStem() const {
+  return "assign-confidence";
+}
+
+COMMAND_T ComputeQValues::getCommand() const {
+  return QVALUE_COMMAND;
+}
+
+/**
+ * \returns whether the application needs the output directory or not.
+ */
+bool ComputeQValues::needsOutputDirectory() const {
+  return true;
+}
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/ComputeQValues.h b/src/app/ComputeQValues.h
new file mode 100644
index 0000000..ab127bf
--- /dev/null
+++ b/src/app/ComputeQValues.h
@@ -0,0 +1,98 @@
+/**
+ * \file ComputeQValues.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 6 December 2010
+ * \brief Object for running compute-q-values
+ *****************************************************************************/
+#ifndef ComputeQValues_H
+#define ComputeQValues_H
+
+#include "CruxApplication.h"
+
+#include <string>
+
+class ComputeQValues: public CruxApplication {
+
+ public:
+
+  /**
+   * \returns a blank ComputeQValues object
+   */
+  ComputeQValues();
+  
+  /**
+   * Destructor
+   */
+  ~ComputeQValues();
+
+  /**
+   * main method for ComputeQValues
+   */
+  virtual int main(int argc, char** argv);
+
+  int main(const std::vector<std::string>& input_files);
+
+  /**
+   * Compute posterior error probabilities (PEP) from the given target
+   * and decoy scores.
+   * \returns A newly allocated array of PEP for the target scores
+   * sorted.
+   */
+  static double* compute_PEP(double* target_scores, ///< scores for target matches
+                             int num_targets,       ///< size of target_scores
+                             double* decoy_scores,  ///< scores for decoy matches
+                             int num_decoys,       ///< size of decoy_scores
+                             bool ascending = false); ///< are the scores ascending/descending?
+
+  /**
+   * \returns the command name for ComputeQValues
+   */
+  virtual std::string getName() const;
+
+  /**
+   * \returns the description for ComputeQValues
+   */
+  virtual std::string getDescription() const;
+
+  /**
+   * \returns the command arguments
+   */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+   * \returns the command options
+   */
+  virtual std::vector<std::string> getOptions() const;
+
+  /**
+   * \returns the command outputs
+   */
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+  /**
+   * \returns the filestem for ComputeQValues
+   */
+  virtual std::string getFileStem() const;
+
+  /**
+   * \returns the enum of the application, default MISC_COMMAND
+   */
+  virtual COMMAND_T getCommand() const;
+
+  /**
+   * \returns whether the application needs the output directory or not.
+   */
+  virtual bool needsOutputDirectory() const;
+
+
+};
+
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/ComputeQValuesLegacy.h b/src/app/ComputeQValuesLegacy.h
new file mode 100644
index 0000000..fc7aa9b
--- /dev/null
+++ b/src/app/ComputeQValuesLegacy.h
@@ -0,0 +1,46 @@
+/**
+ *
+ */
+#ifndef ComputeQValuesLegacy_H
+#define ComputeQValuesLegacy_H
+
+#include "ComputeQValues.h"
+
+class ComputeQValuesLegacy : public ComputeQValues {
+
+ public:
+  /**
+   * \returns A blank ComputeQValues object.
+   */
+  ComputeQValuesLegacy() {}
+
+  /**
+   * Destructor
+   */
+  ~ComputeQValuesLegacy() {}
+
+  /**
+   * \returns The command name for ComputeQValues.
+   */
+  virtual std::string getName() const {
+    return "compute-q-values";
+  }
+  /**
+   * Exclude this application from the usage statement.
+   */
+  virtual bool hidden() const {
+    return true;
+  }
+};
+
+
+
+#endif //  ComputeQValuesLegacy_H
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/CreateDocs.cpp b/src/app/CreateDocs.cpp
new file mode 100644
index 0000000..e42da09
--- /dev/null
+++ b/src/app/CreateDocs.cpp
@@ -0,0 +1,598 @@
+#include <algorithm>
+#include <cctype>
+#include <functional>
+#include <fstream>
+#include <iostream>
+
+#include "CreateDocs.h"
+#include "CruxApplicationList.h"
+#include "util/FileUtils.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+
+#include "xlink/xlink_assign_ions.h"
+#include "xlink/xhhc_score_peptide_spectrum.h"
+#include "qranker-barista/Barista.h"
+#include "ComputeQValues.h"
+#include "CruxBullseyeApplication.h"
+#include "CruxHardklorApplication.h"
+#include "ExtractColumns.h"
+#include "ExtractRows.h"
+#include "GeneratePeptides.h"
+#include "GetMs2Spectrum.h"
+#include "MakePinApplication.h"
+#include "ParamMedicApplication.h"
+#include "PercolatorApplication.h"
+#include "Pipeline.h"
+#include "PredictPeptideIons.h"
+#include "PrintProcessedSpectra.h"
+#include "PSMConvertApplication.h"
+#include "qranker-barista/QRanker.h"
+#include "ReadTideIndex.h"
+#include "xlink/SearchForXLinks.h"
+#include "SortColumn.h"
+#include "SpectralCounts.h"
+#include "StatColumn.h"
+#include "TideIndexApplication.h"
+#include "TideSearchApplication.h"
+#include "CometApplication.h"
+#include "app/CascadeSearchApplication.h"
+#include "app/AssignConfidenceApplication.h"
+#include "app/SubtractIndexApplication.h"
+
+using namespace std;
+
+CreateDocs::CreateDocs() {
+}
+
+CreateDocs::~CreateDocs() {
+}
+
+int CreateDocs::main(int argc, char** argv) {
+  CruxApplicationList apps("crux");
+  apps.add(new AssignConfidenceApplication());
+  apps.add(new Barista());
+  apps.add(new CascadeSearchApplication());  
+  apps.add(new CometApplication());
+  apps.add(new CreateDocs());
+  apps.add(new CruxBullseyeApplication());
+  apps.add(new CruxHardklorApplication());
+  apps.add(new ExtractColumns());
+  apps.add(new ExtractRows());
+  apps.add(new GeneratePeptides());
+  apps.add(new GetMs2Spectrum());
+  apps.add(new MakePinApplication());
+  apps.add(new ParamMedicApplication());
+  apps.add(new PercolatorApplication());
+  apps.add(new PipelineApplication());
+  apps.add(new PredictPeptideIons());
+  apps.add(new PrintProcessedSpectra());
+  apps.add(new PSMConvertApplication());
+  apps.add(new QRanker());
+  apps.add(new ReadTideIndex());
+  apps.add(new SearchForXLinks());
+  apps.add(new SortColumn());
+  apps.add(new SpectralCounts());
+  apps.add(new StatColumn());
+  apps.add(new SubtractIndexApplication());
+  apps.add(new TideIndexApplication());
+  apps.add(new TideSearchApplication());
+  apps.add(new XLinkAssignIons());
+  apps.add(new XLinkScoreSpectrum());
+  
+  string targetApp = Params::GetString("tool-name");
+  if (targetApp == "list") {
+    // List the applications available for create-docs
+    for (vector<CruxApplication*>::const_iterator i = apps.begin(); i != apps.end(); i++) {
+      cout << (*i)->getName() << endl;
+    }
+  } else if (targetApp == "default-params") {
+    // Write a default parameter file
+    cout << "########################################"
+            "########################################" << endl
+         << "# Sample parameter file" << endl
+         << "#" << endl
+         << "# On each line, anything after a '#' will be ignored." << endl
+         << "# The format is:" << endl
+         << "#" << endl
+         << "# <parameter-name>=<value>" << endl
+         << "#" << endl
+         << "########################################"
+            "########################################" << endl
+         << endl;
+    Params::Write(&cout, true);
+  } else if (targetApp == "check-params") {
+    // Check for issues with parameters
+    checkParams(&apps);
+  } else if (targetApp == "param-table") {
+    // Make a table of parameters x commands.
+    makeParamTable(&apps);
+  } else {
+    CruxApplication* app = apps.find(targetApp);
+    if (app == NULL) {
+      carp(CARP_FATAL, "Invalid application '%s'", targetApp.c_str());
+    }
+    generateToolHtml(&cout, app);
+  }
+
+  return 0;
+}
+
+void CreateDocs::checkParams(const CruxApplicationList* apps) {
+  carp(CARP_INFO, "Running parameter validity checks...");
+  for (map<string, Param*>::const_iterator i = Params::BeginAll();
+       i != Params::EndAll();
+       i++) {
+    Param* param = i->second;
+    string name = param->GetName();
+    bool isArg = param->IsArgument();
+    // Check for unused if passed an application list
+    if (apps) {
+      vector<CruxApplication*> appsUsing;
+      int appArgCount = 0;
+      int appOptionCount = 0;
+      for (vector<CruxApplication*>::const_iterator j = apps->begin();
+           j != apps->end();
+           j++) {
+        vector<string> appArgs = (*j)->getArgs();
+        for (vector<string>::iterator k = appArgs.begin(); k != appArgs.end(); k++) {
+          if (StringUtils::EndsWith(*k, "+")) {
+            *k = k->substr(k->length() - 1);
+          }
+        }
+        vector<string> appOptions = (*j)->getOptions();
+        bool appArg =
+          std::find(appArgs.begin(), appArgs.end(), name) != appArgs.end();
+        bool appOption =
+          std::find(appOptions.begin(), appOptions.end(), name) != appOptions.end();
+        if (!appArg && !appOption) {
+          continue;
+        }
+        string appName = (*j)->getName();
+        appsUsing.push_back(*j);
+        if (appArg) {
+          ++appArgCount;
+          if (!isArg) {
+            carp(CARP_WARNING, "'%s' is an option, but is listed as an argument for '%s'",
+                 name.c_str(), appName.c_str());
+          }
+        }
+        if (appOption) {
+          ++appOptionCount;
+          if (isArg) {
+            carp(CARP_WARNING, "'%s' is an argument, but is listed as an option for '%s'",
+                 name.c_str(), appName.c_str());
+          }
+          if (!Params::IsVisible(name)) {
+            carp(CARP_WARNING, "'%s' is marked as hidden, but is listed as an option for '%s'",
+                 name.c_str(), appName.c_str());
+          }
+        }
+      }
+      if (appArgCount > 0 && appOptionCount > 0) {
+        carp(CARP_WARNING, "'%s' is both an option and an argument", name.c_str());
+      }
+      if (!appsUsing.empty()) {
+        stringstream ss;
+        for (vector<CruxApplication*>::const_iterator j = appsUsing.begin();
+             j != appsUsing.end();
+             j++) {
+          if (j > appsUsing.begin()) {
+            ss << ", ";
+          }
+          ss << (*j)->getName();
+        }
+        carp(CARP_DEBUG, "'%s' is used by: %s", name.c_str(), ss.str().c_str());
+      } else {
+        carp(CARP_WARNING, "No applications are using '%s'", name.c_str());
+      }
+    }
+  }
+}
+
+void CreateDocs::makeParamTable(const CruxApplicationList* apps) {
+  carp(CARP_INFO, "Creating a table of parameters X commands.");
+  cout << "<!DOCTYPE HTML>" << endl
+       << "<html><head><meta charset=\"UTF-8\">" << endl
+       << "<title>Crux parameters</title>" << endl
+       << "<link href=\"../crux.css\" rel=\"styleSheet\" type=\"text/css\">"
+       << "</head>" << endl
+       << "<body><h1>Crux parameters</h1>" << endl
+       << "<table border=\"1\" align=\"center\">" << endl;
+
+  // Print the header row.
+  cout << "<tr><td> </td>";
+  for (vector<CruxApplication*>::const_iterator appIter = apps->begin();
+       appIter != apps->end();
+       appIter++) {
+    cout << "<td>" << (*appIter)->getName() << "</td>";
+  }
+  cout << "</tr>" << endl;
+
+  // Keep track of whether this parameter row has been printed.
+  std::map<const string, bool> isPrinted;
+
+  // Alternate background.
+  bool backgroundIsGrey = true;
+  
+  /*
+   * We use a double loop to print the parameters so that we ensure
+   * that parameters are listed in order of their use by the commands.
+   */ 
+  for (vector<CruxApplication*>::const_iterator appIter1 = apps->begin();
+       appIter1 != apps->end();
+       appIter1++) {
+    vector<string> appOptions1 = (*appIter1)->getOptions();
+    for (vector<string>::const_iterator appOptionIter = appOptions1.begin();
+         appOptionIter != appOptions1.end();
+         appOptionIter++) {
+      if (!isPrinted[*appOptionIter] && Params::IsVisible(*appOptionIter)) {
+        isPrinted[*appOptionIter] = true;
+        if (backgroundIsGrey) {
+          cout << "<tr bgcolor=\"#DEDEDE\">" << endl;
+        } else {
+          cout << "<tr>" << endl;
+        }
+        backgroundIsGrey = !backgroundIsGrey;
+        cout << "<td>" << *appOptionIter << "</td>";
+        for (vector<CruxApplication*>::const_iterator appIter2 = apps->begin();
+             appIter2 != apps->end();
+             appIter2++) {
+
+          vector<string> appOptions = (*appIter2)->getOptions();
+          bool hasOption = std::find(appOptions.begin(), appOptions.end(),
+                   *appOptionIter) != appOptions.end();
+          if (hasOption) {
+            cout << "<td>✓</td>";
+          } else {
+            cout << "<td> </td>";
+          }
+        }
+        cout << "</tr>" << endl;
+      }
+    }
+  }
+  cout << "</table></body></html>" << endl;
+
+  // Check that all parameters were printed.
+  for (vector<const Param*>::const_iterator paramIter = Params::Begin();
+       paramIter != Params::End();
+       paramIter++) {
+    string paramName = (*paramIter)->GetName();
+    if (!isPrinted[paramName] && Params::IsVisible(paramName)) {
+      carp(CARP_WARNING, "Parameter %s was not printed.", paramName.c_str());
+    }
+  }
+  
+}
+
+
+void CreateDocs::generateToolHtml(
+  ostream* outStream,
+  const CruxApplication* application
+) {
+  string doc = TOOL_TEMPLATE;
+  string inputTemplate = TOOL_INPUT_TEMPLATE;
+  string outputTemplate = TOOL_OUTPUT_TEMPLATE;
+  string categoryTemplate = TOOL_OPTION_CATEGORY_TEMPLATE;
+  string optionTemplate = TOOL_OPTION_TEMPLATE;
+
+  string appName = application->getName();
+  string appDescription = application->getDescription();
+  vector<string> args = application->getArgs();
+  vector< pair<string, string> > out = application->getOutputs();
+  vector<string> opts = application->getOptions();
+
+  // Build usage and input strings
+  string usage = "crux " + appName + " [options]";
+  string inputs;
+  for (vector<string>::const_iterator i = args.begin(); i != args.end(); i++) {
+    bool multiArg = StringUtils::EndsWith(*i, "+");
+    string argName = multiArg ? i->substr(0, i->length() - 1) : *i;
+    usage += " <" + argName + ">";
+    if (multiArg) {
+      usage += "+";
+    }
+
+    if (!Params::Exists(argName)) {
+      carp(CARP_FATAL, "Invalid argument '%s' for application '%s'",
+           argName.c_str(), appName.c_str());
+    }
+    string single = inputTemplate;
+    map<string, string> replaceMap;
+    replaceMap["#NAME#"] = !multiArg ? argName : argName + "+";
+    replaceMap["#DESCRIPTION#"] = Params::ProcessHtmlDocTags(Params::GetUsage(argName), true);
+    makeReplacements(&single, replaceMap);
+    inputs += single;
+  }
+  // Build outputs introductory string
+  string outputsIntro;
+  if (application->needsOutputDirectory()) {
+    outputsIntro = "<p>The program writes files to the folder <code>" +
+      Params::GetStringDefault("output-dir") + "</code> by default. The name "
+      "of the output folder can be set by the user using the <code>--output-dir"
+      "</code> option. The following files will be created:\n";
+  }
+  // Build outputs string
+  string outputs;
+  for (vector< pair<string, string> >::const_iterator i = out.begin(); i != out.end(); i++) {
+    string single = outputTemplate;
+    map<string, string> replaceMap;
+    replaceMap["#NAME#"] = i->first;
+    replaceMap["#DESCRIPTION#"] = Params::ProcessHtmlDocTags(i->second, true);
+    makeReplacements(&single, replaceMap);
+    outputs += single;
+  }
+  // Build options string
+  string options;
+  for (int i = opts.size() - 1; i >= 0; i--) {
+    if (!Params::IsVisible(opts[i])) {
+      opts.erase(opts.begin() + i);
+    }
+  }
+  vector< pair< string, vector<string> > > categories = Params::GroupByCategory(opts); 
+  for (vector< pair< string, vector<string> > >::const_iterator i = categories.begin();
+       i != categories.end();
+       i++) {
+    string categoryName = i->first;
+    if (categoryName.empty()) {
+      // Give category to all uncategorized options
+      categoryName = appName + " options";
+    }
+    string optionSubset;
+    const vector<string>& items = i->second;
+    for (vector<string>::const_iterator j = items.begin(); j != items.end(); j++) {
+      if (!Params::Exists(*j)) {
+        carp(CARP_FATAL, "Invalid option '%s' for application '%s'",
+             j->c_str(), appName.c_str());
+      }
+      string single = optionTemplate;
+      map<string, string> replaceMap;
+      replaceMap["#NAME#"] = *j;
+      replaceMap["#DESCRIPTION#"] = Params::ProcessHtmlDocTags(Params::GetUsage(*j), true);
+      string acceptedValues = Params::GetAcceptedValues(*j);
+      acceptedValues = StringUtils::Replace(acceptedValues, "<", "<");
+      acceptedValues = StringUtils::Replace(acceptedValues, ">", ">");
+      replaceMap["#VALUES#"] = acceptedValues;
+      string defaultOutput = Params::GetStringDefault(*j);
+      replaceMap["#DEFAULT#"] = !defaultOutput.empty() ? defaultOutput : "<empty>";
+      makeReplacements(&single, replaceMap);
+      optionSubset += single;
+    }
+
+    string single = categoryTemplate;
+    map<string, string> replaceMap;
+    replaceMap["#NAME#"] = categoryName;
+    replaceMap["#OPTIONS#"] = optionSubset;
+    makeReplacements(&single, replaceMap);
+    options += single;
+  }
+  if (options.empty()) {
+    options = TOOL_NO_OPTIONS_TEMPLATE;
+  }
+
+  map<string, string> replacements;
+  replacements["#NAME#"] = appName;
+  replacements["#DESCRIPTION#"] = Params::ProcessHtmlDocTags(appDescription, true);
+  replacements["#USAGE#"] = usage;
+  replacements["#INPUTS#"] = inputs;
+  replacements["#OUTPUTSINTRODUCTION#"] = outputsIntro;
+  replacements["#OUTPUTS#"] = outputs;
+  replacements["#OPTIONS#"] = options;
+  makeReplacements(&doc, replacements);
+  *outStream << doc;
+}
+
+void CreateDocs::makeReplacements(
+  string* templateStr,
+  const map<string, string>& replacements
+) {
+  const string OPEN_TAG = "<!--";
+  const string CLOSE_TAG = "-->";
+
+  size_t idx, end_idx = 0;
+  while ((idx = templateStr->find(OPEN_TAG, end_idx)) != string::npos) {
+    if (idx > templateStr->length()) {
+      break;
+    }
+    idx += OPEN_TAG.length();
+    end_idx = templateStr->find(CLOSE_TAG, idx);
+    if (end_idx == string::npos) {
+      break;
+    }
+    string comment = templateStr->substr(idx, end_idx - idx);
+    comment.erase(comment.begin(),
+                  find_if(comment.begin(), comment.end(),
+                  not1(ptr_fun<int, int>(isspace))));
+    comment.erase(find_if(comment.rbegin(), comment.rend(),
+                  not1(ptr_fun<int, int>(isspace))).base(), comment.end());
+    map<string, string>::const_iterator iter = replacements.find(comment);
+    if (iter == replacements.end()) {
+      continue;
+    }
+    idx -= OPEN_TAG.length();
+    end_idx += CLOSE_TAG.length();
+    templateStr->replace(idx, end_idx - idx, iter->second);
+    end_idx = idx + iter->second.length();
+  }
+}
+
+string CreateDocs::getName() const {
+  return "create-docs";
+}
+
+string CreateDocs::getDescription() const {
+  return "[[html:<p>]]This command prints to standard output an HTML formatted version of the documentation for a specified Crux command.[[html:</p>]]";
+}
+
+vector<string> CreateDocs::getArgs() const {
+  string arr[] = {
+    "tool-name"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector<string> CreateDocs::getOptions() const {
+  return vector<string>();
+}
+
+vector< pair<string, string> > CreateDocs::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("stdout",
+    "The command prints to standard output the HTML documentation for the specified Crux tool."));
+  return outputs;
+}
+
+bool CreateDocs::needsOutputDirectory() const {
+  return false;
+}
+
+bool CreateDocs::hidden() const {
+  return true;
+}
+
+const string CreateDocs::TOOL_TEMPLATE =
+  "<!DOCTYPE html>\n"
+  "<html>\n"
+  "<head>\n"
+  "<title><!-- #NAME# --></title>\n"
+  "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n"
+  "<link rel=\"stylesheet\" type=\"text/css\" href=\"../styles.css\">\n"
+  "<script type=\"text/javascript\"\n"
+  "  src=\"http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML\">\n"
+  "</script>\n"
+  "<script type=\"text/javascript\">\n"
+  "  MathJax.Hub.Config({jax: ['input/TeX','output/HTML-CSS'], displayAlign: 'left'});\n"
+  "</script>\n"
+  "<script type=\"text/javascript\">\n"
+  "  var _gaq = _gaq || [];\n"
+  "  _gaq.push(['_setAccount', 'UA-26136956-1']);\n"
+  "  _gaq.push(['_trackPageview']);\n"
+  "  (function() {\n"
+  "    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n"
+  "    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n"
+  "    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n"
+  "  })();\n"
+  "</script>\n"
+  "<script src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js\"></script>\n"
+  "<script type=\"text/javascript\">\n"
+  "  // Main Menu\n"
+  "  $( document ).ready(function() {\n"
+  "      var pull 		= $('.btn');\n"
+  "        menu 		= $('nav ul');\n"
+  "        menuHeight	= menu.height();\n"
+  "      $(pull).on('click', function(e) {\n"
+  "        e.preventDefault();\n"
+  "        menu.slideToggle();\n"
+  "      });\n"
+  "      $(window).resize(function(){\n"
+  "          var w = $(window).width();\n"
+  "          if(w > 320 && menu.is(':hidden')) {\n"
+  "            menu.removeAttr('style');\n"
+  "          } \n"
+  "      });\n"
+  "  });\n"
+  "</script>\n"
+  "</head>\n"
+  "<body>\n"
+  "  <div class=\"page-wrap\">\n"
+  "    <nav>\n"
+  "      <div class=\"btn\">\n"
+  "        </div>\n"
+  "        <img src=\"../images/crux-logo.png\" id=\"logo\"></a>\n"
+  "      <ul id=\"navitems\">\n"
+  "          <li><a href=\"../index.html\">Home</a></li>\n"
+  "          <li><a href=\"../download.html\">Download</a></li>\n"
+  "          <li><a href=\"../fileformats.html\">File Formats</a></li>\n"
+  "            <li><a href=\"http://groups.google.com/group/crux-users\">Contact</a></li> <!--Link to google support board-->\n"
+  "        </ul>\n"
+  "    </nav>\n"
+  "    <div id=\"content\" class=\"autogenerated\">\n"
+  "    <!-- START CONTENT -->\n"
+  "<h1><!-- #NAME# --></h1>\n"
+  "<h2>Usage:</h2>\n"
+  "<p><code><!-- #USAGE# --></code></p>\n"
+  "<h2>Description:</h2>\n"
+  "<!-- #DESCRIPTION# -->\n"
+  "<h2>Input:</h2>\n"
+  "<ul>\n"
+  "<!-- #INPUTS# --></ul>\n"
+  "<h2>Output:</h2>\n"
+  "<!-- #OUTPUTSINTRODUCTION# -->"
+  "<ul>\n"
+  "<!-- #OUTPUTS# --></ul>\n"
+  "<h2>Options:</h2>\n"
+  "<ul style=\"list-style-type: none;\">\n"
+  "<!-- #OPTIONS# -->\n"
+  "</ul>\n"
+  "    <!-- END CONTENT -->\n"
+  "    </div>\n"
+  "  </div>\n"
+  "<footer class=\"site-footer\">\n"
+  "  <div id=\"centerfooter\">\n"
+  "    <div class=\"footerimportantlinks\">\n"
+  "      <img src=\"../images/linkicon.png\" style=\"width:16px; height:16px\"><h3>Important links</h3>\n"
+  "      <ul>\n"
+  "        <li><a href=\"../faq.html\">Crux FAQ</a></li>\n"
+  "        <li><a href=\"../glossary.html\">Glossary of terminology</a></li>\n"
+  "        <li><a href=\"http://scholar.google.com/citations?hl=en&user=Rw9S1HIAAAAJ\">Google Scholar profile</a></li>\n"
+  "        <li><a href=\"https://github.com/crux-toolkit/crux-toolkit\">GitHub</a></li>\n"
+  "        <li><a href=\"../release-notes.html\">Release Notes</a></li>\n"
+  "        <li><a href=\"https://mailman1.u.washington.edu/mailman/listinfo/crux-users\" title=\"Receive announcements of new versions\">Join the mailing list</a></li>\n"
+  "        <li><a href=\"http://www.apache.org/licenses/LICENSE-2.0\">Apache license</a></li>\n"
+  "        <li><a href=\"http://groups.google.com/group/crux-users\">Support Board</a></li>\n"
+  "      </ul>\n"
+  "    </div>\n"
+  "    <div class=\"footerimportantlinks tutoriallinks\">\n"
+  "      <img src=\"../images/tutorialicon.png\" style=\"height:16px\"><h3>Tutorials</h3>\n"
+  "      <ul>\n"
+  "        <li><a href=\"../tutorials/install.html\">Installation</a></li>\n"
+  "        <li><a href=\"../tutorials/gettingstarted.html\">Getting started with Crux</a></li>\n"
+  "        <li><a href=\"../tutorials/search.html\">Running a simple search using Tide and Percolator</a></li>\n"
+  "        <li><a href=\"../tutorials/customizedsearch.html\">Customization and search options</a></li>\n"
+  "        <li><a href=\"../tutorials/spectralcounts.html\">Using spectral-counts</a></li>\n"
+  "      </ul>\n"
+  "    </div>\n"
+  "    <div id=\"footertext\">\n"
+  "      <p>\n"
+  "        The original version of Crux was written by Chris Park and Aaron Klammer\n"
+  "        under the supervision\n"
+  "        of <a href=\"http://www.gs.washington.edu/faculty/maccoss.htm\">Prof. Michael\n"
+  "        MacCoss</a>\n"
+  "        and <a href=\"http://noble.gs.washington.edu/~noble\">Prof. William\n"
+  "        Stafford Noble</a> in the Department of Genome Sciences at the\n"
+  "        University of Washington, Seattle.  Website by <a href=\"http://www.yuvalboss.com/\">Yuval Boss</a>. \n"
+  "        <br />The complete list of contributors\n"
+  "        can be found <a href=\"../contributors.html\">here</a>.\n"
+  "        <br />\n"
+  "        <br />\n"
+  "        Maintenance and development of Crux is funded by the <a href=\"https://www.nih.gov/\">National Institutes of Health</a> award P41 GM103533. \n"
+  "      </p>\n"
+  "    </div>\n"
+  "  </div>\n"
+  "</footer>\n"
+  "</body>\n"
+  "</html>";
+
+const string CreateDocs::TOOL_INPUT_TEMPLATE =
+  "  <li><code><!-- #NAME# --></code> – <!-- #DESCRIPTION# --></li>\n";
+
+const string CreateDocs::TOOL_OUTPUT_TEMPLATE =
+  "  <li><code><!-- #NAME# --></code> – <!-- #DESCRIPTION# --></li>\n";
+
+const string CreateDocs::TOOL_OPTION_CATEGORY_TEMPLATE =
+  "<li class=\"nobullet\">\n"
+  "<h3><!-- #NAME# --></h3>\n"
+  "<ul>\n"
+  "<!-- #OPTIONS# --></ul>\n"
+  "</li>\n";
+
+const string CreateDocs::TOOL_NO_OPTIONS_TEMPLATE =
+  "<li class=\"nobullet\">\n"
+  "<p>This command does not support any optional parameters.</p>\n"
+  "</li>\n";
+
+const string CreateDocs::TOOL_OPTION_TEMPLATE =
+  "  <li class=\"nobullet\"><code>--<!-- #NAME# --> <!-- #VALUES# --></code> – "
+  "<!-- #DESCRIPTION# --> Default = <code><!-- #DEFAULT# --></code>.</li>\n";
+
diff --git a/src/app/CreateDocs.h b/src/app/CreateDocs.h
new file mode 100644
index 0000000..5974672
--- /dev/null
+++ b/src/app/CreateDocs.h
@@ -0,0 +1,52 @@
+#ifndef CREATEDOCS_H
+#define CREATEDOCS_H
+
+#include <map>
+#include <ostream>
+#include <string>
+#include <vector>
+
+#include "CruxApplicationList.h"
+
+class CreateDocs : public CruxApplication {
+ public:
+  CreateDocs();
+  virtual ~CreateDocs();
+
+  virtual int main(int argc, char** argv);
+  virtual std::string getName() const;
+  virtual std::string getDescription() const;
+  virtual std::vector<std::string> getArgs() const;
+  virtual std::vector<std::string> getOptions() const;
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+  virtual bool needsOutputDirectory() const;
+  virtual bool hidden() const;
+
+ protected:
+  void checkParams(const CruxApplicationList* apps = NULL);
+
+  void makeParamTable(const CruxApplicationList* apps);
+  void generateToolHtml(std::ostream* outStream, const CruxApplication* application);
+
+  void makeReplacements(
+    std::string* templateStr,
+    const std::map<std::string, std::string>& replacements
+  );
+
+  static const std::string TOOL_TEMPLATE;
+  static const std::string TOOL_INPUT_TEMPLATE;
+  static const std::string TOOL_OUTPUT_TEMPLATE;
+  static const std::string TOOL_OPTION_CATEGORY_TEMPLATE;
+  static const std::string TOOL_NO_OPTIONS_TEMPLATE;
+  static const std::string TOOL_OPTION_TEMPLATE;
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/app/CruxApplication.cpp b/src/app/CruxApplication.cpp
new file mode 100644
index 0000000..2190a8e
--- /dev/null
+++ b/src/app/CruxApplication.cpp
@@ -0,0 +1,245 @@
+/**
+ * \file CruxApplication.cpp
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 6 December 2010
+ * \brief Abstract Object for a CruxApplication
+ *****************************************************************************/
+#include "CruxApplication.h"
+#include "crux_version.h"
+#include "io/carp.h"
+#include "parameter.h"
+#include "util/ArgParser.h"
+#include "util/crux-utils.h"
+#include "util/FileUtils.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+#include "util/GlobalParams.h"
+#include "util/WinCrux.h"
+
+#include <iostream>
+#include <boost/thread.hpp>
+
+using namespace std;
+
+/**
+ * Frees an allocated CruxApplication
+ */
+CruxApplication::~CruxApplication() {
+}
+
+/**
+ * \returns the arguments of the application
+ */
+vector<string> CruxApplication::getArgs() const {
+  return vector<string>();
+}
+
+/**
+ * \returns the options of the application
+ */
+vector<string> CruxApplication::getOptions() const {
+  return vector<string>();
+}
+
+/**
+ * \returns the outputs of the application as name -> description
+ */
+vector< pair<string, string> > CruxApplication::getOutputs() const {
+  return vector< pair<string, string> >();
+}
+
+/**
+ * \returns the file stem of the application, default getName.
+ */
+string CruxApplication::getFileStem() const {
+  return getName();
+}
+
+/**
+ * \returns the enum of the application, default MISC_COMMAND
+ */
+COMMAND_T CruxApplication::getCommand() const {
+  return MISC_COMMAND;
+}
+
+
+bool CruxApplication::needsOutputDirectory() const {
+  return false;
+}
+
+void CruxApplication::initialize(int argc, char** argv) {
+  initializeParams(getName(), getArgs(), getOptions(), argc, argv);
+  processParams();
+  Params::Finalize();
+  GlobalParams::set();
+  if (!Params::GetBool("no-analytics")) {
+    // Post data to Google Analytics using a separate thread
+    boost::thread analytics_thread(postToAnalytics, getName());
+  }
+
+  set_verbosity_level(Params::GetInt("verbosity"));
+
+  carp(CARP_INFO, "Beginning %s.", getName().c_str());
+
+  // Set seed for random number generation 
+  if (Params::GetString("seed") == "time") {
+    time_t seconds; // use current time to seed
+    time(&seconds); // Get value from sys clock and set seconds variable.
+    mysrandom((unsigned)seconds); // Convert seconds to a unsigned int
+  } else {
+    mysrandom(StringUtils::FromString<unsigned>(Params::GetString("seed")));
+  }
+  
+  // Start the timer.
+  wall_clock();
+
+  // Create output directory if appliation needs it.
+  if (needsOutputDirectory()) {
+    // Create output directory 
+    string output_folder = Params::GetString("output-dir");
+    if (create_output_directory(output_folder, Params::GetBool("overwrite")) == -1) {
+      carp(CARP_FATAL, "Unable to create output directory %s.", output_folder.c_str());
+    }
+
+    // Open the log file to record carp messages 
+    open_log_file(getFileStem() + ".log.txt");
+  
+    // Store the host name, start date and time, version number, and command line.
+    carp(CARP_INFO, "CPU: %s", hostname());
+    carp(CARP_INFO, "Crux version: %s", CRUX_VERSION);
+    carp(CARP_INFO, date_and_time());
+    log_command_line(argc, argv);
+
+    // Write the parameter file
+    string paramFile = make_file_path(getFileStem() + ".params.txt");
+    ofstream* file = FileUtils::GetWriteStream(paramFile, Params::GetBool("overwrite"));
+    if (file == NULL) {
+      throw runtime_error("Could not open " + paramFile + " for writing");
+    }
+    Params::Write(file);
+    delete file;
+  }
+}
+
+/**
+ * Should this application be kept from the usage statement?
+ */
+bool CruxApplication::hidden() const {
+  return false;
+}
+
+/**
+ * Read in all parameters from command line and parameter file
+ */
+void CruxApplication::initializeParams(
+  const string& appName,
+  const vector<string>& appArgs,
+  const vector<string>& appOptions,
+  int argc,
+  char** argv
+) {
+  initialize_parameters();
+  set_verbosity_level(Params::GetInt("verbosity"));
+
+  // Parse command line
+  ArgParser argParser;
+  try {
+    argParser.Parse(argc, argv, appArgs);
+
+    // Read parameter file if specified
+    string parameter_file = argParser.GetOption("parameter-file");
+    if (!parameter_file.empty()) {
+      parse_parameter_file(parameter_file.c_str());
+      read_mods_from_file(parameter_file.c_str());
+    }
+    // Process command line options
+    const map<string, string>& options = argParser.GetOptions();
+    for (map<string, string>::const_iterator i = options.begin(); i != options.end(); i++) {
+      try {
+        Params::Set(i->first, i->second);
+      } catch (const runtime_error& e) {
+        throw ArgParserException(e.what());
+      }
+    }
+    // Process command line arguments
+    const map< string, vector<string> >& args = argParser.GetArgs();
+    for (map< string, vector<string> >::const_iterator i = args.begin(); i != args.end(); i++) {
+      for (vector<string>::const_iterator j = i->second.begin(); j != i->second.end(); j++) {
+        try {
+          Params::AddArgValue(i->first, *j);
+        } catch (const runtime_error& e) {
+          throw ArgParserException(e.what());
+        }
+      }
+    }
+  } catch (const ArgParserException& e) {
+    carp(CARP_FATAL, "%s\n\n%s\n", e.what(),
+         getUsage(appName, appArgs, appOptions, e.ShowFullUsage()).c_str());
+  } catch (const runtime_error& e) {
+    carp(CARP_FATAL, "%s", e.what());
+  }
+}
+
+/**
+ * Process parameters after they have been set up, but before they have been
+ * finalized
+ */
+void CruxApplication::processParams() {
+}
+
+string CruxApplication::getUsage(
+  const string& appName,
+  const vector<string>& args,
+  const vector<string>& options,
+  bool full
+) {
+  vector<string> argDisplay;
+  for (vector<string>::const_iterator i = args.begin(); i != args.end(); i++) {
+    argDisplay.push_back(StringUtils::EndsWith(*i, "+") ?
+      "<" + i->substr(0, i->length() - 1) + ">+" :"<" + *i + ">");
+  }
+
+  stringstream usage;
+  usage << "USAGE:" << endl
+        << endl
+        << "  crux " << appName << " [options]";
+  for (vector<string>::const_iterator i = argDisplay.begin(); i != argDisplay.end(); i++) {
+    usage << ' ' << *i;
+  }
+
+  if (full) {
+    usage << endl << endl
+          << "REQUIRED ARGUMENTS:";
+    for (vector<string>::const_iterator i = argDisplay.begin(); i != argDisplay.end(); i++) {
+      stringstream line;
+      string argName = i->substr(1, i->length() - (StringUtils::EndsWith(*i, "+") ? 3 : 2));
+      line << *i << ' ' << Params::ProcessHtmlDocTags(Params::GetUsage(argName));
+      usage << endl << endl << StringUtils::LineFormat(line.str(), 80, 2);
+    }
+    usage << endl << endl
+          << "OPTIONAL ARGUMENTS:" << endl;
+    for (vector<string>::const_iterator i = options.begin(); i != options.end(); i++) {
+      if (!Params::IsVisible(*i)) {
+        continue;
+      }
+      string defaultString = Params::GetStringDefault(*i);
+      if (defaultString.empty()) {
+        defaultString = "<empty>";
+      }
+      usage << endl
+            << "  [--" << *i << " " << Params::GetAcceptedValues(*i) << "]" << endl
+            << StringUtils::LineFormat(Params::ProcessHtmlDocTags(Params::GetUsage(*i)) +
+                                       " Default = " + defaultString + ".", 80, 5);
+    }
+    if (options.empty()) {
+      usage << endl
+            << "  This command does not support any optional parameters.";
+    }
+  } else {
+    usage << endl << endl
+          << "Run \"crux " << appName << "\" with no arguments to see a full "
+             "list of options.";
+  }
+  return usage.str();
+}
+
diff --git a/src/app/CruxApplication.h b/src/app/CruxApplication.h
new file mode 100644
index 0000000..958ca06
--- /dev/null
+++ b/src/app/CruxApplication.h
@@ -0,0 +1,159 @@
+/**
+ * \file CruxApplication.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 6 December 2010
+ * \brief Abstract Object for a CruxApplication
+ *****************************************************************************/
+#ifndef CRUXAPPLICATION_H
+#define CRUXAPPLICATION_H
+#include "model/objects.h"
+
+#include <algorithm>
+#include <string>
+#include <vector>
+#include <map>
+
+class CruxApplication{
+ public:
+  /**
+   * the main method for CruxApplication.  Subclasses of
+   * CruxApplication define this.
+   * \returns exit code for the executed program.   
+   */
+  virtual int main(int argc, char** argv) = 0;
+
+  /**
+   * \returns the name of the subclassed application
+   */ 
+  virtual std::string getName() const = 0;
+
+  /**
+   * \returns the description of the subclassed application
+   */
+  virtual std::string getDescription() const = 0;
+
+  /**
+   * \returns the arguments of the application
+   */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+   * \returns the options of the application
+   */
+  virtual std::vector<std::string> getOptions() const;
+
+  template<typename T>
+  static void addOptionsFrom(std::vector<std::string>* optionsVector) {
+    using std::find;
+    using std::string;
+    using std::vector;
+    CruxApplication* app = new T();
+    vector<string> options = app->getOptions();
+    delete app;
+    for (vector<string>::const_iterator i = options.begin(); i != options.end(); i++) {
+      if (find(optionsVector->begin(), optionsVector->end(), *i) == optionsVector->end()) {
+        optionsVector->push_back(*i);
+      }
+    }
+  }
+
+  static void removeOptionFrom(std::vector<std::string>* optionsVector, std::string option) {
+    using std::find;
+    using std::string;
+    using std::vector;
+    vector<string>::iterator i;
+    i = find(optionsVector->begin(), optionsVector->end(), option);
+    if (i != optionsVector->end()) {
+      optionsVector->erase(i);
+    }
+  }
+
+  /**
+   * \returns the outputs of the application as <name, description>
+   */
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+  template<typename T>
+  static void addOutputsFrom(
+    std::vector< std::pair<std::string, std::string> >* outputsVector) {
+    using std::pair;
+    using std::set;
+    using std::string;
+    using std::vector;
+    set<string> existing;
+    for (vector< pair<string, string> >::const_iterator i = outputsVector->begin();
+         i != outputsVector->end();
+         i++) {
+      existing.insert(i->first);
+    }
+
+    CruxApplication* app = new T();
+    vector< pair<string, string> > outputs = app->getOutputs();
+    delete app;
+    for (vector< pair<string, string> >::const_iterator i = outputs.begin();
+         i != outputs.end();
+         i++) {
+      if (existing.insert(i->first).second) {
+        outputsVector->push_back(*i);
+      }
+    }
+  }
+
+  /**
+   * \returns the file stem of the application, default getName.
+   */
+  virtual std::string getFileStem() const;
+
+  /**
+   * \returns the enum of the application, default MISC_COMMAND
+   */
+  virtual COMMAND_T getCommand() const;
+
+  /**
+   * \returns whether the application needs the output directory or not. (default false).
+   */
+  virtual bool needsOutputDirectory() const;
+
+  virtual void initialize(int argc, char** argv);
+
+  /**
+   * Frees an allocated CruxApplication
+   */
+  virtual ~CruxApplication();
+
+  /**
+   * Should this application be kept from the usage statement?
+   */
+  virtual bool hidden() const;
+
+  /**
+   * Read in all parameters from command line and parameter file
+   */
+  static void initializeParams(
+    const std::string& appName,
+    const std::vector<std::string>& appArgs,
+    const std::vector<std::string>& appOptions,
+    int argc,
+    char** argv
+  );
+
+  /**
+   * Process parameters after they have been set up, but before they have been
+   * finalized
+   */
+  virtual void processParams();
+
+  /**
+   * Get usage statement for the program.
+   */
+  static std::string getUsage(
+    const std::string& appName,
+    const std::vector<std::string>& args,
+    const std::vector<std::string>& options,
+    bool full
+  );
+};
+
+
+
+#endif
diff --git a/src/app/CruxApplicationList.cpp b/src/app/CruxApplicationList.cpp
new file mode 100644
index 0000000..6fa4e3e
--- /dev/null
+++ b/src/app/CruxApplicationList.cpp
@@ -0,0 +1,227 @@
+/**
+ * \file CruxApplicationList.cpp
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: December 6th, 2010
+ * \brief Maintains a list of executable applications
+ *****************************************************************************/
+#include "CruxApplicationList.h"
+#include "io/carp.h"
+#include "util/crux-utils.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+
+#include <iostream>
+
+using namespace std;
+
+/**
+ * Creates an application list with a listname
+ */
+CruxApplicationList::CruxApplicationList(
+  const char* list_name ///<name of the list
+) {
+  list_name_ = string(list_name);
+}
+
+
+/**
+ * Destructor for CruxApplicationList
+ */
+CruxApplicationList::~CruxApplicationList() {
+  
+  for (unsigned int idx=0;idx < applications_.size();idx++) {
+    delete applications_.at(idx);
+  }
+  applications_.clear();
+
+}
+
+/**
+ * Adds an application pointer to the list of applications
+ */
+void CruxApplicationList::add(
+  CruxApplication* application ///< application to add
+  ) {
+
+  if (find(application->getName()) != NULL) {
+    carp(CARP_FATAL, "Name clash! %s", application->getName().c_str());
+  }
+
+  applications_.push_back(application);
+}
+
+/**
+ * Adds a message to be printed in the usage statement
+ */
+void CruxApplicationList::addMessage(
+  const string& message ///< message to add
+) {
+  messages_[applications_.size()] = message;
+}
+
+/**
+ * \returns an application by a name,
+ * returns NULL if not found
+ */
+CruxApplication* CruxApplicationList::find(
+  const string& appname ///<name of the application to find
+  ) {
+  return find(appname.c_str());
+}
+
+/**
+ * \returns an application by a name,
+ * returns NULL if not found
+ */
+CruxApplication* CruxApplicationList::find(
+  const char* appname ///<name of the application to find
+  ) {
+
+  CruxApplication* crux_application = NULL;
+
+  for (vector<CruxApplication*>::iterator app_iter = 
+    applications_.begin();
+    app_iter != applications_.end();
+    ++app_iter) {
+    if (appname == (*app_iter) -> getName()) {
+      crux_application = *app_iter;
+      break;
+    }
+  }
+  return crux_application;
+}
+
+/**
+ * \returns an iterator pointing to the beginning of the application list
+ */
+vector<CruxApplication*>::const_iterator CruxApplicationList::begin() const {
+  return applications_.begin();
+}
+
+/**
+ * \returns an iterator pointing to the end of the application list
+ */
+vector<CruxApplication*>::const_iterator CruxApplicationList::end() const {
+  return applications_.end();
+}
+
+/**
+ * prints out the usage statement for this application list.
+ * Each applications name is printed along with its description
+ */
+void CruxApplicationList::usage() {
+
+  vector<CruxApplication*>::iterator iter;
+
+  size_t max_name_length = 0;
+
+  for (iter = applications_.begin();
+    iter != applications_.end();
+    ++iter) {
+
+    max_name_length = max(max_name_length, (*iter) -> getName().length());
+
+  }
+
+  cerr << " Usage: " << list_name_ << " <command> [options] <argument>" << endl;
+
+  for (unsigned int i = 0; i < applications_.size(); ++i) {
+    map<int, string>::const_iterator msg = messages_.find(i);
+    if (msg != messages_.end()) {
+      cerr << endl << msg->second << endl << endl;
+    }
+    if ((applications_[i])->hidden()) { // skip deprecated commands
+      continue;
+    }
+    string name = applications_[i]->getName();
+    string description = Params::ProcessHtmlDocTags(applications_[i]->getDescription());
+    int padding = max_name_length - name.length();
+
+    cerr << "  " << name << " ";
+    for (int idx = 0; idx < padding; idx++) {
+      cerr << " ";
+    }
+
+    const int LINE_WIDTH = 80;
+    unsigned int max_descr_line = LINE_WIDTH - (max_name_length+4);
+
+
+    // If the description is short enough, just print.
+    if (description.length() < max_descr_line) {
+      cerr << " " << description << endl;
+    } else {
+      // Otherwise, insert EOLs.
+      vector<string> words = StringUtils::Split(description, ' ');
+
+      unsigned int word_index = 0;
+      unsigned int line_length = 0;
+
+      // Print the first line.
+      while(line_length + words[word_index].length() + 1 < max_descr_line) {
+        cerr << " ";
+        cerr << words[word_index];
+        line_length += words[word_index].length() + 1;
+        word_index++;
+      }
+
+      // Print subsequent lines.
+      while (word_index < words.size()) {
+        line_length = 0;
+        cerr << endl;
+        for (unsigned int idx =0;idx < max_name_length + 3; idx++) {
+          cerr << " ";
+        }
+        while ((word_index < words.size()) && 
+               (line_length + words[word_index].length() + 1 < max_descr_line)) {
+          cerr << " ";
+          cerr << words[word_index];
+          line_length += words[word_index].length() + 1;
+          word_index++;
+        }
+      }
+      cerr << endl;
+    }
+  }
+  cerr << endl << endl;
+  cerr << "Options and arguments are specific to each command." << endl;
+  cerr << "Type '" << list_name_ << " <command>' for details." << endl;
+
+}
+
+/**
+ * Gets the name of the list
+ */
+string CruxApplicationList::getListName() const {
+  return list_name_;
+}
+
+/**
+ * the main method for CruxApplicationList.  Attempts to find
+ * an application by name from the first argument.  If successful,
+ * calls that applications main method with the rest of the parameters.
+ */
+int CruxApplicationList::main(int argc, char** argv) {
+
+  if (argc < 2) {
+    usage();
+    return -1;
+  }
+
+  string appname = string(argv[1]);
+  CruxApplication* crux_application = find(appname);
+
+  if (crux_application == NULL) {
+    cerr << "Cannot find " << appname << " in available applications" << endl;
+    usage();
+    return -1;
+  }
+
+  crux_application->initialize(argc-1, argv+1);
+  int ret = crux_application->main(argc-1, argv+1);
+
+  carp(CARP_INFO, "Elapsed time: %.3g s", wall_clock() / 1e6);
+  carp(CARP_INFO, "Finished crux %s.", appname.c_str());
+  carp(CARP_INFO, "Return Code:%i", ret);
+
+  return ret;
+}
diff --git a/src/app/CruxApplicationList.h b/src/app/CruxApplicationList.h
new file mode 100644
index 0000000..c9df590
--- /dev/null
+++ b/src/app/CruxApplicationList.h
@@ -0,0 +1,103 @@
+/**
+ * \file CruxApplicationList.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 6 December 2010
+ * \brief Maintains a list of executable applications.  Calling the main method
+ * will try to find the application by name and try to execute it if found.
+ *****************************************************************************/
+#ifndef CRUXAPPLICATIONLIST_H
+#define CRUXAPPLICATIONLIST_H
+
+#include "CruxApplication.h"
+
+#include <map>
+#include <vector>
+#include <string>
+
+
+class CruxApplicationList {
+
+ protected:
+  std::vector<CruxApplication*> applications_; ///< list of applications
+  std::map<int, std::string> messages_; ///< messages and their indexes
+  std::string list_name_; ///<Name of this list
+
+ public:
+  /**
+   * \brief Creates an application list with a listname
+   */
+  explicit CruxApplicationList(const char* list_name);
+
+  
+  /**
+   * Frees an allocated CruxApplicationList
+   */
+  ~CruxApplicationList();
+
+  /**
+   * Adds an application pointer to the list of applications
+   */
+  void add(
+    CruxApplication* application ///< application to add
+  );
+
+  /**
+   * Adds a message to be printed in the usage statement
+   */
+  void addMessage(
+    const std::string& message ///< message to add
+  );
+
+  /**
+   * \returns an application by a name,
+   * returns NULL if not found
+   */
+  CruxApplication* find(
+    const std::string& appname ///< name of application to find
+  );
+
+  /**
+   * \returns an application by a name,
+   * returns NULL if not found
+   */
+  CruxApplication* find(
+    const char* appname ///< name of application to find
+  );
+
+  /**
+   * \returns an iterator pointing to the beginning of the application list
+   */
+  std::vector<CruxApplication*>::const_iterator begin() const;
+
+  /**
+   * \returns an iterator pointing to the end of the application list
+   */
+  std::vector<CruxApplication*>::const_iterator end() const;
+
+  /**
+   * prints out the usage statement for this application list.
+   * Each applications name is printed along with its description
+   */
+  void usage();
+
+  /**
+   * Gets the name of the list
+   */
+  std::string getListName() const;
+
+  /**
+   * the main method for CruxApplicationList.  Attempts to find
+   * an application by name from the first argument.  If successful,
+   * calls that applications main method with the rest of the parameters.
+   */
+  int main(int argc, char** argv);
+};
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif
diff --git a/src/app/ExtractColumns.cpp b/src/app/ExtractColumns.cpp
new file mode 100644
index 0000000..a2fb4c3
--- /dev/null
+++ b/src/app/ExtractColumns.cpp
@@ -0,0 +1,134 @@
+/**
+ * \file ExtractColumns.cpp 
+ * \brief Give a tab delimited file and a comma-separated list of column names
+ * print out a tab delimied file with only those columns
+ *****************************************************************************/
+#include "ExtractColumns.h"
+#include "util/crux-utils.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+
+using namespace std;
+
+
+/**
+ * \returns a blank ExtractRows object
+ */
+ExtractColumns::ExtractColumns() {
+
+}
+
+/**
+ * Destructor
+ */
+ExtractColumns::~ExtractColumns() {
+}
+
+/**
+ * main method for ExtractColumns
+ */
+int ExtractColumns::main(int argc, char** argv) {
+  string delimited_filename = Params::GetString("tsv file");
+  string column_names_string = Params::GetString("column names");
+
+  char delimiter = get_delimiter_parameter("delimiter");
+
+  DelimitedFileReader delimited_file(delimited_filename, true, delimiter);
+  
+  vector<string> column_name_list = StringUtils::Split(column_names_string, ',');
+
+  vector<int> column_indices;
+  for (unsigned int i = 0; i < column_name_list.size(); i++) {
+    int col_idx = delimited_file.findColumn(column_name_list[i]);
+    if (col_idx != -1) {
+      column_indices.push_back(col_idx);
+    } else {
+      carp(CARP_ERROR, "column not found:%s\n\n%s", 
+        column_name_list[i].c_str(),
+        delimited_file.getAvailableColumnsString().c_str());
+      return(-1);
+    }
+  }
+
+  //print out the header if desired
+  if (Params::GetBool("header")) {
+    cout << column_name_list[0];
+    for (unsigned int col_idx = 1; col_idx < column_name_list.size(); col_idx++) {
+      cout << delimiter << column_name_list[col_idx];
+    }
+    cout << endl;
+  }
+
+  while(delimited_file.hasNext()) {
+
+    int col_idx = column_indices[0];
+    cout << delimited_file.getString(col_idx);
+    for (unsigned int col_idx_idx = 1;col_idx_idx < column_indices.size();col_idx_idx++) {
+      col_idx = column_indices[col_idx_idx];
+      cout << delimiter << delimited_file.getString(col_idx);
+    }
+    cout <<endl;
+    delimited_file.next();
+  }
+
+  return 0;
+
+}
+
+/**
+ * \returns the command name for ExtractColumns
+ */
+string ExtractColumns::getName() const {
+  return "extract-columns";
+}
+
+/**
+ * \returns the description for ExtractColumns
+ */
+string ExtractColumns::getDescription() const {
+  return
+    "[[nohtml:Print specified columns from a tab-delimited file.]]"
+    "[[html:<p>Given a tab-delimited file and a comma-delimited list of column "
+    "names, extract the requested columns.</p>]]";
+}
+
+/**
+ * \returns the command arguments
+ */
+vector<string> ExtractColumns::getArgs() const {
+  string arr[] = {
+    "tsv file",
+    "column names"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command options
+ */
+vector<string> ExtractColumns::getOptions() const {
+  string arr[] = {
+    "delimiter",
+    "header",
+    "verbosity"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command outputs
+ */
+vector< pair<string, string> > ExtractColumns::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("stdout",
+    "the requested columns in tab-delimited format. The columns are printed in "
+    "the same order that they appear in the input column list."));
+  return outputs;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/ExtractColumns.h b/src/app/ExtractColumns.h
new file mode 100644
index 0000000..0038b16
--- /dev/null
+++ b/src/app/ExtractColumns.h
@@ -0,0 +1,70 @@
+/**
+ * \file ExtractColumns.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 6 December 2010
+ * \brief Give a tab delimited file and a comma-separated list of column names
+ * print out a tab delimied file with only those columns
+ *****************************************************************************/
+#ifndef EXTRACTCOLUMNS_H
+#define EXTRACTCOLUMNS_H
+
+#include "CruxApplication.h"
+#include "io/DelimitedFileReader.h"
+
+#include <string>
+
+class ExtractColumns: public CruxApplication {
+
+ public:
+
+  /**
+   * \returns a blank ExtractRows object
+   */
+  ExtractColumns();
+
+  /**
+   * Destructor
+   */
+  ~ExtractColumns();
+
+  /**
+   * main method for ExtractColumns
+   */
+  virtual int main(int argc, char** argv);
+
+  /**
+   * \returns the command name for ExtractColumns
+   */
+  virtual std::string getName() const;
+
+  /**
+   * \returns the description for ExtractColumns
+   */
+  virtual std::string getDescription() const;
+
+  /**
+   * \returns the command arguments
+   */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+   * \returns the command options
+   */
+  virtual std::vector<std::string> getOptions() const;
+
+  /**
+   * \returns the command outputs
+   */
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+};
+
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/ExtractRows.cpp b/src/app/ExtractRows.cpp
new file mode 100644
index 0000000..b15b70d
--- /dev/null
+++ b/src/app/ExtractRows.cpp
@@ -0,0 +1,188 @@
+/*******************************************************************************
+  * \file ExtractRows.cpp
+  * \brief Given a tab delimited file and column name and value, print
+  * out all rows that pass the relation operator (default equals).
+  ****************************************************************************/
+
+#include "ExtractRows.h"
+
+#include <iostream>
+
+#include "io/DelimitedFileReader.h"
+#include "io/DelimitedFile.h"
+#include "io/carp.h"
+#include "parameter.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+
+using namespace std;
+
+/**
+ * \returns a blank ExtractRows object
+ */
+ExtractRows::ExtractRows() {
+}
+
+/**
+ * Destructor
+ */
+ExtractRows::~ExtractRows() {
+}
+
+
+/**
+ * Determines whether the a op b is true/false
+ */
+template<typename TValue>
+bool passesThreshold(
+  TValue a,
+  TValue b,
+  COMPARISON_T& comparison) {
+
+  switch (comparison) {
+    case COMPARISON_LT:
+      return a < b;
+    case COMPARISON_LTE:
+      return a <= b;
+    case COMPARISON_EQ:
+      return a == b;
+    case COMPARISON_GTE:
+      return a >= b;
+    case COMPARISON_GT:
+      return a > b;
+    case COMPARISON_NEQ:
+      return a != b;
+    case NUMBER_COMPARISONS:
+    case COMPARISON_INVALID:
+      carp(CARP_FATAL, "Invalid comparison type!");
+      return false;
+  }
+  return false;
+}
+
+/**
+ * main method for ExtractRows
+ */
+int ExtractRows::main(int argc, char** argv) {
+  /* Get parameters */
+  string delimited_filename = Params::GetString("tsv file");
+
+  string column_name = Params::GetString("column name");
+  string column_value = Params::GetString("column value");
+
+  COLTYPE_T column_type = get_column_type_parameter("column-type");
+  COMPARISON_T comparison = get_comparison_parameter("comparison");
+  char delimiter = get_delimiter_parameter("delimiter");
+
+
+  DelimitedFileReader delimited_file(delimited_filename, true, delimiter);
+  int column_idx = delimited_file.findColumn(column_name);
+
+  if (column_idx == -1) {
+    carp(CARP_FATAL, "column not found:%s\n\n:%s",
+      column_name.c_str(),
+      delimited_file.getAvailableColumnsString().c_str());
+  }
+
+  if (Params::GetBool("header")) {
+    cout << delimited_file.getHeaderString() << endl;
+  }
+
+  string column_value_str = Params::GetString("column value");
+
+  while (delimited_file.hasNext()) {
+    bool passes = false;
+    switch(column_type) {
+      case COLTYPE_INT:
+        passes = passesThreshold(
+          delimited_file.getInteger(column_idx),
+          StringUtils::FromString<int>(column_value_str), 
+          comparison);
+        break;
+      case COLTYPE_REAL:
+        passes = passesThreshold(
+          delimited_file.getFloat(column_idx),
+          StringUtils::FromString<FLOAT_T>(column_value_str), 
+          comparison);
+        break;
+      case COLTYPE_STRING:
+        passes = passesThreshold(
+          delimited_file.getString(column_idx),
+          column_value_str,
+          comparison);
+        break;
+      case NUMBER_COLTYPES:
+      case COLTYPE_INVALID:
+        carp(CARP_FATAL, "Unknown column type");
+    }
+    
+    if (passes) {
+      cout << delimited_file.getString() << endl;
+    }
+    delimited_file.next();
+  }
+
+  return 0;
+
+}
+
+/**
+ * \returns the command name for ExtractRows
+ */
+string ExtractRows::getName() const {
+  return "extract-rows";
+}
+
+/**
+ * \returns the description for ExtractRows
+ */
+string ExtractRows::getDescription() const {
+  return
+    "[[nohtml:Print specified rows from a tab-delimited file.]]"
+    "[[html:Given a tab-delimited file, a column name and a column cell value, "
+    "extract the rows that have the matching values for that column.]]";
+}
+
+/**
+ * \returns the command arguments
+ */
+vector<string> ExtractRows::getArgs() const {
+  string arr[] = {
+    "tsv file", 
+    "column name", 
+    "column value"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command options
+ */
+vector<string> ExtractRows::getOptions() const {
+  string arr[] = {
+    "delimiter",
+    "header",
+    "comparison",
+    "column-type",
+    "verbosity"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command outputs
+ */
+vector< pair<string, string> > ExtractRows::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("stdout",
+    "the rows for which the value observed in the specified column of the input "
+    "file match the <column value> given on the command line."));
+  return outputs;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/ExtractRows.h b/src/app/ExtractRows.h
new file mode 100644
index 0000000..6399e29
--- /dev/null
+++ b/src/app/ExtractRows.h
@@ -0,0 +1,70 @@
+/**
+ * \file ExtractRows.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 6 December 2010
+ * \brief Given a tab delimited file and column name and value, print
+ * out all rows that pass the relation operator (default equals).
+ *****************************************************************************/
+#ifndef EXTRACTROWS_H
+#define EXTRACTROWS_H
+
+#include "CruxApplication.h"
+
+#include <string>
+
+class ExtractRows: public CruxApplication {
+
+ public:
+
+  /**
+   * \returns a blank ExtractRows object
+   */
+  ExtractRows();
+
+  /**
+   * Destructor
+   */
+  ~ExtractRows();
+
+  /**
+   * main method for ExtractRows
+   */
+  virtual int main(int argc, char** argv);
+
+  /**
+   * \returns the command name for ExtractRows
+   */
+  virtual std::string getName() const;
+
+  /**
+   * \returns the description for ExtractRows
+   */
+  virtual std::string getDescription() const;
+
+  /**
+   * \returns the command arguments
+   */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+   * \returns the command options
+   */
+  virtual std::vector<std::string> getOptions() const;
+
+  /**
+   * \returns the command outputs
+   */
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+};
+
+
+#endif //EXTRACTROWS_H
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/app/GeneratePeptides.cpp b/src/app/GeneratePeptides.cpp
new file mode 100644
index 0000000..7d3806f
--- /dev/null
+++ b/src/app/GeneratePeptides.cpp
@@ -0,0 +1,607 @@
+#include "GeneratePeptides.h"
+#include "parameter.h"
+#include "model/ProteinPeptideIterator.h"
+#include "util/mass.h"
+#include "util/FileUtils.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+
+using namespace std;
+
+MASS_TYPE_T GeneratePeptides::massType_ = AVERAGE;
+
+GeneratePeptides::GeneratePeptides() {
+}
+
+GeneratePeptides::~GeneratePeptides() {
+}
+
+int GeneratePeptides::main(int argc, char** argv) {
+  string fastaPath = Params::GetString("protein fasta file");
+  if (!FileUtils::Exists(fastaPath)) {
+    carp(CARP_FATAL, "File does not exist: '%s'", fastaPath.c_str());
+  }
+
+  DECOY_TYPE_T decoyType = get_tide_decoy_type_parameter("decoy-format");
+  massType_ = get_mass_type_parameter("isotopic-mass");
+  bool overwrite = Params::GetBool("overwrite");
+
+  string targetsFile = make_file_path("generate-peptides.target.txt");
+  string decoysFile = make_file_path("generate-peptides.decoy.txt");
+
+  ofstream* targetPeptides = create_stream_in_path(targetsFile.c_str(), NULL, overwrite);
+  ofstream* decoyPeptides = decoyType != NO_DECOYS
+    ? create_stream_in_path(decoysFile.c_str(), NULL, overwrite)
+    : NULL;
+
+  string decoyFastaPath = canGenerateDecoyProteins()
+    ? make_file_path("generate-peptides.proteins.decoy.txt")
+    : "";
+
+  processFasta(fastaPath, targetPeptides, decoyFastaPath, decoyPeptides, decoyType);
+  return 0;
+}
+
+void GeneratePeptides::processFasta(
+  const string& fastaPath,
+  ofstream* targetList,
+  const string& decoyFastaPath,
+  ofstream* decoyList,
+  DECOY_TYPE_T decoyType
+) {
+  double minMass = Params::GetDouble("min-mass");
+  double maxMass = Params::GetDouble("max-mass");
+
+  carp(CARP_INFO, "Reading %s", fastaPath.c_str());
+  ifstream* fasta = new ifstream(fastaPath.c_str(), ifstream::in);
+
+  ofstream* decoyFasta = decoyFastaPath.empty() ? NULL
+    : create_stream_in_path(decoyFastaPath.c_str(), NULL, Params::GetBool("overwrite"));
+
+  ENZYME_T enzyme = get_enzyme_type_parameter("enzyme");
+  if (!Params::GetString("custom-enzyme").empty()) {
+    enzyme = CUSTOM_ENZYME;
+  }
+  DIGEST_T digest = get_digest_type_parameter("digestion");
+  int missed = Params::GetInt("missed-cleavages");
+  int minLen = Params::GetInt("min-length");
+  int maxLen = Params::GetInt("max-length");
+  string decoyPrefix = Params::GetString("decoy-prefix");
+  bool proteinReverse = decoyType == PROTEIN_REVERSE_DECOYS;
+  bool peptideShuffle = decoyType == PEPTIDE_SHUFFLE_DECOYS;
+  bool peptideReverse = decoyType == PEPTIDE_REVERSE_DECOYS;
+
+  set<string> targets, decoys;
+  map<const string*, const string*> targetToDecoy;
+  map< OrderedPeptide, vector<string> > peptideToProtein;
+  int proteinTotal = 0, peptideTotal = 0;
+
+  // Iterate over all proteins from this FASTA
+  while (true) {
+    string id, proteinSequence;
+    if (!getNextProtein(*fasta, &id, &proteinSequence)) {
+      break;
+    }
+    ++proteinTotal;
+    carp(CARP_DEBUG, "Read %s", id.c_str());
+
+    // Get peptides
+    vector<CleavedPeptide> peptides =
+      cleaveProtein(proteinSequence, enzyme, digest, missed, minLen, maxLen);
+    peptideTotal += peptides.size();
+
+    // Write reversed protein to decoy FASTA, if protein reverse
+    if (decoyFasta && proteinReverse) {
+      reverse(proteinSequence.begin(), proteinSequence.end());
+      *decoyFasta << '>' << decoyPrefix << id << endl
+                  << proteinSequence << endl;
+    }
+
+    // Iterate over all peptides from this protein
+    for (vector<CleavedPeptide>::const_iterator i = peptides.begin();
+         i != peptides.end();
+         i++) {
+      FLOAT_T mass = i->Mass();
+      if (mass < minMass || mass > maxMass) {
+        carp(CARP_DETAILED_DEBUG, "Skipping peptide with mass %f", mass);
+        continue;
+      }
+      const string& sequence = i->Sequence();
+      pair<set<string>::iterator, bool> insert = targets.insert(sequence);
+      if (insert.second) {
+        peptideToProtein[*i] = vector<string>(1, id);
+      } else {
+        peptideToProtein[*i].push_back(id);
+      }
+    }
+  }
+  delete fasta;
+  carp(CARP_DEBUG, "Read %d proteins and %d peptides", proteinTotal, peptideTotal);
+
+  // Once we have all targets, try to generate a decoy for each one
+  if (peptideShuffle || peptideReverse) {
+    int decoyFailures = 0;
+    for (set<string>::const_iterator i = targets.begin(); i != targets.end(); i++) {
+      string decoy;
+      if (makeDecoy(*i, targets, decoys, peptideShuffle, decoy)) {
+        targetToDecoy[&*i] = &*(decoys.insert(decoy).first);
+      } else {
+        ++decoyFailures;
+      }
+    }
+    if (decoyFailures > 0) {
+      carp(CARP_WARNING, "Failed to generate decoys for %d targets", decoyFailures);
+    }
+  }
+
+  // Re-read FASTA and generate decoy FASTA
+  if (decoyFasta && (peptideShuffle || peptideReverse)) {
+    ifstream* fasta = new ifstream(fastaPath.c_str(), ifstream::in);
+    while (true) {
+      string id, proteinSequence;
+      if (!getNextProtein(*fasta, &id, &proteinSequence)) {
+        break;
+      }
+
+      *decoyFasta << '>' << decoyPrefix << id << endl;
+
+      // Get peptides
+      vector<CleavedPeptide> peptides =
+        cleaveProtein(proteinSequence, enzyme, digest, missed, 0, 1000000);
+
+      // Iterate over all peptides from this protein
+      for (vector<CleavedPeptide>::const_iterator i = peptides.begin();
+           i != peptides.end();
+           i++) {
+        const string& sequence = i->Sequence();
+        set<string>::const_iterator j = targets.find(sequence);
+        if (j != targets.end()) {
+          map<const string*, const string*>::const_iterator k = targetToDecoy.find(&*j);
+          if (k != targetToDecoy.end()) {
+            *decoyFasta << *k->second;
+            continue;
+          }
+        }
+        *decoyFasta << sequence;
+      }
+      *decoyFasta << endl;
+    }
+    delete fasta;
+  }
+
+  int precision = Params::GetInt("mass-precision");
+  for (map< OrderedPeptide, vector<string> >::const_iterator i = peptideToProtein.begin();
+       i != peptideToProtein.end();
+       i++) {
+    const string& sequence = i->first.Sequence();
+    FLOAT_T mass = i->first.Mass();
+    vector<string>::const_iterator j = i->second.begin();
+    *targetList << sequence << '\t'
+                << StringUtils::ToString(mass + MASS_PROTON, precision) << '\t'
+                << *j;
+    for (j = j + 1; j != i->second.end(); j++) {
+      string proteinId = *j;
+      *targetList << ',' << proteinId;
+    }
+    *targetList << endl;
+
+    if ((peptideShuffle || peptideReverse) && decoyList) {
+      set<string>::const_iterator target = targets.find(sequence);
+      map<const string*, const string*>::const_iterator k = targetToDecoy.find(&*target);
+      if (k != targetToDecoy.end()) {
+        j = i->second.begin();
+        *decoyList << *k->second << '\t'
+                   << StringUtils::ToString(mass + MASS_PROTON, precision) << '\t'
+                   << decoyPrefix << *j;
+        for (j = j + 1; j != i->second.end(); j++) {
+          *decoyList << ',' << decoyPrefix << *j;
+        }
+        *decoyList << endl;
+      }
+    }
+  }
+
+  if (decoyFasta) {
+    delete decoyFasta;
+  }
+
+  delete targetList;
+
+  if (proteinReverse && !decoyFastaPath.empty()) {
+    processFasta(decoyFastaPath, decoyList, "", NULL, NO_DECOYS);
+  } else if (decoyList) {
+    delete decoyList;
+  }
+}
+
+bool GeneratePeptides::canGenerateDecoyProteins() {
+  const string decoyFormat = Params::GetString("decoy-format");
+
+  // Can never write decoy proteins if not making decoys
+  if (decoyFormat == "none") {
+    return false;
+  }
+
+  // Can always write decoy proteins if making protein-level decoys
+  if (decoyFormat == "protein-reverse") {
+    return true;
+  }
+
+  // If making peptide-level decoys, we can only write decoy proteins if:
+  // Using an enzyme, full digestion, no missed cleavages
+  bool customEnzyme = !Params::GetString("custom-enzyme").empty();
+  bool useEnzyme = get_enzyme_type_parameter("enzyme") != NO_ENZYME;
+  bool fullDigest = get_digest_type_parameter("digestion") == FULL_DIGEST;
+  bool noMissedCleavages = Params::GetInt("missed-cleavages") == 0;
+
+  return (customEnzyme || useEnzyme) && fullDigest && noMissedCleavages;
+}
+
+/**
+ * Reads the next protein ID and corresponding sequence from the FASTA stream
+ * Returns false if no more proteins in stream
+ */
+bool GeneratePeptides::getNextProtein(
+  ifstream& fasta,  ///< FASTA stream
+  string* outId,  ///< string to store protein ID
+  string* outSequence ///< string to store sequence
+) {
+  outId->clear();
+  outSequence->clear();
+  if (!fasta.good()) {
+    return false;
+  }
+
+  while (fasta.good()) {
+    string line;
+    getline(fasta, line);
+    line = StringUtils::Trim(line);
+    if (outId->empty()) {
+      // Reading id
+      if (StringUtils::StartsWith(line, ">")) {
+        bool idStart = false;
+        string::const_iterator begin = line.begin() + 1;
+        string::const_iterator end = line.end();
+        for (string::const_iterator i = begin; i != line.end(); i++) {
+          bool space = isspace(*i);
+          if (!idStart && !space) {
+            begin = i;
+            idStart = true;
+          } else if (idStart && space) {
+            end = i;
+            break;
+          }
+        }
+        *outId = string(begin, end);
+      }
+    } else {
+      // Reading sequence
+      *outSequence += line;
+      if (fasta.eof() || fasta.peek() == '>') {
+        break;
+      }
+    }
+  }
+
+  if (StringUtils::EndsWith(*outSequence, "*")) {
+    // Remove the last character of the sequence if it is an asterisk
+    outSequence->erase(outSequence->length() - 1);
+  }
+
+  if (outSequence->empty()) {
+    carp(CARP_WARNING, "Found protein ID without sequence: %s", outId->c_str());
+    outId->clear();
+    return false;
+  }
+
+  if (fasta.fail()) {
+    carp(CARP_FATAL, "Error reading FASTA file");
+  }
+
+  return true;
+}
+
+/**
+ * Cleave protein sequence using specified enzyme and store results in vector
+ * Vector also contains start location of each peptide within the protein
+ */
+vector<GeneratePeptides::CleavedPeptide> GeneratePeptides::cleaveProtein(
+  const string& sequence, ///< Protein sequence to cleave
+  ENZYME_T enzyme,  ///< Enzyme to use for cleavage
+  DIGEST_T digest,  ///< Digestion to use for cleavage
+  int missedCleavages,  ///< Maximum allowed missed cleavages
+  int minLength,  //< Min length of peptides to return
+  int maxLength  //< Max length of peptides to return
+) {
+  vector<CleavedPeptide> peptides;
+  // No enzyme
+  // Get all substrings min <= length <= max
+  if (enzyme == NO_ENZYME) {
+    for (int i = 0; i < sequence.length(); ++i) {
+      for (int j = minLength; i + j <= sequence.length() && j <= maxLength; ++j) {
+        peptides.push_back(CleavedPeptide(sequence.substr(i, j), i));
+      }
+    }
+    return peptides;
+  }
+
+  size_t pepStart = 0, nextPepStart = 0;
+  int cleaveSites = 0;
+  for (int i = 0; i < sequence.length(); ++i) {
+    // Determine if this is a valid cleavage position
+    bool cleavePos = i != sequence.length() - 1 &&
+      ProteinPeptideIterator::validCleavagePosition(sequence.c_str() + i, enzyme);
+    if (digest == PARTIAL_DIGEST && i != sequence.length() - 1 && !cleavePos) {
+      // Partial digestion (not last AA or cleavage position), add this peptide
+      peptides.push_back(CleavedPeptide(sequence.substr(pepStart, i + 1 - pepStart), pepStart));
+    } else if (cleavePos) {
+      // Cleavage position, add this peptide
+      peptides.push_back(CleavedPeptide(sequence.substr(pepStart, i + 1 - pepStart), pepStart));
+      if (Params::GetBool("clip-nterm-methionine") && sequence[0] == 'M' &&
+          pepStart == 0 && digest != PARTIAL_DIGEST) {
+        peptides.push_back(CleavedPeptide(
+          sequence.substr(pepStart + 1, i + 1 - pepStart - 1), pepStart + 1));
+      }
+      if (++cleaveSites == 1) {
+        // This is the first cleavage position, remember it
+        nextPepStart = i + 1;
+      }
+      if (digest == PARTIAL_DIGEST) {
+        // For partial digest, add peptides ending at this cleavage position
+        for (int j = pepStart + 1; j < nextPepStart; ++j) {
+          peptides.push_back(CleavedPeptide(sequence.substr(j, i - j + 1), j));
+        }
+      }
+      if (cleaveSites > missedCleavages) {
+        // We have missed the allowed amount of cleavages
+        // Move iterator+pepStart to the first cleavage position
+        pepStart = nextPepStart;
+        i = pepStart - 1;
+        cleaveSites = 0;
+      }
+    } else if (i == sequence.length() - 1 &&
+               cleaveSites > 0 && cleaveSites <= missedCleavages) {
+      // Last AA in sequence and we haven't missed the allowed amount yet
+      // Add this peptide and move iterator+pepStart to first cleavage position
+      peptides.push_back(CleavedPeptide(sequence.substr(pepStart), pepStart));
+      if (digest == PARTIAL_DIGEST) {
+        // For partial digest, add peptides ending at last AA
+        for (int j = pepStart + 1; j < nextPepStart; ++j) {
+          peptides.push_back(CleavedPeptide(sequence.substr(j, i - j + 1), j));
+        }
+      }
+      pepStart = nextPepStart;
+      i = pepStart - 1;
+      cleaveSites = 0;
+    }
+  }
+  // Add the last peptide
+  peptides.push_back(CleavedPeptide(sequence.substr(nextPepStart), nextPepStart));
+  if (digest == PARTIAL_DIGEST) {
+    // For partial digest, add peptides ending at last AA
+    for (int j = pepStart + 1; j < sequence.length(); ++j) {
+      peptides.push_back(CleavedPeptide(sequence.substr(j), j));
+    }
+  }
+  // Erase peptides that don't meet length requirement
+  for (vector<CleavedPeptide>::iterator i = peptides.begin(); i != peptides.end(); ) {
+    if (i->Length() < minLength || i->Length() > maxLength) {
+      i = peptides.erase(i);
+    } else {
+      ++i;
+    }
+  }
+  return peptides;
+}
+
+/**
+ * Makes a decoy from the sequence.
+ * Returns false on failure, and decoyOut will be the same as seq.
+ */
+bool GeneratePeptides::makeDecoy(
+  const string& seq,  ///< sequence to make decoy from
+  const set<string>& targetSeqs,  ///< targets to check against
+  const set<string>& decoySeqs,  ///< decoys to check against
+  bool shuffle, ///< shuffle (if false, reverse)
+  string& decoyOut  ///< string to store decoy
+) {
+  const string keepTerminal = Params::GetString("keep-terminal-aminos");
+  string decoyPre, decoyPost;
+  if (keepTerminal == "N") {
+    if (seq.length() <= 2) {
+      decoyOut = seq;
+      return false;
+    }
+    decoyPre = seq[0];
+    decoyOut = seq.substr(1);
+  } else if (keepTerminal == "C") {
+    if (seq.length() <= 2) {
+      decoyOut = seq;
+      return false;
+    }
+    decoyPost = seq[seq.length() - 1];
+    decoyOut = seq.substr(0, seq.length() - 1);
+  } else if (keepTerminal == "NC") {
+    if (seq.length() <= 3) {
+      decoyOut = seq;
+      return false;
+    }
+    decoyPre = seq[0];
+    decoyPost = seq[seq.length() - 1];
+    decoyOut = seq.substr(1, seq.length() - 2);
+  } else {
+    decoyOut = seq;
+    if (seq.length() <= 1) {
+      return false;
+    }
+  }
+
+  if (!shuffle) {
+    // Reverse
+    if (reversePeptide(decoyOut)) {
+      // Re-add n/c
+      string decoyCheck = decoyPre + decoyOut + decoyPost;
+      // Check in sets
+      if (targetSeqs.find(decoyCheck) == targetSeqs.end() &&
+          decoySeqs.find(decoyCheck) == decoySeqs.end()) {
+        decoyOut = decoyCheck;
+        return true;
+      }
+    }
+    carp(CARP_DEBUG, "Failed reversing %s, shuffling", seq.c_str());
+  }
+
+  // Shuffle
+  if (shufflePeptide(decoyOut)) {
+    // Re-add n/c
+    string decoyCheck = decoyPre + decoyOut + decoyPost;
+    // Check in sets
+    if (targetSeqs.find(decoyCheck) == targetSeqs.end() &&
+        decoySeqs.find(decoyCheck) == decoySeqs.end()) {
+      decoyOut = decoyCheck;
+      return true;
+    }
+  }
+
+  decoyOut = seq;
+  return false;
+}
+
+/**
+ * Shuffles the peptide randomly.
+ * Returns false if no different sequence was generated
+ */
+bool GeneratePeptides::shufflePeptide(
+  string& seq, ///< Peptide sequence to shuffle
+  unsigned int maxShuffleAttempts ///< Maximum number of shuffle attempts
+) {
+  switch (seq.length()) {
+  case 0:
+  case 1:
+    return false;
+  case 2: {
+    char second = seq[1];
+    seq[1] = seq[0];
+    seq[0] = second;
+    return true;
+  }
+  default:
+    string originalSeq(seq);
+    for (int i = 0; i < maxShuffleAttempts; i++) {
+      random_shuffle(seq.begin(), seq.end(), myrandom_limit);
+      if (seq != originalSeq) {
+        return true;
+      }
+    }
+    return false;
+  }
+}
+
+/**
+ * Reverses the peptide sequence.
+ * Returns false if no different sequence was generated
+ */
+bool GeneratePeptides::reversePeptide(
+  string& seq ///< Peptide sequence to reverse
+) {
+  string originalSeq(seq);
+  reverse(seq.begin(), seq.end());
+  return seq != originalSeq;
+}
+
+string GeneratePeptides::getName() const {
+  return "generate-peptides";
+}
+
+string GeneratePeptides::getDescription() const {
+  return
+    "[[nohtml:Extract from a given set of protein sequences a list of target "
+    "and decoy peptides fitting the specified criteria.]]"
+    "[[html:<p>This command takes as input a protein FASTA file and outputs "
+    "the corresponding list of peptides, as well as a matched list of decoy "
+    "peptides and decoy proteins. Decoys are generated either by reversing or "
+    "shuffling the non-terminal amino acids of each peptide. The program will "
+    "shuffle each peptide multiple times to attempt to ensure that there is no "
+    "overlap between the target and decoy peptides. For homopolymers, this is "
+    "not possible. In this case, the occurrence of these target/decoy overlaps "
+    "is recorded in the log file.</p><p>The program considers only the "
+    "standard set of 20 amino acids. Peptides containing non-amino acid "
+    "alphanumeric characters (BJOUXZ) are skipped. Non-alphanumeric characters "
+    "are ignored completely.</p>]]";
+}
+
+vector<string> GeneratePeptides::getArgs() const {
+  string arr[] = {
+    "protein fasta file"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector<string> GeneratePeptides::getOptions() const {
+  string arr[] = {
+    "min-mass",
+    "max-mass",
+    "min-length",
+    "max-length",
+    "enzyme",
+    "custom-enzyme",
+    "digestion",
+    "missed-cleavages",
+    "isotopic-mass",
+    "seed",
+    "clip-nterm-methionine",
+    "decoy-format",
+    "decoy-prefix",
+    "keep-terminal-aminos",
+    "overwrite",
+    "fileroot",
+    "output-dir",
+    "parameter-file",
+    "verbosity"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector< pair<string, string> > GeneratePeptides::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("generate-peptides.target.txt",
+    "A text file containing the target peptides, one per line. Each line has "
+    "three tab-delimited columns, containing the peptide sequence, the m+h "
+    "mass of the unmodified peptide, and a comma-delimited list of protein IDs "
+    "in which the peptide occurs."));
+  outputs.push_back(make_pair("generate-peptides.decoy.txt",
+    "A text file containing the decoy peptides, one per line. Each line has "
+    "three tab-delimited columns, containing the peptide sequence, the m+h "
+    "mass of the unmodified peptide, and a comma-delimited list of protein IDs "
+    "in which the peptide occurs. "
+    "There is a one-to-one correspondence between targets and decoys."));
+  outputs.push_back(make_pair("generate-peptides.proteins.decoy.txt",
+    "a FASTA format file containing decoy proteins, in which all of the "
+    "peptides have been replaced with their shuffled or reversed counterparts. "
+    "Note that this file will only be created if the enzyme specificity is "
+    "\"full-digest\" and no missed cleavages are allowed."));
+  outputs.push_back(make_pair("generate-peptides.params.txt",
+    "a file containing the name and value of all parameters/options for the "
+    "current operation. Not all parameters in the file may have been used in "
+    "the operation. The resulting file can be used with the --parameter-file "
+    "option for other crux programs."));
+  outputs.push_back(make_pair("generate-peptides.log.txt",
+    "a log file containing a copy of all messages that were printed to the "
+    "screen during execution."));
+  return outputs;
+}
+
+bool GeneratePeptides::needsOutputDirectory() const {
+  return true;
+}
+
+COMMAND_T GeneratePeptides::getCommand() const {
+  return GENERATE_PEPTIDES_COMMAND;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/GeneratePeptides.h b/src/app/GeneratePeptides.h
new file mode 100644
index 0000000..80843e2
--- /dev/null
+++ b/src/app/GeneratePeptides.h
@@ -0,0 +1,154 @@
+#ifndef GENERATE_PEPTIDES_H
+#define GENERATE_PEPTIDES_H
+
+#include <fstream>
+
+#include "CruxApplication.h"
+#include "model/Peptide.h"
+
+class GeneratePeptides : public CruxApplication {
+
+ protected:
+  static MASS_TYPE_T massType_;
+
+ public:
+
+  class OrderedPeptide {
+   public:
+    explicit OrderedPeptide(const std::string& sequence):
+      sequence_(sequence), sequencePtr_(NULL),
+      mass_(Crux::Peptide::calcSequenceMass(sequence, massType_)) {}
+    explicit OrderedPeptide(const std::string* sequence):
+      sequence_(""), sequencePtr_(sequence),
+      mass_(Crux::Peptide::calcSequenceMass(*sequence, massType_)) {}
+
+    std::string Sequence() const { return sequencePtr_ ? *sequencePtr_ : sequence_; }
+    unsigned int Length() const { return Sequence().length(); }
+    FLOAT_T Mass() const { return mass_; }
+    bool operator <(const OrderedPeptide& rhs) const { return Sequence() < rhs.Sequence(); }
+   protected:
+    std::string sequence_;
+    const std::string* sequencePtr_;
+    FLOAT_T mass_;
+  };
+
+  class CleavedPeptide : public OrderedPeptide {
+   public:
+    CleavedPeptide(const std::string& sequence, unsigned int position):
+      OrderedPeptide(sequence), position_(position) {}
+    unsigned int Position() const { return position_; }
+   private:
+    unsigned int position_;
+  };
+
+  /**
+   * Constructor
+   */
+  GeneratePeptides();
+
+  /**
+   * Destructor
+   */
+  ~GeneratePeptides();
+
+  /**
+   * Main method
+   */
+  virtual int main(int argc, char** argv);
+
+  void processFasta(
+    const std::string& fastaPath,
+    std::ofstream* targetList,
+    const std::string& decoyFastaPath,
+    std::ofstream* decoyList,
+    DECOY_TYPE_T decoyType
+  );
+
+  /**
+   * Check if we can generate decoy proteins with the current settings.
+   */
+  static bool canGenerateDecoyProteins();
+
+  /**
+   * Reads the next protein ID and corresponding sequence from the FASTA stream
+   * Returns false if no more proteins in stream
+   */
+  static bool getNextProtein(
+    std::ifstream& fasta,  ///< FASTA stream
+    std::string* outId,  ///< string to store protein ID
+    std::string* outSequence ///< string to store sequence
+  );
+
+  /**
+   * Cleave protein sequence using specified enzyme and store results in vector
+   * Vector also contains start location of each peptide within the protein
+   */
+  static std::vector<CleavedPeptide> cleaveProtein(
+    const std::string& sequence, ///< Protein sequence to cleave
+    ENZYME_T enzyme,  ///< Enzyme to use for cleavage
+    DIGEST_T digest,  ///< Digestion to use for cleavage
+    int missedCleavages,  ///< Maximum allowed missed cleavages
+    int minLength,  //< Min length of peptides to return
+    int maxLength  //< Max length of peptides to return
+  );
+
+  /**
+   * Makes a decoy from the sequence.
+   * Returns false on failure, and decoyOut will be the same as seq.
+   */
+  static bool makeDecoy(
+    const std::string& seq, ///< sequence to make decoy from
+    const std::set<std::string>& targetSeqs,  ///< targets to check against
+    const std::set<std::string>& decoySeqs,  ///< decoys to check against
+    bool shuffle, ///< shuffle (if false, reverse)
+    std::string& decoyOut ///< string to store decoy
+  );
+
+  /**
+   * Shuffles the peptide sequence.
+   * Returns false if no different sequence was generated
+   */
+  static bool shufflePeptide(
+    std::string& seq,  ///< Peptide sequence to shuffle
+    unsigned int maxShuffleAttempts = 6 ///< Maximum number of shuffle attempts
+  );
+
+  /**
+   * Reverses the peptide sequence.
+   * Returns false if no different sequence was generated
+   */
+  static bool reversePeptide(
+    std::string& seq ///< Peptide sequence to reverse
+  );
+
+  /**
+   * Returns the command name
+   */
+  virtual std::string getName() const;
+
+  /**
+   * Returns the command description
+   */
+  virtual std::string getDescription() const;
+
+  virtual std::vector<std::string> getArgs() const;
+  virtual std::vector<std::string> getOptions() const;
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+  /**
+   * Returns whether the application needs the output directory or not. (default false)
+   */
+  virtual bool needsOutputDirectory() const;
+
+  virtual COMMAND_T getCommand() const;
+
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/GetMs2Spectrum.cpp b/src/app/GetMs2Spectrum.cpp
new file mode 100644
index 0000000..1f6bf26
--- /dev/null
+++ b/src/app/GetMs2Spectrum.cpp
@@ -0,0 +1,185 @@
+/**
+ * \file GetMs2Spectrum.cpp
+ *
+ * AUTHOR: Manijeh Naser
+ * CREATE DATE: January 31, 2012
+ *
+ * DESCRIPTION:brief searches a given ms2 file for the spectrum with the given
+ * scan number.
+ */
+
+#include "GetMs2Spectrum.h"
+
+#include <math.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#include <vector>
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+#include "parameter.h"
+#include "io/carp.h"
+#include "model/Spectrum.h"
+#include "model/Peak.h"
+#include "io/SpectrumCollectionFactory.h"
+#include "util/Params.h"
+#include "util/WinCrux.h"
+
+using namespace std;
+using namespace Crux;
+
+/**
+ * \returns A blank GetMs2Spectrum object.
+ */
+GetMs2Spectrum::GetMs2Spectrum() {
+
+}
+
+/**
+ * Destructorm
+ */
+GetMs2Spectrum::~GetMs2Spectrum() {
+}
+
+/****************************************************************************
+ * MAIN
+ ****************************************************************************/
+int GetMs2Spectrum::main(int argc, char** argv) {
+  /* Get arguments */
+  int min_scan = -1;
+  int max_scan = -1;
+  string range_string = Params::GetString("scan-number");
+
+  get_range_from_string(
+    range_string,
+    min_scan,
+    max_scan);
+  
+  fprintf(stderr, "Scanning from %d to %d.\n", min_scan, max_scan);
+
+  string ms2_filename = Params::GetString("ms2 file");
+  carp(CARP_DETAILED_DEBUG, "ms2_filename: %s", ms2_filename.c_str());
+
+  /* Get options */
+  bool options = Params::GetBool("stats");
+
+  /* read input file */
+  if (access(ms2_filename.c_str(), F_OK)) {
+    carp(CARP_FATAL, "Could not read from ms2 file '%s'", ms2_filename.c_str());
+  }
+  carp(CARP_DETAILED_DEBUG, "Creating spectrum collection.");
+  Crux::SpectrumCollection* collection = SpectrumCollectionFactory::create(ms2_filename);
+  collection->parse();
+  int num_found = 0;
+  
+  for (SpectrumIterator iter = collection->begin(); iter != collection->end(); ++iter) {
+  
+    Spectrum* spectrum = *iter;
+    carp(CARP_DETAILED_DEBUG, "spectrum number:%d", spectrum->getFirstScan());
+    if (spectrum->getFirstScan() >= min_scan && spectrum->getFirstScan() <= max_scan) {
+
+      /* Print either the spectrum or stats. */
+      if (!options) {
+        spectrum->print(stdout);
+      } else {
+        int charge_state_index = 0; 
+        int charge_state_num = spectrum->getNumZStates();
+        std::vector<SpectrumZState> zstates_array = spectrum->getZStates();
+  
+        printf("Scan number: %i\n", spectrum->getFirstScan());
+        printf("Precursor m/z:%.2f\n", spectrum->getPrecursorMz());
+        printf("Total Ion Current:%.2f\n", spectrum->getTotalEnergy());
+        printf("Base Peak Intensity:%.1f\n", spectrum->getMaxPeakIntensity()); // base is max
+        printf("Number of peaks:%d\n", spectrum->getNumPeaks());
+        printf("Minimum m/z:%.1f\n", spectrum->getMinPeakMz());
+        printf("Maximum m/z:%.1f\n", spectrum->getMaxPeakMz());
+    
+        for (charge_state_index = 0; charge_state_index < charge_state_num; ++charge_state_index) {
+          SpectrumZState& zstate = zstates_array[charge_state_index];
+          FLOAT_T charged_mass = spectrum->getPrecursorMz() * (FLOAT_T)zstate.getCharge();
+
+          printf("Charge state:%d\n", zstate.getCharge());
+          printf("Neutral mass:%.2f\n", zstate.getNeutralMass());
+          printf("Charged mass:%.2f\n", charged_mass);
+          printf("M+H+ mass:%.2f\n", zstate.getSinglyChargedMass());
+        }
+      }
+      num_found++;
+    }
+  }
+  delete collection;
+
+  carp(CARP_INFO, "Found %d spectra.\n", num_found);
+  
+  return(0);
+}
+/**
+ * \returns The command name for GetMs2SPectrum. 
+ */
+string GetMs2Spectrum::getName() const {
+  return "get-ms2-spectrum";
+}
+
+/**
+ * \returns The description for GetMs2Spectrum.
+ */
+string GetMs2Spectrum::getDescription() const {
+  return
+    "[[nohtml:Extract one or more fragmentation spectra, specified by scan "
+    "number, from an MS2 file.]]"
+    "[[html:<p>Extract one or more MS-MS spectra from an MS2 file by scan "
+    "number. Optionally output summary statistics for each spectrum.</p>]]";
+}
+
+/**
+ * \returns The command arguments
+ */
+vector<string> GetMs2Spectrum::getArgs() const {
+  string arr[] = {
+    "ms2 file"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns The command options
+ */
+vector<string> GetMs2Spectrum::getOptions() const {
+  string arr[] = {
+    "scan-number",
+    "remove-precursor-tolerance",
+    "stats", 
+    "verbosity",
+    "spectrum-parser",
+    "use-z-line"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns The command outputs
+ */
+vector< pair<string, string> > GetMs2Spectrum::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("stdout",
+    "the requested spectrum or spectra in MS2 format."));
+  return outputs;
+}
+
+/**
+ * \returns The enum of the application, default GET_MS2_SPECTRUM_COMMAND.
+ */
+COMMAND_T GetMs2Spectrum::getCommand() const {
+  return GET_MS2_SPECTRUM_COMMAND;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/app/GetMs2Spectrum.h b/src/app/GetMs2Spectrum.h
new file mode 100644
index 0000000..5885f72
--- /dev/null
+++ b/src/app/GetMs2Spectrum.h
@@ -0,0 +1,86 @@
+/**
+ * \file GetMs2Spectrum.h
+ *
+ * AUTHOR: Manijeh Naseri
+ * CREATE DATE: February 2, 2012
+ * DESCRIPTION: Main method for the generate-peptides command.
+ *              Output all peptide sequences in the given fasta file
+ *              that fall within all peptide constraints.
+ */
+#ifndef GETMS2SPECTRUM_H
+#define GETMS2SPECTRUM_H
+
+#include "CruxApplication.h"
+#include "util/crux-utils.h"
+#include "io/carp.h"
+#include "parameter.h"
+
+class GetMs2Spectrum: public CruxApplication {
+
+ public:
+  /**
+   * \returns A blank GetMs2Spectrum object.
+   */
+  GetMs2Spectrum();
+  
+  /**
+   * Destructor
+   */
+  ~GetMs2Spectrum();
+
+  /**
+   * Main method for GetMs2Spectrum.
+   */
+  virtual int main(int argc, char** argv);
+
+  /**
+   * \returns The command name for GetMs2Spectrum.
+   */
+  virtual std::string getName() const;
+
+  /**
+   * \returns The description for GetMs2Spectrum.
+   */
+  virtual std::string getDescription() const;
+
+  /**
+   * \returns The command arguments
+   */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+   * \returns The command options
+   */
+  virtual std::vector<std::string> getOptions() const;
+
+  /**
+   * \returns The command outputs
+   */
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+  /**
+   * \returns The file stem of the application, default getName.
+   */
+ 
+  virtual COMMAND_T getCommand() const;
+
+ 
+ protected:
+  /**
+   * Print header lines to stdout.
+   */
+  void printHeader();
+
+};
+
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
+
diff --git a/src/app/MakePinApplication.cpp b/src/app/MakePinApplication.cpp
new file mode 100644
index 0000000..51e79c9
--- /dev/null
+++ b/src/app/MakePinApplication.cpp
@@ -0,0 +1,241 @@
+/**
+ *\file MakePinApplication.cpp 
+ *****************************************************************************/
+#include "MakePinApplication.h"
+#include "io/PinWriter.h"
+#include "parameter.h"
+#include "util/Params.h"
+#include "io/MatchCollectionParser.h"
+#include "io/SQTReader.h"
+#include "util/StringUtils.h"
+#include <sstream>
+#include <iomanip>
+#include <ios>
+
+using namespace std;
+
+/**
+ * \returns a blank PercolatorApplication object
+ */
+MakePinApplication::MakePinApplication() {
+}
+
+/**
+ * Destructor
+ */
+MakePinApplication::~MakePinApplication() {}
+
+/**
+ * main method for MakePinApplication
+ */
+int MakePinApplication::main(int argc, char** argv) {
+  string target_path = Params::GetString("target input");
+
+  vector<string> search_result_files;
+  get_search_result_paths(target_path, search_result_files);
+
+  return main(search_result_files);
+}
+
+/**
+ * \runs make-pin application
+ */
+int MakePinApplication::main(const vector<string>& paths) {
+  //create MatchColletion 
+  MatchCollectionParser parser;
+
+  if (paths.empty()) {
+    carp(CARP_FATAL, "No search paths found!");
+  }
+
+  MatchCollection* target_collection = new MatchCollection();
+  MatchCollection* decoy_collection = new MatchCollection();
+
+  int max_charge = 0;
+  for (vector<string>::const_iterator iter = paths.begin(); iter != paths.end(); ++iter) {
+    carp(CARP_INFO, "Parsing %s", iter->c_str());
+    if (StringUtils::IEndsWith(*iter, ".sqt")) {
+      SQTReader::readSymbols(*iter);
+    }
+
+    MatchCollection* current_collection = parser.create(iter->c_str(), "");
+    if (!target_collection->getHasDistinctMatches() && current_collection->getHasDistinctMatches()) {
+      target_collection->setHasDistinctMatches(true);
+      decoy_collection->setHasDistinctMatches(true);
+    }
+    for (int scorer_idx = (int)SP; scorer_idx < (int)NUMBER_SCORER_TYPES; scorer_idx++) {
+      SCORER_TYPE_T cur_type = (SCORER_TYPE_T)scorer_idx;
+      bool scored = current_collection->getScoredType(cur_type);
+      target_collection->setScoredType(cur_type, scored);
+      decoy_collection->setScoredType(cur_type, scored);
+    }
+    MatchIterator match_iter(current_collection);
+    while (match_iter.hasNext()) {
+      Crux::Match* match = match_iter.next();
+      if (match->getNullPeptide()) {
+        decoy_collection->addMatch(match);
+      } else {
+        target_collection->addMatch(match);
+      }
+      int charge = match->getCharge();
+      if (charge > max_charge) {
+        max_charge = charge;
+      }
+    }
+    delete current_collection;
+  }
+
+  carp(CARP_INFO, "There are %d target matches and %d decoys",
+       target_collection->getMatchTotal(), decoy_collection->getMatchTotal());
+  if (target_collection->getMatchTotal() == 0) {
+    carp(CARP_FATAL, "No target matches found!");
+  } else if (decoy_collection->getMatchTotal() == 0) {
+    carp(CARP_FATAL, "No decoy matches found!  Did you set 'decoy-prefix' properly?");
+  }
+
+  //prepare output file 
+  string output_filename = Params::GetString("output-file");
+  if (output_filename.empty()) {
+    string fileroot = Params::GetString("fileroot");
+    if (!fileroot.empty()) {
+      fileroot += ".";
+    }
+    output_filename = fileroot + "make-pin.pin";
+  }
+  PinWriter writer;
+  writer.openFile(output_filename, Params::GetString("output-dir"),
+                  Params::GetBool("overwrite"));
+
+  for (int i = 1; i <= max_charge; i++) {
+    writer.setEnabledStatus("Charge" + StringUtils::ToString(i), true);
+  }
+  writer.setEnabledStatus("deltCn", target_collection->getScoredType(DELTA_CN));
+  writer.setEnabledStatus("deltLCn", target_collection->getScoredType(DELTA_LCN));
+  bool is_sp = target_collection->getScoredType(SP);
+  writer.setEnabledStatus("lnrSp", is_sp);
+  writer.setEnabledStatus("Sp", is_sp);
+  writer.setEnabledStatus("IonFrac", is_sp);
+  bool is_refactored_xcorr = target_collection->getScoredType(TIDE_SEARCH_REFACTORED_XCORR);
+  writer.setEnabledStatus("XCorr", !is_refactored_xcorr);
+  writer.setEnabledStatus("RefactoredXCorr", is_refactored_xcorr);
+  writer.setEnabledStatus("NegLog10PValue",
+                          target_collection->getScoredType(TIDE_SEARCH_EXACT_PVAL));
+  if (writer.getEnabledStatus("lnNumSP") && target_collection->getHasDistinctMatches()) {
+    writer.setEnabledStatus("lnNumSP", false);
+    writer.setEnabledStatus("lnNumDSP", true);
+  }
+
+  //write .pin file 
+  writer.printHeader();
+  writer.write(target_collection, vector<MatchCollection*>(1, decoy_collection),
+               Params::GetInt("top-match"));
+
+  delete target_collection;
+  delete decoy_collection;
+
+  return 0;
+}
+
+/**
+ * \returns the command name for PercolatorApplication
+ */
+string MakePinApplication::getName() const {
+  return "make-pin";
+}
+
+/**
+ * \returns the description for PercolatorApplication
+ */
+string MakePinApplication::getDescription() const {
+  return
+    "[[nohtml:Given a set of search results files, generate a pin file for "
+    "input to crux percolator]]"
+    "[[html:<p>Make-pin is a utility program that combines a collection of "
+    "target and decoy peptide-spectrum matches (PSMs) into a single file in "
+    "pin format, according to <a href=\"https://github.com/percolator/"
+    "percolator/wiki/Interface\">this format</a>. The resulting file can be "
+    "provided as input to <code><a href=\"percolator.html\">crux percolator</a>"
+    "</code>.</p><p><code>make-pin</code> requires as input two sets of PSMs, "
+    "one set derived from matching observed spectra against real "
+    "("target") peptides and a second set derived from matching the "
+    "same spectra against "decoy" peptides. The output file contains, "
+    "for each PSM, a set of features for use by the Percolator algorithm. These "
+    "features are summarized <a href=\"../file-formats/features.html\">here</a>.</p><p>Note "
+    "that, in the stand-alone version of Percolator, the functionality provided "
+    "by <code>crux make-pin</code> is incorporated into a program called "
+    "<code>sqt2pin</code>. However, a significant difference between <code>crux "
+    "percolator</code> and the stand-alone version of the program is that "
+    "<code>crux percolator</code> does not require an explicit call to "
+    "<code>crux make-pin</code>: if input is provided to <code>crux percolator"
+    "</code> in a non-pin format, then the input will be automatically "
+    "converted to pin format.</p>]]";
+}
+
+/**
+ * \returns the command arguments
+ */
+vector<string> MakePinApplication::getArgs() const {
+  string arr[] = {
+    "target input"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command options
+ */
+vector<string> MakePinApplication::getOptions() const {
+  string arr[] = {
+    "top-match",
+    "list-of-files",
+    "filestem-prefixes",
+    "decoy-prefix",
+    "fileroot",
+    "output-dir",
+    "output-file",
+    "overwrite",
+    "parameter-file",
+    "verbosity"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command outputs
+ */
+vector< pair<string, string> > MakePinApplication::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("make-pin.pin",
+    "a tab-delimited file containing the input target and decoy PSMs in pin "
+    "format. This file can be changed to an absolute path (see --output-file "
+    "option)."));
+  outputs.push_back(make_pair("make-pin.params.txt",
+    "a file containing the name and value of all parameters for the current "
+    "operation. Not all parameters in the file may have been used in the "
+    "operation. The resulting file can be used with the --parameter-file "
+    "option for other crux programs."));
+  outputs.push_back(make_pair("make-pin.log.txt",
+    "a log file containing a copy of all messages that were printed to "
+    "standard error."));
+  return outputs;
+}
+
+/**
+ * \returns whether the application needs the output directory or not. (default false).
+ */
+bool MakePinApplication::needsOutputDirectory() const {
+  return true;
+}
+
+
+bool MakePinApplication:: hidden() const {
+  return false;
+}
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/MakePinApplication.h b/src/app/MakePinApplication.h
new file mode 100644
index 0000000..8afdbb8
--- /dev/null
+++ b/src/app/MakePinApplication.h
@@ -0,0 +1,88 @@
+/**
+ * \file PercolatorApplication.h 
+ * AUTHOR: Manije Naseri
+ * CREATE DATE: 4 September 2012
+ * \
+ *****************************************************************************/
+#ifndef MAKEPINAPPLICATION_H
+#define MAKEPINAPPLICATION_H
+
+#include "CruxApplication.h"
+
+#include <string>
+#include <fstream>
+#include <string>
+
+using namespace std;
+
+class MakePinApplication: public CruxApplication {
+
+ public:
+
+  /**
+   * \returns a blank MakePinApplication object
+   */
+  MakePinApplication();
+
+  /**
+   * Destructor
+   */
+  ~MakePinApplication();
+
+  /**
+   * main method for MakePinApplication
+   */
+  virtual int main(int argc, char** argv);
+
+  /**
+   * runs make-pin application
+   */
+  static int main(const std::vector<std::string>& paths);
+
+  /**
+   * \returns the command name for MakePinApplication
+   */
+  virtual std::string getName() const;
+
+  /**
+   * \returns the description for MakePinApplication
+   */
+  virtual std::string getDescription() const;
+
+  /**
+   * \returns the command arguments
+   */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+   * \returns the command options
+   */
+  virtual std::vector<std::string> getOptions() const;
+
+  /**
+   * \returns the command outputs
+   */
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+  /**
+   * \returns whether the application needs the output directory or not. (default false).
+   */
+  virtual bool needsOutputDirectory() const;
+
+  
+  /**
+   * hide sequest search 
+  */
+
+  virtual bool hidden() const;
+};
+
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/PSMConvertApplication.cpp b/src/app/PSMConvertApplication.cpp
new file mode 100644
index 0000000..c032a79
--- /dev/null
+++ b/src/app/PSMConvertApplication.cpp
@@ -0,0 +1,209 @@
+#include <cstdio>
+
+#include "io/carp.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+#include "PSMConvertApplication.h"
+#include "model/MatchCollection.h"
+#include "model/ProteinMatchCollection.h"
+#include "io/HTMLWriter.h"
+#include "io/MatchFileReader.h"
+#include "io/MzIdentMLReader.h"
+#include "io/MzIdentMLWriter.h"
+#include "io/PepXMLReader.h"
+#include "io/PepXMLWriter.h"
+#include "io/PinWriter.h"
+#include "io/PMCDelimitedFileWriter.h"
+#include "io/PMCPepXMLWriter.h"
+#include "io/PMCSQTWriter.h"
+#include "io/PSMReader.h"
+#include "io/PSMWriter.h"
+#include "io/SQTReader.h"
+
+PSMConvertApplication::PSMConvertApplication() {
+}
+
+PSMConvertApplication::~PSMConvertApplication() {
+}
+
+void PSMConvertApplication::convertFile(string input_format, string output_format, string input_file, string output_file_base, string database_file, bool distinct_matches) {
+  Database* data;
+  if (database_file.empty()) {
+    data = new Database();
+    carp(CARP_INFO, "Database not provided, will use empty database");
+  } else {
+    data = new Database(database_file.c_str(), false);
+    carp(CARP_INFO, "Created Database using Fasta File");
+  }
+  
+  bool isTabDelimited = false;
+  PSMReader* reader;
+  
+  if (input_format != "auto") {
+    if (input_format == "tsv") {
+      reader = new MatchFileReader(input_file.c_str(), data);
+      isTabDelimited = true;
+    } else if (input_format == "html") {
+      carp(CARP_FATAL, "HTML format has not been implemented yet");
+    } else if (input_format == "sqt") {
+      reader = new SQTReader(input_file.c_str(), data);
+    } else if (input_format == "pin") {
+      carp(CARP_FATAL, "Pin format has not been implemented yet");
+    } else if (input_format == "pepxml") {
+      reader = new PepXMLReader(input_file.c_str(), data);
+    } else if (input_format == "mzidentml") {
+      reader = new MzIdentMLReader(input_file.c_str(), data);
+    } else if (input_format == "barista-xml") {
+      carp(CARP_FATAL, "Barista-XML format has not been implemented yet");
+    } else {
+      carp(CARP_FATAL, "Invalid Input Format, valid formats are: tsv, html, "
+           "sqt, pin, pepxml, mzidentml, barista-xml");
+    }
+  } else {
+    if (StringUtils::IEndsWith(input_file, ".txt")) {
+      reader = new MatchFileReader(input_file.c_str(), data);
+      isTabDelimited = true;
+    } else if (StringUtils::IEndsWith(input_file, ".html")) {
+      carp(CARP_FATAL, "HTML format has not been implemented yet");
+    } else if (StringUtils::IEndsWith(input_file, ".sqt")) {
+      reader = new SQTReader(input_file.c_str(), data);
+    } else if (StringUtils::IEndsWith(input_file, ".pin")) {
+      carp(CARP_FATAL, "Pin format has not been implemented yet");
+    } else if (StringUtils::IEndsWith(input_file, ".xml")) {
+      reader = new PepXMLReader(input_file.c_str(), data);
+    } else if (StringUtils::IEndsWith(input_file, ".mzid")) {
+      reader = new MzIdentMLReader(input_file.c_str(), data);
+    } else if (StringUtils::IEndsWith(input_file, ".barista.xml")) {
+      carp(CARP_FATAL, "Barista-XML format has not been implemented yet");
+    } else {
+      carp(CARP_FATAL, "Could not determine input format, "
+           "Please name your files ending with .txt, .html, .sqt, .pin, "
+           ".xml, .mzid, .barista.xml or use the --input-format option to "
+           "specify file type");
+    }
+  }
+  
+  MatchCollection* collection = reader->parse();
+  
+  if (!isTabDelimited) {
+    collection->setHasDistinctMatches(distinct_matches);
+  } else if (collection->getHasDistinctMatches() != distinct_matches) {
+    const char* matchType = collection->getHasDistinctMatches() ?
+    "distinct" : "not distinct";
+    carp(CARP_WARNING, "Parser has detected that matches are %s, but parameter "
+         "distinct-matches is set to %s. We will assume that matches are %s",
+         matchType, distinct_matches ? "distinct" : "not distinct",
+         matchType);
+  }
+  
+  carp(CARP_INFO, "Reader has been succesfully parsed");
+  
+  // What will be used when PSMWriter is finished.
+  
+  PSMWriter* writer;
+  stringstream output_file_name_builder;
+  output_file_name_builder << output_file_base;
+  
+  if (output_format == "tsv") {
+    output_file_name_builder << "txt";
+    writer = new PMCDelimitedFileWriter();
+  } else if (output_format == "html") {
+    output_file_name_builder << "html";
+    writer = new HTMLWriter();
+  } else if (output_format == "sqt") {
+    output_file_name_builder << "sqt";
+    writer = new PMCSQTWriter();
+  } else if (output_format == "pin") {
+    output_file_name_builder << "pin";
+    writer = new PinWriter();
+  } else if (output_format == "pepxml") {
+    output_file_name_builder << "pep.xml";
+    writer = new PMCPepXMLWriter();
+  } else if (output_format == "mzidentml") {
+    output_file_name_builder << "mzid";
+    writer = new MzIdentMLWriter();
+  } else if (output_format == "barista-xml") {
+    carp(CARP_FATAL, "Barista-XML format has not been implemented yet");
+  } else {
+    carp(CARP_FATAL, "Invalid Output Format, valid formats are: tsv, html, "
+         "sqt, pin, pepxml, mzidentml, barista-xml");
+  }
+  
+  string output_file_name = make_file_path(output_file_name_builder.str());
+  
+  writer->openFile(this, output_file_name, PSMWriter::PSMS);
+  writer->write(collection, database_file);
+  writer->closeFile();
+  
+  // Clean Up
+  delete collection;
+  delete reader;
+  delete writer;
+
+}
+
+
+int PSMConvertApplication::main(int argc, char** argv) {
+  string database_file = Params::GetString("protein-database");
+  string input_format = Params::GetString("input-format");
+  string input_file = Params::GetString("input PSM file");
+  string output_format = Params::GetString("output format");
+  bool distinct_matches = Params::GetBool("distinct-matches");
+  
+  convertFile(input_format, output_format, input_file, "psm-convert.", database_file, distinct_matches);
+
+  return 0;
+}
+
+string PSMConvertApplication::getName() const {
+  return "psm-convert";
+}
+
+string PSMConvertApplication::getDescription() const {
+  return
+  "Reads in a file containing peptide-spectrum matches "
+  "(PSMs) in one of the variety of supported formats and "
+  "outputs the same PSMs in a different format";
+}
+
+vector<string> PSMConvertApplication::getArgs() const {
+  string arr[] = {
+    "input PSM file",
+    "output format"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector<string> PSMConvertApplication::getOptions() const {
+  string arr[] = {
+    "input-format",
+    "distinct-matches",
+    "protein-database",
+    "output-dir",
+    "overwrite",
+    "parameter-file",
+    "verbosity",
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector< pair<string, string> > PSMConvertApplication::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("psm-convert.log.txt",
+    "a log file containing a copy of all messages that were printed to stderr."));
+  outputs.push_back(make_pair("psm-convert.params.txt",
+    "a file containing the name and value of all parameters/options for the "
+    "current operation. Not all parameters in the file may have been used in "
+    "the operation. The resulting file can be used with the --parameter-file "
+    "option for other crux programs."));
+  return outputs;
+}
+
+bool PSMConvertApplication::needsOutputDirectory() const {
+  return true;
+}
+
+COMMAND_T PSMConvertApplication::getCommand() const {
+  return PSM_CONVERT_COMMAND;
+}
+
diff --git a/src/app/PSMConvertApplication.h b/src/app/PSMConvertApplication.h
new file mode 100644
index 0000000..0f4766b
--- /dev/null
+++ b/src/app/PSMConvertApplication.h
@@ -0,0 +1,72 @@
+#ifndef PSMCONVERTAPPLICATION_H
+#define PSMCONVERTAPPLICATION_H
+
+#include "CruxApplication.h"
+
+#include <iostream>
+#include <fstream>
+#include <iomanip>
+#include <gflags/gflags.h>
+#include <string>
+
+using namespace std;
+
+class PSMConvertApplication : public CruxApplication {
+
+ public:
+
+  /**
+   * Constructor
+   */
+  PSMConvertApplication();
+
+  /**
+   * Destructor
+   */
+  ~PSMConvertApplication();
+
+  /**
+   * Main method
+   */
+  virtual int main(int argc, char** argv);
+
+  /**
+   * Perform Convert
+   */
+  virtual void convertFile(string input_format, string output_format, string input_file, string output_file_base, string database_file, bool distinct_matches);
+  
+  /**
+   * Returns the command name
+   */
+  virtual string getName() const;
+
+  /**
+   * Returns the command description
+   */
+  virtual string getDescription() const;
+
+  /**
+   * Returns the command arguments
+   */
+  virtual vector<string> getArgs() const;
+
+  /**
+   * Returns the command options
+   */
+  virtual vector<string> getOptions() const;
+
+  /**
+   * \returns the outputs of the application as <name, description>
+   */
+  virtual vector< pair<string, string> > getOutputs() const;
+
+  /**
+   * Returns whether the application needs the output directory or not. (default false)
+   */
+  virtual bool needsOutputDirectory() const;
+
+  virtual COMMAND_T getCommand() const;
+  
+};
+
+#endif
diff --git a/src/app/ParamMedicApplication.cpp b/src/app/ParamMedicApplication.cpp
new file mode 100644
index 0000000..ce84e72
--- /dev/null
+++ b/src/app/ParamMedicApplication.cpp
@@ -0,0 +1,658 @@
+#include "ParamMedicApplication.h"
+#include "io/carp.h"
+#include "io/SpectrumCollectionFactory.h"
+#include "parameter.h"
+#include "util/Params.h"
+
+#include <cmath>
+#include <numeric>
+
+using namespace Crux;
+using namespace std;
+
+const double SQRT_2_PI = 2.50662827463;
+
+// maximum proportion of precursor delta-masses that can be 0, otherwise we give up
+const double MAX_PROPORTION_PRECURSOR_DELTAS_ZERO = 0.5;
+
+// maximum peaks to use to fit a mixed distribution
+const int MAX_PEAKPAIRS = 100000;
+
+// multipliers to transform standard error values into algorithm parameters
+const double PRECURSOR_SIGMA_MULTIPLIER = 37.404067;
+const double FRAGMENT_SIGMA_MULTIPLIER = 0.004662;
+
+// separation between averagine peaks used for binning spectra
+const double AVERAGINE_PEAK_SEPARATION = 1.0005079;
+
+// minimum allowed values for sigma of the estimated normal
+const double MIN_SIGMA_PPM = 0.01;
+const double MIN_SIGMA_TH = 0.00001;
+
+ParamMedicApplication::ParamMedicApplication() {
+}
+
+ParamMedicApplication::~ParamMedicApplication() {
+}
+
+int ParamMedicApplication::main(int argc, char** argv) {
+  ParamMedicErrorCalculator errCalc;
+  errCalc.processFiles(Params::GetStrings("spectrum-file"));
+
+  // calculate mass error distributions
+  string precursorFailure, fragmentFailure;
+  double precursorSigmaPpm = 0;
+  double fragmentSigmaPpm = 0;
+  double fragmentSigmaTh = 0;
+  double precursorPredictionPpm = 0;
+  double fragmentPredictionPpm = 0;
+  double fragmentPredictionTh = 0;
+  errCalc.calcMassErrorDist(
+    &precursorFailure,
+    &fragmentFailure,
+    &precursorSigmaPpm,
+    &fragmentSigmaPpm,
+    &precursorPredictionPpm,
+    &fragmentPredictionTh
+  );
+
+  if (precursorFailure.empty()) {
+    carp(CARP_INFO, "precursor ppm standard deviation: %f", precursorSigmaPpm);
+    carp(CARP_INFO, "Precursor error estimate (ppm): %.2f", precursorPredictionPpm);
+  } else {
+    carp(CARP_ERROR, "failed to calculate precursor error: %s", precursorFailure.c_str());
+  }
+  if (fragmentFailure.empty()) {
+    carp(CARP_INFO, "fragment standard deviation (ppm): %f", fragmentSigmaPpm);
+    carp(CARP_INFO, "Fragment bin size estimate (Th): %.4f", fragmentPredictionTh);
+  } else {
+    carp(CARP_ERROR, "failed to calculate fragment error: %s", fragmentFailure.c_str());
+  }
+  return 0;
+}
+
+string ParamMedicApplication::getName() const {
+  return "param-medic";
+}
+
+string ParamMedicApplication::getDescription() const {
+  return
+    "[[html:<p>]]Examine the spectra in a file to estimate the best precursor "
+    "and fragment error tolerances for database search.[[html:</p>]]";
+}
+
+bool ParamMedicApplication::hidden() const {
+  return false;
+}
+
+vector<string> ParamMedicApplication::getArgs() const {
+  string arr[] = {
+    "spectrum-file+"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector<string> ParamMedicApplication::getOptions() const {
+  string arr[] = {
+    "verbosity",
+    "spectrum-parser",
+    "pm-min-precursor-mz",
+    "pm-max-precursor-mz",
+    "pm-min-frag-mz",
+    "pm-max-frag-mz",
+    "pm-min-scan-frag-peaks",
+    "pm-max-precursor-delta-ppm",
+    "pm-charge",
+    "pm-top-n-frag-peaks",
+    "pm-pair-top-n-frag-peaks",
+    "pm-min-common-frag-peaks",
+    "pm-max-scan-separation",
+    "pm-min-peak-pairs"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector< pair<string, string> > ParamMedicApplication::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("stdout",
+    "the estimated parameter values for precursor mass tolerance (in ppm) and "
+    "fragment bin size (in Th), as well as the standard deviations of the "
+    "estimated error distributions for precursor and fragment masses."));
+  return outputs;
+}
+
+bool ParamMedicApplication::needsOutputDirectory() const {
+  return false;
+}
+
+void ParamMedicApplication::processParams() {
+  if (!Params::GetBool("use-z-line")) {
+    carp(CARP_DEBUG, "Forcing use-z-line=T");
+    Params::Set("use-z-line", true);
+  }
+  if (!Params::GetBool("pm-ignore-no-charge")) {
+    carp(CARP_DEBUG, "Forcing pm-ignore-no-charge=T");
+    Params::Set("pm-ignore-no-charge", true);
+  }
+}
+
+ParamMedicErrorCalculator::ParamMedicErrorCalculator():
+  numTotalSpectra_(0), numPassingSpectra_(0) {
+  if (!numeric_limits<double>::is_iec559) {
+    carp(CARP_FATAL, "Something went wrong.");
+  }
+  lowestPrecursorBinStartMz_ = Params::GetDouble("pm-min-precursor-mz") -
+    fmod(Params::GetDouble("pm-min-precursor-mz"), AVERAGINE_PEAK_SEPARATION / Params::GetInt("pm-charge"));
+  lowestFragmentBinStartMz_ = Params::GetDouble("pm-min-frag-mz") -
+    fmod(Params::GetDouble("pm-min-frag-mz"), AVERAGINE_PEAK_SEPARATION);
+  numPrecursorBins_ = getBinIndexPrecursor(Params::GetDouble("pm-max-precursor-mz")) + 1;
+  numFragmentBins_ = getBinIndexFragment(Params::GetDouble("pm-max-frag-mz")) + 1;
+}
+
+ParamMedicErrorCalculator::~ParamMedicErrorCalculator() {
+  for (vector< pair<const Peak*, const Peak*> >::const_iterator i = pairedFragmentPeaks_.begin();
+      i != pairedFragmentPeaks_.begin();
+      i++) {
+    delete i->first;
+    delete i->second;
+  }
+}
+
+void ParamMedicErrorCalculator::processFiles(const vector<string>& files) {
+  for (vector<string>::const_iterator i = files.begin(); i != files.end(); i++) {
+    carp(CARP_INFO, "param-medic processing input file %s...", i->c_str());
+    SpectrumCollection* collection = SpectrumCollectionFactory::create(*i);
+    collection->parse();
+    for (SpectrumIterator j = collection->begin(); j != collection->end(); j++) {
+      processSpectrum(*j);
+    }
+    delete collection;
+    clearBins();
+  }
+}
+
+void ParamMedicErrorCalculator::processSpectrum(Spectrum* spectrum) {
+  ++numTotalSpectra_;
+
+  if (spectrum->getNumPeaks() < Params::GetInt("pm-min-scan-frag-peaks")) {
+    return;
+  }
+
+  double precursorMz = getPrecursorMz(spectrum);
+  if (!(Params::GetDouble("pm-min-precursor-mz") <= precursorMz && precursorMz <= Params::GetDouble("pm-max-precursor-mz"))) {
+    return;
+  }
+
+  ++numPassingSpectra_;
+  // pull out the top fragments by intensity
+  spectrum->sortPeaks(_PEAK_INTENSITY);
+  spectrum->truncatePeaks(Params::GetInt("pm-top-n-frag-peaks"));
+
+  int precursorBinIndex = getBinIndexPrecursor(precursorMz);
+  map<int, Spectrum*>::const_iterator prevIter = spectra_.find(precursorBinIndex);
+  if (prevIter != spectra_.end()) {
+    // there was a previous spectrum in this bin; check to see if they're a pair
+    const Spectrum* prev = prevIter->second;
+    const double precursorMzPrev = getPrecursorMz(prev);
+    const double precursorMzDiffPpm = (precursorMz - precursorMzPrev) * MILLION / precursorMz;
+    // check precursor and scan count between the scans
+    if (abs(precursorMzDiffPpm) <= Params::GetDouble("pm-max-precursor-delta-ppm") &&
+        abs(spectrum->getFirstScan() - prev->getFirstScan()) <= Params::GetInt("pm-max-scan-separation")) {
+      // count the fragment peaks in common
+      vector< pair<const Peak*, const Peak*> > pairedFragments = pairFragments(prev, spectrum);
+      if (pairedFragments.size() >= Params::GetInt("pm-min-common-frag-peaks")) {
+        // we've got a pair! record everything
+        sort(pairedFragments.begin(), pairedFragments.end(), sortPairedFragments);
+        vector< pair<const Peak*, const Peak*> >::const_iterator stop =
+          pairedFragments.size() >= Params::GetInt("pm-pair-top-n-frag-peaks")
+            ? pairedFragments.begin() + Params::GetInt("pm-pair-top-n-frag-peaks")
+            : pairedFragments.end();
+        for (vector< pair<const Peak*, const Peak*> >::const_iterator i = pairedFragments.begin();
+            i != stop;
+            i++) {
+          pairedFragmentPeaks_.push_back(make_pair(
+            new Peak(i->first->getIntensity(), i->first->getLocation()),
+            new Peak(i->second->getIntensity(), i->second->getLocation())));
+        }
+        pairedPrecursorMzs_.push_back(make_pair(precursorMzPrev, precursorMz));
+      }
+    }
+  }
+  // make the new spectrum its bin's representative
+  spectra_[precursorBinIndex] = spectrum;
+}
+
+void ParamMedicErrorCalculator::clearBins() {
+  spectra_.clear();
+}
+
+void ParamMedicErrorCalculator::calcMassErrorDist(
+  string* precursorFailure,
+  string* fragmentFailure,
+  double* precursorSigmaPpm,
+  double* fragmentSigmaPpm,
+  double* precursorPredictionPpm,
+  double* fragmentPredictionTh
+) {
+  precursorFailure->clear();
+  fragmentFailure->clear();
+  carp(CARP_INFO, "Processed %d total spectra", numTotalSpectra_);
+  carp(CARP_INFO, "Processed %d qualifying spectra", numPassingSpectra_);
+  carp(CARP_INFO, "Precursor pairs: %d", pairedPrecursorMzs_.size());
+  carp(CARP_INFO, "Fragment pairs: %d", pairedFragmentPeaks_.size());
+
+  if (pairedPrecursorMzs_.size() > MAX_PEAKPAIRS) {
+    carp(CARP_DEBUG, "Using %d of %d peak pairs for precursor...",
+         MAX_PEAKPAIRS, pairedPrecursorMzs_.size());
+    random_shuffle(pairedPrecursorMzs_.begin(), pairedPrecursorMzs_.end(), myrandom_limit);
+    pairedPrecursorMzs_.resize(MAX_PEAKPAIRS);
+  }
+
+  vector<double> precursorDistancesPpm;
+  int numZeroPrecursorDeltas = 0;
+  for (vector< pair<double, double> >::const_iterator i = pairedPrecursorMzs_.begin();
+       i != pairedPrecursorMzs_.end();
+       i++) {
+    double diffTh = i->first - i->second;
+    if (diffTh == 0) {
+      ++numZeroPrecursorDeltas;
+    }
+    precursorDistancesPpm.push_back(diffTh * MILLION / i->first);
+  }
+
+  // check for conditions that would cause us to bomb out
+  if (precursorDistancesPpm.size() < Params::GetInt("pm-min-peak-pairs")) {
+    *precursorFailure = 
+      "Need >= " + Params::GetString("pm-min-peak-pairs") + " peak pairs to fit mixed distribution. "
+      "Got only " + StringUtils::ToString(precursorDistancesPpm.size());
+  }
+  if (precursorFailure->empty()) {
+    double proportionPrecursorMzsZero = (double)numZeroPrecursorDeltas / pairedPrecursorMzs_.size();
+    carp(CARP_DEBUG, "proportion zero: %f", proportionPrecursorMzsZero);
+    if (proportionPrecursorMzsZero > MAX_PROPORTION_PRECURSOR_DELTAS_ZERO) {
+      *precursorFailure =
+        "Too high a proportion of precursor mass differences (" +
+        StringUtils::ToString(proportionPrecursorMzsZero) + ") are exactly 0. "
+        "Some processing has been done on this run that param-medic can't handle. "
+        "You should investigate what that processing might be.";
+    }
+  }
+
+  double precursorMuPpm2Measures = numeric_limits<double>::quiet_NaN();
+  double precursorSigmaPpm2Measures = numeric_limits<double>::quiet_NaN();
+  if (precursorFailure->empty()) {
+    estimateMuSigma(precursorDistancesPpm, MIN_SIGMA_PPM,
+                    &precursorMuPpm2Measures, &precursorSigmaPpm2Measures);
+  }
+
+  if (pairedFragmentPeaks_.size() < Params::GetInt("pm-min-peak-pairs")) {
+    *fragmentFailure =
+      "Need >= " + Params::GetString("pm-min-peak-pairs") + " peak pairs to fit mixed distribution. "
+      "Got only " + StringUtils::ToString(pairedFragmentPeaks_.size());
+  }
+
+  double fragmentMuPpm2Measures = numeric_limits<double>::quiet_NaN();
+  double fragmentSigmaPpm2Measures = numeric_limits<double>::quiet_NaN();
+  if (fragmentFailure->empty()) {
+    if (pairedFragmentPeaks_.size() > MAX_PEAKPAIRS) {
+      carp(CARP_DEBUG, "Using %d of %d peak pairs for fragment...",
+           MAX_PEAKPAIRS, pairedFragmentPeaks_.size());
+      random_shuffle(pairedFragmentPeaks_.begin(), pairedFragmentPeaks_.end(), myrandom_limit);
+      pairedFragmentPeaks_.resize(MAX_PEAKPAIRS);
+    }
+    vector<double> fragmentDistancesTh;
+    vector<double> fragmentDistancesPpm;
+    for (vector< pair<const Peak*, const Peak*> >::const_iterator i = pairedFragmentPeaks_.begin();
+         i != pairedFragmentPeaks_.end();
+         i++) {
+      double diffTh = i->first->getLocation() - i->second->getLocation();
+      fragmentDistancesTh.push_back(diffTh);
+      fragmentDistancesPpm.push_back(diffTh * MILLION / i->first->getLocation());
+    }
+    // estimate the parameters of the component distributions for each of the mixed distributions
+    estimateMuSigma(fragmentDistancesPpm, MIN_SIGMA_PPM,
+                    &fragmentMuPpm2Measures, &fragmentSigmaPpm2Measures);
+  }
+
+  if (!precursorFailure->empty()) {
+    carp(CARP_DEBUG, "Failed precursor! %s", precursorFailure->c_str());
+  } else {
+    carp(CARP_DEBUG, "precursor_mu_ppm_2measures: %f", precursorMuPpm2Measures);
+    carp(CARP_DEBUG, "precursor_sigma_ppm_2measures: %f", precursorSigmaPpm2Measures);
+  }
+
+  if (!fragmentFailure->empty()) {
+    carp(CARP_DEBUG, "Failed fragment! %s", fragmentFailure->c_str());
+  } else {
+    carp(CARP_DEBUG, "fragment_mu_ppm_2measures: %f", fragmentMuPpm2Measures);
+    carp(CARP_DEBUG, "fragment_sigma_ppm_2measures: %f", fragmentSigmaPpm2Measures);
+  }
+
+  // what we have now measured, in the fit Gaussians, is the distribution of the difference
+  // of two values drawn from the distribution of error values.
+  // Assuming the error values are normally distributed with mean 0 and variance s^2, the
+  // differences are normally distributed with mean 0 and variance 2*s^2:
+  // http://mathworld.wolfram.com/NormalDifferenceDistribution.html
+  // i.e., differences are normally distributed with mean=0 and sd=sqrt(2)*s
+  // hence, if differences have sd=diff_sigma, then errors have sd diff_sigma/sqrt(2)
+  //
+  // incidentally, this transformation doesn't matter one bit, practically, since we're
+  // inferring a multiplier for this value empirically. But it lets us report something
+  // with an easily-interpretable meaning as an intermediate value
+  *precursorSigmaPpm = numeric_limits<double>::quiet_NaN();
+  *precursorPredictionPpm = numeric_limits<double>::quiet_NaN();
+  if (precursorFailure->empty()) {
+    *precursorSigmaPpm = precursorSigmaPpm2Measures / sqrt(2);
+    // generate prediction by multiplying by empirically-derived value
+    *precursorPredictionPpm = PRECURSOR_SIGMA_MULTIPLIER * *precursorSigmaPpm;
+  }
+  *fragmentSigmaPpm = numeric_limits<double>::quiet_NaN();
+  *fragmentPredictionTh = numeric_limits<double>::quiet_NaN();
+  if (fragmentFailure->empty()) {
+    *fragmentSigmaPpm = fragmentSigmaPpm2Measures / sqrt(2);
+    // generate prediction by multiplying by empirically-derived value
+    *fragmentPredictionTh = FRAGMENT_SIGMA_MULTIPLIER * *fragmentSigmaPpm;
+  }
+}
+
+void ParamMedicErrorCalculator::estimateMuSigma(
+  const vector<double>& data,
+  double minSigma,
+  double* muFit,
+  double* sigmaFit
+) {
+  double dataMin = data[0];
+  double dataMax = data[0];
+  double muMixedDist = data[0];
+  for (vector<double>::const_iterator i = data.begin() + 1; i != data.end(); i++) {
+    muMixedDist += *i;
+    if (*i < dataMin) {
+      dataMin = *i;
+    }
+    if (*i > dataMax) {
+      dataMax = *i;
+    }
+  }
+  muMixedDist /= data.size();
+
+  double sigmaMixedDist = 0;
+  for (vector<double>::const_iterator i = data.begin(); i != data.end(); i++) {
+    sigmaMixedDist += pow(*i - muMixedDist, 2);
+  }
+  sigmaMixedDist = sqrt(sigmaMixedDist / data.size());
+
+  carp(CARP_DEBUG, "mixed distribution: min %f, max %f, mean %f, sd %f",
+       dataMin, dataMax, muMixedDist, sigmaMixedDist);
+
+  // model the observed distribution as a mixture of Gaussian and uniform
+  ParamMedicModel model(muMixedDist, sigmaMixedDist, minSigma, dataMin, dataMax);
+  // fit the mixture model with EM
+  double improvement = model.fit(data);
+  carp(CARP_DEBUG, "model improvement: %f", improvement);
+
+  *muFit = model.getMu();
+  *sigmaFit = model.getSigma();
+  carp(CARP_DEBUG, "fit: mean=%f, sigma=%f", *muFit, *sigmaFit);
+}
+
+int ParamMedicErrorCalculator::getBinIndexPrecursor(double mz) const {
+  return (int)((mz - lowestPrecursorBinStartMz_) / (AVERAGINE_PEAK_SEPARATION / Params::GetInt("pm-charge")));
+}
+
+int ParamMedicErrorCalculator::getBinIndexFragment(double mz) const {
+  return (int)((mz - lowestFragmentBinStartMz_) / AVERAGINE_PEAK_SEPARATION);
+}
+
+double ParamMedicErrorCalculator::getPrecursorMz(const Spectrum* spectrum) const {
+  const vector<SpectrumZState>& zStates = spectrum->getZStates();
+  for (vector<SpectrumZState>::const_iterator i = zStates.begin(); i != zStates.end(); i++) {
+    if (i->getCharge() == Params::GetInt("pm-charge")) {
+      return i->getMZ();
+    }
+  }
+  return -1;
+}
+
+vector< pair<const Peak*, const Peak*> > ParamMedicErrorCalculator::pairFragments(
+  const Spectrum* prev,
+  const Spectrum* cur
+) const {
+  map<int, const Peak*> mapPrev = binFragments(prev);
+  map<int, const Peak*> mapCur = binFragments(cur);
+  vector< pair<const Peak*, const Peak*> > pairs;
+  for (map<int, const Peak*>::const_iterator i = mapPrev.begin(); i != mapPrev.end(); i++) {
+    map<int, const Peak*>::const_iterator j = mapCur.find(i->first);
+    if (j != mapCur.end()) {
+      pairs.push_back(make_pair(i->second, j->second));
+    }
+  }
+  return pairs;
+}
+
+map<int, const Peak*> ParamMedicErrorCalculator::binFragments(const Spectrum* spectrum) const {
+  map<int, const Peak*> binFragmentMap;
+  set<int> binsToRemove;
+  for (PeakIterator i = spectrum->begin(); i != spectrum->end(); i++) {
+    FLOAT_T mz = (*i)->getLocation();
+    FLOAT_T intensity = (*i)->getIntensity();
+    if (mz < Params::GetDouble("pm-min-frag-mz")) {
+      continue;
+    }
+    int binIndex = getBinIndexFragment(mz);
+    if (binFragmentMap.find(binIndex) != binFragmentMap.end()) {
+      binsToRemove.insert(binIndex);
+    } else {
+      binFragmentMap[binIndex] = *i;
+    }
+  }
+  for (set<int>::const_iterator i = binsToRemove.begin(); i != binsToRemove.end(); i++) {
+    binFragmentMap.erase(*i);
+  }
+  return binFragmentMap;
+}
+
+bool ParamMedicErrorCalculator::sortPairedFragments(
+  const pair<const Peak*, const Peak*> x,
+  const pair<const Peak*, const Peak*> y
+) {
+  return min(x.first->getIntensity(), x.second->getIntensity()) <
+         min(y.first->getIntensity(), y.second->getIntensity());
+}
+
+ParamMedicModel::ParamMedicModel(double nMean, double nStd, double nMinStd, double uStart, double uEnd):
+  normal_(NormalDistribution(nMean, nStd, nMinStd)), uniform_(UniformDistribution(uStart, uEnd)) {
+  weights_[0] = weights_[1] = log(0.5);
+  summaries_[0] = summaries_[1] = 0;
+}
+
+ParamMedicModel::~ParamMedicModel() {
+}
+
+double ParamMedicModel::fit(const vector<double>& data) {
+  const double stopThreshold = 0.1;
+  const int maxIterations = 1e8;
+
+  double initialLogProbSum = -numeric_limits<double>::infinity();
+  double lastLogProbSum;
+  int i = 0;
+  double improvement = numeric_limits<double>::infinity();
+  while (improvement > 0.1 && i < maxIterations + 1) {
+    fromSummaries();
+    double logProbSum = summarize(data);
+
+    if (i++ == 0) {
+      initialLogProbSum = logProbSum;
+    } else {
+      improvement = logProbSum - lastLogProbSum;
+      carp(CARP_DETAILED_DEBUG, "Improvement: %f", improvement);
+    }
+    lastLogProbSum = logProbSum;
+  }
+  clearSummaries();
+  return lastLogProbSum - initialLogProbSum;
+}
+
+double ParamMedicModel::getMu() const {
+  return normal_.getMu();
+}
+
+double ParamMedicModel::getSigma() const {
+  return normal_.getSigma();
+}
+
+double ParamMedicModel::summarize(const vector<double>& x) {
+  vector<double> r;
+  r.reserve(x.size() * 2);
+  normal_.logProbability(x, &r);
+  uniform_.logProbability(x, &r);
+
+  double logProbSum = 0;
+  for (size_t i = 0; i < x.size(); i++) {
+    double total = -numeric_limits<double>::infinity();
+
+    for (size_t j = 0; j < 2; j++) {
+      r[j * x.size() + i] += weights_[j];
+      total = pairLse(total, r[j * x.size() + i]);
+    }
+
+    for (size_t j = 0; j < 2; j++) {
+      r[j * x.size() + i] = exp(r[j * x.size() + i] - total);
+      summaries_[j] += r[j * x.size() + i];
+    }
+
+    logProbSum += total;
+  }
+
+  normal_.summarize(x, &r[0]);
+  uniform_.summarize(x, &r[x.size()]);
+  return logProbSum;
+}
+
+void ParamMedicModel::fromSummaries() {
+  double sum = summaries_[0] + summaries_[1];
+  if (sum == 0) {
+    return;
+  }
+
+  summaries_[0] /= sum;
+  summaries_[1] /= sum;
+
+  normal_.fromSummaries();
+  weights_[0] = log(summaries_[0]);
+  summaries_[0] = 0;
+
+  uniform_.fromSummaries();
+  weights_[1] = log(summaries_[1]);
+  summaries_[1] = 0;
+}
+
+void ParamMedicModel::clearSummaries() {
+  summaries_[0] = summaries_[1] = 0;
+  normal_.clearSummaries();
+  uniform_.clearSummaries();
+}
+
+double ParamMedicModel::pairLse(double x, double y) {
+  const double inf = numeric_limits<double>::infinity();
+  if (x == inf || y == inf) {
+    return inf;
+  } else if (x == -inf) {
+    return y;
+  } else if (y == -inf) {
+    return x;
+  } else if (x > y) {
+    return x + log(exp(y - x) + 1);
+  }
+  return y + log(exp(x - y) + 1);
+}
+
+ParamMedicModel::NormalDistribution::NormalDistribution(double mean, double std, double minStd):
+  mu_(mean), sigma_(std), minStd_(minStd),
+  logSigmaSqrt2Pi_(-log(std * SQRT_2_PI)), twoSigmaSquared_(2 * pow(std, 2)) {
+  clearSummaries();
+}
+
+ParamMedicModel::NormalDistribution::~NormalDistribution() {
+}
+
+double ParamMedicModel::NormalDistribution::getMu() const {
+  return mu_;
+}
+
+double ParamMedicModel::NormalDistribution::getSigma() const {
+  return sigma_;
+}
+
+void ParamMedicModel::NormalDistribution::logProbability(const vector<double>& x, vector<double>* r) const {
+  for (vector<double>::const_iterator i = x.begin(); i != x.end(); i++) {
+    r->push_back(logSigmaSqrt2Pi_ - pow(*i - mu_, 2) / twoSigmaSquared_);
+  }
+}
+
+void ParamMedicModel::NormalDistribution::summarize(const vector<double>& x, double* weights) {
+  for (size_t i = 0; i < x.size(); i++) {
+    summaries_[0] += weights[i];
+    summaries_[1] += weights[i] * x[i];
+    summaries_[2] += weights[i] * pow(x[i], 2);
+  }
+}
+
+void ParamMedicModel::NormalDistribution::fromSummaries() {
+  if (summaries_[0] == 0) {
+    return;
+  }
+  mu_ = summaries_[1] / summaries_[0];
+  sigma_ = sqrt(summaries_[2] / summaries_[0] - pow(summaries_[1], 2) / pow(summaries_[0], 2));
+  if (sigma_ < minStd_) {
+    sigma_ = minStd_;
+  }
+  clearSummaries();
+  logSigmaSqrt2Pi_ = -log(sigma_ * SQRT_2_PI);
+  twoSigmaSquared_ = 2 * pow(sigma_, 2);
+}
+
+void ParamMedicModel::NormalDistribution::clearSummaries() {
+  summaries_[0] = summaries_[1] = summaries_[2] = 0;
+}
+
+ParamMedicModel::UniformDistribution::UniformDistribution(double start, double end):
+  start_(start), end_(end), logP_(-log(end - start)) {
+  clearSummaries();
+}
+
+ParamMedicModel::UniformDistribution::~UniformDistribution() {
+}
+
+void ParamMedicModel::UniformDistribution::logProbability(const vector<double>& x, vector<double>* r) const {
+  for (vector<double>::const_iterator i = x.begin(); i != x.end(); i++) {
+    r->push_back(start_ <= *i && *i <= end_ ? logP_ : -numeric_limits<double>::infinity());
+  }
+}
+
+void ParamMedicModel::UniformDistribution::summarize(const vector<double>& x, double* weights) {
+  for (size_t i = 0; i < x.size(); i++) {
+    if (weights[i] <= 0) {
+      continue;
+    }
+    double value = x[i];
+    if (value < summaries_[0]) {
+      summaries_[0] = value;
+    }
+    if (value > summaries_[1]) {
+      summaries_[1] = value;
+    }
+  }
+}
+
+void ParamMedicModel::UniformDistribution::fromSummaries() {
+  start_ = summaries_[0];
+  end_ = summaries_[1];
+  logP_ = -log(end_ - start_);
+  clearSummaries();
+}
+
+void ParamMedicModel::UniformDistribution::clearSummaries() {
+  summaries_[0] = numeric_limits<double>::infinity();
+  summaries_[1] = -numeric_limits<double>::infinity();
+}
+
diff --git a/src/app/ParamMedicApplication.h b/src/app/ParamMedicApplication.h
new file mode 100644
index 0000000..c9c2ed9
--- /dev/null
+++ b/src/app/ParamMedicApplication.h
@@ -0,0 +1,165 @@
+#ifndef PARAMMEDIC_H
+#define PARAMMEDIC_H
+
+#include "CruxApplication.h"
+#include "Spectrum.h"
+
+class ParamMedicApplication : public CruxApplication {
+ public:
+  ParamMedicApplication();
+  virtual ~ParamMedicApplication();
+  virtual int main(int argc, char** argv);
+  virtual std::string getName() const;
+  virtual std::string getDescription() const;
+  virtual bool hidden() const;
+  virtual std::vector<std::string> getArgs() const;
+  virtual std::vector<std::string> getOptions() const;
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+  virtual bool needsOutputDirectory() const;
+  virtual void processParams();
+};
+
+class ParamMedicErrorCalculator {
+ public:
+  ParamMedicErrorCalculator();
+  virtual ~ParamMedicErrorCalculator();
+
+  void processFiles(const std::vector<std::string>& files);
+  void processSpectrum(Crux::Spectrum* spectrum);
+  void clearBins();
+
+  // this is to be run after all spectra have been processed;
+  // fits the mixed model to the mixed distributions of m/z differences
+  void calcMassErrorDist(
+    std::string* precursorFailure,
+    std::string* fragmentFailure,
+    double* precursorSigmaPpm,
+    double* fragmentSigmaPpm,
+    double* precursorPredictionPpm,
+    double* fragmentPredictionTh
+  );
+
+  // estimate mu and sigma of the mixed distribution, as initial estimate for Gaussian
+  static void estimateMuSigma(
+    const std::vector<double>& data,
+    double minSigma,
+    double* muFit,
+    double* sigmaFit
+  );
+ protected:
+  int getBinIndexPrecursor(double mz) const;
+  int getBinIndexFragment(double mz) const;
+  double getPrecursorMz(const Crux::Spectrum* spectrum) const;
+
+  // given two spectra, pair up their fragments that are in the same bin
+  std::vector< std::pair<const Peak*, const Peak*> > pairFragments(
+    const Crux::Spectrum* prev,
+    const Crux::Spectrum* cur
+  ) const;
+
+  // keep only one fragment per bin; if another fragment wants to be in the bin,
+  // toss them both out - this reduces ambiguity
+  std::map<int, const Peak*> binFragments(const Crux::Spectrum* spectrum) const;
+
+  static bool sortPairedFragments(
+    const std::pair<const Peak*, const Peak*> x,
+    const std::pair<const Peak*, const Peak*> y
+  );
+
+  // count the spectra that go by
+  int numTotalSpectra_;
+  int numPassingSpectra_;
+  // number and position of bins
+  double lowestPrecursorBinStartMz_;
+  double lowestFragmentBinStartMz_;
+  int numPrecursorBins_;
+  int numFragmentBins_;
+  // map from bin index to current spectrum
+  std::map<int, Crux::Spectrum*> spectra_;
+  // the paired peak values that we'll use to estimate mass error
+  std::vector< std::pair<const Peak*, const Peak*> > pairedFragmentPeaks_;
+  std::vector< std::pair<double, double> > pairedPrecursorMzs_;
+};
+
+class ParamMedicModel {
+ public:
+  ParamMedicModel(double nMean, double nStd, double nMinStd, double uStart, double uEnd);
+  virtual ~ParamMedicModel();
+
+  // fit the model to new data using EM.
+  // this method fits the components of the model to new data using the EM method.
+  // it will iterate until either max iterations has been reached, or the stop
+  // threshold has been passed.
+  double fit(const std::vector<double>& data);
+
+  double getMu() const;
+  double getSigma() const;
+
+  // summarize a batch of data and store sufficient statistics.
+  // this will run the expectation step of EM and store sufficient statistics in
+  // the appropriate distribution objects.
+  // the summarization can be thought of as a chunk of the E step, and the
+  // fromSummaries method as the M step.
+  double summarize(const std::vector<double>& x);
+
+  // fit the model to the collected sufficient statistics.
+  // fit the parameters of the model to the sufficient statistics gathered during
+  // the summarize calls.
+  // this should return an exact update.
+  void fromSummaries();
+
+  // clear the summary statistics stored in the object
+  void clearSummaries();
+
+  // perform log-sum-exp on a pair of numbers in a log space.
+  // this is calculated as z = log( e^x + e^y ).
+  // however, this causes underflow sometimes when x or y are too negative.
+  // a simplification of this is thus z = x + log( e^(y-x) + 1 ), where x is the
+  // greater number.
+  // if either of the inputs are infinity, return infinity, and if either of the
+  // inputs are negative infinity, then simply return the other input.
+  static double pairLse(double x, double y);
+ protected:
+  class NormalDistribution {
+   public:
+    NormalDistribution(double mean, double std, double minStd);
+    virtual ~NormalDistribution();
+    double getMu() const;
+    double getSigma() const;
+    void logProbability(const std::vector<double>& x, std::vector<double>* r) const;
+    void summarize(const std::vector<double>& x, double* r);
+    void fromSummaries();
+    void clearSummaries();
+   protected:
+    double mu_;
+    double sigma_;
+    double minStd_;
+    double logSigmaSqrt2Pi_;
+    double twoSigmaSquared_;
+    double summaries_[3];
+  };
+
+  class UniformDistribution {
+   public:
+    UniformDistribution(double start, double end);
+    virtual ~UniformDistribution();
+    void logProbability(const std::vector<double>& x, std::vector<double>* r) const;
+    void summarize(const std::vector<double>& x, double* r);
+    void summarize();
+    void fromSummaries();
+    void clearSummaries();
+   protected:
+    double start_;
+    double end_;
+    double logP_;
+    double summaries_[2];
+  };
+
+  NormalDistribution normal_;
+  UniformDistribution uniform_;
+  double weights_[2];
+  double summaries_[2];
+};
+
+#endif
+
diff --git a/src/app/PercolatorAdapter.cpp b/src/app/PercolatorAdapter.cpp
new file mode 100644
index 0000000..ed75a17
--- /dev/null
+++ b/src/app/PercolatorAdapter.cpp
@@ -0,0 +1,556 @@
+/**
+ * \file PercolatorAdapter.cpp
+ * $Revision$
+ * \brief Converts Percolator result objects to Crux result objects.
+ */
+
+#include "PercolatorAdapter.h"
+#include "DataSet.h"
+#include "util/AminoAcidUtil.h"
+#include "util/StringUtils.h"
+#include "FeatureNames.h"
+
+#include <map>
+
+using namespace std;
+
+/**
+ * Constructor for PercolatorAdapter. 
+ */
+PercolatorAdapter::PercolatorAdapter() : Caller() {
+  collection_ = new ProteinMatchCollection();
+  decoy_collection_ = new ProteinMatchCollection();
+}
+
+/**
+ * Destructor for PercolatorAdapter
+ */
+PercolatorAdapter::~PercolatorAdapter() {
+  // delete match collections created by this adapter
+  int collectionsDeleted = 0;
+  for (vector<MatchCollection*>::iterator iter = match_collections_made_.begin();
+       iter != match_collections_made_.end();
+       ++iter) {
+    delete *iter;
+    ++collectionsDeleted;
+  }
+  // delete proteins created by this adapter
+  int proteinsDeleted = 0;
+  for (vector<PostProcessProtein*>::iterator iter = proteins_made_.begin();
+       iter != proteins_made_.end();
+       ++iter) {
+    delete *iter;
+    ++proteinsDeleted;
+  }
+
+  deleteCollections();
+  carp(CARP_DEBUG, "PercolatorAdapter::~PercolatorAdapter - done. %d "
+       "MatchCollections deleted.", collectionsDeleted);
+}
+
+void PercolatorAdapter::deleteCollections() {
+  delete collection_;
+  delete decoy_collection_;
+  collection_ = NULL;
+  decoy_collection_ = NULL;
+}
+
+/**
+ * Adds PSM scores from Percolator objects into a ProteinMatchCollection
+ */
+void PercolatorAdapter::processPsmScores(Scores& allScores) {
+  if (collection_ == NULL || decoy_collection_ == NULL) {
+    return;
+  }
+
+  // Create new MatchCollection object that will be the converted Percolator Scores
+  MatchCollection* targets = new MatchCollection();
+  MatchCollection* decoys = new MatchCollection();
+  match_collections_made_.push_back(targets);
+  match_collections_made_.push_back(decoys);
+
+  // Find out which feature is lnNumSP and get indices of charge state features
+  bool lnNumDSP = false;
+  int lnNumSPIndex = findFeatureIndex("lnnumsp");
+  if (lnNumSPIndex == -1) {
+    if ((lnNumSPIndex = findFeatureIndex("lnnumdsp")) != -1) {
+      lnNumDSP = true;
+    }
+  }
+
+  map<int, int> chargeStates = mapChargeFeatures();
+
+  Normalizer* normalizer = Normalizer::getNormalizer();
+  double* normSub = normalizer->getSub();
+  double* normDiv = normalizer->getDiv();
+
+  // Iterate over each ScoreHolder in Scores object
+  for (vector<ScoreHolder>::iterator score_itr = allScores.begin();
+       score_itr != allScores.end();
+       score_itr++) {
+    bool is_decoy = score_itr->isDecoy();
+
+    PSMDescription* psm = score_itr->pPSM;
+
+    int psm_file_idx = -1;
+    int psm_charge;
+    parsePSMId(psm->id_, psm_file_idx, psm_charge);
+
+    // Try to look up charge state in map
+    int charge_state = -1;
+    for (map<int, int>::const_iterator i = chargeStates.begin();
+         i != chargeStates.end();
+         ++i) {
+      if (psm->features[i->first] > 0) {
+        charge_state = i->second;
+        break;
+      }
+    }
+
+    if (charge_state == -1) {
+      carp_once(CARP_WARNING, "Could not determine charge state of PSM");
+    }
+
+    Crux::Peptide* peptide = extractPeptide(psm, charge_state, is_decoy);
+    if (peptide == NULL) {
+      deleteCollections();
+      return;
+    }
+
+    SpectrumZState zState;
+    zState.setSinglyChargedMass(psm->expMass, charge_state);
+    // calcMass/expMass = singly charged mass
+    Crux::Spectrum* spectrum = new Crux::Spectrum(
+      psm->scan, psm->scan, zState.getMZ(), vector<int>(1, charge_state), "");
+
+    Crux::Match* match = new Crux::Match(peptide, spectrum, zState, is_decoy);
+    match->setScore(PERCOLATOR_SCORE, score_itr->score);
+    match->setScore(PERCOLATOR_QVALUE, score_itr->q);
+    match->setScore(PERCOLATOR_PEP, score_itr->pep);
+
+    match->setFileIndex(psm_file_idx);
+
+    // Get matches/spectrum
+    if (lnNumSPIndex < 0) {
+      match->setLnExperimentSize(-1);
+    } else {
+      double lnNumSP = unnormalize(psm, lnNumSPIndex, normDiv, normSub);
+      match->setLnExperimentSize(lnNumSP);
+    }
+
+    if (!is_decoy) {
+      targets->addMatch(match);
+    } else {
+      decoys->addMatch(match);
+    }
+    match->setPostProcess(true); // so spectra get deleted when match does
+    Crux::Match::freeMatch(match); // so match gets deleted when collection does
+  }
+
+  if (lnNumSPIndex >= 0 && lnNumDSP) {
+    targets->setHasDistinctMatches(true);
+    decoys->setHasDistinctMatches(true);
+  }
+
+  targets->setScoredType(PERCOLATOR_SCORE, true);
+  targets->setScoredType(PERCOLATOR_QVALUE, true);
+  targets->setScoredType(PERCOLATOR_PEP, true);
+  targets->populateMatchRank(PERCOLATOR_SCORE);
+
+  decoys->setScoredType(PERCOLATOR_SCORE, true);
+  decoys->setScoredType(PERCOLATOR_QVALUE, true);
+  decoys->setScoredType(PERCOLATOR_PEP, true);
+  decoys->populateMatchRank(PERCOLATOR_SCORE);
+
+  // sort by q-value
+  targets->sort(PERCOLATOR_QVALUE);
+  decoys->sort(PERCOLATOR_QVALUE);
+
+  collection_->addMatches(targets);
+  decoy_collection_->addMatches(decoys);
+}
+
+/**
+ * Adds peptide scores from Percolator objects into a ProteinMatchCollection
+ */
+void PercolatorAdapter::processPeptideScores(Scores& allScores) {
+  if (collection_ == NULL || decoy_collection_ == NULL) {
+    return;
+  }
+
+  carp(CARP_DEBUG, "Setting peptide scores");
+
+  // Iterate over each ScoreHolder in Scores object
+  for (vector<ScoreHolder>::iterator score_itr = allScores.begin();
+       score_itr != allScores.end();
+       score_itr++) {
+
+    PSMDescription* psm = score_itr->pPSM;
+    string sequence;
+    MODIFIED_AA_T* mod_seq = getModifiedAASequence(psm, sequence);
+    if (mod_seq == NULL) {
+      deleteCollections();
+      return;
+    }
+
+    // Set scores
+    PeptideMatch* peptide_match = !score_itr->isDecoy()
+      ? collection_->getPeptideMatch(mod_seq)
+      : decoy_collection_->getPeptideMatch(mod_seq);
+    free(mod_seq);
+    if (peptide_match == NULL) {
+      deleteCollections();
+      return;
+    }
+    peptide_match->setScore(PERCOLATOR_SCORE, score_itr->score);
+    peptide_match->setScore(PERCOLATOR_QVALUE, score_itr->q);
+    peptide_match->setScore(PERCOLATOR_PEP, score_itr->pep);
+  }
+}
+  
+/**
+ * Adds protein scores from Percolator objects into a ProteinMatchCollection
+ */
+void PercolatorAdapter::processProteinScores(ProteinProbEstimator* protEstimator) {
+  if (collection_ == NULL || decoy_collection_ == NULL) {
+    return;
+  }
+
+  vector<ProteinMatch*> matches;
+  vector<ProteinMatch*> decoy_matches;
+  const vector<ProteinScoreHolder>& protein_scores = protEstimator->getProteins();
+  
+  for (vector<ProteinScoreHolder>::const_iterator score_iter = protein_scores.begin();
+       score_iter != protein_scores.end();
+       score_iter++) {
+    // Set scores
+    ProteinMatch* protein_match;
+    if (!score_iter->isDecoy()) {
+      protein_match = collection_->getProteinMatch(score_iter->getName());
+      matches.push_back(protein_match);
+    } else {
+      protein_match = decoy_collection_->getProteinMatch(score_iter->getName());
+      decoy_matches.push_back(protein_match);
+    }
+    protein_match->setScore(PERCOLATOR_SCORE, -log(score_iter->getP()));
+    protein_match->setScore(PERCOLATOR_QVALUE, score_iter->getQ());
+    protein_match->setScore(PERCOLATOR_PEP, score_iter->getPEP());
+  }
+
+  // set percolator score ranks
+  std::sort(matches.begin(), matches.end(),
+            PercolatorAdapter::comparePercolatorScores);
+  std::sort(decoy_matches.begin(), decoy_matches.end(),
+            PercolatorAdapter::comparePercolatorScores);
+  int cur_rank = 0;
+  for (vector<ProteinMatch*>::iterator iter = matches.begin();
+       iter != matches.end();
+       ++iter) {
+    (*iter)->setRank(PERCOLATOR_SCORE, ++cur_rank);
+  }
+  cur_rank = 0;
+  for (vector<ProteinMatch*>::iterator iter = decoy_matches.begin();
+       iter != decoy_matches.end();
+       ++iter) {
+    (*iter)->setRank(PERCOLATOR_SCORE, ++cur_rank);
+  }
+}
+
+/*
+ *\returns the ProteinMatchCollection, to be called after Caller::run() is finished
+ */
+ProteinMatchCollection* PercolatorAdapter::getProteinMatchCollection() {
+  return collection_;
+}
+
+/*
+ *\returns the decoy ProteinMatchCollection, to be called after Caller::run() is finished
+ */
+ProteinMatchCollection* PercolatorAdapter::getDecoyProteinMatchCollection() {
+  return decoy_collection_;
+}
+
+bool PercolatorAdapter::parsePSMId(
+  const string& psm_id, ///< psm id to parse information from
+  int& file_idx, ///< file index of psm
+  int& charge ///< charge of psm
+) {
+  // <target|decoy>_<fileindex>_<scan>_<charge>_<rank> OR
+  // <filestem>_<scan>_<charge>_<rank>
+  vector<string> tokens = StringUtils::Split(psm_id, '_');
+  if (tokens.size() < 4) {
+    return false;
+  }
+  try {
+    if (tokens.size() == 5 && (tokens[0] == "target" || tokens[0] == "decoy")) {
+      // Parse as <target|decoy>_<fileindex>_<scan>_<charge>_<rank>
+      file_idx = StringUtils::FromString<int>(tokens[1]);
+      // tokens[2] = scan
+      charge = StringUtils::FromString<int>(tokens[3]);
+      // tokens[4] = rank
+    } else {
+      // Try to parse as <filestem>_<scan>_<charge>_<rank>
+      // tokens.back() = rank
+      tokens.pop_back();
+      charge = StringUtils::FromString<int>(tokens.back());
+      tokens.pop_back();
+      // tokens.back() = scan
+      tokens.pop_back();
+      stringstream ss;
+      for (vector<string>::const_iterator i = tokens.begin(); i != tokens.end(); i++) {
+        if (i != tokens.begin()) {
+          ss << '_' << *i;
+        } else {
+          ss << *i;
+        }
+      }
+      file_idx = Crux::Match::findFileIndex(ss.str(), true);
+    }
+    return true;
+  } catch (...) {
+    return false;
+  }
+}
+
+/**
+ * Compares two AbstractMatches by Percolator score
+ */
+bool PercolatorAdapter::comparePercolatorScores(
+  AbstractMatch* lhs, ///< first match with Percolator scores to compare
+  AbstractMatch* rhs ///< second match with Percolator scores to compare
+) {
+  if (!lhs->hasScore(PERCOLATOR_SCORE) || !rhs->hasScore(PERCOLATOR_SCORE)) {
+    carp(CARP_FATAL, "Could not compare matches by Percolator score.");
+  }
+  return lhs->getScore(PERCOLATOR_SCORE) < rhs->getScore(PERCOLATOR_SCORE);
+}
+
+/**
+* \returns a Crux peptide from the PSM
+*/
+Crux::Peptide* PercolatorAdapter::extractPeptide(
+  PSMDescription* psm, ///< psm
+  int charge_state, ///< charge state
+  bool is_decoy ///< is psm a decoy?
+) {
+  string seq;
+  MODIFIED_AA_T* mod_seq = getModifiedAASequence(psm, seq);
+  if (mod_seq == NULL) {
+    return NULL;
+  }
+
+  string full_peptide(psm->getFullPeptide());
+  carp(CARP_DEBUG, "full peptide:%s", full_peptide.c_str());
+  carp(CARP_DEBUG, "=======================");
+  string n_term = "";
+  string c_term = "";
+  if (!full_peptide.empty()) {
+    n_term += full_peptide[0];
+    c_term += full_peptide[full_peptide.length() - 1];
+  }
+
+  // add proteins
+  Crux::Peptide* peptide = NULL;
+  for (vector<string>::const_iterator i = psm->proteinIds.begin();
+       i != psm->proteinIds.end();
+       ++i) {
+    PostProcessProtein* protein = new PostProcessProtein();
+    proteins_made_.push_back(protein);
+    protein->setId(i->c_str());
+    int start_idx = protein->findStart(seq, n_term, c_term);
+    if (peptide == NULL) {
+      peptide = new Crux::Peptide(seq.length(), protein, start_idx);
+      peptide->setModifiedAASequence(mod_seq, is_decoy);
+      free(mod_seq);
+    } else {
+      peptide->addPeptideSrc(new PeptideSrc(NON_SPECIFIC_DIGEST, protein, start_idx));
+    }
+  }
+
+  return peptide;
+}
+
+/**
+ * \returns the modified and unmodified peptide sequence
+ * for the psm
+ */
+MODIFIED_AA_T* PercolatorAdapter::getModifiedAASequence(
+  PSMDescription* psm, ///< psm -in
+  string& seq ///< sequence -out
+) {
+  string perc_seq = psm->getFullPeptideSequence();
+  if (perc_seq.length() >= 5 &&
+      perc_seq[1] == '.' && perc_seq[perc_seq.length() - 2] == '.') {
+    // Trim off flanking AA if they exist
+    perc_seq = perc_seq.substr(2, perc_seq.length() - 4);
+  }
+  
+  if (perc_seq.find("UNIMOD") != string::npos) {
+    // UNIMOD modifications currently not supported
+    return NULL;
+  }
+
+  MODIFIED_AA_T* mod_seq = NULL;
+  carp(CARP_DEBUG, "PercolatorAdapter::getModifiedAASequence(): seq:%s", perc_seq.c_str());
+
+  // Turn off warnings
+  int verbosity = get_verbosity_level();
+  set_verbosity_level(0);
+
+  int mod_len = convert_to_mod_aa_seq(perc_seq.c_str(), &mod_seq, MOD_MASS_ONLY);
+  seq = string(mod_len, '\0');
+  for (int i = 0; i < mod_len; i++) {
+    seq[i] = modified_aa_to_char(mod_seq[i]);
+  }
+
+  // Restore verbosity
+  set_verbosity_level(verbosity);
+
+  return mod_seq;
+}
+
+// Finds the index of the given feature name (case insensitive).
+int PercolatorAdapter::findFeatureIndex(string feature) {
+  feature = StringUtils::ToLower(feature);
+  vector<string> features = StringUtils::Split(DataSet::getFeatureNames().getFeatureNames(), '\t');
+  for (int i = 0; i < features.size(); ++i) {
+    if (StringUtils::ToLower(features[i]) == feature) {
+      return i;
+    }
+  }
+  return -1;
+}
+
+// Generate a map where the keys are feature indices and their values are the
+// charge state of that feature.
+map<int, int> PercolatorAdapter::mapChargeFeatures() {
+  map<int, int> charges;
+  vector<string> features = StringUtils::Split(DataSet::getFeatureNames().getFeatureNames(), '\t');
+  for (int i = 0; i < features.size(); ++i) {
+    if (StringUtils::StartsWith(StringUtils::ToLower(features[i]), "charge")) {
+      size_t charge = StringUtils::FromString<size_t>(features[i].substr(6));
+      charges[i] = charge;
+    }
+  }
+  return charges;
+}
+
+// Unnormalize a PSM feature to obtain its original value.
+// normDiv and normSub are optional; if they are NULL, they will be
+// automatically retrieved.
+double PercolatorAdapter::unnormalize(
+  const PSMDescription* psm,
+  int featureIndex,
+  double* normDiv,
+  double* normSub
+) {
+  if (normDiv == NULL || normSub == NULL) {
+    Normalizer* normalizer = Normalizer::getNormalizer();
+    normDiv = normalizer->getDiv();
+    normSub = normalizer->getSub();
+  }
+  return psm->features[featureIndex] * normDiv[featureIndex] + normSub[featureIndex];
+}
+
+void PercolatorAdapter::printScores(Scores* scores, int label, ostream& os) {
+  std::vector<ScoreHolder>::iterator scoreIt = scores->begin();
+
+  bool lnNumDSP = false;
+  int lnNumSPIdx = PercolatorAdapter::findFeatureIndex("lnnumsp");
+  if (lnNumSPIdx == -1) {
+    if ((lnNumSPIdx = PercolatorAdapter::findFeatureIndex("lnnumdsp")) != -1) {
+      lnNumDSP = true;
+    }
+  }
+
+  os //<< "file\t"
+     << "file_idx\t"
+     << "scan\t"
+     << "charge\t"
+     << "spectrum precursor m/z\t"
+     << "spectrum neutral mass\t"
+     << "peptide mass\t"
+     << "percolator score\t"
+     << "percolator q-value\t"
+     << "percolator PEP\t"
+     << (lnNumDSP ? "distinct matches/spectrum" : "total matches/spectrum") << '\t'
+     << "sequence\t"
+     //<< "modifications\t"
+     << "protein id\t"
+     << "flanking aa\n";
+
+  Normalizer* normalizer = Normalizer::getNormalizer();
+  double* nSub = normalizer->getSub();
+  double* nDiv = normalizer->getDiv();
+
+  for ( ; scoreIt != scores->end(); ++scoreIt) {
+    if (scoreIt->label != label) {
+      continue;
+    }
+    std::string fileIdxStr, chargeStr;
+    int charge = 0;
+    const std::string& psmId = scoreIt->pPSM->getId();
+    std::vector<std::string> idPieces = StringUtils::Split(psmId, '_');
+    if (idPieces.size() == 5) {
+      fileIdxStr = idPieces[1];
+      chargeStr = idPieces[3];
+      StringUtils::TryFromString(chargeStr, &charge);
+    }
+
+    std::string flankingStr = "XX";
+    std::string seq = scoreIt->pPSM->peptide;
+    if (seq.length() >= 5 && seq[1] == '.' && seq[seq.length() - 2] == '.') {
+      flankingStr[0] = seq[0];
+      flankingStr[1] = seq[seq.length() - 1];
+      seq = seq.substr(2, seq.length() - 4);
+    }
+
+    double neutralMass = scoreIt->pPSM->expMass - MASS_PROTON;
+    double peptideMass = MASS_H2O_MONO; // Reported as 0 if a problem occurs
+    for (size_t i = 0; i < seq.length(); i++) {
+      if (seq[i] == '[') {
+        double modMass = 0.0;
+        size_t j = seq.find(']', ++i);
+        if (j == string::npos || !StringUtils::TryFromString(seq.substr(i, j - i), &modMass)) {
+          peptideMass = 0;
+          break;
+        }
+        peptideMass += modMass;
+        i = j;
+      } else {
+        try {
+          peptideMass += AminoAcidUtil::GetMass(seq[i], true);
+        } catch (...) {
+          peptideMass = 0;
+          break;
+        }
+      }
+    }
+
+    int precision = Params::GetInt("precision");
+    int massPrecision = Params::GetInt("mass-precision");
+    os //<< "" << '\t' // file
+       << fileIdxStr << '\t'
+       << scoreIt->pPSM->scan << '\t'
+       << chargeStr << '\t'
+       << StringUtils::ToString((charge > 0 ? neutralMass/charge + MASS_PROTON : 0), massPrecision) << '\t'
+       << StringUtils::ToString(neutralMass, massPrecision) << '\t'
+       << StringUtils::ToString(peptideMass, massPrecision) << '\t'
+       << StringUtils::ToString(scoreIt->score, precision) << '\t'
+       << StringUtils::ToString(scoreIt->q, precision, false) << '\t'
+       << StringUtils::ToString(scoreIt->pep, precision, false) << '\t'
+       << (lnNumSPIdx >= 0 ? exp(PercolatorAdapter::unnormalize(scoreIt->pPSM, lnNumSPIdx, nDiv, nSub)) : 0) << '\t'
+       << seq << '\t'
+       //<< "" << '\t' // mods
+       << StringUtils::Join(scoreIt->pPSM->proteinIds, ',') << '\t'
+       << flankingStr << std::endl;
+  }
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/app/PercolatorAdapter.h b/src/app/PercolatorAdapter.h
new file mode 100644
index 0000000..16a23f5
--- /dev/null
+++ b/src/app/PercolatorAdapter.h
@@ -0,0 +1,140 @@
+/**
+ * \file PercolatorAdapter.h
+ * $Revision$
+ * \brief Converts Percolator result objects to Crux result objects.
+ */
+
+#ifndef PERCOLATORADAPTER_H_
+#define PERCOLATORADAPTER_H_
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <vector>
+
+#include "Caller.h"
+#include "model/MatchCollection.h"
+#include "model/PeptideMatch.h"
+#include "model/PostProcessProtein.h"
+#include "model/ProteinMatchCollection.h"
+#include "model/ProteinMatch.h"
+#include "ProteinProbEstimator.h"
+#include "model/SpectrumMatch.h"
+#include "Scores.h"
+
+/**
+ * \brief: Converts Percolator results objects to Crux results objects.
+ * Class inherits the Caller class from percolator, which runs the percolator
+ * algorithm and prints out the results.
+ * All of the collections can then be accessed via the ProteinMatchCollection object.
+ * During the execution of Caller::run(), percolator discards the psms after
+ * Calculating the peptide level statistics, hence the need to pull the data for the
+ * psms before the removal occurs.
+ */
+class PercolatorAdapter : public Caller {
+
+ public:
+
+  /**
+   * Constructor for PercolatorAdapter.
+   */
+  PercolatorAdapter();
+
+  /**
+   * Destructor for PercolatorAdapter
+   */
+  virtual ~PercolatorAdapter();
+
+  void deleteCollections();
+
+  /**
+   * Adds PSM scores from Percolator objects into a ProteinMatchCollection
+   */
+  void processPsmScores(Scores& allScores);
+
+  /**
+   * Adds peptide scores from Percolator objects into a ProteinMatchCollection
+   */
+  void processPeptideScores(Scores& allScores);
+
+  /**
+   * Adds protein scores from Percolator objects into a ProteinMatchCollection
+   */
+  void processProteinScores(ProteinProbEstimator* protEstimator);
+
+  /*
+   *\returns the ProteinMatchCollection, to be called after Caller::run() is finished
+   */
+  ProteinMatchCollection* getProteinMatchCollection();
+
+  /**
+   *\returns the decoy ProteinMatchCollection, to be called after Caller::run() is finished
+   */
+  ProteinMatchCollection* getDecoyProteinMatchCollection();
+
+  static int findFeatureIndex(std::string feature);
+  static std::map<int, int> mapChargeFeatures(); // map index of feature -> charge
+
+  static double unnormalize(
+    const PSMDescription* psm,
+    int featureIndex,
+    double* normDiv = NULL,
+    double* normSub = NULL
+  );
+
+  static void printScores(Scores* scores, int label, std::ostream& os);
+  
+ protected:
+    
+  ProteinMatchCollection* collection_; ///< Collection containing all of the psm, peptide, and protein results.
+  ProteinMatchCollection* decoy_collection_;  ///< Decoy ProteinMatchCollection
+  std::vector<MatchCollection*> match_collections_made_; ///< MatchCollections created
+  std::vector<PostProcessProtein*> proteins_made_; ///< Proteins created
+  
+  /**
+   * Given a Percolator psm_id in the form ".*_([0-9]+)_[^_]*",
+   * parse the file_idx, scan#, charge, and rank
+   * Returns true on success
+   */
+  static bool parsePSMId(
+    const std::string& psm_id, ///<psmid to parse
+    int& file_idx, ///< psm file idx
+    int& charge ///< psm charge
+  );
+
+  /**
+   * Compare two AbstractMatches by Percolator score
+   */
+  static bool comparePercolatorScores(
+    AbstractMatch* lhs, ///< first match with Percolator score to compare
+    AbstractMatch* rhs ///< second match with Percolator score to compare
+  );
+
+  /**
+   * \returns a Crux peptide from the PSM
+   */
+  Crux::Peptide* extractPeptide(
+    PSMDescription* psm, ///< psm
+    int charge_state, ///< charge state
+    bool is_decoy ///< is psm a decoy?
+    );
+
+  /**
+   * \returns the modified and unmodified peptide sequence
+   * for the psm
+   */
+  static MODIFIED_AA_T* getModifiedAASequence(
+    PSMDescription* psm, ///< psm -in
+    std::string& seq ///< sequence -out
+    );
+};
+
+#endif /* PERCOLATORADAPTER_H_ */
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/app/PercolatorApplication.cpp b/src/app/PercolatorApplication.cpp
new file mode 100644
index 0000000..a3e13ca
--- /dev/null
+++ b/src/app/PercolatorApplication.cpp
@@ -0,0 +1,601 @@
+/**
+ * \file PercolatorApplication.cpp 
+ * \brief Runs Percolator
+ *****************************************************************************/
+#include "MakePinApplication.h"
+#include "PercolatorApplication.h"
+#include "PercolatorAdapter.h"
+#include "Caller.h"
+#include "util/Params.h"
+#include <string>
+#include <algorithm>
+#include <sstream>
+#include <iomanip>
+#include <ios>
+#include "util/CarpStreamBuf.h"
+#include "util/FileUtils.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+#include "io/MzIdentMLWriter.h"
+#include "model/ProteinMatchCollection.h"
+#include "io/PMCDelimitedFileWriter.h"
+#include "io/PMCPepXMLWriter.h"
+#include "io/PMCSQTWriter.h"
+
+
+using namespace std;
+
+/**
+ * \returns a blank PercolatorApplication object
+ */
+PercolatorApplication::PercolatorApplication() {
+}
+
+/**
+ * Destructor
+ */
+PercolatorApplication::~PercolatorApplication() {
+}
+
+/**
+ * main method for PercolatorApplication
+ */
+int PercolatorApplication::main(int argc, char** argv) {
+  string input_pin = Params::GetString("peptide-spectrum matches");
+  carp(CARP_INFO, "Reading file %s", input_pin.c_str());
+
+  // Check if we need to run make-pin first
+  if (!Params::GetBool("feature-file-in") &&
+      (Params::GetBool("list-of-files") ||
+       StringUtils::IEndsWith(input_pin, ".txt") ||
+       StringUtils::IEndsWith(input_pin, ".sqt") ||
+       StringUtils::IEndsWith(input_pin, ".pep.xml") ||
+       StringUtils::IEndsWith(input_pin, ".mzid"))) {
+    vector<string> result_files;
+    get_search_result_paths(input_pin, result_files);
+
+    input_pin = make_file_path("make-pin.pin");
+
+    vector<string>::const_iterator fileIter = result_files.begin();
+    if (StringUtils::IEndsWith(*fileIter, ".pin")) {
+      if (FileUtils::Exists(input_pin)) {
+        if (Params::GetBool("overwrite")) {
+          FileUtils::Remove(input_pin);
+        } else {
+          carp(CARP_FATAL, "The file '%s' already exists and cannot be overwritten. "
+               "Use --overwrite T to replace or choose a different output file name",
+               input_pin.c_str());
+        }
+      }
+      FileUtils::Copy(*fileIter, input_pin);
+      string headers;
+      fstream out(input_pin.c_str());
+      if (!out.good()) {
+        carp(CARP_FATAL, "Filestream error '%s'", input_pin.c_str());
+      }
+      getline(out, headers);
+      out.seekp(0, ios_base::end);
+      for (fileIter++; fileIter != result_files.end(); fileIter++) {
+        if (!StringUtils::IEndsWith(*fileIter, ".pin")) {
+          FileUtils::Remove(input_pin);
+          carp(CARP_FATAL, "Cannot mix .pin with non-pin files");
+        }
+        ifstream in(fileIter->c_str());
+        if (!in.good()) {
+          FileUtils::Remove(input_pin);
+          carp(CARP_FATAL, "Error opening file '%s' for reading", fileIter->c_str());
+        }
+        string inLine;
+        getline(in, inLine);
+        if (headers != inLine) {
+          FileUtils::Remove(input_pin);
+          carp(CARP_FATAL, "Headers in pin file '%s' were '%s', but expected '%s'",
+               fileIter->c_str(), inLine.c_str(), headers.c_str());
+        }
+        while (!in.eof()) {
+          getline(in, inLine);
+          out << inLine;
+          if (in.peek() != EOF) {
+            out << endl;
+          }
+        }
+      }
+    } else {
+      carp(CARP_INFO, "Converting input to pin format.");
+      if (MakePinApplication::main(result_files) != 0 || !FileUtils::Exists(input_pin)) {
+        carp(CARP_FATAL, "make-pin failed. Not running Percolator.");
+      }
+      carp(CARP_INFO, "File conversion complete.");
+    }
+  }
+  return main(input_pin);
+}
+
+/**
+ * \brief runs percolator on the input pin
+ * \returns whether percolator was successful or not
+ */
+int PercolatorApplication::main(
+  const string& input_pin ///< file path of pin to process.
+  ) {
+  /* build argument list */
+  vector<string> perc_args_vec;
+  perc_args_vec.push_back("percolator");
+
+  string output_target_peptides = make_file_path(getFileStem() + ".target.peptides.txt");
+  string output_target_psms = make_file_path(getFileStem() + ".target.psms.txt");
+  string output_target_proteins = make_file_path(getFileStem() + ".target.proteins.txt");
+  string output_decoy_peptides = make_file_path(getFileStem() + ".decoy.peptides.txt");
+  string output_decoy_psms = make_file_path(getFileStem() + ".decoy.psms.txt");
+  string output_decoy_proteins = make_file_path(getFileStem() + ".decoy.proteins.txt");
+
+  if (Params::GetBool("only-psms")) {
+    perc_args_vec.push_back("--only-psms");
+  }
+
+  // Target peptides file is written to prevent writing to stdout
+  perc_args_vec.push_back("--results-peptides");
+  perc_args_vec.push_back(output_target_peptides);
+  if (Params::GetBool("txt-output")) {
+    perc_args_vec.push_back("--decoy-results-peptides");
+    perc_args_vec.push_back(output_decoy_peptides);
+    perc_args_vec.push_back("--results-psms");
+    perc_args_vec.push_back(output_target_psms);
+    perc_args_vec.push_back("--decoy-results-psms");
+    perc_args_vec.push_back(output_decoy_psms);
+  }
+
+  //add verbosity
+  perc_args_vec.push_back("--verbose");
+  int verbosity = get_verbosity_level();
+  if (verbosity <= CARP_FATAL) {
+    perc_args_vec.push_back("0");
+  } else if (verbosity <= CARP_ERROR) {
+    perc_args_vec.push_back("1");
+  } else if (verbosity <= CARP_WARNING) {
+    perc_args_vec.push_back("1");
+  } else if (verbosity <= CARP_INFO) {
+    perc_args_vec.push_back("2");
+  } else if (verbosity <= CARP_DETAILED_INFO) {
+    perc_args_vec.push_back("3");
+  } else if (verbosity <= CARP_DEBUG) {
+    perc_args_vec.push_back("4");
+  } else if (verbosity <= CARP_DETAILED_DEBUG) {
+    perc_args_vec.push_back("5");
+  } else if (verbosity <= CARP_MAX) {
+    perc_args_vec.push_back("5");
+  }
+
+  perc_args_vec.push_back("--protein-decoy-pattern");
+  string decoy_pre = Params::GetString("decoy-prefix");
+  perc_args_vec.push_back(!decoy_pre.empty() ? decoy_pre : "random_");
+
+  string seed_parameter = Params::GetString("percolator-seed");
+  unsigned int seed_value;
+  if (seed_parameter == "time") {
+    time_t seconds; // use current time to seed
+    time(&seconds); // Get value from sys clock and set seconds variable.
+    // percolator accepts seed values 1-20000
+    seed_value = (unsigned int)seconds % 20000 + 1;
+  } else if ((seed_value = StringUtils::FromString<unsigned>(seed_parameter)) == 0) {
+    // seed 0 causes segfault in percolator 
+    ++seed_value;
+  }
+  perc_args_vec.push_back("--seed");
+  perc_args_vec.push_back(StringUtils::ToString(seed_value));
+
+  if (Params::GetBool("pout-output")) {
+    perc_args_vec.push_back("--xmloutput");
+    perc_args_vec.push_back(make_file_path(getFileStem() + ".pout.xml"));
+    if (Params::GetBool("decoy-xml-output")) {
+      perc_args_vec.push_back("--decoy-xml-output");
+    }
+  }
+
+  perc_args_vec.push_back("--subset-max-train");
+  perc_args_vec.push_back(Params::GetString("subset-max-train"));
+
+  if (!Params::IsDefault("c-pos")) {
+    perc_args_vec.push_back("--Cpos");
+    perc_args_vec.push_back(Params::GetString("c-pos"));
+  }
+ 
+  if (!Params::IsDefault("c-neg")) {
+    perc_args_vec.push_back("--Cneg");
+    perc_args_vec.push_back(Params::GetString("c-neg"));
+  }
+ 
+  perc_args_vec.push_back("--trainFDR");
+  perc_args_vec.push_back(Params::GetString("train-fdr"));
+ 
+  perc_args_vec.push_back("--testFDR");
+  perc_args_vec.push_back(Params::GetString("test-fdr"));
+
+  perc_args_vec.push_back("--maxiter");
+  perc_args_vec.push_back(Params::GetString("maxiter"));
+
+  if (!Params::GetString("search-input").empty()) {
+    perc_args_vec.push_back("--search-input");
+    perc_args_vec.push_back(Params::GetString("search-input"));
+  }
+
+  if (Params::GetBool("quick-validation")) {
+    perc_args_vec.push_back("--quick-validation");
+  }
+
+
+  if (Params::GetBool("feature-file-out")) {
+    perc_args_vec.push_back("--tab-out");
+    perc_args_vec.push_back(make_file_path(getFileStem() + ".feature.txt"));
+  }
+
+  if (Params::GetBool("output-weights")) {
+    perc_args_vec.push_back("--weights");
+    perc_args_vec.push_back(make_file_path(getFileStem() + ".weights.txt"));
+  }
+  
+  if (!Params::GetString("init-weights").empty()) {
+    perc_args_vec.push_back("--init-weights");
+    perc_args_vec.push_back(Params::GetString("init-weights"));
+  }
+
+  if (!Params::GetString("default-direction").empty()) {  
+    perc_args_vec.push_back("--default-direction");
+    perc_args_vec.push_back(Params::GetString("default-direction"));
+  }
+
+  if (Params::GetBool("unitnorm")) {
+    perc_args_vec.push_back("--unitnorm");
+  }
+
+  if (Params::GetBool("test-each-iteration")) {
+    perc_args_vec.push_back("--test-each-iteration");
+  }
+
+  if (Params::GetBool("override")) {
+    perc_args_vec.push_back("--override");
+  }
+ 
+  if (Params::GetBool("klammer")) {
+    perc_args_vec.push_back("--klammer");
+  }
+
+  /* --doc option disabled, need retention times in pin file
+  int doc_parameter = Params::GetInt("doc");
+  if(doc_parameter >= 0) {
+    perc_args_vec.push_back("--doc");
+    perc_args_vec.push_back(to_string(doc_parameter));
+  }
+  */
+
+  // FIXME include schema as part of distribution and add option to turn on validation
+  perc_args_vec.push_back("--no-schema-validation");
+
+  if (!Params::GetString("picked-protein").empty()) {
+    perc_args_vec.push_back("--picked-protein");
+    perc_args_vec.push_back(Params::GetString("picked-protein"));
+  }
+  if (!Params::GetString("protein-enzyme").empty()) {
+    perc_args_vec.push_back("--protein-enzyme");
+    perc_args_vec.push_back(Params::GetString("protein-enzyme"));
+  }
+  if (Params::GetBool("protein-report-fragments")) {
+    perc_args_vec.push_back("--protein-report-fragments");
+  }
+  if (Params::GetBool("protein-report-duplicates")) {
+    perc_args_vec.push_back("--protein-report-duplicates");
+  }
+
+  bool set_protein = Params::GetBool("protein");
+  if (set_protein) {
+    perc_args_vec.push_back("--fido-protein");
+
+    if (Params::GetDouble("fido-alpha") > 0) {
+      perc_args_vec.push_back("--fido-alpha");
+      perc_args_vec.push_back(Params::GetString("fido-alpha"));
+    }
+    if (Params::GetDouble("fido-beta") > 0) {
+      perc_args_vec.push_back("--fido-beta");
+      perc_args_vec.push_back(Params::GetString("fido-beta"));
+    }
+    if (Params::GetDouble("fido-gamma") > 0) {
+      perc_args_vec.push_back("--fido-gamma");
+      perc_args_vec.push_back(Params::GetString("fido-gamma"));
+    }
+
+    if (Params::GetBool("fido-empirical-protein-q")) {
+       perc_args_vec.push_back("--fido-empirical-protein-q");
+    }
+
+    perc_args_vec.push_back("--fido-gridsearch-depth");
+    perc_args_vec.push_back(Params::GetString("fido-gridsearch-depth"));
+
+
+    perc_args_vec.push_back("--fido-fast-gridsearch");
+    perc_args_vec.push_back(Params::GetString("fido-fast-gridsearch"));
+
+    perc_args_vec.push_back("--fido-protein-truncation-threshold");
+    perc_args_vec.push_back(Params::GetString("fido-protein-truncation-threshold"));
+
+    if (Params::GetBool("fido-no-split-large-components")) {
+      perc_args_vec.push_back("--fido-no-split-large-components");
+    }
+
+    perc_args_vec.push_back("--fido-gridsearch-mse-threshold");
+    perc_args_vec.push_back(Params::GetString("fido-gridsearch-mse-threshold"));
+
+    // Target proteins file is written to prevent writing to stdout
+    perc_args_vec.push_back("--results-proteins");
+    perc_args_vec.push_back(output_target_proteins);
+    if (Params::GetBool("txt-output")) {
+      perc_args_vec.push_back("--decoy-results-proteins");
+      perc_args_vec.push_back(output_decoy_proteins);
+    }
+  }
+
+  if (Params::GetBool("tdc")) {
+    perc_args_vec.push_back("--post-processing-tdc");
+  } else {
+    perc_args_vec.push_back("--post-processing-mix-max");
+  }
+
+  perc_args_vec.push_back(input_pin);
+
+  /* build argv line */
+
+  string perc_cmd;
+  vector<const char*> perc_argv;
+  for (vector<string>::const_iterator i = perc_args_vec.begin();
+       i != perc_args_vec.end();
+       i++) {
+    perc_argv.push_back(i->c_str());
+    perc_cmd += " " + *i;
+  }
+
+  carp(CARP_DEBUG, "cmd:%s", perc_cmd.c_str());
+  
+  /* Re-route stdeer to log file. */
+  CarpStreamBuf buffer;
+  streambuf* old = std::cerr.rdbuf();
+  std::cerr.rdbuf(&buffer);
+
+  /* Call percolatorMain */
+  PercolatorAdapter pCaller;
+  try {
+    int retVal;
+    if (pCaller.parseOptions(perc_args_vec.size(), (char**)&perc_argv.front()) &&
+        (retVal = pCaller.run()) != 1) { // Percolator return value 1 means success
+      carp(CARP_FATAL, "Error running percolator:%d", retVal);
+    }
+  } catch (const std::exception& e) {
+    /* Recover stderr */
+    std::cerr.rdbuf(old);
+    throw runtime_error(e.what());
+  }
+
+  /* Recover stderr */
+  std::cerr.rdbuf(old);
+  
+  // get percolator score information into crux objects
+  ProteinMatchCollection* target_pmc = pCaller.getProteinMatchCollection();
+  ProteinMatchCollection* decoy_pmc = pCaller.getDecoyProteinMatchCollection();
+  if (target_pmc == NULL || decoy_pmc == NULL) {
+    carp(CARP_WARNING, "Failed translating Percolator objects into Crux objects");
+  }
+
+  string output_dir = Params::GetString("output-dir");
+
+  if (!Params::GetBool("txt-output")) {
+    FileUtils::Remove(output_target_peptides);
+  }
+
+  // write mzid
+  if (Params::GetBool("mzid-output")) {
+    MzIdentMLWriter mzid_writer, decoy_mzid_writer;
+    string mzid_path = make_file_path(getFileStem() + ".target.mzid");
+    mzid_writer.openFile(mzid_path, Params::GetBool("overwrite"));
+    mzid_writer.addProteinMatches(target_pmc);
+    mzid_writer.closeFile();
+    mzid_path = make_file_path(getFileStem() + ".decoy.mzid");
+    decoy_mzid_writer.openFile(mzid_path, Params::GetBool("overwrite"));
+    decoy_mzid_writer.addProteinMatches(decoy_pmc);
+    decoy_mzid_writer.closeFile();
+  }
+  
+  // write pepxml
+  if (Params::GetBool("pepxml-output")) {
+    PMCPepXMLWriter pep_writer;
+    string pep_path = make_file_path(getFileStem() + ".target.pep.xml");
+    pep_writer.openFile(pep_path.c_str(), Params::GetBool("overwrite"));
+    pep_writer.write(target_pmc);
+    pep_writer.closeFile();
+    pep_path = make_file_path(getFileStem() + ".decoy.pep.xml");
+    pep_writer.openFile(pep_path.c_str(), Params::GetBool("overwrite"));
+    pep_writer.write(decoy_pmc);
+    pep_writer.closeFile();
+  }
+
+  Globals::clean();
+
+  return 0;
+}
+
+COMMAND_T PercolatorApplication::getCommand() const {
+  return PERCOLATOR_COMMAND;
+
+}
+
+/**
+ * \returns the command name for PercolatorApplication
+ */
+string PercolatorApplication::getName() const {
+  return "percolator";
+}
+
+/**
+ * \returns the description for PercolatorApplication
+ */
+string PercolatorApplication::getDescription() const {
+  return
+    "[[nohtml:Re-rank a collection of PSMs using the Percolator algorithm. "
+    "Optionally, also produce protein rankings using the Fido algorithm.]]"
+    "[[html:<p>Percolator is a semi-supervised learning algorithm that "
+    "dynamically learns to separate target from decoy peptide-spectrum matches "
+    "(PSMs). The algorithm is described in this article:</p><blockquote> Lukas "
+    "Käll, Jesse Canterbury, Jason Weston, William Stafford Noble and "
+    "Michael J. MacCoss. <a href=\"http://noble.gs.washington.edu/papers/"
+    "kall2007semi-supervised.html\">"Semi-supervised learning for peptide "
+    "identification from shotgun proteomics datasets."</a> <em>Nature "
+    "Methods</em>. 4(11):923-925, 2007.</blockquote><p>Percolator requires as "
+    "input two collections of PSMs, one set derived from matching observed "
+    "spectra against real ("target") peptides, and a second derived "
+    "from matching the same spectra against "decoy" peptides. The "
+    "output consists of ranked lists of PSMs, peptides and proteins. Peptides "
+    "and proteins are assigned two types of statistical confidence estimates: "
+    "q-values and posterior error probabilities.</p><p>The features used by "
+    "Percolator to represent each PSM are summarized <a href=\"../file-formats/features.html\">"
+    "here</a>.</p><p>Percolator also includes code from <a href=\""
+    "http://noble.gs.washington.edu/proj/fido/\">Fido</a>, whch performs "
+    "protein-level inference. The Fido algorithm is described in this article:"
+    "</p><blockquote>Oliver Serang, Michael J. MacCoss and William Stafford "
+    "Noble. <a href=\"http://pubs.acs.org/doi/abs/10.1021/pr100594k\">"
+    ""Efficient marginalization to compute protein posterior probabilities "
+    "from shotgun mass spectrometry data."</a> <em>Journal of Proteome "
+    "Research</em>. 9(10):5346-5357, 2010.</blockquote><p>Crux includes code "
+    "from <a href=\"http://per-colator.com/\">Percolator</a>. Crux Percolator "
+    "differs from the stand-alone version of Percolator in the following "
+    "respects:</p><ul><li>In addition to the native Percolator XML file "
+    "format, Crux Percolator supports additional input file formats (SQT, "
+    "PepXML, tab-delimited text) and output file formats (PepXML, mzIdentML, "
+    "tab-delimited text). To maintain consistency with the rest of the Crux "
+    "commands, Crux Percolator uses different parameter syntax than the stand-"
+    "alone version of Percolator.</li><li>Like the rest of the Crux commands, "
+    "Crux Percolator writes its files to an output directory, logs all standard "
+    "error messages to a log file, and is capable of reading parameters from a "
+    "parameter file.</li><li>Reading from XML and stdin are not supported at "
+    "this time.</li></ul>]]";
+}
+
+/**
+ * \returns the command arguments
+ */
+vector<string> PercolatorApplication::getArgs() const {
+  string arr[] = {
+    "peptide-spectrum matches"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command options
+ */
+vector<string> PercolatorApplication::getOptions() const {
+  string arr[] = {
+    "fileroot",
+    "output-dir",
+    "overwrite",
+    "txt-output",
+    "pout-output",
+    "mzid-output",
+    "pepxml-output",
+    "feature-file-out",
+    "list-of-files",
+    "parameter-file",
+    "feature-file-in",
+    "picked-protein",
+    "protein-enzyme",
+    "protein-report-fragments",
+    "protein-report-duplicates",
+    "protein",
+    "decoy-xml-output",
+    "decoy-prefix",
+    "subset-max-train",
+    "c-pos",
+    "c-neg",
+    "train-fdr",
+    "test-fdr",
+    "maxiter",
+    "quick-validation",
+    "output-weights",
+    "init-weights",
+    "default-direction",
+    "unitnorm",
+    "fido-alpha",
+    "fido-beta",
+    "fido-gamma",
+    "test-each-iteration",
+    "override",
+    "percolator-seed",
+    "klammer",
+    "only-psms",
+    //"doc",
+    "fido-empirical-protein-q",
+    "fido-gridsearch-depth",
+    "fido-gridsearch-mse-threshold",
+    "fido-fast-gridsearch",
+    "fido-protein-truncation-threshold",
+    "fido-no-split-large-components",
+    "tdc",
+    "verbosity",
+    "top-match",
+    "search-input"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command outputs
+ */
+vector< pair<string, string> > PercolatorApplication::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("percolator.target.proteins.txt",
+    "a tab-delimited file containing the target protein matches. See "
+    "<a href=\"../file-formats/txt-format.html\">here</a> for a list of the fields."));
+  outputs.push_back(make_pair("percolator.decoy.proteins.txt",
+    "a tab-delimited file containing the decoy protein matches. See "
+    "<a href=\"../file-formats/txt-format.html\">here</a> for a list of the fields."));
+  outputs.push_back(make_pair("percolator.target.peptides.txt",
+    "a tab-delimited file containing the target peptide matches. See "
+    "<a href=\"../file-formats/txt-format.html\">here</a> for a list of the fields."));
+  outputs.push_back(make_pair("percolator.decoy.peptides.txt",
+    "a tab-delimited file containing the decoy peptide matches. See "
+    "<a href=\"../file-formats/txt-format.html\">here</a> for a list of the fields."));
+  outputs.push_back(make_pair("percolator.target.psms.txt",
+    "a tab-delimited file containing the target PSMs. See "
+    "<a href=\"../file-formats/txt-format.html\">here</a> for a list of the fields."));
+  outputs.push_back(make_pair("percolator.decoy.psms.txt",
+    "a tab-delimited file containing the decoy PSMs. See "
+    "<a href=\"../file-formats/txt-format.html\">here</a> for a list of the fields."));
+  outputs.push_back(make_pair("percolator.params.txt",
+    "a file containing the name and value of all parameters for the current "
+    "operation. Not all parameters in the file may have been used in the "
+    "operation. The resulting file can be used with the --parameter-file "
+    "option for other crux programs."));
+  outputs.push_back(make_pair("percolator.pep.xml",
+    "a file containing the PSMs in "
+    "<a href=\"http://tools.proteomecenter.org/wiki/index.php?title=Formats:pepXML\">"
+    "pepXML format</a>. This file can be used as input to some of the tools in the "
+    "<a href=\"http://tools.proteomecenter.org/wiki/index.php?title=Software:TPP\">"
+    "Transproteomic Pipeline</a>."));
+  outputs.push_back(make_pair("percolator.mzid",
+    "a file containing the protein, peptide, and spectrum matches in <a href=\""
+    "http://www.psidev.info/mzidentml\">mzIdentML format</a>."));
+  outputs.push_back(make_pair("percolator.log.txt",
+    "a log file containing a copy of all messages that were printed to "
+    "standard error."));
+  return outputs;
+}
+
+/**
+ * \returns whether the application needs the output directory or not. (default false).
+ */
+bool PercolatorApplication::needsOutputDirectory() const {
+  return true;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/PercolatorApplication.h b/src/app/PercolatorApplication.h
new file mode 100644
index 0000000..143557c
--- /dev/null
+++ b/src/app/PercolatorApplication.h
@@ -0,0 +1,91 @@
+/**
+ * \file PercolatorApplication.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 4 November 2011
+ * \brief Interface for calling hardklor.
+ *****************************************************************************/
+#ifndef PERCOLATORAPPLICATION_H
+#define PERCOLATORAPPLICATION_H
+
+#include "CruxApplication.h"
+
+#include <string>
+#include <fstream>
+
+
+class PercolatorApplication: public CruxApplication {
+
+ protected:
+
+  //Calls the main method in Percolator Application
+  static int percolatorMain(int argc, char* argv[]);
+
+
+ public:
+
+  /**
+   * \returns a blank PercolatorApplication object
+   */
+  PercolatorApplication();
+
+  /**
+   * Destructor
+   */
+  ~PercolatorApplication();
+
+  /**
+   * main method for PercolatorApplication
+   */
+  virtual int main(int argc, char** argv);
+
+  /**
+   * \returns the command name for PercolatorApplication
+   */
+  virtual std::string getName() const;
+
+  /**
+   * \returns the description for PercolatorApplication
+   */
+  virtual std::string getDescription() const;
+
+  /**
+   * \returns the command arguments
+   */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+   * \returns the command options
+   */
+  virtual std::vector<std::string> getOptions() const;
+
+  /**
+   * \returns the command outputs
+   */
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+  /**
+   * \returns whether the application needs the output directory or not. (default false).
+   */
+  virtual bool needsOutputDirectory() const;
+
+  virtual COMMAND_T getCommand() const;
+
+  /**
+   * \brief runs hardklor on the input spectra
+   * \returns whether hardklor was successful or not
+   */
+  int main(
+    const std::string& input_pinxml ///< file path of spectra to process
+  );
+  
+};
+
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/Pipeline.cpp b/src/app/Pipeline.cpp
new file mode 100644
index 0000000..e554b52
--- /dev/null
+++ b/src/app/Pipeline.cpp
@@ -0,0 +1,341 @@
+#include "io/carp.h"
+#include "AssignConfidenceApplication.h"
+#include "bullseye/CruxBullseyeApplication.h"
+#include "util/FileUtils.h"
+#include "MakePinApplication.h"
+#include "PercolatorApplication.h"
+#include "Pipeline.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+#include "TideSearchApplication.h"
+#include "CometApplication.h"
+
+using namespace std;
+
+PipelineApplication::PipelineApplication() {
+}
+
+PipelineApplication::~PipelineApplication() {
+}
+
+int PipelineApplication::main(int argc, char** argv) {
+  checkParams();
+
+  carp(CARP_INFO, "Running pipeline with the following steps:");
+  for (vector<CruxApplication*>::iterator i = apps_.begin(); i != apps_.end(); i++) {
+    carp(CARP_INFO, "--> %s", (*i)->getName().c_str());
+  }
+
+  vector<string> spectra = Params::GetStrings("mass spectra");
+  string database = Params::GetString("peptide source");
+
+  vector<string> resultsFiles;
+  while (!apps_.empty()) {
+    CruxApplication* cur = apps_.front();
+    carp(CARP_INFO, "Running %s...", cur->getName().c_str());
+    int ret;
+    switch (cur->getCommand()) {
+      case BULLSEYE_COMMAND:
+        ret = runBullseye(cur, &spectra);
+        break;
+      case COMET_COMMAND:
+      case TIDE_SEARCH_COMMAND:
+        ret = runSearch(cur, spectra, database, &resultsFiles);
+        break;
+      case QVALUE_COMMAND:
+      case PERCOLATOR_COMMAND:
+        ret = runPostProcessor(cur, resultsFiles);
+        break;
+      default:
+        carp(CARP_FATAL, "Pipeline is not set up to run command '%s'",
+                         cur->getName().c_str());
+        break;
+    }
+    delete cur;
+    apps_.erase(apps_.begin());
+
+    if (ret != 0) {
+      carp(CARP_FATAL, "Error running %s", cur->getName().c_str());
+    }
+  }
+
+  return 0;
+}
+
+void PipelineApplication::checkParams() {
+  string search = Params::GetString("search-engine");
+  string postProcessor = Params::GetString("post-processor");
+  if (search == "comet") {
+    if (Params::GetInt("decoy_search") == 0 && postProcessor != "none") {
+      carp(CARP_FATAL, "Cannot perform post-processing without decoys. "
+                       "Set decoy_search to 1 or 2.");
+    }
+  }
+}
+
+vector<string> PipelineApplication::getExpectedResultsFiles(
+  CruxApplication* app,
+  const vector<string>& spectra
+) {
+  string outputBase = make_file_path(app->getName());
+  if (app->getCommand() == COMET_COMMAND) {
+    if (Params::GetInt("decoy_search") < 1) {
+      carp(CARP_WARNING, "Searching without decoys (see decoy_search option)");
+    }
+
+    bool multiFile = spectra.size() > 1;
+    string outputExt;
+    if (Params::GetBool("output_txtfile")) {
+      outputExt =".txt";
+    } else if (Params::GetBool("output_pepxmlfile")) {
+      outputExt =".pep.xml";
+    } else if (Params::GetBool("output_sqtfile")) {
+      outputExt =".sqt";
+    } else if (Params::GetBool("output_percolatorfile") && !multiFile) {
+      outputExt =".pin";
+    } else {
+      carp(CARP_FATAL, "No valid Comet output options enabled");
+    }
+
+    vector<string> outputBases;
+    if (!multiFile) {
+      outputBases.push_back(outputBase);
+    } else {
+      // TODO Same file stems?
+      for (vector<string>::const_iterator i = spectra.begin(); i != spectra.end(); i++) {
+        outputBases.push_back(outputBase + "." + FileUtils::Stem(*i));
+      }
+    }
+
+    vector<string> resultsFiles;
+    for (vector<string>::const_iterator i = outputBases.begin(); i != outputBases.end(); i++) {
+      resultsFiles.push_back(*i + ".target" + outputExt);
+      if (Params::GetInt("decoy_search") == 2) {
+        resultsFiles.push_back(*i + ".decoy" + outputExt);
+      }
+    }
+    return resultsFiles;
+  }
+
+  bool concat = Params::GetBool("concat");
+  string outputExt;
+  if (Params::GetBool("txt-output")) {
+    outputExt = ".txt";
+  } else if (Params::GetBool("pepxml-output")) {
+    outputExt = ".pep.xml";
+  } else if (Params::GetBool("sqt-output")) {
+    outputExt = ".sqt";
+  } else if (Params::GetBool("mzid-output")) {
+    outputExt = ".mzid";
+  } else if (Params::GetBool("pin-output")) {
+    outputExt = ".pin";
+  } else {
+    carp(CARP_FATAL, "No valid Tide output options enabled");
+  }
+  vector<string> resultsFiles;
+  if (concat || outputExt == ".mzid" || outputExt == ".pin") {
+    resultsFiles.push_back(outputBase + outputExt);
+  } else {
+    resultsFiles.push_back(outputBase + ".target" + outputExt);
+    resultsFiles.push_back(outputBase + ".decoy" + outputExt);
+  }
+  return resultsFiles;
+}
+
+int PipelineApplication::runBullseye(CruxApplication* app, vector<string>* spectra) {
+  if (app->getCommand() != BULLSEYE_COMMAND) {
+    carp(CARP_FATAL, "Something went wrong.");
+  }
+
+  string outFormat = Params::GetString("spectrum-format");
+  if (outFormat.empty()) {
+    outFormat = "ms2";
+  }
+  for (vector<string>::iterator i = spectra->begin(); i != spectra->end(); i++) {
+    string ms1 = *i;
+    if (StringUtils::IEndsWith(ms1, ".ms2") || StringUtils::IEndsWith(ms1, ".cms2")) {
+      string ms1Check = ms1.substr(0, ms1.length() - 1) + '1';
+      if (FileUtils::Exists(ms1Check)) {
+        ms1 = ms1Check;
+      }
+    }
+    string outBase = make_file_path(app->getFileStem() + "." + FileUtils::BaseName(*i));
+    string outMatch = outBase + ".pid." + outFormat;
+    string outNoMatch = outBase + ".nopid." + outFormat;
+    int ret = ((CruxBullseyeApplication*)app)->main(ms1, *i, outMatch, outNoMatch);
+    if (ret != 0) {
+      carp(CARP_ERROR, "Error running Bullseye on '%s'", i->c_str());
+      return ret;
+    }
+    *i = outMatch;
+  }
+  return 0;
+}
+
+int PipelineApplication::runSearch(
+  CruxApplication* app,
+  const vector<string>& spectra,
+  const string& database,
+  vector<string>* resultsFiles
+) {
+  bool comet = app->getCommand() == COMET_COMMAND;
+  bool tide = app->getCommand() == TIDE_SEARCH_COMMAND;
+  if (!comet && !tide) {
+    carp(CARP_FATAL, "Something went wrong.");
+  }
+
+  carp(CARP_INFO, "Search will be run with the following files against database '%s':",
+                  database.c_str());
+  for (vector<string>::const_iterator i = spectra.begin(); i != spectra.end(); i++) {
+    carp(CARP_INFO, "--> %s", i->c_str());
+  }
+
+  *resultsFiles = getExpectedResultsFiles(app, spectra);
+
+  if (comet) {
+    return ((CometApplication*)app)->main(spectra);
+  }
+  return ((TideSearchApplication*)app)->main(spectra);
+}
+
+int PipelineApplication::runPostProcessor(
+  CruxApplication* app,
+  const vector<string>& resultsFiles
+) {
+  bool assignConfidence = app->getCommand() == QVALUE_COMMAND;
+  bool percolator = app->getCommand() == PERCOLATOR_COMMAND;
+  if (!assignConfidence && !percolator) {
+    carp(CARP_FATAL, "Something went wrong.");
+  }
+
+  carp(CARP_INFO, "Post-processing will be run using the following files:");
+  for (vector<string>::const_iterator i = resultsFiles.begin(); i != resultsFiles.end(); i++) {
+    carp(CARP_INFO, "--> %s", i->c_str());
+  }
+
+  if (assignConfidence) {
+    vector<string> targetFiles;
+    for (vector<string>::const_iterator i = resultsFiles.begin(); i != resultsFiles.end(); i++) {
+      if (i->find("decoy") == string::npos) {
+        targetFiles.push_back(*i);
+      }
+    }
+    return ((AssignConfidenceApplication*)app)->main(targetFiles);
+  }
+
+  string pin;
+  if (resultsFiles.size() == 1 && StringUtils::IEndsWith(resultsFiles.front(), ".pin")) {
+    pin = resultsFiles.front();
+  } else {
+    // If passed anything but a single pin file, run make-pin
+    pin = make_file_path("make-pin.pin");
+    carp(CARP_INFO, "Running make-pin");
+    if (MakePinApplication::main(resultsFiles) != 0) {
+      carp(CARP_FATAL, "make-pin failed. Not running Percolator.");
+    }
+    carp(CARP_INFO, "Finished make-pin.");
+  }
+  return ((PercolatorApplication*)app)->main(pin);
+}
+
+string PipelineApplication::getName() const {
+  return "pipeline";
+}
+
+string PipelineApplication::getDescription() const {
+  return
+    "[[nohtml:Runs a series of Crux tools on a protein database and one or more "
+    "sets of tandem mass spectra.]]"
+    "[[html:<p>Given one or more sets of tandem mass spectra as well as a "
+    "protein database, this command runs a series of Crux tools and reports all "
+    "of the results in a single output directory. There are three steps in the "
+    "pipeline:</p><ol><li><a href=\"bullseye.html\">Bullseye</a> to assign high-"
+    "resolution precursor m/z values to MS/MS data. This step is optional.</li>"
+    "<li>Database searching using either <a href=\"tide-search.html\">"
+    "Tide-search</a> or <a href=\"comet.html\">Comet</a>. The database can be "
+    "provided as a file in FASTA format, or additionally, an index as produced "
+    "by <a href=\"tide-index.html\">tide-index</a>.</li><li>Post-processing "
+    "using either <a href=\"assign-confidence.html\">assign-confidence</a> or "
+    "<a href=\"percolator.html\">Percolator</a>.</li></ol><p>All of the command "
+    "line options associated with the individual tools in the pipeline can be "
+    "used with the <code>pipeline</code> command.</p>]]";
+}
+
+vector<string> PipelineApplication::getArgs() const {
+  string arr[] = {
+    "mass spectra+",
+    "peptide source"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector<string> PipelineApplication::getOptions() const {
+  string arr[] = {
+    "bullseye",
+    "search-engine",
+    "post-processor"
+  };
+  vector<string> options(arr, arr + sizeof(arr) / sizeof(string));
+
+  addOptionsFrom<CruxBullseyeApplication>(&options);
+  addOptionsFrom<TideSearchApplication>(&options);
+  addOptionsFrom<CometApplication>(&options);
+  addOptionsFrom<PercolatorApplication>(&options);
+  addOptionsFrom<AssignConfidenceApplication>(&options);
+
+  return options;
+}
+
+vector< pair<string, string> > PipelineApplication::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  
+  addOutputsFrom<CruxBullseyeApplication>(&outputs);
+  addOutputsFrom<TideSearchApplication>(&outputs);
+  addOutputsFrom<CometApplication>(&outputs);
+  addOutputsFrom<PercolatorApplication>(&outputs);
+  addOutputsFrom<AssignConfidenceApplication>(&outputs);
+
+  return outputs;
+}
+
+string PipelineApplication::getFileStem() const {
+  return getName();
+}
+
+COMMAND_T PipelineApplication::getCommand() const {
+  return PIPELINE_COMMAND;
+}
+
+bool PipelineApplication::needsOutputDirectory() const {
+  return true;
+}
+
+bool PipelineApplication::hidden() const {
+  return false;
+}
+
+void PipelineApplication::processParams() {
+  if (Params::GetBool("bullseye")) {
+    apps_.push_back(new CruxBullseyeApplication());
+  }
+
+  if (Params::GetString("search-engine") == "comet") {
+    Params::Set("database_name", Params::GetString("peptide source"));
+    apps_.push_back(new CometApplication());
+  } else {
+    Params::Set("tide database", Params::GetString("peptide source"));
+    apps_.push_back(new TideSearchApplication());
+  }
+
+  const string postProcessor = Params::GetString("post-processor");
+  if (postProcessor == "assign-confidence") {
+    apps_.push_back(new AssignConfidenceApplication());
+  } else if (postProcessor == "percolator") {
+    apps_.push_back(new PercolatorApplication());
+  }
+
+  for (vector<CruxApplication*>::iterator i = apps_.begin(); i != apps_.end(); i++) {
+    (*i)->processParams();
+  }
+}
+
diff --git a/src/app/Pipeline.h b/src/app/Pipeline.h
new file mode 100644
index 0000000..c88a647
--- /dev/null
+++ b/src/app/Pipeline.h
@@ -0,0 +1,41 @@
+#ifndef PIPELINE_H
+#define PIPELINE_H
+
+#include "CruxApplication.h"
+
+class PipelineApplication : public CruxApplication {
+ public:
+  PipelineApplication();
+  virtual ~PipelineApplication();
+
+  virtual int main(int argc, char** argv);
+  virtual std::string getName() const;
+  virtual std::string getDescription() const;
+  virtual std::vector<std::string> getArgs() const;
+  virtual std::vector<std::string> getOptions() const;
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+  virtual std::string getFileStem() const;
+  virtual COMMAND_T getCommand() const;
+  virtual bool needsOutputDirectory() const;
+  virtual bool hidden() const;
+  virtual void processParams();
+
+ private:
+  std::vector<CruxApplication*> apps_;
+
+  static void checkParams();
+  static std::vector<std::string> getExpectedResultsFiles(
+    CruxApplication* app,
+    const std::vector<std::string>& spectra
+  );
+  int runBullseye(CruxApplication* app,
+                  std::vector<std::string>* spectra);
+  int runSearch(CruxApplication* app,
+                const std::vector<std::string>& spectra,
+                const std::string& database,
+                std::vector<std::string>* resultsFiles);
+  int runPostProcessor(CruxApplication* app,
+                       const std::vector<std::string>& resultsFiles);
+};
+
+#endif
diff --git a/src/app/PredictPeptideIons.cpp b/src/app/PredictPeptideIons.cpp
new file mode 100644
index 0000000..efec446
--- /dev/null
+++ b/src/app/PredictPeptideIons.cpp
@@ -0,0 +1,226 @@
+/**
+ * \file PredictPeptideIons.cpp
+ *
+ * AUTHOR: Manijeh Naseri
+ * CREATE DATE: January 27, 2012
+ *
+ * DESCRIPTION: Main method for the predict-peptide-ions.
+ *              Given a peptide sequence, and a charge state, predict
+ *              the fragmentation ions.
+ */
+
+#include "PredictPeptideIons.h"
+
+#include <algorithm>
+#include <math.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+#include "io/carp.h"
+#include "util/crux-utils.h"
+#include "model/objects.h"
+#include "parameter.h"
+#include "model/Ion.h"
+#include "model/IonSeries.h"
+#include "model/IonConstraint.h"
+#include "model/Peptide.h"
+#include "util/Params.h"
+
+using namespace std;
+using namespace Crux;
+
+/**
+ * \returns A blank PredictPeptideIons object.
+ */
+PredictPeptideIons::PredictPeptideIons() {
+
+}
+
+/**
+ * Destructor
+ */
+PredictPeptideIons::~PredictPeptideIons() {
+}
+
+/**
+ * Main method for PredictPeptideIons.
+ */
+int PredictPeptideIons::main(int argc, char** argv) {
+  /* Get Arguments */
+  string peptide_sequence = Params::GetString("peptide sequence");
+  int charge_state = Params::GetInt("charge state");
+
+  /* Get Options */
+  ION_TYPE_T ion_type;
+  string_to_ion_type(Params::GetString("primary-ions"), &ion_type);
+  bool use_precursor_ions = Params::GetBool("precursor-ions");
+  int isotope_count = Params::GetInt("isotope");
+  bool is_flanking = Params::GetBool("flanking");
+  string max_ion_charge = Params::GetString("max-ion-charge");
+
+  int nh3_count = Params::GetInt("nh3");
+  int h2o_count = Params::GetInt("h2o");
+
+  int neutral_loss_count[MAX_MODIFICATIONS];
+  bool is_modification = false;
+
+  // check peptide sequence
+  if (!valid_peptide_sequence(peptide_sequence)) {
+    carp(CARP_FATAL, "The peptide sequence '%s' is not valid", peptide_sequence.c_str());
+  }
+
+  // neutral_losses
+  // initialize
+  int modification_idx = 0;
+  for(; modification_idx < MAX_MODIFICATIONS; ++modification_idx) {
+    neutral_loss_count[modification_idx] = 0;
+  }
+
+  is_modification = (nh3_count || h2o_count || isotope_count || is_flanking);
+
+  neutral_loss_count[NH3] = nh3_count;
+  neutral_loss_count[H2O] = h2o_count;
+  neutral_loss_count[FLANK] = (int)is_flanking;
+  neutral_loss_count[ISOTOPE] = isotope_count;
+
+  // create ion_constraint
+  MASS_TYPE_T frag_masses = get_mass_type_parameter("fragment-mass");
+  
+  IonConstraint* ion_constraint = 
+  //  new_ion_constraint(MONO, max_charge, ion_type, use_precursor_ions);
+    new IonConstraint(frag_masses, charge_state, ion_type, use_precursor_ions);
+
+   
+  // set ion_constraint3 modification counts, if modifications should occur
+  if (is_modification) {
+    ion_constraint->setModification(NH3, neutral_loss_count[NH3]);
+    ion_constraint->setModification(H2O, neutral_loss_count[H2O]);
+    ion_constraint->setModification(ISOTOPE, neutral_loss_count[ISOTOPE]);
+    ion_constraint->setModification(FLANK, neutral_loss_count[FLANK]);
+  }
+
+  // create ion_series
+  IonSeries* ion_series = new IonSeries(peptide_sequence, charge_state, ion_constraint);
+   
+  // now predict ions
+  ion_series->predictIons();
+
+  // print settings
+  printf("# PEPTIDE: %s\n", peptide_sequence.c_str());
+  printf("# AVERAGE: %f MONO:%f\n",
+    Peptide::calcSequenceMass(peptide_sequence, AVERAGE),
+    Peptide::calcSequenceMass(peptide_sequence, MONO));
+  printf("# CHARGE: %d\n", charge_state);
+  printf("# MAX-ION-CHARGE: %s\n", max_ion_charge.c_str());
+  printf("# NH3 modification: %d\n", neutral_loss_count[NH3]);
+  printf("# H2O modification: %d\n", neutral_loss_count[H2O]);
+  printf("# ISOTOPE modification: %d\n", neutral_loss_count[ISOTOPE]);
+  printf("# FLANK modification: %d\n", neutral_loss_count[FLANK]);
+  // print ions
+  ion_series->print(stdout);
+
+  // free
+  IonConstraint::free(ion_constraint);
+
+  delete ion_series;
+
+  return 0;
+}
+
+/**
+ * \returns The command name for PredictPeptideIons.
+ */
+string PredictPeptideIons::getName() const {
+  return "predict-peptide-ions";
+}
+
+/**
+ * \returns The description for PredictPeptideIons.
+ */
+string PredictPeptideIons::getDescription() const {
+  return
+    "[[nohtml:Given a peptide and a charge state, predict the m/z values of "
+    "the resulting fragment ions.]]"
+    "[[html:<p>Given a peptide and a charge state, predict the corresponding "
+    "fragment ions according to the provided options.</p>]]";
+}
+
+/**
+ * \returns The command arguments
+ */
+vector<string> PredictPeptideIons::getArgs() const {
+  string arr[] = {
+    "peptide sequence",
+    "charge state"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns The command options
+ */
+vector<string> PredictPeptideIons::getOptions() const {
+  string arr[] = {
+    "primary-ions",
+    "precursor-ions",
+    "isotope",
+    "flanking",
+    "max-ion-charge",
+    "fragment-mass",
+    "nh3",
+    "h2o"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns The command outputs
+ */
+vector< pair<string, string> > PredictPeptideIons::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("stdout",
+    "a series of lines, describing how the ions were predicted. <blockquote "
+    "style=\"font-family: monospace;\"># PEPTIDE: <peptide sequence><br>"
+    "# CHARGE: <peptide charge></blockquote>"
+    "The program then prints a one-"
+    "line header that labels the tab-delimited columns, followed by one line "
+    "per ion:<blockquote style=\"font-family: monospace;\">m/z mass "
+    "charge ion-series peptide-bond-index nh3 h2o "
+    "isotope flank</blockquote>"
+    "<p>The columns contain the following values:"
+    "<ul><li><m/z> is the ion's mass-to-charge</li>"
+    "<li><mass> is the ion's (charged) mass</li>"
+    "<li><charge> is the ion's charge e.g. 1,2,3</li>"
+    "<li><ion-type> is a string representing the series 'a', 'b', 'c', "
+    "'x', 'y', 'z', and 'p'</li>"
+    "<li><peptide-bond-index> is in [1...n), where n is "
+    "peptide-length. Consistent with standard mass spec terminology, b-1 "
+    "corresponds to a prefix ion of a single amino acid, and y-1 "
+    "corresponds to a suffix ion of a single amino acid.<li>"
+    "<li><nh3> is the number of NH3 modifications</li>"
+    "<li><h2o> is the number of H2O Modifications</li>"
+    "<li><isotope> is the number of adjacent isotopic peaks</li>"
+    "<li><flank> is the number of flanking ions</li>"
+    "</ul></p>"));
+  return outputs;
+}
+
+/**
+ * \returns The enum of the application, default PREDICT_PEPTIDE_IONS_COMMAND.
+ */
+COMMAND_T PredictPeptideIons::getCommand() const {
+  return PREDICT_PEPTIDE_IONS_COMMAND;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/app/PredictPeptideIons.h b/src/app/PredictPeptideIons.h
new file mode 100644
index 0000000..6739fdc
--- /dev/null
+++ b/src/app/PredictPeptideIons.h
@@ -0,0 +1,78 @@
+/**
+ * \file PredictPeptideIons.h
+ *
+ * AUTHOR: Manijeh Naseri
+ * CREATE DATE: January 27, 2012
+ * DESCRIPTION: Main method for the predict-peptide-ions.
+ *              Given a peptide sequence, and a charge state, predict
+ *              the fragmentation ions.
+ */
+#ifndef PREDICTPEPTIDEIONS_H
+#define PREDICTPEPTIDEIONS_H
+
+#include "CruxApplication.h"
+#include "util/crux-utils.h"
+#include "io/carp.h"
+#include "parameter.h"
+
+class PredictPeptideIons: public CruxApplication {
+
+ public:
+  /**
+   * \returns A blank PredictPeptideIons object.
+   */
+  PredictPeptideIons();
+  
+  /**
+   * Destructor
+   */
+  ~PredictPeptideIons();
+
+  /**
+   * Main method for PredictPeptideIons.
+   */
+  virtual int main(int argc, char** argv);
+
+  /**
+   * \returns The command name for PredictPeptideIons.
+   */
+  virtual std::string getName() const;
+
+  /**
+   * \returns The description for PredictPeptideIons.
+   */
+  virtual std::string getDescription() const;
+
+  /**
+   * \returns The command arguments
+   */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+   * \returns The command options
+   */
+  virtual std::vector<std::string> getOptions() const;
+
+  /**
+   * \returns The command outputs
+   */
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+  /**
+   * \returns The enum of the application, PREDICT_PEPTIDE_IONS_COMMAND.
+   */
+  virtual COMMAND_T getCommand() const;
+
+};
+
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
+
diff --git a/src/app/PrintProcessedSpectra.cpp b/src/app/PrintProcessedSpectra.cpp
new file mode 100644
index 0000000..4adb9e3
--- /dev/null
+++ b/src/app/PrintProcessedSpectra.cpp
@@ -0,0 +1,183 @@
+/**
+ * \file PrintProcessedSpectra.cpp
+ *
+ * AUTHOR: Barbara Frewen
+ * CREATE DATE: September 18, 2009
+ *
+ * DESCRIPTION: Main method for the print-processed-spectra command.
+ *              For every spectrum in an ms2 file, process as for
+ *              xcorr and print peaks in ms2 format to new file.
+ */
+
+#include "PrintProcessedSpectra.h"
+#include "io/SpectrumCollectionFactory.h"
+#include "util/Params.h"
+#include "util/GlobalParams.h"
+
+using namespace std;
+
+/**
+ * \returns a blank PrintProcessedSpectra object
+ */
+PrintProcessedSpectra::PrintProcessedSpectra() {
+
+}
+
+/**
+ * Destructor
+ */
+PrintProcessedSpectra::~PrintProcessedSpectra() {
+}
+
+/**
+ * main method for PrintProcessedSpectra
+ */
+int PrintProcessedSpectra::main(int argc, char** argv) {
+  // Get arguments and options
+  string input_ms2_name  = Params::GetString("ms2 file");
+  string output_ms2_name = Params::GetString("output file");
+  output_ms2_name = prefix_fileroot_to_name(output_ms2_name);
+  string output_dir = Params::GetString("output-dir");
+  bool overwrite = Params::GetBool("overwrite");
+  OBSERVED_PREPROCESS_STEP_T stop_after = GlobalParams::getStopAfter();
+
+  // open output file
+  create_output_directory(output_dir, overwrite);
+  FILE* output_ms2 = create_file_in_path(output_ms2_name, output_dir, overwrite);
+  // open input file
+  Crux::SpectrumCollection* spectra =
+    SpectrumCollectionFactory::create(input_ms2_name);
+  if (spectra == NULL) {
+    carp(CARP_FATAL, "Could not read spectra from %s.", input_ms2_name.c_str());
+  }
+
+  spectra->parse();
+  carp(CARP_DEBUG, "Found %d spectra in file.", 
+       spectra->getNumSpectra());
+
+  // write header to output file
+  //const char* header = spectra->getComment();
+  //fprintf(output_ms2, "%s", header);
+  fprintf(output_ms2, "H\tComment\tSpectra processed as for Xcorr\n");
+
+  // create iterator for getting spectra
+  FilteredSpectrumChargeIterator* spectrum_iterator =
+    new FilteredSpectrumChargeIterator(spectra);
+
+  if (spectrum_iterator == NULL) {
+    carp(CARP_FATAL, "Could create spectrum iterator");
+  }
+
+  // loop over all spectra, process, print
+  while (spectrum_iterator->hasNext()) {
+    SpectrumZState cur_zstate;
+    int cur_charge = 0;
+    Crux::Spectrum* cur_spectrum = 
+      spectrum_iterator->next(cur_zstate);
+
+    cur_charge = cur_zstate.getCharge();
+    carp(CARP_DETAILED_INFO, "Processing spectrum %d charge %d.",
+         cur_spectrum->getFirstScan(), cur_charge);
+
+    // change the peak values
+    FLOAT_T* intensities = NULL;
+    int max_mz_bin = 0;
+    Scorer::getProcessedPeaks(cur_spectrum, cur_charge, XCORR,
+                        &intensities, &max_mz_bin, stop_after);
+
+    // print processed spectrum
+    cur_spectrum->printProcessedPeaks(cur_zstate,
+                                      intensities, max_mz_bin, output_ms2);
+  }
+
+  // close output file
+  delete spectra;
+  fclose(output_ms2);
+
+  return(0);
+}
+
+/**
+ * \returns the command name for PrintProcessedSpectra
+ */
+string PrintProcessedSpectra::getName() const {
+  return "print-processed-spectra";
+}
+
+/**
+ * \returns the description for PrintProcessedSpectra
+ */
+string PrintProcessedSpectra::getDescription() const {
+  return 
+    "[[nohtml:Process spectra as for scoring xcorr and print the results to a "
+    "file.]]"
+    "[[html:<p>Pre-process each spectrum in a given file in preparation for "
+    "computing XCorr. The pre-processing steps are described in detail in this "
+    "paper:</p><blockquote>J. K. Eng, B. Fischer, J. Grossman and M. J. "
+    "MacCoss. <a href=\"http://pubs.acs.org/doi/abs/10.1021/pr800420s\">"A "
+    "fast SEQUEST cross correlation algorithm process the peaks as for "
+    "computing."</a> <em>Journal of Proteome Research</em>. "
+    "7(10):4598-4602, 2008.</blockquote><p>The output of this program is "
+    "equivalent to the spectrum shown in Figure 1D of the above paper.</p>]]";
+}
+
+/**
+ * \returns the command arguments
+ */
+vector<string> PrintProcessedSpectra::getArgs() const {
+  string arr[] = {
+    "ms2 file",
+    "output file"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command options
+ */
+vector<string> PrintProcessedSpectra::getOptions() const {
+  string arr[] = {
+    "stop-after",
+    "output-units",
+    "spectrum-parser",
+    "use-z-line",
+    "verbosity",
+    "parameter-file", 
+    "overwrite"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command outputs
+ */
+vector< pair<string, string> > PrintProcessedSpectra::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("output file",
+    "The name of the file in which the processed spectra will be printed in "
+    "MS2 format."));
+  return outputs;
+}
+
+/**
+ * \returns the file stem of the application, default getName.
+ */
+string PrintProcessedSpectra::getFileStem() const {
+  return "processed-spectra";
+}
+
+COMMAND_T PrintProcessedSpectra::getCommand() const {
+  return PROCESS_SPEC_COMMAND;
+}
+
+bool PrintProcessedSpectra::needsOutputDirectory() const {
+  return true;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/app/PrintProcessedSpectra.h b/src/app/PrintProcessedSpectra.h
new file mode 100644
index 0000000..57d0b53
--- /dev/null
+++ b/src/app/PrintProcessedSpectra.h
@@ -0,0 +1,93 @@
+/**
+ * \file PrintProcessedSpectra.h
+ *
+ * AUTHOR: Barbara Frewen
+ * CREATE DATE: September 18, 2009
+ * DESCRIPTION: Main method for the print-processed-spectra command.
+ *              For every spectrum in an ms2 file, process as for
+ *              xcorr and print peaks in ms2 format to new file.
+ * REVISION:
+ */
+#ifndef PRINTPROCESSEDSPECTRA_H
+#define PRINTPROCESSEDSPECTRA_H
+#include "CruxApplication.h"
+
+
+#include "util/crux-utils.h"
+#include "io/carp.h"
+#include "parameter.h"
+#include "io/SpectrumCollection.h"
+#include "model/FilteredSpectrumChargeIterator.h"
+#include "model/Scorer.h"
+
+#include <string>
+
+class PrintProcessedSpectra: public CruxApplication {
+
+ public:
+  /**
+   * \returns a blank PrintProcessedSpectra object
+   */
+  PrintProcessedSpectra();
+  
+  /**
+   * Destructor
+   */
+  ~PrintProcessedSpectra();
+
+  /**
+   * main method for PrintProcessedSpectra
+   */
+  virtual int main(int argc, char** argv);
+
+  /**
+   * \returns the command name for PrintProcessedSpectra
+   */
+  virtual std::string getName() const;
+
+  /**
+   * \returns the description for PrintProcessedSpectra
+   */
+  virtual std::string getDescription() const;
+
+  /**
+   * \returns the command arguments
+   */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+   * \returns the command options
+   */
+  virtual std::vector<std::string> getOptions() const;
+
+  /**
+   * \returns the command outputs
+   */
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+  /**
+   * \returns the file stem of the application, default getName.
+   */
+  virtual std::string getFileStem() const;
+
+  /**
+   * \returns the enum of the application, default MISC_COMMAND
+   */
+  virtual COMMAND_T getCommand() const;
+
+  virtual bool needsOutputDirectory() const;
+
+
+};
+
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
+
diff --git a/src/app/PrintVersion.cpp b/src/app/PrintVersion.cpp
new file mode 100644
index 0000000..5754e6a
--- /dev/null
+++ b/src/app/PrintVersion.cpp
@@ -0,0 +1,72 @@
+/**
+ * \file PrintVersion.cpp
+ * \brief Object for printing the crux version number.
+ *****************************************************************************/
+#include "PrintVersion.h"
+#include "crux_version.h"
+#include "pwiz/Version.hpp"
+#include "Caller.h"
+#include "CometSearch/Common.h"
+#include "boost/version.hpp"
+using namespace std;
+
+/**
+ * \returns a blank PrintVersion object
+ */
+PrintVersion::PrintVersion() {
+
+}
+
+/**
+ * Destructor
+ */
+PrintVersion::~PrintVersion() {
+}
+
+/**
+ * main method for PrintVersion
+ */
+int PrintVersion::main(int argc, char** argv) {
+  (void)argc;
+  (void)argv;
+
+  printf("====================\n");
+  printf("Crux version %s\n", CRUX_VERSION);
+
+  printf("====================\n");  
+  string proteowizard_version = pwiz::Version::str();
+  printf("Proteowizard version %s\n", proteowizard_version.c_str());
+  
+  printf("====================\n");
+  string percolator_version = Caller::greeter();
+  printf("%s", percolator_version.c_str());
+  
+  printf("====================\n");
+  printf("Comet version %s\n", comet_version);
+
+  printf("====================\n");
+  printf("Boost version %s\n", BOOST_LIB_VERSION);
+  printf("====================\n");
+
+  return 0;
+}
+
+/**
+ * \returns the command name for PrintVersion
+ */
+string PrintVersion::getName() const {
+  return "version";
+}
+
+/**
+ * \returns the description for PrintVersion
+ */
+string PrintVersion::getDescription() const {
+  return 
+    "Print the Crux version number to standard output, "
+    "then exit.";
+}
+
+COMMAND_T PrintVersion::getCommand() const {
+  return VERSION_COMMAND;
+}
diff --git a/src/app/PrintVersion.h b/src/app/PrintVersion.h
new file mode 100644
index 0000000..b6b194f
--- /dev/null
+++ b/src/app/PrintVersion.h
@@ -0,0 +1,57 @@
+/**
+ * \file PrintVersion.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 6 December 2010
+ * \brief Object for printing the crux version number.
+ *****************************************************************************/
+#ifndef PRINTVERSION_H
+#define PRINTVERSION_H
+
+#include "CruxApplication.h"
+
+#include <string>
+
+class PrintVersion: public CruxApplication {
+
+ public:
+  /**
+   * \returns a blank PrintVersion object
+   */
+  PrintVersion();
+  
+  /**
+   * Destructor
+   */
+  ~PrintVersion();
+
+  /**
+   * main method for PrintVersion
+   */
+  virtual int main(int argc, char** argv);
+
+  /**
+   * \returns the command name for PrintVersion
+   */
+  virtual std::string getName() const;
+
+  /**
+   * \returns the description for PrintVersion
+   */
+  virtual std::string getDescription() const;
+
+  /**
+   * \returns the enum of the application, default MISC_COMMAND
+   */
+  virtual COMMAND_T getCommand() const;
+
+};
+
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/ReadSpectrumRecordsApplication.cpp b/src/app/ReadSpectrumRecordsApplication.cpp
new file mode 100644
index 0000000..d4e810c
--- /dev/null
+++ b/src/app/ReadSpectrumRecordsApplication.cpp
@@ -0,0 +1,91 @@
+#include "ReadSpectrumRecordsApplication.h"
+
+#include "io/carp.h"
+#include "util/Params.h"
+
+ReadSpectrumRecordsApplication::ReadSpectrumRecordsApplication() {
+}
+
+ReadSpectrumRecordsApplication::~ReadSpectrumRecordsApplication() {
+}
+
+int ReadSpectrumRecordsApplication::main(int argc, char** argv) {
+  carp(CARP_INFO, "Running read-spectrumrecords...");
+
+  string records_file = Params::GetString("spectrum records file");
+
+  pb::Header header;
+  HeadedRecordReader reader(records_file, &header);
+  if (!reader.OK()) {
+    carp(CARP_FATAL, "Error reading spectrum records file");
+  }
+
+  show(reader);
+
+  if (!reader.OK()) {
+    carp(CARP_FATAL, "Error reading spectrum records file");
+  }
+
+  return 0;
+}
+
+void ReadSpectrumRecordsApplication::show(
+  HeadedRecordReader& reader
+) {
+  int count = 0;
+  pb::Spectrum pb_spectrum;
+  cout << setprecision(10);
+  while (!reader.Done()) {
+    reader.Read(&pb_spectrum);
+    Spectrum spectrum(pb_spectrum);
+
+    cout << "Spectrum Number: " << spectrum.SpectrumNumber();
+    if (spectrum.PrecursorMZ() > 0)
+      cout << "  Precursor m/z: " << spectrum.PrecursorMZ();
+    cout << endl;
+
+    if (spectrum.NumChargeStates() > 0) {
+      cout << "Charge states: " << spectrum.ChargeState(0);
+      for (int i = 1; i < spectrum.NumChargeStates(); ++i)
+        cout << ", " << spectrum.ChargeState(i);
+      cout << endl;
+    }
+
+    for (int i = 0; i < spectrum.Size(); ++i)
+      cout << spectrum.M_Z(i) << " " << spectrum.Intensity(i) << endl;
+  }
+}
+
+string ReadSpectrumRecordsApplication::getName() const {
+  return "read-spectrumrecords";
+}
+
+string ReadSpectrumRecordsApplication::getDescription() const {
+  return "Runs read-spectrumrecords";
+}
+
+vector<string> ReadSpectrumRecordsApplication::getArgs() const {
+  string arr[] = {
+    "spectrum records file"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+bool ReadSpectrumRecordsApplication::needsOutputDirectory() const {
+  return false;
+}
+
+COMMAND_T ReadSpectrumRecordsApplication::getCommand() const {
+  return READ_SPECTRUMRECORDS_COMMAND;
+}
+
+bool ReadSpectrumRecordsApplication::hidden() const {
+  return true; 
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/ReadSpectrumRecordsApplication.h b/src/app/ReadSpectrumRecordsApplication.h
new file mode 100644
index 0000000..fb3e348
--- /dev/null
+++ b/src/app/ReadSpectrumRecordsApplication.h
@@ -0,0 +1,70 @@
+#ifndef READSPECTRUMRECORDSAPPLICATION_H
+#define READSPECTRUMRECORDSAPPLICATION_H
+
+#include "CruxApplication.h"
+
+#include <stdio.h>
+#include <iostream>
+#include <iomanip>
+#include <fstream>
+#include <string>
+#include <gflags/gflags.h>
+#include "tide/spectrum_collection.h"
+#include "tide/records.h"
+
+using namespace std;
+
+class ReadSpectrumRecordsApplication : public CruxApplication {
+
+ protected:
+
+  void show(HeadedRecordReader& reader);
+
+ public:
+
+  /**
+   * Constructor
+   */
+  ReadSpectrumRecordsApplication();
+
+  /**
+   * Destructor
+   */
+  ~ReadSpectrumRecordsApplication();
+
+  /**
+   * Main method
+   */
+  virtual int main(int argc, char** argv);
+
+  /**
+   * Returns the command name
+   */
+  virtual string getName() const;
+
+  /**
+   * Returns the command description
+   */
+  virtual string getDescription() const;
+
+  virtual vector<string> getArgs() const;
+
+  /**
+   * Returns whether the application needs the output directory or not. (default false)
+   */
+  virtual bool needsOutputDirectory() const;
+
+  virtual COMMAND_T getCommand() const;
+
+  virtual bool hidden() const;
+  
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/ReadTideIndex.cpp b/src/app/ReadTideIndex.cpp
new file mode 100644
index 0000000..e22ce40
--- /dev/null
+++ b/src/app/ReadTideIndex.cpp
@@ -0,0 +1,153 @@
+#include "ReadTideIndex.h"
+
+#include "TideMatchSet.h"
+#include "io/carp.h"
+#include "parameter.h"
+#include "app/tide/records_to_vector-inl.h"
+#include "app/tide/peptide.h"
+#include "util/Params.h"
+#include <vector>
+
+using namespace std;
+
+ReadTideIndex::ReadTideIndex() {
+}
+
+ReadTideIndex::~ReadTideIndex() {
+}
+
+int ReadTideIndex::main(int argc, char** argv) {
+  carp(CARP_INFO, "Running read-tide-index...");
+
+  string index_dir = Params::GetString("tide database");
+  string peptides_file = index_dir + "/pepix";
+  string proteins_file = index_dir + "/protix";
+  string auxlocs_file = index_dir + "/auxlocs";
+
+  // Read proteins index file
+  carp(CARP_INFO, "Reading proteins...");
+  ProteinVec proteins;
+  pb::Header protein_header;
+  if (!ReadRecordsToVector<pb::Protein, const pb::Protein>(&proteins,
+      proteins_file, &protein_header)) {
+    carp(CARP_FATAL, "Error reading index (%s)", proteins_file.c_str());
+  }
+  carp(CARP_DEBUG, "Read %d proteins", proteins.size());
+
+  // Read auxlocs index file
+  carp(CARP_INFO, "Reading auxiliary locations...");
+  vector<const pb::AuxLocation*> locations;
+  if (!ReadRecordsToVector<pb::AuxLocation>(&locations, auxlocs_file)) {
+    carp(CARP_FATAL, "Error reading index (%s)", auxlocs_file.c_str());
+  }
+  carp(CARP_DEBUG, "Read %d auxlocs", locations.size());
+
+  // Read peptides index file
+  carp(CARP_INFO, "Reading peptides...");
+  pb::Header peptides_header;
+  HeadedRecordReader peptide_reader(peptides_file, &peptides_header);
+  if (peptides_header.file_type() != pb::Header::PEPTIDES ||
+      !peptides_header.has_peptides_header()) {
+    carp(CARP_FATAL, "Error reading index (%s)", peptides_file.c_str());
+  }
+
+  const pb::Header::PeptidesHeader& pepHeader = peptides_header.peptides_header();
+  MassConstants::Init(&pepHeader.mods(), &pepHeader.nterm_mods(), &pepHeader.cterm_mods(),
+                      Params::GetDouble("mz-bin-width"),
+                      Params::GetDouble("mz-bin-offset"));
+
+  // Set up output file
+  string output_file = make_file_path(getName() + ".peptides.txt");
+  ofstream* output_stream = create_stream_in_path(
+    output_file.c_str(), NULL, Params::GetBool("overwrite"));
+  *output_stream << get_column_header(SEQUENCE_COL) << '\t'
+                 << get_column_header(PROTEIN_ID_COL) << endl;
+
+  RecordReader* reader = peptide_reader.Reader();
+  while (!reader->Done()) {
+    // Read peptide
+    pb::Peptide pb_peptide;
+    reader->Read(&pb_peptide);
+    if (Params::GetBool("skip-decoys") && pb_peptide.is_decoy()) {
+      continue;
+    }
+    Peptide peptide(pb_peptide, proteins);
+
+    // Output to file
+    *output_stream << peptide.SeqWithMods() << '\t'
+                   << proteins[peptide.FirstLocProteinId()]->name();
+    if (peptide.HasAuxLocationsIndex()) {
+      const pb::AuxLocation* aux_loc = locations[peptide.AuxLocationsIndex()];
+      for (int i = 0; i < aux_loc->location_size(); i++) {
+        const pb::Protein* protein = proteins[aux_loc->location(i).protein_id()];
+        if (protein->has_name()) {
+          *output_stream << ';' << protein->name();
+        }
+      }
+    }
+    *output_stream << endl;
+  }
+
+  output_stream->close();
+  delete output_stream;
+
+  return 0;
+}
+
+string ReadTideIndex::getName() const {
+  return "read-tide-index";
+}
+
+string ReadTideIndex::getDescription() const {
+  return "Reads an index generated by tide-index and outputs information about "
+         "the peptides it contains.";
+}
+
+vector<string> ReadTideIndex::getArgs() const {
+  string arr[] = {
+    "tide database"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector<string> ReadTideIndex::getOptions() const {
+  string arr[] = {
+    "skip-decoys"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector< pair<string, string> > ReadTideIndex::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("read-tide-index.peptides.txt",
+    "a tab-delimited file containing two columns with headers: the peptide, and "
+    "a semicolon-delimited list of IDs of the proteins that peptide occurs in."));
+  outputs.push_back(make_pair("read-tide-index.params.txt",
+    "a file containing the name and value of all parameters/options for the "
+    "current operation. Not all parameters in the file may have been used in "
+    "the operation. The resulting file can be used with the --parameter-file "
+    "option for other crux programs."));
+  outputs.push_back(make_pair("read-tide-index.log.txt",
+    "a log file containing a copy of all messages that were printed to the "
+    "screen during execution."));
+  return outputs;
+}
+
+bool ReadTideIndex::needsOutputDirectory() const {
+  return true;
+}
+
+COMMAND_T ReadTideIndex::getCommand() const {
+  return READ_SPECTRUMRECORDS_COMMAND;
+}
+
+bool ReadTideIndex::hidden() const {
+  return true; 
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/ReadTideIndex.h b/src/app/ReadTideIndex.h
new file mode 100644
index 0000000..0f0fa5e
--- /dev/null
+++ b/src/app/ReadTideIndex.h
@@ -0,0 +1,81 @@
+#ifndef READTIDEINDEX_H
+#define READTIDEINDEX_H
+
+#include "CruxApplication.h"
+
+#include <stdio.h>
+#include <iostream>
+#include <iomanip>
+#include <fstream>
+#include <string>
+#include <gflags/gflags.h>
+#include "tide/spectrum_collection.h"
+#include "tide/records.h"
+
+using namespace std;
+
+class ReadTideIndex : public CruxApplication {
+
+ public:
+
+  /**
+   * Constructor
+   */
+  ReadTideIndex();
+
+  /**
+   * Destructor
+   */
+  ~ReadTideIndex();
+
+  /**
+   * Main method
+   */
+  virtual int main(int argc, char** argv);
+
+  /**
+   * Returns the command name
+   */
+  virtual string getName() const;
+
+  /**
+   * Returns the command description
+   */
+  virtual string getDescription() const;
+
+  /**
+   * \returns the arguments of the application
+   */
+  virtual vector<string> getArgs() const;
+
+  /**
+   * \returns the options of the application
+   */
+  virtual vector<string> getOptions() const;
+
+  /**
+   * \returns the outputs of the application as name -> description
+   */
+  virtual vector< pair<string, string> > getOutputs() const;
+
+  /**
+   * Returns whether the application needs the output directory or not.
+   */
+  virtual bool needsOutputDirectory() const;
+
+  virtual COMMAND_T getCommand() const;
+
+  virtual bool hidden() const;
+
+ protected:
+
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/SortColumn.cpp b/src/app/SortColumn.cpp
new file mode 100644
index 0000000..fafbded
--- /dev/null
+++ b/src/app/SortColumn.cpp
@@ -0,0 +1,369 @@
+/**
+ * \file SortColumn.cpp 
+ * \brief Given a delimited file and a column-name, sort the 
+ * file.
+ *****************************************************************************/
+#include "SortColumn.h"
+
+#include "io/DelimitedFile.h"
+
+#include "fdstream.hpp"
+
+#include <errno.h>
+#include "util/WinCrux.h"
+#include "util/Params.h"
+
+using namespace std;
+
+
+/**
+ * \returns a blank SortColumn object
+ */
+SortColumn::SortColumn() {
+
+}
+
+/**
+ * Destructor
+ */
+SortColumn::~SortColumn() {
+}
+
+/**
+ * main method for SortColumn
+ */
+int SortColumn::main(int argc, char** argv) {
+  /* Get parameters */
+  delimited_filename_ = Params::GetString("tsv file");
+  column_name_string_ = Params::GetString("column name");
+  column_type_ = get_column_type_parameter("column-type");
+  ascending_ = Params::GetBool("ascending");
+  delimiter_ = get_delimiter_parameter("delimiter");
+  header_ = Params::GetBool("header");
+
+  DelimitedFileReader delimited_file(delimited_filename_, true, delimiter_);
+  
+  int col_sort_idx = delimited_file.findColumn(column_name_string_);
+
+  if (col_sort_idx == -1) {
+    carp(CARP_ERROR, "column not found:%s\n\n%s", 
+      column_name_string_.c_str(),
+      delimited_file.getAvailableColumnsString().c_str());
+    return -1;
+  }
+
+  col_sort_idx_ = (unsigned int)col_sort_idx;
+
+  /*
+   * So to be able to handle sorting large files without reading the
+   * whole file into memory, we implement a divide-then-merge approach.  
+   * Meaning that we read in a maximum number of rows, sort these, 
+   * then write out the sorted delimited file to a temporary file.  
+   * After processing all of the rows in the original file, we then
+   * merge all the temporary files created, printing out the full sorted file.  
+   */
+  vector<int> temp_file_descriptors;
+  vector<boost::fdostream*> temp_file_streams;
+  vector<string> temp_filenames;
+
+  DelimitedFile* temp_delimited = new DelimitedFile(delimiter_);
+  for (unsigned int col_idx=0;col_idx < delimited_file.numCols();col_idx++) {
+    temp_delimited->addColumn(delimited_file.getColumnName(col_idx));
+  }
+
+  //Maximum number of rows to read before sorting then saving to a temporary file.
+  //In the future, we can set this number to be based upon how much memory
+  //is available on the system.  We want to make it large enough so that we
+  //don't have to create/merge too many temporary files, but small enough so
+  //that sort-by-column doesn't crash from not enough memory or affect the
+  //other processes on the computer.
+  int max_rows = 200000;
+
+  int current_count = 0;
+
+  while(delimited_file.hasNext()) {
+
+    unsigned int new_row = temp_delimited->addRow();
+    for (unsigned int col_idx = 0;col_idx < delimited_file.numCols();col_idx++) {
+      temp_delimited->setString(col_idx, new_row, delimited_file.getString(col_idx));
+    }
+
+    current_count++;
+
+    if (current_count >= max_rows) {
+      carp(CARP_DEBUG, "Sorting %i rows", max_rows);
+      sortDelimited(temp_delimited);
+
+      char ctemp_filename[50] = "SortColumn_XXXXXX";
+    
+      int fd = mkstemp(ctemp_filename);
+      if (fd == -1) {
+        carp(CARP_ERROR, "Error creating temp file!\n "
+                         "Error: %s", strerror(errno));
+        return(-1);
+      }
+      
+      string temp_filename(ctemp_filename);
+  
+      boost::fdostream* out = new boost::fdostream(fd);
+  
+      (*out) << (*temp_delimited);
+      temp_file_streams.push_back(out);
+      temp_file_descriptors.push_back(fd);
+      temp_filenames.push_back(temp_filename);
+      delete(temp_delimited);
+
+      //create a new delimited file.
+      temp_delimited = new DelimitedFile(delimiter_);
+
+      for (unsigned int col_idx = 0;col_idx < delimited_file.numCols();col_idx++) {
+        temp_delimited->setString(col_idx, new_row, delimited_file.getString(col_idx));
+      }
+      //reset to count so that we can read in the next batch of rows.
+      current_count = 0;
+  
+    }
+
+    delimited_file.next();
+  } 
+
+  //done reading the file, now print out the sorted version.
+
+  if (temp_file_descriptors.size() == 0) {
+
+    //no temporary files used, print out the sorted output.
+    sortDelimited(temp_delimited);
+    cout << (*temp_delimited);
+    delete temp_delimited;
+  } else {
+
+    //sort the current and save to a temporary file. 
+    sortDelimited(temp_delimited);
+    char ctemp_filename[50] = "SortColumn_XXXXXX";
+
+    int fd = mkstemp(ctemp_filename);
+
+    if (fd == -1) {
+      carp(CARP_ERROR, "Error creating temp file!\n "
+                       "Error: %s", strerror(errno));
+        return(-1);
+    }
+
+    string temp_filename(ctemp_filename);
+
+    boost::fdostream* out = new boost::fdostream(fd);
+    (*out) << (*temp_delimited);
+    temp_file_streams.push_back(out);
+    temp_file_descriptors.push_back(fd);
+    temp_filenames.push_back(temp_filename);
+    delete(temp_delimited);
+
+    //flush everything.
+    for (unsigned int i=0; i < temp_file_descriptors.size(); i++) {
+      temp_file_streams[i]->flush();
+    }
+
+    //merge the temporary files together, printing out the merged output.
+    mergeDelimitedFiles(temp_filenames);
+  }
+  
+  //clean everything up
+  for (unsigned int idx=0; idx < temp_file_descriptors.size(); idx++) {
+    delete temp_file_streams[idx];
+    close(temp_file_descriptors[idx]);
+    remove(temp_filenames[idx].c_str());
+  }
+
+  return 0;
+
+}
+
+/**
+ * \returns the command name for SortColumn
+ */
+string SortColumn::getName() const {
+  return "sort-by-column";
+}
+
+/**
+ * \returns the description for SortColumn
+ */
+string SortColumn::getDescription() const {
+  return
+    "[[nohtml:Sorts a tab-delimited file by a column.]]"
+    "[[html:<p>Sort the rows of a tab-delimited file according to the values "
+    "in a specified column.</p>]]";
+}
+
+/**
+ * \returns the command arguments
+ */
+vector<string> SortColumn::getArgs() const {
+  string arr[] = {
+    "tsv file",
+    "column name"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command options
+ */
+vector<string> SortColumn::getOptions() const {
+  string arr[] = {
+    "delimiter",
+    "header",
+    "column-type",
+    "ascending",
+    "verbosity"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command outputs
+ */
+vector< pair<string, string> > SortColumn::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("stdout",
+    "a copy of the given file, with rows sorted according to the values in the "
+    "specified column."));
+  return outputs;
+}
+
+/**
+ * sorts the delimited file based upon the column type parameter
+ */
+void SortColumn::sortDelimited(
+  DelimitedFile* delimited ///< delimited file to sort.
+  ) {
+
+  switch(column_type_) {
+
+    case COLTYPE_STRING:
+      delimited->sortByStringColumn(column_name_string_, ascending_);
+      break;
+    case COLTYPE_INT:
+      delimited->sortByIntegerColumn(column_name_string_, ascending_);
+      break;
+    case COLTYPE_REAL:
+      delimited->sortByFloatColumn(column_name_string_, ascending_);
+      break;
+    case NUMBER_COLTYPES:
+    case COLTYPE_INVALID:
+      carp(CARP_FATAL, "Unknow column type");
+  }
+}
+
+/**
+ * merges a list of sorted delimited files and prints 
+ * out the resulting sorted file.  This method accomplishes this
+ * by testing the current row of each temporary file against
+ * the others.  If it's compare value is the smallest (or largest when descending)
+ * then printout that temporary file's row and advance the next row.
+ * Keep iterating until all rows for all temporary files are printed out.
+ */
+void SortColumn::mergeDelimitedFiles(
+  vector<string>& temp_filenames
+  ) {
+
+  //open the temporary delimited files using a reader.
+  vector<DelimitedFileReader*> delimited_files;
+  for (unsigned int idx=0;idx < temp_filenames.size();idx++) {
+    delimited_files.push_back(new DelimitedFileReader(temp_filenames[idx], delimiter_));
+  }
+  
+  //print out the header if requested.
+  if (header_) {
+    cout << delimited_files[0]->getHeaderString() << endl;
+  }
+
+  int best_idx = -1;
+
+  do {
+    best_idx = -1;
+    //find the temporary file whose current row's column value is the
+    //smallest or largest.
+    for (unsigned int idx = 0;idx < delimited_files.size();idx++) {
+      if (delimited_files[idx]->hasNext()) {
+        if (best_idx == -1) {
+          best_idx = idx;
+        } else {
+          int compare_result = compare(delimited_files[idx], delimited_files[best_idx]);
+          if ((ascending_) && (compare_result == -1)) {
+            best_idx = idx;
+          } else if ((!ascending_) && (compare_result == 1)) {
+            best_idx = idx;
+          }
+        }
+      }
+  
+      //if a best was found, print out the row and advance to the
+      //next row.
+      if (best_idx != -1) {
+        cout << delimited_files[best_idx]->getString() << endl;
+        delimited_files[best_idx]->next();
+      }
+    }
+    //iterate until all rows of all temporary files are printed out.
+  } while (best_idx != -1);
+
+  for (unsigned int idx = 0; idx < temp_filenames.size(); idx++) {
+    delete delimited_files[idx];
+  }
+}
+
+/**
+ * \returns the result of comparing two file(s) current row and column: 
+ * 1 : file1 > file2
+ * -1 : file1 < file2
+ * 0 : file1 = file2
+ */
+int SortColumn::compare(
+  DelimitedFileReader* file1, 
+  DelimitedFileReader* file2
+  ) {
+
+  bool isless = false;
+  bool isequal = false;
+  
+  switch (column_type_) {
+    case COLTYPE_STRING:
+      isless = file1->getString(col_sort_idx_) < file2->getString(col_sort_idx_);
+      if (!isless) {
+        isequal = file1->getString(col_sort_idx_) == file2->getString(col_sort_idx_);
+      }
+    break;
+    case COLTYPE_REAL:
+      isless = file1->getDouble(col_sort_idx_) < file2->getDouble(col_sort_idx_);
+      if (!isless) {
+        isequal = file1->getDouble(col_sort_idx_) == file2->getDouble(col_sort_idx_);
+      }
+    break;
+    case COLTYPE_INT:
+      isless = file1->getInteger(col_sort_idx_) < file2->getInteger(col_sort_idx_);
+      if (!isless) {
+        isequal = file1->getInteger(col_sort_idx_) == file2->getInteger(col_sort_idx_);
+      }
+    break;
+    case NUMBER_COLTYPES:
+    case COLTYPE_INVALID:
+      carp(CARP_FATAL, "Column type invalid!");
+
+  }
+
+  if (isless) {
+    return -1;
+  } else if (isequal) {
+    return 0;
+  } else {
+    return 1;
+  }
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/SortColumn.h b/src/app/SortColumn.h
new file mode 100644
index 0000000..f0cd023
--- /dev/null
+++ b/src/app/SortColumn.h
@@ -0,0 +1,109 @@
+/**
+ * \file SortColumn.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 6 December 2010
+ * \brief Given a delimited file and a column-name, sort the 
+ * file.
+ *****************************************************************************/
+#ifndef SORTCOLUMN_H
+#define SORTCOLUMN_H
+
+#include "CruxApplication.h"
+#include "io/DelimitedFileReader.h"
+
+#include <string>
+#include <vector>
+
+class SortColumn: public CruxApplication {
+
+ protected:
+  //parameters
+  std::string delimited_filename_; ///<delimited filename to sort
+  std::string column_name_string_; ///<column name to sort by
+  COLTYPE_T column_type_;     ///<column's type (int, real, string).
+  bool ascending_;            ///<ascending/descending order?
+  char delimiter_;            ///<file's delimiter
+  bool header_;               ///<print out the header?
+  unsigned int col_sort_idx_; ///<column index to sort by
+
+  //private methods.
+  /**
+   * sorts the delimited file based upon the column type parameter
+   */
+  void sortDelimited(
+    DelimitedFile* delimited
+  );
+
+  /**
+   * merges a list of sorted delimited files and prints 
+   * out the resulting sorted file.
+   */
+  void mergeDelimitedFiles(
+    std::vector<std::string>& temp_filenames
+  );
+
+  /**
+   * /returns the result of comparing two file(s) current row and column: 
+   * 1 : file1 > file2
+   * -1 : file1 < file2
+   * 0 : file1 = file2
+   */
+  int compare(
+    DelimitedFileReader* file1,
+    DelimitedFileReader* file2
+  );
+
+
+ public:
+
+  /**
+   * \returns a blank SortColumn object
+   */
+  SortColumn();
+
+  /**
+   * Destructor
+   */
+  ~SortColumn();
+
+  /**
+   * main method for SortColumn
+   */
+  virtual int main(int argc, char** argv);
+
+  /**
+   * \returns the command name for SortColumn
+   */
+  virtual std::string getName() const;
+
+  /**
+   * \returns the description for SortColumn
+   */
+  virtual std::string getDescription() const;
+
+  /**
+   * \returns the command arguments
+   */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+   * \returns the command options
+   */
+  virtual std::vector<std::string> getOptions() const;
+
+  /**
+   * \returns the command outputs
+   */
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+};
+
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/SpectralCounts.cpp b/src/app/SpectralCounts.cpp
new file mode 100644
index 0000000..7a17b8d
--- /dev/null
+++ b/src/app/SpectralCounts.cpp
@@ -0,0 +1,1148 @@
+#include <iterator>
+#include "SpectralCounts.h"
+#include "util/crux-utils.h"
+#include "util/Params.h"
+#include "io/OutputFiles.h"
+#include "model/Peptide.h"
+#include "model/ProteinPeptideIterator.h"
+#include "io/SpectrumCollectionFactory.h"
+
+using namespace std;
+using namespace Crux;
+/**
+ * Default constructor.
+ */
+SpectralCounts::SpectralCounts() 
+  : output_(NULL), 
+    threshold_(0),
+    unique_mapping_(false),
+    quantitation_(PROTEIN_QUANT_LEVEL),
+    parsimony_(PARSIMONY_NONE),
+    measure_(MEASURE_SIN),
+    bin_width_(0),
+    peptide_scores_(Peptide::lessThan),
+    peptide_scores_unique_(Peptide::lessThan),
+    peptide_scores_shared_(Peptide::lessThan),
+    protein_scores_(protein_id_less_than),
+    protein_scores_unique_(protein_id_less_than),
+    protein_scores_shared_(protein_id_less_than),
+    protein_supporting_peptides_(protein_id_less_than),
+    protein_meta_protein_(protein_id_less_than),
+    meta_mapping_(comparePeptideSets),
+    meta_protein_scores_(compareMetaProteins),
+    meta_protein_ranks_(compareMetaProteins) {
+}
+
+/**
+ * Default destructor.
+ */
+SpectralCounts::~SpectralCounts() {
+  delete output_;
+}
+
+/**
+ * Given a collection of scored PSMs, print a list of proteins
+ * ranked by their a specified score. Spectral-counts supports two
+ * types of quantification: Raw counts (RAW), 
+ * Normalized Spectral Abundance Factor (NSAF),
+ * Distributed Normalized Spectral Abundance Factor (dNSAF),
+ * EMPAI,
+ * and Normalized Spectral Index (SIN). 
+ * \returns 0 on successful completion.
+ */
+int SpectralCounts::main(int argc, char** argv) {
+  getParameterValues(); // all the get_<type>_parameter calls here
+
+  // open output files
+  output_ = new OutputFiles(this);
+  output_->writeHeaders();
+
+  // get a set of matches that pass the threshold
+  filterMatches();
+  carp(CARP_INFO, "Number of matches passed the threshold %i", 
+       matches_.size());
+
+  if (matches_.empty()) {
+    carp(CARP_FATAL, "No matches passed the threshold!");
+  }
+
+  // get a set of peptides
+  getPeptideScores();
+  if (unique_mapping_) {
+    makeUniqueMapping();
+  }
+  carp(CARP_INFO, "Number of peptides %i", peptide_scores_.size());
+
+  // quantify at either the peptide or protein level
+  if (quantitation_ == PEPTIDE_QUANT_LEVEL) { // peptide level
+    if (measure_ != MEASURE_RAW) {
+      normalizePeptideScores();
+    }
+    writeRankedPeptides();
+
+  } else if (quantitation_ == PROTEIN_QUANT_LEVEL) { // protein level
+    
+    getProteinScores();
+    if (measure_ != MEASURE_RAW) {
+      normalizeProteinScores();
+      checkProteinNormalization();
+    }
+    carp(CARP_INFO, "Number of proteins %i", protein_scores_.size());
+        
+    if (parsimony_ != PARSIMONY_NONE) { //if parsimony is not none
+      getProteinToPeptides();
+      getMetaMapping();
+      getProteinToMetaProtein();
+      carp(CARP_INFO, "Number of meta proteins %i", meta_mapping_.size());
+
+      if (parsimony_ == PARSIMONY_GREEDY) { //if parsimony is greedy
+        performParsimonyAnalysis();
+      }
+      getMetaScores();
+      getMetaRanks();
+    }
+    writeRankedProteins();
+  } else {
+    carp(CARP_FATAL, "Invalid quantification level.");
+  }
+  
+  return 0;
+}
+
+/**
+ * Collect all the parameter/option values we will need and store them
+ * as member variables.
+ */
+void SpectralCounts::getParameterValues() {
+  psm_file_ = Params::GetString("input PSMs");
+  threshold_ = Params::GetDouble("threshold");
+  database_name_ = Params::GetString("protein-database");
+  unique_mapping_ = Params::GetBool("unique-mapping");
+  quantitation_ = string_to_quant_level_type(Params::GetString("quant-level"));
+  parsimony_ = string_to_parsimony_type(Params::GetString("parsimony"));
+  measure_ = string_to_measure_type(Params::GetString("measure"));
+
+  if (measure_ == MEASURE_SIN && Params::GetString("input-ms2").empty()) {
+    carp(CARP_FATAL, "The SIN computation for spectral-counts requires "
+                     "that the --input-ms2 option specify a file.");
+  }
+
+  bin_width_ = Params::GetDouble("mz-bin-width");
+  
+  threshold_type_ = get_threshold_type_parameter("threshold-type");
+  custom_threshold_name_ = Params::GetString("custom-threshold-name");
+  threshold_min_ = Params::GetBool("custom-threshold-min");
+}
+
+/**
+ * For every protein that can be mapped from the set of 
+ * peptides in PeptideToScore map, enter the protein and
+ * the set of identified peptides it maps to, into 
+ * ProteinToPeptide
+ */
+void SpectralCounts::getProteinToPeptides() {
+  for (PeptideToScore::iterator pep_it = peptide_scores_.begin();
+       pep_it != peptide_scores_.end(); ++pep_it) {
+    Peptide* peptide = pep_it->first;
+    for(PeptideSrcIterator iter = peptide->getPeptideSrcBegin();
+        iter!= peptide->getPeptideSrcEnd();
+        ++iter) {
+      PeptideSrc* peptide_src = *iter; 
+      Protein* protein = peptide_src->getParentProtein();
+      if (protein_supporting_peptides_.find(protein) == 
+          protein_supporting_peptides_.end()) {
+        PeptideSet newset(Peptide::lessThan);
+        protein_supporting_peptides_.insert(make_pair(protein, newset));
+      }
+      protein_supporting_peptides_[protein].insert(peptide);
+    }
+  }
+}
+
+
+/**
+ * Enters the mapping of protein to its metaProtein
+ * into ProteinToMetaProtein. MetaProteins are retreieved
+ * from MetaMapping
+ *
+ */
+void SpectralCounts::getProteinToMetaProtein() {
+  // for every meta protein
+  for (MetaMapping::iterator meta_protein_it = meta_mapping_.begin();
+       meta_protein_it != meta_mapping_.end(); ++meta_protein_it) {
+    MetaProtein proteins = meta_protein_it->second;
+    // for every protein in the meta protein
+    for (MetaProtein::iterator proteins_it = proteins.begin();
+         proteins_it != proteins.end(); ++proteins_it) {
+      // create a mapping of protein to meta protein
+      protein_meta_protein_.insert(make_pair((*proteins_it), proteins));
+    }
+  }
+}
+
+/**
+ * calculates the protein scores based upon the dNSAF metric.  First,
+ * the spectral counts for the peptides unique to each protein is added,
+ * then the spectral counts for the peptide shared amongst the proteins
+ * are added with a distribution factor based upon the number of unique
+ * counts that each protein is assigned
+ */
+void SpectralCounts::getProteinScoresDNSAF() {
+
+  //calculate unique scores (unique peptides).
+  for (PeptideToScore::iterator pep_it = peptide_scores_unique_.begin();
+    pep_it != peptide_scores_unique_.end();
+    ++pep_it) {
+
+    Peptide* peptide = pep_it->first;
+    FLOAT_T pep_score = pep_it->second;
+    for (PeptideSrcIterator iter = peptide->getPeptideSrcBegin();
+         iter != peptide->getPeptideSrcEnd();
+         ++iter) {
+      PeptideSrc* peptide_src = *iter;
+      Protein* protein = peptide_src->getParentProtein();
+      if (protein_scores_unique_.find(protein) == protein_scores_unique_.end()) {
+        protein_scores_unique_[protein] = 0;
+        protein_scores_shared_[protein] = 0;
+      }
+
+      protein_scores_unique_[protein] += pep_score;
+    }   
+  }
+
+  //Handle shared peptides
+  //For each peptide that is shared across multiple proteins,
+  //we calculate a distribution factor based upon the unique
+  //peptides assigned to each protein that is sharing this peptide
+  //we then add the shared peptide count * the protein's distribution
+  //to each protein that is sharing that peptide.
+  //There is a wierd feature that a protein with no unique peptide will
+  //have a dNSAF score of zero... I don't know if we should include the
+  //zero score in the list of proteins...
+  for (PeptideToScore::iterator pep_it = peptide_scores_shared_.begin();
+    pep_it != peptide_scores_shared_.end();
+    ++pep_it) {
+    Peptide* peptide = pep_it->first;
+    FLOAT_T shared_pep_score = pep_it->second;
+
+    double unique_sum = 0.0;
+   
+    for (PeptideSrcIterator iter = peptide->getPeptideSrcBegin();
+         iter != peptide->getPeptideSrcEnd();
+         ++iter) {
+      PeptideSrc* peptide_src = *iter;
+      
+      Protein* protein = peptide_src->getParentProtein();
+      if (protein_scores_unique_.find(protein) != protein_scores_unique_.end()) {
+        unique_sum += protein_scores_unique_[protein];
+      }
+        
+    }   
+  
+    if (unique_sum != 0) {
+      for (PeptideSrcIterator iter = peptide->getPeptideSrcBegin();
+           iter != peptide->getPeptideSrcEnd();
+           ++iter) {
+        PeptideSrc* peptide_src = *iter;
+        Protein* protein = peptide_src->getParentProtein();
+        if (protein_scores_unique_.find(protein) != protein_scores_unique_.end()) {
+          FLOAT_T d_factor = protein_scores_unique_[protein] / unique_sum;
+          protein_scores_shared_[protein] += d_factor * shared_pep_score;
+        }
+      }
+    }
+  }
+
+  //add up shared and unique scores to get final score
+  for (ProteinToScore::iterator prot_iter = protein_scores_unique_.begin();
+    prot_iter != protein_scores_unique_.end();
+    ++prot_iter) {
+    Protein* protein = prot_iter->first;
+    FLOAT_T unique_score = prot_iter->second;
+    protein_scores_[protein] = unique_score;
+  }
+
+  for (ProteinToScore::iterator prot_iter = protein_scores_shared_.begin();
+    prot_iter != protein_scores_shared_.end();
+    ++prot_iter) {
+    Protein *protein = prot_iter->first;
+    FLOAT_T shared_score = prot_iter->second;
+    protein_scores_[protein] += shared_score;
+  }
+}
+
+/**
+ * A score for each protein is calculated by summing 
+ * the scores of each peptide that belongs to a protein
+ */
+void SpectralCounts::getProteinScores() {
+
+  if (measure_ == MEASURE_DNSAF) {
+    getProteinScoresDNSAF();
+  } else {
+
+    // iterate through each peptide
+    for (PeptideToScore::iterator pep_it = peptide_scores_.begin();
+         pep_it != peptide_scores_.end(); ++pep_it) {
+      Peptide* peptide = pep_it->first;
+      FLOAT_T pep_score = pep_it->second;
+      for (PeptideSrcIterator iter = peptide->getPeptideSrcBegin();
+           iter != peptide->getPeptideSrcEnd();
+           ++iter) {
+        PeptideSrc* peptide_src =*iter;
+        Protein* protein = peptide_src->getParentProtein();
+        if (protein_scores_.find(protein) == protein_scores_.end()) {
+          protein_scores_.insert(make_pair(protein, 0.0));
+        }
+        protein_scores_[protein] += pep_score;
+      }
+    }
+  }
+}
+
+/**
+ * Takes the PeptideToScores map and updates all
+ * values with normalized values. Normalized by sum
+ * of all scores and then by the peptide length
+ *
+ */
+void SpectralCounts::normalizePeptideScores() {
+  carp(CARP_DEBUG, "Normalizing peptide scores");
+  FLOAT_T total = 0.0;
+
+  // calculate sum of all scores
+  for (PeptideToScore::iterator it = peptide_scores_.begin();
+       it != peptide_scores_.end(); ++it) {
+    FLOAT_T score = it->second;
+    total += score;
+  }
+
+  // normalize by sum of scores and length
+  for (PeptideToScore::iterator it = peptide_scores_.begin();
+       it != peptide_scores_.end(); ++it) {
+    FLOAT_T score = it->second;
+    Peptide* peptide = it->first;
+    it->second = score / total / (FLOAT_T)peptide->getLength();
+
+  }
+
+}
+
+
+/**
+ * Changes the scores in protien_scores_ to either be divided by the
+ * sum of all scores times the peptide length (SIN, NSAF) or to be the
+ * final emPAI score.
+ */
+void SpectralCounts::normalizeProteinScores() {
+  if (measure_ == MEASURE_EMPAI) {
+    computeEmpai();
+  } 
+
+  carp(CARP_DEBUG, "Normalizing protein scores");
+  FLOAT_T total = 0.0;
+    
+  // calculate sum of all scores
+  for (ProteinToScore::iterator it = protein_scores_.begin();
+       it != protein_scores_.end(); ++it) {
+
+    FLOAT_T score = it->second;
+    Protein* protein = it->first;
+    if ( (measure_ == MEASURE_NSAF) || (measure_ == MEASURE_DNSAF)) {
+      score = score / (FLOAT_T)protein->getLength();
+    }
+    total += score;
+  }
+    
+  // normalize by sum of all scores
+  for (ProteinToScore::iterator it = protein_scores_.begin();
+       it != protein_scores_.end(); ++it) {
+
+    FLOAT_T score = it->second;
+    Protein* protein = it->first;
+    score = score / total;
+    // normalize by length
+    if (measure_ == MEASURE_NSAF || 
+        measure_ == MEASURE_DNSAF || 
+        measure_ == MEASURE_SIN ) {
+      score = score / (FLOAT_T)protein->getLength();
+    }
+    it->second = score;
+  }
+}
+
+/**
+ * Checks that the normalized scores add up to one
+ */
+void SpectralCounts::checkProteinNormalization() {
+
+  FLOAT_T sum = 0;
+
+  for (ProteinToScore::iterator iter = protein_scores_.begin();
+    iter != protein_scores_.end();
+    ++iter) {
+
+    FLOAT_T score = iter->second;
+    if (measure_ == MEASURE_SIN) {
+      //The normalized values of sin do not add up to 1, but they
+      //should if you multiply the length back in...
+      Protein* protein = iter->first;
+      score = score * (FLOAT_T)protein->getLength();
+    }
+
+    sum += score;
+  }
+
+  if (fabs(sum-1.0) > 0.0001) {
+    carp(CARP_WARNING, "Normalized protein scores do not add up to one!:%f", sum);
+    for (ProteinToScore::iterator iter = protein_scores_.begin();
+      iter != protein_scores_.end();
+      ++iter) {
+
+      carp(CARP_DEBUG, "%s %f", iter->first->getIdPointer().c_str(), iter->second);
+    }
+  }
+}
+
+/**
+ * Computes the 10^(observed/total) - 1 score for each protein.  Assumes
+ * that protein_scores_ has been populated with the count of observed
+ * unique peptides for each protein.
+ */
+void SpectralCounts::computeEmpai() {
+  PeptideConstraint* constraint = PeptideConstraint::newFromParameters();
+
+  ProteinToScore::iterator it = protein_scores_.begin();;
+  for (; it != protein_scores_.end(); ++it) {
+    FLOAT_T observed_peptides = it->second;
+    Protein* protein = it->first;
+    ProteinPeptideIterator* iter = new ProteinPeptideIterator(protein, 
+                                                              constraint);
+    FLOAT_T possible_peptides = iter->getTotalPeptides();
+
+    it->second = pow(10, (observed_peptides / possible_peptides)) - 1.0;
+
+    delete iter;
+  }
+  PeptideConstraint::free(constraint);
+}
+
+/**
+ * For the spectrum associated with the match, sum the intensities of
+ * all b and y ions that are not modified.
+ * \return The sum of unmodified b and y ions.
+ */
+FLOAT_T SpectralCounts::sumMatchIntensity(Match* match,
+                                        Crux::SpectrumCollection* spectra) {
+  FLOAT_T match_intensity = 0;
+  char* peptide_seq = match->getSequence();
+  MODIFIED_AA_T* modified_sequence = match->getModSequence();
+  int charge = match->getCharge();
+  Spectrum* temp = match->getSpectrum();
+  int scan = temp->getFirstScan();
+
+  Spectrum* spectrum = spectra->getSpectrum(scan);
+
+  if (spectrum == NULL) {
+    carp(CARP_FATAL, "scan: %d doesn't exist or not found!");
+    return 0.0;
+  }
+
+  Ion* ion;
+  SCORER_TYPE_T score_type = XCORR;
+  IonConstraint* ion_constraint =
+    IonConstraint::newIonConstraintSmart(score_type, charge);
+  IonSeries* ion_series = new IonSeries(ion_constraint, charge);
+  ion_series->update(peptide_seq, modified_sequence);
+  ion_series->predictIons();
+  for (IonIterator ion_it = ion_series->begin();
+       ion_it != ion_series->end(); ++ion_it) {
+    ion = (*ion_it);
+    if (ion -> getType() == B_ION || ion -> getType() == Y_ION) {
+      if (!ion->isModified()) {
+        Peak * peak = spectrum->getNearestPeak(ion->getMassZ(),
+                                                bin_width_);
+        if (peak != NULL) {
+          match_intensity += peak->getIntensity();
+        }
+      }
+    }
+  }
+  delete ion_series;
+  free(peptide_seq);
+
+  return match_intensity;
+}
+
+
+/**
+ * Generate a score for each peptide in the set of matches.  Populate
+ * peptide_scores_ which becomes a unique set of peptides, each with a
+ * score.
+ *
+ * For SIN the score is the sum of intensites of b and y ions (without
+ * H2O modifications).  Intensites are taken from the .ms2 file.
+ *
+ * For NSAF, the score is the number of matches (spectra) for each peptide.
+ * For EMPAI, the score is 1 as it only reqires the number of peptides
+ * observed per protein.
+ */
+void SpectralCounts::getPeptideScores() {
+  Crux::SpectrumCollection* spectra = NULL;
+
+  // for SIN, parse out spectrum collection from ms2 fiel
+  if( measure_ == MEASURE_SIN ) {
+    spectra = SpectrumCollectionFactory::create(Params::GetString("input-ms2"));
+  }
+
+  for(set<Match*>::iterator match_it = matches_.begin();
+      match_it != matches_.end(); ++match_it) {
+
+    FLOAT_T match_intensity = 1; // for NSAF just count each for the peptide/
+
+    Match* match = (*match_it);
+    // for sin, calculate total ion intensity for match by
+    // summing up peak intensities
+    if (measure_ == MEASURE_SIN) {
+      match_intensity = sumMatchIntensity(match, spectra);
+    }
+
+    // add ion_intensity to peptide scores
+    Peptide* peptide = match->getPeptide();
+
+    if ( measure_ == MEASURE_DNSAF) {
+      //keep track of unique and shared mappings.
+      if (peptide->getNumPeptideSrc() > 1) {
+        if (peptide_scores_shared_.find(peptide) == peptide_scores_shared_.end()) {
+          peptide_scores_shared_.insert(make_pair(peptide, 0.0));
+        }
+        peptide_scores_shared_[peptide] += match_intensity;
+      } else {
+        if (peptide_scores_unique_.find(peptide) == peptide_scores_unique_.end()) {
+          peptide_scores_unique_.insert(make_pair(peptide, 0.0));
+        }
+        peptide_scores_unique_[peptide] += match_intensity;
+      }
+    }
+
+    if (peptide_scores_.find(peptide) ==  peptide_scores_.end()) {
+      peptide_scores_.insert(make_pair(peptide, 0.0));
+    }
+    peptide_scores_[peptide] += match_intensity;
+
+  }
+
+  if (measure_ == MEASURE_SIN) {
+    delete spectra;
+  }
+
+  // for emPAI we just need a count of unique peptides
+  if (measure_ == MEASURE_EMPAI) {
+    PeptideToScore::iterator itr = peptide_scores_.begin();
+    for(; itr != peptide_scores_.end(); ++itr) {
+      itr->second = 1; // count each unique peptide once
+    }
+  }
+}
+
+
+/**
+ * Create a set of matches, all with an XCORR rank == 1 and all of which
+ * have a qvalue score lower than user-specified threshold.
+ */
+void SpectralCounts::filterMatches() {
+
+  match_collection_ = parser_.create(
+    psm_file_.c_str(),
+    database_name_.c_str());
+  carp(CARP_INFO, "Number of matches:%d", match_collection_->getMatchTotal());
+
+  switch(threshold_type_) {
+    case THRESHOLD_NONE:
+      filterMatchesNone();
+      break;
+    case THRESHOLD_QVALUE:
+      filterMatchesQValue();
+      break;
+    case THRESHOLD_CUSTOM:
+      filterMatchesCustom();
+      break;
+    case THRESHOLD_INVALID:
+    case NUMBER_THRESHOLD_TYPES:
+      carp(CARP_FATAL, "Invalid threshold type");
+  }
+
+}
+
+void SpectralCounts::filterMatchesNone() {
+
+  MatchIterator match_iterator(match_collection_);
+
+  while(match_iterator.hasNext()) {
+    Match* current_match = match_iterator.next();
+    if (!current_match->isDecoy()) {
+      matches_.insert(current_match);
+    }
+  }
+
+}
+
+void SpectralCounts::invalidCustomScore() {
+
+    ostringstream oss;
+
+    oss << "Need valid name for custom threshold.  Available ones are:";
+
+    //print out custom names
+    for (int idx=0;idx < NUMBER_SCORER_TYPES;idx++) {
+    
+      if (match_collection_->getScoredType((SCORER_TYPE_T)idx)) {
+        oss << endl << "\t" << scorer_type_to_string((SCORER_TYPE_T)idx);
+      }
+
+    }
+    
+
+    vector<string> custom_score_names;
+    match_collection_->getCustomScoreNames(custom_score_names);
+
+    for (int idx=0;idx < custom_score_names.size();idx++) {
+      oss << endl << "\t" << custom_score_names[idx];
+    }
+
+    string die_str = oss.str();
+    carp(CARP_FATAL, die_str);
+}
+
+
+/**
+ * filters matches based upon a custom threshold (not q-value)
+ */
+void SpectralCounts::filterMatchesCustom() {
+
+  if (custom_threshold_name_.empty()) {
+    invalidCustomScore();
+  }
+
+
+  //first try to map from tab delimited headers
+  SCORER_TYPE_T scorer;
+  bool tab_header = string_to_scorer_type(custom_threshold_name_.c_str(), &scorer);
+
+  if (tab_header) {
+    //must be a custom field, this can happen with pep xml or mzid.
+    filterMatchesScore(scorer);    
+  } else {
+    filterMatchesCustomScore();
+  }
+
+
+}
+
+/**
+ * filters matches based upon a SCORER_TYPE_T
+ */
+void SpectralCounts::filterMatchesScore(
+  SCORER_TYPE_T scorer ///< scorer to use
+  ) {
+
+  MatchIterator match_iterator(match_collection_, scorer, false);
+  
+  while (match_iterator.hasNext()) {
+    Match* match = match_iterator.next();
+    if (!match->isDecoy()) {
+      if (threshold_min_) {
+        if (match->getScore(scorer) <= threshold_) {
+          matches_.insert(match);
+        } 
+      } else {
+        if (match->getScore(scorer) >= threshold_) {
+          matches_.insert(match);
+        }
+      }
+    }
+  }
+}
+
+/**
+ * filters matches based upon a custom score that is not SCORER_TYPE_T
+ */
+void SpectralCounts::filterMatchesCustomScore() {
+
+  MatchIterator match_iterator(match_collection_);
+
+  while(match_iterator.hasNext()) {
+    Match* match = match_iterator.next();
+    if (!match->isDecoy()) {
+      FLOAT_T score;
+      bool success = match->getCustomScore(custom_threshold_name_, score);
+  
+      if (!success) {
+        invalidCustomScore();
+      }
+      if (threshold_min_) {
+        if (score <= threshold_) {
+          matches_.insert(match);
+        }
+      } else {
+        if (score >= threshold_) {
+          matches_.insert(match);
+        }
+      }
+    }
+  }
+}
+
+void SpectralCounts::filterMatchesQValue() {
+  //assume we are using 
+  // figure out which qvalue we are using
+  SCORER_TYPE_T qval_type = get_qval_type(match_collection_);
+  if (qval_type == INVALID_SCORER_TYPE) {
+    carp(CARP_FATAL, "The matches in %s do not have q-values.\n"
+                     "Please either provide a file with q-values or "
+                     "set threshold-type to \"none\" or \"custom.\"",
+    psm_file_.c_str());
+  }
+
+  carp(CARP_DETAILED_DEBUG,
+    "filterMatches(): Getting match iterator for %s", 
+    scorer_type_to_string(qval_type));
+
+  MatchIterator* match_iterator = new MatchIterator(match_collection_, qval_type, true);
+
+  while (match_iterator->hasNext()) {
+    Match* match = match_iterator->next();
+     
+    carp(CARP_DEBUG, "xcorr rank:%d q-value:%f", match->getRank(XCORR), match->getScore(qval_type));
+    if (match->isDecoy()) {
+      continue;
+    } 
+    if ((qval_type == DECOY_XCORR_QVALUE || qval_type == LOGP_QVALUE_WEIBULL_XCORR) && 
+      (match->getRank(XCORR) != 1)) {
+      continue;
+    }
+      
+    // find a qvalue score lower than threshold
+    if (match->getScore(qval_type) != FLT_MIN &&
+        match->getScore(qval_type) <= threshold_)  {
+      matches_.insert(match);
+    }
+  } // next match
+  delete match_iterator;
+}
+
+/**
+ * Figures out which kind of q-value was scored for this match collection.
+ * \returns PERCOLATOR_QVALUE, QRANKER_QVALUE, or DECOY_XCORR_QVALUE
+ * if any of those were scored or INVALID_SCORER_TYPE if none were scored. 
+ */
+SCORER_TYPE_T SpectralCounts::get_qval_type(
+  MatchCollection* match_collection) {
+  SCORER_TYPE_T scored_type = INVALID_SCORER_TYPE;
+
+  if (match_collection->getScoredType(PERCOLATOR_QVALUE)) {
+    scored_type =  PERCOLATOR_QVALUE;
+  } else if (match_collection->getScoredType(QRANKER_QVALUE)) {
+    scored_type = QRANKER_QVALUE;
+  } else if (match_collection->getScoredType(DECOY_XCORR_QVALUE)) {
+    scored_type = DECOY_XCORR_QVALUE;
+  } else if(match_collection->getScoredType(BARISTA_QVALUE)) {
+    scored_type = BARISTA_QVALUE;
+  }
+
+  return scored_type;
+}
+
+void SpectralCounts::writeRankedPeptides() {
+  // rearrange pairs to sort by score
+  vector<pair<FLOAT_T, Peptide*> > scoreToPeptide;
+  for (PeptideToScore::iterator it = peptide_scores_.begin();
+       it != peptide_scores_.end(); ++it) {
+    scoreToPeptide.push_back(make_pair(it->second, it->first));
+  }
+  
+  sort(scoreToPeptide.begin(), scoreToPeptide.end(), sortRankedPeptides);
+  output_->writeRankedPeptides(scoreToPeptide);
+}
+
+void SpectralCounts::writeRankedProteins() {
+  bool isParsimony = !protein_meta_protein_.empty();
+  // reorganize the protein,score pairs to sort by score
+  vector<boost::tuple<FLOAT_T, Protein*, int> > proteins;
+  for (ProteinToScore::iterator it = protein_scores_.begin(); 
+       it != protein_scores_.end(); ++it) {
+    int rank = -1;
+    if (isParsimony) {
+      MetaToRank::const_iterator lookup =
+        meta_protein_ranks_.find(protein_meta_protein_[it->first]);
+      if (lookup != meta_protein_ranks_.end()) {
+        rank = lookup->second;
+      }
+    }
+    proteins.push_back(boost::make_tuple(it->second, it->first, rank));
+  }
+
+  sort(proteins.begin(), proteins.end(), sortRankedProteins);
+  output_->writeRankedProteins(proteins, isParsimony);
+}
+
+bool SpectralCounts::sortRankedPeptides(
+  const pair<FLOAT_T, Peptide*>& x,
+  const pair<FLOAT_T, Peptide*>& y) {
+  return x.first != y.first ? x.first > y.first : !Peptide::lessThan(y.second, x.second);
+}
+
+bool SpectralCounts::sortRankedProteins(
+  const boost::tuple<FLOAT_T, Protein*, int>& x,
+  const boost::tuple<FLOAT_T, Protein*, int>& y) {
+  FLOAT_T xScore = x.get<0>();
+  FLOAT_T yScore = y.get<0>();
+  if (xScore != yScore) {
+    return xScore > yScore;
+  }
+  int xRank = x.get<2>();
+  int yRank = y.get<2>();
+  if (xRank != yRank) {
+    return xRank <= yRank;
+  }
+  return y.get<1>()->getIdPointer().compare(x.get<1>()->getIdPointer()) > 0;
+}
+
+/**
+ * Fills in the MetaMapping with entries of set of 
+ * peptides that can be found in every protein in
+ * the meta protein
+ *
+ */
+void SpectralCounts::getMetaMapping() {
+  carp(CARP_DEBUG, "Creating a mapping of meta protein to peptides");
+  int count = 0;
+  for(ProteinToPeptides::iterator prot_it = protein_supporting_peptides_.begin();
+       prot_it != protein_supporting_peptides_.end(); ++prot_it) {
+    Protein* protein = prot_it->first;
+    PeptideSet pep_set = prot_it->second;
+
+    if (meta_mapping_.find(pep_set) == meta_mapping_.end()) {
+      MetaProtein meta_protein(protein_id_less_than);
+      count++;
+      meta_mapping_.insert(make_pair(pep_set, meta_protein));
+    }
+    meta_mapping_[pep_set].insert(protein);
+  }
+
+}
+
+/**
+ * Takes a mapping of set of peptides to meta proteins and 
+ * a mapping of protein to scores, and finds the largest score
+ * of the meta proteins for each protein. The object returned
+ * is a mapping of MetaProteins to the highest score
+ *
+ */
+void SpectralCounts::getMetaScores() {
+  carp(CARP_DEBUG, "Finding scores of meta proteins");
+  for (MetaMapping::iterator meta_it = meta_mapping_.begin();
+       meta_it != meta_mapping_.end(); ++meta_it) {
+    MetaProtein proteins = (*meta_it).second;
+    FLOAT_T top_score = -1.0;
+    for (MetaProtein::iterator protein_it = proteins.begin();
+         protein_it != proteins.end(); ++protein_it) {
+      Protein* protein = (*protein_it);
+      FLOAT_T score = protein_scores_[protein];
+      top_score = max(score, top_score);
+    }
+    meta_protein_scores_.insert(make_pair(proteins, top_score));
+  }
+
+}
+
+/**
+ * Takes a mapping of MetaProteins to scores and returns 
+ * a mapping of set of peptides to rank
+ *
+ */
+void SpectralCounts::getMetaRanks() {
+  carp(CARP_DEBUG, "Finding ranks of meta proteins");
+  vector< pair<FLOAT_T, MetaProtein> > metaVector;
+  for (MetaToScore::iterator meta_it = meta_protein_scores_.begin();
+       meta_it != meta_protein_scores_.end(); ++meta_it) {
+    MetaProtein proteins = (*meta_it).first;
+    FLOAT_T score = (*meta_it).second;
+    metaVector.push_back(make_pair(score, proteins));
+  }
+  sort(metaVector.begin(), metaVector.end(), compareMetaScorePair);
+
+  int cur_rank = 1;
+  for (vector< pair<FLOAT_T, MetaProtein> >::iterator
+         vector_it = metaVector.begin();
+       vector_it != metaVector.end(); ++vector_it) {
+    MetaProtein proteins = (*vector_it).second;
+    meta_protein_ranks_.insert(make_pair(proteins, cur_rank));
+    cur_rank++;
+  }
+
+}
+
+/**
+ * Greedily finds a peptide-to-protein mapping where each
+ * peptide is only mapped to a single meta-protein. 
+ *
+ * Would of been better to implement with priority queue w/
+ * adjancency lists: O(n*log(n)) but input size should be
+ * small enough that performance should not be an issue.
+ */
+void SpectralCounts::performParsimonyAnalysis() {
+  carp(CARP_DEBUG, "Performing Greedy Parsimony analysis");
+  MetaMapping result(comparePeptideSets);
+  vector< pair<PeptideSet, MetaProtein > > peps_vector;
+
+  // get all meta mappings into a vector 
+  for (MetaMapping::iterator meta_iter = meta_mapping_.begin();
+       meta_iter != meta_mapping_.end(); ++meta_iter) {
+    peps_vector.push_back((*meta_iter));
+  }
+
+
+  // greedy algorithm to pick off the meta proteins with
+  // most peptide mappings
+  while (!peps_vector.empty()) {
+    sort(peps_vector.begin(), peps_vector.end(), setsAreEqualSize);
+    pair<PeptideSet, MetaProtein> node = peps_vector.back();
+    peps_vector.pop_back();
+    if (node.first.size() == 0) { break; }// do not enter anything without peptide sizes
+    result.insert(node);
+    PeptideSet cur_peptides = node.first;
+    // update the peptide sets for the rest of meta proteins
+    for (vector< pair<PeptideSet, MetaProtein > >::iterator
+         iter = peps_vector.begin();
+         iter != peps_vector.end(); ++iter) {
+      PeptideSet peptides = (*iter).first;
+      PeptideSet difference(Peptide::lessThan);
+      set_difference(peptides.begin(), peptides.end(),
+                     cur_peptides.begin(), cur_peptides.end(),
+                     inserter(difference, difference.end()),
+                    Peptide::lessThan);
+      (*iter).first = difference;
+    }
+  }
+  meta_mapping_ = result;
+}
+
+/**
+ * Removes peptides from the map if the peptide
+ * sequence belongs in more than one protein
+ */
+void SpectralCounts::makeUniqueMapping() {
+
+  if (measure_ == MEASURE_DNSAF) {
+    carp(CARP_WARNING, "--unique-mapping ignored for dNSAF!");
+  } else {
+  carp(CARP_DEBUG, "Filtering peptides that have more"
+         "than one protein source");
+    for (PeptideToScore::iterator it = peptide_scores_.begin();
+         it != peptide_scores_.end(); ++it) {
+      Peptide* peptide = it->first;
+      int num_proteins = peptide->getNumPeptideSrc();
+      if (num_proteins > 1) {
+        peptide_scores_.erase(it);
+      }
+    }
+  }
+}
+
+
+/**
+ * \returns The name of the command.
+ */
+string SpectralCounts::getName() const {
+  return "spectral-counts";
+}
+
+/**
+ * \returns The help string to be included in the crux usage statement.
+ */
+string SpectralCounts::getDescription() const {
+  return
+    "[[nohtml:Quantify peptides or proteins using one of three spectral "
+    "counting methods.]]"
+    "[[html:<p>Given a collection of scored PSMs, produce a list of proteins "
+    "or peptides ranked by a quantification score. Spectral-counts supports "
+    "four types of quantification: Normalized Spectral Abundance Factor "
+    "(NSAF), Distributed Normalized Spectral Abundance (dNSAF), Normalized "
+    "Spectral Index (SI<sub>N</sub>) and Exponentially Modified Protein "
+    "Abundance Index (emPAI). The NSAF method is from <a href=\""
+    "http://www.ncbi.nlm.nih.gov/pubmed/17138671\">Paoletti et "
+    "al. (2006)</a>. The SI<sub>N</sub> method is from <a href=\""
+    "http://www.nature.com/nbt/journal/v28/n1/abs/nbt.1592.html\">Griffin et "
+    "al. (2010)</a>. The emPAI method was first described in <a href=\""
+    "http://www.mcponline.org/content/4/9/1265\">Ishihama et al (2005)</a>. "
+    "The quantification methods are defined below and in the following "
+    "paper:<blockquote>S McIlwain, M Mathews, M Bereman, EW Rubel, MJ "
+    "MacCoss, and WS Noble.  "
+    "<a href=\"http://www.biomedcentral.com/1471-2105/13/308/abstract\">"
+    "\"Estimating relative abundances of proteins from shotgun proteomics "
+    "data.\"</a>  <em>BMC Bioinformatics</em>. 13:308, 2012.</blockquote>"  
+    "</p><h3>Protein Quantification</h3>"
+    "<ol><li>For each protein in a given database, the NSAF "
+    "score is:<br>$$NSAF_N=\\frac{S_N/L_N}{\\sum_{i=1}^ns_i/L_i}$$<br>where:"
+    "<ul><li>N is protein index</li><li>S<sub>N</sub> is the number of peptide "
+    "spectra matched to the protein</li><li>L<sub>N</sub> is the length of "
+    "protein N</li><li>n is the total number of proteins in the input "
+    "database</li></ul></li><li>For each protein in a given database, the dNSAF "
+    "score is:<br>$$NSAF_N=\\frac{\\frac{uSpc_N+(d)sSpc_N}{uL_N+sL_N}}{\\frac"
+    "{uSpc_i+(d)sSpc_i}{uL_i+sL_i}}$$<br>where:<ul><li>N is the protein "
+    "index</li><li>uSpc<sub>N</sub> is the unique number spectra matched to the "
+    "protein index</li><li>sSpc<sub>N</sub> is the shared number peptide "
+    "spectra matched to the protein index</li><li>L<sub>N</sub> is the length "
+    "of protein N</li><li>n is the total number of proteins in the input "
+    "database</li><li>d is the distribution factor of peptide K to protein N, "
+    "given by<br>$$d=\\frac{uSpc_N}{\\sum_{i=1}^nuSpc_i}$$</li></ul></li><li>"
+    "For each protein in a given database, the SI<sub>N</sub> score is:<br>"
+    "$$SI_N=\\frac{\\sum_{j=1}^{p_N}(\\sum_{k=1}^{s_j}i_k)}{L_N(\\sum_{j=1}^n"
+    "SI_j)}$$<br>where:<ul><li>N is protein index</li><li>p<sub>n</sub> is the "
+    "number of unique peptides in protein N</li><li>s<sub>j</sub> is the "
+    "number of spectra assigned to peptide j</li><li>i<sub>k</sub> is the "
+    "total fragment ion intensity of spectrum k</li><li>L<sub>N</sub> is the "
+    "length of protein N</li></ul></li><li>For each protein in a given database, "
+    "the emPAI score is:<br>$$emPAI=10^{\\frac{N_{observed}}{N_{observable}}}-1"
+    "$$<br>where:<ul><li>N<sub>observed</sub> is the number of experimentally "
+    "observed peptides with scores above a specified threshold.</li><li>N<sub>"
+    "observable</sub> is the calculated number of observable peptides for the "
+    "protein given the search constraints.</li></ul></li></ol><h3>Peptide "
+    "Quantification</h3><ol><li>For each peptide in a given database, the NSAF "
+    "score is:<br>$$NSAF_N=\\frac{S_N/L_N}{\\sum_{i=1}^ns_i/L_i}$$<br>where: "
+    "<ul><li>N is the peptide index</li><li>S<sub>N</sub> is the number "
+    "spectra matched to peptide N</li><li>L<sub>N</sub> is the length of "
+    "peptide N</li><li>n is the total number of peptides in the input "
+    "database</li></ul></li><li>For each peptide in a given database, the "
+    "SI<sub>N</sub> score is:<br>$$SI_N=\\frac{(\\sum_{k=1}^{S_N}i_k)}{L_N("
+    "\\sum_{j=1}^nSI_J)}$$<br>where:<ul><li>N is the peptide index</li><li>"
+    "S<sub>N</sub> is the number of spectra assigned to peptide N</li><li>"
+    "i<sub>k</sub> is the total fragment ion intensity of spectrum k</li><li>"
+    "L<sub>N</sub> is the length of peptide N</li></ul></li></ol>]]";
+}
+
+vector<string> SpectralCounts::getArgs() const {
+  string arr[] = {
+    "input PSMs"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector<string> SpectralCounts::getOptions() const {
+  string arr[] = {
+    "verbosity",
+    "parameter-file",
+    "parsimony",
+    "threshold",
+    "threshold-type",
+    "input-ms2",
+    "spectrum-parser",
+    "fileroot",
+    "output-dir",
+    "overwrite",
+    "unique-mapping",
+    "quant-level",
+    "measure",
+    "custom-threshold-name",
+    "custom-threshold-min",
+    "mzid-use-pass-threshold",
+    "protein-database"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector< pair<string, string> > SpectralCounts::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("spectral-counts.target.txt",
+    "a tab-delimited text file containing the protein IDs and their "
+    "corresponding scores, in sorted order."));
+  outputs.push_back(make_pair("spectral-counts.params.txt",
+    "a file containing the name and value of all parameters/options for the "
+    "current operation. Not all parameters in the file may have been used in "
+    "the operation. The resulting file can be used with the --parameter-file "
+    "option for other Crux programs."));
+  outputs.push_back(make_pair("spectral-counts.log.txt",
+    "All messages written to standard error."));
+  return outputs;
+}
+
+COMMAND_T SpectralCounts::getCommand() const {
+  return SPECTRAL_COUNTS_COMMAND;
+}
+
+bool SpectralCounts::needsOutputDirectory() const {
+  return true;
+}
+
+
+// static comparison functions
+
+/** 
+ * Compare two sets of peptides and return true if the first unshared
+ * peptide sequence in set one is lexically less than that in set
+ * two.
+ */
+bool SpectralCounts::comparePeptideSets(PeptideSet set_one, 
+                                        PeptideSet set_two) {
+
+  // compare each peptides in the two (sorted) sets
+  PeptideSet::iterator iter1 = set_one.begin();
+  PeptideSet::iterator iter2 = set_two.begin();
+
+  while( iter1 != set_one.end() && iter2 != set_two.end() ) {
+    int diff = Peptide::triCompareSequence(*iter1, *iter2);
+    if (diff != 0) {
+      return diff < 0;
+    }
+    // else they are equal, compare the next
+    ++iter1;
+    ++iter2;
+  }
+
+  // all peptides were the same; are the sets the same size?
+  return set_one.size() < set_two.size();
+}
+
+/**
+ * Comparison function for MetaProteins.  MetaProtein one is less than
+ * MetaProtein two if the first non-matching protein id of one is less than
+ * that of two.  
+ * \returns True if one < two, false if one == two or one > two.
+ */
+bool SpectralCounts::compareMetaProteins(MetaProtein set_one, 
+                                         MetaProtein set_two) {
+  // compare each protein in the two (sorted) sets
+  MetaProtein::iterator iter1 = set_one.begin();
+  MetaProtein::iterator iter2 = set_two.begin();
+
+  while (iter1 != set_one.end() && iter2 != set_two.end()) {
+    // different proteins one is less than the other
+    if (protein_id_less_than(*iter1, *iter2)) {
+      return true;
+    }
+    // else, they are the same, keep comparing
+    ++iter1;
+    ++iter2;
+  }
+
+  // all proteins were the same, are the sets the same size?
+  return set_one.size() < set_two.size();
+}
+
+/**
+ * Compare the size of the PeptideSets in the two given pairs.
+ * \returns True if the PeptideSets are the same size, else false.
+ */
+bool SpectralCounts::setsAreEqualSize(
+  const pair<PeptideSet, MetaProtein>& peps_one ,
+  const pair<PeptideSet, MetaProtein>& peps_two) {
+  return ((peps_one).first.size() < (peps_two).first.size());
+}
+
+bool SpectralCounts::compareMetaScorePair(
+  const std::pair<FLOAT_T, MetaProtein>& x,
+  const std::pair<FLOAT_T, MetaProtein>& y) {
+  return (x.first != y.first) ? x.first > y.first : !compareMetaProteins(x.second, y.second);
+}
+
diff --git a/src/app/SpectralCounts.h b/src/app/SpectralCounts.h
new file mode 100644
index 0000000..aa2ab00
--- /dev/null
+++ b/src/app/SpectralCounts.h
@@ -0,0 +1,189 @@
+/**
+ * \file SpectralCounts.h 
+ * AUTHOR: Barbara Frewen
+ * CREATE DATE: 8 March 2011
+ * \brief Object for running the spectral-counts command.
+ */
+#ifndef SPECRAL_COUNTS_H
+#define SPECRAL_COUNTS_H
+
+#include "CruxApplication.h"
+#include <string>
+#include <vector>
+#include <map>
+#include <set>
+#include "util/utils.h"
+#include "io/MatchCollectionParser.h"
+#include "model/objects.h"
+#include "model/Peptide.h"
+#include "io/SpectrumCollection.h"
+#include "io/OutputFiles.h"
+
+#include "boost/tuple/tuple.hpp"
+
+class SpectralCounts: public CruxApplication { 
+
+ public:
+
+  SpectralCounts();
+  ~SpectralCounts();
+  virtual int main(int argc, char** argv);
+  virtual std::string getName() const;
+  virtual std::string getDescription() const;
+  virtual std::vector<std::string> getArgs() const;
+  virtual std::vector<std::string> getOptions() const;
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+  virtual COMMAND_T getCommand() const;
+  virtual bool needsOutputDirectory() const;
+
+ private:
+  // internally-used types
+  /**
+   * \typedef PeptideSet
+   * \brief Collection of peptide objects (not a meta-peptide)
+   */
+  typedef std::set<Crux::Peptide*, bool(*)(Crux::Peptide*, Crux::Peptide*)> PeptideSet;
+  /**
+   * \typedef MetaMapping
+   * \brief Mapping of peptideSet to MetaProtein
+   * Each entry is a set of peptides mapped to a set of proteins of which
+   * all contain the set of peptides
+   */
+  typedef std::map<PeptideSet, MetaProtein, 
+              bool(*)(PeptideSet, PeptideSet) > MetaMapping;
+  /**
+   * \typedef ProteinToPeptides
+   * Mapping of Protein objects to a set of peptides that are part
+   * of the protein sequence
+   */
+  typedef std::map<Crux::Protein*, PeptideSet , 
+    bool(*)(Crux::Protein*, Crux::Protein*)> ProteinToPeptides;
+  /**
+   * \typedef MetaToScore
+   * \brief Mapping of MetaProtein to the score assigned to it
+   */
+  typedef std::map<MetaProtein, FLOAT_T, 
+              bool(*)(MetaProtein, MetaProtein)> MetaToScore;
+  /**
+   * \typedef ProteinToMeta
+   * \brief Mapping of Protein to MetaProtein to which it belongs
+   */
+  typedef std::map<Crux::Protein*, MetaProtein, 
+    bool(*)(Crux::Protein*, Crux::Protein*)> ProteinToMetaProtein;
+  
+  // private functions
+  void getParameterValues();
+  void filterMatches();
+  void getPeptideScores();
+  
+  /**
+   * calculates the protein scores based upon the dNSAF metric.  First,
+   * the spectral counts for the peptides unique to each protein is added,
+   * then the spectral counts for the peptide shared amongst the proteins
+   * are added with a distribution factor based upon the number of unique
+   * counts that each protein is assigned
+   */
+  void getProteinScoresDNSAF();
+
+  void getProteinScores();
+  void getProteinToPeptides();
+  void getProteinToMetaProtein();
+  void getMetaMapping();
+  void getMetaRanks();
+  void getMetaScores();
+  void performParsimonyAnalysis();
+  void normalizePeptideScores();
+  void normalizeProteinScores();
+  /**
+   * Checks that the normalized scores add up to one
+   */
+  void checkProteinNormalization();
+
+  void computeEmpai();
+  void makeUniqueMapping();
+  FLOAT_T sumMatchIntensity(Crux::Match* match,
+                          Crux::SpectrumCollection* spectra);
+  SCORER_TYPE_T get_qval_type(MatchCollection* match_collection);
+
+  void writeRankedPeptides();
+  void writeRankedProteins();
+  static bool sortRankedPeptides(
+    const std::pair<FLOAT_T, Crux::Peptide*>& x,
+    const std::pair<FLOAT_T, Crux::Peptide*>& y);
+  static bool sortRankedProteins(
+    const boost::tuple<FLOAT_T, Crux::Protein*, int>& x,
+    const boost::tuple<FLOAT_T, Crux::Protein*, int>& y);
+
+  /**
+   * adds all matches 
+   */
+  void filterMatchesNone();
+
+  /**
+   * filters matches based upon a custom threshold (not q-value)
+   */
+  void filterMatchesCustom();
+
+  /**
+   * filters matches based upon q-value
+   */
+  void filterMatchesQValue();
+
+  /**
+   * filters matches based upon a SCORER_TYPE_T
+   */
+  void filterMatchesScore(
+    SCORER_TYPE_T scorer ///< scorer to use
+  );
+
+  /**
+   * filters matches based upon a custom score that is not SCORER_TYPE_T
+   */
+  void filterMatchesCustomScore();
+
+  void invalidCustomScore();
+
+  // member variables
+  OutputFiles* output_;
+  std::string psm_file_;
+  FLOAT_T threshold_;
+  std::string database_name_;
+  bool unique_mapping_;
+  THRESHOLD_T threshold_type_;
+  QUANT_LEVEL_TYPE_T quantitation_;
+  PARSIMONY_TYPE_T parsimony_;
+  MEASURE_TYPE_T measure_;
+  FLOAT_T bin_width_;
+  std::set<Crux::Match*> matches_;
+  MatchCollection* match_collection_;
+  // For custom thresholding fields
+  bool threshold_min_; 
+  std::string custom_threshold_name_;
+  MatchCollectionParser parser_;
+
+  PeptideToScore peptide_scores_;
+  PeptideToScore peptide_scores_unique_;
+  PeptideToScore peptide_scores_shared_;
+
+  ProteinToScore protein_scores_;
+  ProteinToScore protein_scores_unique_;
+  ProteinToScore protein_scores_shared_;
+
+  ProteinToPeptides protein_supporting_peptides_;
+  ProteinToMetaProtein protein_meta_protein_;
+  MetaMapping meta_mapping_;
+  MetaToScore meta_protein_scores_;
+  MetaToRank meta_protein_ranks_;
+
+  // comparison function declarations
+  static bool comparePeptideSets(PeptideSet, PeptideSet);
+  static bool compareMetaProteins(MetaProtein, MetaProtein);
+  static bool setsAreEqualSize(const std::pair<PeptideSet, MetaProtein>&,
+                               const std::pair<PeptideSet, MetaProtein>&);
+  static bool compareMetaScorePair(const std::pair<FLOAT_T, MetaProtein>&,
+                                   const std::pair<FLOAT_T, MetaProtein>&);
+ 
+}; // class
+
+
+#endif
diff --git a/src/app/StatColumn.cpp b/src/app/StatColumn.cpp
new file mode 100644
index 0000000..7fb1a2b
--- /dev/null
+++ b/src/app/StatColumn.cpp
@@ -0,0 +1,178 @@
+/**
+ * \file StatColumn.cpp 
+ * \brief Given a delimited file and a column-name, print out statistics
+ * for that column (n, min, max, sum, average, stddev, median).
+ *****************************************************************************/
+#include "StatColumn.h"
+
+#include "io/DelimitedFile.h"
+#include "util/Params.h"
+
+using namespace std;
+
+
+/**
+ * \returns a blank StatColumn object
+ */
+StatColumn::StatColumn() {
+
+}
+
+/**
+ * Destructor
+ */
+StatColumn::~StatColumn() {
+}
+
+/**
+ * main method for StatColumn
+ */
+int StatColumn::main(int argc, char** argv) {
+  delimited_filename_ = Params::GetString("tsv file");
+  column_name_string_ = Params::GetString("column name");
+  delimiter_ = get_delimiter_parameter("delimiter");
+
+  DelimitedFileReader delimited_file(delimited_filename_, true, delimiter_);
+  
+  int col_idx = delimited_file.findColumn(column_name_string_);
+
+  if (col_idx == -1) {
+    carp(CARP_ERROR, "column not found:%s\n\n%s", 
+      column_name_string_.c_str(),
+      delimited_file.getAvailableColumnsString().c_str());
+    return(-1);
+  }
+
+  vector<FLOAT_T> data;
+
+  FLOAT_T sum = 0;
+
+  while (delimited_file.hasNext()) {
+
+    FLOAT_T current = delimited_file.getFloat(col_idx);
+    data.push_back(current);
+    sum += current;
+    delimited_file.next();
+
+  }
+  
+  sort(data.begin(), data.end(), less<FLOAT_T>());
+
+  unsigned int num_points = data.size();
+
+  FLOAT_T min = data.front();
+  FLOAT_T max = data.back();
+  
+  FLOAT_T average = sum / (FLOAT_T)num_points;
+ 
+  FLOAT_T std_dev = 0.0;
+
+  if (num_points >= 2) {
+
+    for (unsigned int idx = 0 ; idx < num_points ; idx++) {
+      FLOAT_T temp = data.at(idx) - average;
+      std_dev += temp * temp;
+    }
+    std_dev = std_dev / (1.0 / (double)(num_points - 1));
+    std_dev = sqrt(std_dev);
+  }
+  
+
+
+ 
+  FLOAT_T median = 0.0;
+
+  if (data.size() == 0) {
+    carp(CARP_WARNING, "Warning no data!");
+  } else {
+    int half = data.size() / 2;
+    if (data.size() % 2 == 0) {
+      median = (data[half] + data[half-1]) / 2.0;
+    } else {
+      median = data[half];
+    }
+  }
+
+  //print out the header
+
+  if (header_) {
+    cout << "N\tMin\tMax\tSum\tAverage\tStdDev\tMedian" << endl;
+  }
+
+  cout << std::setprecision(Params::GetInt("precision"));
+  cout << num_points << delimiter_;
+  cout << min        << delimiter_;
+  cout << max        << delimiter_;
+  cout << sum        << delimiter_;
+  cout << average    << delimiter_;
+  if (num_points >= 2) {
+    cout << std_dev << delimiter_;
+  } else {
+    cout << "N/A" << delimiter_;
+  }
+  cout << median << endl;
+
+  return 0;
+}
+
+/**
+ * \returns the command name for StatColumn
+ */
+string StatColumn::getName() const {
+  return "stat-column";
+}
+
+/**
+ * \returns the description for StatColumn
+ */
+string StatColumn::getDescription() const {
+  return
+    "[[nohtml:Collect summary statistics from a column in a tab-delimited "
+    "file.]]"
+    "[[html:<p>Given a tab-delimited file, collect summary statistics on the "
+    "values within a specified column. The specified column must contain "
+    "numeric values.</p>]]";
+}
+
+/**
+ * \returns the command arguments
+ */
+vector<string> StatColumn::getArgs() const {
+  string arr[] = {
+    "tsv file",
+    "column name"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command options
+ */
+vector<string> StatColumn::getOptions() const {
+  string arr[] = {
+    "delimiter",
+    "header",
+    "precision",
+    "verbosity"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command outputs
+ */
+vector< pair<string, string> > StatColumn::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("stdout",
+    "The program prints to standard output the following statistics for "
+    "the specified column: number of rows, minimum, maximum, sum, average, "
+    "and median of the data values."));
+  return outputs;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/StatColumn.h b/src/app/StatColumn.h
new file mode 100644
index 0000000..9113774
--- /dev/null
+++ b/src/app/StatColumn.h
@@ -0,0 +1,77 @@
+/**
+ * \file StatColumn.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 6 December 2010
+ * \brief Given a delimited file and a column-name, print out statistics
+ * for that column (n, min, max, sum, average, median).
+ *****************************************************************************/
+#ifndef STATCOLUMN_H
+#define STATCOLUMN_H
+
+#include "CruxApplication.h"
+#include "io/DelimitedFileReader.h"
+
+#include <string>
+
+class StatColumn: public CruxApplication {
+
+ protected:
+  std::string delimited_filename_;
+  std::string column_name_string_;
+  char delimiter_;
+  bool header_;
+
+
+ public:
+
+  /**
+   * \returns a blank StatColumn object
+   */
+  StatColumn();
+
+  /**
+   * Destructor
+   */
+  ~StatColumn();
+
+  /**
+   * main method for StatColumn
+   */
+  virtual int main(int argc, char** argv);
+
+  /**
+   * \returns the command name for StatColumn
+   */
+  virtual std::string getName() const;
+
+  /**
+   * \returns the description for StatColumn
+   */
+  virtual std::string getDescription() const;
+
+  /**
+   * \returns the command arguments
+   */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+   * \returns the command options
+   */
+  virtual std::vector<std::string> getOptions() const;
+
+  /**
+   * \returns the command outputs
+   */
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+};
+
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/SubtractIndexApplication.cpp b/src/app/SubtractIndexApplication.cpp
new file mode 100755
index 0000000..f42f19a
--- /dev/null
+++ b/src/app/SubtractIndexApplication.cpp
@@ -0,0 +1,288 @@
+/**
+ * \file SubtractIndexApplication.cpp
+ * \brief Iterative PSM meta-search via Cascade protocol
+ ************************************************************/
+#include "SubtractIndexApplication.h"
+#include "io/OutputFiles.h"
+#include "AssignConfidenceApplication.h"
+#include "TideSearchApplication.h"
+#include "TideIndexApplication.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+#include "util/FileUtils.h"
+#include "io/carp.h"
+#include "app/tide/abspath.h"
+#include "app/tide/records_to_vector-inl.h"
+
+#define CHECK(x) GOOGLE_CHECK(x)
+
+using namespace std;
+
+/**
+ * \returns a blank SubtractIndexApplication object
+ */
+SubtractIndexApplication::SubtractIndexApplication() {
+}
+
+/**
+ * Destructor
+ */
+SubtractIndexApplication::~SubtractIndexApplication() {
+}
+
+/**
+ * main method for SubtractIndexApplication
+ */
+int SubtractIndexApplication::main(int argc, char** argv) {
+  carp(CARP_INFO, "Running subtract-index...");
+
+  bool overwrite = Params::GetBool("overwrite");
+  bool has_decoys = false;
+
+  //open tide index 1
+  const string index1 = Params::GetString("tide index 1");  
+  bool write_peptides = FileUtils::Exists(index1 + "/tide-index.peptides.target.txt");
+  string peptides_file1 = index1 + "/pepix";
+  string proteins_file1 = index1 + "/protix";
+  string auxlocs_file1 = index1 + "/auxlocs";
+
+  carp(CARP_INFO, "Reading index %s", index1.c_str());
+  ProteinVec proteins1;
+  pb::Header protein_header1;
+  if (!ReadRecordsToVector<pb::Protein, const pb::Protein>(&proteins1,
+    proteins_file1, &protein_header1)) {
+    carp(CARP_FATAL, "Error reading index (%s)", proteins_file1.c_str());
+  }
+  carp(CARP_DEBUG, "Read %d proteins", proteins1.size());
+  
+  pb::Header peptides_header1;
+  HeadedRecordReader peptide_reader1(peptides_file1, &peptides_header1);
+  if (peptides_header1.file_type() != pb::Header::PEPTIDES ||
+    !peptides_header1.has_peptides_header()) {
+    carp(CARP_FATAL, "Error reading index (%s)", peptides_file1.c_str());
+  }
+  const pb::Header::PeptidesHeader& pepHeader1 = peptides_header1.peptides_header();
+  DECOY_TYPE_T headerDecoyType = (DECOY_TYPE_T)pepHeader1.decoys();
+  if (headerDecoyType != NO_DECOYS) {
+    has_decoys = true;
+    if (headerDecoyType == PROTEIN_REVERSE_DECOYS) {
+      TideSearchApplication::PROTEIN_LEVEL_DECOYS = true;
+    }
+  }
+  MassConstants::Init(&peptides_header1.peptides_header().mods(), 
+    &peptides_header1.peptides_header().nterm_mods(),
+    &peptides_header1.peptides_header().cterm_mods(), 0.0, 0.0);
+
+  //open tide index 2
+  const string index2 = Params::GetString("tide index 2");
+  string peptides_file2 = index2 + "/pepix";
+  string proteins_file2 = index2 + "/protix";
+  carp(CARP_INFO, "Reading index %s", index2.c_str());
+  pb::Header peptides_header2;
+  HeadedRecordReader peptide_reader2(peptides_file2, &peptides_header2);
+  ProteinVec proteins2;
+  pb::Header protein_header2;
+  if (!ReadRecordsToVector<pb::Protein, const pb::Protein>(&proteins2,
+    proteins_file2, &protein_header2)) {
+    carp(CARP_FATAL, "Error reading index (%s)", proteins_file2.c_str());
+  }
+  carp(CARP_DEBUG, "Read %d proteins", proteins2.size());
+
+  //output files;
+  const string index_out = Params::GetString("output index");
+  string out_proteins = index_out + "/" + "protix";
+  string out_peptides = index_out + "/" + "pepix";
+  string out_aux = index_out + "/" + "auxlocs";
+
+  if (create_output_directory(index_out.c_str(), overwrite) != 0) {
+    carp(CARP_FATAL, "Error creating index directory");
+  } else if (FileUtils::Exists(out_proteins) ||
+             FileUtils::Exists(out_peptides) ||
+             FileUtils::Exists(out_aux)) {
+    if (overwrite) {
+      carp(CARP_DEBUG, "Cleaning old index file(s)");
+      remove(out_proteins.c_str());
+      remove(out_peptides.c_str());
+      remove(out_aux.c_str());
+    } else {
+      carp(CARP_FATAL, "Index file(s) already exist, use --overwrite T or a "
+        "different index name");
+    }
+  }
+  ofstream* out_target_list = NULL;
+  ofstream* out_decoy_list = NULL;
+  if (write_peptides) {
+    out_target_list = create_stream_in_path(make_file_path(
+      "tide-index.peptides.target.txt").c_str(), NULL, overwrite);
+    if (has_decoys) {
+      out_decoy_list = create_stream_in_path(make_file_path(
+        "tide-index.peptides.decoy.txt").c_str(), NULL, overwrite);
+    }
+  }
+  //copy aux and protein files;
+  FileUtils::Copy(auxlocs_file1, out_aux);
+  FileUtils::Copy(proteins_file1, out_proteins);
+
+  pb::Header new_header;
+  CHECK(peptides_header1.file_type() == pb::Header::PEPTIDES);
+  CHECK(peptides_header1.has_peptides_header());
+  new_header.set_file_type(pb::Header::PEPTIDES);
+  pb::Header_PeptidesHeader* subheader = new_header.mutable_peptides_header();
+  subheader->CopyFrom(peptides_header1.peptides_header());
+  subheader->set_has_peaks(true);
+  pb::Header_Source* source = new_header.add_source();
+  source->mutable_header()->CopyFrom(peptides_header1);
+  HeadedRecordWriter writer(out_peptides, new_header);
+  CHECK(peptide_reader1.OK());
+  CHECK(peptide_reader2.OK());
+  CHECK(writer.OK());
+
+  pb::Peptide pb_peptide1, pb_peptide2;
+  double pep_mass1, pre_pep_mass1, pep_mass2, pre_pep_mass2;
+  string pep_str1, pep_str2;
+    
+  vector<pb::Peptide> peptide_container;
+  pep_mass2 = pre_pep_mass2 = 0.0;
+  pre_pep_mass1 = 0.0;
+  bool found;
+
+  while (!peptide_reader1.Done()) {
+    peptide_reader1.Read(&pb_peptide1);
+    pep_mass1 = pb_peptide1.mass();
+    found = false;
+
+    if (pre_pep_mass1 < pep_mass1) {
+      peptide_container.clear();
+      pre_pep_mass1 = pep_mass1;
+    }
+
+    while (pep_mass2 < pep_mass1) {
+      if (!peptide_reader2.Done()) {
+        peptide_reader2.Read(&pb_peptide2);
+        pep_mass2 = pb_peptide2.mass();
+      } else { 
+        break; 
+      }
+    }
+    while (pep_mass2 == pep_mass1) {
+      peptide_container.push_back(pb_peptide2);
+      if (!peptide_reader2.Done()) {
+        peptide_reader2.Read(&pb_peptide2);
+        pep_mass2 = pb_peptide2.mass();
+      } else {
+        break;
+      }
+    }
+    pep_str1 = getModifiedPeptideSeq(&pb_peptide1, &proteins1);
+    for (vector<pb::Peptide>::iterator it = peptide_container.begin(); it != peptide_container.end(); ++it) {
+      pep_str2 = getModifiedPeptideSeq(&(*it), &proteins2);
+      if (pep_str1 == pep_str2) {
+        found = true;
+        break;
+      }
+    }
+    if (!found) {
+      CHECK(writer.Write(&pb_peptide1));
+      carp(CARP_DEBUG, "%s\t%lf\n", pep_str1.c_str(), pep_mass1);
+
+      if (write_peptides) {
+        if (!pb_peptide1.is_decoy()) {
+          *out_target_list << pep_str1 << '\t' << pb_peptide1.mass() << endl;
+        } else {
+          *out_decoy_list << pep_str1 << '\t' << pb_peptide1.mass() << endl;
+        }
+      }
+    }
+  }
+
+  return 0;
+}
+
+/**
+ * \returns the command name for SubtractIndexApplication
+ */
+string SubtractIndexApplication::getName() const {
+  return "subtract-index";
+}
+
+/**
+ * \returns the description for SubtractIndexApplication
+ */
+string SubtractIndexApplication::getDescription() const {
+  return "[[html:<p>This command takes two peptide indices, created by the tide-index "
+    "command, and subtracts the second index from the first. The result is an output "
+    "index that contains peptides that appear in the first index but not the second.</p>]]"
+    "[[nohtml:This command takes two peptide indices, created by the tide-index command, "
+    "and subtracts the second index from the first. The result is an output index "
+    "that contains peptides that appear in the first index but not the second.]]";
+}
+
+/**
+ * \returns the command arguments
+ */
+vector<string> SubtractIndexApplication::getArgs() const {
+  string arr[] = {
+    "tide index 1",
+    "tide index 2",
+    "output index"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+
+/**
+ * \returns the command options
+ */
+vector<string> SubtractIndexApplication::getOptions() const {
+  string arr[] = {
+    "verbosity",
+    "parameter-file",
+    "overwrite",
+    "peptide-list",
+    "output-dir"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command outputs
+ */
+vector< pair<string, string> > SubtractIndexApplication::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("subtract-index.target.txt",
+    "a <a href=\"../file-formats/txt-format.html\">tab-delimited text file</a> containing the "
+    "target peptides."));
+  outputs.push_back(make_pair("subtract-index.decoy.txt",
+    "a <a href=\"../file-formats/txt-format.html\">tab-delimited text file</a> containing the "
+    "decoy peptides."));
+  outputs.push_back(make_pair("subtract-index.log.txt",
+    "a log file containing a copy of all messages that were printed to stderr."));
+  outputs.push_back(make_pair("subtract-index.params.txt",
+    "a file containing the name and value of all parameters/options for the "
+    "current operation. Not all parameters in the file may have been used in "
+    "the operation. The resulting file can be used with the --parameter-file "
+    "option for other crux programs."));
+  return outputs;
+}
+
+/**
+ * \returns the filestem for SubtractIndexApplication
+ */
+string SubtractIndexApplication::getFileStem() const {
+  return "subtract-index";
+}
+
+COMMAND_T SubtractIndexApplication::getCommand() const {
+  return CASCADE_COMMAND;
+}
+
+/**
+ * \returns whether the application needs the output directory or not.
+ */
+bool SubtractIndexApplication::needsOutputDirectory() const {
+  return true;
+}
+
+void SubtractIndexApplication::processParams() {
+
+}
diff --git a/src/app/SubtractIndexApplication.h b/src/app/SubtractIndexApplication.h
new file mode 100755
index 0000000..6cdd921
--- /dev/null
+++ b/src/app/SubtractIndexApplication.h
@@ -0,0 +1,88 @@
+/**
+ * \file CascadeSearchApplication.h 
+ * AUTHOR: Attila Kertesz-Farkas
+ * CREATE DATE: 30 May 2015
+ * \brief Iterative PSM meta-search via Cascade protocol
+ ***********************************************************/
+#ifndef SUBTRACTINDEXAPPLICATION_H
+#define SUBTRACTINDEXAPPLICATION_H
+
+#include "CruxApplication.h"
+#include "peptides.pb.h"
+#include "TideSearchApplication.h"
+#include <string>
+
+
+
+class SubtractIndexApplication: public CruxApplication {
+
+ public:
+
+  /**
+   * \returns a blank CascadeSearchApplication object
+   */
+  SubtractIndexApplication();
+  
+  /**
+   * Destructor
+   */
+  ~SubtractIndexApplication();
+
+  /**
+   * main method for CascadeSearchApplication
+   */
+  virtual int main(int argc, char** argv);
+
+  /**
+   * \returns the command name for CascadeSearchApplication
+   */
+  virtual std::string getName() const;
+
+  /**
+   * \returns the description for CascadeSearchApplication
+   */
+  virtual std::string getDescription() const;
+
+  /**
+   * \returns the command arguments
+   */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+   * \returns the command options
+   */
+  virtual std::vector<std::string> getOptions() const;
+
+  /**
+   * \returns the command outputs
+   */
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+  /**
+   * \returns the filestem for CascadeSearchApplication
+   */
+  virtual std::string getFileStem() const;
+
+  /**
+   * \returns the enum of the application, default MISC_COMMAND
+   */
+  virtual COMMAND_T getCommand() const;
+
+  /**
+   * \returns whether the application needs the output directory or not.
+   */
+  virtual bool needsOutputDirectory() const;
+
+  virtual void processParams();
+
+};
+
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/TideIndexApplication.cpp b/src/app/TideIndexApplication.cpp
new file mode 100644
index 0000000..065c067
--- /dev/null
+++ b/src/app/TideIndexApplication.cpp
@@ -0,0 +1,938 @@
+#include <cstdio>
+#include <fstream>
+#include "io/carp.h"
+#include "util/CarpStreamBuf.h"
+#include "util/AminoAcidUtil.h"
+#include "util/Params.h"
+#include "util/FileUtils.h"
+#include "util/StringUtils.h"
+#include "GeneratePeptides.h"
+#include "TideIndexApplication.h"
+#include "TideMatchSet.h"
+#include "app/tide/modifications.h"
+#include "app/tide/records_to_vector-inl.h"
+
+#ifdef _MSC_VER
+#include <io.h>
+#endif
+
+extern void AddTheoreticalPeaks(const vector<const pb::Protein*>& proteins,
+                                const string& input_filename,
+                                const string& output_filename);
+extern void AddMods(HeadedRecordReader* reader,
+                    string out_file,
+                    string tmpDir,                    
+                    const pb::Header& header,
+                    const vector<const pb::Protein*>& proteins, VariableModTable& var_mod_table);
+DECLARE_int32(max_mods);
+DECLARE_int32(min_mods);
+
+TideIndexApplication::TideIndexApplication() {
+}
+
+TideIndexApplication::~TideIndexApplication() {
+}
+
+int TideIndexApplication::main(int argc, char** argv) {
+  return main(Params::GetString("protein fasta file"),
+              Params::GetString("index name"),
+              StringUtils::Join(vector<string>(argv, argv + argc), ' '));
+}
+
+int TideIndexApplication::main(
+  const string& fasta,
+  const string& index,
+  string cmd_line
+) {
+  carp(CARP_INFO, "Running tide-index...");
+
+  if (cmd_line.empty()) {
+    cmd_line = "crux tide-index " + fasta + " " + index;
+  }
+
+  // Reroute stderr
+  CarpStreamBuf buffer;
+  streambuf* old = cerr.rdbuf();
+  cerr.rdbuf(&buffer);
+
+  // Get options
+  double min_mass = Params::GetDouble("min-mass");
+  double max_mass = Params::GetDouble("max-mass");
+  int min_length = Params::GetInt("min-length");
+  int max_length = Params::GetInt("max-length");
+  bool monoisotopic_precursor = Params::GetString("isotopic-mass") != "average";
+  FLAGS_max_mods = Params::GetInt("max-mods");
+  FLAGS_min_mods = Params::GetInt("min-mods");
+  bool allowDups = Params::GetBool("allow-dups");
+  if (FLAGS_min_mods > FLAGS_max_mods) {
+    carp(CARP_FATAL, "The value for 'min-mods' cannot be greater than the value "
+                     "for 'max-mods'");
+  }
+  MASS_TYPE_T mass_type = (monoisotopic_precursor) ? MONO : AVERAGE;
+  int missed_cleavages = Params::GetInt("missed-cleavages");
+  DIGEST_T digestion = get_digest_type_parameter("digestion");
+  ENZYME_T enzyme_t = get_enzyme_type_parameter("enzyme");
+  const char* enzymePtr = enzyme_type_to_string(enzyme_t);
+  string enzyme(enzymePtr);
+  if ((enzyme != "no-enzyme") && 
+      (digestion != FULL_DIGEST && digestion != PARTIAL_DIGEST)) {
+    carp(CARP_FATAL, "'digestion' must be 'full-digest' or 'partial-digest'");
+  }
+
+  VariableModTable var_mod_table;
+  var_mod_table.ClearTables();
+  //parse regular amino acid modifications
+  string mods_spec = Params::GetString("mods-spec");
+  carp(CARP_DEBUG, "mods_spec='%s'", mods_spec.c_str());
+  if (!var_mod_table.Parse(mods_spec.c_str())) {
+    carp(CARP_FATAL, "Error parsing mods");
+  }
+  //parse terminal modifications
+  mods_spec = Params::GetString("cterm-peptide-mods-spec");
+  if (!mods_spec.empty() && !var_mod_table.Parse(mods_spec.c_str(), CTPEP)) {
+    carp(CARP_FATAL, "Error parsing c-terminal peptide mods");
+  }
+  mods_spec = Params::GetString("nterm-peptide-mods-spec");
+  if (!mods_spec.empty() && !var_mod_table.Parse(mods_spec.c_str(), NTPEP)) {
+    carp(CARP_FATAL, "Error parsing n-terminal peptide mods");
+  }
+  mods_spec = Params::GetString("cterm-protein-mods-spec");
+  if (!mods_spec.empty() && !var_mod_table.Parse(mods_spec.c_str(), CTPRO)) {
+    carp(CARP_FATAL, "Error parsing c-terminal protein mods");
+  }
+  mods_spec = Params::GetString("nterm-protein-mods-spec");
+  if (!mods_spec.empty() && !var_mod_table.Parse(mods_spec.c_str(), NTPRO)) {
+    carp(CARP_FATAL, "Error parsing n-terminal protein mods");
+  }
+
+  var_mod_table.SerializeUniqueDeltas();
+
+  if (!MassConstants::Init(var_mod_table.ParsedModTable(), 
+    var_mod_table.ParsedNtpepModTable(), 
+    var_mod_table.ParsedCtpepModTable(), 0, 0)) {
+    carp(CARP_FATAL, "Error in MassConstants::Init");
+  }
+
+  DECOY_TYPE_T decoy_type = get_tide_decoy_type_parameter("decoy-format");
+  string decoyPrefix = Params::GetString("decoy-prefix");
+
+  // Set up output paths
+  bool overwrite = Params::GetBool("overwrite");
+
+  if (!FileUtils::Exists(fasta)) {
+    carp(CARP_FATAL, "Fasta file %s does not exist", fasta.c_str());
+  }
+
+  string out_proteins = FileUtils::Join(index, "protix");
+  string out_peptides = FileUtils::Join(index, "pepix");
+  string out_aux = FileUtils::Join(index, "auxlocs");
+  string modless_peptides = out_peptides + ".nomods.tmp";
+  string peakless_peptides = out_peptides + ".nopeaks.tmp";
+  ofstream* out_target_list = NULL;
+  ofstream* out_decoy_list = NULL;
+  if (Params::GetBool("peptide-list")) {
+    out_target_list = create_stream_in_path(make_file_path(
+      "tide-index.peptides.target.txt").c_str(), NULL, overwrite);
+    if (decoy_type != NO_DECOYS) {
+      out_decoy_list = create_stream_in_path(make_file_path(
+        "tide-index.peptides.decoy.txt").c_str(), NULL, overwrite);
+    }
+  }
+  ofstream* out_decoy_fasta = GeneratePeptides::canGenerateDecoyProteins() ?
+    create_stream_in_path(make_file_path(
+      "tide-index.decoy.fasta").c_str(), NULL, overwrite) : NULL;
+
+  if (create_output_directory(index.c_str(), overwrite) != 0) {
+    carp(CARP_FATAL, "Error creating index directory");
+  } else if (FileUtils::Exists(out_proteins) ||
+             FileUtils::Exists(out_peptides) ||
+             FileUtils::Exists(out_aux)) {
+    if (overwrite) {
+      carp(CARP_DEBUG, "Cleaning old index file(s)");
+      FileUtils::Remove(out_proteins);
+      FileUtils::Remove(out_peptides);
+      FileUtils::Remove(out_aux);
+      FileUtils::Remove(modless_peptides);
+      FileUtils::Remove(peakless_peptides);
+    } else {
+      carp(CARP_FATAL, "Index file(s) already exist, use --overwrite T or a "
+                       "different index name");
+    }
+  }
+
+  // Start tide-index
+  carp(CARP_INFO, "Reading %s and computing unmodified peptides...",
+       fasta.c_str());
+  pb::Header proteinPbHeader;
+  vector<TideIndexPeptide> peptideHeap;
+  vector<string*> proteinSequences;
+  fastaToPb(cmd_line, enzyme_t, digestion, missed_cleavages, min_mass, max_mass,
+            min_length, max_length, allowDups, mass_type, decoy_type, fasta, out_proteins,
+            proteinPbHeader, peptideHeap, proteinSequences, out_decoy_fasta);
+
+  pb::Header header_with_mods;
+
+  // Set up peptides header
+  pb::Header_PeptidesHeader& pep_header = *(header_with_mods.mutable_peptides_header());
+  pep_header.Clear();
+  pep_header.set_min_mass(min_mass);
+  pep_header.set_max_mass(max_mass);
+  pep_header.set_min_length(min_length);
+  pep_header.set_max_length(max_length);
+  pep_header.set_monoisotopic_precursor(monoisotopic_precursor);
+  pep_header.set_enzyme(enzyme);
+  if (enzyme != "no-enzyme") {
+    pep_header.set_full_digestion(digestion == FULL_DIGEST);
+    pep_header.set_max_missed_cleavages(missed_cleavages);
+  }
+  pep_header.mutable_mods()->CopyFrom(*(var_mod_table.ParsedModTable()));
+  pep_header.mutable_nterm_mods()->CopyFrom(*(var_mod_table.ParsedNtpepModTable()));
+  pep_header.mutable_cterm_mods()->CopyFrom(*(var_mod_table.ParsedCtpepModTable()));
+
+  header_with_mods.set_file_type(pb::Header::PEPTIDES);
+  header_with_mods.set_command_line(cmd_line);
+  pb::Header_Source* source = header_with_mods.add_source();
+  source->mutable_header()->CopyFrom(proteinPbHeader);
+  source->set_filename(AbsPath(out_proteins));
+
+  pb::Header header_no_mods;
+  header_no_mods.CopyFrom(header_with_mods);
+  pb::ModTable* del = header_no_mods.mutable_peptides_header()->mutable_mods();
+  del->mutable_variable_mod()->Clear();
+  del->mutable_unique_deltas()->Clear();
+
+  bool need_mods = var_mod_table.Unique_delta_size() > 0;
+
+  string basic_peptides = need_mods ? modless_peptides : peakless_peptides;
+  carp(CARP_DETAILED_DEBUG, "basic_peptides=%s", basic_peptides.c_str());
+
+  writePeptidesAndAuxLocs(peptideHeap, basic_peptides, out_aux, header_no_mods);
+  // Do some clean up
+  for (vector<string*>::iterator i = proteinSequences.begin();
+       i != proteinSequences.end();
+       ++i) {
+    delete *i;
+  }
+  vector<TideIndexPeptide>().swap(peptideHeap);
+  ProteinVec proteins;
+  if (!ReadRecordsToVector<pb::Protein>(&proteins, out_proteins)) {
+    carp(CARP_FATAL, "Error reading proteins file");
+  }
+
+  if (need_mods) {
+    carp(CARP_INFO, "Computing modified peptides...");
+    HeadedRecordReader reader(modless_peptides, NULL, 1024 << 10); // 1024kb buffer
+    AddMods(&reader, peakless_peptides, Params::GetString("temp-dir"), header_with_mods, proteins, var_mod_table);
+  }
+
+  if (out_target_list) {
+    // Write peptide lists
+    carp(CARP_INFO, "Writing peptide lists...");
+
+    // This set holds target peptide strings
+    set<string> targetPepStrs;
+    // This vector holds decoy peptide strings and masses
+    vector< pair<string, double> > decoyPepStrs;
+    // Read peptides protocol buffer file
+    vector<const pb::AuxLocation*> locations;
+    if (!ReadRecordsToVector<pb::AuxLocation>(&locations, out_aux)) {
+      carp(CARP_FATAL, "Error reading auxlocs file");
+    }
+    // Iterate over all protocol buffer peptides
+    unsigned int writeCountTargets = 0, writeCountDecoys = 0;
+    HeadedRecordReader reader(peakless_peptides, NULL);
+    while (!reader.Done()) {
+      pb::Peptide* protobuf = new pb::Peptide;
+      reader.Read(protobuf);
+      pb::Peptide* peptide = protobuf;
+      bool writeTarget = true;
+      bool writeDecoy = false;
+
+      if (out_decoy_list) {
+        writeDecoy = peptide->is_decoy();
+        writeTarget = !writeDecoy;
+      }
+      string pep_str = getModifiedPeptideSeq(peptide, &proteins);
+
+      if (writeTarget) {
+        // This is a target, output it
+        targetPepStrs.insert(pep_str);
+        *out_target_list << pep_str << '\t' << peptide->mass() << endl;
+        ++writeCountTargets;
+      }
+      if (writeDecoy) {
+        // This is a decoy, save it to output later
+        decoyPepStrs.push_back(make_pair(pep_str, peptide->mass()));
+        ++writeCountDecoys;
+      }
+      delete peptide;
+    }
+
+    // Iterate over saved decoys and output them
+    for (vector< pair<string, double> >::iterator i = decoyPepStrs.begin();
+         i != decoyPepStrs.end();
+         ++i) {
+      *out_decoy_list << i->first << '\t' << i->second;
+      if (targetPepStrs.find(i->first) != targetPepStrs.end()) {
+        *out_decoy_list << "\t*";
+      }
+      *out_decoy_list << endl;
+    }
+
+    // Close and clean up streams
+    if (out_decoy_list) {
+      out_decoy_list->close();
+      delete out_decoy_list;
+    }
+    out_target_list->close();
+    delete out_target_list;
+
+    carp(CARP_DEBUG, "Wrote %d targets and %d decoys to peptide list",
+         writeCountTargets, writeCountDecoys);
+  }
+
+  carp(CARP_INFO, "Precomputing theoretical spectra...");
+  AddTheoreticalPeaks(proteins, peakless_peptides, out_peptides);
+
+  // Clean up
+  for (vector<const pb::Protein*>::iterator i = proteins.begin();
+       i != proteins.end();
+       ++i) {
+    delete *i;
+  }
+
+  // clean up out_decoy_fasta
+  if (out_decoy_fasta) {
+    delete out_decoy_fasta;
+  }
+
+  // Recover stderr
+  cerr.rdbuf(old);
+  FileUtils::Remove(modless_peptides);
+  FileUtils::Remove(peakless_peptides);
+
+  return 0;
+}
+
+string TideIndexApplication::getName() const {
+  return "tide-index";
+}
+
+string TideIndexApplication::getDescription() const {
+  return
+    "[[nohtml:Create an index for all peptides in a fasta file, for use in "
+    "subsequent calls to tide-search.]]"
+    "[[html:<p>Tide is a tool for identifying peptides from tandem mass "
+    "spectra. It is an independent reimplementation of the SEQUEST<sup>®"
+    "</sup> algorithm, which assigns peptides to spectra by comparing the "
+    "observed spectra to a catalog of theoretical spectra derived from a "
+    "database of known proteins. Tide's primary advantage is its speed. Our "
+    "published paper provides more detail on how Tide works. If you use Tide "
+    "in your research, please cite:</p><blockquote>Benjamin J. Diament and "
+    "William Stafford Noble. "<a href=\""
+    "http://dx.doi.org/10.1021/pr101196n\">Faster SEQUEST Searching for "
+    "Peptide Identification from Tandem Mass Spectra.</a>" <em>Journal of "
+    "Proteome Research</em>. 10(9):3871-9, 2011.</blockquote><p>The <code>"
+    "tide-index</code> command performs an optional pre-processing step on the "
+    "protein database, converting it to a binary format suitable for input to "
+    "the <code>tide-search</code> command.</p><p>Tide considers only the "
+    "standard set of 20 amino acids. Peptides containing non-amino acid "
+    "alphanumeric characters (BJOUXZ) are skipped. Non-alphanumeric characters "
+    "are ignored completely.</p>]]";
+}
+
+vector<string> TideIndexApplication::getArgs() const {
+  string arr[] = {
+    "protein fasta file",
+    "index name"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector<string> TideIndexApplication::getOptions() const {
+  string arr[] = {
+    "decoy-format",
+    "keep-terminal-aminos",
+    "decoy-prefix",
+    "enzyme",
+    "custom-enzyme",
+    "digestion",
+    "missed-cleavages",
+    "max-length",
+    "max-mass",
+    "min-length",
+    "min-mass",
+    "isotopic-mass",
+    "mods-spec",
+    "cterm-peptide-mods-spec",
+    "nterm-peptide-mods-spec",
+    "max-mods",
+    "min-mods",
+    "output-dir",
+    "overwrite",
+    "peptide-list",
+    "parameter-file",
+    "seed",
+    "clip-nterm-methionine",
+    "verbosity",
+    "allow-dups",
+    "temp-dir"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector< pair<string, string> > TideIndexApplication::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("index",
+    "A binary index, using the name specified on the command line."));
+  outputs.push_back(make_pair("tide-index.params.txt",
+    "a file containing the name and value of all parameters/options for the "
+    "current operation. Not all parameters in the file may have been used in "
+    "the operation. The resulting file can be used with the --parameter-file "
+    "option for other crux programs."));
+  outputs.push_back(make_pair("tide-index.log.txt",
+    "a log file containing a copy of all messages that were printed to the "
+    "screen during execution."));
+  return outputs;
+}
+
+bool TideIndexApplication::needsOutputDirectory() const {
+  return true;
+}
+
+COMMAND_T TideIndexApplication::getCommand() const {
+  return TIDE_INDEX_COMMAND;
+}
+
+void TideIndexApplication::fastaToPb(
+  const string& commandLine,
+  const ENZYME_T enzyme,
+  const DIGEST_T digestion,
+  int missedCleavages,
+  FLOAT_T minMass,
+  FLOAT_T maxMass,
+  int minLength,
+  int maxLength,
+  bool allowDups,
+  MASS_TYPE_T massType,
+  DECOY_TYPE_T decoyType,
+  const string& fasta,
+  const string& proteinPbFile,
+  pb::Header& outProteinPbHeader,
+  vector<TideIndexPeptide>& outPeptideHeap,
+  vector<string*>& outProteinSequences,
+  ofstream* decoyFasta
+) {
+  typedef GeneratePeptides::CleavedPeptide PeptideInfo;
+
+  string decoyPrefix = Params::GetString("decoy-prefix");
+  outProteinPbHeader.Clear();
+  outProteinPbHeader.set_file_type(pb::Header::RAW_PROTEINS);
+  outProteinPbHeader.set_command_line(commandLine);
+  pb::Header_Source* headerSource = outProteinPbHeader.add_source();
+  headerSource->set_filename(AbsPath(fasta));
+  headerSource->set_filetype("fasta");
+  unsigned int invalidPepCnt = 0;
+  unsigned int failedDecoyCnt = 0;
+
+  outPeptideHeap.clear();
+  outProteinSequences.clear();
+
+  HeadedRecordWriter proteinWriter(proteinPbFile, outProteinPbHeader);
+  ifstream fastaStream(fasta.c_str(), ifstream::in);
+  pb::Protein pbProtein;
+  string proteinName;
+  string* proteinSequence = new string;
+  int curProtein = -1;
+  vector< pair< ProteinInfo, vector<PeptideInfo> > > cleavedPeptideInfo;
+  set<string> setTargets, setDecoys;
+  map<const string*, TargetInfo> targetInfo;
+
+  // Iterate over all proteins in FASTA file
+  unsigned int targetsGenerated = 0, decoysGenerated = 0;
+  while (GeneratePeptides::getNextProtein(fastaStream, &proteinName, proteinSequence)) {
+    outProteinSequences.push_back(proteinSequence);
+    cleavedPeptideInfo.push_back(make_pair(
+      ProteinInfo(proteinName, proteinSequence), vector<PeptideInfo>()));
+    const ProteinInfo& proteinInfo = cleavedPeptideInfo.back().first;
+    vector<PeptideInfo>& cleavedPeptides = cleavedPeptideInfo.back().second;
+    // Write pb::Protein
+    getPbProtein(++curProtein, proteinName, *proteinSequence, pbProtein);
+    proteinWriter.Write(&pbProtein);
+    cleavedPeptides = GeneratePeptides::cleaveProtein(
+      *proteinSequence, enzyme, digestion, missedCleavages, minLength, maxLength);
+    // Iterate over all generated peptides for this protein
+    for (vector<PeptideInfo>::iterator i = cleavedPeptides.begin();
+         i != cleavedPeptides.end(); ) {
+      FLOAT_T pepMass = calcPepMassTide(i->Sequence(), massType);
+      if (pepMass < 0.0) {
+        // Sequence contained some invalid character
+        carp(CARP_DEBUG, "Ignoring invalid sequence <%s>", i->Sequence().c_str());
+        ++invalidPepCnt;
+        i = cleavedPeptides.erase(i);
+        continue;
+      } else if (pepMass < minMass || pepMass > maxMass) {
+        // Skip to next peptide if not in mass range
+        ++i;
+        continue;
+      }
+      // Add target to heap
+      TideIndexPeptide pepTarget(
+        pepMass, i->Length(), proteinSequence, curProtein, i->Position(), false);
+      outPeptideHeap.push_back(pepTarget);
+      push_heap(outPeptideHeap.begin(), outPeptideHeap.end(), greater<TideIndexPeptide>());
+      if (!allowDups && decoyType != NO_DECOYS) {
+        const string* setTarget = &*(setTargets.insert(i->Sequence()).first);
+        targetInfo.insert(make_pair(setTarget, TargetInfo(proteinInfo, i->Position(), pepMass)));
+      }
+      ++targetsGenerated;
+      ++i;
+    }
+    proteinSequence = new string;
+  }
+  delete proteinSequence;
+  if (targetsGenerated == 0) {
+    carp(CARP_FATAL, "No target sequences generated.  Is \'%s\' a FASTA file?",
+         fasta.c_str());
+  }
+
+  // Generate decoys
+  map<const string, const string*> targetToDecoy;
+  if (decoyType == PROTEIN_REVERSE_DECOYS) {
+    if (decoyFasta) {
+      carp(CARP_INFO, "Writing reverse-protein fasta and decoys...");
+    }
+    for (vector< pair< ProteinInfo, vector<PeptideInfo> > >::const_iterator i =
+         cleavedPeptideInfo.begin(); i != cleavedPeptideInfo.end(); ++i) {
+      string decoyProtein = *(i->first.sequence);
+      reverse(decoyProtein.begin(), decoyProtein.end());
+      if (decoyFasta) {
+        (*decoyFasta) << ">"<< decoyPrefix << i->first.name << endl
+                      << decoyProtein << endl;
+      }
+      vector<PeptideInfo> cleavedReverse = GeneratePeptides::cleaveProtein(
+        decoyProtein, enzyme, digestion, missedCleavages, minLength, maxLength);
+      // Iterate over all generated peptides for this protein
+      for (vector<PeptideInfo>::iterator j = cleavedReverse.begin();
+           j != cleavedReverse.end();
+           ++j) {
+        FLOAT_T pepMass = calcPepMassTide(j->Sequence(), massType);
+        if (pepMass < 0.0) {
+          // Sequence contained some invalid character
+          carp(CARP_DEBUG, "Ignoring invalid sequence in decoy fasta <%s>",
+               j->Sequence().c_str());
+          ++invalidPepCnt;
+          continue;
+        } else if (pepMass < minMass || pepMass > maxMass) {
+          // Skip to next peptide if not in mass range
+          continue;
+        } else if (!allowDups && setTargets.find(j->Sequence()) != setTargets.end()) {
+          // Sequence already exists as a target
+          continue;
+        }
+        string* decoySequence = new string(j->Sequence());
+        outProteinSequences.push_back(decoySequence);
+
+        // Write pb::Protein
+        getDecoyPbProtein(++curProtein, ProteinInfo(i->first.name, &decoyProtein),
+                          *decoySequence, j->Position(), pbProtein);
+        proteinWriter.Write(&pbProtein);
+        // Add decoy to heap
+        TideIndexPeptide pepDecoy(pepMass, j->Length(), decoySequence,
+          curProtein, (j->Position() > 0) ? 1 : 0, true);
+        outPeptideHeap.push_back(pepDecoy);
+        push_heap(outPeptideHeap.begin(), outPeptideHeap.end(),
+          greater<TideIndexPeptide>());
+        ++decoysGenerated;
+      }
+    }
+  } else if (!allowDups) {
+    for (set<string>::const_iterator i = setTargets.begin();
+         i != setTargets.end();
+         ++i) {
+      const string* setTarget = &*i;
+      const map<const string*, TargetInfo>::iterator targetLookup =
+        targetInfo.find(setTarget);
+      const ProteinInfo& proteinInfo = (targetLookup->second.proteinInfo);
+      const int startLoc = targetLookup->second.start;
+      FLOAT_T pepMass = targetLookup->second.mass;
+      if(generateDecoy(*setTarget, targetToDecoy, &setTargets, &setDecoys, decoyType, allowDups, failedDecoyCnt,
+                    decoysGenerated, curProtein, proteinInfo, startLoc, pbProtein,
+                    pepMass, outPeptideHeap, outProteinSequences)) {
+        proteinWriter.Write(&pbProtein);
+      } else {
+        continue;
+      }
+    }
+  
+  } else { // allow dups
+    for (vector<pair<ProteinInfo, vector<PeptideInfo> > >::const_iterator i = cleavedPeptideInfo.begin();
+         i != cleavedPeptideInfo.end();
+         ++i) {
+      for (vector<PeptideInfo>::const_iterator j = i->second.begin();
+           j != i->second.end();
+           ++j) {
+        const string setTarget = j->Sequence();
+        const ProteinInfo& proteinInfo = i->first;
+        const int startLoc = j->Position();
+        FLOAT_T pepMass = calcPepMassTide(j->Sequence(), massType);
+        if(generateDecoy(setTarget, targetToDecoy, NULL, NULL, decoyType, allowDups, failedDecoyCnt,
+                      decoysGenerated, curProtein, proteinInfo, startLoc, pbProtein,
+                      pepMass, outPeptideHeap, outProteinSequences)) {
+          proteinWriter.Write(&pbProtein);
+        } else {
+          continue;
+        }
+      }
+    }
+
+  }
+  if (invalidPepCnt > 0) {
+    carp(CARP_INFO, "Ignoring %d peptide sequences containing unrecognized characters", invalidPepCnt);
+  }
+  if (failedDecoyCnt > 0) {
+    carp(CARP_INFO, "Failed to generate decoys for %d low complexity peptides", failedDecoyCnt);
+  }
+  carp(CARP_DEBUG, "FASTA produced %d targets and %d decoys",
+       targetsGenerated, decoysGenerated);
+
+  // Write to decoy fasta if necessary (if protein-reverse, we already wrote it)
+  if (decoyFasta && decoyType != PROTEIN_REVERSE_DECOYS) {
+    carp(CARP_INFO, "Writing decoy fasta...");
+    // Iterate over all (protein, peptides from that protein)
+    for (vector< pair< ProteinInfo, vector<PeptideInfo> > >::const_iterator i =
+         cleavedPeptideInfo.begin(); i != cleavedPeptideInfo.end(); ++i) {
+      string decoyProtein = *(i->first.sequence);
+      // Iterate over all peptides from the protein
+      for (vector<PeptideInfo>::const_iterator j = i->second.begin();
+           j != i->second.end();
+           ++j) {
+        // In the protein sequence, replace the target peptide with its decoy
+        const string setTarget = j->Sequence();
+        const map<const string, const string*>::const_iterator decoyCheck = targetToDecoy.find(setTarget);
+        if (decoyCheck != targetToDecoy.end()) {
+          decoyProtein.replace(j->Position(), j->Length(), *(decoyCheck->second));
+        }
+      }
+      // Write out the final protein
+      (*decoyFasta) << ">" << decoyPrefix << i->first.name << endl
+                    << decoyProtein << endl;
+    }
+  }
+}
+
+void TideIndexApplication::writePeptidesAndAuxLocs(
+  vector<TideIndexPeptide>& peptideHeap,
+  const string& peptidePbFile,
+  const string& auxLocsPbFile,
+  pb::Header& pbHeader
+) {
+  // Check header
+  if (pbHeader.source_size() != 1) {
+    carp(CARP_FATAL, "pbHeader had a number of sources other than 1");
+  }
+  pb::Header_Source& headerSource = *(pbHeader.mutable_source(0));
+  if (!headerSource.has_filename() || headerSource.has_filetype()) {
+    carp(CARP_FATAL, "pbHeader source invalid");
+  }
+
+  string proteinsFile = headerSource.filename();
+  vector<const pb::Protein*> proteins;
+  pb::Header proteinsHeader;
+  carp(CARP_INFO, "Reading proteins");
+  if (!ReadRecordsToVector<pb::Protein>(&proteins, proteinsFile,
+                                        &proteinsHeader)) {
+    carp(CARP_FATAL, "Error reading proteins from %s", proteinsFile.c_str());
+  } else if (proteinsHeader.file_type() != pb::Header::RAW_PROTEINS) {
+    carp(CARP_FATAL, "Proteins file %s had invalid type", proteinsFile.c_str());
+  }
+  // Clean up
+  for (vector<const pb::Protein*>::iterator i = proteins.begin();
+       i != proteins.end();
+       ++i) {
+    delete *i;
+  }
+  // The raw proteins file is read in. It's a valid source file;
+  // remember it as such:
+  headerSource.mutable_header()->CopyFrom(proteinsHeader);
+
+  // Now check other desired settings
+  if (!pbHeader.has_peptides_header()) {
+    carp(CARP_FATAL, "!pbHeader->has_peptideHeapheader()");
+  }
+  const pb::Header_PeptidesHeader& settings = pbHeader.peptides_header();
+  //if (!Peptide::SetMinMaxMassAndLength(settings)) {
+  //  carp(CARP_FATAL, "Error setting min/max mass/length");
+  if (!settings.has_enzyme() || settings.enzyme().empty()) {
+    carp(CARP_FATAL, "Enzyme settings error");
+  }
+
+  pbHeader.set_file_type(pb::Header::PEPTIDES);
+  pbHeader.mutable_peptides_header()->set_has_peaks(false);
+  pbHeader.mutable_peptides_header()->set_decoys(
+    get_tide_decoy_type_parameter("decoy-format"));
+  HeadedRecordWriter peptideWriter(peptidePbFile, pbHeader); // put header in outfile
+
+  // Create the auxiliary locations header and writer
+  pb::Header auxLocsHeader;
+  auxLocsHeader.set_file_type(pb::Header::AUX_LOCATIONS);
+  pb::Header_Source* auxLocsSource = auxLocsHeader.add_source();
+  auxLocsSource->set_filename(peptidePbFile);
+  auxLocsSource->mutable_header()->CopyFrom(pbHeader);
+  HeadedRecordWriter auxLocWriter(auxLocsPbFile, auxLocsHeader);
+
+  pb::Peptide pbPeptide;
+  pb::AuxLocation pbAuxLoc;
+  int auxLocIdx = -1;
+  carp(CARP_DEBUG, "%d peptides in heap", peptideHeap.size());
+  int count = 0;
+  sort_heap(peptideHeap.begin(), peptideHeap.end(),
+            greater<TideIndexPeptide>());
+  while (!peptideHeap.empty()) {
+    TideIndexPeptide curPeptide(peptideHeap.back());
+    peptideHeap.pop_back();
+    // For duplicate peptides we only record the location
+    while (!peptideHeap.empty() && peptideHeap.back() == curPeptide) {
+      pb::Location* location = pbAuxLoc.add_location();
+      location->set_protein_id(peptideHeap.back().getProteinId());
+      location->set_pos(peptideHeap.back().getProteinPos());
+      peptideHeap.pop_back();
+    }
+    getPbPeptide(count, curPeptide, pbPeptide);
+    // Not all peptides have aux locations associated with them. Check to see
+    // if GetGroup added any locations to aux_location. If yes, only then
+    // assign the corresponding array index to the peptide and write it out.
+    if (pbAuxLoc.location_size() > 0) {
+      pbPeptide.set_aux_locations_index(++auxLocIdx);
+      auxLocWriter.Write(&pbAuxLoc);
+      pbAuxLoc.Clear();
+    }
+
+    // Write the peptide AFTER the aux_locations check, in case we added an
+    // aux_locations_index to the peptide.
+    peptideWriter.Write(&pbPeptide);
+
+    if (++count % 100000 == 0) {
+      carp(CARP_INFO, "Wrote %d peptides", count);
+    }
+  }
+}
+
+FLOAT_T TideIndexApplication::calcPepMassTide(
+  const string& sequence,
+  MASS_TYPE_T massType
+) {
+  FixPt mass;
+  FixPt aaMass;
+  if (massType == AVERAGE) {
+    mass = MassConstants::fixp_avg_h2o;
+    for (size_t i = 0; i < sequence.length(); ++i) {
+      if (i == 0) {
+        aaMass = MassConstants::fixp_nterm_avg_table[sequence[i]];
+      } else if (i == sequence.length() - 1) {
+        aaMass = MassConstants::fixp_cterm_avg_table[sequence[i]];
+      } else {
+        aaMass = MassConstants::fixp_avg_table[sequence[i]];
+      }
+      if (aaMass == 0) {
+        return -1;
+      }
+      mass += aaMass;
+    }
+  } else if (massType == MONO) {
+    mass = MassConstants::fixp_mono_h2o;
+    for (size_t i = 0; i < sequence.length(); ++i) {
+      if (i == 0) {
+        aaMass = MassConstants::fixp_nterm_mono_table[sequence[i]];
+      } else if (i == sequence.length() - 1) {
+        aaMass = MassConstants::fixp_cterm_mono_table[sequence[i]];
+      } else {
+        aaMass = MassConstants::fixp_mono_table[sequence[i]];
+      }
+      if (aaMass == 0) {
+        return -1;
+      }
+      mass += aaMass;
+    }
+  } else {
+    carp(CARP_FATAL, "Invalid mass type");
+  }
+  return MassConstants::ToDouble(mass);
+}
+
+void TideIndexApplication::getPbProtein(
+  int id,
+  const string& name,
+  const string& residues,
+  pb::Protein& outPbProtein
+) {
+  outPbProtein.Clear();
+  outPbProtein.set_id(id);
+  outPbProtein.set_name(name);
+  outPbProtein.set_residues(residues);
+}
+
+void TideIndexApplication::getDecoyPbProtein(
+  int id,
+  const ProteinInfo& targetProteinInfo,
+  string decoyPeptideSequence,
+  int startLoc,
+  pb::Protein& outPbProtein
+) {
+  const string* proteinSequence = targetProteinInfo.sequence;
+  const int pepLen = decoyPeptideSequence.length();
+
+  // Add N term to decoySequence, if it exists
+  if (startLoc > 0) {
+    decoyPeptideSequence.insert(0, 1, proteinSequence->at(startLoc - 1));
+  }
+  // Add C term to decoySequence, if it exists
+  size_t cTermLoc = startLoc + pepLen;
+  decoyPeptideSequence.push_back((cTermLoc < proteinSequence->length()) ?
+    proteinSequence->at(cTermLoc) : '-');
+  // Append original target sequence, unless using protein level decoys
+  if (get_tide_decoy_type_parameter("decoy-format") != PROTEIN_REVERSE_DECOYS) {
+    decoyPeptideSequence.append(targetProteinInfo.sequence->substr(startLoc, pepLen));
+  }
+
+  getPbProtein(id, Params::GetString("decoy-prefix") + targetProteinInfo.name,
+               decoyPeptideSequence, outPbProtein);
+  outPbProtein.set_target_pos(startLoc);
+}
+
+void TideIndexApplication::getPbPeptide(
+  int id,
+  const TideIndexPeptide& peptide,
+  pb::Peptide& outPbPeptide
+) {
+  outPbPeptide.Clear();
+  outPbPeptide.set_id(id);
+  outPbPeptide.set_mass(peptide.getMass());
+  outPbPeptide.set_length(peptide.getLength());
+  outPbPeptide.mutable_first_location()->set_protein_id(peptide.getProteinId());
+  outPbPeptide.mutable_first_location()->set_pos(peptide.getProteinPos());;
+  outPbPeptide.set_is_decoy(peptide.isDecoy());
+}
+
+void TideIndexApplication::addAuxLoc(
+  int proteinId,
+  int proteinPos,
+  pb::AuxLocation& outAuxLoc
+) {
+  pb::Location* location = outAuxLoc.add_location();
+  location->set_protein_id(proteinId);
+  location->set_pos(proteinPos);
+}
+
+void TideIndexApplication::processParams() {
+  // Update mods-spec parameter for default cysteine mod
+  string default_cysteine = "C+" + StringUtils::ToString(CYSTEINE_DEFAULT);
+  string mods_spec = Params::GetString("mods-spec");
+  if (mods_spec.find('C') == string::npos) {
+    mods_spec = mods_spec.empty() ?
+      default_cysteine : default_cysteine + ',' + mods_spec;
+    carp(CARP_DEBUG, "Using default cysteine mod '%s' ('%s')",
+         default_cysteine.c_str(), mods_spec.c_str());
+  }
+  Params::Set("mods-spec", mods_spec);
+}
+
+
+string getModifiedPeptideSeq(const pb::Peptide* peptide,
+  const ProteinVec* proteins) {
+  int mod_index;
+  double mod_delta;
+  stringstream mod_stream;
+  const pb::Location& location = peptide->first_location();
+  const pb::Protein* protein = proteins->at(location.protein_id());
+  // Get peptide sequence without mods
+  string pep_str = protein->residues().substr(location.pos(), peptide->length());
+
+  // Store all mod indices/deltas
+  map<int, double> mod_map;
+  set<int> mod_indices;
+  for (int j = 0; j < peptide->modifications_size(); ++j) {
+    //        var_mod_table.DecodeMod(ModCoder::Mod(peptide->modifications(j)), &mod_index, &mod_delta);
+    MassConstants::DecodeMod(ModCoder::Mod(peptide->modifications(j)),
+      &mod_index, &mod_delta);
+    mod_indices.insert(mod_index);
+    mod_map[mod_index] = mod_delta;
+  }
+  for (set<int>::const_reverse_iterator j = mod_indices.rbegin();
+    j != mod_indices.rend();
+    ++j) {
+    // Insert the modification string into the peptide sequence
+    mod_stream << '[' << mod_map[*j] << ']';
+    pep_str.insert(*j + 1, mod_stream.str());
+    mod_stream.str("");
+  }
+  return pep_str;
+}
+
+bool TideIndexApplication::generateDecoy(
+  const string& setTarget,
+  std::map<const string, const string*>& targetToDecoy,
+  set<string>* setTargets,
+  set<string>* setDecoys,
+  DECOY_TYPE_T decoyType,
+  bool allowDups,
+  unsigned int& failedDecoyCnt,
+  unsigned int& decoysGenerated,
+  int& curProtein,
+  const ProteinInfo& proteinInfo,
+  const int startLoc,
+  pb::Protein& pbProtein,
+  FLOAT_T pepMass,
+  vector<TideIndexPeptide>& outPeptideHeap,
+  vector<string*>& outProteinSequences
+) {
+  const map<const string, const string*>::const_iterator decoyCheck =
+        targetToDecoy.find(setTarget);
+  string* decoySequence = new string;
+  if (decoyCheck != targetToDecoy.end()) {
+    // Decoy already generated for this sequence
+    *decoySequence = *(decoyCheck->second);
+  } else {
+    // Try to generate decoy
+    if(allowDups) {
+      set<string> targets, decoys;
+      setTargets = &targets;
+      setDecoys = &decoys;
+    }
+    if (!GeneratePeptides::makeDecoy(setTarget, *setTargets, *setDecoys,
+                                     decoyType == PEPTIDE_SHUFFLE_DECOYS,
+                                     *decoySequence)) {
+    carp(CARP_DETAILED_INFO, "Failed to generate decoy for sequence %s",
+         setTarget.c_str());
+    ++failedDecoyCnt;
+    delete decoySequence;
+    return false;
+    } else if(!allowDups) {
+      targetToDecoy[setTarget] = &*(setDecoys->insert(*decoySequence).first);
+    } else {
+      targetToDecoy[setTarget] = decoySequence;
+    }
+  }
+
+  outProteinSequences.push_back(decoySequence);
+
+  // Write pb::Protein
+  getDecoyPbProtein(++curProtein, proteinInfo, *decoySequence,
+                    startLoc, pbProtein);
+  // Add decoy to heap
+  TideIndexPeptide pepDecoy(
+              pepMass, setTarget.length(), decoySequence, curProtein, (startLoc > 0) ? 1 : 0, true);
+  outPeptideHeap.push_back(pepDecoy);
+  push_heap(outPeptideHeap.begin(), outPeptideHeap.end(),
+    greater<TideIndexPeptide>());
+  ++decoysGenerated;
+  return true;
+}
+
+
+/*
+* Local Variables:
+* mode: c
+* c-basic-offset: 2
+* End:
+*/
diff --git a/src/app/TideIndexApplication.h b/src/app/TideIndexApplication.h
new file mode 100644
index 0000000..815e5f1
--- /dev/null
+++ b/src/app/TideIndexApplication.h
@@ -0,0 +1,245 @@
+#ifndef TIDEINDEXAPPLICATION_H
+#define TIDEINDEXAPPLICATION_H
+
+#include "CruxApplication.h"
+
+#include <sys/stat.h>
+
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+#include <errno.h>
+#include <gflags/gflags.h>
+#include "header.pb.h"
+#include "tide/records.h"
+#include "tide/peptide.h"
+#include "tide/theoretical_peak_set.h"
+#include "tide/abspath.h"
+#include "TideSearchApplication.h"
+#include "util/crux-utils.h"
+
+using namespace std;
+
+std::string getModifiedPeptideSeq(const pb::Peptide* peptide, const ProteinVec* proteins);
+
+class TideIndexApplication : public CruxApplication {
+
+  friend class TideSearchApplication;
+
+ public:
+
+  /**
+   * Constructor
+   */
+  TideIndexApplication();
+
+  /**
+   * Destructor
+   */
+  ~TideIndexApplication();
+
+  /**
+   * Main method
+   */
+  virtual int main(int argc, char** argv);
+
+  int main(const string& fasta, const string& index, string cmd_line = "");
+
+  /**
+   * Returns the command name
+   */
+  virtual string getName() const;
+
+  /**
+   * Returns the command description
+   */
+  virtual string getDescription() const;
+
+  /**
+   * Returns the command arguments
+   */
+  virtual vector<string> getArgs() const;
+
+  /**
+   * Returns the command options
+   */
+  virtual vector<string> getOptions() const;
+
+  /**
+   * Returns the command outputs
+   */
+  virtual vector< pair<string, string> > getOutputs() const;
+
+  /**
+   * Returns whether the application needs the output directory or not. (default false)
+   */
+  virtual bool needsOutputDirectory() const;
+
+  virtual COMMAND_T getCommand() const;
+
+ protected:
+
+  class TideIndexPeptide {
+   private:
+    double mass_;
+    int length_;
+    int proteinId_;
+    int proteinPos_;
+    const char* residues_;  // points at protein sequence
+    bool decoy_;
+   public:
+    TideIndexPeptide() {}
+    TideIndexPeptide(double mass, int length, string* proteinSeq,
+                     int proteinId, int proteinPos, bool decoy) {
+      mass_ = mass;
+      length_ = length;
+      proteinId_ = proteinId;
+      proteinPos_ = proteinPos;
+      residues_ = proteinSeq->data() + proteinPos;
+      decoy_ = decoy;
+    }
+    TideIndexPeptide(const TideIndexPeptide& other) {
+      mass_ = other.mass_;
+      length_ = other.length_;
+      proteinId_ = other.proteinId_;
+      proteinPos_ = other.proteinPos_;
+      residues_ = other.residues_;
+      decoy_ = other.decoy_;
+    }
+    double getMass() const { return mass_; }
+    int getLength() const { return length_; }
+    int getProteinId() const { return proteinId_; }
+    int getProteinPos() const { return proteinPos_; }
+    string getSequence() const { return string(residues_, length_); }
+    bool isDecoy() const { return decoy_; }
+
+    friend bool operator >(
+      const TideIndexPeptide& lhs, const TideIndexPeptide& rhs) {
+      if (&lhs == &rhs) {
+        return false;
+      } else if (lhs.mass_ != rhs.mass_) {
+        return lhs.mass_ > rhs.mass_;
+      } else if (lhs.length_ != rhs.length_) {
+        return lhs.length_ > rhs.length_;
+      } else {
+        int strncmpResult = strncmp(lhs.residues_, rhs.residues_, lhs.length_);
+        if (strncmpResult != 0) {
+          return strncmpResult > 0;
+        }
+      }
+      return false;
+    }
+    friend bool operator ==(
+      const TideIndexPeptide& lhs, const TideIndexPeptide& rhs) {
+      return (lhs.mass_ == rhs.mass_ && lhs.length_ == rhs.length_ &&
+              strncmp(lhs.residues_, rhs.residues_, lhs.length_) == 0);
+    }
+  };
+
+  struct ProteinInfo {
+    string name;
+    const string* sequence;
+    ProteinInfo(const string& proteinName, const string* proteinSequence)
+      : name(proteinName), sequence(proteinSequence) {}
+  };
+
+  struct TargetInfo {
+    ProteinInfo proteinInfo;
+    int start;
+    FLOAT_T mass;
+    TargetInfo(const ProteinInfo& protein, int startLoc, FLOAT_T pepMass)
+      : proteinInfo(protein), start(startLoc), mass(pepMass) {}
+  };
+
+  static void fastaToPb(
+    const std::string& commandLine,
+    const ENZYME_T enzyme,
+    const DIGEST_T digestion,
+    int missedCleavages,
+    FLOAT_T minMass,
+    FLOAT_T maxMass,
+    int minLength,
+    int maxLength,
+    bool dups,
+    MASS_TYPE_T massType,
+    DECOY_TYPE_T decoyType,
+    const std::string& fasta,
+    const std::string& proteinPbFile,
+    pb::Header& outProteinPbHeader,
+    std::vector<TideIndexPeptide>& outPeptideHeap,
+    std::vector<string*>& outProteinSequences,
+    std::ofstream* decoyFasta
+  );
+
+  static void writePeptidesAndAuxLocs(
+    std::vector<TideIndexPeptide>& peptideHeap, // will be destroyed.
+    const std::string& peptidePbFile,
+    const std::string& auxLocsPbFile,
+    pb::Header& pbHeader
+  );
+
+  static FLOAT_T calcPepMassTide(
+    const std::string& sequence,
+    MASS_TYPE_T massType
+  );
+
+  static void getPbProtein(
+    int id,
+    const std::string& name,
+    const std::string& residues,
+    pb::Protein& outPbProtein
+  );
+
+  static void getDecoyPbProtein(
+    int id,
+    const ProteinInfo& targetProteinInfo,
+    std::string decoyPeptideSequence,
+    int startLoc,
+    pb::Protein& outPbProtein
+  );
+
+  static void getPbPeptide(
+    int id,
+    const TideIndexPeptide& peptide,
+    pb::Peptide& outPbPeptide
+  );
+
+  static void addAuxLoc(
+    int proteinId,
+    int proteinPos,
+    pb::AuxLocation& outAuxLoc
+  );
+
+  /**
+   * Generates decoy for the target peptide, writes the decoy protein to pbProtein
+   * and adds decoy to the heap.
+   */
+  static bool generateDecoy(
+    const string& setTarget,
+    std::map<const string, const string*>& targetToDecoy,
+    set<string>* setTargets,
+    set<string>* setDecoys,
+    DECOY_TYPE_T decoyType,
+    bool allowDups,
+    unsigned int& failedDecoyCnt,
+    unsigned int& decoysGenerated,
+    int& curProtein,
+    const ProteinInfo& proteinInfo,
+    const int startLoc,
+    pb::Protein& pbProtein,
+    FLOAT_T pepMass,
+    vector<TideIndexPeptide>& outPeptideHeap,
+    vector<string*>& outProteinSequences
+  );
+
+  virtual void processParams();
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/TideMatchSet.cpp b/src/app/TideMatchSet.cpp
new file mode 100644
index 0000000..54cdc98
--- /dev/null
+++ b/src/app/TideMatchSet.cpp
@@ -0,0 +1,647 @@
+/*
+ * There are two versions of the report function, which writes matches to output
+ * files. The first version, which takes ofstreams as arguments, is used when
+ * only tab-delimited output is required. It does not perform any object
+ * conversions. The second version takes an OutputFiles object as an argument
+ * and is used when any non-tab-delimited output is required. It must convert
+ * the data from Tide into Crux objects, which increases runtime.
+ */
+
+#include <fstream>
+#include <iomanip>
+
+#include "TideIndexApplication.h"
+#include "TideMatchSet.h"
+#include "TideSearchApplication.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+
+string TideMatchSet::CleavageType;
+char TideMatchSet::match_collection_loc_[] = {0};
+char TideMatchSet::decoy_match_collection_loc_[] = {0};
+
+TideMatchSet::TideMatchSet(Arr* matches, double max_mz)
+  : matches_(matches), max_mz_(max_mz), exact_pval_search_(false), elution_window_(0) {
+}
+
+TideMatchSet::TideMatchSet(Peptide* peptide, double max_mz)
+  : peptide_(peptide), max_mz_(max_mz), exact_pval_search_(false), elution_window_(0) {
+}
+
+TideMatchSet::~TideMatchSet() {
+}
+
+/**
+ * Write peptide centric matches to output files
+ * This is for writing tab-delimited only
+ */
+void TideMatchSet::report(
+  ofstream* target_file,  ///< target file to write to
+  ofstream* decoy_file, ///< decoy file to write to
+  int top_matches,
+  const ActivePeptideQueue* peptides, ///< peptide queue
+  const ProteinVec& proteins, ///< proteins corresponding with peptides
+  const vector<const pb::AuxLocation*>& locations,  ///< auxiliary locations
+  bool compute_sp ///< whether to compute sp or not
+) {
+  if (peptide_->spectrum_matches_array.size() == 0) {
+    return;
+  }
+
+  carp(CARP_DETAILED_DEBUG, "TideMatchSet reporting top %d of %d peptide centric matches",
+       top_matches, peptide_->spectrum_matches_array.size());
+
+  int charge;
+  double score;
+  double d_cn = 0.0;
+  int nHit = peptide_->spectrum_matches_array.size();
+
+  if (nHit < top_matches) {
+      top_matches = nHit;
+  }
+  if (exact_pval_search_) {
+    sort(peptide_->spectrum_matches_array.begin(),
+         peptide_->spectrum_matches_array.end(),
+         Peptide::spectrum_matches::compPV);
+  } else {
+    sort(peptide_->spectrum_matches_array.begin(),
+         peptide_->spectrum_matches_array.end(),
+         Peptide::spectrum_matches::compSC);
+  } 
+ 
+  for (int cnt = 0; cnt < nHit; ++cnt) {
+    d_cn = 0.0;
+    if (exact_pval_search_ == true) {
+      score = peptide_->spectrum_matches_array[cnt].score1_;
+      if (cnt < nHit-1) {
+        d_cn = (double)((log10(peptide_->spectrum_matches_array[cnt+1].score1_)
+                       - log10(peptide_->spectrum_matches_array[cnt].score1_))
+                       /max((FLOAT_T)(-1*log10(peptide_->spectrum_matches_array[cnt].score1_)), FLOAT_T(1)));
+      }
+    } else {
+      score = (double)(peptide_->spectrum_matches_array[cnt].score1_ / 100000000.0);
+      if (cnt < nHit-1) {
+        d_cn = (double)( score 
+                      - (double)(peptide_->spectrum_matches_array[cnt+1].score1_ / 100000000.0)
+                      / (double)max((FLOAT_T)score , FLOAT_T(1)));
+      }
+    }
+    peptide_->spectrum_matches_array[cnt].score1_ = score;
+    peptide_->spectrum_matches_array[cnt].d_cn_ = d_cn;
+    peptide_->spectrum_matches_array[cnt].score3_ = nHit;
+  }
+  //smoothing primary scores in the elution window, only in DIA mode.
+  if (elution_window_ > 0) {
+    sort(peptide_->spectrum_matches_array.begin(), 
+         peptide_->spectrum_matches_array.end(),
+         Peptide::spectrum_matches::compRT);
+    int cnt;
+    double mean = 1.0;
+
+    //initialize sliding window
+    int flank = (int)((double)((elution_window_)/2) + 1);
+    flank = flank > nHit ? nHit : flank;
+
+    for (cnt = 0; cnt < flank; ++cnt) {
+      mean *= peptide_->spectrum_matches_array[cnt].score1_;
+    }
+    int top = flank;
+    int bottom = 0;
+    for (cnt = 0; cnt < nHit; ++cnt) {
+      peptide_->spectrum_matches_array[cnt].elution_score_ = pow(mean, 1.0/(top-bottom));
+      if (top < nHit) {
+        mean *= peptide_->spectrum_matches_array[top].score1_;
+        ++top;
+      }
+      if (cnt >= flank-1) {
+        mean /= peptide_->spectrum_matches_array[bottom].score1_;
+        ++bottom;
+      }
+    }
+    //reorder PSMs according to the smoothed p-value
+    sort(peptide_->spectrum_matches_array.begin(),
+         peptide_->spectrum_matches_array.end(),
+         Peptide::spectrum_matches::compES);
+  }
+  peptide_->spectrum_matches_array.resize(top_matches);
+  if (compute_sp) {
+    vector<pair<double, int> > spScoreRank;
+    spScoreRank.reserve(top_matches);
+    for (int cnt = 0; cnt < top_matches; ++cnt) {  
+      SpScorer sp_scorer(proteins, *peptide_->spectrum_matches_array[cnt].spectrum_, 
+                         peptide_->spectrum_matches_array[cnt].charge_, max_mz_);
+      pb::Peptide* pb_peptide = getPbPeptide(*peptide_);
+      sp_scorer.Score(*pb_peptide, peptide_->spectrum_matches_array[cnt].spData_);
+      spScoreRank.push_back(make_pair(-1*peptide_->spectrum_matches_array[cnt].spData_.sp_score, cnt));
+    }
+    sort(spScoreRank.begin(), spScoreRank.end());
+    for (size_t i = 0; i < spScoreRank.size(); ++i) {
+      peptide_->spectrum_matches_array[spScoreRank[i].second].spData_.sp_rank = i;
+    }
+  }  
+  // target peptide or concat search
+  ofstream* file =
+    (Params::GetBool("concat") || !peptide_->IsDecoy()) ? target_file : decoy_file;
+  writeToFile(file, peptides, proteins, locations, compute_sp);
+}
+
+/**
+ * Helper function for tab delimited report function for peptide centric search
+ */
+void TideMatchSet::writeToFile(
+  ofstream* file,
+  const ActivePeptideQueue* peptides,
+  const ProteinVec& proteins,
+  const vector<const pb::AuxLocation*>& locations,
+  bool compute_sp ///< whether to compute sp or not
+) {
+  if (!file) {
+    return;
+  }
+  int cur = 0;
+
+  const Peptide* peptide = peptides->GetPeptide(0);
+  const pb::Protein* protein = proteins[peptide->FirstLocProteinId()];
+  int pos = peptide->FirstLocPos();
+  string proteinNames = getProteinName(*protein,
+      (!protein->has_target_pos()) ? pos : protein->target_pos());
+  string flankingAAs, n_term, c_term;
+  getFlankingAAs(peptide, protein, pos, &n_term, &c_term);
+  flankingAAs = n_term + c_term;
+
+  int precision = Params::GetInt("precision");
+
+  // look for other locations
+  if (peptide->HasAuxLocationsIndex()) {
+      const pb::AuxLocation* aux = locations[peptide->AuxLocationsIndex()];
+      for (int i = 0; i < aux->location_size(); ++i) {
+      const pb::Location& location = aux->location(i);
+      protein = proteins[location.protein_id()];
+      pos = location.pos();
+      proteinNames += "," + getProteinName(*protein,
+          (!protein->has_target_pos()) ? pos : protein->target_pos());
+      getFlankingAAs(peptide, protein, pos, &n_term, &c_term);
+      flankingAAs += "," + n_term + c_term;
+      }
+  }
+
+  Crux::Peptide cruxPep = getCruxPeptide(peptide);
+  for (vector<Peptide::spectrum_matches>::const_iterator 
+        i = peptide_->spectrum_matches_array.begin(); 
+        i != peptide_->spectrum_matches_array.end(); 
+        ++i) {
+    Spectrum* spectrum = i->spectrum_;
+    
+    *file << spectrum->SpectrumNumber() << '\t'
+          << i->charge_ << '\t'
+          << spectrum->PrecursorMZ() << '\t'
+          << (spectrum->PrecursorMZ() - MASS_PROTON) * i->charge_ << '\t'
+          << cruxPep.calcModifiedMass() << '\t'
+          << i->d_cn_ << '\t';
+    SpScorer::SpScoreData spData;
+    if (compute_sp) {
+      *file << i->spData_.sp_score << '\t'
+          << i->spData_.sp_rank << '\t';
+    }
+
+    // Use scientific notation for exact p-value, but not refactored XCorr.
+    if (exact_pval_search_) {
+      *file << StringUtils::ToString(i->score1_, precision, false) << '\t';
+      *file << StringUtils::ToString(i->score2_, precision, true) << '\t';
+    } else {
+      *file << StringUtils::ToString(i->score1_, precision, true) << '\t';
+    }
+    
+    if (elution_window_ ) {
+      *file << i->elution_score_ << '\t';
+    }
+
+    *file << ++cur << '\t';
+    if (compute_sp) {
+      *file << i->spData_.matched_ions << '\t'
+            << i->spData_.total_ions << '\t';
+    }
+    *file << i->score3_ << '\t';
+
+    if (Params::GetBool("concat")) {
+      *file << peptides->ActiveTargets() + peptides->ActiveDecoys() << '\t';
+    } else {
+      *file << (!peptide->IsDecoy() ? peptides->ActiveTargets() : peptides->ActiveDecoys()) << '\t';
+    }
+    *file << cruxPep.getModifiedSequenceWithMasses() << '\t'
+          << cruxPep.getModsString() << '\t'
+          << CleavageType << '\t'
+          << proteinNames << '\t'
+          << flankingAAs;
+    if (peptide->IsDecoy() && !TideSearchApplication::proteinLevelDecoys()) {
+      // write target sequence
+      const string& residues = protein->residues();
+      *file << '\t'
+            << residues.substr(residues.length() - peptide->Len());
+    } else if (Params::GetBool("concat") && !TideSearchApplication::proteinLevelDecoys()) {
+      *file << '\t'
+            << cruxPep.getUnshuffledSequence();
+    }
+    *file << endl;
+  }
+}
+
+/**
+ * Write matches to output files
+ * This is for writing tab-delimited only
+ */
+void TideMatchSet::report(
+  ofstream* target_file,  ///< target file to write to
+  ofstream* decoy_file, ///< decoy file to write to
+  int top_n,  ///< number of matches to report
+  const string& spectrum_filename, ///< name of spectrum file
+  const Spectrum* spectrum, ///< spectrum for matches
+  int charge, ///< charge for matches
+  const ActivePeptideQueue* peptides, ///< peptide queue
+  const ProteinVec& proteins,  ///< proteins corresponding with peptides
+  const vector<const pb::AuxLocation*>& locations,  ///< auxiliary locations
+  bool compute_sp, ///< whether to compute sp or not
+  bool highScoreBest, //< indicates semantics of score magnitude
+  boost::mutex * rwlock
+) {
+  if (matches_->size() == 0) {
+    return;
+  }
+
+  carp(CARP_DETAILED_DEBUG, "Tide MatchSet reporting top %d of %d matches",
+       top_n, matches_->size());
+
+  vector<Arr::iterator> targets, decoys;
+  gatherTargetsAndDecoys(peptides, proteins, targets, decoys, top_n, highScoreBest);
+
+  map<Arr::iterator, FLOAT_T> delta_cn_map;
+  map<Arr::iterator, FLOAT_T> delta_lcn_map;
+  computeDeltaCns(targets, &delta_cn_map, &delta_lcn_map);
+  computeDeltaCns(decoys, &delta_cn_map, &delta_lcn_map);
+
+  map<Arr::iterator, pair<const SpScorer::SpScoreData, int> > sp_map;
+  if (compute_sp) {
+    SpScorer sp_scorer(proteins, *spectrum, charge, max_mz_);
+    computeSpData(targets, &sp_map, &sp_scorer, peptides);
+    computeSpData(decoys, &sp_map, &sp_scorer, peptides);
+  }
+  writeToFile(target_file, top_n, targets, spectrum_filename, spectrum, charge,
+              peptides, proteins, locations, delta_cn_map, delta_lcn_map, compute_sp ? &sp_map : NULL, rwlock);
+  writeToFile(decoy_file, top_n, decoys, spectrum_filename, spectrum, charge,
+              peptides, proteins, locations, delta_cn_map, delta_lcn_map, compute_sp ? &sp_map : NULL, rwlock);
+}
+
+/**
+ * Helper function for tab delimited report function
+ */
+void TideMatchSet::writeToFile(
+  ofstream* file,
+  int top_n,
+  const vector<Arr::iterator>& vec,
+  const string& spectrum_filename,
+  const Spectrum* spectrum,
+  int charge,
+  const ActivePeptideQueue* peptides,
+  const ProteinVec& proteins,
+  const vector<const pb::AuxLocation*>& locations,
+  const map<Arr::iterator, FLOAT_T>& delta_cn_map,
+  const map<Arr::iterator, FLOAT_T>& delta_lcn_map,
+  const map<Arr::iterator, pair<const SpScorer::SpScoreData, int> >* sp_map,
+  boost::mutex * rwlock
+) {
+  if (!file) {
+    return;
+  }
+
+  int massPrecision = Params::GetInt("mass-precision");
+  int precision = Params::GetInt("precision");
+
+  int cur = 0;
+  int concatDistinctMatches = peptides->ActiveTargets() + peptides->ActiveDecoys();
+
+  const vector<Arr::iterator>::const_iterator cutoff =
+    (vec.size() >= top_n) ? vec.begin() + top_n : vec.end();
+
+  for (vector<Arr::iterator>::const_iterator i = vec.begin(); i != cutoff; ++i) {
+    const Peptide* peptide = peptides->GetPeptide((*i)->rank);
+    const pb::Protein* protein = proteins[peptide->FirstLocProteinId()];
+    int pos = peptide->FirstLocPos();
+    string proteinNames = getProteinName(*protein,
+      (!protein->has_target_pos()) ? pos : protein->target_pos());
+    string flankingAAs, n_term, c_term;
+    getFlankingAAs(peptide, protein, pos, &n_term, &c_term);
+    flankingAAs = n_term + c_term;
+
+    // look for other locations
+    if (peptide->HasAuxLocationsIndex()) {
+      const pb::AuxLocation* aux = locations[peptide->AuxLocationsIndex()];
+      for (int i = 0; i < aux->location_size(); ++i) {
+        const pb::Location& location = aux->location(i);
+        protein = proteins[location.protein_id()];
+        pos = location.pos();
+        proteinNames += "," + getProteinName(*protein,
+          (!protein->has_target_pos()) ? pos : protein->target_pos());
+        getFlankingAAs(peptide, protein, pos, &n_term, &c_term);
+        flankingAAs += "," + n_term + c_term;
+      }
+    }
+
+    Crux::Peptide cruxPep = getCruxPeptide(peptide);
+    const SpScorer::SpScoreData* sp_data = sp_map ? &(sp_map->at(*i).first) : NULL;
+
+    rwlock->lock();
+    if (Params::GetBool("file-column")) {
+      *file << spectrum_filename << '\t';
+    }
+    *file << spectrum->SpectrumNumber() << '\t'
+          << charge << '\t'
+          << StringUtils::ToString(spectrum->PrecursorMZ(), massPrecision) << '\t'
+          << StringUtils::ToString((spectrum->PrecursorMZ() - MASS_PROTON) * charge, massPrecision) << '\t'
+          << StringUtils::ToString(cruxPep.calcModifiedMass(), massPrecision) << '\t'
+          << delta_cn_map.at(*i) << '\t'
+          << delta_lcn_map.at(*i) << '\t';
+    if (sp_map) {
+      *file << StringUtils::ToString(sp_data->sp_score, precision) << '\t'
+            << sp_map->at(*i).second << '\t';
+    }
+
+    // Use scientific notation for exact p-value, but not refactored XCorr.
+    if (exact_pval_search_) {
+      *file << StringUtils::ToString((*i)->xcorr_pval, precision, false) << '\t';
+      *file << StringUtils::ToString((*i)->xcorr_score, precision, true) << '\t';
+    } else {
+      *file << StringUtils::ToString((*i)->xcorr_score, precision, true) << '\t';
+    }      
+    *file << ++cur << '\t';
+    if (sp_map) {
+      *file << sp_data->matched_ions << '\t'
+            << sp_data->total_ions << '\t';
+    }
+
+    if (Params::GetBool("concat")) {
+      *file << concatDistinctMatches << '\t';
+    } else {
+      *file << (!peptide->IsDecoy() ? peptides->ActiveTargets() : peptides->ActiveDecoys()) << '\t';
+    }
+
+    *file << cruxPep.getModifiedSequenceWithMasses() << '\t'
+          << cruxPep.getModsString() << '\t'
+          << CleavageType << '\t'
+          << proteinNames << '\t'
+          << flankingAAs;
+    if (peptide->IsDecoy() && !TideSearchApplication::proteinLevelDecoys()) {
+      // write target sequence
+      const string& residues = protein->residues();
+      *file << '\t'
+            << residues.substr(residues.length() - peptide->Len());
+    } else if (Params::GetBool("concat") && !TideSearchApplication::proteinLevelDecoys()) {
+      *file << '\t'
+            << cruxPep.getUnshuffledSequence();
+    }
+    *file << endl;
+    rwlock->unlock();
+  }
+}
+
+/**
+ * Write headers for tab delimited file
+ */
+void TideMatchSet::writeHeaders(ofstream* file, bool decoyFile, bool sp) {
+  if (!file) {
+    return;
+  }
+  const int headers[] = {
+    FILE_COL, SCAN_COL, CHARGE_COL, SPECTRUM_PRECURSOR_MZ_COL, SPECTRUM_NEUTRAL_MASS_COL,
+    PEPTIDE_MASS_COL, DELTA_CN_COL, DELTA_LCN_COL, SP_SCORE_COL, SP_RANK_COL,
+    XCORR_SCORE_COL, XCORR_RANK_COL, BY_IONS_MATCHED_COL, BY_IONS_TOTAL_COL,
+    DISTINCT_MATCHES_SPECTRUM_COL, SEQUENCE_COL, MODIFICATIONS_COL, CLEAVAGE_TYPE_COL,
+    PROTEIN_ID_COL, FLANKING_AA_COL, ORIGINAL_TARGET_SEQUENCE_COL
+  };
+  size_t numHeaders = sizeof(headers) / sizeof(int);
+  bool writtenHeader = false;
+  for (size_t i = 0; i < numHeaders; ++i) {
+    int header = headers[i];
+    if (!sp &&
+        (header == SP_SCORE_COL || header == SP_RANK_COL ||
+         header == BY_IONS_MATCHED_COL || header == BY_IONS_TOTAL_COL)) {
+      continue;
+    } else if (header == ORIGINAL_TARGET_SEQUENCE_COL &&
+               (TideSearchApplication::proteinLevelDecoys() ||
+                (!decoyFile && !Params::GetBool("concat")))) {
+      continue;
+    }
+    if (writtenHeader) {
+      *file << '\t';
+    }
+    if (header == FILE_COL &&
+        (!Params::GetBool("file-column") || Params::GetBool("peptide-centric-search"))) {
+      continue;
+    }
+    if (header == XCORR_SCORE_COL && Params::GetBool("exact-p-value")) {
+      *file << get_column_header(EXACT_PVALUE_COL) << '\t'
+            << get_column_header(REFACTORED_SCORE_COL);
+      if (Params::GetInt("elution-window-size") > 0) {
+        *file << '\t' << get_column_header(ELUTION_WINDOW_COL);
+      }
+      writtenHeader = true;
+      continue;
+    }
+    if (header == DISTINCT_MATCHES_SPECTRUM_COL) {
+      if (Params::GetBool("peptide-centric-search")) {
+        *file << get_column_header(DISTINCT_MATCHES_PEPTIDE_COL) << '\t';
+        *file << get_column_header(DISTINCT_MATCHES_SPECTRUM_COL);
+      } else {
+        *file << get_column_header(DISTINCT_MATCHES_SPECTRUM_COL);
+      }
+      writtenHeader = true;
+      continue;
+    }
+    *file << get_column_header(header);
+    writtenHeader = true;
+  }
+  *file << endl;
+}
+
+void TideMatchSet::initModMap(const pb::ModTable& modTable, ModPosition position) {
+  for (int i = 0; i < modTable.variable_mod_size(); i++) {
+    const pb::Modification& mod = modTable.variable_mod(i);
+    if (mod.has_delta() && mod.has_amino_acids()) {
+      ModificationDefinition::NewVarMod(mod.amino_acids(), mod.delta(), position);
+    }
+  }
+  for (int i = 0; i < modTable.static_mod_size(); i++) {
+    const pb::Modification& mod = modTable.static_mod(i);
+    if (mod.has_delta() && mod.has_amino_acids()) {
+      ModificationDefinition::NewStaticMod(mod.amino_acids(), mod.delta(), position);
+    }
+  }
+}
+
+Crux::Peptide TideMatchSet::getCruxPeptide(const Peptide* peptide) {
+  return Crux::Peptide(peptide->Seq(), getMods(peptide));
+}
+
+vector<Crux::Modification> TideMatchSet::getMods(const Peptide* peptide) {
+  vector<Crux::Modification> modVector;
+  string seq(peptide->Seq());
+  const ModCoder::Mod* mods;
+  int pep_mods = peptide->Mods(&mods);
+  for (int i = 0; i < pep_mods; i++) {
+    int mod_index;
+    double mod_delta;
+    MassConstants::DecodeMod(mods[i], &mod_index, &mod_delta);
+    const ModificationDefinition* modDef = ModificationDefinition::Find(mod_delta, false);
+    if (modDef == NULL) {
+      carp(CARP_ERROR, "Could not find modification with delta %f", mod_delta);
+      continue;
+    }
+    modVector.push_back(Crux::Modification(modDef, mod_index));
+  }
+  return modVector;
+}
+
+void TideMatchSet::gatherTargetsAndDecoys(
+  const ActivePeptideQueue* peptides,
+  const ProteinVec& proteins,
+  vector<Arr::iterator>& targetsOut,
+  vector<Arr::iterator>& decoysOut,
+  int top_n,
+  bool highScoreBest // indicates semantics of score magnitude
+) {
+  if (exact_pval_search_) {
+    make_heap(matches_->begin(), matches_->end(), highScoreBest ? lessXcorrPvalScore : moreXcorrPvalScore);
+  } else {
+    make_heap(matches_->begin(), matches_->end(), highScoreBest ? lessXcorrScore : moreXcorrScore);
+  }
+  
+  if (!Params::GetBool("concat") && TideSearchApplication::hasDecoys()) {
+    for (Arr::iterator i = matches_->end(); i != matches_->begin(); ) {
+      if (exact_pval_search_) {
+        pop_heap(matches_->begin(), i--, highScoreBest ? lessXcorrPvalScore : moreXcorrPvalScore);
+      } else {
+        pop_heap(matches_->begin(), i--, highScoreBest ? lessXcorrScore : moreXcorrScore);
+      }
+
+      const Peptide& peptide = *(peptides->GetPeptide(i->rank));
+      const pb::Protein& protein = *(proteins[peptide.FirstLocProteinId()]);
+      vector<Arr::iterator>* vec_ptr = !peptide.IsDecoy() ? &targetsOut : &decoysOut;
+      if (vec_ptr->size() < top_n + 1) {
+        vec_ptr->push_back(i);
+      }
+    }
+  } else {
+    int toAdd = min(top_n + 1, matches_->size());
+    for (int i = 0; i < toAdd; ) {
+      if (exact_pval_search_) {
+        pop_heap(matches_->begin(), matches_->end() - i, highScoreBest ? lessXcorrPvalScore : moreXcorrPvalScore); 
+      } else {
+        pop_heap(matches_->begin(), matches_->end() - i, highScoreBest ? lessXcorrScore : moreXcorrScore);
+      }
+      targetsOut.push_back(matches_->end() - (++i));
+    }
+  }
+}
+
+/**
+ * Create a pb peptide from Tide peptide
+ */
+pb::Peptide* TideMatchSet::getPbPeptide(const Peptide& peptide) {
+  pb::Peptide* pb_peptide = new pb::Peptide();
+  pb_peptide->set_id(peptide.Id());
+  pb_peptide->set_mass(peptide.Mass());
+  pb_peptide->set_length(peptide.Len());
+  if (peptide.HasAuxLocationsIndex()) {
+    pb_peptide->set_aux_locations_index(peptide.AuxLocationsIndex());
+  }
+
+  // Copy over all the modifications for this Peptide
+  const ModCoder::Mod* mods;
+  int pep_mods = peptide.Mods(&mods);
+  for (int i = 0; i < pep_mods; ++i) {
+    pb_peptide->add_modifications(mods[i]);
+  }
+
+  // Copy over the Peptide's first location within the first protein
+  pb::Location* first_location = pb_peptide->mutable_first_location();
+  first_location->set_protein_id(peptide.FirstLocProteinId());
+  first_location->set_pos(peptide.FirstLocPos());
+
+  return pb_peptide;
+}
+
+/**
+ * Gets the protein name with the index appended.
+ */
+string TideMatchSet::getProteinName(const pb::Protein& protein, int pos) {
+  stringstream proteinNameStream;
+  proteinNameStream << protein.name() << '(' << pos + 1 << ')';
+  return proteinNameStream.str();
+}
+
+/**
+ * Gets the flanking AAs for a Tide peptide sequence
+ */
+void TideMatchSet::getFlankingAAs(
+  const Peptide* peptide, ///< Tide peptide to get flanking AAs for
+  const pb::Protein* protein, ///< Tide protein for the peptide
+  int pos,  ///< location of peptide within protein
+  string* out_n,  ///< out parameter for n flank
+  string* out_c ///< out parameter for c flank
+) {
+  int idx_n = pos - 1;
+  int idx_c = pos + peptide->Len();
+  const string& seq = protein->residues();
+
+  *out_n = (idx_n >= 0) ? seq.substr(idx_n, 1) : "-";
+  *out_c = (idx_c < seq.length()) ? seq.substr(idx_c, 1) : "-";
+}
+
+void TideMatchSet::computeDeltaCns(
+  const vector<Arr::iterator>& vec, // xcorr*100000000.0, high to low
+  map<Arr::iterator, FLOAT_T>* delta_cn_map, // map to add delta cn scores to
+  map<Arr::iterator, FLOAT_T>* delta_lcn_map // map to add delta cn scores to
+) {
+  vector<FLOAT_T> scores;
+  for (vector<Arr::iterator>::const_iterator i = vec.begin(); i != vec.end(); i++) {
+    if (Params::GetBool("exact-p-value")) {
+      scores.push_back((*i)->xcorr_pval);
+    } else {
+      scores.push_back((*i)->xcorr_score);
+    }
+  }
+  vector< pair<FLOAT_T, FLOAT_T> > deltaCns = MatchCollection::calculateDeltaCns(
+    scores, !Params::GetBool("exact-p-value") ? XCORR : TIDE_SEARCH_EXACT_PVAL);
+  for (int i = 0; i < vec.size(); i++) {
+    delta_cn_map->insert(make_pair(vec[i], deltaCns[i].first));
+    delta_lcn_map->insert(make_pair(vec[i], deltaCns[i].second));
+  }
+}
+
+void TideMatchSet::computeSpData(
+  const vector<Arr::iterator>& vec,
+  map<Arr::iterator, pair<const SpScorer::SpScoreData, int> >* sp_rank_map,
+  SpScorer* sp_scorer,
+  const ActivePeptideQueue* peptides
+) {
+  vector< pair<Arr::iterator, SpScorer::SpScoreData> > spData;
+  spData.reserve(vec.size());
+  for (vector<Arr::iterator>::const_iterator i = vec.begin(); i != vec.end(); ++i) {
+    spData.push_back(make_pair(*i, SpScorer::SpScoreData()));
+    const Peptide& peptide = *(peptides->GetPeptide((*i)->rank));
+    pb::Peptide* pb_peptide = getPbPeptide(peptide);
+    sp_scorer->Score(*pb_peptide, spData.back().second);
+    delete pb_peptide;
+  }
+  sort(spData.begin(), spData.end(), spGreater());
+  for (size_t i = 0; i < spData.size(); ++i) {
+    sp_rank_map->insert(make_pair(
+      spData[i].first, make_pair(spData[i].second, i + 1)));
+  }
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/TideMatchSet.h b/src/app/TideMatchSet.h
new file mode 100644
index 0000000..ac6716d
--- /dev/null
+++ b/src/app/TideMatchSet.h
@@ -0,0 +1,221 @@
+#ifndef TIDE_MATCH_SET_H
+#define TIDE_MATCH_SET_H
+
+#include <boost/thread.hpp>
+#include <vector>
+#include "raw_proteins.pb.h"
+#include "tide/records.h"
+#include "tide/active_peptide_queue.h"  // no include guard
+#include "tide/fixed_cap_array.h"
+#include "tide/peptide.h"
+#include "tide/sp_scorer.h"
+#include "tide/spectrum_collection.h"
+
+#include "model/Modification.h"
+#include "model/PostProcessProtein.h"
+
+using namespace std;
+
+typedef vector<const pb::Protein*> ProteinVec;
+
+class TideMatchSet {
+
+ public:
+  bool exact_pval_search_;
+  int elution_window_;
+  
+  typedef pair<int, int> Pair2;
+  typedef FixedCapacityArray<Pair2> Arr2;
+
+//  typedef pair<pair<double, double>, int> Pair;   //store results for exact_pval calculations
+//  typedef FixedCapacityArray<Pair> Arr;
+
+  struct Scores {
+    double xcorr_score;
+    double xcorr_pval;
+    int resEv_score;
+    double resEv_pval;
+    double combinedPval;
+    int rank;
+  };
+  typedef FixedCapacityArray<Scores> Arr;
+
+  // Matches will be an array of pairs, (score, counter), where counter refers
+  // to the index within the ActivePeptideQueue, counting from the back.  This
+  // slight complication is due to the way the generated machine code fills the
+  // counter in the matches buffer by decrementing the counter.
+  TideMatchSet(
+    Arr* matches,
+    double max_mz
+  );
+  TideMatchSet(
+    Peptide* peptide,
+    double max_mz
+  );
+  
+  ~TideMatchSet();
+
+    /**
+   * Write peptide centric matches to output files
+   */
+  void report(
+    ofstream* target_file,  ///< target file to write to
+    ofstream* decoy_file, ///< decoy file to write to
+    int top_matches,
+    const ActivePeptideQueue* peptides, ///< peptide queue
+    const ProteinVec& proteins, ///< proteins corresponding with peptides
+    const vector<const pb::AuxLocation*>& locations,  ///< auxiliary locations
+    bool compute_sp ///< whether to compute sp or not
+  );
+
+  /**
+   * Write spectrum centric to output files
+   */
+  void report(
+    ofstream* target_file,  ///< target file to write to
+    ofstream* decoy_file, ///< decoy file to write to
+    int top_n,  ///< number of matches to report
+    const string& spectrum_filename, ///< name of spectrum file
+    const Spectrum* spectrum, ///< spectrum for matches
+    int charge, ///< charge for matches
+    const ActivePeptideQueue* peptides, ///< peptide queue
+    const ProteinVec& proteins, ///< proteins corresponding with peptides
+    const vector<const pb::AuxLocation*>& locations,  ///< auxiliary locations
+    bool compute_sp, ///< whether to compute sp or not
+    bool highScoreBest, //< indicates semantics of score magnitude
+    boost::mutex * rwlock
+  );
+
+  static void writeHeaders(
+    ofstream* file,
+    bool decoyFile,
+    bool sp
+  );
+
+  static void initModMap(const pb::ModTable& modTable, ModPosition position);
+
+  static string CleavageType;
+
+ protected:
+  Arr* matches_;
+  Arr2* matches2_;
+  Peptide* peptide_;  
+  double max_mz_;
+
+  // For allocation
+  static char match_collection_loc_[sizeof(MatchCollection)];
+  static char decoy_match_collection_loc_[sizeof(MatchCollection)];
+
+  static bool lessXcorrScore(const Scores& x, const Scores& y) {
+    return x.xcorr_score < y.xcorr_score;
+  }
+  
+  static bool moreXcorrScore(const Scores& x, const Scores& y) {
+    return x.xcorr_score > y.xcorr_score;
+  }
+
+  static bool lessXcorrPvalScore(const Scores& x, const Scores& y) {
+    return x.xcorr_pval < y.xcorr_pval;
+  }
+
+  static bool moreXcorrPvalScore(const Scores& x, const Scores& y) {
+    return x.xcorr_pval > y.xcorr_pval;
+  }
+
+/**
+   * Helper function for tab delimited report function for peptide centric
+   */
+  void writeToFile(
+    ofstream* file,
+    const ActivePeptideQueue* peptides,
+    const ProteinVec& proteins,
+    const vector<const pb::AuxLocation*>& locations,
+    bool compute_sp ///< whether to compute sp or not
+  );
+  
+  /**
+   * Helper function for tab delimited report function
+   */
+  void writeToFile(
+    ofstream* file,
+    int top_n,
+    const vector<Arr::iterator>& vec,
+    const string& spectrum_filename,
+    const Spectrum* spectrum,
+    int charge,
+    const ActivePeptideQueue* peptides,
+    const ProteinVec& proteins,
+    const vector<const pb::AuxLocation*>& locations,
+    const map<Arr::iterator, FLOAT_T>& delta_cn_map,
+    const map<Arr::iterator, FLOAT_T>& delta_lcn_map,
+    const map<Arr::iterator, pair<const SpScorer::SpScoreData, int> >* sp_map,
+    boost::mutex * rwlock
+  );
+
+  Crux::Peptide getCruxPeptide(const Peptide* peptide);
+  std::vector<Crux::Modification> getMods(const Peptide* peptide);
+
+  void gatherTargetsAndDecoys(
+    const ActivePeptideQueue* peptides,
+    const ProteinVec& proteins,
+    vector<Arr::iterator>& targetsOut,
+    vector<Arr::iterator>& decoysOut,
+    int top_n,
+    bool highScoreBest // indicates semantics of score magnitude
+  );
+
+  /**
+   * Create a pb peptide from Tide peptide
+   */
+  static pb::Peptide* getPbPeptide(
+    const Peptide& peptide
+  );
+
+  /**
+   * Gets the protein name with the index appended.
+   */
+  static string getProteinName(
+    const pb::Protein& protein,
+    int pos
+  );
+
+  /**
+   * Gets the flanking AAs for a Tide peptide sequence
+   */
+  static void getFlankingAAs(
+    const Peptide* peptide, ///< Tide peptide to get flanking AAs for
+    const pb::Protein* protein, ///< Tide protein for the peptide
+    int pos,  ///< location of peptide within protein
+    string* out_n,  ///< out parameter for n flank
+    string* out_c ///< out parameter for c flank
+  );
+
+  static void computeDeltaCns(
+    const vector<Arr::iterator>& vec, // xcorr*100000000.0, high to low
+    map<Arr::iterator, FLOAT_T>* delta_cn_map, // map to add delta cn scores to
+    map<Arr::iterator, FLOAT_T>* delta_lcn_map
+  );
+
+  static void computeSpData(
+    const vector<Arr::iterator>& vec,
+    map<Arr::iterator, pair<const SpScorer::SpScoreData, int> >* sp_rank_map,
+    SpScorer* sp_scorer,
+    const ActivePeptideQueue* peptides
+  );
+
+  struct spGreater {
+    inline bool operator() (const pair<Arr::iterator, SpScorer::SpScoreData>& lhs,
+                            const pair<Arr::iterator, SpScorer::SpScoreData>& rhs) {
+      return lhs.second.sp_score > rhs.second.sp_score;
+    }
+  };
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/TideSearchApplication.cpp b/src/app/TideSearchApplication.cpp
new file mode 100644
index 0000000..73325da
--- /dev/null
+++ b/src/app/TideSearchApplication.cpp
@@ -0,0 +1,1409 @@
+#include <cstdio>
+#include "app/tide/abspath.h"
+#include "app/tide/records_to_vector-inl.h"
+
+#include "io/carp.h"
+#include "parameter.h"
+#include "io/SpectrumRecordWriter.h"
+#include "TideIndexApplication.h"
+#include "TideSearchApplication.h"
+#include "ParamMedicApplication.h"
+#include "PSMConvertApplication.h"
+#include "tide/mass_constants.h"
+#include "TideMatchSet.h"
+#include "util/Params.h"
+#include "util/FileUtils.h"
+#include "util/StringUtils.h"
+
+bool TideSearchApplication::HAS_DECOYS = false;
+bool TideSearchApplication::PROTEIN_LEVEL_DECOYS = false;
+
+/* This constant is the product of the original "magic number" (10000,
+ * on line 4622 of search28.c) that was used to rescale the XCorr
+ * score, and the integerization constant used by Benjamin Diament in
+ * Tide.  In the Tide publication, that constant was reported as 10^7.
+ * However, here it appears to be only 10^4.
+ *
+ * --WSN, 10 March 2015 */
+const double TideSearchApplication::XCORR_SCALING = 100000000.0;
+
+/* This constant is used to put the refactored XCorr back into the
+ * same range as the original XCorr score.  It is the XCorr "magic
+ * number" (10000) divided by the EVIDENCE_SCALE_INT (defined in
+ * tide/spectrum_preprocess2.cc). */
+const double TideSearchApplication::RESCALE_FACTOR = 20.0;
+
+TideSearchApplication::TideSearchApplication():
+  exact_pval_search_(false), remove_index_(""), spectrum_flag_(NULL) {
+}
+
+TideSearchApplication::~TideSearchApplication() {
+  if (!remove_index_.empty()) {
+    carp(CARP_DEBUG, "Removing temp index '%s'", remove_index_.c_str());
+    FileUtils::Remove(remove_index_);
+  }
+}
+
+int TideSearchApplication::main(int argc, char** argv) {
+  return main(Params::GetStrings("tide spectra file"));
+}
+int TideSearchApplication::main(const vector<string>& input_files) {
+  return main(input_files, Params::GetString("tide database"));
+}
+
+int TideSearchApplication::main(const vector<string>& input_files, const string input_index) {
+  carp(CARP_INFO, "Running tide-search...");
+
+  // prevent different output formats from using threading
+  if (Params::GetBool("peptide-centric-search") == true) {
+    NUM_THREADS = 1;
+    carp(CARP_INFO, "Threading for peptide-centric formats are not supported yet");
+  } else {
+    NUM_THREADS = Params::GetInt("num-threads");
+  }
+  if (NUM_THREADS < 1) {
+    NUM_THREADS = boost::thread::hardware_concurrency(); // MINIMUM # = 1.
+    // (Meaning just main thread) Do not make this value below 1.
+  // make sure that number of threads are reasonable, e.g. user did not specify millions of threads...
+  } else if (NUM_THREADS > 64) {
+    carp(CARP_INFO, "Requested Threads > 64, Will not thread.");
+    NUM_THREADS = 1;    
+  }
+  carp(CARP_INFO, "Number of Threads: %d", NUM_THREADS); // prints the number of threads
+
+  const string index = input_index;
+  string peptides_file = FileUtils::Join(index, "pepix");
+  string proteins_file = FileUtils::Join(index, "protix");
+  string auxlocs_file = FileUtils::Join(index, "auxlocs");
+
+  double window = Params::GetDouble("precursor-window");
+  WINDOW_TYPE_T window_type = string_to_window_type(Params::GetString("precursor-window-type"));
+
+  // Check spectrum-charge parameter
+  string charge_string = Params::GetString("spectrum-charge");
+  int charge_to_search;
+  if (charge_string == "all") {
+    carp(CARP_DEBUG, "Searching all charge states");
+    charge_to_search = 0;
+  } else {
+    charge_to_search = atoi(charge_string.c_str());
+    if (charge_to_search < 1 || charge_to_search > 6) {
+      carp(CARP_FATAL, "Invalid spectrum-charge value %s", charge_string.c_str());
+    }
+    carp(CARP_DEBUG, "Searching charge state %d", charge_to_search);
+  }
+
+  // Check scan-number parameter
+  string scan_range = Params::GetString("scan-number");
+  int min_scan, max_scan;
+  if (scan_range.empty()) {
+    min_scan = 0;
+    max_scan = BILLION;
+    carp(CARP_DEBUG, "Searching all scans");
+  } else if (scan_range.find('-') == string::npos) {
+    // Single scan
+    min_scan = max_scan = atoi(scan_range.c_str());
+    carp(CARP_DEBUG, "Searching single scan %d", min_scan);
+  } else {
+    if (!get_range_from_string(scan_range.c_str(), min_scan, max_scan)) {
+      carp(CARP_FATAL, "The scan number range '%s' is invalid. "
+           "Must be of the form <first>-<last>", scan_range.c_str());
+    } else {
+      if (min_scan > max_scan) {
+        int tmp_scan = min_scan;
+        min_scan = max_scan;
+        max_scan = tmp_scan;
+        carp(CARP_DEBUG, "Switched scan range min and max");
+      }
+      carp(CARP_DEBUG, "Searching scan range %d-%d", min_scan, max_scan);
+    }
+  }
+  //check to compute exact p-value 
+  exact_pval_search_ = Params::GetBool("exact-p-value");
+  bin_width_  = Params::GetDouble("mz-bin-width");
+  bin_offset_ = Params::GetDouble("mz-bin-offset");
+  // for now don't allow XCorr p-value searches with variable bin width
+  if (exact_pval_search_ && !Params::IsDefault("mz-bin-width")) {
+    carp(CARP_FATAL, "Tide-search with XCorr p-values and variable bin width "
+                     "is not allowed in this version of Crux.");
+  }
+
+  // Check concat parameter
+  bool concat = Params::GetBool("concat");
+
+  // Check compute-sp parameter
+  bool compute_sp = Params::GetBool("compute-sp");
+  if (Params::GetBool("sqt-output") && !compute_sp) {
+    compute_sp = true;
+    carp(CARP_INFO, "Enabling parameter compute-sp since SQT output is enabled "
+                    "(this will increase runtime).");
+  }
+
+  // Check isotope-error parameter
+  string isotope_errors_string = Params::GetString("isotope-error");
+  if (isotope_errors_string[0] == ',') {
+    carp(CARP_FATAL, "Error in isotope_error parameter formatting: (%s)", isotope_errors_string.c_str());
+  }
+  for (int i = 0; isotope_errors_string[i] != '\0'; ++i) {
+    if (isotope_errors_string[i] == ',' && (isotope_errors_string[i+1] == ',' || isotope_errors_string[i+1] == '\0')) {
+      carp(CARP_FATAL, "Error in isotope_error parameter formatting: (%s) ", isotope_errors_string.c_str());
+    }
+  }
+  
+  vector<int>* negative_isotope_errors = new vector<int>();
+  negative_isotope_errors->push_back(0);
+  
+  if (isotope_errors_string != "") {
+    vector<int> isotope_errors = StringUtils::Split<int>(Params::GetString("isotope-error"), ',');
+    for (vector<int>::iterator it = isotope_errors.begin(); it != isotope_errors.end(); ++it) {
+      if (*it < 0) {
+        carp(CARP_FATAL, "Found a negative isotope error: %d. There should not be any legitimate reasons to use negative isotope errors. Try modeling with a modification instead.", *it);
+      } else if (find(negative_isotope_errors->begin(), negative_isotope_errors->end(), -1 * *it) != negative_isotope_errors->end()) {
+        carp(CARP_FATAL, "Found duplicate when parsing isotope_error parameter: %d", *it);
+      }
+      negative_isotope_errors->push_back(-1 * *it);
+    }
+  }
+  
+  sort(negative_isotope_errors->begin(), negative_isotope_errors->end());
+  
+  carp(CARP_INFO, "Reading index %s", index.c_str());
+  // Read proteins index file
+  ProteinVec proteins;
+  pb::Header protein_header;
+  if (!ReadRecordsToVector<pb::Protein, const pb::Protein>(&proteins,
+      proteins_file, &protein_header)) {
+    carp(CARP_FATAL, "Error reading index (%s)", proteins_file.c_str());
+  }
+  carp(CARP_DEBUG, "Read %d proteins", proteins.size());
+
+  //open a copy of peptide buffer for Amino Acid Frequency (AAF) calculation.
+  double* aaFreqN = NULL;
+  double* aaFreqI = NULL;
+  double* aaFreqC = NULL;
+  int* aaMass = NULL;
+  int nAA = 0;
+  
+  if (exact_pval_search_) {
+    pb::Header aaf_peptides_header;
+    HeadedRecordReader aaf_peptide_reader(peptides_file, &aaf_peptides_header);
+
+    if ((aaf_peptides_header.file_type() != pb::Header::PEPTIDES) ||
+        !aaf_peptides_header.has_peptides_header()) {
+      carp(CARP_FATAL, "Error reading index (%s)", peptides_file.c_str());
+    }
+    MassConstants::Init(&aaf_peptides_header.peptides_header().mods(), 
+      &aaf_peptides_header.peptides_header().nterm_mods(), 
+      &aaf_peptides_header.peptides_header().cterm_mods(),
+                        bin_width_, bin_offset_);
+    ActivePeptideQueue* active_peptide_queue =
+      new ActivePeptideQueue(aaf_peptide_reader.Reader(), proteins);
+    nAA = active_peptide_queue->CountAAFrequency(bin_width_, bin_offset_,
+                                                 &aaFreqN, &aaFreqI, &aaFreqC, &aaMass);
+    delete active_peptide_queue;
+  } // End calculation AA frequencies
+
+  // Read auxlocs index file
+  vector<const pb::AuxLocation*> locations;
+  if (!ReadRecordsToVector<pb::AuxLocation>(&locations, auxlocs_file)) {
+    carp(CARP_FATAL, "Error reading index (%s)", auxlocs_file.c_str());
+  }
+  carp(CARP_DEBUG, "Read %d auxlocs", locations.size());
+
+  // Read peptides index file
+  pb::Header peptides_header;
+
+  vector<HeadedRecordReader*> peptide_reader;
+  for (int i = 0; i < NUM_THREADS; i++) {
+    peptide_reader.push_back(new HeadedRecordReader(peptides_file, &peptides_header));
+  }
+
+  if ((peptides_header.file_type() != pb::Header::PEPTIDES) ||
+      !peptides_header.has_peptides_header()) {
+    carp(CARP_FATAL, "Error reading index (%s)", peptides_file.c_str());
+  }
+  
+  const pb::Header::PeptidesHeader& pepHeader = peptides_header.peptides_header();
+  DECOY_TYPE_T headerDecoyType = (DECOY_TYPE_T)pepHeader.decoys();
+  if (headerDecoyType != NO_DECOYS) {
+    HAS_DECOYS = true;
+    if (headerDecoyType == PROTEIN_REVERSE_DECOYS) {
+      PROTEIN_LEVEL_DECOYS = true;
+    }
+  }
+
+  MassConstants::Init(&pepHeader.mods(), &pepHeader.nterm_mods(), 
+    &pepHeader.cterm_mods(), bin_width_, bin_offset_);
+  ModificationDefinition::ClearAll();
+  TideMatchSet::initModMap(pepHeader.mods(), ANY);
+  TideMatchSet::initModMap(pepHeader.nterm_mods(), PEPTIDE_N);
+  TideMatchSet::initModMap(pepHeader.cterm_mods(), PEPTIDE_C);
+
+  ofstream* target_file = NULL;
+  ofstream* decoy_file = NULL;
+
+  carp(CARP_DEBUG, "Using TideMatchSet to write matches");
+  bool overwrite = Params::GetBool("overwrite");
+  stringstream ss;
+  ss << Params::GetString("enzyme") << '-' << Params::GetString("digestion");
+  TideMatchSet::CleavageType = ss.str();
+  if (!concat) {
+    string target_file_name = make_file_path("tide-search.target.txt");
+    target_file = create_stream_in_path(target_file_name.c_str(), NULL, overwrite);
+    output_file_name_ = target_file_name;
+    if (HAS_DECOYS) {
+      string decoy_file_name = make_file_path("tide-search.decoy.txt");
+      decoy_file = create_stream_in_path(decoy_file_name.c_str(), NULL, overwrite);
+    }
+  } else {
+    string concat_file_name = make_file_path("tide-search.txt");
+    target_file = create_stream_in_path(concat_file_name.c_str(), NULL, overwrite);
+    output_file_name_ = concat_file_name;
+  }
+
+  if (target_file) {
+    TideMatchSet::writeHeaders(target_file, false, compute_sp);
+    TideMatchSet::writeHeaders(decoy_file, true, compute_sp);
+  }
+
+  // Try to read all spectrum files as spectrumrecords, convert those that fail
+  vector<InputFile> input_sr;
+  for (vector<string>::const_iterator f = input_files.begin(); f != input_files.end(); f++) {
+    SpectrumCollection spectra;
+    pb::Header spectrum_header;
+    string spectrumrecords = *f;
+    bool keepSpectrumrecords = true;
+    if (!spectra.ReadSpectrumRecords(spectrumrecords, &spectrum_header)) {
+      // Failed, try converting to spectrumrecords file
+      carp(CARP_INFO, "Converting %s to spectrumrecords format", f->c_str());
+      carp(CARP_INFO, "Elapsed time starting conversion: %.3g s", wall_clock() / 1e6);
+      spectrumrecords = Params::GetString("store-spectra");
+      keepSpectrumrecords = !spectrumrecords.empty();
+      if (!keepSpectrumrecords) {
+        spectrumrecords = make_file_path(FileUtils::BaseName(*f) + ".spectrumrecords.tmp");
+      } else if (input_files.size() > 1) {
+        carp(CARP_FATAL, "Cannot use store-spectra option with multiple input "
+                         "spectrum files");
+      }
+      carp(CARP_DEBUG, "New spectrumrecords filename: %s", spectrumrecords.c_str());
+      if (!SpectrumRecordWriter::convert(*f, spectrumrecords)) {
+        carp(CARP_FATAL, "Error converting %s to spectrumrecords format", f->c_str());
+      }
+      carp(CARP_DEBUG, "Reading converted spectra file %s", spectrumrecords.c_str());
+      // Re-read converted file as spectrumrecords file
+      if (!spectra.ReadSpectrumRecords(spectrumrecords, &spectrum_header)) {
+        carp(CARP_DEBUG, "Deleting %s", spectrumrecords.c_str());
+        remove(spectrumrecords.c_str());
+        carp(CARP_FATAL, "Error reading spectra file %s", spectrumrecords.c_str());
+      }
+    }
+    input_sr.push_back(InputFile(*f, spectrumrecords, keepSpectrumrecords));
+  }
+
+  // Loop through spectrum files
+  for (vector<InputFile>::const_iterator f = input_sr.begin();
+       f != input_sr.end();
+       f++) {
+
+    if (!peptide_reader[0]) {
+      for (int i = 0; i < NUM_THREADS; i++) {
+        peptide_reader[i] = new HeadedRecordReader(peptides_file, &peptides_header);
+      }
+    }
+
+    vector<ActivePeptideQueue*> active_peptide_queue;
+    for (int i = 0; i < NUM_THREADS; i++) {
+      active_peptide_queue.push_back(new ActivePeptideQueue(peptide_reader[i]->Reader(), proteins));
+      active_peptide_queue[i]->SetBinSize(bin_width_, bin_offset_);
+    }
+
+    string spectra_file = f->SpectrumRecords;
+    carp(CARP_INFO, "Reading spectra file %s", spectra_file.c_str());
+    // Try to read file as spectrumrecords file
+    SpectrumCollection spectra;
+    pb::Header spectrum_header;
+    if (!spectra.ReadSpectrumRecords(spectra_file, &spectrum_header)) {
+      // This should never happen since we would have failed earlier
+      carp(CARP_FATAL, "Error reading spectra file %s", spectra_file.c_str());
+    }
+
+    carp(CARP_INFO, "Sorting spectra");
+    if (window_type != WINDOW_MZ) {
+      spectra.Sort();
+    } else {
+      spectra.Sort<ScSortByMz>(ScSortByMz(window));
+    }
+
+    double highest_mz = spectra.FindHighestMZ();
+    unsigned int spectrum_num = spectra.SpecCharges()->size();
+    if (spectrum_num > 0 && exact_pval_search_) {
+      highest_mz = spectra.SpecCharges()->at(spectrum_num - 1).neutral_mass;
+    }
+    carp(CARP_DEBUG, "Max m/z %f", highest_mz);
+    MaxBin::SetGlobalMax(highest_mz);
+    // Do the search
+    carp(CARP_INFO, "Running search");
+    if (spectrum_flag_ == NULL) {
+      resetMods();
+    }
+    search(f->OriginalName, spectra.SpecCharges(), active_peptide_queue, proteins,
+           locations, window, window_type, Params::GetDouble("spectrum-min-mz"),
+           Params::GetDouble("spectrum-max-mz"), min_scan, max_scan,
+           Params::GetInt("min-peaks"), charge_to_search,
+           Params::GetInt("top-match"), spectra.FindHighestMZ(),
+           target_file, decoy_file, compute_sp,
+           nAA, aaFreqN, aaFreqI, aaFreqC, aaMass, negative_isotope_errors);
+
+    PSMConvertApplication converter;
+    
+    // convert tab delimited to other file formats.
+    if (!concat) {
+      string target_file_name = make_file_path("tide-search.target.txt");
+      if (Params::GetBool("pin-output")) {
+        converter.convertFile("tsv", "pin", target_file_name, "tide-search.target.", Params::GetString("protein-database"), true);
+      }
+      if (Params::GetBool("pepxml-output")) {
+        converter.convertFile("tsv", "pepxml", target_file_name, "tide-search.target.", Params::GetString("protein-database"), true);
+      }
+      if (Params::GetBool("mzid-output")) {
+        converter.convertFile("tsv", "mzidentml", target_file_name, "tide-search.target.", Params::GetString("protein-database"), true);
+      }
+      if (Params::GetBool("sqt-output")) {
+        converter.convertFile("tsv", "sqt", target_file_name, "tide-search.target.", Params::GetString("protein-database"), true);
+      }
+
+      if (HAS_DECOYS) {
+        string decoy_file_name = make_file_path("tide-search.decoy.txt");
+        if (Params::GetBool("pin-output")) {
+          converter.convertFile("tsv", "pin", decoy_file_name, "tide-search.decoy.", Params::GetString("protein-database"), true);
+        }
+        if (Params::GetBool("pepxml-output")) {
+          converter.convertFile("tsv", "pepxml", decoy_file_name, "tide-search.decoy.", Params::GetString("protein-database"), true);
+        }
+        if (Params::GetBool("mzid-output")) {
+          converter.convertFile("tsv", "mzidentml", decoy_file_name, "tide-search.decoy.", Params::GetString("protein-database"), true);
+        }
+        if (Params::GetBool("sqt-output")) {
+          converter.convertFile("tsv", "sqt", decoy_file_name, "tide-search.decoy.", Params::GetString("protein-database"), true);
+        }
+      }
+    } else {
+      string concat_file_name = make_file_path("tide-search.txt");
+      if (Params::GetBool("pin-output")) {
+        converter.convertFile("tsv", "pin", concat_file_name, "tide-search.", Params::GetString("protein-database"), true);
+      }
+      if (Params::GetBool("pepxml-output")) {
+        converter.convertFile("tsv", "pepxml", concat_file_name, "tide-search.", Params::GetString("protein-database"), true);
+      }
+      if (Params::GetBool("mzid-output")) {
+        converter.convertFile("tsv", "mzidentml", concat_file_name, "tide-search.", Params::GetString("protein-database"), true);
+      }
+      if (Params::GetBool("sqt-output")) {
+        converter.convertFile("tsv", "sqt", concat_file_name, "tide-search.", Params::GetString("protein-database"), true);
+      }
+    }
+    
+    // Delete temporary spectrumrecords file
+    if (!f->Keep) {
+      carp(CARP_DEBUG, "Deleting %s", spectra_file.c_str());
+      remove(spectra_file.c_str());
+    }
+
+    // Clean up
+    for (int i = 0; i < NUM_THREADS; i++) {
+      delete active_peptide_queue[i];
+      delete peptide_reader[i];
+      peptide_reader[i] = NULL;
+    }
+
+  } // End of spectrum file loop
+
+  delete negative_isotope_errors;
+  
+  for (ProteinVec::iterator i = proteins.begin(); i != proteins.end(); ++i) {
+    delete *i;
+  }
+  if (target_file) {
+    delete target_file;
+    if (decoy_file) {
+      delete decoy_file;
+    }
+  }
+  delete[] aaFreqN;
+  delete[] aaFreqI;
+  delete[] aaFreqC;
+  delete[] aaMass;
+
+  return 0;
+}
+
+void TideSearchApplication::search(void* threadarg) {
+  struct thread_data *my_data = (struct thread_data *) threadarg;
+
+  const string& spectrum_filename = my_data->spectrum_filename;
+  const vector<SpectrumCollection::SpecCharge>* spec_charges = my_data->spec_charges;
+  ActivePeptideQueue* active_peptide_queue = my_data->active_peptide_queue;
+  ProteinVec& proteins = my_data->proteins;
+  vector<const pb::AuxLocation*>& locations = my_data->locations;
+  double precursor_window = my_data->precursor_window;
+  WINDOW_TYPE_T window_type = my_data->window_type;
+  double spectrum_min_mz = my_data->spectrum_min_mz;
+  double spectrum_max_mz = my_data->spectrum_max_mz;
+  int min_scan = my_data->min_scan;
+  int max_scan = my_data->max_scan;
+  int min_peaks = my_data->min_peaks;
+  int search_charge = my_data->search_charge;
+  int top_matches = my_data->top_matches;
+  double highest_mz = my_data->highest_mz;
+  ofstream* target_file = my_data -> target_file;
+  ofstream* decoy_file = my_data->decoy_file;
+  bool compute_sp = my_data->compute_sp;
+  int64_t thread_num = my_data->thread_num;
+  int64_t num_threads = my_data->num_threads;
+  int nAA = my_data->nAA;
+  double* aaFreqN = my_data->aaFreqN;
+  double* aaFreqI = my_data->aaFreqI;
+  double* aaFreqC = my_data->aaFreqC;
+  int* aaMass = my_data->aaMass;
+  vector<boost::mutex*> locks_array = my_data->locks_array;
+  vector<int>* negative_isotope_errors = my_data->negative_isotope_errors;
+
+  double bin_width = my_data->bin_width;
+  double bin_offset = my_data->bin_offset;
+  bool exact_pval_search = my_data->exact_pval_search;
+  map<pair<string, unsigned int>, bool>* spectrum_flag = my_data->spectrum_flag;
+
+  int* sc_index = my_data->sc_index;
+  int* total_candidate_peptides = my_data->total_candidate_peptides;
+
+  // params
+  bool peptide_centric = Params::GetBool("peptide-centric-search");
+  bool use_neutral_loss_peaks = Params::GetBool("use-neutral-loss-peaks");
+  bool use_flanking_peaks = Params::GetBool("use-flanking-peaks");
+  int max_charge = Params::GetInt("max-precursor-charge");
+
+  // This is the main search loop.
+  ObservedPeakSet observed(bin_width, bin_offset,
+                           use_neutral_loss_peaks,
+                           use_flanking_peaks);    
+
+  // cycle through spectrum-charge pairs, sorted by neutral mass
+  FLOAT_T sc_total = (FLOAT_T)spec_charges->size();
+  int print_interval = Params::GetInt("print-search-progress");
+
+  for (vector<SpectrumCollection::SpecCharge>::const_iterator sc = spec_charges->begin()+thread_num;
+       sc < spec_charges->begin() + (spec_charges->size());
+       sc = sc + num_threads) {
+    
+    locks_array[3]->lock();
+    ++(*sc_index);
+    if (print_interval > 0 && *sc_index % print_interval == 0) {
+      carp(CARP_INFO, "%d spectrum-charge combinations searched, %.0f%% complete",
+           *sc_index, *sc_index / sc_total * 100);
+    }
+    locks_array[3]->unlock();
+
+    Spectrum* spectrum = sc->spectrum;
+    double precursor_mz = spectrum->PrecursorMZ();
+    int charge = sc->charge;
+    int scan_num = spectrum->SpectrumNumber();
+    if (spectrum_flag != NULL) {
+      locks_array[1]->lock();
+      map<pair<string, unsigned int>, bool>::iterator spectrum_id;
+      spectrum_id = spectrum_flag->find(pair<string, unsigned int>(
+        spectrum_filename, scan_num * 10 + charge));
+      if (spectrum_id != spectrum_flag->end()) {
+        locks_array[1]->unlock();
+        continue;
+      }
+      locks_array[1]->unlock();
+    }
+
+    if (precursor_mz < spectrum_min_mz || precursor_mz > spectrum_max_mz ||
+        scan_num < min_scan || scan_num > max_scan ||
+        spectrum->Size() < min_peaks ||
+        (search_charge != 0 && charge != search_charge) || charge > max_charge) {
+      continue;
+    }
+
+    // The active peptide queue holds the candidate peptides for spectrum.
+    // Calculate and set the window, depending on the window type.
+    vector<double>* min_mass = new vector<double>();
+    vector<double>* max_mass = new vector<double>();
+    vector<bool>* candidatePeptideStatus = new vector<bool>();
+    double min_range, max_range;
+    computeWindow(*sc, window_type, precursor_window, max_charge, negative_isotope_errors, min_mass, max_mass, &min_range, &max_range);
+    if (!exact_pval_search) {  //execute original tide-search program
+
+      // Normalize the observed spectrum and compute the cache of
+      // frequently-needed values for taking dot products with theoretical
+      // spectra.
+      observed.PreprocessSpectrum(*spectrum, charge);
+      int nCandPeptide = active_peptide_queue->SetActiveRange(min_mass, max_mass, min_range, max_range, candidatePeptideStatus);
+      if (nCandPeptide == 0) {
+        continue;
+      }
+      locks_array[2]->lock();
+      (*total_candidate_peptides) += nCandPeptide;
+      locks_array[2]->unlock();
+
+      int candidatePeptideStatusSize = candidatePeptideStatus->size();
+      TideMatchSet::Arr2 match_arr2(candidatePeptideStatusSize); // Scored peptides will go here.
+
+      // Programs for taking the dot-product with the observed spectrum are laid
+      // out in memory managed by the active_peptide_queue, one program for each
+      // candidate peptide. The programs will store the results directly into
+      // match_arr. We now pass control to those programs.
+      collectScoresCompiled(active_peptide_queue, spectrum, observed, &match_arr2,
+                            candidatePeptideStatusSize, charge);
+
+      // matches will arrange the results in a heap by score, return the top
+      // few, and recover the association between counter and peptide. We output
+      // the top matches.
+      if (peptide_centric) {
+          deque<Peptide*>::const_iterator iter_ = active_peptide_queue->iter_;
+          TideMatchSet::Arr2::iterator it = match_arr2.begin();
+          for (; it != match_arr2.end(); ++iter_, ++it) {
+            int peptide_idx = candidatePeptideStatusSize - (it->second);
+            if ((*candidatePeptideStatus)[peptide_idx]) {
+              (*iter_)->AddHit(spectrum, it->first,0.0,it->second,charge);
+            }
+          }
+      } else {  //spectrum centric match report.
+        TideMatchSet::Arr match_arr(nCandPeptide); 
+        for (TideMatchSet::Arr2::iterator it = match_arr2.begin();
+             it != match_arr2.end();
+             ++it) {
+          int peptide_idx = candidatePeptideStatusSize - (it->second);
+          if ((*candidatePeptideStatus)[peptide_idx]) {
+            TideMatchSet::Scores curScore;
+            curScore.xcorr_score = (double)(it->first / XCORR_SCALING);
+            curScore.rank = it->second;
+            match_arr.push_back(curScore);
+          }
+        }
+
+        TideMatchSet matches(&match_arr, highest_mz);
+        matches.exact_pval_search_ = exact_pval_search;
+
+        matches.report(target_file, decoy_file, top_matches, spectrum_filename,
+                         spectrum, charge, active_peptide_queue, proteins,
+                         locations, compute_sp, true, locks_array[0]);
+      }  //end peptide_centric == true
+    } else {  // execute exact-pval-search
+
+      const int minDeltaMass = aaMass[0];
+      const int maxDeltaMass = aaMass[nAA - 1];
+
+      int maxPrecurMass = floor(MaxBin::Global().CacheBinEnd() + 50.0); // TODO works, but is this the best way to get?
+      int nCandPeptide = active_peptide_queue->SetActiveRangeBIons(min_mass, max_mass, min_range, max_range, candidatePeptideStatus);
+      int candidatePeptideStatusSize = candidatePeptideStatus->size();
+      locks_array[2]->lock();
+      (*total_candidate_peptides) += nCandPeptide;
+      locks_array[2]->unlock();
+
+      TideMatchSet::Arr match_arr(nCandPeptide); //scored peptides will go here
+  
+      // iterators needed at multiple places in following code
+      deque<Peptide*>::const_iterator iter_ = active_peptide_queue->iter_;
+      deque<TheoreticalPeakSetBIons>::const_iterator iter1_ = active_peptide_queue->iter1_;
+      vector<int>::const_iterator iter_int;
+      vector<unsigned int>::const_iterator iter_uint;
+
+      //************************************************************************
+      /* For one observed spectrum, calculates:
+       *  - vector of cleavage evidence
+       *  - score count vectors for a range of integer masses
+       *  - p-values of XCorr match scores between spectrum and all selected candidate target and decoy peptides
+       * Written by Jeff Howbert, October, 2013.
+       * Ported to and integrated with Tide by Jeff Howbert, November, 2013.
+       */
+      int peidx;
+      int pe;
+      int ma;
+      int pepMaInt;
+      int* pepMassInt = new int[nCandPeptide];
+      vector<int> pepMassIntUnique;
+      pepMassIntUnique.reserve(nCandPeptide);
+      
+      peidx = 0;
+      pe = 0;
+      for (iter_ = active_peptide_queue->iter_;
+           iter_ != active_peptide_queue->end_;
+           ++iter_) {
+        if ((*candidatePeptideStatus)[peidx]) {
+          double pepMass = (*iter_)->Mass();
+          pepMaInt = MassConstants::mass2bin(pepMass);
+          pepMassInt[pe] = pepMaInt;
+          pepMassIntUnique.push_back(pepMaInt);
+          pe++;
+        }
+        peidx++;
+      }
+      std::sort(pepMassIntUnique.begin(), pepMassIntUnique.end());
+      vector<int>::iterator last = std::unique(pepMassIntUnique.begin(),
+                                               pepMassIntUnique.end());
+      pepMassIntUnique.erase(last, pepMassIntUnique.end());
+      int nPepMassIntUniq = (int)pepMassIntUnique.size();
+
+      int** evidenceObs = new int*[nPepMassIntUniq];
+      int* scoreOffsetObs = new int[nPepMassIntUniq];
+      double** pValueScoreObs = new double*[nPepMassIntUniq];
+      int* intensArrayTheor = new int[maxPrecurMass]; // initialized later in loop
+      for (pe = 0; pe < nPepMassIntUniq; pe++) { // TODO should probably instead use iterator over pepMassIntUnique
+        evidenceObs[pe] = new int[maxPrecurMass];
+        for (ma = 0; ma < maxPrecurMass; ma++) {
+          evidenceObs[pe][ma] = 0;
+        }
+        scoreOffsetObs[pe] = 0;
+        pepMaInt = pepMassIntUnique[pe]; // TODO should be accessed with an iterator
+        // preprocess to create one integerized evidence vector for each cluster of masses among selected peptides
+        double pepMassMonoMean = (pepMaInt - 0.5 + bin_offset) * bin_width;
+        observed.CreateEvidenceVector(*spectrum, bin_width, bin_offset, charge,
+                                      pepMassMonoMean, maxPrecurMass, evidenceObs[pe]);
+        // NOTE: will have to go back to separate dynamic programming for
+        //       target and decoy if they have different probNI and probC
+        int maxEvidence = *std::max_element(evidenceObs[pe], evidenceObs[pe] + maxPrecurMass);
+        int minEvidence = *std::min_element(evidenceObs[pe], evidenceObs[pe] + maxPrecurMass);
+        // estimate maxScore and minScore
+        int maxNResidue = (int)floor((double)pepMaInt / (double)minDeltaMass);
+        vector<int> sortEvidenceObs (evidenceObs[pe], evidenceObs[pe] + maxPrecurMass);
+        std::sort(sortEvidenceObs.begin(), sortEvidenceObs.end(), greater<int>());
+        int maxScore = 0;
+        int minScore = 0;
+        for (int sc = 0; sc < maxNResidue; sc++) {
+          maxScore += sortEvidenceObs[sc];
+        }
+        for (int sc = maxPrecurMass - maxNResidue; sc < maxPrecurMass; sc++) {
+          minScore += sortEvidenceObs[sc];
+        }
+        int bottomRowBuffer = maxEvidence + 1;
+        int topRowBuffer = -minEvidence;
+        int nRowDynProg = bottomRowBuffer - minScore + 1 + maxScore + topRowBuffer;
+        pValueScoreObs[pe] = new double[nRowDynProg];
+
+        scoreOffsetObs[pe] = calcScoreCount(maxPrecurMass, evidenceObs[pe], pepMaInt,
+                                            maxEvidence, minEvidence, maxScore, minScore, 
+                                            nAA, aaFreqN, aaFreqI, aaFreqC, aaMass,
+                                            pValueScoreObs[pe]);
+      }
+
+      // ***** calculate p-values for peptide-spectrum matches ***********************************
+      iter_ = active_peptide_queue -> iter_;
+      iter1_ = active_peptide_queue -> iter1_;
+      pe = 0;
+      for (peidx = 0; peidx < candidatePeptideStatusSize; peidx++) { // TODO should probably use iterator instead
+        if ((*candidatePeptideStatus)[peidx]) {
+          int pepMassIntIdx = 0;
+          for (ma = 0; ma < nPepMassIntUniq; ma++) { // TODO should probably use iterator instead
+            if (pepMassIntUnique[ma] == pepMassInt[pe]) { // TODO pepMassIntUnique should be accessed with an iterator
+              pepMassIntIdx = ma;
+              break;
+            }
+          }
+          // score XCorr for target peptide with integerized evidenceObs array
+          for (ma = 0; ma < maxPrecurMass; ma++) {
+            intensArrayTheor[ma] = 0;
+          }
+          for (iter_uint = iter1_->unordered_peak_list_.begin();
+               iter_uint != iter1_->unordered_peak_list_.end();
+               iter_uint++) {
+            intensArrayTheor[*iter_uint] = 1;
+          }
+
+          int scoreRefactInt = 0;
+          for (ma = 0; ma < maxPrecurMass; ma++) {
+            scoreRefactInt += evidenceObs[pepMassIntIdx][ma] * intensArrayTheor[ma];
+          }
+          int scoreCountIdx = scoreRefactInt + scoreOffsetObs[pepMassIntIdx];
+          double pValue = pValueScoreObs[pepMassIntIdx][scoreCountIdx];
+          if (peptide_centric) {
+              (*iter_)->AddHit(spectrum, pValue, (double)scoreRefactInt, candidatePeptideStatusSize - peidx, charge);
+          } else {
+            TideMatchSet::Scores curScores;
+            curScores.xcorr_pval = pValue;
+            curScores.xcorr_score = (double)scoreRefactInt / RESCALE_FACTOR;
+            curScores.rank = candidatePeptideStatusSize - peidx; // TODO ugly hack to conform with the way these indices are generated in standard tide-search
+            match_arr.push_back(curScores);
+          }
+          ++pe;
+        }
+
+        // move to next peptide and b ion queue
+        ++iter_; // TODO need to add test to make sure haven't gone past available peptides
+        ++iter1_; // TODO need to add test to make sure haven't gone past available b ion queues
+      }
+      // clean up
+      delete [] pepMassInt;
+      delete [] scoreOffsetObs;
+      for (pe = 0; pe < nPepMassIntUniq; pe++) {
+        delete [] evidenceObs[pe];
+        delete [] pValueScoreObs[pe];
+      }
+      delete [] evidenceObs;
+      delete [] pValueScoreObs;
+      delete [] intensArrayTheor;
+      if (!peptide_centric) {
+        // matches will arrange the results in a heap by score, return the top
+        // few, and recover the association between counter and peptide. We output
+        // the top matches.
+        TideMatchSet matches(&match_arr, highest_mz);
+        matches.exact_pval_search_ = exact_pval_search;
+
+        matches.report(target_file, decoy_file, top_matches, spectrum_filename,
+                       spectrum, charge, active_peptide_queue, proteins,
+                       locations, compute_sp, false, locks_array[0]);
+        
+      } // end peptide_centric == true
+    } // end exact-pval-search
+    delete min_mass;
+    delete max_mass;
+    delete candidatePeptideStatus;
+  }
+}
+
+void TideSearchApplication::search(
+  const string& spectrum_filename,
+  const vector<SpectrumCollection::SpecCharge>* spec_charges,
+  vector<ActivePeptideQueue*> active_peptide_queue,
+  ProteinVec& proteins,
+  vector<const pb::AuxLocation*>& locations,
+  double precursor_window,
+  WINDOW_TYPE_T window_type,
+  double spectrum_min_mz,
+  double spectrum_max_mz,
+  int min_scan,
+  int max_scan,
+  int min_peaks,
+  int search_charge,
+  int top_matches,
+  double highest_mz,
+  ofstream* target_file,
+  ofstream* decoy_file,
+  bool compute_sp,
+  int nAA, 
+  double* aaFreqN,
+  double* aaFreqI,
+  double* aaFreqC,
+  int* aaMass,
+  vector<int>* negative_isotope_errors
+) {
+  // Create an array of 4 locks.
+  // Lock #0: Results file output
+  // Lock #1: Only used by cascade-search on spectrum_flag (map)
+  // Lock #2: Updating # of candidate peptides
+  // Lock #3: Updating sc_index and reporting progress
+  int num_locks = 4;
+  vector<boost::mutex *> locks_array;
+
+  for (int i = 0; i < num_locks; i++) {
+    locks_array.push_back(new boost::mutex());
+  }
+
+  int elution_window = Params::GetInt("elution-window-size");
+  bool peptide_centric = Params::GetBool("peptide-centric-search");
+
+  // initialize fields required for output
+  int* sc_index = new int(-1);
+  int* total_candidate_peptides = new int(0);
+  FLOAT_T sc_total = (FLOAT_T)spec_charges->size();
+
+  if (peptide_centric == false) {
+    elution_window = 0;
+  }
+
+  for (int i = 0; i < NUM_THREADS; i++) {
+    active_peptide_queue[i]->setElutionWindow(elution_window);
+    active_peptide_queue[i]->setPeptideCentric(peptide_centric);
+  }
+
+  if (elution_window > 0 && elution_window % 2 == 0) {
+    for (int i = 0; i < NUM_THREADS; i++) {
+      active_peptide_queue[i]->setElutionWindow(elution_window+1);
+    }
+  }
+  
+  if (!peptide_centric || !exact_pval_search_) {
+    for (int i = 0; i < NUM_THREADS; i++) {
+      active_peptide_queue[i]->setElutionWindow(0);
+    }
+  }
+
+  for (int i = 0; i < NUM_THREADS; i++) {
+    active_peptide_queue[i]->SetOutputs(NULL, &locations, top_matches, compute_sp, target_file, decoy_file, highest_mz);
+  }
+
+  // Creating structs to hold information required for each thread to search through
+  // a spec charge
+
+  vector<thread_data> thread_data_array;
+  for (int i= 0; i < NUM_THREADS; i++) {
+      thread_data_array.push_back(thread_data(spectrum_filename, spec_charges, active_peptide_queue[i],
+      proteins, locations, precursor_window, window_type, spectrum_min_mz,
+      spectrum_max_mz, min_scan, max_scan, min_peaks, search_charge, top_matches,
+      highest_mz, target_file, decoy_file, compute_sp,
+      i, NUM_THREADS, nAA, aaFreqN, aaFreqI, aaFreqC, aaMass, locks_array, 
+      bin_width_, bin_offset_, exact_pval_search_, spectrum_flag_, sc_index, total_candidate_peptides, negative_isotope_errors));
+  }
+
+  boost::thread_group threadgroup;
+
+  // Launch threads
+  for (int64_t t = 1; t < NUM_THREADS; t++) {
+    boost::thread * currthread = new boost::thread(boost::bind(&TideSearchApplication::search, this, (void *) &(thread_data_array[t])));
+    threadgroup.add_thread(currthread);
+  }
+
+  // Searches through part of the spec charge vector while waiting for threads are busy
+  search( (void *) &(thread_data_array[0]) );
+
+  // Join threads
+  threadgroup.join_all();
+
+  carp(CARP_INFO, "Time per spectrum-charge combination: %lf s.", wall_clock() / (1e6*sc_total));
+  carp(CARP_INFO, "Average number of candidates per spectrum-charge combination: %lf ",
+                  (*total_candidate_peptides) / sc_total);
+  for (int i = 0; i < num_locks; i++) {
+    delete locks_array[i];
+  }
+  delete sc_index;
+  delete total_candidate_peptides;
+
+}
+
+void TideSearchApplication::collectScoresCompiled(
+  ActivePeptideQueue* active_peptide_queue,
+  const Spectrum* spectrum,
+  const ObservedPeakSet& observed,
+  TideMatchSet::Arr2* match_arr,
+  int queue_size,
+  int charge
+) {
+  if (!active_peptide_queue->HasNext()) {
+    return;
+  }
+  // prog gets the address of the dot-product program for the first peptide
+  // in the active queue.
+  const void* prog = active_peptide_queue->NextPeptide()->Prog(charge);
+  const int* cache = observed.GetCache();
+  // results will get (score, counter) pairs, where score is the dot product
+  // of the observed peak set with a candidate peptide. The candidate
+  // peptide is given by counter, which refers to the index within the
+  // ActivePeptideQueue, counting from the back. This complication
+  // simplifies the generated programs, which now simply dump the counter.
+  pair<int, int>* results = match_arr->data();
+
+  // See compiler.h for a description of the programs beginning at prog and
+  // how they are generated. Here we initialize certain registers to the
+  // values expected by the programs and call the first one (*prog).
+  //
+  // See gnu assembler format for more on this format. We tell the compiler
+  // to set these registers:
+  // edx/rdx points to the cache.
+  // eax/rax points to the first program.
+  // ecx/rcx is the counter and gets the size of the active queue.
+  // edi/rdi points to the results buffer.
+  //
+  // The push and pop operations are a workaround for a compiler that
+  // doesn't understand that %ecx and %edi (or %rcx and %rdi) get
+  // clobbered. Since they're already input registers, they can't be
+  // included in the clobber list.
+
+#ifdef _MSC_VER
+#ifdef _WIN64
+  DWORD64 rcx;
+  DWORD64 rdi;
+
+  volatile bool restored = false;
+  CONTEXT context;
+  RtlCaptureContext(&context);
+  if (!restored) {
+    rcx = context.Rcx;
+    rdi = context.Rdi;
+
+    context.Rdx = (DWORD64)cache;
+    context.Rax = (DWORD64)prog;
+    context.Rcx = (DWORD64)queue_size;
+    context.Rdi = (DWORD64)results;
+
+    restored = true;
+    RtlRestoreContext(&context, NULL);
+  } else {
+    ((void(*)(void))prog)();
+  }
+
+  restored = false;
+  RtlCaptureContext(&context);
+  if (!restored) {
+    context.Rcx = rcx;
+    context.Rdi = rdi;
+
+    restored = true;
+    RtlRestoreContext(&context, NULL);
+  }
+#else
+  __asm {
+    cld
+    push ecx
+    push edi
+    mov edx, cache
+    mov eax, prog
+    mov ecx, queue_size
+    mov edi, results
+    call eax
+    pop edi
+    pop ecx
+  }
+#endif
+#else
+  __asm__ __volatile__("cld\n" // stos operations increment edi
+#ifdef __x86_64__
+                       "push %%rcx\n"
+                       "push %%rdi\n"
+                       "call *%%rax\n"
+                       "pop %%rdi\n"
+                       "pop %%rcx\n"
+#else
+                       "push %%ecx\n"
+                       "push %%edi\n"
+                       "call *%%eax\n"
+                       "pop %%edi\n"
+                       "pop %%ecx\n"
+#endif
+                       : // no outputs
+                       : "d" (cache),
+                         "a" (prog),
+                         "c" (queue_size),
+                         "D" (results)
+  );
+#endif
+
+  // match_arr is filled by the compiled programs, not by calls to
+  // push_back(). We have to set the final size explicitly.
+  match_arr->set_size(queue_size);
+}
+
+void TideSearchApplication::computeWindow(
+  const SpectrumCollection::SpecCharge& sc,
+  WINDOW_TYPE_T window_type,
+  double precursor_window,
+  int max_charge,
+  vector<int>* negative_isotope_errors,
+  vector<double>* out_min,
+  vector<double>* out_max,
+  double* min_range,
+  double* max_range
+) {
+  
+  double unit_dalton = BIN_WIDTH;
+  
+  switch (window_type) {
+  case WINDOW_MASS:
+    for (vector<int>::const_iterator ie = negative_isotope_errors->begin(); ie != negative_isotope_errors->end(); ++ie) {
+      out_min->push_back(sc.neutral_mass + (*ie * unit_dalton) - precursor_window);
+      out_max->push_back(sc.neutral_mass + (*ie * unit_dalton) + precursor_window);
+    }
+    *min_range = (sc.neutral_mass + (negative_isotope_errors->front() * unit_dalton)) - precursor_window;
+    *max_range = (sc.neutral_mass + (negative_isotope_errors->back() * unit_dalton)) + precursor_window;
+    break;
+  case WINDOW_MZ: {
+    double mz_minus_proton = sc.spectrum->PrecursorMZ() - MASS_PROTON;
+    for (vector<int>::const_iterator ie = negative_isotope_errors->begin(); ie != negative_isotope_errors->end(); ++ie) {
+      out_min->push_back((mz_minus_proton - precursor_window) * sc.charge + (*ie * unit_dalton));
+      out_max->push_back((mz_minus_proton + precursor_window) * sc.charge + (*ie * unit_dalton));
+    }
+    *min_range = (mz_minus_proton*sc.charge + (negative_isotope_errors->front() * unit_dalton)) - precursor_window*max_charge;
+    *max_range = (mz_minus_proton*sc.charge + (negative_isotope_errors->back() * unit_dalton)) + precursor_window*max_charge;
+    break;
+  }
+  case WINDOW_PPM: {
+    double tiny_precursor = precursor_window * 1e-6;
+    for (vector<int>::const_iterator ie = negative_isotope_errors->begin(); ie != negative_isotope_errors->end(); ++ie) {
+      out_min->push_back((sc.neutral_mass + (*ie * unit_dalton)) * (1.0 - tiny_precursor));
+      out_max->push_back((sc.neutral_mass + (*ie * unit_dalton)) * (1.0 + tiny_precursor));
+    }
+    *min_range = (sc.neutral_mass + (negative_isotope_errors->front() * unit_dalton)) * (1.0 - tiny_precursor);
+    *max_range = (sc.neutral_mass + (negative_isotope_errors->back() * unit_dalton)) * (1.0 + tiny_precursor);
+    break;
+  }
+  default:
+    carp(CARP_FATAL, "Invalid window type");
+  }
+  carp(CARP_DETAILED_DEBUG, "Scan %d.%d mass window is [%f, %f]",
+       sc.spectrum->SpectrumNumber(), sc.charge, (*out_min)[0], (*out_max)[0]);
+}
+
+bool TideSearchApplication::hasDecoys() {
+  return HAS_DECOYS;
+}
+
+bool TideSearchApplication::proteinLevelDecoys() {
+  return PROTEIN_LEVEL_DECOYS;
+}
+
+string TideSearchApplication::getName() const {
+  return "tide-search";
+}
+
+string TideSearchApplication::getDescription() const {
+  return
+    "[[nohtml:Search a collection of spectra against a sequence database, "
+    "returning a collection of peptide-spectrum matches (PSMs). This is a "
+    "fast search engine but requires that you first build an index with "
+    "tide-index.]]"
+    "[[html:<p>Tide is a tool for identifying peptides from tandem mass "
+    "spectra. It is an independent reimplementation of the SEQUEST<sup>®"
+    "</sup> algorithm, which assigns peptides to spectra by comparing the "
+    "observed spectra to a catalog of theoretical spectra derived from a "
+    "database of known proteins. Tide's primary advantage is its speed. Our "
+    "published paper provides more detail on how Tide works. If you use Tide "
+    "in your research, please cite:</p><blockquote>Benjamin J. Diament and "
+    "William Stafford Noble. <a href=\"http://dx.doi.org/10.1021/pr101196n\">"
+    ""Faster SEQUEST Searching for Peptide Identification from Tandem "
+    "Mass Spectra"</a>. <em>Journal of Proteome Research</em>. "
+    "10(9):3871-9, 2011.</blockquote> "
+    "<p>When <code>tide-search</code> runs, it performs "
+    "several intermediate steps, as follows:</p><ol>"
+    "<li>If a FASTA file was provided, convert it to an index using "
+    "<code>tide-index</code>.</li>"
+    "<li>Convert the given "
+    "fragmentation spectra to a binary format.</li><li>Search the spectra "
+    "against the database and store the results in binary format.</li><li>"
+    "Convert the results to one or more requested output formats.</li></ol><p>"
+    "By default, the intermediate binary files are stored in the output "
+    "directory and deleted when Tide finishes execution. If you plan to search "
+    "against given database more than once or search a given set of spectra "
+    "more than once, then you can direct Tide to save the binary spectrum "
+    "files using the <code>--store-index</code> and "
+    "<code>--store-spectra</code> options. "
+    "Subsequent runs of the program will go faster "
+    "if provided with inputs in binary format.</p>]]";
+}
+
+vector<string> TideSearchApplication::getArgs() const {
+  string arr[] = {
+    "tide spectra file+",
+    "tide database"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector<string> TideSearchApplication::getOptions() const {
+  string arr[] = {
+    "precursor-window",
+    "auto-precursor-window",
+    "precursor-window-type",
+    "spectrum-min-mz",
+    "spectrum-max-mz",
+    "min-peaks",
+    "spectrum-charge",
+    "scan-number",
+    "top-match",
+    "store-spectra",
+    "store-index",
+    "concat",
+    "compute-sp",
+    "remove-precursor-peak",
+    "remove-precursor-tolerance",
+    "print-search-progress",
+    "spectrum-parser",
+    "use-z-line",
+    "txt-output",
+    "sqt-output",
+    "pepxml-output",
+    "mzid-output",
+    "pin-output",
+    "fileroot",
+    "file-column",
+    "output-dir",
+    "overwrite",
+    "parameter-file",
+    "exact-p-value",
+    "use-neutral-loss-peaks",
+    "use-flanking-peaks",
+    "mz-bin-width",
+    "auto-mz-bin-width",
+    "mz-bin-offset",
+    "max-precursor-charge",
+    "peptide-centric-search",
+    "isotope-error",
+    "skip-preprocessing",
+    "elution-window-size",
+    "num-threads",
+    "verbosity",
+    "pm-min-precursor-mz",
+    "pm-max-precursor-mz",
+    "pm-min-frag-mz",
+    "pm-max-frag-mz",
+    "pm-min-scan-frag-peaks",
+    "pm-max-precursor-delta-ppm",
+    "pm-charge",
+    "pm-top-n-frag-peaks",
+    "pm-pair-top-n-frag-peaks",
+    "pm-min-common-frag-peaks",
+    "pm-max-scan-separation",
+    "pm-min-peak-pairs"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector< pair<string, string> > TideSearchApplication::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("tide-search.target.txt",
+    "a tab-delimited text file containing the target PSMs. See <a href=\""
+    "../file-formats/txt-format.html\">txt file format</a> for a list of the fields."));
+  outputs.push_back(make_pair("tide-search.decoy.txt",
+    "a tab-delimited text file containing the decoy PSMs. This file will only "
+    "be created if the index was created with decoys."));
+  outputs.push_back(make_pair("tide-search.params.txt",
+    "a file containing the name and value of all parameters/options for the "
+    "current operation. Not all parameters in the file may have been used in "
+    "the operation. The resulting file can be used with the --parameter-file "
+    "option for other Crux programs."));
+  outputs.push_back(make_pair("tide-search.log.txt",
+    "a log file containing a copy of all messages that were printed to the "
+    "screen during execution."));
+  return outputs;
+}
+bool TideSearchApplication::needsOutputDirectory() const {
+  return true;
+}
+
+COMMAND_T TideSearchApplication::getCommand() const {
+  return TIDE_SEARCH_COMMAND;
+}
+
+/* Calculates counts of peptides with various XCorr scores, given a preprocessed
+ * MS2 spectrum, using dynamic programming.
+ * Written by Jeff Howbert, October, 2012 (as function calcScoreCount).
+ * Ported to and integrated with Tide by Jeff Howbert, November, 2013.
+ */
+int TideSearchApplication::calcScoreCount(
+  int numelEvidenceObs,
+  int* evidenceObs,
+  int pepMassInt,
+  int maxEvidence,
+  int minEvidence,
+  int maxScore,
+  int minScore,
+  int nAA,
+  double* aaFreqN,
+  double* aaFreqI,
+  double* aaFreqC,
+  int* aaMass,
+  double* pValueScoreObs
+) {
+  const int nDeltaMass = nAA;
+  int minDeltaMass = aaMass[0];
+  int maxDeltaMass = aaMass[nDeltaMass - 1];
+
+  // internal variables
+  int row;
+  int col;
+  int ma;
+  int evidence;
+  int de;
+  int evidenceRow;
+  double sumScore;
+
+  int bottomRowBuffer = maxEvidence + 1;
+  int topRowBuffer = -minEvidence;
+  int colBuffer = maxDeltaMass;
+  int colStart = MassConstants::mass2bin(MassConstants::mono_h);
+  int scoreOffsetObs = bottomRowBuffer - minScore;
+
+  int nRow = bottomRowBuffer - minScore + 1 + maxScore + topRowBuffer;
+  int nCol = colBuffer + pepMassInt;
+  int rowFirst = bottomRowBuffer;
+  int rowLast = rowFirst - minScore + maxScore;
+  int colFirst = colStart + MassConstants::mass2bin(MassConstants::mono_h);
+  int colLast = MassConstants::mass2bin(MassConstants::bin2mass(pepMassInt)
+      - MassConstants::mono_oh 
+      );
+  int initCountRow = bottomRowBuffer - minScore;
+  int initCountCol = maxDeltaMass + colStart;
+
+  double** dynProgArray = new double*[nRow];
+  for (row = 0; row < nRow; row++) {
+    dynProgArray[row] = new double[nCol];
+    for (col = 0; col < nCol; col++) {
+      dynProgArray[row][col] = 0.0;
+    }
+  }
+  double* scoreCountBinAdjust = 0;
+  scoreCountBinAdjust = new double[nRow];
+  for (row = 0; row < nRow; row++) {
+    scoreCountBinAdjust[row] = 0.0;
+  }
+
+  dynProgArray[initCountRow][initCountCol] = 1.0; // initial count of peptides with mass = 1
+  vector<int> deltaMassCol(nDeltaMass);
+  // populate matrix with scores for first (i.e. N-terminal) amino acid in sequence
+  for (de = 0; de < nDeltaMass; de++) {
+    ma = aaMass[de];
+    row = initCountRow + evidenceObs[ma + colStart];
+    col = initCountCol + ma;
+    if (col <= maxDeltaMass + colLast) {
+      dynProgArray[row][col] += dynProgArray[initCountRow][initCountCol] * aaFreqN[de];
+    }
+  }
+  // set to zero now that score counts for first amino acid are in matrix
+  dynProgArray[initCountRow][initCountCol] = 0.0;
+  // populate matrix with score counts for non-terminal amino acids in sequence 
+  for (ma = colFirst; ma < colLast; ma++) {
+    col = maxDeltaMass + ma;
+    evidence = evidenceObs[ma];
+    for (de = 0; de < nDeltaMass; de++) {
+      deltaMassCol[de] = col - aaMass[de];
+    }
+    for (row = rowFirst; row <= rowLast; row++) {
+      evidenceRow = row - evidence;
+      sumScore = dynProgArray[row][col];
+      for (de = 0; de < nDeltaMass; de++) {
+        sumScore += dynProgArray[evidenceRow][deltaMassCol[de]] * aaFreqI[de];
+      }
+      dynProgArray[row][col] = sumScore;
+    }
+  }
+  // populate matrix with score counts for last (i.e. C-terminal) amino acid in sequence
+  ma = colLast;
+  col = maxDeltaMass + ma;
+  evidence = 0; // no evidence should be added for last amino acid in sequence
+  for (de = 0; de < nDeltaMass; de++) {
+    deltaMassCol[de] = col - aaMass[de];
+  }
+  for (row = rowFirst; row <= rowLast; row++) {
+    evidenceRow = row - evidence;
+    sumScore = 0.0;
+    for (de = 0; de < nDeltaMass; de++) {
+      sumScore += dynProgArray[evidenceRow][deltaMassCol[de]] * aaFreqC[de];  // C-terminal residue
+    }
+    dynProgArray[row][col] = sumScore;
+  }
+
+  int colScoreCount = maxDeltaMass + colLast;
+  double totalCount = 0.0;
+  for (row = 0; row < nRow; row++) {
+    // at this point pValueScoreObs just holds counts from last column of dynamic programming array
+    pValueScoreObs[row] = dynProgArray[row][colScoreCount];
+    totalCount += pValueScoreObs[row];
+    scoreCountBinAdjust[row] = pValueScoreObs[row] / 2.0;
+  }
+  // convert from counts to cumulative sum of counts
+  for (row = nRow - 2; row >= 0; row--) {
+    pValueScoreObs[row] += pValueScoreObs[row + 1];
+  }
+  double logTotalCount = log(totalCount);
+  for (row = 0; row < nRow; row++) {
+    // adjust counts to reflect center of bin, not edge
+    pValueScoreObs[row] -= scoreCountBinAdjust[row];
+    // normalize distribution; use exp( log ) to avoid potential underflow
+    pValueScoreObs[row] = exp(log(pValueScoreObs[row]) - logTotalCount);
+  }
+
+  // clean up
+  for (row = 0; row < nRow; row++) {
+    delete [] dynProgArray[row];
+  }
+  delete [] dynProgArray;
+  delete [] scoreCountBinAdjust;
+  
+  return scoreOffsetObs;
+}
+
+void TideSearchApplication::processParams() {
+  const string index = Params::GetString("tide database");
+  if (!FileUtils::Exists(index)) {
+    carp(CARP_FATAL, "'%s' does not exist", index.c_str());
+  } else if (FileUtils::IsRegularFile(index)) {
+    // Index is FASTA file
+    carp(CARP_INFO, "Creating index from '%s'", index.c_str());
+    string targetIndexName = Params::GetString("store-index");
+    if (targetIndexName.empty()) {
+      targetIndexName = FileUtils::Join(Params::GetString("output-dir"),
+                                        "tide-search.tempindex");
+      remove_index_ = targetIndexName;
+    }
+    TideIndexApplication indexApp;
+    indexApp.processParams();
+    if (indexApp.main(index, targetIndexName) != 0) {
+      carp(CARP_FATAL, "tide-index failed.");
+    }
+    Params::Set("tide database", targetIndexName);
+  } else {
+    // Index is Tide index directory
+    pb::Header peptides_header;
+    string peptides_file = FileUtils::Join(index, "pepix");
+    HeadedRecordReader peptide_reader(peptides_file, &peptides_header);
+    if ((peptides_header.file_type() != pb::Header::PEPTIDES) ||
+        !peptides_header.has_peptides_header()) {
+      carp(CARP_FATAL, "Error reading index (%s)", peptides_file.c_str());
+    }
+
+    const pb::Header::PeptidesHeader& pepHeader = peptides_header.peptides_header();
+
+    Params::Set("enzyme", pepHeader.enzyme());
+    const char* digestString =
+      digest_type_to_string(pepHeader.full_digestion() ? FULL_DIGEST : PARTIAL_DIGEST);
+    Params::Set("digestion", digestString);
+    Params::Set("isotopic-mass", pepHeader.monoisotopic_precursor() ? "mono" : "average");
+  }
+  // run param-medic?
+  const string autoPrecursor = Params::GetString("auto-precursor-window");
+  const string autoFragment = Params::GetString("auto-mz-bin-width");
+  if (autoPrecursor != "false" || autoFragment != "false") {
+    if (autoPrecursor != "false" && Params::GetString("precursor-window-type") != "ppm") {
+      carp(CARP_FATAL, "Automatic peptide mass tolerance detection is only supported with ppm "
+                       "units. Please rerun with either auto-precursor-window set to 'false' or "
+                       "precursor-window-type set to 'ppm'.");
+    }
+    ParamMedicErrorCalculator errCalc;
+    errCalc.processFiles(Params::GetStrings("tide spectra file"));
+    string precursorFailure, fragmentFailure;
+    double precursorSigmaPpm = 0;
+    double fragmentSigmaPpm = 0;
+    double fragmentSigmaTh = 0;
+    double precursorPredictionPpm = 0;
+    double fragmentPredictionPpm = 0;
+    double fragmentPredictionTh = 0;
+    errCalc.calcMassErrorDist(&precursorFailure, &fragmentFailure,
+                              &precursorSigmaPpm, &fragmentSigmaPpm,
+                              &precursorPredictionPpm, &fragmentPredictionTh);
+
+    if (autoPrecursor != "false") {
+      if (precursorFailure.empty()) {
+        carp(CARP_INFO, "precursor ppm standard deviation: %f", precursorSigmaPpm);
+        carp(CARP_INFO, "Precursor error estimate (ppm): %.2f", precursorPredictionPpm);
+        Params::Set("precursor-window", precursorPredictionPpm);
+      } else {
+        carp(autoPrecursor == "fail" ? CARP_FATAL : CARP_ERROR,
+             "failed to calculate precursor error: %s", precursorFailure.c_str());
+      }
+    }
+    if (autoFragment != "false") {
+      if (fragmentFailure.empty()) {
+        carp(CARP_INFO, "fragment standard deviation (ppm): %f", fragmentSigmaPpm);
+        carp(CARP_INFO, "Fragment bin size estimate (Th): %.4f", fragmentPredictionTh);
+        Params::Set("mz-bin-width", fragmentPredictionTh);
+      } else {
+        carp(autoFragment == "fail" ? CARP_FATAL : CARP_ERROR,
+             "failed to calculate fragment error: %s", fragmentFailure.c_str());
+      }
+    }
+  }
+}
+
+void TideSearchApplication::setSpectrumFlag(map<pair<string, unsigned int>, bool>* spectrum_flag) {
+  spectrum_flag_ = spectrum_flag;
+}
+
+string TideSearchApplication::getOutputFileName() {
+  return output_file_name_;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/TideSearchApplication.h b/src/app/TideSearchApplication.h
new file mode 100644
index 0000000..eff1f10
--- /dev/null
+++ b/src/app/TideSearchApplication.h
@@ -0,0 +1,278 @@
+#ifndef TIDESEARCHAPPLICATION_H
+#define TIDESEARCHAPPLICATION_H
+
+#include "CruxApplication.h"
+#include "TideMatchSet.h"
+
+#include <iostream>
+#include <fstream>
+#include <iomanip>
+#include <gflags/gflags.h>
+#include "peptides.pb.h"
+#include "spectrum.pb.h"
+#include "tide/theoretical_peak_set.h"
+#include "tide/max_mz.h"
+
+using namespace std; 
+
+class TideSearchApplication : public CruxApplication {
+
+  friend class SubtractIndexApplication;
+
+ protected:
+  /**
+  brief This variable is used with Cascade Search.
+  This map contains a flag for each spectrum whether
+  a spectrum has not been identified in a prior cycle (0) or not (1).
+  The spectrum ID is a pair containing the ordinal number of the
+  input file in the first component and a scanId-charge-state in the second component.
+  The scanID and the charge state is combined into a single number
+  as scanID*10 + charge_state. Charge state is required to be less than 10.
+  */
+  map<pair<string, unsigned int>, bool>* spectrum_flag_;
+  string output_file_name_;
+
+  static bool HAS_DECOYS;
+  static bool PROTEIN_LEVEL_DECOYS;
+
+  /**
+   * Function that contains the search algorithm and performs the search
+   */
+  void search(void *threadarg);
+
+  /**
+    * Calls search(threadarg), and if threading, creates threads calling 
+    * search(threadarg)
+    *
+    * Call structure: 
+    * main -> [this function] -> search(void* threadarg)
+    *                 |
+    *   (if threading)|
+    *                 |        
+    *                 -> Per Thread:
+    *                           -> search(void* threadarg)
+    */
+  void search(
+    const string& spectrum_filename,
+    const vector<SpectrumCollection::SpecCharge>* spec_charges,
+    vector<ActivePeptideQueue*> active_peptide_queue,
+    ProteinVec& proteins,
+    vector<const pb::AuxLocation*>& locations,
+    double precursor_window,
+    WINDOW_TYPE_T window_type,
+    double spectrum_min_mz,
+    double spectrum_max_mz,
+    int min_scan,
+    int max_scan,
+    int min_peaks,
+    int search_charge,
+    int top_matches,
+    double highest_mz,
+    ofstream* target_file,
+    ofstream* decoy_file,
+    bool compute_sp,
+    int nAA, 
+    double* aaFreqN,
+    double* aaFreqI,
+    double* aaFreqC,
+    int* aaMass,
+    vector<int>* negative_isotope_errors
+  );
+
+  void collectScoresCompiled(
+    ActivePeptideQueue* active_peptide_queue,
+    const Spectrum* spectrum,
+    const ObservedPeakSet& observed,
+    TideMatchSet::Arr2* match_arr,
+    int queue_size,
+    int charge
+  );
+
+  void computeWindow(
+    const SpectrumCollection::SpecCharge& sc,
+    WINDOW_TYPE_T window_type,
+    double precursor_window,
+    int max_charge,
+    vector<int>* negative_isotope_errors,
+    vector<double>* out_min,
+    vector<double>* out_max,
+    double* min_range,
+    double* max_range
+  );
+
+  struct ScSortByMz {
+    explicit ScSortByMz(double precursor_window) { precursor_window_ = precursor_window; }
+    bool operator() (const SpectrumCollection::SpecCharge x,
+                     const SpectrumCollection::SpecCharge y) {
+      return (x.spectrum->PrecursorMZ() - MASS_PROTON - precursor_window_) * x.charge <
+             (y.spectrum->PrecursorMZ() - MASS_PROTON - precursor_window_) * y.charge;
+    }
+    double precursor_window_;
+  };
+  double bin_width_;
+  double bin_offset_;
+
+  std::string remove_index_;
+
+  struct InputFile {
+    std::string OriginalName;
+    std::string SpectrumRecords;
+    bool Keep;
+    InputFile(const std::string& name,
+              const std::string& spectrumrecords,
+              bool keep):
+      OriginalName(name), SpectrumRecords(spectrumrecords), Keep(keep) {}
+  };
+
+ public:
+
+  // See TideSearchApplication.cpp for descriptions of these two constants
+  static const double XCORR_SCALING;
+  static const double RESCALE_FACTOR;
+
+  bool exact_pval_search_;
+
+  /**
+   * Constructor
+   */
+  TideSearchApplication();
+
+  /**
+   * Destructor
+   */
+  ~TideSearchApplication();
+
+  unsigned int NUM_THREADS;
+
+  /**
+   * Main method
+   */
+  virtual int main(int argc, char** argv);
+
+  int main(const vector<string>& input_files);
+
+  int main(const vector<string>& input_files, const string input_index);
+
+  static bool hasDecoys();
+  static bool proteinLevelDecoys();
+
+  /**
+   * Returns the command name
+   */
+  virtual string getName() const;
+
+  /**
+   * Returns the command description
+   */
+  virtual string getDescription() const;
+
+  /**
+   * Returns the command arguments
+   */
+  virtual vector<string> getArgs() const;
+
+  /**
+   * Returns the command options
+   */
+  virtual vector<string> getOptions() const;
+
+  /**
+   * Returns the command outputs
+   */
+  virtual vector< pair<string, string> > getOutputs() const;
+
+  /**
+   * Returns whether the application needs the output directory or not. (default false)
+   */
+  virtual bool needsOutputDirectory() const;
+
+  virtual COMMAND_T getCommand() const;
+
+  /**
+   * Struct holding necessary information for each thread to run.
+   */
+  struct thread_data {
+
+    string spectrum_filename;
+    const vector<SpectrumCollection::SpecCharge>* spec_charges;
+    ActivePeptideQueue* active_peptide_queue;
+    ProteinVec proteins;
+    vector<const pb::AuxLocation*> locations;
+    double precursor_window;
+    WINDOW_TYPE_T window_type;
+    double spectrum_min_mz;
+    double spectrum_max_mz;
+    int min_scan;
+    int max_scan;
+    int min_peaks;
+    int search_charge;
+    int top_matches;
+    double highest_mz;
+    ofstream* target_file;
+    ofstream* decoy_file;
+    bool compute_sp;
+    int64_t thread_num;
+    int64_t num_threads;
+    int nAA;
+    double* aaFreqN;
+    double* aaFreqI;
+    double* aaFreqC;
+    int* aaMass;
+    vector<boost::mutex*> locks_array;
+    double bin_width;
+    double bin_offset;
+    bool exact_pval_search;
+    map<pair<string, unsigned int>, bool>* spectrum_flag;
+    int* sc_index;
+    int* total_candidate_peptides;
+    vector<int>* negative_isotope_errors;
+
+    thread_data (const string& spectrum_filename_, const vector<SpectrumCollection::SpecCharge>* spec_charges_,
+            ActivePeptideQueue* active_peptide_queue_, ProteinVec proteins_,
+            vector<const pb::AuxLocation*> locations_, double precursor_window_,
+            WINDOW_TYPE_T window_type_, double spectrum_min_mz_, double spectrum_max_mz_,
+            int min_scan_, int max_scan_, int min_peaks_, int search_charge_, int top_matches_,
+            double highest_mz_, ofstream* target_file_,
+            ofstream* decoy_file_, bool compute_sp_, int64_t thread_num_, int64_t num_threads_, int nAA_,
+            double* aaFreqN_, double* aaFreqI_, double* aaFreqC_, int* aaMass_, vector<boost::mutex*> locks_array_,  
+            double bin_width_, double bin_offset_, bool exact_pval_search_, map<pair<string, unsigned int>, bool>* spectrum_flag_,
+            int* sc_index_, int* total_candidate_peptides_, vector<int>* negative_isotope_errors_) :
+            spectrum_filename(spectrum_filename_), spec_charges(spec_charges_), active_peptide_queue(active_peptide_queue_),
+            proteins(proteins_), locations(locations_), precursor_window(precursor_window_), window_type(window_type_),
+            spectrum_min_mz(spectrum_min_mz_), spectrum_max_mz(spectrum_max_mz_), min_scan(min_scan_), max_scan(max_scan_),
+            min_peaks(min_peaks_), search_charge(search_charge_), top_matches(top_matches_), highest_mz(highest_mz_),
+            target_file(target_file_), decoy_file(decoy_file_), compute_sp(compute_sp_),
+            thread_num(thread_num_), num_threads(num_threads_), nAA(nAA_), aaFreqN(aaFreqN_), aaFreqI(aaFreqI_), aaFreqC(aaFreqC_), 
+            aaMass(aaMass_), locks_array(locks_array_), bin_width(bin_width_), bin_offset(bin_offset_), exact_pval_search(exact_pval_search_), 
+            spectrum_flag(spectrum_flag_), sc_index(sc_index_), total_candidate_peptides(total_candidate_peptides_), negative_isotope_errors(negative_isotope_errors_) {}
+  };
+
+  int calcScoreCount(
+    int numelEvidenceObs,
+    int* evidenceObs,
+    int pepMassInt,
+    int maxEvidence,
+    int minEvidence,
+    int maxScore,
+    int minScore,
+    int nAA,
+    double* aaFreqN,
+    double* aaFreqI,
+    double* aaFreqC,
+    int* aaMass,
+    double* pValueScoreObs
+  );
+  
+  void setSpectrumFlag(map<pair<string, unsigned int>, bool>* spectrum_flag);
+  virtual void processParams();
+  string getOutputFileName();
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/bullseye/CKronik2.cpp b/src/app/bullseye/CKronik2.cpp
new file mode 100644
index 0000000..7cc326a
--- /dev/null
+++ b/src/app/bullseye/CKronik2.cpp
@@ -0,0 +1,797 @@
+#include "CKronik2.h"
+
+//-------------------------------------
+//   Constructors and Destructors
+//-------------------------------------
+CKronik2::CKronik2(){
+  dPPMTol   = 10.0; 
+  iGapTol   = 1;   
+  iMatchTol = 3;    
+}
+CKronik2::~CKronik2(){
+}
+
+CKronik2::CKronik2(const CKronik2& c){
+  dPPMTol=c.dPPMTol;
+  iGapTol=c.iGapTol;
+  iMatchTol=c.iMatchTol;
+  iPercent=c.iPercent;
+  vPeps.clear();
+  for(unsigned int i=0;i<c.vPeps.size();i++) vPeps.push_back(c.vPeps[i]);
+  hkData.clear();
+  for(unsigned int i=0;i<c.hkData.size();i++) hkData.push_back(c.hkData[i]);
+}
+
+
+//-------------------------------------
+//    Operator Overloads
+//-------------------------------------
+CKronik2& CKronik2::operator=(const CKronik2& c){
+  if(this!=&c){
+    dPPMTol=c.dPPMTol;
+    iGapTol=c.iGapTol;
+    iMatchTol=c.iMatchTol;
+    iPercent=c.iPercent;
+    vPeps.clear();
+    for(unsigned int i=0;i<c.vPeps.size();i++) vPeps.push_back(c.vPeps[i]);
+    hkData.clear();
+    for(unsigned int i=0;i<c.hkData.size();i++) hkData.push_back(c.hkData[i]);
+  } 
+  return *this;
+}
+sPepProfile& CKronik2::operator[ ](const unsigned int& i){
+  return vPeps[i];
+}
+
+//-------------------------------------
+//    Data Manipulation
+//-------------------------------------
+void CKronik2::add(sPepProfile &p){
+  vPeps.push_back(p);
+}
+
+sPepProfile& CKronik2::at(unsigned int i){
+  return vPeps[i];
+}
+
+void CKronik2::clear(){
+  vPeps.clear();
+  hkData.clear();
+}
+
+void CKronik2::clearHK(){
+  hkData.clear();
+}
+
+void CKronik2::erase(unsigned int i){
+  vPeps.erase(vPeps.begin()+i);
+}
+
+//------------------------------
+//   Automation
+//------------------------------
+int CKronik2::getPercent(){
+  return iPercent;
+}
+bool CKronik2::loadHK(char* in){
+	FILE *hkr;
+	sScan scan;
+	sPep pep;
+	double td;
+	char tag;
+	bool firstScan;
+	char line[256];
+	char* tok;
+
+	int pepCount=0;
+
+  sPepProfile s;
+  sProfileData p;
+
+  //Read in the Hardklor results
+  firstScan=true;
+	hkr = fopen(in,"rt");
+	if(hkr==NULL) {
+		cout << "Problem reading file." << endl;
+		return false;
+	}
+
+  hkData.clear();
+	while(!feof(hkr)){
+    
+		tag=fgetc(hkr);
+
+    if(tag=='S') {
+			if(firstScan) firstScan=false;
+			else hkData.push_back(scan);	
+			scan.clear();
+			fgets(line,256,hkr);
+			tok=strtok(line,"\t\n");
+			scan.scanNum=atoi(tok);
+			tok=strtok(NULL,"\t\n");
+			scan.rTime=(float)atof(tok);
+			tok=strtok(NULL,"\t\n");
+			strcpy(scan.file,tok);
+      //fscanf(hkr,"\t%d\t%f%s\n",&scan.scanNum,&scan.rTime,scan.file);
+		} else {
+			pepCount++;
+			fscanf(hkr,"\t%lf\t%d\t%f\t%lf\t%lf-%lf\t%lf\t%s\t%lf\n", &pep.monoMass,&pep.charge,&pep.intensity,&pep.basePeak,&td,&td,&td,pep.mods,&pep.xCorr);
+			scan.vPep->push_back(pep);
+		}
+	}
+  hkData.push_back(scan);
+	fclose(hkr);
+
+  cout << pepCount << " peptides from " << hkData.size() << " scans." << endl;
+  return true;
+}
+
+bool CKronik2::processHK(char*  in, char* out) {
+	FILE *hkr;
+	sScan scan;
+	sPep pep;
+	double td;
+	char tag;
+	bool firstScan;
+  int sIndex,pIndex;
+  int i,j,k,k1,k2;
+
+	char line[256];
+	char* tok;
+
+	int pepCount=0;
+  vector<sScan> allScans;
+
+  double mass;
+  double ppm;
+  int charge;
+  int gap;
+  int matchCount;
+  bool bMatch;
+
+  sPepProfile s;
+  sProfileData p;
+
+  //for tracking which peptides
+  iTwo t;
+  vector<iTwo> vLeft;
+  vector<iTwo> vRight;
+
+  //clear data
+  vPeps.clear();
+
+  //Read in the Hardklor results
+  firstScan=true;
+	hkr = fopen(in,"rt");
+	if(hkr==NULL) {
+		cout << "Problem reading file." << endl;
+		return false;
+	}
+
+	while(!feof(hkr)){
+    
+		tag=fgetc(hkr);
+
+    if(tag=='S') {
+			if(firstScan) firstScan=false;
+			else allScans.push_back(scan);	
+			scan.clear();
+			fgets(line,256,hkr);
+			tok=strtok(line,"\t\n");
+			scan.scanNum=atoi(tok);
+			tok=strtok(NULL,"\t\n");
+			scan.rTime=(float)atof(tok);
+			tok=strtok(NULL,"\t\n");
+			strcpy(scan.file,tok);
+      //fscanf(hkr,"\t%d\t%f%s\n",&scan.scanNum,&scan.rTime,scan.file);
+		} else {
+			pepCount++;
+			fscanf(hkr,"\t%lf\t%d\t%f\t%lf\t%lf-%lf\t%lf\t%s\t%lf\n", &pep.monoMass,&pep.charge,&pep.intensity,&pep.basePeak,&td,&td,&td,pep.mods,&pep.xCorr);
+			scan.vPep->push_back(pep);
+		}
+	}
+  allScans.push_back(scan);
+	fclose(hkr);
+
+  cout << pepCount << " peptides from " << allScans.size() << " scans." << endl;
+
+  for(i=0;i<allScans.size();i++) allScans[i].sortIntRev();
+
+  cout << "Finding persistent peptide signals:" << endl;
+
+  int startCount=pepCount;
+  int lastPercent=0;
+
+  cerr << lastPercent;
+
+  //Perform the Kronik analysis
+  while(pepCount>0){
+    if(!findMax(allScans,sIndex,pIndex)) break;
+
+    mass=allScans[sIndex].vPep->at(pIndex).monoMass;
+    charge=allScans[sIndex].vPep->at(pIndex).charge;
+    matchCount=1;
+
+    //look left
+    vLeft.clear();
+    gap=0;
+    i=sIndex-1;
+    while(i>-1 && gap<=iGapTol){
+      bMatch=false;
+      t.scan=i;
+      t.pep=-1;
+      for(j=0;j<allScans[i].vPep->size();j++){
+        //if(allScans[i].vPep->at(j).intensity<0.0) continue;
+        ppm=(allScans[i].vPep->at(j).monoMass-mass)/mass*1000000;
+        if(fabs(ppm)<dPPMTol && allScans[i].vPep->at(j).charge==charge){
+          t.pep=j;
+          gap=0;
+          bMatch=true;
+          matchCount++;
+          break;
+        }
+      }
+      if(!bMatch) gap++;
+      vLeft.push_back(t);
+      i--;
+    }
+
+    //look right
+    vRight.clear();
+    gap=0;
+    i=sIndex+1;
+    while(i<allScans.size() && gap<=iGapTol){    
+      bMatch=false;
+      t.scan=i;
+      t.pep=-1;
+      for(j=0;j<allScans[i].vPep->size();j++){
+        //if(allScans[i].vPep->at(j).intensity<0.0) continue;
+        ppm=(allScans[i].vPep->at(j).monoMass-mass)/mass*1000000;
+        if(fabs(ppm)<dPPMTol && allScans[i].vPep->at(j).charge==charge){
+          t.pep=j;
+          gap=0;
+          bMatch=true;
+          matchCount++;
+          break;
+        }
+      }
+      if(!bMatch) gap++;
+      vRight.push_back(t);
+      i++;
+    }
+
+    //Only keep sufficient matches
+    if(matchCount>=iMatchTol){
+      //trim gaps
+      while(vLeft.size()>0 && vLeft[vLeft.size()-1].pep<0) vLeft.pop_back();
+      while(vRight.size()>0 && vRight[vRight.size()-1].pep<0) vRight.pop_back();
+
+      //apply basic information
+      s.rTime=allScans[sIndex].rTime;
+      s.basePeak=allScans[sIndex].vPep->at(pIndex).basePeak;
+      s.bestScan=allScans[sIndex].scanNum;
+      s.charge=allScans[sIndex].vPep->at(pIndex).charge;
+      s.intensity=allScans[sIndex].vPep->at(pIndex).intensity;
+      s.monoMass=allScans[sIndex].vPep->at(pIndex).monoMass;
+      strcpy(s.mods,allScans[sIndex].vPep->at(pIndex).mods);
+      s.xCorr=allScans[sIndex].vPep->at(pIndex).xCorr;
+      s.setPoints(vLeft.size()+vRight.size()+1);
+      if(vLeft.size()==0) {
+        s.lowScan=allScans[sIndex].scanNum;
+        s.firstRTime=allScans[sIndex].rTime;
+      } else {
+        s.lowScan=allScans[vLeft[vLeft.size()-1].scan].scanNum;
+        s.firstRTime=allScans[vLeft[vLeft.size()-1].scan].rTime;
+      }
+      if(vRight.size()==0) {
+        s.highScan=allScans[sIndex].scanNum;
+        s.lastRTime=allScans[sIndex].rTime;
+      } else {
+        s.highScan=allScans[vRight[vRight.size()-1].scan].scanNum;
+        s.lastRTime=allScans[vRight[vRight.size()-1].scan].rTime;
+      }
+
+      //apply datapoints
+      s.profile[0].intensity=allScans[sIndex].vPep->at(pIndex).intensity;
+      s.profile[0].interpolated=false;
+      s.profile[0].monoMass=allScans[sIndex].vPep->at(pIndex).monoMass;
+      s.profile[0].rTime=allScans[sIndex].rTime;
+      s.profile[0].scanNum=allScans[sIndex].scanNum;
+      s.profile[0].xCorr=allScans[sIndex].vPep->at(pIndex).xCorr;
+
+      i=1;
+      j=0;
+      while(j<vLeft.size()){
+        //Handle interpolated data
+        if(vLeft[j].pep<0) {
+          k=0;
+          while(vLeft[j+k].pep<0) k++;
+          k2=j+k;   
+          if(j==0){
+            s.profile[i].intensity=interpolate(s.profile[0].scanNum,allScans[vLeft[k2].scan].scanNum,(double)s.profile[0].intensity,(double)allScans[vLeft[k2].scan].vPep->at(vLeft[k2].pep).intensity,allScans[vLeft[j].scan].scanNum);
+            s.profile[i].monoMass =interpolate(s.profile[0].scanNum,allScans[vLeft[k2].scan].scanNum,s.profile[0].monoMass, allScans[vLeft[k2].scan].vPep->at(vLeft[k2].pep).monoMass, allScans[vLeft[j].scan].scanNum);
+          } else {
+            k=0;
+            while(j+k>=0 && vLeft[j+k].pep<0) k--;
+            k1=j+k;
+            if(k1<0){
+              s.profile[i].intensity=interpolate(s.profile[0].scanNum,allScans[vLeft[k2].scan].scanNum,(double)s.profile[0].intensity,(double)allScans[vLeft[k2].scan].vPep->at(vLeft[k2].pep).intensity,allScans[vLeft[j].scan].scanNum);
+              s.profile[i].monoMass =interpolate(s.profile[0].scanNum,allScans[vLeft[k2].scan].scanNum,s.profile[0].monoMass, allScans[vLeft[k2].scan].vPep->at(vLeft[k2].pep).monoMass, allScans[vLeft[j].scan].scanNum);
+            } else {
+              s.profile[i].intensity=interpolate(allScans[vLeft[k1].scan].scanNum,allScans[vLeft[k2].scan].scanNum,(double)allScans[vLeft[k1].scan].vPep->at(vLeft[k1].pep).intensity,(double)allScans[vLeft[k2].scan].vPep->at(vLeft[k2].pep).intensity,allScans[vLeft[j].scan].scanNum);
+              s.profile[i].monoMass =interpolate(allScans[vLeft[k1].scan].scanNum,allScans[vLeft[k2].scan].scanNum,allScans[vLeft[k1].scan].vPep->at(vLeft[k1].pep).monoMass, allScans[vLeft[k2].scan].vPep->at(vLeft[k2].pep).monoMass, allScans[vLeft[j].scan].scanNum);
+            }
+          }    
+          s.profile[i].interpolated=true;
+          s.profile[i].rTime=allScans[vLeft[j].scan].rTime;
+          s.profile[i].scanNum=allScans[vLeft[j].scan].scanNum;
+          s.profile[i].xCorr=0.0;
+        } else {
+          s.profile[i].intensity=allScans[vLeft[j].scan].vPep->at(vLeft[j].pep).intensity;
+          s.profile[i].interpolated=false;
+          s.profile[i].monoMass=allScans[vLeft[j].scan].vPep->at(vLeft[j].pep).monoMass;
+          s.profile[i].rTime=allScans[vLeft[j].scan].rTime;
+          s.profile[i].scanNum=allScans[vLeft[j].scan].scanNum;
+          s.profile[i].xCorr=allScans[vLeft[j].scan].vPep->at(vLeft[j].pep).xCorr;
+        }
+        i++;
+        j++;
+      }
+
+      j=0;
+      while(j<vRight.size()){
+        //Handle interpolated data
+        if(vRight[j].pep<0) {
+          k=0;
+          while(vRight[j+k].pep<0)k++;
+          k2=j+k;
+          if(j==0){
+            s.profile[i].intensity=interpolate(s.profile[0].scanNum,allScans[vRight[k2].scan].scanNum,s.profile[0].intensity,allScans[vRight[k2].scan].vPep->at(vRight[k2].pep).intensity,allScans[vRight[j].scan].scanNum);
+            s.profile[i].monoMass =interpolate(s.profile[0].scanNum,allScans[vRight[k2].scan].scanNum,s.profile[0].monoMass, allScans[vRight[k2].scan].vPep->at(vRight[k2].pep).monoMass, allScans[vRight[j].scan].scanNum);
+          } else {
+            k=0;
+            while((j+k>-1) && vRight[j+k].pep<0)k--;
+            k1=j+k;
+            if(k1<0){
+              s.profile[i].intensity=interpolate(s.profile[0].scanNum,allScans[vRight[k2].scan].scanNum,s.profile[0].intensity,allScans[vRight[k2].scan].vPep->at(vRight[k2].pep).intensity,allScans[vRight[j].scan].scanNum);
+              s.profile[i].monoMass =interpolate(s.profile[0].scanNum,allScans[vRight[k2].scan].scanNum,s.profile[0].monoMass, allScans[vRight[k2].scan].vPep->at(vRight[k2].pep).monoMass, allScans[vRight[j].scan].scanNum);
+            } else {
+              s.profile[i].intensity=interpolate(allScans[vRight[k1].scan].scanNum,allScans[vRight[k2].scan].scanNum,allScans[vRight[k1].scan].vPep->at(vRight[k1].pep).intensity,allScans[vRight[k2].scan].vPep->at(vRight[k2].pep).intensity,allScans[vRight[j].scan].scanNum);
+              s.profile[i].monoMass =interpolate(allScans[vRight[k1].scan].scanNum,allScans[vRight[k2].scan].scanNum,allScans[vRight[k1].scan].vPep->at(vRight[k1].pep).monoMass, allScans[vRight[k2].scan].vPep->at(vRight[k2].pep).monoMass, allScans[vRight[j].scan].scanNum);
+            }
+          } 
+          s.profile[i].interpolated=true;
+          s.profile[i].rTime=allScans[vRight[j].scan].rTime;
+          s.profile[i].scanNum=allScans[vRight[j].scan].scanNum;
+          s.profile[i].xCorr=0.0;
+        } else {
+          s.profile[i].intensity=allScans[vRight[j].scan].vPep->at(vRight[j].pep).intensity;
+          s.profile[i].interpolated=false;
+          s.profile[i].monoMass=allScans[vRight[j].scan].vPep->at(vRight[j].pep).monoMass;
+          s.profile[i].rTime=allScans[vRight[j].scan].rTime;
+          s.profile[i].scanNum=allScans[vRight[j].scan].scanNum;
+          s.profile[i].xCorr=allScans[vRight[j].scan].vPep->at(vRight[j].pep).xCorr;
+        }
+        i++;
+        j++;
+      }
+
+      //Add this peptide
+      s.sortScanNum();
+
+      //summed intensity (including interpolation)
+      s.sumIntensity=0.0f;
+      for(i=0;i<s.datapoints;i++) s.sumIntensity+=s.profile[i].intensity;
+
+      vPeps.push_back(s);
+
+      //Erase datapoints already used
+      for(i=0;i<vLeft.size();i++){
+        if(vLeft[i].pep<0) continue;
+        allScans[vLeft[i].scan].vPep->erase(allScans[vLeft[i].scan].vPep->begin()+vLeft[i].pep);
+        pepCount--;
+      }
+      for(i=0;i<vRight.size();i++){
+        if(vRight[i].pep<0) continue;
+        allScans[vRight[i].scan].vPep->erase(allScans[vRight[i].scan].vPep->begin()+vRight[i].pep);
+        pepCount--;
+      }
+    }
+
+    //erase the one we're looking at
+    allScans[sIndex].vPep->erase(allScans[sIndex].vPep->begin()+pIndex);
+    pepCount--;
+
+    //update percent
+    iPercent=100-(int)((float)pepCount/(float)startCount*100.0);
+    if(iPercent>lastPercent){
+      cerr << "\b\b\b" << iPercent;
+      lastPercent=iPercent;
+    }
+
+  }
+  cerr << endl;
+
+  if(out[0]!='\0'){
+    FILE* f;
+    f=fopen(out,"wt");
+
+    //Heading line
+	  fprintf(f,"File\tFirst Scan\tLast Scan\tNum of Scans\tCharge\tMonoisotopic Mass\tBase Isotope Peak\t");
+	  fprintf(f,"Best Intensity\tSummed Intensity\tFirst RTime\tLast RTime\tBest RTime\tBest Correlation\tModifications\n");
+
+    for(i=0;i<vPeps.size();i++){
+		  fprintf(f,"%s\t%d\t%d\t%d\t%d\t%lf\t%lf\t%f\t%f\t%f\t%f\t%f\t%lf\t%s\n","NULL",
+																																		   vPeps[i].lowScan,
+																																		   vPeps[i].highScan,
+                                                                       vPeps[i].datapoints,
+																																		   vPeps[i].charge,
+																																		   vPeps[i].monoMass,
+																																		   vPeps[i].basePeak,
+																																		   vPeps[i].intensity,
+																																		   vPeps[i].sumIntensity,
+																																		   vPeps[i].firstRTime,
+																																		   vPeps[i].lastRTime,
+																																		   vPeps[i].rTime,
+																																		   vPeps[i].xCorr,
+																																		   vPeps[i].mods);
+	  }
+    
+	  fclose(f);
+  }
+
+  return true;
+}
+
+
+
+bool CKronik2::findMax(vector<sScan>& v, int& s, int& p){
+  bool found = false;
+  float max=0;
+  unsigned int i;
+  p=0;
+  for(i=0;i<v.size();i++){
+    if(v[i].vPep->size()==0) continue;
+    if(v[i].vPep->at(0).intensity>max){
+      max=v[i].vPep->at(0).intensity;
+      s=i;
+      found = true;
+    }
+  }
+  return found;
+}
+
+
+//-----------------------------------------  
+//                 Tools
+//-----------------------------------------
+bool CKronik2::getRT(int scanNum, float& rt){
+
+  unsigned int i;
+  for(i=0;i<hkData.size();i++){
+    if(hkData[i].scanNum==scanNum){
+      rt=hkData[i].rTime;
+      return true;
+    }
+  }
+
+  rt=0.0f;
+  return false;
+}
+
+//-----------------------------------------  
+//                 Filters
+//-----------------------------------------
+void CKronik2::filterRT(float rt1, float rt2){
+  unsigned int i;
+  vector<sPepProfile> temp;
+
+  for(i=0;i<vPeps.size();i++){
+    if(vPeps[i].rTime>=rt1 && vPeps[i].rTime<=rt2){
+      temp.push_back(vPeps[i]);
+    }
+  }
+
+  vPeps.clear();
+  for(i=0;i<temp.size();i++) vPeps.push_back(temp[i]);
+}
+
+void CKronik2::removeContaminants(float rt){
+  unsigned int i;
+  vector<sPepProfile> temp;
+
+  for(i=0;i<vPeps.size();i++){
+    if((vPeps[i].lastRTime-vPeps[i].firstRTime)<rt){
+      temp.push_back(vPeps[i]);
+    }
+  }
+
+  vPeps.clear();
+  for(i=0;i<temp.size();i++) vPeps.push_back(temp[i]);
+}
+
+void CKronik2::removeMass(double m1, double m2){
+	unsigned int i;
+  vector<sPepProfile> temp;
+
+  for(i=0;i<vPeps.size();i++){
+		if( vPeps[i].monoMass>=m1 && vPeps[i].monoMass<=m2 ){
+			temp.push_back(vPeps[i]);
+    }
+  }
+
+  vPeps.clear();
+  for(i=0;i<temp.size();i++) vPeps.push_back(temp[i]);
+}
+
+//-----------------------------------------
+//    Parameter accessors and modifiers
+//-----------------------------------------
+void CKronik2::setPPMTol(double d){
+  dPPMTol=d;
+}
+
+void CKronik2::setMatchTol(int i){
+  iMatchTol=i;
+}
+
+void CKronik2::setGapTol(int i){
+  iGapTol=i;
+}
+
+unsigned int CKronik2::size(){
+  return vPeps.size();
+}
+
+
+//------------------------------------------------------
+// STATISTICS FUNCTIONS (adapted from numerical recipes)
+//------------------------------------------------------
+bool CKronik2::pearson(int i1, int i2, bool byScan, bool interpolate, double& rval, double& pval, double& slope, double& intercept, float& sum1, float& sum2){
+
+  int i,j;
+  double sxx=0.0,syy=0.0,sxy=0.0;
+  double ax=0.0,ay=0.0;
+  double sumx=0.0,sumy=0.0,sumxy=0.0,sumxx=0.0;
+  double yt,xt,t,df;
+  double TINY=1.0e-20;
+  double lrval;
+
+  pval=1.0;
+  rval=0.0;
+
+  vector<float> p1;
+  vector<float> p2;
+
+  if(byScan){
+    i=0;
+    j=0;
+    while(true){
+      if(i==vPeps[i1].datapoints) return false;
+      if(j==vPeps[i2].datapoints) return false;
+      if(vPeps[i1].profile[i].scanNum<vPeps[i2].profile[j].scanNum){
+        i++;
+        continue;
+      } else if(vPeps[i1].profile[i].scanNum>vPeps[i2].profile[j].scanNum){
+        j++;
+        continue;
+      } else {
+        break;
+      }
+    }
+    while(i<vPeps[i1].datapoints && j<vPeps[i2].datapoints){
+      //Build correlation vectors
+      p1.push_back(vPeps[i1].profile[i++].intensity);
+      p2.push_back(vPeps[i2].profile[j++].intensity);
+    }
+  } else {
+
+    //Find center for each peptide
+    float max;
+    int max1, max2;
+
+    max=0.0f;
+    for(i=0;i<vPeps[i1].datapoints;i++){
+      if(vPeps[i1].profile[i].intensity>max){
+        max=vPeps[i1].profile[i].intensity;
+        max1=i;
+      }
+    }
+
+    max=0.0f;
+    for(i=0;i<vPeps[i2].datapoints;i++){
+      if(vPeps[i2].profile[i].intensity>max){
+        max=vPeps[i2].profile[i].intensity;
+        max2=i;
+      }
+    }
+
+    //Build correlation vectors
+    p1.push_back(vPeps[i1].profile[max1].intensity);
+    p2.push_back(vPeps[i2].profile[max2].intensity);
+
+    j=0;
+    while((max1-j)>0 && (max2-j)>0){
+      j++;
+      if(vPeps[i1].profile[max1-j].interpolated && !interpolate) p1.push_back(0.0f);
+      else p1.push_back(vPeps[i1].profile[max1-j].intensity);
+      if(vPeps[i2].profile[max2-j].interpolated && !interpolate) p2.push_back(0.0f);
+      else p2.push_back(vPeps[i2].profile[max2-j].intensity);
+    }
+
+    j=1;
+    while((max1+j)<vPeps[i1].datapoints && (max2+j)<vPeps[i2].datapoints ){
+      if(vPeps[i1].profile[max1+j].interpolated && !interpolate) p1.push_back(0.0f);
+      else p1.push_back(vPeps[i1].profile[max1+j].intensity);
+      if(vPeps[i2].profile[max2+j].interpolated && !interpolate) p2.push_back(0.0f);
+      else p2.push_back(vPeps[i2].profile[max2+j].intensity);
+      j++;
+    }
+  }
+
+  //Get totals
+  for(i=0;i<p1.size();i++){
+    sumx+=p1[i];
+    sumy+=p2[i];
+    sumxy+=p1[i]*p2[i];
+    sumxx+=p1[i]*p1[i];
+  }
+
+  //Pearsons
+  ax=sumx/p1.size();
+  ay=sumy/p2.size();
+  for(i=0;i<p1.size();i++){
+    xt=p1[i]-ax;
+    yt=p2[i]-ay;
+    sxx+=xt*xt;
+    syy+=yt*yt;
+    sxy+=xt*yt;
+  }
+  rval=sxy/(sqrt(sxx*syy)+TINY);
+  if(rval<0.0) lrval=0.0;  //negative correlations are false hits in this analysis
+  else lrval=rval; 
+
+  df=p1.size()-2;
+  if(df<1) {
+    pval=1.0;
+  } else {
+    t=lrval*sqrt(df/((1-lrval+TINY)*(1+lrval+TINY)));
+    pval=betai(0.5*df,0.5,df/(df+t*t));
+  }
+
+  //Line of best fit
+  slope = (sumx*sumy - p1.size()*sumxy) / (sumx*sumx - p1.size()*sumxx);
+  intercept = (sumx*sumxy - sumy*sumxx) / (sumx*sumx - p1.size()*sumxx);
+
+  sum1=(float)sumx;
+  sum2=(float)sumy;
+
+  return true;
+
+}
+
+double CKronik2::betai(double a, double b, double x){
+  double bt;
+  if(x<0.0 || x>1.0) return 0.0;
+  if(x==0.0 || x==1.0) {
+    bt=0.0;
+  } else {
+    bt=exp(gammaln(a+b)-gammaln(a)-gammaln(b)+a*log(x)+b*log(1.0-x));
+  }
+  if(x<(a+1.0)/(a+b+2.0)) return bt*betacf(a,b,x)/a;
+  else return 1.0-bt*betacf(b,a,1.0-x)/b;
+}
+
+double CKronik2::betacf(double a, double b, double x){
+  int MAXIT = 100;
+  double EPS = 3.0e-7;
+  double FPMIN = 1.0e-30;
+
+  int m,m2;
+  double aa,c,d,del,h,qab,qam,qap;
+
+  qab=a+b;
+  qap=a+1.0;
+  qam=a-1.0;
+  c=1.0;
+  d=1.0-qab*x/qap;
+  if(fabs(d)<FPMIN) d=FPMIN;
+  d=1.0/d;
+  h=d;
+  for(m=1;m<=MAXIT;m++){
+    m2=2*m;
+    aa=m*(b-m)*x/((qam+m2)*(a+m2));
+    d=1.0+aa*d;
+    if(fabs(d)<FPMIN) d=FPMIN;
+    c=1.0+aa/c;
+    if(fabs(c)<FPMIN) c=FPMIN;
+    d=1.0/d;
+    h*=d*c;
+    aa=-(a+m)*(qab+m)*x/((a+m2)*(qap+m2));
+    d=1.0+aa*d;
+    if(fabs(d)<FPMIN) d=FPMIN;
+    c=1.0+aa/c;
+    if(fabs(c)<FPMIN) c=FPMIN;
+    d=1.0/d;
+    del=d*c;
+    h*=del;
+    if(fabs(del-1.0)<EPS) break;
+  }
+  if(m>MAXIT) return 0.0;
+  return h;
+}
+
+double CKronik2::gammaln(double xx){
+  double x,y,tmp,ser;
+  static double cof[6]={76.18009172947146,-86.50532032941677,24.01409824083091,-1.231739572450155,0.1208650973866179e-2,-0.5395239384953e-5};
+  int j;
+
+  y=x=xx;
+  tmp=x+5.5;
+  tmp-=(x+0.5)*log(tmp);
+  ser=1.000000000190015;
+  for(j=0;j<=5;j++) ser+=cof[j]/++y;
+  return -tmp+log(2.5066282746310005*ser/x);
+}
+
+double CKronik2::interpolate(int x1, int x2, double y1, double y2, int x){
+  double m;
+  double b;
+
+  m=(y2-y1)/(x2-x1);
+  b=y2-m*x2;
+  return m*x+b;
+
+}
+
+//--------------------------------
+//  Sorting Functions
+//--------------------------------
+void CKronik2::sortBasePeak(){
+	qsort(&vPeps[0],vPeps.size(),sizeof(sPepProfile),compareBP);
+}
+
+void CKronik2::sortMonoMass(){
+	qsort(&vPeps[0],vPeps.size(),sizeof(sPepProfile),compareMM);
+}
+
+void CKronik2::sortFirstRTime(){
+	qsort(&vPeps[0],vPeps.size(),sizeof(sPepProfile),compareFRT);
+}
+
+void CKronik2::sortIntensityRev(){
+	qsort(&vPeps[0],vPeps.size(),sizeof(sPepProfile),compareIRev);
+}
+
+int CKronik2::compareBP(const void *p1, const void *p2){
+  const sPepProfile d1 = *(sPepProfile *)p1;
+  const sPepProfile d2 = *(sPepProfile *)p2;
+  if(d1.basePeak<d2.basePeak) return -1;
+  else if(d1.basePeak>d2.basePeak) return 1;
+  else return 0;
+}
+
+int CKronik2::compareMM(const void *p1, const void *p2){
+  const sPepProfile d1 = *(sPepProfile *)p1;
+  const sPepProfile d2 = *(sPepProfile *)p2;
+  if(d1.monoMass<d2.monoMass) return -1;
+  else if(d1.monoMass>d2.monoMass) return 1;
+  else return 0;
+}
+
+int CKronik2::compareFRT(const void *p1, const void *p2){
+  const sPepProfile d1 = *(sPepProfile *)p1;
+  const sPepProfile d2 = *(sPepProfile *)p2;
+  if(d1.firstRTime<d2.firstRTime) return -1;
+  else if(d1.firstRTime>d2.firstRTime) return 1;
+  else return 0;
+}
+
+int CKronik2::compareIRev(const void *p1, const void *p2){
+  const sPepProfile d1 = *(sPepProfile *)p1;
+  const sPepProfile d2 = *(sPepProfile *)p2;
+  //cout << d1.intensity << " " << d2.intensity << endl;
+  if(d1.intensity>d2.intensity) return -1;
+  else if(d1.intensity<d2.intensity) return 1;
+  else return 0;
+}
diff --git a/src/app/bullseye/CKronik2.h b/src/app/bullseye/CKronik2.h
new file mode 100644
index 0000000..7e2e13d
--- /dev/null
+++ b/src/app/bullseye/CKronik2.h
@@ -0,0 +1,340 @@
+#pragma once
+
+#include <iostream>
+#include <vector>
+#include <cmath>
+#include <cstring>
+#include <cstdlib>
+#include <cstdio>
+
+using namespace std;
+
+typedef struct sPep{
+  int charge;
+  float intensity;
+  double monoMass;
+	double basePeak;
+  double xCorr;
+	char mods[32];
+} sPep;
+
+typedef struct sScan {
+  vector<sPep> *vPep;
+	int scanNum;
+	char file[256];
+	float rTime;
+
+	//Constructors & Destructor
+	sScan(){vPep = new vector<sPep>;}
+	sScan(const sScan& s){
+		vPep = new vector<sPep>;
+		for(unsigned int i=0;i<s.vPep->size();i++) vPep->push_back(s.vPep->at(i));
+		scanNum = s.scanNum;
+		strcpy(file,s.file);
+		rTime=s.rTime;
+	}
+	~sScan(){delete vPep;}
+
+  //Copy operator
+	sScan& operator=(const sScan& s){
+		if(this!=&s){
+			delete vPep;
+			vPep = new vector<sPep>;
+			for(unsigned int i=0;i<s.vPep->size();i++) vPep->push_back(s.vPep->at(i));
+			scanNum = s.scanNum;
+			strcpy(file,s.file);
+			rTime=s.rTime;
+		}
+		return *this;
+	}
+
+  //Clear
+	void clear(){
+		delete vPep;
+		vPep = new vector<sPep>;
+	}
+
+  static int compareIntRev(const void *p1, const void *p2){
+    const sPep d1 = *(sPep *)p1;
+    const sPep d2 = *(sPep *)p2;
+    if(d1.intensity>d2.intensity) return -1;
+    else if(d1.intensity<d2.intensity) return 1;
+    else return 0;
+  }
+
+  void sortIntRev(){
+    if(vPep->size()==0) return;
+    qsort(&vPep->at(0),vPep->size(),sizeof(sPep),compareIntRev);
+  }
+
+} sScan;
+
+typedef struct sProfileData {
+  bool interpolated;
+
+  int scanNum;
+
+  float intensity;
+  float rTime;
+
+  double monoMass;
+  double xCorr;
+
+  //Constructor
+  sProfileData(){
+    interpolated=false;
+    scanNum=0;
+    intensity=0.0f;
+    rTime=0.0f;
+    monoMass=0.0;
+    xCorr=0.0;
+  }
+} sProfileData;
+
+typedef struct sPepProfile {
+  int lowScan;
+  int highScan;
+  int bestScan;
+  int charge;
+  int MS2Events;
+
+  unsigned int datapoints;
+
+  float rTime;
+  float firstRTime;
+  float lastRTime;
+  float intensity;
+  float sumIntensity;
+
+  double monoMass;
+  double basePeak;
+  double xCorr;
+
+  char mods[32];
+  char gene[32];
+  char sequence[64];
+
+  sProfileData* profile;
+  //sProfileData* gaussProfile;
+
+  //Constructors
+  sPepProfile() {
+    profile = new sProfileData[1];
+    //gaussProfile = new sProfileData[1];
+    sProfileData d;
+    profile[0]=d;
+    //gaussProfile[0]=d;
+    datapoints=0;
+    lowScan=0;
+    highScan=0;
+    bestScan=0;
+    MS2Events=0;
+    charge=0;
+    rTime=0.0f;
+    firstRTime=0.0f;
+    lastRTime=0.0f;
+    intensity=0.0f;
+    sumIntensity=0.0f;
+    monoMass=0.0;
+    basePeak=0.0;
+    xCorr=0.0;
+    strcpy(mods,"");
+    strcpy(sequence,"");
+    strcpy(gene,"");
+  }
+  sPepProfile(const unsigned int i) {
+    profile = new sProfileData[i];
+    //gaussProfile = new sProfileData[i];
+    sProfileData d;
+    unsigned int j;
+    for(j=0;j<i;j++) profile[j]=d;
+    datapoints=i;
+    lowScan=0;
+    highScan=0;
+    bestScan=0;
+    charge=0;
+    MS2Events=0;
+    rTime=0.0f;
+    firstRTime=0.0f;
+    lastRTime=0.0f;
+    intensity=0.0f;
+    sumIntensity=0.0f;
+    monoMass=0.0;
+    basePeak=0.0;
+    xCorr=0.0;
+    strcpy(mods,"");
+    strcpy(sequence,"");
+    strcpy(gene,"");
+  }
+  sPepProfile(const sPepProfile& p){
+    unsigned int i;
+    profile = new sProfileData[p.datapoints];
+    for(i=0;i<p.datapoints;i++) profile[i]=p.profile[i];
+    lowScan = p.lowScan;
+    highScan = p.highScan;
+    bestScan = p.bestScan;
+    charge = p.charge;
+    MS2Events = p.MS2Events;
+    datapoints = p.datapoints;
+    rTime = p.rTime;
+    firstRTime = p.firstRTime;
+    lastRTime = p.lastRTime;
+    intensity = p.intensity;
+    sumIntensity = p.sumIntensity;
+    monoMass = p.monoMass;
+    basePeak = p.basePeak;
+    xCorr = p.xCorr;
+    strcpy(mods,p.mods);
+    strcpy(sequence,p.sequence);
+    strcpy(gene,p.gene);
+  }
+
+  //Destructor
+  ~sPepProfile(){
+    delete [] profile;
+  }
+
+  //Copy operator
+  sPepProfile& operator=(const sPepProfile& p){
+    if(this!=&p){
+      unsigned int i;
+      delete [] profile;
+      profile = new sProfileData[p.datapoints];
+      for(i=0;i<p.datapoints;i++) profile[i]=p.profile[i];
+      lowScan = p.lowScan;
+      highScan = p.highScan;
+      bestScan = p.bestScan;
+      MS2Events = p.MS2Events;
+      charge = p.charge;
+      datapoints = p.datapoints;
+      rTime = p.rTime;
+      firstRTime = p.firstRTime;
+      lastRTime = p.lastRTime;
+      intensity = p.intensity;
+      sumIntensity = p.sumIntensity;
+      monoMass = p.monoMass;
+      basePeak = p.basePeak;
+      xCorr = p.xCorr;
+      strcpy(mods,p.mods);
+      strcpy(sequence,p.sequence);
+      strcpy(gene,p.gene);
+    }
+    return *this;
+  }
+
+  void setPoints(const unsigned int& i){
+    delete [] profile;
+    profile = new sProfileData[i];
+    datapoints=i;
+    sProfileData d;
+    for(unsigned int j=0;j<i;j++) profile[j]=d;
+  }
+
+  static int compareScanNum(const void *p1, const void *p2){
+    const sProfileData d1 = *(sProfileData *)p1;
+    const sProfileData d2 = *(sProfileData *)p2;
+    if(d1.scanNum<d2.scanNum) return -1;
+    else if(d1.scanNum>d2.scanNum) return 1;
+    else return 0;
+  }
+
+  static int compareIntRev(const void *p1, const void *p2){
+    const sProfileData d1 = *(sProfileData *)p1;
+    const sProfileData d2 = *(sProfileData *)p2;
+    if(d1.intensity>d2.intensity) return -1;
+    else if(d1.intensity<d2.intensity) return 1;
+    else return 0;
+  }
+
+  void sortIntRev(){
+    if(datapoints==0) return;
+    qsort(profile,datapoints,sizeof(sProfileData),compareIntRev);
+  }
+
+  void sortScanNum(){
+    if(datapoints==0) return;
+    qsort(profile,datapoints,sizeof(sProfileData),compareScanNum);
+  }
+
+} sPepProfile;
+
+typedef struct iTwo{
+  int scan;
+  int pep;
+} iTwo;
+
+class CKronik2 {
+public:
+
+  //Constructors and destructors
+  CKronik2();
+  CKronik2(const CKronik2& c);
+  ~CKronik2();
+
+  //Operator overrides
+  CKronik2& operator=(const CKronik2& c);
+  sPepProfile& operator[ ](const unsigned int& i);
+
+  //Statistics functions  
+  bool pearson(int i1, int i2, bool byScan, bool interpolate, double& rval, double& pval, double& slope, double& intercept, float& sum1, float& sum2);
+  
+  //Parameter accessors and modifiers
+  void setPPMTol(double d);
+  void setMatchTol(int i);
+  void setGapTol(int i);
+
+  //Automation
+  int getPercent();
+  bool loadHK(char* in);
+  bool processHK(char* in, char* out="\0");
+
+  //Tools
+  bool getRT(int scanNum, float& rt);
+
+  //Filters
+  void filterRT(float rt1, float rt2);
+  void removeContaminants(float rt);
+	void removeMass(double m1, double m2);
+
+  //Data manipulation functions
+  sPepProfile& at(unsigned int i);
+  void add(sPepProfile& p);
+  void clear();
+  void clearHK();
+  void erase(unsigned int i);
+  unsigned int size();
+
+  //Sorting functions
+  void sortBasePeak();
+  void sortMonoMass();
+  void sortFirstRTime();
+  void sortIntensityRev();
+
+protected:
+private:
+  bool findMax(vector<sScan>& v, int& s, int& p);
+  double interpolate(int x1, int x2, double y1, double y2, int x);
+  
+  //Statistics functions
+  double betai(double a, double b, double x);
+  double betacf(double a, double b, double x);
+  double gammaln(double xx);
+
+  //Data Members: data analysis
+  vector<sPepProfile> vPeps;
+  vector<sScan> hkData;
+
+  //Data Members: parameters
+  double dPPMTol;   //default 10.0
+  int iGapTol;      //default 1
+  int iMatchTol;    //Default 3
+  int iPercent;
+
+  //Sorting Functions
+  void sortPeptide();
+  static int compareBP(const void *p1, const void *p2);
+  static int compareMM(const void *p1, const void *p2);
+  static int compareFRT(const void *p1, const void *p2);
+  static int compareIRev(const void *p1, const void *p2);
+
+};
diff --git a/src/app/bullseye/CMakeLists.txt b/src/app/bullseye/CMakeLists.txt
new file mode 100644
index 0000000..13f35db
--- /dev/null
+++ b/src/app/bullseye/CMakeLists.txt
@@ -0,0 +1,48 @@
+project(bullseye)
+
+cmake_minimum_required(VERSION 2.8.1)
+cmake_policy(VERSION 2.8.1)
+
+include_directories(${CMAKE_SOURCE_DIR}/src)
+include_directories(${CMAKE_SOURCE_DIR}/src/app/hardklor)
+include_directories(${CMAKE_BINARY_DIR}/ext/build/src/ProteoWizard/libraries/boost_1_56_0)
+include_directories(${CMAKE_BINARY_DIR}/ext/build/src/ProteoWizard/libraries/boost_aux)
+include_directories(${CMAKE_BINARY_DIR}/ext/include)
+include_directories(${CMAKE_BINARY_DIR}/ext/include/MSToolkit)
+if (WIN32 AND NOT Cygwin)
+  # Needed to put DLL containing type libraries
+  # in include path for Windows
+  include_directories(${CMAKE_BINARY_DIR}/ext/lib)
+endif (WIN32 AND NOT Cygwin)
+
+if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+    set_property(
+      DIRECTORY
+      PROPERTY
+      COMPILE_DEFINITIONS
+      _CRT_SECURE_NO_WARNINGS
+      CRUX
+      SEARCH_ENABLED
+    )
+else (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+  set_property(
+    DIRECTORY
+    PROPERTY
+    COMPILE_DEFINITIONS
+    _LARGEFILE_SOURCE
+    _FILE_OFFSET_BITS=64
+    _GNU_SOURCE
+    CRUX
+    GCC
+    HAVE_EXPAT_CONFIG_H
+    SEARCH_ENABLED
+  )
+endif (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+
+add_library(
+  bullseye
+  STATIC
+  bullseye.cpp
+  CKronik2.cpp
+  CruxBullseyeApplication.cpp
+)
diff --git a/src/app/bullseye/CruxBullseyeApplication.cpp b/src/app/bullseye/CruxBullseyeApplication.cpp
new file mode 100644
index 0000000..8284114
--- /dev/null
+++ b/src/app/bullseye/CruxBullseyeApplication.cpp
@@ -0,0 +1,263 @@
+/**
+ * \file CruxBullseyeApplication.cpp 
+ * \brief Given a ms1 and ms2 file, run hardklor followed by the bullseye algorithm.
+ *****************************************************************************/
+#include "CruxBullseyeApplication.h"
+#include "app/hardklor/CruxHardklorApplication.h"
+#include "util/CarpStreamBuf.h"
+#include "io/DelimitedFileWriter.h"
+
+#include "util/crux-utils.h"
+#include "util/FileUtils.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+
+using namespace std;
+
+/**
+ * \returns a blank CruxBullseyeApplication object
+ */
+CruxBullseyeApplication::CruxBullseyeApplication() {
+}
+
+/**
+ * Destructor
+ */
+CruxBullseyeApplication::~CruxBullseyeApplication() {
+}
+
+int CruxBullseyeApplication::main(int argc, char** argv) {
+  string out_format = Params::GetString("spectrum-format");
+  if (out_format.empty()) {
+    out_format = "ms2";
+  } else if (out_format != "ms2" && out_format != "bms2" &&
+             out_format != "cms2" && out_format != "mgf") {
+    carp(CARP_FATAL, "spectrum-format must be ms2, bms2, cms2, or mgf, but was %s",
+         out_format.c_str());
+  }
+  return main(
+    Params::GetString("MS1 spectra"),
+    Params::GetString("MS2 spectra"),
+    make_file_path("bullseye.pid." + out_format),
+    make_file_path("bullseye.no-pid." + out_format)
+  );
+}
+
+/**
+ * main method for CruxBullseyeApplication
+ */
+int CruxBullseyeApplication::main(
+  const string& input_ms1,
+  const string& input_ms2,
+  const string& match_ms2,
+  const string& nomatch_ms2
+) {
+  /* Get parameters. */
+  string hardklor_output = Params::GetString("hardklor-file");
+  if (hardklor_output.empty()) {
+    hardklor_output = make_file_path("hardklor.mono.txt");
+    if (Params::GetBool("overwrite") || (!FileUtils::Exists(hardklor_output))) {
+      carp(CARP_DEBUG, "Calling hardklor");
+      bool ret = CruxHardklorApplication::main(input_ms1);
+      if (ret != 0) {
+        carp(CARP_WARNING, "Hardklor failed:%d", ret);
+        return ret;
+      }
+    }
+  }
+
+  /* build argument list */
+  vector<string> be_args_vec;
+  be_args_vec.push_back("bullseye");
+  
+  /* add flags */
+  
+  be_args_vec.push_back("-c");
+  be_args_vec.push_back(Params::GetString("max-persist"));
+  
+  if (Params::GetBool("exact-match")) {
+    be_args_vec.push_back("-e");
+    be_args_vec.push_back("-p");
+    be_args_vec.push_back(Params::GetString("exact-tolerance"));
+  }
+  
+  be_args_vec.push_back("-g");
+  be_args_vec.push_back(Params::GetString("gap-tolerance"));
+  
+  be_args_vec.push_back("-r");
+  be_args_vec.push_back(Params::GetString("persist-tolerance"));
+  
+  be_args_vec.push_back("-n");
+  be_args_vec.push_back(Params::GetString("bullseye-min-mass"));
+
+  be_args_vec.push_back("-m");
+  be_args_vec.push_back(Params::GetString("bullseye-max-mass"));
+
+  be_args_vec.push_back("-s"); 
+  be_args_vec.push_back(
+    //TODO- I don't know why bullseye.cpp adds 1 to the value passed in...
+    StringUtils::ToString(Params::GetInt("scan-tolerance") - 1));
+  
+  be_args_vec.push_back("-t");
+  be_args_vec.push_back(Params::GetString("retention-tolerance"));
+  
+
+
+  /* add arguments */
+  be_args_vec.push_back(hardklor_output);
+  be_args_vec.push_back(input_ms2);
+  be_args_vec.push_back(match_ms2);
+  be_args_vec.push_back(nomatch_ms2);
+
+
+  /* build argv line */
+  int be_argc = be_args_vec.size();
+
+  char** be_argv = new char*[be_argc];
+
+  be_argv[0] = (char*)be_args_vec[0].c_str();
+  for (int idx = 1;idx < be_argc ; idx++) {
+    be_argv[idx] = (char*)be_args_vec[idx].c_str();
+    carp(CARP_DEBUG, "be_argv[%d]=%s", idx, be_argv[idx]);
+  }
+
+  // Re-route stream to log file
+  CarpStreamBuf buffer;
+  streambuf* old = cout.rdbuf();
+  cout.rdbuf(&buffer);
+
+  /* Call bullseyeMain */
+  int ret = bullseyeMain(be_argc, be_argv);
+
+  // Recover stream
+  cout.rdbuf(old);
+
+  delete []be_argv;
+
+  return ret;
+}
+
+/**
+ * \returns the command name for CruxBullseyeApplication
+ */
+string CruxBullseyeApplication::getName() const {
+  return "bullseye";
+}
+
+/**
+ * \returns the description for CruxBullseyeApplication
+ */
+string CruxBullseyeApplication::getDescription() const {
+  return
+    "[[nohtml:Assign high resolution precursor m/z values to MS/MS data using "
+    "the Hardklör algorithm.]]"
+    "[[html:<p>Bullseye assigns high resolution precursor m/z values to "
+    "fragmentation (MS2) spectra. Bullseye uses the Hardklör algorithm to "
+    "identify persistent isotope distributions (PPIDs) in precursor (MS1) "
+    "scans. For each PPID, MS2 scans that occur within a specified time and "
+    "m/z range are assigned the average monoisotopic m/z from the PPID "
+    "assigned as the precursor m/z. A detailed description of the Bullseye "
+    "algorithm is given in </p><quote>Hsieh EJ, Hoopmann MR, Maclean B, "
+    "MacCoss MJ. <a href=\"http://pubs.acs.org/doi/abs/10.1021/pr900816a\">"
+    ""Comparison of Database Search Strategies for High Precursor Mass "
+    "Accuracy MS/MS Data"</a>. <em>Journal of Proteome Research</em>. "
+    "9(2):1138-43, 2010.</quote><p>Note that, in complex samples, it is not "
+    "unusual for multiple PPIDs to be found near an MS2 spectrum. In those "
+    "cases, Bullseye will assign both mass measurements to the spectrum. In a "
+    ".ms2 file, multiple Z line entries will be made for the scan number.</p>"
+    "<p>It is possible to reduce the number of scans that receive multiple "
+    "PPIDs by adjusting Bullseye's parameters. For example, reducing the "
+    "retention time tolerance ("--retention-tolerance") or reducing "
+    "the tolerance for persistent peptides ("--persist-tolerance") "
+    "will reduce the chances of multiple PPIDs being assigned.</p><p>Bullseye "
+    "uses Hardklör, so all of the <a href=\"hardklor.html\">Hardklör "
+    "parameters</a> may also be used with Bullseye. For users familiar with "
+    "the standalone version of Bullseye, the parameter mapping is "
+    "<a href=\"bullseye_standalone_to_crux.html\">here</a>.</p>]]";
+}
+
+/**
+ * \returns the command arguments
+ */
+vector<string> CruxBullseyeApplication::getArgs() const {
+  string arr[] = {
+    "MS1 spectra",
+    "MS2 spectra"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command options
+ */
+vector<string> CruxBullseyeApplication::getOptions() const {
+  string arr[] = {
+    "fileroot",
+    "output-dir",
+    "overwrite",
+    "max-persist",
+    "exact-match",
+    "exact-tolerance",
+    "persist-tolerance",
+    "gap-tolerance",
+    "scan-tolerance",
+    "bullseye-max-mass",
+    "bullseye-min-mass",
+    "retention-tolerance",
+    "spectrum-format",
+    "parameter-file",
+    "verbosity"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command outputs
+ */
+vector< pair<string, string> > CruxBullseyeApplication::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("bullseye.pid.<format>",
+    "a file containing the fragmentation spectra for which accurate masses "
+    "were successfully inferred. Unless otherwise specified (with the "
+    "--spectrum-format option), the output file format is \".ms2\". Note that "
+    "if the output format is \".ms2,\" then a single spectrum may have "
+    "multiple \"Z\" lines, each indicating a charge state and accurate mass. "
+    "In addition, Bullseye inserts an \"I\" line (for charge-dependent "
+    "analysis) corresponding to each \"Z\" line. The \"I\" line contains "
+    "\"EZ\" in the second column, the charge and mass from the associated "
+    "\"Z\" line in the third and fourth colummns, followed by the "
+    "chromatographic apex and the intensity at the chromatographic apex."));
+  outputs.push_back(make_pair("bullseye.no-pid.<format>",
+    "a file containing the fragmentation spectra for which accurate masses "
+    "were not inferred."));
+  outputs.push_back(make_pair("hardklor.mono.txt",
+    "a tab-delimited text file containing one line for each isotope "
+    "distribution, as described <a href=\"hardklor.html\">here</a>."));
+  outputs.push_back(make_pair("bullseye.params.txt",
+    "a file containing the name and value of all parameters/options for the "
+    "current operation. Not all parameters in the file may have been used in "
+    "the operation. The resulting file can be used with the --parameter-file "
+    "option for other crux programs."));
+  outputs.push_back(make_pair("bullseye.log.txt",
+    "a log file containing a copy of all messages that were printed to "
+    "standard error."));
+  return outputs;
+}
+
+/**
+ * \returns whether the application needs the output directory or not. (default false).
+ */
+bool CruxBullseyeApplication::needsOutputDirectory() const {
+  return true;
+}
+
+COMMAND_T CruxBullseyeApplication::getCommand() const {
+  return BULLSEYE_COMMAND;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/bullseye/CruxBullseyeApplication.h b/src/app/bullseye/CruxBullseyeApplication.h
new file mode 100644
index 0000000..a83afea
--- /dev/null
+++ b/src/app/bullseye/CruxBullseyeApplication.h
@@ -0,0 +1,85 @@
+/**
+ * \file CruxBullseyeApplication.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 4 November 2011
+ * \brief Interface for calling hardklor.
+ *****************************************************************************/
+#ifndef CRUXBULLSEYEAPPLICATION_H
+#define CRUXBULLSEYEAPPLICATION_H
+
+#include "app/CruxApplication.h"
+
+#include <string>
+#include <fstream>
+
+class CruxBullseyeApplication: public CruxApplication {
+
+ protected:
+
+  //Calls the main method in bullseye
+  int bullseyeMain(int argc, char* argv[]);
+
+ public:
+
+  /**
+   * \returns a blank CruxBullseyeApplication object
+   */
+  CruxBullseyeApplication();
+
+  /**
+   * Destructor
+   */
+  ~CruxBullseyeApplication();
+
+  /**
+   * main method for CruxBullseyeApplication
+   */
+  virtual int main(int argc, char** argv);
+
+  int main(const std::string& input_ms1,
+           const std::string& input_ms2,
+           const std::string& match_ms2,
+           const std::string& nomatch_ms2);
+
+  /**
+   * \returns the command name for CruxBullseyeApplication
+   */
+  virtual std::string getName() const;
+
+  /**
+   * \returns the description for CruxBullseyeApplication
+   */
+  virtual std::string getDescription() const;
+
+  /**
+   * \returns the command arguments
+   */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+   * \returns the command options
+   */
+  virtual std::vector<std::string> getOptions() const;
+
+  /**
+   * \returns the command outputs
+   */
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+  /**
+   * \returns whether the application needs the output directory or not. (default false).
+   */
+  virtual bool needsOutputDirectory() const;
+
+  virtual COMMAND_T getCommand() const;
+};
+
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/bullseye/Makefile b/src/app/bullseye/Makefile
new file mode 100644
index 0000000..ab47d90
--- /dev/null
+++ b/src/app/bullseye/Makefile
@@ -0,0 +1,288 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 2.8
+
+# Default target executed when no arguments are given to make.
+default_target: all
+.PHONY : default_target
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+# A target that is always out of date.
+cmake_force:
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake
+
+# The command to remove a file.
+RM = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The program to use to edit the cache.
+CMAKE_EDIT_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target edit_cache
+edit_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+.PHONY : edit_cache/fast
+
+# Special rule for the target install
+install: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install
+
+# Special rule for the target install
+install/fast: preinstall/fast
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install/fast
+
+# Special rule for the target install/local
+install/local: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local
+
+# Special rule for the target install/local
+install/local/fast: install/local
+.PHONY : install/local/fast
+
+# Special rule for the target install/strip
+install/strip: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip
+
+# Special rule for the target install/strip
+install/strip/fast: install/strip
+.PHONY : install/strip/fast
+
+# Special rule for the target list_install_components
+list_install_components:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
+.PHONY : list_install_components
+
+# Special rule for the target list_install_components
+list_install_components/fast: list_install_components
+.PHONY : list_install_components/fast
+
+# Special rule for the target package
+package: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackConfig.cmake
+.PHONY : package
+
+# Special rule for the target package
+package/fast: package
+.PHONY : package/fast
+
+# Special rule for the target package_source
+package_source:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool for source..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackSourceConfig.cmake /data/TeamCity/buildAgent/work/779d99b0241b2175/CPackSourceConfig.cmake
+.PHONY : package_source
+
+# Special rule for the target package_source
+package_source/fast: package_source
+.PHONY : package_source/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+.PHONY : rebuild_cache/fast
+
+# The main all target
+all: cmake_check_build_system
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles /data/TeamCity/buildAgent/work/779d99b0241b2175/src/app/bullseye/CMakeFiles/progress.marks
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/bullseye/all
+	$(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/bullseye/clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/bullseye/preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/bullseye/preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+.PHONY : depend
+
+# Convenience name for target.
+src/app/bullseye/CMakeFiles/bullseye.dir/rule:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/bullseye/CMakeFiles/bullseye.dir/rule
+.PHONY : src/app/bullseye/CMakeFiles/bullseye.dir/rule
+
+# Convenience name for target.
+bullseye: src/app/bullseye/CMakeFiles/bullseye.dir/rule
+.PHONY : bullseye
+
+# fast build rule for target.
+bullseye/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/bullseye/CMakeFiles/bullseye.dir/build.make src/app/bullseye/CMakeFiles/bullseye.dir/build
+.PHONY : bullseye/fast
+
+CKronik2.o: CKronik2.cpp.o
+.PHONY : CKronik2.o
+
+# target to build an object file
+CKronik2.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/bullseye/CMakeFiles/bullseye.dir/build.make src/app/bullseye/CMakeFiles/bullseye.dir/CKronik2.cpp.o
+.PHONY : CKronik2.cpp.o
+
+CKronik2.i: CKronik2.cpp.i
+.PHONY : CKronik2.i
+
+# target to preprocess a source file
+CKronik2.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/bullseye/CMakeFiles/bullseye.dir/build.make src/app/bullseye/CMakeFiles/bullseye.dir/CKronik2.cpp.i
+.PHONY : CKronik2.cpp.i
+
+CKronik2.s: CKronik2.cpp.s
+.PHONY : CKronik2.s
+
+# target to generate assembly for a file
+CKronik2.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/bullseye/CMakeFiles/bullseye.dir/build.make src/app/bullseye/CMakeFiles/bullseye.dir/CKronik2.cpp.s
+.PHONY : CKronik2.cpp.s
+
+CruxBullseyeApplication.o: CruxBullseyeApplication.cpp.o
+.PHONY : CruxBullseyeApplication.o
+
+# target to build an object file
+CruxBullseyeApplication.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/bullseye/CMakeFiles/bullseye.dir/build.make src/app/bullseye/CMakeFiles/bullseye.dir/CruxBullseyeApplication.cpp.o
+.PHONY : CruxBullseyeApplication.cpp.o
+
+CruxBullseyeApplication.i: CruxBullseyeApplication.cpp.i
+.PHONY : CruxBullseyeApplication.i
+
+# target to preprocess a source file
+CruxBullseyeApplication.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/bullseye/CMakeFiles/bullseye.dir/build.make src/app/bullseye/CMakeFiles/bullseye.dir/CruxBullseyeApplication.cpp.i
+.PHONY : CruxBullseyeApplication.cpp.i
+
+CruxBullseyeApplication.s: CruxBullseyeApplication.cpp.s
+.PHONY : CruxBullseyeApplication.s
+
+# target to generate assembly for a file
+CruxBullseyeApplication.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/bullseye/CMakeFiles/bullseye.dir/build.make src/app/bullseye/CMakeFiles/bullseye.dir/CruxBullseyeApplication.cpp.s
+.PHONY : CruxBullseyeApplication.cpp.s
+
+bullseye.o: bullseye.cpp.o
+.PHONY : bullseye.o
+
+# target to build an object file
+bullseye.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/bullseye/CMakeFiles/bullseye.dir/build.make src/app/bullseye/CMakeFiles/bullseye.dir/bullseye.cpp.o
+.PHONY : bullseye.cpp.o
+
+bullseye.i: bullseye.cpp.i
+.PHONY : bullseye.i
+
+# target to preprocess a source file
+bullseye.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/bullseye/CMakeFiles/bullseye.dir/build.make src/app/bullseye/CMakeFiles/bullseye.dir/bullseye.cpp.i
+.PHONY : bullseye.cpp.i
+
+bullseye.s: bullseye.cpp.s
+.PHONY : bullseye.s
+
+# target to generate assembly for a file
+bullseye.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/bullseye/CMakeFiles/bullseye.dir/build.make src/app/bullseye/CMakeFiles/bullseye.dir/bullseye.cpp.s
+.PHONY : bullseye.cpp.s
+
+# Help Target
+help:
+	@echo "The following are some of the valid targets for this Makefile:"
+	@echo "... all (the default if no target is provided)"
+	@echo "... clean"
+	@echo "... depend"
+	@echo "... bullseye"
+	@echo "... edit_cache"
+	@echo "... install"
+	@echo "... install/local"
+	@echo "... install/strip"
+	@echo "... list_install_components"
+	@echo "... package"
+	@echo "... package_source"
+	@echo "... rebuild_cache"
+	@echo "... CKronik2.o"
+	@echo "... CKronik2.i"
+	@echo "... CKronik2.s"
+	@echo "... CruxBullseyeApplication.o"
+	@echo "... CruxBullseyeApplication.i"
+	@echo "... CruxBullseyeApplication.s"
+	@echo "... bullseye.o"
+	@echo "... bullseye.i"
+	@echo "... bullseye.s"
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/src/app/bullseye/Makefile.bullseye b/src/app/bullseye/Makefile.bullseye
new file mode 100644
index 0000000..ee29b92
--- /dev/null
+++ b/src/app/bullseye/Makefile.bullseye
@@ -0,0 +1,18 @@
+#Set these variables if needed
+C = gcc
+CC = g++
+FLAGS = -O3 -static -D_NOSQLITE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DGCC
+MSTOOLKIT = ../mstoolkit-read-only/
+INCLUDE = -I$(MSTOOLKIT)/include -I$(MSTOOLKIT)/mzParser/include
+PEP = CKronik2.o
+
+
+bullseye : bullseye.cpp $(PEP) 
+	$(CC) $(FLAGS) $(INCLUDE) $(PEP) bullseye.cpp -L$(MSTOOLKIT) -lmstoolkitlite -o bullseye
+
+#PEP objects
+CKronik2.o : CKronik2.cpp
+	$(CC) $(FLAGS) CKronik2.cpp -c
+
+clean:
+	rm -f *.o bullseye
diff --git a/src/app/bullseye/bullseye.cpp b/src/app/bullseye/bullseye.cpp
new file mode 100644
index 0000000..c98cc87
--- /dev/null
+++ b/src/app/bullseye/bullseye.cpp
@@ -0,0 +1,465 @@
+#include "CKronik2.h"
+#include "Spectrum.h"
+#include "MSReader.h"
+#ifdef CRUX
+#include "CruxBullseyeApplication.h"
+#endif
+#include <iostream>
+#include <iomanip>
+#include <vector>
+
+using namespace MSToolkit;
+
+MSFileFormat getFileFormat(char* c);
+void matchMS2(CKronik2& p, char* ms2File, char* outFile, char* outFile2);
+void usage();
+
+double mean,stD;
+double ppmTolerance;
+double rtTolerance;
+bool bMatchPrecursorOnly;
+
+#ifdef CRUX
+int CruxBullseyeApplication::bullseyeMain(int argc, char* argv[]){
+#else
+int main(int argc, char* argv[]){
+#endif
+  int i;
+  CKronik2 p1;
+
+  cout << "Bullseye, v1.30, Apr 20, 2011" << endl;
+  cout << "Copyright 2008-2011 Mike Hoopmann, Ed Hsieh, Mike MacCoss" << endl;
+  cout << "University of Washington" << endl;
+
+  //Set global variables
+  ppmTolerance=10.0;
+  rtTolerance=0.5;
+  bMatchPrecursorOnly=false;
+
+	//Set default parameters for some options
+	double contam=2.0;
+	double maxMass=8000.0;
+	double minMass=600.0;
+
+  if(argc<5){
+    usage();
+		exit(0);
+  }
+
+	if(argc>5){
+		for(i=1;i<argc-4;i+=2){
+			if(argv[i][0]!='-') {
+				cout << "Invalid flag!\n" << endl;
+				usage();
+				exit(0);
+			}
+			switch(argv[i][1]){
+      case 'c':
+        contam=atof(argv[i+1]);
+				break;
+      case 'e':
+        bMatchPrecursorOnly=true;
+        i--;
+        break;
+      case 'g':
+        p1.setGapTol(atoi(argv[i+1]));
+        break;
+      case 'm':
+        maxMass=atof(argv[i+1]);
+				break;
+      case 'n':
+        minMass=atof(argv[i+1]);
+				break;
+			case 'p':
+				ppmTolerance=atof(argv[i+1]);
+				break;
+      case 'r':
+        p1.setPPMTol(atof(argv[i+1]));
+				break;
+      case 's':
+        p1.setMatchTol(atoi(argv[i+1])+1);
+        break;
+			case 't':
+				rtTolerance=atof(argv[i+1]);
+				break;
+			default:
+				cout << "Invalid flag!\n" << endl;
+				usage();
+				exit(0);
+				break;
+			}
+		}
+	}
+
+	p1.processHK(argv[argc-4]);
+	if (p1.size() == 0) {
+		cout << "No analysis results, exiting..." << endl;
+		exit(0);
+	}
+
+	//Remove contaminants
+	CKronik2 tKro;
+	for(i=0;i<(int)p1.size();i++){
+		if( (p1[i].lastRTime-p1[i].firstRTime) <= contam) tKro.add(p1[i]);
+	}
+	p1=tKro;
+	cout << "Persistent peptides after removing contaminants: " << p1.size() << endl;
+
+	//Filter based on size
+	tKro.clear();
+	for(i=0;i<(int)p1.size();i++){
+		if( p1[i].monoMass>=minMass && p1[i].monoMass<=maxMass) tKro.add(p1[i]);
+	}
+	p1=tKro;
+	cout << "Persistent peptides from " << minMass << " to " << maxMass << ": " << p1.size() << endl;
+
+  //p1.findPeps();
+  matchMS2(p1,argv[argc-3],argv[argc-2],argv[argc-1]);
+
+  return 0;
+  
+}
+
+void matchMS2(CKronik2& p, char* ms2File, char* outFile, char* outFile2){
+
+  Spectrum s;
+  MSReader r,rPos,rNeg;
+  MSObject o,o2;
+  int i,j;
+  int fragCount=0;
+  int lookup[8001];
+  double lowMass, highMass,ppm;
+  int x,z;
+  int a,b;
+  int c=0;
+  int d=0;
+  int iPercent=0;
+  int index;
+  vector<int> vI;
+  vector<int> vHit;
+  MSFileFormat posFF, negFF;
+
+  int ch[10];
+  for(i=0;i<10;i++) ch[i]=0;
+
+  char str1[16];
+  char str2[16];
+
+  //Check file formats for output. Make sure the user specifies the appropriate format
+  posFF=getFileFormat(outFile);
+  negFF=getFileFormat(outFile2);
+
+  switch(posFF){
+    case raw:
+    case mzXML:
+    case zs:
+    case uzs:
+    case ms1:
+    case bms1:
+    case cms1:
+    case dunno:
+      cout << "Output file format (pos set) not acceptable. Choose a different format." << endl;
+      exit(-2);
+    default:
+      break;
+  }
+
+  switch(negFF){
+    case raw:
+    case mzXML:
+    case zs:
+    case uzs:
+    case ms1:
+    case bms1:
+    case cms1:
+    case dunno:
+      cout << "Output file format (neg set) not acceptable. Choose a different format." << endl;
+      exit(-2);
+    default:
+      break;
+  }
+
+  //Hardklor results are sorted and indexed to improve speed of Bullseye
+  cout << "Sorting Hardklor results...";
+  p.sortBasePeak();
+  cout << "Done!" << endl;
+
+  cout << "Building lookup table...";
+  j=0;
+  for(i=0;i<8001;i++){
+    while(p.at(j).basePeak<i){
+      if(j>=p.size()-1) break;
+      j++;
+    }
+    lookup[i]=j;
+  }
+  cout << "Done!" << endl;
+
+  //Read in the data
+  cout << "Matching MS/MS..." << endl;
+  cerr << iPercent;
+
+  b=0;
+  z=0;
+  a=0;
+
+  r.setFilter(MS2);
+  r.readFile(ms2File,s);
+
+  o.setHeader(r.getHeader());
+  o2.setHeader(r.getHeader());
+  o.addToHeader("FileGenerator\tBullseye v1.30\n\0");
+  o2.addToHeader("FileGenerator\tBullseye v1.30\n\0");
+
+  rPos.setPrecisionMZ(4);
+  rNeg.setPrecisionMZ(4);
+  rPos.setHighResMGF(true);
+  rNeg.setHighResMGF(false);
+  rPos.writeFile(outFile,posFF,o);
+  rNeg.writeFile(outFile2,negFF,o2);
+
+  while(s.getScanNumber()>0){
+
+    j=(int)(s.getMZ()+0.5);
+    x=0;
+    vHit.clear();
+		
+    //see if we can pick it up on base peak alone
+    for(i=lookup[j-1];i<=lookup[j+1];i++){
+      ppm = (p.at(i).basePeak-s.getMZ())/s.getMZ()*1000000;
+      if( fabs(ppm)<ppmTolerance &&
+          s.getRTime() > p.at(i).firstRTime-rtTolerance &&
+          s.getRTime() < p.at(i).lastRTime+rtTolerance ) {
+        x++;
+        index=i;
+        vHit.push_back(i);
+      }
+    }
+
+    //if base peak wasn't enough, perhaps a different peak was isolated
+    if(!bMatchPrecursorOnly){
+      for(i=0;i<p.size();i++){
+        lowMass = (p.at(i).monoMass+p.at(i).charge*1.00727649)/p.at(i).charge-0.05;
+        switch(p.at(i).charge){
+          case 1:
+            highMass = (p.at(i).monoMass+p.at(i).charge*1.00727649)/p.at(i).charge + 3.10;
+            break;
+          case 2:
+            highMass = (p.at(i).monoMass+p.at(i).charge*1.00727649)/p.at(i).charge + 2.10;
+            break;
+          default:
+            highMass = (p.at(i).monoMass+p.at(i).charge*1.00727649)/p.at(i).charge + 4/p.at(i).charge +0.05;
+            break;
+        }
+        if( s.getMZ() > lowMass &&
+            s.getMZ() < highMass &&
+            s.getRTime() > p.at(i).firstRTime-rtTolerance &&
+            s.getRTime() < p.at(i).lastRTime+rtTolerance ) {
+          x++;
+          index=i;
+          vHit.push_back(i);
+        }
+      }
+    }
+
+    vI.push_back(x);
+    s.setFileType(MS2);
+
+    if(x==0) {
+      z++;
+      o2.add(s);
+      if(o2.size()>500){
+        rNeg.appendFile(outFile2,o2);
+        o2.clear();
+      }
+      ch[0]++;
+    } else if(x==1) {
+      a++;
+      while(s.sizeZ()>0) s.eraseZ(0);
+      if(posFF==mgf){
+        s.addZState(p.at(index).charge,(p.at(index).monoMass+1.00727649*p.at(index).charge)/p.at(index).charge);
+      } else {
+        s.addZState(p.at(index).charge,p.at(index).monoMass+1.00727649);
+        s.addEZState(p.at(index).charge,p.at(index).monoMass+1.00727649,p.at(index).rTime,p.at(index).sumIntensity);
+      }
+      o.add(s);
+      if(o.size()>500){
+        rPos.appendFile(outFile,o);
+        o.clear();
+      }
+      c++;
+    } else {
+      while(s.sizeZ()>0) s.eraseZ(0);
+
+      //erase redundancies in multiple hit list
+      for(i=0;i<vHit.size()-1;i++){
+        for(j=i+1;j<vHit.size();j++){
+          if(p.at(vHit[i]).charge == p.at(vHit[j]).charge) {
+            sprintf(str1,"%.2f\n",p.at(vHit[i]).monoMass+1.00727649);
+            sprintf(str2,"%.2f\n",p.at(vHit[j]).monoMass+1.00727649);
+
+            if(strcmp(str1,str2)==0) {
+              if(p.at(vHit[i]).intensity < p.at(vHit[j]).intensity) vHit[i]=vHit[j];
+              vHit.erase(vHit.begin()+j);
+              j--;
+            }
+
+          }
+        }
+      }
+
+      for(i=0;i<vHit.size();i++) {
+        if(posFF==mgf){
+          s.addZState(p.at(vHit[i]).charge,(p.at(vHit[i]).monoMass+1.00727649*p.at(vHit[i]).charge)/p.at(vHit[i]).charge);
+        } else {
+          s.addZState(p.at(vHit[i]).charge,p.at(vHit[i]).monoMass+1.00727649);
+          s.addEZState(p.at(vHit[i]).charge,p.at(vHit[i]).monoMass+1.00727649,p.at(vHit[i]).rTime,p.at(vHit[i]).sumIntensity);
+        }
+      }
+
+      if(vHit.size()==1) {
+        a++;
+        c++;
+      } else {
+        b++;
+        d+=vHit.size();
+      }
+
+      o.add(s);
+      if(o.size()>500){
+        rPos.appendFile(outFile,o);
+        o.clear();
+      }
+
+    }
+    r.readFile(NULL,s);
+
+    for(i=0;i<vHit.size();i++) ch[p.at(vHit[i]).charge]++;
+
+    //Update file position counter
+    if (r.getPercent() > iPercent){
+      if(iPercent<10) cerr << "\b";
+      else if (iPercent<100) cerr << "\b\b";
+      else cerr << "\b\b\b";
+      cerr.flush();
+      iPercent=r.getPercent();
+      cerr << iPercent;
+      cerr.flush();
+    }
+  }
+
+  rPos.appendFile(outFile,o);
+  rNeg.appendFile(outFile2,o2);
+
+  cerr << endl;
+  cout << "Done!" << endl;
+
+  cout << z << " scans had no visible parental distribution." << endl;
+  cout << a << " scans had a single parental distribution." << endl;
+  cout << b << " scans had multiple possible parental distributions." << endl;
+
+  //Some simple tables of where parental ions are found relative to scan number
+  i=0;
+  a=0;
+  x=0;
+  z=0;
+  b=1;
+  cout << "\nScan:\tNeg\tPos" << endl;
+  while(i<vI.size()){
+    if(vI[i]==0) x++;
+    else z++;
+    a++;
+
+    if(a==1000){
+      cout << b*a << "\t" << x << "\t" << z << endl;
+      x=0;
+      z=0;
+      b++;
+      a=0;
+    }
+
+    i++;
+  }
+
+  cout << b*1000+a << "\t" << x << "\t" << z << endl;
+
+  cout << "\nUnknown charge: " << ch[0] << endl;
+  for(i=1;i<10;i++) cout << "+" << i << ": " << ch[i] << endl;
+
+  cout << c << " singles and " << d << " doubles total." << endl;
+
+}
+
+MSFileFormat getFileFormat(char* c){
+
+	char file[256];
+	char ext[256];
+	char *tok;
+
+	strcpy(file,c);
+	tok=strtok(file,".\n");
+	while(tok!=NULL){
+		strcpy(ext,tok);
+		tok=strtok(NULL,".\n");
+	}
+
+	if(strcmp(ext,"ms1")==0 || strcmp(ext,"MS1")==0) return ms1;
+	if(strcmp(ext,"ms2")==0 || strcmp(ext,"MS2")==0) return ms2;
+	if(strcmp(ext,"bms1")==0 || strcmp(ext,"BMS1")==0) return bms1;
+	if(strcmp(ext,"bms2")==0 || strcmp(ext,"BMS2")==0) return bms2;
+	if(strcmp(ext,"cms1")==0 || strcmp(ext,"CMS1")==0) return cms1;
+	if(strcmp(ext,"cms2")==0 || strcmp(ext,"CMS2")==0) return cms2;
+	if(strcmp(ext,"zs")==0 || strcmp(ext,"ZS")==0) return zs;
+	if(strcmp(ext,"uzs")==0 || strcmp(ext,"UZS")==0) return uzs;
+  if(strcmp(ext,"mgf")==0 || strcmp(ext,"MGF")==0) return mgf;
+	if(strcmp(ext,"mzXML")==0 || strcmp(ext,"MZXML")==0) return mzXML;
+	if(strcmp(ext,"mzML")==0 || strcmp(ext,"MZML")==0) return mzML;
+  if(strcmp(ext,"raw")==0 || strcmp(ext,"RAW")==0) return raw;
+	return dunno;
+
+}
+
+void usage(){
+	cout << "Usage: bullseye [flags] <HK file> <Data file> <Pos file> <Neg file>" << endl;
+	cout << "\n  HK files are Hardklor generated results files." << endl;
+  cout << "  http://proteome.gs.washington.edu/software/hardklor" << endl;
+	cout << "\n  Data files contain the MS/MS data to be used." << endl;
+  cout << "  Acceptable formats:" << endl;
+  cout << "    Thermo RAW (Windows only), .mzXML" << endl;
+  cout << "    .ms2, .bms2, .cms2 (Extracted with MakeMS2)" << endl;
+  cout << "  http://proteome.gs.washington.edu/software/makems2/MakeMS2.zip" << endl;
+  cout << "\n  Pos and Neg files are output files for matches and non-matches, respectively." << endl;
+  cout << "  Acceptable formats (specify with file extension):" << endl;
+  cout << "    .ms2, .bms2, .cms2, .mgf" << endl;
+  cout << "\nExample: bullseye -p 5 Peptides.hk RawData.RAW Matches.ms2 NoMatch.ms2" << endl;
+	cout << "\nFlags:" << endl;
+  cout << "  -c <num>  Ignore peptides that persist for this length in time.\n"
+       << "            These peptides are considered contaminants.\n"
+       << "            The unit of time is whatever unit is used in your data file.\n"
+       << "            Default value: 2\n" << endl;
+  cout << "  -e        Use exact match to precursor ion. Rather than use wide\n"
+       << "            precursor boundaries, this flag forces Bullseye to match\n"
+       << "            precursors to the base isotope peak identified in Hardklor.\n"
+       << "            The tolerance is set with the -p flag.\n" << endl;
+  cout << "  -g <num>  Gap size tolerance when checking for peptides across consecutive\n"
+       << "            scans.\n"
+       << "            Default value: 1\n" << endl;
+  cout << "  -m <num>  Only consider peptides below this maximum mass in daltons.\n"
+       << "            Default value: 8000\n" << endl;
+	cout << "  -n <num>  Only consider peptides above this minimum mass in daltons.\n"
+       << "            Default value: 600\n" << endl;
+	cout << "  -p <num>  Sets the tolerance (+/- ppm) for exact match searches.\n"
+       << "            Default value: 10\n" << endl;
+  cout << "  -r <num>  Sets the tolerance (+/- ppm) for finding persistent peptides.\n"
+       << "            Default value: 5\n" << endl;
+  cout << "  -s <num>  Number of consecutive scans over which a peptide must be\n"
+       << "            observed to be considered real. Gaps in persistence are allowed\n"
+       << "            when setting the -g flag.\n"
+       << "            Default value: 3\n" << endl;
+	cout << "  -t <num>  Sets the tolerance (+/- minutes) around the retention\n"
+		   << "            time over which a peptide can be matched to the MS/MS\n"
+			 << "            spectrum.\n"
+       << "            Default value: 0.5\n" << endl;
+	cout << "\nPlease read the README.txt file for more information on Bullseye." << endl;
+
+}
diff --git a/src/app/bullseye/cmake_install.cmake b/src/app/bullseye/cmake_install.cmake
new file mode 100644
index 0000000..e0c4901
--- /dev/null
+++ b/src/app/bullseye/cmake_install.cmake
@@ -0,0 +1,34 @@
+# Install script for directory: /data/TeamCity/buildAgent/work/779d99b0241b2175/src/app/bullseye
+
+# Set the install prefix
+IF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+  SET(CMAKE_INSTALL_PREFIX "/usr/local")
+ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+  IF(BUILD_TYPE)
+    STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+  ELSE(BUILD_TYPE)
+    SET(CMAKE_INSTALL_CONFIG_NAME "Release")
+  ENDIF(BUILD_TYPE)
+  MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+
+# Set the component getting installed.
+IF(NOT CMAKE_INSTALL_COMPONENT)
+  IF(COMPONENT)
+    MESSAGE(STATUS "Install component: \"${COMPONENT}\"")
+    SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+  ELSE(COMPONENT)
+    SET(CMAKE_INSTALL_COMPONENT)
+  ENDIF(COMPONENT)
+ENDIF(NOT CMAKE_INSTALL_COMPONENT)
+
+# Install shared libraries without execute permission?
+IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+  SET(CMAKE_INSTALL_SO_NO_EXE "0")
+ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+
diff --git a/src/app/bullseye/libbullseye.a b/src/app/bullseye/libbullseye.a
new file mode 100644
index 0000000..5fc8940
Binary files /dev/null and b/src/app/bullseye/libbullseye.a differ
diff --git a/src/app/hardklor/CAveragine.cpp b/src/app/hardklor/CAveragine.cpp
new file mode 100644
index 0000000..7132d34
--- /dev/null
+++ b/src/app/hardklor/CAveragine.cpp
@@ -0,0 +1,306 @@
+#include <iomanip>
+#include <iostream>
+#include "CAveragine.h"
+using namespace std;
+
+CAveragine::CAveragine(char* fn, char* fn2){
+	PT = new CPeriodicTable(fn2);
+  atoms = new int[PT->size()];
+  for(int i=0;i<PT->size();i++) atoms[i]=0;
+  enrich = new vector<atomInfo>;
+  loadTable(fn);
+}
+
+CAveragine::~CAveragine(){
+  delete [] atoms;
+  delete enrich;
+}
+
+void CAveragine::calcAveragine(double dMass, CHardklorVariant hv) {
+  int i,j;
+  int iso;
+  int atom;
+  double fixedD = dMass;
+  double units;
+  double *enr;
+  double *abun;
+  double maxAbun;
+  double totAbun;
+  enr = new double[PT->size()];
+  for(i=0;i<PT->size();i++) enr[i]=0;
+
+  for(i=0;i<hv.sizeEnrich();i++){
+   
+    atom = hv.atEnrich(i).atomNum;
+    iso = enrich->at(atom).numIsotopes;
+    abun = new double[iso];
+
+    //Set our abundance array and find maximum
+    maxAbun=0;
+    for(j=0;j<iso;j++){
+      abun[j]=enrich->at(atom).abundance->at(j);
+      if(abun[j]>maxAbun) maxAbun=abun[j];
+    }
+
+    //Normalize to 1
+    for(j=0;j<iso;j++) abun[j]/=maxAbun;
+    
+    //Normalize, then Calculate enrichment
+    totAbun=0;
+    enr[atom]=0;
+    for(j=0;j<iso;j++){
+      abun[j]/=maxAbun;
+      if(j==hv.atEnrich(i).isotope) abun[j]=(1-hv.atEnrich(i).ape)*abun[j]+hv.atEnrich(i).ape;
+      else abun[j]=(1-hv.atEnrich(i).ape)*abun[j];
+      totAbun+=abun[j];
+      enr[atom]+=abun[j]*enrich->at(atom).mass->at(j);
+    }
+
+    //Calculate average mass
+    enr[atom] /= totAbun;
+    enr[atom] -= PT->at(atom).mass;
+
+    delete [] abun;
+  }
+
+  for(i=0;i<hv.sizeAtom();i++) {
+    
+    atoms[hv.atAtom(i).iLower]+=hv.atAtom(i).iUpper;
+    fixedD -= hv.atAtom(i).iUpper*(PT->at(hv.atAtom(i).iLower).mass + enr[hv.atAtom(i).iLower]);
+  }
+
+  units = (fixedD)/(AVE_MASS + enr[1]*AVE_H + enr[6]*AVE_C + enr[7]*AVE_N + enr[8]*AVE_O + enr[16]*AVE_S);
+
+  //Quick fix; assumes complete periodic table
+  atoms[6] += (int)(AVE_C*units+0.5);
+  atoms[8] += (int)(AVE_O*units+0.5);
+  atoms[7] += (int)(AVE_N*units+0.5);
+  atoms[16] += (int)(AVE_S*units+0.5);
+
+  atoms[1] += (int)(fixedD-( ((int)(AVE_C*units+0.5)) * (PT->at(6).mass + enr[6]) + 
+			     ((int)(AVE_N*units+0.5)) * (PT->at(7).mass + enr[7]) + 
+			     ((int)(AVE_O*units+0.5)) * (PT->at(8).mass + enr[8]) +  
+			     ((int)(AVE_S*units+0.5)) * (PT->at(16).mass + enr[16]) )+0.5);
+
+  delete [] enr;
+
+}
+
+void CAveragine::defaultValues(){
+  
+  string el[109] = {"X","H","He","Li","Be","B","C","N","O","F","Ne","Na","Mg","Al","Si","P","S","Cl","Ar",
+    "K","Ca","Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu","Zn","Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr",
+    "Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn","Sb","Te","I","Xe","Cs","Ba","La","Ce","Pr","Nd","Pm","Sm",
+    "Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb","Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg","Tl","Pb","Bi","Po",
+    "At","Rn","Fr","Ra","Ac","Th","Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm","Md","No","Lr","Hx","Cx","Nx",
+    "Ox","Sx"};
+  int sz[109] = {2,2,2,2,1,2,2,2,3,1,3,1,3,1,3,1,4,2,3,3,6,1,5,2,4,1,4,1,5,2,5,2,5,1,6,2,6,2,4,1,5,1,7,1,7,
+    1,6,2,8,2,10,2,8,1,9,1,7,2,4,1,7,1,7,2,7,1,7,1,6,1,7,2,6,2,5,2,7,2,6,1,7,2,4,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,
+    1,1,1,1,1,2,2,2,3,4};
+  double m[322] = {1.000000000000,2.000000000000,1.007824600000,2.014102100000,3.016030000000,4.002600000000,
+    6.015121000000,7.016003000000,9.012182000000,10.012937000000,11.009305000000,12.000000000000,13.003355400000,
+    14.003073200000,15.000108800000,15.994914100000,16.999132200000,17.999161600000,18.998403200000,
+    19.992435000000,20.993843000000,21.991383000000,22.989767000000,23.985042000000,24.985837000000,
+    25.982593000000,26.981539000000,27.976927000000,28.976495000000,29.973770000000,30.973762000000,
+    31.972070000000,32.971456000000,33.967866000000,35.967080000000,34.968853100000,36.965903400000,
+    35.967545000000,37.962732000000,39.962384000000,38.963707000000,39.963999000000,40.961825000000,
+    39.962591000000,41.958618000000,42.958766000000,43.955480000000,45.953689000000,47.952533000000,
+    44.955910000000,45.952629000000,46.951764000000,47.947947000000,48.947871000000,49.944792000000,
+    49.947161000000,50.943962000000,49.946046000000,51.940509000000,52.940651000000,53.938882000000,
+    54.938047000000,53.939612000000,55.934939000000,56.935396000000,57.933277000000,58.933198000000,
+    57.935346000000,59.930788000000,60.931058000000,61.928346000000,63.927968000000,62.939598000000,
+    64.927793000000,63.929145000000,65.926034000000,66.927129000000,67.924846000000,69.925325000000,
+    68.925580000000,70.924700000000,69.924250000000,71.922079000000,72.923463000000,73.921177000000,
+    75.921401000000,74.921594000000,73.922475000000,75.919212000000,76.919912000000,77.919000000000,
+    79.916520000000,81.916698000000,78.918336000000,80.916289000000,77.914000000000,79.916380000000,
+    81.913482000000,82.914135000000,83.911507000000,85.910616000000,84.911794000000,86.909187000000,
+    83.913430000000,85.909267000000,86.908884000000,87.905619000000,88.905849000000,89.904703000000,
+    90.905644000000,91.905039000000,93.906314000000,95.908275000000,92.906377000000,91.906808000000,
+    93.905085000000,94.905840000000,95.904678000000,96.906020000000,97.905406000000,99.907477000000,
+    98.000000000000,95.907599000000,97.905287000000,98.905939000000,99.904219000000,100.905582000000,
+    101.904348000000,103.905424000000,102.905500000000,101.905634000000,103.904029000000,104.905079000000,
+    105.903478000000,107.903895000000,109.905167000000,106.905092000000,108.904757000000,105.906461000000,
+    107.904176000000,109.903005000000,110.904182000000,111.902758000000,112.904400000000,113.903357000000,
+    115.904754000000,112.904061000000,114.903880000000,111.904826000000,113.902784000000,114.903348000000,
+    115.901747000000,116.902956000000,117.901609000000,118.903310000000,119.902200000000,121.903440000000,
+    123.905274000000,120.903821000000,122.904216000000,119.904048000000,121.903054000000,122.904271000000,
+    123.902823000000,124.904433000000,125.903314000000,127.904463000000,129.906229000000,126.904473000000,
+    123.905894000000,125.904281000000,127.903531000000,128.904780000000,129.903509000000,130.905072000000,
+    131.904144000000,133.905395000000,135.907214000000,132.905429000000,129.906282000000,131.905042000000,
+    133.904486000000,134.905665000000,135.904553000000,136.905812000000,137.905232000000,137.907110000000,
+    138.906347000000,135.907140000000,137.905985000000,139.905433000000,141.909241000000,140.907647000000,
+    141.907719000000,142.909810000000,143.910083000000,144.912570000000,145.913113000000,147.916889000000,
+    149.920887000000,145.000000000000,143.911998000000,146.914895000000,147.914820000000,148.917181000000,
+    149.917273000000,151.919729000000,153.922206000000,150.919847000000,152.921225000000,151.919786000000,
+    153.920861000000,154.922618000000,155.922118000000,156.923956000000,157.924099000000,159.927049000000,
+    158.925342000000,155.925277000000,157.924403000000,159.925193000000,160.926930000000,161.926795000000,
+    162.928728000000,163.929171000000,164.930319000000,161.928775000000,163.929198000000,165.930290000000,
+    166.932046000000,167.932368000000,169.935461000000,168.934212000000,167.933894000000,169.934759000000,
+    170.936323000000,171.936378000000,172.938208000000,173.938859000000,175.942564000000,174.940770000000,
+    175.942679000000,173.940044000000,175.941406000000,176.943217000000,177.943696000000,178.945812000000,
+    179.946545000000,179.947462000000,180.947992000000,179.946701000000,181.948202000000,182.950220000000,
+    183.950928000000,185.954357000000,184.952951000000,186.955744000000,183.952488000000,185.953830000000,
+    186.955741000000,187.955860000000,188.958137000000,189.958436000000,191.961467000000,190.960584000000,
+    192.962917000000,189.959917000000,191.961019000000,193.962655000000,194.964766000000,195.964926000000,
+    197.967869000000,196.966543000000,195.965807000000,197.966743000000,198.968254000000,199.968300000000,
+    200.970277000000,201.970617000000,203.973467000000,202.972320000000,204.974401000000,203.973020000000,
+    205.974440000000,206.975872000000,207.976627000000,208.980374000000,209.000000000000,210.000000000000,
+    222.000000000000,223.000000000000,226.025000000000,227.028000000000,232.038054000000,231.035900000000,
+    234.040946000000,235.043924000000,238.050784000000,237.048000000000,244.000000000000,243.000000000000,
+    247.000000000000,247.000000000000,251.000000000000,252.000000000000,257.000000000000,258.000000000000,
+    259.000000000000,260.000000000000,1.007824600000,2.014102100000,12.000000000000,13.003355400000,
+    14.003073200000,15.000108800000,15.994914100000,16.999132200000,17.999161600000,31.972070000000,
+    32.971456000000,33.967866000000,35.967080000000};
+  double r[322] = {0.900000000000,0.100000000000,0.999855000000,0.000145000000,0.000001380000,0.999998620000,
+    0.075000000000,0.925000000000,1.000000000000,0.199000000000,0.801000000000,0.989160000000,0.010840000000,
+    0.996330000000,0.003660000000,0.997576009706,0.000378998479,0.002044991815,1.000000000000,0.904800000000,
+    0.002700000000,0.092500000000,1.000000000000,0.789900000000,0.100000000000,0.110100000000,1.000000000000,
+    0.922300000000,0.046700000000,0.031000000000,1.000000000000,0.950210000000,0.007450000000,0.042210000000,
+    0.000130000000,0.755290000000,0.244710000000,0.003370000000,0.000630000000,0.996000000000,0.932581000000,
+    0.000117000000,0.067302000000,0.969410000000,0.006470000000,0.001350000000,0.020860000000,0.000040000000,
+    0.001870000000,1.000000000000,0.080000000000,0.073000000000,0.738000000000,0.055000000000,0.054000000000,
+    0.002500000000,0.997500000000,0.043450000000,0.837900000000,0.095000000000,0.023650000000,1.000000000000,
+    0.059000000000,0.917200000000,0.021000000000,0.002800000000,1.000000000000,0.682700000000,0.261000000000,
+    0.011300000000,0.035900000000,0.009100000000,0.691700000000,0.308300000000,0.486000000000,0.279000000000,
+    0.041000000000,0.188000000000,0.006000000000,0.601080000000,0.398920000000,0.205000000000,0.274000000000,
+    0.078000000000,0.365000000000,0.078000000000,1.000000000000,0.009000000000,0.091000000000,0.076000000000,
+    0.236000000000,0.499000000000,0.089000000000,0.506900000000,0.493100000000,0.003500000000,0.022500000000,
+    0.116000000000,0.115000000000,0.570000000000,0.173000000000,0.721700000000,0.278300000000,0.005600000000,
+    0.098600000000,0.070000000000,0.825800000000,1.000000000000,0.514500000000,0.112200000000,0.171500000000,
+    0.173800000000,0.028000000000,1.000000000000,0.148400000000,0.092500000000,0.159200000000,0.166800000000,
+    0.095500000000,0.241300000000,0.096300000000,1.000000000000,0.055400000000,0.018600000000,0.127000000000,
+    0.126000000000,0.171000000000,0.316000000000,0.186000000000,1.000000000000,0.010200000000,0.111400000000,
+    0.223300000000,0.273300000000,0.264600000000,0.117200000000,0.518390000000,0.481610000000,0.012500000000,
+    0.008900000000,0.124900000000,0.128000000000,0.241300000000,0.122200000000,0.287300000000,0.074900000000,
+    0.043000000000,0.957000000000,0.009700000000,0.006500000000,0.003600000000,0.145300000000,0.076800000000,
+    0.242200000000,0.085800000000,0.325900000000,0.046300000000,0.057900000000,0.574000000000,0.426000000000,
+    0.000950000000,0.025900000000,0.009050000000,0.047900000000,0.071200000000,0.189300000000,0.317000000000,
+    0.338700000000,1.000000000000,0.001000000000,0.000900000000,0.019100000000,0.264000000000,0.041000000000,
+    0.212000000000,0.269000000000,0.104000000000,0.089000000000,1.000000000000,0.001060000000,0.001010000000,
+    0.024200000000,0.065930000000,0.078500000000,0.112300000000,0.717000000000,0.000900000000,0.999100000000,
+    0.001900000000,0.002500000000,0.884300000000,0.111300000000,1.000000000000,0.271300000000,0.121800000000,
+    0.238000000000,0.083000000000,0.171900000000,0.057600000000,0.056400000000,1.000000000000,0.031000000000,
+    0.150000000000,0.113000000000,0.138000000000,0.074000000000,0.267000000000,0.227000000000,0.478000000000,
+    0.522000000000,0.002000000000,0.021800000000,0.148000000000,0.204700000000,0.156500000000,0.248400000000,
+    0.218600000000,1.000000000000,0.000600000000,0.001000000000,0.023400000000,0.189000000000,0.255000000000,
+    0.249000000000,0.282000000000,1.000000000000,0.001400000000,0.016100000000,0.336000000000,0.229500000000,
+    0.268000000000,0.149000000000,1.000000000000,0.001300000000,0.030500000000,0.143000000000,0.219000000000,
+    0.161200000000,0.318000000000,0.127000000000,0.974100000000,0.025900000000,0.001620000000,0.052060000000,
+    0.186060000000,0.272970000000,0.136290000000,0.351000000000,0.000120000000,0.999880000000,0.001200000000,
+    0.263000000000,0.142800000000,0.307000000000,0.286000000000,0.374000000000,0.626000000000,0.000200000000,
+    0.015800000000,0.016000000000,0.133000000000,0.161000000000,0.264000000000,0.410000000000,0.373000000000,
+    0.627000000000,0.000100000000,0.007900000000,0.329000000000,0.338000000000,0.253000000000,0.072000000000,
+    1.000000000000,0.001500000000,0.100000000000,0.169000000000,0.231000000000,0.132000000000,0.298000000000,
+    0.068500000000,0.295240000000,0.704760000000,0.014000000000,0.241000000000,0.221000000000,0.524000000000,
+    1.000000000000,1.000000000000,1.000000000000,1.000000000000,1.000000000000,1.000000000000,1.000000000000,
+    1.000000000000,1.000000000000,0.000055000000,0.007200000000,0.992745000000,1.000000000000,1.000000000000,
+    1.000000000000,1.000000000000,1.000000000000,1.000000000000,1.000000000000,1.000000000000,1.000000000000,
+    1.000000000000,1.000000000000,0.999855000000,0.000145000000,0.989160000000,0.010840000000,0.996330000000,
+    0.003660000000,0.997576009706,0.000378998479,0.002044991815,0.950210000000,0.007450000000,0.042210000000,
+    0.000130000000};
+  
+  int i=0;
+  int j=0;
+  int k;
+  atomInfo a;
+
+  for(k=0;k<109;k++){    
+    strcpy(a.symbol,&el[k][0]);
+    a.numIsotopes=sz[k];
+    a.mass->clear();
+    a.abundance->clear();
+    for(j=0;j<a.numIsotopes;j++){
+      a.mass->push_back(m[i]);
+			a.abundance->push_back(r[i]);
+      i++;
+    }
+    enrich->push_back(a);
+  }
+
+}
+
+void CAveragine::clear(){
+  delete [] atoms;
+  atoms = new int[PT->size()];
+  for(int i=0;i<PT->size();i++) atoms[i]=0;
+}
+
+int CAveragine::getElement(int i){
+  return atoms[i];
+}
+
+void CAveragine::getAveragine(char *str){
+  char tstr[10];
+  int i;
+  str[0]=0;
+
+  //Create formula string
+  for(i=0;i<PT->size();i++){
+    if(atoms[i]>0){
+      sprintf(tstr,"%s%i",PT->at(i).symbol,atoms[i]);
+      strcat(str,tstr);
+    }
+  }
+
+}
+
+double CAveragine::getMonoMass(){
+  double d=0;
+  int i;
+
+  for(i=0;i<PT->size();i++) d+=atoms[i]*PT->at(i).mass;
+  return d;
+
+}
+
+CPeriodicTable* CAveragine::getPT(){
+  return PT;
+}
+
+void CAveragine::loadTable(char* c){
+
+  FILE *f;
+  int  j;
+  atomInfo a;
+	double d1,d2;
+
+  if(c==NULL || strlen(c)==0){
+    defaultValues();
+    return;
+  }
+
+  f = fopen(c,"rt");
+  if(f==NULL) {
+    cout << "Cannot read " << c << endl;
+    exit(-1);
+  }
+
+  while(!feof(f)){
+   
+		fscanf(f,"%2s\t%d\n",&a.symbol,&a.numIsotopes);
+    a.mass->clear();
+    a.abundance->clear();
+
+    for(j=0;j<a.numIsotopes;j++){
+      fscanf(f,"%lf\t%lf\n",&d1,&d2);
+			a.mass->push_back(d1);
+			a.abundance->push_back(d2);
+    }
+
+    enrich->push_back(a);
+		fscanf(f," \n");
+
+  }
+
+  fclose(f);
+
+}
+
+//This is not to be used normally - just here to make my life easier.
+void CAveragine::setAveragine(int C, int H, int N, int O, int S){
+  atoms[1]=H;
+  atoms[6]=C;
+  atoms[7]=N;
+  atoms[8]=O;
+  atoms[16]=S;
+}
diff --git a/src/app/hardklor/CAveragine.h b/src/app/hardklor/CAveragine.h
new file mode 100644
index 0000000..3f90b78
--- /dev/null
+++ b/src/app/hardklor/CAveragine.h
@@ -0,0 +1,101 @@
+#ifndef _CAVERAGINE_H
+#define _CAVERAGINE_H
+
+#include "CHardklorVariant.h"
+#include "CPeriodicTable.h"
+
+#include <cstdlib>
+#include <fstream>
+#include <vector>
+#include <cstring>
+
+using namespace std;
+
+/*
+const double AVE_MASS = 111.1254;
+const double AVE_C = 4.9384;
+const double AVE_H = 7.7583;
+const double AVE_N = 1.3577;
+const double AVE_O = 1.4773;
+const double AVE_S = 0.0417;
+*/
+
+const double AVE_MASS = 111.2137;
+const double AVE_C = 4.9558;
+const double AVE_H = 7.8241;
+const double AVE_N = 1.3571;
+const double AVE_O = 1.4716;
+const double AVE_S = 0.0390;
+
+typedef struct atomInfo {
+  char symbol[3];
+  int numIsotopes;
+  vector<double> *mass;
+  vector<double> *abundance;
+  atomInfo(){
+    strcpy(symbol,"X");
+    numIsotopes=0;
+    mass = new vector<double>;
+    abundance = new vector<double>;
+  }
+  atomInfo(const atomInfo& a){
+    strcpy(symbol,a.symbol);
+    numIsotopes=a.numIsotopes;
+    mass = new vector<double>;
+    abundance = new vector<double>;
+    unsigned int i;
+    for(i=0;i<a.mass->size();i++) mass->push_back(a.mass->at(i));
+    for(i=0;i<a.abundance->size();i++) abundance->push_back(a.abundance->at(i));
+  }
+  ~atomInfo(){
+    delete mass;
+    delete abundance;
+  }
+  atomInfo& operator=(const atomInfo& a){
+    if(&a!=this){
+      strcpy(symbol,a.symbol);
+      numIsotopes=a.numIsotopes;
+      delete mass;
+      delete abundance;
+      mass = new vector<double>;
+      abundance = new vector<double>;
+      unsigned int i;
+      for(i=0;i<a.mass->size();i++) mass->push_back(a.mass->at(i));
+      for(i=0;i<a.abundance->size();i++) abundance->push_back(a.abundance->at(i));
+    }
+    return *this;
+  }
+
+} atomInfo;
+
+class CAveragine {
+  
+ public:
+  //Constructors & Destructors
+  //CAveragine();
+  CAveragine(char* fn="ISOTOPE.DAT", char* fn2="Hardklor.dat");
+  ~CAveragine();
+
+  //Methods:
+  void calcAveragine(double,CHardklorVariant);
+  void clear();
+  void defaultValues();
+  void getAveragine(char*);
+  void setAveragine(int,int,int,int,int);
+  int getElement(int);
+  double getMonoMass();
+  CPeriodicTable* getPT();
+  void loadTable(char*);
+
+ protected:
+
+ private:
+  //Data Members:
+  //double monoMass;
+  int *atoms;
+  CPeriodicTable *PT;
+  vector<atomInfo> *enrich;
+
+};
+
+#endif
diff --git a/src/app/hardklor/CHardklor.cpp b/src/app/hardklor/CHardklor.cpp
new file mode 100644
index 0000000..8da5d21
--- /dev/null
+++ b/src/app/hardklor/CHardklor.cpp
@@ -0,0 +1,2280 @@
+
+/*
+   Hardkl�r - Thanks to Aaron Klammer (Klezmer) and 
+              Greg Finney for the name suggestions.
+
+   This program scans through high resolution mass spectra,
+   predicts the monoisotopic mass and charge state of any potential
+   peptides (or proteins), generates predicted isotope distributions 
+	 of averagine and modified averagine molecules matching the mass 
+	 of each distribution, then correlates the various combinations of each 
+   distribution with the spectrum data to find a best match.
+
+   This application was first designed to identify chlorinated peptides,
+	 hence the name Hardkl�r. Due to the distinguishing characteristics of 
+	 a chlorinated distribution, this application makes it possible to predict
+   if the observed distribution is in fact chlorinated. The application
+	 has since been extended to differentiate any measurable atomic or
+	 enrichment modification.
+
+   The application utilizes an object model, so components may
+   be used in other applications. Furthermore, the design was made
+   to be extended, or possibly embedded in other software.
+
+   Version 1.0 is the first public release.
+*/
+	
+#include "CHardklor.h"
+#include "CAveragine.h"
+#include "CMercury8.h"
+#include "CSpecAnalyze.h"
+#include "Smooth.h"
+#include <iomanip>
+using namespace std;
+
+
+SSObject::SSObject(){
+	pepVar = new vector<sInt>;
+	corr=0;
+}
+
+SSObject::SSObject(const SSObject& c){
+  corr = c.corr;
+	pepVar = new vector<sInt>;
+  for(unsigned int i=0;i<c.pepVar->size();i++) pepVar->push_back(c.pepVar->at(i));
+}
+
+SSObject::~SSObject(){
+	delete pepVar;
+}
+
+SSObject& SSObject::operator=(const SSObject& c){
+  if (this != &c) {	
+    corr = c.corr;
+		delete pepVar;
+		pepVar = new vector<sInt>;
+    for(unsigned int i=0;i<c.pepVar->size();i++)	pepVar->push_back(c.pepVar->at(i));
+  }
+  return *this;
+}
+
+void SSObject::addVar(int a, int b){
+	sInt s;
+	s.iLower = a;
+	s.iUpper = b;
+	pepVar->push_back(s);
+}
+
+void SSObject::clear(){
+	delete pepVar;
+	pepVar = new vector<sInt>;
+	corr = 0;
+}
+
+CHardklor::CHardklor(){
+	averagine=NULL;
+	mercury=NULL;
+	bEcho=true;
+  bMem=false;
+}
+
+CHardklor::CHardklor(CAveragine *a, CMercury8 *m){
+  averagine=a;
+  mercury=m;
+  sa.setAveragine(averagine);
+  sa.setMercury(mercury);
+	bEcho=true;
+  bMem=false;
+}
+
+CHardklor::~CHardklor(){
+	averagine=NULL;
+	mercury=NULL;
+}
+
+void CHardklor::Echo(bool b){
+	bEcho=b;
+}
+
+void CHardklor::SetAveragine(CAveragine *a){
+	averagine=a;
+	sa.setAveragine(averagine);
+}
+
+void CHardklor::SetMercury(CMercury8 *m){
+	mercury=m;
+	sa.setMercury(mercury);
+}
+
+int CHardklor::GoHardklor(CHardklorSetting sett, Spectrum* s){
+	cs = sett;
+  Analyze(s);
+  return 0;
+}
+
+//sorts vector of Results from high to low
+int CHardklor::compareData(const void *p1, const void *p2){
+  const Result d1 = *(Result *)p1;
+  const Result d2 = *(Result *)p2;
+  if(d1.data<d2.data) return 1;
+  else if(d1.data>d2.data) return -1;
+  else return 0;
+}
+
+void CHardklor::Analyze(Spectrum* s) {
+
+  //Objects
+  MSReader r;
+  CNoiseReduction nr(&r,cs);
+  PT=averagine->getPT();
+
+  //iterators
+  unsigned int k;   //counters for loops
+
+  int TotalIterations=0;
+  int TotalScans=0;
+  int i;
+
+  //Variables for file and clock management
+  int minutes, seconds;
+  loadTime=0;
+  analysisTime=0;
+  splitTime=0;
+	
+  //placeholders for data output to file
+  //int pepID;
+  //int varID;
+
+  //Variables for some basic information output.
+  int iPercent;
+  int zeroPep=0;   //Stores the number of spectra from which no potential peptides could be identified
+  int manyPep=0;   //Stores the number of spectra from which the number of potential peptides 
+                   //exceeds the user-defined threshold.
+  int lowSigPep=0; //Stores the number of spectra whose max intensity was below the user defined threshold.
+
+  
+  //Build variants (modifications) used in the analysis
+	pepVariants.clear();
+  if(!cs.noBase) {
+    CHardklorVariant hkv;
+    pepVariants.push_back(hkv);
+  }
+  for(k=0;k<cs.variant->size();k++)  pepVariants.push_back(cs.variant->at(k));
+
+  //Our temporary spectrum
+  Spectrum curSpec;
+  Spectrum cutSpec;
+
+  //These are for splitting large spectra
+  bool bCutMe=false;
+  bool ReadScan=false;
+  bool bFirst=true;
+  CSplitSpectrum* cSS;
+  int winCount=0;
+
+  vResults.clear();
+
+  //Ouput file info to user
+	if(bEcho){
+		if(s==NULL) cout << "Reading from file: " << cs.inFile << endl;
+		if(!bMem) cout << "Writing to file: " << cs.outFile << endl;
+	}
+
+  if(cs.fileFormat==dunno) {
+    cout << "Unknown file format or bad extension." << endl;
+    return;
+  }
+
+  //Start of algorithm here.
+  getTimerFrequency(timerFrequency);
+  getExactTime(startTime);
+    
+  //Read in the initial spectrum
+  r.setFilter(cs.mzXMLFilter);
+  r.setRawFilter(cs.rawFilter);
+  if(s!=NULL){
+    curSpec=*s;
+  } else {
+	  if(cs.boxcar==0){
+      if((cs.scan.iLower>0) && (cs.scan.iLower==cs.scan.iUpper)) r.readFile(&cs.inFile[0],curSpec,cs.scan.iLower);
+      else if(cs.scan.iLower>0) r.readFile(&cs.inFile[0],curSpec,cs.scan.iLower);
+	    else r.readFile(&cs.inFile[0],curSpec);
+
+		  //this is the command to filter by persistence without boxcar averaging
+		  //    if(!nr.DeNoise(curSpec)) curSpec.setScanNumber(0);
+
+	  } else {
+		  if(cs.boxcarFilter>0){
+			  if(!nr.DeNoiseC(curSpec)) curSpec.setScanNumber(0);
+		  } else {
+			  if(!nr.DeNoiseD(curSpec)) curSpec.setScanNumber(0);
+		  }
+    }
+  }
+
+  TotalScans++;
+
+  getExactTime(stopTime);
+  tmpTime1=toMicroSec(stopTime);
+  tmpTime2=toMicroSec(startTime);
+  loadTime=tmpTime1-tmpTime2;
+
+  //Check that file was read
+  if(curSpec.getScanNumber()==0) {
+    if(s!=NULL) {
+      cout << "Spectrum is invalid." << endl;
+      return;
+    }
+    if(cs.scan.iLower>0) cout << cs.inFile << " is invalid, or requested scan number is of incorrect format." << endl;
+    else cout << cs.inFile << " is invalid, or contains no spectrum." << endl;
+    return;
+  }
+  currentScanNumber = curSpec.getScanNumber();
+
+  //Open a file for output. Results will be written on the fly as they come out of the algorithm.
+  if(!bMem){
+    fptr.open(&cs.outFile[0],ios::out|ios::app);
+    if(!fptr.good()) cout << "Output file error" << endl;
+    fptr << setiosflags(ios::fixed) << setprecision(4);
+  }
+
+  if(!bMem && cs.xml){
+    fptr << "<Hardklor>" << endl;
+    fptr << "<File InputFilename=\"" << cs.inFile << "\" OutputFilename=\"" << cs.outFile << "\">" << endl;
+    WriteParams(fptr,1);
+  }
+ 
+  //Reset some basic stat counters
+  manyPep=0;
+  zeroPep=0;
+  lowSigPep=0;
+
+  //Set and display on screen percentage counter
+  iPercent=0;
+  if(bEcho) cout << iPercent;
+  
+  //While there is still data to read in the file.
+  while(true){
+
+		//Load next spectrum to analyze
+		if(!bFirst){
+			
+			//close out xml tag for previous spectrum
+			if(!bMem && cs.xml) fptr << "</Spectrum>" << endl;
+
+      if(s!=NULL) break;
+
+		  //track load time
+		  getExactTime(startTime);
+		  if(cs.boxcar==0){
+			  r.readFile(NULL,curSpec);
+			  //case 1: nr.DeNoise(curSpec); break;
+		  } else {
+			  if(cs.boxcarFilter>0) nr.DeNoiseC(curSpec);
+			  else nr.DeNoiseD(curSpec);
+      }
+		  getExactTime(stopTime);
+		  tmpTime1=toMicroSec(stopTime);
+		  tmpTime2=toMicroSec(startTime);
+		  loadTime+=tmpTime1-tmpTime2;	
+
+		} else {
+
+			bFirst=false; //mark that the first scan has been processed
+
+		}
+
+		//Write scan information to output file.
+		if(curSpec.getScanNumber()!=0){	
+      if(!bMem){
+			  if(cs.scan.iUpper>0 && curSpec.getScanNumber()>cs.scan.iUpper) break;
+			  if(cs.reducedOutput) WriteScanLine(curSpec,fptr,2);
+			  else if(cs.xml) WriteScanLine(curSpec,fptr,1);
+			  else WriteScanLine(curSpec,fptr,0);
+      } else {
+        currentScanNumber = curSpec.getScanNumber();
+      }
+		} else {
+			break; //exit if there is no spectrum left to analyze
+		}
+		TotalScans++;
+
+		//Preprocess spectrum
+		//If we have an empty spectrum, go on to the next one
+    if(curSpec.size()==0) continue;
+
+		getExactTime(startTime);
+    if(cs.smooth>0) SG_Smooth(curSpec,cs.smooth,4);
+		//if(curSpec.getScanNumber()==1999){
+		//	for(int xx=0;xx<curSpec.size();xx++) cout << curSpec[xx].mz << "\t" << curSpec[xx].intensity << endl;
+		//}
+
+    //Check our spectrum for file type. Zoom and UltraZoom scans do not
+    //need splitting.
+    if(cs.fileFormat==zs || cs.fileFormat==uzs){
+
+      sa.clear();
+			sa.setParams(cs);
+      sa.setSpectrum(curSpec);
+			sa.FindPeaks();
+			sa.PredictPeptides();
+
+			//do not analyze spectrum with 0 predicted peaks; Keep count of these occurrances.
+			if(sa.predPeak->size()==0){
+				zeroPep++;
+				continue;
+			}
+
+			AnalyzePeaks(sa);
+
+    } else {
+      	
+			//Reinitialize our split spectrum
+			cSS=new CSplitSpectrum(&curSpec,cs);
+			cSS->SetAveragine(averagine);
+			cSS->SetMercury(mercury);
+
+			//Check if data already centroided
+			if(cs.centroid) {
+				if(cs.chargeMode=='F' || cs.chargeMode=='P' || cs.chargeMode=='S'){
+					cout << "-cdm settings of F, P, and S (FFT, Patterson, Senko) only work on profile data." << endl;
+					cout << "Please choose settings of Q or C (QuickCharge, Complete)" << endl;
+					exit(5);
+				}
+				//This function directly copies the already centroided spectra to the CSS object
+				cSS->Centroid(curSpec);
+
+			//if not, process the data here (ultimately includes centroiding)
+			} else {
+				if(cs.boxcarFilter>0){ //TODO: Figure out how filtering interferes here
+          cs.sn=0;
+					cSS->Centroid(curSpec);
+				} else if(cs.staticSN) {
+					if(cs.sn==0) cSS->NoSplitAnalysis();
+					else cSS->NewSNPass(cs.snWindow);
+		  	} else {
+			  	cSS->OverlappingAnalysis(cs.snWindow);
+				 	if(cs.iAnalysis) cSS->IntersectionAnalysis();
+				  else cSS->UnionAnalysis();
+				}
+			}
+		
+			//Split the spectrum
+		  cSS->MakeAnalysis(cs.winSize);
+
+		  //Analyze each window
+		  for(winCount=0;winCount<cSS->getNumWindows();winCount++){
+			  sa = cSS->getWindow(winCount);
+			  sa.setParams(cs);
+			  sa.PredictPeptides();	
+
+			  //do not analyze spectrum with 0 predicted peaks; Keep count of these occurrances.
+			  if(sa.predPeak->size()==0){
+				  zeroPep++;
+				  continue;
+			  }
+
+			  AnalyzePeaks(sa);
+
+		  }
+
+			//clean up cSS object
+			delete cSS;
+
+		}
+
+    //Update the percentage indicator
+		if(bEcho){
+			if (r.getPercent() > iPercent){
+				if(iPercent<10) cout << "\b";
+				else cout << "\b\b";
+				cout.flush();
+				iPercent=r.getPercent();
+				cout << iPercent;
+				cout.flush();
+			}
+		}
+
+		if(!bMem && cs.xml) {
+			fptr << "</Spectrum>" << endl;
+			fptr << "</File>" << endl;
+			fptr << "</Hardklor>" << endl;
+		}
+
+	} //loop to next spectrum (while)
+  
+  //Close the output file and clear it so it can be reused.
+  if(!bMem){
+    fptr.close();
+    fptr.clear();
+  }
+
+	if(bEcho) {
+		cout << "\n" << endl;
+
+		switch(cs.algorithm){
+		case SemiComplete:
+			cout << "SemiComplete analysis:" << endl;
+			break;
+		case SemiCompleteFast:
+			cout << "SemiCompleteFast analysis:" << endl;
+			break;
+		case Dynamic:
+			cout << "Dynamic analysis:" << endl;
+			break;
+		case DynamicSemiComplete:
+			cout << "DynamicSemiComplete analysis:" << endl;
+			break;
+		case SemiSubtractive:
+			cout << "SemiSubtractive analysis:" << endl;
+			break;
+		case FewestPeptides:
+			cout << "FewestPeptides analysis:" << endl;
+			break;
+		case FewestPeptidesChoice:
+			cout << "FewestPeptidesChoice analysis:" << endl;
+			break;
+		case FastFewestPeptides:
+			cout << "FastFewestPeptides analysis:" << endl;
+			break;
+		case FastFewestPeptidesChoice:
+			cout << "FastFewestPeptidesChoice analysis:" << endl;
+			break;
+		case Basic:
+		default:
+			cout << "Basic analysis:" << endl;
+			break;
+		}
+	}
+  
+  //Output the simple statistics
+	if(bEcho) cout << "  Total number of scans analyzed: " << TotalScans << endl;
+  //cout << "  Number of (sub)scans not analyzed:" << endl;
+  //cout << "    No Peptides Predicted: " << zeroPep << endl;
+  //cout << "    Intensity Below Limit: " << lowSigPep << endl;
+  //cout << "  Number of scans with more predicted peptides than were analyzed: " << manyPep << endl;
+	//cout << "  Total Correlations Made: " << TotalIterations << endl;
+
+	//Output the time to analyze this file.
+	if(bEcho){
+		i=(int)timeToSec(loadTime,timerFrequency);
+		minutes = (int)(i/60);
+		seconds = i - (60*minutes);
+		cout << "\nFile access time: " << minutes << " minutes, " << seconds << " seconds." << endl;
+		i=(int)timeToSec(splitTime,timerFrequency);
+		minutes = (int)(i/60);
+		seconds = i - (60*minutes);
+		cout << "Split Time:       " << minutes << " minutes, " << seconds << " seconds." << endl;
+		i=(int)timeToSec(analysisTime,timerFrequency);
+		minutes = (int)(i/60);
+		seconds = i - (60*minutes);
+		cout << "Analysis Time:    " << minutes << " minutes, " << seconds << " seconds." << endl;
+
+		if (minutes==0 && seconds==0){
+			cout << "IMPOSSIBLE!!!" << endl;
+		} else if(minutes <=2){
+			cout << "HOLY FRIJOLE!!" << endl;
+		} else if(minutes<=5) {
+			cout << "Like lightning!" << endl;
+		} else if(minutes<=10){
+			cout << "That's pretty damn fast!" << endl;
+		} else if(minutes<=20){
+			cout << "Monkeys calculate faster than that!" << endl;
+		} else if(minutes<=30){
+			cout << "You should have taken a lunch break." << endl;
+		} else if(minutes<=40){
+			cout << "Oi! Too freakin' slow!!" << endl;
+		} else {
+			cout << "You might be able to eek out some better performance by adjusting your parameters." << endl;
+		}
+	}
+
+	PT=NULL;
+
+}
+
+bool CHardklor::AnalyzePeaks(CSpecAnalyze& sa){
+	
+	int i;
+	SSObject bsso;
+
+	//Arrays for combinatorial analysis
+  float *match;
+  float *mismatch;
+
+	//Track analysis times
+	getExactTime(startTime);
+
+  //Make an averagine distribution for every variant specified in the conf file.
+	sa.MakePredictions(pepVariants);
+
+	//if there are no possible peptides, stop the analysis here.
+	if(sa.predPep->size()==0) {
+		getExactTime(stopTime);
+		tmpTime1=toMicroSec(stopTime);
+		tmpTime2=toMicroSec(startTime);
+		analysisTime+=tmpTime1-tmpTime2;
+		return false;
+	}
+
+	//Restructure mismatch arrays for faster correlation analysis
+	sa.BuildMismatchArrays();
+ 
+  //Send the distributions, and the observed data points from the spectrum to a recursive
+  //algorithm that will sum up every combination of every peptide in each of its chlorinated
+  //forms to find the combination that best fits the data.
+
+	//Dimension our arrays
+	match = new float[sa.peaks.size()];
+	for(i=0;i<sa.peaks.size();i++) match[i]=0;
+
+	if(sa.mismatchSize>0){
+		mismatch = new float[sa.mismatchSize];
+		for(i=0;i<sa.mismatchSize;i++) mismatch[i]=0;
+	} else {
+		mismatch = new float[1];
+		mismatch[0] = 0;
+	}
+
+	//clear prior data and select analysis algorithm
+	bsso.clear();
+	switch(cs.algorithm){
+	case SemiComplete:
+		SemiCompleteMethod(match,mismatch,&bsso,1,cs.depth,0);
+		break;
+	case SemiCompleteFast:
+		SemiCompleteFastMethod(match,mismatch,&bsso,1,cs.depth,0);
+		break;
+	case Dynamic:
+		DynamicMethod(match,mismatch,&bsso,1,cs.depth,0,0);
+		break;
+	case DynamicSemiComplete:
+		DynamicSemiCompleteMethod(match,mismatch,&bsso,1,cs.depth,0,0);
+		break;
+	case SemiSubtractive:
+		SemiSubtractiveMethod(&bsso,cs.depth);
+		break;
+	case FewestPeptides:
+		FewestPeptidesMethod(&bsso,cs.depth);
+		break;
+	case FewestPeptidesChoice:
+		FewestPeptidesChoiceMethod(&bsso,cs.depth);
+		break;
+	case FastFewestPeptides:
+		FastFewestPeptidesMethod(&bsso,cs.depth);
+		break;
+	case FastFewestPeptidesChoice:
+		FastFewestPeptidesChoiceMethod(&bsso,cs.depth);
+		break;
+	case Basic:
+	default:
+		BasicMethod(match,mismatch,&bsso,1,cs.depth,sa.predPep->size()-1);
+		break;
+	}
+
+	//Clean up memory
+	delete [] match;
+	delete [] mismatch;
+
+	//Track analysis times
+	getExactTime(stopTime);
+  tmpTime1=toMicroSec(stopTime);
+  tmpTime2=toMicroSec(startTime);
+	analysisTime+=tmpTime1-tmpTime2;
+		
+	//if we exceeded our threshold, output the data to file or store it in memoryt
+  if(bsso.corr > cs.corr) {
+    if(!bMem){
+		  if(cs.reducedOutput) WritePepLine(bsso,PT,fptr,2);
+      else if(cs.xml) WritePepLine(bsso,PT,fptr,1);
+      else WritePepLine(bsso,PT,fptr,0);
+    } else {
+      ResultToMem(bsso,PT);
+    }
+  }
+    
+	return true;
+}
+
+double CHardklor::LinReg(float *match, float *mismatch){
+
+  int i,sz;
+  double sxx=0,syy=0,sxy=0;
+  vector<sFloat> v;
+  sFloat tmp;
+
+	//Correlate matches
+	for(i=0;i<sa.peaks.size();i++){
+		tmp.fLower = sa.peaks.at(i).intensity;
+		tmp.fUpper = match[i];
+		v.push_back(tmp);
+  }
+
+	//Correlate mismatches with 0
+	for(i=0;i<sa.mismatchSize;i++){
+		if(mismatch[i]>0){
+			tmp.fLower = 0;
+			tmp.fUpper = mismatch[i];
+			v.push_back(tmp);
+		}
+  }
+
+  //Cosine angle correlation
+  sxy=0;
+  sxx=0;
+  syy=0;
+	sz=(int)v.size();
+  for(i=0;i<sz;i++){
+    sxy += (v.at(i).fLower*v.at(i).fUpper);
+    sxx += (v.at(i).fLower*v.at(i).fLower);
+    syy += (v.at(i).fUpper*v.at(i).fUpper);
+  }
+
+  if(sxx>0 && syy>0 && sxy>0) return sxy/sqrt(sxx*syy);
+  else return 0;
+    
+}
+
+
+void CHardklor::BasicMethod(float *match, float *mismatch,SSObject *combo, 
+			     int depth, int maxDepth, int start){
+
+  SSObject bestCombo = *combo;
+  SSObject recCombo;
+  
+  double RCorr;
+  double bestRCorr = combo->corr;
+  int a,k,n;
+	float intensity;
+
+	float *sumMatch;
+	float *sumMismatch;
+
+	sumMatch = new float[sa.peaks.size()];
+	if(sa.mismatchSize>0){
+		sumMismatch = new float[sa.mismatchSize];
+	} else {
+		sumMismatch = new float[1];
+	};
+	
+  //Iterate through all predicted peptides
+  for(k=start; k>-1; k--) {
+
+    //check each variant
+    for(n=0; n<sa.predPep->at(k).VariantListSize(); n++){
+      
+			intensity = sa.predPep->at(k).GetIntensity() - match[sa.predPep->at(k).GetMaxPeakIndex()];
+
+			if(intensity<0) {
+				//This predicted peptide cannot contribute to the analysis, so don't go
+				//any deeper
+				delete [] sumMatch;
+				delete [] sumMismatch;
+				return;
+			};
+
+			//Add the variant to the distribution being analyzed
+			//Do matches first
+			for(a=0;a<sa.peaks.size();a++){
+				sumMatch[a]=sa.predPep->at(k).GetVariant(n).GetMatch(a).intensity*intensity + match[a];
+			};
+
+			//Now add mismatches
+			for(a=0;a<sa.mismatchSize;a++){
+				sumMismatch[a]=sa.predPep->at(k).GetVariant(n).GetMismatch(a).intensity*intensity + mismatch[a];
+			};
+      
+      //Correlate this combined distribution with the mass spec data.
+			//SSIterations++;
+      RCorr = LinReg(sumMatch,sumMismatch);
+
+			//cout << RCorr << endl;
+      
+			recCombo = *combo;
+			recCombo.addVar(k,n);
+			recCombo.corr = RCorr;
+
+			//Check if it is the best, if so, mark it
+			if(recCombo.corr>bestCombo.corr) bestCombo = recCombo;
+
+			//Check recursions
+			if(depth<maxDepth){
+				BasicMethod(sumMatch,sumMismatch,&recCombo,depth+1,maxDepth,k-1);
+			};
+
+			//Check if it is the best, if so, mark it
+			if(recCombo.corr>bestCombo.corr) bestCombo = recCombo;
+      
+    };
+  };
+
+	delete [] sumMatch;
+	delete [] sumMismatch;
+	*combo = bestCombo;
+  
+};
+
+void CHardklor::SemiCompleteMethod(float *match, float *mismatch,SSObject *combo, 
+			     int depth, int maxDepth, int start){
+
+  SSObject bestCombo = *combo;
+  SSObject recCombo;
+  
+  double RCorr;
+  double bestRCorr = combo->corr;
+  int a,n;
+  unsigned int k;
+
+	float *sumMatch;
+	float *sumMismatch;
+
+	sumMatch = new float[sa.peaks.size()];
+	if(sa.mismatchSize>0){
+		sumMismatch = new float[sa.mismatchSize];
+	} else {
+		sumMismatch = new float[1];
+	};
+	
+  //Iterate through all predicted peptides
+  for(k=start; k<sa.predPep->size(); k++) {
+
+    //check each variant
+    for(n=0; n<sa.predPep->at(k).VariantListSize(); n++){
+      
+			//Add the variant to the distribution being analyzed
+			//Do matches first
+			for(a=0;a<sa.peaks.size();a++){
+				sumMatch[a]=sa.predPep->at(k).GetVariant(n).GetMatch(a).intensity + match[a];
+			};
+
+			//Now add mismatches
+			for(a=0;a<sa.mismatchSize;a++){
+				sumMismatch[a]=sa.predPep->at(k).GetVariant(n).GetMismatch(a).intensity + mismatch[a];
+			};
+      
+      //Correlate this combined distribution with the mass spec data.
+			//SSIterations++;
+      RCorr = LinReg(sumMatch,sumMismatch);
+      
+			recCombo = *combo;
+			recCombo.addVar(k,n);
+			recCombo.corr = RCorr;
+
+
+			//Check if it is the best, if so, mark it
+			if(recCombo.corr>bestCombo.corr) bestCombo = recCombo;
+		
+    }
+  }
+
+	//If we reached threshold, stop here without recursion
+	if(bestCombo.corr>cs.corr) {
+		delete [] sumMatch;
+		delete [] sumMismatch;
+		*combo = bestCombo;
+		return;
+	}
+
+	if(depth<maxDepth){
+
+		//Iterate through all predicted peptides
+		for(k=start; k<sa.predPep->size(); k++) {
+
+			//check each variant
+			for(n=0; n<sa.predPep->at(k).VariantListSize(); n++){
+      
+				//Add the variant to the distribution being analyzed
+				//Do matches first
+				for(a=0;a<sa.peaks.size();a++){
+					sumMatch[a]=sa.predPep->at(k).GetVariant(n).GetMatch(a).intensity + match[a];
+				}
+
+				//Now add mismatches
+				for(a=0;a<sa.mismatchSize;a++){
+					sumMismatch[a]=sa.predPep->at(k).GetVariant(n).GetMismatch(a).intensity + mismatch[a];
+				}
+      
+				recCombo = *combo;
+				recCombo.addVar(k,n);
+				recCombo.corr = RCorr;
+
+				//Check recursions
+				SemiCompleteMethod(sumMatch,sumMismatch,&recCombo,depth+1,maxDepth,k+1);
+
+				//Check if it is the best, if so, mark it
+				if(recCombo.corr>bestCombo.corr) bestCombo = recCombo;
+      
+			}
+    }
+  }
+
+	delete [] sumMatch;
+	delete [] sumMismatch;
+	*combo = bestCombo;
+  
+}
+
+void CHardklor::SemiCompleteFastMethod(float *match, float *mismatch,SSObject *combo, 
+			     int depth, int maxDepth, int start){
+
+  SSObject bestCombo = *combo;
+  SSObject recCombo;
+  
+  double RCorr;
+  double bestRCorr = combo->corr;
+  int a,b,n;
+  unsigned int k;
+
+	int numArrays=0;
+	for(k=start;k<sa.predPep->size();k++){
+		numArrays+=sa.predPep->at(k).VariantListSize();
+	}
+
+	float **sumMatch;
+	float **sumMismatch;
+
+	sumMatch = new float* [numArrays];
+	sumMismatch = new float* [numArrays];
+	for(n=0;n<numArrays;n++){
+		sumMatch[n] = new float[sa.peaks.size()];
+		if(sa.mismatchSize>0){
+			sumMismatch[n] = new float[sa.mismatchSize];
+		} else {
+			sumMismatch[n] = new float[1];
+		}
+	}
+	
+	b=0;
+  //Iterate through all predicted peptides
+  for(k=start; k<sa.predPep->size(); k++) {
+
+    //check each variant
+    for(n=0; n<sa.predPep->at(k).VariantListSize(); n++){
+      
+			//Add the variant to the distribution being analyzed
+			//Do matches first
+			for(a=0;a<sa.peaks.size();a++){
+				sumMatch[b][a]=sa.predPep->at(k).GetVariant(n).GetMatch(a).intensity + match[a];
+			}
+
+			//Now add mismatches
+			for(a=0;a<sa.mismatchSize;a++){
+				sumMismatch[b][a]=sa.predPep->at(k).GetVariant(n).GetMismatch(a).intensity + mismatch[a];
+			}
+      
+      //Correlate this combined distribution with the mass spec data.
+			//SSIterations++;
+      RCorr = LinReg(sumMatch[b],sumMismatch[b]);
+      
+			recCombo = *combo;
+			recCombo.addVar(k,n);
+			recCombo.corr = RCorr;
+
+
+			//Check if it is the best, if so, mark it
+			if(recCombo.corr>bestCombo.corr) bestCombo = recCombo;
+      
+			b++;
+    }
+  }
+
+	//If we reached threshold, stop here without recursion
+	if(bestCombo.corr>cs.corr) {
+		for(n=0;n<numArrays;n++) {
+			delete [] sumMatch[n];
+			delete [] sumMismatch[n];
+		};
+		delete [] sumMatch;
+		delete [] sumMismatch;
+
+		*combo = bestCombo;
+		return;
+	}
+
+	if(depth<maxDepth){
+
+		//Iterate through all predicted peptides
+		b=0;
+		for(k=start; k<sa.predPep->size(); k++) {
+
+			//check each variant
+			for(n=0; n<sa.predPep->at(k).VariantListSize(); n++){
+      
+				recCombo = *combo;
+				recCombo.addVar(k,n);
+				recCombo.corr = RCorr;
+
+				//Check recursions
+				SemiCompleteFastMethod(sumMatch[b],sumMismatch[b],&recCombo,depth+1,maxDepth,k+1);
+
+				//Check if it is the best, if so, mark it
+				if(recCombo.corr>bestCombo.corr) bestCombo = recCombo;
+      
+				b++;
+			}
+    }
+  }
+
+	for(n=0;n<numArrays;n++) {
+		delete [] sumMatch[n];
+		delete [] sumMismatch[n];
+	}
+	delete [] sumMatch;
+	delete [] sumMismatch;
+	*combo = bestCombo;
+  
+}
+
+
+void CHardklor::DynamicMethod(float *match, float *mismatch,SSObject *combo, 
+			     int depth, int maxDepth, int start, double corr){
+
+  SSObject bestCombo = *combo;
+  SSObject recCombo;
+  
+  double RCorr;
+  double bestRCorr = combo->corr;
+  int a,n;
+  unsigned int k;
+
+	float *sumMatch;
+	float *sumMismatch;
+
+	sumMatch = new float[sa.peaks.size()];
+	if(sa.mismatchSize>0){
+		sumMismatch = new float[sa.mismatchSize];
+	} else {
+		sumMismatch = new float[1];
+	};
+	
+  //Iterate through all predicted peptides
+  for(k=start; k<sa.predPep->size(); k++) {
+
+    //check each variant
+    for(n=0; n<sa.predPep->at(k).VariantListSize(); n++){
+      
+			//Add the variant to the distribution being analyzed
+			//Do matches first
+			for(a=0;a<sa.peaks.size();a++){
+				sumMatch[a]=sa.predPep->at(k).GetVariant(n).GetMatch(a).intensity + match[a];
+			};
+
+			//Now add mismatches
+			for(a=0;a<sa.mismatchSize;a++){
+				sumMismatch[a]=sa.predPep->at(k).GetVariant(n).GetMismatch(a).intensity + mismatch[a];
+			};
+      
+      //Correlate this combined distribution with the mass spec data.
+			//SSIterations++;
+      RCorr = LinReg(sumMatch,sumMismatch);
+
+			//cout << "RCorr = " << RCorr << endl;
+      
+			recCombo = *combo;
+			recCombo.addVar(k,n);
+			recCombo.corr = RCorr;
+
+			//Check if it is the best, if so, mark it
+			if(recCombo.corr>bestCombo.corr) bestCombo = recCombo;
+
+			//Check recursions if better than previously
+			if(depth < maxDepth && RCorr > corr){
+				DynamicMethod(sumMatch,sumMismatch,&recCombo,depth+1,maxDepth,k+1,RCorr);
+				if(recCombo.corr>bestCombo.corr) bestCombo = recCombo;
+			};
+      
+    };
+  };
+
+	delete [] sumMatch;
+	delete [] sumMismatch;
+	*combo = bestCombo;
+  
+};
+
+
+void CHardklor::DynamicSemiCompleteMethod(float *match, float *mismatch,SSObject *combo, 
+			     int depth, int maxDepth, int start, double corr){
+
+  SSObject bestCombo = *combo;
+  SSObject recCombo;
+  
+  double RCorr;
+  double bestRCorr = combo->corr;
+  int a,b,n;
+  unsigned int k;
+
+	vector<double> vecCorr;
+
+	float *sumMatch;
+	float *sumMismatch;
+
+	sumMatch = new float[sa.peaks.size()];
+	if(sa.mismatchSize>0){
+		sumMismatch = new float[sa.mismatchSize];
+	} else {
+		sumMismatch = new float[1];
+	}
+	
+  //Iterate through all predicted peptides
+	b=0;
+  for(k=start; k<sa.predPep->size(); k++) {
+
+    //check each variant
+    for(n=0; n<sa.predPep->at(k).VariantListSize(); n++){
+      
+			//Add the variant to the distribution being analyzed
+			//Do matches first
+			for(a=0;a<sa.peaks.size();a++){
+				sumMatch[a]=sa.predPep->at(k).GetVariant(n).GetMatch(a).intensity + match[a];
+			}
+
+			//Now add mismatches
+			for(a=0;a<sa.mismatchSize;a++){
+				sumMismatch[a]=sa.predPep->at(k).GetVariant(n).GetMismatch(a).intensity + mismatch[a];
+			}
+      
+      //Correlate this combined distribution with the mass spec data.
+			//SSIterations++;
+      RCorr = LinReg(sumMatch,sumMismatch);
+      
+			recCombo = *combo;
+			recCombo.addVar(k,n);
+			recCombo.corr = RCorr;
+
+			vecCorr.push_back(RCorr);
+			b++;
+
+			//Check if it is the best, if so, mark it
+			if(recCombo.corr>bestCombo.corr) bestCombo = recCombo;
+      
+    }
+  }
+
+	//If we reached threshold, stop here without recursion
+	if(bestCombo.corr>cs.corr) {
+		delete [] sumMatch;
+		delete [] sumMismatch;
+		*combo = bestCombo;
+		return;
+	}
+
+
+	//Otherwise, if we're not at the maximum depth, iterate
+	b=0;
+	if(depth < maxDepth) {
+
+		//Iterate through all predicted peptides
+		for(k=start; k<sa.predPep->size(); k++) {
+
+			//check each variant
+			for(n=0; n<sa.predPep->at(k).VariantListSize(); n++){
+
+				if(vecCorr.at(b) > corr) {
+      
+					//Add the variant to the distribution being analyzed
+					//Do matches first
+					for(a=0;a<sa.peaks.size();a++){
+						sumMatch[a]=sa.predPep->at(k).GetVariant(n).GetMatch(a).intensity + match[a];
+					}
+
+					//Now add mismatches
+					for(a=0;a<sa.mismatchSize;a++){
+						sumMismatch[a]=sa.predPep->at(k).GetVariant(n).GetMismatch(a).intensity + mismatch[a];
+					}
+      
+					recCombo = *combo;
+					recCombo.addVar(k,n);
+					recCombo.corr = vecCorr.at(b);
+
+					//Check recursions
+					DynamicSemiCompleteMethod(sumMatch,sumMismatch,&recCombo,depth+1,maxDepth,k+1,vecCorr.at(b));
+
+					//Check if it is the best, if so, mark it
+					if(recCombo.corr>bestCombo.corr) bestCombo = recCombo;
+
+				}
+				b++;
+      
+			}
+		}
+
+	}
+
+	delete [] sumMatch;
+	delete [] sumMismatch;
+	*combo = bestCombo;
+  
+};
+
+void CHardklor::SemiSubtractiveMethod(SSObject *combo, int maxDepth){
+
+  SSObject bestCombo = *combo;
+  SSObject recCombo;
+	SSObject depthCombo;
+  
+  double RCorr;
+  int a,n;
+  unsigned int k;
+	bool bSkip;
+
+	int depth=0;
+
+	float *sumMatch;
+	float *sumMismatch;
+	float *sumMatchMem;
+	float *sumMismatchMem;
+
+	sumMatch = new float[sa.peaks.size()];
+	sumMatchMem = new float[sa.peaks.size()];
+	if(sa.mismatchSize>0){
+		sumMismatch = new float[sa.mismatchSize];
+		sumMismatchMem = new float[sa.mismatchSize];
+	} else {
+		sumMismatch = new float[1];
+		sumMismatchMem = new float[1];
+	}
+
+	for(a=0;a<sa.peaks.size();a++){
+		sumMatchMem[a]=0;
+	}
+	for(a=0;a<sa.mismatchSize;a++){
+		sumMismatchMem[a]=0;
+	}
+
+	while(depth < maxDepth) {
+
+		cout << "Depth: " << depth << " of " << maxDepth << endl;
+
+		depthCombo = bestCombo;
+
+		//Iterate through all predicted peptides
+		for(k=0; k<sa.predPep->size(); k++) {
+
+			//Skip peptides we have already analyzed.
+			bSkip=false;
+			for(n=0;n<(int)bestCombo.pepVar->size();n++){
+				if(bestCombo.pepVar->at(n).iLower==k) {
+					bSkip=true;
+					break;
+				}
+			}
+			if(bSkip) continue;
+
+			//check each variant
+			for(n=0; n<sa.predPep->at(k).VariantListSize(); n++){
+      
+				//Add the variant to the distribution being analyzed
+				//Do matches first
+				for(a=0;a<sa.peaks.size();a++){
+					sumMatch[a]=sa.predPep->at(k).GetVariant(n).GetMatch(a).intensity + sumMatchMem[a];
+				}
+
+				//Now add mismatches
+				for(a=0;a<sa.mismatchSize;a++){
+					sumMismatch[a]=sa.predPep->at(k).GetVariant(n).GetMismatch(a).intensity + sumMismatchMem[a];
+				}
+      
+				//Correlate this combined distribution with the mass spec data.
+				//SSIterations++;
+		    RCorr = LinReg(sumMatch,sumMismatch);
+				cout << RCorr << endl;
+      
+				recCombo = depthCombo;
+				recCombo.addVar(k,n);
+				recCombo.corr = RCorr;
+
+				//Check if it is the best, if so, mark it
+				if(recCombo.corr>bestCombo.corr) bestCombo = recCombo;
+      
+			}
+
+		}
+
+		//If we reached threshold, stop here without recursion
+		if(bestCombo.corr>cs.corr) {
+			delete [] sumMatch;
+			delete [] sumMismatch;
+			delete [] sumMatchMem;
+			delete [] sumMismatchMem;
+			*combo = bestCombo;
+			return;
+		}
+
+		if(bestCombo.corr>0) {
+			//Copy the best correlated data for the next iteration
+			k = bestCombo.pepVar->at(bestCombo.pepVar->size()-1).iLower;
+			n = bestCombo.pepVar->at(bestCombo.pepVar->size()-1).iUpper;
+
+			//Do matches first
+			for(a=0;a<sa.peaks.size();a++){
+				sumMatchMem[a]+=sa.predPep->at(k).GetVariant(n).GetMatch(a).intensity;
+			}
+
+			//Now add mismatches
+			for(a=0;a<sa.mismatchSize;a++){
+				sumMismatchMem[a]+=sa.predPep->at(k).GetVariant(n).GetMismatch(a).intensity;
+			}
+		}
+
+		depth++;
+
+	}
+
+	delete [] sumMatch;
+	delete [] sumMismatch;
+	delete [] sumMatchMem;
+	delete [] sumMismatchMem;
+	*combo = bestCombo;
+  
+}
+
+
+void CHardklor::FewestPeptidesMethod(SSObject *combo, int maxDepth){
+
+  SSObject recCombo;
+	SSObject bestCombo = *combo;
+  
+  double RCorr;
+  int a,b,j,k,n,pos;
+	int pepID,varID;
+
+	int depth=0;
+	int countDown=0;
+	int comboListCounter=0;
+
+	float intensity;
+
+	float *sumMatch;
+	float *sumMismatch;
+	float *priorMatch;
+	float *priorMismatch;
+
+	sumMatch = new float[sa.peaks.size()];
+	priorMatch = new float[sa.peaks.size()];
+	if(sa.mismatchSize>0){
+		sumMismatch = new float[sa.mismatchSize];
+		priorMismatch = new float[sa.mismatchSize];
+	} else {
+		sumMismatch = new float[1];
+		priorMismatch = new float[1];
+	};
+
+	vector<SSObject> comboList;
+	comboList.push_back(*combo);
+	comboListCounter++;
+
+	/*
+	for(j=0;j<sa.peaks.size();j++){
+		cout << sa.peaks.at(j).mz << " " << sa.peaks.at(j).intensity << endl;
+	};
+	*/
+
+	while(depth < maxDepth && depth < (int)sa.predPep->size()) {
+
+		countDown=comboListCounter;
+		comboListCounter=0;
+		pos=0;
+
+		//scan through current list of combos
+		while(pos < countDown){
+
+			//cout << depth+1 << " of " << maxDepth << "\t" << pos << " of " << countDown << " with " << sa.predPep->size() << endl;
+
+			//clear old priors data 
+			for(a=0;a<sa.peaks.size();a++) priorMatch[a]=0;
+			for(a=0;a<sa.mismatchSize;a++) priorMismatch[a]=0;
+
+			//recreate prior match and mismatch data
+			for(n=0;n<(int)comboList.at(pos).pepVar->size();n++){
+				pepID = comboList.at(pos).pepVar->at(n).iLower;
+				varID = comboList.at(pos).pepVar->at(n).iUpper;
+
+				intensity = sa.predPep->at(pepID).GetIntensity() - priorMatch[sa.predPep->at(pepID).GetMaxPeakIndex()];
+
+				for(a=0;a<sa.peaks.size();a++){
+					priorMatch[a]+=sa.predPep->at(pepID).GetVariant(varID).GetMatch(a).intensity*intensity;
+				};
+				for(a=0;a<sa.mismatchSize;a++){
+					priorMismatch[a]+=sa.predPep->at(pepID).GetVariant(varID).GetMismatch(a).intensity*intensity;
+				};
+			};
+
+			if(comboList.at(pos).pepVar->size()>0){
+				b = comboList.at(pos).pepVar->at(comboList.at(pos).pepVar->size()-1).iLower - 1;
+			} else {
+				b = sa.predPep->size()-1;
+			};
+
+			//add every peptide & every variant
+			for(j=b;j>-1;j--){
+	
+				intensity = sa.predPep->at(j).GetIntensity() - priorMatch[sa.predPep->at(j).GetMaxPeakIndex()];
+
+				if(intensity<0) {
+					//This predicted peptide cannot contribute to the analysis, so don't go
+					//any deeper
+					continue;
+				};
+
+				//iterate through variants now
+				for(k=0;k<sa.predPep->at(j).VariantListSize();k++){
+
+					//sum matches and mismatches
+					for(a=0;a<sa.peaks.size();a++){
+						sumMatch[a]=sa.predPep->at(j).GetVariant(k).GetMatch(a).intensity*intensity + priorMatch[a];
+					};
+
+					//Now add mismatches
+					for(a=0;a<sa.mismatchSize;a++){
+						sumMismatch[a]=sa.predPep->at(j).GetVariant(k).GetMismatch(a).intensity*intensity + priorMismatch[a];
+					};
+
+					//Correlate this combined distribution with the mass spec data.
+					//SSIterations++;
+					RCorr = LinReg(sumMatch,sumMismatch);
+					//cout << RCorr << endl;
+      
+					recCombo = comboList.at(0);
+					recCombo.addVar(j,k);
+					recCombo.corr = RCorr;
+
+					//Check if it is the best, if so, mark it
+					if(recCombo.corr>bestCombo.corr) bestCombo = recCombo;
+
+					//Add to our list of combos to analyze in the future
+					if(depth<maxDepth-1){
+						comboList.push_back(recCombo);
+						comboListCounter++;
+					};
+
+				};//for k
+
+			};//for j
+
+			//delete our prior combo from the list
+			//comboList.erase(comboList.begin());
+			//countDown--;
+			pos++;
+
+		};//while countDown
+
+		comboList.erase(comboList.begin(),comboList.begin()+countDown);
+
+		//check best to see if it exceeded threshold
+		if(bestCombo.corr>cs.corr) {
+			delete [] sumMatch;
+			delete [] sumMismatch;
+			delete [] priorMatch;
+			delete [] priorMismatch;
+			*combo = bestCombo;
+			return;
+		};
+
+		//otherwise, we iterate
+		depth++;
+
+	};//while depth
+
+	//return the best we got
+	delete [] sumMatch;
+	delete [] sumMismatch;
+	delete [] priorMatch;
+	delete [] priorMismatch;
+	*combo = bestCombo;
+  
+};
+
+void CHardklor::FewestPeptidesChoiceMethod(SSObject *combo, int maxDepth){
+
+  SSObject recCombo;
+	SSObject bestCombo = *combo;
+  
+  double RCorr;
+  int a,j,k,n;
+	int pepID,varID;
+
+	int depth=0;
+	int countDown=0;
+	int comboListCounter=0;
+	int start;
+
+	float intensity;
+
+	float *sumMatch;
+	float *sumMismatch;
+	float *priorMatch;
+	float *priorMismatch;
+
+	sumMatch = new float[sa.peaks.size()];
+	priorMatch = new float[sa.peaks.size()];
+	if(sa.mismatchSize>0){
+		sumMismatch = new float[sa.mismatchSize];
+		priorMismatch = new float[sa.mismatchSize];
+	} else {
+		sumMismatch = new float[1];
+		priorMismatch = new float[1];
+	};
+
+	vector<SSObject> comboList;
+	comboList.push_back(*combo);
+	comboListCounter++;
+
+	while(depth < maxDepth && depth < (int)sa.predPep->size()) {
+
+		countDown=comboListCounter;
+		comboListCounter=0;
+
+		//scan through current list of combos
+		while(countDown>0){
+
+			//clear old priors data
+			for(a=0;a<sa.peaks.size();a++) priorMatch[a]=0;
+			for(a=0;a<sa.mismatchSize;a++) priorMismatch[a]=0;
+
+			//recreate prior match and mismatch data
+			for(n=0;n<(int)comboList.at(0).pepVar->size();n++){
+				pepID = comboList.at(0).pepVar->at(n).iLower;
+				varID = comboList.at(0).pepVar->at(n).iUpper;
+
+				intensity = sa.predPep->at(pepID).GetIntensity() - priorMatch[sa.predPep->at(pepID).GetMaxPeakIndex()];
+
+				for(a=0;a<sa.peaks.size();a++){
+					priorMatch[a]+=sa.predPep->at(pepID).GetVariant(varID).GetMatch(a).intensity*intensity;
+				};
+				for(a=0;a<sa.mismatchSize;a++){
+					priorMismatch[a]+=sa.predPep->at(pepID).GetVariant(varID).GetMismatch(a).intensity*intensity;
+				};
+			};
+
+			if(comboList.at(0).pepVar->size()>0) start = comboList.at(0).pepVar->at(comboList.at(0).pepVar->size()-1).iLower-1;
+			else start = sa.predPep->size()-1;
+
+			//add every peptide & every variant
+			for(j=start;j>-1;j--){
+			
+				intensity = sa.predPep->at(j).GetIntensity() - priorMatch[sa.predPep->at(j).GetMaxPeakIndex()];
+				if(intensity<0) {
+					//This predicted peptide cannot contribute to the analysis, so don't go
+					//any deeper
+					continue;
+				};
+
+				//iterate through variants now
+				for(k=0;k<sa.predPep->at(j).VariantListSize();k++){
+
+					//Add the variant to the distribution being analyzed
+					//Do matches first
+					for(a=0;a<sa.peaks.size();a++){
+						sumMatch[a]=sa.predPep->at(j).GetVariant(k).GetMatch(a).intensity*intensity + priorMatch[a];
+					};
+
+					//Now add mismatches
+					for(a=0;a<sa.mismatchSize;a++){
+						sumMismatch[a]=sa.predPep->at(j).GetVariant(k).GetMismatch(a).intensity*intensity + priorMismatch[a];
+					};
+
+					//Correlate this combined distribution with the mass spec data.
+					//SSIterations++;
+					RCorr = LinReg(sumMatch,sumMismatch);
+					//cout << RCorr << endl;
+      
+					recCombo = comboList.at(0);
+					recCombo.addVar(j,k);
+					recCombo.corr = RCorr;
+
+					//Check if it is the best, if so, mark it
+					if(recCombo.corr>bestCombo.corr) bestCombo = recCombo;
+
+					//Add to our list of combos to analyze in the future if above a lower threshhold
+					if(RCorr > (cs.corr/2)) {
+						comboList.push_back(recCombo);
+						comboListCounter++;
+					};
+
+				};//for k
+
+			};//for j
+
+			//delete our prior combo from the list
+			comboList.erase(comboList.begin());
+			countDown--;
+
+		};//while countDown
+
+		//check best to see if it exceeded threshold
+		if(bestCombo.corr>cs.corr) {
+			delete [] sumMatch;
+			delete [] sumMismatch;
+			delete [] priorMatch;
+			delete [] priorMismatch;
+			*combo = bestCombo;
+			return;
+		};
+
+		//otherwise, we iterate
+		depth++;
+
+	};//while depth
+
+	//return the best we got
+	delete [] sumMatch;
+	delete [] sumMismatch;
+	delete [] priorMatch;
+	delete [] priorMismatch;
+	*combo = bestCombo;
+  
+};
+
+
+void CHardklor::FastFewestPeptidesMethod(SSObject *combo, int maxDepth){
+
+  SSObject recCombo;
+	SSObject bestCombo = *combo;
+
+	vector<SSObject> *comboListA;
+	vector<SSObject> *comboListB;
+	comboListA = new vector<SSObject>;
+  comboListB = new vector<SSObject>;
+	comboListA->push_back(*combo);
+	comboListB->push_back(*combo);
+
+  double RCorr;
+  int a,b,j,k;
+	//int x;
+
+	int depth=0;
+	float intensity=0.0f;
+
+	float **sumMatchA;
+	float **sumMismatchA;
+	float **sumMatchB;
+	float **sumMismatchB;
+
+	float *sumMatchC;
+	float *sumMismatchC;
+
+	//Initialize arrays
+	sumMatchA = new float* [1];
+	sumMismatchA = new float* [1];
+	sumMatchA[0] = new float[sa.peaks.size()];
+	if(sa.mismatchSize>0) sumMismatchA[0] = new float[sa.mismatchSize];
+	else sumMismatchA[0] = new float[1];
+
+	sumMatchB = new float* [1];
+	sumMismatchB = new float* [1];
+	sumMatchB[0] = new float[sa.peaks.size()];
+	if(sa.mismatchSize>0) sumMismatchB[0] = new float[sa.mismatchSize];
+	else sumMismatchB[0] = new float[1];
+
+	sumMatchC = new float[sa.peaks.size()];
+	if(sa.mismatchSize>0) sumMismatchC = new float[sa.mismatchSize];
+	else sumMismatchC = new float[1];
+
+	for(a=0;a<sa.peaks.size();a++) sumMatchB[0][a]=0;
+	for(a=0;a<sa.mismatchSize;a++) sumMismatchB[0][a]=0;
+
+	bool storeA=true;
+	int widthA, widthB, widthC, sizeA, sizeB;
+	int count,lastCount;
+	widthA=1;
+	widthB=1;
+	widthC=1;
+	sizeA=1;
+	sizeB=1;
+
+	//cout << "In method, everything initialized" << endl;
+
+	while(depth < maxDepth && depth < sa.predPep->size()) {
+
+		if(storeA){
+			if(depth < maxDepth-1) {
+				for(a=0;a<widthA;a++){
+					delete [] sumMatchA[a];
+					delete [] sumMismatchA[a];
+				}
+				delete [] sumMatchA;
+				delete [] sumMismatchA;
+				widthA=calcDepth(0,depth+1);
+				sumMatchA = new float* [widthA];
+				sumMismatchA = new float* [widthA];
+				for(a=0;a<widthA;a++){
+					sumMatchA[a] = new float[sa.peaks.size()];
+					if(sa.mismatchSize>0) sumMismatchA[a] = new float[sa.mismatchSize];
+					else sumMismatchA[a] = new float[1];
+				}
+				delete comboListA;
+				comboListA = new vector<SSObject>;
+				//cout << "Done re-initializing A" << endl;
+			} else {
+				widthC=calcDepth(0,depth+1);
+			}
+		} else {
+			if(depth < maxDepth-1) {
+				for(a=0;a<widthB;a++){
+					delete [] sumMatchB[a];
+					delete [] sumMismatchB[a];
+				}
+				delete [] sumMatchB;
+				delete [] sumMismatchB;
+				//cout << "Deleted B ok" << endl;
+				widthB=calcDepth(0,depth+1);
+				//cout << "WidthB: " << widthB << endl;
+				sumMatchB = new float* [widthB];
+				sumMismatchB = new float* [widthB];
+				for(a=0;a<widthB;a++){
+					sumMatchB[a] = new float[sa.peaks.size()];
+					if(sa.mismatchSize>0) sumMismatchB[a] = new float[sa.mismatchSize];
+					else sumMismatchB[a] = new float[1];
+				}
+				delete comboListB;
+				comboListB = new vector<SSObject>;
+				//cout << "Done re-initializing B" << endl;
+			} else {
+				widthC=calcDepth(0,depth+1);
+			}
+		}
+
+		//scan through current list of combos
+		lastCount=0;
+		count=0;
+		while(true){
+			
+			if(storeA){
+				if(depth==maxDepth-1)	{
+					if(count==widthC) break;
+				} else {
+					if(count==widthA) break;
+				}
+				if(lastCount==sizeB) break;
+				if(comboListB->at(lastCount).pepVar->size()==0) {
+					b=sa.predPep->size()-1;
+				} else {
+					b = comboListB->at(lastCount).pepVar->at(comboListB->at(lastCount).pepVar->size()-1).iLower-1;
+					//cout << "B: " << b << endl;
+				}
+			} else {
+				if(depth==maxDepth-1)	{
+					if(count==widthC) break;
+				} else {
+					if(count==widthB) break;
+				}
+				if(lastCount==sizeA) break;
+				if(comboListA->at(lastCount).pepVar->size()==0) {
+					b=sa.predPep->size()-1;
+				}	else {
+					b = comboListA->at(lastCount).pepVar->at(comboListA->at(lastCount).pepVar->size()-1).iLower-1;
+					//cout << "B: " << b << endl;
+				}
+			}
+
+			//add every peptide & every variant
+			for(j=b;j>-1;j--){
+				
+				if(storeA){
+					//cout << sumMatchB[lastCount][sa.predPep->at(j).GetMaxPeakIndex()] << ", " << sa.predPep->at(j).GetIntensity() << ", " << sa.predPep->at(j).GetMaxPeakIndex() << endl;
+					intensity = sa.predPep->at(j).GetIntensity() - sumMatchB[lastCount][sa.predPep->at(j).GetMaxPeakIndex()];
+				} else {
+					//cout << sumMatchA[lastCount][sa.predPep->at(j).GetMaxPeakIndex()] << ", " << sa.predPep->at(j).GetIntensity() << ", " << sa.predPep->at(j).GetMaxPeakIndex() << endl;
+					intensity = sa.predPep->at(j).GetIntensity() - sumMatchA[lastCount][sa.predPep->at(j).GetMaxPeakIndex()];
+				}
+
+				//cout << j << ": " << intensity << endl;
+
+				//if intensity is less than zero, this is an invalid summation
+				if(intensity>0) {
+
+					//iterate through variants now
+					for(k=0;k<sa.predPep->at(j).VariantListSize();k++){
+
+						//cout << sa.predPep->at(j).GetMZ() << "  " << sa.predPep->at(j).GetVariant(k).GetFormula() << " " << sa.predPep->at(j).GetVariant(k).GetCharge() << endl;
+						//cout << "MISMATCH SIZE: " << sa.mismatchSize << endl;
+
+						//sum matches and mismatches
+						if(storeA){
+							for(a=0;a<sa.peaks.size();a++){
+								//cout << "Match: " << sa.peaks.at(a).mz << " " << sa.peaks.at(a).intensity << "    " << sa.predPep->at(j).GetVariant(k).GetMatch(a).mz << " " << sa.predPep->at(j).GetVariant(k).GetMatch(a).intensity << endl;
+								if(depth == maxDepth-1){
+									sumMatchC[a]=sa.predPep->at(j).GetVariant(k).GetMatch(a).intensity*intensity + sumMatchB[lastCount][a];
+								} else {
+									sumMatchA[count][a]=sa.predPep->at(j).GetVariant(k).GetMatch(a).intensity*intensity + sumMatchB[lastCount][a];
+								}
+							}
+							for(a=0;a<sa.mismatchSize;a++){
+								//cout << "Mismatch: " << sa.predPep->at(j).GetVariant(k).GetMismatch(a).mz << "  " << sa.predPep->at(j).GetVariant(k).GetMismatch(a).intensity << endl;
+								if(depth == maxDepth-1) {
+									sumMismatchC[a]=sa.predPep->at(j).GetVariant(k).GetMismatch(a).intensity*intensity + sumMismatchB[lastCount][a];
+								} else {
+									sumMismatchA[count][a]=sa.predPep->at(j).GetVariant(k).GetMismatch(a).intensity*intensity + sumMismatchB[lastCount][a];
+								}
+							}
+						} else {
+							for(a=0;a<sa.peaks.size();a++){
+								if(depth == maxDepth-1){
+									sumMatchC[a]=sa.predPep->at(j).GetVariant(k).GetMatch(a).intensity*intensity + sumMatchA[lastCount][a];
+								} else {
+									sumMatchB[count][a]=sa.predPep->at(j).GetVariant(k).GetMatch(a).intensity*intensity + sumMatchA[lastCount][a];
+								}
+							}
+							for(a=0;a<sa.mismatchSize;a++){
+								if(depth == maxDepth-1){
+									sumMismatchC[a]=sa.predPep->at(j).GetVariant(k).GetMismatch(a).intensity*intensity + sumMismatchA[lastCount][a];
+								} else {
+									sumMismatchB[count][a]=sa.predPep->at(j).GetVariant(k).GetMismatch(a).intensity*intensity + sumMismatchA[lastCount][a];
+								}
+							}
+						}
+
+						//Correlate this combined distribution with the mass spec data.
+						//SSIterations++;
+						if(depth == maxDepth-1){
+							RCorr = LinReg(sumMatchC,sumMismatchC);
+						} else {
+							if(storeA) RCorr = LinReg(sumMatchA[count],sumMismatchA[count]);
+							else RCorr = LinReg(sumMatchB[count],sumMismatchB[count]);
+						}
+
+						//cout << RCorr << endl;
+
+						if(storeA) recCombo = comboListB->at(lastCount);
+						else recCombo = comboListA->at(lastCount);
+						recCombo.addVar(j,k);
+						recCombo.corr = RCorr;
+
+						/*
+						for(x=0;x<recCombo.pepVar->size();x++) {
+
+							a=recCombo.pepVar->at(x).iLower;
+							b=recCombo.pepVar->at(x).iUpper;
+
+							cout << "(" << a << "," << b << ")" << sa.predPep->at(a).GetMZ() << "\t";
+							cout << sa.predPep->at(a).GetVariant(b).GetCharge() << "\t";
+						};
+						cout << "\n--------" << endl;
+						*/
+
+						//Check if it is the best, if so, mark it
+						if(recCombo.corr>bestCombo.corr) bestCombo = recCombo;
+
+						count++;
+						if(depth < maxDepth-1){
+							if(storeA) comboListA->push_back(recCombo);
+							else comboListB->push_back(recCombo);
+						}
+
+
+
+					}//for k
+
+				}//end if(intensity>0)
+
+			}//for j
+
+			//iterate to the next stored array
+			lastCount++;
+
+		}//while(true)
+
+		if(storeA) sizeA=count;
+		else sizeB=count;
+
+		//check best to see if it exceeded threshold
+		if(bestCombo.corr>cs.corr) {
+			for(a=0;a<widthA;a++){
+				delete [] sumMatchA[a];
+				delete [] sumMismatchA[a];
+			}
+			delete [] sumMatchA;
+			delete [] sumMismatchA;
+			for(a=0;a<widthB;a++){
+				delete [] sumMatchB[a];
+				delete [] sumMismatchB[a];
+			}
+			delete [] sumMatchB;
+			delete [] sumMismatchB;
+			delete [] sumMatchC;
+			delete [] sumMismatchC;
+			delete comboListA;
+			delete comboListB;
+			*combo = bestCombo;
+			return;
+		}
+
+		//otherwise, we iterate
+		if(storeA) storeA=false;
+		else storeA=true;
+		depth++;
+
+		//This is here for the complete method. It is a failsafe to kill the routine
+		//if there is little hope that combining distributions will produce a real result
+		if(depth==1 && bestCombo.corr<0.05) break;
+
+	}//while depth
+
+	//return the best we got
+	for(a=0;a<widthA;a++){
+		delete [] sumMatchA[a];
+		delete [] sumMismatchA[a];
+	}
+	delete [] sumMatchA;
+	delete [] sumMismatchA;
+	for(a=0;a<widthB;a++){
+		delete [] sumMatchB[a];
+		delete [] sumMismatchB[a];
+	}
+	delete [] sumMatchB;
+	delete [] sumMismatchB;
+	delete [] sumMatchC;
+	delete [] sumMismatchC;
+	delete comboListA;
+	delete comboListB;
+	*combo = bestCombo;
+	
+	//cout << "Done! " << bestCombo.corr << "   " << SSIterations << endl;
+  
+}
+
+void CHardklor::FastFewestPeptidesChoiceMethod(SSObject *combo, int maxDepth){
+
+  SSObject recCombo;
+	SSObject bestCombo = *combo;
+
+	vector<SSObject> *comboListA;
+	vector<SSObject> *comboListB;
+	comboListA = new vector<SSObject>;
+  comboListB = new vector<SSObject>;
+	comboListA->push_back(*combo);
+	comboListB->push_back(*combo);
+
+  double RCorr;
+  int a,b,j,k;
+
+	int depth=0;
+	float intensity;
+
+	float **sumMatchA;
+	float **sumMismatchA;
+	float **sumMatchB;
+	float **sumMismatchB;
+
+	//Initialize arrays
+	sumMatchA = new float* [1];
+	sumMismatchA = new float* [1];
+	sumMatchA[0] = new float[sa.peaks.size()];
+	if(sa.mismatchSize>0) sumMismatchA[0] = new float[sa.mismatchSize];
+	else sumMismatchA[0] = new float[1];
+
+	sumMatchB = new float* [1];
+	sumMismatchB = new float* [1];
+	sumMatchB[0] = new float[sa.peaks.size()];
+	if(sa.mismatchSize>0) sumMismatchB[0] = new float[sa.mismatchSize];
+	else sumMismatchB[0] = new float[1];
+
+	for(a=0;a<sa.peaks.size();a++) sumMatchB[0][a]=0;
+	for(a=0;a<sa.mismatchSize;a++) sumMismatchB[0][a]=0;
+
+	bool storeA=true;
+	int widthA, widthB, sizeA, sizeB;
+	int count,lastCount;
+	widthA=1;
+	widthB=1;
+	sizeA=1;
+	sizeB=1;
+
+	//cout << "In method, everything initialized" << endl;
+
+	while(depth < maxDepth && depth < sa.predPep->size()) {
+
+		if(storeA){
+			for(a=0;a<widthA;a++){
+				delete [] sumMatchA[a];
+				delete [] sumMismatchA[a];
+			};
+			delete [] sumMatchA;
+			delete [] sumMismatchA;
+			//cout << "Deleted A ok" << endl;
+			widthA=calcDepth(0,depth+1);
+			//cout << "WidthA: " << widthA << endl;
+			sumMatchA = new float* [widthA];
+			sumMismatchA = new float* [widthA];
+			for(a=0;a<widthA;a++){
+				sumMatchA[a] = new float[sa.peaks.size()];
+				if(sa.mismatchSize>0) sumMismatchA[a] = new float[sa.mismatchSize];
+				else sumMismatchA[a] = new float[1];
+			};
+			delete comboListA;
+			comboListA = new vector<SSObject>;
+			//cout << "Done re-initializing A" << endl;
+		} else {
+			for(a=0;a<widthB;a++){
+				delete [] sumMatchB[a];
+				delete [] sumMismatchB[a];
+			};
+			delete [] sumMatchB;
+			delete [] sumMismatchB;
+			//cout << "Deleted B ok" << endl;
+			widthB=calcDepth(0,depth+1);
+			//cout << "WidthB: " << widthB << endl;
+			sumMatchB = new float* [widthB];
+			sumMismatchB = new float* [widthB];
+			for(a=0;a<widthB;a++){
+				sumMatchB[a] = new float[sa.peaks.size()];
+				if(sa.mismatchSize>0) sumMismatchB[a] = new float[sa.mismatchSize];
+				else sumMismatchB[a] = new float[1];
+			};
+			delete comboListB;
+			comboListB = new vector<SSObject>;
+			//cout << "Done re-initializing B" << endl;
+		};
+
+		//scan through current list of combos
+		count=0;
+		lastCount=0;
+		while(true){
+
+			if(storeA){
+				if(lastCount==sizeB) break;
+				if(count==widthA) break;
+				if(comboListB->at(lastCount).pepVar->size()==0) b=sa.predPep->size()-1;
+				else b = comboListB->at(lastCount).pepVar->at(comboListB->at(lastCount).pepVar->size()-1).iLower-1;
+				//cout << "Checking ";
+				//for(a=0;a<comboListB->at(lastCount).pepVar->size();a++){
+				//	cout << comboListB->at(lastCount).pepVar->at(a).iLower << "." << comboListB->at(lastCount).pepVar->at(a).iUpper << "-";
+				//};
+				//cout << endl;
+			} else {
+				if(lastCount==sizeA) break;
+				if(count==widthB) break;
+				if(comboListA->at(lastCount).pepVar->size()==0) b=sa.predPep->size()-1;
+				else b = comboListA->at(lastCount).pepVar->at(comboListA->at(lastCount).pepVar->size()-1).iLower-1;
+				//cout << "Checking ";
+				//for(a=0;a<comboListA->at(lastCount).pepVar->size();a++){
+				//	cout << comboListA->at(lastCount).pepVar->at(a).iLower << "." << comboListA->at(lastCount).pepVar->at(a).iUpper << "-";
+				//};
+				//cout << endl;
+			};
+
+			//add every peptide & every variant
+			for(j=b;j>-1;j--){
+				
+				if(storeA){
+					intensity = sa.predPep->at(j).GetIntensity() - sumMatchB[lastCount][sa.predPep->at(j).GetMaxPeakIndex()];
+				} else {
+					intensity = sa.predPep->at(j).GetIntensity() - sumMatchA[lastCount][sa.predPep->at(j).GetMaxPeakIndex()];
+				};
+
+				//if intensity is less than zero, this is an invalid summation
+				if(intensity>0) {	
+						
+					//iterate through variants now
+					for(k=0;k<sa.predPep->at(j).VariantListSize();k++){
+
+						//sum matches and mismatches
+						if(storeA){
+							for(a=0;a<sa.peaks.size();a++){
+								sumMatchA[count][a]=sa.predPep->at(j).GetVariant(k).GetMatch(a).intensity*intensity + sumMatchB[lastCount][a];
+							};
+							for(a=0;a<sa.mismatchSize;a++){
+								sumMismatchA[count][a]=sa.predPep->at(j).GetVariant(k).GetMismatch(a).intensity*intensity + sumMismatchB[lastCount][a];
+							};
+						} else {
+							for(a=0;a<sa.peaks.size();a++){
+								sumMatchB[count][a]=sa.predPep->at(j).GetVariant(k).GetMatch(a).intensity*intensity + sumMatchA[lastCount][a];
+							};
+							for(a=0;a<sa.mismatchSize;a++){
+								sumMismatchB[count][a]=sa.predPep->at(j).GetVariant(k).GetMismatch(a).intensity*intensity + sumMismatchA[lastCount][a];
+							};
+						};
+
+						//Correlate this combined distribution with the mass spec data.
+						//SSIterations++;
+						if(storeA) RCorr = LinReg(sumMatchA[count],sumMismatchA[count]);
+						else RCorr = LinReg(sumMatchB[count],sumMismatchB[count]);
+      
+						if(storeA) recCombo = comboListB->at(lastCount);
+						else recCombo = comboListA->at(lastCount);
+						recCombo.addVar(j,k);
+						recCombo.corr = RCorr;
+
+						//Check if it is the best, if so, mark it
+						if(recCombo.corr>bestCombo.corr) bestCombo = recCombo;
+
+						if(RCorr>cs.corr/2){
+							count++;
+							if(storeA) comboListA->push_back(recCombo);
+							else comboListB->push_back(recCombo);
+						};
+
+					};//for k
+
+				};//end if(intensity>0)
+
+			};//for j
+
+			//iterate to the next stored array
+			lastCount++;
+
+		};//while countDown
+
+		if(storeA) sizeA=count;
+		else sizeB=count;
+
+		//check best to see if it exceeded threshold
+		if(bestCombo.corr>cs.corr) {
+			for(a=0;a<widthA;a++){
+				delete [] sumMatchA[a];
+				delete [] sumMismatchA[a];
+			};
+			delete [] sumMatchA;
+			delete [] sumMismatchA;
+			for(a=0;a<widthB;a++){
+				delete [] sumMatchB[a];
+				delete [] sumMismatchB[a];
+			};
+			delete [] sumMatchB;
+			delete [] sumMismatchB;
+			delete comboListA;
+			delete comboListB;
+			*combo = bestCombo;
+			return;
+		};
+
+		//otherwise, we iterate
+		if(storeA) storeA=false;
+		else storeA=true;
+		depth++;
+
+	};//while depth
+
+	//return the best we got
+	for(a=0;a<widthA;a++){
+		delete [] sumMatchA[a];
+		delete [] sumMismatchA[a];
+	};
+	delete [] sumMatchA;
+	delete [] sumMismatchA;
+	for(a=0;a<widthB;a++){
+		delete [] sumMatchB[a];
+		delete [] sumMismatchB[a];
+	};
+	delete [] sumMatchB;
+	delete [] sumMismatchB;
+	delete comboListA;
+	delete comboListB;
+	*combo = bestCombo;
+	
+	//cout << "Done! " << bestCombo.corr << "   " << SSIterations << endl;
+  
+};
+
+int CHardklor::calcDepth(int start, int max, int depth, int count) {
+	int i,j,n;
+	int total=0;
+	int sz=(int)sa.predPep->size();
+	
+	if(max==1) {
+		for(i=start;i<sz;i++) total+=sa.predPep->at(i).VariantListSize();
+		return total;
+	}
+
+	for(i=start;i<sz-max+depth;i++) {
+
+		if(depth==max) {
+			return sa.predPep->at(i).VariantListSize()*count;
+		} else {
+			for(j=i+1;j<sz;j++){
+				n = calcDepth(j,max,depth+1,sa.predPep->at(i).VariantListSize()*count);
+				total+=n;
+			}
+		}
+		if(depth>1) return total;
+	}
+
+	return total;
+
+}
+
+void CHardklor::ResultToMem(SSObject& obj, CPeriodicTable* PT){
+  int j,k;
+  int pepID;
+  int varID;
+	int sz=(int)obj.pepVar->size();
+  char mods[32];
+  char tmp[16];
+
+  //Each peptide in a window is designated with a P 
+  for(k=0;k<sz;k++) {
+
+    pepID=obj.pepVar->at(k).iLower;
+    varID=obj.pepVar->at(k).iUpper;
+
+    hkm.monoMass = sa.predPep->at(pepID).GetVariant(varID).GetMonoMass();
+    hkm.charge = sa.predPep->at(pepID).GetVariant(varID).GetCharge();
+    if(cs.distArea) hkm.intensity = sa.predPep->at(pepID).GetIntensity()*(float)sa.predPep->at(pepID).GetVariant(varID).GetArea();
+    else hkm.intensity = sa.predPep->at(pepID).GetIntensity();
+    hkm.scan = currentScanNumber;
+    hkm.mz = sa.predPep->at(pepID).GetMZ();
+    hkm.corr = obj.corr;
+
+		//Add mods
+		strcpy(mods,"");
+		for(j=0;j<sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().sizeAtom();j++){
+			strcat(mods,PT->at(sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atAtom(j).iLower).symbol);
+      sprintf(tmp,"%d",sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atAtom(j).iUpper);
+			strcat(mods,tmp);
+		}
+		strcat(mods,"_");
+		for(j=0;j<sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().sizeEnrich();j++){
+      sprintf(tmp,"%.2lf",sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atEnrich(j).ape);
+      strcat(mods,tmp);
+      strcat(mods,PT->at(sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atEnrich(j).atomNum).symbol);
+			sprintf(tmp,"%d",sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atEnrich(j).isotope);
+			strcat(mods,tmp);
+    }
+    strcpy(hkm.mods,mods);
+    vResults.push_back(hkm);
+
+  } 
+
+}
+
+void CHardklor::WritePepLine(SSObject& obj, CPeriodicTable* PT, fstream& fptr, int format){
+  int j,k;
+  int pepID;
+  int varID;
+	int sz=(int)obj.pepVar->size();
+
+  //Each peptide in a window is designated with a P 
+  for(k=0;k<sz;k++) {
+
+    pepID=obj.pepVar->at(k).iLower;
+    varID=obj.pepVar->at(k).iUpper;
+
+    if(format==0){
+			fptr << "P\t" << sa.predPep->at(pepID).GetVariant(varID).GetMonoMass();
+			fptr << "\t" << sa.predPep->at(pepID).GetVariant(varID).GetCharge();
+			if(cs.distArea) fptr << "\t" << sa.predPep->at(pepID).GetIntensity()*sa.predPep->at(pepID).GetVariant(varID).GetArea();
+		  else fptr << "\t" << sa.predPep->at(pepID).GetIntensity();
+			fptr << "\t" << sa.predPep->at(pepID).GetMZ();
+			fptr << "\t" << sa.peaks.at(0).mz << "-" << sa.peaks.at(sa.peaks.size()-1).mz;
+			fptr << "\t" << sa.S2NCutoff;
+
+			//Add mods
+			fptr << "\t";
+			for(j=0;j<sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().sizeAtom();j++){
+				fptr << PT->at(sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atAtom(j).iLower).symbol;
+				fptr << sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atAtom(j).iUpper;
+			}
+			fptr << "_";
+			for(j=0;j<sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().sizeEnrich();j++){
+				fptr << setiosflags(ios::fixed) << setprecision(2);
+				fptr << sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atEnrich(j).ape;
+				fptr << setiosflags(ios::fixed) << setprecision(4);
+				fptr << PT->at(sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atEnrich(j).atomNum).symbol;
+				fptr << sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atEnrich(j).isotope;
+				fptr << "_";
+			}
+
+			fptr << "\t" << obj.corr;
+			fptr << endl;
+
+    } else if(format==1) {
+      fptr << "<Peak Mass=\"" << sa.predPep->at(pepID).GetVariant(varID).GetMonoMass() << "\" ";
+      fptr << "ChargeState=\"" << sa.predPep->at(pepID).GetVariant(varID).GetCharge() << "\" ";
+      if(cs.distArea) fptr << "Area=\"" << sa.predPep->at(pepID).GetIntensity()*sa.predPep->at(pepID).GetVariant(varID).GetArea() << "\" ";
+		  else fptr << "Intensity=\"" << sa.predPep->at(pepID).GetIntensity() << "\" ";
+			fptr << "MZ=\"" << sa.predPep->at(pepID).GetMZ() << "\" ";
+			fptr << "Window=\"" << sa.peaks.at(0).mz << "-" << sa.peaks.at(sa.peaks.size()-1).mz << "\" ";
+			fptr << "SN=\"" << sa.S2NCutoff << "\" ";
+
+      //Add mods
+      fptr << "Mod=\"";
+			for(j=0;j<sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().sizeAtom();j++){
+				fptr << PT->at(sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atAtom(j).iLower).symbol;
+				fptr << sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atAtom(j).iUpper;
+			}
+			fptr << "_";
+			for(j=0;j<sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().sizeEnrich();j++){
+				fptr << setiosflags(ios::fixed) << setprecision(2);
+				fptr << sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atEnrich(j).ape;
+				fptr << setiosflags(ios::fixed) << setprecision(4);
+				fptr << PT->at(sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atEnrich(j).atomNum).symbol;
+				fptr << sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atEnrich(j).isotope;
+				fptr << "_";
+			}
+      fptr << "\" ";
+
+			fptr << "Score=\"" << obj.corr << "\"/>" << endl;
+    } else if(format==2){
+			fptr << (sa.predPep->at(pepID).GetVariant(varID).GetMonoMass()+sa.predPep->at(pepID).GetVariant(varID).GetCharge()*1.007276466)/sa.predPep->at(pepID).GetVariant(varID).GetCharge();
+			if(cs.distArea) fptr << "\t" << sa.predPep->at(pepID).GetIntensity()*sa.predPep->at(pepID).GetVariant(varID).GetArea();
+			else fptr << "\t" << sa.predPep->at(pepID).GetIntensity();
+			fptr << "\t" << sa.predPep->at(pepID).GetVariant(varID).GetCharge();
+			fptr << endl;
+		}
+  }
+}
+
+void CHardklor::WriteScanLine(Spectrum& s, fstream& fptr, int format){
+  //int i;
+
+  if(format==0) {
+    fptr << "S\t" << s.getScanNumber() << "\t" << s.getRTime() << "\t" << cs.inFile;
+
+		//For Alex Panchaud, special ZS case
+		if(s.getFileType()==ZS || s.getFileType()==UZS){
+			if(s.sizeZ()>0){
+				for(int i=0;i<s.sizeZ();i++) fptr << "\t" << s.atZ(i).z << "," << s.atZ(i).mh;
+			}
+		} else {
+
+			//otherwise output precursor info if it exists
+			if(s.sizeZ()==1){
+				fptr << "\t" << s.atZ(0).mh-1.00727649 << "\t" << s.atZ(0).z << "\t" << s.getMZ();
+			} else if(s.sizeZ()>1){
+				fptr << "\t0.0\t0\t" << s.getMZ();
+			} else {
+				fptr << "\t0.0\t0\t0.0";
+			}
+		}
+    fptr << endl;
+  } else if(format==1){
+    fptr << "<Spectrum Scan=\"" << s.getScanNumber() << "\" ";
+		fptr << "RetentionTime=\"" << s.getRTime() << "\" "; 
+		fptr << "Filename=\"" << cs.inFile << "\"";
+		if(s.getFileType()==ZS || s.getFileType()==UZS){
+			if(s.sizeZ()>0){
+				for(int i=0;i<s.sizeZ();i++) fptr << " PeptideSignal" << i << "=\"" << s.atZ(i).z << "," << s.atZ(i).mh << "\"";
+			}
+		} else {
+			if(s.sizeZ()==1){
+				fptr << " AccMonoMass=\"" << s.atZ(0).mh-1.00727649 << "\" PrecursorCharge=\"" << s.atZ(0).z << "\" PrecursorMZ=\"" << s.getMZ() << "\"";
+			} else if(s.sizeZ()>1){
+				fptr << " AccMonoMass=\"0.0\" PrecursorCharge=\"0\" PrecursorMZ=\"" << s.getMZ() << "\"";
+			} else {
+				fptr << " AccMonoMass=\"0.0\" PrecursorCharge=\"0\" PrecursorMZ=\"0.0\"";
+			}
+		}
+    fptr << ">" << endl;
+  } else if(format==2) {
+		fptr << "Scan = " << s.getScanNumber();
+		fptr << endl;
+	}
+}
+
+void CHardklor::WriteParams(fstream& fptr, int format){
+
+}
+
+int CHardklor::Size(){
+  return vResults.size();
+}
+
+void CHardklor::SetResultsToMemory(bool b){
+  bMem=b;
+}
+
+hkMem& CHardklor::operator[](const int& index){
+  return vResults[index];
+}
+
diff --git a/src/app/hardklor/CHardklor.h b/src/app/hardklor/CHardklor.h
new file mode 100644
index 0000000..fdff775
--- /dev/null
+++ b/src/app/hardklor/CHardklor.h
@@ -0,0 +1,153 @@
+#ifndef _CHARDKLOR_H
+#define _CHARDKLOR_H
+
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include "HardklorTypes.h"
+//#include "CHardklorProtein.h"
+#include "CHardklorSetting.h"
+#include "CHardklorVariant.h"
+#include "CPeriodicTable.h"
+#include "CSplitSpectrum.h"
+#include "MSObject.h"
+#include "MSReader.h"
+#include "Spectrum.h"
+#include "CNoiseReduction.h"
+//#include "CHardklorFileReader.h"
+
+#ifdef _MSC_VER
+
+#else
+#include <sys/time.h>
+#endif
+
+using namespace std;
+
+#define PminusE 1.00672791
+
+class SSObject {
+public:
+	//Data members
+  vector<sInt> *pepVar;
+  double corr;
+
+	//Constructors & Destructors
+  SSObject();
+  SSObject(const SSObject& c);
+	~SSObject();
+
+	//Overloaded operators
+  SSObject& operator=(const SSObject& c);
+
+	//Functions
+	void addVar(int a, int b);
+	void clear();
+  
+};
+
+class CHardklor{
+
+ public:
+  //Constructors & Destructors:
+  CHardklor();
+	CHardklor(CAveragine *a, CMercury8 *m);
+  ~CHardklor();
+
+  //Operators
+  hkMem& operator[](const int& index);
+
+  //Methods:
+	void Echo(bool b);
+  int GoHardklor(CHardklorSetting sett, Spectrum* s=NULL);
+	void SetAveragine(CAveragine *a);
+	void SetMercury(CMercury8 *m);
+  void SetResultsToMemory(bool b);
+  int Size();
+
+ protected:
+
+ private:
+  //Methods:
+  void Analyze(Spectrum* s=NULL);
+  bool AnalyzePeaks(CSpecAnalyze& sa);
+  int compareData(const void*, const void*);
+  double LinReg(float *match, float *mismatch);
+  void ResultToMem(SSObject& obj, CPeriodicTable* PT);
+  void WriteParams(fstream& fptr, int format=1); 
+  void WritePepLine(SSObject& obj, CPeriodicTable* PT, fstream& fptr, int format=0); 
+  void WriteScanLine(Spectrum& s, fstream& fptr, int format=0); 
+
+	//Finished analysis algorithms
+	void BasicMethod(float *match, float *mismatch,SSObject* combo, int depth, int maxDepth, int start);
+	void DynamicMethod(float *match, float *mismatch,SSObject* combo, int depth, int maxDepth, int start, double corr);
+	void DynamicSemiCompleteMethod(float *match, float *mismatch,SSObject* combo, int depth, int maxDepth, int start, double corr);
+	void FewestPeptidesMethod(SSObject *combo, int maxDepth);
+	void FewestPeptidesChoiceMethod(SSObject *combo, int maxDepth);
+	void SemiCompleteMethod(float *match, float *mismatch,SSObject* combo, int depth, int maxDepth, int start);
+	void SemiCompleteFastMethod(float *match, float *mismatch,SSObject* combo, int depth, int maxDepth, int start);
+	void SemiSubtractiveMethod(SSObject *combo, int maxDepth);
+	void FastFewestPeptidesMethod(SSObject *combo, int maxDepth);
+	void FastFewestPeptidesChoiceMethod(SSObject *combo, int maxDepth);
+
+	//Analysis algorithm support methods
+	int calcDepth(int start, int max, int depth=1, int count=1);
+
+  //Data Members:
+	CSpecAnalyze sa;
+	CHardklorSetting cs;
+	CAveragine *averagine;
+	CMercury8 *mercury;
+	CPeriodicTable *PT;
+  hkMem hkm;
+	bool bEcho;
+  bool bMem;
+  int currentScanNumber;
+	fstream fptr; //TODO: Get rid of this and use FILE* instead.
+
+	//Vector for holding peptide list of distribution
+  vector<CHardklorVariant> pepVariants;
+
+  //Vector for holding results in memory should that be needed
+  vector<hkMem> vResults;
+
+  //Temporary Data Members:
+  char bestCh[200];
+  double BestCorr;
+  int CorrMatches;
+  int ExtraPre;
+  int ExtraObs;
+
+  //For accurate timing of Hardklor
+  #ifdef _MSC_VER
+    __int64 startTime;
+    __int64 stopTime;
+    __int64 loadTime;
+    __int64 splitTime;
+    __int64 analysisTime;
+    __int64 timerFrequency;
+    __int64 tmpTime1;
+    __int64 tmpTime2;
+    #define getExactTime(a) QueryPerformanceCounter((LARGE_INTEGER*)&a)
+    #define getTimerFrequency(a) QueryPerformanceFrequency((LARGE_INTEGER*)&a)
+    #define toMicroSec(a) (a)
+    #define timeToSec(a,b) (a/b)
+  #else
+    timeval startTime;
+    timeval stopTime;
+    uint64_t loadTime;
+    uint64_t splitTime;
+    uint64_t analysisTime;
+    uint64_t tmpTime1;
+    uint64_t tmpTime2;
+    int timerFrequency;
+    #define getExactTime(a) gettimeofday(&a,NULL)
+    #define toMicroSec(a) a.tv_sec*1000000+a.tv_usec
+    #define getTimerFrequency(a) (a)=1
+    #define timeToSec(a,b) (a/1000000)
+  #endif
+
+};
+
+#endif
diff --git a/src/app/hardklor/CHardklor2.cpp b/src/app/hardklor/CHardklor2.cpp
new file mode 100644
index 0000000..c817bd0
--- /dev/null
+++ b/src/app/hardklor/CHardklor2.cpp
@@ -0,0 +1,1484 @@
+#include "CHardklor2.h"
+
+CHardklor2::CHardklor2(CAveragine *a, CMercury8 *m, CModelLibrary *lib){
+  averagine=a;
+  mercury=m;
+	models=lib;
+	bEcho=true;
+  bMem=false;
+	PT=NULL;
+}
+
+CHardklor2::~CHardklor2(){
+	averagine=NULL;
+	mercury=NULL;
+	models=NULL;
+	if(PT!=NULL) {
+		PT=NULL;
+	}
+}
+
+hkMem& CHardklor2::operator[](const int& index){
+  return vResults[index];
+}
+
+void CHardklor2::Echo(bool b){
+	bEcho=b;
+}
+
+int CHardklor2::GoHardklor(CHardklorSetting sett, Spectrum* s){
+	
+	//Member variables
+	MSReader r;
+	Spectrum curSpec,c;
+	vector<int> v;
+	FILE* fout;
+	int TotalScans;
+	int manyPep, zeroPep, lowSigPep;
+	int iPercent;
+	int minutes, seconds;
+	int i;
+	vector<pepHit> vPeps;
+
+	//initialize variables
+	cs=sett;
+	loadTime=0;
+	analysisTime=0;
+	TotalScans=0;
+	manyPep=0;
+  zeroPep=0;
+  lowSigPep=0;
+  iPercent=0;
+	getTimerFrequency(timerFrequency);
+
+  vResults.clear();
+
+	//For noise reduction
+	CNoiseReduction nr(&r,cs);
+
+	//Signature
+	//if(bEcho) cout << "\n\nHardklor, v2.06, Mike Hoopmann, Mike MacCoss\nCopyright 2007-2012\nUniversity of Washington\n" << endl;
+
+	//Set the periodic table
+	if(PT==NULL) PT=averagine->getPT();
+
+	//Ouput file info to user
+	if(bEcho){
+		if(s==NULL) cout << "Reading from file: " << cs.inFile << endl;
+		if(!bMem) cout << "Writing to file: " << cs.outFile << endl;
+	}
+  if(cs.fileFormat==dunno) {
+    cout << "Unknown file format or bad extension." << endl;
+    return -1;
+  }
+
+	if(!bMem) fout=fopen(cs.outFile,"wt");
+
+	//read a spectrum
+	getExactTime(startTime);
+
+	  //Read in the initial spectrum
+  r.setFilter(cs.mzXMLFilter);
+  r.setRawFilter(cs.rawFilter);
+  if(s!=NULL){
+    curSpec=*s;
+  } else {
+	  if(cs.boxcar==0){
+      if((cs.scan.iLower>0) && (cs.scan.iLower==cs.scan.iUpper)) r.readFile(&cs.inFile[0],curSpec,cs.scan.iLower);
+      else if(cs.scan.iLower>0) r.readFile(&cs.inFile[0],curSpec,cs.scan.iLower);
+	    else r.readFile(&cs.inFile[0],curSpec);
+	  } else {
+		  if(cs.boxcarFilter==0){
+        if(!nr.DeNoiseD(curSpec)) curSpec.setScanNumber(0);
+			  //if(!nr.DeNoise(curSpec)) curSpec.setScanNumber(0);
+			  //do something about this...
+
+		  } else {
+        if(!nr.DeNoiseC(curSpec)) curSpec.setScanNumber(0);
+		  }
+    }
+  }
+
+	getExactTime(stopTime);
+  tmpTime1=toMicroSec(stopTime);
+  tmpTime2=toMicroSec(startTime);
+  loadTime+=(tmpTime1-tmpTime2);
+
+	//Check that file was read
+  if(curSpec.getScanNumber()==0) {
+    if(s!=NULL) {
+      cout << "Spectrum is invalid." << endl;
+      return -2;
+    }
+    if(cs.scan.iLower>0) cout << cs.inFile << " is invalid, or requested scan number is of incorrect format." << endl;
+    else cout << cs.inFile << " is invalid, or contains no spectrum." << endl;
+    return -2;
+  }
+
+	//Write scan information to output file.
+  if(!bMem){
+    if(cs.reducedOutput) WriteScanLine(curSpec,fout,2);
+    else if(cs.xml) WriteScanLine(curSpec,fout,1);
+    else WriteScanLine(curSpec,fout,0);
+  } else {
+    currentScanNumber = curSpec.getScanNumber();
+  }
+
+	//Output progress indicator
+	if(bEcho) cout << iPercent;
+  
+  //While there is still data to read in the file.
+  while(true){
+
+		getExactTime(startTime);
+		TotalScans++;
+		
+		//Smooth if requested
+		if(cs.smooth>0) SG_Smooth(curSpec,cs.smooth,4);
+
+		//Centroid if needed; notice that this copy wastes a bit of time.
+		//TODO: make this more efficient
+		if(cs.boxcar==0 && !cs.centroid) Centroid(curSpec,c);
+		else c=curSpec;
+
+		//There is a bug when using noise reduction that results in out of order m/z values
+		//TODO: fix noise reduction so sorting isn't needed
+		if(c.size()>0) c.sortMZ();
+
+		//Analyze
+		QuickHardklor(c,vPeps);
+
+		//export results
+		for(i=0;i<(int)vPeps.size();i++){
+      if(!bMem){
+			  if(cs.reducedOutput) WritePepLine(vPeps[i],c,fout,2);
+			  else if(cs.xml) WritePepLine(vPeps[i],c,fout,1);
+			  else WritePepLine(vPeps[i],c,fout,0);
+      } else {
+        ResultToMem(vPeps[i],c);
+      }
+		}
+
+		//Update progress
+		if(bEcho){
+			if (r.getPercent() > iPercent){
+				if(iPercent<10) cout << "\b";
+				else cout << "\b\b";
+				cout.flush();
+				iPercent=r.getPercent();
+				cout << iPercent;
+				cout.flush();
+			}
+		}
+
+		getExactTime(stopTime);
+    tmpTime1=toMicroSec(stopTime);
+    tmpTime2=toMicroSec(startTime);
+    analysisTime+=tmpTime1-tmpTime2;
+    
+    if(s!=NULL) break;
+
+		//Check if any user limits were made and met
+		if( (cs.scan.iUpper == cs.scan.iLower) && (cs.scan.iLower != 0) ){
+			break;
+		} else if( (cs.scan.iLower < cs.scan.iUpper) && (curSpec.getScanNumber() >= cs.scan.iUpper) ){
+			break;
+		}
+
+		//Read next spectrum from file.
+		getExactTime(startTime);
+		if(cs.boxcar==0) {
+			r.readFile(NULL,curSpec);
+		} else {
+			if(cs.boxcarFilter==0){
+				//possible to not filter?
+        nr.DeNoiseD(curSpec);
+			} else {
+			//case 5: nr.DeNoise(curSpec); break; //this is for filtering without boxcar
+				nr.DeNoiseC(curSpec);
+			}
+		}
+
+		getExactTime(stopTime);
+		tmpTime1=toMicroSec(stopTime);
+		tmpTime2=toMicroSec(startTime);
+		loadTime+=(tmpTime1-tmpTime2);
+
+		if(curSpec.getScanNumber()!=0){
+			//Write scan information to output file.
+			if(cs.reducedOutput){
+				WriteScanLine(curSpec,fout,2);
+			} else if(cs.xml) {
+				fprintf(fout,"</Spectrum>\n");
+				WriteScanLine(curSpec,fout,1);
+			} else {
+				WriteScanLine(curSpec,fout,0);
+			}
+		} else {
+			break;
+		}
+	}
+
+	if(!bMem) fclose(fout);
+
+	if(bEcho) {
+		cout << "\n" << endl;
+		cout << "  Total number of scans analyzed: " << TotalScans << endl;
+
+		i=(int)timeToSec(loadTime,timerFrequency);
+		minutes = (int)(i/60);
+		seconds = i - (60*minutes);
+		cout << "\nFile access time: " << minutes << " minutes, " << seconds << " seconds." << endl;
+		i=(int)timeToSec(analysisTime,timerFrequency);
+		minutes = (int)(i/60);
+		seconds = i - (60*minutes);
+		cout << "Analysis Time:    " << minutes << " minutes, " << seconds << " seconds." << endl;
+
+		if (minutes==0 && seconds==0){
+			cout << "IMPOSSIBLE!!!" << endl;
+		} else if(minutes <=2){
+			cout << "HOLY FRIJOLE!!" << endl;
+		} else if(minutes<=5) {
+			cout << "Like lightning!" << endl;
+		} else if(minutes<=10){
+			cout << "That's pretty damn fast!" << endl;
+		} else if(minutes<=20){
+			cout << "Monkeys calculate faster than that!" << endl;
+		} else if(minutes<=30){
+			cout << "You should have taken a lunch break." << endl;
+		} else if(minutes<=40){
+			cout << "Oi! Too freakin' slow!!" << endl;
+		} else {
+			cout << "You might be able to eek out some better performance by adjusting your parameters." << endl;
+		}
+	}
+	return 1;
+
+}
+
+int CHardklor2::BinarySearch(Spectrum& s, double mz, bool floor){
+
+	int mid=s.size()/2;
+	int upper=s.size();
+	int lower=0;
+
+	if(mz>=s[s.size()-1].mz) return s.size()-1;
+	if(mz<=s[0].mz) return 0;
+
+	while(s[mid].mz!=mz){
+		if(lower>=upper) break;
+		if(s[mid].mz>mz){
+			upper=mid-1;
+			mid=(lower+upper)/2;
+		} else {
+			lower=mid+1;
+			mid=(lower+upper)/2;
+		}
+	}
+
+	if(floor && s[mid].mz>mz && mid>0) return mid-1;
+	else if(!floor && s[mid].mz<mz && mid<s.size()) return mid+1;
+	else return mid;
+
+}
+
+//Calculates the resolution (FWHM) of a peak
+double CHardklor2::CalcFWHM(double mz,double res,int iType){
+	double deltaM;
+	switch(iType){
+	case 0: //Orbitrap
+		deltaM = mz * sqrt(mz) / (20*res);  //sqare root of 400
+		break;
+	case 1: //TOF
+		deltaM = mz / res;
+		break;
+	case 2: //QIT
+		deltaM = res / 5000.0;
+		break;
+	case 3: //FTICR
+	default:
+		deltaM = mz * mz / (400*res);
+		break;
+	}
+	return deltaM;
+}
+
+//First derivative method, returns base peak intensity of the set
+void CHardklor2::Centroid(Spectrum& s, Spectrum& out){
+  int i,j;
+  float maxIntensity;
+  int bestPeak;
+  bool bLastPos;
+
+	int nextBest;
+	double FWHM;
+	Peak_T centroid;
+
+	out.clear();
+
+  bLastPos=false;
+	for(i=0;i<s.size()-1;i++){
+
+    if(s[i].intensity<s[i+1].intensity) {
+      bLastPos=true;
+      continue;
+    } else {
+      if(bLastPos){
+				bLastPos=false;
+
+				//find max and add peak
+				maxIntensity=0;
+				for(j=i;j<i+1;j++){
+				  if (s[j].intensity>maxIntensity){
+				    maxIntensity=s[j].intensity;
+				    bestPeak = j;
+				  }
+				}
+
+				//Best estimate of Gaussian centroid
+				//Get 2nd highest point of peak
+				if(bestPeak==s.size()){
+					nextBest=bestPeak-1;
+				} else if(s[bestPeak-1].intensity > s[bestPeak+1].intensity){
+					nextBest=bestPeak-1;
+				} else {
+					nextBest=bestPeak+1;
+				}
+
+				//Get FWHM
+				FWHM = CalcFWHM(s[bestPeak].mz,cs.res400,cs.msType);
+
+				//Calc centroid MZ (in three lines for easy reading)
+				centroid.mz = (FWHM*FWHM*log(s[bestPeak].intensity/s[nextBest].intensity));
+				centroid.mz /= (GAUSSCONST*(s[bestPeak].mz-s[nextBest].mz));
+				centroid.mz += ((s[bestPeak].mz+s[nextBest].mz)/2);
+
+				//Calc centroid intensity
+				centroid.intensity=(float)(s[bestPeak].intensity/exp(-pow((s[bestPeak].mz-centroid.mz)/FWHM,2)*GAUSSCONST));
+
+				//some peaks are funny shaped and have bad gaussian fit.
+				//if error is more than 10%, keep existing intensity
+				if( fabs((s[bestPeak].intensity - centroid.intensity) / centroid.intensity * 100) > 10 ||
+            //not a good check for infinity
+            centroid.intensity>999999999999.9 ||
+            centroid.intensity < 0 ) {
+					centroid.intensity=s[bestPeak].intensity;
+				}
+				
+				//Hack until I put in mass ranges
+				if(centroid.mz<0 || centroid.mz>2000) {
+					//do nothing if invalid mz
+				} else {
+					out.add(centroid);
+				}
+			
+      }
+
+    }
+  }
+
+}
+
+//returns whether or not the peak is still valid. true if peak still exists, false if peak was solved already.
+bool CHardklor2::CheckForPeak(vector<Result>& vMR, Spectrum& s, int index){
+	double dif=100.0;
+	double massDif;
+	bool match=false;
+
+	int mid=s.size()/2;
+	int upper=s.size();
+	int lower=0;
+
+	double FWHM=CalcFWHM(vMR[index].mass,cs.res400,cs.msType);
+
+	if(vMR[index].mass>=s[s.size()-1].mz) {
+		mid=s.size()-1;
+	} else if(vMR[index].mass<=s[0].mz) {
+		mid=0;
+	} else {
+
+		while(s[mid].mz!=vMR[index].mass){
+			if(lower>=upper) break;
+			if(s[mid].mz>vMR[index].mass){
+				upper=mid-1;
+				mid=(lower+upper)/2;
+			} else {
+				lower=mid+1;
+				mid=(lower+upper)/2;
+			}
+		}
+	}
+
+	dif=fabs(s[mid].mz-vMR[index].mass);
+	if(mid>0){
+		massDif=fabs(s[mid-1].mz-vMR[index].mass);
+		if(massDif<dif) {
+			dif=massDif;
+			mid--;
+		}
+	} 
+	if(mid<s.size()-1){
+		massDif=fabs(s[mid+1].mz-vMR[index].mass);
+		if(massDif<dif) {
+			dif=massDif;
+			mid++;
+		}
+	}
+
+	if(dif<FWHM){
+		if(mask[mid].intensity>1.0) return false;
+		else return true;
+	}
+	return false;
+
+}
+
+int CHardklor2::CompareBPI(const void *p1, const void *p2){
+  const pepHit d1 = *(pepHit *)p1;
+  const pepHit d2 = *(pepHit *)p2;
+	if(d1.basePeakIndex<d2.basePeakIndex) return -1;
+	else if(d1.basePeakIndex>d2.basePeakIndex) return 1;
+  else return 0;
+}
+
+double CHardklor2::LinReg(vector<float>& mer, vector<float>& obs){
+
+  int i,sz;
+  double sxx=0,syy=0,sxy=0;
+
+  //Cosine angle correlation
+  sxy=0;
+  sxx=0;
+  syy=0;
+	sz=(int)mer.size();
+  for(i=0;i<sz;i++){
+    sxy += (mer[i]*obs[i]);
+    sxx += (mer[i]*mer[i]);
+    syy += (obs[i]*obs[i]);
+  }
+
+  if(sxx>0 && syy>0 && sxy>0) return sxy/sqrt(sxx*syy);
+  else return 0;
+    
+}
+
+bool CHardklor2::MatchSubSpectrum(Spectrum& s, int peakIndex, pepHit& pep){
+
+	int i,k,n;
+	unsigned int varCount;
+	unsigned int v;
+	float max=s[peakIndex].intensity;
+	int maxMercuryIndex[3];
+	vector<int> charges;
+	double dif;
+	vector<float> obs;
+	vector<float> mer;
+	vector<int> vMatchIndex;
+	vector<float> vMatchPeak;
+	vector<Result> vMR;
+	Result r;
+	double corr;
+	double da;
+
+	//keep track of best hits
+	double bestCorr;
+	double bestDA;
+	int bestCharge;
+	double bestMass;
+	vector<int> bestMatchIndex;
+	vector<float> bestMatchPeak;
+	int matchCount;
+	int bestMatchCount;
+	int thisMaxIndex=0;
+	int bestVariant;
+
+	mercuryModel* model=NULL;
+
+	double deltaM = CalcFWHM(s[peakIndex].mz,cs.res400,cs.msType);
+	QuickCharge(s,peakIndex,charges);
+
+	bestCorr=0.0;
+	bestMatchCount=0;
+
+	//Mark number of variants to analyze
+	if(cs.noBase) varCount=cs.variant->size();
+	else varCount=cs.variant->size()+1;
+
+	//iterate through all charge states
+	for(i=0;i<(int)charges.size();i++){
+
+		for(v=0;v<varCount;v++){
+
+			//get model from library
+			dif=0;
+			model=models->getModel(charges[i],v,s[peakIndex].mz);
+			for(k=0; k<model->size; k++) {
+				if(model->peaks[k].intensity>dif){
+					dif = model->peaks[k].intensity;
+					maxMercuryIndex[0]=k;
+				}
+			}
+			if(k==0) maxMercuryIndex[1]=-1;
+			else maxMercuryIndex[1]=maxMercuryIndex[0]-1;		//allow right shift
+			maxMercuryIndex[2]=maxMercuryIndex[0]+1;				//allow left shift
+
+			//Apply shift and find mz boundaries
+			n=0;
+			while(n<3){
+				
+				if(maxMercuryIndex[n]<0) {
+					n++;
+					continue;
+				}
+
+				//Align the mercury distribution (MD) to the observed peak. The MD can shift in
+				//either direction for one peak to adjust for system noise. The width of the MD
+				//determines the boundaries for correlation to the observed data.
+				double lower=5000.0;
+				double upper=0.0;
+				double shft = s[peakIndex].mz - model->peaks[maxMercuryIndex[n]].mz;
+				
+				vMR.clear();
+				for(k=0; k<model->size; k++) {				
+					r.data=model->peaks[k].intensity;
+					r.mass=model->peaks[k].mz+shft;
+					vMR.push_back(r);
+					if(model->peaks[k].intensity>99.999) thisMaxIndex=vMR.size()-1;
+					
+					if(r.mass<lower) lower=r.mass;
+					if(r.mass>upper) upper=r.mass;
+				}
+				da=model->area;
+
+				//Add a little buffer to the bounds
+				lower-=0.1;
+				upper+=0.1;
+
+				//Match predictions to the observed peaks and record them in the proper array.
+				corr=PeakMatcherB(vMR,s,lower,upper,deltaM/2,peakIndex,matchCount,vMatchIndex,vMatchPeak);
+				//cout << "\tMSS: " << s[peakIndex].mz << " " << s[peakIndex].intensity << "\t" << charges[i] << "\t" << matchCount << "\t" << corr << endl;
+
+				if(corr>bestCorr || (corr>cs.corr && corr+0.025*(matchCount-bestMatchCount)>bestCorr) ){
+					bestMatchIndex=vMatchIndex;
+					bestMatchPeak=vMatchPeak;
+					bestMatchCount=matchCount;
+					bestCorr=corr;
+					bestMass=model->zeroMass+shft*charges[i];
+					bestCharge=charges[i];
+					bestDA=da;
+					bestVariant=v;
+				}
+
+				n++;
+
+			}//while
+
+		}//for v (variant)
+
+	}//for i (charge)
+	model=NULL;
+
+	//if above threshold, erase peaks.
+	if(bestCorr>cs.corr){
+
+		pep.area=(float)bestDA;
+		strcpy(pep.averagine,"");
+		pep.basePeakIndex=0;
+		pep.charge=bestCharge;
+		pep.corr=bestCorr;
+		pep.highMZ=0;
+		pep.lowMZ=0;
+		pep.massShift=0;
+		pep.monoMass=bestMass;
+		pep.intensity=s[peakIndex].intensity;
+		pep.variantIndex=bestVariant;
+
+		//mark which peaks contributed to this analysis
+		for(k=0;k<(int)bestMatchIndex.size();k++){
+			if(bestMatchPeak[k]*max/s[bestMatchIndex[k]].intensity>0.5) s[bestMatchIndex[k]].intensity=-s[bestMatchIndex[k]].intensity;
+			else s[bestMatchIndex[k]].intensity-=bestMatchPeak[k]*max;
+		}
+
+		return true;
+	}
+
+	return false;
+
+}
+
+double CHardklor2::PeakMatcher(vector<Result>& vMR, Spectrum& s, double lower, double upper, double deltaM, int matchIndex, int& matchCount, int& indexOverlap, vector<int>& vMatchIndex, vector<float>& vMatchIntensity){
+
+	vMatchIndex.clear();
+	vMatchIntensity.clear();
+
+	vector<float> obs;
+	vector<float> mer;
+				
+	bool match;
+	bool bMax=false;
+	double corr=0.0;
+	double dif;
+	double massDif;
+
+	matchCount=0;
+	indexOverlap=-1;
+
+	int j,k;
+	for(k=0;k<(int)vMR.size();k++) {
+		if(vMR[k].data>99.9) bMax=true;
+
+		match=false;
+		dif=deltaM;
+						
+		//look left
+		j=matchIndex;
+		while(j>-1 && s[j].mz>=lower){
+			massDif=s[j].mz-vMR[k].mass;
+			if(massDif<-deltaM) break;
+			if(fabs(massDif)<dif){
+				dif=fabs(massDif);
+				match=true;
+				matchIndex=j;
+			}
+			j--;
+		}
+
+		//look right
+		j=matchIndex+1;
+		while(j<s.size() && s[j].mz<=upper){
+			massDif=s[j].mz-vMR[k].mass;
+			if(massDif>deltaM) break;
+			if(fabs(massDif)<dif){
+				dif=fabs(massDif);
+				match=true;
+				matchIndex=j;
+			}
+			j++;
+		}
+	
+		if(!match) {
+      //if expected peak is significant (above 50 rel abun) and has no match, match it to 0.
+      if(vMR[k].data>50.0) {
+        //cout << "xM: " << vMR[k].mass << "\t0" << endl;
+        mer.push_back((float)vMR[k].data);
+        obs.push_back(0.0f);
+        if(bMax) break;
+      }
+      
+		} else {
+			mer.push_back((float)vMR[k].data);
+      //cout << "xM: " << vMR[k].mass << "\t" << s[matchIndex].mz << endl;
+			if(mask[matchIndex].intensity>1.0 && vMR[k].data>50) {
+				if(indexOverlap<0) indexOverlap=matchIndex;
+			}
+			if(s[matchIndex].intensity<1.0) {
+				obs.push_back(0.0f);
+			} else {
+				matchCount++;
+				obs.push_back(s[matchIndex].intensity);
+			}
+			vMatchIndex.push_back(matchIndex);
+			vMatchIntensity.push_back((float)vMR[k].data/100.0f);
+		}
+	}
+
+	if(matchCount<2) corr=0.0;
+	else corr=LinReg(mer,obs);
+
+	//for(j=0;j<mer.size();j++){
+  //  cout << "M:" << mer[j] << "\t" << "O:" << obs[j] << endl;
+	//}
+	//cout << "Corr: " << corr << "(" << matchCount << ")" << endl;
+
+  //remove last matched peaks (possibly overlap with other peaks) but only if they are of low abundance.
+	int tmpCount=matchCount;
+  while(corr<0.90 && matchCount>2 && mer[mer.size()-1]<50.0){
+		mer.pop_back();
+		obs.pop_back();
+		matchCount--;
+		double corr2=LinReg(mer,obs);
+		//cout << "Old corr: " << corr << "(" << matchCount+1 << ")" << " New corr: " << corr2 << endl;
+		if(corr2>corr) {
+			corr=corr2;
+			tmpCount=matchCount;
+		}
+	}
+	matchCount=tmpCount;
+
+	return corr;
+}
+
+double CHardklor2::PeakMatcherB(vector<Result>& vMR, Spectrum& s, double lower, double upper, double deltaM, int matchIndex, int& matchCount, vector<int>& vMatchIndex, vector<float>& vMatchIntensity){
+
+	vMatchIndex.clear();
+	vMatchIntensity.clear();
+
+	vector<float> obs;
+	vector<float> mer;
+				
+	bool match;
+	bool bMax=false;
+	double corr=0.0;
+	double dif;
+	double massDif;
+
+	matchCount=0;
+
+	int j,k;
+	for(k=0;k<(int)vMR.size();k++) {
+		if(vMR[k].data>99.9) bMax=true;
+		else bMax=false;
+
+		match=false;
+		dif=deltaM;
+						
+		//look left
+		j=matchIndex;
+		while(j>-1 && s[j].mz>=lower){
+			massDif=s[j].mz-vMR[k].mass;
+			if(massDif<-deltaM) break;
+			if(fabs(massDif)<dif){
+				dif=fabs(massDif);
+				match=true;
+				matchIndex=j;
+			}
+			j--;
+		}
+
+		//look right
+		j=matchIndex+1;
+		while(j<s.size() && s[j].mz<=upper){
+			massDif=s[j].mz-vMR[k].mass;
+			if(massDif>deltaM) break;
+			if(fabs(massDif)<dif){
+				dif=fabs(massDif);
+				match=true;
+				matchIndex=j;
+			}
+			j++;
+		}
+	
+		if(!match) {
+			break;
+		} else {
+			mer.push_back((float)vMR[k].data);
+			if(s[matchIndex].intensity<1.0) {
+				obs.push_back(0.0f);
+			} else {
+				matchCount++;
+				obs.push_back(s[matchIndex].intensity);
+			}
+			vMatchIndex.push_back(matchIndex);
+			vMatchIntensity.push_back((float)vMR[k].data/100.0f);
+		}
+	}
+
+	if(matchCount<2) corr=0.0;
+	else corr=LinReg(mer,obs);
+
+	int tmpCount=matchCount;
+	while(corr<0.90 && matchCount>2){
+		mer.pop_back();
+		obs.pop_back();
+		matchCount--;
+		double corr2=LinReg(mer,obs);
+		if(corr2>corr) {
+			corr=corr2;
+			tmpCount=matchCount;
+		}
+	}
+	matchCount=tmpCount;
+
+	return corr;
+}
+
+void CHardklor2::QuickCharge(Spectrum& s, int index, vector<int>& v){
+
+	int i,j;
+	double dif;
+	double rawCh;
+	double rawChR;
+	int ch;
+	int charge[1000];
+
+	for(i=cs.minCharge;i<=cs.maxCharge;i++) charge[i]=0;
+
+	//check forward
+	for(j=index+1;j<s.size();j++){
+		//if(s[j].intensity<1.0f) continue;
+			
+		dif = s[j].mz - s[index].mz;
+		if(dif > 1.1) break;
+			
+		rawCh=1/dif;
+		ch = (int)(rawCh+0.5);
+		rawChR=rawCh-(int)rawCh;
+		if(rawChR>0.2 && rawChR<0.8) continue;
+		if(ch<cs.minCharge || ch>cs.maxCharge) continue;
+		charge[ch]=1;
+	}
+  //if no forward charge, exit now.
+  bool bMatch=false;
+  for(i=cs.minCharge;i<=cs.maxCharge;i++){
+    if(charge[i]>0) {
+      bMatch=true;
+      break;
+    }
+  }
+  if(!bMatch) {
+    v.clear();
+    return;
+  }
+
+	//check backward
+	for(j=index-1;j>=0;j--){
+		//if(s[j].intensity<=0.0f) continue;
+			
+		dif = s[index].mz - s[j].mz;
+		if(dif > 1.1) break;
+			
+		rawCh=1/dif;
+		ch = (int)(rawCh+0.5);
+		rawChR=rawCh-(int)rawCh;
+		if(rawChR>0.2 && rawChR<0.8) continue;
+		if(ch<cs.minCharge || ch>cs.maxCharge) continue;
+		charge[ch]=1;
+	}
+
+	v.clear();
+	for(i=cs.minCharge;i<=cs.maxCharge;i++){
+		if(charge[i]>0) v.push_back(i);
+	}
+
+}
+
+void CHardklor2::QuickHardklor(Spectrum& s, vector<pepHit>& vPeps) {
+
+	//iterators
+	int i,j,k,n,m,x;
+	unsigned int varCount;
+	unsigned int v;
+
+	//tracking spectrum peak intensities
+	float maxHeight=9999999999999.9f;
+	float max=0.0f;
+	float lowPoint=9999999999999.9f;
+
+	//Mercury storage and variables aligning mercury data (including 1 da shifts)
+	mercuryModel* model;
+	vector<Result> vMR;
+	Result r;
+	int maxIndex;
+	int thisMaxIndex;
+	int maxMercuryIndex[3];
+	double da;
+	double lower;
+	double upper;
+	double shft;
+
+	//peak variables
+	vector<int> charges;
+	double deltaM;
+	double dif;
+	double corr;
+	vector<float> obs;
+	vector<float> mer;
+	vector<int> vMatchIndex;
+	vector<float> vMatchPeak;
+	vector<int> vMatchIndex2;
+	vector<float> vMatchPeak2;
+	int matchCount,matchCount2;
+	int indexOverlap;
+  double top3[3];
+
+	//refinement variables
+	bool keepPH;
+	pepHit ph2;
+	//pepHit bestKeepPH;
+	int lowIndex;
+	int highIndex;
+	bool corr2;
+	double corr3;
+
+	//best hit variables
+	double bestCorr;
+	double bestLow;
+	double bestHigh;
+	double bestDA;
+	int bestCharge;
+	double bestMass;
+	vector<int> bestMatchIndex;
+	vector<float> bestMatchPeak;
+	int bestMatchCount;
+	pepHit bestPH;
+	bool bestKeepPH;
+	int bestOverlap;
+	int bestLowIndex;
+	int bestHighIndex;
+	int bestVariant;
+
+	//Results
+	pepHit ph;
+
+	//Spectrum variables
+	Spectrum origSpec=s;
+	Spectrum refSpec=s;
+	Spectrum tmpSpec;
+
+	//create mask
+	mask.clear();
+	for(i=0;i<s.size();i++) mask.add(s[i].mz,0);
+
+	//find lowest intensity;
+	for(i=0;i<s.size();i++){
+    //printf("%.6lf\t%.1f\n",s[i].mz, s[i].intensity);
+		if(s[i].intensity<lowPoint) lowPoint=s[i].intensity;
+	}
+
+	//clear results vector
+	vPeps.clear();
+
+	//Mark number of variants to analyze
+	if(cs.noBase) varCount=cs.variant->size();
+	else varCount=cs.variant->size()+1;
+
+	//start the loop through all peaks
+	while(true){
+
+		//Find most intense peak. Note that sorting is not possible because
+		//peaks change in intensity as they are deconvolved. Also it is advantageous
+		//to keep peaks in m/z order
+		max=0.0f;
+		for(i=0;i<s.size();i++){
+			if(s[i].intensity<maxHeight && s[i].intensity>max){
+				max=s[i].intensity;
+				maxIndex=i;
+			}
+		}
+
+		//stop searching when we reach lowest original point
+		//this prevents overfitting with lots of partial noise peaks
+		if(max<lowPoint) break;
+
+		//Get the FWHM estimate for the peak we are at.
+		deltaM = CalcFWHM(s[maxIndex].mz,cs.res400,cs.msType);
+
+		//Get the charge states. Note that only remaining peaks are used in the estimate.
+		//I'm not sure this is best, but it is simpler and faster
+		QuickCharge(s,maxIndex,charges);
+
+		//Reset our correlation and matchcount scores. Then iterate through each charge state and find best
+		//match to the peaks.
+		bestCorr=0.0;
+		bestMatchCount=0;
+		for(i=0;i<(int)charges.size();i++){
+
+			//cout << s[maxIndex].mz << "\t" << charges[i] << endl;
+
+			//check all variants
+			for(v=0;v<varCount;v++){
+
+        //cout << "Variant: " << v << endl;
+
+				//use model library, align to top 3 peaks
+				dif=0;
+        top3[0]=top3[1]=top3[2]=0;
+        maxMercuryIndex[0]=maxMercuryIndex[1]=maxMercuryIndex[2]=-1;
+				model=models->getModel(charges[i],v,s[maxIndex].mz);
+				for(k=0; k<model->size; k++) {
+          //cout << "i\t" << model->peaks[k].mz << "\t" << model->peaks[k].intensity << endl;
+					//if(model->peaks[k].intensity>dif){
+          if(model->peaks[k].intensity>top3[0]){
+						//dif = model->peaks[k].intensity;
+            top3[2]=top3[1];
+            top3[1]=top3[0];
+            top3[0]=model->peaks[k].intensity;
+            maxMercuryIndex[2]=maxMercuryIndex[1];
+            maxMercuryIndex[1]=maxMercuryIndex[0];
+						maxMercuryIndex[0]=k;
+          } else if(model->peaks[k].intensity>top3[1]) {
+            top3[2]=top3[1];
+            top3[1]=model->peaks[k].intensity;
+            maxMercuryIndex[2]=maxMercuryIndex[1];
+            maxMercuryIndex[1]=k;
+          } else if(model->peaks[k].intensity>top3[2]) {
+            top3[2]=model->peaks[k].intensity;
+						maxMercuryIndex[2]=k;
+          }
+				}
+				//if(k==0) maxMercuryIndex[1]=-1;
+				//else maxMercuryIndex[1]=maxMercuryIndex[0]-1;		//allow right shift
+				//maxMercuryIndex[2]=maxMercuryIndex[0]+1;				//allow left shift
+
+				//Test all three positions for the model. Note that if the first peak is the base peak, then
+				//no left shift is tested.
+				n=0;
+				while(n<3){
+
+					//skip the left shift if already at leftmost peak.
+					if(maxMercuryIndex[n]<0) {
+						n++;
+						continue;
+					}
+
+          //cout << "ii\tShift #" << n << endl;
+
+					//Align the mercury distribution (MD) to the observed peak. The MD can shift in
+					//either direction for one peak to adjust for system noise. The width of the MD
+					//determines the boundaries for correlation to the observed data.
+					lower=5000.0;
+					upper=0.0;
+					shft = s[maxIndex].mz - model->peaks[maxMercuryIndex[n]].mz;
+					vMR.clear();
+					thisMaxIndex=0;
+					da=0.0f;
+
+					//use model library
+					for(k=0; k<model->size; k++) {
+						
+						r.data=model->peaks[k].intensity;
+						r.mass=model->peaks[k].mz+shft;
+						vMR.push_back(r);
+						if(model->peaks[k].intensity>99.999) thisMaxIndex=vMR.size()-1;
+					
+						if(r.mass<lower) lower=r.mass;
+						if(r.mass>upper) upper=r.mass;
+					}
+					da=model->area;
+
+					//Add a little buffer to the m/z boundaries
+					lower-=0.1;
+					upper+=0.1;
+
+					//Narrow the search to just the area of the spectrum we need
+					lowIndex=BinarySearch(s,lower,true);
+					highIndex=BinarySearch(s,upper,false);
+
+					//if max peak shifts to already solved peak, skip
+					if(!CheckForPeak(vMR,s,thisMaxIndex)){
+						n++;
+						continue;
+					}
+
+					//Match predictions to the observed peaks and record them in the proper array.
+					corr=PeakMatcher(vMR,s,lower,upper,deltaM/2,maxIndex,matchCount,indexOverlap,vMatchIndex,vMatchPeak);
+					//cout << "ii.i\t" << s[maxIndex].mz << " " << s[maxIndex].intensity << "\t" << charges[i] << "\t" << matchCount << "\t" << corr << "\t" << indexOverlap << "\t" << maxIndex << "\tn" << n << endl;
+
+					//check any overlap with observed peptides. Overlap indicates deconvolution may be necessary.
+					//Deconvolution is at best a rough estimate and is not used if it does not improve the correlation
+					//scores.
+					keepPH=false;
+					if(indexOverlap>-1 /*&& indexOverlap>maxIndex*/){
+
+            //cout << "iii\tChecking overlap: " << indexOverlap << "\t" << maxIndex << endl;
+
+						//Find overlapping peptide
+						for(m=0;m<(int)vPeps.size();m++){
+							if(vPeps[m].basePeakIndex==indexOverlap) break;
+						}
+
+						//break out subspectrum; this is done using the original spectrum peak heights, not
+						//the current peak heights. The peak heights are then adjusted to account for the currently
+						//overlapping peptide model.
+						tmpSpec.clear();
+						x=0;
+						int subIndex=-1;
+						for(j=vPeps[m].lowIndex;j<=vPeps[m].highIndex;j++){
+							
+							while(x<(int)vMatchIndex.size() && j>vMatchIndex[x]) x++;
+
+							//generate temporary subspectrum with peak heights reduced for overlapping model
+							if(x<(int)vMatchIndex.size() && j==vMatchIndex[x]){
+								tmpSpec.add(origSpec[j].mz,origSpec[j].intensity-vMatchPeak[x]*max);
+								x++;
+							} else {
+								tmpSpec.add(origSpec[j]);
+							}
+
+							//get the base peak index of the subspectrum
+							if(j==indexOverlap) subIndex=tmpSpec.size()-1;
+						}
+
+						//Re-Solve subspectrum and see if it has better correlation
+						corr2=MatchSubSpectrum(tmpSpec,subIndex,ph2);
+						//cout << "iii.i\tCorr2: " << corr2 << "\t" << ph2.corr << "\t" << origSpec[vPeps[m].basePeakIndex].mz << "\t" << vPeps[m].charge << endl;
+
+						//If correlation is better (or close), go back and try the
+						//newly adjusted peaks.
+						if(corr2 && ph2.corr+0.025>vPeps[m].corr){
+							x=0;
+
+							for(j=lowIndex;j<=highIndex;j++){
+								if(x<tmpSpec.size() && s[j].mz==tmpSpec[x].mz){
+									refSpec[j].intensity=(origSpec[j].intensity+tmpSpec[x].intensity);
+									x++;
+								} else {
+									refSpec[j].intensity=s[j].intensity;
+								}
+							}
+
+							//solve merged models
+							corr3=PeakMatcher(vMR,refSpec,lower,upper,deltaM/2,maxIndex,matchCount2,indexOverlap,vMatchIndex2,vMatchPeak2);
+							//cout << "iii.ii\tCorr3: " << s[maxIndex].mz << " " << s[maxIndex].intensity << "\t" << charges[i] << "\t" << matchCount2 << "\t" << corr3 << "\t" << indexOverlap << endl;
+
+							//keep the new model if it is better than the old one.
+							if(corr3>corr) {
+
+								corr=corr3;
+								vMatchIndex=vMatchIndex2;
+								vMatchPeak=vMatchPeak2;
+								matchCount=matchCount2;
+
+								//refine the overlapping one.
+								keepPH=true;
+								
+							} else {
+
+								//it failed, do nothing and move on.
+								keepPH=false;
+
+							}
+							
+						}
+
+					}//if indexOverlap>-1
+          double tCorr;
+          if(bestMatchCount==0) tCorr=0;
+          else tCorr=0.025*(matchCount-bestMatchCount)/bestMatchCount;
+					//cout << "Old best corr: " << bestCorr << "(" << bestMatchCount << ") This corr: " << corr << "," << corr+tCorr << "(" << matchCount << ")" << endl;
+					if(/*corr>bestCorr ||*/ (corr>cs.corr && corr+tCorr>bestCorr) ){
+						bestMatchIndex=vMatchIndex;
+						bestMatchPeak=vMatchPeak;
+						bestMatchCount=matchCount;
+						bestCorr=corr;
+						bestMass=model->zeroMass+shft*charges[i];
+						bestCharge=charges[i];
+						bestDA=da;
+						bestLow=lower;
+						bestHigh=upper;
+						bestKeepPH=keepPH;
+						bestPH=ph2;
+						bestOverlap=m;
+						bestLowIndex=lowIndex;
+						bestHighIndex=highIndex;
+						bestVariant=v;
+					}
+
+					n++;
+				}//while
+
+			}//for v (variants)
+
+		}//for i (charges)
+
+		//if above threshold, erase peaks.
+		if(bestCorr>cs.corr){
+			ph.area=(float)bestDA;
+			ph.basePeakIndex=maxIndex;
+			ph.charge=bestCharge;
+			ph.corr=bestCorr;
+			ph.highMZ=bestHigh;
+			ph.intensity=max;
+			ph.lowMZ=bestLow;
+			ph.massShift=0.0;
+			ph.monoMass=bestMass;
+			ph.lowIndex=bestLowIndex;
+			ph.highIndex=bestHighIndex;
+			ph.variantIndex=bestVariant;
+			if(bestKeepPH){
+				vPeps[bestOverlap].area=bestPH.area;
+				vPeps[bestOverlap].intensity=bestPH.intensity;
+				vPeps[bestOverlap].corr=bestPH.corr;
+				vPeps[bestOverlap].charge=bestPH.charge;
+				vPeps[bestOverlap].monoMass=bestPH.monoMass;
+				vPeps[bestOverlap].variantIndex=bestPH.variantIndex;
+			}
+			vPeps.push_back(ph);
+			mask[maxIndex].intensity=100.0f;
+
+			for(k=0;k<(int)bestMatchIndex.size();k++){
+				if(bestMatchPeak[k]*max/s[bestMatchIndex[k]].intensity>0.5){
+					s[bestMatchIndex[k]].intensity=-s[bestMatchIndex[k]].intensity;
+				} else {
+					s[bestMatchIndex[k]].intensity-=bestMatchPeak[k]*max;
+				}
+        //cout << "iv\t" << s[bestMatchIndex[k]].mz << " is now " << s[bestMatchIndex[k]].intensity << endl;
+			}
+		}
+
+		//set new maximum
+		maxHeight=max;
+
+	}
+
+	//Sort results by base peak
+  //This sort is expensive. Instead, try sorting before exporting to file. Make sure RefineHits below is not
+  //order dependent.
+	if(vPeps.size()>0) qsort(&vPeps[0],vPeps.size(),sizeof(pepHit),CompareBPI);
+
+	//Refine overfitting based on density
+	RefineHits(vPeps,origSpec);
+
+}
+
+//Reduces the number of features (cs.depth) per 1 Da window. This removes a lot
+//of false hits resulting from jagged tails on really large peaks. Criteria for
+//removal is lowest peak intensity
+void CHardklor2::RefineHits(vector<pepHit>& vPeps, Spectrum& s){
+
+	unsigned int i;
+	int j;
+	double lowp,highp;
+	bool bRestart=true;
+	vector<pepHit> vTmpHit;
+	vector<int> vPepMask;
+	list<int> vList;
+	list<int>::iterator it;
+
+	//generate an index of the peptides to keep or throw away
+	for(i=0;i<vPeps.size();i++) vPepMask.push_back(0);
+
+	//iterate through all hits
+	for(i=0;i<vPeps.size();i++){
+
+		//skip anything already marked for removal
+		if(vPepMask[i]>0)	continue;
+
+		//put a tolerance around each peak
+		lowp=s[vPeps[i].basePeakIndex].mz-0.5;
+		highp=s[vPeps[i].basePeakIndex].mz+0.5;
+
+		//put the current hit in the list
+		vList.clear();
+		vList.push_front(i);
+
+		//find all other hits in the tolerance window
+		//look left first
+		j=i-1;
+		while(j>-1){
+
+			//break out when boundary is reached
+			if(s[vPeps[j].basePeakIndex].mz<lowp) break;
+
+			//skip anything marked for removal.
+			if(vPepMask[j]>0){
+				j--;
+				continue;
+			}
+
+			//add to list from high to low
+			for(it=vList.begin();it!=vList.end();it++){
+				if(s[vPeps[j].basePeakIndex].intensity > s[vPeps[*it].basePeakIndex].intensity) break;
+			}
+			vList.insert(it,j);
+
+			j--;
+		}
+
+		//look right
+		j=i+1;
+		while(j<(int)vPeps.size()){
+
+			//break out when boundary is reached
+			if(s[vPeps[j].basePeakIndex].mz>highp) break;
+
+			//skip anything marked for removal.
+			if(vPepMask[j]>0){
+				j++;
+				continue;
+			}
+
+			//add to list from high to low
+			for(it=vList.begin();it!=vList.end();it++){
+				if(s[vPeps[j].basePeakIndex].intensity > s[vPeps[*it].basePeakIndex].intensity) break;
+			}
+			vList.insert(it,j);
+
+			j++;
+		}
+
+		//remove the lowest peptides below threshold (user specified depth)
+		if((int)vList.size()>cs.depth){
+			it=vList.begin();
+			for(j=0;j<cs.depth;j++)	it++;
+			for(it=it;it!=vList.end();it++)	vPepMask[*it]=1;
+		}
+
+	}
+
+	//copy over the keepers
+	for(i=0;i<vPeps.size();i++){
+		if(vPepMask[i]) continue;
+		vTmpHit.push_back(vPeps[i]);
+	}
+	vPeps.clear();
+	for(i=0;i<vTmpHit.size();i++)vPeps.push_back(vTmpHit[i]);
+
+}
+
+void CHardklor2::ResultToMem(pepHit& ph, Spectrum& s){
+  int i,j;
+  char mods[32];
+  char tmp[16];
+
+  hkm.monoMass = ph.monoMass;
+  hkm.charge = ph.charge;
+  if(cs.distArea) hkm.intensity = ph.area*ph.intensity;
+  else hkm.intensity = ph.intensity;
+  hkm.scan = currentScanNumber;
+  hkm.mz = s[ph.basePeakIndex].mz;
+  hkm.corr = ph.corr;
+
+  //Add mods
+  if(!cs.noBase) i=ph.variantIndex-1;
+	else i=ph.variantIndex;
+	strcpy(mods,"");
+  if(i<0) {
+	  strcat(mods,"_");
+	} else {
+    for(j=0;j<cs.variant->at(i).sizeAtom();j++){
+		  strcat(mods,PT->at(cs.variant->at(i).atAtom(j).iLower).symbol);
+		  sprintf(tmp,"%d",cs.variant->at(i).atAtom(j).iUpper);
+      strcat(mods,tmp);
+		}
+		strcat(mods,"_");
+		for(j=0;j<cs.variant->at(i).sizeEnrich();j++){
+		  sprintf(tmp,"%.2lf",cs.variant->at(i).atEnrich(j).ape);
+      strcat(mods,tmp);
+			strcat(mods,PT->at(cs.variant->at(i).atEnrich(j).atomNum).symbol);
+      sprintf(tmp,"%d_",cs.variant->at(i).atEnrich(j).isotope);
+      strcat(mods,tmp);
+		}
+	}
+  strcpy(hkm.mods,mods);
+  vResults.push_back(hkm);
+}
+
+void CHardklor2::SetResultsToMemory(bool b){
+  bMem=b;
+}
+
+int CHardklor2::Size(){
+  return vResults.size();
+}
+
+void CHardklor2::WritePepLine(pepHit& ph, Spectrum& s, FILE* fptr, int format){
+  int i,j;
+
+  if(format==0){
+		fprintf(fptr,"P\t%.4lf",ph.monoMass);
+		fprintf(fptr,"\t%d",ph.charge);
+		if(cs.distArea) fprintf(fptr,"\t%.0f",ph.area*ph.intensity);
+		else fprintf(fptr,"\t%.0f",ph.intensity);
+		fprintf(fptr,"\t%.4lf",s[ph.basePeakIndex].mz);
+		fprintf(fptr,"\t%.4lf-%.4lf",s[ph.lowIndex].mz,s[ph.highIndex].mz);
+		fprintf(fptr,"\t0.0000");
+
+		//Add mods
+		if(!cs.noBase) i=ph.variantIndex-1;
+		else i=ph.variantIndex;
+		if(i<0) {
+			fprintf(fptr,"\t_");
+		} else {
+			fprintf(fptr,"\t");
+			for(j=0;j<cs.variant->at(i).sizeAtom();j++){
+				fprintf(fptr,"%s",PT->at(cs.variant->at(i).atAtom(j).iLower).symbol);
+				fprintf(fptr,"%d",cs.variant->at(i).atAtom(j).iUpper);
+			}
+			fprintf(fptr,"_");
+			for(j=0;j<cs.variant->at(i).sizeEnrich();j++){
+				fprintf(fptr,"%.2lf",cs.variant->at(i).atEnrich(j).ape);
+				fprintf(fptr,"%s",PT->at(cs.variant->at(i).atEnrich(j).atomNum).symbol);
+				fprintf(fptr,"%d_",cs.variant->at(i).atEnrich(j).isotope);
+			}
+		}
+
+		fprintf(fptr,"\t%.4lf\n",ph.corr);
+
+  } else if(format==1) {
+		/*
+      fptr << "<Peak Mass=\"" << sa.predPep->at(pepID).GetVariant(varID).GetMonoMass() << "\" ";
+      fptr << "ChargeState=\"" << sa.predPep->at(pepID).GetVariant(varID).GetCharge() << "\" ";
+      if(cs.distArea) fptr << "Area=\"" << sa.predPep->at(pepID).GetIntensity()*sa.predPep->at(pepID).GetVariant(varID).GetArea() << "\" ";
+		  else fptr << "Intensity=\"" << sa.predPep->at(pepID).GetIntensity() << "\" ";
+			fptr << "MZ=\"" << sa.predPep->at(pepID).GetMZ() << "\" ";
+			fptr << "Window=\"" << sa.peaks.at(0).mz << "-" << sa.peaks.at(sa.peaks.size()-1).mz << "\" ";
+			fptr << "SN=\"" << sa.S2NCutoff << "\" ";
+
+      //Add mods
+      fptr << "Mod=\"";
+			for(j=0;j<sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().sizeAtom();j++){
+				fptr << PT->at(sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atAtom(j).iLower).symbol;
+				fptr << sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atAtom(j).iUpper;
+			}
+			fptr << "_";
+			for(j=0;j<sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().sizeEnrich();j++){
+				fptr << setiosflags(ios::fixed) << setprecision(2);
+				fptr << sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atEnrich(j).ape;
+				fptr << setiosflags(ios::fixed) << setprecision(4);
+				fptr << PT->at(sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atEnrich(j).atomNum).symbol;
+				fptr << sa.predPep->at(pepID).GetVariant(varID).GetHKVariant().atEnrich(j).isotope;
+				fptr << "_";
+			}
+      fptr << "\" ";
+
+			fptr << "Score=\"" << obj.corr << "\"/>" << endl;
+			*/
+
+		//reduced output
+  } else if(format==2){
+		fprintf(fptr,"%.4lf",(ph.monoMass+ph.charge*1.007276466)/ph.charge);
+		if(cs.distArea) fprintf(fptr,"\t%.0f",ph.area*ph.intensity);
+		else fprintf(fptr,"\t%.0f",ph.intensity);
+		fprintf(fptr,"\t%d\n",ph.charge);
+	}
+}
+
+void CHardklor2::WriteScanLine(Spectrum& s, FILE* fptr, int format){
+
+  if(format==0) {
+    fprintf(fptr,"S\t%d\t%.4f\t%s",s.getScanNumber(),s.getRTime(),cs.inFile);
+
+		//For Alex Panchaud, special ZS case
+		if(s.getFileType()==ZS || s.getFileType()==UZS){
+			if(s.sizeZ()>0){
+				for(int i=0;i<s.sizeZ();i++) fprintf(fptr,"\t%d,%.6lf",s.atZ(i).z,s.atZ(i).mh);
+			}
+		} else {
+
+			//otherwise output precursor info if it exists
+			if(s.sizeZ()==1){
+				fprintf(fptr,"\t%.4lf\t%d\t%.4lf",s.atZ(0).mh-1.00727649,s.atZ(0).z,s.getMZ());
+			} else if(s.sizeZ()>1){
+				fprintf(fptr,"\t0.0\t0\t%.4lf",s.getMZ());
+			} else {
+				fprintf(fptr,"\t0.0\t0\t0.0");
+			}
+		}
+    fprintf(fptr,"\n");
+
+		//For XML output
+  } else if(format==1){
+    fprintf(fptr,"<Spectrum Scan=\"%d\" ",s.getScanNumber());
+		fprintf(fptr,"RetentionTime=\"%.4f\" ",s.getRTime()); 
+		fprintf(fptr,"Filename=\"%s\"",cs.inFile);
+		if(s.getFileType()==ZS || s.getFileType()==UZS){
+			if(s.sizeZ()>0){
+				for(int i=0;i<s.sizeZ();i++) fprintf(fptr," PeptideSignal%d=\"%d,%.4lf\"",i,s.atZ(i).z,s.atZ(i).mh);
+			}
+		} else {
+			if(s.sizeZ()==1){
+				fprintf(fptr," AccMonoMass=\"%.4lf\" PrecursorCharge=\"%d\" PrecursorMZ=\"%.4lf\"",s.atZ(0).mh-1.00727649,s.atZ(0).z,s.getMZ());
+			} else if(s.sizeZ()>1){
+				fprintf(fptr," AccMonoMass=\"0.0\" PrecursorCharge=\"0\" PrecursorMZ=\"%.4lf\"",s.getMZ());
+			} else {
+				fprintf(fptr," AccMonoMass=\"0.0\" PrecursorCharge=\"0\" PrecursorMZ=\"0.0\"");
+			}
+		}
+    fprintf(fptr,">\n");
+
+		//For reduced output
+	} else if(format==2) {
+		fprintf(fptr, "Scan=%d	RT=%.4f\n", s.getScanNumber(),s.getRTime());
+	}
+}
\ No newline at end of file
diff --git a/src/app/hardklor/CHardklor2.h b/src/app/hardklor/CHardklor2.h
new file mode 100644
index 0000000..da94d15
--- /dev/null
+++ b/src/app/hardklor/CHardklor2.h
@@ -0,0 +1,119 @@
+#ifndef _CHARDKLOR2_H
+#define _CHARDKLOR2_H
+
+#include <iostream>
+#include <string>
+#include <vector>
+#include <list>
+#include <cmath>
+
+#include "MSObject.h"
+#include "MSReader.h"
+#include "Spectrum.h"
+#include "HardklorTypes.h"
+#include "CAveragine.h"
+#include "CMercury8.h"
+#include "CHardklor.h"
+#include "CModelLibrary.h"
+
+#ifdef _MSC_VER
+
+#else
+#include <sys/time.h>
+#endif
+
+using namespace std;
+
+class CHardklor2{
+
+ public:
+  //Constructors & Destructors:
+	CHardklor2(CAveragine *a, CMercury8 *m, CModelLibrary *lib);
+  ~CHardklor2();
+
+  //Operators
+  hkMem& operator[](const int& index);
+
+  //Methods:
+  void  Echo(bool b);
+  int   GoHardklor(CHardklorSetting sett, Spectrum* s=NULL);
+  void    QuickCharge(Spectrum& s, int index, vector<int>& v);
+  void  SetResultsToMemory(bool b);
+  int   Size();
+
+ protected:
+
+ private:
+  //Methods:
+  int     BinarySearch(Spectrum& s, double mz, bool floor);
+  double  CalcFWHM(double mz,double res,int iType);
+  void    Centroid(Spectrum& s, Spectrum& out);
+  bool    CheckForPeak(vector<Result>& vMR, Spectrum& s, int index);
+  int     CompareData(const void*, const void*);
+  double  LinReg(vector<float>& mer, vector<float>& obs);
+  bool    MatchSubSpectrum(Spectrum& s, int peakIndex, pepHit& pep);
+  double  PeakMatcher(vector<Result>& vMR, Spectrum& s, double lower, double upper, double deltaM, int matchIndex, int& matchCount, int& indexOverlap, vector<int>& vMatchIndex, vector<float>& vMatchIntensity);
+  double  PeakMatcherB(vector<Result>& vMR, Spectrum& s, double lower, double upper, double deltaM, int matchIndex, int& matchCount, vector<int>& vMatchIndex, vector<float>& vMatchIntensity);
+  void    QuickHardklor(Spectrum& s, vector<pepHit>& vPeps);
+  void    RefineHits(vector<pepHit>& vPeps, Spectrum& s);
+  void    ResultToMem(pepHit& ph, Spectrum& s);
+  void    WritePepLine(pepHit& ph, Spectrum& s, FILE* fptr, int format=0); 
+  void    WriteScanLine(Spectrum& s, FILE* fptr, int format=0); 
+
+  static int CompareBPI(const void *p1, const void *p2);
+
+  //Data Members:
+  CHardklorSetting  cs;
+  CAveragine*       averagine;
+  CMercury8*        mercury;
+  CModelLibrary*    models;
+  CPeriodicTable*   PT;
+  Spectrum          mask;
+  hkMem             hkm;
+  bool              bEcho;
+  bool              bMem;
+  int               currentScanNumber;
+
+  //Vector for holding results in memory should that be needed
+  vector<hkMem> vResults;
+
+  //Temporary Data Members:
+  char bestCh[200];
+  double BestCorr;
+  int CorrMatches;
+  int ExtraPre;
+  int ExtraObs;
+
+	int SSIterations;
+
+  //For accurate timing of Hardklor
+  #ifdef _MSC_VER
+    __int64 startTime;
+    __int64 stopTime;
+    __int64 loadTime;
+    __int64 analysisTime;
+    __int64 timerFrequency;
+    __int64 tmpTime1;
+    __int64 tmpTime2;
+    #define getExactTime(a) QueryPerformanceCounter((LARGE_INTEGER*)&a)
+    #define getTimerFrequency(a) QueryPerformanceFrequency((LARGE_INTEGER*)&a)
+    #define toMicroSec(a) (a)
+    #define timeToSec(a,b) (a/b)
+  #else
+    timeval startTime;
+    timeval stopTime;
+    uint64_t loadTime;
+    uint64_t splitTime;
+    uint64_t analysisTime;
+    uint64_t tmpTime1;
+    uint64_t tmpTime2;
+    int timerFrequency;
+    #define getExactTime(a) gettimeofday(&a,NULL)
+    #define toMicroSec(a) a.tv_sec*1000000+a.tv_usec
+    #define getTimerFrequency(a) (a)=1
+    #define timeToSec(a,b) (a/1000000)
+  #endif
+
+};
+
+#endif
diff --git a/src/app/hardklor/CHardklorParser.cpp b/src/app/hardklor/CHardklorParser.cpp
new file mode 100644
index 0000000..79fc80d
--- /dev/null
+++ b/src/app/hardklor/CHardklorParser.cpp
@@ -0,0 +1,547 @@
+#include "CHardklorParser.h"
+
+using namespace std;
+
+CHardklorParser::CHardklorParser(){
+  vQueue = new vector<CHardklorSetting>;
+}
+
+CHardklorParser::~CHardklorParser(){
+  delete vQueue;
+}
+
+//Takes a command line and breaks it into tokens
+//Tokens are then read and used to set global and local parameters
+void CHardklorParser::parse(char* cmd) {
+
+  int j;
+  bool isGlobal=true;
+  sMolecule m;
+  char *tok;
+  char tmpstr[256];
+	char upStr[64];
+  string tstr;
+  vector<string> vs;
+
+  /*
+	//For modifications
+	CHardklorVariant v;
+	CPeriodicTable* PT;
+	int j,k;
+	string atom;
+	string isotope;
+	string percent;
+	bool badMod;
+	int atomNum;
+	bool bNew;
+  */
+
+	bool bFile;
+	char param[32];
+
+  CHardklorSetting hs;
+
+	//Replace first # with a terminator
+	tok=strstr(cmd,"#");
+	if(tok!=NULL) strncpy(tok,"\0",1);
+
+	//if we have only white space, exit here
+	strcpy(tmpstr,cmd);
+	tok=strtok(tmpstr," \t\n");
+	if(tok==NULL) return;
+
+	//Check if we have a parameter (has '=' in it) or a file request.
+	tok=strstr(cmd,"=");
+	if(tok==NULL) bFile=true;
+	else bFile=false;
+
+	//Read file and return, if needed
+	if(bFile){
+
+		hs=global;
+		       
+		//on systems that allow a space in the path, require quotes (") to capture
+    //complete file name
+    strcpy(tmpstr,cmd);
+
+    //Check for quote
+    if(tmpstr[0]=='\"'){
+			
+			//continue reading tokens until another quote is found
+			j=1;
+			while(true){
+				if(j==strlen(tmpstr)){
+					cout << "Invalid input file." << endl;
+					exit(-1);
+				}
+				if(tmpstr[j]=='\"') break;
+			}
+			tmpstr[j]='\0';
+			strcpy(hs.inFile,&tmpstr[1]);
+			j++;
+		} else {
+			tok=strtok(tmpstr," \t\n");
+			strcpy(hs.inFile,tmpstr);
+			j=strlen(tmpstr);
+		}
+
+		//Find first non-whitespace
+		while(true){
+			if(j>=(int)strlen(cmd)){
+				cout << "Invalid output file." << endl;
+				exit(-1);
+			}
+			if(cmd[j]!=' ' && cmd[j]!='\t') break;
+			j++;
+		}
+
+		strcpy(tmpstr,&cmd[j]);
+
+    //Check for quote
+    if(tmpstr[0]=='\"'){
+			
+			//continue reading tokens until another quote is found
+			j=1;
+			while(true){
+				if(j==strlen(tmpstr)){
+					cout << "Invalid output file." << endl;
+					exit(-1);
+				}
+				if(tmpstr[j]=='\"') break;
+			}
+			tmpstr[j]='\0';
+			strcpy(hs.outFile,&tmpstr[1]);
+			j++;
+		} else {
+			tok=strtok(tmpstr," \t\n");
+			strcpy(hs.outFile,tmpstr);
+			j=strlen(tmpstr);
+		}
+
+		//cout << hs.inFile << "\t" << hs.outFile << endl;
+
+		hs.fileFormat = getFileFormat(hs.inFile);
+		vQueue->push_back(hs);
+		return;
+	}
+
+	//Read parameter
+	tok=strtok(cmd," \t=\n");
+	if(tok==NULL) return;
+	strcpy(param,tok);
+	tok=strtok(NULL," \t=\n");
+	if(tok==NULL) {
+		warn(param,0);
+		return;
+	}
+
+	//process parameter
+	if(strcmp(param,"algorithm")==0){
+		for(j=0;j<(int)strlen(tok);j++) upStr[j]=toupper(tok[j]);
+		upStr[j]='\0';
+		if(strcmp(upStr,"BASIC")==0) global.algorithm=Basic;
+		else if (strcmp(upStr,"VERSION1")==0) global.algorithm=FastFewestPeptides;
+		else if (strcmp(upStr,"VERSION2")==0) global.algorithm=Version2;
+		else {
+			global.algorithm=Version2;
+			warn("Unknown algorithm. Defaulting to Version2.",2);
+		}
+
+	} else if(strcmp(param,"averagine_mod")==0){
+    if(strlen(tok)==1 && tok[0]=='0') global.variant->clear();
+    else {
+      tstr=tok;
+      tok=strtok(NULL," \t\n");
+      while(tok!=NULL){
+        tstr+=" ";
+        tstr+=tok;
+        tok=strtok(NULL," \t\n");
+      }      
+      if(!makeVariant(&tstr[0])) warn("Invalid averagine_mod value. Skipping averagine_mod.",2);
+    }
+
+	} else if(strcmp(param,"boxcar_averaging")==0){
+		global.boxcar=atoi(tok);
+    if(global.boxcar>0 && global.boxcar%2==0) {
+			global.boxcar++;
+			warn("boxcar_averaging value is even number. Incrementing by 1.",2);
+		}
+
+	} else if(strcmp(param,"boxcar_filter")==0){
+		global.boxcarFilter=atoi(tok);
+
+	} else if(strcmp(param,"boxcar_filter_ppm")==0){
+		global.ppm=atof(tok);
+
+	} else if(strcmp(param,"centroided")==0){
+		if(atoi(tok)!=0) global.centroid=true;
+		else global.centroid=false;
+
+	} else if(strcmp(param,"charge_algorithm")==0){
+		for(j=0;j<(int)strlen(tok);j++) upStr[j]=toupper(tok[j]);
+		upStr[j]='\0';
+		if(strcmp(upStr,"QUICK")==0) global.chargeMode='Q';
+		else if (strcmp(upStr,"FFT")==0) global.chargeMode='F';
+		else if (strcmp(upStr,"PATTERSON")==0) global.chargeMode='P';
+		else if (strcmp(upStr,"SENKO")==0) global.chargeMode='S';
+		else if (strcmp(upStr,"NONE")==0) global.chargeMode='B';
+		else {
+			global.chargeMode='Q';
+			warn("Unknown charge algorithm. Defaulting to Quick.",2);
+		}
+
+	} else if(strcmp(param,"charge_max")==0){
+		global.maxCharge=atoi(tok);
+
+	} else if(strcmp(param,"charge_min")==0){
+		global.minCharge=atoi(tok);
+
+	} else if(strcmp(param,"correlation")==0){
+		global.corr=atof(tok);
+
+	} else if(strcmp(param,"depth")==0){
+		global.depth=atoi(tok);
+
+	} else if(strcmp(param,"distribution_area")==0){
+		if(atoi(tok)!=0) global.distArea=true;
+		else global.distArea=false;
+
+	} else if(strcmp(param,"hardklor_data")==0){
+		strcpy(global.HardklorFile,tok);
+
+	} else if(strcmp(param,"instrument")==0){
+		for(j=0;j<(int)strlen(tok);j++) upStr[j]=toupper(tok[j]);
+		upStr[j]='\0';
+		if(strcmp(upStr,"FTICR")==0) global.msType=FTICR;
+		else if (strcmp(upStr,"ORBITRAP")==0) global.msType=OrbiTrap;
+		else if (strcmp(upStr,"TOF")==0) global.msType=TOF;
+		else if (strcmp(upStr,"QIT")==0) global.msType=QIT;
+		else {
+			global.msType=OrbiTrap;
+			warn("Unknown instrument type. Defaulting to Orbitrap.",2);
+		}
+
+	} else if(strcmp(param,"isotope_data")==0){
+    strcpy(global.MercuryFile,tok);
+
+	} else if(strcmp(param,"max_features")==0){
+	} else if(strcmp(param,"ms_level")==0){
+    if(atoi(tok)==3){
+      global.mzXMLFilter=MS3;
+      global.msLevel=3;
+    } else if(atoi(tok)==2) {
+      global.mzXMLFilter=MS2;
+      global.msLevel=2;
+    } else {
+      global.mzXMLFilter=MS1;
+      global.msLevel=1;
+    }
+
+	} else if(strcmp(param,"mz_max")==0){
+		global.window.dUpper=atof(tok);
+
+	} else if(strcmp(param,"mz_min")==0){
+		global.window.dLower=atof(tok);
+
+	} else if(strcmp(param,"mz_window")==0){
+		global.winSize=atof(tok);
+
+	} else if(strcmp(param,"resolution")==0){
+		global.res400=atof(tok);
+
+	} else if(strcmp(param,"scan_range_max")==0){
+		global.scan.iUpper=atoi(tok);
+
+	} else if(strcmp(param,"scan_range_min")==0){
+		global.scan.iLower=atoi(tok);
+
+	} else if(strcmp(param,"sensitivity")==0){
+	} else if(strcmp(param,"signal_to_noise")==0){
+		global.sn=atof(tok);
+
+	} else if(strcmp(param,"smooth")==0){
+		global.smooth=atoi(tok);
+
+	} else if(strcmp(param,"sn_window")==0){
+		global.snWindow=atof(tok);
+
+	} else if(strcmp(param,"static_sn")==0){
+		if(atoi(tok)!=0) global.staticSN=true;
+		else global.staticSN=false;
+
+	} else if(strcmp(param,"xml")==0){
+		if(atoi(tok)!=0) global.xml=true;
+		else global.xml=false;
+
+	} else {
+		warn(param,1);
+	}
+
+}
+
+bool CHardklorParser::parseCMD(int argc, char* argv[]){
+
+  int i=2;
+  char tstr[512];
+
+  while(i<argc-2){
+    if(argv[i][0]=='-'){
+      strcpy(tstr,&argv[i][1]);
+      strcat(tstr," = ");
+      strcat(tstr,argv[i+1]);
+      parse(tstr);
+    } else {
+      cout << "There was an error with your command line parameters." << endl;
+      return false;
+    }
+    i+=2;
+  }
+
+  strcpy(tstr,argv[argc-2]);
+  strcat(tstr," ");
+  strcat(tstr,argv[argc-1]);
+  parse(tstr);  
+
+  return true;
+
+}
+
+
+//Reads in a config file and passes it to the parser
+bool CHardklorParser::parseConfig(char* c){
+  fstream fptr;
+  char tstr[512];
+
+  fptr.open(c,ios::in);
+  if(!fptr.good()){
+    cout << "Cannot open config file!" << endl;
+    return false;
+  }
+
+  while(!fptr.eof()) {
+    fptr.getline(tstr,512);
+    if(tstr[0]==0) continue;
+    if(tstr[0]=='#') continue;
+    parse(tstr);
+  }
+
+  fptr.close();
+  return true;
+}
+
+CHardklorSetting& CHardklorParser::queue(int i){
+  return vQueue->at(i);
+}
+
+int CHardklorParser::size(){
+  return vQueue->size();
+}
+
+//Identifies file format from extension - Must conform to these conventions
+MSFileFormat CHardklorParser::getFileFormat(char* c){
+
+	char file[256];
+	char ext[256];
+	char *tok;
+
+	strcpy(file,c);
+	tok=strtok(file,".\n");
+	while(tok!=NULL){
+		strcpy(ext,tok);
+		tok=strtok(NULL,".\n");
+	}
+
+	if(strcmp(ext,"ms1")==0 || strcmp(ext,"MS1")==0) return ms1;
+	if(strcmp(ext,"ms2")==0 || strcmp(ext,"MS2")==0) return ms2;
+	if(strcmp(ext,"bms1")==0 || strcmp(ext,"BMS1")==0) return bms1;
+	if(strcmp(ext,"bms2")==0 || strcmp(ext,"BMS2")==0) return bms2;
+	if(strcmp(ext,"cms1")==0 || strcmp(ext,"CMS1")==0) return cms1;
+	if(strcmp(ext,"cms2")==0 || strcmp(ext,"CMS2")==0) return cms2;
+	if(strcmp(ext,"zs")==0 || strcmp(ext,"ZS")==0) return zs;
+	if(strcmp(ext,"uzs")==0 || strcmp(ext,"UZS")==0) return uzs;
+	if(strcmp(ext,"mzML")==0 || strcmp(ext,"MZML")==0) return mzML;
+	if(strcmp(ext,"mzXML")==0 || strcmp(ext,"MZXML")==0) return mzXML;
+	if(strcmp(ext,"mgf")==0 || strcmp(ext,"MGF")==0) return mgf;
+	if(strcmp(ext,"mz5")==0 || strcmp(ext,"MZ5")==0) return mz5;
+  if(strcmp(ext,"raw")==0 || strcmp(ext,"RAW")==0) return raw;
+	return dunno;
+
+}
+
+void CHardklorParser::warn(char* c, int i){
+	switch(i){
+		case 0:
+			cout << "Parameter " << c << " has no value." << endl;
+			break;
+		case 1:
+			cout << "Unknown parameter: " << c << endl;
+			break;
+		case 2:
+		default:
+			cout << c << endl;
+			break;
+	}
+}
+
+bool CHardklorParser::makeVariant(char* c){
+
+  //For modifications
+	CHardklorVariant v;
+	CPeriodicTable* PT;
+	int j,k;
+	string atom;
+	string isotope;
+	string percent;
+	int atomNum;
+	bool bNew;
+  
+  char str[256];
+  char* tok;
+  strcpy(str,c);
+
+  v.clear();
+	PT = new CPeriodicTable(global.HardklorFile);  
+
+  tok=strtok(str," \n");  
+  while(tok!=NULL){
+    if(isdigit(tok[0]) || tok[0]=='.'){
+      //we have enrichment
+      percent="";
+      atom="";
+      isotope="";
+      
+      //Get the APE
+      for(j=0;j<(int)strlen(tok);j++){
+        if(isdigit(tok[j]) || tok[j]=='.') {
+          if(percent.size()==15){
+            warn("Bad averagine_mod: Malformed modification flag, too many digits.",2);
+            return false;
+          }
+          percent+=tok[j];
+        } else {
+          break;
+        }
+      }
+      
+      //Get the atom
+      for(j=j;j<(int)strlen(tok);j++){
+        if(isalpha(tok[j])) {
+          if(atom.size()==2){
+            warn("Bad averagine_mod: Malformed modification flag, invalid atom",2);
+            return false;
+          }
+          atom+=tok[j];
+        } else {
+          break;
+        }
+      }
+
+      //Get the isotope
+      for(j=j;j<(int)strlen(tok);j++){
+        if(isotope.size()==2){
+          warn("Bad averagine_mod: Malformed modification flag, bad isotope",2);
+          return false;
+        }
+        isotope+=tok[j];
+      }
+
+      //format the atom properly
+      atom.at(0)=toupper(atom.at(0));
+      if(atom.size()==2) atom.at(1)=tolower(atom.at(1));
+
+      //Get the array number for the atom
+      atomNum=-1;
+      for(j=0;j<PT->size();j++){
+        if(strcmp(PT->at(j).symbol,&atom[0])==0){
+          atomNum=j;
+          break;
+        }
+      }
+
+      if(atomNum==-1){
+        warn("Bad averagine_mod: Malformed modification flag, atom not in periodic table",2);
+        return false;
+      }
+
+      v.addEnrich(atomNum,atoi(&isotope[0]),atof(&percent[0]));
+
+    } else {
+      //we have molecule
+      percent="";
+      atom="";
+      bNew=true;
+
+      //Get the atom
+      for(j=0;j<(int)strlen(tok);j++){
+
+        //Check for an atom symbol
+        if(isalpha(tok[j])) {
+
+          //Check if we were working on the count of the previous atom
+          if(!bNew) {
+            bNew=true;
+
+            //Make sure the atom has uppercase-lowercase letter format;
+            atom.at(0)=toupper(atom.at(0));
+            if(atom.size()==2) atom.at(1)=tolower(atom.at(1));
+
+            //Look up the new atom
+            for(k=0;k<PT->size();k++){
+              if(strcmp(PT->at(k).symbol,&atom[0])==0){
+                //Add the new atom to the variant
+                v.addAtom(k,atoi(&percent[0]));
+                break;
+              }
+            }
+
+            //Clear the fields
+            percent="";
+            atom="";
+          }
+
+          //Add this letter to the atom symbol
+          if(atom.size()==2){
+            warn("Bad averagine_mod: Malformed modification flag, invalid atom",2);
+            return false;
+          }
+          atom+=tok[j];
+        
+        } else if(isdigit(tok[j])){
+	
+          //Whenever we find a digit, we have already found an atom symbol
+          bNew=false;
+          
+          //Add this letter to the atom count
+          if(percent.size()==12){
+            warn("Bad averagine_mod: Malformed modification flag, unreasonable atom count",2);
+            return false;
+          }
+          percent+=tok[j];
+        
+        }      
+      }
+      
+      //process the last atom
+      //Make sure the atom has uppercase-lowercase letter format;
+      atom.at(0)=toupper(atom.at(0));
+      if(atom.size()==2) atom.at(1)=tolower(atom.at(1));
+      
+      //Look up the new atom
+      for(k=0;k<PT->size();k++){
+        if(strcmp(PT->at(k).symbol,&atom[0])==0){
+          
+          //Add the new atom to the variant
+          v.addAtom(k,atoi(&percent[0]));
+          break;
+        
+        }
+      }
+    }
+    tok=strtok(NULL," \n"); 
+	}
+
+	global.variant->push_back(v);
+	delete PT;
+  return true;
+
+}
\ No newline at end of file
diff --git a/src/app/hardklor/CHardklorParser.h b/src/app/hardklor/CHardklorParser.h
new file mode 100644
index 0000000..9650a72
--- /dev/null
+++ b/src/app/hardklor/CHardklorParser.h
@@ -0,0 +1,42 @@
+#ifndef _CHARDKLORPARSER_H
+#define _CHARDKLORPARSER_H
+
+#include <fstream>
+#include <iostream>
+#include <vector>
+
+#include "CHardklorSetting.h"
+#include "CPeriodicTable.h"
+#include "MSToolkitTypes.h"
+
+using namespace std;
+
+class CHardklorParser {
+
+ public:
+  //Constructors & Destructors
+  CHardklorParser();
+  ~CHardklorParser();
+
+  //Methods
+  void parse(char*);
+  bool parseCMD(int argc, char* argv[]);
+  bool parseConfig(char*);
+	MSFileFormat getFileFormat(char* c);
+  CHardklorSetting& queue(int);
+  int size();
+
+ protected:
+
+ private:
+	 //Methods
+   bool makeVariant(char* c);
+	 void warn(char*, int);
+	 
+	 //Data Members
+	 CHardklorSetting global;
+	 vector<CHardklorSetting> *vQueue;
+};
+
+
+#endif
diff --git a/src/app/hardklor/CHardklorProtein.cpp b/src/app/hardklor/CHardklorProtein.cpp
new file mode 100644
index 0000000..a1030c1
--- /dev/null
+++ b/src/app/hardklor/CHardklorProtein.cpp
@@ -0,0 +1,73 @@
+#include "CHardklorProtein.h"
+#include <cstring>
+
+using namespace std;
+
+CHardklorProtein::CHardklorProtein(){
+  enrich = new vector<sEnrichMercury>;
+}
+
+CHardklorProtein::CHardklorProtein(const CHardklorProtein& c){
+  int i;
+
+  enrich = new vector<sEnrichMercury>;
+  for(i=0;i<c.enrich->size();i++) enrich->push_back(c.enrich->at(i));
+
+  ID = c.ID;
+  mz = c.mz;
+  monoMass = c.monoMass;
+  shft = c.shft;
+  abun = c.abun;
+  charge = c.charge;
+  C = c.C;
+  rTime = c.rTime;
+  strcpy(seq,c.seq);
+
+}
+
+CHardklorProtein::~CHardklorProtein(){
+  delete enrich;
+}
+
+CHardklorProtein& CHardklorProtein::operator=(const CHardklorProtein& c){
+  int i;
+
+  if(this != &c){
+    delete enrich;
+    enrich = new vector<sEnrichMercury>;
+    for(i=0;i<c.enrich->size();i++) enrich->push_back(c.enrich->at(i));
+    
+    ID = c.ID;
+    mz = c.mz;
+    monoMass = c.monoMass;
+    shft = c.shft;
+    abun = c.abun;
+    charge = c.charge;
+    C = c.C;
+    rTime = c.rTime;
+    strcpy(seq,c.seq);
+  }
+  return *this;
+
+}
+
+void CHardklorProtein::add(int a, int c, double b){
+  sEnrichMercury s;
+  s.atomNum = a;
+  s.isotope = c;
+  s.ape = b;
+  enrich->push_back(s);
+}
+
+sEnrichMercury& CHardklorProtein::at(int i){
+  return enrich->at(i);
+}
+
+void CHardklorProtein::clear(){
+  delete enrich;
+  enrich = new vector<sEnrichMercury>;
+}
+
+int CHardklorProtein::size(){
+  return enrich->size();
+}
diff --git a/src/app/hardklor/CHardklorProtein.h b/src/app/hardklor/CHardklorProtein.h
new file mode 100644
index 0000000..81f4fde
--- /dev/null
+++ b/src/app/hardklor/CHardklorProtein.h
@@ -0,0 +1,42 @@
+#ifndef _CHARDKLORPROTEIN_H
+#define _CHARDKLORPROTEIN_H
+
+#include <vector>
+
+#include "HardklorTypes.h"
+
+using namespace std;
+
+class CHardklorProtein {
+ public:
+  //Constructors & Destructors:
+  CHardklorProtein();
+  CHardklorProtein(const CHardklorProtein&);
+  ~CHardklorProtein();
+
+  //Functions:
+  CHardklorProtein& operator=(const CHardklorProtein&);
+  void add(int, int, double);
+  sEnrichMercury& at(int);
+  void clear();
+  int size();
+
+  //Data Members:
+  sInt ID;
+  double mz;
+  double monoMass;
+  double shft;
+  double abun;
+  double rTime;
+  int charge;
+  int C;
+  char seq[64];
+  
+ protected:
+ private:
+  //Data Members:
+  vector<sEnrichMercury> *enrich;
+
+};
+
+#endif
diff --git a/src/app/hardklor/CHardklorSetting.cpp b/src/app/hardklor/CHardklorSetting.cpp
new file mode 100644
index 0000000..6fb6baa
--- /dev/null
+++ b/src/app/hardklor/CHardklorSetting.cpp
@@ -0,0 +1,198 @@
+#include "CHardklorSetting.h"
+
+using namespace std;
+
+CHardklorSetting::CHardklorSetting(){
+  noBase=false;
+	iAnalysis=false;
+  maxCharge=5;
+	minCharge=1;
+  msLevel=1;
+  depth=3;
+  peptide=10;
+  smooth=0;
+  corr=0.85;
+  sn=1.0;
+  scan.iLower=0;
+  scan.iUpper=0;
+  window.dLower=0;
+  window.dUpper=0;
+  strcpy(inFile,"");
+  strcpy(outFile,"");
+	strcpy(MercuryFile,"");
+  strcpy(HardklorFile,"");
+	algorithm=FastFewestPeptides;
+	variant = new vector<CHardklorVariant>;
+
+	msType=FTICR;
+	res400=100000;
+	winSize=4.0;
+
+	chargeMode='Q';
+	snWindow=250.0;
+	skipZero=true;
+	noSplit=false;
+	sl=2;
+	fileFormat=dunno;
+	mzXMLFilter=MS1;
+	distArea=false;
+	strcpy(formula,"");
+
+	centroid=false;
+	staticSN=true;
+  xml=false;
+	reducedOutput=false;
+
+  //ppMatch=1;
+  //ppWin=1;
+  //noiseMatch=1;
+  //noiseWindow=3;
+  ppm=10.0;
+  //sna=0;
+	boxcar=0;
+	boxcarFilter=0;
+
+  //rawAvg=false;
+  //rawAvgWidth=1;
+  //rawAvgCutoff=1000;
+
+  strcpy(rawFilter,"");
+}
+
+CHardklorSetting::CHardklorSetting(const CHardklorSetting& c){
+  int i;
+
+	//Copy variant list
+  variant = new vector<CHardklorVariant>;
+  for(i=0;i<c.variant->size();i++) variant->push_back(c.variant->at(i));
+	
+  //Copy other data memebers
+  noBase=c.noBase;
+	iAnalysis=c.iAnalysis;
+  maxCharge=c.maxCharge;
+	minCharge=c.minCharge;
+  msLevel=c.msLevel;
+  depth=c.depth;
+  peptide=c.peptide;
+  smooth=c.smooth;
+  corr=c.corr;
+  sn=c.sn;
+  scan.iLower=c.scan.iLower;
+  scan.iUpper=c.scan.iUpper;
+  window.dLower=c.window.dLower;
+  window.dUpper=c.window.dUpper;
+  strcpy(inFile,c.inFile);
+  strcpy(outFile,c.outFile);
+  strcpy(MercuryFile,c.MercuryFile);
+  strcpy(HardklorFile,c.HardklorFile);
+	algorithm=c.algorithm;
+	msType=c.msType;
+	res400=c.res400;
+	winSize=c.winSize;
+
+	chargeMode=c.chargeMode;
+	snWindow=c.snWindow;
+	skipZero=c.skipZero;
+	noSplit=c.noSplit;
+	sl=c.sl;
+	fileFormat=c.fileFormat;
+	mzXMLFilter=c.mzXMLFilter;
+	distArea=c.distArea;
+	strcpy(formula,c.formula);
+
+	centroid = c.centroid;
+	staticSN = c.staticSN;
+  xml = c.xml;
+	reducedOutput = c.reducedOutput;
+
+  //ppMatch=c.ppMatch;
+  //ppWin=c.ppWin;
+  //noiseMatch=c.noiseMatch;
+  //noiseWindow=c.noiseWindow;
+  ppm=c.ppm;
+  //sna=c.sna;
+	boxcar=c.boxcar;
+	boxcarFilter=c.boxcarFilter;
+
+  //rawAvg=c.rawAvg;
+  //rawAvgWidth=c.rawAvgWidth;
+  //rawAvgCutoff=c.rawAvgCutoff;
+  strcpy(rawFilter,c.rawFilter);
+}
+  
+CHardklorSetting::~CHardklorSetting(){
+	delete variant;
+}
+
+CHardklorSetting& CHardklorSetting::operator=(const CHardklorSetting& c){
+  int i;
+  if (this!=&c){
+		delete variant;
+    variant = new vector<CHardklorVariant>;
+    for(i=0;i<c.variant->size();i++){
+      variant->push_back(c.variant->at(i));
+    }
+    noBase=c.noBase;
+		iAnalysis=c.iAnalysis;
+    maxCharge=c.maxCharge;
+		minCharge=c.minCharge;
+    msLevel=c.msLevel;
+    depth=c.depth;
+		peptide=c.peptide;
+    smooth=c.smooth;
+    corr=c.corr;
+    sn=c.sn;
+    scan.iLower=c.scan.iLower;
+    scan.iUpper=c.scan.iUpper;
+    window.dLower=c.window.dLower;
+    window.dUpper=c.window.dUpper;
+    strcpy(inFile,c.inFile);
+    strcpy(outFile,c.outFile);
+    strcpy(MercuryFile,c.MercuryFile);
+    strcpy(HardklorFile,c.HardklorFile);
+		algorithm=c.algorithm;
+		msType=c.msType;
+		res400=c.res400;
+		winSize=c.winSize;
+
+		chargeMode=c.chargeMode;
+		snWindow=c.snWindow;
+		skipZero=c.skipZero;
+		noSplit=c.noSplit;
+		sl=c.sl;
+		fileFormat=c.fileFormat;
+		mzXMLFilter=c.mzXMLFilter;
+		distArea=c.distArea;
+		strcpy(formula,c.formula);
+
+		centroid = c.centroid;
+		staticSN = c.staticSN;
+    xml = c.xml;
+		reducedOutput = c.reducedOutput;
+
+    //ppMatch=c.ppMatch;
+    //ppWin=c.ppWin;
+    //noiseMatch=c.noiseMatch;
+    //noiseWindow=c.noiseWindow;
+    ppm=c.ppm;
+    //sna=c.sna;
+		boxcar=c.boxcar;
+		boxcarFilter=c.boxcarFilter;
+
+    //rawAvg=c.rawAvg;
+    //rawAvgWidth=c.rawAvgWidth;
+    //rawAvgCutoff=c.rawAvgCutoff;
+
+    strcpy(rawFilter,c.rawFilter);
+  }
+  return *this;
+}
+
+void CHardklorSetting::clearVariant(){
+  delete variant;
+  variant = new vector<CHardklorVariant>;
+}
+
+void CHardklorSetting::out(char *s){
+  sprintf(s,"minCh:%d maxCh:%d d:%d p:%d s:%d corr:%lf sn:%lf res:%d,%lf win:%lf sl:%d v:%d\n",minCharge,maxCharge,depth,peptide,smooth,corr,sn,msType,res400,winSize,sl,variant->size());
+}
diff --git a/src/app/hardklor/CHardklorSetting.h b/src/app/hardklor/CHardklorSetting.h
new file mode 100644
index 0000000..9fe9bee
--- /dev/null
+++ b/src/app/hardklor/CHardklorSetting.h
@@ -0,0 +1,90 @@
+#ifndef _CHARDKLORSETTING_H
+#define _CHARDKLORSETTING_H
+
+#include <cstdio>
+#include <cstring>
+#include <string>
+#include <vector>
+
+#include "HardklorTypes.h"
+#include "CHardklorVariant.h"
+
+using namespace std;
+
+/* 
+   Defined as a class instead of a struct so
+   that default parameters are used. Data access
+   will be identical to that of a struct.
+*/
+class CHardklorSetting {
+
+ public:
+  //Constructors & Destructors:
+  CHardklorSetting();
+  CHardklorSetting(const CHardklorSetting&);
+  ~CHardklorSetting();
+
+  //Methods:
+  CHardklorSetting& operator=(const CHardklorSetting&);
+  void clearVariant();
+  void out(char *s);
+
+  //Data Mebers:
+  bool centroid;			//spectrum data is centroided
+  bool distArea;			//report distribution area instead of base peak intensity
+  bool iAnalysis;			//intersect analysis(true) or union analysis(false)
+  bool noBase;				//No base molecule - perform analysis with only averagine variant models
+  bool noSplit;				//analyze entire spectrum at once
+  //bool rawAvg;      //use averaged raw scans
+	bool reducedOutput;	//output m/z, intensity, and charge only (de-isotoped peaks)
+  bool skipZero;			//ignore zero intensity data points
+  bool staticSN;			//for sna=THRASH; assume one noise level for entire spectrum
+  bool xml;						//output is in xml
+  
+	int boxcar;				//number of scans to average together
+  int	boxcarFilter;	//value to meet or exceed to keep peak in boxcar averaged data
+  int depth;        //maximum number of overlapping peptides
+  int maxCharge;    //max charge state to search for
+  int minCharge;    //min charge state to search for
+  int msLevel;      //integer representation of the scan level
+  int peptide;			//maximum peptide models to analyze at a single time
+  //int ppMatch;      //pre-processing matches. m/z must be observed this amount across ppWin
+  //int ppWin;        //pre-processing window size (1 = +/-1 scan)
+  //int noiseMatch;   //for sna=PP; number of matches required for real peaks
+  //int noiseWindow;  //for sna=PP; Size of window over which scans are analyzed
+  //int rawAvgCutoff; //Noise cutoff intensity for averaged raw scans
+  //int rawAvgWidth;  //Number of scans on either side of target to average (1 = +/-1 scan)
+  int sl;           //sensitivity level
+  int smooth;       //Savitsky-Golay smoothing window size
+  //int sna;          //Signal-to-noise algorithm; 0=THRASH, 1=Persistent peaks (PP)
+
+  double corr;      //correlation threshold
+  double ppm;       //ppm tolerance of m/z values to match across scans
+  double res400;    //resolution at m/z 400
+  double sn;        //for sna=THRASH; signal-to-noise ratio threshold
+  double snWindow;  //for sna=THRASH; bin size over which local noise is computed
+  double winSize;   //maximum window size for analysis
+
+  sInt scan;        //scan range to analyze
+  sDouble window;   //m/z range to analyze
+
+  char chargeMode;        //charge determination function to use
+  char formula[64];       //non-averagine model formula
+  char inFile[256];       //input file name
+  char outFile[256];      //output file name
+  char rawFilter[256];    //Filter which spectra from raw files are analyzed
+  char MercuryFile[256];  //mercury data file to use
+  char HardklorFile[256]; //hardklor data file to use
+
+  specType msType;                    //Type of mass spectrometer used to acquire data
+  hkAlgorithm algorithm;              //Deconvolving algorithm to use
+  vector<CHardklorVariant> *variant;  //Variants to make to averagine
+  MSFileFormat fileFormat;            //File format
+  MSSpectrumType mzXMLFilter;         //Filter for mzXML files
+
+ protected:
+ private:
+
+};
+
+#endif
diff --git a/src/app/hardklor/CHardklorVariant.cpp b/src/app/hardklor/CHardklorVariant.cpp
new file mode 100644
index 0000000..01bff2a
--- /dev/null
+++ b/src/app/hardklor/CHardklorVariant.cpp
@@ -0,0 +1,100 @@
+#include "CHardklorVariant.h"
+
+using namespace std;
+
+CHardklorVariant::CHardklorVariant(){
+  ID=0;
+  atoms = new vector<sInt>;
+  enrich = new vector<sEnrichMercury>;
+};
+
+CHardklorVariant::CHardklorVariant(const CHardklorVariant& c){
+  int i;
+   
+  atoms = new vector<sInt>;
+  enrich = new vector<sEnrichMercury>;
+  
+  for(i=0;i<c.atoms->size();i++){
+    atoms->push_back(c.atoms->at(i));
+  };
+  
+  for(i=0;i<c.enrich->size();i++){
+    enrich->push_back(c.enrich->at(i));
+  };
+
+  ID = c.ID;
+
+};
+
+CHardklorVariant::~CHardklorVariant(){
+  delete atoms;
+  delete enrich;
+};
+
+CHardklorVariant& CHardklorVariant::operator=(const CHardklorVariant& c){
+  int i;
+  if(this!=&c){
+    delete atoms;
+    delete enrich;
+    atoms = new vector<sInt>;
+    enrich = new vector<sEnrichMercury>;
+
+    for(i=0;i<c.atoms->size();i++){
+      atoms->push_back(c.atoms->at(i));
+    };
+
+    for(i=0;i<c.enrich->size();i++){
+      enrich->push_back(c.enrich->at(i));
+    };
+
+    ID = c.ID;
+
+  };
+  return *this;
+};
+
+void CHardklorVariant::addAtom(const sInt& a){
+  atoms->push_back(a);
+};
+
+void CHardklorVariant::addAtom(const int& a, const int& b){
+  sInt s;
+  s.iLower = a;
+  s.iUpper = b;
+  atoms->push_back(s);
+};
+
+void CHardklorVariant::addEnrich(const sEnrichMercury& a){
+  enrich->push_back(a);
+};
+
+void CHardklorVariant::addEnrich(const int& a, const int& c, const double& b){
+  sEnrichMercury s;
+  s.atomNum = a;
+  s.isotope = c;
+  s.ape = b;
+  enrich->push_back(s);
+};
+
+sInt& CHardklorVariant::atAtom(int i){
+  return atoms->at(i);
+};
+
+sEnrichMercury& CHardklorVariant::atEnrich(int i){
+  return enrich->at(i);
+};
+
+void CHardklorVariant::clear(){
+  delete atoms;
+  delete enrich;
+  atoms = new vector<sInt>;
+  enrich = new vector<sEnrichMercury>;
+};
+
+int CHardklorVariant::sizeAtom(){
+  return atoms->size();
+};
+
+int CHardklorVariant::sizeEnrich(){
+  return enrich->size();
+};
diff --git a/src/app/hardklor/CHardklorVariant.h b/src/app/hardklor/CHardklorVariant.h
new file mode 100644
index 0000000..f924265
--- /dev/null
+++ b/src/app/hardklor/CHardklorVariant.h
@@ -0,0 +1,43 @@
+#ifndef _CHARDKLORVARIANT_H
+#define _CHARDKLORVARIANT_H
+
+#include <vector>
+
+#include "HardklorTypes.h"
+
+using namespace std;
+
+class CHardklorVariant {
+ public:
+  //Constructors & Destructors:
+  CHardklorVariant();
+  CHardklorVariant(const CHardklorVariant&);
+  ~CHardklorVariant();
+
+  //Operators:
+  CHardklorVariant& operator=(const CHardklorVariant&);
+
+  //Methods:
+  void addAtom(const sInt&);
+  void addAtom(const int&, const int&);
+  void addEnrich(const sEnrichMercury&);
+  void addEnrich(const int&, const int&, const double&);
+  sInt& atAtom(int);
+  sEnrichMercury& atEnrich(int);
+  void clear();
+  int sizeAtom();
+  int sizeEnrich();
+
+  //Data Members
+  int ID;
+
+ protected:
+
+ private:
+  //Data Members:
+  vector<sInt> *atoms;
+  vector<sEnrichMercury> *enrich;
+
+};
+
+#endif
diff --git a/src/app/hardklor/CMakeLists.txt b/src/app/hardklor/CMakeLists.txt
new file mode 100644
index 0000000..f3011fb
--- /dev/null
+++ b/src/app/hardklor/CMakeLists.txt
@@ -0,0 +1,60 @@
+project(hardklor)
+
+cmake_minimum_required(VERSION 2.8.1)
+cmake_policy(VERSION 2.8.1)
+
+include_directories(${CMAKE_SOURCE_DIR}/src)
+include_directories(${CMAKE_BINARY_DIR}/ext/include)
+include_directories(${CMAKE_BINARY_DIR}/ext/include/MSToolkit)
+if (WIN32 AND NOT Cygwin)
+  # Needed to put DLL containing type libraries
+  # in include path for Windows
+  include_directories(${CMAKE_BINARY_DIR}/ext/lib)
+endif (WIN32 AND NOT Cygwin)
+
+if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+  set_property(
+    DIRECTORY
+    PROPERTY
+    COMPILE_DEFINITIONS
+    _CRT_SECURE_NO_WARNINGS
+    CRUX
+    NOMINMAX
+  )
+else (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+  set_property(
+    DIRECTORY
+    PROPERTY
+    COMPILE_DEFINITIONS
+    _FILE_OFFSET_BITS=64
+    _GNU_SOURCE
+    _LARGEFILE_SOURCE
+    CRUX
+    GCC
+    HAVE_EXPAT_CONFIG_H
+  )
+endif (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+
+add_library(
+  hardklor
+  STATIC
+  CAveragine.cpp
+  CHardklor.cpp
+  CHardklor2.cpp
+  CHardklorParser.cpp
+  CHardklorProtein.cpp
+  CHardklorSetting.cpp
+  CHardklorVariant.cpp
+  CMercury8.cpp
+  CModelLibrary.cpp
+  CNoiseReduction.cpp
+  CPeriodicTable.cpp
+  CSpecAnalyze.cpp
+  CSplitSpectrum.cpp
+  FFT.cpp
+  FFT-HK.cpp
+  S2N.cpp
+  Smooth.cpp
+  SpecAnalyzeSupport.cpp
+  CruxHardklorApplication.cpp
+)
diff --git a/src/app/hardklor/CMercury8.cpp b/src/app/hardklor/CMercury8.cpp
new file mode 100644
index 0000000..25eb97b
--- /dev/null
+++ b/src/app/hardklor/CMercury8.cpp
@@ -0,0 +1,1112 @@
+/*=====================================================================*/
+/* Program MERCURY2.C                                                  */
+/*                                                                     */
+/* MERCURY5 is a version of MERCURY2 using (mostly) double percision.  */
+/* instead of floating point arithmatic. It gives more accurate        */
+/* intensity values than MERCURY2.                                     */
+/* MERCURY2 is an integer based version of MERCURY, although most of   */
+/* the arithmetic is floating point. Using integer (changed to float)  */
+/* values for isotopic masses, the calculation can be performed with   */
+/* a much smaller data set and is extremely fast.  The ASCII output    */
+/* file is a stick representation of the mass spectrum. There is no    */
+/* ultrahigh resolution mode in this program.                          */
+/*                                                                     */
+/* Algorithm by       Alan L. Rockwood                                 */
+/* Programming by     Steve Van Orden                                  */
+/*=====================================================================*/
+
+/*=====================================================================*/
+/* C++ implementation (CMercury5) by Michael Hoopmann, 2004            */
+/*                                                                     */
+/* To use:                                                             */
+/*   1. Create CMercury5 object.                                       */
+/*   2. Call GoMercury(formula, [optional] charge, [optional] filename)*/
+/*   3. Optionally call Echo(true) to display output to screen.        */
+/*                                                                     */
+/* Example:                                                            */
+/*   #include "CMercury5.h"                                            */
+/*   using namespace std;                                              */
+/*   int main(){                                                       */
+/*     CMercury5 dist;                                                 */
+/*     dist.Echo(true);                                                */
+/*     dist.GoMercury("C6H12O6",1);                                    */
+/*     return 0;                                                       */
+/*   };                                                                */
+/*                                                                     */
+/*  Including the optional filename to GoMercury outputs the           */
+/*  distribution to file. The data can be manipulated in code in the   */
+/*  FixedData vector. See the header files CMercury5.h and mercury.h   */
+/*  for struct type.                                                   */
+/*=====================================================================*/
+ 
+#include "CMercury8.h"
+#include <cmath>
+#include <iostream>
+using namespace std;
+
+CMercury8::CMercury8(){
+  InitializeData();
+  showOutput = false;
+  bAccMass = false;
+  bRelAbun = true;
+  zeroMass=0;
+}
+
+CMercury8::CMercury8(char* fn){
+  InitializeData(fn);
+  showOutput = false;
+  bAccMass = false;
+  bRelAbun = true;
+  zeroMass=0;
+}
+
+CMercury8::~CMercury8(){
+  int Z;
+
+  for (Z=0; Z<=MAXAtomNo; Z++) {
+
+    delete [] Element[Z].IsoMass;
+    delete [] Element[Z].IntMass;
+    delete [] Element[Z].IsoProb;
+    //if(Element[Z].WrapMass!=NULL) delete [] Element[Z].WrapMass;
+
+    delete [] Orig[Z].IsoMass;
+    delete [] Orig[Z].IntMass;
+    delete [] Orig[Z].IsoProb;
+    //if(Orig[Z].WrapMass!=NULL) delete [] Orig[Z].WrapMass;
+  }
+}
+
+void CMercury8::Echo(bool b){
+  showOutput = b;
+}
+
+//quick hack for N-enrichment
+//This needs to be expanded to be universal for all elements
+void CMercury8::Enrich(int c,int e,double d){
+  int i=0;
+  int j=0;
+  double ab=0;
+	float f=(float)d;
+
+  //c++;
+  if(showOutput) cout << "Enrich: " << Element[c].Symbol << " " << c << "\t" << d << endl;
+
+  //Find highest probability
+  for(i=0;i<Element[c].NumIsotopes;i++){
+    if(Element[c].IsoProb[i]>ab){
+      j=i;
+      ab=Element[c].IsoProb[i];
+    }
+  }
+
+  //Normalize all isotope abundances
+  for(i=0;i<Element[c].NumIsotopes;i++){
+    Element[c].IsoProb[i]/=Element[c].IsoProb[j];
+  }
+
+  //Calculate enrichment
+  for(i=0;i<Element[c].NumIsotopes;i++){
+    if(i==e) Element[c].IsoProb[i]=(1-f)*Element[c].IsoProb[i]+f;
+    else Element[c].IsoProb[i]=(1-f)*Element[c].IsoProb[i];
+  }
+
+  EnrichAtoms.push_back(c);
+
+}
+  
+
+/*************************************************/
+/* FUNCTION Intro - called by main()             */
+/*************************************************/
+void CMercury8::Intro() {
+   printf("*********************************************************************\n");
+   printf("*                       M E R C U R Y  V I I I                      *\n");
+   printf("*                                                                   *\n");
+   printf("*  An Integer based Fourier transform isotopic distibution program  *\n");
+   printf("*          Now capable of calculating accurate masses!              *\n");
+   printf("*********************************************************************\n");
+   printf("\n");
+   printf("      Algorithm by : Alan L. Rockwood\n\n");
+   printf("      Program by   : Steven L. Van Orden - 1\n");
+   printf("                     Michael R. Hoopmann - 2\n\n");
+   printf("      Developed at : 1 - Pacific Northwest Laboratories / \n");
+   printf("                         Battelle Northwest\n");
+   printf("                         in the laboratory of Richard D. Smith\n");
+   printf("                     2 - University of Washington\n");
+   printf("                         Department of Genome Science\n");
+   printf("                         Michael J. MacCoss laboratory\n\n\n");
+ 
+}  /* End of Intro() */
+ 
+/***************************************************/
+/* FUNCTION InitializeData - called by constructor */
+/***************************************************/
+//This function reads the ISOTOPE.DAT file that must be in the same
+//folder as the application.
+void CMercury8::InitializeData(char* fn) {
+
+  FILE *ElementFile;
+  int  i, Z;
+
+  //Use default values if an isotope file is not provided
+  if(fn==NULL || strlen(fn)==0){
+    DefaultValues();
+    return;
+  }
+ 
+  if ((ElementFile = fopen(fn, "rt")) == NULL) {
+    printf("\nError - Cannot open File: ISOTOPE.DAT\n");
+    exit(-1);
+  }
+   
+  for (Z=0; Z<=MAXAtomNo; Z++) {
+    Element[Z].Symbol[0]=Element[Z].Symbol[1]=Element[Z].Symbol[2]=0;
+
+    fscanf(ElementFile,"%2s %d\n", &Element[Z].Symbol,&Element[Z].NumIsotopes);
+    strcpy(Orig[Z].Symbol,Element[Z].Symbol);
+    Orig[Z].NumIsotopes = Element[Z].NumIsotopes;
+
+    Element[Z].IsoMass = new float[Element[Z].NumIsotopes+1];
+    Element[Z].IntMass = new int[Element[Z].NumIsotopes+1];
+    Element[Z].IsoProb = new float[Element[Z].NumIsotopes+1];
+    //Element[Z].WrapMass = NULL;
+
+    Orig[Z].IsoMass = new float[Orig[Z].NumIsotopes+1];
+    Orig[Z].IntMass = new int[Orig[Z].NumIsotopes+1];
+    Orig[Z].IsoProb = new float[Orig[Z].NumIsotopes+1];
+    //Orig[Z].WrapMass = NULL;
+    
+    for (i=0; i<Element[Z].NumIsotopes; i++) {
+      fscanf(ElementFile, "%f \n", &Element[Z].IsoMass[i]);
+      fscanf(ElementFile, "%f \n", &Element[Z].IsoProb[i]);
+      Element[Z].IntMass[i] = (int)(Element[Z].IsoMass[i]+0.5);
+      Orig[Z].IsoMass[i]=Element[Z].IsoMass[i];
+      Orig[Z].IsoProb[i]=Element[Z].IsoProb[i];
+      Orig[Z].IntMass[i]=Element[Z].IntMass[i];
+    }
+      
+    Element[Z].NumAtoms = 0;
+    Element[Z].IsoMass[Element[Z].NumIsotopes] = 0;
+    Element[Z].IsoProb[Element[Z].NumIsotopes] = 0;
+    Orig[Z].NumAtoms = 0;
+    Orig[Z].IsoMass[Orig[Z].NumIsotopes] = 0;
+    Orig[Z].IsoProb[Orig[Z].NumIsotopes] = 0;
+
+    fscanf(ElementFile, " \n");
+  }
+
+  fclose(ElementFile);
+  
+}
+ 
+/*************************************************/
+/* FUNCTION CalcVariances - called by main()     */
+/*************************************************/
+void CMercury8::CalcVariances(double *MolVar, double *IntMolVar, int NumElements){
+  int i, j, Z;
+  double Var, IntVar;
+  double avemass, intavemass;
+  
+  *MolVar = *IntMolVar = 0;
+  for (i=0; i<NumElements; i++) {
+    Z = AtomicNum[i];
+    avemass = intavemass = 0;
+    for (j=0; j<Element[Z].NumIsotopes; j++){
+      avemass += Element[Z].IsoMass[j] * Element[Z].IsoProb[j];
+      intavemass += Element[Z].IntMass[j] * Element[Z].IsoProb[j];
+    };
+    Var = IntVar = 0;
+    for (j=0; j<Element[Z].NumIsotopes; j++){
+      Var += (Element[Z].IsoMass[j] - avemass) * (Element[Z].IsoMass[j] - avemass) * Element[Z].IsoProb[j];
+      IntVar += (Element[Z].IntMass[j] - intavemass) * (Element[Z].IntMass[j] - intavemass) * Element[Z].IsoProb[j];
+    };
+    *MolVar += Element[Z].NumAtoms * Var;
+    *IntMolVar += Element[Z].NumAtoms * IntVar;
+  };
+
+	//monoisotopic mass (zero mass, EXACT)
+	zeroMass=0;
+	for (i=0; i<NumElements; i++) {
+    Z = AtomicNum[i];
+		zeroMass+=(Element[Z].IsoMass[0] * Element[Z].NumAtoms);
+	};
+	monoMass=zeroMass;
+  
+};  /* End of CalcVariances() */
+
+/*************************************************/
+/* FUNCTION CalcMassRange - called by main()     */
+/*************************************************/
+void CMercury8::CalcMassRange(int *MassRange, double MolVar, int charge, int type) {
+   int i;
+   double dPoints;
+ 
+   //This is insufficient without adding the one to the end
+   if ((type == 1) || (charge == 0)) dPoints = (sqrt(1+MolVar)*10);
+   else  dPoints = (sqrt(1+MolVar)*10/charge);  /* +/- 5 sd's : Multiply charged */
+
+   /* Set to nearest (upper) power of 2 */
+   for (i=1024; i>0; i/=2) {
+     if (i < dPoints) {
+       *MassRange = i * 2 * 2;   //MRH: Added extra power of 2 since this rule is often insufficient
+       i = 0;
+     };
+   };
+   
+}  /* End of CalcMassRange() */
+ 
+/*************************************************/
+/* FUNCTION AddElement - called by ParseMF()     */
+/*************************************************/
+
+//Atom is the atomic abbreviation, Ecount is nth element in the formula
+//Acount is the number of atoms of the element in the formula
+void CMercury8::AddElement(char Atom[3], int Ecount, int Acount) {
+
+  int Z, FOUND=0;
+ 
+  for (Z=1; Z<=MAXAtomNo; Z++) {
+
+    if (strcmp(Atom,Element[Z].Symbol) == 0) {
+
+      if (Element[Z].NumAtoms != 0) { 
+
+	printf("\nError - the element %s has been entered twice in molecular formula\n", Element[Z].Symbol);
+	exit(-1);
+
+      } else {
+
+	AtomicNum[Ecount] = Z;
+	Element[Z].NumAtoms = Acount;
+	//Element[Z].WrapMass = new int[Element[Z].NumIsotopes+1];
+	//Element[Z].WrapMass[Element[Z].NumIsotopes] = 0;
+	FOUND=1;
+	break;
+
+      };
+
+    };
+  };
+
+  if (!FOUND) {
+    printf("\nError - Unknown element in Molecular Formula\n");
+    exit(-1);
+  };
+
+}
+ 
+/*************************************************/
+/* FUNCTION ParseMF - called by main()           */
+/*************************************************/
+//Return codes
+//	0: Success
+//	-1: Invalid character
+int CMercury8::ParseMF(char MF[], int *elementcount) {
+  int COND, ERRFLAG;
+  int atomcount;
+  char Atom[3], errorch;
+
+  atomcount=0; COND=0; ERRFLAG=0;
+  Atom[0] = Atom[1] = Atom[2] = '\0';
+
+  unsigned int pos=0;
+  unsigned int peek=0;
+  unsigned int count=0;
+  char digit[2];
+  bool bFirst=true;
+  atomcount=0;
+  *elementcount=0;
+  while(pos<strlen(MF) && ERRFLAG==0){
+    if(isupper(MF[pos])){
+      //Add the last atom
+      if(!bFirst) {
+        AddElement(Atom,(*elementcount)++,atomcount);
+        atomcount=0;
+      } else {
+        bFirst=false;
+      }
+      
+      peek=pos+1;
+      if(peek==strlen(MF)){
+        //reached end of string, add this single atom
+        Atom[0]=MF[pos];
+        Atom[1]=Atom[2]='\0';
+        atomcount=1;
+        pos++;
+        continue;
+      }
+       
+      if(isupper(MF[peek])){
+        //This is a single atom
+        Atom[0]=MF[pos];
+        Atom[1]=Atom[2]='\0';
+        atomcount=1;
+        pos++;
+      } else if(islower(MF[peek])){
+        //Set the atom name
+        Atom[0]=MF[pos];
+        Atom[1]=MF[peek];
+        Atom[2]='\0';
+        atomcount=0;
+        pos+=2;
+      } else if(isdigit(MF[peek])){
+        //Set the atom name
+        Atom[0]=MF[pos];
+        Atom[1]=Atom[2]='\0';
+        atomcount=0;
+        pos++;
+      } else {
+        errorch=MF[peek];
+        ERRFLAG=1;
+      }
+         
+    } else if(isdigit(MF[pos])){
+      digit[0]=MF[pos];
+      digit[1]='\0';
+      atomcount*=10;
+      atomcount+=atoi(digit);
+      pos++;
+     } else {
+      errorch=MF[pos];
+      ERRFLAG=1;
+    }
+  }
+
+  if(ERRFLAG==0) AddElement(Atom,(*elementcount)++,atomcount);
+  else printf("There was an error\n");
+
+  if (ERRFLAG) {
+    printf("\nError in format of input...  The character '%c' is invalid\n",errorch);
+    return -1;
+  } else {
+    return 0;
+  }
+
+}
+ 
+/*************************************************/
+/* FUNCTION CalcFreq - called by main()          */
+/*    Could be done with less code, but this     */
+/*    saves a few operations.                    */
+/*************************************************/
+void CMercury8::CalcFreq(complex* FreqData, int Ecount, int NumPoints, int MassRange, int MassShift) {
+  
+  int    i, j, k, Z;
+  double real, imag, freq, X, theta, r, tempr;
+  double a, b, c, d;
+ 
+  /* Calculate first half of Frequency Domain (+)masses */
+  for (i=0; i<NumPoints/2; i++) {
+    
+    freq = (double)i/MassRange;
+    r = 1;
+    theta = 0;
+    for (j=0; j<Ecount; j++) {
+      Z = AtomicNum[j];
+      real = imag = 0;
+      for (k=0; k<Element[Z].NumIsotopes; k++) {
+				X = TWOPI * Element[Z].IntMass[k] * freq;
+				real += Element[Z].IsoProb[k] * cos(X);
+				imag += Element[Z].IsoProb[k] * sin(X);
+      }
+      
+      /* Convert to polar coordinates, r then theta */
+      tempr = sqrt(real*real+imag*imag);
+      r *= pow(tempr,Element[Z].NumAtoms);
+      if (real > 0) theta += Element[Z].NumAtoms * atan(imag/real);
+      else if (real < 0) theta += Element[Z].NumAtoms * (atan(imag/real) + PI);
+      else if (imag > 0) theta += Element[Z].NumAtoms * HALFPI;
+      else theta += Element[Z].NumAtoms * -HALFPI;
+      
+    }  /* end for(j) */
+    
+    /* Convert back to real:imag coordinates and store */
+    a = r * cos(theta);
+    b = r * sin(theta);
+    c = cos(TWOPI*MassShift*freq);
+    d = sin(TWOPI*MassShift*freq);
+    FreqData[i].real = a*c - b*d;
+    FreqData[i].imag = b*c + a*d;
+    
+  }  /* end for(i) */
+  
+  /* Calculate second half of Frequency Domain (-)masses */
+  for (i=NumPoints/2; i<NumPoints; i++) {
+    
+    freq = (double)(i-NumPoints)/MassRange;
+    r = 1;
+    theta = 0;
+    for (j=0; j<Ecount; j++) {
+      Z = AtomicNum[j];
+      real = imag = 0;
+      for (k=0; k<Element[Z].NumIsotopes; k++) {
+				X = TWOPI * Element[Z].IntMass[k] * freq;
+				real += Element[Z].IsoProb[k] * cos(X);
+				imag += Element[Z].IsoProb[k] * sin(X);
+      }
+      
+      /* Convert to polar coordinates, r then theta */
+      tempr = sqrt(real*real+imag*imag);
+      r *= pow(tempr,Element[Z].NumAtoms);
+      if (real > 0) theta += Element[Z].NumAtoms * atan(imag/real);
+      else if (real < 0) theta += Element[Z].NumAtoms * (atan(imag/real) + PI);
+      else if (imag > 0) theta += Element[Z].NumAtoms * HALFPI;
+      else theta += Element[Z].NumAtoms * -HALFPI;
+      
+    }  /* end for(j) */
+    
+    /* Convert back to real:imag coordinates and store */
+    a = r * cos(theta);
+    b = r * sin(theta);
+    c = cos(TWOPI*MassShift*freq);
+    d = sin(TWOPI*MassShift*freq);
+    FreqData[i].real = a*c - b*d;
+    FreqData[i].imag = b*c + a*d;
+    
+  }  /* end of for(i) */
+  
+}  /* End of CalcFreq() */
+  
+ 
+/*************************************************/
+/* FUNCTION main() - main block of FFTISO        */
+/*************************************************/
+//Return Codes:
+//	0: Success
+//	1: Invalid molecular formula
+//	2: Cannot write to file
+int CMercury8::GoMercury(char* MolForm, int Charge, char* filename) {
+  
+  unsigned int i;
+  int	 NumElements=0;			/* Number of elements in molecular formula */
+  FILE	 *outfile;			/* output file pointer */
+  
+  //MolForm is the only required data
+  if (strlen(MolForm) == 0) {
+    //printf("\nNo molecular formula!\n");
+    return 1;
+  }
+  
+  //Parse the formula, check for validity
+  if (ParseMF(MolForm,&NumElements) == -1)     {
+    MolForm[0] = '\0';
+    NumElements = 0;
+    return 1;
+  }
+
+  //Run the user requested Mercury
+  if(bAccMass) AccurateMass(NumElements,Charge);
+  else Mercury(NumElements,Charge);
+  
+  //If the user requested relative abundance, convert data
+  if(bRelAbun) RelativeAbundance(FixedData);
+
+  //If the user requested the data to file, output it here.
+  if (filename[0]!=0){
+    if ((outfile = fopen(filename,"w")) == NULL) {
+      printf("\nError - Cannot create file %s\n",filename);
+      return 2;
+    }
+    for(i=0;i<FixedData.size();i++){
+      fprintf(outfile,"%lf %lf\n",FixedData[i].mass,FixedData[i].data);
+    }
+    fclose(outfile);
+    
+  }
+  
+  //If the user wants the data on the screen, let it be so.
+  if(showOutput){
+    for(i=0;i<FixedData.size();i++){
+      printf("%.4f\t%.5f\n",FixedData[i].mass,FixedData[i].data);
+    }
+  }
+  
+  //Clear all non-user input so object can be reused:
+  Reset();
+  
+  //Output a final, useful message
+  if(showOutput) printf("Mercury successful!\n");
+  
+  return 0;
+  
+}
+
+
+//This function resets all atomic states to those at initialization.
+//This is so the same object can be reused after performing a calculation
+//or after user intervention, such as Enrich().
+void CMercury8::Reset(){
+  unsigned int i;
+	int j;
+  
+  for (i=0;i<20;i++) AtomicNum[i]=0;
+  for (i=0; i<=MAXAtomNo; i++)  Element[i].NumAtoms = 0;
+  
+  for (i=0;i<(int)EnrichAtoms.size();i++){
+    for (j=0;j<Element[EnrichAtoms[i]].NumIsotopes;j++){
+      Element[EnrichAtoms[i]].IsoProb[j] = Orig[EnrichAtoms[i]].IsoProb[j];
+    }
+  }
+  EnrichAtoms.clear();
+  
+}
+
+//This function calculates the accurate mass. It's a bit slower, and it performs poorly
+//on the fringes of large proteins because of the estimation of MassRange algorithm, and the
+//fact that abundances would be so small as to be nearly indistinguishable from zero.
+void CMercury8::AccurateMass(int NumElements, int Charge){
+  int 	 i,j, k;
+  int	  MassRange;
+  int   PtsPerAmu;
+  int   NumPoints;			/* Working # of datapoints (real:imag) */
+  complex *FreqData;              /* Array of real:imaginary frequency values for FFT */
+  double MW;
+  double MIMW, tempMW, MolVar, IntMolVar;
+  int intMW, MIintMW;
+  int dummyLong;
+  int dummyInt;
+
+
+  complex *AltData;
+  complex *AltData2;
+  int MaxIntMW;
+  int PMIintMW;
+  int IsoShift;
+
+  Result r;
+  vector<Result> vParent;
+  vector<Result> vProduct;
+  
+  //If we made it this far, we have valid input, so calculate molecular weight
+  CalcWeights(MW, MIMW, tempMW, intMW, MIintMW, MaxIntMW, IsoShift, NumElements);
+
+  //If the user specified an Echo, output the data now.
+  if (showOutput){
+    if (Charge != 0) {
+      printf("Average Molecular Weight: %.3lf, at m/z: %.3f\n",MW,MW/fabs((double)Charge));
+      printf("Average Integer MW: %ld, at m/z: %.3f\n\n",intMW,(float)intMW/fabs((double)Charge));
+    } else {
+      printf("Average Molecular Weight: %.3lf\n",MW);
+      printf("Average Integer MW: %ld\n\n",intMW);
+    }
+  }
+
+  //Set our parental molecular weight. This will be used as the lower bounds.
+  //PMIintMW = (int)round(MIMW);
+  PMIintMW = (int)(MIMW+0.5);
+  
+  //Calculate mass range to use based on molecular variance 
+  CalcVariances(&MolVar,&IntMolVar,NumElements);
+  CalcMassRange(&MassRange,MolVar,1,1);
+  PtsPerAmu = 1;
+  
+  //Allocate memory for Axis arrays
+  NumPoints = MassRange * PtsPerAmu;
+  FreqData = new complex[NumPoints];
+  
+  //Start isotope distribution calculation
+  //MH notes: How is this different from using -MW instead of -intMW?
+  CalcFreq(FreqData,NumElements,NumPoints,MassRange,-intMW);
+  FFT(FreqData,NumPoints,false);
+
+  //Converts complex numbers back to masses
+  ConvertMass(FreqData,NumPoints,PtsPerAmu,MW,tempMW,intMW,MIintMW,1,MolVar,IntMolVar);
+
+  //Put our data in the global array
+  FixedData.clear();
+  for(j=NumPoints/2; j<NumPoints; j++){
+    r.data=FreqData[j].real;
+    r.mass=FreqData[j].imag;
+    FixedData.push_back(r);
+  };
+
+  for(j=0; j<NumPoints/2; j++){
+    r.data=FreqData[j].real;
+    r.mass=FreqData[j].imag;
+    FixedData.push_back(r);
+  };
+
+  //Convert the data to integers
+  MassToInt(FreqData,NumPoints);
+
+  //Shift the lower bound to reflect the range of points that will be in common
+  //with all product variants. This is necessary for proteins in which the monoisotopic
+  //mass is not visible, thus we must adjust for the first data point in each product
+  //if(FixedData.at(0).mass > (PMIintMW+IsoShift)) PMIintMW=(int)round(FixedData.at(0).mass)+IsoShift;
+  if(FixedData[0].mass > (PMIintMW+IsoShift)) PMIintMW=(int)(FixedData[0].mass+0.5)+IsoShift;
+
+  //Reduce the parent set to this new boundary
+  GetPeaks(FreqData,NumPoints,vParent,PMIintMW,MaxIntMW);
+
+  //Set the upper bound to the max determined in the parent distribution
+  //MaxIntMW = (int)round(vParent.at(vParent.size()-1).mass);
+  MaxIntMW = (int)(vParent[vParent.size()-1].mass+0.5);
+
+  //set parental masses to 0
+  for(i=0;i<(int)vParent.size();i++) vParent[i].mass=0;
+
+  //We have now completed the analysis on the actual protein.
+  //Next we compute compositions for each element and each isotope
+  for(i=0;i<NumElements;i++){
+    
+    //Subtract one atom
+    Element[AtomicNum[i]].NumAtoms--;
+
+    //Calculate the product masses and variances
+    //However, use the same mass range as the parent (calculated above)
+    CalcWeights(MW, MIMW, tempMW, intMW, MIintMW, dummyLong, dummyInt, NumElements);
+    CalcVariances(&MolVar,&IntMolVar,NumElements);
+
+    //Allocate memory for Axis arrays
+    AltData = new complex[NumPoints];
+    AltData2 = new complex[NumPoints];
+    
+    //Start isotope distribution calculation
+    CalcFreq(AltData,NumElements,NumPoints,MassRange,-intMW);
+    FFT(AltData,NumPoints,false);
+
+    ConvertMass(AltData,NumPoints,PtsPerAmu,MW,tempMW,intMW,MIintMW,1,MolVar,IntMolVar);
+    MassToInt(AltData,NumPoints);
+
+
+    //Add the integer isotope mass
+    for(j=0;j<Element[AtomicNum[i]].NumIsotopes;j++){
+
+      //add mass to each point
+      for(k=0;k<NumPoints;k++) {
+				AltData2[k].imag=AltData[k].imag+Element[AtomicNum[i]].IntMass[j];
+				AltData2[k].real=AltData[k].real;
+      }
+
+      GetPeaks(AltData2,NumPoints,vProduct,PMIintMW,MaxIntMW);
+
+      //find ratio of abundances, multiply by abundance & number of atoms
+      for(k=0;k<(int)vProduct.size();k++){
+				vProduct[k].data/=vParent[k].data;
+				vProduct[k].data*=Element[AtomicNum[i]].IsoProb[j];
+				vProduct[k].data*=(Element[AtomicNum[i]].NumAtoms+1);
+
+				//Add to the real mass for the parent
+				vParent[k].mass += vProduct[k].data * Element[AtomicNum[i]].IsoMass[j];
+			}
+      
+    }
+
+		delete [] AltData;
+		delete [] AltData2;
+    
+    //Add back the atom
+    Element[AtomicNum[i]].NumAtoms++;
+    
+  }
+
+  //output accurate masses:
+  FixedData.clear();
+  for(i=0;i<(int)vParent.size();i++){
+    if(vParent[i].data < 0.000001) continue;
+    vParent[i].mass=(vParent[i].mass+ProtonMass*Charge)/Charge;
+    FixedData.push_back(vParent[i]);
+  }
+
+	delete [] FreqData;
+
+}
+
+
+void CMercury8::ConvertMass(complex* Data, int NumPoints, int PtsPerAmu,
+		double MW, double tempMW, int intMW, int MIintMW, int charge,
+		double MolVar, double IntMolVar) {
+
+  int i;
+  double mass, ratio, CorrIntMW;
+
+  if (IntMolVar == 0) ratio = 1;
+  else ratio = sqrt(MolVar) / sqrt(IntMolVar);
+  
+  CorrIntMW = tempMW * ratio;
+  for (i=NumPoints/2; i<NumPoints; i++) {
+    mass = (double)(i-NumPoints)/PtsPerAmu + intMW;
+    mass *= ratio;
+    mass += MW - CorrIntMW;
+    //mass /= charge;
+    Data[i].imag = mass;
+  };
+  
+  for (i=0; i<NumPoints/2; i++) {
+    mass = (double)i/PtsPerAmu + intMW;
+    mass *= ratio;
+    mass += MW - CorrIntMW;
+    //mass /= charge;
+    Data[i].imag = mass;
+  };
+
+};
+
+void CMercury8::MassToInt(complex* Data, int NumPoints) {
+
+  int i, mass;
+
+  for (i=NumPoints/2; i<NumPoints; i++) {
+
+    //Since rounding poses problems, adjust when deviant values occur
+    //This assumes that the average width >1
+	mass = (int)(Data[i].imag+0.5);
+    if(i>NumPoints/2){
+      if(mass == Data[i-1].imag) mass++;
+
+    };
+
+    Data[i].imag = mass;
+  };
+  
+  for (i=0; i<NumPoints/2; i++) {
+
+    //Since rounding poses problems, adjust when deviant values occur
+    //This assumes that the average width >1
+	mass = (int)(Data[i].imag+0.5);	
+    if(i>0){
+      if(mass == Data[i-1].imag) mass++;
+    };
+
+    Data[i].imag = mass;
+  };
+  
+};
+
+
+void CMercury8::GetPeaks(complex* Data, int NumPoints, vector<Result>& v, 
+			 int lower, int upper){
+  int i;
+  Result r;
+  v.clear();
+
+  for(i=NumPoints/2; i<NumPoints; i++){
+    if(Data[i].imag>=lower && Data[i].imag<=upper){
+      r.data=Data[i].real;
+      r.mass=Data[i].imag;
+      v.push_back(r);
+    };
+  };
+
+  for(i=0; i<NumPoints/2; i++){
+    if(Data[i].imag>=lower && Data[i].imag<=upper){
+      r.data=Data[i].real;
+      r.mass=Data[i].imag;
+      v.push_back(r);
+    };
+  };
+
+};
+
+void CMercury8::RelativeAbundance(vector<Result>& v){
+
+  unsigned int i;
+  double max=0;
+	double sum=0;
+
+	FracAbunData.clear();
+  
+  /* Normalize intensity to 0%-100% scale */
+  for (i=0; i<v.size(); i++) {
+		if (v[i].data > max) max = v[i].data;
+		//also, store fractional abundances anyway (useful for Hardklor, which uses both);
+		FracAbunData.push_back(v[i]);
+		sum+=v[i].data;
+	}
+  for (i=0; i<v.size(); i++) {
+		v[i].data = 100 * v[i].data/max;
+		FracAbunData[i].data/=sum;
+	}
+
+}
+
+void CMercury8::CalcWeights(double& MW, double& MIMW, double& tempMW, int& intMW, 
+			    int& MIintMW, int& MaxIntMW, int& IsoShift, int NumElements){
+
+  int j, k, Z;
+
+  MW = MIMW = tempMW = 0; intMW = MIintMW = MaxIntMW = 0;
+  IsoShift=0;
+
+  for (j=0; j<NumElements; j++) {
+    Z = AtomicNum[j];
+    for (k=0; k<Element[Z].NumIsotopes; k++) {
+      MW += Element[Z].NumAtoms * Element[Z].IsoMass[k] * Element[Z].IsoProb[k];
+      tempMW += Element[Z].NumAtoms * Element[Z].IntMass[k] * Element[Z].IsoProb[k];
+      if (k==0) {
+				MIMW += Element[Z].NumAtoms * Element[Z].IsoMass[k];
+				MIintMW += Element[Z].NumAtoms * Element[Z].IntMass[k];
+      }
+      if(k==Element[Z].NumIsotopes-1){
+
+				//IsoShift is only used for accurate masses as an indication of how
+				//much each product distribution will differ in mass range from the
+				//parent distribution.
+				if((Element[Z].IntMass[k]-Element[Z].IntMass[0]) > IsoShift){
+					IsoShift = Element[Z].IntMass[k]-Element[Z].IntMass[0];
+				}
+
+				MaxIntMW += Element[Z].NumAtoms * Element[Z].IntMass[k];
+      }
+    }
+  }
+  
+  MW -= ElectronMass;
+  tempMW -= ElectronMass;
+  MIMW -= ElectronMass;
+  intMW = (int)(tempMW+0.5);
+
+};
+
+//Calculates Mercury as done originally
+void CMercury8::Mercury(int NumElements, int Charge) {
+  
+  int 	  j;
+  int	  MassRange;
+  int     PtsPerAmu;
+  int    NumPoints;		       // Working # of datapoints (real:imag) 
+  complex *FreqData;              // Array of real:imaginary frequency values for FFT 
+  double   MW;
+  double  MIMW, tempMW, MolVar, IntMolVar;
+  int    intMW, MIintMW, MaxIntMW;
+  clock_t start, end;
+  float   timex, seconds;
+  int	  minutes, dummyInt;
+  Result r;
+
+	//Calculate molecular weight
+  CalcWeights(MW, MIMW, tempMW, intMW, MIintMW, MaxIntMW, dummyInt, NumElements);
+   
+  //If the user specified an Echo, output the data now.
+  if (showOutput){
+    if (Charge != 0) {
+      printf("Average Molecular Weight: %.3lf, at m/z: %.3f\n",MW,MW/fabs((double)Charge));
+      printf("Average Integer MW: %ld, at m/z: %.3f\n\n",intMW,(float)intMW/fabs((double)Charge));
+    } else {
+      printf("Average Molecular Weight: %.3lf\n",MW);
+      printf("Average Integer MW: %ld\n\n",intMW);
+    }
+  }
+ 
+  //Calculate mass range to use based on molecular variance 
+  CalcVariances(&MolVar,&IntMolVar,NumElements);
+  CalcMassRange(&MassRange,MolVar,Charge,1);
+  PtsPerAmu = 1;
+
+  monoMass+=(Charge*(ProtonMass));
+  monoMass/=Charge;
+  if(showOutput) printf("True MonoMass: %.8lf\n",monoMass);
+
+  //Allocate memory for Axis arrays
+  NumPoints = MassRange * PtsPerAmu;
+  FreqData = new complex[NumPoints];
+  
+  //Start isotope distribution calculation
+  //MH notes: How is this different from using -MW instead of -intMW?
+  start = clock();
+  CalcFreq(FreqData,NumElements,NumPoints,MassRange,-intMW);
+  FFT(FreqData,NumPoints,false);
+  end = clock();
+
+  //Output the results if the user requested an Echo.
+  if(showOutput){
+    timex = (float)(end - start) / CLOCKS_PER_SEC;
+    minutes = (int)(timex/60);
+    seconds = timex - (60*minutes);
+    printf("Calculation performed in %d min %.3f sec\n",minutes,seconds);
+  }
+	
+  //Not sure why we do this...
+  if (Charge == 0) Charge = 1;
+
+  //Convert complex numbers to masses
+  ConvertMass(FreqData,NumPoints,PtsPerAmu,MW,tempMW,intMW,MIintMW,(int)fabs((double)Charge),MolVar,IntMolVar);
+
+  //Put our data in the global array
+  //This performs a bit of computation to eliminate meaningless data.
+  FixedData.clear();
+  for(j=NumPoints/2; j<NumPoints; j++){
+		if((int)(FreqData[j].imag+0.5)<MIintMW) continue;
+    r.data=FreqData[j].real;
+		r.mass=(FreqData[j].imag+(ProtonMass)*Charge)/Charge;
+		if( (monoMass-r.mass)*Charge > 0.5 ) continue;
+    r.data=FreqData[j].real;
+		r.mass=(FreqData[j].imag+ProtonMass*Charge)/Charge;
+    FixedData.push_back(r);
+  };
+
+  for(j=0; j<NumPoints/2; j++){
+	if((int)(FreqData[j].imag+0.5)>MaxIntMW) continue;
+    if(FreqData[j].real<0) break;
+    r.data=FreqData[j].real;
+		r.mass=(FreqData[j].imag+ProtonMass*Charge)/Charge;
+    FixedData.push_back(r);
+  };
+  
+  //Clean up the memory
+  delete [] FreqData;
+ 
+};
+
+
+void CMercury8::AccMass(bool b) {
+  bAccMass = b;
+}
+
+void CMercury8::RelAbun(bool b) {
+  bRelAbun = b;
+}
+
+double CMercury8::getZeroMass(){
+  return zeroMass;
+}
+
+double CMercury8::getMonoMass(){
+  return monoMass;
+}
+
+void CMercury8::DefaultValues(){
+
+  string el[MAXAtomNo+1] = {"X","H","He","Li","Be","B","C","N","O","F","Ne","Na","Mg","Al","Si","P","S","Cl","Ar",
+    "K","Ca","Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu","Zn","Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr",
+    "Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn","Sb","Te","I","Xe","Cs","Ba","La","Ce","Pr","Nd","Pm","Sm",
+    "Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb","Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg","Tl","Pb","Bi","Po",
+    "At","Rn","Fr","Ra","Ac","Th","Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm","Md","No","Lr","Hx","Cx","Nx",
+    "Ox","Sx"};
+  int sz[MAXAtomNo+1] = {2,2,2,2,1,2,2,2,3,1,3,1,3,1,3,1,4,2,3,3,6,1,5,2,4,1,4,1,5,2,5,2,5,1,6,2,6,2,4,1,5,1,7,1,7,
+    1,6,2,8,2,10,2,8,1,9,1,7,2,4,1,7,1,7,2,7,1,7,1,6,1,7,2,6,2,5,2,7,2,6,1,7,2,4,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,
+    1,1,1,1,1,2,2,2,3,4};
+  double m[322] = {1.000000000000,2.000000000000,1.007824600000,2.014102100000,3.016030000000,4.002600000000,
+    6.015121000000,7.016003000000,9.012182000000,10.012937000000,11.009305000000,12.000000000000,13.003355400000,
+    14.003073200000,15.000108800000,15.994914100000,16.999132200000,17.999161600000,18.998403200000,
+    19.992435000000,20.993843000000,21.991383000000,22.989767000000,23.985042000000,24.985837000000,
+    25.982593000000,26.981539000000,27.976927000000,28.976495000000,29.973770000000,30.973762000000,
+    31.972070000000,32.971456000000,33.967866000000,35.967080000000,34.968853100000,36.965903400000,
+    35.967545000000,37.962732000000,39.962384000000,38.963707000000,39.963999000000,40.961825000000,
+    39.962591000000,41.958618000000,42.958766000000,43.955480000000,45.953689000000,47.952533000000,
+    44.955910000000,45.952629000000,46.951764000000,47.947947000000,48.947871000000,49.944792000000,
+    49.947161000000,50.943962000000,49.946046000000,51.940509000000,52.940651000000,53.938882000000,
+    54.938047000000,53.939612000000,55.934939000000,56.935396000000,57.933277000000,58.933198000000,
+    57.935346000000,59.930788000000,60.931058000000,61.928346000000,63.927968000000,62.939598000000,
+    64.927793000000,63.929145000000,65.926034000000,66.927129000000,67.924846000000,69.925325000000,
+    68.925580000000,70.924700000000,69.924250000000,71.922079000000,72.923463000000,73.921177000000,
+    75.921401000000,74.921594000000,73.922475000000,75.919212000000,76.919912000000,77.919000000000,
+    79.916520000000,81.916698000000,78.918336000000,80.916289000000,77.914000000000,79.916380000000,
+    81.913482000000,82.914135000000,83.911507000000,85.910616000000,84.911794000000,86.909187000000,
+    83.913430000000,85.909267000000,86.908884000000,87.905619000000,88.905849000000,89.904703000000,
+    90.905644000000,91.905039000000,93.906314000000,95.908275000000,92.906377000000,91.906808000000,
+    93.905085000000,94.905840000000,95.904678000000,96.906020000000,97.905406000000,99.907477000000,
+    98.000000000000,95.907599000000,97.905287000000,98.905939000000,99.904219000000,100.905582000000,
+    101.904348000000,103.905424000000,102.905500000000,101.905634000000,103.904029000000,104.905079000000,
+    105.903478000000,107.903895000000,109.905167000000,106.905092000000,108.904757000000,105.906461000000,
+    107.904176000000,109.903005000000,110.904182000000,111.902758000000,112.904400000000,113.903357000000,
+    115.904754000000,112.904061000000,114.903880000000,111.904826000000,113.902784000000,114.903348000000,
+    115.901747000000,116.902956000000,117.901609000000,118.903310000000,119.902200000000,121.903440000000,
+    123.905274000000,120.903821000000,122.904216000000,119.904048000000,121.903054000000,122.904271000000,
+    123.902823000000,124.904433000000,125.903314000000,127.904463000000,129.906229000000,126.904473000000,
+    123.905894000000,125.904281000000,127.903531000000,128.904780000000,129.903509000000,130.905072000000,
+    131.904144000000,133.905395000000,135.907214000000,132.905429000000,129.906282000000,131.905042000000,
+    133.904486000000,134.905665000000,135.904553000000,136.905812000000,137.905232000000,137.907110000000,
+    138.906347000000,135.907140000000,137.905985000000,139.905433000000,141.909241000000,140.907647000000,
+    141.907719000000,142.909810000000,143.910083000000,144.912570000000,145.913113000000,147.916889000000,
+    149.920887000000,145.000000000000,143.911998000000,146.914895000000,147.914820000000,148.917181000000,
+    149.917273000000,151.919729000000,153.922206000000,150.919847000000,152.921225000000,151.919786000000,
+    153.920861000000,154.922618000000,155.922118000000,156.923956000000,157.924099000000,159.927049000000,
+    158.925342000000,155.925277000000,157.924403000000,159.925193000000,160.926930000000,161.926795000000,
+    162.928728000000,163.929171000000,164.930319000000,161.928775000000,163.929198000000,165.930290000000,
+    166.932046000000,167.932368000000,169.935461000000,168.934212000000,167.933894000000,169.934759000000,
+    170.936323000000,171.936378000000,172.938208000000,173.938859000000,175.942564000000,174.940770000000,
+    175.942679000000,173.940044000000,175.941406000000,176.943217000000,177.943696000000,178.945812000000,
+    179.946545000000,179.947462000000,180.947992000000,179.946701000000,181.948202000000,182.950220000000,
+    183.950928000000,185.954357000000,184.952951000000,186.955744000000,183.952488000000,185.953830000000,
+    186.955741000000,187.955860000000,188.958137000000,189.958436000000,191.961467000000,190.960584000000,
+    192.962917000000,189.959917000000,191.961019000000,193.962655000000,194.964766000000,195.964926000000,
+    197.967869000000,196.966543000000,195.965807000000,197.966743000000,198.968254000000,199.968300000000,
+    200.970277000000,201.970617000000,203.973467000000,202.972320000000,204.974401000000,203.973020000000,
+    205.974440000000,206.975872000000,207.976627000000,208.980374000000,209.000000000000,210.000000000000,
+    222.000000000000,223.000000000000,226.025000000000,227.028000000000,232.038054000000,231.035900000000,
+    234.040946000000,235.043924000000,238.050784000000,237.048000000000,244.000000000000,243.000000000000,
+    247.000000000000,247.000000000000,251.000000000000,252.000000000000,257.000000000000,258.000000000000,
+    259.000000000000,260.000000000000,1.007824600000,2.014102100000,12.000000000000,13.003355400000,
+    14.003073200000,15.000108800000,15.994914100000,16.999132200000,17.999161600000,31.972070000000,
+    32.971456000000,33.967866000000,35.967080000000};
+  double r[322] = {0.900000000000,0.100000000000,0.999855000000,0.000145000000,0.000001380000,0.999998620000,
+    0.075000000000,0.925000000000,1.000000000000,0.199000000000,0.801000000000,0.989160000000,0.010840000000,
+    0.996330000000,0.003660000000,0.997576009706,0.000378998479,0.002044991815,1.000000000000,0.904800000000,
+    0.002700000000,0.092500000000,1.000000000000,0.789900000000,0.100000000000,0.110100000000,1.000000000000,
+    0.922300000000,0.046700000000,0.031000000000,1.000000000000,0.950210000000,0.007450000000,0.042210000000,
+    0.000130000000,0.755290000000,0.244710000000,0.003370000000,0.000630000000,0.996000000000,0.932581000000,
+    0.000117000000,0.067302000000,0.969410000000,0.006470000000,0.001350000000,0.020860000000,0.000040000000,
+    0.001870000000,1.000000000000,0.080000000000,0.073000000000,0.738000000000,0.055000000000,0.054000000000,
+    0.002500000000,0.997500000000,0.043450000000,0.837900000000,0.095000000000,0.023650000000,1.000000000000,
+    0.059000000000,0.917200000000,0.021000000000,0.002800000000,1.000000000000,0.682700000000,0.261000000000,
+    0.011300000000,0.035900000000,0.009100000000,0.691700000000,0.308300000000,0.486000000000,0.279000000000,
+    0.041000000000,0.188000000000,0.006000000000,0.601080000000,0.398920000000,0.205000000000,0.274000000000,
+    0.078000000000,0.365000000000,0.078000000000,1.000000000000,0.009000000000,0.091000000000,0.076000000000,
+    0.236000000000,0.499000000000,0.089000000000,0.506900000000,0.493100000000,0.003500000000,0.022500000000,
+    0.116000000000,0.115000000000,0.570000000000,0.173000000000,0.721700000000,0.278300000000,0.005600000000,
+    0.098600000000,0.070000000000,0.825800000000,1.000000000000,0.514500000000,0.112200000000,0.171500000000,
+    0.173800000000,0.028000000000,1.000000000000,0.148400000000,0.092500000000,0.159200000000,0.166800000000,
+    0.095500000000,0.241300000000,0.096300000000,1.000000000000,0.055400000000,0.018600000000,0.127000000000,
+    0.126000000000,0.171000000000,0.316000000000,0.186000000000,1.000000000000,0.010200000000,0.111400000000,
+    0.223300000000,0.273300000000,0.264600000000,0.117200000000,0.518390000000,0.481610000000,0.012500000000,
+    0.008900000000,0.124900000000,0.128000000000,0.241300000000,0.122200000000,0.287300000000,0.074900000000,
+    0.043000000000,0.957000000000,0.009700000000,0.006500000000,0.003600000000,0.145300000000,0.076800000000,
+    0.242200000000,0.085800000000,0.325900000000,0.046300000000,0.057900000000,0.574000000000,0.426000000000,
+    0.000950000000,0.025900000000,0.009050000000,0.047900000000,0.071200000000,0.189300000000,0.317000000000,
+    0.338700000000,1.000000000000,0.001000000000,0.000900000000,0.019100000000,0.264000000000,0.041000000000,
+    0.212000000000,0.269000000000,0.104000000000,0.089000000000,1.000000000000,0.001060000000,0.001010000000,
+    0.024200000000,0.065930000000,0.078500000000,0.112300000000,0.717000000000,0.000900000000,0.999100000000,
+    0.001900000000,0.002500000000,0.884300000000,0.111300000000,1.000000000000,0.271300000000,0.121800000000,
+    0.238000000000,0.083000000000,0.171900000000,0.057600000000,0.056400000000,1.000000000000,0.031000000000,
+    0.150000000000,0.113000000000,0.138000000000,0.074000000000,0.267000000000,0.227000000000,0.478000000000,
+    0.522000000000,0.002000000000,0.021800000000,0.148000000000,0.204700000000,0.156500000000,0.248400000000,
+    0.218600000000,1.000000000000,0.000600000000,0.001000000000,0.023400000000,0.189000000000,0.255000000000,
+    0.249000000000,0.282000000000,1.000000000000,0.001400000000,0.016100000000,0.336000000000,0.229500000000,
+    0.268000000000,0.149000000000,1.000000000000,0.001300000000,0.030500000000,0.143000000000,0.219000000000,
+    0.161200000000,0.318000000000,0.127000000000,0.974100000000,0.025900000000,0.001620000000,0.052060000000,
+    0.186060000000,0.272970000000,0.136290000000,0.351000000000,0.000120000000,0.999880000000,0.001200000000,
+    0.263000000000,0.142800000000,0.307000000000,0.286000000000,0.374000000000,0.626000000000,0.000200000000,
+    0.015800000000,0.016000000000,0.133000000000,0.161000000000,0.264000000000,0.410000000000,0.373000000000,
+    0.627000000000,0.000100000000,0.007900000000,0.329000000000,0.338000000000,0.253000000000,0.072000000000,
+    1.000000000000,0.001500000000,0.100000000000,0.169000000000,0.231000000000,0.132000000000,0.298000000000,
+    0.068500000000,0.295240000000,0.704760000000,0.014000000000,0.241000000000,0.221000000000,0.524000000000,
+    1.000000000000,1.000000000000,1.000000000000,1.000000000000,1.000000000000,1.000000000000,1.000000000000,
+    1.000000000000,1.000000000000,0.000055000000,0.007200000000,0.992745000000,1.000000000000,1.000000000000,
+    1.000000000000,1.000000000000,1.000000000000,1.000000000000,1.000000000000,1.000000000000,1.000000000000,
+    1.000000000000,1.000000000000,0.999855000000,0.000145000000,0.989160000000,0.010840000000,0.996330000000,
+    0.003660000000,0.997576009706,0.000378998479,0.002044991815,0.950210000000,0.007450000000,0.042210000000,
+    0.000130000000};
+   
+  int j=0;
+  for (int Z=0; Z<=MAXAtomNo; Z++) {
+    strcpy(Element[Z].Symbol,&el[Z][0]);
+    strcpy(Orig[Z].Symbol,Element[Z].Symbol);    
+    Orig[Z].NumIsotopes = Element[Z].NumIsotopes = sz[Z];
+
+    Element[Z].IsoMass = new float[sz[Z]+1];
+    Element[Z].IntMass = new int[sz[Z]+1];
+    Element[Z].IsoProb = new float[sz[Z]+1];
+
+    Orig[Z].IsoMass = new float[sz[Z]+1];
+    Orig[Z].IntMass = new int[sz[Z]+1];
+    Orig[Z].IsoProb = new float[sz[Z]+1];
+    
+    for (int i=0; i<Element[Z].NumIsotopes; i++) {
+      Orig[Z].IsoMass[i]=Element[Z].IsoMass[i] = (float)m[j];
+      Orig[Z].IsoProb[i]=Element[Z].IsoProb[i] = (float)r[j];
+      Orig[Z].IntMass[i]=Element[Z].IntMass[i] = (int)(Element[Z].IsoMass[i]+0.5);
+      j++;
+    }
+      
+    Element[Z].NumAtoms = 0;
+    Element[Z].IsoMass[Element[Z].NumIsotopes] = 0;
+    Element[Z].IsoProb[Element[Z].NumIsotopes] = 0;
+    Orig[Z].NumAtoms = 0;
+    Orig[Z].IsoMass[Orig[Z].NumIsotopes] = 0;
+    Orig[Z].IsoProb[Orig[Z].NumIsotopes] = 0;
+  }
+
+}
+
diff --git a/src/app/hardklor/CMercury8.h b/src/app/hardklor/CMercury8.h
new file mode 100644
index 0000000..3d6c6fc
--- /dev/null
+++ b/src/app/hardklor/CMercury8.h
@@ -0,0 +1,77 @@
+#ifndef _CMercury8_H
+#define _CMercury8_H
+
+#include <cstdio>
+#include <cstdlib>
+#include <cmath>
+#include <cstring>
+#include "ctype.h"
+#include <ctime>
+#include "mercury.h"
+#include "FFT.h"
+using namespace std;
+
+typedef struct
+{
+   char  Symbol[3];	/* Elemental symbol */
+   int	 NumIsotopes;	/* Number of stable isotopes */
+   float *IsoMass;	/* Array of isotopic masses */
+   int   *IntMass;	/* Array of integer isotopic masses */
+   float *IsoProb;	/* Array of isotopic probabilities */
+   int   NumAtoms;	/* Number of occurances of element in molecular formula */
+ 
+} Atomic5;
+
+class CMercury8 {
+ private:
+  //Data Members:
+  Atomic5 Element[MAXAtomNo+1];	/* 104 elements allows for Z=103 or Lr */
+  Atomic5 Orig[MAXAtomNo+1];
+  int AtomicNum[MAXIsotopes];	/* Atomic numbers of elements parsed from molecular formula */
+  bool showOutput;
+  bool bAccMass;
+  bool bRelAbun;
+  vector<int> EnrichAtoms;
+  double monoMass;
+  double zeroMass;
+
+  //Functions:
+  void AccurateMass(int,int);
+  void AddElement(char[],int,int);
+  void CalcFreq(complex*, int, int, int, int);
+  void CalcMassRange(int*, double, int, int);
+  void CalcVariances(double*, double*, int);
+  void CalcWeights(double&,double&,double&,int&,int&,int&,int&,int);
+  void ConvertMass(complex*, int, int, double, double, int, int, int, double, double);
+  void DefaultValues();
+  void GetPeaks(complex*, int, vector<Result>&, int, int);
+  void InitializeData(char* fn="ISOTOPE.DAT");
+  void MassToInt(complex*, int);
+  void Mercury(int,int);
+  int ParseMF(char[], int*);
+  void RelativeAbundance(vector<Result>&);
+ 
+ public:
+  //Data Members:
+  vector<Result> FixedData;
+  vector<Result> FracAbunData;
+
+  //Constructors & Destructors:
+  CMercury8();
+  CMercury8(char *fn);
+  ~CMercury8();
+
+  //Functions:
+  void AccMass(bool);
+  void Echo(bool);
+  void Enrich(int,int,double d=0.99);
+  double getMonoMass();
+  double getZeroMass();
+  int GoMercury(char*, int=1, char* filename="\0");
+  void Intro();
+  void RelAbun(bool);
+  void Reset();
+
+};
+
+#endif
diff --git a/src/app/hardklor/CModelLibrary.cpp b/src/app/hardklor/CModelLibrary.cpp
new file mode 100644
index 0000000..5a0955d
--- /dev/null
+++ b/src/app/hardklor/CModelLibrary.cpp
@@ -0,0 +1,119 @@
+#include "CModelLibrary.h"
+
+CModelLibrary::CModelLibrary(CAveragine* avg, CMercury8* mer){
+	averagine=avg;
+	mercury=mer;
+  libModel=NULL;
+
+	chargeMin=0;
+	chargeCount=0;
+	varCount=0;
+	merCount=0;
+}
+
+CModelLibrary::~CModelLibrary(){
+	averagine=NULL;
+	mercury=NULL;
+	if(libModel!=NULL) {
+		eraseLibrary();
+		libModel=NULL;
+	}
+}
+
+bool CModelLibrary::buildLibrary(int lowCharge, int highCharge, vector<CHardklorVariant>& pepVariants){
+
+	int i,j,k;
+	unsigned int n;
+
+	vector<Peak_T> vMR;
+	Peak_T p;
+	float da;
+	double mass;
+	char av[64];
+
+	if(libModel!=NULL) {
+		cout << "library memory already in use." << endl;
+		return false;
+	}
+
+	//Fill in boundaries
+	chargeMin=lowCharge;
+	chargeCount=highCharge+1;
+	varCount=pepVariants.size();
+	merCount=1000;
+
+	libModel = new mercuryModel**[chargeCount];
+	for(i=chargeMin;i<chargeCount;i++){
+
+		libModel[i] = new mercuryModel*[varCount];
+		for(j=0;j<varCount;j++){
+
+			libModel[i][j] = new mercuryModel[merCount];
+			libModel[i][j][0].area=0.0f;
+			libModel[i][j][0].size=0;
+			libModel[i][j][0].zeroMass=0.0;
+			libModel[i][j][0].peaks=NULL;
+			for(k=1;k<merCount;k++){
+
+				mass=k*5*i-(1.007276466*i);
+				averagine->clear();
+				averagine->calcAveragine(mass,pepVariants[j]);
+				averagine->getAveragine(&av[0]);
+        //cout << mass << "\t" << pepVariants[j].sizeAtom() << "\t" << pepVariants[j].sizeEnrich() << "\t" << av << endl;
+        for(n=0;n<(unsigned int)pepVariants[j].sizeEnrich();n++){
+          mercury->Enrich(pepVariants[j].atEnrich(n).atomNum,pepVariants[j].atEnrich(n).isotope,pepVariants[j].atEnrich(n).ape);
+        }
+				mercury->GoMercury(&av[0],i);
+
+				vMR.clear();
+				da=0.0f;
+				for(n=0; n<mercury->FixedData.size(); n++) {
+					if(mercury->FixedData[n].data<1.0) continue;
+					p.intensity=(float)mercury->FixedData[n].data;
+					p.mz=mercury->FixedData[n].mass;
+					da+=p.intensity;
+					vMR.push_back(p);
+				}
+				da/=100.0f;
+
+				libModel[i][j][k].area = da;
+				libModel[i][j][k].size = vMR.size();
+				libModel[i][j][k].peaks = new Peak_T[vMR.size()];
+				libModel[i][j][k].zeroMass = mercury->getZeroMass();
+
+				for(n=0;n<vMR.size();n++) libModel[i][j][k].peaks[n]=vMR[n];
+			}
+		}
+	}
+
+	return true;
+
+}
+
+void CModelLibrary::eraseLibrary(){
+
+	int i,j,k;
+
+	if(libModel==NULL) return;
+
+	for(i=chargeMin;i<chargeCount;i++){
+		for(j=0;j<varCount;j++){
+			for(k=0;k<merCount;k++){
+				delete [] libModel[i][j][k].peaks;
+			}
+			delete [] libModel[i][j];
+		}
+		delete [] libModel[i];
+	}
+	delete [] libModel;
+
+	libModel=NULL;
+	
+}
+
+mercuryModel* CModelLibrary::getModel(int charge, int var, double mz){
+
+	int intMZ=(int)(mz/5);
+	return &libModel[charge][var][intMZ];
+
+}
\ No newline at end of file
diff --git a/src/app/hardklor/CModelLibrary.h b/src/app/hardklor/CModelLibrary.h
new file mode 100644
index 0000000..188b342
--- /dev/null
+++ b/src/app/hardklor/CModelLibrary.h
@@ -0,0 +1,40 @@
+#ifndef _CMODELLIBRARY_H
+#define _CMODELLIBRARY_H
+
+#include "HardklorTypes.h"
+#include "CAveragine.h"
+#include "CMercury8.h"
+#include "CHardklorVariant.h"
+#include <vector>
+
+using namespace std;
+
+class CModelLibrary {
+public:
+
+	//Constructors & Destructors
+	CModelLibrary(CAveragine* avg, CMercury8* mer);
+	~CModelLibrary();
+
+	//User functions
+	bool buildLibrary(int lowCharge, int highCharge, vector<CHardklorVariant>& pepVariants);
+	void eraseLibrary();
+	mercuryModel* getModel(int charge, int var, double mz);
+
+protected:
+
+private:
+
+	//Data Members
+	int chargeMin;
+	int chargeCount;
+	int varCount;
+	int merCount;
+
+	CAveragine* averagine;
+	CMercury8* mercury;
+	mercuryModel*** libModel;
+
+};
+
+#endif
\ No newline at end of file
diff --git a/src/app/hardklor/CNoiseReduction.cpp b/src/app/hardklor/CNoiseReduction.cpp
new file mode 100644
index 0000000..9a7d9ce
--- /dev/null
+++ b/src/app/hardklor/CNoiseReduction.cpp
@@ -0,0 +1,1626 @@
+#include "CNoiseReduction.h"
+
+CNoiseReduction::CNoiseReduction(){
+  pos=0;
+  posA=0;
+  strcpy(lastFile,"");
+}
+
+CNoiseReduction::CNoiseReduction(MSReader* msr, CHardklorSetting& hs){
+  r=msr;
+  cs=hs;
+  pos=0;
+  posA=0;
+  strcpy(lastFile,"");
+}
+
+CNoiseReduction::~CNoiseReduction(){
+  r=NULL;
+}
+
+//Calculates the resolution (FWHM) of a peak
+double CNoiseReduction::calcFWHM(double mz){
+	double deltaM;
+	switch(cs.msType){
+	case OrbiTrap:
+		deltaM = mz * sqrt(mz) / (20*cs.res400); //(20*userParams.res400);  //sqare root of 400
+		break;
+	case TOF:
+		deltaM = mz / cs.res400;
+		break;
+	case QIT:
+		deltaM = cs.res400 / 5000.0;
+		break;
+	case FTICR:
+	default:
+		deltaM = mz * mz / (400*cs.res400);
+		break;
+	}
+	return deltaM;
+}
+
+bool CNoiseReduction::DeNoise(Spectrum& sp){
+
+  double ppm;
+  int i,j,k;
+  int index;
+  int matchCount;
+  char cFilter1[256];
+  char cFilter2[256];
+
+  Spectrum tmpSpec;  
+  vector<int> v;
+
+  sp.clear();
+
+  if(pos==0){
+    if((cs.scan.iLower>0)) {
+      k=cs.scan.iLower; 
+      r->readFile(&cs.inFile[0],tmpSpec,cs.scan.iLower);
+    } else {
+      r->readFile(&cs.inFile[0],tmpSpec);
+      k=tmpSpec.getScanNumber();
+    }
+    if(tmpSpec.getScanNumber()==0) return false;
+    tmpSpec.getRawFilter(cFilter1,256);
+      
+    //Gather left side of scan
+    i=1;
+    j=0;
+    while( k-i > 0){
+      r->readFile(&cs.inFile[0],tmpSpec,cs.scan.iLower-i);
+      if(tmpSpec.getScanNumber()==0) {
+        i++;
+        continue;
+      }
+      tmpSpec.getRawFilter(cFilter2,256);
+      
+      //Assume High resolution data at all times
+      if(!cs.centroid) {
+        FirstDerivativePeaks(tmpSpec,1);
+        tmpSpec.setRawFilter(cFilter2);
+      }
+
+      s.push_front(tmpSpec);
+      if(strcmp(cFilter1,cFilter2)==0){
+        j++;
+				if(j==(int)(cs.boxcar/2)) break;
+      }
+      i++;
+    }
+
+    //cout << "Done left " << s.size() << " " << cs.rawAvgWidth << endl;
+
+    //Get our position again
+    r->readFile(&cs.inFile[0],tmpSpec,k);
+
+    //Assume High resolution data at all times
+    if(!cs.centroid) {
+      FirstDerivativePeaks(tmpSpec,1);
+      tmpSpec.setRawFilter(cFilter1);
+    }
+    
+    //Add first target scan
+    s.push_back(tmpSpec);
+    pos=s.size()-1; 
+    
+    //Add right side of scan
+    i=1;
+    j=0;
+    while(true){
+      r->readFile(NULL,tmpSpec);
+      if(tmpSpec.getScanNumber()==0) break;
+      tmpSpec.getRawFilter(cFilter2,256);
+
+      //Assume High resolution data at all times
+      if(!cs.centroid) {
+        FirstDerivativePeaks(tmpSpec,1);
+        tmpSpec.setRawFilter(cFilter2);
+      }
+
+      s.push_back(tmpSpec);
+      //cout << tmpSpec.getScanNumber() << " " << cFilter1 << " xx " << cFilter2 << endl;
+      if(strcmp(cFilter1,cFilter2)==0){  
+        j++;
+				if(j==(int)(cs.boxcar/2)) break;
+      }
+      i++;
+    }
+
+  }
+
+  //return false if we reached the end
+  if(pos>=(int)s.size()) return false;
+
+  //Because Deque may have mixed spectra, create list of Deque indexes to compare
+  //Shrink Deque on the left if some spectra are not needed
+  //Expand Deque to the right if needed and possible
+  //cout << "Checking scan " << s[pos].getScanNumber() << endl;
+  v.clear();
+  s[pos].getRawFilter(cFilter1,256);
+
+  //look left
+  for(i=pos-1;i>=0;i--){
+    s[i].getRawFilter(cFilter2,256);
+    if(strcmp(cFilter1,cFilter2)==0) {
+      v.push_back(i);
+			if(v.size()==(int)(cs.boxcar/2)) break;
+    }
+  }
+
+  //erase unneeded left items
+  while(i>0){
+    s.pop_front();
+    i--;
+    for(j=0;j<(int)v.size();j++) v[j]--;
+    pos--;
+  }
+
+  //look right
+  j=0;
+  for(i=pos+1;i<(int)s.size();i++){
+    s[i].getRawFilter(cFilter2,256);
+    if(strcmp(cFilter1,cFilter2)==0) {
+      v.push_back(i);
+      j++;
+      if(j==(int)(cs.boxcar/2)) break;
+    }
+  }
+
+  //extend right side if needed
+  while(j<(int)(cs.boxcar/2)){
+    r->readFile(NULL,tmpSpec);
+    if(tmpSpec.getScanNumber()==0) break;    
+    tmpSpec.getRawFilter(cFilter2,256);
+
+    //Assume High resolution data at all times
+    if(!cs.centroid) {
+      FirstDerivativePeaks(tmpSpec,1);
+      tmpSpec.setRawFilter(cFilter2);
+    }
+
+    s.push_back(tmpSpec);
+    if(strcmp(cFilter1,cFilter2)==0) {
+      v.push_back(s.size()-1);
+      j++;
+    }
+  }
+
+  //if there is nothing to compare to, exit now
+  if(v.size()==0) return false;
+
+  //compare peaks
+  //cout << "Checking " << s[pos].size() << " peaks." << endl;
+  for(i=0;i<s[pos].size();i++){
+    matchCount=1;
+    for(j=0;j<(int)v.size();j++){
+      if(s[v[j]].size()<1) continue;
+      index = NearestPeak(s[v[j]],s[pos].at(i).mz);
+      ppm=fabs( (s[v[j]].at(index).mz-s[pos].at(i).mz)/s[pos].at(i).mz * 1000000);
+      if(ppm<cs.ppm) matchCount++;
+    }
+		if(matchCount>=cs.boxcarFilter || matchCount==v.size()) sp.add(s[pos].at(i));
+  }
+  sp.setScanNumber(s[pos].getScanNumber());
+  sp.setScanNumber(s[pos].getScanNumber(true),true);
+  sp.setRTime(s[pos].getRTime());
+  pos++;
+
+  //cout << sp.getScanNumber() << endl;
+
+  //cout << "Done! " << sp.size() << " " << pos << endl;
+  return true;
+
+}
+
+//Overloaded function allows user to just pass an array of spectra to be compared.
+//No file reading/parsing is performed.
+/*
+bool CNoiseReduction::DeNoise(Spectrum& sp, vector<Spectrum>& vs, int pivot, bool findPeaks){
+
+  double ppm;
+  int i,j;
+  int index;
+  int matchCount;
+
+  Spectrum tmpSpec;  
+  vector<int> v;
+
+  sp.clear();
+
+  //Find peaks (centroid) for all scans (assume high res data)
+  if(findPeaks) {
+    for(i=0;i<vs.size();i++) FirstDerivativePeaks(vs[i],1);
+  }
+
+  //compare peaks
+  for(i=0;i<vs[pivot].size();i++){
+    matchCount=1;
+    for(j=0;j<vs.size();j++){
+      if(j==pivot) continue;
+      if(vs[j].size()<1) continue;
+      index = NearestPeak(vs[j],vs[pivot].at(i).mz);
+      ppm=fabs( (vs[j].at(index).mz-vs[pivot].at(i).mz)/vs[pivot].at(i).mz * 1000000);
+      if(ppm<cs.ppm) matchCount++;
+    }
+    if(matchCount>=cs.ppMatch || matchCount==v.size()) sp.add(vs[pivot].at(i));
+  }
+  sp.setScanNumber(vs[pivot].getScanNumber());
+  sp.setScanNumber(vs[pivot].getScanNumber(true),true);
+  sp.setRTime(vs[pivot].getRTime());
+
+  //cout << "Done! " << sp.size() << " " << pivot << endl;
+  return true;
+
+}
+
+//Overloaded function allows user to just pass an array of spectra to be compared.
+//No file reading/parsing is performed.
+bool CNoiseReduction::DeNoise(Spectrum& sp, deque<Spectrum>& vs, int pivot, bool findPeaks){
+
+  double ppm;
+  int i,j;
+  int index;
+  int matchCount;
+
+  Spectrum tmpSpec;  
+  vector<int> v;
+
+  sp.clear();
+
+  //Find peaks (centroid) for all scans (assume high res data)
+  if(findPeaks) {
+    for(i=0;i<vs.size();i++) FirstDerivativePeaks(vs[i],1);
+  }
+
+  //compare peaks
+  for(i=0;i<vs[pivot].size();i++){
+    matchCount=1;
+    for(j=0;j<vs.size();j++){
+      if(j==pivot) continue;
+      if(vs[j].size()<1) continue;
+      index = NearestPeak(vs[j],vs[pivot].at(i).mz);
+      ppm=fabs( (vs[j].at(index).mz-vs[pivot].at(i).mz)/vs[pivot].at(i).mz * 1000000);
+      if(ppm<cs.ppm) matchCount++;
+    }
+    if(matchCount>=cs.ppMatch || matchCount==v.size()) sp.add(vs[pivot].at(i));
+  }
+  sp.setScanNumber(vs[pivot].getScanNumber());
+  sp.setScanNumber(vs[pivot].getScanNumber(true),true);
+  sp.setRTime(vs[pivot].getRTime());
+
+  //cout << "Done! " << sp.size() << " " << pos << endl;
+  return true;
+
+}
+*/
+
+//First derivative method taken from CSpecAnalyze, returns base peak intensity of the set
+void CNoiseReduction::FirstDerivativePeaks(Spectrum& sp, int winSize){
+  int i,j;
+  float maxIntensity;
+  int bestPeak;
+  bool bLastPos;
+  Spectrum gp;
+
+	int nextBest;
+	double FWHM;
+	Peak_T centroid;
+
+  bLastPos=false;
+  for(i=0;i<sp.size()-winSize;i++){
+
+    if(sp.at(i).intensity<sp.at(i+winSize).intensity) {
+      bLastPos=true;
+      continue;
+    } else {
+      if(bLastPos){
+				bLastPos=false;
+	
+				//find max and add peak
+				maxIntensity=0;
+				for(j=i;j<i+winSize;j++){
+				  if (sp.at(j).intensity>maxIntensity){
+				    maxIntensity=sp.at(j).intensity;
+				    bestPeak = j;
+				  }
+				}
+
+				//Best estimate of Gaussian centroid
+				//Get 2nd highest point of peak
+				if(bestPeak==sp.size()-1){
+					nextBest=bestPeak-1;
+				} else if(sp.at(bestPeak-1).intensity > sp.at(bestPeak+1).intensity){
+					nextBest=bestPeak-1;
+				} else {
+					nextBest=bestPeak+1;
+				}
+
+				//Get FWHM
+				FWHM = calcFWHM(sp.at(bestPeak).mz);
+
+				//Calc centroid MZ (in three lines for easy reading)
+				centroid.mz = pow(FWHM,2)*log(sp.at(bestPeak).intensity/sp.at(nextBest).intensity);
+				centroid.mz /= GC*(sp.at(bestPeak).mz-sp.at(nextBest).mz);
+				centroid.mz += (sp.at(bestPeak).mz+sp.at(nextBest).mz)/2;
+
+				//Calc centroid intensity
+				centroid.intensity=(float)(sp.at(bestPeak).intensity/exp(-pow((sp.at(bestPeak).mz-centroid.mz)/FWHM,2)*GC));
+
+				//some peaks are funny shaped and have bad gaussian fit.
+				//if error is more than 10%, keep existing intensity
+				if( fabs((sp.at(bestPeak).intensity - centroid.intensity) / centroid.intensity * 100) > 10 ||
+            //not a good check for infinity
+            centroid.intensity>999999999999.9 ||
+            centroid.intensity < 0 ) {
+					centroid.intensity=sp.at(bestPeak).intensity;
+				}
+
+				//Hack until I put in mass ranges
+				if(centroid.mz<0 || centroid.mz>2000) {
+					//do nothing if invalid mz
+				} else {
+					gp.add(centroid);
+				}
+				i+=winSize-1;
+      }
+
+    }
+  }
+  
+  int scanNumber=sp.getScanNumber();
+  int scanNumber2=sp.getScanNumber(false);
+  float rTime=sp.getRTime();
+  sp = gp;
+  sp.setRTime(rTime);
+  sp.setScanNumber(scanNumber);
+  sp.setScanNumber(scanNumber2,true);
+
+}
+
+
+
+//Binary search to quickly find the nearest peak
+int CNoiseReduction::NearestPeak(Spectrum& sp, double mz){
+  int pivot=0;
+  int width=0;
+  int lastWidth=0;
+  int best=0;
+  double dif=9999999.9;
+  double d;
+
+  pivot=sp.size()/2;
+  width=(int)(pivot/2.0+0.5);
+  while(width!=lastWidth && pivot<sp.size() && pivot>-1){
+    d=fabs(sp.at(pivot).mz-mz);
+    if(d<dif){
+      dif=d;
+      best=pivot;
+    }
+    if(sp.at(pivot).mz==mz){
+      return pivot;
+    } else if(sp.at(pivot).mz > mz){
+      pivot-=width;
+      lastWidth=width;
+      width=(int)(width/2.0+0.5);
+    } else {
+      pivot+=width;
+      lastWidth=width;
+      width=(int)(width/2.0+0.5);
+    }
+  }
+  if(pivot<sp.size() && pivot>-1){
+    d=fabs(sp.at(pivot).mz-mz);
+    if(d<dif) best=pivot;
+  }
+  return best;
+}
+
+bool CNoiseReduction::ScanAverage(Spectrum& sp, char* file, int width, float cutoff){
+  
+  Spectrum ts;
+  Spectrum ps=sp;
+  MSReader r;
+ 
+  int i;
+  int j;
+  int k;
+  int widthCount=0;
+  int numScans=1;
+  double dif;
+  double prec;
+  double dt;
+  double c=CParam(ps,3);
+
+  bool bLeft=true;
+  int posLeft=ps.getScanNumber()-1;
+  int posRight=ps.getScanNumber()+1;
+  char cFilter1[256];
+  char cFilter2[256];
+
+  ps.getRawFilter(cFilter1,256);
+
+  while(widthCount<(width*2)){
+
+    //Alternate looking left and right
+    if(bLeft){
+      bLeft=false;
+      widthCount++;
+      while(posLeft>0){
+        r.readFile(file,ts,posLeft);
+        if(ts.getScanNumber()==0) break;
+        ts.getRawFilter(cFilter2,256);
+        if(strcmp(cFilter1,cFilter2)==0) break;
+        posLeft--;
+      }
+    } else {
+      bLeft=true;
+      widthCount++;
+      while(true){
+        r.readFile(file,ts,posRight);
+        if(ts.getScanNumber()==0) break;
+        ts.getRawFilter(cFilter2,256);
+        if(strcmp(cFilter1,cFilter2)==0) break;
+        posRight++;
+      }
+    }
+    if(ts.getScanNumber()==0) continue;
+
+    numScans++;
+
+    //Match peaks between pivot scan and temp scan
+    k=0;
+    for(i=0;i<ps.size();i++){
+      dif=100000.0;
+      prec = c * ps.at(i).mz * ps.at(i).mz / 2;
+
+      for(j=k;j<ts.size();j++){
+        dt=fabs(ps.at(i).mz-ts.at(j).mz);
+        if(dt<=dif) {
+          if(dt<prec) {
+            ps.at(i).intensity+=ts.at(j).intensity;
+            ts.at(j).mz=-1.0;
+            k=j+1;
+            break;
+          }
+          dif=dt;
+        } else {
+          k=j-1;
+          break;
+        }
+      }
+    }
+
+    //Add unmatched peaks from temp scan
+    for(i=0;i<ts.size();i++){
+      if(ts.at(i).mz>-1.0) ps.add(ts.at(i));
+    }
+
+    //Sort pivot scan peaks for fast traversal against next temp scan
+    ps.sortMZ();
+
+  }
+
+  //Average points and apply cutoff
+  sp.clear();
+  for(i=0;i<ps.size();i++) {
+    ps.at(i).intensity/=numScans;
+    if(ps.at(i).intensity>=cutoff) sp.add(ps.at(i));
+  }
+
+  sp.setScanNumber(ps.getScanNumber());
+  sp.setScanNumber(ps.getScanNumber(true),true);
+  sp.setRTime(ps.getRTime());
+
+  return true;
+}
+
+bool CNoiseReduction::NewScanAverage(Spectrum& sp, char* file, int width, float cutoff, int scanNum){
+  
+  Spectrum ts;
+
+  vector<int> vPos;
+   
+  int i;
+  int j;
+  int k;
+  int m;
+  int widthCount=0;
+  int numScans=1;
+  double dif;
+  double prec;
+  double dt;
+  double c;
+
+  bool bLeft=true;
+  int posLeft;
+  int posRight;
+  int index;
+  char cFilter1[256];
+  //char cFilter2[256];
+
+  //double slope;
+  //double intercept;
+
+  sp.clear();
+  Spectrum* specs;
+  specs = new Spectrum[width*2+1];
+
+  //if file is not null, create new buffer
+  if(file!=NULL){
+    strcpy(lastFile,file);
+    bs.clear();
+    if(scanNum>0) r->readFile(file,ts,scanNum);
+    else r->readFile(file,ts);
+    if(ts.getScanNumber()==0) {
+      delete [] specs;
+      return false;
+    }
+    bs.push_back(ts);
+    specs[0]=bs[0];
+    c=CParam(specs[0],3);
+    posA=0;
+  } else {
+    posA++;
+    if(posA>=(int)bs.size()) { //end of buffer, no more data
+      delete [] specs;
+      return false; 
+    }
+    specs[0]=bs[posA];
+    c=CParam(specs[0],3);
+  }
+
+  specs[0].getRawFilter(cFilter1,256);
+
+  posLeft=posA;
+  posRight=posA;
+  while(widthCount<(width*2)){
+
+    index=-1;
+
+    //Alternate looking left and right
+    if(bLeft){
+      bLeft=false;
+      widthCount++;
+      
+      while(true){
+        posLeft--;
+        if(posLeft<0) { //buffer is too short on left, add spectra
+          i=bs[0].getScanNumber();
+          while(true){
+            i--;
+            if(i==0) break;
+            r->readFile(lastFile,ts,i);
+            if(ts.getScanNumber()==0) continue;
+            else break;
+          }
+          if(i==0) break;
+          bs.push_front(ts);
+          posA++;
+          posRight++;
+          posLeft=0;
+          //ts.getRawFilter(cFilter2,256);
+          if(ts.getMsLevel()==cs.msLevel) {
+            index=posLeft;
+            break;
+          }
+        } else {
+          //bs[posLeft].getRawFilter(cFilter2,256);
+          if(bs[posLeft].getMsLevel()==cs.msLevel) {
+            index=posLeft;
+            break;
+          }
+        }
+      }
+
+    } else {
+      bLeft=true;
+      widthCount++;
+
+      while(true){
+        posRight++;
+        if(posRight>=(int)bs.size()) { //buffer is too short on right, add spectra
+          r->readFile(lastFile,ts,bs[bs.size()-1].getScanNumber());
+          r->readFile(NULL,ts);
+          if(ts.getScanNumber()==0) {
+            posRight--;
+            break;
+          }
+          bs.push_back(ts);
+          //ts.getRawFilter(cFilter2,256);
+          if(ts.getMsLevel()==cs.msLevel) {
+            index=posRight;
+            break;
+          }
+        } else {
+          //bs[posRight].getRawFilter(cFilter2,256);
+          if(bs[posRight].getMsLevel()==cs.msLevel) {
+            index=posRight;
+            break;
+          }
+        }
+      }
+    }
+
+    if(index==-1)  continue;
+    specs[numScans++]=bs[index];
+
+  }
+  
+  double tmz;
+  int mzcount=0;
+
+  /* Ledford equation correction
+  double freq;
+  double conA=0.0;
+  double conB=0.0;
+
+  for(m=0;m<numScans;m++){
+    conA+=specs[m].getConversionA();
+    conB+=specs[m].getConversionB();
+  }
+  conA/=numScans;
+  conB/=numScans;
+
+  printf("%.10lf, %.10lf\n",conA,conB);
+  for(k=0;k<numScans;k++){
+    for(j=0;j<specs[k].size();j++){
+      freq = sqrt(specs[k].getConversionA()*specs[k].getConversionA() - (4*specs[k].at(j).mz*(-specs[k].getConversionB())));
+      freq += specs[k].getConversionA();
+      freq /= (2*specs[k].at(j).mz);
+
+      specs[k].at(j).mz = conA/freq + conB/(freq*freq);
+    }
+  }
+  */
+
+  //Match peaks between pivot scan (0) and neighbors (the rest)
+  for(m=0;m<numScans;m++){
+    
+    vPos.clear();
+    for(i=0;i<numScans;i++) vPos.push_back(0);
+
+    for(i=0;i<specs[m].size();i++){ //iterate all points
+      if(specs[m].at(i).intensity<0.1) continue;
+      tmz=specs[m].at(i).mz;
+      mzcount=1;
+      prec = c * tmz * tmz / 2;
+      
+      for(k=m+1;k<numScans;k++){ //iterate all neighbors
+        dif=100000.0;
+
+        for(j=vPos[k];j<specs[k].size();j++){ //check if point is a match
+          if(specs[k].at(j).intensity<0.1) continue; //skip meaningless datapoints to speed along
+          dt=fabs(tmz-specs[k].at(j).mz);
+
+          if(dt<=dif) {
+            if(dt<prec) {
+              //linear interpolate
+              //if(specs[k].at(j).mz<tmz && j<specs[k].size()-1){
+              //  slope=(specs[k].at(j+1).intensity-specs[k].at(j).intensity)/(specs[k].at(j+1).mz-specs[k].at(j).mz);
+              //  intercept=specs[k].at(j).intensity-specs[k].at(j).mz*slope;
+              //  specs[m].at(i).intensity+=(tmz*slope+intercept);
+              //} else if(specs[k].at(j).mz>tmz && j>0) {
+              //  slope=(specs[k].at(j).intensity-specs[k].at(j-1).intensity)/(specs[k].at(j).mz-specs[k].at(j-1).mz);
+              //  intercept=specs[k].at(j).intensity-specs[k].at(j).mz*slope;
+              //  specs[m].at(i).intensity+=(tmz*slope+intercept);
+              //} else {
+              specs[m].at(i).intensity += specs[k].at(j).intensity;
+              //}
+
+              //Averaging the mz values appears equivalent to realigning all spectra against
+              //an average Ledford correction.
+              specs[m].at(i).mz += specs[k].at(j).mz;
+              vPos[k]=j+1;
+              specs[k].at(j).intensity=-1.0;
+              mzcount++;
+              break;
+            }
+            dif=dt;
+          } else {
+            vPos[k]=j-1;
+            break;
+          }
+        }
+      }//for k
+
+      sp.add(specs[m].at(i).mz/mzcount,specs[m].at(i).intensity/numScans);
+
+    } //next i
+  } //next m
+
+  if(sp.size()>0) sp.sortMZ();
+  sp.setScanNumber(specs[0].getScanNumber());
+  sp.setScanNumber(specs[0].getScanNumber(true),true);
+  sp.setRTime(specs[0].getRTime());
+  sp.setRawFilter(cFilter1);
+
+  if(posLeft>0){
+    while(posLeft>0){
+      bs.pop_front();
+      posLeft--;
+      posA--;
+    }
+  }
+  delete [] specs;
+  return true;
+}
+
+/*
+bool CNoiseReduction::ScanAverage(Spectrum& sp, vector<Spectrum>& vs, int pivot, float cutoff, double cp){
+ 
+  int i;
+  int j;
+  int k;
+  int ts;
+  int widthCount=0;
+  int numScans=1;
+  double dif;
+  double prec;
+  double dt;
+  double c;
+  if(cp==0.0) c=CParam(vs[pivot],1);
+  else c=cp;
+
+  bool bLeft=true;
+  int posLeft=pivot-1;
+  int posRight=pivot+1;
+
+
+  cout << "PIVOT: " << vs[pivot].getScanNumber() << endl;
+  cout << c << endl;
+
+  while(numScans<vs.size()){
+
+    //Alternate looking left and right
+    if(bLeft){
+      bLeft=false;
+      if(posLeft<0) continue;
+      ts=posLeft;
+      posLeft--;
+    } else {
+      bLeft=true;
+      if(posRight>=vs.size()) continue;
+      ts=posRight;
+      posRight++;
+    }
+
+    numScans++;
+
+    cout << "TS: " << ts << " " << vs[ts].getScanNumber() << endl;
+    for(i=0;i<vs[ts].size();i++) cout << vs[ts].at(i).mz << " " << vs[ts].at(i).intensity << endl;
+
+    //Match peaks between pivot scan and temp scan
+    k=0;
+    for(i=0;i<vs[pivot].size();i++){
+      dif=100000.0;
+      prec = c * vs[pivot].at(i).mz * vs[pivot].at(i).mz / 2;
+
+      for(j=k;j<vs[ts].size();j++){
+        dt=fabs(vs[pivot].at(i).mz-vs[ts].at(j).mz);
+        if(dt<=dif) {
+          if(dt<prec) {
+            cout << "MATCH: " << vs[pivot].at(i).mz << " to " << vs[ts].at(j).mz << " was " << vs[pivot].at(i).intensity;
+            vs[pivot].at(i).intensity+=vs[ts].at(j).intensity;
+            cout << " is now " << vs[pivot].at(i).intensity << endl;
+            vs[ts].at(j).mz=-1.0;
+            k=j+1;
+            break;
+          }
+          dif=dt;
+        } else {
+          k=j-1;
+          break;
+        }
+      }
+    }
+
+    //Add unmatched peaks from temp scan
+    for(i=0;i<vs[ts].size();i++){
+      if(vs[ts].at(i).mz>-1.0) {
+        vs[pivot].add(vs[ts].at(i));
+        cout << "Adding " << vs[ts].at(i).mz << endl;
+      }
+    }
+
+    //Sort pivot scan peaks for fast traversal against next temp scan
+    vs[pivot].sortMZ();
+
+  }
+
+  cout << "NUMSCANS: " << numScans << endl;
+
+  //Average points and apply cutoff
+  sp.clear();
+  for(i=0;i<vs[pivot].size();i++) {
+    vs[pivot].at(i).intensity/=numScans;
+    if(vs[pivot].at(i).intensity>=cutoff) sp.add(vs[pivot].at(i));
+  }
+
+  sp.setScanNumber(vs[pivot].getScanNumber());
+  sp.setScanNumber(vs[pivot].getScanNumber(true),true);
+  sp.setRTime(vs[pivot].getRTime());
+
+  return true;
+}
+
+bool CNoiseReduction::ScanAverage(Spectrum& sp, deque<Spectrum>& vs, int pivot, float cutoff){
+ 
+  int i;
+  int j;
+  int k;
+  int ts;
+  int widthCount=0;
+  int numScans=1;
+  double dif;
+  double prec;
+  double dt;
+  double c=CParam(vs[pivot],1);
+
+  bool bLeft=true;
+  int posLeft=pivot-1;
+  int posRight=pivot+1;
+
+  while(numScans<vs.size()){
+
+    //Alternate looking left and right
+    if(bLeft){
+      bLeft=false;
+      if(posLeft<0) continue;
+      ts=posLeft;
+      posLeft--;
+    } else {
+      bLeft=true;
+      if(posRight>=vs.size()) continue;
+      ts=posRight;
+      posRight++;
+    }
+
+    numScans++;
+
+    //Match peaks between pivot scan and temp scan
+    k=0;
+    for(i=0;i<vs[pivot].size();i++){
+      dif=100000.0;
+      prec = c * vs[pivot].at(i).mz * vs[pivot].at(i).mz / 2;
+
+      for(j=k;j<vs[ts].size();j++){
+        dt=fabs(vs[pivot].at(i).mz-vs[ts].at(j).mz);
+        if(dt<=dif) {
+          if(dt<prec) {
+            vs[pivot].at(i).intensity+=vs[ts].at(j).intensity;
+            vs[ts].at(j).mz=-1.0;
+            k=j+1;
+            break;
+          }
+          dif=dt;
+        } else {
+          k=j-1;
+          break;
+        }
+      }
+    }
+
+    //Add unmatched peaks from temp scan
+    for(i=0;i<vs[ts].size();i++){
+      if(vs[ts].at(i).mz>-1.0) vs[pivot].add(vs[ts].at(i));
+    }
+
+    //Sort pivot scan peaks for fast traversal against next temp scan
+    vs[pivot].sortMZ();
+
+  }
+
+  //Average points and apply cutoff
+  sp.clear();
+  for(i=0;i<vs[pivot].size();i++) {
+    vs[pivot].at(i).intensity/=numScans;
+    if(vs[pivot].at(i).intensity>=cutoff) sp.add(vs[pivot].at(i));
+  }
+
+  sp.setScanNumber(vs[pivot].getScanNumber());
+  sp.setScanNumber(vs[pivot].getScanNumber(true),true);
+  sp.setRTime(vs[pivot].getRTime());
+
+  return true;
+}
+*/
+
+/*
+bool CNoiseReduction::ScanAverageBuffered(Spectrum& sp, char* file, int width, float cutoff, int scanNum){
+  
+  Spectrum ts;
+  Spectrum ps;
+  //MSReader r;
+ 
+  int i;
+  int j;
+  int k;
+  int widthCount=0;
+  int numScans=1;
+  double dif;
+  double prec;
+  double dt;
+  double c;
+
+  bool bLeft=true;
+  int posLeft=ps.getScanNumber()-1;
+  int posRight=ps.getScanNumber()+1;
+  int index;
+  char cFilter1[256];
+  char cFilter2[256];
+
+  sp.clear();
+
+  //if file is not null, create new buffer
+  if(file!=NULL){
+    strcpy(lastFile,file);
+    bs.clear();
+    if(scanNum>0) r->readFile(file,ts,scanNum);
+    else r->readFile(file,ts);
+    if(ts.getScanNumber()==0) return false;
+    bs.push_back(ts);
+    ps=bs[0];
+    c=CParam(ps,3);
+    posA=0;
+  } else {
+    posA++;
+    //cout << "ER: " << posA << " " << bs.size() << endl;
+    if(posA>=bs.size()) return false; //end of buffer, no more data
+    ps=bs[posA];
+    c=CParam(ps,3);
+  }
+
+  //set our pivot spectrum
+  //ps=bs[posA];
+  ps.getRawFilter(cFilter1,256);
+  //cout << "Averaging: " << ps.getScanNumber() << endl;
+
+  posLeft=posA;
+  posRight=posA;
+  while(widthCount<(width*2)){
+
+    index=-1;
+
+    //Alternate looking left and right
+    if(bLeft){
+      bLeft=false;
+      widthCount++;
+      
+      while(true){
+        posLeft--;
+        if(posLeft<0) { //buffer is too short on left, add spectra
+          i=bs[0].getScanNumber()-1;
+          if(i==0) break;
+          r->readFile(lastFile,ts,i);
+          if(ts.getScanNumber()==0) continue;
+          bs.push_front(ts);
+          posLeft=0;
+          posA++;
+          posRight++;
+          ts.getRawFilter(cFilter2,256);
+          if(strcmp(cFilter1,cFilter2)==0) {
+            index=posLeft;
+            break;
+          }
+        } else {
+          bs[posLeft].getRawFilter(cFilter2,256);
+          if(strcmp(cFilter1,cFilter2)==0) {
+            index=posLeft;
+            break;
+          }
+        }
+      }
+
+    } else {
+      bLeft=true;
+      widthCount++;
+
+      while(true){
+        posRight++;
+        //cout << "PR: " << posRight << " " << bs.size() << endl;
+        if(posRight>=bs.size()) { //buffer is too short on right, add spectra
+          r->readFile(lastFile,ts,bs[bs.size()-1].getScanNumber());
+          //cout << ts.getScanNumber() << endl;
+          r->readFile(NULL,ts);
+          //cout << ts.getScanNumber() << endl;
+          //cout << "Full on right: next scan is " << ts.getScanNumber() << " after " << bs[bs.size()-1].getScanNumber() << endl;
+          if(ts.getScanNumber()==0) {
+            posRight--;
+            break;
+          }
+          bs.push_back(ts);
+          ts.getRawFilter(cFilter2,256);
+          if(strcmp(cFilter1,cFilter2)==0) {
+            index=posRight;
+            break;
+          }
+        } else {
+          bs[posRight].getRawFilter(cFilter2,256);
+          if(strcmp(cFilter1,cFilter2)==0) {
+            index=posRight;
+            break;
+          }
+        }
+      }
+    }
+
+    if(index==-1) {
+      //cout << "No match " << widthCount << endl;
+      continue;
+    }
+    ts=bs[index];
+    //cout << "  with: " << ts.getScanNumber() << "   " << numScans+1 << endl;
+
+    numScans++;
+
+    //Match peaks between pivot scan and temp scan
+    k=0;
+    for(i=0;i<ps.size();i++){
+      dif=100000.0;
+      prec = c * ps.at(i).mz * ps.at(i).mz / 2;
+
+      for(j=k;j<ts.size();j++){
+        dt=fabs(ps.at(i).mz-ts.at(j).mz);
+        if(dt<=dif) {
+          if(dt<prec) {
+            ps.at(i).intensity+=ts.at(j).intensity;
+            ts.at(j).mz=-1.0;
+            k=j+1;
+            break;
+          }
+          dif=dt;
+        } else {
+          k=j-1;
+          break;
+        }
+      }
+    }
+
+    //Add unmatched peaks from temp scan
+    for(i=0;i<ts.size();i++){
+      if(ts.at(i).mz>-1.0) ps.add(ts.at(i));
+    }
+
+    //Sort pivot scan peaks for fast traversal against next temp scan
+    ps.sortMZ();
+
+  }
+
+  //Average points and apply cutoff
+  sp.clear();
+  for(i=0;i<ps.size();i++) {
+    ps.at(i).intensity/=numScans;
+    if(ps.at(i).intensity>=cutoff) sp.add(ps.at(i));
+  }
+
+  sp.setScanNumber(ps.getScanNumber());
+  sp.setScanNumber(ps.getScanNumber(true),true);
+  sp.setRTime(ps.getRTime());
+  sp.setRawFilter(cFilter1);
+
+  //clear unused buffer
+  if(posLeft>0){
+    while(posLeft>0){
+      bs.pop_front();
+      posLeft--;
+      posA--;
+    }
+  }
+
+  //cout << "Done averaging" << endl;
+
+  return true;
+}
+*/
+
+bool CNoiseReduction::ScanAveragePlusDeNoise(Spectrum& sp, char* file, int width, float cutoff, int scanNum){
+  
+  Spectrum ts;
+  Spectrum ps;
+  //MSReader r;
+
+  vector<int> v;
+  vector<int> vPos;
+ 
+  int i;
+  int j;
+  int k;
+  int widthCount=0;
+  int numScans=1;
+  int match;
+  double dif;
+  double prec;
+  double dt;
+  double c;
+
+  bool bLeft=true;
+  int posLeft=ps.getScanNumber()-1;
+  int posRight=ps.getScanNumber()+1;
+  int index;
+  char cFilter1[256];
+  //char cFilter2[256];
+
+  sp.clear();
+
+  //if file is not null, create new buffer
+  if(file!=NULL){
+    strcpy(lastFile,file);
+    bs.clear();
+    if(scanNum>0) r->readFile(file,ts,scanNum);
+    else r->readFile(file,ts);
+    if(ts.getScanNumber()==0) return false;
+    bs.push_back(ts);
+    ps=bs[0];
+    c=CParam(ps,3);
+    posA=0;
+  } else {
+    posA++;
+    //cout << "ER: " << posA << " " << bs.size() << endl;
+    if(posA>=(int)bs.size()) return false; //end of buffer, no more data
+    ps=bs[posA];
+    c=CParam(ps,3);
+  }
+
+  //set our pivot spectrum
+  //ps=bs[posA];
+  ps.getRawFilter(cFilter1,256);
+  //cout << "Averaging: " << ps.getScanNumber() << endl;
+
+  posLeft=posA;
+  posRight=posA;
+  while(widthCount<(width*2)){
+
+    index=-1;
+
+    //Alternate looking left and right
+    if(bLeft){
+      bLeft=false;
+      widthCount++;
+      
+      while(true){
+        posLeft--;
+        //cout << posLeft << endl;
+        if(posLeft<0) { //buffer is too short on left, add spectra
+          i=bs[0].getScanNumber();
+          while(true){
+            i--;
+            //cout << "I: " << i << endl;
+            if(i==0) break;
+            r->readFile(lastFile,ts,i);
+            if(ts.getScanNumber()==0) continue;
+            else break;
+          }
+          if(i==0) break;
+          bs.push_front(ts);
+          for(i=0;i<(int)v.size();i++)v[i]++;
+          posA++;
+          posRight++;
+          posLeft=0;
+          //ts.getRawFilter(cFilter2,256);
+          if(ts.getMsLevel()==cs.msLevel) {
+            index=posLeft;
+            break;
+          }
+        } else {
+          //bs[posLeft].getRawFilter(cFilter2,256);
+          if(bs[posLeft].getMsLevel()==cs.msLevel) {
+            index=posLeft;
+            break;
+          }
+        }
+      }
+
+    } else {
+      bLeft=true;
+      widthCount++;
+
+      while(true){
+        posRight++;
+        if(posRight>=(int)bs.size()) { //buffer is too short on right, add spectra
+          r->readFile(lastFile,ts,bs[bs.size()-1].getScanNumber());
+          r->readFile(NULL,ts);
+          if(ts.getScanNumber()==0) {
+            posRight--;
+            break;
+          }
+          bs.push_back(ts);
+          //ts.getRawFilter(cFilter2,256);
+          if(ts.getMsLevel()==cs.msLevel) {
+            index=posRight;
+            break;
+          }
+        } else {
+          //bs[posRight].getRawFilter(cFilter2,256);
+          if(bs[posRight].getMsLevel()==cs.msLevel) {
+            index=posRight;
+            break;
+          }
+        }
+      }
+    }
+
+    if(index==-1)  continue;
+   
+    //ts=bs[index];
+    v.push_back(index);
+
+    numScans++;
+  }
+
+  //cout << "Still Averaging: " << ps.getScanNumber() << endl;
+  //cout << " with: ";
+  //for(i=0;i<v.size();i++) cout << bs[v[i]].getScanNumber() << " ";
+  //cout << endl;
+
+  //cout << numScans << " " << v.size() << endl;
+
+  //Match peaks between pivot scan and neighbors
+  for(i=0;i<(int)v.size();i++) vPos.push_back(0);
+  for(i=0;i<(int)ps.size();i++){ //iterate all points
+    prec = c * ps.at(i).mz * ps.at(i).mz / 2;
+    match=1;
+
+    for(k=0;k<(int)v.size();k++){ //iterate all neighbors
+      dif=100000.0;
+      //cout << "Checking " << bs[v[k]].getScanNumber() << " pos " << vPos[k] << endl;
+
+      for(j=vPos[k];j<bs[v[k]].size();j++){ //check if point is a match
+        dt=fabs(ps.at(i).mz-bs[v[k]].at(j).mz);
+        if(dt<=dif) {
+          if(dt<prec) {
+            ps.at(i).intensity+=bs[v[k]].at(j).intensity;
+            vPos[k]=j+1;
+            match++;
+            break;
+          }
+          dif=dt;
+        } else {
+          vPos[k]=j-1;
+          break;
+        }
+      }
+
+    }
+
+    //if data point was not visible across enough scans, set it to 0
+		if(match<cs.boxcarFilter && match<(int)v.size()) ps.at(i).intensity=0.0;
+
+  }
+
+
+  //Average points and apply cutoff
+  for(i=0;i<ps.size();i++) {
+    ps.at(i).intensity/=numScans;
+    sp.add(ps.at(i));
+    //if(ps.at(i).intensity>=cutoff) sp.add(ps.at(i));
+  }
+
+  sp.setScanNumber(ps.getScanNumber());
+  sp.setScanNumber(ps.getScanNumber(true),true);
+  sp.setRTime(ps.getRTime());
+  sp.setRawFilter(cFilter1);
+
+  //clear unused buffer
+  if(posLeft>0){
+    while(posLeft>0){
+      bs.pop_front();
+      posLeft--;
+      posA--;
+    }
+  }
+
+  //cout << "Done averaging" << endl;
+
+  return true;
+}
+
+bool CNoiseReduction::DeNoiseB(Spectrum& sp){
+
+  Spectrum tmpSpec;  
+  vector<int> v;
+
+  sp.clear();
+
+  if(pos==0){
+    if((cs.scan.iLower>0)) {
+      if(!ScanAveragePlusDeNoise(sp,&cs.inFile[0],(int)(cs.boxcar/2),0.1f,cs.scan.iLower)) return false;
+    } else {
+      ScanAveragePlusDeNoise(sp,&cs.inFile[0],(int)(cs.boxcar/2),0.1f);
+    }
+    pos=1;
+  } else {
+    ScanAveragePlusDeNoise(sp,NULL,(int)(cs.boxcar/2),0.1f);
+  }
+
+  if(sp.getScanNumber()==0) return false;
+  FirstDerivativePeaks(sp,1);
+  return true;
+
+}
+
+bool CNoiseReduction::DeNoiseC(Spectrum& sp){
+
+  Spectrum tmpSpec;  
+  vector<int> v;
+
+  sp.clear();
+
+  if(pos==0){
+    if(cs.scan.iLower>0) {
+      if(!NewScanAveragePlusDeNoise(sp,cs.inFile,(int)(cs.boxcar/2),0.1f,cs.scan.iLower)) return false;
+    } else {
+      NewScanAveragePlusDeNoise(sp,cs.inFile,(int)(cs.boxcar/2),0.1f);
+    }
+    pos=1;
+  } else {
+    NewScanAveragePlusDeNoise(sp,NULL,(int)(cs.boxcar/2),0.1f);
+  }
+
+  if(sp.getScanNumber()==0) return false;
+  FirstDerivativePeaks(sp,1);
+  return true;
+
+}
+
+bool CNoiseReduction::DeNoiseD(Spectrum& sp){
+
+  Spectrum tmpSpec;  
+  vector<int> v;
+
+  sp.clear();
+
+  if(pos==0){
+    if(cs.scan.iLower>0) {
+      if(!NewScanAverage(sp,cs.inFile,(int)(cs.boxcar/2),0.1f,cs.scan.iLower)) return false;
+    } else {
+      NewScanAverage(sp,cs.inFile,(int)(cs.boxcar/2),0.1f);
+    }
+    pos=1;
+  } else {
+    NewScanAverage(sp,NULL,(int)(cs.boxcar/2),0.1f);
+  }
+
+  if(sp.getScanNumber()==0) return false;
+  FirstDerivativePeaks(sp,1);
+  return true;
+
+}
+
+double CNoiseReduction::CParam(Spectrum& sp, int tot){
+  int i;
+  int j=0;
+  double d=0.0;
+
+  if(sp.size()<10) i=1;
+  else i=sp.size()/2;
+  
+  while(i<sp.size()-1){
+    if(sp.at(i).intensity > sp.at(i-1).intensity && sp.at(i).intensity > sp.at(i+1).intensity) {
+      d+= ((1/sp.at(i).mz) - (1/sp.at(i+1).mz));
+      j++;
+      i++;
+      if(j==tot) break;
+    } else {
+      i++;
+    }
+  }
+
+  if(j==0) return 0.0;
+  else return d/j;
+}
+
+bool CNoiseReduction::NewScanAveragePlusDeNoise(Spectrum& sp, char* file, int width, float cutoff, int scanNum){
+  
+  Spectrum ts;
+
+  vector<int> vPos;
+ 
+  int i;
+  int j;
+  int k;
+  int m;
+  int widthCount=0;
+  int numScans=1;
+  int match;
+  double dif;
+  double prec;
+  double dt;
+  double c;
+
+  bool bLeft=true;
+  int posLeft;
+  int posRight;
+  int index;
+  char cFilter1[256];
+  char cFilter2[256];
+
+  sp.clear();
+
+  Spectrum* specs;
+  specs = new Spectrum[width*2+1];
+
+  //if file is not null, create new buffer
+  if(file!=NULL){
+    strcpy(lastFile,file);
+    bs.clear();
+    if(scanNum>0) r->readFile(file,ts,scanNum);
+    else r->readFile(file,ts);
+    if(ts.getScanNumber()==0) {
+      delete [] specs;
+      return false;
+    }
+    bs.push_back(ts);
+    specs[0]=bs[0];
+    c=CParam(specs[0],3);
+    posA=0;
+  } else {
+    posA++;
+    if(posA>=(int)bs.size()) { //end of buffer, no more data
+      delete [] specs;
+      return false; 
+    }
+    specs[0]=bs[posA];
+    c=CParam(specs[0],3);
+  }
+
+  //set our pivot spectrum
+  specs[0].getRawFilter(cFilter1,256);
+
+  posLeft=posA;
+  posRight=posA;
+  while(widthCount<(width*2)){
+
+    index=-1;
+
+    //Alternate looking left and right
+    if(bLeft){
+      bLeft=false;
+      widthCount++;
+      
+      while(true){
+        posLeft--;
+        if(posLeft<0) { //buffer is too short on left, add spectra
+          i=bs[0].getScanNumber();
+          while(true){
+            i--;
+            if(i==0) break;
+            r->readFile(lastFile,ts,i);
+            if(ts.getScanNumber()==0) continue;
+            else break;
+          }
+          if(i==0) break;
+          bs.push_front(ts);
+          posA++;
+          posRight++;
+          posLeft=0;
+          ts.getRawFilter(cFilter2,256);
+          if(strcmp(cFilter1,cFilter2)==0) {
+            index=posLeft;
+            break;
+          }
+        } else {
+          bs[posLeft].getRawFilter(cFilter2,256);
+          if(strcmp(cFilter1,cFilter2)==0) {
+            index=posLeft;
+            break;
+          }
+        }
+      }
+
+    } else {
+      bLeft=true;
+      widthCount++;
+
+      while(true){
+        posRight++;
+        if(posRight>=(int)bs.size()) { //buffer is too short on right, add spectra
+          r->readFile(lastFile,ts,bs[bs.size()-1].getScanNumber());
+          r->readFile(NULL,ts);
+          if(ts.getScanNumber()==0) {
+            posRight--;
+            break;
+          }
+          bs.push_back(ts);
+          ts.getRawFilter(cFilter2,256);
+          if(strcmp(cFilter1,cFilter2)==0) {
+            index=posRight;
+            break;
+          }
+        } else {
+          bs[posRight].getRawFilter(cFilter2,256);
+          if(strcmp(cFilter1,cFilter2)==0) {
+            index=posRight;
+            break;
+          }
+        }
+      }
+    }
+
+    if(index==-1)  continue;
+   
+    //ts=bs[index];
+    specs[numScans++]=bs[index];
+
+    //cout << "NumScans: " << numScans << endl;
+
+  }
+
+  //Match peaks between pivot scan (0) and neighbors (the rest)
+  //for(m=0;m<cs.ppMatch && m<numScans;m++){
+  for(m=0;m<1;m++){
+
+    //cout << "m " << m << " = " << specs[m].getScanNumber() << endl;
+    
+    vPos.clear();
+    for(i=0;i<numScans;i++) vPos.push_back(0);
+    //cout << "Checking " << m << " of " << numScans << " points remaining: " << specs[m].size() << endl;
+
+    for(i=0;i<specs[m].size();i++){ //iterate all points
+      if(specs[m].at(i).intensity<0.1) continue;
+      prec = c * specs[m].at(i).mz * specs[m].at(i).mz / 2;
+      match=1;
+
+      for(k=m+1;k<numScans;k++){ //iterate all neighbors
+        dif=100000.0;
+
+        for(j=vPos[k];j<specs[k].size();j++){ //check if point is a match
+          //cout << "Checking " << j << " of " << specs[k].size() << endl;
+          if(specs[k].at(j).intensity<0.1) continue; //skip meaningless datapoints to speed along
+          dt=fabs(specs[m].at(i).mz-specs[k].at(j).mz);
+          //dt=specs[m].at(i).mz-specs[k].at(j).mz;
+          //if(dt<0.0)dt=-dt;
+          if(dt<=dif) {
+            if(dt<prec) {
+              specs[m].at(i).intensity+=specs[k].at(j).intensity;
+              vPos[k]=j+1;
+              specs[k].at(j).intensity=-1.0;
+              match++;
+              break;
+            }
+            dif=dt;
+          } else {
+            vPos[k]=j-1;
+            break;
+          }
+        }
+
+      }//for k
+
+      //if data point was not visible across enough scans, set it to 0
+			if(match<cs.boxcarFilter && match<numScans) {
+        //ignore point
+        //cout << "BAH! " << specs[m].at(i).mz << " has " << match << " matches." << endl;
+      } else {
+        //add to temp spectrum
+        //cout << specs[m].at(i).mz << " has " << match << " matches." << endl;
+        //sp.add(specs[m].at(i).mz,specs[m].at(i).intensity/numScans);
+        sp.add(specs[m].at(i).mz,specs[m].at(i).intensity/match);
+      }
+
+    } //next i
+
+  } //next m
+
+  //sort
+  //cout << "Done " << sp.size() << endl;
+  if(sp.size()>0) sp.sortMZ();
+  sp.setScanNumber(specs[0].getScanNumber());
+  sp.setScanNumber(specs[0].getScanNumber(true),true);
+  sp.setRTime(specs[0].getRTime());
+  sp.setRawFilter(cFilter1);
+
+  //clear unused buffer
+  if(posLeft>0){
+    while(posLeft>0){
+      bs.pop_front();
+      posLeft--;
+      posA--;
+    }
+  }
+
+  delete [] specs;
+
+  return true;
+}
+
diff --git a/src/app/hardklor/CNoiseReduction.h b/src/app/hardklor/CNoiseReduction.h
new file mode 100644
index 0000000..eaac0c9
--- /dev/null
+++ b/src/app/hardklor/CNoiseReduction.h
@@ -0,0 +1,73 @@
+#ifndef _CNOISEREDUCTION_H
+#define _CNOISEREDUCTION_H
+
+#include "MSReader.h"
+#include "Spectrum.h"
+#include "CHardklorSetting.h"
+#include <cmath>
+#include <iostream>
+#include <deque>
+
+#define GC 5.5451774444795623
+
+class CNoiseReduction {
+
+public:
+
+  //Constructors and Destructors
+  CNoiseReduction();
+  CNoiseReduction(MSReader* msr, CHardklorSetting& hs);
+  ~CNoiseReduction();
+
+  //Functions
+  double CParam(Spectrum& sp, int tot=1);
+  double calcFWHM(double mz);
+  void FirstDerivativePeaks(Spectrum& sp, int winSize);
+  bool DeNoise(Spectrum& sp);
+  //bool DeNoise(Spectrum& sp, vector<Spectrum>& vs, int pivot, bool findPeaks=false);
+  //bool DeNoise(Spectrum& sp, deque<Spectrum>& vs, int pivot, bool findPeaks=false);
+  bool DeNoiseB(Spectrum& sp);
+  bool DeNoiseC(Spectrum& sp);
+  bool DeNoiseD(Spectrum& sp);
+  int NearestPeak(Spectrum& sp, double mz);
+  bool ScanAverage(Spectrum& sp, char* file, int width, float cutoff);
+  bool NewScanAverage(Spectrum& sp, char* file, int width, float cutoff, int scanNum=0);
+  //bool ScanAverage(Spectrum& sp, vector<Spectrum>& vs, int pivot, float cutoff, double cp=0.0);
+  //bool ScanAverage(Spectrum& sp, deque<Spectrum>& vs, int pivot, float cutoff);
+  //bool ScanAverageBuffered(Spectrum& sp, char* file, int width, float cutoff, int scanNum=0);
+  bool ScanAveragePlusDeNoise(Spectrum& sp, char* file, int width, float cutoff, int scanNum=0);
+  bool NewScanAveragePlusDeNoise(Spectrum& sp, char* file, int width, float cutoff, int scanNum=0);
+
+  int pos;
+
+private:
+  //Functions
+  
+  
+  //Data Members
+  //int pos;
+  int posA;
+  char lastFile[256];
+  CHardklorSetting cs;
+  MSReader* r;
+  deque<Spectrum> s;
+  deque<Spectrum> bs;
+
+	/*
+	  __int64 startTime;
+    __int64 stopTime;
+    __int64 loadTime;
+    __int64 analysisTime;
+    __int64 timerFrequency;
+    __int64 tmpTime1;
+    __int64 tmpTime2;
+    #define getExactTime(a) QueryPerformanceCounter((LARGE_INTEGER*)&a)
+    #define getTimerFrequency(a) QueryPerformanceFrequency((LARGE_INTEGER*)&a)
+    #define toMicroSec(a) (a)
+    #define timeToSec(a,b) (a/b)
+		*/
+
+};
+
+#endif
+
diff --git a/src/app/hardklor/CPeriodicTable.cpp b/src/app/hardklor/CPeriodicTable.cpp
new file mode 100644
index 0000000..87cb169
--- /dev/null
+++ b/src/app/hardklor/CPeriodicTable.cpp
@@ -0,0 +1,94 @@
+#include "CPeriodicTable.h"
+
+using namespace std;
+
+/*
+CPeriodicTable::CPeriodicTable(){
+  table = new vector<element>;
+  loadTable("Hardklor.dat");
+}
+*/
+
+CPeriodicTable::CPeriodicTable(char* c){
+  loadTable(c);
+}
+
+CPeriodicTable::~CPeriodicTable(){
+}
+
+element& CPeriodicTable::at(int i){
+  return table.at(i);
+}
+
+void CPeriodicTable::defaultValues(){
+  string s[109]={"X","H","He","Li","Be","B","C","N","O","F","Ne","Na","Mg","Al","Si","P","S","Cl","Ar","K",
+    "Ca","Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu","Zn","Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr",
+    "Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn","Sb","Te","I","Xe","Cs","Ba","La","Ce","Pr","Nd","Pm",
+    "Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb","Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg","Tl","Pb",
+    "Bi","Po","At","Rn","Fr","Ra","Ac","Th","Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm","Md","No","Lr",
+    "Hx","Cx","Nx","Ox","Sx"};
+  double m[109]={0.000000000000,1.007824600000,3.016030000000,6.015121000000,9.012182000000,10.012937000000,
+    12.000000000000,14.003073200000,15.994914100000,18.998403200000,19.992435000000,22.989767000000,
+    23.985042000000,26.981539000000,27.976927000000,30.973762000000,31.972070000000,34.968853100000,
+    35.967545000000,38.963707000000,39.962591000000,44.955910000000,45.952629000000,49.947161000000,
+    49.946046000000,54.938047000000,53.939612000000,58.933198000000,57.935346000000,62.939598000000,
+    63.929145000000,68.925580000000,69.924250000000,74.921594000000,73.922475000000,78.918336000000,
+    77.914000000000,84.911794000000,83.913430000000,88.905849000000,89.904703000000,92.906377000000,
+    91.906808000000,98.000000000000,95.907599000000,102.905500000000,101.905634000000,106.905092000000,
+    105.906461000000,112.904061000000,111.904826000000,120.903821000000,119.904048000000,126.904473000000,
+    123.905894000000,132.905429000000,129.906282000000,137.907110000000,135.907140000000,140.907647000000,
+    141.907719000000,145.000000000000,143.911998000000,150.919847000000,151.919786000000,158.925342000000,
+    155.925277000000,164.930319000000,161.928775000000,168.934212000000,167.933894000000,174.940770000000,
+    173.940044000000,179.947462000000,179.946701000000,184.952951000000,183.952488000000,190.960584000000,
+    189.959917000000,196.966543000000,195.965807000000,202.972320000000,203.973020000000,208.980374000000,
+    209.000000000000,210.000000000000,222.000000000000,223.000000000000,226.025000000000,227.028000000000,
+    232.038054000000,231.035900000000,234.040946000000,237.048000000000,244.000000000000,243.000000000000,
+    247.000000000000,247.000000000000,251.000000000000,252.000000000000,257.000000000000,258.000000000000,
+    259.000000000000,260.000000000000,1.007824600000,12.000000000000,14.003073200000,15.994914100000,
+    31.972070000000};
+
+  element e;
+  unsigned int i;
+  for(i=0;i<109;i++){
+    e.atomicNum=i;
+    strcpy(e.symbol,&s[i][0]);
+    e.mass=m[i];
+    table.push_back(e);
+  }
+
+}
+
+void CPeriodicTable::loadTable(char* c){
+  FILE* fptr;
+  element e;
+
+  if(c==NULL || strlen(c)==0) {
+    defaultValues();
+    return;
+  }
+  
+  fptr = fopen(c,"rt");
+  if(fptr==NULL) {
+    cout << "Cannot open periodic table! " << c << "." << endl;
+    return;
+  }
+  
+  /* 
+     This loop reads in table entries, line by line.
+     It has basic error detection (missing data), but additional
+     checks should be made to confirm the content of data
+  */
+  while(!feof(fptr)){
+
+		fscanf(fptr,"%d\t%s\t%lf\n",&e.atomicNum,e.symbol,&e.mass);   
+    table.push_back(e);
+    
+  }
+
+  fclose(fptr);
+  
+}
+
+int CPeriodicTable::size(){
+  return table.size();
+}
diff --git a/src/app/hardklor/CPeriodicTable.h b/src/app/hardklor/CPeriodicTable.h
new file mode 100644
index 0000000..989b54a
--- /dev/null
+++ b/src/app/hardklor/CPeriodicTable.h
@@ -0,0 +1,40 @@
+#ifndef _CPERIODICTABLE_H
+#define _CPERIODICTABLE_H
+
+#include <cstdlib>
+#include <cstdio>
+#include <cstring>
+#include <iostream>
+#include <vector>
+
+using namespace std;
+
+typedef struct {
+  int atomicNum;
+  char symbol[3];
+  double mass;
+} element;
+
+class CPeriodicTable {
+ public:
+   //Constructors & Destructors
+   //CPeriodicTable();
+   CPeriodicTable(char* c="Hardklor.dat");
+   ~CPeriodicTable();
+
+   //Methods:
+   element& at(int);
+   int size();
+
+ protected:
+ private:
+   //Methods:
+   void defaultValues();
+   void loadTable(char*);
+
+   //Data Members:
+   vector<element> table;
+
+};
+
+#endif
diff --git a/src/app/hardklor/CSettings.cpp b/src/app/hardklor/CSettings.cpp
new file mode 100644
index 0000000..2878576
--- /dev/null
+++ b/src/app/hardklor/CSettings.cpp
@@ -0,0 +1,169 @@
+#include "CSettings.h"
+#include <iostream>
+#include <cstdlib>
+#include <cstdio>
+#include <fstream>
+using namespace std;
+
+CSettings::CSettings(){
+  chlor=0;
+  selen=0;
+  maxPep=5;
+  maxCharge=0;
+  maxDepth=100;
+  smooth=0;
+  signal=0;
+  scan=0;
+  S2N=0;
+  windowLower=0;
+  windowUpper=0;
+  enrichAtom[0]='\0';
+  enrich=0;
+  enrichTimes=0;
+  QAR = false;
+  ROC = false;
+  readFile("settings.conf");
+};
+
+CSettings::CSettings(char *c){
+  chlor=0;
+  selen=0;
+  maxPep=5;
+  maxCharge=0;
+  maxDepth=100;
+  smooth=0;
+  signal=0;
+  scan=0;
+  S2N=0;
+  windowLower=0;
+  windowUpper=0;
+  enrichAtom[0]='\0';
+  enrich=0;
+  enrichTimes=0;
+  QAR = false;
+  ROC = false;
+  readFile(c);
+};
+
+void CSettings::readFile(char* c) {
+  fstream fptr;
+  FileName* f;
+  char tstr[256];
+  char *tok;
+  int i;
+  varType v;
+
+  fptr.open(c,ios::in);
+  if(!fptr.good()){
+    cout << "Cannot read settings file: " << c << endl;
+    fptr.close();
+    return;
+  };
+
+  while(!fptr.eof()){
+    fptr.getline(tstr,100);
+    if(tstr[0]=='#' || tstr[0]==0) continue;
+
+    tok = strtok(tstr," \n\t\r");
+    if(tok==0) continue;
+    if(tok[0]=='#') continue;
+
+    if(strcmp(tok,"[CHLORINE]")==0) {
+      tok = strtok(NULL, " \n\t\r");
+      if(tok==NULL) continue;
+      chlor = atoi(tok);
+      for(i=0;i<chlor;i++){
+	v.code=1;
+	v.value=i+1;
+	variants.push_back(v);
+      };
+    } else if(strcmp(tok,"[SELENIUM]")==0) {
+      tok = strtok(NULL, " \n\t\r");
+      if(tok==NULL) continue;
+      selen = atoi(tok);
+      for(i=0;i<selen;i++){
+	v.code=2;
+	v.value=i+1;
+	variants.push_back(v);
+      };
+    } else if(strcmp(tok,"[ENRICH]")==0) {
+      tok = strtok(NULL, " \n\t\r");
+      if(tok==NULL) continue;
+      strcpy(enrichAtom,tok);
+      tok = strtok(NULL, " \n\t\r");
+      if(tok==NULL) continue;
+      enrich = atof(tok);
+      if(strcmp(enrichAtom,"N")==0){
+	v.code=3;
+	v.value=enrich;
+	variants.push_back(v);
+      };
+      enrichTimes=1;
+    } else if(strcmp(tok,"[SMOOTH]")==0) {
+      tok = strtok(NULL, " \n\t\r");
+      if(tok==NULL) continue;
+      smooth = atoi(tok);
+    } else if(strcmp(tok,"[CORR]")==0) {
+      tok = strtok(NULL, " \n\t\r");
+      if(tok==NULL) continue;
+      corrThresh = atof(tok);
+    } else if(strcmp(tok,"[S2N]")==0) {
+      tok = strtok(NULL, " \n\t\r");
+      if(tok==NULL) continue;
+      S2N = atof(tok);
+    } else if(strcmp(tok,"[WINDOW]")==0) {
+      tok = strtok(NULL, " \n\t\r");
+      if(tok==NULL) continue;
+      windowLower = atof(tok);
+      tok = strtok(NULL, " \n\t\r");
+      if(tok==NULL) continue;
+      windowUpper = atof(tok);
+    } else if(strcmp(tok,"[MAXPEP]")==0) {
+      tok = strtok(NULL, " \n\t\r");
+      if(tok==NULL) continue;
+      maxPep = atoi(tok);
+    } else if(strcmp(tok,"[MAXCHARGE]")==0) {
+      tok = strtok(NULL, " \n\t\r");
+      if(tok==NULL) continue;
+      maxCharge = atoi(tok);
+    } else if(strcmp(tok,"[MAXDEPTH]")==0) {
+      tok = strtok(NULL, " \n\t\r");
+      if(tok==NULL) continue;
+      maxDepth = atoi(tok);
+    } else if(strcmp(tok,"[QAR]")==0) {
+      tok = strtok(NULL, " \n\t\r");
+      if(tok==NULL) continue;
+      if(atoi(tok)!=0) QAR = true;
+    } else if(strcmp(tok,"[ROC]")==0) {
+      tok = strtok(NULL, " \n\t\r");
+      if(tok==NULL) continue;
+      if(atoi(tok)!=0) ROC = true;
+    } else if(strcmp(tok,"[SCAN]")==0) {
+      tok = strtok(NULL, " \n\t\r");
+      if(tok==NULL) continue;
+      scan = atoi(tok);
+    } else if(strcmp(tok,"[FILE]")==0){
+      f = new FileName;
+      tok = strtok(NULL,"\t\n\r");
+      if(tok==NULL) continue;
+      if(strcmp(tok,"Zoom")==0) f->st=Zoom;
+      else if(strcmp(tok,"UltraZoom")==0) f->st=UltraZoom;
+      else if(strcmp(tok,"IonSpec")==0) f->st=IonSpec2;
+      else if(strcmp(tok,"Other")==0) f->st=Other;
+      tok = strtok(NULL,"\t\n\r");
+      if(tok==NULL) continue;
+      else strcpy(f->infile,tok);
+      tok = strtok(NULL,"\t\n\r");
+      if(tok==NULL) continue;
+      else strcpy(f->outfile,tok);
+      files.push_back(f);
+    } else if(strcmp(tok,"[SIGNAL]")==0){
+      tok = strtok(NULL," \t\n\r");
+      if(tok==NULL) continue;
+      signal = atof(tok);
+    };
+  };
+
+};
+
+  
diff --git a/src/app/hardklor/CSettings.h b/src/app/hardklor/CSettings.h
new file mode 100644
index 0000000..f89c0a0
--- /dev/null
+++ b/src/app/hardklor/CSettings.h
@@ -0,0 +1,56 @@
+#ifndef _CSETTINGS_H
+#define _CSETTINGS_H
+
+#include <vector>
+
+using namespace std;
+
+enum ScanType{
+  Zoom,
+  UltraZoom,
+  IonSpec2,
+  Other
+};
+
+typedef struct {
+  int code;
+  double value;
+} varType;
+
+typedef struct {
+  char infile[256];
+  char outfile[256];
+  ScanType st;
+} FileName;
+
+class CSettings {
+ public:
+  bool QAR;
+  bool ROC;
+  int chlor;
+  int selen;
+  int smooth;
+  int maxPep;
+  int maxCharge;
+  int scan;
+  int maxDepth;
+  double S2N;
+  double signal;
+  double corrThresh;
+  double windowLower;
+  double windowUpper;
+  vector<FileName*> files;
+  vector<varType> variants;
+  CSettings();
+  CSettings(char*);
+  char enrichAtom[3];
+  double enrich;
+  int enrichTimes;
+ protected:
+ private:
+  void readFile(char*);
+};
+
+
+
+#endif
diff --git a/src/app/hardklor/CSpecAnalyze.cpp b/src/app/hardklor/CSpecAnalyze.cpp
new file mode 100644
index 0000000..a5ec257
--- /dev/null
+++ b/src/app/hardklor/CSpecAnalyze.cpp
@@ -0,0 +1,858 @@
+#include "CSpecAnalyze.h"
+#include <iostream>
+#include <algorithm>
+using namespace std;
+
+//Default constructor
+CSpecAnalyze::CSpecAnalyze(){
+  basePeak = 0;
+  manyPeps = false;
+  S2NCutoff = 0;
+	predPeak = new vector<CPeakPrediction>;
+	predPep = new vector<CPeptidePrediction>;
+	charges = new vector<int>;
+	mismatchSize = 0;
+	averagine=NULL;
+	mercury=NULL;
+	spec=NULL;
+}
+
+//Copy constructor
+CSpecAnalyze::CSpecAnalyze(const CSpecAnalyze& c){
+	unsigned int i;
+
+  basePeak = c.basePeak;
+  manyPeps = c.manyPeps;
+  peaks = c.peaks;
+  peptide = c.peptide;
+	userParams = c.userParams;
+	mismatchSize = c.mismatchSize;
+  S2NCutoff = c.S2NCutoff;
+  spec = c.spec;
+	averagine = c.averagine;
+	mercury = c.mercury;
+	spec = c.spec;
+
+	predPeak = new vector<CPeakPrediction>;
+	for(i=0;i<c.predPeak->size();i++) predPeak->push_back(c.predPeak->at(i));
+
+	predPep = new vector<CPeptidePrediction>;
+	for(i=0;i<c.predPep->size();i++) predPep->push_back(c.predPep->at(i));
+
+	charges = new vector<int>;
+	for(i=0;i<c.charges->size();i++) charges->push_back(c.charges->at(i));
+}
+
+//Destructor
+CSpecAnalyze::~CSpecAnalyze(){
+	delete predPeak;
+	delete predPep;
+	delete charges;
+	averagine = NULL;
+	mercury = NULL;
+	spec = NULL;
+}
+
+//Overloaded operator
+CSpecAnalyze& CSpecAnalyze::operator=(const CSpecAnalyze& c){
+	unsigned int i;
+
+  if(this!=&c){
+    basePeak = c.basePeak;
+    manyPeps = c.manyPeps;
+    peaks = c.peaks;
+    peptide = c.peptide;
+    userParams = c.userParams;
+    mismatchSize = c.mismatchSize; 
+    S2NCutoff = c.S2NCutoff;
+    spec = c.spec;
+    averagine = c.averagine;
+    mercury = c.mercury;
+		spec = c.spec;
+		
+    delete predPeak;
+    predPeak = new vector<CPeakPrediction>;
+    for(i=0;i<c.predPeak->size();i++) predPeak->push_back(c.predPeak->at(i));
+    
+    delete predPep;
+    predPep = new vector<CPeptidePrediction>;
+    for(i=0;i<c.predPep->size();i++) predPep->push_back(c.predPep->at(i));
+
+    delete charges;
+    charges = new vector<int>;
+    for(i=0;i<c.charges->size();i++) charges->push_back(c.charges->at(i)); 
+  }
+  return *this;
+}
+
+//Builds arrays of all the modeled peaks that do not match observed peaks.
+//Overlapping mismatched peaks are binned together for simplicity
+void CSpecAnalyze::BuildMismatchArrays(){
+
+  int i,j,k,m;
+  bool match;
+  vector<double> mz;
+  double deltaM;
+  double tmp;
+  Peak_T extraMZ;
+
+  //Create master mismatch set of datapoints. 
+  //Essentially, this creates dynamic bins for all mismatched points
+
+  //Iterate through each predicted peptide
+  for(i=0;i<(int)predPep->size();i++) {
+
+    //get resolution
+    deltaM = calcFWHM(predPep->at(i).GetMZ());
+
+    //Iterate through each variant
+    for(j=0;j<predPep->at(i).VariantListSize();j++) {
+
+      //Iterate through each extra data point
+      for(k=0;k<predPep->at(i).GetVariant(j).SizeExtra();k++) {
+        extraMZ = predPep->at(i).GetVariant(j).GetExtra(k);
+
+        //Check mz of every extra data point against the current list
+        match=false;
+        for(m=0;m<(int)mz.size();m++){
+          if( fabs(mz.at(m) - extraMZ.mz) < deltaM ) {
+            match=true;
+            break;
+          }
+        }
+        if(!match) mz.push_back(extraMZ.mz);
+
+      }
+    }
+  }
+		
+  //The list is built, sort it
+  if(mz.size()>1) {
+    for(i=0;i<(int)mz.size()-1;i++){
+      for(j=i+1;j<(int)mz.size();j++){
+        if(mz.at(j)<mz.at(i)){
+          tmp = mz.at(i);
+          mz.at(i) = mz.at(j);
+          mz.at(j) = tmp;
+        }
+      }
+    }
+  }
+
+  mismatchSize = mz.size();
+
+  //Recheck all peptide specific mismatches against the master list. This will adjust the mz values of the mismatches
+  //to fit the master bins.
+
+  //Iterate through every predicted peptide
+  for(i=0;i<(int)predPep->size();i++) {
+
+    //get resolution
+    deltaM = calcFWHM(predPep->at(i).GetMZ());
+
+    //Iterate through every variant
+    for(j=0;j<predPep->at(i).VariantListSize();j++) {
+
+      //Resize the mismatch list
+      predPep->at(i).GetVariant(j).SetMismatchSize(mismatchSize);
+
+      //Convert extra data points to mismatches
+      for(k=0;k<predPep->at(i).GetVariant(j).SizeExtra();k++) {
+
+        extraMZ = predPep->at(i).GetVariant(j).GetExtra(k);
+
+        //Check mz of every extra data point against the current list
+        match=false;
+        for(m=0;m<mismatchSize;m++){
+          if( fabs(mz.at(m) - extraMZ.mz) < deltaM ) {
+            predPep->at(i).GetVariant(j).AddMismatch(m,extraMZ.mz,extraMZ.intensity);
+            match=true;
+            break;
+          }
+        }
+				
+        if(!match) {
+          //This shouldn't happen. Perhaps error checking should go here.
+          //cout << "Houston, we have a problem" << endl;
+          //cout << extraMZ.mz << " DM:" << deltaM << endl;
+          //for(m=0;m<mismatchSize;m++)  cout << mz.at(m) << endl;
+          //exit(-1);
+        }
+      }
+
+      //Delete extra data points
+      predPep->at(i).GetVariant(j).DeleteExtra();
+
+    }
+  }
+
+}
+
+//Calculates the resolution (FWHM) of a peak
+double CSpecAnalyze::calcFWHM(double mz){
+	double deltaM;
+	switch(userParams.msType){
+	case OrbiTrap:
+		deltaM = mz * sqrt(mz) / (20*userParams.res400);  //sqare root of 400
+		break;
+	case TOF:
+		deltaM = mz / userParams.res400;
+		break;
+	case QIT:
+		deltaM = userParams.res400 / 5000.0;
+		break;
+	case FTICR:
+	default:
+		deltaM = mz * mz / (400*userParams.res400);
+		break;
+	}
+	return deltaM;
+}
+
+//The QuickCharge algorithm. Simply assign charge based on inverse distance
+void CSpecAnalyze::chargeState(){
+	int i,j,k;
+	double dif;
+	int ch;
+	bool hasState;
+	CPeakPrediction p;
+
+	for(i=0;i<peaks.size()-1;i++){
+		p.Clear();
+		p.SetMZ(peaks.at(i).mz);
+		p.SetIntensity(peaks.at(i).intensity);
+
+		for(j=i+1;j<peaks.size();j++){
+			
+			dif = peaks.at(j).mz - peaks.at(i).mz;
+			if(dif > 1.1) break;
+			
+			ch = (int)(1/dif+0.5);
+			if(ch<userParams.minCharge || ch>userParams.maxCharge) continue;
+			hasState=false;
+			for(k=0;k<p.Size();k++){
+				if(p.GetCharge(k)==ch) {
+					hasState=true;
+					break;
+				}
+			}
+      if(!hasState) p.AddCharge(ch);
+
+		}
+
+		if(p.Size()>0) predPeak->push_back(p);
+	}
+
+}
+
+void CSpecAnalyze::clear(){
+  //spec=NULL;
+  peaks.clear();
+  peptide.clear();
+  delete predPeak;
+  delete predPep;
+  predPeak = new vector<CPeakPrediction>;
+  predPep = new vector<CPeptidePrediction>;
+  delete charges;
+  charges = new vector<int>;
+  manyPeps=false;
+  S2NCutoff = 0;
+  mismatchSize = 0;
+  basePeak = 0;
+}
+
+//Method for predicting peptides to analyze
+// 5/1/09 Most likely not used - commenting
+/*
+void CSpecAnalyze::FindPeptides(){
+  // split the results into overlapping ranges
+  peaks = signalToNoise(spec,0,spec.size()-1,userParams.sn,&S2NCutoff);
+  FirstDerivativePeaks(peaks,1);  //10 for zoomscan, 4 for UZS
+ 
+  //if there is more than two peaks, find a charge state.
+	if(peaks.size()>2) chargeState();
+
+}
+*/
+
+//Quickest ways to find all spectrum peaks without making any predictions
+int CSpecAnalyze::FindPeaks(){
+
+	/*
+  if(userParams.chargeMode == 'F' ||
+		 userParams.chargeMode == 'P' ||
+		 userParams.chargeMode == 'S') TraditionalCharges();
+	*/
+
+	if(userParams.fileFormat == zs) {
+		peaks = *spec;
+		FirstDerivativePeaks(peaks,10);
+	} else if(userParams.fileFormat == uzs) {
+		peaks = *spec;
+		FirstDerivativePeaks(peaks,4);
+	} else {
+		FirstDerivativePeaks(peaks,1);  //10 for zoomscan, 4 for UZS
+	}
+
+  return peaks.size();
+
+}
+
+//Find all spectrum peaks in a given range (by data point array index)
+int CSpecAnalyze::FindPeaks(Spectrum& s, int start, int stop){
+
+	/*
+  if(userParams.chargeMode == 'F' ||
+		 userParams.chargeMode == 'P' ||
+		 userParams.chargeMode == 'S') TraditionalCharges();
+	*/
+
+	if(userParams.fileFormat == zs) {
+		FirstDerivativePeaks(s,start,stop,10);
+	} else if(userParams.fileFormat == uzs) {
+		FirstDerivativePeaks(s,start,stop,4);
+	} else {
+		//intercept low res TOF data here?
+		FirstDerivativePeaks(s,start,stop,1);  //10 for zoomscan, 4 for UZS
+	}
+
+  return peaks.size();
+
+}
+
+//First derivative method, returns base peak intensity of the set
+void CSpecAnalyze::FirstDerivativePeaks(Spectrum& s, int winSize){
+  FirstDerivativePeaks(s,0,s.size()-1,winSize);
+}
+
+//First derivative method, returns base peak intensity of the set
+void CSpecAnalyze::FirstDerivativePeaks(Spectrum& s, int start, int stop, int winSize){
+  //cout << "Start centroid " << s.getScanNumber() << " " << start << " " << stop << " " << winSize << endl;
+  int i,j;
+  float maxIntensity;
+  int bestPeak;
+  bool bLastPos;
+  Spectrum gp;
+
+	int nextBest;
+	double FWHM;
+	Peak_T centroid;
+
+	basePeak=0;
+  bLastPos=false;
+  for(i=start;i<stop+1-winSize;i++){
+
+    if(s.at(i).intensity<s.at(i+winSize).intensity) {
+      bLastPos=true;
+      continue;
+    } else {
+      if(bLastPos){
+				bLastPos=false;
+	
+        //Possible ways to improve this:
+				//1. check FWHM - arg! what a computational disaster.
+				//2. account for noise - another disaster.
+
+				//find max and add peak
+				maxIntensity=0;
+				for(j=i;j<i+winSize;j++){
+				  if (s.at(j).intensity>maxIntensity){
+				    maxIntensity=s.at(j).intensity;
+				    bestPeak = j;
+				  }
+				}
+
+				//Best estimate of Gaussian centroid
+				//Get 2nd highest point of peak
+				if(bestPeak==stop){
+					nextBest=bestPeak-1;
+				} else if(s.at(bestPeak-1).intensity > s.at(bestPeak+1).intensity){
+					nextBest=bestPeak-1;
+				} else {
+					nextBest=bestPeak+1;
+				}
+
+				//Get FWHM
+				FWHM = calcFWHM(s.at(bestPeak).mz);
+
+				//Calc centroid MZ (in three lines for easy reading)
+				centroid.mz = pow(FWHM,2)*log(s.at(bestPeak).intensity/s.at(nextBest).intensity);
+				centroid.mz /= GAUSSCONST*(s.at(bestPeak).mz-s.at(nextBest).mz);
+				centroid.mz += (s.at(bestPeak).mz+s.at(nextBest).mz)/2;
+
+				//Calc centroid intensity
+				centroid.intensity=(float)(s.at(bestPeak).intensity/exp(-pow((s.at(bestPeak).mz-centroid.mz)/FWHM,2)*GAUSSCONST));
+
+				//some peaks are funny shaped and have bad gaussian fit.
+				//if error is more than 10%, keep existing intensity
+				if( fabs((s.at(bestPeak).intensity - centroid.intensity) / centroid.intensity * 100) > 10 ||
+            //not a good check for infinity
+            centroid.intensity>999999999999.9 ||
+            centroid.intensity < 0 ) {
+					centroid.intensity=s.at(bestPeak).intensity;
+				}
+
+				//Hack until I put in mass ranges
+				if(centroid.mz<0 || centroid.mz>2000) {
+					//do nothing if invalid mz
+				} else {
+					gp.add(centroid);
+					if(centroid.intensity > basePeak) {
+						basePeak = centroid.intensity;
+					}
+				}
+				i+=winSize-1;
+      }
+
+    }
+  }
+
+  //cout << "centroid ok" << endl;
+  peaks = gp;
+
+}
+
+double CSpecAnalyze::InterpolateMZ(Peak_T& p1, Peak_T& p2, double halfMax){
+
+	double slope;
+	double xDif;
+	double yDif;
+	double intercept;
+
+	//linear interpolation
+	yDif = (double)(p2.intensity - p1.intensity);
+	xDif = (double)(p2.mz - p1.mz);
+	slope = yDif/xDif;
+	intercept = (double)p1.intensity;
+
+	return (halfMax - intercept)/slope+p1.mz;
+
+}
+
+//5/1/09 - No longer used? Commenting out
+/*
+void CSpecAnalyze::FindCharge(){
+	int i,j,k,n;
+	double monoMass;
+	double shft;
+	double closest=0.0;
+	int closestIndex;
+	double dif=0.0;
+	double deltaM;
+	int maxPeak;
+
+	CPeakPrediction p;
+	CHardklorVariant var;
+	char v[64];
+
+	if(predPeak->size()==0) return;
+
+	//Sort peaks from high to low intensity;
+	for(i=0;i<predPeak->size()-1;i++){
+		for(j=i+1;j<predPeak->size();j++){
+			if(predPeak->at(j).GetIntensity() > predPeak->at(i).GetIntensity()) {
+				p = predPeak->at(j);
+				predPeak->at(j) = predPeak->at(i);
+				predPeak->at(i) = p;
+			};
+		};
+	};
+
+	//Profile every charge state of every peak, from most to least intense
+	for(i=0;i<predPeak->size();i++){
+
+    deltaM = calcFWHM(predPeak->at(i).GetMZ());
+
+		for(j=0;j<predPeak->at(i).Size();j++) {
+
+			//Calc monoisotopic mass
+			monoMass = predPeak->at(i).GetMZ() * predPeak->at(i).GetCharge(j) -
+								 predPeak->at(i).GetCharge(j) * (ProtonMass);
+
+			//Create averagine
+			averagine->clear();
+			averagine->calcAveragine(monoMass,var);
+			averagine->getAveragine(&v[0]);
+
+			//Make mercury distribution
+			mercury->GoMercury(&v[0],predPeak->at(i).GetCharge(j));
+
+			//Align to max peak
+			dif=0;
+			for(k=0; k<mercury->FixedData.size(); k++) {
+				if(mercury->FixedData.at(k).data>dif){
+					dif = mercury->FixedData.at(k).data;
+					maxPeak=k;
+				};
+			};
+			shft = predPeak->at(i).GetMZ() - mercury->FixedData.at(maxPeak).mass;
+			for(k=0; k<mercury->FixedData.size(); k++) mercury->FixedData.at(k).mass += shft;
+
+			//Remove charge states of peaks where mercury intensity > 10%
+			for(k=0;k<mercury->FixedData.size();k++){
+				closest=userParams.winSize;
+				closestIndex=-1;
+				if(mercury->FixedData.at(k).data < 10) continue;
+				if(k == maxPeak) continue;
+				for(n=0;n<predPeak->size();n++){
+					if(n == i) continue;
+					dif = (double)fabs(predPeak->at(n).GetMZ()-mercury->FixedData.at(k).mass);
+					if(dif < closest) {
+						closest = dif;
+						closestIndex = n;
+					};
+				};
+
+				//If matching peak was found, erase same charge state at that peak
+				//But only if intensity is lower!!!
+				if(closestIndex > -1 && closest < deltaM) {
+					for(n=0;n<predPeak->at(closestIndex).Size();n++){
+						if(predPeak->at(closestIndex).GetCharge(n) == predPeak->at(i).GetCharge(j) &&
+							 predPeak->at(closestIndex).GetIntensity() < predPeak->at(i).GetIntensity()){
+							//cout << "Remove: " << predPeak->at(closestIndex).GetMZ() << " +" << predPeak->at(closestIndex).GetCharge(n) << endl;
+							predPeak->at(closestIndex).EraseCharge(n);
+							break;
+						};
+					};
+				};
+
+			};
+
+		};
+
+		//Iterate predictions
+	};
+};
+*/
+
+//Builds Mercury distribution models for all predicted peptides. Keeps only
+//the ones that align to a user defined (sensitivity level param) number of observed peaks
+void CSpecAnalyze::MakePredictions(vector<CHardklorVariant>& var){
+  int i,j,k,n,q;
+  bool match;
+  double monoMass;
+  double shft;
+  double deltaM;
+  double dif=0;
+  double fracAbun;
+  char v[64];
+  float intensity;
+
+  int maxPeak;
+  int matchMaxPeak;
+  int matchIndex;
+
+  int matchCount;
+  int mismatchCount;
+
+  double distArea;
+  double predMonoMass;
+
+  CPeakPrediction pk;
+  CPeptidePrediction p;
+  CPeptideVariant pv;
+
+  i=peaks.size();
+  pv.SetMatchSize(i);
+
+  //Sort peaks from high to low intensity;
+  for(i=0;i<(int)predPeak->size()-1;i++){
+    for(j=i+1;j<(int)predPeak->size();j++){
+      if(predPeak->at(j).GetIntensity() > predPeak->at(i).GetIntensity()) {
+        pk = predPeak->at(j);
+        predPeak->at(j) = predPeak->at(i);
+        predPeak->at(i) = pk;
+      }
+    }
+  }
+
+  //Go through every peak prediction
+  for(i=0;i<(int)predPeak->size();i++) {
+
+    //Clear any prior peptide prediction data
+    p.Clear();
+
+    //Set some basic data
+    p.SetMZ(predPeak->at(i).GetMZ());
+    p.SetIntensity(predPeak->at(i).GetIntensity());
+
+    //Get the resolution
+    deltaM = calcFWHM(predPeak->at(i).GetMZ());
+
+    //Iterate through every charge state
+    for(j=0;j<predPeak->at(i).Size();j++){
+
+      //Iterate through every variant
+      for(q=0;q<(int)var.size();q++){
+
+        //Clear prior data
+        pv.Clear();
+		
+        //Calc monoisotopic mass
+        monoMass = predPeak->at(i).GetMZ() * predPeak->at(i).GetCharge(j) - predPeak->at(i).GetCharge(j) * (ProtonMass);
+
+        //Create averagine
+        if(strcmp(userParams.formula,"")==0){
+          averagine->clear();
+          averagine->calcAveragine(monoMass,var.at(q));
+          averagine->getAveragine(&v[0]);
+        } else {
+          strcpy(v,userParams.formula);
+        }
+
+        //Make mercury distribution	
+        for(k=0;k<var.at(q).sizeEnrich();k++){
+          mercury->Enrich(var.at(q).atEnrich(k).atomNum,var.at(q).atEnrich(k).isotope,var.at(q).atEnrich(k).ape);
+        }
+        mercury->GoMercury(&v[0],predPeak->at(i).GetCharge(j));
+
+        //Align to max peak
+        dif=0;
+        for(k=0; k<(int)mercury->FixedData.size(); k++) {
+          if(mercury->FixedData.at(k).data>dif){
+            dif = mercury->FixedData.at(k).data;
+            maxPeak=k;
+          }
+        }
+
+        shft = predPeak->at(i).GetMZ() - mercury->FixedData.at(maxPeak).mass;
+        //for fixed formulas, skip large mass differences.
+        //currently set at 10 ppm, this is only good for FT-Ultra and Orbitrap
+        if(strcmp(userParams.formula,"")!=0){
+          if( fabs(shft/mercury->FixedData[maxPeak].mass*1000000) > 10) continue;
+        }
+        for(k=0; k<(int)mercury->FixedData.size(); k++) {
+          mercury->FixedData.at(k).mass += shft;
+        }
+
+        matchCount=0;
+        mismatchCount=0;
+        fracAbun=0;
+        distArea=0;
+
+        //Match predictions to the observed peaks and record them in the proper array.
+        for(k=0;k<(int)mercury->FixedData.size();k++) {
+          if(mercury->FixedData.at(k).data<S2NCutoff) continue;
+          if(mercury->FixedData.at(k).data<0.1) continue;
+
+          match=false;
+          dif=userParams.winSize;
+          for(n=0;n<peaks.size();n++){
+            if(fabs(peaks.at(n).mz-mercury->FixedData.at(k).mass)<dif){
+              dif=fabs(peaks.at(n).mz-mercury->FixedData.at(k).mass);
+              matchIndex=n;
+            }
+          }
+          if(dif<deltaM){
+            if(k==maxPeak) matchMaxPeak=matchIndex;
+            intensity = (float)mercury->FixedData.at(k).data/100;
+            pv.AddMatch(matchIndex,mercury->FixedData.at(k).mass,intensity);
+            fracAbun+=mercury->FracAbunData.at(k).data;
+            //distArea+=peaks.at(matchIndex).intensity;
+            distArea+=mercury->FixedData.at(k).data/100;
+            matchCount++;
+          } else {
+            intensity = (float)mercury->FixedData.at(k).data/100;
+            distArea+=mercury->FixedData.at(k).data/100;
+            pv.AddExtra(mercury->FixedData.at(k).mass,intensity);
+            mismatchCount++;
+          }
+        }
+
+        if(strcmp(userParams.formula,"")==0) predMonoMass=averagine->getMonoMass();
+        else predMonoMass=mercury->getZeroMass();
+
+        //Record additional information
+        pv.SetCharge(predPeak->at(i).GetCharge(j));
+        pv.SetMonoMass(predMonoMass+(shft*predPeak->at(i).GetCharge(j)));
+        pv.SetFormula(v);
+        pv.SetVariant(var.at(q));
+        pv.SetArea(distArea);
+
+        //Add this variant to our list for this peptide.
+        switch(userParams.sl){
+        case 1:
+          if(fracAbun>0.75) p.AddVariant(pv);
+          break;
+        case 2:
+          if(fracAbun>0.50) p.AddVariant(pv);
+          break;
+        case 3:
+          if(matchCount>1) p.AddVariant(pv);
+          break;
+        default:
+          if(matchCount>mismatchCount) p.AddVariant(pv);
+          break;
+        }
+
+      }
+    }
+
+    //Add peptide prediction to the list.
+    if(p.VariantListSize()>0) {
+      p.SetIntensity(predPeak->at(i).GetIntensity());
+      p.SetMaxPeakIndex(matchMaxPeak);
+      predPep->push_back(p);
+    }
+		
+    //if we reach the maximum peptides allowed, stop making predictions
+    if(predPep->size() == userParams.peptide) {
+      return;
+    }
+  }
+
+  return;
+
+}
+
+//This function looks at the peaks, determines which ones might be part of a distribution
+//and creates an array of m/z values, intensities, and charges that will later be made
+//into peptide models
+int CSpecAnalyze::PredictPeptides(){
+	int i,j;
+	CPeakPrediction p;
+  Spectrum s;
+
+	if(peaks.size()>1){
+
+    /*
+    if(peaks.size()>25){
+      peaks.sortIntensity();
+      for(i=0;i<25;i++) s.add(peaks.at(i));
+      peaks=s;
+      peaks.sortMZ();
+    }
+    */    
+
+		switch(userParams.chargeMode){
+		case 'C':
+			for(i=0;i<peaks.size();i++){
+				if(peaks.at(i).intensity==0) continue;
+				p.SetMZ(peaks.at(i).mz);
+				p.SetIntensity(peaks.at(i).intensity);
+				for(j=userParams.minCharge;j<=userParams.maxCharge;j++) p.AddCharge(j);
+				predPeak->push_back(p);
+			}
+			break;
+		case 'F':
+		case 'P':
+		case 'S':
+			TraditionalCharges();
+			if(charges->size()==0) break;
+			for(i=0;i<peaks.size();i++){
+				if(peaks.at(i).intensity==0) continue;
+				p.SetMZ(peaks.at(i).mz);
+				p.SetIntensity(peaks.at(i).intensity);
+				for(j=0;j<(int)charges->size();j++) p.AddCharge(charges->at(j));
+				predPeak->push_back(p);
+			}
+			break;
+		case 'Q':
+		default:
+			chargeState();
+			break;
+		}
+	}
+
+  return predPeak->size();
+
+}
+
+//Reduces the peaks to only those we will be using
+void CSpecAnalyze::removePeaksBelowSN(){
+	int i;
+
+	//cout << "BasePeakSN: " << basePeak << endl;
+	//Note: The FirstDerivativePeaks function sets a new basePeak intensity based on a gaussian fit
+	//The SNCutoff, however, is based on the RAW value.
+	//They are different (by no more than 10%), and thus the cutoff has changed.
+
+  /* Old method uses erase function. New method avoids this to gain a little speed
+	for(i=0;i<peaks.size();i++){
+		if( (peaks.at(i).intensity / basePeak * 100) < S2NCutoff) {
+			peaks.erase(i);
+			i--;
+		}
+	}
+  */
+
+  Spectrum s;
+  for(i=0;i<peaks.size();i++){
+		if( (peaks.at(i).intensity / basePeak * 100) >= S2NCutoff) s.add(peaks.at(i));
+	}
+  peaks=s;
+}
+void CSpecAnalyze::setAveragine(CAveragine *a){
+	averagine=a;
+}
+
+void CSpecAnalyze::setMercury(CMercury8 *m){
+	mercury=m;
+}
+
+void CSpecAnalyze::setParams(const CHardklorSetting& sett){
+	userParams=sett;
+}
+
+void CSpecAnalyze::setSpectrum(Spectrum& s){
+  spec=&s;
+}
+
+//For using FFT or Patterson for charge states
+void CSpecAnalyze::TraditionalCharges(){
+
+	if(spec->size()==0) {
+		cout << "Cannot find charge state(s) because spectrum is empty." << endl;
+		exit(6);
+	}
+
+	//Find left and right boundaries in original spectrum
+	double lowMz=peaks[0].mz-0.25;
+	double highMz=peaks[peaks.size()-1].mz+0.25;
+	int lowIndex=binarySearch(lowMz);
+	int highIndex=binarySearch(highMz);
+
+	//fix resolution
+	double mz = peaks.at(peaks.size()/2).mz;
+  double deltaM = calcFWHM(mz);
+	deltaM/=4;
+
+	//Find the charges
+	SenkoCharge(charges,*spec,lowIndex,highIndex,userParams.minCharge,userParams.maxCharge,deltaM,userParams.chargeMode);
+
+}
+
+int CSpecAnalyze::binarySearch(double mz){
+	int lower,mid,upper;
+	int sz=spec->size();
+	double dif;
+
+	mid=sz/2;
+	lower=0;
+	upper=sz;
+	
+	while(true){
+		if(lower>=upper) break;
+		if(mz<spec->at(mid).mz){
+			upper=mid-1;
+			mid=(lower+upper)/2;
+		} else {
+			lower=mid+1;
+			mid=(lower+upper)/2;
+		}
+		if(mid==sz) {
+			mid--;
+			break;
+		}
+	}
+
+	if(mid==0 || mid==sz-1) return mid;
+	if(mz<spec->at(mid).mz){
+		dif=spec->at(mid).mz-mz;
+		if(mz-spec->at(mid-1).mz < dif) return mid-1;
+	} else {
+		dif=mz-spec->at(mid).mz;
+		if(spec->at(mid+1).mz-mz < dif) return mid+1;
+	}
+	return mid;
+}
diff --git a/src/app/hardklor/CSpecAnalyze.h b/src/app/hardklor/CSpecAnalyze.h
new file mode 100644
index 0000000..d062831
--- /dev/null
+++ b/src/app/hardklor/CSpecAnalyze.h
@@ -0,0 +1,77 @@
+#ifndef _CSPECANALYZE_H
+#define _CSPECANALYZE_H
+
+#include "CAveragine.h"
+#include "CMercury8.h"
+#include "HardklorTypes.h"
+#include "SpecAnalyzeSupport.h"
+#include "Spectrum.h"
+#include "S2N.h"
+#include "CHardklorSetting.h"
+#include "FFT-HK.h"
+#include <vector>
+#include <cmath>
+using namespace std;
+
+//the following is 8*ln(2)
+#define GAUSSCONST 5.5451774444795623
+
+class CSpecAnalyze {
+ public:
+  //Constructors & Destructors
+  CSpecAnalyze();
+  CSpecAnalyze(const CSpecAnalyze&);
+	~CSpecAnalyze();
+
+  //Overloaded operators
+  CSpecAnalyze& operator=(const CSpecAnalyze&);
+
+  //Functions
+  void BuildMismatchArrays();
+	void chargeState();
+  void clear();
+	//void FindCharge();
+  int  FindPeaks();
+	int  FindPeaks(Spectrum& s, int start, int stop);
+  //void FindPeptides();
+  void MakePredictions(vector<CHardklorVariant>& var);
+  int  PredictPeptides();
+  void removePeaksBelowSN();
+  void setSpectrum(Spectrum& s);
+	void setAveragine(CAveragine *a);
+	void setMercury(CMercury8 *m);
+	void setParams(const CHardklorSetting& sett);
+	void TraditionalCharges();
+
+  //Data Members
+  float                      basePeak;     //most intense peak in peaks spectrum; used for SN cutoff
+  vector<int>                *charges;
+  bool                       manyPeps;
+  int                        mismatchSize;
+  Spectrum                   peaks;        //peaks found in the spectrum
+  Spectrum                   peptide;      //peaks that are potential peptides
+  vector<CPeakPrediction>    *predPeak;
+	vector<CPeptidePrediction> *predPep;
+  float                      S2NCutoff;	
+
+ protected:
+ private:
+
+  //Functions
+	int    binarySearch(double mz);
+	double calcFWHM(double mz);
+  void   FirstDerivativePeaks(Spectrum&,int);
+	void   FirstDerivativePeaks(Spectrum&,int,int,int);
+	double InterpolateMZ(Peak_T& p1, Peak_T& p2, double halfMax);
+
+  //Data members
+  CAveragine       *averagine;
+	CMercury8        *mercury;
+  Spectrum         *spec;
+	CHardklorSetting userParams;
+	
+};
+
+
+#endif
+
diff --git a/src/app/hardklor/CSplitSpectrum.cpp b/src/app/hardklor/CSplitSpectrum.cpp
new file mode 100644
index 0000000..c283f26
--- /dev/null
+++ b/src/app/hardklor/CSplitSpectrum.cpp
@@ -0,0 +1,812 @@
+#include "CSplitSpectrum.h"
+#include <iostream>
+using namespace std;
+
+CSplitSpectrum::CSplitSpectrum(Spectrum* spec, CHardklorSetting& sett) {
+  wholeSpec=spec;
+	userParams=sett;
+	setA = new vector<CSpecAnalyze>;
+	setB = new vector<CSpecAnalyze>;
+	finalAnalysis = new vector<CSpecAnalyze>;
+	s2n = new vector<float>;
+	aIndex = new vector<int>;
+	bIndex = new vector<int>;
+}
+
+CSplitSpectrum::~CSplitSpectrum(){
+	delete setA;
+	delete setB;
+	delete finalAnalysis;
+	delete s2n;
+	delete aIndex;
+	delete bIndex;
+	wholeSpec=NULL;
+	averagine=NULL;
+	mercury=NULL;
+}
+
+int CSplitSpectrum::getNumWindows(){
+  return finalAnalysis->size();
+}
+
+//Needs function description
+void CSplitSpectrum::NoSplitAnalysis(){
+	int i;
+
+	goodPeaks.clear();
+	delete s2n;
+	s2n = new vector<float>;
+
+	goodPeaks.setParams(userParams);
+	if(userParams.sn>0) {
+
+		//need to add window restrictions
+		if(userParams.chargeMode=='F' || 
+			 userParams.chargeMode=='P' ||
+			 userParams.chargeMode=='S'){
+			goodPeaks.peaks = signalToNoise(*wholeSpec,0,wholeSpec->size()-1,(float)userParams.sn,&goodPeaks.S2NCutoff,true,true);
+		} else {
+			goodPeaks.peaks = signalToNoise(*wholeSpec,0,wholeSpec->size()-1,(float)userParams.sn,&goodPeaks.S2NCutoff);
+		}
+		for(i=0;i<goodPeaks.peaks.size();i++)	s2n->push_back(goodPeaks.S2NCutoff);
+	} else {
+
+		goodPeaks.S2NCutoff=0;
+		for(i=0;i<wholeSpec->size();i++){
+			if(userParams.window.dLower>0 || userParams.window.dUpper>0){
+				if(wholeSpec->at(i).mz<userParams.window.dLower || wholeSpec->at(i).mz>userParams.window.dUpper) continue;
+			}
+			goodPeaks.peaks.add(wholeSpec->at(i));
+			s2n->push_back(0);
+		}
+	}
+	goodPeaks.FindPeaks();
+
+}
+  
+
+/* 
+	 This function creates two overlapping arrays of CSpecAnalyze objects with a width
+   of gapSize. The overlap is exactly in the middle of each object. The two arrays are
+	 stored as vectors for future analysis.
+*/
+void CSplitSpectrum::OverlappingAnalysis(double gapSize){
+
+  int startA, endA;
+  int startB, endB;
+  double mzStartA, mzEndA;
+  double mzStartB, mzEndB;
+	double mz=0.0;
+
+  int i=0;
+ 
+	CSpecAnalyze sa;
+	sa.setParams(userParams);
+	sa.setAveragine(averagine);
+	sa.setMercury(mercury);
+
+	delete setA;
+	delete setB;
+	setA = new vector<CSpecAnalyze>;
+	setB = new vector<CSpecAnalyze>;
+
+  startA = -1;
+  startB = -1;
+
+	mzStartA = wholeSpec->at(0).mz;
+  mzEndA = mzStartA + gapSize;
+  mzStartB = mzStartA + (gapSize/2);
+  mzEndB = mzStartB + gapSize;
+
+  while(true){
+    
+    if(i==wholeSpec->size()){
+      endA=i-1;
+      endB=i-1;
+      break;
+    }
+
+		mz = wholeSpec->at(i).mz;
+
+    if(mz >= mzStartA && startA == -1) startA=i;
+    if(mz >= mzStartB && startB == -1) startB=i;
+
+		//Check A windows
+    if(mz >= mzEndA) {
+      endA=i;
+
+			if(endA-startA>1){
+
+				//Clear the CSpecAnalyze object and find the peaks
+				sa.clear();
+				if(userParams.sn>0){
+					sa.S2NCutoff = findSNCutoff(*wholeSpec,startA,endA,(float)userParams.sn);
+				} else {
+					sa.S2NCutoff=0;
+				}
+				sa.FindPeaks(*wholeSpec,startA,endA);
+				if(userParams.sn>0)	sa.removePeaksBelowSN();
+				setA->push_back(sa);
+			}
+
+	    startA=-1;
+		  endA=0;
+			mzStartA = mzEndA + 0.000000001;
+      mzEndA = mzEndA + gapSize;
+
+    }
+
+		//Check B windows
+    if(wholeSpec->at(i).mz >= mzEndB) {
+      endB=i;
+
+			if(endB-startB>1){
+
+				//Clear the CSpecAnalyze object and find the peaks
+		    sa.clear();
+
+				if(userParams.sn>0){
+					sa.S2NCutoff = findSNCutoff(*wholeSpec,startB,endB,(float)userParams.sn);
+				} else {
+					sa.S2NCutoff=0;
+				}
+				sa.FindPeaks(*wholeSpec,startB,endB);
+				if(userParams.sn>0)	sa.removePeaksBelowSN();
+				setB->push_back(sa);
+			}
+
+      startB=-1;
+      endB=0;
+      mzStartB = mzEndB + 0.000000001;
+      mzEndB = mzEndB + gapSize;
+    }
+
+    i++;
+
+  }
+ 
+}
+
+void CSplitSpectrum::SinglePassAnalysis(double gapSize){
+
+  int startA, endA;
+  double mzStartA, mzEndA;
+
+  int i=0;
+	int j;
+
+	CSpecAnalyze sa;
+	sa.setParams(userParams);
+	sa.setAveragine(averagine);
+	sa.setMercury(mercury);
+
+	goodPeaks.clear();
+	delete s2n;
+	s2n = new vector<float>;
+
+  startA = -1;
+
+  mzStartA = userParams.window.dLower;
+  mzEndA = mzStartA + gapSize;
+
+  while(true){
+    
+    if(i==wholeSpec->size()){
+      endA=i-1;
+      break;
+    }
+
+    if(wholeSpec->at(i).mz >= userParams.window.dUpper && userParams.window.dUpper>0){
+      endA=i;
+      break;
+    }
+
+    if(wholeSpec->at(i).mz >= mzStartA && startA == -1) startA=i;
+
+		//Check the window
+    if(wholeSpec->at(i).mz >= mzEndA) {
+      endA=i;
+
+			if(endA-startA>1){
+
+				//Clear the CSpecAnalyze object and find the peaks
+				sa.clear();
+				if(userParams.chargeMode=='F' || 
+					 userParams.chargeMode=='P' ||
+					 userParams.chargeMode=='S'){
+					sa.peaks = signalToNoise(*wholeSpec,startA,endA,(float)userParams.sn,&sa.S2NCutoff,true,true);
+				} else {
+					sa.peaks = signalToNoise(*wholeSpec,startA,endA,(float)userParams.sn,&sa.S2NCutoff);
+				}
+				sa.FindPeaks();
+
+				for(j=0;j<sa.peaks.size();j++) {
+					goodPeaks.peaks.add(sa.peaks.at(j));
+					s2n->push_back(sa.S2NCutoff);
+				}
+
+			}
+
+	    startA=-1;
+		  endA=0;
+			mzStartA = mzEndA + 0.000000001;
+      mzEndA = mzEndA + gapSize;
+
+    }
+
+	}
+	
+	//Check last window
+	if(endA-startA>1){
+
+		//Clear the CSpecAnalyze object and find the peaks
+		sa.clear();
+		if(userParams.chargeMode=='F' || 
+			 userParams.chargeMode=='P' ||
+			 userParams.chargeMode=='S'){
+			sa.peaks = signalToNoise(*wholeSpec,startA,endA,(float)userParams.sn,&sa.S2NCutoff,true,true);
+		} else {
+			sa.peaks = signalToNoise(*wholeSpec,startA,endA,(float)userParams.sn,&sa.S2NCutoff);
+		}
+		sa.FindPeaks();
+
+		for(j=0;j<sa.peaks.size();j++) {
+			goodPeaks.peaks.add(sa.peaks.at(j));
+			s2n->push_back(sa.S2NCutoff);
+		}
+
+	}
+
+}
+
+/* 
+	 This function sums (in m/z order) the A and B peak sets. At each peak, it records the
+   signal to noise ratio. When there are two ratios, it keeps the lowest.
+*/
+void CSplitSpectrum::UnionAnalysis(){
+
+	unsigned int aCount,apCount,bCount,bpCount;
+
+	aCount=0;
+	bCount=0;
+	apCount=0;
+	bpCount=0;
+
+	goodPeaks.clear();
+	delete s2n;
+	s2n = new vector<float>;
+
+	bool bSkip;
+
+	while(aCount<setA->size() || bCount<setB->size()){
+
+		//Keep iterating through sets until a peak is found
+		while(true){
+
+			//Check A set for next peak
+			if(aCount<setA->size()){
+				if(setA->at(aCount).peaks.size()==0 || apCount>=(unsigned int)setA->at(aCount).peaks.size()) {
+					aCount++;
+					apCount=0;
+					continue;
+				};
+			};
+			//Check B set for next peak
+			if(bCount<setB->size()){
+				if(setB->at(bCount).peaks.size()==0 || bpCount>=(unsigned int)setB->at(bCount).peaks.size()) {
+					bCount++;
+					bpCount=0;
+					continue;
+				};
+			};
+			break;
+		};
+
+		//Compare the peaks between sets. Either both have the same peak, or set A or set B
+		//has an extra peak.
+		if(aCount<setA->size() && bCount<setB->size()){
+			if(setA->at(aCount).peaks.at(apCount).mz == setB->at(bCount).peaks.at(bpCount).mz){
+
+				//check if within user specified bounds
+				bSkip=false;
+				if(userParams.window.dLower>0 || userParams.window.dUpper > 0){
+					if(setA->at(aCount).peaks.at(apCount).mz < userParams.window.dLower || setA->at(aCount).peaks.at(apCount).mz > userParams.window.dUpper) {
+						bSkip=true;
+					};
+				};
+
+				if(!bSkip){
+					goodPeaks.peaks.add(setA->at(aCount).peaks.at(apCount));
+					if(setA->at(aCount).S2NCutoff<=setB->at(bCount).S2NCutoff) {
+						s2n->push_back(setA->at(aCount).S2NCutoff);
+					} else {
+						s2n->push_back(setB->at(bCount).S2NCutoff);
+					};
+					if(userParams.chargeMode=='F' || 
+						 userParams.chargeMode=='P' ||
+						 userParams.chargeMode=='S'){
+						aIndex->push_back(aCount);
+						bIndex->push_back(bCount);
+					};
+				};
+				apCount++;
+				bpCount++;
+
+			} else if(setA->at(aCount).peaks.at(apCount).mz < setB->at(bCount).peaks.at(bpCount).mz) {
+
+				//check if within user specified bounds
+				bSkip=false;
+				if(userParams.window.dLower>0 || userParams.window.dUpper > 0){
+					if(setA->at(aCount).peaks.at(apCount).mz < userParams.window.dLower || setA->at(aCount).peaks.at(apCount).mz > userParams.window.dUpper) {
+						bSkip=true;
+					};
+				};
+
+				if(!bSkip){
+					goodPeaks.peaks.add(setA->at(aCount).peaks.at(apCount));
+					s2n->push_back(setA->at(aCount).S2NCutoff);
+					if(userParams.chargeMode=='F' || 
+						 userParams.chargeMode=='P' ||
+						 userParams.chargeMode=='S'){
+						aIndex->push_back(aCount);
+						bIndex->push_back(-1);
+					};
+				};
+				apCount++;
+
+			} else {
+
+				//check if within user specified bounds
+				bSkip=false;
+				if(userParams.window.dLower>0 || userParams.window.dUpper > 0){
+					if(setB->at(bCount).peaks.at(bpCount).mz < userParams.window.dLower || setB->at(bCount).peaks.at(bpCount).mz > userParams.window.dUpper) {
+						bSkip=true;
+					};
+				};
+
+				if(!bSkip){
+					goodPeaks.peaks.add(setB->at(bCount).peaks.at(bpCount));
+					s2n->push_back(setB->at(bCount).S2NCutoff);
+					if(userParams.chargeMode=='F' || 
+						 userParams.chargeMode=='P' ||
+						 userParams.chargeMode=='S'){
+						aIndex->push_back(-1);
+						bIndex->push_back(bCount);
+					};
+				};
+				bpCount++;
+
+			};
+			continue;
+		};
+
+		//Add any leftover peaks from set A
+		if(aCount<setA->size()){
+
+			//check if within user specified bounds
+			bSkip=false;
+			if(userParams.window.dLower>0 || userParams.window.dUpper > 0){
+				if(setA->at(aCount).peaks.at(apCount).mz < userParams.window.dLower || setA->at(aCount).peaks.at(apCount).mz > userParams.window.dUpper) {
+					bSkip=true;
+				};
+			};
+		
+			if(!bSkip){
+				goodPeaks.peaks.add(setA->at(aCount).peaks.at(apCount));
+				s2n->push_back(setA->at(aCount).S2NCutoff);
+				if(userParams.chargeMode=='F' || 
+					 userParams.chargeMode=='P' ||
+					 userParams.chargeMode=='S'){
+					aIndex->push_back(aCount);
+					bIndex->push_back(-1);
+				};
+			};
+			apCount++;
+
+		};
+
+		//Add any leftover peaks from set B
+		if(bCount<setB->size()){
+
+			//check if within user specified bounds
+			bSkip=false;
+			if(userParams.window.dLower>0 || userParams.window.dUpper > 0){
+				if(setB->at(bCount).peaks.at(bpCount).mz < userParams.window.dLower || setB->at(bCount).peaks.at(bpCount).mz > userParams.window.dUpper) {
+					bSkip=true;
+				};
+			};
+
+			if(!bSkip){
+				goodPeaks.peaks.add(setB->at(bCount).peaks.at(bpCount));
+				s2n->push_back(setB->at(bCount).S2NCutoff);
+				if(userParams.chargeMode=='F' || 
+					 userParams.chargeMode=='P' ||
+					 userParams.chargeMode=='S'){
+					aIndex->push_back(-1);
+					bIndex->push_back(bCount);
+				};
+			};
+			bpCount++;
+
+		};
+
+	};
+
+};
+
+/* 
+	 This function is similar to UnionAnalysis, but differs in that it only accepts peaks
+	 when found in both sets. The lowest signal to noise cutoff is kept.
+*/
+void CSplitSpectrum::IntersectionAnalysis(){
+	unsigned int aCount,apCount,bCount,bpCount;
+
+	aCount=0;
+	bCount=0;
+	apCount=0;
+	bpCount=0;
+
+	goodPeaks.clear();
+	delete s2n;
+	s2n = new vector<float>;
+
+	bool bSkip;
+
+	while(aCount<setA->size() && bCount<setB->size()){
+
+		//Keep iterating through sets until a peak is found
+		while(true){
+			//Check set A
+			if(aCount<setA->size()){
+				if(setA->at(aCount).peaks.size()==0 || apCount>=(unsigned int)setA->at(aCount).peaks.size()) {
+					aCount++;
+					apCount=0;
+					continue;
+				}
+			}
+			//Check set B
+			if(bCount<setB->size()){
+				if(setB->at(bCount).peaks.size()==0 || bpCount>=(unsigned int)setB->at(bCount).peaks.size()) {
+					bCount++;
+					bpCount=0;
+					continue;
+				}
+			}
+			break;
+		}
+
+		//Keep peaks found in both sets only.
+		if(aCount<setA->size() && bCount<setB->size()){
+			if(setA->at(aCount).peaks.at(apCount).mz == setB->at(bCount).peaks.at(bpCount).mz){
+				
+				//check if within user specified bounds
+				bSkip=false;
+				if(userParams.window.dLower>0 || userParams.window.dUpper > 0){
+					if(setA->at(aCount).peaks.at(apCount).mz < userParams.window.dLower || setA->at(aCount).peaks.at(apCount).mz > userParams.window.dUpper) {
+						bSkip=true;
+					}
+				}
+
+				if(!bSkip){
+					goodPeaks.peaks.add(setA->at(aCount).peaks.at(apCount));
+					if(setA->at(aCount).S2NCutoff<=setB->at(bCount).S2NCutoff) {
+						s2n->push_back(setA->at(aCount).S2NCutoff);
+					} else {
+						s2n->push_back(setB->at(bCount).S2NCutoff);
+					}
+					if(userParams.chargeMode=='F' || 
+						 userParams.chargeMode=='P' ||
+						 userParams.chargeMode=='S'){
+						aIndex->push_back(aCount);
+						bIndex->push_back(bCount);
+					}
+				}
+
+				apCount++;
+				bpCount++;
+			} else if(setA->at(aCount).peaks.at(apCount).mz < setB->at(bCount).peaks.at(bpCount).mz) {
+				apCount++;
+			} else {
+				bpCount++;
+			}
+		}
+	}
+
+}
+
+/* 
+	 This funciton scans through all the good peaks and divides them into sets with a maximum
+	 distance between the first and last peak of winSize. When winSize is exceeded, the set
+	 of peaks is cut between the two peaks that have a maximum distance from each other.
+*/
+void CSplitSpectrum::MakeAnalysis(double winSize){
+	int i,j;
+	CSpecAnalyze sa;
+
+	double startMZ;
+	double maxDif;
+	int peakCount;
+	int cutPoint;
+	int startPoint;
+	float lowS2N;
+
+	sa.setAveragine(averagine);
+	sa.setMercury(mercury);
+
+  //For optimum window splitting
+  vector<sSplit> split;
+  sSplit tmpSplit;
+  //double tmpDouble;
+  float lowIntensity;
+
+	//For testing purposes:
+	/*
+	cout << "Winsize: " << winSize << endl;
+	for(i=0;i<goodPeaks.peaks.size();i++){
+		cout << goodPeaks.peaks.at(i).mz << "  " << goodPeaks.peaks.at(i).intensity << endl;
+	};
+	*/
+
+	cutPoint=0;
+	peakCount=0;
+	while(peakCount<goodPeaks.peaks.size()-1){
+		startPoint=peakCount;
+		startMZ=goodPeaks.peaks.at(peakCount).mz;
+		maxDif=0.0;
+
+		//Continue while we are less than winSize and there are still peaks
+		while( ((goodPeaks.peaks.at(peakCount).mz - startMZ) < winSize) && (peakCount<goodPeaks.peaks.size()-1) && (maxDif<1.05) ) {
+			peakCount++;
+			
+			//keep track of the maximum distance between consecutive peaks in this window
+			if( (goodPeaks.peaks.at(peakCount).mz - goodPeaks.peaks.at(peakCount-1).mz) > maxDif){
+				cutPoint = peakCount-1;
+				maxDif = goodPeaks.peaks.at(peakCount).mz - goodPeaks.peaks.at(peakCount-1).mz;
+			}
+		}
+
+    //cout << "The CutPoint: " << goodPeaks.peaks[cutPoint].mz << "  " << maxDif << endl;
+
+    //if the cutpoint might sever a valid distribution, find a less damaging
+    //location to cut the data.
+    if(maxDif<0.525) {
+      split.clear();
+      for(i=startPoint;i<=peakCount;i++){
+        tmpSplit.index=i;
+        tmpSplit.mz=goodPeaks.peaks.at(i).mz;
+        tmpSplit.intensity=goodPeaks.peaks.at(i).intensity;
+        split.push_back(tmpSplit);
+        //cout << tmpSplit.mz << "," << tmpSplit.intensity << endl;
+      }
+
+      //cout << "Would be CutPoint: " << goodPeaks.peaks[cutPoint].mz << "  " << maxDif << endl;
+      
+      while(maxDif<0.53) { 
+
+        //remove the least intensity peak;
+        lowIntensity=9999999999999.0f;
+        for(i=1;i<(int)split.size();i++){
+          if(split[i].intensity<lowIntensity){
+            lowIntensity=split[i].intensity;
+            j=i;
+          }
+        }
+
+        //Slow method - think of better approach
+        //cout << "Erase: " << split[j].mz << "," << split[j].intensity << endl;
+        split.erase(split.begin()+j);
+
+        //if we trimmed the end of the window, stop now.
+        if( (split[split.size()-1].mz-split[0].mz) < (winSize-1.03)){
+          maxDif=666;
+          cutPoint=split[split.size()-1].index;
+          break;
+        }
+        
+
+        //compute the new max difference between peaks
+        maxDif=0.0;
+        for(i=1;i<(int)split.size();i++){
+          if( (split[i].mz-split[i-1].mz) > maxDif){
+				    maxDif = split[i].mz-split[i-1].mz;
+            cutPoint = split[i-1].index;
+          }
+			  }
+
+        //cout << "New Best dif: " << maxDif << " - " << cutPoint << "," << goodPeaks.peaks[cutPoint].mz << endl;
+
+      }
+
+    }
+
+		/* For checking which peaks appear in a window
+		cout << "For: " << goodPeaks.peaks[startPoint].mz << " - " << goodPeaks.peaks[peakCount].mz << endl;
+		for(i=startPoint;i<=peakCount;i++){
+			cout << "  Peak: " << goodPeaks.peaks[i].mz << " " << goodPeaks.peaks[i].intensity << endl;
+		}
+    cout << "CutPoint: " << goodPeaks.peaks[cutPoint].mz << "  " << maxDif << endl;
+    */
+
+    //I think this sanity check is for when the distance to the last peak is less than the window size.
+		//if(goodPeaks.peaks.at(peakCount).mz - startMZ < winSize) cutPoint=goodPeaks.peaks.size()-1;
+    if(peakCount==goodPeaks.peaks.size()-1) cutPoint=goodPeaks.peaks.size()-1;
+
+		//Create our optimal window that is less than winsize
+		if(startPoint!=cutPoint) {
+			sa.clear();
+			lowS2N=100;
+
+			//create peaks and find lowest signal to noise cutoff across those peaks
+			for(i=startPoint;i<=cutPoint;i++){
+				sa.peaks.add(goodPeaks.peaks.at(i));
+				if(s2n->at(i)<lowS2N) lowS2N=s2n->at(i);
+			}
+			sa.S2NCutoff=lowS2N;
+
+			//For checking what the cut window is
+			//cout << "  Cut point: " << goodPeaks.peaks.at(startPoint).mz << " - " << goodPeaks.peaks.at(cutPoint).mz << endl;
+			
+			//Find charges (FFT & Patterson ONLY)
+			/*
+			if(userParams.chargeMode=='F' || 
+				 userParams.chargeMode=='P' ||
+				 userParams.chargeMode=='S') {
+
+					 cout << "hehe: " << startPoint << " " << cutPoint << endl;
+					 cout << aIndex->size() << endl;
+					 cout << setA->size() << endl;
+
+				//Iterate through all peak indeces in this analysis
+				for(i=startPoint;i<=cutPoint;i++){
+
+					//only add charges from setA if it contributed to the peak
+					if(aIndex->at(i) != -1) {
+
+						for(k=0;k<(int)setA->at(aIndex->at(i)).charges->size();k++){
+							bFound=false;
+							for(j=0;j<(int)sa.charges->size();j++){
+								if(sa.charges->at(j) == setA->at(aIndex->at(i)).charges->at(k)){
+									bFound=true;
+									break;
+								}
+							}
+							if(!bFound) {
+								sa.charges->push_back(setA->at(aIndex->at(i)).charges->at(k));
+							}
+						}
+					}
+
+					//only add charges from SetB if it contributed to the peak
+					if(bIndex->at(i) != -1) {
+						for(k=0;k<(int)setB->at(bIndex->at(i)).charges->size();k++){
+							bFound=false;
+							for(j=0;j<(int)sa.charges->size();j++){
+								if(sa.charges->at(j) == setB->at(bIndex->at(i)).charges->at(k)){
+									bFound=true;
+									break;
+								}
+							}
+							if(!bFound) {
+								sa.charges->push_back(setB->at(bIndex->at(i)).charges->at(k));
+							}
+						}
+					}
+
+				}//i
+			
+			}//end charge mode block
+			*/
+
+			sa.setSpectrum(*wholeSpec);
+			finalAnalysis->push_back(sa);
+
+		}
+		peakCount=cutPoint+1;
+	}
+
+}
+
+CSpecAnalyze CSplitSpectrum::getWindow(int index){
+	return finalAnalysis->at(index);
+}
+
+void CSplitSpectrum::SetAveragine(CAveragine *a){
+	averagine=a;
+	goodPeaks.setAveragine(averagine);
+}
+
+void CSplitSpectrum::SetMercury(CMercury8 *m){
+	mercury=m;
+	goodPeaks.setMercury(mercury);
+}
+
+void CSplitSpectrum::Centroid(Spectrum& s){
+	goodPeaks.clear();
+	goodPeaks.setParams(userParams);
+	delete s2n;
+	s2n = new vector<float>;
+	for(int i=0;i<s.size();i++){
+		goodPeaks.peaks.add(s.at(i));
+		s2n->push_back(0);
+	}
+}
+
+//This funciton is for calculating S/N thresholds when using Noise reduced data,
+//such as data found on Thermo FT or Orbitrap instruments
+//Make only one pass and set the noise threshold at the lowest point
+void CSplitSpectrum::NewSNPass(double gapSize){
+	int startA, endA;
+	float S2NCutoff;
+  double mzStartA, mzEndA;
+	double mz=0.0;
+	double maxIntensity=0.0;
+	double max;
+	double lowPoint=99999999999;
+
+  unsigned int i=0;
+
+	CSpecAnalyze sa;
+	sa.setParams(userParams);
+	sa.setAveragine(averagine);
+	sa.setMercury(mercury);
+
+	delete setA;
+	setA = new vector<CSpecAnalyze>;
+
+  startA = -1;
+
+  mzStartA = wholeSpec->at(0).mz;
+  mzEndA = mzStartA + gapSize;
+
+  while(true){
+    
+    if(i==wholeSpec->size()){
+      endA=i-1;
+      break;
+    }
+
+		mz = wholeSpec->at(i).mz;
+
+    if(mz >= mzStartA && startA == -1) startA=i;
+
+    if(mz >= mzEndA) {
+      endA=i;
+
+			if(endA-startA>1){
+
+				S2NCutoff = findSNCutoff2(*wholeSpec,startA,endA,(float)userParams.sn,max);
+				
+				if( (S2NCutoff/100*max) < lowPoint ) lowPoint = S2NCutoff/100*max;
+				if( max > maxIntensity ) maxIntensity = max;
+
+			}
+
+			startA=-1;
+		  endA=0;
+			mzStartA = mzEndA + 0.000000001;
+      mzEndA = mzEndA + gapSize;
+
+		}
+
+    i++;  
+
+  }
+
+	sa.clear();
+	sa.S2NCutoff = (float)(lowPoint/maxIntensity*100);
+	sa.FindPeaks(*wholeSpec,0,wholeSpec->size()-1);
+
+	if(userParams.sn>0)	sa.removePeaksBelowSN();
+
+	goodPeaks.clear();
+	delete s2n;
+	s2n = new vector<float>;
+	for(i=0;i<(unsigned int)sa.peaks.size();i++){
+		if(userParams.window.dLower>0 || userParams.window.dUpper > 0){
+			if(sa.peaks.at(i).mz < userParams.window.dLower || sa.peaks.at(i).mz > userParams.window.dUpper) continue;
+		}
+		goodPeaks.peaks.add(sa.peaks.at(i));
+		s2n->push_back(sa.S2NCutoff);
+	}
+
+}
diff --git a/src/app/hardklor/CSplitSpectrum.h b/src/app/hardklor/CSplitSpectrum.h
new file mode 100644
index 0000000..ab20ca4
--- /dev/null
+++ b/src/app/hardklor/CSplitSpectrum.h
@@ -0,0 +1,56 @@
+#ifndef _CSPLITSPECTRUM_H
+#define _CSPLITSPECTRUM_H
+
+#include "CHardklorSetting.h"
+#include "CSpecAnalyze.h"
+#include "Spectrum.h"
+#include <vector>
+
+using namespace std;
+
+class CSplitSpectrum {
+ public:
+  //Constructors & Destructors
+  CSplitSpectrum(Spectrum *spec, CHardklorSetting& sett);
+	~CSplitSpectrum();
+  
+  //Fuctions
+  int getNumWindows();
+	CSpecAnalyze getWindow(int index);
+	void IntersectionAnalysis();
+	void MakeAnalysis(double winSize);
+	void NoSplitAnalysis();
+	void OverlappingAnalysis(double gapSize);
+	void SinglePassAnalysis(double gapSize);
+	void UnionAnalysis();
+
+	void SetAveragine(CAveragine *a);
+	void SetMercury(CMercury8 *m);
+
+	void Centroid(Spectrum& s);
+
+	void NewSNPass(double gapSize);
+
+
+ private:
+  //Data members
+  Spectrum *wholeSpec;
+	CHardklorSetting userParams;
+
+	CSpecAnalyze goodPeaks;
+	CAveragine *averagine;
+	CMercury8 *mercury;
+
+	vector<CSpecAnalyze> *setA;
+	vector<CSpecAnalyze> *setB;
+	vector<CSpecAnalyze> *finalAnalysis;
+
+	vector<float> *s2n;
+
+	vector<int> *aIndex;
+	vector<int> *bIndex;
+
+};
+
+#endif
+
diff --git a/src/app/hardklor/CruxHardklorApplication.cpp b/src/app/hardklor/CruxHardklorApplication.cpp
new file mode 100644
index 0000000..b8e2edf
--- /dev/null
+++ b/src/app/hardklor/CruxHardklorApplication.cpp
@@ -0,0 +1,308 @@
+/**
+ * \file CruxHardklorApplication.cpp 
+ * \brief Runs hardklor
+ *****************************************************************************/
+#include "CruxHardklorApplication.h"
+#include "CAveragine.h"
+#include "CHardklor.h"
+#include "CHardklor2.h"
+#include "CMercury8.h"
+#include "CModelLibrary.h"
+#include "CHardklorParser.h"
+#include "util/CarpStreamBuf.h"
+#include "util/FileUtils.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+#include "io/DelimitedFileWriter.h"
+
+using namespace std;
+
+CruxHardklorApplication::CruxHardklorApplication() {
+}
+
+CruxHardklorApplication::~CruxHardklorApplication() {
+}
+
+int CruxHardklorApplication::main(int argc, char** argv) {
+  return main(Params::GetString("spectra"));
+}
+
+int CruxHardklorApplication::main(const string& ms1) {
+  carp(CARP_INFO, "Hardklor v2.19, April 10 2015");
+  carp(CARP_INFO, "Mike Hoopmann, Mike MacCoss");
+  carp(CARP_INFO, "Copyright 2007-2015");
+  carp(CARP_INFO, "University of Washington");
+
+  string cdm = Params::GetString("cdm");
+  if (cdm == "B") {
+    cdm = "none";
+  } else if (cdm == "F") {
+    cdm = "fft";
+  } else if (cdm == "P") {
+    cdm = "patterson";
+  } else if (cdm == "Q") {
+    cdm = "quick";
+  } else if (cdm == "s") {
+    cdm = "senko";
+  }
+  bool xmlOutput = Params::GetBool("hardklor-xml-output");
+
+  vector<char*> hardklorArgs;
+  addArg(&hardklorArgs, "hardklor");
+  addArg(&hardklorArgs, "-cmd");
+  addArg(&hardklorArgs, "algorithm", Params::GetString("hardklor-algorithm"));
+  addArg(&hardklorArgs, "averagine_mod", Params::GetString("averagine-mod"));
+  addArg(&hardklorArgs, "boxcar_averaging", Params::GetString("boxcar-averaging"));
+  addArg(&hardklorArgs, "boxcar_filter", Params::GetString("boxcar-filter"));
+  addArg(&hardklorArgs, "boxcar_filter_ppm", Params::GetString("boxcar-filter-ppm"));
+  addArg(&hardklorArgs, "centroided", Params::GetBool("centroided"));
+  addArg(&hardklorArgs, "charge_algorithm", cdm);
+  addArg(&hardklorArgs, "charge_max", Params::GetString("max-charge"));
+  addArg(&hardklorArgs, "charge_min", Params::GetString("min-charge"));
+  addArg(&hardklorArgs, "correlation", Params::GetString("corr"));
+  addArg(&hardklorArgs, "depth", Params::GetString("depth"));
+  addArg(&hardklorArgs, "distribution_area", Params::GetBool("distribution-area"));
+  addArg(&hardklorArgs, "hardklor_data", Params::GetString("hardklor-data-file"));
+  addArg(&hardklorArgs, "instrument", Params::GetString("instrument"));
+  addArg(&hardklorArgs, "isotope_data", Params::GetString("isotope-data-file"));
+  addArg(&hardklorArgs, "max_features", Params::GetString("max-features"));
+  addArg(&hardklorArgs, "ms_level", Params::GetString("mzxml-filter"));
+  addArg(&hardklorArgs, "mz_max", Params::GetString("mz-max"));
+  addArg(&hardklorArgs, "mz_min", Params::GetString("mz-min"));
+  addArg(&hardklorArgs, "mz_window", Params::GetString("mz-window"));
+  addArg(&hardklorArgs, "resolution", Params::GetString("resolution"));
+  addArg(&hardklorArgs, "scan_range_max", Params::GetString("scan-range-max"));
+  addArg(&hardklorArgs, "scan_range_min", Params::GetString("scan-range-min"));
+  addArg(&hardklorArgs, "sensitivity", Params::GetString("sensitivity"));
+  addArg(&hardklorArgs, "signal_to_noise", Params::GetString("signal-to-noise"));
+  addArg(&hardklorArgs, "smooth", Params::GetString("smooth"));
+  addArg(&hardklorArgs, "sn_window", Params::GetString("sn-window"));
+  addArg(&hardklorArgs, "static_sn", Params::GetBool("static-sn"));
+  addArg(&hardklorArgs, "xml", xmlOutput);
+
+  addArg(&hardklorArgs, ms1);
+
+  string outputFile = "hardklor.mono.";
+  outputFile += xmlOutput ? "xml" : "txt";
+  outputFile = make_file_path(outputFile);
+  addArg(&hardklorArgs, outputFile);
+
+  CHardklorParser hp;
+  hp.parseCMD(hardklorArgs.size(), &hardklorArgs[0]);
+
+  for (vector<char*>::iterator i = hardklorArgs.begin(); i != hardklorArgs.end(); i++) {
+    delete *i;
+  }
+
+  // Create all the output files that will be used
+  for (int i = 0; i< hp.size(); i++) {
+    const char* out = &hp.queue(i).outFile[0];
+    if (FileUtils::Exists(out) && !Params::GetBool("overwrite")) {
+      carp(CARP_FATAL, "The file '%s' already exists and cannot be overwritten. "
+           "Use --overwrite T to replace or choose a different output file name",
+           out);
+    }
+    fstream fptr(out, ios::out);
+  }
+
+  // Re-route stdout/stderr
+  CarpStreamBuf buffer;
+  streambuf* oldCout = cout.rdbuf();
+  streambuf* oldCerr = cerr.rdbuf();
+  cout.rdbuf(&buffer);
+  cerr.rdbuf(&buffer);
+
+  CAveragine* averagine = new CAveragine(hp.queue(0).MercuryFile, hp.queue(0).HardklorFile);
+  CMercury8* mercury = new CMercury8(hp.queue(0).MercuryFile);
+  CModelLibrary* models = new CModelLibrary(averagine, mercury);
+
+  CHardklor h(averagine, mercury);
+  CHardklor2 h2(averagine, mercury, models);
+  vector<CHardklorVariant> pepVariants;
+  CHardklorVariant hkv;
+
+  for (int i = 0; i < hp.size(); i++) {
+    if (hp.queue(i).algorithm == Version2) {
+      pepVariants.clear();
+      if (!hp.queue(i).noBase) {
+        pepVariants.push_back(hkv);
+      }
+      for (unsigned j = 0; j < hp.queue(i).variant->size(); j++) {
+        pepVariants.push_back(hp.queue(i).variant->at(j));
+      }
+      models->eraseLibrary();
+      models->buildLibrary(hp.queue(i).minCharge, hp.queue(i).maxCharge, pepVariants);
+      h2.GoHardklor(hp.queue(i));
+    } else {
+      h.GoHardklor(hp.queue(i));
+    }
+  }
+
+  // Recover stdout/stderr
+  cout.rdbuf(oldCout);
+  cerr.rdbuf(oldCerr);
+
+  delete models;
+  delete averagine;
+  delete mercury;
+
+  return 0;
+}
+
+void CruxHardklorApplication::addArg(
+  vector<char*>* args,
+  const string& arg
+) {
+  char* toAdd = new char[arg.length() + 1];
+  strcpy(toAdd, arg.c_str());
+  args->push_back(toAdd);
+}
+
+void CruxHardklorApplication::addArg(
+  vector<char*>* args,
+  const string& name,
+  const string& value) {
+  if (!value.empty()) {
+    addArg(args, "-" + name);
+    addArg(args, value);
+  }
+}
+
+void CruxHardklorApplication::addArg(
+  vector<char*>* args,
+  const string& name,
+  bool value) {
+  addArg(args, name, string(value ? "1" : "0"));
+}
+
+/**
+ * \returns the command name for CruxHardklorApplication
+ */
+string CruxHardklorApplication::getName() const {
+  return "hardklor";
+}
+
+/**
+ * \returns the description for CruxHardklorApplication
+ */
+string CruxHardklorApplication::getDescription() const {
+  return
+    "[[nohtml:Identify isotopic distributions from high-resolution mass "
+    "spectra.]]"
+    "[[html:<p>Hardklör analyzes high-resolution mass spectra, "
+    "identifying protein or peptide isotope distributions and determining the "
+    "corresponding monoisotopic masses and charge states. The algorithm aims "
+    "to identify persistence peptide isotope distribution (PPIDs), i.e., "
+    "isotope distributions that recur over multiple scans. Hardklör is "
+    "specifically designed to handle overlapping isotope distributions in a "
+    "single spectrum. A detailed description of the Hardklör algorithm is "
+    "given in</p><blockquote>Hoopmann MR, Finney GL and MacCoss MJ. <a href=\""
+    "http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2556510/\">"High speed "
+    "data reduction, feature selection, and MS/MS spectrum quality assessment "
+    "of shotgun proteomics datasets using high resolution mass spectrometry."
+    ""</a> <em>Analytical Chemistry</em>. 79:5630-5632 (2007)."
+    "</blockquote>]]";
+}
+
+/**
+ * \returns the command arguments
+ */
+vector<string> CruxHardklorApplication::getArgs() const {
+  string arr[] = {
+    "spectra"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command options
+ */
+vector<string> CruxHardklorApplication::getOptions() const {
+  string arr[] = {
+    "fileroot",
+    "output-dir",
+    "overwrite",
+    "hardklor-algorithm",
+    "averagine-mod",
+    "boxcar-averaging",
+    "boxcar-filter",
+    "boxcar-filter-ppm",
+    "centroided",
+    "cdm",
+    "min-charge",
+    "max-charge",
+    "corr",
+    "depth",
+    "distribution-area",
+    "hardklor-data-file",
+    "instrument",
+    "isotope-data-file",
+    "max-features",
+    "mzxml-filter",
+    "mz-max",
+    "mz-min",
+    "mz-window",
+    "resolution",
+    "scan-range-max",
+    "scan-range-min",
+    "sensitivity",
+    "signal-to-noise",
+    "smooth",
+    "sn-window",
+    "static-sn",
+    "parameter-file",
+    "verbosity"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command outputs
+ */
+vector< pair<string, string> > CruxHardklorApplication::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("hardklor.mono.txt",
+    "a tab-delimited text file containing one line for each isotope "
+    "distribution. The columns appear in the following order:<ol><li><strong>"
+    "scan</strong>: The scan number assigned to this spectrum in the input file."
+    "</li><li><strong>retention time</strong>: The time (in seconds) at which the "
+    "spectrum was collected.</li><li><strong>mass</strong>: The uncharged "
+    "monoisotopic mass of the protein or peptide.</li><li><strong>charge</strong>: "
+    "The inferred charge state of the protein or peptide.</li><li><strong>intensity"
+    "</strong>: The intensity of the base isotope peak of the model used to predict "
+    "the protein or peptide.</li><li><strong>m/z</strong>: The m/z of the base peak."
+    "</li><li><strong>s/n</strong>: The signal-to-noise threshold, i.e., the relative "
+    "abundance a peak must exceed in the spectrum window to be considered in the "
+    "scoring algorithm. Note that this is a local noise threshold for the area of "
+    "the spectrum that the peptide was identified in.</li><li><strong>modifications"
+    "</strong>: Deviations to the averagine model. Only modifications specified by "
+    "the user are considered. If no modifications are found in a particular PPID, "
+    "then the column is marked with an underscore.</li><li><strong>dotp</strong>: "
+    "The dot product score applies to all predictions in a given spectrum window. "
+    "Thus, if two protein or peptide predictions share the same spectrum window, "
+    "then they have a single dot product score that is the score of their combined "
+    "peaks.</li></ol>"));
+  outputs.push_back(make_pair("hardklor.params.txt",
+    "a file containing the name and value of all parameters/options for the "
+    "current operation. Not all parameters in the file may have been used in "
+    "the operation. The resulting file can be used with the --parameter-file "
+    "option for other crux programs."));
+  outputs.push_back(make_pair("hardklor.log.txt",
+    "a log file containing a copy of all messages that were printed to "
+    "stderr."));
+  return outputs;
+}
+
+/**
+ * \returns whether the application needs the output directory or not. (default false).
+ */
+bool CruxHardklorApplication::needsOutputDirectory() const {
+  return true;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/hardklor/CruxHardklorApplication.h b/src/app/hardklor/CruxHardklorApplication.h
new file mode 100644
index 0000000..2a25324
--- /dev/null
+++ b/src/app/hardklor/CruxHardklorApplication.h
@@ -0,0 +1,88 @@
+/**
+ * \file CruxHardklorApplication.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 4 November 2011
+ * \brief Interface for calling hardklor.
+ *****************************************************************************/
+#ifndef CRUXHARDKLORAPPLICATION_H
+#define CRUXHARDKLORAPPLICATION_H
+
+#include "app/CruxApplication.h"
+
+#include <string>
+#include <fstream>
+
+class CruxHardklorApplication: public CruxApplication {
+
+ public:
+  CruxHardklorApplication();
+  ~CruxHardklorApplication();
+
+  virtual int main(int argc, char** argv);
+
+  /**
+   * \returns the command name for CruxHardklorApplication
+   */
+  virtual std::string getName() const;
+
+  /**
+   * \returns the description for CruxHardklorApplication
+   */
+  virtual std::string getDescription() const;
+
+  /**
+   * \returns the command arguments
+   */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+   * \returns the command options
+   */
+  virtual std::vector<std::string> getOptions() const;
+
+  /**
+   * \returns the command outputs
+   */
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+  /**
+   * \returns whether the application needs the output directory or not. (default false).
+   */
+  virtual bool needsOutputDirectory() const;
+
+  /**
+   * \brief runs hardklor on the input spectra
+   * \returns whether hardklor was successful or not
+   */
+  static int main(
+    const std::string& ms1 ///< file path of spectra to process
+  );
+  
+ protected:
+  static void addArg(
+    std::vector<char*>* args,
+    const std::string& arg
+  );
+
+  static void addArg(
+    std::vector<char*>* args,
+    const std::string& name,
+    const std::string& value
+  );
+
+  static void addArg(
+    std::vector<char*>* args,
+    const std::string& name,
+    bool value
+  );
+};
+
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/hardklor/FFT-HK.cpp b/src/app/hardklor/FFT-HK.cpp
new file mode 100644
index 0000000..fdc0499
--- /dev/null
+++ b/src/app/hardklor/FFT-HK.cpp
@@ -0,0 +1,227 @@
+#include "FFT-HK.h"
+#include <iostream>
+
+using namespace std;
+
+void FFTCharge(double *f, Spectrum& s, unsigned int start, unsigned int stop,
+							 unsigned int lowCharge, unsigned int highCharge, double interval, bool bSpline){
+
+	Spectrum fft;
+	Peak_T p;
+	double mz = s.at(start).mz;
+	p.mz = s.at(start).mz;
+	p.intensity = s.at(start).intensity;
+	double maxIntensity = 0;
+
+	int i;
+	int power;
+	int size = (highCharge - lowCharge + 1) * 3;
+	double *in;
+	complex *out;
+
+	//Find out how many points are needed and dimension arrays.
+	power=2;
+	while(power<(s.size()/2)) power*=2;
+	out = new complex[power];	
+	in = new double[power];
+
+	//Build the input array.
+	for(i=0;i<power;i++) {
+		if(i<(s.size()/2)) {
+			out[i].real=s.at(i*2).intensity;
+			out[i].imag=s.at(i*2+1).intensity;
+		} else {
+			out[i].real=0;
+			out[i].imag=0;
+		}
+
+	}
+
+	FFTreal(out,power);
+
+	//Create a spectrum of charge states and frequencies
+	for(i=0;i<power;i++){
+		p.mz = (double)i/(power*2*interval);
+		if(p.mz < (double)lowCharge - 0.5) continue;
+		if(p.mz > (double)highCharge + 0.5) break;
+		p.intensity = (float)sqrt(out[i].real*out[i].real+out[i].imag*out[i].imag);
+		fft.add(p);
+	}
+
+	//Linear interpolation of charge range at 1/3 intervals.
+	for(i=0;i<size;i++){
+		mz = (double)(i+2)/3 + (double)(lowCharge - 1);
+		f[i] = GetIntensity(fft,0,fft.size()-1,mz);
+		if(f[i]>maxIntensity) maxIntensity = f[i];
+	}
+
+	//Normalize
+	for(i=0;i<size;i++)	{
+		f[i]/=maxIntensity;
+		if(f[i]<0) f[i]=0;
+		if(f[i]>1) f[i]=1;
+		//cout << (double)(i+2)/3 + (double)(lowCharge - 1) << "\t" << f[i] << endl;
+	}
+
+	//Clean up memory
+	delete [] out;
+	delete [] in;
+
+	//cout << "FFT done" << endl;
+
+}
+
+void Patterson(double *f, Spectrum& s, unsigned int start, unsigned int stop,
+							 unsigned int lowCharge, unsigned int highCharge, double interval){
+
+	int i,j;
+	int size = (highCharge - lowCharge + 1) * 3;
+	double ch;
+	double shift = (double)(lowCharge-1);
+	double maxIntensity = 0;
+	
+	double mz1,mz2;
+
+	if(f==NULL) f = new double[size];
+
+	for(i=0;i<size;i++){
+		f[i]=0;
+		ch = (double)(i+2)/3 + shift;
+		ch = 1/ch;
+		ch /= 2;
+		for(j=start;j<=stop;j++){
+				mz1 = s.at(j).mz - ch;
+				mz2 = s.at(j).mz + ch;
+				f[i]+= (GetIntensity(s,start,stop,mz1) * GetIntensity(s,start,stop,mz2));
+		}
+		if(f[i]>maxIntensity) maxIntensity = f[i];
+	}
+
+	//Normalize
+	if(maxIntensity>0){
+		for(i=0;i<size;i++) {
+			f[i]/=maxIntensity;
+			if(f[i]<0)f[i]=0;
+			if(f[i]>1)f[i]=1;
+
+			//cout << (double)(i+2)/3 + shift << "\t" << f[i] << endl;
+		}
+	}
+	//exit(1);
+
+}
+
+double GetIntensity(Spectrum& s, unsigned int start, unsigned int stop, double mz){
+
+	int index;
+	int lower=start+1;
+	int upper=stop;
+
+	double slope;
+	double xDif;
+	float yDif;
+	float intercept;
+	double newX;
+
+	if(start+1>stop) return 0;
+
+	//binary search for correct point
+	while(true){
+		index = (lower + upper) / 2;
+		if(index==start) return 0;
+
+		if(s.at(index-1).mz < mz && s.at(index).mz > mz) {
+
+			//linear interpolation
+			yDif = s.at(index).intensity - s.at(index-1).intensity;
+			xDif = s.at(index).mz - s.at(index-1).mz;
+			slope = yDif/xDif;
+			intercept = s.at(index-1).intensity;
+			newX = mz - s.at(index-1).mz;
+			return slope * newX + intercept;
+
+		} else if(lower > upper) {
+			return 0;
+		} else {
+			if(s.at(index).mz < mz) {
+				lower = index + 1;			
+			} else {
+				upper = index - 1;
+			}
+		}
+	}
+
+}
+
+void SenkoCharge(vector<int> *charges, Spectrum& s, unsigned int start, unsigned int stop, 
+								 unsigned int lowCharge, unsigned int highCharge, double interval, char method) {
+
+	charges->clear();
+	double *array1;
+	double *array2;
+	float ch;
+	float maxPeak = 0;
+	int i,c;
+	unsigned int j;
+	int size = (highCharge - lowCharge + 1) * 3;
+	bool bFound;
+
+	/* use linear interpolation (splines do not perform well over large
+		 spaces that have 0 intensity).
+	*/
+	Spectrum spl;
+	Peak_T p;
+	double mz = s.at(start).mz;
+	p.mz = s.at(start).mz;
+	p.intensity = s.at(start).intensity;
+	spl.add(p);
+	while(true){
+		p.mz += interval;
+		if(p.mz > s.at(stop).mz) break;
+		p.intensity=(float)GetIntensity(s,start,stop,p.mz);
+		if(p.intensity<0) p.intensity=0;
+		spl.add(p);
+	}
+
+	switch(method){
+		case 'F':
+			array1 = new double[size];
+			FFTCharge(array1,spl,0,spl.size()-1,lowCharge,highCharge,interval);
+			break;
+		case 'P':
+			array1 = new double[size];
+			Patterson(array1,spl,0,spl.size()-1,lowCharge,highCharge,interval);
+			break;
+		case 'S':
+		default:
+			array1 = new double[size];
+			array2 = new double[size];
+			Patterson(array1,spl,0,spl.size()-1,lowCharge,highCharge,interval);
+			FFTCharge(array2,spl,0,spl.size()-1,lowCharge,highCharge,interval);
+			for(i=0;i<size;i++) array1[i]*=array2[i];
+			delete [] array2;
+			break;
+	}
+
+	//keep all charges that greater than 50% max peak
+	for(i=0;i<size-2;i++){
+		if( (array1[i+1] > array1[i]) && (array1[i+1] > array1[i+2]) && 
+			  (array1[i+1] > 0.5) ) {
+			ch = (float)(i+3)/3 + (float)(lowCharge - 1);
+			c = (int)(ch+0.5);
+
+			//check if charge already exists in list. If not, add it to the list.
+			bFound = false;
+			for(j=0;j<charges->size();j++){
+				if(charges->at(j)==c) {
+					bFound = true;
+					break;
+				}
+			}
+			if(!bFound) charges->push_back(c);
+		}
+	}
+
+	delete [] array1;
+
+}
diff --git a/src/app/hardklor/FFT-HK.h b/src/app/hardklor/FFT-HK.h
new file mode 100644
index 0000000..ebac5ac
--- /dev/null
+++ b/src/app/hardklor/FFT-HK.h
@@ -0,0 +1,20 @@
+#ifndef _FFT_HK_H
+#define _FFT_HK_H
+
+#include "MSReader.h"
+#include "FFT.h"
+#include <cmath>
+#include <vector>
+
+using namespace std;
+using namespace MSToolkit;
+
+void FFTCharge(double *f, Spectrum& s, unsigned int start, unsigned int stop,
+							 unsigned int lowCharge, unsigned int highCharge, double interval, bool bSpline=false);
+double GetIntensity(Spectrum& s, unsigned int start, unsigned int stop, double mz);
+void Patterson(double *f, Spectrum& s, unsigned int start, unsigned int stop,
+							 unsigned int lowCharge, unsigned int highCharge, double interval);
+void SenkoCharge(vector<int> *charges, Spectrum& s, unsigned int start, unsigned int stop, 
+								 unsigned int lowCharge, unsigned int highCharge, double interval, char method);
+
+#endif
diff --git a/src/app/hardklor/FFT.cpp b/src/app/hardklor/FFT.cpp
new file mode 100644
index 0000000..f96d6bd
--- /dev/null
+++ b/src/app/hardklor/FFT.cpp
@@ -0,0 +1,121 @@
+#include "FFT.h"
+
+void BitReverse(complex* data, int size){
+
+	complex swap;
+	int i,j,k;
+  j=0;
+	k=0;
+
+  for (i=0; i<size; i++) {
+
+		if (j > i) {
+			swap = data[i];
+			data[i] = data[j];
+			data[j] = swap;
+		};
+
+    k = size >> 1;
+    while ( k>1 && j>k-1 ) {
+			j -= k;
+			k >>= 1;
+    };
+    j += k;
+
+  };
+
+};
+
+void FFT(complex* data, int size, bool forward){
+
+	int dir;
+	int jump;
+	int level=1;
+	int i,j,k;
+	double a,b,c,d,e,f;
+	complex swap;
+
+	if(forward) dir=1;
+	else dir=-1;
+
+	BitReverse(data,size);
+
+  while (size > level) {
+
+		jump = level << 1;
+		a = dir*PI/level;			
+		b = sin(a);			 
+    c = sin(0.5*a);			
+    d = -2.0*c*c;  
+    e = 1.0;					
+    f = 0.0;						
+
+    for (i=0; i<level; i++){
+			for (j=i; j<size; j+=jump) {
+				k = j + level;
+				swap.real = (e*data[k].real) - (f*data[k].imag);
+				swap.imag = (e*data[k].imag) + (f*data[k].real);
+				data[k].real = data[j].real - swap.real;
+				data[k].imag = data[j].imag - swap.imag;
+				data[j].real += swap.real;
+				data[j].imag += swap.imag;
+			};
+			c = e;
+			e += (c*d) - (f*b);
+			f += (f*d) + (c*b);
+    };
+    level = jump;
+  };
+
+	/* Normalization - adapted from Mercury */
+	/*
+	if(forward) {
+    for (i=0; i<size; i++) {
+			data[i].real /= size;
+			data[i].imag /= size;
+    };
+	};
+	*/
+
+};
+
+void FFTreal(complex* data, int size){
+
+	int i,n;
+	double a,b,c,d,e,f;
+	complex x,x2;
+
+	FFT(data,size,true);
+	n=size>>1;
+
+	a = PI/size;	
+	b = sin(a);			
+  c = sin(0.5*a);	
+  d = -2.0*c*c;   
+  e = 1.0+d;		
+  f = b;	  		
+
+	for(i=1;i<n;i++) {
+
+		x.real=0.5*(data[i].real+data[size-i].real);
+		x.imag=0.5*(data[i].imag-data[size-i].imag);
+		x2.real=0.5*(data[i].imag+data[size-i].imag);
+		x2.imag=-0.5*(data[i].real-data[size-i].real);
+
+		data[i].real = x.real + e * x2.real - f * x2.imag;
+		data[i].imag = x.imag + e * x2.imag + f * x2.real;
+		data[size-i].real = x.real - e * x2.real + f * x2.imag;
+		data[size-i].imag = -x.imag + e * x2.imag + f * x2.real;
+
+		c = e;
+		e += (c*d) - (f*b);
+		f += (f*d) + (c*b);
+
+	};
+	
+	d=data[0].real;
+	data[0].real=d+data[0].imag;
+	data[0].imag=d-data[0].imag;
+	
+
+};
diff --git a/src/app/hardklor/FFT.h b/src/app/hardklor/FFT.h
new file mode 100644
index 0000000..495f591
--- /dev/null
+++ b/src/app/hardklor/FFT.h
@@ -0,0 +1,20 @@
+#ifndef _FFT_H
+#define _FFT_H
+
+#include <cmath>
+
+#ifndef PI
+#define PI      3.14159265358979323846
+#endif
+
+typedef struct complex{
+	double real;
+	double imag;
+} complex;
+
+
+void BitReverse(complex* data, int size);
+void FFT(complex* data, int size, bool forward);
+void FFTreal(complex* data, int size);
+
+#endif
diff --git a/src/app/hardklor/Hardklor.dat b/src/app/hardklor/Hardklor.dat
new file mode 100644
index 0000000..fb68620
--- /dev/null
+++ b/src/app/hardklor/Hardklor.dat
@@ -0,0 +1,109 @@
+0	X	0
+1	H	1.0078246
+2	He	3.01603 
+3	Li	6.015121
+4	Be	9.012182 
+5	B	10.012937 
+6	C	12.0000000
+7	N	14.0030732
+8	O	15.9949141 
+9	F	18.9984032 
+10	Ne	19.992435
+11	Na	22.989767 
+12	Mg	23.985042 
+13	Al	26.981539 
+14	Si	27.976927 
+15	P	30.973762 
+16	S	31.972070  
+17	Cl	34.9688531 
+18	Ar	35.967545 
+19	K	38.963707
+20	Ca	39.962591
+21	Sc	44.955910 
+22	Ti	45.952629 
+23	V	49.947161 
+24	Cr	49.946046 
+25	Mn	54.938047
+26	Fe	53.939612 
+27	Co	58.933198
+28	Ni	57.935346 
+29	Cu	62.939598 
+30	Zn	63.929145 
+31	Ga	68.925580 
+32	Ge	69.924250
+33	As	74.921594
+34	Se	73.922475 
+35	Br	78.918336 
+36	Kr	77.914    
+37	Rb	84.911794
+38	Sr	83.913430 
+39	Y	88.905849
+40	Zr	89.904703
+41	Nb	92.906377
+42	Mo	91.906808
+43	Tc	98.0 
+44	Ru	95.907599
+45	Rh	102.905500
+46	Pd	101.905634
+47	Ag	106.905092
+48	Cd	105.906461
+49	In	112.904061
+50	Sn	111.904826
+51	Sb	120.903821
+52	Te	119.904048
+53	I	126.904473
+54	Xe	123.905894
+55	Cs	132.905429
+56	Ba	129.906282
+57	La	137.90711
+58	Ce	135.907140
+59	Pr	140.907647
+60	Nd	141.907719
+61	Pm	145.0
+62	Sm	143.911998 
+63	Eu	150.919847
+64	Gd	151.919786
+65	Tb	158.925342
+66	Dy	155.925277
+67	Ho	164.930319
+68	Er	161.928775
+69	Tm	168.934212
+70	Yb	167.933894
+71	Lu	174.940770
+72	Hf	173.940044
+73	Ta	179.947462
+74	W	179.946701
+75	Re	184.952951
+76	Os	183.952488
+77	Ir	190.960584
+78	Pt	189.959917
+79	Au	196.966543
+80	Hg	195.965807
+81	Tl	202.972320
+82	Pb	203.973020
+83	Bi	208.980374
+84	Po	209.0
+85	At	210.0
+86	Rn	222.0
+87	Fr	223.0
+88	Ra	226.025
+89	Ac	227.028
+90	Th	232.038054
+91	Pa	231.0359
+92	U	234.040946
+93	Np	237.048
+94	Pu	244.0
+95	Am	243.0
+96	Cm	247.0
+97	Bk	247.0
+98	Cf	251.0
+99	Es	252.0
+100	Fm	257.0
+101	Md	258.0
+102	No	259.0
+103	Lr	260.0
+104	Hx	1.0078246
+105	Cx	12.0000000
+106	Nx	14.0030732
+107	Ox	15.9949141
+108	Sx	31.972070  
diff --git a/src/app/hardklor/Hardklor2008.aps b/src/app/hardklor/Hardklor2008.aps
new file mode 100644
index 0000000..35b897b
Binary files /dev/null and b/src/app/hardklor/Hardklor2008.aps differ
diff --git a/src/app/hardklor/Hardklor2008.rc b/src/app/hardklor/Hardklor2008.rc
new file mode 100644
index 0000000..00fc8fd
--- /dev/null
+++ b/src/app/hardklor/Hardklor2008.rc
@@ -0,0 +1,55 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource1.h"
+
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_ICON2               ICON                    "Images\\Hardklor5.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 2,0,4,0
+ PRODUCTVERSION 2,0,4,0
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "Comments", "Michael R. Hoopmann, Michael J. MacCoss, Build Date: June 11, 2012"
+            VALUE "CompanyName", "University of Washington, Department of Genome Sciences"
+            VALUE "FileDescription", "Hardkl�r"
+            VALUE "FileVersion", "2, 0, 6, 0"
+            VALUE "InternalName", "Hardkl�r"
+            VALUE "LegalCopyright", "Copyright (C) 2007-2012"
+            VALUE "OriginalFilename", "Hardklor.exe"
+            VALUE "ProductName", "Hardkl�r"
+            VALUE "ProductVersion", "2, 0, 6, 0"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+
diff --git a/src/app/hardklor/Hardklor2008.vcproj b/src/app/hardklor/Hardklor2008.vcproj
new file mode 100644
index 0000000..408cc0b
--- /dev/null
+++ b/src/app/hardklor/Hardklor2008.vcproj
@@ -0,0 +1,370 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="Hardklor2008"
+	ProjectGUID="{34E42C02-DB3A-4486-AF3D-F889F9F2C592}"
+	RootNamespace="Hardklor2008"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\MSToolkit\RAMP;..\zlib;..\MSToolkit"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="MSToolkitLite.lib zLib.lib"
+				OutputFile="$(OutDir)\Hardklor.exe"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="..\MSToolkit\Release;..\zlib\zlib\Release"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/D "_CRT_SECURE_NO_WARNINGS""
+				Optimization="2"
+				EnableIntrinsicFunctions="true"
+				AdditionalIncludeDirectories=""C:\Users\mhoopman\Documents\Software Development\MSToolkit\include""
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_ATL_MIXED;_CRT_SECURE_NO_WARNINGS;_NOSQLITE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="MSToolkitLite.lib"
+				OutputFile="$(OutDir)\Hardklor.exe"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories=""C:\Users\mhoopman\Documents\Software Development\MSToolkit\Release""
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath=".\CAveragine.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\CHardklor.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\CHardklor2.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\CHardklorOutput.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\CHardklorParser.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\CHardklorSetting.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\CHardklorVariant.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\CMercury8.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\CModelLibrary.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\CNoiseReduction.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\CPeriodicTable.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\CSpecAnalyze.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\CSplitSpectrum.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\FFT-HK.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\FFT.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\HardklorApp.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\S2N.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\Smooth.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\SpecAnalyzeSupport.cpp"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath=".\CAveragine.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CHardklor.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CHardklor2.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CHardklorOutput.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CHardklorParser.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CHardklorSetting.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CHardklorVariant.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CMercury8.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CModelLibrary.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CNoiseReduction.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CPeriodicTable.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CSpecAnalyze.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CSplitSpectrum.h"
+				>
+			</File>
+			<File
+				RelativePath=".\FFT-HK.h"
+				>
+			</File>
+			<File
+				RelativePath=".\FFT.h"
+				>
+			</File>
+			<File
+				RelativePath=".\HardklorTypes.h"
+				>
+			</File>
+			<File
+				RelativePath=".\mercury.h"
+				>
+			</File>
+			<File
+				RelativePath=".\resource.h"
+				>
+			</File>
+			<File
+				RelativePath=".\resource1.h"
+				>
+			</File>
+			<File
+				RelativePath=".\S2N.h"
+				>
+			</File>
+			<File
+				RelativePath=".\Smooth.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SpecAnalyzeSupport.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath=".\Hardklor2008.rc"
+				>
+			</File>
+			<File
+				RelativePath=".\Images\Hardklor5.ico"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/src/app/hardklor/HardklorTypes.h b/src/app/hardklor/HardklorTypes.h
new file mode 100644
index 0000000..3ed9ebf
--- /dev/null
+++ b/src/app/hardklor/HardklorTypes.h
@@ -0,0 +1,140 @@
+#ifndef _HARDKLORTYPES_H
+#define _HARDKLORTYPES_H
+
+#include "MSToolkitTypes.h"
+
+#include <string>
+#include <vector>
+
+using namespace std;
+using namespace MSToolkit;
+
+enum specType {
+	OrbiTrap,
+	TOF,
+	QIT,
+	FTICR
+};
+
+enum hkAlgorithm {
+	Basic,
+	SemiComplete,
+	SemiCompleteFast,
+	Dynamic,
+	DynamicSemiComplete,
+	SemiSubtractive,
+	FewestPeptides,
+	FewestPeptidesChoice,
+	FastFewestPeptides,
+	FastFewestPeptidesChoice,
+	Version2
+};
+
+enum hkOutputFormat{
+	hk,
+	pepXML
+};
+
+typedef struct {
+  char atom[3];
+  int isotope;
+  double ape;
+} sEnrich;
+
+typedef struct {
+  string molecule;
+  int iLower;
+  int iUpper;
+} sMolecule;
+
+typedef struct {
+  int iLower;
+  int iUpper;
+} sInt;
+
+typedef struct{
+  double dLower;
+  double dUpper;
+} sDouble;
+
+typedef struct{
+  float fLower;
+  float fUpper;
+} sFloat;
+
+typedef struct{
+  int iValue;
+  double dValue;
+} sID;
+
+typedef struct{
+  int atomNum;
+  int isotope;
+  double ape;
+} sEnrichMercury;
+
+typedef struct{
+  double mz;
+  float intensity;
+  int index;
+} sSplit;
+
+//Do this better
+enum ScanType{
+  Zoom,
+  UltraZoom,
+  IonSpec2,
+  Other
+};
+
+typedef struct {
+  char id[5];
+  double mz;
+  double monoMass;
+  double shft;
+  double abun;
+  int charge;
+  char seq[31];
+  int C;
+  int H;
+  int O;
+  int N;
+  int S;
+  vector<sID> *enrich;
+} peps;
+
+typedef struct pepHit{
+	int basePeakIndex;
+	int charge;
+	int lowIndex;
+	int highIndex;
+	int variantIndex;
+	float intensity;
+	float area;
+	double massShift;
+	double lowMZ;
+	double highMZ;
+	double monoMass;
+	double corr;
+	char averagine[32];
+} pepHit;
+
+typedef struct mercuryModel{
+	float area;
+	int size;
+	double zeroMass;
+	Peak_T* peaks;
+} mercuryModel;
+
+//for storing results to memory for modular Hardklor runs
+typedef struct hkMem{
+  int charge;
+  int scan;
+  float intensity; //or area depending on settings.
+  double corr;
+  double monoMass;
+  double mz;
+  char mods[32];
+} hkMem;
+
+#endif
diff --git a/src/app/hardklor/Makefile b/src/app/hardklor/Makefile
new file mode 100644
index 0000000..979187c
--- /dev/null
+++ b/src/app/hardklor/Makefile
@@ -0,0 +1,720 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 2.8
+
+# Default target executed when no arguments are given to make.
+default_target: all
+.PHONY : default_target
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+# A target that is always out of date.
+cmake_force:
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake
+
+# The command to remove a file.
+RM = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The program to use to edit the cache.
+CMAKE_EDIT_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target edit_cache
+edit_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+.PHONY : edit_cache/fast
+
+# Special rule for the target install
+install: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install
+
+# Special rule for the target install
+install/fast: preinstall/fast
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install/fast
+
+# Special rule for the target install/local
+install/local: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local
+
+# Special rule for the target install/local
+install/local/fast: install/local
+.PHONY : install/local/fast
+
+# Special rule for the target install/strip
+install/strip: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip
+
+# Special rule for the target install/strip
+install/strip/fast: install/strip
+.PHONY : install/strip/fast
+
+# Special rule for the target list_install_components
+list_install_components:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
+.PHONY : list_install_components
+
+# Special rule for the target list_install_components
+list_install_components/fast: list_install_components
+.PHONY : list_install_components/fast
+
+# Special rule for the target package
+package: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackConfig.cmake
+.PHONY : package
+
+# Special rule for the target package
+package/fast: package
+.PHONY : package/fast
+
+# Special rule for the target package_source
+package_source:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool for source..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackSourceConfig.cmake /data/TeamCity/buildAgent/work/779d99b0241b2175/CPackSourceConfig.cmake
+.PHONY : package_source
+
+# Special rule for the target package_source
+package_source/fast: package_source
+.PHONY : package_source/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+.PHONY : rebuild_cache/fast
+
+# The main all target
+all: cmake_check_build_system
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles /data/TeamCity/buildAgent/work/779d99b0241b2175/src/app/hardklor/CMakeFiles/progress.marks
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/hardklor/all
+	$(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/hardklor/clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/hardklor/preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/hardklor/preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+.PHONY : depend
+
+# Convenience name for target.
+src/app/hardklor/CMakeFiles/hardklor.dir/rule:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/hardklor/CMakeFiles/hardklor.dir/rule
+.PHONY : src/app/hardklor/CMakeFiles/hardklor.dir/rule
+
+# Convenience name for target.
+hardklor: src/app/hardklor/CMakeFiles/hardklor.dir/rule
+.PHONY : hardklor
+
+# fast build rule for target.
+hardklor/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/build
+.PHONY : hardklor/fast
+
+CAveragine.o: CAveragine.cpp.o
+.PHONY : CAveragine.o
+
+# target to build an object file
+CAveragine.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CAveragine.cpp.o
+.PHONY : CAveragine.cpp.o
+
+CAveragine.i: CAveragine.cpp.i
+.PHONY : CAveragine.i
+
+# target to preprocess a source file
+CAveragine.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CAveragine.cpp.i
+.PHONY : CAveragine.cpp.i
+
+CAveragine.s: CAveragine.cpp.s
+.PHONY : CAveragine.s
+
+# target to generate assembly for a file
+CAveragine.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CAveragine.cpp.s
+.PHONY : CAveragine.cpp.s
+
+CHardklor.o: CHardklor.cpp.o
+.PHONY : CHardklor.o
+
+# target to build an object file
+CHardklor.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklor.cpp.o
+.PHONY : CHardklor.cpp.o
+
+CHardklor.i: CHardklor.cpp.i
+.PHONY : CHardklor.i
+
+# target to preprocess a source file
+CHardklor.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklor.cpp.i
+.PHONY : CHardklor.cpp.i
+
+CHardklor.s: CHardklor.cpp.s
+.PHONY : CHardklor.s
+
+# target to generate assembly for a file
+CHardklor.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklor.cpp.s
+.PHONY : CHardklor.cpp.s
+
+CHardklor2.o: CHardklor2.cpp.o
+.PHONY : CHardklor2.o
+
+# target to build an object file
+CHardklor2.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklor2.cpp.o
+.PHONY : CHardklor2.cpp.o
+
+CHardklor2.i: CHardklor2.cpp.i
+.PHONY : CHardklor2.i
+
+# target to preprocess a source file
+CHardklor2.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklor2.cpp.i
+.PHONY : CHardklor2.cpp.i
+
+CHardklor2.s: CHardklor2.cpp.s
+.PHONY : CHardklor2.s
+
+# target to generate assembly for a file
+CHardklor2.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklor2.cpp.s
+.PHONY : CHardklor2.cpp.s
+
+CHardklorParser.o: CHardklorParser.cpp.o
+.PHONY : CHardklorParser.o
+
+# target to build an object file
+CHardklorParser.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklorParser.cpp.o
+.PHONY : CHardklorParser.cpp.o
+
+CHardklorParser.i: CHardklorParser.cpp.i
+.PHONY : CHardklorParser.i
+
+# target to preprocess a source file
+CHardklorParser.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklorParser.cpp.i
+.PHONY : CHardklorParser.cpp.i
+
+CHardklorParser.s: CHardklorParser.cpp.s
+.PHONY : CHardklorParser.s
+
+# target to generate assembly for a file
+CHardklorParser.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklorParser.cpp.s
+.PHONY : CHardklorParser.cpp.s
+
+CHardklorProtein.o: CHardklorProtein.cpp.o
+.PHONY : CHardklorProtein.o
+
+# target to build an object file
+CHardklorProtein.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklorProtein.cpp.o
+.PHONY : CHardklorProtein.cpp.o
+
+CHardklorProtein.i: CHardklorProtein.cpp.i
+.PHONY : CHardklorProtein.i
+
+# target to preprocess a source file
+CHardklorProtein.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklorProtein.cpp.i
+.PHONY : CHardklorProtein.cpp.i
+
+CHardklorProtein.s: CHardklorProtein.cpp.s
+.PHONY : CHardklorProtein.s
+
+# target to generate assembly for a file
+CHardklorProtein.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklorProtein.cpp.s
+.PHONY : CHardklorProtein.cpp.s
+
+CHardklorSetting.o: CHardklorSetting.cpp.o
+.PHONY : CHardklorSetting.o
+
+# target to build an object file
+CHardklorSetting.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklorSetting.cpp.o
+.PHONY : CHardklorSetting.cpp.o
+
+CHardklorSetting.i: CHardklorSetting.cpp.i
+.PHONY : CHardklorSetting.i
+
+# target to preprocess a source file
+CHardklorSetting.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklorSetting.cpp.i
+.PHONY : CHardklorSetting.cpp.i
+
+CHardklorSetting.s: CHardklorSetting.cpp.s
+.PHONY : CHardklorSetting.s
+
+# target to generate assembly for a file
+CHardklorSetting.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklorSetting.cpp.s
+.PHONY : CHardklorSetting.cpp.s
+
+CHardklorVariant.o: CHardklorVariant.cpp.o
+.PHONY : CHardklorVariant.o
+
+# target to build an object file
+CHardklorVariant.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklorVariant.cpp.o
+.PHONY : CHardklorVariant.cpp.o
+
+CHardklorVariant.i: CHardklorVariant.cpp.i
+.PHONY : CHardklorVariant.i
+
+# target to preprocess a source file
+CHardklorVariant.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklorVariant.cpp.i
+.PHONY : CHardklorVariant.cpp.i
+
+CHardklorVariant.s: CHardklorVariant.cpp.s
+.PHONY : CHardklorVariant.s
+
+# target to generate assembly for a file
+CHardklorVariant.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CHardklorVariant.cpp.s
+.PHONY : CHardklorVariant.cpp.s
+
+CMercury8.o: CMercury8.cpp.o
+.PHONY : CMercury8.o
+
+# target to build an object file
+CMercury8.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CMercury8.cpp.o
+.PHONY : CMercury8.cpp.o
+
+CMercury8.i: CMercury8.cpp.i
+.PHONY : CMercury8.i
+
+# target to preprocess a source file
+CMercury8.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CMercury8.cpp.i
+.PHONY : CMercury8.cpp.i
+
+CMercury8.s: CMercury8.cpp.s
+.PHONY : CMercury8.s
+
+# target to generate assembly for a file
+CMercury8.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CMercury8.cpp.s
+.PHONY : CMercury8.cpp.s
+
+CModelLibrary.o: CModelLibrary.cpp.o
+.PHONY : CModelLibrary.o
+
+# target to build an object file
+CModelLibrary.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CModelLibrary.cpp.o
+.PHONY : CModelLibrary.cpp.o
+
+CModelLibrary.i: CModelLibrary.cpp.i
+.PHONY : CModelLibrary.i
+
+# target to preprocess a source file
+CModelLibrary.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CModelLibrary.cpp.i
+.PHONY : CModelLibrary.cpp.i
+
+CModelLibrary.s: CModelLibrary.cpp.s
+.PHONY : CModelLibrary.s
+
+# target to generate assembly for a file
+CModelLibrary.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CModelLibrary.cpp.s
+.PHONY : CModelLibrary.cpp.s
+
+CNoiseReduction.o: CNoiseReduction.cpp.o
+.PHONY : CNoiseReduction.o
+
+# target to build an object file
+CNoiseReduction.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CNoiseReduction.cpp.o
+.PHONY : CNoiseReduction.cpp.o
+
+CNoiseReduction.i: CNoiseReduction.cpp.i
+.PHONY : CNoiseReduction.i
+
+# target to preprocess a source file
+CNoiseReduction.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CNoiseReduction.cpp.i
+.PHONY : CNoiseReduction.cpp.i
+
+CNoiseReduction.s: CNoiseReduction.cpp.s
+.PHONY : CNoiseReduction.s
+
+# target to generate assembly for a file
+CNoiseReduction.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CNoiseReduction.cpp.s
+.PHONY : CNoiseReduction.cpp.s
+
+CPeriodicTable.o: CPeriodicTable.cpp.o
+.PHONY : CPeriodicTable.o
+
+# target to build an object file
+CPeriodicTable.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CPeriodicTable.cpp.o
+.PHONY : CPeriodicTable.cpp.o
+
+CPeriodicTable.i: CPeriodicTable.cpp.i
+.PHONY : CPeriodicTable.i
+
+# target to preprocess a source file
+CPeriodicTable.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CPeriodicTable.cpp.i
+.PHONY : CPeriodicTable.cpp.i
+
+CPeriodicTable.s: CPeriodicTable.cpp.s
+.PHONY : CPeriodicTable.s
+
+# target to generate assembly for a file
+CPeriodicTable.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CPeriodicTable.cpp.s
+.PHONY : CPeriodicTable.cpp.s
+
+CSpecAnalyze.o: CSpecAnalyze.cpp.o
+.PHONY : CSpecAnalyze.o
+
+# target to build an object file
+CSpecAnalyze.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CSpecAnalyze.cpp.o
+.PHONY : CSpecAnalyze.cpp.o
+
+CSpecAnalyze.i: CSpecAnalyze.cpp.i
+.PHONY : CSpecAnalyze.i
+
+# target to preprocess a source file
+CSpecAnalyze.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CSpecAnalyze.cpp.i
+.PHONY : CSpecAnalyze.cpp.i
+
+CSpecAnalyze.s: CSpecAnalyze.cpp.s
+.PHONY : CSpecAnalyze.s
+
+# target to generate assembly for a file
+CSpecAnalyze.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CSpecAnalyze.cpp.s
+.PHONY : CSpecAnalyze.cpp.s
+
+CSplitSpectrum.o: CSplitSpectrum.cpp.o
+.PHONY : CSplitSpectrum.o
+
+# target to build an object file
+CSplitSpectrum.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CSplitSpectrum.cpp.o
+.PHONY : CSplitSpectrum.cpp.o
+
+CSplitSpectrum.i: CSplitSpectrum.cpp.i
+.PHONY : CSplitSpectrum.i
+
+# target to preprocess a source file
+CSplitSpectrum.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CSplitSpectrum.cpp.i
+.PHONY : CSplitSpectrum.cpp.i
+
+CSplitSpectrum.s: CSplitSpectrum.cpp.s
+.PHONY : CSplitSpectrum.s
+
+# target to generate assembly for a file
+CSplitSpectrum.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CSplitSpectrum.cpp.s
+.PHONY : CSplitSpectrum.cpp.s
+
+CruxHardklorApplication.o: CruxHardklorApplication.cpp.o
+.PHONY : CruxHardklorApplication.o
+
+# target to build an object file
+CruxHardklorApplication.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CruxHardklorApplication.cpp.o
+.PHONY : CruxHardklorApplication.cpp.o
+
+CruxHardklorApplication.i: CruxHardklorApplication.cpp.i
+.PHONY : CruxHardklorApplication.i
+
+# target to preprocess a source file
+CruxHardklorApplication.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CruxHardklorApplication.cpp.i
+.PHONY : CruxHardklorApplication.cpp.i
+
+CruxHardklorApplication.s: CruxHardklorApplication.cpp.s
+.PHONY : CruxHardklorApplication.s
+
+# target to generate assembly for a file
+CruxHardklorApplication.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/CruxHardklorApplication.cpp.s
+.PHONY : CruxHardklorApplication.cpp.s
+
+FFT-HK.o: FFT-HK.cpp.o
+.PHONY : FFT-HK.o
+
+# target to build an object file
+FFT-HK.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/FFT-HK.cpp.o
+.PHONY : FFT-HK.cpp.o
+
+FFT-HK.i: FFT-HK.cpp.i
+.PHONY : FFT-HK.i
+
+# target to preprocess a source file
+FFT-HK.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/FFT-HK.cpp.i
+.PHONY : FFT-HK.cpp.i
+
+FFT-HK.s: FFT-HK.cpp.s
+.PHONY : FFT-HK.s
+
+# target to generate assembly for a file
+FFT-HK.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/FFT-HK.cpp.s
+.PHONY : FFT-HK.cpp.s
+
+FFT.o: FFT.cpp.o
+.PHONY : FFT.o
+
+# target to build an object file
+FFT.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/FFT.cpp.o
+.PHONY : FFT.cpp.o
+
+FFT.i: FFT.cpp.i
+.PHONY : FFT.i
+
+# target to preprocess a source file
+FFT.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/FFT.cpp.i
+.PHONY : FFT.cpp.i
+
+FFT.s: FFT.cpp.s
+.PHONY : FFT.s
+
+# target to generate assembly for a file
+FFT.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/FFT.cpp.s
+.PHONY : FFT.cpp.s
+
+S2N.o: S2N.cpp.o
+.PHONY : S2N.o
+
+# target to build an object file
+S2N.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/S2N.cpp.o
+.PHONY : S2N.cpp.o
+
+S2N.i: S2N.cpp.i
+.PHONY : S2N.i
+
+# target to preprocess a source file
+S2N.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/S2N.cpp.i
+.PHONY : S2N.cpp.i
+
+S2N.s: S2N.cpp.s
+.PHONY : S2N.s
+
+# target to generate assembly for a file
+S2N.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/S2N.cpp.s
+.PHONY : S2N.cpp.s
+
+Smooth.o: Smooth.cpp.o
+.PHONY : Smooth.o
+
+# target to build an object file
+Smooth.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/Smooth.cpp.o
+.PHONY : Smooth.cpp.o
+
+Smooth.i: Smooth.cpp.i
+.PHONY : Smooth.i
+
+# target to preprocess a source file
+Smooth.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/Smooth.cpp.i
+.PHONY : Smooth.cpp.i
+
+Smooth.s: Smooth.cpp.s
+.PHONY : Smooth.s
+
+# target to generate assembly for a file
+Smooth.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/Smooth.cpp.s
+.PHONY : Smooth.cpp.s
+
+SpecAnalyzeSupport.o: SpecAnalyzeSupport.cpp.o
+.PHONY : SpecAnalyzeSupport.o
+
+# target to build an object file
+SpecAnalyzeSupport.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/SpecAnalyzeSupport.cpp.o
+.PHONY : SpecAnalyzeSupport.cpp.o
+
+SpecAnalyzeSupport.i: SpecAnalyzeSupport.cpp.i
+.PHONY : SpecAnalyzeSupport.i
+
+# target to preprocess a source file
+SpecAnalyzeSupport.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/SpecAnalyzeSupport.cpp.i
+.PHONY : SpecAnalyzeSupport.cpp.i
+
+SpecAnalyzeSupport.s: SpecAnalyzeSupport.cpp.s
+.PHONY : SpecAnalyzeSupport.s
+
+# target to generate assembly for a file
+SpecAnalyzeSupport.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/hardklor/CMakeFiles/hardklor.dir/build.make src/app/hardklor/CMakeFiles/hardklor.dir/SpecAnalyzeSupport.cpp.s
+.PHONY : SpecAnalyzeSupport.cpp.s
+
+# Help Target
+help:
+	@echo "The following are some of the valid targets for this Makefile:"
+	@echo "... all (the default if no target is provided)"
+	@echo "... clean"
+	@echo "... depend"
+	@echo "... edit_cache"
+	@echo "... hardklor"
+	@echo "... install"
+	@echo "... install/local"
+	@echo "... install/strip"
+	@echo "... list_install_components"
+	@echo "... package"
+	@echo "... package_source"
+	@echo "... rebuild_cache"
+	@echo "... CAveragine.o"
+	@echo "... CAveragine.i"
+	@echo "... CAveragine.s"
+	@echo "... CHardklor.o"
+	@echo "... CHardklor.i"
+	@echo "... CHardklor.s"
+	@echo "... CHardklor2.o"
+	@echo "... CHardklor2.i"
+	@echo "... CHardklor2.s"
+	@echo "... CHardklorParser.o"
+	@echo "... CHardklorParser.i"
+	@echo "... CHardklorParser.s"
+	@echo "... CHardklorProtein.o"
+	@echo "... CHardklorProtein.i"
+	@echo "... CHardklorProtein.s"
+	@echo "... CHardklorSetting.o"
+	@echo "... CHardklorSetting.i"
+	@echo "... CHardklorSetting.s"
+	@echo "... CHardklorVariant.o"
+	@echo "... CHardklorVariant.i"
+	@echo "... CHardklorVariant.s"
+	@echo "... CMercury8.o"
+	@echo "... CMercury8.i"
+	@echo "... CMercury8.s"
+	@echo "... CModelLibrary.o"
+	@echo "... CModelLibrary.i"
+	@echo "... CModelLibrary.s"
+	@echo "... CNoiseReduction.o"
+	@echo "... CNoiseReduction.i"
+	@echo "... CNoiseReduction.s"
+	@echo "... CPeriodicTable.o"
+	@echo "... CPeriodicTable.i"
+	@echo "... CPeriodicTable.s"
+	@echo "... CSpecAnalyze.o"
+	@echo "... CSpecAnalyze.i"
+	@echo "... CSpecAnalyze.s"
+	@echo "... CSplitSpectrum.o"
+	@echo "... CSplitSpectrum.i"
+	@echo "... CSplitSpectrum.s"
+	@echo "... CruxHardklorApplication.o"
+	@echo "... CruxHardklorApplication.i"
+	@echo "... CruxHardklorApplication.s"
+	@echo "... FFT-HK.o"
+	@echo "... FFT-HK.i"
+	@echo "... FFT-HK.s"
+	@echo "... FFT.o"
+	@echo "... FFT.i"
+	@echo "... FFT.s"
+	@echo "... S2N.o"
+	@echo "... S2N.i"
+	@echo "... S2N.s"
+	@echo "... Smooth.o"
+	@echo "... Smooth.i"
+	@echo "... Smooth.s"
+	@echo "... SpecAnalyzeSupport.o"
+	@echo "... SpecAnalyzeSupport.i"
+	@echo "... SpecAnalyzeSupport.s"
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/src/app/hardklor/Makefile.hardklor b/src/app/hardklor/Makefile.hardklor
new file mode 100644
index 0000000..95eebec
--- /dev/null
+++ b/src/app/hardklor/Makefile.hardklor
@@ -0,0 +1,94 @@
+#Set these variables if needed
+C = gcc
+CC = g++
+FLAGS = -O3 -static -D_NOSQLITE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DGCC
+
+#Path to MSToolkit
+
+LIBPATH = ../MSToolkit
+LIBS = -lmstoolkitlite
+
+#INCLUDE = -I$(LIBPATH) -I$(LIBPATH)/mzParser
+INCLUDE=-I$(LIBPATH)/include
+
+#Do not touch these variables
+SUPPORT = S2N.o Smooth.o FFT.o
+HARDKLOR = CHardklor.o \
+           CHardklor2.o \
+           CAveragine.o \
+           CPeriodicTable.o \
+           CHardklorVariant.o \
+           CHardklorSetting.o \
+           CHardklorParser.o \
+	   CModelLibrary.o \
+           CNoiseReduction.o \
+           CSplitSpectrum.o CMercury8.o CSpecAnalyze.o CHardklorProtein.o SpecAnalyzeSupport.o FFT-HK.o
+
+
+#Make statements
+hardklor : HardklorApp.cpp $(HARDKLOR) $(SUPPORT)
+	$(CC) $(FLAGS) $(INCLUDE) $(SUPPORT) $(HARDKLOR) HardklorApp.cpp -L$(LIBPATH) $(LIBS) -o hardklor
+
+clean:
+	rm *.o hardklor
+
+
+#Hardklor objects
+
+
+
+S2N.o : S2N.cpp
+	$(CC) $(FLAGS) $(INCLUDE)  S2N.cpp -c
+
+Smooth.o : Smooth.cpp
+	$(CC) $(FLAGS) $(INCLUDE) Smooth.cpp -c
+
+FFT.o : FFT.cpp
+	$(CC) $(FLAGS) $(INCLUDE) FFT.cpp -c
+
+CHardklor.o : CHardklor.cpp
+	$(CC) $(FLAGS) $(INCLUDE) CHardklor.cpp -c
+
+CHardklor2.o : CHardklor2.cpp
+	$(CC) $(FLAGS) $(INCLUDE) CHardklor2.cpp -c
+
+
+CAveragine.o : CAveragine.cpp
+	$(CC) $(FLAGS) $(INCLUDE) CAveragine.cpp -c
+
+CPeriodicTable.o : CPeriodicTable.cpp
+	$(CC) $(FLAGS) $(INCLUDE) CPeriodicTable.cpp -c
+
+CHardklorVariant.o : CHardklorVariant.cpp
+	$(CC) $(FLAGS) $(INCLUDE) CHardklorVariant.cpp -c
+
+CHardklorSetting.o : CHardklorSetting.cpp
+	$(CC) $(FLAGS) $(INCLUDE) CHardklorSetting.cpp -c
+
+CHardklorParser.o : CHardklorParser.cpp
+	$(CC) $(FLAGS) $(INCLUDE) CHardklorParser.cpp -c
+
+CModelLibrary.o : CModelLibrary.cpp
+	$(CC) $(FLAGS) $(INCLUDE) CModelLibrary.cpp -c
+
+CSplitSpectrum.o : CSplitSpectrum.cpp
+	$(CC) $(FLAGS) $(INCLUDE) CSplitSpectrum.cpp -c
+
+CMercury8.o : CMercury8.cpp
+	$(CC) $(FLAGS) $(INCLUDE) CMercury8.cpp -c
+
+CSpecAnalyze.o : CSpecAnalyze.cpp
+	$(CC) $(FLAGS) $(INCLUDE) CSpecAnalyze.cpp -c
+	$(CC) $(FLAGS) $(INCLUDE) CSplitSpectrum.cpp -c
+	$(CC) $(FLAGS) $(INCLUDE) SpecAnalyzeSupport.cpp -c
+	$(CC) $(FLAGS) $(INCLUDE) FFT-HK.cpp -c
+
+CHardklorProtein.o : CHardklorProtein.cpp
+	$(CC) $(FLAGS) $(INCLUDE) CHardklorProtein.cpp -c
+
+SpecAnalyzeSupport.o : SpecAnalyzeSupport.cpp
+	$(CC) $(FLAGS) $(INCLUDE) SpecAnalyzeSupport.cpp -c
+
+CNoiseReduction.o : CNoiseReduction.cpp
+	$(CC) $(FLAGS) $(INCLUDE) CNoiseReduction.cpp -c
+
diff --git a/src/app/hardklor/README.txt b/src/app/hardklor/README.txt
new file mode 100644
index 0000000..a7e501b
--- /dev/null
+++ b/src/app/hardklor/README.txt
@@ -0,0 +1,53 @@
+App: Hardklor
+Purpose: Analyze mass spectra
+
+Version History
+------------------------------------------
+1.0 - Apr 17 2007 - Stable release
+1.01 - May 17 2007 - Recompiled with latest MSToolkit(1.1)
+1.02 - Jun 15 2007 - Fixed monoisotopic mass bug
+1.03 - Aug 29 2007 - Added sensitivity level parameter - much better low abundance peptide performance. Some changes made to Mercury
+
+1.1 - Sep 29 2007 - Added mzXML file support and compressed .cms1 & .cms2 support. Several bugfixes, including better S/N processing.
+
+1.11 - Jan 16 2008 - Fixed bugs in MSToolkit 64-bit file support. Modified default Hardklor settings.
+
+1.20 - Feb 6 2008
+  * Fixed user-defined scan window bug. 
+  * Allows reading of centroid data (-c). No signal-to-noise processing is done for this option.
+  * Can set a static S/N cutoff for entire scan. This optimizes Orbitrap and LTQ-FT data analysis. See documentation.
+  * Allows substitution of a user-defined molecule for averagine (-mol). Note: still in testing stages.
+  * Toggle isotope distribution area for output in place of base isotope peak instensity (-da).
+  * Minor speed improvements.
+
+1.22 - Apr 24 2008
+  * Minor Bug Fixes
+  * Upgraded MSToolkit software to 2.42
+
+1.23 - Oct 24 2008
+  * Improvements to spectrum dividing functions
+
+1.24 - Dec 11 2008
+  * Bugfixes for zoomscan and ultrazoomscan files
+
+1.25 - Mar 3 2009
+  * Additional support for ms2 file format
+  * Bugfix to MSToolkit (forked from SVN)
+
+1.26 - Apr 30 2009
+  * Upgraded MSToolkit
+  * Bugfix for rare S/N ratio calculation error
+  * Potentially fixed rare, irregular, and odd 64-bit linux behavior
+
+1.27 - Aug 13 2009
+  * Filenames and their paths can have spaces if entire path and filename is contained in quotes
+
+1.28 - Sep 2 2009
+  * Writes results in XML format with the following parameter: -xml true
+
+1.30 - Sep 13 2009
+  * Bugfix to QuickCharge algorithm
+
+1.31 - Oct 1 2009
+  * Added new signal detection algorithm. It operates on the assumption valid signal peaks persist over multiple adjacent spectra.
+    Detailed description of its usage can be found in the online documentation.
\ No newline at end of file
diff --git a/src/app/hardklor/S2N.cpp b/src/app/hardklor/S2N.cpp
new file mode 100644
index 0000000..655147b
--- /dev/null
+++ b/src/app/hardklor/S2N.cpp
@@ -0,0 +1,340 @@
+#include "S2N.h"
+#include <iostream>
+
+// Adapted from THRASH
+Spectrum signalToNoise(Spectrum& s, int start, int stop, float sig, float* cutoff, bool skipZero, bool subtract){
+
+  int i;
+  int c;
+  double d;
+  int a[100];
+  float b[100];
+  float FWHM;
+  float maxIntensity;
+  float baseIntensity;
+  Spectrum newSpec;
+
+  if(s.size()==0) return newSpec;
+
+	if(skipZero){
+		//count only non-zero values in spectrum
+		c=0;
+		for(i=start;i<stop+1;i++){
+			if(s.at(i).intensity>0)c++;
+		};
+	} else {
+		//accept all values
+		c=stop-start+1;
+	};
+
+	if(c==0) return newSpec;
+
+  float *sortD = new float[c];
+
+  //Set initial array values
+  for(i=0;i<100;i++) {
+    a[i]=0;
+    b[i]=0;
+  };
+
+  //Copy abundances to an array that can be sorted
+  maxIntensity=0;
+  c=0;
+  for(i=start;i<stop+1;i++) {
+		if(skipZero) {
+			if(s.at(i).intensity > 0) sortD[c++] = s.at(i).intensity;
+		} else {
+			sortD[c++] = s.at(i).intensity;
+		};
+    if(s.at(i).intensity > maxIntensity) maxIntensity = s.at(i).intensity;
+  };
+
+  //Sort the array
+  sort(sortD,sortD+c);
+  
+  //Find the number of relative abundances at 1% intervals
+  c=0;
+  for(i=0;i<100;i++){
+    while(sortD[c]*100/maxIntensity < i) c++;
+    a[i] = c;
+  };
+
+  //Get the derivative
+  for(i=1;i<100;i++) {
+    b[i]=(float)(a[i]-a[i-1]);
+  };
+    
+  //Smooth the derivative
+  SG_SmoothD(&b[0],100,20,2);
+
+  //Find the most intense point in the derivative
+  c=0;
+  for(i=0;i<100;i++){
+    if(b[i]>=b[c]) c=i;
+  };
+  baseIntensity=(float)c;
+
+  //find FWHM (this is a hack - I don't know the proper way to do this)
+  i=c;
+  d=b[c]/2;
+  while(i<100){
+    if(b[i]>d)i++;
+    else break;
+  };
+  FWHM = (float)(i-c);
+
+  i=c;
+  while(i>0){
+    if(b[i]>d)i--;
+    else break;
+  };
+
+  FWHM += (float)(c-i);
+
+
+  //Clean up the memory
+  delete [] sortD;
+
+  //Go find the peaks using the baseIntensity and FWHM
+	if(subtract) newSpec = SNSubtracted(s,start,stop,sig,FWHM,maxIntensity,baseIntensity);
+  else newSpec = SNPeaks(s,start,stop,sig,FWHM,maxIntensity,baseIntensity);
+
+  *cutoff = sig*FWHM+baseIntensity;
+
+  return newSpec;
+
+};
+
+Spectrum SNPeaks(Spectrum& s, int start, int stop, float SN, float FWHM, float max, float base){
+  int i;
+  double sig;
+  Spectrum newSpec;
+
+  //Scan all data. Keep data that exceed the signal to noise threshold.
+  for(i=start;i<stop+1;i++){
+    sig = (s.at(i).intensity*100/max - base) / FWHM;
+    if(sig > SN) newSpec.add(s.at(i));
+  };
+
+  return newSpec;
+
+};
+
+Spectrum SNSubtracted(Spectrum& s, int start, int stop, float SN, float FWHM, float max, float base){
+  int i;
+  double sig;
+  Spectrum newSpec;
+	Peak_T p;
+
+  //Scan all data. Keep data that exceed the signal to noise threshold.
+  for(i=start;i<stop+1;i++){
+    sig = (s.at(i).intensity*100/max - base) / FWHM;
+    if(sig > SN) newSpec.add(s.at(i));
+		else {
+			p=s.at(i);
+			p.intensity=0;
+			newSpec.add(p);
+		};
+  };
+
+  return newSpec;
+
+};
+
+
+// Adapted from THRASH
+float findSNCutoff(Spectrum& s, int start, int stop, float sig, bool skipZero){
+
+  int i;
+  int c;
+  double d;
+  int a[100];
+  float b[100];
+  float FWHM;
+  float maxIntensity;
+  float baseIntensity;
+  Spectrum newSpec;
+
+  if(s.size()==0) 0;
+
+	if(skipZero){
+		//count only non-zero values in spectrum
+		c=0;
+		for(i=start;i<stop+1;i++){
+			if(s.at(i).intensity>0)c++;
+		};
+	} else {
+		//accept all values
+		c=stop-start+1;
+	};
+
+	if(c==0) return 0;
+
+  float *sortD = new float[c];
+
+  //Set initial array values
+  for(i=0;i<100;i++) {
+    a[i]=0;
+    b[i]=0;
+  };
+
+  //Copy abundances to an array that can be sorted
+  maxIntensity=0;
+  c=0;
+  for(i=start;i<stop+1;i++) {
+		if(skipZero) {
+			if(s.at(i).intensity > 0) sortD[c++] = s.at(i).intensity;
+		} else {
+			sortD[c++] = s.at(i).intensity;
+		};
+    if(s.at(i).intensity > maxIntensity) maxIntensity = s.at(i).intensity;
+  };
+
+  //Sort the array
+  sort(sortD,sortD+c);
+  
+  //Find the number of relative abundances at 1% intervals
+  c=0;
+  for(i=0;i<100;i++){
+    while(sortD[c]*100/maxIntensity < i) c++;
+    a[i] = c;
+  };
+
+  //Get the derivative
+  for(i=1;i<100;i++) {
+    b[i]=(float)(a[i]-a[i-1]);
+  };
+    
+  //Smooth the derivative
+  SG_SmoothD(&b[0],100,20,2);
+
+  //Find the most intense point in the derivative
+  c=0;
+  for(i=0;i<100;i++){
+    if(b[i]>=b[c]) c=i;
+  };
+  baseIntensity=(float)c;
+
+  //find FWHM (this is a hack - I don't know the proper way to do this)
+  i=c;
+  d=b[c]/2;
+  while(i<100){
+    if(b[i]>d)i++;
+    else break;
+  };
+  FWHM = (float)(i-c);
+
+  i=c;
+  while(i>0){
+    if(b[i]>d)i--;
+    else break;
+  };
+
+  FWHM += (float)(c-i);
+
+
+  //Clean up the memory
+  delete [] sortD;
+
+  return sig*FWHM+baseIntensity;
+
+};
+
+float findSNCutoff2(Spectrum& s, int start, int stop, float sig, double& max, bool skipZero){
+
+  int i;
+  int c;
+  double d;
+  int a[100];
+  float b[100];
+  float FWHM;
+  float maxIntensity;
+  float baseIntensity;
+  Spectrum newSpec;
+
+  if(s.size()==0) 0;
+
+	if(skipZero){
+		//count only non-zero values in spectrum
+		c=0;
+		for(i=start;i<stop+1;i++){
+			if(s.at(i).intensity>0)c++;
+		};
+	} else {
+		//accept all values
+		c=stop-start+1;
+	};
+
+	if(c==0) return 0;
+
+  float *sortD = new float[c];
+
+  //Set initial array values
+  for(i=0;i<100;i++) {
+    a[i]=0;
+    b[i]=0;
+  };
+
+  //Copy abundances to an array that can be sorted
+  maxIntensity=0;
+  c=0;
+  for(i=start;i<stop+1;i++) {
+		if(skipZero) {
+			if(s.at(i).intensity > 0) sortD[c++] = s.at(i).intensity;
+		} else {
+			sortD[c++] = s.at(i).intensity;
+		};
+    if(s.at(i).intensity > maxIntensity) maxIntensity = s.at(i).intensity;
+  };
+
+  //Sort the array
+  sort(sortD,sortD+c);
+  
+  //Find the number of relative abundances at 1% intervals
+  c=0;
+  for(i=0;i<100;i++){
+    while(sortD[c]*100/maxIntensity < i) c++;
+    a[i] = c;
+  };
+
+  //Get the derivative
+  for(i=1;i<100;i++) {
+    b[i]=(float)(a[i]-a[i-1]);
+  };
+    
+  //Smooth the derivative
+  SG_SmoothD(&b[0],100,20,2);
+
+  //Find the most intense point in the derivative
+  c=0;
+  for(i=0;i<100;i++){
+    if(b[i]>=b[c]) c=i;
+  };
+  baseIntensity=(float)c;
+
+  //find FWHM (this is a hack - I don't know the proper way to do this)
+  i=c;
+  d=b[c]/2;
+  while(i<100){
+    if(b[i]>d)i++;
+    else break;
+  };
+  FWHM = (float)(i-c);
+
+  i=c;
+  while(i>0){
+    if(b[i]>d)i--;
+    else break;
+  };
+
+  FWHM += (float)(c-i);
+
+
+  //Clean up the memory
+  delete [] sortD;
+
+	max = maxIntensity;
+  return sig*FWHM+baseIntensity;
+
+};
+
diff --git a/src/app/hardklor/S2N.h b/src/app/hardklor/S2N.h
new file mode 100644
index 0000000..597bd3a
--- /dev/null
+++ b/src/app/hardklor/S2N.h
@@ -0,0 +1,16 @@
+#ifndef _S2N_H
+#define _S2N_H
+
+#include "Spectrum.h"
+#include "Smooth.h"
+#include <algorithm>
+
+using namespace std;
+
+Spectrum signalToNoise(Spectrum& s, int start, int stop, float sig, float* cutoff, bool skipZero=true, bool subtract=false);
+Spectrum SNPeaks(Spectrum& s, int start, int stop, float SN, float FWHM, float max, float base);
+Spectrum SNSubtracted(Spectrum& s, int start, int stop, float SN, float FWHM, float max, float base);
+float findSNCutoff(Spectrum& s, int start, int stop, float sig, bool skipZero=true);
+float findSNCutoff2(Spectrum& s, int start, int stop, float sig, double& max, bool skipZero=true);
+
+#endif
diff --git a/src/app/hardklor/Smooth.cpp b/src/app/hardklor/Smooth.cpp
new file mode 100644
index 0000000..edf25d2
--- /dev/null
+++ b/src/app/hardklor/Smooth.cpp
@@ -0,0 +1,179 @@
+#include "Smooth.h"
+#include <iostream>
+
+//Savitzky-Golay smoothing algorithm
+void SG_Smooth(Spectrum& sp, int m, int p){
+
+  if(2*m<p) {
+    cout << "Invalid Smoothing Parameters == Smoothing Skipped!" << endl;
+    return;
+  }
+ 
+  int t,i,s;
+  int k;
+  int c1,c2,c3;
+  double weightSum;
+  double *weight, *holder;
+  weight = new double[2*m+1];
+  holder = new double[sp.size()];
+  
+  s = 0;   // Derivative order s = 0 for smooth
+ 
+  //copy intensities to holder array and set to 0
+  for(i=0;i<sp.size();i++){
+    holder[i] = sp.at(i).intensity;
+    sp.at(i).intensity=0;
+  }
+ 
+  //Calculate the Savitzky-Golay Weights for t = 0
+  c1 = 0;
+  weightSum=0;
+  for(i=-m; i<=m; i++){
+    weight[c1] = SG_Weight(i, 0, m, p, s);
+    weightSum+=weight[c1];
+    c1++;
+  }
+  
+  c1 = 0;
+  t = -m;
+  // Smoothing for the points 0 to m-1
+  for(k=0; k<m; k++){
+    c3 = 0;
+    for(i=-m; i<=m; i++){
+      sp.at(k).intensity += (float)(SG_Weight(i, t, m, p, s) * holder[k + c3]);
+      c3++;
+    }
+    t++;
+  }
+    
+  // Smoothing for the bulk of the chromatogram at t = 0
+  for(k=m;k<sp.size()-m;k++){
+    c2=-m;
+    for(i=0; i<2*m+1; i++){
+      sp.at(k).intensity += (float)(weight[i] * holder[k+c2]);
+      c2++;
+    }
+  }
+    
+  // Smoothing for the points end-m+1 to end
+  t = 1;
+  for(k=sp.size()-m; k<sp.size(); k++){
+    c3 = -(2*m+1);
+    for(i=-m; i<=m; i++){
+      sp.at(k).intensity += (float)(SG_Weight(i, t, m, p, s) * holder[k + c3]);
+      c3++;
+    }
+    t++;
+  }
+
+  delete [] weight;
+  delete [] holder;
+}
+
+//Savitzky-Golay smoothing with an array instead of spectrum object
+void SG_SmoothD(float *d, int sz, int m, int p){
+    
+  int t,i,s;
+  int k;
+  int c1,c2,c3;
+  float *weight,*holder;
+  weight = new float[sz];
+  holder = new float[sz];
+  
+  s = 0;   // Derivative order s = 0 for smooth
+  
+  for(i=0;i<sz;i++){
+    holder[i] = d[i];
+    d[i]=0;
+  }
+
+  //Calculate the Savitsky-Golay Weights for t = 0
+  c1 = 0;
+  for(i=-m; i<=m; i++){
+    weight[c1] = (float)SG_Weight(i, 0, m , p, s);
+    c1++;
+  }
+  
+  c1 = 0;
+  // Smoothing for the points 0 to m-1
+  t = -m;
+  for(k=0; k<m; k++){
+    c3 = 0;
+    for(i=-m; i<=m; i++){
+      d[k] += (float)(SG_Weight(i, t, m, p, s) * holder[k + c3]);
+      c3++;
+    }
+    t++;
+  }
+    
+  // Smoothing for the bulk of the chromatogram at t = 0
+  for(k=m;k<sz-m;k++){
+    c2=-m;
+    for(i=0; i<(2*m+1); i++){
+      d[k] += weight[i] * holder[k+c2];
+      c2++;
+    }
+  }
+    
+  // Smoothing for the points end-m+1 to end
+  t = 1;
+  for(k=sz-m; k<sz; k++){
+    c3 = -(2*m+1);
+    for(i=-m; i<=m; i++){
+      d[k] += (float)(SG_Weight(i, t, m, p, s) * holder[k + c3]);
+      c3++;
+    }
+    t++;
+  }
+
+  delete [] weight;
+  delete [] holder;
+
+}
+
+// Calculates the Savitsky-Golay weight of the i'th data point
+// for the t'th Least-Square point of the s'th derivative
+// over 2m+1 points, order n.
+double SG_Weight(int i, int t, int m, int n, int s){
+  
+  int k;
+  double sum;
+
+  sum = 0;
+  for(k=0;k<=n;k++){
+    sum += (double)(2 * k + 1) * 
+      (SG_GenFact(2 * m, k) / SG_GenFact(2 * m + k + 1, k + 1)) * 
+      SG_GramPoly(i, m, k, 0) * 
+      SG_GramPoly(t, m, k, s);
+  }
+
+  return sum;
+}
+
+// Calculates the Savitsky-Golay Gram Polynomial (s = 0) or it's s'th
+// derivative evaluated at i, order k, over 2m+1 points.
+double SG_GramPoly(int i, int m, int k, int s){
+
+  if(k>0){
+    return (double)(4*k-2) / (double)(k*(2*m-k+1)) * 
+      (i*SG_GramPoly(i,m,k-1,s) + s*SG_GramPoly(i,m,k-1,s-1)) - 
+      (double)((k-1) * (2*m+k)) / (double)(k*(2*m-k+1)) * 
+      SG_GramPoly(i,m,k-2,s);
+  } else if(k==0 && s==0) {
+    return 1;
+  } else {
+    return 0;
+  }
+
+}
+
+double SG_GenFact(int a, int b) {
+  int j;
+  int c;
+  double gf;
+
+  gf = 1;
+  c = a-b+1;
+  for(j=c; j<=a; j++) gf *= j;
+  return gf;
+}
diff --git a/src/app/hardklor/Smooth.h b/src/app/hardklor/Smooth.h
new file mode 100644
index 0000000..8f7b933
--- /dev/null
+++ b/src/app/hardklor/Smooth.h
@@ -0,0 +1,15 @@
+#ifndef _SMOOTH_H
+#define _SMOOTH_H
+
+#include "Spectrum.h"
+
+using namespace std;
+using namespace MSToolkit;
+
+double SG_GenFact(int, int);
+double SG_GramPoly(int, int, int, int);
+void SG_Smooth(Spectrum&, int, int);
+void SG_SmoothD(float*, int, int, int);
+double SG_Weight(int, int, int, int, int);
+
+#endif
diff --git a/src/app/hardklor/SpecAnalyzeSupport.cpp b/src/app/hardklor/SpecAnalyzeSupport.cpp
new file mode 100644
index 0000000..e7bcf25
--- /dev/null
+++ b/src/app/hardklor/SpecAnalyzeSupport.cpp
@@ -0,0 +1,266 @@
+#include "SpecAnalyzeSupport.h"
+
+/* ******************************************************* */
+/*									CPeakPrediction												 */
+/* ******************************************************* */
+
+//Constructors & Destructors
+CPeakPrediction::CPeakPrediction() { 
+	mz=0;
+	intensity=0;
+	charges = new vector<int>; 
+}
+CPeakPrediction::CPeakPrediction(const CPeakPrediction& p) { 
+	mz = p.mz;
+	intensity = p.intensity;
+	charges = new vector<int>;
+	for(unsigned int i=0;i<p.charges->size();i++) charges->push_back(p.charges->at(i));
+}
+CPeakPrediction::~CPeakPrediction() { 
+	delete charges; 
+}
+
+//Overloaded operators
+CPeakPrediction& CPeakPrediction::operator=(const CPeakPrediction& p){
+	if(this!=&p){
+		mz = p.mz;
+		intensity = p.intensity;
+		delete charges;
+		charges = new vector<int>;
+		for(unsigned int i=0;i<p.charges->size();i++) charges->push_back(p.charges->at(i));
+	}
+	return *this;
+}
+
+//Functions
+void CPeakPrediction::AddCharge(int charge){ charges->push_back(charge); }
+void CPeakPrediction::Clear(){ charges->clear(); }
+void CPeakPrediction::EraseCharge(int index){ charges->erase(charges->begin()+index); }
+int CPeakPrediction::GetCharge(int index){ return charges->at(index); }
+float CPeakPrediction::GetIntensity(){ return intensity; }
+double CPeakPrediction::GetMZ(){ return mz; }
+void CPeakPrediction::SetIntensity(float newIntens){ intensity=newIntens; }
+void CPeakPrediction::SetMZ(double newMZ){ mz=newMZ; }
+int CPeakPrediction::Size(){ return charges->size(); }
+
+
+
+
+/* ******************************************************* */
+/*                  CPeptideVariant                        */
+/* ******************************************************* */
+
+//Constructors & Destructors
+CPeptideVariant::CPeptideVariant(){
+  match = new Peak_T[1];
+  matchSize=1;
+  mismatch = new Peak_T[1];
+  mismatchSize=1;
+  extra = new vector<Peak_T>;
+  charge=1;
+  monoMass=0;
+  distArea=0;
+}
+
+CPeptideVariant::CPeptideVariant(const CPeptideVariant& p){
+  int i;
+
+  matchSize = p.matchSize;
+  mismatchSize = p.mismatchSize;
+  charge = p.charge;
+  monoMass = p.monoMass;
+  variant = p.variant;
+  distArea = p.distArea;
+  strcpy(formula,p.formula);
+
+  match = new Peak_T[matchSize];
+  mismatch = new Peak_T[mismatchSize];
+  extra = new vector<Peak_T>;
+
+  for(i=0;i<p.matchSize;i++) match[i]=p.match[i];
+  for(i=0;i<p.mismatchSize;i++) mismatch[i]=p.mismatch[i];
+  for(i=0;i<(int)p.extra->size();i++) extra->push_back(p.extra->at(i));
+}
+
+CPeptideVariant::~CPeptideVariant(){
+  delete [] match;
+  delete [] mismatch;
+  delete extra;
+}
+
+//Overloaded Operators
+CPeptideVariant& CPeptideVariant::operator=(const CPeptideVariant& p) {
+  int i;
+
+  if(this!=&p){
+    matchSize = p.matchSize;
+    mismatchSize = p.mismatchSize;
+    charge = p.charge;
+    monoMass = p.monoMass;
+    variant = p.variant;
+    distArea = p.distArea;
+    strcpy(formula,p.formula);
+
+    delete [] match;
+    delete [] mismatch;
+    delete extra;
+
+    match = new Peak_T[matchSize];
+    mismatch = new Peak_T[mismatchSize];
+    extra = new vector<Peak_T>;
+
+    for(i=0;i<p.matchSize;i++) match[i]=p.match[i];
+    for(i=0;i<p.mismatchSize;i++) mismatch[i]=p.mismatch[i];
+    for(i=0;i<(int)p.extra->size();i++) extra->push_back(p.extra->at(i));
+  }
+  return *this;
+}
+
+//Functions
+void CPeptideVariant::AddExtra(double& mz, float& intensity) {
+	Peak_T p;
+	p.mz=mz;
+	p.intensity=intensity;
+	extra->push_back(p);
+}
+void CPeptideVariant::AddMatch(int& index, double& mz, float& intensity) {
+	Peak_T p;
+	p.mz=mz;
+	p.intensity=intensity;
+	match[index]=p;
+}
+void CPeptideVariant::AddMismatch(int& index, double& mz, float& intensity) {
+	Peak_T p;
+	p.mz=mz;
+	p.intensity=intensity;
+	mismatch[index]=p;
+}
+void CPeptideVariant::Clear(){
+	int i;
+	CHardklorVariant v;
+	delete [] match;
+	delete [] mismatch;
+	delete extra;
+	match = new Peak_T[matchSize];
+	for(i=0;i<matchSize;i++) {
+		match[i].mz=0;
+		match[i].intensity=0;
+	}
+	mismatch = new Peak_T[mismatchSize];
+	for(i=0;i<mismatchSize;i++) {
+		mismatch[i].mz=0;
+		mismatch[i].intensity=0;
+	}
+	extra = new vector<Peak_T>;
+	charge=0;
+	monoMass=0;
+	variant=v;
+	distArea=0;
+	strcpy(formula,"");
+}
+void CPeptideVariant::DeleteExtra(){
+	delete extra;
+	extra = new vector<Peak_T>;
+}
+double& CPeptideVariant::GetArea() { return distArea; }
+int& CPeptideVariant::GetCharge() { return charge; }
+Peak_T& CPeptideVariant::GetExtra(int& index) { return extra->at(index); }
+char* CPeptideVariant::GetFormula() { return formula; }
+CHardklorVariant& CPeptideVariant::GetHKVariant() { return variant; }
+Peak_T& CPeptideVariant::GetMatch(int& index) { return match[index]; }
+Peak_T& CPeptideVariant::GetMismatch(int& index) { return mismatch[index]; }
+double& CPeptideVariant::GetMonoMass() { return monoMass; }
+void CPeptideVariant::SetArea(double& d) { distArea=d; }
+void CPeptideVariant::SetCharge(int ch) { charge=ch; }
+void CPeptideVariant::SetFormula(char form[64]) { strcpy(formula,form); }
+void CPeptideVariant::SetMatchSize(int& num) {
+	delete [] match;
+	match = new Peak_T[num];
+	for(int i=0;i<num;i++) {
+		match[i].mz=0;
+		match[i].intensity=0;
+	}
+	matchSize = num;
+}
+void CPeptideVariant::SetMismatchSize(int& num) {
+  delete [] mismatch;
+  mismatch = new Peak_T[num];
+  for(int i=0;i<num;i++) {
+    mismatch[i].mz=0;
+    mismatch[i].intensity=0;
+  }
+  mismatchSize = num;
+}
+void CPeptideVariant::SetMonoMass(double mass) { monoMass=mass; }
+void CPeptideVariant::SetVariant(CHardklorVariant &v) { variant=v; }
+int CPeptideVariant::SizeExtra() { return extra->size(); }
+
+
+
+
+
+
+/* ******************************************************* */
+/*                CPeptidePrediction                       */
+/* ******************************************************* */
+
+//Constructors & Destructors
+CPeptidePrediction::CPeptidePrediction(){
+	variantList = new vector<CPeptideVariant>;
+	mz=0;
+	intensity=0;
+	bestVar=0;
+	maxPeakIndex=0;
+}
+CPeptidePrediction::CPeptidePrediction(const CPeptidePrediction& p){
+	mz=p.mz;
+	intensity=p.intensity;
+	bestVar=p.bestVar;
+	maxPeakIndex=p.maxPeakIndex;
+	variantList = new vector<CPeptideVariant>;
+	for(unsigned int i=0;i<p.variantList->size();i++){
+		variantList->push_back(p.variantList->at(i));
+	}
+}
+CPeptidePrediction::~CPeptidePrediction(){
+	delete variantList;
+}
+
+//Overloaded operators
+CPeptidePrediction& CPeptidePrediction::operator=(const CPeptidePrediction& p){
+	if(this!=&p){
+		mz=p.mz;
+		intensity=p.intensity;
+		bestVar=p.bestVar;
+		maxPeakIndex=p.maxPeakIndex;
+		delete variantList;
+		variantList = new vector<CPeptideVariant>;
+		for(unsigned int i=0;i<p.variantList->size();i++){
+			variantList->push_back(p.variantList->at(i));
+		}
+	}
+	return *this;
+}
+
+//Functions
+void CPeptidePrediction::AddVariant(CPeptideVariant& var) { variantList->push_back(var); }
+void CPeptidePrediction::Clear() {
+	delete variantList;
+	variantList = new vector<CPeptideVariant>;
+	mz=0;
+	intensity=0;
+	bestVar=0;
+}
+float CPeptidePrediction::GetIntensity() { return intensity; }
+int CPeptidePrediction::GetMaxPeakIndex() { return maxPeakIndex; }
+double CPeptidePrediction::GetMZ() { return mz; }
+CPeptideVariant& CPeptidePrediction::GetVariant(int& index) { return variantList->at(index); }
+void CPeptidePrediction::SetIntensity(float intens) { intensity = intens; }
+void CPeptidePrediction::SetMaxPeakIndex(int index) { maxPeakIndex = index; }
+void CPeptidePrediction::SetMZ(double mass) { mz = mass; }
+int CPeptidePrediction::VariantListSize() { return variantList->size(); }
+
+float& CPeptidePrediction::GetIntensityAt(int& variant, int& mz) {
+	return variantList->at(variant).GetMatch(mz).intensity;
+}
+
diff --git a/src/app/hardklor/SpecAnalyzeSupport.h b/src/app/hardklor/SpecAnalyzeSupport.h
new file mode 100644
index 0000000..36117af
--- /dev/null
+++ b/src/app/hardklor/SpecAnalyzeSupport.h
@@ -0,0 +1,136 @@
+#ifndef _SPECANALYZESUPPORT_H
+#define _SPECANALYZESUPPORT_H
+
+#include <vector>
+#include "CAveragine.h"
+#include "CMercury8.h"
+#include "HardklorTypes.h"
+
+using namespace std;
+
+/* ******************************************************* */
+/*                   CPeakPrediction                       */
+/* ******************************************************* */
+class CPeakPrediction{
+ private:
+  //Data Members
+  double mz;                //Peak m/z in spectrum
+  float intensity;          //Peak intensity in spectrum
+  vector<int> *charges;     //All charge state predictions for this peak
+ protected:
+ public:
+  //Constructors and Destructors
+  CPeakPrediction();
+  CPeakPrediction(const CPeakPrediction& p);
+  ~CPeakPrediction();
+
+  //Overloaded operators
+  CPeakPrediction& operator=(const CPeakPrediction& p);
+
+  //Functions
+  void AddCharge(int charge);         //Add charge state to the vector
+  void Clear();                       //Clear all information
+  void EraseCharge(int index);        //Remove charge state
+  int GetCharge(int index);           //Get charge state from index
+  float GetIntensity();               //Return intensity
+  double GetMZ();                     //Return m/z
+  void SetIntensity(float newIntens); //Set intensity
+  void SetMZ(double newMZ);           //Set m/z
+  int Size();                         //Get number of charge state predictions
+};
+
+
+/* ******************************************************* */
+/*                  CPeptideVariant                        */
+/* ******************************************************* */
+class CPeptideVariant {
+ private:
+  Peak_T *match;            //Array of mz and intensities that match the peak list at index n
+  int matchSize;
+  Peak_T *mismatch;         //Array of mz and intensities that do not match the peak list at index n
+  int mismatchSize;
+
+  vector<Peak_T> *extra;    //Temporary storage of mismatch data until mismatch array size is determined
+
+  int charge;               //Charge state of variant
+  char formula[64];         //Molecular formula (averagine-based)
+  double monoMass;          //monoisotopic mass
+  double distArea;          //distribution area (sum of centroided peaks)
+  CHardklorVariant variant; //Variant settings
+ protected:
+ public:
+  //Constructors & Destructors
+  CPeptideVariant();
+  CPeptideVariant(const CPeptideVariant& p);
+  ~CPeptideVariant();
+
+  //Operator overloads
+  CPeptideVariant& operator=(const CPeptideVariant& p);
+
+  //Functions
+  void AddExtra(double& mz, float& intensity);
+  void AddMatch(int& index, double& mz, float& intensity);
+  void AddMismatch(int& index, double& mz, float& intensity);
+  void Clear();
+  void DeleteExtra();
+  double& GetArea();
+  int& GetCharge();
+  Peak_T& GetExtra(int& index);
+  char* GetFormula();
+  CHardklorVariant& GetHKVariant();
+  Peak_T& GetMatch(int& index);
+  Peak_T& GetMismatch(int& index);
+  double& GetMonoMass();
+  void SetArea(double& d);
+  void SetCharge(int ch);
+  void SetFormula(char form[64]);
+  void SetMatchSize(int& num);
+  void SetMismatchSize(int& num);
+  void SetMonoMass(double mass);
+  void SetVariant(CHardklorVariant& v);
+  int SizeExtra();
+
+};
+
+
+/* ******************************************************* */
+/*                CPeptidePrediction                       */
+/* ******************************************************* */
+class CPeptidePrediction {
+ private:
+  vector<CPeptideVariant> *variantList;   //vector of all variants for this peptide
+  double mz;                              //mz peak from which variants are derived
+  float intensity;                        //intensity of mz peak
+  int bestVar;                            //Index to variant with best match/mismatch score
+  int maxPeakIndex;
+ protected:
+ public:
+  //Make variants here?
+  /* Pass vector of variants (CHardklorVariant) and make Mercury distributions */
+  /* Or calculate the variant externally and add it. */
+
+  //Constructors & Destructors
+  CPeptidePrediction();
+  CPeptidePrediction(const CPeptidePrediction& p);
+  ~CPeptidePrediction();
+
+  //Overloaded operators
+  CPeptidePrediction& operator=(const CPeptidePrediction& p);
+
+  //Functions
+  void AddVariant(CPeptideVariant& var);
+  void Clear();
+  float GetIntensity();
+  int GetMaxPeakIndex();
+  double GetMZ();
+  CPeptideVariant& GetVariant(int& index);
+  void SetIntensity(float intens);
+  void SetMaxPeakIndex(int index);
+  void SetMZ(double mass);
+  int VariantListSize();
+
+  float& GetIntensityAt(int& variant, int& mz);
+};
+
+#endif
+
diff --git a/src/app/hardklor/cmake_install.cmake b/src/app/hardklor/cmake_install.cmake
new file mode 100644
index 0000000..bbbdc26
--- /dev/null
+++ b/src/app/hardklor/cmake_install.cmake
@@ -0,0 +1,34 @@
+# Install script for directory: /data/TeamCity/buildAgent/work/779d99b0241b2175/src/app/hardklor
+
+# Set the install prefix
+IF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+  SET(CMAKE_INSTALL_PREFIX "/usr/local")
+ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+  IF(BUILD_TYPE)
+    STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+  ELSE(BUILD_TYPE)
+    SET(CMAKE_INSTALL_CONFIG_NAME "Release")
+  ENDIF(BUILD_TYPE)
+  MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+
+# Set the component getting installed.
+IF(NOT CMAKE_INSTALL_COMPONENT)
+  IF(COMPONENT)
+    MESSAGE(STATUS "Install component: \"${COMPONENT}\"")
+    SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+  ELSE(COMPONENT)
+    SET(CMAKE_INSTALL_COMPONENT)
+  ENDIF(COMPONENT)
+ENDIF(NOT CMAKE_INSTALL_COMPONENT)
+
+# Install shared libraries without execute permission?
+IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+  SET(CMAKE_INSTALL_SO_NO_EXE "0")
+ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+
diff --git a/src/app/hardklor/libhardklor.a b/src/app/hardklor/libhardklor.a
new file mode 100644
index 0000000..293469d
Binary files /dev/null and b/src/app/hardklor/libhardklor.a differ
diff --git a/src/app/hardklor/mercury.h b/src/app/hardklor/mercury.h
new file mode 100644
index 0000000..b5c3ca4
--- /dev/null
+++ b/src/app/hardklor/mercury.h
@@ -0,0 +1,27 @@
+#ifndef _MERCURY_H
+#define _MERCURY_H
+
+#include <vector>
+
+#define PI      3.14159265358979323846
+#define TWOPI   6.28318530717958647
+#define HALFPI  1.57079632679489666
+#define GAUSSIAN 1
+#define LORENTZIAN 2
+#define ProtonMass   1.00727649
+#define ElectronMass 0.00054858
+#define MAXAtomNo    108		/* allows for elements H - Lr */
+#define MAXIsotopes  20			/* allows for 20 elements in molecular formula */
+#define EZS Element[Z].Symbol
+#define EZNI Element[Z].NumIsotopes
+#define EZM Element[Z].IsoMass
+#define EZP Element[Z].IsoProb
+#define EZW Element[Z].WrapMass
+#define EZNA Element[Z].NumAtoms
+
+struct Result {
+  double mass;
+  double data;
+};
+
+#endif
diff --git a/src/app/hardklor/resource.h b/src/app/hardklor/resource.h
new file mode 100644
index 0000000..cad4c03
--- /dev/null
+++ b/src/app/hardklor/resource.h
@@ -0,0 +1,17 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by Hardklor.rc
+//
+#define IDI_ICON1                       101
+#define IDI_ICON2                       122
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        123
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1000
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
diff --git a/src/app/hardklor/resource1.h b/src/app/hardklor/resource1.h
new file mode 100644
index 0000000..ef0340e
--- /dev/null
+++ b/src/app/hardklor/resource1.h
@@ -0,0 +1,16 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by Hardklor2008.rc
+//
+#define IDI_ICON2                       102
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        103
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1001
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
diff --git a/src/app/q-value.cpp b/src/app/q-value.cpp
new file mode 100644
index 0000000..7015b4f
--- /dev/null
+++ b/src/app/q-value.cpp
@@ -0,0 +1,31 @@
+/*******************************************************************************
+  * \file q-value.cpp
+  * AUTHOR: Chris Park
+  * CREATE DATE: Jan 03 2007
+  * \brief  Given as input a directory containing binary psm files,
+  * a protein database, and an optional parameter file, analyze the
+  * matches (with percolator or q-value) and return scores indicating
+  * how good the matches are. 
+  *
+  * Handles at most 4 files (target and decoy).  Expects psm files to
+  * start with <fileroot>.se and 
+  * end with the extension '.txt' and decoys to end with
+  * '-decoy#.txt'.  Multiple target files in the given directory are
+  * concatinated together and presumed to be non-overlaping parts of
+  * the same ms2 file. 
+  ****************************************************************************/
+
+#include "q-value.h"
+#include "io/MatchCollectionParser.h"
+#include "PosteriorEstimator.h"
+#include "util/FileUtils.h"
+#include "util/Params.h"
+
+#include <map>
+#include <utility>
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/q-value.h b/src/app/q-value.h
new file mode 100644
index 0000000..44907ce
--- /dev/null
+++ b/src/app/q-value.h
@@ -0,0 +1,56 @@
+#ifndef QVALUE_H
+#define QVALUE_H
+
+/**
+ * \file q-value.h
+ * AUTHOR: Barbara Frewen
+ * CREATE DATE: November 24, 2008
+ ****************************************************************************/
+#include <stdlib.h>
+#include <stdio.h>
+#include "io/carp.h"
+#include "util/crux-utils.h"
+#include "model/objects.h"
+#include "parameter.h"
+#include "model/Protein.h"
+#include "model/Peptide.h"
+#include "model/Spectrum.h"
+#include "io/SpectrumCollection.h"
+#include "model/Scorer.h"
+#include "model/Match.h"
+#include "model/MatchCollection.h"
+#include "io/OutputFiles.h"
+
+
+
+FLOAT_T* compute_decoy_qvalues_tdc(
+  FLOAT_T* target_scores,
+  int      num_targets,
+  FLOAT_T* decoy_scores,
+  int      num_decoys,
+  bool     reverse);
+
+FLOAT_T* compute_qvalues_from_pvalues(
+  FLOAT_T* pvalues, 
+  int      num_pvals,
+  FLOAT_T  pi_zero);
+
+FLOAT_T estimate_pi0( FLOAT_T* target_scores,
+  int      num_targets,
+  FLOAT_T* decoy_scores,
+  int      num_decoys,
+  bool     ascending );
+  
+MatchCollection* run_qvalue(
+  const vector<string>& input_files,
+  OutputFiles& output,
+  COMMAND_T command  );
+  
+void peptide_level_filtering(
+  MatchCollection* match_collection,
+  std::map<string, FLOAT_T>* BestPeptideScore, 
+  SCORER_TYPE_T score_type,
+  bool ascending);
+
+#endif //QVALUE_H
+
diff --git a/src/app/qranker-barista/Barista.cpp b/src/app/qranker-barista/Barista.cpp
new file mode 100644
index 0000000..e9a6059
--- /dev/null
+++ b/src/app/qranker-barista/Barista.cpp
@@ -0,0 +1,2895 @@
+#include "Barista.h"
+#include "model/objects.h"
+#include "app/ComputeQValues.h"
+#include "util/Params.h"
+
+using namespace std; 
+double Barista :: check_gradients_hinge_one_net(int protind, int label){
+  int num_pep = d.protind2num_pep(protind);
+  int *pepinds = d.protind2pepinds(protind);
+  max_psm_inds.erase(max_psm_inds.begin(),max_psm_inds.end());
+  max_psm_scores.erase(max_psm_scores.begin(),max_psm_scores.end());
+  for (int i = 0; i < num_pep; i++){
+    int pepind = pepinds[i];
+    int num_psms = d.pepind2num_psm(pepind);
+    int *psminds = d.pepind2psminds(pepind);
+    double max_sc = -1000000.0;
+    int max_ind = 0;
+    for (int j = 0; j < num_psms; j++){
+      double *feat = d.psmind2features(psminds[j]);
+      double *sc = net.fprop(feat);
+      if(sc[0] > max_sc){
+        max_sc = sc[0];
+	max_ind = j;
+      }
+    }
+      max_psm_inds.push_back(max_ind);
+      max_psm_scores.push_back(max_sc);
+    }
+  assert((int)max_psm_inds.size() == num_pep);
+  assert((int)max_psm_scores.size() == num_pep);
+  
+  double sm = 0.0;
+  double n = pow(num_pep,alpha);
+  for(unsigned int i = 0; i < max_psm_inds.size() ; i++)
+    sm+= max_psm_scores[i];
+  sm /= n;
+
+  net.clear_gradients();
+  double *gc = new double[1];
+  gc[0] = -label/n;
+  for(int i = 0; i < num_pep; i++){
+    int pepind = pepinds[i];
+    int *psminds = d.pepind2psminds(pepind);
+    int max_psm_ind = psminds[max_psm_inds[i]];
+    double *feat = d.psmind2features(max_psm_ind);
+    net.fprop(feat);
+    net.bprop(gc);
+  }
+
+  double h = 0.000001;
+  double diff = -(1-sm*label);
+  double err = 0.0;
+  double *w = net.get_weights(1);
+  double *dw = net.get_dweights(1);
+  for (int k = 0; k < d.get_num_features(); k++){
+      w[k] += h;
+      max_psm_inds.erase(max_psm_inds.begin(),max_psm_inds.end());
+      max_psm_scores.erase(max_psm_scores.begin(),max_psm_scores.end());
+      for (int i = 0; i < num_pep; i++){
+	  int pepind = pepinds[i];
+	  int num_psms = d.pepind2num_psm(pepind);
+	  int *psminds = d.pepind2psminds(pepind);
+	  double max_sc = -1000000.0;
+	  int max_ind = 0;
+	  for (int j = 0; j < num_psms; j++){
+	      double *feat = d.psmind2features(psminds[j]);
+	      double *sc = net.fprop(feat);
+	      if(sc[0] > max_sc){
+		  max_sc = sc[0];
+		  max_ind = j;
+		}
+	    }
+	  max_psm_inds.push_back(max_ind);
+	  max_psm_scores.push_back(max_sc);
+	}
+      double sm1 = 0.0;
+      double n = pow(num_pep,alpha);
+      for(unsigned int i = 0; i < max_psm_inds.size() ; i++)
+	sm1 += max_psm_scores[i];
+      sm1 /= n;
+      
+      diff += (1-sm1*label);
+      err += dw[k]-diff/h;
+      w[k]-=h;
+      diff -= (1-sm1*label);
+    }
+
+  
+  double *bias = net.get_bias(1);
+  double *dbias = net.get_dbias(1);
+  for (int k = 0; k < num_hu; k++)
+    {
+      bias[k] += h;
+      max_psm_inds.erase(max_psm_inds.begin(),max_psm_inds.end());
+      max_psm_scores.erase(max_psm_scores.begin(),max_psm_scores.end());
+      for (int i = 0; i < num_pep; i++)
+	{
+	  int pepind = pepinds[i];
+	  int num_psms = d.pepind2num_psm(pepind);
+	  int *psminds = d.pepind2psminds(pepind);
+	  double max_sc = -1000000.0;
+	  int max_ind = 0;
+	  for (int j = 0; j < num_psms; j++)
+	    {
+	      double *feat = d.psmind2features(psminds[j]);
+	      double *sc = net.fprop(feat);
+	      if(sc[0] > max_sc)
+		{
+		  max_sc = sc[0];
+		  max_ind = j;
+		}
+	    }
+	  max_psm_inds.push_back(max_ind);
+	  max_psm_scores.push_back(max_sc);
+	}
+      double sm1 = 0.0;
+      double n = pow(num_pep,alpha);
+      for(unsigned int i = 0; i < max_psm_inds.size() ; i++)
+	sm1 += max_psm_scores[i];
+      sm1 /= n;
+
+      diff += 1-sm1*label;
+      err += dbias[k]-diff/h;
+      bias[k]-=h;
+      diff -= 1-sm1*label;
+    }
+  
+  w = net.get_weights(2);
+  dw = net.get_dweights(2);
+  for (int k = 0; k < num_hu; k++)
+    {
+      w[k] += h;
+      max_psm_inds.erase(max_psm_inds.begin(),max_psm_inds.end());
+      max_psm_scores.erase(max_psm_scores.begin(),max_psm_scores.end());
+      for (int i = 0; i < num_pep; i++)
+	{
+	  int pepind = pepinds[i];
+	  int num_psms = d.pepind2num_psm(pepind);
+	  int *psminds = d.pepind2psminds(pepind);
+	  double max_sc = -1000000.0;
+	  int max_ind = 0;
+	  for (int j = 0; j < num_psms; j++)
+	    {
+	      double *feat = d.psmind2features(psminds[j]);
+	      double *sc = net.fprop(feat);
+	      if(sc[0] > max_sc)
+		{
+		  max_sc = sc[0];
+		  max_ind = j;
+		}
+	    }
+	  max_psm_inds.push_back(max_ind);
+	  max_psm_scores.push_back(max_sc);
+	}
+      double sm1 = 0.0;
+      double n = pow(num_pep,alpha);
+      for(unsigned int i = 0; i < max_psm_inds.size() ; i++)
+	sm1 += max_psm_scores[i];
+      sm1 /= n;
+
+      diff += 1-sm1*label;
+      err += dw[k]-diff/h;
+      w[k]-=h;
+      diff -= 1-sm1*label;
+    }
+
+  bias = net.get_bias(2);
+  dbias = net.get_dbias(2);
+  for (int k = 0; k < 1; k++)
+    {
+      bias[k] += h;
+      max_psm_inds.erase(max_psm_inds.begin(),max_psm_inds.end());
+      max_psm_scores.erase(max_psm_scores.begin(),max_psm_scores.end());
+      for (int i = 0; i < num_pep; i++)
+	{
+	  int pepind = pepinds[i];
+	  int num_psms = d.pepind2num_psm(pepind);
+	  int *psminds = d.pepind2psminds(pepind);
+	  double max_sc = -1000000.0;
+	  int max_ind = 0;
+	  for (int j = 0; j < num_psms; j++)
+	    {
+	      double *feat = d.psmind2features(psminds[j]);
+	      double *sc = net.fprop(feat);
+	      if(sc[0] > max_sc)
+		{
+		  max_sc = sc[0];
+		  max_ind = j;
+		}
+	    }
+	  max_psm_inds.push_back(max_ind);
+	  max_psm_scores.push_back(max_sc);
+	}
+      double sm1 = 0.0;
+      double n = pow(num_pep,alpha);
+      for(unsigned int i = 0; i < max_psm_inds.size() ; i++)
+	sm1 += max_psm_scores[i];
+      sm1 /= n;
+
+      diff += 1-sm1*label;
+      err += dbias[k]-diff/h;
+      bias[k]-=h;
+      diff -= 1-sm1*label;
+    }
+  return err;
+}
+
+double Barista :: check_gradients_hinge_clones(int protind, int label)
+{
+  double sm = get_protein_score(protind);
+  net.clear_gradients();
+  calc_gradients(protind,label);
+
+  double h = 0.0000001;
+  double diff = -(1-sm*label);
+  double err = 0.0;
+  double *w = net.get_weights(1);
+  double *dw = net.get_dweights(1);
+  for (int k = 0; k < d.get_num_features(); k++)
+    {
+      w[k] += h;
+      double sm1 = get_protein_score(protind);
+      diff += (1-sm1*label);
+      err += dw[k]-diff/h;
+      w[k]-=h;
+      diff -= (1-sm1*label);
+    }
+  
+  double *bias = net.get_bias(1);
+  double *dbias = net.get_dbias(1);
+  for (int k = 0; k < num_hu; k++)
+    {
+      bias[k] += h;
+      double sm1 = get_protein_score(protind);
+      diff += 1-sm1*label;
+      err += dbias[k]-diff/h;
+      bias[k]-=h;
+      diff -= 1-sm1*label;
+    }
+  
+  w = net.get_weights(2);
+  dw = net.get_dweights(2);
+  for (int k = 0; k < num_hu; k++)
+    {
+      w[k] += h;
+      double sm1 = get_protein_score(protind);
+      diff += 1-sm1*label;
+      err += dw[k]-diff/h;
+      w[k]-=h;
+      diff -= 1-sm1*label;
+    }
+
+  bias = net.get_bias(2);
+  dbias = net.get_dbias(2);
+  for (int k = 0; k < 1; k++)
+    {
+      bias[k] += h;
+      double sm1 = get_protein_score(protind);
+      diff += 1-sm1*label;
+      err += dbias[k]-diff/h;
+      bias[k]-=h;
+      diff -= 1-sm1*label;
+    }
+  
+  net.update(mu);
+
+  return err;
+}
+
+/**********************************************************/
+int Barista :: getOverFDRPSM(PSMScores &s, NeuralNet &n,double fdr)
+{
+  double* featVec;
+  for(int i = 0; i < s.size(); i++)
+    {
+      featVec = d.psmind2features(s[i].psmind);
+      double *r = n.fprop(featVec);
+      s[i].score = r[0];
+    }
+
+  int overFDR = s.calcOverFDR(fdr);
+ 
+  if(verbose > 1)
+    {
+      cout << "psm over fdr: num psms " << overFDR << endl;
+      int cn = 0;
+      set<int> peptides;
+      for(int i = 0; i < s.size(); i++)
+	{
+	  if(s[i].label == 1)
+	    cn++;
+	  peptides.insert(d.psmind2pepind(s[i].psmind));
+	  if(cn >= overFDR)
+	    break;
+	}
+      cout << "psm over fdr: num peptides " << peptides.size() << endl;
+    }
+  return overFDR;
+}
+
+double Barista :: get_peptide_score(int pepind, NeuralNet &n)
+{
+  int num_psm = d.pepind2num_psm(pepind);
+  int *psminds = d.pepind2psminds(pepind);
+  double max_sc = -100000000.0;
+  int max_ind = 0;
+  for(int i = 0; i < num_psm; i++)
+    {
+      int psmind = psminds[i];
+      double *feat = d.psmind2features(psmind);
+      double *sc = n.fprop(feat);
+      if(max_sc < sc[0])
+	{
+	  max_sc = sc[0];
+	  max_ind = i;
+	}
+    }
+  if((int)pepind_to_max_psmind.size() == d.get_num_peptides())
+    pepind_to_max_psmind[pepind] = psminds[max_ind];
+  return max_sc;
+}
+
+
+int Barista :: getOverFDRPep(PepScores &s, NeuralNet &n,double fdr)
+{
+  int pepind = 0;
+  int label = 0;
+  for(int i = 0; i < s.size(); i++)
+    {
+      pepind = s[i].pepind;
+      double sc = get_peptide_score(pepind,n);
+      s[i].score = sc;
+    }
+
+  int overFDR = s.calcOverFDR(fdr);
+
+  if(verbose > 1)
+    {
+      int cn = 0;
+      set<int> proteins_pos;
+      set<int> proteins_neg;
+      int pep_pos = 0;
+      int pep_neg = 0;
+      for(int i = 0; i < s.size(); i++)
+	{
+	  label = s[i].label;
+	  if(label == 1)
+	    cn++;
+      
+	  if(label == 1)
+	    pep_pos++;
+	  else
+	    pep_neg++;
+	  
+	  int pepind = s[i].pepind;
+	  int num_prot = d.pepind2num_prot(pepind);
+	  int *protinds = d.pepind2protinds(pepind);
+	  for(int j=0; j < num_prot;j++)
+	    {
+	      if(label == 1)
+		proteins_pos.insert(protinds[j]);
+	  else
+	    proteins_neg.insert(protinds[j]);
+	    }
+	  if(cn >= overFDR)
+	    break;
+	}
+      cout << "over FDR peptides:\n";
+      cout << "num pos proteins  " << proteins_pos.size() << " num neg proteins " << proteins_neg.size() << " num pos peptides " << pep_pos << " num neg peptides " << pep_neg  << endl;
+
+    }
+  return overFDR;
+}
+
+/*****************************************************/
+void Barista :: clear()
+{
+  trainset.clear();
+  testset.clear();
+  peptrainset.clear();
+  peptestset.clear();
+  psmtrainset.clear();
+  psmtestset.clear();
+  delete[] net_clones; net_clones = 0;
+  max_psm_inds.clear();
+  max_psm_scores.clear();
+  used_peptides.clear();
+  pepind_to_max_psmind.clear();
+  if (parser)
+    {
+      delete parser;
+    }
+}
+
+
+double Barista :: get_protein_score_parsimonious(int protind, NeuralNet &n)
+{
+  int num_pep = d.protind2num_pep(protind);
+  int num_all_pep = d.protind2num_all_pep(protind);
+  int *pepinds = d.protind2pepinds(protind);
+  double sm = 0.0;
+  double div = pow(num_all_pep,alpha);
+
+  for (int i = 0; i < num_pep; i++)
+    {
+      int pepind = pepinds[i];
+
+      if(used_peptides[pepind] == 0)
+	{
+	  used_peptides[pepind] = 1;
+	  int num_psms = d.pepind2num_psm(pepind);
+	  int *psminds = d.pepind2psminds(pepind);
+	  double max_sc = -1000000.0;
+
+	  for (int j = 0; j < num_psms; j++)
+	    {
+	      double *feat = d.psmind2features(psminds[j]);
+	      double *sc = n.fprop(feat);
+	      if(sc[0] > max_sc)
+		{
+		  max_sc = sc[0];
+		}
+	    }
+	  sm += max_sc;
+	}
+    }
+  
+  sm /= div;
+  return sm;
+}
+
+int Barista :: getOverFDRProtParsimonious(ProtScores &set, NeuralNet &n, double fdr)
+{
+  
+  int total_num_pep = d.get_num_peptides();
+  used_peptides.clear();
+  used_peptides.resize(total_num_pep,0);
+  double r = 0.0;
+  for(int i = 0; i < set.size(); i++)
+    {
+      int protind = set[i].protind;
+      r = get_protein_score_parsimonious(protind,n);
+      set[i].score = r;
+    }
+  return set.calcOverFDR(fdr);
+}
+
+void Barista :: write_results_prot(string &out_dir, int fdr)
+{
+  ostringstream fn;
+  fn << out_dir <<"/barista.target.proteins.txt";
+  carp(CARP_INFO, "write_results to %s", fn.str().c_str());
+  ofstream f_res(fn.str().c_str());
+
+  int cn = 0;
+  for(int i = 0; i < trainset.size(); i++)
+    {
+      if(trainset[i].label == 1)
+	{
+	  //write out proteins
+	  f_res << "protein group " << cn+1  << " q=" << trainset[i].q << endl;
+	  int protind = trainset[i].protind;
+	  f_res << d.ind2prot(protind) << " ";
+	  for(unsigned int j = 0; j < trainset[i].subset_protinds.size(); j++)
+	    {
+	      int ind = trainset[i].subset_protinds[j];
+	      if(d.protind2label(ind) == 1)
+		f_res << d.ind2prot(ind) << " ";
+	    }
+	  f_res << endl;
+	
+	  //write out peptides
+	  f_res << "peptides\n";
+	  int num_pep = d.protind2num_pep(protind);
+	  int *pepinds = d.protind2pepinds(protind);
+	  for( int j = 0; j < num_pep; j++)
+	    {
+	      int pepind = pepinds[j];
+	      f_res << d.ind2pep(pepind); 
+	      int psmind = pepind_to_max_psmind[pepind];
+	      if(psmind > -1)
+		f_res << "-" << d.psmind2scan(psmind) << "." << d.psmind2charge(psmind);
+	      else
+		carp(CARP_DEBUG, "warning: did not assign peptide a max psm index");
+	      f_res << " ";
+	    }
+	  f_res << endl << endl;
+	  cn++;
+	}
+      if(cn >= fdr)
+	break;
+    }
+  f_res.close();
+}
+
+
+void Barista :: report_all_results()
+{
+  trainset.clear();
+  testset.clear();
+  ProtScores::fillProteinsFull(trainset, d);
+  carp(CARP_INFO, "finished training, making parsimonious protein set");
+  trainset.make_meta_set(d);
+  int fdr_trn = getOverFDRProtParsimonious(trainset,max_net_prot,selectionfdr);
+  carp(CARP_INFO, "total proteins parsimonious at q<%.2f: %d", selectionfdr, fdr_trn);
+
+  int fdr_trn_psm = getOverFDRPSM(psmtrainset, max_net_psm, selectionfdr);
+  carp(CARP_INFO, "peptides at q<%.2f: %d", selectionfdr, getOverFDRPep(peptrainset, max_net_pep, selectionfdr)); 
+  carp(CARP_INFO, "psms at q<%.2f: %d", selectionfdr, fdr_trn_psm);
+  
+  write_results_prot(out_dir, fdr_trn);
+}
+
+void Barista :: get_pep_seq(string &pep, string &seq, string &n, string &c)
+{
+  string tmp;
+  int pos;
+  pos = pep.find('.');
+  n = pep.at(pos-1); 
+  tmp = pep.substr(pos+1, pep.size());
+
+  pos = tmp.rfind('.');
+  c = tmp.at(pos+1);
+  seq = tmp.substr(0, pos);
+}
+
+void Barista :: get_tab_delim_proteins(string protein_str, vector<string> &proteins)
+{
+  proteins.clear(); 
+  string str = protein_str;
+  size_t pos = str.find("\t");
+  while(pos != string::npos){
+    if(pos == 0){
+      str = str.substr(1,str.size()-1);
+   } else{
+      string prot = str.substr(0,pos);
+      str = str.substr(pos+1,str.size()-1); 
+      proteins.push_back(prot);
+    }
+    pos = str.find("\t");
+  }
+  proteins.push_back(str);
+}
+
+
+void Barista :: write_protein_special_case_xml(ofstream &os, int i)
+{
+
+  string protein_str;
+  vector<string> tab_delim_proteins;
+  
+  int protind = trainset[i].protind;
+  int group = trainset[i].group_number;
+  os << " <protein_group group_id=" << "\"" << group << "\"" << ">" << endl;
+  os << "  <q_value>" << trainset[i].q << "</q_value>" << endl;
+  os << "  <score>" << trainset[i].score << "</score>" << endl;
+  os << "  <protein_ids>" << endl;
+  protein_str = d.ind2prot(protind);
+  get_tab_delim_proteins(protein_str, tab_delim_proteins);
+  for(unsigned int k = 0; k < tab_delim_proteins.size(); k++)
+    os << "   <protein_id>" << tab_delim_proteins[k] << "</protein_id>" <<endl;
+  
+  vector<int> complement = trainset[i].protind2complement[protind];
+  if(complement.size() != 0)
+    {
+      for(unsigned int k = 0; k < complement.size(); k++)
+	{
+	  int pepind = complement[k];
+	  string pep = d.ind2pep(pepind);
+	  string seq, n, c;
+	  get_pep_seq(pep, seq, n, c);
+	  os << "   <alternative_peptide_id>" << seq << "</alternative_peptide_id>"<< endl;
+	}
+    }
+  
+  for(unsigned int j = 0; j < trainset[i].indistinguishable_protinds.size(); j++)
+    {
+      int ind = trainset[i].indistinguishable_protinds[j];
+      if(d.protind2label(ind) == 1)
+	{
+	  //os << "   <protein_id>" << d.ind2prot(ind) << "</protein_id> " << endl;;
+	  protein_str = d.ind2prot(ind);
+	  get_tab_delim_proteins(protein_str, tab_delim_proteins);
+	  for(unsigned int k = 0; k < tab_delim_proteins.size(); k++)
+	    os << "   <protein_id>" << tab_delim_proteins[k] << "</protein_id>" <<endl;
+	  
+	  vector<int> complement = trainset[i].protind2complement[ind];
+	  if(complement.size() != 0)
+	    {
+	      for(unsigned int k = 0; k < complement.size(); k++)
+		{
+		  int pepind = complement[k];
+		  string pep = d.ind2pep(pepind);
+		  string seq, n, c;
+		  get_pep_seq(pep, seq, n, c);
+		  os << "   <alternative_peptide_id>" << seq << "</alternative_peptide_id>"<< endl;
+		}
+	    }
+	}
+    }
+  os << "  </protein_ids>" << endl;
+  
+  //write out peptides
+  os << "  <peptide_ids>" << endl;
+  vector<int> intersection = trainset[i].intersection;
+  for( unsigned int j = 0; j < intersection.size(); j++)
+    {
+      int pepind = intersection[j];
+      string pep = d.ind2pep(pepind);
+      string seq, n, c;
+      get_pep_seq(pep, seq, n, c);
+      os << "   <peptide_id>" << seq << "</peptide_id>"<< endl; 
+    }
+  os << "  </peptide_ids>" << endl;
+  os << " </protein_group>" << endl;
+}
+
+
+void Barista :: write_results_prot_xml(ofstream &os)
+{
+  string protein_str;
+  vector<string> tab_delim_proteins;
+  os << "<proteins>" <<endl;
+  int cn = 0;
+  for(int i = 0; i < trainset.size(); i++)
+    {
+      int protind = trainset[i].protind;
+      int group = trainset[i].group_number;
+      if(d.protind2label(protind) == 1)
+	{
+	  cn++;
+	  if(trainset[i].has_complement == 1)
+	    {
+	      write_protein_special_case_xml(os, i);
+	      continue;
+	    }
+	  //write out proteins
+	  os << " <protein_group group_id=" << "\"" << group << "\"" << ">" << endl;
+	  os << "  <q_value>" << trainset[i].q << "</q_value>" << endl;
+	  os << "  <score>" << trainset[i].score << "</score>" << endl;
+	  os << "  <nsaf>" << trainset[i].nsaf << "</nsaf>" << endl;
+          os<<"<barista PEP>"<<trainset[i].PEP<<"</barista PEP>"<<endl; 
+	  os << "  <protein_ids>" << endl;
+	  protein_str = d.ind2prot(protind);
+	  get_tab_delim_proteins(protein_str, tab_delim_proteins);
+	  for(unsigned int k = 0; k < tab_delim_proteins.size(); k++)
+	    os << "   <protein_id>" << tab_delim_proteins[k] << "</protein_id>" <<endl;
+	  
+	  for(unsigned int j = 0; j < trainset[i].indistinguishable_protinds.size(); j++)
+	    {
+	      int ind = trainset[i].indistinguishable_protinds[j];
+	      if(d.protind2label(ind) == 1)
+		{
+		  protein_str = d.ind2prot(ind);
+		  get_tab_delim_proteins(protein_str, tab_delim_proteins);
+		  for(unsigned int k = 0; k < tab_delim_proteins.size(); k++)
+		    os << "   <protein_id>" << tab_delim_proteins[k] << "</protein_id>" <<endl;
+		}
+	    }
+	  os << "  </protein_ids>" << endl;
+	
+	  //write out peptides
+
+	  os << "  <peptide_ids>" << endl;
+	  int num_pep = d.protind2num_pep(protind);
+	  int *pepinds = d.protind2pepinds(protind);
+	  for( int j = 0; j < num_pep; j++)
+	    {
+	      int pepind = pepinds[j];
+	      string pep = d.ind2pep(pepind);
+	      string seq, n, c;
+	      get_pep_seq(pep, seq, n, c);
+	      os << "   <peptide_id>" << seq << "</peptide_id>"<< endl; 
+	    }
+	  os << "  </peptide_ids>" << endl;
+	  os << " </protein_group>" << endl;
+	}
+
+    }
+  os << "</proteins>" << endl;
+}
+
+void Barista :: write_subset_protein_special_case_xml(ofstream &os, int i)
+{
+  string protein_str;
+  vector<string> tab_delim_proteins;
+
+  //write out proteins
+  int protind = trainset.get_subset_prot(i).protind;
+  int group = trainset.get_subset_prot(i).group_number;
+  os << " <protein_group group_id=" << "\"" << group << "\"";
+  vector<int> parent_groups = trainset.get_subset_prot(i).parent_groups;
+  if(parent_groups.size() == 0)
+    cout << "problem: no parent groups" << endl;
+  os << " parent_group_ids=" << "\""; 
+  for(unsigned int k = 0; k < parent_groups.size()-1; k++)
+    os << parent_groups[k] << ","; 
+  os << parent_groups[parent_groups.size()-1] << "\"";
+  os << ">" << endl;
+
+  os << "  <protein_ids>" << endl;
+  protein_str = d.ind2prot(protind);
+  get_tab_delim_proteins(protein_str, tab_delim_proteins);
+  for(unsigned int k = 0; k < tab_delim_proteins.size(); k++)
+    os << "   <protein_id>" << tab_delim_proteins[k] << "</protein_id>" <<endl;
+
+  vector<int> complement = trainset.get_subset_prot(i).protind2complement[protind];
+  if(complement.size() != 0)
+    {
+      for(unsigned int k = 0; k < complement.size(); k++)
+	{
+	  int pepind = complement[k];
+	  string pep = d.ind2pep(pepind);
+	  string seq, n, c;
+	  get_pep_seq(pep, seq, n, c);
+	  os << "   <alternative_peptide_id>" << seq << "</alternative_peptide_id>"<< endl;
+	}
+    }
+  
+  for(unsigned int j = 0; j < trainset.get_subset_prot(i).indistinguishable_protinds.size(); j++)
+    {
+      int ind = trainset.get_subset_prot(i).indistinguishable_protinds[j];
+      if(d.protind2label(ind) == 1)
+	{
+	  protein_str = d.ind2prot(ind);
+	  get_tab_delim_proteins(protein_str, tab_delim_proteins);
+	  for(unsigned int k = 0; k < tab_delim_proteins.size(); k++)
+	    os << "   <protein_id>" << tab_delim_proteins[k] << "</protein_id>" <<endl;
+	  
+	  vector<int> complement = trainset.get_subset_prot(i).protind2complement[ind];
+	  if(complement.size() != 0)
+	    {
+	      for(unsigned int k = 0; k < complement.size(); k++)
+		{
+		  int pepind = complement[k];
+		  string pep = d.ind2pep(pepind);
+		  string seq, n, c;
+		  get_pep_seq(pep, seq, n, c);
+		  os << "   <alternative_peptide_id>" << seq << "</alternative_peptide_id>"<< endl;
+		}
+	    }
+	  
+	}
+    }
+  os << "  </protein_ids>" << endl;
+  
+  //write out peptides
+  os << "  <peptide_ids>" << endl;
+  vector<int> intersection = trainset.get_subset_prot(i).intersection;
+  for( unsigned int j = 0; j < intersection.size(); j++)
+    {
+      int pepind = intersection[j];
+      string pep = d.ind2pep(pepind);
+      string seq, n, c;
+      get_pep_seq(pep, seq, n, c);
+      os << "   <peptide_id>" << seq << "</peptide_id>"<< endl; 
+    }
+  os << "  </peptide_ids>" << endl;
+  os << " </protein_group>" << endl;
+  
+}
+
+
+
+void Barista :: write_results_subset_prot_xml(ofstream &os)
+{
+  string protein_str;
+  vector<string> tab_delim_proteins;
+  os << "<subset_proteins>" <<endl;
+
+  int num_subset_prot = trainset.get_num_subsets();
+
+  int cn = 0;
+  for(int i = 0; i < num_subset_prot; i++)
+    {
+      int protind = trainset.get_subset_prot(i).protind;
+      int group = trainset.get_subset_prot(i).group_number;
+      if(d.protind2label(protind) == 1)
+	{
+	  cn++;
+
+	  if(trainset.get_subset_prot(i).has_complement == 1)
+	    {
+	      write_subset_protein_special_case_xml(os, i);
+	      continue;
+	    }
+
+	  //write out proteins
+	  os << " <protein_group group_id=" << "\"" << group << "\"";
+	  vector<int> parent_groups = trainset.get_subset_prot(i).parent_groups;
+	  if(parent_groups.size() == 0)
+	    cout << "problem: no parent groups" << endl;
+	  os << " parent_group_ids=" << "\""; 
+	  for(unsigned int k = 0; k < parent_groups.size()-1; k++)
+	    os << parent_groups[k] << ","; 
+	  os << parent_groups[parent_groups.size()-1] << "\"";
+	  os << ">" << endl;
+	  os << "  <protein_ids>" << endl;
+	  protein_str = d.ind2prot(protind);
+	  get_tab_delim_proteins(protein_str, tab_delim_proteins);
+	  for(unsigned int k = 0; k < tab_delim_proteins.size(); k++)
+	    os << "   <protein_id>" << tab_delim_proteins[k] << "</protein_id>" <<endl;
+	  
+	  for(unsigned int j = 0; j < trainset.get_subset_prot(i).indistinguishable_protinds.size(); j++)
+	    {
+	      int ind = trainset.get_subset_prot(i).indistinguishable_protinds[j];
+	      if(d.protind2label(ind) == 1)
+		{
+		  protein_str = d.ind2prot(ind);
+		  get_tab_delim_proteins(protein_str, tab_delim_proteins);
+		  for(unsigned int k = 0; k < tab_delim_proteins.size(); k++)
+		    os << "   <protein_id>" << tab_delim_proteins[k] << "</protein_id>" <<endl;
+		}
+	    }
+	  os << "  </protein_ids>" << endl;
+	
+	  //write out peptides
+	  os << "  <peptide_ids>" << endl;
+	  int num_pep = d.protind2num_pep(protind);
+	  int *pepinds = d.protind2pepinds(protind);
+	  for( int j = 0; j < num_pep; j++)
+	    {
+	      int pepind = pepinds[j];
+	      string pep = d.ind2pep(pepind);
+	      string seq, n, c;
+	      get_pep_seq(pep, seq, n, c);
+	      os << "   <peptide_id>" << seq << "</peptide_id>"<< endl; 
+	    }
+	  os << "  </peptide_ids>" << endl;
+	  os << " </protein_group>" << endl;
+	}
+    }
+  os << "</subset_proteins>" << endl;
+}
+
+
+void Barista :: write_results_peptides_xml(ofstream &os)
+{
+  string protein_str;
+  vector<string> tab_delim_proteins;
+  os << "<peptides>" <<endl;
+  int cn = 0;
+  for(int i = 0; i < peptrainset.size(); i++)
+    {
+      int pepind = peptrainset[i].pepind;
+      if(peptrainset[i].label == 1)
+	{
+	  cn++;
+	  //write out proteins
+	  string pep = d.ind2pep(pepind);
+	  string seq, n, c;
+	  get_pep_seq(pep, seq, n, c);
+	  os << " <peptide peptide_id=\"" << seq << "\">" << endl;
+	  os << "  <q_value>" << peptrainset[i].q << "</q_value>" << endl;
+	  os << "  <score>" << peptrainset[i].score << "</score>" << endl;
+	  os << "  <nsaf>" << peptrainset[i].nsaf << "</nsaf>" << endl;
+          os << " <barista PEP>" <<peptrainset[i].PEP<<"</barista PEP>"<<endl; 
+	  //write out peptides
+	  int psmind = pepind_to_max_psmind[pepind];
+	  if(psmind > -1)
+	    os << "  <main_psm_id>"<< psmind << "</main_psm_id>" << endl;
+	  else
+	    carp(CARP_DEBUG,"warning: did not assign peptide %s and index %d a max"
+		 "psm index", pep.c_str(), psmind);
+	  //print out all the psms in which this peptide is present
+	  int num_psm = d.pepind2num_psm(pepind);
+	  int *psminds = d.pepind2psminds(pepind);
+	  os << "  <psm_ids>" << endl;
+	  for(int j = 0; j < num_psm; j++)
+	    os << "   <psm_id>" << psminds[j] << "</psm_id>" << endl;
+	  os << "  </psm_ids>" << endl;
+	  
+	  //print out all the proteins
+	  int num_prot = d.pepind2num_prot(pepind);
+	  int *protinds = d.pepind2protinds(pepind);
+	  os << "  <protein_ids>" << endl;
+	  for(int j = 0; j < num_prot; j++)
+	    {
+	      protein_str = d.ind2prot(protinds[j]);
+	      get_tab_delim_proteins(protein_str, tab_delim_proteins);
+	      for(unsigned int k = 0; k < tab_delim_proteins.size(); k++)
+		os << "   <protein_id>" << tab_delim_proteins[k] << "</protein_id>"
+		   <<endl;
+	    }
+	  os << "  </protein_ids>" << endl;
+	  os << " </peptide>" << endl;  
+	}
+      
+    }
+  os << "</peptides>" << endl;
+}
+
+void Barista :: write_results_psm_xml(ofstream &os)
+{
+  os << "<psms>" <<endl;
+  int cn = 0;
+  for(int i = 0; i < psmtrainset.size(); i++)
+    {
+      int psmind = psmtrainset[i].psmind;
+      if(psmtrainset[i].label == 1)
+	{
+	  cn++;
+	  //write out proteins
+	  os << " <psm psm_id=" << "\"" << psmind << "\"" << ">" << endl;
+	  os << "  <q_value>" << psmtrainset[i].q << "</q_value>" << endl;
+	  os << "  <score>" << psmtrainset[i].score << "</score>" << endl;
+	  os << "  <scan>" << d.psmind2scan(psmind) << "</scan>" << endl;
+	  os << "  <charge>" << d.psmind2charge(psmind) << "</charge>" << endl;
+	  os << "  <precursor_mass>" << d.psmind2precursor_mass(psmind) << "</precursor_mass>" << endl;
+	  int pepind = d.psmind2pepind(psmind);
+	  string pep = d.ind2pep(pepind);
+	  string seq, n,c;
+	  get_pep_seq(pep,seq,n,c);
+	  os << "  <peptide_seq n =\"" << n << "\" c=\"" << c << "\" seq=\"" << seq << "\"/>" << endl;
+	  os << "  <file_name>" << d.psmind2fname(psmind) << "</file_name>" << endl;
+	  os << " </psm>" << endl;  
+	}
+    }
+  os << "</psms>" << endl;
+}
+
+
+void Barista :: write_results_pep_xml(PepXMLWriter& xmlfile)
+{
+  xmlfile.writeHeader();
+
+  bool* scores_to_print = new bool[NUMBER_SCORER_TYPES];
+  for(int score_idx = 0; score_idx < NUMBER_SCORER_TYPES; score_idx++){
+    scores_to_print[score_idx] = false;
+  }
+  scores_to_print[SP] = true; 
+  scores_to_print[XCORR] = true;
+  scores_to_print[BARISTA_SCORE] = true;
+  scores_to_print[BARISTA_QVALUE] = true;
+  scores_to_print[BARISTA_PEP] = true;
+  scores_to_print[DELTA_CN] = true;
+  scores_to_print[BY_IONS_MATCHED] = true;
+  scores_to_print[BY_IONS_TOTAL] = true;
+
+  double* scores = new double[NUMBER_SCORER_TYPES];
+
+  for(int i = 0; i < psmtrainset.size(); i++) {
+    // only print target psms
+    if( psmtrainset[i].label == -1 ){
+      continue;
+    }
+
+      int psmind = psmtrainset[i].psmind;
+
+      // spectrum info
+      int scan = d.psmind2scan(psmind);
+      const char* filename = d.psmind2fname(psmind).c_str();
+      char** path_name = parse_filename_path_extension(filename, NULL);
+      filename = path_name[0];
+      double spectrum_mass = d.psmind2precursor_mass(psmind); 
+      int charge = d.psmind2charge(psmind);
+
+      // peptide info
+      int pepind = d.psmind2pepind(psmind);
+      string pep = d.ind2pep(pepind);
+      string modified_sequence, n,c;
+      get_pep_seq(pep, modified_sequence, n, c);
+      char* sequence = unmodify_sequence(modified_sequence.c_str());
+      string flanking_aas = n + c;
+      double peptide_mass = d.psmind2peptide_mass(psmind);
+
+      // protein info
+      int num_proteins = d.pepind2num_prot(pepind); 
+      int* protein_indexes = d.pepind2protinds(pepind);
+      vector<string> protein_names;
+      vector<string> protein_descriptions;
+      for(int prot_idx = 0; prot_idx < num_proteins; prot_idx++){
+        string protein_name = d.ind2prot(protein_indexes[prot_idx]);
+        protein_names.push_back(protein_name);
+        protein_descriptions.push_back("");
+        flanking_aas += "," + n + c; // todo
+      }
+
+      // psm info
+      int* psm_ranks = new int[NUMBER_SCORER_TYPES];
+      double delta_cn = d.psmind2deltaCn(psmind);
+     
+      scores[XCORR] = d.psmind2xcorr(psmind);
+      scores[SP] = d.psmind2spscore(psmind);
+      scores[QRANKER_SCORE] = psmtrainset[i].score;
+      scores[QRANKER_QVALUE] = psmtrainset[i].q;
+      scores[QRANKER_PEP] = psmtrainset[i].PEP;
+      scores[DELTA_CN] = delta_cn;
+      scores[BY_IONS_MATCHED] = d.psmind2by_ions_matched(psmind);
+      scores[BY_IONS_TOTAL] = d.psmind2by_ions_total(psmind);
+      psm_ranks[SP]=d.psmind2sp_rank(psmind); 
+      psm_ranks[XCORR]=d.psmind2xcorr_rank(psmind);
+      xmlfile.writePSM(scan, filename, spectrum_mass, charge, psm_ranks,
+                       sequence, modified_sequence.c_str(),
+                       peptide_mass, num_proteins,
+                       flanking_aas.c_str(), protein_names, 
+                       protein_descriptions, scores_to_print, scores,
+                       d.psmind2matches_spectrum(psmind));
+
+      free(sequence);
+      if( path_name[0] ){
+        free(path_name[0]);
+      }
+      if( path_name[1] ){
+        free(path_name[1]);
+      }
+      free(path_name);
+  }
+
+  xmlfile.writeFooter();
+}
+
+
+
+/*************************************************************************/
+
+void Barista :: write_results_prot_special_case_tab(ofstream &os, int i)
+{
+  //write out protein
+  int protind = trainset[i].protind;
+  int group = trainset[i].group_number;
+  os << group << "\t";
+  os << trainset[i].q << "\t";
+  os << trainset[i].score << "\t";
+  os << d.ind2prot(protind); 
+  vector<int> complement = trainset[i].protind2complement[protind];
+  if(complement.size() != 0)
+    {
+      os << "(";
+      int pepind = complement[0];
+      string pep = d.ind2pep(pepind);
+      string seq, n, c;
+      get_pep_seq(pep, seq, n, c);
+      os << pep;
+      for(unsigned int k = 1; k < complement.size(); k++)
+	{
+	  pepind = complement[k];
+	  pep = d.ind2pep(pepind);
+	  get_pep_seq(pep, seq, n, c);
+	  os << "," << pep;
+	}
+      os << ")";
+    }
+  
+  for(unsigned int j = 0; j < trainset[i].indistinguishable_protinds.size(); j++)
+    {
+      int ind = trainset[i].indistinguishable_protinds[j];
+      if(d.protind2label(ind) == 1)
+	{
+	  os << "," << d.ind2prot(ind);
+	  vector<int> complement = trainset[i].protind2complement[protind];
+	  if(complement.size() != 0)
+	    {
+	      os << "(";
+	      int pepind = complement[0];
+	      string pep = d.ind2pep(pepind);
+	      string seq, n, c;
+	      get_pep_seq(pep, seq, n, c);
+	      int psmind = pepind_to_max_psmind[pepind];
+	      if(psmind > -1)
+		os << "," << pep <<  "-" << d.psmind2scan(psmind) << "." << d.psmind2charge(psmind);
+	      for(unsigned int k = 1; k < complement.size(); k++)
+		{
+		  pepind = complement[k];
+		  pep = d.ind2pep(pepind);
+		  get_pep_seq(pep, seq, n, c);
+		  psmind = pepind_to_max_psmind[pepind];
+		  if(psmind > -1)
+		    os << "," << pep <<  "-" << d.psmind2scan(psmind) << "." << d.psmind2charge(psmind);
+      		}
+	      os << ")";
+	    }
+	}
+    }
+  os << "\t";
+  
+  //write out peptides
+  int num_pep = d.protind2num_pep(protind);
+  int *pepinds = d.protind2pepinds(protind);
+  //write the first one
+  int pepind = pepinds[0];
+  string pep = d.ind2pep(pepind);
+  string seq, n, c;
+  get_pep_seq(pep, seq, n, c);
+  int psmind = pepind_to_max_psmind[pepind];
+  if(psmind > -1)
+    os << pep <<  "-" << d.psmind2scan(psmind) << "." << d.psmind2charge(psmind);
+  else
+    {
+      carp(CARP_DEBUG,"warning: did not assign peptide max psm index");
+    }
+  for( int j = 1; j < num_pep; j++)
+    {
+      pepind = pepinds[j];
+      pep = d.ind2pep(pepind);
+      string seq, n, c;
+      get_pep_seq(pep, seq, n, c);
+      psmind = pepind_to_max_psmind[pepind];
+      if(psmind > -1)
+	os << "," << pep <<  "-" << d.psmind2scan(psmind) << "." << d.psmind2charge(psmind);
+      else
+	{
+	carp(CARP_DEBUG,"warning: did not assign peptide %s and index %d a max"
+	     "psm index", pep.c_str(), psmind);
+	}
+    }
+  os << endl;
+
+
+}
+
+void Barista :: write_results_prot_tab(ofstream &os)
+{
+  os << "group number" << "\t" << "q-value" << "\t" << "barista score" << "\t" << "NSAF score" << "\t";
+  os<<"barista PEP\t";
+  os << "proteins" << "\t" << "peptides-scan.charge"<<endl;
+
+  int cn = 0;
+  for(int i = 0; i < trainset.size(); i++)
+    {
+      if(trainset[i].label == 1)
+	{
+	  cn++;
+	  if(trainset[i].has_complement == 1)
+	    {
+	      write_results_prot_special_case_tab(os, i);
+	      continue;
+	    }
+	  //write out proteins
+	  int protind = trainset[i].protind;
+	  int group = trainset[i].group_number;
+	  os << group << "\t";
+	  os << trainset[i].q << "\t";
+	  os << trainset[i].score << "\t";
+	  os << trainset[i].nsaf << "\t";
+          os<<trainset[i].PEP<<"\t"; 
+	  os << d.ind2prot(protind); 
+	  for(unsigned int j = 0; j < trainset[i].indistinguishable_protinds.size(); j++)
+	    {
+	      int ind = trainset[i].indistinguishable_protinds[j];
+	      if(d.protind2label(ind) == 1)
+		{
+		  os << "," << d.ind2prot(ind);
+		}
+	    }
+	  os << "\t";
+	  
+	  //write out peptides
+	  int num_pep = d.protind2num_pep(protind);
+	  int *pepinds = d.protind2pepinds(protind);
+	  //write the first one
+	  int pepind = pepinds[0];
+	  string pep = d.ind2pep(pepind);
+	  string seq, n, c;
+	  get_pep_seq(pep, seq, n, c);
+	  int psmind = pepind_to_max_psmind[pepind];
+	  if(psmind > -1)
+	    os << pep <<  "-" << d.psmind2scan(psmind) << "." << d.psmind2charge(psmind);
+	  else
+	    {
+	      carp(CARP_DEBUG,"warning: did not assign peptide a max psm index");
+	    }
+	  for( int j = 1; j < num_pep; j++)
+	    {
+	      pepind = pepinds[j];
+	      pep = d.ind2pep(pepind);
+	      string seq, n, c;
+	      get_pep_seq(pep, seq, n, c);
+	      psmind = pepind_to_max_psmind[pepind];
+	      if(psmind > -1)
+		os << "," << pep <<  "-" << d.psmind2scan(psmind) << "." << d.psmind2charge(psmind);
+	      else
+		{
+		  carp(CARP_DEBUG, "warning: did not assign peptide %s and index %d a"
+		       "max psm index", pep.c_str(), psmind);
+		}
+	    }
+	  os << endl;
+	}
+    }
+}
+
+
+void Barista :: write_subset_protein_special_case_tab(ofstream &os, int i)
+{
+  //write out protein
+  int protind = trainset[i].protind;
+  int group = trainset[i].group_number;
+  os << group << "\t";
+  
+  vector<int> parent_groups = trainset.get_subset_prot(i).parent_groups;
+  if(parent_groups.size() > 0)
+    {
+      os << parent_groups[0]; 
+      for(unsigned int k = 1; k < parent_groups.size(); k++)
+	os << "," << parent_groups[k];
+    } 
+  os << "\t";
+
+  os << d.ind2prot(protind); 
+  vector<int> complement = trainset[i].protind2complement[protind];
+  if(complement.size() != 0)
+    {
+      os << "(";
+      int pepind = complement[0];
+      string pep = d.ind2pep(pepind);
+      string seq, n, c;
+      get_pep_seq(pep, seq, n, c);
+      os << pep;
+      for(unsigned int k = 1; k < complement.size(); k++)
+	{
+	  pepind = complement[k];
+	  pep = d.ind2pep(pepind);
+	  get_pep_seq(pep, seq, n, c);
+	  os << "," << pep;
+	}
+      os << ")";
+    }
+  
+  for(unsigned int j = 0; j < trainset[i].indistinguishable_protinds.size(); j++)
+    {
+      int ind = trainset[i].indistinguishable_protinds[j];
+      if(d.protind2label(ind) == 1)
+	{
+	  os << "," << d.ind2prot(ind);
+	  vector<int> complement = trainset[i].protind2complement[protind];
+	  if(complement.size() != 0)
+	    {
+	      os << "(";
+	      int pepind = complement[0];
+	      string pep = d.ind2pep(pepind);
+	      string seq, n, c;
+	      get_pep_seq(pep, seq, n, c);
+	      int psmind = pepind_to_max_psmind[pepind];
+	      if(psmind > -1)
+		os << "," << pep <<  "-" << d.psmind2scan(psmind) << "." << d.psmind2charge(psmind);
+	      for(unsigned int k = 1; k < complement.size(); k++)
+		{
+		  pepind = complement[k];
+		  pep = d.ind2pep(pepind);
+		  get_pep_seq(pep, seq, n, c);
+		  psmind = pepind_to_max_psmind[pepind];
+		  if(psmind > -1)
+		    os << "," << pep <<  "-" << d.psmind2scan(psmind) << "." << d.psmind2charge(psmind);
+      		}
+	      os << ")";
+	    }
+	}
+    }
+  os << "\t";
+  
+  //write out peptides
+  int num_pep = d.protind2num_pep(protind);
+  int *pepinds = d.protind2pepinds(protind);
+  //write the first one
+  int pepind = pepinds[0];
+  string pep = d.ind2pep(pepind);
+  string seq, n, c;
+  get_pep_seq(pep, seq, n, c);
+  int psmind = pepind_to_max_psmind[pepind];
+  if(psmind > -1)
+    os << pep <<  "-" << d.psmind2scan(psmind) << "." << d.psmind2charge(psmind);
+  else
+    {
+      carp(CARP_DEBUG, "warning: did not assign peptide a  max psm index");
+    }
+  for( int j = 1; j < num_pep; j++)
+    {
+      pepind = pepinds[j];
+      pep = d.ind2pep(pepind);
+      string seq, n, c;
+      get_pep_seq(pep, seq, n, c);
+      psmind = pepind_to_max_psmind[pepind];
+      if(psmind > -1)
+	os << "," << pep <<  "-" << d.psmind2scan(psmind) << "." << d.psmind2charge(psmind);
+      else
+	{
+	  carp(CARP_DEBUG,"warning: did not assign peptide %s and index %d a max"
+	       "psm index", pep.c_str(), psmind);
+	}
+    }
+  os << endl;
+
+
+}
+
+
+void Barista :: write_results_subset_prot_tab(ofstream &os)
+{
+  string protein_str;
+  vector<string> tab_delim_proteins;
+  
+  os << "group number" << "\t" << "parent group numbers" << "\t";
+  os << "proteins" << "\t" << "peptides-scan.charge" << endl;
+
+  int num_subset_prot = trainset.get_num_subsets();
+  
+  int cn = 0;
+  for(int i = 0; i < num_subset_prot; i++)
+    {
+      int protind = trainset.get_subset_prot(i).protind;
+      int group = trainset.get_subset_prot(i).group_number;
+      if(d.protind2label(protind) == 1)
+	{
+	  cn++;
+	  
+	  if(trainset.get_subset_prot(i).has_complement == 1)
+	    {
+	      write_subset_protein_special_case_tab(os, i);
+	      continue;
+	    }
+	  
+	  os << group << "\t";
+	  vector<int> parent_groups = trainset.get_subset_prot(i).parent_groups;
+	  if(parent_groups.size() > 0)
+	    {
+	      os << parent_groups[0]; 
+	      for(unsigned int k = 1; k < parent_groups.size(); k++)
+		os << "," << parent_groups[k];
+	    } 
+	  os << "\t";
+	  
+	  //write out proteins
+	  os << d.ind2prot(protind); 
+	  for(unsigned int j = 0; j < trainset[i].indistinguishable_protinds.size(); j++)
+	    {
+	      int ind = trainset[i].indistinguishable_protinds[j];
+	      if(d.protind2label(ind) == 1)
+		{
+		  os << "," << d.ind2prot(ind);
+		}
+	    }
+	  os << "\t";
+	  
+	  //write out peptides
+	  int num_pep = d.protind2num_pep(protind);
+	  int *pepinds = d.protind2pepinds(protind);
+	  //write the first one
+	  int pepind = pepinds[0];
+	  string pep = d.ind2pep(pepind);
+	  string seq, n, c;
+	  get_pep_seq(pep, seq, n, c);
+	  int psmind = pepind_to_max_psmind[pepind];
+	  if(psmind > -1)
+	    os << pep <<  "-" << d.psmind2scan(psmind) << "." << d.psmind2charge(psmind);
+	  else
+	    {
+		carp(CARP_DEBUG, "warning: did not assign peptide a max psm index");
+	    }
+	  for( int j = 1; j < num_pep; j++)
+	    {
+	      pepind = pepinds[j];
+	      pep = d.ind2pep(pepind);
+	      string seq, n, c;
+	      get_pep_seq(pep, seq, n, c);
+	      psmind = pepind_to_max_psmind[pepind];
+	      if(psmind > -1)
+		os << "," << pep <<  "-" << d.psmind2scan(psmind) << "." << d.psmind2charge(psmind);
+	      else
+		{
+		  carp(CARP_DEBUG, "warning: did not assign peptide %s and index %d a"
+		       " max psm index", pep.c_str(), psmind);
+		}
+	    }
+	  
+	  os << endl;
+	}
+    }
+
+}
+
+
+
+void Barista :: write_results_peptides_tab(ofstream &os)
+{
+  int ps = pepind_to_max_psmind[peptrainset[0].pepind]; 
+  os<< "q-value" << "\t" << "barista score" << "\t";
+  os << "NSAF score" << "\t";
+  os<<"barista PEP\t";
+  os << "scan" << "\t" ;
+  os<< "charge" << "\t";
+  os<<"spectrum precursor m/z"<<"\t";
+  os<<"spectrum neutral mass"<<"\t"; 
+  os<<"peptide mass"<<"\t";
+  os<< "delta_cn"<< "\t";
+  if(d.psmind2spscore(ps)!=-1){
+    os<<"sp score"<<"\t";
+    os<<"sp rank\t";
+  }
+  os<<"xcorr score"<<"\t";
+  os<<"xcorr rank"<<"\t";
+  if(d.psmind2spscore(ps)!=-1){
+    os<<"b/y ions matched"<<"\t";
+    os<<"b/y ions total"<<"\t";
+  }
+  os<<"distinct matches/spectrum"<<"\t";
+  os<<"sequence\t"; 
+  os<<"cleavage type"<<"\t"; 
+  os<<"protein id"<<"\t";
+  os<<"flanking_aa"<<endl;
+  int cn = 0;
+  for(int i = 0; i < peptrainset.size(); i++){
+    if(peptrainset[i].label == 1){
+      cn++;
+      //write out proteins
+      int pepind = peptrainset[i].pepind;
+      string pep = d.ind2pep(pepind);
+      string seq, n, c;
+      get_pep_seq(pep, seq, n, c);
+      //q-value
+      os << peptrainset[i].q << "\t";
+      //score 
+      os << peptrainset[i].score << "\t";
+      ///nsaf
+      os<<peptrainset[i].nsaf<<"\t";
+     //PEP
+      os<<peptrainset[i].PEP<<"\t"; 
+   
+      //write out peptides
+      int psmind = pepind_to_max_psmind[pepind];
+      if(psmind > -1){
+       //scan  
+	os << d.psmind2scan(psmind) << "\t" ;
+       //charge
+        os<< d.psmind2charge(psmind)<<"\t";
+        //mass-to-charge ratio 
+        os<<(d.psmind2precursor_mass(psmind)+
+        d.psmind2charge(psmind)*MASS_PROTON)/
+        d.psmind2charge(psmind)<<"\t";
+        //Spectrum Neutral Mass 
+        os<<d.psmind2precursor_mass(psmind)<<"\t";
+        //Peptide Mass
+        os<<d.psmind2peptide_mass(psmind)<<"\t";
+        //DELTA CN
+        os <<d.psmind2deltaCn(psmind)<< "\t";
+        if(d.psmind2spscore(ps)!=-1){
+          //Sp Score
+          os<<d.psmind2spscore(psmind)<<"\t";
+          //Sp Rank 
+          os<<d.psmind2sp_rank(psmind)<<"\t";
+        }
+        //xcorr Score
+      	os<<d.psmind2xcorr(psmind)<<"\t";
+      	//xcorr rank
+      	os<<d.psmind2xcorr_rank(psmind)<<"\t";
+        if(d.psmind2spscore(ps)!=-1){
+          //by ions match 
+          os<<d.psmind2by_ions_matched(psmind)<<"\t"; 
+          //by ions total 
+          os<<d.psmind2by_ions_total(psmind)<<"\t";
+        }
+        //Distinct matches/Spectrum
+      	os<<d.psmind2matches_spectrum(psmind)<<"\t";
+        //sequence 
+        os<<seq<<"\t"; 
+        //cleavage type
+        os<<cleavage_type<<"\t"; 
+      	//protein id
+      	vector<string> prots;  
+        get_protein_id(pepind,prots);
+        print_protein_ids(prots,os,psmind);
+        //Flanking_aa 
+      	os<<n<<c<<endl;     
+      }else{
+	  cout<< "waning: did not assign peptide max psmind\n";
+          os<<"not assignd\t";
+       }
+
+    }
+  }
+}
+
+void Barista :: write_results_psm_tab(ofstream &os)
+{
+  int ps= psmtrainset[0].psmind; 
+  os << "scan" << "\t" << "charge" << "\t";
+  os << "barista q-value" << "\t" << "barista score" << "\t";
+  os << "barista PEP\t";
+  os<<"spectrum precursor m/z"<<"\t";
+  os<<"spectrum neutral mass"<<"\t"; 
+  os<<"peptide mass"<<"\t";
+  os<< "delta_cn"<< "\t";
+  if(d.psmind2spscore(ps)!=-1){
+    os<<"sp score"<<"\t";
+    os<<"sp rank\t";
+  }
+  os<<"xcorr score"<<"\t";
+  os<<"xcorr rank"<<"\t";
+  if(d.psmind2spscore(ps)!=-1){
+    os<<"b/y ions matched"<<"\t";
+    os<<"b/y ions total"<<"\t";
+  }
+  os<<"distinct matches/spectrum"<<"\t";
+  os<<"sequence"<<"\t";
+  os<<"cleavage type"<<"\t"; 
+  os<<"protein id"<<"\t";
+  os<<"flanking aa"<<"\t";
+  os << "filename" << endl;
+ int cn = 0;
+  for(int i = 0; i < psmtrainset.size(); i++)
+    {
+      if(psmtrainset[i].label == 1)
+	{
+	  cn++;
+	  //write out proteins
+	  int psmind = psmtrainset[i].psmind; 
+	  int pepind = d.psmind2pepind(psmind);
+	  string pep = d.ind2pep(pepind);
+	  string seq, n,c;
+	  get_pep_seq(pep,seq,n,c);
+	  //os << psmind << "\t";
+	  os << d.psmind2scan(psmind) << "\t";
+	  os << d.psmind2charge(psmind) << "\t";
+	  os << psmtrainset[i].q << "\t";
+	  os << psmtrainset[i].score << "\t";
+          os << psmtrainset[i].PEP << "\t";
+          //mass-to-charge ratio 
+          os<<(d.psmind2precursor_mass(psmind)+
+          d.psmind2charge(psmind)*MASS_PROTON)/
+          d.psmind2charge(psmind)<<"\t";
+          //Spectrum Neutral Mass 
+          os<<d.psmind2precursor_mass(psmind)<<"\t";
+          //Peptide Mass
+          os<<d.psmind2peptide_mass(psmind)<<"\t";
+          //DELTA CN
+          os <<d.psmind2deltaCn(psmind)<< "\t";
+          if(d.psmind2spscore(ps)!=-1){
+            //Sp Score
+            os<<d.psmind2spscore(psmind)<<"\t";
+            //Sp Rank 
+            os<<d.psmind2sp_rank(psmind)<<"\t";
+          }
+          //xcorr Score
+      	  os<<d.psmind2xcorr(psmind)<<"\t";
+      	  //xcorr rank
+      	  os<<d.psmind2xcorr_rank(psmind)<<"\t";
+          if(d.psmind2spscore(ps)!=-1){
+            //by ions match 
+            os<<d.psmind2by_ions_matched(psmind)<<"\t"; 
+            //by ions total 
+            os<<d.psmind2by_ions_total(psmind)<<"\t";
+          }
+          //Distinct matches/Spectrum
+      	  os<<d.psmind2matches_spectrum(psmind)<<"\t";
+      	  get_pep_seq(pep,seq,n,c);
+      	  //Sequence 
+      	  os<<seq<<"\t";
+      	  //cleavage type
+      	  os<<cleavage_type<<"\t";
+      	  //protein id
+      	  vector<string> prots;  
+          get_protein_id(pepind,prots);
+          print_protein_ids(prots,os,psmind);
+      	  //Flanking_aa 
+      	  os<<n<<c<<"\t";   
+	  os << d.psmind2fname(psmind) << endl;
+	}
+    }
+}
+
+
+
+void Barista :: report_all_results_xml()
+{
+  ostringstream fname;
+  fname << out_dir << "/" << fileroot << "barista.xml";
+  ofstream of(fname.str().c_str());
+  of << "<barista_output>" << endl;
+  of << endl;
+  
+  write_results_prot_xml(of);
+  write_results_subset_prot_xml(of);
+  
+  write_results_peptides_xml(of);
+
+  write_results_psm_xml(of);
+
+  if (Params::GetBool("pepxml-output")) {
+    ostringstream xml_file_name;
+    xml_file_name << out_dir << "/" << fileroot << "barista.target.pep.xml";
+    PepXMLWriter xmlfile;
+    xmlfile.openFile(xml_file_name.str().c_str(), overwrite_flag);
+    write_results_pep_xml(xmlfile);
+
+    xmlfile.closeFile();
+  }
+
+  
+  of << endl;
+  of << "</barista_output>" << endl;
+  of.close();
+    
+}
+
+
+void Barista :: report_all_results_tab()
+{
+  ofstream of;
+  ostringstream fname;
+    
+  fname << out_dir << "/" << fileroot << "barista.target.proteins.txt";
+  of.open(fname.str().c_str());
+  write_results_prot_tab(of);
+  of.close();
+  fname.str("");
+
+  fname << out_dir << "/" << fileroot << "barista.target.subset-proteins.txt";
+  of.open(fname.str().c_str());
+  write_results_subset_prot_tab(of);
+  of.close();
+  fname.str("");
+  
+  fname << out_dir << "/" << fileroot << "barista.target.peptides.txt";
+  of.open(fname.str().c_str());
+  write_results_peptides_tab(of);
+  of.close();
+  fname.str("");
+  
+  fname << out_dir << "/" << fileroot << "barista.target.psms.txt";
+  of.open(fname.str().c_str());
+  write_results_psm_tab(of);
+  of.close();
+  fname.str("");
+  
+}
+
+
+void Barista :: report_all_results_xml_tab()
+{
+  setup_for_reporting_results();
+  stringstream fname;
+  report_all_results_xml();
+  if (Params::GetBool("txt-output")) {
+    report_all_results_tab();
+  }
+  d.clear_data_all_results(); 
+  
+}
+
+void Barista :: setup_for_reporting_results()
+{
+  d.load_labels_prot_training();
+  trainset.clear();
+  testset.clear();
+
+  ProtScores::fillProteinsFull(trainset, d);
+
+  carp(CARP_INFO, "finished training, making parsimonious protein set");
+
+  trainset.make_meta_set(d);
+  
+  psmtrainset.clear();
+  psmtestset.clear();
+  PSMScores::fillFeaturesFull(psmtrainset, d);
+  peptrainset.clear();
+  peptestset.clear();
+  PepScores::fillFeaturesFull(peptrainset, d);
+  d.clear_labels_prot_training();
+  
+  int fdr_trn = getOverFDRProt(trainset,max_net_prot,selectionfdr);
+  fdr_trn = getOverFDRProtParsimonious(trainset,max_net_prot,selectionfdr);
+
+  carp(CARP_INFO, "total proteins parsimonious at q<%.2f: %d", selectionfdr, fdr_trn);
+
+  int fdr_trn_psm = getOverFDRPSM(psmtrainset, max_net_psm, selectionfdr);
+
+  pepind_to_max_psmind.clear();
+  pepind_to_max_psmind.resize(d.get_num_peptides(),-1);
+  int fdr_trn_pep = getOverFDRPep(peptrainset, max_net_pep, selectionfdr);
+
+  carp(CARP_INFO, "peptides at q<%.2f: %d", selectionfdr, fdr_trn_pep);
+  carp(CARP_INFO, "psms at q<%.2f: %d", selectionfdr, fdr_trn_psm);
+
+  d.clear_labels_psm_training();
+  
+  d.clear_data_prot_training();
+  d.load_data_all_results();
+    
+  computeNSAF();
+  computePepNSAF();
+  computePEP();
+  
+}
+
+int Barista :: computeNSAF()
+{
+  //check that the lengths of the proteins are available
+  int cnt = 0;
+  for(int i = 0; i < trainset.size(); i++)
+    {
+      if(trainset[i].label == 1)
+	{
+	  int protind = trainset[i].protind;
+	  int len = d.protind2length(protind);
+	  if(len < 0)
+	    cnt++;
+	}
+    }
+  if(cnt > 0)
+    return 0;
+
+  //create auxiliary psmind_to_ind index
+  vector<int>psmind_to_ind;
+  psmind_to_ind.resize(psmtrainset.size(),0);
+  for(int i = 0; i < psmtrainset.size(); i++)
+    psmind_to_ind[psmtrainset[i].psmind] = i;
+
+  //compute NSAF for each protein
+  double sum = 0.0;
+  for(int k = 0; k < trainset.size(); k++)
+    {
+      if(trainset[k].label == 1)
+	{
+	  int protind = trainset[k].protind;
+	  int len = d.protind2length(protind);
+	  int num_pep = d.protind2num_pep(protind);
+	  int *pepinds = d.protind2pepinds(protind);
+	  int cnt = 0;
+	  for (int i = 0; i < num_pep; i++)
+	    {
+	      int pepind = pepinds[i];
+	      int num_psms = d.pepind2num_psm(pepind);
+	      int *psminds = d.pepind2psminds(pepind);
+	      for (int j = 0; j < num_psms; j++)
+		{
+		  int psmind = psminds[j];
+		  int ind  = psmind_to_ind[psmind];
+		  assert(psmtrainset[ind].psmind == psmind);
+		  if(psmtrainset[ind].q <= 0.01)
+		    cnt++;
+		}
+	    }
+	  //compute NSAF for this protein
+	  double nsaf = 0.0;
+	  if(len != 0)
+	    nsaf = (double)cnt/(double)len;
+	  trainset[k].nsaf = nsaf;
+	  sum += nsaf;
+ 	}
+    }
+  
+  if(sum > 0)
+    {
+      for(int i = 0; i < trainset.size(); i++)
+	{
+	  if(trainset[i]. label == 1)
+	    trainset[i].nsaf /= sum;
+	}
+    }
+  else
+    return 0;
+
+  psmind_to_ind.clear();
+  return 1;
+}
+
+int Barista :: computePepNSAF()
+{
+
+  //create auxiliary psmind_to_ind index
+  vector<int>psmind_to_ind;
+  psmind_to_ind.resize(psmtrainset.size(),0);
+  for(int i = 0; i < psmtrainset.size(); i++)
+    psmind_to_ind[psmtrainset[i].psmind] = i;
+
+  //compute NSAF for each peptide
+  double sum = 0.0;
+  for(int k = 0; k < peptrainset.size(); k++)
+    {
+      if(peptrainset[k].label == 1)
+	{
+	  int pepind = peptrainset[k].pepind;
+	  string pep = d.ind2pep(pepind);
+	  string seq, n,c;
+	  get_pep_seq(pep,seq,n,c);
+	  int len = seq.size();
+	  
+	  int cnt = 0;
+	  int num_psms = d.pepind2num_psm(pepind);
+	  int *psminds = d.pepind2psminds(pepind);
+	  for (int j = 0; j < num_psms; j++)
+	    {
+	      int psmind = psminds[j];
+	      int ind  = psmind_to_ind[psmind];
+	      assert(psmtrainset[ind].psmind == psmind);
+	      if(psmtrainset[ind].q <= 0.01)
+		cnt++;
+	    }
+	
+	  //compute NSAF for this protein
+	  double nsaf = 0.0;
+	  if(len != 0)
+	    nsaf = (double)cnt/(double)len;
+	  peptrainset[k].nsaf = nsaf;
+	  sum += nsaf;
+ 	}
+    }
+  
+  if(sum > 0)
+    {
+      for(int i = 0; i < peptrainset.size(); i++)
+	{
+	  if(peptrainset[i]. label == 1)
+	    peptrainset[i].nsaf /= sum;
+	}
+    }
+  else
+    return 0;
+
+  psmind_to_ind.clear();
+  return 1;
+}
+
+
+void Barista :: computePEP(){
+  carp(CARP_DEBUG, "Computing PEPs");
+  vector<double> target_scores_vect;
+  vector<double> decoy_scores_vect;
+
+  // pull out the target and decoy scores
+  for(int i = 0; i < psmtrainset.size(); i++){
+    if( psmtrainset[i].label == 1 ){
+      target_scores_vect.push_back(psmtrainset[i].score);
+    } else { // == -1
+      decoy_scores_vect.push_back(psmtrainset[i].score);
+    }
+  }
+
+  int num_targets = target_scores_vect.size();
+  int num_decoys = decoy_scores_vect.size();
+  carp(CARP_DEBUG, "Found %d targets and %d decoys", num_targets, num_decoys); 
+
+  // copy them to an array as required by the compute_PEP method
+  double* target_scores = new double[num_targets];
+  copy(target_scores_vect.begin(), target_scores_vect.end(), target_scores);
+  double* decoy_scores = new double[num_decoys];
+  copy(decoy_scores_vect.begin(), decoy_scores_vect.end(), decoy_scores);
+
+  double* PEPs = ComputeQValues::compute_PEP(target_scores, num_targets, 
+                                             decoy_scores, num_decoys);
+
+  // fill in the data set with the new scores for the targets
+  int target_idx = 0;
+  for(int full_idx = 0; full_idx < psmtrainset.size(); full_idx++){
+    if( psmtrainset[full_idx].label == 1 ){
+      psmtrainset[full_idx].PEP = PEPs[target_idx];
+      target_idx++; 
+    } // else, skip decoys
+  }
+
+  delete[] target_scores;
+  delete[] decoy_scores;
+  delete[] PEPs;
+
+  /** 
+   * Calculate Peptide PEPs
+   */
+  target_scores_vect.clear();
+  decoy_scores_vect.clear();
+  
+  //pull out the target and decoy scores for peptide PEPs
+  for(int i=0;i<peptrainset.size();i++){
+    if(peptrainset[i].label==1)
+      target_scores_vect.push_back(peptrainset[i].score);
+    else 
+      decoy_scores_vect.push_back(peptrainset[i].score);
+  }
+  num_targets = target_scores_vect.size();
+  num_decoys = decoy_scores_vect.size();
+  carp(CARP_DEBUG, "Found %d targets and %d decoys", num_targets, num_decoys);  
+
+  // copy them to an array as required by the compute_PEP method
+  target_scores = new double[num_targets];
+  copy(target_scores_vect.begin(), target_scores_vect.end(), target_scores);
+  decoy_scores = new double[num_decoys];
+  copy(decoy_scores_vect.begin(), decoy_scores_vect.end(), decoy_scores);
+  PEPs = ComputeQValues::compute_PEP(target_scores, num_targets, 
+                                     decoy_scores, num_decoys);
+
+  // fill in the data set with the new scores for the targets
+  target_idx = 0;
+  for(int full_idx = 0; full_idx < peptrainset.size(); full_idx++){
+    if( peptrainset[full_idx].label == 1 ){
+      peptrainset[full_idx].PEP = PEPs[target_idx];
+      target_idx++; 
+    } // else, skip decoys
+  }
+
+  delete[] target_scores;
+  delete[] decoy_scores;
+  delete[] PEPs;
+
+
+  /** 
+   * Calculate Protein PEPs
+   */
+  target_scores_vect.clear();
+  decoy_scores_vect.clear();
+  
+  //pull out the target and decoy scores for peptide PEPs
+  for(int i=0;i<trainset.size();i++){
+    if(trainset[i].label==1)
+      target_scores_vect.push_back(trainset[i].score);
+    else 
+      decoy_scores_vect.push_back(trainset[i].score);
+  }
+  num_targets = target_scores_vect.size();
+  num_decoys = decoy_scores_vect.size();
+  carp(CARP_DEBUG, "Found %d targets and %d decoys of Protein", num_targets, num_decoys);  
+
+  // copy them to an array as required by the compute_PEP method
+  target_scores = new double[num_targets];
+  copy(target_scores_vect.begin(), target_scores_vect.end(), target_scores);
+  decoy_scores = new double[num_decoys];
+  copy(decoy_scores_vect.begin(), decoy_scores_vect.end(), decoy_scores);
+  PEPs = ComputeQValues::compute_PEP(target_scores, num_targets, 
+                                     decoy_scores, num_decoys);
+
+  // fill in the data set with the new scores for the targets
+  target_idx = 0;
+  for(int full_idx = 0; full_idx < trainset.size(); full_idx++){
+    if( trainset[full_idx].label == 1 ){
+      trainset[full_idx].PEP = PEPs[target_idx];
+      target_idx++; 
+    } // else, skip decoys
+  }
+
+  delete[] target_scores;
+  delete[] decoy_scores;
+  delete[] PEPs;
+
+
+}
+
+/*************************************************************************/
+void Barista :: report_prot_fdr_counts(vector<double> &qvals, ofstream &of)
+{
+  for(unsigned int count = 0; count < qvals.size(); count++)
+    {
+      double q = qvals[count];
+      if(trainset.size() > 0)
+	{
+	  int fdr_trn = getOverFDRProtParsimonious(trainset,max_net_prot,q);
+	  of << q << " " << fdr_trn;
+	  cout << q << " " << fdr_trn;
+	}
+      
+      if(testset.size() > 0)
+	{
+	  int fdr_tst = getOverFDRProtParsimonious(testset,max_net_prot,q);
+	  of << " " << fdr_tst;
+	  cout << " " << fdr_tst;
+	}
+      of << endl;
+      cout << endl;
+    }
+} 
+
+void Barista :: report_psm_fdr_counts(vector<double> &qvals, ofstream &of)
+{
+  for(unsigned int count = 0; count < qvals.size(); count++)
+    {
+      double q = qvals[count];
+      if(psmtrainset.size() > 0)
+	{
+	  int fdr_trn = getOverFDRPSM(psmtrainset,max_net_prot,q);
+	  of << q << " " << fdr_trn;
+	  cout << q << " " << fdr_trn;
+	}
+      
+      if(psmtestset.size() > 0)
+	{
+	  int fdr_tst = getOverFDRPSM(psmtestset,max_net_prot,q);
+	  of << " " << fdr_tst;
+	  cout << " " << fdr_tst;
+	}
+      of << endl;
+      cout << endl;
+    }
+} 
+
+
+void Barista :: report_pep_fdr_counts(vector<double> &qvals, ofstream &of)
+{
+  for(unsigned int count = 0; count < qvals.size(); count++)
+    {
+      double q = qvals[count];
+      if(peptrainset.size() > 0)
+	{
+	  int fdr_trn = getOverFDRPep(peptrainset,max_net_prot,q);
+	  of << q << " " << fdr_trn;
+	  cout << q << " " << fdr_trn;
+	}
+      
+      if(psmtestset.size() > 0)
+	{
+	  int fdr_tst = getOverFDRPep(peptestset,max_net_prot,q);
+	  of << " " << fdr_tst;
+	  cout << " " << fdr_tst;
+	}
+      of << endl;
+      cout << endl;
+    }
+} 
+
+
+
+void Barista :: report_all_fdr_counts()
+{
+  int num_qvals = 14;
+  vector<double> qvals;
+  qvals.resize(num_qvals,0.0);
+  double q = 0.0;
+  for(int count = 0; count < num_qvals; count++)
+    {
+      qvals[count] = q;
+      if(q < 0.01)
+	q+=0.0025;
+      else
+	q+=0.01;
+    }
+    
+  ostringstream fname;
+  fname << out_dir << "/barista_prot_m7" << ".txt";
+  ofstream of(fname.str().c_str());
+  if(trainset.size() > 0)
+    trainset.make_meta_set(d);
+  if(testset.size() > 0)
+    testset.make_meta_set(d);
+  report_prot_fdr_counts(qvals,of);
+  of.close();
+
+  fname.str("");
+  fname << out_dir << "/barista_psm_m7" << ".txt";
+  ofstream ofpsm(fname.str().c_str());
+  report_psm_fdr_counts(qvals,ofpsm);
+  ofpsm.close();
+
+  fname.str("");
+  fname << out_dir << "/barista_pep_m7" << ".txt";
+  ofstream ofpep(fname.str().c_str());
+  report_pep_fdr_counts(qvals,ofpep);
+  ofpep.close();
+
+
+}
+
+
+
+/*******************************************************************************/
+double Barista :: get_protein_score(int protind, NeuralNet &n)
+{
+  int num_pep = d.protind2num_pep(protind);
+  int num_all_pep = d.protind2num_all_pep(protind);
+  int *pepinds = d.protind2pepinds(protind);
+  double sm = 0.0;
+  double div = pow(num_all_pep,alpha);
+
+  for (int i = 0; i < num_pep; i++)
+    {
+      int pepind = pepinds[i];
+      int num_psms = d.pepind2num_psm(pepind);
+      int *psminds = d.pepind2psminds(pepind);
+      double max_sc = -1000000.0;
+
+      for (int j = 0; j < num_psms; j++)
+	{
+	  double *feat = d.psmind2features(psminds[j]);
+	  double *sc = n.fprop(feat);
+	  if(sc[0] > max_sc)
+	    {
+	      max_sc = sc[0];
+
+	    }
+	}
+      sm += max_sc;
+    }
+  sm /= div;
+  return sm;
+}
+
+int Barista :: getOverFDRProt(ProtScores &set, NeuralNet &n, double fdr)
+{
+  double r = 0.0;
+  for(int i = 0; i < set.size(); i++)
+    {
+      int protind = set[i].protind;
+      r = get_protein_score(protind,n);
+      set[i].score = r;
+    }
+  return set.calcOverFDR(fdr);
+  
+}
+
+int Barista :: getOverFDRProt(ProtScores &set, double fdr)
+{
+  double r = 0.0;
+  for(int i = 0; i < set.size(); i++)
+    {
+      int protind = set[i].protind;
+      r = get_protein_score(protind);
+      set[i].score = r;
+    }
+  return set.calcOverFDR(fdr);
+  
+}
+
+double Barista :: get_protein_score(int protind)
+{
+  int num_pep = d.protind2num_pep(protind);
+  int num_all_pep = d.protind2num_all_pep(protind);
+  int *pepinds = d.protind2pepinds(protind);
+  max_psm_inds.erase(max_psm_inds.begin(),max_psm_inds.end());
+  max_psm_scores.erase(max_psm_scores.begin(),max_psm_scores.end());
+  int psm_count = 0;
+  for (int i = 0; i < num_pep; i++)
+    {
+      int pepind = pepinds[i];
+      int num_psms = d.pepind2num_psm(pepind);
+      int *psminds = d.pepind2psminds(pepind);
+      double max_sc = -1000000.0;
+      int max_ind = 0;
+      for (int j = 0; j < num_psms; j++)
+	{
+	  double *feat = d.psmind2features(psminds[j]);
+	  double *sc = net_clones[psm_count].fprop(feat);
+	  if(sc[0] > max_sc)
+	    {
+	      max_sc = sc[0];
+	      max_ind = j;
+	    }
+	  psm_count++;
+	}
+      max_psm_inds.push_back(max_ind);
+      max_psm_scores.push_back(max_sc);
+    }
+  assert((int)max_psm_inds.size() == num_pep);
+  assert((int)max_psm_scores.size() == num_pep);
+  
+  double sm = 0.0;
+  double n = pow(num_all_pep,alpha);
+  for(unsigned int i = 0; i < max_psm_inds.size() ; i++)
+    sm+= max_psm_scores[i];
+  sm /= n;
+  return sm;
+}
+
+void Barista :: calc_gradients(int protind, int label)
+{
+  int num_pep = d.protind2num_pep(protind);
+  int num_all_pep = d.protind2num_all_pep(protind);
+  int *pepinds = d.protind2pepinds(protind);
+  double n = pow(num_all_pep,alpha);
+
+  double *gc = new double[1];
+  gc[0] = -label/n;
+  int psm_count = 0;
+  for(int i = 0; i < num_pep; i++)
+    {
+      int pepind = pepinds[i];
+      int num_psms = d.pepind2num_psm(pepind);
+      int clone_ind = psm_count+max_psm_inds[i];
+      net_clones[clone_ind].bprop(gc);
+      psm_count += num_psms;
+    }
+  delete[] gc;
+}
+
+double Barista :: train_hinge(int protind, int label)
+{
+  double sm = get_protein_score(protind);
+    
+  double err = max(0.0,1.0-sm*label);
+
+  if(sm*label < 1)
+    {
+      net.clear_gradients();
+      calc_gradients(protind,label);
+      net.update(mu);
+    }
+  return err;
+}
+
+
+double Barista :: train_hinge_psm(int psmind, int label)
+{
+  double *x = d.psmind2features(psmind);
+  double *c = net.fprop(x);
+  double err = 1.0-c[0]*label;
+
+  if(c[0]*label < 1)
+    {
+      double *gc = new double[1];
+      gc[0] = -1*label;
+      net.clear_gradients();
+      net.bprop(gc);
+      net.update(mu);
+      delete[] gc;
+    }
+  return err;
+}
+
+void Barista :: train_net(double selectionfdr)
+{
+  for (int k = 0; k < nepochs; k++)
+    {
+    if(verbose > 0)
+	cout << "epoch " << k << endl;
+      double err_sum = 0.0;
+      for(int i = 0; i < trainset.size(); i++)
+	{
+	  int ind = myrandom_limit(trainset.size());
+	  int protind = trainset[ind].protind;
+	  int label = trainset[ind].label;
+	  err_sum += train_hinge(protind,label);
+	}      
+      int fdr_trn = getOverFDRProt(trainset,selectionfdr);
+      
+      if(verbose > 0)
+	{
+	  cout << "err " << err_sum << "  ";
+	  cout << selectionfdr << " " << fdr_trn;
+	  if(testset.size() > 0)
+	    cout << " " << getOverFDRProt(testset,net,selectionfdr);
+	  cout << endl;
+	}
+	if(fdr_trn > max_fdr)
+	{
+	  max_net_prot = net;
+	  max_fdr = fdr_trn;
+	  if(verbose == 0)
+	    {
+
+	      if(testset.size() > 0)
+		carp(CARP_INFO, "q<%.2f: max non-parsimonious so far %d %d",
+		     selectionfdr, max_fdr,
+		     getOverFDRProt(testset,max_net_prot,selectionfdr));
+	      else
+		carp(CARP_INFO, "q<%.2f: max non-parsimonious so far %d",
+		     selectionfdr, max_fdr);
+	    }
+	}
+      if(verbose > 0)
+	{
+	  cout << "q< " << selectionfdr << ": max non-parsimonious so far " << max_fdr;
+	  if(testset.size() > 0)
+	    cout << " " << getOverFDRProt(testset,max_net_prot,selectionfdr);
+	  cout << endl;
+	}
+      if(1)
+	{
+	  int fdr_trn_psm = getOverFDRPSM(psmtrainset, net, selectionfdr); 
+	  if(fdr_trn_psm > max_fdr_psm)
+	    {
+	      max_net_psm = net;
+	      max_fdr_psm = fdr_trn_psm;
+	    }
+	}
+      if(1)
+	{
+	  int fdr_trn_pep = getOverFDRPep(peptrainset, net, selectionfdr); 
+	  if(fdr_trn_pep > max_fdr_pep)
+	    {
+	      max_net_pep = net;
+	      max_fdr_pep = fdr_trn_pep;
+	    }
+	}
+    }
+  if(verbose > 0)
+    {
+      cout << "max peptides so far at q< " << selectionfdr << ": " << getOverFDRPep(peptrainset, max_net_psm, selectionfdr) << endl;
+      cout << "max psms so far at q<" << selectionfdr << ": " << max_fdr_psm << endl;
+    }
+}
+
+
+
+void Barista :: train_net_multi_task(double selectionfdr, int interval)
+{
+  for (int k = 0; k < nepochs; k++)
+    {
+    if(verbose > 0)
+	cout << "epoch " << k << endl;
+      double err_sum = 0.0;
+      for(int i = 0; i < trainset.size(); i++)
+	{
+	  int ind = myrandom_limit(trainset.size());
+	  int protind = trainset[ind].protind;
+	  int label = trainset[ind].label;
+	  err_sum += train_hinge(protind,label);
+
+	  ind = myrandom_limit(interval);
+	  int psmind = psmtrainset[ind].psmind;
+	  label = psmtrainset[ind].label;
+	  train_hinge_psm(psmind,label);	
+	}      
+      int fdr_trn = getOverFDRProt(trainset,selectionfdr);
+      
+      if(verbose > 0)
+	{
+	  if(interval == trainset.size())
+	    cout << "err " << err_sum << "  ";
+	  cout << selectionfdr << " " << fdr_trn;
+	  if(testset.size() > 0)
+	    cout << " " << getOverFDRProt(testset,net,selectionfdr);
+	  cout << endl;
+	}
+	if(fdr_trn > max_fdr)
+	{
+	  max_net_prot = net;
+	  max_fdr = fdr_trn;
+	  if(verbose == 0)
+	    {
+	      if(testset.size() > 0)
+		carp(CARP_INFO, "q<%.2f: max non-parsimonious so far %d %d",
+		     selectionfdr, max_fdr,
+		     getOverFDRProt(testset,max_net_prot,selectionfdr));
+	      else
+		carp(CARP_INFO, "q<%.2f: max non-parsimonious so far %d",
+		     selectionfdr, max_fdr);
+	    }
+	}
+      if(verbose > 0)
+	{
+	  cout << "q< " << selectionfdr << ": max non-parsimonious so far " << max_fdr;
+	  if(testset.size() > 0)
+	    cout << " " << getOverFDRProt(testset,max_net_prot,selectionfdr);
+	  cout << endl;
+	}
+      if(1)
+	{
+	  int fdr_trn_psm = getOverFDRPSM(psmtrainset, net, selectionfdr); 
+	  if(fdr_trn_psm > max_fdr_psm)
+	    {
+	      max_net_psm = net;
+	      max_fdr_psm = fdr_trn_psm;
+	    }
+	}
+      if(1)
+	{
+	  int fdr_trn_pep = getOverFDRPep(peptrainset, net, selectionfdr); 
+	  if(fdr_trn_pep > max_fdr_pep)
+	    {
+	      max_net_pep = net;
+	      max_fdr_pep = fdr_trn_pep;
+	    }
+	}
+    }
+  if(verbose > 0)
+    {
+      cout << "max peptides so far at q< " << selectionfdr << ": " << getOverFDRPep(peptrainset, max_net_psm, selectionfdr) << endl;
+      cout << "max psms so far at q<" << selectionfdr << ": " << max_fdr_psm << endl;
+    }
+}
+
+
+
+void Barista :: setup_for_training(int trn_to_tst)
+{
+  carp(CARP_INFO, "loading and normalizing data");
+   
+  d.load_data_prot_training();
+  d.load_labels_prot_training();
+  
+  if(trn_to_tst)
+    {
+      carp(CARP_INFO, "splitting data into training and testing sets");
+      ProtScores::fillProteinsSplit(trainset, testset, d, trn_to_tst);
+      carp(CARP_INFO, "trainset size %d testset size %d", trainset.size(),
+	   testset.size());
+    }
+  else
+    {
+      ProtScores::fillProteinsFull(trainset, d);
+      carp(CARP_INFO, "trainset size %d", trainset.size());
+    }
+  thresholdset = trainset;
+  
+
+  if(trn_to_tst)
+    PSMScores::fillFeaturesSplit(psmtrainset, psmtestset, d, 0.5);
+  else
+    PSMScores::fillFeaturesFull(psmtrainset, d);
+  if(trn_to_tst)
+    PepScores::fillFeaturesSplit(peptrainset, peptestset, d, 0.5);
+  else
+    PepScores::fillFeaturesFull(peptrainset, d);
+  d.clear_labels_prot_training();
+  
+  if(feature_file_flag)
+    {
+      string str = feature_file_name.str();
+      if(!d.print_features(str))
+	carp(CARP_INFO, "could not open file %s for writing features. Feature file will not be written", feature_file_name.str().c_str());
+    }
+
+  d.normalize_psms();
+
+  num_features = d.get_num_features();
+  int has_bias = 1;
+  int is_lin = 1;
+  if(is_lin)
+    num_hu = 1;
+  net.initialize(num_features, num_hu, is_lin, has_bias);
+  max_net_prot = net;
+  max_net_psm = net;
+  max_net_pep = net;
+  
+  //get the max num peptides
+  max_peptides = 0;
+  max_psms_in_prot = 0;
+  for (int i = 0; i < d.get_num_proteins();i++)
+    {
+      int num_pep = d.protind2num_pep(i);
+      if(num_pep > max_peptides)
+	max_peptides = num_pep;
+      int *pepinds = d.protind2pepinds(i);
+      int sum_num_psms = 0;
+      for(int j = 0; j < num_pep; j++)
+	{
+	  int pepind = pepinds[j];
+	  sum_num_psms += d.pepind2num_psm(pepind);
+	}
+      if(max_psms_in_prot < sum_num_psms)
+	max_psms_in_prot = sum_num_psms;
+    }
+  max_psm_inds.reserve(max_peptides);
+  max_psm_scores.reserve(max_peptides);
+ 
+  //create the net clones
+  net_clones = new NeuralNet[max_psms_in_prot];
+  for (int i = 0; i < max_psms_in_prot;i++)
+    net_clones[i].clone(net);
+}
+
+
+int Barista :: run()
+{
+  setup_for_training(0);
+  
+  train_net(selectionfdr);
+  
+  return 0;
+
+}
+
+
+int Barista :: run_tries()
+{
+  setup_for_training(0);
+    
+  int tries = 3;
+  vector<double> mu_choices;
+  mu_choices.resize(3,0.0);
+  mu_choices[0] = 0.005;
+  mu_choices[1] = 0.01;
+  mu_choices[2] = 0.05;
+  for(int k = 0; k < tries; k++)
+    {
+      mu = mu_choices[k];
+      net.make_random();
+      train_net(selectionfdr);
+    }
+  
+  report_all_results_xml_tab();
+
+  return 0;
+
+}
+
+int Barista :: run_tries_multi_task()
+{
+  setup_for_training(0);
+
+  carp(CARP_INFO, "training the model");
+
+  int tries = 3;
+  vector<double> mu_choices;
+  mu_choices.resize(3,0.0);
+  mu_choices[0] = 0.005;
+  mu_choices[1] = 0.01;
+  mu_choices[2] = 0.05;
+  for(int k = 1; k < tries; k++)
+    {
+      mu = mu_choices[k];
+      net.make_random();
+      train_net_multi_task(selectionfdr, psmtrainset.size());
+    }
+
+  int interval= getOverFDRPSM(psmtrainset,max_net_psm,0.01)*2;
+  if(interval > psmtrainset.size())
+    interval = psmtrainset.size()/4;
+  if(interval < 50)
+    interval = psmtrainset.size()/4;
+  train_net_multi_task(selectionfdr, interval);
+
+  report_all_results_xml_tab();
+  return 0;
+
+}
+
+
+
+void Barista :: print_description()
+{
+  cout << endl;
+  cout << "\t crux barista [options] <protein database> <spectra> <search results>" << endl <<endl;
+  cout << "REQUIRED ARGUMENTS:" << endl << endl;
+  cout << "\t <protein database> Directory with FASTA files , list of FASTA files or a single FASTA file with the protein database used for the search." << endl;
+  cout << "\t <spectra> Directory with ms2 files, list of ms2 files or a single ms2 file used for database search." << endl;
+  cout << "\t <search results> Directory with sqt files, list of sqt files or a single sqt file with psms generated during search." << endl;
+  cout << endl;
+	  
+  cout << "OPTIONAL ARGUMENTS:" << endl << endl;
+  cout << "\t [--enzyme <string>] \n \t     The enzyme used to digest the proteins in the experiment. Default trypsin." << endl;
+  cout << "\t [--decoy-prefix <string>] \n \t     Specifies the prefix of the protein names that indicates a decoy. Default decoy_" << endl;
+  cout << "\t [--optimization <string>] \n \t     Specifies whether to do optimization at the protein, peptide or psm level Default protein" << endl;
+  cout << "\t [--separate-searches <string>] \n \t     If the target and decoy searches were run separately, the option then allows the user to specify the location of the decoy search results, the target database search should be provided as required argument." << endl;
+  cout << "\t [--fileroot <string>] \n \t     The fileroot string will be added as a prefix to all output file names. Default = none." <<endl;
+  cout << "\t [--output-dir <directory>] \n \t     The name of the directory where output files will be created. Default = crux-output." << endl;
+  cout << "\t [--overwrite <T/F>] \n \t     Replace existing files (T) or exit if attempting to overwrite (F). Default=F." << endl;
+  cout << "\t [--skip-cleanup <T/F>] \n \t     When set to T, prevents the deletion of lookup tables created during the preprocessing step. Default = F." << endl; 
+  cout << "\t [--re-run <directory>] \n \t      Re-run Barista analysis using a previously computed set of lookup tables." <<endl;  
+  cout << "\t [--use-spec-features <T/F>] \n \t      When set to F, use minimal feature set. Default T." <<endl;  
+  cout<<  "\t [--list-of-files <T/F>] \n \t      When set to T,there is a list of files for search result. Default= F." <<endl;  
+  cout << endl; 
+
+}
+
+int Barista :: crux_set_command_line_options(int argc, char *argv[])
+{
+  string db_source;
+  string sqt_source;
+  string ms2_source;
+  string sqt_decoy_source;
+  int separate_search_flag;
+  string output_directory;
+  
+  string enzyme;
+  string decoy_prefix;
+
+  string dir_with_tables;
+  int found_dir_with_tables;
+  bool list_of_files_flag; 
+  bool spec_features_flag;
+
+  opt_type = Params::GetString("optimization");
+
+  fileroot = Params::GetString("fileroot");
+  if(!fileroot.empty()) {
+    fileroot.append(".");
+  }
+  if(opt_type.compare("psm") == 0)
+    qr.set_fileroot(fileroot);
+  else if(opt_type.compare("peptide") == 0)
+    pr.set_fileroot(fileroot);
+  
+  overwrite_flag = Params::GetBool("overwrite");
+  if(opt_type.compare("psm") == 0)
+    qr.set_overwrite_flag(overwrite_flag);
+  if(opt_type.compare("peptide") == 0)
+    pr.set_overwrite_flag(overwrite_flag);
+
+  //options for the parser
+  decoy_prefix = Params::GetString("decoy-prefix");
+
+  enzyme = Params::GetString("enzyme");
+
+  spec_features_flag = Params::GetBool("use-spec-features");
+  
+  skip_cleanup_flag = Params::GetBool("skip-cleanup");
+  
+  dir_with_tables = Params::GetString("re-run"); 
+    if(!dir_with_tables.empty()) {
+    found_dir_with_tables = 1;
+  } else {
+    found_dir_with_tables = 0;
+  }
+  
+  output_directory = Params::GetString("output-dir");
+
+  feature_file_flag = Params::GetBool("feature-file-out");
+  feature_file_name << output_directory << "/" << fileroot << "barista.features.txt";
+  
+  if(found_dir_with_tables){
+      parser= new SQTParser();
+      //set input and output dirs
+      parser->set_output_dir(dir_with_tables);
+      if(opt_type.compare("psm") == 0)
+	{
+	  qr.set_input_dir(dir_with_tables);
+	  qr.set_output_dir(output_directory);
+	}
+      else if(opt_type.compare("peptide") == 0)
+	{
+	  pr.set_input_dir(dir_with_tables);
+	  pr.set_output_dir(output_directory);
+	}
+      set_input_dir(dir_with_tables);
+      set_output_dir(output_directory);
+
+      carp(CARP_INFO, "directory with tables: %s", dir_with_tables.c_str());
+      carp(CARP_INFO, "output_directory: %s", output_directory.c_str());
+    }else{
+      db_source = Params::GetString("database");
+      ms2_source = Params::GetString("fragmentation spectra");
+      sqt_source = Params::GetString("search results");
+      sqt_decoy_source = Params::GetString("separate-searches"); 
+      list_of_files_flag = Params::GetBool("list-of-files");
+      vector<string> files; 
+      string files_list; 
+       
+      if(list_of_files_flag==1){
+        ifstream f(sqt_source.c_str());
+        f>>files_list; 
+        while(!f.eof()){
+          files.push_back(files_list);
+          f>> files_list; 
+        } 
+      }else{
+         files.push_back(sqt_source);
+       }
+     
+     for(unsigned i=0; i<files.size();i++){
+        FILE_FORMAT_T format=check_file_format(files[i]);
+        //sqt_source 
+        switch (format) {
+          case SQT_FORMAT:
+            file_format_="sqt";
+            parser = new SQTParser();
+	    break;
+          case DELIMITED_FORMAT:
+            file_format_="txt";
+	    parser = new CruxParser();
+	    break;
+          case INVALID_FORMAT:
+          default:
+	    carp(CARP_FATAL, "Please enter .sqt or .txt search results"); 
+        } 
+        
+        parser->set_decoy_prefix(decoy_prefix);
+        parser->set_enzyme(enzyme);
+        if(enzyme.find("elastase") != string::npos){
+           cleavage_type="elastase-full-digest";
+        }else if (enzyme.find("chymotrypsin") != string::npos){
+           cleavage_type="chymotrypsin-full-digest";
+        }else if (enzyme.find("trypsin") != string::npos){
+           cleavage_type="trypsin-full-digest";
+        }else{
+           cleavage_type="Null";
+        }
+      
+        //num of spec features
+        if(spec_features_flag)
+          parser->set_num_spec_features(3);
+        else
+          parser->set_num_spec_features(0);
+
+        if(!sqt_decoy_source.empty()) {
+	  separate_search_flag = 1;
+        } else {
+	  separate_search_flag = 0;
+        }
+      
+      parser->write_features_header();
+      if(opt_type.compare("protein") == 0)
+	parser->set_use_quadratic_features(1);
+      if(parser->get_use_quadratic_features())
+        parser->add_quadratic_features_header(); 
+      d.get_features_header(parser->get_final_features_header());
+        //set the output directory for the parser
+        if(!parser->set_output_dir(output_directory))
+	  return 0;
+        //set input and output for the leaning algo (in and out are the same as the out for the parser)
+		
+	if(opt_type.compare("psm") == 0)
+	  {
+	    qr.set_input_dir(output_directory);
+	    qr.set_output_dir(output_directory);
+	  }
+	else if(opt_type.compare("peptide") == 0)
+	  {
+	    pr.set_input_dir(output_directory);
+	    pr.set_output_dir(output_directory);
+	  }
+	set_input_dir(output_directory);
+	set_output_dir(output_directory);
+	            
+        if(!parser->set_database_source(db_source))
+	  carp(CARP_FATAL, "could not find the database");
+      
+        if(separate_search_flag){
+	    if(!parser->set_input_sources(ms2_source, sqt_source, sqt_decoy_source))
+	      carp(CARP_FATAL, "could not extract features for training");
+	    parser->set_num_hits_per_spectrum(1);
+        }else{
+	   if(!parser->set_input_sources(ms2_source, sqt_source))
+	      carp(CARP_FATAL, "could not extract features for training");
+         }
+        //print some info
+        carp(CARP_INFO, "database source: %s", db_source.c_str());
+        carp(CARP_INFO, "sqt source: %s", sqt_source.c_str()); 
+        carp(CARP_INFO, "ms2 source: %s", ms2_source.c_str());
+        carp(CARP_INFO, "output_directory: %s", output_directory.c_str());
+        carp(CARP_INFO, "enzyme: %s", enzyme.c_str());
+        carp(CARP_INFO, "decoy prefix: %s", decoy_prefix.c_str());
+      
+        
+        if(!parser->run())
+	  carp(CARP_FATAL, "Could not proceed with training.");
+        parser->clear();
+      } 
+    }
+   
+ 
+   if(!parser->check_input_dir(in_dir))
+    carp(CARP_FATAL, "Please re-run with database, ms2 input and sqt input.");
+
+  return 1;
+
+}
+
+int Barista::main(int argc, char **argv) {
+  if(!crux_set_command_line_options(argc,argv))
+    return 1;
+
+  if(opt_type.compare("psm") == 0)
+    qr.run();
+  else if(opt_type.compare("peptide") == 0)
+    pr.run();
+  else
+    {
+       run_tries();
+     }
+  if(skip_cleanup_flag != 1)
+    parser->clean_up(out_dir);
+
+  return 0;
+}   
+
+bool Barista :: needsOutputDirectory() const
+{
+  return true;
+}
+
+
+string Barista::getName() const {
+  return "barista";
+}
+
+string Barista::getDescription() const {
+  return
+    "[[nohtml:Rank PSMs, peptides and proteins, assigning a confidence measure "
+    "to each identification.]]"
+    "[[html:<p>Barista is a protein identification algorithm that combines two "
+    "different tasks–peptide-spectrum match (PSM) verification and "
+    "protein inference–into a single learning algorithm. The program "
+    "requires three inputs: a set of MS2 spectra, a protein database, and the "
+    "results of searching the spectra against the database. Barista produces "
+    "as output three ranked lists of proteins, peptides and PSMs, based on how "
+    "likely the proteins and peptides are to be present in the sample and how "
+    "likely the PSMs are to be correct. Barista can jointly analyze the "
+    "results of multiple shotgun proteomics experiments, corresponding to "
+    "different experiments or replicate runs.</p><p>Barista uses a machine "
+    "learning strategy that requires that the database search be carried out "
+    "on target and decoy proteins. The searches may be carried out on a "
+    "concatenated database or, using the <code>--separate-searches</code> "
+    "option, separate target and decoy databases. The <code>crux tide-index"
+    "</code> command can be used to generate a decoy database.</p><p>Barista "
+    "assigns two types of statistical confidence estimates, q-values and "
+    "posterior error probabilities, to identified PSMs, peptides and proteins. "
+    "For more information about these values, see the documentation for <a "
+    "href=\"assign-confidence.html\">assign-confidence</a>.</p>"
+    "<p>More details on the Barista algorithm are provided in</p>"
+    "<blockquote>Marina Spivak, Jason Weston, Michael J. MacCoss and "
+    "William Stafford Noble.  <a href=\"http://www.mcponline.org/content/"
+    "11/2/M111.012161.long\">\"Direct maximization of protein identifications "
+    "from tandem mass spectra.\"</a>  <i>Molecular and Cellular "
+    "Proteomics</i>. 11(2):M111.012161, 2012.</blockquote>]]";
+}
+
+vector<string> Barista::getArgs() const {
+  string arr[] = {
+    "database",
+    "fragmentation spectra",
+    "search results"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector<string> Barista::getOptions() const {
+  string arr[] = {
+    "enzyme",
+    "decoy-prefix",
+    "separate-searches",
+    "fileroot",
+    "output-dir",
+    "overwrite",
+    "pepxml-output",
+    "txt-output",
+    "skip-cleanup",
+    "re-run",
+    "use-spec-features",
+    "parameter-file",
+    "verbosity",
+    "list-of-files",
+    "feature-file-out",
+    "optimization",
+    "spectrum-parser"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector< pair<string, string> > Barista::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("barista.xml",
+    "an <a href=\"../file-formats/barista-xml-format.html\">XML file</a> that contains "
+    "four information about proteins, subset proteins, peptides, and PSMs."));
+  outputs.push_back(make_pair("barista.target.proteins.txt",
+    "a <a href=\"../file-formats/txt-format.html\">tab-delimited file</a> containing a ranked "
+    "list of groups of indistinguishable target proteins with associated Barista scores "
+    "and q-values and with peptides that contributed to the identification of the "
+    "protein group."));
+  outputs.push_back(make_pair("barista.target.subset-proteins.txt",
+    "a <a href=\"../file-formats/txt-format.html\">tab-delimited file</a> containing groups of "
+    "indistinguishable proteins."));
+  outputs.push_back(make_pair("barista.target.peptides.txt",
+    "a <a href=\"../file-formats/txt-format.html\">tab-delimited file</a> containing a ranked list "
+    "of target peptides with the associated Barista scores and q-values."));
+  outputs.push_back(make_pair("barista.target.psm.txt",
+    "a <a href=\"../file-formats/txt-format.html\">tab-delimited file format</a> containing a ranked list "
+    "of target peptide-spectrum matches with the associated Barista scores and q-values."));
+  outputs.push_back(make_pair("barista.log.txt",
+    "a file where the program reports its progress."));
+  outputs.push_back(make_pair("barista.params.txt",
+    "a file with the values of all the options given to the current run."));
+  return outputs;
+}
+
+COMMAND_T Barista::getCommand() const {
+  return BARISTA_COMMAND;
+}
+
+// returns file extension 
+string Barista:: file_extension (string str){ 
+  return str.substr(str.rfind('.')+1);
+}
+
+
+//determins which parser to be called 
+FILE_FORMAT_T Barista:: check_file_format(string source){
+  string ext = file_extension(source);
+    if (ext=="sqt")
+      return SQT_FORMAT;
+    else if(ext=="txt")
+      return DELIMITED_FORMAT;
+    else 
+      carp(CARP_DEBUG,"The file format is invalid");
+    return INVALID_FORMAT;
+}
+
+void Barista :: get_protein_id(int pepind, vector<string> &prot){
+  int * protinds= d.pepind2protinds(pepind) ;
+  unsigned prot_length=d.pepind2num_prot(pepind);  
+  for (unsigned k=0;k<prot_length;k++){
+    string protein_str= d.ind2prot( protinds[k]);
+    prot.push_back(protein_str); 
+  }
+}
+
+void Barista :: print_protein_ids(vector<string> &prots, ofstream &os, int psmind){
+  if(file_format_=="txt"){
+    for (unsigned int j=0;j<prots.size();j++){
+       if(j==prots.size()-1)
+      	 os<<prots[j]<<"("<<d.psmind2peptide_position(psmind)<<")\t";
+       else
+         os<<prots[j]<<"("<<d.psmind2peptide_position(psmind)<<")"<<",";
+    }
+  }else if(file_format_=="sqt"){
+    for (unsigned int j=0;j<prots.size();j++){
+      if(j==prots.size()-1)
+      	os<<prots[j]<<"\t";
+      else
+        os<<prots[j]<<",";
+    }
+  }
+  prots.clear();
+}
+
+/*
+*Local Variables: 
+*mode: c
+*c-basic-offset: 2
+*End:
+*/
diff --git a/src/app/qranker-barista/Barista.h b/src/app/qranker-barista/Barista.h
new file mode 100644
index 0000000..d5b3485
--- /dev/null
+++ b/src/app/qranker-barista/Barista.h
@@ -0,0 +1,200 @@
+#ifndef BARISTA_H
+#define BARISTA_H
+
+#include <sys/types.h>
+#ifndef _MSC_VER
+#include <dirent.h>
+#endif
+
+#include <iostream>
+#include <sstream>
+#include <set>
+#include <algorithm>
+#include <assert.h>
+#include <cstdio>
+#include <iomanip>
+#include "app/CruxApplication.h"
+#include "io/carp.h"
+#include "util/crux-utils.h"
+#include "parameter.h"
+#include "io/PepXMLWriter.h"
+#include "DataSetCrux.h"
+#include "ProtScores.h"
+#include "PSMScores.h"
+#include "PepScores.h"
+#include "NeuralNet.h"
+#include "SQTParser.h"
+#include "CruxParser.h"
+#include "QRanker.h"
+#include "PepRanker.h"
+using namespace std;
+#include "util/mass.h"
+
+class Barista : public CruxApplication
+{
+ public:
+  Barista() 
+    : verbose(0),
+    skip_cleanup_flag(0),
+    overwrite_flag(0),
+    feature_file_flag(0),
+    list_of_files_flag(0),
+    in_dir(""), 
+    out_dir(""), 
+    fileroot(""), 
+    seed(0), 
+    selectionfdr(0.01), 
+    nepochs(20), 
+    num_features(0), 
+    num_hu(3), 
+    mu(0.05),
+    weightDecay(0.0), 
+    alpha(0.3),
+    max_psms_in_prot(0),
+    net_clones(0),
+    max_fdr(0),
+    max_peptides(0),   
+    max_fdr_psm(0),
+    max_fdr_pep(0),
+    parser(NULL){}
+  ~Barista(){clear();}
+  void clear();
+  void print_description();
+  int crux_set_command_line_options(int argc, char *argv[]);
+  int set_command_line_options(int argc, char *argv[]);
+  void setup_for_training(int trn_to_tst);
+  void setup_for_reporting_results();
+  int run();
+
+  int run_tries();
+  int run_tries_multi_task();
+  double train_hinge(int protind, int label);
+  double train_hinge_psm(int psmind, int label);
+  void train_net(double selectionfdr);
+  void train_net_multi_task(double selectionfdr, int interval);
+
+  void calc_gradients(int protind, int label);
+
+  int getOverFDRProt(ProtScores &set, NeuralNet &n, double fdr);
+  int getOverFDRProt(ProtScores &set, double fdr);
+
+  double get_protein_score(int protind);
+  double get_protein_score(int protind, NeuralNet &n);
+  double get_protein_score_parsimonious(int protind, NeuralNet &n);
+  int getOverFDRProtParsimonious(ProtScores &set, NeuralNet &n, double fdr);
+  void computePEP();
+  int computeNSAF();
+  int computePepNSAF();
+
+  void write_results_prot(string &out_dir, int fdr);
+  void report_all_results();
+  void get_pep_seq(string &pep, string &seq, string &n, string &c);
+  void get_tab_delim_proteins(string protein_str, vector<string> &proteins);
+  void write_protein_special_case_xml(ofstream &os, int i);
+  void write_results_prot_xml(ofstream &os);
+  void write_subset_protein_special_case_xml(ofstream &os, int i);
+  void write_results_subset_prot_xml(ofstream &os);
+  void write_results_peptides_xml(ofstream &os);
+  void write_results_psm_xml(ofstream &os);
+  void write_results_pep_xml(PepXMLWriter& xmlfile);
+  void report_all_results_xml();
+  void write_results_prot_special_case_tab(ofstream &os, int i);
+  void write_results_prot_tab(ofstream &os);
+  void write_subset_protein_special_case_tab(ofstream &os, int i);
+  void write_results_subset_prot_tab(ofstream &os);
+  void write_results_peptides_tab(ofstream &os);
+  void write_results_psm_tab(ofstream &os);
+  void report_all_results_tab();
+  void report_all_results_xml_tab();
+  void report_prot_fdr_counts(vector<double> &qvals, ofstream &of);
+  void report_psm_fdr_counts(vector<double> &qvals, ofstream &of);
+  void report_pep_fdr_counts(vector<double> &qvals, ofstream &of);
+  void report_all_fdr_counts();
+  void clean_up();
+  void get_protein_id(int pepind, vector<string> &prots);
+  void print_protein_ids(vector<string> &proteins,ofstream &os,int psmind);  
+
+  int getOverFDRPSM(PSMScores &set, NeuralNet &n, double fdr);
+  double get_peptide_score(int pepind, NeuralNet &n);
+  int getOverFDRPep(PepScores &set, NeuralNet &n, double fdr);
+
+  inline void set_input_dir(string input_dir) {in_dir = input_dir; d.set_input_dir(input_dir);}
+  inline void set_output_dir(string output_dir){out_dir = output_dir;}
+
+  /* CruxApplication Methods */
+  virtual int main(int argc, char** argv);
+  virtual std::string getName() const;
+  virtual std::string getDescription() const;
+  virtual std::vector<std::string> getArgs() const;
+  virtual std::vector<std::string> getOptions() const;
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+  virtual bool needsOutputDirectory() const;
+  virtual COMMAND_T getCommand() const;
+
+
+  double check_gradients_hinge_one_net(int protind, int label);
+  double check_gradients_hinge_clones(int protind, int label);
+
+  FILE_FORMAT_T check_file_format(string filename);
+  string file_extension(string str); 
+ protected:
+  SQTParser* parser;
+  int verbose;
+  int skip_cleanup_flag;
+  int overwrite_flag;
+  int feature_file_flag;
+  ostringstream feature_file_name;
+  int list_of_files_flag; 
+
+  Dataset d;
+  string in_dir;
+  string out_dir;
+  string fileroot;
+
+  string cleavage_type; 
+
+  int seed;
+  double selectionfdr;
+  int nepochs;
+
+  NeuralNet net;
+  int num_features;
+  int num_hu;
+  double mu;
+  double weightDecay;
+  double alpha;
+
+
+  int max_psms_in_prot;
+  NeuralNet *net_clones;
+  NeuralNet max_net_prot;
+  int max_fdr;
+  ProtScores trainset, thresholdset, testset;
+
+  int max_peptides;
+  vector<int> max_psm_inds;
+  vector<double> max_psm_scores;
+  
+  //for parsimony counts
+  vector<int> used_peptides;
+  vector<int> pepind_to_max_psmind;
+
+  PSMScores psmtrainset, psmtestset;
+  NeuralNet max_net_psm;
+  int max_fdr_psm;
+  
+  PepScores peptrainset,peptestset;
+  NeuralNet max_net_pep;
+  int max_fdr_pep;
+  
+  string file_format_; 
+  ofstream fdebug;
+
+  string opt_type;
+  QRanker qr;
+  PepRanker pr;
+
+};
+
+
+#endif
diff --git a/src/app/qranker-barista/BipartiteGraph.cpp b/src/app/qranker-barista/BipartiteGraph.cpp
new file mode 100644
index 0000000..0a42707
--- /dev/null
+++ b/src/app/qranker-barista/BipartiteGraph.cpp
@@ -0,0 +1,106 @@
+#include "BipartiteGraph.h"
+
+void BipartiteGraph::create_bipartite_graph(map<int, set<int> > data)
+{
+  int n = data.size();
+  //allocate the range array
+  ranges = new Range[n];
+  nranges = 0;
+  nindices = 0;
+  int max_len = 0;
+  for(map <int, set<int> >::iterator it = data.begin(); it != data.end(); it++)
+    {
+      int len = 0;
+      for(set<int>::iterator itp = (it->second).begin(); itp != (it->second).end(); itp++)
+	{
+	  len++;
+	  nindices++;
+	}
+      if(len > max_len)
+	max_len = len;
+      int ind = it->first;
+      ranges[ind].len = len;
+      nranges++;
+    }
+  indices = new int[nindices];
+
+  vector<int> t;
+  t.reserve(max_len);
+  set<int> s;
+  int pos = 0;
+  for (int i = 0; i < nranges; i++)
+    {
+      s = data[i];
+      t.erase(t.begin(),t.end());
+      for(set<int>::iterator itp = s.begin(); itp != s.end(); itp++)
+	t.push_back(*itp);
+      sort(t.begin(),t.end());
+      assert((int)t.size() == ranges[i].len);
+      ranges[i].p = pos;
+      for (unsigned int k = 0; k < t.size(); k++)
+	{
+	  indices[pos] = t[k];
+	  pos++;
+	}
+    }
+}
+
+
+void BipartiteGraph::save(ofstream &os)
+{
+  os.write((char*)(&nranges),sizeof(int));
+  os.write((char*)(&nindices),sizeof(int));
+  os.write((char*)ranges,sizeof(Range)*nranges);
+  os.write((char*)indices,sizeof(int)*nindices);
+}
+
+void BipartiteGraph::load(ifstream &is)
+{
+  is.read((char*)(&nranges),sizeof(int));
+  is.read((char*)(&nindices),sizeof(int));
+  ranges = new Range[nranges];
+  indices = new int[nindices];
+  is.read((char*)ranges,sizeof(Range)*nranges);
+  is.read((char*)indices,sizeof(int)*nindices);
+
+}
+
+
+bool BipartiteGraph::is_index_in_range(int index, int range)
+{
+  assert(range < nranges);
+  for(int i = 0; i < ranges[range].len; i++)
+    {
+      int ofst = ranges[range].p+i;
+      if(indices[ofst] == index)
+	return true;
+    }
+  return false;
+}
+
+bool BipartiteGraph :: is_subset(int r1, int r2)
+{
+  assert(r1 < nranges);
+  assert(r2 < nranges);
+  int len1 = ranges[r1].len;
+  int len2 = ranges[r2].len;
+  int *inds1 = indices+ranges[r1].p;
+  int *inds2 = indices+ranges[r2].p;
+  int i1 = 0;
+  int i2 = 0;
+  
+  while(i1 < len1 && i2 < len2)
+    {
+      if(inds1[i1] == inds2[i2])
+	{
+	  i1++;
+	  i2++;
+	}
+      else if(inds1[i1] < inds2[i2])
+	i1++;
+      else
+	return false;
+    }
+  return true;
+}
+
diff --git a/src/app/qranker-barista/BipartiteGraph.h b/src/app/qranker-barista/BipartiteGraph.h
new file mode 100644
index 0000000..249ccd8
--- /dev/null
+++ b/src/app/qranker-barista/BipartiteGraph.h
@@ -0,0 +1,38 @@
+#ifndef BIPARTITEGRAPH_H
+#define BIPARTITEGRAPH_H
+#include<iostream>
+#include<fstream>
+#include <set>
+#include <map>
+#include <vector>
+#include <algorithm>
+#include <assert.h>
+using namespace std;
+
+class BipartiteGraph{
+ public:
+  struct Range {int p; int len;};
+ BipartiteGraph():nranges(0),nindices(0), ranges((Range*)0), indices((int*)0){}
+  ~BipartiteGraph(){clear();}
+  void clear(){delete[] ranges; ranges = 0; delete[] indices; indices = 0; nranges=0; nindices=0;}
+  void create_bipartite_graph(map<int, set<int> > data);
+
+  bool is_index_in_range(int index, int range);
+  //assumes that inds are sorted
+  bool is_subset(int r1, int r2);
+  int get_nranges() const {return nranges;}
+  int get_nindices() const {return nindices;}
+  int get_range_length(int r){return ranges[r].len;}
+  int* get_range_indices(int r){return (indices+ranges[r].p);}
+
+  void save(ofstream &os);
+  void load(ifstream &is);
+ private:
+  int nranges; //how many ranges
+  int nindices; //size of the index array
+  Range* ranges;
+  int* indices;
+};
+
+
+#endif //BIPARTITEGRAPH_H
diff --git a/src/app/qranker-barista/CMakeLists.txt b/src/app/qranker-barista/CMakeLists.txt
new file mode 100644
index 0000000..e1e4e3e
--- /dev/null
+++ b/src/app/qranker-barista/CMakeLists.txt
@@ -0,0 +1,53 @@
+project(barista)
+
+cmake_minimum_required(VERSION 2.8.4)
+cmake_policy(VERSION 2.8.4)
+
+include_directories(${CMAKE_SOURCE_DIR}/src)
+include_directories(${CMAKE_BINARY_DIR}/ext/build/src/ProteoWizard/libraries/boost_1_56_0)
+include_directories(${CMAKE_BINARY_DIR}/ext/build/src/ProteoWizard/libraries/boost_aux)
+include_directories(${CMAKE_BINARY_DIR}/ext/include)
+
+if (WIN32 AND NOT CYGWIN)
+  add_definitions(-DBOOST_ALL_NO_LIB)
+endif (WIN32 AND NOT CYGWIN)
+
+if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+  set_property(
+    DIRECTORY
+    PROPERTY
+    COMPILE_DEFINITIONS
+      _CRT_SECURE_NO_WARNINGS
+      _SCL_SECURE_NO_WARNINGS
+      CRUX
+      SEARCH_ENABLED
+    )
+else (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+  set_property(
+    DIRECTORY
+    PROPERTY
+    COMPILE_DEFINITIONS
+    _FILE_OFFSET_BITS=64
+    _GNU_SOURCE
+    _LARGEFILE_SOURCE
+    GCC
+  )
+endif (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+
+add_library(
+  barista
+  STATIC
+  Barista.cpp
+  BipartiteGraph.cpp
+  CruxParser.cpp
+  DataSetCrux.cpp
+  NeuralNet.cpp
+  PepRanker.cpp
+  PepScores.cpp
+  ProtScores.cpp
+  PSMScores.cpp
+  QRanker.cpp
+  SpecFeatures.cpp
+  SQTParser.cpp
+  TabDelimParser.cpp
+)
diff --git a/src/app/qranker-barista/CruxParser.cpp b/src/app/qranker-barista/CruxParser.cpp
new file mode 100644
index 0000000..521a8db
--- /dev/null
+++ b/src/app/qranker-barista/CruxParser.cpp
@@ -0,0 +1,177 @@
+/*************************************************************************//**
+ * \file CruxParser.cpp
+ * AUTHOR: Manijeh Naseri and Sean McIlwain
+ * CREATE DATE: 06/06/2012
+ * \brief Parses tab-delimited search result files
+ ****************************************************************************/
+#include "CruxParser.h"
+#include "model/Peptide.h"
+#include "io/MatchFileReader.h"
+#include "model/PeptideSrc.h"
+#include "model/Match.h"
+#include "io/MatchColumns.h"
+#include "util/StringUtils.h"
+
+using namespace std; 
+/******************************/
+
+
+/**
+ * Default constructor
+ */
+CruxParser :: CruxParser() 
+  : SQTParser(){
+}
+
+/**
+ * Default destructor
+ */
+CruxParser :: ~CruxParser(){
+}
+
+ 
+/**
+ * Parse tab delimited file.
+ * Generates the same QRanker internal tables.
+ * Set the matches in the tab delimited file. 
+ */
+void CruxParser ::readMatches(
+  MatchFileReader& reader, ///< Reader for the delimited file.
+  int final_hits,  ///< Total number of matches
+  enzyme enz, ///< Enzyme used in search
+  bool decoy ///< Are all the matches decoy?
+  ) {
+  
+  //set the matches to zero 
+  int hits_read = 0;
+
+  // read file line by line and set the variables  
+  while (reader.hasNext()) {  
+    
+    int current_scan = reader.getInteger(SCAN_COL);
+    int current_charge = reader.getInteger(CHARGE_COL);
+    sqt_match matches;
+    matches.scan = current_scan;
+    matches.charge = current_charge;
+    matches.precursor_mass = reader.getDouble(SPECTRUM_NEUTRAL_MASS_COL);
+    
+    if (!reader.empty(DISTINCT_MATCHES_SPECTRUM_COL)) {
+      matches.num_sequence_comparisons = reader.getInteger(DISTINCT_MATCHES_SPECTRUM_COL);
+    } else if (!reader.empty(MATCHES_SPECTRUM_COL)) {
+      matches.num_sequence_comparisons = reader.getInteger(MATCHES_SPECTRUM_COL);
+    } else {
+      carp_once(CARP_WARNING, "Empty Matches/Spectrum col");
+      matches.num_sequence_comparisons = 0;
+    }
+    hits_read = 0;
+
+    //iterate over all rows in delimited file, fill-in sqt match structure.
+    while (reader.hasNext() && 
+           reader.getInteger(SCAN_COL) == current_scan && 
+           reader.getInteger(CHARGE_COL) == current_charge) {
+
+      //fill in sqt_match structure with correct fields from delimited file.
+      matches.xcorr_rank.push_back(reader.getInteger(XCORR_RANK_COL));
+      matches.sp_rank.push_back(reader.getInteger(SP_RANK_COL));
+      matches.delta_cn.push_back(reader.getDouble(DELTA_CN_COL));
+      matches.sp_score.push_back(reader.getDouble(SP_SCORE_COL));
+      matches.calc_mass.push_back(reader.getDouble(PEPTIDE_MASS_COL));
+      matches.xcorr_score.push_back(reader.getDouble(XCORR_SCORE_COL));
+      matches.num_ions_matched.push_back(reader.getInteger(BY_IONS_MATCHED_COL));
+      matches.num_total_ions.push_back(reader.getFloat(BY_IONS_TOTAL_COL)); 
+        
+      //set sequence_id 
+      string sequence = reader.getString(SEQUENCE_COL);
+      //set flanking_aa 
+      string flanking_aa = reader.getString(FLANKING_AA_COL); 
+      
+      if (flanking_aa.length() != 2)
+      {
+        carp(CARP_DEBUG,
+            "Flanking AA value length is expected to be 2, "
+            "but was %d", flanking_aa.length());
+      }
+
+      ostringstream oss;
+
+      oss << flanking_aa[0] << "." << sequence << "." << flanking_aa[1];
+      string sqt_sequence = oss.str();
+      matches.peptides.push_back(sqt_sequence);
+      
+      //read protein Id from search result 
+      vector<string> protein_ids = StringUtils::Split(reader.getString(PROTEIN_ID_COL), ',');
+      matches.num_proteins_in_match.push_back(protein_ids.size());
+      for (size_t idx = 0;idx < protein_ids.size(); idx++) {
+        string protein_id = protein_ids.at(idx);
+        //change the format of protein_id to be same as SQTParser
+        size_t protein_idx_pos = protein_id.rfind('(');
+        if (protein_idx_pos != string::npos) {
+          string pep_pos= protein_id.substr(protein_idx_pos);
+          pep_pos=pep_pos.substr(1,pep_pos.size()-2);
+          matches.peptide_pos.push_back(atoi(pep_pos.c_str()));
+          protein_id.erase(protein_idx_pos);
+        } else {
+          matches.peptide_pos.push_back(-1);
+        }
+        matches.proteins.push_back(protein_id);
+      }       
+      hits_read++;
+      reader.next();  
+    }
+  
+    //call SQTParser method to generate internal tables
+    add_matches_to_tables(
+      matches, 
+      decoy_prefix,
+      hits_read, 
+      final_hits,
+      decoy
+    );
+
+    //call SQTParser method to generate feature vectors
+    extract_features(
+      matches,  
+      hits_read, 
+      final_hits,
+      enz 
+    );
+    
+  }
+}
+
+ /*
+  *gets the path of delimited file 
+  *\returns true if it can open the file 
+  */
+bool CruxParser :: read_search_results(
+  string& cur_fname, /// < current file path to parse
+  bool decoy ///< is this a file of decoys?
+  ) {
+
+  //read file 
+  MatchFileReader reader(cur_fname);
+
+  //TODO (SJM) - test to see if we opened the file, if not, WARNING, then return false
+ 
+  readMatches(
+    reader, 
+    fhps,  
+    e,
+    decoy
+  );
+  return true; 
+}
+
+/**
+ *\returns txt file extension  
+ */
+std::string CruxParser::get_parser_extension() {
+  return ".txt";
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/qranker-barista/CruxParser.h b/src/app/qranker-barista/CruxParser.h
new file mode 100644
index 0000000..a925c54
--- /dev/null
+++ b/src/app/qranker-barista/CruxParser.h
@@ -0,0 +1,78 @@
+/*************************************************************************//**
+ * \file CruxParser.cpp
+ * AUTHOR: Manijeh Naseri and Sean McIlwain
+ * CREATE DATE: 06/06/2012
+ * \brief Parses tab-delimited search result files
+ ****************************************************************************/
+#ifndef CRUXPARSER_H
+#define CRUXPARSER_H
+
+#include <sys/stat.h>
+#ifndef _MSC_VER
+#include <dirent.h>
+#endif
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <assert.h>
+#include <vector>
+#include <string>
+#include <math.h>
+#include <map>
+#include <set>
+#include <cstring>
+#include "SpecFeatures.h"
+#include "BipartiteGraph.h"
+#include "SQTParser.h"
+#include "app/CruxApplication.h"
+#include "io/carp.h"
+#include "util/crux-utils.h"
+#include "parameter.h"
+
+using namespace std;
+
+class CruxParser:public SQTParser{
+ public:
+
+  CruxParser();
+  virtual ~CruxParser();
+
+ 
+/**
+ * Parse tab delimited file.
+ * Generates the same QRanker internal tables.
+ * Set the matches in the tab delimited file. 
+ */
+  void readMatches(
+    MatchFileReader& reader,///<Reader for the delimted file.
+    int final_hits,///<Total number of matches
+    enzyme enz, ///<Enzyme in used on search 
+    bool decoy ///< Are all the matches decoy?
+  );
+
+  /*
+  *gets the path of delimited file 
+  *\returns true if it can open the file 
+  */
+  virtual bool read_search_results(
+    string& cur_fname, ///< current delimited file path tp parse 
+    bool decoy ///< Are all the matches decoy?
+  ); 
+  virtual string  get_parser_extension(); 
+
+
+ protected:
+  ofstream f_pepind2flanking_aa;
+  ofstream f_psmind2xcorr_rank;
+  ofstream f_psmind2match_spectrum;
+  ofstream f_psmind2cleavage_type; 
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/qranker-barista/DataSetCrux.cpp b/src/app/qranker-barista/DataSetCrux.cpp
new file mode 100644
index 0000000..b18319a
--- /dev/null
+++ b/src/app/qranker-barista/DataSetCrux.cpp
@@ -0,0 +1,1369 @@
+#include "DataSetCrux.h"
+#include "SQTParser.h"
+
+Dataset::Dataset() 
+  : num_psms(0), num_pos_psms(0), num_neg_psms(0), 
+    psmind_to_features((double*)0), 
+    psmind_to_label((int*)0),
+    psmind_to_pepind((int*)0),
+    psmind_to_scan(0),
+    psmind_to_charge(0),
+    psmind_to_precursor_mass(0),
+    psmind_to_fileind(0),
+    num_pep(0), num_pos_pep(0), num_neg_pep(0),
+    pepind_to_label(0),
+    num_prot(0), num_pos_prot(0), num_neg_prot(0),
+    protind_to_label(0),
+    protind_to_num_all_pep(0),
+    psmind_to_sp_rank((int*)0),
+    protind_to_length(0),
+    psmind_to_xcorr_rank((int*)0),
+    psmind_to_matches_spectrum((int*)0),
+    psmind_to_by_ions_matched((double*)0),
+    psmind_to_by_ions_total((double*)0),
+    psmind_to_peptide_position((int*)0)
+{
+}
+
+Dataset::~Dataset()
+{
+  delete[] psmind_to_features; psmind_to_features = (double*)0;
+  delete[] psmind_to_label; psmind_to_label = (int*)0;
+  delete[] psmind_to_pepind; psmind_to_pepind = (int*)0;
+  delete[] psmind_to_scan; psmind_to_scan = (int*)0;
+  delete[] psmind_to_charge; psmind_to_charge = (int*)0;
+  delete[] psmind_to_precursor_mass; psmind_to_precursor_mass = (double*)0;
+  delete[] psmind_to_sp_rank; psmind_to_sp_rank=(int*)0;//Sp Rank
+  delete[] psmind_to_xcorr_rank; psmind_to_xcorr_rank=(int*)0;//xcorr Rank
+  // distinct matches/spectrum
+  delete[] psmind_to_matches_spectrum; psmind_to_matches_spectrum=(int*)0;
+  delete[] psmind_to_by_ions_matched; psmind_to_by_ions_matched=(double*)0;// b/y ions matched
+  delete[] psmind_to_by_ions_total; psmind_to_by_ions_total=(double*)0;// b/y ions total
+  delete[] psmind_to_peptide_position; psmind_to_peptide_position=(int*)0;//peptide position in protein 
+  fileind_to_fname.clear();
+
+  ind_to_pep.clear();
+  pepind_to_psminds.clear();
+  pepind_to_protinds.clear();
+  delete [] pepind_to_label; pepind_to_label = (int*)0;
+
+  delete [] psmind_to_fileind; psmind_to_fileind = (int*)0;
+  delete[] protind_to_label; protind_to_label = (int*)0;
+  delete[] protind_to_num_all_pep; protind_to_num_all_pep = (int*)0;
+  delete[] protind_to_length; protind_to_length = (int*)0;
+  protind_to_pepinds.clear();
+  ind_to_prot.clear();
+
+}
+
+
+/****************************************************************************/
+
+void Dataset :: load_data_psm_training()
+{
+
+  ostringstream fname;
+  fname << in_dir << "/summary";
+  ifstream f_summary(fname.str().c_str());
+  f_summary >> num_features;
+  f_summary >> num_psms;
+  f_summary >> num_pos_psms;
+  f_summary >> num_neg_psms;
+  f_summary.close();
+  fname.str("");
+
+  //psm features
+  fname << in_dir << "/" << "psm";
+  ifstream f_psm_feat(fname.str().c_str(),ios::binary);
+  if(!f_psm_feat.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_features = new double[num_psms*num_features];
+  f_psm_feat.read((char*)psmind_to_features,sizeof(double)*num_psms*num_features);
+  f_psm_feat.close();
+  fname.str("");
+}
+
+void Dataset :: clear_data_psm_training()
+{
+  delete [] psmind_to_features; psmind_to_features = (double*)0;
+}
+
+void Dataset :: load_labels_psm_training()
+{
+  ostringstream fname;
+  fname << in_dir << "/summary";
+  ifstream f_summary(fname.str().c_str());
+  f_summary >> num_features;
+  f_summary >> num_psms;
+  f_summary >> num_pos_psms;
+  f_summary >> num_neg_psms;
+  f_summary.close();
+  fname.str("");
+
+  //psmind_to_label
+  fname << in_dir << "/psmind_to_label";
+  ifstream f_psmind_to_label(fname.str().c_str(),ios::binary);
+  psmind_to_label = new int[num_psms];
+  f_psmind_to_label.read((char*)psmind_to_label,sizeof(int)*num_psms);
+  f_psmind_to_label.close();
+  fname.str("");
+}
+
+void Dataset :: clear_labels_psm_training()
+{
+  delete [] psmind_to_label; psmind_to_label = (int*)0;
+}
+
+void Dataset :: load_data_psm_results()
+{
+
+  ostringstream fname;
+  fname << in_dir << "/summary";
+  ifstream f_summary(fname.str().c_str());
+  f_summary >> num_features;
+  f_summary >> num_psms;
+  f_summary >> num_pos_psms;
+  f_summary >> num_neg_psms;
+  f_summary.close();
+  fname.str("");
+
+  //psmind_to_pepind
+  fname << in_dir << "/psmind_to_pepind";
+  ifstream f_psmind_to_pepind(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_pepind.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_pepind = new int[num_psms];
+  f_psmind_to_pepind.read((char*)psmind_to_pepind,sizeof(int)*num_psms);
+  f_psmind_to_pepind.close();
+  fname.str("");
+  
+  //psmind_to_scan
+  fname << in_dir << "/psmind_to_scan";
+  ifstream f_psmind_to_scan(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_scan.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_scan = new int[num_psms];
+  f_psmind_to_scan.read((char*)psmind_to_scan,sizeof(int)*num_psms);
+  f_psmind_to_scan.close();
+  fname.str("");
+
+  //psmind_to_charge
+  fname << in_dir << "/psmind_to_charge";
+  ifstream f_psmind_to_charge(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_charge.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_charge = new int[num_psms];
+  f_psmind_to_charge.read((char*)psmind_to_charge,sizeof(int)*num_psms);
+  f_psmind_to_charge.close();
+  fname.str("");
+
+  //psmind_to_xcorr
+  fname << in_dir << "/psmind_to_xcorr";
+  ifstream f_psmind_to_xcorr(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_xcorr.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_xcorr = new double[num_psms];
+  f_psmind_to_xcorr.read((char*)psmind_to_xcorr,sizeof(double)*num_psms);
+  f_psmind_to_xcorr.close();
+  fname.str("");
+
+  //psmind_to_deltaCn
+  fname << in_dir << "/psmind_to_deltaCn";
+  ifstream f_psmind_to_deltaCn(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_deltaCn.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_deltaCn = new double[num_psms];
+  f_psmind_to_deltaCn.read((char*)psmind_to_deltaCn,sizeof(double)*num_psms);
+  f_psmind_to_deltaCn.close();
+  fname.str("");
+  
+  //psmind_to_spscore
+  fname << in_dir << "/psmind_to_spscore";
+  ifstream f_psmind_to_spscore(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_spscore.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_spscore = new double[num_psms];
+  f_psmind_to_spscore.read((char*)psmind_to_spscore,sizeof(double)*num_psms);
+  f_psmind_to_spscore.close();
+  fname.str("");
+
+  //psmind_to_calculated_mass
+  fname << in_dir << "/psmind_to_calculated_mass";
+  ifstream f_psmind_to_calculated_mass(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_calculated_mass.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_calculated_mass = new double[num_psms];
+  f_psmind_to_calculated_mass.read((char*)psmind_to_calculated_mass,sizeof(double)*num_psms);
+  f_psmind_to_calculated_mass.close();
+  fname.str("");
+
+  //psmind_to_precursor_mass
+  fname << in_dir << "/psmind_to_precursor_mass";
+  ifstream f_psmind_to_precursor_mass(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_precursor_mass.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_precursor_mass = new double[num_psms];
+  f_psmind_to_precursor_mass.read((char*)psmind_to_precursor_mass,sizeof(double)*num_psms);
+  f_psmind_to_precursor_mass.close();
+  fname.str("");
+  
+  //fileind_to_fname
+  fname << in_dir << "/fileind_to_fname";
+  ifstream f_fileind_to_fname(fname.str().c_str(),ios::binary);
+  if(!f_fileind_to_fname.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  int ind;
+  string filename;
+  f_fileind_to_fname >> ind;
+  f_fileind_to_fname >> filename;
+  while(!f_fileind_to_fname.eof())
+    {
+      fileind_to_fname[ind] = filename;
+      f_fileind_to_fname >> ind;
+      f_fileind_to_fname >> filename;
+    }
+  f_fileind_to_fname.close();
+  fname.str("");
+  
+  //psmind_to_filename
+  fname << in_dir << "/psmind_to_fileind";
+  ifstream f_psmind_to_fileind(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_fileind.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_fileind = new int[num_psms];
+  f_psmind_to_fileind.read((char*)psmind_to_fileind,sizeof(int)*num_psms);
+  f_psmind_to_fileind.close();
+  fname.str("");
+
+  //ind_to_pep
+  fname << in_dir << "/ind_to_pep";
+  ifstream f_ind_to_pep(fname.str().c_str(),ios::binary);
+  string pep;
+  f_ind_to_pep >> ind;
+  f_ind_to_pep >> pep;
+  while(!f_ind_to_pep.eof())
+    {
+      ind_to_pep[ind] = pep;
+      f_ind_to_pep >> ind;
+      f_ind_to_pep >> pep;
+    }
+  f_ind_to_pep.close();
+  fname.str("");
+
+  //ind_to_prot
+  fname << in_dir << "/ind_to_prot";
+  ifstream f_ind_to_prot(fname.str().c_str(),ios::binary);
+ 
+  string prot;
+  f_ind_to_prot >> ind;
+  f_ind_to_prot >> prot;
+  while(!f_ind_to_prot.eof())
+    {
+      ind_to_prot[ind] = prot;
+      f_ind_to_prot >> ind;
+      f_ind_to_prot >> prot;
+    }
+  f_ind_to_prot.close();
+  fname.str("");
+
+  //pepind_to_protinds
+  fname << in_dir << "/pepind_to_protinds";
+  ifstream f_pepind_to_protinds(fname.str().c_str(),ios::binary);
+  if(!f_pepind_to_protinds.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  pepind_to_protinds.load(f_pepind_to_protinds);
+  f_pepind_to_protinds.close();
+  fname.str("");
+  
+  //psmind_to_Sp_rank 
+  fname << in_dir << "/psmind_to_sp_rank";
+  ifstream f_psmind_to_sp_rank(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_sp_rank.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+
+  psmind_to_sp_rank = new int[num_psms];
+  f_psmind_to_sp_rank.read((char*)psmind_to_sp_rank,sizeof(int)*num_psms);
+  f_psmind_to_sp_rank.close();
+  fname.str("");
+
+  //psmind_to_xcorr_rank 
+  fname << in_dir << "/psmind_to_xcorr_rank";
+  ifstream f_psmind_to_xcorr_rank(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_xcorr_rank.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_xcorr_rank = new int[num_psms];
+  f_psmind_to_xcorr_rank.read((char*)psmind_to_xcorr_rank,sizeof(int)*num_psms);
+  f_psmind_to_xcorr_rank.close();
+  fname.str("");
+
+  //psmind_to_by_ions_matched 
+  fname << in_dir << "/psmind_to_by_ions_matched";
+  ifstream f_psmind_to_by_ions_matched(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_by_ions_matched.is_open()){ 
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_by_ions_matched = new double[num_psms];
+  f_psmind_to_by_ions_matched.read((char*)psmind_to_by_ions_matched,sizeof(double)*num_psms);
+  f_psmind_to_by_ions_matched.close();
+  fname.str("");
+
+  //psmind_to_by_ions_total 
+  fname << in_dir << "/psmind_to_by_ions_total";
+  ifstream f_psmind_to_by_ions_total(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_by_ions_total.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_by_ions_total= new double[num_psms];
+  f_psmind_to_by_ions_total.read((char*)psmind_to_by_ions_total,sizeof(double)*num_psms);
+  f_psmind_to_by_ions_total.close();
+  fname.str("");
+  
+  //psmind_to_matches_spectrum 
+  fname << in_dir << "/psmind_to_matches_spectrum";
+  ifstream f_psmind_to_matches_spectrum(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_matches_spectrum.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_matches_spectrum = new int[num_psms];
+  f_psmind_to_matches_spectrum.read((char*)psmind_to_matches_spectrum,sizeof(int)*num_psms);
+  f_psmind_to_matches_spectrum.close();
+  fname.str("");
+  
+  //psmind_to_peptide_position 
+  fname << in_dir << "/psmind_to_peptide_position";
+  ifstream f_psmind_to_peptide_position(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_peptide_position.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_peptide_position= new int[num_psms];
+  f_psmind_to_peptide_position.read((char*)psmind_to_peptide_position,sizeof(int)*num_psms);
+  f_psmind_to_peptide_position.close();
+  fname.str("");
+
+}
+
+void Dataset :: clear_data_psm_results()
+{
+  delete [] psmind_to_label; psmind_to_label = (int*)0; 
+  delete [] psmind_to_pepind; psmind_to_pepind = (int*)0;
+  delete [] psmind_to_scan; psmind_to_scan = (int*)0;
+  delete [] psmind_to_charge; psmind_to_charge = (int*)0;
+  delete [] psmind_to_xcorr; psmind_to_xcorr = (double*)0;
+  delete [] psmind_to_precursor_mass; psmind_to_precursor_mass = (double*)0;
+  fileind_to_fname.clear();
+  delete [] psmind_to_fileind; psmind_to_fileind = (int*)0;
+  delete [] psmind_to_sp_rank; psmind_to_sp_rank=(int*)0;//sp rank
+  delete [] psmind_to_xcorr_rank; psmind_to_xcorr_rank=(int*)0;//xcorr rank
+  // distinct matches/spectrum
+  delete[] psmind_to_matches_spectrum; psmind_to_matches_spectrum=(int*)0;
+  delete [] psmind_to_by_ions_total; psmind_to_by_ions_total=(double*)0; //b/y ions total 
+  delete [] psmind_to_by_ions_matched;  psmind_to_by_ions_matched=(double*)0; //by ions matched 
+  delete [] psmind_to_peptide_position; psmind_to_peptide_position=(int*)0; //position of peptide in 
+  //the begining of protein 
+  ind_to_pep.clear();
+  ind_to_prot.clear();
+  pepind_to_protinds.clear();
+}
+
+string& Dataset :: psmind2fname(int psmind)
+{
+  int fileind = psmind_to_fileind[psmind];
+  return fileind_to_fname[fileind];
+}
+
+
+/************************************************************/
+void Dataset :: load_data_prot_training()
+{
+
+  ostringstream fname;
+  fname << in_dir << "/summary";
+  ifstream f_summary(fname.str().c_str());
+  if(!f_summary.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  f_summary >> num_features;
+  f_summary >> num_psms;
+  f_summary >> num_pos_psms;
+  f_summary >> num_neg_psms;
+  f_summary >> num_pep;
+  f_summary >> num_pos_pep;
+  f_summary >> num_neg_pep;
+  f_summary >> num_prot;
+  f_summary >> num_pos_prot;
+  f_summary >> num_neg_prot;
+  f_summary.close();
+  fname.str("");
+  
+  //psm features
+  fname << in_dir << "/" << "psm";
+  ifstream f_psm_feat(fname.str().c_str(),ios::binary);
+  if(!f_psm_feat.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_features = new double[num_psms*num_features];
+  f_psm_feat.read((char*)psmind_to_features,sizeof(double)*num_psms*num_features);
+  f_psm_feat.close();
+  fname.str("");
+
+
+  //pepind_to_psminds
+  fname << in_dir << "/pepind_to_psminds";
+  ifstream f_pepind_to_psminds(fname.str().c_str(),ios::binary);
+  if(!f_pepind_to_psminds.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  pepind_to_psminds.load(f_pepind_to_psminds);
+  f_pepind_to_psminds.close();
+  fname.str("");
+  
+  //protind_to_num_all_pep
+  fname << in_dir << "/protind_to_num_all_pep";
+  ifstream f_protind_to_num_all_pep(fname.str().c_str(),ios::binary);
+  if(!f_protind_to_num_all_pep.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  protind_to_num_all_pep = new int[num_prot];
+  f_protind_to_num_all_pep.read((char*)protind_to_num_all_pep,sizeof(int)*num_prot);
+  f_protind_to_num_all_pep.close();
+  fname.str("");
+
+  //protind_to_pepinds
+  fname << in_dir << "/protind_to_pepinds";
+  ifstream f_protind_to_pepinds(fname.str().c_str(),ios::binary);
+  if(!f_protind_to_pepinds.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  protind_to_pepinds.load(f_protind_to_pepinds);
+  f_protind_to_pepinds.close();
+  fname.str("");
+
+  //pepind_to_protinds
+  fname << in_dir << "/pepind_to_protinds";
+  ifstream f_pepind_to_protinds(fname.str().c_str(),ios::binary);
+  if(!f_pepind_to_protinds.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  pepind_to_protinds.load(f_pepind_to_protinds);
+  f_pepind_to_protinds.close();
+  fname.str("");
+
+}
+
+void Dataset :: clear_data_prot_training()
+{
+  delete [] psmind_to_features; psmind_to_features = (double*)0;
+  delete [] protind_to_num_all_pep; protind_to_num_all_pep = (int*)0;
+}
+
+void Dataset :: load_labels_prot_training()
+{
+
+  ostringstream fname;
+  fname << in_dir << "/summary";
+  ifstream f_summary(fname.str().c_str());
+  if(!f_summary.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  f_summary >> num_features;
+  f_summary >> num_psms;
+  f_summary >> num_pos_psms;
+  f_summary >> num_neg_psms;
+  f_summary >> num_pep;
+  f_summary >> num_pos_pep;
+  f_summary >> num_neg_pep;
+  f_summary >> num_prot;
+  f_summary >> num_pos_prot;
+  f_summary >> num_neg_prot;
+  f_summary.close();
+  fname.str("");
+
+  //psmind_to_label
+  fname << in_dir << "/psmind_to_label";
+  ifstream f_psmind_to_label(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_label.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_label = new int[num_psms];
+  f_psmind_to_label.read((char*)psmind_to_label,sizeof(int)*num_psms);
+  f_psmind_to_label.close();
+  fname.str("");
+  
+  //pepind_to_label
+  fname << in_dir << "/pepind_to_label";
+  ifstream f_pepind_to_label(fname.str().c_str(),ios::binary);
+  if(!f_pepind_to_label.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  pepind_to_label = new int[num_pep];
+  f_pepind_to_label.read((char*)pepind_to_label,sizeof(int)*num_pep);
+  f_pepind_to_label.close();
+  fname.str("");
+  
+  //protind_to_label
+  fname << in_dir << "/protind_to_label";
+  ifstream f_protind_to_label(fname.str().c_str(),ios::binary);
+  if(!f_protind_to_label.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  protind_to_label = new int[num_prot];
+  f_protind_to_label.read((char*)protind_to_label,sizeof(int)*num_prot);
+  f_protind_to_label.close();
+  fname.str("");
+
+  //ind_to_pep
+  fname << in_dir << "/ind_to_pep";
+  ifstream f_ind_to_pep(fname.str().c_str(),ios::binary);
+  int ind;
+  string pep;
+  f_ind_to_pep >> ind;
+  f_ind_to_pep >> pep;
+  while(!f_ind_to_pep.eof()){
+      ind_to_pep[ind] = pep;
+      f_ind_to_pep >> ind;
+      f_ind_to_pep >> pep;
+  }
+  f_ind_to_pep.close();
+  fname.str("");
+
+
+}
+
+void Dataset :: clear_labels_prot_training()
+{
+  delete [] psmind_to_label; psmind_to_label = (int*)0;
+  delete [] pepind_to_label; pepind_to_label = (int*)0;
+  delete [] protind_to_label; protind_to_label = (int*)0;
+  ind_to_pep.clear();
+}
+
+
+void Dataset :: load_data_all_results(){
+
+  ostringstream fname;
+
+  //ind_to_pep
+  fname << in_dir << "/ind_to_pep";
+  ifstream f_ind_to_pep(fname.str().c_str(),ios::binary);
+  int ind;
+  string pep;
+  f_ind_to_pep >> ind;
+  f_ind_to_pep >> pep;
+  while(!f_ind_to_pep.eof()){
+      ind_to_pep[ind] = pep;
+      f_ind_to_pep >> ind;
+      f_ind_to_pep >> pep;
+  }
+  f_ind_to_pep.close();
+  fname.str("");
+
+  //ind_to_prot
+  fname << in_dir << "/ind_to_prot";
+  ifstream f_ind_to_prot(fname.str().c_str(),ios::binary);
+ 
+  string prot;
+  f_ind_to_prot >> ind;
+  f_ind_to_prot >> prot;
+  while(!f_ind_to_prot.eof()){
+      ind_to_prot[ind] = prot;
+      f_ind_to_prot >> ind;
+      f_ind_to_prot >> prot;
+  }
+  f_ind_to_prot.close();
+  fname.str("");
+
+  //protind_to_length
+  fname << in_dir << "/protind_to_length";
+  ifstream f_protind_to_length(fname.str().c_str(),ios::binary);
+  if(!f_protind_to_length.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  protind_to_length = new int[num_prot];
+  f_protind_to_length.read((char*)protind_to_length,sizeof(int)*num_prot);
+  f_protind_to_length.close();
+  fname.str("");
+
+
+  //protind_to_label
+  fname << in_dir << "/protind_to_label";
+  ifstream f_protind_to_label(fname.str().c_str(),ios::binary);
+  if(!f_protind_to_label.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  protind_to_label = new int[num_prot];
+  f_protind_to_label.read((char*)protind_to_label,sizeof(int)*num_prot);
+  f_protind_to_label.close();
+  fname.str("");
+
+  //psm data
+
+  //psmind_to_pepind
+  fname << in_dir << "/psmind_to_pepind";
+  ifstream f_psmind_to_pepind(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_pepind.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_pepind = new int[num_psms];
+  f_psmind_to_pepind.read((char*)psmind_to_pepind,sizeof(int)*num_psms);
+  f_psmind_to_pepind.close();
+  fname.str("");
+  
+  //psmind_to_scan
+  fname << in_dir << "/psmind_to_scan";
+  ifstream f_psmind_to_scan(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_scan.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_scan = new int[num_psms];
+  f_psmind_to_scan.read((char*)psmind_to_scan,sizeof(int)*num_psms);
+  f_psmind_to_scan.close();
+  fname.str("");
+
+  //psmind_to_charge
+  fname << in_dir << "/psmind_to_charge";
+  ifstream f_psmind_to_charge(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_charge.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_charge = new int[num_psms];
+  f_psmind_to_charge.read((char*)psmind_to_charge,sizeof(int)*num_psms);
+  f_psmind_to_charge.close();
+  fname.str("");
+
+  //psmind_to_xcorr
+  fname << in_dir << "/psmind_to_xcorr";
+  ifstream f_psmind_to_xcorr(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_xcorr.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_xcorr = new double[num_psms];
+  f_psmind_to_xcorr.read((char*)psmind_to_xcorr,sizeof(double)*num_psms);
+  f_psmind_to_xcorr.close();
+  fname.str("");
+
+  //psmind_to_deltaCn
+  fname << in_dir << "/psmind_to_deltaCn";
+  ifstream f_psmind_to_deltaCn(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_deltaCn.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_deltaCn = new double[num_psms];
+  f_psmind_to_deltaCn.read((char*)psmind_to_deltaCn,sizeof(double)*num_psms);
+  f_psmind_to_deltaCn.close();
+  fname.str("");
+  
+  //psmind_to_sp_score
+  fname << in_dir << "/psmind_to_spscore";
+  ifstream f_psmind_to_spscore(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_spscore.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_spscore = new double[num_psms];
+  f_psmind_to_spscore.read((char*)psmind_to_spscore,sizeof(double)*num_psms);
+  f_psmind_to_spscore.close();
+  fname.str("");
+
+  //psmind_to_calculated_mass
+  fname << in_dir << "/psmind_to_calculated_mass";
+  ifstream f_psmind_to_calculated_mass(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_calculated_mass.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_calculated_mass = new double[num_psms];
+  f_psmind_to_calculated_mass.read((char*)psmind_to_calculated_mass,sizeof(double)*num_psms);
+  f_psmind_to_calculated_mass.close();
+  fname.str("");
+
+  //psmind_to_precursor_mass
+  fname << in_dir << "/psmind_to_precursor_mass";
+  ifstream f_psmind_to_precursor_mass(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_precursor_mass.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_precursor_mass = new double[num_psms];
+  f_psmind_to_precursor_mass.read((char*)psmind_to_precursor_mass,sizeof(double)*num_psms);
+  f_psmind_to_precursor_mass.close();
+  fname.str("");
+  
+  //fileind_to_fname
+  fname << in_dir << "/fileind_to_fname";
+  ifstream f_fileind_to_fname(fname.str().c_str(),ios::binary);
+  if(!f_fileind_to_fname.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+
+  string filename;
+  f_fileind_to_fname >> ind;
+  f_fileind_to_fname >> filename;
+  while(!f_fileind_to_fname.eof()){
+      fileind_to_fname[ind] = filename;
+      f_fileind_to_fname >> ind;
+      f_fileind_to_fname >> filename;
+    }
+  f_fileind_to_fname.close();
+  fname.str("");
+  
+  //psmind_to_filename
+  fname << in_dir << "/psmind_to_fileind";
+  ifstream f_psmind_to_fileind(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_fileind.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_fileind = new int[num_psms];
+  f_psmind_to_fileind.read((char*)psmind_to_fileind,sizeof(int)*num_psms);
+  f_psmind_to_fileind.close();
+  fname.str("");
+
+  //psmind_to_sp_rank
+  fname << in_dir << "/psmind_to_sp_rank";
+  ifstream f_psmind_to_sp_rank(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_sp_rank.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_sp_rank = new int[num_psms];
+  f_psmind_to_sp_rank.read((char*)psmind_to_sp_rank,sizeof(int)*num_psms);
+  f_psmind_to_sp_rank.close();
+  fname.str("");
+  
+  //psmind_to_xcorr_rank
+  fname << in_dir << "/psmind_to_xcorr_rank";
+  ifstream f_psmind_to_xcorr_rank(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_xcorr_rank.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_xcorr_rank = new int[num_psms];
+  f_psmind_to_xcorr_rank.read((char*)psmind_to_xcorr_rank,sizeof(int)*num_psms);
+  f_psmind_to_xcorr_rank.close();
+  fname.str("");
+    
+  //psmind_to_match_spectrum
+  fname << in_dir << "/psmind_to_matches_spectrum";
+  ifstream f_psmind_to_matches_spectrum(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_matches_spectrum.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_matches_spectrum = new int[num_psms];
+  f_psmind_to_matches_spectrum.read((char*)psmind_to_matches_spectrum,sizeof(int)*num_psms);
+  f_psmind_to_matches_spectrum.close();
+  fname.str("");
+   
+  //psmind_to_by_ions_matched
+  fname << in_dir << "/psmind_to_by_ions_matched";
+  ifstream f_psmind_to_by_ions_matched(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_by_ions_matched.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_by_ions_matched = new double[num_psms];
+  f_psmind_to_by_ions_matched.read((char*)psmind_to_by_ions_matched,sizeof(double)*num_psms);
+  f_psmind_to_by_ions_matched.close();
+  fname.str("");
+ 
+  //psmind_to_by_ions_total
+  fname << in_dir << "/psmind_to_by_ions_total";
+  ifstream f_psmind_to_by_ions_total(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_by_ions_total.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_by_ions_total = new double[num_psms];
+  f_psmind_to_by_ions_total.read((char*)psmind_to_by_ions_total,sizeof(double)*num_psms);
+  f_psmind_to_by_ions_total.close();
+  fname.str("");
+  
+  //psmind_to_peptide_position
+  fname << in_dir << "/psmind_to_peptide_position";
+  ifstream f_psmind_to_peptide_position(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_peptide_position.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_peptide_position = new int[num_psms];
+  f_psmind_to_peptide_position.read((char*)psmind_to_peptide_position,sizeof(int)*num_psms);
+  f_psmind_to_peptide_position.close();
+  fname.str("");
+}
+
+void Dataset :: clear_data_all_results()
+{
+  clear_data_psm_results();
+  delete [] protind_to_label; protind_to_label = (int*)0;
+  delete [] protind_to_length; protind_to_length = (int*)0;
+  protind_to_pepinds.clear();
+}
+
+
+
+
+/******************************************************/
+
+void Dataset :: normalize_psms()
+{
+  for (int i = 0; i < num_features; i++)
+    {
+      double mean = 0;
+      for (int j = 0; j < num_psms; j++)
+	mean += psmind_to_features[num_features*j+i];
+      mean /= num_psms;
+      
+      double std = 0;
+      for (int j = 0; j < num_psms; j++)
+	{
+	  psmind_to_features[num_features*j+i] -= mean;
+	  std += psmind_to_features[num_features*j+i]*psmind_to_features[num_features*j+i];
+	}
+      std = sqrt(std/num_psms);
+
+      for (int j = 0; j < num_psms; j++)
+	{
+	  if(std > 0)
+	    psmind_to_features[num_features*j+i] /= std;
+	}
+
+      double sm = 0;
+      for (int j = 0; j < num_psms; j++)
+	{
+	  sm += psmind_to_features[num_features*j+i]*psmind_to_features[num_features*j+i];
+	}
+      //cout << i << " " << sm/num_psms << endl;
+    }
+}
+
+
+int Dataset :: print_features(string &filename)
+{
+  ofstream os(filename.c_str());
+  if(!os.is_open())
+    return 0;
+
+  delete [] psmind_to_label; psmind_to_label = (int*)0;
+  delete [] psmind_to_scan; psmind_to_scan = (int*)0;
+
+  ostringstream fname;
+  //psmind_to_label
+  fname << in_dir << "/psmind_to_label";
+  ifstream f_psmind_to_label(fname.str().c_str(),ios::binary);
+  psmind_to_label = new int[num_psms];
+  f_psmind_to_label.read((char*)psmind_to_label,sizeof(int)*num_psms);
+  f_psmind_to_label.close();
+  fname.str("");
+  
+  //psmind_to_scan
+  fname << in_dir << "/psmind_to_scan";
+  ifstream f_psmind_to_scan(fname.str().c_str(),ios::binary);
+  psmind_to_scan = new int[num_psms];
+  f_psmind_to_scan.read((char*)psmind_to_scan,sizeof(int)*num_psms);
+  f_psmind_to_scan.close();
+  fname.str("");
+  //print features header
+  os<<"scan\t"<<"label\t";
+  for(unsigned i=0;i<features_header_.size()-1;i++)
+    os<<features_header_[i]<<"\t";   
+  os<<features_header_[features_header_.size()-1]<<endl;
+
+  for (int j = 0; j < num_psms; j++){
+      os << psmind_to_scan[j] << "\t";
+      os << psmind_to_label[j] << "\t"; 
+      for (int i = 0; i < num_features-1; i++){
+	os << psmind_to_features[num_features*j+i] << "\t"; 
+      }
+      os << psmind_to_features[num_features*j+(num_features-1)] << endl;
+    }
+  os.close();
+
+  delete [] psmind_to_label; psmind_to_label = (int*)0;
+  delete [] psmind_to_scan; psmind_to_scan = (int*)0;
+  return 1;
+}
+
+/*****************************************************/
+void Dataset :: load_data_pep_training()
+{
+
+  ostringstream fname;
+  fname << in_dir << "/summary";
+  ifstream f_summary(fname.str().c_str());
+  if(!f_summary.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  f_summary >> num_features;
+  f_summary >> num_psms;
+  f_summary >> num_pos_psms;
+  f_summary >> num_neg_psms;
+  f_summary >> num_pep;
+  f_summary >> num_pos_pep;
+  f_summary >> num_neg_pep;
+  f_summary >> num_prot;
+  f_summary >> num_pos_prot;
+  f_summary >> num_neg_prot;
+  f_summary.close();
+  fname.str("");
+  
+  //psm features
+  fname << in_dir << "/" << "psm";
+  ifstream f_psm_feat(fname.str().c_str(),ios::binary);
+  if(!f_psm_feat.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_features = new double[num_psms*num_features];
+  f_psm_feat.read((char*)psmind_to_features,sizeof(double)*num_psms*num_features);
+  f_psm_feat.close();
+  fname.str("");
+
+
+  //pepind_to_psminds
+  fname << in_dir << "/pepind_to_psminds";
+  ifstream f_pepind_to_psminds(fname.str().c_str(),ios::binary);
+  if(!f_pepind_to_psminds.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  pepind_to_psminds.load(f_pepind_to_psminds);
+  f_pepind_to_psminds.close();
+  fname.str("");
+  
+}
+
+
+void Dataset :: clear_data_pep_training()
+{
+  delete [] psmind_to_features; psmind_to_features = (double*)0;
+}
+
+void Dataset :: load_labels_pep_training()
+{
+
+  ostringstream fname;
+  fname << in_dir << "/summary";
+  ifstream f_summary(fname.str().c_str());
+  if(!f_summary.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  f_summary >> num_features;
+  f_summary >> num_psms;
+  f_summary >> num_pos_psms;
+  f_summary >> num_neg_psms;
+  f_summary >> num_pep;
+  f_summary >> num_pos_pep;
+  f_summary >> num_neg_pep;
+  f_summary >> num_prot;
+  f_summary >> num_pos_prot;
+  f_summary >> num_neg_prot;
+  f_summary.close();
+  fname.str("");
+
+  //psmind_to_label
+  fname << in_dir << "/psmind_to_label";
+  ifstream f_psmind_to_label(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_label.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_label = new int[num_psms];
+  f_psmind_to_label.read((char*)psmind_to_label,sizeof(int)*num_psms);
+  f_psmind_to_label.close();
+  fname.str("");
+  
+  //pepind_to_label
+  fname << in_dir << "/pepind_to_label";
+  ifstream f_pepind_to_label(fname.str().c_str(),ios::binary);
+  if(!f_pepind_to_label.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  pepind_to_label = new int[num_pep];
+  f_pepind_to_label.read((char*)pepind_to_label,sizeof(int)*num_pep);
+  f_pepind_to_label.close();
+  fname.str("");
+}
+
+void Dataset :: clear_labels_pep_training()
+{
+  delete [] psmind_to_label; psmind_to_label = (int*)0;
+  delete [] pepind_to_label; pepind_to_label = (int*)0;
+}
+
+void Dataset :: load_data_pep_results()
+{
+
+  ostringstream fname;
+
+  //ind_to_pep
+  fname << in_dir << "/ind_to_pep";
+  ifstream f_ind_to_pep(fname.str().c_str(),ios::binary);
+  int ind;
+  string pep;
+  f_ind_to_pep >> ind;
+  f_ind_to_pep >> pep;
+  while(!f_ind_to_pep.eof()){
+      ind_to_pep[ind] = pep;
+      f_ind_to_pep >> ind;
+      f_ind_to_pep >> pep;
+  }
+  f_ind_to_pep.close();
+  fname.str("");
+
+  //pepind_to_protinds
+  fname << in_dir << "/pepind_to_protinds";
+  ifstream f_pepind_to_protinds(fname.str().c_str(),ios::binary);
+  if(!f_pepind_to_protinds.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  pepind_to_protinds.load(f_pepind_to_protinds);
+  f_pepind_to_protinds.close();
+  fname.str("");
+
+  //ind_to_prot
+  fname << in_dir << "/ind_to_prot";
+  ifstream f_ind_to_prot(fname.str().c_str(),ios::binary);
+ 
+  string prot;
+  f_ind_to_prot >> ind;
+  f_ind_to_prot >> prot;
+  while(!f_ind_to_prot.eof()){
+      ind_to_prot[ind] = prot;
+      f_ind_to_prot >> ind;
+      f_ind_to_prot >> prot;
+  }
+  f_ind_to_prot.close();
+  fname.str("");
+
+  //protind_to_length
+  fname << in_dir << "/protind_to_length";
+  ifstream f_protind_to_length(fname.str().c_str(),ios::binary);
+  if(!f_protind_to_length.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  protind_to_length = new int[num_prot];
+  f_protind_to_length.read((char*)protind_to_length,sizeof(int)*num_prot);
+  f_protind_to_length.close();
+  fname.str("");
+
+
+  //protind_to_label
+  fname << in_dir << "/protind_to_label";
+  ifstream f_protind_to_label(fname.str().c_str(),ios::binary);
+  if(!f_protind_to_label.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  protind_to_label = new int[num_prot];
+  f_protind_to_label.read((char*)protind_to_label,sizeof(int)*num_prot);
+  f_protind_to_label.close();
+  fname.str("");
+
+
+
+  //psm data
+
+  //psmind_to_pepind
+  fname << in_dir << "/psmind_to_pepind";
+  ifstream f_psmind_to_pepind(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_pepind.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_pepind = new int[num_psms];
+  f_psmind_to_pepind.read((char*)psmind_to_pepind,sizeof(int)*num_psms);
+  f_psmind_to_pepind.close();
+  fname.str("");
+  
+  //psmind_to_scan
+  fname << in_dir << "/psmind_to_scan";
+  ifstream f_psmind_to_scan(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_scan.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_scan = new int[num_psms];
+  f_psmind_to_scan.read((char*)psmind_to_scan,sizeof(int)*num_psms);
+  f_psmind_to_scan.close();
+  fname.str("");
+
+  //psmind_to_charge
+  fname << in_dir << "/psmind_to_charge";
+  ifstream f_psmind_to_charge(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_charge.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_charge = new int[num_psms];
+  f_psmind_to_charge.read((char*)psmind_to_charge,sizeof(int)*num_psms);
+  f_psmind_to_charge.close();
+  fname.str("");
+
+  //psmind_to_xcorr
+  fname << in_dir << "/psmind_to_xcorr";
+  ifstream f_psmind_to_xcorr(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_xcorr.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_xcorr = new double[num_psms];
+  f_psmind_to_xcorr.read((char*)psmind_to_xcorr,sizeof(double)*num_psms);
+  f_psmind_to_xcorr.close();
+  fname.str("");
+
+  //psmind_to_deltaCn
+  fname << in_dir << "/psmind_to_deltaCn";
+  ifstream f_psmind_to_deltaCn(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_deltaCn.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_deltaCn = new double[num_psms];
+  f_psmind_to_deltaCn.read((char*)psmind_to_deltaCn,sizeof(double)*num_psms);
+  f_psmind_to_deltaCn.close();
+  fname.str("");
+  
+  //psmind_to_sp_score
+  fname << in_dir << "/psmind_to_spscore";
+  ifstream f_psmind_to_spscore(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_spscore.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_spscore = new double[num_psms];
+  f_psmind_to_spscore.read((char*)psmind_to_spscore,sizeof(double)*num_psms);
+  f_psmind_to_spscore.close();
+  fname.str("");
+
+  //psmind_to_calculated_mass
+  fname << in_dir << "/psmind_to_calculated_mass";
+  ifstream f_psmind_to_calculated_mass(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_calculated_mass.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_calculated_mass = new double[num_psms];
+  f_psmind_to_calculated_mass.read((char*)psmind_to_calculated_mass,sizeof(double)*num_psms);
+  f_psmind_to_calculated_mass.close();
+  fname.str("");
+
+  //psmind_to_precursor_mass
+  fname << in_dir << "/psmind_to_precursor_mass";
+  ifstream f_psmind_to_precursor_mass(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_precursor_mass.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_precursor_mass = new double[num_psms];
+  f_psmind_to_precursor_mass.read((char*)psmind_to_precursor_mass,sizeof(double)*num_psms);
+  f_psmind_to_precursor_mass.close();
+  fname.str("");
+  
+  //fileind_to_fname
+  fname << in_dir << "/fileind_to_fname";
+  ifstream f_fileind_to_fname(fname.str().c_str(),ios::binary);
+  if(!f_fileind_to_fname.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+
+  string filename;
+  f_fileind_to_fname >> ind;
+  f_fileind_to_fname >> filename;
+  while(!f_fileind_to_fname.eof()){
+      fileind_to_fname[ind] = filename;
+      f_fileind_to_fname >> ind;
+      f_fileind_to_fname >> filename;
+    }
+  f_fileind_to_fname.close();
+  fname.str("");
+  
+  //psmind_to_filename
+  fname << in_dir << "/psmind_to_fileind";
+  ifstream f_psmind_to_fileind(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_fileind.is_open())
+    {
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_fileind = new int[num_psms];
+  f_psmind_to_fileind.read((char*)psmind_to_fileind,sizeof(int)*num_psms);
+  f_psmind_to_fileind.close();
+  fname.str("");
+
+  //psmind_to_sp_rank
+  fname << in_dir << "/psmind_to_sp_rank";
+  ifstream f_psmind_to_sp_rank(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_sp_rank.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+    }
+  psmind_to_sp_rank = new int[num_psms];
+  f_psmind_to_sp_rank.read((char*)psmind_to_sp_rank,sizeof(int)*num_psms);
+  f_psmind_to_sp_rank.close();
+  fname.str("");
+  
+  //psmind_to_xcorr_rank
+  fname << in_dir << "/psmind_to_xcorr_rank";
+  ifstream f_psmind_to_xcorr_rank(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_xcorr_rank.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_xcorr_rank = new int[num_psms];
+  f_psmind_to_xcorr_rank.read((char*)psmind_to_xcorr_rank,sizeof(int)*num_psms);
+  f_psmind_to_xcorr_rank.close();
+  fname.str("");
+    
+  //psmind_to_match_spectrum
+  fname << in_dir << "/psmind_to_matches_spectrum";
+  ifstream f_psmind_to_matches_spectrum(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_matches_spectrum.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_matches_spectrum = new int[num_psms];
+  f_psmind_to_matches_spectrum.read((char*)psmind_to_matches_spectrum,sizeof(int)*num_psms);
+  f_psmind_to_matches_spectrum.close();
+  fname.str("");
+   
+  //psmind_to_by_ions_matched
+  fname << in_dir << "/psmind_to_by_ions_matched";
+  ifstream f_psmind_to_by_ions_matched(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_by_ions_matched.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_by_ions_matched = new double[num_psms];
+  f_psmind_to_by_ions_matched.read((char*)psmind_to_by_ions_matched,sizeof(double)*num_psms);
+  f_psmind_to_by_ions_matched.close();
+  fname.str("");
+ 
+  //psmind_to_by_ions_total
+  fname << in_dir << "/psmind_to_by_ions_total";
+  ifstream f_psmind_to_by_ions_total(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_by_ions_total.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_by_ions_total = new double[num_psms];
+  f_psmind_to_by_ions_total.read((char*)psmind_to_by_ions_total,sizeof(double)*num_psms);
+  f_psmind_to_by_ions_total.close();
+  fname.str("");
+  
+  //psmind_to_peptide_position
+  fname << in_dir << "/psmind_to_peptide_position";
+  ifstream f_psmind_to_peptide_position(fname.str().c_str(),ios::binary);
+  if(!f_psmind_to_peptide_position.is_open()){
+      cout << "could not open file " << fname.str() <<  " for reading data\n";
+      return;
+  }
+  psmind_to_peptide_position = new int[num_psms];
+  f_psmind_to_peptide_position.read((char*)psmind_to_peptide_position,sizeof(int)*num_psms);
+  f_psmind_to_peptide_position.close();
+  fname.str("");
+}
+
+void Dataset :: clear_data_pep_results()
+{
+  clear_data_psm_results();
+}
+
+
+
+/*
+ * Local Variable 
+ * mode: c
+ * c-basic-offset: 2
+ * End: 
+ */
+
+/*
+int main()
+{
+  Dataset* d = new Dataset();
+  
+  d->set_input_dir("yeast");
+  d->load_prot_data();
+  //d->normalize_psms();
+  return 0;
+}
+*/
diff --git a/src/app/qranker-barista/DataSetCrux.h b/src/app/qranker-barista/DataSetCrux.h
new file mode 100644
index 0000000..2ffa9d8
--- /dev/null
+++ b/src/app/qranker-barista/DataSetCrux.h
@@ -0,0 +1,141 @@
+#ifndef DATASET_H_
+#define DATASET_H_
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <assert.h>
+#include <cmath>
+#include <map>
+#include "BipartiteGraph.h"
+using namespace std;
+
+
+
+class Dataset
+{
+ public:
+
+  Dataset();
+  ~Dataset();
+  
+  void load_data_psm_training();
+  void clear_data_psm_training();
+  void load_labels_psm_training();
+  void clear_labels_psm_training();
+  void load_data_psm_results();
+  void clear_data_psm_results();
+
+  void load_data_prot_training();
+  void clear_data_prot_training();
+  void load_labels_prot_training();
+  void clear_labels_prot_training();
+  void load_data_all_results();
+  void clear_data_all_results();
+  void load_data_pep_training();
+  void clear_data_pep_training();
+  void load_labels_pep_training();
+  void clear_labels_pep_training();
+  void load_data_pep_results();
+  void clear_data_pep_results();
+
+  inline void set_input_dir(string input_dir){in_dir = input_dir;}
+  void normalize_psms();
+  int print_features(string &filename);
+  
+  inline double* psmind2features(int psmind){return (psmind_to_features+num_features*psmind);}
+  inline int psmind2label(int psmind){return psmind_to_label[psmind];}
+  inline int psmind2scan(int psmind){return psmind_to_scan[psmind];}
+  inline int psmind2charge(int psmind){return psmind_to_charge[psmind];}
+  inline int psmind2pepind(int psmind){return psmind_to_pepind[psmind];}
+  inline double psmind2precursor_mass(int psmind){return psmind_to_precursor_mass[psmind];}
+  inline double psmind2xcorr(int psmind){return psmind_to_xcorr[psmind];}
+  inline double psmind2spscore(int psmind){return psmind_to_spscore[psmind];}
+  inline double psmind2deltaCn(int psmind){return psmind_to_deltaCn[psmind];}
+  inline double psmind2peptide_mass(int psmind){return psmind_to_calculated_mass[psmind];}
+  string& psmind2fname(int psmind);
+  inline string& ind2pep(int ind){return ind_to_pep[ind];}
+  inline int get_num_psms(){return num_psms;}
+  inline int get_num_features(){return num_features;}
+
+  inline int get_num_peptides(){return num_pep;}
+  inline int pepind2label(int pepind){return pepind_to_label[pepind];}
+  inline int pepind2num_psm(int pepind){return pepind_to_psminds.get_range_length(pepind);}
+  inline int* pepind2psminds(int pepind){return pepind_to_psminds.get_range_indices(pepind);}
+  inline int pepind2num_prot(int pepind){return pepind_to_protinds.get_range_length(pepind);}
+  inline int* pepind2protinds(int pepind){return pepind_to_protinds.get_range_indices(pepind);}
+
+  inline int get_num_proteins(){return num_prot;}
+  inline string& ind2prot(int ind){return ind_to_prot[ind];}
+  inline int protind2label(int protind){return protind_to_label[protind];}
+  inline int protind2num_pep(int protind){return protind_to_pepinds.get_range_length(protind);}
+  inline int* protind2pepinds(int protind){return protind_to_pepinds.get_range_indices(protind);}
+  inline int protind2num_all_pep(int protind){return protind_to_num_all_pep[protind];}
+  inline int protind2length(int protind){return protind_to_length[protind];}
+  //returns false if not subset, true if yes, subset
+  inline bool is_prot_subset(int protind1, int protind2){return protind_to_pepinds.is_subset(protind1, protind2);} 
+  inline int psmind2sp_rank(int psmind){return psmind_to_sp_rank[psmind];}//Sp rank 
+  inline int psmind2xcorr_rank(int psmind){return psmind_to_xcorr_rank[psmind];}//xcorr rank
+  inline double psmind2by_ions_matched(int psmind){return psmind_to_by_ions_matched[psmind];}//b/y ions matched 
+  inline double psmind2by_ions_total(int psmind){return psmind_to_by_ions_total[psmind];}//b/y ions total 
+  inline int psmind2matches_spectrum(int psmind) {
+    return psmind_to_matches_spectrum[psmind];
+  }// Distinct matchs/spectrum
+  inline int psmind2peptide_position(int psmind){return psmind_to_peptide_position[psmind];}///<peptide position in protein 
+  
+  inline void get_features_header(vector<string> str){features_header_.swap(str);}
+
+
+ protected:
+  int num_psms;
+  int num_pos_psms;
+  int num_neg_psms;
+  int num_features;
+  double* psmind_to_features;
+  int* psmind_to_label;
+  int *psmind_to_pepind;
+  int *psmind_to_scan;
+  int *psmind_to_charge;
+  double *psmind_to_xcorr;
+  double *psmind_to_spscore;
+  double *psmind_to_deltaCn;
+  double *psmind_to_calculated_mass;
+  double *psmind_to_precursor_mass;
+  int *psmind_to_fileind;
+  int num_pep;
+  int num_pos_pep;
+  int num_neg_pep;
+  int *pepind_to_label;
+  int num_prot;
+  int num_pos_prot;
+  int num_neg_prot;
+  int *protind_to_label;
+  int *protind_to_num_all_pep;
+  int* psmind_to_sp_rank;//Sp rank 
+  int *protind_to_length;
+  int* psmind_to_xcorr_rank;//xcorr rank 
+  int *psmind_to_matches_spectrum; // distinct matches/spectrum
+  double* psmind_to_by_ions_matched; //b/y ions matched
+  double* psmind_to_by_ions_total; //b/y ions total
+  int*  psmind_to_peptide_position;//<pepetide position in protein 
+
+  map <int, string> fileind_to_fname;
+ 
+  vector <string> features_header_;
+  
+  BipartiteGraph pepind_to_psminds;
+  BipartiteGraph pepind_to_protinds;
+  map <int, string> ind_to_pep;
+  
+
+ 
+  
+  BipartiteGraph protind_to_pepinds;
+ 
+  map <int, string> ind_to_prot;
+
+  string in_dir;
+};
+
+
+
+#endif /*DATASET_H */
diff --git a/src/app/qranker-barista/Makefile b/src/app/qranker-barista/Makefile
new file mode 100644
index 0000000..732ca0d
--- /dev/null
+++ b/src/app/qranker-barista/Makefile
@@ -0,0 +1,558 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 2.8
+
+# Default target executed when no arguments are given to make.
+default_target: all
+.PHONY : default_target
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+# A target that is always out of date.
+cmake_force:
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake
+
+# The command to remove a file.
+RM = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The program to use to edit the cache.
+CMAKE_EDIT_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target edit_cache
+edit_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+.PHONY : edit_cache/fast
+
+# Special rule for the target install
+install: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install
+
+# Special rule for the target install
+install/fast: preinstall/fast
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install/fast
+
+# Special rule for the target install/local
+install/local: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local
+
+# Special rule for the target install/local
+install/local/fast: install/local
+.PHONY : install/local/fast
+
+# Special rule for the target install/strip
+install/strip: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip
+
+# Special rule for the target install/strip
+install/strip/fast: install/strip
+.PHONY : install/strip/fast
+
+# Special rule for the target list_install_components
+list_install_components:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
+.PHONY : list_install_components
+
+# Special rule for the target list_install_components
+list_install_components/fast: list_install_components
+.PHONY : list_install_components/fast
+
+# Special rule for the target package
+package: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackConfig.cmake
+.PHONY : package
+
+# Special rule for the target package
+package/fast: package
+.PHONY : package/fast
+
+# Special rule for the target package_source
+package_source:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool for source..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackSourceConfig.cmake /data/TeamCity/buildAgent/work/779d99b0241b2175/CPackSourceConfig.cmake
+.PHONY : package_source
+
+# Special rule for the target package_source
+package_source/fast: package_source
+.PHONY : package_source/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+.PHONY : rebuild_cache/fast
+
+# The main all target
+all: cmake_check_build_system
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles /data/TeamCity/buildAgent/work/779d99b0241b2175/src/app/qranker-barista/CMakeFiles/progress.marks
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/qranker-barista/all
+	$(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/qranker-barista/clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/qranker-barista/preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/qranker-barista/preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+.PHONY : depend
+
+# Convenience name for target.
+src/app/qranker-barista/CMakeFiles/barista.dir/rule:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/qranker-barista/CMakeFiles/barista.dir/rule
+.PHONY : src/app/qranker-barista/CMakeFiles/barista.dir/rule
+
+# Convenience name for target.
+barista: src/app/qranker-barista/CMakeFiles/barista.dir/rule
+.PHONY : barista
+
+# fast build rule for target.
+barista/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/build
+.PHONY : barista/fast
+
+Barista.o: Barista.cpp.o
+.PHONY : Barista.o
+
+# target to build an object file
+Barista.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/Barista.cpp.o
+.PHONY : Barista.cpp.o
+
+Barista.i: Barista.cpp.i
+.PHONY : Barista.i
+
+# target to preprocess a source file
+Barista.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/Barista.cpp.i
+.PHONY : Barista.cpp.i
+
+Barista.s: Barista.cpp.s
+.PHONY : Barista.s
+
+# target to generate assembly for a file
+Barista.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/Barista.cpp.s
+.PHONY : Barista.cpp.s
+
+BipartiteGraph.o: BipartiteGraph.cpp.o
+.PHONY : BipartiteGraph.o
+
+# target to build an object file
+BipartiteGraph.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/BipartiteGraph.cpp.o
+.PHONY : BipartiteGraph.cpp.o
+
+BipartiteGraph.i: BipartiteGraph.cpp.i
+.PHONY : BipartiteGraph.i
+
+# target to preprocess a source file
+BipartiteGraph.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/BipartiteGraph.cpp.i
+.PHONY : BipartiteGraph.cpp.i
+
+BipartiteGraph.s: BipartiteGraph.cpp.s
+.PHONY : BipartiteGraph.s
+
+# target to generate assembly for a file
+BipartiteGraph.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/BipartiteGraph.cpp.s
+.PHONY : BipartiteGraph.cpp.s
+
+CruxParser.o: CruxParser.cpp.o
+.PHONY : CruxParser.o
+
+# target to build an object file
+CruxParser.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/CruxParser.cpp.o
+.PHONY : CruxParser.cpp.o
+
+CruxParser.i: CruxParser.cpp.i
+.PHONY : CruxParser.i
+
+# target to preprocess a source file
+CruxParser.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/CruxParser.cpp.i
+.PHONY : CruxParser.cpp.i
+
+CruxParser.s: CruxParser.cpp.s
+.PHONY : CruxParser.s
+
+# target to generate assembly for a file
+CruxParser.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/CruxParser.cpp.s
+.PHONY : CruxParser.cpp.s
+
+DataSetCrux.o: DataSetCrux.cpp.o
+.PHONY : DataSetCrux.o
+
+# target to build an object file
+DataSetCrux.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/DataSetCrux.cpp.o
+.PHONY : DataSetCrux.cpp.o
+
+DataSetCrux.i: DataSetCrux.cpp.i
+.PHONY : DataSetCrux.i
+
+# target to preprocess a source file
+DataSetCrux.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/DataSetCrux.cpp.i
+.PHONY : DataSetCrux.cpp.i
+
+DataSetCrux.s: DataSetCrux.cpp.s
+.PHONY : DataSetCrux.s
+
+# target to generate assembly for a file
+DataSetCrux.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/DataSetCrux.cpp.s
+.PHONY : DataSetCrux.cpp.s
+
+NeuralNet.o: NeuralNet.cpp.o
+.PHONY : NeuralNet.o
+
+# target to build an object file
+NeuralNet.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/NeuralNet.cpp.o
+.PHONY : NeuralNet.cpp.o
+
+NeuralNet.i: NeuralNet.cpp.i
+.PHONY : NeuralNet.i
+
+# target to preprocess a source file
+NeuralNet.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/NeuralNet.cpp.i
+.PHONY : NeuralNet.cpp.i
+
+NeuralNet.s: NeuralNet.cpp.s
+.PHONY : NeuralNet.s
+
+# target to generate assembly for a file
+NeuralNet.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/NeuralNet.cpp.s
+.PHONY : NeuralNet.cpp.s
+
+PSMScores.o: PSMScores.cpp.o
+.PHONY : PSMScores.o
+
+# target to build an object file
+PSMScores.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/PSMScores.cpp.o
+.PHONY : PSMScores.cpp.o
+
+PSMScores.i: PSMScores.cpp.i
+.PHONY : PSMScores.i
+
+# target to preprocess a source file
+PSMScores.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/PSMScores.cpp.i
+.PHONY : PSMScores.cpp.i
+
+PSMScores.s: PSMScores.cpp.s
+.PHONY : PSMScores.s
+
+# target to generate assembly for a file
+PSMScores.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/PSMScores.cpp.s
+.PHONY : PSMScores.cpp.s
+
+PepRanker.o: PepRanker.cpp.o
+.PHONY : PepRanker.o
+
+# target to build an object file
+PepRanker.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/PepRanker.cpp.o
+.PHONY : PepRanker.cpp.o
+
+PepRanker.i: PepRanker.cpp.i
+.PHONY : PepRanker.i
+
+# target to preprocess a source file
+PepRanker.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/PepRanker.cpp.i
+.PHONY : PepRanker.cpp.i
+
+PepRanker.s: PepRanker.cpp.s
+.PHONY : PepRanker.s
+
+# target to generate assembly for a file
+PepRanker.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/PepRanker.cpp.s
+.PHONY : PepRanker.cpp.s
+
+PepScores.o: PepScores.cpp.o
+.PHONY : PepScores.o
+
+# target to build an object file
+PepScores.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/PepScores.cpp.o
+.PHONY : PepScores.cpp.o
+
+PepScores.i: PepScores.cpp.i
+.PHONY : PepScores.i
+
+# target to preprocess a source file
+PepScores.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/PepScores.cpp.i
+.PHONY : PepScores.cpp.i
+
+PepScores.s: PepScores.cpp.s
+.PHONY : PepScores.s
+
+# target to generate assembly for a file
+PepScores.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/PepScores.cpp.s
+.PHONY : PepScores.cpp.s
+
+ProtScores.o: ProtScores.cpp.o
+.PHONY : ProtScores.o
+
+# target to build an object file
+ProtScores.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/ProtScores.cpp.o
+.PHONY : ProtScores.cpp.o
+
+ProtScores.i: ProtScores.cpp.i
+.PHONY : ProtScores.i
+
+# target to preprocess a source file
+ProtScores.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/ProtScores.cpp.i
+.PHONY : ProtScores.cpp.i
+
+ProtScores.s: ProtScores.cpp.s
+.PHONY : ProtScores.s
+
+# target to generate assembly for a file
+ProtScores.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/ProtScores.cpp.s
+.PHONY : ProtScores.cpp.s
+
+QRanker.o: QRanker.cpp.o
+.PHONY : QRanker.o
+
+# target to build an object file
+QRanker.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/QRanker.cpp.o
+.PHONY : QRanker.cpp.o
+
+QRanker.i: QRanker.cpp.i
+.PHONY : QRanker.i
+
+# target to preprocess a source file
+QRanker.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/QRanker.cpp.i
+.PHONY : QRanker.cpp.i
+
+QRanker.s: QRanker.cpp.s
+.PHONY : QRanker.s
+
+# target to generate assembly for a file
+QRanker.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/QRanker.cpp.s
+.PHONY : QRanker.cpp.s
+
+SQTParser.o: SQTParser.cpp.o
+.PHONY : SQTParser.o
+
+# target to build an object file
+SQTParser.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/SQTParser.cpp.o
+.PHONY : SQTParser.cpp.o
+
+SQTParser.i: SQTParser.cpp.i
+.PHONY : SQTParser.i
+
+# target to preprocess a source file
+SQTParser.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/SQTParser.cpp.i
+.PHONY : SQTParser.cpp.i
+
+SQTParser.s: SQTParser.cpp.s
+.PHONY : SQTParser.s
+
+# target to generate assembly for a file
+SQTParser.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/SQTParser.cpp.s
+.PHONY : SQTParser.cpp.s
+
+SpecFeatures.o: SpecFeatures.cpp.o
+.PHONY : SpecFeatures.o
+
+# target to build an object file
+SpecFeatures.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/SpecFeatures.cpp.o
+.PHONY : SpecFeatures.cpp.o
+
+SpecFeatures.i: SpecFeatures.cpp.i
+.PHONY : SpecFeatures.i
+
+# target to preprocess a source file
+SpecFeatures.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/SpecFeatures.cpp.i
+.PHONY : SpecFeatures.cpp.i
+
+SpecFeatures.s: SpecFeatures.cpp.s
+.PHONY : SpecFeatures.s
+
+# target to generate assembly for a file
+SpecFeatures.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/SpecFeatures.cpp.s
+.PHONY : SpecFeatures.cpp.s
+
+TabDelimParser.o: TabDelimParser.cpp.o
+.PHONY : TabDelimParser.o
+
+# target to build an object file
+TabDelimParser.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/TabDelimParser.cpp.o
+.PHONY : TabDelimParser.cpp.o
+
+TabDelimParser.i: TabDelimParser.cpp.i
+.PHONY : TabDelimParser.i
+
+# target to preprocess a source file
+TabDelimParser.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/TabDelimParser.cpp.i
+.PHONY : TabDelimParser.cpp.i
+
+TabDelimParser.s: TabDelimParser.cpp.s
+.PHONY : TabDelimParser.s
+
+# target to generate assembly for a file
+TabDelimParser.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/qranker-barista/CMakeFiles/barista.dir/build.make src/app/qranker-barista/CMakeFiles/barista.dir/TabDelimParser.cpp.s
+.PHONY : TabDelimParser.cpp.s
+
+# Help Target
+help:
+	@echo "The following are some of the valid targets for this Makefile:"
+	@echo "... all (the default if no target is provided)"
+	@echo "... clean"
+	@echo "... depend"
+	@echo "... barista"
+	@echo "... edit_cache"
+	@echo "... install"
+	@echo "... install/local"
+	@echo "... install/strip"
+	@echo "... list_install_components"
+	@echo "... package"
+	@echo "... package_source"
+	@echo "... rebuild_cache"
+	@echo "... Barista.o"
+	@echo "... Barista.i"
+	@echo "... Barista.s"
+	@echo "... BipartiteGraph.o"
+	@echo "... BipartiteGraph.i"
+	@echo "... BipartiteGraph.s"
+	@echo "... CruxParser.o"
+	@echo "... CruxParser.i"
+	@echo "... CruxParser.s"
+	@echo "... DataSetCrux.o"
+	@echo "... DataSetCrux.i"
+	@echo "... DataSetCrux.s"
+	@echo "... NeuralNet.o"
+	@echo "... NeuralNet.i"
+	@echo "... NeuralNet.s"
+	@echo "... PSMScores.o"
+	@echo "... PSMScores.i"
+	@echo "... PSMScores.s"
+	@echo "... PepRanker.o"
+	@echo "... PepRanker.i"
+	@echo "... PepRanker.s"
+	@echo "... PepScores.o"
+	@echo "... PepScores.i"
+	@echo "... PepScores.s"
+	@echo "... ProtScores.o"
+	@echo "... ProtScores.i"
+	@echo "... ProtScores.s"
+	@echo "... QRanker.o"
+	@echo "... QRanker.i"
+	@echo "... QRanker.s"
+	@echo "... SQTParser.o"
+	@echo "... SQTParser.i"
+	@echo "... SQTParser.s"
+	@echo "... SpecFeatures.o"
+	@echo "... SpecFeatures.i"
+	@echo "... SpecFeatures.s"
+	@echo "... TabDelimParser.o"
+	@echo "... TabDelimParser.i"
+	@echo "... TabDelimParser.s"
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/src/app/qranker-barista/NeuralNet.cpp b/src/app/qranker-barista/NeuralNet.cpp
new file mode 100644
index 0000000..b92ee3e
--- /dev/null
+++ b/src/app/qranker-barista/NeuralNet.cpp
@@ -0,0 +1,809 @@
+#include "NeuralNet.h"
+#include "util/utils.h"
+
+/*****************Sigmoid**********************/
+
+void Sigmoid :: resize(int m)
+{
+  num_neurons = m;
+}
+ 
+
+Sigmoid& Sigmoid :: operator=(Sigmoid &S)
+{
+  num_neurons = S.num_neurons;
+  return *this;
+}
+
+void Sigmoid :: clone(Sigmoid &S)
+{
+  num_neurons = S.num_neurons;
+}
+
+void Sigmoid :: fprop(State& down, State &up)
+{
+  for(int k = 0; k < num_neurons; k++)
+      up.x[k] = 1.0/(1.0+exp(-down.x[k]));
+}
+ 
+void Sigmoid :: bprop(State &down, State &up)
+{
+  for(int k = 0; k < num_neurons; k++)
+    down.dx[k] = up.dx[k]*(1.0-up.x[k])*up.x[k];
+}
+
+
+/******************** Linear*************************/
+void Linear :: make_random()
+{
+  if(num_neurons > 0 && num_features > 0)
+    {
+      for(int k = 0; k < num_neurons; k++)
+	{
+	  for(int j = 0; j < num_features; j++)
+	    w[k*num_features+j] = ((double)myrandom()/UNIFORM_INT_DISTRIBUTION_MAX - 0.5)/(num_features*num_neurons);
+	  if(has_bias)
+	    bias[k] = ((double)myrandom()/UNIFORM_INT_DISTRIBUTION_MAX - 0.5)/(num_features*num_neurons);;
+	}
+    }
+}
+
+void Linear :: resize(int m, int n, int has_b)
+{
+  if(num_neurons != m || num_features != n)
+    {
+      clear();
+      num_neurons = m;
+      num_features = n;
+      has_bias = has_b;
+      w = new double[num_neurons*num_features];
+      bias = new double[num_neurons];
+      dw = new double[num_neurons*num_features];
+      dbias = new double[num_neurons];
+      num_refs = new int[1];
+      num_refs[0] = 1;
+  }
+  for(int k = 0; k < num_neurons; k++)
+    {
+      for(int j = 0; j < num_features; j++)
+	w[k*num_features+j] = ((double)myrandom()/UNIFORM_INT_DISTRIBUTION_MAX - 0.5)/(num_features*num_neurons);
+      if(has_bias)
+	bias[k] = ((double)myrandom()/UNIFORM_INT_DISTRIBUTION_MAX - 0.5)/(num_features*num_neurons);;
+    }
+  memset(dw,0,sizeof(double)*num_neurons*num_features);
+  if(has_bias)
+    memset(dbias, 0, sizeof(double)*num_neurons);
+  
+}
+
+
+void Linear :: clear()
+{
+  if(num_refs)
+    {
+      num_refs[0]--;
+      if(num_refs[0] < 1)
+	{
+	  delete[] w; w = 0;
+	  delete[] bias; bias = 0;
+	  delete[] dw; dw = 0;
+	  delete[] dbias; dbias = 0;
+	  delete[] num_refs; num_refs = 0;
+	  num_neurons = 0;
+	  num_features = 0;
+	}
+    }
+}
+
+Linear& Linear :: operator=(Linear &L)
+{
+  resize(L.num_neurons, L.num_features, L.has_bias);
+  for(int k = 0; k < num_neurons; k++)
+    {
+      for(int j = 0; j < num_features; j++)
+	w[k*num_features+j] = L.w[k*num_features+j];
+      if(has_bias)
+	bias[k] = L.bias[k];
+    }
+  return *this;
+}
+
+void Linear :: copy(Linear &L)
+{
+  assert(L.num_neurons == num_neurons);
+  assert(L.num_features == num_features);
+  for(int k = 0; k < num_neurons; k++)
+    {
+      for(int j = 0; j < num_features; j++)
+	w[k*num_features+j] = L.w[k*num_features+j];
+      if(has_bias)
+	bias[k] = L.bias[k];
+    }
+}
+
+
+void Linear :: clone(Linear &L)
+{
+  clear();
+  num_neurons = L.num_neurons;
+  num_features = L.num_features;
+  has_bias = L.has_bias;
+  w = L.w;
+  dw = L.dw;
+  bias = L.bias;
+  dbias = L.dbias;
+  num_refs = L.num_refs;
+  num_refs[0]++;
+}
+
+
+void Linear :: clear_gradients()
+{
+  memset(dw,0,sizeof(double)*num_neurons*num_features);
+  if(has_bias)
+    memset(dbias,0,sizeof(double)*num_neurons);
+}
+
+void Linear :: fprop(State &down, State &up)
+{
+  for(int k = 0; k < num_neurons; k++)
+    {
+      double d = 0.0;
+      for(int j = 0; j < num_features; j++)
+	d += w[k*num_features+j]*down.x[j];
+      //if there is a bias
+      if(has_bias)
+	d += bias[k];
+      up.x[k] = d;
+    }
+}
+
+
+void Linear :: bprop(State &down, State &up)
+{
+  memset(down.dx,0,sizeof(double)*num_features);
+  for(int j = 0; j < num_features; j++)
+    for(int k = 0; k < num_neurons; k++)
+      down.dx[j] += up.dx[k]*w[k*num_features+j];
+ 
+  for(int k = 0; k < num_neurons; k++)
+    {
+      for(int j = 0; j < num_features; j++)
+	dw[k*num_features+j] += up.dx[k]*down.x[j];
+      //if there is a bias
+      if(has_bias)
+	dbias[k] += up.dx[k];
+    }
+}
+
+void Linear :: update(double mu, double weight_decay)
+{
+  for(int k = 0; k < num_neurons; k++)
+    {
+      for(int j = 0; j < num_features; j++)
+	{
+	  if(weight_decay > 0.0)
+	    dw[k*num_features+j] += weight_decay*w[k*num_features+j];
+	  w[k*num_features+j] -= mu*dw[k*num_features+j];
+	}
+      //if there is a bias
+      if(has_bias)
+	{
+	  if(weight_decay > 0.0)
+            dbias[k] += weight_decay*bias[k];
+	  bias[k] -= mu*dbias[k];
+	}
+    }
+}
+
+void Linear :: update1(double mu, double weight_decay)
+{
+  for(int k = 0; k < num_neurons; k++)
+    {
+      for(int j = 0; j < num_features; j++)
+	{
+	  if(weight_decay > 0.0)
+	    dw[k*num_features+j] += weight_decay*w[k*num_features+j];
+	  w[k*num_features+j] -= (mu/(num_features*num_neurons))*dw[k*num_features+j];
+	}
+      //if there is a bias
+      if(has_bias)
+	{
+	   if(weight_decay > 0.0)
+            dbias[k] += weight_decay*bias[k];
+	   bias[k] -= (mu/(num_features*num_neurons))*dbias[k];
+	}
+    }
+}
+
+/**************** Neural Net ********************/
+void NeuralNet :: make_random()
+{
+  lin1.make_random();
+  if(!is_linear)
+    lin2.make_random();
+}
+
+void NeuralNet :: resize_states()
+{
+  int num_features = lin1.get_num_features();
+  int num_neurons1 = lin1.get_num_neurons();
+    
+  //first state
+  start.resize_dx(num_features);
+  if(!is_linear)
+    {
+      assert(num_neurons1 == sigm1.get_num_neurons());
+      s1.resize(num_neurons1);
+      assert(num_neurons1 == lin2.get_num_features());
+      s2.resize(num_neurons1);
+    }
+    //last state
+    finish.resize_x(1);
+}
+
+void NeuralNet :: initialize(int nfeatures, int num_hu, int is_lin, int has_bias)
+{
+  is_linear = is_lin;
+  //cout << "initializing net " << nfeatures << " " << num_hu << endl;
+  lin1.resize(num_hu, nfeatures, has_bias);
+  if(!is_linear)
+    {
+      sigm1.resize(num_hu);
+      lin2.resize(1,num_hu, has_bias);
+    }
+  resize_states();
+}
+
+NeuralNet& NeuralNet :: operator=(NeuralNet &N)
+{
+  is_linear = N.is_linear;
+  lin1 = N.lin1;
+  if(!is_linear)
+    {
+      sigm1 = N.sigm1;
+      lin2 = N.lin2;
+    }
+  resize_states();
+  return *this;
+}
+
+void NeuralNet :: copy(NeuralNet &N)
+{
+  assert(is_linear == N.is_linear);
+  lin1.copy(N.lin1);
+  if(!is_linear)
+    {
+      lin2.copy(N.lin2);
+    }
+}
+
+
+void NeuralNet :: clone(NeuralNet &N)
+{
+  is_linear = N.is_linear;
+  lin1.clone(N.lin1);
+  if(!is_linear)
+    {
+      sigm1.clone(N.sigm1);
+      lin2.clone(N.lin2);
+    }
+  resize_states();
+}
+
+
+double* NeuralNet :: fprop(double *x)
+{
+  start.x = x;
+  if(is_linear)
+    lin1.fprop(start,finish);
+  else
+    {
+      lin1.fprop(start,s1);
+      sigm1.fprop(s1,s2);
+      lin2.fprop(s2,finish);
+    }
+  return finish.x;
+
+}
+
+
+void NeuralNet :: clear_gradients()
+{
+  lin1.clear_gradients();
+  if(!is_linear)
+    lin2.clear_gradients();
+}
+
+
+double* NeuralNet :: bprop(double *dx)
+{
+  finish.dx = dx;
+  if(is_linear)
+    lin1.bprop(start,finish);
+  else
+    {
+      lin2.bprop(s2,finish);
+      sigm1.bprop(s1,s2);
+      lin1.bprop(start,s1);
+    }
+    
+  return start.dx;
+}
+
+void NeuralNet :: update(double mu, double weight_decay)
+{
+  lin1.update(mu, weight_decay);
+  if(!is_linear)
+    lin2.update(mu, weight_decay);
+}
+
+void NeuralNet :: update1(double mu, double weight_decay)
+{
+  lin1.update1(mu, weight_decay);
+  if(!is_linear)
+    lin2.update1(mu, weight_decay);
+}
+
+
+double* NeuralNet :: get_weights(int mod)
+{
+  if(mod == 1)
+    return lin1.get_weights();
+  else if(mod == 2)
+    {
+      if(is_linear)
+	{
+	  cout << "neural net was initialized with only 1 layer, layer " << mod << " does not exits" << endl;
+	  return 0;
+	}
+      return lin2.get_weights();
+    }
+  else
+    {
+      if(is_linear)
+	cout << "neural net was initialized with only 1 layer, ";
+      else
+	cout << "neural net was initialized with 2 layers, ";
+      cout << "layer " << mod << "does not exist" << endl;
+      return 0;
+    }
+
+}
+
+double* NeuralNet :: get_dweights(int mod)
+{
+  if(mod == 1)
+    return lin1.get_dweights();
+  else if(mod == 2)
+    {
+      if(is_linear)
+	{
+	  cout << "neural net was initialized with only 1 layer, layer " << mod << " does not exits" << endl;
+	  return 0;
+	}
+      return lin2.get_dweights();
+    }
+  else
+    {
+      if(is_linear)
+	cout << "neural net was initialized with only 1 layer, ";
+      else
+	cout << "neural net was initialized with 2 layers, ";
+      cout << "layer " << mod << "does not exist" << endl;
+      return 0;
+    }
+}
+
+double* NeuralNet :: get_bias(int mod)
+{
+  if(mod == 1)
+    return lin1.get_bias();
+  else if(mod == 2)
+    {
+      if(is_linear)
+	{
+	  cout << "neural net was initialized with only 1 layer, layer " << mod << " does not exits" << endl;
+	  return 0;
+	}
+    return lin2.get_bias();
+    }
+  else
+    {
+      if(is_linear)
+	cout << "neural net was initialized with only 1 layer, ";
+      else
+	cout << "neural net was initialized with 2 layers, ";
+      cout << "layer " << mod << "does not exist" << endl;
+      return 0;
+    }
+}
+
+double* NeuralNet :: get_dbias(int mod)
+{
+  if(mod == 1)
+    return lin1.get_dbias();
+  if(mod == 2)
+    {
+      if(is_linear)
+	{
+	  cout << "neural net was initialized with only 1 layer, layer " << mod << " does not exits" << endl;
+	  return 0;
+	}
+      return lin2.get_dbias();
+    }
+  else
+    {
+      if(is_linear)
+	cout << "neural net was initialized with only 1 layer, ";
+      else
+	cout << "neural net was initialized with 2 layers, ";
+      cout << "layer " << mod << "does not exist" << endl;
+      return 0;
+    }
+}
+
+/********************************************************************/
+
+double check_gradients(NeuralNet &n, double *x)
+{
+  double sum = 0.0;
+  
+  double h = 10e-6;
+    
+  double *c = n.fprop(x);
+  double cbefore = c[0];
+
+  double *gc = new double[1];
+  gc[0] = 1;
+  n.clear_gradients();
+  n.bprop(gc);
+
+  double *w = n.get_weights(1);
+  double *dw = n.get_dweights(1);
+  for (int j = 0; j < n.get_num_hu(); j++)
+    for (int i = 0; i < n.get_num_features(); i++)
+      {
+	int ii = j*n.get_num_features()+i;
+	double ww = w[ii];
+	w[ii] += h;
+	c = n.fprop(x);
+	double d = c[0]-cbefore;
+	sum += fabs(dw[ii]-d/h);
+	w[ii]=ww;
+    }
+    
+  double *bias = n.get_bias(1);
+  double *dbias = n.get_dbias(1);
+  for (int i = 0; i < n.get_num_hu();i++)
+    {
+      double bb = bias[i];
+      bias[i] +=h;
+      c = n.fprop(x);
+      double d = c[0]-cbefore;
+      sum += fabs(dbias[i]-d/h);
+      bias[i] =bb;
+    }
+    
+  if(n.get_num_layers() > 1)
+    {
+      double *w = n.get_weights(2);
+      double *dw = n.get_dweights(2);
+      for (int i = 0; i < n.get_num_hu(); i++)
+	{
+	  double ww = w[i];
+	  w[i] += h;
+	  c = n.fprop(x);
+	  double d = c[0]-cbefore;
+	  sum += fabs(dw[i]-d/h);
+	  w[i]=ww;
+	}
+
+      double *bias = n.get_bias(2);
+      double *dbias = n.get_dbias(2);
+      for (int i = 0; i < 1;i++)
+	{
+	  double bb = bias[i];
+	  bias[i] +=h;
+	  c = n.fprop(x);
+	  double d = c[0]-cbefore;
+	  sum += fabs(dbias[i]-d/h);
+	  bias[i] =bb;
+	}
+    }
+  
+  n.update(0.005);
+  return sum;
+}
+
+double check_gradients_hinge(NeuralNet &n, double *x, int y)
+{
+  double sum = 0.0;
+  
+  double h = 10e-6;
+    
+  double *c = n.fprop(x);
+  double cbefore = 1.0-c[0]*y;
+
+  double *gc = new double[1];
+  gc[0] = -1*y;
+  n.clear_gradients();
+  n.bprop(gc);
+
+  double *w = n.get_weights(1);
+  double *dw = n.get_dweights(1);
+  for (int j = 0; j < n.get_num_hu(); j++)
+    for (int i = 0; i < n.get_num_features(); i++)
+      {
+	int ii = j*n.get_num_features()+i;
+	double ww = w[ii];
+	w[ii] += h;
+	c = n.fprop(x);
+	double d = (1.0-c[0]*y)-cbefore;
+	sum += fabs(dw[ii]-d/h);
+	w[ii]=ww;
+    }
+
+  
+  double *bias = n.get_bias(1);
+  double *dbias = n.get_dbias(1);
+  for (int i = 0; i < n.get_num_hu();i++)
+    {
+      double bb = bias[i];
+      bias[i] +=h;
+      c = n.fprop(x);
+      double d = (1.0-c[0]*y)-cbefore;
+      sum += fabs(dbias[i]-d/h);
+      bias[i] =bb;
+    }
+    
+  if(n.get_num_layers() > 1)
+    {
+      double *w = n.get_weights(2);
+      double *dw = n.get_dweights(2);
+      for (int i = 0; i < n.get_num_hu(); i++)
+	{
+	  double ww = w[i];
+	  w[i] += h;
+	  c = n.fprop(x);
+	  double d = (1.0-c[0]*y)-cbefore;
+	  sum += fabs(dw[i]-d/h);
+	  w[i]=ww;
+	}
+
+      double *bias = n.get_bias(2);
+      double *dbias = n.get_dbias(2);
+      for (int i = 0; i < 1;i++)
+	{
+	  double bb = bias[i];
+	  bias[i] +=h;
+	  c = n.fprop(x);
+	  double d = (1.0-c[0]*y)-cbefore;
+	  sum += fabs(dbias[i]-d/h);
+	  bias[i] =bb;
+	}
+    }
+  
+  //n.update(0.005);
+  return sum;
+}
+
+
+double check_gradients_sigmoid(NeuralNet &n, double *x, int y)
+{
+  double sum = 0.0;
+  
+  double h = 10e-6;
+    
+  double *c = n.fprop(x);
+  double a = exp(y*c[0]);
+  double cbefore = (1/(1+a));
+
+  double *gc = new double[1];
+  gc[0] = -a/((1+a)*(1+a))*y;
+  n.clear_gradients();
+  n.bprop(gc);
+
+  double *w = n.get_weights(1);
+  double *dw = n.get_dweights(1);
+  for (int j = 0; j < n.get_num_hu(); j++)
+    for (int i = 0; i < n.get_num_features(); i++)
+      {
+	int ii = j*n.get_num_features()+i;
+	double ww = w[ii];
+	w[ii] += h;
+	c = n.fprop(x);
+	double aa = exp(y*c[0]);
+	double cafter = (1/(1+aa));
+	double d = cafter-cbefore;
+	sum += fabs(dw[ii]-d/h);
+	w[ii]=ww;
+    }
+
+  
+  double *bias = n.get_bias(1);
+  double *dbias = n.get_dbias(1);
+  for (int i = 0; i < n.get_num_hu();i++)
+    {
+      double bb = bias[i];
+      bias[i] +=h;
+      c = n.fprop(x);
+      double aa = exp(y*c[0]);
+      double cafter = (1/(1+aa));
+      double d = cafter-cbefore;
+      sum += fabs(dbias[i]-d/h);
+      bias[i] =bb;
+    }
+    
+  if(n.get_num_layers() > 1)
+    {
+      double *w = n.get_weights(2);
+      double *dw = n.get_dweights(2);
+      for (int i = 0; i < n.get_num_hu(); i++)
+	{
+	  double ww = w[i];
+	  w[i] += h;
+	  c = n.fprop(x);
+	  double aa = exp(y*c[0]);
+	  double cafter = (1/(1+aa));
+	  double d = cafter-cbefore;
+	  sum += fabs(dw[i]-d/h);
+	  w[i]=ww;
+	}
+
+      double *bias = n.get_bias(2);
+      double *dbias = n.get_dbias(2);
+      for (int i = 0; i < 1;i++)
+	{
+	  double bb = bias[i];
+	  bias[i] +=h;
+	  c = n.fprop(x);
+	  double aa = exp(y*c[0]);
+	  double cafter = (1/(1+aa));
+	  double d = cafter-cbefore;
+	  sum += fabs(dbias[i]-d/h);
+	  bias[i] =bb;
+	}
+    }
+  
+  //n.update();
+  return sum;
+}
+
+
+/*
+void check_gradients_rank(NeuralNet &n, NeuralNet *nets, double *x1, int y1, double *x2, int y2)
+{
+
+  double diff = 0;
+  double h = 0.0001;
+    
+  double *c1 = nets[0].fprop(x1);
+  double *c2 = nets[1].fprop(x2);
+ 
+  double d = c1[0]-c2[0]; 
+  diff -= d;
+
+  double *gc = new double[1];
+  
+  n.clear_gradients();
+  gc[0] = 1.0;
+  nets[0].bprop(gc);
+  gc[0] = -1.0;
+  nets[1].bprop(gc);
+
+  double *w = n.get_weights(1);
+  double *dw = n.get_dweights(1);
+  for (int j = 0; j < n.get_num_hu(); j++)
+    {
+      for (int i = 0; i < n.get_num_features(); i++)
+	{
+	  int ii = j*n.get_num_features()+i;
+	  double ww = w[ii];
+	  w[ii] += h;
+	  c1 = nets[0].fprop(x1);
+	  c2 = nets[1].fprop(x2);
+	  d = c1[0]-c2[0];
+	  
+	  diff += d;
+	  cout << dw[i] << " " << diff/h << " " << dw[i]-diff/h << endl;
+	  w[ii]=w;
+	  diff -= d;
+	}
+    }
+    
+}
+*/
+/******************************************************/
+/*
+int main()
+{
+  int num_features = 17;
+  int num_hu = 5;
+  int has_bias = 1;
+  int is_lin = 0;
+  
+  NeuralNet n;
+  n.initialize(num_features, num_hu, is_lin, has_bias);
+
+  double sm = 0;
+  int nexamples = 10000;
+  
+  for( int k = 0; k < nexamples; k++)
+    {
+      double *x = new double[num_features];
+      for (int i = 0; i < num_features; i++)
+	{
+	  x[i] = (double)rand()/(double)RAND_MAX;
+	}
+      int label = 1;
+      sm += check_gradients_hinge(n, x,label);
+    }
+  cout << sm/(double)nexamples << endl;
+
+  sm = 0;
+  nexamples = 100;
+  for( int k = 0; k < nexamples; k++)
+    {
+      double *x = new double[num_features];
+      for (int i = 0; i < num_features; i++)
+	{
+	  x[i] = (double)rand()/(double)RAND_MAX;
+	}
+      int label = 1;
+      sm += check_gradients_sigmoid(n, x,label);
+    }
+  cout << sm/(double)nexamples << endl;
+
+*/
+
+  /*
+  NeuralNet *nets = new NeuralNet[2];
+  
+  nets[0].clone(n);
+  nets[1].clone(n);
+  
+  double *x1 = new double[num_features];
+  for (int i = 0; i < num_features; i++)
+    {
+      x1[i] = (double)rand()/(double)RAND_MAX;
+    }
+  int label1 = 1;
+  
+  double *x2 = new double[num_features];
+  for (int i = 0; i < num_features; i++)
+    {
+      x2[i] = (double)rand()/(double)RAND_MAX;
+    }
+  int label2 = -1;
+
+  check_gradients_rank(n ,nets, x1, label1, x2, label2);
+  
+  x1 = new double[num_features];
+  for (int i = 0; i < num_features; i++)
+    {
+      x1[i] = (double)rand()/(double)RAND_MAX;
+    }
+  label1 = 1;
+  
+  
+  for (int i = 0; i < num_features; i++)
+    {
+      x2[i] = (double)rand()/(double)RAND_MAX;
+    }
+  label2 = -1;
+
+  check_gradients_rank(n, nets, x1, label1, x2, label2);
+  */
+
+
+
+
+  //double *out = n.fprop(x);
+  //cout << out[0] << endl;
+  //double *gc = new double(1);
+  //gc[0] = -1*(double)label;
+  //n.bprop(gc);
+
+  //}
+
diff --git a/src/app/qranker-barista/NeuralNet.h b/src/app/qranker-barista/NeuralNet.h
new file mode 100644
index 0000000..a3fbec9
--- /dev/null
+++ b/src/app/qranker-barista/NeuralNet.h
@@ -0,0 +1,152 @@
+#ifndef NEURAL_NET_H
+#define NEURAL_NET_H
+
+#include <iostream>
+#include <fstream>
+#include <cstdlib>
+#include <assert.h>
+#include <cstring>
+#include <math.h>
+#include <vector>
+using namespace std;
+
+
+class State
+{
+ public:
+ State() 
+   : len_x(0), 
+   len_dx(0),
+   x((double*)0),  
+   dx((double*)0)  {}
+  inline void resize(int n) {clear(); x = new double[n]; len_x=n; dx = new double[n]; len_dx = n;}
+  inline void resize_dx(int n) {clear(); dx = new double[n]; len_dx = n;}
+  inline void resize_x(int n) {clear(); x = new double[n]; len_x = n;}
+  inline void clear(){if(len_x) delete[] x; if(len_dx) delete[] dx; len_x = 0; len_dx=0;}
+  ~State(){clear();}
+ 
+  int len_x;
+  int len_dx;
+  double *x;
+  double *dx;
+ 
+};
+
+class Sigmoid
+{
+public:
+  Sigmoid():num_neurons(0){}
+  ~Sigmoid() {}
+  void clear(){num_neurons = 0;}
+  void resize(int m);
+  Sigmoid& operator=(Sigmoid &S);
+  void clone(Sigmoid &S);
+
+  inline int get_num_neurons(){return num_neurons;}
+ 
+  void write_to_file(ofstream &outfile);
+  void read_from_file(ifstream &infile);
+ 
+  void fprop(State& down, State &up);
+  void bprop(State &down, State &up);
+   
+ protected:
+  int num_neurons;
+};
+
+
+
+class Linear
+{
+ public:
+ Linear(): 
+   num_neurons(0),
+   num_features(0),
+   has_bias(1),
+   num_refs(0),
+   w(0),
+   bias(0),
+   dw(0),
+   dbias(0) {}
+  ~Linear() {clear();}
+  void init(int m, int n, int has_b);
+  void resize(int m, int n, int has_b);
+  void clear();
+  Linear& operator=(Linear &L);
+  void copy(Linear &L);
+  void clone(Linear &L);
+  void make_random();
+  
+  inline void set_num_features(int nf) {num_features = nf;}
+  inline int get_num_features() const {return num_features;}
+  inline void set_num_neurons(int nr) {num_neurons = nr;}
+  inline int get_num_neurons() const{return num_neurons;}
+   
+  inline double* get_weights() {return w;}
+  inline double* get_dweights() {return dw;}
+  inline double* get_bias() {return bias;}
+  inline double* get_dbias() {return dbias;}
+
+  void write_to_file(ofstream &outfile);
+  void read_from_file(ifstream &infile);
+ 
+  void fprop(State &down, State &up);
+  void bprop(State &down, State &up);
+  void clear_gradients();
+  void update(double mu, double weight_decay=0.0);
+  void update1(double mu, double weight_decay = 0.0);
+  
+ protected:
+  int num_neurons;
+  int num_features;
+  int has_bias;
+
+  int *num_refs;
+  double *w;
+  double *bias;
+  double *dw;
+  double *dbias;
+  
+};
+
+/************************NeuralNet******************************************/
+class NeuralNet {
+ public:
+ NeuralNet():is_linear(0){}
+  ~NeuralNet(){}
+  void clear();
+  void resize_states();
+  void initialize(int nfeatures, int num_hu, int is_lin, int has_bias);
+  NeuralNet& operator=(NeuralNet &N);
+  void clone(NeuralNet &N);
+  void copy(NeuralNet &N);
+  void make_random();
+
+  double* fprop(double *down);
+  void clear_gradients();
+  double* bprop(double *up);
+  void update(double mu, double weight_decay=0.0);
+  void update1(double mu, double weight_decay=0.0);
+
+  double* get_weights(int mod);
+  double* get_dweights(int mod);
+  double* get_bias(int mod);
+  double* get_dbias(int mod);
+  inline int get_num_features(){return lin1.get_num_features();}
+  inline int get_num_hu(){return lin1.get_num_neurons();}
+  inline int get_num_layers(){if (is_linear) return 1; else return 2;}
+
+ protected:
+  int is_linear;
+  
+  State start;
+  Linear lin1;
+  State s1;
+  Sigmoid sigm1;
+  State s2;
+  Linear lin2;
+  State finish;
+};
+
+
+#endif /*NEURAL_NET_H*/
diff --git a/src/app/qranker-barista/PSMScores.cpp b/src/app/qranker-barista/PSMScores.cpp
new file mode 100644
index 0000000..9ad444c
--- /dev/null
+++ b/src/app/qranker-barista/PSMScores.cpp
@@ -0,0 +1,225 @@
+#include <assert.h>
+#include <iostream>
+#include <fstream>
+#include <utility>
+#include <algorithm>
+#include <set>
+#include <vector>
+#include <string>
+#include <math.h>
+using namespace std;
+#include "PSMScores.h"
+#include "util/utils.h"
+
+inline bool operator>(const PSMScoreHolder &one, const PSMScoreHolder &other) 
+    {return (one.score>other.score);}
+
+inline bool operator<(const PSMScoreHolder &one, const PSMScoreHolder &other) 
+    {return (one.score<other.score);}
+
+
+
+PSMScores::PSMScores()
+{
+    factor=1;
+    neg=0;
+    pos=0;
+    posNow=0;
+}
+
+PSMScores::~PSMScores()
+{
+
+}
+
+void PSMScores::clear()
+{
+  scores.clear();
+  pos=neg=posNow = 0;
+}
+
+
+/**
+ * Percentage of target scores that are drawn according to the null.
+ */
+double PSMScores::pi0 = 0.9;
+
+
+/**
+ * Calculate the number of targets that score above a specified FDR.
+ */
+int PSMScores::calcOverFDR(double fdr) {
+  
+  vector<PSMScoreHolder>::iterator it = scores.begin();
+
+  sort(scores.begin(),scores.end());
+  reverse(scores.begin(),scores.end());
+  
+  int positives=0,nulls=0;
+  double efp=0.0,q;
+  posNow = 0;
+  register unsigned int ix=0;
+  for(it=scores.begin();it!=scores.end();it++) {
+    if (it->label!=-1)
+      positives++;
+    if (it->label==-1) {
+      nulls++;
+      efp=pi0*nulls*factor;
+    }
+    if (positives)
+      q=efp/(double)positives;
+    else
+      q=pi0;
+    if (q>pi0)
+      q=pi0;
+    it->q=q;
+    if (fdr>=q)
+      posNow = positives;
+  }
+  for (ix=scores.size();--ix;) {
+    if (scores[ix-1].q > scores[ix].q)
+      scores[ix-1].q = scores[ix].q;  
+  }
+  return posNow;
+}
+
+
+void PSMScores::calcMultiOverFDR(vector<double> &fdr, vector<int> &overFDR) {
+  
+  vector<PSMScoreHolder>::iterator it = scores.begin();
+
+  sort(scores.begin(),scores.end());
+  reverse(scores.begin(),scores.end());
+  
+  int positives=0,nulls=0;
+  double efp=0.0,q;
+  register unsigned int ix=0;
+  
+  for(it=scores.begin();it!=scores.end();it++) {
+    if (it->label==1)
+      positives++;
+    if (it->label==-1) {
+      nulls++;
+      efp=pi0*nulls*factor;
+    }
+    if (positives)
+      q=efp/(double)positives;
+    else
+      q=pi0;
+    it->q=q;
+    if (q>pi0)
+      q=pi0;
+       
+    for(unsigned int ct = 0; ct < fdr.size(); ct++)
+      if (fdr[ct]>=q)
+	overFDR[ct] = positives;
+  }
+  for (ix=scores.size();--ix;) {
+    if (scores[ix-1].q > scores[ix].q)
+      scores[ix-1].q = scores[ix].q;  
+  }
+}
+
+
+
+
+void PSMScores::fillFeaturesSplit(PSMScores& train,PSMScores& test, Dataset& d, double ratio) {
+ 
+  int num_psms = d.get_num_psms();
+  set<string> peptides_train;
+  set<string> peptides_test;
+
+  assert(ratio>0 && ratio < 1);
+  int n = num_psms;
+  int k = (int)(n*ratio);
+  int l = n-k;
+ 
+  PSMScoreHolder s;
+  
+  //collect everybody 
+  vector<PSMScoreHolder> all_examples;
+  all_examples.resize(n,s);
+  for (int i = 0; i < num_psms; i++)
+    {
+      all_examples[i].psmind = i;
+      all_examples[i].label = d.psmind2label(i);
+    }
+  
+  //mix up the examples
+  for(int i = 0; i < n; i++)
+    {
+      int p1 = (int)((double)myrandom()/UNIFORM_INT_DISTRIBUTION_MAX*(n-1)); 
+      int p2 = (int)((double)myrandom()/UNIFORM_INT_DISTRIBUTION_MAX*(n-1)); 
+      s = all_examples[p1];
+      all_examples[p1] = all_examples[p2];
+      all_examples[p2] = s;
+    }
+  
+  train.scores.resize(k,s);
+  test.scores.resize(l,s);
+  
+
+  int num_pos_train = 0;
+  int num_neg_train = 0;
+  int num_pos_test = 0;
+  int num_neg_test = 0;
+  //distribute the normal set between train and test
+  for (int i = 0; i < k; i++)
+    {
+      train.scores[i] = all_examples[i];
+      if (train.scores[i].label == 1)
+	num_pos_train++;
+      else
+	num_neg_train++;
+    }
+  for(int i=0; i < l; i++)
+    {
+      test.scores[i] = all_examples[i+k];
+      if (test.scores[i].label == 1)
+	num_pos_test++;
+      else
+	num_neg_test++;
+    }
+  //cout << num_pos_train << " " << num_neg_train << " " << num_pos_test << " " << num_neg_test << "\n";
+  train.pos=num_pos_train;
+  test.pos=num_pos_test;
+  train.neg=num_neg_train;
+  test.neg=num_neg_test;
+  train.factor = train.pos/(double)train.neg;
+  test.factor = train.pos/(double)train.neg;
+  
+}
+
+
+void PSMScores::fillFeaturesFull(PSMScores& full, Dataset& d) {
+ 
+  int n = d.get_num_psms();
+ 
+  PSMScoreHolder s;
+  full.scores.resize(n,s);
+  int num_pos = 0;
+  int num_neg = 0;
+
+  for (int i = 0; i < n; i++)
+    {
+      full.scores[i].psmind = i;
+      full.scores[i].label = d.psmind2label(i);
+      if (full.scores[i].label == 1)
+	num_pos++;
+      else
+	num_neg++;
+  }
+  
+  full.pos=num_pos;
+  full.neg=num_neg;
+  full.factor = full.pos/(double)full.neg;
+}
+
+
+
+
+
+
+
+
+
diff --git a/src/app/qranker-barista/PSMScores.h b/src/app/qranker-barista/PSMScores.h
new file mode 100644
index 0000000..46bdf2f
--- /dev/null
+++ b/src/app/qranker-barista/PSMScores.h
@@ -0,0 +1,44 @@
+#ifndef PSMSCORES_H_
+#define PSMSCORES_H_
+#include <vector>
+#include <algorithm>
+using namespace std;
+#include "DataSetCrux.h"
+
+
+class PSMScoreHolder{
+public:
+  double score; 
+  int psmind;
+  double q;
+  double PEP;
+  int label;
+ PSMScoreHolder():score(0.0),psmind(0),q(0.0),PEP(0.0),label(0){;}
+  virtual ~PSMScoreHolder() {;}
+};
+
+class PSMScores
+{
+public:
+    PSMScores();
+    ~PSMScores();
+    void clear();
+    vector<PSMScoreHolder>::iterator begin() {return scores.begin();}
+    vector<PSMScoreHolder>::iterator end() {return scores.end();}    
+    static double pi0;
+    double factor;
+
+    int calcOverFDR(double fdr);
+    void calcMultiOverFDR(vector<double> &fdr, vector<int> &overFDR);
+    inline PSMScoreHolder& operator[](int ix){return scores[ix];}    
+    void static fillFeaturesSplit(PSMScores& train,PSMScores& test,Dataset &d, double ratio);
+    void static fillFeaturesFull(PSMScores& full,Dataset &d);
+    inline int size(){return scores.size();}
+protected:
+    int neg,pos,posNow;
+    vector<PSMScoreHolder> scores;
+};
+
+
+
+#endif /*PSMSCORES_H_*/
diff --git a/src/app/qranker-barista/PepRanker.cpp b/src/app/qranker-barista/PepRanker.cpp
new file mode 100644
index 0000000..d8c78d3
--- /dev/null
+++ b/src/app/qranker-barista/PepRanker.cpp
@@ -0,0 +1,1431 @@
+#include "PepRanker.h"
+#include "util/modifications.h"
+#include "util/Params.h"
+#include "app/ComputeQValues.h"
+
+PepRanker::PepRanker() :  
+  seed(0),
+  selectionfdr(0.01),
+  num_hu(4),
+  mu(0.01),
+  weightDecay(0.000),
+  max_net_gen(NULL),
+  max_net_targ(NULL),
+  net_clones(NULL),
+  psm_count(0),
+  in_dir(""), 
+  out_dir(""), 
+  skip_cleanup_flag(0),
+  overwrite_flag(0),
+  fileroot(""),
+  feature_file_flag(0),
+  file_format_("")
+{
+}
+
+PepRanker::~PepRanker()
+{
+  delete [] max_net_gen;
+  delete [] max_net_targ;
+  delete [] net_clones;
+}
+
+int PepRanker :: getOverFDRPSM(PSMScores &set, NeuralNet &n, double fdr)
+{
+  double *r;
+  double* featVec;
+
+  for(int i = 0; i < set.size(); i++)
+    {
+      featVec = d.psmind2features(set[i].psmind);
+      r = n.fprop(featVec);
+      set[i].score = r[0];
+
+    }
+  return set.calcOverFDR(fdr);
+}
+
+/***********************************************************/
+
+double PepRanker :: get_peptide_score_xcorr(int pepind)
+{
+  int num_psm = d.pepind2num_psm(pepind);
+  int *psminds = d.pepind2psminds(pepind);
+  double max_sc = -100000000.0;
+  int max_ind = 0;
+  for(int i = 0; i < num_psm; i++)
+    {
+      int psmind = psminds[i];
+      double *featVec = d.psmind2features(psmind);
+      double sc = featVec[3];
+      if(max_sc < sc)
+	{
+	  max_sc = sc;
+	  max_ind = i;
+	}
+    }
+  return max_sc;
+}
+
+void PepRanker :: getMultiFDRXCorr(PepScores &set, vector<double> &qvalues)
+{
+  int pepind = 0;
+  for(int i = 0; i < set.size(); i++)
+    {
+      pepind = set[i].pepind;
+      double sc = get_peptide_score_xcorr(pepind);
+      set[i].score = sc;
+    }
+  
+  for(unsigned int ct = 0; ct < qvalues.size(); ct++)
+    overFDRmulti[ct] = 0;
+  set.calcMultiOverFDR(qvalues, overFDRmulti);
+}
+
+
+double PepRanker :: get_peptide_score(int pepind, NeuralNet &n)
+{
+  int num_psm = d.pepind2num_psm(pepind);
+  int *psminds = d.pepind2psminds(pepind);
+  double max_sc = -100000000.0;
+  int max_ind = 0;
+  for(int i = 0; i < num_psm; i++)
+    {
+      int psmind = psminds[i];
+      double *feat = d.psmind2features(psmind);
+      double *sc = n.fprop(feat);
+      if(max_sc < sc[0])
+	{
+	  max_sc = sc[0];
+	  max_ind = i;
+	}
+    }
+  if((int)pepind_to_max_psmind.size() == d.get_num_peptides())
+    pepind_to_max_psmind[pepind] = psminds[max_ind];
+  return max_sc;
+}
+
+
+int PepRanker :: getOverFDR(PepScores &s, NeuralNet &n,double fdr)
+{
+  int pepind = 0;
+  for(int i = 0; i < s.size(); i++)
+    {
+      pepind = s[i].pepind;
+      double sc = get_peptide_score(pepind,n);
+      s[i].score = sc;
+    }
+
+  int overFDR = s.calcOverFDR(fdr);
+
+  return overFDR;
+}
+
+void PepRanker :: getMultiFDR(PepScores &set, NeuralNet &n, vector<double> &qvalues)
+{
+  int pepind = 0;
+  for(int i = 0; i < set.size(); i++)
+    {
+      pepind = set[i].pepind;
+      double sc = get_peptide_score(pepind,n);
+      set[i].score = sc;
+    }
+  
+  for(unsigned int ct = 0; ct < qvalues.size(); ct++)
+    overFDRmulti[ct] = 0;
+  set.calcMultiOverFDR(qvalues, overFDRmulti);
+}
+
+void PepRanker :: write_max_nets(string filename, NeuralNet* max_net)
+{
+  ofstream f1(filename.c_str());
+  f1 << "FDR thresh" << "\t" << "PSMs trn" << "\t" << "PSMs tst" << endl;
+  for(int count = 0; count < num_qvals; count++)
+    {
+      net = max_net[count];
+      int r = getOverFDR(testset,net, qvals[count]);
+      int r1 = getOverFDR(trainset,net, qvals[count]);
+      f1 << qvals[count] << "\t" << r1 << "\t" << r << "\n";
+      
+      double qn;
+      if(qvals[count] < 0.01)
+        qn = 0.0012;
+      else
+	qn = 0.005;
+      r = getOverFDR(testset,net, qvals[count]+qn);
+      r1 = getOverFDR(trainset,net, qvals[count]+qn);
+      f1 << qvals[count]+qn << "\t" << r1 << "\t" << r << "\n";
+      
+    }
+  f1.close();
+}
+
+/***************************************************************************/
+
+double PepRanker :: get_protein_score(int pepind)
+{
+  int num_psms = d.pepind2num_psm(pepind);
+  int *psminds = d.pepind2psminds(pepind);
+  double max_sc = -1000000.0;
+  int max_ind = 0;
+  for (int j = 0; j < num_psms; j++)
+    {
+      double *feat = d.psmind2features(psminds[j]);
+      double *sc = net_clones[psm_count].fprop(feat);
+      if(sc[0] > max_sc)
+	{
+	  max_sc = sc[0];
+	  max_ind = j;
+	}
+      psm_count++;
+    }
+  max_psm_inds.push_back(max_ind);
+      
+  return max_sc;
+}
+
+void PepRanker :: calc_gradients(int pepind, int label, int i)
+{
+  double *gc = new double[1];
+  gc[0] = -label;
+  int num_psms = d.pepind2num_psm(pepind);
+  int clone_ind = psm_count+max_psm_inds[i];
+  net_clones[clone_ind].bprop(gc);
+  psm_count += num_psms;
+  delete[] gc;
+}
+
+
+
+void PepRanker :: train_net_ranking(PepScores &set, int interval)
+{
+  double r1;
+  double r2;
+  double diff = 0;
+  int label = 1;
+  double *gc = new double[1];
+
+
+  for(int i = 0; i < set.size(); i++)
+    { 
+      int ind1, ind2;
+      int label_flag = 1;
+      //get the first index
+      if(interval == 0)
+	ind1 = 0;
+      else
+	ind1 = myrandom_limit(interval);
+      if(ind1>set.size()-1) continue;
+      if(set[ind1].label == 1)
+	label_flag = -1;
+      else
+	label_flag = 1;
+      
+      int cn = 0;
+      while(1)
+	{
+	  ind2 = myrandom_limit(interval);
+	  if(ind2>set.size()-1) continue;
+	  if(set[ind2].label == label_flag) break;
+	  if(cn > 1000)
+	    {
+	      ind2 = myrandom_limit(set.size());
+	      break;
+	    }
+	  cn++;
+	}
+      
+      //get the scores
+      max_psm_inds.erase(max_psm_inds.begin(),max_psm_inds.end());
+      psm_count = 0;
+      //pass both through the net
+      r1 = get_protein_score(set[ind1].pepind);
+      assert(psm_count == d.pepind2num_psm(set[ind1].pepind));
+      r2 = get_protein_score(set[ind2].pepind);;
+      assert((int)max_psm_inds.size() == 2);
+      
+      
+      diff = r1-r2;
+      
+
+      label=0;
+      if(  set[ind1].label==1 && set[ind2].label==-1)
+	label=1;
+      if( set[ind1].label==-1 && set[ind2].label==1)
+	    label=-1;
+      
+      if(label != 0)
+	{
+	  if(label*diff<1)
+	    {
+	      net.clear_gradients();
+	      psm_count = 0;
+	      calc_gradients(set[ind1].pepind, label, 0);
+	      calc_gradients(set[ind2].pepind, -1.0*label, 1);
+	      net.update(mu,weightDecay);
+	    }
+	  
+	}
+    }
+  delete[] gc;
+  
+}
+
+void PepRanker :: train_many_target_nets()
+{
+
+  int  thr_count = num_qvals-1;
+  while (thr_count > 0)
+    {
+      net.copy(max_net_gen[thr_count]);
+        
+      carp(CARP_INFO, "training threshold %d", thr_count);
+      interval = max_overFDR[thr_count];
+      for(int i=switch_iter;i<niter;i++) {
+	//sorts the examples in the training set according to the current net scores
+	getMultiFDR(trainset,net,qvals);
+	train_net_ranking(trainset, interval);
+			
+	for(int count = 0; count < num_qvals;count++)
+	  {
+	    if(overFDRmulti[count] > max_overFDR[count])
+	      {
+		max_overFDR[count] = overFDRmulti[count];
+		max_net_targ[count] = net;
+	      }
+	  }
+
+	if((i % 3) == 0)
+	  {
+	    carp(CARP_INFO, "Iteration %d :", i);
+	    getMultiFDR(trainset,net,qvals);
+	    carp(CARP_INFO, "trainset %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d ", 
+		 qvals[0], overFDRmulti[0], qvals[1], overFDRmulti[1], qvals[2], overFDRmulti[2],
+		 qvals[3], overFDRmulti[3], qvals[4], overFDRmulti[4], qvals[5], overFDRmulti[5],
+		 qvals[6], overFDRmulti[6], qvals[7], overFDRmulti[7], qvals[8], overFDRmulti[8],
+		 qvals[9], overFDRmulti[9], qvals[10], overFDRmulti[10], qvals[11], overFDRmulti[11],
+		 qvals[12], overFDRmulti[12], qvals[13], overFDRmulti[13]);
+	    getMultiFDR(testset,net,qvals);
+	    carp(CARP_INFO, "testset %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d\n ", 
+		 qvals[0], overFDRmulti[0], qvals[1], overFDRmulti[1], qvals[2], overFDRmulti[2],
+		 qvals[3], overFDRmulti[3], qvals[4], overFDRmulti[4], qvals[5], overFDRmulti[5],
+		 qvals[6], overFDRmulti[6], qvals[7], overFDRmulti[7], qvals[8], overFDRmulti[8],
+		 qvals[9], overFDRmulti[9], qvals[10], overFDRmulti[10], qvals[11], overFDRmulti[11],
+		 qvals[12], overFDRmulti[12], qvals[13], overFDRmulti[13]);
+
+	  }
+
+      }
+      thr_count -= 3;
+    }
+}
+
+
+void PepRanker :: train_many_general_nets()
+{
+  interval = trainset.size();
+  for(int i=0;i<switch_iter;i++) {
+    train_net_ranking(trainset, interval);
+           
+    //record the best result
+    getMultiFDR(thresholdset,net,qvals);
+    for(int count = 0; count < num_qvals;count++)
+      {
+	if(overFDRmulti[count] > max_overFDR[count])
+	  {
+	    max_overFDR[count] = overFDRmulti[count];
+	    max_net_gen[count] = net;
+	  }
+      }
+    if((i % 10) == 0)
+      {
+	carp(CARP_INFO, "Iteration %d :", i);
+	getMultiFDR(trainset,net,qvals);
+	carp(CARP_INFO, "trainset %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d ", 
+	     qvals[0], overFDRmulti[0], qvals[1], overFDRmulti[1], qvals[2], overFDRmulti[2],
+	     qvals[3], overFDRmulti[3], qvals[4], overFDRmulti[4], qvals[5], overFDRmulti[5],
+	     qvals[6], overFDRmulti[6], qvals[7], overFDRmulti[7], qvals[8], overFDRmulti[8],
+	     qvals[9], overFDRmulti[9], qvals[10], overFDRmulti[10], qvals[11], overFDRmulti[11],
+	     qvals[12], overFDRmulti[12], qvals[13], overFDRmulti[13]);
+	getMultiFDR(testset,net,qvals);
+	carp(CARP_INFO, "testset %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d\n ", 
+	     qvals[0], overFDRmulti[0], qvals[1], overFDRmulti[1], qvals[2], overFDRmulti[2],
+	     qvals[3], overFDRmulti[3], qvals[4], overFDRmulti[4], qvals[5], overFDRmulti[5],
+	     qvals[6], overFDRmulti[6], qvals[7], overFDRmulti[7], qvals[8], overFDRmulti[8],
+	     qvals[9], overFDRmulti[9], qvals[10], overFDRmulti[10], qvals[11], overFDRmulti[11],
+	     qvals[12], overFDRmulti[12], qvals[13], overFDRmulti[13]);
+      }
+  }
+
+}
+
+void PepRanker::train_many_nets()
+{
+  carp(CARP_INFO, "Before Iterating");
+  getMultiFDRXCorr(trainset,qvals);
+  carp(CARP_INFO, "trainset %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d ", 
+       qvals[0], overFDRmulti[0], qvals[1], overFDRmulti[1], qvals[2], overFDRmulti[2],
+       qvals[3], overFDRmulti[3], qvals[4], overFDRmulti[4], qvals[5], overFDRmulti[5],
+       qvals[6], overFDRmulti[6], qvals[7], overFDRmulti[7], qvals[8], overFDRmulti[8],
+       qvals[9], overFDRmulti[9], qvals[10], overFDRmulti[10], qvals[11], overFDRmulti[11],
+       qvals[12], overFDRmulti[12], qvals[13], overFDRmulti[13]);
+  getMultiFDRXCorr(testset,qvals);
+  carp(CARP_INFO, "trainset %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d \n", 
+       qvals[0], overFDRmulti[0], qvals[1], overFDRmulti[1], qvals[2], overFDRmulti[2],
+       qvals[3], overFDRmulti[3], qvals[4], overFDRmulti[4], qvals[5], overFDRmulti[5],
+       qvals[6], overFDRmulti[6], qvals[7], overFDRmulti[7], qvals[8], overFDRmulti[8],
+       qvals[9], overFDRmulti[9], qvals[10], overFDRmulti[10], qvals[11], overFDRmulti[11],
+       qvals[12], overFDRmulti[12], qvals[13], overFDRmulti[13]);
+
+  train_many_general_nets();
+  
+  //copy the general net into target nets;
+  for(int count = 0; count < num_qvals; count++)
+    max_net_targ[count] = max_net_gen[count];
+  
+  train_many_target_nets();  
+  
+  ostringstream fname;
+  fname << out_dir << "/" << fileroot << "pep-ranker.peps.at.fdr.thresholds.txt";;
+  write_max_nets(fname.str(), max_net_targ);
+
+}
+
+void PepRanker :: setup_for_training()
+{
+  //mysrandom(seed); This is set by CruxApplication::initialize()
+  carp(CARP_INFO, "reading data");
+  
+  ostringstream res;
+  res << out_dir << "/qranker_output";
+  res_prefix = res.str();
+    
+  d.load_data_pep_training();
+  if(feature_file_flag)
+    {
+      string str = feature_file_name.str();
+      if(!d.print_features(str))
+	carp(CARP_INFO, "could not open file %s for writing features. Feature file will not be written", feature_file_name.str().c_str());
+    }
+  d.normalize_psms();
+  d.load_labels_pep_training();
+  PepScores::fillFeaturesSplit(trainset, testset, d, 0.75);
+  thresholdset = trainset;
+  d.clear_labels_pep_training();
+
+  int max_psm = 0;
+  for(int i = 0; i < trainset.size(); i++)
+    {
+      int pepind = trainset[i].pepind;
+      int num_psm = d.pepind2num_psm(pepind);
+      if(num_psm > max_psm)
+	max_psm=num_psm;
+    }
+
+  switch_iter =30;
+  niter = 40;
+   
+  num_qvals = 14;
+  qvals.resize(num_qvals,0.0);
+  overFDRmulti.resize(num_qvals,0);
+  max_overFDR.resize(num_qvals,0); 
+
+  //initialize q-value arrays
+  double q = 0.0;
+  for(int count = 0; count < num_qvals; count++)
+    {
+      qvals[count] = q;
+      if(q < 0.01)
+	q+=0.0025;
+      else
+	q+=0.01;
+    }
+  
+  max_net_gen = new NeuralNet[num_qvals];
+  max_net_targ = new NeuralNet[num_qvals];
+  //set the linear flag: 1 if linear, 0 otherwise
+  int lf = 0; num_hu = 3;
+  if(num_hu == 1)
+    lf = 1;
+  //set whether there is bias in the linear units: 1 if yes, 0 otherwise
+  int bs = 0;
+  
+  net.initialize(d.get_num_features(),num_hu,lf,bs);
+  for(int count = 0; count < num_qvals; count++){
+    max_net_gen[count] = net;
+  }
+
+  //create the net clones
+  net_clones = new NeuralNet[2*max_psm];
+  for (int i = 0; i < 2*max_psm;i++)
+    net_clones[i].clone(net);
+  
+}
+
+
+int PepRanker::run( ) {
+ 
+  setup_for_training();
+  train_many_nets();
+  report_results_xml_tab();
+  return 0;
+}
+
+/**************************************************************************/
+
+void PepRanker :: get_pep_seq(string &pep, string &seq, string &n, string &c)
+{
+  string tmp;
+  int pos;
+  pos = pep.find('.');
+  n = pep.at(pos-1); 
+  tmp = pep.substr(pos+1, pep.size());
+
+  pos = tmp.find('.');
+  c = tmp.at(pos+1);
+  seq = tmp.substr(0, pos);
+}
+
+void PepRanker :: get_tab_delim_proteins(string protein_str, vector<string> &proteins)
+{
+  proteins.clear(); 
+  string str = protein_str;
+  size_t pos = str.find("\t");
+  while(pos != string::npos){
+    if(pos == 0){
+      str = str.substr(1,str.size()-1);
+   } else{
+      string prot = str.substr(0,pos);
+      str = str.substr(pos+1,str.size()-1); 
+      proteins.push_back(prot);
+    }
+    pos = str.find("\t");
+  }
+  proteins.push_back(str);
+}
+
+
+void PepRanker :: setup_for_reporting_results()
+{
+  d.load_labels_pep_training();
+  trainset.clear();
+  testset.clear();
+  thresholdset.clear();
+  PepScores::fillFeaturesFull(trainset, d);
+  psmtrainset.clear();
+  psmtestset.clear();
+  PSMScores::fillFeaturesFull(psmtrainset, d);
+  d.clear_labels_pep_training();
+  
+  //choose the best net for the selectionfdr
+  int max_fdr = 0;
+  int fdr = 0;
+  int ind = 0;
+  for(unsigned int count = 0; count < qvals.size();count++)
+    {
+      fdr = getOverFDR(trainset, max_net_targ[count], selectionfdr);
+      if(fdr > max_fdr) {
+        max_fdr = fdr;
+        ind = count;
+      }
+    }
+  net = max_net_targ[ind];
+  pepind_to_max_psmind.clear();
+  pepind_to_max_psmind.resize(d.get_num_peptides(),-1);
+  int fdr_trn = getOverFDR(trainset,net, selectionfdr);
+  carp(CARP_INFO, "total peptides at q<%.2f: %d", selectionfdr, fdr_trn);
+  getOverFDRPSM(psmtrainset, net, selectionfdr);
+  d.clear_data_pep_training();
+  d.load_data_pep_results();
+
+  computePepNSAF();
+  computePEP();
+  
+}
+
+/*****************************************************/
+
+void PepRanker :: write_results_peptides_xml(ofstream &os)
+{
+  string protein_str;
+  vector<string> tab_delim_proteins;
+  os << "<peptides>" <<endl;
+  int cn = 0;
+  for(int i = 0; i < trainset.size(); i++)
+    {
+      int pepind = trainset[i].pepind;
+      if(trainset[i].label == 1)
+	{
+	  cn++;
+	  //write out proteins
+	  string pep = d.ind2pep(pepind);
+	  string seq, n, c;
+	  get_pep_seq(pep, seq, n, c);
+	  os << " <peptide peptide_id=\"" << seq << "\">" << endl;
+	  os << "  <q_value>" << trainset[i].q << "</q_value>" << endl;
+	  os << "  <score>" << trainset[i].score << "</score>" << endl;
+	  os << "  <nsaf>" << trainset[i].nsaf << "</nsaf>" << endl;
+          os << " <barista PEP>" <<trainset[i].PEP<<"</barista PEP>"<<endl; 
+	  //write out peptides
+	  int psmind = pepind_to_max_psmind[pepind];
+	  if(psmind > -1)
+	    os << "  <main_psm_id>"<< psmind << "</main_psm_id>" << endl;
+	  else
+	    cout << "warning: did not assign peptide" << pep  << " ind " << pepind << " max psmind\n";
+	    	  
+	  //print out all the psms in which this peptide is present
+	  int num_psm = d.pepind2num_psm(pepind);
+	  int *psminds = d.pepind2psminds(pepind);
+	  os << "  <psm_ids>" << endl;
+	  for(int j = 0; j < num_psm; j++)
+	    os << "   <psm_id>" << psminds[j] << "</psm_id>" << endl;
+	  os << "  </psm_ids>" << endl;
+	  
+
+	  //print out all the proteins
+	  int num_prot = d.pepind2num_prot(pepind);
+	  int *protinds = d.pepind2protinds(pepind);
+	  os << "  <protein_ids>" << endl;
+	  for(int j = 0; j < num_prot; j++)
+	    {
+	      protein_str = d.ind2prot(protinds[j]);
+	      get_tab_delim_proteins(protein_str, tab_delim_proteins);
+	      for(unsigned int k = 0; k < tab_delim_proteins.size(); k++)
+		os << "   <protein_id>" << tab_delim_proteins[k] << "</protein_id>" <<endl;
+	      //os << "   <protein_id>" << d.ind2prot(protinds[j]) << "</protein_id>" << endl;
+	    }
+	  
+	  os << "  </protein_ids>" << endl;
+	  os << " </peptide>" << endl;  
+	}
+      
+    }
+  os << "</peptides>" << endl;
+}
+
+void PepRanker :: write_results_psm_xml(ofstream &os)
+{
+  os << "<psms>" <<endl;
+  int cn = 0;
+  for(int i = 0; i < psmtrainset.size(); i++)
+    {
+      int psmind = psmtrainset[i].psmind;
+      if(psmtrainset[i].label == 1)
+	{
+	  cn++;
+	  //write out proteins
+	  os << " <psm psm_id=" << "\"" << psmind << "\"" << ">" << endl;
+	  os << "  <q_value>" << psmtrainset[i].q << "</q_value>" << endl;
+	  os << "  <score>" << psmtrainset[i].score << "</score>" << endl;
+	  os << "  <scan>" << d.psmind2scan(psmind) << "</scan>" << endl;
+	  os << "  <charge>" << d.psmind2charge(psmind) << "</charge>" << endl;
+	  os << "  <precursor_mass>" << d.psmind2precursor_mass(psmind) << "</precursor_mass>" << endl;
+	  int pepind = d.psmind2pepind(psmind);
+	  string pep = d.ind2pep(pepind);
+	  string seq, n,c;
+	  get_pep_seq(pep,seq,n,c);
+	  os << "  <peptide_seq n =\"" << n << "\" c=\"" << c << "\" seq=\"" << seq << "\"/>" << endl;
+	  os << "  <file_name>" << d.psmind2fname(psmind) << "</file_name>" << endl;
+	  os << " </psm>" << endl;  
+	}
+    }
+  os << "</psms>" << endl;
+}
+
+
+void PepRanker :: report_results_xml()
+{
+
+  ostringstream fname;
+  fname << out_dir << "/" << fileroot << "barista.xml";
+  ofstream of(fname.str().c_str());
+  of << "<barista_output>" << endl;
+  of << endl;
+ 
+  write_results_peptides_xml(of);
+
+  write_results_psm_xml(of);
+
+  ostringstream xml_file_name;
+  xml_file_name << out_dir << "/" << fileroot << "barista.target.pep.xml";
+  PepXMLWriter xmlfile;
+  xmlfile.openFile(xml_file_name.str().c_str(), overwrite_flag);
+
+  //...
+  xmlfile.closeFile();
+  write_results_pep_xml(xmlfile);
+
+  
+  of << endl;
+  of << "</barista_output>" << endl;
+  of.close();
+    
+}
+
+/***********************************************************************************/
+
+void PepRanker :: write_results_peptides_tab(ofstream &os)
+{
+  int ps = pepind_to_max_psmind[trainset[0].pepind]; 
+  os<< "q-value" << "\t" << "barista score" << "\t";
+  os << "NSAF score" << "\t";
+  os<<"barista PEP\t";
+  os << "scan" << "\t" ;
+  os<< "charge" << "\t";
+  os<<"spectrum precursor m/z"<<"\t";
+  os<<"spectrum neutral mass"<<"\t"; 
+  os<<"peptide mass"<<"\t";
+  os<< "delta_cn"<< "\t";
+  if(d.psmind2spscore(ps)!=-1){
+    os<<"sp score"<<"\t";
+    os<<"sp rank\t";
+  }
+  os<<"xcorr score"<<"\t";
+  os<<"xcorr rank"<<"\t";
+  if(d.psmind2spscore(ps)!=-1){
+    os<<"b/y ions matched"<<"\t";
+    os<<"b/y ions total"<<"\t";
+  }
+  os<<"distinct matches/spectrum"<<"\t";
+  os<<"sequence\t"; 
+  os<<"cleavage type"<<"\t"; 
+  os<<"protein id"<<"\t";
+  os<<"flanking_aa"<<endl;
+  int cn = 0;
+  for(int i = 0; i < trainset.size(); i++){
+    if(trainset[i].label == 1){
+      cn++;
+      //write out proteins
+      int pepind = trainset[i].pepind;
+      string pep = d.ind2pep(pepind);
+      string seq, n, c;
+      get_pep_seq(pep, seq, n, c);
+      //q-value
+      os << trainset[i].q << "\t";
+      //score 
+      os << trainset[i].score << "\t";
+      ///nsaf
+      os<<trainset[i].nsaf<<"\t";
+     //PEP
+      os<<trainset[i].PEP<<"\t"; 
+   
+      //write out peptides
+      int psmind = pepind_to_max_psmind[pepind];
+      if(psmind > -1){
+       //scan  
+	os << d.psmind2scan(psmind) << "\t" ;
+       //charge
+        os<< d.psmind2charge(psmind)<<"\t";
+        //mass-to-charge ratio 
+        os<<(d.psmind2precursor_mass(psmind)+
+        d.psmind2charge(psmind)*MASS_PROTON)/
+        d.psmind2charge(psmind)<<"\t";
+        //Spectrum Neutral Mass 
+        os<<d.psmind2precursor_mass(psmind)<<"\t";
+        //Peptide Mass
+        os<<d.psmind2peptide_mass(psmind)<<"\t";
+        //DELTA CN
+        os <<d.psmind2deltaCn(psmind)<< "\t";
+        if(d.psmind2spscore(ps)!=-1){
+          //Sp Score
+          os<<d.psmind2spscore(psmind)<<"\t";
+          //Sp Rank 
+          os<<d.psmind2sp_rank(psmind)<<"\t";
+        }
+        //xcorr Score
+      	os<<d.psmind2xcorr(psmind)<<"\t";
+      	//xcorr rank
+      	os<<d.psmind2xcorr_rank(psmind)<<"\t";
+        if(d.psmind2spscore(ps)!=-1){
+          //by ions match 
+          os<<d.psmind2by_ions_matched(psmind)<<"\t"; 
+          //by ions total 
+          os<<d.psmind2by_ions_total(psmind)<<"\t";
+        }
+      	//Matches/Spectrum 
+      	os<<d.psmind2matches_spectrum(psmind)<<"\t";
+        //sequence 
+        os<<seq<<"\t"; 
+        //cleavage type
+        os<<cleavage_type<<"\t"; 
+      	//protein id
+      	vector<string> prots;  
+        get_protein_id(pepind,prots);
+        print_protein_ids(prots,os,psmind);
+        //Flanking_aa 
+      	os<<n<<c<<endl;     
+      }else{
+	  cout<< "waning: did not assign peptide max psmind\n";
+          os<<"not assignd\t";
+       }
+
+    }
+  }
+}
+
+void PepRanker :: write_results_psm_tab(ofstream &os)
+{
+  int ps= psmtrainset[0].psmind; 
+  os << "scan" << "\t" << "charge" << "\t";
+  os << "q-value" << "\t" << "barista score" << "\t";
+  os << "barista PEP\t";
+  os<<"spectrum precursor m/z"<<"\t";
+  os<<"spectrum neutral mass"<<"\t"; 
+  os<<"peptide mass"<<"\t";
+  os<< "delta_cn"<< "\t";
+  if(d.psmind2spscore(ps)!=-1){
+    os<<"sp score"<<"\t";
+    os<<"sp rank\t";
+  }
+  os<<"xcorr score"<<"\t";
+  os<<"xcorr rank"<<"\t";
+  if(d.psmind2spscore(ps)!=-1){
+    os<<"b/y ions matched"<<"\t";
+    os<<"b/y ions total"<<"\t";
+  }
+  os<<"distinct matches/spectrum"<<"\t";
+  os<<"sequence"<<"\t";
+  os<<"cleavage type"<<"\t"; 
+  os<<"protein id"<<"\t";
+  os<<"flanking aa"<<"\t";
+  os << "filename" << endl;
+ int cn = 0;
+  for(int i = 0; i < psmtrainset.size(); i++)
+    {
+      if(psmtrainset[i].label == 1)
+	{
+	  cn++;
+	  //write out proteins
+	  int psmind = psmtrainset[i].psmind; 
+	  int pepind = d.psmind2pepind(psmind);
+	  string pep = d.ind2pep(pepind);
+	  string seq, n,c;
+	  get_pep_seq(pep,seq,n,c);
+	  //os << psmind << "\t";
+	  os << d.psmind2scan(psmind) << "\t";
+	  os << d.psmind2charge(psmind) << "\t";
+	  os << psmtrainset[i].q << "\t";
+	  os << psmtrainset[i].score << "\t";
+          os << psmtrainset[i].PEP << "\t";
+          //mass-to-charge ratio 
+          os<<(d.psmind2precursor_mass(psmind)+
+          d.psmind2charge(psmind)*MASS_PROTON)/
+          d.psmind2charge(psmind)<<"\t";
+          //Spectrum Neutral Mass 
+          os<<d.psmind2precursor_mass(psmind)<<"\t";
+          //Peptide Mass
+          os<<d.psmind2peptide_mass(psmind)<<"\t";
+          //DELTA CN
+          os <<d.psmind2deltaCn(psmind)<< "\t";
+          if(d.psmind2spscore(ps)!=-1){
+            //Sp Score
+            os<<d.psmind2spscore(psmind)<<"\t";
+            //Sp Rank 
+            os<<d.psmind2sp_rank(psmind)<<"\t";
+          }
+          //xcorr Score
+      	  os<<d.psmind2xcorr(psmind)<<"\t";
+      	  //xcorr rank
+      	  os<<d.psmind2xcorr_rank(psmind)<<"\t";
+          if(d.psmind2spscore(ps)!=-1){
+            //by ions match 
+            os<<d.psmind2by_ions_matched(psmind)<<"\t"; 
+            //by ions total 
+            os<<d.psmind2by_ions_total(psmind)<<"\t";
+          }
+          //Distinct matches/Spectrum
+      	  os<<d.psmind2matches_spectrum(psmind)<<"\t";
+      	  get_pep_seq(pep,seq,n,c);
+      	  //Sequence 
+      	  os<<seq<<"\t";
+      	  //cleavage type
+      	  os<<cleavage_type<<"\t";
+      	  //protein id
+      	  vector<string> prots;  
+          get_protein_id(pepind,prots);
+          print_protein_ids(prots,os,psmind);
+      	  //Flanking_aa 
+      	  os<<n<<c<<"\t";   
+	  os << d.psmind2fname(psmind) << endl;
+	}
+    }
+}
+
+
+void PepRanker :: report_results_tab()
+{
+  ofstream of;
+  ostringstream fname;
+  
+  fname << out_dir << "/" << fileroot << "barista.target.peptides.txt";
+  of.open(fname.str().c_str());
+  write_results_peptides_tab(of);
+  of.close();
+  fname.str("");
+  
+  fname << out_dir << "/" << fileroot << "barista.target.psms.txt";
+  of.open(fname.str().c_str());
+  write_results_psm_tab(of);
+  of.close();
+  fname.str("");
+  
+}
+/******************************************************************/
+
+
+void PepRanker :: report_results_xml_tab()
+{
+  setup_for_reporting_results();
+  report_results_xml();
+  report_results_tab();
+  d.clear_data_pep_results(); 
+  
+}
+
+
+void PepRanker :: print_description()
+{
+  cout << endl;
+  cout << "\t crux q-ranker [options] <spectra> <search results>" << endl <<endl;
+  cout << "REQUIRED ARGUMENTS:" << endl << endl;
+  cout << "\t <spectra> Directory with ms2 files, list of ms2 files or a single ms2 file used for database search." << endl;
+  cout << "\t <search results> Directory with sqt files, list of sqt files or a single sqt file with psms generated during search." << endl;
+  cout << endl;
+  
+  cout << "OPTIONAL ARGUMENTS:" << endl << endl;
+  cout << "\t [--enzyme <string>] \n \t     The enzyme used to digest the proteins in the experiment. Default trypsin." << endl;
+  cout << "\t [--decoy-prefix <string>] \n \t     Specifies the prefix of the protein names that indicates a decoy. Default decoy_" << endl;
+  cout << "\t [--separate-searches <string>] \n \t     If the target and decoy searches were run separately, the option then allows the user to specify the location of the decoy search results, the target database search should be provided as required argument." << endl;
+  cout << "\t [--fileroot <string>] \n \t     The fileroot string will be added as a prefix to all output file names. Default = none." <<endl;
+  cout << "\t [--output-dir <directory>] \n \t     The name of the directory where output files will be created. Default = crux-output." << endl;
+  cout << "\t [--overwrite <T/F>] \n \t     Replace existing files (T) or exit if attempting to overwrite (F). Default=F." << endl;
+  cout << "\t [--skip-cleanup <T/F>] \n \t     When set to T, prevents the deletion of lookup tables created during the preprocessing step. Default = F." << endl; 
+  cout << "\t [--re-run <directory>] \n \t      Re-run PepRanker analysis using a previously computed set of lookup tables." <<endl;  
+  cout << "\t [--use-spec-features <T/F>] \n \t      When set to F, use minimal feature set. Default T." <<endl;  
+  cout << endl; 
+
+}
+string PepRanker:: file_extension (string str){
+  string file_exten= str.substr(str.rfind('.')+1);
+  return file_exten; 
+}
+
+
+FILE_FORMAT_T PepRanker::check_file_format(string& source) {
+  string ext = file_extension(source);
+
+    if (ext=="sqt") 
+      return SQT_FORMAT;
+    else if (ext=="txt") 
+      return DELIMITED_FORMAT;
+   return INVALID_FORMAT;
+}
+
+int PepRanker :: crux_set_command_line_options(int argc, char *argv[])
+{
+  string sqt_source;
+  string ms2_source;
+  string sqt_decoy_source;
+  int separate_search_flag;
+  string output_directory;
+  string enzyme;
+  string decoy_prefix;
+
+  string dir_with_tables;
+  int found_dir_with_tables;
+
+  bool spec_features_flag;
+  bool list_of_files_flag; 
+  overwrite_flag = Params::GetBool("overwrite");
+  
+  fileroot = Params::GetString("fileroot");
+  if(!fileroot.empty()) {
+    fileroot.append(".");
+  }
+
+  decoy_prefix = Params::GetString("decoy-prefix");
+
+
+  enzyme = Params::GetString("enzyme");
+
+  spec_features_flag = Params::GetBool("use-spec-features");
+
+  skip_cleanup_flag = Params::GetBool("skip-cleanup");
+  
+
+  dir_with_tables = Params::GetString("re-run"); 
+  if(!dir_with_tables.empty()) {
+    found_dir_with_tables = 1;
+  } else {
+    found_dir_with_tables = 0;
+  }
+
+  output_directory = Params::GetString("output-dir");
+
+  feature_file_flag = Params::GetBool("feature-file-out");
+  feature_file_name << output_directory << "/" << fileroot << "q-ranker.features.txt";
+
+  if(found_dir_with_tables)
+    {
+      //set input and output dirs
+      parser = new SQTParser();
+      parser -> set_output_dir(dir_with_tables);
+      set_input_dir(dir_with_tables);
+      set_output_dir(output_directory);
+
+      carp(CARP_INFO, "directory with tables: %s", dir_with_tables.c_str());
+      carp(CARP_INFO, "output_directory: %s", output_directory.c_str());
+    }else{
+      ms2_source = Params::GetString("fragmentation spectra");
+      sqt_source = Params::GetString("search results");
+      list_of_files_flag = Params::GetBool("list-of-files");
+      //check file format 
+     
+      vector<string> files; 
+      string files_list; 
+      if(list_of_files_flag==1){
+        ifstream f(sqt_source.c_str());
+        f>>files_list; 
+        while(!f.eof()){
+          files.push_back(files_list);
+          f>> files_list; 
+        } 
+      }else{
+         files.push_back(sqt_source);
+       }
+      
+      for(unsigned i=0; i<files.size();i++){
+        FILE_FORMAT_T format = check_file_format(files[i]);
+        switch (format) {
+        case SQT_FORMAT:
+          file_format_="sqt"; 
+          parser = new SQTParser();
+	  break;
+        case DELIMITED_FORMAT:
+          file_format_="txt";
+	  parser = new CruxParser();
+	  break;
+        case INVALID_FORMAT:
+          file_format_="NULL";
+        default:
+	  carp(CARP_FATAL, "Please enter .sqt or .txt search results"); 
+        }
+
+        parser->set_decoy_prefix(decoy_prefix);
+        parser->set_enzyme(enzyme);
+        if(enzyme.find("elastase") != string::npos){
+           cleavage_type="elastase-full-digest";
+        }else if (enzyme.find("chymotrypsin") != string::npos){
+           cleavage_type="chymotrypsin-full-digest";
+        }else if (enzyme.find("trypsin") != string::npos){
+           cleavage_type="trypsin-full-digest";
+        }else{
+           cleavage_type="Null";
+        }
+
+        //num of spec features
+        if(spec_features_flag)
+	  parser->set_num_spec_features(3);
+        else 
+	  parser->set_num_spec_features(0);
+        parser->write_features_header();
+        
+        if(parser->get_use_quadratic_features())
+          parser->add_quadratic_features_header(); 
+        d.get_features_header(parser->get_final_features_header());
+        sqt_decoy_source = Params::GetString("separate-searches"); 
+        if(!sqt_decoy_source.empty()) {
+	  separate_search_flag = 1;
+        } else {
+	  separate_search_flag = 0;
+        }
+      
+        //set the output directory for the parser
+        if(!parser->set_output_dir(output_directory))
+	  return 0;
+        //set input and output for the leaning algo (in and out are the same as the out for the parser)
+        set_input_dir(output_directory);
+        set_output_dir(output_directory);
+      
+        if(separate_search_flag){
+	  if(!parser->set_input_sources(ms2_source, sqt_source, sqt_decoy_source)){
+	    carp(CARP_FATAL, "could not extract features for training");
+          }
+	  parser->set_num_hits_per_spectrum(1);
+	}else{
+	  if(!parser->set_input_sources(ms2_source, sqt_source)){
+	    carp(CARP_FATAL, "could not extract features for training");
+            }
+	 }
+      
+        //print some info
+        if(format==SQT_FORMAT)
+	  carp(CARP_INFO, "sqt source: %s", sqt_source.c_str());
+        if(format==DELIMITED_FORMAT)
+	  carp(CARP_INFO, "delmited source: %s", sqt_source.c_str());
+        carp(CARP_INFO, "ms2 source: %s", ms2_source.c_str());
+        carp(CARP_INFO, "output_directory: %s", output_directory.c_str());
+        carp(CARP_INFO, "enzyme: %s", enzyme.c_str());
+        carp(CARP_INFO, "decoy prefix: %s", decoy_prefix.c_str());
+      
+        if(!parser->run())
+	  carp(CARP_FATAL, "Could not proceed with training.");
+        parser->clear();
+      }
+   }
+ 
+   if(!parser->check_input_dir(in_dir))
+    carp(CARP_FATAL, "Please re-run with ms2 input and txt input.");
+
+  return 1;
+
+  
+}
+
+
+
+int PepRanker :: computePepNSAF()
+{
+
+  //create auxiliary psmind_to_ind index
+  vector<int>psmind_to_ind;
+  psmind_to_ind.resize(psmtrainset.size(),0);
+  for(int i = 0; i < psmtrainset.size(); i++)
+    psmind_to_ind[psmtrainset[i].psmind] = i;
+
+  //compute NSAF for each peptide
+  double sum = 0.0;
+  for(int k = 0; k < trainset.size(); k++)
+    {
+      if(trainset[k].label == 1)
+	{
+	  int pepind = trainset[k].pepind;
+	  string pep = d.ind2pep(pepind);
+	  string seq, n,c;
+	  get_pep_seq(pep,seq,n,c);
+	  int len = seq.size();
+	  
+	  int cnt = 0;
+	  int num_psms = d.pepind2num_psm(pepind);
+	  int *psminds = d.pepind2psminds(pepind);
+	  for (int j = 0; j < num_psms; j++)
+	    {
+	      int psmind = psminds[j];
+	      int ind  = psmind_to_ind[psmind];
+	      assert(psmtrainset[ind].psmind == psmind);
+	      if(psmtrainset[ind].q <= 0.01)
+		cnt++;
+	    }
+	
+	  //compute NSAF for this protein
+	  double nsaf = 0.0;
+	  if(len != 0)
+	    nsaf = (double)cnt/(double)len;
+	  trainset[k].nsaf = nsaf;
+	  sum += nsaf;
+ 	}
+    }
+  
+  if(sum > 0)
+    {
+      for(int i = 0; i < trainset.size(); i++)
+	{
+	  if(trainset[i]. label == 1)
+	    trainset[i].nsaf /= sum;
+	}
+    }
+  else
+    return 0;
+
+  /*
+  double check = 0.0;
+  for(int i = 0; i < trainset.size(); i++)
+    {
+      if(trainset[i]. label == 1)
+	check += trainset[i].nsaf;
+    }
+  cout << check << endl;
+  */
+  psmind_to_ind.clear();
+  return 1;
+}
+
+
+void PepRanker :: computePEP(){
+  carp(CARP_DEBUG, "Computing PEPs");
+  vector<double> target_scores_vect;
+  vector<double> decoy_scores_vect;
+
+  // pull out the target and decoy scores
+  for(int i = 0; i < psmtrainset.size(); i++){
+    if( psmtrainset[i].label == 1 ){
+      target_scores_vect.push_back(psmtrainset[i].score);
+    } else { // == -1
+      decoy_scores_vect.push_back(psmtrainset[i].score);
+    }
+  }
+
+  int num_targets = target_scores_vect.size();
+  int num_decoys = decoy_scores_vect.size();
+  carp(CARP_DEBUG, "Found %d targets and %d decoys", num_targets, num_decoys); 
+
+  // copy them to an array as required by the compute_PEP method
+  double* target_scores = new double[num_targets];
+  copy(target_scores_vect.begin(), target_scores_vect.end(), target_scores);
+  double* decoy_scores = new double[num_decoys];
+  copy(decoy_scores_vect.begin(), decoy_scores_vect.end(), decoy_scores);
+
+  double* PEPs = ComputeQValues::compute_PEP(target_scores, num_targets, 
+                                             decoy_scores, num_decoys);
+
+  // fill in the data set with the new scores for the targets
+  int target_idx = 0;
+  for(int full_idx = 0; full_idx < psmtrainset.size(); full_idx++){
+    if( psmtrainset[full_idx].label == 1 ){
+      psmtrainset[full_idx].PEP = PEPs[target_idx];
+      target_idx++; 
+    } // else, skip decoys
+  }
+
+  delete target_scores;
+  delete decoy_scores;
+  delete PEPs;
+
+  /** 
+   * Calculate Peptide PEPs
+   */
+  target_scores_vect.clear();
+  decoy_scores_vect.clear();
+  
+  //pull out the target and decoy scores for peptide PEPs
+  for(int i=0;i<trainset.size();i++){
+    if(trainset[i].label==1)
+      target_scores_vect.push_back(trainset[i].score);
+    else 
+      decoy_scores_vect.push_back(trainset[i].score);
+  }
+  num_targets = target_scores_vect.size();
+  num_decoys = decoy_scores_vect.size();
+  carp(CARP_DEBUG, "Found %d targets and %d decoys", num_targets, num_decoys);  
+
+  // copy them to an array as required by the compute_PEP method
+  target_scores = new double[num_targets];
+  copy(target_scores_vect.begin(), target_scores_vect.end(), target_scores);
+  decoy_scores = new double[num_decoys];
+  copy(decoy_scores_vect.begin(), decoy_scores_vect.end(), decoy_scores);
+  PEPs = ComputeQValues::compute_PEP(target_scores, num_targets, 
+                                     decoy_scores, num_decoys);
+
+  // fill in the data set with the new scores for the targets
+  target_idx = 0;
+  for(int full_idx = 0; full_idx < trainset.size(); full_idx++){
+    if( trainset[full_idx].label == 1 ){
+      trainset[full_idx].PEP = PEPs[target_idx];
+      target_idx++; 
+    } // else, skip decoys
+  }
+
+  delete target_scores;
+  delete decoy_scores;
+  delete PEPs;
+
+}
+
+
+void PepRanker :: write_results_pep_xml(PepXMLWriter& xmlfile)
+{
+  xmlfile.writeHeader();
+
+  bool* scores_to_print = new bool[NUMBER_SCORER_TYPES];
+  for(int score_idx = 0; score_idx < NUMBER_SCORER_TYPES; score_idx++){
+    scores_to_print[score_idx] = false;
+  }
+  scores_to_print[SP] = true; 
+  scores_to_print[XCORR] = true;
+  scores_to_print[BARISTA_SCORE] = true;
+  scores_to_print[BARISTA_QVALUE] = true;
+  scores_to_print[BARISTA_PEP] = true;
+  scores_to_print[DELTA_CN] = true;
+  scores_to_print[BY_IONS_MATCHED] = true;
+  scores_to_print[BY_IONS_TOTAL] = true;
+
+  double* scores = new double[NUMBER_SCORER_TYPES];
+
+  for(int i = 0; i < psmtrainset.size(); i++) {
+    // only print target psms
+    if( psmtrainset[i].label == -1 ){
+      continue;
+    }
+
+      int psmind = psmtrainset[i].psmind;
+
+      // spectrum info
+      int scan = d.psmind2scan(psmind);
+      const char* filename = d.psmind2fname(psmind).c_str();
+      char** path_name = parse_filename_path_extension(filename, NULL);
+      filename = path_name[0];
+      double spectrum_mass = d.psmind2precursor_mass(psmind); 
+      int charge = d.psmind2charge(psmind);
+
+      // peptide info
+      int pepind = d.psmind2pepind(psmind);
+      string pep = d.ind2pep(pepind);
+      string modified_sequence, n,c;
+      get_pep_seq(pep, modified_sequence, n, c);
+      char* sequence = unmodify_sequence(modified_sequence.c_str());
+      string flanking_aas = n + c;
+      double peptide_mass = d.psmind2peptide_mass(psmind);
+
+      // protein info
+      int num_proteins = d.pepind2num_prot(pepind); 
+      int* protein_indexes = d.pepind2protinds(pepind);
+      vector<string> protein_names;
+      vector<string> protein_descriptions;
+      for(int prot_idx = 0; prot_idx < num_proteins; prot_idx++){
+        string protein_name = d.ind2prot(protein_indexes[prot_idx]);
+	protein_names.push_back(protein_name);
+        protein_descriptions.push_back("");
+        flanking_aas += "," + n + c; // todo
+      }
+
+      // psm info
+      int* psm_rank=new int[NUMBER_SCORER_TYPES] ;
+      psm_rank[XCORR]=1;
+      scores[XCORR] = d.psmind2xcorr(psmind);
+      scores[SP] = d.psmind2spscore(psmind);
+      scores[QRANKER_SCORE] = psmtrainset[i].score;
+      scores[QRANKER_QVALUE] = psmtrainset[i].q;
+      scores[QRANKER_PEP] = psmtrainset[i].PEP;
+      scores[DELTA_CN] = d.psmind2deltaCn(psmind);
+      scores[BY_IONS_MATCHED] = d.psmind2by_ions_matched(psmind);
+      scores[BY_IONS_TOTAL] = d.psmind2by_ions_total(psmind);
+        
+      xmlfile.writePSM(scan, filename, spectrum_mass, charge, psm_rank,
+                       sequence, modified_sequence.c_str(),
+                       peptide_mass, num_proteins,
+                       flanking_aas.c_str(), protein_names, 
+                       protein_descriptions, scores_to_print, scores,
+                       d.psmind2matches_spectrum(psmind));
+
+      free(sequence);
+      if( path_name[0] ){
+        free(path_name[0]);
+      }
+      if( path_name[1] ){
+        free(path_name[1]);
+      }
+      free(path_name);
+  }
+
+  xmlfile.writeFooter();
+}
+
+
+
+int PepRanker::main(int argc, char **argv) {
+
+  
+  if(!crux_set_command_line_options(argc, argv))
+    return 1;
+  
+  run();
+  if(skip_cleanup_flag != 1)
+    parser->clean_up(out_dir);
+    
+  return 0;
+}   
+
+bool PepRanker :: needsOutputDirectory() const
+{
+  return true;
+}
+
+
+string PepRanker::getName() const {
+  return "q-ranker";
+}
+string PepRanker::getDescription() const {
+  return
+    "Analyze a collection of PSMs to target and decoy "
+    "sequences using the new q-ranker algorithm.";
+}
+
+vector<string> PepRanker::getArgs() const {
+  string arr[] = {
+    "fragmentation spectra",
+    "search results"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector<string> PepRanker::getOptions() const {
+  string arr[] = {
+    "enzyme",
+    "decoy-prefix",
+    "separate-searches",
+    "fileroot",
+    "output-dir",
+    "overwrite",
+    "skip-cleanup",
+    "re-run",
+    "use-spec-features",
+    "parameter-file",
+    "verbosity",
+     "list-of-files",
+    "feature-file-out"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+COMMAND_T PepRanker::getCommand() const {
+  return QRANKER_COMMAND;
+}
+
+
+void PepRanker :: get_protein_id(int pepind, vector<string> &prot){
+  int * protinds= d.pepind2protinds(pepind) ;
+  unsigned prot_length=d.pepind2num_prot(pepind);  
+  for (unsigned k=0;k<prot_length;k++){
+    string protein_str= d.ind2prot( protinds[k]);
+    prot.push_back(protein_str); 
+  }
+}
+
+
+void PepRanker :: print_protein_ids(vector<string> &prots, ofstream &os, int psmind){
+    
+ // TODO: find peptide position in SQT files 
+ //sqt files do not return peptide position in the protein.
+ //if the search result file is txt we can find file peptide_pos and print it 
+ // in front of protein, else do not print anything
+
+  if(file_format_=="txt"){
+    for (unsigned int j=0;j<prots.size();j++){
+      os << prots[j];
+      if (d.psmind2peptide_position(psmind) > -1) {
+	os << "("<<d.psmind2peptide_position(psmind)<<")";
+      }
+      if (j == prots.size() - 1) {
+	os << "\t";
+      } else {
+	os << ",";
+      }
+    }
+  }else if(file_format_=="sqt"){
+    for (unsigned int j=0;j<prots.size();j++){
+      if(j==prots.size()-1)
+      	os<<prots[j]<<"\t";
+      else
+        os<<prots[j]<<",";
+    }
+  }
+  prots.clear();
+}
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/qranker-barista/PepRanker.h b/src/app/qranker-barista/PepRanker.h
new file mode 100644
index 0000000..587ead2
--- /dev/null
+++ b/src/app/qranker-barista/PepRanker.h
@@ -0,0 +1,149 @@
+#ifndef PEPRANKER_H_
+#define PEPRANKER_H_
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <time.h>
+#include <cstdlib>
+#include <vector>
+#include <set>
+#include <map>
+#include <string>
+#include <math.h>
+using namespace std;
+
+#include "app/CruxApplication.h"
+#include "io/carp.h"
+#include "util/crux-utils.h"
+#include "parameter.h"
+
+#include "io/PepXMLWriter.h"
+#include "NeuralNet.h"
+#include "DataSetCrux.h"
+#include "PSMScores.h"
+#include "PepScores.h"
+#include "SQTParser.h"
+#include "CruxParser.h"
+#include "TabDelimParser.h"
+#include "app/CruxApplication.h"
+#include "util/mass.h"
+#include "model/objects.h"
+
+class PepRanker: public CruxApplication
+{
+
+public:
+  PepRanker();
+  virtual ~PepRanker();
+
+  int run();
+  int getOverFDRPSM(PSMScores &set, NeuralNet &n, double fdr);
+  double get_peptide_score_xcorr(int pepind);
+  void getMultiFDRXCorr(PepScores &set, vector<double> &qvalues);
+  double get_peptide_score(int pepind, NeuralNet &n);
+  int getOverFDR(PepScores &set, NeuralNet &n, double fdr);
+  void getMultiFDR(PepScores &set, NeuralNet &n, vector<double> &qvalues);
+  void write_max_nets(string filename, NeuralNet *max_net);
+  double get_protein_score(int pepind);
+  void calc_gradients(int pepind, int label, int i);
+  void train_net_ranking(PepScores &set, int interval);
+  void train_many_general_nets();
+  void train_many_target_nets();
+  void train_many_nets();
+  void setup_for_training();  
+  void setup_for_reporting_results();
+  void report_results_xml_tab();
+    
+  void get_tab_delim_proteins(string protein_str, vector<string> &proteins);
+  void get_pep_seq(string &pep, string &seq, string &n, string &c);
+  void write_results_psm_xml(PepXMLWriter& os);
+  void computePEP();
+  int computePepNSAF();
+
+  void write_results_peptides_tab(ofstream &os);
+  void write_results_psm_tab(ofstream &os);
+  void report_results_tab();
+  void write_results_pep_xml(PepXMLWriter& xmlfile);
+  void write_results_peptides_xml(ofstream &os);
+  void write_results_psm_xml(ofstream &os);
+  void report_results_xml();
+
+  inline void set_fileroot(string &fl){fileroot = fl;}
+  inline void set_overwrite_flag(int flag) {overwrite_flag = flag;}
+  inline void set_input_dir(string &input_dir) {in_dir = input_dir; d.set_input_dir(input_dir);}
+  inline void set_output_dir(string &output_dir){out_dir = output_dir;}
+  void print_description();
+  int set_command_line_options(int argc, char **argv);
+  int crux_set_command_line_options(int argc, char *argv[]);
+
+  virtual int main(int argc, char** argv);
+  virtual std::string getName() const;
+  virtual std::string getDescription() const;
+  virtual std::vector<std::string> getArgs() const;
+  virtual std::vector<std::string> getOptions() const;
+  virtual bool needsOutputDirectory() const;
+  virtual COMMAND_T getCommand() const;
+  FILE_FORMAT_T check_file_format(string &filePath);
+  string file_extension(string filename); 
+  void get_protein_id(int pepind, vector<string> &prot); 
+  void  print_protein_ids(vector<string> &prots, ofstream &os, int psmind);  
+
+protected:
+
+    Dataset d;
+    string res_prefix;
+
+    PepScores fullset; 
+    PepScores trainset,testset,thresholdset;
+
+    PSMScores psmfullset;
+    PSMScores psmtrainset, psmtestset;
+
+    int seed;
+    double selectionfdr;
+    
+    int num_features;
+    NeuralNet net;
+    int num_hu;
+    double mu;
+    double weightDecay;
+    string cleavage_type; 
+    int ind_low;
+    int interval;
+    int niter;
+    int switch_iter;
+    double loss;
+
+    int num_qvals;
+    vector<double> qvals;
+    vector<int> overFDRmulti;
+    vector<int> max_overFDR;
+
+    NeuralNet* max_net_gen;
+    NeuralNet* max_net_targ;
+    NeuralNet *net_clones;
+    
+    int psm_count;
+    vector<int> max_psm_inds;
+    vector<int> pepind_to_max_psmind;
+
+    
+    string in_dir;
+    string out_dir;
+    int skip_cleanup_flag;
+    int overwrite_flag;
+    string fileroot;
+    int feature_file_flag;
+    ostringstream feature_file_name;
+    
+    string file_format_; 
+    
+    TabDelimParser pars;
+    SQTParser* parser; 
+     
+
+};
+
+
+
+#endif /*QRANKER_H_*/
diff --git a/src/app/qranker-barista/PepScores.cpp b/src/app/qranker-barista/PepScores.cpp
new file mode 100644
index 0000000..ccad2e6
--- /dev/null
+++ b/src/app/qranker-barista/PepScores.cpp
@@ -0,0 +1,226 @@
+#include <assert.h>
+#include <iostream>
+#include <fstream>
+#include <utility>
+#include <algorithm>
+#include <set>
+#include <vector>
+#include <string>
+#include <math.h>
+using namespace std;
+#include "PepScores.h"
+#include "util/utils.h"
+
+inline bool operator>(const PepScoreHolder &one, const PepScoreHolder &other) 
+    {return (one.score>other.score);}
+
+inline bool operator<(const PepScoreHolder &one, const PepScoreHolder &other) 
+    {return (one.score<other.score);}
+
+
+
+PepScores::PepScores()
+{
+    factor=1;
+    neg=0;
+    pos=0;
+    posNow=0;
+}
+
+PepScores::~PepScores()
+{
+
+}
+
+void PepScores::clear()
+{
+  scores.clear();
+  pos=neg=posNow = 0;
+}
+
+
+/**
+ * Percentage of target scores that are drawn according to the null.
+ */
+double PepScores::pi0 = 0.9;
+
+
+/**
+ * Calculate the number of targets that score above a specified FDR.
+ */
+int PepScores::calcOverFDR(double fdr) {
+  
+  vector<PepScoreHolder>::iterator it = scores.begin();
+
+  sort(scores.begin(),scores.end());
+  reverse(scores.begin(),scores.end());
+  
+  int positives=0,nulls=0;
+  double efp=0.0,q;
+  posNow = 0;
+  register unsigned int ix=0;
+  for(it=scores.begin();it!=scores.end();it++) {
+    if (it->label!=-1)
+      positives++;
+    if (it->label==-1) {
+      nulls++;
+      efp=pi0*nulls*factor;
+    }
+    if (positives)
+      q=efp/(double)positives;
+    else
+      q=pi0;
+    if (q>pi0)
+      q=pi0;
+    it->q=q;
+    if (fdr>=q)
+      posNow = positives;
+  }
+  for (ix=scores.size();--ix;) {
+    if (scores[ix-1].q > scores[ix].q)
+      scores[ix-1].q = scores[ix].q;  
+  }
+  return posNow;
+}
+
+
+void PepScores::calcMultiOverFDR(vector<double> &fdr, vector<int> &overFDR) {
+ 
+  vector<PepScoreHolder>::iterator it = scores.begin();
+
+  sort(scores.begin(),scores.end());
+  reverse(scores.begin(),scores.end());
+  
+  int positives=0,nulls=0;
+  double efp=0.0,q;
+  register unsigned int ix=0;
+  
+  for(it=scores.begin();it!=scores.end();it++) {
+    if (it->label==1)
+      positives++;
+    if (it->label==-1) {
+      nulls++;
+      efp=pi0*nulls*factor;
+    }
+    if (positives)
+      q=efp/(double)positives;
+    else
+      q=pi0;
+    it->q=q;
+    if (q>pi0)
+      q=pi0;
+       
+    for(unsigned int ct = 0; ct < fdr.size(); ct++)
+      if (fdr[ct]>=q)
+	overFDR[ct] = positives;
+  }
+  for (ix=scores.size();--ix;) {
+    if (scores[ix-1].q > scores[ix].q)
+      scores[ix-1].q = scores[ix].q;  
+  }
+
+}
+
+
+
+void PepScores::fillFeaturesFull(PepScores& full, Dataset& d) {
+ 
+  int n = d.get_num_peptides();
+ 
+  PepScoreHolder s;
+  full.scores.resize(n,s);
+  int num_pos = 0;
+  int num_neg = 0;
+
+  for (int i = 0; i < n; i++)
+    {
+      full.scores[i].pepind = i;
+      int label = d.pepind2label(i);
+      full.scores[i].label = label;
+      if (full.scores[i].label == 1)
+	num_pos++;
+      else
+	num_neg++;
+  }
+  
+  full.pos=num_pos;
+  full.neg=num_neg;
+  full.factor = full.pos/(double)full.neg;
+}
+
+
+void PepScores::fillFeaturesSplit(PepScores& train,PepScores& test, Dataset& d, double ratio) {
+ 
+  int num_pep = d.get_num_peptides();
+  
+  assert(ratio>0 && ratio < 1);
+  int n = num_pep;
+  int k = (int)(n*ratio);
+  int l = n-k;
+ 
+  PepScoreHolder s;
+  
+  //collect everybody 
+  vector<PepScoreHolder> all_examples;
+  all_examples.resize(n,s);
+  for (int i = 0; i < num_pep; i++)
+    {
+      all_examples[i].pepind = i;
+      int label = d.pepind2label(i);
+      all_examples[i].label = label;
+    }
+  
+  //mix up the examples
+  for(int i = 0; i < n; i++)
+    {
+      int p1 = (int)((double)myrandom()/UNIFORM_INT_DISTRIBUTION_MAX*(n-1)); 
+      int p2 = (int)((double)myrandom()/UNIFORM_INT_DISTRIBUTION_MAX*(n-1)); 
+      s = all_examples[p1];
+      all_examples[p1] = all_examples[p2];
+      all_examples[p2] = s;
+    }
+  
+  train.scores.resize(k,s);
+  test.scores.resize(l,s);
+  
+
+  int num_pos_train = 0;
+  int num_neg_train = 0;
+  int num_pos_test = 0;
+  int num_neg_test = 0;
+  //distribute the normal set between train and test
+  for (int i = 0; i < k; i++)
+    {
+      train.scores[i] = all_examples[i];
+      
+      if (train.scores[i].label == 1)
+	num_pos_train++;
+      else
+	num_neg_train++;
+    }
+  for(int i=0; i < l; i++)
+    {
+      test.scores[i] = all_examples[i+k];
+      if (test.scores[i].label == 1)
+	num_pos_test++;
+      else
+	num_neg_test++;
+    }
+  //cout << num_pos_train << " " << num_neg_train << " " << num_pos_test << " " << num_neg_test << "\n";
+  train.pos=num_pos_train;
+  test.pos=num_pos_test;
+  train.neg=num_neg_train;
+  test.neg=num_neg_test;
+  train.factor = train.pos/(double)train.neg;
+  test.factor = train.pos/(double)train.neg;
+  
+}
+
+
+
+
+
+
+
+
+
diff --git a/src/app/qranker-barista/PepScores.h b/src/app/qranker-barista/PepScores.h
new file mode 100644
index 0000000..9403c6b
--- /dev/null
+++ b/src/app/qranker-barista/PepScores.h
@@ -0,0 +1,45 @@
+#ifndef PEPSCORES_H_
+#define PEPSCORES_H_
+#include <vector>
+#include <algorithm>
+using namespace std;
+#include "DataSetCrux.h"
+
+
+class PepScoreHolder{
+public:
+  double score; 
+  int pepind;
+  double q;
+  int label;
+  double nsaf;
+  double PEP;
+ PepScoreHolder():score(0.0),pepind(0),q(0.0),label(0),nsaf(0.0),PEP(0.0){;}
+  virtual ~PepScoreHolder() {;}
+};
+
+class PepScores
+{
+public:
+	PepScores();
+	~PepScores();
+    vector<PepScoreHolder>::iterator begin() {return scores.begin();}
+    vector<PepScoreHolder>::iterator end() {return scores.end();}    
+    static double pi0;
+    double factor;
+    void clear();
+
+    int calcOverFDR(double fdr);
+    void calcMultiOverFDR(vector<double> &fdr, vector<int> &overFDR);
+    inline PepScoreHolder& operator[](int ix){return scores[ix];}    
+    void static fillFeaturesSplit(PepScores& train,PepScores& test,Dataset &d, double ratio);
+    void static fillFeaturesFull(PepScores& full,Dataset &d);
+    inline int size(){return scores.size();}
+protected:
+    int neg,pos,posNow;
+    vector<PepScoreHolder> scores;
+};
+
+
+
+#endif /*PEPSCORES_H_*/
diff --git a/src/app/qranker-barista/ProtScores.cpp b/src/app/qranker-barista/ProtScores.cpp
new file mode 100644
index 0000000..e65049e
--- /dev/null
+++ b/src/app/qranker-barista/ProtScores.cpp
@@ -0,0 +1,917 @@
+#include "ProtScores.h"
+
+
+//inline bool operator<(const ProtScoreHolder &one, const ProtScoreHolder &other) 
+//{return (one.score<other.score);}
+
+inline bool operator<(const ProtScoreHolder &one, const ProtScoreHolder &other) 
+{return (one.score<other.score) || (one.score == other.score && one.protind < other.protind);}
+
+
+
+ProtScores::ProtScores()
+{
+    factor=1;
+    neg=0;
+    pos=0;
+    posNow=0;
+}
+
+ProtScores::~ProtScores()
+{
+}
+
+
+void ProtScores::clear()
+{
+  scores.clear();
+  pos=neg=posNow = 0;
+}
+
+/**
+ * Percentage of target scores that are drawn according to the null.
+ */
+double ProtScores::pi0 = 0.9;
+
+void ProtScores :: fillProteinsFull(ProtScores& fullset, Dataset &d)
+{
+  int n = d.get_num_proteins();
+  ProtScoreHolder s;
+  fullset.scores.resize(n,s);
+  int num_pos = 0;
+  int num_neg = 0;
+  for(int i = 0; i < n; i++)
+    {
+      fullset[i].protind = i;
+      int label = d.protind2label(i);
+      fullset[i].label = label;
+      if(label == 1)
+	num_pos++;
+      else
+	num_neg++;
+    }
+
+  fullset.pos = num_pos;
+  fullset.neg = num_neg;
+  fullset.factor = (double)num_pos/(double)num_neg;
+}
+
+
+int ProtScores :: traverse_peptide(Dataset &d, int pepind, int trn_tst, vector<int> &assignment_array)
+{
+  int num_added = 0;
+  int num_prot = d.pepind2num_prot(pepind);
+  int *protinds = d.pepind2protinds(pepind);
+  for (int i = 0; i < num_prot;i++)
+    {
+      int protind = protinds[i];
+      if(assignment_array[protind] == 0)
+	{
+	  assignment_array[protind] = trn_tst;
+	  int num = traverse_protein(d,protind,trn_tst,assignment_array);
+	  num_added+=num;
+	}
+      else
+	{
+	  if(assignment_array[protind] != trn_tst)
+	    cout << "warning: conflict spliting into trn-tst " << assignment_array[protind] << endl;
+	}
+    }
+  return num_added;
+}
+
+int ProtScores :: traverse_protein(Dataset &d, int protind, int trn_tst, vector<int> &assignment_array)
+{
+  int num_pep = d.protind2num_pep(protind);
+  int *pepinds = d.protind2pepinds(protind);
+  int num_added = 0;
+  for(int i = 0; i < num_pep; i++)
+    {
+      int pepind = pepinds[i];
+      int num = traverse_peptide(d,pepind,trn_tst, assignment_array);
+      num_added += num;
+    }
+  return num_added+1;
+}
+
+void ProtScores :: fillProteinsSplit(ProtScores& train,ProtScores& test,Dataset &d, double ratio)
+{
+  int n = d.get_num_proteins();
+  vector<int> assignment_array;
+  assignment_array.resize(n,0);
+  int num_trn = 0;
+  int num_tst = 0;
+  int trn_tst = 0;
+  int max_num = 0;
+  for(int i = 0; i < n; i++)
+    {
+      if(assignment_array[i] == 0)
+	{
+	  if (num_trn >= ratio*num_tst) 
+	    trn_tst = 2;
+	 else
+	    trn_tst = 1;
+	  assignment_array[i] = trn_tst;
+	  int num = traverse_protein(d, i, trn_tst, assignment_array);
+	  if(num > max_num)
+	    {
+	      max_num = num;
+	      //cout << "max_num " << max_num << endl;
+	    }
+	
+	  if (trn_tst == 1) 
+	    num_trn += num;
+	  else
+	    num_tst += num;
+	} 
+    } 
+  //cout << "total proteins " << num_trn+num_tst << " trainset size " << num_trn << " testeset size " << num_tst << " ratio " << (double)num_trn/(double)num_tst << endl;
+  //cout << "total proteins " << num_trn+num_tst << " trainset size " << num_trn << " testeset size " << num_tst << endl;
+
+  int trn= 0;
+  int tst= 0;
+  int num_pos_trn = 0;
+  int num_neg_trn = 0;
+  int num_pos_tst = 0;
+  int num_neg_tst = 0;
+
+  ProtScoreHolder s;
+  train.scores.resize(num_trn,s);
+  test.scores.resize(num_tst,s);
+
+  for(unsigned int i = 0; i < assignment_array.size();i++)
+    {
+      if(assignment_array[i] == 1)
+	{
+	  train[trn].protind = i;
+	  int label = d.protind2label(i);
+	  train[trn].label = label;
+	  if(label == 1)
+	    num_pos_trn++;
+	  else
+	    num_neg_trn++;
+	  trn++;
+	}
+      else if (assignment_array[i] == 2)
+	{
+	  test[tst].protind = i;
+	  int label = d.protind2label(i);
+	  test[tst].label = label;
+	  if(label == 1)
+	    num_pos_tst++;
+	  else
+	    num_neg_tst++;
+	  tst++;
+	}
+      else
+	cout << "protein_not assigned!\n";
+    }
+
+    train.pos=num_pos_trn;
+    test.pos=num_pos_tst;
+    train.neg=num_neg_trn;
+    test.neg=num_neg_tst;
+    train.factor = (double)train.pos/(double)train.neg;
+    test.factor = (double)train.pos/(double)train.neg;
+
+}
+
+
+int ProtScores::calcOverFDR(double fdr) {
+  
+  vector<ProtScoreHolder>::iterator it = scores.begin();
+
+  sort(scores.begin(),scores.end());
+  reverse(scores.begin(),scores.end());
+  
+  /*
+  ProtScoreHolder s;
+  for(int i = scores.size()-1; i > 0; i--)
+    {
+      if(scores[i].score == scores[i-1].score)
+	{
+	  if(scores[i].protind < scores[i-1].protind)
+	    {
+	      s = scores[i];
+	      scores[i] = scores[i-1];
+	      scores[i-1] = scores[i];
+	    }
+	}
+    }
+  */
+
+  int positives=0,nulls=0;
+  double efp=0.0,q;
+  posNow = 0;
+  register unsigned int ix=0;
+  for(it=scores.begin();it!=scores.end();it++) {
+    if (it->label!=-1)
+      positives++;
+    if (it->label==-1) {
+      nulls++;
+      efp=pi0*nulls*factor;
+    }
+    if (positives)
+      q=efp/(double)positives;
+    else
+      q=pi0;
+    if (q>pi0)
+      q=pi0;
+    it->q=q;
+    if (fdr>=q)
+      posNow = positives;
+  }
+
+  for (ix=scores.size();--ix;) {
+    if (scores[ix-1].q > scores[ix].q)
+      scores[ix-1].q = scores[ix].q;  
+  }
+  return posNow;
+}
+
+
+
+void ProtScores :: get_pep_seq(string &pep, string &seq)
+{
+  string tmp;
+  size_t pos = pep.find('.');
+  if(pos > 0 && pos != string::npos)
+    tmp = pep.substr(pos+1,pep.size());
+  pos = tmp.rfind('.');
+  if(pos > 0 && pos != string::npos)
+    tmp = tmp.substr(0,pos);
+  seq = tmp;
+}
+
+int ProtScores :: is_equivalent_pep(Dataset &d, int protind1, string &pep2)
+{
+
+  int num_pep1 = d.protind2num_pep(protind1);
+  int *pepinds1 = d.protind2pepinds(protind1);
+
+  string p2;
+  get_pep_seq(pep2,p2);
+  
+  for(int j = 0; j < num_pep1; j++)
+    {
+      string pep1 = d.ind2pep(pepinds1[j]);
+      
+      int flag = 1;
+      if(pep1.size() != pep2.size())
+	flag = 0;
+      
+      string p1;
+      get_pep_seq(pep1, p1);
+      
+      unsigned int ix1 = 0; unsigned int ix2 = 0; 
+      while((flag == 1) && (ix1 < p1.size()) && (ix2 < p2.size()))
+	{
+	  char c1 = p1.at(ix1);
+	  char c2 = p2.at(ix2);
+	  
+	  if(c1 != c2)
+	    {
+	      flag = 0;
+	      
+	      if(c1 == 'L' && c2 =='I')
+		flag = 1;
+	      
+	      if(c1 == 'I' && c2 =='L')
+		flag = 1;
+	      if(c1 == 'T' && c2 =='S')
+		flag = 1;
+	      if(c1 == 'S' && c2 =='T')
+		flag = 1;
+	    }
+	  ix1++; ix2++;
+	}
+      if(flag == 1)
+	return pepinds1[j];
+	
+    }
+  return 0;
+    
+}
+
+bool ProtScores :: is_equivalent(Dataset &d, int protind1, vector<int> &pep_set)
+{
+  
+  for(unsigned int i = 0; i < pep_set.size(); i++)
+    {
+      string pep2 = d.ind2pep(pep_set[i]);
+      if(is_equivalent_pep(d, protind1, pep2) == 0)
+	return false;
+    }
+  return true;
+}
+
+
+
+bool ProtScores :: is_subset(Dataset &d, int protind1, int protind2)
+{
+  int num_pep1 = d.protind2num_pep(protind1);
+  int *pepinds1 = d.protind2pepinds(protind1);
+  int num_pep2 = d.protind2num_pep(protind2);
+  int *pepinds2 = d.protind2pepinds(protind2);
+
+  vector<int> only2;
+
+  int ix1 = 0;
+  int ix2 = 0;
+  
+  while(ix1 < num_pep1 && ix2 < num_pep2)
+    {
+      if(pepinds1[ix1] == pepinds2[ix2])
+	{
+	  ix1++; ix2++;
+	}
+      else if(pepinds1[ix1] < pepinds2[ix2])
+	ix1++;
+      else
+	{
+	  only2.push_back(pepinds2[ix2]); ix2++;
+	}
+    }
+  while(ix2 < num_pep2)
+    {
+      only2.push_back(pepinds2[ix2]);
+      ix2++;
+    }
+  if(only2.size() == 0)
+    return true;
+  else 
+    return is_equivalent(d, protind1, only2);
+}
+
+bool ProtScores :: are_equal(Dataset &d, int protind1, int protind2, vector<int> &overlap, vector<int> &only1, vector<int> &only2)
+{
+  int num_pep1 = d.protind2num_pep(protind1);
+  int *pepinds1 = d.protind2pepinds(protind1);
+  int num_pep2 = d.protind2num_pep(protind2);
+  int *pepinds2 = d.protind2pepinds(protind2);
+  
+  int ix1 = 0;
+  int ix2 = 0;
+  overlap.clear();
+  only1.clear();
+  only2.clear();
+  
+  while(ix1 < num_pep1 && ix2 < num_pep2)
+    {
+      if(pepinds1[ix1] == pepinds2[ix2])
+	{
+	  overlap.push_back(pepinds1[ix1]);
+	  ix1++; ix2++;
+	  
+	}
+      else if(pepinds1[ix1] < pepinds2[ix2])
+	{
+	  only1.push_back(pepinds1[ix1]);
+	  ix1++;
+	}
+      else
+	{
+	  only2.push_back(pepinds2[ix2]); ix2++;
+	}
+    }
+  while(ix1 < num_pep1)
+    {
+      only1.push_back(pepinds1[ix1]);
+      ix1++;
+    }
+  while(ix2 < num_pep2)
+    {
+      only2.push_back(pepinds2[ix1]);
+      ix2++;
+    }
+
+  if(only1.size() == 0 && only2.size() == 0)
+    return true;
+  else
+    //return (is_equivalent(d, protind1, only2) && is_equivalent(d, protind2, only1)); 
+    return false;
+}
+
+void ProtScores :: get_intersection(vector<int> &set1, vector<int> &set2, vector<int> &result)
+{
+  result.clear();
+  unsigned int ix1 = 0;
+  unsigned int ix2 = 0;
+  while(ix1 < set1.size() && ix2 < set2.size())
+    {
+      if(set1[ix1] == set2[ix2])
+	{
+	  result.push_back(set1[ix1]);
+	  ix1++; ix2++;
+	  
+	}
+      else if(set1[ix1] < set2[ix2])
+	{
+	  ix1++;
+	}
+      else
+	{
+	  ix2++;
+	}
+    }
+}
+
+
+void ProtScores :: get_complement(Dataset &d, int protind1, vector<int> &set2, vector<int> &result)
+{
+  int num_pep1 = d.protind2num_pep(protind1);
+  int *pepinds1 = d.protind2pepinds(protind1);
+
+  result.clear();
+  int ix1 = 0;
+  unsigned int ix2 = 0;
+  while(ix1 < num_pep1 && ix2 < set2.size())
+    {
+      if(pepinds1[ix1] == set2[ix2])
+	{
+	  ix1++; ix2++;
+	}
+      else if(pepinds1[ix1] < set2[ix2])
+	{
+	  result.push_back(pepinds1[ix1]);
+	  ix1++;
+	}
+      else
+	{
+	  ix2++;
+	}
+    }
+  while(ix1 < num_pep1)
+    {
+      result.push_back(pepinds1[ix1]);
+      ix1++;
+    }
+}
+
+
+void ProtScores :: make_meta_set(Dataset &d)
+{
+  map<int,int>protind2pos_in_array;
+  for(unsigned int i = 0; i < scores.size(); i++)
+    {
+      int protind = scores[i].protind;
+      protind2pos_in_array[protind] = i;
+    }
+
+  vector<int> processed;
+  processed.resize(d.get_num_proteins(),0);
+
+  int group_num = 0;
+  for(unsigned int i = 0; i < scores.size();i++)
+    {
+      int protind1 = scores[i].protind;
+      if(processed[protind1] == 1)
+	continue;
+      processed[protind1] = 1;
+      group_num++;
+      scores[i].group_number = group_num;
+      
+      int num_pep1 = d.protind2num_pep(protind1);
+      int *pepinds = d.protind2pepinds(protind1);
+      int flag = 0;
+      for(int j = 0; j < num_pep1; j++)
+	{
+	  int pepind = pepinds[j];
+	  int num_prot = d.pepind2num_prot(pepind);
+	  int *protinds = d.pepind2protinds(pepind);
+	  
+	  for(int k = 0; k < num_prot; k++)
+	    {
+	      int protind2 = protinds[k];
+	      int pos_in_array = protind2pos_in_array[protind2];
+	      assert(scores[pos_in_array].protind == protind2);
+	      if(protind2 == protind1)
+		{
+		  flag = 1;
+		  continue;
+		}
+	      else if (processed[protind2] == 1)
+		continue;
+	      else
+		{
+		  if(is_subset(d,protind1, protind2) && is_subset(d,protind2,protind1)) 
+		    {
+		      processed[protind2] = 1;
+		      (scores[i].indistinguishable_protinds).push_back(protind2);
+		      scores[pos_in_array].group_number = group_num;
+		      scores[pos_in_array].indistinguishable_prot = 1;
+		    }
+		}
+	    }
+	}
+      assert(flag == 1);
+    }
+  
+  cout << "number of meta groups " << group_num <<endl;
+  
+  //do some checks
+  map<int, set<int> > protind2group;
+  map<int, set<int> > group2protind;
+  int count = 0;
+  for(unsigned int i = 0; i < scores.size(); i++)
+    {
+      int protind = scores[i].protind;
+      int group = scores[i].group_number;
+      //protind2group[protind].insert(group);
+      //group2protind[group].insert(protind);
+      if(scores[i].indistinguishable_prot == 0)
+	{
+	  count++;
+	  vector<int> same_prot_list = scores[i].indistinguishable_protinds;
+	  if(same_prot_list.size() > 0)
+	    {
+	      vector<int> same_prot_list = scores[i].indistinguishable_protinds;
+	      
+	      for(unsigned int k = 0; k < same_prot_list.size(); k++)
+		{
+		  int protind2 = same_prot_list[k];
+		  int pos_in_array = protind2pos_in_array[protind2];
+		  assert(scores[pos_in_array].protind == protind2);
+		  assert(scores[pos_in_array].indistinguishable_prot == 1);
+		  assert(scores[pos_in_array].group_number == group);
+		
+		  vector<int> overlap;
+		  vector<int> only1;
+		  vector<int> only2;
+		  if(!are_equal(d, protind, protind2, overlap, only1, only2))
+		    scores[i].has_complement = 1;
+		}
+	    }
+	}
+    }
+    
+  //make sure that each protein belongs only to a single group
+  //for(map<int, set<int> > :: iterator it = protind2group.begin(); it != protind2group.end(); it++)
+  //assert((it->second).size() == 1);
+  
+  for(unsigned int i = 0; i < scores.size(); i++)
+    {
+      if(scores[i].indistinguishable_prot == 1)
+	continue;
+      
+      int protind = scores[i].protind;
+      //int group = scores[i].group_number;
+      vector<int> same_prot_list = scores[i].indistinguishable_protinds;
+      
+      //do a couple more checks
+      //if(same_prot_list.size() > 0)
+      //{
+      //  set<int> protinds_in_group = group2protind[group];
+      //  assert(same_prot_list.size()+1 == protinds_in_group.size());
+      //}
+
+      if(scores[i].has_complement == 1)
+	{
+	  vector<int> intersection;
+	  int num_pep = d.protind2num_pep(protind);
+	  int *pepinds = d.protind2pepinds(protind);
+	  for(int k = 0; k < num_pep; k++)
+	    intersection.push_back(pepinds[k]);
+	  vector<int> complement;
+	  map<int, vector<int> > protind2complement;
+	  for(unsigned int k = 0; k < same_prot_list.size(); k++)
+	    {
+	      vector<int> overlap;
+	      vector<int> only1;
+	      vector<int> only2;
+	      int protind2 = same_prot_list[k];
+	      are_equal(d, protind, protind2, overlap, only1, only2);
+	      vector<int> result;
+	      get_intersection(intersection, overlap, result);
+	      intersection = result;
+	    }
+	  
+	  for(unsigned int k = 0; k < same_prot_list.size(); k++)
+	    {
+	      int protind2 = same_prot_list[k];
+	      get_complement(d, protind2, intersection, complement);
+	      protind2complement[protind2] = complement;
+	    }
+	
+	  get_complement(d, protind, intersection, complement);
+	  protind2complement[protind] = complement;
+	  
+	  scores[i].intersection = intersection;
+	  scores[i].protind2complement = protind2complement;
+	}
+    }
+  
+
+  //now find the subsets
+  for(unsigned int i = 0; i < scores.size();i++)
+    {
+      //if this is a protein that is indistinguishable from some other, don't consider it
+      if(scores[i].indistinguishable_prot == 1)
+	continue;
+      
+      int protind1 = scores[i].protind;
+      int num_pep1 = d.protind2num_pep(protind1);
+      int *pepinds = d.protind2pepinds(protind1);
+      
+      int flag = 0;
+      for(int j = 0; j < num_pep1; j++)
+	{
+	  int pepind = pepinds[j];
+	  int num_prot = d.pepind2num_prot(pepind);
+	  int *protinds = d.pepind2protinds(pepind);
+	  
+	  for(int k = 0; k < num_prot; k++)
+	    {
+	      int protind2 = protinds[k];
+	      int pos_in_array = protind2pos_in_array[protind2];
+	      assert(protind2 == scores[pos_in_array].protind);
+	      int group = scores[pos_in_array].group_number;
+	      int found = 0;
+	      for(unsigned int k = 0; k < scores[i].parent_groups.size(); k++)
+		{
+		  if(scores[i].parent_groups[k] == group)
+		    {
+		      found = 1; 
+		      break;
+		    }
+		}
+	      if(found == 1)
+		continue;
+	      else if(protind2 == protind1)
+		{
+		  flag = 1;
+		  continue;
+		}
+	      else if (scores[pos_in_array].indistinguishable_prot == 1)
+		continue;
+	      else
+		{
+		  // is protind1 subset of protind2
+		  if(is_subset(d,protind2,protind1))
+		    {
+		      (scores[i].parent_groups).push_back(group);
+		      scores[i].subset_prot=1;
+		      (scores[pos_in_array].subset_protinds).push_back(protind1);
+		    }
+		
+		}
+	    }
+	}
+      assert(flag == 1);
+    }
+
+  
+  //do some checking
+  int num_unique = 0;
+  int num_same = 0;
+  int num_subset = 0;
+  for(unsigned int i = 0; i < scores.size(); i++)
+    {
+      if(scores[i].indistinguishable_prot == 1)
+	num_same++;
+      else if(scores[i].subset_prot == 1)
+	num_subset++;
+      else
+	{
+	  num_unique++;
+	
+	  //int protind = scores[i].protind;
+	  //int group = scores[i].group_number;
+	  //if(scores[i].subset_protinds.size() > 0)
+	  //{
+	  //  for(int j = 0; j < scores[i].subset_protinds.size(); j++)
+	  //{
+	  //  int protind2 = scores[i].subset_protinds[j];
+	  //  assert(is_subset(d,protind, protind2));
+	  //  int pos_in_array = protind2pos_in_array[protind2];
+	  //  assert(scores[pos_in_array].subset_prot == 1);
+	  //  int flag = 0;
+	  //  for(int k = 0; k < scores[pos_in_array].parent_groups.size(); k++)
+	  //    {
+	  //      if(scores[pos_in_array].parent_groups[k] == group)
+	  //	flag = 1;
+	  //    }
+	  //  assert(flag == 1);
+	  //}
+	}
+      
+    }
+  
+  cout << "number of subset groups " << num_subset << endl;
+
+  ProtScoreHolder s;
+  scores_meta.resize(num_unique,s);
+  scores_same.resize(num_same,s);
+  scores_subset.resize(num_subset,s);
+  
+  int idx_unique = 0;
+  int idx_same = 0;
+  int idx_subset = 0;
+
+  for(unsigned int i = 0; i < scores.size(); i++)
+    {
+      if(scores[i].indistinguishable_prot == 1)
+	{
+	  scores_same[idx_same] = scores[i];
+	  idx_same++;
+	}
+      else if(scores[i].subset_prot == 1)
+	{
+	  scores_subset[idx_subset] = scores[i];
+	  idx_subset++;
+	}
+      else
+	{
+	  scores_meta[idx_unique] = scores[i];
+	  idx_unique++;
+	}
+    }
+
+  assert((idx_unique+idx_subset) == group_num);
+  assert((idx_unique+idx_subset+idx_same) == (int)scores.size());
+
+  scores.clear();
+  scores = scores_meta;
+  scores_meta.clear();
+
+}
+
+
+
+/*
+bool ProtScores :: is_subset(Dataset &d, int protind1, int protind2)
+{
+  int num_pep1 = d.protind2num_pep(protind1);
+  int *pepinds1 = d.protind2pepinds(protind1);
+  int num_pep2 = d.protind2num_pep(protind2);
+  int *pepinds2 = d.protind2pepinds(protind2);
+  
+  int ix1 = 0;
+  int ix2 = 0;
+  vector<int> overlap;
+  vector<int> only1;
+  vector<int> only2;
+  
+  while(ix1 < num_pep1 && ix2 < num_pep2)
+    {
+      if(pepinds1[ix1] == pepinds2[ix2])
+	{
+	  ix1++; ix2++;
+	}
+      else if(pepinds1[ix1] < pepinds2[ix2])
+	ix1++;
+      else
+	{
+	  only2.push_back(pepinds2[ix2]); ix2++;
+	}
+    }
+  if(only2.size() == 0)
+    return true;
+  for(unsigned int i = 0; i < only2.size(); i++)
+    {
+      string pep2 = d.ind2pep(only2[i]);
+      string p2;
+      size_t pos = pep2.find('.');
+      if(pos > 0 && pos != string::npos)
+	p2 = pep2.substr(pos+1,pep2.size());
+      pos = p2.find('.');
+      if(pos > 0 && pos != string::npos)
+	p2 = p2.substr(0,pos);
+      
+      for(int j = 0; j < num_pep1; j++)
+	{
+	  string pep1 = d.ind2pep(pepinds1[j]);
+	  string p1;
+	  pos = pep1.find('.');
+	  if(pos > 0 && pos != string::npos)
+	    p1 = pep1.substr(pos+1,pep1.size());
+	  pos = p1.find('.');
+	  if(pos > 0 && pos != string::npos)
+	    p1 = p1.substr(0,pos);
+	  
+	  unsigned int ix1 = 0; unsigned int ix2 = 0;
+	  while(ix1 < p1.size() && ix2 < p2.size())
+	    {
+	      char c1 = p1.at(ix1);
+	      char c2 = p2.at(ix2);
+	      if(c1 != c2)
+		{
+		  if(c1 == 'L' || c1 =='I')
+		    {
+		      if(c2 != 'L' && c2 !='I')
+			return false; 
+		    }
+		  else if (c1 == 'T' || c1 =='S')
+		    {
+		      if(c2 != 'T' && c2 !='S')
+			return false;
+		    }
+		  else
+		    return false;
+		}
+	      ix1++; ix2++;
+	    }
+  	}
+    }
+  return true;
+}
+
+
+
+void ProtScores :: make_meta_set(Dataset &d)
+{
+  for(unsigned int i = 0; i < scores.size(); i++)
+    {
+      int protind = scores[i].protind;
+      int num_pep = d.protind2num_pep(protind);
+      scores[i].score = (double) num_pep;
+    }
+  sort(scores.begin(),scores.end());
+  reverse(scores.begin(),scores.end());
+
+  vector<int> used_prot;
+  used_prot.resize(d.get_num_proteins(),0);
+
+  vector<int> processed;
+  processed.resize(d.get_num_proteins(),0);
+
+  for(unsigned int i = 0; i < scores.size();i++)
+    {
+      int protind1 = scores[i].protind;
+      if(processed[protind1] == 1)
+	continue;
+      processed[protind1] = 1;
+
+      int num_pep = d.protind2num_pep(protind1);
+      int *pepinds = d.protind2pepinds(protind1);
+
+      int flag = 0;
+      for(int j = 0; j < num_pep; j++)
+	{
+	  int pepind = pepinds[j];
+	  int num_prot = d.pepind2num_prot(pepind);
+	  int *protinds = d.pepind2protinds(pepind);
+	  
+	  for(int k = 0; k < num_prot; k++)
+	    {
+	      int protind2 = protinds[k];
+	      if(protind2 == protind1)
+		flag = 1;
+	      else if (used_prot[protind2] == 1)
+		continue;
+	      else if (processed[protind2] == 1)
+		continue;
+	      else
+		{
+		  //if(d.is_prot_subset(protind1, protind2)) 
+		  if(is_subset(d,protind1, protind2)) 
+		    {
+		      processed[protind2] = 1;
+		      used_prot[protind2] = 1;
+		      (scores[i].subset_protinds).push_back(protind2);
+		    }
+		}
+	    }
+	}
+      assert(flag == 1);
+    }
+  
+  for(unsigned int i = 0; i < scores.size(); i++)
+    {
+      int protind = scores[i].protind;
+      if(used_prot[protind] == 1)
+	{
+	  //if(scores[i].subset_protinds.size()!=0)
+	  //cout << " here " << scores[i].subset_protinds.size() << " " << i  << " " << scores[i].subset_protinds[0]<< endl;
+	  scores[i].in_meta_prot = 1;
+	}
+    }
+  
+  for(unsigned int i = 0; i < scores.size(); i++)
+    {
+      for(unsigned int k = 0; k < scores[i].subset_protinds.size(); k++)
+	{
+	  int protind = scores[i].subset_protinds[k];
+	  assert(used_prot[protind] == 1);
+	  assert(d.is_prot_subset(scores[i].protind, protind));
+	    
+	}
+    }
+  
+  if(0)
+    {
+      ProtScoreHolder s;
+      //mix up the examples
+      int n = scores.size();
+      for(int i = 0; i < n; i++)
+	{
+	  int p1 = (int)((double)rand()/RAND_MAX*(n-1)); 
+	  int p2 = (int)((double)rand()/RAND_MAX*(n-1)); 
+	  s = scores[p1];
+	  scores[p1] = scores[p2];
+	  scores[p2] = s;
+	}
+    }
+   
+}
+*/
diff --git a/src/app/qranker-barista/ProtScores.h b/src/app/qranker-barista/ProtScores.h
new file mode 100644
index 0000000..27a08aa
--- /dev/null
+++ b/src/app/qranker-barista/ProtScores.h
@@ -0,0 +1,78 @@
+#ifndef PROTSCORES_H_
+#define PROTSCORES_H_
+#include <vector>
+#include <algorithm>
+#include <string>
+using namespace std;
+#include "DataSetCrux.h"
+
+class ProtScoreHolder{
+public:
+  double score; 
+  int protind;
+  int label;
+  double q;
+  double nsaf;
+  double PEP;
+  //meta group number
+  int group_number;
+  //flag indicating that it is protein identical to some other protein in terms of peptide composition
+  int indistinguishable_prot;
+  int subset_prot;
+  //inds of identical prots in terms of their peptide composition
+  vector<int> indistinguishable_protinds;
+  vector<int> subset_protinds;
+  vector<int> parent_groups;
+  
+  int has_complement;
+  //intersection of peptides in a group
+  vector<int> intersection;
+  map<int, vector<int> > protind2complement;
+ ProtScoreHolder():score(0.0),protind(0),q(0.0),nsaf(0.0),PEP(0.0),group_number(0),indistinguishable_prot(0),subset_prot(0), has_complement(0){;}
+  ~ProtScoreHolder() {;}
+};
+
+
+class ProtScores
+{
+public:
+	ProtScores();
+	~ProtScores();
+	void clear();
+    vector<ProtScoreHolder>::iterator begin() {return scores.begin();}
+    vector<ProtScoreHolder>::iterator end() {return scores.end();}    
+    static double pi0;
+    double factor;
+
+    int calcOverFDR(double fdr);
+    void calcMultiOverFDR(vector<double> &fdr, vector<int> &overFDR);
+    inline ProtScoreHolder& operator[](int ix){return scores[ix];}
+    void static fillProteinsFull(ProtScores& fullset, Dataset &d);
+    int static traverse_peptide(Dataset &d, int pepind, int trn_tst, vector<int> &assignment_array);
+    int static traverse_protein(Dataset &d, int protind, int trn_tst, vector<int> &assignment_array);
+    void static fillProteinsSplit(ProtScores& train,ProtScores& test,Dataset &d, double ratio);
+    void make_meta_set(Dataset &d);
+    bool is_subset(Dataset &d, int protind1, int protind2);
+    bool are_equal(Dataset &d, int protind1, int protind2, vector<int> &overlap, vector<int> &only1, vector<int> &only2);
+    void get_pep_seq(string &pep, string &seq);
+    int is_equivalent_pep(Dataset &d, int protind1, string &pep2);
+    bool is_equivalent(Dataset &d, int protind1, vector<int> &pep_set);
+    void get_intersection(vector<int> &set1, vector<int> &set2, vector<int> &result);
+    void get_complement(Dataset &d, int protind1, vector<int> &set2, vector<int> &result);
+
+    inline int get_num_subsets(){return scores_subset.size();}
+    inline ProtScoreHolder& get_subset_prot(int i){return scores_subset[i];}
+
+    inline int size(){return scores.size();}
+protected:
+    int neg,pos,posNow;
+    vector<ProtScoreHolder> scores;
+    vector<ProtScoreHolder> scores_meta;
+    vector<ProtScoreHolder> scores_same;
+    vector<ProtScoreHolder> scores_subset;
+
+};
+
+
+
+#endif /*PROTSCORES_H_*/
diff --git a/src/app/qranker-barista/QRanker.cpp b/src/app/qranker-barista/QRanker.cpp
new file mode 100644
index 0000000..cfa4d8f
--- /dev/null
+++ b/src/app/qranker-barista/QRanker.cpp
@@ -0,0 +1,1281 @@
+#include "QRanker.h"
+#include "util/modifications.h"
+#include "util/Params.h"
+#include "app/ComputeQValues.h"
+
+QRanker::QRanker() :  
+  seed(0),
+  selectionfdr(0.01),
+  num_hu(4),
+  mu(0.01),
+  weightDecay(0.000),
+  max_net_gen(NULL),
+  max_net_targ(NULL),
+  nets(NULL),
+  in_dir(""), 
+  out_dir(""), 
+  skip_cleanup_flag(0),
+  overwrite_flag(0),
+  fileroot(""),
+  feature_file_flag(0),
+  file_format_("")
+{
+}
+
+QRanker::~QRanker()
+{
+  delete [] max_net_gen;
+  delete [] max_net_targ;
+  delete [] nets;
+}
+
+int QRanker :: getOverFDR(PSMScores &set, NeuralNet &n, double fdr)
+{
+  double *r;
+  double* featVec;
+
+  for(int i = 0; i < set.size(); i++)
+    {
+      featVec = d.psmind2features(set[i].psmind);
+      r = n.fprop(featVec);
+      set[i].score = r[0];
+
+    }
+  return set.calcOverFDR(fdr);
+}
+
+
+void QRanker :: getMultiFDR(PSMScores &set, NeuralNet &n, vector<double> &qvalues)
+{
+  double *r;
+  double* featVec;
+   
+  for(int i = 0; i < set.size(); i++)
+    {
+      featVec = d.psmind2features(set[i].psmind);
+      r = n.fprop(featVec);
+      set[i].score = r[0];
+    }
+ 
+  for(unsigned int ct = 0; ct < qvalues.size(); ct++)
+    overFDRmulti[ct] = 0;
+  set.calcMultiOverFDR(qvalues, overFDRmulti);
+}
+
+void QRanker :: getMultiFDRXCorr(PSMScores &set, vector<double> &qvalues)
+{
+  double r;
+  double* featVec;
+   
+  for(int i = 0; i < set.size(); i++)
+    {
+      featVec = d.psmind2features(set[i].psmind);
+      r = featVec[3];
+      set[i].score = r;
+    }
+ 
+  for(unsigned int ct = 0; ct < qvalues.size(); ct++)
+    overFDRmulti[ct] = 0;
+  set.calcMultiOverFDR(qvalues, overFDRmulti);
+}
+
+
+void QRanker :: printNetResults(vector<int> &scores)
+{
+  double qv; int fdr;
+  cerr << "QVALS SCORES:: ";
+  for(unsigned int count = 0; count < qvals.size();count++)
+    {  
+      qv=qvals[count]; 
+      fdr = scores[count];
+      cerr << qv << ":" << fdr << " ";
+    }
+  cerr << endl;
+}
+
+
+
+
+void QRanker :: write_results()
+{
+  //write out the results of the general net
+  trainset.clear();
+  testset.clear();
+  thresholdset.clear();
+  d.load_labels_psm_training();
+  PSMScores::fillFeaturesFull(fullset, d);
+  d.clear_labels_psm_training();
+
+  //choose the best net for the selectionfdr
+  int max_fdr = 0;
+  int fdr = 0;
+  int ind = 0;
+  for(unsigned int count = 0; count < qvals.size();count++)
+    {
+      fdr = getOverFDR(fullset, max_net_targ[count], selectionfdr);
+      if(fdr > max_fdr) {
+        max_fdr = fdr;
+        ind = count;
+      }
+    }
+  net = max_net_targ[ind];
+  getOverFDR(fullset,net, selectionfdr);
+  d.clear_data_psm_training();
+  
+  d.load_data_psm_results();
+  computePEP();
+
+  ostringstream fname;
+  if (Params::GetBool("txt-output")) {
+    fname << out_dir << "/" << fileroot << "q-ranker.target.psms.txt";
+    ofstream f1(fname.str().c_str()); 
+    fname.str("");
+    fname << out_dir << "/" << fileroot << "q-ranker.decoy.psms.txt";
+    ofstream f2(fname.str().c_str());
+    write_results_psm_tab(f1, f2);
+    f1.close();
+    f2.close();
+    fname.str("");
+  }
+
+  if (Params::GetBool("pepxml-output")) {
+    fname << out_dir << "/" << fileroot << "q-ranker.target.pep.xml";
+    PepXMLWriter xmlfile1;
+    xmlfile1.openFile(fname.str().c_str(), overwrite_flag);
+    fname.str("");
+    fname << out_dir << "/" << fileroot << "q-ranker.decoy.pep.xml";
+    PepXMLWriter xmlfile2;
+    xmlfile2.openFile(fname.str().c_str(), overwrite_flag);
+    write_results_psm_xml(xmlfile1, xmlfile2);
+    xmlfile1.closeFile();
+    xmlfile2.closeFile();
+  }
+  d.clear_data_psm_results();
+}
+
+void QRanker :: write_results_psm_tab(ofstream &osTarget, ofstream &osDecoy)
+{
+  int ps =fullset[0].psmind; 
+  ofstream* streams[2] = {&osTarget, &osDecoy};
+  for (size_t i = 0; i < 2; ++i) {
+    ofstream& os = *streams[i];
+    os << "scan" << "\t" << "charge" << "\t" << "q-ranker q-value" << "\t" ;
+    os<< "q-ranker score" << "\t" << "q-ranker PEP\t"; 
+    os<<"spectrum precursor m/z"<<"\t";
+    os<<"spectrum neutral mass"<<"\t"; 
+    os<<"peptide mass"<<"\t";
+    os<< "delta_cn"<< "\t";
+    if(d.psmind2spscore(ps)!=-1){
+      os<<"sp score"<<"\t";
+      os<<"sp rank\t";
+    }
+    os<<"xcorr score"<<"\t";
+    os<<"xcorr rank"<<"\t";
+    if(d.psmind2spscore(ps)!=-1){
+      os<<"b/y ions matched"<<"\t";
+      os<<"b/y ions total"<<"\t";
+    }
+    os<<"distinct matches/spectrum"<<"\t";
+    os<<"sequence"<<"\t";
+    os<<"cleavage type"<<"\t"; 
+    os<<"protein id"<<"\t";
+    os<<"flanking aa"<<"\t";
+    os<< "filename" << endl;
+  }
+  for(int i = 0; i < fullset.size(); i++){
+    ofstream& os = (fullset[i].label == 1) ? osTarget : osDecoy;
+    int psmind = fullset[i].psmind;
+    int pepind = d.psmind2pepind(psmind);
+    string pep = d.ind2pep(pepind);
+    string seq, n,c;
+    os << d.psmind2scan(psmind) << "\t" ;
+    os<< d.psmind2charge(psmind) << "\t"; 
+    os<< fullset[i].q << "\t" ;
+    os<< fullset[i].score << "\t"; 
+    os<< fullset[i].PEP << "\t"; 
+    //mass-to-charge ratio 
+    os<<(d.psmind2precursor_mass(psmind)+
+    d.psmind2charge(psmind)*MASS_PROTON)/
+    d.psmind2charge(psmind)<<"\t";
+    //Spectrum Neutral Mass 
+    os<<d.psmind2precursor_mass(psmind)<<"\t";
+    //Peptide Mass
+    os<<d.psmind2peptide_mass(psmind)<<"\t";
+    //DELTA CN
+    os <<d.psmind2deltaCn(psmind)<< "\t";
+    if(d.psmind2spscore(ps)!=-1){
+      //Sp Score
+      os<<d.psmind2spscore(psmind)<<"\t";
+      //Sp Rank 
+      os<<d.psmind2sp_rank(psmind)<<"\t";
+    }
+    //xcorr Score
+    os<<d.psmind2xcorr(psmind)<<"\t";
+    //xcorr rank
+    os<<d.psmind2xcorr_rank(psmind)<<"\t";
+    if(d.psmind2spscore(ps)!=-1){
+      //by ions match 
+      os<<d.psmind2by_ions_matched(psmind)<<"\t"; 
+      //by ions total 
+      os<<d.psmind2by_ions_total(psmind)<<"\t";
+    }
+    //Matches/Spectrum 
+    os<<d.psmind2matches_spectrum(psmind)<<"\t";
+    get_pep_seq(pep,seq,n,c);
+    //Sequence 
+    os<<seq<<"\t";
+    //cleavage type
+    os<<cleavage_type<<"\t";
+    //protein id
+    vector<string> prots;  
+    get_protein_id(pepind,prots);
+
+     // TODO: find peptide position in SQT files 
+    //sqt files do not return peptide position in the protein.
+    //if the search result file is txt we can find file peptide_pos and print it 
+    // in front of protein, else do not print anything
+    if(file_format_=="txt"){
+      for (unsigned int j=0;j<prots.size();j++){
+	os << prots[j];
+	if (d.psmind2peptide_position(psmind) > -1) {
+	  os << "("<<d.psmind2peptide_position(psmind)<<")";
+	}
+	if (j == prots.size() - 1) {
+	  os << "\t";
+	} else {
+	  os << ",";
+	}
+      }
+    }else if(file_format_=="sqt"){ 
+     
+      for (unsigned int j=0;j<prots.size();j++){
+        if(j==prots.size()-1)
+          os<<prots[j]<<"\t"; 
+        else 
+          os<<prots[j]<<",";
+      }
+     }
+    //Flanking_aa 
+    os<<n<<c;
+    //TODO temp fix to write a set of flanking AAs per protein
+    for(unsigned int j=1;j<prots.size();j++)
+      os<<','<<n<<c;
+    os<<'\t';
+    os<< d.psmind2fname(psmind) << endl;
+  }
+}
+
+
+void QRanker :: get_pep_seq(string &pep, string &seq, string &n, string &c)
+{
+  string tmp;
+  int pos;
+  pos = pep.find('.');
+  n = pep.at(pos-1); 
+  tmp = pep.substr(pos+1, pep.size());
+
+  pos = tmp.rfind('.');
+  c = tmp.at(pos+1);
+  seq = tmp.substr(0, pos);
+}
+
+
+void QRanker ::write_results_psm_xml(
+  PepXMLWriter& xmlfileTarget,
+  PepXMLWriter& xmlfileDecoy)
+{
+  xmlfileTarget.writeHeader();
+  xmlfileDecoy.writeHeader();
+
+  bool* scores_to_print = new bool[NUMBER_SCORER_TYPES];
+  for(int score_idx = 0; score_idx < NUMBER_SCORER_TYPES; score_idx++){
+    scores_to_print[score_idx] = false;
+  }
+  scores_to_print[SP] = true; 
+  scores_to_print[XCORR] = true;
+  scores_to_print[QRANKER_SCORE] = true;
+  scores_to_print[QRANKER_QVALUE] = true;
+  scores_to_print[QRANKER_PEP] = true;
+  scores_to_print[DELTA_CN] = true;
+  scores_to_print[BY_IONS_MATCHED] = true;
+  scores_to_print[BY_IONS_TOTAL] = true;
+
+  double* scores = new double[NUMBER_SCORER_TYPES];
+
+  for(int i = 0; i < fullset.size(); i++)
+    {
+      int psmind = fullset[i].psmind;
+
+      // spectrum info
+      int scan = d.psmind2scan(psmind);
+      const char* filename = d.psmind2fname(psmind).c_str();
+      char** path_name = parse_filename_path_extension(filename, NULL);
+      filename = path_name[0];
+      double spectrum_mass = d.psmind2precursor_mass(psmind); 
+      int charge = d.psmind2charge(psmind);
+
+      // peptide info
+      int pepind = d.psmind2pepind(psmind);
+      string pep = d.ind2pep(pepind);
+      string modified_sequence, n,c;
+      get_pep_seq(pep, modified_sequence, n, c);
+      char* sequence = unmodify_sequence(modified_sequence.c_str());
+      string flanking_aas = n + c;
+      double peptide_mass = d.psmind2peptide_mass(psmind);
+      
+      // protein info
+      int num_proteins = d.pepind2num_prot(pepind); 
+      int* protein_indexes = d.pepind2protinds(pepind);
+      vector<string> protein_names;
+      vector<string> protein_descriptions;
+      for(int prot_idx = 0; prot_idx < num_proteins; prot_idx++){
+        string protein_name = d.ind2prot(protein_indexes[prot_idx]);
+        protein_names.push_back(protein_name);
+        protein_descriptions.push_back("");
+        flanking_aas += "," + n + c; // todo
+      }
+
+      // psm info
+      int* psm_ranks = new int[NUMBER_SCORER_TYPES];
+      psm_ranks[XCORR]=1; 
+      double delta_cn = d.psmind2deltaCn(psmind);
+      
+      scores[XCORR] = d.psmind2xcorr(psmind);
+      
+      scores[SP] = d.psmind2spscore(psmind);
+      scores[QRANKER_SCORE] = fullset[i].score;
+      scores[QRANKER_QVALUE] = fullset[i].q;
+      scores[QRANKER_PEP] = fullset[i].PEP;
+      scores[DELTA_CN] = delta_cn;
+      scores[BY_IONS_MATCHED] = d.psmind2by_ions_matched(psmind);
+      scores[BY_IONS_TOTAL] = d.psmind2by_ions_total(psmind);
+      psm_ranks[SP] = d.psmind2sp_rank(psmind);
+      psm_ranks[XCORR]=d.psmind2xcorr_rank(psmind);
+
+      PepXMLWriter& xmlfile = (fullset[i].label == 1) ? xmlfileTarget : xmlfileDecoy;
+      xmlfile.writePSM(scan, filename, spectrum_mass, charge, psm_ranks,
+                       sequence, modified_sequence.c_str(),
+                       peptide_mass, num_proteins,
+                       flanking_aas.c_str(), protein_names, 
+                       protein_descriptions, scores_to_print, scores,
+                       d.psmind2matches_spectrum(psmind));
+
+      free(sequence);
+      if( path_name[0] ){
+        free(path_name[0]);
+      }
+      if( path_name[1] ){
+        free(path_name[1]);
+      }
+      free(path_name);
+
+    }
+
+  xmlfileTarget.writeFooter();
+  xmlfileDecoy.writeFooter();
+}
+
+
+
+void QRanker :: write_max_nets(string filename, NeuralNet* max_net)
+{
+  //write out the results of the general net
+
+  ofstream f1(filename.c_str());
+  f1 << "FDR thresh" << "\t" << "PSMs trn" << "\t" << "PSMs tst" << endl;
+  for(int count = 0; count < num_qvals; count++)
+    {
+      net = max_net[count];
+      int r = getOverFDR(testset,net, qvals[count]);
+      int r1 = getOverFDR(trainset,net, qvals[count]);
+      f1 << qvals[count] << "\t" << r1 << "\t" << r << "\n";
+      
+      double qn;
+      if(qvals[count] < 0.01)
+        qn = 0.0012;
+      else
+	qn = 0.005;
+      r = getOverFDR(testset,net, qvals[count]+qn);
+      r1 = getOverFDR(trainset,net, qvals[count]+qn);
+      f1 << qvals[count]+qn << "\t" << r1 << "\t" << r << "\n";
+      
+    }
+  f1.close();
+}
+
+
+
+
+void QRanker :: write_unique_peptides(string filename, NeuralNet* max_net)
+{
+  //write out the results of the general net
+  ostringstream s1;
+  s1 << filename << ".txt";
+  ofstream f1(s1.str().c_str());
+  
+  for(int count = 0; count < num_qvals; count++)
+    {
+      net = max_net[count];
+      int r = getOverFDR(testset,net, qvals[count]);
+      set<int> peps;
+      int cn = 0;
+      for(int i = 0; i < testset.size();i++)
+        {
+	  if(testset[i].label == 1)
+            {
+	      cn++;
+	      int pepind = d.psmind2pepind(testset[i].psmind);
+              peps.insert(pepind);
+	    }
+          if(cn > r) break;
+        }
+      int num_tst = 0;
+      for(set<int>::iterator it = peps.begin(); it != peps.end(); it++)
+	num_tst++;
+      peps.clear();
+
+      int r1 = getOverFDR(trainset,net, qvals[count]);
+      cn = 0;
+      for(int i = 0; i < trainset.size();i++)
+	{
+	  if(trainset[i].label == 1)
+	    {
+	      cn++;
+	      int pepind = d.psmind2pepind(trainset[i].psmind);
+	      peps.insert(pepind);
+	    }
+	  if(cn > r1) break;
+	}
+      int num_trn = 0;
+      for(set<int>::iterator it = peps.begin(); it != peps.end(); it++)
+	num_trn++;
+      peps.clear();
+      f1 << qvals[count] << " " << num_trn << " " << num_tst << "\n";
+    }
+
+  f1.close();
+}
+
+
+void QRanker :: write_num_psm_per_spectrum(NeuralNet* max_net)
+{
+  //write out the results of the general net
+  //ostringstream s1;
+  //s1 << filename << ".txt";
+  //ofstream f1(s1.str().c_str());
+  
+  int count = 5; 
+  net = max_net[count];
+  int r = getOverFDR(trainset,net, qvals[count]);
+      
+  map<int,set<int> > scan_to_pepinds;
+  int cn = 0;
+  for(int i = 0; i < trainset.size();i++)
+    {
+      if(trainset[i].label == 1)
+	{
+	  cn++;
+	  int pepind = d.psmind2pepind(trainset[i].psmind);
+	  int scan = d.psmind2scan(trainset[i].psmind);
+	  if(scan_to_pepinds.find(scan) == scan_to_pepinds.end())
+	    {
+	      set<int> peps;
+	      scan_to_pepinds[scan] = peps;
+	    }
+	  (scan_to_pepinds[scan]).insert(pepind);
+	  
+	}
+      if(cn > r) break;
+    }
+    
+  vector<int> counts;
+  counts.resize(11,0);
+
+  for(map<int,set<int> >::iterator it = scan_to_pepinds.begin();
+      it != scan_to_pepinds.end(); it++)
+    {
+      int cnt =  (it->second).size();
+      counts[cnt]++;
+    }
+  for(unsigned int i = 0; i < counts.size();i++)
+    cout << i << " " << counts[i] << endl;
+
+  //f1.close();
+}
+
+
+
+/*********************** training net functions*******************************************/
+
+void QRanker :: train_net_sigmoid(PSMScores &set, int interval)
+{
+  double *r;
+  int label;
+  double *gc = new double[1];
+  for(int i = 0; i < set.size(); i++)
+    { 
+      unsigned int ind;
+      ind = myrandom_limit(interval);
+      //pass both through the net
+      r = net.fprop(d.psmind2features(set[ind].psmind));
+      label = set[ind].label;
+      double a = exp(label*r[0]);
+      net.clear_gradients();
+      gc[0] = -a/((1+a)*(1+a))*label;
+      net.bprop(gc);
+      net.update(mu,weightDecay);
+
+    }
+  delete[] gc;
+}
+
+void QRanker :: train_net_hinge(PSMScores &set, int interval)
+{
+  double *r;
+  int label;
+  double *gc = new double[1];
+  for(int i = 0; i < set.size(); i++)
+    { 
+      unsigned int ind;
+      ind = myrandom_limit(interval);
+      //pass both through the net
+      r = net.fprop(d.psmind2features(set[ind].psmind));
+      label = set[ind].label;
+      if(label*r[0]<1)
+	{
+	  net.clear_gradients();
+	  gc[0] = -1.0*label;
+	  net.bprop(gc);
+	  net.update(mu,weightDecay);
+	}
+    }
+  delete[] gc;
+}
+
+
+void QRanker :: train_net_ranking(PSMScores &set, int interval)
+{
+  double *r1;
+  double *r2;
+  double diff = 0;
+  int label = 1;
+  double *gc = new double[1];
+
+
+  for(int i = 0; i < set.size(); i++)
+    { 
+      int ind1, ind2;
+      int label_flag = 1;
+      //get the first index
+      if(interval == 0)
+	ind1 = 0;
+      else
+	ind1 = myrandom_limit(interval);
+      if(ind1>set.size()-1) continue;
+      if(set[ind1].label == 1)
+	label_flag = -1;
+      else
+	label_flag = 1;
+      
+      int cn = 0;
+      while(1)
+	{
+	  ind2 = myrandom_limit(interval);
+	  if(ind2>set.size()-1) continue;
+	  if(set[ind2].label == label_flag) break;
+	  if(cn > 1000)
+	    {
+	      ind2 = myrandom_limit(set.size());
+	      break;
+	    }
+	  cn++;
+	}
+      
+      //pass both through the net
+      r1 = nets[0].fprop(d.psmind2features(set[ind1].psmind));
+      r2 = nets[1].fprop(d.psmind2features(set[ind2].psmind));
+      diff = r1[0]-r2[0];
+      
+
+      label=0;
+      if(  set[ind1].label==1 && set[ind2].label==-1)
+	label=1;
+      if( set[ind1].label==-1 && set[ind2].label==1)
+	    label=-1;
+      
+      if(label != 0)
+	{
+	  if(label*diff<1)
+	    {
+	      net.clear_gradients();
+	      gc[0] = -1.0*label;
+	      nets[0].bprop(gc);
+	      gc[0] = 1.0*label;
+	      nets[1].bprop(gc);
+	      net.update(mu,weightDecay);
+	    }
+	  
+	}
+    }
+  delete[] gc;
+  
+}
+
+
+void QRanker :: count_pairs(PSMScores &set, int interval)
+{
+  double *r1;
+  double *r2;
+  double diff = 0;
+  int label = 1;
+  double err = 0.0;
+
+  for(int i = 0; i < set.size()*100; i++)
+    { 
+      int ind1, ind2;
+      int label_flag = 1;
+      //get the first index
+      if(interval == 0)
+	ind1 = 0;
+      else
+	ind1 = myrandom_limit(interval);
+      if(ind1>set.size()-1) continue;
+      if(set[ind1].label == 1)
+	label_flag = -1;
+      else
+	label_flag = 1;
+      
+      int cn = 0;
+      while(1)
+	{
+	  ind2 = myrandom_limit(interval);
+	  if(ind2>set.size()-1) continue;
+	  if(set[ind2].label == label_flag) break;
+	  if(cn > 1000)
+	    {
+	      ind2 = myrandom_limit(set.size());
+	      break;
+	    }
+	  cn++;
+	}
+      
+      //pass both through the net
+      r1 = nets[0].fprop(d.psmind2features(set[ind1].psmind));
+      r2 = nets[1].fprop(d.psmind2features(set[ind2].psmind));
+      diff = r1[0]-r2[0];
+      
+
+      label=0;
+      if(  set[ind1].label==1 && set[ind2].label==-1)
+	label=1;
+      if( set[ind1].label==-1 && set[ind2].label==1)
+	    label=-1;
+      
+      if(label != 0)
+	{
+	  if(label*diff<1)
+	    {
+	      err += 1-label*diff;
+	      
+	    }
+	  
+	}
+    }
+
+  cout << "er" << err/trainset.size() << endl;
+}
+
+
+
+void QRanker :: train_many_general_nets()
+{
+  interval = trainset.size();
+  for(int i=0;i<switch_iter;i++) {
+    //train_net_hinge(trainset, interval);
+    train_net_ranking(trainset, interval);
+    //train_net_sigmoid(trainset, interval);
+
+       
+    //record the best result
+    getMultiFDR(thresholdset,net,qvals);
+    for(int count = 0; count < num_qvals;count++)
+      {
+	if(overFDRmulti[count] > max_overFDR[count])
+	  {
+	    max_overFDR[count] = overFDRmulti[count];
+	    max_net_gen[count] = net;
+	  }
+      }
+    if((i % 10) == 0)
+      {
+	carp(CARP_INFO, "Iteration %d :", i);
+	getMultiFDR(trainset,net,qvals);
+	carp(CARP_INFO, "trainset %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d ", 
+	     qvals[0], overFDRmulti[0], qvals[1], overFDRmulti[1], qvals[2], overFDRmulti[2],
+	     qvals[3], overFDRmulti[3], qvals[4], overFDRmulti[4], qvals[5], overFDRmulti[5],
+	     qvals[6], overFDRmulti[6], qvals[7], overFDRmulti[7], qvals[8], overFDRmulti[8],
+	     qvals[9], overFDRmulti[9], qvals[10], overFDRmulti[10], qvals[11], overFDRmulti[11],
+	     qvals[12], overFDRmulti[12], qvals[13], overFDRmulti[13]);
+	getMultiFDR(testset,net,qvals);
+	carp(CARP_INFO, "testset %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d\n ", 
+	     qvals[0], overFDRmulti[0], qvals[1], overFDRmulti[1], qvals[2], overFDRmulti[2],
+	     qvals[3], overFDRmulti[3], qvals[4], overFDRmulti[4], qvals[5], overFDRmulti[5],
+	     qvals[6], overFDRmulti[6], qvals[7], overFDRmulti[7], qvals[8], overFDRmulti[8],
+	     qvals[9], overFDRmulti[9], qvals[10], overFDRmulti[10], qvals[11], overFDRmulti[11],
+	     qvals[12], overFDRmulti[12], qvals[13], overFDRmulti[13]);
+      }
+  }
+
+}
+
+void QRanker :: train_many_target_nets()
+{
+
+  int  thr_count = num_qvals-1;
+  while (thr_count > 0)
+    {
+      net.copy(max_net_gen[thr_count]);
+        
+      carp(CARP_INFO, "training threshold %d", thr_count);
+      //cout << "training thresh " << thr_count  << "\n";
+      //interval = getOverFDR(trainset, net, qvals[thr_count]);
+      interval = max_overFDR[thr_count];
+      for(int i=switch_iter;i<niter;i++) {
+		
+	//sorts the examples in the training set according to the current net scores
+	getMultiFDR(trainset,net,qvals);
+	train_net_ranking(trainset, interval);
+			
+	for(int count = 0; count < num_qvals;count++)
+	  {
+	    if(overFDRmulti[count] > max_overFDR[count])
+	      {
+		max_overFDR[count] = overFDRmulti[count];
+		max_net_targ[count] = net;
+	      }
+	  }
+
+	if((i % 3) == 0)
+	  {
+	    carp(CARP_INFO, "Iteration %d :", i);
+	    getMultiFDR(trainset,net,qvals);
+	    carp(CARP_INFO, "trainset %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d ", 
+		 qvals[0], overFDRmulti[0], qvals[1], overFDRmulti[1], qvals[2], overFDRmulti[2],
+		 qvals[3], overFDRmulti[3], qvals[4], overFDRmulti[4], qvals[5], overFDRmulti[5],
+		 qvals[6], overFDRmulti[6], qvals[7], overFDRmulti[7], qvals[8], overFDRmulti[8],
+		 qvals[9], overFDRmulti[9], qvals[10], overFDRmulti[10], qvals[11], overFDRmulti[11],
+		 qvals[12], overFDRmulti[12], qvals[13], overFDRmulti[13]);
+	    getMultiFDR(testset,net,qvals);
+	    carp(CARP_INFO, "testset %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d\n ", 
+		 qvals[0], overFDRmulti[0], qvals[1], overFDRmulti[1], qvals[2], overFDRmulti[2],
+		 qvals[3], overFDRmulti[3], qvals[4], overFDRmulti[4], qvals[5], overFDRmulti[5],
+		 qvals[6], overFDRmulti[6], qvals[7], overFDRmulti[7], qvals[8], overFDRmulti[8],
+		 qvals[9], overFDRmulti[9], qvals[10], overFDRmulti[10], qvals[11], overFDRmulti[11],
+		 qvals[12], overFDRmulti[12], qvals[13], overFDRmulti[13]);
+	    
+	    /*
+	    cout << "Iteration " << i << " : \n";
+	    getMultiFDR(testset,net,qvals);
+	    cout << "testset: ";
+	    printNetResults(overFDRmulti);
+	    cout << "\n";
+	    */
+	  }
+
+      }
+      thr_count -= 3;
+    }
+}
+
+
+
+void QRanker::train_many_nets()
+{
+  switch_iter =30;
+  niter = 40;
+   
+  num_qvals = 14;
+  qvals.resize(num_qvals,0.0);
+  qvals1.resize(num_qvals,0.0);
+  qvals2.resize(num_qvals,0.0);
+
+  overFDRmulti.resize(num_qvals,0);
+  ave_overFDR.resize(num_qvals,0);
+  max_overFDR.resize(num_qvals,0); 
+  max_net_gen = new NeuralNet[num_qvals];
+  max_net_targ = new NeuralNet[num_qvals];
+  
+  double q = 0.0;
+  for(int count = 0; count < num_qvals; count++)
+    {
+      qvals[count] = q;
+      if (count < 2)
+	qvals1[count] = q;
+      else
+	qvals1[count] = q-0.005;
+      qvals2[count] = q+0.005;
+
+      if(q < 0.01)
+	q+=0.0025;
+      else
+	q+=0.01;
+    }
+  
+  //set the linear flag: 1 if linear, 0 otherwise
+  int lf = 0; num_hu = 3;
+  if(num_hu == 1)
+    lf = 1;
+  //set whether there is bias in the linear units: 1 if yes, 0 otherwise
+  int bs = 0;
+  
+  net.initialize(d.get_num_features(),num_hu,lf,bs);
+  for(int count = 0; count < num_qvals; count++){
+    max_net_gen[count] = net;
+  }
+
+  nets = new NeuralNet[2];
+  nets[0].clone(net);
+  nets[1].clone(net);
+
+  carp(CARP_INFO, "Before Iterating");
+  getMultiFDRXCorr(trainset,qvals);
+  carp(CARP_INFO, "trainset %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d ", 
+       qvals[0], overFDRmulti[0], qvals[1], overFDRmulti[1], qvals[2], overFDRmulti[2],
+       qvals[3], overFDRmulti[3], qvals[4], overFDRmulti[4], qvals[5], overFDRmulti[5],
+       qvals[6], overFDRmulti[6], qvals[7], overFDRmulti[7], qvals[8], overFDRmulti[8],
+       qvals[9], overFDRmulti[9], qvals[10], overFDRmulti[10], qvals[11], overFDRmulti[11],
+       qvals[12], overFDRmulti[12], qvals[13], overFDRmulti[13]);
+  getMultiFDRXCorr(testset,qvals);
+  carp(CARP_INFO, "trainset %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d  %.2f:%d %.2f:%d %.2f:%d %.2f:%d %.2f:%d \n", 
+       qvals[0], overFDRmulti[0], qvals[1], overFDRmulti[1], qvals[2], overFDRmulti[2],
+       qvals[3], overFDRmulti[3], qvals[4], overFDRmulti[4], qvals[5], overFDRmulti[5],
+       qvals[6], overFDRmulti[6], qvals[7], overFDRmulti[7], qvals[8], overFDRmulti[8],
+       qvals[9], overFDRmulti[9], qvals[10], overFDRmulti[10], qvals[11], overFDRmulti[11],
+       qvals[12], overFDRmulti[12], qvals[13], overFDRmulti[13]);
+
+  train_many_general_nets();
+  
+  //copy the general net into target nets;
+  for(int count = 0; count < num_qvals; count++)
+    max_net_targ[count] = max_net_gen[count];
+
+  train_many_target_nets();  
+ 
+  ostringstream fname;
+  fname << out_dir << "/" << fileroot << "q-ranker.psms.at.fdr.thresholds.txt";;
+  write_max_nets(fname.str(), max_net_targ);
+
+  
+}
+
+int QRanker::run( ) {
+  //mysrandom(seed); This is set by CruxApplication::initialize()
+  carp(CARP_INFO, "reading data");
+  
+  ostringstream res;
+  res << out_dir << "/qranker_output";
+  res_prefix = res.str();
+    
+  d.load_data_psm_training();
+  if(feature_file_flag)
+    {
+      string str = feature_file_name.str();
+      if(!d.print_features(str))
+	carp(CARP_INFO, "could not open file %s for writing features. Feature file will not be written", feature_file_name.str().c_str());
+    }
+  d.normalize_psms();
+  d.load_labels_psm_training();
+  PSMScores::fillFeaturesSplit(trainset, testset, d, 0.75);
+  thresholdset = trainset;
+  d.clear_labels_psm_training();
+  train_many_nets();
+  write_results();
+  
+  return 0;
+}
+
+void QRanker :: print_description()
+{
+  cout << endl;
+  cout << "\t crux q-ranker [options] <spectra> <search results>" << endl <<endl;
+  cout << "REQUIRED ARGUMENTS:" << endl << endl;
+  cout << "\t <spectra> Directory with ms2 files, list of ms2 files or a single ms2 file used for database search." << endl;
+  cout << "\t <search results> Directory with sqt files, list of sqt files or a single sqt file with psms generated during search." << endl;
+  cout << endl;
+  
+  cout << "OPTIONAL ARGUMENTS:" << endl << endl;
+  cout << "\t [--enzyme <string>] \n \t     The enzyme used to digest the proteins in the experiment. Default trypsin." << endl;
+  cout << "\t [--decoy-prefix <string>] \n \t     Specifies the prefix of the protein names that indicates a decoy. Default decoy_" << endl;
+  cout << "\t [--separate-searches <string>] \n \t     If the target and decoy searches were run separately, the option then allows the user to specify the location of the decoy search results, the target database search should be provided as required argument." << endl;
+  cout << "\t [--fileroot <string>] \n \t     The fileroot string will be added as a prefix to all output file names. Default = none." <<endl;
+  cout << "\t [--output-dir <directory>] \n \t     The name of the directory where output files will be created. Default = crux-output." << endl;
+  cout << "\t [--overwrite <T/F>] \n \t     Replace existing files (T) or exit if attempting to overwrite (F). Default=F." << endl;
+  cout << "\t [--skip-cleanup <T/F>] \n \t     When set to T, prevents the deletion of lookup tables created during the preprocessing step. Default = F." << endl; 
+  cout << "\t [--re-run <directory>] \n \t      Re-run QRanker analysis using a previously computed set of lookup tables." <<endl;  
+  cout << "\t [--use-spec-features <T/F>] \n \t      When set to F, use minimal feature set. Default T." <<endl;  
+  cout << endl; 
+
+}
+string QRanker:: file_extension (string str){
+  string file_exten= str.substr(str.rfind('.')+1);
+  return file_exten; 
+}
+
+
+FILE_FORMAT_T QRanker::check_file_format(string& source) {
+  string ext = file_extension(source);
+
+    if (ext=="sqt") 
+      return SQT_FORMAT;
+    else if (ext=="txt") 
+      return DELIMITED_FORMAT;
+   return INVALID_FORMAT;
+}
+
+int QRanker :: crux_set_command_line_options(int argc, char *argv[])
+{
+  string sqt_source;
+  string ms2_source;
+  string sqt_decoy_source;
+  int separate_search_flag;
+  string output_directory;
+  string enzyme;
+  string decoy_prefix;
+
+  string dir_with_tables;
+  int found_dir_with_tables;
+
+  bool spec_features_flag;
+  bool list_of_files_flag; 
+  overwrite_flag = Params::GetBool("overwrite");
+  
+  fileroot = Params::GetString("fileroot");
+  if (!fileroot.empty()) {
+    fileroot.append(".");
+  }
+
+  decoy_prefix = Params::GetString("decoy-prefix");
+
+
+  enzyme = Params::GetString("enzyme");
+
+  spec_features_flag = Params::GetBool("use-spec-features");
+
+  skip_cleanup_flag = Params::GetBool("skip-cleanup");
+  
+
+  dir_with_tables = Params::GetString("re-run"); 
+  if(!dir_with_tables.empty()) {
+    found_dir_with_tables = 1;
+  } else {
+    found_dir_with_tables = 0;
+  }
+
+  output_directory = Params::GetString("output-dir");
+
+  feature_file_flag = Params::GetBool("feature-file-out");
+  feature_file_name << output_directory << "/" << fileroot << "q-ranker.features.txt";
+
+  if(found_dir_with_tables)
+    {
+      //set input and output dirs
+      parser = new SQTParser();
+      parser -> set_output_dir(dir_with_tables);
+      set_input_dir(dir_with_tables);
+      set_output_dir(output_directory);
+
+      carp(CARP_INFO, "directory with tables: %s", dir_with_tables.c_str());
+      carp(CARP_INFO, "output_directory: %s", output_directory.c_str());
+    }else{
+      ms2_source = Params::GetString("fragmentation spectra");
+      sqt_source = Params::GetString("search results");
+      list_of_files_flag = Params::GetBool("list-of-files");
+      //check file format 
+     
+      vector<string> files; 
+      string files_list; 
+      if(list_of_files_flag==1){
+        ifstream f(sqt_source.c_str());
+        f>>files_list; 
+        while(!f.eof()){
+          files.push_back(files_list);
+          f>> files_list; 
+        } 
+      }else{
+         files.push_back(sqt_source);
+       }
+      
+      for(unsigned i=0; i<files.size();i++){
+        FILE_FORMAT_T format = check_file_format(files[i]);
+        switch (format) {
+        case SQT_FORMAT:
+          file_format_="sqt"; 
+          parser = new SQTParser();
+	  break;
+        case DELIMITED_FORMAT:
+          file_format_="txt";
+	  parser = new CruxParser();
+	  break;
+        case INVALID_FORMAT:
+          file_format_="NULL";
+        default:
+	  carp(CARP_FATAL, "Please enter .sqt or .txt search results"); 
+        }
+
+        parser->set_decoy_prefix(decoy_prefix);
+        parser->set_enzyme(enzyme);
+        if(enzyme.find("elastase") != string::npos){
+           cleavage_type="elastase-full-digest";
+        }else if (enzyme.find("chymotrypsin") != string::npos){
+           cleavage_type="chymotrypsin-full-digest";
+        }else if (enzyme.find("trypsin") != string::npos){
+           cleavage_type="trypsin-full-digest";
+        }else{
+           cleavage_type="Null";
+        }
+
+        //num of spec features
+        if(spec_features_flag)
+	  parser->set_num_spec_features(3);
+        else 
+	  parser->set_num_spec_features(0);
+        parser->write_features_header();
+        
+        if(parser->get_use_quadratic_features())
+          parser->add_quadratic_features_header(); 
+        d.get_features_header(parser->get_final_features_header());
+        sqt_decoy_source = Params::GetString("separate-searches"); 
+        if(!sqt_decoy_source.empty()) {
+	  separate_search_flag = 1;
+        } else {
+	  separate_search_flag = 0;
+        }
+      
+        //set the output directory for the parser
+        if(!parser->set_output_dir(output_directory))
+	  return 0;
+        //set input and output for the leaning algo (in and out are the same as the out for the parser)
+        set_input_dir(output_directory);
+        set_output_dir(output_directory);
+      
+        if(separate_search_flag){
+	  if(!parser->set_input_sources(ms2_source, sqt_source, sqt_decoy_source)){
+	    carp(CARP_FATAL, "could not extract features for training");
+          }
+	  parser->set_num_hits_per_spectrum(1);
+	}else{
+	  if(!parser->set_input_sources(ms2_source, sqt_source)){
+	    carp(CARP_FATAL, "could not extract features for training");
+            }
+	 }
+      
+        //print some info
+        if(format==SQT_FORMAT)
+	  carp(CARP_INFO, "sqt source: %s", sqt_source.c_str());
+        if(format==DELIMITED_FORMAT)
+	  carp(CARP_INFO, "delmited source: %s", sqt_source.c_str());
+        carp(CARP_INFO, "ms2 source: %s", ms2_source.c_str());
+        carp(CARP_INFO, "output_directory: %s", output_directory.c_str());
+        carp(CARP_INFO, "enzyme: %s", enzyme.c_str());
+        carp(CARP_INFO, "decoy prefix: %s", decoy_prefix.c_str());
+      
+        if(!parser->run())
+	  carp(CARP_FATAL, "Could not proceed with training.");
+        parser->clear();
+      }
+   }
+ 
+   if(!parser->check_input_dir(in_dir))
+    carp(CARP_FATAL, "Please re-run with ms2 input and txt input.");
+
+  return 1;
+
+  
+}
+
+/**
+ * Uses the target and decoy scores to compute posterior error
+ * probabilities. 
+ */
+void QRanker::computePEP(){
+  vector<double> target_scores_vect;
+  vector<double> decoy_scores_vect;
+
+  // pull out the target and decoy scores
+  for(int i = 0; i < fullset.size(); i++){
+    if( fullset[i].label == 1 ){
+      target_scores_vect.push_back(fullset[i].score);
+    } else { // == -1
+      decoy_scores_vect.push_back(fullset[i].score);
+    }
+  }
+
+  int num_targets = target_scores_vect.size();
+  int num_decoys = decoy_scores_vect.size(); 
+
+  // copy them to an array as required by the compute_PEP method
+  double* target_scores = new double[num_targets];
+  copy(target_scores_vect.begin(), target_scores_vect.end(), target_scores);
+  double* decoy_scores = new double[num_decoys];
+  copy(decoy_scores_vect.begin(), decoy_scores_vect.end(), decoy_scores);
+
+  double* PEPs = ComputeQValues::compute_PEP(target_scores, num_targets, 
+                                             decoy_scores, num_decoys);
+
+  // fill in the data set with the new scores for the targets
+  int target_idx = 0;
+  for(int full_idx = 0; full_idx < fullset.size(); full_idx++){
+    if( fullset[full_idx].label == 1 ){
+      fullset[full_idx].PEP = PEPs[target_idx];
+      target_idx++; 
+    } // else, skip decoys
+  }
+
+  delete target_scores;
+  delete decoy_scores;
+  delete PEPs;
+}
+
+
+int QRanker::main(int argc, char **argv) {
+
+  
+  if(!crux_set_command_line_options(argc, argv))
+    return 1;
+  
+  run();
+  if(skip_cleanup_flag != 1)
+    parser->clean_up(out_dir);
+    
+  return 0;
+}   
+
+bool QRanker :: needsOutputDirectory() const
+{
+  return true;
+}
+
+
+string QRanker::getName() const {
+  return "q-ranker";
+}
+string QRanker::getDescription() const {
+  return
+    "[[nohtml:Re-rank a collection of PSMs using the Q-ranker algorithm.]]"
+    "[[html:<p>Q-ranker dynamically learns to separate target from decoy PSMs. "
+    "The algorithm is described in this article:</p><blockquote>Marina Spivak, "
+    "Jason Weston, Leon Bottou and William Stafford Noble. <a href=\""
+    "http://noble.gs.washington.edu/papers/spivak2009improvements.html\">"
+    ""Direct <em>q</em> value optimization methods for peptide "
+    "identification from shotgun proteomics data sets."</a> <em>Journal "
+    "of Proteome Research</em>. 8(7):3737-3745, 2009.</blockquote><p>For more "
+    "on q-values and posterior error probabilities (PEP), see the "
+    "documentation for <a href=\"assign-confidence.html\">assign-confidence</a>."
+    "</p>]]";
+}
+
+vector<string> QRanker::getArgs() const {
+  string arr[] = {
+    "fragmentation spectra",
+    "search results"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector<string> QRanker::getOptions() const {
+  string arr[] = {
+    "enzyme",
+    "decoy-prefix",
+    "separate-searches",
+    "fileroot",
+    "output-dir",
+    "overwrite",
+    "pepxml-output",
+    "txt-output",
+    "skip-cleanup",
+    "re-run",
+    "use-spec-features",
+    "parameter-file",
+    "verbosity",
+     "list-of-files",
+    "feature-file-out",
+    "spectrum-parser"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector< pair<string, string> > QRanker::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("qranker.target.pep.xml",
+    "An xml file containing ranked list of target peptide-spectrum matches. The"
+    "following entries are included: scan, charge, psm_id, q-value, score, "
+    "precursor_mass, peptide, filename."));
+  outputs.push_back(make_pair("qranker.decoy.pep.xml",
+    "An xml file containing ranked list of decoy peptide-spectrum matches."));
+  outputs.push_back(make_pair("qranker.target.psm.txt",
+    "a <a href=\"../file-formats/txt-format.html\">tab-delimited text format</a> containing a "
+    "ranked list of target peptide-spectrum matches with the associated Q-ranker "
+    "scores and q-values."));
+  outputs.push_back(make_pair("qranker.decoy.psm.txt",
+    "a <a href=\"../file-formats/txt-format.html\">tab-delimited text format</a> containing a "
+    "ranked list of decoy peptide-spectrum matches with the associated Q-ranker "
+    "scores and q-values."));
+  outputs.push_back(make_pair("qranker.log.txt",
+    "a file where the program reports its progress."));
+  outputs.push_back(make_pair("qranker.params.txt",
+    "a file with the values of all the options given to the current run."));
+  return outputs;
+}
+
+COMMAND_T QRanker::getCommand() const {
+  return QRANKER_COMMAND;
+}
+
+
+void QRanker :: get_protein_id(int pepind, vector<string> &prot){
+  int * protinds= d.pepind2protinds(pepind) ;
+  unsigned prot_length=d.pepind2num_prot(pepind);  
+  for (unsigned k=0;k<prot_length;k++){
+    string protein_str= d.ind2prot( protinds[k]);
+    prot.push_back(protein_str); 
+  }
+}
+
+
+void QRanker :: print_protein_ids(vector<string> &prots, ofstream &os, int psmind){
+    
+ // TODO: find peptide position in SQT files 
+ //sqt files do not return peptide position in the protein.
+ //if the search result file is txt we can find file peptide_pos and print it 
+ // in front of protein, else do not print anything
+
+  if(file_format_=="txt"){
+    for (unsigned int j=0;j<prots.size();j++){
+      os << prots[j];
+      if (d.psmind2peptide_position(psmind) > -1) {
+	os << "("<<d.psmind2peptide_position(psmind)<<")";
+      }
+      if (j == prots.size() - 1) {
+	os << "\t";
+      } else {
+	os << ",";
+      }
+    }
+  }else if(file_format_=="sqt"){
+    for (unsigned int j=0;j<prots.size();j++){
+      if(j==prots.size()-1)
+      	os<<prots[j]<<"\t";
+      else
+        os<<prots[j]<<",";
+    }
+  }
+  prots.clear();
+}
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/qranker-barista/QRanker.h b/src/app/qranker-barista/QRanker.h
new file mode 100644
index 0000000..490d5d1
--- /dev/null
+++ b/src/app/qranker-barista/QRanker.h
@@ -0,0 +1,143 @@
+#ifndef QRANKER_H_
+#define QRANKER_H_
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <time.h>
+#include <cstdlib>
+#include <vector>
+#include <set>
+#include <map>
+#include <string>
+#include <math.h>
+using namespace std;
+
+#include "app/CruxApplication.h"
+#include "io/carp.h"
+#include "util/crux-utils.h"
+#include "parameter.h"
+
+#include "io/PepXMLWriter.h"
+#include "NeuralNet.h"
+#include "DataSetCrux.h"
+#include "PSMScores.h"
+#include "SQTParser.h"
+#include "CruxParser.h"
+#include "TabDelimParser.h"
+#include "app/CruxApplication.h"
+#include "util/mass.h"
+#include "model/objects.h"
+
+double* compute_PEP(double* target_scores, ///< scores for target matches
+  int num_targets,       ///< size of target_scores
+  double* decoy_scores,  ///< scores for decoy matches
+  int num_decoys,         ///< size of decoy_scores
+  bool ascending ///< are the scores ascending or descending
+  );
+
+class QRanker: public CruxApplication
+{
+
+public:
+  QRanker();
+  virtual ~QRanker();
+
+  int run();
+  void train_net_sigmoid(PSMScores &set, int interval);
+  void train_net_ranking(PSMScores &set, int interval);
+  void train_net_hinge(PSMScores &set, int interval);
+  void count_pairs(PSMScores &set, int interval);
+  void train_many_general_nets();
+  void train_many_target_nets();
+  void train_many_nets();
+    
+  int getOverFDR(PSMScores &set, NeuralNet &n, double fdr);
+  void getMultiFDR(PSMScores &set, NeuralNet &n, vector<double> &qval);
+  void getMultiFDRXCorr(PSMScores &set, vector<double> &qval);
+  void printNetResults(vector<int> &scores);
+  void write_results();
+  void write_results_psm_tab(ofstream &osTarget, ofstream &osDecoy);
+  void get_pep_seq(string &pep, string &seq, string &n, string &c);
+  void write_results_psm_xml(PepXMLWriter& osTarget, PepXMLWriter& osDecoy);
+  void computePEP();
+
+  void write_max_nets(string filename, NeuralNet *max_net);
+  void write_unique_peptides(string filename, NeuralNet* max_net);
+  void write_num_psm_per_spectrum(NeuralNet* max_net);
+
+  inline void set_fileroot(string &fl){fileroot = fl;}
+  inline void set_overwrite_flag(int flag) {overwrite_flag = flag;}
+  inline void set_input_dir(string &input_dir) {in_dir = input_dir; d.set_input_dir(input_dir);}
+  inline void set_output_dir(string &output_dir){out_dir = output_dir;}
+  void print_description();
+  int set_command_line_options(int argc, char **argv);
+  int crux_set_command_line_options(int argc, char *argv[]);
+  
+
+  virtual int main(int argc, char** argv);
+  virtual std::string getName() const;
+  virtual std::string getDescription() const;
+  virtual std::vector<std::string> getArgs() const;
+  virtual std::vector<std::string> getOptions() const;
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+  virtual bool needsOutputDirectory() const;
+  virtual COMMAND_T getCommand() const;
+  FILE_FORMAT_T check_file_format(string &filePath);
+  string file_extension(string filename); 
+  void get_protein_id(int pepind, vector<string> &prot); 
+  void  print_protein_ids(vector<string> &prots, ofstream &os, int psmind);  
+
+protected:
+
+    Dataset d;
+    string res_prefix;
+
+    PSMScores fullset; 
+    PSMScores trainset,testset,thresholdset;
+
+    int seed;
+    double selectionfdr;
+    
+    int num_features;
+    NeuralNet net;
+    int num_hu;
+    double mu;
+    double weightDecay;
+    string cleavage_type; 
+    int ind_low;
+    int interval;
+    int niter;
+    int switch_iter;
+    double loss;
+
+    int num_qvals;
+    vector<double> qvals;
+    vector<double> qvals1;
+    vector<double> qvals2;
+    
+    vector<int> overFDRmulti;
+    vector<int> max_overFDR;
+    vector<int> ave_overFDR;
+    NeuralNet* max_net_gen;
+    NeuralNet* max_net_targ;
+    NeuralNet* nets;
+
+    string in_dir;
+    string out_dir;
+    int skip_cleanup_flag;
+    int overwrite_flag;
+    string fileroot;
+    int feature_file_flag;
+    ostringstream feature_file_name;
+    
+    string file_format_; 
+    
+    TabDelimParser pars;
+    SQTParser* parser; 
+     
+
+};
+
+
+
+#endif /*QRANKER_H_*/
diff --git a/src/app/qranker-barista/SQTParser.cpp b/src/app/qranker-barista/SQTParser.cpp
new file mode 100644
index 0000000..0fcd4f5
--- /dev/null
+++ b/src/app/qranker-barista/SQTParser.cpp
@@ -0,0 +1,2156 @@
+#include "SQTParser.h"
+
+/******************************/
+
+SQTParser :: SQTParser() 
+  : database_exists(0), 
+    num_prot_not_found_in_db(0),
+    num_pos_prot_not_found_in_db(0),
+    num_neg_prot_not_found_in_db(0),
+    num_mixed_labels(0),
+    num_features(0),
+    num_spec_features(0),
+    num_total_features(0),
+    use_quadratic_features(0),
+    num_spectra(0),
+    num_psm(0),
+    num_pos_psm(0),
+    num_neg_psm(0),
+    num_pep(0),
+    num_pos_pep(0),
+    num_neg_pep(0),
+    num_prot(0),
+    num_pos_prot(0),
+    num_neg_prot(0), 
+    num_cur_psm(0),
+    num_cur_prot(0), prot_offset(0),
+    x(0), 
+    xs(0), 
+    protind_to_num_all_pep(0),
+    protind_to_length(0),
+    cur_fileind(0)
+{
+
+  int capacity = 11;
+  m.xcorr_rank.reserve(capacity);
+  m.sp_rank.reserve(capacity);
+  m.calc_mass.reserve(capacity);
+  m.delta_cn.reserve(capacity);
+  m.xcorr_score.reserve(capacity);
+  m.sp_score.reserve(capacity);
+  m.num_ions_matched.reserve(capacity);
+  m.num_total_ions.reserve(capacity);
+  m.peptides.reserve(capacity);
+  m.num_proteins_in_match.reserve(capacity);
+  m.proteins.reserve(capacity);
+  m.peptide_pos.reserve(capacity);
+
+  //num_psm_features
+  num_features = 17;
+  //num_spec_features 
+  num_spec_features = 3;
+  
+  //final_hits_per_spectrum
+  fhps = 3;
+  //enzyme
+  e = TRYPSIN_ENZ;
+  //decoy prefix
+  decoy_prefix = "rand_";
+  //max peptide length to be considered
+  max_len = 50;
+  //min peptide length to be considered
+   min_len = 7;
+
+  //feature header
+  features_header_.push_back("sp rank");
+  features_header_.push_back("delta lcn");
+  features_header_.push_back("delta cn"); 
+  features_header_.push_back("xcorr score");
+  features_header_.push_back("sp score");
+  features_header_.push_back("matched ions/predicted ions");
+  features_header_.push_back("observed mass");
+  features_header_.push_back("peptide length");
+  features_header_.push_back("charge 1");
+  features_header_.push_back("charge 2");
+  features_header_.push_back("charge 3");
+  features_header_.push_back("n-term enz");
+  features_header_.push_back("c-term enz");
+  features_header_.push_back("missed cleavage");
+  features_header_.push_back("number of sequence_comparison");
+  features_header_.push_back("delta mass");
+  features_header_.push_back("abs(delta mass)");
+ 
+  //spec_features_header_3
+  spec_features_header_3_.push_back("b ions");
+  spec_features_header_3_.push_back("y ions");
+  spec_features_header_3_.push_back("flanking");
+  
+  //spec features 7 
+  spec_features_header_7_.push_back("b ions");
+  spec_features_header_7_.push_back("y ions");
+  spec_features_header_7_.push_back("flanking");
+  spec_features_header_7_.push_back("H2O-nl");
+  spec_features_header_7_.push_back("CO2-nl");
+  spec_features_header_7_.push_back("NH3-nl");
+  spec_features_header_7_.push_back("NH3-nl-y");
+
+  // set specturm file extensions
+  spectrumExts_.push_back(".ms2");
+  spectrumExts_.push_back(".mzXML");
+  spectrumExts_.push_back(".mgf");
+}
+
+
+SQTParser :: ~SQTParser()
+{
+   clear();  
+}
+
+void SQTParser :: clear()
+{
+  clear_matches();
+  delete[] x; 
+  x = (double*)0;
+  delete[] xs; xs = (double*)0;
+  delete[] protind_to_num_all_pep; protind_to_num_all_pep = (int*)0;
+  delete[] protind_to_length; protind_to_length = (int*)0;
+
+    pep_to_ind.clear();
+  ind_to_pep.clear();
+  pepind_to_protinds.clear();
+  pepind_to_protinds_map.clear();
+  pepind_to_psminds.clear();
+  pepind_to_psminds_map.clear();
+
+  prot_to_ind.clear();
+  ind_to_prot.clear();
+  protind_to_pepinds_map.clear();
+  protind_to_pepinds.clear();
+  protein_to_num_all_pep_map.clear();
+  protind_to_num_all_pep_map.clear();
+  protein_to_length_map.clear();
+  protind_to_length_map.clear();
+  
+  spec_features_header_3_.clear();
+  spec_features_header_7_.clear();
+  features_header_.clear();
+  final_features_header_.clear();
+
+  num_features = 0;
+  num_spec_features = 0;
+  num_spectra = 0;
+  num_psm = 0;
+  num_pos_psm = 0;
+  num_neg_psm = 0;
+  num_pep = 0;
+  num_pos_pep = 0;
+  num_neg_pep = 0;
+  num_prot = 0;
+  num_pos_prot = 0;
+  num_neg_prot = 0;
+  num_cur_prot = 0;
+  prot_offset = 0;
+
+}
+
+void SQTParser :: set_enzyme(string &enz)
+{
+  
+  if(enz.find("elastase") != string::npos)
+    {
+      e = ELASTASE_ENZ;
+    }
+  else if (enz.find("chymotrypsin") != string::npos)
+    {
+      e = CHYMOTRYPSIN_ENZ;
+    }
+  else if (enz.find("trypsin") != string::npos)
+    {
+      e = TRYPSIN_ENZ;
+    }
+  else
+    {
+      carp(CARP_WARNING, "could not determine enzyme, will assume trypsin");
+    }
+}
+
+
+  
+void SQTParser :: clear_matches()
+{
+  m.xcorr_rank.clear();
+  m.sp_rank.clear();
+  m.calc_mass.clear();
+  m.delta_cn.clear(); 
+  m.xcorr_score.clear();
+  m.sp_score.clear();
+  m.num_ions_matched.clear();
+  m.num_total_ions.clear();
+  m.peptides.clear();
+  m.num_proteins_in_match.clear();
+  m.proteins.clear();
+  m.peptide_pos.clear();
+}
+
+
+void SQTParser :: erase_matches()
+{
+  m.xcorr_rank.erase(m.xcorr_rank.begin(),m.xcorr_rank.end());
+  m.sp_rank.erase(m.sp_rank.begin(),m.sp_rank.end());
+  m.calc_mass.erase(m.calc_mass.begin(),m.calc_mass.end());
+  m.delta_cn.erase(m.delta_cn.begin(),m.delta_cn.end());
+  m.xcorr_score.erase(m.xcorr_score.begin(),m.xcorr_score.end());
+  m.sp_score.erase(m.sp_score.begin(),m.sp_score.end());
+  m.num_ions_matched.erase(m.num_ions_matched.begin(),m.num_ions_matched.end());
+  m.num_total_ions.erase(m.num_total_ions.begin(),m.num_total_ions.end());
+  m.peptides.erase(m.peptides.begin(),m.peptides.end());
+  m.num_proteins_in_match.erase(m.num_proteins_in_match.begin(),m.num_proteins_in_match.end());
+  m.proteins.erase(m.proteins.begin(),m.proteins.end());
+  m.peptide_pos.erase(m.peptide_pos.begin(),m.peptide_pos.end());
+}
+
+
+void SQTParser :: add_matches_to_tables(sqt_match &m, string &decoy_prefix, int hits_read, int final_hits, bool decoy)
+{
+  int protein_pos = 0;
+  for (int i = 0; i < min(hits_read,final_hits); i++){
+    set<string> proteins;
+    int label = 1; //not decoy by default
+    // go through the proteins of the match
+    
+    for (int j = 0; j < m.num_proteins_in_match[i]; j++){
+      string prot = m.proteins[protein_pos];
+      proteins.insert(prot);
+ 
+      if(prot.find(decoy_prefix) != string::npos || decoy) {
+        label = -1;
+      }
+      protein_pos++;
+    }
+
+ 
+
+    //record the psm label
+    f_psmind_to_label.write((char*)(&label),sizeof(int));
+      
+    string pep = m.peptides[i];
+    int pep_ind = -1;
+    //add peptide to pep_to_ind and ind_to_pep maps
+    if(pep_to_ind.find(pep) == pep_to_ind.end()){
+      pep_ind = num_pep;
+      //add a new peptide
+      pep_to_ind[pep] = pep_ind;
+      ind_to_pep[pep_ind] = pep;
+      //start a pepind_to_psminds entry for the new peptide
+      set<int> tpsm;
+      pepind_to_psminds_map[pep_ind] = tpsm;
+      //start a pepind_to_protinds entry for the new peptide
+      set<int> t;
+      pepind_to_protinds_map[pep_ind] = t;
+      //set the label of the new peptide
+      f_pepind_to_label.write((char*)(&label),sizeof(int));
+      //augment num_pep count
+      num_pep++;
+      if(label == 1)
+	num_pos_pep++;
+      else
+        num_neg_pep++;
+    }else{
+      pep_ind = pep_to_ind[pep];
+      string p = ind_to_pep[pep_ind];
+      //if(pep.compare(p) != 0)
+      //   cout << "warning : did not find peptide index in ind_to_pep_table\n"; 
+    }
+    //augment the pepinds_to_psminds table
+    pepind_to_psminds_map[pep_ind].insert(num_psm);
+      
+    for(set<string>::iterator it = proteins.begin(); it != proteins.end();it++){
+      string prot = *it;
+      //if the label is -1 but the protein name does not contain decoy_prefix_,
+      // we don't include it
+      //add prot to tables
+      if((prot.find(decoy_prefix) == string::npos) && (label == -1))
+	 num_mixed_labels++; 
+      else{
+        int prot_ind = -1;
+	if(prot_to_ind.find(prot) == prot_to_ind.end()){
+	  prot_ind = num_prot;
+	  //add new protein
+	  prot_to_ind[prot] = prot_ind;
+	  ind_to_prot[prot_ind] = prot;
+	  //start a protind_to_pepinds entry for the new protein
+	  set<int> t;
+	  protind_to_pepinds_map[prot_ind] = t;
+	  //set the prot label
+	  f_protind_to_label.write((char*)(&label),sizeof(int));
+	  num_prot++; num_cur_prot++;
+	  if(label == 1)
+	    num_pos_prot++;
+	  else
+	    num_neg_prot++;
+	 
+	  //find the prot in the prot_to_num_all_pep
+	  if(database_exists){
+	    int cnt = 0;
+	    int len = 0;
+	    if(protein_to_num_all_pep_map.find(prot) == protein_to_num_all_pep_map.end()){
+	      /*
+	       for(map<string,int>::iterator itt = protein_to_num_all_pep_map.begin();
+		itt != protein_to_num_all_pep_map.end(); itt++)
+	        {
+		 string protein = itt->first;
+		 if(protein.find(prot) != string :: npos)
+		 cnt = itt->second;
+		 }
+		 */
+	    }else{
+	      cnt = protein_to_num_all_pep_map[prot];
+	      len = protein_to_length_map[prot];
+			  
+	    }
+		      
+	    //add the cnt to protind_to_num_all_pep_map
+	    if(cnt == 0){
+	      num_prot_not_found_in_db++;
+	      if(label == 1)
+		num_pos_prot_not_found_in_db++;
+	      else
+		num_neg_prot_not_found_in_db++;
+		    //carp(CARP_WARNING, "did not find protein %s from sqt file in the database ", prot.c_str());
+	    }else{
+	      protind_to_num_all_pep_map[prot_ind] = cnt;
+	      protind_to_length_map[prot_ind] = len;
+	    }
+	  }
+        }else
+	  prot_ind = prot_to_ind[prot];
+	//augment the pepind_to_protinds table
+	(pepind_to_protinds_map[pep_ind]).insert(prot_ind);
+	//augment to protind_to_pepinds table
+	protind_to_pepinds_map[prot_ind].insert(pep_ind);
+      }
+    }   //augment num psms
+    num_psm++;
+    if(label == 1)
+      num_pos_psm++;
+    else
+      num_neg_psm++;
+  }
+  num_spectra++;
+}
+
+
+void SQTParser :: allocate_feature_space()
+{
+  //space for feature vector
+  x = new double[num_features];
+
+
+  memset(x,0,sizeof(double)*num_features);
+  //space for spec feature vector
+  if (num_spec_features > 0)
+    {
+      xs = new double[num_spec_features];
+      memset(xs,0,sizeof(double)*num_spec_features);
+    }
+}
+
+
+void SQTParser :: fill_graphs_and_save_data(string &out_dir)
+{
+  ostringstream fname;
+  
+  //space for prot to number of all peptides info
+  protind_to_num_all_pep = new int[num_cur_prot];
+  memset(protind_to_num_all_pep,0,sizeof(int)*num_cur_prot);
+  protind_to_length = new int[num_cur_prot];
+  memset(protind_to_length,0,sizeof(int)*num_cur_prot);
+  for(map<int,string>::iterator it = ind_to_prot.begin(); it != ind_to_prot.end(); it++)
+    {
+      int protind = it->first;
+      if(protind < prot_offset)
+	continue;
+      //if database does not exist
+      if(!database_exists)
+	{
+	  int cnt = (protind_to_pepinds_map[protind]).size();
+	  protind_to_num_all_pep[protind-prot_offset] = cnt;
+	  protind_to_length[protind-prot_offset] = -1;
+	}
+      //if did not see any decoy proteins in the database or did not see half of the total proteins in the database
+      else if ( ((double)num_prot_not_found_in_db > (double)num_prot/3.0))
+	{
+	  int cnt = (protind_to_pepinds_map[protind]).size();
+	  protind_to_num_all_pep[protind-prot_offset] = cnt;
+	  protind_to_length[protind-prot_offset] = -1;
+	}
+      else
+	{
+	  //if did not find the protein in the count of all proteins, then just get the count of observed proteins
+	  if(protind_to_num_all_pep_map.find(protind) == protind_to_num_all_pep_map.end())
+	    {
+	      int cnt = (protind_to_pepinds_map[protind]).size();
+	      protind_to_num_all_pep[protind-prot_offset] = cnt;
+	      protind_to_length[protind-prot_offset] = -1;
+	    }
+	  else
+	    {
+	      int cnt = protind_to_num_all_pep_map[protind];
+	      protind_to_num_all_pep[protind-prot_offset] = cnt;
+	      int len = protind_to_length_map[protind];
+	      protind_to_length[protind-prot_offset] = len;
+	    }
+	}
+    }
+  
+  //protind_to_num_all_pep
+  protein_to_num_all_pep_map.clear();
+  protind_to_num_all_pep_map.clear();
+  protein_to_length_map.clear();
+  protind_to_length_map.clear();
+  fname << out_dir << "/protind_to_num_all_pep";
+  f_protind_to_num_all_pep.write((char*)protind_to_num_all_pep,sizeof(int)*num_cur_prot);
+  fname.str("");
+  delete[] protind_to_num_all_pep; protind_to_num_all_pep = (int*)0;
+  fname << out_dir << "/protind_to_length";
+  f_protind_to_length.write((char*)protind_to_length,sizeof(int)*num_cur_prot);
+  fname.str("");
+  delete[] protind_to_length; protind_to_length = (int*)0;
+  
+
+  //ind_to_pep
+  fname << out_dir << "/ind_to_pep";
+  ofstream f_ind_to_pep(fname.str().c_str());
+  for(map<int,string>::iterator it = ind_to_pep.begin(); it != ind_to_pep.end(); it++)
+    f_ind_to_pep << it->first << " " << it->second << "\n";
+  f_ind_to_pep.close();
+  fname.str("");
+  ind_to_pep.clear();
+
+  //pep_to_ind
+  fname << out_dir << "/pep_to_ind";
+  ofstream f_pep_to_ind(fname.str().c_str());
+  for(map<string,int>::iterator it = pep_to_ind.begin(); it != pep_to_ind.end(); it++)
+    f_pep_to_ind << it->first << " " << it->second << "\n";
+  f_pep_to_ind.close();
+  fname.str("");
+  pep_to_ind.clear();
+
+  //prot_to_ind
+  fname << out_dir << "/prot_to_ind";
+  ofstream f_prot_to_ind(fname.str().c_str(),ios::binary);
+  for(map<string,int>::iterator it = prot_to_ind.begin(); it != prot_to_ind.end(); it++)
+    f_prot_to_ind << it->first << " " << it->second << "\n";
+  f_prot_to_ind.close();
+  fname.str("");
+  prot_to_ind.clear();
+
+  //ind_to_prot
+  fname << out_dir << "/ind_to_prot";
+  ofstream f_ind_to_prot(fname.str().c_str(),ios::binary);
+  for(map<int,string>::iterator it = ind_to_prot.begin(); it != ind_to_prot.end(); it++)
+    f_ind_to_prot << it->first << " " << it->second << "\n";
+  f_ind_to_prot.close();
+  fname.str("");
+  ind_to_prot.clear();
+  
+  //pepind_to_psminds
+  pepind_to_psminds.create_bipartite_graph(pepind_to_psminds_map);
+  pepind_to_psminds_map.clear();
+  fname << out_dir << "/pepind_to_psminds";
+  ofstream f_pepind_to_psminds(fname.str().c_str(),ios::binary);
+  pepind_to_psminds.save(f_pepind_to_psminds);
+  f_pepind_to_psminds.close();
+  fname.str("");
+  pepind_to_psminds.clear();
+    
+  //pepind_to_protinds
+  pepind_to_protinds.create_bipartite_graph(pepind_to_protinds_map);
+  pepind_to_protinds_map.clear();
+  fname << out_dir << "/pepind_to_protinds";
+  ofstream f_pepind_to_protinds(fname.str().c_str(),ios::binary);
+  pepind_to_protinds.save(f_pepind_to_protinds);
+  f_pepind_to_protinds.close();
+  fname.str("");
+  pepind_to_protinds.clear();
+
+  //protind_to_pepinds
+  protind_to_pepinds.create_bipartite_graph(protind_to_pepinds_map);
+  protind_to_pepinds_map.clear();
+  fname << out_dir << "/protind_to_pepinds";
+  ofstream f_protind_to_pepinds(fname.str().c_str(),ios::binary);
+  protind_to_pepinds.save(f_protind_to_pepinds);
+  f_protind_to_pepinds.close();
+  fname.str("");
+  protind_to_pepinds.clear();
+  
+  //write out data summary
+  fname << out_dir << "/summary";
+  ofstream f_summary(fname.str().c_str());
+  //psm info
+  f_summary << num_total_features << " " << num_psm << " " << num_pos_psm << " " << num_neg_psm << endl;
+  //peptide info
+  f_summary << num_pep << " " << num_pos_pep << " " << num_neg_pep << endl;
+  //protein info
+  f_summary << num_prot << " " << num_pos_prot << " " << num_neg_prot << endl;
+  f_summary.close();
+  fname.str("");
+
+} 
+
+  
+/********* extracting features **********************************************************/
+int SQTParser::cntEnz(const string& peptide,enzyme enz) {
+    unsigned int pos=2, cnt=0;
+    char n = peptide.at(pos++);
+    while (pos<peptide.size()-2) {
+      char c = peptide.at(pos++);
+      if (isEnz(n,c,enz))
+        cnt++;
+      n=c;
+    }
+    return cnt;
+}
+
+double SQTParser::isTryptic(const char n,const char c) {
+  return (
+  (((n=='K' || n=='R') && c != 'P') ||
+  n=='-' || c=='-')
+  ?1.0:0.0);
+}
+// [FHWYLM].[^P]
+double SQTParser::isChymoTryptic(const char n,const char c) {
+  return (
+  (((n=='F' || n=='H' || n=='W' || n=='Y' || n=='L' || n=='M') && c!= 'P') ||
+  n=='-' || c=='-')
+  ?1.0:0.0);
+}
+
+// [LVAG].[^P]
+double SQTParser::isElastasic(const char n,const char c) {
+  return (
+  (((n=='L' || n=='V' || n=='A' || n=='G' ) && c!= 'P') ||
+  n=='-' || c=='-')
+  ?1.0:0.0);
+}
+
+double SQTParser::isEnz(const char n,const char c, enzyme enz) {
+    switch(enz) {
+      case TRYPSIN_ENZ:
+        return isTryptic(n,c);
+      case CHYMOTRYPSIN_ENZ:
+        return isChymoTryptic(n,c);
+      case ELASTASE_ENZ:
+        return isElastasic(n,c);
+    default:
+        return 0;
+    }
+}
+
+void SQTParser :: extract_psm_features(sqt_match &m, enzyme enz, double *x, int i)
+{
+  string pep = m.peptides[i];
+  memset(x,0,sizeof(double)*num_features);
+  //log rank by Sp
+  if (m.sp_rank[i] > 0)
+    x[0] = log((double) m.sp_rank[i]);
+  else
+    x[0] = 0.0;
+  //deltaLCN
+  x[1] = 0.0;
+  //deltaCN
+  x[2] = m.delta_cn[i];
+  //xcorr score
+  x[3] = m.xcorr_score[i];
+  //sp score
+  x[4] = m.sp_score[i];
+  //matched ions/predicted ions
+  if(m.num_total_ions[i] > 0)
+    x[5] = m.num_ions_matched[i]/m.num_total_ions[i];
+  else
+    x[5] = 0.0;
+  //observed mass
+  x[6] = m.precursor_mass;
+  //peptide length
+  x[7] = pep.size();
+  //charge
+  x[8] = 0.0; x[9] = 0.0; x[10] = 0.0;
+  if (m.charge == 1)
+    x[8] = 1.0;
+  if(m.charge == 2)
+    x[9] = 1.0;
+  if(m.charge == 3)
+    x[10] = 1.0;
+  //whether n-terminus and c-terminus have proper cleavage sites
+  x[11]=isEnz(pep.at(0),pep.at(2),enz);        
+  x[12]=isEnz(pep.at(pep.size()-3),pep.at(pep.size()-1),enz);
+  // missed cleavages
+  x[13]=(double)cntEnz(pep,enz);
+  // number of sequence_comparisons
+  x[14] = log((FLOAT_T) m.num_sequence_comparisons);
+  //x[14] = m.num_sequence_comparisons;
+  //difference between measured and calculated mass
+  x[15] = m.precursor_mass-m.calc_mass[i];
+  // absolute value of difference between measured and calculated mass
+  x[16] = m.precursor_mass-m.calc_mass[i];
+}
+
+void SQTParser :: extract_psm_features(sqt_match &m, enzyme enz, double *x, int i, int hits_read)
+{
+  string pep = m.peptides[i];
+  memset(x,0,sizeof(double)*num_features);
+  
+  //log rank by Sp
+  if (m.sp_rank[i] > 0)
+    x[0] = log((double) m.sp_rank[i]);
+  else
+    x[0] = 0.0;
+  
+  //deltaLCN
+  x[1] = 0.0;
+    
+  //deltaCN
+  x[2] = 0.0;
+  if(i < hits_read-1)
+    {
+      double xs = fabs(m.xcorr_score[i]);
+      if(xs > 0.00001)
+	x[2] = (m.xcorr_score[i] - m.xcorr_score[i+1])/m.xcorr_score[i];
+    }
+  //x[2] = m.delta_cn[i];
+  
+  //xcorr score
+  x[3] = m.xcorr_score[i];
+  
+  //sp score
+  x[4] = m.sp_score[i];
+  
+  //matched ions/predicted ions
+  if(m.num_total_ions[i] > 0)
+    x[5] = m.num_ions_matched[i]/m.num_total_ions[i];
+  else
+    x[5] = 0.0;
+  
+  //observed mass
+  x[6] = m.precursor_mass;
+
+  //peptide length
+  x[7] = pep.size();
+  
+  //charge
+  x[8] = 0.0; x[9] = 0.0; x[10] = 0.0;
+  if (m.charge == 1)
+    x[8] = 1.0;
+  if(m.charge == 2)
+    x[9] = 1.0;
+  if(m.charge == 3)
+    x[10] = 1.0;
+  
+  //whether n-terminus and c-terminus have proper cleavage sites
+  x[11]=isEnz(pep.at(0),pep.at(2),enz);        
+  x[12]=isEnz(pep.at(pep.size()-3),pep.at(pep.size()-1),enz);
+  // missed cleavages
+  x[13]=(double)cntEnz(pep,enz);
+  
+  // number of sequence_comparisons
+  //x[14] = log(m.num_sequence_comparisons);
+  //x[14] = m.num_sequence_comparisons;
+  
+  //difference between measured and calculated mass
+  x[15] = m.precursor_mass-m.calc_mass[i];
+  // absolute value of difference between measured and calculated mass
+  x[16] = fabs(m.precursor_mass-m.calc_mass[i]);
+  
+}
+
+void SQTParser :: extract_features(sqt_match &m, int hits_read, int final_hits,enzyme enz)
+{
+
+  for (int i = 0; i < min(hits_read,final_hits); i++){
+      //write the feature vector out to file
+      //extract_psm_features(m, enz, x, i);
+      extract_psm_features(m, enz, x, i, hits_read);
+           
+      if (num_spec_features > 0){
+	  
+	  if(num_cur_psm % 5000 == 0)
+	    carp(CARP_INFO, "PSM number %d", num_cur_psm);
+	  string peptide = m.peptides[i];
+	  int pos = peptide.find('.');
+	  string pept = peptide.substr(pos+1,peptide.size());
+	  pos = pept.rfind('.');
+	  pept = pept.substr(0,pos);
+
+      if (pept.find('[') != string::npos) {
+          carp(CARP_FATAL, "Modification detected in peptide %s. Barista does not "
+               "support modifications when use-spec-features=T.", pept.c_str());
+      }
+	  
+	  if(num_spec_features == 3)
+	    sfg.get_spec_features_m3(m.scan, m.charge,pept,xs);
+	  if(num_spec_features == 7)
+	    sfg.get_spec_features_m7(m.scan, m.charge,pept,xs);
+	    
+	  //write out features
+	  f_psm.write((char*)x, sizeof(double)*num_features);
+	  f_psm.write((char*)xs, sizeof(double)*num_spec_features);
+	}else
+	f_psm.write((char*)x, sizeof(double)*num_features);
+	  
+      num_total_features = num_features+num_spec_features;
+
+      if(use_quadratic_features){
+	  //for(int i = 0; i < num_features; i++)
+	  //x[i] *= x[i];
+	  //f_psm.write((char*)x, sizeof(double)*num_features);
+	  //num_total_features += num_features;
+	  double *b = new double[1];
+	  for(int i = 0; i < num_features; i++){
+	      for(int j = i; j < num_features; j++){
+		  b[0] = x[i]*x[j];
+		  f_psm.write((char*)b, sizeof(double));
+		  num_total_features++;
+		}
+	    }
+	  if(num_spec_features > 0){
+	      for(int i = 0; i < num_spec_features; i++){
+		  for(int j = i; j < num_spec_features; j++){
+		      b[0] = xs[i]*xs[j];
+		      f_psm.write((char*)b, sizeof(double));
+		      num_total_features++;
+		    }
+		}
+	    }
+	
+	}
+
+
+      //write psm tables
+      double deltaCN = m.delta_cn[i];
+      f_psmind_to_deltaCn.write((char*)(&deltaCN),sizeof(double));
+
+      double xcorr = m.xcorr_score[i]; 
+      f_psmind_to_xcorr.write((char*)(&xcorr),sizeof(double));
+
+      double sp = m.sp_score[i];
+      f_psmind_to_spscore.write((char*)(&sp),sizeof(double));
+
+      double calc_mass = m.calc_mass[i];
+      f_psmind_to_calculated_mass.write((char*)(&calc_mass),sizeof(double));
+
+      int scan = m.scan;
+      f_psmind_to_scan.write((char*)(&scan),sizeof(int));
+
+      int charge = m.charge;
+      f_psmind_to_charge.write((char*)(&charge),sizeof(int));
+      
+      double precursor_mass = m.precursor_mass;
+      f_psmind_to_precursor_mass.write((char*)(&precursor_mass),sizeof(double));
+      
+    //Sp rank 
+    int  sp_rank=m.sp_rank[i];
+    f_psmind_to_sp_rank.write((char*)(&sp_rank),sizeof(int));
+      
+    //xcorr rank 
+    int  xc_rank=m.xcorr_rank[i]; 
+    f_psmind_to_xcorr_rank.write((char*)(&xc_rank),sizeof(int));
+
+    //matches_spectrum 
+    int matches_spectrum = m.num_sequence_comparisons;
+    f_pmsind_to_matches_spectrum.write((char*)(&matches_spectrum),sizeof(int));
+      
+    //b/y ions matched 
+    double by_ions_matched=m.num_ions_matched[i]; 
+    f_psmind_to_by_ions_matched.write((char*)(&by_ions_matched),sizeof(double));
+
+    //b/y ions total 
+    double by_ions_total=m.num_total_ions[i]; 
+    f_psmind_to_by_ions_total.write((char*)(&by_ions_total),sizeof(double));
+    
+    // peptide position 
+    int peptide_position=m.peptide_pos[i];
+    f_psmind_to_peptide_position.write((char*)(&peptide_position),sizeof(int));
+
+    //get the pepind of the peptide
+    string pep = m.peptides[i];
+    int pepind = pep_to_ind[pep];
+    f_psmind_to_pepind.write((char*)(&pepind),sizeof(int));
+      
+    f_psmind_to_fileind.write((char*)(&cur_fileind),sizeof(int));
+
+    num_cur_psm++;
+  }
+}
+
+
+
+/************ parsing sqt file*******************************/
+
+void SQTParser :: read_M_line(ifstream &is, sqt_match &m)
+{
+  //rank by scorr
+  int xcorr_rank;
+  is >> xcorr_rank;
+  m.xcorr_rank.push_back(xcorr_rank);
+  
+  //rank by Sp
+  int sp_rank;
+  is >> sp_rank;
+  m.sp_rank.push_back(sp_rank);
+  
+  //calculated mass
+  double calc_mass;
+  is >> calc_mass;
+  m.calc_mass.push_back(calc_mass);
+
+  //delta cn
+  double delta_cn;
+  is >> delta_cn;
+  m.delta_cn.push_back(delta_cn);
+
+  //xcorr
+  double xcorr;
+  is >> xcorr;
+  m.xcorr_score.push_back(xcorr);
+
+  //sp_score
+  double sp;
+  is >> sp;
+  m.sp_score.push_back(sp);
+  
+  //number of matched ions
+  int num_ions_matched;
+  is >> num_ions_matched;
+  m.num_ions_matched.push_back(num_ions_matched);
+
+  //number of total ions;
+  double num_total_ions;
+  is >> num_total_ions;
+  m.num_total_ions.push_back(num_total_ions);
+
+  //peptide
+  string peptide;
+  is >> peptide;
+  m.peptides.push_back(peptide);
+}
+
+
+void SQTParser :: read_S_line(ifstream &is, sqt_match &m)
+{
+  string tempstr;
+  //scan begin
+  is >> m.scan;
+  //scan end
+  is >> tempstr;
+  //charge
+  is >> m.charge;
+  is >> tempstr;
+  is >> tempstr;
+  //precursor ion mass
+  is >> m.precursor_mass;
+  is >> tempstr;
+  is >> tempstr;
+  //number of matches considered
+  is >> m.num_sequence_comparisons;
+}
+
+int SQTParser :: parse_sqt_spectrum_matches(ifstream &is, sqt_match &m)
+{
+  string tempstr;
+  read_S_line(is,m);
+  erase_matches();
+  int num_hits = 0;
+  int num_proteins_in_match = 0;
+  while (!is.eof())
+    {
+      is >> tempstr;
+      if (tempstr.compare("M") == 0)
+	{
+	  read_M_line(is,m);
+	  if (num_hits > 0)
+	    m.num_proteins_in_match.push_back(num_proteins_in_match);
+	  num_proteins_in_match = 0;
+	  num_hits++;
+	}
+      if(tempstr.compare("L") == 0)
+	{
+	  string prot;
+	  is >> prot;
+	  m.proteins.push_back(prot);
+	  num_proteins_in_match++;
+	  tempstr = "";
+	}
+      if(tempstr.compare("S") == 0)
+	break;
+    }
+  if (num_hits > 0)
+    m.num_proteins_in_match.push_back(num_proteins_in_match);
+  assert(num_hits == (int)m.num_proteins_in_match.size());
+  return num_hits;
+
+  
+}
+
+void SQTParser :: read_sqt_file(ifstream &is, string &decoy_prefix, int final_hits, enzyme enz, bool decoy)
+{
+  int cn = 0;
+  string line;
+  string tempstr;
+  is >> tempstr;
+  while(!is.eof())
+    {
+      if (tempstr.compare("H") != 0)
+	break;
+      getline(is, line);
+      is >> tempstr;
+    }
+  int num_hits;
+  while(!is.eof())
+    {
+      assert(tempstr.compare("S") == 0);
+      num_hits = parse_sqt_spectrum_matches(is,m);
+      add_matches_to_tables(m, decoy_prefix, num_hits, final_hits, decoy);
+      extract_features(m, num_hits, final_hits,enz);
+      cn++;
+      //if(cn > 10)
+      //break;
+    }
+  
+}
+
+int SQTParser :: check_file(ostringstream &fname)
+{
+  ifstream f(fname.str().c_str());
+  if(!f.is_open())
+    {
+      carp(CARP_INFO,"could not open %s", fname.str().c_str());
+      return 0;
+    }
+  f.close();
+  fname.str("");
+  return 1;
+}
+
+
+int SQTParser :: check_input_dir(string &in_dir)
+{
+  
+  ostringstream fname;
+  
+  fname << in_dir << "/summary";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  fname << in_dir << "/psm";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");   
+
+  //psmind_to_label
+  fname << in_dir << "/psmind_to_label";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  //psmind_to_pepind
+  fname << in_dir << "/psmind_to_pepind";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+       
+  //psmind_to_scan
+  fname << in_dir << "/psmind_to_scan";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+  
+  //psmind_to_charge
+  fname << in_dir << "/psmind_to_charge";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  //psmind_to_precursor_mass
+  fname << in_dir << "/psmind_to_precursor_mass";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  //psmind_to_fileind
+  fname << in_dir << "/psmind_to_fileind";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  //fileind_to_fname
+  fname << in_dir << "/fileind_to_fname";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  //psmind_to_xcorr
+  fname << in_dir << "/psmind_to_xcorr";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  //psmind_to_spscore
+  fname << in_dir << "/psmind_to_spscore";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  //psmind_to_spscore
+  fname << in_dir << "/psmind_to_deltaCn";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  //psmind_to_calculated_mass
+  fname << in_dir << "/psmind_to_calculated_mass";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  //pepind_to_label
+  fname << in_dir << "/pepind_to_label";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  //protind_to_label
+  fname << in_dir << "/protind_to_label";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  fname << in_dir << "/protind_to_num_all_pep";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  fname << in_dir << "/protind_to_length";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  //ind_to_pep
+  fname << in_dir << "/ind_to_pep";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  //pep_to_ind
+  fname << in_dir << "/pep_to_ind";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  //ind_to_prot
+  fname << in_dir << "/ind_to_prot";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  //prot_to_ind
+  fname << in_dir << "/prot_to_ind";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  //pepind_to_protinds
+  fname << in_dir << "/pepind_to_protinds";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  //pepind_to_psminds
+  fname << in_dir << "/pepind_to_psminds";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+  
+  //psmind_to_sp_rank
+  fname << in_dir << "/psmind_to_sp_rank";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+  
+  //psmind_to_xcorr_rank
+  fname << in_dir << "/psmind_to_xcorr_rank";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+  
+  //psmind_to_by_ions_matched
+  fname << in_dir << "/psmind_to_by_ions_matched";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+  
+  //psmind_to_by_ions_total
+  fname << in_dir << "/psmind_to_by_ions_total";
+  if(!check_file(fname))
+    return 0;
+  fname.str("");
+
+  //psmind_matches_spectrum
+  fname << in_dir << "/psmind_to_matches_spectrum";
+  if(!check_file(fname))
+    return 0;
+  fname.str(""); 
+  
+  //pepind_peptide_position
+  fname << in_dir << "/psmind_to_peptide_position";
+  if(!check_file(fname))
+    return 0;
+  fname.str(""); 
+  
+
+  return 1;
+}
+
+
+void SQTParser :: clean_up(string dir)
+{
+
+  ostringstream fname;
+      
+  fname << out_dir << "/summary";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  fname << dir << "/psm";
+  remove(fname.str().c_str());
+  fname.str("");
+  
+  //psmind_to_pepind
+  fname << out_dir << "/psmind_to_pepind";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_scan
+  fname << out_dir << "/psmind_to_scan";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_charge
+  fname << out_dir << "/psmind_to_charge";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_precursor_mass
+  fname << out_dir << "/psmind_to_precursor_mass";
+  remove(fname.str().c_str());
+  fname.str("");
+  remove(fname.str().c_str());
+  fname.str("");
+  
+  //psmind_to_sp_rank
+  fname << out_dir << "/psmind_to_sp_rank";
+  remove(fname.str().c_str());
+  fname.str(""); 
+  
+  //psmind_to_xcorr_rank
+  fname << out_dir << "/psmind_to_xcorr_rank";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_label
+  fname << out_dir << "/psmind_to_label";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_fileind
+  fname << out_dir << "/psmind_to_fileind";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //fileind_to_fname
+  fname << out_dir << "/fileind_to_fname";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_calculated_mass
+  fname << out_dir << "/psmind_to_calculated_mass";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_xcorr
+  fname << out_dir << "/psmind_to_xcorr";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_spscore
+  fname << out_dir << "/psmind_to_spscore";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_deltaCn
+  fname << out_dir << "/psmind_to_deltaCn";
+  remove(fname.str().c_str());
+  fname.str("");
+  
+  //pepind_to_label
+  fname << out_dir << "/pepind_to_label";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //pepind_to_psminds
+  fname << out_dir << "/pepind_to_psminds";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //pepind_to_protinds
+  fname << out_dir << "/pepind_to_protinds";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //ind_to_pep
+  fname << out_dir << "/ind_to_pep";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //pep_to_ind
+  fname << out_dir << "/pep_to_ind";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //protind_to_label
+  fname << out_dir << "/protind_to_label";
+  remove(fname.str().c_str());
+  fname.str("");
+  
+  //protind_to_num_all_pep
+  fname << out_dir << "/protind_to_num_all_pep";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //protind_to_length
+  fname << out_dir << "/protind_to_length";
+  remove(fname.str().c_str());
+  fname.str("");
+
+
+  //protind_to_pepinds
+  fname << out_dir << "/protind_to_pepinds";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //ind_to_prot
+  fname << out_dir << "/ind_to_prot";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //prot_to_ind
+  fname << out_dir << "/prot_to_ind";
+  remove(fname.str().c_str());
+  fname.str("");
+  
+  //psmind_to_sp_rank
+  fname << out_dir << "/psmind_to_sp_rank";
+  remove(fname.str().c_str());
+  fname.str(""); 
+  
+  //psmind_to_xcorr_rank
+  fname << out_dir << "/psmind_to_xcorr_rank";
+  remove(fname.str().c_str());
+  fname.str("");
+  
+  //psmind_to_by_ions_matched
+  fname << out_dir << "/psmind_to_by_ions_matched";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_by_ions_total
+  fname << out_dir << "/psmind_to_by_ions_total";
+  remove(fname.str().c_str());
+  fname.str("");
+  
+  //psmind_to_matches_spectrum
+  fname << out_dir << "/psmind_to_matches_spectrum";
+  remove(fname.str().c_str());
+  fname.str("");
+  
+  //psmind_to_peptide_position
+  fname << out_dir << "/psmind_to_peptide_position";
+  remove(fname.str().c_str());
+  fname.str("");
+
+}
+
+
+
+void SQTParser :: open_files(string &out_dir)
+{
+
+  ostringstream fname;
+
+  fname << out_dir << "/psm";
+  f_psm.open(fname.str().c_str(), ios::binary);
+  fname.str("");
+  
+  //psmind_to_label
+  fname << out_dir << "/psmind_to_label";
+  f_psmind_to_label.open(fname.str().c_str(),ios::binary);
+  fname.str("");
+  
+  //psmind_to_pepind
+  fname << out_dir << "/psmind_to_pepind";
+  f_psmind_to_pepind.open(fname.str().c_str(),ios::binary);
+  fname.str("");
+  
+  //psmind_to_scan
+  fname << out_dir << "/psmind_to_scan";
+  f_psmind_to_scan.open(fname.str().c_str(),ios::binary);
+  fname.str("");
+  
+  //psmind_to_charge
+  fname << out_dir << "/psmind_to_charge";
+  f_psmind_to_charge.open(fname.str().c_str(),ios::binary );
+  fname.str("");
+  
+  //psmind_to_precursor_mass
+  fname << out_dir << "/psmind_to_precursor_mass";
+  f_psmind_to_precursor_mass.open(fname.str().c_str(),ios::binary );
+  fname.str("");
+  
+  //psmind_to_sp_rank 
+  fname << out_dir << "/psmind_to_sp_rank";
+  f_psmind_to_sp_rank.open(fname.str().c_str(),ios::binary );
+  fname.str("");
+
+  //psmind_to_xcorr_rank 
+  fname << out_dir << "/psmind_to_xcorr_rank";
+  f_psmind_to_xcorr_rank.open(fname.str().c_str(),ios::binary );
+  fname.str("");
+     
+  //psmind_to_matches_spectrum 
+  fname << out_dir << "/psmind_to_matches_spectrum";
+  f_pmsind_to_matches_spectrum.open(fname.str().c_str(),ios::binary );
+  fname.str("");
+  ///additional info
+  //psmind_to_xcorr
+  fname << out_dir << "/psmind_to_xcorr";
+  f_psmind_to_xcorr.open(fname.str().c_str(),ios::binary );
+  fname.str("");
+  
+  //psmind_to_spscore
+  fname << out_dir << "/psmind_to_spscore";
+  f_psmind_to_spscore.open(fname.str().c_str(),ios::binary );
+  fname.str("");
+  
+  //psmind_to_deltaCn
+  fname << out_dir << "/psmind_to_deltaCn";
+  f_psmind_to_deltaCn.open(fname.str().c_str(),ios::binary );
+  fname.str("");
+  
+  //psmind_to_calculated_mass
+  fname << out_dir << "/psmind_to_calculated_mass";
+  f_psmind_to_calculated_mass.open(fname.str().c_str(),ios::binary );
+  fname.str("");
+
+  //psmind_to_by_ions_matched
+  fname << out_dir << "/psmind_to_by_ions_matched";
+  f_psmind_to_by_ions_matched.open(fname.str().c_str(),ios::binary );
+  fname.str("");
+  
+  //psmind_to_by_ions_total
+  fname << out_dir << "/psmind_to_by_ions_total";
+  f_psmind_to_by_ions_total.open(fname.str().c_str(),ios::binary );
+  fname.str("");
+
+  //psmind_to_peptide_position
+  fname << out_dir << "/psmind_to_peptide_position";
+  f_psmind_to_peptide_position.open(fname.str().c_str(),ios::binary );
+  fname.str("");
+  
+  //end of additional info
+  
+  //pepind_to_label
+  fname << out_dir << "/pepind_to_label";
+  f_pepind_to_label.open(fname.str().c_str(),ios::binary);
+  fname.str("");
+  
+  //protind_to_label
+  fname << out_dir << "/protind_to_label";
+  f_protind_to_label.open(fname.str().c_str(),ios::binary);
+  fname.str("");
+  
+  fname << out_dir << "/protind_to_num_all_pep";
+  f_protind_to_num_all_pep.open(fname.str().c_str(),ios::binary);
+  fname.str("");
+
+  fname << out_dir << "/protind_to_length";
+  f_protind_to_length.open(fname.str().c_str(),ios::binary);
+  fname.str("");
+  
+  fname << out_dir << "/fileind_to_fname";
+  f_fileind_to_fname.open(fname.str().c_str(),ios::binary);
+  fname.str("");
+  
+  fname << out_dir << "/psmind_to_fileind";
+  f_psmind_to_fileind.open(fname.str().c_str(),ios::binary);
+  fname.str("");
+  
+}
+
+void SQTParser :: close_files()
+{
+
+  ostringstream fname;
+  
+  f_psm.close();
+  f_psmind_to_label.close();
+  f_psmind_to_pepind.close();
+  f_psmind_to_scan.close();
+  f_psmind_to_charge.close();
+  f_psmind_to_precursor_mass.close();
+
+  f_psmind_to_xcorr.close();
+  f_psmind_to_spscore.close();
+  f_psmind_to_deltaCn.close();
+  f_psmind_to_calculated_mass.close();
+
+  f_pepind_to_label.close();
+  f_protind_to_label.close();
+  f_protind_to_num_all_pep.close();
+  f_protind_to_length.close();
+  f_fileind_to_fname.close();
+  f_psmind_to_fileind.close();
+  f_psmind_to_sp_rank.close();//sp rank
+  f_psmind_to_xcorr_rank.close();//xcorr rank
+  f_pmsind_to_matches_spectrum.close();// distinct matches/spectrum
+  f_psmind_to_by_ions_matched.close();// b/y ions match  
+  f_psmind_to_by_ions_total.close();//b/y ions total  
+  f_psmind_to_peptide_position.close();//peptide position 
+}
+
+
+int SQTParser::cntEnzConstraints(string& seq,enzyme enz) {
+  int cnt = 0;
+  unsigned int pos=0;
+  unsigned int pos1 = pos;
+  char n = seq.at(pos);
+  pos++;
+  while (pos<seq.size()-1) {
+    char c = seq.at(pos);
+    if (isEnz(n,c,enz))
+      {
+	int pep_len = pos-pos1;
+	if(pep_len <= max_len && pep_len >= min_len)
+	  {
+	    cnt++;
+	    pos1 = pos;
+	  }
+      }
+    n=c;
+    pos++;
+  }
+  return cnt;
+}
+
+void SQTParser :: digest_database(ifstream &f_db, enzyme e)
+{
+  string tempstr;
+  string prot;
+  ostringstream seq;
+  int num_prot_read = 0;
+  while(!f_db.eof())
+    {
+      f_db >> tempstr;
+      if(tempstr[0] == '>')
+	{
+	  if(num_prot_read > 0)
+	    {
+	      string sequence = seq.str();
+	      int cnt = cntEnzConstraints(sequence,e);
+	      protein_to_num_all_pep_map[prot] = cnt+1;
+	      protein_to_length_map[prot] = sequence.size();
+	      seq.str("");
+	    }
+	  prot = tempstr.substr(1,tempstr.size());
+	  num_prot_read++;
+	  
+	  getline(f_db, tempstr);
+	}
+      else
+	{
+	  seq << tempstr;
+	}
+    }
+  if(num_prot_read > 0)
+    {
+      string sequence = seq.str();
+      int cnt = cntEnzConstraints(sequence,e);
+      protein_to_num_all_pep_map[prot] = cnt;
+      seq.str("");
+    }
+}
+
+
+bool  SQTParser :: read_search_results(string& cur_fname, bool decoy) {
+  ifstream f_sqt(cur_fname.c_str());
+  if(!f_sqt.is_open()){
+    carp(CARP_WARNING, "could not open sqt file: %s", cur_fname.c_str());
+    return false; 
+  }
+      read_sqt_file(f_sqt, decoy_prefix, fhps,e, decoy);
+      f_sqt.close();
+  return true; 
+}
+
+int SQTParser :: run()
+{
+  //parse database
+  if(database_exists)
+    {
+      for(unsigned int i = 0; i < db_file_names.size(); i++)
+	{
+	  db_name = db_file_names[i];
+	  ifstream f_db(db_name.c_str());
+	  if(!f_db.is_open())
+	    {
+	      carp(CARP_WARNING, "could not open database file: %s", db_name.c_str());
+	      return 0;
+	    }
+	  carp(CARP_INFO,"digesting database %s", db_name.c_str());
+	  digest_database(f_db, e);
+	  f_db.close();
+	}
+    }
+  
+  allocate_feature_space();
+  open_files(out_dir);
+  carp(CARP_INFO, "parsing files:");
+  int num_files_read = 0;
+  string ms2_fn = "";
+  string last_ms2 = "";
+  if(num_spec_features > 0)
+    sfg.initialize_aa_tables();
+  for(unsigned int i = 0; i < sqt_file_names.size(); i++)
+    {
+      if(num_spec_features>0)
+	{
+	  ms2_fn = ms2_file_names[i];
+	  if(ms2_fn.compare(last_ms2) != 0)
+	    {
+	      //prepare to generate spectrum features
+	      sfg.clear();
+	      carp(CARP_INFO, "reading file %s", ms2_fn.c_str());
+	      sfg.read_ms2_file(ms2_fn);
+	    }
+	  last_ms2 = ms2_fn;
+	}
+
+      cur_fname = sqt_file_names[i];
+      cur_fileind = i;
+      carp(CARP_INFO, "parsing file %s", cur_fname.c_str());
+      f_fileind_to_fname << i << " " << cur_fname << endl;
+      if(read_search_results(cur_fname, i != 0)) 
+        num_files_read++;
+    }
+  if(num_files_read < 1)
+    {
+      carp(CARP_WARNING, "Could not parse any search result files");
+      return 0;
+    }
+  
+  carp(CARP_INFO, "Number of spectra: %d", num_spectra);
+  carp(CARP_INFO, "Number of PSMs: total %d positives %d negatives %d", num_psm, num_pos_psm, num_neg_psm);
+  carp(CARP_INFO, "Number of peptides: total %d positives %d negatives %d", num_pep, num_pos_pep, num_neg_pep);
+  carp(CARP_INFO, "Number of proteins: total %d positives %d negatives %d", num_prot, num_pos_prot, num_neg_prot);
+
+  if(database_exists)
+    {
+      if( (double)num_prot_not_found_in_db > (double)num_prot/3.0)
+	{
+	  if( num_neg_prot_not_found_in_db == num_neg_prot && (double)num_pos_prot_not_found_in_db < (double)num_pos_prot/2.0)
+	    carp(CARP_WARNING, "The database did not contain any of the decoy proteins that were found in the search result files. This might mean that only target but the decoy database was provided.");
+	  else
+	    carp(CARP_WARNING, "The database did not contain %d of the % d proteins that were found in the search result files. This might mean that the database does not match search result files.", num_prot_not_found_in_db, num_prot);
+	}
+    }
+
+  if(num_neg_prot == 0)
+    {
+      carp(CARP_WARNING, "Found %d decoy proteins in the search result files.", num_neg_prot);
+      //return 0;
+      //TODO SJM, how decoys are represented in the search results using a 
+      //fasta or index search is different for crux.  
+      //This temporary fix will work
+      //for q-ranker.
+    }
+
+  //save the data
+  fill_graphs_and_save_data(out_dir);
+  close_files();
+  
+  return 1;
+}
+
+
+void SQTParser :: read_list_of_files(string &list, vector<string> &fnames)
+{
+  ifstream f(list.c_str());
+  string str;
+  f >> str;
+  while(!f.eof())
+    {
+      fnames.push_back(str);
+      f >> str;
+    }
+  f.close();
+}
+
+
+int SQTParser :: set_output_dir(string &output_dir, int overwrite_flag)
+{
+  int intStat;
+  struct stat stFileInfo;
+  intStat = stat(output_dir.c_str(), &stFileInfo);
+
+  if (intStat == 0)
+    {
+      //is this a directory?
+      if(!((stFileInfo.st_mode & S_IFMT) == S_IFDIR))
+	{
+	  //it is not a directory
+      	  cout << "WARNING: File " << output_dir << " already exists, but it is not a directory" << endl;
+	  if(overwrite_flag == 1)
+	    {
+	      cout << "INFO: Creating output directory " << output_dir << endl;
+	      remove(output_dir.c_str());
+	      int dir_access = S_IRWXU + S_IRWXG + S_IRWXO;
+	      if (mkdir(output_dir.c_str(), dir_access)) {
+		// mkdir failed
+		cout << "FATAL: Unable to create output directory " << output_dir << endl;
+		return 0;
+	      }
+	    }
+	  else
+	    {
+	      cout << "FATAL: File " << output_dir << " cannot be overwritten. Please use --overwrite T to replace or specify a different output directory." << endl;
+	      return 0;
+	    }
+	}
+    }
+  else
+    {
+      cout << "INFO: creating output directory " << output_dir << endl;
+      int dir_access = S_IRWXU + S_IRWXG + S_IRWXO;
+      if (mkdir(output_dir.c_str(), dir_access)) {
+	// mkdir failed
+	cout << "FATAL: unable to create output directory " << output_dir << endl;
+	return 0;
+      }
+    }
+
+  out_dir = output_dir;
+  return 1;
+}
+
+int SQTParser :: is_ending(string &name, const string &ext)
+{
+  int len = ext.size();
+  int pos = name.size()-len-1;
+  string lowerName(name);
+  string lowerExt(ext);
+  transform(lowerName.begin() + pos, lowerName.end(),
+            lowerName.begin() + pos, ::tolower);
+  transform(lowerExt.begin(), lowerExt.end(),
+            lowerExt.begin(), ::tolower);
+  if(lowerName.find(lowerExt,pos) != string::npos)
+    return pos;
+  else
+    return 0;
+}
+
+int SQTParser :: is_spectrum_file(string &fname)
+{
+  for (vector<string>::const_iterator i = spectrumExts_.begin();
+       i != spectrumExts_.end();
+       ++i) {
+    int pos = is_ending(fname, *i);
+    if (pos != 0) {
+      return pos;
+    }
+  }
+  return 0;
+}
+
+int SQTParser :: is_fasta(string &fname)
+{
+  string ext1 = ".fasta";
+  string ext2 = ".fsa";
+  string ext3 = ".fa";
+  if(is_ending(fname, ext1) || is_ending(fname, ext2) || is_ending(fname, ext3))
+    return 1;
+  return 0;
+}
+
+int SQTParser :: set_database_source(string &db_source)
+{
+  DIR *dp;
+  struct dirent *dirp;
+
+  int intStat;
+  struct stat stFileInfo;
+  intStat = stat(db_source.c_str(), &stFileInfo);
+  if(intStat != 0)
+    {
+      carp(CARP_WARNING, "%s does not exist", db_source.c_str());
+      return 0;
+    }
+  //is this a directory?
+  if((stFileInfo.st_mode & S_IFMT) == S_IFDIR)
+    {
+      //try to open it
+      if((dp  = opendir(db_source.c_str())) == NULL)
+	{
+	  carp(CARP_WARNING, "openning directory %s failed ", db_source.c_str());
+	  return 0;
+	}
+      int cn = 0;
+      while ((dirp = readdir(dp)) != NULL) 
+	{
+	  string fname = string(dirp->d_name);
+	  if(is_fasta(fname))
+	    {
+	      ostringstream fstr;
+	      fstr << db_source;
+	      if(db_source.at(db_source.size()-1) != '/')
+		fstr <<"/";
+	      fstr << fname;
+	      string dbname = fstr.str();
+	      db_file_names.push_back(dbname);
+	      cn++;
+	    }
+	}
+      closedir(dp);
+      if(cn<1)
+	{
+	  carp(CARP_WARNING, "did not find any .fasta files in %s directory", db_source.c_str());
+	  return 0;
+	}
+    }
+  else
+    {
+      if(is_fasta(db_source))
+	db_file_names.push_back(db_source);
+      else 
+	read_list_of_files(db_source, db_file_names);
+    }
+    
+  database_exists = 1;
+ 
+  return 1;
+}
+
+string SQTParser::get_parser_extension() {
+
+  return ".sqt";
+}
+
+int SQTParser :: match_file_to_ms2(string &sqt_source, string &prefix)
+{
+  DIR *dp;
+  struct dirent *dirp;
+  //try openning the directory
+  if((dp  = opendir(sqt_source.c_str())) == NULL)
+    {
+      carp(CARP_WARNING, "openning directory %s failed ", sqt_source.c_str());
+      return 0;
+    }
+  int cn = 0;
+  //read sqt files in the directory 
+  while ((dirp = readdir(dp)) != NULL) 
+    {
+      string ext_sqt = get_parser_extension();
+      string fname = string(dirp->d_name);
+      int pos = is_ending(fname, ext_sqt);
+      if((pos != 0) && (fname.find(prefix,0) != string::npos))
+	{
+	  ostringstream fstr;
+	  fstr << sqt_source;
+	  if(sqt_source.at(sqt_source.size()-1) != '/')
+	    fstr << "/";
+	  fstr << fname;
+	  string sqtname = fstr.str();
+	  fstr.str("");
+	  sqt_file_names.push_back(sqtname);
+	  cn++;
+	}
+    }
+  closedir(dp);
+  return cn;
+}
+
+
+int SQTParser :: collect_ms2_files(string &ms2_source, string & sqt_source)
+{
+  DIR *dp;
+  struct dirent *dirp;
+  //try openning the directory
+  if((dp  = opendir(ms2_source.c_str())) == NULL)
+    {
+      carp(CARP_WARNING, "openning directory %s failed ", ms2_source.c_str());
+      return 0;
+    }
+  int cn = 0;
+  int total_matched = 0;
+  //read ms2 files in the directory 
+  while ((dirp = readdir(dp)) != NULL) 
+    {
+      string fname = string(dirp->d_name);
+      int pos = is_spectrum_file(fname);
+      if(pos != 0)
+	{
+	  string prefix = fname.substr(0,pos+1);
+	  //collect the file
+	  ostringstream fstr;
+	  fstr << ms2_source;
+	  if(ms2_source.at(ms2_source.size()-1) != '/')
+	    fstr << "/";
+	  fstr << fname;
+	  string ms2name = fstr.str();
+	  fstr.str("");
+	  int num_matched = match_file_to_ms2(sqt_source, prefix);
+	  total_matched += num_matched;
+	  if(!num_matched)
+	    carp(CARP_WARNING, "could not find %s*.sqt in directory %s to match %s, skipping", prefix.c_str(), sqt_source.c_str(), ms2name.c_str());
+	  else
+	    {
+	      for(int i = 0; i < num_matched; i++)
+		ms2_file_names.push_back(ms2name);
+	    }
+	    cn++;
+	}
+    }
+  closedir(dp);
+
+  if(cn<1)
+    {
+      carp(CARP_WARNING, "did not find any .ms2 files in %s directory", ms2_source.c_str());
+      return 0;
+    }
+    if(total_matched<1)
+    {
+      carp(CARP_WARNING, "did not find any .sqt files in %s directory to match the .ms2 files in %s directory", sqt_source.c_str(), ms2_source.c_str());
+      return 0;
+    }
+
+  
+  return 1;
+}
+
+
+int SQTParser :: set_input_sources(string &ms2_source, string &sqt_source)
+{
+  
+  int intStat;
+  struct stat stFileInfo;
+  intStat = stat(ms2_source.c_str(), &stFileInfo);
+  if(intStat != 0)
+    {
+      carp(CARP_WARNING, "%s does not exist", ms2_source.c_str());
+      return 0;
+    }
+  if((stFileInfo.st_mode & S_IFMT) == S_IFDIR)
+    {
+      if(!collect_ms2_files(ms2_source, sqt_source))
+      return 0;
+    }
+  else
+    {
+      string ext_sqt = get_parser_extension();
+      if(is_spectrum_file(ms2_source))
+	{
+	  if(!is_ending(sqt_source, ext_sqt))
+	    {
+	      carp(CARP_WARNING,  "expecting search file to accompany the ms2 file");
+	      return 0;
+	    }
+	  ms2_file_names.push_back(ms2_source);
+	  sqt_file_names.push_back(sqt_source);
+	}
+      else 
+	{
+	  read_list_of_files(ms2_source, ms2_file_names);
+	  read_list_of_files(sqt_source, sqt_file_names);
+	  if(ms2_file_names.size() != sqt_file_names.size())
+	    {
+	      carp(CARP_WARNING, " the number of search and ms2 files does not match: each search file should be accompaned by ms2 file");
+	      return 0;
+	    }
+	}
+    }
+
+  return 1;
+}
+
+/*************** for separate searches ********************************************************/
+
+int SQTParser :: match_target_file_to_ms2(string &sqt_source, string &prefix)
+{
+  DIR *dp;
+  struct dirent *dirp;
+  //try openning the directory
+  if((dp  = opendir(sqt_source.c_str())) == NULL)
+    {
+      carp(CARP_WARNING, "openning directory %s failed ", sqt_source.c_str());
+      return 0;
+    }
+  int cn = 0;
+  //read sqt files in the directory
+  ostringstream oss;
+  oss << ".target" << get_parser_extension(); 
+  string ext_sqt = oss.str();
+  while ((dirp = readdir(dp)) != NULL) 
+    {
+      string fname = string(dirp->d_name);
+      int pos = is_ending(fname, ext_sqt);
+      if((pos != 0) && (fname.find(prefix,0) != string::npos))
+	{
+	  ostringstream fstr;
+	  fstr << sqt_source;
+	  if(sqt_source.at(sqt_source.size()-1) != '/')
+	    fstr << "/";
+	  fstr << fname;
+	  string sqtname = fstr.str();
+	  fstr.str("");
+	  sqt_file_names.push_back(sqtname);
+	  cn++;
+	}
+    }
+  closedir(dp);
+  return cn;
+}
+
+
+int SQTParser :: match_decoy_file_to_ms2(string &sqt_source, string &prefix)
+{
+  DIR *dp;
+  struct dirent *dirp;
+  //try openning the directory
+  if((dp  = opendir(sqt_source.c_str())) == NULL)
+    {
+      carp(CARP_WARNING, "openning directory %s failed ", sqt_source.c_str());
+      return 0;
+    }
+  int cn = 0;
+  //read sqt files in the directory 
+  ostringstream oss;
+  oss << ".decoy" << get_parser_extension();
+  string ext_sqt = oss.str();
+  while ((dirp = readdir(dp)) != NULL) 
+    {
+      string fname = string(dirp->d_name);
+      int pos = is_ending(fname, ext_sqt);
+      if((pos != 0) && (fname.find(prefix,0) != string::npos))
+	{
+	  ostringstream fstr;
+	  fstr << sqt_source;
+	  if(sqt_source.at(sqt_source.size()-1) != '/')
+	    fstr << "/";
+	  fstr << fname;
+	  string sqtname = fstr.str();
+	  fstr.str("");
+	  sqt_file_names.push_back(sqtname);
+	  cn++;
+	}
+    }
+  closedir(dp);
+  return cn;
+}
+
+
+int SQTParser :: collect_ms2_files(string &ms2_source, string &sqt_target_source, string &sqt_decoy_source)
+{
+  DIR *dp;
+  struct dirent *dirp;
+  //try openning the directory
+  if((dp  = opendir(ms2_source.c_str())) == NULL)
+    {
+      carp(CARP_WARNING, "openning directory %s failed ", ms2_source.c_str());
+      return 0;
+    }
+  int cn = 0;
+  //read ms2 files in the directory
+  while ((dirp = readdir(dp)) != NULL) 
+    {
+      string fname = string(dirp->d_name);
+      int pos = is_spectrum_file(fname);
+      if(pos != 0)
+	{
+	  string prefix = fname.substr(0,pos+1);
+	  //collect the file
+	  ostringstream fstr;
+	  fstr << ms2_source;
+	  if(ms2_source.at(ms2_source.size()-1) != '/')
+	    fstr << "/";
+	  fstr << fname;
+	  string ms2name = fstr.str();
+	  fstr.str("");
+	  int num_matched_targets = match_target_file_to_ms2(sqt_target_source, prefix); 
+	  int num_matched_decoys = match_decoy_file_to_ms2(sqt_decoy_source, prefix); 
+	  	  
+	  if(!num_matched_targets)
+	    {
+	      carp(CARP_WARNING, "could not find %s*.target.sqt in directory %s to match %s, skipping", prefix.c_str(), sqt_target_source.c_str(), ms2name.c_str());
+	      continue;
+	    }
+	  if(!num_matched_decoys)
+	    {
+	      carp(CARP_WARNING, "could not find %s*.decoy.sqt in directory %s to match %s, skipping", prefix.c_str(), sqt_decoy_source.c_str(), ms2name.c_str());
+	      continue;
+	    }
+	  for(int i = 0; i < (num_matched_targets+num_matched_decoys); i++)
+	    ms2_file_names.push_back(ms2name);
+	  	  
+	  cn++;
+	}
+    }
+  closedir(dp);
+
+  if(cn<1)
+    {
+      carp(CARP_WARNING, "did not find any .ms2 files in %s directory or did not find any sqt files matching the ms2 files by name", ms2_source.c_str());
+      return 0;
+    }
+  
+  return 1;
+}
+
+
+int SQTParser :: set_input_sources(string &ms2_source, string &sqt_target_source, string &sqt_decoy_source)
+{
+  int intStat;
+  struct stat stFileInfo;
+  intStat = stat(ms2_source.c_str(), &stFileInfo);
+  if(intStat != 0)
+    {
+      carp(CARP_WARNING, "%s does not exist", ms2_source.c_str());
+      return 0;
+    }
+  if((stFileInfo.st_mode & S_IFMT) == S_IFDIR)
+    {
+      if(!collect_ms2_files(ms2_source, sqt_target_source, sqt_decoy_source))
+      return 0;
+    }
+  else
+    {
+      string ext_sqt = get_parser_extension();
+      
+      if(is_spectrum_file(ms2_source))
+      	{
+	  if(!is_ending(sqt_target_source, ext_sqt))
+	    {
+	      carp(CARP_WARNING,  "expecting target search file to accompany the ms2 file");
+	      return 0;
+	    }
+	  if(!is_ending(sqt_decoy_source, ext_sqt))
+	    {
+	      carp(CARP_WARNING,  "expecting decoy search file to accompany the ms2 file and the target search file for the separate searches");
+	      return 0;
+	    }
+	  
+	  sqt_file_names.push_back(sqt_target_source);
+	  ms2_file_names.push_back(ms2_source);
+	  sqt_file_names.push_back(sqt_decoy_source);
+	  ms2_file_names.push_back(ms2_source);
+	}
+      else 
+	{
+	  read_list_of_files(sqt_target_source, sqt_file_names);
+	  read_list_of_files(ms2_source, ms2_file_names);
+	  read_list_of_files(sqt_decoy_source, sqt_file_names);
+	  read_list_of_files(ms2_source, ms2_file_names);
+	  if(ms2_file_names.size() != sqt_file_names.size())
+	    {
+	      carp(CARP_WARNING, " the number of sqt and ms2 files does not match: each sqt file should be accompaned by ms2 file");
+	      return 0;
+	    }
+	}
+    }
+
+  return 1;
+}
+void SQTParser :: write_features_header(){
+    //file features header
+  final_features_header_.insert(
+    final_features_header_.begin(),
+    features_header_.begin(),
+    features_header_.end()
+  );
+  if(num_spec_features==3){
+    final_features_header_.insert(
+      final_features_header_.end(),
+      spec_features_header_3_.begin(),
+      spec_features_header_3_.end()
+    ); 
+  }else if(num_spec_features==7){
+     final_features_header_.insert(
+       final_features_header_.end(),
+       spec_features_header_7_.begin(),
+       spec_features_header_7_.end()
+     ); 
+   }
+ }
+void SQTParser::add_quadratic_features_header(){ 
+  
+    for(unsigned int i=0;i<features_header_.size();i++){
+      for(unsigned int j=i;j<features_header_.size();j++){
+ 
+        final_features_header_.push_back(
+          "("
+          +features_header_[i]
+          +")"
+          +"*"
+          +"("
+          +features_header_[j]
+          +")"
+        );
+      }
+    }
+     
+    if(num_spec_features==3){
+      for(unsigned int i=0;i<spec_features_header_3_.size();i++){
+        for(unsigned int j=i;j<spec_features_header_3_.size();j++){
+          final_features_header_.push_back(
+            "("
+            +spec_features_header_3_[i]
+            +")"
+            +"*"
+            +"("
+            +spec_features_header_3_[j]
+            +")"
+          );
+        }
+      }
+    }  
+    if(num_spec_features==7){
+      for(unsigned int i=0;i<spec_features_header_7_.size();i++){
+        for(unsigned int j=i;j<spec_features_header_7_.size();j++){
+          final_features_header_.push_back(
+            "("
+            +spec_features_header_7_[i]
+            +")"
+            +"*"
+            +"("
+            +spec_features_header_7_[j]
+            +")"
+          );
+        } 
+      }
+    } 
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/app/qranker-barista/SQTParser.h b/src/app/qranker-barista/SQTParser.h
new file mode 100644
index 0000000..4842775
--- /dev/null
+++ b/src/app/qranker-barista/SQTParser.h
@@ -0,0 +1,250 @@
+#ifndef SQTPARSER_H
+#define SQTPARSER_H
+
+#include <sys/stat.h>
+#ifndef _MSC_VER
+#include <dirent.h>
+#else
+#include "util/WinCrux.h"
+#endif
+
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <assert.h>
+#include <vector>
+#include <string>
+#include <math.h>
+#include <map>
+#include <set>
+#include <cstring>
+#include "SpecFeatures.h"
+#include "BipartiteGraph.h"
+
+#include "app/CruxApplication.h"
+#include "io/carp.h"
+#include "util/crux-utils.h"
+#include "parameter.h"
+
+using namespace std;
+
+typedef enum {TRYPSIN_ENZ,CHYMOTRYPSIN_ENZ,ELASTASE_ENZ} enzyme;
+
+class SQTParser{
+ public:
+  struct sqt_match{
+    int scan;
+    int charge;
+    double precursor_mass;
+    int num_sequence_comparisons;
+    vector <int> xcorr_rank;
+    vector<int> sp_rank;
+    vector<double> calc_mass;
+    vector<double> delta_cn;
+    vector<double> xcorr_score;
+    vector<double> sp_score;
+    vector <int> num_ions_matched;
+    vector<double> num_total_ions;
+    vector<string> peptides;
+    vector<int> num_proteins_in_match;
+    vector<string> proteins;
+    vector<int> peptide_pos; 
+
+  };
+  /*
+ SQTParser() : num_spectra(0),num_psm(0),num_pos_psm(0),num_neg_psm(0),num_features(0),
+    num_spec_features(0), num_pep(0),num_pos_pep(0), num_neg_pep(0),num_prot(0),num_pos_prot(0),num_neg_prot(0),
+   num_mixed_labels(0),psmind(0){}
+  */
+  SQTParser();
+  virtual ~SQTParser();
+  void clear();
+  virtual int run();
+  void clear_matches();
+  void erase_matches();
+  inline void set_num_features(int nf) {num_features = nf;}
+  inline void set_num_spec_features(int nsf) {num_spec_features = nsf;}
+  inline int get_num_features() const {return num_features;}
+  inline void set_use_quadratic_features(int use){use_quadratic_features = use;}
+  inline int get_use_quadratic_features()const {return use_quadratic_features;}
+  int set_output_dir(string &output_dir, int overwrite_flag);
+  int set_output_dir(string &output_dir){out_dir = output_dir; return 1;}
+  inline string& get_output_dir(){return out_dir;}
+  inline void set_input_dir(string input_dir){in_dir = input_dir;}
+  inline void set_input_dir_ms2(string input_dir){in_dir_ms2 = input_dir;}
+  inline string& get_input_dir(){return in_dir;}
+  inline void set_db_name(string database){db_name = database;}
+  inline void set_decoy_prefix(string prefix){decoy_prefix = prefix;}
+  inline void set_num_hits_per_spectrum(int hits_per_spectrum){fhps = hits_per_spectrum;}
+  inline vector<string> get_final_features_header(){return final_features_header_;}
+  void set_enzyme(string &enz);
+  int is_ending(string &name, const string &ext);
+  int is_spectrum_file(string &fname);
+  int is_fasta(string &fname);
+  int set_database_source(string &db_source);
+  virtual int match_file_to_ms2(string &sqt_source, string &prefix);
+  int collect_ms2_files(string &ms2_source, string &sqt_source);
+  virtual int set_input_sources(string &ms2_source, string &sqt_source);
+  void read_list_of_files(string &list, vector<string> &fnames);
+  
+  /********* for separate database searches ********************************************/
+  virtual int match_target_file_to_ms2(string &sqt_source, string &prefix);
+  virtual int match_decoy_file_to_ms2(string &sqt_source, string &prefix);
+  int collect_ms2_files(string &ms2_source, string &sqt_target_source, string &sqt_decoy_source);
+  virtual int set_input_sources(string &ms2_source, string &sqt_target_source, string &sqt_decoy_source);
+  /*************************************************************************************/
+
+
+  void read_sqt_file(ifstream &is, string &decoy_prefix, int final_hits_per_spectrum, enzyme enz, bool decoy);
+  int parse_sqt_spectrum_matches(ifstream &is, sqt_match &m);
+  void read_S_line(ifstream &is, sqt_match &m);
+  void read_M_line(ifstream &is, sqt_match &m);
+  void digest_database(ifstream &f_db, enzyme e);
+  int cntEnzConstraints(string& seq,enzyme enz);
+  
+  static int cntEnz(const string& peptide, enzyme enz);
+  static double isTryptic(const char n,const char c);
+  static double isChymoTryptic(const char n,const char c);
+  static double isElastasic(const char n,const char c);
+  static double isEnz(const char n,const char c, enzyme enz);
+  void extract_psm_features(sqt_match &m, enzyme enz, double *x, int i);
+  void extract_psm_features(sqt_match &m, enzyme enz, double *x, int i, int hits_read);
+  void extract_features(sqt_match &m, int hits_read, int final_hits,enzyme enz);
+  void add_matches_to_tables(sqt_match &m, string &decoy_prefix, int hits_read, int final_hits, bool decoy);
+  void allocate_feature_space();
+  void fill_graphs_and_save_data(string &out_dir);
+  
+  void open_files(string &out_dir);
+  void close_files();
+  void clean_up(string dir);
+  int check_file(ostringstream &fname);
+  int check_input_dir(string &in_dir);
+  
+  //spec features generator
+  SpecFeaturesGenerator sfg;
+  
+  void write_features_header();
+  void add_quadratic_features_header(); 
+  //void write_quad_features_header();
+  
+ protected:
+  //auxiliary variables
+  int database_exists;
+  int num_prot_not_found_in_db;
+  int num_pos_prot_not_found_in_db;
+  int num_neg_prot_not_found_in_db;
+   
+  vector<string> features_header_; 
+  vector<string> spec_features_header_3_;
+  vector<string> spec_features_header_7_;
+  vector<string> final_features_header_; 
+  sqt_match m;
+  int num_mixed_labels;
+  map<int,set<int> > pepind_to_protinds_map;
+  map<int,set<int> > protind_to_pepinds_map;
+  map<int,set<int> > pepind_to_psminds_map;
+  
+  //summary of the dataset
+  int num_features;
+  int num_spec_features;
+  int num_total_features;
+  int use_quadratic_features;
+  int num_spectra;
+  int num_psm;
+  int num_pos_psm;
+  int num_neg_psm;
+  int num_pep;
+  int num_pos_pep;
+  int num_neg_pep;
+  int num_prot;
+  int num_pos_prot;
+  int num_neg_prot;
+  
+  int num_cur_psm;
+  int num_cur_prot;
+  int prot_offset;
+  
+  
+
+  //psm feature vector
+  double *x;
+  //spec feature vector
+  double *xs;
+  
+  //peptide info
+  map<string,int> pep_to_ind;
+  map<int,string> ind_to_pep;
+  BipartiteGraph pepind_to_protinds;
+  BipartiteGraph pepind_to_psminds;
+  
+  //protein info
+  map<string,int> prot_to_ind;
+  map<int,string> ind_to_prot;
+  BipartiteGraph protind_to_pepinds;
+  
+  //digested database info
+  map<string,int> protein_to_num_all_pep_map;  
+  map<int,int> protind_to_num_all_pep_map;
+  map<string,int> protein_to_length_map;  
+  map<int,int> protind_to_length_map;
+  int *protind_to_num_all_pep;
+  int *protind_to_length;
+
+  //writing out data
+  string in_dir;
+  string in_dir_ms2;
+  string out_dir;
+  string db_name;
+  vector<string> sqt_file_names;
+  vector<string> ms2_file_names;
+  vector<string> db_file_names;
+
+  string cur_fname;
+  int cur_fileind;
+  
+  //files for writing out data
+  ofstream f_psm;
+  ofstream f_psmind_to_label;
+  ofstream f_psmind_to_scan;
+  ofstream f_psmind_to_charge;
+  ofstream f_psmind_to_precursor_mass;
+  ofstream f_psmind_to_pepind;
+  ofstream f_pepind_to_label;
+  ofstream f_protind_to_label;
+  ofstream f_protind_to_num_all_pep;
+  ofstream f_protind_to_length;
+  ofstream f_fileind_to_fname;
+  ofstream f_psmind_to_fileind;
+  
+  ofstream f_psmind_to_xcorr;
+  ofstream f_psmind_to_spscore;
+  ofstream f_psmind_to_deltaCn;
+  ofstream f_psmind_to_calculated_mass;
+  
+  ofstream f_psmind_to_sp_rank;//sp rank
+  ofstream f_pmsind_to_matches_spectrum; //matches_spectrum  
+  ofstream f_psmind_to_xcorr_rank;//xcorr rank 
+  ofstream f_psmind_to_by_ions_matched;// b/y ions match  
+  ofstream f_psmind_to_by_ions_total;  //b/y ions total   
+  ofstream f_psmind_to_peptide_position; //peptide position 
+  
+  //final hits per spectrum
+  int fhps;
+  //decoy prefix
+  string decoy_prefix;
+  //enzyme
+  enzyme e;
+  //max peptide length to be considered
+  int max_len;
+  //min peptide length to be considered
+  int min_len;
+
+  
+  virtual bool read_search_results(string& cur_fname, bool decoy); 
+  virtual string get_parser_extension();
+
+  vector<string> spectrumExts_; // spectrum file extensions
+  
+};
+
+#endif
diff --git a/src/app/qranker-barista/SpecFeatures.cpp b/src/app/qranker-barista/SpecFeatures.cpp
new file mode 100644
index 0000000..1e6242b
--- /dev/null
+++ b/src/app/qranker-barista/SpecFeatures.cpp
@@ -0,0 +1,499 @@
+#include "SpecFeatures.h"
+
+const double SpecFeaturesGenerator::mass_h2o_mono = 18.01056;
+const double SpecFeaturesGenerator::mass_nh3_mono = 17.02655;
+const double SpecFeaturesGenerator::mass_co_mono = 27.9949;
+const double SpecFeaturesGenerator::proton_mass = 1.00727646688;
+const double SpecFeaturesGenerator::bin_width_mono = 1.0005079;
+
+SpecFeaturesGenerator :: SpecFeaturesGenerator():
+  max_mz_(1025),
+  ts_m3_(NULL), ts_m7_(NULL),
+  spectra_(NULL), spectrum_(NULL)
+{
+  mz_values_.reserve(1000);
+  intens_values_.reserve(1000);
+  peaks_.resize(max_mz_, 0.0);
+}
+
+SpecFeaturesGenerator :: ~SpecFeaturesGenerator()
+{
+  if (spectra_) {
+    delete spectra_;
+  }
+  if (spectrum_) {
+    delete spectrum_;
+  }
+  clear();
+}
+
+void SpecFeaturesGenerator :: clear()
+{
+  max_mz_ = 0;
+  clear_tspec(ts_m3_, 3); ts_m3_ = NULL;
+  clear_tspec(ts_m7_, 7); ts_m7_ = NULL;
+}
+
+void SpecFeaturesGenerator :: read_spectrum()
+{
+  precursor_mz_ = spectrum_->getPrecursorMz();
+  
+  mz_values_.clear();
+  intens_values_.clear();
+
+  for (PeakIterator i = spectrum_->begin(); i != spectrum_->end(); ++i) {
+    Peak* peak = *i;
+    FLOAT_T mz = peak->getLocation();
+    mz_values_.push_back(mz);
+    intens_values_.push_back(peak->getIntensity());
+    /*int mz_bin = (int)(mz / bin_width_mono + 0.5);
+    if (mz_bin >= max_mz_) {
+      max_mz_ = mz_bin + 1;
+    }*/
+  }
+}
+
+
+void SpecFeaturesGenerator :: shift_peaks()
+{
+#if 1
+  int n = peaks_.size();
+  vector<double> sums(n);
+  vector<double> integral(n+1);
+  integral[0] = 0;
+  for (int i=0; i<n; i++)
+    integral[i+1] = integral[i] + peaks_[i];
+  for (int i=0; i<n; i++)
+    {
+      int ilo = i - max_xcorr_offset;
+      int ihi = i + max_xcorr_offset+1;
+      sums[i] = integral[ihi<=n ? ihi : n] - integral[ilo>=0 ? ilo : 0]; 
+    }
+#else
+  vector<double> sums;
+  sums.resize(peaks_.size(),0.0);
+  
+  for(unsigned int idx = 0; idx < peaks_.size(); idx++)
+    {
+      for(int sub_idx = idx-max_xcorr_offset; sub_idx <= idx+max_xcorr_offset; sub_idx++)
+	if(sub_idx > -1 && sub_idx < peaks_.size())
+	  sums[idx] += peaks_[sub_idx];
+    }
+#endif
+  for(unsigned int idx = 0; idx < peaks_.size(); idx++)
+    peaks_[idx] -= (sums[idx]/(max_xcorr_offset*2.0+1));
+
+}
+
+void SpecFeaturesGenerator :: normalize_each_region(double max_intensity_overall, vector<double> &max_intensity_per_region,
+						    int region_selector)
+{
+  int region_idx = 0;
+  double max_intensity = max_intensity_per_region[region_idx];
+  for (int i = 0; i < (int)peaks_.size(); i++)
+    {
+    
+      if(i >= (region_idx+1)*region_selector && (region_idx+1)<num_regions)
+	{
+	  region_idx++;
+	  max_intensity = max_intensity_per_region[region_idx];
+	}
+      // Don't normalize if no peaks in region, and for compatibility
+      // with SEQUEST drop peaks with intensity less than 1/20 of
+      // the overall max intensity.
+      if((max_intensity != 0)
+	&& (peaks_[i] > 0.05 * max_intensity_overall))
+	{
+	  // normalize intensity to max 50
+	  peaks_[i] = (peaks_[i] /max_intensity) * max_per_region;
+	}
+      // no more peaks beyond the 10 regions mark, exit
+      if(i > num_regions * region_selector){
+	return;
+      }
+    }
+}
+
+
+void SpecFeaturesGenerator :: process_observed_spectrum()
+{
+  double experimental_mass_cut_off = precursor_mz_ * charge_ + 50.0;
+
+  if ((int)peaks_.size() != max_mz_)
+    peaks_.resize(max_mz_);
+  peaks_.assign(peaks_.size(), 0.0);
+
+  assert(mz_values_.size() == intens_values_.size());
+  double max_peak_location = 0.0;
+  double max_peak_intensity = 0.0;
+  for (unsigned int i = 0; i < mz_values_.size(); i++) {
+    double peak_location = mz_values_[i];
+    if (peak_location < experimental_mass_cut_off &&
+        peak_location > max_peak_location)
+      max_peak_location = peak_location;
+  }
+  int region_selector = (int)max_peak_location / num_regions;
+  vector<double> max_peak_intensity_per_region;
+  max_peak_intensity_per_region.resize(num_regions,0.0);
+  
+  for (unsigned int i = 0; i < mz_values_.size(); i++)
+  {
+    double peak_location = mz_values_[i];
+    double peak_intensity = intens_values_[i];
+    //if above experimental mass, skip
+    if (peak_location > experimental_mass_cut_off)
+      continue;
+    // skip all peaks within precursor ion mz +/- 15
+    if (peak_location < precursor_mz_ + 15 &&
+        peak_location > precursor_mz_ - 15)
+      continue;
+
+    //get the bin and the region
+    int mz = (int)(peak_location / bin_width_mono + 0.5);
+
+    int region = mz / region_selector;
+    // don't let index beyond array
+    if (region >= num_regions) {
+      continue;
+    }
+
+    //update max mz over all spectra
+    /*if (mz >= max_mz_) {
+      max_mz_ = mz + 1;
+      peaks_.resize(max_mz_,0.0);
+    }*/
+    // sqrt the original intensity
+    peak_intensity = sqrt(peak_intensity);
+    if (peak_intensity > max_peak_intensity)
+      max_peak_intensity = peak_intensity;
+    if (peaks_[mz] < peak_intensity) {
+      peaks_[mz] = peak_intensity;
+      // check if this peak is max intensity in the region(one out of 10)
+      if (max_peak_intensity_per_region[region] < peak_intensity) {
+        max_peak_intensity_per_region[region] = peak_intensity;
+      }
+    }
+  }
+  normalize_each_region(max_peak_intensity, max_peak_intensity_per_region,
+                        region_selector);
+  shift_peaks();
+}
+
+void SpecFeaturesGenerator :: read_ms2_file(const string& filename)
+{
+  spectra_ = SpectrumCollectionFactory::create(filename.c_str());
+  spectra_->parse();
+
+  // TODO hack for finding max m/z out of all spectra
+  for (SpectrumIterator i = spectra_->begin(); i != spectra_->end(); ++i) {
+    int mz_bin = (int)((*i)->getMaxPeakMz() / bin_width_mono + 0.5);
+    if (mz_bin >= max_mz_) {
+      max_mz_ = mz_bin + 1;
+    }
+  }
+}
+
+/*************************************************************************************/
+
+void SpecFeaturesGenerator :: get_observed_spectrum(int scan)
+{
+  if (spectrum_) {
+    delete spectrum_;
+    spectrum_ = NULL;
+  }
+
+  for (SpectrumIterator i = spectra_->begin(); i != spectra_->end(); ++i) {
+    if (scan == (*i)->getFirstScan()) {
+      spectrum_ = new Crux::Spectrum();
+      spectrum_->copyFrom(*i);
+      break;
+    }
+  }
+  // TODO this doesn't work because subclasses of spectrumcollection override
+  //spectrum_ = spectra_->getSpectrum(scan);
+
+  // not found in MS2 file
+  if (!spectrum_)
+    carp(CARP_FATAL, "Spectrum \"%d\" not found in MS2 file", scan);
+
+  read_spectrum();
+  process_observed_spectrum();
+}
+
+
+void SpecFeaturesGenerator :: clear_tspec(double **tspec, int num_features)
+{
+  if (tspec) {
+    for (int i = 0; i < num_features; i++)
+	    if (tspec[i]) {
+	      delete [] tspec[i];
+        tspec[i] = NULL;
+      }
+    delete [] tspec;
+    tspec = NULL;
+  }
+}
+
+void SpecFeaturesGenerator :: allocate_tspec(double ***tspec, int num_features)
+{
+  (*tspec) = new double*[num_features];
+  for(int i = 0; i < num_features; i++)
+    (*tspec)[i] = new double[max_mz_];
+}
+
+void SpecFeaturesGenerator :: zero_out_tspec(double **tspec, int num_features)
+{
+  for(int i = 0; i < num_features; i++)
+    memset(tspec[i], 0, sizeof(double) * max_mz_);
+}
+
+void SpecFeaturesGenerator :: add_intensity(double *tspec, int idx, double intensity)
+{
+  if(idx > -1 && idx < max_mz_ &&
+     tspec[idx] < intensity) {
+	  tspec[idx] = intensity;
+  }
+}
+
+double SpecFeaturesGenerator :: sproduct(double *tspec)
+{
+  double sm = 0;
+  for (unsigned int i = 0; i < peaks_.size(); i++)
+    sm += tspec[i] * peaks_[i];
+  return sm;
+}
+
+void SpecFeaturesGenerator :: get_spec_features_m3(int scan, int ch, string &peptide, double *features)
+{
+  charge_ = ch;
+  get_observed_spectrum(scan);
+  
+  //allocate the theoretical spectrum if necessary
+  if (!ts_m3_)
+    allocate_tspec(&ts_m3_, 3);
+  zero_out_tspec(ts_m3_, 3);
+  
+  double mz = 0;
+  int idx = 0;
+  double fragment_mass;
+  
+  //start from the beginning of the peptide and do the B-ION
+  fragment_mass = 0.0;
+  for(unsigned int i = 0; i < peptide.size()-1;i++)
+    {
+      char aa = peptide.at(i);
+      if(aa != '.')
+	{
+	  //do the B-ION
+	  fragment_mass += aa_masses_mono[aa-'A'];
+	  //add the fragment
+	  for (int charg = 1; charg < ch; charg++)
+	    {
+	      //add the ion itself
+	      mz = (fragment_mass+charg*proton_mass)/charg;
+	      idx = (int)(mz/bin_width_mono+0.5);
+	      add_intensity(ts_m3_[0], idx, 1.0);
+	      
+	      //add its flanking peaks
+	      add_intensity(ts_m3_[1], idx-1, 1.0);
+	      add_intensity(ts_m3_[1], idx+1, 1.0);
+	      
+	      //add its neutral losses nh3 and h2o
+	      double mz_nh3 = mz-(mass_nh3_mono/charg);
+	      idx = (int)(mz_nh3/bin_width_mono+0.5);
+	      add_intensity(ts_m3_[2], idx, 1.0);
+	      double mz_h2o = mz-(mass_h2o_mono/charg);
+	      idx = (int)(mz_h2o/bin_width_mono+0.5);
+	      add_intensity(ts_m3_[2], idx, 1.0);
+
+	      //add neutral loss co
+	      double mz_co = mz-(mass_co_mono/charg);
+	      idx = (int)(mz_co/bin_width_mono+0.5);
+	      add_intensity(ts_m3_[2], idx, 1.0);
+	    }
+	}
+    }
+
+    //do the Y-ION
+    fragment_mass = mass_h2o_mono;
+    for(unsigned int i = peptide.size(); i > 1;i--)
+      {
+	char aa = peptide.at(i-1);
+	if(aa != '.')
+	  {
+	    fragment_mass += aa_masses_mono[aa-'A'];
+	    //add the fragment
+	    for (int charg = 1; charg < ch; charg++)
+	      {
+		//add the ion itself
+		mz = (fragment_mass+charg*proton_mass)/charg;
+		idx = (int)(mz/bin_width_mono+0.5);
+		add_intensity(ts_m3_[0], idx, 1.0);
+		
+		//add its flanking peaks
+		add_intensity(ts_m3_[1], idx-1, 1.0);
+		add_intensity(ts_m3_[1], idx+1, 1.0);
+		
+		//add its neutral losses
+		double mz_nh3 = mz-(mass_nh3_mono/charg);
+		idx = (int)(mz_nh3/bin_width_mono+0.5);
+		add_intensity(ts_m3_[2], idx, 1.0);
+		//double mz_h2o = mz-(mass_h2o_mono/charg);
+		//idx = (int)(mz_h2o/bin_width_mono+0.5);
+		//add_intensity(ts_m3[2], idx, 1.0);
+	      }
+	  }
+      }
+
+  features[0] = sproduct(ts_m3_[0]);
+  features[1] = sproduct(ts_m3_[1]);
+  features[2] = sproduct(ts_m3_[2]);
+
+  //cout << features[0] << " " << features[1] << " " << features[2] << endl;
+
+}
+
+void SpecFeaturesGenerator :: get_spec_features_m7(int scan, int ch, string &peptide, double *features)
+{
+  charge_ = ch;
+  get_observed_spectrum(scan);
+  
+  //allocate the theoretical spectrum if necessary
+  if (!ts_m7_)
+    allocate_tspec(&ts_m7_, 7);
+  zero_out_tspec(ts_m7_, 7);
+
+  /*
+   * 0. b-ion
+   * 1. y_ion
+   * 2. flanking
+   * 3. h2o_nl
+   * 4. co2_nl
+   * 5. nh3_nl_b
+   * 6. nh3_nl_y
+   */
+  
+  double mz = 0;
+  int idx = 0;
+  double fragment_mass;
+  
+  //start from the beginning of the peptide and do the B-ION
+  fragment_mass = 0.0;
+  for(unsigned int i = 0; i < peptide.size()-1;i++)
+    {
+      char aa = peptide.at(i);
+      if(aa != '.')
+	{
+	  //do the B-ION
+	  fragment_mass += aa_masses_mono[aa-'A'];
+	  //add the fragment
+	  for (int charg = 1; charg < ch; charg++)
+	    {
+	      //add the ion itself
+	      mz = (fragment_mass+charg*proton_mass)/charg;
+	      idx = (int)(mz/bin_width_mono+0.5);
+	      //0 in array
+	      add_intensity(ts_m7_[0], idx, 1.0);
+	      
+	      //add its flanking peaks (2 in array)
+	      add_intensity(ts_m7_[2], idx-1, 1.0);
+	      add_intensity(ts_m7_[2], idx+1, 1.0);
+	      
+	      //add its neutral losses nh3(5 in array) 
+	      double mz_nh3 = mz-(mass_nh3_mono/charg);
+	      idx = (int)(mz_nh3/bin_width_mono+0.5);
+	      add_intensity(ts_m7_[5], idx, 1.0);
+
+	      //add h2o (3 in array)
+	      double mz_h2o = mz-(mass_h2o_mono/charg);
+	      idx = (int)(mz_h2o/bin_width_mono+0.5);
+	      add_intensity(ts_m7_[3], idx, 1.0);
+
+	      //add neutral loss co (4 in array)
+	      double mz_co = mz-(mass_co_mono/charg);
+	      idx = (int)(mz_co/bin_width_mono+0.5);
+	      add_intensity(ts_m7_[4], idx, 1.0);
+	    }
+	}
+    }
+
+    //do the Y-ION
+    fragment_mass = mass_h2o_mono;
+    for(unsigned int i = peptide.size(); i > 1;i--)
+      {
+	char aa = peptide.at(i-1);
+	if(aa != '.')
+	  {
+	    fragment_mass += aa_masses_mono[aa-'A'];
+	    //add the fragment
+	    for (int charg = 1; charg < ch; charg++)
+	      {
+		//add the ion itself ( 1 in array)
+		mz = (fragment_mass+charg*proton_mass)/charg;
+		idx = (int)(mz/bin_width_mono+0.5);
+		add_intensity(ts_m7_[1], idx, 1.0);
+		
+		//add its flanking peaks ( 2 in array)
+		add_intensity(ts_m7_[2], idx-1, 1.0);
+		add_intensity(ts_m7_[2], idx+1, 1.0);
+		
+		//add its neutral losses (6 in array)
+		double mz_nh3 = mz-(mass_nh3_mono/charg);
+		idx = (int)(mz_nh3/bin_width_mono+0.5);
+		add_intensity(ts_m7_[6], idx, 1.0);
+	      }
+	  }
+      }
+
+  features[0] = sproduct(ts_m7_[0]);
+  features[1] = sproduct(ts_m7_[1]);
+  features[2] = sproduct(ts_m7_[2]);
+  features[3] = sproduct(ts_m7_[3]);
+  features[4] = sproduct(ts_m7_[4]);
+  features[5] = sproduct(ts_m7_[5]);
+  features[6] = sproduct(ts_m7_[6]);
+
+  //cout << features[0] << " " << features[1] << " " << features[2] << " " << features[3] << " " << features[4] << " " << features[5] << " " << features[6] << endl;
+
+}
+
+
+
+
+
+void SpecFeaturesGenerator :: initialize_aa_tables()
+{
+  aa_masses_mono.resize(NUM_AA,0.0);
+  aa_masses_mono['A' - 'A'] = 71.03711;
+  aa_masses_mono['B' - 'A'] = 114.53494;
+  aa_masses_mono['C' - 'A'] = 103.00919;
+  aa_masses_mono['D' - 'A'] = 115.02694;
+  aa_masses_mono['E' - 'A'] = 129.04259;
+  aa_masses_mono['F' - 'A'] = 147.06841;
+  aa_masses_mono['G' - 'A'] = 57.02146;
+  aa_masses_mono['H' - 'A'] = 137.05891;
+  aa_masses_mono['I' - 'A'] = 113.08406;
+  aa_masses_mono['K' - 'A'] = 128.09496;
+  aa_masses_mono['L' - 'A'] = 113.08406;
+  aa_masses_mono['M' - 'A'] = 131.04049;
+  aa_masses_mono['N' - 'A'] = 114.04293;
+  aa_masses_mono['O' - 'A'] = 114.07931;
+  aa_masses_mono['P' - 'A'] = 97.05276;
+  aa_masses_mono['Q' - 'A'] = 128.05858;
+  aa_masses_mono['R' - 'A'] = 156.10111;
+  aa_masses_mono['S' - 'A'] = 87.03203;
+  aa_masses_mono['T' - 'A'] = 101.04768;
+  aa_masses_mono['U' - 'A'] = 150.04344;
+  aa_masses_mono['V' - 'A'] = 99.06841;
+  aa_masses_mono['W' - 'A'] = 186.07931;
+  aa_masses_mono['X' - 'A'] = 113.08406;
+  aa_masses_mono['Y' - 'A'] = 163.06333;
+  aa_masses_mono['Z' - 'A'] = 128.55059;
+  
+  //nl_masses_mono.resize(NUM_NL,0.0);
+  //nl_masses_mono[H2O] = mass_h2o_mono;
+  //nl_masses_mono[NH3] = mass_nh3_mono;
+  //nl_masses_mono[CO] = mass_co_mono;
+
+}
+
diff --git a/src/app/qranker-barista/SpecFeatures.h b/src/app/qranker-barista/SpecFeatures.h
new file mode 100644
index 0000000..c81030f
--- /dev/null
+++ b/src/app/qranker-barista/SpecFeatures.h
@@ -0,0 +1,97 @@
+#ifndef SPECFEATURES_H
+#define SPECFEATURES_H
+
+#include<iostream>
+#include<fstream>
+#include <map>
+#include <sstream>
+#include <vector>
+#include <assert.h>
+#include <cstring>
+#include <math.h>
+#include "io/carp.h"
+#include "io/SpectrumCollectionFactory.h"
+
+using namespace std;
+
+#define NUM_IONS 2
+//typedef enum {B_ION, Y_ION} ion_type;
+//number of flanking peaks
+#define NUM_FL 2
+#define NUM_NL  3
+
+//typedef enum {H2O,NH3,CO} nl_type;
+#define NUM_AA  26
+
+
+class SpecFeaturesGenerator
+{
+ public:
+  SpecFeaturesGenerator();
+  ~SpecFeaturesGenerator();
+  void clear();
+  void read_ms2_file(const string& filename);
+  void initialize_aa_tables();
+
+  /*
+   * model m3 consists of 3 features:
+   * by-ions
+   * all flanking peaks
+   * all neutral losses
+   */
+  void get_spec_features_m3(int scan, int ch, string &peptide, double *features);
+  void get_spec_features_m7(int scan, int ch, string &peptide, double *features);
+
+ protected:
+  void read_spectrum();
+  void process_observed_spectrum();
+  void normalize_each_region(
+    double max_intensity_overall,
+    vector<double> &max_intensity_per_region,
+		int region_selector
+  );
+  void shift_peaks();
+  void get_observed_spectrum(int scan);
+  void clear_tspec(double **tspec,int num_features);
+  void allocate_tspec(double ***tspec, int num_features);
+  void zero_out_tspec(double **tspec, int num_features);
+  void add_intensity(double *tspec, int bin, double intensity);
+  double sproduct(double *tspec);
+
+  Crux::SpectrumCollection* spectra_;
+  Crux::Spectrum* spectrum_;
+
+  double precursor_mz_;
+  int charge_;
+
+  //for the processed spectrum
+  int max_mz_;
+  vector<double> peaks_;
+  //for the raw spectrum
+  vector<double> mz_values_;
+  vector<double> intens_values_;
+
+  double **ts_m3_;
+  double **ts_m7_;
+ 
+  //mass info for neutral losses
+  // While GNU g++ implements an extension that
+  // allows intializing static const doubles, this
+  // is not allowed by the strict C++ standard, so we
+  // have to initialze the doubles in the implementation
+  // to support compilers other than g++.
+  static const double mass_h2o_mono;
+  static const double mass_nh3_mono;
+  static const double mass_co_mono;
+  static const double proton_mass;
+  static const double bin_width_mono;
+  static const int num_regions = 10;
+  static const int max_per_region = 50;
+  static const int max_xcorr_offset = 75;
+
+  vector<double> aa_masses_mono;
+  vector<double> nl_masses_mono;
+
+};
+
+#endif //SPECFEATURES_H
diff --git a/src/app/qranker-barista/TabDelimParser.cpp b/src/app/qranker-barista/TabDelimParser.cpp
new file mode 100644
index 0000000..a9268bf
--- /dev/null
+++ b/src/app/qranker-barista/TabDelimParser.cpp
@@ -0,0 +1,777 @@
+#include "TabDelimParser.h"
+
+/******************************/
+
+TabDelimParser :: TabDelimParser() 
+  : 	num_mixed_labels(0),     
+	psmind_to_scan(0),
+	psmind_to_charge(0),
+	psmind_to_label(0), 
+	psmind_to_num_pep(0),
+	psmind_to_ofst(0),
+	psmind_to_pepind(0),
+	psmind_to_neutral_mass(0),
+	psmind_to_peptide_mass(0),
+	num_features(0),
+	num_psm(0),
+	num_pos_psm(0),
+	num_neg_psm(0),
+	num_pep(0),
+	num_pep_in_all_psms(0),
+	curr_ofst(0),
+	psmind(0),
+	x(0),
+	num_xlink_features(0)
+{
+  
+  //num_psm_features
+  num_features = 17;
+  //num_xlink_features
+  num_xlink_features = 17;
+
+  
+  //final_hits_per_spectrum
+  fhps = 3;
+  //decoy prefix
+  decoy_prefix = "random_";
+  //max peptide length to be considered
+  max_len = 50;
+  //min peptide length to be considered
+   min_len = 7;
+  
+}
+
+void TabDelimParser :: clear()
+{
+  delete[] x; x = (double*)0;
+  delete[] psmind_to_scan; psmind_to_scan = (int*)0;
+  delete[] psmind_to_charge; psmind_to_charge = (int*)0;
+  delete[] psmind_to_label; psmind_to_label = (int*)0;
+  delete[] psmind_to_num_pep; psmind_to_num_pep = (int*)0;
+  delete[] psmind_to_ofst; psmind_to_ofst = (int*)0;
+  delete[] psmind_to_pepind; psmind_to_pepind = (int*)0;
+  delete[] psmind_to_neutral_mass; psmind_to_neutral_mass = (double*)0;
+  delete[] psmind_to_peptide_mass; psmind_to_peptide_mass = (double*)0;
+}
+
+
+
+TabDelimParser :: ~TabDelimParser()
+{
+  clear();
+}
+
+/* tokens are
+0. scan
+1. charge
+2. spectrum precursor mz
+3. spectrum neutral mass   
+4. peptide mass    
+5. delta_cn        
+6. sp score        
+7. xcorr score     
+8. xcorr rank      
+9. distinct matches/spectrum
+10. sequence        
+11. cleavage type   
+12. protein id      
+13. flanking aa     
+14. nzstates        
+15. rtime max diff  
+16. peptides/spectrum       
+17. xcorr sum diff  
+18. xcorr max diff
+*/
+
+
+
+void TabDelimParser :: get_tokens(string &line, vector<string>&tokens, string &delim)
+{
+  tokens.erase(tokens.begin(), tokens.end());
+  string tmp = line;
+  string tok;
+  size_t pos = tmp.find(delim);
+  while(pos != string::npos)
+    {
+      tok = tmp.substr(0,pos);
+      tokens.push_back(tok);
+      tmp = tmp.substr(pos+1, tmp.size());
+      pos = tmp.find(delim);
+    }
+  //last token
+  tokens.push_back(tmp);
+}
+
+void TabDelimParser :: first_pass(ifstream &fin)
+{
+  string line;
+  vector<string> tokens;
+  vector<string> peptides;
+  string delim1 = "\t";
+  string delim2 = ",";
+  while(!fin.eof())
+    {
+      getline(fin,line);
+      get_tokens(line, tokens, delim1);
+  
+      if(tokens.size() > 1)
+	{
+	  //get all peptides and fill pep_to_ind tables
+	  string peps = tokens[10];
+	  get_tokens(peps,peptides,delim2);
+	  
+	  for(unsigned int i = 0; i < peptides.size(); i++)
+	    {
+	      string pep = peptides[i];
+	      int pep_ind = -1;
+	      //add peptide to pep_to_ind and ind_to_pep maps
+	      if(pep_to_ind.find(pep) == pep_to_ind.end())
+		{
+		  pep_ind = num_pep;
+		  //add a new peptide
+		  pep_to_ind[pep] = pep_ind;
+		  ind_to_pep[pep_ind] = pep;
+		  num_pep++;
+	  	}
+	      else
+		{
+		  pep_ind = pep_to_ind[pep];
+		  string p = ind_to_pep[pep_ind];
+		  if(pep.compare(p) != 0)
+		    cout << "warning : did not find peptide in ind_to_pep_table\n"; 
+		}
+	    }
+	  num_pep_in_all_psms += peptides.size();
+	  num_psm++;
+	}
+      
+    }
+}
+
+
+void TabDelimParser :: allocate_feature_space()
+{
+  //space for feature vector
+  x = new double[num_features];
+  memset(x,0,sizeof(double)*num_features);
+
+  //space for psminfo
+  psmind_to_pepind = new int[num_pep_in_all_psms];
+  memset(psmind_to_pepind,0,sizeof(int)*num_pep_in_all_psms);
+  psmind_to_num_pep = new int[num_psm];
+  memset(psmind_to_num_pep,0,sizeof(int)*num_psm);
+  psmind_to_ofst = new int[num_psm];
+  memset(psmind_to_ofst,0,sizeof(int)*num_psm);
+  psmind_to_charge = new int[num_pep_in_all_psms];
+  memset(psmind_to_charge,0,sizeof(int)*num_pep_in_all_psms);
+
+  psmind_to_neutral_mass = new double[num_pep_in_all_psms];
+  memset(psmind_to_neutral_mass,0,sizeof(double)*num_pep_in_all_psms);
+  psmind_to_peptide_mass = new double[num_pep_in_all_psms];
+  memset(psmind_to_peptide_mass,0,sizeof(double)*num_pep_in_all_psms);
+
+  psmind_to_scan = new int[num_psm];
+  memset(psmind_to_scan,0,sizeof(int)*num_psm);
+  psmind_to_label = new int[num_psm];
+  memset(psmind_to_label,0,sizeof(int)*num_psm);
+
+}
+
+
+void TabDelimParser :: extract_psm_features(vector<string> & tokens, double *x)
+{
+  memset(x,0,sizeof(double)*num_features);
+  //log rank by Sp
+
+  //deltaLCN
+
+  //deltaCN
+
+  //xcorr score
+  x[3] = atof(tokens[7].c_str());
+  //sp score
+  
+  //matched ions/predicted ions
+  
+  //observed mass
+  
+  //peptide length
+  
+  //charge
+  
+  //whether n-terminus and c-terminus have proper cleavage sites
+  
+  // missed cleavages
+  
+  // number of sequence_comparisons
+
+  //difference between measured and calculated mass
+
+  // absolute value of difference between measured and calculated mass
+
+}
+
+
+
+void TabDelimParser :: second_pass(ifstream &fin, int label)
+{
+  string line;
+  vector<string> tokens;
+  
+  vector<string> peptides;
+  vector<string> charge_str;
+  vector<string> spectrum_neutral_mass_str;
+  vector<string> peptide_mass_str;
+  string delim1 = "\t";
+  string delim2 = ",";
+  while(!fin.eof())
+    {
+      getline(fin,line);
+      get_tokens(line, tokens, delim1);
+  
+      if(tokens.size() > 1)
+	{
+	  //extract features
+	  extract_psm_features(tokens, x);
+	  f_psm.write((char*)x, sizeof(double)*num_features);
+
+	  //fill in tables
+
+	  //get the scan
+	  int scan = atoi(tokens[0].c_str());
+	  psmind_to_scan[psmind] = scan;
+
+	  //get charges
+	  string ch = tokens[1];
+	  get_tokens(ch, charge_str,delim2);
+	  for(unsigned int i = 0; i < charge_str.size(); i++)
+	    psmind_to_charge[curr_ofst+i] = atoi(charge_str[i].c_str());
+	  
+	  //get spectrum neutral mass
+	  string neut_mass = tokens[3];
+	  get_tokens(neut_mass, spectrum_neutral_mass_str,delim2);
+	  for(unsigned int i = 0; i < spectrum_neutral_mass_str.size(); i++)
+	    psmind_to_neutral_mass[curr_ofst+i] = atof(spectrum_neutral_mass_str[i].c_str());
+	  
+	  //get peptide mass
+	  string pep_mass = tokens[4];
+	  get_tokens(pep_mass, peptide_mass_str,delim2);
+	  vector<double> peptide_mass;
+	  peptide_mass.resize(peptide_mass_str.size(),0);
+	  for(unsigned int i = 0; i < peptide_mass_str.size(); i++)
+	    psmind_to_peptide_mass[curr_ofst+i] = atof(peptide_mass_str[i].c_str());
+		  
+	  //get all peptides
+	  string peps = tokens[10];
+	  get_tokens(peps,peptides,delim2);
+	  for(unsigned int i = 0; i < peptides.size(); i++)
+	    {
+	      string pep = peptides[i];
+	      int pep_ind = -1;
+	      //add peptide to pep_to_ind and ind_to_pep maps
+	      if(pep_to_ind.find(pep) == pep_to_ind.end())
+		cout << "warning : did not find peptide in ind_to_pep_table\n"; 
+	      else
+		pep_ind = pep_to_ind[pep];
+	      psmind_to_pepind[curr_ofst+i] = pep_ind;
+	    }
+	  psmind_to_num_pep[psmind] = peptides.size();
+	  psmind_to_ofst[psmind] = curr_ofst;
+	  
+	  psmind_to_label[psmind] = label;
+	  if(label == 1)
+	    num_pos_psm++;
+	  else
+	    num_neg_psm++;
+
+	  //augment counters
+	  curr_ofst+= peptides.size();
+	  psmind++;  
+	}
+    }
+}
+
+/*****************************************************************************************/
+
+void TabDelimParser :: save_data_in_binary(string out_dir)
+{
+  ostringstream fname;
+  //write out data summary
+  fname << out_dir << "/summary.txt";
+  ofstream f_summary(fname.str().c_str());
+  //psm info
+  f_summary << num_features << " " << num_psm << " " << num_pos_psm << " " << num_neg_psm << endl;
+  //peptide info
+  f_summary << num_pep << endl;
+  f_summary.close();
+  fname.str("");
+  
+  //psmind_to_pepind
+  fname << out_dir << "/psmind_to_pepind.txt";
+  ofstream f_psmind_to_pepind(fname.str().c_str(),ios::binary);
+  f_psmind_to_pepind.write((char*)psmind_to_pepind,sizeof(int)*num_pep_in_all_psms);
+  f_psmind_to_pepind.close();
+  fname.str("");
+
+  //psmind_to_num_pep
+  fname << out_dir << "/psmind_to_num_pep.txt";
+  ofstream f_psmind_to_num_pep(fname.str().c_str(),ios::binary);
+  f_psmind_to_num_pep.write((char*)psmind_to_num_pep,sizeof(int)*num_psm);
+  f_psmind_to_num_pep.close();
+  fname.str("");
+
+  //psmind_to_ofst
+  fname << out_dir << "/psmind_to_ofst.txt";
+  ofstream f_psmind_to_ofst(fname.str().c_str(),ios::binary);
+  f_psmind_to_ofst.write((char*)psmind_to_ofst,sizeof(int)*num_psm);
+  f_psmind_to_ofst.close();
+  fname.str("");
+
+  //psmind_to_scan
+  fname << out_dir << "/psmind_to_scan.txt";
+  ofstream f_psmind_to_scan(fname.str().c_str(),ios::binary);
+  f_psmind_to_scan.write((char*)psmind_to_scan,sizeof(int)*num_psm);
+  f_psmind_to_scan.close();
+  fname.str("");
+
+  //psmind_to_charge
+  fname << out_dir << "/psmind_to_charge.txt";
+  ofstream f_psmind_to_charge(fname.str().c_str(),ios::binary);
+  f_psmind_to_charge.write((char*)psmind_to_charge,sizeof(int)*num_pep_in_all_psms);
+  f_psmind_to_charge.close();
+  fname.str("");
+
+  //psmind_to_label
+  fname << out_dir << "/psmind_to_label.txt";
+  ofstream f_psmind_to_label(fname.str().c_str(),ios::binary);
+  f_psmind_to_label.write((char*)psmind_to_label,sizeof(int)*num_psm);
+  f_psmind_to_label.close();
+  fname.str("");
+  
+  //ind_to_pep
+  fname << out_dir << "/ind_to_pep.txt";
+  ofstream f_ind_to_pep(fname.str().c_str(),ios::binary);
+  for(map<int,string>::iterator it = ind_to_pep.begin(); it != ind_to_pep.end(); it++)
+    f_ind_to_pep << it->first << " " << it->second << "\n";
+  f_ind_to_pep.close();
+  fname.str("");
+
+  //pep_to_ind
+  fname << out_dir << "/pep_to_ind.txt";
+  ofstream f_pep_to_ind(fname.str().c_str(),ios::binary);
+  for(map<string,int>::iterator it = pep_to_ind.begin(); it != pep_to_ind.end(); it++)
+    f_pep_to_ind << it->first << " " << it->second << "\n";
+  f_pep_to_ind.close();
+  fname.str("");
+
+}
+
+void TabDelimParser :: clean_up(string dir)
+{
+
+  ostringstream fname;
+      
+  //fname << out_dir << "/summary.txt";
+  //ofstream f_summary(fname.str().c_str());
+
+  fname << dir << "/psm.txt";
+  remove(fname.str().c_str());
+  fname.str("");
+  
+  //psmind_to_pepind
+  fname << out_dir << "/psmind_to_pepind.txt";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_num_pep
+  fname << out_dir << "/psmind_to_num_pep.txt";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_num_pep
+  fname << out_dir << "/psmind_to_ofst.txt";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_scan
+  fname << out_dir << "/psmind_to_scan.txt";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_charge
+  fname << out_dir << "/psmind_to_charge.txt";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_label
+  fname << out_dir << "/psmind_to_label.txt";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //ind_to_pep
+  fname << out_dir << "/ind_to_pep.txt";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //pep_to_ind
+  fname << out_dir << "/pep_to_ind.txt";
+  remove(fname.str().c_str());
+  fname.str("");
+
+}
+
+
+
+/******************************************************************************************/
+
+
+int TabDelimParser :: run(vector<string> &filenames)
+{
+  string line;
+  for(unsigned int i = 0; i < filenames.size(); i++)
+    {
+      string fname = filenames[i];
+      cout << fname << endl;
+      ifstream fin(fname.c_str());
+      if(!fin.is_open())
+	{
+	  cout << "could not open " << fname << " for reading" << endl;
+	  return 0;
+	}
+      getline(fin,line);
+      first_pass(fin);
+      fin.close();
+    }
+  cout << num_psm << " " << num_pep << " " << num_pep_in_all_psms << endl;
+  allocate_feature_space();
+
+  ostringstream fname;
+  fname << out_dir << "/psm.txt";
+  f_psm.open(fname.str().c_str());
+  fname.str("");
+
+  int label = 0;
+  for(unsigned int i = 0; i < filenames.size(); i++)
+    {
+      string fname = filenames[i];
+      cout << fname << endl;
+      ifstream fin(fname.c_str());
+      if(!fin.is_open())
+	{
+	  cout << "could not open " << fname << " for reading" << endl;
+	  return 0;
+	}
+      getline(fin,line);
+      if(i == 0)
+	label = 1;
+      else
+	label = -1;
+      second_pass(fin,label);
+      fin.close();
+    }
+  f_psm.close();
+  cout << psmind << " " << num_pos_psm << " " << num_neg_psm << endl;
+  save_data_in_binary(out_dir);
+  return 1;
+}
+
+/*******************************************xlinking functions*************************************/
+
+
+/* xlink tokens
+ * 0. scan    
+ * 1. charge  
+ * 2. spectrum precursor m/z  
+ * 3. spectrum neutral mass   
+ * 4. peptide mass mono       
+ * 5. peptide mass average    
+ * 6. mass error(ppm) 
+ * 7. sp score        
+ * 8. sp rank 
+ * 9. b/y ions matched        
+ * 10. b/y ions total  
+ * 11. xcorr score     
+ * 12. xcorr rank      
+ * 13. p-value 
+ * 14. distinct matches/spectrum
+ * 15. sequence        
+ * 16. protein id(loc) 1       
+ * 17. protein id(loc) 2
+ */
+
+
+void TabDelimParser :: first_pass_xlink(ifstream &fin)
+{
+  string line;
+  vector<string> tokens;
+  vector<string> subtokens;
+  vector<string> peptides;
+  string delim1 = "\t";
+  string delim2 = ",";
+  string delim3 = " ";
+  while(!fin.eof())
+    {
+      getline(fin,line);
+      get_tokens(line, tokens, delim1);
+      
+      if(tokens.size() > 1)
+	{
+	  //get all peptides and fill tables
+	  string pep_and_loc = tokens[15];
+	  get_tokens(pep_and_loc,subtokens,delim3);
+	  string peps = subtokens[0];
+	  get_tokens(peps,peptides,delim2);
+	  psmind_to_peptide1[num_psm] = peptides[0];
+	  psmind_to_peptide2[num_psm] = peptides[1];
+	  psmind_to_loc[num_psm] = subtokens[1];
+	  //proteins
+	  psmind_to_protein1[num_psm] = tokens[16];
+	  psmind_to_protein2[num_psm] = tokens[17];
+	  
+	  num_psm++;
+	}
+    }
+}
+
+
+void TabDelimParser :: allocate_feature_space_xlink()
+{
+  //space for feature vector
+  x = new double[num_xlink_features];
+  memset(x,0,sizeof(double)*num_xlink_features);
+
+  psmind_to_label = new int[num_psm];
+  memset(psmind_to_label,0,sizeof(int)*num_psm);
+
+}
+
+
+void TabDelimParser :: extract_xlink_features(vector<string> & tokens, double *x)
+{
+  memset(x,0,sizeof(double)*num_xlink_features);
+  //log rank by Sp
+  x[0]=atof(tokens[8].c_str());
+  //deltaLCN
+
+  //deltaCN
+
+  //xcorr score
+  x[3] = atof(tokens[11].c_str());
+  //sp score
+  x[4] = atof(tokens[7].c_str());
+  //matched ions/predicted ions
+  
+  //observed mass
+  
+  //peptide length
+  
+  //charge
+  
+  //whether n-terminus and c-terminus have proper cleavage sites
+  
+  // missed cleavages
+  
+  // number of sequence_comparisons
+
+  //difference between measured and calculated mass
+
+  // absolute value of difference between measured and calculated mass
+
+}
+
+
+
+void TabDelimParser :: second_pass_xlink(ifstream &fin, int label)
+{
+  string line;
+  vector<string> tokens;
+  
+  vector<string> peptides;
+  vector<string> charge_str;
+  vector<string> spectrum_neutral_mass_str;
+  vector<string> peptide_mass_str;
+  string delim1 = "\t";
+  string delim2 = ",";
+  while(!fin.eof())
+    {
+      getline(fin,line);
+      get_tokens(line, tokens, delim1);
+  
+      if(tokens.size() > 1)
+	{
+	  //extract features
+	  extract_xlink_features(tokens, x);
+	  f_psm.write((char*)x, sizeof(double)*num_features);
+		  
+	  psmind_to_label[psmind] = label;
+	  if(label == 1)
+	    num_pos_psm++;
+	  else
+	    num_neg_psm++;
+
+	  //augment counters
+	  psmind++;  
+	}
+    }
+}
+
+
+void TabDelimParser :: save_data_in_binary_xlink(string out_dir)
+{
+  ostringstream fname;
+  //write out data summary
+  fname << out_dir << "/summary.txt";
+  ofstream f_summary(fname.str().c_str());
+  //psm info
+  f_summary << num_xlink_features << " " << num_psm << " " << num_pos_psm << " " << num_neg_psm << endl;
+  f_summary.close();
+  fname.str("");
+
+  //psmind_to_label
+  fname << out_dir << "/psmind_to_label.txt";
+  ofstream f_psmind_to_label(fname.str().c_str(),ios::binary);
+  f_psmind_to_label.write((char*)psmind_to_label,sizeof(int)*num_psm);
+  f_psmind_to_label.close();
+  fname.str("");
+  
+  //psmind_to_peptide1
+  fname << out_dir << "/psmind_to_peptide1.txt";
+  ofstream f_psmind_to_peptide1(fname.str().c_str(),ios::binary);
+  for(map<int,string>::iterator it = psmind_to_peptide1.begin(); it != psmind_to_peptide1.end(); it++)
+    f_psmind_to_peptide1 << it->first << " " << it->second << "\n";
+  f_psmind_to_peptide1.close();
+  fname.str("");
+  
+  //psmind_to_peptide2
+  fname << out_dir << "/psmind_to_peptide2.txt";
+  ofstream f_psmind_to_peptide2(fname.str().c_str(),ios::binary);
+  for(map<int,string>::iterator it = psmind_to_peptide2.begin(); it != psmind_to_peptide2.end(); it++)
+    f_psmind_to_peptide2 << it->first << " " << it->second << "\n";
+  f_psmind_to_peptide2.close();
+  fname.str("");
+
+  //psmind_to_loc
+  fname << out_dir << "/psmind_to_loc.txt";
+  ofstream f_psmind_to_loc(fname.str().c_str(),ios::binary);
+  for(map<int,string>::iterator it = psmind_to_loc.begin(); it != psmind_to_loc.end(); it++)
+    f_psmind_to_loc << it->first << " " << it->second << "\n";
+  f_psmind_to_loc.close();
+  fname.str("");
+
+  //psmind_to_peptide1
+  fname << out_dir << "/psmind_to_protein1.txt";
+  ofstream f_psmind_to_protein1(fname.str().c_str(),ios::binary);
+  for(map<int,string>::iterator it = psmind_to_protein1.begin(); it != psmind_to_protein1.end(); it++)
+    f_psmind_to_protein1 << it->first << " " << it->second << "\n";
+  f_psmind_to_protein1.close();
+  fname.str("");
+  
+  //psmind_to_peptide2
+  fname << out_dir << "/psmind_to_protein2.txt";
+  ofstream f_psmind_to_protein2(fname.str().c_str(),ios::binary);
+  for(map<int,string>::iterator it = psmind_to_protein2.begin(); it != psmind_to_protein2.end(); it++)
+    f_psmind_to_protein2 << it->first << " " << it->second << "\n";
+  f_psmind_to_protein2.close();
+  fname.str("");
+
+}
+
+
+void TabDelimParser :: clean_up_xlink(string dir)
+{
+
+  ostringstream fname;
+      
+  //fname << out_dir << "/summary.txt";
+  //ofstream f_summary(fname.str().c_str());
+
+  fname << dir << "/psm.txt";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_label
+  fname << out_dir << "/psmind_to_label.txt";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_peptide1
+  fname << out_dir << "/psmind_to_peptide1.txt";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_peptide2
+  fname << out_dir << "/psmind_to_peptide2.txt";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_loc
+  fname << out_dir << "/psmind_to_loc.txt";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_protein1
+  fname << out_dir << "/psmind_to_protein1.txt";
+  remove(fname.str().c_str());
+  fname.str("");
+
+  //psmind_to_protein2
+  fname << out_dir << "/psmind_to_protein2.txt";
+  remove(fname.str().c_str());
+  fname.str("");
+
+}
+
+
+
+int TabDelimParser :: run_on_xlink(vector<string> &filenames)
+{
+  string line;
+  for(unsigned int i = 0; i < filenames.size(); i++)
+    {
+      string fname = filenames[i];
+      cout << fname << endl;
+      ifstream fin(fname.c_str());
+      if(!fin.is_open())
+	{
+	  cout << "could not open " << fname << " for reading" << endl;
+	  return 0;
+	}
+      getline(fin,line);
+      first_pass_xlink(fin);
+      fin.close();
+    
+    }
+  cout << num_psm  << endl;
+  allocate_feature_space_xlink();
+    
+  ostringstream fname;
+  fname << out_dir << "/psm.txt";
+  f_psm.open(fname.str().c_str());
+  fname.str("");
+
+  int label = 0;
+  for(unsigned int i = 0; i < filenames.size(); i++)
+    {
+      string fname = filenames[i];
+      cout << fname << endl;
+      ifstream fin(fname.c_str());
+      if(!fin.is_open())
+	{
+	  cout << "could not open " << fname << " for reading" << endl;
+	  return 0;
+	}
+      getline(fin,line);
+      if(i == 0)
+	label = 1;
+      else
+	label = -1;
+      second_pass_xlink(fin,label);
+      fin.close();
+    }
+  f_psm.close();
+  cout << psmind << " " << num_pos_psm << " " << num_neg_psm << endl;
+  save_data_in_binary_xlink(out_dir);
+  return 1;
+}
+
+
diff --git a/src/app/qranker-barista/TabDelimParser.h b/src/app/qranker-barista/TabDelimParser.h
new file mode 100644
index 0000000..d534470
--- /dev/null
+++ b/src/app/qranker-barista/TabDelimParser.h
@@ -0,0 +1,105 @@
+#ifndef TABDELIMPARSER_H
+#define TABDELIMPARSER_H
+
+#include <sys/types.h>
+#ifndef _MSC_VER
+#include <dirent.h>
+#endif
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <assert.h>
+#include <vector>
+#include <string>
+#include <math.h>
+#include <map>
+#include <set>
+#include <cstring>
+#include <stdlib.h>
+#include "SpecFeatures.h"
+#include "BipartiteGraph.h"
+using namespace std;
+
+class TabDelimParser{
+ public:
+
+  TabDelimParser();
+  ~TabDelimParser();
+  void clear();
+  inline void set_output_dir(string &dir){out_dir = dir;}
+  inline string& get_output_dir(){return out_dir;}
+  int run(vector<string> &filenames);
+
+  void get_tokens(string &line, vector<string>&tokens, string &delim);
+  void first_pass(ifstream &fin);
+  void second_pass(ifstream &fin, int label);
+  void allocate_feature_space();
+  void extract_psm_features(vector<string> & tokens, double *x);
+  void save_data_in_binary(string out_dir);
+  void clean_up(string dir);
+  /*******************************************************/
+  int run_on_xlink(vector<string> &filenames);
+  void first_pass_xlink(ifstream &fin);
+  void second_pass_xlink(ifstream &fin, int label);
+  void allocate_feature_space_xlink();
+  void extract_xlink_features(vector<string> & tokens, double *x);
+  void save_data_in_binary_xlink(string out_dir);
+  void clean_up_xlink(string dir);
+ protected:
+  //auxiliary variables
+  int num_mixed_labels;
+  
+  //psm info
+  int* psmind_to_scan;
+  int* psmind_to_charge;
+  int* psmind_to_label;
+  int* psmind_to_num_pep;
+  int* psmind_to_ofst;
+  int* psmind_to_pepind;
+  double *psmind_to_neutral_mass;
+  double *psmind_to_peptide_mass;
+
+  //peptide info
+  map<string,int> pep_to_ind;
+  map<int,string> ind_to_pep;
+  
+  //summary of the dataset
+  int num_features;
+  int num_psm;
+  int num_pos_psm;
+  int num_neg_psm;
+  int num_pep;
+  int num_pep_in_all_psms;
+  int curr_ofst;
+
+  int psmind;
+
+  //psm feature vector
+  double *x;
+
+  //writing out data
+  string out_dir;
+  ofstream f_psm;
+
+  //final hits per spectrum
+  int fhps;
+  //decoy prefix
+  string decoy_prefix;
+  //enzyme
+  // enzyme e;
+  //max peptide length to be considered
+  int max_len;
+  //min peptide length to be considered
+  int min_len;
+  
+  /************xlink-specific*************/
+  int num_xlink_features;
+  map<int,string> psmind_to_peptide1;
+  map<int,string> psmind_to_peptide2;
+  map<int,string> psmind_to_loc;
+  map<int,string> psmind_to_protein1;
+  map<int,string> psmind_to_protein2;
+  
+};
+
+#endif
diff --git a/src/app/qranker-barista/barista.html b/src/app/qranker-barista/barista.html
new file mode 100644
index 0000000..bf76a5e
--- /dev/null
+++ b/src/app/qranker-barista/barista.html
@@ -0,0 +1,215 @@
+<html>
+<title>crux barista</title>
+<link href="./crux.css" rel="styleSheet" type="text/css">
+</head>
+<body>
+<blockquote>
+
+<H1 ALIGN=CENTER>crux barista</H1>
+
+
+<p>
+<b>Description:</b></p>
+
+<p>
+Barista is a protein identification algorithm that combines two
+different tasks—peptide-spectrum match (PSM) verification and
+protein inference—into a single learning algorithm.  The program
+requires two inputs: the results of a database search and a database
+of proteins.  Barista produces as output a ranking of proteins based
+on how likely they are to be present in the sample.  Barista also
+re-ranks the peptide identifications to more accurately distinguish
+between correct and incorrect identifications.  Barista uses a machine
+learning strategy that requires that the database search be carried
+out on target and decoy proteins.</p>
+
+<p>
+<b>Usage:</b></p>
+
+<blockquote>
+<code>crux barista [options] <protein database folder> <sqt folder> <ms2 folder></p> 
+<code>crux barista [options] <list of protein database files> <list of sqt files> <list of ms2 files> </p> 
+<code>crux barista [options] <protein database file> <sqt file> <ms2 file> 
+
+</code>
+</blockquote>
+
+
+<p>
+<b>Required Input:</b></p>
+
+<ul>
+
+<li>
+protein database – The program requires the protein database
+files against which the search was performed. The protein database
+input may be a concatenated database or separate target and decoy
+databases. However, in both cases, the program distinguishes between
+target and decoy proteins based on the decoy prefix. There is an
+option to specify the prefix to the protein name that indicates a
+decoy, the default is "random_".
+   
+</p>
+The format of the input can be a directory containing the database
+files, a text file with a list of protein database files or a single
+database file.  If the protein database input contains suffix "fasta",
+the program assumes a single-file input. Otherwise it checks whether
+the input is a directory or a text file.
+</li>
+</p>
+<li>
+psm input – Barista recognizes sqt format for psm input. The psm
+input can be specified as a single file with suffix "sqt" and should
+be accompanied by the corresponding ms2 file as a third required
+argument. Alternatively, psm input can be given as a text file containing
+the list of all the "sqt" files and should be accompanied by the text
+file with the list of the corresponding ms2 files as a third required
+argument. 
+</p>
+Finally, the psm input can be specified as a directory in which all
+the database search results are located. In this case, the program
+collects all the files with prefix "sqt" contained in the directory and
+analyses them jointly. As it finds each sqt file, it simultaneously
+searches the ms2 input directory for an ms2 file with the same name,
+but with the suffix "sqt" replaced with suffix the "ms2".
+
+</p>
+The multiple files can be results of many different experiments or of
+multiple duplicate runs. They can also be the result of separate
+target and decoy searches.  All such files in the given directory are
+analyzed jointly.
+</p>
+<li>
+ms2 input – The ms2 input can be specified as a single file with
+suffix "ms2" and as a text file containing the list of all the ms2
+files and or as a directory where all the ms2 files corresponding to
+the psm input in the second argument can be found.
+
+</ul>
+
+<B>Output:</B>
+
+<UL>
+<p>
+The program writes files to the folder <code>crux-output</code> by
+default.  The name of the output folder can be set by the user using
+the <code>--output-dir</code> option.  The following files will be
+created:</p>
+
+<li>
+<b>barista.target.html</b>: an HTML file that summarizes the protein
+ranking in a human-readable format.  Sets of indistinguishable
+proteins are grouped together, and their IDs are printed along with
+the Barista q-value.  Along with each protein group is a list of the
+corresponding peptides. The information about each peptide includes its
+amino acid sequence, scan and charge of the peptide, its position in
+the protein, the q-value and score assigned by Barista. Following is a
+portion of a sample output file, showing the identification of a pair
+of proteins:</li>
+
+<hr></hr>
+
+<p>
+<table cellpadding="10">
+
+<tr><td><b>q-value</b></td><td><b>score</b></td><td><b>ID</b></td>
+<td><b>Peptides</b></td><td><b>Matched</b></td>
+<td><b>Description</b></td></tr>
+
+<tr><td>0.001</td><td>1.25</td><td>foo</td><td>12</td><td>3</td>
+<td>Phosphotyrosine glutamate transporter</td></tr>
+<tr><td></td><td></td><td>foobar</td><td>7</td><td>3</td>
+<td>Phosphotyrosine glutamate transporter (N-terminal domain)</td></tr>
+</table>
+
+<ul>
+<table cellpadding="5" border="1">
+<tr><td>EAMPK</td><td>scan=000230</td><td>charge=2</td><td>20-24</td><td>q=0.07</td><td>score=1.27</td></tr>
+<tr><td>YRMLK</td><td>scan=004870</td><td>charge=2</td><td>27-31</td><td>q=0.09</td><td>score=1.05</td></tr>
+<tr><td>NLMMRPPK</td><td>scan=006790</td><td>charge=3</td><td>54-61</td><td>q=0.59</td><td>score=-0.09</td></tr>
+</table>
+</ul>
+
+<hr></hr>
+
+<li>
+<b>barista.target.proteins.txt</b>: a tab-delimited file containing a
+ranked list of groups of indistinguishable target proteins with
+associated Barista scores and q-values and with peptides that
+contributed to the identification of the protein group).  The
+following columns are included: proteins in group, Barista score,
+decoy q-value, peptides with scan and charge (for example,
+EAMPK-001285.2).  The semantics of these columns are explained
+in <a href="txt-format.html">this document</a>.</li>
+
+<li>
+<b>barista.target.peptides.txt</b>: a tab-delimited file containing a
+ranked list of target peptides with the associated Barista scores and
+q-values.  The following columns are included: peptide, scan of
+spectrum in the peptide-spectrum match, charge of spectrum in the
+peptide-spectrum match, Barista score, decoy q-value.  The semantics
+of these columns are explained in <a href="txt-format.html">this
+document</a>.</li>
+
+<li>
+<b>barista.target.psm.txt</b>: a tab-delimited file containing a
+ranked list of target peptide-spectrum matches with the associated
+Barista scores and q-values.  The following columns are included: scan
+of spectrum in the peptide-spectrum match, charge of spectrum in the
+peptide-spectrum match, peptide in the peptide-spectrum match, Barista
+score, decoy q-value, the filename where each psm was found.  The
+semantics of these columns are explained
+in <a href="txt-format.html">this document</a>.</li>
+
+</ul>
+
+<b>Options:</b>
+
+<ul>
+
+<li>
+<code>--enzyme trypsin|chymotrypsin|elastase</code> – The enzyme
+used to digest the proteins in the experiment.  Default =
+trypsin.</li>
+
+<li>
+<code>--decoy-prefix <string></code> – specifies the
+prefix of the protein names that indicates a decoy.
+</li>
+
+<li>
+<code>--fileroot <string></code> – 
+The <code>fileroot</code> string will be added as a prefix to all
+output file names. Default = none.
+</li>
+
+
+<li>
+<code>--output-dir <filename></code> – 
+The name of the directory where output files will be created.
+Default = crux-output.
+</li>
+
+<li>
+<code>--skip-cleanup <T/F></code> – Barista analysis
+consists of preprocessing data and creating lookup tables which are
+then used during training. This option allows keeping the tables after
+the analysis and doing training directly by specifying the
+--dir-with-tables option (see below). Default = F.
+</li>
+
+
+<li>
+<code>--dir-with-tables <filename></code> – The name of
+the directory where the lookup tables with preprocessed data are
+located. Default = none.
+</li>
+
+
+<hr></hr>
+
+<a href="crux.html">Crux home</a>
+
+</blockquote>
+</body>
+</html>
diff --git a/src/app/qranker-barista/cmake_install.cmake b/src/app/qranker-barista/cmake_install.cmake
new file mode 100644
index 0000000..709781a
--- /dev/null
+++ b/src/app/qranker-barista/cmake_install.cmake
@@ -0,0 +1,34 @@
+# Install script for directory: /data/TeamCity/buildAgent/work/779d99b0241b2175/src/app/qranker-barista
+
+# Set the install prefix
+IF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+  SET(CMAKE_INSTALL_PREFIX "/usr/local")
+ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+  IF(BUILD_TYPE)
+    STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+  ELSE(BUILD_TYPE)
+    SET(CMAKE_INSTALL_CONFIG_NAME "Release")
+  ENDIF(BUILD_TYPE)
+  MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+
+# Set the component getting installed.
+IF(NOT CMAKE_INSTALL_COMPONENT)
+  IF(COMPONENT)
+    MESSAGE(STATUS "Install component: \"${COMPONENT}\"")
+    SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+  ELSE(COMPONENT)
+    SET(CMAKE_INSTALL_COMPONENT)
+  ENDIF(COMPONENT)
+ENDIF(NOT CMAKE_INSTALL_COMPONENT)
+
+# Install shared libraries without execute permission?
+IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+  SET(CMAKE_INSTALL_SO_NO_EXE "0")
+ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+
diff --git a/src/app/qranker-barista/libbarista.a b/src/app/qranker-barista/libbarista.a
new file mode 100644
index 0000000..7564322
Binary files /dev/null and b/src/app/qranker-barista/libbarista.a differ
diff --git a/src/app/tide/CMakeLists.txt b/src/app/tide/CMakeLists.txt
new file mode 100644
index 0000000..da1cdc9
--- /dev/null
+++ b/src/app/tide/CMakeLists.txt
@@ -0,0 +1,126 @@
+cmake_minimum_required(VERSION 2.8.4)
+cmake_policy(VERSION 2.8.4)
+
+###### Set up include and link directories  ######
+if (WIN32 AND NOT CYGWIN)
+include_directories(
+  ${CMAKE_SOURCE_DIR}/src
+  ${CMAKE_BINARY_DIR}/ext/include
+  ${CMAKE_CURRENT_BINARY_DIR}/protoobj
+  ${CMAKE_BINARY_DIR}/ext/build/src/protobuf-2.5.0/src
+  ${CMAKE_BINARY_DIR}/ext/build/src/google-gflags/src/windows
+  ${CMAKE_BINARY_DIR}/ext/build/src/ProteoWizard/libraries/boost_1_56_0
+  ${CMAKE_BINARY_DIR}/ext/build/src/ProteoWizard/libraries/boost_aux
+)
+else (WIN32 AND NOT CYGWIN)
+include_directories(
+  ${CMAKE_SOURCE_DIR}/src
+  ${CMAKE_BINARY_DIR}/ext/include
+  ${CMAKE_CURRENT_BINARY_DIR}/protoobj
+  ${CMAKE_BINARY_DIR}/ext/build/src/ProtocolBuffers/src
+  ${CMAKE_BINARY_DIR}/ext/build/src/ProteoWizard/libraries/boost_1_56_0
+  ${CMAKE_BINARY_DIR}/ext/build/src/ProteoWizard/libraries/boost_aux
+)
+endif (WIN32 AND NOT CYGWIN)
+
+link_directories(
+  ${CMAKE_BINARY_DIR}/ext/lib
+)
+
+set_directory_properties(
+  PROPERTIES
+  ADDITIONAL_MAKE_CLEAN_FILES
+  protoobj
+)
+
+########### For compiling proto files  ###########
+set(
+  proto_files_compiled
+  ${CMAKE_CURRENT_BINARY_DIR}/protoobj/header.pb.cc
+  ${CMAKE_CURRENT_BINARY_DIR}/protoobj/peptides.pb.cc
+  ${CMAKE_CURRENT_BINARY_DIR}/protoobj/raw_proteins.pb.cc
+  ${CMAKE_CURRENT_BINARY_DIR}/protoobj/results.pb.cc
+  ${CMAKE_CURRENT_BINARY_DIR}/protoobj/spectrum.pb.cc
+)
+set(
+  proto_files
+  ${CMAKE_CURRENT_SOURCE_DIR}/protobuf/header.proto
+  ${CMAKE_CURRENT_SOURCE_DIR}/protobuf/peptides.proto
+  ${CMAKE_CURRENT_SOURCE_DIR}/protobuf/raw_proteins.proto
+  ${CMAKE_CURRENT_SOURCE_DIR}/protobuf/results.proto
+  ${CMAKE_CURRENT_SOURCE_DIR}/protobuf/spectrum.proto
+)
+add_custom_command(
+  OUTPUT ${proto_files_compiled}
+  DEPENDS ${proto_files}
+  COMMAND ${CMAKE_COMMAND} -E make_directory protoobj
+  COMMAND
+    ${CMAKE_BINARY_DIR}/ext/bin/protoc 
+      --proto_path=${CMAKE_CURRENT_SOURCE_DIR}/protobuf/ 
+      --cpp_out=${CMAKE_CURRENT_BINARY_DIR}/protoobj
+      --python_out=${CMAKE_CURRENT_BINARY_DIR}/protoobj 
+      ${proto_files}
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+)
+
+########## Set up tide-support library  ##########
+if (WIN32 AND NOT CYGWIN)
+  set(
+    tide_lib_files
+    ${proto_files_compiled}
+    abspath.cc
+    active_peptide_queue.cc
+    crux_sp_spectrum.cc
+    fifo_alloc.cc
+    index_settings.cc
+    make_peptides.cc
+    mass_constants.cc
+    max_mz.cc
+    mman.c
+    peptide.cc
+    peptide_mods3.cc
+    peptide_peaks.cc
+    sp_scorer.cc
+    spectrum_collection.cc
+    spectrum_preprocess2.cc
+  )
+else (WIN32 AND NOT CYGWIN)
+  set(
+    tide_lib_files
+    ${proto_files_compiled}
+    abspath.cc
+    active_peptide_queue.cc
+    crux_sp_spectrum.cc
+    fifo_alloc.cc
+    index_settings.cc
+    make_peptides.cc
+    mass_constants.cc
+    max_mz.cc
+    peptide.cc
+    peptide_mods3.cc
+    peptide_peaks.cc
+    sp_scorer.cc
+    spectrum_collection.cc
+    spectrum_preprocess2.cc
+  )
+endif (WIN32 AND NOT CYGWIN)
+add_library(tide-support STATIC ${tide_lib_files})
+
+if (WIN32 AND NOT CYGWIN)
+  set_property(
+    TARGET tide-support 
+    PROPERTY 
+      COMPILE_DEFINITIONS 
+      GFLAGS_DLL_DECL= 
+      GFLAGS_DLL_DECLARE_FLAG= 
+      GFLAGS_DLL_DEFINE_FLAG=
+  )
+elseif (APPLE)
+  set_property(
+    TARGET tide-support 
+    PROPERTY 
+      COMPILE_DEFINITIONS 
+      DARWIN 
+  )
+endif (WIN32 AND NOT CYGWIN)
+
diff --git a/src/app/tide/Makefile b/src/app/tide/Makefile
new file mode 100644
index 0000000..84b0460
--- /dev/null
+++ b/src/app/tide/Makefile
@@ -0,0 +1,720 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 2.8
+
+# Default target executed when no arguments are given to make.
+default_target: all
+.PHONY : default_target
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+# A target that is always out of date.
+cmake_force:
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake
+
+# The command to remove a file.
+RM = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The program to use to edit the cache.
+CMAKE_EDIT_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target edit_cache
+edit_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+.PHONY : edit_cache/fast
+
+# Special rule for the target install
+install: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install
+
+# Special rule for the target install
+install/fast: preinstall/fast
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install/fast
+
+# Special rule for the target install/local
+install/local: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local
+
+# Special rule for the target install/local
+install/local/fast: install/local
+.PHONY : install/local/fast
+
+# Special rule for the target install/strip
+install/strip: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip
+
+# Special rule for the target install/strip
+install/strip/fast: install/strip
+.PHONY : install/strip/fast
+
+# Special rule for the target list_install_components
+list_install_components:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
+.PHONY : list_install_components
+
+# Special rule for the target list_install_components
+list_install_components/fast: list_install_components
+.PHONY : list_install_components/fast
+
+# Special rule for the target package
+package: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackConfig.cmake
+.PHONY : package
+
+# Special rule for the target package
+package/fast: package
+.PHONY : package/fast
+
+# Special rule for the target package_source
+package_source:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool for source..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackSourceConfig.cmake /data/TeamCity/buildAgent/work/779d99b0241b2175/CPackSourceConfig.cmake
+.PHONY : package_source
+
+# Special rule for the target package_source
+package_source/fast: package_source
+.PHONY : package_source/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+.PHONY : rebuild_cache/fast
+
+# The main all target
+all: cmake_check_build_system
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles /data/TeamCity/buildAgent/work/779d99b0241b2175/src/app/tide/CMakeFiles/progress.marks
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/tide/all
+	$(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/tide/clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/tide/preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/tide/preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+.PHONY : depend
+
+# Convenience name for target.
+src/app/tide/CMakeFiles/tide-support.dir/rule:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/tide/CMakeFiles/tide-support.dir/rule
+.PHONY : src/app/tide/CMakeFiles/tide-support.dir/rule
+
+# Convenience name for target.
+tide-support: src/app/tide/CMakeFiles/tide-support.dir/rule
+.PHONY : tide-support
+
+# fast build rule for target.
+tide-support/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/build
+.PHONY : tide-support/fast
+
+abspath.o: abspath.cc.o
+.PHONY : abspath.o
+
+# target to build an object file
+abspath.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/abspath.cc.o
+.PHONY : abspath.cc.o
+
+abspath.i: abspath.cc.i
+.PHONY : abspath.i
+
+# target to preprocess a source file
+abspath.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/abspath.cc.i
+.PHONY : abspath.cc.i
+
+abspath.s: abspath.cc.s
+.PHONY : abspath.s
+
+# target to generate assembly for a file
+abspath.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/abspath.cc.s
+.PHONY : abspath.cc.s
+
+active_peptide_queue.o: active_peptide_queue.cc.o
+.PHONY : active_peptide_queue.o
+
+# target to build an object file
+active_peptide_queue.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/active_peptide_queue.cc.o
+.PHONY : active_peptide_queue.cc.o
+
+active_peptide_queue.i: active_peptide_queue.cc.i
+.PHONY : active_peptide_queue.i
+
+# target to preprocess a source file
+active_peptide_queue.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/active_peptide_queue.cc.i
+.PHONY : active_peptide_queue.cc.i
+
+active_peptide_queue.s: active_peptide_queue.cc.s
+.PHONY : active_peptide_queue.s
+
+# target to generate assembly for a file
+active_peptide_queue.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/active_peptide_queue.cc.s
+.PHONY : active_peptide_queue.cc.s
+
+crux_sp_spectrum.o: crux_sp_spectrum.cc.o
+.PHONY : crux_sp_spectrum.o
+
+# target to build an object file
+crux_sp_spectrum.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/crux_sp_spectrum.cc.o
+.PHONY : crux_sp_spectrum.cc.o
+
+crux_sp_spectrum.i: crux_sp_spectrum.cc.i
+.PHONY : crux_sp_spectrum.i
+
+# target to preprocess a source file
+crux_sp_spectrum.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/crux_sp_spectrum.cc.i
+.PHONY : crux_sp_spectrum.cc.i
+
+crux_sp_spectrum.s: crux_sp_spectrum.cc.s
+.PHONY : crux_sp_spectrum.s
+
+# target to generate assembly for a file
+crux_sp_spectrum.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/crux_sp_spectrum.cc.s
+.PHONY : crux_sp_spectrum.cc.s
+
+fifo_alloc.o: fifo_alloc.cc.o
+.PHONY : fifo_alloc.o
+
+# target to build an object file
+fifo_alloc.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/fifo_alloc.cc.o
+.PHONY : fifo_alloc.cc.o
+
+fifo_alloc.i: fifo_alloc.cc.i
+.PHONY : fifo_alloc.i
+
+# target to preprocess a source file
+fifo_alloc.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/fifo_alloc.cc.i
+.PHONY : fifo_alloc.cc.i
+
+fifo_alloc.s: fifo_alloc.cc.s
+.PHONY : fifo_alloc.s
+
+# target to generate assembly for a file
+fifo_alloc.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/fifo_alloc.cc.s
+.PHONY : fifo_alloc.cc.s
+
+index_settings.o: index_settings.cc.o
+.PHONY : index_settings.o
+
+# target to build an object file
+index_settings.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/index_settings.cc.o
+.PHONY : index_settings.cc.o
+
+index_settings.i: index_settings.cc.i
+.PHONY : index_settings.i
+
+# target to preprocess a source file
+index_settings.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/index_settings.cc.i
+.PHONY : index_settings.cc.i
+
+index_settings.s: index_settings.cc.s
+.PHONY : index_settings.s
+
+# target to generate assembly for a file
+index_settings.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/index_settings.cc.s
+.PHONY : index_settings.cc.s
+
+make_peptides.o: make_peptides.cc.o
+.PHONY : make_peptides.o
+
+# target to build an object file
+make_peptides.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/make_peptides.cc.o
+.PHONY : make_peptides.cc.o
+
+make_peptides.i: make_peptides.cc.i
+.PHONY : make_peptides.i
+
+# target to preprocess a source file
+make_peptides.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/make_peptides.cc.i
+.PHONY : make_peptides.cc.i
+
+make_peptides.s: make_peptides.cc.s
+.PHONY : make_peptides.s
+
+# target to generate assembly for a file
+make_peptides.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/make_peptides.cc.s
+.PHONY : make_peptides.cc.s
+
+mass_constants.o: mass_constants.cc.o
+.PHONY : mass_constants.o
+
+# target to build an object file
+mass_constants.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/mass_constants.cc.o
+.PHONY : mass_constants.cc.o
+
+mass_constants.i: mass_constants.cc.i
+.PHONY : mass_constants.i
+
+# target to preprocess a source file
+mass_constants.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/mass_constants.cc.i
+.PHONY : mass_constants.cc.i
+
+mass_constants.s: mass_constants.cc.s
+.PHONY : mass_constants.s
+
+# target to generate assembly for a file
+mass_constants.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/mass_constants.cc.s
+.PHONY : mass_constants.cc.s
+
+max_mz.o: max_mz.cc.o
+.PHONY : max_mz.o
+
+# target to build an object file
+max_mz.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/max_mz.cc.o
+.PHONY : max_mz.cc.o
+
+max_mz.i: max_mz.cc.i
+.PHONY : max_mz.i
+
+# target to preprocess a source file
+max_mz.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/max_mz.cc.i
+.PHONY : max_mz.cc.i
+
+max_mz.s: max_mz.cc.s
+.PHONY : max_mz.s
+
+# target to generate assembly for a file
+max_mz.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/max_mz.cc.s
+.PHONY : max_mz.cc.s
+
+peptide.o: peptide.cc.o
+.PHONY : peptide.o
+
+# target to build an object file
+peptide.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/peptide.cc.o
+.PHONY : peptide.cc.o
+
+peptide.i: peptide.cc.i
+.PHONY : peptide.i
+
+# target to preprocess a source file
+peptide.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/peptide.cc.i
+.PHONY : peptide.cc.i
+
+peptide.s: peptide.cc.s
+.PHONY : peptide.s
+
+# target to generate assembly for a file
+peptide.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/peptide.cc.s
+.PHONY : peptide.cc.s
+
+peptide_mods3.o: peptide_mods3.cc.o
+.PHONY : peptide_mods3.o
+
+# target to build an object file
+peptide_mods3.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/peptide_mods3.cc.o
+.PHONY : peptide_mods3.cc.o
+
+peptide_mods3.i: peptide_mods3.cc.i
+.PHONY : peptide_mods3.i
+
+# target to preprocess a source file
+peptide_mods3.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/peptide_mods3.cc.i
+.PHONY : peptide_mods3.cc.i
+
+peptide_mods3.s: peptide_mods3.cc.s
+.PHONY : peptide_mods3.s
+
+# target to generate assembly for a file
+peptide_mods3.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/peptide_mods3.cc.s
+.PHONY : peptide_mods3.cc.s
+
+peptide_peaks.o: peptide_peaks.cc.o
+.PHONY : peptide_peaks.o
+
+# target to build an object file
+peptide_peaks.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/peptide_peaks.cc.o
+.PHONY : peptide_peaks.cc.o
+
+peptide_peaks.i: peptide_peaks.cc.i
+.PHONY : peptide_peaks.i
+
+# target to preprocess a source file
+peptide_peaks.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/peptide_peaks.cc.i
+.PHONY : peptide_peaks.cc.i
+
+peptide_peaks.s: peptide_peaks.cc.s
+.PHONY : peptide_peaks.s
+
+# target to generate assembly for a file
+peptide_peaks.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/peptide_peaks.cc.s
+.PHONY : peptide_peaks.cc.s
+
+protoobj/header.pb.o: protoobj/header.pb.cc.o
+.PHONY : protoobj/header.pb.o
+
+# target to build an object file
+protoobj/header.pb.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/protoobj/header.pb.cc.o
+.PHONY : protoobj/header.pb.cc.o
+
+protoobj/header.pb.i: protoobj/header.pb.cc.i
+.PHONY : protoobj/header.pb.i
+
+# target to preprocess a source file
+protoobj/header.pb.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/protoobj/header.pb.cc.i
+.PHONY : protoobj/header.pb.cc.i
+
+protoobj/header.pb.s: protoobj/header.pb.cc.s
+.PHONY : protoobj/header.pb.s
+
+# target to generate assembly for a file
+protoobj/header.pb.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/protoobj/header.pb.cc.s
+.PHONY : protoobj/header.pb.cc.s
+
+protoobj/peptides.pb.o: protoobj/peptides.pb.cc.o
+.PHONY : protoobj/peptides.pb.o
+
+# target to build an object file
+protoobj/peptides.pb.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/protoobj/peptides.pb.cc.o
+.PHONY : protoobj/peptides.pb.cc.o
+
+protoobj/peptides.pb.i: protoobj/peptides.pb.cc.i
+.PHONY : protoobj/peptides.pb.i
+
+# target to preprocess a source file
+protoobj/peptides.pb.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/protoobj/peptides.pb.cc.i
+.PHONY : protoobj/peptides.pb.cc.i
+
+protoobj/peptides.pb.s: protoobj/peptides.pb.cc.s
+.PHONY : protoobj/peptides.pb.s
+
+# target to generate assembly for a file
+protoobj/peptides.pb.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/protoobj/peptides.pb.cc.s
+.PHONY : protoobj/peptides.pb.cc.s
+
+protoobj/raw_proteins.pb.o: protoobj/raw_proteins.pb.cc.o
+.PHONY : protoobj/raw_proteins.pb.o
+
+# target to build an object file
+protoobj/raw_proteins.pb.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/protoobj/raw_proteins.pb.cc.o
+.PHONY : protoobj/raw_proteins.pb.cc.o
+
+protoobj/raw_proteins.pb.i: protoobj/raw_proteins.pb.cc.i
+.PHONY : protoobj/raw_proteins.pb.i
+
+# target to preprocess a source file
+protoobj/raw_proteins.pb.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/protoobj/raw_proteins.pb.cc.i
+.PHONY : protoobj/raw_proteins.pb.cc.i
+
+protoobj/raw_proteins.pb.s: protoobj/raw_proteins.pb.cc.s
+.PHONY : protoobj/raw_proteins.pb.s
+
+# target to generate assembly for a file
+protoobj/raw_proteins.pb.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/protoobj/raw_proteins.pb.cc.s
+.PHONY : protoobj/raw_proteins.pb.cc.s
+
+protoobj/results.pb.o: protoobj/results.pb.cc.o
+.PHONY : protoobj/results.pb.o
+
+# target to build an object file
+protoobj/results.pb.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/protoobj/results.pb.cc.o
+.PHONY : protoobj/results.pb.cc.o
+
+protoobj/results.pb.i: protoobj/results.pb.cc.i
+.PHONY : protoobj/results.pb.i
+
+# target to preprocess a source file
+protoobj/results.pb.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/protoobj/results.pb.cc.i
+.PHONY : protoobj/results.pb.cc.i
+
+protoobj/results.pb.s: protoobj/results.pb.cc.s
+.PHONY : protoobj/results.pb.s
+
+# target to generate assembly for a file
+protoobj/results.pb.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/protoobj/results.pb.cc.s
+.PHONY : protoobj/results.pb.cc.s
+
+protoobj/spectrum.pb.o: protoobj/spectrum.pb.cc.o
+.PHONY : protoobj/spectrum.pb.o
+
+# target to build an object file
+protoobj/spectrum.pb.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/protoobj/spectrum.pb.cc.o
+.PHONY : protoobj/spectrum.pb.cc.o
+
+protoobj/spectrum.pb.i: protoobj/spectrum.pb.cc.i
+.PHONY : protoobj/spectrum.pb.i
+
+# target to preprocess a source file
+protoobj/spectrum.pb.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/protoobj/spectrum.pb.cc.i
+.PHONY : protoobj/spectrum.pb.cc.i
+
+protoobj/spectrum.pb.s: protoobj/spectrum.pb.cc.s
+.PHONY : protoobj/spectrum.pb.s
+
+# target to generate assembly for a file
+protoobj/spectrum.pb.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/protoobj/spectrum.pb.cc.s
+.PHONY : protoobj/spectrum.pb.cc.s
+
+sp_scorer.o: sp_scorer.cc.o
+.PHONY : sp_scorer.o
+
+# target to build an object file
+sp_scorer.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/sp_scorer.cc.o
+.PHONY : sp_scorer.cc.o
+
+sp_scorer.i: sp_scorer.cc.i
+.PHONY : sp_scorer.i
+
+# target to preprocess a source file
+sp_scorer.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/sp_scorer.cc.i
+.PHONY : sp_scorer.cc.i
+
+sp_scorer.s: sp_scorer.cc.s
+.PHONY : sp_scorer.s
+
+# target to generate assembly for a file
+sp_scorer.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/sp_scorer.cc.s
+.PHONY : sp_scorer.cc.s
+
+spectrum_collection.o: spectrum_collection.cc.o
+.PHONY : spectrum_collection.o
+
+# target to build an object file
+spectrum_collection.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/spectrum_collection.cc.o
+.PHONY : spectrum_collection.cc.o
+
+spectrum_collection.i: spectrum_collection.cc.i
+.PHONY : spectrum_collection.i
+
+# target to preprocess a source file
+spectrum_collection.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/spectrum_collection.cc.i
+.PHONY : spectrum_collection.cc.i
+
+spectrum_collection.s: spectrum_collection.cc.s
+.PHONY : spectrum_collection.s
+
+# target to generate assembly for a file
+spectrum_collection.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/spectrum_collection.cc.s
+.PHONY : spectrum_collection.cc.s
+
+spectrum_preprocess2.o: spectrum_preprocess2.cc.o
+.PHONY : spectrum_preprocess2.o
+
+# target to build an object file
+spectrum_preprocess2.cc.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/spectrum_preprocess2.cc.o
+.PHONY : spectrum_preprocess2.cc.o
+
+spectrum_preprocess2.i: spectrum_preprocess2.cc.i
+.PHONY : spectrum_preprocess2.i
+
+# target to preprocess a source file
+spectrum_preprocess2.cc.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/spectrum_preprocess2.cc.i
+.PHONY : spectrum_preprocess2.cc.i
+
+spectrum_preprocess2.s: spectrum_preprocess2.cc.s
+.PHONY : spectrum_preprocess2.s
+
+# target to generate assembly for a file
+spectrum_preprocess2.cc.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/tide/CMakeFiles/tide-support.dir/build.make src/app/tide/CMakeFiles/tide-support.dir/spectrum_preprocess2.cc.s
+.PHONY : spectrum_preprocess2.cc.s
+
+# Help Target
+help:
+	@echo "The following are some of the valid targets for this Makefile:"
+	@echo "... all (the default if no target is provided)"
+	@echo "... clean"
+	@echo "... depend"
+	@echo "... edit_cache"
+	@echo "... install"
+	@echo "... install/local"
+	@echo "... install/strip"
+	@echo "... list_install_components"
+	@echo "... package"
+	@echo "... package_source"
+	@echo "... rebuild_cache"
+	@echo "... tide-support"
+	@echo "... abspath.o"
+	@echo "... abspath.i"
+	@echo "... abspath.s"
+	@echo "... active_peptide_queue.o"
+	@echo "... active_peptide_queue.i"
+	@echo "... active_peptide_queue.s"
+	@echo "... crux_sp_spectrum.o"
+	@echo "... crux_sp_spectrum.i"
+	@echo "... crux_sp_spectrum.s"
+	@echo "... fifo_alloc.o"
+	@echo "... fifo_alloc.i"
+	@echo "... fifo_alloc.s"
+	@echo "... index_settings.o"
+	@echo "... index_settings.i"
+	@echo "... index_settings.s"
+	@echo "... make_peptides.o"
+	@echo "... make_peptides.i"
+	@echo "... make_peptides.s"
+	@echo "... mass_constants.o"
+	@echo "... mass_constants.i"
+	@echo "... mass_constants.s"
+	@echo "... max_mz.o"
+	@echo "... max_mz.i"
+	@echo "... max_mz.s"
+	@echo "... peptide.o"
+	@echo "... peptide.i"
+	@echo "... peptide.s"
+	@echo "... peptide_mods3.o"
+	@echo "... peptide_mods3.i"
+	@echo "... peptide_mods3.s"
+	@echo "... peptide_peaks.o"
+	@echo "... peptide_peaks.i"
+	@echo "... peptide_peaks.s"
+	@echo "... protoobj/header.pb.o"
+	@echo "... protoobj/header.pb.i"
+	@echo "... protoobj/header.pb.s"
+	@echo "... protoobj/peptides.pb.o"
+	@echo "... protoobj/peptides.pb.i"
+	@echo "... protoobj/peptides.pb.s"
+	@echo "... protoobj/raw_proteins.pb.o"
+	@echo "... protoobj/raw_proteins.pb.i"
+	@echo "... protoobj/raw_proteins.pb.s"
+	@echo "... protoobj/results.pb.o"
+	@echo "... protoobj/results.pb.i"
+	@echo "... protoobj/results.pb.s"
+	@echo "... protoobj/spectrum.pb.o"
+	@echo "... protoobj/spectrum.pb.i"
+	@echo "... protoobj/spectrum.pb.s"
+	@echo "... sp_scorer.o"
+	@echo "... sp_scorer.i"
+	@echo "... sp_scorer.s"
+	@echo "... spectrum_collection.o"
+	@echo "... spectrum_collection.i"
+	@echo "... spectrum_collection.s"
+	@echo "... spectrum_preprocess2.o"
+	@echo "... spectrum_preprocess2.i"
+	@echo "... spectrum_preprocess2.s"
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/src/app/tide/abspath.cc b/src/app/tide/abspath.cc
new file mode 100644
index 0000000..7400aa8
--- /dev/null
+++ b/src/app/tide/abspath.cc
@@ -0,0 +1,12 @@
+#include "abspath.h"
+#include <boost/filesystem.hpp>
+
+using namespace std;
+
+// Compute an absolute path from the parameter by prepending the current
+// working directory when the given path is a relative path.
+// Although the result is correct (according to 'man path_resolution')
+// no effort is made to decode symlinks or normalize /. and /..
+string AbsPath(const string& path) {
+  return boost::filesystem::absolute(path).string();
+}
diff --git a/src/app/tide/abspath.h b/src/app/tide/abspath.h
new file mode 100644
index 0000000..1ea0faf
--- /dev/null
+++ b/src/app/tide/abspath.h
@@ -0,0 +1,8 @@
+#ifndef ABSPATH_H
+#define ABSPATH_H
+
+#include <string>
+
+std::string AbsPath(const std::string& rel_path);
+
+#endif
diff --git a/src/app/tide/active_peptide_queue.cc b/src/app/tide/active_peptide_queue.cc
new file mode 100644
index 0000000..204e81d
--- /dev/null
+++ b/src/app/tide/active_peptide_queue.cc
@@ -0,0 +1,347 @@
+// original author: Benjamin Diament
+// subsequently modified by Attila Kertesz-Farkas, Jeff Howbert
+#include <deque>
+#include <gflags/gflags.h>
+#include "records.h"
+#include "peptides.pb.h"
+#include "peptide.h"
+#include "active_peptide_queue.h"
+#include "records_to_vector-inl.h"
+#include "theoretical_peak_set.h"
+#include "compiler.h"
+#include "app/TideMatchSet.h"
+#define CHECK(x) GOOGLE_CHECK((x))
+
+DEFINE_int32(fifo_page_size, 1, "Page size for FIFO allocator, in megs");
+
+ActivePeptideQueue::ActivePeptideQueue(RecordReader* reader,
+                                       const vector<const pb::Protein*>&
+                                       proteins)
+  : reader_(reader),
+    proteins_(proteins),
+    theoretical_peak_set_(2000),   // probably overkill, but no harm
+    theoretical_b_peak_set_(200),  // probably overkill, but no harm
+    active_targets_(0), active_decoys_(0),
+    fifo_alloc_peptides_(FLAGS_fifo_page_size << 20),
+    fifo_alloc_prog1_(FLAGS_fifo_page_size << 20),
+    fifo_alloc_prog2_(FLAGS_fifo_page_size << 20) {
+  CHECK(reader_->OK());
+  compiler_prog1_ = new TheoreticalPeakCompiler(&fifo_alloc_prog1_);
+  compiler_prog2_ = new TheoreticalPeakCompiler(&fifo_alloc_prog2_);
+  peptide_centric_ = false;
+  elution_window_ = 0;
+}
+
+ActivePeptideQueue::~ActivePeptideQueue() {
+  deque<Peptide*>::iterator i = queue_.begin();
+  // for (; i != queue_.end(); ++i)
+  //   delete (*i)->PB();
+  fifo_alloc_peptides_.ReleaseAll();
+  fifo_alloc_prog1_.ReleaseAll();
+  fifo_alloc_prog2_.ReleaseAll();
+
+  delete compiler_prog1_;
+  delete compiler_prog2_;
+}
+
+// Compute the theoretical peaks of the peptide in the "back" of the queue
+// (i.e. the one most recently read from disk -- the heaviest).
+void ActivePeptideQueue::ComputeTheoreticalPeaksBack() {
+  theoretical_peak_set_.Clear();
+  Peptide* peptide = queue_.back();
+  peptide->ComputeTheoreticalPeaks(&theoretical_peak_set_, current_pb_peptide_,
+                                   compiler_prog1_, compiler_prog2_);
+}
+
+bool ActivePeptideQueue::isWithinIsotope(vector<double>* min_mass, vector<double>* max_mass, double mass, int* isotope_idx) {
+  for (int i = *isotope_idx; i < min_mass->size(); ++i) {
+    if (mass >= (*min_mass)[i] && mass <= (*max_mass)[i]) {
+      if (i > *isotope_idx) {
+        *isotope_idx = i;
+      }
+      return true;
+    }
+  }
+  return false;
+}
+
+int ActivePeptideQueue::SetActiveRange(vector<double>* min_mass, vector<double>* max_mass, double min_range, double max_range, vector<bool>* candidatePeptideStatus) {
+  //min_range and max_range have been introduced to fix a bug 
+  //introduced by m/z selection. see #222 in sourceforge
+  //this has to be true:
+  // min_range <= min_mass <= max_mass <= max_range
+
+  // queue front() is lightest; back() is heaviest
+  
+  // delete anything already loaded that falls below min_range
+  while (!queue_.empty() && queue_.front()->Mass() < min_range) {
+    Peptide* peptide = queue_.front();
+    //print hits in peptide-centric search
+    ReportPeptideHits(peptide);
+    peptide->spectrum_matches_array.clear();
+    vector<Peptide::spectrum_matches>().swap(peptide->spectrum_matches_array);
+    // would delete peptide's underlying pb::Peptide;
+    queue_.pop_front();
+//    delete peptide;
+  }
+  if (queue_.empty()) {
+    //cerr << "Releasing All\n";
+    fifo_alloc_peptides_.ReleaseAll();
+    fifo_alloc_prog1_.ReleaseAll();
+    fifo_alloc_prog2_.ReleaseAll();
+    //cerr << "Prog1: ";
+    //fifo_alloc_prog1_.Show();
+    //cerr << "Prog2: ";
+    //fifo_alloc_prog2_.Show();
+  } else {
+    Peptide* peptide = queue_.front();
+    // Free all peptides up to, but not including peptide.
+    fifo_alloc_peptides_.Release(peptide); 
+    peptide->ReleaseFifo(&fifo_alloc_prog1_, &fifo_alloc_prog2_);
+  }
+  
+  // Enqueue all peptides that are not yet queued but are lighter than
+  // max_range. For each new enqueued peptide compute the corresponding
+  // theoretical peaks. Data associated with each peptide is allocated by
+  // fifo_alloc_peptides_.
+  bool done = false;
+  if (queue_.empty() || queue_.back()->Mass() <= max_range) {
+    if (!queue_.empty()) {
+      ComputeTheoreticalPeaksBack();
+    }
+    while (!(done = reader_->Done())) {
+      // read all peptides lighter than max_range
+      reader_->Read(&current_pb_peptide_);
+      if (current_pb_peptide_.mass() < min_range) {
+        // we would delete current_pb_peptide_;
+        continue; // skip peptides that fall below min_range
+      }
+      Peptide* peptide = new(&fifo_alloc_peptides_)
+        Peptide(current_pb_peptide_, proteins_, &fifo_alloc_peptides_);
+      queue_.push_back(peptide);
+      if (peptide->Mass() > max_range) {
+        break;
+      }
+      ComputeTheoreticalPeaksBack();
+    }
+  }
+  // by now, if not EOF, then the last (and only the last) enqueued
+  // peptide is too heavy
+  assert(!queue_.empty() || done);
+  
+  // Set up iterator for use with HasNext(),
+  // GetPeptide(), and NextPeptide(). Return the number of enqueued peptides.
+ if (queue_.empty()) {
+    return 0;
+  }
+
+  iter_ = queue_.begin();
+  while (iter_ != queue_.end() && (*iter_)->Mass() < min_mass->front() ){
+    ++iter_;
+  }
+  
+  int* isotope_idx = new int(0);
+  end_ = iter_;
+  int active = 0;
+  active_targets_ = active_decoys_ = 0;
+  while (end_ != queue_.end() && (*end_)->Mass() < max_mass->back() ){
+    if (isWithinIsotope(min_mass, max_mass, (*end_)->Mass(), isotope_idx)) {
+      ++active;
+      candidatePeptideStatus->push_back(true);
+      if (!(*end_)->IsDecoy()) {
+        ++active_targets_;
+      } else {
+        ++active_decoys_;
+      }
+    } else {
+      candidatePeptideStatus->push_back(false);
+    }
+    ++end_;
+  }
+  delete isotope_idx;
+  if (active == 0) {
+    return 0;
+  }
+
+  return active;
+
+}
+
+// Compute the b ion only theoretical peaks of the peptide in the "back" of the queue
+// (i.e. the one most recently read from disk -- the heaviest).
+void ActivePeptideQueue::ComputeBTheoreticalPeaksBack() {
+  theoretical_b_peak_set_.Clear();
+  Peptide* peptide = queue_.back();
+  peptide->ComputeBTheoreticalPeaks(&theoretical_b_peak_set_);
+  b_ion_queue_.push_back(theoretical_b_peak_set_);
+}
+
+int ActivePeptideQueue::SetActiveRangeBIons(vector<double>* min_mass, vector<double>* max_mass, double min_range, double max_range, vector<bool>* candidatePeptideStatus) {
+    exact_pval_search_ = true;
+  // queue front() is lightest; back() is heaviest
+  
+  // delete anything already loaded that falls below min_range
+  while (!queue_.empty() && queue_.front()->Mass() < min_range) {
+    Peptide* peptide = queue_.front();
+    // would delete peptide's underlying pb::Peptide;
+    ReportPeptideHits(peptide);
+    peptide->spectrum_matches_array.clear();
+    vector<Peptide::spectrum_matches>().swap(peptide->spectrum_matches_array);
+    queue_.pop_front();
+    b_ion_queue_.pop_front();
+//    delete peptide;
+  }
+  if (queue_.empty()) {
+    fifo_alloc_peptides_.ReleaseAll();
+  } else {
+    Peptide* peptide = queue_.front();
+    // Free all peptides up to, but not including peptide.
+    fifo_alloc_peptides_.Release(peptide); 
+  }
+  
+  // Enqueue all peptides that are not yet queued but are lighter than
+  // max_range. For each new enqueued peptide compute the corresponding
+  // theoretical peaks. Data associated with each peptide is allocated by
+  // fifo_alloc_peptides_.
+  bool done;
+  if (queue_.empty() || queue_.back()->Mass() <= max_range) {
+    while (!(done = reader_->Done())) {
+      // read all peptides lighter than max_range
+      reader_->Read(&current_pb_peptide_);
+      if (current_pb_peptide_.mass() < min_range) {
+        // we would delete current_pb_peptide_;
+        continue; // skip peptides that fall below min_range
+      }
+      Peptide* peptide = new(&fifo_alloc_peptides_)
+        Peptide(current_pb_peptide_, proteins_, &fifo_alloc_peptides_);
+      queue_.push_back(peptide);
+      ComputeBTheoreticalPeaksBack();
+      if (peptide->Mass() > max_range) {
+        break;
+      }
+    }
+  }
+  // by now, if not EOF, then the last (and only the last) enqueued
+  // peptide is too heavy
+  assert(!queue_.empty() || done);
+
+  iter1_ = b_ion_queue_.begin();
+  iter_ = queue_.begin();
+  while (iter_ != queue_.end() && (*iter_)->Mass() < min_mass->front() ){
+    ++iter_;
+    ++iter1_;
+  }
+
+  int* isotope_idx = new int(0);
+  end_ = iter_;
+  end1_ = iter1_;
+  int active = 0;
+  active_targets_ = active_decoys_ = 0;
+  while (end_ != queue_.end() && (*end_)->Mass() < max_mass->back() ){
+    if (isWithinIsotope(min_mass, max_mass, (*end_)->Mass(), isotope_idx)) {
+      ++active;
+      candidatePeptideStatus->push_back(true);
+      if (!(*end_)->IsDecoy()) {
+        ++active_targets_;
+      } else {
+        ++active_decoys_;
+      }
+    } else {
+      candidatePeptideStatus->push_back(false);
+    }
+    ++end_;
+    ++end1_;
+  }
+  delete isotope_idx;
+  if (active == 0) {
+    return 0;
+  }
+  
+  return active;
+}
+
+int ActivePeptideQueue::CountAAFrequency(
+  double binWidth,
+  double binOffset,
+  double** dAAFreqN,
+  double** dAAFreqI,
+  double** dAAFreqC,
+  int** dAAMass
+) {
+
+    unsigned int i = 0;
+    unsigned int cntTerm = 0;
+    unsigned int cntInside = 0;
+    const unsigned int MaxModifiedAAMassBin = 2000 / binWidth;   //2000 is the maximum size of a modified amino acid 
+    unsigned int* nvAAMassCounterN = new unsigned int[MaxModifiedAAMassBin];   //N-terminal amino acids
+    unsigned int* nvAAMassCounterC = new unsigned int[MaxModifiedAAMassBin];   //C-terminal amino acids
+    unsigned int* nvAAMassCounterI = new unsigned int[MaxModifiedAAMassBin];   //inner amino acids in the peptides
+    memset(nvAAMassCounterN, 0, MaxModifiedAAMassBin * sizeof(unsigned int));
+    memset(nvAAMassCounterC, 0, MaxModifiedAAMassBin * sizeof(unsigned int));
+    memset(nvAAMassCounterI, 0, MaxModifiedAAMassBin * sizeof(unsigned int));
+
+    while (!(reader_->Done())) { // read all peptides in index
+      reader_->Read(&current_pb_peptide_);
+      Peptide* peptide = new(&fifo_alloc_peptides_) Peptide(current_pb_peptide_, proteins_, &fifo_alloc_peptides_);
+
+      double* dAAResidueMass = peptide->getAAMasses(); //retrieves the amino acid masses, modifications included
+
+      int nLen = peptide->Len(); //peptide length
+      ++nvAAMassCounterN[(unsigned int)(dAAResidueMass[0] / binWidth + 1.0 - binOffset)];
+      for (i = 1; i < nLen-1; ++i) {  
+        ++nvAAMassCounterI[(unsigned int)(dAAResidueMass[i] / binWidth + 1.0 - binOffset)];
+        ++cntInside;
+      } 
+      ++nvAAMassCounterC[(unsigned int)(dAAResidueMass[nLen - 1] / binWidth + 1.0 - binOffset)];
+      ++cntTerm;
+
+      delete[] dAAResidueMass;
+      fifo_alloc_peptides_.ReleaseAll();
+    }
+
+  //calculate the unique masses
+  unsigned int uiUniqueMasses = 0;
+  for (i = 0; i < MaxModifiedAAMassBin; ++i) {
+    if (nvAAMassCounterN[i] || nvAAMassCounterI[i] || nvAAMassCounterC[i]) {
+      ++uiUniqueMasses;
+    }
+  }
+
+  //calculate the unique amino acid masses
+  *dAAMass = new int[uiUniqueMasses];     //a vector for the unique (integerized) amino acid masses present in the sample
+  *dAAFreqN = new double[uiUniqueMasses]; //a vector for the amino acid frequencies at the N-terminus
+  *dAAFreqI = new double[uiUniqueMasses]; //a vector for the amino acid frequencies inside the peptide
+  *dAAFreqC = new double[uiUniqueMasses]; //a vector for the amino acid frequencies at the C-terminus
+  unsigned int cnt = 0;
+  for (i = 0; i < MaxModifiedAAMassBin; ++i) {
+    if (nvAAMassCounterN[i] || nvAAMassCounterI[i] || nvAAMassCounterC[i]) {
+      (*dAAFreqN)[cnt] = (double)nvAAMassCounterN[i] / cntTerm;
+      (*dAAFreqI)[cnt] = (double)nvAAMassCounterI[i] / cntInside;
+      (*dAAFreqC)[cnt] = (double)nvAAMassCounterC[i] / cntTerm;
+      (*dAAMass)[cnt] = i;
+      cnt++;
+    }
+  }
+
+  delete[] nvAAMassCounterN;
+  delete[] nvAAMassCounterI;
+  delete[] nvAAMassCounterC;
+  return uiUniqueMasses;
+}
+
+void ActivePeptideQueue::ReportPeptideHits(Peptide* peptide) {
+    if (!peptide_centric_) {
+      return;
+    }
+
+    current_peptide_ = peptide;
+    TideMatchSet matches(peptide, highest_mz_);
+    matches.exact_pval_search_ = exact_pval_search_;
+    matches.elution_window_ = elution_window_;
+
+    if (!output_files_) { //only tab-delimited output is supported
+        matches.report(target_file_, decoy_file_, top_matches_,
+                       this, proteins_, *locations_, compute_sp_);
+    }
+}
+
diff --git a/src/app/tide/active_peptide_queue.h b/src/app/tide/active_peptide_queue.h
new file mode 100644
index 0000000..78b7ed2
--- /dev/null
+++ b/src/app/tide/active_peptide_queue.h
@@ -0,0 +1,158 @@
+// Benjamin Diament
+//
+// An ActivePeptideQueue is constructed with a file of peptides of
+// non-decreasing neutral mass, and a correpsonding set of proteins. With
+// successive call to SetActiveRange(min_mass, max_mass) the ActivePeptideQueue
+// reads in peptides and initializes them. It also discards any peptides in 
+// memory lighter than min_mass.
+//
+// The ActivePeptideQueue maintains in memory a window of peptides that fall
+// within  a given mass range. The window to maintain (the "active peptides")
+// is set by a call to SetActiveRange(). Successive values
+// of min_mass and max_mass must be non-decreasing. After the call to
+// SetActiveRange() the client may use the iterator interface HasNext() and
+// NextPeptide() to iterate over the window. The client may also use
+// GetPeptide() to get a specific peptide in the window.
+
+#include <deque>
+#include "peptides.pb.h"
+#include "peptide.h"
+#include "theoretical_peak_set.h"
+#include "fifo_alloc.h"
+#include "spectrum_collection.h"
+#include "io/OutputFiles.h"
+
+//#include "sp_scorer.h"
+#ifndef ACTIVE_PEPTIDE_QUEUE_H
+#define ACTIVE_PEPTIDE_QUEUE_H
+
+class TheoreticalPeakCompiler;
+
+class ActivePeptideQueue {
+ public:
+  ActivePeptideQueue(RecordReader* reader,
+            const vector<const pb::Protein*>& proteins);
+
+  ~ActivePeptideQueue();
+
+  bool isWithinIsotope(vector<double>* min_mass, vector<double>* max_mass, double mass, int* isotope_idx);
+  
+  // See above for usage and .cc for implementation details.
+  int SetActiveRange(vector<double>* min_mass, vector<double>* max_mass, double min_range, double max_range, vector<bool>* candidatePeptideStatus);
+  int SetActiveRangeBIons(vector<double>* min_mass, vector<double>* max_mass, double min_range, double max_range, vector<bool>* candidatePeptideStatus);
+
+  bool HasNext() const { return iter_ != end_; }
+  Peptide* NextPeptide() { return *iter_; }
+  const Peptide* GetPeptide(int back_index) const {
+    return peptide_centric_ ? current_peptide_ : *(end_ - back_index);
+  }
+  void SetBinSize(double binWidth, double binOffset) {
+    theoretical_b_peak_set_.binWidth_ = binWidth;
+    theoretical_b_peak_set_.binOffset_ = binOffset;
+  }
+
+  deque<TheoreticalPeakSetBIons> b_ion_queue_;
+  deque<TheoreticalPeakSetBIons>::const_iterator iter1_, end1_;
+ 
+  int CountAAFrequency(double binWidth, double binOffset, double** dAAFreqN,
+                       double** dAAFreqI, double** dAAFreqC, int** dAAMass);
+  
+  int ActiveTargets() const { return active_targets_; }
+  int ActiveDecoys() const { return active_decoys_; }
+
+  void ReportPeptideHits(Peptide* peptide);
+  void SetOutputs(OutputFiles* output_files, const vector<const pb::AuxLocation*>* locations, int top_matches,
+                  bool compute_sp, ofstream* target_file, ofstream* decoy_file, double highest_mz) {
+      locations_ = locations;
+      output_files_ = output_files;
+      top_matches_ = top_matches;
+      compute_sp_ = compute_sp;
+      target_file_ = target_file;
+      decoy_file_ = decoy_file;
+      highest_mz_ = highest_mz;
+  }
+  void setPeptideCentric(bool peptide_centric) {
+    peptide_centric_ = peptide_centric;
+  }
+  
+  void setElutionWindow(int elution_window) {
+    elution_window_ = elution_window;
+  }
+  // iter_ points to the current peptide. Client access is by HasNext(),
+  // GetPeptide(), and NextPeptide(). end_ points just beyond the last active
+  // peptide.
+  deque<Peptide*>::const_iterator iter_, end_;
+  
+//  const ProteinVec& proteins_;
+ private:
+  const vector<const pb::AuxLocation*>* locations_;
+  OutputFiles* output_files_;
+  int top_matches_;
+  bool compute_sp_;
+  ofstream* target_file_;
+  ofstream* decoy_file_;
+  double highest_mz_;
+  Peptide* current_peptide_;
+  bool exact_pval_search_;
+  bool peptide_centric_;
+  int elution_window_;
+
+
+//  Spectrum* spectrum_;
+  // IMPLEMENTATION DETAILS
+
+  // See .cc file.
+  void ComputeTheoreticalPeaksBack();
+  void ComputeBTheoreticalPeaksBack();
+
+  RecordReader* reader_;
+  pb::Peptide current_pb_peptide_;
+
+  // All amino acid sequences from which the peptides are drawn.
+  const vector<const pb::Protein*>& proteins_; 
+
+  // Workspace for computing theoretical peaks for a single peptide.
+  // Gets reused for each new peptide.
+  ST_TheoreticalPeakSet theoretical_peak_set_;
+  TheoreticalPeakSetBIons theoretical_b_peak_set_;
+  
+  // The active peptides. Lighter peptides are enqueued before heavy ones.
+  // queue_ maintains only the peptides that fall within the range specified
+  // by the last call to SetActiveRange().
+  deque<Peptide*> queue_;
+
+  // Set by most recent call to SetActiveRange()
+  double min_mass_, max_mass_;
+
+  // While we maintain a window of active peptides, we allocate and relase them
+  // on a first-in, first-out basis. We use FifoAllocators 
+  // (see fifo_alloc.{h,cc}) to manage memory efficiently for this usage 
+  // pattern. As we read in peptides and compute the theoretical peaks, we
+  // use compiler_prog1 and compiler_prog2 to generate code on the fly for
+  // taking dot products with the theoretical peak set for each peptide. 
+  // FifoAllocators allow us to execute the code thus generated,
+  // since they set the proper permissions. The set of theoretical peaks for 
+  // "dotting" with charge 1 and charge 2 spectra, have different
+  // FifoAllocators and TheoreticalPeakCompilers.
+  FifoAllocator fifo_alloc_peptides_;
+  FifoAllocator fifo_alloc_prog1_;
+  FifoAllocator fifo_alloc_prog2_;
+  TheoreticalPeakCompiler* compiler_prog1_;
+  TheoreticalPeakCompiler* compiler_prog2_;
+
+  // Number of targets and decoys in active range
+  int active_targets_, active_decoys_;
+};
+
+/*
+CONSIDER:
+Make 3 subclasses:
+  Read-as-you-go (below)
+  Preread into memory (as current operation)
+  Threaded reads (!!)
+
+pb::Peptide* pb_peptide = new pb::Peptide;
+CHECK(reader_->Read(pb_peptide));
+!reader_->Done()
+*/
+#endif //ACTIVE_PEPTIDE_QUEUE_H
diff --git a/src/app/tide/cmake_install.cmake b/src/app/tide/cmake_install.cmake
new file mode 100644
index 0000000..82e33ea
--- /dev/null
+++ b/src/app/tide/cmake_install.cmake
@@ -0,0 +1,34 @@
+# Install script for directory: /data/TeamCity/buildAgent/work/779d99b0241b2175/src/app/tide
+
+# Set the install prefix
+IF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+  SET(CMAKE_INSTALL_PREFIX "/usr/local")
+ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+  IF(BUILD_TYPE)
+    STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+  ELSE(BUILD_TYPE)
+    SET(CMAKE_INSTALL_CONFIG_NAME "Release")
+  ENDIF(BUILD_TYPE)
+  MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+
+# Set the component getting installed.
+IF(NOT CMAKE_INSTALL_COMPONENT)
+  IF(COMPONENT)
+    MESSAGE(STATUS "Install component: \"${COMPONENT}\"")
+    SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+  ELSE(COMPONENT)
+    SET(CMAKE_INSTALL_COMPONENT)
+  ENDIF(COMPONENT)
+ENDIF(NOT CMAKE_INSTALL_COMPONENT)
+
+# Install shared libraries without execute permission?
+IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+  SET(CMAKE_INSTALL_SO_NO_EXE "0")
+ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+
diff --git a/src/app/tide/compiler.h b/src/app/tide/compiler.h
new file mode 100644
index 0000000..ed960f2
--- /dev/null
+++ b/src/app/tide/compiler.h
@@ -0,0 +1,208 @@
+// Benjamin Diament
+
+// We want to be able to compute a dot product between a theoretical peak set
+// and an observed peak set. Under the assumption (borne out by use cases seen
+// in many test sets) that the same peptide may be a candidate for many
+// different observed spectra, we generate machine code, on the fly, for taking
+// the dot product between a fixed theoretical peak set and a variable observed
+// peak set. 
+//
+// That is, the generated code is specific to the theoretical peak set, but not
+// to the observed peak set. A program is generated for a given peptide's
+// theoretical peak set and remains fixed. This program may be run on many
+// different inputs representing many different observed spectra.  The input to
+// the generated program consists of the cached vectors for an observed peak set
+// (as described in spectrum_preprocess.h).
+//
+// The generated program has a very simple form: it simply adds together certain
+// specific cache entries specified by an index, and subtracts others. The
+// correct cache index is given by a specific theoretical peak. The cache
+// contents will have been determined during spectrum preprocessing (see
+// spectrum_preprocess.h).
+//
+// The programs for all peptides in the ActivePeptideQueue appear
+// consecutively in memory, (but see caveat about FifoAllocator below) and are
+// all run, one right after the other, on the same input.  The input is a
+// buffer pointing to the cache for the observed spectrum. Each program writes
+// an entry to an output buffer with a pair (score, counter).  A counter is
+// initialized with the number of candidate peptides to score.
+//
+// The generated code is roughly equivalent to the following C code (the array
+// indices are for illustration, the actual values are determined by the code
+// generator for the particluar candidate peptide's theoretical peak set):
+//
+//    *outputbuf++ = cache[72] + cache[195] - cache[546] + ...
+//    *outputbuf++ = counter;
+//    if (--counter == 0) return;
+//    *outputbuf++ = cache[90] + cache[108] + cache[125] + ...
+//    *outputbuf++ = counter;
+//    if (--counter == 0) return;
+//    *outputbuf++ = cache[32]] - cache[42] - cache[321] + ...
+//    *outputbuf++ = counter;
+//    if (--counter == 0) return;
+//    ...
+//
+// As new peptides enter the ActivePeptideQueue the above program is extended.
+// As "older" (lighter) peptides are dequeued and discarded corresponding
+// early lines of the generated program are discarded. Each Peptide maintains
+// a pointer to begining of its corresponding line of generated code. A
+// FifoAllocator manages memory for the generated instructions. When the end
+// of a FifoAllocator page is reached, a jump instruction is inserted to
+// continue execution at the next FifoAllocator page.
+//
+// The compiler here generates x86 code, and assumes cache entries are 32-bit
+// integers. Each program assumes the following upon entry:
+//
+//    Register ECX contains the counter i.e. the number of peptides yet to be
+//    scored.  When ECX = 0 control returns to the caller.
+//
+//    Register EDI (RDI on 64-bit machines) points to a buffer where the
+//    output of the current program will go (outputbuf in the illustrative C
+//    code above).
+//
+//    Register EDX points to the cached vectors for an observed peak set
+//    (cache in the illustrative C code above). 
+//
+// For illustration the first three lines of the above C code would be compiled as follows:
+//
+//    mov (%edx+288), %eax // EAX = cache[72] (since 288 == 72 * 4)
+//    add (%edx+780), %eax // EAX += cache[195] (since 780 == 195 * 4)
+//    sub (%edx+2184), %eax // EAX -= cache[546] (since 2184 == 546 * 4)
+//    ...
+//    stosl // equivalent to mov %eax, (%edi); inc %edi; (*outputbuf++=%eax)
+//    mov %ecx, %eax
+//    stosl // equivalent to mov %eax, (%edi); inc %edi; (*outputbuf++=%ecx)
+//    loop +1 // equivalent to dec %ecx; if (ecx != 0) skip one instruction
+//    ret
+//    ... (next program here)
+
+#ifndef COMPILER_H
+#define COMPILER_H
+
+#include <stdint.h>
+
+class TheoreticalPeakCompiler {
+ public:
+  explicit TheoreticalPeakCompiler(FifoAllocator* fifo_alloc) 
+    : fifo_alloc_(fifo_alloc), last_alloc_end_(NULL) {
+      // fifo_alloc_ will make room for generated programs.
+  }
+
+  void* Init(int pos_size, int neg_size) {
+    // Init() gets called once per candidate peptide.
+    // pos_size is the number of cache entries to be added together, neg_size
+    // is the number to be subtracted.
+    // add or sub instructions take six bytes. The coda (containing the
+    // storage of results etc.) takes seven bytes.
+    int total_size = 6*(pos_size + neg_size) + 7;
+    pos_ = (unsigned char*) fifo_alloc_->New(total_size); 
+    // last_alloc_end points just beyond the last allocated program. By the
+    // end of this block, we will ensure that there is enough room for a five
+    // byte jump instruction in case current program didn't end up being
+    // allocated right after the old.
+    if (pos_ == last_alloc_end_) { // Are programs consecutive?
+      last_alloc_end_ = pos_ + total_size;
+      pos_ -= jmp_size; // Last prog. didn't need room for jump instruction.
+    } else { // Progs. not consecutive. Old prog. needs to jump to new prog.
+       // Above allocation wasn't enough. Need room for jump.
+      fifo_alloc_->Unalloc(total_size);
+      total_size += jmp_size;
+      pos_ = (unsigned char*) fifo_alloc_->New(total_size);
+      if (last_alloc_end_ != NULL)
+        AddJump(last_alloc_end_ - jmp_size, pos_);
+      last_alloc_end_ = pos_ + total_size;
+    }
+    first_ = true; // first theoretical peak gets handled a bit differently. 
+    return pos_; 
+  }
+
+  // The following three functions assume peaks unsorted, and check that each peak
+  // doesn't point past end of cache.
+    
+  void AddPositive(const TheoreticalPeakArr& peaks) {
+    // Write an add instruction for each entry in peaks.
+    int end = MaxBin::Global().CacheBinEnd() * NUM_PEAK_TYPES;
+    for (int i = 0; i < peaks.size(); ++i)
+      if (peaks[i].Code() < end)
+        AddPositive(peaks[i].Code());
+  }
+
+  void AddPositive(const google::protobuf::RepeatedField<int>& peaks) {
+    // Write an add instruction for each entry in peaks.
+    int end = MaxBin::Global().CacheBinEnd() * NUM_PEAK_TYPES;
+    int total = 0;
+    google::protobuf::RepeatedField<int>::const_iterator i = peaks.begin();
+    for (; i != peaks.end(); ++i) {
+      if ((total += *i) >= end)
+        break;
+      AddPositive(total);
+    }
+  }
+
+  void AddNegative(const google::protobuf::RepeatedField<int>& peaks) {
+    // Write a sub instruction for each entry in peaks.
+    int end = MaxBin::Global().CacheBinEnd() * NUM_PEAK_TYPES;
+    int total = 0;
+    google::protobuf::RepeatedField<int>::const_iterator i = peaks.begin();
+    for (; i != peaks.end(); ++i) {
+      if ((total += *i) >= end)
+        break;
+      AddNegative(total);
+    }
+  }
+
+  void Done() {
+    // Write the coda instructions which will store results and update
+    // counter. See comments above.
+    // Poke machine code into the next 7 bytes at pos_.
+    // (int*) pos_ must be a four byte pointer!
+    *((int*) pos_) = 0xc889ab; // stosl; mov %ecx, %eax
+    *((int*) (pos_+3)) = 0xc301e2ab; // stosl; loop +1; ret
+    assert(pos_ + 7 + jmp_size <= last_alloc_end_); // There should still be room
+                                                    // for a jump if needed
+    last_alloc_end_ = pos_ + 7 + jmp_size;
+    fifo_alloc_->Unalloc(last_alloc_end_);
+  }
+
+ private:
+  // Various x86 instructions we need.
+  static const uint16_t add_to_eax_at_edx_plus = 33283;
+  static const uint16_t mov_to_eax_at_edx_plus = 33419;
+  static const uint16_t sub_from_eax_at_edx_plus = 33323;
+  static const unsigned char ret = 195;
+  static const unsigned char jmp_relative = 233;
+
+  static const int jmp_size = 5;
+
+  void AddPositive(int peak) {
+    if (first_) { // First theoretical peak uses a 'mov' rather than an 'add'
+      *((uint16_t*) pos_) = mov_to_eax_at_edx_plus;
+    } else {
+      *((uint16_t*) pos_) = add_to_eax_at_edx_plus;
+    }
+    first_ = false;
+    pos_ += 2;
+    *((int*) pos_) = peak << 2; // Store 4 * the peak position.
+    pos_ += 4;
+  }
+
+  void AddNegative(int peak) {
+    *((uint16_t*) pos_) = sub_from_eax_at_edx_plus;
+    pos_ += 2;
+    *((int*) pos_) = peak << 2; // Store 4 * the peak position.
+    pos_ += 4;
+  }
+
+  static void AddJump(unsigned char* pos, unsigned char* whereto) {
+    int diff = whereto - (pos + jmp_size);
+    *pos++ = jmp_relative;
+    *((int*) pos) = diff;
+  }
+
+  FifoAllocator* fifo_alloc_;
+  unsigned char* last_alloc_end_;
+  unsigned char* pos_; // "cursor position" as we write out instructions.
+  bool first_;
+};
+
+#endif // COMPILER_H
diff --git a/src/app/tide/crux_sp_spectrum.cc b/src/app/tide/crux_sp_spectrum.cc
new file mode 100644
index 0000000..6afba4f
--- /dev/null
+++ b/src/app/tide/crux_sp_spectrum.cc
@@ -0,0 +1,283 @@
+// Tahmina Baker
+//
+// This file contains implementations for the classes defined in 
+// crux_sp_spectrum.h. Please see the header file for details.
+
+#include <math.h>
+#include "crux_sp_spectrum.h"
+
+SpSpectrum::SpSpectrum(const Spectrum& spectrum, int charge, double max_mz) 
+  : beta_(0.075), max_intensity_(0.0), last_idx_(0) {
+  max_mz_ = MassConstants::mass2bin(max_mz);  
+  intensity_array_ = new double[IntensityArraySize()];
+  memset(intensity_array_, 0, sizeof(double)*IntensityArraySize());
+
+  PreprocessSpectrum(spectrum, charge);
+}
+
+SpSpectrum::~SpSpectrum() {
+  delete [] intensity_array_;
+}
+
+void SpSpectrum::PreprocessSpectrum(const Spectrum& spectrum, int charge) {
+  double precursor_mz = spectrum.PrecursorMZ();
+  double experimental_mass_cut_off = precursor_mz*charge + 50;
+  double max_intensity = 0;
+
+  for (int i = 0; i < spectrum.Size(); ++i) {
+    double peak_location = spectrum.M_Z(i);
+
+    // skip all peaks larger than experimental mass
+    if(peak_location > experimental_mass_cut_off)
+      continue;
+
+    // skip all peaks within precursor ion mz +/- 15
+    if((peak_location < precursor_mz + 15) &&  
+       (peak_location > precursor_mz - 15))
+      continue;
+    
+    // map peak location to bin
+    int bin = MassConstants::mass2bin(peak_location);
+    double intensity = sqrt(spectrum.Intensity(i));
+
+    // set intensity in array with correct mz, only if max peak in the bin
+    if(intensity_array_[bin] < intensity) {
+      intensity_array_[bin] = intensity;
+      
+      // check if max_intensity
+      if(intensity > max_intensity)
+        max_intensity = intensity;
+    }
+    
+    // set last idx to the largest added peak mz value
+    if(last_idx_ < bin)
+      last_idx_ = bin;
+  }
+
+  // set max_intensity
+  max_intensity_ = max_intensity;
+
+  NormalizeIntensityArray(100);
+
+  SmoothPeaks();
+
+  ZeroPeaks();
+
+  // Sequest28 modifications.
+  // Determine number of top peaks to select based on the experimental mass
+  // In Sequest27, the top peaks were always selected as 200.
+  // Keep top ions of square-root(16*experimental mass) ranking, but not 
+  // exceeding 200 ions.
+  int top_bins = 200;
+  if(experimental_mass_cut_off-50 < 3200){
+    // top bins are sqrt of 16* experimental mass
+    top_bins = (int)(sqrt((experimental_mass_cut_off-50)*16) + 0.5); 
+    // however cannot exceed 200
+    if(top_bins > 200){
+      top_bins = 200;
+    }
+  }
+  else{
+    top_bins = (int)((experimental_mass_cut_off-50)/14.00);
+  }
+
+  // extract the top ions
+  ExtractPeaks(top_bins);
+
+  // equalize peaks
+  EqualizePeaks();
+}
+
+void SpSpectrum::NormalizeIntensityArray(double threshold) {
+    // return if max_intensity is 0
+    if(max_intensity_ < 0.00001)
+      return;
+ 
+    // normalize all peaks
+    for(int mz_idx = 0; mz_idx < last_idx_ + 1; ++mz_idx) {
+      intensity_array_[mz_idx] = intensity_array_[mz_idx] * 
+                                    threshold / max_intensity_;
+    }
+}
+
+void SpSpectrum::SmoothPeaks() {
+  // create a new array, which will replace the original intensity array
+  double* new_array = new double[IntensityArraySize()];
+  memset(new_array, 0, sizeof(double)*IntensityArraySize());
+
+  // iterate over all peaks
+  for(int idx = 2; idx < IntensityArraySize()-2; ++idx) {
+    // smooooth
+    new_array[idx] = (intensity_array_[idx-2] + 4*intensity_array_[idx-1] + 
+                      6*intensity_array_[idx] + 4*intensity_array_[idx+1] +
+                      intensity_array_[idx+2])/16;
+
+    // set last idx in the array
+    if(last_idx_ < idx && new_array[idx] == 0) {
+      last_idx_ = idx -1;
+      break;
+    }
+  }
+
+  delete [] intensity_array_;
+  intensity_array_ = new_array;
+}
+
+void SpSpectrum::ZeroPeaks() {
+  // create a new array, which will replace the original intensity array
+  double* new_array = new double[IntensityArraySize()];
+  memset(new_array, 0, sizeof(double)*IntensityArraySize());
+  
+  // step 1,
+  ZeroPeakMeanStdev(1, new_array);
+
+  // step 2,
+  ZeroPeakMeanStdev(2, new_array);
+
+  delete[] intensity_array_;
+  intensity_array_ = new_array;
+}
+
+void SpSpectrum::ExtractPeaks(int top_rank) {
+  // copy all peaks to temp_array
+  double* temp_array = new double[IntensityArraySize()];
+  memset(temp_array, 0, sizeof(double)*IntensityArraySize());
+  int temp_idx = 0;
+  for(int idx = 0; idx < IntensityArraySize(); ++idx){
+    if(intensity_array_[idx] > 0){
+      temp_array[temp_idx] = intensity_array_[idx];
+      ++temp_idx;
+    }
+  }
+  
+  // if there's over top_rank peaks, keep only top_rank peaks
+  // quick sort
+  QuickSort(temp_array, temp_idx);
+  
+  // set max and cut_off
+  double max_intensity = temp_array[0];
+  double cut_off = temp_array[top_rank-1];
+  
+  // remove peaks bellow cut_off 
+  // also, normalize peaks to max_intensity to 100
+  for(int idx = 0; idx < IntensityArraySize(); ++idx) {
+    if(intensity_array_[idx] > 0) {
+      if(intensity_array_[idx] < cut_off) {
+        // If it's below cutoff, remove peak
+        intensity_array_[idx] = 0;
+      } else {
+        // nomalize peak to max 100
+        intensity_array_[idx] = intensity_array_[idx] / max_intensity * 100;
+      }
+    }
+  }
+  
+  delete [] temp_array;
+}
+
+void SpSpectrum::EqualizePeaks()
+{
+  // equalize peaks to it's greatest intensity
+  // should use array size, but sequest seems to have a bug
+  // last idx is thus, modification to fit sequest
+  // consequences are we will not equalize the very last peak.
+  double max_intensity = 0;
+  int end_idx = 0;
+  int last_idx = IntensityArraySize();
+  for(int idx = 0; idx < last_idx; ++idx) {
+    // are we inside a continous block?
+    if(intensity_array_[idx] > 0){
+      max_intensity = intensity_array_[idx];
+      end_idx = idx + 1;
+      
+      // loop to find the largest peak in the continuous block
+      while(end_idx < last_idx && intensity_array_[end_idx] > 0) {
+        // reset max intensity
+        if(intensity_array_[end_idx] > max_intensity)
+           max_intensity = intensity_array_[end_idx];
+        
+        ++end_idx;
+      }
+      
+      // set all peaks in block to max_intensity
+      for(; idx < end_idx; ++idx)
+        intensity_array_[idx] = max_intensity;
+    }
+  }
+}
+
+double SpSpectrum::GetIntensityArrayMean(int peak_idx, int* peak_count) {
+  // set upper bound
+  int end_idx = peak_idx + 50;
+  if(peak_idx + 50 >= IntensityArraySize())
+    end_idx = IntensityArraySize()-1;
+  
+  // set start index
+  int start_idx = peak_idx - 50;
+  if(peak_idx - 50 <= 0)
+    start_idx = 0;
+  
+  // sum up the intensities
+  double total_intensity = 0;
+  for(; start_idx <= end_idx; ++start_idx) {
+    ++*peak_count;
+    total_intensity += intensity_array_[start_idx];
+  }
+
+  // BUG! it should divide by 101 but Sequest uses 100
+  return (total_intensity / (*peak_count-1));
+}
+
+double SpSpectrum::GetIntensityArrayStdev(int peak_idx, double mean, 
+                                        int peak_count) {
+  // set upper bound
+  int end_idx = peak_idx + 50;
+  if(peak_idx + 50 >= IntensityArraySize())
+    end_idx = IntensityArraySize()-1;
+
+  // set start index
+  int start_idx = peak_idx - 50;
+  if(peak_idx - 50 <= 0)
+    start_idx = 0;
+  
+  // sum up the intensities
+  double variance = 0;
+  double dev = 0;
+  for(; start_idx <= end_idx; ++start_idx){
+    // sum up all deviations squared
+    dev = intensity_array_[start_idx] - mean;
+    variance += (dev*dev);
+  }
+  
+  // return the stdev
+  return sqrt(variance/peak_count);
+}
+
+void SpSpectrum::ZeroPeakMeanStdev(int step, double* new_array) {
+  // iterate over all peaks
+  double mean = 0;
+  double stdev = 0;
+  int peak_count = 0;
+  for(int idx = 0; idx < IntensityArraySize(); ++idx){
+    peak_count = 0;
+  
+    // get mean
+    mean = GetIntensityArrayMean(idx, &peak_count);
+
+    // get stdev
+    stdev = GetIntensityArrayStdev(idx, mean, peak_count);
+    
+    // iterate over all positions and extract peaks
+    if(intensity_array_[idx] > (mean + step*stdev)) {
+      new_array[idx] = intensity_array_[idx] - (mean - stdev);
+
+      // reset the last idx
+      if(last_idx_ < idx)
+        last_idx_ = idx;
+
+      // for only step 1, zero out original peak
+      if(step == 1)
+        intensity_array_[idx] = 0;
+    }
+  }
+}
diff --git a/src/app/tide/crux_sp_spectrum.h b/src/app/tide/crux_sp_spectrum.h
new file mode 100644
index 0000000..4c30eea
--- /dev/null
+++ b/src/app/tide/crux_sp_spectrum.h
@@ -0,0 +1,149 @@
+// Tahmina Baker
+//
+// The code in this file is pretty much a direct copy  of the 2009 version of
+// crux's "create_intensity_array_sp" and related functions in scorer.c.
+//
+// The code preprocesses a spectrum for sp calculations as follows:
+// 1. Create an intensity array for the spectrum to be indexed via m/z bin
+// 2. Normalize the array so that maximum peak equals 100
+// 3. Smooth the peaks in the array
+// 4. Extract peaks that are larger than mean + #step*stdev into new array,
+//    zero out the peaks that have been extracted, repeat twice, then replace 
+//    old array with extracted peak array
+// 5. Extract peaks up to top rank peaks remove other peaks, do second 
+//    normalization on the top peaks back to max 100 intensity, and replace old
+//    array with normalized top peak array.
+// 6. Equalize all peaks in a continous region to the largest peak within the
+//    continous bins from left to right.
+//
+// The following major modifications were made when the code was ported over:
+// 1. Functions were renamed to follow Tide conventions. 
+//    E.g. "PreprocessSpectrum" performs the same function as crux's 
+//    "create_intensity_array_sp". 
+// 2. Crux uses the data structure SCORER_T to calculate different types of
+//    scores represented by SCORER_TYPE_T, whereas the code here is specific
+//    to sp calculations. The SpSpectrum class is equivalent to a crux SCORER_T
+//    struct of SCORER_TYPE_T=SP, with only the following subset of data: 
+//    sp_beta, sp_max_mz, intensity_array, max_intensity, last_idx.
+// 3. SpSpectrum is a private class that preprocesses a given spectrum on 
+//    creation using private methods, then ONLY exposes the pieces of 
+//    information needed by the creator. In crux, the static function 
+//    "create_intensity_array_sp" processes a given spectrum with other static
+//    helper functions, then populates an SCORER_T public struct.
+// 4. Tide stores spectrum peak information slightly differently than crux; 
+//    changes were made to the code to traverse peaks and access peak data.
+// 5. SpSpectrum::SmoothPeaks() is specific to SP calculations while crux's
+//    "smooth_peaks" function can handle various types of scores represented 
+//    by SCORER_TYPE_T.
+// 6. The "double" data type was used in place of crux's "FLOAT_T".
+
+
+#ifndef CRUX_SP_SPECTRUM_H
+#define CRUX_SP_SPECTRUM_H
+
+#include "mass_constants.h"
+#include "spectrum_collection.h"
+#include "spectrum_preprocess.h"
+#include "util/utils.h"
+
+
+class SpSpectrum {
+ public:
+  SpSpectrum(const Spectrum& spectrum, int charge, double max_mz);
+  ~SpSpectrum();
+
+  double Intensity(int index) const { return intensity_array_[index]; }
+  double Beta() const { return beta_; }
+  double TotalIonIntensity() {
+    double total_ion_intensity = 0.0;
+    for (int i = 0; i < IntensityArraySize(); i++)
+      total_ion_intensity += intensity_array_[i];
+    return total_ion_intensity;
+  }
+
+ private:
+
+  void PreprocessSpectrum(const Spectrum& spectrum, int charge);
+
+  // Normalizes array so that maximum peak equals threshold
+  void NormalizeIntensityArray(double threshold);
+
+  // Smooth all peaks in intensity array and replace the original array with 
+  // the newly smooothed array.
+  void SmoothPeaks();
+
+  // Zero and extract peaks: 
+  // Extract peaks that are larger than mean + #step*stdev into new array
+  // Zero out the peaks that have been extracted
+  // Repeat twice, then replace old array with extracted peak array
+  void ZeroPeaks();
+
+  // Keep only the peaks up to top rank peaks remove other peaks.
+  // Do second normalization on the top peaks back to max 100 intensity.
+  // Replace old array with normalized top peak array.
+  void ExtractPeaks(int top_rank);
+
+  // Equalize all peaks in a continous region to the largest peak within the
+  // continous bins from left to right
+  void EqualizePeaks();
+  
+  // Get the mean of intensity in array within +/- 50 mz of the working peak.
+  double GetIntensityArrayMean(int peak_idx, int* peak_count);
+
+  // Get the stdev of intensity in array within +/- 50 mz of the working peak
+  double GetIntensityArrayStdev(int peak_idx, double mean, int peak_count);
+
+  // Helper to "zero and extract peaks". The fact that a peak has removed will 
+  // affect the following peaks.
+  void ZeroPeakMeanStdev(int step, double* new_array);
+
+  int IntensityArraySize() {
+    return (int)max_mz_ + 1;
+  }
+
+  void SwapQuick(double* a, int idx, int jdx) {
+    double temp = 0;
+    temp = a[idx];
+    a[idx] = a[jdx];
+    a[jdx] = temp;
+  }
+   
+  int Random(int i, int j) {
+    return i + myrandom_limit(j-i+1);
+  }
+
+  void QuickSort(double a[], int left, int right) {
+    int last = left, i;
+
+    if (left >= right) return;
+    
+    SwapQuick(a, left, Random(left, right));
+    for (i = left + 1; i <= right; i++)
+      if (a[i] > a[left]) /// CHECK THIS!!
+        SwapQuick(a, ++last, i);
+    SwapQuick(a, left, last);
+    QuickSort(a, left, last-1);
+    QuickSort(a, last+1, right);
+  }
+
+  void QuickSort(double a[], int array_size) {
+    QuickSort(a, 0, array_size-1);
+  }
+  
+  // The beta variable = 0.075
+  double beta_; 
+  
+  // The max mz for the intensity array
+  double max_mz_; 
+
+  // Intensity array that can be indexed using the m/z bin
+  double* intensity_array_; 
+
+  // the max intensity in the intensity array
+  double max_intensity_; 
+
+  // the last index in the array, the data size of the array
+  int last_idx_; 
+};
+
+#endif // CRUX_SP_SPECTRUM_H
diff --git a/src/app/tide/fifo_alloc.cc b/src/app/tide/fifo_alloc.cc
new file mode 100644
index 0000000..4a36bac
--- /dev/null
+++ b/src/app/tide/fifo_alloc.cc
@@ -0,0 +1,172 @@
+// Benjamin Diament
+//
+// A FifoPage represents a large block of memory allocated at the system level.
+// We currently use mmap and munmap to get system memory.
+// FifoPage also contains a pointer to "next page" which induces a circular linked list
+// (i.e. the last page points to the first).
+// Schematically, we have the following,
+//
+//   FreePage1-->FreePage2-->...-->FreePageM-->UsedPage1-->UsedPage2-->...-->UsedPageN--+
+//     ^                                                                                |
+//     +-------------------------------------<------------------------------------------+
+//
+// current_page_ points to UsedPageN, and first_page_ points to UsedPage1.
+//
+// A system call to obtain new memory will occur whenever total allocations
+// exceed a page's worth. 
+// Pages become available for reuse when all contents are Release()'d.
+//
+// On Linux we use mmap to allocate memory and we mark the page as executable
+// to provide run-time compilation of dot product calculations.
+
+#include <sys/types.h>
+#ifdef _MSC_VER
+#include "mman.h"
+#else
+#include <sys/mman.h>
+#endif
+#include<stdlib.h>
+#include<assert.h>
+#include<iostream>
+#include "fifo_alloc.h"
+
+using namespace std;
+
+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+
+#ifdef MMAP_SENTINEL_CHECK
+#undef NASSERT
+#define SENTINEL_DATA_SIZE 100
+#define SENTINEL_VALUE 0xAF
+
+void FillSentinel(void* p, size_t size) {
+  memset(p, SENTINEL_VALUE, size);
+}
+
+void CheckSentinel(void* p, size_t size) {
+  for (size_t i = 0; i < size; ++i)
+    CHECK(((char *) p)[i] == (char) SENTINEL_VALUE);
+}
+
+void* FifoPage::GetPage(size_t size) {
+  // protections to allow exec (see above)
+  int mmap_prot_mode = PROT_READ | PROT_WRITE | PROT_EXEC;
+  // for sentinel data before and after
+  size_t size_with_sentinels = size + 2 * SENTINEL_DATA_SIZE;
+  void* p = mmap(0, size_with_sentinels, mmap_prot_mode, 
+                 MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+  if (p == NULL) {
+    cerr << "Failed to allocate FifoPage of size " << size << ". Aborting\n";
+    abort();
+  }
+  FillSentinel(p, SENTINEL_DATA_SIZE);
+  FillSentinel((char *) p + size + SENTINEL_DATA_SIZE, SENTINEL_DATA_SIZE);
+  void* tmp = (char *) p + SENTINEL_DATA_SIZE;
+  // return (char *) p + SENTINEL_DATA_SIZE;
+  cerr << "mmap'ed page at " << tmp << endl;
+  return tmp;
+}
+
+void FifoPage::DeletePage(void* page, size_t size) {
+  CheckSentinel((char *) page - SENTINEL_DATA_SIZE, SENTINEL_DATA_SIZE);
+  CheckSentinel((char *) page + size, SENTINEL_DATA_SIZE);
+  cerr << "munmap'ed " << page << endl;
+  munmap((char *) page - SENTINEL_DATA_SIZE, size + 2 * SENTINEL_DATA_SIZE);
+}
+#else // MMAP_SENTINEL_CHECK
+void* FifoPage::GetPage(size_t size) {
+  // protections to allow exec (see above)
+  int mmap_prot_mode = PROT_READ | PROT_WRITE | PROT_EXEC;
+  void* p = mmap(0, size, mmap_prot_mode, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+  if (p == NULL) {
+    cerr << "Failed to allocate FifoPage of size " << size << ". Aborting\n";
+    abort();
+  }
+  return p;
+}
+
+void FifoPage::DeletePage(void* page, size_t size) {
+  munmap(page, size);
+}
+#endif // MMAP_SENTINEL_CHECK
+
+void* FifoAllocator::FallbackNew(size_t amount) {    
+  // Check if a free page is already in our linked list.
+  FifoPage* free_page = current_page_->Next(); 
+  if (free_page == first_page_) {  // No free page in linked list
+    FifoPage* new_page = new FifoPage(page_size_);
+    current_page_->InsertPage(new_page);
+    current_page_ = new_page;
+  } else {
+    current_page_ = free_page;
+  }
+  assert(current_page_->Empty());
+
+  if (amount > page_size_) { // CONSIDER: eliminate this restriction.
+    cerr << "Requested " << amount << " bytes from FifoAllocator, "
+	 << "but page size is " << page_size_ << ". Aborting\n";
+    abort();
+    return NULL;
+  }
+
+  void* result = current_page_->New(amount);
+  assert(result != NULL);
+  return result;
+}
+
+void FifoAllocator::Release(void* first_used) {
+  // Release everything up to, but not including, first_used.
+  while (!first_page_->InPage(first_used)) {
+    if (first_page_ == current_page_) {
+      if (first_page_->AtEnd(first_used)) {
+	first_page_->Clear();
+	return;
+      }
+      // Show();
+      cerr << "Attempted release of address not in FifoAllocator range.\n";
+      abort();
+    }
+    first_page_->Clear();
+    first_page_ = first_page_->Next();
+  }
+  if (first_page_->AtEnd(first_used)) {
+    first_page_->Clear();
+    first_page_ = first_page_->Next();
+  }
+}
+
+void FifoAllocator::ReleaseAll() {
+  while (true) {
+    first_page_->Clear();
+    if (first_page_ == current_page_)
+      break;
+    first_page_ = first_page_->Next();
+  }
+}
+
+FifoAllocator::~FifoAllocator() {
+  FifoPage* page = current_page_;
+  do {
+    FifoPage* next = page->Next();
+    delete page;
+    page = next;
+  } while (page != current_page_);
+}
+
+void FifoAllocator::Show() {
+  FifoPage* page = first_page_;
+  while(true) {
+    page->Show();
+    if (page == current_page_)
+      break;
+    fprintf(stderr, " --> ");
+    page = page->Next();
+  }
+  fprintf(stderr, "\n");
+}
+
+#ifdef MEM_STATS
+size_t FifoAllocator::total_ = 0;
+#endif
diff --git a/src/app/tide/fifo_alloc.h b/src/app/tide/fifo_alloc.h
new file mode 100644
index 0000000..80d9e7c
--- /dev/null
+++ b/src/app/tide/fifo_alloc.h
@@ -0,0 +1,152 @@
+// Benjamin Diament
+//
+// Memory allocator for FIFO usage pattern: client may allocate arbitrarily 
+// sized blocks sequentially. A pointer p is returned to each new block.
+// Subsequently a call to Release(p) frees all allocations prior to (not including)
+// allocation of p. It's not possible to free blocks in any order other than that
+// in which they were allocated. This prevents fragmentation but is only appropriate
+// for FIFO usage patterns, e.g. data assocatied with a queue.
+// 
+// A page size, S, is supplied to the FifoAllocator constructor.
+// At most 2 * S extra memory will be allocated.
+//
+// Not thread safe! (TODO 254)
+//
+// Unalloc() allows you to deallocate the most recently allocated pointer.
+//
+// Example usage:
+// FifoAllocator alloc(1 << 20); // 1MB page size
+// void* a = alloc.New(15);  // Allocate 15 bytes
+// void* b = alloc.New(27000);  // Allocate 27000 bytes
+// void* c = alloc.New(150);  // Allocate 150 bytes
+// void* d = alloc.New(150);  // Allocate 150 bytes
+// void* e = alloc.New(150);  // Allocate 150 bytes
+// alloc.Release(c); // Release a and b, but preserve c, d, e.
+// alloc.Unalloc(e); // Free from e onward. (c, d still intact)
+
+#ifndef FIFO_ALLOC_H
+#define FIFO_ALLOC_H
+
+//#define MEM_STATS 1
+
+#include<assert.h>
+#include<stdio.h>
+
+// Used by FifoAllocator; probably not useful alone. See .cc file.
+class FifoPage {
+ public:
+  explicit FifoPage(size_t size)
+    : size_(size),
+    page_((char*) GetPage(size)),
+    end_(page_ + size_),
+    next_(this),
+    end_used_(page_),
+    last_amt_(0) {
+  }
+
+  ~FifoPage() { DeletePage(page_, size_); }
+
+  void Clear() { end_used_ = page_; }
+  bool Empty() const { return end_used_ == page_; }
+
+  void* New(size_t amount) {
+    assert(amount >= 0);
+    if (end_used_ + amount > end_)
+      return NULL;
+    void* pos = end_used_;
+    end_used_ += amount;
+    last_amt_ = amount;
+    return pos;
+  }
+
+  void Unalloc(size_t amount) {
+    assert(amount <= last_amt_);
+    last_amt_ -= amount;
+    end_used_ -= amount;
+  }
+
+  void Unalloc(void* pos) {
+    assert(pos <= end_used_);
+    Unalloc(end_used_ - (char*) pos);
+  }
+
+  void InsertPage(FifoPage* succ) {
+    succ->next_ = next_;
+    next_ = succ;
+  }
+
+  FifoPage* Next() { return next_; }
+
+  bool InPage(void* ptr) {
+    return ((char*) ptr >= page_ && (char*) ptr < end_used_);
+  }
+
+  bool AtEnd(void* ptr) {
+    return ((char*) ptr == end_used_);
+  }
+
+  // For debugging
+  void Show() {
+    fprintf(stderr, "page[%p, )%p %p]", page_, end_used_, end_);
+  }
+
+ private:
+  size_t size_;
+  char* page_;
+  char* end_;
+  FifoPage* next_;
+  char* end_used_;
+  size_t last_amt_;
+
+  static void* GetPage(size_t size);
+  static void DeletePage(void* page, size_t size);
+};
+
+
+class FifoAllocator {
+ public:
+  explicit FifoAllocator(size_t page_size) : page_size_(page_size) {
+    current_page_ = new FifoPage(page_size_);
+    first_page_ = current_page_;
+  }
+
+  ~FifoAllocator();
+
+  void* New(size_t amount) {
+#ifdef MEM_STATS
+    total_ += amount;
+#endif
+    void* result = current_page_->New(amount);
+    if (result != NULL)
+      return result;
+
+    // No more room in current page, get another page.
+    return FallbackNew(amount);
+  }
+
+  void Release(void* first_used);
+  void ReleaseAll();
+
+  void Unalloc(size_t amount) { current_page_->Unalloc(amount); }
+  void Unalloc(void* pos) { current_page_->Unalloc(pos); }
+
+  void Show();
+
+#ifdef MEM_STATS
+  static size_t Total() { return total_; }
+#endif
+
+ private:
+  // Called when current page full
+  void* FallbackNew(size_t amount);
+
+  size_t page_size_;
+  FifoPage* first_page_;
+  FifoPage* current_page_;
+
+#ifdef MEM_STATS
+  static size_t total_;
+#endif
+};
+
+#endif // FIFO_ALLOC_H
diff --git a/src/app/tide/fixed_cap_array.h b/src/app/tide/fixed_cap_array.h
new file mode 100644
index 0000000..ae32e86
--- /dev/null
+++ b/src/app/tide/fixed_cap_array.h
@@ -0,0 +1,80 @@
+// Benjamin Diament
+
+// Class to represent a sized array, but with constant capacity, for
+// speed. No bounds checking or other checking is performed.
+//
+// In FixedCapacityArray size_ always represents the client's interpretation
+// of the number of elements in the array while capacity supplied to Init()
+// never changes.
+// The vector<> template has the problem that if you shrink the size then the
+// the excess capacity will be freed. If later the array grows an allocation
+// is performed. I couldn't find another way around this inefficiency.
+// 
+// iterator supplied to match vector<> template usage.
+//
+// Init() will permit optional use of a FifoAllocator for allocation.
+
+#ifndef FIXED_CAP_ARRAY_H
+#define FIXED_CAP_ARRAY_H
+
+#include "fifo_alloc.h"
+
+template <class C>
+class FixedCapacityArray {
+ public:
+  explicit FixedCapacityArray(int capacity)
+    : data_(new C[capacity]), size_(0), del_(true) {
+  }
+
+  // must call Init before use
+  FixedCapacityArray() 
+    : data_(NULL), 
+    size_(0),
+    del_(true) {
+  }
+
+  void Init(int capacity) { data_ = new C[capacity]; }
+
+  void Init(FifoAllocator* fifo_alloc, int capacity) {
+    if (fifo_alloc == NULL) {
+      Init(capacity);
+      return;
+    }
+    void* buffer = fifo_alloc->New(capacity * sizeof(C));
+    data_ = (C*) buffer;
+    del_ = false;
+  }
+
+  ~FixedCapacityArray() { if (del_) delete[] data_; }
+  
+  void clear() { size_ = 0; }
+
+  bool empty() const { return size_ == 0; }
+
+  C operator[](int index) const { return data_[index]; }
+  C& operator[](int index) { return data_[index]; }
+
+  C* data() { return data_; }
+  int size() const { return size_; }
+  void set_size(int size) { size_ = size; }
+
+  void push_back(const C& elt) { data_[size_++] = elt; }
+  C back() { return data_[size_-1]; }
+
+  typedef C* iterator;
+  typedef const C* const_iterator;
+
+  iterator begin() { return data_; }
+  iterator end() { return data_ + size_; }
+  const_iterator begin() const { return data_; }
+  const_iterator end() const { return data_ + size_; }
+
+ private:
+  C* data_;
+  int size_;
+
+  bool del_; // True if new/delete used. False if FifoAllocator used, 
+             // in which case client deallocates.  
+};
+
+#endif // FIXED_CAP_ARRAY_H
diff --git a/src/app/tide/index_settings.cc b/src/app/tide/index_settings.cc
new file mode 100644
index 0000000..ba988d6
--- /dev/null
+++ b/src/app/tide/index_settings.cc
@@ -0,0 +1,75 @@
+#include <string>
+#include <gflags/gflags.h>
+#include "header.pb.h"
+#include "records.h"
+#include "modifications.h"
+#include "mass_constants.h"
+
+using namespace std;
+
+#define CHECK(x) GOOGLE_CHECK(x)
+
+DEFINE_double(min_mass, 200, "Peptide mass inclusion threshold");
+DEFINE_double(max_mass, 7200, "Peptide mass inclusion threshold");
+DEFINE_int32(min_length, 6, "Peptide length inclusion threshold");
+DEFINE_int32(max_length, 50, "Peptide length inclusion threshold");
+
+DEFINE_string(enzyme, "none", "Digestion enzyme. May be none, trypsin, "
+                      "chymotrypsin, elastase, clostripain, cyanogen-bromide, "
+                      "idosobenzoate, proline-endopeptidase, staph-protease, "
+                      "modified-chymotrypsin, elastase-trypsin-chymotrypsin, "
+                      "aspn.");
+DEFINE_string(digestion, "full-digest", "Digestion completeness. "
+                         "May be full-digest or partial-digest.");
+DEFINE_int32(max_missed_cleavages, 0, "Maximum number of missed cleavages to "
+	                              "allow in enzymatic digestion.");
+DEFINE_bool(monoisotopic_precursor, false, "Use monoisotopic precursor masses "
+	    "rather than average masses for residues.");
+
+DEFINE_string(mods_spec, "", "Expression for static modifications to include. "
+	      "Specify a comma-separated list of the form --mods=C+57.0,...");
+DEFINE_string(mods_table, "", "Modification specification filename. May be "
+	      "given instead of --mods_spec.");
+
+void SettingsFromFlags(pb::Header* header) {
+  // Fill in header as PeptidesHeader, according to command-line flags
+
+  pb::Header_PeptidesHeader& pep_header = *header->mutable_peptides_header();
+  pep_header.Clear();
+  pep_header.set_min_mass(FLAGS_min_mass);
+  pep_header.set_max_mass(FLAGS_max_mass);
+  pep_header.set_min_length(FLAGS_min_length);
+  pep_header.set_max_length(FLAGS_max_length);
+  pep_header.set_monoisotopic_precursor(FLAGS_monoisotopic_precursor);
+  pep_header.set_enzyme(FLAGS_enzyme);
+  CHECK(!FLAGS_enzyme.empty());
+  if (FLAGS_enzyme != "none") {
+    CHECK(FLAGS_digestion == "full-digest"
+	  || FLAGS_digestion == "partial-digest");
+    pep_header.set_full_digestion(FLAGS_digestion == "full-digest");
+    pep_header.set_max_missed_cleavages(FLAGS_max_missed_cleavages);
+  }
+
+  CHECK(FLAGS_mods_table.empty() || FLAGS_mods_spec.empty())
+    << "Can't specify both --mods_table and --mods_spec";
+
+  VariableModTable var_mod_table;
+  if (!FLAGS_mods_table.empty()) {
+    pb::Header mods_header;
+    pb::ModTable mod_table;
+    HeadedRecordReader mods_reader(FLAGS_mods_table, &mods_header);
+    CHECK(mods_header.file_type() == pb::Header::MOD_TABLE);
+    CHECK(!mods_reader.Done());
+    CHECK(mods_reader.Read(&mod_table));
+    CHECK(mods_reader.Done());
+    
+    CHECK(var_mod_table.Init(mod_table));
+    CHECK(var_mod_table.SerializeUniqueDeltas(&mod_table));
+    pep_header.mutable_mods()->CopyFrom(mod_table);
+//    CHECK(MassConstants::Init(&mod_table));
+  } else {
+    CHECK(var_mod_table.Parse(FLAGS_mods_spec.c_str()));
+    pep_header.mutable_mods()->CopyFrom(*var_mod_table.ParsedModTable());
+//    CHECK(MassConstants::Init(var_mod_table.ParsedModTable()));
+  }
+}
diff --git a/src/app/tide/libtide-support.a b/src/app/tide/libtide-support.a
new file mode 100644
index 0000000..9b28868
Binary files /dev/null and b/src/app/tide/libtide-support.a differ
diff --git a/src/app/tide/make_peptides.cc b/src/app/tide/make_peptides.cc
new file mode 100644
index 0000000..e79ce2d
--- /dev/null
+++ b/src/app/tide/make_peptides.cc
@@ -0,0 +1,765 @@
+// Benjamin Diament
+//
+// Generate peptides (enzymatic or non-enzymatic) from a set of proteins.
+// 
+// Example command-line:
+// make_peptides [ options ] --proteins=<raw_proteins.proto input file> \
+//                           --peptides=<peptides.proto output file> 
+// See other command-line options below.
+//
+// Implementation overview
+//
+// We do not wish to write an unsorted list of all the Peptides and then sort
+// them separately, as we expect this would be slow. Instead, we use a heap to
+// write the peptides in sorted order as we generate them. We do this as
+// follows.
+//
+// All proteins sequences are stored in memory (This isn't scalable, but the
+// same work could be done in chunks that fit in memory and then merged
+// later. Such merging is not implemented. TODO 246)
+//
+// To each amino acid in all the protein sequences we assign a Peptide (see
+// class definition below) beginning at that position. This Peptide's length
+// will be incremented over the course of the run until either the maximum
+// peptide mass or length is exceeded. Barring exceeding the mass and length
+// limits, therefore, there are always as many Peptides in memory as there are
+// amino acids.
+//
+// We always maintain a heap of all these Peptides, arranged by mass.
+// We think of identical Peptides (the same amino acid sequence) as a group.
+// We ensure that a group of identical Peptides will come off the heap 
+// consecutively, ordered by protein_id and position within the protein.
+// To guarantee this we must use a multi-critereon comparator for the heap.
+// (See Peptide::Compare()).
+//
+// Until there are no Peptides remaining, we repeatedly remove the lightest
+// group of Peptides from the heap, create a protocol buffer representing that
+// peptide and all its locations, and store it to disk as a record. Then we 
+// grow each Peptide in the group by one amino acid and insert it back into the
+// heap (assuming it hasn't exceeded the mass and length limits).
+
+#include <stdio.h>
+#include <iostream>
+#include <string>
+#include <climits>
+#include <vector>
+#include <algorithm>
+#include <bitset>
+#include <gflags/gflags.h>
+#include "records.h"
+#include "records_to_vector-inl.h"
+#include "header.pb.h"
+#include "raw_proteins.pb.h"
+#include "peptides.pb.h"
+#include "mass_constants.h"
+
+using namespace std;
+
+#define CHECK(x) GOOGLE_CHECK(x)
+typedef pb::Header_PeptidesHeader Settings;
+
+///////////////////////////////////////////////////////////////////////////////
+// Represents a peptide begining at a fixed position. One instance appears on
+// the heap for each position. The length varies over the course of the run.
+// (See comments above.)
+//
+// After construction, call Init(), which will return true if the peptide
+// should enter the heap. (It might not if it can't be extended to meet
+// the minimum mass and length threshold.)
+//
+// Subclasses may override Advance().
+class Peptide {
+ public:
+  Peptide(const pb::Protein& protein, int pos, int max_len = INT_MAX)
+    : protein_id_(protein.id()),
+      pos_(pos),
+      residues_(protein.residues().data() + pos),
+      protein_end_(min(max_len, int(protein.residues().length() - pos))),
+      length_(0),
+      mass_(monoisotopic_precursor_ ? MassConstants::fixp_mono_h2o
+	    : MassConstants::fixp_avg_h2o) {
+    assert(protein_end_ >= 0); 
+  }
+
+  int Compare(const Peptide& other, bool allow_equal) const {
+    // To ensure that identical Peptides come off the heap consecutively and
+    // ordered by protein and position.
+    // Return -1 if this < other, return 1 if this > other.
+    // If allow_equal, return 0 when Peptides are identical.
+
+    // mass first
+    if (mass_ > other.mass_)
+      return 1;
+    if (mass_ < other.mass_)
+      return -1;
+    // then length
+    if (length_ < other.length_)
+      return -1;
+    if (length_ > other.length_)
+      return 1;
+    // if all shortcuts fail, have to check the chars
+    const char* u = residues_;
+    const char* v = other.residues_;
+    for (int i = 0; i < length_; ++i, ++u, ++v) {
+      int diff = int(*u) - int(*v);
+      if (diff != 0)
+        return diff;
+    }
+    if (allow_equal)
+      return 0;
+
+    if (protein_id_ < other.protein_id_)
+      return -1;
+    if (protein_id_ > other.protein_id_)
+      return 1;
+    return pos_ - other.pos_;
+  }
+
+  virtual bool Advance() {
+    // Increment length. Return false if limits exceeded.
+    if (protein_end_ == 0 || length_ >= max_length_)
+      return false;
+    --protein_end_;
+    mass_ += AAMass(residues_[length_++]);
+    return mass_ <= max_mass_;
+  }
+
+  int StartPos() { return pos_; }
+  int EndPos() { return pos_ + length_; }
+
+  bool Init() {
+    while (length_ < min_length_ || mass_ < min_mass_)
+      if (!Advance())
+        return false;
+    return true;
+  }
+
+  void Print() {
+    // Debugging
+    cerr << mass_ << "\t  len:" << length_ << "\t  prot:" 
+      << protein_id_ << "\t  pos:" << pos_ << "\n";
+  }
+
+  void StartPB(pb::Peptide* pb_peptide) {
+    // Initialize a protocol buffer with the first Peptide in a group.
+    pb_peptide->set_id(peptide_count_++);
+    pb_peptide->set_mass(MassConstants::ToDouble(mass_));
+    pb_peptide->set_length(length_);
+    pb_peptide->mutable_first_location()->set_protein_id(protein_id_);
+    pb_peptide->mutable_first_location()->set_pos(pos_);
+  }
+
+  void BuildAuxLocationsPB(pb::AuxLocation* aux_location) {
+    // Add another location to a protocol buffer representing a group of
+    // locations for the current peptide.
+    pb::Location* location = aux_location->add_location();
+    location->set_protein_id(protein_id_);
+    location->set_pos(pos_);
+  }
+
+  static bool SetMinMaxMassAndLength(const Settings& settings) {
+    // Returns true if successful (settings are valid).
+    if (!settings.has_min_length() || 
+        !settings.has_max_length() ||
+        !settings.has_min_mass() ||
+        !settings.has_max_mass()) 
+      return false;
+    min_length_ = settings.min_length();
+    max_length_ = settings.max_length();
+    min_mass_ = MassConstants::ToFixPt(settings.min_mass());
+    max_mass_ = MassConstants::ToFixPt(settings.max_mass());
+    monoisotopic_precursor_ = (settings.has_monoisotopic_precursor() &&
+			       settings.monoisotopic_precursor());
+    return true;
+  }
+
+ protected:
+  static FixPt AAMass(char aa) {
+    return monoisotopic_precursor_ ? MassConstants::fixp_mono_table[aa]
+      : MassConstants::fixp_avg_table[aa];
+  }
+
+  static int peptide_count_;
+  static int  min_length_, max_length_;
+  static FixPt min_mass_, max_mass_;
+  static bool monoisotopic_precursor_;
+
+  int protein_id_;
+  unsigned short int pos_;
+  const char* residues_; // points into protein sequence
+  unsigned short int protein_end_; // remaining residues in protein
+  unsigned short int length_;
+  FixPt mass_;
+};
+
+int Peptide::peptide_count_ = 0;
+int Peptide::min_length_;
+int Peptide::max_length_;
+FixPt Peptide::min_mass_;
+FixPt Peptide::max_mass_;
+bool Peptide::monoisotopic_precursor_;
+
+struct greater_peptide : public binary_function<Peptide*, Peptide*, bool> {
+  bool operator()(Peptide* x, Peptide* y) {
+    if (x == y)
+      return false;
+    return x->Compare(*y, false) > 0;
+  }
+};
+
+class ReversePeptide : public Peptide {
+ public:
+  // pos should be given at the *beginning* of the peptide. max_len must be
+  // provided accurately (not e.g. INT_MAX). As for Peptide, pos + max_len
+  // points just beyond where the peptide ends.
+  ReversePeptide(const pb::Protein& protein, int pos, int max_len)
+    : Peptide(protein, pos + max_len, 0) {
+    CHECK(protein.residues().length() - pos >= max_len);
+    protein_end_ = max_len;
+  }
+
+  virtual bool Advance() {
+    // Same as parent, but move backwards
+    if (protein_end_ == 0 || length_ >= max_length_)
+      return false;
+    --protein_end_;
+    mass_ += AAMass(*--residues_);
+    ++length_;
+    --pos_;
+    return mass_ <= max_mass_;
+  }
+};
+
+// Make only one peptide (if within limits) of length len (or up to protein end)
+class WholePeptide : public Peptide {
+ public:
+  WholePeptide(const pb::Protein& protein, int pos, int len = INT_MAX)
+    : Peptide(protein, pos, len) {
+  }
+
+  virtual bool Advance() {
+    while (Peptide::Advance())
+      if (protein_end_ == 0)
+        return true;
+    return false;
+  }
+};
+
+class SelectivePeptide : public Peptide {
+ public:
+  SelectivePeptide(const pb::Protein& protein, const vector<bool>& mask,
+                   int pos, int len = INT_MAX)
+    : Peptide(protein, pos, len), mask_(mask) {
+  }
+
+  virtual bool Advance() {
+    while (true) {
+      if (!Peptide::Advance())
+        return false;
+      if (mask_[EndPos()])
+        return true;
+    }
+  }
+
+ private:
+  const vector<bool>& mask_;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// Cleaves a protein according to the specification of an enzyme as described in
+// the construction parameters. Returns a vector<int> of the start positions of
+// the resulting peptides.
+class Enzyme {
+ public:
+  // 'left' and 'right' are sets of amino acids. A cleavage will occur at a
+  // given site if, to the left is an amino acid in 'left' and to the right is
+  // an amino acid in 'right'. If invert_XXX is true, then the cleavage occurs
+  // *unless* there is an amino acid in the corresponding set.
+  Enzyme(const char* left, bool invert_left,
+         const char* right, bool invert_right) {
+    Init(left, invert_left, &left_);
+    Init(right, invert_right, &right_);
+  }
+
+  bool Left(char c) const { return left_[Index(c)]; }
+  bool Right(char c) const { return right_[Index(c)]; }
+
+  // Digest protein to find cleavage points.
+  void Cleave(const pb::Protein& protein, vector<int>* result) const {
+    // marks FIRST position of peptides resulting from digestion but excludes
+    // (implicit) position 0 from list. A final entry is inserted marking the
+    // end of the last peptide, just beyond its last amino acid.
+    result->clear();
+    int len = protein.residues().length();
+    for (int i = 0; i < len - 1; ++i)
+      if (Left(protein.residues()[i]) && Right(protein.residues()[i+1]))
+        result->push_back(i+1);
+    result->push_back(len);
+  }
+
+  static vector<bool>* AsBitVec(vector<int>* cleavages) {
+    // caller will own result (and must delete it).
+    int len = cleavages->back() + 1;
+    vector<bool>* bitvec = new vector<bool>(len, false);
+    bitvec->clear();
+    vector<int>::iterator i = cleavages->begin();
+    for (; i != cleavages->end(); ++i)
+      (*bitvec)[*i] = true;
+    return bitvec;
+  }
+
+  // Map enzyme names to variables
+  static const Enzyme* FromName(const string& name);
+
+ private:
+  void Init(const char* chars, bool invert, bitset<26>* bits) {
+    bits->reset();
+    if (invert)
+      bits->set();
+    bool val = !invert;
+    for (; *chars; ++chars)
+      (*bits)[Index(*chars)] = val;
+  }
+
+  static int Index(char c) {
+    CHECK(c >= 'A' && c <= 'Z');
+    return c - 'A';
+  }
+
+  bitset<26> left_;
+  bitset<26> right_;
+  
+  // We predefine the following enzymes:
+  static Enzyme trypsin;
+  static Enzyme chymotrypsin;
+  static Enzyme elastase;
+  static Enzyme clostripain;
+  static Enzyme cyanogen_bromide;
+  static Enzyme idosobenzoate;
+  static Enzyme proline_endopeptidase;
+  static Enzyme staph_protease;
+  static Enzyme modified_chymotrypsin;
+  static Enzyme elastase_trypsin_chymotrypsin;
+  static Enzyme aspn;
+};
+
+Enzyme Enzyme::trypsin("KR", false, "P", true);
+Enzyme Enzyme::chymotrypsin("FWY", false, "P", true);
+Enzyme Enzyme::elastase("ALIV", false, "P", true);
+Enzyme Enzyme::clostripain("R", false, "", true);
+Enzyme Enzyme::cyanogen_bromide("M", false, "", true);
+Enzyme Enzyme::idosobenzoate("W", false, "", true);
+Enzyme Enzyme::proline_endopeptidase("P", false, "", true);
+Enzyme Enzyme::staph_protease("E", false, "", true);
+Enzyme Enzyme::modified_chymotrypsin("FWYL", false, "P", true);
+Enzyme Enzyme::elastase_trypsin_chymotrypsin("ALIVKRWFY", false, "P", true);
+Enzyme Enzyme::aspn("", true, "D", false);
+
+// Map enzyme names to variables
+const Enzyme* Enzyme::FromName(const string& name) {
+  if (name == "trypsin")
+    return &trypsin;
+  if (name == "chymotrypsin") 
+    return &chymotrypsin;
+  if (name == "elastase") 
+    return &elastase;
+  if (name == "clostripain") 
+    return &clostripain;
+  if (name == "cyanogen-bromide") 
+    return &cyanogen_bromide;
+  if (name == "idosobenzoate") 
+    return &idosobenzoate;
+  if (name == "proline-endopeptidase") 
+    return &proline_endopeptidase;
+  if (name == "staph-protease") 
+    return &staph_protease;
+  if (name == "modified-chymotrypsin") 
+    return &modified_chymotrypsin;
+  if (name == "elastase-trypsin-chymotrypsin") 
+    return &elastase_trypsin_chymotrypsin;
+  if (name == "aspn") 
+    return &aspn;
+  return NULL; // No match
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Create and manage the heap of peptides; write out the peptide file.
+// Subclasses should override AddProtein() to initialize the heap by calling
+// AddPeptide() for each peptide in the initial heap.
+class PeptideHeap {
+ public:
+  virtual ~PeptideHeap() {}
+
+  void MakePeptides(const vector<const pb::Protein*>& proteins,
+                    HeadedRecordWriter* peptide_writer, 
+                    HeadedRecordWriter* aux_loc_writer);
+
+ protected:
+  bool AddPeptide(Peptide* new_peptide) {
+    if (new_peptide->Init()) {
+      peptides_.push_back(new_peptide);
+      return true;
+    }
+    delete new_peptide;
+    return false;
+  }
+
+ private:
+  typedef vector<Peptide*> PepVec;
+  typedef PepVec::iterator PepIter;
+
+  virtual void AddProtein(const pb::Protein& protein) = 0;
+
+  void GetGroup(pb::Peptide* pb_peptide, pb::AuxLocation* aux_location);
+  void PrintHeap(const string& name, PepIter iter, PepIter end);
+
+  PepVec peptides_;
+};
+
+void PeptideHeap::PrintHeap(const string& name, PepIter iter, PepIter end) {
+  // Debugging
+  cerr << "=========  " << name << "  =========\n";
+  for (; iter != end; ++iter) {
+    cerr << "     ";
+    (*iter)->Print();
+  }
+}
+
+void PeptideHeap::GetGroup(pb::Peptide* pb_peptide, pb::AuxLocation* aux_location) {
+  pb_peptide->Clear();
+  aux_location->Clear();
+  
+  // PrintHeap("Start", peptides_.begin(), peptides_.end());
+  
+  // Pop a group off the heap. 
+  // The group will sit at the end of the peptides_ vector in reverse order.
+  // (STL's pop_heap() operation puts the smallest heap element at the end of 
+  // the heap range so we call pop_heap() once for each peptide in the group). 
+  Peptide* peptide = peptides_.front(); // smallest heap element
+  vector<Peptide*>::iterator group_begin = peptides_.end();
+  pop_heap(peptides_.begin(), group_begin--, greater_peptide());
+  
+  while ((group_begin != peptides_.begin()) &&
+         (peptide->Compare(*peptides_.front(), true) == 0))
+    pop_heap(peptides_.begin(), group_begin--, greater_peptide());
+  
+  
+  // PrintHeap("Heap Portion", peptides_.begin(), group_begin);
+  // PrintHeap("Group", group_begin, peptides_.end());
+  
+  // Fill in pb_peptide with group
+  vector<Peptide*>::iterator iter = peptides_.end() - 1;
+  (*iter)->StartPB(pb_peptide);
+
+  // Add the auxiliary locations
+  for (--iter; iter != group_begin - 1; --iter)    
+    (*iter)->BuildAuxLocationsPB(aux_location);
+  
+  // Advance all group members, deleting any that are done.
+  iter = group_begin;
+  vector<Peptide*>::iterator end = peptides_.end();
+  while (iter != end) {
+    if ((*iter)->Advance()) {
+      // re-push still-valid peptides and advance iterator
+      push_heap(peptides_.begin(), ++iter, greater_peptide());
+    } else { // Peptide has exceeded mass or length bounds.
+      delete *iter;
+      *iter = *(--end);
+      // don't advance iterator
+    }
+  }
+  
+  // PrintHeap("After Advance", peptides_.begin(), end);
+  
+  peptides_.resize(end - peptides_.begin()); // remove deleted peptides
+}
+
+void PeptideHeap::MakePeptides(const vector<const pb::Protein*>& proteins,
+                               HeadedRecordWriter* peptide_writer, 
+                               HeadedRecordWriter* aux_loc_writer) {
+  CHECK(peptide_writer->OK());
+  CHECK(aux_loc_writer->OK());
+
+  cerr << "Creating Peptide Array" << endl;
+  vector<const pb::Protein*>::const_iterator i = proteins.begin();
+  for (; i != proteins.end(); ++i) {
+    if (!(*i)->residues().empty())
+      AddProtein(**i);
+  }
+
+  cerr << "heapifying" << endl;
+  make_heap(peptides_.begin(), peptides_.end(), greater_peptide());
+
+  pb::Peptide pb_peptide;
+  pb::AuxLocation aux_location;
+  int aux_loc_idx = 0;
+  for (int count = 1; !peptides_.empty(); ++count) {
+    GetGroup(&pb_peptide, &aux_location);
+    
+    // Not all peptides have aux locations associated with them. Check to see
+    // if GetGroup added any locations to aux_location. If yes, only then
+    // assign the corresponding array index to the peptide and write it out.
+    if (aux_location.location_size() > 0) {
+      pb_peptide.set_aux_locations_index(aux_loc_idx++);
+      aux_loc_writer->Write(&aux_location);
+    }
+
+    // Write the peptide AFTER the aux_locations check, in case we added an
+    // aux_locations_index to the peptide.
+    peptide_writer->Write(&pb_peptide);
+
+    if (count % 100000 == 0)
+      cerr << "Wrote " << count << " peptides\n";
+  }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Subclasses of PeptideHeap for various peptide restrictions
+
+class NonEnzymaticPeptideHeap : public PeptideHeap {
+ private:
+  virtual void AddProtein(const pb::Protein& protein) {
+    for (int pos = 0; AddPeptide(new Peptide(protein, pos)); ++pos);
+  }
+};
+
+class NonEnzymaticPeptideHeapReverse : public PeptideHeap {
+  // testing only; should give exact same results as NonEnzymaticPeptideHeap
+ private:
+  virtual void AddProtein(const pb::Protein& protein) {
+    for (int len = protein.residues().length();
+         AddPeptide(new ReversePeptide(protein, 0, len)); --len);
+  }
+};
+
+class FullyEnzymaticPeptideHeap : public PeptideHeap {
+ public:
+  FullyEnzymaticPeptideHeap(const Enzyme* enzyme) : enzyme_(enzyme) {}
+
+  virtual ~FullyEnzymaticPeptideHeap() {}
+
+ private:
+  virtual void AddProtein(const pb::Protein& protein) {
+    vector<int> cleavages;
+    enzyme_->Cleave(protein, &cleavages);
+    int begin_pos = 0;
+    vector<int>::iterator end_pos = cleavages.begin();
+    while (end_pos != cleavages.end()) {
+      AddPeptide(new WholePeptide(protein, begin_pos, *end_pos - begin_pos));
+      begin_pos = *end_pos++; // get next peptide
+    }
+  }
+
+  const Enzyme* enzyme_;
+};
+
+class PartiallyEnzymaticPeptideHeap : public PeptideHeap {
+ public:
+  PartiallyEnzymaticPeptideHeap(const Enzyme* enzyme) : enzyme_(enzyme) {}
+
+  virtual ~PartiallyEnzymaticPeptideHeap() {}
+
+ private:
+  virtual void AddProtein(const pb::Protein& protein) {
+    vector<int> cleavages;
+    enzyme_->Cleave(protein, &cleavages);
+    int begin_pos = 0;
+    vector<int>::iterator end_pos = cleavages.begin();
+    while (end_pos != cleavages.end()) {
+      int max_len = *end_pos - begin_pos;
+      AddPeptide(new ReversePeptide(protein, begin_pos, max_len));
+      AddPeptide(new Peptide(protein, begin_pos, max_len - 1));
+      begin_pos = *end_pos++; // get next peptide
+    }
+  }
+
+  const Enzyme* enzyme_;
+};
+
+class AllowMissedCleavagesPeptideHeap : public PeptideHeap {
+ public:
+  AllowMissedCleavagesPeptideHeap(const Enzyme* enzyme, int max_cleavages)
+    : enzyme_(enzyme), max_cleavages_(max_cleavages) {
+  }
+
+  virtual ~AllowMissedCleavagesPeptideHeap() {
+    vector<vector<bool>*>::iterator i = masks_.begin();
+    for (; i != masks_.end(); ++i)
+      delete *i;
+  }
+
+ protected:
+  vector<int> cleavages_; // current set of cleavages
+  vector<bool>* mask_; // current mask
+
+ private:
+  virtual void FlipMaskIfNeeded() {}
+  virtual void AddFwdPeptide(const pb::Protein& protein, int pos, int len) = 0;
+  virtual void AddRevPeptide(const pb::Protein& protein, int pos, int len) {}
+
+  virtual void AddProtein(const pb::Protein& protein) {
+    GetCleavages(protein);
+    FlipMaskIfNeeded();
+    vector<int>::iterator next_pos = cleavages_.begin();
+    vector<int>::iterator last_pos = cleavages_.end() - 1;
+    vector<int>::iterator end_pos = next_pos + max_cleavages_;
+    if (max_cleavages_ >= cleavages_.size())
+      end_pos = last_pos;
+    for (int pos = 0; next_pos != cleavages_.end(); pos = *next_pos++) {
+      AddFwdPeptide(protein, pos, *end_pos - pos);
+      if (end_pos != last_pos)
+	end_pos++;
+    }
+    next_pos = cleavages_.begin();
+    end_pos = cleavages_.begin();
+    int pos = 0;
+    for (; end_pos != cleavages_.end(); ++end_pos) {
+      AddRevPeptide(protein, pos, *end_pos - pos);
+      if (end_pos - cleavages_.begin() >= max_cleavages_)
+	pos = *next_pos++;
+    }
+  }
+
+  virtual void GetCleavages(const pb::Protein& protein) {
+    enzyme_->Cleave(protein, &cleavages_);
+    mask_ = Enzyme::AsBitVec(&cleavages_);
+    masks_.push_back(mask_);
+  }
+
+  vector<vector<bool>*> masks_;
+  const Enzyme* enzyme_;
+  int max_cleavages_;
+};
+
+class FullyEnzymaticAllowMissedCleavagesPeptideHeap
+  : public AllowMissedCleavagesPeptideHeap {
+ public:
+  FullyEnzymaticAllowMissedCleavagesPeptideHeap(const Enzyme* enzyme,
+						int max_cleavages)
+    : AllowMissedCleavagesPeptideHeap(enzyme, max_cleavages) {
+  }
+
+  virtual ~FullyEnzymaticAllowMissedCleavagesPeptideHeap() {}
+
+ private:
+  virtual void AddFwdPeptide(const pb::Protein& protein, int pos, int len) {
+    AddPeptide(new SelectivePeptide(protein, *mask_, pos, len));
+  }
+};
+
+class PartiallyEnzymaticAllowMissedCleavagesPeptideHeap
+  : public AllowMissedCleavagesPeptideHeap {
+ public:
+  PartiallyEnzymaticAllowMissedCleavagesPeptideHeap(const Enzyme* enzyme,
+						    int max_cleavages)
+    : AllowMissedCleavagesPeptideHeap(enzyme, max_cleavages) {
+  }
+
+  virtual ~PartiallyEnzymaticAllowMissedCleavagesPeptideHeap() {}
+
+ private:
+  virtual void FlipMaskIfNeeded() { mask_->flip(); }
+
+  virtual void AddFwdPeptide(const pb::Protein& protein, int pos, int len) {
+    AddPeptide(new SelectivePeptide(protein, *mask_, pos, len));
+  }
+
+  virtual void AddRevPeptide(const pb::Protein& protein, int pos, int len) {
+    AddPeptide(new ReversePeptide(protein, pos, len));
+  }
+};
+
+#define CHECK_SETTINGS(x) do { \
+  if (!(x)) { \
+    fprintf(stderr, "SETTINGS CHECK FAILED: %s\n", #x); \
+    return false; \
+  } \
+} while (false)
+
+bool MakePeptides(pb::Header* header, const string& peptides_file, 
+                  const string& aux_locs_file) {
+
+  // header is passed in as the settings desiderata.
+  // Returns true if settings specified in header are valid.
+
+  // First, collect the source file of raw proteins, read it and check validity
+  CHECK_SETTINGS(header->source_size() == 1);
+  pb::Header_Source& source = *header->mutable_source(0);
+  CHECK_SETTINGS(source.has_filename());
+  CHECK_SETTINGS(!source.has_filetype()); // source.header() is given instead
+  string proteins_filename = source.filename();
+  vector<const pb::Protein*> proteins;
+  pb::Header prot_header;
+  cerr << "Reading Proteins" << endl;
+  CHECK_SETTINGS(ReadRecordsToVector<pb::Protein>(&proteins, proteins_filename,
+                                                  &prot_header));
+  CHECK_SETTINGS(prot_header.file_type() == pb::Header::RAW_PROTEINS);
+  // TODO: reinstate this. CHECK_SETTINGS(prot_header.has_raw_proteins_header());
+  // The raw proteins file is read in. It's a valid source file;
+  // remember it as such:
+  source.mutable_header()->CopyFrom(prot_header);
+
+  // Now check other desired settings
+  CHECK_SETTINGS(header->has_peptides_header());
+  const Settings& settings = header->peptides_header();
+  CHECK_SETTINGS(Peptide::SetMinMaxMassAndLength(settings));
+
+  CHECK_SETTINGS(settings.has_enzyme() && !settings.enzyme().empty());
+
+//  CHECK_SETTINGS(MassConstants::Init(&settings.mods()));
+
+  // Determine what type of PeptideHeap to create from settings indicated 
+  // in header->
+  PeptideHeap* heap = NULL;
+  if (settings.enzyme() == "none") {
+    CHECK_SETTINGS(!settings.has_full_digestion() && 
+                   !settings.has_max_missed_cleavages());
+    heap = new NonEnzymaticPeptideHeap;
+  } else {
+    CHECK_SETTINGS(settings.has_full_digestion() &&
+                   settings.has_max_missed_cleavages());
+    int max_missed_cleavages = settings.max_missed_cleavages();
+    if (max_missed_cleavages < 0)
+      max_missed_cleavages = INT_MAX;
+
+    const Enzyme* enzyme = Enzyme::FromName(settings.enzyme());
+    CHECK_SETTINGS(enzyme != NULL); // Unrecognized enzyme name
+
+    if (settings.full_digestion()) {
+      if (max_missed_cleavages != 0) {
+        heap = new FullyEnzymaticAllowMissedCleavagesPeptideHeap(
+	  enzyme, max_missed_cleavages);
+      } else {
+	heap = new FullyEnzymaticPeptideHeap(enzyme);
+      }
+    } else { // Partial digest
+      if (max_missed_cleavages != 0) {
+        heap = new PartiallyEnzymaticAllowMissedCleavagesPeptideHeap(
+          enzyme, max_missed_cleavages);
+      } else {
+	heap = new PartiallyEnzymaticPeptideHeap(enzyme);
+      }
+    }
+  }
+  assert(heap != NULL);
+
+  header->set_file_type(pb::Header::PEPTIDES);
+  header->mutable_peptides_header()->set_has_peaks(false);
+  HeadedRecordWriter peptide_writer(peptides_file, *header); // put header in outfile
+
+  // Create the auxiliary locations header and writer
+  pb::Header aux_locs_header;
+  aux_locs_header.set_file_type(pb::Header::AUX_LOCATIONS);
+  pb::Header_Source* aux_locs_source = aux_locs_header.add_source();
+  aux_locs_source->set_filename(peptides_file);
+  aux_locs_source->mutable_header()->CopyFrom(*header);
+  HeadedRecordWriter aux_loc_writer(aux_locs_file, aux_locs_header);
+  
+  heap->MakePeptides(proteins, &peptide_writer, &aux_loc_writer);
+  delete heap;
+
+  for (int i = 0; i < proteins.size(); ++i)
+    delete proteins[i];
+
+  return true;
+}
diff --git a/src/app/tide/mass_constants.cc b/src/app/tide/mass_constants.cc
new file mode 100644
index 0000000..c0bedab
--- /dev/null
+++ b/src/app/tide/mass_constants.cc
@@ -0,0 +1,272 @@
+#include <limits>
+#include "io/carp.h"
+#include "mass_constants.h"
+#include "header.pb.h"
+#include "stdio.h"
+
+using namespace std;
+
+double const MassConstants::proton = 1.00727646688;
+double const MassConstants::kFixedPointScalar = 1e5;
+
+const double MassConstants::elts_mono[] = {
+  1.007825035, // H
+  12.0,        // C
+  14.003074,   // N
+  15.99491463, // O
+  30.973762,   // P
+  31.9720707   // S
+};
+
+const double MassConstants::elts_avg[] = {
+  1.00794,    // H
+  12.0107,    // C
+  14.0067,    // N
+  15.9994,    // O
+  30.973761,  // P
+  32.065      // S
+};
+    
+double MassConstants::mono_table[256];
+double MassConstants::avg_table[256];
+double MassConstants::nterm_mono_table[256];
+double MassConstants::cterm_mono_table[256];
+double MassConstants::nterm_avg_table[256];
+double MassConstants::cterm_avg_table[256];
+//double* MassConstants::aa_mass_table = NULL;
+//double MassConstants::aa_bin_1[256];
+//double MassConstants::aa_bin_2[256];
+
+const double MassConstants::mono_h2o = 2*MassConstants::elts_mono[0] + MassConstants::elts_mono[3];
+const double MassConstants::avg_h2o = 2*MassConstants::elts_avg[0] + MassConstants::elts_avg[3];
+const double MassConstants::mono_nh3 = 3*MassConstants::elts_mono[0] + MassConstants::elts_mono[2];
+const double MassConstants::mono_co = MassConstants::elts_mono[1] + MassConstants::elts_mono[3];
+const double MassConstants::mono_oh = MassConstants::elts_mono[0] + MassConstants::elts_mono[3];
+const double MassConstants::mono_h = MassConstants::elts_mono[0] ;
+const double MassConstants::A = 0 - 28.0;
+//const double MassConstants::B_H2O = 0 - MassConstants::mono_h2o;
+//const double MassConstants::B_NH3 = 0 - MassConstants::mono_nh3;
+const double MassConstants::B = 0.0;
+//const double MassConstants::Y_H2O = MassConstants::mono_h2o - 18.0;
+//const double MassConstants::Y_NH3 = MassConstants::mono_h2o - 17.0;
+const double MassConstants::Y = MassConstants::mono_h2o;
+/*const double MassConstants::BIN_SHIFT_A_ION_CHG_1 = 28;
+const double MassConstants::BIN_SHIFT_A_ION_CHG_2 = 14;
+const double MassConstants::BIN_SHIFT_H2O_CHG_1 = 18;
+const double MassConstants::BIN_SHIFT_H2O_CHG_2 = 9;
+const double MassConstants::BIN_SHIFT_NH3_CHG_1 = 17;
+const double MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_A = 9;
+const double MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_B = 8;
+*/
+double MassConstants::BIN_H2O = 18;
+double MassConstants::BIN_NH3 = 17;
+
+
+//default parameter settings, will be changed during parameter parsing
+double MassConstants::bin_width_ = BIN_WIDTH; // 1.0005079;
+double MassConstants::bin_offset_ = BIN_OFFSET; //0.40;
+
+FixPt MassConstants::fixp_mono_table[256];
+FixPt MassConstants::fixp_avg_table[256];
+FixPt MassConstants::fixp_nterm_mono_table[256];
+FixPt MassConstants::fixp_cterm_mono_table[256];
+FixPt MassConstants::fixp_nterm_avg_table[256];
+FixPt MassConstants::fixp_cterm_avg_table[256];
+
+const FixPt MassConstants::fixp_mono_h2o = ToFixPt(MassConstants::mono_h2o);
+const FixPt MassConstants::fixp_avg_h2o  = ToFixPt(MassConstants::avg_h2o);
+const FixPt MassConstants::fixp_mono_nh3 = ToFixPt(MassConstants::mono_nh3);
+const FixPt MassConstants::fixp_mono_co  = ToFixPt(MassConstants::mono_co);
+const FixPt MassConstants::fixp_proton   = ToFixPt(MassConstants::proton);
+
+ModCoder MassConstants::mod_coder_;
+vector<double> MassConstants::unique_deltas_;
+//double* MassConstants::unique_deltas_bin_;
+
+static bool CheckModTable(const pb::ModTable& mod_table);
+
+void MassConstants::FillMassTable(const double* elements, double* table) {
+  const double* e = elements;
+  double H = e[0], C = e[1], N = e[2], O = e[3], P = e[4], S = e[5];
+
+  for (int i = 0; i < 256; ++i)
+    table[i] = numeric_limits<double>::signaling_NaN();
+
+  table['A'] = C*3  + H*5  + N   + O       ;
+  table['C'] = C*3  + H*5  + N   + O   + S ;
+  table['D'] = C*4  + H*5  + N   + O*3     ;
+  table['E'] = C*5  + H*7  + N   + O*3     ;
+  table['F'] = C*9  + H*9  + N   + O       ;
+  table['G'] = C*2  + H*3  + N   + O       ;
+  table['H'] = C*6  + H*7  + N*3 + O       ;
+  table['I'] = C*6  + H*11 + N   + O       ;
+  table['K'] = C*6  + H*12 + N*2 + O       ;
+  table['L'] = C*6  + H*11 + N   + O       ;
+  table['M'] = C*5  + H*9  + N   + O   + S ;
+  table['N'] = C*4  + H*6  + N*2 + O*2     ;
+  table['P'] = C*5  + H*7  + N   + O       ;
+  table['Q'] = C*5  + H*8  + N*2 + O*2     ;
+  table['R'] = C*6  + H*12 + N*4 + O       ;
+  table['S'] = C*3  + H*5  + N   + O*2     ;
+  table['T'] = C*4  + H*7  + N   + O*2     ;
+  table['V'] = C*5  + H*9  + N   + O       ;
+  table['W'] = C*11 + H*10 + N*2 + O       ;
+  table['Y'] = C*9  + H*9  + N   + O*2     ;
+
+  table['w'] =        H*2        + O       ; // water
+  table['a'] =        H*3  + N             ; // ammonia
+  table['c'] = C                 + O       ; // carbon monoxide
+}
+
+
+bool MassConstants::Init(const pb::ModTable* mod_table, 
+  const pb::ModTable* n_mod_table, 
+  const pb::ModTable* c_mod_table, 
+  const double bin_width, const double bin_offset) {
+
+  if (mod_table && !CheckModTable(*mod_table))
+    return false;
+
+  if (!n_mod_table || !c_mod_table) {
+    carp(CARP_FATAL, "We could not find nterm or cterm mod tables. "
+    "This is a [relatively] new requirement in attempt to fix static "
+    "mod discrepancies - 5/19/2015.");
+  }
+
+  if (n_mod_table && !CheckModTable(*n_mod_table))
+    return false;
+
+  if (c_mod_table && !CheckModTable(*c_mod_table))
+    return false;
+
+  for (int i = 0; i < 256; ++i) {
+    mono_table[i] = avg_table[i] = nterm_mono_table[i] = 
+    cterm_mono_table[i] = nterm_avg_table[i] = cterm_avg_table[i] = 0;
+  }
+
+  FillMassTable(elts_mono, mono_table);
+  FillMassTable(elts_avg, avg_table);
+  FillMassTable(elts_mono, nterm_mono_table);
+  FillMassTable(elts_mono, cterm_mono_table);
+  FillMassTable(elts_avg, nterm_avg_table);
+  FillMassTable(elts_avg, cterm_avg_table);
+
+  if (mod_table) {
+    // TODO: consider handling average and monoisotopic masses
+    // differently (e.g. with different mod tables). We're deferring
+    // this for now, since we haven't sorted out how to handle average
+    // vs. monoisotopic masses generally.
+    for (int i = 0; i < mod_table->static_mod_size(); ++i) {
+      char aa = mod_table->static_mod(i).amino_acids()[0];
+      double delta = mod_table->static_mod(i).delta();
+      mono_table[aa] += delta;
+      avg_table[aa] += delta;
+      nterm_mono_table[aa] += delta;
+      cterm_mono_table[aa] += delta;
+      nterm_avg_table[aa] += delta;
+      cterm_avg_table[aa] += delta;
+    }
+    carp(CARP_DEBUG, "Number of unique modification masses: %d\n", mod_table->unique_deltas_size());
+
+    mod_coder_.Init(mod_table->unique_deltas_size());
+    unique_deltas_.clear();
+    unique_deltas_.reserve(mod_table->unique_deltas_size());
+    for (int i = 0; i < mod_table->unique_deltas_size(); ++i) {
+      unique_deltas_.push_back(mod_table->unique_deltas(i));
+    }
+  }
+
+  ApplyTerminusStaticMods(n_mod_table, nterm_mono_table, nterm_avg_table);
+  ApplyTerminusStaticMods(c_mod_table, cterm_mono_table, cterm_avg_table);
+
+  SetFixPt(mono_table, avg_table, fixp_mono_table, fixp_avg_table);
+  SetFixPt(nterm_mono_table, nterm_avg_table, fixp_nterm_mono_table, fixp_nterm_avg_table);
+  SetFixPt(cterm_mono_table, cterm_avg_table, fixp_cterm_mono_table, fixp_cterm_avg_table);
+
+  bin_width_ = bin_width;
+  bin_offset_ = bin_offset;
+  BIN_H2O = mass2bin(mono_h2o,1);
+  BIN_NH3 = mass2bin(mono_nh3,1);
+
+  return true;
+}
+
+/* Updates the masses for the respective table to include the
+static mod information from the mod table. */
+void MassConstants::ApplyTerminusStaticMods(const pb::ModTable* mod_table, 
+  double* mono_table, double* avg_table) {
+
+  for (int i = 0; i < mod_table->static_mod_size(); ++i) {
+    char aa = (mod_table->static_mod(i).amino_acids())[0];
+    double delta = mod_table->static_mod(i).delta();
+    if (aa == 'X') {
+      const char* AA = "ACDEFGHIKLMNPQRSTVWY";
+      for (int currAA = 0; AA[currAA] != '\0'; currAA++) {
+        mono_table[AA[currAA]] += delta;
+        avg_table[AA[currAA]] += delta;
+      }
+    } else {
+      mono_table[aa] += delta;
+      avg_table[aa] += delta;
+    }
+  }
+}
+
+/* Sets the fixpt for the given mono and avg tables */
+void MassConstants::SetFixPt(double* mono_table, double* avg_table, 
+            FixPt* fixp_mono_table, FixPt* fixp_avg_table) {
+  for (int i = 0; i < 256; ++i) {
+    if (mono_table[i] == 0) {
+      mono_table[i] = avg_table[i]/* = aa_bin_1[i] = aa_bin_2[i]*/
+	= numeric_limits<double>::signaling_NaN();
+      fixp_mono_table[i] = fixp_avg_table[i] = 0;
+    } else {
+      fixp_mono_table[i] = ToFixPt(mono_table[i]);
+      fixp_avg_table[i] = ToFixPt(avg_table[i]);
+    }
+  }
+}
+
+static bool CheckModification(const pb::Modification& mod,
+			      bool* repeats = NULL) {
+  string aa_str = mod.amino_acids();
+  if (aa_str.length() != 1)
+    return false;
+  char aa = aa_str[0];
+  const char* AA = "ACDEFGHIKLMNPQRSTVWY";
+  for (; (*AA != '\0') && (*AA != aa); ++AA); // find aa in AA
+  if (*AA == '\0')
+    return false;
+  if (repeats != NULL) {
+    if (repeats[aa])
+      return false;
+    repeats[aa] = true;
+  }
+  return true;
+}
+
+static bool CheckModTable(const pb::ModTable& mod_table) {
+  // static mods table should not have repeated amino acids
+  bool repeats[256];
+  for (int i = 0; i < 256; ++i)
+    repeats[i] = false;
+  bool usingXMod = false;
+  for (int i = 0; i < mod_table.static_mod_size(); ++i) {
+    const pb::Modification& mod = mod_table.static_mod(i);
+    string aa_str = mod.amino_acids();
+    if (aa_str.length() != 1) {
+      return false;
+    } else if (aa_str[0] == 'X') {
+      usingXMod = true;
+    } else if (!CheckModification(mod, repeats)) {
+      carp(CARP_FATAL, "Multiple static mods on same residue detected");
+      return false;
+    }
+  }
+  if (usingXMod && mod_table.static_mod_size() > 1) {
+    carp(CARP_FATAL, "We are using X static mod, but we have detected "
+    "other static mods as well. Only one static mod is allowed.");
+  }
+
+  return true;
+}
diff --git a/src/app/tide/mass_constants.h b/src/app/tide/mass_constants.h
new file mode 100644
index 0000000..457d963
--- /dev/null
+++ b/src/app/tide/mass_constants.h
@@ -0,0 +1,118 @@
+// Benjamin Diament
+//
+// Wrapper for all mass constants. Arrays, where they appear, 
+// are of length 256, and are indexed by an upper-case letter 
+// symbolizing the amino acid.
+//
+// Unused array entries are filled with signaling_NaN, which is 
+// supposed to generate an error if touched, but seems to fail silently 
+// on Intel. Oh well. :(
+
+#ifndef MASS_CONSTANTS_H
+#define MASS_CONSTANTS_H
+
+#include "mod_coder.h"
+#include <vector>
+
+#define BIN_WIDTH 1.0005079
+#define BIN_OFFSET 0.68
+typedef unsigned int FixPt; // 32-bit fixed-point arithmetic
+  // ALTERNATIVE unsigned long long int; // 64 bits
+  // ALTERNATIVE unsigned long int; // machine register size
+
+namespace pb { class ModTable; }
+
+class MassConstants {
+ public:
+  // Elemental mass values are from www.unimod.org/masses.html.
+  static const double elts_mono[];
+  static const double elts_avg[];
+
+  static const double proton;
+
+  static bool Init(const pb::ModTable* mod_table, 
+    const pb::ModTable* n_mod_table, 
+    const pb::ModTable* c_mod_table, 
+    const double bin_width, const double bin_offset);
+
+  static void ApplyTerminusStaticMods(const pb::ModTable* mod_table, 
+    double* mono_table, double* avg_table);
+
+  static void SetFixPt(double* mono_table, double* avg_table, 
+    FixPt* fixp_mono_table, FixPt* fixp_avg_table);
+  
+  static double mono_table[];
+  static double avg_table[];
+  static double nterm_mono_table[];
+  static double cterm_mono_table[];
+  static double nterm_avg_table[];
+  static double cterm_avg_table[];
+  static const double mono_h2o;
+  static const double avg_h2o;
+  static const double mono_nh3;
+  static const double mono_co;
+  static const double mono_oh;
+  static const double mono_h;
+  static const double A;
+//  static const double B_H2O;
+//  static const double B_NH3;
+  static const double B;
+//  static const double Y_H2O;
+//  static const double Y_NH3;
+  static const double Y;
+  static double BIN_H2O;
+  static double BIN_NH3;
+/*  static const double BIN_SHIFT_A_ION_CHG_1;
+  static const double BIN_SHIFT_A_ION_CHG_2;
+  static const double BIN_SHIFT_H2O_CHG_1;
+  static const double BIN_SHIFT_H2O_CHG_2;
+  static const double BIN_SHIFT_NH3_CHG_1;
+  static const double BIN_SHIFT_NH3_CHG_2_CASE_A;
+  static const double BIN_SHIFT_NH3_CHG_2_CASE_B;
+*/  // Fixed-Point Versions
+  static const double kFixedPointScalar;
+  static FixPt ToFixPt(double x) {
+    return FixPt(x * kFixedPointScalar + 0.5);
+  }
+  static double ToDouble(FixPt x) {
+    return x/kFixedPointScalar;
+  }
+
+  static FixPt fixp_mono_table[];
+  static FixPt fixp_avg_table[];
+  static FixPt fixp_nterm_mono_table[];
+  static FixPt fixp_cterm_mono_table[];
+  static FixPt fixp_nterm_avg_table[];
+  static FixPt fixp_cterm_avg_table[];
+
+  static const FixPt fixp_mono_h2o;
+  static const FixPt fixp_avg_h2o;
+
+  static const FixPt fixp_mono_nh3;
+  static const FixPt fixp_mono_co;
+
+  static const FixPt fixp_proton;
+
+  static void DecodeMod(int code, int* aa_index, double* delta) {
+    int unique_delta_index;
+    mod_coder_.DecodeMod(code, aa_index, &unique_delta_index);
+    *delta = unique_deltas_[unique_delta_index];
+  }
+  static unsigned int mass2bin(double mass, int charge = 1) {
+    return (unsigned int)((mass + (charge - 1)*proton)/(charge*bin_width_) + 1.0 - bin_offset_);
+  }
+  static double bin2mass(int bin, int charge = 1) {
+    return (bin - 1.0 + bin_offset_) * charge*bin_width_ + (charge - 1)*proton;
+  }
+
+  static double bin_width_;
+  static double bin_offset_;
+ private:
+  static void FillMassTable(const double* elements, double* table);
+
+  static ModCoder mod_coder_;
+  static std::vector<double> unique_deltas_;
+
+};
+
+#endif
diff --git a/src/app/tide/max_mz.cc b/src/app/tide/max_mz.cc
new file mode 100644
index 0000000..a18dea5
--- /dev/null
+++ b/src/app/tide/max_mz.cc
@@ -0,0 +1,9 @@
+// Benjamin Diament
+#include <gflags/gflags.h>
+#include "max_mz.h"
+
+DEFINE_double(max_bin, 0, "During search, ignore peaks with higher m/z than "
+	      "this. Zero means use all peaks in the dataset. During indexing,"
+	      " 0 means to include all theoretical peaks.");
+
+MaxBin MaxBin::global;
diff --git a/src/app/tide/max_mz.h b/src/app/tide/max_mz.h
new file mode 100644
index 0000000..580440a
--- /dev/null
+++ b/src/app/tide/max_mz.h
@@ -0,0 +1,75 @@
+// Benjamin Diament
+// For handling the arcana and complexity of limiting m/z.
+// Most of this comes up in an effort to mimic Crux's results prefectly, and 
+// generally concerns at which m/z value we should stop loops. If there is any 
+// theme to draw from these arcana it seems that 0's are implicitly tacked on to the 
+// high-end of a spectrum after a cut-off is programatically selected.
+//
+// Many of the methods of the class MaxMZ concern converting back and forth 
+// between m/z values (in daltons/charge) to buckets.
+//
+// Once a MaxMZ is Init()'d the following three functions return
+// appropriate calculated values for the spectrum under consideration:
+// MaxBin() : highest bin value that will be returned by MaxMZ::Bin().
+// BackgroundBinEnd() : one bin beyond where background subtraction should end.
+// CacheBinEnd() : one bin beyond where the cache lookups can extend.
+
+
+// This new class called MZX_BIN is to replace the old MAX_MZ class.
+//written by Attila Kertesz-Farkas
+
+#ifndef MAX_BIN_H
+#define MAX_BIN_H
+
+#include <assert.h>
+#include <gflags/gflags.h>
+#include "mass_constants.h"
+
+DECLARE_double(max_bin);
+
+// Maximum offset in the denominator of the XCorr function.
+const int MAX_XCORR_OFFSET = 75;
+
+class MaxBin {
+ public:
+  MaxBin() : max_bin_(0), background_bin_end_(0), cache_bin_end_(0) {}
+
+  //MassConstants has to be initialized before this call.
+  void InitBin(int highest_mz) {
+    max_bin_ = MassConstants::mass2bin(highest_mz, 1);
+    background_bin_end_ = MassConstants::mass2bin(highest_mz + MAX_XCORR_OFFSET + 1, 1);
+    // room for diff between main ion and losses, A ion being most
+    // distant, and 29 bins being as far away as an A-ion can be
+    cache_bin_end_ = MassConstants::mass2bin(highest_mz + MAX_XCORR_OFFSET + 30, 1);
+  }
+
+  int MaxBinEnd() const { return max_bin_; }
+  int BackgroundBinEnd() const { return background_bin_end_; }
+  int CacheBinEnd() const { return cache_bin_end_; }
+
+  static const MaxBin& Global() {
+    // during indexing (as opposed to searching), Global().MaxBin() may be 0,
+    // which indicates we should index all theoretical peaks, regardless of
+    // m/z
+    return global;
+  }
+
+  static void SetGlobalMax(double highest_mz) {
+    global.InitBin(highest_mz);
+    FLAGS_max_bin = global.MaxBinEnd();
+  }
+
+  static void SetGlobalMaxFromFlag() {
+    if (FLAGS_max_bin > 0)
+    SetGlobalMax(FLAGS_max_bin);
+  }
+
+ private:
+  int max_bin_;
+  int background_bin_end_;
+  int cache_bin_end_;
+
+  static MaxBin global;
+};
+
+#endif // MAX_BIN_H
diff --git a/src/app/tide/mman.c b/src/app/tide/mman.c
new file mode 100644
index 0000000..5b0bc78
--- /dev/null
+++ b/src/app/tide/mman.c
@@ -0,0 +1,180 @@
+
+#include <windows.h>
+#include <errno.h>
+#include <io.h>
+
+#include "mman.h"
+
+#ifndef FILE_MAP_EXECUTE
+#define FILE_MAP_EXECUTE    0x0020
+#endif /* FILE_MAP_EXECUTE */
+
+static int __map_mman_error(const DWORD err, const int deferr)
+{
+    if (err == 0)
+        return 0;
+    //TODO: implement
+    return err;
+}
+
+static DWORD __map_mmap_prot_page(const int prot)
+{
+    DWORD protect = 0;
+    
+    if (prot == PROT_NONE)
+        return protect;
+        
+    if ((prot & PROT_EXEC) != 0)
+    {
+        protect = ((prot & PROT_WRITE) != 0) ? 
+                    PAGE_EXECUTE_READWRITE : PAGE_EXECUTE_READ;
+    }
+    else
+    {
+        protect = ((prot & PROT_WRITE) != 0) ?
+                    PAGE_READWRITE : PAGE_READONLY;
+    }
+    
+    return protect;
+}
+
+static DWORD __map_mmap_prot_file(const int prot)
+{
+    DWORD desiredAccess = 0;
+    
+    if (prot == PROT_NONE)
+        return desiredAccess;
+        
+    if ((prot & PROT_READ) != 0)
+        desiredAccess |= FILE_MAP_READ;
+    if ((prot & PROT_WRITE) != 0)
+        desiredAccess |= FILE_MAP_WRITE;
+    if ((prot & PROT_EXEC) != 0)
+        desiredAccess |= FILE_MAP_EXECUTE;
+    
+    return desiredAccess;
+}
+
+void* mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off)
+{
+    HANDLE fm, h;
+    
+    void * map = MAP_FAILED;
+    
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable: 4293)
+#endif
+
+    const DWORD dwFileOffsetLow = (sizeof(off_t) <= sizeof(DWORD)) ? 
+                    (DWORD)off : (DWORD)(off & 0xFFFFFFFFL);
+    const DWORD dwFileOffsetHigh = (sizeof(off_t) <= sizeof(DWORD)) ?
+                    (DWORD)0 : (DWORD)((off >> 32) & 0xFFFFFFFFL);
+    const DWORD protect = __map_mmap_prot_page(prot);
+    const DWORD desiredAccess = __map_mmap_prot_file(prot);
+
+    const off_t maxSize = off + (off_t)len;
+
+    const DWORD dwMaxSizeLow = (sizeof(off_t) <= sizeof(DWORD)) ? 
+                    (DWORD)maxSize : (DWORD)(maxSize & 0xFFFFFFFFL);
+    const DWORD dwMaxSizeHigh = (sizeof(off_t) <= sizeof(DWORD)) ?
+                    (DWORD)0 : (DWORD)((maxSize >> 32) & 0xFFFFFFFFL);
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+    errno = 0;
+    
+    if (len == 0 
+        /* Unsupported flag combinations */
+        || (flags & MAP_FIXED) != 0
+        /* Usupported protection combinations */
+        || prot == PROT_EXEC)
+    {
+        errno = EINVAL;
+        return MAP_FAILED;
+    }
+    
+    h = ((flags & MAP_ANONYMOUS) == 0) ? 
+                    (HANDLE)_get_osfhandle(fildes) : INVALID_HANDLE_VALUE;
+
+    if ((flags & MAP_ANONYMOUS) == 0 && h == INVALID_HANDLE_VALUE)
+    {
+        errno = EBADF;
+        return MAP_FAILED;
+    }
+
+    fm = CreateFileMapping(h, NULL, protect, dwMaxSizeHigh, dwMaxSizeLow, NULL);
+
+    if (fm == NULL)
+    {
+        errno = __map_mman_error(GetLastError(), EPERM);
+        return MAP_FAILED;
+    }
+  
+    map = MapViewOfFile(fm, desiredAccess, dwFileOffsetHigh, dwFileOffsetLow, len);
+
+    CloseHandle(fm);
+  
+    if (map == NULL)
+    {
+        errno = __map_mman_error(GetLastError(), EPERM);
+        return MAP_FAILED;
+    }
+
+    return map;
+}
+
+int munmap(void *addr, size_t len)
+{
+    if (UnmapViewOfFile(addr))
+        return 0;
+        
+    errno =  __map_mman_error(GetLastError(), EPERM);
+    
+    return -1;
+}
+
+int mprotect(void *addr, size_t len, int prot)
+{
+    DWORD newProtect = __map_mmap_prot_page(prot);
+    DWORD oldProtect = 0;
+    
+    if (VirtualProtect(addr, len, newProtect, &oldProtect))
+        return 0;
+    
+    errno =  __map_mman_error(GetLastError(), EPERM);
+    
+    return -1;
+}
+
+int msync(void *addr, size_t len, int flags)
+{
+    if (FlushViewOfFile(addr, len))
+        return 0;
+    
+    errno =  __map_mman_error(GetLastError(), EPERM);
+    
+    return -1;
+}
+
+int mlock(const void *addr, size_t len)
+{
+    if (VirtualLock((LPVOID)addr, len))
+        return 0;
+        
+    errno =  __map_mman_error(GetLastError(), EPERM);
+    
+    return -1;
+}
+
+int munlock(const void *addr, size_t len)
+{
+    if (VirtualUnlock((LPVOID)addr, len))
+        return 0;
+        
+    errno =  __map_mman_error(GetLastError(), EPERM);
+    
+    return -1;
+}
diff --git a/src/app/tide/mman.h b/src/app/tide/mman.h
new file mode 100644
index 0000000..1957bf5
--- /dev/null
+++ b/src/app/tide/mman.h
@@ -0,0 +1,55 @@
+/*
+ * sys/mman.h
+ * mman-win32
+ */
+
+#ifndef _SYS_MMAN_H_
+#define _SYS_MMAN_H_
+
+#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
+#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
+#endif
+
+/* All the headers include this file. */
+#ifndef _MSC_VER
+#include <_mingw.h>
+#endif
+
+#include <sys/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define PROT_NONE       0
+#define PROT_READ       1
+#define PROT_WRITE      2
+#define PROT_EXEC       4
+
+#define MAP_FILE        0
+#define MAP_SHARED      1
+#define MAP_PRIVATE     2
+#define MAP_TYPE        0xf
+#define MAP_FIXED       0x10
+#define MAP_ANONYMOUS   0x20
+#define MAP_ANON        MAP_ANONYMOUS
+
+#define MAP_FAILED      ((void *)-1)
+
+/* Flags for msync. */
+#define MS_ASYNC        1
+#define MS_SYNC         2
+#define MS_INVALIDATE   4
+
+void*   mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);
+int     munmap(void *addr, size_t len);
+int     mprotect(void *addr, size_t len, int prot);
+int     msync(void *addr, size_t len, int flags);
+int     mlock(const void *addr, size_t len);
+int     munlock(const void *addr, size_t len);
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif /*  _SYS_MMAN_H_ */
diff --git a/src/app/tide/mod_coder.h b/src/app/tide/mod_coder.h
new file mode 100644
index 0000000..1e23d8d
--- /dev/null
+++ b/src/app/tide/mod_coder.h
@@ -0,0 +1,38 @@
+// Benjamin Diament
+
+#ifndef MOD_CODER_H
+#define MOD_CODER_H
+
+class ModCoder {
+ public:
+  typedef int Mod;
+
+  void Init(int num_unique_deltas) {
+    log_unique_deltas_ = IntLog(num_unique_deltas);
+    mask_ = (1 << log_unique_deltas_) - 1;
+  }
+
+  int EncodeMod(int aa_index, int unique_delta_index) {
+    return (aa_index << log_unique_deltas_) + unique_delta_index;
+  }
+
+  void DecodeMod(int code, int* aa_index, int* unique_delta_index) {
+    *aa_index = code >> log_unique_deltas_;
+    *unique_delta_index = code & mask_;
+  }
+
+ private:
+  static int IntLog(int x) {
+    if (x <= 1)
+      return x;
+    int res = 0;
+    for (--x; x > 0; x >>= 1)
+      ++res;
+    return res;
+  }
+
+  int log_unique_deltas_;
+  int mask_;
+};
+
+#endif // MOD_CODER_H
diff --git a/src/app/tide/modifications.h b/src/app/tide/modifications.h
new file mode 100644
index 0000000..47fd9fd
--- /dev/null
+++ b/src/app/tide/modifications.h
@@ -0,0 +1,352 @@
+// Benjamin Diament
+
+#include<climits>
+#include<algorithm>
+#include<iostream>
+#include<stdio.h>
+#if defined ( _MSC_VER ) || defined ( DARWIN )
+#include<unordered_map>
+#else
+#include<tr1/unordered_map>
+#endif
+#include "mod_coder.h"
+#include "io/carp.h"
+
+using namespace std;
+
+#define SHOW_ONE(x) { cout << (#x) << ": " << (x) << "\n"; }
+#define SHOW_PAIR(x) ((x).first) << ", " << ((x).second)
+
+enum mods_spec_type  {
+  MOD_SPEC,  //table for regular amino acid modifications
+  NTPEP, //type for n-terminal peptide modifications
+  CTPEP, //type for c-terminal peptide modifications
+  NTPRO, //type for n-terminal protein modifications
+  CTPRO  //type for c-terminal protein modifications
+};
+
+typedef enum mods_spec_type MODS_SPEC_TYPE_T;
+
+template<typename T> inline void ShowAll(const T& x) {
+  for (typename T::const_iterator it = x.begin(); it != x.end(); ++it)
+    cout << " " << (*it);
+  cout << "\n";
+}
+
+#define SHOW_ALL(x) { cout << (#x) << ":"; ShowAll((x)); }
+
+
+struct first_eq : public binary_function<pair<int, int>, pair<int, int>, bool> {
+  bool operator()(pair<int, int> x, pair<int, int> y) {
+    return x.first == y.first;
+  }
+};
+
+static bool IsAA(char c) {
+  const char* AA = "ACDEFGHIKLMNPQRSTVWYX";
+  for (; (*AA != '\0') && (*AA != c); ++AA);
+  return (*AA == c);
+}
+
+class VariableModTable {
+ public:
+  VariableModTable() { offset_ = 0;}
+
+  bool Init(const pb::ModTable& pb_mod_table) {
+    IntPairVec *possibles;
+    if (&pb_mod_table == &pb_mod_table_)
+        possibles = possibles_;
+    if (&pb_mod_table == &pb_ntpep_mod_table_)
+        possibles = possibles_ntpe_;
+    if (&pb_mod_table == &pb_ctpep_mod_table_)
+        possibles = possibles_ctpe_;
+    if (&pb_mod_table == &pb_ntpro_mod_table_)
+        possibles = possibles_ntpr_;
+    if (&pb_mod_table == &pb_ctpro_mod_table_)
+        possibles = possibles_ctpr_;
+
+    if (pb_mod_table.variable_mod_size() == 0)
+      return true;
+    vector<double>& UD = unique_delta_;
+
+#if defined _MSC_VER || defined DARWIN
+    unordered_map<double, int> deltas;
+#else
+    tr1::unordered_map<double, int> deltas;
+#endif
+    for (int i = 0; i < UD.size(); ++i)
+      deltas[UD[i]] = i;
+
+    for (int i = 0; i < pb_mod_table.variable_mod_size(); ++i) {
+      const pb::Modification& mod = pb_mod_table.variable_mod(i);
+      const string& aa = mod.amino_acids();
+      for (int j = 0; j < aa.size(); ++j) {
+        possibles[aa[j]].push_back(make_pair(deltas[mod.delta()], i + offset_));
+      }
+    }
+    offset_ += pb_mod_table.variable_mod_size();
+
+    // Check possibles lists
+    for (int i = 0; i < 256; ++i) {
+      vector<pair<int, int> >& p = possibles[i];
+      if (!IsAA(char(i)) && p.size() > 0) {
+        return false;
+      }
+      sort(p.begin(), p.end());
+      vector<pair<int, int> >::iterator dup = adjacent_find(p.begin(), p.end(), first_eq());
+      if (dup != p.end()) {
+	carp(CARP_FATAL, 
+	     "Amino acid modification %c+%g appears more than once in modifications table.",
+	     char(i), unique_delta_[dup->first]);
+        return false;
+      }
+    }
+    return true;
+  }
+
+  bool Parse(const char* spec_text, MODS_SPEC_TYPE_T mod_table = MOD_SPEC) {
+    pb::ModTable* pb_mod_table_ptr = NULL;
+    switch (mod_table) {
+    case MOD_SPEC:
+      pb_mod_table_ptr = &pb_mod_table_;
+      break;
+    case NTPEP:
+      pb_mod_table_ptr = &pb_ntpep_mod_table_;
+      break;
+    case CTPEP:
+      pb_mod_table_ptr = &pb_ctpep_mod_table_;
+      break;
+    case NTPRO:
+      pb_mod_table_ptr = &pb_ntpro_mod_table_;
+      break;
+    case CTPRO:
+      pb_mod_table_ptr = &pb_ntpro_mod_table_;
+      break;
+    }
+    if (pb_mod_table_ptr == NULL)
+      return false;
+
+    int pos = 0;
+    while (true) {
+      char c;
+      int next_pos = -1;
+      sscanf(spec_text + pos, " %c%n", &c, &next_pos);
+      if (next_pos == -1)
+        return Error(spec_text, pos, "Expected modification specification.");
+      pos += next_pos - 1;
+      unsigned int limit = 0;
+      if (c >= '1' && c <= '9') {
+        sscanf(spec_text + pos, "%u%n", &limit, &next_pos);
+        if (limit == UINT_MAX) {
+          return Error(spec_text, pos, "Limit too big.");
+        }
+        pos += next_pos;
+      }
+      int aa_len = -1, plus_pos = -1, delta_pos = -1, end_pos = -1;
+      if (mod_table == MOD_SPEC)
+        sscanf(spec_text + pos, "%*[ACDEFGHIKLMNPQRSTVWY]%n%n%*[+-]%n%*[0-9.]%n",
+               &aa_len, &plus_pos, &delta_pos, &end_pos);
+      else 
+        sscanf(spec_text + pos, "%*[ACDEFGHIKLMNPQRSTVWYX]%n%n%*[+-]%n%*[0-9.]%n",
+               &aa_len, &plus_pos, &delta_pos, &end_pos);
+
+      if (aa_len == -1)
+        return Error(spec_text, pos, "Expected amino acid symbol.");
+      assert(plus_pos != -1);
+      if (delta_pos == -1)
+        return Error(spec_text, pos + plus_pos, "Expected '+' 'or' - and modification amount.");
+      if (end_pos == -1)
+        return Error(spec_text, pos + delta_pos, "Expected modification amount.");
+      if ((limit == 0) && (aa_len != 1))
+        return Error(spec_text, pos, "Static modifications must be specified "
+                     "for one amino acid at a time.");
+      int confirm_end_pos = -1;
+      double delta;
+      sscanf(spec_text + pos + delta_pos, "%lg%n", &delta, &confirm_end_pos);
+      if (delta_pos + confirm_end_pos != end_pos)
+        return Error(spec_text, pos + delta_pos, "Cannot parse modification "
+                     "amount.");
+      if (*(spec_text + pos + plus_pos) == '-')
+        delta *= -1;
+
+      pb::Modification* mod;
+      if (limit > 1 && pb_mod_table_ptr != &pb_mod_table_)
+        limit = 1;
+
+      if (limit == 0) {
+        mod = pb_mod_table_ptr->add_static_mod();
+      } else {
+        mod = pb_mod_table_ptr->add_variable_mod();
+        mod->set_max_count(limit);
+        unique_delta_.push_back(delta);
+        max_counts_.push_back(limit);
+      }
+      mod->set_amino_acids(string(spec_text + pos, aa_len));
+      mod->set_delta(delta);
+
+      pos += end_pos;
+      if (spec_text[pos] == '\0')
+        break;
+
+      if (spec_text[pos] == ',')
+        ++pos;
+    }
+    return true;
+  }
+  void ClearTables() {
+    pb_mod_table_.Clear();
+    pb_ntpep_mod_table_.Clear();
+    pb_ctpep_mod_table_.Clear();
+    pb_ntpro_mod_table_.Clear();
+    pb_ctpro_mod_table_.Clear();
+  }
+
+  int NumPoss(char aa, MODS_SPEC_TYPE_T mod_table = MOD_SPEC) const { 
+    switch (mod_table) {
+    case MOD_SPEC:
+      return possibles_[aa].size();
+    case NTPEP:
+      return possibles_ntpe_[aa].size();
+    case CTPEP:
+      return possibles_ctpe_[aa].size();
+    case NTPRO:
+      return possibles_ntpr_[aa].size();
+    case CTPRO:
+      return possibles_ctpr_[aa].size();
+    }
+    return 0;
+  }
+
+  int PossMaxCt(char aa, int index, MODS_SPEC_TYPE_T mod_table = MOD_SPEC) const {
+    switch (mod_table) {
+    case MOD_SPEC:
+      return possibles_[aa][index].second;
+    case NTPEP:
+      return possibles_ntpe_[aa][index].second;
+    case CTPEP:
+      return possibles_ctpe_[aa][index].second;
+    case NTPRO:
+      return possibles_ntpr_[aa][index].second;
+    case CTPRO:
+      return possibles_ctpr_[aa][index].second;
+    }
+    return 0;
+  }
+
+  int PossDeltIx(char aa, int index, MODS_SPEC_TYPE_T mod_table = MOD_SPEC) const {
+    switch (mod_table) {
+    case MOD_SPEC:
+      return possibles_[aa][index].first;
+    case NTPEP:
+      return possibles_ntpe_[aa][index].first;
+    case CTPEP:
+      return possibles_ctpe_[aa][index].first;
+    case NTPRO:
+      return possibles_ntpr_[aa][index].first;
+    case CTPRO:
+      return possibles_ctpr_[aa][index].first;
+    }
+    return 0;
+  }
+
+  double PossDelta(char aa, int index) const {
+    return unique_delta_[PossDeltIx(aa, index)];
+  }
+
+#if 0
+  const IntPairVec* Possibles(char aa) const {
+    return &possibles_[aa];
+  }
+#endif
+  bool SerializeUniqueDeltas() {
+    if (unique_delta_.size() == 0)
+      return(0);
+    original_deltas_.resize(unique_delta_.size());
+    copy(unique_delta_.begin(), unique_delta_.end(), original_deltas_.begin());
+    sort(unique_delta_.begin(), unique_delta_.end());
+    unique_delta_.resize(unique(unique_delta_.begin(), unique_delta_.end()) - unique_delta_.begin());
+    coder_.Init(unique_delta_.size());
+
+    //The following these need to be in exactly the same order as parsed in the TideIndexApplication.cpp 
+    Init(pb_mod_table_);
+    Init(pb_ctpep_mod_table_);
+    Init(pb_ntpep_mod_table_);
+    Init(pb_ctpro_mod_table_);
+    Init(pb_ntpro_mod_table_);
+    SerializeUniqueDeltas(&pb_mod_table_);
+    SerializeUniqueDeltas(&pb_ctpep_mod_table_);
+    SerializeUniqueDeltas(&pb_ntpep_mod_table_);
+    SerializeUniqueDeltas(&pb_ctpro_mod_table_);
+    SerializeUniqueDeltas(&pb_ntpro_mod_table_);
+    return(1);
+  }
+
+  bool SerializeUniqueDeltas(pb::ModTable* pb_mod_table) {
+    if (pb_mod_table->unique_deltas_size() == 0) {
+      vector<double>::iterator iter = unique_delta_.begin();
+      for (; iter != unique_delta_.end(); ++iter)
+        pb_mod_table->add_unique_deltas(*iter);
+      return true;
+    }
+    // if unique deltas already specified, just confirm equality
+    if (pb_mod_table->unique_deltas_size() != unique_delta_.size())
+      return false;
+    for (int i = 0; i < unique_delta_.size(); ++i)
+      if (unique_delta_[i] != pb_mod_table->unique_deltas(i))
+        return false;
+    return true;
+  }
+
+  const pb::ModTable* ParsedModTable() const { return &pb_mod_table_; }
+  const pb::ModTable* ParsedNtpepModTable() const { return &pb_ntpep_mod_table_; }
+  const pb::ModTable* ParsedCtpepModTable() const { return &pb_ctpep_mod_table_; }
+  const vector<int>* MaxCounts() const { return &max_counts_; }
+  const vector<double>* OriginalDeltas() const { return &original_deltas_; }
+
+  int EncodeMod(int aa_index, int unique_delta_index) {
+    return coder_.EncodeMod(aa_index, unique_delta_index);
+  }
+
+  void Show() {
+    SHOW_ONE(unique_delta_.size());
+    SHOW_ALL(unique_delta_);
+    SHOW_ONE(max_counts_.size());
+    SHOW_ALL(max_counts_);
+    const char* aa = "ACDEFGHIKLMNPQRSTVWYX";
+    for (const char* c = aa; *c; ++c) {
+      cout << "possibles_[" << (*c) << "] = ";
+      for (IntPairVec::iterator i = possibles_[*c].begin();
+           i != possibles_[*c].end(); ++i) {
+        cout << "delta: " << i->first << "(" << unique_delta_[i->first] << ")"
+             << "  max_count: " << i->second << "(" << max_counts_[i->second]
+             << ")  ";
+      }
+      cout << "\n";
+    }
+  }
+  int Unique_delta_size() { return unique_delta_.size(); }
+ private:
+  bool Error(const char* spec_text, int err_pos, const char* msg) {
+    cerr << "Error: couldn't parse modification specification:\n" << spec_text
+         << "\n" << string(err_pos, ' ') << "^\n" << msg << "\n";
+    pb_mod_table_.Clear();
+    return false;
+  }
+
+  typedef vector<pair<int, int> > IntPairVec;
+  IntPairVec possibles_[256]; // unique_delta_, max_count_
+  IntPairVec possibles_ctpe_[256]; // unique_delta_, max_count_  cterminal peptide
+  IntPairVec possibles_ntpe_[256]; // unique_delta_, max_count_  nterminal peptide
+  IntPairVec possibles_ctpr_[256]; // unique_delta_, max_count_  cterminal protein
+  IntPairVec possibles_ntpr_[256]; // unique_delta_, max_count_  nterminal protein
+  vector<double> unique_delta_, original_deltas_;
+  vector<int> max_counts_;
+  int offset_;
+  ModCoder coder_;
+  pb::ModTable pb_mod_table_;      //modification table for regular amino acid modifications
+  pb::ModTable pb_ntpep_mod_table_; //modification table for n-terminal peptide modifications  
+  pb::ModTable pb_ctpep_mod_table_; //modification table for c-terminal peptide modifications
+  pb::ModTable pb_ntpro_mod_table_; //modification table for n-terminal protein modifications
+  pb::ModTable pb_ctpro_mod_table_; //modification table for c-terminal protein modifications
+};
+
diff --git a/src/app/tide/peptide.cc b/src/app/tide/peptide.cc
new file mode 100644
index 0000000..d2304e6
--- /dev/null
+++ b/src/app/tide/peptide.cc
@@ -0,0 +1,281 @@
+// Benjamin Diament
+
+#include <iostream>
+#include <limits>
+#include <gflags/gflags.h>
+#include "mass_constants.h"
+#include "max_mz.h"
+#include "fifo_alloc.h"
+#include "fixed_cap_array.h"
+#include "theoretical_peak_set.h"
+#include "peptide.h"
+#include "compiler.h"
+
+#ifdef DEBUG
+DEFINE_int32(debug_peptide_id, -1, "Peptide id to debug.");
+#endif
+
+#if 0
+DEFINE_bool(flanks, true, "Include flanking peaks.");
+DEFINE_bool(dups_ok, false, "Don't remove duplicate peaks");
+#endif
+
+string Peptide::SeqWithMods() const {
+  vector<char> buf(Len() + num_mods_ * 30 + 1);
+  int residue_pos = 0;
+  char* buf_pos = &(buf[0]);
+  for (int i = 0; i < num_mods_; ++i) {
+    int index;
+    double delta;
+    MassConstants::DecodeMod(mods_[i], &index, &delta);
+    while (residue_pos <= index)
+      *buf_pos++ = residues_[residue_pos++];
+    buf_pos += sprintf(buf_pos, "[+%.1f]", delta);
+  }
+  while (residue_pos < Len())
+    *buf_pos++ = residues_[residue_pos++];
+  *buf_pos = '\0';
+  return &(buf[0]);
+}
+
+void Peptide::Show() {
+#ifdef DEBUG
+  if (Id() == FLAGS_debug_peptide_id) {
+    cout << Seq() << endl;
+    cout << "Charge 1 Pos" << endl;
+    for (int i = 0; i < peaks_charge_1_.size(); ++i)
+      cout << "Theoretical Peak[" << peaks_charge_1_[i].Bin() << "] = "
+           << peaks_charge_1_[i].Type() << endl;
+    cout << "Charge 1 Neg" << endl;
+    for (int i = 0; i < negs_charge_1_.size(); ++i)
+      cout << "Theoretical Peak[" << negs_charge_1_[i].Bin() << "] = "
+           << negs_charge_1_[i].Type() << endl;
+    cout << "Charge 2 Pos" << endl;
+    for (int i = 0; i < peaks_charge_2_.size(); ++i)
+      cout << "Theoretical Peak[" << peaks_charge_2_[i].Bin() << "] = "
+             << peaks_charge_2_[i].Type() << endl;
+    cout << "Charge 2 Neg" << endl;
+    for (int i = 0; i < negs_charge_2_.size(); ++i)
+      cout << "Theoretical Peak[" << negs_charge_2_[i].Bin() << "] = "
+           << negs_charge_2_[i].Type() << endl;
+    cout << endl;
+  }
+#endif
+}
+
+template<class W>
+void Peptide::AddIons(W* workspace) const {
+  // Use workspace to assemble all B and Y ions. workspace will determine
+  // which, if any, associated ions will be represented.
+  double max_possible_peak = numeric_limits<double>::infinity();
+  if (MaxBin::Global().MaxBinEnd() > 0)
+    max_possible_peak = MaxBin::Global().CacheBinEnd();
+
+  vector<double> aa_masses(Len());
+  const char* residue = residues_;
+  // Collect m/z values for each residue, for z = 1, 2.
+  for (int i = 0; i < Len(); ++i, ++residue) {
+    if (i == 0) { // nterm static pep
+      aa_masses[i] = MassConstants::nterm_mono_table[*residue];
+    } else if (i == Len() - 1) { // cterm static pep
+      aa_masses[i] = MassConstants::cterm_mono_table[*residue];
+    } else { // all other mods
+      aa_masses[i] = MassConstants::mono_table[*residue];
+    }
+  }
+
+  for (int i = 0; i < num_mods_; ++i) {
+    int index;
+    double delta;
+    MassConstants::DecodeMod(mods_[i], &index, &delta);
+    aa_masses[index] += delta;
+  }
+
+  // Add all charge 1 B ions.
+  double total = aa_masses[0];
+  for (int i = 1; i < Len() && total <= max_possible_peak; ++i) {
+    workspace->AddBIon(total, 1);
+    total += aa_masses[i];
+  }
+
+  // Add all charge 1 Y ions.
+  total = aa_masses[Len() - 1];
+  for (int i = Len()-2; i >= 0 && total <= max_possible_peak; --i) {
+    workspace->AddYIon(total, 1);
+    total += aa_masses[i];
+  }
+
+  // Add all charge 2 B ions.
+  max_possible_peak = max_possible_peak*2 + 2;  //adjust for larger charge
+  total = aa_masses[0];
+  for (int i = 1; i < Len() && total <= max_possible_peak; ++i) {
+    workspace->AddBIon(total, 2);
+    total += aa_masses[i];
+  }
+
+  // Add all charge 2 Y ions.
+  total = aa_masses[Len() - 1];
+  for (int i = Len()-2; i >= 0 && total <= max_possible_peak; --i) {
+    workspace->AddYIon(total, 2);
+    total += aa_masses[i];
+  }
+}
+
+template<class W>
+void Peptide::AddBIonsOnly(W* workspace) const {
+  // Use workspace to assemble b ions only.
+  // Intended primarily to support XCorr p-value calculations.
+  double max_possible_peak = numeric_limits<double>::infinity();
+  if (MaxBin::Global().MaxBinEnd() > 0) {
+    max_possible_peak = MaxBin::Global().CacheBinEnd();
+  }
+  
+  vector<double> aa_masses(Len());
+  const char* residue = residues_;
+  // Collect m/z values for each residue, for z = 1.
+  for (int i = 0; i < Len(); ++i, ++residue) {
+    if (i == 0) { // nterm static pep
+      aa_masses[i] = MassConstants::nterm_mono_table[*residue];
+    } else if (i == Len() - 1) { // cterm static pep
+      aa_masses[i] = MassConstants::cterm_mono_table[*residue];
+    } else { // all other mods
+      aa_masses[i] = MassConstants::mono_table[*residue];
+    }
+  }
+
+  //Add modifications to amino acids
+  for (int i = 0; i < num_mods_; ++i) {
+    int index;
+    double delta;
+    MassConstants::DecodeMod(mods_[i], &index, &delta);
+    aa_masses[index] += delta;
+  }
+
+  // Add all charge 1 B ions.
+  double total = MassConstants::proton + aa_masses[0];
+  for (int i = 1; i < Len() && total <= max_possible_peak; ++i) {
+    workspace -> AddBIon(total);
+    total += aa_masses[i];
+  }
+}
+
+#ifdef DEBUG
+void DisAsm(const void* prog) {
+  unsigned char* pos = (unsigned char*) prog;
+  while (true) {
+    switch(*pos) {
+    case 3: assert(pos[1] == 130); cout << "add " << *((int*) (void*) (pos+2)) << "(%edx), %eax\n"; pos += 6; break;
+    case 43: assert(pos[1] == 130); cout << "sub " << *((int*) (void*) (pos+2)) << "(%edx), %eax\n"; pos += 6; break;
+    case 195: cout << "ret" << endl; goto out;
+    default: assert(false);
+    }
+  }
+ out:
+  return;
+}
+#endif
+
+void Peptide::Compile(const TheoreticalPeakArr* peaks,
+                      const pb::Peptide& pb_peptide,
+                      TheoreticalPeakCompiler* compiler_prog1,
+                      TheoreticalPeakCompiler* compiler_prog2) {
+  int pos_size = peaks[0].size();
+  prog1_ = compiler_prog1->Init(pos_size, 0);
+  compiler_prog1->AddPositive(peaks[0]);
+//  compiler_prog1->AddPositive(pb_peptide.peak1());
+//  compiler_prog1->AddNegative(pb_peptide.neg_peak1());
+  compiler_prog1->Done();
+
+  pos_size = peaks[0].size() + peaks[1].size();
+  prog2_ = compiler_prog2->Init(pos_size, 0);
+  compiler_prog2->AddPositive(peaks[0]);
+  compiler_prog2->AddPositive(peaks[1]);
+//  compiler_prog2->AddPositive(pb_peptide.peak2());
+//  compiler_prog2->AddNegative(pb_peptide.neg_peak2());
+  compiler_prog2->Done();
+/*    cout << Seq() << endl;
+    for (int i = 0; i < peaks[0].size(); ++i)
+      cout << "Theoretical Peak[" << peaks[0][i].Bin() << "] = "
+           << peaks[0][i].Type() << endl;
+    for (int i = 0; i < peaks[1].size(); ++i)
+      cout << "Theoretical Peak[" << peaks[1][i].Bin() << "] = "
+           << peaks[1][i].Type() << endl;
+*/
+//	exit(1);  
+}
+
+void Peptide::ComputeTheoreticalPeaks(TheoreticalPeakSet* workspace) const {
+  AddIons<TheoreticalPeakSet>(workspace);   // Generic workspace
+#ifdef DEBUG
+  Show();
+#endif
+}
+
+void Peptide::ComputeBTheoreticalPeaks(TheoreticalPeakSetBIons* workspace) const {
+  AddBIonsOnly<TheoreticalPeakSetBIons>(workspace);   // workspace for b ion only peak set
+#ifdef DEBUG
+  Show();
+#endif
+}
+
+void Peptide::ComputeTheoreticalPeaks(ST_TheoreticalPeakSet* workspace,
+                                      const pb::Peptide& pb_peptide,
+                                      TheoreticalPeakCompiler* compiler_prog1,
+                                      TheoreticalPeakCompiler* compiler_prog2) {
+  // Search-time fast workspace
+  AddIons<ST_TheoreticalPeakSet>(workspace);
+
+#if 0
+  TheoreticalPeakArr peaks[2];
+  peaks[0].Init(2000);
+  peaks[1].Init(2000);
+  workspace->GetPeaks(&peaks[0], NULL, &peaks[1], NULL, NULL);
+  Compile(peaks, pb_peptide, compiler_prog1, compiler_prog2);
+#endif
+
+  Compile(workspace->GetPeaks(), pb_peptide, compiler_prog1, compiler_prog2);
+#ifdef DEBUG
+  if (Id() == FLAGS_debug_peptide_id) {
+    cout << "Prog1:" << endl;
+    DisAsm(prog1_);
+    cout << "Prog2:" << endl;
+    DisAsm(prog2_);
+  }
+#endif
+}
+
+// return the amino acid masses in the current peptide
+double* Peptide::getAAMasses(){
+  double* masses_charge = new double[Len()];
+  const char* residue = residues_;
+  for (int i = 0; i < Len(); ++i, ++residue) {
+    if (i == 0) { // nterm static pep
+      masses_charge[i] = MassConstants::nterm_mono_table[*residue];
+    } else if (i == Len() - 1) { // cterm static pep
+      masses_charge[i] = MassConstants::cterm_mono_table[*residue];
+    } else { // all other mods
+      masses_charge[i] = MassConstants::mono_table[*residue];
+    }
+  }
+  for (int i = 0; i < num_mods_; ++i) {
+    int index;
+    double delta;
+    MassConstants::DecodeMod(mods_[i], &index, &delta);
+    masses_charge[index] += delta;
+  }
+  return masses_charge;
+}
+
+// Probably defunct, uses old calling format.
+int NoInlineDotProd(Peptide* peptide, const int* cache, int charge) {
+  const void* prog = peptide->Prog(charge);
+  int result;
+#ifdef _MSC_VER
+  // FIXME CEG add Windows compatible inline assembly
+#else
+  __asm__ __volatile__("call *%[prog]\n"
+                       : "=a" (result)
+                       : "d" (cache), [prog] "abcSD" (prog));
+#endif
+  return result;
+}
diff --git a/src/app/tide/peptide.h b/src/app/tide/peptide.h
new file mode 100644
index 0000000..b3c0352
--- /dev/null
+++ b/src/app/tide/peptide.h
@@ -0,0 +1,244 @@
+// Benjamin Diament
+
+// Peptide is a class for managing the representation of a peptide and its
+// associated theoretical peaks for use at search time. It encapsulates a
+// diverse set of functions, interacting closely with TheoreticalPeakSet,
+// TheoreticalPeakCompiler, ActivePeptideQueue, and DotProd() (defined in
+// search.cc). At indexing time this class is used with TheoreticalPeakSet to
+// store peaks to a protocol buffer.
+//
+// TODO 255: the intractions with other classes are complicated, and the various
+// functionalities here could probably be encapsulated with cleaner interfaces.
+// Perhaps one way to clean this up would be to make two different Peptide
+// classes: one for indexing and another for searching.
+//
+// At search time, ActivePeptideQueue (see active_peptide_queue.{h,cc})
+// manages the task of reading Peptides from storage and keeping current
+// candidate Peptides in memory.  Each Peptide knows how to take the dot
+// product of its theoretical peaks with a given observed spectrum.
+// Specifically, ComputeTheoreticalPeaks() generates a compiled program for
+// doing so.  A different version of the generated program exists for charge 1
+// and  charge 2.
+
+#ifndef PEPTIDE_H
+#define PEPTIDE_H
+
+#include <iostream>
+#include <vector>
+#include "raw_proteins.pb.h"
+#include "peptides.pb.h"
+#include "theoretical_peak_pair.h"
+#include "fifo_alloc.h"
+#include "mod_coder.h"
+#include "sp_scorer.h"
+
+#include "spectrum_collection.h"
+//#include "TideMatchSet.h"
+
+using namespace std;
+
+class FifoAllocator;
+class TheoreticalPeakSet;
+class TheoreticalPeakSetBIons;
+class SpScorer;
+
+
+// This is the TheoreticalPeakSet we are using at search time.  We may use a
+// different subclass  of TheoreticalPeakSet in a final version, pending more
+// tests. See Bugzilla #253.
+class TheoreticalPeakSetBYSparse;
+typedef TheoreticalPeakSetBYSparse ST_TheoreticalPeakSet; // ST="search time"
+// This is an alternative TheoreticalPeakSet
+// class TheoreticalPeakSetBYSparseOrdered;
+// typedef TheoreticalPeakSetBYSparseOrdered ST_TheoreticalPeakSet;
+// This alternative TheoreticalPeakSet is slow but slightly more flexible.
+// class TheoreticalPeakSetMakeAll;
+// typedef TheoreticalPeakSetMakeAll ST_TheoreticalPeakSet; // ST="search time"
+
+class TheoreticalPeakCompiler;
+
+// BIG CAUTION: At search time, you CANNOT expect even the IMPLICIT destructor
+// to get called!! We actually RELY on the fact that when we use FIFO
+// allocation, the destructor won't get called. We expect the destructor to 
+// get called only when the object is created using the normal system memory
+// allocation. This way, we can use the destructor to clean up the system 
+// memory allocated for mods_ when FIFO allocation is NOT used.
+class Peptide {
+ public:
+  // The proteins parameter is presumed to live in memory all the while the
+  // Peptide exists, so that residues_ can refer to the amino acid sequence.
+  Peptide(const pb::Peptide& peptide,
+          const vector<const pb::Protein*>& proteins,
+          FifoAllocator* fifo_alloc = NULL)
+    : len_(peptide.length()), mass_(peptide.mass()), id_(peptide.id()),
+    first_loc_protein_id_(peptide.first_location().protein_id()),
+    first_loc_pos_(peptide.first_location().pos()), 
+    has_aux_locations_index_(peptide.has_aux_locations_index()),
+    aux_locations_index_(peptide.aux_locations_index()),
+    mods_(NULL), num_mods_(0), decoy_(peptide.is_decoy()),
+    prog1_(NULL), prog2_(NULL) {
+    // Set residues_ by pointing to the first occurrence in proteins.
+    residues_ = proteins[first_loc_protein_id_]->residues().data() 
+                    + first_loc_pos_;
+    if (peptide.modifications_size() > 0) {
+      num_mods_ = peptide.modifications_size();
+      if (fifo_alloc) {
+        mods_ = (ModCoder::Mod*) fifo_alloc->New(sizeof(mods_[0]) * num_mods_);
+      } else {
+        mods_ = new ModCoder::Mod[num_mods_];
+      }
+      for (int i = 0; i < num_mods_; ++i)
+        mods_[i] = ModCoder::Mod(peptide.modifications(i));
+    }
+  }
+  class spectrum_matches {
+   public:
+      spectrum_matches(Spectrum* spectrum, double score1, double score2,
+          int score3, int charge) {
+          spectrum_ = spectrum;
+          score1_ = score1;
+          score2_ = score2;
+          score3_ = score3;
+          charge_ = charge;
+          d_cn_ = 0.0;
+          elution_score_ = 0.0;
+      }
+      spectrum_matches() {
+          spectrum_ = NULL;
+          score1_ = 0.0;
+          score2_ = 0.0;
+          score3_ = 0.0;
+          charge_ = 0;
+          d_cn_ = 0.0;
+          elution_score_ = 0.0;
+      }
+      Spectrum* spectrum_;
+      double score1_;
+      double score2_;
+      int score3_;
+      int charge_;
+      double d_cn_;
+      double elution_score_;
+      SpScorer::SpScoreData spData_;
+
+      static bool compPV(const spectrum_matches &a, const spectrum_matches &b) {
+          return a.score1_ < b.score1_;
+      }
+      static bool compSC(const spectrum_matches &a, const spectrum_matches &b) {
+          return a.score1_ > b.score1_;
+      }
+      static bool compRT(const spectrum_matches &a, const spectrum_matches &b) {
+        return a.spectrum_->RTime() < b.spectrum_->RTime();
+      }
+      static bool compES(const spectrum_matches &a, const spectrum_matches &b) {
+        return a.elution_score_ < b.elution_score_;
+      }
+  };
+  vector<spectrum_matches> spectrum_matches_array;
+  void AddHit(Spectrum* spectrum, double score1, double score2,
+          int score3, int charge) {
+
+    spectrum_matches_array.push_back(spectrum_matches(spectrum,
+                                     score1, score2, score3, charge));
+  }
+
+  // CAUTION: We do NOT expect this destructor to get called when FIFO 
+  // allocation is used. It will get called only when normal system memory
+  // is used for allocation. Please see the BIG CAUTION message at the top 
+  // of the class definition for details.
+  ~Peptide() {
+    delete[] mods_;
+  }
+
+  // Allocation by FifoAllocator
+  void* operator new(size_t size, FifoAllocator* fifo_alloc) {
+    return fifo_alloc->New(size);
+  }
+
+  string Seq() const { return string(residues_, Len()); } // For display
+
+  string SeqWithMods() const;
+
+  // Compute and cache set of theoretical peaks using the provided workspace.
+  // Workspace exists for efficiency: it can be reused by another Peptide
+  // without reallocating memory. The pb_peptide should be the same as supplied
+  // during construction, but this class doesn't own or store the underlying
+  // pb::Peptide, as it is probably not FifoAllocated.
+  // The first version takes a generic workspace (good for index generation and
+  // testing). The second version is intended to be faster at search time: a
+  // specific subclass of TheoreticalPeakSet is given, which should avoid
+  // associated virtual method calls. (TODO 256: are virtual method calls indeed
+  // avoided?).  The second version also produces the compiled programs for
+  // taking dot products.
+  void ComputeTheoreticalPeaks(TheoreticalPeakSet* workspace) const;
+  void ComputeTheoreticalPeaks(ST_TheoreticalPeakSet* workspace,
+                               const pb::Peptide& pb_peptide,
+                               TheoreticalPeakCompiler* compiler_prog1,
+                               TheoreticalPeakCompiler* compiler_prog2);
+  void ComputeBTheoreticalPeaks(TheoreticalPeakSetBIons* workspace) const;
+
+  // Return the appropriate program depending on the precursor charge.
+  // TODO 257: fix the unfortunate use of max_charge.
+  const void* Prog(int max_charge) const {
+    return max_charge <= 2 ? prog1_ : prog2_;
+  }
+
+  void ReleaseFifo(FifoAllocator* fifo_alloc_prog1,
+       FifoAllocator* fifo_alloc_prog2) {
+    // TODO 258: this code should probably move to ActivePeptideQueue
+    if (prog1_ != NULL) {
+      fifo_alloc_prog1->Release(prog1_);
+    } else {
+      fifo_alloc_prog1->ReleaseAll();
+    }
+    if (prog2_ != NULL) {
+      fifo_alloc_prog2->Release(prog2_);
+    } else {
+      fifo_alloc_prog2->ReleaseAll();
+    }
+  }
+
+  int Len() const { return len_; }
+  double Mass() const { return mass_; }
+  int Id() const { return id_; }
+  int FirstLocProteinId() const { return first_loc_protein_id_; }
+  int FirstLocPos() const { return first_loc_pos_; }
+  bool HasAuxLocationsIndex() const { return has_aux_locations_index_; }
+  int AuxLocationsIndex() const { return aux_locations_index_; }
+  int Mods(const ModCoder::Mod** mods) const {
+    *mods = mods_;
+    return num_mods_;
+  }
+  ModCoder::Mod* Mods() const { return mods_; }
+  bool IsDecoy() const { return decoy_; }
+  double* getAAMasses();
+
+ private:
+  template<class W> void AddIons(W* workspace) const;
+  template<class W> void AddBIonsOnly(W* workspace) const;
+
+  void Compile(const TheoreticalPeakArr* peaks,
+               const pb::Peptide& pb_peptide,
+               TheoreticalPeakCompiler* compiler_prog1,
+               TheoreticalPeakCompiler* compiler_prog2);
+          
+
+  void Show();
+
+  int len_;
+  double mass_;
+  int id_;
+  int first_loc_protein_id_;
+  int first_loc_pos_;
+  bool has_aux_locations_index_;
+  int aux_locations_index_;
+  const char* residues_;
+  int num_mods_;
+  ModCoder::Mod* mods_;
+  bool decoy_;
+
+  void* prog1_;
+  void* prog2_;
+};
+
+#endif // PEPTIDE_H
diff --git a/src/app/tide/peptide_mods3.cc b/src/app/tide/peptide_mods3.cc
new file mode 100644
index 0000000..f1bb13e
--- /dev/null
+++ b/src/app/tide/peptide_mods3.cc
@@ -0,0 +1,498 @@
+// Benjamin Diament
+//
+
+#include <stdio.h>
+#ifndef _MSC_VER
+#include <unistd.h>
+#else
+#include <windows.h>
+#endif
+#include <string>
+#include <vector>
+#include <algorithm>
+#include <numeric>
+#include <gflags/gflags.h>
+#include "abspath.h"
+#include "records.h"
+#include "records_to_vector-inl.h"
+#include "header.pb.h"
+#include "raw_proteins.pb.h"
+#include "peptides.pb.h"
+#include "mass_constants.h"
+#include "modifications.h"
+#include "util/FileUtils.h"
+#include "io/carp.h"
+
+using namespace std;
+
+#define CHECK(x) GOOGLE_CHECK(x)
+
+DEFINE_int32(buf_size, 1024, "Buffer size for files, in KBytes.");
+DEFINE_int32(max_mods, 255, "Maximum number of modifications that can be applied "
+                            "to a single peptide.");
+DEFINE_int32(min_mods, 0, "Minimum number of modifications that can be applied "
+                          "to a single peptide.");
+
+static string GetTempName(string tmpDir, int filenum) {
+  char buf[36];
+  sprintf(buf, "modified_peptides_partial_%d", filenum);
+  if (tmpDir != "") {
+    return FileUtils::Join(tmpDir, buf);
+  }    
+#ifdef _MSC_VER
+  char buf2[261];
+  GetTempPath(261, buf2);
+  return FileUtils::Join(string(buf2), buf);
+#else
+  return FileUtils::Join(string("/tmp/"), buf);
+#endif
+}
+
+class ModsOutputter {
+ public:
+  unsigned long modpeptidecnt_;
+  ModsOutputter(string tmpDir,
+                const vector<const pb::Protein*>& proteins,
+		VariableModTable* var_mod_table,
+		HeadedRecordWriter* final_writer)
+    : proteins_(proteins),
+      mod_table_(var_mod_table),
+      max_counts_(*mod_table_->MaxCounts()),
+      counts_mapper_vec_(max_counts_.size(), 0),
+      final_writer_(final_writer),
+      count_(0) {
+    InitCountsMapper(tmpDir);
+  }
+
+  ~ModsOutputter() {
+    for (int i = 0; i < writers_.size(); ++i)
+      delete writers_[i];
+    Merge();
+  }
+
+  void Output(pb::Peptide* peptide) {
+    peptide_ = peptide;
+    const pb::Location& loc = peptide->first_location();
+    residues_ = proteins_[loc.protein_id()]->residues().data() + loc.pos();
+    vector<int> counts(max_counts_.size(), 0);
+    OutputNtermMods(0, counts);
+  }
+
+ private:
+  string tmpDir_;
+  void OutputMods(int pos, vector<int>& counts);
+  void OutputNtermMods(int pos, vector<int>& counts);
+  void OutputCtermMods(int pos, vector<int>& counts);
+  void Merge();
+
+  void InitCountsMapper(string tmpDir) {
+    tmpDir_ = tmpDir;
+    
+    int prod = 1;
+    for (int i = 0; i < max_counts_.size(); ++i) {
+      counts_mapper_vec_[i] = prod;
+      if (max_counts_[i] == 0)
+        prod *= (max_counts_[i]+2);
+      else
+        prod *= (max_counts_[i]+1);
+    }
+
+    writers_.resize(prod);
+    if (prod > 100) {
+      carp(CARP_INFO, "Opening %d files for modifications.", prod);
+    }
+
+    for (int i = 0; i < prod; ++i) {
+      writers_[i] = new RecordWriter(GetTempName(tmpDir, i), FLAGS_buf_size << 10);
+      if (!writers_[i]->OK()) {
+        // delete temporary files
+        for (int j = 0; j < i; ++j)
+          unlink(GetTempName(tmpDir, j).c_str());
+        CHECK(writers_[i]->OK());
+      }
+    }
+
+    const vector<double>& deltas = *mod_table_->OriginalDeltas();
+    delta_by_file_.resize(prod);
+    for (int i = 0; i < prod; ++i) {
+      double total_delta = 0;
+      int x = i;
+      for (int j = max_counts_.size() - 1; j >= 0; --j) {
+        int digit = x / counts_mapper_vec_[j];
+        x %= counts_mapper_vec_[j];
+        total_delta += deltas[j] * digit;
+      }
+      delta_by_file_[i] = total_delta;
+    }
+  }
+
+  int TotalMods(const vector<int>& counts) {
+    return accumulate(counts.begin(), counts.end(), 0);
+  }
+
+  int DotProd(const vector<int>& counts) {
+    int dot = 0;
+    for (int i = 0; i < counts.size(); ++i)
+      dot += counts_mapper_vec_[i] * counts[i];
+    return dot;
+  }
+
+  RecordWriter* Write(const vector<int>& counts) {
+    ++modpeptidecnt_;
+    int index = DotProd(counts);
+    double mass = peptide_->mass();
+    peptide_->set_mass(delta_by_file_[index] + mass);
+    if (!writers_[index]->Write(peptide_)) {
+      carp(CARP_FATAL, "I/O error writing modifications");
+    }
+    peptide_->set_mass(mass);
+    return writers_[index];
+  }
+
+  const vector<const pb::Protein*>& proteins_;
+  VariableModTable* mod_table_;
+  const vector<int>& max_counts_;
+  vector<int> counts_mapper_vec_;
+  vector<RecordWriter*> writers_;
+  vector<double> delta_by_file_;
+  HeadedRecordWriter* final_writer_;
+  int count_;
+
+  pb::Peptide* peptide_;
+  const char* residues_;
+};
+
+//terminal modifications count as a modification and hence 
+//it is taken into account the modification limit.
+void ModsOutputter::OutputMods(int pos, vector<int>& counts) {
+  if (TotalMods(counts) > FLAGS_max_mods) {
+    return;
+  }
+  if (pos == peptide_->length()) {
+    OutputCtermMods(pos-1, counts);
+  } else {
+    if (pos == peptide_->length()-1){
+      OutputCtermMods(pos, counts);
+    } else {
+      char aa = residues_[pos];
+      int num_poss = mod_table_->NumPoss(aa);
+      for (int i = 0; i < num_poss; ++i) {
+        int poss_max_ct = mod_table_->PossMaxCt(aa, i);
+        if (counts[poss_max_ct] < max_counts_[poss_max_ct]) {
+          ++counts[poss_max_ct];
+          int delta_index = mod_table_->PossDeltIx(aa, i);
+          peptide_->add_modifications(mod_table_->EncodeMod(pos, delta_index));
+          OutputMods(pos+1, counts);
+          peptide_->mutable_modifications()->RemoveLast();
+          --counts[poss_max_ct];
+        }
+      }
+      // Having this call to OutputMods come last is, in fact, correct, but it's
+      // tricky to see why. When modified peptides have equal mass, we want
+      // modified positions toward the front of the peptide to appear before those
+      // that come toward the end of the peptide. Having this call at the end
+      // achieves that.
+      OutputMods(pos+1, counts); // without further mods
+    }
+  }
+}
+
+void ModsOutputter::OutputNtermMods(int pos, vector<int>& counts) {
+  if (TotalMods(counts) > FLAGS_max_mods) {
+    return;
+  }
+  bool any_term_modification = false;
+
+  //add static N-terminal modifications
+  char aa = residues_[0];
+  int num_poss = mod_table_->NumPoss(aa, NTPEP);
+  for (int i = 0; i < num_poss; ++i) {
+    int poss_max_ct = mod_table_->PossMaxCt(aa, i, NTPEP);
+    if (max_counts_[poss_max_ct] == 0) {
+      int delta_index = mod_table_->PossDeltIx(aa, i, NTPEP);
+      peptide_->add_modifications(mod_table_->EncodeMod(pos, delta_index));
+      OutputMods(1, counts);
+      peptide_->mutable_modifications()->RemoveLast();
+      any_term_modification = true;
+    }
+  }
+  aa = 'X';
+  num_poss = mod_table_->NumPoss(aa, NTPEP);
+  for (int i = 0; i < num_poss; ++i) {
+    int poss_max_ct = mod_table_->PossMaxCt(aa, i, NTPEP);
+    if (max_counts_[poss_max_ct] == 0) {
+      int delta_index = mod_table_->PossDeltIx(aa, i, NTPEP);
+      peptide_->add_modifications(mod_table_->EncodeMod(pos, delta_index));
+      OutputMods(1, counts);
+      peptide_->mutable_modifications()->RemoveLast();
+      any_term_modification = true;
+    }
+  }
+  if (any_term_modification == false){
+    //if there were no static modificatinos add variable terminal modifications
+    aa = residues_[0];
+    num_poss = mod_table_->NumPoss(aa, NTPEP);
+    for (int i = 0; i < num_poss; ++i) {
+      int poss_max_ct = mod_table_->PossMaxCt(aa, i, NTPEP);
+      if (max_counts_[poss_max_ct] == 1) {
+        ++counts[poss_max_ct];
+        int delta_index = mod_table_->PossDeltIx(aa, i, NTPEP);
+        peptide_->add_modifications(mod_table_->EncodeMod(pos, delta_index));
+        OutputMods(1, counts);
+        peptide_->mutable_modifications()->RemoveLast();
+        --counts[poss_max_ct];
+        any_term_modification = true;
+      }
+    }
+    aa = 'X';
+    num_poss = mod_table_->NumPoss(aa, NTPEP);
+    for (int i = 0; i < num_poss; ++i) {
+      int poss_max_ct = mod_table_->PossMaxCt(aa, i, NTPEP);
+      if (max_counts_[poss_max_ct] == 1) {
+        ++counts[poss_max_ct];
+        int delta_index = mod_table_->PossDeltIx(aa, i, NTPEP);
+        peptide_->add_modifications(mod_table_->EncodeMod(pos, delta_index));
+        OutputMods(1, counts);
+        peptide_->mutable_modifications()->RemoveLast();
+        --counts[poss_max_ct];
+        any_term_modification = true;
+      }
+    }
+    OutputMods(0, counts);
+  }
+}
+
+void ModsOutputter::OutputCtermMods(int pos, vector<int>& counts) {
+  int total = TotalMods(counts);
+  if (total > FLAGS_max_mods) {
+    return;
+  } else if (total == FLAGS_max_mods) {
+    if (total >= FLAGS_min_mods) {
+      peptide_->set_id(count_++);
+      Write(counts);
+    }
+    return;
+  }
+
+  bool any_term_modification = false;
+  char aa = residues_[pos];
+  int num_poss = mod_table_->NumPoss(aa, CTPEP);
+  for (int i = 0; i < num_poss; ++i) {
+    int poss_max_ct = mod_table_->PossMaxCt(aa, i, CTPEP);
+    if (max_counts_[poss_max_ct] == 0) {
+      int delta_index = mod_table_->PossDeltIx(aa, i, CTPEP);
+      peptide_->add_modifications(mod_table_->EncodeMod(pos, delta_index));
+
+      if (TotalMods(counts) >= FLAGS_min_mods) {
+        peptide_->set_id(count_++);
+        Write(counts);
+      }
+
+      peptide_->mutable_modifications()->RemoveLast();
+      any_term_modification = true;
+    }
+  }
+  aa = 'X';
+  num_poss = mod_table_->NumPoss(aa, CTPEP);
+  for (int i = 0; i < num_poss; ++i) {
+    int poss_max_ct = mod_table_->PossMaxCt(aa, i, CTPEP);
+    if (max_counts_[poss_max_ct] == 0) {
+      int delta_index = mod_table_->PossDeltIx(aa, i, CTPEP);
+      peptide_->add_modifications(mod_table_->EncodeMod(pos, delta_index));
+
+      if (TotalMods(counts) >= FLAGS_min_mods) {
+        peptide_->set_id(count_++);
+        Write(counts);
+      }
+
+      peptide_->mutable_modifications()->RemoveLast();
+      any_term_modification = true;
+    }
+  }
+  if (any_term_modification == false){
+    //if there were no static modifications add amino acid mods
+    char aa = residues_[pos];
+    int num_poss = mod_table_->NumPoss(aa);
+    for (int i = 0; i < num_poss; ++i) {
+      int poss_max_ct = mod_table_->PossMaxCt(aa, i);
+      if (counts[poss_max_ct] < max_counts_[poss_max_ct]) {
+        ++counts[poss_max_ct];
+        int delta_index = mod_table_->PossDeltIx(aa, i);
+        peptide_->add_modifications(mod_table_->EncodeMod(pos, delta_index));
+
+        if (TotalMods(counts) >= FLAGS_min_mods) {
+          peptide_->set_id(count_++);
+          Write(counts);
+        }
+
+        peptide_->mutable_modifications()->RemoveLast();
+        --counts[poss_max_ct];
+      }
+    }
+
+    //add variable c-terminal mods
+    aa = residues_[pos];
+    num_poss = mod_table_->NumPoss(aa, CTPEP);
+    for (int i = 0; i < num_poss; ++i) {
+      int poss_max_ct = mod_table_->PossMaxCt(aa, i, CTPEP);
+      if (max_counts_[poss_max_ct] == 1) {
+        ++counts[poss_max_ct];
+        int delta_index = mod_table_->PossDeltIx(aa, i, CTPEP);
+        peptide_->add_modifications(mod_table_->EncodeMod(pos, delta_index));
+
+        if (TotalMods(counts) >= FLAGS_min_mods) {
+          peptide_->set_id(count_++);
+          Write(counts);
+        }
+
+        peptide_->mutable_modifications()->RemoveLast();
+        --counts[poss_max_ct];
+        any_term_modification = true;
+      }
+    }
+    aa = 'X';
+    num_poss = mod_table_->NumPoss(aa, CTPEP);
+    for (int i = 0; i < num_poss; ++i) {
+      int poss_max_ct = mod_table_->PossMaxCt(aa, i, CTPEP);
+      if (max_counts_[poss_max_ct] == 1) {
+        ++counts[poss_max_ct];
+        int delta_index = mod_table_->PossDeltIx(aa, i, CTPEP);
+        peptide_->add_modifications(mod_table_->EncodeMod(pos, delta_index));
+
+        if (TotalMods(counts) >= FLAGS_min_mods) {
+          peptide_->set_id(count_++);
+          Write(counts);
+        }
+        
+        peptide_->mutable_modifications()->RemoveLast();
+        --counts[poss_max_ct];
+        any_term_modification = true;
+      }
+    }
+    if (TotalMods(counts) >= FLAGS_min_mods) {
+      peptide_->set_id(count_++);
+      Write(counts);    
+    }
+  }
+}
+
+class PepReader {
+ public:
+  PepReader(const string& filename)
+    : reader_(filename, FLAGS_buf_size << 10) {
+    CHECK(reader_.OK());
+  }
+
+  bool operator<(const PepReader& other) {
+    double mass = current_.mass();
+    double other_mass = other.current_.mass();
+    if (mass < other_mass)
+      return true;
+    if (mass > other_mass)
+      return false;
+    return current_.id() < other.current_.id();
+  }
+
+  bool Advance() {
+    if (reader_.Done())
+      return false;
+    reader_.Read(&current_);
+    CHECK(reader_.OK());
+    return true;
+  }
+
+  pb::Peptide* Current() { return &current_; }
+
+ private:
+  RecordReader reader_;
+  pb::Peptide current_;
+};
+
+struct greater_pepreader
+  : public binary_function<PepReader*, PepReader*, bool> {
+  bool operator()(PepReader* x, PepReader* y) {
+    if (x == y)
+      return false;
+    return *y < *x;
+  }
+};
+
+void ModsOutputter::Merge() {
+  int num_files = writers_.size();
+  vector<PepReader*> readers(num_files);
+  for (int i = 0; i < num_files; ++i)
+    readers[i] = new PepReader(GetTempName(tmpDir_, i));
+
+  // initialize heap
+  PepReader** heap_end = &(readers[0]) + num_files;
+  for (PepReader** reader = &(readers[0]); reader < heap_end; ++reader)
+    if (!(*reader)->Advance())
+      swap(*reader--, *--heap_end);
+  make_heap(&(readers[0]), heap_end, greater_pepreader());
+  
+  // do heap merge
+  int id = 0;
+#ifndef NDEBUG
+  double last_mass = 0.0;
+#endif
+  while (heap_end > &(readers[0])) {
+    pop_heap(&(readers[0]), heap_end, greater_pepreader());
+    pb::Peptide* current = (*(heap_end-1))->Current();
+    current->set_id(id++);
+#ifndef NDEBUG
+    assert(current->mass() >= last_mass);
+    last_mass = current->mass();
+#endif
+    final_writer_->Write(current);
+    CHECK(final_writer_->OK());
+    if ((*(heap_end-1))->Advance()) {
+      push_heap(&(readers[0]), heap_end, greater_pepreader());
+    } else {
+      --heap_end;
+    }
+  }
+
+  // delete temporary files
+  for (int i = 0; i < num_files; ++i) {
+    delete readers[i];
+    unlink(GetTempName(tmpDir_, i).c_str());
+  }
+}
+
+void AddMods(HeadedRecordReader* reader, string out_file,
+             string tmpDir,
+	     const pb::Header& header,
+	     const vector<const pb::Protein*>& proteins, 
+	     VariableModTable& var_mod_table) {
+  CHECK(reader->OK());
+  HeadedRecordWriter writer(out_file, header, FLAGS_buf_size << 10);
+  CHECK(writer.OK());
+  ModsOutputter outputter(tmpDir, proteins, &var_mod_table, &writer);
+  outputter.modpeptidecnt_ = 0; 
+  pb::Peptide peptide;
+  while (!reader->Done()) {
+    CHECK(reader->Read(&peptide));
+    outputter.Output(&peptide);
+  } 
+  carp(CARP_INFO, "Created %d peptides.", outputter.modpeptidecnt_);
+  CHECK(reader->OK());
+}
+
+void AddMods(HeadedRecordReader* reader, string out_file,
+             string tmpDir,
+	     const pb::Header& header,
+	     const vector<const pb::Protein*>& proteins) {
+  VariableModTable var_mod_table;
+  var_mod_table.Init(header.peptides_header().mods());
+  CHECK(reader->OK());
+  HeadedRecordWriter writer(out_file, header, FLAGS_buf_size << 10);
+  CHECK(writer.OK());
+  ModsOutputter outputter(tmpDir, proteins, &var_mod_table, &writer);
+
+  pb::Peptide peptide;
+  while (!reader->Done()) {
+    CHECK(reader->Read(&peptide));
+    outputter.Output(&peptide);
+  }
+  CHECK(reader->OK());
+}
diff --git a/src/app/tide/peptide_peaks.cc b/src/app/tide/peptide_peaks.cc
new file mode 100644
index 0000000..8630186
--- /dev/null
+++ b/src/app/tide/peptide_peaks.cc
@@ -0,0 +1,97 @@
+// Benjamin Diament
+//
+// Add to the index of peptide records the pre-computed theoretical peaks.
+// We store the TheoreticalPeakSetDiff (q.v.) for each peptide. 
+//
+// Example command-line:
+// peptide_peaks --proteins=<raw_proteins.proto input file> \
+//               --in_peptides=<peptides.proto input file> \
+//               --out_peptides=<peptides.proto output file> \
+// 
+// Rather than store the code for each peak in the diff set, we store the
+// delta between each pair. This gives us a bit of compression since the
+// values are stored as varint. The peak locations then have to be restored
+// at search time.
+//
+// TODO 248: We're only doing this to guarantee the exact same results as Crux
+// used to return, but perhaps the diffs don't really add useful info, in which 
+// case we could eliminate them.
+
+#include <stdio.h>
+#include <iostream>
+#include <string>
+#include <vector>
+#include "records.h"
+#include "peptide.h"
+#include "theoretical_peak_set.h"
+#include "abspath.h"
+
+using namespace std;
+
+#define CHECK(x) GOOGLE_CHECK(x)
+/*
+static void AddPeaksToPB(pb::Peptide* peptide, const TheoreticalPeakArr* peaks,
+			 int charge, bool neg) {
+  int last_code = 0;
+  TheoreticalPeakArr::const_iterator i = peaks->begin();
+  for (; i != peaks->end(); ++i) {
+    int delta = i->Code() - last_code;
+    last_code = i->Code();
+    if (neg) {
+      if (charge == 1) {
+        peptide->add_neg_peak1(delta);
+      } else {
+        peptide->add_neg_peak2(delta);
+      }
+    } else {
+      if (charge == 1) {
+        peptide->add_peak1(delta);
+      } else {
+        peptide->add_peak2(delta);
+      }
+    }
+  }
+}
+*/
+
+void AddTheoreticalPeaks(const vector<const pb::Protein*>& proteins,
+			 const string& input_filename,
+			 const string& output_filename) {
+  pb::Header orig_header, new_header;
+  HeadedRecordReader reader(input_filename, &orig_header);
+  CHECK(orig_header.file_type() == pb::Header::PEPTIDES);
+  CHECK(orig_header.has_peptides_header());
+//  MassConstants::Init(&orig_header.peptides_header().mods());
+  new_header.set_file_type(pb::Header::PEPTIDES);
+  pb::Header_PeptidesHeader* subheader = new_header.mutable_peptides_header();
+  subheader->CopyFrom(orig_header.peptides_header());
+  subheader->set_has_peaks(true);
+  pb::Header_Source* source = new_header.add_source();
+  source->mutable_header()->CopyFrom(orig_header);
+  source->set_filename(AbsPath(input_filename));
+  HeadedRecordWriter writer(output_filename, new_header);
+  CHECK(reader.OK());
+  CHECK(writer.OK());
+
+  pb::Peptide pb_peptide;
+//  const int workspace_size = 2000; // More than sufficient for theor. peaks.
+//  TheoreticalPeakSetDiff workspace(workspace_size);
+  while (!reader.Done()) {
+    reader.Read(&pb_peptide);
+/*    Peptide peptide(pb_peptide, proteins);
+    workspace.Clear();
+    peptide.ComputeTheoreticalPeaks(&workspace);
+    TheoreticalPeakArr peaks_charge_1(2000);
+    TheoreticalPeakArr peaks_charge_2(2000);
+    TheoreticalPeakArr negs_charge_1(2000);
+    TheoreticalPeakArr negs_charge_2(2000);
+    workspace.GetPeaks(&peaks_charge_1, &negs_charge_1,
+		       &peaks_charge_2, &negs_charge_2, NULL);
+    AddPeaksToPB(&pb_peptide, &peaks_charge_1, 1, false);
+    AddPeaksToPB(&pb_peptide, &peaks_charge_2, 2, false);
+    AddPeaksToPB(&pb_peptide, &negs_charge_1, 1, true);
+    AddPeaksToPB(&pb_peptide, &negs_charge_2, 2, true);
+*/    CHECK(writer.Write(&pb_peptide));
+  }
+  CHECK(reader.OK());
+}
diff --git a/src/app/tide/protobuf/header.proto b/src/app/tide/protobuf/header.proto
new file mode 100644
index 0000000..5348dd6
--- /dev/null
+++ b/src/app/tide/protobuf/header.proto
@@ -0,0 +1,81 @@
+// Benjamin Diament
+// We place a header record at the top of every Tide-generated file
+// to indicate the settings and sources used to generate it.
+
+package pb;
+
+message Modification {
+  optional string amino_acids = 1;
+  optional double delta = 2;
+  optional int32 max_count = 3;
+}
+
+message ModTable {
+  repeated Modification variable_mod = 1;
+  repeated Modification static_mod = 2;
+  repeated double unique_deltas = 10;
+}
+
+message Header {
+  enum FileType {
+    RAW_PROTEINS = 0;
+    PEPTIDES = 1;
+    SPECTRA = 2;
+    PARAMS = 3;
+    MOD_TABLE = 4;
+    RESULTS = 5;
+    AUX_LOCATIONS = 6;
+  }
+
+  message Source { // represents a source file used in building current file.
+    optional string filename = 1;
+    optional Header header = 2; // either header or filetype should be given.
+    optional string filetype = 3;
+  }
+
+  message RawProteinsHeader {
+  }
+
+  message PeptidesHeader {
+    optional double min_mass = 3;
+    optional double max_mass = 4;
+    optional int32 min_length = 5;
+    optional int32 max_length = 6;
+    optional string enzyme = 7;
+    optional bool full_digestion = 8;
+    optional int32 max_missed_cleavages = 14;
+    optional bool monoisotopic_precursor = 13;
+
+    optional bool has_peaks = 10;
+    optional double downselect_fraction = 11;
+    optional ModTable mods = 12;
+    optional ModTable nterm_mods = 15;
+    optional ModTable cterm_mods = 16;
+    optional int32 decoys = 9;
+  }
+
+  message SpectraHeader {
+    optional bool sorted = 2;
+  }
+  
+  message ResultsHeader {
+    optional double mass_window = 1;
+    optional int32 top_matches = 2;
+    optional PeptidesHeader peptides_header = 3;
+  }
+  
+  message AuxLocationsHeader {
+  }
+
+  repeated Source source = 1;
+
+  // The FileType should be indicated and one of the three header subfields
+  // should be included to correspond to the type.
+  required FileType file_type = 2;
+  optional RawProteinsHeader raw_proteins_header = 3;
+  optional PeptidesHeader peptides_header = 4;
+  optional SpectraHeader spectra_header = 5;
+  optional ResultsHeader results_header = 6;
+  optional AuxLocationsHeader aux_locs_header = 7;
+  optional string command_line = 8;
+}
diff --git a/src/app/tide/protobuf/peptides.proto b/src/app/tide/protobuf/peptides.proto
new file mode 100644
index 0000000..f622852
--- /dev/null
+++ b/src/app/tide/protobuf/peptides.proto
@@ -0,0 +1,50 @@
+option optimize_for = SPEED;
+package pb;
+
+import "raw_proteins.proto";
+
+message Location {
+  optional int32 protein_id = 1; 
+  // Typically, the id numbers in the file of proteins are expected to be
+  // numbered sequentially, so that this field can be treated as a pointer.
+  optional int32 pos = 2; // Start position within protein.
+}
+
+message Peptide {
+  // Comments below refer to usual practice when peptides appear in a file of
+  // records sorted by mass.
+  optional int32 id = 1; // Numbered sequentially.
+  optional double mass = 2; // Neutral mass.
+  optional int32 length = 3; // Number of amino acids.
+  optional Location first_location = 4; // First location within protein
+
+  enum Series { // Not used.
+    Y = 0;
+    B = 1;
+  }
+
+  // These fields represent the symetric vector difference between the
+  // correctly computed set of theoretical peaks and the approximate set
+  // set of theoretical peaks. peak1 and peak2 refer to positive values;
+  // neg_peak1 and neg_peak2 refer to negative values. See 
+  // theoretical_peak_set.h
+  // peak1 and neg_peak1 refer to charge 1 ions, and peak2 and neg_peak2 
+  // refer to charge 2 ions.
+  repeated int32 peak1 = 5 [packed = true];
+  repeated int32 peak2 = 6 [packed = true];
+  repeated int32 neg_peak1 = 7 [packed = true];
+  repeated int32 neg_peak2 = 8 [packed = true];
+
+  // array of (index << log_num_unique_deltas + mod), where index is the amino
+  // acid with the mod, which is an entry into unique_deltas in the ModTable.
+  repeated int32 modifications = 9 [packed = true];
+  
+  optional int32 aux_locations_index = 10; // Array index into AuxLocation
+  optional bool is_decoy = 11;
+
+}
+
+message AuxLocation {
+  repeated Location location = 1;
+}
+
diff --git a/src/app/tide/protobuf/raw_proteins.proto b/src/app/tide/protobuf/raw_proteins.proto
new file mode 100644
index 0000000..b670f86
--- /dev/null
+++ b/src/app/tide/protobuf/raw_proteins.proto
@@ -0,0 +1,10 @@
+option optimize_for = SPEED;
+package pb;
+
+message Protein {
+  optional string name = 1;
+  optional int32 id = 2; // In a file of records of type Protein ids will
+                         // usually be numbered sequentially.
+  optional string residues = 3;
+  optional int32 target_pos = 5;  // Index in target protein that this decoy protein is from
+}
diff --git a/src/app/tide/protobuf/results.proto b/src/app/tide/protobuf/results.proto
new file mode 100644
index 0000000..051f9b9
--- /dev/null
+++ b/src/app/tide/protobuf/results.proto
@@ -0,0 +1,30 @@
+option optimize_for = SPEED;
+package pb;
+
+import "peptides.proto";
+import "spectrum.proto";
+
+
+// The Results message consists of an experimental spectrum and a repeated
+// field corresponding to the top n matching peptides, each represented by
+// the Match message. Each Match message contains a reference to the Peptide,
+// the charge and the xcorr score for the match.
+
+message Match {
+  optional double xcorr = 1;
+  optional Peptide peptide = 2;
+}
+
+message Stats {
+  optional int32 count = 1;
+  optional double sum = 2;
+  optional double sum_squares = 3;
+}
+
+message Results {
+  optional Spectrum spectrum = 1;
+  optional int32 charge = 2;
+  repeated Match matches = 3;
+  optional int32 spectrum_index = 4;
+  optional Stats stats = 5;
+}
diff --git a/src/app/tide/protobuf/spectrum.proto b/src/app/tide/protobuf/spectrum.proto
new file mode 100644
index 0000000..03dbeee
--- /dev/null
+++ b/src/app/tide/protobuf/spectrum.proto
@@ -0,0 +1,25 @@
+option optimize_for = SPEED;
+package pb;
+
+message Spectrum {
+  // For compactness, store m_z and intensity arrays separately, which allows
+  // [packed = true]. Conceptually, each peak has an m_z and a corresponding
+  // intensity. The arrays are expected to be the same size.
+
+  // Peaks are stored as ints, which are more compact than doubles, especially
+  // when small. They are interpreted as numerators of a fraction; the common
+  // denominator fields are given once for each spectrum, based on the precision
+  // of the data. Example: m/z value of 123.45 is represented as 12345/100.
+
+  // Actual peak_m_z values are expected to be strictly increasing, so we store
+  // the deltas of the numerators to keep the numbers smaller.
+  repeated int64 peak_m_z = 1 [packed = true];
+  repeated int64 peak_intensity = 2 [packed = true];
+  optional int32 peak_m_z_denominator = 3; // common denominator for all m_z's
+  optional int32 peak_intensity_denominator = 4; // common for all intensities
+
+  optional int32 spectrum_number = 5;
+  optional double precursor_m_z = 6;
+  optional double rtime = 8;
+  repeated int32 charge_state = 7 [packed = true]; // may as well use packed
+}
diff --git a/src/app/tide/protobuf/view_ms1_cmds.proto b/src/app/tide/protobuf/view_ms1_cmds.proto
new file mode 100644
index 0000000..b81652d
--- /dev/null
+++ b/src/app/tide/protobuf/view_ms1_cmds.proto
@@ -0,0 +1,12 @@
+option optimize_for = SPEED;
+package pb;
+
+message ViewMS1Command {
+  optional string load = 1;
+  optional double bucket = 2;
+  optional double min_mz = 3;
+  optional double max_mz = 4;
+  optional double min_rtime = 5;
+  optional double max_rtime = 6;
+  optional string write_matrix = 7;
+}
diff --git a/src/app/tide/protoobj/header.pb.cc b/src/app/tide/protoobj/header.pb.cc
new file mode 100644
index 0000000..f1b2e2a
--- /dev/null
+++ b/src/app/tide/protoobj/header.pb.cc
@@ -0,0 +1,3408 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: header.proto
+
+#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
+#include "header.pb.h"
+
+#include <algorithm>
+
+#include <google/protobuf/stubs/common.h>
+#include <google/protobuf/stubs/once.h>
+#include <google/protobuf/io/coded_stream.h>
+#include <google/protobuf/wire_format_lite_inl.h>
+#include <google/protobuf/descriptor.h>
+#include <google/protobuf/generated_message_reflection.h>
+#include <google/protobuf/reflection_ops.h>
+#include <google/protobuf/wire_format.h>
+// @@protoc_insertion_point(includes)
+
+namespace pb {
+
+namespace {
+
+const ::google::protobuf::Descriptor* Modification_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  Modification_reflection_ = NULL;
+const ::google::protobuf::Descriptor* ModTable_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  ModTable_reflection_ = NULL;
+const ::google::protobuf::Descriptor* Header_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  Header_reflection_ = NULL;
+const ::google::protobuf::Descriptor* Header_Source_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  Header_Source_reflection_ = NULL;
+const ::google::protobuf::Descriptor* Header_RawProteinsHeader_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  Header_RawProteinsHeader_reflection_ = NULL;
+const ::google::protobuf::Descriptor* Header_PeptidesHeader_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  Header_PeptidesHeader_reflection_ = NULL;
+const ::google::protobuf::Descriptor* Header_SpectraHeader_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  Header_SpectraHeader_reflection_ = NULL;
+const ::google::protobuf::Descriptor* Header_ResultsHeader_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  Header_ResultsHeader_reflection_ = NULL;
+const ::google::protobuf::Descriptor* Header_AuxLocationsHeader_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  Header_AuxLocationsHeader_reflection_ = NULL;
+const ::google::protobuf::EnumDescriptor* Header_FileType_descriptor_ = NULL;
+
+}  // namespace
+
+
+void protobuf_AssignDesc_header_2eproto() {
+  protobuf_AddDesc_header_2eproto();
+  const ::google::protobuf::FileDescriptor* file =
+    ::google::protobuf::DescriptorPool::generated_pool()->FindFileByName(
+      "header.proto");
+  GOOGLE_CHECK(file != NULL);
+  Modification_descriptor_ = file->message_type(0);
+  static const int Modification_offsets_[3] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Modification, amino_acids_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Modification, delta_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Modification, max_count_),
+  };
+  Modification_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      Modification_descriptor_,
+      Modification::default_instance_,
+      Modification_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Modification, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Modification, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(Modification));
+  ModTable_descriptor_ = file->message_type(1);
+  static const int ModTable_offsets_[3] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ModTable, variable_mod_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ModTable, static_mod_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ModTable, unique_deltas_),
+  };
+  ModTable_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      ModTable_descriptor_,
+      ModTable::default_instance_,
+      ModTable_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ModTable, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ModTable, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(ModTable));
+  Header_descriptor_ = file->message_type(2);
+  static const int Header_offsets_[8] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header, source_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header, file_type_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header, raw_proteins_header_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header, peptides_header_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header, spectra_header_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header, results_header_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header, aux_locs_header_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header, command_line_),
+  };
+  Header_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      Header_descriptor_,
+      Header::default_instance_,
+      Header_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(Header));
+  Header_Source_descriptor_ = Header_descriptor_->nested_type(0);
+  static const int Header_Source_offsets_[3] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_Source, filename_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_Source, header_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_Source, filetype_),
+  };
+  Header_Source_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      Header_Source_descriptor_,
+      Header_Source::default_instance_,
+      Header_Source_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_Source, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_Source, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(Header_Source));
+  Header_RawProteinsHeader_descriptor_ = Header_descriptor_->nested_type(1);
+  static const int Header_RawProteinsHeader_offsets_[1] = {
+  };
+  Header_RawProteinsHeader_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      Header_RawProteinsHeader_descriptor_,
+      Header_RawProteinsHeader::default_instance_,
+      Header_RawProteinsHeader_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_RawProteinsHeader, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_RawProteinsHeader, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(Header_RawProteinsHeader));
+  Header_PeptidesHeader_descriptor_ = Header_descriptor_->nested_type(2);
+  static const int Header_PeptidesHeader_offsets_[14] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_PeptidesHeader, min_mass_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_PeptidesHeader, max_mass_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_PeptidesHeader, min_length_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_PeptidesHeader, max_length_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_PeptidesHeader, enzyme_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_PeptidesHeader, full_digestion_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_PeptidesHeader, max_missed_cleavages_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_PeptidesHeader, monoisotopic_precursor_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_PeptidesHeader, has_peaks_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_PeptidesHeader, downselect_fraction_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_PeptidesHeader, mods_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_PeptidesHeader, nterm_mods_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_PeptidesHeader, cterm_mods_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_PeptidesHeader, decoys_),
+  };
+  Header_PeptidesHeader_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      Header_PeptidesHeader_descriptor_,
+      Header_PeptidesHeader::default_instance_,
+      Header_PeptidesHeader_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_PeptidesHeader, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_PeptidesHeader, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(Header_PeptidesHeader));
+  Header_SpectraHeader_descriptor_ = Header_descriptor_->nested_type(3);
+  static const int Header_SpectraHeader_offsets_[1] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_SpectraHeader, sorted_),
+  };
+  Header_SpectraHeader_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      Header_SpectraHeader_descriptor_,
+      Header_SpectraHeader::default_instance_,
+      Header_SpectraHeader_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_SpectraHeader, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_SpectraHeader, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(Header_SpectraHeader));
+  Header_ResultsHeader_descriptor_ = Header_descriptor_->nested_type(4);
+  static const int Header_ResultsHeader_offsets_[3] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_ResultsHeader, mass_window_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_ResultsHeader, top_matches_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_ResultsHeader, peptides_header_),
+  };
+  Header_ResultsHeader_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      Header_ResultsHeader_descriptor_,
+      Header_ResultsHeader::default_instance_,
+      Header_ResultsHeader_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_ResultsHeader, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_ResultsHeader, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(Header_ResultsHeader));
+  Header_AuxLocationsHeader_descriptor_ = Header_descriptor_->nested_type(5);
+  static const int Header_AuxLocationsHeader_offsets_[1] = {
+  };
+  Header_AuxLocationsHeader_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      Header_AuxLocationsHeader_descriptor_,
+      Header_AuxLocationsHeader::default_instance_,
+      Header_AuxLocationsHeader_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_AuxLocationsHeader, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Header_AuxLocationsHeader, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(Header_AuxLocationsHeader));
+  Header_FileType_descriptor_ = Header_descriptor_->enum_type(0);
+}
+
+namespace {
+
+GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AssignDescriptors_once_);
+inline void protobuf_AssignDescriptorsOnce() {
+  ::google::protobuf::GoogleOnceInit(&protobuf_AssignDescriptors_once_,
+                 &protobuf_AssignDesc_header_2eproto);
+}
+
+void protobuf_RegisterTypes(const ::std::string&) {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    Modification_descriptor_, &Modification::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    ModTable_descriptor_, &ModTable::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    Header_descriptor_, &Header::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    Header_Source_descriptor_, &Header_Source::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    Header_RawProteinsHeader_descriptor_, &Header_RawProteinsHeader::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    Header_PeptidesHeader_descriptor_, &Header_PeptidesHeader::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    Header_SpectraHeader_descriptor_, &Header_SpectraHeader::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    Header_ResultsHeader_descriptor_, &Header_ResultsHeader::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    Header_AuxLocationsHeader_descriptor_, &Header_AuxLocationsHeader::default_instance());
+}
+
+}  // namespace
+
+void protobuf_ShutdownFile_header_2eproto() {
+  delete Modification::default_instance_;
+  delete Modification_reflection_;
+  delete ModTable::default_instance_;
+  delete ModTable_reflection_;
+  delete Header::default_instance_;
+  delete Header_reflection_;
+  delete Header_Source::default_instance_;
+  delete Header_Source_reflection_;
+  delete Header_RawProteinsHeader::default_instance_;
+  delete Header_RawProteinsHeader_reflection_;
+  delete Header_PeptidesHeader::default_instance_;
+  delete Header_PeptidesHeader_reflection_;
+  delete Header_SpectraHeader::default_instance_;
+  delete Header_SpectraHeader_reflection_;
+  delete Header_ResultsHeader::default_instance_;
+  delete Header_ResultsHeader_reflection_;
+  delete Header_AuxLocationsHeader::default_instance_;
+  delete Header_AuxLocationsHeader_reflection_;
+}
+
+void protobuf_AddDesc_header_2eproto() {
+  static bool already_here = false;
+  if (already_here) return;
+  already_here = true;
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
+    "\n\014header.proto\022\002pb\"E\n\014Modification\022\023\n\013am"
+    "ino_acids\030\001 \001(\t\022\r\n\005delta\030\002 \001(\001\022\021\n\tmax_co"
+    "unt\030\003 \001(\005\"o\n\010ModTable\022&\n\014variable_mod\030\001 "
+    "\003(\0132\020.pb.Modification\022$\n\nstatic_mod\030\002 \003("
+    "\0132\020.pb.Modification\022\025\n\runique_deltas\030\n \003"
+    "(\001\"\322\010\n\006Header\022!\n\006source\030\001 \003(\0132\021.pb.Heade"
+    "r.Source\022&\n\tfile_type\030\002 \002(\0162\023.pb.Header."
+    "FileType\0229\n\023raw_proteins_header\030\003 \001(\0132\034."
+    "pb.Header.RawProteinsHeader\0222\n\017peptides_"
+    "header\030\004 \001(\0132\031.pb.Header.PeptidesHeader\022"
+    "0\n\016spectra_header\030\005 \001(\0132\030.pb.Header.Spec"
+    "traHeader\0220\n\016results_header\030\006 \001(\0132\030.pb.H"
+    "eader.ResultsHeader\0226\n\017aux_locs_header\030\007"
+    " \001(\0132\035.pb.Header.AuxLocationsHeader\022\024\n\014c"
+    "ommand_line\030\010 \001(\t\032H\n\006Source\022\020\n\010filename\030"
+    "\001 \001(\t\022\032\n\006header\030\002 \001(\0132\n.pb.Header\022\020\n\010fil"
+    "etype\030\003 \001(\t\032\023\n\021RawProteinsHeader\032\342\002\n\016Pep"
+    "tidesHeader\022\020\n\010min_mass\030\003 \001(\001\022\020\n\010max_mas"
+    "s\030\004 \001(\001\022\022\n\nmin_length\030\005 \001(\005\022\022\n\nmax_lengt"
+    "h\030\006 \001(\005\022\016\n\006enzyme\030\007 \001(\t\022\026\n\016full_digestio"
+    "n\030\010 \001(\010\022\034\n\024max_missed_cleavages\030\016 \001(\005\022\036\n"
+    "\026monoisotopic_precursor\030\r \001(\010\022\021\n\thas_pea"
+    "ks\030\n \001(\010\022\033\n\023downselect_fraction\030\013 \001(\001\022\032\n"
+    "\004mods\030\014 \001(\0132\014.pb.ModTable\022 \n\nnterm_mods\030"
+    "\017 \001(\0132\014.pb.ModTable\022 \n\ncterm_mods\030\020 \001(\0132"
+    "\014.pb.ModTable\022\016\n\006decoys\030\t \001(\005\032\037\n\rSpectra"
+    "Header\022\016\n\006sorted\030\002 \001(\010\032m\n\rResultsHeader\022"
+    "\023\n\013mass_window\030\001 \001(\001\022\023\n\013top_matches\030\002 \001("
+    "\005\0222\n\017peptides_header\030\003 \001(\0132\031.pb.Header.P"
+    "eptidesHeader\032\024\n\022AuxLocationsHeader\"r\n\010F"
+    "ileType\022\020\n\014RAW_PROTEINS\020\000\022\014\n\010PEPTIDES\020\001\022"
+    "\013\n\007SPECTRA\020\002\022\n\n\006PARAMS\020\003\022\r\n\tMOD_TABLE\020\004\022"
+    "\013\n\007RESULTS\020\005\022\021\n\rAUX_LOCATIONS\020\006", 1311);
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
+    "header.proto", &protobuf_RegisterTypes);
+  Modification::default_instance_ = new Modification();
+  ModTable::default_instance_ = new ModTable();
+  Header::default_instance_ = new Header();
+  Header_Source::default_instance_ = new Header_Source();
+  Header_RawProteinsHeader::default_instance_ = new Header_RawProteinsHeader();
+  Header_PeptidesHeader::default_instance_ = new Header_PeptidesHeader();
+  Header_SpectraHeader::default_instance_ = new Header_SpectraHeader();
+  Header_ResultsHeader::default_instance_ = new Header_ResultsHeader();
+  Header_AuxLocationsHeader::default_instance_ = new Header_AuxLocationsHeader();
+  Modification::default_instance_->InitAsDefaultInstance();
+  ModTable::default_instance_->InitAsDefaultInstance();
+  Header::default_instance_->InitAsDefaultInstance();
+  Header_Source::default_instance_->InitAsDefaultInstance();
+  Header_RawProteinsHeader::default_instance_->InitAsDefaultInstance();
+  Header_PeptidesHeader::default_instance_->InitAsDefaultInstance();
+  Header_SpectraHeader::default_instance_->InitAsDefaultInstance();
+  Header_ResultsHeader::default_instance_->InitAsDefaultInstance();
+  Header_AuxLocationsHeader::default_instance_->InitAsDefaultInstance();
+  ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_header_2eproto);
+}
+
+// Force AddDescriptors() to be called at static initialization time.
+struct StaticDescriptorInitializer_header_2eproto {
+  StaticDescriptorInitializer_header_2eproto() {
+    protobuf_AddDesc_header_2eproto();
+  }
+} static_descriptor_initializer_header_2eproto_;
+
+// ===================================================================
+
+#ifndef _MSC_VER
+const int Modification::kAminoAcidsFieldNumber;
+const int Modification::kDeltaFieldNumber;
+const int Modification::kMaxCountFieldNumber;
+#endif  // !_MSC_VER
+
+Modification::Modification()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void Modification::InitAsDefaultInstance() {
+}
+
+Modification::Modification(const Modification& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void Modification::SharedCtor() {
+  _cached_size_ = 0;
+  amino_acids_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  delta_ = 0;
+  max_count_ = 0;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+Modification::~Modification() {
+  SharedDtor();
+}
+
+void Modification::SharedDtor() {
+  if (amino_acids_ != &::google::protobuf::internal::kEmptyString) {
+    delete amino_acids_;
+  }
+  if (this != default_instance_) {
+  }
+}
+
+void Modification::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* Modification::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return Modification_descriptor_;
+}
+
+const Modification& Modification::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_header_2eproto();
+  return *default_instance_;
+}
+
+Modification* Modification::default_instance_ = NULL;
+
+Modification* Modification::New() const {
+  return new Modification;
+}
+
+void Modification::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (has_amino_acids()) {
+      if (amino_acids_ != &::google::protobuf::internal::kEmptyString) {
+        amino_acids_->clear();
+      }
+    }
+    delta_ = 0;
+    max_count_ = 0;
+  }
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool Modification::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // optional string amino_acids = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_amino_acids()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->amino_acids().data(), this->amino_acids().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(17)) goto parse_delta;
+        break;
+      }
+
+      // optional double delta = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_FIXED64) {
+         parse_delta:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
+                 input, &delta_)));
+          set_has_delta();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(24)) goto parse_max_count;
+        break;
+      }
+
+      // optional int32 max_count = 3;
+      case 3: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_max_count:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &max_count_)));
+          set_has_max_count();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void Modification::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // optional string amino_acids = 1;
+  if (has_amino_acids()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->amino_acids().data(), this->amino_acids().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      1, this->amino_acids(), output);
+  }
+
+  // optional double delta = 2;
+  if (has_delta()) {
+    ::google::protobuf::internal::WireFormatLite::WriteDouble(2, this->delta(), output);
+  }
+
+  // optional int32 max_count = 3;
+  if (has_max_count()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(3, this->max_count(), output);
+  }
+
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* Modification::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // optional string amino_acids = 1;
+  if (has_amino_acids()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->amino_acids().data(), this->amino_acids().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        1, this->amino_acids(), target);
+  }
+
+  // optional double delta = 2;
+  if (has_delta()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(2, this->delta(), target);
+  }
+
+  // optional int32 max_count = 3;
+  if (has_max_count()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(3, this->max_count(), target);
+  }
+
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int Modification::ByteSize() const {
+  int total_size = 0;
+
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // optional string amino_acids = 1;
+    if (has_amino_acids()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->amino_acids());
+    }
+
+    // optional double delta = 2;
+    if (has_delta()) {
+      total_size += 1 + 8;
+    }
+
+    // optional int32 max_count = 3;
+    if (has_max_count()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->max_count());
+    }
+
+  }
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void Modification::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const Modification* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const Modification*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void Modification::MergeFrom(const Modification& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_amino_acids()) {
+      set_amino_acids(from.amino_acids());
+    }
+    if (from.has_delta()) {
+      set_delta(from.delta());
+    }
+    if (from.has_max_count()) {
+      set_max_count(from.max_count());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void Modification::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void Modification::CopyFrom(const Modification& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool Modification::IsInitialized() const {
+
+  return true;
+}
+
+void Modification::Swap(Modification* other) {
+  if (other != this) {
+    std::swap(amino_acids_, other->amino_acids_);
+    std::swap(delta_, other->delta_);
+    std::swap(max_count_, other->max_count_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata Modification::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = Modification_descriptor_;
+  metadata.reflection = Modification_reflection_;
+  return metadata;
+}
+
+
+// ===================================================================
+
+#ifndef _MSC_VER
+const int ModTable::kVariableModFieldNumber;
+const int ModTable::kStaticModFieldNumber;
+const int ModTable::kUniqueDeltasFieldNumber;
+#endif  // !_MSC_VER
+
+ModTable::ModTable()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void ModTable::InitAsDefaultInstance() {
+}
+
+ModTable::ModTable(const ModTable& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void ModTable::SharedCtor() {
+  _cached_size_ = 0;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+ModTable::~ModTable() {
+  SharedDtor();
+}
+
+void ModTable::SharedDtor() {
+  if (this != default_instance_) {
+  }
+}
+
+void ModTable::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* ModTable::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return ModTable_descriptor_;
+}
+
+const ModTable& ModTable::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_header_2eproto();
+  return *default_instance_;
+}
+
+ModTable* ModTable::default_instance_ = NULL;
+
+ModTable* ModTable::New() const {
+  return new ModTable;
+}
+
+void ModTable::Clear() {
+  variable_mod_.Clear();
+  static_mod_.Clear();
+  unique_deltas_.Clear();
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool ModTable::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // repeated .pb.Modification variable_mod = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_variable_mod:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+                input, add_variable_mod()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(10)) goto parse_variable_mod;
+        if (input->ExpectTag(18)) goto parse_static_mod;
+        break;
+      }
+
+      // repeated .pb.Modification static_mod = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_static_mod:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+                input, add_static_mod()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(18)) goto parse_static_mod;
+        if (input->ExpectTag(81)) goto parse_unique_deltas;
+        break;
+      }
+
+      // repeated double unique_deltas = 10;
+      case 10: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_FIXED64) {
+         parse_unique_deltas:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
+                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
+                 1, 81, input, this->mutable_unique_deltas())));
+        } else if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag)
+                   == ::google::protobuf::internal::WireFormatLite::
+                      WIRETYPE_LENGTH_DELIMITED) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
+                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
+                 input, this->mutable_unique_deltas())));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(81)) goto parse_unique_deltas;
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void ModTable::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // repeated .pb.Modification variable_mod = 1;
+  for (int i = 0; i < this->variable_mod_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      1, this->variable_mod(i), output);
+  }
+
+  // repeated .pb.Modification static_mod = 2;
+  for (int i = 0; i < this->static_mod_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      2, this->static_mod(i), output);
+  }
+
+  // repeated double unique_deltas = 10;
+  for (int i = 0; i < this->unique_deltas_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteDouble(
+      10, this->unique_deltas(i), output);
+  }
+
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* ModTable::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // repeated .pb.Modification variable_mod = 1;
+  for (int i = 0; i < this->variable_mod_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        1, this->variable_mod(i), target);
+  }
+
+  // repeated .pb.Modification static_mod = 2;
+  for (int i = 0; i < this->static_mod_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        2, this->static_mod(i), target);
+  }
+
+  // repeated double unique_deltas = 10;
+  for (int i = 0; i < this->unique_deltas_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteDoubleToArray(10, this->unique_deltas(i), target);
+  }
+
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int ModTable::ByteSize() const {
+  int total_size = 0;
+
+  // repeated .pb.Modification variable_mod = 1;
+  total_size += 1 * this->variable_mod_size();
+  for (int i = 0; i < this->variable_mod_size(); i++) {
+    total_size +=
+      ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+        this->variable_mod(i));
+  }
+
+  // repeated .pb.Modification static_mod = 2;
+  total_size += 1 * this->static_mod_size();
+  for (int i = 0; i < this->static_mod_size(); i++) {
+    total_size +=
+      ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+        this->static_mod(i));
+  }
+
+  // repeated double unique_deltas = 10;
+  {
+    int data_size = 0;
+    data_size = 8 * this->unique_deltas_size();
+    total_size += 1 * this->unique_deltas_size() + data_size;
+  }
+
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void ModTable::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const ModTable* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const ModTable*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void ModTable::MergeFrom(const ModTable& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  variable_mod_.MergeFrom(from.variable_mod_);
+  static_mod_.MergeFrom(from.static_mod_);
+  unique_deltas_.MergeFrom(from.unique_deltas_);
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void ModTable::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void ModTable::CopyFrom(const ModTable& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool ModTable::IsInitialized() const {
+
+  return true;
+}
+
+void ModTable::Swap(ModTable* other) {
+  if (other != this) {
+    variable_mod_.Swap(&other->variable_mod_);
+    static_mod_.Swap(&other->static_mod_);
+    unique_deltas_.Swap(&other->unique_deltas_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata ModTable::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = ModTable_descriptor_;
+  metadata.reflection = ModTable_reflection_;
+  return metadata;
+}
+
+
+// ===================================================================
+
+const ::google::protobuf::EnumDescriptor* Header_FileType_descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return Header_FileType_descriptor_;
+}
+bool Header_FileType_IsValid(int value) {
+  switch(value) {
+    case 0:
+    case 1:
+    case 2:
+    case 3:
+    case 4:
+    case 5:
+    case 6:
+      return true;
+    default:
+      return false;
+  }
+}
+
+#ifndef _MSC_VER
+const Header_FileType Header::RAW_PROTEINS;
+const Header_FileType Header::PEPTIDES;
+const Header_FileType Header::SPECTRA;
+const Header_FileType Header::PARAMS;
+const Header_FileType Header::MOD_TABLE;
+const Header_FileType Header::RESULTS;
+const Header_FileType Header::AUX_LOCATIONS;
+const Header_FileType Header::FileType_MIN;
+const Header_FileType Header::FileType_MAX;
+const int Header::FileType_ARRAYSIZE;
+#endif  // _MSC_VER
+#ifndef _MSC_VER
+const int Header_Source::kFilenameFieldNumber;
+const int Header_Source::kHeaderFieldNumber;
+const int Header_Source::kFiletypeFieldNumber;
+#endif  // !_MSC_VER
+
+Header_Source::Header_Source()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void Header_Source::InitAsDefaultInstance() {
+  header_ = const_cast< ::pb::Header*>(&::pb::Header::default_instance());
+}
+
+Header_Source::Header_Source(const Header_Source& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void Header_Source::SharedCtor() {
+  _cached_size_ = 0;
+  filename_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  header_ = NULL;
+  filetype_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+Header_Source::~Header_Source() {
+  SharedDtor();
+}
+
+void Header_Source::SharedDtor() {
+  if (filename_ != &::google::protobuf::internal::kEmptyString) {
+    delete filename_;
+  }
+  if (filetype_ != &::google::protobuf::internal::kEmptyString) {
+    delete filetype_;
+  }
+  if (this != default_instance_) {
+    delete header_;
+  }
+}
+
+void Header_Source::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* Header_Source::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return Header_Source_descriptor_;
+}
+
+const Header_Source& Header_Source::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_header_2eproto();
+  return *default_instance_;
+}
+
+Header_Source* Header_Source::default_instance_ = NULL;
+
+Header_Source* Header_Source::New() const {
+  return new Header_Source;
+}
+
+void Header_Source::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (has_filename()) {
+      if (filename_ != &::google::protobuf::internal::kEmptyString) {
+        filename_->clear();
+      }
+    }
+    if (has_header()) {
+      if (header_ != NULL) header_->::pb::Header::Clear();
+    }
+    if (has_filetype()) {
+      if (filetype_ != &::google::protobuf::internal::kEmptyString) {
+        filetype_->clear();
+      }
+    }
+  }
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool Header_Source::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // optional string filename = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_filename()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->filename().data(), this->filename().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(18)) goto parse_header;
+        break;
+      }
+
+      // optional .pb.Header header = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_header:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+               input, mutable_header()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(26)) goto parse_filetype;
+        break;
+      }
+
+      // optional string filetype = 3;
+      case 3: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_filetype:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_filetype()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->filetype().data(), this->filetype().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void Header_Source::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // optional string filename = 1;
+  if (has_filename()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->filename().data(), this->filename().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      1, this->filename(), output);
+  }
+
+  // optional .pb.Header header = 2;
+  if (has_header()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      2, this->header(), output);
+  }
+
+  // optional string filetype = 3;
+  if (has_filetype()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->filetype().data(), this->filetype().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      3, this->filetype(), output);
+  }
+
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* Header_Source::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // optional string filename = 1;
+  if (has_filename()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->filename().data(), this->filename().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        1, this->filename(), target);
+  }
+
+  // optional .pb.Header header = 2;
+  if (has_header()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        2, this->header(), target);
+  }
+
+  // optional string filetype = 3;
+  if (has_filetype()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->filetype().data(), this->filetype().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        3, this->filetype(), target);
+  }
+
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int Header_Source::ByteSize() const {
+  int total_size = 0;
+
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // optional string filename = 1;
+    if (has_filename()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->filename());
+    }
+
+    // optional .pb.Header header = 2;
+    if (has_header()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+          this->header());
+    }
+
+    // optional string filetype = 3;
+    if (has_filetype()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->filetype());
+    }
+
+  }
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void Header_Source::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const Header_Source* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const Header_Source*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void Header_Source::MergeFrom(const Header_Source& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_filename()) {
+      set_filename(from.filename());
+    }
+    if (from.has_header()) {
+      mutable_header()->::pb::Header::MergeFrom(from.header());
+    }
+    if (from.has_filetype()) {
+      set_filetype(from.filetype());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void Header_Source::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void Header_Source::CopyFrom(const Header_Source& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool Header_Source::IsInitialized() const {
+
+  if (has_header()) {
+    if (!this->header().IsInitialized()) return false;
+  }
+  return true;
+}
+
+void Header_Source::Swap(Header_Source* other) {
+  if (other != this) {
+    std::swap(filename_, other->filename_);
+    std::swap(header_, other->header_);
+    std::swap(filetype_, other->filetype_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata Header_Source::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = Header_Source_descriptor_;
+  metadata.reflection = Header_Source_reflection_;
+  return metadata;
+}
+
+
+// -------------------------------------------------------------------
+
+#ifndef _MSC_VER
+#endif  // !_MSC_VER
+
+Header_RawProteinsHeader::Header_RawProteinsHeader()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void Header_RawProteinsHeader::InitAsDefaultInstance() {
+}
+
+Header_RawProteinsHeader::Header_RawProteinsHeader(const Header_RawProteinsHeader& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void Header_RawProteinsHeader::SharedCtor() {
+  _cached_size_ = 0;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+Header_RawProteinsHeader::~Header_RawProteinsHeader() {
+  SharedDtor();
+}
+
+void Header_RawProteinsHeader::SharedDtor() {
+  if (this != default_instance_) {
+  }
+}
+
+void Header_RawProteinsHeader::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* Header_RawProteinsHeader::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return Header_RawProteinsHeader_descriptor_;
+}
+
+const Header_RawProteinsHeader& Header_RawProteinsHeader::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_header_2eproto();
+  return *default_instance_;
+}
+
+Header_RawProteinsHeader* Header_RawProteinsHeader::default_instance_ = NULL;
+
+Header_RawProteinsHeader* Header_RawProteinsHeader::New() const {
+  return new Header_RawProteinsHeader;
+}
+
+void Header_RawProteinsHeader::Clear() {
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool Header_RawProteinsHeader::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+        ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+      return true;
+    }
+    DO_(::google::protobuf::internal::WireFormat::SkipField(
+          input, tag, mutable_unknown_fields()));
+  }
+  return true;
+#undef DO_
+}
+
+void Header_RawProteinsHeader::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* Header_RawProteinsHeader::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int Header_RawProteinsHeader::ByteSize() const {
+  int total_size = 0;
+
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void Header_RawProteinsHeader::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const Header_RawProteinsHeader* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const Header_RawProteinsHeader*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void Header_RawProteinsHeader::MergeFrom(const Header_RawProteinsHeader& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void Header_RawProteinsHeader::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void Header_RawProteinsHeader::CopyFrom(const Header_RawProteinsHeader& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool Header_RawProteinsHeader::IsInitialized() const {
+
+  return true;
+}
+
+void Header_RawProteinsHeader::Swap(Header_RawProteinsHeader* other) {
+  if (other != this) {
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata Header_RawProteinsHeader::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = Header_RawProteinsHeader_descriptor_;
+  metadata.reflection = Header_RawProteinsHeader_reflection_;
+  return metadata;
+}
+
+
+// -------------------------------------------------------------------
+
+#ifndef _MSC_VER
+const int Header_PeptidesHeader::kMinMassFieldNumber;
+const int Header_PeptidesHeader::kMaxMassFieldNumber;
+const int Header_PeptidesHeader::kMinLengthFieldNumber;
+const int Header_PeptidesHeader::kMaxLengthFieldNumber;
+const int Header_PeptidesHeader::kEnzymeFieldNumber;
+const int Header_PeptidesHeader::kFullDigestionFieldNumber;
+const int Header_PeptidesHeader::kMaxMissedCleavagesFieldNumber;
+const int Header_PeptidesHeader::kMonoisotopicPrecursorFieldNumber;
+const int Header_PeptidesHeader::kHasPeaksFieldNumber;
+const int Header_PeptidesHeader::kDownselectFractionFieldNumber;
+const int Header_PeptidesHeader::kModsFieldNumber;
+const int Header_PeptidesHeader::kNtermModsFieldNumber;
+const int Header_PeptidesHeader::kCtermModsFieldNumber;
+const int Header_PeptidesHeader::kDecoysFieldNumber;
+#endif  // !_MSC_VER
+
+Header_PeptidesHeader::Header_PeptidesHeader()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void Header_PeptidesHeader::InitAsDefaultInstance() {
+  mods_ = const_cast< ::pb::ModTable*>(&::pb::ModTable::default_instance());
+  nterm_mods_ = const_cast< ::pb::ModTable*>(&::pb::ModTable::default_instance());
+  cterm_mods_ = const_cast< ::pb::ModTable*>(&::pb::ModTable::default_instance());
+}
+
+Header_PeptidesHeader::Header_PeptidesHeader(const Header_PeptidesHeader& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void Header_PeptidesHeader::SharedCtor() {
+  _cached_size_ = 0;
+  min_mass_ = 0;
+  max_mass_ = 0;
+  min_length_ = 0;
+  max_length_ = 0;
+  enzyme_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  full_digestion_ = false;
+  max_missed_cleavages_ = 0;
+  monoisotopic_precursor_ = false;
+  has_peaks_ = false;
+  downselect_fraction_ = 0;
+  mods_ = NULL;
+  nterm_mods_ = NULL;
+  cterm_mods_ = NULL;
+  decoys_ = 0;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+Header_PeptidesHeader::~Header_PeptidesHeader() {
+  SharedDtor();
+}
+
+void Header_PeptidesHeader::SharedDtor() {
+  if (enzyme_ != &::google::protobuf::internal::kEmptyString) {
+    delete enzyme_;
+  }
+  if (this != default_instance_) {
+    delete mods_;
+    delete nterm_mods_;
+    delete cterm_mods_;
+  }
+}
+
+void Header_PeptidesHeader::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* Header_PeptidesHeader::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return Header_PeptidesHeader_descriptor_;
+}
+
+const Header_PeptidesHeader& Header_PeptidesHeader::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_header_2eproto();
+  return *default_instance_;
+}
+
+Header_PeptidesHeader* Header_PeptidesHeader::default_instance_ = NULL;
+
+Header_PeptidesHeader* Header_PeptidesHeader::New() const {
+  return new Header_PeptidesHeader;
+}
+
+void Header_PeptidesHeader::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    min_mass_ = 0;
+    max_mass_ = 0;
+    min_length_ = 0;
+    max_length_ = 0;
+    if (has_enzyme()) {
+      if (enzyme_ != &::google::protobuf::internal::kEmptyString) {
+        enzyme_->clear();
+      }
+    }
+    full_digestion_ = false;
+    max_missed_cleavages_ = 0;
+    monoisotopic_precursor_ = false;
+  }
+  if (_has_bits_[8 / 32] & (0xffu << (8 % 32))) {
+    has_peaks_ = false;
+    downselect_fraction_ = 0;
+    if (has_mods()) {
+      if (mods_ != NULL) mods_->::pb::ModTable::Clear();
+    }
+    if (has_nterm_mods()) {
+      if (nterm_mods_ != NULL) nterm_mods_->::pb::ModTable::Clear();
+    }
+    if (has_cterm_mods()) {
+      if (cterm_mods_ != NULL) cterm_mods_->::pb::ModTable::Clear();
+    }
+    decoys_ = 0;
+  }
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool Header_PeptidesHeader::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // optional double min_mass = 3;
+      case 3: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_FIXED64) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
+                 input, &min_mass_)));
+          set_has_min_mass();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(33)) goto parse_max_mass;
+        break;
+      }
+
+      // optional double max_mass = 4;
+      case 4: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_FIXED64) {
+         parse_max_mass:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
+                 input, &max_mass_)));
+          set_has_max_mass();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(40)) goto parse_min_length;
+        break;
+      }
+
+      // optional int32 min_length = 5;
+      case 5: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_min_length:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &min_length_)));
+          set_has_min_length();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(48)) goto parse_max_length;
+        break;
+      }
+
+      // optional int32 max_length = 6;
+      case 6: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_max_length:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &max_length_)));
+          set_has_max_length();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(58)) goto parse_enzyme;
+        break;
+      }
+
+      // optional string enzyme = 7;
+      case 7: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_enzyme:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_enzyme()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->enzyme().data(), this->enzyme().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(64)) goto parse_full_digestion;
+        break;
+      }
+
+      // optional bool full_digestion = 8;
+      case 8: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_full_digestion:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
+                 input, &full_digestion_)));
+          set_has_full_digestion();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(72)) goto parse_decoys;
+        break;
+      }
+
+      // optional int32 decoys = 9;
+      case 9: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_decoys:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &decoys_)));
+          set_has_decoys();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(80)) goto parse_has_peaks;
+        break;
+      }
+
+      // optional bool has_peaks = 10;
+      case 10: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_has_peaks:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
+                 input, &has_peaks_)));
+          set_has_has_peaks();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(89)) goto parse_downselect_fraction;
+        break;
+      }
+
+      // optional double downselect_fraction = 11;
+      case 11: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_FIXED64) {
+         parse_downselect_fraction:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
+                 input, &downselect_fraction_)));
+          set_has_downselect_fraction();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(98)) goto parse_mods;
+        break;
+      }
+
+      // optional .pb.ModTable mods = 12;
+      case 12: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_mods:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+               input, mutable_mods()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(104)) goto parse_monoisotopic_precursor;
+        break;
+      }
+
+      // optional bool monoisotopic_precursor = 13;
+      case 13: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_monoisotopic_precursor:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
+                 input, &monoisotopic_precursor_)));
+          set_has_monoisotopic_precursor();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(112)) goto parse_max_missed_cleavages;
+        break;
+      }
+
+      // optional int32 max_missed_cleavages = 14;
+      case 14: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_max_missed_cleavages:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &max_missed_cleavages_)));
+          set_has_max_missed_cleavages();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(122)) goto parse_nterm_mods;
+        break;
+      }
+
+      // optional .pb.ModTable nterm_mods = 15;
+      case 15: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_nterm_mods:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+               input, mutable_nterm_mods()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(130)) goto parse_cterm_mods;
+        break;
+      }
+
+      // optional .pb.ModTable cterm_mods = 16;
+      case 16: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_cterm_mods:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+               input, mutable_cterm_mods()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void Header_PeptidesHeader::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // optional double min_mass = 3;
+  if (has_min_mass()) {
+    ::google::protobuf::internal::WireFormatLite::WriteDouble(3, this->min_mass(), output);
+  }
+
+  // optional double max_mass = 4;
+  if (has_max_mass()) {
+    ::google::protobuf::internal::WireFormatLite::WriteDouble(4, this->max_mass(), output);
+  }
+
+  // optional int32 min_length = 5;
+  if (has_min_length()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(5, this->min_length(), output);
+  }
+
+  // optional int32 max_length = 6;
+  if (has_max_length()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(6, this->max_length(), output);
+  }
+
+  // optional string enzyme = 7;
+  if (has_enzyme()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->enzyme().data(), this->enzyme().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      7, this->enzyme(), output);
+  }
+
+  // optional bool full_digestion = 8;
+  if (has_full_digestion()) {
+    ::google::protobuf::internal::WireFormatLite::WriteBool(8, this->full_digestion(), output);
+  }
+
+  // optional int32 decoys = 9;
+  if (has_decoys()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(9, this->decoys(), output);
+  }
+
+  // optional bool has_peaks = 10;
+  if (has_has_peaks()) {
+    ::google::protobuf::internal::WireFormatLite::WriteBool(10, this->has_peaks(), output);
+  }
+
+  // optional double downselect_fraction = 11;
+  if (has_downselect_fraction()) {
+    ::google::protobuf::internal::WireFormatLite::WriteDouble(11, this->downselect_fraction(), output);
+  }
+
+  // optional .pb.ModTable mods = 12;
+  if (has_mods()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      12, this->mods(), output);
+  }
+
+  // optional bool monoisotopic_precursor = 13;
+  if (has_monoisotopic_precursor()) {
+    ::google::protobuf::internal::WireFormatLite::WriteBool(13, this->monoisotopic_precursor(), output);
+  }
+
+  // optional int32 max_missed_cleavages = 14;
+  if (has_max_missed_cleavages()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(14, this->max_missed_cleavages(), output);
+  }
+
+  // optional .pb.ModTable nterm_mods = 15;
+  if (has_nterm_mods()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      15, this->nterm_mods(), output);
+  }
+
+  // optional .pb.ModTable cterm_mods = 16;
+  if (has_cterm_mods()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      16, this->cterm_mods(), output);
+  }
+
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* Header_PeptidesHeader::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // optional double min_mass = 3;
+  if (has_min_mass()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(3, this->min_mass(), target);
+  }
+
+  // optional double max_mass = 4;
+  if (has_max_mass()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(4, this->max_mass(), target);
+  }
+
+  // optional int32 min_length = 5;
+  if (has_min_length()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(5, this->min_length(), target);
+  }
+
+  // optional int32 max_length = 6;
+  if (has_max_length()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(6, this->max_length(), target);
+  }
+
+  // optional string enzyme = 7;
+  if (has_enzyme()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->enzyme().data(), this->enzyme().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        7, this->enzyme(), target);
+  }
+
+  // optional bool full_digestion = 8;
+  if (has_full_digestion()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(8, this->full_digestion(), target);
+  }
+
+  // optional int32 decoys = 9;
+  if (has_decoys()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(9, this->decoys(), target);
+  }
+
+  // optional bool has_peaks = 10;
+  if (has_has_peaks()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(10, this->has_peaks(), target);
+  }
+
+  // optional double downselect_fraction = 11;
+  if (has_downselect_fraction()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(11, this->downselect_fraction(), target);
+  }
+
+  // optional .pb.ModTable mods = 12;
+  if (has_mods()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        12, this->mods(), target);
+  }
+
+  // optional bool monoisotopic_precursor = 13;
+  if (has_monoisotopic_precursor()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(13, this->monoisotopic_precursor(), target);
+  }
+
+  // optional int32 max_missed_cleavages = 14;
+  if (has_max_missed_cleavages()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(14, this->max_missed_cleavages(), target);
+  }
+
+  // optional .pb.ModTable nterm_mods = 15;
+  if (has_nterm_mods()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        15, this->nterm_mods(), target);
+  }
+
+  // optional .pb.ModTable cterm_mods = 16;
+  if (has_cterm_mods()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        16, this->cterm_mods(), target);
+  }
+
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int Header_PeptidesHeader::ByteSize() const {
+  int total_size = 0;
+
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // optional double min_mass = 3;
+    if (has_min_mass()) {
+      total_size += 1 + 8;
+    }
+
+    // optional double max_mass = 4;
+    if (has_max_mass()) {
+      total_size += 1 + 8;
+    }
+
+    // optional int32 min_length = 5;
+    if (has_min_length()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->min_length());
+    }
+
+    // optional int32 max_length = 6;
+    if (has_max_length()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->max_length());
+    }
+
+    // optional string enzyme = 7;
+    if (has_enzyme()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->enzyme());
+    }
+
+    // optional bool full_digestion = 8;
+    if (has_full_digestion()) {
+      total_size += 1 + 1;
+    }
+
+    // optional int32 max_missed_cleavages = 14;
+    if (has_max_missed_cleavages()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->max_missed_cleavages());
+    }
+
+    // optional bool monoisotopic_precursor = 13;
+    if (has_monoisotopic_precursor()) {
+      total_size += 1 + 1;
+    }
+
+  }
+  if (_has_bits_[8 / 32] & (0xffu << (8 % 32))) {
+    // optional bool has_peaks = 10;
+    if (has_has_peaks()) {
+      total_size += 1 + 1;
+    }
+
+    // optional double downselect_fraction = 11;
+    if (has_downselect_fraction()) {
+      total_size += 1 + 8;
+    }
+
+    // optional .pb.ModTable mods = 12;
+    if (has_mods()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+          this->mods());
+    }
+
+    // optional .pb.ModTable nterm_mods = 15;
+    if (has_nterm_mods()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+          this->nterm_mods());
+    }
+
+    // optional .pb.ModTable cterm_mods = 16;
+    if (has_cterm_mods()) {
+      total_size += 2 +
+        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+          this->cterm_mods());
+    }
+
+    // optional int32 decoys = 9;
+    if (has_decoys()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->decoys());
+    }
+
+  }
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void Header_PeptidesHeader::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const Header_PeptidesHeader* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const Header_PeptidesHeader*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void Header_PeptidesHeader::MergeFrom(const Header_PeptidesHeader& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_min_mass()) {
+      set_min_mass(from.min_mass());
+    }
+    if (from.has_max_mass()) {
+      set_max_mass(from.max_mass());
+    }
+    if (from.has_min_length()) {
+      set_min_length(from.min_length());
+    }
+    if (from.has_max_length()) {
+      set_max_length(from.max_length());
+    }
+    if (from.has_enzyme()) {
+      set_enzyme(from.enzyme());
+    }
+    if (from.has_full_digestion()) {
+      set_full_digestion(from.full_digestion());
+    }
+    if (from.has_max_missed_cleavages()) {
+      set_max_missed_cleavages(from.max_missed_cleavages());
+    }
+    if (from.has_monoisotopic_precursor()) {
+      set_monoisotopic_precursor(from.monoisotopic_precursor());
+    }
+  }
+  if (from._has_bits_[8 / 32] & (0xffu << (8 % 32))) {
+    if (from.has_has_peaks()) {
+      set_has_peaks(from.has_peaks());
+    }
+    if (from.has_downselect_fraction()) {
+      set_downselect_fraction(from.downselect_fraction());
+    }
+    if (from.has_mods()) {
+      mutable_mods()->::pb::ModTable::MergeFrom(from.mods());
+    }
+    if (from.has_nterm_mods()) {
+      mutable_nterm_mods()->::pb::ModTable::MergeFrom(from.nterm_mods());
+    }
+    if (from.has_cterm_mods()) {
+      mutable_cterm_mods()->::pb::ModTable::MergeFrom(from.cterm_mods());
+    }
+    if (from.has_decoys()) {
+      set_decoys(from.decoys());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void Header_PeptidesHeader::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void Header_PeptidesHeader::CopyFrom(const Header_PeptidesHeader& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool Header_PeptidesHeader::IsInitialized() const {
+
+  return true;
+}
+
+void Header_PeptidesHeader::Swap(Header_PeptidesHeader* other) {
+  if (other != this) {
+    std::swap(min_mass_, other->min_mass_);
+    std::swap(max_mass_, other->max_mass_);
+    std::swap(min_length_, other->min_length_);
+    std::swap(max_length_, other->max_length_);
+    std::swap(enzyme_, other->enzyme_);
+    std::swap(full_digestion_, other->full_digestion_);
+    std::swap(max_missed_cleavages_, other->max_missed_cleavages_);
+    std::swap(monoisotopic_precursor_, other->monoisotopic_precursor_);
+    std::swap(has_peaks_, other->has_peaks_);
+    std::swap(downselect_fraction_, other->downselect_fraction_);
+    std::swap(mods_, other->mods_);
+    std::swap(nterm_mods_, other->nterm_mods_);
+    std::swap(cterm_mods_, other->cterm_mods_);
+    std::swap(decoys_, other->decoys_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata Header_PeptidesHeader::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = Header_PeptidesHeader_descriptor_;
+  metadata.reflection = Header_PeptidesHeader_reflection_;
+  return metadata;
+}
+
+
+// -------------------------------------------------------------------
+
+#ifndef _MSC_VER
+const int Header_SpectraHeader::kSortedFieldNumber;
+#endif  // !_MSC_VER
+
+Header_SpectraHeader::Header_SpectraHeader()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void Header_SpectraHeader::InitAsDefaultInstance() {
+}
+
+Header_SpectraHeader::Header_SpectraHeader(const Header_SpectraHeader& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void Header_SpectraHeader::SharedCtor() {
+  _cached_size_ = 0;
+  sorted_ = false;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+Header_SpectraHeader::~Header_SpectraHeader() {
+  SharedDtor();
+}
+
+void Header_SpectraHeader::SharedDtor() {
+  if (this != default_instance_) {
+  }
+}
+
+void Header_SpectraHeader::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* Header_SpectraHeader::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return Header_SpectraHeader_descriptor_;
+}
+
+const Header_SpectraHeader& Header_SpectraHeader::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_header_2eproto();
+  return *default_instance_;
+}
+
+Header_SpectraHeader* Header_SpectraHeader::default_instance_ = NULL;
+
+Header_SpectraHeader* Header_SpectraHeader::New() const {
+  return new Header_SpectraHeader;
+}
+
+void Header_SpectraHeader::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    sorted_ = false;
+  }
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool Header_SpectraHeader::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // optional bool sorted = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
+                 input, &sorted_)));
+          set_has_sorted();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void Header_SpectraHeader::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // optional bool sorted = 2;
+  if (has_sorted()) {
+    ::google::protobuf::internal::WireFormatLite::WriteBool(2, this->sorted(), output);
+  }
+
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* Header_SpectraHeader::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // optional bool sorted = 2;
+  if (has_sorted()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(2, this->sorted(), target);
+  }
+
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int Header_SpectraHeader::ByteSize() const {
+  int total_size = 0;
+
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // optional bool sorted = 2;
+    if (has_sorted()) {
+      total_size += 1 + 1;
+    }
+
+  }
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void Header_SpectraHeader::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const Header_SpectraHeader* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const Header_SpectraHeader*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void Header_SpectraHeader::MergeFrom(const Header_SpectraHeader& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_sorted()) {
+      set_sorted(from.sorted());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void Header_SpectraHeader::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void Header_SpectraHeader::CopyFrom(const Header_SpectraHeader& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool Header_SpectraHeader::IsInitialized() const {
+
+  return true;
+}
+
+void Header_SpectraHeader::Swap(Header_SpectraHeader* other) {
+  if (other != this) {
+    std::swap(sorted_, other->sorted_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata Header_SpectraHeader::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = Header_SpectraHeader_descriptor_;
+  metadata.reflection = Header_SpectraHeader_reflection_;
+  return metadata;
+}
+
+
+// -------------------------------------------------------------------
+
+#ifndef _MSC_VER
+const int Header_ResultsHeader::kMassWindowFieldNumber;
+const int Header_ResultsHeader::kTopMatchesFieldNumber;
+const int Header_ResultsHeader::kPeptidesHeaderFieldNumber;
+#endif  // !_MSC_VER
+
+Header_ResultsHeader::Header_ResultsHeader()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void Header_ResultsHeader::InitAsDefaultInstance() {
+  peptides_header_ = const_cast< ::pb::Header_PeptidesHeader*>(&::pb::Header_PeptidesHeader::default_instance());
+}
+
+Header_ResultsHeader::Header_ResultsHeader(const Header_ResultsHeader& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void Header_ResultsHeader::SharedCtor() {
+  _cached_size_ = 0;
+  mass_window_ = 0;
+  top_matches_ = 0;
+  peptides_header_ = NULL;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+Header_ResultsHeader::~Header_ResultsHeader() {
+  SharedDtor();
+}
+
+void Header_ResultsHeader::SharedDtor() {
+  if (this != default_instance_) {
+    delete peptides_header_;
+  }
+}
+
+void Header_ResultsHeader::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* Header_ResultsHeader::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return Header_ResultsHeader_descriptor_;
+}
+
+const Header_ResultsHeader& Header_ResultsHeader::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_header_2eproto();
+  return *default_instance_;
+}
+
+Header_ResultsHeader* Header_ResultsHeader::default_instance_ = NULL;
+
+Header_ResultsHeader* Header_ResultsHeader::New() const {
+  return new Header_ResultsHeader;
+}
+
+void Header_ResultsHeader::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    mass_window_ = 0;
+    top_matches_ = 0;
+    if (has_peptides_header()) {
+      if (peptides_header_ != NULL) peptides_header_->::pb::Header_PeptidesHeader::Clear();
+    }
+  }
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool Header_ResultsHeader::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // optional double mass_window = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_FIXED64) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
+                 input, &mass_window_)));
+          set_has_mass_window();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(16)) goto parse_top_matches;
+        break;
+      }
+
+      // optional int32 top_matches = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_top_matches:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &top_matches_)));
+          set_has_top_matches();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(26)) goto parse_peptides_header;
+        break;
+      }
+
+      // optional .pb.Header.PeptidesHeader peptides_header = 3;
+      case 3: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_peptides_header:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+               input, mutable_peptides_header()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void Header_ResultsHeader::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // optional double mass_window = 1;
+  if (has_mass_window()) {
+    ::google::protobuf::internal::WireFormatLite::WriteDouble(1, this->mass_window(), output);
+  }
+
+  // optional int32 top_matches = 2;
+  if (has_top_matches()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->top_matches(), output);
+  }
+
+  // optional .pb.Header.PeptidesHeader peptides_header = 3;
+  if (has_peptides_header()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      3, this->peptides_header(), output);
+  }
+
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* Header_ResultsHeader::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // optional double mass_window = 1;
+  if (has_mass_window()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(1, this->mass_window(), target);
+  }
+
+  // optional int32 top_matches = 2;
+  if (has_top_matches()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(2, this->top_matches(), target);
+  }
+
+  // optional .pb.Header.PeptidesHeader peptides_header = 3;
+  if (has_peptides_header()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        3, this->peptides_header(), target);
+  }
+
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int Header_ResultsHeader::ByteSize() const {
+  int total_size = 0;
+
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // optional double mass_window = 1;
+    if (has_mass_window()) {
+      total_size += 1 + 8;
+    }
+
+    // optional int32 top_matches = 2;
+    if (has_top_matches()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->top_matches());
+    }
+
+    // optional .pb.Header.PeptidesHeader peptides_header = 3;
+    if (has_peptides_header()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+          this->peptides_header());
+    }
+
+  }
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void Header_ResultsHeader::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const Header_ResultsHeader* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const Header_ResultsHeader*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void Header_ResultsHeader::MergeFrom(const Header_ResultsHeader& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_mass_window()) {
+      set_mass_window(from.mass_window());
+    }
+    if (from.has_top_matches()) {
+      set_top_matches(from.top_matches());
+    }
+    if (from.has_peptides_header()) {
+      mutable_peptides_header()->::pb::Header_PeptidesHeader::MergeFrom(from.peptides_header());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void Header_ResultsHeader::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void Header_ResultsHeader::CopyFrom(const Header_ResultsHeader& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool Header_ResultsHeader::IsInitialized() const {
+
+  return true;
+}
+
+void Header_ResultsHeader::Swap(Header_ResultsHeader* other) {
+  if (other != this) {
+    std::swap(mass_window_, other->mass_window_);
+    std::swap(top_matches_, other->top_matches_);
+    std::swap(peptides_header_, other->peptides_header_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata Header_ResultsHeader::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = Header_ResultsHeader_descriptor_;
+  metadata.reflection = Header_ResultsHeader_reflection_;
+  return metadata;
+}
+
+
+// -------------------------------------------------------------------
+
+#ifndef _MSC_VER
+#endif  // !_MSC_VER
+
+Header_AuxLocationsHeader::Header_AuxLocationsHeader()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void Header_AuxLocationsHeader::InitAsDefaultInstance() {
+}
+
+Header_AuxLocationsHeader::Header_AuxLocationsHeader(const Header_AuxLocationsHeader& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void Header_AuxLocationsHeader::SharedCtor() {
+  _cached_size_ = 0;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+Header_AuxLocationsHeader::~Header_AuxLocationsHeader() {
+  SharedDtor();
+}
+
+void Header_AuxLocationsHeader::SharedDtor() {
+  if (this != default_instance_) {
+  }
+}
+
+void Header_AuxLocationsHeader::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* Header_AuxLocationsHeader::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return Header_AuxLocationsHeader_descriptor_;
+}
+
+const Header_AuxLocationsHeader& Header_AuxLocationsHeader::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_header_2eproto();
+  return *default_instance_;
+}
+
+Header_AuxLocationsHeader* Header_AuxLocationsHeader::default_instance_ = NULL;
+
+Header_AuxLocationsHeader* Header_AuxLocationsHeader::New() const {
+  return new Header_AuxLocationsHeader;
+}
+
+void Header_AuxLocationsHeader::Clear() {
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool Header_AuxLocationsHeader::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+        ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+      return true;
+    }
+    DO_(::google::protobuf::internal::WireFormat::SkipField(
+          input, tag, mutable_unknown_fields()));
+  }
+  return true;
+#undef DO_
+}
+
+void Header_AuxLocationsHeader::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* Header_AuxLocationsHeader::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int Header_AuxLocationsHeader::ByteSize() const {
+  int total_size = 0;
+
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void Header_AuxLocationsHeader::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const Header_AuxLocationsHeader* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const Header_AuxLocationsHeader*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void Header_AuxLocationsHeader::MergeFrom(const Header_AuxLocationsHeader& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void Header_AuxLocationsHeader::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void Header_AuxLocationsHeader::CopyFrom(const Header_AuxLocationsHeader& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool Header_AuxLocationsHeader::IsInitialized() const {
+
+  return true;
+}
+
+void Header_AuxLocationsHeader::Swap(Header_AuxLocationsHeader* other) {
+  if (other != this) {
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata Header_AuxLocationsHeader::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = Header_AuxLocationsHeader_descriptor_;
+  metadata.reflection = Header_AuxLocationsHeader_reflection_;
+  return metadata;
+}
+
+
+// -------------------------------------------------------------------
+
+#ifndef _MSC_VER
+const int Header::kSourceFieldNumber;
+const int Header::kFileTypeFieldNumber;
+const int Header::kRawProteinsHeaderFieldNumber;
+const int Header::kPeptidesHeaderFieldNumber;
+const int Header::kSpectraHeaderFieldNumber;
+const int Header::kResultsHeaderFieldNumber;
+const int Header::kAuxLocsHeaderFieldNumber;
+const int Header::kCommandLineFieldNumber;
+#endif  // !_MSC_VER
+
+Header::Header()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void Header::InitAsDefaultInstance() {
+  raw_proteins_header_ = const_cast< ::pb::Header_RawProteinsHeader*>(&::pb::Header_RawProteinsHeader::default_instance());
+  peptides_header_ = const_cast< ::pb::Header_PeptidesHeader*>(&::pb::Header_PeptidesHeader::default_instance());
+  spectra_header_ = const_cast< ::pb::Header_SpectraHeader*>(&::pb::Header_SpectraHeader::default_instance());
+  results_header_ = const_cast< ::pb::Header_ResultsHeader*>(&::pb::Header_ResultsHeader::default_instance());
+  aux_locs_header_ = const_cast< ::pb::Header_AuxLocationsHeader*>(&::pb::Header_AuxLocationsHeader::default_instance());
+}
+
+Header::Header(const Header& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void Header::SharedCtor() {
+  _cached_size_ = 0;
+  file_type_ = 0;
+  raw_proteins_header_ = NULL;
+  peptides_header_ = NULL;
+  spectra_header_ = NULL;
+  results_header_ = NULL;
+  aux_locs_header_ = NULL;
+  command_line_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+Header::~Header() {
+  SharedDtor();
+}
+
+void Header::SharedDtor() {
+  if (command_line_ != &::google::protobuf::internal::kEmptyString) {
+    delete command_line_;
+  }
+  if (this != default_instance_) {
+    delete raw_proteins_header_;
+    delete peptides_header_;
+    delete spectra_header_;
+    delete results_header_;
+    delete aux_locs_header_;
+  }
+}
+
+void Header::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* Header::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return Header_descriptor_;
+}
+
+const Header& Header::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_header_2eproto();
+  return *default_instance_;
+}
+
+Header* Header::default_instance_ = NULL;
+
+Header* Header::New() const {
+  return new Header;
+}
+
+void Header::Clear() {
+  if (_has_bits_[1 / 32] & (0xffu << (1 % 32))) {
+    file_type_ = 0;
+    if (has_raw_proteins_header()) {
+      if (raw_proteins_header_ != NULL) raw_proteins_header_->::pb::Header_RawProteinsHeader::Clear();
+    }
+    if (has_peptides_header()) {
+      if (peptides_header_ != NULL) peptides_header_->::pb::Header_PeptidesHeader::Clear();
+    }
+    if (has_spectra_header()) {
+      if (spectra_header_ != NULL) spectra_header_->::pb::Header_SpectraHeader::Clear();
+    }
+    if (has_results_header()) {
+      if (results_header_ != NULL) results_header_->::pb::Header_ResultsHeader::Clear();
+    }
+    if (has_aux_locs_header()) {
+      if (aux_locs_header_ != NULL) aux_locs_header_->::pb::Header_AuxLocationsHeader::Clear();
+    }
+    if (has_command_line()) {
+      if (command_line_ != &::google::protobuf::internal::kEmptyString) {
+        command_line_->clear();
+      }
+    }
+  }
+  source_.Clear();
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool Header::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // repeated .pb.Header.Source source = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_source:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+                input, add_source()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(10)) goto parse_source;
+        if (input->ExpectTag(16)) goto parse_file_type;
+        break;
+      }
+
+      // required .pb.Header.FileType file_type = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_file_type:
+          int value;
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
+                 input, &value)));
+          if (::pb::Header_FileType_IsValid(value)) {
+            set_file_type(static_cast< ::pb::Header_FileType >(value));
+          } else {
+            mutable_unknown_fields()->AddVarint(2, value);
+          }
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(26)) goto parse_raw_proteins_header;
+        break;
+      }
+
+      // optional .pb.Header.RawProteinsHeader raw_proteins_header = 3;
+      case 3: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_raw_proteins_header:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+               input, mutable_raw_proteins_header()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(34)) goto parse_peptides_header;
+        break;
+      }
+
+      // optional .pb.Header.PeptidesHeader peptides_header = 4;
+      case 4: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_peptides_header:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+               input, mutable_peptides_header()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(42)) goto parse_spectra_header;
+        break;
+      }
+
+      // optional .pb.Header.SpectraHeader spectra_header = 5;
+      case 5: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_spectra_header:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+               input, mutable_spectra_header()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(50)) goto parse_results_header;
+        break;
+      }
+
+      // optional .pb.Header.ResultsHeader results_header = 6;
+      case 6: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_results_header:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+               input, mutable_results_header()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(58)) goto parse_aux_locs_header;
+        break;
+      }
+
+      // optional .pb.Header.AuxLocationsHeader aux_locs_header = 7;
+      case 7: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_aux_locs_header:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+               input, mutable_aux_locs_header()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(66)) goto parse_command_line;
+        break;
+      }
+
+      // optional string command_line = 8;
+      case 8: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_command_line:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_command_line()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->command_line().data(), this->command_line().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void Header::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // repeated .pb.Header.Source source = 1;
+  for (int i = 0; i < this->source_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      1, this->source(i), output);
+  }
+
+  // required .pb.Header.FileType file_type = 2;
+  if (has_file_type()) {
+    ::google::protobuf::internal::WireFormatLite::WriteEnum(
+      2, this->file_type(), output);
+  }
+
+  // optional .pb.Header.RawProteinsHeader raw_proteins_header = 3;
+  if (has_raw_proteins_header()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      3, this->raw_proteins_header(), output);
+  }
+
+  // optional .pb.Header.PeptidesHeader peptides_header = 4;
+  if (has_peptides_header()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      4, this->peptides_header(), output);
+  }
+
+  // optional .pb.Header.SpectraHeader spectra_header = 5;
+  if (has_spectra_header()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      5, this->spectra_header(), output);
+  }
+
+  // optional .pb.Header.ResultsHeader results_header = 6;
+  if (has_results_header()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      6, this->results_header(), output);
+  }
+
+  // optional .pb.Header.AuxLocationsHeader aux_locs_header = 7;
+  if (has_aux_locs_header()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      7, this->aux_locs_header(), output);
+  }
+
+  // optional string command_line = 8;
+  if (has_command_line()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->command_line().data(), this->command_line().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      8, this->command_line(), output);
+  }
+
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* Header::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // repeated .pb.Header.Source source = 1;
+  for (int i = 0; i < this->source_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        1, this->source(i), target);
+  }
+
+  // required .pb.Header.FileType file_type = 2;
+  if (has_file_type()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
+      2, this->file_type(), target);
+  }
+
+  // optional .pb.Header.RawProteinsHeader raw_proteins_header = 3;
+  if (has_raw_proteins_header()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        3, this->raw_proteins_header(), target);
+  }
+
+  // optional .pb.Header.PeptidesHeader peptides_header = 4;
+  if (has_peptides_header()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        4, this->peptides_header(), target);
+  }
+
+  // optional .pb.Header.SpectraHeader spectra_header = 5;
+  if (has_spectra_header()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        5, this->spectra_header(), target);
+  }
+
+  // optional .pb.Header.ResultsHeader results_header = 6;
+  if (has_results_header()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        6, this->results_header(), target);
+  }
+
+  // optional .pb.Header.AuxLocationsHeader aux_locs_header = 7;
+  if (has_aux_locs_header()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        7, this->aux_locs_header(), target);
+  }
+
+  // optional string command_line = 8;
+  if (has_command_line()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->command_line().data(), this->command_line().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        8, this->command_line(), target);
+  }
+
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int Header::ByteSize() const {
+  int total_size = 0;
+
+  if (_has_bits_[1 / 32] & (0xffu << (1 % 32))) {
+    // required .pb.Header.FileType file_type = 2;
+    if (has_file_type()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::EnumSize(this->file_type());
+    }
+
+    // optional .pb.Header.RawProteinsHeader raw_proteins_header = 3;
+    if (has_raw_proteins_header()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+          this->raw_proteins_header());
+    }
+
+    // optional .pb.Header.PeptidesHeader peptides_header = 4;
+    if (has_peptides_header()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+          this->peptides_header());
+    }
+
+    // optional .pb.Header.SpectraHeader spectra_header = 5;
+    if (has_spectra_header()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+          this->spectra_header());
+    }
+
+    // optional .pb.Header.ResultsHeader results_header = 6;
+    if (has_results_header()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+          this->results_header());
+    }
+
+    // optional .pb.Header.AuxLocationsHeader aux_locs_header = 7;
+    if (has_aux_locs_header()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+          this->aux_locs_header());
+    }
+
+    // optional string command_line = 8;
+    if (has_command_line()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->command_line());
+    }
+
+  }
+  // repeated .pb.Header.Source source = 1;
+  total_size += 1 * this->source_size();
+  for (int i = 0; i < this->source_size(); i++) {
+    total_size +=
+      ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+        this->source(i));
+  }
+
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void Header::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const Header* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const Header*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void Header::MergeFrom(const Header& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  source_.MergeFrom(from.source_);
+  if (from._has_bits_[1 / 32] & (0xffu << (1 % 32))) {
+    if (from.has_file_type()) {
+      set_file_type(from.file_type());
+    }
+    if (from.has_raw_proteins_header()) {
+      mutable_raw_proteins_header()->::pb::Header_RawProteinsHeader::MergeFrom(from.raw_proteins_header());
+    }
+    if (from.has_peptides_header()) {
+      mutable_peptides_header()->::pb::Header_PeptidesHeader::MergeFrom(from.peptides_header());
+    }
+    if (from.has_spectra_header()) {
+      mutable_spectra_header()->::pb::Header_SpectraHeader::MergeFrom(from.spectra_header());
+    }
+    if (from.has_results_header()) {
+      mutable_results_header()->::pb::Header_ResultsHeader::MergeFrom(from.results_header());
+    }
+    if (from.has_aux_locs_header()) {
+      mutable_aux_locs_header()->::pb::Header_AuxLocationsHeader::MergeFrom(from.aux_locs_header());
+    }
+    if (from.has_command_line()) {
+      set_command_line(from.command_line());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void Header::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void Header::CopyFrom(const Header& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool Header::IsInitialized() const {
+  if ((_has_bits_[0] & 0x00000002) != 0x00000002) return false;
+
+  for (int i = 0; i < source_size(); i++) {
+    if (!this->source(i).IsInitialized()) return false;
+  }
+  return true;
+}
+
+void Header::Swap(Header* other) {
+  if (other != this) {
+    source_.Swap(&other->source_);
+    std::swap(file_type_, other->file_type_);
+    std::swap(raw_proteins_header_, other->raw_proteins_header_);
+    std::swap(peptides_header_, other->peptides_header_);
+    std::swap(spectra_header_, other->spectra_header_);
+    std::swap(results_header_, other->results_header_);
+    std::swap(aux_locs_header_, other->aux_locs_header_);
+    std::swap(command_line_, other->command_line_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata Header::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = Header_descriptor_;
+  metadata.reflection = Header_reflection_;
+  return metadata;
+}
+
+
+// @@protoc_insertion_point(namespace_scope)
+
+}  // namespace pb
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/app/tide/protoobj/header.pb.h b/src/app/tide/protoobj/header.pb.h
new file mode 100644
index 0000000..af56961
--- /dev/null
+++ b/src/app/tide/protoobj/header.pb.h
@@ -0,0 +1,2404 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: header.proto
+
+#ifndef PROTOBUF_header_2eproto__INCLUDED
+#define PROTOBUF_header_2eproto__INCLUDED
+
+#include <string>
+
+#include <google/protobuf/stubs/common.h>
+
+#if GOOGLE_PROTOBUF_VERSION < 2005000
+#error This file was generated by a newer version of protoc which is
+#error incompatible with your Protocol Buffer headers.  Please update
+#error your headers.
+#endif
+#if 2005000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
+#error This file was generated by an older version of protoc which is
+#error incompatible with your Protocol Buffer headers.  Please
+#error regenerate this file with a newer version of protoc.
+#endif
+
+#include <google/protobuf/generated_message_util.h>
+#include <google/protobuf/message.h>
+#include <google/protobuf/repeated_field.h>
+#include <google/protobuf/extension_set.h>
+#include <google/protobuf/generated_enum_reflection.h>
+#include <google/protobuf/unknown_field_set.h>
+// @@protoc_insertion_point(includes)
+
+namespace pb {
+
+// Internal implementation detail -- do not call these.
+void  protobuf_AddDesc_header_2eproto();
+void protobuf_AssignDesc_header_2eproto();
+void protobuf_ShutdownFile_header_2eproto();
+
+class Modification;
+class ModTable;
+class Header;
+class Header_Source;
+class Header_RawProteinsHeader;
+class Header_PeptidesHeader;
+class Header_SpectraHeader;
+class Header_ResultsHeader;
+class Header_AuxLocationsHeader;
+
+enum Header_FileType {
+  Header_FileType_RAW_PROTEINS = 0,
+  Header_FileType_PEPTIDES = 1,
+  Header_FileType_SPECTRA = 2,
+  Header_FileType_PARAMS = 3,
+  Header_FileType_MOD_TABLE = 4,
+  Header_FileType_RESULTS = 5,
+  Header_FileType_AUX_LOCATIONS = 6
+};
+bool Header_FileType_IsValid(int value);
+const Header_FileType Header_FileType_FileType_MIN = Header_FileType_RAW_PROTEINS;
+const Header_FileType Header_FileType_FileType_MAX = Header_FileType_AUX_LOCATIONS;
+const int Header_FileType_FileType_ARRAYSIZE = Header_FileType_FileType_MAX + 1;
+
+const ::google::protobuf::EnumDescriptor* Header_FileType_descriptor();
+inline const ::std::string& Header_FileType_Name(Header_FileType value) {
+  return ::google::protobuf::internal::NameOfEnum(
+    Header_FileType_descriptor(), value);
+}
+inline bool Header_FileType_Parse(
+    const ::std::string& name, Header_FileType* value) {
+  return ::google::protobuf::internal::ParseNamedEnum<Header_FileType>(
+    Header_FileType_descriptor(), name, value);
+}
+// ===================================================================
+
+class Modification : public ::google::protobuf::Message {
+ public:
+  Modification();
+  virtual ~Modification();
+
+  Modification(const Modification& from);
+
+  inline Modification& operator=(const Modification& from) {
+    CopyFrom(from);
+    return *this;
+  }
+
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const Modification& default_instance();
+
+  void Swap(Modification* other);
+
+  // implements Message ----------------------------------------------
+
+  Modification* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const Modification& from);
+  void MergeFrom(const Modification& from);
+  void Clear();
+  bool IsInitialized() const;
+
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // optional string amino_acids = 1;
+  inline bool has_amino_acids() const;
+  inline void clear_amino_acids();
+  static const int kAminoAcidsFieldNumber = 1;
+  inline const ::std::string& amino_acids() const;
+  inline void set_amino_acids(const ::std::string& value);
+  inline void set_amino_acids(const char* value);
+  inline void set_amino_acids(const char* value, size_t size);
+  inline ::std::string* mutable_amino_acids();
+  inline ::std::string* release_amino_acids();
+  inline void set_allocated_amino_acids(::std::string* amino_acids);
+
+  // optional double delta = 2;
+  inline bool has_delta() const;
+  inline void clear_delta();
+  static const int kDeltaFieldNumber = 2;
+  inline double delta() const;
+  inline void set_delta(double value);
+
+  // optional int32 max_count = 3;
+  inline bool has_max_count() const;
+  inline void clear_max_count();
+  static const int kMaxCountFieldNumber = 3;
+  inline ::google::protobuf::int32 max_count() const;
+  inline void set_max_count(::google::protobuf::int32 value);
+
+  // @@protoc_insertion_point(class_scope:pb.Modification)
+ private:
+  inline void set_has_amino_acids();
+  inline void clear_has_amino_acids();
+  inline void set_has_delta();
+  inline void clear_has_delta();
+  inline void set_has_max_count();
+  inline void clear_has_max_count();
+
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+
+  ::std::string* amino_acids_;
+  double delta_;
+  ::google::protobuf::int32 max_count_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(3 + 31) / 32];
+
+  friend void  protobuf_AddDesc_header_2eproto();
+  friend void protobuf_AssignDesc_header_2eproto();
+  friend void protobuf_ShutdownFile_header_2eproto();
+
+  void InitAsDefaultInstance();
+  static Modification* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class ModTable : public ::google::protobuf::Message {
+ public:
+  ModTable();
+  virtual ~ModTable();
+
+  ModTable(const ModTable& from);
+
+  inline ModTable& operator=(const ModTable& from) {
+    CopyFrom(from);
+    return *this;
+  }
+
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const ModTable& default_instance();
+
+  void Swap(ModTable* other);
+
+  // implements Message ----------------------------------------------
+
+  ModTable* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const ModTable& from);
+  void MergeFrom(const ModTable& from);
+  void Clear();
+  bool IsInitialized() const;
+
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // repeated .pb.Modification variable_mod = 1;
+  inline int variable_mod_size() const;
+  inline void clear_variable_mod();
+  static const int kVariableModFieldNumber = 1;
+  inline const ::pb::Modification& variable_mod(int index) const;
+  inline ::pb::Modification* mutable_variable_mod(int index);
+  inline ::pb::Modification* add_variable_mod();
+  inline const ::google::protobuf::RepeatedPtrField< ::pb::Modification >&
+      variable_mod() const;
+  inline ::google::protobuf::RepeatedPtrField< ::pb::Modification >*
+      mutable_variable_mod();
+
+  // repeated .pb.Modification static_mod = 2;
+  inline int static_mod_size() const;
+  inline void clear_static_mod();
+  static const int kStaticModFieldNumber = 2;
+  inline const ::pb::Modification& static_mod(int index) const;
+  inline ::pb::Modification* mutable_static_mod(int index);
+  inline ::pb::Modification* add_static_mod();
+  inline const ::google::protobuf::RepeatedPtrField< ::pb::Modification >&
+      static_mod() const;
+  inline ::google::protobuf::RepeatedPtrField< ::pb::Modification >*
+      mutable_static_mod();
+
+  // repeated double unique_deltas = 10;
+  inline int unique_deltas_size() const;
+  inline void clear_unique_deltas();
+  static const int kUniqueDeltasFieldNumber = 10;
+  inline double unique_deltas(int index) const;
+  inline void set_unique_deltas(int index, double value);
+  inline void add_unique_deltas(double value);
+  inline const ::google::protobuf::RepeatedField< double >&
+      unique_deltas() const;
+  inline ::google::protobuf::RepeatedField< double >*
+      mutable_unique_deltas();
+
+  // @@protoc_insertion_point(class_scope:pb.ModTable)
+ private:
+
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+
+  ::google::protobuf::RepeatedPtrField< ::pb::Modification > variable_mod_;
+  ::google::protobuf::RepeatedPtrField< ::pb::Modification > static_mod_;
+  ::google::protobuf::RepeatedField< double > unique_deltas_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(3 + 31) / 32];
+
+  friend void  protobuf_AddDesc_header_2eproto();
+  friend void protobuf_AssignDesc_header_2eproto();
+  friend void protobuf_ShutdownFile_header_2eproto();
+
+  void InitAsDefaultInstance();
+  static ModTable* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class Header_Source : public ::google::protobuf::Message {
+ public:
+  Header_Source();
+  virtual ~Header_Source();
+
+  Header_Source(const Header_Source& from);
+
+  inline Header_Source& operator=(const Header_Source& from) {
+    CopyFrom(from);
+    return *this;
+  }
+
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const Header_Source& default_instance();
+
+  void Swap(Header_Source* other);
+
+  // implements Message ----------------------------------------------
+
+  Header_Source* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const Header_Source& from);
+  void MergeFrom(const Header_Source& from);
+  void Clear();
+  bool IsInitialized() const;
+
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // optional string filename = 1;
+  inline bool has_filename() const;
+  inline void clear_filename();
+  static const int kFilenameFieldNumber = 1;
+  inline const ::std::string& filename() const;
+  inline void set_filename(const ::std::string& value);
+  inline void set_filename(const char* value);
+  inline void set_filename(const char* value, size_t size);
+  inline ::std::string* mutable_filename();
+  inline ::std::string* release_filename();
+  inline void set_allocated_filename(::std::string* filename);
+
+  // optional .pb.Header header = 2;
+  inline bool has_header() const;
+  inline void clear_header();
+  static const int kHeaderFieldNumber = 2;
+  inline const ::pb::Header& header() const;
+  inline ::pb::Header* mutable_header();
+  inline ::pb::Header* release_header();
+  inline void set_allocated_header(::pb::Header* header);
+
+  // optional string filetype = 3;
+  inline bool has_filetype() const;
+  inline void clear_filetype();
+  static const int kFiletypeFieldNumber = 3;
+  inline const ::std::string& filetype() const;
+  inline void set_filetype(const ::std::string& value);
+  inline void set_filetype(const char* value);
+  inline void set_filetype(const char* value, size_t size);
+  inline ::std::string* mutable_filetype();
+  inline ::std::string* release_filetype();
+  inline void set_allocated_filetype(::std::string* filetype);
+
+  // @@protoc_insertion_point(class_scope:pb.Header.Source)
+ private:
+  inline void set_has_filename();
+  inline void clear_has_filename();
+  inline void set_has_header();
+  inline void clear_has_header();
+  inline void set_has_filetype();
+  inline void clear_has_filetype();
+
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+
+  ::std::string* filename_;
+  ::pb::Header* header_;
+  ::std::string* filetype_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(3 + 31) / 32];
+
+  friend void  protobuf_AddDesc_header_2eproto();
+  friend void protobuf_AssignDesc_header_2eproto();
+  friend void protobuf_ShutdownFile_header_2eproto();
+
+  void InitAsDefaultInstance();
+  static Header_Source* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class Header_RawProteinsHeader : public ::google::protobuf::Message {
+ public:
+  Header_RawProteinsHeader();
+  virtual ~Header_RawProteinsHeader();
+
+  Header_RawProteinsHeader(const Header_RawProteinsHeader& from);
+
+  inline Header_RawProteinsHeader& operator=(const Header_RawProteinsHeader& from) {
+    CopyFrom(from);
+    return *this;
+  }
+
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const Header_RawProteinsHeader& default_instance();
+
+  void Swap(Header_RawProteinsHeader* other);
+
+  // implements Message ----------------------------------------------
+
+  Header_RawProteinsHeader* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const Header_RawProteinsHeader& from);
+  void MergeFrom(const Header_RawProteinsHeader& from);
+  void Clear();
+  bool IsInitialized() const;
+
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // @@protoc_insertion_point(class_scope:pb.Header.RawProteinsHeader)
+ private:
+
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[1];
+
+  friend void  protobuf_AddDesc_header_2eproto();
+  friend void protobuf_AssignDesc_header_2eproto();
+  friend void protobuf_ShutdownFile_header_2eproto();
+
+  void InitAsDefaultInstance();
+  static Header_RawProteinsHeader* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class Header_PeptidesHeader : public ::google::protobuf::Message {
+ public:
+  Header_PeptidesHeader();
+  virtual ~Header_PeptidesHeader();
+
+  Header_PeptidesHeader(const Header_PeptidesHeader& from);
+
+  inline Header_PeptidesHeader& operator=(const Header_PeptidesHeader& from) {
+    CopyFrom(from);
+    return *this;
+  }
+
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const Header_PeptidesHeader& default_instance();
+
+  void Swap(Header_PeptidesHeader* other);
+
+  // implements Message ----------------------------------------------
+
+  Header_PeptidesHeader* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const Header_PeptidesHeader& from);
+  void MergeFrom(const Header_PeptidesHeader& from);
+  void Clear();
+  bool IsInitialized() const;
+
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // optional double min_mass = 3;
+  inline bool has_min_mass() const;
+  inline void clear_min_mass();
+  static const int kMinMassFieldNumber = 3;
+  inline double min_mass() const;
+  inline void set_min_mass(double value);
+
+  // optional double max_mass = 4;
+  inline bool has_max_mass() const;
+  inline void clear_max_mass();
+  static const int kMaxMassFieldNumber = 4;
+  inline double max_mass() const;
+  inline void set_max_mass(double value);
+
+  // optional int32 min_length = 5;
+  inline bool has_min_length() const;
+  inline void clear_min_length();
+  static const int kMinLengthFieldNumber = 5;
+  inline ::google::protobuf::int32 min_length() const;
+  inline void set_min_length(::google::protobuf::int32 value);
+
+  // optional int32 max_length = 6;
+  inline bool has_max_length() const;
+  inline void clear_max_length();
+  static const int kMaxLengthFieldNumber = 6;
+  inline ::google::protobuf::int32 max_length() const;
+  inline void set_max_length(::google::protobuf::int32 value);
+
+  // optional string enzyme = 7;
+  inline bool has_enzyme() const;
+  inline void clear_enzyme();
+  static const int kEnzymeFieldNumber = 7;
+  inline const ::std::string& enzyme() const;
+  inline void set_enzyme(const ::std::string& value);
+  inline void set_enzyme(const char* value);
+  inline void set_enzyme(const char* value, size_t size);
+  inline ::std::string* mutable_enzyme();
+  inline ::std::string* release_enzyme();
+  inline void set_allocated_enzyme(::std::string* enzyme);
+
+  // optional bool full_digestion = 8;
+  inline bool has_full_digestion() const;
+  inline void clear_full_digestion();
+  static const int kFullDigestionFieldNumber = 8;
+  inline bool full_digestion() const;
+  inline void set_full_digestion(bool value);
+
+  // optional int32 max_missed_cleavages = 14;
+  inline bool has_max_missed_cleavages() const;
+  inline void clear_max_missed_cleavages();
+  static const int kMaxMissedCleavagesFieldNumber = 14;
+  inline ::google::protobuf::int32 max_missed_cleavages() const;
+  inline void set_max_missed_cleavages(::google::protobuf::int32 value);
+
+  // optional bool monoisotopic_precursor = 13;
+  inline bool has_monoisotopic_precursor() const;
+  inline void clear_monoisotopic_precursor();
+  static const int kMonoisotopicPrecursorFieldNumber = 13;
+  inline bool monoisotopic_precursor() const;
+  inline void set_monoisotopic_precursor(bool value);
+
+  // optional bool has_peaks = 10;
+  inline bool has_has_peaks() const;
+  inline void clear_has_peaks();
+  static const int kHasPeaksFieldNumber = 10;
+  inline bool has_peaks() const;
+  inline void set_has_peaks(bool value);
+
+  // optional double downselect_fraction = 11;
+  inline bool has_downselect_fraction() const;
+  inline void clear_downselect_fraction();
+  static const int kDownselectFractionFieldNumber = 11;
+  inline double downselect_fraction() const;
+  inline void set_downselect_fraction(double value);
+
+  // optional .pb.ModTable mods = 12;
+  inline bool has_mods() const;
+  inline void clear_mods();
+  static const int kModsFieldNumber = 12;
+  inline const ::pb::ModTable& mods() const;
+  inline ::pb::ModTable* mutable_mods();
+  inline ::pb::ModTable* release_mods();
+  inline void set_allocated_mods(::pb::ModTable* mods);
+
+  // optional .pb.ModTable nterm_mods = 15;
+  inline bool has_nterm_mods() const;
+  inline void clear_nterm_mods();
+  static const int kNtermModsFieldNumber = 15;
+  inline const ::pb::ModTable& nterm_mods() const;
+  inline ::pb::ModTable* mutable_nterm_mods();
+  inline ::pb::ModTable* release_nterm_mods();
+  inline void set_allocated_nterm_mods(::pb::ModTable* nterm_mods);
+
+  // optional .pb.ModTable cterm_mods = 16;
+  inline bool has_cterm_mods() const;
+  inline void clear_cterm_mods();
+  static const int kCtermModsFieldNumber = 16;
+  inline const ::pb::ModTable& cterm_mods() const;
+  inline ::pb::ModTable* mutable_cterm_mods();
+  inline ::pb::ModTable* release_cterm_mods();
+  inline void set_allocated_cterm_mods(::pb::ModTable* cterm_mods);
+
+  // optional int32 decoys = 9;
+  inline bool has_decoys() const;
+  inline void clear_decoys();
+  static const int kDecoysFieldNumber = 9;
+  inline ::google::protobuf::int32 decoys() const;
+  inline void set_decoys(::google::protobuf::int32 value);
+
+  // @@protoc_insertion_point(class_scope:pb.Header.PeptidesHeader)
+ private:
+  inline void set_has_min_mass();
+  inline void clear_has_min_mass();
+  inline void set_has_max_mass();
+  inline void clear_has_max_mass();
+  inline void set_has_min_length();
+  inline void clear_has_min_length();
+  inline void set_has_max_length();
+  inline void clear_has_max_length();
+  inline void set_has_enzyme();
+  inline void clear_has_enzyme();
+  inline void set_has_full_digestion();
+  inline void clear_has_full_digestion();
+  inline void set_has_max_missed_cleavages();
+  inline void clear_has_max_missed_cleavages();
+  inline void set_has_monoisotopic_precursor();
+  inline void clear_has_monoisotopic_precursor();
+  inline void set_has_has_peaks();
+  inline void clear_has_has_peaks();
+  inline void set_has_downselect_fraction();
+  inline void clear_has_downselect_fraction();
+  inline void set_has_mods();
+  inline void clear_has_mods();
+  inline void set_has_nterm_mods();
+  inline void clear_has_nterm_mods();
+  inline void set_has_cterm_mods();
+  inline void clear_has_cterm_mods();
+  inline void set_has_decoys();
+  inline void clear_has_decoys();
+
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+
+  double min_mass_;
+  double max_mass_;
+  ::google::protobuf::int32 min_length_;
+  ::google::protobuf::int32 max_length_;
+  ::std::string* enzyme_;
+  ::google::protobuf::int32 max_missed_cleavages_;
+  bool full_digestion_;
+  bool monoisotopic_precursor_;
+  bool has_peaks_;
+  double downselect_fraction_;
+  ::pb::ModTable* mods_;
+  ::pb::ModTable* nterm_mods_;
+  ::pb::ModTable* cterm_mods_;
+  ::google::protobuf::int32 decoys_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(14 + 31) / 32];
+
+  friend void  protobuf_AddDesc_header_2eproto();
+  friend void protobuf_AssignDesc_header_2eproto();
+  friend void protobuf_ShutdownFile_header_2eproto();
+
+  void InitAsDefaultInstance();
+  static Header_PeptidesHeader* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class Header_SpectraHeader : public ::google::protobuf::Message {
+ public:
+  Header_SpectraHeader();
+  virtual ~Header_SpectraHeader();
+
+  Header_SpectraHeader(const Header_SpectraHeader& from);
+
+  inline Header_SpectraHeader& operator=(const Header_SpectraHeader& from) {
+    CopyFrom(from);
+    return *this;
+  }
+
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const Header_SpectraHeader& default_instance();
+
+  void Swap(Header_SpectraHeader* other);
+
+  // implements Message ----------------------------------------------
+
+  Header_SpectraHeader* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const Header_SpectraHeader& from);
+  void MergeFrom(const Header_SpectraHeader& from);
+  void Clear();
+  bool IsInitialized() const;
+
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // optional bool sorted = 2;
+  inline bool has_sorted() const;
+  inline void clear_sorted();
+  static const int kSortedFieldNumber = 2;
+  inline bool sorted() const;
+  inline void set_sorted(bool value);
+
+  // @@protoc_insertion_point(class_scope:pb.Header.SpectraHeader)
+ private:
+  inline void set_has_sorted();
+  inline void clear_has_sorted();
+
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+
+  bool sorted_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(1 + 31) / 32];
+
+  friend void  protobuf_AddDesc_header_2eproto();
+  friend void protobuf_AssignDesc_header_2eproto();
+  friend void protobuf_ShutdownFile_header_2eproto();
+
+  void InitAsDefaultInstance();
+  static Header_SpectraHeader* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class Header_ResultsHeader : public ::google::protobuf::Message {
+ public:
+  Header_ResultsHeader();
+  virtual ~Header_ResultsHeader();
+
+  Header_ResultsHeader(const Header_ResultsHeader& from);
+
+  inline Header_ResultsHeader& operator=(const Header_ResultsHeader& from) {
+    CopyFrom(from);
+    return *this;
+  }
+
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const Header_ResultsHeader& default_instance();
+
+  void Swap(Header_ResultsHeader* other);
+
+  // implements Message ----------------------------------------------
+
+  Header_ResultsHeader* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const Header_ResultsHeader& from);
+  void MergeFrom(const Header_ResultsHeader& from);
+  void Clear();
+  bool IsInitialized() const;
+
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // optional double mass_window = 1;
+  inline bool has_mass_window() const;
+  inline void clear_mass_window();
+  static const int kMassWindowFieldNumber = 1;
+  inline double mass_window() const;
+  inline void set_mass_window(double value);
+
+  // optional int32 top_matches = 2;
+  inline bool has_top_matches() const;
+  inline void clear_top_matches();
+  static const int kTopMatchesFieldNumber = 2;
+  inline ::google::protobuf::int32 top_matches() const;
+  inline void set_top_matches(::google::protobuf::int32 value);
+
+  // optional .pb.Header.PeptidesHeader peptides_header = 3;
+  inline bool has_peptides_header() const;
+  inline void clear_peptides_header();
+  static const int kPeptidesHeaderFieldNumber = 3;
+  inline const ::pb::Header_PeptidesHeader& peptides_header() const;
+  inline ::pb::Header_PeptidesHeader* mutable_peptides_header();
+  inline ::pb::Header_PeptidesHeader* release_peptides_header();
+  inline void set_allocated_peptides_header(::pb::Header_PeptidesHeader* peptides_header);
+
+  // @@protoc_insertion_point(class_scope:pb.Header.ResultsHeader)
+ private:
+  inline void set_has_mass_window();
+  inline void clear_has_mass_window();
+  inline void set_has_top_matches();
+  inline void clear_has_top_matches();
+  inline void set_has_peptides_header();
+  inline void clear_has_peptides_header();
+
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+
+  double mass_window_;
+  ::pb::Header_PeptidesHeader* peptides_header_;
+  ::google::protobuf::int32 top_matches_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(3 + 31) / 32];
+
+  friend void  protobuf_AddDesc_header_2eproto();
+  friend void protobuf_AssignDesc_header_2eproto();
+  friend void protobuf_ShutdownFile_header_2eproto();
+
+  void InitAsDefaultInstance();
+  static Header_ResultsHeader* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class Header_AuxLocationsHeader : public ::google::protobuf::Message {
+ public:
+  Header_AuxLocationsHeader();
+  virtual ~Header_AuxLocationsHeader();
+
+  Header_AuxLocationsHeader(const Header_AuxLocationsHeader& from);
+
+  inline Header_AuxLocationsHeader& operator=(const Header_AuxLocationsHeader& from) {
+    CopyFrom(from);
+    return *this;
+  }
+
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const Header_AuxLocationsHeader& default_instance();
+
+  void Swap(Header_AuxLocationsHeader* other);
+
+  // implements Message ----------------------------------------------
+
+  Header_AuxLocationsHeader* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const Header_AuxLocationsHeader& from);
+  void MergeFrom(const Header_AuxLocationsHeader& from);
+  void Clear();
+  bool IsInitialized() const;
+
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // @@protoc_insertion_point(class_scope:pb.Header.AuxLocationsHeader)
+ private:
+
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[1];
+
+  friend void  protobuf_AddDesc_header_2eproto();
+  friend void protobuf_AssignDesc_header_2eproto();
+  friend void protobuf_ShutdownFile_header_2eproto();
+
+  void InitAsDefaultInstance();
+  static Header_AuxLocationsHeader* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class Header : public ::google::protobuf::Message {
+ public:
+  Header();
+  virtual ~Header();
+
+  Header(const Header& from);
+
+  inline Header& operator=(const Header& from) {
+    CopyFrom(from);
+    return *this;
+  }
+
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const Header& default_instance();
+
+  void Swap(Header* other);
+
+  // implements Message ----------------------------------------------
+
+  Header* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const Header& from);
+  void MergeFrom(const Header& from);
+  void Clear();
+  bool IsInitialized() const;
+
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const;
+
+  // nested types ----------------------------------------------------
+
+  typedef Header_Source Source;
+  typedef Header_RawProteinsHeader RawProteinsHeader;
+  typedef Header_PeptidesHeader PeptidesHeader;
+  typedef Header_SpectraHeader SpectraHeader;
+  typedef Header_ResultsHeader ResultsHeader;
+  typedef Header_AuxLocationsHeader AuxLocationsHeader;
+
+  typedef Header_FileType FileType;
+  static const FileType RAW_PROTEINS = Header_FileType_RAW_PROTEINS;
+  static const FileType PEPTIDES = Header_FileType_PEPTIDES;
+  static const FileType SPECTRA = Header_FileType_SPECTRA;
+  static const FileType PARAMS = Header_FileType_PARAMS;
+  static const FileType MOD_TABLE = Header_FileType_MOD_TABLE;
+  static const FileType RESULTS = Header_FileType_RESULTS;
+  static const FileType AUX_LOCATIONS = Header_FileType_AUX_LOCATIONS;
+  static inline bool FileType_IsValid(int value) {
+    return Header_FileType_IsValid(value);
+  }
+  static const FileType FileType_MIN =
+    Header_FileType_FileType_MIN;
+  static const FileType FileType_MAX =
+    Header_FileType_FileType_MAX;
+  static const int FileType_ARRAYSIZE =
+    Header_FileType_FileType_ARRAYSIZE;
+  static inline const ::google::protobuf::EnumDescriptor*
+  FileType_descriptor() {
+    return Header_FileType_descriptor();
+  }
+  static inline const ::std::string& FileType_Name(FileType value) {
+    return Header_FileType_Name(value);
+  }
+  static inline bool FileType_Parse(const ::std::string& name,
+      FileType* value) {
+    return Header_FileType_Parse(name, value);
+  }
+
+  // accessors -------------------------------------------------------
+
+  // repeated .pb.Header.Source source = 1;
+  inline int source_size() const;
+  inline void clear_source();
+  static const int kSourceFieldNumber = 1;
+  inline const ::pb::Header_Source& source(int index) const;
+  inline ::pb::Header_Source* mutable_source(int index);
+  inline ::pb::Header_Source* add_source();
+  inline const ::google::protobuf::RepeatedPtrField< ::pb::Header_Source >&
+      source() const;
+  inline ::google::protobuf::RepeatedPtrField< ::pb::Header_Source >*
+      mutable_source();
+
+  // required .pb.Header.FileType file_type = 2;
+  inline bool has_file_type() const;
+  inline void clear_file_type();
+  static const int kFileTypeFieldNumber = 2;
+  inline ::pb::Header_FileType file_type() const;
+  inline void set_file_type(::pb::Header_FileType value);
+
+  // optional .pb.Header.RawProteinsHeader raw_proteins_header = 3;
+  inline bool has_raw_proteins_header() const;
+  inline void clear_raw_proteins_header();
+  static const int kRawProteinsHeaderFieldNumber = 3;
+  inline const ::pb::Header_RawProteinsHeader& raw_proteins_header() const;
+  inline ::pb::Header_RawProteinsHeader* mutable_raw_proteins_header();
+  inline ::pb::Header_RawProteinsHeader* release_raw_proteins_header();
+  inline void set_allocated_raw_proteins_header(::pb::Header_RawProteinsHeader* raw_proteins_header);
+
+  // optional .pb.Header.PeptidesHeader peptides_header = 4;
+  inline bool has_peptides_header() const;
+  inline void clear_peptides_header();
+  static const int kPeptidesHeaderFieldNumber = 4;
+  inline const ::pb::Header_PeptidesHeader& peptides_header() const;
+  inline ::pb::Header_PeptidesHeader* mutable_peptides_header();
+  inline ::pb::Header_PeptidesHeader* release_peptides_header();
+  inline void set_allocated_peptides_header(::pb::Header_PeptidesHeader* peptides_header);
+
+  // optional .pb.Header.SpectraHeader spectra_header = 5;
+  inline bool has_spectra_header() const;
+  inline void clear_spectra_header();
+  static const int kSpectraHeaderFieldNumber = 5;
+  inline const ::pb::Header_SpectraHeader& spectra_header() const;
+  inline ::pb::Header_SpectraHeader* mutable_spectra_header();
+  inline ::pb::Header_SpectraHeader* release_spectra_header();
+  inline void set_allocated_spectra_header(::pb::Header_SpectraHeader* spectra_header);
+
+  // optional .pb.Header.ResultsHeader results_header = 6;
+  inline bool has_results_header() const;
+  inline void clear_results_header();
+  static const int kResultsHeaderFieldNumber = 6;
+  inline const ::pb::Header_ResultsHeader& results_header() const;
+  inline ::pb::Header_ResultsHeader* mutable_results_header();
+  inline ::pb::Header_ResultsHeader* release_results_header();
+  inline void set_allocated_results_header(::pb::Header_ResultsHeader* results_header);
+
+  // optional .pb.Header.AuxLocationsHeader aux_locs_header = 7;
+  inline bool has_aux_locs_header() const;
+  inline void clear_aux_locs_header();
+  static const int kAuxLocsHeaderFieldNumber = 7;
+  inline const ::pb::Header_AuxLocationsHeader& aux_locs_header() const;
+  inline ::pb::Header_AuxLocationsHeader* mutable_aux_locs_header();
+  inline ::pb::Header_AuxLocationsHeader* release_aux_locs_header();
+  inline void set_allocated_aux_locs_header(::pb::Header_AuxLocationsHeader* aux_locs_header);
+
+  // optional string command_line = 8;
+  inline bool has_command_line() const;
+  inline void clear_command_line();
+  static const int kCommandLineFieldNumber = 8;
+  inline const ::std::string& command_line() const;
+  inline void set_command_line(const ::std::string& value);
+  inline void set_command_line(const char* value);
+  inline void set_command_line(const char* value, size_t size);
+  inline ::std::string* mutable_command_line();
+  inline ::std::string* release_command_line();
+  inline void set_allocated_command_line(::std::string* command_line);
+
+  // @@protoc_insertion_point(class_scope:pb.Header)
+ private:
+  inline void set_has_file_type();
+  inline void clear_has_file_type();
+  inline void set_has_raw_proteins_header();
+  inline void clear_has_raw_proteins_header();
+  inline void set_has_peptides_header();
+  inline void clear_has_peptides_header();
+  inline void set_has_spectra_header();
+  inline void clear_has_spectra_header();
+  inline void set_has_results_header();
+  inline void clear_has_results_header();
+  inline void set_has_aux_locs_header();
+  inline void clear_has_aux_locs_header();
+  inline void set_has_command_line();
+  inline void clear_has_command_line();
+
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+
+  ::google::protobuf::RepeatedPtrField< ::pb::Header_Source > source_;
+  ::pb::Header_RawProteinsHeader* raw_proteins_header_;
+  ::pb::Header_PeptidesHeader* peptides_header_;
+  ::pb::Header_SpectraHeader* spectra_header_;
+  ::pb::Header_ResultsHeader* results_header_;
+  ::pb::Header_AuxLocationsHeader* aux_locs_header_;
+  ::std::string* command_line_;
+  int file_type_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(8 + 31) / 32];
+
+  friend void  protobuf_AddDesc_header_2eproto();
+  friend void protobuf_AssignDesc_header_2eproto();
+  friend void protobuf_ShutdownFile_header_2eproto();
+
+  void InitAsDefaultInstance();
+  static Header* default_instance_;
+};
+// ===================================================================
+
+
+// ===================================================================
+
+// Modification
+
+// optional string amino_acids = 1;
+inline bool Modification::has_amino_acids() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void Modification::set_has_amino_acids() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void Modification::clear_has_amino_acids() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void Modification::clear_amino_acids() {
+  if (amino_acids_ != &::google::protobuf::internal::kEmptyString) {
+    amino_acids_->clear();
+  }
+  clear_has_amino_acids();
+}
+inline const ::std::string& Modification::amino_acids() const {
+  return *amino_acids_;
+}
+inline void Modification::set_amino_acids(const ::std::string& value) {
+  set_has_amino_acids();
+  if (amino_acids_ == &::google::protobuf::internal::kEmptyString) {
+    amino_acids_ = new ::std::string;
+  }
+  amino_acids_->assign(value);
+}
+inline void Modification::set_amino_acids(const char* value) {
+  set_has_amino_acids();
+  if (amino_acids_ == &::google::protobuf::internal::kEmptyString) {
+    amino_acids_ = new ::std::string;
+  }
+  amino_acids_->assign(value);
+}
+inline void Modification::set_amino_acids(const char* value, size_t size) {
+  set_has_amino_acids();
+  if (amino_acids_ == &::google::protobuf::internal::kEmptyString) {
+    amino_acids_ = new ::std::string;
+  }
+  amino_acids_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* Modification::mutable_amino_acids() {
+  set_has_amino_acids();
+  if (amino_acids_ == &::google::protobuf::internal::kEmptyString) {
+    amino_acids_ = new ::std::string;
+  }
+  return amino_acids_;
+}
+inline ::std::string* Modification::release_amino_acids() {
+  clear_has_amino_acids();
+  if (amino_acids_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = amino_acids_;
+    amino_acids_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+inline void Modification::set_allocated_amino_acids(::std::string* amino_acids) {
+  if (amino_acids_ != &::google::protobuf::internal::kEmptyString) {
+    delete amino_acids_;
+  }
+  if (amino_acids) {
+    set_has_amino_acids();
+    amino_acids_ = amino_acids;
+  } else {
+    clear_has_amino_acids();
+    amino_acids_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  }
+}
+
+// optional double delta = 2;
+inline bool Modification::has_delta() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void Modification::set_has_delta() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void Modification::clear_has_delta() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void Modification::clear_delta() {
+  delta_ = 0;
+  clear_has_delta();
+}
+inline double Modification::delta() const {
+  return delta_;
+}
+inline void Modification::set_delta(double value) {
+  set_has_delta();
+  delta_ = value;
+}
+
+// optional int32 max_count = 3;
+inline bool Modification::has_max_count() const {
+  return (_has_bits_[0] & 0x00000004u) != 0;
+}
+inline void Modification::set_has_max_count() {
+  _has_bits_[0] |= 0x00000004u;
+}
+inline void Modification::clear_has_max_count() {
+  _has_bits_[0] &= ~0x00000004u;
+}
+inline void Modification::clear_max_count() {
+  max_count_ = 0;
+  clear_has_max_count();
+}
+inline ::google::protobuf::int32 Modification::max_count() const {
+  return max_count_;
+}
+inline void Modification::set_max_count(::google::protobuf::int32 value) {
+  set_has_max_count();
+  max_count_ = value;
+}
+
+// -------------------------------------------------------------------
+
+// ModTable
+
+// repeated .pb.Modification variable_mod = 1;
+inline int ModTable::variable_mod_size() const {
+  return variable_mod_.size();
+}
+inline void ModTable::clear_variable_mod() {
+  variable_mod_.Clear();
+}
+inline const ::pb::Modification& ModTable::variable_mod(int index) const {
+  return variable_mod_.Get(index);
+}
+inline ::pb::Modification* ModTable::mutable_variable_mod(int index) {
+  return variable_mod_.Mutable(index);
+}
+inline ::pb::Modification* ModTable::add_variable_mod() {
+  return variable_mod_.Add();
+}
+inline const ::google::protobuf::RepeatedPtrField< ::pb::Modification >&
+ModTable::variable_mod() const {
+  return variable_mod_;
+}
+inline ::google::protobuf::RepeatedPtrField< ::pb::Modification >*
+ModTable::mutable_variable_mod() {
+  return &variable_mod_;
+}
+
+// repeated .pb.Modification static_mod = 2;
+inline int ModTable::static_mod_size() const {
+  return static_mod_.size();
+}
+inline void ModTable::clear_static_mod() {
+  static_mod_.Clear();
+}
+inline const ::pb::Modification& ModTable::static_mod(int index) const {
+  return static_mod_.Get(index);
+}
+inline ::pb::Modification* ModTable::mutable_static_mod(int index) {
+  return static_mod_.Mutable(index);
+}
+inline ::pb::Modification* ModTable::add_static_mod() {
+  return static_mod_.Add();
+}
+inline const ::google::protobuf::RepeatedPtrField< ::pb::Modification >&
+ModTable::static_mod() const {
+  return static_mod_;
+}
+inline ::google::protobuf::RepeatedPtrField< ::pb::Modification >*
+ModTable::mutable_static_mod() {
+  return &static_mod_;
+}
+
+// repeated double unique_deltas = 10;
+inline int ModTable::unique_deltas_size() const {
+  return unique_deltas_.size();
+}
+inline void ModTable::clear_unique_deltas() {
+  unique_deltas_.Clear();
+}
+inline double ModTable::unique_deltas(int index) const {
+  return unique_deltas_.Get(index);
+}
+inline void ModTable::set_unique_deltas(int index, double value) {
+  unique_deltas_.Set(index, value);
+}
+inline void ModTable::add_unique_deltas(double value) {
+  unique_deltas_.Add(value);
+}
+inline const ::google::protobuf::RepeatedField< double >&
+ModTable::unique_deltas() const {
+  return unique_deltas_;
+}
+inline ::google::protobuf::RepeatedField< double >*
+ModTable::mutable_unique_deltas() {
+  return &unique_deltas_;
+}
+
+// -------------------------------------------------------------------
+
+// Header_Source
+
+// optional string filename = 1;
+inline bool Header_Source::has_filename() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void Header_Source::set_has_filename() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void Header_Source::clear_has_filename() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void Header_Source::clear_filename() {
+  if (filename_ != &::google::protobuf::internal::kEmptyString) {
+    filename_->clear();
+  }
+  clear_has_filename();
+}
+inline const ::std::string& Header_Source::filename() const {
+  return *filename_;
+}
+inline void Header_Source::set_filename(const ::std::string& value) {
+  set_has_filename();
+  if (filename_ == &::google::protobuf::internal::kEmptyString) {
+    filename_ = new ::std::string;
+  }
+  filename_->assign(value);
+}
+inline void Header_Source::set_filename(const char* value) {
+  set_has_filename();
+  if (filename_ == &::google::protobuf::internal::kEmptyString) {
+    filename_ = new ::std::string;
+  }
+  filename_->assign(value);
+}
+inline void Header_Source::set_filename(const char* value, size_t size) {
+  set_has_filename();
+  if (filename_ == &::google::protobuf::internal::kEmptyString) {
+    filename_ = new ::std::string;
+  }
+  filename_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* Header_Source::mutable_filename() {
+  set_has_filename();
+  if (filename_ == &::google::protobuf::internal::kEmptyString) {
+    filename_ = new ::std::string;
+  }
+  return filename_;
+}
+inline ::std::string* Header_Source::release_filename() {
+  clear_has_filename();
+  if (filename_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = filename_;
+    filename_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+inline void Header_Source::set_allocated_filename(::std::string* filename) {
+  if (filename_ != &::google::protobuf::internal::kEmptyString) {
+    delete filename_;
+  }
+  if (filename) {
+    set_has_filename();
+    filename_ = filename;
+  } else {
+    clear_has_filename();
+    filename_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  }
+}
+
+// optional .pb.Header header = 2;
+inline bool Header_Source::has_header() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void Header_Source::set_has_header() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void Header_Source::clear_has_header() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void Header_Source::clear_header() {
+  if (header_ != NULL) header_->::pb::Header::Clear();
+  clear_has_header();
+}
+inline const ::pb::Header& Header_Source::header() const {
+  return header_ != NULL ? *header_ : *default_instance_->header_;
+}
+inline ::pb::Header* Header_Source::mutable_header() {
+  set_has_header();
+  if (header_ == NULL) header_ = new ::pb::Header;
+  return header_;
+}
+inline ::pb::Header* Header_Source::release_header() {
+  clear_has_header();
+  ::pb::Header* temp = header_;
+  header_ = NULL;
+  return temp;
+}
+inline void Header_Source::set_allocated_header(::pb::Header* header) {
+  delete header_;
+  header_ = header;
+  if (header) {
+    set_has_header();
+  } else {
+    clear_has_header();
+  }
+}
+
+// optional string filetype = 3;
+inline bool Header_Source::has_filetype() const {
+  return (_has_bits_[0] & 0x00000004u) != 0;
+}
+inline void Header_Source::set_has_filetype() {
+  _has_bits_[0] |= 0x00000004u;
+}
+inline void Header_Source::clear_has_filetype() {
+  _has_bits_[0] &= ~0x00000004u;
+}
+inline void Header_Source::clear_filetype() {
+  if (filetype_ != &::google::protobuf::internal::kEmptyString) {
+    filetype_->clear();
+  }
+  clear_has_filetype();
+}
+inline const ::std::string& Header_Source::filetype() const {
+  return *filetype_;
+}
+inline void Header_Source::set_filetype(const ::std::string& value) {
+  set_has_filetype();
+  if (filetype_ == &::google::protobuf::internal::kEmptyString) {
+    filetype_ = new ::std::string;
+  }
+  filetype_->assign(value);
+}
+inline void Header_Source::set_filetype(const char* value) {
+  set_has_filetype();
+  if (filetype_ == &::google::protobuf::internal::kEmptyString) {
+    filetype_ = new ::std::string;
+  }
+  filetype_->assign(value);
+}
+inline void Header_Source::set_filetype(const char* value, size_t size) {
+  set_has_filetype();
+  if (filetype_ == &::google::protobuf::internal::kEmptyString) {
+    filetype_ = new ::std::string;
+  }
+  filetype_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* Header_Source::mutable_filetype() {
+  set_has_filetype();
+  if (filetype_ == &::google::protobuf::internal::kEmptyString) {
+    filetype_ = new ::std::string;
+  }
+  return filetype_;
+}
+inline ::std::string* Header_Source::release_filetype() {
+  clear_has_filetype();
+  if (filetype_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = filetype_;
+    filetype_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+inline void Header_Source::set_allocated_filetype(::std::string* filetype) {
+  if (filetype_ != &::google::protobuf::internal::kEmptyString) {
+    delete filetype_;
+  }
+  if (filetype) {
+    set_has_filetype();
+    filetype_ = filetype;
+  } else {
+    clear_has_filetype();
+    filetype_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  }
+}
+
+// -------------------------------------------------------------------
+
+// Header_RawProteinsHeader
+
+// -------------------------------------------------------------------
+
+// Header_PeptidesHeader
+
+// optional double min_mass = 3;
+inline bool Header_PeptidesHeader::has_min_mass() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void Header_PeptidesHeader::set_has_min_mass() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void Header_PeptidesHeader::clear_has_min_mass() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void Header_PeptidesHeader::clear_min_mass() {
+  min_mass_ = 0;
+  clear_has_min_mass();
+}
+inline double Header_PeptidesHeader::min_mass() const {
+  return min_mass_;
+}
+inline void Header_PeptidesHeader::set_min_mass(double value) {
+  set_has_min_mass();
+  min_mass_ = value;
+}
+
+// optional double max_mass = 4;
+inline bool Header_PeptidesHeader::has_max_mass() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void Header_PeptidesHeader::set_has_max_mass() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void Header_PeptidesHeader::clear_has_max_mass() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void Header_PeptidesHeader::clear_max_mass() {
+  max_mass_ = 0;
+  clear_has_max_mass();
+}
+inline double Header_PeptidesHeader::max_mass() const {
+  return max_mass_;
+}
+inline void Header_PeptidesHeader::set_max_mass(double value) {
+  set_has_max_mass();
+  max_mass_ = value;
+}
+
+// optional int32 min_length = 5;
+inline bool Header_PeptidesHeader::has_min_length() const {
+  return (_has_bits_[0] & 0x00000004u) != 0;
+}
+inline void Header_PeptidesHeader::set_has_min_length() {
+  _has_bits_[0] |= 0x00000004u;
+}
+inline void Header_PeptidesHeader::clear_has_min_length() {
+  _has_bits_[0] &= ~0x00000004u;
+}
+inline void Header_PeptidesHeader::clear_min_length() {
+  min_length_ = 0;
+  clear_has_min_length();
+}
+inline ::google::protobuf::int32 Header_PeptidesHeader::min_length() const {
+  return min_length_;
+}
+inline void Header_PeptidesHeader::set_min_length(::google::protobuf::int32 value) {
+  set_has_min_length();
+  min_length_ = value;
+}
+
+// optional int32 max_length = 6;
+inline bool Header_PeptidesHeader::has_max_length() const {
+  return (_has_bits_[0] & 0x00000008u) != 0;
+}
+inline void Header_PeptidesHeader::set_has_max_length() {
+  _has_bits_[0] |= 0x00000008u;
+}
+inline void Header_PeptidesHeader::clear_has_max_length() {
+  _has_bits_[0] &= ~0x00000008u;
+}
+inline void Header_PeptidesHeader::clear_max_length() {
+  max_length_ = 0;
+  clear_has_max_length();
+}
+inline ::google::protobuf::int32 Header_PeptidesHeader::max_length() const {
+  return max_length_;
+}
+inline void Header_PeptidesHeader::set_max_length(::google::protobuf::int32 value) {
+  set_has_max_length();
+  max_length_ = value;
+}
+
+// optional string enzyme = 7;
+inline bool Header_PeptidesHeader::has_enzyme() const {
+  return (_has_bits_[0] & 0x00000010u) != 0;
+}
+inline void Header_PeptidesHeader::set_has_enzyme() {
+  _has_bits_[0] |= 0x00000010u;
+}
+inline void Header_PeptidesHeader::clear_has_enzyme() {
+  _has_bits_[0] &= ~0x00000010u;
+}
+inline void Header_PeptidesHeader::clear_enzyme() {
+  if (enzyme_ != &::google::protobuf::internal::kEmptyString) {
+    enzyme_->clear();
+  }
+  clear_has_enzyme();
+}
+inline const ::std::string& Header_PeptidesHeader::enzyme() const {
+  return *enzyme_;
+}
+inline void Header_PeptidesHeader::set_enzyme(const ::std::string& value) {
+  set_has_enzyme();
+  if (enzyme_ == &::google::protobuf::internal::kEmptyString) {
+    enzyme_ = new ::std::string;
+  }
+  enzyme_->assign(value);
+}
+inline void Header_PeptidesHeader::set_enzyme(const char* value) {
+  set_has_enzyme();
+  if (enzyme_ == &::google::protobuf::internal::kEmptyString) {
+    enzyme_ = new ::std::string;
+  }
+  enzyme_->assign(value);
+}
+inline void Header_PeptidesHeader::set_enzyme(const char* value, size_t size) {
+  set_has_enzyme();
+  if (enzyme_ == &::google::protobuf::internal::kEmptyString) {
+    enzyme_ = new ::std::string;
+  }
+  enzyme_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* Header_PeptidesHeader::mutable_enzyme() {
+  set_has_enzyme();
+  if (enzyme_ == &::google::protobuf::internal::kEmptyString) {
+    enzyme_ = new ::std::string;
+  }
+  return enzyme_;
+}
+inline ::std::string* Header_PeptidesHeader::release_enzyme() {
+  clear_has_enzyme();
+  if (enzyme_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = enzyme_;
+    enzyme_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+inline void Header_PeptidesHeader::set_allocated_enzyme(::std::string* enzyme) {
+  if (enzyme_ != &::google::protobuf::internal::kEmptyString) {
+    delete enzyme_;
+  }
+  if (enzyme) {
+    set_has_enzyme();
+    enzyme_ = enzyme;
+  } else {
+    clear_has_enzyme();
+    enzyme_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  }
+}
+
+// optional bool full_digestion = 8;
+inline bool Header_PeptidesHeader::has_full_digestion() const {
+  return (_has_bits_[0] & 0x00000020u) != 0;
+}
+inline void Header_PeptidesHeader::set_has_full_digestion() {
+  _has_bits_[0] |= 0x00000020u;
+}
+inline void Header_PeptidesHeader::clear_has_full_digestion() {
+  _has_bits_[0] &= ~0x00000020u;
+}
+inline void Header_PeptidesHeader::clear_full_digestion() {
+  full_digestion_ = false;
+  clear_has_full_digestion();
+}
+inline bool Header_PeptidesHeader::full_digestion() const {
+  return full_digestion_;
+}
+inline void Header_PeptidesHeader::set_full_digestion(bool value) {
+  set_has_full_digestion();
+  full_digestion_ = value;
+}
+
+// optional int32 max_missed_cleavages = 14;
+inline bool Header_PeptidesHeader::has_max_missed_cleavages() const {
+  return (_has_bits_[0] & 0x00000040u) != 0;
+}
+inline void Header_PeptidesHeader::set_has_max_missed_cleavages() {
+  _has_bits_[0] |= 0x00000040u;
+}
+inline void Header_PeptidesHeader::clear_has_max_missed_cleavages() {
+  _has_bits_[0] &= ~0x00000040u;
+}
+inline void Header_PeptidesHeader::clear_max_missed_cleavages() {
+  max_missed_cleavages_ = 0;
+  clear_has_max_missed_cleavages();
+}
+inline ::google::protobuf::int32 Header_PeptidesHeader::max_missed_cleavages() const {
+  return max_missed_cleavages_;
+}
+inline void Header_PeptidesHeader::set_max_missed_cleavages(::google::protobuf::int32 value) {
+  set_has_max_missed_cleavages();
+  max_missed_cleavages_ = value;
+}
+
+// optional bool monoisotopic_precursor = 13;
+inline bool Header_PeptidesHeader::has_monoisotopic_precursor() const {
+  return (_has_bits_[0] & 0x00000080u) != 0;
+}
+inline void Header_PeptidesHeader::set_has_monoisotopic_precursor() {
+  _has_bits_[0] |= 0x00000080u;
+}
+inline void Header_PeptidesHeader::clear_has_monoisotopic_precursor() {
+  _has_bits_[0] &= ~0x00000080u;
+}
+inline void Header_PeptidesHeader::clear_monoisotopic_precursor() {
+  monoisotopic_precursor_ = false;
+  clear_has_monoisotopic_precursor();
+}
+inline bool Header_PeptidesHeader::monoisotopic_precursor() const {
+  return monoisotopic_precursor_;
+}
+inline void Header_PeptidesHeader::set_monoisotopic_precursor(bool value) {
+  set_has_monoisotopic_precursor();
+  monoisotopic_precursor_ = value;
+}
+
+// optional bool has_peaks = 10;
+inline bool Header_PeptidesHeader::has_has_peaks() const {
+  return (_has_bits_[0] & 0x00000100u) != 0;
+}
+inline void Header_PeptidesHeader::set_has_has_peaks() {
+  _has_bits_[0] |= 0x00000100u;
+}
+inline void Header_PeptidesHeader::clear_has_has_peaks() {
+  _has_bits_[0] &= ~0x00000100u;
+}
+inline void Header_PeptidesHeader::clear_has_peaks() {
+  has_peaks_ = false;
+  clear_has_has_peaks();
+}
+inline bool Header_PeptidesHeader::has_peaks() const {
+  return has_peaks_;
+}
+inline void Header_PeptidesHeader::set_has_peaks(bool value) {
+  set_has_has_peaks();
+  has_peaks_ = value;
+}
+
+// optional double downselect_fraction = 11;
+inline bool Header_PeptidesHeader::has_downselect_fraction() const {
+  return (_has_bits_[0] & 0x00000200u) != 0;
+}
+inline void Header_PeptidesHeader::set_has_downselect_fraction() {
+  _has_bits_[0] |= 0x00000200u;
+}
+inline void Header_PeptidesHeader::clear_has_downselect_fraction() {
+  _has_bits_[0] &= ~0x00000200u;
+}
+inline void Header_PeptidesHeader::clear_downselect_fraction() {
+  downselect_fraction_ = 0;
+  clear_has_downselect_fraction();
+}
+inline double Header_PeptidesHeader::downselect_fraction() const {
+  return downselect_fraction_;
+}
+inline void Header_PeptidesHeader::set_downselect_fraction(double value) {
+  set_has_downselect_fraction();
+  downselect_fraction_ = value;
+}
+
+// optional .pb.ModTable mods = 12;
+inline bool Header_PeptidesHeader::has_mods() const {
+  return (_has_bits_[0] & 0x00000400u) != 0;
+}
+inline void Header_PeptidesHeader::set_has_mods() {
+  _has_bits_[0] |= 0x00000400u;
+}
+inline void Header_PeptidesHeader::clear_has_mods() {
+  _has_bits_[0] &= ~0x00000400u;
+}
+inline void Header_PeptidesHeader::clear_mods() {
+  if (mods_ != NULL) mods_->::pb::ModTable::Clear();
+  clear_has_mods();
+}
+inline const ::pb::ModTable& Header_PeptidesHeader::mods() const {
+  return mods_ != NULL ? *mods_ : *default_instance_->mods_;
+}
+inline ::pb::ModTable* Header_PeptidesHeader::mutable_mods() {
+  set_has_mods();
+  if (mods_ == NULL) mods_ = new ::pb::ModTable;
+  return mods_;
+}
+inline ::pb::ModTable* Header_PeptidesHeader::release_mods() {
+  clear_has_mods();
+  ::pb::ModTable* temp = mods_;
+  mods_ = NULL;
+  return temp;
+}
+inline void Header_PeptidesHeader::set_allocated_mods(::pb::ModTable* mods) {
+  delete mods_;
+  mods_ = mods;
+  if (mods) {
+    set_has_mods();
+  } else {
+    clear_has_mods();
+  }
+}
+
+// optional .pb.ModTable nterm_mods = 15;
+inline bool Header_PeptidesHeader::has_nterm_mods() const {
+  return (_has_bits_[0] & 0x00000800u) != 0;
+}
+inline void Header_PeptidesHeader::set_has_nterm_mods() {
+  _has_bits_[0] |= 0x00000800u;
+}
+inline void Header_PeptidesHeader::clear_has_nterm_mods() {
+  _has_bits_[0] &= ~0x00000800u;
+}
+inline void Header_PeptidesHeader::clear_nterm_mods() {
+  if (nterm_mods_ != NULL) nterm_mods_->::pb::ModTable::Clear();
+  clear_has_nterm_mods();
+}
+inline const ::pb::ModTable& Header_PeptidesHeader::nterm_mods() const {
+  return nterm_mods_ != NULL ? *nterm_mods_ : *default_instance_->nterm_mods_;
+}
+inline ::pb::ModTable* Header_PeptidesHeader::mutable_nterm_mods() {
+  set_has_nterm_mods();
+  if (nterm_mods_ == NULL) nterm_mods_ = new ::pb::ModTable;
+  return nterm_mods_;
+}
+inline ::pb::ModTable* Header_PeptidesHeader::release_nterm_mods() {
+  clear_has_nterm_mods();
+  ::pb::ModTable* temp = nterm_mods_;
+  nterm_mods_ = NULL;
+  return temp;
+}
+inline void Header_PeptidesHeader::set_allocated_nterm_mods(::pb::ModTable* nterm_mods) {
+  delete nterm_mods_;
+  nterm_mods_ = nterm_mods;
+  if (nterm_mods) {
+    set_has_nterm_mods();
+  } else {
+    clear_has_nterm_mods();
+  }
+}
+
+// optional .pb.ModTable cterm_mods = 16;
+inline bool Header_PeptidesHeader::has_cterm_mods() const {
+  return (_has_bits_[0] & 0x00001000u) != 0;
+}
+inline void Header_PeptidesHeader::set_has_cterm_mods() {
+  _has_bits_[0] |= 0x00001000u;
+}
+inline void Header_PeptidesHeader::clear_has_cterm_mods() {
+  _has_bits_[0] &= ~0x00001000u;
+}
+inline void Header_PeptidesHeader::clear_cterm_mods() {
+  if (cterm_mods_ != NULL) cterm_mods_->::pb::ModTable::Clear();
+  clear_has_cterm_mods();
+}
+inline const ::pb::ModTable& Header_PeptidesHeader::cterm_mods() const {
+  return cterm_mods_ != NULL ? *cterm_mods_ : *default_instance_->cterm_mods_;
+}
+inline ::pb::ModTable* Header_PeptidesHeader::mutable_cterm_mods() {
+  set_has_cterm_mods();
+  if (cterm_mods_ == NULL) cterm_mods_ = new ::pb::ModTable;
+  return cterm_mods_;
+}
+inline ::pb::ModTable* Header_PeptidesHeader::release_cterm_mods() {
+  clear_has_cterm_mods();
+  ::pb::ModTable* temp = cterm_mods_;
+  cterm_mods_ = NULL;
+  return temp;
+}
+inline void Header_PeptidesHeader::set_allocated_cterm_mods(::pb::ModTable* cterm_mods) {
+  delete cterm_mods_;
+  cterm_mods_ = cterm_mods;
+  if (cterm_mods) {
+    set_has_cterm_mods();
+  } else {
+    clear_has_cterm_mods();
+  }
+}
+
+// optional int32 decoys = 9;
+inline bool Header_PeptidesHeader::has_decoys() const {
+  return (_has_bits_[0] & 0x00002000u) != 0;
+}
+inline void Header_PeptidesHeader::set_has_decoys() {
+  _has_bits_[0] |= 0x00002000u;
+}
+inline void Header_PeptidesHeader::clear_has_decoys() {
+  _has_bits_[0] &= ~0x00002000u;
+}
+inline void Header_PeptidesHeader::clear_decoys() {
+  decoys_ = 0;
+  clear_has_decoys();
+}
+inline ::google::protobuf::int32 Header_PeptidesHeader::decoys() const {
+  return decoys_;
+}
+inline void Header_PeptidesHeader::set_decoys(::google::protobuf::int32 value) {
+  set_has_decoys();
+  decoys_ = value;
+}
+
+// -------------------------------------------------------------------
+
+// Header_SpectraHeader
+
+// optional bool sorted = 2;
+inline bool Header_SpectraHeader::has_sorted() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void Header_SpectraHeader::set_has_sorted() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void Header_SpectraHeader::clear_has_sorted() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void Header_SpectraHeader::clear_sorted() {
+  sorted_ = false;
+  clear_has_sorted();
+}
+inline bool Header_SpectraHeader::sorted() const {
+  return sorted_;
+}
+inline void Header_SpectraHeader::set_sorted(bool value) {
+  set_has_sorted();
+  sorted_ = value;
+}
+
+// -------------------------------------------------------------------
+
+// Header_ResultsHeader
+
+// optional double mass_window = 1;
+inline bool Header_ResultsHeader::has_mass_window() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void Header_ResultsHeader::set_has_mass_window() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void Header_ResultsHeader::clear_has_mass_window() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void Header_ResultsHeader::clear_mass_window() {
+  mass_window_ = 0;
+  clear_has_mass_window();
+}
+inline double Header_ResultsHeader::mass_window() const {
+  return mass_window_;
+}
+inline void Header_ResultsHeader::set_mass_window(double value) {
+  set_has_mass_window();
+  mass_window_ = value;
+}
+
+// optional int32 top_matches = 2;
+inline bool Header_ResultsHeader::has_top_matches() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void Header_ResultsHeader::set_has_top_matches() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void Header_ResultsHeader::clear_has_top_matches() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void Header_ResultsHeader::clear_top_matches() {
+  top_matches_ = 0;
+  clear_has_top_matches();
+}
+inline ::google::protobuf::int32 Header_ResultsHeader::top_matches() const {
+  return top_matches_;
+}
+inline void Header_ResultsHeader::set_top_matches(::google::protobuf::int32 value) {
+  set_has_top_matches();
+  top_matches_ = value;
+}
+
+// optional .pb.Header.PeptidesHeader peptides_header = 3;
+inline bool Header_ResultsHeader::has_peptides_header() const {
+  return (_has_bits_[0] & 0x00000004u) != 0;
+}
+inline void Header_ResultsHeader::set_has_peptides_header() {
+  _has_bits_[0] |= 0x00000004u;
+}
+inline void Header_ResultsHeader::clear_has_peptides_header() {
+  _has_bits_[0] &= ~0x00000004u;
+}
+inline void Header_ResultsHeader::clear_peptides_header() {
+  if (peptides_header_ != NULL) peptides_header_->::pb::Header_PeptidesHeader::Clear();
+  clear_has_peptides_header();
+}
+inline const ::pb::Header_PeptidesHeader& Header_ResultsHeader::peptides_header() const {
+  return peptides_header_ != NULL ? *peptides_header_ : *default_instance_->peptides_header_;
+}
+inline ::pb::Header_PeptidesHeader* Header_ResultsHeader::mutable_peptides_header() {
+  set_has_peptides_header();
+  if (peptides_header_ == NULL) peptides_header_ = new ::pb::Header_PeptidesHeader;
+  return peptides_header_;
+}
+inline ::pb::Header_PeptidesHeader* Header_ResultsHeader::release_peptides_header() {
+  clear_has_peptides_header();
+  ::pb::Header_PeptidesHeader* temp = peptides_header_;
+  peptides_header_ = NULL;
+  return temp;
+}
+inline void Header_ResultsHeader::set_allocated_peptides_header(::pb::Header_PeptidesHeader* peptides_header) {
+  delete peptides_header_;
+  peptides_header_ = peptides_header;
+  if (peptides_header) {
+    set_has_peptides_header();
+  } else {
+    clear_has_peptides_header();
+  }
+}
+
+// -------------------------------------------------------------------
+
+// Header_AuxLocationsHeader
+
+// -------------------------------------------------------------------
+
+// Header
+
+// repeated .pb.Header.Source source = 1;
+inline int Header::source_size() const {
+  return source_.size();
+}
+inline void Header::clear_source() {
+  source_.Clear();
+}
+inline const ::pb::Header_Source& Header::source(int index) const {
+  return source_.Get(index);
+}
+inline ::pb::Header_Source* Header::mutable_source(int index) {
+  return source_.Mutable(index);
+}
+inline ::pb::Header_Source* Header::add_source() {
+  return source_.Add();
+}
+inline const ::google::protobuf::RepeatedPtrField< ::pb::Header_Source >&
+Header::source() const {
+  return source_;
+}
+inline ::google::protobuf::RepeatedPtrField< ::pb::Header_Source >*
+Header::mutable_source() {
+  return &source_;
+}
+
+// required .pb.Header.FileType file_type = 2;
+inline bool Header::has_file_type() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void Header::set_has_file_type() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void Header::clear_has_file_type() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void Header::clear_file_type() {
+  file_type_ = 0;
+  clear_has_file_type();
+}
+inline ::pb::Header_FileType Header::file_type() const {
+  return static_cast< ::pb::Header_FileType >(file_type_);
+}
+inline void Header::set_file_type(::pb::Header_FileType value) {
+  assert(::pb::Header_FileType_IsValid(value));
+  set_has_file_type();
+  file_type_ = value;
+}
+
+// optional .pb.Header.RawProteinsHeader raw_proteins_header = 3;
+inline bool Header::has_raw_proteins_header() const {
+  return (_has_bits_[0] & 0x00000004u) != 0;
+}
+inline void Header::set_has_raw_proteins_header() {
+  _has_bits_[0] |= 0x00000004u;
+}
+inline void Header::clear_has_raw_proteins_header() {
+  _has_bits_[0] &= ~0x00000004u;
+}
+inline void Header::clear_raw_proteins_header() {
+  if (raw_proteins_header_ != NULL) raw_proteins_header_->::pb::Header_RawProteinsHeader::Clear();
+  clear_has_raw_proteins_header();
+}
+inline const ::pb::Header_RawProteinsHeader& Header::raw_proteins_header() const {
+  return raw_proteins_header_ != NULL ? *raw_proteins_header_ : *default_instance_->raw_proteins_header_;
+}
+inline ::pb::Header_RawProteinsHeader* Header::mutable_raw_proteins_header() {
+  set_has_raw_proteins_header();
+  if (raw_proteins_header_ == NULL) raw_proteins_header_ = new ::pb::Header_RawProteinsHeader;
+  return raw_proteins_header_;
+}
+inline ::pb::Header_RawProteinsHeader* Header::release_raw_proteins_header() {
+  clear_has_raw_proteins_header();
+  ::pb::Header_RawProteinsHeader* temp = raw_proteins_header_;
+  raw_proteins_header_ = NULL;
+  return temp;
+}
+inline void Header::set_allocated_raw_proteins_header(::pb::Header_RawProteinsHeader* raw_proteins_header) {
+  delete raw_proteins_header_;
+  raw_proteins_header_ = raw_proteins_header;
+  if (raw_proteins_header) {
+    set_has_raw_proteins_header();
+  } else {
+    clear_has_raw_proteins_header();
+  }
+}
+
+// optional .pb.Header.PeptidesHeader peptides_header = 4;
+inline bool Header::has_peptides_header() const {
+  return (_has_bits_[0] & 0x00000008u) != 0;
+}
+inline void Header::set_has_peptides_header() {
+  _has_bits_[0] |= 0x00000008u;
+}
+inline void Header::clear_has_peptides_header() {
+  _has_bits_[0] &= ~0x00000008u;
+}
+inline void Header::clear_peptides_header() {
+  if (peptides_header_ != NULL) peptides_header_->::pb::Header_PeptidesHeader::Clear();
+  clear_has_peptides_header();
+}
+inline const ::pb::Header_PeptidesHeader& Header::peptides_header() const {
+  return peptides_header_ != NULL ? *peptides_header_ : *default_instance_->peptides_header_;
+}
+inline ::pb::Header_PeptidesHeader* Header::mutable_peptides_header() {
+  set_has_peptides_header();
+  if (peptides_header_ == NULL) peptides_header_ = new ::pb::Header_PeptidesHeader;
+  return peptides_header_;
+}
+inline ::pb::Header_PeptidesHeader* Header::release_peptides_header() {
+  clear_has_peptides_header();
+  ::pb::Header_PeptidesHeader* temp = peptides_header_;
+  peptides_header_ = NULL;
+  return temp;
+}
+inline void Header::set_allocated_peptides_header(::pb::Header_PeptidesHeader* peptides_header) {
+  delete peptides_header_;
+  peptides_header_ = peptides_header;
+  if (peptides_header) {
+    set_has_peptides_header();
+  } else {
+    clear_has_peptides_header();
+  }
+}
+
+// optional .pb.Header.SpectraHeader spectra_header = 5;
+inline bool Header::has_spectra_header() const {
+  return (_has_bits_[0] & 0x00000010u) != 0;
+}
+inline void Header::set_has_spectra_header() {
+  _has_bits_[0] |= 0x00000010u;
+}
+inline void Header::clear_has_spectra_header() {
+  _has_bits_[0] &= ~0x00000010u;
+}
+inline void Header::clear_spectra_header() {
+  if (spectra_header_ != NULL) spectra_header_->::pb::Header_SpectraHeader::Clear();
+  clear_has_spectra_header();
+}
+inline const ::pb::Header_SpectraHeader& Header::spectra_header() const {
+  return spectra_header_ != NULL ? *spectra_header_ : *default_instance_->spectra_header_;
+}
+inline ::pb::Header_SpectraHeader* Header::mutable_spectra_header() {
+  set_has_spectra_header();
+  if (spectra_header_ == NULL) spectra_header_ = new ::pb::Header_SpectraHeader;
+  return spectra_header_;
+}
+inline ::pb::Header_SpectraHeader* Header::release_spectra_header() {
+  clear_has_spectra_header();
+  ::pb::Header_SpectraHeader* temp = spectra_header_;
+  spectra_header_ = NULL;
+  return temp;
+}
+inline void Header::set_allocated_spectra_header(::pb::Header_SpectraHeader* spectra_header) {
+  delete spectra_header_;
+  spectra_header_ = spectra_header;
+  if (spectra_header) {
+    set_has_spectra_header();
+  } else {
+    clear_has_spectra_header();
+  }
+}
+
+// optional .pb.Header.ResultsHeader results_header = 6;
+inline bool Header::has_results_header() const {
+  return (_has_bits_[0] & 0x00000020u) != 0;
+}
+inline void Header::set_has_results_header() {
+  _has_bits_[0] |= 0x00000020u;
+}
+inline void Header::clear_has_results_header() {
+  _has_bits_[0] &= ~0x00000020u;
+}
+inline void Header::clear_results_header() {
+  if (results_header_ != NULL) results_header_->::pb::Header_ResultsHeader::Clear();
+  clear_has_results_header();
+}
+inline const ::pb::Header_ResultsHeader& Header::results_header() const {
+  return results_header_ != NULL ? *results_header_ : *default_instance_->results_header_;
+}
+inline ::pb::Header_ResultsHeader* Header::mutable_results_header() {
+  set_has_results_header();
+  if (results_header_ == NULL) results_header_ = new ::pb::Header_ResultsHeader;
+  return results_header_;
+}
+inline ::pb::Header_ResultsHeader* Header::release_results_header() {
+  clear_has_results_header();
+  ::pb::Header_ResultsHeader* temp = results_header_;
+  results_header_ = NULL;
+  return temp;
+}
+inline void Header::set_allocated_results_header(::pb::Header_ResultsHeader* results_header) {
+  delete results_header_;
+  results_header_ = results_header;
+  if (results_header) {
+    set_has_results_header();
+  } else {
+    clear_has_results_header();
+  }
+}
+
+// optional .pb.Header.AuxLocationsHeader aux_locs_header = 7;
+inline bool Header::has_aux_locs_header() const {
+  return (_has_bits_[0] & 0x00000040u) != 0;
+}
+inline void Header::set_has_aux_locs_header() {
+  _has_bits_[0] |= 0x00000040u;
+}
+inline void Header::clear_has_aux_locs_header() {
+  _has_bits_[0] &= ~0x00000040u;
+}
+inline void Header::clear_aux_locs_header() {
+  if (aux_locs_header_ != NULL) aux_locs_header_->::pb::Header_AuxLocationsHeader::Clear();
+  clear_has_aux_locs_header();
+}
+inline const ::pb::Header_AuxLocationsHeader& Header::aux_locs_header() const {
+  return aux_locs_header_ != NULL ? *aux_locs_header_ : *default_instance_->aux_locs_header_;
+}
+inline ::pb::Header_AuxLocationsHeader* Header::mutable_aux_locs_header() {
+  set_has_aux_locs_header();
+  if (aux_locs_header_ == NULL) aux_locs_header_ = new ::pb::Header_AuxLocationsHeader;
+  return aux_locs_header_;
+}
+inline ::pb::Header_AuxLocationsHeader* Header::release_aux_locs_header() {
+  clear_has_aux_locs_header();
+  ::pb::Header_AuxLocationsHeader* temp = aux_locs_header_;
+  aux_locs_header_ = NULL;
+  return temp;
+}
+inline void Header::set_allocated_aux_locs_header(::pb::Header_AuxLocationsHeader* aux_locs_header) {
+  delete aux_locs_header_;
+  aux_locs_header_ = aux_locs_header;
+  if (aux_locs_header) {
+    set_has_aux_locs_header();
+  } else {
+    clear_has_aux_locs_header();
+  }
+}
+
+// optional string command_line = 8;
+inline bool Header::has_command_line() const {
+  return (_has_bits_[0] & 0x00000080u) != 0;
+}
+inline void Header::set_has_command_line() {
+  _has_bits_[0] |= 0x00000080u;
+}
+inline void Header::clear_has_command_line() {
+  _has_bits_[0] &= ~0x00000080u;
+}
+inline void Header::clear_command_line() {
+  if (command_line_ != &::google::protobuf::internal::kEmptyString) {
+    command_line_->clear();
+  }
+  clear_has_command_line();
+}
+inline const ::std::string& Header::command_line() const {
+  return *command_line_;
+}
+inline void Header::set_command_line(const ::std::string& value) {
+  set_has_command_line();
+  if (command_line_ == &::google::protobuf::internal::kEmptyString) {
+    command_line_ = new ::std::string;
+  }
+  command_line_->assign(value);
+}
+inline void Header::set_command_line(const char* value) {
+  set_has_command_line();
+  if (command_line_ == &::google::protobuf::internal::kEmptyString) {
+    command_line_ = new ::std::string;
+  }
+  command_line_->assign(value);
+}
+inline void Header::set_command_line(const char* value, size_t size) {
+  set_has_command_line();
+  if (command_line_ == &::google::protobuf::internal::kEmptyString) {
+    command_line_ = new ::std::string;
+  }
+  command_line_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* Header::mutable_command_line() {
+  set_has_command_line();
+  if (command_line_ == &::google::protobuf::internal::kEmptyString) {
+    command_line_ = new ::std::string;
+  }
+  return command_line_;
+}
+inline ::std::string* Header::release_command_line() {
+  clear_has_command_line();
+  if (command_line_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = command_line_;
+    command_line_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+inline void Header::set_allocated_command_line(::std::string* command_line) {
+  if (command_line_ != &::google::protobuf::internal::kEmptyString) {
+    delete command_line_;
+  }
+  if (command_line) {
+    set_has_command_line();
+    command_line_ = command_line;
+  } else {
+    clear_has_command_line();
+    command_line_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  }
+}
+
+
+// @@protoc_insertion_point(namespace_scope)
+
+}  // namespace pb
+
+#ifndef SWIG
+namespace google {
+namespace protobuf {
+
+template <>
+inline const EnumDescriptor* GetEnumDescriptor< ::pb::Header_FileType>() {
+  return ::pb::Header_FileType_descriptor();
+}
+
+}  // namespace google
+}  // namespace protobuf
+#endif  // SWIG
+
+// @@protoc_insertion_point(global_scope)
+
+#endif  // PROTOBUF_header_2eproto__INCLUDED
diff --git a/src/app/tide/protoobj/header_pb2.py b/src/app/tide/protoobj/header_pb2.py
new file mode 100644
index 0000000..ee5f274
--- /dev/null
+++ b/src/app/tide/protoobj/header_pb2.py
@@ -0,0 +1,570 @@
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: header.proto
+
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  name='header.proto',
+  package='pb',
+  serialized_pb='\n\x0cheader.proto\x12\x02pb\"E\n\x0cModification\x12\x13\n\x0b\x61mino_acids\x18\x01 \x01(\t\x12\r\n\x05\x64\x65lta\x18\x02 \x01(\x01\x12\x11\n\tmax_count\x18\x03 \x01(\x05\"o\n\x08ModTable\x12&\n\x0cvariable_mod\x18\x01 \x03(\x0b\x32\x10.pb.Modification\x12$\n\nstatic_mod\x18\x02 \x03(\x0b\x32\x10.pb.Modification\x12\x15\n\runique_deltas\x18\n \x03(\x01\"\xd2\x08\n\x06Header\x12!\n\x06source\x18\x01 \x03(\x0b\x32\x11.pb.Header.Source\x12&\n\tfile_type\x18\x02 \x02(\x0e [...]
+
+
+
+_HEADER_FILETYPE = _descriptor.EnumDescriptor(
+  name='FileType',
+  full_name='pb.Header.FileType',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='RAW_PROTEINS', index=0, number=0,
+      options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='PEPTIDES', index=1, number=1,
+      options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SPECTRA', index=2, number=2,
+      options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='PARAMS', index=3, number=3,
+      options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='MOD_TABLE', index=4, number=4,
+      options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='RESULTS', index=5, number=5,
+      options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='AUX_LOCATIONS', index=6, number=6,
+      options=None,
+      type=None),
+  ],
+  containing_type=None,
+  options=None,
+  serialized_start=1197,
+  serialized_end=1311,
+)
+
+
+_MODIFICATION = _descriptor.Descriptor(
+  name='Modification',
+  full_name='pb.Modification',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='amino_acids', full_name='pb.Modification.amino_acids', index=0,
+      number=1, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='delta', full_name='pb.Modification.delta', index=1,
+      number=2, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='max_count', full_name='pb.Modification.max_count', index=2,
+      number=3, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=20,
+  serialized_end=89,
+)
+
+
+_MODTABLE = _descriptor.Descriptor(
+  name='ModTable',
+  full_name='pb.ModTable',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='variable_mod', full_name='pb.ModTable.variable_mod', index=0,
+      number=1, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='static_mod', full_name='pb.ModTable.static_mod', index=1,
+      number=2, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='unique_deltas', full_name='pb.ModTable.unique_deltas', index=2,
+      number=10, type=1, cpp_type=5, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=91,
+  serialized_end=202,
+)
+
+
+_HEADER_SOURCE = _descriptor.Descriptor(
+  name='Source',
+  full_name='pb.Header.Source',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='filename', full_name='pb.Header.Source.filename', index=0,
+      number=1, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='header', full_name='pb.Header.Source.header', index=1,
+      number=2, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='filetype', full_name='pb.Header.Source.filetype', index=2,
+      number=3, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=579,
+  serialized_end=651,
+)
+
+_HEADER_RAWPROTEINSHEADER = _descriptor.Descriptor(
+  name='RawProteinsHeader',
+  full_name='pb.Header.RawProteinsHeader',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=653,
+  serialized_end=672,
+)
+
+_HEADER_PEPTIDESHEADER = _descriptor.Descriptor(
+  name='PeptidesHeader',
+  full_name='pb.Header.PeptidesHeader',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='min_mass', full_name='pb.Header.PeptidesHeader.min_mass', index=0,
+      number=3, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='max_mass', full_name='pb.Header.PeptidesHeader.max_mass', index=1,
+      number=4, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='min_length', full_name='pb.Header.PeptidesHeader.min_length', index=2,
+      number=5, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='max_length', full_name='pb.Header.PeptidesHeader.max_length', index=3,
+      number=6, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='enzyme', full_name='pb.Header.PeptidesHeader.enzyme', index=4,
+      number=7, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='full_digestion', full_name='pb.Header.PeptidesHeader.full_digestion', index=5,
+      number=8, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='max_missed_cleavages', full_name='pb.Header.PeptidesHeader.max_missed_cleavages', index=6,
+      number=14, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='monoisotopic_precursor', full_name='pb.Header.PeptidesHeader.monoisotopic_precursor', index=7,
+      number=13, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='has_peaks', full_name='pb.Header.PeptidesHeader.has_peaks', index=8,
+      number=10, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='downselect_fraction', full_name='pb.Header.PeptidesHeader.downselect_fraction', index=9,
+      number=11, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='mods', full_name='pb.Header.PeptidesHeader.mods', index=10,
+      number=12, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='nterm_mods', full_name='pb.Header.PeptidesHeader.nterm_mods', index=11,
+      number=15, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='cterm_mods', full_name='pb.Header.PeptidesHeader.cterm_mods', index=12,
+      number=16, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='decoys', full_name='pb.Header.PeptidesHeader.decoys', index=13,
+      number=9, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=675,
+  serialized_end=1029,
+)
+
+_HEADER_SPECTRAHEADER = _descriptor.Descriptor(
+  name='SpectraHeader',
+  full_name='pb.Header.SpectraHeader',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='sorted', full_name='pb.Header.SpectraHeader.sorted', index=0,
+      number=2, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=1031,
+  serialized_end=1062,
+)
+
+_HEADER_RESULTSHEADER = _descriptor.Descriptor(
+  name='ResultsHeader',
+  full_name='pb.Header.ResultsHeader',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='mass_window', full_name='pb.Header.ResultsHeader.mass_window', index=0,
+      number=1, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='top_matches', full_name='pb.Header.ResultsHeader.top_matches', index=1,
+      number=2, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='peptides_header', full_name='pb.Header.ResultsHeader.peptides_header', index=2,
+      number=3, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=1064,
+  serialized_end=1173,
+)
+
+_HEADER_AUXLOCATIONSHEADER = _descriptor.Descriptor(
+  name='AuxLocationsHeader',
+  full_name='pb.Header.AuxLocationsHeader',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=1175,
+  serialized_end=1195,
+)
+
+_HEADER = _descriptor.Descriptor(
+  name='Header',
+  full_name='pb.Header',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='source', full_name='pb.Header.source', index=0,
+      number=1, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='file_type', full_name='pb.Header.file_type', index=1,
+      number=2, type=14, cpp_type=8, label=2,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='raw_proteins_header', full_name='pb.Header.raw_proteins_header', index=2,
+      number=3, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='peptides_header', full_name='pb.Header.peptides_header', index=3,
+      number=4, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='spectra_header', full_name='pb.Header.spectra_header', index=4,
+      number=5, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='results_header', full_name='pb.Header.results_header', index=5,
+      number=6, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='aux_locs_header', full_name='pb.Header.aux_locs_header', index=6,
+      number=7, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='command_line', full_name='pb.Header.command_line', index=7,
+      number=8, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[_HEADER_SOURCE, _HEADER_RAWPROTEINSHEADER, _HEADER_PEPTIDESHEADER, _HEADER_SPECTRAHEADER, _HEADER_RESULTSHEADER, _HEADER_AUXLOCATIONSHEADER, ],
+  enum_types=[
+    _HEADER_FILETYPE,
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=205,
+  serialized_end=1311,
+)
+
+_MODTABLE.fields_by_name['variable_mod'].message_type = _MODIFICATION
+_MODTABLE.fields_by_name['static_mod'].message_type = _MODIFICATION
+_HEADER_SOURCE.fields_by_name['header'].message_type = _HEADER
+_HEADER_SOURCE.containing_type = _HEADER;
+_HEADER_RAWPROTEINSHEADER.containing_type = _HEADER;
+_HEADER_PEPTIDESHEADER.fields_by_name['mods'].message_type = _MODTABLE
+_HEADER_PEPTIDESHEADER.fields_by_name['nterm_mods'].message_type = _MODTABLE
+_HEADER_PEPTIDESHEADER.fields_by_name['cterm_mods'].message_type = _MODTABLE
+_HEADER_PEPTIDESHEADER.containing_type = _HEADER;
+_HEADER_SPECTRAHEADER.containing_type = _HEADER;
+_HEADER_RESULTSHEADER.fields_by_name['peptides_header'].message_type = _HEADER_PEPTIDESHEADER
+_HEADER_RESULTSHEADER.containing_type = _HEADER;
+_HEADER_AUXLOCATIONSHEADER.containing_type = _HEADER;
+_HEADER.fields_by_name['source'].message_type = _HEADER_SOURCE
+_HEADER.fields_by_name['file_type'].enum_type = _HEADER_FILETYPE
+_HEADER.fields_by_name['raw_proteins_header'].message_type = _HEADER_RAWPROTEINSHEADER
+_HEADER.fields_by_name['peptides_header'].message_type = _HEADER_PEPTIDESHEADER
+_HEADER.fields_by_name['spectra_header'].message_type = _HEADER_SPECTRAHEADER
+_HEADER.fields_by_name['results_header'].message_type = _HEADER_RESULTSHEADER
+_HEADER.fields_by_name['aux_locs_header'].message_type = _HEADER_AUXLOCATIONSHEADER
+_HEADER_FILETYPE.containing_type = _HEADER;
+DESCRIPTOR.message_types_by_name['Modification'] = _MODIFICATION
+DESCRIPTOR.message_types_by_name['ModTable'] = _MODTABLE
+DESCRIPTOR.message_types_by_name['Header'] = _HEADER
+
+class Modification(_message.Message):
+  __metaclass__ = _reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _MODIFICATION
+
+  # @@protoc_insertion_point(class_scope:pb.Modification)
+
+class ModTable(_message.Message):
+  __metaclass__ = _reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _MODTABLE
+
+  # @@protoc_insertion_point(class_scope:pb.ModTable)
+
+class Header(_message.Message):
+  __metaclass__ = _reflection.GeneratedProtocolMessageType
+
+  class Source(_message.Message):
+    __metaclass__ = _reflection.GeneratedProtocolMessageType
+    DESCRIPTOR = _HEADER_SOURCE
+
+    # @@protoc_insertion_point(class_scope:pb.Header.Source)
+
+  class RawProteinsHeader(_message.Message):
+    __metaclass__ = _reflection.GeneratedProtocolMessageType
+    DESCRIPTOR = _HEADER_RAWPROTEINSHEADER
+
+    # @@protoc_insertion_point(class_scope:pb.Header.RawProteinsHeader)
+
+  class PeptidesHeader(_message.Message):
+    __metaclass__ = _reflection.GeneratedProtocolMessageType
+    DESCRIPTOR = _HEADER_PEPTIDESHEADER
+
+    # @@protoc_insertion_point(class_scope:pb.Header.PeptidesHeader)
+
+  class SpectraHeader(_message.Message):
+    __metaclass__ = _reflection.GeneratedProtocolMessageType
+    DESCRIPTOR = _HEADER_SPECTRAHEADER
+
+    # @@protoc_insertion_point(class_scope:pb.Header.SpectraHeader)
+
+  class ResultsHeader(_message.Message):
+    __metaclass__ = _reflection.GeneratedProtocolMessageType
+    DESCRIPTOR = _HEADER_RESULTSHEADER
+
+    # @@protoc_insertion_point(class_scope:pb.Header.ResultsHeader)
+
+  class AuxLocationsHeader(_message.Message):
+    __metaclass__ = _reflection.GeneratedProtocolMessageType
+    DESCRIPTOR = _HEADER_AUXLOCATIONSHEADER
+
+    # @@protoc_insertion_point(class_scope:pb.Header.AuxLocationsHeader)
+  DESCRIPTOR = _HEADER
+
+  # @@protoc_insertion_point(class_scope:pb.Header)
+
+
+# @@protoc_insertion_point(module_scope)
diff --git a/src/app/tide/protoobj/peptides.pb.cc b/src/app/tide/protoobj/peptides.pb.cc
new file mode 100644
index 0000000..f42851a
--- /dev/null
+++ b/src/app/tide/protoobj/peptides.pb.cc
@@ -0,0 +1,1389 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: peptides.proto
+
+#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
+#include "peptides.pb.h"
+
+#include <algorithm>
+
+#include <google/protobuf/stubs/common.h>
+#include <google/protobuf/stubs/once.h>
+#include <google/protobuf/io/coded_stream.h>
+#include <google/protobuf/wire_format_lite_inl.h>
+#include <google/protobuf/descriptor.h>
+#include <google/protobuf/generated_message_reflection.h>
+#include <google/protobuf/reflection_ops.h>
+#include <google/protobuf/wire_format.h>
+// @@protoc_insertion_point(includes)
+
+namespace pb {
+
+namespace {
+
+const ::google::protobuf::Descriptor* Location_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  Location_reflection_ = NULL;
+const ::google::protobuf::Descriptor* Peptide_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  Peptide_reflection_ = NULL;
+const ::google::protobuf::EnumDescriptor* Peptide_Series_descriptor_ = NULL;
+const ::google::protobuf::Descriptor* AuxLocation_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  AuxLocation_reflection_ = NULL;
+
+}  // namespace
+
+
+void protobuf_AssignDesc_peptides_2eproto() {
+  protobuf_AddDesc_peptides_2eproto();
+  const ::google::protobuf::FileDescriptor* file =
+    ::google::protobuf::DescriptorPool::generated_pool()->FindFileByName(
+      "peptides.proto");
+  GOOGLE_CHECK(file != NULL);
+  Location_descriptor_ = file->message_type(0);
+  static const int Location_offsets_[2] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Location, protein_id_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Location, pos_),
+  };
+  Location_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      Location_descriptor_,
+      Location::default_instance_,
+      Location_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Location, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Location, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(Location));
+  Peptide_descriptor_ = file->message_type(1);
+  static const int Peptide_offsets_[11] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Peptide, id_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Peptide, mass_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Peptide, length_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Peptide, first_location_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Peptide, peak1_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Peptide, peak2_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Peptide, neg_peak1_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Peptide, neg_peak2_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Peptide, modifications_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Peptide, aux_locations_index_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Peptide, is_decoy_),
+  };
+  Peptide_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      Peptide_descriptor_,
+      Peptide::default_instance_,
+      Peptide_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Peptide, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Peptide, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(Peptide));
+  Peptide_Series_descriptor_ = Peptide_descriptor_->enum_type(0);
+  AuxLocation_descriptor_ = file->message_type(2);
+  static const int AuxLocation_offsets_[1] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(AuxLocation, location_),
+  };
+  AuxLocation_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      AuxLocation_descriptor_,
+      AuxLocation::default_instance_,
+      AuxLocation_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(AuxLocation, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(AuxLocation, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(AuxLocation));
+}
+
+namespace {
+
+GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AssignDescriptors_once_);
+inline void protobuf_AssignDescriptorsOnce() {
+  ::google::protobuf::GoogleOnceInit(&protobuf_AssignDescriptors_once_,
+                 &protobuf_AssignDesc_peptides_2eproto);
+}
+
+void protobuf_RegisterTypes(const ::std::string&) {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    Location_descriptor_, &Location::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    Peptide_descriptor_, &Peptide::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    AuxLocation_descriptor_, &AuxLocation::default_instance());
+}
+
+}  // namespace
+
+void protobuf_ShutdownFile_peptides_2eproto() {
+  delete Location::default_instance_;
+  delete Location_reflection_;
+  delete Peptide::default_instance_;
+  delete Peptide_reflection_;
+  delete AuxLocation::default_instance_;
+  delete AuxLocation_reflection_;
+}
+
+void protobuf_AddDesc_peptides_2eproto() {
+  static bool already_here = false;
+  if (already_here) return;
+  already_here = true;
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  ::pb::protobuf_AddDesc_raw_5fproteins_2eproto();
+  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
+    "\n\016peptides.proto\022\002pb\032\022raw_proteins.proto"
+    "\"+\n\010Location\022\022\n\nprotein_id\030\001 \001(\005\022\013\n\003pos\030"
+    "\002 \001(\005\"\217\002\n\007Peptide\022\n\n\002id\030\001 \001(\005\022\014\n\004mass\030\002 "
+    "\001(\001\022\016\n\006length\030\003 \001(\005\022$\n\016first_location\030\004 "
+    "\001(\0132\014.pb.Location\022\021\n\005peak1\030\005 \003(\005B\002\020\001\022\021\n\005"
+    "peak2\030\006 \003(\005B\002\020\001\022\025\n\tneg_peak1\030\007 \003(\005B\002\020\001\022\025"
+    "\n\tneg_peak2\030\010 \003(\005B\002\020\001\022\031\n\rmodifications\030\t"
+    " \003(\005B\002\020\001\022\033\n\023aux_locations_index\030\n \001(\005\022\020\n"
+    "\010is_decoy\030\013 \001(\010\"\026\n\006Series\022\005\n\001Y\020\000\022\005\n\001B\020\001\""
+    "-\n\013AuxLocation\022\036\n\010location\030\001 \003(\0132\014.pb.Lo"
+    "cationB\002H\001", 410);
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
+    "peptides.proto", &protobuf_RegisterTypes);
+  Location::default_instance_ = new Location();
+  Peptide::default_instance_ = new Peptide();
+  AuxLocation::default_instance_ = new AuxLocation();
+  Location::default_instance_->InitAsDefaultInstance();
+  Peptide::default_instance_->InitAsDefaultInstance();
+  AuxLocation::default_instance_->InitAsDefaultInstance();
+  ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_peptides_2eproto);
+}
+
+// Force AddDescriptors() to be called at static initialization time.
+struct StaticDescriptorInitializer_peptides_2eproto {
+  StaticDescriptorInitializer_peptides_2eproto() {
+    protobuf_AddDesc_peptides_2eproto();
+  }
+} static_descriptor_initializer_peptides_2eproto_;
+
+// ===================================================================
+
+#ifndef _MSC_VER
+const int Location::kProteinIdFieldNumber;
+const int Location::kPosFieldNumber;
+#endif  // !_MSC_VER
+
+Location::Location()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void Location::InitAsDefaultInstance() {
+}
+
+Location::Location(const Location& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void Location::SharedCtor() {
+  _cached_size_ = 0;
+  protein_id_ = 0;
+  pos_ = 0;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+Location::~Location() {
+  SharedDtor();
+}
+
+void Location::SharedDtor() {
+  if (this != default_instance_) {
+  }
+}
+
+void Location::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* Location::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return Location_descriptor_;
+}
+
+const Location& Location::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_peptides_2eproto();
+  return *default_instance_;
+}
+
+Location* Location::default_instance_ = NULL;
+
+Location* Location::New() const {
+  return new Location;
+}
+
+void Location::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    protein_id_ = 0;
+    pos_ = 0;
+  }
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool Location::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // optional int32 protein_id = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &protein_id_)));
+          set_has_protein_id();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(16)) goto parse_pos;
+        break;
+      }
+
+      // optional int32 pos = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_pos:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &pos_)));
+          set_has_pos();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void Location::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // optional int32 protein_id = 1;
+  if (has_protein_id()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->protein_id(), output);
+  }
+
+  // optional int32 pos = 2;
+  if (has_pos()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->pos(), output);
+  }
+
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* Location::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // optional int32 protein_id = 1;
+  if (has_protein_id()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->protein_id(), target);
+  }
+
+  // optional int32 pos = 2;
+  if (has_pos()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(2, this->pos(), target);
+  }
+
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int Location::ByteSize() const {
+  int total_size = 0;
+
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // optional int32 protein_id = 1;
+    if (has_protein_id()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->protein_id());
+    }
+
+    // optional int32 pos = 2;
+    if (has_pos()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->pos());
+    }
+
+  }
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void Location::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const Location* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const Location*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void Location::MergeFrom(const Location& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_protein_id()) {
+      set_protein_id(from.protein_id());
+    }
+    if (from.has_pos()) {
+      set_pos(from.pos());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void Location::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void Location::CopyFrom(const Location& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool Location::IsInitialized() const {
+
+  return true;
+}
+
+void Location::Swap(Location* other) {
+  if (other != this) {
+    std::swap(protein_id_, other->protein_id_);
+    std::swap(pos_, other->pos_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata Location::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = Location_descriptor_;
+  metadata.reflection = Location_reflection_;
+  return metadata;
+}
+
+
+// ===================================================================
+
+const ::google::protobuf::EnumDescriptor* Peptide_Series_descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return Peptide_Series_descriptor_;
+}
+bool Peptide_Series_IsValid(int value) {
+  switch(value) {
+    case 0:
+    case 1:
+      return true;
+    default:
+      return false;
+  }
+}
+
+#ifndef _MSC_VER
+const Peptide_Series Peptide::Y;
+const Peptide_Series Peptide::B;
+const Peptide_Series Peptide::Series_MIN;
+const Peptide_Series Peptide::Series_MAX;
+const int Peptide::Series_ARRAYSIZE;
+#endif  // _MSC_VER
+#ifndef _MSC_VER
+const int Peptide::kIdFieldNumber;
+const int Peptide::kMassFieldNumber;
+const int Peptide::kLengthFieldNumber;
+const int Peptide::kFirstLocationFieldNumber;
+const int Peptide::kPeak1FieldNumber;
+const int Peptide::kPeak2FieldNumber;
+const int Peptide::kNegPeak1FieldNumber;
+const int Peptide::kNegPeak2FieldNumber;
+const int Peptide::kModificationsFieldNumber;
+const int Peptide::kAuxLocationsIndexFieldNumber;
+const int Peptide::kIsDecoyFieldNumber;
+#endif  // !_MSC_VER
+
+Peptide::Peptide()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void Peptide::InitAsDefaultInstance() {
+  first_location_ = const_cast< ::pb::Location*>(&::pb::Location::default_instance());
+}
+
+Peptide::Peptide(const Peptide& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void Peptide::SharedCtor() {
+  _cached_size_ = 0;
+  id_ = 0;
+  mass_ = 0;
+  length_ = 0;
+  first_location_ = NULL;
+  aux_locations_index_ = 0;
+  is_decoy_ = false;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+Peptide::~Peptide() {
+  SharedDtor();
+}
+
+void Peptide::SharedDtor() {
+  if (this != default_instance_) {
+    delete first_location_;
+  }
+}
+
+void Peptide::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* Peptide::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return Peptide_descriptor_;
+}
+
+const Peptide& Peptide::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_peptides_2eproto();
+  return *default_instance_;
+}
+
+Peptide* Peptide::default_instance_ = NULL;
+
+Peptide* Peptide::New() const {
+  return new Peptide;
+}
+
+void Peptide::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    id_ = 0;
+    mass_ = 0;
+    length_ = 0;
+    if (has_first_location()) {
+      if (first_location_ != NULL) first_location_->::pb::Location::Clear();
+    }
+  }
+  if (_has_bits_[9 / 32] & (0xffu << (9 % 32))) {
+    aux_locations_index_ = 0;
+    is_decoy_ = false;
+  }
+  peak1_.Clear();
+  peak2_.Clear();
+  neg_peak1_.Clear();
+  neg_peak2_.Clear();
+  modifications_.Clear();
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool Peptide::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // optional int32 id = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &id_)));
+          set_has_id();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(17)) goto parse_mass;
+        break;
+      }
+
+      // optional double mass = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_FIXED64) {
+         parse_mass:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
+                 input, &mass_)));
+          set_has_mass();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(24)) goto parse_length;
+        break;
+      }
+
+      // optional int32 length = 3;
+      case 3: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_length:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &length_)));
+          set_has_length();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(34)) goto parse_first_location;
+        break;
+      }
+
+      // optional .pb.Location first_location = 4;
+      case 4: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_first_location:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+               input, mutable_first_location()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(42)) goto parse_peak1;
+        break;
+      }
+
+      // repeated int32 peak1 = 5 [packed = true];
+      case 5: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_peak1:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, this->mutable_peak1())));
+        } else if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag)
+                   == ::google::protobuf::internal::WireFormatLite::
+                      WIRETYPE_VARINT) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 1, 42, input, this->mutable_peak1())));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(50)) goto parse_peak2;
+        break;
+      }
+
+      // repeated int32 peak2 = 6 [packed = true];
+      case 6: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_peak2:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, this->mutable_peak2())));
+        } else if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag)
+                   == ::google::protobuf::internal::WireFormatLite::
+                      WIRETYPE_VARINT) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 1, 50, input, this->mutable_peak2())));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(58)) goto parse_neg_peak1;
+        break;
+      }
+
+      // repeated int32 neg_peak1 = 7 [packed = true];
+      case 7: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_neg_peak1:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, this->mutable_neg_peak1())));
+        } else if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag)
+                   == ::google::protobuf::internal::WireFormatLite::
+                      WIRETYPE_VARINT) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 1, 58, input, this->mutable_neg_peak1())));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(66)) goto parse_neg_peak2;
+        break;
+      }
+
+      // repeated int32 neg_peak2 = 8 [packed = true];
+      case 8: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_neg_peak2:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, this->mutable_neg_peak2())));
+        } else if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag)
+                   == ::google::protobuf::internal::WireFormatLite::
+                      WIRETYPE_VARINT) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 1, 66, input, this->mutable_neg_peak2())));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(74)) goto parse_modifications;
+        break;
+      }
+
+      // repeated int32 modifications = 9 [packed = true];
+      case 9: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_modifications:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, this->mutable_modifications())));
+        } else if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag)
+                   == ::google::protobuf::internal::WireFormatLite::
+                      WIRETYPE_VARINT) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 1, 74, input, this->mutable_modifications())));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(80)) goto parse_aux_locations_index;
+        break;
+      }
+
+      // optional int32 aux_locations_index = 10;
+      case 10: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_aux_locations_index:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &aux_locations_index_)));
+          set_has_aux_locations_index();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(88)) goto parse_is_decoy;
+        break;
+      }
+
+      // optional bool is_decoy = 11;
+      case 11: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_is_decoy:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
+                 input, &is_decoy_)));
+          set_has_is_decoy();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void Peptide::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // optional int32 id = 1;
+  if (has_id()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->id(), output);
+  }
+
+  // optional double mass = 2;
+  if (has_mass()) {
+    ::google::protobuf::internal::WireFormatLite::WriteDouble(2, this->mass(), output);
+  }
+
+  // optional int32 length = 3;
+  if (has_length()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(3, this->length(), output);
+  }
+
+  // optional .pb.Location first_location = 4;
+  if (has_first_location()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      4, this->first_location(), output);
+  }
+
+  // repeated int32 peak1 = 5 [packed = true];
+  if (this->peak1_size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::WriteTag(5, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
+    output->WriteVarint32(_peak1_cached_byte_size_);
+  }
+  for (int i = 0; i < this->peak1_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32NoTag(
+      this->peak1(i), output);
+  }
+
+  // repeated int32 peak2 = 6 [packed = true];
+  if (this->peak2_size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::WriteTag(6, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
+    output->WriteVarint32(_peak2_cached_byte_size_);
+  }
+  for (int i = 0; i < this->peak2_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32NoTag(
+      this->peak2(i), output);
+  }
+
+  // repeated int32 neg_peak1 = 7 [packed = true];
+  if (this->neg_peak1_size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::WriteTag(7, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
+    output->WriteVarint32(_neg_peak1_cached_byte_size_);
+  }
+  for (int i = 0; i < this->neg_peak1_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32NoTag(
+      this->neg_peak1(i), output);
+  }
+
+  // repeated int32 neg_peak2 = 8 [packed = true];
+  if (this->neg_peak2_size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::WriteTag(8, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
+    output->WriteVarint32(_neg_peak2_cached_byte_size_);
+  }
+  for (int i = 0; i < this->neg_peak2_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32NoTag(
+      this->neg_peak2(i), output);
+  }
+
+  // repeated int32 modifications = 9 [packed = true];
+  if (this->modifications_size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::WriteTag(9, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
+    output->WriteVarint32(_modifications_cached_byte_size_);
+  }
+  for (int i = 0; i < this->modifications_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32NoTag(
+      this->modifications(i), output);
+  }
+
+  // optional int32 aux_locations_index = 10;
+  if (has_aux_locations_index()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(10, this->aux_locations_index(), output);
+  }
+
+  // optional bool is_decoy = 11;
+  if (has_is_decoy()) {
+    ::google::protobuf::internal::WireFormatLite::WriteBool(11, this->is_decoy(), output);
+  }
+
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* Peptide::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // optional int32 id = 1;
+  if (has_id()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->id(), target);
+  }
+
+  // optional double mass = 2;
+  if (has_mass()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(2, this->mass(), target);
+  }
+
+  // optional int32 length = 3;
+  if (has_length()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(3, this->length(), target);
+  }
+
+  // optional .pb.Location first_location = 4;
+  if (has_first_location()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        4, this->first_location(), target);
+  }
+
+  // repeated int32 peak1 = 5 [packed = true];
+  if (this->peak1_size() > 0) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
+      5,
+      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
+      target);
+    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
+      _peak1_cached_byte_size_, target);
+  }
+  for (int i = 0; i < this->peak1_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteInt32NoTagToArray(this->peak1(i), target);
+  }
+
+  // repeated int32 peak2 = 6 [packed = true];
+  if (this->peak2_size() > 0) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
+      6,
+      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
+      target);
+    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
+      _peak2_cached_byte_size_, target);
+  }
+  for (int i = 0; i < this->peak2_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteInt32NoTagToArray(this->peak2(i), target);
+  }
+
+  // repeated int32 neg_peak1 = 7 [packed = true];
+  if (this->neg_peak1_size() > 0) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
+      7,
+      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
+      target);
+    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
+      _neg_peak1_cached_byte_size_, target);
+  }
+  for (int i = 0; i < this->neg_peak1_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteInt32NoTagToArray(this->neg_peak1(i), target);
+  }
+
+  // repeated int32 neg_peak2 = 8 [packed = true];
+  if (this->neg_peak2_size() > 0) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
+      8,
+      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
+      target);
+    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
+      _neg_peak2_cached_byte_size_, target);
+  }
+  for (int i = 0; i < this->neg_peak2_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteInt32NoTagToArray(this->neg_peak2(i), target);
+  }
+
+  // repeated int32 modifications = 9 [packed = true];
+  if (this->modifications_size() > 0) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
+      9,
+      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
+      target);
+    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
+      _modifications_cached_byte_size_, target);
+  }
+  for (int i = 0; i < this->modifications_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteInt32NoTagToArray(this->modifications(i), target);
+  }
+
+  // optional int32 aux_locations_index = 10;
+  if (has_aux_locations_index()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(10, this->aux_locations_index(), target);
+  }
+
+  // optional bool is_decoy = 11;
+  if (has_is_decoy()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(11, this->is_decoy(), target);
+  }
+
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int Peptide::ByteSize() const {
+  int total_size = 0;
+
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // optional int32 id = 1;
+    if (has_id()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->id());
+    }
+
+    // optional double mass = 2;
+    if (has_mass()) {
+      total_size += 1 + 8;
+    }
+
+    // optional int32 length = 3;
+    if (has_length()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->length());
+    }
+
+    // optional .pb.Location first_location = 4;
+    if (has_first_location()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+          this->first_location());
+    }
+
+  }
+  if (_has_bits_[9 / 32] & (0xffu << (9 % 32))) {
+    // optional int32 aux_locations_index = 10;
+    if (has_aux_locations_index()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->aux_locations_index());
+    }
+
+    // optional bool is_decoy = 11;
+    if (has_is_decoy()) {
+      total_size += 1 + 1;
+    }
+
+  }
+  // repeated int32 peak1 = 5 [packed = true];
+  {
+    int data_size = 0;
+    for (int i = 0; i < this->peak1_size(); i++) {
+      data_size += ::google::protobuf::internal::WireFormatLite::
+        Int32Size(this->peak1(i));
+    }
+    if (data_size > 0) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(data_size);
+    }
+    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+    _peak1_cached_byte_size_ = data_size;
+    GOOGLE_SAFE_CONCURRENT_WRITES_END();
+    total_size += data_size;
+  }
+
+  // repeated int32 peak2 = 6 [packed = true];
+  {
+    int data_size = 0;
+    for (int i = 0; i < this->peak2_size(); i++) {
+      data_size += ::google::protobuf::internal::WireFormatLite::
+        Int32Size(this->peak2(i));
+    }
+    if (data_size > 0) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(data_size);
+    }
+    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+    _peak2_cached_byte_size_ = data_size;
+    GOOGLE_SAFE_CONCURRENT_WRITES_END();
+    total_size += data_size;
+  }
+
+  // repeated int32 neg_peak1 = 7 [packed = true];
+  {
+    int data_size = 0;
+    for (int i = 0; i < this->neg_peak1_size(); i++) {
+      data_size += ::google::protobuf::internal::WireFormatLite::
+        Int32Size(this->neg_peak1(i));
+    }
+    if (data_size > 0) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(data_size);
+    }
+    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+    _neg_peak1_cached_byte_size_ = data_size;
+    GOOGLE_SAFE_CONCURRENT_WRITES_END();
+    total_size += data_size;
+  }
+
+  // repeated int32 neg_peak2 = 8 [packed = true];
+  {
+    int data_size = 0;
+    for (int i = 0; i < this->neg_peak2_size(); i++) {
+      data_size += ::google::protobuf::internal::WireFormatLite::
+        Int32Size(this->neg_peak2(i));
+    }
+    if (data_size > 0) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(data_size);
+    }
+    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+    _neg_peak2_cached_byte_size_ = data_size;
+    GOOGLE_SAFE_CONCURRENT_WRITES_END();
+    total_size += data_size;
+  }
+
+  // repeated int32 modifications = 9 [packed = true];
+  {
+    int data_size = 0;
+    for (int i = 0; i < this->modifications_size(); i++) {
+      data_size += ::google::protobuf::internal::WireFormatLite::
+        Int32Size(this->modifications(i));
+    }
+    if (data_size > 0) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(data_size);
+    }
+    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+    _modifications_cached_byte_size_ = data_size;
+    GOOGLE_SAFE_CONCURRENT_WRITES_END();
+    total_size += data_size;
+  }
+
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void Peptide::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const Peptide* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const Peptide*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void Peptide::MergeFrom(const Peptide& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  peak1_.MergeFrom(from.peak1_);
+  peak2_.MergeFrom(from.peak2_);
+  neg_peak1_.MergeFrom(from.neg_peak1_);
+  neg_peak2_.MergeFrom(from.neg_peak2_);
+  modifications_.MergeFrom(from.modifications_);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_id()) {
+      set_id(from.id());
+    }
+    if (from.has_mass()) {
+      set_mass(from.mass());
+    }
+    if (from.has_length()) {
+      set_length(from.length());
+    }
+    if (from.has_first_location()) {
+      mutable_first_location()->::pb::Location::MergeFrom(from.first_location());
+    }
+  }
+  if (from._has_bits_[9 / 32] & (0xffu << (9 % 32))) {
+    if (from.has_aux_locations_index()) {
+      set_aux_locations_index(from.aux_locations_index());
+    }
+    if (from.has_is_decoy()) {
+      set_is_decoy(from.is_decoy());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void Peptide::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void Peptide::CopyFrom(const Peptide& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool Peptide::IsInitialized() const {
+
+  return true;
+}
+
+void Peptide::Swap(Peptide* other) {
+  if (other != this) {
+    std::swap(id_, other->id_);
+    std::swap(mass_, other->mass_);
+    std::swap(length_, other->length_);
+    std::swap(first_location_, other->first_location_);
+    peak1_.Swap(&other->peak1_);
+    peak2_.Swap(&other->peak2_);
+    neg_peak1_.Swap(&other->neg_peak1_);
+    neg_peak2_.Swap(&other->neg_peak2_);
+    modifications_.Swap(&other->modifications_);
+    std::swap(aux_locations_index_, other->aux_locations_index_);
+    std::swap(is_decoy_, other->is_decoy_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata Peptide::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = Peptide_descriptor_;
+  metadata.reflection = Peptide_reflection_;
+  return metadata;
+}
+
+
+// ===================================================================
+
+#ifndef _MSC_VER
+const int AuxLocation::kLocationFieldNumber;
+#endif  // !_MSC_VER
+
+AuxLocation::AuxLocation()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void AuxLocation::InitAsDefaultInstance() {
+}
+
+AuxLocation::AuxLocation(const AuxLocation& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void AuxLocation::SharedCtor() {
+  _cached_size_ = 0;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+AuxLocation::~AuxLocation() {
+  SharedDtor();
+}
+
+void AuxLocation::SharedDtor() {
+  if (this != default_instance_) {
+  }
+}
+
+void AuxLocation::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* AuxLocation::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return AuxLocation_descriptor_;
+}
+
+const AuxLocation& AuxLocation::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_peptides_2eproto();
+  return *default_instance_;
+}
+
+AuxLocation* AuxLocation::default_instance_ = NULL;
+
+AuxLocation* AuxLocation::New() const {
+  return new AuxLocation;
+}
+
+void AuxLocation::Clear() {
+  location_.Clear();
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool AuxLocation::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // repeated .pb.Location location = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_location:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+                input, add_location()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(10)) goto parse_location;
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void AuxLocation::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // repeated .pb.Location location = 1;
+  for (int i = 0; i < this->location_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      1, this->location(i), output);
+  }
+
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* AuxLocation::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // repeated .pb.Location location = 1;
+  for (int i = 0; i < this->location_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        1, this->location(i), target);
+  }
+
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int AuxLocation::ByteSize() const {
+  int total_size = 0;
+
+  // repeated .pb.Location location = 1;
+  total_size += 1 * this->location_size();
+  for (int i = 0; i < this->location_size(); i++) {
+    total_size +=
+      ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+        this->location(i));
+  }
+
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void AuxLocation::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const AuxLocation* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const AuxLocation*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void AuxLocation::MergeFrom(const AuxLocation& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  location_.MergeFrom(from.location_);
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void AuxLocation::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void AuxLocation::CopyFrom(const AuxLocation& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool AuxLocation::IsInitialized() const {
+
+  return true;
+}
+
+void AuxLocation::Swap(AuxLocation* other) {
+  if (other != this) {
+    location_.Swap(&other->location_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata AuxLocation::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = AuxLocation_descriptor_;
+  metadata.reflection = AuxLocation_reflection_;
+  return metadata;
+}
+
+
+// @@protoc_insertion_point(namespace_scope)
+
+}  // namespace pb
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/app/tide/protoobj/peptides.pb.h b/src/app/tide/protoobj/peptides.pb.h
new file mode 100644
index 0000000..f0bd254
--- /dev/null
+++ b/src/app/tide/protoobj/peptides.pb.h
@@ -0,0 +1,843 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: peptides.proto
+
+#ifndef PROTOBUF_peptides_2eproto__INCLUDED
+#define PROTOBUF_peptides_2eproto__INCLUDED
+
+#include <string>
+
+#include <google/protobuf/stubs/common.h>
+
+#if GOOGLE_PROTOBUF_VERSION < 2005000
+#error This file was generated by a newer version of protoc which is
+#error incompatible with your Protocol Buffer headers.  Please update
+#error your headers.
+#endif
+#if 2005000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
+#error This file was generated by an older version of protoc which is
+#error incompatible with your Protocol Buffer headers.  Please
+#error regenerate this file with a newer version of protoc.
+#endif
+
+#include <google/protobuf/generated_message_util.h>
+#include <google/protobuf/message.h>
+#include <google/protobuf/repeated_field.h>
+#include <google/protobuf/extension_set.h>
+#include <google/protobuf/generated_enum_reflection.h>
+#include <google/protobuf/unknown_field_set.h>
+#include "raw_proteins.pb.h"
+// @@protoc_insertion_point(includes)
+
+namespace pb {
+
+// Internal implementation detail -- do not call these.
+void  protobuf_AddDesc_peptides_2eproto();
+void protobuf_AssignDesc_peptides_2eproto();
+void protobuf_ShutdownFile_peptides_2eproto();
+
+class Location;
+class Peptide;
+class AuxLocation;
+
+enum Peptide_Series {
+  Peptide_Series_Y = 0,
+  Peptide_Series_B = 1
+};
+bool Peptide_Series_IsValid(int value);
+const Peptide_Series Peptide_Series_Series_MIN = Peptide_Series_Y;
+const Peptide_Series Peptide_Series_Series_MAX = Peptide_Series_B;
+const int Peptide_Series_Series_ARRAYSIZE = Peptide_Series_Series_MAX + 1;
+
+const ::google::protobuf::EnumDescriptor* Peptide_Series_descriptor();
+inline const ::std::string& Peptide_Series_Name(Peptide_Series value) {
+  return ::google::protobuf::internal::NameOfEnum(
+    Peptide_Series_descriptor(), value);
+}
+inline bool Peptide_Series_Parse(
+    const ::std::string& name, Peptide_Series* value) {
+  return ::google::protobuf::internal::ParseNamedEnum<Peptide_Series>(
+    Peptide_Series_descriptor(), name, value);
+}
+// ===================================================================
+
+class Location : public ::google::protobuf::Message {
+ public:
+  Location();
+  virtual ~Location();
+
+  Location(const Location& from);
+
+  inline Location& operator=(const Location& from) {
+    CopyFrom(from);
+    return *this;
+  }
+
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const Location& default_instance();
+
+  void Swap(Location* other);
+
+  // implements Message ----------------------------------------------
+
+  Location* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const Location& from);
+  void MergeFrom(const Location& from);
+  void Clear();
+  bool IsInitialized() const;
+
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // optional int32 protein_id = 1;
+  inline bool has_protein_id() const;
+  inline void clear_protein_id();
+  static const int kProteinIdFieldNumber = 1;
+  inline ::google::protobuf::int32 protein_id() const;
+  inline void set_protein_id(::google::protobuf::int32 value);
+
+  // optional int32 pos = 2;
+  inline bool has_pos() const;
+  inline void clear_pos();
+  static const int kPosFieldNumber = 2;
+  inline ::google::protobuf::int32 pos() const;
+  inline void set_pos(::google::protobuf::int32 value);
+
+  // @@protoc_insertion_point(class_scope:pb.Location)
+ private:
+  inline void set_has_protein_id();
+  inline void clear_has_protein_id();
+  inline void set_has_pos();
+  inline void clear_has_pos();
+
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+
+  ::google::protobuf::int32 protein_id_;
+  ::google::protobuf::int32 pos_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(2 + 31) / 32];
+
+  friend void  protobuf_AddDesc_peptides_2eproto();
+  friend void protobuf_AssignDesc_peptides_2eproto();
+  friend void protobuf_ShutdownFile_peptides_2eproto();
+
+  void InitAsDefaultInstance();
+  static Location* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class Peptide : public ::google::protobuf::Message {
+ public:
+  Peptide();
+  virtual ~Peptide();
+
+  Peptide(const Peptide& from);
+
+  inline Peptide& operator=(const Peptide& from) {
+    CopyFrom(from);
+    return *this;
+  }
+
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const Peptide& default_instance();
+
+  void Swap(Peptide* other);
+
+  // implements Message ----------------------------------------------
+
+  Peptide* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const Peptide& from);
+  void MergeFrom(const Peptide& from);
+  void Clear();
+  bool IsInitialized() const;
+
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const;
+
+  // nested types ----------------------------------------------------
+
+  typedef Peptide_Series Series;
+  static const Series Y = Peptide_Series_Y;
+  static const Series B = Peptide_Series_B;
+  static inline bool Series_IsValid(int value) {
+    return Peptide_Series_IsValid(value);
+  }
+  static const Series Series_MIN =
+    Peptide_Series_Series_MIN;
+  static const Series Series_MAX =
+    Peptide_Series_Series_MAX;
+  static const int Series_ARRAYSIZE =
+    Peptide_Series_Series_ARRAYSIZE;
+  static inline const ::google::protobuf::EnumDescriptor*
+  Series_descriptor() {
+    return Peptide_Series_descriptor();
+  }
+  static inline const ::std::string& Series_Name(Series value) {
+    return Peptide_Series_Name(value);
+  }
+  static inline bool Series_Parse(const ::std::string& name,
+      Series* value) {
+    return Peptide_Series_Parse(name, value);
+  }
+
+  // accessors -------------------------------------------------------
+
+  // optional int32 id = 1;
+  inline bool has_id() const;
+  inline void clear_id();
+  static const int kIdFieldNumber = 1;
+  inline ::google::protobuf::int32 id() const;
+  inline void set_id(::google::protobuf::int32 value);
+
+  // optional double mass = 2;
+  inline bool has_mass() const;
+  inline void clear_mass();
+  static const int kMassFieldNumber = 2;
+  inline double mass() const;
+  inline void set_mass(double value);
+
+  // optional int32 length = 3;
+  inline bool has_length() const;
+  inline void clear_length();
+  static const int kLengthFieldNumber = 3;
+  inline ::google::protobuf::int32 length() const;
+  inline void set_length(::google::protobuf::int32 value);
+
+  // optional .pb.Location first_location = 4;
+  inline bool has_first_location() const;
+  inline void clear_first_location();
+  static const int kFirstLocationFieldNumber = 4;
+  inline const ::pb::Location& first_location() const;
+  inline ::pb::Location* mutable_first_location();
+  inline ::pb::Location* release_first_location();
+  inline void set_allocated_first_location(::pb::Location* first_location);
+
+  // repeated int32 peak1 = 5 [packed = true];
+  inline int peak1_size() const;
+  inline void clear_peak1();
+  static const int kPeak1FieldNumber = 5;
+  inline ::google::protobuf::int32 peak1(int index) const;
+  inline void set_peak1(int index, ::google::protobuf::int32 value);
+  inline void add_peak1(::google::protobuf::int32 value);
+  inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
+      peak1() const;
+  inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
+      mutable_peak1();
+
+  // repeated int32 peak2 = 6 [packed = true];
+  inline int peak2_size() const;
+  inline void clear_peak2();
+  static const int kPeak2FieldNumber = 6;
+  inline ::google::protobuf::int32 peak2(int index) const;
+  inline void set_peak2(int index, ::google::protobuf::int32 value);
+  inline void add_peak2(::google::protobuf::int32 value);
+  inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
+      peak2() const;
+  inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
+      mutable_peak2();
+
+  // repeated int32 neg_peak1 = 7 [packed = true];
+  inline int neg_peak1_size() const;
+  inline void clear_neg_peak1();
+  static const int kNegPeak1FieldNumber = 7;
+  inline ::google::protobuf::int32 neg_peak1(int index) const;
+  inline void set_neg_peak1(int index, ::google::protobuf::int32 value);
+  inline void add_neg_peak1(::google::protobuf::int32 value);
+  inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
+      neg_peak1() const;
+  inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
+      mutable_neg_peak1();
+
+  // repeated int32 neg_peak2 = 8 [packed = true];
+  inline int neg_peak2_size() const;
+  inline void clear_neg_peak2();
+  static const int kNegPeak2FieldNumber = 8;
+  inline ::google::protobuf::int32 neg_peak2(int index) const;
+  inline void set_neg_peak2(int index, ::google::protobuf::int32 value);
+  inline void add_neg_peak2(::google::protobuf::int32 value);
+  inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
+      neg_peak2() const;
+  inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
+      mutable_neg_peak2();
+
+  // repeated int32 modifications = 9 [packed = true];
+  inline int modifications_size() const;
+  inline void clear_modifications();
+  static const int kModificationsFieldNumber = 9;
+  inline ::google::protobuf::int32 modifications(int index) const;
+  inline void set_modifications(int index, ::google::protobuf::int32 value);
+  inline void add_modifications(::google::protobuf::int32 value);
+  inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
+      modifications() const;
+  inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
+      mutable_modifications();
+
+  // optional int32 aux_locations_index = 10;
+  inline bool has_aux_locations_index() const;
+  inline void clear_aux_locations_index();
+  static const int kAuxLocationsIndexFieldNumber = 10;
+  inline ::google::protobuf::int32 aux_locations_index() const;
+  inline void set_aux_locations_index(::google::protobuf::int32 value);
+
+  // optional bool is_decoy = 11;
+  inline bool has_is_decoy() const;
+  inline void clear_is_decoy();
+  static const int kIsDecoyFieldNumber = 11;
+  inline bool is_decoy() const;
+  inline void set_is_decoy(bool value);
+
+  // @@protoc_insertion_point(class_scope:pb.Peptide)
+ private:
+  inline void set_has_id();
+  inline void clear_has_id();
+  inline void set_has_mass();
+  inline void clear_has_mass();
+  inline void set_has_length();
+  inline void clear_has_length();
+  inline void set_has_first_location();
+  inline void clear_has_first_location();
+  inline void set_has_aux_locations_index();
+  inline void clear_has_aux_locations_index();
+  inline void set_has_is_decoy();
+  inline void clear_has_is_decoy();
+
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+
+  double mass_;
+  ::google::protobuf::int32 id_;
+  ::google::protobuf::int32 length_;
+  ::pb::Location* first_location_;
+  ::google::protobuf::RepeatedField< ::google::protobuf::int32 > peak1_;
+  mutable int _peak1_cached_byte_size_;
+  ::google::protobuf::RepeatedField< ::google::protobuf::int32 > peak2_;
+  mutable int _peak2_cached_byte_size_;
+  ::google::protobuf::RepeatedField< ::google::protobuf::int32 > neg_peak1_;
+  mutable int _neg_peak1_cached_byte_size_;
+  ::google::protobuf::RepeatedField< ::google::protobuf::int32 > neg_peak2_;
+  mutable int _neg_peak2_cached_byte_size_;
+  ::google::protobuf::RepeatedField< ::google::protobuf::int32 > modifications_;
+  mutable int _modifications_cached_byte_size_;
+  ::google::protobuf::int32 aux_locations_index_;
+  bool is_decoy_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(11 + 31) / 32];
+
+  friend void  protobuf_AddDesc_peptides_2eproto();
+  friend void protobuf_AssignDesc_peptides_2eproto();
+  friend void protobuf_ShutdownFile_peptides_2eproto();
+
+  void InitAsDefaultInstance();
+  static Peptide* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class AuxLocation : public ::google::protobuf::Message {
+ public:
+  AuxLocation();
+  virtual ~AuxLocation();
+
+  AuxLocation(const AuxLocation& from);
+
+  inline AuxLocation& operator=(const AuxLocation& from) {
+    CopyFrom(from);
+    return *this;
+  }
+
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const AuxLocation& default_instance();
+
+  void Swap(AuxLocation* other);
+
+  // implements Message ----------------------------------------------
+
+  AuxLocation* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const AuxLocation& from);
+  void MergeFrom(const AuxLocation& from);
+  void Clear();
+  bool IsInitialized() const;
+
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // repeated .pb.Location location = 1;
+  inline int location_size() const;
+  inline void clear_location();
+  static const int kLocationFieldNumber = 1;
+  inline const ::pb::Location& location(int index) const;
+  inline ::pb::Location* mutable_location(int index);
+  inline ::pb::Location* add_location();
+  inline const ::google::protobuf::RepeatedPtrField< ::pb::Location >&
+      location() const;
+  inline ::google::protobuf::RepeatedPtrField< ::pb::Location >*
+      mutable_location();
+
+  // @@protoc_insertion_point(class_scope:pb.AuxLocation)
+ private:
+
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+
+  ::google::protobuf::RepeatedPtrField< ::pb::Location > location_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(1 + 31) / 32];
+
+  friend void  protobuf_AddDesc_peptides_2eproto();
+  friend void protobuf_AssignDesc_peptides_2eproto();
+  friend void protobuf_ShutdownFile_peptides_2eproto();
+
+  void InitAsDefaultInstance();
+  static AuxLocation* default_instance_;
+};
+// ===================================================================
+
+
+// ===================================================================
+
+// Location
+
+// optional int32 protein_id = 1;
+inline bool Location::has_protein_id() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void Location::set_has_protein_id() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void Location::clear_has_protein_id() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void Location::clear_protein_id() {
+  protein_id_ = 0;
+  clear_has_protein_id();
+}
+inline ::google::protobuf::int32 Location::protein_id() const {
+  return protein_id_;
+}
+inline void Location::set_protein_id(::google::protobuf::int32 value) {
+  set_has_protein_id();
+  protein_id_ = value;
+}
+
+// optional int32 pos = 2;
+inline bool Location::has_pos() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void Location::set_has_pos() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void Location::clear_has_pos() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void Location::clear_pos() {
+  pos_ = 0;
+  clear_has_pos();
+}
+inline ::google::protobuf::int32 Location::pos() const {
+  return pos_;
+}
+inline void Location::set_pos(::google::protobuf::int32 value) {
+  set_has_pos();
+  pos_ = value;
+}
+
+// -------------------------------------------------------------------
+
+// Peptide
+
+// optional int32 id = 1;
+inline bool Peptide::has_id() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void Peptide::set_has_id() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void Peptide::clear_has_id() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void Peptide::clear_id() {
+  id_ = 0;
+  clear_has_id();
+}
+inline ::google::protobuf::int32 Peptide::id() const {
+  return id_;
+}
+inline void Peptide::set_id(::google::protobuf::int32 value) {
+  set_has_id();
+  id_ = value;
+}
+
+// optional double mass = 2;
+inline bool Peptide::has_mass() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void Peptide::set_has_mass() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void Peptide::clear_has_mass() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void Peptide::clear_mass() {
+  mass_ = 0;
+  clear_has_mass();
+}
+inline double Peptide::mass() const {
+  return mass_;
+}
+inline void Peptide::set_mass(double value) {
+  set_has_mass();
+  mass_ = value;
+}
+
+// optional int32 length = 3;
+inline bool Peptide::has_length() const {
+  return (_has_bits_[0] & 0x00000004u) != 0;
+}
+inline void Peptide::set_has_length() {
+  _has_bits_[0] |= 0x00000004u;
+}
+inline void Peptide::clear_has_length() {
+  _has_bits_[0] &= ~0x00000004u;
+}
+inline void Peptide::clear_length() {
+  length_ = 0;
+  clear_has_length();
+}
+inline ::google::protobuf::int32 Peptide::length() const {
+  return length_;
+}
+inline void Peptide::set_length(::google::protobuf::int32 value) {
+  set_has_length();
+  length_ = value;
+}
+
+// optional .pb.Location first_location = 4;
+inline bool Peptide::has_first_location() const {
+  return (_has_bits_[0] & 0x00000008u) != 0;
+}
+inline void Peptide::set_has_first_location() {
+  _has_bits_[0] |= 0x00000008u;
+}
+inline void Peptide::clear_has_first_location() {
+  _has_bits_[0] &= ~0x00000008u;
+}
+inline void Peptide::clear_first_location() {
+  if (first_location_ != NULL) first_location_->::pb::Location::Clear();
+  clear_has_first_location();
+}
+inline const ::pb::Location& Peptide::first_location() const {
+  return first_location_ != NULL ? *first_location_ : *default_instance_->first_location_;
+}
+inline ::pb::Location* Peptide::mutable_first_location() {
+  set_has_first_location();
+  if (first_location_ == NULL) first_location_ = new ::pb::Location;
+  return first_location_;
+}
+inline ::pb::Location* Peptide::release_first_location() {
+  clear_has_first_location();
+  ::pb::Location* temp = first_location_;
+  first_location_ = NULL;
+  return temp;
+}
+inline void Peptide::set_allocated_first_location(::pb::Location* first_location) {
+  delete first_location_;
+  first_location_ = first_location;
+  if (first_location) {
+    set_has_first_location();
+  } else {
+    clear_has_first_location();
+  }
+}
+
+// repeated int32 peak1 = 5 [packed = true];
+inline int Peptide::peak1_size() const {
+  return peak1_.size();
+}
+inline void Peptide::clear_peak1() {
+  peak1_.Clear();
+}
+inline ::google::protobuf::int32 Peptide::peak1(int index) const {
+  return peak1_.Get(index);
+}
+inline void Peptide::set_peak1(int index, ::google::protobuf::int32 value) {
+  peak1_.Set(index, value);
+}
+inline void Peptide::add_peak1(::google::protobuf::int32 value) {
+  peak1_.Add(value);
+}
+inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
+Peptide::peak1() const {
+  return peak1_;
+}
+inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
+Peptide::mutable_peak1() {
+  return &peak1_;
+}
+
+// repeated int32 peak2 = 6 [packed = true];
+inline int Peptide::peak2_size() const {
+  return peak2_.size();
+}
+inline void Peptide::clear_peak2() {
+  peak2_.Clear();
+}
+inline ::google::protobuf::int32 Peptide::peak2(int index) const {
+  return peak2_.Get(index);
+}
+inline void Peptide::set_peak2(int index, ::google::protobuf::int32 value) {
+  peak2_.Set(index, value);
+}
+inline void Peptide::add_peak2(::google::protobuf::int32 value) {
+  peak2_.Add(value);
+}
+inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
+Peptide::peak2() const {
+  return peak2_;
+}
+inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
+Peptide::mutable_peak2() {
+  return &peak2_;
+}
+
+// repeated int32 neg_peak1 = 7 [packed = true];
+inline int Peptide::neg_peak1_size() const {
+  return neg_peak1_.size();
+}
+inline void Peptide::clear_neg_peak1() {
+  neg_peak1_.Clear();
+}
+inline ::google::protobuf::int32 Peptide::neg_peak1(int index) const {
+  return neg_peak1_.Get(index);
+}
+inline void Peptide::set_neg_peak1(int index, ::google::protobuf::int32 value) {
+  neg_peak1_.Set(index, value);
+}
+inline void Peptide::add_neg_peak1(::google::protobuf::int32 value) {
+  neg_peak1_.Add(value);
+}
+inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
+Peptide::neg_peak1() const {
+  return neg_peak1_;
+}
+inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
+Peptide::mutable_neg_peak1() {
+  return &neg_peak1_;
+}
+
+// repeated int32 neg_peak2 = 8 [packed = true];
+inline int Peptide::neg_peak2_size() const {
+  return neg_peak2_.size();
+}
+inline void Peptide::clear_neg_peak2() {
+  neg_peak2_.Clear();
+}
+inline ::google::protobuf::int32 Peptide::neg_peak2(int index) const {
+  return neg_peak2_.Get(index);
+}
+inline void Peptide::set_neg_peak2(int index, ::google::protobuf::int32 value) {
+  neg_peak2_.Set(index, value);
+}
+inline void Peptide::add_neg_peak2(::google::protobuf::int32 value) {
+  neg_peak2_.Add(value);
+}
+inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
+Peptide::neg_peak2() const {
+  return neg_peak2_;
+}
+inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
+Peptide::mutable_neg_peak2() {
+  return &neg_peak2_;
+}
+
+// repeated int32 modifications = 9 [packed = true];
+inline int Peptide::modifications_size() const {
+  return modifications_.size();
+}
+inline void Peptide::clear_modifications() {
+  modifications_.Clear();
+}
+inline ::google::protobuf::int32 Peptide::modifications(int index) const {
+  return modifications_.Get(index);
+}
+inline void Peptide::set_modifications(int index, ::google::protobuf::int32 value) {
+  modifications_.Set(index, value);
+}
+inline void Peptide::add_modifications(::google::protobuf::int32 value) {
+  modifications_.Add(value);
+}
+inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
+Peptide::modifications() const {
+  return modifications_;
+}
+inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
+Peptide::mutable_modifications() {
+  return &modifications_;
+}
+
+// optional int32 aux_locations_index = 10;
+inline bool Peptide::has_aux_locations_index() const {
+  return (_has_bits_[0] & 0x00000200u) != 0;
+}
+inline void Peptide::set_has_aux_locations_index() {
+  _has_bits_[0] |= 0x00000200u;
+}
+inline void Peptide::clear_has_aux_locations_index() {
+  _has_bits_[0] &= ~0x00000200u;
+}
+inline void Peptide::clear_aux_locations_index() {
+  aux_locations_index_ = 0;
+  clear_has_aux_locations_index();
+}
+inline ::google::protobuf::int32 Peptide::aux_locations_index() const {
+  return aux_locations_index_;
+}
+inline void Peptide::set_aux_locations_index(::google::protobuf::int32 value) {
+  set_has_aux_locations_index();
+  aux_locations_index_ = value;
+}
+
+// optional bool is_decoy = 11;
+inline bool Peptide::has_is_decoy() const {
+  return (_has_bits_[0] & 0x00000400u) != 0;
+}
+inline void Peptide::set_has_is_decoy() {
+  _has_bits_[0] |= 0x00000400u;
+}
+inline void Peptide::clear_has_is_decoy() {
+  _has_bits_[0] &= ~0x00000400u;
+}
+inline void Peptide::clear_is_decoy() {
+  is_decoy_ = false;
+  clear_has_is_decoy();
+}
+inline bool Peptide::is_decoy() const {
+  return is_decoy_;
+}
+inline void Peptide::set_is_decoy(bool value) {
+  set_has_is_decoy();
+  is_decoy_ = value;
+}
+
+// -------------------------------------------------------------------
+
+// AuxLocation
+
+// repeated .pb.Location location = 1;
+inline int AuxLocation::location_size() const {
+  return location_.size();
+}
+inline void AuxLocation::clear_location() {
+  location_.Clear();
+}
+inline const ::pb::Location& AuxLocation::location(int index) const {
+  return location_.Get(index);
+}
+inline ::pb::Location* AuxLocation::mutable_location(int index) {
+  return location_.Mutable(index);
+}
+inline ::pb::Location* AuxLocation::add_location() {
+  return location_.Add();
+}
+inline const ::google::protobuf::RepeatedPtrField< ::pb::Location >&
+AuxLocation::location() const {
+  return location_;
+}
+inline ::google::protobuf::RepeatedPtrField< ::pb::Location >*
+AuxLocation::mutable_location() {
+  return &location_;
+}
+
+
+// @@protoc_insertion_point(namespace_scope)
+
+}  // namespace pb
+
+#ifndef SWIG
+namespace google {
+namespace protobuf {
+
+template <>
+inline const EnumDescriptor* GetEnumDescriptor< ::pb::Peptide_Series>() {
+  return ::pb::Peptide_Series_descriptor();
+}
+
+}  // namespace google
+}  // namespace protobuf
+#endif  // SWIG
+
+// @@protoc_insertion_point(global_scope)
+
+#endif  // PROTOBUF_peptides_2eproto__INCLUDED
diff --git a/src/app/tide/protoobj/peptides_pb2.py b/src/app/tide/protoobj/peptides_pb2.py
new file mode 100644
index 0000000..c5b236c
--- /dev/null
+++ b/src/app/tide/protoobj/peptides_pb2.py
@@ -0,0 +1,242 @@
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: peptides.proto
+
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+
+import raw_proteins_pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  name='peptides.proto',
+  package='pb',
+  serialized_pb='\n\x0epeptides.proto\x12\x02pb\x1a\x12raw_proteins.proto\"+\n\x08Location\x12\x12\n\nprotein_id\x18\x01 \x01(\x05\x12\x0b\n\x03pos\x18\x02 \x01(\x05\"\x8f\x02\n\x07Peptide\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x0c\n\x04mass\x18\x02 \x01(\x01\x12\x0e\n\x06length\x18\x03 \x01(\x05\x12$\n\x0e\x66irst_location\x18\x04 \x01(\x0b\x32\x0c.pb.Location\x12\x11\n\x05peak1\x18\x05 \x03(\x05\x42\x02\x10\x01\x12\x11\n\x05peak2\x18\x06 \x03(\x05\x42\x02\x10\x01\x12\x15\n\tneg_peak1\x18\ [...]
+
+
+
+_PEPTIDE_SERIES = _descriptor.EnumDescriptor(
+  name='Series',
+  full_name='pb.Peptide.Series',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='Y', index=0, number=0,
+      options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='B', index=1, number=1,
+      options=None,
+      type=None),
+  ],
+  containing_type=None,
+  options=None,
+  serialized_start=337,
+  serialized_end=359,
+)
+
+
+_LOCATION = _descriptor.Descriptor(
+  name='Location',
+  full_name='pb.Location',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='protein_id', full_name='pb.Location.protein_id', index=0,
+      number=1, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='pos', full_name='pb.Location.pos', index=1,
+      number=2, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=42,
+  serialized_end=85,
+)
+
+
+_PEPTIDE = _descriptor.Descriptor(
+  name='Peptide',
+  full_name='pb.Peptide',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='id', full_name='pb.Peptide.id', index=0,
+      number=1, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='mass', full_name='pb.Peptide.mass', index=1,
+      number=2, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='length', full_name='pb.Peptide.length', index=2,
+      number=3, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='first_location', full_name='pb.Peptide.first_location', index=3,
+      number=4, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='peak1', full_name='pb.Peptide.peak1', index=4,
+      number=5, type=5, cpp_type=1, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')),
+    _descriptor.FieldDescriptor(
+      name='peak2', full_name='pb.Peptide.peak2', index=5,
+      number=6, type=5, cpp_type=1, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')),
+    _descriptor.FieldDescriptor(
+      name='neg_peak1', full_name='pb.Peptide.neg_peak1', index=6,
+      number=7, type=5, cpp_type=1, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')),
+    _descriptor.FieldDescriptor(
+      name='neg_peak2', full_name='pb.Peptide.neg_peak2', index=7,
+      number=8, type=5, cpp_type=1, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')),
+    _descriptor.FieldDescriptor(
+      name='modifications', full_name='pb.Peptide.modifications', index=8,
+      number=9, type=5, cpp_type=1, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')),
+    _descriptor.FieldDescriptor(
+      name='aux_locations_index', full_name='pb.Peptide.aux_locations_index', index=9,
+      number=10, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='is_decoy', full_name='pb.Peptide.is_decoy', index=10,
+      number=11, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+    _PEPTIDE_SERIES,
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=88,
+  serialized_end=359,
+)
+
+
+_AUXLOCATION = _descriptor.Descriptor(
+  name='AuxLocation',
+  full_name='pb.AuxLocation',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='location', full_name='pb.AuxLocation.location', index=0,
+      number=1, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=361,
+  serialized_end=406,
+)
+
+_PEPTIDE.fields_by_name['first_location'].message_type = _LOCATION
+_PEPTIDE_SERIES.containing_type = _PEPTIDE;
+_AUXLOCATION.fields_by_name['location'].message_type = _LOCATION
+DESCRIPTOR.message_types_by_name['Location'] = _LOCATION
+DESCRIPTOR.message_types_by_name['Peptide'] = _PEPTIDE
+DESCRIPTOR.message_types_by_name['AuxLocation'] = _AUXLOCATION
+
+class Location(_message.Message):
+  __metaclass__ = _reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _LOCATION
+
+  # @@protoc_insertion_point(class_scope:pb.Location)
+
+class Peptide(_message.Message):
+  __metaclass__ = _reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _PEPTIDE
+
+  # @@protoc_insertion_point(class_scope:pb.Peptide)
+
+class AuxLocation(_message.Message):
+  __metaclass__ = _reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _AUXLOCATION
+
+  # @@protoc_insertion_point(class_scope:pb.AuxLocation)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), 'H\001')
+_PEPTIDE.fields_by_name['peak1'].has_options = True
+_PEPTIDE.fields_by_name['peak1']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')
+_PEPTIDE.fields_by_name['peak2'].has_options = True
+_PEPTIDE.fields_by_name['peak2']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')
+_PEPTIDE.fields_by_name['neg_peak1'].has_options = True
+_PEPTIDE.fields_by_name['neg_peak1']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')
+_PEPTIDE.fields_by_name['neg_peak2'].has_options = True
+_PEPTIDE.fields_by_name['neg_peak2']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')
+_PEPTIDE.fields_by_name['modifications'].has_options = True
+_PEPTIDE.fields_by_name['modifications']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')
+# @@protoc_insertion_point(module_scope)
diff --git a/src/app/tide/protoobj/raw_proteins.pb.cc b/src/app/tide/protoobj/raw_proteins.pb.cc
new file mode 100644
index 0000000..c864320
--- /dev/null
+++ b/src/app/tide/protoobj/raw_proteins.pb.cc
@@ -0,0 +1,467 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: raw_proteins.proto
+
+#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
+#include "raw_proteins.pb.h"
+
+#include <algorithm>
+
+#include <google/protobuf/stubs/common.h>
+#include <google/protobuf/stubs/once.h>
+#include <google/protobuf/io/coded_stream.h>
+#include <google/protobuf/wire_format_lite_inl.h>
+#include <google/protobuf/descriptor.h>
+#include <google/protobuf/generated_message_reflection.h>
+#include <google/protobuf/reflection_ops.h>
+#include <google/protobuf/wire_format.h>
+// @@protoc_insertion_point(includes)
+
+namespace pb {
+
+namespace {
+
+const ::google::protobuf::Descriptor* Protein_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  Protein_reflection_ = NULL;
+
+}  // namespace
+
+
+void protobuf_AssignDesc_raw_5fproteins_2eproto() {
+  protobuf_AddDesc_raw_5fproteins_2eproto();
+  const ::google::protobuf::FileDescriptor* file =
+    ::google::protobuf::DescriptorPool::generated_pool()->FindFileByName(
+      "raw_proteins.proto");
+  GOOGLE_CHECK(file != NULL);
+  Protein_descriptor_ = file->message_type(0);
+  static const int Protein_offsets_[4] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Protein, name_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Protein, id_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Protein, residues_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Protein, target_pos_),
+  };
+  Protein_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      Protein_descriptor_,
+      Protein::default_instance_,
+      Protein_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Protein, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Protein, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(Protein));
+}
+
+namespace {
+
+GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AssignDescriptors_once_);
+inline void protobuf_AssignDescriptorsOnce() {
+  ::google::protobuf::GoogleOnceInit(&protobuf_AssignDescriptors_once_,
+                 &protobuf_AssignDesc_raw_5fproteins_2eproto);
+}
+
+void protobuf_RegisterTypes(const ::std::string&) {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    Protein_descriptor_, &Protein::default_instance());
+}
+
+}  // namespace
+
+void protobuf_ShutdownFile_raw_5fproteins_2eproto() {
+  delete Protein::default_instance_;
+  delete Protein_reflection_;
+}
+
+void protobuf_AddDesc_raw_5fproteins_2eproto() {
+  static bool already_here = false;
+  if (already_here) return;
+  already_here = true;
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
+    "\n\022raw_proteins.proto\022\002pb\"I\n\007Protein\022\014\n\004n"
+    "ame\030\001 \001(\t\022\n\n\002id\030\002 \001(\005\022\020\n\010residues\030\003 \001(\t\022"
+    "\022\n\ntarget_pos\030\005 \001(\005B\002H\001", 103);
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
+    "raw_proteins.proto", &protobuf_RegisterTypes);
+  Protein::default_instance_ = new Protein();
+  Protein::default_instance_->InitAsDefaultInstance();
+  ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_raw_5fproteins_2eproto);
+}
+
+// Force AddDescriptors() to be called at static initialization time.
+struct StaticDescriptorInitializer_raw_5fproteins_2eproto {
+  StaticDescriptorInitializer_raw_5fproteins_2eproto() {
+    protobuf_AddDesc_raw_5fproteins_2eproto();
+  }
+} static_descriptor_initializer_raw_5fproteins_2eproto_;
+
+// ===================================================================
+
+#ifndef _MSC_VER
+const int Protein::kNameFieldNumber;
+const int Protein::kIdFieldNumber;
+const int Protein::kResiduesFieldNumber;
+const int Protein::kTargetPosFieldNumber;
+#endif  // !_MSC_VER
+
+Protein::Protein()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void Protein::InitAsDefaultInstance() {
+}
+
+Protein::Protein(const Protein& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void Protein::SharedCtor() {
+  _cached_size_ = 0;
+  name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  id_ = 0;
+  residues_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  target_pos_ = 0;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+Protein::~Protein() {
+  SharedDtor();
+}
+
+void Protein::SharedDtor() {
+  if (name_ != &::google::protobuf::internal::kEmptyString) {
+    delete name_;
+  }
+  if (residues_ != &::google::protobuf::internal::kEmptyString) {
+    delete residues_;
+  }
+  if (this != default_instance_) {
+  }
+}
+
+void Protein::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* Protein::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return Protein_descriptor_;
+}
+
+const Protein& Protein::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_raw_5fproteins_2eproto();
+  return *default_instance_;
+}
+
+Protein* Protein::default_instance_ = NULL;
+
+Protein* Protein::New() const {
+  return new Protein;
+}
+
+void Protein::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (has_name()) {
+      if (name_ != &::google::protobuf::internal::kEmptyString) {
+        name_->clear();
+      }
+    }
+    id_ = 0;
+    if (has_residues()) {
+      if (residues_ != &::google::protobuf::internal::kEmptyString) {
+        residues_->clear();
+      }
+    }
+    target_pos_ = 0;
+  }
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool Protein::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // optional string name = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_name()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->name().data(), this->name().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(16)) goto parse_id;
+        break;
+      }
+
+      // optional int32 id = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_id:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &id_)));
+          set_has_id();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(26)) goto parse_residues;
+        break;
+      }
+
+      // optional string residues = 3;
+      case 3: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_residues:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_residues()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+            this->residues().data(), this->residues().length(),
+            ::google::protobuf::internal::WireFormat::PARSE);
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(40)) goto parse_target_pos;
+        break;
+      }
+
+      // optional int32 target_pos = 5;
+      case 5: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_target_pos:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &target_pos_)));
+          set_has_target_pos();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void Protein::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // optional string name = 1;
+  if (has_name()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->name().data(), this->name().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      1, this->name(), output);
+  }
+
+  // optional int32 id = 2;
+  if (has_id()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->id(), output);
+  }
+
+  // optional string residues = 3;
+  if (has_residues()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->residues().data(), this->residues().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    ::google::protobuf::internal::WireFormatLite::WriteString(
+      3, this->residues(), output);
+  }
+
+  // optional int32 target_pos = 5;
+  if (has_target_pos()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(5, this->target_pos(), output);
+  }
+
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* Protein::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // optional string name = 1;
+  if (has_name()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->name().data(), this->name().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        1, this->name(), target);
+  }
+
+  // optional int32 id = 2;
+  if (has_id()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(2, this->id(), target);
+  }
+
+  // optional string residues = 3;
+  if (has_residues()) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8String(
+      this->residues().data(), this->residues().length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE);
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        3, this->residues(), target);
+  }
+
+  // optional int32 target_pos = 5;
+  if (has_target_pos()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(5, this->target_pos(), target);
+  }
+
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int Protein::ByteSize() const {
+  int total_size = 0;
+
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // optional string name = 1;
+    if (has_name()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->name());
+    }
+
+    // optional int32 id = 2;
+    if (has_id()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->id());
+    }
+
+    // optional string residues = 3;
+    if (has_residues()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->residues());
+    }
+
+    // optional int32 target_pos = 5;
+    if (has_target_pos()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->target_pos());
+    }
+
+  }
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void Protein::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const Protein* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const Protein*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void Protein::MergeFrom(const Protein& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_name()) {
+      set_name(from.name());
+    }
+    if (from.has_id()) {
+      set_id(from.id());
+    }
+    if (from.has_residues()) {
+      set_residues(from.residues());
+    }
+    if (from.has_target_pos()) {
+      set_target_pos(from.target_pos());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void Protein::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void Protein::CopyFrom(const Protein& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool Protein::IsInitialized() const {
+
+  return true;
+}
+
+void Protein::Swap(Protein* other) {
+  if (other != this) {
+    std::swap(name_, other->name_);
+    std::swap(id_, other->id_);
+    std::swap(residues_, other->residues_);
+    std::swap(target_pos_, other->target_pos_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata Protein::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = Protein_descriptor_;
+  metadata.reflection = Protein_reflection_;
+  return metadata;
+}
+
+
+// @@protoc_insertion_point(namespace_scope)
+
+}  // namespace pb
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/app/tide/protoobj/raw_proteins.pb.h b/src/app/tide/protoobj/raw_proteins.pb.h
new file mode 100644
index 0000000..981029b
--- /dev/null
+++ b/src/app/tide/protoobj/raw_proteins.pb.h
@@ -0,0 +1,367 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: raw_proteins.proto
+
+#ifndef PROTOBUF_raw_5fproteins_2eproto__INCLUDED
+#define PROTOBUF_raw_5fproteins_2eproto__INCLUDED
+
+#include <string>
+
+#include <google/protobuf/stubs/common.h>
+
+#if GOOGLE_PROTOBUF_VERSION < 2005000
+#error This file was generated by a newer version of protoc which is
+#error incompatible with your Protocol Buffer headers.  Please update
+#error your headers.
+#endif
+#if 2005000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
+#error This file was generated by an older version of protoc which is
+#error incompatible with your Protocol Buffer headers.  Please
+#error regenerate this file with a newer version of protoc.
+#endif
+
+#include <google/protobuf/generated_message_util.h>
+#include <google/protobuf/message.h>
+#include <google/protobuf/repeated_field.h>
+#include <google/protobuf/extension_set.h>
+#include <google/protobuf/unknown_field_set.h>
+// @@protoc_insertion_point(includes)
+
+namespace pb {
+
+// Internal implementation detail -- do not call these.
+void  protobuf_AddDesc_raw_5fproteins_2eproto();
+void protobuf_AssignDesc_raw_5fproteins_2eproto();
+void protobuf_ShutdownFile_raw_5fproteins_2eproto();
+
+class Protein;
+
+// ===================================================================
+
+class Protein : public ::google::protobuf::Message {
+ public:
+  Protein();
+  virtual ~Protein();
+
+  Protein(const Protein& from);
+
+  inline Protein& operator=(const Protein& from) {
+    CopyFrom(from);
+    return *this;
+  }
+
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const Protein& default_instance();
+
+  void Swap(Protein* other);
+
+  // implements Message ----------------------------------------------
+
+  Protein* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const Protein& from);
+  void MergeFrom(const Protein& from);
+  void Clear();
+  bool IsInitialized() const;
+
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // optional string name = 1;
+  inline bool has_name() const;
+  inline void clear_name();
+  static const int kNameFieldNumber = 1;
+  inline const ::std::string& name() const;
+  inline void set_name(const ::std::string& value);
+  inline void set_name(const char* value);
+  inline void set_name(const char* value, size_t size);
+  inline ::std::string* mutable_name();
+  inline ::std::string* release_name();
+  inline void set_allocated_name(::std::string* name);
+
+  // optional int32 id = 2;
+  inline bool has_id() const;
+  inline void clear_id();
+  static const int kIdFieldNumber = 2;
+  inline ::google::protobuf::int32 id() const;
+  inline void set_id(::google::protobuf::int32 value);
+
+  // optional string residues = 3;
+  inline bool has_residues() const;
+  inline void clear_residues();
+  static const int kResiduesFieldNumber = 3;
+  inline const ::std::string& residues() const;
+  inline void set_residues(const ::std::string& value);
+  inline void set_residues(const char* value);
+  inline void set_residues(const char* value, size_t size);
+  inline ::std::string* mutable_residues();
+  inline ::std::string* release_residues();
+  inline void set_allocated_residues(::std::string* residues);
+
+  // optional int32 target_pos = 5;
+  inline bool has_target_pos() const;
+  inline void clear_target_pos();
+  static const int kTargetPosFieldNumber = 5;
+  inline ::google::protobuf::int32 target_pos() const;
+  inline void set_target_pos(::google::protobuf::int32 value);
+
+  // @@protoc_insertion_point(class_scope:pb.Protein)
+ private:
+  inline void set_has_name();
+  inline void clear_has_name();
+  inline void set_has_id();
+  inline void clear_has_id();
+  inline void set_has_residues();
+  inline void clear_has_residues();
+  inline void set_has_target_pos();
+  inline void clear_has_target_pos();
+
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+
+  ::std::string* name_;
+  ::std::string* residues_;
+  ::google::protobuf::int32 id_;
+  ::google::protobuf::int32 target_pos_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(4 + 31) / 32];
+
+  friend void  protobuf_AddDesc_raw_5fproteins_2eproto();
+  friend void protobuf_AssignDesc_raw_5fproteins_2eproto();
+  friend void protobuf_ShutdownFile_raw_5fproteins_2eproto();
+
+  void InitAsDefaultInstance();
+  static Protein* default_instance_;
+};
+// ===================================================================
+
+
+// ===================================================================
+
+// Protein
+
+// optional string name = 1;
+inline bool Protein::has_name() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void Protein::set_has_name() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void Protein::clear_has_name() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void Protein::clear_name() {
+  if (name_ != &::google::protobuf::internal::kEmptyString) {
+    name_->clear();
+  }
+  clear_has_name();
+}
+inline const ::std::string& Protein::name() const {
+  return *name_;
+}
+inline void Protein::set_name(const ::std::string& value) {
+  set_has_name();
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
+    name_ = new ::std::string;
+  }
+  name_->assign(value);
+}
+inline void Protein::set_name(const char* value) {
+  set_has_name();
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
+    name_ = new ::std::string;
+  }
+  name_->assign(value);
+}
+inline void Protein::set_name(const char* value, size_t size) {
+  set_has_name();
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
+    name_ = new ::std::string;
+  }
+  name_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* Protein::mutable_name() {
+  set_has_name();
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
+    name_ = new ::std::string;
+  }
+  return name_;
+}
+inline ::std::string* Protein::release_name() {
+  clear_has_name();
+  if (name_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = name_;
+    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+inline void Protein::set_allocated_name(::std::string* name) {
+  if (name_ != &::google::protobuf::internal::kEmptyString) {
+    delete name_;
+  }
+  if (name) {
+    set_has_name();
+    name_ = name;
+  } else {
+    clear_has_name();
+    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  }
+}
+
+// optional int32 id = 2;
+inline bool Protein::has_id() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void Protein::set_has_id() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void Protein::clear_has_id() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void Protein::clear_id() {
+  id_ = 0;
+  clear_has_id();
+}
+inline ::google::protobuf::int32 Protein::id() const {
+  return id_;
+}
+inline void Protein::set_id(::google::protobuf::int32 value) {
+  set_has_id();
+  id_ = value;
+}
+
+// optional string residues = 3;
+inline bool Protein::has_residues() const {
+  return (_has_bits_[0] & 0x00000004u) != 0;
+}
+inline void Protein::set_has_residues() {
+  _has_bits_[0] |= 0x00000004u;
+}
+inline void Protein::clear_has_residues() {
+  _has_bits_[0] &= ~0x00000004u;
+}
+inline void Protein::clear_residues() {
+  if (residues_ != &::google::protobuf::internal::kEmptyString) {
+    residues_->clear();
+  }
+  clear_has_residues();
+}
+inline const ::std::string& Protein::residues() const {
+  return *residues_;
+}
+inline void Protein::set_residues(const ::std::string& value) {
+  set_has_residues();
+  if (residues_ == &::google::protobuf::internal::kEmptyString) {
+    residues_ = new ::std::string;
+  }
+  residues_->assign(value);
+}
+inline void Protein::set_residues(const char* value) {
+  set_has_residues();
+  if (residues_ == &::google::protobuf::internal::kEmptyString) {
+    residues_ = new ::std::string;
+  }
+  residues_->assign(value);
+}
+inline void Protein::set_residues(const char* value, size_t size) {
+  set_has_residues();
+  if (residues_ == &::google::protobuf::internal::kEmptyString) {
+    residues_ = new ::std::string;
+  }
+  residues_->assign(reinterpret_cast<const char*>(value), size);
+}
+inline ::std::string* Protein::mutable_residues() {
+  set_has_residues();
+  if (residues_ == &::google::protobuf::internal::kEmptyString) {
+    residues_ = new ::std::string;
+  }
+  return residues_;
+}
+inline ::std::string* Protein::release_residues() {
+  clear_has_residues();
+  if (residues_ == &::google::protobuf::internal::kEmptyString) {
+    return NULL;
+  } else {
+    ::std::string* temp = residues_;
+    residues_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+    return temp;
+  }
+}
+inline void Protein::set_allocated_residues(::std::string* residues) {
+  if (residues_ != &::google::protobuf::internal::kEmptyString) {
+    delete residues_;
+  }
+  if (residues) {
+    set_has_residues();
+    residues_ = residues;
+  } else {
+    clear_has_residues();
+    residues_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
+  }
+}
+
+// optional int32 target_pos = 5;
+inline bool Protein::has_target_pos() const {
+  return (_has_bits_[0] & 0x00000008u) != 0;
+}
+inline void Protein::set_has_target_pos() {
+  _has_bits_[0] |= 0x00000008u;
+}
+inline void Protein::clear_has_target_pos() {
+  _has_bits_[0] &= ~0x00000008u;
+}
+inline void Protein::clear_target_pos() {
+  target_pos_ = 0;
+  clear_has_target_pos();
+}
+inline ::google::protobuf::int32 Protein::target_pos() const {
+  return target_pos_;
+}
+inline void Protein::set_target_pos(::google::protobuf::int32 value) {
+  set_has_target_pos();
+  target_pos_ = value;
+}
+
+
+// @@protoc_insertion_point(namespace_scope)
+
+}  // namespace pb
+
+#ifndef SWIG
+namespace google {
+namespace protobuf {
+
+
+}  // namespace google
+}  // namespace protobuf
+#endif  // SWIG
+
+// @@protoc_insertion_point(global_scope)
+
+#endif  // PROTOBUF_raw_5fproteins_2eproto__INCLUDED
diff --git a/src/app/tide/protoobj/raw_proteins_pb2.py b/src/app/tide/protoobj/raw_proteins_pb2.py
new file mode 100644
index 0000000..f2f07ab
--- /dev/null
+++ b/src/app/tide/protoobj/raw_proteins_pb2.py
@@ -0,0 +1,80 @@
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: raw_proteins.proto
+
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  name='raw_proteins.proto',
+  package='pb',
+  serialized_pb='\n\x12raw_proteins.proto\x12\x02pb\"I\n\x07Protein\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x05\x12\x10\n\x08residues\x18\x03 \x01(\t\x12\x12\n\ntarget_pos\x18\x05 \x01(\x05\x42\x02H\x01')
+
+
+
+
+_PROTEIN = _descriptor.Descriptor(
+  name='Protein',
+  full_name='pb.Protein',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='name', full_name='pb.Protein.name', index=0,
+      number=1, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='id', full_name='pb.Protein.id', index=1,
+      number=2, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='residues', full_name='pb.Protein.residues', index=2,
+      number=3, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=unicode("", "utf-8"),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='target_pos', full_name='pb.Protein.target_pos', index=3,
+      number=5, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=26,
+  serialized_end=99,
+)
+
+DESCRIPTOR.message_types_by_name['Protein'] = _PROTEIN
+
+class Protein(_message.Message):
+  __metaclass__ = _reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _PROTEIN
+
+  # @@protoc_insertion_point(class_scope:pb.Protein)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), 'H\001')
+# @@protoc_insertion_point(module_scope)
diff --git a/src/app/tide/protoobj/results.pb.cc b/src/app/tide/protoobj/results.pb.cc
new file mode 100644
index 0000000..564bfc4
--- /dev/null
+++ b/src/app/tide/protoobj/results.pb.cc
@@ -0,0 +1,1077 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: results.proto
+
+#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
+#include "results.pb.h"
+
+#include <algorithm>
+
+#include <google/protobuf/stubs/common.h>
+#include <google/protobuf/stubs/once.h>
+#include <google/protobuf/io/coded_stream.h>
+#include <google/protobuf/wire_format_lite_inl.h>
+#include <google/protobuf/descriptor.h>
+#include <google/protobuf/generated_message_reflection.h>
+#include <google/protobuf/reflection_ops.h>
+#include <google/protobuf/wire_format.h>
+// @@protoc_insertion_point(includes)
+
+namespace pb {
+
+namespace {
+
+const ::google::protobuf::Descriptor* Match_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  Match_reflection_ = NULL;
+const ::google::protobuf::Descriptor* Stats_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  Stats_reflection_ = NULL;
+const ::google::protobuf::Descriptor* Results_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  Results_reflection_ = NULL;
+
+}  // namespace
+
+
+void protobuf_AssignDesc_results_2eproto() {
+  protobuf_AddDesc_results_2eproto();
+  const ::google::protobuf::FileDescriptor* file =
+    ::google::protobuf::DescriptorPool::generated_pool()->FindFileByName(
+      "results.proto");
+  GOOGLE_CHECK(file != NULL);
+  Match_descriptor_ = file->message_type(0);
+  static const int Match_offsets_[2] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Match, xcorr_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Match, peptide_),
+  };
+  Match_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      Match_descriptor_,
+      Match::default_instance_,
+      Match_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Match, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Match, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(Match));
+  Stats_descriptor_ = file->message_type(1);
+  static const int Stats_offsets_[3] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Stats, count_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Stats, sum_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Stats, sum_squares_),
+  };
+  Stats_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      Stats_descriptor_,
+      Stats::default_instance_,
+      Stats_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Stats, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Stats, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(Stats));
+  Results_descriptor_ = file->message_type(2);
+  static const int Results_offsets_[5] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Results, spectrum_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Results, charge_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Results, matches_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Results, spectrum_index_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Results, stats_),
+  };
+  Results_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      Results_descriptor_,
+      Results::default_instance_,
+      Results_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Results, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Results, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(Results));
+}
+
+namespace {
+
+GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AssignDescriptors_once_);
+inline void protobuf_AssignDescriptorsOnce() {
+  ::google::protobuf::GoogleOnceInit(&protobuf_AssignDescriptors_once_,
+                 &protobuf_AssignDesc_results_2eproto);
+}
+
+void protobuf_RegisterTypes(const ::std::string&) {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    Match_descriptor_, &Match::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    Stats_descriptor_, &Stats::default_instance());
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    Results_descriptor_, &Results::default_instance());
+}
+
+}  // namespace
+
+void protobuf_ShutdownFile_results_2eproto() {
+  delete Match::default_instance_;
+  delete Match_reflection_;
+  delete Stats::default_instance_;
+  delete Stats_reflection_;
+  delete Results::default_instance_;
+  delete Results_reflection_;
+}
+
+void protobuf_AddDesc_results_2eproto() {
+  static bool already_here = false;
+  if (already_here) return;
+  already_here = true;
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  ::pb::protobuf_AddDesc_peptides_2eproto();
+  ::pb::protobuf_AddDesc_spectrum_2eproto();
+  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
+    "\n\rresults.proto\022\002pb\032\016peptides.proto\032\016spe"
+    "ctrum.proto\"4\n\005Match\022\r\n\005xcorr\030\001 \001(\001\022\034\n\007p"
+    "eptide\030\002 \001(\0132\013.pb.Peptide\"8\n\005Stats\022\r\n\005co"
+    "unt\030\001 \001(\005\022\013\n\003sum\030\002 \001(\001\022\023\n\013sum_squares\030\003 "
+    "\001(\001\"\207\001\n\007Results\022\036\n\010spectrum\030\001 \001(\0132\014.pb.S"
+    "pectrum\022\016\n\006charge\030\002 \001(\005\022\032\n\007matches\030\003 \003(\013"
+    "2\t.pb.Match\022\026\n\016spectrum_index\030\004 \001(\005\022\030\n\005s"
+    "tats\030\005 \001(\0132\t.pb.StatsB\002H\001", 305);
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
+    "results.proto", &protobuf_RegisterTypes);
+  Match::default_instance_ = new Match();
+  Stats::default_instance_ = new Stats();
+  Results::default_instance_ = new Results();
+  Match::default_instance_->InitAsDefaultInstance();
+  Stats::default_instance_->InitAsDefaultInstance();
+  Results::default_instance_->InitAsDefaultInstance();
+  ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_results_2eproto);
+}
+
+// Force AddDescriptors() to be called at static initialization time.
+struct StaticDescriptorInitializer_results_2eproto {
+  StaticDescriptorInitializer_results_2eproto() {
+    protobuf_AddDesc_results_2eproto();
+  }
+} static_descriptor_initializer_results_2eproto_;
+
+// ===================================================================
+
+#ifndef _MSC_VER
+const int Match::kXcorrFieldNumber;
+const int Match::kPeptideFieldNumber;
+#endif  // !_MSC_VER
+
+Match::Match()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void Match::InitAsDefaultInstance() {
+  peptide_ = const_cast< ::pb::Peptide*>(&::pb::Peptide::default_instance());
+}
+
+Match::Match(const Match& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void Match::SharedCtor() {
+  _cached_size_ = 0;
+  xcorr_ = 0;
+  peptide_ = NULL;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+Match::~Match() {
+  SharedDtor();
+}
+
+void Match::SharedDtor() {
+  if (this != default_instance_) {
+    delete peptide_;
+  }
+}
+
+void Match::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* Match::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return Match_descriptor_;
+}
+
+const Match& Match::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_results_2eproto();
+  return *default_instance_;
+}
+
+Match* Match::default_instance_ = NULL;
+
+Match* Match::New() const {
+  return new Match;
+}
+
+void Match::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    xcorr_ = 0;
+    if (has_peptide()) {
+      if (peptide_ != NULL) peptide_->::pb::Peptide::Clear();
+    }
+  }
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool Match::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // optional double xcorr = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_FIXED64) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
+                 input, &xcorr_)));
+          set_has_xcorr();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(18)) goto parse_peptide;
+        break;
+      }
+
+      // optional .pb.Peptide peptide = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_peptide:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+               input, mutable_peptide()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void Match::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // optional double xcorr = 1;
+  if (has_xcorr()) {
+    ::google::protobuf::internal::WireFormatLite::WriteDouble(1, this->xcorr(), output);
+  }
+
+  // optional .pb.Peptide peptide = 2;
+  if (has_peptide()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      2, this->peptide(), output);
+  }
+
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* Match::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // optional double xcorr = 1;
+  if (has_xcorr()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(1, this->xcorr(), target);
+  }
+
+  // optional .pb.Peptide peptide = 2;
+  if (has_peptide()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        2, this->peptide(), target);
+  }
+
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int Match::ByteSize() const {
+  int total_size = 0;
+
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // optional double xcorr = 1;
+    if (has_xcorr()) {
+      total_size += 1 + 8;
+    }
+
+    // optional .pb.Peptide peptide = 2;
+    if (has_peptide()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+          this->peptide());
+    }
+
+  }
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void Match::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const Match* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const Match*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void Match::MergeFrom(const Match& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_xcorr()) {
+      set_xcorr(from.xcorr());
+    }
+    if (from.has_peptide()) {
+      mutable_peptide()->::pb::Peptide::MergeFrom(from.peptide());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void Match::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void Match::CopyFrom(const Match& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool Match::IsInitialized() const {
+
+  return true;
+}
+
+void Match::Swap(Match* other) {
+  if (other != this) {
+    std::swap(xcorr_, other->xcorr_);
+    std::swap(peptide_, other->peptide_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata Match::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = Match_descriptor_;
+  metadata.reflection = Match_reflection_;
+  return metadata;
+}
+
+
+// ===================================================================
+
+#ifndef _MSC_VER
+const int Stats::kCountFieldNumber;
+const int Stats::kSumFieldNumber;
+const int Stats::kSumSquaresFieldNumber;
+#endif  // !_MSC_VER
+
+Stats::Stats()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void Stats::InitAsDefaultInstance() {
+}
+
+Stats::Stats(const Stats& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void Stats::SharedCtor() {
+  _cached_size_ = 0;
+  count_ = 0;
+  sum_ = 0;
+  sum_squares_ = 0;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+Stats::~Stats() {
+  SharedDtor();
+}
+
+void Stats::SharedDtor() {
+  if (this != default_instance_) {
+  }
+}
+
+void Stats::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* Stats::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return Stats_descriptor_;
+}
+
+const Stats& Stats::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_results_2eproto();
+  return *default_instance_;
+}
+
+Stats* Stats::default_instance_ = NULL;
+
+Stats* Stats::New() const {
+  return new Stats;
+}
+
+void Stats::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    count_ = 0;
+    sum_ = 0;
+    sum_squares_ = 0;
+  }
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool Stats::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // optional int32 count = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &count_)));
+          set_has_count();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(17)) goto parse_sum;
+        break;
+      }
+
+      // optional double sum = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_FIXED64) {
+         parse_sum:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
+                 input, &sum_)));
+          set_has_sum();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(25)) goto parse_sum_squares;
+        break;
+      }
+
+      // optional double sum_squares = 3;
+      case 3: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_FIXED64) {
+         parse_sum_squares:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
+                 input, &sum_squares_)));
+          set_has_sum_squares();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void Stats::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // optional int32 count = 1;
+  if (has_count()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->count(), output);
+  }
+
+  // optional double sum = 2;
+  if (has_sum()) {
+    ::google::protobuf::internal::WireFormatLite::WriteDouble(2, this->sum(), output);
+  }
+
+  // optional double sum_squares = 3;
+  if (has_sum_squares()) {
+    ::google::protobuf::internal::WireFormatLite::WriteDouble(3, this->sum_squares(), output);
+  }
+
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* Stats::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // optional int32 count = 1;
+  if (has_count()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->count(), target);
+  }
+
+  // optional double sum = 2;
+  if (has_sum()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(2, this->sum(), target);
+  }
+
+  // optional double sum_squares = 3;
+  if (has_sum_squares()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(3, this->sum_squares(), target);
+  }
+
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int Stats::ByteSize() const {
+  int total_size = 0;
+
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // optional int32 count = 1;
+    if (has_count()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->count());
+    }
+
+    // optional double sum = 2;
+    if (has_sum()) {
+      total_size += 1 + 8;
+    }
+
+    // optional double sum_squares = 3;
+    if (has_sum_squares()) {
+      total_size += 1 + 8;
+    }
+
+  }
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void Stats::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const Stats* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const Stats*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void Stats::MergeFrom(const Stats& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_count()) {
+      set_count(from.count());
+    }
+    if (from.has_sum()) {
+      set_sum(from.sum());
+    }
+    if (from.has_sum_squares()) {
+      set_sum_squares(from.sum_squares());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void Stats::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void Stats::CopyFrom(const Stats& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool Stats::IsInitialized() const {
+
+  return true;
+}
+
+void Stats::Swap(Stats* other) {
+  if (other != this) {
+    std::swap(count_, other->count_);
+    std::swap(sum_, other->sum_);
+    std::swap(sum_squares_, other->sum_squares_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata Stats::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = Stats_descriptor_;
+  metadata.reflection = Stats_reflection_;
+  return metadata;
+}
+
+
+// ===================================================================
+
+#ifndef _MSC_VER
+const int Results::kSpectrumFieldNumber;
+const int Results::kChargeFieldNumber;
+const int Results::kMatchesFieldNumber;
+const int Results::kSpectrumIndexFieldNumber;
+const int Results::kStatsFieldNumber;
+#endif  // !_MSC_VER
+
+Results::Results()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void Results::InitAsDefaultInstance() {
+  spectrum_ = const_cast< ::pb::Spectrum*>(&::pb::Spectrum::default_instance());
+  stats_ = const_cast< ::pb::Stats*>(&::pb::Stats::default_instance());
+}
+
+Results::Results(const Results& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void Results::SharedCtor() {
+  _cached_size_ = 0;
+  spectrum_ = NULL;
+  charge_ = 0;
+  spectrum_index_ = 0;
+  stats_ = NULL;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+Results::~Results() {
+  SharedDtor();
+}
+
+void Results::SharedDtor() {
+  if (this != default_instance_) {
+    delete spectrum_;
+    delete stats_;
+  }
+}
+
+void Results::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* Results::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return Results_descriptor_;
+}
+
+const Results& Results::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_results_2eproto();
+  return *default_instance_;
+}
+
+Results* Results::default_instance_ = NULL;
+
+Results* Results::New() const {
+  return new Results;
+}
+
+void Results::Clear() {
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (has_spectrum()) {
+      if (spectrum_ != NULL) spectrum_->::pb::Spectrum::Clear();
+    }
+    charge_ = 0;
+    spectrum_index_ = 0;
+    if (has_stats()) {
+      if (stats_ != NULL) stats_->::pb::Stats::Clear();
+    }
+  }
+  matches_.Clear();
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool Results::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // optional .pb.Spectrum spectrum = 1;
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+               input, mutable_spectrum()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(16)) goto parse_charge;
+        break;
+      }
+
+      // optional int32 charge = 2;
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_charge:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &charge_)));
+          set_has_charge();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(26)) goto parse_matches;
+        break;
+      }
+
+      // repeated .pb.Match matches = 3;
+      case 3: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_matches:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+                input, add_matches()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(26)) goto parse_matches;
+        if (input->ExpectTag(32)) goto parse_spectrum_index;
+        break;
+      }
+
+      // optional int32 spectrum_index = 4;
+      case 4: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_spectrum_index:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &spectrum_index_)));
+          set_has_spectrum_index();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(42)) goto parse_stats;
+        break;
+      }
+
+      // optional .pb.Stats stats = 5;
+      case 5: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_stats:
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
+               input, mutable_stats()));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void Results::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // optional .pb.Spectrum spectrum = 1;
+  if (has_spectrum()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      1, this->spectrum(), output);
+  }
+
+  // optional int32 charge = 2;
+  if (has_charge()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->charge(), output);
+  }
+
+  // repeated .pb.Match matches = 3;
+  for (int i = 0; i < this->matches_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      3, this->matches(i), output);
+  }
+
+  // optional int32 spectrum_index = 4;
+  if (has_spectrum_index()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(4, this->spectrum_index(), output);
+  }
+
+  // optional .pb.Stats stats = 5;
+  if (has_stats()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      5, this->stats(), output);
+  }
+
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* Results::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // optional .pb.Spectrum spectrum = 1;
+  if (has_spectrum()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        1, this->spectrum(), target);
+  }
+
+  // optional int32 charge = 2;
+  if (has_charge()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(2, this->charge(), target);
+  }
+
+  // repeated .pb.Match matches = 3;
+  for (int i = 0; i < this->matches_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        3, this->matches(i), target);
+  }
+
+  // optional int32 spectrum_index = 4;
+  if (has_spectrum_index()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(4, this->spectrum_index(), target);
+  }
+
+  // optional .pb.Stats stats = 5;
+  if (has_stats()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteMessageNoVirtualToArray(
+        5, this->stats(), target);
+  }
+
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int Results::ByteSize() const {
+  int total_size = 0;
+
+  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    // optional .pb.Spectrum spectrum = 1;
+    if (has_spectrum()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+          this->spectrum());
+    }
+
+    // optional int32 charge = 2;
+    if (has_charge()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->charge());
+    }
+
+    // optional int32 spectrum_index = 4;
+    if (has_spectrum_index()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->spectrum_index());
+    }
+
+    // optional .pb.Stats stats = 5;
+    if (has_stats()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+          this->stats());
+    }
+
+  }
+  // repeated .pb.Match matches = 3;
+  total_size += 1 * this->matches_size();
+  for (int i = 0; i < this->matches_size(); i++) {
+    total_size +=
+      ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
+        this->matches(i));
+  }
+
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void Results::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const Results* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const Results*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void Results::MergeFrom(const Results& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  matches_.MergeFrom(from.matches_);
+  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
+    if (from.has_spectrum()) {
+      mutable_spectrum()->::pb::Spectrum::MergeFrom(from.spectrum());
+    }
+    if (from.has_charge()) {
+      set_charge(from.charge());
+    }
+    if (from.has_spectrum_index()) {
+      set_spectrum_index(from.spectrum_index());
+    }
+    if (from.has_stats()) {
+      mutable_stats()->::pb::Stats::MergeFrom(from.stats());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void Results::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void Results::CopyFrom(const Results& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool Results::IsInitialized() const {
+
+  return true;
+}
+
+void Results::Swap(Results* other) {
+  if (other != this) {
+    std::swap(spectrum_, other->spectrum_);
+    std::swap(charge_, other->charge_);
+    matches_.Swap(&other->matches_);
+    std::swap(spectrum_index_, other->spectrum_index_);
+    std::swap(stats_, other->stats_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata Results::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = Results_descriptor_;
+  metadata.reflection = Results_reflection_;
+  return metadata;
+}
+
+
+// @@protoc_insertion_point(namespace_scope)
+
+}  // namespace pb
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/app/tide/protoobj/results.pb.h b/src/app/tide/protoobj/results.pb.h
new file mode 100644
index 0000000..f12d368
--- /dev/null
+++ b/src/app/tide/protoobj/results.pb.h
@@ -0,0 +1,669 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: results.proto
+
+#ifndef PROTOBUF_results_2eproto__INCLUDED
+#define PROTOBUF_results_2eproto__INCLUDED
+
+#include <string>
+
+#include <google/protobuf/stubs/common.h>
+
+#if GOOGLE_PROTOBUF_VERSION < 2005000
+#error This file was generated by a newer version of protoc which is
+#error incompatible with your Protocol Buffer headers.  Please update
+#error your headers.
+#endif
+#if 2005000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
+#error This file was generated by an older version of protoc which is
+#error incompatible with your Protocol Buffer headers.  Please
+#error regenerate this file with a newer version of protoc.
+#endif
+
+#include <google/protobuf/generated_message_util.h>
+#include <google/protobuf/message.h>
+#include <google/protobuf/repeated_field.h>
+#include <google/protobuf/extension_set.h>
+#include <google/protobuf/unknown_field_set.h>
+#include "peptides.pb.h"
+#include "spectrum.pb.h"
+// @@protoc_insertion_point(includes)
+
+namespace pb {
+
+// Internal implementation detail -- do not call these.
+void  protobuf_AddDesc_results_2eproto();
+void protobuf_AssignDesc_results_2eproto();
+void protobuf_ShutdownFile_results_2eproto();
+
+class Match;
+class Stats;
+class Results;
+
+// ===================================================================
+
+class Match : public ::google::protobuf::Message {
+ public:
+  Match();
+  virtual ~Match();
+
+  Match(const Match& from);
+
+  inline Match& operator=(const Match& from) {
+    CopyFrom(from);
+    return *this;
+  }
+
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const Match& default_instance();
+
+  void Swap(Match* other);
+
+  // implements Message ----------------------------------------------
+
+  Match* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const Match& from);
+  void MergeFrom(const Match& from);
+  void Clear();
+  bool IsInitialized() const;
+
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // optional double xcorr = 1;
+  inline bool has_xcorr() const;
+  inline void clear_xcorr();
+  static const int kXcorrFieldNumber = 1;
+  inline double xcorr() const;
+  inline void set_xcorr(double value);
+
+  // optional .pb.Peptide peptide = 2;
+  inline bool has_peptide() const;
+  inline void clear_peptide();
+  static const int kPeptideFieldNumber = 2;
+  inline const ::pb::Peptide& peptide() const;
+  inline ::pb::Peptide* mutable_peptide();
+  inline ::pb::Peptide* release_peptide();
+  inline void set_allocated_peptide(::pb::Peptide* peptide);
+
+  // @@protoc_insertion_point(class_scope:pb.Match)
+ private:
+  inline void set_has_xcorr();
+  inline void clear_has_xcorr();
+  inline void set_has_peptide();
+  inline void clear_has_peptide();
+
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+
+  double xcorr_;
+  ::pb::Peptide* peptide_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(2 + 31) / 32];
+
+  friend void  protobuf_AddDesc_results_2eproto();
+  friend void protobuf_AssignDesc_results_2eproto();
+  friend void protobuf_ShutdownFile_results_2eproto();
+
+  void InitAsDefaultInstance();
+  static Match* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class Stats : public ::google::protobuf::Message {
+ public:
+  Stats();
+  virtual ~Stats();
+
+  Stats(const Stats& from);
+
+  inline Stats& operator=(const Stats& from) {
+    CopyFrom(from);
+    return *this;
+  }
+
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const Stats& default_instance();
+
+  void Swap(Stats* other);
+
+  // implements Message ----------------------------------------------
+
+  Stats* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const Stats& from);
+  void MergeFrom(const Stats& from);
+  void Clear();
+  bool IsInitialized() const;
+
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // optional int32 count = 1;
+  inline bool has_count() const;
+  inline void clear_count();
+  static const int kCountFieldNumber = 1;
+  inline ::google::protobuf::int32 count() const;
+  inline void set_count(::google::protobuf::int32 value);
+
+  // optional double sum = 2;
+  inline bool has_sum() const;
+  inline void clear_sum();
+  static const int kSumFieldNumber = 2;
+  inline double sum() const;
+  inline void set_sum(double value);
+
+  // optional double sum_squares = 3;
+  inline bool has_sum_squares() const;
+  inline void clear_sum_squares();
+  static const int kSumSquaresFieldNumber = 3;
+  inline double sum_squares() const;
+  inline void set_sum_squares(double value);
+
+  // @@protoc_insertion_point(class_scope:pb.Stats)
+ private:
+  inline void set_has_count();
+  inline void clear_has_count();
+  inline void set_has_sum();
+  inline void clear_has_sum();
+  inline void set_has_sum_squares();
+  inline void clear_has_sum_squares();
+
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+
+  double sum_;
+  double sum_squares_;
+  ::google::protobuf::int32 count_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(3 + 31) / 32];
+
+  friend void  protobuf_AddDesc_results_2eproto();
+  friend void protobuf_AssignDesc_results_2eproto();
+  friend void protobuf_ShutdownFile_results_2eproto();
+
+  void InitAsDefaultInstance();
+  static Stats* default_instance_;
+};
+// -------------------------------------------------------------------
+
+class Results : public ::google::protobuf::Message {
+ public:
+  Results();
+  virtual ~Results();
+
+  Results(const Results& from);
+
+  inline Results& operator=(const Results& from) {
+    CopyFrom(from);
+    return *this;
+  }
+
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const Results& default_instance();
+
+  void Swap(Results* other);
+
+  // implements Message ----------------------------------------------
+
+  Results* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const Results& from);
+  void MergeFrom(const Results& from);
+  void Clear();
+  bool IsInitialized() const;
+
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // optional .pb.Spectrum spectrum = 1;
+  inline bool has_spectrum() const;
+  inline void clear_spectrum();
+  static const int kSpectrumFieldNumber = 1;
+  inline const ::pb::Spectrum& spectrum() const;
+  inline ::pb::Spectrum* mutable_spectrum();
+  inline ::pb::Spectrum* release_spectrum();
+  inline void set_allocated_spectrum(::pb::Spectrum* spectrum);
+
+  // optional int32 charge = 2;
+  inline bool has_charge() const;
+  inline void clear_charge();
+  static const int kChargeFieldNumber = 2;
+  inline ::google::protobuf::int32 charge() const;
+  inline void set_charge(::google::protobuf::int32 value);
+
+  // repeated .pb.Match matches = 3;
+  inline int matches_size() const;
+  inline void clear_matches();
+  static const int kMatchesFieldNumber = 3;
+  inline const ::pb::Match& matches(int index) const;
+  inline ::pb::Match* mutable_matches(int index);
+  inline ::pb::Match* add_matches();
+  inline const ::google::protobuf::RepeatedPtrField< ::pb::Match >&
+      matches() const;
+  inline ::google::protobuf::RepeatedPtrField< ::pb::Match >*
+      mutable_matches();
+
+  // optional int32 spectrum_index = 4;
+  inline bool has_spectrum_index() const;
+  inline void clear_spectrum_index();
+  static const int kSpectrumIndexFieldNumber = 4;
+  inline ::google::protobuf::int32 spectrum_index() const;
+  inline void set_spectrum_index(::google::protobuf::int32 value);
+
+  // optional .pb.Stats stats = 5;
+  inline bool has_stats() const;
+  inline void clear_stats();
+  static const int kStatsFieldNumber = 5;
+  inline const ::pb::Stats& stats() const;
+  inline ::pb::Stats* mutable_stats();
+  inline ::pb::Stats* release_stats();
+  inline void set_allocated_stats(::pb::Stats* stats);
+
+  // @@protoc_insertion_point(class_scope:pb.Results)
+ private:
+  inline void set_has_spectrum();
+  inline void clear_has_spectrum();
+  inline void set_has_charge();
+  inline void clear_has_charge();
+  inline void set_has_spectrum_index();
+  inline void clear_has_spectrum_index();
+  inline void set_has_stats();
+  inline void clear_has_stats();
+
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+
+  ::pb::Spectrum* spectrum_;
+  ::google::protobuf::RepeatedPtrField< ::pb::Match > matches_;
+  ::google::protobuf::int32 charge_;
+  ::google::protobuf::int32 spectrum_index_;
+  ::pb::Stats* stats_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(5 + 31) / 32];
+
+  friend void  protobuf_AddDesc_results_2eproto();
+  friend void protobuf_AssignDesc_results_2eproto();
+  friend void protobuf_ShutdownFile_results_2eproto();
+
+  void InitAsDefaultInstance();
+  static Results* default_instance_;
+};
+// ===================================================================
+
+
+// ===================================================================
+
+// Match
+
+// optional double xcorr = 1;
+inline bool Match::has_xcorr() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void Match::set_has_xcorr() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void Match::clear_has_xcorr() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void Match::clear_xcorr() {
+  xcorr_ = 0;
+  clear_has_xcorr();
+}
+inline double Match::xcorr() const {
+  return xcorr_;
+}
+inline void Match::set_xcorr(double value) {
+  set_has_xcorr();
+  xcorr_ = value;
+}
+
+// optional .pb.Peptide peptide = 2;
+inline bool Match::has_peptide() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void Match::set_has_peptide() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void Match::clear_has_peptide() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void Match::clear_peptide() {
+  if (peptide_ != NULL) peptide_->::pb::Peptide::Clear();
+  clear_has_peptide();
+}
+inline const ::pb::Peptide& Match::peptide() const {
+  return peptide_ != NULL ? *peptide_ : *default_instance_->peptide_;
+}
+inline ::pb::Peptide* Match::mutable_peptide() {
+  set_has_peptide();
+  if (peptide_ == NULL) peptide_ = new ::pb::Peptide;
+  return peptide_;
+}
+inline ::pb::Peptide* Match::release_peptide() {
+  clear_has_peptide();
+  ::pb::Peptide* temp = peptide_;
+  peptide_ = NULL;
+  return temp;
+}
+inline void Match::set_allocated_peptide(::pb::Peptide* peptide) {
+  delete peptide_;
+  peptide_ = peptide;
+  if (peptide) {
+    set_has_peptide();
+  } else {
+    clear_has_peptide();
+  }
+}
+
+// -------------------------------------------------------------------
+
+// Stats
+
+// optional int32 count = 1;
+inline bool Stats::has_count() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void Stats::set_has_count() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void Stats::clear_has_count() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void Stats::clear_count() {
+  count_ = 0;
+  clear_has_count();
+}
+inline ::google::protobuf::int32 Stats::count() const {
+  return count_;
+}
+inline void Stats::set_count(::google::protobuf::int32 value) {
+  set_has_count();
+  count_ = value;
+}
+
+// optional double sum = 2;
+inline bool Stats::has_sum() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void Stats::set_has_sum() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void Stats::clear_has_sum() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void Stats::clear_sum() {
+  sum_ = 0;
+  clear_has_sum();
+}
+inline double Stats::sum() const {
+  return sum_;
+}
+inline void Stats::set_sum(double value) {
+  set_has_sum();
+  sum_ = value;
+}
+
+// optional double sum_squares = 3;
+inline bool Stats::has_sum_squares() const {
+  return (_has_bits_[0] & 0x00000004u) != 0;
+}
+inline void Stats::set_has_sum_squares() {
+  _has_bits_[0] |= 0x00000004u;
+}
+inline void Stats::clear_has_sum_squares() {
+  _has_bits_[0] &= ~0x00000004u;
+}
+inline void Stats::clear_sum_squares() {
+  sum_squares_ = 0;
+  clear_has_sum_squares();
+}
+inline double Stats::sum_squares() const {
+  return sum_squares_;
+}
+inline void Stats::set_sum_squares(double value) {
+  set_has_sum_squares();
+  sum_squares_ = value;
+}
+
+// -------------------------------------------------------------------
+
+// Results
+
+// optional .pb.Spectrum spectrum = 1;
+inline bool Results::has_spectrum() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void Results::set_has_spectrum() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void Results::clear_has_spectrum() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void Results::clear_spectrum() {
+  if (spectrum_ != NULL) spectrum_->::pb::Spectrum::Clear();
+  clear_has_spectrum();
+}
+inline const ::pb::Spectrum& Results::spectrum() const {
+  return spectrum_ != NULL ? *spectrum_ : *default_instance_->spectrum_;
+}
+inline ::pb::Spectrum* Results::mutable_spectrum() {
+  set_has_spectrum();
+  if (spectrum_ == NULL) spectrum_ = new ::pb::Spectrum;
+  return spectrum_;
+}
+inline ::pb::Spectrum* Results::release_spectrum() {
+  clear_has_spectrum();
+  ::pb::Spectrum* temp = spectrum_;
+  spectrum_ = NULL;
+  return temp;
+}
+inline void Results::set_allocated_spectrum(::pb::Spectrum* spectrum) {
+  delete spectrum_;
+  spectrum_ = spectrum;
+  if (spectrum) {
+    set_has_spectrum();
+  } else {
+    clear_has_spectrum();
+  }
+}
+
+// optional int32 charge = 2;
+inline bool Results::has_charge() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void Results::set_has_charge() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void Results::clear_has_charge() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void Results::clear_charge() {
+  charge_ = 0;
+  clear_has_charge();
+}
+inline ::google::protobuf::int32 Results::charge() const {
+  return charge_;
+}
+inline void Results::set_charge(::google::protobuf::int32 value) {
+  set_has_charge();
+  charge_ = value;
+}
+
+// repeated .pb.Match matches = 3;
+inline int Results::matches_size() const {
+  return matches_.size();
+}
+inline void Results::clear_matches() {
+  matches_.Clear();
+}
+inline const ::pb::Match& Results::matches(int index) const {
+  return matches_.Get(index);
+}
+inline ::pb::Match* Results::mutable_matches(int index) {
+  return matches_.Mutable(index);
+}
+inline ::pb::Match* Results::add_matches() {
+  return matches_.Add();
+}
+inline const ::google::protobuf::RepeatedPtrField< ::pb::Match >&
+Results::matches() const {
+  return matches_;
+}
+inline ::google::protobuf::RepeatedPtrField< ::pb::Match >*
+Results::mutable_matches() {
+  return &matches_;
+}
+
+// optional int32 spectrum_index = 4;
+inline bool Results::has_spectrum_index() const {
+  return (_has_bits_[0] & 0x00000008u) != 0;
+}
+inline void Results::set_has_spectrum_index() {
+  _has_bits_[0] |= 0x00000008u;
+}
+inline void Results::clear_has_spectrum_index() {
+  _has_bits_[0] &= ~0x00000008u;
+}
+inline void Results::clear_spectrum_index() {
+  spectrum_index_ = 0;
+  clear_has_spectrum_index();
+}
+inline ::google::protobuf::int32 Results::spectrum_index() const {
+  return spectrum_index_;
+}
+inline void Results::set_spectrum_index(::google::protobuf::int32 value) {
+  set_has_spectrum_index();
+  spectrum_index_ = value;
+}
+
+// optional .pb.Stats stats = 5;
+inline bool Results::has_stats() const {
+  return (_has_bits_[0] & 0x00000010u) != 0;
+}
+inline void Results::set_has_stats() {
+  _has_bits_[0] |= 0x00000010u;
+}
+inline void Results::clear_has_stats() {
+  _has_bits_[0] &= ~0x00000010u;
+}
+inline void Results::clear_stats() {
+  if (stats_ != NULL) stats_->::pb::Stats::Clear();
+  clear_has_stats();
+}
+inline const ::pb::Stats& Results::stats() const {
+  return stats_ != NULL ? *stats_ : *default_instance_->stats_;
+}
+inline ::pb::Stats* Results::mutable_stats() {
+  set_has_stats();
+  if (stats_ == NULL) stats_ = new ::pb::Stats;
+  return stats_;
+}
+inline ::pb::Stats* Results::release_stats() {
+  clear_has_stats();
+  ::pb::Stats* temp = stats_;
+  stats_ = NULL;
+  return temp;
+}
+inline void Results::set_allocated_stats(::pb::Stats* stats) {
+  delete stats_;
+  stats_ = stats;
+  if (stats) {
+    set_has_stats();
+  } else {
+    clear_has_stats();
+  }
+}
+
+
+// @@protoc_insertion_point(namespace_scope)
+
+}  // namespace pb
+
+#ifndef SWIG
+namespace google {
+namespace protobuf {
+
+
+}  // namespace google
+}  // namespace protobuf
+#endif  // SWIG
+
+// @@protoc_insertion_point(global_scope)
+
+#endif  // PROTOBUF_results_2eproto__INCLUDED
diff --git a/src/app/tide/protoobj/results_pb2.py b/src/app/tide/protoobj/results_pb2.py
new file mode 100644
index 0000000..60f4ecb
--- /dev/null
+++ b/src/app/tide/protoobj/results_pb2.py
@@ -0,0 +1,184 @@
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: results.proto
+
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+
+import peptides_pb2
+import spectrum_pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  name='results.proto',
+  package='pb',
+  serialized_pb='\n\rresults.proto\x12\x02pb\x1a\x0epeptides.proto\x1a\x0espectrum.proto\"4\n\x05Match\x12\r\n\x05xcorr\x18\x01 \x01(\x01\x12\x1c\n\x07peptide\x18\x02 \x01(\x0b\x32\x0b.pb.Peptide\"8\n\x05Stats\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\x12\x0b\n\x03sum\x18\x02 \x01(\x01\x12\x13\n\x0bsum_squares\x18\x03 \x01(\x01\"\x87\x01\n\x07Results\x12\x1e\n\x08spectrum\x18\x01 \x01(\x0b\x32\x0c.pb.Spectrum\x12\x0e\n\x06\x63harge\x18\x02 \x01(\x05\x12\x1a\n\x07matches\x18\x03 \x03(\x0b\x32 [...]
+
+
+
+
+_MATCH = _descriptor.Descriptor(
+  name='Match',
+  full_name='pb.Match',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='xcorr', full_name='pb.Match.xcorr', index=0,
+      number=1, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='peptide', full_name='pb.Match.peptide', index=1,
+      number=2, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=53,
+  serialized_end=105,
+)
+
+
+_STATS = _descriptor.Descriptor(
+  name='Stats',
+  full_name='pb.Stats',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='count', full_name='pb.Stats.count', index=0,
+      number=1, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='sum', full_name='pb.Stats.sum', index=1,
+      number=2, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='sum_squares', full_name='pb.Stats.sum_squares', index=2,
+      number=3, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=107,
+  serialized_end=163,
+)
+
+
+_RESULTS = _descriptor.Descriptor(
+  name='Results',
+  full_name='pb.Results',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='spectrum', full_name='pb.Results.spectrum', index=0,
+      number=1, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='charge', full_name='pb.Results.charge', index=1,
+      number=2, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='matches', full_name='pb.Results.matches', index=2,
+      number=3, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='spectrum_index', full_name='pb.Results.spectrum_index', index=3,
+      number=4, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='stats', full_name='pb.Results.stats', index=4,
+      number=5, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=166,
+  serialized_end=301,
+)
+
+_MATCH.fields_by_name['peptide'].message_type = peptides_pb2._PEPTIDE
+_RESULTS.fields_by_name['spectrum'].message_type = spectrum_pb2._SPECTRUM
+_RESULTS.fields_by_name['matches'].message_type = _MATCH
+_RESULTS.fields_by_name['stats'].message_type = _STATS
+DESCRIPTOR.message_types_by_name['Match'] = _MATCH
+DESCRIPTOR.message_types_by_name['Stats'] = _STATS
+DESCRIPTOR.message_types_by_name['Results'] = _RESULTS
+
+class Match(_message.Message):
+  __metaclass__ = _reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _MATCH
+
+  # @@protoc_insertion_point(class_scope:pb.Match)
+
+class Stats(_message.Message):
+  __metaclass__ = _reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _STATS
+
+  # @@protoc_insertion_point(class_scope:pb.Stats)
+
+class Results(_message.Message):
+  __metaclass__ = _reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _RESULTS
+
+  # @@protoc_insertion_point(class_scope:pb.Results)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), 'H\001')
+# @@protoc_insertion_point(module_scope)
diff --git a/src/app/tide/protoobj/spectrum.pb.cc b/src/app/tide/protoobj/spectrum.pb.cc
new file mode 100644
index 0000000..751948a
--- /dev/null
+++ b/src/app/tide/protoobj/spectrum.pb.cc
@@ -0,0 +1,675 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: spectrum.proto
+
+#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
+#include "spectrum.pb.h"
+
+#include <algorithm>
+
+#include <google/protobuf/stubs/common.h>
+#include <google/protobuf/stubs/once.h>
+#include <google/protobuf/io/coded_stream.h>
+#include <google/protobuf/wire_format_lite_inl.h>
+#include <google/protobuf/descriptor.h>
+#include <google/protobuf/generated_message_reflection.h>
+#include <google/protobuf/reflection_ops.h>
+#include <google/protobuf/wire_format.h>
+// @@protoc_insertion_point(includes)
+
+namespace pb {
+
+namespace {
+
+const ::google::protobuf::Descriptor* Spectrum_descriptor_ = NULL;
+const ::google::protobuf::internal::GeneratedMessageReflection*
+  Spectrum_reflection_ = NULL;
+
+}  // namespace
+
+
+void protobuf_AssignDesc_spectrum_2eproto() {
+  protobuf_AddDesc_spectrum_2eproto();
+  const ::google::protobuf::FileDescriptor* file =
+    ::google::protobuf::DescriptorPool::generated_pool()->FindFileByName(
+      "spectrum.proto");
+  GOOGLE_CHECK(file != NULL);
+  Spectrum_descriptor_ = file->message_type(0);
+  static const int Spectrum_offsets_[8] = {
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Spectrum, peak_m_z_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Spectrum, peak_intensity_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Spectrum, peak_m_z_denominator_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Spectrum, peak_intensity_denominator_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Spectrum, spectrum_number_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Spectrum, precursor_m_z_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Spectrum, rtime_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Spectrum, charge_state_),
+  };
+  Spectrum_reflection_ =
+    new ::google::protobuf::internal::GeneratedMessageReflection(
+      Spectrum_descriptor_,
+      Spectrum::default_instance_,
+      Spectrum_offsets_,
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Spectrum, _has_bits_[0]),
+      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Spectrum, _unknown_fields_),
+      -1,
+      ::google::protobuf::DescriptorPool::generated_pool(),
+      ::google::protobuf::MessageFactory::generated_factory(),
+      sizeof(Spectrum));
+}
+
+namespace {
+
+GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AssignDescriptors_once_);
+inline void protobuf_AssignDescriptorsOnce() {
+  ::google::protobuf::GoogleOnceInit(&protobuf_AssignDescriptors_once_,
+                 &protobuf_AssignDesc_spectrum_2eproto);
+}
+
+void protobuf_RegisterTypes(const ::std::string&) {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
+    Spectrum_descriptor_, &Spectrum::default_instance());
+}
+
+}  // namespace
+
+void protobuf_ShutdownFile_spectrum_2eproto() {
+  delete Spectrum::default_instance_;
+  delete Spectrum_reflection_;
+}
+
+void protobuf_AddDesc_spectrum_2eproto() {
+  static bool already_here = false;
+  if (already_here) return;
+  already_here = true;
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
+    "\n\016spectrum.proto\022\002pb\"\327\001\n\010Spectrum\022\024\n\010pea"
+    "k_m_z\030\001 \003(\003B\002\020\001\022\032\n\016peak_intensity\030\002 \003(\003B"
+    "\002\020\001\022\034\n\024peak_m_z_denominator\030\003 \001(\005\022\"\n\032pea"
+    "k_intensity_denominator\030\004 \001(\005\022\027\n\017spectru"
+    "m_number\030\005 \001(\005\022\025\n\rprecursor_m_z\030\006 \001(\001\022\r\n"
+    "\005rtime\030\010 \001(\001\022\030\n\014charge_state\030\007 \003(\005B\002\020\001B\002"
+    "H\001", 242);
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
+    "spectrum.proto", &protobuf_RegisterTypes);
+  Spectrum::default_instance_ = new Spectrum();
+  Spectrum::default_instance_->InitAsDefaultInstance();
+  ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_spectrum_2eproto);
+}
+
+// Force AddDescriptors() to be called at static initialization time.
+struct StaticDescriptorInitializer_spectrum_2eproto {
+  StaticDescriptorInitializer_spectrum_2eproto() {
+    protobuf_AddDesc_spectrum_2eproto();
+  }
+} static_descriptor_initializer_spectrum_2eproto_;
+
+// ===================================================================
+
+#ifndef _MSC_VER
+const int Spectrum::kPeakMZFieldNumber;
+const int Spectrum::kPeakIntensityFieldNumber;
+const int Spectrum::kPeakMZDenominatorFieldNumber;
+const int Spectrum::kPeakIntensityDenominatorFieldNumber;
+const int Spectrum::kSpectrumNumberFieldNumber;
+const int Spectrum::kPrecursorMZFieldNumber;
+const int Spectrum::kRtimeFieldNumber;
+const int Spectrum::kChargeStateFieldNumber;
+#endif  // !_MSC_VER
+
+Spectrum::Spectrum()
+  : ::google::protobuf::Message() {
+  SharedCtor();
+}
+
+void Spectrum::InitAsDefaultInstance() {
+}
+
+Spectrum::Spectrum(const Spectrum& from)
+  : ::google::protobuf::Message() {
+  SharedCtor();
+  MergeFrom(from);
+}
+
+void Spectrum::SharedCtor() {
+  _cached_size_ = 0;
+  peak_m_z_denominator_ = 0;
+  peak_intensity_denominator_ = 0;
+  spectrum_number_ = 0;
+  precursor_m_z_ = 0;
+  rtime_ = 0;
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+}
+
+Spectrum::~Spectrum() {
+  SharedDtor();
+}
+
+void Spectrum::SharedDtor() {
+  if (this != default_instance_) {
+  }
+}
+
+void Spectrum::SetCachedSize(int size) const {
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+}
+const ::google::protobuf::Descriptor* Spectrum::descriptor() {
+  protobuf_AssignDescriptorsOnce();
+  return Spectrum_descriptor_;
+}
+
+const Spectrum& Spectrum::default_instance() {
+  if (default_instance_ == NULL) protobuf_AddDesc_spectrum_2eproto();
+  return *default_instance_;
+}
+
+Spectrum* Spectrum::default_instance_ = NULL;
+
+Spectrum* Spectrum::New() const {
+  return new Spectrum;
+}
+
+void Spectrum::Clear() {
+  if (_has_bits_[2 / 32] & (0xffu << (2 % 32))) {
+    peak_m_z_denominator_ = 0;
+    peak_intensity_denominator_ = 0;
+    spectrum_number_ = 0;
+    precursor_m_z_ = 0;
+    rtime_ = 0;
+  }
+  peak_m_z_.Clear();
+  peak_intensity_.Clear();
+  charge_state_.Clear();
+  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  mutable_unknown_fields()->Clear();
+}
+
+bool Spectrum::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
+  ::google::protobuf::uint32 tag;
+  while ((tag = input->ReadTag()) != 0) {
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // repeated int64 peak_m_z = 1 [packed = true];
+      case 1: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
+                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
+                 input, this->mutable_peak_m_z())));
+        } else if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag)
+                   == ::google::protobuf::internal::WireFormatLite::
+                      WIRETYPE_VARINT) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
+                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
+                 1, 10, input, this->mutable_peak_m_z())));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(18)) goto parse_peak_intensity;
+        break;
+      }
+
+      // repeated int64 peak_intensity = 2 [packed = true];
+      case 2: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_peak_intensity:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
+                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
+                 input, this->mutable_peak_intensity())));
+        } else if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag)
+                   == ::google::protobuf::internal::WireFormatLite::
+                      WIRETYPE_VARINT) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
+                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
+                 1, 18, input, this->mutable_peak_intensity())));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(24)) goto parse_peak_m_z_denominator;
+        break;
+      }
+
+      // optional int32 peak_m_z_denominator = 3;
+      case 3: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_peak_m_z_denominator:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &peak_m_z_denominator_)));
+          set_has_peak_m_z_denominator();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(32)) goto parse_peak_intensity_denominator;
+        break;
+      }
+
+      // optional int32 peak_intensity_denominator = 4;
+      case 4: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_peak_intensity_denominator:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &peak_intensity_denominator_)));
+          set_has_peak_intensity_denominator();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(40)) goto parse_spectrum_number;
+        break;
+      }
+
+      // optional int32 spectrum_number = 5;
+      case 5: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+         parse_spectrum_number:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &spectrum_number_)));
+          set_has_spectrum_number();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(49)) goto parse_precursor_m_z;
+        break;
+      }
+
+      // optional double precursor_m_z = 6;
+      case 6: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_FIXED64) {
+         parse_precursor_m_z:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
+                 input, &precursor_m_z_)));
+          set_has_precursor_m_z();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(58)) goto parse_charge_state;
+        break;
+      }
+
+      // repeated int32 charge_state = 7 [packed = true];
+      case 7: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
+         parse_charge_state:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, this->mutable_charge_state())));
+        } else if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag)
+                   == ::google::protobuf::internal::WireFormatLite::
+                      WIRETYPE_VARINT) {
+          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 1, 58, input, this->mutable_charge_state())));
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectTag(65)) goto parse_rtime;
+        break;
+      }
+
+      // optional double rtime = 8;
+      case 8: {
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_FIXED64) {
+         parse_rtime:
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
+                 input, &rtime_)));
+          set_has_rtime();
+        } else {
+          goto handle_uninterpreted;
+        }
+        if (input->ExpectAtEnd()) return true;
+        break;
+      }
+
+      default: {
+      handle_uninterpreted:
+        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
+          return true;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+  return true;
+#undef DO_
+}
+
+void Spectrum::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // repeated int64 peak_m_z = 1 [packed = true];
+  if (this->peak_m_z_size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::WriteTag(1, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
+    output->WriteVarint32(_peak_m_z_cached_byte_size_);
+  }
+  for (int i = 0; i < this->peak_m_z_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt64NoTag(
+      this->peak_m_z(i), output);
+  }
+
+  // repeated int64 peak_intensity = 2 [packed = true];
+  if (this->peak_intensity_size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::WriteTag(2, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
+    output->WriteVarint32(_peak_intensity_cached_byte_size_);
+  }
+  for (int i = 0; i < this->peak_intensity_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt64NoTag(
+      this->peak_intensity(i), output);
+  }
+
+  // optional int32 peak_m_z_denominator = 3;
+  if (has_peak_m_z_denominator()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(3, this->peak_m_z_denominator(), output);
+  }
+
+  // optional int32 peak_intensity_denominator = 4;
+  if (has_peak_intensity_denominator()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(4, this->peak_intensity_denominator(), output);
+  }
+
+  // optional int32 spectrum_number = 5;
+  if (has_spectrum_number()) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(5, this->spectrum_number(), output);
+  }
+
+  // optional double precursor_m_z = 6;
+  if (has_precursor_m_z()) {
+    ::google::protobuf::internal::WireFormatLite::WriteDouble(6, this->precursor_m_z(), output);
+  }
+
+  // repeated int32 charge_state = 7 [packed = true];
+  if (this->charge_state_size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::WriteTag(7, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
+    output->WriteVarint32(_charge_state_cached_byte_size_);
+  }
+  for (int i = 0; i < this->charge_state_size(); i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32NoTag(
+      this->charge_state(i), output);
+  }
+
+  // optional double rtime = 8;
+  if (has_rtime()) {
+    ::google::protobuf::internal::WireFormatLite::WriteDouble(8, this->rtime(), output);
+  }
+
+  if (!unknown_fields().empty()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        unknown_fields(), output);
+  }
+}
+
+::google::protobuf::uint8* Spectrum::SerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // repeated int64 peak_m_z = 1 [packed = true];
+  if (this->peak_m_z_size() > 0) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
+      1,
+      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
+      target);
+    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
+      _peak_m_z_cached_byte_size_, target);
+  }
+  for (int i = 0; i < this->peak_m_z_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteInt64NoTagToArray(this->peak_m_z(i), target);
+  }
+
+  // repeated int64 peak_intensity = 2 [packed = true];
+  if (this->peak_intensity_size() > 0) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
+      2,
+      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
+      target);
+    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
+      _peak_intensity_cached_byte_size_, target);
+  }
+  for (int i = 0; i < this->peak_intensity_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteInt64NoTagToArray(this->peak_intensity(i), target);
+  }
+
+  // optional int32 peak_m_z_denominator = 3;
+  if (has_peak_m_z_denominator()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(3, this->peak_m_z_denominator(), target);
+  }
+
+  // optional int32 peak_intensity_denominator = 4;
+  if (has_peak_intensity_denominator()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(4, this->peak_intensity_denominator(), target);
+  }
+
+  // optional int32 spectrum_number = 5;
+  if (has_spectrum_number()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(5, this->spectrum_number(), target);
+  }
+
+  // optional double precursor_m_z = 6;
+  if (has_precursor_m_z()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(6, this->precursor_m_z(), target);
+  }
+
+  // repeated int32 charge_state = 7 [packed = true];
+  if (this->charge_state_size() > 0) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
+      7,
+      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
+      target);
+    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
+      _charge_state_cached_byte_size_, target);
+  }
+  for (int i = 0; i < this->charge_state_size(); i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      WriteInt32NoTagToArray(this->charge_state(i), target);
+  }
+
+  // optional double rtime = 8;
+  if (has_rtime()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(8, this->rtime(), target);
+  }
+
+  if (!unknown_fields().empty()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        unknown_fields(), target);
+  }
+  return target;
+}
+
+int Spectrum::ByteSize() const {
+  int total_size = 0;
+
+  if (_has_bits_[2 / 32] & (0xffu << (2 % 32))) {
+    // optional int32 peak_m_z_denominator = 3;
+    if (has_peak_m_z_denominator()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->peak_m_z_denominator());
+    }
+
+    // optional int32 peak_intensity_denominator = 4;
+    if (has_peak_intensity_denominator()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->peak_intensity_denominator());
+    }
+
+    // optional int32 spectrum_number = 5;
+    if (has_spectrum_number()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->spectrum_number());
+    }
+
+    // optional double precursor_m_z = 6;
+    if (has_precursor_m_z()) {
+      total_size += 1 + 8;
+    }
+
+    // optional double rtime = 8;
+    if (has_rtime()) {
+      total_size += 1 + 8;
+    }
+
+  }
+  // repeated int64 peak_m_z = 1 [packed = true];
+  {
+    int data_size = 0;
+    for (int i = 0; i < this->peak_m_z_size(); i++) {
+      data_size += ::google::protobuf::internal::WireFormatLite::
+        Int64Size(this->peak_m_z(i));
+    }
+    if (data_size > 0) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(data_size);
+    }
+    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+    _peak_m_z_cached_byte_size_ = data_size;
+    GOOGLE_SAFE_CONCURRENT_WRITES_END();
+    total_size += data_size;
+  }
+
+  // repeated int64 peak_intensity = 2 [packed = true];
+  {
+    int data_size = 0;
+    for (int i = 0; i < this->peak_intensity_size(); i++) {
+      data_size += ::google::protobuf::internal::WireFormatLite::
+        Int64Size(this->peak_intensity(i));
+    }
+    if (data_size > 0) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(data_size);
+    }
+    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+    _peak_intensity_cached_byte_size_ = data_size;
+    GOOGLE_SAFE_CONCURRENT_WRITES_END();
+    total_size += data_size;
+  }
+
+  // repeated int32 charge_state = 7 [packed = true];
+  {
+    int data_size = 0;
+    for (int i = 0; i < this->charge_state_size(); i++) {
+      data_size += ::google::protobuf::internal::WireFormatLite::
+        Int32Size(this->charge_state(i));
+    }
+    if (data_size > 0) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(data_size);
+    }
+    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+    _charge_state_cached_byte_size_ = data_size;
+    GOOGLE_SAFE_CONCURRENT_WRITES_END();
+    total_size += data_size;
+  }
+
+  if (!unknown_fields().empty()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
+  _cached_size_ = total_size;
+  GOOGLE_SAFE_CONCURRENT_WRITES_END();
+  return total_size;
+}
+
+void Spectrum::MergeFrom(const ::google::protobuf::Message& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  const Spectrum* source =
+    ::google::protobuf::internal::dynamic_cast_if_available<const Spectrum*>(
+      &from);
+  if (source == NULL) {
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+    MergeFrom(*source);
+  }
+}
+
+void Spectrum::MergeFrom(const Spectrum& from) {
+  GOOGLE_CHECK_NE(&from, this);
+  peak_m_z_.MergeFrom(from.peak_m_z_);
+  peak_intensity_.MergeFrom(from.peak_intensity_);
+  charge_state_.MergeFrom(from.charge_state_);
+  if (from._has_bits_[2 / 32] & (0xffu << (2 % 32))) {
+    if (from.has_peak_m_z_denominator()) {
+      set_peak_m_z_denominator(from.peak_m_z_denominator());
+    }
+    if (from.has_peak_intensity_denominator()) {
+      set_peak_intensity_denominator(from.peak_intensity_denominator());
+    }
+    if (from.has_spectrum_number()) {
+      set_spectrum_number(from.spectrum_number());
+    }
+    if (from.has_precursor_m_z()) {
+      set_precursor_m_z(from.precursor_m_z());
+    }
+    if (from.has_rtime()) {
+      set_rtime(from.rtime());
+    }
+  }
+  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
+}
+
+void Spectrum::CopyFrom(const ::google::protobuf::Message& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void Spectrum::CopyFrom(const Spectrum& from) {
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool Spectrum::IsInitialized() const {
+
+  return true;
+}
+
+void Spectrum::Swap(Spectrum* other) {
+  if (other != this) {
+    peak_m_z_.Swap(&other->peak_m_z_);
+    peak_intensity_.Swap(&other->peak_intensity_);
+    std::swap(peak_m_z_denominator_, other->peak_m_z_denominator_);
+    std::swap(peak_intensity_denominator_, other->peak_intensity_denominator_);
+    std::swap(spectrum_number_, other->spectrum_number_);
+    std::swap(precursor_m_z_, other->precursor_m_z_);
+    std::swap(rtime_, other->rtime_);
+    charge_state_.Swap(&other->charge_state_);
+    std::swap(_has_bits_[0], other->_has_bits_[0]);
+    _unknown_fields_.Swap(&other->_unknown_fields_);
+    std::swap(_cached_size_, other->_cached_size_);
+  }
+}
+
+::google::protobuf::Metadata Spectrum::GetMetadata() const {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::Metadata metadata;
+  metadata.descriptor = Spectrum_descriptor_;
+  metadata.reflection = Spectrum_reflection_;
+  return metadata;
+}
+
+
+// @@protoc_insertion_point(namespace_scope)
+
+}  // namespace pb
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/app/tide/protoobj/spectrum.pb.h b/src/app/tide/protoobj/spectrum.pb.h
new file mode 100644
index 0000000..370a626
--- /dev/null
+++ b/src/app/tide/protoobj/spectrum.pb.h
@@ -0,0 +1,410 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: spectrum.proto
+
+#ifndef PROTOBUF_spectrum_2eproto__INCLUDED
+#define PROTOBUF_spectrum_2eproto__INCLUDED
+
+#include <string>
+
+#include <google/protobuf/stubs/common.h>
+
+#if GOOGLE_PROTOBUF_VERSION < 2005000
+#error This file was generated by a newer version of protoc which is
+#error incompatible with your Protocol Buffer headers.  Please update
+#error your headers.
+#endif
+#if 2005000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
+#error This file was generated by an older version of protoc which is
+#error incompatible with your Protocol Buffer headers.  Please
+#error regenerate this file with a newer version of protoc.
+#endif
+
+#include <google/protobuf/generated_message_util.h>
+#include <google/protobuf/message.h>
+#include <google/protobuf/repeated_field.h>
+#include <google/protobuf/extension_set.h>
+#include <google/protobuf/unknown_field_set.h>
+// @@protoc_insertion_point(includes)
+
+namespace pb {
+
+// Internal implementation detail -- do not call these.
+void  protobuf_AddDesc_spectrum_2eproto();
+void protobuf_AssignDesc_spectrum_2eproto();
+void protobuf_ShutdownFile_spectrum_2eproto();
+
+class Spectrum;
+
+// ===================================================================
+
+class Spectrum : public ::google::protobuf::Message {
+ public:
+  Spectrum();
+  virtual ~Spectrum();
+
+  Spectrum(const Spectrum& from);
+
+  inline Spectrum& operator=(const Spectrum& from) {
+    CopyFrom(from);
+    return *this;
+  }
+
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _unknown_fields_;
+  }
+
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return &_unknown_fields_;
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const Spectrum& default_instance();
+
+  void Swap(Spectrum* other);
+
+  // implements Message ----------------------------------------------
+
+  Spectrum* New() const;
+  void CopyFrom(const ::google::protobuf::Message& from);
+  void MergeFrom(const ::google::protobuf::Message& from);
+  void CopyFrom(const Spectrum& from);
+  void MergeFrom(const Spectrum& from);
+  void Clear();
+  bool IsInitialized() const;
+
+  int ByteSize() const;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input);
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const;
+  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
+  int GetCachedSize() const { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const;
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // repeated int64 peak_m_z = 1 [packed = true];
+  inline int peak_m_z_size() const;
+  inline void clear_peak_m_z();
+  static const int kPeakMZFieldNumber = 1;
+  inline ::google::protobuf::int64 peak_m_z(int index) const;
+  inline void set_peak_m_z(int index, ::google::protobuf::int64 value);
+  inline void add_peak_m_z(::google::protobuf::int64 value);
+  inline const ::google::protobuf::RepeatedField< ::google::protobuf::int64 >&
+      peak_m_z() const;
+  inline ::google::protobuf::RepeatedField< ::google::protobuf::int64 >*
+      mutable_peak_m_z();
+
+  // repeated int64 peak_intensity = 2 [packed = true];
+  inline int peak_intensity_size() const;
+  inline void clear_peak_intensity();
+  static const int kPeakIntensityFieldNumber = 2;
+  inline ::google::protobuf::int64 peak_intensity(int index) const;
+  inline void set_peak_intensity(int index, ::google::protobuf::int64 value);
+  inline void add_peak_intensity(::google::protobuf::int64 value);
+  inline const ::google::protobuf::RepeatedField< ::google::protobuf::int64 >&
+      peak_intensity() const;
+  inline ::google::protobuf::RepeatedField< ::google::protobuf::int64 >*
+      mutable_peak_intensity();
+
+  // optional int32 peak_m_z_denominator = 3;
+  inline bool has_peak_m_z_denominator() const;
+  inline void clear_peak_m_z_denominator();
+  static const int kPeakMZDenominatorFieldNumber = 3;
+  inline ::google::protobuf::int32 peak_m_z_denominator() const;
+  inline void set_peak_m_z_denominator(::google::protobuf::int32 value);
+
+  // optional int32 peak_intensity_denominator = 4;
+  inline bool has_peak_intensity_denominator() const;
+  inline void clear_peak_intensity_denominator();
+  static const int kPeakIntensityDenominatorFieldNumber = 4;
+  inline ::google::protobuf::int32 peak_intensity_denominator() const;
+  inline void set_peak_intensity_denominator(::google::protobuf::int32 value);
+
+  // optional int32 spectrum_number = 5;
+  inline bool has_spectrum_number() const;
+  inline void clear_spectrum_number();
+  static const int kSpectrumNumberFieldNumber = 5;
+  inline ::google::protobuf::int32 spectrum_number() const;
+  inline void set_spectrum_number(::google::protobuf::int32 value);
+
+  // optional double precursor_m_z = 6;
+  inline bool has_precursor_m_z() const;
+  inline void clear_precursor_m_z();
+  static const int kPrecursorMZFieldNumber = 6;
+  inline double precursor_m_z() const;
+  inline void set_precursor_m_z(double value);
+
+  // optional double rtime = 8;
+  inline bool has_rtime() const;
+  inline void clear_rtime();
+  static const int kRtimeFieldNumber = 8;
+  inline double rtime() const;
+  inline void set_rtime(double value);
+
+  // repeated int32 charge_state = 7 [packed = true];
+  inline int charge_state_size() const;
+  inline void clear_charge_state();
+  static const int kChargeStateFieldNumber = 7;
+  inline ::google::protobuf::int32 charge_state(int index) const;
+  inline void set_charge_state(int index, ::google::protobuf::int32 value);
+  inline void add_charge_state(::google::protobuf::int32 value);
+  inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
+      charge_state() const;
+  inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
+      mutable_charge_state();
+
+  // @@protoc_insertion_point(class_scope:pb.Spectrum)
+ private:
+  inline void set_has_peak_m_z_denominator();
+  inline void clear_has_peak_m_z_denominator();
+  inline void set_has_peak_intensity_denominator();
+  inline void clear_has_peak_intensity_denominator();
+  inline void set_has_spectrum_number();
+  inline void clear_has_spectrum_number();
+  inline void set_has_precursor_m_z();
+  inline void clear_has_precursor_m_z();
+  inline void set_has_rtime();
+  inline void clear_has_rtime();
+
+  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+
+  ::google::protobuf::RepeatedField< ::google::protobuf::int64 > peak_m_z_;
+  mutable int _peak_m_z_cached_byte_size_;
+  ::google::protobuf::RepeatedField< ::google::protobuf::int64 > peak_intensity_;
+  mutable int _peak_intensity_cached_byte_size_;
+  ::google::protobuf::int32 peak_m_z_denominator_;
+  ::google::protobuf::int32 peak_intensity_denominator_;
+  double precursor_m_z_;
+  double rtime_;
+  ::google::protobuf::RepeatedField< ::google::protobuf::int32 > charge_state_;
+  mutable int _charge_state_cached_byte_size_;
+  ::google::protobuf::int32 spectrum_number_;
+
+  mutable int _cached_size_;
+  ::google::protobuf::uint32 _has_bits_[(8 + 31) / 32];
+
+  friend void  protobuf_AddDesc_spectrum_2eproto();
+  friend void protobuf_AssignDesc_spectrum_2eproto();
+  friend void protobuf_ShutdownFile_spectrum_2eproto();
+
+  void InitAsDefaultInstance();
+  static Spectrum* default_instance_;
+};
+// ===================================================================
+
+
+// ===================================================================
+
+// Spectrum
+
+// repeated int64 peak_m_z = 1 [packed = true];
+inline int Spectrum::peak_m_z_size() const {
+  return peak_m_z_.size();
+}
+inline void Spectrum::clear_peak_m_z() {
+  peak_m_z_.Clear();
+}
+inline ::google::protobuf::int64 Spectrum::peak_m_z(int index) const {
+  return peak_m_z_.Get(index);
+}
+inline void Spectrum::set_peak_m_z(int index, ::google::protobuf::int64 value) {
+  peak_m_z_.Set(index, value);
+}
+inline void Spectrum::add_peak_m_z(::google::protobuf::int64 value) {
+  peak_m_z_.Add(value);
+}
+inline const ::google::protobuf::RepeatedField< ::google::protobuf::int64 >&
+Spectrum::peak_m_z() const {
+  return peak_m_z_;
+}
+inline ::google::protobuf::RepeatedField< ::google::protobuf::int64 >*
+Spectrum::mutable_peak_m_z() {
+  return &peak_m_z_;
+}
+
+// repeated int64 peak_intensity = 2 [packed = true];
+inline int Spectrum::peak_intensity_size() const {
+  return peak_intensity_.size();
+}
+inline void Spectrum::clear_peak_intensity() {
+  peak_intensity_.Clear();
+}
+inline ::google::protobuf::int64 Spectrum::peak_intensity(int index) const {
+  return peak_intensity_.Get(index);
+}
+inline void Spectrum::set_peak_intensity(int index, ::google::protobuf::int64 value) {
+  peak_intensity_.Set(index, value);
+}
+inline void Spectrum::add_peak_intensity(::google::protobuf::int64 value) {
+  peak_intensity_.Add(value);
+}
+inline const ::google::protobuf::RepeatedField< ::google::protobuf::int64 >&
+Spectrum::peak_intensity() const {
+  return peak_intensity_;
+}
+inline ::google::protobuf::RepeatedField< ::google::protobuf::int64 >*
+Spectrum::mutable_peak_intensity() {
+  return &peak_intensity_;
+}
+
+// optional int32 peak_m_z_denominator = 3;
+inline bool Spectrum::has_peak_m_z_denominator() const {
+  return (_has_bits_[0] & 0x00000004u) != 0;
+}
+inline void Spectrum::set_has_peak_m_z_denominator() {
+  _has_bits_[0] |= 0x00000004u;
+}
+inline void Spectrum::clear_has_peak_m_z_denominator() {
+  _has_bits_[0] &= ~0x00000004u;
+}
+inline void Spectrum::clear_peak_m_z_denominator() {
+  peak_m_z_denominator_ = 0;
+  clear_has_peak_m_z_denominator();
+}
+inline ::google::protobuf::int32 Spectrum::peak_m_z_denominator() const {
+  return peak_m_z_denominator_;
+}
+inline void Spectrum::set_peak_m_z_denominator(::google::protobuf::int32 value) {
+  set_has_peak_m_z_denominator();
+  peak_m_z_denominator_ = value;
+}
+
+// optional int32 peak_intensity_denominator = 4;
+inline bool Spectrum::has_peak_intensity_denominator() const {
+  return (_has_bits_[0] & 0x00000008u) != 0;
+}
+inline void Spectrum::set_has_peak_intensity_denominator() {
+  _has_bits_[0] |= 0x00000008u;
+}
+inline void Spectrum::clear_has_peak_intensity_denominator() {
+  _has_bits_[0] &= ~0x00000008u;
+}
+inline void Spectrum::clear_peak_intensity_denominator() {
+  peak_intensity_denominator_ = 0;
+  clear_has_peak_intensity_denominator();
+}
+inline ::google::protobuf::int32 Spectrum::peak_intensity_denominator() const {
+  return peak_intensity_denominator_;
+}
+inline void Spectrum::set_peak_intensity_denominator(::google::protobuf::int32 value) {
+  set_has_peak_intensity_denominator();
+  peak_intensity_denominator_ = value;
+}
+
+// optional int32 spectrum_number = 5;
+inline bool Spectrum::has_spectrum_number() const {
+  return (_has_bits_[0] & 0x00000010u) != 0;
+}
+inline void Spectrum::set_has_spectrum_number() {
+  _has_bits_[0] |= 0x00000010u;
+}
+inline void Spectrum::clear_has_spectrum_number() {
+  _has_bits_[0] &= ~0x00000010u;
+}
+inline void Spectrum::clear_spectrum_number() {
+  spectrum_number_ = 0;
+  clear_has_spectrum_number();
+}
+inline ::google::protobuf::int32 Spectrum::spectrum_number() const {
+  return spectrum_number_;
+}
+inline void Spectrum::set_spectrum_number(::google::protobuf::int32 value) {
+  set_has_spectrum_number();
+  spectrum_number_ = value;
+}
+
+// optional double precursor_m_z = 6;
+inline bool Spectrum::has_precursor_m_z() const {
+  return (_has_bits_[0] & 0x00000020u) != 0;
+}
+inline void Spectrum::set_has_precursor_m_z() {
+  _has_bits_[0] |= 0x00000020u;
+}
+inline void Spectrum::clear_has_precursor_m_z() {
+  _has_bits_[0] &= ~0x00000020u;
+}
+inline void Spectrum::clear_precursor_m_z() {
+  precursor_m_z_ = 0;
+  clear_has_precursor_m_z();
+}
+inline double Spectrum::precursor_m_z() const {
+  return precursor_m_z_;
+}
+inline void Spectrum::set_precursor_m_z(double value) {
+  set_has_precursor_m_z();
+  precursor_m_z_ = value;
+}
+
+// optional double rtime = 8;
+inline bool Spectrum::has_rtime() const {
+  return (_has_bits_[0] & 0x00000040u) != 0;
+}
+inline void Spectrum::set_has_rtime() {
+  _has_bits_[0] |= 0x00000040u;
+}
+inline void Spectrum::clear_has_rtime() {
+  _has_bits_[0] &= ~0x00000040u;
+}
+inline void Spectrum::clear_rtime() {
+  rtime_ = 0;
+  clear_has_rtime();
+}
+inline double Spectrum::rtime() const {
+  return rtime_;
+}
+inline void Spectrum::set_rtime(double value) {
+  set_has_rtime();
+  rtime_ = value;
+}
+
+// repeated int32 charge_state = 7 [packed = true];
+inline int Spectrum::charge_state_size() const {
+  return charge_state_.size();
+}
+inline void Spectrum::clear_charge_state() {
+  charge_state_.Clear();
+}
+inline ::google::protobuf::int32 Spectrum::charge_state(int index) const {
+  return charge_state_.Get(index);
+}
+inline void Spectrum::set_charge_state(int index, ::google::protobuf::int32 value) {
+  charge_state_.Set(index, value);
+}
+inline void Spectrum::add_charge_state(::google::protobuf::int32 value) {
+  charge_state_.Add(value);
+}
+inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
+Spectrum::charge_state() const {
+  return charge_state_;
+}
+inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
+Spectrum::mutable_charge_state() {
+  return &charge_state_;
+}
+
+
+// @@protoc_insertion_point(namespace_scope)
+
+}  // namespace pb
+
+#ifndef SWIG
+namespace google {
+namespace protobuf {
+
+
+}  // namespace google
+}  // namespace protobuf
+#endif  // SWIG
+
+// @@protoc_insertion_point(global_scope)
+
+#endif  // PROTOBUF_spectrum_2eproto__INCLUDED
diff --git a/src/app/tide/protoobj/spectrum_pb2.py b/src/app/tide/protoobj/spectrum_pb2.py
new file mode 100644
index 0000000..176dd1a
--- /dev/null
+++ b/src/app/tide/protoobj/spectrum_pb2.py
@@ -0,0 +1,114 @@
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: spectrum.proto
+
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  name='spectrum.proto',
+  package='pb',
+  serialized_pb='\n\x0espectrum.proto\x12\x02pb\"\xd7\x01\n\x08Spectrum\x12\x14\n\x08peak_m_z\x18\x01 \x03(\x03\x42\x02\x10\x01\x12\x1a\n\x0epeak_intensity\x18\x02 \x03(\x03\x42\x02\x10\x01\x12\x1c\n\x14peak_m_z_denominator\x18\x03 \x01(\x05\x12\"\n\x1apeak_intensity_denominator\x18\x04 \x01(\x05\x12\x17\n\x0fspectrum_number\x18\x05 \x01(\x05\x12\x15\n\rprecursor_m_z\x18\x06 \x01(\x01\x12\r\n\x05rtime\x18\x08 \x01(\x01\x12\x18\n\x0c\x63harge_state\x18\x07 \x03(\x05\x42\x02\x10\x01\x42\x0 [...]
+
+
+
+
+_SPECTRUM = _descriptor.Descriptor(
+  name='Spectrum',
+  full_name='pb.Spectrum',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='peak_m_z', full_name='pb.Spectrum.peak_m_z', index=0,
+      number=1, type=3, cpp_type=2, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')),
+    _descriptor.FieldDescriptor(
+      name='peak_intensity', full_name='pb.Spectrum.peak_intensity', index=1,
+      number=2, type=3, cpp_type=2, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')),
+    _descriptor.FieldDescriptor(
+      name='peak_m_z_denominator', full_name='pb.Spectrum.peak_m_z_denominator', index=2,
+      number=3, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='peak_intensity_denominator', full_name='pb.Spectrum.peak_intensity_denominator', index=3,
+      number=4, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='spectrum_number', full_name='pb.Spectrum.spectrum_number', index=4,
+      number=5, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='precursor_m_z', full_name='pb.Spectrum.precursor_m_z', index=5,
+      number=6, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='rtime', full_name='pb.Spectrum.rtime', index=6,
+      number=8, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='charge_state', full_name='pb.Spectrum.charge_state', index=7,
+      number=7, type=5, cpp_type=1, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=23,
+  serialized_end=238,
+)
+
+DESCRIPTOR.message_types_by_name['Spectrum'] = _SPECTRUM
+
+class Spectrum(_message.Message):
+  __metaclass__ = _reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _SPECTRUM
+
+  # @@protoc_insertion_point(class_scope:pb.Spectrum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), 'H\001')
+_SPECTRUM.fields_by_name['peak_m_z'].has_options = True
+_SPECTRUM.fields_by_name['peak_m_z']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')
+_SPECTRUM.fields_by_name['peak_intensity'].has_options = True
+_SPECTRUM.fields_by_name['peak_intensity']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')
+_SPECTRUM.fields_by_name['charge_state'].has_options = True
+_SPECTRUM.fields_by_name['charge_state']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')
+# @@protoc_insertion_point(module_scope)
diff --git a/src/app/tide/records.h b/src/app/tide/records.h
new file mode 100644
index 0000000..ff68d7d
--- /dev/null
+++ b/src/app/tide/records.h
@@ -0,0 +1,249 @@
+// Benjamin Diament
+//
+// Utility routines for reading and writing a file of protocol buffers as
+// records. Each protocol buffer message is encoded into a record which is
+// prepended by its length in the varint format. See protocol buffer
+// documentation: 
+//     http://code.google.com/apis/protocolbuffers/docs/overview.html.
+// A '\0' is appended to the end of the file.
+// According to the documentation it is inappropriate (also ineffective) to
+// encode a series of records as a protocol buffer containing a single repeated
+// field. Records provide a very basic way to store vastly many messages in
+// a file.
+//
+// The corresponding program records.py can be used to read and write in
+// the same format in Python, provided that all messages are the same type.
+//
+// See peptide_downselect.cc for a very simple example of the use of records.
+//
+// Each file of records is prepended with a 4-byte arbitrarily-chosen string,
+// called a magic number, to provide a check that a given file is indeed a
+// file of records.
+//
+// HeadedRecordReader and HeadedRecordWriter provide an interface for 
+// prepending a file of records with a single record of type Header.proto,
+// containing client-provided meta-information about the file.
+// All tide generated files are expected to be HeadedRecords.
+//
+// RecordReader and RecordWriter make use of the classes:
+//     google::protobuf::io::FileInputStream
+//     google::protobuf::io::FileOutputStream
+//     google::protobuf::io::CodedInputStream
+//     google::protobuf::io::CodedOutputStream,
+// which are described in the protocol buffer documentation.
+//
+// TODO 259: This class probably should be rewritten, paying more
+// attention to the various idioms for use of ZeroCopyStream and
+// CodedStream! Things could be greatly simplified.
+//
+// Note that CodedInputStream isn't built to handle large streams of
+// input, so it should be reconstructed at each record. Perhaps the
+// underlying ZeroCopyStream should handle EOF determination
+
+
+#ifndef RECORDS_H
+#define RECORDS_H
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <fcntl.h>
+#ifdef _MSC_VER
+#include <io.h>
+#else
+#include <unistd.h>
+#endif
+#include <iostream>
+#include <string>
+#include <google/protobuf/message.h>
+#include <google/protobuf/io/zero_copy_stream_impl.h>
+#include <google/protobuf/io/coded_stream.h>
+#include "header.pb.h"
+#include "io/carp.h"
+
+using namespace std;
+
+#ifndef UINT32_MAX
+#define UINT32_MAX 0xfffffffful
+#endif
+#define MAGIC_NUMBER  0xfead1234ul
+
+class RecordWriter {
+ public:
+  explicit RecordWriter(const string& filename, int buf_size = -1)
+    : raw_output_(NULL), coded_output_(NULL) {
+    if ((fd_ = open(filename.c_str(), O_CREAT | O_TRUNC | O_WRONLY, 0644)) < 0) {
+      carp(CARP_FATAL, "Couldn't open file %s for write (errno %d: %s).",
+	   filename.c_str(), errno, strerror(errno));
+      return;
+    }
+    raw_output_ = new google::protobuf::io::FileOutputStream(fd_, buf_size);
+    Init();
+  }
+  
+  explicit RecordWriter(google::protobuf::io::ZeroCopyOutputStream* raw_output)
+    : fd_(-1), raw_output_(raw_output) {
+    Init();
+    raw_output_ = NULL; // we do not own (and will not delete) raw_output
+  }
+
+  ~RecordWriter() {
+    coded_output_->WriteVarint32(0); // end-of-records marker
+    delete coded_output_;
+    delete raw_output_;
+    if (fd_ > -1)
+      close(fd_);
+  }
+
+  // client should check once after construction
+  bool OK() const { return NULL != coded_output_; }
+
+  bool Write(const google::protobuf::Message* message) {
+    coded_output_->WriteVarint32(message->ByteSize());
+    if (coded_output_->HadError()) {
+      delete coded_output_;
+      coded_output_ = NULL;
+      return false;
+    }
+    message->SerializeWithCachedSizes(coded_output_);
+    return !coded_output_->HadError();
+  }
+
+ private:
+  void Init() {
+    coded_output_ = new google::protobuf::io::CodedOutputStream(raw_output_);
+    coded_output_->WriteLittleEndian32(MAGIC_NUMBER);
+    if (coded_output_->HadError()) {
+      delete coded_output_;
+      coded_output_ = NULL;
+    }
+  }
+
+  int fd_;
+  google::protobuf::io::ZeroCopyOutputStream* raw_output_;
+  google::protobuf::io::CodedOutputStream* coded_output_;
+};
+
+
+class RecordReader {
+ public:
+  explicit RecordReader(const string& filename, int buf_size = -1)
+    : raw_input_(NULL), coded_input_(NULL), size_(UINT32_MAX), valid_(false) {
+    fd_ = open(filename.c_str(), O_RDONLY);
+    if (fd_ < 0)
+      return;
+    raw_input_ = new google::protobuf::io::FileInputStream(fd_, buf_size);
+    google::protobuf::io::CodedInputStream coded_input(raw_input_);
+    google::protobuf::uint32 magic_number;
+    if (coded_input.ReadLittleEndian32(&magic_number) 
+        && magic_number == MAGIC_NUMBER)
+      valid_ = true;
+  }
+
+  ~RecordReader() {
+    if (coded_input_)
+      delete coded_input_;
+    delete raw_input_;
+    if (fd_ >= 0)
+      close(fd_);
+  }
+
+  bool OK() const { return valid_; }
+
+  bool Done() {
+    if (!valid_)
+      return true;
+    coded_input_ = new google::protobuf::io::CodedInputStream(raw_input_);
+    if (!coded_input_->ReadVarint32(&size_))
+      return valid_ = false;
+    return (size_ == 0);
+    // TODO 260: there should be an easy way to tell if we're at the end
+    // of the file, but I can't seem to find a reliable way to do that
+    // easily...
+  }
+
+  bool Read(google::protobuf::Message* message) {
+    if (!valid_)
+      return false;
+    assert(size_ != UINT32_MAX);
+    google::protobuf::io::CodedInputStream::Limit limit
+      = coded_input_->PushLimit(size_);
+    if (!message->ParseFromCodedStream(coded_input_))
+      return valid_ = false;
+    if (!coded_input_->ConsumedEntireMessage() ||
+        coded_input_->BytesUntilLimit() != 0)
+      return valid_ = false;
+    coded_input_->PopLimit(limit); // for completeness; perhaps remove
+    delete coded_input_;
+    coded_input_ = NULL;
+    size_ = UINT32_MAX;
+    return true;
+  }
+
+ private:
+  int fd_;
+  google::protobuf::io::ZeroCopyInputStream* raw_input_;
+  google::protobuf::io::CodedInputStream* coded_input_;
+  google::protobuf::uint32 size_;
+  bool valid_;
+};
+
+class HeadedRecordWriter {
+ public:
+  HeadedRecordWriter(const string& filename, const pb::Header& header,
+                     int buf_size = -1) 
+    : writer_(filename, buf_size) {
+    if (!writer_.OK())
+      carp(CARP_FATAL, "Cannot create the file %s\n", filename.c_str());
+    Write(&header);
+  }
+
+  HeadedRecordWriter(google::protobuf::io::ZeroCopyOutputStream* raw_output,
+                     const pb::Header& header) 
+    : writer_(raw_output) {
+    Write(&header);
+  }
+
+  RecordWriter* Writer() { return &writer_; }
+
+  // client should check once after construction
+  bool OK() const { return writer_.OK(); }
+
+  bool Write(const google::protobuf::Message* message) {
+    return writer_.Write(message);
+  }
+
+ private:
+  RecordWriter writer_;
+};
+
+class HeadedRecordReader {
+ public:
+  HeadedRecordReader(const string& filename, pb::Header* header = NULL,
+                     int buf_size = -1)
+    : reader_(filename, buf_size), header_(header),
+    del_header_(header == NULL) {
+    if (header == NULL)
+      header_ = new pb::Header;
+    if (!Done())
+      Read(header_);
+  }
+  ~HeadedRecordReader() { if (del_header_) delete header_; }
+
+  RecordReader* Reader() { return &reader_; }
+
+  bool OK() const { return reader_.OK(); }
+  bool Done() { return reader_.Done(); }
+  bool Read(google::protobuf::Message* message) { 
+    return reader_.Read(message);
+  }
+  const pb::Header* GetHeader() const { return header_; }
+
+ private:
+  void ReadMagicNumber();
+  RecordReader reader_;
+  pb::Header* header_;
+  bool del_header_;
+};
+
+#endif // RECORDS_H
diff --git a/src/app/tide/records_to_vector-inl.h b/src/app/tide/records_to_vector-inl.h
new file mode 100644
index 0000000..85de861
--- /dev/null
+++ b/src/app/tide/records_to_vector-inl.h
@@ -0,0 +1,49 @@
+//  Benjamin Diament
+//
+//  Templatized function to read a file of records (as in records.{h,cc}) to
+//  store in a vector<>.
+//
+//  The template parameters are:
+//  Protobuf:   any protocol buffer message type.
+//  VecElement: the type of the vector elements (vector<> actually contains
+//              pointers). Usually same as Protobuf, but may be const. Note that
+//              VecElement is implicit in the first function parameter.
+//
+//  Example:
+//
+//    vector<const pb::Protein*> proteins;
+//    ReadRecordsToVector<pb::Protein>(&proteins, filename);
+//
+#include "records.h"
+template<class Protobuf, class VecElement>
+bool ReadRecordsToVector(vector<VecElement*>* vec, const string& filename,
+       pb::Header* header = NULL) {
+  HeadedRecordReader reader(filename, header);
+  while (!reader.Done()) {
+    Protobuf* protobuf = new Protobuf;
+    reader.Read(protobuf);
+    vec->push_back(protobuf);
+  }
+  if (!reader.OK()) { // Discard everything if we fail.
+    for (int i = 0; i < vec->size(); ++i)
+      delete (*vec)[i];
+    vec->clear();
+    return false;
+  }
+  return true;
+}
+
+template<class Protobuf>
+int CountRecords(const string& filename) {
+  int count = 0;
+  HeadedRecordReader reader(filename);
+  while (!reader.Done()) {
+    Protobuf protobuf;
+    reader.Read(&protobuf);
+    ++count;
+  }
+  if (!reader.OK())
+    return -1;
+
+  return count;
+}
diff --git a/src/app/tide/sp_scorer.cc b/src/app/tide/sp_scorer.cc
new file mode 100644
index 0000000..1d22732
--- /dev/null
+++ b/src/app/tide/sp_scorer.cc
@@ -0,0 +1,123 @@
+// Tahmina Baker
+//
+// This file contains implementations for classes defined in sp_scorer.h.
+// Please see the header file for details.
+
+#include <list>
+#include "sp_scorer.h"
+#include "peptide.h"
+
+SpScorer::SpScorer(const ProteinVec& proteins, const Spectrum& spectrum, 
+                   int charge, double max_mz)
+  : proteins_(proteins), spectrum_(spectrum), charge_(charge), max_mz_(max_mz),
+  sp_spectrum_(spectrum, charge, max_mz) {
+}
+
+bool SpScorer::IonLookup(double mass, int charge, bool previous_ion_matched,
+                         SpScoreData& sp_score_data) {
+  bool matched = false;
+  sp_score_data.total_ions++;
+  int bin = GetBin(mass, charge);
+  double intensity = 0.0;
+  if (bin < max_mz_)
+    intensity = sp_spectrum_.Intensity(bin);  
+  if (intensity > 0) {
+    // We have a match
+    matched = true;
+    sp_score_data.matched_ions++;
+    sp_score_data.intensity_sum += intensity;
+    
+    if (previous_ion_matched) {
+      sp_score_data.repeat_count++;
+    }
+  }
+
+  return matched;
+}
+
+void SpScorer::Score(const pb::Peptide& pb_peptide, SpScoreData& sp_score_data) {
+  Peptide peptide(pb_peptide, proteins_);
+  vector<double> m_z(peptide.Len());
+  string sequence = peptide.Seq();
+
+  // Collect m/z values for each residue
+  for (int i = 0; i < sequence.length(); i++)
+    m_z[i] = MassConstants::mono_table[sequence[i]];
+
+  // Account for modifications
+  const ModCoder::Mod* mods;
+  int num_mods = peptide.Mods(&mods);
+  for (int i = 0; i < num_mods; i++) {
+    int index;
+    double delta;
+    MassConstants::DecodeMod(mods[i], &index, &delta);
+    m_z[index] += delta;
+  }
+
+  int precursor_charge = (charge_ == 1) ? 2 : charge_;
+  for (int ion_charge = 1; ion_charge < precursor_charge; ion_charge++) {
+    // Needed for keeping track of repeat_count
+    bool previous_b_ion_matched = false;
+    bool previous_y_ion_matched = false;
+    
+    double b_ion = MassConstants::proton;
+    double y_ion = peptide.Mass() + MassConstants::proton;
+
+    for (int i = 0; i < sequence.length(); i++) {
+      // Calculate and look up b-ions
+      if (i < sequence.length()-1) {
+        b_ion += m_z[i];
+        previous_b_ion_matched = IonLookup(b_ion, ion_charge, 
+                                           previous_b_ion_matched, 
+                                           sp_score_data);
+      }
+
+      // Calculate and look up y-ions
+      if (i > 0) {
+        y_ion -= m_z[i-1];
+        previous_y_ion_matched = IonLookup(y_ion, ion_charge, 
+                                           previous_y_ion_matched, 
+                                           sp_score_data);
+      }
+    }
+  }
+
+  sp_score_data.CalculateSpScore(sp_spectrum_.Beta());
+}
+
+void SpScorer::RankSpScores(vector<SpScoreData>& scores, 
+                            double* smallest_score) {
+
+  if (scores.size() > 0) {
+    *smallest_score = scores[0].sp_score;
+  } else {
+    *smallest_score = 0.0;
+  }
+
+  // We use this list to sort the matches according to sp score, then
+  // use the match id to assign the rankings to the sp scores passed in
+  list<SpScoreMatchPair> sp_score_match_list;
+  for (int match = 0; match < scores.size(); match++) {
+    sp_score_match_list.push_back(make_pair(scores[match].sp_score, match));
+    if (scores[match].sp_score < *smallest_score)
+      *smallest_score = scores[match].sp_score;
+  }
+  sp_score_match_list.sort(CompareBySpScore);
+  
+  // Assign rankings to the sp scores passed in
+  list<SpScoreMatchPair>::iterator i;  
+  int rank_count = 0;
+  for (i=sp_score_match_list.begin(); i != sp_score_match_list.end(); ++i) {
+    scores[i->second].sp_rank = ++rank_count;
+  }
+
+  if (smallest_score) {
+    if (sp_score_match_list.size() > 0) {
+      // After we go through the loop that assigns the rankings, i is at 
+      // list.end(). If we iterate back one, we'll have the lowest sp score.
+      *smallest_score = scores[(--i)->second].sp_score;
+    } else {
+      *smallest_score = 0.0;
+    }
+  }
+}
diff --git a/src/app/tide/sp_scorer.h b/src/app/tide/sp_scorer.h
new file mode 100644
index 0000000..536a4a7
--- /dev/null
+++ b/src/app/tide/sp_scorer.h
@@ -0,0 +1,107 @@
+// Tahmina Baker
+//
+// This file contains classes for calculating the sp score.
+//
+// The sp score is calculated as follows:
+// sp = (intensity_sum*ion_match) * (1+(repeat_count*beta))/num_ions
+//
+// intensity_sum:
+// Convert each ion mz into a bin and use as index into an array of 
+// intensities for the spectrum which has been preprocessed for sp 
+// calculations (see SpSpectrum for details). This will give us a
+// single_intensity = spectrum_intensity_array[ion.bin]. We then sum up
+// these intensities to get an intensity_sum.
+//
+// ion_match:
+// The total count of ions satisfying the condition (single_intensity > 0)
+// 
+// repeat_count:
+// Counts the links between CONSECUTIVE ions matching the spectrum. For example, 
+// let's say the following y ion series matched with the spectrum at ion 
+// charge 1: y1y2y3y6y12y13. We have consecutive ion matches between y1y2, y2y3
+// and y12y13. The repeat_count then equals 3.
+// 
+// beta:
+// Jimmy said this was just some number they came up with. It is simply 0.075.
+// He doesn't know why.
+// 
+// num_ions:
+// The total number of ions we tried to match with the spectrum.
+
+
+#ifndef SP_SCORER_H
+#define SP_SCORER_H
+
+#include <vector>
+//#include "peptide.h"
+#include "crux_sp_spectrum.h"
+#include "raw_proteins.pb.h"
+#include "peptides.pb.h"
+
+typedef vector<const pb::Protein*> ProteinVec;
+typedef vector<const pb::AuxLocation*> AuxLocVec;
+
+
+class SpScorer {
+ public:
+  struct SpScoreData {
+    double sp_score;
+    int sp_rank;
+    int matched_ions;
+    int total_ions;
+    double intensity_sum;
+    int repeat_count;
+    
+    SpScoreData() : sp_score(0.0), sp_rank(0), matched_ions(0), total_ions(0),
+      intensity_sum(0.0), repeat_count(0) { }
+
+    SpScoreData(double sp_score_in, int sp_rank_in, 
+                int matched_ions_in, int total_ions_in, 
+                double intensity_sum_in, int repeat_count_in)
+      : sp_score(sp_score_in), sp_rank(sp_rank_in), 
+      matched_ions(matched_ions_in), total_ions(total_ions_in), 
+      intensity_sum(intensity_sum_in), repeat_count(repeat_count_in) { }
+
+    void CalculateSpScore(double beta) {
+      if (total_ions != 0) {
+        sp_score = (intensity_sum * matched_ions) * 
+                   (1 + (repeat_count * beta)) / total_ions;
+      }
+    }
+  };
+  
+  SpScorer(const ProteinVec& proteins, const Spectrum& spectrum, 
+           int charge, double max_mz);
+
+  void Score(const pb::Peptide& pb_peptide, SpScoreData& sp_score_data);
+  void RankSpScores(vector<SpScoreData>& scores, 
+                    double* smallest_score = NULL);
+  double TotalIonIntensity() {return sp_spectrum_.TotalIonIntensity();}
+
+ private:
+  typedef pair<double, int> SpScoreMatchPair;
+  
+  static bool CompareBySpScore(SpScoreMatchPair sp_score_1, 
+                               SpScoreMatchPair sp_score_2) {
+    if (sp_score_1.first > sp_score_2.first)
+      return true;
+    return false;
+  }
+
+  int GetBin(double mass, int charge) {
+//    double mz = (mass + (charge - 1)*MassConstants::proton)/charge;
+    return MassConstants::mass2bin(mass, charge);
+  }
+
+  bool IonLookup(double mass, int charge, bool previous_ion_matched,
+                 SpScoreData& sp_score_data);
+
+  
+  const ProteinVec& proteins_;
+  const Spectrum& spectrum_;
+  SpSpectrum sp_spectrum_;
+  int charge_;
+  double max_mz_;
+};
+
+#endif // SP_SCORER_H
diff --git a/src/app/tide/spectrum_collection.cc b/src/app/tide/spectrum_collection.cc
new file mode 100644
index 0000000..3c204ae
--- /dev/null
+++ b/src/app/tide/spectrum_collection.cc
@@ -0,0 +1,218 @@
+// Benjamin Diament
+//
+// See .h file.
+
+#include <stdio.h>
+#include <math.h>
+#include <iostream>
+#include <algorithm>
+#include <functional>
+#include "spectrum.pb.h"
+#include "spectrum_collection.h"
+#include "mass_constants.h"
+#include "records.h"
+#include "records_to_vector-inl.h"
+
+using namespace std;
+using google::protobuf::uint64;
+
+#define CHECK(x) GOOGLE_CHECK((x))
+
+Spectrum::Spectrum(const pb::Spectrum& spec) {
+  spectrum_number_ = spec.spectrum_number();
+  precursor_m_z_ = spec.precursor_m_z();
+  rtime_ = spec.rtime();
+  for (int i = 0; i < spec.charge_state_size(); ++i)
+    charge_states_.push_back(spec.charge_state(i));
+  int size = spec.peak_m_z_size();
+  CHECK(size == spec.peak_intensity_size());
+  ReservePeaks(size);
+  uint64 total = 0;
+  double m_z_denom = spec.peak_m_z_denominator();
+  double intensity_denom = spec.peak_intensity_denominator();
+  for (int i = 0; i < size; ++i) {
+    CHECK(spec.peak_m_z(i) > 0);
+    total += spec.peak_m_z(i); // deltas of m/z are stored
+    peak_m_z_.push_back(total / m_z_denom);
+    peak_intensity_.push_back(spec.peak_intensity(i) / intensity_denom);
+  }
+}
+
+static inline bool IsInt(double x) {
+  // See whether x is quite close to an integer (within 0.001).
+  return fabs(x - uint64(x+0.5)) < 0.001;
+}
+
+static inline bool CheckDenom(const vector<double>& vals, int denom) {
+  // See whether all vals can be accommodated by denom when rendered as a
+  // fraction.
+  double d_denom = denom;
+  for (int i = 0; i < vals.size(); ++ i) {
+    if (!IsInt(vals[i] * d_denom))
+      return false;
+  }
+  return true;
+}
+
+static inline int GetDenom(const vector<double>& vals) {
+  // See how much precision is given in the vals array. Not especially fast,
+  // but fast enough. Used only for converting spectrum input format.
+  const int kMaxPrecision = 10000; // store at most 3 digits of precision
+  for (int precision = 1; precision < kMaxPrecision; precision *= 10)
+    if (CheckDenom(vals, precision))
+      return precision;
+  return kMaxPrecision;
+}
+
+void Spectrum::FillPB(pb::Spectrum* spec) {
+  spec->Clear();
+  spec->set_spectrum_number(spectrum_number_);
+  if (precursor_m_z_ > 0)
+    spec->set_precursor_m_z(precursor_m_z_);
+  spec->set_rtime(rtime_);
+  for (int i = 0; i < NumChargeStates(); ++i)
+    spec->add_charge_state(ChargeState(i));
+  int size = peak_m_z_.size();
+  CHECK(size == peak_intensity_.size());
+  int m_z_denom = GetDenom(peak_m_z_);
+  int intensity_denom = GetDenom(peak_intensity_);
+  spec->set_peak_m_z_denominator(m_z_denom);
+  spec->set_peak_intensity_denominator(intensity_denom);
+  uint64 last = 0;
+  for (int i = 0; i < size; ++i) {
+    uint64 val = uint64(peak_m_z_[i]*m_z_denom + 0.5);
+    CHECK(val > last);
+    spec->add_peak_m_z(val - last);
+    last = val;
+    spec->add_peak_intensity(uint64(peak_intensity_[i]*intensity_denom + 0.5));
+  }
+}
+
+void Spectrum::SortIfNecessary() {
+  if (adjacent_find(peak_m_z_.begin(), peak_m_z_.end(), greater<double>())
+      == peak_m_z_.end())
+    return;
+
+  // TODO: eliminate copy operations
+  int size = Size();
+  vector< pair<double, double> > pairs;
+  for (int i = 0; i < size; ++i)
+    pairs[i] = make_pair(peak_m_z_[i], peak_intensity_[i]);
+  sort(pairs.begin(), pairs.begin() + size);
+  for (int i = 0; i < size; ++i) {
+    peak_m_z_[i] = pairs[i].first;
+    peak_intensity_[i] = pairs[i].second;
+  }
+}
+
+void SpectrumCollection::ReadMS(istream& in, bool ms1) {
+  // Parse MS2 file format. 
+  // Not very fast: uses scanf. CONSIDER speed-up.
+  static const int kMaxLine = 1000;
+  char line[kMaxLine];
+  Spectrum* spectrum = NULL;
+  while (in.getline(line, kMaxLine)) {
+    switch(line[0]) {
+    case 'S': {
+        if (spectrum)
+	  spectra_.push_back(spectrum);
+	int specnum1, specnum2;
+	double precursor_m_z = 0;
+	int ok1 = 0;
+	int ok2 = 0;
+	sscanf(line, "S %d %d%n%lf%n", &specnum1, &specnum2, &ok1,
+	       &precursor_m_z, &ok2);
+	CHECK((ok1 > 0) && (ms1 != (ok2 > 0)));
+	CHECK(specnum1 == specnum2);
+	spectrum = new Spectrum(specnum1, precursor_m_z);
+      }
+      break;
+    case 'I': {
+        int pos = 0;
+	double rtime = -1;
+	sscanf(line, "I RTime %n%lf", &pos, &rtime);
+	if (pos > 0) {
+	  CHECK(rtime >= 0);
+	  spectrum->SetRTime(rtime);
+	}
+      }
+      break;
+    case 'Z':
+      int charge;
+      CHECK(1 == sscanf(line, "Z %d", &charge));
+      spectrum->AddChargeState(charge);
+      break;
+    case '0': case '1': case '2': case '3': case '4':
+    case '5': case '6': case '7': case '8': case '9':
+      double location, intensity;
+      CHECK(2 == sscanf(line, "%lf %lf", &location, &intensity));
+      if (spectrum->Size() > 0) // check that m_z values are increasing.
+	CHECK(location > spectrum->M_Z(spectrum->Size() - 1));
+      if (intensity > 0)
+	spectrum->AddPeak(location, intensity);
+      break;
+    default:
+      break;
+    }
+  }
+  if (spectrum)
+    spectra_.push_back(spectrum);
+}
+
+bool SpectrumCollection::ReadSpectrumRecords(const string& filename,
+					     pb::Header* header) {
+  pb::Header tmp_header;
+  if (header == NULL)
+    header = &tmp_header;
+  HeadedRecordReader reader(filename, header);
+  if (header->file_type() != pb::Header::SPECTRA)
+    return false;
+  pb::Spectrum pb_spectrum;
+  while (!reader.Done()) {
+    reader.Read(&pb_spectrum);
+    spectra_.push_back(new Spectrum(pb_spectrum));
+  }
+  if (!reader.OK()) {
+    for (int i = 0; i < spectra_.size(); ++i)
+      delete spectra_[i];
+    spectra_.clear();
+    return false;
+  }
+  return true;
+}
+
+void SpectrumCollection::MakeSpecCharges() {
+  // Create one entry in the spec_charges_ array for each 
+  // (spectrum, charge) pair.
+  int spectrum_index = 0;
+  vector<Spectrum*>::iterator i = spectra_.begin();
+  for (; i != spectra_.end(); ++i) {
+    for (int j = 0; j < (*i)->NumChargeStates(); ++j) {
+      int charge = (*i)->ChargeState(j);
+      double neutral_mass = (((*i)->PrecursorMZ() - MassConstants::proton)
+			     * charge);
+      spec_charges_.push_back(SpecCharge(neutral_mass, charge, *i, 
+                                         spectrum_index));
+    }
+    spectrum_index++;
+  }
+}
+
+double SpectrumCollection::FindHighestMZ() const {
+  // Return the maximum MZ seen across all input spectra.
+  double highest = 0;
+  vector<Spectrum*>::const_iterator i = spectra_.begin();
+  for (; i != spectra_.end(); ++i) {
+    CHECK((*i)->Size() > 0) << "ERROR: spectrum " << (*i)->SpectrumNumber()
+			    << " has no peaks.\n";
+    double last_peak = (*i)->M_Z((*i)->Size() - 1);
+    if (last_peak > highest)
+      highest = last_peak;
+  }
+  return highest;
+}
+
+void SpectrumCollection::Sort() {
+  MakeSpecCharges();
+  sort(spec_charges_.begin(), spec_charges_.end());
+}
diff --git a/src/app/tide/spectrum_collection.h b/src/app/tide/spectrum_collection.h
new file mode 100644
index 0000000..cf8014c
--- /dev/null
+++ b/src/app/tide/spectrum_collection.h
@@ -0,0 +1,122 @@
+// Benjamin Diament
+//
+// The Spectrum class represents a single spectrum, unprocessed. Instances can
+// be read from and to the pb::Spectrum protocol buffer type (q.v.), which is
+// relatively compact.
+//
+// The SpectrumCollection class represents all the spectra in the input.
+// Initialize with ReadMS2() or ReadSpectrumRecords(). ReadMS2() takes an MS2
+// format, ReadSpectrumRecords() takes a file of records of spectrum.proto.
+//
+// SpectrumCollection::Sort() creates one entry in the spec_charges_ array for
+// each (spectrum, charge) pair, e.g. for the case where a spectrum has
+// multiple possible charge states. The spectra have to be sorted by neutral
+// mass in order to perform the rolling-window join. (See
+// active_peptide_queue.{h,cc}.)
+//
+// SpectrumCollection::FindHighestMZ() returns the maximum MZ seen across all
+// input spectra. This is cached by the MaxMZ class.
+
+#ifndef SPECTRUM_COLLECTION_H
+#define SPECTRUM_COLLECTION_H
+
+#include <iostream>
+#include <vector>
+#include "header.pb.h"
+#include "spectrum.pb.h"
+
+using namespace std;
+
+class Spectrum {
+ public:
+  // Manual instantiation and specification
+  Spectrum(int spectrum_number, double precursor_m_z)
+    : spectrum_number_(spectrum_number), precursor_m_z_(precursor_m_z) {
+  }
+  void ReservePeaks(int num) {
+    peak_m_z_.reserve(num);
+    peak_intensity_.reserve(num);
+  }
+  void SetRTime(double rtime) { rtime_ = rtime; }
+  void AddChargeState(int charge_state) {
+    charge_states_.push_back(charge_state);
+  }
+  void AddPeak(double m_z, double intensity) {
+    peak_m_z_.push_back(m_z);
+    peak_intensity_.push_back(intensity);
+  }
+  
+  explicit Spectrum(const pb::Spectrum& spec); // Instantiation from PB
+  void FillPB(pb::Spectrum* spec);
+
+  int SpectrumNumber() const { return spectrum_number_; }
+  double PrecursorMZ() const { return precursor_m_z_; }
+  double RTime() const { return rtime_; }
+
+  int NumChargeStates() const { return charge_states_.size(); }
+  int ChargeState(int index) const { return charge_states_[index]; }
+
+  int Size() const { return peak_m_z_.size(); } // number of peaks
+  double M_Z(int index) const { return peak_m_z_[index]; }
+  double Intensity(int index) const { return peak_intensity_[index]; }
+
+  void SortIfNecessary();
+  void InferChargeStatesIfNecessary();
+
+ private:
+  int spectrum_number_;
+  double rtime_;
+  double precursor_m_z_;
+  vector<int> charge_states_;
+
+  vector<double> peak_m_z_;
+  vector<double> peak_intensity_;
+};
+
+class SpectrumCollection {
+ public:
+  ~SpectrumCollection() {
+    for (int i = 0; i < spectra_.size(); ++i)
+      delete spectra_[i];
+  }
+
+  void ReadMS(istream& in, bool ms1);
+  bool ReadSpectrumRecords(const string& filename, pb::Header* header = NULL);
+  void Sort();
+
+  template<typename BinaryPredicate>
+  void Sort(BinaryPredicate Predicate) {
+    MakeSpecCharges();
+    sort(spec_charges_.begin(), spec_charges_.end(), Predicate);
+  }
+
+  double FindHighestMZ() const;
+
+  struct SpecCharge {
+    double neutral_mass;
+    int charge;
+    Spectrum* spectrum;
+    int spectrum_index;
+
+    SpecCharge(double neutral_mass_param, int charge_param,
+               Spectrum* spectrum_param, int spectrum_index_param)
+    : neutral_mass(neutral_mass_param), charge(charge_param),
+      spectrum(spectrum_param), spectrum_index(spectrum_index_param) {
+    }
+
+    bool operator<(const SpecCharge& other) const {
+      return (neutral_mass < other.neutral_mass);
+    }
+  };
+
+  const vector<SpecCharge>* SpecCharges() const { return &spec_charges_; }
+  vector<Spectrum*>* Spectra() { return &spectra_; }
+
+ private:
+  void MakeSpecCharges();
+
+  vector<Spectrum*> spectra_;
+  vector<SpecCharge> spec_charges_;
+};
+
+#endif // SPECTRUM_COLLECTION_H
diff --git a/src/app/tide/spectrum_preprocess.h b/src/app/tide/spectrum_preprocess.h
new file mode 100644
index 0000000..5942bb5
--- /dev/null
+++ b/src/app/tide/spectrum_preprocess.h
@@ -0,0 +1,203 @@
+// Benjamin Diament
+
+// ObservedPeakSet is a workspace for preprocessing an observed spectrum,
+// passed in as a protocol buffer to PreprocessSpectrum().
+//
+// Memory allocated upon construction may be reused for multiple spectra,
+// provided that the spectrum adheres to the limits of MaxMZ::Global().
+// (This guarantee is provided at search time by code that finds the maximimum
+// values as a side effect of sorting. In search.cc the code is this:
+//    spectra.Sort();
+//    MaxMZ::SetGlobalMax(spectra.HighestMZ());
+// If such a maximumum weren't known in advance the client would construct
+// a fresh ObervedPeakSet.) 
+//
+// PreprocessSpectrum() first performs a normalization procedure, then
+// performs some scaling operations and linear combinations and caches the
+// results.  The normalization procedure is as described in the XCORR
+// literature: the sqrt of each peak intensity is taken, then peaks are
+// divided into 10 regions and normalized to have a maximum intensity of 50
+// within each region. 
+//
+// Notionally what we wish to do is to take a dot product of the normalized peak
+// vector with a potentially large collection of different theoretical peak
+// vectors, one dot product for each candidate peptide. In the interest of
+// efficiency, and because the structure of the theoretical peak vector has some
+// regularities, we can gain efficiency by caching certain results.  The cache,
+// accessed by GetCache(), consists of various transformations of the normalized
+// peak vector.
+// 
+// These efficiencies are availlable because certain patterns are seen in these
+// theoretical spectra over and over. For instance, whenever we see a Y ion at a
+// particular m/z bin in the theoretical spectrum it will have intensity of 50,
+// and the two bins flanking it will have an intensity of 25. If this Y ion were
+// of charge 1 then a neutral loss of ammonia will almost always appear 17 bins
+// to the left with intensity 10.  If this Y ion were of charge 2 then the
+// theoretical spectrum will have a peak of intensity 10 at either 8 or 9 bins
+// to the left -- both versions occur commonly in different theoretical spectra.
+// If this ion were a B ion of charge 1 instead, we would additionally expect a
+// corresponding A ion 28 bins to the left in the theoretical spectrum and a
+// neutral loss of water 18 bins to the left.  Because these patterns are so
+// common, it pays very well to compute these transformations and cache the
+// results.
+//
+// Let's call the normalized peak vector u. The cache itself contains several
+// vectors, corresponding to each of the TheoreticalPeakType's (see
+// theoretical_peak_pair.h). The first few are straightforward:
+//
+// PeakMain --> u 
+// LossPeak --> 10 * u 
+// FlankingPeak --> 25 * u  
+// PrimaryPeak --> 50 * u
+//
+// Actually, instead of computing 10 * u, 25 * u, and 50 * u, we compute 2 * u,
+// 5 * u and 10 * u. This results in dot products that are 5 times too small,
+// but the adjustments can be made at the last moment e.g. when results are
+// displayed. These smaller multiplications allow us to use addition operations
+// instead of multiplications.
+//
+// The remaining cache vectors are linear combinations. The idea is that
+// multiplying the ith entry of the appropriate vector below by the ith entry in
+// a theoretical vector of only B and Y ions will capture the contribution of
+// the flanks and the neutral lossses and A ion all in one operation. 
+//
+// PeakCombinedB1 represents a charge 1 B ion. u[i-1] and u[i+1] are the two
+// flanking bins. u[i-17] represents the loss of NH3 at charge 1, u[i-18]
+// represents the loss of H2O  at charge 1, and u[i-28] represents the A ion at
+// charge 1. It's useful to cache this vector because, most often, a
+// TheoreticalPeakSet will need to represent all six of these peaks at these
+// intensities and relative displacements whenever a B ion of charge 1 is
+// present. Moreover, in the rare case where one or two of these displacements
+// are off by one, say, with respect to the actual TheoreticalPeakSet, a
+// difference vector reprsented by TheoreticalPeakSetDiff (q.v.) accommodates
+// the discrepancy. 
+// The ith entry of this cache vector is:
+//   50*u[i] + 25*u[i-1] + 25*u[i+1] + 10*u[i-17] + 10*u[i-18] + 10*u[i-28]
+//
+// Cache vetors for other common theoretical peak conformations are defined
+// similarly:
+//
+// PeakCombinedY1 represents a charge 1 Y ion, its flanks and neutral losses.
+// The ith entry of this cache vector is:
+//   50*u[i] + 25*u[i-1] + 25*u[i+1] + 10*u[i-17] 
+//
+// Each of the charge 2 peak types below includes an 'a' version and a 'b'
+// version. In the 'a' version the loss of ammonia is 9 Da. per charge.  In the
+// 'b' version the loss of ammonia is 8 Da. per charge. This is because both of
+// these versions occur commonly.
+//    
+// PeakCombinedB2a represents a charge 2 B ion, its flanks and neutral losses.
+// The ith entry of this cache vector is:
+//   50*u[i] + 25*u[i-1] + 25*u[i+1] + 10*u[i-9] + 10*u[i-14]
+//     
+// PeakCombinedY2a represents a charge 2 Y ion, its flanks and neutral losses.
+// The ith entry of this cache vector is:
+//   50*u[i] + 25*u[i-1] + 25*u[i+1] + 10*u[i-9]
+//
+// PeakCombinedB2b represents a charge 2 B ion, its flanks and neutral losses.
+// The ith entry of this cache vector is:
+//   50*u[i] + 25*u[i-1] + 25*u[i+1] + 10*u[i-8] + 10*u[i-9] + 10*u[i-14]
+//
+// PeakCombinedY2b represents a charge 2 Y ion, its flanks and neutral losses.
+// The ith entry of this cache vector is:
+//   50*u[i] + 25*u[i-1] + 25*u[i+1] + 10*u[i-8]
+#ifndef SPECTRUM_PREPROCESS_H
+#define SPECTRUM_PREPROCESS_H
+
+#include <iostream>
+#include <vector>
+#include "theoretical_peak_pair.h"
+#include "max_mz.h"
+#include "mass_constants.h"
+
+using namespace std;
+
+class Spectrum;
+
+class ObservedPeakSet {
+ public:
+    
+  ObservedPeakSet(double bin_width = MassConstants::bin_width_, 
+     double bin_offset = MassConstants::bin_width_, 
+     bool NL = false, bool FP = false)
+    : peaks_(new double[MaxBin::Global().BackgroundBinEnd()]),
+    cache_(new int[MaxBin::Global().CacheBinEnd()*NUM_PEAK_TYPES]) {
+    
+    bin_width_  = bin_width;
+    bin_offset_ = bin_offset;
+    NL_ = NL; //NL means neutral loss
+    FP_ = FP; //FP means flanking peaks
+  }
+
+  ~ObservedPeakSet() { delete[] peaks_; delete[] cache_; }
+
+  const int* GetCache() const { return cache_; } //TODO 261: access restriction?
+
+  // On-the-fly compilation takes the place of this call.
+  int DotProd(const TheoreticalPeakArr& theoretical);
+#ifdef DEBUG
+  int DebugDotProd(const TheoreticalPeakArr& theoretical);
+#endif
+  void PreprocessSpectrum(const Spectrum& spectrum, int charge);
+  void CreateEvidenceVector(const Spectrum& spectrum, double binWidth,
+    double binOffset, int charge, double pepMassMonoMean,
+    int maxPrecurMass, int* evidenceInt);
+
+  // For debugging
+  void Show(const string& name, TheoreticalPeakType peak_type, bool cache_end) {
+    int end = cache_end ? max_mz_.CacheBinEnd() : max_mz_.BackgroundBinEnd();
+    for (int i = 0; i < end; ++i) {
+      double peak = Peak(peak_type, i);
+      if (peak != 0)
+        cout << name << "[" << i << "] = " << peak << endl;
+    }
+  }
+
+#define SHOW(x, y) Show(#x, x, y);
+
+  // For debugging
+  void ShowCache() {
+    SHOW(PeakMain, false);
+    SHOW(LossPeak, false);
+    SHOW(FlankingPeak, false);
+    SHOW(PrimaryPeak, false);
+    SHOW(PeakCombinedB1, true);
+    SHOW(PeakCombinedY1, true);
+    SHOW(PeakCombinedB2, true);
+    SHOW(PeakCombinedY2, true);
+//    SHOW(PeakCombinedB2b, true);
+//    SHOW(PeakCombinedY2b, true);
+  }
+
+  // For debugging
+  void ShowPeaks() {
+    for (int i = 0; i < max_mz_.BackgroundBinEnd(); ++i)
+      if (peaks_[i] != 0)
+        cout << "peaks_[" << i << "] = " << peaks_[i] << endl;
+  }
+
+ private:
+  int& Peak(TheoreticalPeakType peak_type, int index) {
+    // Note the different order than for TheoreticalPeakPair's constructor.
+    // In context of this class, peak_type feels like the primary selector.
+    return cache_[TheoreticalPeakPair(index, peak_type).Code()];
+  }
+  void MakeInteger();
+  void ComputeCache();
+
+  double* peaks_;
+  int* cache_;
+
+  bool NL_;
+  bool FP_;
+  double bin_width_;
+  double bin_offset_;
+
+  MaxBin max_mz_;
+  int cache_end_;
+
+  friend class ObservedPeakTester;
+};
+
+#endif
+
diff --git a/src/app/tide/spectrum_preprocess2.cc b/src/app/tide/spectrum_preprocess2.cc
new file mode 100644
index 0000000..d317b68
--- /dev/null
+++ b/src/app/tide/spectrum_preprocess2.cc
@@ -0,0 +1,563 @@
+// Benjamin Diament
+//
+// Mostly an implementation of ObservedPeakSet::PreprocessSpectrum(). See .h
+// file.
+// 
+// Portions of this code are taken verbatim from Crux, specifically
+// NormalizeEachRegion(). The region-defining code in PreprocessSpectrum() is
+// also from Crux and inherits the attendant arcana. Some of this code is
+// certainly at odds with the published intention of XCORR, but in order to
+// preserve the results from Crux exactly we retain this legacy for now.
+// TODO 251: revisit this.
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <math.h>
+#include <algorithm>
+#include <math.h>
+#include <gflags/gflags.h>
+#include "spectrum_collection.h"
+#include "spectrum_preprocess.h"
+#include "mass_constants.h"
+#include "max_mz.h"
+#include "util/Params.h"
+
+using namespace std;
+
+// Number of m/z regions in XCorr normalization.
+#define NUM_SPECTRUM_REGIONS 10
+
+// Integerization constant for the XCorr p-value calculation.
+#define EVIDENCE_INT_SCALE 500.0
+
+#ifdef DEBUG
+DEFINE_int32(debug_spectrum_id, -1, "Spectrum number to debug");
+DEFINE_int32(debug_charge, 0, "Charge to debug. 0 for all");
+#endif
+
+// This computes that part of the XCORR function where an average value of the
+// peaks within a window surrounding each peak is subtracted from that peak.
+// This version is a linear-time implementation of the subtraction. Linearity is
+// accomplished by computing an array of partial sums.
+static void SubtractBackground(double* observed, int end) {
+  // operation is as follows: new_observed = observed -
+  // average_within_window but average is computed as if the array
+  // extended infinitely: denominator is same throughout array, even
+  // near edges (where fewer elements have been summed)
+  static const double multiplier = 1.0 / (MAX_XCORR_OFFSET * 2);
+
+  double total = 0;
+  vector<double> partial_sums(end+1);
+  for (int i = 0; i < end; ++i)
+    partial_sums[i] = (total += observed[i]);
+  partial_sums[end] = total;
+
+  for (int i = 0; i < end; ++i) {
+    int right_index = min(end, i + MAX_XCORR_OFFSET);
+    int left_index = max(0, i - MAX_XCORR_OFFSET - 1);
+    observed[i] -= multiplier * (partial_sums[right_index] - partial_sums[left_index] - observed[i]);
+  }
+}
+
+void ObservedPeakSet::PreprocessSpectrum(const Spectrum& spectrum,
+                                       int charge ) {
+#ifdef DEBUG
+  bool debug = (FLAGS_debug_spectrum_id == spectrum.SpectrumNumber()
+                && (FLAGS_debug_charge == 0 || FLAGS_debug_charge == charge));
+  if (debug)
+    debug = true; // allows a breakpoint
+#endif
+  double precursor_mz = spectrum.PrecursorMZ();
+  double proton = MassConstants::proton;
+  double experimental_mass_cut_off = (precursor_mz-proton)*charge+proton + 50;
+  double max_peak_mz = spectrum.M_Z(spectrum.Size()-1);
+
+  assert(MaxBin::Global().MaxBinEnd() > 0);
+
+  max_mz_.InitBin(min(experimental_mass_cut_off, max_peak_mz));
+  cache_end_ = MaxBin::Global().CacheBinEnd() * NUM_PEAK_TYPES;
+
+  memset(peaks_, 0, sizeof(double) * MaxBin::Global().BackgroundBinEnd());
+
+  if (Params::GetBool("skip-preprocessing")) {
+    for (int i = 0; i < spectrum.Size(); ++i) {
+      double peak_location = spectrum.M_Z(i);
+      if (peak_location >= experimental_mass_cut_off) {
+        continue;
+      }
+      int mz = MassConstants::mass2bin(peak_location);
+      double intensity = spectrum.Intensity(i);
+      if (intensity > peaks_[mz]) {
+        peaks_[mz] = intensity;
+      }
+    }
+  } else {
+    bool remove_precursor = Params::GetBool("remove-precursor-peak");
+    double precursor_tolerance = Params::GetDouble("remove-precursor-tolerance");
+
+    // Fill peaks
+    int largest_mz = 0;
+    double highest_intensity = 0;
+    for (int i = 0; i < spectrum.Size(); ++i) {
+      double peak_location = spectrum.M_Z(i);
+      if (peak_location >= experimental_mass_cut_off ||
+          (remove_precursor && fabs(peak_location - precursor_mz) <= precursor_tolerance)) {
+        continue;
+      }
+
+      double intensity = spectrum.Intensity(i);
+      int mz = MassConstants::mass2bin(peak_location);
+      if ((mz > largest_mz) && (intensity > 0)) {
+        largest_mz = mz;
+      }
+      
+      intensity = sqrt(intensity);
+      if (intensity > highest_intensity) {
+        highest_intensity = intensity;
+      }
+      if (intensity > peaks_[mz]) {
+        peaks_[mz] = intensity;
+      }
+    }
+
+    double intensity_cutoff = highest_intensity * 0.05;
+
+    double normalizer = 0.0;
+    int region_size = largest_mz / NUM_SPECTRUM_REGIONS + 1;
+    for (int i = 0; i < NUM_SPECTRUM_REGIONS; ++i) {
+      highest_intensity = 0;
+      int high_index = i;
+      for (int j = 0; j < region_size; ++j) {
+        int index = i * region_size + j;
+        if (peaks_[index] <= intensity_cutoff) {
+          peaks_[index] = 0;
+        }
+        if (peaks_[index] > highest_intensity) {
+          highest_intensity = peaks_[index];
+          high_index = index;
+        }
+      }
+      if (highest_intensity == 0) {
+        continue;
+      }
+      normalizer = 50.0 / highest_intensity;
+      for (int j = 0; j < region_size; ++j) {
+        int index = i * region_size + j;
+        if (peaks_[index] != 0) {
+          peaks_[index] *= normalizer;
+        }
+      }
+    }
+
+#ifdef DEBUG
+    if (debug) {
+      cout << "GLOBAL MAX MZ: " << MaxMZ::Global().MaxBin() << ", " << MaxMZ::Global().BackgroundBinEnd()
+           << ", " << MaxMZ::Global().CacheBinEnd() << endl;
+      cout << "MAX MZ: " << max_mz_.MaxBin() << ", " << max_mz_.BackgroundBinEnd()
+           << ", " << max_mz_.CacheBinEnd() << endl;
+      ShowPeaks();
+      cout << "====== SUBTRACTING BACKGROUND ======" << endl;
+    }
+#endif
+  }
+  SubtractBackground(peaks_, max_mz_.BackgroundBinEnd());
+
+#ifdef DEBUG
+  if (debug)
+    ShowPeaks();
+#endif
+  MakeInteger();
+  ComputeCache();
+#ifdef DEBUG
+  if (debug)
+    ShowCache();
+#endif
+}
+
+/* Calculates vector of cleavage evidence for an observed spectrum, using XCorr
+ * b/y/neutral peak sets and heights.
+ *
+ * Written by Jeff Howbert, May, 2013 (as function createEvidenceArrayObserved). 
+ * Extended and modified by Jeff Howbert, October, 2013.
+ * Ported to and integrated with Tide by Jeff Howbert, November, 2013.
+ */
+void ObservedPeakSet::CreateEvidenceVector(
+  const Spectrum& spectrum,
+  double binWidth,
+  double binOffset,
+  int charge,
+  double pepMassMonoMean,
+  int maxPrecurMass,
+  int* evidenceInt
+) {
+
+  // TODO preserved from PreprocessSpectrum; may delete in future
+#ifdef DEBUG
+  bool debug = (FLAGS_debug_spectrum_id == spectrum.SpectrumNumber()
+                && (FLAGS_debug_charge == 0 || FLAGS_debug_charge == charge));
+  if (debug) {
+    debug = true; // allows a breakpoint
+  }
+#endif
+  // double experimental_mass_cut_off = (precursor_mz-proton)*charge+proton + 50;
+  // double max_peak_mz = spectrum.M_Z(spectrum.Size()-1);
+  assert(MaxBin::Global().MaxBinEnd() > 0);
+  // max_mz_.Init(min(experimental_mass_cut_off, max_peak_mz));
+  // TODO end preserved
+
+  // TODO need to review these constants, decide which can be moved to parameter file
+  const int nRegion = NUM_SPECTRUM_REGIONS;
+  const double maxIntensPerRegion = 50.0;
+  const double precursorMZExclude = 15.0;
+  const double massNH3Mono = 17.02655;     // mass of NH3 (monoisotopic)
+  const double massCOMono =  27.9949;      // mass of CO (monoisotopic)
+  const double massH2OMono = 18.010564684; // mass of water (monoisotopic)
+  const double massHMono = 1.0078246;      // mass of hydrogen (monoisotopic)
+  const double BYHeight = 50.0;
+  const double NH3LossHeight = 10.0;    
+  const double COLossHeight = 10.0;    // for creating a ions on the fly from b ions
+  const double H2OLossHeight = 10.0;
+  const double FlankingHeight = BYHeight / 2;;
+  // TODO end need to review
+  bool flanking_peak = Params::GetBool("use-flanking-peaks");
+  bool neutral_loss_peak = Params::GetBool("use-neutral-loss-peaks");
+
+  int ma;
+  int pc;
+  int ionBin;
+  double bIonMass;
+  double yIonMass;
+  double ionMZMultiCharge;
+  double ionMassNH3Loss;
+  double ionMassCOLoss;
+  double ionMassH2OLoss;
+
+  double* evidence = new double[maxPrecurMass];
+  double* intensArrayObs = new double[maxPrecurMass];
+  int* intensRegion = new int[maxPrecurMass];
+
+  for (ma = 0; ma < maxPrecurMass; ma++) {
+    evidence[ma] = 0.0;
+    evidenceInt[ma] = 0;
+    intensArrayObs[ma] = 0.0;
+    intensRegion[ma] = -1;
+  }
+
+  double precurMz = spectrum.PrecursorMZ();
+  int nIon = spectrum.Size();
+  int precurCharge = charge;
+  double experimentalMassCutoff = precurMz * precurCharge + 50.0;
+  double proton = MassConstants::proton;
+
+  // TODO preserved from PreprocessSpectrum only for historical reference; get rid of eventually  
+  // // Fill peaks
+  // int largest_mz = 0;
+  // double highest_intensity = 0;
+  // for (int i = 0; i < spectrum.Size(); ++i) {
+    // double peak_location = spectrum.M_Z(i);
+    // if(peak_location >= experimental_mass_cut_off)
+      // continue;
+
+    // double intensity = spectrum.Intensity(i);
+    // int mz = (int)(peak_location / bin_width + 0.5);
+    // if ((mz > largest_mz) && (intensity > 0))
+      // largest_mz = mz;
+
+    // intensity = sqrt(intensity);
+    // if (intensity > highest_intensity)
+      // highest_intensity = intensity;
+    // if (intensity > peaks_[mz])
+      // peaks_[mz] = intensity;
+  // }
+
+  // double intensity_cutoff = highest_intensity * 0.05;
+
+  // int region_size = largest_mz / NUM_SPECTRUM_REGIONS;
+  // for (int i = 0; i < NUM_SPECTRUM_REGIONS; ++i) {
+    // highest_intensity = 0;
+    // for (int j = 0; j < region_size; ++j) {
+      // int index = i * region_size + j;
+      // if (peaks_[index] <= intensity_cutoff)
+	// peaks_[index] = 0;
+      // if (peaks_[index] > highest_intensity)
+	// highest_intensity = peaks_[index];
+    // }
+    // if (highest_intensity == 0)
+      // continue;
+    // double normalizer = 50.0/highest_intensity;
+    // for (int j = 0; j < region_size; ++j) {
+      // int index = i * region_size + j;
+      // if (peaks_[index] != 0)
+	// peaks_[index] *= normalizer;
+    // }    
+  // }
+  // TODO end preserved
+
+  double maxIonMass = 0.0;
+  double maxIonIntens = 0.0;
+  for (int ion = 0; ion < nIon; ion++) {
+    double ionMass = spectrum.M_Z(ion);
+    double ionIntens = spectrum.Intensity(ion);
+    if (ionMass >= experimentalMassCutoff) {
+      continue;
+    }
+    if (maxIonMass < ionMass) {
+      maxIonMass = ionMass;
+    }
+    if (maxIonIntens < ionIntens) {
+      maxIonIntens = ionIntens;
+    }
+  }
+  int regionSelector = (int)floor(MassConstants::mass2bin(maxIonMass) / (double)nRegion);
+  for (int ion = 0; ion < nIon; ion++) {
+    double ionMass = spectrum.M_Z(ion);
+    double ionIntens = spectrum.Intensity(ion);
+    if (ionMass >= experimentalMassCutoff) {
+      continue;
+    }
+    if (ionMass > precurMz - precursorMZExclude && ionMass < precurMz + precursorMZExclude) {
+      continue;
+    }
+    ionBin = MassConstants::mass2bin(ionMass);
+    int region = (int)floor((double)(ionBin) / (double)regionSelector);
+    if (region >= nRegion) {
+      region = nRegion - 1;
+    }
+    intensRegion[ionBin] = region;
+    if (intensArrayObs[ionBin] < ionIntens) {
+      intensArrayObs[ionBin] = ionIntens;
+    }
+  }
+
+  maxIonIntens = sqrt(maxIonIntens);
+  for (ma = 0; ma < maxPrecurMass; ma++) {
+    intensArrayObs[ma] = sqrt(intensArrayObs[ma]);
+    if (intensArrayObs[ma] <= 0.05 * maxIonIntens) {
+      intensArrayObs[ma] = 0.0;
+    }
+  }
+
+  double* maxRegion = new double[nRegion];
+  for (int re = 0; re < nRegion; re++) {
+    maxRegion[re] = 0.0;
+  }
+  for (ma = 0; ma < maxPrecurMass; ma++) {
+    int reg = intensRegion[ma];
+    if (reg >= 0 && maxRegion[reg] < intensArrayObs[ma]) {
+      maxRegion[reg] = intensArrayObs[ma];
+    }
+  }
+  for (ma = 0; ma < maxPrecurMass; ma++) {
+    int reg = intensRegion[ma];
+    if (reg >= 0 && maxRegion[reg] > 0.0) {
+      intensArrayObs[ma] *= (maxIntensPerRegion / maxRegion[reg]);
+    }
+  }
+  delete [] maxRegion;
+
+  // ***** Adapted from tide/spectrum_preprocess2.cc.
+  // TODO replace, if possible, with call to 
+  // static void SubtractBackground(double* observed, int end).
+  // Note numerous small changes from Tide code.
+  double multiplier = 1.0 / (MAX_XCORR_OFFSET * 2.0 + 1.0);
+  double total = 0.0;
+  double* partial_sums = new double[maxPrecurMass];
+  for (int i = 0; i < maxPrecurMass; ++i) {
+    partial_sums[ i ] = ( total += intensArrayObs[i]);
+  }
+  for (int i = 0; i < maxPrecurMass; ++i) {
+    int right_index = std::min(maxPrecurMass - 1, i + MAX_XCORR_OFFSET);
+    int left_index = std::max(0, i - MAX_XCORR_OFFSET - 1);
+    intensArrayObs[i] -= multiplier * (partial_sums[right_index] - partial_sums[left_index]);
+  }
+  delete [] partial_sums;
+  
+  int binFirst = MassConstants::mass2bin(30);
+  int binLast = MassConstants::mass2bin(pepMassMonoMean - 47);
+
+  for (ma = binFirst; ma <= binLast; ma++) {
+    // b ion
+    bIonMass = (ma-0.5+binOffset) * binWidth ;
+    ionBin = MassConstants::mass2bin(bIonMass);
+    evidence[ma] = evidence[ma] + intensArrayObs[ionBin] * BYHeight;
+    for (pc = 2; pc < precurCharge; pc++) {
+      evidence[ma] = evidence[ma] + intensArrayObs[MassConstants::mass2bin(bIonMass, pc)] * BYHeight;
+    }
+    // y ion
+    yIonMass = pepMassMonoMean + 2 * massHMono - bIonMass;
+    ionBin = MassConstants::mass2bin(yIonMass);
+    evidence[ma] = evidence[ma] + intensArrayObs[ionBin] * BYHeight;
+    for (pc = 2; pc < precurCharge; pc++) {
+      evidence[ma] = evidence[ma] + intensArrayObs[MassConstants::mass2bin(yIonMass, pc)] * BYHeight;
+    }
+    if (flanking_peak == true){
+
+      //flanking peaks for b ions
+      ionBin = MassConstants::mass2bin(bIonMass, 1);
+      evidence[ma] = evidence[ma] + intensArrayObs[ionBin + 1] * FlankingHeight;
+      evidence[ma] = evidence[ma] + intensArrayObs[ionBin - 1] * FlankingHeight;
+      for (pc = 2; pc < precurCharge; pc++) {
+        evidence[ma] = evidence[ma] + intensArrayObs[MassConstants::mass2bin(bIonMass, pc) + 1] * FlankingHeight;
+        evidence[ma] = evidence[ma] + intensArrayObs[MassConstants::mass2bin(bIonMass, pc) - 1] * FlankingHeight;
+      }
+      //flanking peaks for b ions
+      ionBin = MassConstants::mass2bin(yIonMass, pc);
+      evidence[ma] = evidence[ma] + intensArrayObs[ionBin + 1] * FlankingHeight;
+      evidence[ma] = evidence[ma] + intensArrayObs[ionBin - 1] * FlankingHeight;
+      for (pc = 2; pc < precurCharge; pc++) {
+        evidence[ma] = evidence[ma] + intensArrayObs[MassConstants::mass2bin(yIonMass, pc) + 1] * FlankingHeight;
+        evidence[ma] = evidence[ma] + intensArrayObs[MassConstants::mass2bin(yIonMass, pc) - 1] * FlankingHeight;
+      }
+    }
+    if (neutral_loss_peak == true){
+      // NH3 loss from b ion
+      ionMassNH3Loss = bIonMass - massNH3Mono;
+      ionBin = MassConstants::mass2bin(ionMassNH3Loss);
+      evidence[ma] = evidence[ma] + intensArrayObs[ionBin] * NH3LossHeight;
+      for (pc = 2; pc < precurCharge; pc++) {
+        evidence[ma] = evidence[ma] + intensArrayObs[MassConstants::mass2bin(ionMassNH3Loss, pc)] * NH3LossHeight;
+      }
+      // NH3 loss from y ion
+      ionMassNH3Loss = yIonMass - massNH3Mono;
+      ionBin = MassConstants::mass2bin(ionMassNH3Loss);//(int)floor(ionMassNH3Loss / binWidth + 1.0 - binOffset);
+      evidence[ma] = evidence[ma] + intensArrayObs[ionBin] * NH3LossHeight;
+      for (pc = 2; pc < precurCharge; pc++) {
+        evidence[ma] = evidence[ma] + intensArrayObs[MassConstants::mass2bin(ionMassNH3Loss, pc)] * NH3LossHeight;
+      }
+      // CO and H2O loss from b ion
+      ionMassCOLoss = bIonMass - massCOMono;
+      ionMassH2OLoss = bIonMass - massH2OMono;
+      evidence[ma] = evidence[ma] + intensArrayObs[MassConstants::mass2bin(ionMassCOLoss)] * COLossHeight;
+      evidence[ma] = evidence[ma] + intensArrayObs[MassConstants::mass2bin(ionMassH2OLoss)] * H2OLossHeight;
+      for (pc = 2; pc < precurCharge; pc++) {
+        evidence[ma] = evidence[ma] + intensArrayObs[MassConstants::mass2bin(ionMassCOLoss, pc)] * COLossHeight;
+        evidence[ma] = evidence[ma] + intensArrayObs[MassConstants::mass2bin(ionMassH2OLoss, pc)] * H2OLossHeight;
+      }
+      // H2O loss from y ion
+      ionMassH2OLoss = yIonMass - massH2OMono;
+      evidence[ma] = evidence[ma] + intensArrayObs[MassConstants::mass2bin(ionMassH2OLoss)] * H2OLossHeight;
+      for (pc = 2; pc < precurCharge; pc++) {
+        evidence[ma] = evidence[ma] + intensArrayObs[MassConstants::mass2bin(ionMassH2OLoss, pc)] * H2OLossHeight;
+      }
+    }
+  }
+
+  // discretize evidence array
+  for (ma = 0; ma < maxPrecurMass; ma++) {
+    evidenceInt[ma] = (int)floor(evidence[ma] / EVIDENCE_INT_SCALE + 0.5);
+  }
+  // clean up
+  delete [] evidence;
+  delete [] intensArrayObs;
+  delete [] intensRegion;
+
+  // TODO preserved from PreprocessSpectrum; may delete in future
+#ifdef DEBUG
+  if (debug) {
+    cout << "GLOBAL MAX MZ: " << MaxMZ::Global().MaxBin() << ", " << MaxMZ::Global().BackgroundBinEnd()
+         << ", " << MaxMZ::Global().CacheBinEnd() << endl;
+    cout << "MAX MZ: " << max_mz_.MaxBin() << ", " << max_mz_.BackgroundBinEnd()
+         << ", " << max_mz_.CacheBinEnd() << endl;
+    ShowPeaks();
+    cout << "====== SUBTRACTING BACKGROUND ======" << endl;
+  }
+#endif
+#ifdef DEBUG
+  if (debug)
+    ShowPeaks();
+#endif
+  // TODO end preserved
+}
+
+inline int round_to_int(double x) {
+  if (x >= 0)
+    return int(x + 0.5);
+  return int(x - 0.5);
+}
+
+void ObservedPeakSet::MakeInteger() {
+  // essentially cheap fixed-point arithmetic for peak intensities
+  for(int i = 0; i < max_mz_.BackgroundBinEnd(); i++)
+    Peak(PeakMain, i) = round_to_int(peaks_[i]*50000);
+}
+
+// See .h file. Computes and stores all transformations of the observed peak
+// set.
+void ObservedPeakSet::ComputeCache() {
+  for (int i = 0; i < max_mz_.BackgroundBinEnd(); ++i) {
+    // Instead of computing 10 * x, 25 * x, and 50 * x, we compute 2 *
+    // x, 5 * x and 10 * x. This results in dot products that are 5
+    // times too small, but the adjustments can be made at the last
+    // moment e.g. when results are displayed. These smaller
+    // multiplications allow us to use addition operations instead of
+    // multiplications.
+    int x = Peak(PeakMain, i);
+    int y = x+x;
+    Peak(LossPeak, i) = y;
+    int z = y+y+x;
+    Peak(FlankingPeak, i) = z;
+    Peak(PrimaryPeak, i) = z+z;
+  }
+
+  for (int i = max_mz_.BackgroundBinEnd() * NUM_PEAK_TYPES; i < cache_end_; ++i) {
+    cache_[i] = 0;
+  }
+
+  for (int i = 0; i < max_mz_.CacheBinEnd(); ++i) {
+    int flanks = Peak(PrimaryPeak, i);
+    if ( FP_ == true) {
+        if (i > 0) {
+          flanks += Peak(FlankingPeak, i-1);
+        }
+        if (i < max_mz_.CacheBinEnd() - 1) {
+          flanks += Peak(FlankingPeak, i+1);
+        }
+    }
+    int Y1 = flanks;
+    if ( NL_ == true) {
+        if (i > MassConstants::BIN_NH3) {
+          Y1 += Peak(LossPeak, i-MassConstants::BIN_NH3);
+        }
+        if (i > MassConstants::BIN_H2O) {
+          Y1 += Peak(LossPeak, i-MassConstants::BIN_H2O);
+        }
+    }
+    Peak(PeakCombinedY1, i) = Y1;
+    int B1 = Y1;
+    Peak(PeakCombinedB1, i) = B1;
+    Peak(PeakCombinedY2, i) = flanks;
+    Peak(PeakCombinedB2, i) = flanks;
+  }
+}
+
+// This dot product is replaced by calls to on-the-fly compiled code.
+int ObservedPeakSet::DotProd(const TheoreticalPeakArr& theoretical) {
+  int total = 0;
+  TheoreticalPeakArr::const_iterator i = theoretical.begin();
+  for (; i != theoretical.end(); ++i) {
+    //if (i->Code() >= cache_end_)
+    //  break;
+    total += cache_[i->Code()];
+  }
+  return total;
+}
+
+#if 0
+int ObservedPeakSet::DebugDotProd(const TheoreticalPeakArr& theoretical) {
+  cout << "cache_end_=" << cache_end_ << endl;
+  int total = 0;
+  TheoreticalPeakArr::const_iterator i = theoretical.begin();
+  for (; i != theoretical.end(); ++i) {
+    cout << "DotProd Lookup(" << i->Bin() << "," << i->Type() << "):";
+    if (i->Code() >= cache_end_) {
+      cout << "code=" << i->Code() << "past cache_end_=" << cache_end_ << "; ignoring" << endl;
+      continue;
+    }
+    total += cache_[i->Code()];
+    cout << cache_[i->Code()] << "; total=" << total << endl;
+  }
+  return total;
+}
+#endif
diff --git a/src/app/tide/theoretical_peak_pair.h b/src/app/tide/theoretical_peak_pair.h
new file mode 100644
index 0000000..8a96ef4
--- /dev/null
+++ b/src/app/tide/theoretical_peak_pair.h
@@ -0,0 +1,69 @@
+// Benjamin Diament
+
+// A TheoreticalPeakPair represents the ordered pair (bucket, type) where
+// bucket is an integer refering to a bucketed m/z position in the theoretical
+// spectrum, and type identifies the type of the peak. This type may be
+// LossPeak, FlankingPeak, PrimaryPeak which represents an intensity, or it could be one of
+// the combined peak types (see TheoreticalPeakType below) which represent a 
+// linear combination of several peaks.
+#ifndef THEORETICAL_PEAK_PAIR_H
+#define THEORETICAL_PEAK_PAIR_H
+
+#include <utility>
+#include "fixed_cap_array.h"
+
+using namespace std;
+
+enum TheoreticalPeakType {
+  PeakMain = 0,
+  LossPeak = 1,
+  FlankingPeak = 2,
+  PrimaryPeak = 3,
+  PeakCombinedB1 = 4, // Represents charge 1 B ion, its flanks and neutral losses.
+  PeakCombinedY1 = 5, // Represents charge 1 Y ion, its flanks and neutral losses.
+  // Each of the charge 2 peak types below includes an 'a' version and a 'b'
+  // version. In the 'a' version the loss of ammonia is 9 Da. per charge.
+  // In the 'b' version the loss of ammonia is 8 Da. per charge.
+  PeakCombinedB2 = 6, // Represents charge 2 B ion, its flanks and neutral losses.
+  PeakCombinedY2 = 7, // Represents charge 2 Y ion, its flanks and neutral losses.
+//  PeakCombinedB2b = 8, // Represents charge 2 B ion, its flanks and neutral losses.
+//  PeakCombinedY2b = 9, // Represents charge 2 Y ion, its flanks and neutral losses.
+
+  NUM_PEAK_TYPES = 10 // Total number of peak types.
+};
+
+class TheoreticalPeakPair {
+ public:
+  TheoreticalPeakPair() {} // no intialization; beware.
+
+  explicit TheoreticalPeakPair(int code) : code_(code) {}
+
+  TheoreticalPeakPair(int bin, TheoreticalPeakType peak_type)
+    : code_(bin * NUM_PEAK_TYPES + peak_type) {
+  }
+
+  // Bin() and Type() give the components of the ordered pair as described
+  // above. Code() should be used for serialization to and from a file, and
+  // for indexing into the precomputed cache of transformed observed peaks.
+  // Note that Bin() and Type() are not fast; Code() is fast.
+  int Bin() const { return code_ / NUM_PEAK_TYPES; }
+  int Type() const { return code_ % NUM_PEAK_TYPES; }
+  int Code() const { return code_; }
+
+  bool operator<(const TheoreticalPeakPair& other) const {
+    return code_ < other.code_;
+  }
+
+  bool operator>(const TheoreticalPeakPair& other) const {
+    return code_ > other.code_;
+  }
+
+ private:
+  // code_ represents the bin position and the peak type together. See
+  // constructors and accessors.
+  int code_;
+};
+
+typedef FixedCapacityArray<TheoreticalPeakPair> TheoreticalPeakArr;
+
+#endif // THEORETICAL_PEAK_PAIR_H
diff --git a/src/app/tide/theoretical_peak_set.h b/src/app/tide/theoretical_peak_set.h
new file mode 100644
index 0000000..2928e8a
--- /dev/null
+++ b/src/app/tide/theoretical_peak_set.h
@@ -0,0 +1,790 @@
+// Benjamin Diament
+
+// A TheoreticalPeakSet is an abstract class representing the collection of
+// theoretical peaks corresponding to a peptide. Its memory is designed to be
+// reusable, so it functions as a "workspace" for figuring where the
+// theoretical peaks ought to be. The expected usage pattern is as follows:
+//
+// TheoreticalPeakSet workspace; // Some construction params may be required.
+// Peptide peptide; // Assume already initialized.
+// workspace.Clear(); // Memory gets reused
+// For each left-substring of peptide, call workspace.AddBIon()
+// For each right-substring of peptide, call workspace.AddYIon()
+//
+// After the B and Y ions have been added the client may retreive the
+// TheoreticalPeakArr by a call to workspace.GetPeaks(). Peaks are then written
+// into the provided arrays (specified in the arguments). To avoid unnecessary
+// copying, for most subclasses, GetPeaks() will take the final steps necessary
+// to generate the peaks and write them directly to the client-specified arrays.
+// There are both "positive" peaks and "negative" peaks that may be written,
+// though some subclasses will never write any negative peaks. When present,
+// these negative peaks represent corrections made to the peaks in the positive
+// set. This comes up in cases where the workspace in question actually
+// represents a difference between two TheoreticalPeakSets. See
+// TheoreticalPeakSetDiff for example.
+//
+// Different subclasses of TheoreticalPeakSet have varying characteristics, such
+// as the following:
+// 
+//   o  space requirements (both in memory and on disk) 
+//   o  time required to generate the peak set
+//   o  sparsity (affects space requirements and dot-product time)
+//   o  accuracy with respect to the "correct" value of the XCORR function.
+// 
+// Here are some the characteristics:
+// 
+//   TheoreticalPeakSetMakeAll           exact, slow, all peaks explicit
+//   TheoreticalPeakSetBYSparse          inexact, fast, only B and Y explicit,
+//                                       significantly larger than Diff. 
+//   TheoreticalPeakSetBYSparseOrdered   same, slightly slower to generate
+//   TheoreticalPeakSetBYAll             inexact but same as BYSparse, slow, 
+//                                       all peaks explicit
+//   TheoreticalPeakSetDiff              = MakeAll - BYAll: slow to generate,
+//                                       very sparse, completely different
+//                                       function from MakeAll. Gets stored at
+//                                       indexing and retrieved at search time.
+//   TheoreticalPeakSetSparse            For testing: very slow, explicitly
+//                                       computes both Diff and BYSparse.
+// 
+// Let the following vectors be defined: 
+//   
+//   x is the vector of theoretical peaks created by MakeAll
+//   y is the vector of theoretical peaks created by BYSparse
+//   z is the vector of theoretical peaks created by Diff
+//   w is the vector of theoretical peaks created by BYAll
+//   u is the vector of observed peaks with the background subtracted.
+//   v is the vector that is a linear combination of shifts of u as computed
+//     in ObservedPeakSet::ComputeCache(). E.g. for charge 1 the ith element
+//     of v might be (see spectrum_preprocess.h): 
+//           v[i] = 50*u[i] + 25*u[i-1] + 25*u[i+1] + 10*u[i-17]
+// 
+// y is five times sparser than w and includes only the positions of the B and Y
+// ions. BYAll and BYSparse are related as follows: <w, u> = <y, v>. The correct
+// value of the XCORR is <u, x>.  But computing with MakeAll is slow.  So,
+// instead we do the following: at index time we compute and store z = x - w.
+// At search time we compute <y, v> + <z, u>. This incurs the cost of storing z
+// but generating only y, which can be done quickly. Since both y and z are
+// sparse (though z is much sparser) the above dot products can be computed
+// quickly at search time.
+// 
+// The inexactness of BYAll (and BYSparse by extension) is due to two factors.
+// First, an exact rendering of the theoretical peaks such as that in MakeAll
+// would check for duplications (two peaks in the same bin). BYAll simply
+// generates all B and Y peaks without checking for duplications, as this saves
+// time when we generate BYSparse. The duplications get handled by Diff (the z
+// vector above). Second, the peaks generated by BYAll (the w vector above)
+// aren't quite correct: w is not exactly equal to x because the positions of
+// the neutral loss ions at 17 and 18 Da. away may instead be at 18 and 19
+// Da. away after binning.  Similarly, at charge 2, neutral loss ions may be
+// either at 8 and 9 m/z away or at 9 and 10 m/z away. All these variations are
+// accounted for when we subtract (x - w) to store the Diff.
+// 
+// TODO 253: a final descision on whether to use TheoreticalPeakSetBYSparse or
+// TheoreticalPeakSetBYSparseOrdered at search time is yet to be made. Neither
+// dominated the other in testing done so far.
+
+#ifndef THEORETICAL_PEAK_SET_H
+#define THEORETICAL_PEAK_SET_H
+
+#include <iostream>
+#include <algorithm>
+#include "mass_constants.h"
+//#include "peptide.h"
+#include "peptides.pb.h"
+#include "max_mz.h"
+#include "theoretical_peak_pair.h"
+#include "math.h"
+#include <functional>
+
+using namespace std;
+typedef google::protobuf::RepeatedField<int>::const_iterator FieldIter;
+
+class TheoreticalPeakSet {
+ public:
+  // Sub-classes need to support this interface (see above).
+  // A do-nothing stub is provided for GetNegs().
+  virtual void Clear() = 0;
+  virtual void AddYIon(double mass, int charge) = 0;
+  virtual void AddBIon(double mass, int charge) = 0;
+  virtual void GetPeaks(TheoreticalPeakArr* peaks_charge_1,
+                        TheoreticalPeakArr* negs_charge_1,
+                        TheoreticalPeakArr* peaks_charge_2,
+                        TheoreticalPeakArr* negs_charge_2,
+                        const pb::Peptide* peptide = NULL) = 0;
+  
+ protected:
+  ////////////////////////////////////////////////////
+  // Utility functions for subclasses
+  //
+  // Many of these fucnctions refer to MaxMZ::Global(). At search time 
+  // MaxMZ::Global() will be set at the end of the range of
+  // the observed spectra so we need not calculate theoretical peaks
+  // beyond this limit.
+  ////////////////////////////////////////////////////
+
+  // Copy src to dest, but for each bin copy only the highest intensity peak.
+  static void RemoveDups(const TheoreticalPeakArr& src,
+                         TheoreticalPeakArr* dest) {
+    TheoreticalPeakArr::const_iterator i = src.begin();
+    for (; i != src.end(); ++i) {
+      // find last element with current index, that one being the
+      // largest intensity
+      int index = i->Bin();
+      if (MaxBin::Global().MaxBinEnd() > 0 
+          && index >= MaxBin::Global().CacheBinEnd())
+        break;
+      for (++i; i != src.end() && i->Bin() == index; ++i);
+      --i;
+      dest->push_back(*i);
+    }
+  }
+
+  static void AddPeak(TheoreticalPeakArr* dest, int index,
+                      TheoreticalPeakType intensity) {
+    TheoreticalPeakPair peak(index, intensity);
+    // must insert in nondecreasing order
+    assert(dest->size() == 0 || peak.Code() >= dest->back().Code());
+    dest->push_back(peak);
+  }
+
+/*  static void AddPeakUnordered(TheoreticalPeakArr* dest, int index,
+                               TheoreticalPeakType intensity) {
+    TheoreticalPeakPair peak(index, intensity);
+    dest->push_back(peak);
+  }
+*/  static void AddPeakUnordered(TheoreticalPeakArr* dest, int index,
+                               TheoreticalPeakType intensity, TheoreticalPeakArr* otherset) {
+    TheoreticalPeakPair peak(index, intensity);
+    bool found = false;
+    for (TheoreticalPeakArr::iterator itr = dest->begin(); itr < dest->end(); itr++){
+      if (itr->Bin() == peak.Bin()){
+        found = true;
+        break;
+     }
+    }
+
+    for (TheoreticalPeakArr::iterator itr2 = otherset->begin(); itr2 < otherset->end(); itr2++){
+      if (itr2->Bin() == peak.Bin()){
+        found = true;
+        break;
+      }
+    }
+    if (!found){
+      dest->push_back(peak);
+    }
+  }
+  
+  // Append src to dest.
+  static void Copy(const TheoreticalPeakArr& src,
+                   TheoreticalPeakArr* dest) {
+    // Confirm that src is already sorted.
+    assert(adjacent_find(src.begin(), src.end(), 
+                         greater<TheoreticalPeakPair>()) == src.end());
+    TheoreticalPeakArr::const_iterator i = src.begin();
+    if (MaxBin::Global().MaxBinEnd() > 0) {
+      int end = MaxBin::Global().CacheBinEnd() * NUM_PEAK_TYPES;
+      for (; (i != src.end()) && (i->Code() < end); ++i)
+        dest->push_back(*i);
+    } else {
+      for (; i != src.end(); ++i)
+        dest->push_back(*i);
+    }
+  }
+
+  static void CopyUnordered(const TheoreticalPeakArr& src,
+                            TheoreticalPeakArr* dest) {
+    TheoreticalPeakArr::const_iterator i = src.begin();
+    if (MaxBin::Global().MaxBinEnd() > 0) {
+      int end = MaxBin::Global().CacheBinEnd() * NUM_PEAK_TYPES;
+      for (; i != src.end(); ++i) {
+        if (i->Code() < end)
+          dest->push_back(*i);
+      }
+    } else {
+      for (; i != src.end(); ++i)
+        dest->push_back(*i);
+    }
+  }
+
+  // Compute x - y as a vector difference. Store positive peaks in pos, 
+  // negative peaks in neg. TODO 262: can simply be expressed as symmetric set
+  // difference between x and y.
+  static void Diff(const TheoreticalPeakArr& x,
+                   const TheoreticalPeakArr& y,
+                   TheoreticalPeakArr* pos,
+                   TheoreticalPeakArr* neg) {
+    TheoreticalPeakArr::const_iterator x_iter = x.begin();
+    TheoreticalPeakArr::const_iterator y_iter = y.begin();
+    while (x_iter != x.end() && y_iter != y.end()) {
+      if (*x_iter < *y_iter) {
+        pos->push_back(*x_iter++);
+      } else if (*y_iter < *x_iter) {
+        neg->push_back(*y_iter++);
+      } else {
+        // if equal, they cancel; push nothing!
+        x_iter++; y_iter++;
+      }
+    }
+    for (; x_iter != x.end(); ++x_iter)
+      pos->push_back(*x_iter);
+    for (; y_iter != y.end(); ++y_iter)
+      neg->push_back(*y_iter);
+  }
+
+  // Copy from peaks from protocol buffer to dest. 
+  static void CopyExceptions(const google::protobuf::RepeatedField<int>& src,
+                             TheoreticalPeakArr* dest) {
+    // dest may be unordered!
+    // The protocol buffer stores deltas between peak values, so we need
+    // to track the total:
+    int total = 0;
+    int end = MaxBin::Global().CacheBinEnd() * NUM_PEAK_TYPES;
+    FieldIter i = src.begin();
+    for (; i != src.end(); ++i) {
+      if ((total += *i) >= end)
+        break;
+      dest->push_back(TheoreticalPeakPair(total));
+    }
+  }
+};
+
+// Utility class for use by subclasses of TheoreticalPeakSet. Contains the
+// actual arrays of B series and Y series ions. The temp[123]_ arrays are
+// spaces for merging sorted arrays of B and Y ions. This class also manages
+// merges with peaks taken from Peptide protocol buffers.
+class OrderedPeakSets {
+ public:
+  void Init(int capacity) {
+    b_series_[0].Init(capacity);
+    b_series_[1].Init(capacity);
+    y_series_[0].Init(capacity);
+    y_series_[1].Init(capacity);
+    temp1_.Init(capacity);
+    temp2_.Init(capacity);
+    temp3_.Init(capacity);
+  }
+
+  void Clear() {
+    b_series_[0].clear();
+    b_series_[1].clear();
+    y_series_[0].clear();
+    y_series_[1].clear();
+  }
+
+  // temp1_ gets the charge 1 peaks. temp3_ gets the combined charge 1 and
+  // charge 2 peaks.
+  void Merge(const pb::Peptide* peptide = NULL) {
+    if (peptide && peptide->peak1_size() > 0) {
+      MergePeaks(&b_series_[0], &y_series_[0], &temp3_);
+      MergeExceptions(temp3_, peptide->peak1(), &temp1_);
+    } else {
+      MergePeaks(&b_series_[0], &y_series_[0], &temp1_);
+    }
+    if (peptide && peptide->peak2_size() > 0) {
+      MergePeaks(&b_series_[1], &y_series_[1], &temp3_);
+      MergeExceptions(temp3_, peptide->peak2(), &temp2_);
+    } else {
+      MergePeaks(&b_series_[1], &y_series_[1], &temp2_);
+    }
+    MergePeaks(&temp1_, &temp2_, &temp3_);
+  }
+
+  TheoreticalPeakArr b_series_[2];
+  TheoreticalPeakArr y_series_[2];
+  TheoreticalPeakArr temp1_, temp2_, temp3_;
+
+ private:
+  static void MergePeaks(TheoreticalPeakArr* a, TheoreticalPeakArr* b,
+                         TheoreticalPeakArr* result) {
+    merge(a->begin(), a->end(), b->begin(), b->end(), result->data());
+    result->set_size(a->size() + b->size());
+  }
+
+  static void MergeExceptions(const TheoreticalPeakArr& src,
+                              const google::protobuf::RepeatedField<int>& exc,
+                              TheoreticalPeakArr* dest) {
+    dest->clear();
+    // The protocol buffer stores deltas between peak values, so we need
+    // to track the total:
+    int total = 0;
+    int end = MaxBin::Global().CacheBinEnd() * NUM_PEAK_TYPES;
+    FieldIter exc_iter = exc.begin();
+    TheoreticalPeakArr::const_iterator src_iter = src.begin();
+
+    if ((exc_iter != exc.end()) && (src_iter != src.end())
+        && ((total = *exc_iter) < end) && (src_iter->Code() < end)) {
+      while (true) {
+        bool advance_src = total >= src_iter->Code();
+        bool advance_exc = total <= src_iter->Code();
+        if (advance_src) {
+          dest->push_back(*src_iter++);
+          if (src_iter == src.end() || (src_iter->Code() >= end))
+            break;
+        }
+        if (advance_exc) {
+          dest->push_back(TheoreticalPeakPair(total));
+          total += *(++exc_iter);
+          if (exc_iter == exc.end() || (total >= end))
+            break;
+        }        
+      }
+    }
+
+    if (total < end) {
+      for (; exc_iter != exc.end(); ++exc_iter) {
+        if ((total += *exc_iter) >= end)
+          break;
+        dest->push_back(TheoreticalPeakPair(total));
+      }
+    }
+    for (; src_iter != src.end() && src_iter->Code() < end; ++src_iter) {
+      dest->push_back(*src_iter);
+    }
+#ifdef DEBUG
+    // The last assert here is expensive, so we relegate use to DEBUG mode.
+    assert(exc_iter == exc.end() || total >= end);
+    assert(src_iter == src.end() || src_iter->Code() >= end);
+    assert(dest->size() == (exc_iter - exc.begin()) + (src_iter - src.begin()));
+    assert(adjacent_find(dest->begin(), dest->end(), 
+           greater<TheoreticalPeakPair>()) == dest->end());
+#endif
+  }
+};
+
+#if 0
+DECLARE_bool(flanks);
+DECLARE_bool(dups_ok);
+#endif
+
+// Subclass of TheoreticalPeakSet that generates all ions individually and
+// explicitly.  The peaks generated will all have type LossPeak, FlankingPeak, or
+// PrimaryPeak. 
+/*class TheoreticalPeakSetMakeAll : public TheoreticalPeakSet {
+ public:
+  TheoreticalPeakSetMakeAll(int capacity) {
+    ordered_peak_sets_.Init(capacity);
+  }
+
+  virtual ~TheoreticalPeakSetMakeAll() {}
+
+  void Clear() { ordered_peak_sets_.Clear(); }
+
+  void AddYIon(double mass, int charge) {
+    assert(charge <= 2);
+    AddYIon(mass, charge, &ordered_peak_sets_.y_series_[charge-1]);
+  }
+
+  void AddBIon(double mass, int charge) {
+    assert(charge <= 2);
+    AddBIon(mass, charge, &ordered_peak_sets_.b_series_[charge-1]);
+  }
+
+  void GetPeaks(TheoreticalPeakArr* peaks_charge_1,
+		TheoreticalPeakArr* negs_charge_1,
+		TheoreticalPeakArr* peaks_charge_2,
+		TheoreticalPeakArr* negs_charge_2,
+		const pb::Peptide* peptide = NULL) {
+    assert(peptide == NULL);
+    ordered_peak_sets_.Merge();
+    if (false ) {
+      CopyUnordered(ordered_peak_sets_.temp1_, peaks_charge_1);
+      CopyUnordered(ordered_peak_sets_.temp3_, peaks_charge_2);
+    } else {
+      RemoveDups(ordered_peak_sets_.temp1_, peaks_charge_1);
+      RemoveDups(ordered_peak_sets_.temp3_, peaks_charge_2);
+    }
+    // no negs
+  }
+
+ private:
+  void AddYIon(double mass, int charge, TheoreticalPeakArr* dest) {
+    // H2O
+    int index = MassConstants::mass2bin(mass + MassConstants::Y_H2O, charge);
+    AddPeak(dest, index, LossPeak);
+    // NH3
+    index = MassConstants::mass2bin(mass + MassConstants::Y_NH3, charge);
+    AddPeak(dest, index, LossPeak);
+    index = MassConstants::mass2bin(mass + MassConstants::Y, charge);
+
+    if (true ) AddPeak(dest, index-1, FlankingPeak);
+    AddPeak(dest, index, PrimaryPeak);
+    if (true ) AddPeak(dest, index+1, FlankingPeak);
+  }
+
+  void AddBIon(double mass, int charge, TheoreticalPeakArr* dest) {
+    // A-Ion
+    int index = MassConstants::mass2bin(mass + MassConstants::A, charge);
+
+    AddPeak(dest, index, LossPeak);
+    // H2O
+    index = MassConstants::mass2bin(mass + MassConstants::B_H2O, charge);
+    AddPeak(dest, index, LossPeak);
+    // Rest of peaks are as for Y ion
+    // NH3
+    index = MassConstants::mass2bin(mass + MassConstants::B_NH3, charge);
+    AddPeak(dest, index, LossPeak);
+    index = MassConstants::mass2bin(mass + MassConstants::B, charge);
+
+    if (true ) AddPeak(dest, index-1, FlankingPeak);
+    AddPeak(dest, index, PrimaryPeak);
+    if (true) AddPeak(dest, index+1, FlankingPeak);
+  }
+
+  OrderedPeakSets ordered_peak_sets_;
+};
+*/
+// A subclass of TheoreticalPeakSet that generates a theoretical peak
+// for each B and Y ion at each charge state, 1 and 2. Peak generated
+// will be of type PeakCombinedB1 and PeakCombinedY1 for charge 1
+// ions. Peaks of type PeakCombinedB2a or PeakCombinedB2b will be
+// generated for each B ion of charge 2 depending on whether the
+// corresponding ammonia loss is 8 bins or 9 bins away. Similarly,
+// peaks of type PeakCombinedY2a or PeakCombinedY2b will be generated
+// for each Y ion of charge 2.
+class TheoreticalPeakSetBYSparse : public TheoreticalPeakSet {
+ public:
+  explicit TheoreticalPeakSetBYSparse(int capacity) {
+    peaks_[0].Init(capacity);
+    peaks_[1].Init(capacity);
+  }
+
+  virtual ~TheoreticalPeakSetBYSparse() {}
+
+  void Clear() {
+    peaks_[0].clear();
+    peaks_[1].clear();
+  }
+
+  void AddYIon(double mass, int charge) {
+     assert(charge <= 2);
+    int index_y = MassConstants::mass2bin(mass + MassConstants::Y + MassConstants::proton, charge);
+//    cout << "index_y:  " << index_y << endl;
+    TheoreticalPeakType series;
+    if (charge == 1) {
+      series = PeakCombinedY1;
+    } else {
+//    int nh3_diff = index_y - MassConstants::mass2bin(mass + MassConstants::Y_NH3, charge);
+//      assert(nh3_diff == MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_A ||
+//             nh3_diff == MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_B);
+//      series = nh3_diff == MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_A ? PeakCombinedY2a 
+//                                                      : PeakCombinedY2b;
+      series = PeakCombinedY2;
+    }
+//    AddPeakUnordered(&peaks_[charge-1], index_y, series);
+    if (charge == 1)
+      AddPeakUnordered(&peaks_[charge-1], index_y, series, &peaks_[charge]);
+    else
+      AddPeakUnordered(&peaks_[charge-1], index_y, series, &peaks_[charge-2]);
+  }
+
+  void AddBIon(double mass, int charge) {
+     assert(charge <= 2);
+    int index_b = MassConstants::mass2bin(mass + MassConstants::B + MassConstants::proton, charge);
+//    cout << "index_b:  " << index_b << endl;
+    TheoreticalPeakType series;
+    if (charge == 1) {
+      series = PeakCombinedB1;
+    } else {
+//      int nh3_diff = index_b - MassConstants::mass2bin(mass + MassConstants::B_NH3, charge);
+//      assert(nh3_diff == MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_A ||
+//             nh3_diff == MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_B);
+//      series = nh3_diff == MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_A ? PeakCombinedB2a 
+//                                                      : PeakCombinedB2b;
+      series = PeakCombinedB2;
+
+    }
+//    AddPeakUnordered(&peaks_[charge-1], index_b, series);
+    if (charge == 1)
+      AddPeakUnordered(&peaks_[charge-1], index_b, series, &peaks_[charge]);
+    else 
+      AddPeakUnordered(&peaks_[charge-1], index_b, series, &peaks_[charge-2]);
+  }
+
+  // Faster interface needing no copying at all.
+  const TheoreticalPeakArr* GetPeaks() const { return peaks_; }
+
+  void GetPeaks(TheoreticalPeakArr* peaks_charge_1,
+    TheoreticalPeakArr* negs_charge_1,
+    TheoreticalPeakArr* peaks_charge_2,
+    TheoreticalPeakArr* negs_charge_2,
+    const pb::Peptide* peptide = NULL) {
+//    CopyUniqueUnordered(peaks_[0], peaks_charge_1);
+//    CopyUniqueUnordered(peaks_[0], peaks_charge_2);
+//    CopyUniqueUnordered(peaks_[1], peaks_charge_2);
+    CopyUnordered(peaks_[0], peaks_charge_1);
+    CopyUnordered(peaks_[0], peaks_charge_2);
+    CopyUnordered(peaks_[1], peaks_charge_2);
+    if (peptide == NULL)
+      return;
+    CopyExceptions(peptide->peak1(), peaks_charge_1);
+    CopyExceptions(peptide->peak2(), peaks_charge_2);
+    CopyExceptions(peptide->neg_peak1(), negs_charge_1);
+    CopyExceptions(peptide->neg_peak2(), negs_charge_2);    
+  }
+
+ private:
+  TheoreticalPeakArr peaks_[2];
+};
+
+// Subclass of TheoreticalPeakSet similar to TheoreticalPeakSetBYSparse 
+// (above), but guarantees that peaks will be in increasing order by m/z
+// at the expense of a couple of extra merge operations.
+/*class TheoreticalPeakSetBYSparseOrdered : public TheoreticalPeakSet {
+ public:
+  TheoreticalPeakSetBYSparseOrdered(int capacity) {
+    ordered_peak_sets_.Init(capacity);
+  }
+
+  virtual ~TheoreticalPeakSetBYSparseOrdered() {}
+
+  void Clear() { ordered_peak_sets_.Clear(); }
+
+  void AddYIon(double mass, int charge) {
+    assert(charge <= 2);
+    int index_y = MassConstants::mass2bin(mass + MassConstants::Y, charge);
+    TheoreticalPeakType series;
+    if (charge == 1) {
+      series = PeakCombinedY1;
+    } else {
+      int nh3_diff = index_y - MassConstants::mass2bin(mass + MassConstants::Y_NH3, charge);
+      assert(nh3_diff == MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_A ||
+             nh3_diff == MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_B);
+      series = nh3_diff == MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_A ? PeakCombinedY2a 
+                                                      : PeakCombinedY2b;
+    }
+    AddPeak(&ordered_peak_sets_.y_series_[charge-1], index_y, series);
+  }
+
+  void AddBIon(double mass, int charge) {
+    assert(charge <= 2);
+    int index_b = MassConstants::mass2bin(mass + MassConstants::B, charge);
+    TheoreticalPeakType series;
+    if (charge == 1) {
+      series = PeakCombinedB1;
+    } else {
+      int nh3_diff = index_b - MassConstants::mass2bin(mass + MassConstants::B_NH3, charge);
+      assert(nh3_diff == MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_A ||
+             nh3_diff == MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_B);
+      series = nh3_diff == MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_A ? PeakCombinedB2a 
+                                                      : PeakCombinedB2b;
+    }
+    AddPeak(&ordered_peak_sets_.b_series_[charge-1], index_b, series);
+  }
+
+
+  void GetPeaks(TheoreticalPeakArr* peaks_charge_1,
+    TheoreticalPeakArr* negs_charge_1,
+    TheoreticalPeakArr* peaks_charge_2,
+		TheoreticalPeakArr* negs_charge_2,
+		const pb::Peptide* peptide = NULL) {
+    ordered_peak_sets_.Merge(peptide);
+    Copy(ordered_peak_sets_.temp1_, peaks_charge_1);
+    Copy(ordered_peak_sets_.temp3_, peaks_charge_2);
+    if (peptide == NULL)
+      return;
+    CopyExceptions(peptide->neg_peak1(), negs_charge_1);
+    CopyExceptions(peptide->neg_peak2(), negs_charge_2);    
+  }
+
+ private:
+  OrderedPeakSets ordered_peak_sets_;
+};
+
+// Subclass of TheoreticalPeakSet. This class explicitly generates all ions 
+// implicit in the TheoreticalPeakTypes PeakCombinedXXX. See notes above.
+class TheoreticalPeakSetBYAll : public TheoreticalPeakSet {
+ public:
+  TheoreticalPeakSetBYAll(int capacity) {
+    ordered_peak_sets_.Init(capacity);
+  }
+
+  virtual ~TheoreticalPeakSetBYAll() {}
+
+  void Clear() { ordered_peak_sets_.Clear(); }
+
+  void AddYIon(double mass, int charge) {
+    assert(charge <= 2);
+    AddYIon(mass, charge, &ordered_peak_sets_.y_series_[charge-1]);
+  }
+
+  void AddBIon(double mass, int charge) {
+    assert(charge <= 2);
+    AddBIon(mass, charge, &ordered_peak_sets_.b_series_[charge-1]);
+  }
+
+  void GetPeaks(TheoreticalPeakArr* peaks_charge_1,
+    TheoreticalPeakArr* negs_charge_1,
+    TheoreticalPeakArr* peaks_charge_2,
+    TheoreticalPeakArr* negs_charge_2,
+    const pb::Peptide* peptide = NULL) {
+    assert(peptide == NULL);
+    ordered_peak_sets_.Merge();
+    Copy(ordered_peak_sets_.temp1_, peaks_charge_1);
+    Copy(ordered_peak_sets_.temp3_, peaks_charge_2);
+  }
+
+ private:
+  void AddYIon(double mass, int charge, TheoreticalPeakArr* dest) {
+    int index_y = MassConstants::mass2bin(mass + MassConstants::Y, charge);
+    if (charge == 1) {
+      AddPeak(dest, index_y - MassConstants::BIN_SHIFT_H2O_CHG_1, LossPeak);
+      AddPeak(dest, index_y - MassConstants::BIN_SHIFT_NH3_CHG_1, LossPeak);
+    } else {
+      AddPeak(dest, index_y - MassConstants::BIN_SHIFT_H2O_CHG_2, LossPeak);
+      // In case A the NH3 peak will have been added already...
+      assert(MassConstants::BIN_SHIFT_H2O_CHG_2 == MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_A);
+      // Otherwise (case B), a separate NH3 peak is needed. 
+      if (index_y - MassConstants::mass2bin(mass + MassConstants::Y_NH3, charge) 
+          == MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_B)
+        AddPeak(dest, index_y - MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_B, LossPeak);
+    }
+    AddPeak(dest, index_y-1, FlankingPeak);
+    AddPeak(dest, index_y, PrimaryPeak);
+    AddPeak(dest, index_y+1, FlankingPeak);
+  }
+
+  void AddBIon(double mass, int charge, TheoreticalPeakArr* dest) {
+    int index_b = MassConstants::mass2bin(mass + MassConstants::B, charge);
+    if (charge == 1) {
+      AddPeak(dest, index_b - MassConstants::BIN_SHIFT_A_ION_CHG_1, LossPeak);
+      AddPeak(dest, index_b - MassConstants::BIN_SHIFT_H2O_CHG_1, LossPeak);
+      AddPeak(dest, index_b - MassConstants::BIN_SHIFT_NH3_CHG_1, LossPeak);
+    } else {
+      AddPeak(dest, index_b - MassConstants::BIN_SHIFT_A_ION_CHG_2, LossPeak);
+      AddPeak(dest, index_b - MassConstants::BIN_SHIFT_H2O_CHG_2, LossPeak);
+      // In case A the NH3 peak will have been added already...
+      assert(MassConstants::BIN_SHIFT_H2O_CHG_2 == MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_A);
+      // Otherwise (case B), a separate NH3 peak is needed. 
+	  if (index_b - MassConstants::mass2bin(mass + MassConstants::B_NH3, charge) 
+          == MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_B)
+        AddPeak(dest, index_b - MassConstants::BIN_SHIFT_NH3_CHG_2_CASE_B, LossPeak);
+    }
+    AddPeak(dest, index_b-1, FlankingPeak);
+    AddPeak(dest, index_b, PrimaryPeak);
+    AddPeak(dest, index_b+1, FlankingPeak);
+  }
+
+  OrderedPeakSets ordered_peak_sets_;
+};
+
+// Subclass of TheoreticalPeakSet. This class effectively computes 
+// the vecotor difference of TheoreticalPeakSetMakeAll and 
+// TheoreticalPeakSetBYAll.
+class TheoreticalPeakSetDiff : public TheoreticalPeakSet {
+ public:
+  TheoreticalPeakSetDiff(int capacity)
+    : BY_all_(capacity), make_all_(capacity),
+    make_all_1_(capacity), make_all_2_(capacity),
+    BY_all_1_(capacity), BY_all_2_(capacity) {
+  }
+
+  virtual ~TheoreticalPeakSetDiff() {}
+
+  void Clear() {
+    BY_all_.Clear();
+    make_all_.Clear();
+
+    make_all_1_.clear();
+    make_all_2_.clear();
+    BY_all_1_.clear();
+    BY_all_2_.clear();
+  }
+
+  void AddYIon(double mass, int charge) {
+    BY_all_.AddYIon(mass, charge);
+    make_all_.AddYIon(mass, charge);
+  }
+
+  void AddBIon(double mass, int charge) {
+    BY_all_.AddBIon(mass, charge);
+    make_all_.AddBIon(mass, charge);
+  }
+
+  void GetPeaks(TheoreticalPeakArr* peaks_charge_1,
+		TheoreticalPeakArr* negs_charge_1,
+		TheoreticalPeakArr* peaks_charge_2,
+		TheoreticalPeakArr* negs_charge_2,
+		const pb::Peptide* peptide = NULL) {
+    assert(peptide == NULL);
+
+    make_all_.GetPeaks(&make_all_1_, NULL, &make_all_2_, NULL);
+    BY_all_.GetPeaks(&BY_all_1_, NULL, &BY_all_2_, NULL);
+    
+    Diff(make_all_1_, BY_all_1_, peaks_charge_1, negs_charge_1);
+    Diff(make_all_2_, BY_all_2_, peaks_charge_2, negs_charge_2);
+  }
+
+ private:
+  TheoreticalPeakSetBYAll BY_all_;
+  TheoreticalPeakSetMakeAll make_all_;
+
+  // space for partial results, used by GetPeaks() above.
+  TheoreticalPeakArr make_all_1_;
+  TheoreticalPeakArr make_all_2_;
+  TheoreticalPeakArr BY_all_1_;
+  TheoreticalPeakArr BY_all_2_;
+};
+
+// For testing. Bypasses disk storage, doing the combined operations done at
+// indexing and search time. Explicitly represents BYSparse and Diff.
+class TheoreticalPeakSetSparse : public TheoreticalPeakSet {
+ public:
+  TheoreticalPeakSetSparse(int capacity)
+    : BY_sparse_(capacity), diff_(capacity) {
+  }
+
+  virtual ~TheoreticalPeakSetSparse() {}
+
+  void Clear() {
+    BY_sparse_.Clear();
+    diff_.Clear();
+  }
+
+  void AddYIon(double mass, int charge) {
+    BY_sparse_.AddYIon(mass, charge);
+    diff_.AddYIon(mass, charge);
+  }
+
+  void AddBIon(double mass, int charge) {
+    BY_sparse_.AddBIon(mass, charge);
+    diff_.AddBIon(mass, charge);
+  }
+
+  void GetPeaks(TheoreticalPeakArr* peaks_charge_1,
+                TheoreticalPeakArr* negs_charge_1,
+                TheoreticalPeakArr* peaks_charge_2,
+                TheoreticalPeakArr* negs_charge_2,
+                const pb::Peptide* peptide = NULL) {
+    assert(peptide == NULL);
+    BY_sparse_.GetPeaks(peaks_charge_1, NULL, peaks_charge_2, NULL);
+    diff_.GetPeaks(peaks_charge_1, negs_charge_1,
+                   peaks_charge_2, negs_charge_2);
+  }
+
+ private:
+  TheoreticalPeakSetBYSparse BY_sparse_;
+  TheoreticalPeakSetDiff diff_;
+};
+
+*/
+
+// This class is used to store theoretical b ions only, with true monoisotopic mass,
+// for use in exact p-value calculations.
+class TheoreticalPeakSetBIons {
+ public:
+  TheoreticalPeakSetBIons() {}
+  explicit TheoreticalPeakSetBIons(int capacity) {
+    unordered_peak_list_.reserve(capacity);
+  }
+  virtual ~TheoreticalPeakSetBIons() {}
+
+  void Clear() { unordered_peak_list_.clear(); }
+  void AddBIon(double mass) {
+    unsigned int index = (unsigned int)floor(mass / binWidth_ + 1.0 - binOffset_);
+    unordered_peak_list_.push_back(index);
+  }
+  vector<unsigned int> unordered_peak_list_;
+  double binWidth_;
+  double binOffset_;
+};
+#endif // THEORETICAL_PEAK_SET_H
diff --git a/src/app/xlink/AccurateMonoMass.cpp b/src/app/xlink/AccurateMonoMass.cpp
new file mode 100644
index 0000000..32a8fa2
--- /dev/null
+++ b/src/app/xlink/AccurateMonoMass.cpp
@@ -0,0 +1,157 @@
+#include "AccurateMonoMass.h"
+
+#include <iostream>
+#include <iomanip>
+#include <cmath>
+
+using namespace std;
+
+
+static bool map_generated_ = false;
+static map<char, MolecularFormula> amino_acid_to_formula_;
+
+#define H 0
+#define C 1
+#define N 2
+#define O 3
+#define P 4
+#define S 5
+
+double mass_table[] = {
+  1.00782503207, //1H
+  12.0000000,    //12C
+  14.0030740048, //14N
+  15.99491461956, //16O
+  30.97376163,    //31P
+  31.97207100  //32S
+  };
+
+
+MolecularFormula::MolecularFormula() {
+  H_ = 0;
+  C_ = 0;
+  N_ = 0;
+  O_ = 0;
+  P_ = 0;
+  S_ = 0;
+}
+
+MolecularFormula::~MolecularFormula() {
+  ;
+}
+
+MolecularFormula::MolecularFormula(int nH, int nC, int nN, int nO, int nP, int nS) {
+  H_ = nH;
+  C_ = nC;
+  N_ = nN;
+  O_ = nO;
+  P_ = nP;
+  S_ = nS;
+}
+
+void MolecularFormula::add(MolecularFormula& formula) {
+  H_ += formula.H_;
+  C_ += formula.C_;
+  N_ += formula.N_;
+  O_ += formula.O_;
+  P_ += formula.P_;
+  S_ += formula.S_;
+}
+
+double MolecularFormula::calculateMass() {
+  double ans = 0.0;
+
+  ans += mass_table[H] * H_;
+  ans += mass_table[C] * C_;
+  ans += mass_table[N] * N_;
+  ans += mass_table[O] * O_;
+  ans += mass_table[P] * P_;
+  ans += mass_table[S] * S_;
+
+  return ans;
+}
+
+
+static MolecularFormula H2O(2, 0, 0, 1, 0, 0);
+
+void AccurateMonoMass::generateMap() {
+
+  amino_acid_to_formula_['A'] = MolecularFormula(5,  3, 1, 1, 0, 0);
+  amino_acid_to_formula_['C'] = MolecularFormula(5,  3, 1, 1, 0, 1);
+  amino_acid_to_formula_['c'] = MolecularFormula(8,  5, 2, 2, 0, 1); //iodoacetmide adds C2H3NO
+  amino_acid_to_formula_['D'] = MolecularFormula(5,  4, 1, 3, 0, 0);
+  amino_acid_to_formula_['E'] = MolecularFormula(7,  5, 1, 3, 0, 0);
+  amino_acid_to_formula_['F'] = MolecularFormula(9,  9, 1, 1, 0, 0);
+  amino_acid_to_formula_['G'] = MolecularFormula(3,  2, 1, 1, 0, 0);
+  amino_acid_to_formula_['H'] = MolecularFormula(7,  6, 3, 1, 0, 0);
+  amino_acid_to_formula_['I'] = MolecularFormula(11, 6, 1, 1, 0, 0);
+  amino_acid_to_formula_['K'] = MolecularFormula(12, 6, 2, 1, 0, 0);
+  amino_acid_to_formula_['L'] = MolecularFormula(11, 6, 1, 1, 0, 0);
+  amino_acid_to_formula_['M'] = MolecularFormula(9,  5, 1, 1, 0, 1);
+  //amino_acid_to_formula['m'] = MolecularFormula(9, 5, 1, 2, 0, 1); # oxidized methionine
+  amino_acid_to_formula_['N'] = MolecularFormula(6,  4, 2, 2, 0, 0);
+  amino_acid_to_formula_['P'] = MolecularFormula(7,  5, 1, 1, 0, 0);
+  amino_acid_to_formula_['Q'] = MolecularFormula(8,  5, 2, 2, 0, 0);
+  amino_acid_to_formula_['R'] = MolecularFormula(12, 6, 4, 1, 0, 0);
+  amino_acid_to_formula_['S'] = MolecularFormula(5,  3, 1, 2, 0, 0);
+  //amino_acid_to_formula['s'] = MolecularFormula(4,  3, 1, 5, 1, 0); # phosphate
+  amino_acid_to_formula_['T'] = MolecularFormula(7,  4, 1, 2, 0, 0);
+  //amino_acid_to_formula['t'] = MolecularFormula(6,  4, 1, 5, 1, 0); # phosphate
+  amino_acid_to_formula_['V'] = MolecularFormula(9,  5, 1, 1, 0, 0);
+  amino_acid_to_formula_['W'] = MolecularFormula(10, 11, 2, 1, 0, 0);
+  amino_acid_to_formula_['Y'] = MolecularFormula(9,  9,  1, 2, 0, 0);
+  //amino_acid_to_formula['y'] = MolecularFormula(8,  9,  1, 5, 1, 0);  # phosphate
+  map_generated_ = true;
+}
+
+double AccurateMonoMass::calculateMass(const string& sequence) {
+
+  if (!map_generated_) generateMap();
+  MolecularFormula formula;
+
+  for (int i=0;i < sequence.length();i++) {
+
+    formula.add(amino_acid_to_formula_[sequence[i]]);
+
+  }
+  formula.add(H2O);
+
+
+  return formula.calculateMass();
+}
+
+int main(int argc, char**argv) {
+  
+  AccurateMonoMass::generateMap();
+
+  map<char, MolecularFormula>::iterator iter;
+
+  cout << fixed << setprecision(11);
+
+  for (iter = amino_acid_to_formula_.begin();
+    iter != amino_acid_to_formula_.end();
+    ++iter) {
+    cout << "Mass of :" <<iter -> first << " = " << iter -> second.calculateMass() << endl;
+  }
+
+  double diff = amino_acid_to_formula_['c'].calculateMass() - amino_acid_to_formula_['C'].calculateMass();
+
+  cout << "Diff of acetomide:" << diff << endl;
+
+  cout << "Mass of AA:" << AccurateMonoMass::calculateMass(string("AA")) << endl;
+  cout << "Mass of A + A:" << (AccurateMonoMass::calculateMass(string("A")) + AccurateMonoMass::calculateMass(string("A"))-H2O.calculateMass()) << endl;
+  double massA = AccurateMonoMass::calculateMass("A");
+
+  double massAA = AccurateMonoMass::calculateMass("AAAAAAA");
+
+  double massApA = 7*massA - 6 * H2O.calculateMass();
+
+  double ppm = fabs(massAA - massApA) / massAA * 1e6;
+
+  cout <<" ppm:" << ppm << endl;
+
+  cout <<"H2O:"<< H2O.calculateMass() << endl;
+
+}
+
+
diff --git a/src/app/xlink/CMakeLists.txt b/src/app/xlink/CMakeLists.txt
new file mode 100644
index 0000000..b82e8d3
--- /dev/null
+++ b/src/app/xlink/CMakeLists.txt
@@ -0,0 +1,61 @@
+project(xlink)
+
+cmake_minimum_required(VERSION 2.8.4)
+cmake_policy(VERSION 2.8.4)
+
+include_directories(${CMAKE_SOURCE_DIR}/src)
+include_directories(${CMAKE_BINARY_DIR}/ext/build/src/ProteoWizard/libraries/boost_1_56_0)
+include_directories(${CMAKE_BINARY_DIR}/ext/build/src/ProteoWizard/libraries/boost_aux)
+include_directories(${CMAKE_BINARY_DIR}/ext/include)
+
+if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+  set_property(
+    DIRECTORY
+    PROPERTY
+    COMPILE_DEFINITIONS
+      _CRT_SECURE_NO_WARNINGS
+    )
+else (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+  set_property(
+    DIRECTORY
+    PROPERTY
+    COMPILE_DEFINITIONS
+    _FILE_OFFSET_BITS=64
+    _GNU_SOURCE
+    _LARGEFILE_SOURCE
+    GCC
+  )
+endif (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+
+add_library(
+  xlink
+  STATIC
+  XHHC_Peptide.cpp
+  LinkedPeptide.cpp
+  xhhc.cpp
+  LinkedIonSeries.cpp
+  xhhc_score_peptide_spectrum.cpp
+  xhhc_scorer.cpp
+  xhhc_score_peptide_spectrum.cpp
+  xhhc_scorer.cpp
+  xhhc_search.cpp
+  xlink_assign_ions.cpp
+  xlink_search.cpp
+  SearchForXLinks.cpp
+  xlink_compute_qvalues.cpp
+  LinearPeptide.cpp
+  SelfLoopPeptide.cpp
+  XLinkDatabase.cpp
+  XLinkIonSeriesCache.cpp
+  XLink.cpp
+  XLinkScorer.cpp
+  XLinkSite.cpp
+  XLinkBondMap.cpp
+  XLinkablePeptide.cpp
+  XLinkablePeptideIterator.cpp
+  XLinkablePeptideIteratorTopN.cpp
+  XLinkMatch.cpp
+  XLinkMatchCollection.cpp
+  XLinkPeptide.cpp
+  Weibull.cpp
+)
diff --git a/src/app/xlink/LinearPeptide.cpp b/src/app/xlink/LinearPeptide.cpp
new file mode 100644
index 0000000..088575f
--- /dev/null
+++ b/src/app/xlink/LinearPeptide.cpp
@@ -0,0 +1,245 @@
+
+#include "LinearPeptide.h"
+#include "XLink.h"
+#include "model/ModifiedPeptidesIterator.h"
+#include "model/IonSeries.h"
+#include "util/GlobalParams.h"
+#include "XLinkDatabase.h"
+
+#include <iostream>
+
+using namespace std;
+
+/**
+ * Default constructor
+ */
+LinearPeptide::LinearPeptide() : XLinkMatch() {
+  peptide_ = NULL;
+  sequence_ = NULL;
+}
+
+/**
+ * Constructor with sequence
+ */
+LinearPeptide::LinearPeptide(
+  char* sequence ///< sequence string
+  ) : XLinkMatch() {
+  peptide_ = NULL;
+  sequence_ = sequence;
+}
+
+/**
+ * Constructor from a Crux Peptide
+ */
+LinearPeptide::LinearPeptide(
+  Crux::Peptide* peptide ///< peptide object
+  ) : XLinkMatch() {
+  peptide_ = peptide;
+  sequence_ = NULL;
+  this->setNullPeptide(peptide_->isDecoy());
+}
+
+LinearPeptide::~LinearPeptide() {
+}
+
+
+/**
+ *Add candidates to the XLinkMatchCollection that are linear
+ */
+void LinearPeptide::addCandidates(
+  FLOAT_T min_mass,  ///< min mass
+  FLOAT_T max_mass,  ///< max mass
+  bool is_decoy, ///< generate decoy canidates
+  XLinkMatchCollection& candidates ///< Vector of candidate -inout
+  ) {
+
+  vector<LinearPeptide>::iterator siter = XLinkDatabase::getLinearBegin(is_decoy, min_mass);
+  if (siter == XLinkDatabase::getLinearEnd(is_decoy) ||
+      siter->getMassConst(GlobalParams::getIsotopicMass()) > max_mass) {
+    return;
+  } else {
+    vector<LinearPeptide>::iterator eiter = XLinkDatabase::getLinearEnd(is_decoy, siter, max_mass);
+
+    while (siter != eiter && siter->getMassConst() <= max_mass) {
+      siter->incrementPointerCount();
+      LinearPeptide& lpeptide = *siter;
+      if (lpeptide.getMassConst() < min_mass || lpeptide.getMassConst() > max_mass) {
+        carp(CARP_DEBUG,
+             "The mass %g of peptide %s is outside the precursor range of %g-%g.",
+             lpeptide.getMass(), lpeptide.getSequenceString().c_str(),
+             min_mass, max_mass);
+        return;
+      } else {
+        //carp(CARP_INFO, "Add linear candidate");
+        candidates.add(&(*siter));
+        ++siter;
+      }
+    }
+  }
+}
+
+/**
+ * returns the candidate type, either a deadlink or a linear candidate
+ */
+XLINKMATCH_TYPE_T LinearPeptide::getCandidateType() {
+  if (isModified()) {
+    return DEADLINK_CANDIDATE;
+  } else {
+    return LINEAR_CANDIDATE;
+  }
+}
+
+/**
+ * \returns the sequence of the peptide in string format
+ */
+string LinearPeptide::getSequenceString() {
+  ostringstream oss;
+  if (peptide_ == NULL) {
+    oss << sequence_;
+
+  } else {
+    oss << peptide_->getModifiedSequenceWithMasses();
+  }
+
+  //oss << " ()";
+  return oss.str();
+
+}
+
+/**
+ * \returns the mass of the peptide
+ */
+FLOAT_T LinearPeptide::calcMass(
+  MASS_TYPE_T mass_type ///< MONO or AVERAGE
+  ) {
+  
+  if (peptide_ == NULL) {
+    return Crux::Peptide::calcSequenceMass(sequence_, mass_type);
+  } else {
+    return peptide_->calcModifiedMass(mass_type);
+  }
+}
+
+/**
+ *\returns a shuffled version of the peptide
+ */
+void LinearPeptide::shuffle(vector<XLinkMatch*>& decoys) {
+  string seq = getSequenceString();
+  Crux::Peptide* decoy_peptide = new Crux::Peptide(peptide_);
+
+  decoy_peptide->transformToDecoy();
+
+  XLink::addAllocatedPeptide(decoy_peptide);
+
+  LinearPeptide* decoy = new LinearPeptide(decoy_peptide);
+  
+  string decoy_seq = decoy->getSequenceString();
+  //  carp(CARP_INFO, "Shuffled: %s", decoy_seq.c_str());
+  
+  decoy->setNullPeptide(true);
+  decoys.push_back(decoy);
+}
+
+/**
+ * predicts the ions for this peptide
+ */
+void LinearPeptide::predictIons(
+  IonSeries* ion_series, ///< ion series to place the ions
+  int charge ///< charge state of the peptide
+  ) {
+
+  const char* seq = NULL;
+  MODIFIED_AA_T* mod_seq = NULL;
+  if (peptide_ == NULL) {
+    seq = sequence_;
+    convert_to_mod_aa_seq(seq, &mod_seq); 
+  } else {
+    seq = peptide_->getSequence();
+    mod_seq = peptide_->getModifiedAASequence();
+  }
+  
+  //carp(CARP_INFO, "predicting ions for :%s", seq);
+  /*
+  char* mseq = peptide_->getModifiedSequenceWithMasses(MOD_MASSES_SEPARATE);
+  carp(CARP_INFO, "mod seq:%s", mseq);
+  free(mseq);
+  */
+  ion_series->setCharge(charge);
+  ion_series->update(seq, mod_seq);
+  ion_series->predictIons();
+
+  freeModSeq(mod_seq);
+
+}
+
+/**
+ *\returns the ion sequence as a string
+ */
+string LinearPeptide::getIonSequence(
+  Ion* ion ///< ion object
+  ) {
+
+  string seq_str = string(sequence_);
+
+  int cleavage_idx = ion->getCleavageIdx();
+  if (ion->isForwardType() == B_ION) {
+    return seq_str.substr(0, cleavage_idx);
+  } else {
+    return seq_str.substr(seq_str.length()-cleavage_idx, seq_str.length());
+  }
+}
+
+/**
+ * \returns the peptide for this match
+ */
+Crux::Peptide* LinearPeptide::getPeptide(int peptide_idx) {
+  if (peptide_idx == 0) {
+    return peptide_;
+  } else {
+    return NULL;
+  }
+}
+
+/**
+ *\returns the number of missed cleavages
+ */
+int LinearPeptide::getNumMissedCleavages() {
+  set<int> skip;
+  return peptide_->getMissedCleavageSites(skip);
+}
+
+/**
+ * \returns whether this peptide is modified by a variable mod
+ */
+bool LinearPeptide::isModified() {
+
+  return peptide_->isModified();
+}
+
+bool compareLinearPeptideMass(
+  const LinearPeptide& pep1, 
+  const LinearPeptide& pep2) {
+
+  return pep1.getMassConst(MONO) < pep2.getMassConst(MONO);
+
+}
+bool compareLinearPeptideMassToFLOAT(
+  const LinearPeptide& pep1,
+  FLOAT_T mass
+  ) {
+
+  return pep1.getMassConst(MONO) < mass;
+}
+
+bool compareFLOATToLinearPeptideMass(
+  const FLOAT_T& mass,
+  const LinearPeptide& pep1) {
+  return pep1.getMassConst(MONO) > mass;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/xlink/LinearPeptide.h b/src/app/xlink/LinearPeptide.h
new file mode 100644
index 0000000..8b759e3
--- /dev/null
+++ b/src/app/xlink/LinearPeptide.h
@@ -0,0 +1,145 @@
+/**
+ * \file LinearPeptide.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 18 September December 2014
+ * \brief Object for Defining a Normal peptide in an xlink search
+ *****************************************************************************/
+#ifndef LINEARPEPTIDE_H_
+#define LINEARPEPTIDE_H_
+
+#include "model/objects.h"
+#include "util/utils.h"
+
+#include "XLinkMatch.h"
+#include "XLinkBondMap.h"
+#include "XLinkablePeptide.h"
+
+#include <vector>
+
+class LinearPeptide : public XLinkMatch {
+ protected:
+
+  Crux::Peptide* peptide_; ///< Peptide this linear peptide referes to
+  char* sequence_; ///< sequence of the peptide
+ public:
+  /**
+   * Default constructor
+   */
+  LinearPeptide();
+  
+  /**
+   * Constructor with sequence
+   */
+  LinearPeptide(
+    char* sequence_ ///< sequence string
+  );
+  
+  /**
+   * Constructor from a Crux peptide
+   */
+  LinearPeptide(
+    Crux::Peptide* peptide ///< peptide object
+  );
+
+  /**
+   * Default destructor
+   */
+  virtual ~LinearPeptide();
+  
+  /**
+   *Add candidates to the XLinkMatchCollection that are linear
+   */
+  static void addCandidates(
+    FLOAT_T min_mass, ///< min mass
+    FLOAT_T max_mass, ///< max mass
+    bool is_decoy,
+    XLinkMatchCollection& candidates ///< Vector of possible candidate -inout
+    );
+
+  /**
+   * returns the candidate type, either a deadlink or a linear candidate
+   */
+  virtual XLINKMATCH_TYPE_T getCandidateType();
+  
+  /**
+   * \returns the sequence of the peptide in string format
+   */
+  virtual std::string getSequenceString();
+ 
+  /**
+   * \returns the mass of the peptide
+   */
+  virtual FLOAT_T calcMass(
+    MASS_TYPE_T mass_type ///< MONO or AVERAGE
+  );
+  
+  /**
+   *\returns a shuffled version of the peptide
+   */
+  virtual void shuffle(
+    std::vector<XLinkMatch*>& decoys
+  );
+
+  /**
+   * predicts the ions for this peptide
+   */
+  virtual void predictIons(
+    IonSeries* ion_series, ///< ion series to place the ions
+    int charge ///< charge state of the peptide
+    );
+  
+  /**
+   * \returns the ion sequence as a string
+   */
+  std::string getIonSequence(
+    Ion* ion ///< ion object
+  );
+  
+  /**
+   * \returns the peptide for this match
+   */
+  virtual Crux::Peptide* getPeptide( 
+    int peptide_idx ///< should always be zero
+  );
+  
+  /**
+   * \returns the number of missed cleavages
+   */
+  virtual int getNumMissedCleavages();
+  
+  /**
+   * \returns whether this peptide is modified by a variable mod
+   */
+  virtual bool isModified();
+
+};
+
+/**
+ * Comparison function of two linear peptide masses
+ */
+bool compareLinearPeptideMass(
+  const LinearPeptide& xpep1, ///< linear peptide 1
+  const LinearPeptide& xpep2  ///< linear peptide 2
+  );
+
+/**
+ * Comparison functions for lower_bound and upper_bound
+ */
+bool compareLinearPeptideMassToFLOAT(
+  const LinearPeptide& xpep1, 
+  FLOAT_T mass
+  );
+
+
+bool compareFLOATToLinearPeptideMass(
+  const FLOAT_T& mass,
+  const LinearPeptide& pep1);
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c 
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/xlink/LinkedIonSeries.cpp b/src/app/xlink/LinkedIonSeries.cpp
new file mode 100644
index 0000000..378d0f4
--- /dev/null
+++ b/src/app/xlink/LinkedIonSeries.cpp
@@ -0,0 +1,294 @@
+/**
+ * \file LinkedIonSeries.cpp 
+ * AUTHOR: Sean McIlwain and Paul Draghicescu
+ * CREATE DATE: 18 January 2012
+ * \brief Object for keeping track of a (non-)crosslinked peptide ions.
+ *****************************************************************************/
+#include "LinkedIonSeries.h"
+#include "xhhc_scorer.h"
+
+#include "LinkedPeptide.h"
+#include "XHHC_Peptide.h"
+
+#include <iostream>
+
+/**
+ * GLOBALS - TODO GET RID OF THESE!
+ */
+FLOAT_T* mass_matrix = NULL;
+int mass_matrix_size = -1;
+
+
+/**
+ * \returns a blank LinkedIonSeries object
+ */
+LinkedIonSeries::LinkedIonSeries() {
+  charge_ = 0;
+  fragment_mass_type_ = get_mass_type_parameter("fragment-mass");
+}
+
+/**
+ * \returns an ion series object assigning the charge.
+ */
+LinkedIonSeries::LinkedIonSeries(
+  int charge ///< The maximum charge of the ion series.
+  ) {
+
+  charge_ = charge;
+  fragment_mass_type_ = get_mass_type_parameter("fragment-mass");
+}
+
+/**
+ * Default desctructor
+ */
+LinkedIonSeries::~LinkedIonSeries() {
+
+}
+
+/**
+ * \returns charge for this linked ion series
+ */
+int LinkedIonSeries::getCharge() {
+  return charge_;
+}
+
+/**
+ * \returns all the ions in this series
+ */
+vector<LinkedPeptide>& LinkedIonSeries::getIons() {
+  return all_ions_;
+}
+
+/**
+ * \returns the number of ions within this series
+ */
+int LinkedIonSeries::getSize() {
+  return all_ions_.size();
+}
+
+/**
+ * removes all ions from this series
+ */
+void LinkedIonSeries::clear() {
+  all_ions_.clear();
+}
+
+/**
+ * prints out tab delimited information about the ion series
+ */
+void LinkedIonSeries::print() {
+
+  LinkedPeptide::sortByMZ(all_ions_, fragment_mass_type_);
+
+  cout << "m/z\ttype\tcharge\tion" << endl;
+  string ion_type;
+  for (vector<LinkedPeptide>::iterator ion = all_ions_.begin(); 
+    ion != all_ions_.end(); 
+    ++ion) {
+
+    if (ion->getIonType() == B_ION) 
+      ion_type = "B_ION";
+    else 
+      ion_type = "Y_ION";
+    
+    cout << ion->getMZ(fragment_mass_type_) << "\t" << 
+            ion_type << "\t" << 
+            ion->getCharge() << "\t" << 
+            *ion << endl;
+  }
+}
+
+/** 
+ * cleaves linked_peptide at all positions, adding b and y ions
+ */
+void LinkedIonSeries::addLinkedIons(
+  LinkedPeptide& linked_peptide, ///< The linked peptide
+  SPLITTYPE_T split_type ///< Which peptide to split (A,B, or BOTH)
+  ) {
+
+  linked_peptide.setCharge(charge_);
+
+  fragments_.clear();
+  // split the precursor at every cleavage site
+
+  switch(split_type) {
+    case SPLITTYPE_A:
+      linked_peptide.splitA(fragments_);
+      break;
+    case SPLITTYPE_B:
+      linked_peptide.splitB(fragments_);
+      break;
+    case SPLITTYPE_BOTH:
+      linked_peptide.split(fragments_);
+      break;
+    case SPLITTYPE_INVALID:
+    case NUMBER_SPLITTYPES:
+      carp(CARP_FATAL, "SPLITTYPE invalid:%d", (int)split_type);
+  }
+  
+  for (vector<pair<LinkedPeptide, LinkedPeptide> >::iterator ion_pair = 
+    fragments_.begin(); 
+    ion_pair != fragments_.end(); 
+    ++ion_pair) {
+
+    // if b-ion and not a neutral loss
+    if (ion_pair->first.getCharge() != 0) {
+      ion_pair->first.setIonType(B_ION); 
+      ion_pair->first.getMZ(fragment_mass_type_);
+      all_ions_.push_back(ion_pair->first);
+    }
+    // if y-ion and not a neutral loss
+    if (ion_pair->second.getCharge() != 0) {
+      ion_pair->second.setIonType(Y_ION); 
+      ion_pair->second.getMZ(fragment_mass_type_);
+      all_ions_.push_back(ion_pair->second);
+    }
+  }
+  
+}
+
+/**
+ * gets the Total number of by ions in this series.
+ */ 
+int LinkedIonSeries::getTotalBYIons() {
+   
+  int ans = 0;
+  vector<LinkedPeptide>::iterator ion_iter;
+
+  for (ion_iter = all_ions_.begin(); 
+    ion_iter != all_ions_.end(); 
+     ++ion_iter) {
+
+    if (ion_iter -> getIonType() == B_ION || ion_iter -> getIonType() == Y_ION) {
+      ans++;
+    }
+  }
+  return ans;
+}
+
+/**
+ * adds an ion to the observed list, used in conjunction with 
+ * getObservableIons
+ */
+void LinkedIonSeries::addIonBin(
+  map<int, bool>& observed, ///< the observed bin vector -in/out
+  int& ions, ///< the number of ions -in/out
+  int& ions_bin, ///< the number of binned ions -in/out
+  FLOAT_T mz, ///< m/z of the ion
+  FLOAT_T bin_width, ///< bin-width
+  FLOAT_T min_mz, ///< max m/z for the range
+  FLOAT_T max_mz, ///< min m/z for the range
+  bool add_flanks ///< add flanks?
+  ) {
+
+  if ((mz >= min_mz) && (mz <= max_mz)) {
+    ions++;
+    int bin_idx = (int)(mz / bin_width + 0.5);
+    if (observed.find(bin_idx) == observed.end()) {
+      observed[bin_idx] = true;
+      ions_bin++;
+    }
+    if (add_flanks) {
+      
+      bin_idx = bin_idx - 1;
+      FLOAT_T flank_mz = bin_idx * bin_width;
+      if (flank_mz >= min_mz) {
+        ions++;
+        if (observed.find(bin_idx) == observed.end()) {
+          observed[bin_idx] = true;
+          ions_bin++;
+        }
+      }
+      bin_idx = bin_idx + 2;
+      flank_mz = bin_idx * bin_width;
+      if (flank_mz <= max_mz) {
+        ions++;
+        if (observed.find(bin_idx) == observed.end()) {
+          observed[bin_idx] = true;
+          ions_bin++;
+        }
+      }
+    }
+  }
+}
+
+/**
+ * \returns the total number of ions observable within a binned
+ * range
+ */
+int LinkedIonSeries::getObservableIons(
+  FLOAT_T min_mz, ///< the minimum m/z -in
+  FLOAT_T max_mz, ///< the maximum m/z -in
+  FLOAT_T bin_width, ///< the width of the bins -in
+  int& ions_observable, ///<number of ions observable -out
+  int& ions_observable_bin ///<number of bins observable -out
+  ) {
+  
+  ions_observable = 0;
+  ions_observable_bin = 0;
+
+  map<int, bool> observed;
+
+  for (vector<LinkedPeptide>::iterator ion_iter = all_ions_.begin();
+    ion_iter != all_ions_.end();
+    ++ion_iter) {
+
+    double mz = ion_iter -> getMZ(MONO);
+
+    if (ion_iter -> getIonType() == B_ION || 
+      ion_iter -> getIonType() == Y_ION) {
+      addIonBin(observed, ions_observable, ions_observable_bin, mz, bin_width, min_mz, max_mz, true);
+      double h2O_mz = ion_iter -> getMZ(MONO) - (MASS_H2O_MONO/ ion_iter -> getCharge());
+      addIonBin(observed, ions_observable, ions_observable_bin, h2O_mz, bin_width, min_mz, max_mz, false);
+      double nh3_mz = ion_iter -> getMZ(MONO) - (MASS_NH3_MONO/ ion_iter -> getCharge());
+      addIonBin(observed, ions_observable, ions_observable_bin, nh3_mz, bin_width, min_mz, max_mz, false);
+      double co_mz = ion_iter -> getMZ(MONO) - (MASS_CO_MONO / ion_iter -> getCharge());
+      addIonBin(observed, ions_observable, ions_observable_bin, co_mz, bin_width, min_mz, max_mz, false);
+    }
+  }
+  return 0;
+}
+
+/**
+ * \returns the total number of b-y ions observable within a binned
+ * range
+ */  
+int LinkedIonSeries::getObservableBYIons(
+  FLOAT_T min_mz, ///< the minimum m/z -in 
+  FLOAT_T max_mz, ///< the maximum m/z -in
+  FLOAT_T bin_width, ///< the width of the bins -in
+  int &by_observable, ///<number of ions observable -out
+  int &by_observable_bin ///<number of bins observable -out
+  ) {
+
+  by_observable = 0;
+  by_observable_bin = 0;
+
+  map<int, bool> observed;
+
+  vector<LinkedPeptide>::iterator ion_iter;
+
+  for (ion_iter = all_ions_.begin(); 
+       ion_iter != all_ions_.end(); 
+       ++ion_iter) {
+    if (ion_iter -> getMZ(MONO) >= min_mz && ion_iter -> getMZ(MONO) <= max_mz) {
+      if (ion_iter ->getIonType() == B_ION || ion_iter -> getIonType() == Y_ION) {
+        by_observable++;
+        int bin_idx = 
+          (int)(ion_iter->getMZ(MONO) / bin_width + 0.5);
+        if (observed.find(bin_idx) == observed.end()) {
+          observed[bin_idx] = true;
+          by_observable_bin++;
+        }
+      }
+    }
+  }
+  return by_observable_bin;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/xlink/LinkedIonSeries.h b/src/app/xlink/LinkedIonSeries.h
new file mode 100644
index 0000000..3f63009
--- /dev/null
+++ b/src/app/xlink/LinkedIonSeries.h
@@ -0,0 +1,139 @@
+/**
+ * \file LinkedIonSeries.h 
+ * AUTHOR: Sean McIlwain and Paul Draghicescu
+ * CREATE DATE: 18 January 2012
+ * \brief Object for keeping track of a (non-)crosslinked peptide ions.
+ *****************************************************************************/
+#ifndef LINKEDIONSERIES_H
+#define LINKEDIONSERIES_H
+
+#include "xhhc.h"
+
+//CRUX includes
+#include "model/IonSeries.h"
+#include "model/Scorer.h"
+#include "model/Spectrum.h"
+#include "io/SpectrumCollection.h"
+
+class LinkedIonSeries {
+ protected:
+
+  int charge_; ///< maximum charge of the ion series
+  std::vector<LinkedPeptide> all_ions_; ///< list of all ions
+  std::vector<pair<LinkedPeptide, LinkedPeptide> > fragments_; ///< for add linked ions
+  MASS_TYPE_T fragment_mass_type_; ///< mass type of the fragments.
+
+  /**
+   * adds an ion to the observed list, used in conjunction with 
+   * getObservableIons
+   */
+  void addIonBin(
+    map<int, bool>& observed, ///< the observed bin vector -in/out
+    int& ions, ///< the number of ions -in/out
+    int& ions_bin, ///< the number of binned ions -in/out
+    FLOAT_T mz, ///< m/z of the ion
+    FLOAT_T bin_width, ///< bin-width
+    FLOAT_T min_mz, ///< max m/z for the range
+    FLOAT_T max_mz, ///< min m/z for the range
+    bool add_flanks ///< add flanks?
+    );
+
+ public:
+
+  /**
+   * \returns a blank LinkedIonSeries object
+   */
+  LinkedIonSeries();
+
+  /**
+   * \returns an ion series object assigning the charge.
+   */
+  LinkedIonSeries(
+    int charge ///< The maximum charge of the ion series.
+  );
+
+  /**
+   * Default destructor
+   */
+  virtual ~LinkedIonSeries();
+
+  /**
+   * \returns charge for this linked ion series
+   */
+  int getCharge();
+
+  /**
+   * \returns all the ions in this series
+   */
+  std::vector<LinkedPeptide>& getIons();
+
+  /**
+   * \returns the number of ions within this series
+   */
+  int getSize();
+
+  /**
+   * \returns the total number of by ions for this series
+   */
+  int getTotalBYIons();
+
+  /**
+   * \returns the total number of ions observable within a binned
+   * range
+   */
+  int getObservableIons(
+    FLOAT_T min_mz, ///< the minimum m/z -in
+    FLOAT_T max_mz, ///< the maximum m/z -in
+    FLOAT_T bin_width, ///< the width of the bins -in
+    int& ions_observable, ///<number of ions observable -out
+    int& ions_observable_bin ///<number of bins observable -out
+  );
+
+  /**
+   * \returns the total number of b-y ions observable within a binned
+   * range
+   */  
+  int getObservableBYIons(
+    FLOAT_T min_mz, ///< the minimum m/z -in
+    FLOAT_T max_mz, ///< the maximum m/z -in
+    FLOAT_T bin_width, ///< the width of the bins -in
+    int &by_observable, ///<number of ions observable -out
+    int &by_observable_bin ///<number of bins observable -out
+  );
+
+  /**
+   * sets the charge for this ion series
+   */
+  void setCharge(
+    int charge ///< the charge
+    );
+  
+  /**
+   * removes all ions from this series
+   */
+  void clear();
+
+  /**
+   * Adds the linked ions for a linked peptide
+   */
+  void addLinkedIons(
+    LinkedPeptide& linked_peptide, ///< The linked peptide 
+    SPLITTYPE_T split_type = SPLITTYPE_BOTH ///< Which peptide to split
+  );
+
+  /**
+   * prints out tab delimited information about the ion series
+   */
+  void print();
+
+
+};
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/app/xlink/LinkedPeptide.cpp b/src/app/xlink/LinkedPeptide.cpp
new file mode 100644
index 0000000..fe22c9a
--- /dev/null
+++ b/src/app/xlink/LinkedPeptide.cpp
@@ -0,0 +1,459 @@
+/**
+ * \file LinkedPeptide.cpp 
+ * AUTHOR: Sean McIlwain and Paul Draghicescu
+ * CREATE DATE: 18 January 2012
+ * \brief Object for keeping track of a (non-)crosslinked peptide.
+ *****************************************************************************/
+//TODO Change cout/cerrs to CARP.
+
+#include "LinkedPeptide.h"
+#include "XHHC_Peptide.h"
+
+using namespace Crux;
+
+/**
+ * mass of the linker
+ */
+FLOAT_T LinkedPeptide::linker_mass_;
+
+/**
+ * Initializes the object
+ */
+void LinkedPeptide::init() {
+
+  mass_calculated_[MONO] = false;
+  mass_calculated_[AVERAGE] = false;
+  charge_ = 0;
+  type_ = NUMBER_ION_TYPES;
+  mass_[MONO] = 0.0;
+  mass_[AVERAGE] = 0.0;
+  mz_[MONO] = 0.0;
+  mz_[AVERAGE] = 0.0;
+
+}
+
+/**
+ * \returns a blank LinkedPeptide object
+ */
+LinkedPeptide::LinkedPeptide() {
+  init();
+}
+
+/**
+ * \returns a linked peptide object.
+ * constructor for a linked peptide. If A or B null, then
+ * a self link will be created. If an index is -1, a link to nothing
+ * will be created.
+ */
+LinkedPeptide::LinkedPeptide(
+  char* peptide_A, ///< First peptide
+  char* peptide_B, ///< Second peptide (can be NULL)
+  int posA, ///< Index of link on first peptide
+  int posB, ///< Index of link on second peptide
+  int charge ///< charge of product
+  ) {
+
+  init();
+  mass_calculated_[MONO] = false;
+  mass_calculated_[AVERAGE] = false;
+  charge_ = charge;
+  decoy_ = false;
+  type_ = (ION_TYPE_T)NULL;
+  XHHC_Peptide pepA = XHHC_Peptide(peptide_A);
+  // if a self link or dead end
+  if (peptide_B == NULL) {
+     pepA.addLink(posA);
+    if (posB >= 0)
+      pepA.addLink(posB);
+    peptides_.push_back(pepA);
+  } else {
+    carp(CARP_DETAILED_DEBUG, "adding links at %d and %d", posA, posB);
+    XHHC_Peptide pepB = XHHC_Peptide(peptide_B);
+    pepA.addLink(posA);
+    pepB.addLink(posB);
+    peptides_.push_back(pepA);
+    peptides_.push_back(pepB);
+  }
+  getMZ(MONO);
+  getMZ(AVERAGE);
+}
+
+/**
+ * \returns a blank LinkedPeptide object with 
+ * the charge set
+ */
+LinkedPeptide::LinkedPeptide(
+    int charge ///< charge of product
+  ) {
+
+  init();
+  charge_ = charge;
+  decoy_ = false;
+  mass_calculated_[MONO] = false;
+  mass_calculated_[AVERAGE] = false;
+}
+
+/**
+ * Destructor
+ */
+LinkedPeptide::~LinkedPeptide() {
+}
+
+/**
+ * Sets the linker_mass_ static variable
+ */
+void LinkedPeptide::setLinkerMass(
+  FLOAT_T linker_mass ///< the linker mass
+  ) {
+
+  linker_mass_ = linker_mass;
+}
+
+/**
+ * \returns the linker_mass_ static variable
+ */
+FLOAT_T LinkedPeptide::getLinkerMass() {
+  return linker_mass_;
+}
+
+/**
+ * \returns a reference to the internal
+ * peptides vector
+ */
+vector<XHHC_Peptide>& LinkedPeptide::getPeptides() {
+
+  return peptides_;
+}
+
+/**
+ * \returns the charge of the LinkedPeptide
+ */
+int LinkedPeptide::getCharge() {
+  return charge_;
+}
+
+/**
+ * sets the charge of the LinkedPeptide
+ */
+void LinkedPeptide::setCharge(
+  int charge ///< the charge of the LinkedPeptide
+  ) {
+
+  charge_ = charge;
+}
+
+/**
+ * sets the IonType for the LinkedPeptide
+ */
+void LinkedPeptide::setIonType(
+  ION_TYPE_T type ///< The ion type
+  ) {
+  
+  type_ = type;
+}
+
+/**
+ * \returns the ion type for this LinkedPeptide
+ */
+ION_TYPE_T LinkedPeptide::getIonType() {
+  return type_;
+}
+
+/**
+ * \returns the number of peptides in this linked
+ * Peptide (should be 1 or 2)
+ */
+int LinkedPeptide::size() {
+  return peptides_.size();
+}
+
+/**
+ * indicates that this LinkedPeptide is a
+ * decoy
+ */
+void LinkedPeptide::setDecoy() {
+  decoy_ = true;
+}
+
+/**
+ * \returns whether the LinkedPeptide is a
+ * decoy
+ */
+bool LinkedPeptide::isDecoy() {
+  return decoy_;
+}
+
+/**
+ * adds a XHHC_Peptide to the list of peptide
+ * in this LinkedPeptide object
+ */
+void LinkedPeptide::addPeptide(
+  XHHC_Peptide& peptide
+  ) {
+
+  peptides_.push_back(peptide);
+  mass_calculated_[MONO] = false;
+  mass_calculated_[AVERAGE] = false;
+}
+
+/**
+ * \returns whether the LinkedPeptide is a
+ * crosslinked peptide
+ */
+bool LinkedPeptide::isCrossLinked() {
+  return size() == 2;
+}
+
+/**
+ * \returns whether the Peptide is a normal/linear peptide
+ */
+bool LinkedPeptide::isLinear() {
+  return (peptides_.size() == 1 && peptides_[0].linkSite() == -1);
+} 
+
+/**
+ * \returns whether the Peptide is a deadend
+ */
+bool LinkedPeptide::isDeadEnd() {
+  return (peptides_.size() == 1 && peptides_[0].getNumLinks() == 1);
+}
+
+/**
+ * \returns whether the Peptide is a self-loop
+ */
+bool LinkedPeptide::isSelfLoop() {
+  return (peptides_.size() == 1 && peptides_[0].getNumLinks() == 2);
+}
+
+/**
+ * /returns the mass of the LinkedPeptide
+ */
+FLOAT_T LinkedPeptide::getMass(
+  MASS_TYPE_T mass_type ///< MONO or AVERAGE
+  ) {
+
+  if (!mass_calculated_[mass_type])
+    calculateMass(mass_type);
+  return mass_[mass_type];
+   
+}
+
+/**
+ * calculates the mass of the LinkedPeptide
+ */
+void LinkedPeptide::calculateMass(
+  MASS_TYPE_T mass_type ///< MONO or AVERAGE
+  ) {
+
+  // remove H2O from mass if it's a b-ion
+
+  mass_[mass_type] = Peptide::calcSequenceMass((char*)peptides_[0].getSequence().c_str(), mass_type);   
+
+  if (peptides_[0].getNumLinks() > 0) {
+    mass_[mass_type] += linker_mass_;
+  }
+
+  if (size() == 2) {
+    mass_[mass_type] += Peptide::calcSequenceMass((char*)peptides_[1].getSequence().c_str(), mass_type);
+  }
+
+  if (type_ == B_ION) {
+    if (mass_type == MONO) {
+      mass_[mass_type] -= MASS_H2O_MONO;
+    } else {
+      mass_[mass_type] -= MASS_H2O_AVERAGE;
+    }
+  } 
+  mass_calculated_[mass_type] = true;
+}
+
+/**
+ * \returns the m/z of the LinkedPeptide
+ */
+FLOAT_T LinkedPeptide::getMZ (
+  MASS_TYPE_T mass_type ///< MONO or AVERAGE
+  )  {
+
+  if (mass_type == MONO) {
+    mz_[MONO] = (getMass(MONO) + MASS_PROTON * charge_) / charge_;
+  } else {
+    mz_[AVERAGE] = (getMass(AVERAGE) + MASS_H_AVERAGE * charge_) / charge_;
+  }
+  return mz_[mass_type];
+}
+
+/**
+ * splits the LinkedPeptide into b-y ions
+ */
+void LinkedPeptide::split(
+  vector<pair<LinkedPeptide, LinkedPeptide> >& ion_pairs ///< the b-y ion pairs
+  ) {
+
+  // split between every amino acid on every peptide in the
+  // linked peptide.
+  bool is_loop = false;
+  XHHC_Peptide peptideA = peptides_[0];  
+  XHHC_Peptide peptideB = peptides_[0];
+  // dead end
+  if (isDeadEnd()) {
+    peptideB.setSequence("");
+  }
+  // if a loop
+  if (peptideA.getNumLinks() == 2) {
+    is_loop = true;
+  } else if (isCrossLinked()) {
+    peptideB = peptides_[1];
+  }
+  for (int idx = 1; idx < peptideA.getLength(); ++idx) {
+    peptideA.splitAt(idx, ion_pairs, charge_, peptideB, is_loop);
+  }
+ 
+  if (isCrossLinked()) {
+    for (int idx = 1; idx < peptideB.getLength(); ++idx) {
+      peptideB.splitAt(idx, ion_pairs, charge_, peptideA, is_loop);
+    }
+  } 
+}
+
+/**
+ * splits the first LinkedPeptide into b-y ions
+ */
+void LinkedPeptide::splitA(
+  vector<pair<LinkedPeptide, LinkedPeptide> >& ion_pairs ///< the b-y ion pair
+  ) {
+
+  XHHC_Peptide peptideA = peptides_[0];
+  XHHC_Peptide peptideB = peptides_[1];
+
+  for (int idx = 1; idx < peptideA.getLength(); ++idx) {
+    peptideA.splitAt(idx, ion_pairs, charge_, peptideB, false);
+  }
+}
+
+/**
+ * splits the second LinkedPeptide into b-y ions
+ */
+void LinkedPeptide::splitB(
+  vector<pair<LinkedPeptide, LinkedPeptide> >& ion_pairs ///< the b-y ion pair
+  ) {
+
+  XHHC_Peptide peptideA = peptides_[0];
+  XHHC_Peptide peptideB = peptides_[1];
+
+  for (int idx = 1; idx < peptideB.getLength(); ++idx) {
+    peptideB.splitAt(idx, ion_pairs, charge_, peptideA, false);
+  }
+}
+
+/**
+ * used for sorting LinkedPeptides by mass
+ */
+bool operator < (
+  const LinkedPeptide &lp1, 
+  const LinkedPeptide &lp2) {
+
+  return lp1.mass_ < lp2.mass_;
+  //return lp1.mz < lp2.mz;
+}
+
+/**
+ * prints the LinkedPeptide to a stream
+ */
+std::ostream &operator<< (std::ostream& os, LinkedPeptide& lp) {
+  vector<XHHC_Peptide> peptides = lp.getPeptides();
+  ostringstream link_positions;
+  link_positions << "(";
+  for (int idx = 0; idx < peptides[0].getLength(); ++idx) {
+    if (peptides[0].hasLinkAt(idx)) link_positions << (idx+1) << "," ;
+  }
+  if (peptides.size() == 2) {
+    for (int idx = 0; idx < peptides[1].getLength(); ++idx) {
+      if (peptides[1].hasLinkAt(idx)) link_positions << (idx+1) << ")";
+    }
+    return os << peptides[0].getSequence() << "," << peptides[1].getSequence() << link_positions.str();// << " +" << lp.charge();
+  }
+  string final = link_positions.str();
+  if (final.length() > 1) final.erase(final.end()-1);
+  return os << peptides[0].getSequence() << final << ")";// +" << lp.charge();
+}
+
+bool compareMassAverage(const LinkedPeptide& lp1, const LinkedPeptide& lp2) {
+  if (lp1.mass_calculated_[AVERAGE] && lp2.mass_calculated_[AVERAGE]) { 
+    return lp1.mass_[AVERAGE] < lp2.mass_[AVERAGE];
+  } else {
+    carp(CARP_FATAL, "LinkedPeptide Average mass not calculated!");
+    return false;
+  }
+}
+
+bool compareMassMono(const LinkedPeptide& lp1, const LinkedPeptide& lp2) {
+  if (lp1.mass_calculated_[MONO] && lp2.mass_calculated_[MONO]) {
+    return lp1.mass_[MONO] < lp2.mass_[MONO];
+  } else {
+    carp(CARP_FATAL, "LinkedPeptide Mono mass not calculated!");
+    return false;
+  }
+}
+
+bool compareMZAverage(const LinkedPeptide& lp1, const LinkedPeptide& lp2) {
+
+  return lp1.mz_[AVERAGE] < lp2.mz_[AVERAGE];
+}
+
+bool compareMZMono(const LinkedPeptide& lp1, const LinkedPeptide& lp2) {
+  return lp1.mz_[MONO] < lp2.mz_[MONO];
+}
+
+
+/**
+ * Sorts a vector of LinkedPeptide by mass
+ */
+void LinkedPeptide::sortByMass(
+  vector<LinkedPeptide>& linked_peptides, ///< the LinkedPeptides to sort 
+  MASS_TYPE_T mass_type ///< MONO or AVERAGE
+  ) {
+  //TODO : should we put code here to make sure that we have
+  //calculated the all of the masses for a particular mass type?
+
+  if (mass_type == MONO) {
+    sort(linked_peptides.begin(), linked_peptides.end(), compareMassMono);
+  } else {
+    sort(linked_peptides.begin(), linked_peptides.end(), compareMassAverage);
+  }
+}
+
+/**
+ * Sorts a vector of LinkedPeptide by m/z
+ */
+/**
+ * Sorts a vector of LinkedPeptide by mass
+ */
+void LinkedPeptide::sortByMZ(
+  vector<LinkedPeptide>& linked_peptides, ///< the LinkedPeptides to sort 
+  MASS_TYPE_T mass_type ///< MONO or AVERAGE
+  ) {
+
+  IF_CARP(CARP_DEBUG,
+    //sanity check
+    for (unsigned int idx=0;idx < linked_peptides.size();idx++) {
+      if (!linked_peptides.at(idx).mass_calculated_[mass_type]) {
+        carp(CARP_ERROR, "mass not calculated for LinkedPeptide!");
+        linked_peptides.at(idx).getMZ(mass_type);
+      }
+    }
+  )
+
+  if (mass_type == MONO) {
+    sort(linked_peptides.begin(), linked_peptides.end(), compareMZMono);
+  } else {
+    sort(linked_peptides.begin(), linked_peptides.end(), compareMZAverage);
+  }
+}
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/xlink/LinkedPeptide.h b/src/app/xlink/LinkedPeptide.h
new file mode 100644
index 0000000..61f850d
--- /dev/null
+++ b/src/app/xlink/LinkedPeptide.h
@@ -0,0 +1,255 @@
+/**
+ * \file LinkedPeptide.h 
+ * AUTHOR: Sean McIlwain and Paul Draghicescu
+ * CREATE DATE: 18 January 2012
+ * \brief Object for keeping track of a (non-)crosslinked peptide.
+ *****************************************************************************/
+#ifndef LinkedPeptide_H
+#define LinkedPeptide_H
+
+#include "model/objects.h"
+#include "xhhc.h"
+
+
+class LinkedPeptide {
+ protected:
+  bool mass_calculated_[NUMBER_MASS_TYPES]; ///<MONO or AVERAGE.
+  int charge_; ///< charge of the LinkedPeptide
+  bool decoy_; ///< indicates that this LinkedPeptide is a decoy
+  ION_TYPE_T type_; ///<B_ION or Y_ION
+  FLOAT_T mass_[NUMBER_MASS_TYPES]; ///<mass of the LinkedPeptide
+  FLOAT_T mz_[NUMBER_MASS_TYPES]; ///<mz of the LinkedPeptide
+  std::vector<XHHC_Peptide> peptides_; ///<Peptides involved in the LinkedPeptide
+  static FLOAT_T linker_mass_; ///<Mass of the linker
+
+ public:
+  
+  /**
+   * Initializes the object
+   */
+  void init();
+
+  /**
+   * \returns a blank LinkedPeptide object
+   */
+  LinkedPeptide(); 
+
+  /**
+   * \returns a linked peptide object.
+   * constructor for a linked peptide. If A or B null, then
+   * a self link will be created. If an index is -1, a link to nothing
+   * will be created.
+   */
+  LinkedPeptide(
+    char* peptide_A, ///< First peptide
+    char* peptide_B, ///< Second peptide (can be NULL)
+    int posA, ///< Index of link on first peptide
+    int posB, ///< Index of link on second peptide
+    int charge ///< charge of product
+  );
+
+  /**
+   * \returns a blank LinkedPeptide object with 
+   * the charge set
+   */
+  LinkedPeptide(
+    int charge ///< charge of product
+  );
+
+  /**
+   * Destructor
+   */
+  virtual ~LinkedPeptide();
+
+  /**
+   * adds a XHHC_Peptide to the list of peptide
+   * in this LinkedPeptide object
+   */
+  void addPeptide(
+    XHHC_Peptide& peptide ///< the XHHC_Peptide
+  );
+  
+  /**
+   * \returns a reference to the internal
+   * peptides vector
+   */
+  std::vector<XHHC_Peptide>& getPeptides();
+
+  /**
+   * \returns the charge of the LinkedPeptide
+   */
+  int getCharge();
+
+  /**
+   * sets the charge of the LinkedPeptide
+   */
+  void setCharge(
+    int charge ///< the charge of the LinkedPeptide
+    );
+
+  /**
+   * sets the IonType for the LinkedPeptide
+   */
+  void setIonType(
+    ION_TYPE_T type ///<The ion type
+    );
+
+  /**
+   * \returns the ion type for this LinkedPeptide
+   */
+  ION_TYPE_T getIonType();
+
+  /**
+   * \returns the number of peptides in this linked
+   * Peptide (should be 1 or 2)
+   */
+  int size();
+  
+  /**
+   * indicates that this LinkedPeptide is a
+   * decoy
+   */
+  void setDecoy();
+
+  /**
+   * \returns whether the LinkedPeptide is a
+   * decoy
+   */
+  bool isDecoy();
+
+  /**
+   * \returns whether the LinkedPeptide is a
+   * crosslinked peptide
+   */
+  bool isCrossLinked();
+
+  /**
+   * \returns whether the Peptide is a deadend
+   */
+  bool isDeadEnd();
+
+  /**
+   * \returns whether the Peptide is a self-loop
+   */
+  bool isSelfLoop();
+
+  /**
+   * \returns whether the Peptide is a normal/linear peptide
+   */
+  bool isLinear();
+
+  /**
+   * \returns the m/z of the LinkedPeptide
+   */
+  FLOAT_T getMZ(
+    MASS_TYPE_T mass_type ///< MONO or AVERAGE
+    );
+
+  /**
+   * calculates the mass of the LinkedPeptide
+   */
+  void calculateMass(
+    MASS_TYPE_T mass_type ///< MONO or AVERAGE
+    );
+  
+  /**
+   * /returns the mass of the LinkedPeptide
+   */
+  FLOAT_T getMass(
+    MASS_TYPE_T mass_type //< Average or Monoisotopic
+  );
+  
+  /**
+   * splits the first LinkedPeptide into b-y ions
+   */
+  void splitA(
+    std::vector<std::pair<LinkedPeptide, LinkedPeptide> >& ion_pairs ///<the b-y ion pairs
+  );
+
+  /**
+   * splits the second LinkedPeptide into b-y ions
+   */
+  void splitB(
+    std::vector<std::pair<LinkedPeptide, LinkedPeptide> >& ion_pairs ///< the b-y ion pairs
+  );
+
+  /**
+   * splits the LinkedPeptide into b-y ions
+   */
+  void split(
+    std::vector<std::pair<LinkedPeptide, LinkedPeptide> >& ion_pairs ///< the b-y ion pairs
+  );
+
+  /**
+   * prints the LinkedPeptide to a stream
+   */
+  friend std::ostream &operator<< (
+    std::ostream& os, 
+    LinkedPeptide& lp); 
+
+  /**
+   * used for sorting LinkedPeptides
+   */
+  friend bool operator< (
+    const LinkedPeptide &lp1, 
+    const LinkedPeptide &lp2
+  );
+ 
+  friend bool compareMassMono(
+    const LinkedPeptide& lp1, 
+    const LinkedPeptide& lp2
+  );
+
+  friend bool compareMassAverage(
+    const LinkedPeptide& lp1, 
+    const LinkedPeptide& lp2
+  );
+
+  friend bool compareMZMono(
+    const LinkedPeptide& lp1,
+    const LinkedPeptide& lp2
+  );
+
+  friend bool compareMZAverage(
+    const LinkedPeptide& lp1,
+    const LinkedPeptide& lp2
+  );
+
+  /**
+   * Sorts a vector of LinkedPeptide by mass
+   */
+  static void sortByMass(
+    std::vector<LinkedPeptide>& linked_peptides, ///< The LinkedPeptides to sort
+    MASS_TYPE_T mass_type = MONO ///< MONO or AVERAGE
+  );
+
+  /**
+   * Sorts a vector of LinkedPeptide by m/z
+   */
+  static void sortByMZ(
+    std::vector<LinkedPeptide>& linked_peptides, ///< The LinkedPeptides to sort
+    MASS_TYPE_T mass_type = MONO ///< MONO or AVERAGE
+  );
+
+  /**
+   * Sets the linker_mass_ static variable
+   */
+  static void setLinkerMass(
+    FLOAT_T linker_mass ///<the linker mass
+    );
+
+  /**
+   * \returns the linker_mass_ static variable
+   */
+  static FLOAT_T getLinkerMass();
+
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/xlink/Makefile b/src/app/xlink/Makefile
new file mode 100644
index 0000000..e26c02e
--- /dev/null
+++ b/src/app/xlink/Makefile
@@ -0,0 +1,909 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 2.8
+
+# Default target executed when no arguments are given to make.
+default_target: all
+.PHONY : default_target
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+# A target that is always out of date.
+cmake_force:
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake
+
+# The command to remove a file.
+RM = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The program to use to edit the cache.
+CMAKE_EDIT_COMMAND = /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /data/TeamCity/buildAgent/work/779d99b0241b2175
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target edit_cache
+edit_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+.PHONY : edit_cache/fast
+
+# Special rule for the target install
+install: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install
+
+# Special rule for the target install
+install/fast: preinstall/fast
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -P cmake_install.cmake
+.PHONY : install/fast
+
+# Special rule for the target install/local
+install/local: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+.PHONY : install/local
+
+# Special rule for the target install/local
+install/local/fast: install/local
+.PHONY : install/local/fast
+
+# Special rule for the target install/strip
+install/strip: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+.PHONY : install/strip
+
+# Special rule for the target install/strip
+install/strip/fast: install/strip
+.PHONY : install/strip/fast
+
+# Special rule for the target list_install_components
+list_install_components:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
+.PHONY : list_install_components
+
+# Special rule for the target list_install_components
+list_install_components/fast: list_install_components
+.PHONY : list_install_components/fast
+
+# Special rule for the target package
+package: preinstall
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackConfig.cmake
+.PHONY : package
+
+# Special rule for the target package
+package/fast: package
+.PHONY : package/fast
+
+# Special rule for the target package_source
+package_source:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool for source..."
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && /net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cpack --config ./CPackSourceConfig.cmake /data/TeamCity/buildAgent/work/779d99b0241b2175/CPackSourceConfig.cmake
+.PHONY : package_source
+
+# Special rule for the target package_source
+package_source/fast: package_source
+.PHONY : package_source/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+	/net/gs/vol3/software/modules-sw/cmake/2.8.12.2/Linux/RHEL6/x86_64/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+.PHONY : rebuild_cache/fast
+
+# The main all target
+all: cmake_check_build_system
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles /data/TeamCity/buildAgent/work/779d99b0241b2175/src/app/xlink/CMakeFiles/progress.marks
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/xlink/all
+	$(CMAKE_COMMAND) -E cmake_progress_start /data/TeamCity/buildAgent/work/779d99b0241b2175/CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/xlink/clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/xlink/preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/xlink/preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+.PHONY : depend
+
+# Convenience name for target.
+src/app/xlink/CMakeFiles/xlink.dir/rule:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f CMakeFiles/Makefile2 src/app/xlink/CMakeFiles/xlink.dir/rule
+.PHONY : src/app/xlink/CMakeFiles/xlink.dir/rule
+
+# Convenience name for target.
+xlink: src/app/xlink/CMakeFiles/xlink.dir/rule
+.PHONY : xlink
+
+# fast build rule for target.
+xlink/fast:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/build
+.PHONY : xlink/fast
+
+LinearPeptide.o: LinearPeptide.cpp.o
+.PHONY : LinearPeptide.o
+
+# target to build an object file
+LinearPeptide.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/LinearPeptide.cpp.o
+.PHONY : LinearPeptide.cpp.o
+
+LinearPeptide.i: LinearPeptide.cpp.i
+.PHONY : LinearPeptide.i
+
+# target to preprocess a source file
+LinearPeptide.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/LinearPeptide.cpp.i
+.PHONY : LinearPeptide.cpp.i
+
+LinearPeptide.s: LinearPeptide.cpp.s
+.PHONY : LinearPeptide.s
+
+# target to generate assembly for a file
+LinearPeptide.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/LinearPeptide.cpp.s
+.PHONY : LinearPeptide.cpp.s
+
+LinkedIonSeries.o: LinkedIonSeries.cpp.o
+.PHONY : LinkedIonSeries.o
+
+# target to build an object file
+LinkedIonSeries.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/LinkedIonSeries.cpp.o
+.PHONY : LinkedIonSeries.cpp.o
+
+LinkedIonSeries.i: LinkedIonSeries.cpp.i
+.PHONY : LinkedIonSeries.i
+
+# target to preprocess a source file
+LinkedIonSeries.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/LinkedIonSeries.cpp.i
+.PHONY : LinkedIonSeries.cpp.i
+
+LinkedIonSeries.s: LinkedIonSeries.cpp.s
+.PHONY : LinkedIonSeries.s
+
+# target to generate assembly for a file
+LinkedIonSeries.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/LinkedIonSeries.cpp.s
+.PHONY : LinkedIonSeries.cpp.s
+
+LinkedPeptide.o: LinkedPeptide.cpp.o
+.PHONY : LinkedPeptide.o
+
+# target to build an object file
+LinkedPeptide.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/LinkedPeptide.cpp.o
+.PHONY : LinkedPeptide.cpp.o
+
+LinkedPeptide.i: LinkedPeptide.cpp.i
+.PHONY : LinkedPeptide.i
+
+# target to preprocess a source file
+LinkedPeptide.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/LinkedPeptide.cpp.i
+.PHONY : LinkedPeptide.cpp.i
+
+LinkedPeptide.s: LinkedPeptide.cpp.s
+.PHONY : LinkedPeptide.s
+
+# target to generate assembly for a file
+LinkedPeptide.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/LinkedPeptide.cpp.s
+.PHONY : LinkedPeptide.cpp.s
+
+SearchForXLinks.o: SearchForXLinks.cpp.o
+.PHONY : SearchForXLinks.o
+
+# target to build an object file
+SearchForXLinks.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/SearchForXLinks.cpp.o
+.PHONY : SearchForXLinks.cpp.o
+
+SearchForXLinks.i: SearchForXLinks.cpp.i
+.PHONY : SearchForXLinks.i
+
+# target to preprocess a source file
+SearchForXLinks.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/SearchForXLinks.cpp.i
+.PHONY : SearchForXLinks.cpp.i
+
+SearchForXLinks.s: SearchForXLinks.cpp.s
+.PHONY : SearchForXLinks.s
+
+# target to generate assembly for a file
+SearchForXLinks.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/SearchForXLinks.cpp.s
+.PHONY : SearchForXLinks.cpp.s
+
+SelfLoopPeptide.o: SelfLoopPeptide.cpp.o
+.PHONY : SelfLoopPeptide.o
+
+# target to build an object file
+SelfLoopPeptide.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/SelfLoopPeptide.cpp.o
+.PHONY : SelfLoopPeptide.cpp.o
+
+SelfLoopPeptide.i: SelfLoopPeptide.cpp.i
+.PHONY : SelfLoopPeptide.i
+
+# target to preprocess a source file
+SelfLoopPeptide.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/SelfLoopPeptide.cpp.i
+.PHONY : SelfLoopPeptide.cpp.i
+
+SelfLoopPeptide.s: SelfLoopPeptide.cpp.s
+.PHONY : SelfLoopPeptide.s
+
+# target to generate assembly for a file
+SelfLoopPeptide.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/SelfLoopPeptide.cpp.s
+.PHONY : SelfLoopPeptide.cpp.s
+
+Weibull.o: Weibull.cpp.o
+.PHONY : Weibull.o
+
+# target to build an object file
+Weibull.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/Weibull.cpp.o
+.PHONY : Weibull.cpp.o
+
+Weibull.i: Weibull.cpp.i
+.PHONY : Weibull.i
+
+# target to preprocess a source file
+Weibull.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/Weibull.cpp.i
+.PHONY : Weibull.cpp.i
+
+Weibull.s: Weibull.cpp.s
+.PHONY : Weibull.s
+
+# target to generate assembly for a file
+Weibull.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/Weibull.cpp.s
+.PHONY : Weibull.cpp.s
+
+XHHC_Peptide.o: XHHC_Peptide.cpp.o
+.PHONY : XHHC_Peptide.o
+
+# target to build an object file
+XHHC_Peptide.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XHHC_Peptide.cpp.o
+.PHONY : XHHC_Peptide.cpp.o
+
+XHHC_Peptide.i: XHHC_Peptide.cpp.i
+.PHONY : XHHC_Peptide.i
+
+# target to preprocess a source file
+XHHC_Peptide.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XHHC_Peptide.cpp.i
+.PHONY : XHHC_Peptide.cpp.i
+
+XHHC_Peptide.s: XHHC_Peptide.cpp.s
+.PHONY : XHHC_Peptide.s
+
+# target to generate assembly for a file
+XHHC_Peptide.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XHHC_Peptide.cpp.s
+.PHONY : XHHC_Peptide.cpp.s
+
+XLink.o: XLink.cpp.o
+.PHONY : XLink.o
+
+# target to build an object file
+XLink.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLink.cpp.o
+.PHONY : XLink.cpp.o
+
+XLink.i: XLink.cpp.i
+.PHONY : XLink.i
+
+# target to preprocess a source file
+XLink.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLink.cpp.i
+.PHONY : XLink.cpp.i
+
+XLink.s: XLink.cpp.s
+.PHONY : XLink.s
+
+# target to generate assembly for a file
+XLink.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLink.cpp.s
+.PHONY : XLink.cpp.s
+
+XLinkBondMap.o: XLinkBondMap.cpp.o
+.PHONY : XLinkBondMap.o
+
+# target to build an object file
+XLinkBondMap.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkBondMap.cpp.o
+.PHONY : XLinkBondMap.cpp.o
+
+XLinkBondMap.i: XLinkBondMap.cpp.i
+.PHONY : XLinkBondMap.i
+
+# target to preprocess a source file
+XLinkBondMap.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkBondMap.cpp.i
+.PHONY : XLinkBondMap.cpp.i
+
+XLinkBondMap.s: XLinkBondMap.cpp.s
+.PHONY : XLinkBondMap.s
+
+# target to generate assembly for a file
+XLinkBondMap.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkBondMap.cpp.s
+.PHONY : XLinkBondMap.cpp.s
+
+XLinkDatabase.o: XLinkDatabase.cpp.o
+.PHONY : XLinkDatabase.o
+
+# target to build an object file
+XLinkDatabase.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkDatabase.cpp.o
+.PHONY : XLinkDatabase.cpp.o
+
+XLinkDatabase.i: XLinkDatabase.cpp.i
+.PHONY : XLinkDatabase.i
+
+# target to preprocess a source file
+XLinkDatabase.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkDatabase.cpp.i
+.PHONY : XLinkDatabase.cpp.i
+
+XLinkDatabase.s: XLinkDatabase.cpp.s
+.PHONY : XLinkDatabase.s
+
+# target to generate assembly for a file
+XLinkDatabase.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkDatabase.cpp.s
+.PHONY : XLinkDatabase.cpp.s
+
+XLinkIonSeriesCache.o: XLinkIonSeriesCache.cpp.o
+.PHONY : XLinkIonSeriesCache.o
+
+# target to build an object file
+XLinkIonSeriesCache.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkIonSeriesCache.cpp.o
+.PHONY : XLinkIonSeriesCache.cpp.o
+
+XLinkIonSeriesCache.i: XLinkIonSeriesCache.cpp.i
+.PHONY : XLinkIonSeriesCache.i
+
+# target to preprocess a source file
+XLinkIonSeriesCache.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkIonSeriesCache.cpp.i
+.PHONY : XLinkIonSeriesCache.cpp.i
+
+XLinkIonSeriesCache.s: XLinkIonSeriesCache.cpp.s
+.PHONY : XLinkIonSeriesCache.s
+
+# target to generate assembly for a file
+XLinkIonSeriesCache.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkIonSeriesCache.cpp.s
+.PHONY : XLinkIonSeriesCache.cpp.s
+
+XLinkMatch.o: XLinkMatch.cpp.o
+.PHONY : XLinkMatch.o
+
+# target to build an object file
+XLinkMatch.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkMatch.cpp.o
+.PHONY : XLinkMatch.cpp.o
+
+XLinkMatch.i: XLinkMatch.cpp.i
+.PHONY : XLinkMatch.i
+
+# target to preprocess a source file
+XLinkMatch.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkMatch.cpp.i
+.PHONY : XLinkMatch.cpp.i
+
+XLinkMatch.s: XLinkMatch.cpp.s
+.PHONY : XLinkMatch.s
+
+# target to generate assembly for a file
+XLinkMatch.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkMatch.cpp.s
+.PHONY : XLinkMatch.cpp.s
+
+XLinkMatchCollection.o: XLinkMatchCollection.cpp.o
+.PHONY : XLinkMatchCollection.o
+
+# target to build an object file
+XLinkMatchCollection.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkMatchCollection.cpp.o
+.PHONY : XLinkMatchCollection.cpp.o
+
+XLinkMatchCollection.i: XLinkMatchCollection.cpp.i
+.PHONY : XLinkMatchCollection.i
+
+# target to preprocess a source file
+XLinkMatchCollection.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkMatchCollection.cpp.i
+.PHONY : XLinkMatchCollection.cpp.i
+
+XLinkMatchCollection.s: XLinkMatchCollection.cpp.s
+.PHONY : XLinkMatchCollection.s
+
+# target to generate assembly for a file
+XLinkMatchCollection.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkMatchCollection.cpp.s
+.PHONY : XLinkMatchCollection.cpp.s
+
+XLinkPeptide.o: XLinkPeptide.cpp.o
+.PHONY : XLinkPeptide.o
+
+# target to build an object file
+XLinkPeptide.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkPeptide.cpp.o
+.PHONY : XLinkPeptide.cpp.o
+
+XLinkPeptide.i: XLinkPeptide.cpp.i
+.PHONY : XLinkPeptide.i
+
+# target to preprocess a source file
+XLinkPeptide.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkPeptide.cpp.i
+.PHONY : XLinkPeptide.cpp.i
+
+XLinkPeptide.s: XLinkPeptide.cpp.s
+.PHONY : XLinkPeptide.s
+
+# target to generate assembly for a file
+XLinkPeptide.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkPeptide.cpp.s
+.PHONY : XLinkPeptide.cpp.s
+
+XLinkScorer.o: XLinkScorer.cpp.o
+.PHONY : XLinkScorer.o
+
+# target to build an object file
+XLinkScorer.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkScorer.cpp.o
+.PHONY : XLinkScorer.cpp.o
+
+XLinkScorer.i: XLinkScorer.cpp.i
+.PHONY : XLinkScorer.i
+
+# target to preprocess a source file
+XLinkScorer.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkScorer.cpp.i
+.PHONY : XLinkScorer.cpp.i
+
+XLinkScorer.s: XLinkScorer.cpp.s
+.PHONY : XLinkScorer.s
+
+# target to generate assembly for a file
+XLinkScorer.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkScorer.cpp.s
+.PHONY : XLinkScorer.cpp.s
+
+XLinkSite.o: XLinkSite.cpp.o
+.PHONY : XLinkSite.o
+
+# target to build an object file
+XLinkSite.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkSite.cpp.o
+.PHONY : XLinkSite.cpp.o
+
+XLinkSite.i: XLinkSite.cpp.i
+.PHONY : XLinkSite.i
+
+# target to preprocess a source file
+XLinkSite.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkSite.cpp.i
+.PHONY : XLinkSite.cpp.i
+
+XLinkSite.s: XLinkSite.cpp.s
+.PHONY : XLinkSite.s
+
+# target to generate assembly for a file
+XLinkSite.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkSite.cpp.s
+.PHONY : XLinkSite.cpp.s
+
+XLinkablePeptide.o: XLinkablePeptide.cpp.o
+.PHONY : XLinkablePeptide.o
+
+# target to build an object file
+XLinkablePeptide.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkablePeptide.cpp.o
+.PHONY : XLinkablePeptide.cpp.o
+
+XLinkablePeptide.i: XLinkablePeptide.cpp.i
+.PHONY : XLinkablePeptide.i
+
+# target to preprocess a source file
+XLinkablePeptide.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkablePeptide.cpp.i
+.PHONY : XLinkablePeptide.cpp.i
+
+XLinkablePeptide.s: XLinkablePeptide.cpp.s
+.PHONY : XLinkablePeptide.s
+
+# target to generate assembly for a file
+XLinkablePeptide.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkablePeptide.cpp.s
+.PHONY : XLinkablePeptide.cpp.s
+
+XLinkablePeptideIterator.o: XLinkablePeptideIterator.cpp.o
+.PHONY : XLinkablePeptideIterator.o
+
+# target to build an object file
+XLinkablePeptideIterator.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkablePeptideIterator.cpp.o
+.PHONY : XLinkablePeptideIterator.cpp.o
+
+XLinkablePeptideIterator.i: XLinkablePeptideIterator.cpp.i
+.PHONY : XLinkablePeptideIterator.i
+
+# target to preprocess a source file
+XLinkablePeptideIterator.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkablePeptideIterator.cpp.i
+.PHONY : XLinkablePeptideIterator.cpp.i
+
+XLinkablePeptideIterator.s: XLinkablePeptideIterator.cpp.s
+.PHONY : XLinkablePeptideIterator.s
+
+# target to generate assembly for a file
+XLinkablePeptideIterator.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkablePeptideIterator.cpp.s
+.PHONY : XLinkablePeptideIterator.cpp.s
+
+XLinkablePeptideIteratorTopN.o: XLinkablePeptideIteratorTopN.cpp.o
+.PHONY : XLinkablePeptideIteratorTopN.o
+
+# target to build an object file
+XLinkablePeptideIteratorTopN.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkablePeptideIteratorTopN.cpp.o
+.PHONY : XLinkablePeptideIteratorTopN.cpp.o
+
+XLinkablePeptideIteratorTopN.i: XLinkablePeptideIteratorTopN.cpp.i
+.PHONY : XLinkablePeptideIteratorTopN.i
+
+# target to preprocess a source file
+XLinkablePeptideIteratorTopN.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkablePeptideIteratorTopN.cpp.i
+.PHONY : XLinkablePeptideIteratorTopN.cpp.i
+
+XLinkablePeptideIteratorTopN.s: XLinkablePeptideIteratorTopN.cpp.s
+.PHONY : XLinkablePeptideIteratorTopN.s
+
+# target to generate assembly for a file
+XLinkablePeptideIteratorTopN.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/XLinkablePeptideIteratorTopN.cpp.s
+.PHONY : XLinkablePeptideIteratorTopN.cpp.s
+
+xhhc.o: xhhc.cpp.o
+.PHONY : xhhc.o
+
+# target to build an object file
+xhhc.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xhhc.cpp.o
+.PHONY : xhhc.cpp.o
+
+xhhc.i: xhhc.cpp.i
+.PHONY : xhhc.i
+
+# target to preprocess a source file
+xhhc.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xhhc.cpp.i
+.PHONY : xhhc.cpp.i
+
+xhhc.s: xhhc.cpp.s
+.PHONY : xhhc.s
+
+# target to generate assembly for a file
+xhhc.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xhhc.cpp.s
+.PHONY : xhhc.cpp.s
+
+xhhc_score_peptide_spectrum.o: xhhc_score_peptide_spectrum.cpp.o
+.PHONY : xhhc_score_peptide_spectrum.o
+
+# target to build an object file
+xhhc_score_peptide_spectrum.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xhhc_score_peptide_spectrum.cpp.o
+.PHONY : xhhc_score_peptide_spectrum.cpp.o
+
+xhhc_score_peptide_spectrum.i: xhhc_score_peptide_spectrum.cpp.i
+.PHONY : xhhc_score_peptide_spectrum.i
+
+# target to preprocess a source file
+xhhc_score_peptide_spectrum.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xhhc_score_peptide_spectrum.cpp.i
+.PHONY : xhhc_score_peptide_spectrum.cpp.i
+
+xhhc_score_peptide_spectrum.s: xhhc_score_peptide_spectrum.cpp.s
+.PHONY : xhhc_score_peptide_spectrum.s
+
+# target to generate assembly for a file
+xhhc_score_peptide_spectrum.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xhhc_score_peptide_spectrum.cpp.s
+.PHONY : xhhc_score_peptide_spectrum.cpp.s
+
+xhhc_scorer.o: xhhc_scorer.cpp.o
+.PHONY : xhhc_scorer.o
+
+# target to build an object file
+xhhc_scorer.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xhhc_scorer.cpp.o
+.PHONY : xhhc_scorer.cpp.o
+
+xhhc_scorer.i: xhhc_scorer.cpp.i
+.PHONY : xhhc_scorer.i
+
+# target to preprocess a source file
+xhhc_scorer.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xhhc_scorer.cpp.i
+.PHONY : xhhc_scorer.cpp.i
+
+xhhc_scorer.s: xhhc_scorer.cpp.s
+.PHONY : xhhc_scorer.s
+
+# target to generate assembly for a file
+xhhc_scorer.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xhhc_scorer.cpp.s
+.PHONY : xhhc_scorer.cpp.s
+
+xhhc_search.o: xhhc_search.cpp.o
+.PHONY : xhhc_search.o
+
+# target to build an object file
+xhhc_search.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xhhc_search.cpp.o
+.PHONY : xhhc_search.cpp.o
+
+xhhc_search.i: xhhc_search.cpp.i
+.PHONY : xhhc_search.i
+
+# target to preprocess a source file
+xhhc_search.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xhhc_search.cpp.i
+.PHONY : xhhc_search.cpp.i
+
+xhhc_search.s: xhhc_search.cpp.s
+.PHONY : xhhc_search.s
+
+# target to generate assembly for a file
+xhhc_search.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xhhc_search.cpp.s
+.PHONY : xhhc_search.cpp.s
+
+xlink_assign_ions.o: xlink_assign_ions.cpp.o
+.PHONY : xlink_assign_ions.o
+
+# target to build an object file
+xlink_assign_ions.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xlink_assign_ions.cpp.o
+.PHONY : xlink_assign_ions.cpp.o
+
+xlink_assign_ions.i: xlink_assign_ions.cpp.i
+.PHONY : xlink_assign_ions.i
+
+# target to preprocess a source file
+xlink_assign_ions.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xlink_assign_ions.cpp.i
+.PHONY : xlink_assign_ions.cpp.i
+
+xlink_assign_ions.s: xlink_assign_ions.cpp.s
+.PHONY : xlink_assign_ions.s
+
+# target to generate assembly for a file
+xlink_assign_ions.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xlink_assign_ions.cpp.s
+.PHONY : xlink_assign_ions.cpp.s
+
+xlink_compute_qvalues.o: xlink_compute_qvalues.cpp.o
+.PHONY : xlink_compute_qvalues.o
+
+# target to build an object file
+xlink_compute_qvalues.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xlink_compute_qvalues.cpp.o
+.PHONY : xlink_compute_qvalues.cpp.o
+
+xlink_compute_qvalues.i: xlink_compute_qvalues.cpp.i
+.PHONY : xlink_compute_qvalues.i
+
+# target to preprocess a source file
+xlink_compute_qvalues.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xlink_compute_qvalues.cpp.i
+.PHONY : xlink_compute_qvalues.cpp.i
+
+xlink_compute_qvalues.s: xlink_compute_qvalues.cpp.s
+.PHONY : xlink_compute_qvalues.s
+
+# target to generate assembly for a file
+xlink_compute_qvalues.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xlink_compute_qvalues.cpp.s
+.PHONY : xlink_compute_qvalues.cpp.s
+
+xlink_search.o: xlink_search.cpp.o
+.PHONY : xlink_search.o
+
+# target to build an object file
+xlink_search.cpp.o:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xlink_search.cpp.o
+.PHONY : xlink_search.cpp.o
+
+xlink_search.i: xlink_search.cpp.i
+.PHONY : xlink_search.i
+
+# target to preprocess a source file
+xlink_search.cpp.i:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xlink_search.cpp.i
+.PHONY : xlink_search.cpp.i
+
+xlink_search.s: xlink_search.cpp.s
+.PHONY : xlink_search.s
+
+# target to generate assembly for a file
+xlink_search.cpp.s:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(MAKE) -f src/app/xlink/CMakeFiles/xlink.dir/build.make src/app/xlink/CMakeFiles/xlink.dir/xlink_search.cpp.s
+.PHONY : xlink_search.cpp.s
+
+# Help Target
+help:
+	@echo "The following are some of the valid targets for this Makefile:"
+	@echo "... all (the default if no target is provided)"
+	@echo "... clean"
+	@echo "... depend"
+	@echo "... edit_cache"
+	@echo "... install"
+	@echo "... install/local"
+	@echo "... install/strip"
+	@echo "... list_install_components"
+	@echo "... package"
+	@echo "... package_source"
+	@echo "... rebuild_cache"
+	@echo "... xlink"
+	@echo "... LinearPeptide.o"
+	@echo "... LinearPeptide.i"
+	@echo "... LinearPeptide.s"
+	@echo "... LinkedIonSeries.o"
+	@echo "... LinkedIonSeries.i"
+	@echo "... LinkedIonSeries.s"
+	@echo "... LinkedPeptide.o"
+	@echo "... LinkedPeptide.i"
+	@echo "... LinkedPeptide.s"
+	@echo "... SearchForXLinks.o"
+	@echo "... SearchForXLinks.i"
+	@echo "... SearchForXLinks.s"
+	@echo "... SelfLoopPeptide.o"
+	@echo "... SelfLoopPeptide.i"
+	@echo "... SelfLoopPeptide.s"
+	@echo "... Weibull.o"
+	@echo "... Weibull.i"
+	@echo "... Weibull.s"
+	@echo "... XHHC_Peptide.o"
+	@echo "... XHHC_Peptide.i"
+	@echo "... XHHC_Peptide.s"
+	@echo "... XLink.o"
+	@echo "... XLink.i"
+	@echo "... XLink.s"
+	@echo "... XLinkBondMap.o"
+	@echo "... XLinkBondMap.i"
+	@echo "... XLinkBondMap.s"
+	@echo "... XLinkDatabase.o"
+	@echo "... XLinkDatabase.i"
+	@echo "... XLinkDatabase.s"
+	@echo "... XLinkIonSeriesCache.o"
+	@echo "... XLinkIonSeriesCache.i"
+	@echo "... XLinkIonSeriesCache.s"
+	@echo "... XLinkMatch.o"
+	@echo "... XLinkMatch.i"
+	@echo "... XLinkMatch.s"
+	@echo "... XLinkMatchCollection.o"
+	@echo "... XLinkMatchCollection.i"
+	@echo "... XLinkMatchCollection.s"
+	@echo "... XLinkPeptide.o"
+	@echo "... XLinkPeptide.i"
+	@echo "... XLinkPeptide.s"
+	@echo "... XLinkScorer.o"
+	@echo "... XLinkScorer.i"
+	@echo "... XLinkScorer.s"
+	@echo "... XLinkSite.o"
+	@echo "... XLinkSite.i"
+	@echo "... XLinkSite.s"
+	@echo "... XLinkablePeptide.o"
+	@echo "... XLinkablePeptide.i"
+	@echo "... XLinkablePeptide.s"
+	@echo "... XLinkablePeptideIterator.o"
+	@echo "... XLinkablePeptideIterator.i"
+	@echo "... XLinkablePeptideIterator.s"
+	@echo "... XLinkablePeptideIteratorTopN.o"
+	@echo "... XLinkablePeptideIteratorTopN.i"
+	@echo "... XLinkablePeptideIteratorTopN.s"
+	@echo "... xhhc.o"
+	@echo "... xhhc.i"
+	@echo "... xhhc.s"
+	@echo "... xhhc_score_peptide_spectrum.o"
+	@echo "... xhhc_score_peptide_spectrum.i"
+	@echo "... xhhc_score_peptide_spectrum.s"
+	@echo "... xhhc_scorer.o"
+	@echo "... xhhc_scorer.i"
+	@echo "... xhhc_scorer.s"
+	@echo "... xhhc_search.o"
+	@echo "... xhhc_search.i"
+	@echo "... xhhc_search.s"
+	@echo "... xlink_assign_ions.o"
+	@echo "... xlink_assign_ions.i"
+	@echo "... xlink_assign_ions.s"
+	@echo "... xlink_compute_qvalues.o"
+	@echo "... xlink_compute_qvalues.i"
+	@echo "... xlink_compute_qvalues.s"
+	@echo "... xlink_search.o"
+	@echo "... xlink_search.i"
+	@echo "... xlink_search.s"
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+	cd /data/TeamCity/buildAgent/work/779d99b0241b2175 && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/src/app/xlink/README b/src/app/xlink/README
new file mode 100644
index 0000000..3c7095c
--- /dev/null
+++ b/src/app/xlink/README
@@ -0,0 +1,62 @@
+To compile, change the crux_source and crux_lib variables
+in Makefile to point to crux source file and the libcrux.a
+library (after crux has been compiled).
+
+Then run make to compile.
+
+Make a directory called crux-ouput for output files
+
+
+
+Four executables are created:
+
+  xhhc-predict-peptide-ions
+  xhhc-score-peptide-spectrum
+  xhhc-make-histogram
+  xhhc-search
+
+Usage is at the bottom of readme.
+
+There are 7 source files:
+
+  xhhc.cpp
+  xhhc_ion_series.cpp
+  xhhc_scorer.cpp
+
+  xhhc_predict_peptide_ions.cpp
+  xhhc_score_peptide_spectrum.cpp
+  xhhc_make_histogram.cpp
+  xhhc_search.cpp 
+
+
+
+
+Things to do:
+
+- fix xhhc-make-histogram
+- fix print_spectrums method in xhhc_scorer
+- fix memory leak in xhhc-search
+- fix get_linkable_peptides method in xhhc.cpp to work for all linkers
+    - implement missed-link-cleavage and num-missed-cleavages options
+
+  
+
+
+
+
+Usage: xhhc-score-peptide-spectrum [options] <peptide-sequence-alpha> <peptide-sequence-beta> <position A> <position B> <scan-number> <ms2-filename> 
+Optional Arguments:
+  [--charge <int>] The peptide charge. 1|2|3 
+  [--parameter-file <string>] The crux parameter file to parse parameter from. 
+  [--linker-mass <string>] linker mass and linker modifications. Default 0. 
+  [--print-spectrums <int>]  
+  [--verbosity <int>] Specify the verbosity of the current processes from 0-100. 
+Required Arguments:
+  <peptide-sequence-alpha> The first peptide sequence.
+  <peptide-sequence-beta> The second peptide sequence.
+  <position A> zero based index of linker on peptide A [0, length(A)-1]
+  <position B> zero based index of linker on peptide B [0, length(B)-1]
+  <scan-number> The scan number for the MS-MS spectrum to extract from the ms2 file.
+	This is an integer in the range [1, 100000], and uniquely identifies a particular MS-MS spectrum within an .ms2 file.
+  <ms2-filename> A file containing multiple MS-MS spectra in .ms2 format.
+
diff --git a/src/app/xlink/SearchForXLinks.cpp b/src/app/xlink/SearchForXLinks.cpp
new file mode 100644
index 0000000..6b7b97f
--- /dev/null
+++ b/src/app/xlink/SearchForXLinks.cpp
@@ -0,0 +1,285 @@
+/**
+ * \file SearchForXLinks.cpp
+ * \brief Object for running search-for-xlinks
+ *****************************************************************************/
+#include "SearchForXLinks.h"
+
+#include "xlink_search.h"
+#include "util/mass.h"
+#include "util/Params.h"
+
+using namespace std;
+
+/**
+ * \returns a blank SearchForXLinks object
+ */
+SearchForXLinks::SearchForXLinks() {
+
+}
+
+/**
+ * Destructor
+ */
+SearchForXLinks::~SearchForXLinks() {
+}
+
+/**
+ * main method for SearchForXLinks
+ */
+int SearchForXLinks::main(int argc, char** argv) {
+
+  //The use-old-xlink parameter will determine
+  //which codebase gets called.
+  int ret;
+  if (Params::GetBool("use-old-xlink")) {
+    ret = xhhcSearchMain();
+  } else {
+    ret = xlinkSearchMain();
+  }
+  
+  return ret;
+}
+
+void SearchForXLinks::processParams() {
+  for (char c = 'A'; c <= 'Z'; c++) {
+    double deltaMass = Params::GetDouble(string(1, c));
+    increase_amino_acid_mass(c, deltaMass);
+  }
+}
+
+/**
+ * \returns the command name for SearchForXLinks
+ */
+string SearchForXLinks::getName() const {
+  return "search-for-xlinks";
+}
+
+/**
+ * \returns the description for SearchForXLinks
+ */
+string SearchForXLinks::getDescription() const {
+  return 
+    "[[nohtml:Search a collection of spectra against a sequence database, "
+    "returning a collection of matches corresponding to linear and "
+    "cross-linked peptides scored by XCorr.]]"
+    "[[html:<p>This command compares a set of spectra to cross-linked "
+    "peptides derived from a protein database in FASTA format. "
+    "For each spectrum, the program generates a list of candidate "
+    "molecules, including linear peptides, dead-end products, self-loop "
+    "products and cross-linked products, with masses that lie within a "
+    "specified range of the spectrum's precursor mass. These candidate "
+    "molecules are ranked using XCorr, and the XCorr scores are assigned "
+    "statistical confidence estimates using an empirical curve fitting procedure."
+    "</p><p>The algorithm is described in more detail in the following article:"
+    "</p><blockquote>Sean McIlwain, Paul Draghicescu, Pragya Singh, David R. "
+    "Goodlett and William Stafford Noble. <a href=\""
+    "http://pubs.acs.org/doi/abs/10.1021/pr901163d\">"
+    ""Detecting cross-linked peptides by searching against a database of "
+    "cross-linked peptide pairs."</a> <em>Journal of Proteome Research"
+    "</em>. 2010.</blockquote>"
+    "<p>In search-for-xlinks, properties of the cross-linker are specified "
+    "using the two required command line arguments, <link sites> and <link "
+    "mass>. In addition, mass shifts associated with mono-links can be "
+    "specified using the --mod option. Below are suggested parameter settings "
+    "for some commonly used cross-linkers:</p>"
+    "<table border=\"1\">"
+    "  <tr>"
+    "    <td><b>Linker</b></td>"
+    "    <td><b>Link Mass</b></td>"
+    "    <td><b>Link Sites</b></td>"
+    "    <td><b>Mono Link</b></td>"
+    "  </tr>"
+    "  <tr>"
+    "    <td>EDC</td>"
+    "    <td>-18.0156</td>"
+    "    <td>K:D,E,cterm</td>"
+    "    <td> </td>"
+    "  </tr>"
+    "  <tr>"
+    "    <td>BS2</td></td>"
+    "    <td>96.0211296</td>"
+    "    <td>K,nterm:K,nterm</td>"
+    "    <td>--mod 114.0316942,113.0476524:K,nterm:1:T:T</td>"
+    "  </tr>"
+    "  <tr>"
+    "    <td>BS3</td>"
+    "    <td>138.0680742</td>"
+    "    <td>K,nterm:K,nterm</td>"
+    "    <td>--mod 156.0786,155.0946278:K,nterm:1:T:T</td>"
+    "  </tr>"
+    /* Need to find out the right parameters for SDA.
+    "  <tr>"
+    "    <td>SDA</td>"
+    "    <td>82.0412979</td>"
+    "    <td>K,nterm:X,nterm</td>"
+    "    <td>--mod ????</td>"
+    "  </tr>"
+    */
+    "  <tr>"
+    "    <td>DSS</td>"
+    "    <td>138.0680796</td>"
+    "    <td>K,nterm:K,nterm</td>"
+    "    <td>--mod 156.0786,155.0946278:K,nterm:1:T:T</td>"
+    "  </tr>"
+    "  <tr>"
+    "    <td>AMAS</td>"
+    "    <td>137.011</td>"
+    "    <td>K,nterm:C</td>"
+    "    <td>--mod 155.02156:K,nterm,C:1:T:T</td>"
+    "  </tr>"
+    "  <tr>"
+    "    <td>GMBS</td>"
+    "    <td>165.0422</td>"
+    "    <td>K,nterm:C</td>"
+    "    <td>--mod 183.05276:K,nterm,C:1:T:T</td>"
+    "  </tr>"
+    "  <tr>"
+    "    <td>formaldehyde</td>"
+    "    <td>9.98435</td>"
+    "    <td>K,W,nterm:H,N,Y,K,W,R,nterm</td>"
+    "    <td>--mod 12.0,30.010565:K,W,nterm:1:T:T</td>"
+    "  </tr>"
+    "</table>"
+    "]]";
+}
+
+/**
+ * \returns the command arguments
+ */
+vector<string> SearchForXLinks::getArgs() const {
+  string arr[] = {
+    "ms2 file", 
+    "protein fasta file", 
+    "link sites", 
+    "link mass"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command options
+ */
+vector<string> SearchForXLinks::getOptions() const {
+  string arr[] = {
+    "use-old-xlink",
+    "xlink-include-linears",
+    "xlink-include-deadends",
+    "xlink-include-selfloops",
+    "xlink-include-inter",
+    "xlink-include-intra",
+    "xlink-include-inter-intra",
+    "xlink-prevents-cleavage",
+    "require-xlink-candidate",
+    "xlink-top-n",
+    "max-xlink-mods",
+    "min-mass",
+    "max-mass",
+    "min-length",
+    "max-length",
+    "mod",
+    "cmod",
+    "nmod",
+    "max-mods",
+    "enzyme",
+    "custom-enzyme",
+    "digestion",
+    "missed-cleavages",
+    "spectrum-min-mz",
+    "spectrum-max-mz",
+    "spectrum-charge",
+    "compute-sp",
+    "precursor-window",
+    "precursor-window-type",
+    "precursor-window-weibull",
+    "precursor-window-type-weibull",
+    "min-weibull-points",
+    "use-a-ions",
+    "use-b-ions",
+    "use-c-ions",
+    "use-x-ions",
+    "use-y-ions",
+    "use-z-ions",
+    "max-ion-charge",
+    "scan-number",
+    "mz-bin-width",
+    "mz-bin-offset",
+    "mod-mass-format",
+    "use-flanking-peaks",
+    "fragment-mass",
+    "isotopic-mass",
+    "isotope-windows",
+    "compute-p-values",
+    "seed",
+    "xlink-print-db",
+    "spectrum-parser",
+    "use-z-line",
+    "top-match",
+    "output-dir",
+    "overwrite",
+    "parameter-file",
+    "verbosity",
+    "A",
+    "C",
+    "D",
+    "E",
+    "F",
+    "G",
+    "H",
+    "I",
+    "K",
+    "L",
+    "M",
+    "N",
+    "P",
+    "Q",
+    "R",
+    "S",
+    "T",
+    "V",
+    "W",
+    "Y",
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+/**
+ * \returns the command outputs
+ */
+vector< pair<string, string> > SearchForXLinks::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("search-for-xlinks.target.txt",
+    "a tab-delimited text file containing the peptide-spectrum matches (PSMs). "
+    "See the <a href=\"../file-formats/txt-format.html\">txt file format</a> for a list of the fields."));
+  outputs.push_back(make_pair("search-for-xlinks.decoy.txt",
+    "a tab-delimited text file containing the decoy PSMs. "
+    "See the <a href=\"../file-formats/txt-format.html\">txt file format</a> for a list of the fields."));
+  outputs.push_back(make_pair("search-for-xlinks.qvalues.txt",
+    "a tab-delimited text file containing the top ranked PSMs with calculated q-values. "
+    "See the <a href=\"../file-formats/txt-format.html\">txt file format</a> for a list of the fields."));
+  outputs.push_back(make_pair("search-for-xlinks.params.txt",
+    "a file containing the name and value of all parameters/options for the "
+    "current operation. Not all parameters in the file may have been used in "
+    "the operation. The resulting file can be used with the --parameter-file "
+    "option for other crux programs."));
+  outputs.push_back(make_pair("search-for-xlinks.log.txt",
+    "a log file containing a copy of all messages that were printed to stderr."));
+  return outputs;
+}
+
+/**
+ * \returns the enum of the application, default MISC_COMMAND
+ */
+COMMAND_T SearchForXLinks::getCommand() const {
+  return XLINK_SEARCH_COMMAND;
+}
+
+bool SearchForXLinks::needsOutputDirectory() const {
+  return true;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/xlink/SearchForXLinks.h b/src/app/xlink/SearchForXLinks.h
new file mode 100644
index 0000000..8e7a206
--- /dev/null
+++ b/src/app/xlink/SearchForXLinks.h
@@ -0,0 +1,93 @@
+/**
+ * \file SearchForXLinks.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 6 December 2010
+ * \brief Object for running search-for-xlinks
+ *****************************************************************************/
+
+#ifndef SEARCHFORXLINKS_H
+#define SEARCHFORXLINKS_H
+
+#include "app/CruxApplication.h"
+#include "io/DelimitedFileReader.h"
+
+#include <string>
+
+class SearchForXLinks: public CruxApplication {
+
+ protected:
+  /**
+   * The main method for the new xlink search code
+   * \returns return code after execution
+   */
+  int xlinkSearchMain();
+
+  /**
+   * The main method for the old xlink search code
+   * \returns return code after execution
+   */
+  int xhhcSearchMain();
+
+ public:
+
+  /**
+   * \returns a blank SearchForXLinks object
+   */
+  SearchForXLinks();
+  
+  /**
+   * Destructor
+   */
+  virtual ~SearchForXLinks();
+
+  /**
+   * main method for SearchForXLinks
+   */
+  virtual int main(int argc, char** argv);
+
+  virtual void processParams();
+
+  /**
+   * \returns the command name for SearchForXLinks
+   */
+  virtual std::string getName() const;
+
+  /**
+   * \returns the description for SearchForXLinks
+   */
+  virtual std::string getDescription() const;
+
+  /**
+   * \returns the command arguments
+   */
+  virtual std::vector<std::string> getArgs() const;
+
+  /**
+   * \returns the command options
+   */
+  virtual std::vector<std::string> getOptions() const;
+
+  /**
+   * \returns the command outputs
+   */
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+  /**
+   * \returns the enum of the application, default MISC_COMMAND
+   */
+  virtual COMMAND_T getCommand() const;
+
+  virtual bool needsOutputDirectory() const;
+
+
+};
+
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/xlink/SelfLoopPeptide.cpp b/src/app/xlink/SelfLoopPeptide.cpp
new file mode 100644
index 0000000..b0e8e60
--- /dev/null
+++ b/src/app/xlink/SelfLoopPeptide.cpp
@@ -0,0 +1,351 @@
+/**
+ * \file SelfLoopPeptide.cpp
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 18 September December 2014
+ * \brief Object for Defining a self-loop peptide in an xlink search
+ *****************************************************************************/
+#include "SelfLoopPeptide.h"
+#include "XLinkablePeptide.h"
+#include "XLinkablePeptideIterator.h"
+#include "XLinkPeptide.h"
+#include "XLink.h"
+#include "XLinkDatabase.h"
+#include "util/GlobalParams.h"
+
+#include "model/IonSeries.h"
+#include "model/Ion.h"
+
+#include <iostream>
+#include <sstream>
+
+using namespace std;
+
+/**
+ * Default Constructor
+ */
+SelfLoopPeptide::SelfLoopPeptide() {
+  is_decoy_ = false;
+}
+
+
+/**
+ * Constructor that defines a linkable peptide and the positions
+ */
+SelfLoopPeptide::SelfLoopPeptide(
+  XLinkablePeptide& peptide, ///< linkable peptide
+  int posA, ///< 1st link position on peptide
+  int posB  ///< 2nd link position on peptide
+  ) {
+  
+  is_decoy_ = false;
+  linked_peptide_ = XLinkablePeptide(peptide);
+  linked_peptide_.clearSites();
+  linked_peptide_.addLinkSite(posA);
+  linked_peptide_.addLinkSite(posB);
+
+  link_pos_idx_.push_back(0);
+  link_pos_idx_.push_back(1);
+
+}
+
+/**
+ * Constructor that defines a linkable peptide and the positions
+ */
+SelfLoopPeptide::SelfLoopPeptide(
+  char* peptide, ///< linkable peptide
+  int posA, ///< 1st link position on peptide
+  int posB ///< 2nd link position on peptide
+  ) {
+
+  linked_peptide_ = peptide;
+  link_pos_idx_.push_back(posA);
+  link_pos_idx_.push_back(posB);
+  
+}
+
+/**
+ * Adds Self-loop candidates to the collection
+ */
+void SelfLoopPeptide::addCandidates(
+  FLOAT_T min_mass, ///< min mass
+  FLOAT_T max_mass, ///< max mass
+  bool is_decoy, ///< is decoy.
+  XLinkMatchCollection& candidates ///< collection to add candidates
+  ) {
+
+
+  vector<SelfLoopPeptide>::iterator biter = XLinkDatabase::getSelfLoopBegin(is_decoy, min_mass);
+  if (biter == XLinkDatabase::getSelfLoopEnd(is_decoy) ||
+      biter -> getMassConst(GlobalParams::getIsotopicMass()) > max_mass) {
+    return;
+  } else {
+    vector<SelfLoopPeptide>::iterator eiter = XLinkDatabase::getSelfLoopEnd(is_decoy);
+
+    while (biter != eiter && biter->getMass(GlobalParams::getIsotopicMass()) <= max_mass) {
+      biter->incrementPointerCount();
+      candidates.add(&(*biter));
+      ++biter;
+    }
+  }
+}
+
+/**
+ * \returns the link position
+ */
+int SelfLoopPeptide::getLinkPos(
+  int link_idx ///< link index (0 or 1)
+  ) {
+  return linked_peptide_.getLinkSite(link_pos_idx_[link_idx]);
+}
+
+/**
+ * \returns self-loop candidate
+ */
+XLINKMATCH_TYPE_T SelfLoopPeptide::getCandidateType() {
+  return SELFLOOP_CANDIDATE;
+}
+
+/**
+ * \returns the sequence string, marking the link sites with (X,Y).
+ */
+string SelfLoopPeptide::getSequenceString() {
+
+  string seq = linked_peptide_.getModifiedSequenceString();
+  ostringstream oss;
+  oss << seq << " (" << (getLinkPos(0)+1) << "," << (getLinkPos(1)+1) << ")";
+  string svalue = oss.str();
+
+  return svalue;
+}
+
+/**
+ * \returns the mass of the self-loop peptide
+ */
+FLOAT_T SelfLoopPeptide::calcMass(
+  MASS_TYPE_T mass_type ///< AVERAGE or MONO
+  ) {
+  
+  return linked_peptide_.getMass(mass_type) + XLinkPeptide::getLinkerMass();
+}
+
+/**
+ * \returns a shuffled version of self-loop candidate
+ */
+void SelfLoopPeptide::shuffle(vector<XLinkMatch*>& decoys) {
+  carp(CARP_DEBUG, "SelfLoopPeptide::shuffle");
+  SelfLoopPeptide* decoy = new SelfLoopPeptide();
+
+  decoy->linked_peptide_ = linked_peptide_.shuffle();
+  decoy->link_pos_idx_.push_back(link_pos_idx_[0]);
+  decoy->link_pos_idx_.push_back(link_pos_idx_[1]);
+  decoy->is_decoy_ = true;
+  decoy->target_ = this;
+  decoys.push_back(decoy);
+}
+
+SelfLoopPeptide* SelfLoopPeptide::getUnshuffledTarget() {
+  return(target_);  
+}
+
+std::string SelfLoopPeptide::getUnshuffledSequence() {
+  
+  if (is_decoy_) {
+    //carp(CARP_INFO, "returning unshuffled target");
+    return(getUnshuffledTarget()->getSequenceString());
+  } else {
+    return(getSequenceString());
+  }
+}
+
+/**
+ * Predicts the ions for the self loop candidate
+ */
+void SelfLoopPeptide::predictIons(
+  IonSeries* ion_series, ///< ion vector to place ions in
+  int charge ///< charge state
+  ) {
+  
+  const char* seq = linked_peptide_.getSequence();
+  const MODIFIED_AA_T* mod_seq = linked_peptide_.getModifiedSequencePtr();
+  ion_series->setCharge(charge);
+  ion_series->update(seq, mod_seq);
+  ion_series->predictIons();
+
+  unsigned int first_site = min(getLinkPos(0), getLinkPos(1));
+  unsigned int second_site = max(getLinkPos(0), getLinkPos(1));
+  unsigned int N = strlen(seq);
+
+
+  //iterate through the ions and modify the ones that have the linker 
+  //attached.
+  vector<Ion*> to_remove;
+
+  for (IonIterator ion_iter = ion_series->begin();
+    ion_iter != ion_series->end();
+    ++ion_iter) {
+
+    Ion* ion = *ion_iter;
+
+    bool keep_ion = false;
+    bool modify_ion = false;
+    unsigned int cleavage_idx = ion->getCleavageIdx();
+   
+    if (ion->isForwardType()) {
+      if (cleavage_idx > first_site) {
+        if (cleavage_idx <= second_site) {
+          keep_ion = false;
+        } else {
+          keep_ion = true;
+          modify_ion = true;
+        }
+      } else {
+        keep_ion = true;
+        modify_ion = false;
+      }
+    } else {
+      if (cleavage_idx >= (N-second_site)) {
+        if (cleavage_idx < (N-first_site)) {
+          keep_ion = false;
+        } else {
+          keep_ion = true;
+          modify_ion = true;
+        }
+      } else {
+        keep_ion = true;
+        modify_ion = false;
+      }
+    }
+
+    if (keep_ion) {
+      if (modify_ion) {
+        FLOAT_T mass_z = ion->getMassZ();
+        int charge = ion->getCharge();
+        double mass = (mass_z -MASS_PROTON) * (double)charge;
+        mass += XLinkPeptide::getLinkerMass();
+        mass_z = (mass + MASS_PROTON * (double)charge) / (double)charge;
+        ion->setMassZ(mass_z);
+        if (isnan(ion->getMassZ())) {
+          carp(CARP_FATAL, "NAN5");
+        }
+        
+      }
+    } else {
+      to_remove.push_back(ion);
+    }
+  }
+
+  for (unsigned int idx=0;idx < to_remove.size();idx++) {
+    ion_series->removeIon(to_remove[idx]);
+    delete to_remove[idx];
+  }
+
+}
+
+/**
+ * \returns the sequence of ion
+ */
+string SelfLoopPeptide::getIonSequence(
+  Ion* ion ///< ion
+  ) {
+
+  string ion_sequence = ion->getPeptideSequence();
+
+  unsigned int cleavage_idx = ion->getCleavageIdx();
+
+  unsigned int first_site  = min(getLinkPos(0), getLinkPos(1));
+  unsigned int second_site = max(getLinkPos(0), getLinkPos(1));
+
+  bool is_linked = false;
+  if (ion->isForwardType()) {
+    is_linked = (cleavage_idx > first_site);
+  } else {
+    is_linked = (cleavage_idx >= (ion_sequence.length() - second_site));
+  }
+
+  string subseq;
+
+  //cerr<<"creating substring"<<endl;
+  if (ion->isForwardType()) {
+    subseq = ion_sequence.substr(0, cleavage_idx);
+  } else {
+    subseq = ion_sequence.substr(ion_sequence.length() - cleavage_idx, ion_sequence.length());
+  }
+
+  if (is_linked) {
+    return subseq + string("*");
+  } else {
+    return subseq;
+  }
+}
+
+/**
+ *\returns the peptide object of self-loop peptide (0 is only valid)
+ */
+Crux::Peptide* SelfLoopPeptide::getPeptide(
+  int peptide_idx
+  ) {
+  if (peptide_idx == 0) {
+    return linked_peptide_.getPeptide();
+  } else {
+    return NULL;
+  }
+}
+
+/**
+ *\returns the number of missed cleavages
+ */
+int SelfLoopPeptide::getNumMissedCleavages() {
+  char missed_cleavage_link_site = 'K';
+
+  int link1_site = getLinkPos(0);
+  int link2_site = getLinkPos(1);
+
+  set<int> skip;
+
+  Crux::Peptide* pep = linked_peptide_.getPeptide();
+
+  char* seq = pep->getSequencePointer();
+
+  if (seq[link1_site] == missed_cleavage_link_site) {
+    skip.insert(link1_site);
+  }
+
+  if (seq[link2_site] == missed_cleavage_link_site) {
+    skip.insert(link2_site);
+  }
+
+  return pep->getMissedCleavageSites(skip);
+
+}
+
+/**
+ *\returns whether the peptide is modified by a variable mod
+ */
+bool SelfLoopPeptide::isModified() {
+
+  return linked_peptide_.isModified();
+}
+
+
+bool compareSelfLoopPeptideMass(
+				const SelfLoopPeptide& spep1,
+				const SelfLoopPeptide& spep2) {
+
+  return spep1.getMassConst(MONO) < spep2.getMassConst(MONO);
+
+}
+
+bool compareSelfLoopPeptideMassToFLOAT(
+				       const SelfLoopPeptide& spep1,
+				       FLOAT_T mass) {
+
+  return spep1.getMassConst(MONO) < mass;
+}
+
+
+/*                                                                                                                                                                                                                          
+ * Local Variables:                                                                                                                                                                                                         
+ * mode: c                                                                                                                                                                                                                  
+ * c-basic-offset: 2                                                                                                                                                                                                        
+ * End:                                                                                                                                                                                                                     
+ */
diff --git a/src/app/xlink/SelfLoopPeptide.h b/src/app/xlink/SelfLoopPeptide.h
new file mode 100644
index 0000000..f4d8918
--- /dev/null
+++ b/src/app/xlink/SelfLoopPeptide.h
@@ -0,0 +1,148 @@
+/**
+ * \file SelfLoopPeptide.h
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 18 September December 2014
+ * \brief Object for Defining a self-loop peptide in an xlink search
+ *****************************************************************************/
+#ifndef SELFLOOPPEPTIDE_H_
+#define SELFLOOPPEPTIDE_H_
+
+#include "model/objects.h"
+#include "util/utils.h"
+
+#include "XLinkMatch.h"
+#include "XLinkBondMap.h"
+#include "XLinkablePeptide.h"
+
+#include <vector>
+
+class SelfLoopPeptide : public XLinkMatch {
+ protected:
+  SelfLoopPeptide* target_;
+  XLinkablePeptide linked_peptide_; ///< linkable peptide
+  std::vector<int> link_pos_idx_; ///< the two link indices on the peptide
+ public:
+  
+  /**
+   * \returns the link position
+   */
+  int getLinkPos(
+    int link_idx ///< link index (0 or 1)
+  );
+
+  /**
+   * Default Constructor
+   */
+  SelfLoopPeptide();
+  
+  /**
+   * Constructor that defines a linkable peptide and the positions
+   */
+  SelfLoopPeptide(
+    XLinkablePeptide& peptide, ///< linkable peptide
+    int posA, ///< 1st link position on peptide
+    int posB  ///< 2nd link position on peptide
+    );
+
+  /**
+   * Constructor that defines a string peptide with positions
+   */
+  SelfLoopPeptide(
+    char* peptide, ///< character sequence of peptide
+    int posA, ///< 1st link position on peptide
+    int posB ///< 2nd link position on peptide
+  );
+
+  /**
+   * Default destructor
+   */
+  virtual ~SelfLoopPeptide() {}
+
+  /**
+   * Adds Self-loop candidates to the collection
+   */
+  static void addCandidates(
+    FLOAT_T min_mass, ///< min mass
+    FLOAT_T max_mass, ///< max mass
+    bool is_decoy,
+    XLinkMatchCollection& candidates ///< collection to add candidates
+    );
+
+  /**
+   *  \returns self-loop candidate
+   */
+  virtual XLINKMATCH_TYPE_T getCandidateType();
+  
+  /**
+   * \returns the sequence string, marking the link sites with (X,Y)
+   */
+  virtual std::string getSequenceString();
+  
+  /**
+   * \returns the mass of the self-loop peptide
+   */
+  virtual FLOAT_T calcMass(
+    MASS_TYPE_T mass_type ///< AVERAGE or MONO
+  );
+
+  /**
+   * \returns a shuffled version of self-loop candidate
+   */
+  virtual void shuffle(
+    std::vector<XLinkMatch*>& decoys
+  );
+  
+  /**
+   *  Predictes the ions for the self loop candidate
+   */
+  virtual void predictIons(
+    IonSeries* ion_series, ///< ion vector to place ions in
+    int charge ///< charge state
+  );
+  
+  /**
+   * \returns the sequence of the ion
+   */
+  std::string getIonSequence(
+    Ion* ion ///< ion -in
+  );
+
+  /**
+   *\returns the peptide object of self-loop peptide (0 is only valid)
+   */
+  virtual Crux::Peptide* getPeptide(
+    int peptide_idx
+  );
+
+  /**
+   *\returns the number of missed cleavages
+   */
+  virtual int getNumMissedCleavages();
+
+  /**
+   *\returns whether the peptide is modified by a variable mod
+   */
+  virtual bool isModified();
+  
+  
+  virtual std::string getUnshuffledSequence();
+  
+  SelfLoopPeptide* getUnshuffledTarget();
+  
+
+};
+
+bool compareSelfLoopPeptideMass(
+				const SelfLoopPeptide& spep1,
+				const SelfLoopPeptide& spep2);
+bool compareSelfLoopPeptideMassToFLOAT(const SelfLoopPeptide& spep1, FLOAT_T mass);
+
+
+#endif
+
+/*                                                                                                                                                                                                                          
+ * Local Variables:                                                                                                                                                                                                         
+ * mode: c                                                                                                                                                                                                                  
+ * c-basic-offset: 2                                                                                                                                                                                                        
+ * End:                                                                                                                                                                                                                     
+ */
diff --git a/src/app/xlink/Weibull.cpp b/src/app/xlink/Weibull.cpp
new file mode 100644
index 0000000..06cbdd8
--- /dev/null
+++ b/src/app/xlink/Weibull.cpp
@@ -0,0 +1,211 @@
+#include "Weibull.h"
+#include "util/crux-utils.h"
+#include "util/GlobalParams.h"
+#include "model/Scorer.h"
+static const FLOAT_T MIN_XCORR_SHIFT = -3.0;
+static const FLOAT_T MAX_XCORR_SHIFT  = 3.0;
+static const FLOAT_T CORR_THRESHOLD = 0.5; //Must achieve this correlation, else punt.
+static const FLOAT_T XCORR_SHIFT = 0.05;
+static const FLOAT_T XCORR_RANGE = MAX_XCORR_SHIFT - MIN_XCORR_SHIFT;
+
+using namespace std;
+
+Weibull::Weibull() {
+    reset();
+}
+
+Weibull::~Weibull() {
+    //
+}
+
+void Weibull::reset() {
+  correlation_ = 0;
+  sequences_.clear();
+  scores_.clear();
+  fit_called_ = false;
+  fit_success_ = false;
+  duplicates_ = 0;
+}
+
+FLOAT_T Weibull::getEta() {
+    return eta_;
+}
+
+FLOAT_T Weibull::getBeta() {
+    return beta_;
+}
+
+FLOAT_T Weibull::getShift() {
+    return shift_;
+}
+
+FLOAT_T Weibull::getCorrelation() {
+    return correlation_;
+}
+
+
+void Weibull::addPoint(
+  const std::string& sequence,
+  FLOAT_T score
+) {
+
+  set<string>::iterator it = sequences_.find(sequence);
+
+  if (it == sequences_.end()) {
+    scores_.push_back(score);
+    sequences_.insert(sequence);
+    fit_called_ = false;
+  } else {
+    duplicates_++;
+  }
+
+}
+
+bool Weibull::fit() {
+    
+  int nscores = scores_.size();
+  
+  carp(CARP_DEBUG, "Fitting %i scores", nscores);
+  carp(CARP_DEBUG, "There were %i dups detected during insert", duplicates_);
+  
+    
+  sort(scores_.begin(), scores_.end(), greater<FLOAT_T>());
+  int num_tail_samples = (int)(nscores * GlobalParams::getFractionToFit());
+  carp(CARP_DEBUG, "num tail:%d", num_tail_samples);
+  
+  FLOAT_T max_score = scores_[0];
+  FLOAT_T min_score = scores_[nscores-1];
+  
+  FLOAT_T xcorr_shift = XCORR_SHIFT * (max_score - min_score) / XCORR_RANGE;
+  
+  FLOAT_T max_shift = max_score;
+  FLOAT_T min_shift = min_score - xcorr_shift;
+    
+  if (nscores > 29 && xcorr_shift > 0) {
+    carp(CARP_DEBUG, "Fitting weibull n:%d nt:%d "
+        "min:%g max:%g mins:%g maxs:%g shift:%g", nscores,
+        num_tail_samples,
+        min_score,
+        max_score,
+        min_shift,
+        max_shift,
+        xcorr_shift);
+    FLOAT_T* scores_ptr = scores_.data();
+    max_shift = scores_ptr[29];
+    fit_three_parameter_weibull(
+      scores_ptr,
+      num_tail_samples,
+      nscores,
+      min_shift,
+      max_shift,
+      xcorr_shift,
+      0,
+      &eta_,
+      &beta_,
+      &shift_,
+      &correlation_
+    );
+    if (correlation_ < CORR_THRESHOLD) {
+      carp(CARP_WARNING, "Weibull fit failed corr:%g n:%d nt:%d "
+        "min:%g max:%g mins:%g maxs:%g",
+        correlation_,
+        nscores,
+        num_tail_samples,
+        scores_[nscores-1],
+        scores_[0],
+        min_shift,
+        max_shift
+      );
+      fit_success_ = false;
+    } else {
+      carp(CARP_DEBUG, "Fit succeeded: corr:%g shift:%g eta:%g beta:%g",
+        correlation_,
+        shift_,
+        eta_,
+        beta_);
+      fit_success_ = true;
+    }  
+  } else {
+    carp(CARP_WARNING, "Too few scores to fit weibull: n:%d nt:%d "
+         "min:%g max:%g mins:%g maxs:%g shift:%g",
+         nscores,
+         num_tail_samples,
+         min_score,
+         max_score,
+         min_shift,
+         max_shift,
+         xcorr_shift);
+    fit_success_ = false;    
+  }
+  //Fit was called.
+  fit_called_ = true;
+  return fit_success_;
+}
+
+FLOAT_T Weibull::getWeibullPValue(FLOAT_T score, bool logp) {
+  if (!fit_called_) {
+    fit();
+  }
+  
+  FLOAT_T pvalue = compute_weibull_pvalue(score, eta_, beta_, shift_);
+  if (logp) {
+    pvalue = log10(pvalue);
+  }
+  return(pvalue);
+  
+}
+
+FLOAT_T Weibull::getECDFPValue(FLOAT_T score, bool logp) {
+  if (!fit_called_) {
+    fit();
+  }
+  
+  FLOAT_T pvalue;
+  
+  //end point check, this is probably unstable but a conservative estimate.
+  if (score > scores_[0]) {
+    pvalue = 1.0 / (1.0 + (FLOAT_T)scores_.size());
+  } else {
+    //TODO, use upper/lower bound?
+    int idx = 0;
+    while(idx < scores_.size() && score <= scores_[idx]) {
+        idx++;
+    }
+    pvalue = (FLOAT_T)idx / (FLOAT_T)scores_.size();
+  }
+  
+  if (logp) {
+    pvalue = log10(pvalue);
+  }
+  return(pvalue);
+  
+  
+}
+
+FLOAT_T Weibull::getPValue(FLOAT_T score, bool logp) {
+  if (!fit_called_) {
+    fit();
+  }
+  FLOAT_T pvalue;
+  if (fit_success_) {
+    pvalue = getWeibullPValue(score, logp);
+  }
+  //If the fit failed or the estimated p-value is invalid, then
+  //return the ECDF
+  if (!fit_success_ || pvalue == 0 || pvalue != pvalue) {
+    //x != x should test for NaN.
+    if (!fit_success_) {
+      pvalue = NAN;  
+    } else if (pvalue != pvalue) {
+      pvalue = NAN;  
+    } else if (pvalue == 0) {
+        pvalue = FLOAT_T_MIN;
+    }
+  }
+  
+  return(pvalue);
+}
+
+
+
+
diff --git a/src/app/xlink/Weibull.h b/src/app/xlink/Weibull.h
new file mode 100644
index 0000000..c28efcd
--- /dev/null
+++ b/src/app/xlink/Weibull.h
@@ -0,0 +1,42 @@
+
+#include <set>
+#include <vector>
+#include <string>
+#include "model/objects.h"
+
+class Weibull {
+    
+ protected:
+  FLOAT_T correlation_;
+  FLOAT_T eta_;
+  FLOAT_T beta_;
+  FLOAT_T shift_;
+  
+  std::set<std::string> sequences_;
+  std::vector<FLOAT_T> scores_;
+  
+  bool fit_called_;
+  bool fit_success_;
+
+  int duplicates_;
+  
+ public:
+  Weibull();
+  ~Weibull();
+  
+  FLOAT_T getEta();
+  FLOAT_T getBeta();
+  FLOAT_T getShift();
+  FLOAT_T getCorrelation();
+  
+  void reset();
+  void addPoint(const std::string& sequence, FLOAT_T score);
+  bool fit();
+
+  FLOAT_T getWeibullPValue(FLOAT_T score, bool logp=false);
+  FLOAT_T getECDFPValue(FLOAT_T score, bool logp=false);
+  FLOAT_T getPValue(FLOAT_T score, bool logp=false);
+
+
+    
+};
diff --git a/src/app/xlink/XHHC_Peptide.cpp b/src/app/xlink/XHHC_Peptide.cpp
new file mode 100644
index 0000000..099ec72
--- /dev/null
+++ b/src/app/xlink/XHHC_Peptide.cpp
@@ -0,0 +1,238 @@
+/**
+ * \file XHHC_Peptide.cpp 
+ * AUTHOR: Sean McIlwain and Paul Draghicescu
+ * CREATE DATE: 19 January 2012
+ * \brief Object for keeping track of the links on a
+ * cross-linkable peptide.
+ *****************************************************************************/
+#include "XHHC_Peptide.h"
+#include "LinkedPeptide.h"
+#include "util/crux-utils.h"
+
+
+using namespace std;
+using namespace Crux;
+/**
+ * \returns a blank XHHC_Peptide object
+ */
+XHHC_Peptide::XHHC_Peptide() {
+  mass_calculated_[MONO] = false;
+  mass_calculated_[AVERAGE] = false;
+}
+
+/**
+ * \returns XHHC_Peptide object with the sequence initialized
+ */
+XHHC_Peptide::XHHC_Peptide(
+  string sequence
+  ) {
+
+  num_links_ = 0;
+  sequence_ = sequence;
+  length_ = sequence.length();
+  mass_calculated_[MONO] = false;
+  mass_calculated_[AVERAGE] = false;
+  for (int idx = 0;idx < length_;idx++) {
+    links_.push_back(false);
+  }
+}
+
+/**
+ * Destructor
+ */
+XHHC_Peptide::~XHHC_Peptide() {
+}
+
+/**
+ * \returns whether a link exists at the index
+ */
+bool XHHC_Peptide::hasLinkAt(
+  int index ///< amino acid index
+  ) {
+  
+  return links_[index];
+}
+
+/**
+ * \returns the sequence length of the peptide
+ */
+int XHHC_Peptide::getLength() {
+  return length_;
+}
+
+/**
+ * returns whether a link exists
+ */
+bool XHHC_Peptide::hasLink() {
+  return num_links_ > 0;
+}
+
+/**
+ * \returns the peptide sequence
+ */
+string XHHC_Peptide::getSequence() {
+  return sequence_;
+}
+
+/**
+ * \returns whether we have initialized the peptide
+ */
+bool XHHC_Peptide::isEmpty() {
+  return length_ == 0;
+}
+
+/**
+ * \returns the number of links
+ */
+int XHHC_Peptide::getNumLinks() {
+  return num_links_;
+}
+
+/**
+ * sets the peptide sequence
+ */
+void XHHC_Peptide::setSequence(
+  string sequence ///< the sequence of the peptide
+  ) {
+  sequence_ = sequence;
+  length_ = sequence.length();  
+}
+
+/**
+ * removes a link from the peptide
+ */
+void XHHC_Peptide::removeLink(
+  int index ///< the amino acid index
+  ) {
+
+  links_[index] = false;
+  num_links_--;
+}
+
+/**
+ * \returns the first index of a link, -1 if none exist
+ */
+int XHHC_Peptide::linkSite() {
+
+  for (int idx = 0; idx < length_; ++idx) {
+    if (hasLinkAt(idx)) 
+      return idx;
+  }
+  return -1;
+}
+
+/**
+ * \returns the mass of the peptide
+ */
+FLOAT_T XHHC_Peptide::getMass(
+  MASS_TYPE_T mass_type ///< MONO or AVERAGE
+  ) {
+
+  if (mass_calculated_[mass_type]) {
+    return mass_[mass_type];
+  } else {
+    mass_[mass_type] = Peptide::calcSequenceMass((char*)sequence_.c_str(), mass_type);
+    mass_calculated_[mass_type] = true;
+    return mass_[mass_type];
+  }
+}
+
+/**
+ * add a link at a amino acid index
+ */
+void XHHC_Peptide::addLink(
+  int index ///< the amino acid index
+  ) {
+  links_[index] = true;
+  num_links_++;
+}
+
+/**
+ * cleaves the peptide at an index, adding b and y ions
+ * skips if a cleave site on self loop between the link
+ */
+void XHHC_Peptide::splitAt(
+  int index, ///< the index to cleave
+  vector<pair<LinkedPeptide, LinkedPeptide> >& pairs, ///< the b-y ion pairs
+  int charge, ///< charge of the peptide
+  XHHC_Peptide& other, ///< the other peptide we are linked to
+  bool is_loop ///< Is this a self loop?
+  ) {
+
+  bool self_flag = false;
+  // for every charge state
+  for (int c = 0; c <= charge; ++c) {
+    XHHC_Peptide pepA = XHHC_Peptide(sequence_.substr(0, index));
+    XHHC_Peptide pepB = XHHC_Peptide(sequence_.substr(index, length_ - index));
+    LinkedPeptide linkedA = LinkedPeptide(c);
+    LinkedPeptide linkedB = LinkedPeptide(charge - c);
+    self_flag = true;
+    // for every position on pepA
+    for (int idx = 0; idx < index; idx++) {
+      if (hasLinkAt(idx)) {
+        pepA.addLink(idx); 
+        if (!other.isEmpty() && !is_loop) linkedA.addPeptide(other);
+        // if a loop, skip cleavages in between link sites (same mass as precursor)
+        if (is_loop) {
+          self_flag = !self_flag;
+        }
+      }
+    }
+    if (!self_flag) continue;
+    // for every position on pepB
+    for (int idx = index; idx < length_; idx++) {
+      if (hasLinkAt(idx)) {
+        pepB.addLink(idx - index);
+        if (!other.isEmpty() && !is_loop) {
+          linkedB.addPeptide(other);
+        }
+      }
+    } 
+    linkedA.addPeptide(pepA);
+    linkedB.addPeptide(pepB);
+    pairs.push_back(pair<LinkedPeptide, LinkedPeptide> (linkedA, linkedB));
+  }
+}
+
+/**
+ * \returns a shuffled peptide, preserving any links
+ */
+XHHC_Peptide XHHC_Peptide::shuffle() {
+  string shuffled = string(sequence_);
+  XHHC_Peptide shuffled_peptide = XHHC_Peptide(sequence_);
+  for (size_t idx = 0; idx < shuffled.length(); ++idx) {
+    if (hasLinkAt(idx)) shuffled_peptide.addLink(idx);
+  }
+
+  int start_idx = 1;
+  int end_idx = length_ - 2;
+  int switch_idx = 0;
+  char temp_char = 0;
+  while(start_idx <= end_idx) {
+    switch_idx = get_random_number_interval(start_idx, end_idx);
+    temp_char = shuffled[start_idx];
+    shuffled[start_idx] = shuffled[switch_idx];
+    shuffled[switch_idx] = temp_char;
+    if (shuffled_peptide.hasLinkAt(switch_idx)) {
+      //if not a self loop
+      if (!shuffled_peptide.hasLinkAt(start_idx)) {
+        shuffled_peptide.removeLink(switch_idx);
+        shuffled_peptide.addLink(start_idx);
+      }
+    } else if (shuffled_peptide.hasLinkAt(start_idx)) {
+      shuffled_peptide.removeLink(start_idx);
+      shuffled_peptide.addLink(switch_idx);
+    }
+    ++start_idx;
+  }
+  shuffled_peptide.setSequence(shuffled);
+  return shuffled_peptide;
+}
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/xlink/XHHC_Peptide.h b/src/app/xlink/XHHC_Peptide.h
new file mode 100644
index 0000000..512aead
--- /dev/null
+++ b/src/app/xlink/XHHC_Peptide.h
@@ -0,0 +1,135 @@
+/**
+ * \file XHHC_Peptide.h 
+ * AUTHOR: Sean McIlwain and Paul Draghicescu
+ * CREATE DATE: 19 January 2012
+ * \brief Object for keeping track of the links on a
+ * cross-linkable peptide.
+ *****************************************************************************/
+#ifndef XHHC_PEPTIDE_H
+#define XHHC_PEPTIDE_H
+
+#include "model/objects.h"
+
+
+#include <string>
+#include <vector>
+
+class XHHC_Peptide {
+ protected:
+  bool mass_calculated_[NUMBER_MASS_TYPES]; ///< MONO or Average
+  int num_links_; ///< the number of links this peptide has
+  std::vector<bool> links_; ///< vector bools for the aa position of the link
+  std::string sequence_; ///< sequence of the peptide
+  int length_; ///< sequence length
+  FLOAT_T mass_[NUMBER_MASS_TYPES]; ///< mass of the peptide
+
+ public:
+  /**
+    * \returns a blank XHHC_Peptide object
+    */
+  XHHC_Peptide();
+
+  /**
+   * \returns XHHC_Peptide object with the sequence initialized
+   */
+  XHHC_Peptide(
+    std::string sequence ///< the peptide sequence
+  );
+
+
+  /**
+   * Destructor
+   */
+  virtual ~XHHC_Peptide();
+
+  /**
+   * cleaves the peptide at an index, adding b and y ions
+   * skips if a cleave site on self loop between the link
+   */
+  void splitAt(
+    int index, ///< index to cleave 
+    std::vector<std::pair<LinkedPeptide, LinkedPeptide> >& pairs, ///< the b-y ion pairs
+    int charge, ///< charge of the peptide
+    XHHC_Peptide& other, ///< the other peptide that we are linked to
+    bool is_loop ///< Is this a self loop?
+    );
+
+  /**
+   * \returns whether a link exists at the index
+   */
+  bool hasLinkAt(
+    int index ///<amino acid index
+  );
+
+  /**
+   * \returns the sequence length of the peptide
+   */
+  int getLength();
+
+  /**
+   * returns whether a link exists
+   */
+  bool hasLink();
+
+  /**
+   * sets the peptide sequence
+   */
+  void setSequence(
+    std::string sequence
+  );
+
+  /**
+   * \returns the peptide sequence
+   */
+  std::string getSequence();
+
+  /**
+   * \returns whether we have initialized the peptide
+   */
+  bool isEmpty();
+          
+  /**
+   * \returns the number of links
+   */
+  int getNumLinks();
+
+  /**
+   * add a link at a amino acid index
+   */
+  void addLink(
+    int index ///< the amino acid index
+  );
+
+  /**
+   * removes a link from the peptide
+   */
+  void removeLink(
+    int index ///< the amino acid index
+  );
+  
+  /**
+   * \returns the first index of a link, -1 if none exist
+   */
+  int linkSite();
+
+  /**
+   * \returns the mass of the peptide
+   */
+  FLOAT_T getMass(
+    MASS_TYPE_T mass_type ///< MONO or AVERAGE
+  );
+
+  /**
+   * \returns a shuffled peptide, preserving any links
+   */
+  XHHC_Peptide shuffle();
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/xlink/XLink.cpp b/src/app/xlink/XLink.cpp
new file mode 100644
index 0000000..af87030
--- /dev/null
+++ b/src/app/xlink/XLink.cpp
@@ -0,0 +1,221 @@
+/**
+ * \file XLink.cpp
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 18 September December 2014
+ * \brief Utility functions for search-for-xlinks
+ *****************************************************************************/
+#include "XLink.h"
+#include "util/Params.h"
+
+#include <sstream>
+#include <iostream>
+using namespace std;
+
+namespace XLink {
+
+set<Crux::Peptide*> allocated_peptides_; ///< tracker for allocated peptides
+
+bool testInterIntraKeep(
+  Crux::Peptide *pep1,
+  Crux::Peptide *pep2
+  ) {
+  return(testInterIntraKeep(pep1, pep2, Params::GetBool("xlink-include-intra"), 
+    Params::GetBool("xlink-include-inter"),
+    Params::GetBool("xlink-include-inter-intra")));
+}
+
+bool testInterIntraKeep(
+  Crux::Peptide* pep1,
+  Crux::Peptide* pep2,
+  bool include_intra,
+  bool include_inter,
+  bool include_inter_intra
+  ) {
+  //  carp(CARP_INFO, "testInterIntraKeep:start");
+  if (include_intra && 
+      include_inter && 
+      include_inter_intra) {
+    //no need to test
+    return true;
+  }
+
+  XLINKMATCH_TYPE_T cross_link_type = getCrossLinkCandidateType(pep1, pep2);
+
+  if (cross_link_type == XLINK_INTER_INTRA_CANDIDATE  && include_inter_intra) {
+    return true;
+  } else if (cross_link_type == XLINK_INTER_CANDIDATE && include_inter) {
+    return true;
+  } else if (cross_link_type == XLINK_INTRA_CANDIDATE && include_intra) {
+    return true;
+  }
+  return false;
+}
+
+XLINKMATCH_TYPE_T getCrossLinkCandidateType(
+  Crux::Peptide* pep1,
+  Crux::Peptide* pep2
+  ) {
+
+  bool is_intra = false;
+  bool is_inter = false;
+  size_t id1 = -1;
+  size_t id2 = -1;
+
+  for (PeptideSrcIterator src_iterator1 = pep1->getPeptideSrcBegin();
+    src_iterator1 != pep1->getPeptideSrcEnd();
+    ++src_iterator1) {
+    PeptideSrc* src1 = *src_iterator1;
+    size_t id1t = src1->getParentProtein()->getProteinIdx();
+    if (id1 == -1) {
+      id1 = id1t;
+    } else if (id1 != id1t) {
+      return XLINK_INTER_INTRA_CANDIDATE;
+    }
+    for (PeptideSrcIterator src_iterator2 = pep2->getPeptideSrcBegin();
+      src_iterator2 != pep2->getPeptideSrcEnd();
+      ++src_iterator2) {
+      PeptideSrc* src2 = *src_iterator2;
+      size_t id2t = src2->getParentProtein()->getProteinIdx();
+      if (id2 == -1) {
+        id2 = id2t;
+      } else if (id2 != id2t) {
+        return XLINK_INTER_INTRA_CANDIDATE;
+      }
+      if (id1 == id2) {
+        is_intra = true;
+        if (is_inter) {
+          return(XLINK_INTER_INTRA_CANDIDATE);
+        }
+      } else {
+        is_inter = true;
+        if (is_intra) {
+          return(XLINK_INTER_INTRA_CANDIDATE);
+        }
+      }
+    }
+  }
+
+  if (is_intra && !is_inter) {
+    return (XLINK_INTRA_CANDIDATE);
+  } else if (is_inter & !is_intra) {
+    return(XLINK_INTER_CANDIDATE);
+  } else {
+    carp(CARP_FATAL, "Internal error at getCrossLinkCandidateType");
+  }
+  return(INVALID_CANDIDATE);
+}
+
+/**
+ * \returns whether two proposed peptides would contain an intra-protein crosslink
+ */
+bool isCrossLinkIntra(
+  Crux::Peptide* pep1,
+  Crux::Peptide* pep2
+  ) {
+
+  return(getCrossLinkCandidateType(pep1, pep2) == XLINK_INTRA_CANDIDATE);
+}
+
+/**
+ * \returns whether two proposed peptides would contain an inter-protein crosslink
+ */
+bool isCrossLinkInter(
+  Crux::Peptide* pep1,
+  Crux::Peptide* pep2
+  ) {
+  
+  return(getCrossLinkCandidateType(pep1, pep2) == XLINK_INTER_CANDIDATE);
+}
+
+bool isCrossLinkInterIntra(
+  Crux::Peptide* pep1,
+  Crux::Peptide* pep2
+  ) {
+
+  return(getCrossLinkCandidateType(pep1, pep2) == XLINK_INTER_INTRA_CANDIDATE);
+}
+
+
+/**
+ * add a peptide to the list of allocated peptides
+ */
+void addAllocatedPeptide(
+  Crux::Peptide* peptide ///< peptide to add
+  ) {
+
+  allocated_peptides_.insert(peptide);
+}
+
+/**
+ * delete all peptides that are allocated
+ */
+void deleteAllocatedPeptides() {
+  carp(CARP_DEBUG, "deleting %d peptides", allocated_peptides_.size());
+  for (set<Crux::Peptide*>::iterator iter =
+    allocated_peptides_.begin();
+    iter != allocated_peptides_.end();
+    ++iter) {
+  
+  delete *iter;
+
+  }
+  allocated_peptides_.clear();
+}
+
+
+void get_protein_ids_locations(
+  Crux::Peptide *peptide,  ///< peptide
+  set<string>& protein_ids_locations ///< location strings
+  ) {
+
+  std::ostringstream protein_field_stream;
+
+  string prefix = "";
+  if (peptide->isDecoy()) {
+    prefix = Params::GetString("decoy-prefix");
+  }
+  
+  for (PeptideSrcIterator peptide_src_iterator =
+    peptide->getPeptideSrcBegin();
+    peptide_src_iterator != peptide->getPeptideSrcEnd();
+    ++peptide_src_iterator) {
+    
+    PeptideSrc* peptide_src = *peptide_src_iterator;
+    Crux::Protein* protein = peptide_src->getParentProtein();
+    string& protein_id = protein->getIdPointer();
+    int peptide_loc = peptide_src->getStartIdx();
+    std::ostringstream protein_loc_stream;
+    protein_loc_stream << prefix << protein_id << "(" << peptide_loc << ")";
+    protein_ids_locations.insert(protein_loc_stream.str());
+  }
+
+}
+
+string get_protein_ids_locations(
+  Crux::Peptide* peptide ///< peptide to get protein strings from
+  ) {
+  set<string> protein_ids_locations;
+
+  get_protein_ids_locations(peptide, protein_ids_locations);
+  set<string>::iterator result_iter = protein_ids_locations.begin();
+
+  string protein_field_string = *result_iter;
+
+  while(++result_iter != protein_ids_locations.end()) {
+    protein_field_string += "," + *result_iter;
+  }
+
+  return protein_field_string;
+
+}
+
+} // namespace XLink
+
+
+/*
+ * Local Variables:
+ * mode: c 
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/app/xlink/XLink.h b/src/app/xlink/XLink.h
new file mode 100644
index 0000000..36ec527
--- /dev/null
+++ b/src/app/xlink/XLink.h
@@ -0,0 +1,107 @@
+/**
+ * \file XLink.h
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 18 September December 2014
+ * \brief Utility functions for search-for-xlinks
+ *****************************************************************************/
+#ifndef XLINK_H_
+#define XLINK_H_
+#include "model/objects.h"
+#include "XLinkBondMap.h"
+#include "XLinkablePeptide.h"
+
+#include <vector>
+#include <string>
+
+
+class XLinkMatch;
+class XLinkMatchCollection;
+
+
+void get_min_max_mass(
+  FLOAT_T precursor_mz, 
+  int charge, 
+  bool use_decoy_window,
+  FLOAT_T& min_mass, 
+  FLOAT_T& max_mass);
+
+
+
+namespace XLink {
+
+
+/** 
+ * \returns whether the proposed xlink peptides would survive the inter/intra filters set by the user
+ */
+bool testInterIntraKeep(Crux::Peptide* pep1, Crux::Peptide* pep2);
+
+bool testInterIntraKeep(
+  Crux::Peptide* pep1,
+  Crux::Peptide* pep2,
+  bool include_intra,
+  bool include_inter,
+  bool include_inter_intra
+  );
+
+/**
+ * \ returns the crosslink candidate type between two peptides
+ */
+XLINKMATCH_TYPE_T getCrossLinkCandidateType(
+  Crux::Peptide* pep1, 
+  Crux::Peptide* pep2
+  );
+
+/**
+ * \returns whether two proposed peptides would contain an inter-protein crosslink
+ */
+bool isCrossLinkInter(
+  Crux::Peptide* pep1,
+  Crux::Peptide* pep2
+  );
+
+/**
+ * \returns whether two proposed peptides would contain an intra-protein crosslink
+ */
+bool isCrossLinkIntra(
+  Crux::Peptide* pep1,
+  Crux::Peptide* pep2
+  );
+
+/**
+ * \returns whether two propsed peptides would contain both an intra and inter protein cross link
+ */ 
+bool isCrossLinkInterIntra(
+  Crux::Peptide* pep1,
+  Crux::Peptide* pep2
+);
+
+/**
+ * \returns protein ids with start locations marked with (X)
+ */
+std::string get_protein_ids_locations(
+  Crux::Peptide* peptide ///< peptide to get locations from
+  );
+
+/**
+ * add a peptide to the list of allocated peptides
+ */
+void addAllocatedPeptide(
+  Crux::Peptide* peptide ///< peptide to add
+  );
+
+/**
+ * delete all peptides that are allocated
+ */
+void deleteAllocatedPeptides();
+
+} // namespace XLink
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c 
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/app/xlink/XLinkBondMap.cpp b/src/app/xlink/XLinkBondMap.cpp
new file mode 100644
index 0000000..491d1cc
--- /dev/null
+++ b/src/app/xlink/XLinkBondMap.cpp
@@ -0,0 +1,176 @@
+/*************************************************************************
+ * \file XLinkBondMap.cpp
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE:  Febuary 22, 2011
+ * \brief  Object for representing the potential cross-links for peptides.
+ ****************************************************************************/
+
+#include "XLinkBondMap.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+
+using namespace std;
+using namespace Crux;
+
+/**
+ * Default constructor.
+ */
+XLinkBondMap::XLinkBondMap() {
+  ;
+}
+
+/**
+ * Constructor that initializes XLinkBondMap using the links string.
+ * Format: A:B,C:D,... which means that a link can occur between residue
+ * A and B, or C and D.
+ */
+XLinkBondMap::XLinkBondMap(
+  string& links_string ///<links string
+  ) {
+  init(links_string);
+}
+
+/**
+ * Initializes XLinkBondMap using the links string.
+ * Format: A:B,C:D,... which means that a link can occur between residue
+ * A and B, or C and D.
+ */
+void XLinkBondMap::init(
+  string& links_string ///< links string
+  ) {
+
+  vector<string> bond_strings = StringUtils::Split(links_string, ',');
+
+  for (vector<string>::const_iterator i = bond_strings.begin(); i != bond_strings.end(); i++) {
+    vector<string> link_site_strings = StringUtils::Split(*i, ':');
+
+    if (link_site_strings.size() == 2) {
+      XLinkSite site1(link_site_strings[0]);
+      XLinkSite site2(link_site_strings[1]);
+      (*this)[site1].insert(site2);
+      (*this)[site2].insert(site1);
+    } else {
+      carp(CARP_FATAL,
+        "bad format in %s when parsing %s",
+        links_string.c_str(),
+        i->c_str());
+    }
+  }
+}
+
+/**
+ * Default destructor
+ */
+XLinkBondMap::~XLinkBondMap() {
+}
+
+/**
+ * \returns whether a cross-link can occur at a single position in the 
+ * peptide (for deadlinks).
+ */
+bool XLinkBondMap::canLink(
+  Peptide* peptide, ///<peptide object pointer
+  int idx             ///<sequence index
+  ) {
+  for (XLinkBondMap::iterator iter = begin();
+    iter != end(); ++iter) {
+
+    if (iter->first.hasSite(peptide, idx)) {
+      return true;
+    }
+  }
+  return false;
+}
+
+/**
+ * \returns whether a cross-link can occur between two positions in the 
+ * peptide (for selfloops).
+ */
+bool XLinkBondMap::canLink(
+    Peptide* peptide, ///<peptide object pointer
+    int idx1,           ///<1st sequence idx
+    int idx2            ///<2nd sequence idx
+    ) {
+
+  return canLink(peptide, peptide, idx1, idx2);
+}
+
+bool XLinkBondMap::canLink(
+  XLinkablePeptide& pep,
+  int link1_site,
+  int link2_site
+  ) {
+
+  return canLink(
+    pep.getPeptide(),
+    pep.getLinkSite(link1_site),
+    pep.getLinkSite(link2_site));
+}
+
+/**
+ * \returns whether a cross-link can occur between two peptides at their 
+ * respective sequence positions (for inter/intra links).
+ */
+bool XLinkBondMap::canLink(
+  Peptide* peptide1,  ///<1st peptide object pointer 
+  Peptide* peptide2,  ///<2nd peptide object pointer
+  int idx1,             ///<1st peptide sequence idx
+  int idx2              ///<2nd peptide sequence idx
+  ) { //for inter/intra links
+
+  for (XLinkBondMap::iterator iter1 = begin();
+    iter1 != end(); ++iter1) {
+
+    if (iter1->first.hasSite(peptide1, idx1)) {
+      for (set<XLinkSite>::iterator iter2 = iter1->second.begin();
+        iter2 != iter1->second.end();
+        ++iter2) {
+      
+        if (iter2->hasSite(peptide2, idx2)) {
+          return true;
+        }
+      }
+    }
+  }
+  return false;
+}
+
+bool XLinkBondMap::canLink(
+  XLinkablePeptide& pep1,
+  XLinkablePeptide& pep2,
+  int link1_site,
+  int link2_site
+  ) {
+  
+  return canLink(
+    pep1.getPeptide(),
+    pep2.getPeptide(),
+    pep1.getLinkSite(link1_site),
+    pep2.getLinkSite(link2_site));
+
+}
+
+
+bool XLinkBondMap::canLink(
+  string& protein,
+  int idx) {
+
+  
+  for (XLinkBondMap::iterator iter = begin();
+    iter != end(); ++iter) {
+
+    if (iter->first.hasSite(protein, idx)) {
+      return true;
+    }
+  }
+  return false;
+
+}
+
+/*                                                                                                                                                                                                                          
+ * Local Variables:                                                                                                                                                                                                         
+ * mode: c                                                                                                                                                                                                                  
+ * c-basic-offset: 2                                                                                                                                                                                                        
+ * End:                                                                                                                                                                                                                     
+ */
+
diff --git a/src/app/xlink/XLinkBondMap.h b/src/app/xlink/XLinkBondMap.h
new file mode 100644
index 0000000..8f91002
--- /dev/null
+++ b/src/app/xlink/XLinkBondMap.h
@@ -0,0 +1,114 @@
+/**
+ * \file XLinkBondMap.h
+ * $Revision: 1.00 $
+ * \brief Object for representing the potential cross-links for peptides.
+ *************************************************************************/
+#ifndef XLINKBONDMAP_H
+#define XLINKBONDMAP_H
+
+#include "XLinkablePeptide.h"
+#include "XLinkSite.h"
+#include <map>
+#include <set>
+#include <string>
+
+
+/**
+ * \class XLinkBondMap
+ * \brief object representing the potential cross-links for peptides.
+ */
+class XLinkBondMap: public std::map<XLinkSite, std::set<XLinkSite> > {
+
+ public:
+
+  /**
+   * Default constructor.
+   */
+  XLinkBondMap();
+
+  /**
+   * Constructor that initializes XLinkBondMap using the links string.
+   * Format: A:B,C:D,... which means that a link can occur between residue
+   * A and B, or C and D.
+   */
+  XLinkBondMap(
+    std::string& links_string ///<link string
+    );
+
+  /**
+   * Initializes XLinkBondMap using the links string.
+   * Format: A:B,C:D,... which means that a link can occur between residue
+   * A and B, or C and D.
+   */
+  void init(
+    std::string& links_string ///< links string
+    );  
+  
+  /**
+   * Default destructor
+   */
+  virtual ~XLinkBondMap();
+
+  void setLinkString(
+    std::string& links_string
+  );
+
+  /**
+   * \returns whether a cross-link can occur at a single position in the 
+   * peptide (for deadlinks).
+   */
+  bool canLink(
+    Crux::Peptide* peptide, ///<peptide object pointer
+    int idx             ///<sequence idx
+    ); 
+
+  /**
+   * \returns whether a cross-link can occur between two positions in the 
+   * peptide (for selfloops).
+   */
+  bool canLink(
+    Crux::Peptide* peptide, ///<peptide object pointer
+    int idx1,           ///<1st sequence idx
+    int idx2            ///<2nd sequence idx
+    ); 
+
+  bool canLink(
+    XLinkablePeptide& pep,
+    int link1_site,
+    int link2_site
+    );
+
+  /**
+   * \returns whether a cross-link can occur between two peptides at their 
+   * respective sequence positions (for inter/intra links).
+   */
+  bool canLink(
+    Crux::Peptide* peptide1,  ///<1st peptide object pointer 
+    Crux::Peptide* peptide2,  ///<2nd peptide object pointer
+    int idx1,             ///<1st peptide sequence idx
+    int idx2              ///<2nd peptide sequence idx
+    );
+  
+  bool canLink(
+    XLinkablePeptide& pep1,
+    XLinkablePeptide& pep2,
+    int link1_site,
+    int link2_site
+  );
+
+  bool canLink(
+    std::string& protein_sequence,
+    int idx);
+
+
+
+};
+
+#endif
+
+/*                                                                                                                                                                                                                          
+ * Local Variables:                                                                                                                                                                                                         
+ * mode: c                                                                                                                                                                                                                  
+ * c-basic-offset: 2                                                                                                                                                                                                        
+ * End:                                                                                                                                                                                                                     
+ */
diff --git a/src/app/xlink/XLinkDatabase.cpp b/src/app/xlink/XLinkDatabase.cpp
new file mode 100644
index 0000000..f7a5610
--- /dev/null
+++ b/src/app/xlink/XLinkDatabase.cpp
@@ -0,0 +1,592 @@
+#include "XLinkDatabase.h"
+#include "util/modifications.h"
+#include "model/ModifiedPeptidesIterator.h"
+#include "util/GlobalParams.h"
+#include <fstream>
+#include <iomanip>
+#include <iostream>
+#include <algorithm>
+
+using namespace std;
+
+Database* XLinkDatabase::protein_database_;
+XLinkBondMap XLinkDatabase::bondmap_;
+
+vector<vector<Crux::Peptide*> > XLinkDatabase::target_peptides_; ///< all peptides generated with no additional missed cleavage;
+
+vector<vector<Crux::Peptide*> > XLinkDatabase::decoy_peptides_;
+
+std::vector<LinearPeptide> XLinkDatabase::target_linear_peptides_;
+std::vector<LinearPeptide> XLinkDatabase::decoy_linear_peptides_;
+
+std::vector<SelfLoopPeptide> XLinkDatabase::target_selfloop_peptides_;
+std::vector<SelfLoopPeptide> XLinkDatabase::decoy_selfloop_peptides_;
+
+std::vector<XLinkablePeptide> XLinkDatabase::target_xlinkable_peptides_;
+std::vector<XLinkablePeptide> XLinkDatabase::decoy_xlinkable_peptides_;
+std::vector<XLinkablePeptide> XLinkDatabase::target_xlinkable_peptides2_; //Peptides that could be selfloops.
+std::vector<XLinkablePeptide> XLinkDatabase::decoy_xlinkable_peptides2_;
+
+std::vector<XLinkablePeptide> XLinkDatabase::target_xlinkable_peptides_flatten_;
+std::vector<XLinkablePeptide> XLinkDatabase::decoy_xlinkable_peptides_flatten_;
+//vector<pair<int, vector<XLinkablePeptide> > > XLinkDatabase::protein_idx_to_xpeptides_;
+
+bool XLinkDatabase::addPeptideToDatabase(Crux::Peptide* peptide) {
+  
+  bool added = false;
+  vector<int> link_sites;
+  set<int> skip;
+  
+  if (GlobalParams::getXLinkIncludeLinears()) {
+    set<int> skip;
+    if (peptide->getMissedCleavageSites(skip) <= GlobalParams::getMissedCleavages()) {
+      LinearPeptide lpeptide(peptide);
+      lpeptide.getMass(GlobalParams::getIsotopicMass());
+      target_linear_peptides_.push_back(lpeptide);
+      added = true;
+    }
+  }
+  
+  if (GlobalParams::getXLinkIncludeInterIntra() ||
+      GlobalParams::getXLinkIncludeInter() ||
+      GlobalParams::getXLinkIncludeIntra() ||
+      GlobalParams::getXLinkIncludeDeadends()) {
+    if (peptide->countModifiedAAs() <= GlobalParams::getMaxXLinkMods()) {
+      XLinkablePeptide::findLinkSites(peptide, bondmap_, link_sites); 
+      if (!link_sites.empty()) {
+	      XLinkablePeptide xlp(peptide, link_sites);
+	      xlp.getMass(GlobalParams::getIsotopicMass());
+        target_xlinkable_peptides_.push_back(xlp);
+        added = true;
+      }
+    }
+  }
+  if (GlobalParams::getXLinkIncludeSelfloops()) {
+    XLinkablePeptide::findLinkSites(peptide, bondmap_, link_sites, 1);
+    if (link_sites.size() > 1) {
+      XLinkablePeptide xlp = XLinkablePeptide(peptide, link_sites);
+      for (size_t link1_idx = 0; link1_idx<xlp.numLinkSites()-1;link1_idx++) {
+	      for (size_t link2_idx = link1_idx+1; link2_idx < xlp.numLinkSites();link2_idx++) {
+	        if (bondmap_.canLink(xlp, link1_idx, link2_idx)) {
+            //create the candidate.
+	          SelfLoopPeptide self_loop(xlp, xlp.getLinkSite(link1_idx), xlp.getLinkSite(link2_idx));
+	          if (self_loop.getNumMissedCleavages() <= GlobalParams::getMissedCleavages()) {
+	            self_loop.getMass(GlobalParams::getIsotopicMass());
+              target_selfloop_peptides_.push_back(self_loop);
+              added=true;
+	          }
+	        }
+	      }
+      }
+    }
+  }
+  return(added);
+}
+
+
+void XLinkDatabase::initialize() {
+  carp(CARP_INFO, "Initializing database");
+  //Step one, load the database
+  string input_file = Params::GetString("protein fasta file");
+  string link_string = Params::GetString("link sites");
+  bondmap_ = XLinkBondMap(link_string);
+  protein_database_ = NULL;
+  int num_protein = prepare_protein_input(input_file, &protein_database_);
+  
+  PEPTIDE_MOD_T** peptide_mods = NULL;
+  int num_peptide_mods = generate_peptide_mod_list( &peptide_mods );
+
+  //Step two create all peptides.
+  int additional_cleavages = 0;
+
+  bool generate_xlinkable = Params::GetBool("xlink-include-inter-intra") ||
+           Params::GetBool("xlink-include-inter") ||
+           Params::GetBool("xlink-include-intra") ||
+           Params::GetBool("xlink-include-deadends");
+  
+  if (generate_xlinkable) {
+    additional_cleavages = 1;
+  }
+  
+  if (Params::GetBool("xlink-include-selfloops")) {
+    additional_cleavages = 2;
+  }
+
+  int total_missed_cleavages = GlobalParams::getMissedCleavages()+additional_cleavages;
+
+  for (size_t idx=0;idx<=total_missed_cleavages;idx++) {
+    target_peptides_.push_back(vector<Crux::Peptide*>());
+    decoy_peptides_.push_back(vector<Crux::Peptide*>());
+  }
+  //Generate all possible target peptides
+  
+  size_t peptide_count = 0;
+  size_t used_count = 0;
+  
+  for (int mod_idx=0;mod_idx<num_peptide_mods; mod_idx++) {
+    PEPTIDE_MOD_T* peptide_mod = peptide_mods[mod_idx];
+    double delta_mass = peptide_mod_get_mass_change(peptide_mod);
+    carp(CARP_INFO, "Modification %d has delta mass of %g Da.", mod_idx + 1, delta_mass);
+    //
+    ModifiedPeptidesIterator* peptide_iterator =
+      new ModifiedPeptidesIterator(
+        GlobalParams::getMinMass(), 
+        GlobalParams::getMaxMass(), 
+        peptide_mod, 
+        false, 
+        protein_database_,
+        additional_cleavages);
+
+    //add the targets
+    while (peptide_iterator->hasNext()) {
+      peptide_count++;
+      Crux::Peptide* peptide = peptide_iterator->next();
+      int missed_cleavages = peptide->getMissedCleavageSites();
+      
+      bool added = addPeptideToDatabase(peptide);
+      if (added) {
+        used_count++;
+        target_peptides_[missed_cleavages].push_back(peptide);
+      } else {
+        delete peptide;
+      }
+    }
+    delete peptide_iterator;
+  }
+  
+  carp(CARP_INFO,"Considered linear %d peptides, of which %d were included in the database.", peptide_count, used_count);
+  
+  if (Params::GetBool("xlink-include-linears")) {
+    carp(CARP_INFO, "  The database contains %d linear peptides.", target_linear_peptides_.size());
+    sort(target_linear_peptides_.begin(), target_linear_peptides_.end(), compareLinearPeptideMass);
+  }
+  
+  if (Params::GetBool("xlink-include-selfloops")) {
+    carp(CARP_INFO, "  The database contains %d selfloop peptides.", target_selfloop_peptides_.size());
+    sort(target_selfloop_peptides_.begin(), target_selfloop_peptides_.end(), compareSelfLoopPeptideMass);
+  }
+  
+  if (generate_xlinkable) {
+    carp(CARP_INFO, "  The database contains %d cross-linkable peptides.", target_xlinkable_peptides_.size());
+    sort(target_xlinkable_peptides_.begin(), target_xlinkable_peptides_.end(), compareXLinkablePeptideMass);
+    flattenLinkablePeptides(target_xlinkable_peptides_, target_xlinkable_peptides_flatten_);
+  }
+
+  carp(CARP_INFO, "Done initializing database");
+}
+
+void XLinkDatabase::finalize() {
+  carp(CARP_INFO, "Start to finalize database");
+  target_linear_peptides_.clear();
+  decoy_linear_peptides_.clear();
+  target_selfloop_peptides_.clear();
+  decoy_selfloop_peptides_.clear();
+  target_xlinkable_peptides_.clear();
+  decoy_xlinkable_peptides_.clear();
+  target_xlinkable_peptides_flatten_.clear();
+  for (size_t idx1=0;idx1<target_peptides_.size();idx1++) {
+    for (size_t idx2=0;idx2<target_peptides_[idx1].size();idx2++) {
+      delete target_peptides_[idx1][idx2];
+    }
+  }
+
+  for (size_t idx1=0;idx1<decoy_peptides_.size();idx1++) {
+    for (size_t idx2=0;idx2<decoy_peptides_[idx1].size();idx2++) {
+      delete decoy_peptides_[idx1][idx2];
+    }
+  }
+
+  Database::freeDatabase(protein_database_);
+  carp(CARP_INFO, "Done finalizing database");
+}
+
+void XLinkDatabase::findSelfLoops(
+  vector<XLinkablePeptide>& linkable_peptides, 
+  vector<SelfLoopPeptide>& ans) {
+
+  //Loop through all peptides, trying to find peptides with at least two link sites.
+  for (vector<XLinkablePeptide>::iterator iter =
+	 linkable_peptides.begin();
+       iter != linkable_peptides.end();
+       ++iter) {
+
+    if (iter->numLinkSites() > 1) {
+      for (size_t link1_idx = 0; link1_idx<iter->numLinkSites()-1;link1_idx++) {
+	for (size_t link2_idx = link1_idx+1; link2_idx < iter->numLinkSites();link2_idx++) {
+	  if (bondmap_.canLink(*iter, link1_idx, link2_idx)) {
+            //create the candidate.
+	    SelfLoopPeptide self_loop(*iter, iter->getLinkSite(link1_idx), iter->getLinkSite(link2_idx));
+	    if (self_loop.getNumMissedCleavages() <= GlobalParams::getMissedCleavages()) {
+	      self_loop.getMass(GlobalParams::getIsotopicMass());
+              ans.push_back(self_loop);
+	    }
+	  }
+	}
+      }
+    }
+  }
+}
+
+void XLinkDatabase::generateAllSelfLoops(bool decoy) {
+
+  int mc = GlobalParams::getMissedCleavages()+2;
+  if (decoy) {
+    findSelfLoops(decoy_xlinkable_peptides_, decoy_selfloop_peptides_);
+    int mc = GlobalParams::getMissedCleavages()+2;
+    generateAllLinkablePeptides(decoy_peptides_[mc], decoy_xlinkable_peptides2_);
+    findSelfLoops(decoy_xlinkable_peptides2_, decoy_selfloop_peptides_);
+    sort(decoy_selfloop_peptides_.begin(), 
+      decoy_selfloop_peptides_.end(), 
+      compareSelfLoopPeptideMass);
+  } else {
+    findSelfLoops(target_xlinkable_peptides_, target_selfloop_peptides_);
+    generateAllLinkablePeptides(target_peptides_[mc], target_xlinkable_peptides2_);
+    findSelfLoops(target_xlinkable_peptides2_, target_selfloop_peptides_);
+    sort(
+      target_selfloop_peptides_.begin(), 
+      target_selfloop_peptides_.end(), 
+      compareSelfLoopPeptideMass);
+  }
+}
+
+void XLinkDatabase::findLinearPeptides(vector<Crux::Peptide*> &peptides, vector<LinearPeptide>& linear_peptides) {
+
+  for (vector<Crux::Peptide*>::iterator iter = peptides.begin();
+       iter != peptides.end();
+       ++iter) {
+    LinearPeptide lpeptide(*iter);
+    lpeptide.getMass(GlobalParams::getIsotopicMass());
+    linear_peptides.push_back(lpeptide);
+    
+  }
+}
+
+void XLinkDatabase::generateAllLinears(bool decoy) {
+  //NOTE - Right now, we need to call this with decoy=false first.
+  
+  for (size_t cleavage_idx = 0; 
+         cleavage_idx <= GlobalParams::getMissedCleavages(); 
+         cleavage_idx++) {
+      findLinearPeptides(target_peptides_[cleavage_idx], target_linear_peptides_);
+    }
+}
+
+
+void XLinkDatabase::flattenLinkablePeptides(vector<XLinkablePeptide>& xpeptides,
+					    vector<XLinkablePeptide>& flattened) {
+
+  for (size_t idx=0;idx < xpeptides.size();idx++) {
+    XLinkablePeptide& current = xpeptides[idx];
+    for (size_t link1_idx=0;link1_idx < current.numLinkSites(); link1_idx++) {
+      XLinkablePeptide onelink(current);
+      onelink.getMass(MONO);
+      onelink.clearSites();
+      onelink.addLinkSite(current.getLinkSite(link1_idx));
+      flattened.push_back(onelink);
+    }
+  }
+}
+
+void XLinkDatabase::filterLinkablePeptides(
+  vector<XLinkablePeptide>& xpeptides,
+  vector<XLinkablePeptide>& filtered_xpeptides
+  ) {
+  bool filter1 = !Params::GetBool("xlink-include-inter-intra");
+  bool filter2 = !Params::GetBool("xlink-include-inter") && !Params::GetBool("xlink-include-intra");
+  
+  for (size_t idx = 0 ;idx < xpeptides.size();idx++) {
+  //quick check to see if peptide can come from multiple protein sources.
+  //if true, then this should return XLINK_INTER_INTRA_CANDIDATE
+    XLINKMATCH_TYPE_T ctype = 
+      XLink::getCrossLinkCandidateType(xpeptides[idx].getPeptide(), 
+				xpeptides[idx].getPeptide());
+    
+    if ((filter1 && ctype == XLINK_INTER_INTRA_CANDIDATE) ||
+      (filter2 && ctype != XLINK_INTER_INTRA_CANDIDATE)) {
+    } else {
+      filtered_xpeptides.push_back(xpeptides[idx]);
+    }
+  }
+
+  carp(CARP_INFO, "kept %d out of %d", filtered_xpeptides.size(), xpeptides.size());
+
+}
+
+void XLinkDatabase::generateAllLinkablePeptides(
+  vector<Crux::Peptide*>& peptides, 
+  vector<XLinkablePeptide>& xpeptides) {
+
+  carp(CARP_DEBUG, "XLinkDatabase::generateAllLinkablePeptides: start()");
+  carp(CARP_DEBUG, "Number of peptides:%d", peptides.size());
+  //Loop through peptides
+  vector<int> link_sites;
+  for (vector<Crux::Peptide*>::iterator iter = peptides.begin(); 
+    iter != peptides.end(); 
+       ++iter) {
+    Crux::Peptide* peptide = *iter;
+
+    if (peptide->countModifiedAAs() <= GlobalParams::getMaxXLinkMods()) {
+      XLinkablePeptide::findLinkSites(peptide, bondmap_, link_sites); 
+      if (!link_sites.empty()) {
+	XLinkablePeptide xlp(peptide, link_sites);
+	xlp.getMass(MONO);
+        xpeptides.push_back(xlp);
+      }
+    }
+  }
+  carp(CARP_DEBUG, "XLinkDatabase::generateAllLinkablePeptides: done()");
+}
+
+
+void XLinkDatabase::print() {
+   
+    string output_directory = Params::GetString("output-dir");
+    if (Params::GetBool("xlink-include-linears")) {
+      ostringstream oss;
+      oss << output_directory << "/" << "xlink_peptides.linear.txt";
+      string temp = oss.str();
+      ofstream peptides_file(temp.c_str());
+
+      peptides_file << setprecision(8);
+
+      peptides_file << "mass\tsequence\tprotein id\tmissed cleavages\tunshuffled sequence"<<endl;
+
+      for (int idx=0;idx < target_linear_peptides_.size();idx++) {
+     
+        peptides_file << target_linear_peptides_[idx].getMass(MONO) << "\t";
+        peptides_file << target_linear_peptides_[idx].getSequenceString() << "\t";
+        peptides_file << target_linear_peptides_[idx].getProteinIdString() << "\t";
+        peptides_file << target_linear_peptides_[idx].getNumMissedCleavages() << "\t";
+        peptides_file << "" << endl;
+      }
+      
+      for (int idx=0;idx < decoy_linear_peptides_.size();idx++) {
+        peptides_file << decoy_linear_peptides_[idx].getMass(MONO) << "\t";
+        peptides_file << decoy_linear_peptides_[idx].getSequenceString() << "\t";
+        peptides_file << decoy_linear_peptides_[idx].getProteinIdString() << "\t";
+        peptides_file << decoy_linear_peptides_[idx].getNumMissedCleavages() << "\t";
+        peptides_file << decoy_linear_peptides_[idx].getPeptide(0)->getUnshuffledSequence() << endl;
+      }
+      
+      peptides_file.flush();
+    }
+
+    if (Params::GetBool("xlink-include-selfloops")) {
+      ostringstream oss;
+      oss << output_directory << "/" << "xlink_peptides.selfloops.txt";
+      string temp = oss.str();
+      ofstream peptides_file(temp.c_str());
+
+      peptides_file << setprecision(8);
+
+      peptides_file << "mass\tsequence\tprotein id\t missed cleavages"<<endl;
+
+      for (int idx=0;idx < target_selfloop_peptides_.size();idx++) {
+     
+        peptides_file << target_selfloop_peptides_[idx].getMass(MONO) << "\t";
+        peptides_file << target_selfloop_peptides_[idx].getSequenceString() << "\t";
+        peptides_file << target_selfloop_peptides_[idx].getNumMissedCleavages() << "\t";
+        peptides_file << target_selfloop_peptides_[idx].getProteinIdString() << endl;
+      }
+      peptides_file.flush();
+    }      
+    
+    ostringstream oss;
+    oss << output_directory << "/" << "xlink_peptides.linkable.txt";
+     
+    string temp = oss.str();
+    ofstream peptides_file(temp.c_str());
+
+    peptides_file << setprecision(8);
+
+    peptides_file << "mass\tsequence\tlinks"<<endl;
+
+    for (int idx=0;idx < target_xlinkable_peptides_.size();idx++) {
+     
+      peptides_file << target_xlinkable_peptides_[idx].getMass(MONO) << "\t";
+      peptides_file << target_xlinkable_peptides_[idx].getModifiedSequenceString() << "\t";
+      //peptides_file << target_xlinkable_peptides_[idx].getProteinIdString() << endl;
+      
+      peptides_file << target_xlinkable_peptides_[idx].getLinkSite(0)+1;
+      for (size_t idx2 = 1;idx2 < target_xlinkable_peptides_[idx].numLinkSites();idx2++) {
+        peptides_file << "," << target_xlinkable_peptides_[idx].getLinkSite(idx2)+1;
+      }
+      peptides_file << endl;
+    }
+    peptides_file.flush();
+}
+
+vector<LinearPeptide>::iterator XLinkDatabase::getLinearBegin(
+  bool decoy
+  ) {
+
+  if (decoy) {
+    return (decoy_linear_peptides_.begin());
+  } else {
+    return (target_linear_peptides_.begin());
+  }
+}
+vector<LinearPeptide>::iterator XLinkDatabase::getLinearBegin(
+  bool decoy,
+  FLOAT_T min_mass
+  ) {
+
+  if (decoy) {
+    return (lower_bound(decoy_linear_peptides_.begin(),
+		        decoy_linear_peptides_.end(),
+                        min_mass,
+                        compareLinearPeptideMassToFLOAT));
+  } else {
+    return (lower_bound(target_linear_peptides_.begin(), 
+                        target_linear_peptides_.end(), 
+                        min_mass, 
+                        compareLinearPeptideMassToFLOAT)); 
+  }
+}
+
+vector<LinearPeptide>::iterator XLinkDatabase::getLinearEnd(
+  bool decoy
+) {
+
+  if (decoy) {
+    return (decoy_linear_peptides_.end());
+  } else {
+    return (target_linear_peptides_.end());
+  }
+}
+
+vector<LinearPeptide>::iterator XLinkDatabase::getLinearEnd(
+  bool decoy,
+  FLOAT_T max_mass
+  ) {
+  return(std::upper_bound(getLinearBegin(decoy),
+                          getLinearEnd(decoy),
+                          max_mass,
+                          compareFLOATToLinearPeptideMass));  
+
+ 
+}
+
+vector<LinearPeptide>::iterator XLinkDatabase::getLinearEnd(
+  bool decoy,
+  std::vector<LinearPeptide>::iterator& siter,
+  FLOAT_T max_mass
+) {
+   return(std::upper_bound(siter,
+                            getLinearEnd(decoy),
+                            max_mass,
+                            compareFLOATToLinearPeptideMass));  
+  
+}
+
+vector<SelfLoopPeptide>::iterator XLinkDatabase::getSelfLoopBegin(
+  bool decoy,
+  FLOAT_T min_mass
+  ) {
+
+  if (decoy) {
+    return (lower_bound(decoy_selfloop_peptides_.begin(), 
+                        decoy_selfloop_peptides_.end(), 
+                        min_mass, 
+                        compareSelfLoopPeptideMassToFLOAT));
+  } else {
+
+    return (lower_bound(target_selfloop_peptides_.begin(), 
+                        target_selfloop_peptides_.end(), 
+                        min_mass, 
+                        compareSelfLoopPeptideMassToFLOAT));
+  }
+}
+
+vector<SelfLoopPeptide>::iterator XLinkDatabase::getSelfLoopEnd(
+  bool decoy
+) {
+
+  if (decoy) {
+    return(decoy_selfloop_peptides_.end());
+  } else {
+    return(target_selfloop_peptides_.end());
+  }
+}
+
+vector<XLinkablePeptide>::iterator XLinkDatabase::getXLinkableBegin() {
+  return(target_xlinkable_peptides_.begin());
+
+}
+
+vector<XLinkablePeptide>::iterator XLinkDatabase::getXLinkableBegin(FLOAT_T min_mass) {
+  return (lower_bound(target_xlinkable_peptides_.begin(), target_xlinkable_peptides_.end(),
+		      min_mass, compareXLinkablePeptideMassToFLOAT));
+}
+vector<XLinkablePeptide>::iterator XLinkDatabase::getXLinkableEnd() {
+    return(target_xlinkable_peptides_.end());
+}
+
+vector<XLinkablePeptide>& XLinkDatabase::getXLinkablePeptides(
+  bool decoy
+) {
+  if (decoy) {
+    return (decoy_xlinkable_peptides_);
+  } else {
+    return(target_xlinkable_peptides_);
+  }
+}
+
+
+
+XLinkBondMap& XLinkDatabase::getXLinkBondMap() {
+  return bondmap_;
+}
+
+vector<XLinkablePeptide>::iterator XLinkDatabase::getXLinkableFlattenBegin() {
+  return(target_xlinkable_peptides_flatten_.begin());
+}
+
+vector<XLinkablePeptide>::iterator XLinkDatabase::getXLinkableFlattenBegin(
+  bool decoy,
+  FLOAT_T min_mass
+  ) {
+  if (decoy) {
+    return(lower_bound(decoy_xlinkable_peptides_flatten_.begin(), 
+                       decoy_xlinkable_peptides_flatten_.end(),
+	  	     min_mass, compareXLinkablePeptideMassToFLOAT));
+  } else {
+    return(lower_bound(target_xlinkable_peptides_flatten_.begin(), 
+                       target_xlinkable_peptides_flatten_.end(),
+	  	     min_mass, compareXLinkablePeptideMassToFLOAT));
+  }
+}
+
+vector<XLinkablePeptide>::iterator XLinkDatabase::getXLinkableFlattenEnd() {
+  return(target_xlinkable_peptides_flatten_.end());
+}
+
+vector<XLinkablePeptide>::iterator XLinkDatabase::getXLinkableFlattenEnd(
+									 bool decoy,
+  FLOAT_T max_mass
+  ) {
+
+  if (decoy) {
+    return(std::upper_bound(decoy_xlinkable_peptides_flatten_.begin(),
+	  	     decoy_xlinkable_peptides_flatten_.end(),
+		     max_mass,
+		     compareXLinkablePeptideMassToFLOAT2));
+  } else {
+
+    return(std::upper_bound(target_xlinkable_peptides_flatten_.begin(),
+	  	     target_xlinkable_peptides_flatten_.end(),
+		     max_mass,
+		     compareXLinkablePeptideMassToFLOAT2));
+  }
+}
+
+/*
+vector<pair<int, vector<XLinkablePeptide> > >& XLinkDatabase::getTargetProteinIdxToXPeptides() {
+  return protein_idx_to_xpeptides_;
+
+}
+*/
+
+int XLinkDatabase::getNLinkable() {
+  return(target_xlinkable_peptides_.size());
+}
diff --git a/src/app/xlink/XLinkDatabase.h b/src/app/xlink/XLinkDatabase.h
new file mode 100644
index 0000000..acd6006
--- /dev/null
+++ b/src/app/xlink/XLinkDatabase.h
@@ -0,0 +1,144 @@
+#ifndef XLINKDATABASE_H_
+#define XLINKDATABASE_H_
+#include "model/objects.h"
+#include "model/Peptide.h"
+#include "model/Database.h"
+#include "XLinkablePeptide.h"
+#include "SelfLoopPeptide.h"
+#include "LinearPeptide.h"
+
+#include <vector>
+
+class XLinkDatabase {
+
+ protected:
+  static Database* protein_database_;
+  static XLinkBondMap bondmap_;
+
+
+  static std::vector<std::vector<Crux::Peptide*> > target_peptides_; 
+    ///< all target peptides generated, indexed by missed cleavages
+
+  static std::vector<std::vector<Crux::Peptide*> > decoy_peptides_; 
+    ///< all decoy peptides generated, indexed by missed cleavages
+
+  static std::vector<LinearPeptide> target_linear_peptides_;
+  static std::vector<LinearPeptide> decoy_linear_peptides_;
+
+
+  static std::vector<SelfLoopPeptide> target_selfloop_peptides_;
+  static std::vector<SelfLoopPeptide> decoy_selfloop_peptides_;
+
+  static std::vector<XLinkablePeptide> target_xlinkable_peptides_;
+  static std::vector<XLinkablePeptide> decoy_xlinkable_peptides_;
+
+  static std::vector<XLinkablePeptide> target_xlinkable_peptides_flatten_;
+  static std::vector<XLinkablePeptide> target_xlinkable_peptides2_; //Peptides that could be selfloops.
+  static std::vector<XLinkablePeptide> decoy_xlinkable_peptides2_;  
+
+  static std::vector<XLinkablePeptide> decoy_xlinkable_peptides_flatten_;
+
+  static void findLinearPeptides(
+    vector<Crux::Peptide*>& peptides, 
+    vector<LinearPeptide>& linears
+  );
+  static void generateAllLinears(bool decoy);
+  static void generateAllLinkablePeptides(
+    std::vector<Crux::Peptide*>& peptides, 
+    std::vector<XLinkablePeptide>& xpeptides);
+  
+  static void findSelfLoops(
+    std::vector<XLinkablePeptide>& linkable_peptides,
+    std::vector<SelfLoopPeptide>& ans);
+
+  static void generateAllSelfLoops(bool decoy);
+  static void flattenLinkablePeptides(
+   std::vector<XLinkablePeptide>& xpeptides,
+   std::vector<XLinkablePeptide>& flattened
+   );
+
+  static void filterLinkablePeptides(
+    std::vector<XLinkablePeptide>& xpeptides,
+    std::vector<XLinkablePeptide>& filtered_xpeptides
+    );  
+
+  static bool addPeptideToDatabase(Crux::Peptide* peptide);  
+    
+ public:
+  XLinkDatabase() {;}
+  virtual ~XLinkDatabase() {;}
+
+  static void initialize();
+  static void finalize();
+  
+  static XLinkBondMap& getXLinkBondMap();
+
+  static std::vector<XLinkablePeptide>::iterator getXLinkableBegin();
+  static std::vector<XLinkablePeptide>::iterator getXLinkableBegin(FLOAT_T min_mass);
+  static std::vector<XLinkablePeptide>::iterator getXLinkableEnd();
+  static int getNLinkable();
+  static std::vector<XLinkablePeptide>& getXLinkablePeptides(
+    bool decoy
+  );
+
+  static XLinkablePeptide& getXLinkablePeptide(
+    bool decoy, 
+    int idx
+  );
+
+  static std::vector<XLinkablePeptide>::iterator getXLinkableFlattenBegin();
+  static std::vector<XLinkablePeptide>::iterator getXLinkableFlattenBegin(
+    bool decoy, 
+    FLOAT_T min_mass
+  );
+  static std::vector<XLinkablePeptide>::iterator getXLinkableFlattenEnd();
+  
+  static std::vector<XLinkablePeptide>::iterator getXLinkableFlattenEnd(
+    bool decoy,
+    FLOAT_T max_mass
+  );
+
+  static std::vector<SelfLoopPeptide>::iterator getSelfLoopBegin(
+    bool decoy
+  );
+
+  static std::vector<SelfLoopPeptide>::iterator getSelfLoopEnd(
+    bool decoy
+  );
+  
+  static std::vector<SelfLoopPeptide>::iterator getSelfLoopBegin(
+    bool decoy, 
+    FLOAT_T min_mass
+  );
+
+  static std::vector<LinearPeptide>::iterator getLinearBegin(
+    bool decoy
+  );
+  
+  static std::vector<LinearPeptide>::iterator getLinearBegin(
+    bool decoy,
+    FLOAT_T min_mass
+  );
+
+  static std::vector<LinearPeptide>::iterator getLinearEnd(
+    bool decoy
+  );
+
+  static std::vector<LinearPeptide>::iterator getLinearEnd(
+    bool decoy,
+    FLOAT_T max_mass
+  );
+  
+  static std::vector<LinearPeptide>::iterator getLinearEnd(
+    bool decoy,
+    std::vector<LinearPeptide>::iterator &siter,
+    FLOAT_T max_mass
+  );
+  
+  //static std::vector<std::pair<int, vector<XLinkablePeptide> > >& getTargetProteinIdxToXPeptides();
+
+
+  static void print();
+
+};
+#endif
diff --git a/src/app/xlink/XLinkIonSeriesCache.cpp b/src/app/xlink/XLinkIonSeriesCache.cpp
new file mode 100644
index 0000000..30a0960
--- /dev/null
+++ b/src/app/xlink/XLinkIonSeriesCache.cpp
@@ -0,0 +1,141 @@
+#include "XLinkIonSeriesCache.h"
+
+using namespace std;
+
+vector<vector<IonSeries*> > XLinkIonSeriesCache::target_xlinkable_ion_series_;
+
+vector<vector<IonSeries*> > XLinkIonSeriesCache::decoy_xlinkable_ion_series_;
+vector<IonConstraint*> XLinkIonSeriesCache::xcorr_ion_constraint_;
+
+
+IonSeries* XLinkIonSeriesCache::getXLinkablePeptideIonSeries(
+  XLinkablePeptide& xpep,
+  int charge
+  ) {
+
+  IonSeries* ans = NULL;
+  int xpep_idx = xpep.getIndex();
+
+  if (xpep_idx == -1) {
+    //carp(CARP_DEBUG, "Unindexed xlinkable peptide. Returning NULL");
+    return NULL;
+  } else {
+
+    bool decoy = xpep.isDecoy();
+    //carp(CARP_INFO, "decoy %i pep_idx %i charge %i", decoy, xpep_idx, charge);
+    vector<vector<IonSeries*> >* ion_cache = &target_xlinkable_ion_series_;
+    if (decoy) {
+      ion_cache = &decoy_xlinkable_ion_series_;
+      //carp(CARP_INFO, "Getting decoy cache");
+    }
+
+    int charge_idx = charge-1;
+    //carp(CARP_INFO, "getting pepidx:%i",xpep_idx);
+    while(ion_cache->size() <= xpep_idx) {
+      //carp(CARP_INFO, "Adding vector<IonSeries*>():%d", ion_cache->size());
+      ion_cache->push_back(vector<IonSeries*>());
+    }
+  
+    vector<IonSeries*>& level1 = (*ion_cache)[xpep_idx];
+
+    if (level1.size() == 0) {
+      IonSeries* ion_series1 = new IonSeries(getXCorrIonConstraint(1), 1);
+      ion_series1->update(xpep.getSequence(), xpep.getModifiedSequencePtr());
+      ion_series1->predictIons();
+      //carp(CARP_INFO, "charge1:%d",ion_series1->getNumIons());
+      level1.push_back(ion_series1);
+      IonSeries* ion_series2 = new IonSeries();
+      IonSeries::copy(ion_series1, ion_series2, false);
+      ion_series2->setCharge(2);
+      ion_series2->setIonConstraint(getXCorrIonConstraint(2));
+      level1.push_back(ion_series2);
+
+    }
+    while(level1.size() <= charge_idx) {
+      IonSeries* next_series = new IonSeries();
+      IonSeries* current_series = level1.back();
+      int next_charge = current_series->getCharge()+1;
+      
+      IonSeries::copy(current_series, next_series, false);
+      //carp(CARP_INFO, "copy src:%d dest:%d", current_series->getNumIons(), next_series->getNumIons());
+      next_series->setCharge(next_charge);
+      next_series->setIonConstraint(getXCorrIonConstraint(next_charge));
+
+      for (IonIterator ion_iter = level1[0]->begin();
+	   ion_iter != level1[0]->end();
+	   ++ion_iter) {
+	Ion* newIon = Ion::newIon();
+	Ion::copy(*ion_iter, newIon, (*ion_iter)->getPeptideSequence());
+	FLOAT_T ion_mass = newIon->getMassFromMassZ();
+	newIon->setCharge(next_charge-1);
+	newIon->setMassZFromMass(ion_mass);
+	next_series->addIon(newIon);
+      }
+      /*
+      IonSeries* test_series = new IonSeries(getXCorrIonConstraint(next_charge), next_charge);
+      test_series->update(xpep.getSequence(), xpep.getModifiedSequencePtr());
+      test_series->predictIons();
+      carp(CARP_INFO, "charge:%d next:%d test:%d", next_charge, next_series->getNumIons(), test_series->getNumIons());
+      delete test_series;
+      
+      for (IonIterator iter = test_series->begin();
+	   iter != test_series->end();
+	   ++iter) {
+	//carp(CARP_INFO, "charge:%d", (*iter)->getCharge());
+      }
+      */
+      level1.push_back(next_series);
+    }
+
+    ans = level1[charge_idx];
+    if (ans == NULL) {
+      carp(CARP_FATAL, "Null ion series?");
+    } else {
+      //carp(CARP_INFO, "using cached ions");
+    }
+  }
+  return ans;
+
+}
+
+IonConstraint* XLinkIonSeriesCache::getXCorrIonConstraint(
+  int charge
+  ) {
+
+  int charge_idx = charge - 1;
+
+  while(xcorr_ion_constraint_.size() <= charge_idx) {
+    xcorr_ion_constraint_.push_back(IonConstraint::newIonConstraintSmart(XCORR, (xcorr_ion_constraint_.size()+1)));
+  }
+  //carp(CARP_INFO, "returning ion_constraint");
+  return(xcorr_ion_constraint_[charge_idx]);
+
+}
+
+
+ 
+void XLinkIonSeriesCache::finalize() {
+  for (size_t xpep_idx = 0;xpep_idx <  target_xlinkable_ion_series_.size(); xpep_idx++) {
+
+    vector<IonSeries*> &level1 = target_xlinkable_ion_series_[xpep_idx];
+    for (size_t charge_idx=0;charge_idx < level1.size(); charge_idx++) {
+      if (level1[charge_idx]) {
+	IonSeries::freeIonSeries(level1[charge_idx]);
+      }
+    }
+  }
+
+  for (size_t xpep_idx = 0;xpep_idx < decoy_xlinkable_ion_series_.size(); xpep_idx++) {
+    vector<IonSeries*>& level1 = decoy_xlinkable_ion_series_[xpep_idx];
+    for (size_t charge_idx=0;charge_idx < level1.size(); charge_idx++) {
+      if (level1[charge_idx]) {
+	IonSeries::freeIonSeries(level1[charge_idx]);
+      }
+    }
+  }
+
+  for (size_t charge_idx=0;charge_idx < xcorr_ion_constraint_.size();charge_idx++) {
+    IonConstraint::free(xcorr_ion_constraint_[charge_idx]);
+  }
+  
+}
diff --git a/src/app/xlink/XLinkIonSeriesCache.h b/src/app/xlink/XLinkIonSeriesCache.h
new file mode 100644
index 0000000..5f2802e
--- /dev/null
+++ b/src/app/xlink/XLinkIonSeriesCache.h
@@ -0,0 +1,29 @@
+
+#include "model/IonSeries.h"
+#include "XLinkablePeptide.h"
+#include "model/IonConstraint.h"
+
+#include <vector>
+
+class XLinkIonSeriesCache {
+
+ protected:
+
+  //key is: xpep.getIndex(), charge
+  static std::vector<std::vector<IonSeries*> > target_xlinkable_ion_series_; 
+  static std::vector<std::vector<IonSeries*> > decoy_xlinkable_ion_series_; 
+
+  static std::vector<IonConstraint*> xcorr_ion_constraint_;
+
+ public:
+
+  static IonSeries* getXLinkablePeptideIonSeries(
+    XLinkablePeptide& xpep,
+    int charge
+    );
+
+  static IonConstraint* getXCorrIonConstraint(int charge);
+
+  static void finalize();
+
+};
diff --git a/src/app/xlink/XLinkMatch.cpp b/src/app/xlink/XLinkMatch.cpp
new file mode 100644
index 0000000..1625289
--- /dev/null
+++ b/src/app/xlink/XLinkMatch.cpp
@@ -0,0 +1,398 @@
+/**
+ * \file XLinkMatch.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 18 September December 2014
+ * \brief Object for Defining a Match in an xlink search
+ *****************************************************************************/
+#include "XLinkMatch.h"
+
+#include "parameter.h"
+#include "model/Scorer.h"
+#include "util/GlobalParams.h"
+#include <sstream>
+#include <ios>
+#include <iomanip>
+#include <iostream>
+#include "XLinkPeptide.h"
+#include "XLinkablePeptide.h"
+#include "io/OutputFiles.h"
+using namespace std;
+
+/**
+ * Constructor for XLinkMatch
+ */
+XLinkMatch::XLinkMatch() : Match() {
+  cached_sequence_ = "";
+  parent_ = NULL;
+  pvalue_= 1;
+  for (int idx = 0;idx < NUMBER_MASS_TYPES;idx++) {
+    mass_calculated_[idx] = false;
+    mass_[idx] = 0;
+  }
+  is_decoy_ = false;
+}
+
+/**
+ * Default destrcutor for XLinkMatch
+ */
+XLinkMatch::~XLinkMatch() {
+  //TODO deleted cached ions
+}
+
+void XLinkMatch::decrementPointerCount() {
+
+  pointer_count_--;
+}
+
+/**
+ * computes the pvalue for this match using the provided weibull paramters
+ */
+void XLinkMatch::computeWeibullPvalue(
+  FLOAT_T shift, ///< shift parameter for weibull
+  FLOAT_T eta, ///< eta parameter for weibull
+  FLOAT_T beta ///< beta parameter for weibull
+  ) {
+
+  pvalue_ = compute_weibull_pvalue(getScore(XCORR), eta, beta, shift);
+}
+
+void XLinkMatch::setPValue(FLOAT_T pvalue) {
+  pvalue_ = pvalue;
+}
+
+FLOAT_T XLinkMatch::getPValue() {
+
+  return(pvalue_);
+
+}
+
+/**
+ * \returns the protein id string for this match
+ * default, can be overridden
+ */
+string XLinkMatch::getProteinIdString() {
+  Crux::Peptide* peptide = this -> getPeptide(0);
+
+  if (peptide == NULL) {
+    return string("");
+  } else {
+    return XLink::get_protein_ids_locations(peptide);
+  }
+}
+
+/**
+ *\returns the protein id for this match
+ */
+string XLinkMatch::getProteinIdXString() {
+  Crux::Peptide* peptide = this -> getPeptide(0);
+  if (peptide == NULL) {
+    return string("");
+  } else {
+    return XLink::get_protein_ids_locations(peptide);
+  }
+
+}
+
+string XLinkMatch::getUnshuffledSequence() {
+  Crux::Peptide* peptide = this->getPeptide(0);
+  if (peptide == NULL) {
+    return string("");
+  } else {
+    return peptide->getUnshuffledSequence();
+  }
+}
+
+
+/**
+ *\returns the flanking amino acids for the match
+ */
+string XLinkMatch::getFlankingAAString() {
+  Crux::Peptide* peptide = this -> getPeptide(0);
+
+  string ans("");
+
+  if (peptide != NULL) {
+    char* flanking_aas = peptide->getFlankingAAs();
+    ans = flanking_aas;
+    free(flanking_aas);
+  }
+  return ans;
+}
+
+/**
+ * \returns the candidate type from a string value
+ */
+XLINKMATCH_TYPE_T XLinkMatch::getCandidateType(std::string& candidate) {
+//  cerr << "get candidate type:"<<candidate<<endl;
+  if (candidate == string("linear")) {
+    return LINEAR_CANDIDATE;
+  } else if (candidate == string("dead-link")) {
+    return DEADLINK_CANDIDATE;
+  } else if (candidate == string("self-loop")) {
+    return SELFLOOP_CANDIDATE;
+  } else if (candidate == string("xlink-inter")) {
+    return XLINK_INTER_CANDIDATE;
+  } else if (candidate == string("xlink-intra")) {
+    return XLINK_INTRA_CANDIDATE;
+  } else if (candidate == string("xlink-inter-intra")) {
+    return XLINK_INTER_INTRA_CANDIDATE;
+  } else {
+    return INVALID_CANDIDATE;
+  }
+
+}
+
+/**
+ *\returns the string value for the candidate tyoe of the match
+ */
+string XLinkMatch::getCandidateTypeString() {
+  return getCandidateTypeString(getCandidateType());
+}
+
+const string& XLinkMatch::getSequenceStringConst() {
+  if (cached_sequence_ == "") {
+    cached_sequence_ = getSequenceString();
+  }
+  return(cached_sequence_);
+}
+
+
+/**
+ *\returns the string value of the given candidate type
+ */
+string XLinkMatch::getCandidateTypeString(
+  XLINKMATCH_TYPE_T candidate ///< candidate type to convert
+  ) {
+
+  string ans = "";
+  switch(candidate) {
+    case LINEAR_CANDIDATE:
+      ans = "linear";
+      break;
+    case DEADLINK_CANDIDATE:
+      ans = "dead-link";
+      break;
+    case SELFLOOP_CANDIDATE:
+      ans = "self-loop";
+      break;
+    case XLINK_INTER_CANDIDATE:
+      ans = "xlink-inter";
+      break;
+    case XLINK_INTRA_CANDIDATE:
+      ans = "xlink-intra";
+      break;
+    case XLINK_INTER_INTRA_CANDIDATE:
+      ans = "xlink-inter-intra";
+      break;
+    default:
+      ans = "unknown";
+  }
+
+  return ans;
+
+
+}
+
+vector<IonConstraint*> XLinkMatch::ion_constraint_xcorr_;
+
+IonConstraint* XLinkMatch::getIonConstraintXCORR(int charge) {
+  int idx = charge-1;
+  while(ion_constraint_xcorr_.size() < charge) {
+    ion_constraint_xcorr_.push_back(NULL);
+  }
+  if (ion_constraint_xcorr_[idx] == NULL) {
+    ion_constraint_xcorr_[idx] = 
+      IonConstraint::newIonConstraintSmart(XCORR, charge);
+  } else {
+    //    carp(CARP_INFO, "IonConstraint cache hit!");
+  }
+  return(ion_constraint_xcorr_[idx]);
+}
+
+IonSeries* XLinkMatch::getIonSeriesXCORR(int charge) {
+
+  int idx = charge-1;
+  while(ion_series_xcorr_.size() < charge) {
+    ion_series_xcorr_.push_back(NULL);
+  }
+
+  if (ion_series_xcorr_[idx] == NULL) {
+    IonSeries* ion_series_xcorr = new IonSeries(getIonConstraintXCORR(charge), charge); 
+    predictIons(ion_series_xcorr, charge);
+    ion_series_xcorr_[idx] = ion_series_xcorr;
+  } else {
+    carp(CARP_INFO, "Cache hit!");
+  }
+  
+  return(ion_series_xcorr_[idx]);
+
+}
+
+/**
+ * \returns the mass error in part-per-million (ppm)
+ */
+FLOAT_T XLinkMatch::getPPMError() {
+  FLOAT_T mono_mass = getMass(MONO);
+  FLOAT_T obs_mass = parent_->getSpectrumNeutralMass();
+  FLOAT_T isotope;
+  
+  if (mono_mass > obs_mass) {
+    isotope = floor((mono_mass - obs_mass) / MASS_NEUTRON + 0.5);
+  } else {
+    isotope = -floor((obs_mass - mono_mass) / MASS_NEUTRON + 0.5);
+  }
+  
+
+  obs_mass = obs_mass + isotope * MASS_NEUTRON;
+
+  FLOAT_T ppm = (mono_mass - obs_mass) / obs_mass * 1e6;
+  return ppm;
+  
+}
+
+/**
+ * sets the XLinkMatchCollection owner of the match
+ */
+void XLinkMatch::setParent(XLinkMatchCollection* parent) {
+  parent_ = parent;
+}
+
+const vector<XLinkMatch*>& XLinkMatch::getDecoys() {
+  decoys_.clear();
+  shuffle(decoys_);
+  return(decoys_);
+  /*
+  if (decoys_.size() == 0) {
+    shuffle(decoys_);
+    if (decoys_.size() == 0) {
+      carp(CARP_FATAL, "Can't get decoy(s) for XLinkMatch!");
+    }
+  } else {
+    carp(CARP_INFO, "XLinkMatch::Using cached decoys");
+  }
+  
+  return(decoys_);
+  */
+}
+
+
+/**
+ * Print one field in the tab-delimited output file, based on column index.
+ */
+void XLinkMatch::printOneMatchField(
+  int      column_idx,             ///< Index of the column to print. -in
+  MatchCollection* collection,  ///< collection holding this match -in 
+  MatchFileWriter*    output_file,            ///< output stream -out
+  Crux::Spectrum* spectrum, 
+  int      num_target_matches,            ///< target matches for this spectrum -in
+  int      num_decoy_matches, ///< decoy matches for this spectrum -in
+  int      b_y_total,              ///< total b/y ions -in
+  int      b_y_matched             ///< Number of b/y ions matched. -in
+) {
+
+  carp(CARP_DETAILED_DEBUG, "XLinkMatch::printOneMatchField:%s", get_column_header(column_idx));
+
+  switch ((MATCH_COLUMNS_T)column_idx) {
+
+  case PEPTIDE_MASS_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, getMass(GlobalParams::getIsotopicMass()));
+    break;
+  case PVALUE_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, pvalue_);
+    break;
+  case SEQUENCE_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+      getSequenceStringConst());
+    break;
+  case PROTEIN_ID_COL:
+    output_file->setColumnCurrentRow(
+      (MATCH_COLUMNS_T)column_idx, 
+      getProteinIdString()); 
+    break;
+  case FLANKING_AA_COL:
+    output_file->setColumnCurrentRow(
+      (MATCH_COLUMNS_T)column_idx,
+      getFlankingAAString());
+    break;
+  case XLINK_PRODUCT_TYPE_COL:
+    output_file->setColumnCurrentRow(
+      (MATCH_COLUMNS_T)column_idx,
+      getCandidateTypeString());
+    break;
+  case PPM_ERROR_COL:
+    output_file->setColumnCurrentRow(
+      (MATCH_COLUMNS_T)column_idx,
+      getPPMError());
+    break;
+  case XCORR_FIRST_COL:
+    if ((Params::GetInt("xlink-top-n") != 0) &&
+        (getCandidateType() == XLINK_INTER_CANDIDATE || 
+        getCandidateType() == XLINK_INTRA_CANDIDATE || 
+        getCandidateType() == XLINK_INTER_INTRA_CANDIDATE)) {
+      XLinkPeptide *xpep = (XLinkPeptide*)this;
+      XLinkablePeptide& lpep = xpep->getXLinkablePeptide(0);
+      output_file->setColumnCurrentRow(
+        (MATCH_COLUMNS_T)column_idx,
+        lpep.getXCorr());
+    } else {
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 0);
+    }
+    break;
+  case XCORR_SECOND_COL:
+    if ((Params::GetInt("xlink-top-n") != 0) && 
+        (getCandidateType() == XLINK_INTER_CANDIDATE ||
+        getCandidateType() == XLINK_INTRA_CANDIDATE ||
+        getCandidateType() == XLINK_INTER_INTRA_CANDIDATE)) {
+      XLinkPeptide *xpep = (XLinkPeptide*)this;
+      XLinkablePeptide& lpep = xpep->getXLinkablePeptide(1);
+      output_file->setColumnCurrentRow(
+        (MATCH_COLUMNS_T)column_idx,
+        lpep.getXCorr());
+    } else {
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 0);
+    }
+    break;
+  case PROTEIN_ID_X_COL:
+    output_file->setColumnCurrentRow(
+      (MATCH_COLUMNS_T)column_idx,
+      getProteinIdXString());
+    break;
+  case XLINK_TYPE_COL:
+    output_file->setColumnCurrentRow(
+      (MATCH_COLUMNS_T)column_idx,
+      getCandidateTypeString());
+    break;
+  case ORIGINAL_TARGET_SEQUENCE_COL:
+    if (null_peptide_ == true || Params::GetBool("concat")) {
+      string seq = getUnshuffledSequence();
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, seq);
+    }
+    break;
+  case MODIFICATIONS_COL:
+    //TODO FIX!
+    break;
+  case ENZ_INT_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, getNumMissedCleavages());
+    break;
+  default:
+    Match::printOneMatchField(column_idx,
+      collection,
+      output_file,
+      spectrum, 
+      num_target_matches,
+      num_decoy_matches,
+      b_y_total,
+      b_y_matched
+    );
+  }
+}
+
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/app/xlink/XLinkMatch.h b/src/app/xlink/XLinkMatch.h
new file mode 100644
index 0000000..3f0e6e3
--- /dev/null
+++ b/src/app/xlink/XLinkMatch.h
@@ -0,0 +1,152 @@
+/**
+ * \file XLinkMatch.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 18 September December 2014
+ * \brief Object for Defining a Match in an xlink search
+ *****************************************************************************/
+#ifndef XLINKMATCH_H_
+#define XLINKMATCH_H_
+
+#include "util/crux-utils.h"
+#include "XLink.h"
+#include "XLinkMatchCollection.h"
+#include <string>
+#include "model/Match.h"
+#include "util/CacheableMass.h"
+
+class XLinkMatch : public Crux::Match, public CacheableMass {
+
+ protected:
+  XLinkMatchCollection* parent_; ///< Owner of this match
+  FLOAT_T pvalue_; ///< p-value of the match
+
+  std::vector<IonSeries*> ion_series_xcorr_;
+  std::vector<IonSeries*> ion_series_sp_;
+  std::vector<XLinkMatch*> decoys_;
+  std::string cached_sequence_;
+  
+  static std::vector<IonConstraint*> ion_constraint_xcorr_;
+  static IonConstraint* getIonConstraintXCORR(int charge); 
+
+  bool is_decoy_;
+  
+ public:
+  
+  /**
+   *  Constructor for XLinkMatch()
+   */
+  XLinkMatch();
+
+  /**
+   * Default destructor for XLinkMatch
+   */
+  virtual ~XLinkMatch();
+
+  virtual XLINKMATCH_TYPE_T getCandidateType() = 0;
+  virtual int getNumMissedCleavages() = 0;
+  virtual bool isModified() = 0;
+  virtual std::string getSequenceString() = 0;
+  virtual void shuffle(std::vector<XLinkMatch*>& decoys) = 0;
+  
+  virtual void predictIons(IonSeries* ion_series, int charge) = 0;
+  virtual std::string getIonSequence(Ion* ion) = 0;
+  virtual Crux::Peptide* getPeptide(int peptide_idx) = 0;
+
+  const std::string& getSequenceStringConst();
+  const std::vector<XLinkMatch*>& getDecoys();
+
+  virtual IonSeries* getIonSeriesXCORR(int charge);
+
+
+  std::string getCandidateTypeString();
+
+  
+  void decrementPointerCount();
+  
+  /**
+   * computes the pvalue for this match using the provided weibull paramters
+   */
+  void computeWeibullPvalue(
+    FLOAT_T shift, ///< shift parameter for weibull
+    FLOAT_T eta, ///< eta parameter for weibull
+    FLOAT_T beta ///< beta parameter for weibull
+    );
+
+  FLOAT_T getPValue();
+
+  void setPValue(
+    FLOAT_T pvalue
+  );
+  
+  /**
+   * \returns the mass error in part-per-million (ppm)
+   */
+  FLOAT_T getPPMError();
+
+  /**
+   * sets the XLinkMatchCollection owner of the match
+   */
+  void setParent(XLinkMatchCollection* parent);
+
+  /**
+   * \returns the protein id string for this match
+   */
+  virtual std::string getProteinIdString();
+  
+  /**
+   * \returns the protein id string for this match.  In the case
+   * of a xlinked peptide, reportes the position in the protein
+   */
+  virtual std::string getProteinIdXString();
+
+  /**
+   *\returns the flanking amino acids for the match
+   */
+  virtual std::string getFlankingAAString();
+
+  /**
+   *\returns unshuffled version of the sequence
+   */
+  virtual std::string getUnshuffledSequence();
+  
+  
+ /**
+   * Print one field in the tab-delimited output file, based on column index.
+   * overridden from Match
+   */
+  virtual void printOneMatchField(
+    int      column_idx,             ///< Index of the column to print. -in
+    MatchCollection* collection,  ///< collection holding this match -in 
+    MatchFileWriter*    output_file,            ///< output stream -out
+    Crux::Spectrum* spectrum, 
+    int      num_target_matches,            ///< target matches in spectrum -in
+    int      num_decoy_matches,      ///< decoy matches (if any) for this spectrum -in
+    int      b_y_total,              ///< total b/y ions -in
+    int      b_y_matched             ///< Number of b/y ions matched. -in
+  );    
+
+  /**
+   *\returns the string value of the given candidate type
+   */
+  static std::string getCandidateTypeString(
+    XLINKMATCH_TYPE_T candidate ///< candidate
+  );
+
+  /**
+   * \returns the candidate type from a string value
+   */
+  static XLINKMATCH_TYPE_T getCandidateType(
+    std::string& candidate ///< candidate in string format
+  );
+
+
+};
+
+#endif
+
+/*                                                                                                                                                                                                                          
+ * Local Variables:                                                                                                                                                                                                         
+ * mode: c                                                                                                                                                                                                                  
+ * c-basic-offset: 2                                                                                                                                                                                                        
+ * End:                                                                                                                                                                                                                     
+ */
diff --git a/src/app/xlink/XLinkMatchCollection.cpp b/src/app/xlink/XLinkMatchCollection.cpp
new file mode 100644
index 0000000..6a74964
--- /dev/null
+++ b/src/app/xlink/XLinkMatchCollection.cpp
@@ -0,0 +1,444 @@
+/**
+ * \file XLinkMatchCollection.cpp
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 18 September December 2014
+ * \brief Collection of possible xlink products
+ *****************************************************************************/
+
+#include "XLinkMatchCollection.h"
+#include "XLinkPeptide.h"
+#include "LinearPeptide.h"
+#include "SelfLoopPeptide.h"
+#include "XLinkScorer.h"
+
+#include "model/Spectrum.h"
+#include "util/GlobalParams.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+
+#include <iostream>
+
+
+static const FLOAT_T MIN_XCORR_SHIFT = -5.0;
+static const FLOAT_T MAX_XCORR_SHIFT  = 5.0;
+//#define CORR_THRESHOLD 0.995   // Must achieve this correlation, else punt.
+static const FLOAT_T CORR_THRESHOLD = 0.5;
+static const FLOAT_T XCORR_SHIFT = 0.05;
+
+using namespace std;
+
+void get_min_max_mass(
+  FLOAT_T precursor_mz, 
+  SpectrumZState& zstate, 
+  int isotope,
+  FLOAT_T window,
+  WINDOW_TYPE_T precursor_window_type,
+  FLOAT_T& min_mass, 
+  FLOAT_T& max_mass,
+  FLOAT_T& precursor_mass) {
+
+  //cerr <<"mz: "
+  //     <<precursor_mz
+  //     <<" charge:"
+  //     <<charge
+  //     <<" mass:"<<mass
+  //     <<" window:"<<window<<endl;
+
+  precursor_mass = zstate.getNeutralMass() + (double)isotope*MASS_NEUTRON;
+
+  if (precursor_window_type == WINDOW_MASS) {
+    //cerr<<"WINDOW_MASS"<<endl;
+    min_mass = precursor_mass - window;
+    max_mass = precursor_mass + window;
+  } else if (precursor_window_type == WINDOW_MZ) {
+    //cerr<<"WINDOW_MZ"<<endl;
+    double min_mz = precursor_mz - window;
+    double max_mz = precursor_mz + window;
+    min_mass = (min_mz - MASS_PROTON) * (double)zstate.getCharge();
+    max_mass = (max_mz - MASS_PROTON) * (double)zstate.getCharge();
+  } else if (precursor_window_type == WINDOW_PPM) {
+    //cerr<<"WINDOW_PPM"<<endl;
+    min_mass = precursor_mass * (1.0 - window * 1e-6);
+    max_mass = precursor_mass * (1.0 + window * 1e-6);
+  }
+  
+  //cerr<<"min:"<<min_mass<<" "<<"max: "<<max_mass<<endl;
+
+}
+
+void get_min_max_mass(
+  FLOAT_T precursor_mz, 
+  SpectrumZState& zstate,
+  int isotope,
+  bool use_decoy_window,
+  FLOAT_T& min_mass, 
+  FLOAT_T& max_mass,
+  FLOAT_T& precursor_mass) {
+  
+  if (use_decoy_window) {
+    get_min_max_mass(precursor_mz,
+         zstate,
+                     isotope,
+         Params::GetDouble("precursor-window-weibull"),
+         string_to_window_type(Params::GetString("precursor-window-type-weibull")),
+         min_mass,
+		     max_mass, precursor_mass);
+  } else {
+    get_min_max_mass(precursor_mz,
+         zstate,
+                     isotope,
+      GlobalParams::getPrecursorWindow(),
+      GlobalParams::getPrecursorWindowType(),		     
+      min_mass,
+      max_mass, 
+      precursor_mass);
+  }
+}
+
+/**
+ * Default constructor
+ */
+XLinkMatchCollection::XLinkMatchCollection() : MatchCollection() {
+  carp(CARP_DEBUG, "XLinkMatchCollection():start");
+  scan_ = 0;
+}
+
+/**
+ * Copy constructor
+ */
+XLinkMatchCollection::XLinkMatchCollection(
+  XLinkMatchCollection& vector ///<collection to copy
+  ) : MatchCollection() {
+  
+  carp(CARP_DEBUG, "XLinkMatchCollection(XLinkMatchCollection):start");
+  precursor_mz_ = vector.precursor_mz_;
+  zstate_ = vector.zstate_;
+  scan_ = vector.scan_;
+
+  for (int idx = 0; idx < vector.getMatchTotal(); idx++) {
+    XLinkMatch* currentCandidate = (XLinkMatch*)vector[idx];
+    XLinkMatch* copyCandidate = NULL;
+    switch (currentCandidate -> getCandidateType()) {
+    case LINEAR_CANDIDATE:
+    case DEADLINK_CANDIDATE:
+      copyCandidate = 
+  new LinearPeptide(*(LinearPeptide*)currentCandidate);
+      break;
+    case SELFLOOP_CANDIDATE:
+      copyCandidate =
+  new SelfLoopPeptide(*(SelfLoopPeptide*)currentCandidate);
+      break;
+    case XLINK_INTER_CANDIDATE:
+    case XLINK_INTRA_CANDIDATE:
+    case XLINK_INTER_INTRA_CANDIDATE:
+      copyCandidate =
+  new XLinkPeptide(*(XLinkPeptide*)currentCandidate);
+      break;
+    case INVALID_CANDIDATE:
+      carp(CARP_ERROR, "Invalid candidate type.");
+      exit(1);
+    }
+    add(copyCandidate);
+  }
+
+
+}
+
+/**
+ * Constructor that finds all possible candidates
+ */
+/*
+XLinkMatchCollection::XLinkMatchCollection() {
+  
+  carp(CARP_DEBUG, "XLinkMatchCollection(...)");
+
+  FLOAT_T min_mass = Params::GetDouble("min-mass");
+  FLOAT_T max_mass = Params::GetDouble("max-mass");
+
+  addCandidates(
+		NULL,
+		0,
+		1,
+		min_mass, 
+		max_mass,
+		false);
+
+}
+*/
+
+/**
+ * Constructor that finds all candidates within a mass range
+ */
+void XLinkMatchCollection::addCandidates(
+  Crux::Spectrum *spectrum,
+  FLOAT_T precursor_mass,
+  int precursor_charge,
+  FLOAT_T min_mass, ///< min mass
+  FLOAT_T max_mass, ///< max mass
+  bool decoy
+  ) {
+
+  //carp(CARP_INFO, "XLinkMatchCollection.addCandidates() start");
+
+  include_linear_peptides_ = Params::GetBool("xlink-include-linears");
+  include_self_loops_ = Params::GetBool("xlink-include-selfloops");
+ 
+  if (GlobalParams::getXLinkIncludeInter() ||
+      GlobalParams::getXLinkIncludeIntra() ||
+      GlobalParams::getXLinkIncludeInterIntra()) {
+    int num_xlink_candidates = 0;
+    carp(CARP_DEBUG, "Adding xlink candidates");
+    carp(CARP_DEBUG, "precursor:%g", precursor_mass);
+    carp(CARP_DEBUG, "min:%g", min_mass);
+    carp(CARP_DEBUG, "max:%g", max_mass);
+    num_xlink_candidates = XLinkPeptide::addCandidates(
+      spectrum,
+      precursor_mass,
+      precursor_charge,
+      min_mass, 
+      max_mass,
+      decoy,
+      *this);
+    carp(CARP_DETAILED_DEBUG,"Number of xlink candidates:%d", num_xlink_candidates);
+    if (num_xlink_candidates == 0 && Params::GetBool("require-xlink-candidate")) {
+      carp(CARP_DEBUG, "no xlink candidate, returning");
+      return;
+    }
+    
+  }
+  if (include_linear_peptides_) {
+
+    LinearPeptide::addCandidates(
+      min_mass,
+      max_mass,
+      decoy,
+      *this);
+
+  }
+
+  if (include_self_loops_) {
+  
+    SelfLoopPeptide::addCandidates(
+      min_mass,
+      max_mass,
+      decoy,
+      *this);
+  }
+}
+
+
+/**
+ * Constructor for finding all candidates within a mass range
+ */
+XLinkMatchCollection::XLinkMatchCollection(
+  Crux::Spectrum *spectrum, ///< spectrum
+  SpectrumZState& zstate, ///< z-state
+  bool decoy,
+  bool use_decoy_window  
+  ) {
+
+  carp(CARP_DEBUG, "Inside XLinkMatchCollection....");
+
+  precursor_mz_ = spectrum->getPrecursorMz();
+  setZState(zstate);  
+
+
+  FLOAT_T min_mass;
+  FLOAT_T max_mass;
+  const vector<int>& isotopes = GlobalParams::getIsotopeWindows(); 
+  for (int idx = 0; idx < isotopes.size();idx++) {
+    FLOAT_T precursor_mass;
+    get_min_max_mass(precursor_mz_, zstate, isotopes[idx], use_decoy_window, min_mass, max_mass, precursor_mass);
+    carp(CARP_DEBUG, "isotope %i precursor: %g min:%g max:%g", isotopes[idx], precursor_mass, min_mass, max_mass);
+    addCandidates(spectrum, precursor_mass, zstate.getCharge(), 
+		  min_mass, max_mass, decoy);
+  }
+}
+
+/**
+ * adds a candidate to the list
+ */
+void XLinkMatchCollection::add(
+  XLinkMatch* candidate, ///< candidate to add
+  bool copy
+  ) {
+
+  candidate->setZState(zstate_);
+  candidate->setParent(this);
+  addMatch(candidate);
+  if (!copy) {
+    candidate->decrementPointerCount();
+  }
+  experiment_size_++;
+
+}
+
+void XLinkMatchCollection::add(
+  const vector<XLinkMatch*>& candidates,
+  bool copy
+  ) {
+
+  for (size_t idx = 0;idx < candidates.size();idx++) {
+    //carp(CARP_INFO, "Adding %s", candidates.at(idx)->getSequenceString().c_str());
+    add(candidates.at(idx), copy);
+  }
+  
+}
+
+/**
+ * \returns a candidate from the list by index
+ */
+XLinkMatch* XLinkMatchCollection::at(
+  int idx ///< index of the candidate
+  ) {
+  if (idx < 0 || idx >= getMatchTotal()) {
+    carp(CARP_FATAL, "XLinkMatchCollection:index %d out of bounds (0,%d)",
+      idx, getMatchTotal());
+  }
+  return (XLinkMatch*)match_[idx];
+}
+
+/**
+ * \returns a candidate from the list by index
+ */
+XLinkMatch* XLinkMatchCollection::operator[] (
+  int idx ///< index of the candidate
+  ) {
+  return (XLinkMatch*)match_[idx];
+}
+
+
+/**
+ * shuffles the candidates and places the results in a decoy collection
+ */
+void XLinkMatchCollection::shuffle(
+  XLinkMatchCollection& decoy_vector ///< collection to add decoys to
+  ) {
+  
+  decoy_vector.precursor_mz_ = precursor_mz_;
+  decoy_vector.zstate_ = zstate_;
+  decoy_vector.scan_ = scan_;
+
+  for (int idx = 0; idx < getMatchTotal(); idx++) {
+    decoy_vector.add(at(idx)->getDecoys());
+  }
+
+}
+
+/**
+ * scores all candidates against the spectrum
+ */
+void XLinkMatchCollection::scoreSpectrum(
+  Crux::Spectrum* spectrum ///< spectrum to score against
+  ) {
+
+  int max_ion_charge = get_max_ion_charge_parameter("max-ion-charge");
+
+  carp(CARP_DEBUG, "Creating scorer");
+  XLinkScorer scorer(
+    spectrum, 
+    min(zstate_.getCharge(), max_ion_charge));
+
+  for (int idx = 0; idx < getMatchTotal(); idx++) {
+    carp(CARP_DEBUG, "Scoring candidate:%d", idx);
+    scorer.scoreCandidate(at(idx));
+  }
+
+  // set the match_collection as having been scored
+  scored_type_[XCORR] = true;
+  if (Params::GetBool("compute-sp")) {
+    scored_type_[SP] = true;
+  }
+
+  carp(CARP_DEBUG, "Done scoreSpectrum");
+}
+
+/**
+ * fits a weibull to the collection
+ */
+void XLinkMatchCollection::fitWeibull() {
+
+  //create the array of x's and 
+  shift_ = 0;
+  eta_ = 0;
+  beta_ = 0;
+  correlation_ = 0;
+
+  FLOAT_T* xcorrs = extractScores(XCORR);
+// reverse sort the scores
+
+  std::sort(xcorrs, xcorrs + getMatchTotal(), greater<FLOAT_T>());
+
+  double fraction_to_fit = Params::GetDouble("fraction-top-scores-to-fit");
+  int num_tail_samples = (int)(getMatchTotal() * fraction_to_fit);
+
+  fit_three_parameter_weibull(xcorrs,
+            num_tail_samples,
+            getMatchTotal(),
+            MIN_XCORR_SHIFT,
+            MAX_XCORR_SHIFT,
+            XCORR_SHIFT,
+            CORR_THRESHOLD,
+            &eta_,
+            &beta_,
+            &shift_,
+            &correlation_);
+
+  free(xcorrs);
+
+}
+
+/**
+ * computes the p-value for the candidate
+ */
+void XLinkMatchCollection::computeWeibullPValue(
+  int idx ///< candidate
+  ) {
+
+  at(idx)->computeWeibullPvalue(shift_, eta_, beta_);
+}
+
+/**
+ * sets the scan for the collection
+ */
+void XLinkMatchCollection::setScan(
+  unsigned int scan ///< scan number to set
+  ) {
+  scan_ = scan;
+}
+
+/**
+ *\returns the scan number
+ */
+unsigned int XLinkMatchCollection::getScan() {
+  return scan_;
+}
+
+/**
+ *\returns the charge state of the collection
+ */
+int XLinkMatchCollection::getCharge() {
+  return zstate_.getCharge();
+}
+
+/**
+ *\returns the precursor m/z
+ */
+FLOAT_T XLinkMatchCollection::getPrecursorMZ() {
+  return precursor_mz_;
+}
+
+/**
+ * \returns the neutral mass of the collection
+ */
+FLOAT_T XLinkMatchCollection::getSpectrumNeutralMass() {
+  return zstate_.getNeutralMass();
+}
+
+/*                                                                                                                                                                                                                          
+ * Local Variables:                                                                                                                                                                                                         
+ * mode: c                                                                                                                                                                                                                  
+ * c-basic-offset: 2                                                                                                                                                                                                        
+ * End:                                                                                                                                                                                                                     
+ */
+
diff --git a/src/app/xlink/XLinkMatchCollection.h b/src/app/xlink/XLinkMatchCollection.h
new file mode 100644
index 0000000..0934136
--- /dev/null
+++ b/src/app/xlink/XLinkMatchCollection.h
@@ -0,0 +1,169 @@
+/**
+ * \file XLinkMatchCollection.h
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 18 September December 2014
+ * \brief Collection of possible xlink products
+ *****************************************************************************/
+#ifndef XLINKMATCHCOLLECTION_H_
+#define XLINKMATCHCOLLECTION_H_
+
+/* Crux Includes */
+#include "model/objects.h"
+#include "model/MatchCollection.h"
+#include "model/Database.h"
+#include "model/Spectrum.h"
+#include "util/modifications.h"
+#include "model/SpectrumZState.h"
+
+/* XLink Includes */
+#include "XLink.h"
+#include "XLinkMatch.h"
+
+class XLinkMatchCollection : public MatchCollection {
+ protected:
+
+  bool include_linear_peptides_; ///< Include linear peptides 
+  bool include_self_loops_; ///< include self loops
+  int scan_; ///< scan number of the collection
+  FLOAT_T precursor_mz_; ///< precursor m/z
+  Crux::Spectrum* spectrum_; ///< spectrum object
+
+  /**
+   * Adds all of the possible candidates given the mass range
+   */
+  void addCandidates(
+    Crux::Spectrum *spectrum, ///<spectrum
+    FLOAT_T precursor_mass, ///< precursor mass
+    int precursor_charge,
+    FLOAT_T min_mass, ///< minimum mass
+    FLOAT_T max_mass,  ///< maximum mass
+    bool decoy ///< decoys?
+    );
+
+ public:
+
+  /**
+   * Default constructor
+   */
+  XLinkMatchCollection();
+
+  /**
+   * Copy constructor
+   */
+  XLinkMatchCollection(
+    XLinkMatchCollection& vector ///< match collection to copy
+  );
+
+  /**
+   * Constructor for finding all candidates within a mass range
+   */
+  XLinkMatchCollection(
+    Crux::Spectrum* spectrum, ///< Spectrum
+    SpectrumZState& zstate, ///< z-state
+    bool decoy,
+    bool use_decoy_window = false ///< decoys?
+  );
+
+  /**
+   * Default destructor
+   */
+  virtual ~XLinkMatchCollection() {}
+
+  /**
+   * adds a candidate to the list
+   */
+  void add(XLinkMatch* candidate, bool copy = false);
+  
+  void add(
+    const vector<XLinkMatch*>& candidates,
+    bool copy = false
+  );
+  
+  /**
+   *\returns a candidate from the list by index
+   */
+  XLinkMatch* operator[] (
+    int idx ///< index
+  );
+  
+  /**
+   *\returns a candidate from the list by index
+   */
+  XLinkMatch* at(
+    int idx ///< index
+  );
+  
+  /**
+   * shuffles the candidates and places the results in a decoy collection
+   */
+  void shuffle(
+    XLinkMatchCollection& decoy_vector ///< collection to add decoys to
+  );
+
+  /**
+   * scores all candidates against the spectrum
+   */
+  void scoreSpectrum(
+    Crux::Spectrum* spectrum ///< spectrum to score against
+  );
+  
+  /**
+   * sets the ranks for the candidates
+   */
+  void setRanks();
+  
+  /**
+   * fits a weibull to the xcorrs in the collection
+   */
+  void fitWeibull();
+  
+  FLOAT_T getEta() {return eta_;}
+  FLOAT_T getBeta() {return beta_;}
+  FLOAT_T getShift() {return shift_;}
+  FLOAT_T getCorrelation() {return correlation_;}
+  
+
+  /**
+   * computes the p-values for the candidate
+   */
+  void computeWeibullPValue(
+    int idx ///< candidate index
+    );
+
+  /**
+   * sets the scan for the collection
+   */
+  void setScan(
+    unsigned int scan ///< scan number to set
+  );
+  
+  /**
+   * \returns the scan number
+   */
+  unsigned int getScan();
+  
+  /**
+   * \returns the charge state of the collection
+   */
+  int getCharge();
+  
+  /**
+   * \returns the precursor m/z
+   */
+  FLOAT_T getPrecursorMZ();
+  
+  /**
+   * \returns the neutral mass of the collection
+   */
+  FLOAT_T getSpectrumNeutralMass();
+
+};
+
+#endif
+
+/*                                                                                                                                                                                                                          
+ * Local Variables:                                                                                                                                                                                                         
+ * mode: c                                                                                                                                                                                                                  
+ * c-basic-offset: 2                                                                                                                                                                                                        
+ * End:                                                                                                                                                                                                                     
+ */
diff --git a/src/app/xlink/XLinkPeptide.cpp b/src/app/xlink/XLinkPeptide.cpp
new file mode 100644
index 0000000..071229d
--- /dev/null
+++ b/src/app/xlink/XLinkPeptide.cpp
@@ -0,0 +1,726 @@
+/**
+ * \file XLinkPeptide.cpp 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 18 September 2014
+ * \brief Object for Defining a crosslinked peptide in an xlink search
+ *****************************************************************************/
+#include "XLinkPeptide.h"
+#include "model/ModifiedPeptidesIterator.h"
+#include "model/IonSeries.h"
+#include "model/Ion.h"
+#include "util/Params.h"
+#include "util/GlobalParams.h"
+#include "XLinkDatabase.h"
+#include "XLinkablePeptideIterator.h"
+#include "XLinkablePeptideIteratorTopN.h"
+
+#include <iostream>
+#include <sstream>
+
+using namespace std;
+
+FLOAT_T XLinkPeptide::linker_mass_ = 0;
+set<Crux::Peptide*> XLinkPeptide::allocated_peptides_;
+FLOAT_T XLinkPeptide::pmin_ = 0;
+bool XLinkPeptide::pmin_set_ = false;
+
+XLinkPeptide::XLinkPeptide() : XLinkMatch() {
+  mass_calculated_[MONO] = false;
+  mass_calculated_[AVERAGE] = false;
+  target_ = NULL;
+}
+
+/**
+ * Constructor using two linkable peptide objects and locations
+ */
+XLinkPeptide::XLinkPeptide(
+  XLinkablePeptide& peptideA, ///< 1st peptide
+  XLinkablePeptide& peptideB, ///< 2nd peptide
+  int posA, ///<link pos1
+  int posB ///<link pos2
+  ) : XLinkMatch() {
+  
+  mass_calculated_[MONO] = false;
+  mass_calculated_[AVERAGE] = false;
+  
+  linked_peptides_.push_back(peptideA);
+  linked_peptides_.push_back(peptideB);
+  link_pos_idx_.push_back(posA);
+  link_pos_idx_.push_back(posB);
+
+  doSort();
+
+}
+
+/**
+ * Constructor for using two string peptides and locations
+ */
+XLinkPeptide::XLinkPeptide(
+  char* peptideA, ///< sequence of peptide1
+  char* peptideB, ///< sequence of peptide2
+  int posA, ///< position of crosslink in peptide1
+  int posB ///< position of crosslink in peptide2
+  ) : XLinkMatch() {
+
+  mass_calculated_[MONO] = false;
+  mass_calculated_[AVERAGE] = false;
+
+  XLinkablePeptide A(peptideA);
+  linked_peptides_.push_back(A);
+  XLinkablePeptide B(peptideB);
+  linked_peptides_.push_back(B);
+  A.addLinkSite(posA);
+  link_pos_idx_.push_back(0);
+  B.addLinkSite(posB);
+  link_pos_idx_.push_back(0);
+  doSort();
+}
+
+
+/**
+ * makes sure that sequence1 is smaller in alphanumeric value than
+ * sequence 2
+ */
+void XLinkPeptide::doSort() {
+
+  string seq1 = linked_peptides_[0].getModifiedSequenceString();
+  
+  string seq2 = linked_peptides_[1].getModifiedSequenceString();
+
+
+  if (seq1 > seq2) {
+
+    //swap peptides
+    swap(linked_peptides_[0], linked_peptides_[1]);
+    //swap links
+    swap(link_pos_idx_[0], link_pos_idx_[1]);
+  }
+
+  seq1 = linked_peptides_[0].getModifiedSequenceString();
+  
+  seq2 = linked_peptides_[1].getModifiedSequenceString();
+
+  assert(seq1 <= seq2);
+
+
+
+}
+
+/**
+ * sets the static linker mass variable
+ */
+void XLinkPeptide::setLinkerMass(
+  FLOAT_T linker_mass ///< linker mass
+  ) {
+  linker_mass_ = linker_mass;
+}
+
+/**
+ * \returns the linker mass
+ */
+FLOAT_T XLinkPeptide::getLinkerMass() {
+  return linker_mass_;
+}
+
+/**
+ * \returns the link position within each peptide
+ */
+int XLinkPeptide::getLinkPos(
+  int peptide_idx ///< 0 - first peptide, 1 - second peptide
+  ) {
+  
+  return linked_peptides_.at(peptide_idx).getLinkSite(link_pos_idx_.at(peptide_idx));
+}
+
+int XLinkPeptide::getLinkIdx(
+			     int peptide_idx ///< 0 - first peptide, 1 -second peptide
+			     ) {
+  return link_pos_idx_[peptide_idx];
+}
+
+bool XLinkPeptide::isDecoy() {
+
+  return linked_peptides_.at(0).isDecoy() || linked_peptides_.at(1).isDecoy();
+
+}
+
+
+/**
+ * \returns whether the cross-link is from peptides from two different
+ * proteins
+ */
+bool XLinkPeptide::isInter() {
+  return XLink::isCrossLinkInter(linked_peptides_.at(0).getPeptide(), linked_peptides_.at(1).getPeptide());
+}
+
+/**
+ * \returns whether the cross-link is from peptides within the same protein
+ */
+bool XLinkPeptide::isIntra() {
+  return XLink::isCrossLinkInter(linked_peptides_[0].getPeptide(), linked_peptides_[1].getPeptide());
+}
+
+/**
+ * \returns whether the cross-link is from peptides that are both within the same protein and from different proteins
+ */
+bool XLinkPeptide::isInterIntra() {
+  return(isInter() && isIntra());
+}
+
+
+
+/***
+ * adds crosslink candidates by iterating through all possible masses
+ */
+int XLinkPeptide::addCandidates(
+  Crux::Spectrum* spectrum,
+  FLOAT_T precursor_mass,
+  int precursor_charge,
+  FLOAT_T min_mass, ///< min mass of crosslink
+  FLOAT_T max_mass, ///< max mass of crosslinks
+  bool decoy,
+  XLinkMatchCollection& candidates ///< candidates in/out
+  ) {
+
+  carp(CARP_DEBUG, "XLinkPeptide::addCandidates - precursor:%g", precursor_mass);
+  carp(CARP_DEBUG, "XLinkPeptide::addCandidates - min:%g", min_mass);
+  carp(CARP_DEBUG, "XLinkPeptide::addCandidates - max:%g", max_mass);
+
+  if (!pmin_set_) {
+    pmin_ = XLinkDatabase::getXLinkableBegin()->getMass(GlobalParams::getIsotopicMass());
+    pmin_set_ = true;
+  }
+  FLOAT_T peptide1_min_mass = pmin_;
+  FLOAT_T peptide1_max_mass = max_mass-pmin_-linker_mass_;
+
+  carp(CARP_DEBUG, "peptide1_min:%g", peptide1_min_mass);
+  carp(CARP_DEBUG, "peptide1_max:%g", peptide1_max_mass);
+
+  if (GlobalParams::getXLinkTopN() > 0) {
+    vector<XLinkablePeptide> xlinkable_peptides;
+    XLinkablePeptideIteratorTopN xlp_iter(spectrum, 
+					  precursor_mass, 
+					  peptide1_min_mass, 
+					  peptide1_max_mass, 
+					  precursor_charge, 
+					  decoy);
+    while(xlp_iter.hasNext()) {
+      xlinkable_peptides.push_back(xlp_iter.next());
+    }
+    sort(xlinkable_peptides.begin(), xlinkable_peptides.end(), compareXLinkablePeptideMass);
+    carp(CARP_DEBUG, "get xcorr");
+    for (size_t idx =0;idx<xlinkable_peptides.size();idx++) {
+      carp(CARP_DEBUG, "%f", xlinkable_peptides[idx].getXCorr());
+    }
+    return(addCandidates(min_mass, max_mass, xlinkable_peptides, candidates));
+  } else {
+    return(addCandidates(min_mass, max_mass, XLinkDatabase::getXLinkablePeptides(decoy), candidates));
+  }
+}
+
+int XLinkPeptide::addXLinkPeptides(
+  XLinkablePeptide& pep1, 
+  XLinkablePeptide& pep2,
+  XLinkMatchCollection& candidates
+  ) {
+
+  XLinkBondMap& bondmap = XLinkDatabase::getXLinkBondMap();
+  int num_candidates = 0;
+  //for every linkable site, generate the candidate if it is legal.
+  for (unsigned int link1_idx=0;link1_idx < pep1.numLinkSites(); link1_idx++) {
+    for (unsigned int link2_idx=0;link2_idx < pep2.numLinkSites();link2_idx++) {
+      if (bondmap.canLink(pep1, pep2, link1_idx, link2_idx)) {
+        //create the candidate
+        XLinkMatch* newCandidate = 
+          new XLinkPeptide(pep1, pep2, link1_idx, link2_idx);
+        candidates.add(newCandidate);
+        num_candidates++;
+      }
+    }
+  }
+  return(num_candidates);
+}
+
+/**
+ * adds crosslink candidates to the XLinkMatchCollection using
+ * the passed in iterator for the 1st peptide
+ */
+int XLinkPeptide::addCandidates(
+  FLOAT_T min_mass, ///< min mass of crosslinks
+  FLOAT_T max_mass, ///< max mass of crosslinks
+  vector<XLinkablePeptide>& linkable_peptides, 
+  XLinkMatchCollection& candidates ///< candidates -in/out
+  ) {
+
+  bool include_inter = GlobalParams::getXLinkIncludeInter();
+  bool include_intra = GlobalParams::getXLinkIncludeIntra();
+  bool include_inter_intra = GlobalParams::getXLinkIncludeInterIntra();
+
+  int max_mod_xlink = GlobalParams::getMaxXLinkMods();
+  
+  size_t xpeptide_count = linkable_peptides.size();
+  if (xpeptide_count <= 0) { return 0;}
+
+  int num_candidates = 0;
+  
+  bool done = false;
+
+  for (size_t pep_idx1=0;pep_idx1 < xpeptide_count-1;pep_idx1++) {
+    XLinkablePeptide& pep1 = linkable_peptides.at(pep_idx1);
+    carp(CARP_DEBUG, "pep_idx1:%d %d %f %s",
+         pep_idx1,
+         xpeptide_count-1,
+         linkable_peptides[pep_idx1].getMassConst(MONO),
+         pep1.getModifiedSequenceString().c_str()
+         );
+    FLOAT_T pep1_mass = pep1.getMassConst(MONO);
+    FLOAT_T pep2_min_mass = min_mass - pep1_mass - linker_mass_;
+    FLOAT_T pep2_max_mass = max_mass - pep1_mass - linker_mass_;
+    int start_idx2 = pep_idx1+1;
+      
+    if (pep1_mass + linker_mass_ + linkable_peptides[start_idx2].getMassConst(MONO) > max_mass) {
+      break;
+    }
+    for (size_t pep_idx2=start_idx2;pep_idx2 < xpeptide_count;pep_idx2++) {
+      
+      XLinkablePeptide& pep2 = linkable_peptides[pep_idx2];
+      carp(CARP_DEBUG, "pep_idx2:%d %d %f %s",
+         pep_idx2,
+         xpeptide_count,
+         linkable_peptides[pep_idx2].getMassConst(MONO),
+         pep2.getModifiedSequenceString().c_str()
+         );
+      FLOAT_T current_mass = pep2.getMassConst(MONO);
+      if (current_mass > pep2_max_mass) {
+	      if (pep_idx2 == start_idx2) {
+	        //done = true;
+	      }
+	      break;
+      }
+      if (current_mass >= pep2_min_mass) {
+        XLINKMATCH_TYPE_T ctype = 
+          XLink::getCrossLinkCandidateType(pep1.getPeptide(), pep2.getPeptide());
+            
+        if ((include_intra && ctype == XLINK_INTRA_CANDIDATE) || 
+            (include_inter_intra && ctype == XLINK_INTER_INTRA_CANDIDATE) ||
+            (include_inter && ctype == XLINK_INTER_CANDIDATE)) {
+		            carp(CARP_DEBUG, "considering %s %s", pep1.getModifiedSequenceString().c_str(), pep2.getModifiedSequenceString().c_str());
+	
+              int mods = pep1.getPeptide()->countModifiedAAs() + pep2.getPeptide()->countModifiedAAs();
+              if (mods <= max_mod_xlink) {
+		            carp(CARP_DEBUG, "considering2 %s %s", pep1.getModifiedSequenceString().c_str(), pep2.getModifiedSequenceString().c_str());
+                num_candidates += addXLinkPeptides(pep1, pep2, candidates);
+              } // if (mods <= max_mod_xlink ..     
+          }
+	      
+        }
+      }
+      if (done) {
+        break;
+      }
+    
+  }
+   
+  carp(CARP_DEBUG, "Done searching");
+//  delete []tested;
+  return(num_candidates);
+}
+  
+
+
+
+/**
+ * \returns the candidate type
+ */
+XLINKMATCH_TYPE_T XLinkPeptide::getCandidateType() {
+
+  return(XLink::getCrossLinkCandidateType(linked_peptides_.at(0).getPeptide(), linked_peptides_.at(1).getPeptide()));
+
+}
+
+/**
+ * \returns the sequence string
+ */
+string XLinkPeptide::getSequenceString() {
+
+  doSort();
+
+  string seq1 = linked_peptides_[0].getModifiedSequenceString();
+  
+  string seq2 = linked_peptides_[1].getModifiedSequenceString();
+
+
+
+
+  //assert(seq1 <= seq2);
+
+  ostringstream oss;
+  oss << seq1 << ", " << 
+    seq2 << " (" <<
+    (getLinkPos(0)+1) << "," <<
+    (getLinkPos(1)+1) << ")";
+
+  string svalue = oss.str();
+
+  return svalue;
+}
+
+string XLinkPeptide::getUnshuffledSequence() {
+  
+  if (is_decoy_) {
+    if (target_ == NULL) {
+      carp(CARP_FATAL, "null target?!?");
+    }
+    return(target_ -> getSequenceString());
+  } else {
+    return (getSequenceString());
+  }
+}
+
+
+/**
+ * \returns the mass of the xlink peptide
+ */
+FLOAT_T XLinkPeptide::calcMass(MASS_TYPE_T mass_type) {
+  return linked_peptides_[0].getMassConst(mass_type) + 
+    linked_peptides_[1].getMassConst(mass_type) + 
+    linker_mass_;
+}
+
+/**
+ * \returns a shuffled xlink peptide
+ */
+
+void XLinkPeptide::shuffle(vector<XLinkMatch*>& decoys) {
+
+  //cerr<<"tt:"<<getSequenceString()<<endl;
+  
+  XLinkablePeptide d1 = linked_peptides_[0].shuffle();
+  XLinkablePeptide d2 = linked_peptides_[1].shuffle();
+
+  XLinkPeptide* decoy_ff = new XLinkPeptide();
+  decoy_ff->linked_peptides_.push_back(d1);
+  decoy_ff->linked_peptides_.push_back(d2);
+  decoy_ff->link_pos_idx_.push_back(link_pos_idx_[0]);
+  decoy_ff->link_pos_idx_.push_back(link_pos_idx_[1]);
+  decoy_ff->is_decoy_ = true;
+  decoy_ff->target_ = this;
+  decoy_ff->setZState(getZState());
+
+  //cerr<<"decoy_ff:"<<decoy_ff->getSequenceString()<<endl;
+  
+  XLinkPeptide* decoy_tf = new XLinkPeptide();
+  decoy_tf->linked_peptides_.push_back(linked_peptides_[0]);
+  decoy_tf->linked_peptides_.push_back(d2);
+  decoy_tf->link_pos_idx_.push_back(link_pos_idx_[0]);
+  decoy_tf->link_pos_idx_.push_back(link_pos_idx_[1]);
+  decoy_tf->is_decoy_ = true;
+  decoy_tf->target_ = this;
+  decoy_tf->setZState(getZState());
+
+  //cerr <<"decoy_tf:"<<decoy_tf->getSequenceString()<<endl;
+  
+  XLinkPeptide* decoy_ft = new XLinkPeptide();
+  decoy_ft->linked_peptides_.push_back(d1);
+  decoy_ft->linked_peptides_.push_back(linked_peptides_[1]);
+  decoy_ft->link_pos_idx_.push_back(link_pos_idx_[0]);
+  decoy_ft->link_pos_idx_.push_back(link_pos_idx_[1]);
+  decoy_ft->is_decoy_ = true;
+  decoy_ft->target_ = this;
+  decoy_ft->setZState(getZState());
+
+  //cerr <<"decoy_ft:"<<decoy_ft->getSequenceString()<<endl;
+  
+  decoys.push_back(decoy_ff);
+  decoys.push_back(decoy_tf);
+  decoys.push_back(decoy_ft);
+}
+
+/**
+ * fills the ion series with the predicted ions for the cross linked candidate
+ */ 
+void XLinkPeptide::predictIons(
+  IonSeries* ion_series,  ///< IonSeries object to fill
+  int charge, ///< charge state of candidate
+  bool first ///< is this the first peptide?
+  ) {
+  carp(CARP_DEBUG, "predictIons:start %i %i", charge, first?1:0);
+
+  MASS_TYPE_T fragment_mass_type = GlobalParams::getFragmentMass();
+
+  if (first) {
+    linked_peptides_[0].predictIons(
+      ion_series, charge, getLinkIdx(0), 
+      linker_mass_ + linked_peptides_[0].getMassConst(fragment_mass_type)); 
+  } else {
+    linked_peptides_[1].predictIons(
+      ion_series, charge, getLinkIdx(1),
+      linker_mass_ + linked_peptides_[1].getMassConst(fragment_mass_type));
+  }
+} 
+
+/**
+ * predicts the ions for xlinked peptide
+ */
+void XLinkPeptide::predictIons(
+  IonSeries* ion_series, ///< IonSeries to fill
+  int charge ///< charge state of the peptide
+  ) {
+
+  MASS_TYPE_T fragment_mass_type = GlobalParams::getFragmentMass();
+  FLOAT_T delta_mass0 =  linked_peptides_[0].getMassConst(fragment_mass_type) + linker_mass_;
+  FLOAT_T delta_mass1 =  linked_peptides_[1].getMassConst(fragment_mass_type) + linker_mass_;
+
+  //predict the ion_series of the first peptide.
+  linked_peptides_[0].predictIons(ion_series, charge, getLinkIdx(0), delta_mass1, true);
+
+  //predict the ion_series of the second peptide.
+  linked_peptides_[1].predictIons(ion_series, charge, getLinkIdx(1), delta_mass0, false);
+}
+
+/**
+ * \returns the sequence from the ion
+ */
+string XLinkPeptide::getIonSequence(
+  Ion* ion ///< pointer to the ion
+  ) {
+
+  int peptide_idx = 0;
+
+  string ion_sequence = ion->getPeptideSequence();
+
+  if (ion_sequence == linked_peptides_[0].getSequence()) {
+    peptide_idx = 0;
+  } else {
+    peptide_idx = 1;
+  }
+
+  unsigned int cleavage_idx = ion->getCleavageIdx();
+
+  bool is_linked = false;
+
+  if (ion->isForwardType()) {
+    is_linked = (cleavage_idx > (unsigned int)getLinkPos(peptide_idx)); 
+  } else {
+    is_linked = (cleavage_idx >= (ion_sequence.length() - getLinkPos(peptide_idx)));
+  }
+
+  string subseq;
+  if (ion->isForwardType()) {
+    subseq = ion_sequence.substr(0, cleavage_idx);
+  } else {
+    subseq = ion_sequence.substr(ion_sequence.length() - cleavage_idx, ion_sequence.length());
+  }
+
+  if (!is_linked) {
+    return subseq;
+  } else {
+    string ans;
+    if (peptide_idx == 0) {
+      const char* seq2 = linked_peptides_[1].getSequence();
+      ans = subseq + string(",") + string(seq2);
+    } else {
+      const char* seq1 = linked_peptides_[0].getSequence();
+      ans = string(seq1) + string(",") + subseq;
+    }
+    return ans;
+  }
+}
+
+/**
+ * \returns the Peptide object for the xlinked peptide
+ */
+Crux::Peptide* XLinkPeptide::getPeptide(
+  int peptide_idx ///< 0 or 1
+  ) {
+  return linked_peptides_[peptide_idx].getPeptide();
+}
+XLinkablePeptide& XLinkPeptide::getXLinkablePeptide(
+  int peptide_idx ///< 0 or 1
+  ) {
+  return linked_peptides_[peptide_idx];
+}
+
+/**
+ * \returns the number of missed cleavages for the cross-linked peptide
+ */
+int XLinkPeptide::getNumMissedCleavages() {
+
+  char missed_cleavage_link_site = 'K';
+  set<int> skip;
+
+  int link1_site = getLinkPos(0);
+  int link2_site = getLinkPos(1);
+  
+  Crux::Peptide* pep1 = linked_peptides_[0].getPeptide();
+  Crux::Peptide* pep2 = linked_peptides_[1].getPeptide();
+  
+  char *seq1 = pep1->getSequencePointer();
+  char *seq2 = pep2->getSequencePointer();
+
+  if (seq1[link1_site] == missed_cleavage_link_site) {
+    skip.insert(link1_site);
+  }
+
+  int missed1 = pep1->getMissedCleavageSites(skip);
+  
+  skip.clear();
+
+  if (seq2[link2_site] == missed_cleavage_link_site) {
+    skip.insert(link2_site);
+  }
+  
+  int missed2 = pep2->getMissedCleavageSites(skip);
+
+  return max(missed1, missed2);
+
+}
+
+/**
+ *\returns whether the cross-linked peptide is modified
+ */
+bool XLinkPeptide::isModified() {
+
+  return linked_peptides_[0].isModified() || linked_peptides_[1].isModified();
+}
+
+/**
+ *\returns the protein id string for the xlinked peptide
+ */
+string XLinkPeptide::getProteinIdString() {
+
+  doSort();
+
+  ostringstream oss;
+
+  Crux::Peptide* peptide = this -> getPeptide(0);
+  if (peptide == NULL) {
+    carp(CARP_FATAL, "XLinkPeptide : Null first peptide!");
+  }
+  
+  vector<string> prot1 = peptide -> getProteinIds();
+  string prefix = "";
+  if (linked_peptides_[0].isDecoy()) {
+    prefix = Params::GetString("decoy-prefix");
+  }
+  
+  oss << prefix << prot1[0];
+  for (size_t idx = 1 ; idx < prot1.size() ; idx++) {
+    oss << "," << prefix << prot1[idx];
+  }
+  oss << ";";
+
+  peptide = this -> getPeptide(1);
+
+  if (peptide == NULL) {
+    carp(CARP_FATAL, "XLinkPeptide : Null second peptide!");
+  }
+  vector<string> prot2 = peptide -> getProteinIds();
+  prefix = "";
+  if (linked_peptides_[1].isDecoy()) {
+    prefix = Params::GetString("decoy-prefix");
+  }
+  oss << prefix << prot2[0];
+  for (size_t idx = 1;idx < prot2.size() ; idx++) {
+    oss << "," << prefix << prot2[idx];
+  }
+
+  return oss.str();
+}
+
+/**
+ * \returns the protein id strings where the (X) is the position
+ * within the protein
+ */
+string XLinkPeptide::getProteinIdsXLocations(
+  int idx ///< peptide index (0 or 1)
+  ) {
+
+  Crux::Peptide* peptide = this ->getPeptide(idx);
+
+  ostringstream oss;
+
+  set<string> xlocations;
+
+  int link_pos = getLinkPos(idx);
+
+  for (PeptideSrcIterator iter = peptide->getPeptideSrcBegin();
+    iter != peptide->getPeptideSrcEnd();
+    ++iter) {
+    PeptideSrc* peptide_src = *iter;
+    Crux::Protein* protein = peptide_src->getParentProtein();
+    string protein_id = protein->getIdPointer();
+    int peptide_loc = peptide_src->getStartIdx();
+    ostringstream protein_loc_stream;
+    protein_loc_stream << protein_id << "(" << (peptide_loc + link_pos) << ")";
+    xlocations.insert(protein_loc_stream.str());
+  }
+
+  set<string>::iterator result_iter = xlocations.begin();
+  string result_string = *result_iter;
+
+  while (++result_iter != xlocations.end()) {
+    result_string += "," + *result_iter;
+  }
+
+  return result_string;
+}
+
+/**
+ * \returns the protein id string where the (X)s are the positions in
+ * the proteins
+ */
+string XLinkPeptide::getProteinIdXString() {
+  doSort();
+
+  ostringstream oss;
+
+  oss << getProteinIdsXLocations(0);
+  oss << ";";
+  oss << getProteinIdsXLocations(1);
+  return oss.str();
+
+}
+
+/**
+ * \returns the flanking amino acids for both peptides, separated by ;
+ */
+string XLinkPeptide::getFlankingAAString() {
+
+  doSort();
+
+  ostringstream oss;
+
+  Crux::Peptide* peptide = this -> getPeptide(0);
+  
+  if (peptide == NULL) {
+    carp(CARP_FATAL, "XLinkPeptide::getFlankingAAString() : Null first peptide!");
+  } else {
+
+    char* flanking_aas = peptide->getFlankingAAs();
+    oss << flanking_aas;
+    std::free(flanking_aas);
+  }
+
+  oss << ";";
+
+  peptide = this->getPeptide(1);
+
+  if (peptide == NULL) {
+    carp(CARP_FATAL, "XLinkPeptide::getFlankingAAString() : Null second peptide!");
+  } else {
+
+    char* flanking_aas = peptide->getFlankingAAs();
+    oss << flanking_aas;
+    std::free(flanking_aas);
+  }
+  
+  return oss.str();
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/xlink/XLinkPeptide.h b/src/app/xlink/XLinkPeptide.h
new file mode 100644
index 0000000..4ecee3e
--- /dev/null
+++ b/src/app/xlink/XLinkPeptide.h
@@ -0,0 +1,252 @@
+/**
+ * \file XLinkPeptide.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 18 September 2014
+ * \brief Object for Defining a crosslinked peptide in an xlink search
+ *****************************************************************************/
+#ifndef XLINKPEPTIDE_H_
+#define XLINKPEPTIDE_H_
+
+#include "model/objects.h"
+#include "util/utils.h"
+
+#include "XLinkMatch.h"
+#include "XLinkBondMap.h"
+#include "XLinkablePeptide.h"
+
+
+#include <set>
+#include <vector>
+
+class XLinkPeptide : public XLinkMatch {
+ protected:
+  static FLOAT_T linker_mass_; ///< contains the link mass
+  static std::set<Crux::Peptide*> allocated_peptides_; ///< tracks the peptides that have been allocated during the candidate finding step
+  std::vector<XLinkablePeptide> linked_peptides_; ///< contains the two peptides in the match
+  std::vector<int> link_pos_idx_; ///< contains the link positions for the two peptides
+  
+  XLinkPeptide* target_;
+  
+  static FLOAT_T pmin_;  ///< contains the minimum mass that a peptide from a crosslink product can take
+  static bool pmin_set_; ///< has the pmin been set?
+  /**
+   * \returns the link position within each peptide
+   */
+  int getLinkPos(
+    int peptide_idx ///< 0 - first peptide, 1 - second peptide
+  );
+ 
+  /*
+   * Iterates through all linkable sites and adds valid xlink peptide candidates
+   * \returns the number of candidates added.
+   */
+  static int addXLinkPeptides(
+    XLinkablePeptide& pep1, ///< First linkable peptide
+    XLinkablePeptide& pep2, ///< Second linkable peptide
+    XLinkMatchCollection& candidates ///< XLinkable Candidates -out
+  );
+
+  virtual bool isDecoy();
+
+ public:
+  
+  /**
+   * Default Constructor
+   */
+  XLinkPeptide();
+  
+  /**
+   * Constructor using two linkable peptide objects and locations
+   */
+  XLinkPeptide(
+    XLinkablePeptide& peptideA, ///< 1st peptide
+    XLinkablePeptide& peptideB, ///< 2nd peptide
+    int posA, ///< link pos1
+    int posB  ///<link pos2
+    );
+  
+  /**
+   * Constructor for using two string peptides and locations
+   */
+  XLinkPeptide(
+    char* peptideA, ///< sequence of peptide1
+    char* peptideB, ///< sequence of peptide2
+    int posA, ///< position of crosslink in peptide1
+    int posB ///< position of crosslink in peptide2
+    );
+
+  /**
+   * Destructor
+   */
+  virtual ~XLinkPeptide() {}
+
+  /**
+   * makes sure that sequence1 is smaller in alphanumeric value than
+   * sequence 2
+   */
+  void doSort();
+
+  int getLinkIdx(
+    int peptide_idx ///< 0 - first peptide, 1 -second peptide
+  );
+
+  
+  
+  /**
+   * \returns whether the cross-link is from peptides from two different
+   * proteins
+   */
+  bool isInter();
+  
+  /**
+   * \returns whether the cross-link is from peptides within the same protein
+   */
+  bool isIntra();
+
+  /**
+   * \returns whether the cross-link is from peptides that are both within the same protein and can be from different proteins
+   */
+  bool isInterIntra();
+
+
+
+  /**
+   * sets the static linker mass variable
+   */
+  static void setLinkerMass(
+    FLOAT_T linker_mass ///< linker mass
+  );
+  
+  /**
+   * \returns the linker mass from the static variable
+   */
+  static FLOAT_T getLinkerMass();
+
+  /**
+   * adds crosslink candidates to the XLinkMatchCollection using
+   * the passed in iterator for the 1st peptide
+   */
+  static int addCandidates(
+    FLOAT_T min_mass, ///< min mass of crosslinks
+    FLOAT_T max_mass, ///< max mass of crosslinks
+    vector<XLinkablePeptide>&, ///< 1st peptide iterator
+    XLinkMatchCollection& candidates ///< candidates in/out
+    );
+
+  /**
+   * adds crosslink candidates by iterating through all possible masses
+   */
+  static int addCandidates(
+			    Crux::Spectrum* spectrum,
+			    FLOAT_T precursor_mass,
+			    int precursor_charge,
+    FLOAT_T min_mass, ///< min mass of crosslinks
+    FLOAT_T max_mass, ///< max mass of crosslinks
+			    bool decoy,
+    XLinkMatchCollection& candidates ///< candidates -in/out
+    );
+
+  /**
+   * \returns the candidate type
+   */
+  virtual XLINKMATCH_TYPE_T getCandidateType();
+  
+  /**
+   * \returns the sequence string
+   */
+  virtual std::string getSequenceString();
+  
+  virtual std::string getUnshuffledSequence();
+  
+  /**
+   * \returns the mass of the xlink peptide
+   */
+  virtual FLOAT_T calcMass(
+    MASS_TYPE_T mass_type ///< MONO or AVERAGE
+  );
+
+  /**
+   * \returns a shuffled xlink peptide
+   */
+  virtual void shuffle(
+    std::vector<XLinkMatch*>& decoys
+  );
+
+  /**
+   * fills the ion series with the predicted ions for the cross linked candidate
+   */ 
+  virtual void predictIons(
+    IonSeries* ion_series, ///< IonSeries object to fill
+    int charge ///< charge state of the candidate 
+  );
+
+  /**
+   * predicts the ions for xlinked peptide
+   */
+  void predictIons(
+    IonSeries* ion_series, ///< IonSeries to fill
+    int charge, ///< charge state of the peptide
+    bool first ///< is this the first peptide?
+    );
+  
+  /**
+  * \returns the sequence from the ion
+  */
+  std::string getIonSequence(
+    Ion* ion ///< pointer to the ion object
+  );
+  
+  /**
+   * \returns the Peptide object for the xlinked peptide
+   */
+  virtual Crux::Peptide* getPeptide(
+    int peptide_idx ///< 0 or 1
+  );
+
+  XLinkablePeptide& getXLinkablePeptide(
+    int peptide_idx ///<0 or 1
+  );
+  /**
+   * \returns the number of missed cleavages for the cross-linked peptide
+   */
+  virtual int getNumMissedCleavages();
+
+  /**
+   *\returns whether the cross-linked peptide is modified
+   */
+  virtual bool isModified();
+
+  /**
+   *\returns the protein id string for the xlinked peptide
+   */
+  virtual std::string getProteinIdString();
+  
+  /**
+   * \returns the protein id strings where the (X) is the position
+   * within the protein
+   */
+  virtual std::string getProteinIdsXLocations(
+  int idx ///< peptide index (0 or 1)
+  );
+  
+  /**
+   * \returns the protein id string where the (X)s are the positions in
+   * the proteins
+   */
+  virtual std::string getProteinIdXString();
+  
+  /**
+   * \returns the flanking amino acids for both peptides, separated by ;
+   */
+  virtual std::string getFlankingAAString();
+
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/xlink/XLinkScorer.cpp b/src/app/xlink/XLinkScorer.cpp
new file mode 100644
index 0000000..fed5405
--- /dev/null
+++ b/src/app/xlink/XLinkScorer.cpp
@@ -0,0 +1,209 @@
+/**
+ * \file XLinkScorer.cpp
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 18 September December 2014
+ * \brief Object for scoring xlink products.  Tries to optimize the scoring time
+ *****************************************************************************/
+
+#include "XLinkScorer.h"
+#include "model/Scorer.h"
+#include "model/Ion.h"
+#include "model/IonSeries.h"
+#include "util/Params.h"
+#include "XLinkPeptide.h"
+#include "util/GlobalParams.h"
+
+
+#include <iostream>
+
+using namespace std;
+
+/**
+ * initializes the object with the spectrum
+ * charge and appropriate objects
+ */
+void XLinkScorer::init(
+  Crux::Spectrum* spectrum, ///< spectrum to score
+  int charge, ///< charge state
+  bool compute_sp ///< are we scoring sp?
+  ) {
+
+  scorer_xcorr_ = new Scorer(XCORR);
+  scorer_sp_ = new Scorer(SP);
+  spectrum_ = spectrum;
+  charge_ = charge;
+  compute_sp_ = compute_sp;
+
+  if ((spectrum_ != NULL) && (charge_ > 0)) {
+
+    ion_constraint_xcorr_ = 
+      IonConstraint::newIonConstraintSmart(XCORR, charge_);
+
+    ion_constraint_sp_ =
+      IonConstraint::newIonConstraintSmart(SP, charge_);
+
+    ion_series_xcorr_ = 
+      new IonSeries(ion_constraint_xcorr_, charge_);
+
+    ion_series_sp_ =
+      new IonSeries(ion_constraint_sp_, charge_);
+  } else {
+
+    ion_constraint_xcorr_ = NULL;
+    ion_constraint_sp_ = NULL;
+    ion_series_xcorr_ = NULL;
+    ion_series_sp_ = NULL;
+  }
+}
+
+IonConstraint* XLinkScorer::getIonConstraintXCorr() {
+  return ion_constraint_xcorr_;
+}
+
+
+
+
+/**
+ * default constructor
+ */
+XLinkScorer::XLinkScorer() {
+
+  init(NULL, 0, Params::GetBool("compute-sp"));
+}
+
+/**
+ * Constructor for spectrum and charge
+ */
+XLinkScorer::XLinkScorer(
+  Crux::Spectrum* spectrum, ///< spectrum to score
+  int charge ///< charge state
+  ) {
+
+  init(spectrum, charge, Params::GetBool("compute-sp"));
+}
+
+/**
+ * Constructor for spectrum, charge, and sp
+ */
+XLinkScorer::XLinkScorer(
+  Crux::Spectrum* spectrum, ///<spectrum to score
+  int charge,  ///< charge state
+  bool compute_sp ///< computing sp as well?
+  ) {
+
+  init(spectrum, charge, compute_sp);
+}
+
+/**
+ * Destructor
+ */
+XLinkScorer::~XLinkScorer() {
+  //carp(CARP_INFO, "XLinkScorer::~XLinkScorer()");
+  delete ion_series_xcorr_;
+  delete ion_series_sp_;
+  delete ion_constraint_xcorr_;
+  delete ion_constraint_sp_;
+  delete scorer_xcorr_;
+  delete scorer_sp_;
+  
+}
+
+/**
+ * \returns the xcorr score for the candidate and sets the sp if requested
+ */
+FLOAT_T XLinkScorer::scoreCandidate(
+  XLinkMatch* candidate ///< candidate to score
+  ) {
+
+  if (compute_sp_) {
+
+    candidate->predictIons(ion_series_sp_, charge_);
+    FLOAT_T sp = scorer_sp_->scoreSpectrumVIonSeries(spectrum_, ion_series_sp_);
+    
+    candidate->setScore(SP, sp);
+    candidate->setScore(BY_IONS_MATCHED, scorer_sp_->getSpBYIonMatched());
+    candidate->setScore(BY_IONS_TOTAL, scorer_sp_->getSpBYIonPossible());
+
+  }
+  FLOAT_T xcorr = 0;
+  if (GlobalParams::getXLinkTopN() != 0 &&
+      (candidate->getCandidateType() == XLINK_INTER_CANDIDATE ||
+       candidate->getCandidateType() == XLINK_INTRA_CANDIDATE ||
+       candidate->getCandidateType() == XLINK_INTER_INTRA_CANDIDATE
+       )) {
+        
+    XLinkPeptide* xpep = (XLinkPeptide*)candidate;
+    XLinkablePeptide& xpep1 = xpep->getXLinkablePeptide(0);
+    XLinkablePeptide& xpep2 = xpep->getXLinkablePeptide(1);
+    FLOAT_T link_mass = XLinkPeptide::getLinkerMass();
+    FLOAT_T mod_mass1 = xpep1.getMassConst(GlobalParams::getIsotopicMass()) + link_mass;
+    FLOAT_T mod_mass2 = xpep2.getMassConst(GlobalParams::getIsotopicMass()) + link_mass;
+    size_t link_idx1 = xpep->getLinkIdx(0);
+    size_t link_idx2 = xpep->getLinkIdx(1);
+    
+    FLOAT_T xcorr1;
+    if (!xpep1.hasXCorr()) {    
+      xcorr1 = scoreXLinkablePeptide(xpep1, link_idx1, mod_mass2);
+      xpep1.setXCorr(link_idx1, xcorr1);
+    } else {
+      xcorr1 = xpep1.getXCorr();
+    }
+    
+    FLOAT_T xcorr2;
+    if (!xpep2.hasXCorr()) {
+      xcorr2 = scoreXLinkablePeptide(xpep2, link_idx2, mod_mass1);
+      xpep2.setXCorr(link_idx2, xcorr2);
+    } else {
+      xcorr2 = xpep2.getXCorr();
+    }
+        
+    xcorr = xcorr1+xcorr2;
+    candidate->setScore(XCORR, xcorr);
+  } else {
+    candidate->predictIons(ion_series_xcorr_, charge_);
+    xcorr = scorer_xcorr_->scoreSpectrumVIonSeries(spectrum_, ion_series_xcorr_);
+    candidate->setScore(XCORR, xcorr);
+  }
+  
+  
+/*
+  if (candidate->getCandidateType() == XLINK_INTER_CANDIDATE || candidate->getCandidateType() == XLINK_INTRA_CANDIDATE) {
+    carp(CARP_DEBUG, "Scoring xlink peptides individually");
+    XLinkPeptide* xlink_match = (XLinkPeptide*)candidate;
+    carp(CARP_DEBUG, "ions first");
+    xlink_match->predictIons(ion_series_xcorr_, charge_, true);
+    carp(CARP_DEBUG, "scoring first");
+    FLOAT_T xcorr1 = scorer_xcorr_->scoreSpectrumVIonSeries(spectrum_, ion_series_xcorr_);
+    carp(CARP_DEBUG, "first:%f", xcorr1);
+    xlink_match->predictIons(ion_series_xcorr_, charge_, false);
+    carp(CARP_DEBUG, "scoring second");
+    FLOAT_T xcorr2 = scorer_xcorr_->scoreSpectrumVIonSeries(spectrum_, ion_series_xcorr_); 
+    carp(CARP_DEBUG, "second:%f", xcorr2); 
+    candidate->setScore(XCORR_FIRST, xcorr1);
+    candidate->setScore(XCORR_SECOND, xcorr2);
+  } else {
+
+    candidate->setScore(XCORR_FIRST, xcorr);
+    candidate->setScore(XCORR_SECOND, xcorr);
+  }
+  */
+  return xcorr;
+}
+
+FLOAT_T XLinkScorer::scoreXLinkablePeptide(
+  XLinkablePeptide& xlpeptide,
+  int link_idx,
+  FLOAT_T mod_mass) {
+
+  xlpeptide.predictIons(ion_series_xcorr_, charge_, link_idx, mod_mass);
+  FLOAT_T xcorr = scorer_xcorr_->scoreSpectrumVIonSeries(spectrum_, ion_series_xcorr_);
+  return xcorr;
+
+}
+
+/*                                                                                                                                                                                                                          
+ * Local Variables:                                                                                                                                                                                                         
+ * mode: c                                                                                                                                                                                                                  
+ * c-basic-offset: 2                                                                                                                                                                                                        
+ * End:                                                                                                                                                                                                                     
+ */
diff --git a/src/app/xlink/XLinkScorer.h b/src/app/xlink/XLinkScorer.h
new file mode 100644
index 0000000..ff2f34d
--- /dev/null
+++ b/src/app/xlink/XLinkScorer.h
@@ -0,0 +1,87 @@
+/**
+ * \file XLinkScorer.h
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 18 September December 2014
+ * \brief Object for scoring xlink products.  Tries to optimize the scoring time
+ *****************************************************************************/
+
+#ifndef XLINKSCORER_H_
+#define XLINKSCORER_H_
+#include "model/objects.h"
+#include "XLinkMatch.h"
+
+class XLinkScorer {
+ protected:
+  Crux::Spectrum* spectrum_; ///< spectrum object
+  Scorer* scorer_xcorr_; ///< xcorr scorer object
+  Scorer* scorer_sp_; ///< sp scorer object
+  IonConstraint* ion_constraint_xcorr_; ///< xcorr constraint
+  IonConstraint* ion_constraint_sp_; ///< sp constraint
+  XLinkMatch* candidate_; ///< current candidate
+  int charge_; ///< current charege
+  IonSeries* ion_series_xcorr_; ///< current ion series xcorr
+  IonSeries* ion_series_sp_; ///< current ion series sp
+  bool compute_sp_; ///< calculate sp score
+ 
+  /**
+   * initializes the object with the spectrum
+   * charge and appropriate objects
+   */
+  void init(
+    Crux::Spectrum* spectrum, ///< spectrum to score
+    int charge, ///< charge state
+    bool compute_sp ///< are we scoring sp?
+    );
+
+ public:
+  /**
+   * default constructor
+   */
+  XLinkScorer();
+
+  /**
+   * Constructor for spectrum and charge
+   */
+  XLinkScorer(
+    Crux::Spectrum* spectrum, ///< spectrum to score
+    int charge ///< charge state
+    );
+  
+  /**
+   * Constructor that allows compute sp to be set
+   */
+  XLinkScorer(
+    Crux::Spectrum* spectrum, ///spectrum to score
+    int charge, ///< charge state
+    bool compute_sp ///< scoring sp?
+    );
+
+  /**
+   * destructor, free up the objects
+   */
+  virtual ~XLinkScorer();
+
+  /**
+   * \returns the xcorr score and sets the xcorr and sp scores to the match
+   */
+  FLOAT_T scoreCandidate(XLinkMatch* candidate);
+
+  FLOAT_T scoreXLinkablePeptide(
+    XLinkablePeptide& xlpeptide, 
+    int link_idx, 
+    FLOAT_T mod_mass
+  );
+  
+  IonConstraint* getIonConstraintXCorr();
+  
+
+};
+
+
+#endif
+/*                                                                                                                                                                                                                          
+ * Local Variables:                                                                                                                                                                                                         
+ * mode: c                                                                                                                                                                                                                  
+ * c-basic-offset: 2                                                                                                                                                                                                        
+ * End:                                                                                                                                                                                                                     
+ */
diff --git a/src/app/xlink/XLinkSite.cpp b/src/app/xlink/XLinkSite.cpp
new file mode 100644
index 0000000..aef2828
--- /dev/null
+++ b/src/app/xlink/XLinkSite.cpp
@@ -0,0 +1,175 @@
+/*************************************************************************
+ * \file XLinkSite.cpp
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE:  Febuary 22, 2011
+ * \brief  Object for representing cross-linkable site on a peptide.
+ ****************************************************************************/
+
+#include "XLinkSite.h"
+
+using namespace std;
+using namespace Crux;
+
+/**
+ * Default constructor
+ */
+XLinkSite::XLinkSite() {
+  type_ = XLINKSITE_UNKNOWN;
+  aa_ = 0;
+}
+
+/**
+ * Constructor that determines the type from the supplied site string 
+ */
+XLinkSite::XLinkSite(
+  string& site_string ///<string describing the cross-linkable site
+  ) {
+
+  if (site_string == "cterm") {
+
+    type_ = XLINKSITE_CTERM;
+
+  } else if (site_string == "nterm") {
+
+    type_ = XLINKSITE_NTERM;
+
+  } else if (site_string == "*") {
+
+    type_ = XLINKSITE_ALL;
+
+  } else if (site_string.length() == 1) {
+
+    type_ = XLINKSITE_AA;
+    aa_ = site_string[0];
+
+  } else {
+
+    carp(CARP_FATAL, "Unknown link site:%s", site_string.c_str());
+  }
+}
+
+/**
+ * Default destructor
+ */
+XLinkSite::~XLinkSite() {
+}
+
+/**
+ * \returns whether the peptide contains this site at the supplied sequence index.
+ */
+bool XLinkSite::hasSite(
+  Peptide* peptide, ///<peptide object pointer 
+  int idx             ///<sequence index
+  ) const {
+  
+  switch (type_) {
+    case XLINKSITE_CTERM:
+      
+      if (idx == peptide->getLength() - 1) {
+        //cerr <<"Cterm peptide:"<<peptide->getSequence()<<" "<<idx<<":"<<(int)peptide->getLength()<<endl;
+        vector<PeptideSrc*>& srcs = peptide->getPeptideSrcVector();
+        for (size_t idx2 = 0 ; idx2 < srcs.size() ; idx2++ ) {
+          int start_idx = srcs[idx2]->getStartIdx();
+          //cerr << "start:"<<start_idx<<" "<<(start_idx+idx)<<" "<<srcs[idx2]->getParentProtein()->getLength()<<endl;
+
+
+          if ((idx + start_idx) >= srcs[idx2]->getParentProtein()->getLength()) {
+            return true;
+          }
+        }
+      }
+      return false;
+      break;
+    case XLINKSITE_NTERM:
+      if (idx == 0) {
+        vector<PeptideSrc*>& srcs = peptide->getPeptideSrcVector();
+        for (size_t idx = 0; idx < srcs.size(); idx++ ) {
+          if (srcs[idx]->getStartIdx() == 1) {
+            return true;
+          }
+        }
+      }
+      return false;
+      break;
+    case XLINKSITE_ALL:
+      return true;
+      break;
+    case XLINKSITE_AA:
+      return peptide->getSequencePointer()[idx] == aa_;
+      break;
+    case XLINKSITE_UNKNOWN:
+    default:
+      carp(CARP_FATAL, "Xlink site not set!");
+  }
+  return false;
+}
+
+bool XLinkSite::hasSite(
+  string& protein_sequence,
+  int idx) const {
+
+  switch(type_) {
+    case XLINKSITE_CTERM:
+      return idx == protein_sequence.length() - 1;
+    case XLINKSITE_NTERM:
+      return idx == 0;
+      break;
+    case XLINKSITE_ALL:
+      return true;
+      break;
+    case XLINKSITE_AA:
+      return protein_sequence.at(idx) == aa_;
+      break;
+    case XLINKSITE_UNKNOWN:
+    default:
+      carp(CARP_FATAL, "XLink site not set!");
+  }
+  return false;
+}
+
+/**
+ * \returns whether this xlinksite is equal to the passed in xlinksite
+ */
+bool XLinkSite::operator == (
+  XLinkSite& xlink_site_obj ///<XLinkSite to compare to
+  ) {
+
+  XLinkSite site1 = *this;
+  XLinkSite site2 = xlink_site_obj;
+
+  if (site1.type_ == site2.type_) {
+    if (site1.type_ == XLINKSITE_AA) {
+      return site1.aa_ == site2.aa_;
+    }
+    return true;
+  } else {
+    return false;
+  }
+}
+
+/**
+ * \returns whether this xlinksite is less than the passed in xlinksite
+ */
+bool XLinkSite::operator < (
+    const XLinkSite& xlink_site_obj ///<XLinkSite to compare to
+  ) const {
+
+  XLinkSite site1 = *this;
+  XLinkSite site2 = xlink_site_obj;
+
+  if (site1.type_ == site2.type_) {
+    if (site1.type_ == XLINKSITE_AA) {
+      return site1.aa_ < site2.aa_;
+    }
+    return false;
+  } else {
+    return site1.type_ < site2.type_;
+  }
+}
+
+/*                                                                                                                                                                                                                          
+ * Local Variables:                                                                                                                                                                                                         
+ * mode: c                                                                                                                                                                                                                  
+ * c-basic-offset: 2                                                                                                                                                                                                        
+ * End:                                                                                                                                                                                                                     
+ */
diff --git a/src/app/xlink/XLinkSite.h b/src/app/xlink/XLinkSite.h
new file mode 100644
index 0000000..d14decb
--- /dev/null
+++ b/src/app/xlink/XLinkSite.h
@@ -0,0 +1,79 @@
+/**
+ * \file XLinkSite.h
+ * $Revision: 1.00 $
+ * \brief Object for representing a cross-linkable site on a peptide.
+ *********************************************************************/
+#ifndef XLINKSITE_H
+#define XLINKSITE_H
+
+#include <string>
+
+#include "model/Peptide.h"
+
+/**
+ * \class XLinkSite
+ * \brief object respresneting a cross-linkable site on a peptide.
+ */
+class XLinkSite {
+
+ protected:
+  XLINK_SITE_T type_; ///<The type of the cross-link
+  char aa_;           ///<Amino acid type (for XLINKSITE_AA types).
+ 
+ public:
+
+  /**
+   * Default constructor
+   */
+  XLinkSite();
+
+  /**
+   * Default destructor
+   */
+  virtual ~XLinkSite();
+
+  /**
+   * Constructor that determines the type from the supplied site string 
+   */
+  XLinkSite(
+    std::string& site_string ///<string desscribing the cross-linkable site
+    );
+
+  /**
+   * \returns whether the peptide contains this site at the supplied sequence index.
+   */
+  bool hasSite(
+    Crux::Peptide* peptide, ///<peptide object pointer 
+    int idx             ///<sequence index
+    ) const;
+
+
+  bool hasSite(
+    std::string& protein_sequence,
+    int idx
+  ) const;
+    
+  /**
+   * \returns whether this xlinksite is equal to the passed in xlinksite
+   */
+  bool operator == (
+    XLinkSite& xlink_site_obj ///<XLinkSite to compare to
+    );
+
+  /**
+   * \returns whether this xlinksite is less than the passed in xlinksite
+   */
+  bool operator < (
+    const XLinkSite& xlink_site_obj ///<XLinkSite to compare to
+    ) const;
+
+};
+
+#endif
+/*                                                                                                                                                                                                                          
+ * Local Variables:                                                                                                                                                                                                         
+ * mode: c                                                                                                                                                                                                                  
+ * c-basic-offset: 2                                                                                                                                                                                                        
+ * End:                                                                                                                                                                                                                     
+ */
+
diff --git a/src/app/xlink/XLinkablePeptide.cpp b/src/app/xlink/XLinkablePeptide.cpp
new file mode 100644
index 0000000..6457790
--- /dev/null
+++ b/src/app/xlink/XLinkablePeptide.cpp
@@ -0,0 +1,742 @@
+/*************************************************************************
+ * \file XLinkablePeptide.cpp
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE:  Febuary 22, 2011
+ * \brief  Object for finding and defining the link sites on a peptide.
+ ****************************************************************************/
+#include "XLinkablePeptide.h"
+
+#include "XLinkIonSeriesCache.h"
+
+#include "model/objects.h"
+#include "util/modifications.h"
+#include "util/Params.h"
+#include "util/GlobalParams.h"
+#include "model/Ion.h"
+#include "model/IonSeries.h"
+
+#include <iostream>
+
+#include "XLink.h"
+
+using namespace std;
+using namespace Crux;
+
+/**
+ * Initialize object
+ */
+void XLinkablePeptide::init() {
+  peptide_ = NULL;
+  sequence_ = NULL;
+  is_decoy_ = false;
+  link_sites_.clear();
+  xcorr_link_idx_ = -1;
+  predict_ions_call_count_ = 0;
+  index_ = -1;
+  mod_seq_ = NULL;
+}
+
+/**
+ * Default constructor
+ */
+XLinkablePeptide::XLinkablePeptide() {
+  init();
+}
+
+/**
+ *  Constructor that defines the peptide as a sequence string
+ */
+XLinkablePeptide::XLinkablePeptide(
+  char* sequence ///< the peptide sequence
+  ) {
+  init();
+  sequence_ = sequence;
+  peptide_ = NULL;
+  is_decoy_ = false;
+}
+
+XLinkablePeptide::XLinkablePeptide(
+  const XLinkablePeptide& xlinkablepeptide
+  ) {
+  init();
+  peptide_ = xlinkablepeptide.peptide_->copyPtr();
+  is_decoy_ = xlinkablepeptide.is_decoy_;
+  link_sites_ = xlinkablepeptide.link_sites_;
+  xcorr_link_idx_ = xlinkablepeptide.xcorr_link_idx_;
+  xcorr_ = xlinkablepeptide.xcorr_;
+  index_ = xlinkablepeptide.index_;
+  for (size_t idx=0;idx<NUMBER_MASS_TYPES;idx++) {
+    if (xlinkablepeptide.mass_calculated_[idx]) {
+      mass_[idx] = xlinkablepeptide.mass_[idx];
+      mass_calculated_[idx] = true;
+    } else {
+      mass_calculated_[idx] = false;
+    }
+  }
+}
+
+XLinkablePeptide::XLinkablePeptide(
+  XLinkablePeptide& xlinkablepeptide
+) {
+  init();
+  peptide_ = xlinkablepeptide.peptide_->copyPtr();
+  is_decoy_ = xlinkablepeptide.is_decoy_;
+  link_sites_ = xlinkablepeptide.link_sites_;
+  xcorr_link_idx_ = xlinkablepeptide.xcorr_link_idx_;
+  xcorr_ = xlinkablepeptide.xcorr_;
+  index_ = xlinkablepeptide.index_;
+    for (size_t idx=0;idx<NUMBER_MASS_TYPES;idx++) {
+    if (xlinkablepeptide.mass_calculated_[idx]) {
+      mass_[idx] = xlinkablepeptide.mass_[idx];
+      mass_calculated_[idx] = true;
+    } else {
+      mass_calculated_[idx] = false;
+    }
+  }  
+
+
+}
+
+/**
+ * Constructor that defines the peptide and the linking sites
+ */
+XLinkablePeptide::XLinkablePeptide(
+  Peptide* peptide, ///< the peptide object 
+  vector<int>& link_sites ///< the linking sites
+  ) {
+  init();
+  peptide_ = peptide->copyPtr();
+
+  for (unsigned int idx = 0; idx < link_sites.size(); idx++) {
+    addLinkSite(link_sites[idx]);
+  }
+  is_decoy_ = false;
+}
+
+/**
+ * Constructor that generates the possible linking sites
+ * on the peptide using the bondmap object
+ */
+XLinkablePeptide::XLinkablePeptide(
+  Peptide* peptide, ///< the peptide object 
+  XLinkBondMap& bondmap, ///< the bond map
+  int additional_cleavages
+  ) {
+  init();
+  peptide_ = peptide->copyPtr();
+  findLinkSites(peptide_, bondmap, link_sites_, additional_cleavages);
+}
+
+XLinkablePeptide::~XLinkablePeptide() {
+  //cerr <<"XLinkablePeptide::~XLinkablePeptide"<<endl;
+  if (mod_seq_ != NULL) {
+    freeModSeq(mod_seq_);
+  }
+}
+
+
+/**
+ * \returns whether a link at this index in the sequence
+ * would prevent cleavage
+ */
+bool XLinkablePeptide::linkSeqPreventsCleavage(
+  int seq_idx) {
+
+  return linkSeqPreventsCleavage(peptide_, seq_idx);
+}
+
+bool XLinkablePeptide::linkSeqPreventsCleavage(
+  Peptide* peptide,
+  int seq_idx
+  ) {
+
+  if (seq_idx >= 0 && seq_idx < peptide->getLength()) {
+ 
+    if (isCleavageSite(peptide, seq_idx)) {
+
+      char aa = peptide->getSequencePointer()[seq_idx];
+
+      const string& xlink_prevents_cleavage = GlobalParams::getXLinkPreventsCleavage();
+      for (string::const_iterator i = xlink_prevents_cleavage.begin();
+           i != xlink_prevents_cleavage.end();
+           i++) {
+        if (*i == '*' || *i == aa) {
+          return true;
+        }
+      }
+    }
+  }
+  return false;
+}
+
+/**
+ * \returns whether the link site prevents enzymatic
+ * cleavage
+ */
+bool XLinkablePeptide::linkSitePreventsCleavage(
+  size_t link_site_idx
+  ) {
+
+  if (link_site_idx >= numLinkSites()) {
+    return false;
+  }
+
+  return linkSeqPreventsCleavage(getLinkSite(link_site_idx));
+}
+
+
+bool XLinkablePeptide::isMissedCleavageSite(
+  Peptide* peptide,
+  int seq_idx) {
+
+  if (seq_idx == peptide->getLength()-1) {
+    return false;
+  }
+  return isCleavageSite(peptide, seq_idx);
+}
+  
+/**
+ * \returns whether the peptide is cleavable at this index
+ */
+bool XLinkablePeptide::isCleavageSite(
+  Peptide* peptide, ///< the peptide
+  int seq_idx ///< the sequence index
+  ) {
+
+  //TODO - make this work for every enzyme
+  if (seq_idx > peptide->getLength()-1) {
+    return false;
+  }
+
+  char* sequence = peptide->getSequencePointer();
+
+  if (sequence[seq_idx] == 'K' || sequence[seq_idx] == 'R') {
+    if (seq_idx == peptide->getLength()-1) {
+      return true;
+    } else {
+      return sequence[seq_idx+1] != 'P';
+    }
+  } else {
+    return false;
+  }
+  
+}
+
+/**
+ * given a peptide and a XLinkBondMap object,
+ * generate the possible link sites
+ */
+void XLinkablePeptide::findLinkSites(
+  Peptide* peptide,  ///< the peptide object -in
+  XLinkBondMap& bondmap,  ///< the bond map -in 
+  vector<int>& link_sites, ///< the found link sites -out
+  int additional_cleavages ///< 0 for xlink, 1 for self-loops
+  ) {
+
+  int missed_cleavages = getMissedCleavageSites(peptide);
+  int max_missed_cleavages = GlobalParams::getMissedCleavages() +
+    additional_cleavages; // +1 because a self loop can prevent two cleavages from happening
+
+  link_sites.clear();
+
+  //find all modifications that can prevent xlink.
+  AA_MOD_T** mod_list = NULL;
+  int total_mods = get_all_aa_mod_list(&mod_list);
+  vector<AA_MOD_T*> prevents_xlink;
+
+  for (int mod_idx = 0;mod_idx < total_mods; mod_idx++) {
+    if (aa_mod_get_prevents_xlink(mod_list[mod_idx])) {
+      prevents_xlink.push_back(mod_list[mod_idx]);
+    }
+  }
+
+  //scan through the sequence and find linkable sites.
+  MODIFIED_AA_T* mod_seq = peptide->getModifiedAASequence();
+  int length = peptide->getLength();
+
+  //scan the sequence for linkage sites.
+  for (int seq_idx=0;seq_idx < length;seq_idx++) {
+    if (bondmap.canLink(peptide, seq_idx)) {
+
+      bool link_prevented = false;
+      // 1st test, make sure that we don't link at the c-terminus
+      // if the xlink prevents cleavage and the c-terminus is
+      // a cleavage point.  
+      if ((seq_idx == length-1) &&
+           linkSeqPreventsCleavage(peptide, seq_idx)) {
+        link_prevented = true;
+      }
+
+      //2nd test, make sure that there isn't a modification that
+      //prevents the cross-link
+      if (!link_prevented) {
+        //check if the modification prevents xlink.
+        for (unsigned int mod_idx = 0; mod_idx < prevents_xlink.size(); mod_idx++) {
+          //if aa is modified by any modification that can prevent
+          //cross-linking, then don't add the site as a link_site.
+          if (is_aa_modified(mod_seq[seq_idx], prevents_xlink[mod_idx])) {
+            link_prevented = true;
+            break;
+          }
+        }
+      }
+
+      //3rd test make sure that we are within the allowed 
+      //number of missed cleavages
+      if (!link_prevented) {
+        //if a link occurs here and prevents a cleavage, then don't
+        //count the number of missed cleavages against the total number 
+        //of missed cleavages
+        int total_missed_cleavages = missed_cleavages;
+        if (linkSeqPreventsCleavage(peptide, seq_idx)) {
+          total_missed_cleavages--;
+        }
+
+        if (total_missed_cleavages > max_missed_cleavages) {
+          link_prevented = true;
+        }
+      }
+      //passes all three tests, this is a linkable site.
+      if (!link_prevented) {
+        //if it is a linkable site, then add it to the list.
+        link_sites.push_back(seq_idx);
+      }
+    }
+  }
+  freeModSeq(mod_seq);
+}
+
+/**
+ * \returns the number of link sites on this peptide
+ */
+size_t XLinkablePeptide::numLinkSites() {
+  return link_sites_.size();
+}
+
+/**
+ * \returns whether this peptide is linkable or not
+ */
+bool XLinkablePeptide::isLinkable() {
+  return numLinkSites() > 0;
+}
+
+void XLinkablePeptide::setDecoy(bool is_decoy) {
+
+  is_decoy_ = is_decoy;
+}
+
+/**
+ * \returns whether the peptide is a decoy or not
+ */
+bool XLinkablePeptide::isDecoy() {
+  //return peptide_ -> isDecoy();
+  return is_decoy_;
+}
+
+/**
+ * \returns whether the peptide is linkable using the bond map
+ */
+bool XLinkablePeptide::isLinkable(
+    Peptide* peptide, ///< the peptide object
+    XLinkBondMap& bondmap ///< the bond map
+  ) {
+
+  vector<int> link_sites;
+  findLinkSites(peptide, bondmap, link_sites);
+  return link_sites.size() > 0;
+
+
+}
+
+/**
+ * \returns the number of missed cleavages in the linkable peptide
+ */
+int XLinkablePeptide::getMissedCleavageSites() {
+  return getMissedCleavageSites(peptide_);
+}
+
+int XLinkablePeptide::getMissedCleavageSites(
+  Peptide* peptide ///< the peptide
+) {
+  //TODO - change this to reflect modifications that 
+  //prevent cleavage (i.e. deadlinks).
+  return peptide -> getMissedCleavageSites();
+}
+
+/**
+ * \returns the sequence index of a link site
+ */
+int XLinkablePeptide::getLinkSite(
+  int link_site_idx ///< the index of the link site
+  ) {
+
+  return link_sites_.at(link_site_idx);
+}
+
+/**
+ * Adds a link site by sequence index
+ * \returns the index of the added link site
+ */
+int XLinkablePeptide::addLinkSite(
+  int seq_idx ///< the sequence index of the link site
+  ) {
+  link_sites_.push_back(seq_idx);
+  return link_sites_.size()-1;
+}
+
+
+void XLinkablePeptide::clearSites() {
+  link_sites_.clear();
+}
+
+
+/**
+ * \returns the peptide object associated with this XLinkablePeptide
+ */
+Peptide* XLinkablePeptide::getPeptide() {
+  return peptide_;
+}
+
+/**
+ * \returns the mass of the xlinkable peptide
+ */
+FLOAT_T XLinkablePeptide::calcMass(
+  MASS_TYPE_T mass_type
+  ) {
+  if (peptide_ == NULL) {
+    return Peptide::calcSequenceMass(sequence_, mass_type);
+  } else {
+    return peptide_->calcModifiedMass(mass_type);
+  }
+}
+
+/**
+ * \returns an allocated sequence c-string.  Must be freed
+ */
+const char* XLinkablePeptide::getSequence() {
+  if (peptide_ == NULL) {
+    return(sequence_);
+  } else {
+    return(peptide_->getSequence());
+  }
+}
+
+/**
+ * \returns the allocated modified sequence. Must be freed.
+ */
+MODIFIED_AA_T* XLinkablePeptide::getModifiedSequence() {
+  MODIFIED_AA_T* mod_seq = NULL;
+
+  if (peptide_ == NULL) {
+    convert_to_mod_aa_seq(sequence_, &mod_seq);
+  } else {
+    mod_seq = peptide_->getModifiedAASequence();
+  }
+
+  return mod_seq;
+}
+const MODIFIED_AA_T* XLinkablePeptide::getModifiedSequencePtr() {
+  if (mod_seq_ == NULL) {
+    mod_seq_ = getModifiedSequence();
+  } else {
+  }
+  return(mod_seq_);
+}
+
+int findLink(vector<int>& link_sites, int link_site) {
+  
+  for (unsigned int idx = 0; idx < link_sites.size(); idx++) {
+    if (link_sites[idx] == link_site)
+      return idx;
+  }
+  return -1;
+
+}
+
+void doSwitch(vector<int>& link_sites, int siteA, int siteB) {
+  int siteA_link_idx  = findLink(link_sites, siteA);
+  int siteB_link_idx = findLink(link_sites, siteB);
+  
+  if (siteA_link_idx != -1 && siteB_link_idx != -1) {
+    int temp_idx = link_sites[siteA_link_idx];
+    link_sites[siteA_link_idx] = link_sites[siteB_link_idx];
+    link_sites[siteB_link_idx] = temp_idx;
+  } else if (siteA_link_idx != -1) {
+    link_sites[siteA_link_idx] = siteB;
+  } else if (siteB_link_idx != -1) {
+    link_sites[siteB_link_idx] = siteA;
+  }
+}
+
+static const int MAX_SHUFFLES = 5;
+
+char* generateShuffledSequence(
+  Peptide* peptide,
+  vector<int>& link_sites
+  ) {
+
+  char* sequence = peptide->getSequence();
+
+  int length = peptide->getLength();
+
+  int num_shuffles = 0;
+  do {
+    
+    //Don't move the n-term and c-term amino acids.
+    int start_idx = 1;
+    int end_idx = length - 2;
+
+    while (start_idx < end_idx) {
+      int switch_idx = get_random_number_interval(start_idx, end_idx);
+      char temp_char = sequence[start_idx];
+      sequence[start_idx] = sequence[switch_idx];
+      sequence[switch_idx] = temp_char;
+     
+      doSwitch(link_sites, start_idx, switch_idx);
+
+      ++start_idx;
+    }
+
+
+  } while (false /*equal_peptides(sequence, peptide)*/ && (num_shuffles < MAX_SHUFFLES));
+
+  return sequence;
+
+
+}
+
+MODIFIED_AA_T* generateShuffledModSequence(
+  Peptide* peptide,
+  vector<int>& link_sites
+  ) {
+
+  MODIFIED_AA_T* sequence = peptide->getModifiedAASequence();
+  int length = peptide->getLength();
+  int start_idx = 0;
+  int end_idx = length-1;
+  int switch_idx = 0;
+  MODIFIED_AA_T temp_aa = 0;
+
+  // Do not move the first and last residue, regardless of enzyme
+  ++start_idx;
+  --end_idx;
+  
+  // shuffle from left to right, using the Knuth algorithm for shuffling.
+  while(start_idx < end_idx) {
+    switch_idx = get_random_number_interval(start_idx, end_idx);
+    temp_aa = sequence[start_idx];
+    sequence[start_idx] = sequence[switch_idx];
+    sequence[switch_idx] = temp_aa;
+    doSwitch(link_sites, start_idx, switch_idx);
+    ++start_idx;
+  }
+
+  return sequence;
+
+}
+
+
+XLinkablePeptide XLinkablePeptide::shuffle() {
+  //cerr <<"XLinkablePeptide::shuffle():start"<<endl;
+  Peptide* peptide = new Peptide(peptide_);
+  XLink::addAllocatedPeptide(peptide);
+  //cerr <<"Linksites"<<endl;
+  vector<int> link_sites;
+  for (unsigned int idx = 0; idx < numLinkSites(); idx++) {
+    link_sites.push_back(getLinkSite(idx));
+  }
+
+  MODIFIED_AA_T* new_mod_seq = NULL;
+
+  if(peptide->isModified()) {
+    //cerr<<"Calling generateShuffledModSequence"<<endl;
+    new_mod_seq = generateShuffledModSequence(peptide, link_sites);
+    peptide->setDecoyModifiedSeq(new_mod_seq);
+  } else {
+    //cerr<<"Calling generateShuffledSequence"<<endl;
+    char* new_seq =
+      generateShuffledSequence(peptide, link_sites);
+    convert_to_mod_aa_seq(new_seq, &new_mod_seq);
+    peptide->setDecoyModifiedSeq(new_mod_seq);
+    free(new_seq);
+  }
+  //cerr<<"Creating new linkable peptide"<<endl;
+  XLinkablePeptide ans(peptide, link_sites);
+  for (size_t idx=0;idx<NUMBER_MASS_TYPES;idx++) {
+    if (mass_calculated_[idx]) {
+      ans.mass_calculated_[idx] = true;
+      ans.mass_[idx] = mass_[idx];
+    }
+  }
+  ans.is_decoy_ = true;
+  return ans;
+} 
+
+XLinkablePeptide* XLinkablePeptide::getCachedDecoy() {
+  if (decoy_ == NULL) {
+    
+    decoy_ = new XLinkablePeptide(shuffle());
+  }
+  return decoy_;
+}
+
+
+/*
+string getAASequence() {
+  char* seq = get_peptide_sequence(peptide_);
+  string ans(seq);
+  free(seq);
+  return ans;
+}
+*/
+
+/**
+ * \returns the modified sequence string of the xlinkable peptide
+ */
+string XLinkablePeptide::getModifiedSequenceString() {
+  if (peptide_ == NULL) {
+    return string(sequence_);
+  } else {
+    return peptide_->getModifiedSequenceWithMasses();
+  }
+}
+
+bool XLinkablePeptide::isModified() {
+  return peptide_->isModified();
+}
+
+void XLinkablePeptide::setXCorr(size_t link_idx, FLOAT_T xcorr) {
+
+  xcorr_link_idx_ = link_idx;
+  xcorr_ = xcorr;
+
+}
+
+FLOAT_T XLinkablePeptide::getXCorr() const {
+  if (xcorr_link_idx_ != -1) {
+    return xcorr_;
+  }
+  carp(CARP_FATAL, "Xcorr not set!");
+  return 0;
+
+}
+
+bool XLinkablePeptide::hasXCorr() const {
+  //return (xcorr_link_idx_ != -1);
+  return false;
+}
+
+
+bool compareXLinkableXCorr(
+  const XLinkablePeptide& xpep1,
+  const XLinkablePeptide& xpep2
+  ) {
+  return xpep1.getXCorr() > xpep2.getXCorr();
+}
+
+bool compareXLinkableXCorrPtr(
+  const XLinkablePeptide* xpep1,
+  const XLinkablePeptide* xpep2
+  ) {
+  return xpep1 -> getXCorr() > xpep2 -> getXCorr();
+}
+
+
+
+bool compareXLinkablePeptideMass(
+  const XLinkablePeptide& xpep1,
+  const XLinkablePeptide& xpep2
+) {
+
+  return xpep1.getMassConst(MONO) < xpep2.getMassConst(MONO);
+}
+
+bool compareXLinkablePeptideMassToFLOAT(
+					const XLinkablePeptide& xpep1,
+					const FLOAT_T& mass) {
+  return xpep1.getMassConst(MONO) < mass;
+}
+
+bool compareXLinkablePeptideMassToFLOAT2(
+					 const FLOAT_T& mass,
+					 const XLinkablePeptide& xpep1) {
+  return xpep1.getMassConst(MONO) > mass;
+}
+
+/**
+ * \returns whether the peptide is less than (by lexical modified sequence)
+ */
+bool XLinkablePeptide::operator < (
+    XLinkablePeptide other ///< the other XLinkablePeptide to compare to.
+  ) const {
+  
+  XLinkablePeptide xlinkable = *this;
+  return xlinkable.getModifiedSequenceString() < other.getModifiedSequenceString();
+
+}
+
+void XLinkablePeptide::predictIons(
+  IonSeries* ion_series,
+  int charge,
+  int link_idx,
+  FLOAT_T mod_mass,
+  bool clear
+  ) {
+  IonSeries* cached_ions = NULL;
+  bool cached = false;
+  if (GlobalParams::getXLinkUseIonCache()) {
+
+    cached_ions = XLinkIonSeriesCache::getXLinkablePeptideIonSeries(*this, charge);
+    bool cached = cached_ions != NULL;
+  }
+  if (!cached) {
+    cached_ions = new IonSeries(ion_series->getIonConstraint(), charge);
+    cached_ions->update(getSequence(), getModifiedSequencePtr());
+    cached_ions->predictIons();
+  }
+  int link_pos = link_sites_[link_idx];
+  int seq_len = peptide_->getLength();
+  if (clear) {
+    ion_series->clear();
+  }
+  //modify the necessary ions and add to the ion_series
+  IonIterator eiter = cached_ions->end();
+  for (IonIterator ion_iter = cached_ions->begin(); 
+    ion_iter != eiter; 
+    ++ion_iter) { 
+    Ion* src_ion = *ion_iter; 
+    Ion* ion = src_ion;
+    unsigned int cleavage_idx = ion->getCleavageIdx(); 
+    if (ion->isForwardType()) { 
+      if (cleavage_idx > (unsigned int)link_pos) {
+        ion = Ion::newIon();
+	Ion::copy(src_ion, ion, "");
+        FLOAT_T mass = ion->getMassFromMassZ() + mod_mass;
+        ion->setMassZFromMass(mass); 
+        if (isnan(ion->getMassZ())) { 
+          carp(CARP_FATAL, "NAN3"); 
+        } 
+      } 
+    } else { 
+      if (cleavage_idx >= (seq_len-(unsigned int)link_pos)) { 
+        ion = Ion::newIon();
+	Ion::copy(src_ion, ion, "");
+        FLOAT_T mass = ion->getMassFromMassZ() + mod_mass;
+        ion->setMassZFromMass(mass); 
+        if (isnan(ion->getMassZ())) { 
+          carp(CARP_FATAL, "NAN4"); 
+        } 
+      } 
+    }
+    ion_series->addIon(ion);
+  }
+  if (!cached) {
+    delete cached_ions;
+  }
+}
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/xlink/XLinkablePeptide.h b/src/app/xlink/XLinkablePeptide.h
new file mode 100644
index 0000000..431e669
--- /dev/null
+++ b/src/app/xlink/XLinkablePeptide.h
@@ -0,0 +1,284 @@
+/**
+ * \file XLinkablePeptide.h
+ * $Revision: 1.00 $
+ * \brief Object for finding and defining the link sites on a peptide.
+ *************************************************************************/
+#ifndef XLINKABLEPEPTIDE_H_
+#define XLINKABLEPEPTIDE_H_
+
+#include "model/objects.h"
+#include "model/Peptide.h"
+#include "util/CacheableMass.h"
+#include <vector>
+#include <string>
+
+#include "XLinkBondMap.h"
+
+/**
+ * \class XLinkablePeptide
+ * \brief object for finding and defining the link sites on a peptide
+ */
+class XLinkablePeptide : public CacheableMass {
+ protected:
+  Crux::Peptide* peptide_; ///< the peptide object of this XLinkablePeptide (can be null)
+  XLinkablePeptide* decoy_; ///< a saved decoy of the XLinkablePeptide.
+  char* sequence_; ///< the sequence 
+  std::vector<int> link_sites_; ///< the sequence indices where linking is possible
+  bool is_decoy_; //Is this from the decoy database?
+  size_t xcorr_link_idx_;
+  FLOAT_T xcorr_;
+  int index_;
+
+  MODIFIED_AA_T* mod_seq_;
+
+  int predict_ions_call_count_;
+  /**
+   * Initialize object
+   */
+  void init();
+  
+ public:
+  
+  /**
+   * Default constructor
+   */
+  XLinkablePeptide();
+
+  /**
+   *  Constructor that defines the peptide as a sequence string
+   */
+  XLinkablePeptide(
+    char* sequence ///< the peptide sequence
+    );
+
+  XLinkablePeptide(
+    const XLinkablePeptide& xlinkablepeptide
+  );
+
+  XLinkablePeptide(
+    XLinkablePeptide& xlinkablepeptide
+  );
+
+  /**
+   * Constructor that defines the peptide and the linking sites
+   */
+  XLinkablePeptide(
+    Crux::Peptide* peptide, ///< the peptide object 
+    std::vector<int>& link_sites ///< the linking sites
+    );
+
+  /**
+   * Constructor that generates the possible linking sites
+   * on the peptide using the bondmap object
+   */
+  XLinkablePeptide(
+    Crux::Peptide* peptide, ///< the peptide object 
+    XLinkBondMap& bondmap, ///< the bond map
+    int additional_cleavages = 0 ///< 1 - for selfloop peptides
+  );
+  
+  /**
+   * Default destructor
+   */
+  virtual ~XLinkablePeptide();
+ 
+  /**
+   * given a peptide and a XLinkBondMap object,
+   * generate the possible link sites
+   */
+  static void findLinkSites(
+    Crux::Peptide* peptide,  ///< the peptide object -in
+    XLinkBondMap& bondmap,  ///< the bond map -in 
+    std::vector<int>& link_sites, ///< the found link sites -out
+    int additional_cleavages=0 ///< 0 for xlinks, 1 for selfloops
+  );
+
+  void clearSites();
+
+  /**
+   * \returns whether a link at this index in the sequence
+   * would prevent cleavage
+   */
+  bool linkSeqPreventsCleavage(
+    int seq_idx ///< the sequence index
+  );
+
+  static bool linkSeqPreventsCleavage(
+    Crux::Peptide* peptide, ///< the peptide
+    int seq_idx ///< the sequence index
+  );
+
+  /**
+   * \returns whether the link site prevents enzymatic
+   * cleavage
+   */
+  bool linkSitePreventsCleavage(
+    size_t link_site_idx ///< link site
+  );
+
+  /**
+   * \returns whether the peptide is cleavable at this index
+   */
+  static bool isCleavageSite(
+    Crux::Peptide* peptide, ///< the peptide
+    int seq_idx ///< the sequence index
+  );
+
+  /**
+   * \returns whether the aa at this index is a missed cleavage
+   */
+  static bool isMissedCleavageSite(
+    Crux::Peptide* peptide, ///< the peptide
+    int seq_idx ///< the sequence index
+  );
+
+  /**
+   * shuffle the linkable peptide, preserving the link sites
+   * \returns the shuffled XlinkablePeptide
+   */
+  XLinkablePeptide shuffle();
+
+  XLinkablePeptide* getCachedDecoy();
+  
+
+  /**
+   * \returns the number of link sites on this peptide
+   */
+  size_t numLinkSites();
+
+  /**
+   * \returns whether this peptide is linkable or not
+   */
+  bool isLinkable();
+  
+
+  void setDecoy(bool is_decoy);
+
+  /**
+   * \returns whether the peptide is a decoy or not
+   */
+  bool isDecoy();
+
+
+  /**
+   * \returns whether the peptide is linkable using the bond map
+   */
+  static bool isLinkable(
+    Crux::Peptide* peptide, ///< the peptide object
+    XLinkBondMap& bondmap ///< the bond map
+  );
+
+  /**
+   * Adds a link site by sequence index
+   * \returns the index of the added link site
+   */
+  int addLinkSite(
+    int seq_idx ///< the sequence index of the link site
+  );
+
+  /**
+   * \retuns the sequence index of a link site
+   */
+  int getLinkSite(
+    int link_site_idx ///< the index of the link site
+    );
+
+  /**
+   * \returns the number of missed cleavages in the linkable peptide
+   */
+  int getMissedCleavageSites();
+  static int getMissedCleavageSites(
+    Crux::Peptide* peptide ///< the peptide
+  );
+
+  /**
+   * \returns the peptide object associated with this XLinkablePeptide
+   */
+  Crux::Peptide* getPeptide();
+
+  /**
+   * \returns the mass of the xlinkable peptide
+   */
+  virtual FLOAT_T calcMass(
+    MASS_TYPE_T mass_type=MONO ///< MONO or AVERAGE
+  );
+
+  /**
+   * \returns an allocated sequence c-string.  Must be freed
+   */
+  const char* getSequence();
+
+  /**
+   * \returns the allocated modified sequence. Must be freed.
+   */
+  MODIFIED_AA_T* getModifiedSequence();
+
+  const MODIFIED_AA_T* getModifiedSequencePtr();
+  /**
+   * \returns the modified sequence string of the xlinkable peptide
+   */
+  std::string getModifiedSequenceString();
+
+  
+  void predictIons(
+    IonSeries* ion_series,
+    int charge,
+    int link_idx,
+    FLOAT_T mod_mass,
+    bool clear = true
+    );
+
+  FLOAT_T getXCorr() const;  
+  void setXCorr( 
+    size_t link_idx,
+    FLOAT_T xcorr
+  );
+
+  bool hasXCorr() const;
+  
+  
+  /**
+   * Is the linkable peptide modified?
+   */
+  bool isModified();
+  /**
+   * \returns whether the peptide is less than (by lexical modified sequence)
+   */
+  bool operator < (
+    XLinkablePeptide other ///< the other XLinkablePeptide to compare to.
+  ) const;
+
+  void setIndex(int idx) {index_ = idx;}
+  int getIndex() {return index_;}
+
+  
+};
+
+bool compareXLinkablePeptideMass(const XLinkablePeptide& xpep1, const XLinkablePeptide& xpep2);
+bool compareXLinkablePeptideMassToFLOAT(
+  const XLinkablePeptide& xpep1, 
+  const FLOAT_T& mass);
+
+bool compareXLinkablePeptideMassToFLOAT2(
+					 const FLOAT_T& mass,
+					 const XLinkablePeptide& xpep1);
+
+
+bool compareXLinkableXCorr(
+  const XLinkablePeptide& xpep1,
+  const XLinkablePeptide& xpep2
+  );
+
+bool compareXLinkableXCorrPtr(
+  const XLinkablePeptide* xpep1,
+  const XLinkablePeptide* xpep2
+  );
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/xlink/XLinkablePeptideIterator.cpp b/src/app/xlink/XLinkablePeptideIterator.cpp
new file mode 100644
index 0000000..eb8b0cb
--- /dev/null
+++ b/src/app/xlink/XLinkablePeptideIterator.cpp
@@ -0,0 +1,83 @@
+/**
+ * \file XLinkablePeptideIterator.cpp
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 18 September December 2014
+ * \brief Iterator for xlinkable peptides
+ *****************************************************************************/
+
+#include "XLinkablePeptideIterator.h"
+#include "XLink.h"
+#include "LinearPeptide.h"
+#include "util/GlobalParams.h"
+#include <iostream>
+#include "XLinkDatabase.h"
+
+using namespace std;
+
+/**
+ * constructor that sets up the iterator
+ */
+XLinkablePeptideIterator::XLinkablePeptideIterator(
+    double min_mass, ///< min mass of candidates
+    double max_mass, ///< max mass of candidates
+    Database* database, ///< protein database
+    PEPTIDE_MOD_T** peptide_mods, ///<current peptide mod
+    int num_peptide_mods,
+    bool is_decoy, ///< generate decoy candidates
+    XLinkBondMap& bondmap ///< map of valid links
+    ) {
+
+  is_decoy_ = is_decoy;
+
+  iter_ = XLinkDatabase::getXLinkableBegin(min_mass);
+  eiter_ = XLinkDatabase::getXLinkableEnd();
+
+  min_mass_ = min_mass;
+  max_mass_ = max_mass;
+  has_next_ = iter_ != eiter_ && iter_->getMass(GlobalParams::getIsotopicMass()) <= max_mass_;
+}
+
+/**
+ * Destructor
+ */
+XLinkablePeptideIterator::~XLinkablePeptideIterator() {
+  ;
+}
+
+/**
+ * queues the next linkable peptide
+ */
+void XLinkablePeptideIterator::queueNextPeptide() {
+  
+  iter_++;
+  has_next_ = iter_ != eiter_ && iter_->getMass(GlobalParams::getIsotopicMass()) <= max_mass_;
+}
+
+/**
+ *\returns whether there is another linkable peptide
+ */
+bool XLinkablePeptideIterator::hasNext() {
+
+  return has_next_;
+}
+
+/**
+ *\returns the next peptide
+ */
+XLinkablePeptide& XLinkablePeptideIterator::next() {
+
+  if (!has_next_) {
+    carp(CARP_WARNING, "next called on empty iterator!");
+  }
+  
+  XLinkablePeptide& ans = *iter_;
+  queueNextPeptide();
+  return ans;
+}
+
+/*                                                                                                                                                                                                                          
+ * Local Variables:                                                                                                                                                                                                         
+ * mode: c                                                                                                                                                                                                                  
+ * c-basic-offset: 2                                                                                                                                                                                                        
+ * End:                                                                                                                                                                                                                     
+ */
diff --git a/src/app/xlink/XLinkablePeptideIterator.h b/src/app/xlink/XLinkablePeptideIterator.h
new file mode 100644
index 0000000..c7029a9
--- /dev/null
+++ b/src/app/xlink/XLinkablePeptideIterator.h
@@ -0,0 +1,76 @@
+/**
+ * \file XLinkablePeptideIterator.h
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 18 September December 2014
+ * \brief Iterator for xlinkable peptides
+ *****************************************************************************/
+
+#ifndef XLINKABLEPEPTIDEITERATOR_H
+#define XLINKABLEPEPTIDEITERATOR_H
+
+#include "model/ModifiedPeptidesIterator.h"
+#include "XLinkablePeptide.h"
+#include "XLinkBondMap.h"
+
+class XLinkablePeptideIterator {
+
+ protected:
+  ModifiedPeptidesIterator* peptide_iterator_; ///< peptide iterator to generate peptides
+  XLinkablePeptide current_; ///< current xlinkable peptide
+  XLinkBondMap bondmap_; ///< map of valid links
+  FLOAT_T min_mass_;
+  FLOAT_T max_mass_;
+  bool has_next_; ///< is there a next candidate
+  bool is_decoy_; ///< are we getting decoys
+  std::vector<int> link_sites_; ///< list of links sites
+  std::vector<XLinkablePeptide>::iterator iter_;
+  std::vector<XLinkablePeptide>::iterator eiter_;
+
+  /**
+   * queues the next linkable peptide
+   */
+  void queueNextPeptide(); 
+
+ public:
+
+  /**
+   * constructor that sets up the iterator
+   */
+  XLinkablePeptideIterator(
+    double min_mass, ///< min mass of candidates
+    double max_mass, ///< max mass of candidates
+    Database* database, ///<peptide index
+    PEPTIDE_MOD_T** peptide_mods, ///< current peptide mod
+    int num_peptide_mods,
+    bool is_decoy, ///< generate decoy candidates
+    XLinkBondMap& bondmap ///< map of valid links
+    );
+
+  XLinkablePeptideIterator() {peptide_iterator_=NULL;}
+
+  /**
+   * Destructor
+   */
+  virtual ~XLinkablePeptideIterator();
+
+  /**
+   * \returns whether there is another linkable peptide
+   */
+  virtual bool hasNext();
+
+  /**
+   *\returns the next linkable peptide
+   */
+  virtual XLinkablePeptide& next();
+
+};
+
+
+#endif
+
+/*                                                                                                                                                                                                                          
+ * Local Variables:                                                                                                                                                                                                         
+ * mode: c                                                                                                                                                                                                                  
+ * c-basic-offset: 2                                                                                                                                                                                                        
+ * End:                                                                                                                                                                                                                     
+ */
diff --git a/src/app/xlink/XLinkablePeptideIteratorTopN.cpp b/src/app/xlink/XLinkablePeptideIteratorTopN.cpp
new file mode 100644
index 0000000..4f5aa49
--- /dev/null
+++ b/src/app/xlink/XLinkablePeptideIteratorTopN.cpp
@@ -0,0 +1,169 @@
+/**
+ * \file XLinkablePeptideIteratorTopN.cpp
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 18 September December 2014
+ * \brief Iterator for xlinkable peptides
+ *****************************************************************************/
+
+#include "XLinkablePeptideIteratorTopN.h"
+#include "XLinkablePeptideIterator.h"
+#include "XLink.h"
+#include "XLinkPeptide.h"
+#include "XLinkScorer.h"
+#include "XLinkDatabase.h"
+#include "util/GlobalParams.h"
+#include <iostream>
+
+
+using namespace std;
+
+/**
+ * constructor that sets up the iterator
+ */
+XLinkablePeptideIteratorTopN::XLinkablePeptideIteratorTopN(
+  Crux::Spectrum* spectrum, ///<spectrum
+  FLOAT_T precursor_mass, ///< Mass of precursor
+  FLOAT_T min_mass, ///< min mass of candidates
+  FLOAT_T max_mass, ///< max mass of candidates
+  int precursor_charge, ///< Charge of precursor  
+  bool is_decoy ///< generate decoy candidates
+  ) {
+
+  carp(CARP_DEBUG, "XLinkablePeptideIteratorTopN: start()");
+
+  scored_xlp_.clear();
+
+  XLinkScorer scorer(spectrum, precursor_charge);
+  top_n_ = GlobalParams::getXLinkTopN();
+  //carp(CARP_DEBUG, "top_in:%i", top_n_);
+  //carp(CARP_DEBUG, "precursor:%g", precursor_mass); 
+  //carp(CARP_INFO, "min:%g", min_mass);
+  //carp(CARP_INFO, "max:%g", max_mass);
+  vector<XLinkablePeptide>::iterator xlp_biter = XLinkDatabase::getXLinkableFlattenBegin(is_decoy, min_mass);
+  vector<XLinkablePeptide>::iterator xlp_eiter = XLinkDatabase::getXLinkableFlattenEnd(is_decoy, max_mass);
+ 
+  int nscore = xlp_eiter - xlp_biter;
+//  if (nscore > top_n_) {
+    scorePeptides(scorer, precursor_mass, xlp_biter, xlp_eiter);
+//  } else {
+//    scored_xlp_.insert(scored_xlp_.begin(), xlp_biter, xlp_eiter);
+//  }
+  
+  //find the begin and end iterators for the given mass range.
+  /*
+  vector<XLinkablePeptide>::iterator target_biter = XLinkDatabase::getXLinkableFlattenBegin(false, min_mass);
+  vector<XLinkablePeptide>::iterator target_eiter = XLinkDatabase::getXLinkableFlattenEnd(false, max_mass);
+  vector<XLinkablePeptide>::iterator decoy_biter = XLinkDatabase::getXLinkableFlattenBegin(true, min_mass);
+  vector<XLinkablePeptide>::iterator decoy_eiter = XLinkDatabase::getXLinkableFlattenEnd(true, max_mass);
+  
+
+  int nscore = (target_eiter - target_biter) + (decoy_eiter - decoy_biter);
+  if (nscore > top_n_) {
+    scorePeptides(scorer, precursor_mass, target_biter, target_eiter);
+    scorePeptides(scorer, precursor_mass, decoy_biter, decoy_eiter);
+    sort(scored_xlp_.begin(), scored_xlp_.end(), compareXLinkableXCorr);
+  } else {
+    scored_xlp_.insert(scored_xlp_.begin(), target_biter, target_eiter);
+    scored_xlp_.insert(scored_xlp_.begin(), decoy_biter, decoy_eiter);
+  }
+  */
+
+  current_count_ = 0;
+  queueNextPeptide();
+
+}
+
+void XLinkablePeptideIteratorTopN::scorePeptides(
+  XLinkScorer& scorer, 
+  FLOAT_T precursor_mass, 
+  vector<XLinkablePeptide>::iterator& biter, 
+  vector<XLinkablePeptide>::iterator& eiter
+  ) {
+
+  scored_xlp_.clear();
+  while(biter != eiter) {
+    XLinkablePeptide& pep1 = *biter;
+    FLOAT_T delta_mass = precursor_mass - pep1.getMass(MONO);// - XLinkPeptide::getLinkerMass();
+    FLOAT_T xcorr = scorer.scoreXLinkablePeptide(pep1, 0, delta_mass);
+    pep1.setXCorr(0, xcorr);
+    //pep1.getXCorr();
+    scored_xlp_.push_back(&pep1);
+    biter++;
+  }
+  if (scored_xlp_.size() > 0) {
+    sort(scored_xlp_.begin(), scored_xlp_.end(), compareXLinkableXCorrPtr);
+  }
+ 
+  IF_CARP(CARP_DETAILED_DEBUG,
+    for (size_t idx = 0;idx < min((size_t)top_n_,scored_xlp_.size());idx++) {
+      string seq = scored_xlp_[idx]->getModifiedSequenceString();
+      carp(CARP_INFO,"%d %g %s", idx, scored_xlp_[idx]->getXCorr(), seq.c_str());
+    }
+  );
+}
+
+/**
+ * Destructor
+ */
+XLinkablePeptideIteratorTopN::~XLinkablePeptideIteratorTopN() {
+}
+
+/**
+ * queues the next linkable peptide
+ */
+void XLinkablePeptideIteratorTopN::queueNextPeptide() {
+  //carp(CARP_DEBUG, "queueNextPeptide()::start");
+
+  if (current_count_ < scored_xlp_.size() && current_count_ < top_n_) {
+    //current_ = scored_xlp_[current_count_];
+    current_count_++;
+    has_next_ = true;
+  } else {
+    has_next_ = false;
+  }
+  //carp(CARP_DEBUG, "queueNextPeptide:%i", has_next_?1:0);
+}
+
+/**
+ *\returns whether there is another linkable peptide
+ */
+bool XLinkablePeptideIteratorTopN::hasNext() {
+  //carp(CARP_DEBUG, "XLinkablePeptideIteratorTopN::hasNext(): %i", has_next_?1:0);
+  return has_next_;
+}
+
+/**
+ *\returns the next peptide
+ */
+XLinkablePeptide& XLinkablePeptideIteratorTopN::next() {
+  //carp(CARP_INFO, "XLinkablePeptideIteratorTopN::next()");
+  if (!has_next_) {
+    carp(CARP_FATAL, "next called on empty iterator!");
+  }
+
+  XLinkablePeptide& ans = *scored_xlp_[current_count_-1];
+  //carp(CARP_INFO, "next peptide:%s %g", ans.getSequence(), ans.getXCorr());
+  queueNextPeptide();
+  //carp(CARP_INFO, "XLinkablePeptideIteratorTopN: returning reference");
+  return ans;
+}
+
+XLinkablePeptide* XLinkablePeptideIteratorTopN::nextPtr() {
+  if (!has_next_) {
+    carp(CARP_FATAL, "next called on empty iterator!");
+  }
+  
+  XLinkablePeptide* ans = scored_xlp_[current_count_-1];
+  queueNextPeptide();
+  return ans;
+  
+}
+
+
+
+/*                                                                                                                                                                                                                          
+ * Local Variables:                                                                                                                                                                                                         
+ * mode: c                                                                                                                                                                                                                  
+ * c-basic-offset: 2                                                                                                                                                                                                        
+ * End:                                                                                                                                                                                                                     
+ */
diff --git a/src/app/xlink/XLinkablePeptideIteratorTopN.h b/src/app/xlink/XLinkablePeptideIteratorTopN.h
new file mode 100644
index 0000000..b7f2117
--- /dev/null
+++ b/src/app/xlink/XLinkablePeptideIteratorTopN.h
@@ -0,0 +1,83 @@
+/**
+ * \file XLinkablePeptideIterator.h
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 18 September December 2014
+ * \brief Iterator for xlinkable peptides
+ *****************************************************************************/
+
+#ifndef XLINKABLEPEPTIDEITERATORTOPN_H
+#define XLINKABLEPEPTIDEITERATORTOPN_H
+
+#include "XLinkablePeptideIterator.h"
+#include "XLinkablePeptide.h"
+#include "XLinkBondMap.h"
+#include "XLinkScorer.h"
+#include <queue>
+#include <vector>
+
+
+class XLinkablePeptideIteratorTopN: public XLinkablePeptideIterator {
+
+ protected:
+
+  //std::priority_queue<XLinkablePeptide, std::vector<XLinkablePeptide>, CompareXCorr> scored_xlp_;  
+  std::vector<XLinkablePeptide*> scored_xlp_; ///< sorted by highest XCorr score.
+  int current_count_;
+  int top_n_; ///<set by kojak-top-n
+  bool has_next_; ///< is there a next candidate
+  bool is_decoy_; ///< are we getting decoys
+
+  /**
+   * queues the next linkable peptide
+   */
+  void queueNextPeptide(); 
+  
+  void scorePeptides(
+    XLinkScorer& scorer,
+    FLOAT_T precursor_mass,
+    std::vector<XLinkablePeptide>::iterator& biter,
+    std::vector<XLinkablePeptide>::iterator& eiter
+  );
+
+ public:
+
+  /**
+   * constructor that sets up the iterator
+   */
+  XLinkablePeptideIteratorTopN(
+    Crux::Spectrum* spectrum,
+    FLOAT_T precursor_mass,
+    FLOAT_T min_mass, ///< min mass of candidates
+    FLOAT_T max_mass, ///< max mass of candidates
+    int precursor_charge, ///< Charge of precursor
+    bool is_decoy ///< generate decoy candidates
+    );
+
+  /**
+   * Destructor
+   */
+  virtual ~XLinkablePeptideIteratorTopN();
+
+  /**
+   * \returns whether there is another linkable peptide
+   */
+  bool hasNext();
+
+  /**
+   *\returns the next linkable peptide
+   */
+  XLinkablePeptide& next();
+  
+  XLinkablePeptide* nextPtr();
+
+};
+
+
+#endif
+
+/*                                                                                                                                                                                                                          
+ * Local Variables:                                                                                                                                                                                                         
+ * mode: c                                                                                                                                                                                                                  
+ * c-basic-offset: 2                                                                                                                                                                                                        
+ * End:                                                                                                                                                                                                                     
+ */
diff --git a/src/app/xlink/cmake_install.cmake b/src/app/xlink/cmake_install.cmake
new file mode 100644
index 0000000..5004e1d
--- /dev/null
+++ b/src/app/xlink/cmake_install.cmake
@@ -0,0 +1,34 @@
+# Install script for directory: /data/TeamCity/buildAgent/work/779d99b0241b2175/src/app/xlink
+
+# Set the install prefix
+IF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+  SET(CMAKE_INSTALL_PREFIX "/usr/local")
+ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+  IF(BUILD_TYPE)
+    STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+  ELSE(BUILD_TYPE)
+    SET(CMAKE_INSTALL_CONFIG_NAME "Release")
+  ENDIF(BUILD_TYPE)
+  MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+
+# Set the component getting installed.
+IF(NOT CMAKE_INSTALL_COMPONENT)
+  IF(COMPONENT)
+    MESSAGE(STATUS "Install component: \"${COMPONENT}\"")
+    SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+  ELSE(COMPONENT)
+    SET(CMAKE_INSTALL_COMPONENT)
+  ENDIF(COMPONENT)
+ENDIF(NOT CMAKE_INSTALL_COMPONENT)
+
+# Install shared libraries without execute permission?
+IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+  SET(CMAKE_INSTALL_SO_NO_EXE "0")
+ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+
diff --git a/src/app/xlink/libxlink.a b/src/app/xlink/libxlink.a
new file mode 100644
index 0000000..0a68ce4
Binary files /dev/null and b/src/app/xlink/libxlink.a differ
diff --git a/src/app/xlink/spectacle.pl b/src/app/xlink/spectacle.pl
new file mode 100755
index 0000000..9d6bd68
--- /dev/null
+++ b/src/app/xlink/spectacle.pl
@@ -0,0 +1,331 @@
+#!/usr/bin/perl
+#FILE: spectacle
+#AUTHOR: Barbara Frewen
+#CREATE DATE: 01/10/06
+#DESCRIPTION: Read in an annotation file and 
+#    produce plots of spectra therein
+
+use strict;
+use Getopt::Long;
+use FileHandle;
+
+# !!!!! see TODO items !!!!!!!!
+#TODO label size bigger for png
+#TODO not printing the last peak?
+#TODO mark the precursor m/z
+
+my $usage = "Usage: spectacle [options] <annotations>
+
+Options: 
+  -format <eps|fig|png> - format of output file. Default is eps. 
+  -html <file>    - write an html file with all of the figures. 
+  -names <file>   - specifiy names of output files. Only enabled for png.
+  -pre-mz         - mark the precursor m/z on the x-axis.
+  -title          - create a title above the figure of the form 
+                     <identifier> m/z=<m/z> <comment>.    
+  -labeltop       - labels at the top of figure
+  -nobox          - do not draw a border at top and left of plot
+  -script <file>  - print commands to file instead of running
+                    gnuplot directly\n";
+
+
+#read the command line
+my $format = "eps";
+my $names_file;
+my $label_up;
+my $html;
+my $premz;
+my $title;
+my $gnuplot_file;
+my $annot_file;
+my $no_box;
+GetOptions("names=s"=>\$names_file,
+           "format=s"=>\$format,
+           "html=s"=>\$html,
+           "pre-mz"=>\$premz,
+           "labeltop"=>\$label_up,
+           "script=s"=>\$gnuplot_file,
+           "title"=>\$title);   
+#TODO add verbosity?
+if(@ARGV != 1){
+  print "Missing annotation file or option arguments\n";
+  print $usage;
+  exit;
+}else{
+  $annot_file = $ARGV[0];
+}
+
+#check for option errors...
+
+#format: must be eps png fig; write terminal string
+my $terminal;
+if($format eq "eps"){
+  $terminal = "set terminal postscript eps color solid 24\n";
+}elsif($format eq "png"){
+  #$terminal = "set terminal png medium color\n";
+  $terminal = "set terminal png medium\n";
+}elsif($format eq "fig"){
+  $terminal = "set terminal fig color small 24\n";
+}else{
+  print "Format $format not recognized. Use png, eps, or fig.";
+  exit;
+}
+#print "Format is $format\n";
+
+#check for gnuplot and exit if not present
+if( `which gnuplot` eq "" ){
+    die "Could not find required gnuplot.\n";
+}
+
+#html: change to false and write warning if format!=png
+if($html && $format ne "png" ){
+  print STDERR "Warning: HTML file cannot be created with $format format\n";
+  undef $html;
+}
+
+#names: open and put in a hash (id as key, file name as entry)
+#I haven't checked to see if any names are repeated
+(open NAMES, $names_file or 
+ die "Could not open names file $names_file\n") if $names_file;; 
+my %spec_names;
+if($names_file){
+  my $line;
+  while($line = <NAMES>){
+    my ($id, $filename) = split /\s/, $line;
+    $spec_names{$id} = $filename;
+  }
+}
+close NAMES;
+
+open ANNOT, $annot_file or die "Couldn't open annotation file $annot_file\n";
+my $line = <ANNOT>;
+
+#open gnuplot and initialize settings for all plots
+($gnuplot_file) ? (open GNUPLOT, ">$gnuplot_file") : (open GNUPLOT, "|gnuplot");
+print GNUPLOT $terminal;
+#print GNUPLOT "set noytics\n"
+print GNUPLOT "set xtics nomirror\n";
+print GNUPLOT "set xlabel \"m/z\"\nset ylabel \"Intensity\"\n";
+print GNUPLOT "set border 3\n" if $no_box;
+#save fig names for html page, temp file names to delete
+my @figNames;
+my @tmpFileNames;
+
+while( $line =~ /^>/){  #each loop is one spectrum
+  #remove > and whitespace
+  chomp $line;
+  $line =~ s/>\s*//;  
+  my($id, $mz) = split /\s/, $line;
+  #print "id is $id, mz is $mz\n";
+  my $comment =~ s/$id\s+$mz\s+//;
+
+  #check names
+  my $fig_file_name = "$id.$format";
+  if( $names_file and !$spec_names{$id} ){
+    #print "Don't make fig for $id\n";
+    next;  
+  }elsif( $names_file ){
+    $fig_file_name = "$spec_names{$id}.$format";
+  }
+  push @figNames, $fig_file_name;
+
+  #title string
+  if($title){
+    $title = $id." mz: ".$mz." ".$comment;
+    #print "title is $title\n"; 
+  }
+
+  #list of series, store text to be printed to file
+  my %series;  #indexed by color
+  open BLACK, ">black.$id.$$.tmp" 
+    or die "Can't create temporary data file\n";
+  push @tmpFileNames, "black.$id.$$.tmp";
+
+  #list of labels
+  my @labels;
+
+  #list of warnings
+  my %warnings;
+
+  #for each peak
+  my $peak_line;
+  #my $max_y = 0;
+  my $max_y = -10;
+  while( ($peak_line = <ANNOT>) !~ /^>/ and (not eof ANNOT)){  
+    chomp $peak_line;
+    my($mz, $in, $label, $color) = split /\s+/, $peak_line;
+    
+    #print "mz: $mz int: $in label: $label color: $color\n";
+    #keep track of largest intensity for adjusting y-range
+    $max_y = $in if ($in > $max_y);
+
+    #add label to list
+    (push @labels, "$mz $in, $label") if $label;
+
+    #check series, create new if necessary
+    if(!$color){
+      print BLACK "$mz $in\n";
+    }elsif( $series{$color} ){
+      $series{$color} = $series{$color}."$mz $in\n";
+    }else{
+      #check that color is legal
+      #add to list
+      if($color eq "red" or
+       $color eq "green" or
+       $color eq "blue" or
+       $color eq "magenta"){
+      $series{$color} = $series{$color}."$mz $in\n";
+      }else{
+      $warnings{$color} = "Warning: unrecognized color ($color)\n";
+      print BLACK "$mz $in\n";
+      }
+    }
+  }#last peak read
+
+  $line = $peak_line;
+  #print "end of spec, line is $line";
+  
+  #close series files
+  close BLACK;
+  #print colors to files
+  foreach my $color (keys %series){
+    open FILE, ">$color.$id.$$.tmp";
+    print FILE $series{$color};
+    close FILE;
+    push @tmpFileNames, "$color.$id.$$.tmp";
+  }
+
+  #print warnings  
+  foreach my $color (keys %warnings){
+    print STDERR $warnings{$color};
+  }
+
+  #adjust the labels to be above the peak
+  my $offset = $max_y * 0.04;
+  my $abs_y = $max_y if $label_up;
+  #print "max_y is $max_y, offset is $offset, and abs_y is $abs_y\n";
+  my $label_string;
+  for (@labels){
+    my ($mz, $in, $label) = split /\s/;
+    ($label_up) ? $in = $abs_y : $in +=$offset;
+    $label_string .= "set label \"$label\" at $mz, $in center\n";
+  }
+
+  #clear labels from last plot
+  print GNUPLOT "set nolabel\n";
+  #write filename
+  print GNUPLOT "set output \"$fig_file_name\"\n";
+
+  #set yrange as greater than highest peak 
+  $max_y *= 1.1; # if $label_string;
+  #print GNUPLOT "set yrange [-10001:$max_y]\n";
+  #print GNUPLOT "set yrange [-100:10]\n";
+  print GNUPLOT "set yrange [0:$max_y]\n";
+
+  #write title
+  print GNUPLOT "set title \"$title\"\n" if $title;
+
+  #write labels
+  #print GNUPLOT $label_string;
+  #print GNUPLOT "set nolabel\n";
+  #write plot command
+  my $plot = "plot \"black.$id.$$.tmp\" notitle with impulses lt -1, ";
+  foreach my $color (keys %series){
+    my $color_number = get_color_number($color, $format);
+    $plot = $plot.
+      " \"$color.$id.$$.tmp\" notitle with impulses lt $color_number,";
+  }
+  $plot =~ s/,\s*$//;  #remove last comma
+  print GNUPLOT $plot."\n";
+
+  #skip over any blank lines between spec
+  while( ($line !~ /^>/) and (not eof ANNOT) ){
+    $line = <ANNOT>;
+  }
+#end while, next spec
+}continue{  #here if a spec was skipped b/c not in names file
+  while( ($line !~ /^>/) and (not eof ANNOT) ){
+    $line = <ANNOT>;
+  }
+} 
+
+close GNUPLOT;
+for (@tmpFileNames){
+  #print "temp filename is $_\n";
+  `rm $_`;
+}
+
+#write html file
+if($html){
+  open HTML, ">$html" or die "Couldn't open $html\n";
+  print HTML "<html><body>\n";
+  for (@figNames){
+    print HTML "<p>$_</p><p><img src=\"$_\"></p>\n";
+  }
+  print HTML "</body></html>";
+  close HTML;
+}
+
+########## END OF MAIN #####################
+
+
+#number    fig    png    eps      
+#-1      black          
+#1    black    red    red      
+#2    blue    green    green      
+#3    green    blue    blue      
+#4      magenta    magenta
+#5    red    
+#6    magenta    
+#7             black
+
+
+sub get_color_number{ #color, format
+  my $color = shift;
+  my $format = shift;
+  my $code = 1;
+
+  if($color eq "black"){
+    if($format eq "png"){
+      $code = -1;
+    }elsif($format eq "eps"){
+      $code = 7;
+    }elsif($format eq "fig"){
+      $code = 1;
+    }
+  }elsif($color eq "red"){
+    if($format eq "png"){
+      $code = 1;
+    }elsif($format eq "eps"){
+      $code = 1;
+    }elsif($format eq "fig"){
+      $code = 5;
+    }
+  }elsif($color eq "green"){
+    if($format eq "png"){
+      $code = 2;
+    }elsif($format eq "eps"){
+      $code = 2;
+    }elsif($format eq "fig"){
+      $code = 3;
+    }
+  }elsif($color eq "blue"){
+    if($format eq "png"){
+      $code = 3;
+    }elsif($format eq "eps"){
+      #$code = 3;
+      $code = 21;
+    }elsif($format eq "fig"){
+      $code = 2;
+    }
+  }elsif($color eq "magenta"){
+    if($format eq "png"){
+      $code = 4;
+    }elsif($format eq "eps"){
+      $code = 4;
+    }elsif($format eq "fig"){
+      $code = 6;
+    }
+  }
+  return $code;
+}
diff --git a/src/app/xlink/xhhc.cpp b/src/app/xlink/xhhc.cpp
new file mode 100644
index 0000000..5c4c8a6
--- /dev/null
+++ b/src/app/xlink/xhhc.cpp
@@ -0,0 +1,405 @@
+#include "xhhc.h"
+#include "XLinkBondMap.h"
+#include "LinkedPeptide.h"
+#include "XHHC_Peptide.h"
+#include "XLinkablePeptide.h"
+#include "XLink.h"
+
+#include "parameter.h"
+#include "model/Peptide.h"
+#include "io/DelimitedFile.h"
+#include "model/DatabaseProteinIterator.h"
+#include "model/ProteinPeptideIterator.h"
+#include "util/Params.h"
+
+using namespace std;
+using namespace Crux;
+
+/**
+ * Global Variable
+ */
+map<string, vector<Peptide*> > sequence_peptide_map; //hack to keep track of peptides.
+
+
+void get_linear_peptides(
+  set<string>& peptides, 
+  DatabaseProteinIterator* protein_iterator,
+  PeptideConstraint* peptide_constraint
+  ) {
+
+  int max_missed_cleavages = Params::GetInt("missed-cleavages");
+
+  ProteinPeptideIterator* peptide_iterator = NULL;
+  Protein* protein;
+  Peptide* peptide;
+
+  string sequence = "";
+  string last_sequence = "zz";
+  //bool missed_cleavage = false;
+  // keep track of whether the next peptide contains the previous one or not
+  //size_t index;
+  while (protein_iterator->hasNext()) {
+    protein = protein_iterator->next();
+    peptide_iterator = new ProteinPeptideIterator(protein, peptide_constraint);
+    // missed_cleavages must be all in protein.c for this to work
+    peptide_iterator->prepareMc(500);
+    while (peptide_iterator->hasNext()) {
+      //peptide = database_peptide_iterator_next(peptide_iterator);
+      peptide = peptide_iterator->next();
+      char* seq = peptide->getSequence();
+      sequence = seq; 
+      free(seq);
+
+      if (peptide->getMissedCleavageSites() <= max_missed_cleavages) {
+        carp(CARP_DEBUG, "Adding linear peptide:%s", peptide->getSequence());
+        peptides.insert(sequence);
+
+        map<string, vector<Peptide*> >::iterator find_iter;
+
+        find_iter = sequence_peptide_map.find(sequence);
+
+        carp(CARP_DEBUG, "Adding to map:%s,", sequence.c_str());
+
+        if (find_iter == sequence_peptide_map.end()) {
+          vector<Peptide*> peptide_vector;
+          peptide_vector.push_back(peptide);
+          sequence_peptide_map.insert(make_pair(sequence, peptide_vector));
+        } else {
+          find_iter -> second.push_back(peptide);
+        }
+      } else {
+        delete peptide;
+      }
+
+    }
+    delete peptide_iterator;
+  }
+
+  
+
+
+}
+
+vector<Peptide*>& get_peptides_from_sequence(string& sequence) {
+  return sequence_peptide_map[sequence];
+}
+
+void free_peptides() {
+  map<string, vector<Peptide*> >::iterator map_iter;
+
+  for (map_iter = sequence_peptide_map.begin();
+       map_iter != sequence_peptide_map.end();
+       ++map_iter) {
+    vector<Peptide*>& peptides = map_iter -> second;
+    for (unsigned int i = 0; i < peptides.size(); i++) {
+      delete peptides[i];
+    }
+  }
+  sequence_peptide_map.clear();
+}
+
+
+void get_linkable_peptides(
+        set<XLinkablePeptide>& peptides, 
+        XLinkBondMap& bondmap,
+  DatabaseProteinIterator* protein_iterator,
+  PeptideConstraint* peptide_constraint) {
+
+  ProteinPeptideIterator* peptide_iterator = NULL;
+  Protein* protein;
+  Peptide* peptide;
+  string sequence = "";
+  string last_sequence = "zz";
+  // keep track of whether the next peptide contains the previous one or not
+  while (protein_iterator->hasNext()) {
+    protein = protein_iterator->next();
+    peptide_iterator = new ProteinPeptideIterator(protein, peptide_constraint);
+    // missed_cleavages must be all in protein.c for this to work
+    //TODO either fix this code or make an option to allow all missed cleavages...
+    peptide_iterator->prepareMc(500); 
+    while (peptide_iterator->hasNext()) {
+      //peptide = database_peptide_iterator_next(peptide_iterator);
+      peptide = peptide_iterator->next();
+      const char* seq = peptide->getSequence();
+      sequence = seq;
+ 
+      map<string, vector<Peptide*> >::iterator find_iter;
+
+      find_iter = sequence_peptide_map.find(sequence);
+
+      carp(CARP_DEBUG, "Adding to map:%s", sequence.c_str());
+
+      if (find_iter == sequence_peptide_map.end()) {
+        vector<Peptide*> peptide_vector;
+        peptide_vector.push_back(peptide);
+        sequence_peptide_map.insert(make_pair(sequence, peptide_vector));
+      } else {
+        find_iter -> second.push_back(peptide);
+      }
+
+      XLinkablePeptide xlinkable(peptide, bondmap, 1);
+
+      if (xlinkable.isLinkable()) {
+        peptides.insert(xlinkable);
+      }
+
+    }
+    delete peptide_iterator;
+  }
+}
+
+void print_precursor_count(vector<LinkedPeptide>& all_ions) {
+  int linear_peptides = 0;
+  int self_loop_products = 0;
+  int dead_end_products = 0;
+  int xlink_products = 0;
+
+  for (unsigned int idx = 0; idx < all_ions.size(); idx++) {
+    LinkedPeptide& current = all_ions[idx];
+    if (current.isLinear())
+      linear_peptides++;
+    else if (current.isDeadEnd())
+      dead_end_products++;
+    else if (current.isSelfLoop())
+      self_loop_products++;
+    else if (current.isCrossLinked())
+      xlink_products++;
+    else
+      carp(CARP_ERROR, "Unknown product");
+  }
+  
+  carp(CARP_INFO, "Linear Peptides:%d", linear_peptides);
+  carp(CARP_INFO, "Inter/Intra Xlinks:%d", xlink_products);
+  carp(CARP_INFO, "Dead End Products:%d", dead_end_products);
+  carp(CARP_INFO, "Self Loop Products:%d", self_loop_products);
+
+}
+
+// creates an index of all linked peptides from a fasta file
+void find_all_precursor_ions(
+  vector<LinkedPeptide>& all_ions
+  ) {
+
+  string database_file = Params::GetString("protein fasta file");
+  
+  carp(CARP_DEBUG, "find_all_precursor_ions: start()");
+  Database* db = new Database(database_file, false);
+  carp(CARP_DEBUG, "peptide constraint");
+  PeptideConstraint* peptide_constraint = 
+    PeptideConstraint::newFromParameters();
+  // add two to account for a self loop that prevents two cleavages
+  peptide_constraint->setNumMisCleavage(Params::GetInt("missed-cleavages") + 2);
+
+  carp(CARP_DEBUG, "protein iterator");
+  DatabaseProteinIterator* protein_iterator = new DatabaseProteinIterator(db);
+
+  set<XLinkablePeptide> peptides;
+  carp(CARP_DEBUG, "get_linkable_peptides");
+  string link_string = Params::GetString("link sites");
+  XLinkBondMap bondmap(link_string);
+  get_linkable_peptides(peptides, bondmap, protein_iterator, peptide_constraint);
+  carp(CARP_DEBUG, "add_linked_peptides");
+  add_linked_peptides(all_ions, peptides, bondmap, 1);
+  
+  if (Params::GetBool("xlink-include-linears")) {
+    delete protein_iterator;
+    protein_iterator = new DatabaseProteinIterator(db);
+    set<string> linear_peptides;
+    get_linear_peptides(linear_peptides, protein_iterator, peptide_constraint);
+    
+    set<string>::iterator iter;
+    for (iter = linear_peptides.begin();
+      iter != linear_peptides.end();
+      ++iter) {
+
+      LinkedPeptide lp = LinkedPeptide(1);
+      XHHC_Peptide p(*iter);
+      lp.addPeptide(p);
+      all_ions.push_back(lp);
+    }
+  }
+  
+
+  delete protein_iterator;
+
+
+  carp(CARP_DEBUG, "find_all_precursor_ions: done()");
+
+  //TODO - sort by increasing mass.
+  IF_CARP(CARP_DEBUG, print_precursor_count(all_ions));
+}
+
+
+
+// modified version of crux's estimate_weibull_parameters_from_xcorrs
+bool hhc_estimate_weibull_parameters_from_xcorrs(
+  FLOAT_T* scores,
+  int num_scores,
+  FLOAT_T* eta,
+  FLOAT_T* beta,
+  FLOAT_T* shift,
+  FLOAT_T* correlation,
+  Spectrum* spectrum,
+  int charge
+  ) {
+
+  // check that we have the minimum number of matches
+  if( num_scores < MIN_WEIBULL_MATCHES ) {
+    carp(CARP_DETAILED_INFO, "Too few psms (%i) to estimate "
+         "p-value parameters for spectrum %i, charge %i",
+         num_scores, spectrum->getFirstScan(), charge);
+    // set eta, beta, and shift to something???
+    return false;
+  }
+
+  // reverse sort the first num_samples of them
+  sort(scores, scores + num_scores, greater<FLOAT_T>());
+
+  // use only a fraction of the samples, the high-scoring tail
+  // this parameter is hidden from the user
+  double fraction_to_fit = Params::GetDouble("fraction-top-scores-to-fit");
+  assert( fraction_to_fit >= 0 && fraction_to_fit <= 1 );
+  int num_tail_samples = (int)(num_scores * fraction_to_fit);
+  carp(CARP_DEBUG, "Estimating Weibull params with %d psms (%.2f of %i)",
+       num_tail_samples, fraction_to_fit, num_scores);
+
+  // do the estimation
+  fit_three_parameter_weibull(scores, num_tail_samples, num_scores,
+      MIN_XCORR_SHIFT, MAX_XCORR_SHIFT, XCORR_SHIFT, 0,  /*CORR_THRESHOLD*/
+      eta, beta, shift, correlation);
+
+  carp(CARP_DETAILED_DEBUG,
+      "Corr: %.6f Eta: %.6f Beta: %.6f Shift: %.6f",
+      *correlation, *eta, *beta, *shift);
+
+  return true;
+}
+
+// helper function for get_linkable_peptides
+// creates single and cross-linked peptides, considering every pair
+// of peptides and every possible link site
+
+void add_linked_peptides(
+  vector<LinkedPeptide>& all_ions, 
+  set<XLinkablePeptide>& peptides, 
+  XLinkBondMap& bondmap, 
+  int charge) {
+
+  vector<LinkedPeptide> ions;
+
+  // iterate over both sequences, adding linked peptides with correct links
+  for (set<XLinkablePeptide>::iterator iterA = peptides.begin(); iterA != peptides.end(); ++iterA) {
+
+    XLinkablePeptide pepA = *iterA;
+    string seqA = pepA.getModifiedSequenceString();
+    
+    // add unlinked precursor
+    LinkedPeptide lp = LinkedPeptide(charge);
+    XHHC_Peptide p = XHHC_Peptide(seqA);
+    lp.addPeptide(p);
+
+    //vector<Peptide*>& crux_peptides = get_peptides_from_sequence(seqA);
+
+    int max_missed_cleavages = Params::GetInt("missed-cleavages");
+    int seqA_missed_cleavages = pepA.getMissedCleavageSites();
+    carp(CARP_DEBUG, "seqA:%s %i %i", seqA.c_str(), pepA.numLinkSites(), seqA_missed_cleavages);
+    if (Params::GetBool("xlink-include-deadends") && 
+      seqA_missed_cleavages <= (max_missed_cleavages+1)) {
+      
+      for (size_t link_idx = 0;link_idx < pepA.numLinkSites();link_idx++) {
+        int seq_idx = pepA.getLinkSite(link_idx);
+        int total_cleavages = seqA_missed_cleavages;
+        if (pepA.linkSitePreventsCleavage(link_idx)) {
+          total_cleavages--;
+        }
+        if (total_cleavages <= max_missed_cleavages) {   
+          ions.push_back(LinkedPeptide((char*)seqA.c_str(), NULL, seq_idx, -1, charge));
+        }
+      }
+    } /* xlink-include-dead-ends */
+
+    if (Params::GetBool("xlink-include-selfloops") && 
+        (seqA_missed_cleavages <= (max_missed_cleavages+2))) {
+      
+      for (size_t link_idx1 = 0;link_idx1 < pepA.numLinkSites()-1;link_idx1++) {
+        for (size_t link_idx2 = link_idx1+1;link_idx2 < pepA.numLinkSites();link_idx2++) {
+          int seq_idx1 = pepA.getLinkSite(link_idx1);
+          int seq_idx2 = pepA.getLinkSite(link_idx2);
+
+          if (bondmap.canLink(pepA.getPeptide(), seq_idx1, seq_idx2)) {
+            int total_missed_cleavages = seqA_missed_cleavages;
+            if (pepA.linkSitePreventsCleavage(link_idx1)) {
+              total_missed_cleavages--;
+            }
+            if (pepA.linkSitePreventsCleavage(link_idx2)) {
+              total_missed_cleavages--;
+            }
+            if (total_missed_cleavages <= max_missed_cleavages) {
+              ions.push_back(LinkedPeptide((char*)seqA.c_str(), NULL, seq_idx1, seq_idx2, charge));
+            }
+          }
+        }
+      }
+    } /* xlink-include-selfloops */
+
+    /* xlink-inter/intra links */
+    if (seqA_missed_cleavages <= max_missed_cleavages+1) {
+    
+      for (set<XLinkablePeptide>::iterator iterB = iterA; iterB != peptides.end();++iterB) {
+        XLinkablePeptide pepB = *iterB;
+        string seqB = pepB.getModifiedSequenceString();
+        int seqB_missed_cleavages = pepB.getMissedCleavageSites();
+        if (seqB_missed_cleavages <= (max_missed_cleavages+1)  && XLink::testInterIntraKeep(pepA.getPeptide(), pepB.getPeptide())) {
+          for (size_t link_idx1 = 0;link_idx1 < pepA.numLinkSites();link_idx1++) {
+            for (size_t link_idx2 = 0; link_idx2 < pepB.numLinkSites();link_idx2++) {
+              int seq_idx1 = pepA.getLinkSite(link_idx1);
+              int seq_idx2 = pepB.getLinkSite(link_idx2);
+              if (bondmap.canLink(pepA.getPeptide(), pepB.getPeptide(), seq_idx1, seq_idx2)) {
+
+                int totalA = seqA_missed_cleavages;
+                if (pepA.linkSitePreventsCleavage(link_idx1)) {
+                  totalA--;
+                }
+
+                int totalB = seqB_missed_cleavages;
+                if (pepB.linkSitePreventsCleavage(link_idx2)) {
+                  totalB--;
+                }
+
+                if (totalA <= max_missed_cleavages && 
+                    totalB <= max_missed_cleavages) {
+                  ions.push_back(LinkedPeptide((char*)seqA.c_str(), (char*)seqB.c_str(), seq_idx1, seq_idx2, charge));
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  } // get next pepA 
+  all_ions.insert(all_ions.end(), ions.begin(), ions.end());
+}
+
+// append one shuffled decoy to decoys vector
+void add_decoy(vector<LinkedPeptide>& decoys, LinkedPeptide& lp) {
+  vector<XHHC_Peptide> peptides = lp.getPeptides();
+  LinkedPeptide decoy = LinkedPeptide(lp.getCharge()); 
+  XHHC_Peptide pepA_shuffled = peptides[0].shuffle();
+  decoy.addPeptide(pepA_shuffled);
+  if (lp.size() == 2) {
+    XHHC_Peptide pepB_shuffled = peptides[1].shuffle();
+    decoy.addPeptide(pepB_shuffled);
+  }
+  decoy.setDecoy();
+  decoy.calculateMass(AVERAGE);
+  decoys.push_back(decoy);
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
+
diff --git a/src/app/xlink/xhhc.h b/src/app/xlink/xhhc.h
new file mode 100644
index 0000000..f99c867
--- /dev/null
+++ b/src/app/xlink/xhhc.h
@@ -0,0 +1,111 @@
+/**
+ * \file xhhc.h
+ * $Revision: 1.00$
+ * \brief utility routines for xlinking programs
+ */
+#ifndef XHHC_H
+#define XHHC_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string>
+#include <vector>
+#include <map>
+#include <set>
+#include <sstream>
+#include <fstream>
+
+/*Crux Includes*/
+#include "util/utils.h"
+#include "model/Spectrum.h"
+#include "io/carp.h"
+#include "model/PeptideConstraint.h"
+#include "model/Peptide.h"
+#include "model/PeptideSrc.h"
+#include "model/Protein.h"
+#include "model/Database.h"
+#include "model/DatabaseProteinIterator.h"
+#include "parameter.h"
+#include "model/objects.h"
+#include "util/crux-utils.h"
+#include "model/Ion.h"
+
+#include "XLinkBondMap.h"
+#include "XLinkablePeptide.h"
+
+// TODO: get rid of these
+#define MIN_WEIBULL_MATCHES 40 
+#define MIN_XCORR_SHIFT -5.0
+#define MAX_XCORR_SHIFT  5.0
+#define XCORR_SHIFT 0.05
+
+// mine
+#define BONFERRONI_CUT_OFF_P 0.0001
+#define BONFERRONI_CUT_OFF_NP 0.01
+#define MIN_WEIBULL_SAMPLES 750 
+#define MIN_PRECURSORS 3
+
+/**
+ * \returns the peptide objects from a sequence string
+ * TODO - eliminate this from xlink (this is a HACK)
+ */
+std::vector<Crux::Peptide*>& get_peptides_from_sequence(
+  std::string& sequence ///< the peptide sequence string
+  );
+
+/**
+ * frees allocated peptides
+ */
+void free_peptides();
+
+
+bool hhc_estimate_weibull_parameters_from_xcorrs(
+  FLOAT_T* scores,
+  int num_scores,
+  FLOAT_T* eta,
+  FLOAT_T* beta,
+  FLOAT_T* shift,
+  FLOAT_T* correlation,
+  Crux::Spectrum* spectrum,
+  int charge
+  );
+
+void get_linkable_peptides(
+  std::set<XLinkablePeptide>& peptides, 
+  XLinkBondMap& bondmap,
+  DatabaseProteinIterator* protein_iterator,
+  PeptideConstraint* peptide_constraint
+  ); 
+
+void add_linked_peptides(
+  std::vector<LinkedPeptide>& all_ions, 
+  std::set<XLinkablePeptide>& peptides, 
+  XLinkBondMap& bondmap, 
+  int charge
+  );
+
+/**
+ * appends one shuffled decoy to a vector
+ */
+void add_decoy(
+  std::vector<LinkedPeptide>& decoys, ///< decoy list to add to
+  LinkedPeptide& lp ///< linked peptide to generate decoy from
+  );
+
+
+/**
+ * Generates all of the product precursors for the
+ * search.
+ */
+void find_all_precursor_ions(
+  std::vector<LinkedPeptide>& all_ions ///< all of the precursors found -out 
+  );
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/xlink/xhhc_all.ms2 b/src/app/xlink/xhhc_all.ms2
new file mode 100644
index 0000000..003897b
--- /dev/null
+++ b/src/app/xlink/xhhc_all.ms2
@@ -0,0 +1,291285 @@
+H	CreationDate	8/03/09
+H	Extractor	Paul Draghicescu
+H	ExtractorVersion	1
+H	ExtractorOptions	1
+S	2	2	1879.9788246
+Z	2	3757.942
+532.79608 2031.2
+549.11102 817.4
+617.05151 641.3
+630.36664 698.0
+676.62189 876.1
+740.10687 591.2
+795.27417 1026.6
+828.77667 666.9
+844.69714 679.2
+876.97632 671.7
+902.55115 596.1
+917.15472 680.1
+1048.62537 784.7
+1057.20874 769.7
+1145.96375 636.5
+1188.06238 643.8
+1198.78638 3098.6
+1265.39343 631.9
+1422.25488 730.8
+1488.79993 662.4
+1525.31519 877.4
+1708.27649 657.9
+1820.35071 675.2
+1879.48364 20218.5
+1879.76807 2302.7
+1881.32520 641.6
+1907.07617 7176.9
+1992.55762 668.7
+S	3	3	1907.47040793
+Z	3	5719.136
+Z	2	3813.093
+524.15204 596.1
+532.79120 1980.8
+553.41504 605.6
+574.61249 730.6
+663.78040 561.4
+676.60864 1223.2
+732.79938 578.8
+795.26025 935.5
+821.10126 629.6
+821.15369 656.5
+1004.35529 642.5
+1021.03033 723.6
+1188.09424 730.1
+1198.77527 3437.2
+1289.01233 602.5
+1394.47009 716.3
+1525.21667 791.3
+1694.10901 609.1
+1715.67542 737.9
+1860.11658 552.5
+1878.96204 1349.1
+1879.46301 20075.2
+1879.95789 1427.2
+1907.15808 6991.8
+S	5	5	1879.94740793
+Z	3	5636.567
+Z	2	3758.047
+532.79602 1683.5
+567.13831 714.9
+579.68304 725.8
+630.36414 704.2
+676.63354 1205.4
+714.25244 731.2
+748.07898 582.3
+795.25439 990.5
+812.07336 646.3
+852.71710 613.7
+858.00562 785.1
+1057.24121 1046.2
+1198.78259 2960.2
+1226.76050 655.3
+1229.32288 660.9
+1266.99292 674.7
+1876.66333 698.4
+1878.53992 920.3
+1878.89233 1607.5
+1879.21167 941.1
+1879.52026 20107.9
+1880.14270 1662.2
+1907.09509 6936.1
+1930.45544 1044.9
+S	6	6	1907.5108246
+Z	2	3813.174
+Z	3	5719.257
+532.69525 1824.8
+549.16852 954.6
+552.03680 543.1
+554.37274 622.8
+587.51776 618.9
+676.63202 1021.6
+731.13135 753.0
+795.26636 869.0
+882.87476 745.4
+884.12433 729.5
+1057.23926 870.8
+1140.49280 845.4
+1198.55811 3042.2
+1446.55029 726.6
+1452.36011 685.7
+1616.11462 749.0
+1871.53271 700.1
+1879.13513 1068.8
+1879.51404 20381.0
+1879.88123 1188.3
+1907.10974 7605.4
+1907.54907 742.7
+1930.65247 785.3
+1946.53552 619.9
+S	8	8	1879.94040793
+Z	2	3758.033
+Z	3	5636.546
+514.09454 621.2
+532.81281 1926.8
+542.63373 655.7
+549.14667 832.3
+630.38959 701.0
+676.60870 771.2
+782.38782 631.0
+795.26740 940.9
+938.32007 652.4
+1145.34155 682.4
+1175.14490 582.1
+1188.28284 843.3
+1198.81274 3388.8
+1525.38818 917.4
+1777.50208 742.1
+1786.53296 651.7
+1872.45422 579.0
+1878.50342 1015.1
+1878.83569 2052.2
+1879.45984 18357.9
+1879.89136 3805.2
+1880.10315 1071.5
+1880.33533 878.6
+1880.69421 1143.2
+1881.14429 681.5
+1907.04468 7934.0
+1918.68506 852.8
+1930.54565 823.5
+S	10	10	1879.9278246
+Z	2	3758.008
+Z	3	5636.508
+532.69092 543.8
+532.75598 1344.8
+573.50427 610.0
+602.56573 615.5
+630.38483 713.2
+676.63428 955.5
+765.96735 612.7
+795.25659 894.0
+1057.22913 783.5
+1198.69324 3324.6
+1412.32483 575.5
+1525.39148 979.7
+1638.20105 703.3
+1667.99231 702.1
+1777.46252 875.4
+1879.08325 1664.9
+1879.51733 20154.8
+1879.93872 1360.6
+1880.85254 690.3
+1905.94080 647.8
+1906.97937 6928.9
+1907.22534 1715.0
+S	11	11	1907.46640793
+Z	3	5719.124
+Z	2	3813.085
+531.98956 611.7
+532.32184 584.0
+532.75726 1596.7
+543.64069 618.3
+611.73938 620.6
+630.36926 1015.0
+643.01257 602.2
+676.62537 1057.2
+688.99475 614.4
+731.07697 700.0
+795.25818 694.5
+981.56708 610.5
+997.93616 596.0
+1021.03485 819.4
+1022.15814 655.4
+1057.24194 893.1
+1059.49316 590.1
+1190.25818 685.3
+1198.69580 3270.0
+1383.20776 552.2
+1732.90613 641.8
+1856.17993 710.6
+1878.49011 988.3
+1878.99792 1028.5
+1879.22766 1718.1
+1879.51282 20031.8
+1880.51685 916.8
+1880.75415 859.8
+1884.80103 702.6
+1906.98169 6966.6
+1907.31079 902.9
+1918.75537 802.2
+1930.44360 964.2
+1930.93457 701.1
+1954.12524 609.8
+S	13	13	1879.94540793
+Z	2	3758.043
+Z	3	5636.561
+522.08575 656.9
+532.76007 1544.9
+615.47748 677.2
+630.37927 978.8
+676.65424 1090.3
+795.25671 697.1
+917.72858 616.8
+1020.13702 559.9
+1145.24011 642.2
+1198.70557 3375.6
+1384.06433 655.7
+1426.72363 558.0
+1667.98157 685.5
+1876.88440 702.6
+1878.38391 1025.9
+1879.28442 3418.1
+1879.55908 19765.2
+1880.73950 784.4
+1881.06787 737.3
+1906.96265 7354.6
+1930.49109 1080.3
+S	14	14	1907.40199127
+Z	3	5718.931
+Z	2	3812.956
+519.19110 696.0
+532.76770 2333.3
+710.65991 644.2
+791.02307 714.1
+795.25433 998.7
+845.36768 674.4
+1000.66425 676.4
+1177.45459 634.3
+1187.97852 799.8
+1198.72693 3151.0
+1221.86792 796.3
+1224.42224 604.7
+1249.99634 640.1
+1264.90369 648.9
+1342.24170 585.6
+1420.80054 621.6
+1525.27234 723.0
+1791.36267 699.7
+1806.25452 753.2
+1877.95850 853.2
+1879.00464 3394.4
+1879.46179 19619.3
+1879.90234 3320.6
+1880.45117 670.5
+1881.82739 800.7
+1907.04553 7282.0
+1907.28979 937.4
+1930.42578 1272.1
+S	16	16	1879.9578246
+Z	2	3758.068
+Z	3	5636.598
+508.42441 790.0
+532.74768 2281.3
+630.39038 764.0
+664.88202 661.3
+676.62109 1312.5
+731.10443 768.5
+739.63428 637.8
+766.64417 644.7
+795.26428 819.7
+953.42719 659.6
+1057.20239 918.9
+1188.09741 854.2
+1188.46509 622.9
+1198.67834 3153.8
+1287.40674 610.6
+1366.33887 589.3
+1504.72375 611.0
+1525.35620 739.2
+1869.07507 682.8
+1876.96521 730.8
+1877.18298 660.4
+1878.72778 756.0
+1879.47852 20347.5
+1880.06519 1053.8
+1907.05017 7533.6
+1918.67273 684.6
+1930.52649 1396.2
+S	17	17	1907.4358246
+Z	2	3813.024
+Z	3	5719.032
+515.14832 690.4
+521.58386 662.5
+532.73737 2009.2
+632.46771 610.0
+633.11865 697.7
+676.59900 1078.2
+713.36658 644.7
+731.10956 644.6
+774.25153 608.8
+875.98230 669.5
+881.06781 566.5
+919.91913 712.2
+1021.46765 592.2
+1051.28308 564.8
+1057.18176 1042.3
+1146.26270 575.4
+1171.87646 640.3
+1198.65161 3468.8
+1323.02734 580.8
+1500.68970 681.5
+1525.39404 776.9
+1877.35242 577.6
+1877.42444 587.9
+1878.86694 1001.8
+1879.02917 948.7
+1879.42053 19983.4
+1879.87573 1504.1
+1907.08350 7001.7
+1930.53735 1307.3
+S	19	19	1879.89440793
+Z	3	5636.408
+Z	2	3757.941
+532.80219 2250.4
+534.91937 722.8
+646.46307 610.3
+676.59332 791.3
+731.11078 602.9
+732.09424 641.6
+795.24683 1136.0
+796.93298 644.0
+811.84137 598.8
+874.09497 654.4
+1057.16943 788.9
+1079.25110 574.0
+1188.31006 1049.8
+1198.79919 3745.5
+1207.93884 638.3
+1241.62268 649.5
+1434.15222 686.0
+1489.01172 816.7
+1777.57703 737.3
+1871.86560 825.3
+1878.67358 598.5
+1879.39917 19739.9
+1879.68652 3691.2
+1880.48926 1002.8
+1907.03210 7738.1
+1918.66846 786.4
+1930.54712 1232.1
+S	20	20	1907.44524127
+Z	3	5719.06
+Z	2	3813.043
+526.56818 572.4
+532.82916 2043.8
+609.56537 706.1
+653.85492 540.4
+676.63538 864.9
+762.60321 618.9
+795.26373 1005.3
+808.71088 534.3
+812.17493 614.4
+860.32477 605.2
+910.28467 636.3
+940.15271 618.2
+1024.16064 639.8
+1057.23096 997.7
+1068.00952 624.5
+1097.52966 579.3
+1198.86267 3208.7
+1438.41235 597.9
+1510.88708 565.5
+1651.55066 898.9
+1878.01208 660.0
+1878.61865 776.9
+1879.22119 3728.9
+1879.50439 19125.1
+1881.05371 790.0
+1907.04321 7615.1
+1907.51709 874.0
+1930.52197 1123.4
+S	22	22	1879.89340793
+Z	2	3757.939
+Z	3	5636.405
+532.82764 1458.9
+630.40833 717.2
+651.91327 589.5
+676.62708 811.1
+746.75433 645.4
+756.64825 579.8
+776.67993 670.3
+795.27161 1204.0
+814.38452 584.6
+889.83563 654.8
+927.78827 703.2
+944.46973 649.4
+954.58344 672.6
+1034.73767 720.3
+1110.90588 735.1
+1140.50879 677.8
+1188.31287 770.0
+1198.85779 2781.4
+1222.48328 701.3
+1372.42004 648.8
+1667.89551 611.3
+1797.16528 732.0
+1866.23755 710.8
+1876.63635 661.0
+1878.25696 935.4
+1878.51074 1541.9
+1879.51062 19827.3
+1880.34082 1039.0
+1881.41455 745.2
+1882.46899 768.9
+1906.96204 7578.2
+1955.31262 646.4
+1958.53308 654.8
+S	25	25	1879.89499127
+Z	3	5636.41
+Z	2	3757.942
+532.77618 1979.2
+609.44568 769.8
+615.31610 592.2
+630.39294 648.0
+783.26971 718.3
+783.52979 611.1
+809.24133 776.8
+915.38788 778.5
+1018.72833 647.8
+1057.26917 899.1
+1113.25842 572.5
+1176.16064 706.3
+1198.74353 3303.6
+1269.99719 597.3
+1525.39221 1096.0
+1652.15234 591.5
+1813.04224 562.7
+1877.45630 651.3
+1878.38123 970.2
+1879.21033 3855.3
+1879.51953 19030.7
+1880.98389 784.5
+1907.06250 7553.7
+1930.53442 940.8
+S	27	27	1879.91299127
+Z	2	3757.978
+Z	3	5636.464
+509.94131 783.0
+531.05865 604.1
+532.82117 2071.2
+630.34357 748.8
+668.83289 583.4
+671.51874 606.2
+676.61230 1330.2
+795.26984 803.9
+834.48334 605.8
+909.25122 621.9
+1139.02234 646.9
+1143.68335 669.6
+1187.99768 955.0
+1198.84302 3069.0
+1241.23254 598.3
+1608.21277 779.5
+1830.76587 682.0
+1878.19995 974.6
+1879.45374 20343.3
+1879.72156 2175.1
+1907.05176 7597.5
+1930.45203 1069.7
+S	28	28	1907.4718246
+Z	3	5719.14
+Z	2	3813.096
+532.77649 1014.5
+532.81415 1318.7
+549.10278 720.3
+573.71637 825.4
+609.84259 542.6
+635.38361 547.2
+661.38666 606.1
+676.62390 692.0
+676.69440 759.9
+693.06012 556.0
+731.03711 724.1
+795.29346 936.5
+835.17383 698.9
+1019.89832 1013.7
+1057.22217 759.2
+1167.62671 701.4
+1198.82300 3082.0
+1199.02124 591.0
+1260.17810 632.6
+1715.93542 600.4
+1777.59460 859.0
+1878.51575 813.2
+1878.69043 929.7
+1878.98230 2004.1
+1879.48621 19147.1
+1879.76013 3227.5
+1879.97302 2705.3
+1907.02832 7710.6
+1918.68457 783.4
+S	30	30	1879.8858246
+Z	2	3757.924
+Z	3	5636.382
+510.36700 527.9
+528.57361 584.0
+532.83008 2032.9
+657.26471 695.2
+676.63245 1015.3
+731.08215 848.1
+762.42139 615.3
+795.26257 991.7
+858.00458 688.0
+887.36615 708.1
+894.94781 729.2
+895.56616 627.9
+1011.20111 705.9
+1019.09821 621.7
+1198.86731 3126.5
+1238.75110 623.5
+1257.39941 701.2
+1303.21606 801.8
+1328.52710 728.5
+1375.11499 725.5
+1483.51855 622.1
+1650.57764 589.0
+1669.58447 624.8
+1745.56580 721.0
+1777.44067 710.5
+1879.05420 1181.5
+1879.29761 4789.1
+1879.54834 18476.5
+1880.13013 1339.2
+1880.72864 918.8
+1880.99072 654.1
+1907.02454 7884.3
+1930.50061 1010.8
+S	31	31	1907.46124127
+Z	2	3813.075
+Z	3	5719.108
+529.54547 701.7
+532.79376 2229.0
+609.62927 691.6
+643.39520 725.6
+676.62683 942.7
+731.36414 563.2
+749.37939 614.9
+760.58899 545.9
+781.92493 574.8
+795.26880 845.8
+868.30933 608.2
+981.19299 587.8
+1021.07849 579.0
+1116.79309 506.9
+1129.47192 589.4
+1192.92725 602.5
+1198.77173 3126.6
+1207.36719 784.4
+1239.84900 633.8
+1415.83655 572.8
+1465.52258 579.1
+1643.11536 668.0
+1718.12317 614.2
+1777.59241 851.9
+1875.05347 932.2
+1879.48474 20132.9
+1879.84619 815.4
+1880.01440 677.2
+1880.70605 721.0
+1887.33728 647.4
+1907.02197 7693.2
+1917.46814 575.5
+1930.50513 921.6
+1942.88831 625.5
+S	33	33	1879.98940793
+Z	3	5636.693
+Z	2	3758.131
+525.19183 611.6
+532.77667 1566.8
+540.82422 602.2
+549.09857 996.4
+562.99225 594.7
+573.09741 593.7
+574.11340 699.4
+629.05884 590.6
+676.61749 1113.3
+781.99060 567.4
+826.37238 699.0
+836.32184 697.9
+967.24744 625.6
+967.82300 598.9
+1057.22766 701.3
+1198.54907 640.8
+1198.74487 3132.9
+1275.51147 650.5
+1458.60425 687.8
+1878.37646 739.3
+1878.91858 1445.6
+1879.48438 20063.3
+1879.92847 1811.8
+1880.48816 845.7
+1884.02832 884.0
+1907.04382 7997.5
+1915.55066 680.6
+1962.61316 655.1
+1990.53210 721.5
+S	34	34	1907.53140793
+Z	2	3813.215
+Z	3	5719.319
+532.76733 2612.4
+560.27374 583.3
+630.35339 708.4
+676.62408 1040.4
+795.26605 861.7
+827.82581 714.3
+955.47577 610.2
+1019.86493 765.8
+1198.71741 3053.2
+1248.39563 672.9
+1525.30493 669.8
+1828.89746 637.3
+1860.06335 787.1
+1878.38965 672.6
+1878.87524 1710.6
+1879.22119 3675.0
+1879.48303 19608.6
+1880.02551 2240.8
+1880.82141 578.8
+1907.08215 7318.4
+S	36	36	1879.89399127
+Z	3	5636.407
+Z	2	3757.94
+521.96149 697.6
+532.73090 2138.2
+549.10229 874.6
+596.16278 550.4
+605.48529 627.6
+613.06616 713.6
+676.60358 1077.2
+732.59314 705.0
+795.25775 920.3
+808.44727 574.3
+829.91144 618.6
+831.07446 641.1
+869.79517 697.4
+1198.64661 3281.5
+1198.81494 728.3
+1777.49060 850.6
+1876.14441 767.1
+1878.64624 764.0
+1878.98315 1483.9
+1879.45911 18797.2
+1880.42871 841.0
+1907.05627 7648.6
+1930.39478 1154.5
+1955.19531 702.4
+S	37	37	1907.44240793
+Z	2	3813.037
+Z	3	5719.052
+532.76062 1471.8
+572.98706 630.5
+589.67670 757.6
+676.62177 1284.0
+795.28070 1220.9
+826.55695 548.3
+968.19855 648.2
+1017.31348 601.1
+1057.20557 912.9
+1198.70715 3145.0
+1294.77600 591.7
+1498.93689 707.8
+1499.25793 780.8
+1777.54858 686.1
+1845.04736 602.2
+1878.05603 731.5
+1879.03650 2455.4
+1879.49170 20336.4
+1879.99744 2259.4
+1907.09180 7357.3
+S	39	39	1907.43940793
+Z	3	5719.043
+Z	2	3813.031
+532.70984 1926.2
+664.44110 607.9
+676.60364 1178.9
+711.61780 635.8
+735.33643 680.5
+749.62164 804.6
+795.27826 690.6
+831.45190 580.4
+948.65082 675.3
+1198.58691 3352.0
+1223.49121 619.5
+1305.02319 611.5
+1507.88855 779.4
+1687.72070 694.2
+1730.47522 637.9
+1777.45874 798.9
+1804.85718 689.4
+1878.38635 756.3
+1879.05298 1062.8
+1879.44800 19918.1
+1880.09583 849.1
+1907.12695 7532.2
+1930.38733 1142.3
+1959.82996 806.7
+S	41	41	1879.88724127
+Z	2	3757.927
+Z	3	5636.386
+528.26910 602.0
+532.68054 1907.0
+607.41357 603.4
+614.04156 718.1
+627.67554 690.7
+647.02460 625.6
+676.62860 1109.2
+795.27380 919.1
+978.18878 674.9
+1098.94177 645.7
+1118.95715 605.3
+1198.52588 3392.0
+1285.91968 668.1
+1525.35510 844.8
+1742.70764 611.1
+1760.48499 646.9
+1782.06250 642.2
+1876.61877 877.7
+1879.50696 19589.8
+1907.02319 7410.8
+1907.32605 844.1
+1930.55664 936.6
+S	42	42	1907.39899127
+Z	2	3812.95
+Z	3	5718.922
+532.72076 2072.0
+589.40186 792.4
+647.68176 633.8
+676.62659 1004.1
+795.27954 893.8
+809.98615 695.7
+810.08356 687.2
+827.05414 659.4
+887.47858 656.5
+1188.06580 741.5
+1198.61292 3632.5
+1238.64807 728.9
+1281.20801 696.5
+1357.21509 682.5
+1423.51318 673.2
+1496.69556 659.2
+1526.45532 796.7
+1567.81335 710.0
+1873.88159 549.6
+1878.54736 892.4
+1878.86829 1217.6
+1879.13440 934.5
+1879.49426 20423.5
+1879.86938 1277.5
+1880.13049 1440.0
+1880.42822 1117.4
+1880.78467 792.5
+1907.03198 7842.0
+S	44	44	1879.93224127
+Z	3	5636.521
+Z	2	3758.017
+532.68390 1777.1
+555.97992 687.0
+603.71881 692.3
+676.60803 724.7
+795.27435 1134.7
+857.94043 638.1
+1022.18347 674.9
+1057.18152 591.8
+1095.73145 727.0
+1108.33057 662.8
+1134.31592 656.8
+1137.88843 587.9
+1198.52637 3326.0
+1250.73389 745.5
+1411.80066 701.1
+1525.22925 881.2
+1571.53320 572.4
+1876.91589 752.8
+1878.30261 826.1
+1878.79895 1756.4
+1879.45313 18443.9
+1880.10071 980.0
+1880.62341 1088.3
+1907.02307 7537.4
+1907.29785 694.2
+1930.40027 1044.3
+S	45	45	1907.47040793
+Z	3	5719.136
+Z	2	3813.093
+532.70117 1875.3
+538.18689 692.5
+546.56262 639.5
+550.32806 616.7
+550.77594 642.9
+596.28503 584.3
+621.79608 662.3
+638.58051 606.3
+676.64453 841.3
+746.79218 668.3
+751.59900 535.2
+795.27869 1140.5
+877.91309 768.6
+1002.09180 615.9
+1031.32178 740.8
+1057.25305 903.1
+1188.28601 902.2
+1198.56982 2987.4
+1283.50366 571.7
+1321.21387 639.3
+1346.98596 648.8
+1879.10547 2889.3
+1879.52905 19737.4
+1879.95105 2792.5
+1880.48706 846.7
+1880.94409 928.9
+1900.19299 704.4
+1907.05151 7817.8
+1918.70374 787.1
+S	47	47	1879.9608246
+Z	2	3758.074
+Z	3	5636.607
+517.54932 590.5
+532.72827 1954.8
+536.54614 746.3
+549.13251 618.4
+564.97986 626.0
+566.25519 562.8
+630.38062 646.6
+676.63153 999.3
+703.00177 626.3
+1005.23920 633.2
+1198.63367 3299.0
+1523.29443 657.8
+1525.30518 846.1
+1538.47070 631.7
+1579.40320 682.7
+1743.53174 669.0
+1863.61597 598.4
+1871.13025 609.5
+1877.95386 817.3
+1878.61340 1169.6
+1879.08752 1496.6
+1879.52393 19945.7
+1879.98291 1785.3
+1880.41040 1091.4
+1907.07935 7766.3
+1930.49060 947.6
+S	49	49	1879.8518246
+Z	2	3757.856
+Z	3	5636.28
+532.71466 1709.0
+582.50214 653.5
+639.91022 728.5
+676.61261 623.5
+722.54004 577.0
+745.97015 607.4
+753.30585 822.1
+790.06714 660.2
+795.31714 846.2
+1086.38831 585.2
+1090.19507 639.7
+1188.03503 1022.2
+1198.60596 3337.1
+1525.25403 632.6
+1667.68127 626.8
+1878.43079 740.3
+1879.46082 19468.5
+1879.75244 3426.5
+1880.14417 1668.8
+1906.55115 664.0
+1906.95667 7367.7
+S	50	50	1907.3778246
+Z	2	3812.908
+Z	3	5718.858
+532.72168 1607.5
+593.44183 721.2
+603.50897 609.1
+662.42792 635.9
+674.82184 612.2
+676.61218 1373.7
+689.25616 593.0
+755.27472 639.7
+795.29749 977.2
+827.62854 638.2
+1056.48047 638.7
+1094.00366 701.9
+1095.02039 630.4
+1198.61865 3334.7
+1453.76758 566.6
+1475.39893 579.8
+1583.72937 612.2
+1769.49780 679.9
+1777.70325 906.5
+1878.73743 1174.0
+1878.98865 1217.1
+1879.46643 19601.8
+1879.73120 2813.5
+1879.94751 916.8
+1880.20703 732.3
+1882.79419 661.6
+1884.06885 815.2
+1906.99438 7844.4
+1930.41406 1034.1
+S	52	52	1879.88824127
+Z	3	5636.389
+Z	2	3757.929
+532.70056 2029.7
+549.13776 997.2
+676.62756 1017.4
+795.29156 1372.7
+799.71167 663.0
+1025.13086 633.3
+1086.59631 617.3
+1198.57190 3206.2
+1411.06421 639.5
+1869.48877 761.1
+1875.96692 937.4
+1878.84546 2002.8
+1879.23706 3137.9
+1879.51343 19171.1
+1880.31165 1565.5
+1906.71277 985.8
+1907.04846 7127.6
+1918.65906 797.9
+1930.53503 1390.9
+S	53	53	1907.4028246
+Z	3	5718.933
+Z	2	3812.958
+532.69232 2167.5
+597.07764 666.6
+676.62427 1303.5
+783.33533 849.5
+795.28632 945.3
+903.63690 590.3
+956.20178 763.3
+1000.03015 648.6
+1057.21936 1441.5
+1091.81519 643.1
+1139.96936 694.8
+1198.55176 3503.2
+1201.94946 695.6
+1385.73193 646.5
+1525.47656 870.9
+1544.24731 618.7
+1560.79675 771.1
+1874.34741 693.8
+1878.06628 635.0
+1878.61755 608.0
+1879.00305 1450.3
+1879.22034 1542.3
+1879.48499 19509.6
+1879.97620 2369.2
+1904.10339 724.8
+1907.00317 7427.2
+1930.64490 906.9
+S	55	55	1879.9168246
+Z	3	5636.475
+Z	2	3757.986
+532.69519 2045.8
+540.58911 564.1
+586.68811 617.2
+676.61865 932.7
+756.08636 601.1
+795.29230 719.8
+857.94928 732.2
+941.29059 656.9
+1057.23450 893.4
+1077.23035 632.6
+1187.97144 681.6
+1198.56067 3309.4
+1352.48511 794.2
+1471.26660 647.0
+1488.72412 651.1
+1499.22583 706.5
+1525.22546 1042.4
+1777.56323 619.3
+1879.49084 20192.1
+1880.26697 913.0
+1907.06226 7598.5
+1918.62915 757.9
+1930.33948 929.3
+S	56	56	1907.47640793
+Z	3	5719.154
+Z	2	3813.105
+532.71722 2211.4
+549.12164 931.1
+573.19397 669.3
+630.36548 735.5
+638.50610 600.0
+656.22174 593.3
+674.04761 614.3
+676.62408 934.4
+698.38049 617.0
+781.48242 571.2
+1019.86835 634.2
+1065.53247 848.3
+1119.16736 661.7
+1198.60547 3069.4
+1280.14221 613.6
+1628.47217 594.6
+1877.85864 914.0
+1879.11670 3540.0
+1879.49536 19926.5
+1879.86670 3278.1
+1881.13330 692.2
+1904.40503 729.3
+1907.01904 7218.8
+1930.49268 865.5
+S	58	58	1879.90099127
+Z	3	5636.428
+Z	2	3757.954
+532.68567 2067.6
+664.21509 677.1
+676.57001 908.8
+731.14532 917.6
+759.87219 624.4
+790.40308 610.4
+795.31384 1012.1
+810.19946 778.4
+856.96710 689.3
+961.29742 611.6
+1051.45959 670.3
+1187.67163 605.9
+1198.53796 3277.6
+1205.03906 612.8
+1717.18262 1422.1
+1822.69873 612.1
+1826.16602 672.2
+1870.98682 847.7
+1873.41748 738.4
+1879.34399 21545.5
+1907.05249 7317.1
+1930.65320 1291.5
+1933.49719 766.3
+S	59	59	415.633991267
+Z	2	829.42
+Z	3	1243.627
+111.75826 553.4
+112.59451 586.3
+116.10246 592.6
+116.10841 552.4
+120.81216 670.2
+121.81721 2612.5
+128.30545 550.1
+131.22322 600.1
+132.85747 548.8
+140.61696 568.3
+141.87494 600.8
+150.80518 659.6
+157.55612 534.2
+157.60408 703.7
+161.15138 546.9
+161.93669 525.8
+165.80678 805.3
+178.69522 662.0
+182.78491 635.0
+189.01566 752.5
+199.10725 843.8
+199.12079 872.4
+199.18570 747.0
+199.19720 2386.3
+199.21069 1463.1
+199.21671 1241.0
+199.28275 564.2
+199.29480 779.8
+199.31334 590.9
+205.25247 476.8
+205.25568 475.4
+215.25972 542.3
+235.22099 636.3
+235.62584 608.4
+249.16257 499.8
+251.07246 713.3
+254.82019 594.0
+262.05536 597.6
+271.92697 595.4
+272.24103 749.9
+301.14026 28153.3
+302.14352 5028.8
+308.90649 704.4
+339.12570 1302.1
+342.26202 759.8
+353.10291 1198.1
+360.77493 567.7
+362.98669 611.9
+367.12164 663.9
+369.41339 753.1
+389.77670 615.3
+401.24811 627.7
+427.55252 573.3
+429.05630 556.7
+469.85391 877.4
+476.77591 887.4
+482.66373 1098.2
+516.10083 618.0
+516.21906 559.9
+524.19879 633.1
+532.66290 1942.4
+549.15485 703.1
+611.57660 570.5
+630.41345 733.9
+634.00378 536.0
+634.03973 531.6
+676.59277 1076.2
+702.62610 603.5
+731.13361 753.2
+765.34851 582.6
+795.27869 1118.2
+804.42773 616.0
+864.69476 607.0
+881.17743 573.2
+888.52905 611.4
+929.26862 690.7
+956.00879 619.1
+998.07965 593.2
+1057.16736 854.7
+1083.04590 642.6
+1136.76575 589.7
+1198.47791 3281.4
+1198.62122 747.7
+1210.43176 623.8
+1236.88049 738.2
+1427.53369 672.0
+1488.88123 755.3
+1525.43848 761.2
+S	60	60	703.863241267
+Z	2	1405.879
+Z	3	2108.314
+182.79236 781.7
+188.25964 1015.7
+188.26599 924.5
+188.27864 1017.9
+188.28685 1108.9
+188.29834 1096.7
+188.30548 1005.1
+189.17334 547.3
+195.08545 557.6
+199.10785 987.8
+199.18436 898.8
+199.19519 987.7
+199.20625 2892.5
+199.21623 1034.6
+199.22733 971.1
+199.30389 976.6
+199.32614 825.9
+200.58270 585.0
+203.20694 640.5
+214.52719 666.1
+243.92668 697.3
+252.18523 664.7
+266.37265 576.7
+268.86758 594.3
+280.19797 902.8
+283.91705 691.3
+297.48047 620.7
+302.38065 588.0
+332.52158 723.9
+354.33044 624.1
+363.21295 3429.1
+370.52377 643.7
+371.31732 663.2
+393.29596 961.7
+413.26511 18413.5
+466.89450 652.9
+469.49982 566.6
+486.81259 622.5
+520.30548 608.6
+532.67181 1901.6
+549.18927 766.1
+665.49146 616.7
+676.63562 912.6
+732.90521 624.2
+765.87756 734.3
+879.57971 608.3
+886.82520 574.9
+887.38544 613.3
+1057.25671 683.8
+1093.68835 676.4
+1097.07764 666.2
+1179.52246 703.4
+1198.50647 3524.0
+1247.17297 776.5
+1525.51099 996.7
+1574.75513 731.9
+1613.12268 668.7
+1670.91577 695.8
+1874.13794 1086.5
+1878.10718 890.3
+1878.60120 614.5
+1879.26062 3626.9
+1879.53564 19502.2
+1880.92981 777.8
+1907.10242 7207.3
+1910.44092 672.7
+1930.70349 1224.9
+S	62	62	1879.9688246
+Z	2	3758.09
+Z	3	5636.631
+532.63574 2133.7
+549.13910 726.3
+676.62500 789.2
+701.81287 684.5
+731.10236 825.3
+795.30896 732.9
+942.04993 691.4
+1030.22791 671.5
+1033.33630 759.1
+1198.41394 3441.6
+1634.65442 637.7
+1667.71484 998.2
+1718.31079 1090.3
+1731.23181 692.9
+1875.23999 762.1
+1877.52905 609.5
+1877.71265 681.7
+1878.85571 1850.1
+1879.15613 2713.6
+1879.48450 19233.2
+1879.79541 2635.7
+1880.09875 2433.1
+1880.58923 990.3
+1907.06360 7273.5
+1930.54834 1225.7
+S	63	63	1907.52024127
+Z	2	3813.193
+Z	3	5719.285
+532.65802 1902.8
+549.14984 1181.6
+631.49188 651.8
+721.26434 649.8
+796.41333 790.7
+855.56201 602.8
+897.57764 692.9
+1010.15155 665.6
+1057.25208 979.4
+1085.19946 558.6
+1131.34021 704.4
+1188.21631 894.4
+1198.47546 3170.3
+1301.87683 644.1
+1525.41626 864.4
+1717.49133 1359.2
+1746.12952 568.4
+1823.79773 617.8
+1877.44336 674.8
+1878.07581 839.4
+1878.79736 1077.8
+1879.13977 1635.9
+1879.53967 19863.8
+1879.95935 1618.7
+1880.29285 1455.4
+1880.61926 939.8
+1881.04541 1398.8
+1882.73657 685.2
+1907.05188 7535.0
+S	65	65	1879.92240793
+Z	2	3757.997
+Z	3	5636.492
+532.70209 1996.4
+549.11658 804.1
+575.21161 610.9
+601.11890 606.7
+630.37000 692.8
+631.54132 647.5
+676.62964 1044.0
+702.56464 649.5
+726.36774 588.8
+794.64417 604.9
+795.28973 945.9
+880.08643 600.9
+1014.91840 623.8
+1108.89941 692.6
+1198.56824 3352.5
+1202.95105 753.2
+1215.31519 574.3
+1235.51013 636.1
+1667.68201 736.6
+1754.53088 725.5
+1878.72729 829.4
+1878.96777 1538.6
+1879.11450 1434.7
+1879.47314 19658.5
+1879.97156 1953.0
+1880.35706 617.5
+1880.43860 632.7
+1899.00952 679.7
+1907.06738 7038.7
+1918.68274 822.1
+1930.48022 809.5
+S	66	66	1907.47240793
+Z	3	5719.142
+Z	2	3813.097
+532.59039 701.7
+532.71844 1957.6
+532.76495 580.9
+613.80914 627.8
+618.40613 648.4
+630.43921 672.2
+671.45538 623.4
+676.62976 972.2
+697.61206 644.2
+731.15778 715.7
+782.68640 542.2
+858.09808 776.9
+885.55011 768.7
+1019.84686 1067.7
+1057.23157 857.9
+1198.60718 3358.7
+1269.72009 644.0
+1406.92749 657.9
+1525.48828 852.2
+1534.75391 620.5
+1678.63098 702.4
+1686.82422 656.2
+1777.40173 898.3
+1853.10266 648.7
+1878.69849 1239.3
+1879.50073 19390.9
+1880.02356 943.7
+1880.36584 881.8
+1880.51843 974.8
+1907.06445 7404.5
+1918.68579 730.4
+1930.65637 999.7
+1953.02075 724.8
+1970.18396 671.6
+S	68	68	1879.90599127
+Z	3	5636.443
+Z	2	3757.964
+519.62915 569.3
+532.70471 1888.1
+600.45068 683.3
+676.62762 1184.3
+782.88257 717.8
+795.30585 919.2
+859.35577 643.4
+1198.57983 3456.7
+1365.85229 688.8
+1394.94019 682.1
+1525.43530 745.3
+1599.43250 632.2
+1700.84326 644.7
+1777.14099 850.8
+1879.01282 1609.0
+1879.49731 19666.2
+1879.99280 1934.7
+1880.92065 809.0
+1883.79126 727.7
+1907.06177 7465.7
+1930.61475 884.1
+S	69	69	1907.47799127
+Z	3	5719.159
+Z	2	3813.108
+532.66718 543.9
+532.71179 2140.6
+549.15405 1020.0
+601.06744 529.1
+676.61237 877.2
+752.17413 706.7
+785.55939 670.1
+795.31134 884.1
+840.17523 606.9
+868.08344 612.6
+910.89703 603.1
+950.92963 599.9
+984.72748 580.3
+1057.21191 820.7
+1060.07288 668.9
+1093.92163 763.6
+1198.59863 3444.2
+1296.94873 638.7
+1497.34180 651.4
+1847.24048 648.6
+1869.85352 621.4
+1879.45398 20013.8
+1881.40784 645.8
+1883.12537 634.6
+1894.14355 653.1
+1907.03296 7215.5
+1930.55505 1064.7
+1970.34558 708.2
+S	71	71	1907.46540793
+Z	2	3813.083
+Z	3	5719.121
+532.58429 1892.7
+626.97156 577.9
+630.41821 987.1
+676.63947 833.8
+731.14008 683.6
+795.29413 1386.8
+924.59235 645.4
+1057.18640 584.6
+1198.30298 3462.4
+1304.61633 826.6
+1655.40222 931.8
+1872.77600 653.1
+1876.22168 744.2
+1878.68811 1320.6
+1879.11841 2329.0
+1879.52759 19109.8
+1879.92725 1849.2
+1880.06482 1353.2
+1880.40112 1291.7
+1907.04053 7021.1
+S	73	73	1879.87240793
+Z	3	5636.342
+Z	2	3757.897
+528.58337 550.9
+532.67139 2150.6
+630.41486 598.8
+630.56573 571.1
+649.30426 896.2
+676.61719 1189.9
+698.18622 665.1
+730.91650 548.2
+1190.73779 578.4
+1198.50671 3530.0
+1405.34961 835.7
+1746.28857 710.5
+1776.51318 681.4
+1870.16113 876.8
+1876.20129 908.7
+1879.46997 19753.0
+1879.74072 2028.3
+1879.96741 1171.5
+1882.27429 833.4
+1906.45947 550.5
+1907.04980 7196.6
+S	74	74	1907.42199127
+Z	2	3812.996
+Z	3	5718.991
+532.64911 1979.3
+573.19513 601.8
+675.21313 605.2
+676.64679 872.9
+696.38312 645.8
+800.36932 598.0
+1024.10547 714.7
+1057.26086 735.9
+1197.27905 598.2
+1198.45142 3064.8
+1421.20459 589.5
+1459.72766 607.7
+1539.02954 748.4
+1634.25452 680.0
+1731.07874 623.6
+1869.89612 584.9
+1870.23083 658.1
+1876.02124 904.5
+1877.47729 818.1
+1878.47864 1163.4
+1878.90442 1298.9
+1879.54114 18126.3
+1880.69177 1144.6
+1881.60083 839.1
+1907.05176 7275.4
+1918.68445 752.7
+1930.64673 1001.3
+S	76	76	1879.85499127
+Z	2	3757.862
+Z	3	5636.29
+520.27911 825.2
+526.54108 673.3
+532.69043 2119.0
+563.30243 685.5
+571.78638 716.5
+676.61084 1204.0
+740.87939 681.8
+744.79858 529.3
+984.81549 749.6
+1031.83826 588.8
+1052.78674 670.7
+1057.19312 905.8
+1109.60962 626.5
+1188.30444 851.9
+1198.54565 3110.2
+1235.59729 816.9
+1336.02673 633.5
+1525.36169 777.4
+1590.70496 572.7
+1605.17468 588.3
+1631.83374 630.4
+1657.50220 654.6
+1777.07031 917.9
+1878.59863 1229.3
+1879.17078 1343.5
+1879.45337 19994.5
+1880.34033 1555.5
+1881.21167 690.8
+1907.05383 7011.0
+1992.94922 696.6
+S	77	77	1907.4688246
+Z	3	5719.131
+Z	2	3813.09
+528.22644 632.7
+532.60675 725.3
+532.65723 1057.9
+549.20502 637.1
+585.13647 571.4
+589.61804 730.8
+630.45111 683.4
+652.13983 728.5
+790.58649 577.8
+795.31415 900.8
+841.66687 659.9
+1048.58398 553.5
+1171.51868 726.0
+1198.31140 1411.5
+1198.48560 2361.6
+1199.13855 643.0
+1209.06677 764.2
+1239.01160 556.4
+1323.63550 746.0
+1340.68896 543.5
+1489.30945 702.7
+1489.58362 698.5
+1518.86792 672.9
+1629.26160 616.8
+1676.66638 610.2
+1710.88818 711.8
+1747.55920 622.7
+1875.76843 914.9
+1878.66846 1496.6
+1879.10742 3623.1
+1879.50012 18410.5
+1879.86841 4476.4
+1880.63074 1400.3
+1883.16724 828.2
+1907.04492 7464.3
+1930.73425 837.1
+S	79	79	1879.89840793
+Z	3	5636.42
+Z	2	3757.949
+532.66064 2043.7
+542.41687 633.3
+607.77808 563.3
+630.41833 883.1
+676.60785 1158.6
+716.67572 627.6
+731.12427 688.9
+795.33282 959.1
+1005.38312 622.0
+1034.94983 644.7
+1098.57263 559.8
+1198.47852 3270.9
+1667.64380 667.1
+1878.74207 1214.6
+1879.09570 2265.4
+1879.44934 19982.6
+1879.79639 1563.1
+1880.10754 1358.1
+1880.70276 787.0
+1881.20166 742.4
+1883.77234 744.6
+1906.98694 6328.3
+1907.54126 1116.0
+S	80	80	1907.47399127
+Z	2	3813.1
+Z	3	5719.147
+532.65637 1895.4
+676.61957 836.6
+731.13416 679.1
+774.44952 564.8
+795.32275 913.1
+809.02393 580.4
+875.70599 516.0
+924.27612 725.3
+1000.15613 618.2
+1011.77856 602.9
+1043.21375 650.3
+1057.20813 831.8
+1198.46667 3318.1
+1387.22644 719.2
+1524.95215 667.6
+1525.40588 864.6
+1876.17310 974.3
+1877.69751 771.5
+1878.17944 808.0
+1879.46545 19742.1
+1907.04980 7619.5
+1907.41748 692.3
+1907.60669 646.3
+1934.63538 712.8
+S	82	82	1879.9028246
+Z	3	5636.433
+Z	2	3757.958
+532.72156 1618.3
+676.61182 1035.7
+731.15222 774.2
+795.32739 915.9
+851.62372 616.9
+899.08112 548.9
+911.14771 644.0
+1057.21069 804.5
+1070.62354 663.4
+1096.03003 711.4
+1198.61401 3479.4
+1548.12830 668.5
+1775.87830 704.9
+1816.42236 566.2
+1878.92712 658.3
+1879.47180 20105.2
+1879.85925 1275.7
+1880.14197 1228.3
+1880.77637 684.7
+1881.75757 664.0
+1898.78943 688.2
+1907.08069 7819.3
+1930.68079 901.2
+S	83	83	1907.39340793
+Z	2	3812.939
+Z	3	5718.905
+525.28119 757.3
+532.69861 1923.8
+533.27893 667.6
+549.16681 624.8
+560.91455 609.9
+598.07867 731.7
+623.17200 730.8
+630.41180 889.1
+676.63733 1153.6
+686.11359 659.7
+717.27264 726.8
+782.05280 626.4
+783.39886 756.7
+820.46973 616.8
+862.88391 625.0
+941.58850 726.7
+1025.50366 581.4
+1057.23145 914.9
+1090.24622 631.0
+1198.57117 2982.9
+1206.45496 635.3
+1341.31311 643.4
+1519.83044 702.4
+1525.39502 703.0
+1695.06042 585.3
+1821.11340 616.0
+1878.77393 1108.2
+1879.07104 1802.0
+1879.23718 2632.2
+1879.53613 20025.0
+1880.27991 1018.0
+1907.03625 7873.6
+1930.66577 865.3
+S	85	85	1879.9358246
+Z	2	3758.024
+Z	3	5636.532
+532.65875 1762.3
+549.14783 835.9
+560.16321 646.6
+630.39417 829.6
+670.85706 567.2
+676.62738 884.2
+695.35583 749.9
+755.66162 608.9
+795.33655 1011.3
+853.14667 685.4
+858.04156 667.0
+928.92773 655.7
+976.34198 605.2
+1042.17188 683.9
+1074.24902 655.7
+1116.98706 628.5
+1188.13391 838.4
+1198.47363 3040.3
+1464.05457 731.5
+1480.64148 602.3
+1751.51245 646.0
+1777.83850 799.1
+1876.91296 718.3
+1879.01074 1843.9
+1879.22424 2638.2
+1879.50793 19396.9
+1880.01160 1940.0
+1881.11450 714.5
+1904.16309 696.9
+1907.08765 7495.2
+1907.35327 963.0
+1930.53162 1009.2
+1940.03723 631.3
+S	86	86	1907.49840793
+Z	2	3813.149
+Z	3	5719.22
+532.66455 2080.3
+630.44501 677.3
+676.61273 1066.3
+795.32953 995.7
+862.08331 749.3
+972.06128 672.8
+1019.81848 761.3
+1050.46704 745.8
+1188.21594 647.7
+1198.49475 3341.3
+1298.78845 621.5
+1446.64319 613.1
+1525.53833 730.2
+1671.79761 596.9
+1848.83716 623.0
+1879.09802 1171.3
+1879.47021 20254.2
+1879.84229 1259.7
+1907.04822 7173.3
+S	88	88	1879.92140793
+Z	2	3757.995
+Z	3	5636.489
+532.67267 1558.2
+630.37189 582.7
+630.41974 785.2
+676.55530 713.8
+676.60730 705.4
+699.02185 656.0
+731.12836 643.1
+795.30829 879.6
+829.69495 607.6
+863.03912 530.8
+1112.40649 591.9
+1198.51550 2846.9
+1520.97888 566.0
+1525.45569 935.7
+1693.06641 680.0
+1834.54871 691.9
+1878.49292 696.6
+1878.86328 894.8
+1879.46118 19278.1
+1879.72498 3051.0
+1880.08203 1671.7
+1881.27930 756.0
+1907.07629 7501.6
+1907.60571 715.6
+1930.65747 958.9
+1937.16565 674.3
+S	89	89	1907.46440793
+Z	2	3813.081
+Z	3	5719.118
+532.62701 1978.8
+549.17627 858.3
+555.20337 648.3
+627.82813 602.4
+676.61737 1024.9
+795.32788 891.8
+812.53082 586.4
+855.33545 564.9
+880.52594 640.7
+957.57593 588.7
+963.21936 769.5
+1020.92816 610.2
+1057.20190 1286.6
+1116.24976 649.9
+1140.48206 715.8
+1198.39893 3319.1
+1247.70178 692.5
+1525.48853 933.3
+1570.91199 614.3
+1713.88245 665.3
+1869.37939 823.2
+1879.06018 3653.0
+1879.46179 19718.1
+1879.88171 3218.8
+1907.04858 7820.9
+1920.31555 669.9
+1930.70093 936.4
+1964.20630 703.6
+S	91	91	1879.92740793
+Z	2	3758.007
+Z	3	5636.507
+532.67737 1570.3
+541.77582 613.0
+676.48816 605.5
+676.63422 805.4
+690.71680 644.9
+719.90881 674.5
+735.33319 665.5
+765.45258 699.9
+777.77606 642.8
+793.30066 671.0
+795.32184 1169.4
+1046.78479 912.2
+1050.20947 646.6
+1057.24744 738.1
+1198.51489 3151.5
+1235.59644 667.4
+1338.05774 601.1
+1777.57532 689.8
+1856.68225 673.6
+1877.95691 835.1
+1878.08533 827.4
+1878.97131 3529.4
+1879.51917 18501.9
+1879.79272 3304.3
+1880.02637 3700.1
+1880.29932 1073.0
+1880.81799 824.8
+1881.27271 1028.4
+1906.83118 6813.5
+1930.60620 1129.9
+S	92	92	1907.4748246
+Z	2	3813.102
+Z	3	5719.149
+532.68018 1920.7
+561.96936 657.0
+634.55365 672.4
+676.62146 1044.5
+731.12823 805.4
+793.78162 574.1
+795.31995 948.3
+858.06079 735.2
+1057.20117 644.3
+1083.14941 793.8
+1101.73315 705.1
+1154.32275 569.0
+1180.26965 684.5
+1198.52039 2876.8
+1248.98743 591.1
+1255.52661 623.4
+1308.70703 667.7
+1454.67053 694.9
+1723.74597 679.6
+1875.49463 633.6
+1875.88525 694.1
+1876.82776 633.6
+1879.11023 1919.9
+1879.47998 20035.2
+1879.85327 2401.2
+1880.22217 669.4
+1906.93005 6379.6
+1930.63867 1068.3
+S	94	94	1879.9098246
+Z	2	3757.972
+Z	3	5636.454
+532.55334 2283.9
+630.39392 691.5
+795.32825 1070.1
+876.01776 583.8
+895.91589 654.9
+901.94299 652.3
+902.39081 614.3
+1057.24280 931.7
+1198.23865 3738.6
+1319.66321 643.1
+1408.53906 567.0
+1516.39368 696.6
+1875.90894 692.1
+1877.92004 933.3
+1878.55408 770.0
+1879.23218 3446.0
+1879.51819 19292.6
+1881.21265 724.7
+1881.39233 636.8
+1882.04968 736.4
+1907.05835 7666.5
+1930.56177 780.8
+1933.57971 634.0
+1936.99939 651.8
+S	95	95	1907.33240793
+Z	2	3812.817
+Z	3	5718.722
+521.75580 685.7
+531.30200 680.2
+532.70117 2166.0
+573.66089 620.8
+603.94409 594.3
+631.06464 616.7
+795.34882 828.5
+836.45056 602.8
+956.45880 713.2
+1057.24182 922.7
+1165.85449 625.2
+1198.57349 3452.0
+1223.49561 585.1
+1307.38391 652.0
+1450.21118 662.6
+1525.40857 1045.8
+1535.51709 696.5
+1869.53625 741.7
+1875.31470 673.4
+1879.20764 2412.2
+1879.52148 19954.6
+1879.87048 1768.4
+1881.00903 850.0
+1907.06714 7748.3
+1930.56702 839.0
+S	97	97	1879.90299127
+Z	3	5636.434
+Z	2	3757.958
+518.18372 640.3
+526.41302 671.8
+532.65887 2391.2
+549.13831 937.2
+588.25031 725.0
+639.02502 700.6
+639.66779 700.0
+676.62512 1175.3
+692.20343 683.6
+705.23651 569.8
+795.33594 818.4
+866.56763 773.7
+1198.46912 3034.7
+1463.31030 652.2
+1667.57629 875.8
+1878.25232 633.2
+1878.36353 639.3
+1878.86243 596.0
+1879.50659 20106.8
+1879.80676 1912.1
+1882.49243 664.5
+1907.02637 7390.5
+1930.54272 844.6
+S	98	98	1907.48399127
+Z	2	3813.12
+Z	3	5719.177
+532.65259 1595.3
+549.16876 760.1
+580.98438 584.8
+630.42126 788.8
+666.90839 751.8
+676.61774 899.4
+1019.84210 664.7
+1021.19617 605.0
+1198.46423 3534.1
+1436.67566 687.8
+1450.34802 693.9
+1815.30884 697.9
+1877.95996 723.3
+1878.73682 1746.0
+1879.47095 19946.1
+1880.19336 1234.1
+1907.07129 7196.2
+1907.91687 770.5
+1918.70569 904.0
+1931.07617 629.4
+S	100	100	1879.90824127
+Z	3	5636.449
+Z	2	3757.969
+532.62231 1476.4
+575.15955 645.7
+592.66028 633.7
+676.65527 863.0
+731.12799 711.9
+783.15277 769.3
+788.56219 658.2
+795.33527 932.1
+832.61200 674.2
+907.83923 579.7
+1021.13574 937.6
+1057.25989 834.6
+1072.12207 895.2
+1140.33057 652.6
+1198.38721 3115.0
+1361.80469 608.7
+1511.36536 664.9
+1666.76331 700.2
+1730.66174 755.2
+1803.52722 601.3
+1874.25989 785.4
+1877.46216 698.0
+1877.88330 762.4
+1878.43176 1058.9
+1879.56689 19680.3
+1879.96875 1400.7
+1880.68774 1373.8
+1907.02161 7689.6
+1930.59070 838.3
+S	101	101	1907.4728246
+Z	3	5719.143
+Z	2	3813.098
+532.63806 1938.1
+638.67676 634.7
+642.69678 597.0
+676.63849 1336.4
+795.34601 892.0
+902.96442 608.9
+914.74335 594.9
+1093.12695 679.7
+1108.88660 604.1
+1198.43909 3511.1
+1525.44348 860.7
+1585.66858 707.8
+1707.31226 700.4
+1714.68225 852.7
+1860.12292 654.4
+1879.25085 2093.3
+1879.52820 19821.0
+1882.79944 669.9
+1907.05823 7263.7
+1930.62012 1225.1
+S	103	103	1879.85540793
+Z	3	5636.291
+Z	2	3757.863
+532.65631 1856.3
+654.76459 636.7
+676.59601 1182.7
+680.43787 635.7
+795.34558 1027.7
+905.89899 616.4
+909.02490 611.8
+1198.46729 3296.4
+1255.25916 736.1
+1441.80322 737.2
+1876.70020 687.4
+1878.90417 2253.4
+1879.40881 20140.4
+1879.90576 2028.5
+1880.13086 820.4
+1880.37256 693.9
+1881.07983 832.2
+1889.61035 601.5
+1906.93286 7093.0
+1907.20886 1926.7
+1930.54993 977.0
+S	104	104	1907.4598246
+Z	3	5719.104
+Z	2	3813.072
+532.65155 2352.0
+592.04456 616.1
+676.62286 1031.6
+677.82013 628.8
+726.77313 702.1
+795.33844 745.2
+871.92645 652.5
+969.28815 596.0
+1057.22693 838.6
+1100.42896 738.5
+1198.44995 3242.5
+1438.24487 593.9
+1525.35364 705.7
+1550.42017 675.8
+1616.56067 636.4
+1733.24084 702.1
+1878.81921 1360.4
+1879.48242 19388.6
+1879.70483 3154.6
+1880.10938 1437.1
+1906.95471 6782.7
+1907.25073 1295.1
+S	106	106	1907.50440793
+Z	2	3813.161
+Z	3	5719.238
+532.50757 1615.2
+532.56012 596.7
+550.82538 547.7
+564.71808 618.8
+573.79175 712.1
+664.67389 623.8
+676.61548 820.0
+709.92358 642.9
+757.67828 663.3
+792.18274 628.2
+795.35223 874.9
+863.33002 582.4
+1019.88531 680.7
+1021.22180 673.4
+1150.49585 600.6
+1165.40247 641.8
+1188.25659 837.4
+1198.13391 2839.5
+1198.31519 983.4
+1252.58801 644.6
+1454.68311 870.9
+1554.30237 639.2
+1628.00208 618.7
+1777.48669 801.6
+1825.76965 628.4
+1865.19055 687.5
+1878.86694 1237.3
+1879.46228 19714.1
+1880.12292 1163.7
+1906.48730 726.9
+1907.02661 7380.1
+1918.68457 865.3
+1930.71472 1181.7
+1984.58203 648.0
+S	108	108	1879.86840793
+Z	3	5636.33
+Z	2	3757.889
+532.64490 1976.0
+538.00031 537.5
+540.67761 667.4
+566.00415 545.7
+568.42841 724.6
+667.14752 664.2
+676.63763 1058.2
+795.36243 820.9
+1188.81384 608.6
+1198.44312 3429.5
+1352.74915 666.1
+1672.31311 606.2
+1846.50330 610.5
+1877.84521 958.0
+1878.60791 1389.2
+1879.53467 17090.1
+1880.71777 1233.3
+1907.02991 7094.6
+S	109	109	1907.4668246
+Z	3	5719.125
+Z	2	3813.086
+532.62848 1875.8
+549.17255 987.4
+676.63831 990.5
+795.34332 837.5
+797.99353 608.1
+1018.73260 775.8
+1019.84845 816.0
+1020.94586 637.7
+1062.57422 709.1
+1198.40552 3431.5
+1308.50842 792.3
+1425.66260 725.3
+1525.49548 895.5
+1527.51123 638.4
+1594.15771 732.3
+1695.16602 603.9
+1876.38806 855.9
+1878.55823 787.9
+1878.74438 1822.5
+1879.52405 19550.4
+1880.09045 889.2
+1880.26465 672.1
+1880.51086 1171.6
+1881.04004 951.6
+1907.05237 7426.2
+1930.69641 846.8
+S	111	111	1907.48140793
+Z	2	3813.115
+Z	3	5719.169
+532.58276 2532.7
+582.40869 794.8
+676.62323 1116.6
+696.02075 630.4
+725.27490 627.3
+731.12817 1006.6
+782.87152 593.6
+782.91534 583.0
+795.35828 942.1
+1074.82153 623.9
+1098.82190 649.7
+1127.09729 638.1
+1198.30334 3291.8
+1223.96497 701.2
+1443.11072 614.5
+1525.42517 723.5
+1672.05542 570.7
+1777.70776 731.2
+1879.24512 2586.6
+1879.49060 19419.9
+1880.27136 840.3
+1907.05518 7658.6
+S	113	113	1879.88740793
+Z	2	3757.927
+Z	3	5636.387
+519.62701 657.9
+532.62250 1523.5
+532.65137 685.7
+533.94818 662.7
+549.15192 701.9
+580.36957 616.7
+647.11566 761.2
+676.60620 1042.7
+727.35638 625.1
+795.36200 1010.4
+1057.18933 729.5
+1119.77002 583.0
+1198.39063 3299.1
+1795.20605 682.5
+1877.20569 656.5
+1877.98792 779.1
+1878.81665 734.8
+1879.43542 19413.5
+1879.71594 3978.4
+1907.09192 7133.7
+1930.58582 861.2
+S	114	114	1907.48440793
+Z	2	3813.121
+Z	3	5719.178
+532.64783 1805.6
+543.85901 599.2
+578.15588 679.9
+630.42975 726.1
+676.61621 1327.7
+723.25751 701.2
+730.84521 616.7
+731.14484 661.9
+858.08459 639.8
+989.63416 758.9
+1030.05237 663.2
+1108.94177 637.7
+1198.44653 3193.7
+1248.95081 671.6
+1370.93030 693.0
+1410.05957 618.1
+1777.48987 822.5
+1860.06677 689.6
+1876.90967 872.5
+1879.18018 3949.9
+1879.46484 19330.6
+1879.75244 3813.4
+1880.39551 905.0
+1880.88818 897.3
+1907.05444 7539.1
+1918.67566 607.9
+1930.66833 1082.5
+S	116	116	1879.87340793
+Z	3	5636.345
+Z	2	3757.899
+532.65277 1458.9
+607.77405 640.3
+676.61206 983.6
+733.28583 690.2
+782.45416 617.0
+795.36945 1089.6
+818.22430 792.6
+1052.05835 626.3
+1057.20142 1127.7
+1060.25354 652.3
+1154.38391 630.5
+1198.46472 3340.1
+1878.90771 2308.1
+1879.18091 2483.7
+1879.45581 19720.5
+1879.99280 1990.3
+1906.68005 1182.8
+1907.00366 7361.8
+1907.32166 764.6
+1921.10889 679.4
+1930.57483 1182.6
+1944.92297 648.2
+1982.83728 604.6
+S	117	117	1907.46440793
+Z	3	5719.118
+Z	2	3813.081
+532.62756 2344.4
+549.14667 653.4
+676.63647 952.4
+690.77130 775.7
+714.47955 596.9
+731.11755 713.1
+760.90259 632.6
+795.37537 671.0
+827.10675 754.7
+1015.76929 568.0
+1110.78638 641.7
+1198.40576 3337.4
+1870.21655 707.9
+1878.01904 849.8
+1878.63367 1790.7
+1879.53027 19419.7
+1880.42859 1665.7
+1907.03357 7773.0
+1907.28662 596.4
+S	119	119	1879.89340793
+Z	3	5636.405
+Z	2	3757.939
+532.65295 1916.2
+549.12598 636.0
+616.43286 671.6
+628.23364 668.3
+630.37415 758.8
+676.64838 1209.7
+776.76202 603.0
+995.34735 577.7
+1057.24707 828.9
+1170.20276 570.0
+1198.45959 3132.3
+1233.27234 671.3
+1262.00134 696.1
+1401.76343 621.1
+1489.06287 733.2
+1525.31921 628.4
+1640.63452 687.4
+1777.51196 842.7
+1875.33691 922.1
+1878.73706 893.3
+1879.55457 19721.8
+1879.84998 2000.3
+1880.08948 1792.5
+1880.30676 816.8
+1881.32458 568.9
+1907.00037 7500.9
+1930.49487 814.4
+1955.18396 624.7
+S	120	120	1907.40940793
+Z	3	5718.953
+Z	2	3812.971
+532.70978 1818.5
+630.39478 824.1
+639.33594 642.2
+676.60736 1347.3
+795.35846 813.3
+1057.20557 720.0
+1198.58899 3146.4
+1202.35718 661.8
+1224.73401 621.7
+1289.21875 653.8
+1418.60376 756.6
+1489.03760 608.0
+1508.65588 592.1
+1579.17993 655.5
+1603.68274 701.4
+1618.19885 717.4
+1691.22607 645.8
+1777.54272 931.0
+1795.25073 700.7
+1875.58228 785.1
+1877.84045 936.9
+1878.49329 909.5
+1878.84338 1156.5
+1879.43567 20226.6
+1879.97144 1175.8
+1880.61011 967.2
+1906.99634 7500.4
+S	122	122	1879.90140793
+Z	2	3757.955
+Z	3	5636.429
+505.80750 763.7
+532.66223 1500.9
+544.11176 668.8
+610.36243 681.8
+617.89331 622.3
+630.33356 895.8
+634.03003 621.4
+676.63983 878.4
+775.54321 602.1
+857.96039 776.3
+900.93555 669.6
+909.28931 639.3
+1140.51172 653.4
+1198.48218 2906.0
+1371.41663 863.4
+1391.67297 752.7
+1777.44678 902.2
+1804.94299 850.7
+1875.39807 606.9
+1876.93188 800.1
+1878.51245 1124.1
+1879.24133 3373.2
+1879.51892 19014.6
+1880.54456 664.1
+1891.22693 730.2
+1907.05396 7337.1
+1930.39331 1203.0
+S	123	123	1907.48540793
+Z	3	5719.181
+Z	2	3813.123
+525.14484 682.4
+532.64551 1740.3
+599.35895 735.5
+638.96704 656.1
+676.63043 1006.3
+677.97937 645.6
+716.18732 660.4
+750.80731 682.7
+782.48145 684.0
+795.36633 1362.0
+818.16333 641.2
+858.06543 732.2
+969.49896 599.8
+1188.22546 670.5
+1198.44421 3244.0
+1217.03784 669.4
+1321.68213 613.0
+1525.44641 1027.8
+1539.91333 584.0
+1863.34961 663.3
+1879.12878 802.5
+1879.50208 19774.4
+1907.05017 7326.6
+1930.66101 1453.8
+S	125	125	1879.93699127
+Z	2	3758.026
+Z	3	5636.536
+532.66675 2204.1
+549.14594 1012.4
+555.39343 661.5
+611.59149 709.9
+630.39386 815.7
+659.30615 597.7
+676.62665 1115.9
+708.55933 611.6
+795.38568 1096.9
+858.03735 776.1
+892.94666 710.8
+968.59351 651.7
+1163.31335 606.7
+1198.49744 3239.8
+1297.90027 670.7
+1742.40198 676.3
+1859.96313 781.4
+1870.68274 604.5
+1878.64539 822.2
+1879.12964 2292.0
+1879.49780 19695.5
+1879.91028 2545.3
+1907.05774 7640.0
+1921.10669 733.3
+1930.55200 988.2
+S	126	126	1907.47640793
+Z	3	5719.154
+Z	2	3813.105
+525.01666 632.9
+532.64355 1897.6
+578.85400 620.9
+779.79706 653.9
+795.37256 1059.7
+849.03900 552.5
+903.35242 647.9
+1018.69232 734.7
+1019.82727 741.3
+1198.43909 3428.7
+1408.55176 624.5
+1525.41260 790.2
+1637.26660 621.9
+1766.87708 582.4
+1777.11414 1073.4
+1878.79810 915.5
+1879.51062 19963.3
+1880.15210 1086.9
+1882.47156 743.9
+1907.06116 7275.5
+1953.72620 670.3
+S	128	128	1879.98140793
+Z	3	5636.669
+Z	2	3758.115
+505.71786 660.2
+532.69434 1667.2
+541.50879 708.2
+552.80286 598.5
+593.62122 738.4
+630.45044 853.2
+676.61249 882.7
+795.38696 1247.9
+850.45557 627.6
+900.29565 682.7
+930.85956 674.8
+1050.28833 599.6
+1103.11401 599.3
+1110.64868 679.9
+1182.42126 631.3
+1198.55859 2821.1
+1604.95422 675.1
+1774.53870 752.1
+1777.02014 594.4
+1869.95654 841.1
+1876.27161 689.5
+1878.31287 984.0
+1878.91809 861.2
+1879.46143 19528.1
+1880.39490 764.7
+1906.99036 7633.0
+1918.67676 776.3
+S	129	129	1907.48340793
+Z	2	3813.119
+Z	3	5719.175
+531.26624 748.4
+532.63715 1677.0
+549.12842 829.3
+630.37476 851.3
+631.31921 652.9
+676.61890 1349.8
+679.84106 674.4
+731.08069 686.8
+736.42798 634.3
+1055.69543 738.7
+1079.97607 593.9
+1155.38269 691.6
+1198.42969 2929.1
+1198.55127 891.1
+1358.88794 704.3
+1410.81165 745.7
+1414.78430 635.6
+1723.46497 639.1
+1872.42346 719.4
+1878.17419 784.1
+1878.59985 832.8
+1879.10571 1290.9
+1879.47009 20377.9
+1907.01477 7627.3
+S	131	131	1907.41599127
+Z	2	3812.984
+Z	3	5718.973
+532.63660 1594.5
+549.11591 963.6
+564.30170 630.2
+590.58173 546.6
+676.63953 952.2
+731.06409 842.0
+767.87305 761.2
+771.50812 573.1
+795.38275 1013.7
+815.45306 630.2
+828.44208 605.1
+903.03296 595.8
+1079.26184 693.5
+1181.41931 661.8
+1195.53369 589.2
+1198.42383 2897.4
+1356.35571 638.2
+1525.31152 863.8
+1691.71313 545.7
+1693.71753 668.8
+1870.24207 719.3
+1877.21204 612.3
+1878.19910 788.1
+1878.37158 855.1
+1879.53320 20009.4
+1880.66113 685.3
+1880.81580 728.6
+1881.18396 660.2
+1907.06152 7005.8
+1938.20081 668.1
+1990.58533 638.8
+S	133	133	1879.92224127
+Z	3	5636.491
+Z	2	3757.997
+532.63556 1920.5
+549.14392 744.4
+552.58398 585.7
+568.88794 634.9
+589.14252 613.4
+614.07849 721.7
+730.38214 767.0
+795.38580 1039.7
+828.48254 590.6
+1198.42236 3216.7
+1215.03088 616.6
+1480.93835 691.1
+1759.36768 631.3
+1875.41150 784.0
+1878.07629 829.3
+1878.53137 1256.7
+1879.27478 4479.2
+1879.55017 18836.8
+1880.72827 1170.8
+1907.02100 7276.0
+S	134	134	1907.46324127
+Z	2	3813.079
+Z	3	5719.114
+531.56213 781.0
+532.66016 2021.5
+539.75800 638.7
+548.21631 625.7
+549.14063 682.8
+604.89142 626.8
+676.63965 1034.1
+683.07990 614.4
+777.48975 605.9
+789.20959 708.5
+795.40717 1180.0
+922.93280 604.1
+1036.98242 596.4
+1188.31885 963.8
+1198.47119 3531.1
+1441.19324 609.6
+1488.08594 804.6
+1585.20483 683.7
+1867.52979 628.5
+1877.25500 581.3
+1879.24146 2390.9
+1879.51929 19812.2
+1907.01953 7277.8
+S	136	136	1879.92640793
+Z	3	5636.504
+Z	2	3758.005
+532.64545 1845.5
+549.75153 575.8
+560.27905 668.9
+576.47644 570.9
+647.60016 542.6
+669.31647 551.3
+795.39551 1010.8
+812.30005 680.2
+846.67676 555.2
+894.32635 590.4
+1019.36548 645.4
+1041.38562 714.7
+1057.26514 759.4
+1121.06531 608.1
+1140.33008 639.8
+1198.45398 3152.5
+1525.31042 1197.4
+1777.65771 657.5
+1875.50244 649.4
+1878.90576 1728.5
+1879.57825 17984.9
+1880.36499 1559.9
+1906.83240 7041.9
+1907.10852 1410.8
+1907.37366 714.9
+1930.45435 897.7
+1998.24365 914.3
+S	137	137	1907.4678246
+Z	2	3813.088
+Z	3	5719.128
+532.59625 1836.4
+559.87756 588.9
+672.92883 534.8
+676.64484 1374.9
+782.83582 724.5
+795.40015 750.8
+931.12903 647.7
+1019.81213 804.4
+1020.95740 653.1
+1057.25940 904.3
+1104.68738 803.7
+1130.22388 652.3
+1198.17371 602.7
+1198.34253 3024.6
+1267.22559 670.4
+1274.17761 615.9
+1315.39282 600.2
+1456.78992 608.8
+1480.57959 719.7
+1670.10400 600.3
+1871.78772 904.9
+1876.00500 738.7
+1878.39331 796.9
+1879.00171 923.2
+1879.54565 20321.5
+1879.81750 1568.3
+1880.01770 712.0
+1880.30115 654.1
+1880.64624 719.9
+1881.11108 702.6
+1906.82642 7433.6
+1909.76624 796.9
+1930.33228 792.4
+1999.29858 680.5
+S	139	139	1879.91199127
+Z	2	3757.976
+Z	3	5636.461
+509.17020 769.0
+532.57849 1947.4
+552.62720 624.6
+618.14160 692.4
+668.08789 700.7
+676.64441 1190.6
+699.93091 600.0
+795.40674 1060.3
+819.23010 774.7
+927.08307 717.7
+967.04633 658.9
+1057.25854 932.8
+1198.31018 2873.1
+1229.84558 606.2
+1425.87231 633.0
+1437.95251 766.2
+1777.63037 618.9
+1877.70007 773.2
+1878.37854 805.0
+1878.78247 1250.6
+1879.04944 887.6
+1879.53979 19766.7
+1880.30090 1823.9
+1907.06580 7406.7
+1908.57861 682.2
+1918.68774 662.1
+1926.75757 726.3
+1930.48254 836.7
+S	140	140	1907.32599127
+Z	2	3812.804
+Z	3	5718.703
+532.61835 1822.2
+543.84381 761.3
+549.14972 567.8
+595.18591 539.9
+630.37451 844.3
+676.62628 1438.8
+731.09857 610.8
+737.60107 563.3
+757.23706 545.0
+795.40540 996.7
+854.89764 544.4
+927.47668 586.3
+990.52435 665.5
+1057.21692 870.8
+1109.65466 660.0
+1111.70605 592.5
+1142.32434 608.9
+1153.44824 613.5
+1198.38184 3743.9
+1730.08936 721.2
+1776.27490 608.6
+1777.73718 830.9
+1878.43518 739.1
+1879.49805 20214.9
+1880.26819 1009.9
+1883.31311 680.8
+1907.01599 7672.0
+1930.55017 1080.4
+S	142	142	1879.9388246
+Z	3	5636.541
+Z	2	3758.03
+532.62201 1819.9
+612.70679 634.2
+630.34857 800.2
+639.30591 702.0
+676.57086 561.0
+676.64282 577.0
+676.67413 750.2
+783.18622 594.5
+795.41779 1090.3
+878.86261 603.0
+1032.40735 649.6
+1043.19458 883.1
+1057.23999 891.3
+1198.38000 2945.6
+1335.41968 805.7
+1462.71973 723.3
+1611.21960 758.7
+1878.64026 904.4
+1879.51001 17113.9
+1880.20776 1578.0
+1880.65417 811.9
+1882.04980 642.8
+1907.04370 7439.0
+1918.65979 859.0
+S	143	143	1907.47099127
+Z	2	3813.094
+Z	3	5719.138
+532.59479 1649.9
+566.17975 568.8
+591.55823 580.0
+734.36340 586.4
+750.69904 646.8
+978.04889 565.7
+1123.64893 675.8
+1138.14697 632.0
+1151.70691 671.0
+1198.34082 3201.6
+1426.03101 596.0
+1456.03308 558.8
+1459.56201 620.8
+1644.30664 595.0
+1673.72205 832.5
+1698.29626 665.0
+1878.62683 811.1
+1879.52539 19001.2
+1880.43542 864.8
+1907.02991 7392.2
+1930.60657 981.4
+S	145	145	1879.9198246
+Z	3	5636.484
+Z	2	3757.992
+532.61224 1676.6
+575.86835 750.3
+586.19135 601.5
+613.99939 609.3
+668.69403 616.6
+676.60754 1188.5
+795.41156 886.1
+842.69330 593.2
+982.87939 504.3
+982.93555 497.6
+1062.40808 692.3
+1098.85950 557.6
+1098.94995 635.9
+1188.18481 832.1
+1198.37024 3057.0
+1365.46252 734.9
+1374.80005 573.1
+1460.56995 684.2
+1799.48547 639.8
+1874.52258 713.5
+1876.29517 680.9
+1878.06738 646.4
+1879.46008 19364.9
+1880.33496 815.3
+1880.83936 640.5
+1907.03149 7459.5
+1920.42053 683.6
+1930.53064 992.3
+S	146	146	1907.46399127
+Z	3	5719.117
+Z	2	3813.08
+532.59137 2022.0
+549.14160 808.7
+676.63525 1225.7
+782.40656 668.5
+824.92816 525.2
+1042.58716 652.4
+1057.25366 860.0
+1181.56140 586.5
+1188.24988 901.7
+1198.12878 773.8
+1198.32385 3183.2
+1277.54895 725.9
+1379.55664 624.5
+1416.50293 646.4
+1448.88293 642.2
+1506.02942 792.5
+1525.41016 710.7
+1589.63928 649.6
+1720.44714 649.5
+1876.99475 1107.0
+1878.72375 1397.0
+1879.02759 1633.3
+1879.51941 20280.5
+1880.02185 1694.6
+1880.37915 986.3
+1907.01636 7659.2
+1930.56543 1035.1
+S	148	148	1879.9278246
+Z	2	3758.008
+Z	3	5636.508
+510.71362 636.1
+532.62878 1494.4
+559.58252 719.4
+564.67664 586.9
+630.32770 914.5
+676.62250 993.4
+723.47131 715.7
+780.60370 685.1
+812.01685 711.7
+1017.72626 702.5
+1074.69031 701.7
+1198.40491 3115.0
+1244.98950 717.5
+1328.60608 790.1
+1436.77893 737.9
+1444.73718 650.0
+1493.65942 811.8
+1567.24780 587.1
+1653.91992 649.5
+1762.60547 623.8
+1860.12756 614.2
+1879.50122 20208.1
+1906.97046 7585.4
+1907.20386 896.6
+1918.72314 945.2
+S	149	149	1907.44124127
+Z	3	5719.048
+Z	2	3813.035
+523.60779 705.7
+532.63831 1804.6
+558.93512 711.3
+630.42572 871.0
+631.51733 627.7
+638.08685 714.8
+659.68579 579.6
+676.58685 700.7
+724.18536 593.0
+795.42212 1005.7
+839.69843 613.2
+840.34637 762.4
+903.93518 592.1
+1041.00842 709.4
+1057.19446 962.0
+1066.00684 627.7
+1198.42981 3731.4
+1344.81226 578.4
+1344.91833 625.4
+1525.46570 936.5
+1877.76111 1372.9
+1878.73230 815.9
+1879.45276 18682.7
+1879.70776 4149.6
+1880.75867 634.8
+1907.05103 7215.0
+1930.69153 1048.7
+S	151	151	1879.7718246
+Z	3	5636.04
+Z	2	3757.696
+532.63629 1717.0
+658.36853 581.8
+766.14606 608.4
+795.44061 810.6
+1057.19263 833.0
+1168.18823 653.3
+1198.42566 3355.5
+1317.31213 624.4
+1454.92859 832.3
+1525.42322 964.2
+1560.18970 633.5
+1873.72009 1510.4
+1875.91016 661.4
+1878.79907 1275.2
+1879.46143 20581.8
+1906.47925 835.9
+1906.96777 7377.2
+1907.43530 715.5
+1907.67590 795.4
+1930.56738 1347.7
+S	152	152	1907.47199127
+Z	3	5719.141
+Z	2	3813.096
+532.63971 1833.6
+549.17682 1044.2
+613.00671 666.0
+630.41681 628.2
+676.61047 1121.7
+858.09564 755.4
+1079.26624 698.9
+1182.50623 699.5
+1198.42627 3297.2
+1351.61584 689.5
+1389.01892 612.8
+1525.44824 751.0
+1615.98291 648.3
+1687.58618 774.5
+1719.79553 989.6
+1874.19800 1131.8
+1876.52332 632.4
+1879.08899 1219.2
+1879.45752 20197.9
+1879.96130 1363.7
+1881.87891 730.3
+1906.60583 774.6
+1906.93286 7089.2
+1907.25269 1256.9
+1930.69312 836.0
+1999.53906 801.9
+S	154	154	1880.02340793
+Z	2	3758.199
+Z	3	5636.795
+516.16248 658.0
+532.62842 1294.9
+569.15204 612.7
+640.44550 694.7
+658.27002 608.8
+673.59174 720.4
+676.63458 1098.2
+719.61438 619.2
+1079.82410 655.4
+1187.90259 652.8
+1198.40479 2849.1
+1312.95288 594.5
+1372.20032 640.2
+1394.07715 650.7
+1490.94116 688.6
+1717.96765 1206.7
+1840.02661 603.2
+1872.65930 750.0
+1874.67847 787.3
+1878.79834 1129.9
+1879.51941 19740.6
+1879.79626 2432.9
+1907.09290 7230.4
+S	155	155	1907.2918246
+Z	2	3812.736
+Z	3	5718.6
+532.61987 1348.1
+549.16473 906.3
+611.19360 674.1
+642.17645 587.7
+676.62500 942.2
+715.83368 539.3
+728.03265 640.7
+791.37109 808.4
+1021.17383 706.7
+1077.27417 623.4
+1079.24780 815.5
+1173.96655 773.3
+1198.08630 712.7
+1198.37854 2345.6
+1330.14075 654.2
+1717.12268 1343.8
+1871.41809 887.5
+1878.58740 937.8
+1879.48389 19479.8
+1881.84998 827.5
+1906.99622 6892.6
+1907.24756 1556.4
+1930.64246 863.4
+S	157	157	1907.52840793
+Z	3	5719.31
+Z	2	3813.209
+532.62842 2026.2
+572.23163 583.5
+630.41486 860.8
+669.91888 576.4
+676.66479 803.4
+691.64392 525.4
+795.43518 1038.1
+809.10498 618.8
+1021.30341 601.1
+1079.31323 703.6
+1083.65540 655.5
+1122.23242 752.1
+1188.03894 670.4
+1198.40442 3239.0
+1489.63257 695.6
+1536.33521 616.4
+1767.94299 689.9
+1845.10974 621.4
+1845.27576 625.1
+1877.14978 773.6
+1877.43420 701.4
+1878.45300 1182.2
+1878.78015 1047.0
+1879.27441 3534.8
+1879.59326 18659.1
+1879.97754 2894.7
+1880.44238 973.4
+1880.71851 1316.6
+1881.28198 664.0
+1906.73352 752.0
+1907.06421 7476.6
+1907.41748 633.7
+1930.67273 922.4
+S	159	159	1879.89699127
+Z	3	5636.416
+Z	2	3757.946
+532.60040 2052.5
+533.29413 800.8
+549.17212 951.1
+630.43359 817.0
+635.50330 699.9
+676.27563 626.9
+676.62109 947.7
+731.14185 688.0
+771.29822 629.1
+783.45197 745.6
+1006.39166 789.3
+1198.34937 3355.7
+1206.88171 588.1
+1295.78711 700.5
+1564.46082 662.5
+1692.34729 835.6
+1858.54456 697.2
+1875.46216 587.1
+1879.03137 1535.9
+1879.23254 1371.5
+1879.49060 19476.1
+1879.93872 1148.7
+1881.34192 619.9
+1883.52454 751.6
+1906.98242 7249.6
+1930.66443 1006.1
+S	160	160	1907.52599127
+Z	2	3813.204
+Z	3	5719.303
+532.58423 2294.3
+549.17664 656.2
+573.65167 671.3
+599.17059 742.5
+614.67004 658.8
+620.42926 812.9
+630.44366 1022.0
+634.87622 591.6
+676.64825 719.7
+735.33173 635.2
+795.44434 858.7
+957.01971 721.4
+957.20020 590.3
+1171.06067 736.0
+1198.30774 3225.8
+1219.26404 567.5
+1390.69751 572.8
+1613.19714 737.5
+1777.40503 726.9
+1851.14709 636.2
+1874.17554 672.5
+1878.09705 1196.0
+1878.43420 774.1
+1879.15796 3937.9
+1879.54993 18870.8
+1879.95093 3883.4
+1880.42090 1119.2
+1881.06592 849.7
+1906.79773 761.8
+1907.05994 7227.8
+1930.71069 1099.1
+1974.84424 582.3
+S	162	162	1907.47340793
+Z	3	5719.145
+Z	2	3813.099
+532.57379 2075.7
+549.18512 746.9
+630.44952 724.9
+700.42798 574.4
+880.83264 670.6
+921.09259 591.5
+933.53442 711.0
+1102.54663 683.8
+1198.28503 3353.1
+1435.36584 690.1
+1525.49988 1149.6
+1709.60535 591.6
+1775.99927 534.4
+1791.00891 696.0
+1810.17395 536.9
+1873.63916 663.6
+1878.37292 669.0
+1878.85059 2136.1
+1879.44263 18963.5
+1880.04639 1762.6
+1880.50891 1319.9
+1907.00684 6977.2
+1907.29028 1039.0
+1930.69897 929.8
+1988.03613 723.9
+1992.75500 674.0
+S	164	164	1879.8978246
+Z	2	3757.948
+Z	3	5636.418
+509.76727 741.1
+517.54187 701.0
+532.59668 1612.9
+540.06433 585.8
+581.48438 652.1
+630.35986 778.1
+676.61035 721.5
+731.07208 942.9
+772.78363 786.3
+795.43939 881.7
+942.16003 697.4
+1068.08850 563.3
+1188.21387 704.2
+1198.33313 3762.5
+1217.21143 660.1
+1381.70483 640.1
+1403.51978 677.8
+1529.26538 573.5
+1592.43152 601.4
+1616.90100 646.4
+1878.26379 656.0
+1878.94995 869.9
+1879.44958 20067.5
+1880.78162 722.4
+1907.12805 7175.8
+1913.48303 634.1
+1930.46863 1214.5
+S	165	165	1907.46640793
+Z	3	5719.124
+Z	2	3813.085
+532.54565 1982.1
+549.13934 614.3
+622.50598 597.3
+628.55206 634.4
+630.39044 635.4
+668.29504 655.1
+676.62866 1406.4
+731.09894 644.8
+740.47040 671.8
+759.15985 669.1
+795.44928 839.0
+807.84021 759.0
+879.47284 742.1
+952.53711 607.2
+1030.35608 658.9
+1057.27295 754.4
+1122.39954 584.2
+1188.15674 760.1
+1198.22131 3639.8
+1546.32483 556.2
+1689.81287 614.6
+1807.15100 631.5
+1878.58008 842.0
+1879.21985 3762.4
+1879.50061 19353.6
+1879.93896 2021.2
+1880.50964 1089.0
+1907.05042 7420.0
+1930.55237 940.6
+S	167	167	1879.91640793
+Z	2	3757.985
+Z	3	5636.474
+532.56042 2202.5
+548.57770 705.0
+578.48450 579.3
+631.27985 608.6
+676.62329 789.2
+690.74799 686.1
+731.13977 944.1
+751.07300 595.6
+795.45911 978.3
+922.37518 639.6
+1019.84833 711.0
+1073.97388 630.3
+1127.21277 638.1
+1184.51331 801.1
+1198.25671 3139.8
+1200.30920 757.4
+1495.11548 618.9
+1525.44604 627.7
+1711.10889 606.0
+1863.87244 705.4
+1871.98047 665.7
+1878.48340 1028.3
+1879.48914 19277.2
+1879.76978 3660.0
+1880.30725 752.7
+1880.44507 900.4
+1881.32861 596.3
+1906.69470 1233.6
+1907.05066 7160.9
+1907.39417 1253.2
+1930.67261 938.4
+1933.39038 603.3
+S	168	168	1907.41699127
+Z	2	3812.986
+Z	3	5718.976
+532.53326 1674.0
+630.39301 707.7
+676.61646 1016.4
+731.11505 1014.2
+1057.21021 973.8
+1097.74280 615.2
+1137.28931 864.6
+1198.19275 3368.2
+1525.40540 851.7
+1544.82251 677.6
+1643.91736 671.6
+1817.65137 597.8
+1878.00415 598.4
+1879.24463 3434.3
+1879.47717 19338.2
+1883.38977 745.2
+1906.77820 1101.9
+1907.05969 7058.1
+1930.57532 948.5
+S	170	170	1879.88924127
+Z	3	5636.392
+Z	2	3757.931
+532.53137 2128.0
+539.65082 664.6
+545.19617 781.1
+547.38507 583.2
+630.38812 551.8
+671.37189 711.9
+676.62958 1390.0
+731.09253 756.2
+795.45386 849.6
+858.01556 751.3
+992.34814 707.8
+1066.37048 648.8
+1097.20056 685.6
+1139.85547 666.3
+1140.27380 720.6
+1198.18848 3093.1
+1218.38562 722.6
+1466.46692 837.3
+1611.07654 705.3
+1715.53101 776.1
+1777.56592 843.9
+1877.31824 869.3
+1878.92676 1234.5
+1879.25403 4226.8
+1879.51208 18634.3
+1880.03333 1787.2
+1880.41357 718.7
+1883.46228 735.6
+1907.04846 7696.1
+1930.56067 770.3
+S	171	171	1907.47740793
+Z	2	3813.107
+Z	3	5719.157
+526.20959 612.4
+532.53784 2343.2
+549.14807 1064.3
+620.38922 540.9
+630.33423 527.3
+676.63678 1276.3
+685.39819 641.2
+731.15710 728.8
+731.51007 589.8
+740.02063 851.0
+795.44220 1095.6
+948.42255 569.8
+1057.23254 729.0
+1198.21069 3643.0
+1293.37549 717.0
+1300.87573 642.0
+1319.40454 605.7
+1389.25854 657.0
+1421.03943 556.6
+1860.00049 657.5
+1875.48047 873.3
+1878.49890 644.4
+1878.97095 895.6
+1879.22058 1537.0
+1879.53064 20029.7
+1879.84167 1565.1
+1880.36523 857.8
+1885.51501 576.3
+1907.04993 7193.9
+1907.35522 1252.4
+1930.57507 1084.5
+S	173	173	1907.48499127
+Z	2	3813.122
+Z	3	5719.18
+532.56409 1962.6
+630.37830 984.1
+676.62878 782.6
+795.46057 726.9
+847.28998 615.0
+867.92767 700.6
+991.82043 618.9
+1049.77393 642.0
+1079.29114 910.5
+1188.21143 733.7
+1198.26257 3082.1
+1238.62537 610.7
+1502.62231 655.5
+1584.07446 612.8
+1600.53906 703.2
+1689.67175 892.0
+1777.54724 946.8
+1787.98682 670.0
+1876.39612 577.9
+1877.32654 682.2
+1877.90955 662.6
+1878.52832 1149.2
+1878.96167 1220.9
+1879.52087 19816.5
+1879.79846 2523.6
+1880.10852 1072.5
+1881.17566 796.9
+1881.80115 632.9
+1907.09070 7370.1
+1930.46826 1020.9
+1992.14624 619.7
+S	175	175	1879.90840793
+Z	3	5636.45
+Z	2	3757.969
+532.54053 1796.7
+549.14691 701.9
+676.64404 1029.9
+722.87665 534.5
+767.19659 623.0
+795.46625 994.8
+879.44153 560.5
+931.24646 677.8
+1023.03577 638.8
+1057.25842 780.2
+1076.52759 547.3
+1112.06421 648.8
+1140.46484 751.8
+1187.84692 704.4
+1198.21289 3285.2
+1250.16235 682.0
+1449.17163 725.4
+1507.73181 622.4
+1777.62366 841.9
+1878.05493 737.8
+1878.60352 1236.1
+1879.06665 1219.5
+1879.53503 20168.1
+1879.99377 971.2
+1880.47388 830.2
+1907.13745 7465.8
+1907.41089 1019.9
+1930.61072 1045.1
+1983.22827 662.0
+S	176	176	1907.4478246
+Z	3	5719.068
+Z	2	3813.048
+532.56104 2072.5
+549.13281 803.1
+630.39648 743.8
+662.95343 624.5
+676.63013 855.2
+686.55878 693.8
+731.11584 724.9
+795.47040 861.1
+973.96576 610.5
+1184.95593 649.0
+1198.25537 3389.6
+1220.42261 589.8
+1545.61182 740.4
+1721.66003 517.3
+1721.72302 523.6
+1743.31274 638.7
+1857.61475 645.0
+1876.80835 840.4
+1879.50952 19338.8
+1907.08093 7831.3
+1907.43250 838.3
+1947.02234 643.1
+S	178	178	1879.95840793
+Z	3	5636.6
+Z	2	3758.069
+525.19788 788.0
+525.73932 602.9
+532.53485 1822.9
+535.07666 621.2
+549.14038 951.3
+611.16547 689.8
+621.27521 633.5
+630.39026 750.2
+676.64154 1111.9
+741.20605 578.9
+795.49005 1050.9
+812.75134 717.6
+1056.40796 738.9
+1131.48425 690.0
+1198.19287 3319.6
+1525.36584 734.6
+1527.62695 651.7
+1527.79626 577.6
+1540.15833 690.4
+1878.18335 854.1
+1878.77576 1435.4
+1879.10229 1536.7
+1879.54272 20029.5
+1880.00159 1135.0
+1880.87256 869.7
+1907.05713 7145.9
+1918.69055 946.3
+1930.55286 1031.8
+1997.12463 733.1
+S	179	179	1907.4648246
+Z	3	5719.119
+Z	2	3813.082
+532.47791 807.4
+532.53644 1786.7
+532.58270 718.3
+570.49908 700.7
+598.28705 581.8
+630.37640 811.0
+637.96283 730.8
+658.98663 581.2
+676.61792 1283.3
+704.86194 752.2
+731.07745 747.6
+795.47858 851.7
+884.06384 560.2
+885.04150 663.8
+1057.20959 993.2
+1086.39185 604.7
+1188.12390 782.0
+1198.19971 3237.9
+1300.66443 544.0
+1319.14758 679.3
+1373.41931 810.4
+1432.16455 644.9
+1609.97803 650.3
+1773.77393 641.2
+1777.45215 971.1
+1858.84814 663.2
+1870.30762 814.9
+1877.70142 785.0
+1879.00879 833.7
+1879.47412 20373.9
+1882.66821 755.3
+1907.05347 7486.2
+1930.52124 1055.6
+S	181	181	1879.91440793
+Z	3	5636.468
+Z	2	3757.981
+518.11743 592.5
+532.51453 2152.5
+543.59265 678.5
+572.84589 568.8
+629.14032 598.3
+630.39130 808.1
+676.64093 1551.4
+731.12000 1043.8
+783.23212 671.1
+795.47906 996.2
+980.84839 584.0
+982.33539 603.3
+1019.84216 655.5
+1024.48315 674.7
+1057.25586 711.1
+1198.14661 3419.6
+1451.74573 669.6
+1525.38892 621.0
+1645.04407 648.2
+1830.41150 675.9
+1847.44702 604.4
+1878.53552 1044.9
+1878.94226 1711.5
+1879.14014 1203.3
+1879.53821 19664.6
+1879.91284 1155.8
+1880.12854 1360.3
+1880.45825 897.1
+1881.51172 1019.2
+1907.07703 7467.7
+1930.56506 775.3
+S	182	182	1907.47324127
+Z	3	5719.144
+Z	2	3813.099
+532.53754 1688.4
+597.04150 647.5
+676.63916 1219.6
+750.58545 642.3
+838.95190 597.6
+903.64978 651.7
+930.72974 648.5
+1019.79926 1016.9
+1069.96069 673.3
+1090.08154 590.0
+1198.19885 3521.3
+1198.41064 678.6
+1273.76184 716.4
+1525.39587 1147.8
+1535.03564 690.6
+1578.18127 645.3
+1700.15369 730.5
+1749.87708 620.0
+1876.93726 828.7
+1878.51917 745.1
+1878.90967 1282.9
+1879.20374 2160.3
+1879.53125 20251.0
+1879.84460 1755.4
+1880.10803 1274.5
+1881.07617 787.2
+1907.05933 7160.0
+1918.65198 836.3
+1930.57422 819.8
+S	184	184	1879.8838246
+Z	2	3757.92
+Z	3	5636.376
+532.52582 1509.7
+534.63684 656.2
+549.19684 742.0
+551.61700 596.4
+630.45441 765.5
+638.00110 562.9
+676.64795 684.9
+696.36072 504.4
+702.45892 772.9
+735.20654 611.0
+740.05731 646.8
+752.84351 679.3
+795.45599 1123.5
+828.45343 576.8
+938.76581 736.2
+1032.53723 683.2
+1198.17188 3012.0
+1214.26294 623.4
+1217.14417 600.9
+1525.52942 910.5
+1667.37195 917.0
+1777.49426 849.8
+1878.30713 727.8
+1878.86047 1296.5
+1879.11694 1623.4
+1879.56787 18750.0
+1880.51660 1527.9
+1880.75110 604.4
+1882.12903 772.2
+1907.04980 7286.0
+1930.74097 815.0
+S	185	185	1907.4328246
+Z	2	3813.018
+Z	3	5719.023
+530.03638 511.3
+532.54419 1444.5
+549.09021 892.6
+557.31848 610.5
+713.77844 566.4
+795.47772 757.9
+809.33417 850.8
+900.95557 582.4
+1073.61047 633.6
+1079.28394 664.3
+1134.07593 566.8
+1198.20679 2993.4
+1525.24536 959.5
+1626.22461 727.6
+1656.67346 603.5
+1715.49194 651.2
+1777.41138 714.6
+1779.39111 740.2
+1861.70325 648.8
+1878.18359 866.5
+1878.71228 1736.0
+1879.22400 2883.9
+1879.50891 19747.9
+1880.21033 2068.7
+1880.76294 927.8
+1884.23083 618.7
+1907.05359 7460.8
+1930.35767 903.7
+S	187	187	1907.40424127
+Z	3	5718.937
+Z	2	3812.961
+525.29071 604.3
+532.58069 2080.8
+543.12341 711.8
+549.15442 677.1
+557.25659 723.8
+618.10468 666.6
+630.39856 840.2
+676.61633 1001.1
+766.39661 703.3
+789.63312 686.2
+795.47528 781.9
+867.00446 663.4
+969.32874 611.7
+1130.82007 632.0
+1143.39575 621.1
+1198.30164 3104.1
+1270.10571 577.0
+1329.60693 623.3
+1620.76050 615.0
+1623.69873 629.7
+1777.34619 937.8
+1778.48364 634.8
+1862.38538 918.1
+1873.59241 684.8
+1877.19299 745.8
+1877.64624 723.7
+1878.88892 966.2
+1879.01990 1130.4
+1879.53027 15949.4
+1880.15894 903.4
+1880.34973 866.0
+1906.63330 583.5
+1907.04797 7408.5
+1927.27393 751.2
+1930.55884 930.6
+1992.66565 648.0
+S	189	189	1879.8948246
+Z	2	3757.942
+Z	3	5636.409
+532.53424 1974.9
+676.62030 1096.7
+731.09583 633.2
+735.46484 660.3
+770.01837 606.6
+792.62329 606.3
+1148.69189 582.7
+1198.20276 3155.4
+1304.86536 846.4
+1525.31396 882.4
+1559.17139 716.1
+1878.51001 1104.0
+1879.00317 1137.4
+1879.49487 19069.4
+1880.10413 1237.8
+1907.00854 7272.1
+1907.28894 1162.9
+1930.48083 1015.6
+S	190	190	1907.4608246
+Z	3	5719.107
+Z	2	3813.074
+532.53918 1432.4
+676.61060 1056.2
+698.28369 616.2
+716.63879 739.4
+738.13043 548.7
+743.37024 582.5
+771.71808 652.5
+782.19543 958.7
+795.47815 763.8
+842.63922 629.5
+918.54297 595.3
+944.65869 655.8
+1019.81659 721.5
+1198.21082 3218.5
+1525.36768 966.8
+1876.72131 733.0
+1879.02295 1474.4
+1879.46997 20266.5
+1879.73950 2016.9
+1906.63293 570.0
+1906.81567 803.0
+1907.07556 6924.0
+1930.52490 967.3
+1945.02710 628.1
+S	192	192	1879.86640793
+Z	3	5636.324
+Z	2	3757.885
+532.58112 2191.5
+676.63434 963.6
+731.07251 720.2
+875.31244 631.7
+927.55670 695.1
+982.86829 673.8
+1198.29907 3628.3
+1251.60132 634.0
+1370.04639 819.2
+1501.07629 615.5
+1623.40723 634.8
+1879.05981 1477.1
+1879.22571 2007.8
+1879.51111 19826.2
+1880.55371 608.7
+1880.71851 670.5
+1881.30542 732.2
+1907.00977 7042.1
+S	193	193	1907.2928246
+Z	3	5718.603
+Z	2	3812.738
+532.55713 1905.8
+565.68060 528.4
+575.85736 534.2
+601.57257 644.0
+655.59998 721.4
+729.05621 622.9
+795.46857 1161.8
+990.01355 658.3
+1159.99072 680.0
+1198.25415 3154.1
+1295.11646 554.2
+1329.66333 594.2
+1617.64001 573.3
+1643.53784 701.0
+1777.62842 754.6
+1878.37915 1256.7
+1878.63586 1394.7
+1879.09814 4001.1
+1879.47278 18523.5
+1879.85681 4289.4
+1880.46472 1275.5
+1906.46497 968.7
+1906.90784 7328.2
+1930.41138 1267.4
+S	195	195	1879.90240793
+Z	2	3757.957
+Z	3	5636.432
+532.46356 979.9
+532.52649 843.9
+532.57330 1122.6
+602.23718 538.2
+630.37115 639.4
+646.70044 626.3
+667.11890 779.5
+676.61700 867.2
+732.71399 657.0
+734.32623 609.9
+774.87366 642.1
+791.62640 585.8
+797.31244 706.8
+823.07312 596.5
+1057.20337 799.6
+1059.82288 666.2
+1174.53174 636.9
+1196.75208 704.8
+1198.26355 1956.0
+1271.21387 718.0
+1777.62939 811.5
+1820.60120 788.0
+1824.67200 573.7
+1876.34094 731.5
+1877.66064 1225.9
+1878.78613 1099.2
+1879.47668 19789.3
+1880.15015 1597.2
+1880.83997 691.8
+1907.10059 7307.4
+1907.60339 706.0
+S	196	196	1907.47940793
+Z	3	5719.163
+Z	2	3813.111
+532.58417 1996.4
+646.42950 606.7
+650.15503 564.3
+795.48676 1211.1
+944.90045 546.6
+1019.79694 617.3
+1057.24365 895.2
+1198.31042 3183.2
+1389.63403 620.8
+1525.30286 824.8
+1746.90015 621.5
+1877.59497 1142.9
+1878.64478 626.3
+1878.72180 618.3
+1879.24792 4810.9
+1879.52612 18475.0
+1880.02356 2601.5
+1881.91504 677.0
+1907.00928 7091.4
+1907.33447 793.5
+1930.45374 1167.8
+S	198	198	1879.92740793
+Z	3	5636.507
+Z	2	3758.007
+525.10016 625.5
+532.55011 1808.4
+629.95013 556.8
+655.41809 665.8
+662.48865 686.3
+676.62769 1022.2
+731.04767 705.3
+731.50000 724.2
+795.48853 1183.1
+798.46912 656.5
+1152.22095 748.0
+1187.97119 806.9
+1198.24097 3488.9
+1237.85278 818.9
+1337.58301 644.9
+1458.47351 767.7
+1491.84802 617.3
+1525.28027 938.8
+1637.60034 678.9
+1878.89429 1814.0
+1879.21179 2045.4
+1879.51770 19503.6
+1879.84595 2545.8
+1880.15613 1119.0
+1907.07605 7332.8
+1930.42236 1404.4
+1948.02600 593.8
+S	201	201	1879.96340793
+Z	2	3758.079
+Z	3	5636.615
+532.57025 2055.3
+541.66351 594.1
+656.39526 674.8
+676.64368 1052.2
+716.07782 700.3
+780.31830 845.2
+782.78448 781.6
+792.82727 663.0
+795.49957 953.6
+899.80402 585.7
+979.74329 540.0
+979.79297 545.5
+1020.93988 656.7
+1141.19336 741.1
+1188.19043 731.0
+1198.27148 3316.4
+1199.86255 580.5
+1311.95837 578.1
+1674.42188 641.7
+1777.57690 611.0
+1878.57214 740.7
+1878.66089 737.5
+1879.53711 18601.8
+1879.94275 960.5
+1880.54041 1559.2
+1907.08472 7246.1
+1930.48450 625.6
+S	202	202	1907.45024127
+Z	3	5719.075
+Z	2	3813.053
+532.52252 2142.1
+535.19427 700.3
+535.34796 580.4
+615.01361 604.9
+630.35657 757.2
+676.64581 1105.6
+715.31329 687.6
+719.48743 758.8
+732.36523 592.0
+795.47577 1180.2
+813.63940 647.2
+822.77234 656.1
+837.37860 655.6
+848.53973 585.1
+858.00232 597.8
+1047.59045 597.7
+1144.82825 706.2
+1198.17273 3209.7
+1386.82910 583.2
+1445.80066 670.5
+1505.30005 582.5
+1564.57654 715.6
+1878.04285 717.3
+1879.55505 19971.8
+1907.10498 7299.6
+1930.41736 867.0
+S	204	204	1879.9128246
+Z	2	3757.978
+Z	3	5636.463
+531.86493 591.5
+532.55341 2173.3
+549.10321 934.5
+568.24603 654.8
+569.90277 556.0
+591.65558 520.7
+676.63568 1404.2
+689.20087 526.0
+731.05988 779.8
+795.47870 1182.4
+825.24530 722.5
+836.82153 555.3
+942.62427 620.0
+1162.78894 675.7
+1168.64832 587.2
+1198.23511 3221.0
+1290.28320 599.2
+1346.56946 630.7
+1666.03394 627.2
+1879.12256 1314.3
+1879.51379 19451.8
+1879.80945 1331.6
+1881.89856 880.0
+1906.86169 934.3
+1907.13220 7971.6
+1930.44092 1355.2
+S	205	205	1907.46024127
+Z	2	3813.073
+Z	3	5719.105
+532.58105 2192.7
+549.11383 874.5
+676.64642 1172.4
+681.45001 654.9
+795.48749 1049.1
+847.21588 644.8
+1071.41345 639.9
+1149.43323 556.3
+1198.29358 3601.5
+1214.11511 721.6
+1398.57410 670.3
+1525.29907 869.8
+1575.82446 672.8
+1879.27014 2403.1
+1879.55920 19506.6
+1880.06519 1052.5
+1883.79065 764.1
+1907.01233 7169.3
+1907.27002 608.9
+1930.47070 979.0
+S	207	207	1879.9278246
+Z	2	3758.008
+Z	3	5636.508
+527.23438 745.1
+532.59772 2025.4
+630.35632 767.6
+676.63013 1401.0
+706.82440 713.8
+725.53729 610.9
+795.49072 1334.2
+974.47467 719.9
+980.35834 570.3
+1198.33423 3283.9
+1636.98767 612.0
+1777.43127 766.8
+1857.44446 731.5
+1878.26636 690.1
+1878.63513 801.2
+1879.22888 1578.2
+1879.49646 20040.2
+1880.07068 1060.5
+1880.33105 908.8
+1882.75403 690.3
+1906.36816 696.0
+1906.92065 7378.5
+1918.73755 700.6
+1930.42102 1139.2
+1953.84668 562.4
+S	208	208	1907.46199127
+Z	2	3813.076
+Z	3	5719.111
+532.58301 1773.3
+532.63068 568.0
+547.68628 657.8
+551.55963 768.9
+587.73157 704.1
+630.33832 915.2
+676.71259 746.3
+707.84656 649.1
+736.12207 668.1
+795.47870 911.5
+807.63330 640.8
+961.77521 754.7
+1188.07434 781.2
+1198.30579 3015.1
+1273.09558 738.3
+1626.43567 606.7
+1756.14856 803.7
+1872.33875 609.5
+1877.60767 899.9
+1878.64587 827.0
+1879.01294 2883.7
+1879.53796 16622.7
+1880.76318 1333.1
+1881.81848 905.9
+1906.96680 6732.2
+1930.35962 1169.6
+S	210	210	1879.9108246
+Z	3	5636.457
+Z	2	3757.974
+511.14987 687.7
+532.56989 1748.2
+674.51379 590.0
+676.61499 976.3
+697.52277 642.6
+731.02972 922.2
+785.88739 602.6
+795.50580 1189.3
+829.70343 635.4
+835.33948 617.4
+851.09009 788.8
+927.62372 703.6
+957.08447 809.8
+1021.49792 640.7
+1040.40234 594.0
+1057.21289 1070.7
+1101.57813 662.0
+1198.27551 3784.3
+1261.47522 702.7
+1489.14832 581.6
+1525.20447 783.4
+1566.77661 579.2
+1635.19836 682.7
+1667.40161 776.8
+1777.43445 891.0
+1879.47156 19875.2
+1880.19946 1024.3
+1880.49109 847.9
+1880.74524 721.9
+1888.95679 593.7
+1889.16724 517.8
+1907.09619 7285.9
+1930.35059 1055.1
+1992.07056 591.1
+S	211	211	1907.46540793
+Z	2	3813.083
+Z	3	5719.121
+532.58118 1609.3
+640.37463 646.0
+676.60950 990.0
+737.74591 619.0
+824.77106 622.9
+914.11597 644.2
+971.14374 690.0
+1044.96008 693.0
+1057.20374 882.8
+1057.95996 639.1
+1152.64771 566.7
+1198.29346 3133.7
+1198.44763 760.4
+1383.16772 680.5
+1562.65869 583.4
+1696.49475 613.6
+1878.33875 1099.7
+1879.04297 1791.9
+1879.45093 18956.5
+1879.86304 1849.1
+1880.24658 880.7
+1880.46069 961.2
+1907.01550 6858.7
+1913.41882 641.4
+1930.54053 1195.5
+S	213	213	1879.94240793
+Z	2	3758.037
+Z	3	5636.552
+531.97302 553.8
+532.55054 1940.7
+549.10699 909.4
+630.36200 857.9
+676.59735 1262.0
+752.26031 641.5
+798.78247 658.6
+916.20294 597.5
+1013.66559 700.7
+1017.09351 612.5
+1087.11816 596.8
+1114.47473 843.4
+1198.22839 3277.6
+1479.15234 682.3
+1503.36121 678.3
+1504.07434 668.8
+1533.70935 680.4
+1549.86035 590.3
+1777.37720 738.1
+1878.71252 1231.2
+1879.03699 1982.6
+1879.42566 19071.5
+1879.82190 2414.3
+1880.14197 856.5
+1881.01025 605.0
+1907.08008 7236.2
+1926.69189 582.5
+1930.47339 869.1
+S	214	214	1907.41840793
+Z	2	3812.989
+Z	3	5718.98
+532.54785 1363.1
+536.98816 704.1
+586.23505 580.6
+676.62695 961.7
+691.09155 629.6
+731.06720 899.4
+795.49042 874.8
+930.75421 712.2
+1019.80347 771.3
+1066.38794 646.5
+1194.15845 676.8
+1198.19348 2896.8
+1407.67810 593.4
+1446.97583 712.4
+1472.29163 707.8
+1519.14685 645.0
+1755.13635 610.1
+1777.17273 673.0
+1877.88452 648.3
+1879.09485 1815.5
+1879.51038 20048.2
+1879.90820 1833.1
+1907.03796 7478.9
+1912.55273 688.4
+1918.66846 745.4
+1930.41333 1295.5
+1975.51294 664.9
+S	216	216	1879.91840793
+Z	3	5636.48
+Z	2	3757.989
+532.58411 2216.8
+630.35132 993.2
+676.62054 1452.3
+731.05951 876.4
+795.49622 1079.3
+986.74622 620.9
+1057.22070 1045.2
+1076.31555 658.4
+1198.30688 3674.5
+1525.25610 1143.5
+1766.25977 678.0
+1877.88208 893.7
+1878.95459 2372.6
+1879.48169 19998.2
+1880.00720 2250.1
+1881.30139 834.0
+1907.01428 7291.4
+1930.46118 1032.6
+S	217	217	1907.5295746
+Z	2	3813.211
+Z	3	5719.314
+532.57532 1395.5
+549.10101 644.2
+550.60437 611.6
+553.85687 607.3
+609.49677 550.1
+625.47803 737.3
+676.61096 1081.6
+682.92889 607.3
+705.66150 602.5
+795.49188 947.2
+877.33588 687.4
+1020.98029 625.8
+1057.21106 867.1
+1091.47998 720.4
+1105.41370 728.6
+1198.28821 3103.9
+1330.58740 759.2
+1482.05273 716.2
+1525.26855 954.2
+1868.73828 708.8
+1879.18127 1610.1
+1879.45544 19846.5
+1880.10437 909.8
+1907.00098 7705.0
+S	219	219	1879.96124127
+Z	3	5636.608
+Z	2	3758.075
+510.94946 679.3
+532.49396 746.3
+532.54999 1584.5
+667.38843 672.8
+676.62390 949.6
+795.52832 732.2
+1135.92664 711.7
+1198.08118 613.1
+1198.22351 2747.7
+1378.85913 644.6
+1759.31714 708.2
+1848.52222 760.0
+1870.55859 644.9
+1878.81409 1365.7
+1879.49451 20227.3
+1880.22302 1352.3
+1907.05908 7915.1
+1918.70544 744.5
+1930.55945 865.7
+S	220	220	1907.49040793
+Z	2	3813.133
+Z	3	5719.196
+532.55389 1888.5
+539.84052 666.9
+594.72382 662.7
+615.99640 562.3
+783.30817 631.6
+783.89716 738.4
+795.50958 1123.8
+833.59753 672.3
+1057.20776 1097.9
+1198.24048 2931.8
+1383.36548 538.5
+1394.49573 699.9
+1455.64966 646.4
+1480.13708 694.0
+1578.46472 570.5
+1877.45471 628.7
+1878.99304 2350.9
+1879.46826 19659.1
+1879.84875 2558.0
+1881.91479 675.4
+1907.05371 7444.4
+1918.71851 846.8
+1930.44690 985.2
+S	221	221	417.2678246
+Z	1	416.26
+101.38839 627.3
+106.49467 478.0
+108.50229 595.0
+110.84695 641.0
+114.52352 572.4
+118.48200 497.6
+120.11823 528.8
+121.80801 873.7
+121.81263 2277.7
+125.98125 507.0
+130.05544 573.4
+138.21971 598.1
+139.05753 609.9
+155.78839 646.2
+157.61859 577.8
+165.80031 766.0
+182.76918 536.8
+198.88220 644.8
+199.15666 1150.4
+199.17960 862.5
+199.23665 1035.3
+199.25690 2392.4
+199.27713 1168.5
+199.35338 1001.9
+203.89018 581.0
+210.66531 607.4
+222.74312 551.2
+227.66185 583.4
+231.47986 664.0
+245.57738 568.1
+259.77887 593.9
+330.58240 589.7
+332.82791 709.7
+350.25211 901.6
+354.46518 649.8
+390.19763 661.5
+401.32010 588.9
+410.00546 597.1
+453.68634 541.6
+469.87521 678.1
+476.72665 667.2
+476.78204 544.6
+480.77203 671.6
+532.55420 2047.0
+545.15570 568.1
+577.26001 595.7
+676.61981 986.7
+708.41559 533.6
+708.98767 754.4
+722.55176 561.3
+755.90033 708.5
+762.54730 728.2
+778.98090 553.9
+814.88556 611.1
+841.88788 552.7
+857.99597 574.2
+894.45782 671.2
+908.30908 625.7
+927.72455 582.3
+1057.20691 840.9
+1118.59338 548.8
+1188.27612 668.2
+1198.24011 3271.2
+1277.07690 638.1
+1406.37280 646.2
+1525.30762 1127.0
+S	223	223	1879.90599127
+Z	3	5636.443
+Z	2	3757.964
+506.45932 672.5
+532.49341 1919.5
+613.36932 621.0
+672.33264 612.5
+676.62817 1136.6
+783.13135 542.2
+795.52356 978.7
+806.32959 646.9
+857.98260 628.5
+1073.31360 628.5
+1198.09631 3029.0
+1823.59521 697.7
+1877.30176 893.4
+1878.73279 781.8
+1879.50537 19363.6
+1879.80286 2133.2
+1881.14233 681.6
+1883.29846 653.5
+1884.22363 587.8
+1907.05823 8054.0
+1930.43542 866.4
+1981.44080 679.3
+S	224	224	1907.3468246
+Z	2	3812.846
+Z	3	5718.765
+532.52698 1962.3
+549.18616 645.1
+676.63696 690.6
+685.87738 932.0
+727.80804 595.3
+795.52856 768.2
+816.40356 715.0
+926.59277 630.4
+978.50848 583.3
+1019.76514 705.1
+1057.25330 847.8
+1198.18530 3336.5
+1546.32056 561.3
+1690.77197 661.8
+1803.85352 823.3
+1831.42566 552.5
+1878.86816 782.9
+1879.53845 18702.7
+1880.20581 1635.6
+1907.12354 7300.1
+1930.72961 820.8
+S	226	226	1879.9258246
+Z	2	3758.004
+Z	3	5636.502
+532.55066 1702.2
+676.61090 1033.9
+757.24164 652.9
+795.51575 1075.7
+804.24402 699.5
+860.56897 603.7
+1057.19202 681.1
+1198.23242 3098.2
+1525.39905 796.8
+1570.06824 642.0
+1878.50818 836.7
+1879.46545 19527.1
+1880.52026 948.3
+1907.06848 7552.5
+1927.65222 712.3
+1930.55432 680.9
+S	227	227	1907.50199127
+Z	3	5719.231
+Z	2	3813.156
+526.52271 508.8
+532.16083 590.0
+532.57220 1841.0
+549.06396 645.6
+649.29370 631.5
+676.64355 1268.2
+743.15973 719.7
+795.51221 1104.2
+850.53589 744.0
+879.02246 653.6
+1054.91418 679.4
+1118.28955 658.1
+1133.07324 641.8
+1166.82800 611.0
+1198.27747 3148.2
+1525.22083 653.0
+1876.96033 664.5
+1878.31409 696.3
+1878.54907 728.9
+1878.87158 1789.4
+1879.55237 18613.1
+1879.84961 3116.8
+1880.32239 1546.2
+1880.68652 964.0
+1907.06494 7421.4
+1918.61304 653.1
+1930.40234 795.9
+S	229	229	1879.93299127
+Z	2	3758.018
+Z	3	5636.524
+506.91913 665.3
+532.53925 1935.1
+561.73395 734.6
+630.37830 747.6
+631.69647 696.3
+636.37872 603.7
+676.65363 1088.3
+776.81293 623.3
+795.51105 669.8
+824.15228 705.7
+865.07050 628.8
+931.00372 581.9
+1061.49902 748.7
+1197.95581 704.2
+1198.21570 2935.3
+1525.30286 716.7
+1535.25391 580.6
+1616.61035 709.3
+1764.29993 801.9
+1771.48657 595.6
+1802.70923 655.0
+1875.42505 667.4
+1878.84265 820.7
+1879.13525 1139.6
+1879.55811 19752.5
+1879.99890 735.2
+1880.24121 1041.0
+1906.80957 1134.9
+1907.09766 7350.3
+1907.43042 1389.3
+1930.47168 1057.3
+1997.66931 609.4
+S	230	230	1907.3728246
+Z	2	3812.898
+Z	3	5718.843
+532.51508 1550.1
+549.11090 880.2
+594.14478 569.2
+639.57880 677.3
+676.62067 1313.8
+795.53131 1199.0
+873.35883 629.1
+1057.20593 1002.7
+1090.79968 544.4
+1098.93970 652.5
+1198.15173 3266.1
+1457.16492 638.6
+1525.32520 815.1
+1647.15845 609.5
+1715.76050 753.8
+1878.50671 704.2
+1879.15808 2588.0
+1879.46704 19946.9
+1879.77124 2391.6
+1907.01868 7060.4
+1930.47351 975.8
+S	232	232	1879.8578246
+Z	2	3757.868
+Z	3	5636.298
+532.55396 1397.8
+546.22003 683.9
+600.63031 578.1
+603.71796 706.0
+611.40137 680.4
+649.07312 665.8
+676.62793 1160.6
+795.52551 1179.7
+810.77271 668.8
+819.26758 665.1
+1063.52307 761.6
+1188.35315 767.5
+1198.24658 3454.0
+1218.01477 672.8
+1290.97034 738.1
+1338.01599 676.1
+1388.99109 727.5
+1645.32202 793.3
+1877.05420 921.7
+1878.33838 814.0
+1878.70398 1639.1
+1879.11340 1531.4
+1879.49866 19356.4
+1879.88831 1593.1
+1880.32117 1466.2
+1880.55859 550.2
+1907.03076 6926.9
+1920.34717 617.3
+S	233	233	1907.46640793
+Z	2	3813.085
+Z	3	5719.124
+532.50970 1993.5
+563.09998 647.1
+632.00250 672.7
+649.56384 667.2
+676.61328 880.1
+691.21014 597.5
+783.49481 564.3
+795.52924 1024.3
+813.35132 563.2
+827.59082 569.3
+936.62079 633.4
+968.82709 575.4
+1088.30237 640.3
+1198.14209 2933.3
+1198.27759 892.2
+1342.08008 668.9
+1364.08850 673.1
+1525.35352 771.3
+1616.07092 647.0
+1878.45361 597.7
+1878.53613 600.3
+1878.84924 862.7
+1879.12976 2953.2
+1879.47522 19488.4
+1879.83081 2881.9
+1880.14600 1091.8
+1885.12268 734.2
+1907.04468 7358.5
+S	235	235	1879.9648246
+Z	2	3758.082
+Z	3	5636.619
+506.66617 619.5
+529.07043 550.3
+532.55670 2018.3
+549.07269 961.5
+588.13470 677.0
+676.62872 924.6
+758.34216 712.0
+795.52307 1091.9
+1057.21985 995.2
+1091.89380 619.1
+1188.37659 625.8
+1198.24719 3385.4
+1554.91907 617.4
+1777.64392 995.6
+1879.05908 2001.2
+1879.24011 1598.4
+1879.50378 19601.8
+1880.11096 815.9
+1906.97424 6676.6
+1921.58362 661.6
+1930.30432 984.6
+S	236	236	1907.42999127
+Z	2	3813.012
+Z	3	5719.015
+532.48340 1721.1
+547.81842 585.5
+549.14893 615.8
+630.37042 672.1
+676.62549 902.6
+795.54419 926.4
+975.71619 613.2
+1057.22388 931.6
+1134.63049 720.0
+1156.79907 606.3
+1198.08093 3408.1
+1432.20349 733.4
+1437.91235 679.1
+1488.07336 644.9
+1489.10376 645.6
+1525.31372 886.5
+1526.92944 681.5
+1878.10828 708.5
+1878.37488 847.0
+1878.62024 1481.9
+1879.49109 19695.5
+1880.03577 1317.5
+1880.37695 1034.8
+1880.68445 599.2
+1880.86548 633.7
+1881.18298 803.3
+1906.84802 7213.3
+1930.51392 963.2
+S	238	238	1879.90399127
+Z	2	3757.96
+Z	3	5636.437
+525.80426 584.1
+532.51782 1677.2
+573.60706 567.3
+676.40820 579.4
+676.66089 1178.3
+686.55579 626.3
+1098.74133 601.8
+1150.20605 572.7
+1198.15308 3302.7
+1459.00623 603.4
+1525.39429 860.4
+1856.79419 719.9
+1878.45227 1033.5
+1879.29907 3509.4
+1879.59167 18668.1
+1879.88684 3059.0
+1880.06885 2467.7
+1880.84058 700.5
+1881.16687 681.2
+1885.09558 684.0
+1907.05054 7483.5
+1930.58362 1113.5
+1948.03333 600.9
+S	239	239	1907.42840793
+Z	3	5719.01
+Z	2	3813.009
+532.56018 1705.3
+553.87677 711.4
+646.18701 671.7
+676.62738 933.0
+739.28033 531.5
+779.22516 602.0
+1057.21960 768.7
+1140.48059 697.8
+1183.25293 633.9
+1198.25452 3226.4
+1269.16150 598.7
+1742.26892 654.2
+1877.31702 916.9
+1878.47913 1018.7
+1878.82141 1238.5
+1879.48047 19137.7
+1880.13660 1402.9
+1907.06323 7203.9
+S	241	241	1879.83699127
+Z	3	5636.236
+Z	2	3757.826
+519.39911 681.0
+532.57300 1833.5
+549.10657 821.8
+589.84674 641.2
+630.35620 673.5
+659.45917 754.9
+676.62457 1080.6
+783.21637 625.8
+1180.63135 658.0
+1198.28088 3203.9
+1878.62805 1245.2
+1879.07117 1295.1
+1879.49072 18307.6
+1879.90552 1618.9
+1880.12952 1258.3
+1907.04541 7527.0
+1930.46973 702.7
+1991.80676 593.7
+S	242	242	1907.4598246
+Z	3	5719.104
+Z	2	3813.072
+532.56451 1870.0
+532.62848 812.2
+630.37219 1142.5
+676.63647 813.9
+795.53052 1041.5
+798.91956 705.9
+875.44812 615.0
+900.20288 802.9
+912.11200 709.0
+1069.65405 608.3
+1152.23071 614.4
+1198.26172 3589.0
+1586.36389 587.6
+1878.27344 671.1
+1878.91492 1360.8
+1879.16321 1884.6
+1879.53418 19859.1
+1879.91211 1461.3
+1907.03064 7719.8
+1922.25427 714.1
+1930.50366 1240.0
+1987.12256 659.0
+S	244	244	1879.90340793
+Z	2	3757.959
+Z	3	5636.435
+532.57196 1709.8
+577.06018 566.2
+607.36542 626.1
+623.42554 670.3
+676.59766 984.6
+682.11682 815.0
+795.53925 838.6
+1019.94836 604.2
+1057.18835 902.1
+1079.28210 617.6
+1086.26538 707.7
+1130.33862 545.3
+1198.27686 3229.2
+1261.60242 529.8
+1360.55383 718.7
+1718.45984 1009.0
+1718.59900 679.9
+1849.24988 590.1
+1852.56519 631.0
+1876.52808 651.0
+1879.42737 19365.4
+1907.07458 7524.6
+1944.72034 839.1
+S	245	245	1907.42740793
+Z	2	3813.007
+Z	3	5719.007
+532.57184 2104.3
+676.63092 1133.1
+697.66248 565.6
+795.52661 1109.7
+833.12311 642.7
+918.83093 687.6
+939.90002 598.4
+960.13043 651.5
+979.12970 704.9
+1156.53833 644.6
+1198.27185 3058.8
+1358.55908 549.7
+1395.26440 651.3
+1398.25757 654.4
+1484.97729 629.3
+1719.70544 800.1
+1770.73279 663.6
+1879.01135 1300.6
+1879.48926 20148.2
+1879.93738 1366.9
+1881.67285 726.0
+1907.02356 7067.5
+1930.51282 987.5
+S	247	247	1907.40924127
+Z	2	3812.971
+Z	3	5718.952
+532.59137 1656.0
+552.00934 649.8
+573.65021 608.4
+580.75323 685.9
+630.35767 829.8
+676.64227 1363.8
+795.53241 1011.4
+1057.24475 918.2
+1198.31689 3594.2
+1257.78650 621.2
+1311.24500 617.4
+1561.64294 581.0
+1718.75903 1155.6
+1758.69739 732.5
+1871.23108 810.7
+1872.52271 915.2
+1878.55591 882.2
+1879.54004 19299.4
+1879.83032 3591.8
+1880.38171 1009.1
+1880.50024 1013.5
+1880.80103 1006.8
+1881.45056 915.1
+1906.95837 7214.9
+1907.22144 1698.5
+1930.44043 1174.9
+1996.23608 740.6
+S	249	249	1879.96640793
+Z	2	3758.085
+Z	3	5636.624
+532.55365 2036.3
+538.62158 654.5
+553.17719 609.0
+630.41345 779.5
+676.63562 650.3
+789.26031 638.5
+795.53278 1215.1
+800.62952 719.7
+837.49615 593.5
+880.92096 613.6
+952.04773 607.2
+1140.44678 572.9
+1198.23767 3386.9
+1430.50671 668.8
+1459.83630 689.6
+1878.93250 1439.6
+1879.57690 16582.3
+1879.91772 4323.7
+1880.29065 1432.9
+1880.51318 1024.5
+1881.31494 806.3
+1907.04724 7731.0
+1907.99695 606.7
+1930.62854 1036.0
+1961.47021 571.9
+S	250	250	1907.4355746
+Z	2	3813.023
+Z	3	5719.032
+532.55835 1913.0
+536.66565 770.1
+628.92712 602.3
+630.42853 923.8
+636.89270 695.4
+684.83112 707.1
+692.13672 645.7
+695.94312 691.8
+763.15637 686.4
+795.52667 1060.5
+1026.67334 703.8
+1150.93420 656.2
+1198.24915 3440.0
+1354.55127 569.7
+1525.45959 849.5
+1692.01831 645.5
+1877.96252 763.3
+1878.16467 744.7
+1878.79614 837.5
+1879.55408 18646.1
+1882.56482 653.0
+1907.03064 7202.4
+1930.64490 1181.2
+S	252	252	1879.91140793
+Z	3	5636.459
+Z	2	3757.975
+530.66199 548.5
+532.51593 1660.7
+676.63043 765.2
+741.69330 662.5
+749.67456 683.8
+789.80194 604.6
+1044.19226 638.4
+1052.62756 606.4
+1132.69495 688.3
+1190.88391 640.0
+1198.14929 2966.8
+1276.42371 594.4
+1352.92810 629.1
+1640.14185 588.5
+1764.17932 640.6
+1877.81921 793.2
+1878.78381 1070.4
+1879.48474 19065.0
+1880.14966 1097.1
+1881.07202 784.6
+1882.94275 644.2
+1907.07764 7487.7
+1918.72021 732.0
+1930.65552 1193.9
+S	253	253	1907.39599127
+Z	3	5718.913
+Z	2	3812.944
+532.55774 1435.0
+532.59937 733.1
+599.09094 719.5
+676.61389 1000.5
+741.31403 678.4
+795.54718 946.3
+875.48096 730.9
+1019.79572 809.0
+1057.22864 823.4
+1096.59998 784.2
+1198.25183 2960.5
+1198.39050 666.2
+1280.94788 590.3
+1299.45154 689.9
+1346.93945 603.0
+1525.47607 765.3
+1561.81921 573.5
+1876.14832 708.6
+1878.68604 813.4
+1879.14526 1411.0
+1879.46582 20288.0
+1879.80078 1433.8
+1880.27295 888.7
+1882.83142 698.7
+1907.06409 7712.1
+S	255	255	1879.89440793
+Z	3	5636.408
+Z	2	3757.941
+532.55927 2002.8
+640.84717 693.1
+676.63757 924.3
+681.90906 534.0
+712.68073 520.6
+764.88226 613.0
+795.54327 1084.3
+834.24408 692.0
+852.42114 605.5
+907.88599 658.7
+914.68353 600.7
+1057.25220 752.8
+1198.24268 3317.2
+1273.99451 713.7
+1333.70850 605.8
+1466.68555 855.3
+1661.66492 678.7
+1777.63525 1004.6
+1806.11487 641.2
+1878.27075 852.2
+1878.85242 1075.1
+1879.53186 19707.5
+1879.81128 2728.4
+1880.24792 1708.4
+1880.48950 905.2
+1907.00769 7481.8
+1930.51038 723.3
+1986.43884 814.5
+1995.77319 643.5
+S	258	258	1879.88699127
+Z	2	3757.926
+Z	3	5636.386
+532.55109 1927.9
+549.15881 565.1
+577.86926 635.2
+586.70367 680.7
+630.42419 880.7
+670.03607 635.0
+676.62665 697.0
+709.84595 721.3
+727.25812 559.4
+855.01465 667.9
+904.11633 659.9
+960.62946 581.9
+981.38104 674.6
+985.29645 656.4
+988.68988 666.4
+1124.69653 764.0
+1158.19690 616.7
+1194.72546 749.6
+1198.22351 3016.5
+1246.17944 664.5
+1413.78333 666.9
+1675.22644 658.0
+1726.03198 688.3
+1738.62854 671.9
+1777.70154 684.4
+1865.15479 659.9
+1878.69043 729.7
+1879.03674 3018.2
+1879.50159 18613.4
+1879.89209 2395.6
+1880.82446 1064.5
+1903.89490 647.2
+1907.09814 7854.3
+1908.62268 840.0
+1930.58948 760.4
+S	259	259	449.2538246
+Z	2	896.66
+Z	3	1344.486
+118.80151 597.0
+121.02935 575.5
+121.81235 2742.0
+137.27522 620.5
+147.74193 570.6
+161.29335 655.1
+198.88477 912.9
+199.14359 1025.8
+199.15599 662.0
+199.16470 526.1
+199.16907 584.4
+199.23952 2812.5
+199.25385 1498.6
+199.25920 803.6
+199.33580 926.1
+201.21744 615.2
+247.93396 539.5
+250.87781 778.0
+252.79668 559.9
+252.87991 5324.4
+258.31952 501.3
+270.88937 1185.6
+287.53287 637.8
+348.85641 19269.8
+350.27921 822.4
+350.85672 67046.4
+359.52261 536.2
+368.86679 2067.7
+372.09943 554.8
+391.98935 679.8
+401.76868 2238.2
+406.77466 8018.8
+408.77219 2777.6
+424.78342 1046.4
+427.09641 618.5
+431.08438 7689.5
+431.89410 566.0
+432.08640 1581.2
+433.08301 663.7
+453.15677 585.9
+469.86987 660.2
+470.73184 566.4
+476.77237 689.2
+482.60535 930.7
+489.81470 678.5
+508.35999 590.4
+529.86853 661.5
+532.55298 1952.8
+549.10107 712.7
+630.34186 983.7
+664.11945 591.8
+676.61279 1012.9
+795.53113 1050.3
+823.25488 593.9
+1109.98889 678.7
+1111.61377 935.5
+1153.21692 568.1
+1188.27979 660.1
+1198.23853 3764.9
+1275.51624 568.3
+1406.00342 614.7
+1526.26965 675.2
+1695.62769 676.5
+1716.92041 590.6
+1743.77246 578.6
+1744.08948 589.8
+1777.53955 934.0
+1779.80701 598.4
+S	260	260	547.229991267
+Z	2	1092.612
+Z	3	1638.415
+146.13904 535.6
+146.91760 546.8
+157.41171 638.0
+165.80110 574.9
+171.63516 612.2
+173.89671 503.3
+177.59148 597.9
+178.32155 616.4
+178.40958 762.7
+183.30853 503.7
+188.24672 602.9
+188.26494 762.5
+188.27376 1299.6
+188.28275 1365.4
+188.28909 1317.8
+188.29971 1304.0
+188.31229 1001.1
+188.32932 640.9
+193.64354 604.3
+198.88509 934.2
+199.16585 861.3
+199.18030 757.7
+199.23100 1267.9
+199.24454 1590.2
+199.26418 1882.1
+199.27412 1318.4
+199.28775 801.1
+199.33554 755.7
+199.36057 891.6
+204.47707 620.1
+221.34596 611.2
+225.16637 593.3
+239.79515 494.0
+244.12375 534.2
+245.76060 651.5
+245.93501 600.3
+255.28384 655.0
+271.71457 550.1
+277.71887 706.4
+279.03302 571.4
+281.56421 666.8
+301.82483 610.1
+348.85764 1327.6
+350.85699 13485.0
+353.48657 556.5
+379.62329 681.3
+385.25266 567.1
+417.22253 490.8
+418.44647 558.6
+427.52786 614.8
+436.23334 587.5
+446.83170 1381.9
+448.83337 16922.4
+451.99521 719.7
+482.64252 603.2
+488.09982 643.9
+504.75238 4866.9
+506.74969 1908.8
+522.26563 572.8
+532.58179 2138.4
+549.13477 771.2
+572.46008 643.4
+616.17200 632.2
+676.62018 1194.9
+748.61243 615.3
+795.52344 829.0
+817.73090 531.2
+908.02814 591.3
+946.76990 567.5
+1000.30396 625.2
+1020.93530 720.5
+1069.97766 643.1
+1188.30481 756.4
+1198.30347 3580.4
+1428.80994 633.7
+1525.38086 606.4
+1532.98633 709.4
+1694.92114 651.1
+1770.93298 705.5
+1777.64185 915.9
+1809.56360 568.3
+1875.80151 768.7
+1879.48621 19421.8
+1880.00195 1091.8
+1907.02075 7517.7
+1918.67615 756.8
+1930.54175 863.8
+1951.59045 592.3
+S	262	262	449.2538246
+Z	2	896.66
+Z	3	1344.486
+111.20053 634.1
+111.47572 583.0
+113.46036 843.1
+121.81313 3140.5
+150.11925 577.1
+155.69524 601.9
+165.43686 622.6
+165.80125 791.2
+166.79277 499.4
+182.77895 990.3
+192.00636 560.5
+192.06668 573.4
+198.07462 663.5
+198.89023 691.8
+199.14993 871.8
+199.15892 688.8
+199.20383 766.0
+199.23796 1714.3
+199.24829 2708.7
+199.25740 961.1
+199.35669 703.0
+199.98799 537.1
+208.53117 594.7
+211.91663 568.5
+214.50963 779.7
+227.76920 628.8
+234.41324 482.7
+237.81314 573.5
+252.87990 1822.4
+260.49152 548.1
+312.09146 580.9
+348.85547 2601.0
+350.28018 834.8
+350.85675 16745.7
+406.77594 3509.6
+408.77246 1389.9
+431.08481 4013.5
+432.08664 1113.6
+522.58258 647.4
+532.54224 2095.6
+549.14331 868.0
+592.62885 577.5
+617.79181 555.4
+638.46466 631.2
+657.76740 758.9
+676.61188 827.9
+733.96887 667.3
+751.45605 603.6
+769.43817 652.4
+795.19385 652.3
+795.55133 854.4
+947.64447 574.5
+1021.13171 1003.0
+1132.47742 560.7
+1198.21692 3245.4
+1571.53394 681.1
+1592.38867 605.8
+1638.73474 596.8
+S	263	263	1879.91524127
+Z	3	5636.47
+Z	2	3757.983
+532.50830 1811.0
+599.32642 668.9
+676.61829 1125.2
+711.20142 574.2
+790.01270 646.8
+793.88080 592.7
+795.53455 889.9
+817.15985 680.8
+913.23950 618.0
+955.25476 660.3
+1020.85956 744.7
+1039.20667 621.7
+1057.21240 1143.0
+1181.84204 572.6
+1198.12634 3333.6
+1270.44507 647.8
+1282.06873 660.8
+1436.39490 667.7
+1607.57141 647.4
+1870.33728 637.8
+1877.24438 649.6
+1879.02979 1890.2
+1879.47095 20002.5
+1879.93726 1676.1
+1907.04736 7386.2
+1925.23889 652.8
+1930.52551 1125.3
+1989.61646 663.0
+1992.77356 645.4
+1993.39502 684.7
+S	264	264	547.229991267
+Z	2	1092.612
+Z	3	1638.415
+158.66481 593.3
+172.01070 591.6
+174.53104 522.2
+176.74117 514.0
+179.03630 632.4
+180.19846 552.0
+182.14632 550.5
+187.27069 685.0
+188.25728 915.0
+188.26471 1037.8
+188.27850 1183.5
+188.29193 1398.2
+188.29726 1310.5
+188.31093 1109.9
+188.32121 731.3
+188.34418 554.5
+188.37749 629.8
+198.88509 1021.2
+199.13669 591.8
+199.16000 1051.4
+199.17007 835.1
+199.20247 569.1
+199.23761 1573.1
+199.25862 1705.6
+199.26709 2105.0
+199.35699 714.7
+199.36578 955.7
+207.45081 611.5
+222.62019 553.1
+236.84535 523.8
+242.87833 527.7
+252.39304 621.4
+256.19519 551.7
+256.85583 565.1
+265.42355 520.0
+265.57434 671.2
+277.27570 562.9
+291.10571 560.9
+315.11792 606.9
+326.99875 680.2
+329.53174 597.3
+338.49323 562.3
+366.28369 622.3
+410.50391 541.4
+414.32040 500.3
+514.80115 587.9
+532.49689 2107.3
+549.10107 688.9
+606.24146 635.7
+630.33618 557.3
+676.64014 1327.9
+717.21344 536.0
+795.52832 849.5
+817.41431 557.1
+948.84613 589.7
+1057.26196 1065.3
+1137.54346 589.7
+1198.11609 3490.4
+1224.62732 567.2
+1238.59619 616.4
+1267.91370 598.1
+1376.30920 573.8
+1411.05212 647.8
+1413.62305 570.1
+1488.78125 650.0
+1489.00732 580.1
+1777.57434 798.1
+1878.14172 575.2
+1878.37366 766.8
+1878.65515 751.4
+1878.97681 1109.7
+1879.23340 1857.6
+1879.55518 20201.8
+1879.88879 1149.1
+1880.15015 903.3
+1880.48279 957.2
+1883.22351 637.5
+1907.09045 6974.3
+1918.70349 925.4
+1930.42114 814.5
+S	266	266	1879.88499127
+Z	2	3757.922
+Z	3	5636.38
+507.95374 633.8
+519.60168 726.7
+532.52771 2029.2
+541.23688 598.9
+549.10669 807.2
+594.88934 733.2
+671.40515 570.2
+707.85669 572.3
+755.32544 560.1
+795.54437 978.0
+905.92609 666.9
+1021.25348 664.5
+1198.17664 3019.6
+1320.77234 612.2
+1571.14038 589.3
+1878.08838 701.3
+1878.25171 736.6
+1878.84570 1516.3
+1879.47021 19344.8
+1879.70703 2925.4
+1880.17834 1175.9
+1880.63928 832.8
+1907.06543 7404.0
+1930.41345 1172.0
+1932.50232 1060.7
+S	267	267	449.254407933
+Z	3	1344.488
+Z	2	896.661
+121.81277 2855.7
+134.35454 599.6
+138.53020 564.8
+138.66156 743.0
+141.85117 597.9
+147.09929 555.9
+150.35915 570.4
+165.80096 676.1
+182.62062 700.0
+187.08858 599.3
+192.43500 577.3
+198.88556 826.6
+199.14626 574.3
+199.16565 1167.2
+199.20660 942.2
+199.21422 754.2
+199.23398 769.4
+199.24263 2250.8
+199.25978 1499.5
+199.27150 663.6
+199.34140 947.7
+199.36159 674.9
+199.36874 721.5
+201.65703 551.7
+208.77711 700.6
+214.28694 547.4
+226.48607 719.8
+227.33817 618.5
+238.75139 643.8
+252.11588 575.1
+259.56619 616.8
+278.93405 568.7
+280.18848 750.2
+327.02414 587.6
+350.28589 664.3
+350.31448 588.9
+350.85904 1126.3
+394.33575 613.4
+408.10834 635.1
+426.57510 606.1
+431.08356 2129.2
+454.90479 507.0
+476.78210 566.5
+532.52454 1827.3
+573.60962 668.8
+630.41327 1025.3
+676.61743 1033.9
+741.28101 610.1
+749.23724 600.5
+795.53870 899.8
+1048.73352 674.0
+1135.17505 580.3
+1146.11462 613.1
+1198.17908 3398.8
+1302.55396 637.6
+1478.32947 579.0
+1480.12732 721.3
+1517.33521 669.9
+1525.45813 766.5
+1692.76721 632.0
+S	268	268	1907.4698246
+Z	2	3813.092
+Z	3	5719.134
+532.52905 1944.7
+549.14050 660.5
+562.46436 659.2
+591.83807 702.4
+630.39996 844.5
+648.10608 583.3
+676.63074 1139.6
+731.10986 860.1
+751.66199 678.6
+779.55170 646.5
+810.15210 615.3
+875.72107 669.3
+876.94257 654.3
+892.02106 739.3
+1011.57831 591.6
+1057.23901 948.6
+1173.23303 678.8
+1187.91223 803.2
+1198.18652 3335.8
+1418.89758 615.0
+1594.38293 736.0
+1616.71289 582.0
+1694.80176 792.4
+1772.37500 617.7
+1873.02783 710.3
+1877.01086 691.7
+1878.97913 1686.3
+1879.50952 19910.5
+1880.09851 1817.3
+1907.08337 7205.9
+S	270	270	1907.41640793
+Z	3	5718.974
+Z	2	3812.985
+532.51453 787.2
+532.54797 1522.3
+532.58667 660.0
+564.89801 609.4
+656.44238 773.0
+676.59784 1168.5
+728.80707 729.3
+731.10913 784.3
+751.65979 569.5
+774.63995 624.2
+795.55536 1056.0
+844.65082 531.1
+1083.84375 726.6
+1198.22119 3240.8
+1247.36194 623.2
+1879.03418 1001.7
+1879.41699 19992.3
+1879.72070 1611.5
+1880.14917 823.1
+1880.46558 683.7
+1907.08752 7046.8
+1930.56592 1428.7
+S	272	272	1879.9558246
+Z	2	3758.064
+Z	3	5636.592
+510.08954 742.5
+521.42041 583.9
+532.53583 1806.3
+549.13562 960.0
+549.19849 576.5
+630.38647 712.0
+651.17480 588.7
+795.55273 877.3
+886.13806 699.6
+1100.32703 793.4
+1198.20142 3257.5
+1328.35315 628.1
+1525.34302 952.1
+1625.59167 624.5
+1878.15527 1274.0
+1879.47302 19515.5
+1879.74915 3869.5
+1880.33862 682.7
+1880.76184 1502.3
+1882.23218 747.1
+1906.61108 619.8
+1907.04114 7113.5
+1940.92566 721.1
+S	273	273	1907.42799127
+Z	3	5719.009
+Z	2	3813.008
+532.52209 1859.2
+590.05011 597.1
+630.40430 673.9
+676.63641 1015.7
+714.58612 735.0
+731.10382 831.2
+1057.22607 1145.3
+1198.16785 3165.7
+1368.83264 725.4
+1384.36963 554.2
+1398.97131 656.0
+1511.08154 722.7
+1651.56726 565.6
+1836.05847 638.2
+1877.67700 766.3
+1878.26013 1056.8
+1878.98853 993.5
+1879.25867 3126.2
+1879.51514 19274.5
+1880.02185 1155.2
+1906.97656 6929.7
+1907.24194 1535.5
+1918.73755 872.1
+1930.54846 815.7
+S	275	275	1879.91699127
+Z	2	3757.986
+Z	3	5636.476
+532.56976 1960.7
+549.16315 793.0
+571.90094 512.0
+589.17944 669.0
+595.33105 723.9
+630.40497 950.6
+639.40967 582.7
+676.62610 1111.6
+780.26074 683.7
+795.54669 931.2
+822.81049 640.2
+851.23547 615.5
+1025.52368 627.1
+1057.24060 932.7
+1180.24243 653.4
+1198.27747 3026.2
+1206.94189 562.3
+1255.42432 563.0
+1525.41101 1024.2
+1594.64636 620.2
+1706.78210 596.6
+1791.00598 694.0
+1878.23840 1263.8
+1878.56055 1182.3
+1879.17261 2215.3
+1879.50183 19678.1
+1879.86646 1657.7
+1880.12817 744.8
+1880.50049 770.4
+1880.74731 814.1
+1883.20398 627.7
+1906.68787 652.4
+1907.01770 7688.6
+1926.97681 627.1
+1930.59058 1152.7
+S	276	276	1907.47199127
+Z	2	3813.096
+Z	3	5719.141
+532.57758 2028.3
+630.41541 811.0
+633.33374 712.2
+676.63751 705.9
+731.08142 686.9
+731.12177 638.7
+795.54700 743.4
+842.88733 653.6
+913.60736 748.8
+916.56866 679.7
+953.09222 618.1
+1020.93414 610.3
+1058.64722 574.5
+1110.92920 771.2
+1198.29053 3421.1
+1211.03650 613.8
+1589.79065 769.7
+1777.56628 707.5
+1788.42493 550.3
+1875.92285 758.5
+1876.89246 771.4
+1878.55493 1031.6
+1879.16284 2411.2
+1879.53149 19261.5
+1879.90784 2307.9
+1880.48425 1057.6
+1884.47144 674.3
+1885.41455 688.3
+1906.99963 6868.2
+1930.56311 864.8
+1994.74158 612.5
+S	278	278	1879.97840793
+Z	3	5636.66
+Z	2	3758.109
+522.37274 692.3
+532.57568 1561.3
+666.52460 645.4
+667.72406 593.6
+676.64032 1027.7
+676.74036 610.3
+706.12274 667.6
+795.54523 740.8
+813.48895 603.2
+1057.24670 946.4
+1195.61792 721.4
+1198.29602 3453.8
+1263.56653 669.9
+1309.75244 654.6
+1425.31104 708.7
+1463.11658 631.2
+1525.44165 894.9
+1607.82153 618.1
+1777.67712 812.8
+1797.17749 572.4
+1879.54016 20204.2
+1880.90967 561.3
+1906.96252 6964.7
+1909.43787 662.0
+S	281	281	1879.9138246
+Z	3	5636.466
+Z	2	3757.98
+532.60889 2137.4
+535.71106 572.7
+641.26666 586.2
+651.77563 608.0
+676.63110 1013.8
+707.16638 590.7
+736.98383 656.9
+773.66473 659.8
+797.14429 768.9
+832.51636 704.6
+872.69501 664.5
+1198.36133 3491.2
+1209.03455 574.6
+1283.95947 613.3
+1351.02124 683.6
+1525.31250 968.3
+1830.94238 697.7
+1875.91028 560.8
+1878.34155 1301.1
+1879.23254 2808.1
+1879.51160 19681.7
+1879.79358 2524.4
+1880.11096 1273.8
+1880.62158 986.1
+1881.61462 745.8
+1907.04956 7217.1
+1930.41821 1132.1
+1950.16016 641.7
+1955.53430 792.4
+S	282	282	1907.32699127
+Z	3	5718.706
+Z	2	3812.806
+515.49158 533.8
+520.99927 613.5
+532.55847 1670.4
+630.37372 1026.5
+795.54834 1137.1
+1011.92712 683.2
+1110.58728 692.2
+1198.24548 3345.0
+1360.96045 634.7
+1525.38196 781.2
+1647.35779 631.2
+1743.69067 563.2
+1787.86597 617.2
+1878.59119 922.4
+1879.24683 1167.1
+1879.49963 19833.8
+1880.83459 874.3
+1906.68530 1005.8
+1907.00452 7625.5
+S	284	284	1879.92799127
+Z	2	3758.008
+Z	3	5636.509
+532.56610 1642.6
+537.78882 560.1
+549.09131 799.9
+698.82904 643.8
+731.04700 717.0
+750.69751 672.2
+795.56165 1222.6
+804.31836 754.0
+818.65167 604.3
+912.04114 507.1
+912.09033 590.9
+1198.26453 3213.0
+1511.26978 753.4
+1513.86108 634.9
+1525.26672 777.7
+1664.71277 623.4
+1666.64429 638.1
+1667.22400 675.3
+1777.58374 766.8
+1857.96387 592.4
+1874.92236 660.3
+1875.14856 613.0
+1876.33374 921.5
+1879.46912 19866.0
+1879.81091 1581.5
+1880.03064 966.6
+1882.56104 792.7
+1907.01917 6542.6
+1938.56091 624.5
+S	285	285	1907.4618246
+Z	2	3813.076
+Z	3	5719.11
+532.54443 1747.8
+630.35779 934.3
+633.69269 684.3
+661.93060 668.6
+674.05206 633.2
+676.61786 1331.1
+717.85645 612.5
+795.54358 1126.5
+867.54858 550.4
+867.61890 530.0
+873.98010 592.5
+1019.21045 689.3
+1188.08496 941.8
+1198.21411 3422.7
+1243.53418 560.5
+1368.07861 566.2
+1467.54639 701.1
+1548.78088 587.2
+1875.99414 787.8
+1878.80835 1165.6
+1879.18994 1846.3
+1879.48901 19340.8
+1880.10291 994.7
+1881.34644 723.4
+1907.02771 7361.0
+1930.45276 1036.3
+S	287	287	1879.86224127
+Z	3	5636.311
+Z	2	3757.877
+519.82990 640.3
+523.59741 676.5
+532.56055 1612.2
+676.64984 1187.7
+696.51715 694.7
+795.55054 772.9
+831.25476 569.5
+1057.27356 928.6
+1157.24670 732.3
+1198.26086 3096.9
+1208.89526 733.3
+1273.79675 624.1
+1525.35999 836.4
+1667.19482 720.1
+1878.71399 1081.7
+1879.24719 3037.8
+1879.55664 19621.2
+1880.06726 1023.3
+1880.37476 1216.3
+1880.70020 1220.1
+1907.03613 7385.4
+1930.53345 974.7
+S	288	288	1907.5233246
+Z	2	3813.031
+532.50470 838.1
+532.54559 1122.7
+548.50037 712.0
+549.15778 657.7
+592.93390 628.2
+596.37274 608.1
+630.40466 695.8
+676.62524 864.9
+737.18201 592.6
+750.00458 726.7
+760.41565 566.2
+795.55280 847.2
+966.70251 638.4
+972.98181 644.9
+975.13861 659.2
+1002.50659 754.4
+1014.70508 619.1
+1019.49078 640.0
+1079.24927 729.6
+1081.05188 540.9
+1125.39331 728.4
+1133.52747 605.8
+1188.29773 880.7
+1191.23206 602.4
+1198.19348 2454.1
+1283.49121 596.0
+1329.89819 642.6
+1488.94690 711.6
+1525.43286 708.0
+1611.79199 688.6
+1634.42944 698.5
+1661.42725 748.6
+1777.57751 824.7
+1878.54675 883.7
+1879.50879 18946.7
+1879.77820 3148.6
+1880.38843 813.9
+1904.11792 769.1
+1907.04663 7689.8
+1930.60046 1324.8
+1951.53149 602.4
+S	290	290	1879.90099127
+Z	3	5636.428
+Z	2	3757.954
+510.43570 581.2
+523.00690 600.0
+532.53375 2052.5
+534.37274 593.2
+556.45990 579.7
+595.49420 573.4
+630.40619 763.7
+676.64545 702.2
+678.01215 592.0
+715.08099 719.8
+795.54614 953.1
+852.17371 624.0
+858.04443 722.6
+1057.23376 904.5
+1188.33887 727.9
+1198.20105 3704.0
+1245.36853 592.7
+1360.44824 630.4
+1444.33179 557.0
+1714.38159 730.6
+1777.55981 693.1
+1869.37891 707.3
+1877.12012 802.6
+1879.52515 18423.4
+1879.75854 3964.7
+1881.69385 865.2
+1907.07751 7237.6
+1918.68982 1103.6
+S	291	291	1907.48399127
+Z	3	5719.177
+Z	2	3813.12
+532.57880 1675.9
+549.15942 720.2
+594.75574 643.7
+669.53577 620.6
+676.64111 874.4
+681.57141 783.5
+770.81543 607.6
+838.15015 643.8
+893.27179 706.3
+1057.23267 899.8
+1188.24243 878.9
+1198.29956 2909.8
+1292.43811 739.8
+1409.21875 602.0
+1471.68030 858.4
+1500.85437 626.7
+1561.03821 624.3
+1633.15381 523.5
+1633.26599 598.8
+1694.48999 594.9
+1694.72290 594.4
+1702.05798 595.6
+1798.61414 683.8
+1817.21460 750.8
+1877.04138 686.7
+1878.40125 1178.8
+1879.08484 1750.4
+1879.50989 18639.3
+1880.07727 821.0
+1906.61902 1083.8
+1906.89612 7036.7
+S	293	293	1879.89399127
+Z	2	3757.94
+Z	3	5636.407
+532.58020 1760.9
+533.88971 566.0
+630.36798 920.3
+631.06854 723.5
+638.06641 787.4
+661.07739 559.0
+661.10925 507.7
+676.63934 713.0
+696.15540 606.8
+731.06873 815.9
+795.56287 702.1
+1113.74231 580.9
+1173.69983 684.6
+1187.84619 640.3
+1198.30286 3461.5
+1210.66614 602.4
+1394.65112 732.9
+1757.83472 676.3
+1777.47412 688.7
+1852.55774 638.0
+1878.49963 665.9
+1878.97437 2107.9
+1879.25684 4513.4
+1879.52515 18355.4
+1880.05762 1818.9
+1880.19214 1850.7
+1906.53259 2541.1
+1906.81677 6819.5
+1907.07922 2554.3
+1930.44897 750.1
+S	294	294	1907.33399127
+Z	2	3812.82
+Z	3	5718.727
+532.53699 1620.1
+610.29492 732.6
+630.41986 660.6
+676.62408 1272.1
+767.31873 549.8
+795.56390 1244.9
+864.65027 591.5
+965.02484 635.5
+965.22125 554.7
+1019.79419 962.3
+1031.78235 641.0
+1057.22595 790.0
+1198.20142 3602.5
+1709.28174 688.5
+1876.77759 866.7
+1878.36511 621.9
+1878.76343 1223.3
+1879.48755 19467.0
+1880.19702 1117.9
+1880.53699 1040.0
+1905.77417 720.7
+1907.06567 7847.7
+1918.67395 734.3
+1930.60864 914.5
+S	296	296	1879.92324127
+Z	3	5636.494
+Z	2	3757.999
+532.56543 2122.6
+627.15271 646.7
+676.60968 1108.9
+718.15070 590.8
+739.92767 622.1
+795.56256 849.7
+858.07269 746.7
+899.73273 642.6
+945.91364 629.1
+1044.58984 614.7
+1057.20850 854.7
+1198.26416 3146.9
+1252.16907 576.3
+1270.67554 598.5
+1344.64941 833.1
+1386.61621 611.6
+1428.69934 604.5
+1442.53003 631.3
+1777.65869 799.6
+1860.06494 643.8
+1879.07129 2042.1
+1879.45850 20325.7
+1879.87500 2148.4
+1906.61755 766.0
+1907.06311 7972.4
+1907.48511 617.6
+1930.68567 1268.8
+S	297	297	1907.47440793
+Z	3	5719.148
+Z	2	3813.101
+532.51825 728.3
+532.55371 1657.3
+533.09882 558.0
+542.33063 644.9
+560.71454 677.7
+724.64539 645.2
+781.40106 699.9
+795.56384 789.1
+822.13000 791.7
+832.83752 696.8
+1057.23083 767.9
+1072.03918 628.2
+1153.13855 677.5
+1198.23816 3470.5
+1293.36829 647.1
+1776.57446 760.8
+1879.19287 2127.9
+1879.48877 19933.6
+1879.79236 1619.9
+1881.34705 713.9
+1907.01477 7319.3
+1930.30066 695.9
+S	299	299	1879.84340793
+Z	2	3757.839
+Z	3	5636.255
+520.73840 585.5
+532.52869 1624.9
+539.95404 581.8
+612.96991 667.8
+635.39465 612.6
+658.03741 652.8
+676.62512 1104.7
+693.68970 628.2
+731.09924 929.3
+735.86987 575.0
+792.67572 661.1
+795.56110 931.0
+818.88165 633.3
+820.29315 720.3
+870.67432 599.3
+899.35144 606.4
+996.98627 612.4
+1057.23132 834.8
+1059.49719 672.1
+1147.14099 567.5
+1151.74243 661.5
+1198.18665 3005.3
+1241.72498 709.6
+1461.20984 653.0
+1525.37476 864.7
+1538.05237 558.1
+1640.54260 560.6
+1707.43005 610.1
+1846.31116 721.1
+1878.68738 1245.8
+1879.14905 2470.3
+1879.50464 19421.5
+1879.85181 2307.8
+1880.44751 818.0
+1880.94250 908.6
+1882.54822 576.5
+1907.05347 7721.4
+1930.57312 861.3
+S	300	300	1907.48640793
+Z	2	3813.125
+Z	3	5719.184
+532.52271 2232.4
+741.11371 766.7
+1019.77051 648.2
+1081.84717 626.8
+1174.75427 649.3
+1198.16711 3059.3
+1271.08777 584.2
+1537.10974 765.6
+1603.27258 643.3
+1878.91882 1401.9
+1879.46265 18929.7
+1879.73206 2925.6
+1893.59534 709.7
+1907.04431 7326.3
+1907.36267 898.1
+S	302	302	1879.89724127
+Z	2	3757.947
+Z	3	5636.416
+516.41724 705.9
+532.50568 1880.1
+549.10236 679.6
+565.85333 559.4
+578.30042 728.3
+579.14117 649.1
+676.63525 1211.6
+702.46924 639.1
+712.30634 609.5
+795.55212 863.1
+1081.92725 574.2
+1198.13306 3440.2
+1640.53406 574.1
+1713.86060 656.1
+1718.22156 861.7
+1878.54980 1260.3
+1878.99133 1587.0
+1879.52808 19997.7
+1880.01721 1237.3
+1907.05078 7413.1
+1930.46838 759.5
+S	303	303	1907.46640793
+Z	2	3813.085
+Z	3	5719.124
+532.56891 1746.7
+583.76605 615.4
+676.63123 979.2
+715.02496 759.2
+794.59717 599.8
+834.94012 597.9
+921.42609 620.7
+1140.48230 718.0
+1188.32568 875.3
+1198.27161 3107.3
+1525.33069 888.5
+1878.82617 1235.1
+1879.16406 1325.8
+1879.52844 19893.1
+1879.88171 1502.6
+1880.16333 854.4
+1897.10364 683.1
+1907.01526 7316.0
+1907.42322 689.5
+1930.48035 895.7
+S	305	305	1879.86899127
+Z	2	3757.89
+Z	3	5636.332
+532.52966 2294.1
+676.62604 1298.0
+682.42145 687.1
+795.55603 697.2
+1144.47437 580.5
+1152.61389 770.0
+1188.27112 694.9
+1198.18616 3172.2
+1268.12769 602.8
+1331.64392 705.7
+1433.82874 631.9
+1488.56104 675.8
+1495.94788 633.0
+1525.41113 813.5
+1739.74695 623.9
+1777.41931 704.9
+1879.49927 20084.0
+1880.16199 755.7
+1907.04175 7480.0
+1918.73267 765.6
+1930.53381 1056.9
+S	306	306	1907.43399127
+Z	2	3813.02
+Z	3	5719.027
+520.62012 666.1
+527.14343 630.7
+532.50714 2061.3
+636.71619 566.3
+676.62067 960.4
+778.63586 633.6
+806.60388 623.1
+858.05359 835.2
+866.14423 677.4
+884.06671 621.1
+897.85852 548.4
+914.13812 739.3
+1020.92981 710.4
+1038.51233 583.2
+1057.21387 932.1
+1198.13916 3524.6
+1211.80481 601.5
+1339.44507 722.9
+1491.28564 736.7
+1735.51001 625.3
+1777.36218 968.7
+1879.00830 1211.0
+1879.47644 19027.2
+1880.07080 1245.2
+1881.11011 824.9
+1907.04761 7007.1
+1930.67407 648.5
+S	308	308	1879.90599127
+Z	3	5636.443
+Z	2	3757.964
+532.53088 1285.3
+549.14380 755.7
+580.70190 592.2
+612.36768 669.6
+614.75189 662.3
+647.52386 614.5
+650.88641 679.6
+676.61139 1085.3
+743.40088 677.6
+795.57428 1533.8
+797.13690 623.6
+926.85461 697.8
+1019.81500 848.2
+1047.79016 585.2
+1085.25464 600.9
+1184.51501 598.6
+1198.06836 1469.7
+1198.18274 2511.2
+1397.66064 621.6
+1877.98547 627.2
+1879.10901 1491.3
+1879.46130 20223.5
+1879.80383 1543.9
+1901.35181 610.4
+1906.75000 1056.9
+1907.05042 7388.2
+1930.52734 820.6
+S	309	309	1907.46299127
+Z	2	3813.078
+Z	3	5719.114
+532.49872 1850.4
+533.51770 613.5
+549.17090 798.8
+597.06293 661.7
+612.75793 583.3
+676.61353 799.5
+696.82849 596.2
+731.14636 764.6
+795.58667 1102.6
+868.90399 683.2
+906.59644 678.4
+990.21326 688.4
+1012.99823 623.4
+1019.74921 676.9
+1198.11536 3318.6
+1283.57129 621.4
+1432.97693 615.6
+1453.85339 704.5
+1525.45581 1046.4
+1609.41260 632.2
+1777.40601 863.1
+1833.77368 738.0
+1879.45837 20023.1
+1879.76758 956.7
+1906.60950 718.0
+1906.70239 676.8
+1907.06323 7165.5
+S	311	311	1907.48299127
+Z	3	5719.174
+Z	2	3813.118
+532.50745 828.0
+532.55090 1773.3
+532.58563 662.7
+558.27399 604.9
+573.16968 710.7
+594.14172 580.9
+596.08423 598.6
+634.69714 659.3
+676.63116 850.3
+795.58203 1038.4
+808.21222 750.8
+816.07764 648.7
+1003.13361 626.8
+1198.22363 3102.4
+1198.34119 656.2
+1244.59558 705.1
+1369.18494 629.3
+1412.62109 570.6
+1488.97803 784.7
+1739.30237 660.7
+1878.03943 786.2
+1878.81738 1155.0
+1879.22888 2210.2
+1879.51428 19846.6
+1880.01550 1357.1
+1882.49500 794.3
+1907.03943 7515.5
+1930.42078 902.4
+S	313	313	1879.89499127
+Z	2	3757.942
+Z	3	5636.41
+507.92776 592.1
+521.14392 719.1
+532.58063 1688.1
+538.71063 722.5
+630.37878 700.8
+676.60095 1414.6
+731.08429 820.2
+795.56891 855.5
+834.63141 626.2
+882.23572 657.6
+1014.37622 599.7
+1146.02625 610.4
+1170.44507 639.3
+1198.30188 3390.1
+1269.51184 587.0
+1456.94446 648.3
+1564.76794 700.2
+1777.45398 662.7
+1878.43860 643.2
+1879.03442 1323.8
+1879.42407 20318.5
+1879.72949 1195.1
+1880.49011 624.6
+1906.99121 7039.2
+1930.50647 1004.6
+1991.60291 775.8
+S	314	314	1907.4808246
+Z	3	5719.167
+Z	2	3813.114
+532.56763 1838.0
+549.14758 809.2
+630.38318 694.4
+652.14301 659.7
+676.62445 1123.4
+795.59222 868.4
+827.58331 626.9
+876.58093 657.9
+1057.22302 871.2
+1188.12927 690.4
+1198.27051 3448.1
+1777.53577 1034.0
+1878.31958 754.7
+1879.11145 1286.0
+1879.49500 19746.8
+1879.80530 1456.7
+1880.46594 912.8
+1880.64673 813.1
+1881.78638 874.5
+1907.05457 7610.8
+1918.67847 767.9
+1930.57654 1030.2
+1956.55127 686.1
+1968.69617 649.4
+1974.92480 588.5
+S	316	316	1907.4518246
+Z	2	3813.056
+Z	3	5719.08
+532.59845 1879.1
+549.27826 612.0
+662.06506 690.6
+715.88263 606.6
+763.19202 571.9
+783.57538 630.3
+795.59485 867.6
+858.05829 688.0
+914.36621 637.4
+959.57104 546.1
+1019.90466 794.3
+1125.08765 708.4
+1183.48169 665.4
+1198.34180 3083.7
+1777.29309 729.9
+1877.80005 632.0
+1878.51294 1324.4
+1878.91333 908.5
+1879.45679 20077.9
+1880.02539 1109.6
+1880.41260 635.9
+1907.04590 7705.1
+1930.62549 1163.8
+S	318	318	1879.95740793
+Z	2	3758.067
+Z	3	5636.597
+510.88980 603.9
+532.58691 1637.2
+549.15002 702.6
+613.20459 657.6
+647.49707 551.3
+649.24396 612.1
+660.15240 675.2
+676.62030 688.3
+770.58893 559.6
+785.82422 648.5
+795.60938 997.5
+1019.77087 590.0
+1057.23340 693.3
+1188.25403 903.0
+1198.31030 2965.2
+1240.05249 610.4
+1247.73645 598.8
+1441.08679 688.1
+1520.30762 652.5
+1723.08936 717.4
+1874.55945 625.2
+1878.91162 1007.3
+1879.49121 19894.9
+1879.85242 1425.4
+1880.10522 1153.9
+1881.21033 1052.9
+1907.11743 7553.9
+1930.58997 1100.5
+1995.03149 692.0
+S	319	319	1907.2174246
+Z	5	9531.048
+532.55920 1933.4
+538.38422 610.1
+615.61945 656.5
+645.24548 614.9
+747.87927 705.7
+778.76447 664.4
+795.59949 1014.0
+989.02472 792.6
+1140.44568 720.2
+1198.25830 3324.9
+1489.14893 708.1
+1525.23364 993.0
+1544.21021 628.3
+1581.53296 665.9
+1877.02319 565.1
+1878.38550 933.7
+1879.06946 2535.4
+1879.50891 19259.5
+1879.91357 2208.4
+1880.26147 1561.2
+1881.09985 856.8
+1907.06836 7821.9
+1907.46936 695.0
+1930.44336 798.1
+1985.57349 613.9
+S	321	321	1879.89824127
+Z	2	3757.949
+Z	3	5636.419
+532.60284 1740.3
+540.93921 588.5
+603.18390 589.1
+630.36768 724.7
+676.62573 765.2
+676.66504 634.9
+676.72729 667.1
+677.00568 606.8
+712.37701 641.3
+795.58411 1126.1
+916.30493 592.6
+1063.27795 673.3
+1105.35620 859.8
+1145.40137 678.5
+1161.59705 595.1
+1188.56885 649.9
+1198.34656 3558.4
+1251.76514 582.7
+1370.17041 651.5
+1508.40161 623.5
+1691.54639 588.1
+1878.00366 604.1
+1878.46130 987.2
+1879.09448 862.0
+1879.39258 6070.3
+1879.64856 17559.0
+1880.31750 832.3
+1880.84766 688.2
+1881.10242 629.9
+1907.05054 7163.8
+1930.47168 796.7
+1993.08032 602.5
+S	322	322	1907.4778246
+Z	3	5719.158
+Z	2	3813.108
+532.60779 1935.7
+600.76263 821.8
+676.61554 1158.7
+795.59412 1002.7
+1097.85864 721.9
+1147.08875 659.5
+1198.36133 3687.2
+1222.35364 677.4
+1263.66943 588.3
+1310.39441 619.0
+1353.49182 756.7
+1451.17639 705.0
+1499.94421 569.8
+1545.76843 687.7
+1558.29163 687.5
+1619.25952 627.8
+1644.33276 613.5
+1752.93408 661.1
+1777.50122 779.2
+1879.15259 1726.8
+1879.47437 20195.6
+1879.83484 1054.4
+1881.94763 622.2
+1883.82849 675.6
+1907.05530 7164.9
+1930.60364 661.0
+S	324	324	1879.92740793
+Z	2	3758.007
+Z	3	5636.507
+510.76608 641.1
+532.61066 1611.3
+578.54596 584.4
+676.18085 639.6
+676.66083 698.7
+695.27917 661.7
+784.08020 586.9
+827.06055 609.0
+1020.93030 646.8
+1031.41455 762.6
+1198.37317 3343.1
+1208.52734 601.7
+1225.86829 639.0
+1385.90283 637.9
+1525.37341 686.0
+1637.13440 779.8
+1877.59839 743.3
+1879.21619 3433.3
+1879.58704 18529.1
+1879.97876 3956.8
+1880.32544 1503.5
+1907.07397 7513.4
+1980.79541 765.4
+S	325	325	1907.47299127
+Z	2	3813.098
+Z	3	5719.144
+532.58649 1874.1
+555.77930 680.9
+630.34448 629.1
+677.18677 786.6
+696.34967 663.3
+717.07959 593.8
+742.53253 592.9
+761.88379 623.2
+795.59375 1013.0
+802.16345 648.4
+916.12659 605.3
+942.40167 583.0
+954.06732 646.6
+1049.07483 548.4
+1198.30994 3387.3
+1294.85535 656.5
+1876.72852 784.1
+1878.17932 609.1
+1878.36938 665.0
+1878.94250 1368.0
+1879.07983 750.3
+1879.49902 19338.8
+1880.09241 1369.4
+1880.47119 850.2
+1907.04285 7549.8
+1930.40759 1044.6
+S	327	327	1907.41040793
+Z	3	5718.956
+Z	2	3812.973
+516.85535 583.2
+532.56964 1895.5
+534.97571 618.1
+553.83685 779.4
+579.25555 662.2
+595.71411 678.2
+630.42035 908.0
+676.62427 1336.5
+771.66992 576.7
+795.61255 696.9
+810.58624 600.3
+868.58167 639.5
+1019.82220 584.8
+1065.77185 588.3
+1067.90588 600.8
+1090.39185 706.0
+1189.55444 693.9
+1198.09802 697.8
+1198.27393 3017.7
+1531.31934 690.0
+1596.49866 599.9
+1878.31909 843.0
+1879.48206 19454.7
+1879.98096 1022.3
+1881.34314 951.4
+1907.00635 7061.1
+1930.66248 1136.4
+S	329	329	1879.89499127
+Z	3	5636.41
+Z	2	3757.942
+529.12299 716.1
+532.54584 2208.9
+617.24725 792.9
+630.45288 720.1
+632.61932 682.0
+676.63940 1336.0
+680.15485 680.3
+692.88037 619.0
+906.13525 794.2
+967.36230 577.4
+986.42456 681.1
+1056.93628 655.1
+1057.25000 1043.1
+1059.12939 575.5
+1171.62280 606.9
+1198.21521 3689.1
+1270.51599 581.8
+1607.65100 677.0
+1624.09180 717.8
+1871.24036 706.8
+1876.62939 946.1
+1877.38354 642.1
+1878.59082 799.9
+1878.86279 1568.3
+1879.08716 1134.2
+1879.30334 1742.3
+1879.53870 19062.8
+1880.22693 1391.5
+1880.91296 960.7
+1906.61621 752.9
+1907.04675 7163.3
+1918.80603 547.5
+1918.97375 571.6
+S	330	330	1907.45940793
+Z	3	5719.103
+Z	2	3813.071
+532.53015 2003.3
+549.16602 818.4
+615.70477 546.0
+652.46741 595.2
+655.85516 520.5
+676.63300 1419.2
+783.31250 649.1
+795.60895 911.9
+799.30316 688.0
+1037.26086 654.9
+1057.24988 896.2
+1107.73816 631.3
+1160.93811 611.2
+1198.17737 3298.5
+1199.76111 659.7
+1525.44385 1046.4
+1529.55310 704.6
+1598.77966 678.1
+1608.44446 686.6
+1878.60681 1136.2
+1879.04822 2000.7
+1879.51196 18946.9
+1879.78687 1689.8
+1879.98389 1662.9
+1880.41345 1214.4
+1880.83264 907.5
+1882.49609 639.7
+1907.01318 7070.8
+1930.62292 922.9
+1954.22449 677.1
+S	332	332	1879.90940793
+Z	3	5636.453
+Z	2	3757.971
+507.37686 586.7
+532.55682 2330.5
+596.93793 574.1
+614.23004 669.9
+642.03265 664.2
+667.33270 555.0
+676.62994 670.0
+690.13544 566.3
+731.10077 1031.6
+735.03864 565.1
+795.59729 1129.8
+827.55249 558.1
+863.76093 587.5
+1057.22546 917.8
+1161.04150 670.3
+1188.33545 663.8
+1198.24219 3330.0
+1319.08789 748.5
+1378.36255 604.1
+1428.72913 658.4
+1463.25012 615.0
+1512.34192 583.9
+1744.14587 637.0
+1872.29773 668.9
+1878.87280 1788.4
+1879.51733 19010.9
+1880.06934 1793.3
+1881.23596 879.7
+1899.88867 726.4
+1906.53015 952.7
+1906.94946 6962.0
+1918.74268 780.5
+1930.52405 1078.8
+1938.62842 608.3
+S	333	333	1907.4418246
+Z	2	3813.036
+Z	3	5719.05
+532.52844 1632.1
+553.71796 700.8
+630.36938 602.6
+693.84607 590.6
+716.56183 690.4
+731.06549 589.7
+739.50464 655.2
+795.61243 1038.3
+974.31604 717.5
+989.08356 657.4
+1029.37683 713.1
+1198.17371 2854.2
+1274.88159 643.3
+1345.61340 709.6
+1452.14856 588.3
+1649.45654 668.0
+1839.97681 596.6
+1856.84070 755.5
+1878.96448 1483.1
+1879.25000 3457.3
+1879.50586 19094.3
+1880.06946 1665.5
+1883.61230 753.5
+1906.61670 1120.9
+1906.91235 6714.2
+1918.79065 994.6
+S	335	335	1879.88340793
+Z	3	5636.375
+Z	2	3757.919
+532.51770 1690.4
+594.04425 831.2
+676.62518 1091.0
+690.99469 572.2
+795.60083 933.1
+849.67023 741.1
+916.63782 667.0
+940.16101 655.3
+1093.15210 767.4
+1184.87805 662.7
+1188.87488 577.4
+1198.14978 2962.6
+1372.94690 756.6
+1560.50391 587.9
+1879.49976 19521.3
+1880.26404 915.2
+1881.08618 829.6
+1906.91699 6773.9
+1930.66296 1183.8
+S	336	336	1907.2898246
+Z	2	3812.732
+Z	3	5718.594
+532.55389 1702.8
+578.26630 699.3
+582.97986 631.1
+630.41284 772.8
+676.64001 955.8
+739.94360 621.1
+795.59113 1013.5
+841.68268 742.9
+944.72882 651.9
+965.47583 613.1
+1066.27356 597.4
+1079.27979 639.4
+1189.97925 613.6
+1198.24304 2577.2
+1273.79883 623.3
+1294.69727 560.4
+1458.17017 576.6
+1777.49915 801.5
+1878.69019 1235.4
+1879.03259 2298.9
+1879.52209 19548.2
+1880.00940 2113.5
+1899.33325 617.2
+1907.06128 7433.3
+1930.58008 998.0
+S	338	338	1879.9365746
+Z	3	5636.535
+Z	2	3758.025
+506.28574 658.9
+532.53540 1801.7
+532.57751 543.0
+544.55829 628.0
+555.16394 653.4
+636.26947 624.0
+668.25385 559.3
+676.66284 1070.2
+690.73645 545.8
+719.55212 695.3
+795.59430 937.1
+837.66058 585.9
+1057.31042 612.2
+1100.48096 586.8
+1198.19080 2988.4
+1216.88562 667.3
+1226.70007 639.7
+1525.42139 837.6
+1878.51208 822.0
+1878.90918 1177.2
+1879.59338 18450.1
+1880.27063 888.0
+1881.67969 706.5
+1881.98950 943.9
+1907.01978 6830.1
+1930.59204 1082.7
+S	339	339	1907.49540793
+Z	3	5719.211
+Z	2	3813.143
+532.50385 1879.9
+549.13953 636.8
+581.47186 619.4
+676.57721 1333.3
+710.82745 696.5
+786.29059 570.3
+795.59851 924.6
+856.07349 560.8
+1045.13281 652.6
+1057.15100 749.1
+1187.35571 629.7
+1198.13135 3177.8
+1198.26697 789.1
+1206.64270 722.8
+1466.70325 655.5
+1721.79956 609.4
+1873.75342 742.9
+1879.36780 21009.6
+1907.02649 6786.6
+1930.54724 1383.3
+1942.20740 631.3
+1988.77686 639.4
+S	341	341	1879.84940793
+Z	3	5636.273
+Z	2	3757.851
+514.51971 595.7
+528.00208 562.2
+532.52765 1807.9
+541.20874 744.7
+569.58484 623.6
+630.39734 889.0
+676.67389 780.5
+749.13464 697.3
+775.77570 556.9
+795.60590 1115.4
+815.95392 562.3
+930.23657 717.9
+1015.75842 746.3
+1188.06616 662.3
+1198.18115 3218.0
+1271.03406 744.3
+1335.31238 687.4
+1495.77454 686.0
+1505.87891 594.8
+1525.38831 740.2
+1546.27539 575.8
+1719.73193 871.7
+1875.54480 802.3
+1879.19250 3101.6
+1879.36096 4835.8
+1879.62415 17506.0
+1880.10876 3320.4
+1889.84314 689.4
+1907.05762 7037.2
+1907.71387 649.7
+1918.73999 770.2
+1930.60046 906.0
+S	342	342	1907.4248246
+Z	3	5718.999
+Z	2	3813.002
+531.09875 697.1
+532.53760 1870.1
+615.75580 668.9
+627.03613 664.8
+642.80762 606.7
+795.61597 814.5
+802.85022 621.9
+812.31458 575.5
+824.09888 769.7
+909.03296 659.0
+998.58167 643.5
+1019.76379 991.6
+1045.62659 766.9
+1065.98901 595.3
+1140.36304 625.7
+1188.13147 782.4
+1198.19617 3121.9
+1226.50769 682.5
+1466.11731 667.0
+1517.40552 749.9
+1525.38464 797.9
+1672.02393 613.4
+1676.66858 629.5
+1719.32068 910.6
+1873.40527 1336.0
+1878.64392 1082.9
+1878.91614 914.1
+1879.31726 1884.2
+1879.57983 19344.3
+1880.22522 1621.9
+1880.54639 870.8
+1881.04199 1160.1
+1907.05139 7482.1
+1930.58887 883.5
+S	344	344	1907.4758246
+Z	3	5719.152
+Z	2	3813.104
+532.54504 1850.1
+549.11646 890.9
+636.88550 639.2
+676.66547 925.0
+773.87708 625.6
+795.60016 1145.7
+879.91174 627.0
+881.52802 642.4
+897.15302 654.2
+978.36395 585.1
+1125.72046 582.9
+1155.71753 610.8
+1198.21777 3314.2
+1212.69519 633.5
+1239.42871 597.9
+1717.10779 1349.5
+1737.73669 622.4
+1860.01001 883.4
+1877.82410 1018.6
+1878.62720 882.4
+1879.07825 1938.5
+1879.31091 2388.6
+1879.57202 18332.0
+1880.14307 1549.7
+1881.51636 1241.6
+1907.05920 7494.4
+1930.49695 853.9
+1969.41455 637.0
+S	346	346	1879.99924127
+Z	3	5636.722
+Z	2	3758.151
+532.53613 2251.6
+549.13269 901.9
+676.63086 877.0
+795.60413 896.3
+887.25366 584.2
+1057.23059 863.6
+1198.19312 3453.2
+1354.23828 696.8
+1525.34753 1096.7
+1879.05347 728.6
+1879.51294 19149.5
+1879.82458 1923.4
+1880.18127 775.6
+1882.33276 790.0
+1883.65015 710.5
+1907.09229 7010.0
+1930.52856 747.7
+1988.73438 598.6
+S	347	347	1907.46999127
+Z	3	5719.135
+Z	2	3813.092
+532.55377 1808.4
+549.16498 999.1
+556.82153 541.7
+563.50238 661.5
+630.40350 854.1
+676.64240 963.2
+738.31213 656.7
+795.60815 993.3
+978.31787 634.5
+1075.72864 622.6
+1130.06665 728.2
+1140.63208 676.8
+1198.23706 3475.3
+1642.36487 673.8
+1878.69373 787.4
+1879.17590 2129.9
+1879.52539 19277.6
+1879.83691 2178.9
+1880.25366 821.4
+1907.06091 7349.5
+1918.72607 1028.3
+1930.59790 1045.2
+S	349	349	1879.90140793
+Z	2	3757.955
+Z	3	5636.429
+516.41150 654.7
+532.58228 1820.7
+549.13605 706.5
+557.70380 628.2
+564.98816 617.9
+582.29382 794.7
+610.64136 617.1
+622.18805 639.8
+631.94659 526.4
+676.58972 524.4
+676.61243 682.9
+732.65448 826.2
+769.88342 558.6
+788.91986 630.8
+795.61755 1018.0
+882.21210 687.7
+911.35718 672.7
+940.45984 668.0
+1057.19775 758.0
+1089.80701 686.5
+1102.57910 606.9
+1188.20007 783.7
+1198.30298 3223.8
+1280.49463 702.2
+1307.21741 581.1
+1541.17139 626.8
+1683.49084 605.4
+1740.84778 687.1
+1860.04736 697.7
+1874.98853 604.0
+1876.68433 833.6
+1878.70740 780.7
+1879.05103 945.6
+1879.46582 20090.8
+1879.87878 773.2
+1880.29285 780.8
+1906.96558 6533.7
+1910.58301 595.0
+1930.50476 834.6
+S	350	350	1907.49999127
+Z	3	5719.225
+Z	2	3813.152
+532.54291 1871.9
+539.98071 814.1
+549.12964 891.7
+567.02380 571.4
+630.36932 816.6
+645.98090 599.8
+676.63690 824.0
+683.38940 569.4
+722.36469 758.2
+795.63031 967.4
+854.26227 557.0
+1188.09045 784.8
+1198.21545 3240.3
+1525.34082 1260.6
+1661.43872 886.4
+1876.12305 835.7
+1878.49780 1376.6
+1879.23218 1972.4
+1879.51575 19919.6
+1880.01575 1014.0
+1880.91772 945.3
+1907.03040 7168.9
+S	352	352	1907.47240793
+Z	2	3813.097
+Z	3	5719.142
+532.51361 2074.2
+676.63226 1085.7
+757.80493 547.1
+795.60730 827.4
+816.57306 759.0
+918.98486 750.3
+1198.14478 3230.0
+1198.27393 897.9
+1385.95740 618.0
+1504.81396 558.8
+1525.43835 778.5
+1879.12769 2210.9
+1879.50806 19491.7
+1879.89221 2127.4
+1880.15881 1406.3
+1880.59326 1011.5
+1882.36047 701.4
+1907.05823 7578.6
+1918.68518 868.8
+1930.57898 1311.4
+S	354	354	1879.96640793
+Z	3	5636.624
+Z	2	3758.085
+532.57129 1705.7
+551.86145 605.5
+582.74628 609.5
+630.43683 535.2
+650.03088 548.8
+676.61084 692.8
+677.11377 676.4
+795.63068 793.4
+807.89038 797.9
+890.49750 575.0
+910.73059 666.1
+997.77722 786.6
+1136.18958 644.3
+1187.98328 736.5
+1198.27612 3006.9
+1446.01062 608.8
+1525.42688 947.9
+1688.87158 844.1
+1747.57324 603.6
+1877.41187 787.6
+1877.61841 805.9
+1878.82092 926.9
+1879.46240 19582.3
+1879.95435 1031.7
+1880.17993 1113.3
+1880.93860 697.6
+1907.07690 7211.2
+1930.64417 915.5
+1965.60962 577.9
+1994.29590 640.3
+S	355	355	1907.4778246
+Z	3	5719.158
+Z	2	3813.108
+532.55011 2088.7
+587.82855 622.2
+599.17517 740.4
+614.60846 668.0
+656.33862 575.1
+731.06592 1113.6
+750.74884 573.7
+829.59637 638.2
+891.36987 708.4
+902.72919 626.1
+1015.97577 592.4
+1023.40088 711.5
+1052.82751 594.4
+1198.22778 3349.6
+1318.13367 638.0
+1377.25293 681.8
+1472.69946 784.8
+1494.80566 686.6
+1525.30139 840.6
+1877.16528 929.3
+1878.27539 693.2
+1878.81689 799.8
+1879.36267 6377.3
+1879.63953 17683.6
+1881.49670 1127.3
+1907.08484 7017.2
+1918.62244 767.2
+1930.46826 1053.9
+S	357	357	1879.93599127
+Z	2	3758.024
+Z	3	5636.533
+532.52429 1928.1
+624.85052 815.3
+676.62634 1186.0
+728.81671 629.6
+791.67169 753.9
+808.80902 635.9
+1038.50049 569.2
+1198.17175 3368.0
+1219.44580 587.8
+1242.92126 603.5
+1306.06458 654.1
+1593.00684 590.2
+1752.65747 632.5
+1806.41077 573.6
+1877.86890 780.1
+1878.06189 771.3
+1878.49670 792.5
+1879.18152 4890.4
+1879.49304 19265.4
+1879.83459 4543.7
+1880.46362 616.3
+1881.56018 715.9
+1906.78650 950.9
+1907.06360 7352.4
+1930.58142 929.6
+1998.05896 603.3
+S	358	358	1907.48499127
+Z	2	3813.122
+Z	3	5719.18
+532.53900 2002.1
+554.63947 641.9
+617.14038 621.7
+676.67230 1051.3
+795.98621 770.2
+865.85712 585.1
+887.94763 650.2
+914.91229 694.9
+1015.11615 576.8
+1057.26807 777.9
+1090.58008 713.5
+1140.43542 882.2
+1198.21289 3111.5
+1461.43079 565.0
+1607.10120 560.2
+1607.26501 626.1
+1616.26746 615.4
+1777.57849 677.0
+1878.14868 999.0
+1878.56592 1097.9
+1879.28259 3828.0
+1879.61206 19028.0
+1880.01343 2299.7
+1880.43506 976.1
+1880.79065 815.3
+1881.11963 1347.0
+1881.50574 876.1
+1907.04590 7883.0
+1929.88208 591.5
+1930.63049 984.8
+S	360	360	1879.97240793
+Z	2	3758.097
+Z	3	5636.642
+532.53204 1819.4
+549.14221 821.6
+605.01538 689.4
+630.40082 820.2
+676.62396 1122.5
+712.43341 676.0
+727.39777 936.5
+795.03925 621.0
+795.63110 862.8
+1057.22363 912.4
+1079.26709 749.4
+1198.19531 2833.2
+1872.48926 633.5
+1878.58386 893.8
+1879.48657 19661.8
+1880.40942 984.6
+1907.04846 6687.1
+S	361	361	1907.46399127
+Z	2	3813.08
+Z	3	5719.117
+529.54480 553.2
+532.50000 1310.8
+541.06384 546.3
+549.12354 776.6
+594.43896 619.3
+670.84735 521.7
+674.31781 587.6
+676.63336 940.1
+748.68567 609.0
+795.63898 1265.4
+828.10925 672.0
+885.50812 645.4
+886.48010 655.6
+910.91992 695.9
+1005.32208 611.9
+1047.53931 696.1
+1055.03027 557.2
+1198.13245 3145.5
+1394.40259 602.8
+1777.56213 652.4
+1877.98096 664.7
+1878.51111 657.1
+1878.84351 1632.7
+1879.21716 2148.6
+1879.50732 19126.5
+1879.79126 2378.3
+1880.19238 690.6
+1907.04846 7529.4
+1930.49316 1375.7
+S	363	363	1879.96540793
+Z	3	5636.621
+Z	2	3758.083
+507.66605 677.5
+532.12592 637.7
+532.54156 1639.4
+549.16534 955.2
+563.00714 592.0
+630.42139 819.2
+676.63782 885.9
+731.14270 1126.1
+784.57819 755.8
+795.62964 1157.3
+800.32721 747.1
+857.04352 679.5
+880.21851 566.4
+884.66699 601.9
+1019.79169 724.6
+1057.23499 847.3
+1154.52795 591.9
+1198.05457 892.2
+1198.21680 3133.9
+1568.39783 695.4
+1638.54395 725.0
+1800.39404 671.9
+1803.32104 722.4
+1878.18457 732.0
+1878.82092 988.1
+1879.51355 19742.1
+1880.48901 1080.6
+1907.09045 7313.7
+1930.66528 946.1
+S	364	364	1907.47340793
+Z	2	3813.099
+Z	3	5719.145
+531.41132 524.0
+532.55719 2130.9
+581.44696 725.2
+622.26715 629.3
+731.09137 721.8
+754.06561 647.2
+802.76233 557.7
+805.83624 617.9
+991.66040 626.6
+1040.08752 689.4
+1150.37976 589.5
+1188.09253 811.6
+1198.24915 3313.7
+1198.65295 609.9
+1473.99023 599.4
+1777.39832 1198.0
+1878.29199 785.6
+1878.68469 1171.3
+1878.98572 944.3
+1879.25366 3789.4
+1879.52661 19512.6
+1881.51270 1036.2
+1883.47461 780.6
+1906.67578 1329.6
+1906.94470 6865.5
+1907.23499 1710.3
+1930.46790 959.0
+S	366	366	1879.94340793
+Z	3	5636.555
+Z	2	3758.039
+505.51523 591.0
+508.96530 603.3
+517.86511 724.4
+522.72937 646.5
+532.51715 1738.5
+535.03912 843.0
+565.51953 666.7
+624.57324 619.2
+628.76642 629.7
+639.98315 567.5
+663.59583 679.7
+665.33997 559.0
+676.62170 1025.5
+920.39423 756.2
+923.33325 618.0
+981.12787 657.7
+1002.35278 613.2
+1154.31104 624.4
+1187.96375 695.1
+1198.15161 2999.3
+1308.89490 692.6
+1878.31848 1119.5
+1878.63440 870.3
+1878.89844 946.2
+1879.51074 19667.3
+1879.82959 2104.0
+1880.10571 1281.0
+1881.22766 901.5
+1907.10925 7464.8
+1918.68335 745.5
+1930.74658 794.8
+1961.11035 639.1
+S	367	367	1907.47599127
+Z	2	3813.104
+Z	3	5719.153
+532.53387 1638.7
+582.91003 660.8
+673.37177 729.4
+675.90582 667.0
+676.61206 890.8
+778.15485 836.0
+795.63348 1138.2
+844.63232 674.5
+871.00732 657.8
+936.69928 696.7
+1182.84558 811.3
+1187.94897 588.3
+1198.18762 3128.3
+1694.51929 706.4
+1877.73425 591.1
+1879.47107 19641.7
+1879.76672 2901.1
+1906.56934 843.1
+1907.07068 6794.7
+1907.48328 803.4
+1930.59558 1166.9
+S	369	369	1879.95324127
+Z	2	3758.059
+Z	3	5636.584
+518.18311 566.5
+532.54114 1793.2
+544.60107 532.6
+549.13861 607.7
+572.26520 680.2
+583.20581 638.6
+591.04626 581.5
+607.59387 589.2
+616.98633 630.2
+653.39862 557.5
+669.62268 612.9
+674.22339 570.1
+796.79535 670.1
+895.55060 609.4
+1006.46960 608.1
+1088.16284 676.4
+1180.32336 648.7
+1198.21252 3563.4
+1274.65063 634.0
+1314.26575 646.8
+1379.90991 689.7
+1382.70105 648.8
+1502.88196 580.5
+1576.13538 652.6
+1598.10767 736.1
+1631.69641 632.5
+1696.82031 677.8
+1876.76843 960.6
+1878.21338 1312.2
+1878.74463 1262.8
+1879.11792 2524.5
+1879.52600 18772.5
+1880.27637 986.1
+1880.45996 902.9
+1907.04480 7507.1
+1930.53455 1103.6
+S	372	372	1879.9328246
+Z	2	3758.018
+Z	3	5636.523
+532.52295 1826.2
+532.56390 722.8
+549.14282 763.4
+596.72467 710.2
+607.58130 619.2
+676.64240 1028.2
+682.70404 598.3
+795.64514 812.7
+831.48383 673.9
+1025.43958 626.5
+1110.79041 746.8
+1198.17065 3208.1
+1231.63452 787.0
+1434.40198 674.0
+1525.34924 748.4
+1777.65332 619.0
+1869.66650 736.7
+1878.89771 1436.7
+1879.54712 19536.4
+1880.22424 1627.3
+1907.03601 6998.1
+1930.55957 969.7
+S	373	373	1907.4438246
+Z	3	5719.056
+Z	2	3813.04
+532.54022 1910.0
+549.13824 796.3
+584.02118 623.2
+676.61707 1248.6
+829.24896 667.3
+923.48407 572.8
+1127.32349 591.9
+1198.20667 3615.7
+1581.95300 737.0
+1777.50964 682.2
+1786.15613 665.1
+1835.86597 604.5
+1876.87891 610.1
+1879.10132 1066.0
+1879.47437 20297.1
+1879.90674 1186.7
+1907.05615 7288.2
+1930.53613 908.2
+S	375	375	1907.47040793
+Z	2	3813.093
+Z	3	5719.136
+532.58173 2096.6
+668.38849 600.6
+676.65070 934.6
+793.48236 700.3
+795.63214 934.1
+817.69348 564.5
+902.73126 649.2
+1083.36963 635.3
+1198.30017 3042.7
+1240.77332 592.4
+1430.63879 522.4
+1661.16089 643.9
+1707.01526 653.7
+1878.73645 1072.1
+1879.17175 1543.9
+1879.56726 19622.7
+1879.95251 1318.1
+1880.36670 958.4
+1880.56067 966.6
+1907.03528 6904.2
+1907.27051 1536.2
+1930.60901 1082.3
+S	377	377	1907.45140793
+Z	2	3813.055
+Z	3	5719.079
+515.59717 617.8
+532.56384 2034.1
+549.12915 655.0
+621.82501 641.9
+624.42352 850.8
+630.38458 817.4
+653.63965 658.4
+655.59949 646.2
+676.61462 1169.7
+682.52643 582.6
+688.84662 531.5
+772.08575 652.4
+857.19934 515.0
+921.81415 832.7
+985.67212 711.6
+1074.17871 685.5
+1188.20483 864.5
+1198.26428 3322.3
+1432.26062 673.2
+1704.23792 640.0
+1767.37537 677.7
+1825.70410 689.1
+1878.44666 961.1
+1878.99573 1585.7
+1879.46960 19613.5
+1879.94299 1865.0
+1907.09167 7350.8
+1918.79224 866.2
+1930.53223 724.8
+1954.21802 592.2
+1954.31262 603.7
+S	379	379	1879.92240793
+Z	3	5636.492
+Z	2	3757.997
+505.27432 689.7
+532.54163 1721.9
+615.94305 623.6
+630.42157 845.6
+676.62000 1385.9
+683.95020 752.9
+731.99011 697.7
+795.64197 976.6
+822.92853 605.2
+1057.20642 960.6
+1124.99329 586.6
+1136.21667 606.5
+1198.21716 2940.4
+1253.11365 568.1
+1498.08557 577.5
+1518.31372 573.7
+1525.44141 696.3
+1871.92676 674.2
+1879.47693 19933.4
+1907.04980 7514.7
+S	380	380	1907.4688246
+Z	2	3813.09
+Z	3	5719.131
+532.56281 1925.2
+676.62109 1110.7
+795.63892 1130.1
+818.48883 688.3
+1057.22449 901.6
+1133.52881 653.2
+1188.07568 839.4
+1198.26111 3370.0
+1525.13379 603.0
+1525.36682 1097.4
+1657.32849 612.4
+1878.67102 1145.8
+1879.18640 2846.3
+1879.48743 19781.8
+1879.80835 3454.7
+1882.04614 780.3
+1907.07874 6972.1
+1907.37256 1388.4
+1930.54297 787.1
+S	382	382	1879.9098246
+Z	3	5636.454
+Z	2	3757.972
+532.54474 1802.5
+532.74329 644.1
+581.12152 660.7
+582.69580 661.8
+613.59937 663.7
+627.78015 709.8
+630.40546 818.5
+661.65515 681.9
+676.62878 1058.4
+716.39624 548.5
+783.66101 606.8
+836.25165 672.2
+902.02673 758.7
+1007.17487 698.0
+1079.25830 676.7
+1187.97107 677.0
+1198.21997 3290.5
+1438.80750 658.9
+1452.35400 809.8
+1525.39478 841.5
+1634.15930 619.2
+1639.08386 669.7
+1651.74353 681.5
+1655.63110 585.4
+1878.11853 882.7
+1878.75183 1116.6
+1879.19775 3716.7
+1879.49463 19106.2
+1882.10596 765.2
+1906.98474 6741.5
+1907.23401 1865.0
+1907.62451 664.5
+1918.71558 693.1
+1930.54211 1065.2
+S	383	383	1907.4758246
+Z	2	3813.104
+Z	3	5719.152
+519.88934 668.3
+532.52045 2016.0
+581.41071 618.2
+617.27789 635.2
+635.38654 744.0
+653.95502 622.6
+760.58289 662.9
+783.96063 986.0
+795.62268 1273.9
+1134.66357 691.4
+1154.89001 569.5
+1187.99475 740.3
+1198.16187 3144.0
+1302.22119 640.4
+1326.38086 565.0
+1625.95520 762.1
+1694.36987 648.1
+1878.56628 1054.1
+1878.86731 939.7
+1879.31274 5575.5
+1879.57825 18221.7
+1879.82690 4864.4
+1881.32849 766.7
+1907.05896 7468.8
+1930.65894 875.6
+S	385	385	1879.9138246
+Z	2	3757.98
+Z	3	5636.466
+532.48425 764.2
+532.54919 1360.2
+532.58484 749.3
+576.71423 609.3
+630.40594 664.4
+632.72644 530.2
+639.25763 750.4
+676.64612 1054.2
+695.04980 617.3
+697.45374 592.6
+769.32764 625.2
+811.21869 727.5
+831.45844 740.2
+1005.82178 662.2
+1040.10852 653.1
+1057.25830 834.4
+1113.35718 786.2
+1184.59241 843.7
+1198.14246 2403.3
+1198.26538 1597.8
+1287.65234 647.4
+1525.42041 798.6
+1609.39331 583.8
+1715.72412 849.8
+1732.67041 705.2
+1876.53320 798.6
+1879.09912 1584.6
+1879.55310 19226.8
+1880.00110 2597.0
+1890.04297 712.3
+1899.96692 602.1
+1907.02612 7556.4
+1930.61499 955.5
+S	386	386	1907.46499127
+Z	2	3813.082
+Z	3	5719.12
+519.94183 679.8
+521.78058 750.3
+532.53204 1653.3
+549.17010 774.3
+630.41614 971.2
+676.62457 1077.4
+731.13556 872.2
+1198.18945 3153.1
+1876.96790 893.3
+1879.49390 20036.5
+1881.06506 1203.7
+1907.05359 7066.6
+1930.62036 1180.5
+S	388	388	1879.89599127
+Z	3	5636.413
+Z	2	3757.944
+532.56384 1914.0
+549.11377 919.8
+573.04340 652.8
+641.10260 630.0
+655.26184 672.5
+763.04346 574.9
+795.64008 1244.7
+945.70233 681.7
+954.40967 645.5
+1019.78687 932.6
+1076.04297 525.0
+1188.95654 664.1
+1198.13159 624.6
+1198.25940 3371.1
+1208.19629 830.0
+1228.62988 589.4
+1274.79468 611.3
+1351.50391 660.1
+1525.31177 815.0
+1571.70410 595.1
+1714.74231 656.7
+1767.76831 691.3
+1841.23267 613.2
+1879.45984 19469.0
+1879.73999 3651.5
+1907.04358 7721.0
+1930.43738 1046.2
+S	389	389	1907.47040793
+Z	2	3813.093
+Z	3	5719.136
+532.50427 581.5
+532.57214 1978.3
+586.09552 613.9
+676.65448 858.4
+783.42365 534.2
+795.64441 1187.5
+857.34070 623.1
+865.63232 680.3
+1057.27625 1083.3
+1162.90112 547.7
+1198.27856 3714.1
+1525.27527 872.6
+1694.42603 710.1
+1878.71204 1259.0
+1879.18262 2349.4
+1879.27820 2584.5
+1879.57397 19324.6
+1880.03821 2045.4
+1880.46570 1140.7
+1907.01343 7364.2
+1933.62500 675.3
+S	391	391	1879.9098246
+Z	3	5636.454
+Z	2	3757.972
+532.47937 1589.9
+556.94910 761.8
+584.84338 600.0
+630.40729 815.4
+676.64612 904.3
+760.99261 579.8
+761.60834 608.7
+765.96967 638.2
+874.73096 706.4
+918.62537 661.4
+924.81866 583.5
+932.92865 586.7
+966.11127 697.5
+1019.66724 587.0
+1019.82483 688.7
+1057.23682 981.2
+1188.21350 688.1
+1198.07800 3108.2
+1200.81848 607.8
+1402.21558 824.6
+1876.83459 1419.7
+1878.35583 985.1
+1878.70520 755.4
+1879.17041 3052.8
+1879.52551 18960.9
+1879.86267 3327.8
+1880.69910 1079.8
+1906.73120 814.3
+1907.05762 7360.4
+1907.42981 1348.4
+1930.57178 1282.9
+1992.49292 725.9
+S	392	392	1907.47424127
+Z	2	3813.101
+Z	3	5719.147
+532.49023 2204.9
+549.94806 587.8
+600.35364 638.9
+630.37976 792.7
+676.63116 1038.7
+723.89233 556.4
+731.09552 695.3
+795.63202 1289.0
+842.03912 675.5
+1057.23315 834.2
+1123.44580 534.0
+1176.88477 594.6
+1198.09619 3179.0
+1235.52625 679.1
+1783.34424 692.4
+1878.43127 736.6
+1878.81836 1284.7
+1879.03870 1417.2
+1879.51428 19884.4
+1879.92737 1679.3
+1880.20081 1252.7
+1907.05505 7679.0
+1929.40686 592.7
+1994.21387 672.6
+S	394	394	1879.9238246
+Z	3	5636.496
+Z	2	3758.0
+532.53711 1498.6
+539.43115 639.1
+549.13184 725.1
+633.38800 625.5
+676.63196 1062.1
+696.70679 578.1
+712.50342 605.6
+785.37189 587.0
+795.64282 1139.4
+864.94946 695.2
+868.82611 720.3
+986.43988 588.9
+1143.53955 630.3
+1185.93396 727.4
+1198.19128 2928.5
+1785.73730 634.7
+1878.69958 1273.6
+1879.08569 1418.5
+1879.51855 19544.7
+1880.10901 1013.1
+1880.27344 1112.9
+1880.75183 863.6
+1882.11584 835.1
+1907.05530 7641.8
+1930.52405 983.8
+S	395	395	1907.46799127
+Z	3	5719.129
+Z	2	3813.088
+532.52435 1906.0
+547.56909 624.3
+562.72046 717.4
+593.06189 598.9
+640.55872 613.6
+676.61737 877.3
+795.64032 752.0
+1020.87921 764.3
+1070.73254 575.6
+1187.99585 886.1
+1198.17615 3238.3
+1243.28772 737.0
+1525.43103 1082.4
+1572.68982 618.1
+1624.40271 572.7
+1674.87317 682.0
+1777.47900 906.3
+1833.62122 612.3
+1878.36267 1224.9
+1878.94348 2686.5
+1879.18262 2087.0
+1879.45715 19127.2
+1879.96423 2237.0
+1880.48804 1024.1
+1880.87561 669.3
+1907.05457 7667.3
+1930.62085 920.6
+S	397	397	1879.93024127
+Z	3	5636.515
+Z	2	3758.013
+532.43494 608.1
+532.48322 2185.7
+553.38354 743.6
+569.69696 636.2
+603.13470 532.5
+676.61450 994.3
+704.85565 589.0
+841.86908 582.7
+899.61591 544.5
+1030.58350 708.8
+1047.62939 683.3
+1078.90198 548.2
+1103.59363 756.6
+1198.07751 3308.1
+1208.25940 753.5
+1525.44922 949.6
+1879.47034 19961.9
+1879.79163 786.4
+1880.08350 1245.5
+1880.46045 674.4
+1906.78699 832.0
+1907.11292 7108.2
+1907.40747 1268.3
+1918.76758 1028.0
+1959.54602 817.1
+S	400	400	1879.9458246
+Z	3	5636.562
+Z	2	3758.044
+532.50195 2188.7
+540.00977 633.3
+549.09485 724.0
+570.34430 566.4
+577.95239 731.9
+630.33746 704.1
+670.20874 594.6
+676.63684 947.1
+684.47803 597.5
+699.94641 574.7
+767.44324 609.1
+781.63550 612.2
+783.56097 568.0
+784.05536 641.5
+795.63586 775.7
+811.57263 586.6
+820.63281 595.8
+979.06421 654.5
+1019.78748 758.4
+1057.24878 872.4
+1198.11938 3499.1
+1441.62427 662.4
+1525.25000 1283.8
+1533.48169 582.6
+1600.00757 651.8
+1646.13489 690.2
+1777.57019 995.7
+1818.86707 559.2
+1876.21887 906.1
+1878.25977 752.5
+1878.99268 1713.2
+1879.55408 18085.9
+1880.18201 1669.0
+1880.27820 1747.6
+1880.52380 998.0
+1882.80322 971.9
+1907.05359 6816.3
+1918.69128 943.9
+1930.38916 919.2
+S	401	401	1907.47324127
+Z	3	5719.144
+Z	2	3813.099
+532.47247 1444.0
+549.10901 1047.7
+640.59058 538.0
+671.12842 587.1
+676.62982 1190.1
+795.65326 984.2
+842.71783 634.1
+857.85931 605.5
+1173.72571 707.9
+1189.68274 719.7
+1196.89404 581.5
+1198.06299 3214.5
+1351.42395 653.1
+1525.27136 666.1
+1650.91809 687.1
+1681.66309 701.5
+1878.93555 668.3
+1879.51855 20210.1
+1882.00659 693.4
+1907.09521 7289.9
+1930.37451 1129.1
+S	403	403	1879.92024127
+Z	2	3757.993
+Z	3	5636.485
+512.61273 586.9
+532.51801 1831.0
+549.12347 867.9
+624.46960 672.6
+630.37061 1079.6
+676.66876 737.6
+795.64996 854.9
+928.15308 625.5
+1198.15320 3074.5
+1204.63672 831.6
+1669.01477 661.4
+1777.43909 1092.8
+1878.95166 1890.1
+1879.32898 4961.5
+1879.59644 18090.1
+1880.20740 2231.3
+1880.98486 915.3
+1881.78687 886.9
+1882.48669 594.1
+1907.06812 7304.6
+1930.48584 1449.9
+S	404	404	1907.4488246
+Z	2	3813.05
+Z	3	5719.071
+532.49158 1664.7
+595.94391 636.3
+676.63593 1068.6
+820.33557 616.7
+1057.24414 611.5
+1166.77319 726.4
+1198.09790 3798.2
+1259.68115 590.5
+1455.17212 645.2
+1499.06213 639.4
+1877.30725 848.7
+1879.52905 18728.2
+1880.45691 808.1
+1906.58801 1307.7
+1906.93262 7151.1
+1907.30273 1158.0
+1930.47388 754.2
+S	406	406	1879.91199127
+Z	2	3757.976
+Z	3	5636.461
+513.37592 531.2
+532.50293 1943.6
+603.90448 614.1
+608.76294 723.5
+676.61566 646.9
+676.67755 717.0
+731.04590 873.3
+733.31482 777.7
+795.64679 1199.6
+838.24725 657.1
+1198.12256 3603.9
+1400.82605 717.0
+1597.59485 646.0
+1760.14563 665.0
+1777.63831 1092.0
+1876.63159 799.0
+1878.96692 2149.4
+1879.47388 17888.7
+1880.07544 1163.0
+1906.49170 1457.9
+1906.84424 6762.3
+1907.19666 1639.8
+1918.80298 593.8
+1930.39294 783.5
+S	407	407	1907.27224127
+Z	2	3812.697
+Z	3	5718.541
+527.92902 664.2
+532.50806 1786.7
+549.14453 731.6
+731.09277 595.2
+731.39484 592.3
+745.33630 647.4
+759.38367 643.1
+795.64899 1309.9
+802.16766 647.8
+821.52319 650.9
+911.94373 668.2
+945.24408 622.3
+1031.43872 686.2
+1057.20422 867.0
+1198.13757 3325.8
+1407.53210 654.4
+1439.74634 628.8
+1525.35669 627.2
+1535.30688 584.8
+1541.69702 740.1
+1878.66199 1507.0
+1879.46814 19479.7
+1880.21387 1158.0
+1881.79541 783.9
+1907.07007 7345.9
+S	409	409	1879.9238246
+Z	3	5636.496
+Z	2	3758.0
+532.55426 2332.7
+550.31091 694.2
+622.31989 705.6
+676.63025 1212.7
+687.82147 577.5
+731.11090 848.3
+782.18030 635.1
+795.66443 1172.8
+806.40680 614.0
+828.86676 689.3
+954.88904 671.6
+983.33795 622.5
+1036.21313 524.9
+1036.24768 519.3
+1036.95642 620.2
+1198.23694 3460.2
+1198.42407 876.0
+1399.93945 630.6
+1496.03418 596.0
+1692.22119 675.2
+1726.60120 738.4
+1875.05188 752.3
+1878.49048 1175.6
+1879.07910 1651.0
+1879.50378 19641.9
+1879.90393 2023.7
+1880.59521 742.8
+1883.68323 838.9
+1907.10217 7169.9
+1930.59985 1173.1
+S	410	410	1907.49399127
+Z	3	5719.207
+Z	2	3813.14
+532.57330 1734.7
+600.19647 612.9
+630.38831 621.5
+725.74799 631.8
+735.01025 666.1
+769.08832 557.3
+795.65204 1232.5
+821.42603 547.1
+858.02679 815.3
+900.73761 567.7
+908.75781 567.3
+963.15460 585.5
+1198.27759 3216.7
+1244.59875 650.6
+1325.36011 615.2
+1878.97107 2400.2
+1879.47290 19863.3
+1879.95386 2258.1
+1896.60840 552.0
+1896.67896 562.6
+1907.04761 7686.6
+1930.55371 766.2
+S	412	412	1879.89940793
+Z	2	3757.951
+Z	3	5636.423
+532.56061 1915.2
+605.47522 735.8
+635.10455 655.1
+661.77728 526.2
+676.61847 1183.8
+725.85382 664.3
+751.72638 626.9
+795.67059 1180.3
+1019.79187 693.1
+1198.25635 3298.8
+1406.97852 604.0
+1525.42944 741.9
+1667.05872 702.8
+1878.17358 773.7
+1878.69580 1089.2
+1879.10364 1903.5
+1879.47620 19818.0
+1879.83301 1118.2
+1880.18469 703.8
+1880.70679 801.1
+1882.86572 727.2
+1885.11365 787.5
+1907.08569 7050.1
+S	415	415	1879.91524127
+Z	2	3757.983
+Z	3	5636.47
+532.55176 1812.2
+598.42877 697.5
+676.63049 1087.0
+731.13678 688.8
+789.71436 647.2
+795.65094 949.0
+824.44830 617.4
+998.13013 610.5
+1198.23889 3040.7
+1199.84973 660.4
+1209.18127 726.5
+1431.28601 572.5
+1525.44629 1201.7
+1590.03723 653.5
+1806.44727 654.0
+1876.42346 589.7
+1879.49316 19952.8
+1879.79004 2130.9
+1880.90271 733.8
+1907.07495 7588.0
+S	416	416	1907.45940793
+Z	3	5719.103
+Z	2	3813.071
+521.48138 721.0
+532.55463 1689.6
+549.14594 709.4
+630.40131 1081.9
+676.62115 1228.8
+795.65399 1019.3
+848.75018 599.6
+1018.61285 592.1
+1020.90265 616.7
+1043.34351 616.4
+1057.22205 1136.7
+1198.24438 3450.9
+1220.03357 582.0
+1577.89246 676.3
+1879.06995 1725.2
+1879.49255 20100.5
+1879.87476 1621.8
+1907.07458 7137.1
+1918.77295 903.9
+1930.56421 1177.0
+S	418	418	1879.9028246
+Z	2	3757.958
+Z	3	5636.433
+529.03821 692.7
+532.54626 1975.3
+533.78156 671.9
+544.57178 559.7
+593.59729 638.5
+626.31207 599.4
+630.41272 735.3
+676.63104 783.9
+730.24707 653.2
+764.18073 669.1
+1171.25623 711.0
+1186.25220 778.3
+1198.22742 3341.3
+1359.19312 630.3
+1441.50269 672.6
+1879.51025 19503.3
+1879.78540 3218.6
+1880.17810 610.1
+1881.28137 1010.5
+1882.57715 728.6
+1907.03540 7407.7
+1930.61768 831.8
+1960.21204 685.2
+S	419	419	1907.5678246
+Z	2	3813.288
+Z	3	5719.428
+531.04260 583.9
+532.54645 2163.1
+649.18677 751.3
+676.60938 924.3
+795.64630 1059.6
+841.29724 648.9
+855.18738 556.5
+884.88440 603.0
+1007.14471 598.4
+1057.20166 935.7
+1198.22388 3290.1
+1249.03198 607.4
+1350.15967 607.8
+1783.60291 619.3
+1876.45068 681.3
+1878.99841 1127.8
+1879.47815 18796.3
+1907.04578 7789.1
+1930.48047 884.2
+S	421	421	1907.50640793
+Z	2	3813.165
+Z	3	5719.244
+531.45795 591.1
+532.53436 2052.4
+541.84113 639.2
+623.72626 671.8
+631.08978 585.3
+676.62268 829.2
+736.50568 689.3
+906.15985 698.1
+1057.28870 752.0
+1095.12415 627.5
+1198.19873 3740.7
+1340.05823 639.0
+1456.86536 613.6
+1525.38586 787.3
+1558.50720 618.2
+1600.07690 652.7
+1719.93848 766.2
+1878.23560 779.3
+1878.47693 787.3
+1878.78992 1561.4
+1879.10083 1223.3
+1879.58655 15313.7
+1880.29395 987.1
+1880.83582 1269.2
+1907.02124 7354.3
+1930.54431 1193.4
+1963.69238 650.5
+S	423	423	1879.91924127
+Z	3	5636.482
+Z	2	3757.991
+532.55365 1579.0
+536.68390 645.1
+573.61658 705.9
+585.26868 577.1
+676.61139 1048.1
+731.07330 785.9
+783.69843 643.3
+795.65985 787.4
+1057.23083 787.2
+1198.24377 3323.6
+1333.34570 662.4
+1367.82739 658.8
+1445.80579 608.3
+1510.22876 710.3
+1525.31860 744.3
+1667.08240 654.7
+1731.26025 671.1
+1878.66016 792.7
+1879.45557 18898.6
+1880.35132 788.3
+1907.05872 7794.8
+1930.45667 1053.4
+S	424	424	1907.3828246
+Z	2	3812.918
+Z	3	5718.873
+532.58502 2432.5
+549.14996 903.4
+561.22589 619.5
+614.99774 760.3
+676.62726 1122.7
+795.63940 939.1
+857.93304 709.3
+858.04492 751.9
+891.33685 580.3
+966.54590 624.2
+1006.61176 671.0
+1057.22095 772.1
+1184.36255 618.0
+1198.30566 3694.5
+1410.72327 671.7
+1718.60266 621.2
+1878.64722 852.7
+1879.14038 2594.4
+1879.49365 19897.4
+1879.84778 3135.9
+1880.40540 733.3
+1907.04346 7660.1
+1930.58044 1114.8
+1953.35669 779.7
+S	426	426	1879.9778246
+Z	2	3758.108
+Z	3	5636.658
+510.44077 683.6
+532.52521 1883.1
+573.23749 557.0
+600.37689 674.1
+676.62726 845.1
+795.64825 870.9
+803.30200 543.5
+922.54517 711.7
+1188.06604 658.9
+1198.17590 3035.1
+1406.82300 607.7
+1489.26819 887.6
+1599.70581 601.3
+1758.91528 748.8
+1878.88867 1375.1
+1879.16833 2120.9
+1879.51685 19974.9
+1879.87268 1720.4
+1880.15759 1022.0
+1907.07605 7400.3
+1930.59558 1051.2
+S	427	427	1907.48224127
+Z	3	5719.171
+Z	2	3813.117
+532.50348 2097.9
+593.74164 664.6
+611.68896 547.9
+623.50024 787.3
+664.20331 608.4
+699.57465 678.3
+700.52887 547.8
+719.87872 624.4
+731.11420 823.4
+788.38214 647.4
+795.63336 910.3
+880.04755 634.3
+963.42334 533.5
+1015.06470 688.5
+1198.12549 3133.7
+1243.42163 637.0
+1569.83020 630.3
+1628.85486 710.4
+1649.40881 674.7
+1728.57495 740.5
+1759.61108 796.2
+1777.61865 894.3
+1863.47192 727.8
+1878.51611 1022.6
+1878.98047 1854.1
+1879.45435 19687.8
+1879.93079 1588.9
+1880.40930 1002.2
+1907.09619 7218.6
+1930.57019 1060.2
+S	429	429	1879.8458246
+Z	3	5636.262
+Z	2	3757.844
+532.49567 1560.1
+630.38940 953.7
+676.62360 938.8
+795.63037 890.3
+954.06201 694.0
+1057.23206 697.1
+1188.26904 987.0
+1198.10730 3386.2
+1243.87805 617.7
+1267.06799 656.6
+1268.60046 661.6
+1877.11926 773.3
+1879.17529 694.0
+1879.49695 20040.1
+1881.34265 736.2
+1881.57019 852.9
+1906.80408 771.4
+1907.06726 7444.9
+1930.57275 996.4
+S	430	430	1907.53940793
+Z	2	3813.231
+Z	3	5719.343
+532.50293 1792.6
+549.11200 1136.8
+558.26764 692.0
+630.35413 981.9
+696.53082 638.9
+731.07166 829.2
+737.77100 652.9
+754.85779 662.8
+804.77350 878.7
+930.45074 572.6
+1171.85706 767.9
+1198.11975 3444.8
+1387.29895 647.8
+1425.05017 622.8
+1777.40955 681.7
+1876.81445 705.6
+1878.90771 825.5
+1879.53101 19446.8
+1879.82996 3027.8
+1898.39148 612.7
+1907.07568 7185.7
+1907.32959 1159.1
+S	432	432	1879.94540793
+Z	3	5636.561
+Z	2	3758.043
+532.49420 2131.2
+620.86273 612.7
+630.40283 849.3
+669.64374 587.4
+676.61621 1070.2
+795.64966 739.1
+937.42487 712.2
+946.45618 676.9
+979.87396 549.8
+999.81403 807.6
+1057.21997 927.5
+1074.59900 641.3
+1082.76782 617.0
+1126.71533 588.0
+1188.33789 710.4
+1198.11255 3341.4
+1436.78467 623.3
+1451.66418 687.3
+1463.10413 672.1
+1562.24023 617.6
+1877.81140 872.7
+1879.47693 20163.7
+1882.56140 559.4
+1895.76733 746.7
+1907.04333 7633.5
+S	433	433	1907.4748246
+Z	3	5719.149
+Z	2	3813.102
+532.50134 1851.8
+540.69183 725.8
+672.42950 562.8
+795.64008 778.7
+1021.18024 701.8
+1057.17126 822.5
+1149.47437 618.5
+1198.12598 2949.5
+1254.72168 765.2
+1349.57605 639.3
+1349.61646 638.4
+1463.31445 681.3
+1488.24524 570.7
+1525.45178 1050.3
+1729.01953 993.7
+1879.37427 20888.9
+1879.65222 905.2
+1907.05469 7223.4
+1930.68250 947.2
+S	435	435	1879.83540793
+Z	2	3757.823
+Z	3	5636.231
+532.48004 1464.7
+532.51672 798.8
+630.41724 891.3
+676.63074 926.8
+770.13672 588.1
+795.63239 1068.2
+884.30829 706.0
+1027.74915 586.3
+1198.07971 3095.7
+1198.56116 712.1
+1302.79553 684.2
+1525.42224 895.8
+1719.84119 1473.0
+1879.51843 19113.2
+1906.97498 6940.2
+1907.23083 1625.7
+1918.74817 753.8
+1930.61340 779.0
+S	436	436	1907.5068246
+Z	2	3813.166
+Z	3	5719.245
+532.55347 1959.5
+549.16376 901.8
+583.55286 644.5
+683.70227 646.7
+766.75110 619.0
+783.44690 843.7
+963.81805 602.8
+1014.15601 648.5
+1110.56494 778.6
+1198.07361 635.8
+1198.23865 3229.1
+1353.86316 743.4
+1421.90344 742.3
+1505.96265 633.6
+1525.47253 704.7
+1579.44458 773.5
+1719.63916 691.6
+1871.88708 767.8
+1873.65662 1122.0
+1878.88379 1114.9
+1879.36560 8211.9
+1879.59998 16295.3
+1880.21167 3168.4
+1880.51807 1371.9
+1880.74109 731.7
+1905.96985 851.7
+1906.29224 969.9
+1906.81506 7521.3
+1907.66187 928.9
+1930.65186 901.1
+S	438	438	1880.05540793
+Z	3	5636.891
+Z	2	3758.263
+532.54932 1887.4
+549.18878 972.3
+630.45233 810.9
+676.62311 694.3
+698.27002 590.0
+753.53516 554.3
+795.64795 1327.8
+1018.98431 803.8
+1025.03186 635.0
+1031.48889 639.5
+1140.09546 661.4
+1198.22473 3489.8
+1399.91907 553.0
+1457.23572 652.9
+1525.54053 830.6
+1629.05896 567.4
+1639.92151 701.0
+1683.62488 571.3
+1717.73486 1469.1
+1756.53577 676.0
+1785.47131 878.0
+1871.50366 931.5
+1877.27039 603.5
+1878.46667 1018.4
+1879.48218 18361.5
+1881.20142 1046.5
+1883.75134 771.3
+1907.05603 7353.9
+1930.72766 1236.5
+S	439	439	1907.51299127
+Z	3	5719.264
+Z	2	3813.178
+532.53729 2022.1
+632.76935 511.6
+632.79852 606.0
+672.17340 599.0
+676.60693 979.0
+700.28870 590.3
+731.07556 735.6
+980.59125 609.2
+1095.47510 755.1
+1198.20398 3335.3
+1209.51440 667.2
+1878.06616 860.7
+1878.94006 2065.4
+1879.44800 19392.8
+1879.73193 1920.8
+1879.97913 2300.1
+1880.26794 982.4
+1907.07275 7659.6
+S	441	441	1880.04040793
+Z	3	5636.846
+Z	2	3758.233
+522.10602 642.4
+532.50012 1591.9
+567.62445 836.9
+600.78546 706.3
+676.60822 901.5
+744.07697 652.9
+750.91644 551.9
+755.67822 660.9
+783.40656 702.9
+795.64496 832.8
+840.51733 775.2
+889.07410 641.7
+1059.88440 650.0
+1198.12354 2950.6
+1878.42957 695.8
+1879.31628 8261.5
+1879.65405 15465.2
+1880.03455 6406.7
+1880.38098 3606.2
+1880.74548 949.1
+1907.03955 7456.3
+1930.47083 1161.4
+S	442	442	1907.48340793
+Z	2	3813.119
+Z	3	5719.175
+532.49158 2079.8
+532.64252 818.8
+533.30322 559.9
+549.14929 894.9
+569.98566 662.9
+577.80518 698.4
+630.39673 795.3
+637.82050 556.0
+676.63165 974.6
+762.02936 634.6
+949.49823 569.0
+1136.17188 675.9
+1140.35522 737.9
+1188.14343 624.0
+1198.09668 2938.1
+1294.02869 585.1
+1375.15051 603.7
+1536.26208 628.2
+1711.64587 598.1
+1876.58533 663.1
+1878.95056 984.3
+1879.49536 19314.2
+1880.30481 834.6
+1880.54431 679.1
+1907.05933 7360.4
+1907.48401 685.4
+1930.54639 832.6
+S	444	444	1879.94040793
+Z	2	3758.033
+Z	3	5636.546
+532.54132 1839.9
+630.43805 674.7
+676.63654 771.1
+722.07477 735.0
+731.15729 719.1
+795.64471 840.9
+1057.22156 785.9
+1198.20886 3070.7
+1413.73340 639.7
+1525.52710 764.5
+1595.69409 577.2
+1665.14514 654.0
+1777.53992 873.5
+1878.87610 819.9
+1879.51147 19419.7
+1880.03882 1116.5
+1907.05579 7925.0
+1907.35291 836.2
+S	445	445	1907.44799127
+Z	3	5719.069
+Z	2	3813.048
+527.48151 645.8
+532.49426 1764.6
+676.61420 1254.0
+723.20020 796.0
+783.91846 620.9
+795.63245 1280.7
+807.44531 575.3
+897.27014 612.5
+962.20544 597.3
+1019.76428 798.5
+1053.83557 748.9
+1157.66431 721.3
+1198.10681 3159.6
+1200.97668 697.8
+1223.66565 713.9
+1394.98047 601.2
+1776.89465 722.1
+1876.57227 671.9
+1878.99915 1012.4
+1879.46326 20027.5
+1879.73035 1733.8
+1907.00305 7620.8
+1907.27148 581.5
+1918.69690 836.5
+1930.54858 916.3
+S	447	447	1880.0618246
+Z	3	5636.91
+Z	2	3758.276
+507.02142 524.7
+532.55475 1504.2
+549.14441 1006.0
+676.59863 783.2
+782.86633 819.5
+795.63977 1009.1
+812.98322 588.2
+820.17297 629.4
+939.25348 689.4
+1020.92163 720.3
+1057.18054 930.4
+1072.33362 627.4
+1082.82373 561.5
+1096.40991 666.1
+1110.92310 666.3
+1198.23450 3287.9
+1263.33374 695.9
+1281.25269 580.1
+1654.52917 636.6
+1878.97998 3307.8
+1879.41614 18967.9
+1879.85693 3247.2
+1880.34607 1085.0
+1886.58228 637.2
+1907.04651 7673.4
+1930.56177 886.5
+S	448	448	1907.46724127
+Z	2	3813.087
+Z	3	5719.126
+523.03522 742.4
+532.55121 1717.8
+539.80109 620.3
+676.64331 921.0
+731.06726 775.3
+742.10864 773.7
+795.63507 1107.4
+823.33966 591.5
+875.07770 720.0
+910.80786 747.2
+916.21155 546.4
+1085.08691 594.0
+1140.37268 806.8
+1198.23779 3502.2
+1287.70496 540.7
+1877.00659 899.7
+1878.84961 908.5
+1879.08093 701.8
+1879.53296 20452.4
+1880.09204 926.2
+1880.78918 956.5
+1907.04700 7267.0
+1930.45667 871.9
+S	450	450	1879.96424127
+Z	3	5636.617
+Z	2	3758.081
+506.26331 595.7
+532.58441 2067.3
+588.56537 666.6
+589.89246 605.6
+608.81860 567.7
+640.40106 680.6
+673.37714 618.1
+676.61237 1133.2
+731.84161 634.3
+795.63068 1180.0
+1009.30823 588.9
+1198.31006 3049.8
+1455.01990 702.2
+1525.44983 805.4
+1586.40869 630.8
+1591.14417 683.1
+1775.99243 671.1
+1777.47095 1277.3
+1779.79395 694.7
+1876.46619 645.9
+1877.76721 753.8
+1878.88989 1265.0
+1879.47571 19062.2
+1879.77856 3315.4
+1880.08655 1894.9
+1907.06018 7364.3
+1930.66272 1104.5
+S	451	451	1907.47399127
+Z	2	3813.1
+Z	3	5719.147
+532.56305 1880.8
+549.14636 735.2
+631.35083 604.1
+676.63837 814.6
+699.57031 608.7
+731.24481 608.1
+746.58435 658.3
+795.63171 1469.8
+888.03052 672.8
+1090.31775 637.2
+1131.54871 634.0
+1198.25952 2934.1
+1222.17224 625.4
+1292.18726 641.8
+1292.33167 585.1
+1671.26379 659.7
+1777.35486 724.3
+1878.76318 987.0
+1879.07727 1756.6
+1879.51794 20012.9
+1879.94250 2204.8
+1880.22742 1094.2
+1889.42493 540.8
+1907.09338 7417.4
+1930.52783 774.1
+S	453	453	1879.95299127
+Z	2	3758.058
+Z	3	5636.584
+532.57794 2350.7
+618.26801 792.4
+624.90894 714.5
+630.41931 1028.2
+676.62024 901.2
+713.62811 669.3
+746.80939 653.1
+795.64594 1315.4
+1049.99585 650.6
+1059.98792 611.2
+1188.03137 685.8
+1198.28748 2840.9
+1447.28052 562.3
+1525.45105 807.4
+1640.94629 664.9
+1666.24194 700.0
+1763.68799 678.6
+1777.52832 742.6
+1878.78381 1656.7
+1879.16455 2652.4
+1879.48792 19821.4
+1879.80334 2347.8
+1880.22241 1768.6
+1881.87378 754.3
+1906.75928 943.5
+1907.05103 7593.8
+1984.34778 651.4
+S	454	454	1907.47699127
+Z	2	3813.106
+Z	3	5719.156
+532.58929 2313.6
+549.12695 569.3
+607.21503 628.2
+625.57318 742.0
+676.62848 800.9
+902.96527 671.6
+967.62762 779.6
+1019.74518 798.6
+1021.07397 679.7
+1120.41260 647.7
+1176.54456 705.7
+1198.32019 3384.5
+1796.29321 589.8
+1810.35571 678.5
+1822.87524 626.0
+1857.54321 654.0
+1875.80286 815.5
+1876.46594 810.0
+1879.50415 20621.5
+1880.96240 643.4
+1907.06506 7234.8
+1930.45764 871.3
+S	456	456	1879.9598246
+Z	3	5636.604
+Z	2	3758.072
+532.50568 624.4
+532.57446 1636.3
+564.92700 598.4
+600.95264 574.0
+676.62012 913.1
+737.88745 658.1
+745.20569 681.3
+746.40979 553.1
+749.98663 556.4
+790.08203 639.4
+795.66058 1104.8
+886.27716 710.8
+952.43536 674.7
+1002.16705 731.0
+1019.76233 716.8
+1198.28418 3340.7
+1777.32996 768.4
+1805.81555 679.6
+1823.31860 709.9
+1869.79004 567.7
+1879.02991 1285.0
+1879.47815 19868.0
+1879.97900 1362.2
+1880.32959 851.8
+1907.06946 7586.1
+1930.59973 1220.5
+1944.18530 634.2
+S	461	461	1879.9808246
+Z	3	5636.667
+Z	2	3758.114
+527.24255 635.3
+532.57123 1978.1
+630.36816 1047.3
+648.23224 673.5
+676.63605 916.4
+716.05322 598.4
+731.07776 975.9
+737.27625 735.7
+744.95441 543.5
+795.62482 1018.3
+907.39319 685.6
+1030.70593 633.4
+1198.27734 3061.7
+1777.41870 1166.9
+1879.12976 3960.5
+1879.50439 19533.7
+1879.87329 3531.6
+1880.45618 1081.9
+1905.99536 575.3
+1906.81189 5741.6
+1907.20227 1266.0
+1930.48328 1068.9
+S	462	462	1907.47524127
+Z	2	3813.103
+Z	3	5719.15
+532.55597 1733.1
+630.35425 781.1
+663.06909 631.2
+732.46112 702.3
+918.98346 607.6
+1129.53918 704.6
+1198.25159 3162.6
+1304.00574 730.3
+1525.31897 798.9
+1879.17029 3035.3
+1879.52820 19585.0
+1879.89990 3028.1
+1906.61877 1126.0
+1906.91492 6979.2
+1930.46912 1083.0
+S	464	464	1879.93524127
+Z	2	3758.023
+Z	3	5636.53
+532.56482 1905.3
+630.39032 717.1
+639.15802 776.9
+676.63586 836.8
+795.65302 856.7
+842.27722 682.4
+899.76001 715.2
+979.69708 669.5
+1037.40454 649.5
+1127.98535 587.1
+1198.06311 646.4
+1198.26733 3520.4
+1381.15393 656.3
+1464.79810 564.3
+1877.35645 696.1
+1878.11890 578.2
+1878.44067 987.3
+1878.71057 1095.9
+1879.00891 1157.2
+1879.53406 19348.0
+1880.08154 1045.7
+1880.49622 1088.7
+1907.04065 7839.5
+S	465	465	1907.37940793
+Z	2	3812.911
+Z	3	5718.863
+525.01819 621.4
+532.55701 1877.3
+562.62299 660.7
+630.39423 789.9
+667.39783 614.2
+676.63428 885.7
+694.16138 634.4
+705.83124 573.6
+765.75372 539.7
+795.64142 1204.7
+812.98187 515.7
+863.09448 647.8
+1000.10822 590.1
+1057.23035 801.2
+1063.43787 537.3
+1063.50964 572.9
+1198.25183 3155.9
+1264.39368 771.2
+1291.64246 673.6
+1420.47034 640.8
+1525.40662 823.8
+1694.16467 556.2
+1840.54919 805.6
+1877.89844 807.3
+1878.96863 1551.8
+1879.52014 19675.5
+1879.78223 3206.8
+1880.09363 1169.7
+1907.08679 6899.0
+1930.55359 937.2
+1952.83899 564.9
+S	467	467	1879.96140793
+Z	3	5636.609
+Z	2	3758.075
+532.46826 948.5
+532.54199 1016.3
+605.39929 640.8
+676.63336 1116.0
+731.09039 632.2
+782.88483 556.5
+795.64734 723.8
+1057.25854 1017.8
+1079.34851 755.8
+1187.91309 750.1
+1197.99597 1159.9
+1198.19421 2401.7
+1245.14392 632.0
+1489.11475 902.5
+1766.98547 591.0
+1777.51770 706.6
+1793.42639 613.0
+1876.79834 663.0
+1878.82751 1022.8
+1879.53174 20168.2
+1879.85461 1432.4
+1880.15015 988.2
+1907.06628 7710.9
+S	468	468	1907.45440793
+Z	3	5719.088
+Z	2	3813.061
+532.55945 1952.4
+537.23529 586.4
+542.92230 659.6
+543.01556 660.1
+548.97571 573.7
+569.16595 561.3
+620.54010 683.9
+670.29584 628.1
+795.65808 1209.4
+901.56580 550.3
+915.91925 626.2
+951.44971 619.0
+961.01025 619.4
+996.34521 585.4
+1021.07727 650.6
+1057.23071 677.3
+1099.02039 655.9
+1198.24866 2936.3
+1217.46436 633.0
+1334.73877 625.0
+1376.51489 674.8
+1430.69128 598.8
+1485.21350 668.4
+1525.31934 1121.9
+1672.88196 613.8
+1694.71985 601.6
+1819.29163 633.5
+1878.54858 1077.6
+1879.51489 20244.2
+1879.98877 1271.5
+1880.40454 836.5
+1907.12317 7050.3
+1930.49170 1186.9
+S	470	470	1879.92799127
+Z	2	3758.008
+Z	3	5636.509
+532.55591 1477.9
+539.12750 735.6
+580.69580 582.4
+630.36987 748.5
+795.64667 925.0
+828.42560 722.9
+927.33551 581.3
+960.26477 708.6
+1021.10065 716.5
+1198.25378 3275.2
+1269.15381 582.5
+1351.58374 596.6
+1705.51160 655.5
+1878.32947 622.3
+1878.47705 931.3
+1879.54810 19589.1
+1880.63135 801.7
+1880.83740 860.2
+1882.63159 716.4
+1907.07483 7241.2
+1930.48669 752.8
+S	471	471	1907.49540793
+Z	3	5719.211
+Z	2	3813.143
+523.02606 552.0
+532.56525 1866.3
+567.98120 588.9
+676.62469 985.0
+795.66766 804.8
+812.60760 595.0
+1023.07275 655.0
+1033.03711 584.6
+1039.87268 740.0
+1155.89063 794.4
+1198.27002 3201.3
+1198.46399 652.2
+1312.25208 672.3
+1446.21582 582.0
+1454.31177 885.1
+1525.31494 749.0
+1658.23840 578.8
+1878.83704 1052.8
+1879.51660 18784.8
+1883.90967 664.8
+1906.73621 802.5
+1907.05579 7838.3
+1930.47986 953.4
+1952.08191 641.1
+S	473	473	1879.96540793
+Z	3	5636.621
+Z	2	3758.083
+532.54205 1939.7
+549.13904 983.7
+595.94250 597.7
+676.63220 1032.6
+731.11011 859.9
+731.92175 585.4
+795.66394 711.3
+928.71918 677.9
+1057.22327 942.9
+1136.62512 747.0
+1198.21350 3180.7
+1620.79651 659.5
+1777.39978 1054.2
+1778.03101 827.5
+1808.43408 634.6
+1860.01343 812.0
+1878.84753 1080.3
+1879.50757 19720.0
+1879.76172 781.5
+1880.29285 1058.9
+1880.76855 879.5
+1898.53687 699.3
+1907.09839 7161.9
+S	474	474	1907.4608246
+Z	2	3813.074
+Z	3	5719.107
+532.53693 1831.3
+588.30695 605.7
+630.38141 706.4
+665.50073 608.5
+676.64911 903.3
+732.79926 654.2
+775.64972 775.1
+795.03571 760.5
+867.94495 697.3
+875.53125 624.5
+987.62781 634.1
+1021.13110 710.5
+1057.26160 997.8
+1102.68713 613.1
+1153.45093 599.2
+1198.20605 3001.0
+1878.19958 1242.2
+1879.04858 2275.5
+1879.55176 18901.6
+1880.07593 1169.4
+1881.82861 743.2
+1907.03162 7749.0
+1919.05249 665.6
+1926.05640 644.9
+1930.53870 955.3
+1937.80054 661.1
+S	476	476	1879.9218246
+Z	2	3757.996
+Z	3	5636.49
+513.84302 542.0
+532.58710 2023.8
+549.13940 679.2
+566.71313 551.5
+585.55402 639.1
+630.40472 740.1
+631.91382 609.4
+660.92438 853.7
+681.89679 817.2
+741.78442 741.0
+745.65369 587.3
+778.11096 690.8
+795.66730 1380.3
+923.35382 620.9
+957.24640 553.8
+1008.66931 566.9
+1057.26904 1133.5
+1178.07776 631.6
+1198.30701 3502.6
+1243.83142 566.6
+1496.12500 685.5
+1525.37854 974.6
+1661.62463 638.7
+1677.99097 690.8
+1702.01526 724.1
+1716.37781 686.5
+1735.58484 642.2
+1807.87170 593.6
+1808.06970 663.9
+1869.12207 698.4
+1879.10291 1547.7
+1879.31421 2229.2
+1879.58276 19083.1
+1880.27051 1460.2
+1902.72119 631.8
+1907.04822 7479.9
+1930.55884 868.3
+1988.83215 700.7
+S	478	478	1879.92399127
+Z	2	3758.0
+Z	3	5636.497
+532.63477 1862.9
+613.00897 700.2
+630.43805 677.5
+660.07642 705.9
+667.38440 596.3
+676.46399 634.0
+676.63538 816.4
+795.66296 1188.9
+1019.74646 784.7
+1057.22754 1167.9
+1198.41248 3326.2
+1420.37012 720.7
+1488.53943 655.3
+1586.53101 744.5
+1627.94861 679.7
+1833.73694 790.4
+1857.48718 712.7
+1876.03857 687.6
+1878.90149 859.1
+1879.52161 19970.6
+1906.97388 7401.0
+S	479	479	1907.46340793
+Z	2	3813.079
+Z	3	5719.115
+532.61829 1785.4
+591.57996 634.6
+599.79095 597.2
+612.48096 673.6
+619.60803 678.0
+676.65808 891.7
+795.67053 783.6
+808.64172 653.0
+913.82800 699.5
+986.51068 584.5
+1019.75867 834.1
+1059.04761 767.6
+1089.66809 603.8
+1164.67993 645.0
+1198.38110 3239.1
+1377.50415 639.9
+1525.36670 847.6
+1592.28735 560.6
+1777.38232 829.9
+1808.65454 725.1
+1879.19031 1548.7
+1879.56714 19973.4
+1879.94275 1143.2
+1880.25671 1115.6
+1880.75183 982.8
+1881.39270 617.2
+1906.41418 664.4
+1907.00195 6757.9
+1907.75745 836.1
+1930.55359 914.8
+S	481	481	1879.86640793
+Z	2	3757.885
+Z	3	5636.324
+532.54938 1922.5
+592.23572 584.0
+630.41205 956.8
+666.14063 652.5
+676.02606 606.4
+676.62091 1202.8
+696.03198 627.0
+719.24579 779.1
+765.34497 544.4
+795.66931 721.7
+1030.90564 618.3
+1198.22937 2804.5
+1439.71582 656.9
+1479.29785 715.8
+1614.88074 587.6
+1872.78723 630.6
+1878.93506 658.4
+1879.47766 20120.0
+1880.27856 1016.0
+1907.05432 7429.7
+1921.39795 688.2
+1930.63110 1232.4
+1938.39453 613.4
+S	482	482	1907.47124127
+Z	2	3813.095
+Z	3	5719.138
+532.59070 1890.7
+549.13525 830.3
+588.73676 712.2
+676.62109 873.7
+731.10223 879.3
+795.67432 753.9
+1057.22766 844.6
+1102.88367 593.9
+1198.31775 3654.7
+1455.56531 628.1
+1525.37402 779.5
+1549.03125 577.0
+1585.06934 575.6
+1876.51221 726.3
+1878.79724 1119.5
+1879.48560 19409.6
+1879.78015 3747.7
+1881.18384 638.9
+1890.86475 691.9
+1907.04480 6362.0
+1907.29553 1910.3
+1930.51831 1251.9
+S	484	484	1879.97124127
+Z	2	3758.095
+Z	3	5636.638
+532.59216 1574.3
+549.14984 737.6
+551.94238 655.6
+570.59100 563.6
+597.62769 549.1
+614.89899 735.2
+630.41382 774.8
+676.62292 853.0
+693.11444 590.1
+731.10968 826.3
+795.67999 813.1
+937.57513 597.7
+999.19397 620.9
+1198.32666 3400.5
+1489.50098 629.7
+1489.66187 600.2
+1525.39929 812.0
+1879.03308 1847.8
+1879.24548 909.4
+1879.49243 20045.9
+1879.97278 2443.2
+1880.30823 749.5
+1907.05371 7526.3
+1930.56238 1127.9
+S	485	485	1907.47899127
+Z	3	5719.162
+Z	2	3813.11
+532.58850 1383.6
+545.39612 712.2
+660.33069 562.6
+676.61951 1064.2
+689.49536 738.1
+726.63068 648.6
+1021.19629 864.6
+1198.31787 3278.8
+1400.84985 635.4
+1502.39880 695.6
+1517.88049 614.3
+1537.27307 628.6
+1850.68481 685.7
+1878.47498 818.6
+1879.47498 20001.9
+1880.13403 1085.0
+1883.66821 696.1
+1907.08960 7244.3
+1975.19531 825.3
+S	487	487	1879.9088246
+Z	3	5636.451
+Z	2	3757.97
+532.58942 1957.3
+549.13416 755.6
+568.97498 616.9
+605.22168 717.1
+676.63788 814.9
+683.73969 597.2
+699.99939 688.5
+795.67963 754.5
+875.56909 646.5
+1003.00592 573.6
+1057.23694 948.8
+1125.65369 770.1
+1188.31396 634.0
+1198.31897 3272.8
+1316.22217 713.1
+1333.41553 673.7
+1522.82751 676.5
+1777.09790 837.0
+1878.58862 933.0
+1879.00659 1330.7
+1879.50732 20053.4
+1879.99475 1390.4
+1880.41174 1219.0
+1907.05347 7561.1
+1930.57373 938.6
+S	488	488	1907.42324127
+Z	3	5718.994
+Z	2	3812.999
+532.58557 2011.0
+608.55029 636.3
+627.79456 606.7
+628.70972 543.0
+630.35864 665.4
+676.63147 859.0
+754.52203 626.2
+795.67334 1391.5
+802.07324 693.6
+844.21454 597.2
+891.05902 557.5
+950.13959 703.8
+1198.31287 3582.6
+1532.85425 758.6
+1777.02173 844.5
+1816.48792 682.3
+1850.54248 829.2
+1860.03760 641.4
+1879.05652 784.7
+1879.51282 19140.8
+1907.02332 7428.7
+1930.49207 862.7
+S	490	490	1879.89824127
+Z	3	5636.419
+Z	2	3757.949
+532.53534 646.3
+532.58209 1855.9
+549.16089 813.5
+588.09106 592.8
+630.41473 729.9
+649.92932 619.8
+672.71729 551.6
+676.65057 730.4
+795.67700 913.0
+816.67303 760.4
+1057.26587 1308.4
+1198.30139 3178.3
+1249.63879 615.6
+1360.98596 643.9
+1431.23145 728.1
+1445.18958 686.7
+1525.43848 750.4
+1718.08191 566.8
+1873.04944 842.6
+1877.24890 659.4
+1878.92468 846.2
+1879.21252 2288.5
+1879.55615 19472.6
+1879.89380 2599.8
+1880.76733 951.3
+1906.22705 766.7
+1906.63806 2110.5
+1906.91931 6550.4
+1922.42224 783.2
+1930.60876 1044.1
+S	491	491	1907.5623246
+Z	2	3813.109
+532.57941 1667.0
+548.36700 621.0
+611.57037 704.5
+611.62079 619.8
+676.65704 751.1
+731.11157 785.4
+914.26343 723.1
+1019.18408 632.2
+1198.29565 3281.0
+1249.64063 665.2
+1290.76990 734.1
+1605.57520 611.0
+1763.72400 683.2
+1789.98169 700.8
+1869.97864 880.4
+1876.01221 1084.2
+1879.05298 909.5
+1879.56018 16700.7
+1879.95117 3486.9
+1905.81250 851.8
+1906.47803 891.3
+1906.89722 6979.4
+1907.75635 788.8
+S	493	493	1907.27640793
+Z	2	3812.705
+Z	3	5718.554
+510.05695 696.3
+532.50793 2007.2
+535.87152 581.9
+549.16174 1187.5
+603.68451 549.6
+676.63873 990.9
+764.59778 663.8
+782.46082 585.8
+795.67444 910.2
+893.90277 660.5
+1057.23901 982.8
+1065.66772 632.6
+1198.13892 3457.9
+1406.92065 745.7
+1525.44043 781.9
+1536.25879 641.0
+1667.57520 694.6
+1878.43628 957.8
+1878.91650 1053.2
+1879.22363 1617.9
+1879.52576 20184.0
+1880.12781 1624.5
+1906.94067 6712.7
+1930.60474 811.6
+S	495	495	1879.94840793
+Z	3	5636.57
+Z	2	3758.049
+532.56183 1708.1
+546.13519 642.4
+589.82666 624.4
+617.95178 590.6
+676.55450 635.3
+676.63135 1034.3
+758.76947 631.6
+795.67719 937.4
+866.66504 597.3
+875.58844 672.3
+976.63354 579.5
+1010.06915 558.2
+1054.99463 552.8
+1056.30237 702.1
+1057.17444 895.0
+1134.33508 608.2
+1192.47107 610.8
+1198.25684 3354.3
+1206.81482 585.4
+1214.28467 756.4
+1233.07593 583.9
+1263.38916 614.3
+1525.36426 1072.8
+1879.49219 19246.8
+1879.75647 3326.4
+1880.20068 1035.2
+1881.29614 816.7
+1907.06946 7352.2
+1918.68176 949.3
+S	496	496	1907.48140793
+Z	3	5719.169
+Z	2	3813.115
+518.87970 614.8
+532.55676 1671.1
+561.06049 883.5
+614.53235 655.0
+619.46753 655.1
+630.45001 960.6
+726.79553 618.2
+728.34772 625.5
+740.56842 777.4
+795.66730 1089.9
+856.37000 572.9
+1019.74396 679.0
+1021.42090 614.7
+1198.25037 3445.2
+1207.09937 552.6
+1216.65845 677.0
+1485.35120 681.8
+1583.40063 712.2
+1715.74597 749.5
+1718.79285 629.3
+1776.60107 641.3
+1878.79944 1175.5
+1879.29797 3446.7
+1879.53967 19534.6
+1880.26721 1540.6
+1907.06152 7234.8
+1907.94238 937.6
+1930.65881 740.3
+S	498	498	1907.53940793
+Z	3	5719.343
+Z	2	3813.231
+532.51721 2072.6
+534.62909 587.3
+548.49921 625.4
+586.35303 598.3
+596.33789 613.8
+609.48346 661.8
+630.40295 776.0
+676.59082 879.8
+731.12604 778.3
+734.43060 536.7
+791.91443 635.6
+795.65417 920.9
+948.63818 718.3
+992.21753 741.6
+1187.96985 781.5
+1198.15588 3523.3
+1267.46631 608.9
+1338.19434 785.2
+1554.42114 709.3
+1878.52563 1008.6
+1879.42810 18721.8
+1879.97400 1249.5
+1881.41626 784.6
+1905.95667 700.6
+1907.07202 6757.2
+1918.67542 734.7
+S	500	500	1879.90340793
+Z	3	5636.435
+Z	2	3757.959
+532.54456 1954.0
+549.14520 887.9
+641.22559 656.4
+648.52997 584.2
+664.37518 617.3
+676.62836 1084.6
+733.83685 694.4
+743.51581 650.5
+744.00220 636.7
+878.03503 659.3
+1057.21594 749.0
+1169.59448 701.3
+1198.21362 3021.5
+1622.76526 562.5
+1666.72925 718.1
+1707.30505 633.3
+1877.71558 671.8
+1878.10498 687.1
+1878.36890 1028.9
+1879.06018 1757.4
+1879.49854 19808.1
+1879.91113 2194.5
+1880.62354 724.1
+1907.05579 7421.1
+1918.65747 737.4
+1931.14307 740.6
+1943.49207 717.6
+S	501	501	1907.55899127
+Z	3	5719.402
+Z	2	3813.27
+517.24646 706.2
+532.53131 1900.9
+543.82123 616.5
+549.12952 770.6
+619.74664 671.1
+676.61841 764.8
+795.65454 942.8
+853.71588 690.9
+1057.20923 809.1
+1153.77551 638.2
+1198.18665 2974.2
+1247.40601 606.5
+1333.07129 665.5
+1566.57971 648.8
+1748.91504 725.0
+1878.21838 735.6
+1878.40112 706.2
+1878.78394 975.3
+1879.48279 19634.9
+1880.35620 653.9
+1880.54138 732.0
+1907.05591 6876.0
+1918.67273 604.2
+S	503	503	1879.9328246
+Z	3	5636.523
+Z	2	3758.018
+532.48822 2154.9
+540.22766 777.2
+549.22302 557.9
+675.60217 624.9
+676.61316 1290.2
+709.01050 681.6
+736.00360 601.3
+763.35217 533.4
+788.52307 738.2
+795.66241 974.1
+835.89960 661.4
+1097.26172 636.4
+1188.30981 676.0
+1198.09106 3268.2
+1296.72375 639.0
+1456.11548 682.0
+1501.15564 695.4
+1502.58411 648.2
+1717.64050 633.2
+1836.66711 601.7
+1877.65955 720.6
+1878.91809 792.9
+1879.45459 19945.3
+1879.75061 1592.1
+1880.01160 926.8
+1880.51440 753.8
+1883.24219 607.1
+1907.08667 7295.8
+1930.60059 786.1
+S	504	504	1907.51940793
+Z	3	5719.283
+Z	2	3813.191
+532.54828 2100.3
+563.12433 736.9
+630.39526 1015.7
+641.42682 619.4
+676.64221 678.1
+716.21356 597.6
+795.67096 1305.0
+1188.31042 672.3
+1198.22192 3318.1
+1299.81653 704.7
+1317.18042 611.3
+1525.44385 873.7
+1573.03259 634.7
+1824.62378 639.6
+1874.49768 620.6
+1876.59644 722.6
+1878.72058 816.2
+1879.28394 3749.9
+1879.55505 18943.7
+1879.93030 3235.8
+1907.02930 7673.1
+S	506	506	1879.93940793
+Z	2	3758.031
+Z	3	5636.543
+532.51300 2088.9
+549.15149 564.6
+567.46399 559.8
+597.72980 561.7
+627.23737 692.0
+657.77014 722.3
+676.64807 1076.2
+795.66180 838.6
+800.97070 518.8
+1020.93219 766.0
+1057.24756 912.4
+1188.22571 597.7
+1198.14490 3539.5
+1256.86169 721.4
+1503.46313 775.1
+1643.15759 574.7
+1674.01587 741.3
+1704.32825 719.6
+1777.24976 781.0
+1788.66406 610.2
+1848.67859 712.2
+1876.77966 634.2
+1878.42712 718.4
+1879.10400 1943.7
+1879.55286 19574.4
+1880.71826 763.9
+1907.04333 7871.8
+1930.58496 803.3
+1957.08655 675.6
+S	507	507	1907.46840793
+Z	3	5719.13
+Z	2	3813.089
+532.51031 1682.1
+537.39215 711.6
+549.14435 904.2
+630.38849 738.1
+657.43872 658.7
+676.62927 1146.9
+727.06769 711.4
+795.66431 759.3
+840.28998 873.6
+914.80048 585.5
+938.54401 610.9
+1057.22144 657.1
+1198.13660 3441.4
+1251.61462 615.6
+1428.22888 602.3
+1525.39026 1226.0
+1777.27673 672.8
+1800.06018 743.4
+1865.10291 621.2
+1878.99707 1582.6
+1879.48743 20344.8
+1879.94324 1397.9
+1880.44373 1097.5
+1907.05896 7319.1
+1930.53467 797.2
+S	509	509	1879.92224127
+Z	3	5636.491
+Z	2	3757.997
+516.01111 605.4
+523.49817 601.2
+532.54669 2195.7
+555.82385 664.3
+568.99451 616.8
+641.33954 584.0
+647.74310 637.3
+651.67322 597.2
+676.60742 1024.2
+695.12433 605.8
+731.16620 951.3
+795.67395 1103.9
+844.77618 591.6
+1019.79407 768.3
+1198.21680 3102.3
+1235.66309 663.2
+1335.44739 613.1
+1395.92554 631.9
+1479.23450 696.5
+1667.11133 629.0
+1876.29907 624.2
+1876.44373 645.2
+1878.05908 982.6
+1878.81628 888.7
+1879.43787 19229.1
+1879.72034 3437.1
+1880.08679 1874.1
+1881.88342 647.0
+1882.34583 602.1
+1907.06274 7512.6
+S	510	510	1907.38099127
+Z	2	3812.914
+Z	3	5718.868
+532.56116 2107.2
+630.34760 656.7
+655.27307 571.6
+676.62378 1208.7
+769.97064 585.0
+795.67847 1153.1
+832.97784 619.5
+905.64520 758.4
+989.88794 619.2
+1004.75226 620.2
+1177.35327 728.6
+1198.25696 3140.2
+1216.70142 668.1
+1504.09619 667.8
+1525.28442 830.9
+1589.98816 565.8
+1593.72998 710.9
+1876.87573 717.5
+1878.24036 935.1
+1878.88293 676.2
+1879.17603 1708.5
+1879.48560 20082.6
+1880.15356 1148.2
+1907.06079 7540.2
+1930.42578 1055.9
+S	512	512	1879.90499127
+Z	2	3757.962
+Z	3	5636.44
+511.88324 611.7
+532.56567 1815.9
+549.16022 502.8
+549.18268 565.8
+585.30597 618.6
+676.62830 802.7
+686.51324 587.4
+692.48950 504.6
+706.85162 602.8
+783.46124 730.4
+795.66895 987.0
+801.52802 578.0
+803.03314 721.0
+961.90503 684.6
+1128.38647 595.9
+1140.20361 710.3
+1188.00940 793.3
+1198.26660 3245.7
+1455.22095 667.6
+1715.86353 730.6
+1835.72791 757.5
+1878.53052 951.7
+1878.88330 1100.5
+1879.49939 19623.0
+1879.78003 2266.5
+1879.94104 2002.4
+1880.22375 686.3
+1907.07092 7661.5
+1930.61194 947.7
+S	513	513	1907.47440793
+Z	3	5719.148
+Z	2	3813.101
+532.57019 1773.6
+546.25439 553.2
+632.46564 746.6
+676.63000 1114.5
+690.76788 683.4
+795.68024 913.7
+972.32361 630.5
+1050.66626 580.7
+1057.23376 783.3
+1160.88855 806.2
+1198.26636 2940.7
+1240.07654 638.5
+1425.05554 586.5
+1472.58118 610.0
+1633.68506 619.5
+1750.53101 717.3
+1776.88928 691.7
+1831.73376 683.3
+1860.11182 587.6
+1869.18311 610.2
+1878.39539 732.1
+1879.06409 664.0
+1879.24500 2031.3
+1879.52002 19816.7
+1879.96216 826.3
+1881.37744 853.0
+1907.10034 6958.3
+1918.73169 969.2
+1930.57629 931.0
+S	515	515	1879.9478246
+Z	2	3758.048
+Z	3	5636.568
+507.20444 573.7
+507.23471 586.8
+532.54346 2199.1
+549.17993 727.9
+567.20953 642.2
+573.70502 700.9
+633.25330 702.0
+640.12836 592.8
+676.61169 1138.4
+694.75458 645.3
+711.01257 718.8
+854.63562 537.4
+918.17590 622.0
+948.92542 606.1
+1021.15796 858.2
+1024.46326 699.1
+1134.33960 683.1
+1142.92651 650.5
+1198.21655 2866.2
+1310.31750 605.1
+1486.89709 847.2
+1563.80505 650.7
+1575.79211 760.2
+1656.20618 685.2
+1868.99902 603.1
+1870.24463 715.4
+1878.18311 676.9
+1878.84619 771.1
+1879.12915 1261.9
+1879.48108 19948.9
+1879.82153 1373.8
+1907.03430 7420.8
+1930.73352 1133.4
+S	516	516	1907.4518246
+Z	3	5719.08
+Z	2	3813.056
+524.45538 682.0
+532.53320 1856.2
+568.77295 564.7
+578.35010 640.5
+622.54895 673.8
+630.43964 863.8
+676.64514 754.7
+723.99188 685.8
+853.35693 617.2
+1021.20258 735.3
+1198.19519 3460.0
+1279.31934 732.0
+1405.14856 746.0
+1525.47852 1044.9
+1596.03992 630.6
+1599.83728 771.0
+1618.37012 780.1
+1622.02588 662.4
+1663.71594 615.6
+1844.74060 702.3
+1879.08594 2593.6
+1879.53027 19617.2
+1879.99976 2583.0
+1906.75635 584.5
+1907.08630 7356.3
+1930.67236 978.1
+1990.12122 635.4
+S	518	518	1907.4668246
+Z	2	3813.086
+Z	3	5719.125
+532.53827 1729.1
+630.41559 777.4
+676.58459 951.9
+795.67914 701.9
+886.59692 566.3
+960.73938 575.6
+1056.79565 642.0
+1057.15979 954.7
+1094.26868 687.8
+1198.20654 2933.0
+1717.27258 1019.5
+1871.13928 755.9
+1871.34863 569.5
+1879.36841 20835.8
+1907.01819 7361.8
+1918.69275 878.3
+1930.62939 879.0
+S	520	520	1879.85899127
+Z	3	5636.302
+Z	2	3757.87
+532.50275 2050.6
+636.13715 567.6
+676.66370 910.6
+771.86957 771.9
+1198.12036 3597.1
+1235.59985 634.4
+1304.07837 595.9
+1525.44446 867.4
+1551.09766 668.5
+1561.63928 716.3
+1669.46204 627.3
+1779.23779 561.2
+1874.17004 954.6
+1877.90503 766.6
+1878.18677 1295.2
+1878.95984 1839.5
+1879.22278 1881.4
+1879.60303 19202.9
+1879.96521 1475.4
+1880.22339 1697.8
+1881.02698 1417.8
+1907.04602 7419.0
+1930.55713 634.0
+1997.40430 809.7
+S	521	521	1907.45140793
+Z	2	3813.055
+Z	3	5719.079
+532.54712 1830.0
+549.14636 823.7
+558.42609 706.7
+630.40533 946.4
+719.52423 648.7
+761.63281 674.7
+788.78827 579.2
+795.67474 1065.8
+825.76959 598.1
+857.25842 750.7
+968.18079 633.7
+1018.64075 683.6
+1064.00110 635.4
+1198.22485 3022.6
+1485.22205 654.5
+1521.34143 609.4
+1537.46753 605.6
+1719.41956 1196.3
+1755.21179 680.6
+1878.02637 993.7
+1878.34155 955.1
+1878.93933 1136.2
+1879.23999 3943.1
+1879.54199 19328.6
+1879.86438 2777.0
+1880.13037 1981.0
+1880.49280 1243.4
+1881.01501 1033.1
+1883.60291 572.9
+1907.05322 7349.7
+1930.60205 815.1
+1996.77222 652.3
+S	523	523	1880.08899127
+Z	2	3758.33
+Z	3	5636.992
+532.52075 1619.7
+549.56677 654.0
+549.76129 635.8
+630.39569 699.2
+676.65814 725.3
+704.58960 579.6
+722.96686 594.9
+795.68109 1230.8
+833.68457 612.3
+965.73285 640.6
+1198.16638 2853.8
+1198.30688 758.9
+1250.36389 622.6
+1289.84827 617.5
+1304.96509 728.0
+1717.31018 1317.9
+1871.17358 770.2
+1878.53308 768.3
+1878.90479 1563.6
+1879.38452 7763.2
+1879.60327 16515.1
+1879.82336 6539.1
+1880.54846 1053.6
+1880.96277 1415.6
+1898.89954 609.8
+1907.05615 7548.6
+1930.48218 903.1
+S	524	524	1907.45999127
+Z	2	3813.072
+Z	3	5719.105
+522.15112 622.6
+532.54321 2063.8
+545.20374 561.3
+549.02490 557.4
+606.70978 700.0
+641.50085 610.9
+667.73907 571.5
+676.64459 980.8
+773.04730 699.6
+782.92004 579.9
+783.21399 688.8
+1146.38513 649.5
+1198.20386 3751.5
+1221.52307 646.4
+1841.19324 695.8
+1878.78479 1526.7
+1879.52771 19458.1
+1879.79919 1922.6
+1880.06323 1627.7
+1880.25488 1584.0
+1880.50806 718.8
+1881.65967 638.5
+1881.87903 679.9
+1906.43323 680.0
+1907.05432 7396.0
+1922.49023 588.9
+1968.77039 700.8
+S	526	526	1880.0268246
+Z	3	5636.805
+Z	2	3758.206
+532.56482 1723.9
+549.15894 1174.2
+558.96014 698.2
+632.58862 657.2
+676.62598 823.4
+731.10962 700.7
+782.72760 581.3
+795.67682 911.9
+796.31110 648.3
+838.88342 672.5
+854.84332 560.7
+1187.93359 1066.1
+1198.26184 3559.2
+1414.98804 614.1
+1466.62622 583.6
+1499.89917 654.6
+1525.44336 774.9
+1526.39307 750.4
+1878.35510 610.6
+1879.13586 1853.0
+1879.49951 19544.4
+1879.80798 1969.2
+1879.88074 1831.3
+1884.00000 603.7
+1907.02478 7454.2
+1930.61816 902.1
+1998.48474 752.9
+S	527	527	1907.47399127
+Z	3	5719.147
+Z	2	3813.1
+520.76642 626.2
+532.55603 1584.0
+582.43073 654.1
+628.30652 609.3
+676.62939 750.9
+688.56409 733.9
+731.13995 646.0
+795.67865 860.0
+894.13702 558.8
+986.30157 710.0
+1031.67786 665.6
+1057.23120 768.2
+1198.24023 3563.1
+1426.87097 756.8
+1525.43677 1226.7
+1569.76172 869.2
+1645.61841 551.2
+1667.83240 655.6
+1777.25757 739.4
+1878.86328 768.9
+1879.49670 19349.6
+1879.76355 3353.0
+1880.09705 950.6
+1880.72449 1210.8
+1906.76172 864.4
+1907.12549 6635.1
+1907.44775 1415.7
+1921.53979 647.1
+1930.59509 946.4
+S	529	529	1879.89140793
+Z	2	3757.935
+Z	3	5636.399
+532.54132 2231.3
+543.48877 645.5
+619.72986 600.2
+676.61017 1372.2
+836.25653 564.2
+894.11609 557.2
+977.90039 634.6
+1003.06781 537.0
+1198.21240 3522.8
+1235.60498 662.9
+1636.40112 756.2
+1659.61707 681.6
+1878.31226 613.6
+1878.52869 743.8
+1878.87476 930.5
+1879.14453 885.0
+1879.46777 20113.7
+1879.87170 992.8
+1880.00488 934.2
+1906.67969 870.9
+1907.03723 7345.3
+1907.40576 826.8
+1908.29932 612.5
+1918.74243 680.2
+1930.68372 765.4
+1933.29456 643.6
+S	530	530	1907.48424127
+Z	2	3813.121
+Z	3	5719.177
+532.57654 2170.8
+538.36835 668.1
+590.27008 676.4
+630.42316 903.3
+676.61200 637.1
+698.38232 582.4
+709.70441 651.9
+731.13586 595.0
+795.69031 1142.1
+858.56232 776.5
+977.99683 603.9
+1000.04724 647.7
+1020.88434 692.6
+1057.20923 718.1
+1072.29834 603.2
+1072.69812 702.7
+1198.28540 3221.2
+1417.49426 655.4
+1616.41968 618.5
+1819.35754 664.6
+1877.08801 611.9
+1878.42871 649.9
+1879.45325 19129.8
+1879.73315 4908.5
+1880.21497 831.4
+1895.89368 626.4
+1907.04053 6494.4
+1930.66211 972.8
+S	534	534	1879.92340793
+Z	3	5636.495
+Z	2	3757.999
+532.49792 1971.5
+544.11328 680.0
+545.56195 631.5
+648.05060 625.8
+676.62988 1173.8
+721.80798 581.7
+756.29407 559.3
+789.33185 716.4
+795.69598 1115.6
+813.82416 658.1
+828.97925 569.8
+834.07874 624.0
+859.72235 576.1
+917.21887 620.9
+969.77582 644.1
+1117.43396 544.2
+1140.53992 729.6
+1198.11267 3378.6
+1198.32996 674.4
+1223.26221 719.1
+1323.85559 775.4
+1409.66467 560.7
+1525.39136 840.3
+1777.02209 1044.5
+1864.45679 555.9
+1870.02856 830.6
+1876.52673 676.1
+1878.26733 651.2
+1878.68481 794.7
+1879.50952 19777.3
+1906.61670 661.1
+1907.07104 7624.8
+1930.60669 1133.0
+S	535	535	1907.53440793
+Z	2	3813.221
+Z	3	5719.328
+532.52209 1766.7
+549.12207 884.9
+588.70972 609.4
+630.82532 668.1
+676.61322 1022.7
+692.02478 705.2
+756.59277 634.1
+762.82300 729.2
+773.68378 567.1
+788.32898 651.9
+795.70123 883.9
+1008.52283 635.9
+1092.60803 701.7
+1198.16443 3325.3
+1471.46350 726.5
+1692.16089 605.1
+1878.09607 973.9
+1878.62634 1148.1
+1878.92896 1696.2
+1879.46338 20066.4
+1880.06396 1157.3
+1880.88660 813.3
+1881.34790 1048.7
+1907.04761 7363.9
+1930.48389 930.3
+S	537	537	1879.97799127
+Z	2	3758.108
+Z	3	5636.659
+532.60919 1897.4
+549.10571 799.8
+630.59790 638.4
+676.61444 1366.1
+796.10492 575.9
+806.24994 652.2
+1118.14990 590.5
+1184.49829 664.8
+1188.16833 671.5
+1198.36633 3295.5
+1295.67554 600.3
+1356.89587 565.8
+1603.87671 821.4
+1726.78662 704.3
+1776.93628 806.8
+1870.18909 689.2
+1872.96753 973.0
+1878.42896 828.5
+1879.46948 19530.7
+1907.05273 7289.1
+1930.45129 953.1
+S	538	538	1907.46640793
+Z	2	3813.085
+Z	3	5719.124
+519.62689 648.4
+532.57227 1830.8
+596.72638 543.6
+630.39355 678.0
+676.61737 1171.9
+715.89282 658.6
+731.11969 575.6
+744.61890 715.8
+745.38165 702.3
+781.28925 646.9
+795.70386 1182.2
+817.88483 710.0
+899.23492 713.5
+927.84167 572.2
+931.65417 811.4
+1057.20837 675.9
+1198.28345 3475.4
+1438.06689 575.9
+1525.38855 708.3
+1660.90747 633.6
+1848.53296 622.2
+1859.44800 606.0
+1876.11926 941.2
+1879.02039 1659.8
+1879.46460 19057.0
+1879.83167 1635.2
+1880.15283 827.5
+1906.22400 968.4
+1906.87256 7200.6
+1907.33826 821.0
+1907.65857 703.7
+1930.55469 741.9
+1976.19604 629.8
+S	540	540	1879.90499127
+Z	2	3757.962
+Z	3	5636.44
+511.65314 533.6
+532.54486 1990.0
+568.63483 691.8
+676.60577 1008.7
+696.86169 606.7
+739.13208 569.5
+795.67194 1127.0
+815.09558 676.9
+840.61847 718.5
+914.01227 654.3
+984.47150 586.8
+1057.18713 923.6
+1140.21741 684.2
+1198.21912 3034.3
+1674.48547 672.1
+1809.04163 720.1
+1878.23157 934.6
+1878.64368 671.9
+1878.85632 1096.1
+1879.44165 19495.6
+1879.72266 1715.3
+1879.98547 692.9
+1880.22302 730.0
+1880.58630 676.8
+1907.05151 7240.8
+S	541	541	1907.4758246
+Z	3	5719.152
+Z	2	3813.104
+523.46973 638.9
+532.51410 2088.7
+584.73840 544.3
+630.42413 824.6
+635.10083 610.9
+676.62189 1242.1
+679.64838 709.8
+786.62122 613.9
+793.39758 554.7
+795.69446 1032.8
+950.69635 638.1
+1066.93628 610.3
+1198.14514 3499.1
+1267.84277 655.2
+1495.07520 576.4
+1663.75391 719.1
+1878.99451 1855.3
+1879.48792 19417.6
+1879.98462 1695.8
+1881.35767 989.9
+1907.03076 7367.7
+1930.63977 1134.4
+S	544	544	1879.7585746
+Z	2	3757.669
+Z	3	5636.001
+532.46655 2295.0
+549.16895 629.1
+592.36859 609.2
+630.42950 704.8
+676.60913 1110.0
+763.62091 600.5
+795.69989 1038.0
+909.40051 581.5
+909.88275 664.9
+1057.19507 884.3
+1073.25293 624.5
+1184.62561 669.2
+1198.03967 3508.7
+1358.05823 654.6
+1380.30530 649.8
+1866.95972 711.1
+1878.44421 1221.6
+1878.77991 735.3
+1879.11792 1136.5
+1879.44775 19802.1
+1879.81250 1932.8
+1880.27991 1280.5
+1881.21606 768.2
+1907.04346 6224.2
+1907.73511 755.0
+1929.19934 675.7
+1930.66345 1016.5
+1958.53430 666.3
+S	546	546	1879.93324127
+Z	2	3758.019
+Z	3	5636.524
+525.22955 648.2
+532.51721 2018.5
+549.16400 738.7
+577.87836 605.2
+586.11615 642.7
+612.67413 603.1
+617.63147 603.7
+630.42859 814.7
+640.35956 625.4
+676.61053 1161.2
+730.39703 583.4
+760.21863 694.2
+763.70258 735.5
+863.18420 629.1
+921.98950 603.9
+950.89752 578.7
+1198.15637 3442.0
+1459.26746 605.2
+1625.79321 713.9
+1764.24683 609.3
+1877.81494 1071.9
+1878.87830 1602.2
+1879.45532 20173.4
+1879.73755 1192.3
+1879.97095 986.8
+1880.36340 706.3
+1881.05481 737.7
+1906.66687 897.4
+1907.05786 7487.1
+1907.39429 617.6
+1930.66357 848.8
+1969.30115 628.1
+S	547	547	1907.4918246
+Z	3	5719.2
+Z	2	3813.136
+532.56372 1792.8
+554.70490 707.6
+676.62732 1100.3
+795.67407 1102.4
+928.36572 836.3
+1014.48187 655.8
+1057.23413 765.9
+1156.59521 717.5
+1198.26440 3377.6
+1388.23486 614.4
+1453.30554 587.5
+1553.48511 598.1
+1875.77612 632.6
+1879.49829 19577.7
+1907.08679 6783.5
+1930.45898 908.5
+1960.36011 690.2
+S	549	549	1879.91099127
+Z	2	3757.974
+Z	3	5636.458
+532.52441 1791.7
+542.52228 786.7
+558.82135 634.3
+573.64203 626.1
+630.38922 724.7
+676.61102 791.2
+694.29889 673.6
+713.59625 645.4
+775.17694 615.1
+795.69336 1085.0
+914.19720 591.6
+977.12207 581.4
+1057.20154 657.1
+1088.01172 693.7
+1198.17358 3530.9
+1316.92871 731.7
+1333.36816 719.0
+1525.17102 516.9
+1525.29407 539.2
+1878.42444 899.6
+1879.44238 17572.8
+1880.52380 1094.0
+1907.03711 7558.8
+1913.87939 627.5
+1930.54114 879.3
+S	550	550	1907.5448246
+Z	2	3813.242
+Z	3	5719.359
+532.53461 1775.3
+544.10193 598.3
+549.11414 716.2
+573.16089 545.4
+667.94977 617.2
+676.61053 1060.9
+727.50623 622.8
+731.08289 717.1
+747.89551 632.8
+782.53583 590.2
+795.68054 809.2
+857.96796 540.5
+860.80713 687.3
+923.48041 673.8
+972.27167 634.5
+1052.34070 637.0
+1057.21350 1034.8
+1184.71790 760.5
+1198.19702 3228.8
+1280.98267 577.8
+1315.64014 543.0
+1316.25842 667.1
+1493.99707 736.7
+1876.87415 691.3
+1877.14746 640.4
+1877.93115 709.2
+1878.86548 1574.8
+1879.45435 19756.6
+1880.03760 1208.9
+1884.29456 668.2
+1907.02502 7442.6
+1918.76001 757.9
+1930.44226 927.9
+1988.78870 586.4
+S	552	552	1880.01140793
+Z	2	3758.175
+Z	3	5636.759
+532.50867 2256.2
+630.46179 920.4
+676.62476 853.0
+767.33398 724.7
+798.62506 628.0
+811.34088 638.0
+849.39227 623.7
+862.23547 660.8
+870.50269 652.9
+955.22247 527.5
+1198.13318 2807.2
+1525.51782 810.8
+1585.60999 622.2
+1817.59595 627.0
+1840.52283 540.3
+1879.04150 3274.7
+1879.50366 19944.6
+1879.96790 2715.0
+1880.47070 776.0
+1880.73816 1194.4
+1906.13013 661.6
+1906.98767 6854.0
+S	553	553	1907.46540793
+Z	2	3813.083
+Z	3	5719.121
+518.77551 783.5
+532.54883 2249.6
+557.05688 716.7
+567.50671 622.5
+630.42468 751.8
+648.87256 680.4
+662.19336 624.5
+676.63092 830.0
+795.68146 922.1
+909.80493 701.8
+1019.75671 766.5
+1036.97900 584.1
+1187.91895 770.2
+1198.22449 3645.1
+1341.69055 588.1
+1502.10059 708.3
+1502.27917 681.0
+1608.02515 725.3
+1715.61548 804.4
+1777.55347 797.7
+1825.82959 716.2
+1844.09094 629.7
+1876.70593 672.7
+1878.81616 958.5
+1879.50952 18680.5
+1880.32813 594.2
+1880.64636 730.5
+1907.05249 7208.1
+1918.81348 706.0
+1930.61621 765.2
+S	555	555	1879.8778246
+Z	3	5636.358
+Z	2	3757.908
+519.13312 622.4
+522.06256 564.0
+532.52527 1964.2
+549.10309 770.3
+655.87073 625.1
+676.64301 1230.6
+729.79773 570.9
+782.54901 912.3
+830.83960 686.3
+872.28711 578.3
+958.78326 653.5
+1019.76923 609.0
+1198.17029 2694.0
+1235.50293 734.2
+1243.25049 572.5
+1368.91614 713.1
+1525.28601 756.0
+1878.74792 1080.6
+1879.17090 1652.1
+1879.53113 19381.9
+1879.83936 1249.7
+1880.12207 1281.0
+1880.47986 923.8
+1907.02869 7794.8
+1930.46289 923.3
+1974.35510 685.4
+S	556	556	1907.49399127
+Z	3	5719.207
+Z	2	3813.14
+532.48639 1673.4
+676.60730 543.3
+676.64355 646.5
+789.90106 668.3
+795.67719 833.9
+817.11407 566.3
+908.01031 556.5
+919.46735 650.7
+941.86279 674.7
+1019.72797 810.6
+1023.01611 729.4
+1057.17651 862.2
+1198.08472 2949.2
+1489.23669 667.7
+1525.34363 963.5
+1531.17578 688.9
+1552.95276 629.2
+1602.56482 655.9
+1635.82056 853.6
+1640.53711 606.6
+1777.32092 758.1
+1878.31360 765.2
+1879.12048 2528.0
+1879.53699 17166.6
+1879.89075 3030.3
+1880.38953 978.0
+1880.77258 1332.2
+1882.66223 678.4
+1907.03210 7334.2
+S	558	558	1879.9108246
+Z	3	5636.457
+Z	2	3757.974
+517.95935 582.3
+532.46332 645.3
+532.49908 1673.6
+549.13171 816.3
+661.73022 543.2
+676.64685 1067.3
+731.10248 773.2
+734.36169 667.4
+772.22607 706.5
+780.99060 736.7
+782.47076 657.2
+819.83374 644.3
+858.02325 814.9
+870.96637 705.2
+1079.28943 650.1
+1188.13367 742.3
+1198.11670 3065.8
+1231.76233 631.8
+1261.34766 764.7
+1328.12134 677.3
+1411.86365 602.8
+1697.76489 715.6
+1702.53149 586.5
+1777.34070 1093.5
+1876.52551 785.0
+1878.31885 978.6
+1878.65820 693.4
+1879.23267 3192.1
+1879.53625 19512.2
+1879.84595 2604.6
+1880.32959 1256.6
+1880.70447 1025.7
+1883.97620 659.0
+1907.03320 7137.8
+1918.70569 770.4
+1987.64246 639.5
+1991.97656 653.3
+S	559	559	1907.46540793
+Z	2	3813.083
+Z	3	5719.121
+532.51178 1305.6
+574.46210 611.2
+585.89105 685.7
+595.14215 762.8
+676.63855 1087.1
+761.85718 753.7
+893.03021 565.5
+926.56940 657.2
+979.62769 694.3
+983.35718 569.4
+1009.00049 717.9
+1057.24426 1159.6
+1198.14368 3152.7
+1249.73071 619.9
+1777.37329 726.9
+1813.67542 643.4
+1878.89136 1165.2
+1879.24292 3262.6
+1879.53406 19398.2
+1879.83716 3263.4
+1880.20325 1845.8
+1880.98413 759.9
+1882.08862 808.6
+1907.02954 7357.6
+1930.66650 1029.7
+1957.37256 738.8
+S	561	561	1879.91640793
+Z	3	5636.474
+Z	2	3757.985
+532.39508 604.1
+532.49268 1705.6
+598.42242 663.1
+676.64667 982.9
+697.16052 653.6
+762.47717 674.6
+795.68793 911.3
+831.46466 710.2
+879.38037 845.1
+896.82581 658.8
+1028.16614 636.7
+1110.92725 682.7
+1154.16846 746.8
+1198.10547 3250.0
+1219.17712 594.4
+1467.51782 599.3
+1760.70825 611.7
+1777.23621 880.7
+1795.71912 663.7
+1868.87268 633.6
+1878.67700 930.1
+1878.91333 1437.7
+1879.02637 1191.3
+1879.57300 18515.0
+1880.60315 1430.6
+1907.08728 6675.1
+1930.66260 949.0
+S	562	562	1907.48640793
+Z	3	5719.184
+Z	2	3813.125
+532.53674 1572.7
+541.62317 698.8
+557.47675 571.6
+618.76923 601.6
+676.62714 1133.4
+782.26733 763.4
+795.69641 1020.6
+835.32019 653.5
+871.74176 722.6
+880.85010 753.1
+1057.21045 740.9
+1188.36658 1013.8
+1198.19910 3093.3
+1450.56030 689.8
+1525.43201 768.2
+1597.48218 658.4
+1770.37781 696.5
+1777.24817 871.3
+1807.53064 843.0
+1846.21875 587.0
+1878.75305 714.5
+1879.48303 20081.7
+1880.99536 624.0
+1907.03528 7233.9
+1907.59705 694.2
+1909.65723 749.6
+1930.62292 1150.3
+S	564	564	1879.8828246
+Z	2	3757.918
+Z	3	5636.373
+532.53229 1743.6
+597.68042 713.1
+655.86932 637.0
+676.60156 1212.0
+684.28033 616.5
+768.24915 560.4
+781.88879 638.7
+795.67041 801.4
+806.88812 640.7
+808.43158 555.1
+827.48450 535.1
+884.47095 649.3
+1051.72339 843.3
+1198.19751 2579.1
+1626.27881 617.8
+1639.11829 651.3
+1770.59241 841.0
+1838.89648 656.0
+1878.34436 743.7
+1879.42883 19986.5
+1879.70923 1864.7
+1906.96228 6871.5
+1915.78857 682.0
+1918.72791 763.7
+1930.69604 864.6
+S	565	565	1907.22640793
+Z	3	5718.404
+Z	2	3812.605
+532.54077 1586.5
+624.98358 670.6
+630.41803 831.6
+676.62274 956.8
+693.71295 659.3
+709.43365 650.8
+713.83472 647.0
+740.97827 631.4
+795.68878 1011.1
+1014.75159 690.0
+1198.20898 3310.8
+1275.93909 581.5
+1308.93604 657.2
+1309.64514 602.2
+1329.08313 610.7
+1364.79871 806.0
+1480.98218 644.4
+1525.43604 796.5
+1528.60803 665.0
+1585.40796 585.7
+1875.17065 712.5
+1878.74097 1225.6
+1879.49634 19276.0
+1880.28687 1168.8
+1881.87610 736.3
+1906.88550 7413.4
+1930.62769 1251.5
+S	567	567	1879.90624127
+Z	2	3757.965
+Z	3	5636.443
+532.50928 2280.6
+572.69806 575.6
+653.22150 699.2
+660.52472 665.8
+675.38354 718.4
+676.62537 1323.7
+856.62738 548.4
+966.47595 634.4
+1187.63501 870.8
+1198.13965 3673.4
+1456.48376 731.1
+1629.70825 624.5
+1776.98511 835.7
+1872.77441 569.8
+1878.64832 819.6
+1879.49548 19543.8
+1879.82654 2866.3
+1889.78381 893.2
+1907.08728 7348.3
+1930.62573 874.3
+S	568	568	1907.27340793
+Z	3	5718.545
+Z	2	3812.699
+532.48151 2192.5
+536.17108 600.4
+549.14459 733.5
+578.67010 604.8
+676.62537 842.2
+795.68146 1112.2
+958.69275 653.7
+1013.37823 712.2
+1088.67188 655.2
+1184.17712 682.2
+1187.69214 833.6
+1198.07751 3427.1
+1221.57690 691.3
+1241.65112 736.9
+1333.38416 572.8
+1707.26282 607.3
+1875.02637 584.1
+1877.15833 632.9
+1878.06274 712.0
+1878.97278 1800.0
+1879.49805 19574.5
+1880.01965 2065.7
+1881.98657 708.9
+1906.73132 667.7
+1907.04419 7544.5
+1930.57971 1193.0
+S	570	570	1879.89540793
+Z	2	3757.943
+Z	3	5636.411
+514.77472 605.7
+532.49329 1718.1
+549.14301 1021.8
+641.90936 582.3
+762.04034 580.7
+795.69397 960.5
+835.57532 699.1
+1032.22888 703.2
+1057.27295 733.5
+1155.11023 585.6
+1187.91772 709.2
+1198.09863 3321.5
+1208.10339 685.7
+1211.98206 706.4
+1489.62830 918.8
+1525.35632 670.7
+1877.18201 787.9
+1878.92944 701.7
+1879.15149 2304.8
+1879.56909 19042.7
+1879.98364 2270.0
+1907.06116 7915.0
+1930.56592 853.7
+1977.71179 546.6
+S	571	571	1907.4608246
+Z	2	3813.074
+Z	3	5719.107
+532.50397 1593.7
+549.17078 672.8
+626.17969 674.3
+630.41992 769.2
+676.63477 915.7
+772.44885 584.6
+836.97479 797.2
+841.87634 607.1
+896.42401 568.1
+1033.68640 575.0
+1112.60571 622.0
+1188.02673 1081.2
+1198.13306 2953.3
+1231.69995 616.6
+1406.23523 708.8
+1489.69739 698.1
+1525.48303 766.0
+1876.04456 981.1
+1876.40588 629.6
+1878.77515 1305.3
+1879.21753 1828.7
+1879.51636 19736.2
+1879.88586 1665.4
+1880.22534 1493.1
+1888.49084 661.8
+1907.05383 7351.7
+1930.65674 1095.6
+1974.46326 609.2
+S	572	572	783.7419806
+Z	5	3913.67078
+206.88361 600.2
+215.47736 559.9
+251.57449 630.7
+280.17599 719.1
+293.38312 582.4
+308.89658 697.6
+350.59113 649.0
+363.46777 564.2
+405.69525 581.3
+432.53125 673.7
+433.22067 589.0
+446.65128 548.1
+482.64899 648.7
+496.55902 606.8
+532.51215 2290.1
+549.14752 535.3
+549.16681 526.6
+605.13696 571.2
+630.39191 813.9
+643.20074 577.3
+643.25958 633.9
+676.63068 879.4
+683.26538 625.2
+754.49371 610.9
+762.74945 602.5
+795.68213 897.0
+816.96393 710.6
+858.03229 772.4
+920.30627 687.3
+1132.86560 640.3
+1140.94287 679.6
+1198.14941 3274.4
+1226.87268 629.9
+1230.72803 681.5
+1367.14417 676.9
+1489.64246 624.9
+1556.56287 574.1
+1648.20764 633.5
+1776.93909 747.8
+1877.48804 959.2
+1878.45911 797.4
+1878.78503 1298.7
+1879.20984 2230.6
+1879.50317 19520.8
+1879.87842 1792.1
+1880.20410 1879.6
+1907.07959 7351.4
+1907.50745 692.3
+1930.56555 930.0
+S	574	574	591.2819696
+Z	4	2361.09658
+153.54253 49482.2
+160.94127 45461.3
+168.77217 48925.4
+181.74950 49692.7
+182.80640 48331.1
+183.39534 45602.4
+184.35916 54472.0
+185.93690 43642.6
+186.29001 48808.5
+188.10094 48710.4
+188.21223 57293.1
+188.27434 171048.0
+188.28291 178267.5
+188.29443 174582.7
+188.32974 68493.4
+188.33467 65607.6
+192.35918 48307.8
+198.92270 87045.6
+199.21307 70942.2
+199.22710 60855.6
+199.24570 47247.3
+199.24930 48110.3
+199.27348 107418.8
+199.29568 116827.5
+199.29985 118958.8
+199.30984 160478.7
+199.34120 74493.3
+199.40872 65153.4
+199.41693 48663.4
+206.65582 46361.5
+236.95999 46691.8
+241.06339 46951.9
+246.81847 53048.0
+266.37662 48816.1
+269.23053 51178.1
+271.68970 47981.2
+291.29300 49845.9
+328.72437 43672.3
+371.21439 49097.0
+403.50943 65150.6
+427.83032 48574.2
+493.39331 57792.1
+532.50134 117108.8
+532.60028 73938.5
+549.19733 57239.6
+589.60663 55582.0
+614.79645 55574.6
+629.65210 45932.3
+630.44635 54755.7
+654.31824 52291.8
+690.74518 60134.6
+712.78253 46069.7
+773.53699 55424.4
+782.31079 66384.4
+795.69116 80439.1
+962.58722 47131.5
+1057.19470 69042.5
+1108.01233 62714.9
+1186.58325 49438.4
+1198.11462 208774.5
+1198.27820 79195.5
+1285.83569 174213.4
+1382.70447 51515.8
+1525.57056 53948.5
+1878.61414 74036.5
+1879.44873 1649712.8
+1879.70886 238897.3
+1881.18091 54799.8
+1906.99817 582334.6
+1930.73926 63400.0
+1967.38818 53320.5
+S	575	575	609.2802596
+Z	4	2433.08974
+161.59755 584.9
+162.02425 562.4
+165.79533 997.2
+168.74605 557.1
+171.63689 762.8
+187.26802 697.4
+188.23621 512.4
+188.25121 1202.6
+188.26508 1732.9
+188.28297 2200.0
+188.28833 2207.1
+188.30702 1608.9
+188.33206 548.3
+190.59428 675.2
+196.28873 567.3
+198.92517 915.3
+199.22292 1126.0
+199.29446 1928.7
+199.29909 2072.9
+199.32175 1249.6
+199.33235 1052.8
+199.39020 697.6
+199.41776 848.2
+211.46524 521.3
+220.92142 615.6
+287.24231 645.1
+350.27917 668.3
+360.10287 653.4
+380.18179 567.0
+394.84399 621.0
+400.61197 607.9
+482.66360 657.5
+507.50235 546.9
+532.49603 2324.0
+549.16272 933.5
+557.19745 550.8
+620.89844 665.1
+630.41724 734.8
+635.20270 674.5
+676.08850 572.9
+676.60907 645.9
+727.00342 729.2
+771.68750 603.1
+795.69696 962.4
+845.72461 654.6
+1057.20776 837.5
+1066.87744 619.5
+1082.27991 591.2
+1119.39160 583.2
+1134.09656 559.7
+1176.88379 630.2
+1198.10059 3296.1
+1280.48779 637.7
+1355.62036 836.9
+1525.43909 847.7
+1639.62769 630.4
+1876.07092 775.8
+1877.93848 850.4
+1879.43579 17623.8
+1880.39807 631.1
+1891.19470 573.6
+1907.04724 7585.6
+1918.72961 874.3
+1930.62341 967.5
+1947.02502 647.6
+S	576	576	592.0330746
+Z	4	2364.101
+165.79425 856.3
+169.32925 1045.1
+173.78044 684.0
+182.74747 521.9
+186.58276 606.1
+186.67265 672.8
+188.24672 723.1
+188.26408 918.7
+188.27771 1008.2
+188.28528 1240.0
+188.29567 1109.9
+188.30890 933.2
+188.35284 615.4
+194.09268 756.7
+195.07661 2197.9
+198.40526 583.3
+198.92451 1028.3
+199.19952 600.6
+199.20979 888.5
+199.27466 1165.5
+199.30704 2501.5
+199.31744 937.7
+199.32941 984.9
+199.33524 748.2
+199.39601 657.9
+199.40541 1036.9
+199.68877 575.9
+212.10320 6134.7
+213.10660 764.4
+222.08763 6791.8
+223.07164 6410.4
+228.98410 546.6
+229.12996 1676.4
+231.76369 558.4
+240.09810 24942.2
+241.10210 2729.6
+246.15634 58895.5
+247.16010 6602.8
+252.17711 564.6
+258.10873 943.7
+266.11420 1291.4
+271.54517 519.3
+283.14059 2040.9
+283.36331 564.2
+294.10895 2800.4
+301.11435 7536.3
+311.13513 34081.8
+312.13940 4424.4
+313.14041 902.8
+323.13525 3414.9
+329.48740 561.6
+334.66098 855.5
+340.16159 1233.6
+342.27090 878.5
+343.66489 2383.7
+344.16476 1048.3
+351.12946 2111.6
+361.18399 987.7
+368.15677 8857.5
+368.22931 1929.4
+369.16022 875.5
+370.19098 592.8
+372.15112 1431.9
+372.17532 1555.0
+372.67929 727.5
+380.15677 3453.8
+381.16373 863.3
+395.13577 706.9
+397.18402 1103.8
+408.15170 6771.0
+409.15585 1737.2
+412.18658 853.1
+412.70288 825.5
+421.70981 11155.1
+422.21201 4629.9
+422.71399 1045.3
+425.17792 8667.5
+426.17999 1202.4
+462.22983 1518.5
+464.74509 698.4
+473.20187 556.2
+479.22263 4686.0
+479.72449 1171.7
+480.22421 695.1
+482.66342 697.9
+489.73584 4378.3
+490.23456 1830.9
+490.74142 807.4
+498.19275 1674.4
+499.24210 721.7
+500.27808 935.6
+501.58191 959.9
+501.91745 952.9
+504.48654 1712.5
+504.74036 1734.5
+504.98492 2382.4
+508.98862 5355.7
+509.23914 3647.3
+509.48981 4233.1
+509.73831 1689.8
+509.99384 874.6
+514.91461 2652.3
+515.25024 2643.4
+515.58209 957.7
+517.74628 856.5
+520.91742 2631.1
+521.25391 2864.6
+521.58972 823.4
+522.19702 904.0
+522.24451 2424.7
+522.49542 4892.2
+522.74536 3833.5
+522.99573 2389.0
+523.17841 5295.4
+523.49615 828.8
+524.18182 1307.3
+526.74768 19391.6
+526.99811 25273.9
+527.24902 14649.5
+527.49951 7395.9
+527.75159 2356.2
+532.52045 2104.1
+534.73767 2889.8
+535.23792 2227.5
+536.74847 1070.1
+537.24609 546.4
+538.92719 882.8
+539.25500 1319.5
+540.20526 10760.5
+541.20801 2653.7
+542.21100 742.1
+543.74414 14888.8
+544.24530 8581.4
+544.59760 5973.1
+544.74847 2903.3
+544.93085 5931.9
+545.27032 1788.8
+548.93018 1603.5
+549.26233 7408.3
+550.26703 1760.5
+554.51166 1353.6
+554.60034 14922.7
+554.76007 1159.0
+554.93457 13879.9
+555.00690 1201.0
+555.26929 7079.3
+555.60455 2289.4
+555.76410 1243.4
+557.28253 518.0
+559.75610 1359.2
+560.00372 4000.0
+560.25311 6037.0
+560.50269 5208.0
+560.75244 1709.3
+561.00488 747.9
+564.25842 9469.3
+564.50763 14034.0
+564.75818 12161.8
+565.00836 4385.1
+565.25983 1679.2
+568.76062 2048.3
+569.00806 3951.6
+569.25909 2296.4
+569.50867 1989.5
+569.75745 1451.9
+572.27405 2057.8
+572.60773 2314.8
+597.26135 1794.2
+601.95856 10307.7
+602.29279 7071.3
+602.62732 2683.2
+602.96179 1755.9
+610.62024 1234.1
+610.95215 1290.9
+611.24341 4543.9
+612.25031 1045.0
+616.62195 14179.2
+616.95636 14766.3
+617.28601 8514.9
+617.62573 3778.0
+617.77838 4485.2
+618.28186 1303.1
+618.78448 820.5
+620.27814 2555.1
+620.61072 2160.6
+620.78467 1384.8
+620.94922 1176.7
+621.28290 1042.4
+629.29614 8449.0
+629.62628 2728.4
+629.79724 6882.4
+629.95880 2772.5
+630.29767 3898.3
+630.40576 790.7
+630.95569 784.1
+634.29724 3048.6
+634.63116 4852.1
+634.96307 4224.4
+635.29620 1563.3
+635.62878 22140.2
+635.96362 29528.5
+636.29749 14389.6
+636.63232 6228.2
+636.96783 2203.6
+640.30096 24918.9
+640.63513 25485.6
+640.96979 17302.8
+641.30487 6840.3
+641.63806 2127.1
+643.28925 764.1
+647.63647 1014.4
+648.63196 6081.9
+648.96533 7342.2
+649.29797 6939.0
+649.63379 3428.3
+649.96851 1291.7
+650.29840 1184.3
+653.30518 3128.1
+653.63770 6895.4
+653.96924 4058.5
+654.30518 4024.8
+654.63654 66975.2
+654.97021 82010.4
+655.30475 51201.7
+655.63873 22592.4
+655.97308 6405.3
+656.30865 1242.3
+656.63599 861.8
+658.09460 723.4
+658.29999 963.1
+659.30792 47246.0
+659.64215 53047.4
+659.97620 33731.3
+660.31042 13094.5
+660.64679 2982.6
+660.98114 1020.1
+664.60632 631.2
+664.95490 1153.7
+665.78455 1231.9
+666.63959 905.1
+666.97125 1956.9
+667.30444 777.5
+667.64490 804.6
+670.29358 1447.6
+670.62646 2730.9
+670.95837 2177.7
+672.31213 12053.4
+672.64429 25098.2
+672.97711 19613.9
+673.31134 10643.9
+673.64386 3738.2
+673.97986 1066.3
+674.30017 15215.9
+674.80121 12319.9
+675.30133 3592.9
+675.80347 1625.3
+676.44983 1367.3
+676.62927 930.0
+676.78503 1296.4
+676.97394 987.1
+677.12482 904.1
+677.29248 1242.0
+677.39471 1187.4
+677.72729 1293.9
+678.25397 1675.0
+678.31555 194055.9
+678.39246 940.9
+678.57532 1154.4
+678.64929 232749.2
+678.98322 147867.0
+679.23792 1383.7
+679.31720 68950.1
+679.57184 1464.3
+679.65143 24475.8
+679.88837 1009.2
+679.98578 5721.6
+680.18689 1049.2
+680.32263 1353.1
+680.52716 1191.6
+682.29858 775.3
+682.63434 903.4
+686.32068 2010.4
+687.31921 959.6
+687.63824 700.2
+687.96478 832.1
+688.29510 1303.2
+688.62988 2437.0
+688.96143 837.3
+690.65283 1139.9
+691.00092 622.3
+693.81732 1094.5
+693.97083 3289.2
+694.30756 5387.8
+694.63831 5969.1
+694.81873 754.2
+694.86255 701.7
+694.97247 2199.9
+695.99023 6928.9
+696.32343 12712.4
+696.65698 11532.1
+696.99054 5850.8
+697.32306 1634.0
+697.66418 926.0
+699.97540 1589.9
+700.30811 2953.3
+700.63861 2010.1
+700.97314 971.3
+701.33575 772.8
+701.99402 138165.8
+702.32813 158005.8
+702.66199 107374.7
+702.99591 50991.0
+703.33026 17999.7
+703.66473 4741.7
+703.99731 1434.2
+704.30463 1019.0
+705.97742 6716.5
+706.31256 11255.5
+706.64783 4621.5
+706.98187 3222.0
+707.31964 2048.9
+707.82196 1006.6
+708.82178 3136.4
+709.32324 4225.9
+709.82361 1103.0
+712.28857 4132.6
+713.29376 1306.8
+715.66260 920.3
+716.35468 2409.4
+716.85120 1973.5
+717.35992 1156.8
+729.81000 2018.3
+730.31995 1679.0
+735.33472 2628.2
+735.83124 2352.0
+736.33478 910.1
+736.83698 738.7
+739.33771 1575.1
+742.84125 1598.9
+743.34314 7252.1
+744.34119 19506.5
+744.84296 16104.0
+745.34497 9706.1
+745.84558 3199.2
+748.32916 798.7
+748.67084 1253.0
+751.87030 1105.1
+752.37018 1209.4
+760.83032 803.9
+761.33124 653.1
+763.62152 567.2
+776.37268 660.4
+779.85968 3388.1
+780.36230 3515.0
+780.87000 3630.7
+781.37244 2518.1
+781.87854 1210.4
+793.34082 692.3
+793.85791 798.0
+795.70142 759.9
+801.85602 5244.8
+802.35614 4569.8
+802.85858 2938.7
+821.85895 1222.1
+822.36896 1040.9
+823.32538 1489.0
+824.21045 716.2
+824.32037 818.8
+828.84833 690.4
+829.35431 860.4
+830.36603 9479.0
+830.86804 9106.4
+831.35394 2980.7
+831.90814 1010.1
+832.41107 839.9
+837.37225 5110.4
+837.87555 5518.4
+838.37750 2770.1
+838.87872 1183.9
+841.33484 2746.5
+842.33649 1350.4
+842.40564 905.5
+849.87402 1574.9
+850.36694 2863.6
+850.87085 2134.5
+857.37384 917.0
+858.87610 24446.2
+859.37744 25169.3
+859.87885 14229.6
+860.37976 6028.5
+860.87994 1564.9
+865.88403 7666.3
+866.38477 9601.7
+866.87646 4002.3
+866.94269 924.2
+867.37134 689.4
+867.42566 1790.6
+885.38379 2579.8
+885.89075 5388.0
+886.38715 3150.6
+886.88141 1092.7
+891.41687 1168.1
+894.39490 42769.9
+894.89630 48417.0
+895.39734 30217.3
+895.89923 11405.3
+896.40265 4431.2
+896.88953 1062.1
+909.09515 617.1
+920.90381 722.3
+921.40784 2130.6
+922.40686 826.5
+929.91333 22267.3
+930.41473 24166.4
+930.91718 14143.4
+931.41833 4571.6
+931.91858 2203.7
+957.43750 1054.3
+958.44141 836.1
+965.91382 1197.2
+966.41571 743.1
+988.40088 1194.4
+1102.44397 1533.8
+1112.51941 664.1
+1118.86475 711.9
+1121.48499 1314.7
+1140.51331 644.1
+1191.52332 1497.6
+1192.53625 736.7
+1198.16614 3178.8
+1217.03210 574.2
+1289.26221 603.9
+1347.61853 676.0
+1432.77759 775.4
+1435.99524 676.9
+1525.39746 992.3
+1643.60608 732.6
+1877.83142 876.8
+1878.56689 1020.8
+1879.23315 4443.8
+1879.48804 18976.8
+1880.48047 1133.9
+1881.21094 966.4
+1885.51013 610.9
+1907.03906 7064.9
+S	578	578	1879.92124127
+Z	2	3757.995
+Z	3	5636.488
+532.53534 1698.2
+549.19946 1152.0
+734.45734 590.4
+735.38336 589.9
+862.93365 593.1
+872.32410 629.3
+938.78967 625.1
+1035.57715 700.9
+1198.18921 3108.7
+1274.17859 630.6
+1525.55859 896.5
+1738.97009 624.5
+1857.00891 675.1
+1877.92493 1053.0
+1878.94055 940.3
+1879.51794 17939.9
+1880.16650 975.3
+1881.23364 1001.5
+1881.70068 906.4
+1907.01514 7374.5
+1910.31116 742.9
+1930.77258 853.0
+S	579	579	1907.46840793
+Z	3	5719.13
+Z	2	3813.089
+518.40918 678.0
+532.51953 2209.9
+555.31122 682.0
+581.92584 696.9
+590.73315 580.2
+618.56006 589.8
+676.61945 887.3
+731.17987 715.2
+743.27820 622.2
+759.44330 706.6
+775.74628 626.3
+782.83356 630.8
+795.67096 1126.6
+845.42462 676.8
+910.84393 588.6
+957.26416 706.4
+1057.20642 930.9
+1082.28455 626.6
+1128.83728 700.2
+1188.36462 740.5
+1198.16479 3458.8
+1338.87268 613.0
+1380.52795 579.1
+1413.90527 708.0
+1496.47803 566.6
+1525.50903 879.9
+1710.41455 664.7
+1715.92554 629.9
+1777.83264 804.5
+1879.08655 1758.0
+1879.47461 19848.7
+1879.88306 1485.2
+1880.50183 708.4
+1907.06055 7379.0
+1930.72046 1069.4
+S	581	581	417.7353996
+Z	4	1666.9103
+105.23120 548.1
+105.77487 599.3
+109.11953 737.3
+113.46676 689.3
+120.66952 640.0
+121.24937 626.6
+121.80779 2433.9
+121.81967 669.7
+124.97676 529.5
+128.08989 514.8
+133.33690 662.3
+156.45496 601.7
+156.98096 520.4
+165.62596 573.5
+165.79376 798.9
+175.11891 1768.1
+181.38809 579.6
+198.92419 700.8
+199.20981 876.4
+199.29716 1485.2
+199.30879 2706.1
+199.35144 680.1
+199.40631 1474.2
+208.13216 671.4
+221.10355 1484.0
+233.16501 81456.6
+234.16833 12509.4
+235.11998 968.2
+235.49602 532.8
+236.45155 580.0
+249.09833 3674.0
+261.15994 13465.7
+262.16226 1287.0
+267.10898 1957.2
+274.60965 618.4
+288.20309 4885.5
+289.33325 540.1
+314.65860 1496.7
+315.30069 521.8
+322.85052 863.9
+328.65714 1177.1
+334.14941 790.3
+337.86987 63808.1
+338.20407 33059.4
+338.53821 9227.9
+338.87177 2290.5
+350.14633 2266.4
+351.14941 925.2
+360.12964 1302.2
+377.55249 3145.8
+377.88669 2901.4
+378.14087 19254.0
+378.21799 699.7
+379.14471 3105.9
+381.36502 746.4
+383.55609 19740.6
+383.89029 13530.7
+384.22473 5645.1
+384.56165 1337.4
+387.27167 6663.7
+388.27551 1416.8
+390.20258 2415.1
+396.15146 14339.0
+397.15448 2353.4
+399.47131 662.4
+420.89847 1022.6
+421.55078 846.7
+423.55637 672.4
+426.57034 7759.6
+426.90417 3870.9
+427.23846 1807.2
+427.56125 1123.5
+429.89417 755.5
+438.56070 588.5
+439.57440 1536.9
+439.90909 1597.3
+442.25363 39319.3
+442.75485 18254.8
+443.25677 4825.4
+443.75879 1012.5
+448.56119 2045.2
+448.89755 1988.5
+449.23163 848.0
+454.51138 821.0
+454.56555 1432.0
+454.89981 1193.4
+455.23615 1104.1
+457.57843 3131.4
+457.77478 6495.3
+457.90643 4093.3
+458.24039 1809.5
+458.27567 2843.3
+462.52081 1377.0
+463.05789 1087.8
+463.25940 1092.6
+463.58102 250288.4
+463.63126 735.8
+463.64163 717.9
+463.91498 177253.5
+464.10007 1229.2
+464.24890 81959.7
+464.44516 1175.8
+464.58255 24934.9
+464.79102 826.5
+464.91602 7978.5
+464.97983 660.9
+465.24841 2359.8
+468.84161 765.6
+469.25906 879.5
+469.58408 166551.7
+469.62552 576.3
+469.91824 118388.0
+470.11157 819.7
+470.25235 51453.8
+470.45078 811.2
+470.58633 15278.0
+470.78717 1044.9
+470.92133 4431.6
+471.25143 683.1
+476.69937 791.2
+479.95993 585.2
+481.24152 855.2
+487.04691 637.5
+492.25333 845.1
+495.27231 2561.1
+495.60641 2312.2
+498.26724 802.3
+498.59918 882.6
+501.27811 926.7
+501.77753 4023.3
+502.27875 2791.4
+505.05954 612.6
+506.30038 68664.0
+506.60968 571.8
+506.80200 35324.6
+506.95163 716.9
+507.27893 130113.8
+507.61285 103117.6
+507.80377 2897.4
+507.94681 47100.0
+508.21707 557.7
+508.23502 603.0
+508.28137 16527.2
+508.50119 634.2
+508.61612 3399.4
+509.23441 4492.6
+510.23862 1002.1
+510.78229 8871.6
+511.28360 5141.9
+511.78790 1702.7
+512.24438 679.9
+512.60309 932.3
+512.93005 689.8
+513.60272 20307.7
+513.93719 15186.4
+514.27185 5111.6
+514.60632 3402.2
+516.31256 3047.2
+519.24213 1068.4
+532.50433 2073.6
+537.23297 650.0
+543.35889 1099.3
+549.16290 849.2
+557.68610 574.6
+566.29999 4114.6
+566.80182 2718.2
+567.30292 1022.9
+574.82922 4321.3
+575.30493 7647.2
+575.80646 4773.9
+576.30573 1350.0
+576.78906 1004.4
+587.55670 812.6
+608.31653 1039.2
+617.32080 735.9
+621.81421 2422.6
+622.31488 1689.6
+622.81427 941.4
+628.30737 4336.1
+629.14154 881.3
+629.30939 2134.4
+630.41846 671.5
+630.81976 111296.2
+631.32086 72578.2
+631.82208 27271.8
+632.32257 7771.0
+632.50238 678.2
+632.82281 1132.8
+638.29132 953.7
+639.35083 3331.5
+639.82434 68489.5
+640.32587 49792.2
+640.82727 19043.3
+641.32715 4845.4
+641.81592 712.7
+656.30286 15110.6
+657.30585 5877.7
+658.30621 1020.4
+673.35187 631.6
+676.61230 1280.6
+696.36670 44185.8
+696.86810 32743.4
+697.36957 14274.2
+697.87183 4255.7
+728.39215 680.9
+729.42627 2384.7
+730.42657 722.4
+733.18805 828.7
+736.99689 527.2
+745.32452 774.0
+753.09875 570.2
+786.44427 6044.4
+787.44733 2660.8
+788.45508 777.3
+795.69000 837.5
+838.24792 655.0
+874.36298 888.8
+883.49921 31121.6
+884.50214 15235.9
+885.50360 3516.9
+1057.22778 693.6
+1079.28784 600.8
+1087.53137 554.5
+1158.40186 678.5
+1184.59106 665.4
+1198.13184 3473.6
+1379.56238 687.1
+1620.75671 601.7
+S	582	582	418.4860746
+Z	4	1669.913
+109.66149 658.2
+110.80418 527.4
+118.34516 499.3
+120.08035 6454.9
+120.67256 626.1
+121.80637 2349.3
+121.81343 522.6
+125.26691 704.7
+151.15300 604.2
+165.79164 711.5
+172.46526 646.0
+185.68964 681.6
+188.20779 735.2
+188.24597 974.5
+188.26474 1853.7
+188.28511 2333.0
+188.36446 519.1
+198.92085 1146.1
+199.22060 787.7
+199.24802 910.7
+199.26813 641.6
+199.28760 1492.0
+199.31433 1470.2
+199.32759 1215.6
+202.11147 629.1
+207.08080 575.3
+216.39180 584.1
+233.16472 61473.9
+233.58653 526.4
+234.16808 8556.1
+239.34808 586.8
+249.09818 1896.6
+261.15973 8918.6
+262.16278 1445.2
+267.10910 618.7
+271.51266 810.8
+274.22049 614.7
+288.20255 3607.1
+314.65744 875.8
+328.65579 1778.0
+332.09082 532.2
+337.53757 555.8
+337.86948 58213.6
+338.20377 30877.2
+338.30533 757.3
+338.53867 9011.2
+338.87228 1724.2
+377.55206 1693.3
+377.88559 1764.2
+378.14090 8672.8
+379.14474 1042.9
+381.38889 626.3
+383.55554 13320.7
+383.88995 9815.3
+384.22430 4892.1
+384.56015 731.8
+387.27087 3177.0
+388.27094 728.3
+390.20285 1885.7
+391.20346 802.8
+396.15091 8366.9
+397.15308 1354.6
+399.72537 790.2
+421.56946 629.1
+426.57059 3535.1
+426.90250 1821.8
+427.23993 832.3
+439.57373 1588.4
+439.90668 864.9
+442.25308 20797.3
+442.75467 8296.7
+443.25732 1740.9
+448.56122 1187.1
+448.89590 1411.7
+457.57565 1981.4
+457.77304 3816.7
+457.90912 1666.1
+458.23840 1252.1
+458.27554 1703.6
+458.57993 658.8
+462.52463 893.9
+462.86099 646.4
+463.05807 740.7
+463.25232 2111.5
+463.58057 200075.8
+463.91455 152885.7
+464.09937 925.5
+464.24844 62934.3
+464.58255 20333.7
+464.63974 1147.6
+464.91605 5603.8
+465.25027 1578.1
+468.51001 756.1
+468.88449 607.0
+469.25763 782.5
+469.58374 176032.5
+469.91772 130054.3
+470.25189 52794.6
+470.45026 929.6
+470.58612 16906.3
+470.66199 1045.4
+470.92090 4268.1
+471.00000 914.8
+471.25851 647.9
+471.33313 667.7
+495.26791 886.5
+495.60364 1007.7
+498.27139 863.4
+501.60574 670.9
+501.77567 1846.1
+502.27899 1046.3
+506.29990 39803.1
+506.80130 23229.2
+507.27850 101361.8
+507.61234 80897.9
+507.80164 1523.9
+507.94644 35729.0
+508.28125 12333.4
+508.61319 3553.3
+509.23373 1452.6
+510.24628 892.4
+510.78180 5082.9
+510.94348 1041.3
+511.28445 2142.3
+511.78824 1143.8
+512.93750 619.1
+513.60254 15481.1
+513.93665 14811.4
+514.27118 7731.7
+514.60406 1871.2
+516.31415 2005.0
+519.14545 649.4
+519.24170 780.8
+532.49506 1908.6
+549.19379 638.5
+566.29919 2796.4
+566.79907 1544.9
+574.82715 3039.8
+575.30865 3068.5
+575.80267 2392.7
+576.29761 885.0
+595.25873 696.8
+621.81421 981.8
+628.30762 3393.1
+629.30609 945.1
+630.81915 58470.6
+631.32037 37385.1
+631.82123 12913.1
+632.32166 3069.1
+639.34906 2427.0
+639.82397 52280.7
+640.32538 34596.7
+640.82642 13453.3
+641.32458 3071.7
+641.83252 691.8
+642.93945 560.2
+643.40900 704.1
+656.30231 11719.7
+657.30652 4632.6
+658.31030 1060.1
+676.61975 892.2
+696.36646 23982.8
+696.86749 16577.5
+697.36865 8264.6
+697.86884 1659.9
+729.42944 1229.6
+783.13300 550.6
+786.44348 2157.6
+795.68213 761.2
+816.38751 594.3
+874.37097 708.8
+883.49817 14734.9
+884.50073 5235.2
+885.50275 1797.3
+1019.74268 704.7
+1057.20325 727.8
+1072.75269 597.1
+1198.10876 3604.9
+1268.80908 601.9
+1403.31982 576.7
+1423.33435 673.7
+1479.78857 692.2
+1489.01025 597.0
+1525.52283 1092.1
+1584.02380 626.1
+1666.85669 664.1
+S	583	583	421.4838246
+Z	3	1261.176
+Z	2	841.12
+109.09523 551.3
+118.12550 561.2
+120.71350 526.4
+120.71700 488.4
+121.80769 2163.2
+121.81257 756.9
+133.12921 1005.3
+136.42355 569.5
+138.56772 614.0
+138.67680 550.5
+141.77512 484.0
+150.62128 483.5
+160.34703 551.1
+161.54207 673.5
+165.79292 649.5
+169.50034 586.7
+169.64900 573.4
+176.29623 545.8
+178.33664 597.0
+184.85378 502.4
+197.70535 755.6
+198.92380 1064.7
+199.19431 1186.4
+199.22003 726.2
+199.29379 3138.1
+199.31140 1108.1
+199.39078 1094.7
+218.66660 603.1
+222.66280 619.4
+226.35764 578.4
+234.76118 514.0
+250.51143 630.2
+252.50826 584.1
+305.42273 559.4
+310.41116 657.0
+316.61978 538.5
+319.37961 539.0
+350.28110 725.2
+353.69293 729.6
+400.13113 560.4
+416.08322 657.9
+427.56091 691.0
+435.63727 760.9
+476.77155 867.8
+507.35709 596.5
+516.80560 634.5
+532.50928 2132.3
+535.62018 590.5
+558.37097 609.3
+630.42877 932.2
+753.85260 649.1
+789.17786 561.1
+827.08179 571.2
+913.20160 576.6
+924.11792 746.5
+1028.58997 609.7
+1057.20886 684.6
+1119.58899 588.1
+1182.24573 596.5
+1198.14075 3470.4
+1356.69885 624.6
+1453.19421 665.2
+1525.51404 922.4
+1542.07593 620.7
+1555.12463 619.7
+1628.55188 596.8
+S	585	585	417.7329571
+Z	4	1666.90053
+105.64175 626.8
+109.67432 563.9
+111.99070 563.0
+117.25677 612.4
+117.45809 733.7
+119.20946 634.3
+121.80753 2268.0
+121.98789 564.7
+131.56004 604.3
+133.05914 541.9
+142.47263 662.3
+153.87398 566.0
+163.59346 597.6
+165.79274 625.4
+170.48956 578.7
+187.23274 506.7
+189.84052 536.2
+190.29268 538.5
+198.92404 971.2
+199.19162 625.0
+199.27716 1190.4
+199.29196 2640.7
+199.30502 1330.4
+199.38928 1017.3
+204.64868 554.2
+223.43288 616.9
+233.16510 1032.1
+256.84460 607.5
+263.21082 538.2
+264.25552 715.2
+265.26074 610.1
+308.92407 590.6
+330.40692 562.6
+368.14548 553.5
+442.70798 536.2
+445.82578 489.5
+463.57959 1817.5
+463.91068 1160.1
+469.58408 1770.7
+469.91669 1244.1
+470.24454 752.3
+476.78467 814.8
+507.27676 1001.0
+514.36407 640.1
+532.40686 1914.8
+549.19800 721.7
+552.13226 610.7
+561.29523 614.8
+563.34686 690.3
+618.09204 602.3
+630.45233 745.5
+661.66913 587.6
+676.62402 1295.2
+687.00763 684.8
+731.18024 836.2
+917.89899 743.5
+962.51306 568.6
+1019.84045 662.1
+1187.99646 526.4
+1197.91638 2537.1
+1198.07605 813.7
+1363.25916 627.9
+1525.52271 1152.3
+1623.41187 581.0
+1674.11853 675.1
+S	586	586	418.2340746
+Z	4	1668.905
+112.24395 837.2
+120.08026 3461.4
+121.80785 2254.0
+121.94071 564.8
+123.22327 528.8
+133.13100 1092.3
+142.91835 565.4
+165.79466 668.5
+175.11899 675.9
+198.92528 1005.9
+199.20236 793.6
+199.25542 661.3
+199.26686 673.7
+199.28693 1953.4
+199.29980 2559.7
+199.31364 1176.6
+199.32248 872.3
+199.33699 639.7
+199.39760 994.5
+199.56592 518.4
+215.13890 716.3
+218.69189 658.8
+219.26624 530.8
+233.16458 30198.0
+234.16779 4929.9
+240.79057 639.2
+249.09871 986.0
+261.15921 5722.5
+272.94937 541.9
+276.11810 580.8
+276.20685 598.2
+279.59253 600.7
+282.16306 618.5
+288.20248 7939.1
+289.20746 945.6
+306.90768 651.2
+307.70383 785.6
+322.34662 555.9
+327.40561 560.7
+337.86920 26539.6
+338.20349 12005.0
+338.53787 3572.3
+354.11560 553.2
+377.55307 638.9
+378.14053 3805.2
+379.14371 869.9
+381.19223 623.3
+382.12384 577.3
+383.55554 5608.8
+383.88998 3858.9
+384.22559 971.6
+387.27075 5700.4
+388.27591 767.4
+390.19952 1301.6
+396.14975 3258.0
+399.47470 847.7
+406.22693 1174.9
+424.20764 710.4
+439.57483 1184.5
+439.90421 722.0
+442.25281 7909.8
+442.75436 3616.2
+443.25647 742.5
+445.91248 639.2
+447.56604 625.6
+448.56262 691.4
+451.57114 1166.2
+451.90845 563.5
+454.89905 744.7
+457.57709 1943.2
+457.77597 1494.7
+457.91193 2309.8
+458.23868 731.0
+463.25223 2101.9
+463.58002 93474.5
+463.91412 64338.5
+464.09637 679.7
+464.24832 27156.4
+464.58215 7090.9
+464.91693 1208.9
+465.01108 520.8
+469.58331 76115.4
+469.91751 58246.0
+470.25180 23040.5
+470.58527 6581.8
+472.83810 671.9
+495.26886 885.8
+506.29941 16346.6
+506.80136 8040.3
+507.27823 40902.6
+507.61209 34455.6
+507.94656 12515.1
+508.28146 4705.0
+508.61316 1182.9
+509.03741 743.9
+510.78183 1624.1
+511.28473 1034.0
+513.60211 7818.5
+513.93616 7345.9
+514.27130 3801.2
+514.60931 890.1
+516.31189 1138.8
+532.52478 2068.0
+566.79913 1465.0
+574.82922 1058.3
+575.30902 1670.6
+575.80621 918.5
+576.29272 3050.9
+576.79504 2164.3
+616.81024 927.9
+624.98608 603.1
+628.30402 804.6
+629.30792 679.0
+630.40540 710.3
+630.81860 20501.7
+631.32001 13180.4
+631.82147 4497.4
+632.32336 1138.0
+639.34741 871.7
+639.82355 19873.7
+640.32501 13928.6
+640.81641 10200.5
+641.31799 7907.3
+641.81836 2978.4
+642.31812 657.4
+656.30237 5553.8
+657.30396 1652.2
+676.61084 801.8
+696.36615 9752.7
+696.86700 6354.2
+697.36774 2985.0
+719.27631 536.4
+784.01001 612.6
+795.68921 966.2
+812.35980 571.0
+883.49542 4614.5
+884.50031 2230.6
+987.02454 796.5
+1057.20752 955.4
+1189.24524 628.1
+1198.17493 3212.5
+1229.84998 641.5
+1525.41882 868.3
+1669.78101 587.3
+S	587	587	731.286407933
+Z	2	1460.725
+Z	3	2190.584
+198.92287 792.4
+199.20586 808.7
+199.28523 1160.0
+199.29962 1753.8
+199.31229 2390.4
+199.32541 747.1
+205.19196 560.9
+206.03601 546.9
+212.50204 504.7
+213.19194 572.8
+260.39926 739.0
+262.75357 575.0
+272.70187 645.8
+278.30789 600.2
+286.93903 581.7
+294.03757 606.2
+308.89310 790.8
+311.13675 781.6
+326.34146 633.1
+342.26648 641.7
+360.81738 718.1
+381.55432 519.8
+421.21646 529.4
+427.53476 863.0
+448.02255 564.9
+482.65115 913.8
+487.44318 629.2
+532.48108 1706.8
+593.77875 658.7
+602.41327 577.3
+644.94305 730.1
+648.81244 648.9
+676.60632 1091.6
+780.33795 904.4
+780.83777 1411.3
+815.85828 1043.6
+816.35736 1077.7
+816.85962 1028.5
+842.00299 586.5
+873.37054 749.2
+873.86554 1184.0
+901.88092 715.1
+902.37866 957.6
+911.78516 584.2
+930.39722 1325.2
+930.88934 2687.0
+931.39069 1742.8
+953.54211 786.2
+965.90918 1297.6
+966.40778 1287.7
+1057.20032 1190.1
+1185.55493 1886.6
+1198.07996 3523.2
+1203.59058 678.0
+1268.44250 585.5
+1878.89990 1328.7
+1879.08325 863.8
+1879.43848 19989.7
+1880.00439 1358.6
+1880.53198 657.4
+1883.91443 588.0
+1907.04834 7722.1
+S	589	589	1879.89524127
+Z	3	5636.41
+Z	2	3757.943
+532.45081 560.5
+532.53302 1905.3
+567.39490 752.9
+630.41180 792.0
+676.58844 524.3
+676.62183 773.4
+756.32147 657.8
+795.69470 1094.1
+933.33185 595.6
+957.11212 559.9
+1057.20679 713.9
+1082.74731 643.4
+1195.88586 656.9
+1198.19666 3125.5
+1871.21008 615.3
+1878.45227 852.8
+1879.49634 19054.9
+1880.10083 1307.6
+1880.38013 1216.8
+1880.76282 1278.3
+1881.20996 759.0
+1907.05127 7435.6
+1930.62134 942.6
+S	590	590	1907.4808246
+Z	2	3813.114
+Z	3	5719.167
+532.55536 1877.4
+544.13983 688.6
+571.99426 565.4
+621.78955 557.5
+644.63214 635.4
+668.54785 549.9
+676.64398 1068.4
+706.45837 598.5
+740.97968 584.7
+752.73474 680.5
+782.75537 692.4
+795.67865 974.7
+810.11096 765.7
+812.33588 604.1
+1050.69324 760.0
+1174.08594 635.8
+1188.28235 807.0
+1198.23816 2966.2
+1208.89197 652.2
+1343.51941 762.6
+1363.53198 722.4
+1497.79797 592.7
+1525.46484 911.0
+1582.16638 705.0
+1809.71387 626.8
+1879.24756 811.2
+1879.53345 19968.6
+1880.22803 890.3
+1907.05798 7562.5
+1928.68384 609.0
+1930.64221 1183.2
+S	592	592	417.7316446
+Z	4	1666.89528
+102.21968 521.7
+102.39771 494.3
+106.46950 798.5
+109.21999 632.8
+110.20992 545.5
+121.80199 554.0
+121.80682 2442.8
+140.52827 584.4
+141.53526 562.3
+145.22453 641.5
+156.01045 591.3
+169.49028 534.4
+172.89789 517.4
+176.87979 539.5
+179.06061 616.2
+182.85310 668.5
+199.20308 1225.8
+199.28076 818.9
+199.30132 3224.7
+199.31169 1160.3
+199.33344 794.1
+199.38721 502.4
+199.39874 1258.0
+208.21532 557.7
+214.32762 545.7
+217.36554 598.3
+221.89954 643.0
+223.22858 533.1
+233.56773 777.4
+242.43494 578.7
+272.18466 548.8
+280.18359 542.3
+294.26639 531.7
+308.88895 618.6
+345.18396 575.5
+347.47659 555.9
+350.28806 743.6
+359.95541 608.0
+381.35486 592.9
+435.98807 574.9
+476.78247 723.8
+478.86700 554.2
+482.66275 881.3
+488.36383 606.4
+518.30621 570.8
+532.50909 1747.1
+560.07043 726.3
+564.35663 741.4
+599.92133 514.9
+613.54382 625.9
+652.25385 583.3
+676.62781 1276.8
+710.92535 674.5
+731.11963 728.0
+764.16064 672.5
+791.83148 592.8
+795.68939 1130.7
+812.37091 653.7
+819.93170 551.5
+850.43781 608.2
+940.20288 560.4
+989.53741 568.8
+1020.87115 692.9
+1057.22852 773.5
+1098.46948 665.0
+1176.97339 563.5
+1188.29797 854.7
+1198.13586 3269.9
+1230.76038 546.6
+1317.95544 649.1
+S	593	593	418.2333246
+Z	4	1668.902
+112.03879 622.7
+113.00735 644.5
+115.05967 527.4
+120.08019 1415.5
+121.80457 910.9
+121.80859 2301.7
+121.81257 753.3
+143.57365 587.1
+161.97028 528.8
+174.66147 555.3
+175.11858 714.9
+179.80630 548.7
+192.65527 608.0
+193.92160 595.5
+199.19655 754.4
+199.28485 996.2
+199.29471 3415.8
+199.39247 1163.3
+215.61534 538.2
+233.16454 16925.5
+234.16821 2166.5
+248.03214 720.6
+255.22176 639.0
+261.16025 2478.4
+281.37018 580.6
+284.80789 718.1
+288.20273 12384.6
+289.20749 1308.1
+308.32526 688.4
+308.86563 525.9
+312.96078 638.8
+337.86929 13956.6
+338.20355 6456.5
+338.53802 1313.5
+350.27777 739.0
+378.14139 1689.6
+381.31610 631.5
+383.55582 2674.5
+383.88879 2032.5
+384.22467 878.7
+384.53183 2037.5
+384.86813 912.8
+386.52057 614.2
+387.27112 7122.6
+388.27493 873.3
+392.22763 1189.0
+394.38455 785.0
+396.15161 1232.5
+397.49646 513.3
+399.72354 799.8
+405.97729 912.9
+406.22699 2748.0
+406.72836 939.4
+426.94687 594.2
+427.50137 813.7
+439.22913 926.1
+442.25186 2656.3
+442.75531 1375.4
+443.25464 822.5
+445.23193 1790.6
+451.23984 1465.7
+451.56747 948.1
+454.57294 833.7
+457.57809 2480.0
+457.77872 623.1
+457.91162 1683.5
+463.25211 1153.9
+463.58008 48265.2
+463.91428 32646.7
+464.24884 11754.0
+464.58209 2640.3
+465.24887 843.0
+465.85327 603.0
+469.58331 39670.0
+469.91754 28201.0
+470.25189 9450.4
+470.58588 2648.1
+476.76248 646.4
+477.18698 600.7
+495.27283 987.5
+501.27747 751.1
+506.29950 6698.4
+506.80151 5071.1
+506.95367 625.4
+507.27814 21027.5
+507.61234 15813.0
+507.94666 7439.7
+508.28192 2121.4
+512.26990 659.1
+513.60254 4494.3
+513.93658 2562.4
+514.27130 1594.4
+516.31171 745.0
+532.55548 1896.7
+549.10132 569.8
+574.82550 676.3
+575.29657 740.9
+576.29425 5456.1
+576.79565 3275.6
+577.29785 1128.9
+584.43286 625.0
+585.93781 611.4
+603.71887 639.6
+613.86639 544.0
+621.09869 585.6
+622.70239 532.4
+628.30292 732.8
+630.81836 8176.6
+631.31952 6368.1
+631.81848 2427.2
+632.31842 1494.4
+636.36621 538.4
+639.82379 7947.9
+640.32513 7262.2
+640.81531 16214.0
+641.31696 11414.6
+641.81885 4627.4
+642.32294 929.0
+656.30377 1708.1
+657.30408 959.4
+676.62683 1012.3
+690.34839 903.5
+696.36536 3540.5
+696.86755 2910.1
+697.36810 1247.5
+731.04822 1045.3
+795.69568 808.7
+810.75458 497.7
+841.42926 549.3
+852.43103 546.8
+883.49719 1847.0
+916.98578 612.2
+976.26166 585.5
+1019.75024 666.5
+1176.96741 591.4
+1188.29163 829.0
+1198.24060 3366.0
+1437.98120 639.9
+1543.70105 585.2
+1559.80444 617.0
+1574.48560 736.6
+1581.75134 619.8
+1599.85217 571.7
+S	594	594	731.284241267
+Z	3	2190.577
+Z	2	1460.721
+196.80458 637.1
+198.92175 1028.6
+199.20961 1418.7
+199.30760 3225.9
+199.40570 1172.0
+204.02083 589.9
+210.66530 583.1
+223.25702 694.7
+226.17905 674.6
+231.55022 579.3
+255.29025 668.1
+287.94205 619.7
+288.13666 678.3
+297.16965 679.5
+305.19800 540.8
+305.41882 658.1
+308.34674 588.7
+320.98584 662.3
+332.60770 794.2
+373.49536 620.5
+378.78015 700.6
+427.54315 705.1
+436.48080 708.4
+465.00375 710.2
+497.37225 647.2
+504.84528 611.6
+532.57471 1981.6
+577.85931 602.9
+611.42401 518.9
+630.40491 777.7
+636.83704 580.7
+671.34937 655.3
+676.56262 781.9
+676.63861 891.3
+782.65131 639.5
+784.32813 596.4
+833.07300 611.0
+858.04584 616.4
+938.84143 657.3
+974.36151 632.5
+1188.22070 827.3
+1198.28442 3051.5
+1699.51135 952.3
+1807.32446 590.4
+1870.11108 622.0
+1876.20251 693.7
+1878.64185 1425.5
+1879.52173 19182.1
+1879.80774 3769.1
+1880.39600 1174.9
+1883.67249 764.2
+1907.03967 7244.2
+1930.58826 843.3
+1981.35168 699.0
+S	596	596	1879.9628246
+Z	3	5636.613
+Z	2	3758.078
+532.56665 1915.6
+795.67834 1142.0
+827.87708 602.0
+1019.80334 715.0
+1020.92737 712.1
+1021.07550 808.4
+1057.26538 772.8
+1164.86951 750.5
+1198.26196 3057.2
+1248.31250 696.4
+1877.75793 844.4
+1878.79468 1176.5
+1879.26563 5045.7
+1879.54858 18526.6
+1880.78333 899.1
+1906.48218 676.3
+1906.97791 7320.6
+1923.49585 569.6
+1930.40515 736.7
+S	597	597	1907.47424127
+Z	3	5719.147
+Z	2	3813.101
+521.56537 558.3
+532.51898 1898.8
+563.40875 654.6
+641.25543 614.1
+670.11621 586.8
+676.61987 1067.7
+711.26965 578.5
+731.13593 943.8
+781.74341 577.0
+795.69592 1101.2
+805.43872 627.3
+929.74689 604.0
+1010.29407 584.9
+1019.89746 609.4
+1198.15625 2890.9
+1200.24817 597.8
+1389.72717 647.9
+1436.05432 631.6
+1453.35449 571.9
+1525.45642 764.5
+1525.72791 631.9
+1653.41687 574.1
+1733.99573 747.5
+1870.04248 641.0
+1870.25439 630.4
+1878.98315 1086.6
+1879.25696 3912.7
+1879.47644 19031.4
+1879.94373 1928.4
+1907.07251 6949.9
+1930.64514 772.9
+S	599	599	417.7320721
+Z	4	1666.89699
+100.25221 562.6
+104.30173 550.7
+108.98690 564.2
+120.68401 542.3
+121.80697 1867.4
+121.81100 949.9
+135.68675 528.9
+146.92921 690.0
+165.79294 605.9
+171.29266 642.5
+171.62816 676.0
+171.64154 749.9
+199.19612 827.7
+199.27484 1156.5
+199.29422 2840.1
+199.30347 989.4
+199.31200 1073.1
+199.32146 740.8
+199.39192 1516.2
+201.30399 526.9
+203.46086 578.4
+211.24748 520.1
+214.82669 545.9
+251.70959 788.3
+271.48169 532.2
+342.27750 703.4
+350.29065 842.4
+411.80728 586.2
+431.58926 560.1
+453.13983 584.2
+476.77631 855.1
+482.64169 724.1
+510.43848 660.2
+529.81940 607.6
+532.49249 2437.8
+546.79053 718.6
+549.15881 850.3
+552.29480 532.6
+562.94684 632.6
+626.78302 641.4
+651.26050 695.4
+676.62433 1042.6
+731.12610 833.5
+782.14081 537.3
+795.67664 788.7
+834.41003 604.1
+858.15674 572.9
+864.51538 576.1
+929.57208 584.1
+1048.22217 643.6
+1057.21045 878.8
+1088.63513 546.9
+1198.10168 3453.2
+1370.32410 576.6
+S	600	600	418.2335746
+Z	4	1668.903
+107.33402 559.3
+108.48371 585.9
+114.60633 551.2
+117.13591 598.8
+118.39649 502.1
+121.80507 952.4
+121.80923 2536.7
+125.83084 520.7
+132.39265 557.6
+136.87119 587.0
+154.80315 672.6
+157.88963 683.7
+164.42877 583.2
+165.79990 575.0
+187.59482 528.9
+189.09685 548.2
+198.92384 915.4
+199.26120 1007.2
+199.28383 2178.2
+199.29140 2123.2
+199.30151 1432.1
+199.31075 691.1
+199.39006 814.6
+205.78583 701.5
+207.70387 609.8
+209.44669 621.6
+211.88641 547.2
+222.45682 608.2
+230.79752 548.2
+267.26041 556.3
+283.56262 651.5
+311.65869 644.3
+350.28363 690.5
+374.34189 586.7
+427.53546 771.5
+463.58197 803.7
+463.91302 797.0
+469.92026 1015.4
+532.51495 1947.3
+549.14740 702.2
+596.93420 592.3
+664.64807 579.0
+669.07910 544.5
+676.62573 1050.0
+708.12964 549.7
+759.68555 578.6
+802.39038 601.8
+867.81317 568.6
+899.12067 639.5
+936.59784 759.9
+940.63501 562.8
+997.55328 614.9
+1057.21973 843.9
+1198.15002 3643.4
+1204.97717 571.8
+1525.41553 774.1
+1544.93872 663.8
+S	601	601	731.285407933
+Z	3	2190.581
+Z	2	1460.723
+199.24841 575.0
+199.26390 1489.5
+199.27803 1160.2
+199.29131 1178.9
+199.30449 2444.7
+199.32709 690.8
+199.40309 786.6
+200.73215 616.1
+210.20883 639.0
+220.79066 659.0
+223.86909 545.4
+247.36589 625.1
+257.24908 624.6
+279.06735 495.9
+280.53824 827.3
+322.06500 613.2
+331.18356 549.9
+342.27704 649.0
+350.27780 844.2
+361.85480 536.2
+367.54108 668.0
+369.68628 756.1
+371.43558 603.4
+390.61221 530.4
+394.20844 866.8
+417.68631 588.7
+436.60303 650.0
+498.04123 555.5
+503.99100 628.7
+518.97852 600.8
+532.54333 2060.5
+549.15814 1272.2
+573.87390 695.6
+593.58698 583.7
+676.63318 1068.3
+795.68823 836.0
+821.74823 590.6
+863.35046 658.7
+950.41931 668.4
+1057.22998 671.6
+1129.41882 604.3
+1142.53259 763.3
+1198.21753 3464.0
+1316.82349 579.3
+1319.74902 582.9
+1354.02100 706.8
+1525.43347 983.3
+1692.22900 657.7
+1805.38721 605.4
+1878.18152 659.0
+1879.15295 2775.8
+1879.51746 19499.7
+1879.84546 2911.6
+1880.94238 791.1
+1907.04700 7246.0
+1930.63501 1129.1
+S	603	603	1879.8658246
+Z	3	5636.322
+Z	2	3757.884
+532.55341 1608.2
+549.10828 984.3
+578.20465 581.9
+630.35046 894.8
+676.61377 1105.7
+731.06451 577.3
+795.67053 854.4
+865.54858 655.7
+1112.70898 737.3
+1136.56885 690.1
+1198.23755 3161.8
+1248.42749 664.0
+1397.88086 790.7
+1525.28223 908.2
+1633.71960 619.2
+1870.32202 752.7
+1878.60254 727.3
+1879.13525 1536.0
+1879.44983 20054.1
+1879.79102 1563.8
+1880.20972 738.4
+1907.05225 7384.8
+1930.48328 1022.2
+S	604	604	1907.43740793
+Z	3	5719.037
+Z	2	3813.027
+532.50464 1727.0
+595.73853 594.4
+630.35278 678.1
+630.40479 569.9
+659.53210 766.3
+676.60870 1316.2
+763.40906 807.3
+790.20422 676.3
+795.68396 835.5
+804.86975 548.5
+830.58405 580.3
+1016.60541 606.3
+1140.60449 812.5
+1198.12695 2934.7
+1230.59985 614.9
+1416.33215 518.0
+1657.30737 726.5
+1777.01245 638.3
+1878.13184 719.6
+1878.62256 922.4
+1879.13550 2678.7
+1879.45703 19797.3
+1879.77551 2274.0
+1880.28027 1412.0
+1881.44800 660.3
+1907.11365 7085.5
+1911.25647 686.6
+1930.57092 975.8
+1961.61438 646.6
+S	606	606	1879.94824127
+Z	2	3758.049
+Z	3	5636.569
+532.49945 2155.7
+537.98926 717.9
+630.39417 666.3
+676.59247 1081.3
+795.68848 995.4
+971.81934 603.3
+987.11914 624.0
+1050.12219 700.0
+1054.93884 677.2
+1110.90625 606.6
+1140.54211 631.2
+1198.11304 3393.5
+1249.97632 618.2
+1345.25793 591.0
+1718.28259 1139.6
+1874.86267 710.5
+1878.81311 613.6
+1879.39758 20942.8
+1906.99792 7348.6
+S	607	607	1907.45540793
+Z	3	5719.091
+Z	2	3813.063
+532.48737 1766.9
+570.08704 600.6
+616.78119 607.8
+676.62543 844.6
+719.77368 623.5
+782.00922 661.8
+795.67255 1148.8
+795.83179 821.4
+1112.57776 593.4
+1163.17761 625.7
+1198.09558 3569.2
+1312.94092 571.2
+1357.37683 590.5
+1525.45581 796.1
+1719.59778 724.8
+1874.04150 919.0
+1878.85376 619.3
+1879.20850 2806.7
+1879.48157 20036.1
+1907.04346 7647.3
+1907.54224 794.1
+1997.29651 700.9
+S	609	609	1879.95440793
+Z	3	5636.588
+Z	2	3758.061
+532.51251 1668.1
+579.50745 638.8
+630.39020 609.7
+676.64526 975.9
+693.68195 610.6
+858.04840 807.7
+933.71747 699.9
+962.84869 713.0
+973.09113 646.4
+1021.13684 676.5
+1072.16235 627.5
+1198.14160 3373.9
+1450.73083 652.8
+1525.41785 741.4
+1719.07007 1418.8
+1872.99719 935.7
+1876.83594 675.3
+1878.23816 1162.3
+1879.24292 1864.3
+1879.54919 19143.7
+1879.84082 1738.0
+1880.06897 1392.2
+1881.73340 899.6
+1882.24622 746.7
+1904.91919 702.1
+1906.92322 7062.0
+1918.78418 663.6
+1930.62891 1363.2
+S	610	610	1907.4155746
+Z	2	3812.983
+Z	3	5718.972
+532.53577 2012.4
+610.83929 628.2
+661.90021 640.6
+676.67902 829.0
+676.72369 574.3
+688.19757 688.7
+795.66760 717.6
+818.38287 632.8
+859.65320 570.3
+1019.52441 701.4
+1039.86926 639.9
+1057.34521 857.7
+1154.58533 688.8
+1198.19739 3434.8
+1462.35742 695.4
+1525.44775 1117.3
+1626.86255 681.1
+1635.18506 607.4
+1718.20068 1450.0
+1878.65393 798.3
+1879.10815 1837.2
+1879.37964 7536.1
+1879.65430 16417.5
+1880.78857 1444.7
+1881.56018 683.2
+1906.90991 6935.8
+1907.36072 822.7
+S	612	612	1879.9408246
+Z	3	5636.547
+Z	2	3758.034
+511.86249 543.8
+532.49786 1733.7
+572.92255 673.5
+578.70874 671.3
+607.47784 639.4
+630.39502 721.5
+663.05695 626.5
+676.64795 814.5
+767.84216 733.1
+887.84882 637.1
+1012.40186 616.8
+1198.11621 4024.7
+1198.40491 635.9
+1215.41956 673.2
+1586.11462 648.4
+1870.46289 725.6
+1877.65051 949.0
+1878.69470 900.9
+1879.30664 8450.6
+1879.57788 15900.0
+1880.46143 1545.1
+1880.97241 994.3
+1881.66919 734.6
+1907.00708 7453.0
+1930.55579 796.3
+S	613	613	1907.45524127
+Z	3	5719.09
+Z	2	3813.063
+532.56451 1856.1
+543.97589 636.1
+662.95313 568.1
+676.63544 1267.8
+967.67316 738.0
+1019.74432 767.2
+1036.51245 682.0
+1057.23889 781.3
+1198.25989 3222.2
+1290.57080 640.7
+1321.24268 719.2
+1435.84668 608.0
+1466.11560 717.3
+1525.40845 718.9
+1597.70227 682.0
+1856.73462 620.4
+1878.82214 1254.3
+1879.04053 1573.6
+1879.52917 19184.4
+1880.00903 1030.3
+1880.31018 1072.4
+1880.49475 744.7
+1883.18176 551.7
+1883.67249 648.1
+1906.74377 709.2
+1907.07715 7323.2
+1930.64111 1185.7
+S	615	615	1907.39499127
+Z	3	5718.91
+Z	2	3812.942
+532.53729 800.2
+532.57098 1884.1
+574.68726 697.2
+613.67236 566.7
+630.34399 843.2
+676.61749 989.5
+731.05267 730.4
+795.62262 582.6
+795.64136 596.5
+811.99127 587.4
+904.98975 751.3
+952.53827 632.5
+1110.65515 791.9
+1198.27563 3037.7
+1385.63354 751.0
+1663.60559 680.4
+1878.27063 747.9
+1878.76355 1581.7
+1879.13928 2024.7
+1879.47229 19571.5
+1879.82373 1752.6
+1880.15735 1179.3
+1907.06604 7311.7
+1930.42249 864.8
+1930.98401 574.9
+1958.52124 659.3
+1984.63220 642.0
+1993.03516 650.6
+S	617	617	1879.8928246
+Z	3	5636.403
+Z	2	3757.938
+532.54370 1984.4
+582.72510 561.3
+638.84802 696.1
+676.62274 773.5
+680.58655 596.5
+701.57312 784.9
+718.91302 555.8
+773.96216 587.4
+795.66193 1076.1
+951.58716 672.2
+1057.21753 842.0
+1110.62781 727.9
+1182.42334 661.0
+1198.21326 3724.3
+1512.54651 746.6
+1607.67676 522.5
+1607.84265 585.6
+1867.81104 613.2
+1877.99548 641.5
+1878.64258 1004.6
+1879.48584 19182.0
+1879.79187 3266.3
+1880.30310 763.4
+1881.27771 810.1
+1907.06592 7367.4
+1909.25317 641.4
+1930.50830 995.0
+S	618	618	1907.41824127
+Z	3	5718.979
+Z	2	3812.989
+532.57434 1684.9
+554.49719 626.6
+676.61713 1053.9
+782.88043 684.4
+788.56104 669.4
+1023.83667 728.6
+1081.87109 635.8
+1184.02039 712.6
+1198.28601 3136.9
+1222.16077 658.1
+1288.66675 635.7
+1387.64709 635.1
+1391.98279 777.2
+1783.29333 673.0
+1878.07520 1061.8
+1878.67676 709.5
+1879.46899 20152.9
+1880.30994 843.4
+1907.04968 7436.6
+1918.69360 711.5
+S	619	619	417.7298146
+Z	4	1666.88796
+110.81263 515.0
+111.52092 573.1
+113.88142 549.4
+118.68451 609.7
+121.80726 2325.7
+151.00574 512.2
+173.47687 588.2
+180.10530 606.6
+181.23831 664.7
+192.42096 518.4
+198.91751 750.1
+199.21037 560.8
+199.25833 903.3
+199.26729 624.6
+199.28461 2000.4
+199.29359 1820.1
+199.30888 1638.0
+199.38264 806.0
+228.18011 575.1
+237.88100 461.7
+267.74945 636.9
+270.47760 578.2
+280.10028 725.2
+350.28824 699.2
+355.02948 566.9
+375.59296 501.6
+381.32599 833.0
+388.83856 538.2
+394.57150 592.1
+427.66608 860.0
+453.94870 625.4
+455.40735 586.7
+475.93497 572.6
+476.24475 749.7
+476.77560 973.3
+532.58740 1787.8
+534.31189 601.5
+549.11096 645.4
+593.80762 660.5
+630.35370 972.7
+676.62585 1130.8
+728.53455 546.4
+774.94873 601.5
+795.66718 891.0
+893.96515 521.2
+894.02081 516.7
+899.88837 569.2
+998.92230 677.7
+1057.22778 753.1
+1198.31421 3236.7
+1482.19617 743.8
+1488.84729 557.4
+1546.26978 550.8
+1549.13220 671.1
+1671.36963 757.0
+S	621	621	1879.97699127
+Z	3	5636.656
+Z	2	3758.106
+532.57935 1802.8
+554.34656 631.7
+581.77710 694.4
+630.38879 722.0
+676.62134 1213.1
+683.48322 678.9
+737.09247 628.1
+793.56464 672.9
+1008.62219 652.5
+1086.03015 618.8
+1129.52747 612.0
+1198.28735 3479.9
+1274.34033 831.7
+1286.50562 618.5
+1525.35510 733.4
+1589.64282 647.9
+1850.81970 677.9
+1878.63611 746.6
+1879.21338 2646.2
+1879.48938 19751.4
+1906.72717 818.7
+1907.04614 7372.1
+1930.54089 831.9
+S	622	622	1907.46740793
+Z	3	5719.127
+Z	2	3813.087
+532.57813 1786.8
+534.56635 663.0
+549.08594 928.4
+676.64081 993.2
+720.03253 655.9
+783.88245 740.1
+795.64215 953.1
+857.87256 664.4
+1054.12549 608.6
+1072.00281 735.8
+1128.31433 690.5
+1197.89551 724.0
+1198.28943 3465.0
+1295.36194 588.1
+1583.00220 714.1
+1879.17798 1710.9
+1879.53748 19742.3
+1879.93372 1505.9
+1907.03625 7341.8
+1930.38867 787.5
+1982.71021 678.2
+S	624	624	1879.92640793
+Z	3	5636.504
+Z	2	3758.005
+532.58557 2219.0
+559.13232 712.2
+676.62262 1178.1
+693.34485 631.9
+795.66443 882.3
+935.83435 776.7
+1139.48962 533.9
+1198.31616 3342.1
+1525.28516 1042.4
+1547.12842 640.8
+1878.28101 927.7
+1879.49121 19645.9
+1907.06030 7305.0
+1928.55017 760.9
+1930.43286 859.0
+S	625	625	1907.47440793
+Z	2	3813.101
+Z	3	5719.148
+532.57538 1844.4
+533.96674 604.5
+553.94452 704.7
+559.11316 616.1
+569.68445 664.5
+617.84918 604.0
+672.95563 604.4
+676.62329 1000.0
+696.58527 596.4
+705.24066 699.0
+731.06433 657.4
+762.54663 725.9
+768.11237 554.8
+781.79999 613.8
+787.83771 620.5
+795.66895 829.7
+822.88025 638.0
+929.18958 665.3
+991.80957 619.9
+1046.95178 723.5
+1057.23083 715.8
+1198.29419 3784.8
+1218.63660 659.6
+1222.23108 743.8
+1860.07507 903.4
+1879.22705 2590.8
+1879.50684 20186.4
+1880.06726 729.5
+1882.33508 743.7
+1907.08838 7251.5
+1930.41821 702.8
+S	627	627	1907.48099127
+Z	2	3813.114
+Z	3	5719.168
+532.55713 2003.1
+630.33612 902.5
+676.60962 1074.5
+697.82892 726.5
+731.03876 780.1
+738.93701 611.4
+795.66986 984.2
+825.10339 679.7
+830.02325 568.1
+983.35095 645.6
+1057.19861 1050.3
+1140.17822 642.4
+1198.25085 3149.3
+1220.19226 664.1
+1269.58826 635.1
+1408.89490 686.0
+1475.31616 715.7
+1520.54858 728.9
+1777.26062 803.5
+1878.12036 951.6
+1878.85876 740.2
+1879.45142 20234.3
+1879.73816 834.0
+1879.82166 764.2
+1880.06384 1348.4
+1907.06787 7238.9
+1907.37817 1115.3
+1930.40332 851.1
+S	629	629	1879.92899127
+Z	2	3758.01
+Z	3	5636.512
+532.57147 1913.1
+549.09845 864.2
+558.14520 697.1
+572.46008 634.1
+626.34656 614.6
+676.61664 1095.8
+722.12799 688.1
+731.21472 619.1
+795.66602 1000.3
+865.54926 669.3
+1198.27246 3595.8
+1201.38232 718.5
+1274.33057 644.1
+1542.93738 646.7
+1581.65613 705.0
+1879.46826 19872.8
+1879.77917 2512.5
+1880.52759 875.8
+1881.09741 1137.5
+1907.10852 7497.4
+1918.80444 641.5
+S	630	630	1907.55240793
+Z	3	5719.382
+Z	2	3813.257
+532.54974 2028.4
+537.04834 665.3
+585.21185 767.5
+630.32440 949.6
+653.75244 538.2
+741.33636 599.6
+795.66278 985.8
+1050.94263 717.9
+1057.21399 939.3
+1105.55420 677.0
+1198.23474 3336.5
+1525.23279 961.9
+1596.89441 632.3
+1878.77258 1142.0
+1879.51648 19656.6
+1879.80261 2740.3
+1880.13196 903.8
+1880.39807 821.5
+1907.03052 7561.3
+1918.76587 1074.1
+1930.32800 866.6
+1994.63098 803.5
+S	632	632	1879.9458246
+Z	3	5636.562
+Z	2	3758.044
+507.98856 599.7
+532.55011 1788.7
+623.43201 680.5
+655.99133 554.7
+676.62939 1219.9
+731.08203 934.3
+795.66821 1358.1
+902.20728 680.4
+1097.48694 671.6
+1103.15051 707.5
+1188.21057 1145.6
+1198.22864 3103.8
+1525.31262 894.5
+1878.93677 1714.1
+1879.11731 2582.8
+1879.48938 19041.0
+1879.86560 2567.9
+1907.06885 7838.6
+S	633	633	1907.50399127
+Z	3	5719.237
+Z	2	3813.16
+519.61078 617.5
+532.52832 2124.5
+545.18903 544.7
+549.13965 769.1
+630.39362 902.1
+653.19238 709.8
+676.60834 1236.7
+711.20453 652.0
+861.01410 791.5
+864.86493 601.9
+1001.62646 565.0
+1068.15259 660.8
+1145.62891 808.5
+1198.18445 3107.1
+1216.20703 625.7
+1428.14758 596.2
+1435.65088 615.0
+1525.37280 844.2
+1531.14819 757.1
+1603.43811 653.0
+1656.44287 723.8
+1879.45203 19910.0
+1879.73767 1352.1
+1903.26611 658.1
+1907.03479 6954.4
+1919.75024 695.6
+1930.56372 919.3
+1982.42639 753.8
+S	634	634	1198.66940793
+Z	3	3592.733
+Z	2	2395.491
+360.81592 591.1
+410.72958 581.3
+419.20276 605.5
+442.24127 749.3
+443.14825 595.0
+482.60181 789.8
+504.93912 645.2
+513.33734 586.4
+532.51276 1567.5
+676.62585 1171.7
+712.36884 656.2
+795.64044 1069.5
+985.69110 625.9
+1020.87781 801.2
+1028.03772 724.0
+1043.72961 548.3
+1057.21313 746.8
+1101.80579 654.4
+1134.17859 579.2
+1198.14319 3337.1
+1525.18567 953.8
+1593.53601 663.3
+1774.21814 681.7
+1859.35242 721.4
+1861.92993 583.1
+1877.27258 730.4
+1878.41492 810.8
+1878.73645 788.0
+1879.15259 2022.6
+1879.49805 19757.9
+1879.90991 1478.1
+1893.91345 638.4
+1907.09119 7151.1
+1930.33557 718.3
+S	636	636	1907.46440793
+Z	2	3813.081
+Z	3	5719.118
+532.58728 1923.9
+549.12274 842.5
+630.36951 630.3
+676.62366 1183.1
+795.65045 957.0
+803.93640 605.0
+993.67084 676.1
+1011.96869 670.9
+1057.23193 864.1
+1198.31519 3356.2
+1373.23608 596.0
+1489.09241 820.9
+1525.31885 1015.9
+1536.86035 607.7
+1878.98840 847.7
+1879.47754 20074.0
+1879.92139 758.7
+1881.02441 794.8
+1881.91638 1015.5
+1882.51135 701.9
+1907.05872 7083.4
+1930.47168 901.8
+S	638	638	1879.94424127
+Z	3	5636.557
+Z	2	3758.041
+516.21552 688.9
+532.49048 1554.7
+795.66138 1112.3
+1045.61597 536.8
+1057.23560 1023.5
+1153.57153 757.8
+1175.90747 622.7
+1198.10107 2954.4
+1339.94153 671.9
+1384.45850 760.2
+1663.56323 660.4
+1771.87769 658.3
+1876.69299 664.6
+1877.87061 1391.5
+1879.05176 2508.3
+1879.51819 19967.2
+1879.96277 1822.6
+1881.23608 1002.9
+1907.05078 7734.2
+S	639	639	1907.45040793
+Z	2	3813.053
+Z	3	5719.076
+532.49335 1870.4
+630.39667 796.4
+676.61884 1195.5
+712.27954 619.7
+782.95306 599.1
+795.65704 1334.7
+816.93018 566.2
+827.89423 671.6
+1057.21887 873.4
+1198.10913 3273.9
+1238.98376 605.5
+1256.39282 734.9
+1436.25134 529.1
+1470.89050 554.8
+1499.72107 639.2
+1515.39539 565.5
+1681.07202 665.0
+1851.60962 645.7
+1878.37244 594.2
+1878.97241 856.5
+1879.47961 20151.3
+1879.75940 1246.4
+1907.02527 7108.7
+1930.54675 862.1
+1954.99011 653.0
+S	641	641	1879.98824127
+Z	2	3758.129
+Z	3	5636.689
+532.50916 1786.0
+549.13098 660.7
+617.03430 645.3
+630.38586 905.3
+676.61121 915.7
+783.42816 610.3
+795.66241 885.8
+797.83899 675.5
+920.25153 567.2
+926.07355 588.9
+1019.74603 843.4
+1130.55835 653.8
+1198.13782 2980.1
+1230.10986 628.9
+1336.22070 671.7
+1347.63318 686.5
+1638.17017 652.5
+1862.32312 645.6
+1870.69971 626.1
+1878.14429 733.6
+1878.83582 1071.8
+1879.13586 2012.4
+1879.45166 19866.1
+1879.75830 2400.6
+1879.95593 1765.1
+1906.23438 720.3
+1907.07043 7883.2
+1918.73926 695.5
+1930.53662 685.2
+1996.17798 613.6
+S	642	642	1907.47840793
+Z	2	3813.109
+Z	3	5719.16
+532.47095 1785.2
+549.12311 974.2
+676.64429 980.3
+707.64636 592.1
+780.77362 582.2
+795.66309 1210.3
+832.37134 673.0
+837.86407 597.1
+972.75085 628.3
+977.43152 524.8
+1027.93958 645.7
+1057.25232 796.4
+1116.67957 677.1
+1170.11157 622.0
+1198.05676 3348.7
+1208.08496 666.7
+1234.56067 880.4
+1348.42725 712.7
+1415.03320 596.7
+1415.51758 691.2
+1612.22021 664.0
+1694.14514 629.5
+1847.45215 600.7
+1869.70447 822.8
+1877.14819 812.1
+1877.29419 753.7
+1878.95801 1462.2
+1879.25574 1580.0
+1879.53418 19660.7
+1880.13574 955.0
+1907.08240 7066.6
+1909.49377 660.3
+1930.48730 1082.5
+S	646	646	1879.95140793
+Z	3	5636.579
+Z	2	3758.055
+532.42969 1640.6
+538.43073 617.1
+557.22406 688.2
+562.12097 617.1
+739.01202 631.4
+795.67584 841.9
+807.80310 665.2
+820.24225 658.9
+932.98816 710.8
+1188.18005 752.1
+1197.96777 3205.9
+1216.89209 649.4
+1222.09753 784.0
+1269.11658 618.5
+1327.00806 631.8
+1649.66333 629.0
+1878.70605 831.6
+1879.56543 19688.9
+1880.04565 1352.4
+1880.55383 906.9
+1881.10962 770.4
+1882.69788 746.9
+1907.10608 7175.0
+1930.55835 900.8
+S	649	649	1880.0028246
+Z	3	5636.733
+Z	2	3758.158
+528.12354 558.6
+532.43665 1951.8
+549.18274 920.2
+565.33252 655.7
+598.19232 567.4
+611.32996 655.6
+630.43964 612.1
+676.63092 1079.8
+690.76117 672.3
+717.51099 673.8
+795.67883 759.2
+1188.25769 882.4
+1197.97644 3199.8
+1290.72754 640.4
+1314.01001 631.5
+1525.50891 913.6
+1625.92871 687.2
+1869.61646 697.5
+1878.63062 839.4
+1878.80762 789.9
+1879.13293 2097.1
+1879.21411 2172.1
+1879.51208 19234.6
+1879.89282 2035.3
+1880.42773 850.9
+1907.05505 7407.3
+1918.72327 898.1
+1982.49146 649.1
+S	650	650	1907.4828246
+Z	2	3813.118
+Z	3	5719.173
+519.97028 617.1
+532.44666 2058.2
+630.41229 709.7
+663.62152 616.5
+676.62756 897.9
+773.23016 578.7
+795.65295 753.3
+916.12891 614.6
+934.45117 644.6
+937.55023 616.7
+1065.46228 643.4
+1075.27612 560.8
+1140.51611 709.3
+1188.25488 675.2
+1197.99304 3583.2
+1512.47852 781.2
+1525.39124 867.9
+1671.95374 661.6
+1875.50488 713.6
+1879.51794 20258.2
+1880.41614 777.6
+1880.77844 677.4
+1907.03809 7598.7
+1930.57715 990.0
+1982.27954 690.9
+S	652	652	1879.9738246
+Z	2	3758.1
+Z	3	5636.646
+508.28583 670.3
+532.43915 1603.0
+537.61865 610.9
+559.35828 728.4
+582.78522 676.5
+618.08405 704.7
+630.36945 1035.6
+682.80463 594.2
+757.62640 659.0
+795.64276 934.3
+803.66284 595.5
+996.67499 652.3
+1020.83258 602.7
+1092.36450 618.1
+1197.97021 3340.3
+1317.98474 656.8
+1360.49219 577.3
+1438.04260 863.1
+1488.76489 567.3
+1525.31836 814.8
+1620.14758 615.1
+1666.97510 659.7
+1852.35840 754.5
+1876.80908 655.8
+1879.01904 2312.7
+1879.21960 1932.5
+1879.51379 19585.1
+1879.98303 2134.6
+1881.28882 964.8
+1907.05042 7838.0
+S	653	653	1907.4658246
+Z	2	3813.084
+Z	3	5719.122
+532.44086 1379.7
+549.15729 751.1
+630.39905 768.6
+634.33795 745.2
+637.28857 598.6
+665.92932 589.0
+676.63855 1158.2
+821.27441 747.0
+895.46375 614.1
+920.15936 620.5
+1057.24097 813.4
+1157.55603 688.7
+1197.98816 3503.8
+1357.00757 627.5
+1397.97949 680.5
+1525.41968 773.6
+1748.54773 676.6
+1863.29114 655.0
+1876.80298 737.3
+1878.71582 1022.0
+1879.52039 20055.6
+1879.89819 1179.3
+1880.20081 1602.1
+1880.74683 725.8
+1907.05261 7429.2
+1930.59705 997.7
+1996.59778 661.1
+S	655	655	1880.02440793
+Z	3	5636.798
+Z	2	3758.201
+522.05975 536.9
+528.50757 588.3
+532.46997 1400.2
+580.43280 577.0
+630.38171 813.6
+631.70850 549.8
+676.62805 1162.9
+737.95026 711.3
+776.86243 622.1
+795.65540 803.4
+818.36981 608.3
+858.02020 712.7
+1076.04675 647.5
+1198.05566 3315.9
+1295.01184 611.7
+1351.05371 578.5
+1434.19812 585.7
+1747.41199 665.7
+1878.75891 1143.1
+1879.06934 1481.2
+1879.50244 18290.8
+1879.97498 1286.7
+1881.97766 805.3
+1907.05347 7657.4
+1930.51404 1214.9
+S	656	656	1907.48440793
+Z	3	5719.178
+Z	2	3813.121
+532.56866 1966.5
+549.12817 1005.3
+612.79071 610.7
+676.62677 1415.8
+795.64929 1104.2
+858.02740 664.9
+928.07324 663.4
+952.18481 623.1
+1061.61169 634.0
+1198.27429 3011.8
+1330.00024 902.2
+1445.96326 639.7
+1525.36499 1026.1
+1624.84424 692.1
+1810.74023 835.0
+1860.30444 646.8
+1869.24219 835.8
+1878.74048 1807.3
+1879.50586 19298.6
+1879.95459 2100.1
+1880.40039 1498.5
+1880.83179 555.3
+1881.15479 1022.6
+1907.05127 7643.1
+1926.83496 641.7
+1930.50281 981.6
+S	658	658	1879.94440793
+Z	2	3758.041
+Z	3	5636.558
+532.57257 2163.3
+603.23914 651.7
+606.83472 632.7
+621.67749 635.7
+676.62225 1545.8
+690.22675 564.1
+708.45819 681.7
+770.08923 686.5
+777.38495 574.6
+795.66296 736.5
+871.84583 584.0
+1110.78503 599.3
+1175.37195 715.3
+1198.27698 3180.5
+1206.90222 779.4
+1517.24219 659.8
+1525.27881 777.6
+1878.62866 675.4
+1879.47522 20042.4
+1880.30688 876.8
+1907.04919 7297.6
+1907.32190 1018.0
+1930.40100 675.3
+S	659	659	1907.4758246
+Z	2	3813.104
+Z	3	5719.152
+532.58490 1426.1
+532.63684 724.1
+549.12115 820.0
+676.62030 1123.3
+792.39404 615.1
+795.66461 994.0
+824.80109 696.3
+848.60474 701.2
+855.29169 612.9
+916.32343 642.8
+925.38568 813.3
+935.94666 688.7
+1029.31995 592.1
+1057.20605 993.2
+1064.87830 622.5
+1115.94507 623.9
+1124.81873 766.6
+1198.31079 3322.3
+1219.91003 605.1
+1235.79822 607.4
+1375.10132 536.9
+1375.18701 604.4
+1394.61719 645.2
+1525.29346 742.5
+1715.07581 892.1
+1737.50122 674.7
+1746.18201 715.3
+1843.24866 672.2
+1878.73694 1371.0
+1879.14014 2478.6
+1879.48376 19537.7
+1879.81982 2556.0
+1906.83728 1501.2
+1907.11377 7045.1
+1907.56396 673.2
+1930.46790 1012.8
+S	661	661	1907.48399127
+Z	3	5719.177
+Z	2	3813.12
+516.32361 625.5
+532.52344 1882.4
+630.36023 767.7
+676.64612 1163.2
+795.65875 968.3
+800.26044 611.4
+987.35150 823.6
+1008.42230 744.5
+1057.26135 804.1
+1070.20337 635.5
+1188.20105 726.3
+1198.17664 3582.4
+1372.84729 729.5
+1474.44348 643.6
+1869.80127 727.1
+1878.44141 1695.7
+1878.86963 1001.6
+1879.54431 19957.7
+1880.20642 812.3
+1880.66199 1562.4
+1907.08130 7163.5
+1930.44958 859.2
+1999.55981 647.2
+S	663	663	1879.87599127
+Z	2	3757.904
+Z	3	5636.353
+532.50928 2092.9
+583.32129 589.4
+603.29291 627.6
+603.72278 706.5
+630.41864 1001.4
+676.66461 1247.3
+787.28540 647.9
+795.65186 1115.0
+1057.28748 1172.5
+1081.21057 586.3
+1198.13586 3193.3
+1234.58264 617.3
+1272.89417 701.9
+1370.33032 701.5
+1462.53113 560.9
+1463.07202 643.5
+1777.06091 811.8
+1878.92859 1171.0
+1879.21326 3166.1
+1879.59045 18902.9
+1879.97546 2012.9
+1880.24500 1146.3
+1906.91711 7265.3
+1930.61340 1033.4
+S	664	664	1907.56324127
+Z	3	5719.414
+Z	2	3813.279
+532.50323 1924.6
+542.59906 570.4
+555.96045 560.1
+590.42072 608.0
+666.57526 604.0
+721.74359 667.5
+731.04974 711.4
+795.66168 1238.1
+799.35358 618.7
+857.96960 663.3
+1011.76227 617.0
+1032.48132 628.1
+1078.53308 738.1
+1154.10962 738.4
+1198.12085 3219.4
+1525.26770 736.7
+1779.73132 656.7
+1790.14685 595.3
+1876.37439 757.9
+1878.57568 940.0
+1878.93811 1693.6
+1879.48389 19372.0
+1879.98291 1984.8
+1880.35950 1515.0
+1906.98230 7250.2
+1930.40613 1340.7
+S	666	666	1879.94540793
+Z	2	3758.043
+Z	3	5636.561
+532.56274 2286.7
+614.44336 759.1
+676.63013 1135.7
+699.31976 594.8
+795.66486 922.6
+975.44214 602.2
+985.43744 645.2
+1057.13245 648.1
+1062.00525 736.6
+1123.78833 587.6
+1130.27661 666.8
+1191.06494 573.3
+1198.25720 3070.4
+1460.35315 712.7
+1525.35486 676.4
+1876.23181 944.1
+1876.70630 755.7
+1878.63684 1099.5
+1878.92444 931.9
+1879.51038 19513.9
+1880.08167 1231.6
+1907.04663 7570.9
+1930.49414 1202.8
+S	667	667	1907.4858246
+Z	2	3813.124
+Z	3	5719.182
+532.57117 1845.1
+603.71320 560.0
+635.46893 684.2
+676.64117 1107.0
+715.17535 614.6
+731.08203 616.2
+770.76465 584.0
+781.32965 697.5
+795.65259 869.9
+982.17834 760.0
+1019.73907 703.1
+1198.27954 3733.6
+1264.14709 648.2
+1713.06104 554.9
+1878.53101 800.1
+1879.18982 1913.6
+1879.51978 19782.1
+1879.83948 2082.0
+1880.45410 882.5
+1906.72656 930.9
+1907.06567 7237.8
+1907.46887 1119.8
+1930.47449 1163.1
+1947.38965 717.7
+S	669	669	1879.92440793
+Z	2	3758.001
+Z	3	5636.498
+532.55408 1981.8
+617.30505 597.9
+630.34949 895.9
+676.62860 903.4
+772.10419 642.3
+795.64703 763.6
+798.18146 648.6
+996.93378 625.0
+1020.89685 682.4
+1097.86975 691.9
+1198.23999 3507.5
+1270.38074 696.3
+1309.52393 718.2
+1371.23486 646.8
+1378.37646 594.3
+1383.97717 598.1
+1557.95996 633.2
+1603.65991 786.1
+1776.94836 934.5
+1878.02905 839.3
+1879.51624 19828.7
+1880.03308 711.2
+1880.27002 744.1
+1906.63464 695.9
+1907.03101 7178.7
+1907.33936 1054.2
+1930.40930 702.5
+S	670	670	1907.49924127
+Z	3	5719.222
+Z	2	3813.151
+515.97864 602.6
+532.54865 1590.8
+534.30359 514.6
+606.00958 599.7
+618.07037 602.8
+621.73218 703.2
+676.61816 1063.9
+719.04437 633.8
+722.99023 727.3
+731.08508 706.6
+795.63470 1124.5
+809.97809 633.9
+1057.20605 855.1
+1058.45154 689.2
+1136.05664 566.7
+1188.04199 697.7
+1198.22742 3584.1
+1231.84583 639.7
+1426.68994 633.4
+1525.31982 858.6
+1575.05603 593.8
+1723.04565 595.7
+1738.44604 585.0
+1765.55029 821.5
+1835.78821 732.8
+1879.18103 4038.4
+1879.47095 19412.0
+1879.77734 3727.8
+1880.68665 862.4
+1907.01611 7101.1
+1945.74792 710.4
+1981.23962 798.4
+S	672	672	1879.94299127
+Z	3	5636.554
+Z	2	3758.038
+530.23846 577.5
+532.54333 1932.2
+549.07983 754.0
+567.91876 692.2
+596.37488 541.5
+630.33051 745.7
+676.61414 916.1
+711.60956 800.8
+717.63330 580.6
+795.65497 741.8
+883.78766 603.7
+1019.77051 609.3
+1019.96979 688.4
+1074.40967 586.2
+1198.21265 2975.8
+1450.72217 581.4
+1878.46582 648.3
+1878.82959 1250.5
+1879.46033 20292.3
+1880.02148 1509.3
+1907.06824 7487.0
+1918.79065 805.3
+S	673	673	1907.52540793
+Z	2	3813.203
+Z	3	5719.301
+532.52679 1540.7
+549.12402 778.4
+642.68915 790.9
+654.94183 674.8
+795.64478 754.7
+832.37494 652.6
+899.58081 718.0
+922.67523 692.2
+1057.22925 975.5
+1116.28333 670.9
+1120.29456 690.9
+1198.18127 3360.8
+1248.22986 583.0
+1263.32983 696.0
+1472.16028 578.1
+1573.44653 690.1
+1876.25317 687.1
+1877.57312 1040.6
+1879.50549 19659.6
+1881.48035 826.4
+1885.77258 584.1
+1907.05444 7307.8
+1918.72327 773.7
+1930.54517 760.9
+S	675	675	1880.0098246
+Z	3	5636.754
+Z	2	3758.172
+517.08844 709.9
+532.50031 1998.6
+547.12238 577.5
+549.12958 1073.3
+579.63208 574.4
+580.55933 628.5
+630.37134 802.5
+670.90314 551.8
+676.62756 1104.1
+731.08008 636.5
+1056.56555 812.7
+1198.12048 3485.5
+1376.04565 629.7
+1393.56567 628.7
+1394.11145 550.9
+1637.42737 644.8
+1656.26428 704.6
+1877.91028 646.8
+1879.24402 2637.5
+1879.50513 19832.2
+1907.06140 7251.5
+1918.74719 884.7
+1930.49182 934.9
+S	676	676	1907.4778246
+Z	2	3813.108
+Z	3	5719.158
+532.52808 2047.7
+627.00684 612.7
+630.35693 861.1
+641.50122 718.1
+676.60931 1182.3
+680.61475 693.2
+742.56384 634.4
+855.25861 663.4
+906.44379 575.6
+925.89703 663.3
+1198.17761 3248.0
+1525.23755 625.8
+1705.65344 719.9
+1733.13940 697.3
+1824.81604 684.3
+1878.93127 1906.5
+1879.15747 2792.5
+1879.44470 19336.6
+1880.03125 1680.2
+1906.60071 925.9
+1907.05310 6784.9
+1907.46936 1078.2
+1918.76306 829.6
+1955.05737 652.4
+S	678	678	1879.94740793
+Z	3	5636.567
+Z	2	3758.047
+532.56287 1664.7
+549.17865 690.7
+560.88580 630.8
+612.90918 524.6
+630.43628 956.2
+676.63550 1164.1
+744.80811 616.1
+749.99060 611.5
+777.81378 701.9
+795.66504 845.1
+875.51233 668.3
+1057.24512 816.1
+1086.63281 626.8
+1117.75659 638.6
+1198.25330 3558.0
+1202.57605 688.8
+1365.92676 596.3
+1425.05652 611.4
+1650.11646 612.4
+1680.01892 696.2
+1878.89722 817.0
+1879.52820 19292.6
+1879.77991 4046.2
+1880.12854 570.6
+1907.04907 7633.6
+1930.66528 669.9
+S	679	679	1907.46999127
+Z	3	5719.135
+Z	2	3813.092
+532.51770 1842.8
+676.63373 1127.0
+707.06433 607.7
+731.11505 900.9
+733.09961 622.6
+795.68646 959.7
+815.42383 706.4
+844.47491 620.2
+876.11700 660.1
+1057.24829 659.2
+1198.15601 3478.2
+1295.45190 736.6
+1333.69812 669.1
+1354.58032 650.6
+1489.19641 733.6
+1502.11707 809.5
+1525.40759 912.1
+1777.40503 1041.8
+1876.73303 787.9
+1878.54163 757.1
+1878.94360 1561.1
+1879.24683 2427.7
+1879.53394 19666.0
+1880.19836 1048.6
+1880.78516 779.2
+1882.30713 656.6
+1906.69067 1757.4
+1906.97913 6143.6
+1930.59497 964.6
+S	681	681	1879.92840793
+Z	3	5636.51
+Z	2	3758.009
+507.39935 599.6
+519.99121 507.8
+525.62836 568.4
+532.51105 1902.0
+549.15588 755.4
+653.16864 688.4
+653.77277 559.9
+676.63104 1675.7
+690.74976 685.7
+707.24359 637.4
+766.54926 576.7
+795.66968 1034.3
+862.79987 652.3
+865.26782 668.4
+1035.05017 731.8
+1057.23962 877.9
+1174.72363 723.8
+1198.14026 3677.7
+1219.93909 682.1
+1378.01941 765.7
+1430.27051 594.8
+1561.53979 614.1
+1666.92578 735.8
+1878.47754 861.8
+1879.50391 19785.2
+1880.22437 857.0
+1880.46619 703.3
+1881.03357 723.7
+1881.73694 775.1
+1907.06482 7493.5
+1930.59888 953.9
+S	682	682	1907.4208246
+Z	2	3812.994
+Z	3	5718.987
+532.52472 1703.1
+553.58160 588.4
+611.64600 615.2
+613.41052 660.2
+667.34692 633.0
+676.64490 1123.6
+781.58765 976.7
+784.92249 570.4
+795.66968 1114.0
+1011.59930 632.2
+1019.75665 879.5
+1057.23767 908.0
+1170.52002 686.5
+1187.94287 874.6
+1198.17419 2987.3
+1234.41614 648.9
+1245.69788 629.4
+1326.81348 596.0
+1341.20483 659.8
+1438.11792 683.8
+1525.42822 1062.2
+1666.84790 638.1
+1836.53162 659.0
+1859.96191 702.9
+1878.09265 916.1
+1878.79541 1151.5
+1879.08386 925.2
+1879.53845 19654.3
+1879.95959 1136.2
+1880.22644 1498.0
+1880.90649 678.6
+1906.99292 7026.7
+1907.21143 1255.9
+1930.60950 1057.1
+1962.30127 706.1
+S	684	684	1907.49824127
+Z	2	3813.149
+Z	3	5719.219
+532.59003 1646.3
+537.15948 643.4
+647.41718 601.5
+663.94501 749.0
+676.63257 1001.5
+795.66742 933.9
+845.31921 683.8
+1057.23462 757.0
+1166.52075 666.4
+1198.31714 2924.4
+1205.06885 639.8
+1692.76404 592.5
+1777.20557 869.6
+1859.93799 735.7
+1878.19788 1043.2
+1879.07910 1486.3
+1879.52295 20086.6
+1879.91638 1513.2
+1880.17444 750.5
+1880.80725 1439.7
+1883.80481 739.0
+1907.06934 7054.8
+1930.54260 963.2
+S	686	686	1879.9338246
+Z	2	3758.02
+Z	3	5636.526
+532.54340 2024.2
+590.52832 647.5
+653.60260 635.2
+676.61987 1321.2
+705.44208 758.1
+782.53394 673.2
+819.46527 623.6
+838.55878 609.8
+932.44482 544.3
+1020.85144 739.3
+1059.02332 622.2
+1198.21387 3544.9
+1220.93958 646.3
+1313.12170 734.2
+1314.62329 722.0
+1411.41077 724.2
+1721.42017 594.9
+1878.53625 772.5
+1878.94385 1052.6
+1879.47058 20395.0
+1879.76196 1794.3
+1879.96265 1051.0
+1907.03235 7123.4
+1930.70154 716.1
+1930.90222 542.4
+S	687	687	1907.47499127
+Z	3	5719.15
+Z	2	3813.102
+532.54773 2369.4
+549.16528 641.8
+676.64667 827.9
+795.66162 913.3
+931.92157 660.5
+1153.12378 644.0
+1198.22693 3423.9
+1410.10022 717.3
+1648.45093 605.8
+1706.30554 661.4
+1807.96851 640.8
+1831.00525 645.7
+1878.06372 845.1
+1879.01208 2417.4
+1879.55139 18809.8
+1880.10608 3026.5
+1882.30200 817.7
+1907.09692 7109.1
+1954.91650 588.2
+1971.36548 764.8
+S	689	689	1880.00240793
+Z	3	5636.732
+Z	2	3758.157
+516.91779 591.5
+517.78754 584.4
+532.51813 2088.8
+643.72314 678.2
+670.84857 713.3
+678.01160 676.4
+731.12585 774.1
+759.16626 725.1
+795.66803 1107.6
+858.03564 800.0
+1032.67285 612.6
+1058.74268 636.8
+1188.34143 845.2
+1198.15698 2946.4
+1252.31165 595.2
+1388.34668 638.1
+1394.54431 785.2
+1396.70776 644.6
+1525.40417 751.1
+1849.32910 705.9
+1872.93237 619.0
+1874.38538 702.8
+1876.11963 766.5
+1877.40051 779.9
+1878.22729 926.3
+1878.48853 836.3
+1878.94360 2387.2
+1879.46033 19602.0
+1879.91858 2923.4
+1880.34009 956.2
+1880.72009 628.0
+1906.46472 721.5
+1907.11121 7702.5
+1918.72498 841.2
+1930.54089 1076.3
+S	690	690	1907.50799127
+Z	2	3813.168
+Z	3	5719.249
+532.54724 1913.7
+618.65039 661.4
+630.37988 776.9
+661.97888 585.3
+676.65637 551.0
+676.68701 610.8
+720.54639 590.6
+720.69763 676.6
+746.07111 611.9
+857.47058 593.5
+1057.56738 704.1
+1086.62866 695.9
+1112.71399 592.7
+1141.07019 566.9
+1182.41492 866.4
+1198.22607 3247.6
+1232.67786 609.5
+1336.36182 681.7
+1390.34912 596.4
+1687.92566 590.8
+1743.71191 611.2
+1750.81177 616.4
+1878.93457 1315.3
+1879.55127 18076.5
+1881.75952 640.0
+1907.04724 7520.9
+S	692	692	1879.9358246
+Z	3	5636.532
+Z	2	3758.024
+512.77747 665.8
+532.54163 1651.6
+564.88928 678.2
+568.49475 606.3
+600.59778 659.5
+610.97748 695.7
+676.62604 1391.8
+752.48206 647.5
+754.11548 621.8
+786.70459 747.9
+807.11853 698.2
+925.11505 713.5
+965.55920 604.4
+1084.19153 754.9
+1198.21155 3305.0
+1235.59961 722.6
+1369.08899 728.5
+1489.68433 716.7
+1638.93701 635.7
+1666.97668 841.0
+1776.92639 805.3
+1876.53381 687.5
+1878.36536 854.6
+1879.50720 19656.3
+1880.05457 944.5
+1882.45752 1061.2
+1906.95276 7140.9
+1918.74524 676.5
+1930.56152 907.7
+S	693	693	1907.46940793
+Z	3	5719.133
+Z	2	3813.091
+532.53973 2117.8
+549.16937 658.3
+570.09833 578.9
+630.42560 728.6
+676.63959 1329.5
+729.88898 638.2
+746.93719 646.4
+795.66614 1071.6
+1057.24072 904.1
+1074.47656 597.2
+1138.73083 561.6
+1140.42017 633.3
+1191.99329 656.6
+1198.20911 3610.9
+1304.94080 654.7
+1386.86768 655.3
+1709.39465 713.8
+1732.08777 629.1
+1860.09521 700.8
+1876.13672 738.1
+1878.71863 968.3
+1879.53064 19906.1
+1880.48083 772.1
+1881.13940 1139.2
+1882.25818 905.0
+1906.80151 1551.7
+1907.09045 6896.7
+S	695	695	1879.94040793
+Z	2	3758.033
+Z	3	5636.546
+532.52521 1883.3
+568.66394 794.6
+584.99237 688.4
+591.10425 578.7
+594.29846 596.3
+605.29407 572.6
+655.38409 555.0
+675.36792 768.3
+693.31848 557.4
+795.67621 1148.9
+1054.96594 673.5
+1113.91101 596.3
+1197.33472 707.7
+1198.17456 3118.0
+1217.77295 583.4
+1232.03357 766.0
+1681.64270 574.3
+1870.23755 841.2
+1878.74341 1714.4
+1879.49463 19496.3
+1879.97876 1470.5
+1880.24121 757.2
+1907.09351 7724.6
+1918.80334 785.6
+1930.58142 763.1
+S	696	696	1907.47099127
+Z	3	5719.138
+Z	2	3813.094
+532.51807 1773.6
+549.09399 615.8
+595.18408 617.2
+597.78265 644.2
+676.62463 1095.0
+795.68268 919.7
+913.91046 576.0
+981.06989 601.2
+1067.91162 566.9
+1079.32202 634.1
+1113.40137 757.7
+1198.16028 3159.5
+1404.26379 582.6
+1525.32971 1213.0
+1756.35278 747.7
+1776.93408 934.5
+1878.63208 892.5
+1878.90784 1132.1
+1879.48950 20042.4
+1879.77271 2690.9
+1880.05579 1683.5
+1880.39429 866.5
+1882.27393 755.2
+1907.10474 7278.8
+1918.81885 811.2
+S	698	698	1880.00640793
+Z	2	3758.165
+Z	3	5636.744
+521.46930 687.3
+532.50537 2134.5
+600.43872 600.7
+630.94061 619.5
+652.64496 641.8
+676.63531 1443.9
+717.53448 603.3
+767.18915 769.8
+907.29517 606.3
+1023.03320 687.1
+1057.24072 840.0
+1198.13171 3510.7
+1304.22119 712.1
+1525.45703 961.2
+1777.70361 1002.8
+1877.93530 647.9
+1879.12708 1795.5
+1879.52295 19285.0
+1879.96924 1992.0
+1880.59497 790.9
+1907.03870 7492.8
+1930.66663 1029.5
+S	699	699	1907.47440793
+Z	2	3813.101
+Z	3	5719.148
+532.50659 1773.9
+542.12946 536.2
+548.55792 569.3
+553.97284 606.8
+569.03113 651.6
+576.10144 607.5
+630.40747 998.7
+652.55743 641.2
+676.64240 1059.8
+771.93463 740.1
+795.66504 787.5
+880.98743 698.0
+949.85577 644.4
+961.28790 677.0
+1057.25659 875.7
+1078.15979 618.1
+1198.13501 3395.5
+1198.26599 625.3
+1246.03369 588.6
+1247.49463 631.1
+1394.31006 595.9
+1770.94507 772.8
+1860.00793 819.1
+1869.23596 562.3
+1878.24097 1085.8
+1879.03601 2425.9
+1879.32068 1996.8
+1879.54370 19392.2
+1880.09509 1473.9
+1880.70715 566.4
+1880.80859 524.6
+1907.07532 7861.0
+1930.57361 800.8
+S	701	701	1879.7818246
+Z	2	3757.716
+Z	3	5636.07
+532.54242 1805.0
+554.64398 606.6
+574.29926 644.7
+587.85236 651.5
+630.40265 642.2
+639.07477 700.9
+676.58844 865.9
+766.19452 600.2
+795.65851 984.7
+928.65192 682.3
+947.13580 655.4
+961.77191 823.5
+976.75549 629.1
+983.84814 641.9
+1019.78070 647.7
+1023.65204 599.4
+1050.73132 609.1
+1057.18079 818.9
+1143.59705 553.5
+1198.21277 3455.5
+1228.50549 590.7
+1235.53870 821.8
+1308.93823 603.7
+1363.02649 577.6
+1446.88208 630.3
+1468.97778 621.8
+1563.71790 648.2
+1582.62854 658.0
+1808.98132 624.9
+1873.42151 716.5
+1879.40979 20405.7
+1879.77441 1561.1
+1907.02661 7148.5
+1930.03943 655.4
+1996.71716 710.7
+S	702	702	1907.4465746
+Z	2	3813.045
+Z	3	5719.065
+529.16217 591.4
+532.55963 1706.8
+545.37665 532.6
+569.62579 589.5
+599.26630 607.0
+606.53467 578.7
+676.66138 728.0
+694.54578 627.0
+754.78326 702.2
+795.66864 897.0
+799.00232 624.0
+1013.60767 603.5
+1140.06055 714.0
+1198.24426 3162.1
+1525.31006 681.7
+1694.44385 655.0
+1843.33911 783.1
+1878.35999 852.7
+1878.98645 2023.3
+1879.24573 2428.6
+1879.59241 19063.3
+1879.90332 2058.7
+1880.18250 1470.0
+1880.45740 978.5
+1881.07776 881.9
+1907.05042 7240.1
+S	706	706	1879.9758246
+Z	2	3758.104
+Z	3	5636.652
+530.05365 609.6
+532.46100 857.3
+532.48999 1679.0
+532.52710 789.3
+658.94678 568.5
+676.63184 849.2
+704.01788 707.7
+713.58386 665.3
+731.07385 890.0
+795.66846 1098.6
+1019.76270 737.1
+1020.87915 660.1
+1108.18164 624.5
+1139.98401 619.8
+1198.08862 3158.8
+1381.84424 627.2
+1710.84924 681.1
+1878.23193 1676.6
+1878.63049 1059.5
+1878.87073 1828.8
+1879.51587 18788.5
+1879.81396 3803.8
+1880.16040 1518.3
+1880.40271 1019.6
+1880.75000 1086.0
+1882.04150 685.7
+1882.54773 720.9
+1906.88635 7244.5
+1907.59045 900.3
+1918.82349 997.7
+1930.46643 736.0
+S	707	707	1907.29024127
+Z	3	5718.595
+Z	2	3812.733
+532.54376 1931.7
+549.11481 814.9
+676.63416 830.9
+728.78491 539.6
+956.93134 674.8
+1036.12610 670.2
+1187.65747 900.1
+1198.21997 3427.0
+1768.91235 697.1
+1878.47656 891.9
+1878.82227 1175.9
+1879.05420 1103.9
+1879.53162 19739.3
+1880.24097 1365.2
+1880.50085 706.6
+1881.93970 994.4
+1906.72192 791.8
+1907.07849 7363.7
+1907.50171 824.6
+1992.95679 826.0
+S	709	709	1879.90340793
+Z	2	3757.959
+Z	3	5636.435
+532.59766 1902.0
+549.11377 838.2
+630.35822 774.4
+676.61743 1420.1
+736.69824 651.4
+752.20422 561.5
+948.65723 654.4
+960.29547 547.8
+1198.34497 3511.9
+1260.14197 682.1
+1322.50879 712.3
+1473.95801 698.4
+1476.44385 838.0
+1843.55725 609.3
+1877.47302 666.0
+1878.19678 747.1
+1878.39453 914.3
+1879.19910 1872.3
+1879.48364 19450.2
+1880.63831 845.4
+1881.06128 666.9
+1882.51868 743.4
+1907.01453 7219.2
+1907.30127 986.0
+S	710	710	1907.47540793
+Z	3	5719.151
+Z	2	3813.103
+532.60388 2061.4
+553.58997 596.0
+576.87207 581.8
+603.38562 584.7
+676.63220 905.6
+720.11230 671.2
+757.80768 672.8
+795.68060 925.3
+908.40967 653.1
+953.50140 666.5
+1079.36243 701.2
+1187.91895 708.0
+1198.35144 3616.2
+1399.23901 600.3
+1403.11829 615.2
+1694.13281 795.2
+1798.22388 848.1
+1871.98999 688.7
+1878.93787 1032.6
+1879.52539 19192.1
+1907.02173 7383.9
+1907.29297 1189.1
+1930.58496 1148.8
+S	712	712	1879.93799127
+Z	2	3758.028
+Z	3	5636.539
+532.58783 1947.5
+549.09229 765.4
+549.56720 540.9
+563.82080 590.7
+572.28778 649.8
+606.09497 671.5
+630.31000 684.4
+672.59064 741.4
+783.19299 564.7
+795.68555 1111.6
+825.40283 576.8
+947.82440 614.4
+954.76923 709.8
+1025.92261 620.2
+1057.22839 672.6
+1074.79163 739.8
+1198.31201 3500.4
+1233.72266 642.1
+1255.90479 783.8
+1334.59741 636.6
+1525.27942 746.4
+1720.69629 764.7
+1878.18713 950.5
+1879.24402 3631.5
+1879.51685 18687.8
+1879.96191 1987.5
+1880.40271 729.4
+1880.74854 616.3
+1881.05774 910.8
+1907.05066 7578.3
+1907.67102 596.5
+1930.41333 751.6
+S	713	713	1907.47299127
+Z	2	3813.098
+Z	3	5719.144
+532.57867 2182.8
+549.14862 831.0
+558.85095 619.7
+559.85144 664.5
+574.38129 697.6
+592.39276 587.8
+639.09296 569.1
+647.32184 735.7
+676.63367 1258.5
+795.68243 946.9
+812.49725 695.8
+820.22632 636.0
+833.02795 580.7
+871.22058 605.8
+882.28772 756.4
+925.82617 636.5
+1163.33862 748.2
+1188.18201 897.5
+1188.92773 594.9
+1198.29492 2883.1
+1279.80017 575.4
+1538.80212 681.5
+1644.47925 633.5
+1675.59058 615.0
+1777.32629 990.5
+1879.21094 2947.3
+1879.52454 19547.8
+1880.26709 765.7
+1881.81189 650.5
+1892.71387 649.8
+1906.83386 1143.6
+1907.10596 6855.5
+1930.61902 978.7
+S	715	715	1907.47040793
+Z	2	3813.093
+Z	3	5719.136
+532.56409 1928.0
+622.92285 756.3
+676.62390 736.9
+699.12317 605.8
+1198.26453 3130.7
+1212.27246 629.6
+1405.26233 697.5
+1450.99915 649.6
+1878.76501 1042.3
+1879.21826 3440.7
+1879.51306 19368.3
+1879.95984 2850.6
+1880.38928 884.0
+1907.07495 7388.3
+1930.60913 994.5
+S	717	717	1879.9608246
+Z	3	5636.607
+Z	2	3758.074
+532.53680 2127.8
+597.73749 602.4
+629.55402 764.2
+630.41016 782.2
+768.07434 682.0
+780.68591 573.7
+965.30444 640.7
+1019.78619 838.2
+1140.54773 768.3
+1178.81152 575.6
+1198.19531 2772.7
+1253.95569 692.3
+1265.05164 603.8
+1507.99146 573.8
+1872.31519 686.4
+1878.50623 922.6
+1879.20288 3285.3
+1879.49988 19477.8
+1879.81555 2526.8
+1880.47607 981.6
+1907.04919 7537.4
+1930.63147 1013.8
+S	718	718	1907.4298246
+Z	2	3813.012
+Z	3	5719.014
+530.97699 624.8
+532.54858 1731.2
+533.37061 589.3
+566.37421 547.8
+571.55811 660.0
+629.51312 699.9
+640.99957 647.5
+676.62225 951.6
+731.06464 707.9
+740.41693 695.5
+1058.89478 768.7
+1188.29980 780.5
+1198.22791 3471.4
+1359.30127 757.7
+1459.38916 656.3
+1525.29041 841.2
+1586.67700 671.3
+1591.63696 706.8
+1879.07019 977.4
+1879.20874 1356.9
+1879.48877 20208.6
+1879.87158 1022.4
+1907.01221 7218.6
+1918.78284 818.1
+1930.42249 968.0
+S	720	720	1879.94099127
+Z	2	3758.034
+Z	3	5636.548
+532.13055 722.5
+532.52386 2223.0
+541.61823 664.7
+630.36536 717.0
+660.99866 679.9
+676.63745 1125.8
+780.46075 694.6
+792.93774 618.8
+795.68286 913.0
+795.80420 660.5
+816.33636 559.0
+865.92133 687.0
+1057.24280 843.9
+1188.11792 716.6
+1198.17102 3426.6
+1333.30945 602.4
+1413.82642 611.8
+1499.14014 786.8
+1525.49255 721.5
+1869.96851 970.4
+1878.61853 954.8
+1879.05322 1325.7
+1879.52588 19679.0
+1879.99963 1887.6
+1880.86230 668.9
+1881.00464 653.8
+1881.29504 660.6
+1884.85425 761.6
+1907.06030 7486.8
+S	721	721	1907.46740793
+Z	2	3813.087
+Z	3	5719.127
+524.52380 623.3
+532.54962 2391.3
+549.09180 730.9
+561.28625 615.3
+614.68335 582.3
+630.34424 671.4
+676.60956 1014.6
+688.57574 594.6
+711.42706 605.6
+731.03809 691.3
+746.42688 673.9
+795.68451 664.0
+809.11005 611.4
+811.48157 766.1
+823.08960 646.9
+843.05878 619.5
+899.00775 623.5
+1057.20508 1155.8
+1198.23083 3519.1
+1220.01880 646.4
+1250.94604 861.2
+1530.18689 632.1
+1777.13257 758.5
+1877.87842 620.3
+1878.99414 1801.9
+1879.44873 19601.9
+1879.88879 1539.1
+1880.98425 764.9
+1907.05591 7178.5
+1918.73755 748.3
+1930.43164 1263.1
+1960.57520 668.3
+S	723	723	1880.00440793
+Z	3	5636.738
+Z	2	3758.161
+532.54150 2221.2
+549.10309 744.7
+561.23395 650.3
+619.34875 596.8
+630.33051 750.2
+688.52722 661.0
+717.54639 663.2
+795.69458 982.9
+1010.93658 663.7
+1076.29126 656.4
+1198.21948 3367.8
+1824.47192 684.2
+1878.04150 662.0
+1878.31982 738.8
+1878.50989 983.5
+1878.86487 919.7
+1879.46680 19607.4
+1879.70984 2366.9
+1880.24304 786.4
+1880.43408 556.9
+1880.92297 726.9
+1881.19165 669.3
+1907.10803 7308.0
+1930.39612 1316.1
+S	724	724	1907.50299127
+Z	2	3813.158
+Z	3	5719.234
+532.54529 2085.1
+676.61694 1196.5
+844.96008 637.5
+856.45807 604.9
+1057.20850 724.0
+1063.40588 628.4
+1130.26697 664.2
+1198.21680 3068.2
+1366.19336 721.3
+1525.29956 905.8
+1569.19250 629.9
+1608.39124 823.8
+1725.85559 685.6
+1872.49792 668.0
+1877.85437 653.2
+1879.47363 19647.9
+1879.73169 2338.9
+1880.81873 731.9
+1881.62915 865.5
+1907.05811 7312.2
+1911.48914 574.0
+1930.43420 864.0
+S	726	726	1879.90240793
+Z	2	3757.957
+Z	3	5636.432
+528.98322 653.8
+532.55511 1741.8
+549.13214 1060.9
+598.74115 691.0
+630.37207 724.3
+676.62512 913.4
+795.68481 730.3
+1198.23376 3222.2
+1324.79883 814.1
+1339.83679 570.4
+1524.31836 620.8
+1723.47791 742.4
+1870.07446 735.9
+1876.28967 1046.4
+1879.06152 2044.5
+1879.48462 19960.9
+1879.92615 1850.3
+1880.31702 836.5
+1881.50952 694.1
+1907.04358 7399.4
+1916.89563 610.0
+1930.52356 877.3
+S	727	727	1907.49040793
+Z	2	3813.133
+Z	3	5719.196
+532.54657 1938.2
+643.34741 626.0
+657.71881 726.5
+676.63184 1116.3
+795.68573 1153.2
+966.04865 600.8
+1057.25732 852.5
+1198.22449 3304.4
+1247.02393 630.4
+1459.62024 579.5
+1506.53979 635.1
+1525.35022 1023.7
+1728.62122 655.5
+1870.15796 927.7
+1878.61633 789.3
+1879.52393 19434.3
+1879.76648 2627.6
+1880.72058 672.4
+1906.84424 1724.0
+1907.11035 6694.5
+1907.70044 778.6
+1918.79321 816.2
+1930.56946 990.0
+S	731	731	1879.95699127
+Z	2	3758.066
+Z	3	5636.596
+532.55206 1783.4
+537.83954 671.7
+636.44604 830.5
+676.62750 1157.1
+709.08911 598.1
+722.26904 581.1
+896.28052 682.1
+930.02557 585.0
+992.94226 662.3
+1057.22717 822.2
+1188.30469 799.3
+1198.23694 3327.2
+1415.88269 672.8
+1456.70764 708.2
+1525.32336 962.3
+1588.15979 635.9
+1715.54578 768.7
+1777.47449 771.0
+1877.79614 598.1
+1878.85852 1533.8
+1879.17053 1588.3
+1879.49377 19804.4
+1879.83716 1066.2
+1880.14380 884.1
+1907.02515 7267.7
+1930.45764 1026.9
+S	732	732	1907.47040793
+Z	2	3813.093
+Z	3	5719.136
+532.56494 1573.1
+549.06195 654.0
+593.99249 575.2
+630.29791 732.1
+643.06732 713.9
+676.63525 957.4
+795.68756 1058.6
+899.73016 606.4
+904.83209 658.9
+938.71698 756.4
+1057.25024 770.0
+1104.52917 643.3
+1198.26526 3375.2
+1392.18762 605.6
+1526.75562 639.3
+1749.94031 684.9
+1843.13452 716.5
+1878.84485 1127.0
+1879.53333 19583.2
+1880.02820 1041.3
+1880.31104 1086.7
+1880.94641 820.1
+1881.20190 861.4
+1881.75500 740.6
+1907.04053 7606.1
+1982.02832 580.8
+S	734	734	1880.0278246
+Z	2	3758.208
+Z	3	5636.808
+532.63361 2322.9
+542.11993 603.4
+543.61407 602.9
+549.52789 611.9
+563.84930 605.4
+570.60907 627.4
+576.67169 663.6
+617.08386 582.2
+625.47235 648.8
+630.33405 963.8
+652.54132 574.0
+676.63397 1176.6
+750.35400 540.7
+795.69928 1056.5
+903.11194 697.9
+991.07977 757.1
+1019.77380 689.5
+1024.65222 672.5
+1057.22363 687.2
+1064.39319 685.7
+1065.85803 600.1
+1090.86475 698.7
+1198.41113 3280.6
+1360.37610 628.2
+1415.59167 623.6
+1510.27380 640.7
+1525.22375 880.8
+1557.36206 700.5
+1715.55334 652.2
+1761.72241 773.6
+1777.49805 791.5
+1833.01111 660.2
+1836.70789 617.6
+1861.73181 821.1
+1878.53528 722.9
+1879.52319 19434.4
+1879.94006 1892.5
+1880.51196 885.2
+1907.04517 8026.9
+1907.93311 701.9
+1930.37903 1274.2
+S	735	735	1907.42740793
+Z	3	5719.007
+Z	2	3813.007
+532.59009 1453.6
+600.50171 691.4
+622.48840 652.8
+630.38715 705.8
+676.63977 897.6
+689.76941 588.7
+731.10669 710.7
+777.27008 615.7
+795.68573 830.6
+952.06256 633.3
+964.27411 714.5
+968.13843 638.9
+1027.41345 717.3
+1188.09448 601.6
+1198.31714 3423.0
+1402.52612 622.1
+1715.56396 640.7
+1804.17920 835.6
+1879.14709 2471.6
+1879.53149 19585.7
+1879.88574 2624.5
+1880.32544 552.4
+1904.17065 661.2
+1906.93433 6856.6
+1930.52954 1378.8
+1976.18164 636.6
+S	737	737	1879.93440793
+Z	3	5636.528
+Z	2	3758.021
+531.18317 725.2
+532.59253 2046.1
+549.12781 812.6
+613.37134 590.0
+630.37866 785.5
+646.61237 525.5
+649.21777 647.9
+667.41132 530.1
+676.61792 946.6
+795.69922 1133.6
+1014.94189 709.5
+1057.20874 729.8
+1109.27124 611.4
+1198.31482 3538.4
+1525.32544 864.1
+1666.76086 639.7
+1777.70105 712.0
+1877.42273 756.4
+1879.04272 2224.0
+1879.46338 19772.2
+1879.86047 2435.6
+1907.05591 7593.0
+1930.49426 1134.5
+S	738	738	1907.4718246
+Z	3	5719.14
+Z	2	3813.096
+532.61224 2138.2
+549.11420 985.9
+668.44177 614.9
+676.62115 925.5
+731.06897 721.0
+867.16443 710.4
+984.68335 612.2
+1019.73553 721.3
+1141.81213 678.9
+1188.02209 795.5
+1198.36951 3268.9
+1353.90662 658.1
+1509.19336 660.5
+1747.99841 590.9
+1878.23706 653.3
+1878.82568 1597.2
+1878.90759 1576.2
+1879.15906 2254.9
+1879.47925 19888.2
+1880.11389 1731.6
+1880.97839 816.4
+1906.97827 7122.3
+1907.44800 931.1
+1930.48254 927.4
+S	740	740	1907.43740793
+Z	2	3813.027
+Z	3	5719.037
+532.59460 1307.5
+532.63904 844.3
+543.33276 707.1
+564.92047 637.8
+594.49597 650.1
+624.15985 611.6
+655.64661 653.9
+656.90479 651.8
+672.39374 611.7
+676.63916 745.9
+726.16791 751.8
+731.08136 832.9
+795.67761 964.1
+1057.25330 725.4
+1198.33044 2658.5
+1525.35376 910.6
+1694.62439 558.3
+1694.78516 601.6
+1875.55969 745.4
+1876.27051 768.7
+1877.77759 675.9
+1878.83716 1026.6
+1879.53040 18983.7
+1907.09790 6841.5
+S	742	742	1879.93340793
+Z	2	3758.019
+Z	3	5636.525
+532.66449 583.5
+532.70831 1790.4
+629.72333 568.3
+672.11969 586.6
+676.61920 1169.5
+780.61835 612.4
+880.51764 734.5
+903.11078 773.1
+1198.58301 3194.3
+1384.77393 565.0
+1877.87415 815.5
+1879.48340 19475.8
+1879.79822 3258.6
+1880.56018 1129.4
+1881.12549 1146.0
+1883.24060 657.2
+1906.74841 687.6
+1907.05005 7382.6
+1910.83838 747.4
+1930.46167 966.7
+S	743	743	430.2123596
+Z	4	1716.81814
+121.80762 2513.5
+134.62015 609.5
+141.43497 597.3
+145.30174 627.7
+149.88803 615.9
+169.49484 814.2
+171.30682 635.8
+189.95009 523.7
+198.92386 697.1
+199.20456 713.9
+199.26625 624.5
+199.30353 3072.9
+199.40131 1076.3
+203.99730 642.5
+206.17644 572.8
+212.55917 558.2
+214.52026 586.4
+243.83609 580.1
+247.69493 652.5
+268.64566 588.1
+280.18689 738.6
+285.23532 655.4
+285.29120 648.6
+322.15189 1165.1
+341.01620 1867.3
+345.24695 582.8
+350.27109 850.6
+360.13547 553.2
+363.89755 584.6
+369.57352 659.1
+381.36212 624.0
+402.74362 574.6
+407.61948 529.1
+427.55234 685.4
+450.32825 643.2
+476.75772 666.6
+491.77167 595.0
+502.60104 615.7
+532.70819 1877.8
+537.76740 2830.5
+538.26965 1537.0
+538.88251 657.4
+549.15826 832.3
+599.02856 562.5
+630.42291 751.7
+676.60425 798.6
+684.26733 600.9
+707.18732 705.2
+708.58716 533.6
+725.30499 651.6
+725.79858 541.0
+781.38086 651.2
+795.69751 795.9
+798.84058 652.0
+830.98340 591.8
+888.26660 512.5
+889.20398 610.1
+933.73834 543.0
+950.11993 579.1
+951.03052 576.7
+1057.19189 855.3
+1153.54456 525.3
+1188.32983 808.9
+1198.58740 3249.7
+1214.38818 663.7
+1248.48657 617.5
+1274.52197 656.0
+1587.26062 673.6
+1651.42554 698.0
+S	744	744	1907.50140793
+Z	3	5719.229
+Z	2	3813.155
+532.69342 1742.2
+565.23517 618.8
+604.66571 598.3
+676.61304 1132.2
+789.05725 707.5
+795.68787 876.4
+892.87927 599.8
+904.11823 725.0
+1005.55634 626.4
+1180.40930 611.2
+1198.55737 3085.1
+1201.94849 616.0
+1285.57190 784.0
+1525.28186 978.9
+1760.54834 666.6
+1877.22803 657.4
+1877.51318 623.0
+1878.47314 653.9
+1878.94629 1498.8
+1879.47131 19886.6
+1879.99231 1190.3
+1880.09619 1228.0
+1906.82202 1255.2
+1907.07202 6822.8
+1930.50781 843.9
+1949.38818 632.4
+1966.19946 797.9
+S	746	746	1879.89340793
+Z	3	5636.405
+Z	2	3757.939
+532.57855 2277.4
+630.36749 768.8
+676.55310 628.0
+676.62799 1070.5
+795.69598 952.4
+846.33636 657.9
+1014.13007 611.2
+1057.22314 895.2
+1079.49524 749.4
+1188.30786 738.8
+1198.29797 2921.3
+1283.75464 683.0
+1400.27759 663.2
+1600.55444 754.3
+1715.73840 829.1
+1748.54626 707.2
+1750.92615 695.9
+1878.81018 1471.5
+1879.10791 1288.9
+1879.48560 19792.7
+1879.82751 1309.4
+1880.10413 1204.0
+1881.61414 833.0
+1907.04626 7264.4
+1930.51379 1107.2
+S	747	747	1907.45040793
+Z	2	3813.053
+Z	3	5719.076
+532.45154 1107.4
+532.57910 1022.2
+575.29303 594.0
+630.36829 717.6
+653.03772 563.5
+659.12372 647.6
+676.58270 744.8
+795.67731 1103.4
+861.26349 639.2
+949.28778 689.3
+1188.18689 800.3
+1198.04102 1927.4
+1198.28564 998.7
+1588.13928 739.8
+1742.59778 689.7
+1777.67896 650.5
+1822.27197 652.8
+1878.25342 896.5
+1878.72351 1060.0
+1879.20959 3238.7
+1879.53625 19481.3
+1879.87073 2931.8
+1880.28857 1150.5
+1880.67456 825.0
+1881.69751 710.6
+1906.36206 876.5
+1906.84875 6250.9
+1907.28735 1193.0
+1907.65417 865.9
+1918.85400 962.3
+1930.46814 755.8
+S	749	749	1879.9048246
+Z	2	3757.962
+Z	3	5636.439
+532.58337 1791.6
+585.07159 640.2
+606.73724 749.5
+641.57495 606.1
+795.67615 858.9
+816.98535 649.3
+911.68866 758.8
+1021.16846 737.6
+1198.30676 3282.1
+1412.22363 602.4
+1419.82568 595.6
+1525.39307 721.6
+1878.44507 742.5
+1878.81335 1511.5
+1879.11475 872.6
+1879.50842 20369.3
+1880.20862 1056.3
+1880.63293 786.8
+1881.25378 719.6
+1881.62817 696.1
+1906.88330 7169.8
+1907.38867 1097.1
+1941.43469 716.6
+S	750	750	1907.34324127
+Z	3	5718.754
+Z	2	3812.839
+532.57159 1804.2
+565.86353 570.9
+630.34991 674.0
+646.30194 612.7
+676.66321 877.6
+676.93011 590.0
+795.67798 789.6
+910.87958 631.2
+978.85999 652.2
+985.64288 623.1
+1006.88800 655.9
+1111.19690 626.6
+1198.28467 3368.5
+1254.31421 603.3
+1308.81299 671.9
+1525.30420 726.2
+1669.11963 593.2
+1828.21924 638.3
+1870.13354 621.5
+1877.70239 780.3
+1878.62573 1172.1
+1879.03589 2818.2
+1879.23132 3808.5
+1879.59070 17726.8
+1879.96313 3191.9
+1880.22107 2100.3
+1881.46082 861.6
+1886.45447 681.5
+1894.65613 638.2
+1907.01196 7253.7
+S	752	752	1879.91040793
+Z	3	5636.456
+Z	2	3757.973
+532.54462 1708.1
+549.11353 639.2
+573.60767 611.6
+587.88116 545.8
+610.23187 561.5
+630.36920 599.1
+630.38910 574.6
+657.21136 587.4
+676.63055 1123.4
+697.64478 743.2
+795.67328 883.5
+1019.78979 796.3
+1042.72510 598.1
+1057.20691 1034.3
+1198.21875 3634.7
+1445.05188 727.9
+1612.06970 648.6
+1873.66919 794.7
+1878.18628 670.7
+1879.00488 1942.0
+1879.48413 19311.1
+1879.87561 1663.4
+1880.82849 800.9
+1907.04919 6977.2
+1918.83887 746.3
+1930.49146 1044.1
+S	753	753	1907.51524127
+Z	3	5719.27
+Z	2	3813.183
+532.54169 1592.4
+549.13391 805.6
+568.07819 672.9
+594.19727 619.8
+631.80927 597.2
+636.00476 592.4
+641.79504 588.9
+676.63275 877.9
+686.55640 584.3
+714.46765 669.8
+777.60657 745.5
+781.95953 670.5
+828.77155 707.5
+903.76807 633.3
+916.08600 675.8
+946.31458 589.4
+966.64001 643.1
+973.91705 600.5
+1020.91107 719.8
+1198.21045 3286.5
+1223.19507 540.2
+1333.11450 691.7
+1525.32629 843.8
+1743.87732 647.2
+1785.63562 826.9
+1877.83093 944.5
+1878.64111 1072.0
+1879.53235 19180.1
+1880.00391 584.1
+1880.39673 1579.6
+1897.47681 662.8
+1907.04871 7462.7
+1930.48950 1133.6
+S	755	755	1879.96440793
+Z	3	5636.618
+Z	2	3758.081
+516.31317 662.0
+518.40411 536.4
+532.58923 2033.3
+549.14954 601.8
+593.16022 580.7
+676.64392 1029.2
+738.31726 575.2
+754.05353 598.2
+757.03986 688.0
+821.47791 612.7
+887.99103 654.0
+1019.82867 775.3
+1057.25989 1068.7
+1188.12927 909.9
+1198.31958 3355.4
+1391.09741 709.8
+1527.38721 834.5
+1600.04993 637.0
+1672.82202 541.5
+1777.03320 671.1
+1812.50867 687.7
+1877.41101 752.1
+1878.23169 911.8
+1878.83240 963.6
+1879.20215 3297.8
+1879.56396 18813.6
+1879.93335 3548.2
+1880.16699 1025.3
+1880.48059 971.6
+1881.34082 1033.5
+1907.12585 7650.1
+1916.77454 646.7
+1930.61511 800.7
+S	756	756	1907.44099127
+Z	3	5719.048
+Z	2	3813.034
+532.56287 2044.2
+575.39233 704.0
+676.62408 910.7
+690.75262 728.2
+795.69855 844.2
+902.20880 565.4
+930.18158 730.4
+1079.31836 798.7
+1121.48938 735.5
+1198.26379 3814.4
+1699.88831 764.5
+1777.27014 1275.8
+1875.74158 818.6
+1878.83752 972.3
+1879.06628 1067.6
+1879.48987 19887.8
+1879.88879 1827.3
+1907.06995 7151.8
+1930.62463 1155.7
+S	758	758	1879.90824127
+Z	2	3757.969
+Z	3	5636.449
+524.31702 684.5
+532.54578 1471.9
+532.57629 984.4
+545.37781 603.3
+640.36798 729.7
+676.62531 1293.1
+781.29742 666.4
+795.67889 824.8
+989.67316 724.5
+1068.06299 648.4
+1198.23682 2720.8
+1305.38770 640.5
+1314.23584 646.2
+1374.19080 624.0
+1525.35010 796.1
+1707.38635 638.1
+1859.97266 665.2
+1879.49463 19940.3
+1879.79932 2449.7
+1907.14148 6901.6
+1930.53662 853.1
+S	759	759	1907.4708246
+Z	2	3813.094
+Z	3	5719.137
+532.53149 2140.2
+555.54626 682.3
+576.63159 600.4
+676.62524 918.2
+736.83704 620.6
+795.68317 1014.6
+903.83337 682.4
+983.29443 614.6
+1021.04938 709.1
+1052.41589 640.7
+1198.18750 3333.7
+1878.98267 1443.9
+1879.49133 19348.6
+1879.96521 1565.3
+1880.26099 999.0
+1907.06702 7548.5
+1930.38782 1017.8
+1995.73755 781.5
+S	761	761	1879.88499127
+Z	3	5636.38
+Z	2	3757.922
+532.50214 1739.6
+534.38879 607.2
+549.14166 776.1
+601.20435 696.1
+617.79199 705.7
+676.63477 1002.6
+717.33093 572.6
+795.68213 856.8
+1005.35919 565.7
+1027.23792 919.5
+1064.32996 608.4
+1088.16089 742.4
+1157.57349 570.7
+1198.12073 3221.8
+1207.39355 754.5
+1319.83215 706.3
+1525.39575 777.1
+1878.89148 742.1
+1879.52454 19858.1
+1879.76807 2837.7
+1907.03870 7852.5
+1930.51489 1159.6
+S	762	762	1907.46640793
+Z	2	3813.085
+Z	3	5719.124
+529.46460 641.4
+532.52490 2284.5
+795.67236 791.6
+984.86951 681.6
+1173.17761 623.9
+1188.16565 784.8
+1198.17468 3195.2
+1360.67578 566.5
+1387.02002 654.7
+1394.62354 835.1
+1507.73364 624.0
+1834.97046 719.4
+1876.25500 793.7
+1877.30615 892.6
+1878.49475 899.6
+1879.47070 19481.8
+1879.70520 4256.4
+1905.75745 599.7
+1906.95703 7269.2
+S	764	764	1879.9438246
+Z	3	5636.556
+Z	2	3758.04
+527.59467 610.7
+532.54932 1795.7
+659.83160 683.6
+676.66498 769.7
+733.15735 632.0
+795.67761 866.6
+930.83929 658.2
+1003.22302 669.0
+1123.56213 592.2
+1198.23010 3622.7
+1267.15662 661.2
+1345.64014 690.4
+1443.64136 649.8
+1450.67163 672.6
+1525.39856 700.5
+1633.75208 587.7
+1877.56140 845.7
+1879.35999 5463.2
+1879.58862 17883.6
+1880.15063 979.5
+1881.73169 667.9
+1883.98621 756.2
+1907.05786 7225.6
+1907.83838 888.0
+1914.22766 776.3
+1930.59705 1375.3
+S	765	765	1907.4738246
+Z	2	3813.1
+Z	3	5719.146
+532.55261 1902.0
+630.38293 687.0
+676.63763 887.6
+686.53314 862.7
+795.68396 1164.0
+914.62109 731.3
+934.78467 672.3
+991.81598 596.2
+1057.22937 884.5
+1198.23254 3263.7
+1525.37793 1127.3
+1607.39966 572.4
+1875.59851 715.8
+1878.16162 582.8
+1878.95361 577.1
+1879.53040 19279.7
+1881.15002 601.1
+1907.02795 7471.2
+1930.53015 1011.6
+S	767	767	1879.92140793
+Z	3	5636.489
+Z	2	3757.995
+532.49402 1767.9
+549.10254 592.2
+561.61011 841.9
+582.29559 574.6
+644.31903 531.0
+676.63098 749.9
+709.28851 607.3
+795.68219 776.5
+863.12305 593.3
+963.89624 612.9
+1042.99243 612.6
+1103.27356 642.0
+1198.10486 3203.9
+1220.26794 593.9
+1220.35242 574.4
+1489.03101 669.6
+1695.07556 581.4
+1777.51807 645.2
+1878.66504 1379.5
+1879.09790 1702.4
+1879.50171 18316.7
+1879.90234 975.7
+1880.07800 1313.5
+1880.34253 1432.9
+1882.10779 609.4
+1906.99219 6967.1
+1930.45532 1102.8
+S	768	768	1907.47199127
+Z	3	5719.141
+Z	2	3813.096
+532.47614 2151.8
+566.71387 538.4
+587.90240 586.9
+603.87622 613.4
+676.62347 1103.0
+736.15625 624.7
+793.93280 685.5
+795.67780 772.0
+858.08380 1027.8
+960.60333 655.7
+1019.69861 600.3
+1020.87634 865.8
+1057.21851 1033.3
+1061.21387 645.6
+1198.06030 3184.7
+1396.53137 654.9
+1408.69275 728.2
+1418.69202 677.8
+1879.49512 19953.5
+1879.80164 3374.6
+1880.69092 637.1
+1881.42798 747.1
+1907.08044 6978.0
+1930.65381 976.9
+S	770	770	1879.90099127
+Z	2	3757.954
+Z	3	5636.428
+532.56842 2259.4
+586.72229 601.3
+603.67804 547.7
+603.72168 666.8
+628.07782 814.3
+630.34406 877.7
+676.63190 1071.4
+690.75397 723.5
+743.05084 604.0
+785.31818 701.5
+795.67419 967.1
+838.16858 603.7
+867.17548 549.9
+996.60358 644.0
+1014.89435 621.5
+1182.23987 612.0
+1198.27002 3573.8
+1261.60193 585.1
+1491.83154 836.2
+1525.28735 1016.7
+1777.50562 957.0
+1875.04138 605.1
+1879.25012 1567.4
+1879.52124 20012.6
+1903.15369 639.3
+1907.00659 7813.6
+1930.43872 1207.3
+S	771	771	1907.42999127
+Z	2	3813.012
+Z	3	5719.015
+532.58710 1677.0
+560.96332 544.7
+566.98724 693.9
+630.39417 896.4
+642.15387 693.0
+642.18646 577.8
+676.62317 811.7
+731.11249 953.1
+884.43396 947.6
+897.52039 604.0
+899.18640 571.9
+932.73285 626.1
+1074.47083 660.7
+1188.20178 697.1
+1198.31396 3484.8
+1347.38916 585.1
+1456.91455 629.3
+1857.09705 614.5
+1878.98608 1255.1
+1879.47156 19601.6
+1879.99133 1242.2
+1880.34485 825.4
+1881.28271 916.7
+1884.15759 727.3
+1907.04883 7321.2
+1907.55286 661.8
+1930.60046 1236.4
+S	773	773	1879.9328246
+Z	3	5636.523
+Z	2	3758.018
+532.56769 2298.0
+548.34692 678.9
+630.36761 732.2
+654.52551 624.8
+676.62537 855.1
+795.67242 1133.0
+1198.26904 3277.7
+1246.07751 694.3
+1364.96167 746.6
+1409.25879 589.3
+1723.36780 738.2
+1777.57544 800.3
+1878.52502 1310.7
+1878.85547 875.6
+1879.18823 1656.7
+1879.48010 19436.9
+1879.80603 1327.0
+1879.97815 1506.3
+1880.45337 1172.9
+1907.05164 7543.5
+1930.50623 1077.6
+1974.43677 672.0
+S	774	774	1907.47399127
+Z	2	3813.1
+Z	3	5719.147
+532.61725 2367.4
+646.17957 694.3
+676.54700 634.0
+676.64307 889.4
+681.54108 575.9
+795.67664 1056.7
+833.11725 699.6
+975.78027 647.0
+989.79541 585.8
+1015.92090 604.7
+1057.25342 819.0
+1198.38464 3108.3
+1358.31201 579.3
+1437.58484 619.9
+1500.24707 664.8
+1508.05701 618.3
+1525.31458 709.4
+1604.77197 751.0
+1879.13232 3557.3
+1879.55176 19187.3
+1879.99451 2777.0
+1881.70361 592.0
+1881.88989 742.7
+1907.05005 7448.1
+1918.87097 739.7
+1930.47363 836.0
+1946.59363 546.5
+S	776	776	1879.94099127
+Z	3	5636.548
+Z	2	3758.034
+532.57147 1854.1
+606.19794 497.2
+676.62769 1196.3
+680.23273 603.6
+738.17596 682.0
+757.83783 672.0
+801.53668 578.2
+1057.22998 924.1
+1113.98608 710.4
+1188.12195 797.0
+1198.28101 3845.5
+1315.89978 654.3
+1493.02344 598.3
+1521.89880 615.9
+1815.95801 653.2
+1878.21753 768.2
+1879.49487 19830.4
+1879.79150 1783.8
+1879.87903 1294.2
+1880.21887 791.8
+1880.72729 804.2
+1907.05164 7574.4
+1913.88770 646.9
+1930.51453 949.2
+1953.43909 611.1
+S	779	779	1879.9248246
+Z	3	5636.499
+Z	2	3758.002
+532.61298 1250.0
+538.10986 685.6
+549.17969 765.9
+564.50171 730.1
+568.89728 729.4
+578.07874 605.8
+596.49646 587.8
+616.31464 522.7
+631.93237 666.6
+653.46631 557.3
+656.86359 600.5
+669.44684 615.2
+676.62207 900.1
+795.67566 911.0
+831.93921 641.7
+1019.77802 909.0
+1058.27380 732.9
+1079.33313 570.7
+1087.16663 579.8
+1189.58472 610.8
+1198.37000 3132.8
+1330.75964 630.4
+1363.70361 648.7
+1399.97168 603.5
+1567.71338 685.5
+1773.84009 696.6
+1860.80005 651.4
+1879.01770 1541.0
+1879.46680 19491.4
+1880.05139 1141.2
+1907.05444 7679.7
+S	780	780	1907.47799127
+Z	2	3813.108
+Z	3	5719.159
+532.61823 1752.4
+676.64783 1325.7
+731.09515 695.4
+795.67908 831.1
+801.51825 636.7
+897.84467 608.9
+908.56848 580.6
+1003.93591 579.4
+1010.35144 797.5
+1019.74353 754.6
+1198.38147 2933.5
+1268.78687 864.2
+1525.35449 753.4
+1812.76782 640.2
+1816.18542 685.4
+1877.94604 807.2
+1878.79785 1271.8
+1879.14063 1673.9
+1879.54431 19574.9
+1879.95728 1826.5
+1880.32813 1411.4
+1881.10095 901.2
+1907.05493 7545.5
+S	782	782	1879.9008246
+Z	3	5636.427
+Z	2	3757.954
+532.62494 1963.4
+676.62585 977.5
+690.14325 648.6
+731.10718 908.1
+795.66254 831.6
+817.97516 633.8
+892.56207 610.0
+986.86005 682.8
+987.58514 635.7
+1057.21436 807.5
+1084.98328 604.5
+1198.39539 3278.1
+1248.06860 584.5
+1525.36377 669.2
+1594.02527 665.6
+1705.03979 552.0
+1876.15894 805.5
+1878.66589 858.9
+1878.98816 1209.5
+1879.48840 19896.9
+1879.77258 2037.1
+1880.23108 1078.9
+1907.04993 7269.1
+1930.57129 854.0
+1932.64514 822.9
+S	783	783	1907.2742246
+Z	5	9531.332
+532.60327 1466.8
+561.53558 665.4
+622.93372 775.4
+630.35571 632.4
+639.42291 673.9
+657.69940 585.1
+705.79742 590.5
+747.49597 608.6
+755.74921 571.2
+789.59210 706.2
+891.34131 634.5
+1057.23633 860.8
+1188.09155 786.7
+1198.34961 2945.2
+1206.51147 662.3
+1284.41943 729.6
+1760.07239 746.8
+1775.95264 734.9
+1787.81604 598.6
+1851.83936 622.5
+1877.86804 719.0
+1878.53564 1218.2
+1879.03650 1580.3
+1879.52161 19847.0
+1880.01367 1364.2
+1880.37036 1155.6
+1880.57788 1143.4
+1907.05286 7408.8
+1919.37109 623.3
+1930.58679 714.5
+S	785	785	1879.90924127
+Z	3	5636.452
+Z	2	3757.971
+532.58234 1862.9
+564.35400 681.7
+577.58459 670.4
+600.93018 572.0
+657.03229 582.8
+666.15210 683.9
+676.62860 923.1
+680.99786 589.1
+731.09930 726.8
+795.67871 1150.8
+872.94641 611.3
+1119.22205 839.6
+1193.06213 637.4
+1195.14978 628.8
+1198.30298 3383.6
+1277.41736 576.5
+1315.60364 636.9
+1416.40149 598.3
+1489.85095 701.8
+1525.40552 732.7
+1589.03430 622.5
+1667.08789 804.8
+1732.98132 686.1
+1777.53186 698.2
+1822.15015 669.8
+1826.39160 732.2
+1879.05518 1389.8
+1879.50317 19709.3
+1880.21729 1078.3
+1882.15161 796.5
+1907.00964 7097.8
+1930.60474 955.9
+S	786	786	1907.47340793
+Z	3	5719.145
+Z	2	3813.099
+515.05597 722.4
+516.65271 584.9
+517.11237 627.4
+521.32709 567.0
+532.57520 2145.8
+555.72473 635.6
+630.36029 911.9
+637.63348 616.3
+676.62421 1402.6
+731.06140 899.5
+795.69202 884.5
+857.99017 722.3
+914.88098 680.9
+949.74371 695.7
+1019.77551 789.5
+1057.22876 1121.0
+1179.87500 716.4
+1188.30896 884.4
+1198.28149 3558.4
+1489.07324 640.8
+1777.50244 719.3
+1799.80945 670.3
+1879.49683 20218.9
+1880.13037 1109.9
+1890.14319 788.0
+1907.05920 7387.2
+1918.75647 632.5
+1930.45691 911.2
+S	788	788	1879.9438246
+Z	3	5636.556
+Z	2	3758.04
+532.62042 1770.2
+593.07257 597.1
+598.63922 576.7
+676.61890 771.9
+715.27136 594.3
+795.68207 1101.2
+857.34204 612.8
+1182.46021 679.4
+1198.39124 3099.8
+1263.91528 714.0
+1283.09277 796.5
+1287.79822 598.6
+1428.23157 606.8
+1442.81213 768.9
+1506.32947 802.1
+1566.96606 632.6
+1676.30701 584.5
+1869.65552 692.0
+1878.86035 1507.4
+1879.49255 19885.3
+1880.09607 1819.0
+1907.05823 7536.1
+1944.85071 620.8
+1959.43384 608.6
+S	789	789	1907.4718246
+Z	2	3813.096
+Z	3	5719.14
+520.16962 675.6
+532.58636 1414.6
+545.34760 756.2
+549.12628 940.9
+552.58380 629.4
+586.08649 636.6
+611.25336 646.5
+630.36951 669.3
+653.82904 612.5
+660.18945 588.2
+676.62567 1119.8
+690.79907 636.9
+720.41089 744.8
+731.08502 1134.2
+795.67242 863.0
+1052.44360 720.7
+1198.30884 2939.1
+1223.61426 629.2
+1348.43347 626.4
+1457.86841 602.3
+1530.43652 584.4
+1543.04175 638.1
+1777.38391 937.9
+1860.05823 667.9
+1878.43481 784.8
+1878.66980 1284.6
+1878.99597 833.5
+1879.49316 20336.2
+1880.08472 997.8
+1880.40808 1031.4
+1892.26697 776.6
+1907.04102 7318.4
+1950.83362 643.2
+S	791	791	1879.93140793
+Z	2	3758.015
+Z	3	5636.519
+532.55200 1799.1
+550.15503 605.5
+630.40466 629.4
+676.62457 1394.4
+687.57001 732.0
+789.34485 595.6
+792.20300 722.0
+795.66504 1110.4
+879.59277 631.8
+1057.22803 738.9
+1198.23413 3275.6
+1295.75146 692.1
+1564.67480 741.5
+1878.07666 850.0
+1878.91003 769.6
+1879.49792 19641.4
+1879.89380 753.9
+1906.96313 6483.7
+1930.56421 1151.8
+S	792	792	1907.4718246
+Z	2	3813.096
+Z	3	5719.14
+522.41620 584.7
+532.56598 1742.3
+542.49475 693.3
+653.04822 1155.2
+676.57825 938.8
+795.66931 814.2
+951.42151 725.6
+1057.14905 1025.4
+1187.88843 779.3
+1198.26208 3361.3
+1877.08228 652.2
+1879.35596 20698.9
+1907.05310 7724.7
+1930.41260 917.0
+1936.62427 686.6
+S	793	793	417.7292046
+Z	4	1666.88552
+107.01292 623.9
+112.20759 595.9
+119.61279 598.2
+120.65070 712.4
+121.80325 1976.3
+126.29163 621.2
+127.52834 561.2
+127.66751 560.8
+148.33769 572.6
+157.28355 798.8
+157.58942 585.7
+161.64723 559.8
+169.48256 605.9
+182.76799 617.1
+187.41910 518.1
+197.22266 511.0
+198.91930 692.8
+199.20993 922.4
+199.25980 732.1
+199.28531 2423.4
+199.30089 1009.7
+199.30865 1957.9
+199.32487 785.1
+199.34978 606.0
+199.38315 703.6
+199.40834 818.5
+228.56706 563.8
+245.48402 566.0
+255.26653 696.2
+292.01785 577.8
+317.17419 626.9
+368.83698 701.5
+426.34735 723.6
+453.62366 597.1
+469.85260 706.6
+492.89063 635.4
+532.57092 1906.7
+576.55786 553.5
+598.52057 547.0
+630.35876 718.2
+644.72534 551.6
+676.58630 868.8
+706.81165 566.9
+707.14056 747.4
+709.27808 706.7
+731.06647 725.8
+760.05853 562.6
+795.66602 692.7
+796.12683 658.2
+801.64343 528.5
+825.12952 532.7
+1011.65979 686.2
+1021.05103 810.3
+1048.35437 591.7
+1057.17883 1014.6
+1187.82446 648.5
+1189.18262 577.0
+1198.27869 3142.8
+1265.45227 667.4
+1525.26965 653.0
+1618.73083 645.5
+1636.97559 681.4
+1669.58313 578.4
+S	795	795	1879.88540793
+Z	2	3757.923
+Z	3	5636.381
+525.88770 566.0
+532.61584 1846.8
+630.36707 814.8
+659.34149 630.3
+676.61383 1040.4
+795.70044 702.3
+1001.10809 627.9
+1198.37964 3133.7
+1267.50476 639.6
+1337.97131 603.4
+1568.58765 569.7
+1719.69031 1124.9
+1872.22778 594.0
+1873.94128 972.2
+1879.35217 9173.1
+1879.63037 15630.1
+1880.56555 1771.2
+1880.91248 1137.8
+1907.11084 7265.1
+1930.47473 1263.4
+S	796	796	1907.46899127
+Z	3	5719.132
+Z	2	3813.09
+515.28564 626.3
+532.58130 1763.7
+533.11139 685.1
+591.65881 623.0
+655.84418 634.5
+676.67194 918.7
+857.97528 797.7
+986.50610 638.7
+1090.28882 645.5
+1110.58655 823.1
+1198.29443 2944.2
+1219.95959 737.3
+1251.19470 681.6
+1525.25049 1280.5
+1778.21313 567.5
+1872.97107 733.6
+1877.91626 1046.7
+1878.82874 2717.4
+1879.12390 2247.4
+1879.35437 4550.7
+1879.62549 18284.3
+1880.13831 2101.6
+1880.41943 2675.8
+1880.63123 1241.0
+1880.90576 1462.3
+1881.30969 835.2
+1907.00024 7321.9
+1936.32275 662.9
+1994.78381 717.9
+S	798	798	1907.42799127
+Z	2	3813.008
+Z	3	5719.009
+525.45508 715.2
+532.57245 1850.1
+630.36279 648.9
+633.33228 619.7
+650.55457 655.3
+651.79010 603.9
+676.62207 741.5
+768.20496 683.0
+792.21295 663.2
+795.68542 1049.9
+889.29224 659.6
+916.82666 697.5
+987.58789 570.6
+1019.79492 620.8
+1021.04388 644.4
+1057.25549 645.7
+1198.28015 3468.8
+1499.24548 605.9
+1525.30750 796.6
+1610.00452 668.7
+1716.88806 1946.0
+1876.75757 656.6
+1877.85632 1164.6
+1878.92859 950.9
+1879.57153 16949.5
+1880.17688 1592.1
+1880.44592 1386.7
+1880.68152 990.1
+1881.10754 1173.0
+1881.74329 716.7
+1882.24597 769.5
+1883.14197 706.2
+1907.04578 7939.2
+S	800	800	1880.0068246
+Z	2	3758.166
+Z	3	5636.745
+517.78064 609.5
+526.42200 625.9
+532.62579 1677.7
+573.14563 695.8
+630.39532 817.6
+676.62622 761.0
+813.64850 638.8
+818.96545 719.6
+918.13947 579.5
+1018.64923 606.5
+1057.22742 1007.9
+1156.85925 601.9
+1198.40503 3037.9
+1452.09277 618.2
+1500.86304 618.1
+1523.99707 608.6
+1525.38354 931.5
+1718.23853 703.1
+1805.33472 690.5
+1878.75598 1326.8
+1878.97266 1804.9
+1879.50146 19141.8
+1879.77161 2702.8
+1880.02039 2836.2
+1880.66626 1026.4
+1881.40283 864.4
+1906.49719 811.5
+1906.97546 7081.0
+1907.22998 1200.5
+1918.78149 806.4
+1930.58752 765.8
+S	801	801	1907.45240793
+Z	3	5719.082
+Z	2	3813.057
+519.67908 617.2
+521.22601 632.3
+532.63165 1861.4
+538.26117 701.4
+561.13623 719.1
+614.91003 750.0
+630.40833 767.6
+676.63135 1305.3
+695.14404 570.1
+747.69232 546.2
+795.69867 1061.9
+815.61774 632.4
+877.76349 667.2
+1057.22815 861.9
+1198.41150 3145.3
+1225.24756 797.9
+1301.51440 632.1
+1434.19666 614.9
+1525.39417 972.5
+1652.01880 788.1
+1816.76746 635.8
+1877.64246 1023.2
+1878.13245 610.3
+1878.28027 688.4
+1878.95459 1049.5
+1879.52112 19810.2
+1879.84558 916.5
+1880.08960 1131.0
+1880.30725 991.6
+1880.64880 646.3
+1906.98462 6902.7
+S	803	803	1879.9178246
+Z	2	3757.988
+Z	3	5636.478
+532.65198 2039.3
+676.61426 1390.2
+781.23090 641.4
+795.68903 798.8
+819.40063 717.6
+1038.12866 723.4
+1057.21509 833.8
+1140.56616 768.1
+1155.00598 629.8
+1198.45667 3032.4
+1246.16418 635.5
+1265.46289 585.8
+1442.84900 640.1
+1774.85168 752.6
+1859.95886 824.3
+1878.84253 759.5
+1879.46985 20200.3
+1880.09558 695.0
+1881.56714 868.8
+1907.07532 7457.1
+1930.53760 1281.8
+1983.62939 655.7
+S	804	804	1907.44224127
+Z	2	3813.037
+Z	3	5719.051
+532.60748 1748.8
+535.70099 692.0
+549.14728 938.3
+562.48206 610.3
+676.63580 785.0
+731.14233 697.6
+765.13605 651.3
+785.11066 617.3
+795.67395 1036.7
+803.00989 663.4
+856.18976 681.9
+932.21283 784.5
+984.48694 663.0
+1019.76495 724.0
+1039.19812 638.3
+1198.36035 3373.2
+1384.14319 595.9
+1502.36145 651.4
+1878.49756 1412.1
+1879.26306 4544.5
+1879.53223 19006.2
+1880.06018 2055.9
+1880.63806 1229.0
+1881.36841 643.0
+1882.61194 617.2
+1907.05371 7256.3
+1930.56299 1070.2
+1992.37744 735.6
+S	806	806	1879.92699127
+Z	3	5636.506
+Z	2	3758.006
+532.62769 1616.6
+572.49060 630.7
+657.08594 580.2
+676.61926 998.2
+683.84686 636.6
+722.20972 612.9
+744.78802 608.5
+795.68170 1139.6
+916.90295 569.6
+1057.21448 761.3
+1079.35681 658.8
+1171.22314 633.9
+1184.51196 706.3
+1198.40442 3306.2
+1283.65698 706.6
+1687.64197 780.9
+1744.18469 634.1
+1877.13660 662.1
+1878.92053 780.0
+1879.47058 19551.8
+1879.76855 1097.9
+1880.58386 911.1
+1906.65247 1669.5
+1906.95203 6820.4
+1907.61682 619.4
+1930.46094 881.8
+S	807	807	1907.3958246
+Z	2	3812.944
+Z	3	5718.912
+532.58148 2089.6
+537.63849 580.3
+538.77216 737.8
+634.67969 525.3
+676.62573 949.0
+733.76270 822.5
+759.01788 622.4
+790.09406 570.9
+796.93835 581.0
+835.00031 558.3
+979.61896 567.2
+980.51526 630.1
+1057.27478 809.7
+1187.95923 826.6
+1198.30090 3295.2
+1279.76465 593.2
+1339.84900 760.2
+1367.75391 596.7
+1435.70435 721.6
+1454.72803 636.8
+1752.20642 583.6
+1786.24597 576.1
+1879.15649 2188.9
+1879.53857 17932.2
+1879.95422 2183.0
+1880.13525 1838.3
+1880.54382 982.9
+1880.80554 1052.2
+1881.18665 950.2
+1907.05273 7356.7
+1918.66675 1016.7
+S	809	809	1879.8968246
+Z	2	3757.946
+Z	3	5636.415
+514.01727 586.1
+532.54852 1846.9
+622.98529 629.3
+647.45264 566.2
+676.63544 980.0
+711.98187 662.8
+777.99316 637.5
+795.69202 981.4
+949.57050 628.8
+1057.22925 797.3
+1198.22498 3500.6
+1269.80859 727.7
+1290.98315 720.8
+1354.44116 659.2
+1449.67139 833.7
+1621.93604 715.3
+1654.12317 648.1
+1704.60498 618.1
+1878.39014 808.1
+1878.79651 944.3
+1879.08179 848.7
+1879.50708 20247.6
+1880.56799 677.5
+1907.00037 7118.4
+1930.42969 1039.6
+S	810	810	1907.4668246
+Z	3	5719.125
+Z	2	3813.086
+532.55011 2206.5
+549.12170 723.7
+549.29559 593.4
+556.20721 542.6
+587.58331 656.9
+630.37006 662.3
+676.61749 1186.9
+727.18530 576.9
+731.07074 739.3
+1057.19702 805.8
+1198.22729 3298.2
+1207.38086 636.8
+1452.84448 636.9
+1570.89978 722.6
+1627.82483 694.8
+1633.22534 708.0
+1697.99438 707.3
+1777.57544 806.1
+1876.80493 720.6
+1878.69421 1188.6
+1879.45532 18721.0
+1880.22510 1306.4
+1881.57166 783.2
+1907.03284 7294.2
+1930.48389 1010.3
+S	812	812	1879.90640793
+Z	2	3757.965
+Z	3	5636.444
+532.51715 1754.7
+552.08698 563.9
+630.37183 762.9
+654.43292 624.8
+667.42761 975.2
+676.62030 829.4
+743.26288 738.2
+758.52734 584.2
+795.69415 1005.8
+932.63159 571.5
+1057.19788 917.7
+1079.27271 811.1
+1198.16064 2878.5
+1525.33813 947.4
+1777.36475 777.0
+1877.20117 654.4
+1879.48962 19552.8
+1906.77649 1794.2
+1907.06812 6789.8
+S	813	813	1907.45899127
+Z	3	5719.102
+Z	2	3813.07
+528.78503 670.9
+532.56458 2379.7
+552.26685 637.6
+676.62122 994.4
+681.55896 654.7
+771.36981 662.7
+795.66833 929.1
+976.67633 681.5
+981.21344 619.9
+1040.84900 611.6
+1188.18628 1036.4
+1198.27075 3171.8
+1237.90039 684.2
+1368.36646 620.3
+1385.72131 767.3
+1525.45239 820.1
+1777.42627 975.4
+1878.75793 1214.6
+1879.48010 19825.2
+1880.15588 732.4
+1905.40906 627.7
+1907.02356 7473.0
+1909.75928 688.3
+1911.56213 612.2
+1930.54333 775.7
+S	815	815	1879.8648246
+Z	2	3757.882
+Z	3	5636.319
+532.54510 2200.4
+574.17926 611.9
+584.85535 686.3
+601.99048 617.5
+662.04205 595.2
+676.60913 773.1
+718.83484 591.3
+723.24506 557.3
+724.58551 626.9
+724.62103 538.2
+795.68835 1116.9
+807.72101 582.5
+1021.02545 646.4
+1057.19373 892.0
+1068.43140 625.2
+1071.46606 576.4
+1116.48035 599.5
+1142.78906 621.5
+1152.07080 590.1
+1172.86133 647.2
+1185.10974 756.0
+1188.26306 1077.8
+1198.21948 3332.5
+1314.66016 696.9
+1489.50793 710.4
+1573.47278 708.8
+1686.86340 663.2
+1805.12842 610.8
+1862.92395 704.2
+1879.44812 20031.2
+1880.40869 607.2
+1880.73096 673.6
+1907.03760 6940.1
+1930.58972 977.2
+S	818	818	1879.93099127
+Z	2	3758.014
+Z	3	5636.518
+532.54169 1950.2
+549.11658 703.9
+953.58282 584.6
+1000.58405 717.5
+1196.51990 695.1
+1198.21277 2999.3
+1217.79980 594.4
+1259.26355 548.6
+1878.13281 683.5
+1878.54346 745.6
+1878.92188 1092.5
+1879.25720 3664.4
+1879.55493 18965.0
+1880.14490 635.5
+1880.56079 1384.2
+1882.14636 828.6
+1906.92554 7416.0
+1918.74866 938.5
+1930.50232 956.1
+1986.30029 829.8
+S	819	819	1907.46824127
+Z	3	5719.129
+Z	2	3813.089
+532.50641 1841.9
+554.81024 602.8
+602.15668 597.6
+630.35272 808.2
+633.13068 602.9
+676.61365 959.6
+795.69794 717.3
+805.88654 670.8
+940.92169 681.3
+1057.20264 631.4
+1184.50891 660.3
+1198.12842 3362.7
+1218.48523 553.2
+1218.60291 562.7
+1454.60413 649.5
+1525.29749 935.7
+1657.69275 680.1
+1878.26709 921.9
+1878.50378 1125.9
+1878.73303 816.7
+1879.46240 18918.3
+1879.73010 4394.4
+1880.13586 1591.1
+1881.71423 800.9
+1906.88037 7046.5
+1907.15002 784.4
+1930.46448 800.9
+S	821	821	1879.90399127
+Z	2	3757.96
+Z	3	5636.437
+532.51343 1837.1
+594.30811 551.3
+676.63666 987.7
+731.15839 642.3
+740.51752 609.2
+756.24371 604.4
+756.30267 538.1
+795.67560 923.1
+842.72375 628.4
+964.28571 753.9
+1068.24268 607.2
+1085.65564 564.1
+1088.17358 617.8
+1198.15222 3043.7
+1198.43481 570.0
+1231.37061 664.6
+1525.49268 661.6
+1877.46863 872.0
+1878.67981 1245.7
+1879.14429 3967.9
+1879.52563 18732.4
+1879.88342 3804.5
+1880.12512 979.9
+1880.47473 985.0
+1880.75854 1017.7
+1907.10193 7776.3
+1918.70935 603.7
+1930.71411 736.7
+S	822	822	1907.2228246
+Z	3	5718.393
+Z	2	3812.598
+532.51703 1662.4
+549.13843 804.8
+579.17432 691.1
+587.90112 621.0
+676.65271 962.3
+677.16541 660.5
+720.06525 584.5
+729.01147 634.9
+795.68451 1065.7
+826.50641 528.3
+1019.75018 725.3
+1198.15942 3447.9
+1512.44226 677.0
+1552.53931 612.1
+1777.39502 784.9
+1792.42188 649.1
+1877.96790 1406.1
+1879.07605 1194.9
+1879.28503 2130.8
+1879.55872 19562.1
+1880.04456 1295.7
+1881.13989 1137.8
+1881.85657 816.3
+1883.09045 720.6
+1907.00903 7091.9
+1907.30774 918.6
+1930.54541 1243.9
+S	824	824	1879.91740793
+Z	3	5636.477
+Z	2	3757.987
+532.57507 1821.2
+600.64349 620.9
+630.36713 724.4
+635.22272 675.6
+653.32043 598.2
+656.07867 612.9
+676.65729 1124.2
+795.67993 1345.3
+888.21185 621.1
+1019.80121 660.4
+1040.63208 716.1
+1057.27771 960.6
+1198.28638 3142.9
+1202.04419 658.9
+1525.27869 1037.4
+1585.44458 687.1
+1777.27966 740.3
+1878.52002 1086.5
+1878.86011 966.7
+1879.59729 19382.3
+1880.39453 1119.1
+1907.09180 7702.5
+1907.40271 750.3
+1930.49231 1073.9
+S	825	825	1907.4908246
+Z	3	5719.197
+Z	2	3813.134
+532.56500 1612.1
+569.63446 607.0
+642.43933 692.6
+731.12012 1060.7
+795.69177 803.3
+810.48224 601.5
+970.68732 628.0
+1019.70551 761.8
+1057.24915 801.2
+1068.75049 603.8
+1198.26428 3406.2
+1501.22412 800.8
+1771.96680 713.8
+1879.54504 20329.2
+1879.88599 597.5
+1880.39868 798.4
+1907.06433 7336.4
+1930.57312 867.0
+S	827	827	1879.97399127
+Z	3	5636.647
+Z	2	3758.1
+532.59241 1898.4
+558.56165 677.4
+676.65131 857.7
+795.69342 1009.7
+1079.51404 607.5
+1198.32153 3261.1
+1667.31140 637.4
+1879.27722 2002.1
+1879.55164 19993.7
+1907.08826 7560.1
+1930.70361 1156.4
+S	828	828	1907.4708246
+Z	2	3813.094
+Z	3	5719.137
+532.60089 1807.2
+587.94714 537.2
+676.61926 867.4
+703.03485 512.9
+713.70654 751.6
+731.11676 1075.3
+754.23682 583.7
+795.67590 936.7
+807.95868 606.2
+817.84125 579.8
+831.57147 602.8
+852.41504 537.4
+1014.34418 743.0
+1054.41565 695.6
+1198.34668 3246.4
+1346.98816 645.5
+1385.91931 692.5
+1436.46545 698.5
+1503.66345 673.9
+1631.24487 595.0
+1682.38123 577.4
+1869.86719 760.4
+1878.73682 1177.5
+1879.47803 19976.9
+1880.20874 1516.8
+1881.03320 889.3
+1907.03052 7233.0
+S	830	830	1879.96699127
+Z	3	5636.626
+Z	2	3758.086
+532.57001 1495.9
+676.62738 1125.0
+679.89734 667.6
+686.35315 581.4
+693.65875 580.5
+727.13831 664.5
+731.12177 906.5
+795.68506 925.6
+814.35254 549.0
+926.68823 647.8
+956.47400 692.6
+989.56152 606.3
+1057.22571 712.3
+1131.37524 675.5
+1186.44128 626.2
+1189.71521 665.5
+1198.27332 3429.9
+1257.14038 635.6
+1379.90527 600.4
+1576.89441 650.9
+1698.84753 791.2
+1725.99658 791.8
+1777.14648 717.7
+1870.21460 656.5
+1878.62183 1311.2
+1878.94031 1280.3
+1879.49756 19180.0
+1879.99792 939.6
+1880.32544 945.8
+1880.85583 819.4
+1907.05176 7570.1
+1907.44604 646.3
+1930.61853 1097.9
+S	832	832	1879.94624127
+Z	3	5636.563
+Z	2	3758.045
+525.30975 684.9
+532.55310 1843.8
+598.27686 573.4
+617.42206 586.7
+630.37274 1087.5
+671.12134 649.9
+676.62366 621.6
+782.66321 752.9
+803.70087 649.9
+950.54230 675.9
+990.07306 709.0
+1035.35962 837.3
+1051.15332 585.5
+1134.93762 607.2
+1198.23340 3490.9
+1305.00354 642.2
+1689.87292 640.2
+1878.03564 702.9
+1878.42383 965.1
+1878.94922 1598.1
+1879.18640 2193.1
+1879.46960 19021.3
+1880.00732 879.8
+1880.56458 1305.9
+1880.95532 767.5
+1906.81543 1808.7
+1907.08374 7236.3
+1908.92566 618.3
+1918.68286 767.4
+1930.51563 1033.9
+S	833	833	1907.4718246
+Z	3	5719.14
+Z	2	3813.096
+532.52985 1992.0
+534.04059 605.4
+535.51666 610.5
+539.67242 649.6
+546.50000 599.6
+595.21143 614.6
+630.39154 771.9
+635.00885 580.0
+674.81586 603.9
+676.62146 1279.7
+688.52924 615.3
+727.00476 550.8
+731.10504 791.0
+795.69080 1003.6
+989.65021 696.3
+1140.47473 723.5
+1198.18738 3433.2
+1331.65247 759.6
+1876.23425 1077.1
+1878.31921 1013.5
+1878.62268 836.9
+1879.48560 20031.4
+1879.86157 882.4
+1880.69067 792.0
+1907.05115 7354.8
+1928.03430 656.7
+1930.58484 861.5
+1972.67029 730.3
+S	835	835	1879.9888246
+Z	2	3758.13
+Z	3	5636.691
+532.56799 2237.5
+621.26727 581.7
+630.38397 884.6
+662.65259 527.1
+676.63977 563.3
+734.46289 586.8
+740.20093 683.1
+795.69434 924.0
+839.68140 587.6
+858.02209 927.4
+916.19482 689.8
+1005.93591 627.5
+1061.78247 619.8
+1188.00574 650.0
+1198.25903 3527.1
+1201.74292 534.2
+1201.86218 555.9
+1217.30298 761.1
+1378.31006 623.6
+1669.92639 706.8
+1676.23901 722.3
+1698.10608 754.0
+1870.25220 904.7
+1876.10669 707.5
+1878.66760 777.3
+1879.08423 1770.5
+1879.54333 18218.8
+1880.03955 2014.5
+1880.25073 1274.5
+1880.50391 784.0
+1904.21106 634.1
+1906.29028 699.3
+1906.99756 7298.2
+1918.73376 712.5
+S	836	836	1907.37999127
+Z	2	3812.912
+Z	3	5718.865
+517.00708 597.7
+532.55206 1986.4
+532.58569 602.2
+549.16016 701.4
+553.27301 672.0
+621.23932 644.1
+630.41772 912.6
+676.63434 1035.1
+782.80206 603.8
+786.50653 617.3
+795.66650 721.1
+900.26392 551.7
+934.55444 795.6
+943.70935 675.2
+966.04718 746.5
+1020.90387 807.2
+1057.23523 688.5
+1131.65430 694.7
+1198.23181 2547.5
+1212.82556 669.4
+1234.47424 607.7
+1246.56091 706.6
+1357.64587 658.6
+1878.55054 980.2
+1878.87585 1117.7
+1879.51746 18942.3
+1881.15784 664.1
+1885.58130 654.6
+1906.55176 644.1
+1907.05737 7355.2
+1907.32971 590.4
+1930.59753 736.1
+S	838	838	1879.9308246
+Z	3	5636.517
+Z	2	3758.014
+532.61853 1666.8
+579.78314 616.3
+676.61682 771.0
+676.69049 810.3
+724.78943 687.7
+777.40240 565.2
+795.68384 1072.0
+1097.72595 599.2
+1121.03333 609.5
+1164.24414 629.7
+1198.37952 3193.7
+1269.85730 640.7
+1525.40015 750.2
+1665.42273 679.4
+1777.52576 748.4
+1808.48230 624.5
+1876.73657 831.0
+1879.61743 18627.2
+1882.63184 746.1
+1907.04163 7303.3
+1907.43079 876.4
+1930.55237 867.3
+S	839	839	1907.47599127
+Z	3	5719.153
+Z	2	3813.104
+532.60406 1667.0
+545.03308 589.5
+549.14026 687.2
+576.43384 646.5
+642.99933 669.7
+709.06165 661.3
+728.04401 579.9
+795.67676 1162.7
+812.35352 674.6
+880.09692 750.8
+1006.68536 621.2
+1036.61035 645.0
+1114.42993 630.2
+1127.32410 690.9
+1198.34253 3277.4
+1289.01392 639.1
+1645.55566 696.7
+1691.69849 567.8
+1875.78040 629.2
+1879.47229 19329.9
+1879.69458 3682.6
+1907.05762 7866.7
+S	841	841	1907.48040793
+Z	2	3813.113
+Z	3	5719.166
+532.56226 1809.9
+646.51782 556.2
+676.61572 1239.1
+792.32397 628.2
+795.68024 989.3
+843.24310 614.0
+870.11475 620.6
+1015.99121 626.5
+1057.20923 1079.3
+1198.25806 3096.3
+1303.88647 742.1
+1341.98218 618.7
+1676.50525 643.0
+1877.96631 756.6
+1878.55139 959.9
+1878.95422 1379.6
+1879.45374 18822.3
+1879.70264 1441.8
+1879.89355 1928.0
+1880.41089 990.8
+1882.18628 812.0
+1907.06580 7083.0
+1930.72461 946.0
+1930.98267 580.8
+S	843	843	1879.94240793
+Z	3	5636.552
+Z	2	3758.037
+512.58710 516.4
+532.55591 1988.1
+549.16840 1148.5
+641.76080 662.4
+676.61627 1121.2
+793.59369 565.7
+795.69940 934.7
+1198.24573 3153.6
+1201.19519 676.2
+1204.05823 640.9
+1310.52747 633.8
+1477.10974 626.1
+1795.55078 598.7
+1860.15259 684.5
+1869.66553 915.7
+1874.43799 594.7
+1879.01416 1334.9
+1879.47913 19608.2
+1879.90503 1851.0
+1880.23621 1195.1
+1907.04382 6879.4
+1909.75488 683.2
+1930.62622 864.1
+S	844	844	1907.46940793
+Z	3	5719.133
+Z	2	3813.091
+532.53387 1825.0
+546.39935 632.3
+630.43695 767.9
+676.62250 906.5
+731.16895 761.8
+795.68726 866.2
+854.84552 613.0
+1198.19312 2960.2
+1233.40198 617.8
+1257.99219 684.6
+1316.54419 565.0
+1567.82446 684.4
+1748.51428 696.3
+1857.29834 869.2
+1879.17041 3015.0
+1879.48975 19585.5
+1879.82532 2258.1
+1907.04468 7417.6
+1910.88757 845.5
+1930.71582 1209.3
+S	846	846	1879.8425746
+Z	3	5636.253
+Z	2	3757.837
+532.56677 1649.7
+535.48865 551.4
+569.88800 648.7
+570.99341 585.9
+600.79840 540.9
+630.38989 981.1
+632.63885 727.0
+676.64905 1347.5
+702.58929 663.7
+769.34534 697.1
+795.69214 1039.6
+834.24969 603.7
+957.37384 575.0
+1018.67688 713.7
+1176.75562 658.8
+1198.27087 2873.4
+1436.52100 739.7
+1525.35657 774.8
+1537.41589 718.8
+1712.64697 653.7
+1878.30896 1444.5
+1878.59961 866.4
+1879.12317 2559.9
+1879.54614 19177.2
+1879.93518 2344.1
+1880.54175 945.6
+1880.76453 1027.3
+1881.16052 892.3
+1906.74744 1419.6
+1907.02405 6576.7
+1930.52563 707.6
+S	847	847	1907.47140793
+Z	2	3813.095
+Z	3	5719.139
+532.57220 2023.1
+549.13361 1106.5
+560.63617 649.4
+655.03461 771.4
+676.61426 979.0
+783.35657 686.4
+804.17053 661.8
+878.23730 747.9
+913.61505 664.2
+1008.94684 684.9
+1140.32910 863.1
+1191.88245 755.0
+1198.27380 3293.5
+1281.46460 614.7
+1878.22888 787.2
+1879.08850 1598.1
+1879.47864 19810.9
+1879.92480 1746.1
+1880.27686 684.9
+1880.78369 662.3
+1906.96350 6744.1
+1930.48804 740.9
+S	849	849	1907.3828246
+Z	3	5718.873
+Z	2	3812.918
+532.57019 1858.9
+642.69415 696.0
+676.63922 759.8
+783.16638 672.0
+795.69293 909.5
+850.88892 651.7
+1029.95789 642.2
+1198.27039 3229.6
+1525.37085 783.8
+1753.02734 613.5
+1801.07129 621.6
+1879.05737 1390.4
+1879.54651 18374.2
+1880.19580 836.6
+1907.06335 7507.2
+1933.11194 682.0
+S	851	851	1879.9298246
+Z	2	3758.012
+Z	3	5636.514
+513.35132 609.7
+532.57117 1399.1
+538.40936 618.3
+596.35950 592.0
+602.81622 635.9
+630.33447 779.5
+644.85925 630.1
+676.64764 1003.7
+728.57666 709.5
+779.88202 670.7
+839.99469 628.5
+867.41864 526.3
+985.12787 630.0
+1057.25146 888.8
+1198.27490 2939.6
+1213.59961 639.7
+1361.73328 607.2
+1525.26343 632.7
+1536.26514 660.1
+1579.22412 707.1
+1831.86182 670.9
+1876.75781 806.3
+1878.36194 661.9
+1878.70703 1158.8
+1879.20313 2262.7
+1879.54285 19792.7
+1879.94543 1931.0
+1880.41541 1057.3
+1880.68787 1151.1
+1881.19543 679.1
+1906.33789 627.6
+1907.03210 7453.4
+1930.34448 1146.5
+S	852	852	1907.53524127
+Z	3	5719.33
+Z	2	3813.223
+532.60950 1792.2
+549.12183 624.2
+676.67499 1046.8
+731.06384 822.3
+795.69067 1074.5
+964.73462 556.9
+993.95068 540.5
+1011.51544 574.0
+1019.76233 859.3
+1198.36304 3045.0
+1618.33179 757.0
+1645.44031 612.7
+1777.50378 963.5
+1869.56299 685.6
+1878.69934 721.5
+1878.92444 909.2
+1879.35962 7171.7
+1879.60876 17239.8
+1880.25513 1766.1
+1882.22327 720.7
+1906.35413 785.2
+1907.07629 7433.3
+1997.38647 618.4
+S	854	854	1879.95324127
+Z	3	5636.584
+Z	2	3758.059
+532.59692 1999.3
+549.09357 753.8
+552.79736 636.6
+627.31726 692.8
+630.33844 769.1
+639.61444 616.4
+651.21973 560.4
+676.63745 917.4
+795.68530 769.7
+984.01788 728.5
+1039.53320 658.7
+1062.59119 683.0
+1113.35498 647.7
+1182.04980 686.0
+1198.33557 3271.4
+1267.90442 678.9
+1307.59021 583.7
+1320.84326 746.0
+1377.38538 811.1
+1451.06433 834.8
+1464.56909 764.6
+1525.26770 824.8
+1526.65076 600.0
+1709.57861 723.0
+1879.53809 20162.7
+1880.67017 985.7
+1906.80017 786.4
+1907.07483 6935.2
+S	855	855	1907.51140793
+Z	2	3813.175
+Z	3	5719.259
+532.59583 1930.4
+540.79822 604.0
+630.36407 873.5
+654.72931 697.0
+676.65228 816.5
+731.07794 853.7
+760.08270 678.0
+803.28918 662.5
+864.51782 627.6
+979.92096 558.9
+1057.25354 989.8
+1148.93494 567.8
+1198.33154 3328.1
+1277.14429 693.5
+1613.32007 878.8
+1726.77051 730.5
+1877.87817 733.8
+1879.11511 3247.6
+1879.57263 19109.4
+1880.01733 2448.7
+1880.44922 1054.0
+1880.67432 1017.5
+1907.07703 7545.5
+1930.46875 1114.6
+S	857	857	1879.86499127
+Z	2	3757.882
+Z	3	5636.32
+517.74438 593.6
+532.59314 2151.0
+537.30750 601.4
+660.76978 618.7
+676.63147 1066.9
+680.37018 529.5
+813.71735 601.8
+815.05005 631.9
+861.16473 673.1
+895.13281 609.3
+1021.12201 677.7
+1057.23169 687.1
+1110.93750 752.4
+1143.15857 740.0
+1156.69043 731.1
+1198.32568 3269.1
+1525.39929 663.6
+1666.78320 696.4
+1878.62793 1019.4
+1878.91785 1244.0
+1879.51855 19843.1
+1879.96655 1389.1
+1880.15088 955.3
+1880.39124 949.2
+1883.23535 632.8
+1907.06592 7022.0
+1907.34204 1173.9
+1930.57104 785.0
+S	858	858	1907.45840793
+Z	3	5719.1
+Z	2	3813.069
+520.29211 542.2
+532.59772 1805.0
+543.25940 565.9
+602.14252 587.9
+630.36316 920.3
+665.19421 672.2
+676.63733 1179.1
+785.33881 649.2
+787.67316 655.2
+1006.57135 713.2
+1147.85596 658.4
+1188.34155 765.3
+1198.34058 3608.6
+1329.37671 599.0
+1489.42017 721.2
+1525.25305 642.4
+1568.19324 840.6
+1569.21985 639.5
+1854.25647 828.8
+1867.28442 616.5
+1878.59436 988.0
+1878.86633 1550.3
+1879.13074 1265.0
+1879.51318 20025.6
+1879.84497 1698.1
+1880.14880 1543.9
+1907.04492 7502.0
+1930.47266 895.6
+S	860	860	1879.8845746
+Z	2	3757.921
+Z	3	5636.379
+532.60193 1799.5
+568.82379 658.7
+676.62646 956.5
+697.19073 575.1
+731.11053 686.0
+737.96783 589.6
+1017.43964 710.1
+1019.81006 698.0
+1198.34741 3227.9
+1525.37585 963.6
+1534.60242 656.8
+1777.03357 970.2
+1879.12512 3341.6
+1879.49402 19396.9
+1879.84473 3142.7
+1906.72070 2577.6
+1907.00171 6089.9
+1918.66614 827.0
+1930.53259 1160.7
+1939.36389 735.7
+1983.97241 622.5
+1993.55676 648.2
+S	861	861	1907.46940793
+Z	3	5719.133
+Z	2	3813.091
+532.57117 2148.8
+549.13220 855.3
+649.61920 600.7
+676.65710 941.3
+723.36078 596.0
+749.56818 554.5
+782.32544 617.7
+795.68555 967.6
+954.40552 574.4
+1019.77887 791.9
+1198.27612 3512.6
+1427.32434 545.7
+1489.37146 882.5
+1525.35596 658.5
+1834.30786 716.5
+1875.35229 858.8
+1876.26868 701.8
+1877.64795 742.3
+1878.03552 929.0
+1878.69055 897.6
+1879.58862 19472.7
+1880.41577 1210.5
+1881.15381 1153.1
+1906.88159 7207.4
+1930.55518 1228.4
+1995.02307 600.5
+S	863	863	1879.9328246
+Z	2	3758.018
+Z	3	5636.523
+507.66226 643.0
+524.65601 580.4
+527.74829 660.6
+532.57867 2052.6
+562.50592 643.6
+630.35565 562.4
+676.62360 972.5
+724.73279 593.7
+779.97028 645.0
+795.70013 929.6
+1198.29895 3023.7
+1525.23425 851.2
+1878.91833 890.4
+1879.15845 1968.2
+1879.48389 19553.3
+1879.81274 2270.6
+1880.16968 849.0
+1880.99280 926.7
+1907.07239 6924.7
+1907.62671 704.3
+1930.40112 823.7
+S	864	864	1907.2558246
+Z	3	5718.492
+Z	2	3812.664
+532.58392 1944.6
+567.34216 598.1
+575.40906 623.4
+630.35065 764.9
+676.61810 1071.2
+678.87262 663.4
+795.68250 909.8
+802.73340 520.1
+875.20929 616.2
+935.91046 727.3
+937.39557 652.1
+1020.90210 622.2
+1142.37268 626.1
+1187.78003 909.1
+1198.31506 3339.7
+1249.96753 632.1
+1292.77441 810.9
+1776.98267 927.0
+1879.12805 1405.8
+1879.48376 19824.3
+1879.82422 2079.6
+1880.09961 997.2
+1907.06091 7450.7
+1930.42395 1097.8
+S	866	866	1907.46399127
+Z	2	3813.08
+Z	3	5719.117
+532.58948 1434.9
+532.62268 653.8
+555.77502 678.7
+795.68823 921.6
+878.51251 617.7
+939.55475 521.8
+1121.93811 636.0
+1140.21033 654.7
+1170.33105 666.0
+1198.31348 3764.1
+1295.05383 681.4
+1327.95313 728.3
+1360.06982 677.3
+1376.24109 604.9
+1687.76538 585.6
+1879.32629 5802.9
+1879.60120 18105.0
+1880.37659 1535.6
+1881.18298 606.3
+1881.47644 721.9
+1907.05481 7412.9
+1930.46936 1138.9
+1936.39246 693.1
+S	868	868	1879.9358246
+Z	2	3758.024
+Z	3	5636.532
+507.00198 607.4
+532.55884 1672.1
+676.63300 1072.1
+795.69470 1111.3
+796.93268 665.5
+858.03027 695.8
+893.21375 689.4
+906.99890 557.0
+922.18225 563.7
+1015.82782 704.5
+1057.25037 769.8
+1110.72900 655.0
+1198.25183 3104.2
+1541.96985 620.9
+1585.33325 646.0
+1662.57043 616.3
+1777.43030 982.5
+1843.60840 726.6
+1860.17297 567.5
+1878.52893 793.8
+1878.98730 625.2
+1879.25940 2978.7
+1879.51746 19372.5
+1880.50366 1093.6
+1882.32446 726.7
+1907.06323 7300.9
+S	869	869	1907.44540793
+Z	3	5719.061
+Z	2	3813.043
+532.53333 2017.8
+578.73792 709.5
+634.88733 669.5
+637.09448 727.4
+677.82281 552.9
+696.13196 582.9
+700.91217 584.8
+782.14252 736.4
+795.68646 956.5
+894.63843 627.7
+922.14215 630.4
+948.62085 712.9
+1021.30774 618.9
+1040.89905 589.7
+1140.38953 682.3
+1198.19421 3539.8
+1504.97241 645.6
+1837.19592 678.5
+1875.94409 674.4
+1878.35205 767.9
+1879.16528 1811.4
+1879.54028 19485.2
+1879.92273 1102.5
+1880.06836 1349.5
+1906.98584 7464.7
+1930.41602 823.0
+S	871	871	1879.92340793
+Z	3	5636.495
+Z	2	3757.999
+532.56116 1212.5
+551.20947 634.4
+630.36597 687.6
+676.61938 729.0
+826.26978 712.9
+854.61938 649.3
+883.55530 730.8
+929.46503 630.0
+1198.23792 3311.3
+1315.17676 601.1
+1407.23828 660.7
+1583.91528 605.6
+1664.35107 628.3
+1704.19885 600.4
+1777.64111 728.4
+1878.12354 679.8
+1878.51868 1349.7
+1878.77771 626.3
+1879.05237 1819.3
+1879.21167 2709.6
+1879.48267 19282.6
+1879.88147 1308.2
+1880.07886 1078.5
+1880.53772 1070.9
+1881.12549 784.2
+1906.70801 921.8
+1907.04480 7514.9
+1907.49438 704.8
+1918.73083 845.9
+S	872	872	1907.5128246
+Z	2	3813.178
+Z	3	5719.263
+532.56415 1889.8
+534.17639 811.6
+592.36566 758.1
+593.56458 560.3
+626.09424 567.6
+630.30908 799.7
+669.63196 679.4
+676.61517 905.9
+721.89777 595.3
+783.44159 638.6
+795.71436 1068.5
+907.80383 657.0
+1057.22290 898.9
+1140.50391 722.6
+1198.26306 3349.5
+1525.14648 743.5
+1715.85767 674.2
+1878.18616 842.1
+1878.91943 1328.8
+1879.47473 19869.3
+1880.05225 1215.4
+1881.07056 711.0
+1907.00403 7116.5
+1907.29651 1224.0
+1930.29578 852.3
+1983.54736 663.9
+S	874	874	1879.8938246
+Z	3	5636.406
+Z	2	3757.94
+532.51007 2224.0
+549.12933 816.4
+643.42102 608.0
+676.62469 1171.3
+683.09381 577.7
+723.72668 728.9
+774.51404 798.5
+795.70331 822.2
+806.55731 640.3
+924.68628 636.4
+945.33081 752.0
+1057.20447 891.1
+1188.22363 716.2
+1198.14490 3060.4
+1469.21765 653.1
+1542.16882 720.0
+1595.74902 673.6
+1723.68115 612.9
+1878.88562 1275.5
+1879.48376 19848.6
+1880.11377 1344.5
+1883.36194 603.2
+1906.77966 1193.6
+1907.09131 6919.0
+1930.49841 962.6
+S	875	875	1907.4985746
+Z	2	3813.149
+Z	3	5719.221
+532.55621 1396.4
+549.08765 916.2
+567.74957 534.5
+676.62042 1105.6
+795.70795 919.7
+851.66852 675.7
+1021.05237 668.7
+1037.08777 610.1
+1110.85205 647.6
+1198.25208 3516.3
+1283.92554 641.8
+1525.23120 954.2
+1568.99744 647.8
+1859.87073 582.1
+1877.48291 754.2
+1878.65222 929.8
+1879.03735 1674.7
+1879.48999 19580.7
+1879.91663 1573.3
+1907.05847 7212.7
+S	877	877	1879.89124127
+Z	3	5636.398
+Z	2	3757.935
+528.87579 683.0
+530.80762 667.4
+532.54303 2040.0
+535.67560 555.6
+546.61011 601.8
+551.20593 557.6
+568.01776 559.2
+646.87170 683.2
+676.63562 943.8
+795.69653 955.2
+914.32959 664.7
+948.30017 669.6
+1002.11792 602.2
+1043.42249 551.4
+1185.71936 573.7
+1198.21631 3435.0
+1267.09863 599.3
+1642.54456 625.6
+1700.92822 741.7
+1869.64258 706.8
+1873.95190 657.7
+1876.75427 876.8
+1878.25110 926.1
+1878.93042 1226.6
+1879.22156 1802.7
+1879.52051 19874.6
+1880.08899 764.8
+1881.25903 634.0
+1907.05811 7458.0
+1910.13696 665.6
+1967.42480 662.2
+S	878	878	417.7292346
+Z	4	1666.88564
+108.90460 667.0
+121.02364 635.7
+121.79515 611.6
+121.80378 2001.1
+121.80838 982.3
+123.97399 555.1
+128.48018 541.4
+131.81139 506.5
+133.13533 925.9
+163.95541 592.5
+174.59398 491.1
+174.59784 505.9
+185.79099 587.9
+192.60732 664.8
+198.92934 929.8
+199.19379 933.5
+199.29120 2836.9
+199.30417 1481.3
+199.38948 766.8
+211.48778 571.8
+222.13931 566.6
+224.22713 501.6
+230.99403 551.7
+233.55885 716.1
+234.66446 704.7
+255.27315 596.0
+303.63818 483.3
+334.24146 577.9
+344.08423 582.4
+350.28055 895.4
+359.31680 610.1
+429.88141 556.3
+451.86008 537.4
+463.58209 1253.8
+469.91281 740.1
+519.29431 626.1
+532.53510 2334.8
+549.11578 606.4
+560.95325 519.9
+561.21106 606.5
+656.31189 679.6
+676.56885 691.8
+709.67786 686.1
+795.71967 1350.5
+876.26794 565.9
+939.57092 585.5
+1057.29150 834.3
+1087.88159 595.0
+1138.31226 661.5
+1140.16431 754.3
+1198.20154 3371.2
+1263.00415 651.6
+1525.35437 774.5
+1649.51270 588.7
+S	879	879	1907.4798246
+Z	2	3813.112
+Z	3	5719.164
+532.53320 1804.8
+542.32275 604.7
+549.09357 783.8
+549.12036 839.4
+571.03729 765.5
+631.49207 556.8
+671.76489 689.5
+676.64044 1110.2
+745.52161 645.8
+782.28711 591.2
+795.71185 825.0
+828.28772 578.8
+1174.26746 643.1
+1198.18933 3574.1
+1276.78564 661.1
+1286.12012 662.7
+1525.33081 857.0
+1694.12903 678.9
+1763.32495 633.6
+1875.72192 754.7
+1877.24622 819.4
+1878.32458 763.2
+1878.94336 2343.6
+1879.52039 19590.3
+1880.10120 1654.0
+1880.70593 784.3
+1906.97339 6889.4
+1930.47375 1063.7
+S	881	881	1907.3845746
+Z	2	3812.921
+Z	3	5718.879
+532.54706 1837.1
+630.35278 812.9
+638.52588 556.9
+676.58661 983.2
+717.69537 645.2
+725.35712 585.9
+733.62689 642.8
+744.68256 716.3
+795.71777 971.2
+924.77496 691.4
+1124.83215 697.6
+1132.90442 820.4
+1161.77405 589.2
+1198.23108 3376.8
+1324.98621 622.7
+1523.55774 560.4
+1525.30383 981.2
+1718.10535 1045.1
+1872.40698 866.7
+1879.38025 21159.5
+1907.00098 7572.3
+1918.72864 776.1
+1930.46155 1293.1
+1931.48059 740.6
+S	882	882	422.0658246
+Z	1	421.058
+109.51381 539.1
+111.56413 654.2
+121.80489 2083.5
+127.67654 508.3
+133.13782 933.7
+146.90761 740.8
+157.58397 601.9
+165.25227 706.0
+180.68399 564.1
+198.93130 948.1
+199.20114 1393.2
+199.25339 671.3
+199.28549 971.5
+199.29938 3556.3
+199.31578 637.5
+199.39806 1198.0
+207.01593 631.3
+210.02470 1953.1
+217.92767 532.6
+232.85422 586.3
+233.54594 589.9
+249.75223 541.4
+254.05362 596.0
+361.04553 560.9
+404.03049 1290.1
+408.44632 631.1
+419.59979 602.9
+427.49780 615.8
+466.97333 586.2
+468.50259 641.4
+476.77325 835.1
+481.95584 531.2
+500.09717 561.7
+532.54547 2002.5
+635.39716 517.3
+669.28815 638.6
+676.61963 1201.3
+710.00110 616.4
+732.56500 629.7
+795.71619 1116.2
+847.95410 588.2
+947.76697 577.6
+1057.20728 844.5
+1198.22021 3373.0
+1473.88574 596.8
+1482.47144 618.7
+S	884	884	1879.92840793
+Z	3	5636.51
+Z	2	3758.009
+532.61774 1914.6
+537.01556 555.8
+555.89960 767.5
+630.33453 669.3
+648.77100 643.2
+676.62958 980.0
+795.70050 901.5
+795.74292 561.5
+937.83282 596.4
+1198.37915 3184.1
+1525.23987 955.1
+1615.54395 629.7
+1656.56201 715.1
+1718.99841 1202.5
+1752.20313 829.7
+1821.63354 684.3
+1825.89148 732.1
+1873.26208 1070.3
+1877.88928 536.3
+1878.73743 926.0
+1879.25024 2859.6
+1879.52295 19295.0
+1880.45166 875.5
+1907.00195 6899.4
+1907.28931 1073.6
+1930.33362 903.8
+1996.30762 611.5
+S	885	885	1907.49940793
+Z	2	3813.151
+Z	3	5719.223
+532.56616 1973.8
+676.65308 1035.5
+731.05499 838.5
+795.70001 1046.9
+1185.47656 561.6
+1198.26550 3317.3
+1413.45972 719.5
+1453.26807 632.5
+1525.27954 724.9
+1669.97424 712.2
+1717.91809 1434.7
+1760.69568 584.6
+1769.95459 768.6
+1876.50208 652.8
+1877.36902 687.6
+1878.95667 1671.8
+1879.29834 3437.6
+1879.56909 18994.3
+1879.86060 3594.6
+1880.18713 648.9
+1880.42017 1078.9
+1881.72778 1014.0
+1907.03857 7542.6
+S	887	887	1879.92999127
+Z	2	3758.012
+Z	3	5636.515
+532.56335 1859.4
+586.29486 695.2
+587.18359 569.3
+630.37286 978.5
+659.82849 583.6
+714.87195 720.6
+719.90540 595.6
+756.79724 545.0
+795.71985 1061.4
+883.44543 603.0
+998.77014 592.3
+1067.56433 726.0
+1198.26550 3166.1
+1207.28748 591.0
+1267.26135 533.6
+1355.79858 677.3
+1525.30542 841.2
+1715.98657 770.0
+1850.93469 629.6
+1859.99316 747.0
+1870.62024 968.8
+1877.64551 739.1
+1878.47913 1453.6
+1878.82239 1095.2
+1879.36548 6119.1
+1879.62537 17225.6
+1879.96838 4902.2
+1880.39734 1939.4
+1880.80688 993.9
+1888.68567 727.3
+1889.44812 799.4
+1907.05396 7588.6
+1930.46240 843.0
+1933.35706 616.7
+S	888	888	1907.53940793
+Z	3	5719.343
+Z	2	3813.231
+530.80811 532.4
+532.58087 2049.4
+549.13379 603.5
+561.93799 674.5
+588.57532 670.6
+630.37195 688.4
+643.63684 665.4
+652.20392 649.9
+676.65430 826.4
+684.26965 794.2
+795.71381 1161.8
+822.58777 636.7
+904.57220 591.0
+1159.32642 599.4
+1198.30298 3270.4
+1468.45996 627.4
+1525.36133 696.6
+1774.97791 604.7
+1812.55579 686.4
+1878.73413 975.5
+1879.23694 5595.5
+1879.56970 18123.5
+1879.90674 4498.1
+1880.71411 1449.3
+1907.10327 7683.5
+1930.55627 989.0
+S	890	890	1879.97999127
+Z	2	3758.112
+Z	3	5636.665
+532.55530 1700.5
+533.49951 615.9
+549.14917 685.4
+615.97510 657.6
+653.04852 964.9
+676.61957 881.3
+691.58661 647.0
+731.12219 802.7
+795.72803 704.8
+1110.88611 879.7
+1113.02002 563.6
+1198.23938 3274.6
+1202.73535 607.0
+1582.41455 659.2
+1590.12793 620.7
+1646.61304 642.0
+1692.49316 648.0
+1876.24817 692.8
+1876.69812 825.5
+1878.07715 823.6
+1878.33862 918.9
+1879.47449 18817.1
+1880.89392 1050.3
+1907.04224 7438.5
+1918.81311 706.7
+1956.64197 895.7
+S	891	891	417.7291121
+Z	4	1666.88515
+100.17741 605.5
+101.72769 482.4
+103.27467 547.6
+113.44146 581.9
+120.65993 801.6
+120.72437 602.3
+121.80441 2348.1
+121.81779 579.2
+122.40128 665.4
+132.88820 519.6
+135.83594 613.7
+146.67413 612.2
+163.66347 539.9
+169.48650 856.4
+179.53008 702.3
+186.41028 548.6
+188.31554 592.4
+197.69066 708.2
+198.93158 791.4
+198.98033 596.8
+199.19792 658.9
+199.20740 794.1
+199.23453 710.3
+199.29163 998.7
+199.30530 3545.7
+199.33423 589.9
+199.40273 962.8
+203.24246 637.0
+203.34035 586.5
+228.63878 610.6
+246.89375 526.9
+264.14035 652.7
+274.44568 662.7
+278.16043 535.4
+342.25955 851.0
+358.54294 588.1
+382.45584 637.2
+382.96152 575.6
+413.43542 520.1
+434.49026 572.6
+455.06854 561.4
+476.73325 844.2
+482.63367 789.2
+532.60065 2234.0
+551.87946 587.0
+630.38403 784.9
+676.63947 661.9
+676.68726 589.1
+782.33844 631.3
+795.72021 806.8
+800.09149 603.7
+826.34558 530.3
+875.71387 577.6
+990.89575 670.3
+1057.23657 775.8
+1063.17700 612.5
+1102.41614 586.4
+1119.66650 599.7
+1140.37891 505.3
+1198.35034 3618.7
+1213.13660 655.6
+1328.67993 520.6
+1335.08118 611.7
+1367.44958 551.6
+1436.12061 739.0
+1452.67371 565.5
+1501.35034 603.8
+1525.32007 751.6
+1557.59924 516.6
+S	892	892	1907.4568246
+Z	3	5719.095
+Z	2	3813.066
+532.61719 1807.9
+549.17279 574.9
+549.19965 676.5
+557.89917 671.0
+607.10693 639.9
+609.73413 680.4
+647.48328 845.6
+675.45459 583.9
+676.65857 954.0
+731.16144 817.1
+795.71930 803.8
+907.70776 599.9
+919.86554 653.6
+1057.26624 779.4
+1061.91797 668.3
+1144.97717 636.5
+1198.38196 3749.5
+1317.80774 628.6
+1392.47375 673.8
+1525.43274 934.3
+1705.73145 671.1
+1877.06750 848.4
+1879.12634 2060.8
+1879.56775 18306.5
+1879.95764 2369.0
+1906.44873 1008.2
+1906.91187 7183.0
+1907.30847 974.2
+1907.53491 646.0
+1930.66650 942.1
+1982.30042 613.2
+S	894	894	1879.9588246
+Z	2	3758.07
+Z	3	5636.601
+532.57922 2079.4
+555.02814 745.7
+562.67615 626.8
+676.62622 848.8
+822.23596 727.2
+979.71136 641.3
+1046.07703 592.3
+1198.30115 2803.4
+1387.84656 623.4
+1775.81079 710.0
+1776.99438 885.4
+1789.97388 627.7
+1825.54224 666.1
+1878.41992 807.0
+1879.48547 19322.1
+1879.88257 1859.7
+1881.32861 715.4
+1907.10986 7544.7
+1918.62756 807.0
+S	895	895	1907.25024127
+Z	3	5718.475
+Z	2	3812.653
+517.34729 727.0
+532.58630 1590.8
+630.39142 971.0
+676.64282 1183.0
+718.36560 554.8
+725.09149 615.2
+731.10907 755.2
+775.60291 637.6
+795.71411 1106.1
+837.25769 565.6
+891.35919 798.4
+948.39880 575.0
+1019.79059 627.9
+1055.08081 586.2
+1116.83765 606.7
+1187.75732 826.4
+1198.31226 3088.9
+1624.60425 676.7
+1776.93774 679.0
+1878.58838 652.7
+1879.22498 1278.2
+1879.54016 19912.6
+1880.22253 797.2
+1880.77319 715.1
+1882.52319 782.3
+1906.53528 623.6
+1907.06384 7110.0
+1930.54431 706.8
+1936.63965 712.7
+1984.84631 632.5
+1987.31787 575.1
+S	897	897	1879.95324127
+Z	2	3758.059
+Z	3	5636.584
+532.61542 2202.2
+542.78943 592.7
+593.73383 630.2
+613.54828 731.0
+653.03802 1337.4
+676.62885 908.0
+795.71484 803.2
+812.64984 659.7
+862.23676 577.9
+937.34265 706.6
+1198.37793 3340.4
+1339.13501 531.4
+1339.22729 521.3
+1342.29565 716.8
+1525.43616 857.5
+1785.94800 725.7
+1878.45984 822.7
+1878.82056 755.9
+1879.51331 19708.1
+1886.73132 627.1
+1906.65625 1533.9
+1907.04614 7539.6
+1907.40833 847.8
+S	898	898	417.7292946
+Z	4	1666.88588
+111.89484 549.2
+121.53414 590.8
+121.80619 2664.6
+124.38837 634.6
+125.36894 624.3
+133.15561 978.8
+147.61142 697.7
+149.35326 691.5
+155.70258 721.9
+157.60272 680.2
+158.83499 589.9
+161.14703 621.0
+161.56110 697.8
+165.79118 625.4
+169.34032 539.9
+169.49022 578.9
+183.78433 567.3
+184.30797 606.5
+185.68199 619.9
+199.22112 493.4
+199.26230 937.5
+199.27754 1067.4
+199.29538 2342.5
+199.31079 1685.1
+199.32193 1177.7
+199.39400 822.3
+199.41046 507.1
+199.42017 733.9
+208.55258 528.8
+213.36388 579.1
+214.50890 679.3
+256.89670 546.5
+265.14993 568.1
+273.84488 708.3
+279.57462 666.6
+296.39783 578.8
+297.28342 566.8
+329.10028 612.8
+342.27255 629.4
+343.72708 682.7
+350.27695 782.9
+358.38419 747.0
+388.36392 530.9
+427.47958 595.7
+427.52850 691.4
+432.65079 688.9
+463.91394 1193.0
+469.58380 863.8
+469.88629 715.8
+531.62292 674.5
+532.61865 1996.7
+630.41473 764.9
+630.81860 779.2
+632.64539 555.1
+676.63409 1474.8
+680.61798 603.5
+696.38226 617.5
+731.11212 663.7
+783.19977 560.5
+879.92957 566.4
+894.31598 636.2
+990.76801 613.4
+1051.27698 543.8
+1057.23096 772.7
+1140.28394 703.7
+1198.39233 2984.6
+1328.06995 678.9
+1464.38257 662.8
+1525.42053 856.3
+1568.37085 632.3
+S	899	899	1907.52824127
+Z	3	5719.309
+Z	2	3813.209
+517.14032 597.6
+532.61316 1912.4
+548.19855 647.4
+549.20111 835.6
+559.84998 664.9
+610.28314 509.1
+610.30548 504.0
+624.96069 651.6
+630.46045 884.8
+676.63361 1392.7
+783.02032 631.2
+832.79303 626.9
+1057.23267 866.3
+1096.46155 591.6
+1188.09717 811.2
+1198.37073 3619.1
+1235.36145 563.6
+1266.24524 572.0
+1310.53882 579.7
+1669.99963 627.1
+1721.42798 710.3
+1776.83545 668.5
+1875.92407 774.0
+1879.00366 1075.4
+1879.15857 1615.3
+1879.50500 19338.4
+1881.19067 709.7
+1883.28906 729.9
+1907.04736 7219.8
+1930.78137 821.3
+S	901	901	1879.8988246
+Z	2	3757.95
+Z	3	5636.421
+532.62225 1497.1
+549.19250 788.2
+609.26550 647.0
+653.03577 972.4
+676.64026 1071.3
+795.71295 848.6
+905.48810 607.2
+1057.25037 1049.5
+1064.48657 947.6
+1198.38379 3111.1
+1253.62256 644.8
+1366.26636 647.3
+1787.40149 830.0
+1876.89282 1018.2
+1878.91296 1020.5
+1879.52661 19572.2
+1881.69788 935.3
+1907.05115 7729.3
+S	902	902	417.7296321
+Z	4	1666.88723
+101.71798 473.9
+101.82772 501.7
+103.54755 605.4
+106.88506 699.3
+107.35560 501.4
+108.22681 566.3
+112.87981 548.4
+114.19191 613.5
+115.93762 553.4
+116.06792 574.5
+119.19496 600.1
+121.02434 598.7
+121.80549 2226.3
+124.93125 574.0
+130.38000 535.6
+137.42093 541.0
+142.44484 581.6
+171.20906 606.4
+187.61420 667.2
+198.12759 599.4
+198.93016 755.4
+199.20267 1400.8
+199.30089 3649.0
+199.39803 1356.1
+202.37126 659.3
+207.25319 651.3
+214.51225 618.7
+224.34727 608.4
+230.25343 577.3
+255.28783 805.0
+256.23532 573.6
+308.42493 562.9
+324.54245 673.6
+342.35355 745.9
+350.28387 663.7
+365.52740 621.7
+376.57431 729.0
+427.54095 835.9
+458.09808 520.5
+476.77704 725.2
+513.55188 558.9
+516.14636 513.1
+532.58435 1814.3
+601.03088 710.5
+602.68231 638.4
+608.01031 668.1
+659.87384 523.7
+791.44501 555.8
+795.72656 1346.7
+858.02924 588.4
+866.41675 647.6
+973.28253 540.1
+999.77246 530.4
+1057.25317 769.0
+1151.02942 665.0
+1161.83081 645.7
+1198.31128 3133.0
+1340.72021 578.2
+1346.97839 604.9
+1351.79956 641.2
+1363.38440 584.7
+1498.60510 551.5
+1573.13074 606.0
+S	903	903	418.2315746
+Z	4	1668.895
+110.01494 613.1
+110.84547 626.0
+111.39906 631.2
+119.19379 525.1
+120.66505 1006.6
+121.80365 893.9
+121.80819 2248.4
+126.86323 579.7
+129.81377 533.1
+131.97716 636.8
+136.99084 640.6
+140.01813 684.7
+142.67931 604.1
+151.99173 680.5
+152.06262 595.9
+157.60376 642.8
+171.64262 580.2
+182.78140 692.3
+189.27927 582.2
+191.72662 612.3
+194.54877 605.4
+198.92902 968.6
+198.94206 802.7
+199.20517 641.0
+199.21013 697.9
+199.26059 682.3
+199.29515 1891.3
+199.30302 2633.2
+199.31931 1249.3
+199.40051 817.1
+207.83351 658.3
+208.68871 541.3
+275.36755 546.3
+277.77170 495.5
+280.18396 895.1
+308.89725 656.8
+312.05969 602.7
+315.60126 596.0
+342.27209 649.8
+352.67252 609.9
+353.98734 653.4
+366.86288 637.9
+367.34976 608.9
+476.78357 730.5
+532.57043 1706.5
+549.15106 687.4
+559.70038 618.6
+607.52374 657.0
+624.03986 655.1
+630.41431 731.6
+731.12616 686.2
+752.89844 620.9
+794.32556 557.6
+795.70752 1007.2
+868.24878 674.6
+868.30670 504.8
+914.01392 543.9
+940.22107 559.2
+1057.25854 707.0
+1130.71118 658.7
+1188.30127 1133.3
+1198.27539 3390.2
+1275.73694 772.4
+1323.46082 592.1
+1330.40784 665.0
+1416.85498 633.9
+1493.84509 819.9
+S	905	905	1879.9578246
+Z	2	3758.068
+Z	3	5636.598
+532.56897 1957.7
+546.23596 600.3
+555.85364 672.9
+574.37866 573.4
+653.04767 813.1
+663.18298 613.1
+676.62775 1119.8
+745.32031 686.4
+775.81793 634.2
+795.71179 962.2
+840.84485 731.9
+926.94519 554.8
+961.18799 633.6
+963.56085 619.8
+1052.78223 648.1
+1057.23376 703.1
+1061.41199 617.5
+1064.25195 605.4
+1185.47888 735.9
+1198.27356 3025.1
+1310.91956 659.8
+1419.14697 906.3
+1525.45801 927.5
+1563.97070 644.9
+1598.49353 619.3
+1755.88342 669.5
+1878.93152 1315.7
+1879.49988 19711.7
+1879.77185 1824.6
+1880.04712 1534.0
+1906.81702 1027.9
+1907.07080 7225.2
+1930.63330 1052.7
+S	906	906	417.7292046
+Z	4	1666.88552
+104.39042 619.2
+105.65629 532.2
+110.88332 599.8
+120.66221 755.7
+121.80635 2207.1
+136.17540 667.8
+160.45695 655.0
+169.49147 646.9
+171.30583 646.4
+171.63757 636.2
+173.78267 656.0
+187.24611 651.8
+197.44370 548.7
+198.93208 1229.3
+199.21140 928.0
+199.22057 728.3
+199.26335 623.9
+199.28719 571.1
+199.30095 1457.0
+199.30960 2828.8
+199.38647 826.2
+199.40770 819.3
+211.48790 592.2
+236.16948 631.8
+280.17563 615.9
+281.89490 554.4
+291.06543 563.0
+308.89590 689.3
+322.68146 555.9
+339.76157 596.0
+342.26303 1036.5
+370.68729 592.7
+377.43030 560.3
+417.83945 528.0
+427.49634 611.4
+429.19534 662.3
+439.66739 633.4
+446.78015 523.8
+469.58215 907.5
+469.90729 501.6
+488.94568 686.6
+531.46881 653.1
+532.60425 2036.4
+549.14508 1097.7
+550.77686 685.1
+582.00446 604.9
+600.81787 734.5
+630.40076 1082.9
+641.58960 554.8
+651.97644 786.0
+676.64313 887.8
+735.46399 600.7
+858.04395 817.7
+1057.23718 705.5
+1188.18469 932.2
+1198.35107 3757.3
+1231.65222 593.4
+1234.37866 615.9
+1313.86316 678.5
+1470.06531 563.2
+S	907	907	1907.45624127
+Z	3	5719.093
+Z	2	3813.065
+523.12500 624.1
+532.56879 2093.2
+549.08990 638.1
+552.12372 632.3
+676.65759 1042.3
+728.81091 597.8
+795.72235 978.1
+849.02081 583.4
+909.40234 685.0
+945.24707 588.2
+1004.43414 651.8
+1046.72327 605.3
+1052.77600 586.3
+1198.26941 3027.5
+1354.73633 605.5
+1377.12744 601.1
+1730.93726 759.2
+1734.11853 684.5
+1777.64246 840.4
+1878.55200 1079.6
+1879.57397 19003.0
+1880.02051 2270.9
+1880.54724 1383.3
+1881.07471 796.7
+1907.05994 7401.3
+1918.75574 743.1
+1986.45752 664.9
+S	909	909	1879.91824127
+Z	2	3757.989
+Z	3	5636.479
+532.58392 1759.2
+567.68665 774.7
+653.05621 846.4
+659.57745 722.2
+676.65155 922.0
+695.33844 598.0
+698.60046 706.2
+705.20789 684.7
+795.71606 860.6
+809.80383 573.0
+964.03198 652.2
+1140.17078 853.1
+1141.33887 585.3
+1198.30872 3280.7
+1298.40417 659.5
+1464.59485 708.8
+1525.34680 940.4
+1607.13916 643.6
+1615.71655 757.1
+1879.04163 1032.7
+1879.59314 19547.0
+1879.86462 1917.6
+1880.12451 1400.3
+1880.63611 691.5
+1881.06812 882.1
+1883.62830 744.2
+1907.02991 7287.5
+1930.54041 1002.3
+S	910	910	417.7290821
+Z	4	1666.88503
+110.48898 511.9
+117.59564 674.4
+119.79498 652.4
+121.80577 2821.6
+122.05190 625.9
+122.56134 556.5
+132.07796 612.3
+137.29523 697.8
+175.26315 573.4
+195.84882 631.9
+198.92889 968.0
+199.21252 699.3
+199.22412 854.4
+199.22891 785.7
+199.29999 1656.6
+199.31102 2708.3
+199.32201 1239.9
+199.32945 1223.1
+199.40929 875.5
+216.31464 606.5
+223.90514 578.3
+254.37093 527.4
+255.29347 509.5
+268.75229 677.9
+273.98569 587.9
+280.18915 710.0
+286.41791 494.3
+308.90878 726.7
+327.63095 591.3
+336.38605 592.1
+350.27795 685.1
+376.66266 617.8
+381.37064 605.3
+388.45114 638.8
+404.93082 552.7
+429.34976 606.8
+532.58667 1966.9
+549.17041 785.1
+574.01508 609.0
+585.12036 560.1
+667.32184 579.1
+676.61084 936.5
+731.13953 631.8
+772.23975 613.8
+803.42114 532.9
+883.06915 624.9
+922.70111 546.9
+971.08337 579.1
+1017.65448 618.4
+1057.23193 650.3
+1187.97607 831.2
+1198.30859 3204.9
+1545.24036 721.5
+1577.08594 553.5
+1635.28833 650.4
+1674.98865 840.5
+S	911	911	1907.47424127
+Z	2	3813.101
+Z	3	5719.147
+515.07721 673.9
+532.55450 2270.6
+549.17157 934.8
+560.90649 547.9
+630.41785 1090.2
+672.38641 611.2
+672.57025 580.7
+676.64948 837.1
+703.55310 588.6
+723.49176 606.0
+731.12927 643.0
+753.81476 636.1
+795.70502 772.7
+828.83313 642.2
+1083.73523 623.2
+1087.00598 561.9
+1168.14978 681.1
+1173.97791 675.3
+1188.01697 1151.6
+1198.23669 3762.9
+1525.47522 835.9
+1878.10901 557.9
+1879.55823 19616.9
+1883.95715 626.7
+1907.05396 7426.8
+1907.42310 741.8
+S	913	913	1879.9598246
+Z	3	5636.604
+Z	2	3758.072
+532.56226 1990.3
+578.20337 805.6
+579.86511 607.4
+676.62329 844.0
+703.37683 855.0
+731.08221 772.1
+795.71814 1099.0
+842.20648 592.8
+924.60693 552.4
+1006.75568 588.3
+1057.22620 970.0
+1188.15759 684.4
+1198.25354 3294.0
+1199.90051 680.8
+1210.21277 647.9
+1222.02844 661.2
+1283.50232 619.7
+1292.51318 707.8
+1391.32397 626.4
+1396.46497 560.8
+1525.34998 782.1
+1667.82104 738.7
+1879.09631 1221.9
+1879.49451 20278.8
+1879.91626 1603.1
+1907.00659 6979.7
+1907.28308 1496.5
+1930.53882 763.9
+S	914	914	1907.4818246
+Z	2	3813.116
+Z	3	5719.17
+532.53125 1705.7
+549.11926 750.4
+555.98468 653.0
+630.37793 657.5
+630.51593 782.0
+656.03967 606.8
+676.62769 917.8
+682.52600 585.6
+685.95007 641.3
+695.39880 658.9
+795.72418 1011.0
+898.35974 654.8
+933.64001 708.8
+1019.75446 837.2
+1029.95337 608.1
+1057.22351 762.9
+1059.66675 565.7
+1083.19397 679.7
+1188.25146 712.9
+1198.18958 3166.9
+1506.14294 610.5
+1525.30334 781.3
+1662.96838 628.2
+1779.49329 552.9
+1879.06702 2138.4
+1879.51318 19103.0
+1879.99670 2258.6
+1880.41956 943.5
+1907.05151 7429.5
+1907.35913 748.3
+1930.47974 923.8
+S	916	916	1907.46524127
+Z	2	3813.083
+Z	3	5719.12
+529.51611 698.3
+532.58838 1997.0
+536.73364 635.7
+549.12964 751.3
+628.77008 614.0
+630.38281 708.9
+676.63892 890.1
+783.89197 699.3
+795.71368 1198.0
+821.15472 639.3
+971.63489 650.0
+1057.22437 796.9
+1111.88208 768.4
+1198.31970 3096.4
+1454.88550 553.3
+1518.71619 572.7
+1676.04651 630.2
+1745.64038 701.2
+1824.54419 610.4
+1878.42700 1033.7
+1878.92993 2076.5
+1879.52454 18961.4
+1880.11975 1598.1
+1880.72827 1090.8
+1906.80627 831.2
+1907.06628 7152.0
+1930.47742 877.2
+S	917	917	1880.1768246
+Z	3	5637.255
+Z	2	3758.506
+532.54510 1534.2
+549.22833 663.0
+574.08734 720.7
+630.48926 715.1
+652.07672 582.6
+664.82568 647.5
+676.62634 898.3
+724.90436 610.0
+795.70612 946.2
+801.83624 722.2
+815.80786 679.4
+869.62469 604.6
+941.74493 606.8
+944.23315 570.7
+1019.75262 692.4
+1057.20349 688.8
+1150.36658 585.6
+1171.57715 566.6
+1198.22388 3571.8
+1489.50208 873.3
+1581.02209 667.7
+1830.23779 629.0
+1878.98193 1806.3
+1879.48303 18888.9
+1879.93262 1875.7
+1907.12463 7041.2
+1930.80066 845.9
+S	919	919	417.7289896
+Z	4	1666.88466
+106.64616 553.8
+108.03323 516.8
+113.46526 504.1
+115.34613 498.7
+121.80556 2209.6
+133.07037 586.0
+135.37062 544.2
+140.99040 602.6
+146.49971 616.5
+147.03157 628.6
+150.78065 523.2
+155.93475 649.1
+158.77011 564.6
+165.79086 1003.4
+169.49730 769.6
+177.23369 605.8
+178.51381 639.9
+179.78136 603.8
+198.02914 596.9
+198.86705 667.6
+198.92863 991.5
+199.18347 734.0
+199.21191 1000.2
+199.26349 885.5
+199.28082 671.9
+199.29819 2200.4
+199.30922 2206.9
+199.33206 642.6
+199.39665 1099.0
+199.40683 635.3
+199.42993 922.3
+206.06693 569.9
+210.18506 661.4
+211.16447 665.2
+214.50609 637.4
+220.04817 610.4
+233.58080 630.4
+234.31091 592.2
+238.73886 831.0
+243.85378 616.3
+253.85379 540.7
+268.69394 669.7
+314.01028 613.0
+353.84238 544.7
+373.04514 671.8
+384.26941 579.9
+387.72958 580.6
+399.77838 536.9
+409.40744 659.5
+415.28687 560.2
+427.55466 701.0
+439.64426 604.8
+445.02563 673.4
+463.57718 635.4
+476.75262 884.5
+478.58911 579.7
+488.19864 557.3
+519.49994 618.5
+532.51697 962.3
+532.58911 1374.7
+534.65643 561.4
+537.71106 819.5
+554.30957 571.8
+591.80914 533.9
+641.32684 599.0
+676.63062 1167.9
+731.13855 726.3
+773.13123 536.9
+787.67249 634.4
+792.02631 694.2
+795.71045 832.3
+988.92798 561.0
+996.46350 591.1
+1057.21167 697.5
+1169.58972 645.8
+1198.00061 693.1
+1198.12341 1090.5
+1198.24536 2575.9
+1198.35974 1333.4
+1283.39368 647.6
+1392.11938 593.9
+1402.52954 621.6
+1589.05151 616.7
+1659.24817 556.5
+S	920	920	1907.47099127
+Z	2	3813.094
+Z	3	5719.138
+532.55743 2224.7
+545.35315 582.4
+630.39929 1051.0
+651.75897 652.7
+676.60754 1091.9
+795.70325 957.7
+830.58466 568.3
+1144.07129 663.3
+1156.99243 629.8
+1198.24756 3518.4
+1215.93567 678.6
+1525.38452 872.7
+1843.84985 637.1
+1879.09143 2075.3
+1879.43347 19489.0
+1879.76721 1818.3
+1880.01685 1833.2
+1907.08044 7192.6
+1930.56860 1012.5
+S	922	922	1879.94640793
+Z	2	3758.045
+Z	3	5636.564
+532.59082 1860.4
+549.13800 794.1
+605.82123 613.6
+630.38800 853.2
+676.62500 869.0
+795.71674 904.9
+832.99261 668.8
+1110.16772 634.0
+1142.65417 681.3
+1169.93298 647.9
+1187.90979 659.2
+1198.32068 3245.2
+1488.33374 734.9
+1525.35925 734.6
+1619.40149 775.9
+1872.79382 735.1
+1879.01648 1205.9
+1879.25342 1267.1
+1879.49585 20294.0
+1880.32068 698.0
+1907.09412 7372.7
+1918.68066 830.0
+1930.56128 886.5
+1934.74341 608.3
+S	923	923	1907.48440793
+Z	3	5719.178
+Z	2	3813.121
+518.53064 667.1
+532.59180 1981.5
+549.11438 713.6
+574.08130 615.8
+652.59570 697.1
+676.62738 1039.2
+848.82141 667.0
+859.79327 643.0
+927.58752 601.8
+963.37573 540.6
+1018.61194 590.2
+1024.33704 632.5
+1102.11572 668.9
+1140.16711 742.9
+1187.91138 703.9
+1198.33008 3019.7
+1224.48828 619.1
+1257.14819 709.9
+1288.46619 624.3
+1361.35938 718.0
+1525.31445 752.8
+1695.33252 619.6
+1878.32068 863.9
+1878.75574 616.3
+1879.50671 19376.5
+1880.60974 745.8
+1907.06335 6990.9
+S	925	925	417.7295396
+Z	4	1666.88686
+106.89079 818.1
+110.39983 519.5
+115.01294 737.1
+117.89294 554.7
+119.85703 674.2
+120.69389 639.6
+121.79601 603.4
+121.80254 851.9
+121.80662 1786.6
+122.54172 587.7
+126.13845 601.5
+128.95183 617.8
+131.15356 558.8
+134.23897 568.6
+137.29631 583.8
+169.49918 889.7
+177.26003 616.0
+198.93288 641.9
+199.21581 1196.5
+199.26500 588.0
+199.27155 616.7
+199.31325 3141.7
+199.35500 656.7
+199.41043 1025.7
+221.73442 497.7
+226.16756 531.2
+238.83783 557.9
+267.62994 565.9
+278.08969 570.4
+342.28278 698.3
+367.12137 582.5
+368.33078 551.9
+370.50833 595.3
+381.37039 728.7
+400.00192 548.7
+427.55719 758.3
+459.95834 691.5
+482.67438 706.0
+484.11194 586.3
+525.60229 779.1
+527.92291 605.0
+531.29938 569.2
+532.49872 1762.7
+545.82068 616.7
+549.17847 520.7
+676.63495 755.8
+870.07043 697.9
+920.01172 715.7
+1057.23547 841.8
+1127.69617 670.1
+1198.12036 3281.4
+1267.09802 569.6
+1312.72595 622.8
+1434.08887 541.0
+S	926	926	1879.8668246
+Z	2	3757.886
+Z	3	5636.325
+507.69162 720.7
+521.79639 745.9
+526.94720 537.0
+532.47101 1709.1
+546.49756 634.3
+572.66583 520.7
+611.13379 581.0
+614.71918 586.4
+629.46674 592.6
+630.38782 838.7
+680.17529 685.5
+698.28900 756.8
+711.50311 625.4
+781.67682 624.0
+795.72449 949.3
+1057.27039 658.9
+1068.53271 765.8
+1198.05237 3323.7
+1269.54773 625.1
+1478.02002 636.3
+1878.41833 850.6
+1878.88147 1231.6
+1879.57825 18102.3
+1880.67700 834.8
+1881.65979 796.1
+1906.77319 664.8
+1907.12329 7037.8
+1930.54565 840.0
+S	927	927	1907.4858246
+Z	2	3813.124
+Z	3	5719.182
+515.48297 570.7
+532.52063 1770.8
+573.13501 596.0
+624.25623 684.8
+664.05261 543.1
+676.62427 1105.4
+686.52844 775.4
+795.72137 1009.6
+929.80255 685.2
+971.85651 667.8
+1137.76501 688.1
+1198.16821 3494.5
+1278.35205 737.8
+1877.96033 708.7
+1878.64075 598.2
+1878.79663 690.9
+1879.11011 1367.4
+1879.49280 19408.8
+1879.80237 1749.1
+1880.59412 814.9
+1907.04297 7291.4
+1919.74182 702.8
+S	929	929	1879.87740793
+Z	3	5636.357
+Z	2	3757.907
+522.39014 764.2
+532.61572 1936.0
+533.10437 584.5
+560.80975 645.1
+630.37061 752.0
+653.00342 541.5
+653.04071 536.3
+672.73389 606.5
+676.65735 667.1
+731.09100 709.2
+783.36432 858.0
+795.71545 1270.5
+1021.08868 842.2
+1057.28186 1059.9
+1198.24500 659.5
+1198.38843 2840.4
+1321.72156 662.0
+1753.14404 730.0
+1877.98450 990.5
+1878.91455 1543.8
+1879.23962 2426.0
+1879.57764 18735.0
+1879.91504 3540.7
+1880.27063 1786.1
+1881.22681 906.6
+1907.05176 7228.9
+1907.73706 682.3
+1930.47339 1067.1
+S	930	930	417.7292946
+Z	4	1666.88588
+102.10030 596.9
+103.26357 513.9
+106.71709 657.5
+107.23325 570.6
+110.48008 558.7
+111.18724 617.3
+119.69846 547.8
+121.80486 2054.4
+121.98357 556.8
+125.28212 626.2
+130.76842 602.2
+141.85030 676.2
+151.37677 557.8
+158.85251 604.0
+160.15408 570.5
+162.25407 613.6
+165.79031 739.6
+171.63768 669.0
+173.68359 553.6
+173.79533 569.0
+176.41454 590.1
+199.23618 776.5
+199.27716 678.7
+199.29205 2080.9
+199.30710 1636.5
+199.31895 1802.1
+199.33379 1162.3
+199.41762 906.9
+199.43582 768.7
+202.84908 550.6
+206.42480 728.4
+225.82030 594.0
+233.56715 730.9
+255.47478 582.7
+274.11285 618.5
+288.20151 737.5
+329.03644 610.7
+344.12775 574.4
+350.27988 795.7
+350.81000 634.7
+351.12509 590.1
+368.99368 566.4
+382.65125 615.2
+395.73044 599.8
+463.58087 880.8
+469.87646 687.5
+473.72217 558.7
+532.60962 1923.2
+570.62494 718.0
+630.37073 764.8
+640.81171 1131.4
+676.62970 1034.8
+682.40387 549.0
+713.61115 655.3
+721.80688 571.3
+770.67126 668.1
+779.29553 617.4
+783.05951 561.7
+795.71588 1017.8
+816.30121 555.4
+840.36218 569.7
+876.51447 578.3
+958.45026 567.6
+969.92816 664.9
+1057.05688 574.5
+1080.21814 572.5
+1157.41602 661.8
+1159.03149 654.7
+1177.87500 559.6
+1187.57532 763.8
+1198.35425 2958.1
+1468.06824 564.3
+1546.37378 610.3
+S	931	931	418.2310746
+Z	4	1668.893
+120.66087 671.3
+121.80634 2166.7
+127.45561 521.0
+127.45878 524.0
+131.19542 597.3
+133.15018 1026.8
+133.19380 636.4
+139.21869 639.6
+144.08467 539.9
+145.61247 635.1
+157.21599 630.8
+187.87502 577.6
+191.75870 615.3
+198.92639 737.4
+198.93690 843.9
+199.21155 1080.6
+199.24493 1293.8
+199.26535 816.8
+199.28979 1448.7
+199.30807 2878.0
+199.32416 1014.3
+199.34261 953.7
+199.40407 781.6
+209.01778 588.0
+237.67889 618.8
+240.47336 643.7
+308.87875 776.6
+313.86844 635.5
+337.21823 628.8
+349.06488 516.4
+350.27823 952.2
+378.27563 630.7
+427.51425 866.6
+477.22171 613.5
+530.28864 581.9
+532.60083 2020.8
+538.81824 546.9
+549.11255 800.1
+619.10419 620.9
+650.06934 560.4
+676.63849 1027.0
+686.30603 591.7
+783.28491 757.7
+795.73450 782.1
+796.12714 538.3
+853.09003 690.6
+1100.48608 559.3
+1114.23755 570.1
+1167.51184 684.1
+1198.34192 3428.5
+1203.68176 581.9
+1249.75256 568.3
+1274.87439 662.6
+1401.58057 660.3
+1425.85693 657.8
+1444.05261 723.6
+1525.31360 751.4
+1543.51514 563.1
+1615.39160 581.5
+S	933	933	1879.95399127
+Z	2	3758.06
+Z	3	5636.587
+532.54913 1852.4
+634.70721 678.3
+676.62610 1412.2
+684.31042 674.1
+731.09509 792.4
+764.95093 605.3
+795.71967 1011.0
+856.26117 633.6
+977.12891 618.6
+1029.52002 704.6
+1052.90015 892.7
+1057.20850 1244.5
+1131.27808 758.2
+1198.23242 3092.6
+1200.91553 660.8
+1869.83789 619.9
+1878.63611 1000.5
+1879.04309 1791.5
+1879.20544 2008.9
+1879.49487 19598.9
+1879.89478 1786.2
+1907.05042 7386.9
+1930.50720 1102.5
+S	934	934	1907.47940793
+Z	3	5719.163
+Z	2	3813.111
+515.05267 607.5
+516.13806 546.5
+532.51508 2086.4
+632.97064 566.5
+676.05206 721.2
+676.64331 785.1
+691.39282 601.0
+729.98187 586.4
+731.10352 931.5
+787.87006 653.5
+795.71613 839.7
+860.02759 604.2
+873.84357 601.1
+898.86481 631.9
+1019.76862 752.3
+1020.08856 599.2
+1121.68909 671.6
+1148.89771 630.5
+1198.14709 3632.4
+1749.66711 640.9
+1777.26147 839.4
+1878.15332 1288.2
+1878.68127 1045.2
+1879.05188 749.6
+1879.28003 5171.6
+1879.54614 18465.6
+1880.89941 825.4
+1881.14636 733.2
+1906.87463 7149.9
+1907.35132 1480.1
+1930.56628 756.5
+S	936	936	417.7292646
+Z	4	1666.88576
+101.27746 565.6
+103.75791 586.4
+118.29032 567.8
+121.02136 525.7
+121.79656 713.5
+121.80463 1971.9
+121.80884 916.3
+124.57993 622.5
+125.95554 602.2
+128.38739 647.7
+143.34276 588.4
+156.87068 570.4
+164.73041 709.3
+165.79018 668.6
+166.90007 528.6
+171.24242 558.9
+173.84293 565.0
+174.51682 551.7
+178.38521 527.1
+191.95966 565.2
+196.65735 523.8
+198.93202 773.9
+199.25533 1496.5
+199.27191 678.2
+199.29695 2533.8
+199.30695 1416.1
+199.31950 1390.7
+199.33418 957.8
+199.39476 792.3
+199.40442 852.5
+207.17570 483.7
+219.89235 551.5
+242.96707 523.5
+255.29919 614.7
+272.41074 593.6
+350.08279 594.7
+381.37161 633.8
+428.86789 525.7
+462.22345 686.5
+476.43494 570.1
+482.67590 533.4
+532.55243 1980.1
+545.56207 674.0
+615.32599 625.0
+676.61694 1332.4
+795.72021 811.0
+861.37964 709.5
+871.12048 586.0
+889.55328 605.5
+1038.24695 573.9
+1099.89502 665.5
+1135.23706 621.4
+1198.22913 3582.1
+1212.97839 616.2
+1219.46960 708.8
+1253.95056 599.7
+1516.70459 644.6
+1525.37805 831.0
+S	937	937	1879.90140793
+Z	3	5636.429
+Z	2	3757.955
+505.74304 646.9
+532.53784 1654.4
+630.32526 880.5
+675.34644 573.0
+676.61670 1148.0
+775.44189 612.7
+795.70648 959.5
+817.14789 587.7
+857.93115 823.5
+1001.15204 652.7
+1048.27942 636.2
+1057.20386 991.9
+1064.01965 701.6
+1198.06104 619.7
+1198.19629 2788.6
+1219.55200 531.7
+1223.48303 642.8
+1274.44812 549.8
+1426.23755 589.1
+1494.31677 576.9
+1875.65332 688.9
+1876.63684 714.0
+1877.72754 744.6
+1878.66528 1282.4
+1879.00781 2995.8
+1879.46716 18804.4
+1879.91980 2875.7
+1880.30432 1282.0
+1881.21667 633.1
+1881.44202 854.6
+1907.07837 6823.7
+1918.67102 711.0
+1930.36475 1341.4
+1959.25854 581.0
+1995.98755 662.3
+S	938	938	418.2305746
+Z	4	1668.891
+120.35822 588.5
+121.80406 2225.1
+125.86318 570.5
+133.13223 892.8
+156.01981 710.4
+158.57722 570.6
+165.78854 694.5
+197.26138 528.2
+199.21700 1071.1
+199.31500 3459.4
+199.33913 669.3
+199.41237 1247.4
+218.14055 547.7
+230.83092 642.4
+259.17343 590.7
+280.19012 514.1
+291.63257 523.7
+342.27264 692.6
+350.27917 648.1
+372.48825 597.7
+381.36035 614.0
+393.60080 536.1
+421.42007 530.1
+427.54608 801.7
+431.70035 690.3
+443.71402 514.0
+464.80133 592.3
+476.77176 1037.2
+482.80746 696.3
+532.48657 707.5
+532.52661 2075.1
+549.13495 489.3
+549.15698 615.9
+676.63611 1257.4
+702.68604 556.8
+795.72626 1074.1
+815.99615 672.4
+817.45270 518.5
+994.39996 669.2
+1057.23206 685.3
+1182.97388 606.9
+1198.17688 2910.9
+1220.86487 747.2
+1240.37939 615.2
+1255.77844 651.9
+1270.44470 548.2
+1338.35449 614.2
+1525.40723 820.1
+1649.65479 728.6
+S	940	940	1879.91040793
+Z	2	3757.973
+Z	3	5636.456
+532.57251 1542.2
+532.60614 708.9
+552.92957 576.3
+574.40857 614.2
+581.51697 689.2
+630.40033 1044.7
+676.62933 853.9
+787.42181 600.0
+795.73157 718.0
+795.89246 645.6
+986.68469 710.8
+999.56006 636.1
+1034.69446 673.2
+1057.23560 776.8
+1076.15417 578.1
+1198.27417 3051.9
+1198.39014 728.5
+1213.84424 588.4
+1236.98425 710.3
+1859.97058 593.2
+1869.96057 1096.2
+1878.76160 1141.4
+1879.11780 2343.6
+1879.50232 19035.7
+1879.94714 1690.6
+1880.14429 1589.1
+1880.46704 710.6
+1880.80920 931.7
+1881.10547 656.6
+1881.71936 692.0
+1907.04993 7311.4
+1937.05457 707.8
+S	941	941	1907.47940793
+Z	3	5719.163
+Z	2	3813.111
+532.54211 1903.4
+557.15051 721.0
+607.23407 619.4
+670.82928 717.1
+676.63641 1046.9
+795.72009 796.3
+796.54877 744.4
+931.57080 602.1
+1033.57629 687.6
+1057.23596 946.1
+1142.72473 550.9
+1187.99243 988.6
+1198.21643 2909.8
+1299.60352 809.5
+1525.32764 1012.1
+1698.24231 615.9
+1874.68152 754.6
+1876.36548 634.6
+1878.93677 1398.5
+1879.22180 1315.8
+1879.53064 19589.7
+1879.84058 1544.1
+1880.11548 765.5
+1880.31702 904.5
+1880.62830 1297.5
+1907.05823 7437.6
+1930.48291 1024.2
+S	943	943	1879.88440793
+Z	2	3757.921
+Z	3	5636.378
+532.54156 1525.4
+578.55414 645.0
+614.92877 708.7
+676.61658 972.7
+795.71057 961.5
+1140.35852 728.8
+1198.21069 3131.3
+1299.71191 773.2
+1569.83350 612.2
+1776.94153 644.3
+1874.37476 611.6
+1875.52625 732.7
+1879.03333 1488.6
+1879.47363 20149.7
+1879.88025 1974.7
+1904.15100 962.0
+1907.07080 7327.4
+1907.35425 823.1
+1930.50488 858.8
+1944.70947 587.3
+1944.87842 529.8
+S	944	944	417.7293271
+Z	4	1666.88601
+106.85117 567.0
+112.54549 519.3
+117.23060 487.6
+121.80495 2466.8
+121.81273 598.2
+124.37362 649.5
+128.56381 656.5
+131.86932 668.2
+150.23242 616.8
+157.55568 618.7
+158.07863 634.1
+162.03246 602.0
+162.16177 587.7
+165.37613 542.0
+171.95067 702.0
+192.30724 547.3
+198.93237 842.0
+199.21416 684.5
+199.25990 683.2
+199.29459 1560.7
+199.31284 2674.9
+199.33539 934.9
+199.41183 764.4
+207.44614 537.9
+214.84555 672.6
+232.76176 645.3
+240.97984 560.3
+251.05035 533.1
+252.56834 637.8
+260.45663 622.9
+271.43765 608.7
+303.04874 556.3
+305.24548 563.5
+308.87906 716.9
+309.45435 595.5
+381.32669 715.2
+404.16922 557.2
+427.50922 684.7
+509.60013 557.4
+530.97308 671.9
+532.48163 2279.9
+549.11017 603.6
+619.05695 601.3
+630.34747 611.6
+676.63068 1210.1
+682.60309 606.5
+757.86511 566.5
+762.33539 628.4
+818.16034 610.5
+899.81677 703.1
+985.98785 601.1
+1057.22852 1119.8
+1198.08154 3460.7
+1525.27441 739.6
+1589.67957 636.4
+S	945	945	1907.4398246
+Z	2	3813.032
+Z	3	5719.044
+532.47809 1707.4
+534.13379 553.9
+549.12402 641.7
+575.26208 597.1
+676.64105 1182.5
+795.70984 792.4
+810.12128 627.9
+973.99530 604.1
+984.94604 622.0
+1019.81464 721.9
+1057.23975 828.3
+1128.46521 575.5
+1140.43701 738.5
+1198.07593 3204.4
+1525.35876 648.2
+1878.70850 1262.5
+1879.24194 1421.0
+1879.54285 19747.2
+1880.08484 945.6
+1880.44849 1010.8
+1907.09509 7728.0
+1920.12830 612.3
+1930.47864 838.6
+S	947	947	1880.0073246
+Z	2	3757.999
+515.06702 593.0
+532.55280 2205.7
+676.63831 1535.4
+691.91986 663.9
+795.71808 1087.9
+859.49011 825.0
+1192.09753 686.1
+1198.23352 3755.7
+1262.89026 677.1
+1879.52551 20071.1
+1907.04871 7679.7
+1918.66736 802.0
+S	948	948	1907.4728246
+Z	3	5719.143
+Z	2	3813.098
+532.57660 1715.2
+536.56702 616.7
+615.03534 628.2
+630.35999 984.5
+669.59058 769.4
+676.63397 1163.2
+795.72900 1330.3
+1057.23230 887.9
+1057.52197 660.4
+1178.98267 600.8
+1198.28821 2724.3
+1451.97925 645.6
+1525.29724 942.8
+1666.74194 725.6
+1876.63025 778.1
+1877.02197 925.9
+1878.45215 547.8
+1878.83398 1312.4
+1879.21313 2627.1
+1879.51147 19606.6
+1880.22742 1068.8
+1880.62561 837.1
+1881.62952 708.1
+1907.00781 6454.3
+1930.44287 1112.9
+S	950	950	1879.92324127
+Z	3	5636.494
+Z	2	3757.999
+532.49799 1833.2
+598.00391 612.1
+615.92688 636.7
+630.34564 788.0
+676.62848 1248.4
+690.73694 702.5
+795.72961 835.9
+979.69012 560.6
+1110.11133 723.5
+1198.10974 3137.4
+1249.70227 586.7
+1534.60168 903.7
+1666.91406 630.3
+1878.47644 1088.5
+1879.19080 3330.4
+1879.49976 19467.7
+1880.08215 1342.0
+1880.54370 956.5
+1881.15918 776.8
+1907.05298 7178.3
+1930.41589 754.3
+1942.33032 797.5
+S	951	951	1907.43824127
+Z	2	3813.029
+Z	3	5719.039
+532.53607 1746.6
+549.11139 905.4
+630.36450 873.6
+645.60236 568.3
+685.75592 691.5
+690.37994 645.3
+707.71844 664.8
+716.41870 677.6
+773.92584 663.5
+1022.50665 584.7
+1198.19580 3790.5
+1438.97388 671.5
+1525.30444 744.5
+1830.64954 685.0
+1878.86536 797.8
+1879.54724 17730.4
+1880.91724 685.4
+1881.11255 794.6
+1881.68445 858.1
+1907.03979 7882.5
+1930.44067 991.1
+1974.53357 819.2
+S	953	953	1879.96240793
+Z	3	5636.612
+Z	2	3758.077
+532.49335 1973.7
+546.04163 596.4
+549.11591 866.8
+602.99884 645.9
+620.28601 836.5
+630.36829 1065.1
+676.61383 934.8
+676.79358 646.2
+676.87482 572.0
+795.72064 864.8
+815.05963 785.3
+917.77972 553.5
+944.58112 593.4
+1187.97473 861.8
+1198.10327 3359.1
+1262.68542 738.2
+1370.29504 616.6
+1577.36890 571.7
+1582.27332 672.0
+1765.92603 703.9
+1879.36084 9804.7
+1879.64172 14674.5
+1880.64319 1456.5
+1881.10803 721.5
+1882.29077 663.1
+1907.06030 7525.0
+1931.56750 906.0
+S	954	954	417.7286246
+Z	4	1666.8832
+109.01181 537.5
+110.77605 746.0
+114.17079 538.5
+114.93023 606.2
+116.15847 560.4
+116.49089 563.5
+117.43727 479.5
+121.80360 2530.5
+122.19865 564.8
+125.96214 531.8
+128.63741 531.2
+146.91698 652.2
+159.27165 549.9
+165.78847 908.6
+165.79698 611.2
+169.48915 587.6
+171.63724 589.5
+174.04515 584.1
+187.80672 514.8
+198.93329 846.7
+199.29979 1484.9
+199.31332 2679.2
+199.32538 1147.8
+199.41508 587.4
+199.42461 590.1
+199.46048 595.2
+214.50859 672.4
+219.45746 592.7
+221.95601 547.9
+245.65108 603.7
+262.82800 529.2
+264.70407 566.0
+265.19998 562.6
+282.96466 617.5
+295.00223 633.9
+302.96146 519.7
+324.63467 585.8
+325.99216 671.5
+342.26300 630.0
+350.27509 545.4
+363.11423 613.5
+376.20718 636.4
+383.72498 653.9
+427.53159 673.2
+460.84009 535.1
+517.36426 547.0
+532.52374 1841.6
+549.14044 659.5
+650.27039 623.0
+676.61017 1137.5
+726.69556 571.3
+747.40210 656.9
+771.07745 599.9
+795.73376 764.5
+819.82892 706.4
+947.84119 750.3
+1020.84802 630.5
+1057.20422 769.1
+1198.17542 3348.7
+1404.95764 536.2
+1586.86865 593.7
+S	955	955	1907.4698246
+Z	3	5719.134
+Z	2	3813.092
+532.58301 1970.8
+549.14081 616.7
+592.89783 610.8
+630.40118 999.3
+646.06732 583.6
+676.65167 854.6
+706.34045 706.3
+707.18567 599.8
+776.21124 654.7
+791.66937 705.2
+795.71698 1197.6
+818.38171 643.8
+900.49286 647.3
+1001.87244 585.5
+1021.00726 686.4
+1043.17969 749.8
+1057.27856 571.2
+1072.49988 660.7
+1193.41650 730.9
+1198.30261 3041.3
+1210.48682 644.4
+1550.04675 636.5
+1727.88745 620.7
+1876.90674 637.2
+1878.63953 1003.5
+1879.13843 2279.7
+1879.55383 16557.4
+1880.09070 1239.5
+1880.45007 1639.3
+1907.03308 7332.9
+1918.59802 686.6
+1930.54370 845.7
+S	957	957	1879.93440793
+Z	3	5636.528
+Z	2	3758.021
+510.16727 690.5
+532.57031 2004.0
+549.09021 830.9
+565.13123 649.7
+653.05542 634.9
+676.60205 1261.3
+701.17798 645.7
+734.24194 604.6
+795.71759 1167.2
+876.88306 789.2
+1019.93414 625.0
+1184.64526 718.4
+1188.17017 912.1
+1198.27283 3692.8
+1287.50854 639.4
+1449.85120 620.3
+1525.21765 789.4
+1775.87683 594.6
+1776.15442 613.5
+1877.20386 738.2
+1878.14795 881.0
+1878.63135 996.2
+1879.42346 19583.6
+1880.20813 1370.9
+1906.97974 7377.8
+S	958	958	417.7291121
+Z	4	1666.88515
+100.81949 639.1
+102.20867 575.2
+105.43497 531.5
+110.70110 579.0
+111.44554 581.2
+113.47826 580.1
+114.60378 690.9
+115.70567 544.7
+116.58980 540.8
+121.80561 2866.6
+131.98013 649.2
+140.40285 547.0
+141.32619 509.9
+141.84990 954.3
+166.36621 494.3
+166.94719 534.3
+182.75494 664.2
+183.50465 498.4
+190.87949 578.6
+199.24643 737.5
+199.26637 620.2
+199.28607 938.2
+199.30316 725.5
+199.31064 3183.8
+199.38104 517.4
+199.40836 1289.0
+204.21997 541.2
+221.56802 540.7
+263.19702 574.0
+294.04752 603.9
+298.62964 555.5
+307.90085 521.6
+308.85553 693.1
+311.98453 528.3
+319.22803 703.3
+329.48886 520.7
+337.83795 545.7
+381.30405 602.4
+386.88132 796.4
+400.94876 622.2
+412.17377 568.3
+463.57687 650.4
+468.79611 677.3
+482.58203 752.4
+532.56653 1822.5
+542.52411 555.7
+556.12488 538.1
+564.92798 603.0
+572.00195 618.6
+645.48529 640.2
+676.64355 921.8
+742.60510 682.2
+754.48962 592.9
+783.17926 626.2
+795.71545 1132.1
+967.47949 576.8
+994.34955 630.8
+1052.56677 669.9
+1057.25269 1247.7
+1140.39294 907.0
+1188.25427 891.3
+1198.26208 3376.7
+1230.13489 573.2
+1525.19067 756.1
+1554.02014 599.8
+1587.46655 657.3
+S	959	959	1907.3658246
+Z	2	3812.884
+Z	3	5718.822
+532.57098 2104.6
+591.38708 644.7
+676.62323 1224.8
+685.57703 645.2
+795.71912 914.4
+850.91492 576.0
+928.74634 608.5
+989.06775 649.9
+1130.66418 645.9
+1198.27502 3564.2
+1198.68689 742.8
+1525.22034 985.2
+1586.92273 615.7
+1823.48083 900.9
+1877.28455 555.1
+1877.46423 742.6
+1878.10925 828.5
+1878.91162 1328.7
+1879.49878 19870.6
+1880.05554 1258.8
+1881.61914 642.5
+1888.81201 595.9
+1906.74573 760.0
+1907.04590 7374.3
+1918.61658 661.9
+1930.32837 942.3
+S	961	961	1879.9378246
+Z	2	3758.028
+Z	3	5636.538
+532.58936 1819.3
+549.05286 685.6
+630.32336 771.5
+671.01947 565.2
+676.63519 1007.0
+681.78864 577.8
+731.04108 583.5
+786.23932 649.0
+795.71570 836.0
+1029.72729 610.4
+1188.32458 703.2
+1198.31738 3178.0
+1525.21252 624.5
+1623.65137 732.8
+1663.46667 644.8
+1714.96252 667.8
+1877.56897 703.2
+1879.10876 1932.9
+1879.54224 19484.8
+1880.02222 1665.9
+1880.56335 796.2
+1880.83740 757.8
+1907.09570 7204.9
+1918.71326 1016.9
+1930.35168 1033.1
+S	962	962	1907.48140793
+Z	2	3813.115
+Z	3	5719.169
+532.57367 1949.2
+552.48010 625.4
+564.89429 622.9
+571.76813 632.3
+616.53656 555.0
+676.63721 1200.5
+731.08234 791.0
+795.71912 1120.5
+821.91089 646.8
+1057.24719 974.9
+1188.28552 735.7
+1198.28455 3566.5
+1269.42175 615.5
+1525.32300 845.2
+1877.88110 880.4
+1878.84973 1415.0
+1879.53687 19510.5
+1880.25391 1382.9
+1907.04150 7508.5
+1918.67712 1128.7
+1930.36499 711.7
+S	964	964	1879.94440793
+Z	3	5636.558
+Z	2	3758.041
+518.03790 596.1
+532.60132 1757.7
+549.20648 619.6
+633.90497 563.3
+676.62787 817.1
+681.31451 611.9
+707.79120 563.4
+795.61139 635.1
+795.72211 846.9
+861.41693 643.9
+866.42432 687.5
+889.50580 770.8
+945.39001 698.4
+1012.99658 552.5
+1013.05737 557.8
+1047.17639 623.5
+1057.23914 689.8
+1078.43103 722.3
+1121.44482 644.4
+1181.62854 775.1
+1196.80237 627.2
+1198.34448 3298.8
+1254.62524 649.8
+1412.50232 553.9
+1441.12524 778.8
+1531.67737 626.3
+1727.36926 676.2
+1777.09180 965.4
+1878.32629 811.8
+1878.70459 793.9
+1878.88428 1411.2
+1879.03894 1425.4
+1879.24036 1132.3
+1879.50256 19453.2
+1879.95923 1120.2
+1880.28430 1120.2
+1906.43054 599.4
+1906.67407 1068.1
+1906.92346 6642.3
+1907.48938 577.3
+1918.73926 631.6
+1930.44604 1081.5
+S	965	965	1907.29499127
+Z	3	5718.61
+Z	2	3812.742
+532.57916 1502.0
+630.35785 714.7
+664.95831 668.5
+782.50287 558.9
+795.72040 1175.0
+880.65369 715.5
+933.89484 654.9
+993.11945 754.7
+1198.30347 3380.3
+1363.43945 659.3
+1489.62500 709.7
+1525.30530 762.5
+1660.49451 631.3
+1803.85913 778.3
+1870.88098 767.3
+1878.44922 1115.8
+1879.49646 19516.2
+1907.06409 7524.3
+1918.67432 817.8
+1921.78711 563.7
+S	967	967	1879.92699127
+Z	2	3758.006
+Z	3	5636.506
+512.69861 633.0
+532.57672 1725.8
+562.30249 731.2
+563.92548 649.1
+676.61938 833.8
+701.27814 652.7
+713.21265 655.0
+731.02655 776.1
+878.35522 641.0
+934.96875 623.2
+1003.28308 742.6
+1057.20203 778.4
+1105.30396 620.2
+1181.16663 613.8
+1198.28894 3321.4
+1350.00830 668.3
+1460.40735 583.2
+1636.93958 621.9
+1637.52588 759.2
+1878.30591 838.6
+1878.83618 1146.2
+1879.48743 19836.9
+1879.77942 609.1
+1880.14233 1932.2
+1880.77551 890.2
+1882.07288 756.3
+1907.05164 7440.5
+1907.35583 756.9
+1930.36719 857.3
+S	968	968	1907.48840793
+Z	2	3813.129
+Z	3	5719.19
+532.53223 1504.3
+556.14789 745.2
+630.33618 792.2
+634.56018 632.7
+783.00073 610.4
+795.71027 865.5
+821.12146 662.0
+970.99164 630.1
+1019.70831 824.5
+1051.49158 621.5
+1057.16052 926.6
+1198.19519 2864.2
+1322.92078 647.0
+1605.27759 695.1
+1696.75708 552.1
+1716.93408 1162.0
+1879.10498 1323.5
+1879.39893 20758.7
+1883.54114 683.3
+1904.27649 671.4
+1907.02673 7397.3
+1918.69031 698.3
+1930.41772 783.3
+1987.51196 572.1
+S	969	969	1198.72440793
+Z	2	2395.601
+Z	3	3592.898
+411.55484 655.5
+416.52338 762.3
+440.51947 543.2
+447.99344 619.7
+508.31772 600.2
+513.76337 602.0
+532.54742 1403.6
+563.17731 580.2
+590.20850 614.0
+647.94165 561.7
+668.61359 645.4
+676.61676 1052.3
+776.61395 707.6
+795.72748 879.9
+812.41846 604.6
+909.33978 789.5
+978.25140 647.1
+1019.71698 1025.0
+1020.57312 736.1
+1020.86707 618.0
+1048.89319 567.4
+1143.34692 720.5
+1172.45056 691.8
+1177.95166 759.0
+1198.22449 3178.7
+1287.30994 561.1
+1459.69861 702.8
+1462.70679 751.5
+1525.29639 1003.1
+1707.31470 552.8
+1718.81274 1540.9
+1879.05200 1121.0
+1879.47021 20587.2
+1879.87585 1210.8
+1907.02893 7403.9
+1930.40027 926.0
+S	971	971	1880.01340793
+Z	3	5636.765
+Z	2	3758.179
+529.69440 627.1
+532.55804 1770.0
+595.38208 588.7
+664.18756 630.1
+676.66742 1005.2
+681.89825 556.8
+1035.55603 618.7
+1076.63904 771.1
+1198.25012 3301.6
+1327.26306 666.6
+1392.59888 772.3
+1525.36230 907.9
+1594.13123 662.1
+1725.47400 644.7
+1878.98108 1145.4
+1879.26318 1733.1
+1879.60083 19494.8
+1879.94019 1954.0
+1880.25903 919.6
+1880.96960 912.6
+1882.37891 646.2
+1907.04456 7525.4
+1918.67773 806.5
+1930.50720 1109.2
+S	972	972	1907.42440793
+Z	3	5718.998
+Z	2	3813.001
+532.58667 1803.9
+592.96381 633.5
+629.54401 644.8
+671.94196 589.5
+676.63971 855.7
+704.87213 588.8
+778.40546 585.6
+790.01886 580.4
+1078.75696 634.5
+1198.31140 3380.3
+1717.90735 1520.7
+1868.95935 610.3
+1873.32117 666.9
+1879.19800 1134.6
+1879.54236 19828.0
+1879.91235 1336.6
+1881.08411 835.0
+1907.03003 7236.4
+1907.27246 919.5
+1930.27686 919.8
+S	974	974	653.453657933
+Z	6	3914.675
+170.64287 526.4
+171.64034 676.3
+173.36566 588.3
+182.50800 637.4
+188.22868 600.6
+188.23732 559.8
+188.26247 1290.0
+188.27612 1598.6
+188.29280 1751.4
+188.29874 1776.5
+188.30736 1882.3
+188.32527 1006.0
+198.93233 1186.7
+199.13007 575.9
+199.21452 796.2
+199.29660 948.2
+199.31122 2871.1
+199.32117 1205.8
+199.33517 628.3
+199.40968 922.7
+205.74568 569.3
+213.41281 666.2
+213.93549 619.6
+228.30946 621.7
+233.52946 754.7
+241.01111 598.7
+246.15559 1153.9
+258.83066 576.2
+262.27390 604.0
+263.71375 591.2
+271.77594 744.4
+280.12930 713.8
+321.68976 608.5
+341.58493 600.0
+347.80026 585.7
+351.94406 728.6
+352.82858 539.3
+376.93311 559.2
+387.10303 739.9
+389.94232 700.3
+427.45071 807.3
+439.72174 597.4
+496.24237 557.9
+532.53223 673.3
+532.57123 1402.3
+543.74207 1009.4
+551.98853 723.2
+579.02441 607.5
+581.64685 689.4
+585.25018 710.2
+616.19421 685.1
+638.52985 678.7
+676.62543 831.2
+706.91089 1149.2
+717.91711 1035.4
+718.11261 4182.9
+718.31354 1789.5
+718.51404 1770.0
+732.11926 1926.7
+732.32092 3671.6
+732.52014 3216.7
+732.72211 2098.6
+780.00830 1807.2
+786.28973 687.5
+801.30548 582.0
+807.69373 1005.7
+940.05328 598.0
+1046.12402 905.9
+1110.91431 605.4
+1140.57166 738.2
+1188.28601 738.9
+1190.79968 524.3
+1198.27808 2942.1
+1237.86316 662.7
+1361.49463 769.5
+1472.96252 640.5
+1525.09290 734.8
+1870.97009 586.8
+1879.11353 2820.5
+1879.20837 2949.1
+1879.51733 18828.6
+1879.93188 2605.6
+1883.11707 596.7
+1907.07202 7382.4
+1930.25439 1037.5
+S	975	975	783.7422246
+Z	5	3913.672
+218.58881 616.8
+229.31393 637.1
+231.62967 585.6
+237.02422 552.0
+262.75699 635.4
+280.26752 872.1
+340.69989 581.9
+355.98843 596.6
+359.62796 742.4
+388.54358 587.5
+397.43900 659.0
+443.51645 589.6
+447.87320 613.1
+456.20734 599.4
+532.57526 2007.7
+560.49017 620.6
+653.06396 1118.0
+676.50494 572.1
+676.63757 1284.4
+729.34491 680.3
+731.07159 1159.6
+748.17456 649.2
+762.28217 633.4
+795.72620 906.3
+857.99023 688.9
+950.21405 587.3
+967.45593 550.4
+1046.26062 634.4
+1057.25439 750.8
+1188.34167 808.7
+1198.28723 3141.0
+1202.64526 616.7
+1716.29224 819.6
+1721.52368 660.1
+1876.71619 739.1
+1879.04407 2083.7
+1879.53247 18973.5
+1879.79675 2805.2
+1879.97046 2148.2
+1880.30396 721.7
+1880.44214 627.5
+1883.19202 764.6
+1907.05029 7060.8
+1930.47754 772.8
+1931.49976 687.7
+S	976	976	417.7296921
+Z	4	1666.88747
+100.85168 699.9
+104.10973 539.0
+109.47702 634.8
+113.44685 661.4
+116.14985 563.0
+120.66813 556.6
+121.80429 2179.3
+141.84904 513.4
+143.71947 546.6
+166.45314 583.0
+167.13641 568.8
+169.47009 614.2
+176.42422 624.6
+181.24171 550.9
+184.69341 482.5
+186.52426 532.0
+197.67043 712.2
+198.72356 519.8
+198.93430 721.7
+199.16202 529.8
+199.21736 1218.2
+199.31519 3616.6
+199.32516 1018.0
+199.41319 1172.9
+233.16370 1948.7
+235.92865 594.9
+238.23990 637.8
+252.76454 649.7
+258.41748 491.1
+288.20239 3209.7
+307.93326 645.3
+308.85529 744.6
+314.34238 619.5
+337.86938 851.7
+358.59793 635.0
+381.30670 724.6
+381.35532 601.1
+387.26968 922.8
+406.22696 1149.4
+427.48370 690.9
+463.57983 3194.7
+463.91272 1622.5
+469.58313 2904.1
+469.91946 1308.3
+474.28525 586.5
+476.75888 578.6
+476.78818 544.4
+482.58676 903.0
+507.27737 932.6
+507.61664 769.7
+514.84076 750.5
+518.81763 688.8
+526.28082 630.9
+532.54462 1769.2
+549.07605 835.7
+576.29034 699.7
+576.79010 896.2
+640.81512 3168.8
+641.31555 2288.6
+644.58429 592.2
+674.63452 714.2
+676.63495 968.1
+696.37836 602.0
+795.73743 761.2
+871.70795 622.1
+913.49756 531.4
+1002.07080 558.3
+1047.86829 595.3
+1057.24695 801.1
+1141.90137 576.6
+1180.58936 592.5
+1198.21106 3338.6
+1208.24719 630.0
+1243.73633 540.4
+1306.32129 819.6
+1389.90649 653.5
+1558.87732 624.4
+S	978	978	1880.04299127
+Z	2	3758.238
+Z	3	5636.854
+520.49310 649.6
+532.59644 1789.4
+676.63123 903.0
+795.72559 978.5
+857.89502 601.5
+1028.13037 572.7
+1102.75110 640.1
+1188.06177 773.8
+1198.33789 3290.7
+1250.50891 817.1
+1847.30103 781.5
+1879.17493 2430.8
+1879.50305 19413.9
+1879.83167 1607.3
+1880.58240 856.8
+1881.01990 827.7
+1883.71704 718.3
+1906.92920 6806.0
+1907.20020 1388.4
+1907.35266 775.3
+1918.66040 975.0
+S	979	979	1907.4708246
+Z	3	5719.137
+Z	2	3813.094
+532.59937 1683.4
+547.31769 587.5
+549.08350 823.4
+550.95294 612.9
+676.61737 915.6
+731.03638 766.3
+795.30951 665.8
+795.71301 1359.1
+833.52063 649.3
+876.87653 621.4
+1012.33289 563.4
+1014.56909 684.1
+1100.01050 649.8
+1187.93701 742.2
+1198.33752 3372.5
+1432.56897 572.8
+1579.46277 648.4
+1777.58398 963.4
+1828.29175 830.9
+1876.58228 679.8
+1878.20361 659.7
+1878.84229 1550.1
+1879.17151 880.3
+1879.48108 20036.2
+1880.05078 1628.4
+1891.37073 717.6
+1906.86511 6829.5
+1908.34644 687.4
+S	981	981	1879.87224127
+Z	2	3757.897
+Z	3	5636.341
+532.17041 631.6
+532.64166 1906.8
+569.76538 585.5
+571.48682 711.9
+628.64215 638.0
+630.31024 765.5
+655.24860 629.6
+665.96893 595.7
+676.63538 817.0
+783.42743 758.9
+795.72034 1031.3
+895.82086 815.9
+1057.22498 735.7
+1120.52368 725.1
+1198.43359 2789.9
+1229.17798 657.3
+1264.61853 549.6
+1454.72363 635.0
+1492.24036 684.4
+1525.18774 953.5
+1528.36938 682.8
+1671.52100 683.1
+1876.62915 635.2
+1879.22522 3722.9
+1879.50110 19291.0
+1880.13904 705.8
+1907.00952 7504.2
+S	982	982	1907.4935746
+Z	3	5719.206
+Z	2	3813.139
+532.64099 2080.5
+549.11920 702.2
+582.72583 648.8
+676.62183 958.0
+731.07715 999.8
+795.72772 895.2
+797.94275 660.0
+834.26611 687.9
+1057.21680 845.7
+1198.42981 3407.0
+1270.68982 639.5
+1446.05139 601.3
+1525.30969 932.2
+1555.90308 670.3
+1623.74170 893.9
+1650.96973 876.2
+1876.92847 828.8
+1878.94446 1373.5
+1879.48547 20138.1
+1879.98853 1637.8
+1880.34302 611.6
+1907.04626 7480.8
+1918.73523 706.8
+1930.47400 1127.3
+S	984	984	644.9061046
+Z	5	3219.4914
+168.83681 643.1
+180.72086 578.3
+188.24487 884.8
+188.27980 2136.5
+188.29553 2108.6
+188.33597 686.1
+188.36061 665.5
+193.35754 490.3
+196.36809 583.0
+198.93054 766.3
+199.23331 973.2
+199.29192 806.1
+199.31009 2383.8
+199.32457 1157.4
+199.33415 1400.4
+199.40759 791.7
+199.42873 681.2
+210.35326 617.8
+231.31024 523.1
+263.70325 747.6
+268.39841 555.0
+278.69293 599.6
+384.02957 587.3
+428.72794 3107.7
+429.23245 1986.8
+436.47430 721.4
+454.93570 662.2
+478.35687 618.6
+488.12250 614.3
+495.29941 618.4
+508.60849 714.1
+522.25415 821.2
+531.71259 632.3
+532.54596 1655.9
+569.80981 619.5
+579.77917 887.6
+611.78345 977.9
+612.28888 1235.5
+676.63452 758.9
+705.00879 1396.2
+705.34167 1260.1
+705.66272 678.0
+759.39362 1034.4
+779.68744 840.7
+788.68628 1585.7
+789.02356 1592.0
+789.35327 1078.3
+795.71143 925.4
+802.38831 579.0
+856.44574 997.3
+920.01636 677.2
+931.78802 618.9
+976.45221 909.5
+998.80280 754.3
+1014.67804 629.1
+1073.67163 615.1
+1134.71326 582.9
+1197.71521 567.0
+1198.22241 3340.5
+1340.04846 576.5
+1344.77917 720.0
+1440.19043 628.4
+1450.86963 754.3
+1592.05884 738.0
+1777.40576 779.5
+1877.55737 661.2
+1878.86951 716.0
+1879.10828 2053.8
+1879.52087 18892.5
+1879.93567 1286.7
+1880.09790 1506.1
+1881.82178 584.1
+1907.01587 6848.7
+1930.15662 836.9
+S	985	985	537.589752933
+Z	6	3219.49157
+137.98701 492.3
+160.70853 575.9
+165.78642 747.1
+166.92879 621.2
+169.47063 642.4
+187.96608 606.9
+188.21675 622.5
+188.23340 564.4
+188.24190 944.1
+188.25555 825.0
+188.26559 1034.3
+188.28065 642.4
+188.28929 547.9
+188.29971 949.5
+188.30745 863.0
+188.32518 591.1
+188.33995 640.9
+188.35016 810.9
+188.35838 715.4
+189.33508 505.6
+194.32765 675.3
+197.67755 518.8
+198.93295 646.0
+199.23488 803.8
+199.31807 2097.1
+199.33319 1239.0
+199.36093 980.6
+199.39325 639.9
+199.43401 906.1
+199.45561 554.6
+207.87102 660.4
+216.40471 667.0
+225.81111 626.4
+237.03870 652.7
+245.39775 581.2
+254.66704 517.9
+255.26273 782.8
+265.20914 558.7
+266.91010 479.3
+280.15817 586.6
+290.43582 520.6
+294.80359 684.7
+310.85226 770.2
+329.87686 628.2
+342.23953 686.2
+349.88754 514.6
+350.27631 680.4
+352.48618 534.9
+371.30984 634.1
+413.27588 643.6
+452.29861 567.4
+502.90152 716.6
+532.59625 1912.1
+561.28992 803.0
+588.06543 519.7
+630.33282 714.2
+633.22430 652.7
+643.80054 829.0
+644.06018 729.1
+676.61383 998.1
+704.56671 773.4
+704.81250 1131.9
+705.06134 1045.4
+755.36298 643.0
+758.14984 603.9
+780.24548 594.2
+916.21027 595.2
+963.04883 757.7
+1048.49744 635.2
+1057.20801 1029.3
+1093.83545 619.6
+1106.29443 609.0
+1198.32947 3418.0
+1243.56909 683.2
+1336.28955 633.5
+1522.07361 612.4
+1602.15369 579.7
+1696.97827 600.8
+1777.29102 791.5
+1876.52319 634.3
+1876.81677 696.6
+1879.15076 2880.9
+1879.46741 19780.4
+1879.83911 2949.2
+1880.26172 781.6
+1880.79260 788.5
+1907.03406 7180.2
+S	986	986	1879.89699127
+Z	3	5636.416
+Z	2	3757.946
+525.83813 561.8
+532.58936 1779.2
+549.08398 750.8
+562.71289 539.7
+615.41119 521.2
+615.62817 729.4
+670.51947 552.6
+795.72363 1060.4
+806.46649 602.5
+831.84949 617.3
+861.78943 760.0
+993.85059 564.3
+1051.79480 623.2
+1057.22839 775.8
+1198.31580 3131.1
+1525.21252 731.1
+1869.62756 709.1
+1878.97351 590.8
+1879.09314 753.7
+1879.50305 19755.7
+1879.91663 1040.5
+1880.59143 1050.0
+1881.15540 614.8
+1883.28967 702.6
+1903.11121 675.3
+1907.02686 6923.5
+1930.32288 1042.3
+S	988	988	1879.88040793
+Z	3	5636.366
+Z	2	3757.913
+532.50830 674.0
+532.55676 1561.0
+546.91650 631.2
+549.05530 925.9
+630.29767 825.6
+676.61450 893.3
+691.90186 573.9
+697.57007 534.7
+730.99121 752.5
+754.96680 575.6
+755.21564 604.7
+795.73334 979.1
+915.36157 783.5
+1020.96313 684.4
+1060.19897 652.1
+1188.28540 708.9
+1198.24976 3717.9
+1219.83936 883.0
+1354.19727 562.0
+1489.34998 981.0
+1525.18152 695.9
+1722.95801 694.7
+1840.08618 667.0
+1878.27124 1014.5
+1878.95569 1377.8
+1879.47107 19546.3
+1879.83386 1140.9
+1880.30627 679.3
+1907.00940 7290.1
+1974.55786 633.2
+S	990	990	644.9046406
+Z	5	3219.48408
+175.08206 519.3
+175.31320 643.1
+178.31898 516.5
+179.93668 595.3
+183.38539 602.9
+188.23294 676.9
+188.25984 772.4
+188.26900 869.9
+188.27701 1012.7
+188.28621 1327.7
+188.29385 1147.2
+188.30392 872.1
+188.31860 772.2
+188.32509 587.0
+198.93271 950.3
+199.22652 1057.4
+199.29019 879.2
+199.31059 957.8
+199.32532 2666.4
+199.34238 969.5
+199.42355 1076.2
+226.53363 628.9
+226.82120 605.2
+252.24510 673.9
+281.27069 603.4
+294.98325 615.3
+301.62656 662.0
+302.94028 750.9
+307.35574 657.2
+317.48218 585.3
+317.54663 608.8
+333.42273 577.5
+364.25748 600.6
+379.93655 658.1
+380.97229 592.0
+393.99524 627.9
+410.98837 615.1
+414.13116 612.2
+482.57193 844.4
+504.88431 681.3
+532.57617 1431.7
+549.06580 991.2
+574.42944 718.9
+574.69928 645.9
+630.30737 832.1
+676.64587 1039.4
+723.71259 673.8
+723.95160 674.8
+730.99316 860.4
+795.72668 928.7
+1043.75000 761.4
+1057.25439 1017.6
+1109.02112 628.1
+1161.86890 596.3
+1198.29163 2875.5
+1198.40002 1019.8
+1198.55457 704.5
+1340.83484 609.0
+1395.48938 676.7
+1443.86707 743.9
+1525.15393 1059.0
+1633.16711 769.1
+1846.48828 649.3
+1869.95691 644.9
+1875.97571 693.5
+1878.84045 1532.8
+1879.56213 19404.6
+1879.83496 2571.2
+1880.31348 1806.8
+1907.00757 7234.5
+1918.69702 952.4
+S	992	992	644.9069586
+Z	5	3219.49567
+165.78552 745.2
+188.23940 727.1
+188.26282 1564.4
+188.27122 1556.6
+188.29243 1932.6
+188.30637 2062.3
+188.32880 742.1
+188.33411 724.9
+190.73772 576.4
+192.08911 730.0
+199.22145 804.0
+199.23624 755.6
+199.29898 932.6
+199.30670 1442.9
+199.31287 1173.3
+199.32155 1796.7
+199.33675 1370.5
+199.39862 663.3
+199.40321 658.9
+199.41982 969.3
+206.96336 691.4
+251.79836 601.9
+253.77644 657.3
+255.27768 559.2
+260.30130 558.5
+271.53183 534.7
+271.66962 603.7
+278.26099 663.8
+283.67007 542.6
+332.39606 598.7
+341.87619 571.0
+342.24506 561.8
+345.89935 592.9
+350.26385 676.8
+353.62106 607.7
+368.74698 685.4
+388.20328 623.9
+422.02637 684.6
+428.72861 7531.3
+429.23013 1893.9
+430.38235 608.5
+446.26074 1157.6
+482.63010 1019.5
+525.34698 622.1
+529.25739 888.6
+529.82874 605.9
+532.60229 2096.4
+544.63269 530.2
+561.28845 887.4
+579.52478 1964.3
+579.77557 1238.4
+580.02808 963.3
+609.52502 637.4
+611.78687 2055.8
+612.03766 1640.4
+612.28711 1849.5
+612.53577 676.6
+616.53888 941.7
+617.95001 663.2
+628.02722 695.2
+630.29565 622.0
+667.50409 574.7
+676.63654 1168.7
+678.18134 633.7
+694.31348 1213.5
+695.67542 1022.2
+696.00745 878.4
+705.00629 2944.0
+705.34125 3927.6
+705.67560 1154.7
+721.45532 562.8
+731.06854 673.9
+736.59192 693.5
+749.01978 1268.9
+749.36554 768.5
+749.43121 823.1
+752.51489 735.2
+759.39038 2041.0
+760.39508 895.0
+772.37567 994.8
+776.38013 889.4
+779.34802 805.7
+779.69562 1417.8
+780.02838 862.6
+783.01178 763.0
+788.69019 1981.6
+789.02222 2887.4
+789.35596 1350.7
+795.73090 709.9
+804.08679 568.5
+815.37787 1411.5
+815.71912 1165.6
+816.05194 1600.8
+828.52417 667.1
+856.44934 1146.8
+876.08295 502.1
+876.11328 512.8
+889.48877 685.0
+976.45410 1426.3
+977.45978 795.9
+1025.97095 650.8
+1153.48364 670.1
+1188.21533 679.1
+1198.34985 3453.3
+1263.89771 714.7
+1366.42273 611.3
+1425.29980 583.8
+1480.75403 611.5
+1522.64453 683.5
+1766.60327 794.4
+1877.33484 793.5
+1878.81812 1197.3
+1879.55945 20053.5
+1880.29272 1064.8
+1904.95154 634.2
+1906.96082 6862.4
+1930.48865 748.9
+1969.48816 609.6
+S	993	993	645.7086246
+Z	5	3223.504
+174.89665 615.6
+177.83553 644.6
+182.75238 597.1
+185.06839 544.4
+188.20876 713.5
+188.25108 1076.2
+188.26886 1656.4
+188.27974 1967.6
+188.30084 2156.7
+188.33430 821.6
+188.35750 763.8
+188.36909 633.3
+198.93156 947.7
+198.94373 611.9
+199.25734 856.7
+199.29158 1121.5
+199.30254 2213.1
+199.31201 1204.8
+199.32779 1438.8
+199.40096 831.4
+203.97009 568.1
+215.96606 551.9
+236.18819 619.1
+274.46268 634.7
+289.24698 580.3
+313.74176 609.0
+415.13733 543.6
+427.47745 690.4
+433.27307 531.9
+486.41104 700.6
+491.25308 641.7
+500.85541 615.2
+507.96411 635.3
+532.43250 622.7
+532.58002 2118.9
+549.08435 582.5
+551.01031 631.9
+574.08514 678.0
+585.10278 659.3
+588.04150 824.5
+592.38605 570.4
+676.65991 1166.9
+761.27411 646.8
+822.34576 652.9
+882.90228 569.0
+894.66296 577.0
+908.11597 707.5
+1198.28918 3507.1
+1218.94189 602.2
+1224.68347 566.8
+1256.96912 648.8
+1302.94031 689.5
+1407.46179 675.6
+1474.79504 652.7
+1878.33472 606.4
+1878.52710 600.5
+1879.08313 1934.6
+1879.32336 3946.6
+1879.60059 19333.4
+1880.10706 2287.7
+1880.87451 766.9
+1881.94165 760.0
+1904.29077 612.6
+1906.31628 781.2
+1906.87366 7352.3
+1930.32214 857.6
+S	994	994	537.590362933
+Z	6	3219.49523
+136.23131 578.2
+148.63559 545.8
+148.85573 588.2
+155.30667 688.7
+157.58261 711.2
+172.07309 559.8
+182.76028 606.4
+188.14384 740.5
+188.25476 767.0
+188.26241 666.6
+188.26883 841.7
+188.27579 1097.7
+188.28612 1619.1
+188.29958 1007.2
+188.30692 1324.6
+188.31522 686.7
+188.32295 687.7
+198.93341 1150.3
+199.21550 1138.8
+199.23840 591.4
+199.25320 889.4
+199.27425 778.5
+199.30490 1441.3
+199.31412 3112.2
+199.32362 868.1
+199.33134 679.8
+199.41223 726.5
+201.86095 612.7
+203.10976 561.1
+211.29236 651.1
+219.12381 580.7
+222.36057 669.1
+233.54318 602.9
+238.43985 572.6
+241.81157 866.8
+255.25417 863.2
+280.14410 752.2
+308.86148 715.3
+317.93826 533.7
+330.26944 593.5
+330.94550 606.6
+338.51605 628.5
+355.53854 513.3
+422.72940 548.6
+427.48828 944.8
+434.25742 615.2
+477.58215 729.8
+532.56207 2284.6
+532.75555 584.6
+549.07910 760.5
+607.33459 649.4
+615.84515 586.6
+630.32300 984.8
+655.36279 626.8
+676.63245 1356.3
+715.44629 676.8
+731.03308 818.8
+745.09900 573.7
+779.58209 675.5
+783.89471 654.0
+792.23877 533.1
+795.71979 1106.2
+1158.62048 595.2
+1198.25708 3389.6
+1276.54443 682.2
+1334.23157 684.7
+1380.40369 920.3
+1525.20837 1044.3
+1694.12244 656.0
+1777.04370 845.9
+1879.05676 2882.3
+1879.51892 20477.0
+1879.99158 2220.4
+1880.28076 1324.4
+1880.79114 1746.6
+1907.05701 7897.2
+1930.34912 984.2
+S	996	996	644.9064106
+Z	5	3219.49293
+172.78976 499.4
+183.18108 557.0
+198.93486 860.7
+199.20119 611.7
+199.20621 671.1
+199.29663 1372.1
+199.30496 2659.1
+199.31262 1147.4
+199.40292 1556.4
+223.83549 651.8
+237.15521 615.0
+247.58374 579.5
+255.24765 796.0
+261.44327 642.1
+336.52127 503.6
+342.21506 772.5
+352.96942 597.0
+374.60779 629.8
+380.03116 638.1
+381.29593 762.4
+406.36130 531.0
+448.73309 585.7
+470.58511 557.5
+482.57477 770.2
+486.09570 768.5
+532.61261 2040.8
+579.45807 624.4
+608.50134 672.5
+625.09064 698.2
+627.33215 550.5
+639.51428 672.5
+653.02722 974.8
+676.64594 887.2
+795.73145 805.8
+841.41217 617.4
+857.91058 614.6
+1087.79858 645.5
+1198.37097 3392.0
+1282.54443 507.5
+1282.62903 513.5
+1357.37109 635.1
+1525.17639 660.1
+1662.19153 689.1
+1671.02869 555.1
+1748.45374 680.6
+1776.82178 818.7
+1870.47412 735.8
+1875.97302 596.6
+1878.08521 1377.9
+1879.17236 2144.9
+1879.55859 18869.8
+1880.06348 1497.8
+1881.09741 1501.6
+1907.01904 6805.5
+1930.25769 1019.8
+1931.51221 881.1
+S	997	997	417.7296321
+Z	4	1666.88723
+106.88966 583.7
+107.17386 506.1
+109.72966 573.1
+116.01273 593.6
+116.66514 668.0
+119.37897 585.1
+121.80357 2290.3
+133.14235 1114.1
+134.36168 592.5
+143.02875 597.1
+144.51483 493.4
+145.63181 527.7
+145.82727 527.5
+153.82892 611.8
+158.87587 567.5
+182.97495 658.9
+184.08752 585.0
+199.20735 871.0
+199.29691 2354.4
+199.30666 2090.5
+199.31570 1847.9
+199.40488 574.0
+199.41531 650.1
+225.37547 516.4
+232.23805 525.0
+280.18088 806.6
+308.89392 564.1
+356.39059 623.5
+388.89282 605.2
+402.40155 573.2
+437.73709 540.2
+449.23810 551.4
+469.86429 711.6
+476.76617 804.8
+529.21143 657.4
+532.56433 1711.1
+609.64691 552.3
+676.59625 1060.5
+1017.76184 739.1
+1057.18933 907.9
+1073.29736 707.0
+1110.58850 589.8
+1145.99768 546.3
+1198.26172 3376.4
+1210.53638 554.1
+1446.43823 555.1
+1447.38574 685.0
+1573.51648 647.2
+S	998	998	1879.91699127
+Z	3	5636.476
+Z	2	3757.986
+532.54834 1610.9
+547.28723 594.0
+610.48187 655.9
+630.36108 603.5
+676.61481 1255.1
+690.54431 657.2
+730.39209 702.2
+772.08868 584.7
+1198.22717 3231.5
+1447.51794 690.6
+1562.14929 679.3
+1865.10779 627.1
+1878.81580 904.2
+1879.02136 658.8
+1879.47644 20185.5
+1880.46301 756.0
+1906.94592 7336.4
+S	1000	1000	1879.9198246
+Z	2	3757.992
+Z	3	5636.484
+522.61804 601.8
+532.55835 2126.2
+549.13501 721.3
+621.77258 685.7
+676.64819 1045.6
+734.53027 643.3
+756.40649 703.1
+803.79956 686.1
+848.57837 674.1
+857.99768 639.1
+895.57806 682.9
+1002.26349 576.4
+1064.32593 627.1
+1066.59875 602.5
+1140.42261 672.1
+1198.25586 2951.1
+1497.91418 698.9
+1643.64917 577.2
+1666.98950 876.5
+1878.72974 1098.8
+1879.15552 1040.4
+1879.55066 19495.7
+1880.05188 1201.6
+1882.50269 798.7
+1907.03418 7134.8
+1930.44849 1269.9
+S	1001	1001	1907.47299127
+Z	3	5719.144
+Z	2	3813.098
+532.56415 1584.2
+533.37048 590.7
+533.73297 550.4
+545.61688 786.6
+602.24731 495.6
+630.34497 758.8
+643.05249 608.6
+676.62408 855.3
+706.96277 617.6
+731.03619 787.7
+734.44031 610.3
+783.74292 648.3
+795.73560 888.7
+879.56818 651.1
+1028.88354 676.8
+1141.61536 708.9
+1188.21582 884.8
+1198.26001 3729.0
+1270.37073 728.8
+1433.08533 655.1
+1708.80774 834.0
+1876.77344 927.3
+1878.22363 564.6
+1878.63977 1173.8
+1878.90552 1360.7
+1879.09778 763.9
+1879.51807 19863.6
+1879.95825 1688.8
+1907.03174 7469.0
+1907.61829 823.8
+1918.62317 755.9
+1930.38013 1210.6
+S	1003	1003	417.7299971
+Z	4	1666.88869
+106.08231 509.7
+120.32625 575.1
+121.80550 2009.9
+128.56303 584.9
+158.32129 612.5
+165.79086 567.5
+181.11174 548.8
+199.20428 1037.8
+199.24825 735.6
+199.27502 812.4
+199.30286 2568.2
+199.31116 2323.3
+199.32492 776.4
+199.39732 1060.9
+199.78810 564.3
+213.13713 534.9
+233.16362 1575.1
+255.27379 699.1
+259.27090 549.4
+278.61813 585.2
+280.16321 658.6
+288.20248 3356.9
+328.61618 583.2
+337.86920 1323.8
+384.53064 633.6
+387.26941 1804.3
+389.27930 585.7
+406.22842 781.9
+407.35126 720.1
+443.61533 637.4
+463.57993 2411.1
+463.91376 1447.4
+464.24603 1309.2
+469.58234 1960.7
+469.91718 1712.8
+507.27460 876.2
+507.94714 679.6
+513.94165 753.3
+532.55170 1906.1
+549.11884 671.6
+576.29437 1969.6
+576.79559 845.4
+630.81470 763.6
+640.81488 5091.9
+641.31616 2287.5
+641.81622 921.0
+674.66736 663.2
+676.64185 967.4
+795.74194 730.7
+807.54352 754.8
+824.45746 615.4
+943.22992 592.9
+968.98199 667.8
+1045.36047 616.1
+1090.42542 547.2
+1114.70349 616.6
+1119.42444 621.0
+1188.33447 674.8
+1198.23914 3346.2
+1211.66541 573.1
+1279.25830 757.2
+1307.41528 678.6
+1353.04883 567.4
+1525.30664 765.8
+1531.63049 566.0
+1537.85974 656.6
+1545.74976 704.2
+S	1004	1004	1879.95540793
+Z	3	5636.591
+Z	2	3758.063
+514.15454 629.1
+532.50208 2091.3
+581.92596 629.9
+651.37158 582.0
+674.76520 696.2
+676.63306 752.5
+690.68408 530.7
+696.55225 604.3
+719.33606 598.5
+730.99127 762.9
+749.89813 680.5
+795.72662 1038.3
+877.35809 736.8
+905.51428 631.7
+1063.99878 623.9
+1122.37659 651.7
+1188.35547 910.3
+1198.12903 3324.1
+1702.63647 567.1
+1877.49841 682.5
+1878.21326 606.6
+1878.44263 709.3
+1879.02734 2032.1
+1879.26294 3193.6
+1879.54382 19314.9
+1880.15857 2280.9
+1880.57581 1190.2
+1898.89990 657.8
+1907.12036 7181.1
+1918.62317 775.9
+1930.34888 809.1
+S	1005	1005	645.3086246
+Z	5	3221.504
+165.13853 557.4
+179.85887 603.3
+180.35963 692.0
+188.25537 1267.0
+188.26717 832.5
+188.27710 1132.9
+188.28548 1285.2
+188.29454 1027.6
+188.29903 978.0
+188.30833 874.1
+188.32109 657.6
+188.36095 665.7
+199.27945 774.6
+199.29478 764.2
+199.30537 942.9
+199.31870 2258.5
+199.32985 1702.0
+199.41592 907.8
+216.10838 546.8
+222.40906 640.7
+233.55495 648.3
+262.80667 781.0
+270.82703 617.4
+278.43118 575.0
+289.24506 699.0
+350.52612 651.3
+351.59943 700.8
+357.71109 644.2
+359.38229 693.9
+379.30389 652.6
+381.32318 679.8
+510.18002 659.9
+532.54242 1988.2
+628.55518 630.5
+629.68280 740.6
+630.35522 763.2
+676.64905 811.7
+731.07062 770.9
+749.34747 618.3
+795.72986 971.7
+857.98792 597.3
+965.69727 642.7
+1057.26123 855.2
+1067.80591 705.1
+1100.13281 747.7
+1109.30054 611.7
+1119.14148 573.0
+1153.28955 620.1
+1198.21155 3088.2
+1417.74915 765.7
+1777.45044 1165.6
+1869.63416 806.2
+1877.38794 834.3
+1878.28577 904.8
+1879.26221 1973.6
+1879.55273 19630.8
+1879.88977 1655.4
+1881.40906 721.9
+1882.23486 639.6
+1907.05017 7318.7
+1930.42126 1251.2
+1941.86633 646.9
+S	1007	1007	1879.9088246
+Z	3	5636.451
+Z	2	3757.97
+519.51251 626.3
+532.57825 1821.2
+532.61560 556.3
+618.49255 630.7
+676.64618 1309.7
+717.50562 578.2
+775.21100 831.3
+783.76270 773.7
+783.94171 700.5
+795.73242 820.8
+989.58356 638.7
+1004.58423 642.1
+1019.56299 672.1
+1057.25012 1001.6
+1085.76685 647.1
+1094.85583 621.1
+1198.07568 795.0
+1198.28857 2947.2
+1747.83582 621.7
+1867.50354 747.4
+1878.25134 699.8
+1878.66284 1169.0
+1879.20874 3449.4
+1879.56396 18899.4
+1879.89099 3302.0
+1880.41858 1128.6
+1905.99707 601.3
+1906.80981 6368.8
+1907.22766 765.8
+1918.62402 753.8
+1918.90259 684.2
+1930.42529 1189.6
+S	1008	1008	1907.47040793
+Z	3	5719.136
+Z	2	3813.093
+516.42725 760.4
+532.47308 633.8
+532.57080 1396.5
+549.08258 569.7
+676.63733 1160.6
+686.33228 963.0
+738.89349 616.0
+759.44525 619.0
+795.71832 997.2
+1057.22754 736.2
+1198.00757 827.2
+1198.13098 1344.9
+1198.27625 2445.6
+1252.84167 588.5
+1379.79541 611.1
+1472.64038 685.3
+1604.73560 779.9
+1619.56775 628.4
+1879.52515 19911.4
+1880.70044 954.0
+1888.06592 600.1
+1906.77002 6334.8
+1907.06836 1326.1
+1907.69849 812.7
+1920.90137 605.7
+S	1010	1010	1879.91524127
+Z	3	5636.47
+Z	2	3757.983
+532.55688 645.7
+532.58820 1149.0
+532.62085 760.4
+585.91888 633.1
+608.51514 638.2
+630.34839 825.9
+644.18457 545.5
+666.50128 580.1
+676.67761 941.3
+676.81720 712.7
+687.68542 581.3
+766.21271 564.4
+980.83820 556.2
+986.90607 661.6
+1021.02380 623.1
+1055.55640 775.4
+1198.22058 1232.9
+1198.32324 2386.5
+1490.39819 753.6
+1655.90173 669.3
+1879.11963 2035.8
+1879.35828 7588.2
+1879.65869 17041.8
+1879.95984 5374.5
+1880.24146 3627.3
+1880.57019 1713.6
+1881.01099 1117.8
+1886.88293 615.7
+1907.07214 7466.3
+1953.17468 771.1
+S	1011	1011	1907.1628246
+Z	2	3812.478
+Z	3	5718.213
+532.55365 1903.0
+549.13879 884.7
+559.01575 777.2
+609.02972 630.9
+613.79962 605.0
+630.39600 731.3
+676.63458 1044.0
+693.16962 550.1
+742.50885 655.4
+783.81635 727.1
+795.74188 1157.0
+938.48859 694.2
+997.12354 582.0
+1020.53558 545.4
+1045.63464 629.0
+1057.23157 1126.8
+1080.83496 618.0
+1198.23401 3261.4
+1246.32349 662.6
+1326.37488 579.3
+1417.48230 664.8
+1421.78418 642.4
+1525.40735 960.5
+1558.09546 765.7
+1822.62134 641.6
+1878.35132 980.0
+1878.81409 1504.6
+1879.50586 19354.7
+1880.15942 1354.9
+1906.99719 6900.5
+1930.55469 898.4
+S	1013	1013	417.7299071
+Z	4	1666.88833
+105.40806 518.7
+113.72748 588.1
+121.79374 576.7
+121.80264 2460.8
+121.81117 588.6
+128.56030 830.1
+128.56432 493.7
+132.53546 621.8
+139.02541 597.5
+146.95949 516.6
+147.51402 574.0
+156.87517 565.5
+157.59006 596.7
+171.63025 702.2
+173.75816 630.7
+177.06261 540.4
+197.67441 645.9
+198.93526 916.1
+199.19756 775.3
+199.21492 895.2
+199.27907 1042.2
+199.29556 999.4
+199.31261 3015.0
+199.32278 1104.5
+199.38066 876.2
+199.41086 1108.9
+204.25342 569.8
+233.16470 2179.5
+233.56931 638.0
+238.73320 685.4
+263.55930 578.6
+288.20218 6663.9
+289.20581 1362.4
+336.75650 716.3
+337.86877 777.3
+338.20560 853.8
+342.32443 548.8
+347.46420 633.2
+355.80643 675.7
+359.85754 597.3
+374.68240 626.5
+384.53613 716.0
+387.26981 2851.7
+388.27246 885.5
+406.22574 1968.3
+406.72919 1103.1
+416.22211 620.0
+451.23877 1051.4
+457.57666 869.7
+463.57986 4243.1
+463.91406 2899.7
+469.58353 4333.5
+469.91760 2818.6
+477.24847 609.7
+507.27783 1415.2
+507.61368 1194.3
+507.94632 601.4
+513.59857 751.4
+532.58789 2229.3
+547.89612 525.6
+549.09949 963.4
+573.05981 572.3
+576.29596 1795.0
+576.79510 1276.5
+630.35272 547.9
+630.37634 542.3
+639.82434 836.0
+640.81458 7297.0
+641.31683 5291.5
+641.81757 2735.8
+662.73083 562.7
+675.09375 591.2
+676.64172 743.7
+682.53680 679.4
+732.04779 576.5
+795.73334 1116.2
+857.97784 697.0
+913.71802 645.1
+1042.17590 621.3
+1057.25513 760.5
+1100.31458 516.3
+1187.93311 671.5
+1198.31067 3314.9
+1284.19250 563.1
+1414.86023 619.8
+1525.28369 767.5
+1596.38477 600.2
+S	1014	1014	1879.94940793
+Z	3	5636.573
+Z	2	3758.051
+532.58636 1792.1
+606.32971 584.6
+630.28925 790.3
+659.52783 621.6
+676.62622 1188.7
+730.99408 836.4
+775.42944 657.2
+795.73688 1147.0
+830.21667 621.4
+907.40771 646.7
+1019.78522 832.9
+1057.22070 931.6
+1198.31726 3036.2
+1581.41125 713.4
+1878.50500 854.3
+1879.17639 1813.2
+1879.49915 19819.1
+1879.80286 1651.8
+1881.08032 929.8
+1906.99365 7471.0
+1918.73657 897.8
+1930.24207 1220.2
+S	1015	1015	1907.39624127
+Z	2	3812.945
+Z	3	5718.913
+529.34100 701.7
+532.58789 1852.4
+561.62500 626.2
+673.44592 628.9
+676.60510 951.2
+700.52356 550.9
+774.50623 750.9
+795.74530 1057.6
+844.32721 706.4
+890.22174 588.3
+966.01660 691.9
+1057.18396 670.6
+1198.31335 2900.9
+1512.86340 686.3
+1652.28833 620.6
+1652.70618 663.6
+1718.72913 602.7
+1878.50708 1161.2
+1878.89832 1322.4
+1879.42969 20059.7
+1879.94397 847.6
+1880.22461 700.4
+1880.37988 576.2
+1904.53430 638.8
+1906.97327 7602.0
+1930.40356 816.9
+S	1017	1017	1879.89740793
+Z	3	5636.417
+Z	2	3757.947
+532.64532 1980.7
+589.14154 676.3
+622.39557 657.9
+630.35010 617.4
+676.62012 886.8
+733.92468 639.6
+758.33765 663.1
+922.06555 765.5
+987.69678 713.8
+988.31885 708.5
+1013.18848 601.8
+1117.79834 749.9
+1198.43921 3052.3
+1505.43823 763.4
+1525.31030 891.1
+1645.92151 656.1
+1876.17090 772.6
+1878.69238 1048.0
+1879.13416 1178.8
+1879.47913 19687.4
+1879.79102 1337.0
+1880.31091 1215.1
+1906.98633 7345.2
+1930.50281 862.2
+S	1018	1018	1907.42240793
+Z	3	5718.992
+Z	2	3812.997
+532.58557 1987.8
+549.10443 745.2
+572.64636 885.4
+630.35406 742.5
+636.54669 586.4
+668.39545 524.4
+672.29797 655.6
+676.62189 1453.3
+718.40137 610.3
+783.03491 609.0
+795.74115 961.6
+806.49487 731.9
+820.45801 642.6
+978.49072 673.1
+1040.68799 642.7
+1057.22864 802.8
+1198.30994 3068.2
+1382.35608 627.8
+1872.77173 697.3
+1877.50110 889.2
+1879.49841 19699.7
+1879.77844 2200.7
+1880.50171 757.5
+1881.02942 685.7
+1907.02124 7364.4
+1909.27515 614.9
+1930.43311 1096.5
+S	1020	1020	1879.93324127
+Z	2	3758.019
+Z	3	5636.524
+532.59198 2270.6
+577.86688 597.6
+595.07251 655.5
+630.38440 772.0
+676.63904 1229.5
+735.11469 653.8
+973.14063 619.4
+981.44116 752.1
+1017.79706 698.4
+1140.56787 706.7
+1198.32556 3641.2
+1211.13330 552.9
+1220.72070 687.7
+1286.21143 632.9
+1308.43213 682.8
+1424.96875 586.4
+1525.35596 715.4
+1525.63513 802.3
+1666.87732 1019.1
+1782.03308 615.6
+1878.01636 820.4
+1878.09363 819.9
+1879.02148 1497.6
+1879.54810 20158.8
+1881.15210 747.8
+1905.97803 557.8
+1907.05383 7538.8
+1930.51233 1247.6
+1980.09290 723.4
+S	1021	1021	1907.4698246
+Z	2	3813.092
+Z	3	5719.134
+532.57837 1704.4
+591.02783 568.2
+635.49005 740.7
+656.23376 610.4
+665.63977 583.8
+676.62701 1122.6
+722.84332 607.9
+727.02112 707.5
+808.95801 678.4
+829.60278 747.2
+862.48407 664.4
+1019.72021 712.5
+1030.61499 632.0
+1140.56897 758.9
+1198.28870 3034.7
+1599.36865 568.3
+1702.46729 630.8
+1878.52307 1472.3
+1879.06226 1370.9
+1879.49915 19386.1
+1880.50964 1336.2
+1907.09753 7178.0
+1930.49023 1030.9
+S	1023	1023	1879.92940793
+Z	2	3758.011
+Z	3	5636.513
+508.06799 608.6
+517.72644 590.7
+519.53833 534.5
+532.56860 2477.5
+573.95685 558.4
+582.25909 621.6
+619.80347 641.8
+676.62891 1100.8
+783.04260 844.0
+948.48761 614.5
+983.47906 624.9
+1057.21033 805.1
+1058.94849 615.4
+1111.73035 613.6
+1188.27478 798.9
+1198.27832 3420.7
+1320.58411 602.1
+1355.07617 637.2
+1831.62378 562.3
+1873.20374 753.9
+1879.48828 19596.5
+1879.92053 1053.0
+1881.12927 787.4
+1881.84534 730.4
+1888.18237 626.8
+1906.80847 6879.0
+1907.35461 816.4
+S	1024	1024	1907.4558246
+Z	3	5719.092
+Z	2	3813.064
+521.17609 641.2
+532.58533 2201.2
+549.08563 742.2
+602.36517 747.5
+676.61414 1264.7
+782.97571 603.1
+800.01031 560.1
+933.12817 693.6
+976.19794 671.8
+1010.68585 642.3
+1140.06824 593.0
+1188.12671 843.3
+1198.31226 3190.6
+1311.46863 523.1
+1313.28833 610.2
+1313.49377 627.8
+1371.68945 625.2
+1689.39490 609.8
+1763.45776 642.1
+1877.95923 918.1
+1878.67017 1041.3
+1879.15430 2431.4
+1879.45435 19873.2
+1879.79456 2372.2
+1880.31604 1033.3
+1906.15857 674.2
+1906.87573 7188.1
+1920.26526 600.5
+1930.38330 1191.8
+S	1026	1026	417.7302421
+Z	4	1666.88967
+100.34546 495.3
+106.85206 570.5
+109.12011 699.9
+110.24369 595.3
+110.75741 580.1
+115.24509 671.3
+121.80213 2277.1
+136.84483 545.9
+137.28560 613.2
+141.84932 640.1
+142.11467 556.3
+144.98518 588.2
+157.59909 670.1
+160.34317 644.9
+168.63118 619.8
+169.36198 620.3
+169.85043 544.7
+179.82504 567.2
+198.93634 799.5
+199.21762 1077.6
+199.26674 666.2
+199.30060 794.8
+199.31592 3381.9
+199.33144 1288.4
+199.41464 1180.0
+223.20334 605.2
+238.73177 637.3
+248.97243 541.5
+280.17609 660.4
+308.89584 718.4
+355.52707 511.2
+361.33527 565.3
+365.43793 660.4
+371.25555 610.3
+427.53079 1034.0
+468.37155 507.5
+476.77280 980.6
+482.64169 734.1
+523.25970 626.3
+524.12671 666.0
+532.58148 1572.0
+534.99615 654.8
+630.39844 921.1
+697.32489 655.4
+795.73419 971.2
+799.46423 665.0
+820.68829 700.2
+959.30139 593.9
+1021.12573 635.7
+1095.78516 600.4
+1097.07898 513.0
+1187.93372 876.4
+1198.30225 3512.3
+1336.36169 574.8
+1525.35742 665.7
+1551.15698 635.2
+1669.14172 660.1
+S	1027	1027	1879.9588246
+Z	3	5636.601
+Z	2	3758.07
+532.61597 1787.8
+595.70233 613.9
+604.82098 543.2
+630.37817 593.8
+676.62952 1077.2
+676.69440 639.9
+699.54437 817.4
+731.09100 855.0
+738.81152 631.2
+795.72327 1141.2
+974.56055 680.0
+976.71796 567.9
+990.52643 662.1
+1142.51489 675.1
+1198.38501 3422.6
+1224.95142 703.0
+1323.67151 626.1
+1437.03918 627.1
+1764.56494 786.9
+1865.04590 614.8
+1878.09802 709.3
+1878.75391 1355.2
+1879.25439 2588.3
+1879.51331 18961.8
+1880.27441 1015.2
+1881.22815 737.7
+1882.11694 699.6
+1906.80774 1442.9
+1907.05823 6599.1
+1930.52087 753.6
+S	1028	1028	418.2318246
+Z	4	1668.896
+106.21265 686.4
+109.63310 630.7
+112.38190 697.7
+114.11633 471.6
+114.20935 551.7
+121.79346 500.7
+121.80106 2049.2
+121.80577 905.6
+121.92177 650.7
+122.71191 500.3
+123.67743 544.5
+124.10825 610.8
+128.16405 600.3
+128.58125 502.6
+130.76784 627.0
+133.18556 533.2
+134.36725 491.2
+134.73547 741.6
+135.33447 498.0
+151.19615 685.4
+156.35176 662.5
+162.79745 612.3
+163.62611 584.9
+165.78444 642.8
+178.27583 631.7
+197.47003 610.2
+197.68880 557.5
+198.93311 740.8
+199.20807 798.0
+199.22990 1020.1
+199.27992 823.8
+199.30109 2659.0
+199.32608 660.9
+208.12485 498.7
+214.00624 530.9
+218.58580 610.9
+233.16405 2013.5
+261.15820 717.6
+278.04260 647.8
+288.20236 5522.8
+308.88663 686.2
+333.97491 612.2
+341.16544 638.3
+363.88150 534.1
+387.27029 3432.3
+406.22470 1262.6
+407.36081 586.3
+429.67883 582.7
+438.79263 660.8
+448.44763 561.8
+451.23795 707.2
+453.26151 557.9
+457.90958 1240.1
+463.57880 4642.1
+463.91257 1088.2
+464.24582 1040.7
+469.58282 3530.1
+469.91290 1105.2
+470.25378 918.3
+476.75586 793.6
+498.83420 566.6
+507.27704 996.9
+507.61264 1037.0
+513.60858 770.4
+532.61407 2167.5
+541.97522 705.8
+576.29236 2086.2
+576.79443 1274.0
+590.38531 568.5
+609.04449 589.1
+630.40363 685.4
+640.81592 8577.8
+641.31677 5788.6
+641.81860 2252.8
+642.32025 1097.3
+676.62494 1044.7
+795.73071 1125.2
+844.23157 603.2
+846.12701 595.5
+882.31036 557.8
+990.50537 613.4
+1005.91650 539.1
+1050.58923 632.9
+1057.23401 861.9
+1182.73132 583.9
+1187.93872 729.3
+1198.37256 3305.6
+1305.15186 690.6
+1525.37476 792.5
+S	1030	1030	417.7302721
+Z	4	1666.88979
+105.80849 540.8
+108.11121 577.3
+111.46349 535.2
+115.35769 517.6
+117.72971 555.2
+121.79933 1045.0
+121.80415 2277.9
+129.26355 476.4
+132.90491 492.8
+139.76283 541.6
+154.49818 539.6
+156.86057 682.0
+162.44176 621.7
+165.78854 958.3
+172.23203 571.3
+178.84996 555.0
+191.98596 546.0
+195.25624 559.8
+198.93314 837.7
+199.20760 933.8
+199.21338 917.9
+199.29683 950.3
+199.31177 2710.1
+199.32559 692.2
+199.41183 1281.9
+209.06496 635.1
+211.52032 572.5
+211.73010 616.4
+211.90483 626.1
+212.66061 560.4
+216.67914 616.1
+218.33943 502.6
+222.22650 542.9
+233.40007 578.9
+279.24762 579.4
+280.16873 575.2
+281.23169 571.9
+283.12625 586.3
+288.20169 616.0
+312.56119 631.8
+314.22247 699.0
+334.29010 584.3
+383.60745 527.3
+411.08453 583.0
+414.67441 648.6
+463.92542 614.5
+511.36621 755.3
+532.59766 2341.9
+539.82971 549.1
+630.37024 686.6
+644.28680 579.2
+673.90509 605.4
+676.64435 1367.6
+777.82361 639.2
+795.73010 971.2
+796.50354 577.1
+893.85413 661.8
+894.25769 662.4
+930.34863 573.3
+994.18732 566.5
+1031.82117 565.8
+1079.14050 567.4
+1079.25696 818.6
+1188.10657 653.4
+1198.33704 3343.7
+1215.12354 653.0
+1301.31274 604.0
+1360.60120 504.1
+1525.31628 1075.2
+S	1031	1031	1879.96099127
+Z	2	3758.074
+Z	3	5636.608
+530.42767 718.3
+532.58325 2270.1
+676.61169 1040.2
+784.74133 672.2
+878.15320 550.1
+1019.73816 746.5
+1057.22412 918.6
+1198.30237 3579.6
+1328.04102 621.5
+1488.93567 587.9
+1502.34680 662.4
+1525.35425 959.2
+1535.53186 596.8
+1879.46191 20187.9
+1907.06506 7528.6
+S	1032	1032	1907.4818246
+Z	3	5719.17
+Z	2	3813.116
+532.60272 1641.5
+548.87695 728.5
+676.62244 810.1
+795.71368 718.1
+905.95624 638.3
+955.98779 859.8
+986.04181 626.2
+991.27454 577.4
+1012.40802 534.8
+1057.21436 1122.4
+1188.22327 902.6
+1198.34644 3524.7
+1278.78882 661.2
+1346.30884 671.8
+1735.94849 616.5
+1878.40149 786.7
+1878.63757 773.3
+1879.07922 2097.8
+1879.48669 20016.6
+1879.90991 2199.5
+1880.68982 614.2
+1907.04114 7662.3
+1930.40601 839.8
+S	1034	1034	417.7303021
+Z	4	1666.88991
+121.75333 661.5
+121.80122 2931.5
+144.11023 525.0
+144.28322 606.0
+149.76057 542.2
+152.80888 571.3
+162.95285 596.5
+174.41942 661.2
+175.15599 548.2
+176.34523 564.2
+180.49547 798.7
+182.67540 496.9
+182.67747 497.7
+184.32950 588.2
+184.33195 579.8
+197.68370 661.7
+198.93532 689.4
+199.21190 1300.3
+199.26285 571.7
+199.27011 484.8
+199.28928 689.9
+199.29654 651.9
+199.31009 3166.0
+199.40738 932.2
+205.52266 485.8
+213.88828 581.7
+227.23810 554.7
+233.16397 2295.9
+239.92302 666.9
+240.37648 580.5
+259.74374 601.8
+269.43704 599.0
+271.52875 631.2
+288.20236 10106.5
+288.97815 640.3
+289.20679 1018.5
+304.13361 574.8
+337.86975 1260.3
+350.27811 918.8
+365.27017 617.4
+377.13977 707.7
+384.53067 1840.5
+387.27042 5121.2
+406.22543 2330.7
+406.73007 864.2
+460.65576 578.5
+463.57925 6212.0
+463.91406 4216.7
+464.24792 1957.1
+466.44656 569.6
+469.58255 6027.7
+469.91675 4589.5
+470.25244 1727.3
+507.27826 3445.8
+507.61432 1765.6
+507.94775 1538.5
+513.60101 993.7
+516.31238 988.4
+532.63959 2292.6
+549.14282 780.5
+549.19727 547.2
+576.29401 3653.5
+576.79675 1794.5
+593.51147 637.6
+630.81616 888.3
+631.31598 986.7
+631.80725 815.1
+632.31342 829.9
+639.82196 880.1
+640.81470 11892.6
+641.31580 7772.7
+641.81995 3542.4
+642.32196 1159.7
+676.60327 903.0
+795.72760 956.0
+819.18805 641.9
+853.61987 669.4
+873.55792 546.9
+910.09619 601.9
+958.42377 554.8
+981.36414 595.4
+1021.12903 590.8
+1057.17847 649.6
+1198.43311 3564.1
+1525.40479 808.8
+1615.87866 549.3
+1676.41443 667.5
+S	1035	1035	1879.94199127
+Z	2	3758.036
+Z	3	5636.551
+532.58563 2089.8
+549.12280 984.5
+676.61499 857.7
+678.17041 633.8
+769.50122 621.2
+795.72620 919.8
+849.89935 598.2
+938.32208 608.4
+1057.20337 892.5
+1113.55481 624.5
+1198.31055 2909.8
+1318.15393 722.0
+1525.32947 923.2
+1770.62378 640.0
+1876.49976 742.3
+1878.37366 993.4
+1878.97314 1013.7
+1879.46814 20026.2
+1879.96533 1186.8
+1880.36768 700.2
+1882.48572 789.1
+1907.03174 7425.4
+1930.48352 1102.5
+S	1036	1036	1907.52224127
+Z	2	3813.197
+Z	3	5719.291
+532.58466 1992.6
+549.10852 715.3
+615.23151 649.6
+630.35370 864.9
+857.96167 806.3
+983.82916 583.3
+1024.80945 630.2
+1068.39661 753.1
+1198.31604 3077.6
+1247.39905 736.1
+1525.26746 923.8
+1539.46643 646.7
+1869.71887 645.9
+1878.42334 1188.8
+1878.78711 969.8
+1879.02808 1561.4
+1879.24036 1306.8
+1879.50659 19437.3
+1879.96240 1377.6
+1880.54211 1407.3
+1883.29480 660.6
+1906.74988 1730.5
+1907.05896 7085.3
+S	1038	1038	417.7304246
+Z	4	1666.8904
+100.85811 595.8
+103.22004 512.4
+106.38801 633.9
+106.40268 548.8
+106.67441 504.7
+106.88731 570.2
+106.90050 652.6
+108.31007 606.6
+115.42673 540.4
+116.75237 673.1
+119.47136 570.2
+120.66218 650.0
+121.80001 2370.8
+129.14864 566.2
+130.06439 573.8
+133.15739 1329.7
+134.61575 618.1
+152.30823 590.8
+159.25343 572.7
+165.78357 1079.1
+175.00414 655.5
+176.71948 531.7
+189.75284 541.8
+198.93506 969.9
+199.19405 762.6
+199.20840 746.1
+199.23129 628.9
+199.29567 1891.1
+199.30853 1965.9
+199.32933 709.0
+199.39497 789.1
+199.58875 602.4
+211.10960 698.5
+212.05666 557.3
+218.08118 652.1
+218.55800 674.2
+236.07745 697.3
+255.69608 577.9
+281.77484 545.9
+316.36966 535.3
+323.16943 615.3
+329.44110 582.3
+338.23624 673.2
+339.10117 601.8
+342.26688 705.0
+342.87601 529.0
+344.78925 653.6
+345.35803 564.4
+350.25018 757.3
+354.53708 581.5
+360.47021 629.0
+396.96857 604.1
+411.37396 763.2
+414.39331 655.7
+458.07635 548.2
+465.41922 619.3
+508.47131 631.6
+532.02222 737.4
+532.62616 2191.8
+554.42950 547.8
+584.78278 539.1
+586.50848 710.9
+630.37781 874.8
+650.54449 617.8
+676.61871 1185.3
+730.61493 624.2
+795.72833 965.8
+811.80847 690.0
+1071.11108 579.2
+1079.29333 630.9
+1110.43994 698.8
+1110.93835 695.0
+1139.00610 681.7
+1179.98425 621.8
+1198.39612 3592.3
+1472.44971 636.9
+1525.26514 670.6
+1527.88147 581.5
+S	1039	1039	418.2320746
+Z	4	1668.897
+106.12143 555.7
+112.66883 563.4
+115.76579 586.7
+121.80282 2641.9
+126.08998 643.1
+128.55487 640.7
+137.03369 636.5
+137.28398 700.3
+140.99222 610.4
+144.07088 674.2
+146.91299 593.6
+160.86948 523.9
+169.39072 613.9
+173.73386 533.6
+173.75703 682.0
+187.16440 561.0
+187.29764 598.7
+187.64345 596.9
+199.18927 579.7
+199.22202 752.2
+199.23981 812.6
+199.24977 936.9
+199.28523 739.8
+199.30331 2358.5
+199.32001 1312.3
+199.33641 800.9
+199.37425 535.2
+199.38345 675.3
+199.40143 1080.7
+200.65446 545.0
+208.45222 580.7
+233.01408 524.7
+234.84277 514.8
+235.88266 705.7
+245.50047 570.7
+255.27859 571.5
+261.46475 716.3
+261.84821 545.4
+265.73184 581.1
+272.44629 557.5
+274.80658 724.9
+276.17163 521.8
+290.19720 519.0
+308.88190 537.7
+328.09497 571.0
+336.12750 559.4
+342.25461 695.2
+373.14743 599.0
+376.39182 558.7
+422.74167 695.0
+427.53287 663.1
+451.22247 730.3
+482.63501 902.0
+486.37994 580.7
+512.37201 586.2
+532.58270 1951.3
+543.25153 604.5
+549.12549 914.2
+573.61121 643.6
+627.72021 799.1
+671.94659 707.2
+676.64087 1230.2
+731.09045 905.2
+774.75830 518.7
+778.02661 604.0
+795.72162 896.2
+795.78021 487.0
+833.91779 574.3
+1019.72058 772.7
+1032.71313 656.1
+1057.25378 751.0
+1079.29688 839.2
+1091.48877 603.1
+1110.48987 614.2
+1120.65552 681.6
+1198.30542 3614.7
+1443.25684 642.1
+1458.63562 606.8
+1525.35791 931.0
+1561.29663 688.1
+S	1040	1040	1879.9318246
+Z	3	5636.52
+Z	2	3758.016
+532.58765 1676.2
+556.72418 721.6
+597.95355 752.5
+630.36658 845.1
+676.62457 891.3
+706.37299 556.3
+795.73535 769.7
+812.49323 567.1
+813.45752 714.9
+1075.24695 669.2
+1187.76367 834.8
+1198.31519 3378.9
+1232.46179 667.5
+1276.61267 662.2
+1524.05518 631.1
+1526.55859 631.6
+1777.17456 592.2
+1878.85327 1978.5
+1879.19580 3105.6
+1879.49817 19143.8
+1879.78088 2727.8
+1880.17200 2038.4
+1907.06860 7238.7
+1930.45361 1152.3
+S	1042	1042	1879.95899127
+Z	3	5636.602
+Z	2	3758.07
+532.57141 1903.7
+609.80402 666.1
+675.57794 578.6
+676.64960 802.7
+731.09454 1084.5
+828.23413 761.2
+983.22882 676.0
+1198.28064 3244.2
+1219.49500 658.7
+1455.68665 648.8
+1499.81116 644.8
+1876.68774 612.8
+1878.30762 691.7
+1878.67920 689.6
+1878.77832 632.0
+1879.16150 1586.2
+1879.55847 19416.0
+1879.96606 2320.4
+1880.17676 1011.9
+1907.05579 7301.8
+1930.50476 1153.0
+S	1043	1043	1907.4778246
+Z	2	3813.108
+Z	3	5719.158
+532.57745 2242.9
+579.36584 555.4
+696.93756 668.8
+709.01471 611.0
+795.73199 1355.0
+835.39758 739.7
+856.88190 600.0
+928.95605 610.9
+938.70245 671.5
+1198.28418 3170.7
+1237.61719 627.8
+1242.94727 694.6
+1334.87585 809.4
+1426.85461 541.4
+1432.18018 663.7
+1525.26624 679.4
+1878.65906 941.7
+1879.08386 2339.8
+1879.51672 20078.0
+1879.97815 2214.4
+1880.40430 874.9
+1881.98059 845.6
+1907.03552 7426.8
+1909.14075 739.1
+1930.45300 716.2
+1979.84229 607.0
+S	1045	1045	1879.9458246
+Z	2	3758.044
+Z	3	5636.562
+522.77039 633.5
+532.58032 2015.1
+540.42719 693.3
+549.12915 626.8
+566.81915 666.5
+590.97272 581.5
+592.62769 585.8
+626.35095 603.2
+630.37512 737.8
+676.64954 1028.1
+707.29810 739.9
+795.74072 950.6
+1057.23694 895.4
+1153.56335 636.4
+1198.30164 3280.9
+1396.09058 677.5
+1525.35791 737.7
+1562.95129 639.8
+1569.40710 661.7
+1876.28760 932.8
+1878.41040 840.9
+1878.75525 1217.8
+1879.54285 19554.4
+1880.09155 1904.7
+1906.99329 7289.5
+1930.51379 998.3
+S	1046	1046	1907.46240793
+Z	2	3813.077
+Z	3	5719.112
+532.54382 1795.2
+549.14301 780.9
+676.60785 1315.3
+725.60413 763.0
+731.11462 742.2
+849.76929 561.2
+858.06122 798.8
+931.25293 616.9
+1198.22131 2839.2
+1234.87000 658.0
+1525.40723 789.7
+1644.14636 620.0
+1870.30005 817.5
+1878.52417 1057.6
+1879.45337 19088.2
+1879.71814 3654.3
+1880.34131 671.4
+1907.00000 7467.8
+1918.71948 1019.2
+S	1048	1048	417.7305171
+Z	4	1666.89077
+100.86477 476.5
+102.34766 522.1
+106.62694 527.1
+109.37044 508.8
+115.85790 557.4
+121.80058 2059.1
+121.80533 541.9
+124.97988 498.6
+128.46039 531.8
+137.20126 575.9
+140.05850 565.2
+156.08333 633.1
+156.52718 582.5
+157.60046 568.0
+164.63568 531.6
+173.73734 534.0
+175.14189 578.6
+176.01189 568.2
+176.62257 559.2
+199.23030 808.8
+199.30287 1927.5
+199.31410 1832.8
+199.32721 1873.1
+199.35762 710.1
+199.40077 747.7
+202.74300 625.3
+214.51102 613.5
+220.66122 584.6
+248.43085 478.3
+249.42180 660.3
+255.28711 765.0
+262.83344 748.6
+270.89447 591.7
+273.57568 678.9
+280.17764 712.0
+305.46274 533.0
+306.18265 540.7
+308.89304 702.9
+325.35251 645.1
+342.27167 571.9
+360.90472 584.2
+378.48502 660.1
+421.66577 596.5
+482.64801 792.9
+518.39789 726.7
+521.10712 557.8
+532.50922 720.7
+532.54858 2102.8
+676.61438 1117.9
+685.52423 588.1
+708.44293 529.7
+731.10547 907.5
+743.00623 582.1
+795.71436 759.5
+805.57233 613.2
+869.42139 560.9
+1057.20300 872.8
+1198.21790 3623.1
+1525.39294 920.9
+1543.56763 579.1
+S	1049	1049	418.2323246
+Z	4	1668.898
+105.19907 562.7
+111.60991 593.6
+120.62154 568.7
+121.80023 2271.6
+127.85893 606.8
+128.57420 605.9
+137.28807 695.8
+137.63348 504.5
+138.53413 542.9
+144.12189 544.4
+152.13815 552.2
+157.60081 688.8
+165.78325 764.4
+166.79846 580.8
+175.69193 599.4
+198.93602 973.5
+198.98932 704.5
+199.21332 1252.8
+199.25194 846.8
+199.30034 659.5
+199.31100 3465.4
+199.40926 1358.5
+199.41866 483.6
+201.43616 516.4
+218.46381 594.6
+230.47644 697.9
+246.70247 566.1
+262.25610 686.4
+262.45273 619.9
+273.79016 548.2
+276.93820 508.0
+277.96997 566.0
+305.69971 615.7
+308.89951 716.8
+379.41824 543.4
+440.03271 743.4
+454.85904 650.5
+482.64990 1080.7
+492.06903 610.3
+508.81354 526.2
+532.55499 1871.7
+557.96576 599.1
+569.80682 682.8
+598.94653 719.5
+630.39569 1043.3
+678.48895 599.0
+689.20074 514.1
+742.19690 636.1
+782.78119 610.2
+795.73346 923.2
+862.06653 630.2
+1000.15497 532.2
+1055.48267 573.0
+1079.32690 544.0
+1198.23767 3722.2
+1229.37402 626.3
+1275.54443 592.2
+1436.36633 629.7
+1535.85559 522.8
+S	1050	1050	1879.9155746
+Z	3	5636.472
+Z	2	3757.983
+532.56500 2010.1
+549.18311 755.9
+676.61700 1197.0
+765.86163 631.3
+795.71790 870.3
+1198.26550 3372.9
+1571.08118 763.2
+1639.17932 588.6
+1707.26477 703.2
+1857.56311 687.6
+1860.11108 793.4
+1875.36560 685.5
+1875.90210 605.0
+1878.42480 802.9
+1878.74561 1189.7
+1879.47156 20188.0
+1879.91455 1049.1
+1880.20520 712.5
+1880.46948 811.3
+1882.19678 674.3
+1906.98767 7628.2
+1918.74536 715.3
+1930.64050 1316.5
+S	1052	1052	1880.01040793
+Z	2	3758.173
+Z	3	5636.756
+509.17636 653.3
+514.68781 576.3
+532.53033 1963.2
+549.09631 718.8
+567.22797 625.3
+676.60443 1041.2
+704.69550 680.6
+731.03918 1051.8
+818.25769 691.5
+853.90210 706.9
+910.89874 606.6
+1057.20117 779.9
+1198.18591 3357.6
+1454.12524 718.4
+1525.23853 749.7
+1877.68921 811.8
+1878.81262 1151.9
+1879.42737 19564.0
+1879.69958 1274.4
+1880.04895 1448.5
+1881.19397 752.6
+1907.03857 7233.4
+S	1053	1053	1907.47140793
+Z	2	3813.095
+Z	3	5719.139
+532.50348 1874.2
+599.74445 663.1
+630.42133 871.3
+666.83997 638.2
+676.60992 1097.0
+747.07776 609.9
+795.73474 882.0
+951.10089 698.1
+1031.19751 639.5
+1198.12097 3665.7
+1217.24890 585.7
+1354.09998 616.5
+1449.05859 620.1
+1525.47400 777.8
+1553.44800 709.6
+1607.80811 666.1
+1696.43896 612.2
+1777.81604 702.7
+1878.53186 1211.1
+1879.13428 3995.3
+1879.45081 19525.3
+1879.79395 2846.8
+1881.59485 850.6
+1907.05176 7653.8
+1930.66150 1220.3
+S	1055	1055	1879.96240793
+Z	3	5636.612
+Z	2	3758.077
+532.52295 1933.2
+545.75287 584.4
+549.13940 743.0
+609.86041 652.4
+630.38184 821.5
+676.63605 938.8
+712.26538 637.1
+795.72803 733.0
+869.96198 662.7
+932.55811 639.7
+997.10571 542.8
+1198.17102 3438.3
+1525.35828 1006.8
+1878.52576 657.1
+1879.51917 19640.3
+1879.88794 1361.4
+1880.38647 996.6
+1893.10620 662.4
+1907.05884 7696.9
+1930.54016 997.3
+S	1056	1056	1907.46499127
+Z	3	5719.12
+Z	2	3813.082
+532.48779 2113.4
+533.32312 576.6
+591.24213 563.1
+630.35480 718.0
+666.13782 633.1
+676.57373 1053.0
+677.17999 633.6
+752.97894 649.1
+765.47382 522.3
+795.72852 956.3
+815.65112 771.3
+890.01691 604.0
+971.63660 582.0
+1038.28271 584.5
+1057.13525 1023.1
+1193.26282 697.7
+1198.09094 3299.0
+1584.93835 576.6
+1617.12036 776.8
+1617.57556 755.9
+1694.20435 733.6
+1705.24536 602.9
+1716.91541 1344.4
+1870.82898 860.7
+1879.35364 20544.4
+1907.08850 7204.3
+S	1058	1058	1879.84940793
+Z	2	3757.851
+Z	3	5636.273
+532.52063 621.2
+532.56494 1351.7
+549.10724 724.6
+613.27399 589.2
+630.35358 836.0
+776.64227 729.5
+880.02496 572.8
+1021.02435 828.2
+1198.25134 3526.7
+1255.21228 666.5
+1489.07703 831.2
+1492.58008 691.1
+1525.30090 752.0
+1628.41663 661.1
+1720.00122 743.4
+1795.60693 624.3
+1846.72485 698.2
+1873.88013 805.0
+1876.09790 616.6
+1878.64478 1013.0
+1878.98657 1790.8
+1879.59155 19904.8
+1879.89966 1247.7
+1880.20117 1269.8
+1880.54333 1113.3
+1881.37878 729.7
+1907.05835 7347.8
+1907.42236 996.5
+1930.46619 932.4
+S	1059	1059	1907.41999127
+Z	2	3812.992
+Z	3	5718.985
+532.55914 1996.2
+574.84521 620.8
+639.78790 623.8
+645.47437 619.0
+651.28943 603.4
+731.07928 979.4
+795.72821 1009.2
+1025.95117 615.0
+1063.41479 593.7
+1099.28149 734.1
+1139.63477 709.4
+1198.25525 2872.9
+1489.01636 950.4
+1525.36206 984.6
+1558.91516 775.6
+1650.87854 734.1
+1674.27795 693.5
+1719.37927 1334.5
+1873.74146 633.2
+1878.13806 633.4
+1878.26611 655.3
+1879.55762 15847.0
+1879.79858 6986.5
+1880.23560 1424.5
+1881.20581 608.5
+1882.11975 804.9
+1907.00769 6833.3
+1907.29773 1273.6
+1918.66260 691.7
+1930.51575 1049.2
+S	1061	1061	417.7312796
+Z	4	1666.89382
+100.17712 516.1
+102.35645 612.7
+106.88546 695.8
+109.98991 489.5
+114.50872 615.8
+120.60013 508.0
+120.60296 538.5
+121.80163 2330.5
+131.98975 631.4
+132.12898 624.6
+137.09338 602.5
+152.29439 535.5
+154.32033 594.2
+157.60051 690.8
+165.78517 773.8
+169.49326 632.4
+171.63646 787.1
+175.11868 1022.5
+182.78098 709.2
+185.76273 532.3
+194.05771 732.4
+198.39005 530.9
+199.11566 567.7
+199.21603 854.9
+199.22137 1030.0
+199.29025 845.3
+199.30673 1258.2
+199.31352 2577.1
+199.33189 616.6
+199.41379 871.6
+204.86385 608.5
+233.16469 2914.4
+255.11139 637.2
+280.17993 775.1
+288.20239 16759.8
+289.20618 1743.1
+290.50372 552.2
+331.62122 639.4
+337.86899 1613.4
+364.62845 672.5
+375.20010 719.5
+384.53168 1788.7
+384.86740 1389.9
+387.27020 7445.8
+392.23151 680.6
+400.66132 679.1
+406.22540 3615.4
+406.72684 1104.5
+427.53961 798.9
+445.23502 1134.4
+451.23981 886.1
+451.57013 993.7
+454.55786 552.2
+457.57462 2331.7
+457.91104 2238.4
+460.56924 542.3
+463.57962 6036.0
+463.91434 4275.9
+464.24753 960.6
+469.58301 4359.9
+469.91809 4256.0
+470.25217 963.8
+476.74069 533.5
+476.76407 577.3
+486.06177 669.3
+488.24100 689.4
+495.60568 704.8
+501.28110 803.6
+506.30093 1044.3
+507.27786 2344.1
+507.61813 1118.1
+513.93781 835.0
+514.21149 621.0
+516.31323 2062.0
+526.13135 542.6
+532.51398 1703.5
+549.14771 772.4
+571.56091 567.5
+576.29407 5373.1
+576.79578 2500.2
+577.29218 1184.2
+577.69867 631.0
+600.66394 555.6
+630.81750 1104.1
+631.31714 1165.3
+631.80975 1259.5
+632.31317 1085.6
+639.82629 1672.3
+640.32336 846.7
+640.81464 20131.2
+641.31665 14265.5
+641.81805 6295.5
+642.31580 1391.3
+690.35571 972.2
+735.92889 541.9
+746.08850 629.8
+752.90045 565.3
+795.71967 1013.5
+796.84277 672.9
+851.68011 675.7
+1021.12921 663.5
+1188.13611 782.2
+1198.14453 3336.5
+1211.03955 558.1
+1318.96741 599.4
+1338.10303 627.8
+1415.66565 670.8
+S	1062	1062	418.2328246
+Z	4	1668.9
+109.49412 539.0
+121.80061 2604.6
+131.31972 607.3
+132.24750 561.9
+133.12428 962.8
+145.34494 732.0
+178.26315 589.2
+188.03665 554.4
+192.30472 653.4
+199.21288 1385.2
+199.31136 2740.2
+199.40712 1000.1
+205.20554 575.1
+255.27690 616.0
+283.70557 579.3
+287.51535 539.4
+303.80365 598.3
+305.83890 626.2
+308.87567 681.7
+316.00803 546.5
+341.23767 652.2
+342.25903 632.8
+375.20520 651.2
+379.76111 636.2
+381.34296 810.2
+469.89963 925.4
+476.78091 928.2
+499.10352 554.1
+511.24756 556.5
+523.46576 677.1
+525.72028 676.4
+532.49182 1745.3
+549.13013 587.2
+564.48383 632.0
+605.23767 596.9
+614.83368 845.9
+630.37781 791.2
+676.65521 1349.8
+712.22217 586.1
+733.51270 708.8
+783.18146 669.4
+957.77802 586.6
+1139.34338 700.4
+1198.09619 3435.5
+1217.07117 624.2
+1322.99146 550.8
+1372.80469 515.3
+1429.36316 666.1
+S	1063	1063	1879.95040793
+Z	3	5636.576
+Z	2	3758.053
+532.49298 2321.3
+592.90771 567.3
+630.38135 646.0
+676.65485 1058.5
+700.00543 528.8
+716.07678 563.7
+786.62830 644.7
+795.72736 841.6
+860.41632 608.0
+918.59869 592.1
+1048.84155 626.7
+1109.24817 679.0
+1198.10010 3021.2
+1281.25403 645.2
+1331.98108 592.3
+1558.13428 698.8
+1650.42444 671.0
+1870.13367 665.4
+1876.40491 788.8
+1878.12842 706.6
+1878.47351 830.8
+1879.05823 1437.9
+1879.56665 19510.9
+1879.83459 1615.6
+1880.32959 837.9
+1880.62573 727.7
+1880.88782 697.3
+1881.40515 653.1
+1907.04919 7129.6
+1930.55249 967.0
+S	1065	1065	1879.92124127
+Z	2	3757.995
+Z	3	5636.488
+525.01697 577.0
+532.47400 1761.7
+630.35321 1130.0
+636.73932 702.3
+676.67590 1006.9
+741.57098 576.4
+795.71552 847.2
+814.22754 583.5
+1021.03162 851.7
+1057.29871 774.2
+1115.91919 670.2
+1175.81055 581.2
+1178.37671 639.4
+1198.05908 3506.7
+1270.68628 675.3
+1525.25415 686.1
+1741.40942 672.7
+1768.65942 609.9
+1869.74182 966.7
+1878.39063 922.1
+1878.79089 1363.4
+1879.19995 3941.7
+1879.64270 18782.9
+1880.12683 3600.0
+1880.59814 1358.2
+1881.05542 1191.9
+1881.70215 635.0
+1907.06445 7284.2
+1918.53223 692.7
+1930.41968 891.3
+S	1066	1066	1907.4718246
+Z	2	3813.096
+Z	3	5719.14
+532.47638 1903.8
+538.41107 628.1
+563.45288 685.0
+575.69781 688.0
+639.38373 589.9
+676.61578 1197.7
+743.49426 636.9
+795.71442 1377.2
+883.68384 661.6
+1007.88367 533.4
+1018.59650 938.6
+1057.19702 775.9
+1198.05994 3061.2
+1458.24927 636.6
+1510.13171 664.7
+1878.37231 663.0
+1879.46521 19283.0
+1881.31958 658.7
+1907.02600 7552.8
+1928.41174 685.6
+S	1068	1068	417.7316446
+Z	4	1666.89528
+108.68001 633.6
+110.06841 504.3
+111.18559 551.1
+120.52991 589.5
+121.80132 2606.0
+122.03044 603.7
+133.11502 1101.9
+137.59952 592.3
+139.79881 642.9
+142.58507 592.2
+145.34698 635.1
+157.25075 565.0
+157.59677 772.5
+169.48557 584.9
+171.62891 639.6
+175.11864 2626.7
+176.09297 525.9
+181.59004 519.3
+188.31155 514.7
+194.13936 691.6
+199.20834 977.7
+199.26361 663.9
+199.29111 973.3
+199.30608 3469.6
+199.33884 557.5
+199.37137 631.2
+199.40472 1378.1
+202.87865 573.0
+214.82196 527.6
+229.06221 590.5
+233.16444 6549.5
+234.16777 808.0
+238.72937 708.7
+242.04984 614.4
+255.27887 683.0
+261.15994 1343.6
+278.03973 624.1
+288.20239 42355.9
+289.20639 4390.7
+318.81332 623.5
+322.51086 944.0
+337.86810 1675.4
+338.20245 1109.0
+342.15170 550.3
+342.44357 673.7
+375.20035 1670.3
+375.53519 1963.0
+384.53192 7015.0
+384.86572 4139.6
+385.53357 789.3
+387.27032 21118.2
+388.27417 2991.4
+392.22821 2080.1
+392.72861 772.1
+399.47275 775.7
+399.72079 683.6
+406.22577 10492.8
+406.72592 3400.8
+427.53546 1071.6
+428.73407 571.0
+439.23013 1223.6
+439.56284 1424.6
+439.89612 1080.4
+445.23410 3945.6
+445.56775 3246.7
+445.90347 646.5
+451.23712 6666.7
+451.57166 3313.5
+451.90680 1868.1
+457.57568 5514.3
+457.91055 4543.7
+458.24344 2197.4
+460.56726 1209.7
+460.90045 947.9
+463.54095 555.4
+463.57944 14830.2
+463.91409 9573.3
+464.24673 2377.9
+464.58383 1273.5
+469.58289 12306.9
+469.87701 844.2
+469.91714 9104.8
+470.25104 2805.1
+482.58966 749.1
+483.93423 538.2
+491.95212 691.8
+495.27014 2374.9
+495.60318 1741.8
+496.27332 677.3
+498.30429 1314.2
+498.60114 645.2
+501.27225 1296.4
+501.58749 1893.1
+502.75809 912.2
+506.30087 1393.0
+507.27777 6268.4
+507.61746 2922.7
+507.95468 1004.4
+508.28537 857.5
+511.77362 891.8
+512.25433 835.7
+512.75336 770.2
+513.60114 3136.0
+513.93652 2071.5
+514.26550 857.1
+514.74243 613.3
+516.31207 3332.9
+519.75305 773.4
+532.45880 2031.2
+549.12335 645.3
+551.77161 589.5
+567.27966 1391.3
+573.04816 613.8
+576.29376 17069.3
+576.79535 9014.0
+577.29626 2954.6
+608.09412 708.6
+616.81909 666.7
+617.31506 835.1
+617.81653 682.4
+621.82172 1336.1
+622.31305 981.2
+630.37610 846.1
+630.81848 2550.7
+631.31531 1480.7
+631.81006 4393.6
+632.31018 4246.9
+632.81140 775.2
+637.73926 523.8
+639.82428 1717.4
+640.32532 1556.9
+640.81500 55365.6
+641.31647 39285.8
+641.81763 13735.7
+642.31897 3510.7
+676.62384 1054.1
+681.34534 757.5
+690.34802 3495.5
+690.85138 1614.9
+713.30792 602.3
+769.09222 611.0
+781.26483 569.7
+795.73370 841.4
+827.80762 582.5
+958.97272 573.9
+1023.48785 1195.9
+1049.30457 636.5
+1057.21338 763.0
+1188.27490 859.0
+1198.02124 3471.9
+1656.93018 574.8
+1677.08533 583.5
+S	1069	1069	418.2330746
+Z	4	1668.901
+116.74455 604.5
+117.06231 621.5
+119.97131 602.7
+120.08027 1233.8
+120.71118 562.7
+121.79034 674.8
+121.80128 2269.8
+128.10986 495.2
+128.59218 610.5
+135.19328 582.5
+162.77980 631.4
+165.78481 744.8
+169.48820 755.6
+175.11877 3105.9
+182.77744 846.4
+193.18843 592.1
+198.88544 603.4
+198.93631 736.8
+199.03450 634.0
+199.28918 856.3
+199.30046 1652.4
+199.30722 2489.5
+199.32233 1084.5
+203.14661 592.7
+203.63313 651.3
+211.16820 553.4
+224.24460 540.7
+233.16425 8600.0
+234.16829 1227.1
+238.41811 704.6
+249.55734 696.9
+255.28362 680.0
+261.15884 1582.5
+271.17444 714.9
+274.50314 577.1
+288.20236 51719.0
+289.20627 5180.3
+326.46774 615.4
+330.77832 564.1
+337.86911 2933.6
+375.20078 4369.7
+375.54233 649.7
+377.53784 723.9
+384.53204 6701.4
+384.86591 4350.2
+385.20065 1978.2
+387.27032 26154.8
+388.27383 5115.4
+392.22815 1965.4
+399.47144 1322.9
+400.52408 592.0
+406.22543 11481.7
+406.72720 4650.7
+407.22659 703.8
+414.52151 558.2
+427.87595 779.6
+439.22958 1920.4
+439.56671 1108.7
+439.90439 1452.4
+440.23416 929.3
+445.23343 4341.7
+445.56775 2102.0
+445.90317 1099.7
+446.21661 846.3
+451.23669 5933.1
+451.57086 4687.0
+451.90485 1424.9
+456.23526 703.2
+457.57526 7375.6
+457.91098 5800.9
+458.24490 2337.6
+460.56845 4249.1
+460.90289 2229.9
+461.23621 898.0
+463.25281 917.1
+463.57925 17366.4
+463.91382 12824.9
+464.24802 5202.4
+464.58249 1572.5
+464.91348 551.9
+469.25729 1149.7
+469.58298 15527.1
+469.87885 719.1
+469.91687 11224.8
+470.25171 5579.5
+470.58673 1372.0
+476.73373 698.7
+492.90302 571.2
+495.26901 3702.3
+495.60483 3463.0
+495.93887 1083.4
+498.30414 1437.3
+501.27527 2181.1
+501.73514 828.4
+501.92413 1696.4
+502.26074 913.4
+506.29529 809.7
+506.80112 828.7
+507.27716 5942.4
+507.61502 4535.2
+507.92609 1697.5
+507.95596 1142.9
+510.74026 1199.4
+511.76953 1099.2
+512.26544 664.2
+513.60187 2884.9
+513.93719 2580.0
+514.27307 715.3
+516.31274 4219.9
+523.73627 557.5
+532.49719 2077.5
+533.69653 551.8
+567.28076 785.9
+576.29419 19714.2
+576.79523 13979.1
+577.29590 2729.0
+584.27344 999.0
+603.22882 559.1
+616.81628 1759.3
+617.31763 657.5
+621.80731 785.7
+622.31030 860.7
+630.38947 706.9
+630.81726 3012.9
+631.31964 1820.8
+631.80847 5446.5
+632.31189 3063.2
+632.81610 848.5
+639.82318 2802.4
+640.32410 2283.9
+640.81488 69874.0
+641.31653 46240.2
+641.81781 17308.1
+642.31946 4284.3
+644.18799 640.8
+652.31372 628.8
+656.29919 767.7
+676.63507 1004.7
+681.35004 929.9
+683.34949 801.0
+684.35901 809.9
+690.35004 3944.7
+690.74640 660.3
+690.85095 2475.5
+696.86224 1281.5
+795.72913 897.6
+878.59662 610.8
+966.61676 615.1
+974.62708 767.0
+1023.49365 1032.4
+1057.23523 718.8
+1089.50134 529.2
+1153.51733 702.7
+1173.16797 603.8
+1198.11609 3198.1
+1253.32373 666.7
+1472.59888 619.5
+1625.78564 619.0
+S	1070	1070	1879.95540793
+Z	3	5636.591
+Z	2	3758.063
+532.51208 1632.1
+549.12329 960.9
+560.20721 623.7
+676.62115 1245.6
+746.73822 592.3
+795.71680 964.6
+1019.75085 977.0
+1057.22766 763.6
+1111.04114 705.7
+1194.46008 582.1
+1198.14575 3080.6
+1306.74939 712.9
+1336.19800 757.1
+1343.04944 665.6
+1438.03271 636.8
+1499.92310 674.3
+1717.62500 729.8
+1821.46069 609.0
+1876.33167 982.7
+1879.47852 19614.3
+1879.75842 2825.4
+1881.24805 1141.0
+1906.68140 1191.9
+1906.96887 7134.5
+1930.49036 938.5
+S	1072	1072	417.7313721
+Z	4	1666.89419
+109.61337 672.4
+121.80108 2368.6
+121.84829 570.5
+123.71575 551.9
+137.47739 623.6
+141.85097 730.8
+144.38216 745.7
+146.00427 559.2
+162.06096 537.7
+168.20961 764.3
+185.47757 695.7
+197.69499 591.4
+198.93188 746.3
+199.22218 1254.3
+199.30040 764.4
+199.30928 1301.8
+199.32039 3004.1
+199.34660 882.2
+199.41843 1322.1
+200.05734 553.9
+221.65471 531.6
+225.91411 553.6
+235.69843 607.5
+251.59254 542.4
+255.28888 691.9
+271.39081 637.2
+273.12448 590.6
+350.21164 526.3
+360.01630 553.2
+363.90439 574.6
+381.36426 664.8
+398.11591 670.0
+400.87338 608.7
+419.05365 622.6
+427.53909 921.9
+469.86606 694.2
+482.64978 712.9
+527.84052 655.3
+532.48895 1706.1
+532.74835 526.7
+533.26025 579.7
+593.71906 566.6
+630.28870 654.7
+630.40918 836.7
+635.52936 580.6
+676.62592 1199.8
+681.47968 795.4
+795.72632 744.2
+809.87830 771.8
+921.87177 541.5
+989.94928 739.9
+1006.75757 547.9
+1018.44739 631.5
+1044.26892 501.1
+1055.18091 513.0
+1057.22498 859.6
+1196.51770 617.4
+1198.09216 3915.7
+1310.86707 612.2
+1395.49731 606.5
+1525.41882 755.0
+S	1073	1073	418.2330746
+Z	4	1668.901
+105.05095 564.6
+106.48346 547.7
+107.30316 545.7
+107.53960 568.4
+121.79943 1528.4
+123.59433 525.8
+147.03246 669.7
+147.54688 598.3
+158.28197 620.1
+162.92162 579.7
+166.44008 604.2
+172.56271 610.7
+175.11853 1494.7
+181.99606 619.7
+184.97774 546.8
+190.10835 575.3
+194.01772 636.0
+195.39844 612.3
+197.82355 651.9
+199.02873 538.8
+199.21271 900.9
+199.29088 1028.2
+199.30942 2785.5
+199.33730 642.3
+199.40756 857.1
+233.16367 2645.4
+235.16103 578.5
+244.19614 535.2
+253.97537 580.2
+266.24457 771.9
+267.77396 559.2
+279.67261 563.6
+288.20227 19765.6
+289.20630 2094.8
+308.88785 595.3
+335.17038 553.8
+337.86862 905.1
+352.33762 500.2
+384.53189 3082.8
+384.86453 1417.9
+387.27020 10730.8
+388.27512 1790.8
+406.22562 5297.5
+406.72757 1916.5
+419.45084 623.9
+419.92569 572.0
+427.52347 909.6
+445.23209 887.7
+445.56860 894.6
+445.90204 678.5
+451.23703 3038.9
+451.56915 1747.7
+451.90204 785.4
+457.57523 2173.1
+457.90979 1942.3
+460.57132 941.2
+460.90244 1414.7
+463.57932 4533.1
+463.91367 4451.0
+464.24551 1748.2
+464.58832 803.2
+469.58228 5291.1
+469.87576 971.8
+469.91827 2740.9
+477.23511 675.3
+495.27127 1199.1
+495.60294 1142.4
+495.94553 854.0
+507.27884 1748.2
+507.61786 960.7
+507.95230 1239.9
+512.35278 613.9
+513.60193 1133.2
+513.93750 792.7
+516.31403 1759.8
+532.51154 1915.5
+562.09021 560.1
+576.29395 6795.0
+576.58899 658.8
+576.79504 4548.1
+577.29846 1591.8
+602.68018 555.7
+616.80627 740.4
+630.37146 1053.8
+631.80792 1801.2
+632.30896 1584.1
+640.31256 543.3
+640.81458 25351.5
+641.31628 17556.1
+641.81720 6750.3
+642.32056 1351.7
+656.47614 605.1
+676.58984 629.8
+676.63342 546.4
+676.66168 546.7
+690.34808 1211.3
+728.44458 538.3
+729.16840 586.3
+731.08453 681.2
+795.71271 632.7
+810.14966 633.6
+903.21442 534.9
+973.92651 579.0
+1004.33466 603.1
+1016.78088 628.6
+1019.71954 843.6
+1119.39697 648.7
+1187.69128 686.0
+1198.14209 3371.7
+1199.15186 639.3
+1217.03577 609.2
+1222.74829 590.3
+1353.27271 607.9
+1360.32458 651.6
+1374.97119 579.0
+1452.28223 638.6
+1525.32007 709.4
+S	1074	1074	1879.94924127
+Z	2	3758.051
+Z	3	5636.572
+532.47418 1907.7
+533.99078 648.4
+549.09253 825.3
+571.07520 690.4
+599.68988 644.5
+630.35455 606.6
+676.64917 856.8
+720.72864 678.4
+818.49042 617.6
+898.49768 584.1
+947.10809 575.8
+956.72498 683.8
+1198.05835 3229.9
+1288.24939 667.3
+1325.10498 645.9
+1525.27368 712.8
+1537.03748 729.1
+1696.96460 673.6
+1872.72864 793.4
+1879.31152 3231.7
+1879.55347 18950.6
+1881.45227 889.8
+1907.09692 7122.3
+1930.40662 1012.8
+S	1076	1076	1879.93124127
+Z	2	3758.015
+Z	3	5636.518
+532.53577 1883.8
+565.35455 605.3
+581.85883 821.9
+598.17975 624.8
+781.57709 678.6
+785.90845 656.3
+795.71667 744.1
+860.58008 628.3
+1187.95764 960.3
+1198.20349 3302.9
+1870.29895 602.0
+1878.98596 779.5
+1879.49023 19582.4
+1880.60474 582.6
+1907.11426 7480.7
+1930.40601 814.8
+S	1077	1077	1907.4378246
+Z	3	5719.038
+Z	2	3813.028
+532.54309 1842.0
+549.13745 1047.1
+552.20514 599.8
+676.62531 1116.6
+742.43640 680.9
+916.54266 642.8
+1019.74414 731.2
+1128.98828 601.4
+1198.21155 3072.0
+1694.69507 650.9
+1695.14294 662.3
+1878.78198 1236.5
+1879.10706 1708.1
+1879.49719 19870.7
+1879.86621 1597.8
+1880.23828 1201.2
+1907.04358 6891.1
+1930.52991 842.9
+S	1079	1079	1879.9378246
+Z	2	3758.028
+Z	3	5636.538
+532.53845 1869.3
+560.42279 648.0
+634.49957 582.2
+697.82697 652.2
+1057.17590 1187.3
+1080.92468 743.5
+1188.12646 761.4
+1198.19812 3610.8
+1294.17615 603.1
+1432.36060 702.6
+1525.29431 691.9
+1664.50220 733.6
+1878.08142 1416.7
+1878.80273 1073.4
+1878.99097 1683.8
+1879.45569 19286.8
+1879.91003 2185.3
+1880.12781 872.1
+1880.83374 1405.5
+1907.05798 7332.8
+1918.68787 970.7
+1930.39502 973.3
+1972.01965 681.7
+S	1080	1080	1907.43740793
+Z	2	3813.027
+Z	3	5719.037
+532.49420 1934.2
+598.98492 605.7
+676.64374 980.9
+691.27600 621.0
+762.69281 643.9
+795.69794 1201.4
+816.51434 597.6
+840.68512 707.9
+1023.15906 628.6
+1198.10938 2777.5
+1486.69678 616.2
+1525.29382 804.1
+1641.48474 656.4
+1776.88489 824.1
+1860.06287 817.8
+1877.83545 756.3
+1878.21765 762.8
+1879.54004 19266.3
+1880.25232 968.5
+1881.19629 840.8
+1906.11072 730.4
+1907.04443 6813.8
+S	1082	1082	417.7335671
+Z	4	1666.90297
+106.84444 578.9
+113.44401 684.2
+115.67284 544.1
+120.43208 544.5
+121.80116 2515.0
+125.47028 565.4
+128.95778 571.5
+135.06723 613.7
+142.91794 589.6
+149.71385 600.3
+160.56374 642.7
+165.78441 781.0
+175.11961 640.3
+183.60289 638.6
+188.72000 627.1
+199.19708 888.0
+199.20726 731.3
+199.21437 938.3
+199.29425 1544.8
+199.30476 1859.5
+199.31071 2061.8
+199.32533 680.7
+199.40282 761.2
+199.40907 1016.1
+203.95889 635.2
+207.56490 633.0
+212.74423 659.5
+223.72855 613.8
+226.90378 538.2
+233.16531 1259.2
+250.08081 680.2
+282.65378 595.3
+288.20264 9241.0
+289.20520 854.1
+299.51172 1008.1
+311.74945 530.0
+342.22202 672.1
+350.28799 615.7
+373.89270 702.6
+381.30356 612.1
+384.53091 712.3
+384.86862 930.7
+387.27026 4338.7
+388.27747 956.2
+396.39682 575.8
+406.22495 1831.2
+407.17465 623.9
+416.70728 579.3
+417.87634 554.2
+451.23550 1053.8
+457.57837 1046.2
+457.90985 1455.1
+463.58151 1216.2
+463.91425 1005.7
+464.24948 911.0
+469.58276 1477.3
+469.91559 1011.0
+476.76767 742.1
+500.68146 561.5
+502.11270 691.3
+507.27625 940.0
+507.59537 827.8
+516.31329 773.2
+532.46869 2095.9
+548.35608 717.2
+549.18799 542.5
+576.29382 4019.7
+576.79626 2785.8
+580.40784 571.0
+640.81549 12946.3
+641.31781 8438.0
+641.81683 3274.1
+643.02734 795.8
+644.55737 577.5
+676.62445 1188.5
+690.35327 624.8
+731.01227 605.6
+765.23553 626.8
+795.71631 950.3
+816.72479 601.1
+818.68445 679.5
+840.10486 681.4
+857.91711 602.6
+865.62048 562.3
+888.47461 594.8
+901.22699 537.0
+1026.48621 603.5
+1061.39026 690.1
+1198.04272 3341.5
+1272.48840 688.3
+1294.03003 581.8
+1377.74817 582.4
+1459.44299 597.2
+1533.17969 582.2
+1649.91101 694.3
+S	1083	1083	418.2353246
+Z	4	1668.91
+111.05691 501.5
+111.19381 616.4
+112.29844 592.4
+119.54139 667.7
+119.72321 616.7
+120.08038 1264.9
+121.71823 569.9
+121.80000 1470.4
+121.80220 1728.5
+121.81056 586.6
+133.12213 1020.3
+134.07942 493.8
+134.61493 624.2
+137.26276 724.7
+140.23627 528.7
+144.08728 559.1
+150.50941 694.7
+155.61534 517.3
+171.63896 601.2
+172.77432 512.3
+175.11870 5552.9
+178.56604 576.2
+198.92981 1072.8
+199.21269 933.3
+199.31041 3070.1
+199.34702 982.6
+199.40865 1091.8
+221.45082 639.4
+233.16455 11876.1
+234.16714 1641.8
+247.04448 707.5
+254.97290 557.0
+255.22685 651.3
+261.15961 1987.8
+271.17465 1288.5
+286.96426 505.1
+288.20264 88794.9
+289.20663 10210.9
+293.72018 630.5
+308.84167 694.3
+318.63931 528.8
+337.86877 2506.9
+338.20407 866.7
+341.14661 1006.7
+350.28195 641.5
+364.19553 574.6
+375.20041 4571.8
+375.53491 2884.9
+375.86905 941.8
+380.26553 589.6
+381.28189 694.2
+384.53204 11680.4
+384.86667 9335.2
+385.20010 2082.1
+386.19202 540.7
+387.27066 44624.8
+388.27423 6976.8
+389.27563 979.9
+392.22815 4136.7
+392.72946 2870.1
+399.71988 692.9
+404.29855 616.5
+406.22598 14263.9
+406.72720 1778.8
+427.46204 717.0
+427.54572 1633.3
+427.88065 1642.0
+428.72827 1504.6
+439.23038 3417.8
+439.56363 4163.0
+439.90204 1970.8
+440.23386 1490.1
+445.23407 7356.6
+445.56781 5719.0
+445.90112 2423.2
+446.21567 1651.4
+446.72333 976.1
+451.23730 12580.8
+451.57147 9757.5
+451.90665 3831.7
+452.23987 1007.0
+452.57614 972.8
+454.56613 2216.9
+457.57632 14948.2
+457.91095 9742.6
+458.24384 3172.2
+458.57739 1240.2
+459.06134 559.9
+460.56830 4693.1
+460.90356 3278.4
+461.23813 3420.2
+463.24957 1087.7
+463.57965 21844.4
+463.91415 18837.9
+464.24805 8336.8
+464.58179 2068.1
+464.91782 802.2
+469.26013 1386.2
+469.58322 21977.8
+469.88040 596.9
+469.91785 13026.0
+470.25189 6620.9
+470.58524 2413.8
+476.21167 623.1
+476.76840 1020.1
+483.25983 704.2
+495.27139 5859.5
+495.60315 4902.4
+495.94080 1230.2
+498.30304 2019.2
+501.27438 4420.4
+501.58691 2248.7
+501.61899 1452.9
+501.92667 2768.6
+502.25552 1106.3
+502.75952 2027.4
+503.25439 743.2
+506.29880 939.6
+506.80029 929.1
+507.27808 8653.4
+507.58945 1831.7
+507.61765 4806.3
+507.92691 2724.7
+507.95605 1356.5
+508.26099 1324.8
+510.73758 1557.7
+511.24756 858.2
+511.77313 2304.7
+512.26526 1398.9
+512.74805 854.4
+513.60223 5632.6
+513.93671 4653.1
+514.27277 884.5
+516.31317 8968.7
+517.31775 1530.8
+519.75153 822.1
+532.48523 2133.2
+549.04584 799.6
+567.28058 2217.0
+567.78394 818.9
+576.29431 35412.5
+576.79553 23700.3
+577.29688 7991.0
+577.80042 1265.6
+584.27161 1335.0
+584.77863 728.5
+609.33014 639.0
+616.81763 1711.5
+617.31598 778.7
+621.81390 2872.1
+622.31616 763.4
+622.81207 707.1
+630.28882 893.6
+630.81976 4896.7
+631.31909 2759.4
+631.80975 8849.2
+632.31171 5076.4
+632.81512 1963.8
+633.81110 1877.5
+639.82446 3557.1
+640.32520 3060.2
+640.81531 124781.6
+641.31665 88403.9
+641.81818 33073.5
+642.31915 8824.5
+642.53516 547.3
+642.82123 2387.3
+651.45648 617.3
+666.36267 1230.4
+667.36096 785.1
+676.61871 826.6
+681.34869 860.8
+681.84631 1040.3
+683.34912 3365.9
+684.35272 1682.8
+685.34930 625.0
+690.35052 6498.6
+690.85144 5715.0
+691.35150 2780.7
+696.36469 1374.2
+696.86536 1104.4
+723.37921 2523.0
+859.40588 658.5
+913.15857 541.7
+1016.98334 558.7
+1023.48230 2175.9
+1024.49023 1057.9
+1057.21423 783.2
+1152.52307 1542.2
+1156.95447 586.8
+1187.45190 533.0
+1198.08594 3431.7
+1377.38525 717.0
+1525.11731 670.8
+1537.55933 749.1
+1630.03625 587.3
+S	1084	1084	566.7243246
+Z	4	2262.866
+148.89890 559.6
+152.60120 544.0
+168.44780 626.0
+188.25572 688.2
+188.26753 1057.4
+188.27190 987.6
+188.28238 1082.9
+188.29292 874.7
+188.30093 1105.3
+188.31352 622.3
+198.83360 683.1
+198.93129 958.4
+199.22641 1012.1
+199.26280 511.5
+199.29391 902.8
+199.30458 1737.0
+199.31685 1404.0
+199.32484 2398.9
+199.33856 1027.9
+199.40070 637.3
+199.41484 863.7
+205.47192 638.7
+207.58824 635.2
+209.94444 753.3
+223.07051 974.1
+231.13290 604.8
+240.09712 3510.7
+246.15572 13589.4
+247.16037 719.7
+258.10764 1363.7
+271.59552 775.5
+271.75204 592.3
+271.90656 773.6
+300.64407 541.7
+307.92520 566.9
+311.13464 2462.7
+339.63678 670.0
+341.94778 502.1
+350.27942 676.6
+370.60974 715.6
+372.17471 2639.4
+377.15466 697.9
+380.05893 549.5
+384.60861 2159.5
+390.79785 545.4
+393.61389 1157.0
+411.85309 2035.3
+412.18707 1771.9
+412.70483 933.2
+421.70837 9754.1
+422.20959 3038.8
+422.70862 1113.2
+425.17892 1035.6
+438.18619 672.4
+438.51663 961.7
+440.12469 3593.9
+440.62546 1253.8
+441.12112 1099.3
+442.08511 775.3
+444.19357 753.5
+444.53015 910.2
+449.12827 5878.2
+449.63007 1283.1
+449.86896 2742.3
+450.12601 1908.9
+450.20303 2626.7
+458.13416 1523.4
+462.22861 1034.1
+479.22189 11563.3
+479.72348 5400.6
+480.22458 1008.5
+481.57162 2330.9
+481.90475 1512.8
+483.12610 573.7
+497.14597 954.8
+497.63699 1120.8
+498.19177 1069.6
+502.44751 693.9
+505.15237 916.0
+506.14929 7497.3
+506.21545 1190.1
+506.65219 3375.1
+507.14859 2633.0
+507.64871 997.4
+511.10529 689.4
+515.15576 5761.4
+515.65723 2322.1
+516.15430 2106.2
+526.56696 861.3
+532.47760 2012.3
+534.73663 3920.6
+535.23987 1710.8
+540.20416 1089.4
+541.18860 598.4
+543.74310 22704.1
+544.24438 11899.0
+544.74707 2960.4
+546.70929 803.8
+546.89301 1524.1
+546.95032 1221.4
+547.22540 1355.8
+548.45233 1170.5
+548.69891 1734.3
+548.94946 2827.1
+549.08209 657.5
+549.20624 845.5
+549.26031 3854.9
+550.70789 1242.9
+550.95844 939.3
+552.70636 1031.1
+552.95331 2847.3
+553.20380 1045.7
+588.68903 1306.5
+589.18835 900.9
+597.26093 939.5
+606.55383 1110.5
+607.89893 1212.6
+608.27423 1596.3
+609.28381 778.7
+610.82007 656.6
+614.13214 1075.4
+617.27686 23496.8
+617.77826 15570.0
+618.28009 5442.7
+618.78223 728.7
+626.57117 656.1
+636.19647 953.0
+637.17950 682.6
+639.23511 1071.1
+639.56635 1022.3
+639.89844 1236.8
+640.23438 1100.1
+640.56915 959.5
+644.70105 1496.6
+645.23743 2912.1
+645.57336 2935.6
+645.69775 619.8
+645.90503 1083.3
+646.24023 1784.3
+646.57568 681.2
+648.90381 775.2
+652.82001 2204.3
+653.21063 917.1
+653.32544 1091.1
+655.21649 843.0
+655.55426 1422.1
+655.88745 1144.3
+657.23767 1495.9
+657.57239 1553.0
+657.90692 1075.7
+660.22467 1017.3
+660.89752 1301.0
+661.22522 3209.0
+661.55908 2524.7
+661.89490 1821.1
+662.91589 1812.9
+663.24738 3306.8
+663.58008 3009.4
+663.91400 2644.3
+664.24646 1541.8
+665.29388 1724.3
+665.78583 6279.3
+666.28351 3346.8
+666.56531 857.6
+666.78748 1071.2
+666.89899 4549.5
+667.23047 3791.2
+667.56415 3181.5
+667.89990 1167.8
+668.25885 1076.3
+668.58612 801.9
+668.91931 9875.7
+669.25256 9260.3
+669.58606 6347.0
+669.91913 4120.4
+670.25153 1444.1
+672.90332 3210.9
+673.23999 1623.5
+673.36359 776.9
+673.57281 1609.1
+673.90326 1189.0
+674.29834 26618.6
+674.79956 16744.8
+675.30042 6641.5
+675.80249 1513.8
+676.62610 1170.6
+685.16974 2662.2
+686.31604 705.3
+687.16589 1371.3
+701.71600 1347.3
+702.23303 1474.4
+702.36426 802.0
+702.73022 1093.7
+710.72418 1735.5
+711.22705 1552.1
+712.23108 609.1
+712.29077 2025.7
+721.30188 1210.5
+721.79785 846.3
+729.81732 895.9
+730.30743 4228.0
+730.80829 3378.6
+731.30841 1498.1
+731.88501 2660.5
+732.38416 2657.8
+738.81915 4251.7
+739.31927 3480.5
+739.82196 797.3
+742.19141 801.8
+768.20941 3596.5
+770.20502 1361.4
+772.20068 989.4
+781.39526 905.8
+795.72668 861.5
+823.29968 788.4
+836.77911 731.6
+841.33087 2603.3
+842.41284 856.7
+844.78406 1203.6
+871.79034 952.8
+880.30182 1893.5
+880.79968 1570.2
+881.29901 1224.8
+896.00519 656.8
+988.40002 2288.6
+1029.30603 1107.0
+1030.31104 765.1
+1032.28357 597.8
+1057.21179 690.5
+1086.41663 621.7
+1102.44153 1921.4
+1198.07007 3503.5
+1309.56482 695.4
+1601.49695 547.1
+1777.46118 721.9
+1877.78552 883.5
+1879.07031 850.7
+1879.49182 20691.4
+1879.77795 1080.4
+1881.20459 794.4
+1907.05420 7140.9
+1930.34375 847.9
+S	1086	1086	417.7324096
+Z	4	1666.89834
+110.90884 539.4
+113.45175 620.7
+121.80078 2468.6
+128.56354 731.9
+133.44936 580.8
+134.77299 570.7
+135.58740 602.3
+151.87460 709.1
+165.78514 639.9
+171.63860 853.3
+174.99625 681.1
+175.11832 2552.2
+190.94124 630.4
+194.63922 545.0
+198.92723 879.1
+199.20250 552.0
+199.20784 568.1
+199.21774 864.0
+199.26129 1082.5
+199.27434 687.9
+199.30037 2500.2
+199.31552 1864.1
+199.32367 913.7
+199.33443 1114.1
+199.40488 950.7
+221.28352 526.0
+232.33434 579.5
+233.16418 3986.4
+233.55280 843.4
+234.16916 692.7
+261.16037 840.4
+262.18710 590.4
+288.20239 37614.9
+289.20609 4116.5
+291.26862 588.2
+291.99393 585.3
+317.57303 764.4
+322.51038 814.3
+326.83743 575.5
+337.86816 1056.6
+350.27954 697.8
+354.29025 536.9
+359.81012 594.6
+361.15146 646.6
+375.20090 2021.7
+375.53470 1849.0
+384.53152 4109.4
+384.86551 2839.2
+385.20007 662.7
+387.27029 18825.9
+388.27499 2735.9
+392.22894 1621.1
+392.73242 944.9
+401.11990 591.2
+406.22565 8611.0
+406.72791 4386.9
+427.87964 628.0
+428.72568 614.0
+439.23120 1721.4
+439.56366 1269.6
+439.71268 609.8
+444.93054 499.3
+445.23386 4036.5
+445.56723 2366.7
+445.90314 1220.8
+451.23688 4691.2
+451.57202 2958.2
+454.56830 970.5
+457.05991 634.5
+457.57672 4825.4
+457.91119 2706.0
+458.24371 1293.7
+459.74762 569.9
+460.56818 1773.6
+460.90231 1250.7
+461.23904 774.6
+461.47549 554.7
+463.57956 8875.9
+463.91452 6669.1
+464.24759 2369.7
+464.57928 1042.6
+465.84744 543.8
+469.58310 7141.3
+469.87900 550.4
+469.91672 6597.6
+470.25177 1907.2
+476.77359 700.5
+481.88922 744.7
+482.60822 929.8
+495.26746 1837.7
+495.60522 1965.3
+501.58951 1683.5
+501.92560 1181.3
+502.75739 1071.3
+507.27768 2957.0
+507.61591 1351.8
+511.77136 870.4
+512.26801 631.6
+513.60138 1719.9
+513.93683 1561.5
+516.31281 3646.8
+517.31750 782.8
+520.04712 592.2
+532.48328 1975.2
+549.10303 703.5
+567.28180 1606.1
+568.07513 669.6
+576.29407 15427.9
+576.79559 10261.3
+577.29883 3424.1
+577.79675 588.2
+602.23816 861.5
+613.80042 670.3
+622.32239 824.0
+631.32019 1164.1
+631.81055 3587.9
+632.31134 2592.2
+639.82416 1170.5
+640.32477 1368.6
+640.81512 44831.6
+641.31653 32888.4
+641.81818 11117.6
+642.31702 1618.3
+666.35779 635.2
+668.03802 637.1
+676.61572 1133.1
+690.34924 2645.0
+690.85297 2271.2
+795.70001 1004.6
+1057.19739 919.9
+1164.76831 637.4
+1187.07739 603.5
+1198.07971 3347.3
+1673.58069 634.6
+S	1087	1087	418.2340746
+Z	4	1668.905
+106.30579 562.8
+112.74019 554.7
+113.44841 784.8
+115.32848 572.6
+118.00522 531.4
+121.80081 2136.8
+122.39064 553.5
+141.85188 763.3
+143.28348 614.2
+157.58412 614.3
+165.78517 902.0
+171.63876 722.3
+175.99573 561.2
+183.84045 500.1
+198.84007 579.1
+198.93559 893.3
+199.20515 484.2
+199.21149 1152.6
+199.22765 778.3
+199.28674 878.1
+199.30020 1785.1
+199.30969 2585.0
+199.32118 1580.9
+199.40891 604.5
+199.42087 564.8
+212.50401 508.8
+216.08028 580.8
+233.42943 652.1
+271.43756 605.7
+285.29639 547.6
+298.50537 555.2
+308.86566 782.0
+356.16623 593.0
+364.89664 583.2
+397.30716 559.0
+416.45856 580.7
+449.42386 674.4
+465.01117 696.1
+469.88181 727.3
+476.77121 1098.8
+482.59543 655.2
+532.47229 1629.6
+541.06274 552.1
+545.19788 646.7
+581.32837 589.5
+597.81451 832.9
+630.33514 690.2
+658.41730 551.5
+658.45709 569.1
+676.62012 1336.5
+738.62024 606.2
+764.38440 699.3
+795.72369 995.1
+809.10852 574.0
+811.81519 602.1
+850.76147 625.8
+911.49951 656.6
+970.90063 551.7
+1019.71942 807.0
+1057.22253 647.9
+1198.04846 3153.1
+1488.37769 657.9
+1611.56616 666.4
+S	1088	1088	566.7228246
+Z	4	2262.86
+145.00352 555.6
+151.44183 589.3
+156.31491 554.1
+162.70528 615.3
+188.25491 600.9
+188.26271 692.0
+188.27077 832.1
+188.28659 1545.9
+188.30672 1140.7
+188.31677 1002.5
+199.22397 1916.5
+199.29971 844.2
+199.32144 3142.6
+199.34109 808.9
+199.35019 698.3
+199.37671 645.4
+199.40826 613.2
+199.41888 1058.5
+201.84706 608.8
+206.69008 583.3
+210.09785 541.2
+213.29121 563.0
+237.62840 748.4
+252.17851 506.5
+255.26578 663.5
+390.28372 562.6
+390.93182 713.9
+446.42328 495.7
+448.10120 508.8
+479.19131 543.3
+532.47321 1648.7
+537.59100 592.8
+539.45825 508.7
+541.67224 571.0
+555.88721 539.0
+586.08594 640.9
+654.01880 690.7
+676.63489 1067.4
+690.77527 501.9
+795.73279 851.5
+815.64691 617.0
+840.28522 561.5
+871.08478 593.6
+995.63220 524.9
+1040.14233 600.6
+1115.61536 535.8
+1198.05518 3260.7
+1343.12622 614.1
+1417.97656 633.3
+1424.18604 669.7
+1434.12207 611.9
+1462.01416 525.1
+1492.90259 591.2
+1508.74683 563.6
+1737.05664 581.9
+1877.19226 706.7
+1878.24829 737.0
+1878.69446 1496.1
+1879.51196 19615.1
+1880.32922 1882.6
+1881.92236 759.5
+1906.54651 793.5
+1906.80652 907.9
+1907.07458 6856.8
+1907.64612 988.0
+1909.43970 636.9
+1930.43286 992.5
+S	1090	1090	417.7330796
+Z	4	1666.90102
+102.39977 532.1
+107.29562 526.8
+119.21740 629.4
+121.79600 608.1
+121.80087 2224.0
+123.58775 624.7
+127.77853 568.8
+131.34570 569.5
+145.73035 605.9
+152.33107 683.7
+154.07692 560.9
+164.72044 628.7
+165.78552 814.9
+167.77307 527.6
+175.11859 2509.5
+182.77037 591.1
+188.02951 579.4
+198.93198 748.6
+199.20648 844.1
+199.26704 787.9
+199.28358 1267.1
+199.29320 1064.8
+199.30440 2600.5
+199.32463 1146.6
+199.40295 730.1
+204.21190 635.7
+216.22681 628.5
+233.16466 4224.9
+271.32855 534.3
+280.15155 736.4
+288.20242 31677.0
+289.20615 3355.3
+350.29141 733.1
+355.18805 714.3
+375.20169 1013.7
+375.53705 1420.6
+378.01547 574.7
+383.54706 580.8
+384.53210 4590.8
+384.86728 2934.3
+385.20102 1460.1
+387.27054 14995.5
+388.27444 2447.2
+392.22751 1526.1
+392.73151 1080.0
+406.22537 7887.2
+406.72699 2156.9
+408.78229 543.6
+410.50977 611.0
+412.16791 651.3
+426.80096 587.7
+427.49619 773.6
+427.52298 520.2
+428.85138 681.3
+439.22919 1460.3
+439.90500 980.9
+445.23441 1868.1
+445.56775 1944.2
+445.89874 861.2
+451.23782 3343.0
+451.57080 3267.1
+457.57642 3786.4
+457.91025 2763.1
+458.24420 1098.5
+460.56586 1626.8
+460.89621 754.5
+463.57986 6802.0
+463.91461 4639.8
+464.24655 1802.9
+464.58203 1146.9
+469.58331 5715.9
+469.87643 960.9
+469.91660 3317.1
+470.25232 1162.6
+476.78180 718.1
+480.42947 534.9
+495.27173 1878.9
+495.60477 1296.2
+498.30444 925.1
+501.27521 1593.5
+501.92783 651.6
+502.76071 801.0
+507.27710 2465.6
+507.59027 1337.1
+507.93140 1485.6
+510.73682 858.2
+511.77582 757.1
+512.25104 650.7
+513.60071 1644.0
+513.93555 1214.5
+514.27576 740.5
+516.31189 2536.7
+517.31708 676.8
+532.56329 1913.1
+540.16968 617.6
+542.13293 593.7
+567.28912 799.5
+576.29431 11228.9
+576.79553 6726.8
+577.29645 2304.4
+584.77252 595.7
+591.27454 630.8
+594.25415 648.9
+608.12219 592.0
+621.81348 1042.7
+626.38226 566.9
+630.81744 911.9
+631.31781 871.6
+631.81079 2852.1
+632.31226 1402.6
+639.82831 776.1
+640.32422 1003.8
+640.81512 41386.7
+641.31628 26121.8
+641.81860 10327.6
+642.31934 2216.3
+676.62073 824.5
+690.35120 1540.9
+690.85175 1404.8
+723.37561 1170.1
+750.54895 699.0
+783.63171 679.2
+795.72833 1156.8
+820.08862 549.1
+915.26996 677.7
+1057.20984 1098.0
+1152.51807 794.1
+1154.81177 585.0
+1174.53308 662.3
+1198.25281 3134.8
+1323.25159 727.5
+1331.47278 556.9
+1521.81738 607.1
+1573.67432 722.4
+S	1091	1091	566.4728246
+Z	4	2261.86
+145.60507 582.6
+146.90810 495.2
+148.39677 516.0
+160.17516 504.9
+165.78273 886.0
+182.70834 545.3
+183.08649 601.6
+194.16611 558.9
+198.02737 577.8
+198.93089 754.2
+199.21455 966.1
+199.27060 797.5
+199.31281 3300.2
+199.33836 577.9
+199.41061 1104.2
+200.52374 597.3
+226.76151 633.9
+230.42097 586.6
+232.27573 549.1
+252.88425 678.1
+253.75392 557.4
+255.27460 677.1
+274.69012 597.8
+279.76306 639.4
+316.84158 597.8
+344.74030 486.5
+395.01352 586.6
+403.58685 675.0
+427.51236 809.3
+446.18076 733.5
+451.63632 669.3
+456.11295 614.9
+489.97256 698.9
+532.51031 1992.2
+549.11194 671.8
+609.48096 544.2
+609.58301 576.2
+621.16986 625.3
+639.43195 537.2
+676.63989 1053.2
+703.99500 592.8
+710.17230 625.5
+730.27155 661.0
+783.56384 591.1
+823.93707 614.5
+935.75604 630.9
+1057.25769 897.8
+1069.63232 530.6
+1147.50854 602.0
+1187.90088 730.0
+1198.14221 3378.7
+1487.98364 557.9
+1497.92151 564.8
+1525.32556 897.9
+1585.78638 660.2
+1667.20166 553.1
+1761.59644 720.7
+1785.92883 619.5
+1789.24365 588.4
+1803.35779 520.6
+1803.57922 692.7
+1849.02063 680.9
+1876.42603 814.3
+1877.86902 1125.4
+1879.17517 3649.4
+1879.53320 19771.1
+1879.89844 3246.4
+1881.14636 1017.1
+1886.51904 665.7
+1892.37195 705.4
+1906.81482 816.6
+1907.11182 7598.6
+1907.62634 629.6
+1918.71021 922.1
+1930.47424 1112.8
+S	1092	1092	418.2345746
+Z	4	1668.907
+113.17270 606.2
+121.80168 2539.0
+133.08537 567.8
+135.49623 717.4
+145.92297 629.6
+148.23102 527.2
+158.20370 559.4
+165.78360 722.9
+169.49353 599.9
+170.68590 557.2
+175.11859 3811.4
+178.94023 658.5
+194.13872 926.8
+197.24834 664.8
+197.69617 729.4
+198.93028 925.6
+199.21347 1502.6
+199.31024 3208.4
+199.37421 711.3
+199.40843 1099.8
+233.16461 6644.1
+234.16797 1173.8
+261.15936 1380.8
+279.24561 614.9
+288.20248 61254.2
+289.20627 7420.4
+290.21130 797.4
+303.28400 580.4
+306.41010 705.0
+332.51755 662.3
+337.86661 965.9
+342.27173 714.8
+347.54504 658.0
+375.20087 2271.0
+375.53418 1980.4
+384.53214 10911.1
+384.86673 6030.5
+385.20035 1964.5
+387.27042 29305.1
+388.27423 4452.9
+392.22815 2917.5
+406.22589 14097.7
+406.72745 5139.2
+407.22729 1117.0
+423.00665 542.4
+427.88226 1089.3
+428.72745 715.4
+437.91809 594.3
+439.23035 1649.3
+439.56265 1976.5
+439.90005 1576.8
+445.23355 5742.9
+445.56763 3406.3
+445.90210 1804.0
+446.21643 1142.0
+451.23730 5178.8
+451.57114 5806.2
+451.90479 2020.1
+454.90067 688.3
+457.57632 8861.6
+457.91144 5041.7
+458.24466 2101.7
+458.29318 643.1
+460.56912 3952.7
+460.90283 2433.7
+463.25082 888.4
+463.57983 12527.7
+463.91422 8366.0
+464.24789 3394.7
+464.58258 1753.2
+469.58295 12540.8
+469.91736 7439.3
+470.25143 2642.2
+472.93430 673.5
+479.69043 754.8
+482.65698 732.2
+492.49365 600.0
+495.27008 2960.0
+495.60550 2295.5
+495.94250 1357.8
+498.30295 1739.7
+501.27435 2705.5
+501.58810 964.7
+501.92789 2050.1
+502.26260 1284.6
+502.76105 1280.2
+503.26584 735.5
+506.29395 760.5
+507.27887 4535.2
+507.92560 979.0
+508.26596 1259.4
+511.23309 558.7
+511.77084 1001.0
+512.26733 1644.1
+512.75964 737.7
+513.60211 2715.6
+513.93640 2036.1
+516.31256 5003.1
+517.31702 997.2
+532.53711 1946.1
+567.28180 1419.2
+576.29437 24830.3
+576.79553 14475.2
+577.29596 4710.9
+584.27435 1313.6
+584.77405 873.8
+609.33539 491.8
+621.81665 775.3
+622.31421 726.7
+630.40607 1076.5
+630.81854 2775.0
+631.31946 773.9
+631.80963 4700.3
+632.31140 3412.8
+632.81366 1794.0
+639.82513 2225.4
+640.32074 839.8
+640.75677 769.2
+640.81525 72981.9
+641.31671 55867.3
+641.81830 21158.1
+642.31940 4761.1
+642.81702 660.0
+666.35809 888.3
+676.62286 782.7
+681.34644 1123.7
+681.83704 761.8
+683.34930 1287.1
+685.84729 704.0
+687.80573 666.7
+690.35040 3570.8
+690.84918 3463.1
+691.35126 822.2
+723.37756 829.7
+731.12573 671.8
+734.57513 615.5
+785.00891 694.7
+830.83502 588.9
+943.15417 650.3
+1023.49011 1086.3
+1057.22766 793.5
+1198.19543 3229.6
+1525.38721 834.8
+1580.77478 504.0
+S	1094	1094	1879.94540793
+Z	3	5636.561
+Z	2	3758.043
+532.52856 1904.9
+676.63062 822.3
+753.39105 734.9
+758.51703 643.1
+814.75385 625.3
+919.71527 645.1
+951.69208 632.3
+1019.12085 646.7
+1140.06213 573.8
+1198.17847 3153.7
+1224.83875 674.9
+1331.77258 666.2
+1449.83594 659.1
+1525.36902 774.1
+1566.49146 600.3
+1622.80176 734.7
+1694.43958 802.7
+1777.47546 586.2
+1879.11145 1153.1
+1879.50452 18907.9
+1880.16797 842.8
+1906.49170 742.2
+1907.08972 7103.0
+S	1095	1095	1907.5148246
+Z	2	3813.182
+Z	3	5719.269
+532.53033 2066.1
+532.57495 617.6
+606.78162 744.1
+630.43549 954.9
+676.56805 691.9
+676.63391 906.4
+795.71039 839.0
+817.07806 585.4
+1057.37817 736.5
+1198.18225 3406.9
+1234.57788 714.8
+1494.41309 742.4
+1500.94824 565.7
+1525.47900 963.6
+1543.29565 755.0
+1877.69958 622.2
+1878.60596 716.0
+1879.22900 4351.0
+1879.52173 19043.3
+1881.26001 807.9
+1881.55945 682.3
+1906.74841 1456.9
+1906.99146 6990.3
+1930.66589 833.4
+1974.92590 662.7
+S	1096	1096	1198.64240793
+Z	3	3592.652
+Z	2	2395.437
+322.19150 600.1
+350.28421 762.7
+359.26306 667.0
+397.05902 574.3
+397.11966 572.7
+399.11096 569.6
+427.53119 769.7
+494.34079 814.3
+532.54309 1454.5
+553.62872 710.9
+562.48303 638.8
+628.37622 718.5
+630.39246 655.8
+676.62787 746.0
+834.65002 691.6
+838.50415 773.7
+923.07843 672.3
+1057.23267 981.1
+1057.80273 633.1
+1157.88159 621.2
+1198.20776 3181.5
+1235.44641 572.0
+1235.53943 567.3
+1686.83533 575.5
+1777.51501 634.4
+1859.95190 685.1
+1877.51379 797.8
+1878.60486 980.5
+1879.02686 1405.6
+1879.50476 19282.5
+1879.97607 2004.4
+1880.46130 1174.0
+1882.31738 694.9
+1907.05347 7170.6
+1930.52429 935.9
+1931.90088 717.2
+S	1098	1098	1879.8988246
+Z	2	3757.95
+Z	3	5636.421
+532.53937 1568.8
+532.57672 786.5
+676.65320 1311.6
+720.66180 614.9
+722.76001 676.1
+795.71741 877.6
+798.04889 565.5
+897.84338 642.5
+928.39893 604.6
+1019.83044 763.5
+1038.17175 617.1
+1083.81567 684.7
+1110.87024 649.4
+1198.20459 3034.6
+1198.33826 911.3
+1324.25977 626.3
+1772.22156 649.6
+1777.55139 800.2
+1857.28369 669.8
+1879.08704 2695.2
+1879.56555 19562.9
+1879.97864 2618.7
+1880.55859 1040.0
+1907.01575 7054.2
+1930.49402 914.9
+S	1099	1099	1907.47899127
+Z	3	5719.162
+Z	2	3813.11
+532.53595 652.3
+532.57306 1834.2
+676.64734 814.6
+731.06427 715.6
+795.70111 809.7
+820.51404 627.6
+879.26654 682.7
+885.65295 658.4
+894.67352 609.4
+1057.24036 770.2
+1188.33911 763.6
+1198.28308 3651.2
+1357.19458 739.1
+1525.29834 864.4
+1876.97229 1170.1
+1877.47766 693.4
+1878.69629 1189.8
+1878.97339 1037.5
+1879.53699 19397.4
+1880.13867 1036.9
+1880.63818 645.8
+1907.03735 7256.3
+1918.68311 869.7
+1930.44507 1020.7
+1992.37769 784.1
+S	1101	1101	481.997407933
+Z	2	962.147
+Z	3	1442.717
+121.79836 1427.1
+121.80253 2314.5
+125.60266 485.9
+126.54044 688.3
+134.42479 532.2
+140.09395 556.5
+141.15494 548.1
+141.79390 565.4
+141.85008 725.1
+146.46811 551.4
+155.74620 566.3
+159.64586 601.4
+163.19937 560.7
+163.59143 599.3
+164.22383 558.8
+171.63780 1001.7
+178.69565 593.4
+187.08203 649.3
+188.20145 575.9
+188.21942 527.8
+188.28847 2458.5
+188.31392 1502.4
+188.32231 1115.1
+192.33580 507.2
+198.77776 629.4
+199.21236 836.0
+199.22946 581.1
+199.30919 1886.8
+199.31544 1556.6
+199.32587 1868.6
+199.34004 644.6
+199.40666 845.5
+199.42392 686.4
+201.95801 651.8
+204.25000 621.2
+207.11499 580.4
+243.87331 597.5
+244.38966 591.3
+257.09290 611.1
+259.35907 537.2
+264.10297 654.0
+274.30685 560.3
+309.73160 702.0
+329.24655 648.7
+350.27832 959.6
+362.76688 566.0
+365.70514 676.6
+366.15799 674.8
+366.54834 523.1
+366.71329 578.8
+392.36340 712.8
+396.09851 624.3
+416.54065 670.5
+454.84918 615.6
+481.09714 611.3
+482.67709 641.7
+496.78262 601.7
+532.56042 1842.7
+549.18646 610.2
+552.29968 769.1
+576.20276 581.9
+587.91180 539.2
+613.40845 588.2
+637.63770 529.9
+668.28009 646.6
+676.63007 907.3
+731.16455 809.3
+735.88782 798.5
+775.19446 737.7
+795.71112 982.0
+799.58466 629.0
+858.10699 724.3
+869.82294 548.8
+1084.54736 546.9
+1130.62219 650.0
+1188.30066 689.2
+1198.24866 3422.4
+1235.69727 555.4
+1236.40356 575.3
+1273.83655 637.2
+1380.17920 593.5
+1802.44397 561.6
+1804.50000 655.6
+1878.50073 1106.9
+1878.92981 998.0
+1879.21912 2760.5
+1879.49585 20182.2
+1880.58240 818.8
+1907.04492 7260.3
+1930.71802 749.5
+S	1102	1102	482.6678246
+Z	2	963.488
+Z	3	1444.728
+121.80054 2531.3
+160.67307 550.4
+161.71243 552.7
+170.95293 570.9
+170.98384 637.0
+173.28754 570.7
+182.78046 831.1
+199.21848 1079.9
+199.29977 1651.9
+199.31047 2046.2
+199.31660 2086.3
+233.56749 500.7
+240.55469 692.5
+255.01295 599.8
+255.28677 575.8
+280.05890 614.4
+343.66309 604.2
+348.39380 697.9
+374.86816 596.7
+395.91968 501.2
+417.30493 550.5
+427.54391 843.6
+482.65741 746.8
+490.01389 542.4
+532.47931 625.7
+532.57281 2123.3
+543.52899 667.7
+549.16125 724.2
+573.61401 667.6
+610.54504 526.4
+652.97522 891.8
+676.63849 1133.7
+696.56348 703.1
+731.12231 753.8
+746.87683 826.8
+775.38019 630.5
+780.35358 653.0
+781.11591 592.2
+789.58215 659.9
+795.69897 872.8
+901.53522 779.2
+914.08093 685.4
+1057.24548 1041.7
+1173.82202 706.4
+1188.18823 659.5
+1198.27478 3305.9
+1198.40564 746.5
+1244.32788 749.3
+1324.10083 582.4
+1525.40479 979.0
+1632.75684 623.8
+1771.97839 597.2
+1777.59192 893.9
+1877.43420 837.9
+1879.24854 3926.3
+1879.53516 19373.1
+1880.17310 614.8
+1880.65845 775.1
+1881.20923 907.1
+1904.53943 649.3
+1906.21118 769.9
+1906.98450 7550.1
+1930.59692 793.9
+1931.56152 722.5
+S	1103	1103	417.7345746
+Z	4	1666.907
+100.95409 542.9
+101.58479 575.7
+105.17480 515.9
+107.41666 575.2
+110.50388 522.7
+116.78961 651.1
+117.65417 557.6
+117.99334 633.6
+118.14812 570.0
+120.70203 553.9
+121.79681 626.2
+121.80134 2526.9
+124.93307 502.8
+139.03352 635.6
+145.06723 628.1
+151.33340 686.7
+165.42899 570.2
+175.11838 3109.7
+191.92659 811.0
+194.13892 1250.3
+194.84019 480.9
+198.83041 586.5
+198.92908 1341.0
+199.21278 760.4
+199.28197 1692.9
+199.31169 3022.0
+199.33937 662.6
+199.35744 676.5
+199.38245 810.0
+199.40820 1070.5
+217.04050 597.7
+233.16444 6738.9
+234.16679 589.0
+261.16040 726.8
+262.14514 669.6
+268.01016 594.9
+269.56622 572.9
+271.17676 815.2
+277.48883 560.9
+288.20248 52660.4
+289.20691 5206.8
+334.20984 542.9
+341.14465 1160.0
+375.20016 3327.9
+375.53513 2260.4
+381.36108 588.3
+384.53210 8917.1
+384.86612 4217.4
+385.20142 1491.7
+387.27039 27666.5
+388.27444 4350.6
+392.22806 2668.5
+392.73050 1300.3
+401.21494 572.2
+406.22562 12528.3
+406.72644 3345.3
+408.28790 548.9
+439.23053 2739.6
+439.56375 1776.4
+439.89899 857.1
+445.23392 4200.6
+445.56793 3422.3
+445.90286 1006.4
+446.21796 1261.3
+451.23740 5989.7
+451.57129 4027.6
+451.90646 2228.7
+457.57547 8998.7
+457.91016 5636.2
+458.24622 1676.0
+460.56976 1721.3
+460.90347 3476.1
+461.23740 807.0
+463.57932 8148.6
+463.91406 7405.2
+464.24823 1791.9
+464.58011 926.3
+469.58289 8364.3
+469.91769 8968.7
+470.25125 1858.8
+470.29297 763.7
+470.58435 707.1
+476.73590 688.6
+495.26907 3343.8
+495.60547 2546.2
+495.93881 1122.5
+498.30045 1537.1
+501.27451 3057.2
+501.58682 1114.9
+501.92526 1704.7
+507.27612 2944.8
+507.59256 1972.6
+507.62424 1106.8
+507.93082 1635.3
+511.77548 871.1
+512.24573 1083.5
+513.60211 2443.0
+513.93689 2130.4
+514.26788 821.9
+516.31201 3938.7
+517.31177 890.1
+521.28577 576.8
+530.72809 621.4
+532.57556 2227.7
+549.15118 702.0
+562.75653 578.8
+567.28235 1589.5
+576.29437 22851.9
+576.79596 15949.4
+577.29626 3216.3
+584.27130 1156.5
+621.81659 1334.6
+622.82587 700.5
+630.39850 833.3
+630.81775 1050.2
+631.31799 1792.3
+631.80872 5746.4
+632.31042 3991.9
+632.80969 858.6
+633.80249 964.0
+639.82257 786.0
+640.32489 996.8
+640.81525 73864.6
+641.31659 47719.0
+641.81799 17915.6
+642.32031 3637.5
+642.51935 924.3
+666.35565 765.2
+681.34985 957.7
+683.34894 1736.4
+690.34906 3963.6
+690.85132 3575.2
+691.35394 1422.0
+721.18109 569.9
+723.37335 1469.3
+759.39880 631.6
+767.19055 605.0
+795.70721 1056.9
+813.45081 665.4
+838.92938 570.1
+876.23773 654.3
+891.37653 612.2
+969.43158 610.0
+1051.48621 531.3
+1057.24084 898.7
+1071.85120 575.8
+1114.56189 546.7
+1152.53235 1007.6
+1198.28381 3309.7
+1219.45618 639.7
+1273.27393 830.6
+1469.42273 572.9
+1525.40063 852.9
+S	1105	1105	1907.5048246
+Z	2	3813.162
+Z	3	5719.239
+518.07501 578.8
+532.52136 722.6
+532.56830 1605.5
+549.10883 634.8
+557.64551 553.4
+568.95056 700.0
+630.35376 816.0
+676.61841 1030.6
+744.28955 563.5
+765.81580 596.7
+793.94812 731.5
+989.67798 578.9
+1134.08972 626.0
+1181.59387 619.8
+1198.26758 2852.1
+1387.93152 660.5
+1694.48914 650.1
+1869.45740 722.6
+1879.47485 19878.3
+1879.74561 2863.1
+1907.06726 7173.0
+S	1107	1107	481.9978246
+Z	3	1442.718
+Z	2	962.148
+120.73970 601.0
+121.80344 2223.9
+121.81626 533.6
+137.27870 750.2
+164.44351 581.7
+182.76880 737.9
+189.32101 586.7
+190.93953 606.7
+191.43614 645.8
+198.92827 764.2
+199.10609 749.6
+199.20854 896.3
+199.26315 762.1
+199.29410 1664.2
+199.30754 2277.0
+199.31966 1096.2
+199.34023 719.9
+199.39119 863.2
+199.40601 844.8
+223.03731 572.4
+227.10304 1366.1
+231.14868 7878.2
+233.16452 799.4
+248.26538 612.5
+248.75902 494.0
+251.64201 583.3
+255.10776 544.1
+255.26939 701.8
+259.14343 1761.2
+267.67679 635.5
+268.16443 575.4
+269.00864 561.1
+276.17004 12403.4
+276.30222 564.6
+277.17365 1552.3
+285.13391 2459.7
+301.14972 1325.5
+308.84473 523.3
+320.16547 3220.1
+323.19006 538.4
+327.74054 518.4
+334.16132 698.7
+346.14948 875.9
+349.76340 592.2
+364.16071 2390.0
+371.18759 682.2
+379.70200 2978.8
+380.20349 1613.4
+381.33246 643.2
+385.18500 1554.8
+393.69861 2737.9
+394.20068 1026.4
+402.69724 3060.4
+403.19974 1169.2
+430.19446 833.7
+432.55014 1816.2
+432.88589 650.8
+436.24332 976.3
+450.24188 4951.6
+450.74310 2517.8
+471.22638 4909.3
+471.72739 772.0
+482.62015 793.1
+498.22931 631.5
+511.22925 1884.5
+520.25195 762.9
+526.22357 731.1
+526.73950 735.8
+527.20789 1092.6
+527.24158 512.3
+532.59106 2079.7
+534.11401 595.5
+535.74500 1172.9
+536.24640 726.1
+540.73920 11905.5
+541.24103 8325.1
+541.74158 2578.4
+544.23486 13868.5
+544.45886 644.0
+544.75964 3618.3
+545.24084 3900.1
+553.26965 687.0
+563.94824 741.3
+566.26215 2833.0
+566.76556 1954.8
+567.26263 1675.8
+571.78137 855.7
+575.26807 10659.9
+575.76874 6087.9
+576.26917 2859.9
+576.76758 763.6
+582.78619 1047.0
+584.27325 164122.3
+584.77441 96278.8
+585.27582 30688.8
+585.77698 6459.6
+601.96686 618.8
+624.31128 2362.3
+630.35980 682.2
+639.32324 4853.7
+640.32343 2118.8
+648.31989 3392.5
+648.82178 1650.7
+649.32672 1047.8
+650.87946 554.9
+651.20959 555.9
+652.97028 810.1
+657.31812 16911.8
+657.80408 1116.2
+658.32178 4983.9
+667.31610 1523.4
+676.62177 973.4
+726.49646 664.2
+736.27448 1250.5
+738.34766 736.7
+780.40320 833.8
+783.87140 748.2
+795.71179 1032.4
+804.38623 14037.7
+805.38959 6056.2
+806.39075 1641.8
+823.64349 573.1
+832.05914 614.9
+867.40204 787.8
+941.44611 6271.9
+942.44434 3137.1
+943.45441 1057.8
+1039.44788 1086.8
+1080.47742 922.6
+1186.00012 616.0
+1198.32495 3033.3
+1198.51184 690.1
+1201.79297 583.9
+1214.37842 519.9
+1235.50061 862.9
+1435.68201 630.0
+1490.53723 638.7
+1580.74939 660.3
+1595.76379 610.8
+1777.51440 812.4
+1816.31311 728.4
+1874.52808 572.6
+1878.16809 889.6
+1879.11462 2573.5
+1879.50488 19772.7
+1879.88855 2541.6
+1907.05164 7392.9
+1931.61328 773.5
+S	1108	1108	417.902991267
+Z	2	833.958
+Z	3	1250.434
+103.39757 531.4
+109.11910 563.6
+110.99870 537.8
+112.97897 530.8
+113.62618 527.7
+118.18276 629.8
+121.79972 1731.6
+121.80601 953.0
+121.81174 629.6
+128.86913 550.5
+129.76665 547.4
+147.70653 574.8
+155.28642 605.4
+165.78511 584.7
+171.63779 611.3
+175.11841 3088.9
+184.85045 513.6
+186.68335 591.5
+193.84465 704.2
+194.13800 1153.8
+198.92778 871.4
+199.21381 994.8
+199.26114 774.4
+199.28423 858.8
+199.31210 3403.5
+199.32983 694.3
+199.33861 721.7
+207.57562 662.9
+208.46397 591.4
+212.44722 647.2
+220.10936 482.7
+228.10435 594.1
+233.16431 4630.3
+234.16753 967.7
+236.98357 601.3
+255.29912 663.0
+261.15903 1675.6
+271.17337 949.1
+287.70474 600.7
+288.20242 53859.3
+289.20673 5612.1
+327.36923 670.4
+334.43579 555.7
+339.81790 510.0
+350.28018 840.0
+375.20065 3221.0
+375.53302 1469.9
+384.48398 517.3
+384.53183 10907.1
+384.86588 5380.8
+385.20105 1133.6
+387.27026 27269.9
+388.27386 4699.1
+392.22809 3641.5
+392.72913 1992.2
+393.86826 609.3
+406.22565 10609.5
+406.72797 3423.6
+413.17722 635.8
+427.88147 1051.6
+439.23074 1974.5
+439.56158 1462.2
+439.89856 1325.1
+440.23413 694.3
+445.23364 4640.8
+445.56647 3059.3
+451.23657 5620.3
+451.57196 4409.7
+451.90509 1299.6
+454.90054 808.2
+457.57593 8424.8
+457.91138 6072.5
+458.24579 1934.1
+460.56796 2572.0
+460.90375 2181.4
+461.23593 935.8
+462.41110 565.6
+463.24362 712.6
+463.57941 10777.0
+463.91391 6902.1
+464.24734 2495.3
+464.58350 1289.1
+469.58252 7181.1
+469.87250 936.8
+469.91714 5676.7
+470.25073 1030.4
+474.86182 620.8
+476.76642 716.5
+483.76419 661.1
+495.26910 2747.9
+495.60321 2173.0
+495.93903 2148.5
+498.30026 1294.9
+501.27411 2834.1
+501.58749 2171.4
+501.92273 1411.0
+502.75943 1931.6
+503.26370 895.4
+507.27719 3616.2
+507.59070 2060.1
+507.62332 1217.5
+507.92755 1589.4
+508.26205 915.3
+511.76959 1281.3
+512.25610 1167.5
+513.60144 2005.7
+513.93658 2723.2
+516.31238 4551.0
+532.58826 1627.7
+549.17505 971.6
+553.16998 564.6
+567.78760 898.2
+576.29413 21987.3
+576.79565 15814.9
+577.29712 3888.4
+584.27686 1447.0
+609.32947 582.1
+616.81750 1311.7
+617.32056 822.2
+617.82147 811.9
+621.81390 1363.7
+622.31616 829.1
+630.81891 2148.4
+631.31549 1031.2
+631.80920 5186.1
+632.31091 4371.8
+632.81177 1553.9
+639.82678 1046.0
+640.81500 73161.9
+641.31628 48228.8
+641.81738 15781.4
+642.31909 3803.9
+650.21832 632.3
+666.35632 890.8
+667.35968 657.8
+676.61511 974.9
+678.00800 581.5
+683.34766 1592.3
+684.37115 581.2
+690.34918 3832.1
+690.85052 3059.3
+691.35254 746.9
+692.58148 648.0
+696.86603 686.8
+712.59607 756.9
+723.37573 1326.6
+783.92035 695.4
+795.70837 871.9
+880.98798 732.9
+982.08185 686.2
+1023.47656 915.4
+1068.72351 589.9
+1074.71472 704.7
+1131.85754 581.4
+1152.52966 1029.5
+1164.14856 619.9
+1198.31177 3510.6
+1270.33313 676.0
+1473.60059 641.4
+1482.32935 631.8
+1525.44788 677.3
+1533.81580 791.6
+S	1109	1109	482.668991267
+Z	2	963.49
+Z	3	1444.732
+121.80109 2561.8
+125.37799 550.4
+130.92859 700.9
+139.06065 582.9
+143.87608 752.6
+169.47746 869.2
+171.27773 584.4
+172.55988 623.1
+173.13037 589.8
+182.76451 661.5
+183.40984 497.1
+188.25336 831.1
+188.27599 1313.3
+188.29057 1176.4
+188.29930 1440.6
+188.30919 937.5
+188.31734 882.3
+197.47409 555.0
+198.92921 888.9
+199.27156 679.2
+199.28957 893.8
+199.29565 1070.8
+199.31126 2540.8
+199.32770 1612.8
+199.40701 810.1
+210.68861 652.4
+215.06772 613.1
+227.10292 1641.7
+227.47943 512.7
+229.88213 528.2
+231.14867 11748.7
+232.15253 1939.3
+233.16576 993.5
+242.00578 550.5
+244.12849 718.8
+259.14404 1597.9
+271.56729 888.2
+272.03641 558.7
+276.17014 15883.0
+277.17380 1356.0
+285.13351 1658.7
+285.82849 720.7
+297.06927 559.3
+301.14969 2155.6
+306.16901 720.7
+310.87460 542.3
+311.65277 697.0
+320.16544 4140.6
+320.66574 781.4
+329.57971 561.3
+335.07742 590.9
+346.15247 816.2
+350.04041 581.1
+355.10712 533.3
+364.16098 3486.3
+379.70190 4858.1
+380.20560 1870.2
+381.32129 628.6
+383.38031 645.0
+385.18625 2661.1
+385.68674 1536.9
+390.18726 716.0
+393.69977 4583.9
+394.20160 1387.6
+400.21021 562.5
+402.69693 4808.9
+403.19940 1238.2
+430.19162 1759.6
+432.54941 2498.3
+432.88571 1522.9
+436.24524 2182.8
+436.74408 809.1
+440.35925 552.1
+441.72781 722.2
+442.16815 953.8
+450.24106 6407.3
+450.74396 3040.8
+451.24527 900.1
+469.56482 1669.2
+471.22592 8958.3
+471.72729 2481.9
+482.61340 774.3
+511.22775 2037.0
+520.24725 1211.5
+524.41583 690.5
+526.22180 726.2
+526.74219 1467.0
+527.24335 952.5
+532.55267 1634.9
+535.74719 865.0
+536.24982 1149.9
+539.91785 606.6
+540.73932 15415.6
+541.24054 11118.3
+541.74170 3153.0
+542.24670 767.9
+544.23468 15680.2
+544.75989 4928.7
+545.24005 4360.6
+549.51031 564.8
+566.26147 3775.4
+566.76111 2943.6
+567.26691 794.4
+575.26819 14559.5
+575.76801 7797.6
+576.26941 3633.0
+576.76807 808.2
+582.78766 737.3
+582.95508 830.3
+583.28821 743.0
+583.53375 737.7
+584.03693 646.4
+584.27319 220334.6
+584.77429 131262.0
+585.00824 1208.2
+585.27576 39597.4
+585.61670 616.2
+585.77759 9700.6
+593.31396 552.3
+601.65515 536.2
+616.76294 589.1
+624.31348 2187.9
+639.32306 6728.2
+640.32220 1534.1
+648.31995 3445.1
+648.82532 2319.4
+649.32788 682.9
+657.31793 19219.5
+657.80731 1493.2
+658.32208 5228.0
+659.32825 947.8
+667.31946 1610.9
+676.65228 988.9
+780.40344 950.2
+795.71649 760.9
+804.38629 17632.5
+805.39050 7539.5
+806.39233 1887.2
+855.57983 607.6
+903.89020 526.7
+941.44482 8006.6
+942.44745 4429.9
+943.43500 1080.8
+1039.44055 1536.7
+1057.26465 860.4
+1067.80481 562.1
+1079.24158 620.3
+1080.47717 1286.4
+1081.48523 930.5
+1102.53833 607.3
+1188.12134 647.3
+1198.22791 3010.2
+1283.96619 572.7
+1525.24121 1060.2
+1617.29980 669.0
+1657.02014 579.6
+1746.47803 610.5
+1828.08826 636.5
+1833.02332 548.9
+1878.60657 1511.2
+1879.27893 4988.2
+1879.56519 18698.1
+1880.59839 1240.5
+1881.81726 781.2
+1906.99426 7206.0
+1907.30786 1010.4
+1907.40906 924.3
+S	1111	1111	481.9988246
+Z	2	962.15
+Z	3	1442.721
+120.65684 709.4
+121.80107 2157.4
+127.16386 654.6
+128.51335 586.7
+162.14088 597.3
+163.47816 583.0
+163.73390 731.2
+174.08563 554.9
+178.14313 574.6
+181.99841 580.9
+188.15176 684.0
+188.24347 984.1
+188.25664 1380.2
+188.27042 1445.7
+188.28218 2078.8
+188.29561 1838.7
+188.31834 1322.2
+196.41724 626.2
+198.30255 657.5
+198.92873 594.9
+199.10847 1252.1
+199.27472 770.3
+199.29041 948.6
+199.29924 1449.4
+199.31396 2453.9
+199.32892 1326.0
+204.22552 561.2
+227.10309 836.6
+231.14888 7457.4
+238.73112 574.9
+257.13824 1083.2
+259.14355 1035.3
+265.68942 581.2
+276.17032 11718.5
+277.17468 1353.1
+280.15863 683.5
+285.13403 2195.5
+301.14856 1087.7
+320.16663 2269.3
+364.16165 2864.8
+378.36075 614.9
+379.70282 2331.2
+380.20386 1531.7
+381.32794 578.7
+385.18552 1409.2
+393.69937 3341.0
+394.19958 1004.6
+402.69583 2866.2
+403.20035 735.2
+427.51645 692.9
+430.19321 1401.5
+432.55060 1415.3
+432.88583 729.2
+436.24338 1330.8
+442.16931 972.6
+445.73911 662.2
+450.24115 3246.4
+450.74341 3204.8
+462.21625 610.1
+471.22629 4358.5
+471.72943 873.9
+482.62418 873.9
+511.22809 2014.0
+520.24994 1155.1
+526.74188 1149.7
+527.23969 845.2
+532.58661 1703.3
+535.74969 760.1
+536.25238 876.8
+540.11926 880.8
+540.73944 10668.5
+541.24115 6410.0
+541.74207 2739.1
+544.23492 12465.8
+544.76196 3277.5
+545.24731 3211.3
+553.77679 675.6
+557.77130 668.1
+563.94440 837.1
+564.28186 934.9
+566.26312 2622.4
+566.76459 2066.9
+567.27032 649.4
+575.26862 9897.9
+575.76892 6152.2
+576.26794 2021.8
+582.78851 622.0
+583.54102 715.9
+584.03497 801.6
+584.27332 158591.1
+584.77448 86582.3
+585.01495 943.6
+585.27570 25148.7
+585.77759 4683.7
+624.31097 1967.6
+625.31372 919.0
+639.32330 4161.4
+640.32959 1317.1
+644.55621 665.0
+648.31958 2680.7
+648.82446 1818.8
+657.31799 13884.6
+657.81195 677.0
+658.32135 5282.1
+659.32233 872.7
+667.31555 1114.9
+676.62585 1331.0
+682.38641 733.0
+687.07068 587.2
+713.49896 627.7
+736.26361 1492.8
+795.69965 1002.9
+804.38641 12344.4
+805.38922 5508.5
+806.39484 1501.5
+867.40234 708.1
+941.44556 6144.4
+942.44702 3198.4
+943.45300 911.9
+989.79474 640.6
+1039.44202 728.6
+1055.25293 606.3
+1080.45996 683.1
+1089.34167 615.5
+1103.36389 760.8
+1140.48425 599.0
+1198.31299 3144.7
+1298.04871 554.8
+1414.23315 614.2
+1421.80957 604.0
+1536.05127 581.3
+1555.26709 602.1
+1625.69922 784.1
+1641.84583 575.4
+1696.33875 662.1
+1813.79065 623.3
+1878.31482 1003.6
+1878.72253 1106.9
+1879.47913 19081.1
+1880.25586 1021.2
+1906.40466 647.6
+1907.07239 7107.2
+1907.52637 822.8
+1916.10559 643.8
+1930.45276 862.9
+S	1112	1112	1105.0198246
+Z	2	2208.192
+Z	3	3311.784
+342.26367 952.6
+350.28403 845.3
+361.33932 589.8
+381.35043 668.6
+394.85229 595.2
+403.86734 600.1
+427.53210 802.5
+454.79761 607.6
+455.46387 592.8
+492.29065 616.6
+532.55469 1692.6
+676.62469 1044.8
+731.09430 678.1
+736.27527 1077.1
+738.70221 663.9
+1109.06226 669.4
+1154.45813 703.7
+1198.23792 3496.6
+1261.80151 819.0
+1407.29993 649.8
+1465.25732 774.6
+1593.47986 691.9
+1600.58142 707.8
+1706.62256 704.4
+1753.39319 750.2
+1777.40735 723.9
+1879.03784 2312.4
+1879.49573 19898.2
+1879.96204 2286.6
+1880.39258 1279.6
+1907.05994 7437.4
+1930.54077 889.8
+S	1113	1113	1103.29140793
+Z	3	3306.599
+Z	2	2204.735
+291.24643 545.3
+326.91348 571.6
+342.26630 659.1
+347.93375 573.7
+356.74152 725.2
+378.98358 650.9
+401.52478 562.5
+425.17462 1116.9
+427.52945 615.7
+462.22974 1341.9
+476.02515 662.5
+513.19043 860.9
+527.34216 684.7
+531.25244 900.0
+532.58136 2075.3
+540.20349 5307.4
+541.20703 1282.4
+549.26031 10626.8
+550.26410 2480.5
+563.24835 635.4
+566.21094 689.2
+593.22681 761.5
+611.24109 4597.9
+625.02246 631.5
+676.26447 1459.6
+676.63068 925.6
+686.32013 7624.3
+687.32239 2839.9
+688.32922 765.1
+694.27820 3475.1
+695.28217 903.1
+712.28888 4129.4
+725.33167 2172.5
+726.33679 742.1
+731.09375 692.4
+743.34119 39594.8
+744.34412 10896.6
+745.34747 2644.1
+795.72150 876.0
+815.85730 3166.3
+816.35480 2646.7
+816.86450 894.1
+823.32001 5069.8
+824.32538 1355.7
+824.39850 4126.5
+824.86163 10224.4
+825.36096 6753.9
+825.86346 3642.5
+841.32733 1496.4
+842.32025 661.8
+842.40900 50364.2
+843.41193 19216.0
+844.41235 4134.0
+844.97235 703.0
+882.37354 864.8
+910.88342 1350.3
+911.39301 800.8
+930.38971 1520.0
+931.39197 1449.5
+937.36487 1146.6
+938.35156 1136.0
+939.39319 3712.6
+939.90106 3003.1
+940.39288 1585.4
+955.36047 763.8
+956.35260 657.3
+957.43707 16537.5
+958.43982 7766.8
+959.43951 1858.1
+965.90820 1093.0
+966.41473 1479.0
+966.91022 1238.7
+974.91449 6344.2
+975.41534 4965.5
+975.91522 2584.4
+979.36664 821.3
+1023.85748 768.7
+1030.43506 2722.4
+1030.93201 2989.2
+1031.42603 762.2
+1036.38037 1540.6
+1063.93408 1233.5
+1067.94312 1186.4
+1068.46704 6468.5
+1068.91077 950.7
+1069.47070 2536.0
+1070.47595 982.3
+1072.45483 805.0
+1072.94006 840.9
+1076.44727 6658.5
+1076.94617 11168.5
+1077.44678 9115.8
+1077.94299 2919.9
+1078.43542 1247.1
+1079.25586 836.8
+1084.43567 770.5
+1085.45593 3265.9
+1085.95398 2513.7
+1086.47900 2217.8
+1198.30273 3277.5
+1213.47583 1013.7
+1214.46265 1398.1
+1215.53577 739.9
+1231.48315 1882.2
+1232.49268 940.2
+1233.54749 9397.4
+1234.54980 5206.1
+1235.56079 944.9
+1236.84680 686.5
+1249.59229 652.2
+1311.48755 953.2
+1328.49927 1311.5
+1329.48633 2122.8
+1330.58582 2326.8
+1346.51050 1713.8
+1347.59058 13470.5
+1348.59399 8560.0
+1349.59607 3093.6
+1364.51709 5901.0
+1365.52588 3955.2
+1366.53076 1057.3
+1403.56628 1432.0
+1404.57117 1939.1
+1428.56665 1454.9
+1429.56348 1083.7
+1445.58435 1658.7
+1446.56763 2203.4
+1458.62903 2542.8
+1459.61768 2343.3
+1460.60986 870.5
+1463.57788 1575.0
+1476.63196 6701.8
+1477.63782 4162.2
+1478.62866 1274.2
+1489.05212 845.0
+1525.36292 786.2
+1577.67749 6373.9
+1578.68518 5021.7
+1579.68042 2094.5
+1622.64172 1027.9
+1629.71436 710.9
+1630.70984 1020.0
+1631.69373 1060.3
+1639.65430 4018.9
+1640.65552 4378.1
+1641.66003 1728.0
+1648.71460 8196.1
+1649.71985 6449.9
+1650.71411 2739.5
+1651.72607 739.1
+1657.66736 4751.6
+1658.67114 3786.6
+1659.65247 1367.5
+1703.67322 1336.1
+1709.68518 1138.0
+1715.58875 869.0
+1726.68909 1807.2
+1727.69434 891.9
+1728.67493 1101.4
+1744.71545 1739.1
+1745.70361 1321.5
+1828.73401 910.3
+1878.77271 1414.2
+1879.50549 20048.5
+1907.00830 7086.0
+1907.29834 1405.6
+1924.75146 4674.2
+1925.74329 6571.4
+1926.74231 3762.6
+1927.74731 1490.2
+1930.51514 1019.5
+1942.76233 18561.4
+1943.76270 15898.9
+1944.76819 7162.3
+1945.75830 2366.3
+1946.72021 643.3
+1960.76917 10514.0
+1961.77649 9766.2
+1962.77820 5241.4
+1963.78662 1598.6
+S	1115	1115	1879.90924127
+Z	2	3757.971
+Z	3	5636.452
+523.33038 788.5
+532.59796 863.6
+532.63464 528.5
+543.67896 632.8
+614.62976 533.2
+648.93195 563.1
+661.27948 588.6
+676.64740 1042.2
+684.53741 653.7
+795.69727 977.8
+893.18762 663.5
+1019.78204 802.4
+1021.02087 662.7
+1049.43958 803.6
+1188.33997 819.0
+1197.77844 686.6
+1198.31128 2371.2
+1666.79993 610.7
+1878.15369 1111.6
+1879.54907 19397.4
+1879.82825 3356.4
+1880.71570 691.9
+1880.87537 588.5
+1907.04761 7578.3
+1918.63794 839.9
+S	1116	1116	1907.4898246
+Z	3	5719.194
+Z	2	3813.132
+532.55298 2083.8
+573.00952 631.6
+633.93256 577.1
+676.57806 657.7
+676.63849 886.5
+795.71149 804.0
+895.72064 718.3
+1184.50085 837.5
+1193.71167 664.2
+1198.23376 3527.1
+1319.39832 549.7
+1493.14624 622.0
+1777.22925 820.3
+1827.27148 620.7
+1837.19250 716.2
+1859.96936 661.4
+1874.12927 600.2
+1878.24976 690.3
+1879.52136 19385.6
+1880.15601 665.6
+1883.36047 619.1
+1906.88391 7160.9
+1930.49329 1157.4
+S	1118	1118	417.7338246
+Z	4	1666.904
+106.30529 1888.6
+107.36440 1830.5
+111.35587 1688.9
+120.40701 1648.5
+121.80138 5899.8
+123.62218 1740.4
+124.82909 1649.3
+133.90790 1703.7
+134.34477 1578.6
+135.63028 1804.9
+147.63750 1546.7
+168.03722 1889.9
+169.47800 2433.5
+171.69583 1548.7
+171.74585 1664.7
+187.30695 1851.4
+190.12430 1597.3
+192.82095 1852.0
+198.93166 2851.9
+199.21065 2588.8
+199.27103 1635.8
+199.27861 1952.1
+199.29427 4317.9
+199.30801 7825.8
+199.32159 3058.6
+199.40723 2156.3
+243.63748 1744.7
+243.75458 1955.7
+271.35150 1800.7
+278.41898 1734.9
+286.20981 1702.2
+288.20261 9219.0
+308.87149 2350.8
+381.32089 2452.5
+387.26978 2889.9
+423.12885 1450.6
+425.39703 1833.3
+440.92844 1902.2
+461.62082 1811.8
+464.11777 1940.2
+476.73389 2345.9
+522.35675 1814.8
+532.56500 5767.1
+535.23474 2254.5
+559.27087 1712.8
+570.44519 2080.7
+576.29565 2065.8
+607.57062 1760.3
+630.35156 2405.1
+640.81500 7209.9
+641.31683 8355.4
+641.81250 2099.6
+676.62640 3150.1
+736.28583 3112.5
+744.08173 2403.8
+745.06549 1896.3
+792.43054 1814.4
+1057.62756 1789.7
+1097.97876 1977.2
+1104.29419 1838.2
+1140.18518 2564.1
+1198.26196 10093.4
+1205.60754 1955.5
+1226.22668 1875.7
+1242.18872 1853.7
+1312.22681 1755.1
+1318.15686 1705.4
+1443.88806 1896.4
+1489.30701 2294.7
+S	1119	1119	418.2348246
+Z	4	1668.908
+106.29013 602.2
+109.37281 483.6
+116.15170 643.1
+116.19597 488.4
+120.65244 690.3
+121.80116 2338.2
+121.81255 518.1
+124.61117 649.4
+125.94764 614.8
+131.66231 641.5
+147.87613 557.4
+157.58684 824.2
+159.37808 517.4
+162.80362 612.2
+166.45198 498.9
+166.45734 600.5
+169.16066 546.9
+169.47328 545.3
+170.77203 642.5
+175.11868 4101.3
+182.76216 593.0
+184.48830 558.6
+190.50517 504.2
+197.67670 601.4
+198.92938 962.0
+199.21246 1177.8
+199.31180 3310.4
+199.35275 634.2
+199.40855 1286.9
+199.41739 660.5
+233.05418 586.9
+233.16449 6499.2
+234.16740 1095.7
+258.48355 600.1
+271.15704 584.7
+271.17926 700.9
+284.70551 510.4
+288.20255 64572.0
+288.72052 559.1
+289.20630 8184.8
+308.86899 649.8
+316.67966 595.5
+324.78470 606.5
+369.93570 567.4
+372.63525 493.3
+375.20084 4924.6
+375.53522 2626.4
+377.25241 537.1
+384.53207 12816.0
+384.86606 7200.1
+385.20078 2778.9
+387.27051 32943.1
+388.27411 6120.5
+389.27411 768.4
+391.90536 632.5
+392.22845 4938.5
+392.72906 2223.5
+393.23123 609.5
+394.84970 614.0
+406.22574 13658.9
+406.72778 5927.5
+407.23007 1241.4
+413.56631 600.1
+427.50262 892.7
+427.52670 613.7
+428.72699 739.9
+432.22067 677.0
+439.23062 3363.6
+439.56387 1964.2
+439.89890 1172.4
+445.23401 4730.6
+445.56747 4007.5
+445.90396 2107.2
+446.21362 839.4
+446.72037 721.6
+451.23703 8363.3
+451.57162 6673.5
+451.90582 2689.1
+452.24356 631.4
+454.56241 978.9
+454.90002 771.9
+457.57629 10958.8
+457.91055 8401.2
+458.24521 2754.8
+460.56845 4603.4
+460.90311 3122.4
+461.23923 1209.8
+463.57983 11831.4
+463.91403 8959.6
+464.24765 3024.6
+464.58499 812.7
+465.48682 561.7
+469.58310 9544.3
+469.91690 8784.9
+470.25272 3021.0
+470.58524 991.9
+476.67215 594.3
+495.27103 4818.2
+495.60507 2933.0
+495.93842 2078.2
+498.18661 542.0
+498.30237 1847.6
+501.27484 1962.6
+501.58936 1967.2
+501.62177 961.9
+501.92648 1689.0
+502.76361 1597.3
+503.26016 842.0
+507.27826 2661.2
+507.59363 2630.0
+507.92819 2529.5
+509.19366 582.3
+511.77380 1626.9
+512.25525 1095.7
+512.74963 640.7
+513.60168 1877.3
+513.93628 2050.9
+514.60602 801.1
+516.31183 6121.9
+517.31696 1398.2
+523.50555 530.1
+532.53003 2213.8
+540.11261 682.8
+567.28137 1442.6
+567.78131 785.8
+573.11487 720.9
+576.29449 26234.3
+576.79565 17697.7
+577.29688 4589.5
+584.27405 1407.6
+584.78870 838.4
+616.81586 966.9
+617.31866 818.7
+621.81213 1553.1
+622.31287 1514.5
+630.34320 770.5
+630.81622 771.6
+631.80988 4848.0
+632.31195 4268.6
+632.81177 2110.6
+633.80560 1430.3
+639.82709 853.7
+640.32648 1101.6
+640.81537 84406.1
+641.31671 61437.6
+641.81836 24461.5
+642.32007 5817.3
+642.82123 806.5
+666.35718 1519.5
+676.63165 1534.7
+681.84955 683.1
+683.34729 1493.3
+690.34985 4931.7
+690.85284 4530.2
+691.35352 1304.1
+705.00946 585.6
+719.49658 693.2
+723.37836 1617.6
+784.59454 564.3
+795.70990 1025.7
+858.77008 690.4
+874.66510 585.6
+876.15265 588.5
+1019.71136 839.4
+1023.49066 1220.5
+1024.49646 1103.6
+1057.23938 711.7
+1079.27222 673.2
+1106.12976 557.7
+1198.18884 3722.4
+1271.68237 576.7
+1315.90027 629.9
+1345.41260 572.7
+1525.27307 658.6
+S	1120	1120	1105.02299127
+Z	2	2208.198
+Z	3	3311.794
+350.28360 653.8
+361.18051 986.3
+368.15594 635.1
+395.23761 589.9
+425.17569 1064.6
+426.86179 656.0
+462.22980 1701.8
+473.19458 799.1
+513.19086 850.1
+513.49170 585.4
+513.76282 575.2
+522.19519 979.2
+523.17548 915.8
+532.55756 1339.7
+540.20300 6908.5
+541.20807 1339.1
+549.26147 12410.7
+550.26373 2008.4
+558.21478 1122.1
+566.21851 708.0
+611.24005 4978.0
+612.23761 1100.8
+675.27734 604.2
+676.26697 1170.1
+676.63953 1111.8
+682.56281 641.5
+686.32025 8322.1
+687.32452 2700.8
+688.61719 634.8
+692.31372 616.7
+694.27765 4185.1
+708.30042 872.1
+712.28760 3906.1
+713.29541 907.5
+725.33447 2609.0
+735.71881 689.5
+736.63507 643.8
+743.34155 46347.6
+744.34424 16314.7
+745.34650 3314.2
+789.34613 1091.7
+789.84595 1008.8
+790.29871 781.6
+794.84027 794.6
+805.30182 816.1
+806.40308 677.0
+815.85596 3092.0
+816.35492 4421.7
+816.85760 2184.1
+817.35754 1166.2
+823.32086 6445.2
+824.31897 1528.1
+824.39935 4154.0
+824.86188 16209.0
+825.36206 13370.7
+825.86371 4437.9
+826.35980 1248.3
+828.32477 674.3
+841.32916 2637.9
+842.40948 61127.8
+843.41272 21574.5
+844.41382 5335.8
+845.41534 905.6
+859.33551 1641.4
+882.37762 815.1
+910.88867 1809.0
+911.38794 1195.5
+927.24841 662.9
+930.39032 1042.9
+930.89520 1604.5
+937.36896 1338.9
+938.34918 784.3
+939.39386 5914.5
+939.89886 5256.9
+940.39923 2573.0
+955.37390 1619.3
+956.37561 965.6
+957.43738 18808.2
+958.43958 8780.0
+959.44116 1924.4
+965.91058 1308.1
+966.40729 2494.8
+966.91803 934.4
+974.38312 948.8
+974.91479 8068.1
+975.41766 8062.6
+975.91870 4723.3
+976.42096 1628.1
+1018.64288 697.4
+1029.93445 781.3
+1030.43457 4393.6
+1030.93481 3351.9
+1031.44885 832.4
+1036.38647 1973.2
+1057.25500 715.6
+1064.47034 730.4
+1067.94080 1871.0
+1068.47034 5660.7
+1069.47241 3520.1
+1070.46436 816.1
+1072.45520 1213.6
+1076.45081 7912.7
+1076.94800 12941.8
+1077.44739 10525.8
+1077.94702 4595.7
+1078.44971 2980.9
+1085.45605 18929.6
+1085.95264 20149.5
+1086.46094 7891.0
+1086.96155 1554.5
+1087.48328 1403.0
+1140.06775 737.4
+1198.24451 2693.4
+1206.50476 751.1
+1214.45703 2581.0
+1215.44385 787.9
+1215.55774 803.9
+1231.48523 1650.4
+1232.48230 1836.5
+1233.54773 9089.1
+1234.55115 5311.1
+1235.55859 2061.4
+1249.49683 862.9
+1281.83911 680.4
+1287.76245 586.6
+1311.47998 1173.0
+1328.49878 2194.8
+1329.49133 2634.7
+1330.49023 751.7
+1330.58765 1644.1
+1331.59631 1172.0
+1346.51489 2199.9
+1347.59375 15956.9
+1348.59326 11286.6
+1349.59265 5042.0
+1350.59448 876.9
+1364.51929 7588.2
+1365.52185 4265.9
+1366.52698 1644.6
+1367.51794 764.1
+1403.56641 2538.8
+1404.57007 1751.4
+1428.56726 1927.6
+1429.56775 1475.7
+1430.51501 653.9
+1445.57837 3483.7
+1446.57861 2852.4
+1447.57727 1484.2
+1458.62170 2357.9
+1459.62585 1559.0
+1463.59045 2593.3
+1464.58350 2107.4
+1465.59436 966.9
+1476.63379 6568.2
+1477.63574 4717.7
+1478.62805 1450.5
+1502.61755 742.4
+1521.71106 636.6
+1559.65735 948.0
+1560.63501 843.7
+1577.68091 7815.9
+1578.68469 6015.1
+1579.69690 2025.1
+1611.64185 965.8
+1612.67688 848.6
+1621.62695 685.6
+1622.65393 1158.4
+1623.59705 626.6
+1630.71777 1191.3
+1631.69714 1403.4
+1639.65698 6352.6
+1640.66223 5721.4
+1641.65210 2290.0
+1648.71643 11627.6
+1649.71851 8354.1
+1650.71887 3776.5
+1651.72876 1138.9
+1657.66406 5484.5
+1658.67102 4134.2
+1659.66418 2226.5
+1703.66187 1039.1
+1724.59753 790.6
+1726.69299 2872.0
+1727.68665 1372.5
+1728.70337 988.5
+1744.69189 2127.4
+1745.71631 1805.5
+1746.70703 1130.1
+1809.70618 824.2
+1820.74890 734.9
+1876.58533 914.2
+1877.81396 1521.6
+1878.80847 2066.7
+1879.25903 3118.5
+1879.53625 19665.8
+1880.37366 953.9
+1880.88086 879.0
+1898.90967 771.6
+1907.06238 7729.5
+1924.74255 4578.0
+1925.75208 6857.3
+1926.75134 5219.2
+1927.75745 1848.4
+1930.41833 830.3
+1942.76343 22856.9
+1943.76392 23763.9
+1944.76648 11223.5
+1945.77039 3174.6
+1946.77734 861.7
+1949.83582 1150.3
+1960.77222 13410.6
+1961.77722 12164.0
+1962.77747 6619.8
+1963.80640 1995.3
+S	1122	1122	417.7300596
+Z	4	1666.88894
+112.42751 580.1
+113.35303 542.6
+115.10957 532.5
+115.54040 545.5
+118.52718 726.3
+119.19363 569.3
+120.66332 622.9
+121.80215 2449.3
+121.80541 1102.8
+133.26416 617.9
+138.36882 619.9
+150.10866 691.3
+152.15944 497.0
+155.53619 533.2
+163.07591 590.4
+163.29086 631.1
+173.86926 566.0
+175.11848 4990.9
+177.65089 594.2
+182.60002 597.3
+186.61156 531.0
+190.98212 589.0
+194.13881 1814.9
+194.63943 554.4
+198.93130 1086.7
+199.20703 1002.8
+199.26149 667.9
+199.29073 903.8
+199.30472 2957.1
+199.31482 961.8
+199.32095 809.2
+199.40047 950.0
+204.39008 551.9
+207.22121 584.7
+219.04039 561.4
+226.97231 580.1
+233.16460 6446.0
+234.16794 1215.6
+240.56079 584.1
+241.25764 563.5
+255.64462 658.7
+261.15860 1765.6
+271.17709 967.1
+271.61835 721.3
+272.89221 530.4
+280.17285 634.3
+287.86221 553.7
+288.20251 71277.7
+289.20639 8436.6
+341.14587 818.9
+375.20035 3623.4
+375.53439 1984.1
+375.86960 744.5
+384.53217 13596.3
+384.86670 5685.1
+385.20105 1677.8
+387.27051 37326.4
+388.27399 6554.7
+389.27344 813.6
+392.22827 4278.4
+392.72983 2828.3
+399.72485 719.1
+400.74872 688.7
+406.22549 15034.9
+406.72726 3214.7
+422.74637 577.3
+427.54709 1353.4
+428.72818 1170.5
+429.72961 638.9
+439.23126 2913.1
+439.56412 2120.8
+439.89996 1487.7
+441.18958 552.5
+445.23398 6294.8
+445.56857 4411.8
+445.90198 1673.3
+446.21579 1355.9
+446.72125 671.9
+451.23724 7579.5
+451.57166 7803.1
+451.90540 3719.3
+452.23965 1191.0
+454.56464 1399.9
+454.89767 1322.7
+456.59952 566.6
+457.57602 10722.6
+457.91022 8382.5
+458.24506 3181.1
+460.56842 6174.4
+460.90262 3481.2
+461.23825 879.4
+463.57956 13072.1
+463.91406 9823.6
+464.24753 3549.2
+464.57797 1003.7
+469.58328 10453.8
+469.91754 8412.7
+470.25174 2465.3
+470.58267 1094.2
+472.22928 678.4
+479.10245 592.0
+483.26141 803.4
+495.27060 4225.3
+495.60553 4186.8
+495.93784 1060.9
+498.08755 560.8
+498.30011 1879.2
+501.27420 1800.7
+501.58475 2209.1
+501.61575 2280.5
+501.73712 900.8
+501.92316 1281.5
+502.25766 791.2
+502.75848 1040.2
+507.27838 3838.8
+507.59229 3671.9
+507.62396 1464.0
+507.92935 2547.1
+508.26205 977.4
+510.74023 718.5
+511.77460 1841.9
+512.25464 1638.2
+512.75024 957.2
+513.60211 3302.8
+513.93579 4121.9
+514.27118 1265.7
+515.12115 544.3
+516.31232 6671.9
+517.31079 1542.4
+532.61450 1735.2
+549.14423 655.4
+567.28015 1728.9
+576.29443 31136.0
+576.79553 19175.5
+577.29730 6643.2
+577.79742 1037.3
+584.26996 1008.7
+584.77405 719.0
+616.81720 1578.6
+617.31799 982.5
+621.81134 1699.6
+630.38092 766.1
+630.82019 1458.8
+631.32129 1259.2
+631.80969 7231.6
+632.31177 4790.8
+632.81616 1411.7
+639.82471 1305.8
+640.33044 910.6
+640.81525 98573.1
+641.31665 71223.6
+641.81787 25046.4
+642.31952 6502.7
+642.53387 832.9
+666.35559 977.0
+674.21271 637.4
+676.62939 854.1
+681.34833 1087.0
+683.34637 2234.3
+684.35736 1288.6
+690.34943 5476.2
+690.85046 5010.2
+691.35303 1034.6
+692.73871 711.9
+723.37665 1802.9
+795.71875 925.6
+898.46893 558.7
+960.65356 596.3
+1023.47882 1251.8
+1057.22974 845.4
+1139.38794 629.0
+1152.53003 1314.7
+1198.36938 3159.0
+1228.49902 729.5
+1330.32056 661.3
+1555.17175 720.1
+1662.45459 591.0
+S	1123	1123	1879.99399127
+Z	2	3758.14
+Z	3	5636.707
+532.60760 1671.8
+544.27161 654.2
+580.21594 796.1
+610.63434 641.8
+617.85046 539.9
+630.24823 822.8
+638.26288 640.6
+658.52429 570.5
+676.66547 1003.4
+689.12073 633.7
+784.95929 617.2
+857.81470 642.7
+967.87738 782.0
+1198.35242 3301.7
+1390.78699 661.6
+1431.30005 722.3
+1666.98816 787.6
+1772.64600 597.2
+1777.17334 940.7
+1822.32520 643.5
+1869.98767 954.9
+1878.11243 823.5
+1879.06909 2543.6
+1879.58813 17709.9
+1880.18896 1721.7
+1881.14099 1006.7
+1906.82104 577.2
+1907.05505 7379.5
+1930.09424 851.8
+S	1124	1124	1907.5128246
+Z	2	3813.178
+Z	3	5719.263
+532.63892 1621.8
+536.26752 598.9
+608.81848 628.0
+611.07880 671.7
+665.15326 605.1
+676.64844 1065.3
+731.06134 720.9
+784.55609 683.7
+793.46802 645.2
+795.72717 793.6
+953.26978 786.1
+954.11987 892.0
+1107.22327 613.1
+1188.12671 671.2
+1198.31226 804.8
+1198.43665 3003.5
+1559.49573 654.0
+1607.31714 607.1
+1635.49243 651.0
+1873.20923 585.2
+1878.56812 619.7
+1878.76331 702.1
+1879.04834 1242.0
+1879.56360 19652.6
+1880.10083 1202.6
+1907.04211 7550.5
+1918.70874 820.7
+1930.43103 847.7
+S	1126	1126	1105.02040793
+Z	2	2208.193
+Z	3	3311.786
+299.49393 546.7
+320.54779 655.0
+355.96307 579.4
+361.18436 1182.8
+370.88647 640.4
+372.15048 1439.3
+403.67276 857.5
+406.56689 672.6
+408.15295 919.5
+409.39832 596.8
+411.49887 604.5
+425.17804 1783.3
+455.18903 909.2
+462.22919 2590.9
+483.17300 641.8
+513.19141 1109.1
+522.19495 732.4
+523.17651 1403.5
+531.24994 1100.8
+532.57007 1424.9
+540.20361 8237.9
+541.20795 1311.6
+542.20428 707.9
+549.08997 704.4
+549.26135 17291.0
+550.26526 4011.9
+551.26459 878.0
+554.80536 645.0
+558.21729 1107.2
+558.92249 588.1
+566.21759 880.7
+584.22760 1164.3
+593.22919 949.4
+594.20947 827.8
+611.24115 7547.4
+612.24347 1909.7
+650.24298 692.8
+662.40546 679.1
+666.27869 824.2
+676.26532 1554.0
+676.63251 1473.6
+683.30432 791.2
+686.32062 11648.0
+687.32288 3192.7
+694.27838 6311.3
+695.28711 1438.0
+705.84064 572.0
+712.28931 4508.0
+713.29211 1469.1
+718.26831 824.4
+725.33032 3504.8
+730.30316 1022.9
+731.32318 1129.5
+732.09521 625.9
+736.28302 3160.4
+736.60632 678.6
+736.95581 683.5
+743.34167 61252.6
+744.34399 20491.6
+745.34735 3260.9
+746.34796 736.6
+789.33301 1145.8
+792.31885 792.9
+805.30920 1113.8
+806.85236 878.3
+807.85303 861.7
+815.85712 6566.1
+816.35651 6610.6
+816.85529 2807.2
+823.32031 7952.2
+824.32245 3305.5
+824.39893 5393.7
+824.86206 21994.0
+825.36267 15294.6
+825.86444 7135.3
+826.36444 3106.9
+841.33008 3692.6
+842.40942 76836.8
+843.41229 32459.9
+844.41486 7164.1
+845.42169 1546.9
+859.34583 1056.9
+863.34412 844.5
+873.37921 795.7
+873.61938 644.1
+873.87128 1215.0
+874.37085 751.4
+882.37335 2236.8
+910.88458 3021.5
+911.38885 1699.7
+919.35046 825.3
+929.20135 723.7
+930.39270 1472.0
+930.88495 1820.2
+937.36438 2364.8
+938.36395 1464.0
+939.39313 7834.0
+939.89771 8681.7
+940.39685 3130.4
+955.36566 1826.2
+956.37659 902.7
+957.43658 25510.5
+958.43903 12135.5
+959.44006 3127.5
+960.47369 619.3
+965.90887 2365.3
+966.41290 2271.4
+966.91016 1680.8
+967.41394 683.5
+974.91431 10673.4
+975.41901 7546.5
+975.91736 4073.3
+976.41864 1665.7
+1021.42261 1035.9
+1030.43384 4774.8
+1030.93433 3242.5
+1031.43225 2580.4
+1036.38037 2293.6
+1037.38306 1122.6
+1038.95239 1184.7
+1039.44312 1054.0
+1057.25476 686.1
+1063.94922 834.9
+1068.46912 9638.0
+1069.47107 5040.3
+1070.47021 1155.9
+1070.92993 713.1
+1072.44458 1602.5
+1072.94653 949.4
+1073.45154 866.4
+1076.44958 12017.7
+1076.94849 19146.1
+1077.44763 17203.6
+1077.94604 8400.6
+1078.45276 2693.3
+1078.94910 837.8
+1084.42859 1457.3
+1085.45654 14400.5
+1085.95117 6402.6
+1086.47156 4639.2
+1086.95898 1021.7
+1087.47949 1053.6
+1104.41907 677.9
+1189.48560 752.8
+1196.45593 1073.3
+1198.28467 3367.4
+1214.09131 869.7
+1214.46533 2533.8
+1215.44971 960.6
+1231.48279 2567.5
+1232.48669 2013.5
+1233.54822 13344.7
+1234.54895 7838.8
+1235.55994 3510.1
+1249.51074 1548.4
+1250.49524 1256.5
+1311.46680 1275.9
+1328.49866 3161.2
+1329.48560 3301.7
+1330.46484 1486.5
+1330.58875 2199.3
+1331.57849 1483.8
+1346.51721 2192.9
+1347.59119 21567.9
+1348.59302 14820.5
+1349.59583 6217.8
+1350.60461 906.7
+1364.52258 10717.7
+1365.52405 6452.1
+1366.52551 2666.3
+1385.51880 823.6
+1403.57031 2882.8
+1404.57080 1934.0
+1410.55688 1172.4
+1427.56653 1580.2
+1428.55811 1951.1
+1429.55859 1658.6
+1445.57971 2836.9
+1446.57520 2739.7
+1447.58215 1183.5
+1448.56702 771.8
+1458.62878 3151.7
+1459.61487 2628.5
+1460.60718 1367.7
+1461.84631 579.2
+1463.58911 3935.4
+1464.59534 2964.3
+1465.60596 820.4
+1476.63281 9968.2
+1477.63599 8536.3
+1478.63391 3228.8
+1479.59631 1075.6
+1502.60168 931.5
+1503.58289 827.4
+1520.61243 858.8
+1560.65674 795.0
+1577.68018 9689.9
+1578.68347 7049.6
+1579.69080 3470.5
+1580.68042 1355.9
+1611.67151 1293.7
+1612.65808 1236.9
+1622.64417 1415.7
+1623.61218 1023.4
+1630.68494 811.9
+1631.70190 1344.2
+1639.65613 8608.3
+1640.65771 7380.0
+1641.66980 3318.6
+1642.65442 1410.7
+1648.71716 15026.7
+1649.71838 12062.9
+1650.72461 5359.2
+1651.73840 1285.8
+1657.66870 7400.6
+1658.67371 5989.6
+1659.67773 2687.6
+1703.66638 1289.9
+1704.68091 1744.1
+1708.65845 832.2
+1709.67944 1230.8
+1710.66565 1008.8
+1726.69434 2119.0
+1727.69092 2805.3
+1728.71692 1040.5
+1744.70056 2279.0
+1745.71375 2003.5
+1764.73267 764.5
+1810.74475 764.0
+1827.74780 1540.7
+1828.74622 1372.4
+1876.14001 952.8
+1877.77954 866.4
+1878.81567 1483.5
+1879.51416 20050.3
+1907.09668 7214.8
+1907.70703 635.6
+1908.73706 738.0
+1918.60938 787.0
+1924.75659 6934.9
+1925.74231 10710.2
+1926.75146 6405.8
+1927.74451 2900.7
+1942.76355 29432.5
+1943.76270 29587.7
+1944.76807 14413.8
+1945.76489 5831.1
+1946.77393 935.7
+1960.77185 17902.6
+1961.77686 16088.1
+1962.78296 9451.2
+1963.78174 2294.4
+1964.80103 961.1
+S	1127	1127	1103.29240793
+Z	3	3306.602
+Z	2	2204.737
+314.80624 725.9
+344.55536 682.0
+351.57074 601.8
+360.28943 666.9
+364.62643 573.5
+400.91373 644.4
+531.65021 610.8
+532.59583 1583.2
+589.01178 635.5
+608.11774 583.0
+650.21423 1076.4
+665.39941 778.8
+676.62769 1008.5
+676.99512 743.7
+683.13904 658.7
+772.38165 684.3
+795.71588 1292.7
+852.12189 713.1
+963.27209 833.7
+992.62732 610.1
+1000.27850 600.7
+1019.72491 780.6
+1057.21436 949.6
+1198.33838 3040.7
+1289.15210 579.1
+1602.55298 610.6
+1803.44006 793.7
+1878.83008 701.1
+1878.97949 1467.1
+1879.48914 19742.0
+1880.25977 1512.7
+1907.01367 7232.8
+1918.59619 707.9
+1930.25903 952.4
+S	1128	1128	1104.51899127
+Z	3	3310.282
+Z	2	2207.19
+322.70596 637.9
+332.08163 670.1
+333.37430 532.5
+333.62872 576.3
+353.44952 610.9
+359.97339 660.2
+393.36835 690.9
+407.28256 595.0
+410.01477 603.0
+425.17416 1258.5
+437.14380 635.8
+441.83655 671.8
+461.08972 578.6
+462.22714 1722.0
+465.72534 607.6
+490.09631 565.9
+506.10971 701.0
+532.59039 1669.8
+540.20349 5192.6
+541.20911 1024.8
+549.26099 10118.3
+550.26691 2030.9
+558.21259 1097.0
+582.87463 575.7
+611.24133 4634.5
+612.24890 726.7
+630.33075 623.4
+668.30145 776.9
+676.60724 961.8
+686.32025 7403.8
+687.32513 2107.1
+694.27734 4179.5
+695.28931 782.4
+712.28845 2983.5
+725.33270 2285.7
+736.27191 1277.3
+743.34137 36424.7
+744.34436 11811.1
+745.34430 2280.9
+751.53894 542.6
+754.21210 634.4
+757.29578 774.9
+780.97095 717.4
+789.33710 820.7
+789.85657 790.8
+806.84656 785.0
+815.85291 2791.7
+816.35510 4368.9
+816.85468 1296.5
+823.31940 5234.4
+824.32587 1243.7
+824.39880 3028.7
+824.86102 10813.4
+825.36145 8139.9
+825.86401 3249.6
+841.33215 1624.2
+842.40900 47173.1
+843.41229 15958.4
+844.41418 4304.1
+846.30170 654.3
+882.37787 1168.9
+882.87219 1267.9
+894.36047 652.1
+910.88562 2082.4
+930.39984 744.0
+931.39191 1134.8
+937.36230 1335.5
+938.34180 963.1
+939.38965 3293.1
+939.89893 5004.9
+940.39929 1734.3
+956.35229 661.1
+957.43732 15002.6
+958.43878 7584.0
+959.43622 2010.4
+965.90784 962.2
+966.41498 1098.7
+966.90430 883.0
+974.91632 5002.6
+975.41663 5826.9
+975.91833 3035.2
+1029.94165 1126.1
+1030.43262 2268.6
+1030.93579 2356.5
+1031.43420 779.7
+1036.38916 1410.7
+1068.46558 4635.1
+1069.46716 3520.1
+1070.46936 833.5
+1072.45471 706.7
+1076.44861 6436.8
+1076.94727 9386.2
+1077.44739 8075.9
+1077.94434 3758.8
+1078.44568 1585.4
+1084.43115 931.3
+1085.45483 15617.7
+1085.95349 14061.2
+1086.46338 6056.5
+1086.95923 706.0
+1188.34338 780.8
+1188.49292 745.3
+1198.32166 3427.5
+1213.48096 936.8
+1214.47351 1112.9
+1231.47656 2091.2
+1232.48499 1049.7
+1233.54846 8662.8
+1234.54968 4565.6
+1235.54773 1683.8
+1249.49109 1125.9
+1272.32800 642.5
+1280.11060 641.7
+1320.40845 756.3
+1328.29395 633.6
+1328.48767 1838.9
+1328.72668 706.8
+1329.48792 1778.9
+1330.59192 1578.1
+1331.57288 837.4
+1346.50928 1715.3
+1347.59082 13140.7
+1348.59119 9075.4
+1349.60010 3434.1
+1350.59973 1143.2
+1364.51978 5162.8
+1365.52478 3831.0
+1366.53552 1300.7
+1403.56299 1940.7
+1404.57361 1973.4
+1428.55554 1349.5
+1445.58423 2047.6
+1446.56714 2177.2
+1447.57666 964.8
+1458.61353 1011.5
+1459.60706 1387.6
+1463.58679 1830.4
+1464.58850 1552.8
+1476.63354 5496.2
+1477.64014 3707.8
+1478.64600 1464.4
+1482.02393 607.6
+1553.42810 630.4
+1577.67859 5404.1
+1578.68225 4581.0
+1579.68359 1608.5
+1580.68762 729.1
+1594.24402 642.2
+1639.65613 3921.6
+1640.40149 655.9
+1640.66028 4693.3
+1641.66785 1578.0
+1648.71289 8709.5
+1649.71936 6355.4
+1650.72729 3142.0
+1657.66675 3408.1
+1658.67126 3925.1
+1659.64929 1228.8
+1709.62463 806.3
+1710.71143 816.1
+1726.68677 1709.6
+1727.68518 1407.1
+1744.68860 1105.9
+1745.69617 1271.0
+1828.73889 1335.8
+1847.68018 727.9
+1878.45801 849.2
+1878.81885 730.8
+1878.92444 789.6
+1879.45654 18899.5
+1879.73169 3558.6
+1880.02246 583.1
+1906.62866 765.7
+1907.01636 7377.6
+1918.61707 978.1
+1924.74963 3026.8
+1925.74792 5327.7
+1926.74048 3725.0
+1927.76758 1957.2
+1942.76257 20787.1
+1943.76294 18280.3
+1944.76440 8766.5
+1945.75928 3004.9
+1947.18604 748.9
+1960.77246 11083.9
+1961.77539 8768.2
+1962.77869 4646.7
+1963.76904 1144.8
+1964.79382 743.8
+S	1130	1130	1879.95440793
+Z	3	5636.588
+Z	2	3758.061
+532.59045 1875.1
+549.12683 645.9
+630.38977 696.9
+676.62158 853.4
+731.09119 725.0
+759.62378 596.6
+760.74799 681.9
+795.71338 845.8
+1101.05615 590.2
+1176.63049 701.4
+1179.84802 626.2
+1198.32397 2824.3
+1396.03772 616.6
+1449.63037 592.7
+1449.77844 557.8
+1456.02380 644.6
+1666.97815 777.2
+1725.80554 680.0
+1776.86328 952.6
+1878.20068 792.0
+1878.75854 1596.2
+1879.47498 19394.9
+1879.76819 1778.8
+1880.12305 897.7
+1907.04651 7780.1
+1930.53101 1040.2
+S	1131	1131	1907.4648246
+Z	3	5719.119
+Z	2	3813.082
+532.53534 1950.1
+549.58710 721.5
+597.61707 689.7
+630.36597 908.6
+676.63464 774.1
+690.68970 727.7
+702.70471 678.9
+795.70624 1223.5
+826.33276 638.0
+841.92609 581.2
+888.51062 580.9
+941.86475 751.8
+952.78687 624.7
+962.20636 715.7
+1019.74976 891.8
+1023.83789 595.0
+1188.27502 1013.3
+1198.20081 3401.1
+1198.35535 545.5
+1308.10522 698.1
+1438.40173 652.3
+1585.62659 662.0
+1678.09253 634.2
+1716.83228 702.4
+1810.28320 571.1
+1824.38562 691.3
+1874.31677 616.0
+1878.98877 1444.0
+1879.52393 19857.5
+1879.81006 2443.1
+1880.08777 935.0
+1907.04187 7461.0
+1918.60266 752.1
+1930.49292 802.4
+S	1133	1133	417.7340746
+Z	4	1666.905
+105.42214 510.1
+106.76349 568.2
+109.86079 512.0
+113.21893 521.2
+113.73969 521.3
+121.80376 2256.1
+122.89125 528.5
+128.57126 638.6
+132.30978 559.0
+157.59715 694.6
+164.67929 570.8
+165.78786 828.1
+167.54944 613.6
+170.44571 573.9
+174.65204 633.4
+175.11841 3329.2
+184.85005 499.5
+187.29259 542.9
+194.13916 979.2
+197.46210 630.9
+197.59077 672.4
+198.92862 657.7
+199.21210 816.9
+199.22252 647.2
+199.24399 982.0
+199.28813 1106.5
+199.30922 2792.9
+199.31885 1491.6
+199.33905 768.5
+199.40698 1264.0
+199.41405 931.5
+212.97104 592.8
+229.86812 586.3
+233.16435 4550.6
+234.16196 520.8
+238.84802 725.9
+246.67593 566.9
+247.98076 544.7
+251.43338 523.7
+254.74580 520.2
+255.28419 692.5
+259.80179 561.9
+261.16006 985.4
+265.45486 596.8
+271.17505 930.4
+274.23129 611.7
+288.20242 46000.9
+289.20630 4882.6
+291.57330 577.0
+303.08420 559.6
+304.30255 527.3
+308.88748 579.8
+314.59116 509.5
+332.76550 574.4
+359.61661 540.1
+375.20090 3454.5
+375.29031 693.5
+375.53339 1682.6
+375.86966 827.4
+384.53204 9417.1
+384.86615 3892.0
+385.20068 1343.4
+387.27036 24261.1
+388.27368 4053.7
+392.22772 2779.5
+392.73123 1519.5
+398.64783 527.1
+399.46658 564.1
+406.22531 11491.0
+406.72757 3163.6
+418.92175 557.2
+427.88351 898.2
+428.73068 1101.2
+434.19144 577.3
+435.32205 621.1
+439.22946 1538.4
+439.56485 2317.2
+445.23361 4098.2
+445.56738 2579.7
+445.90378 604.1
+451.23633 4903.2
+451.57153 3306.3
+454.56442 604.2
+457.57568 5888.1
+457.90988 5253.7
+458.24689 1847.6
+460.56906 1639.4
+460.90320 2481.1
+463.57956 7131.3
+463.91388 5179.6
+464.24872 3121.7
+466.52631 718.5
+469.58289 7151.4
+469.88651 645.8
+469.91678 4941.4
+470.25137 1176.9
+495.26971 3518.2
+495.60248 1762.6
+495.93961 1134.6
+498.30521 931.4
+499.30658 749.1
+501.27222 1754.5
+501.61478 819.2
+501.92099 768.6
+502.25940 680.3
+502.75848 798.9
+507.27783 3473.4
+507.59274 1362.6
+507.92719 1943.7
+511.77155 1337.7
+512.27045 1138.3
+513.60046 1424.2
+513.93707 1872.2
+516.31219 4613.2
+517.31543 1368.4
+532.61285 2174.3
+567.28278 1178.2
+576.29401 19789.6
+576.79559 11467.9
+577.29608 3914.0
+577.78540 735.0
+584.27411 818.6
+609.25104 690.6
+611.50751 598.9
+612.18036 624.5
+621.81097 1175.3
+622.32062 1093.1
+630.39142 735.6
+630.83881 649.1
+631.80865 4177.5
+632.31079 3088.5
+632.81134 799.2
+633.80670 994.2
+634.38062 613.6
+639.81641 655.5
+640.32697 676.1
+640.81506 60680.0
+641.31641 42099.5
+641.81750 14658.4
+642.31897 2941.1
+650.56226 705.6
+652.03186 534.1
+652.08813 643.4
+676.64709 1453.6
+681.34418 744.3
+681.83618 840.3
+683.35315 1037.0
+690.34998 3297.3
+690.85114 3235.1
+723.37952 910.1
+724.37921 922.7
+725.39154 566.6
+731.11383 895.6
+777.46478 519.5
+795.70422 725.3
+809.55768 590.0
+967.70270 568.4
+1019.84033 711.8
+1040.06787 593.6
+1057.26050 672.4
+1152.53687 879.2
+1198.37390 3293.0
+1290.82690 695.0
+1302.94958 758.7
+1332.01550 609.7
+1525.35400 782.1
+S	1134	1134	1105.0208246
+Z	2	2208.194
+Z	3	3311.787
+350.28494 734.5
+361.18332 780.1
+362.96042 682.6
+366.14099 639.1
+383.06158 597.6
+408.15173 649.5
+427.52209 831.6
+462.22983 2621.2
+522.19238 819.9
+532.63397 2082.5
+540.20313 7615.8
+549.13104 686.2
+549.26129 13746.7
+550.26349 2821.1
+566.21021 805.1
+580.08105 721.7
+580.27197 611.7
+593.22620 1063.6
+611.24078 6248.6
+612.24469 1329.1
+655.59070 577.3
+675.25635 865.0
+676.26941 1816.1
+676.63989 1113.0
+686.31915 9752.0
+687.32428 2958.8
+694.27734 5418.3
+695.28394 1022.4
+711.86169 713.3
+712.28827 4116.6
+713.29645 920.3
+725.33282 2863.0
+726.33777 969.3
+743.34143 48976.5
+744.34424 17131.0
+745.34680 3494.7
+789.83228 793.2
+805.31055 738.4
+807.30969 1199.2
+815.85620 5144.4
+816.35699 4965.1
+816.85870 2846.5
+817.36072 1088.6
+823.32031 7408.2
+824.32208 2239.3
+824.39856 4984.0
+824.86121 18614.4
+825.36194 12636.5
+825.86572 5161.2
+826.35840 1036.5
+841.33130 2600.9
+842.40912 63425.4
+843.41223 25525.9
+844.41357 5283.1
+845.41791 1061.9
+859.33698 1283.7
+874.37738 803.9
+882.37952 1252.7
+882.87000 1670.4
+901.88647 774.9
+910.88745 2086.4
+911.39294 1419.1
+920.35559 708.4
+921.34351 793.8
+930.39459 1482.3
+930.88574 2415.2
+937.35419 1868.4
+938.36176 928.1
+939.39264 6838.5
+939.89606 6217.6
+940.39673 2874.4
+940.89478 829.5
+955.37421 1808.0
+956.37689 1138.5
+957.43677 21328.5
+958.43927 9295.2
+959.44067 2845.8
+965.90076 1329.1
+966.40845 2161.2
+966.89996 1119.0
+974.37775 766.9
+974.91437 9940.1
+975.41895 9191.9
+975.91724 4119.4
+976.42969 1304.1
+980.35669 772.5
+1029.93481 1113.2
+1030.43225 4206.2
+1030.93359 3751.4
+1031.43066 2391.9
+1036.38135 2307.1
+1039.44617 959.5
+1063.93591 970.7
+1067.93530 997.0
+1068.47058 6466.8
+1068.93762 1205.6
+1069.47156 3889.7
+1070.46570 985.2
+1072.93689 894.9
+1076.44885 10568.0
+1076.94861 17448.8
+1077.44592 13804.2
+1077.94470 6273.7
+1078.44971 2725.3
+1084.43164 932.0
+1085.45679 17398.2
+1085.95337 13285.5
+1086.46912 6059.8
+1087.48010 1228.0
+1198.42188 3520.7
+1213.47107 847.9
+1214.45764 1556.1
+1215.44336 1239.0
+1215.54626 803.9
+1231.48560 3129.5
+1232.48657 1533.6
+1233.54956 10156.9
+1234.54932 6231.8
+1235.55554 2507.3
+1236.55774 765.3
+1249.49121 1229.4
+1328.49548 2597.4
+1329.48779 3070.0
+1330.47437 969.5
+1330.58862 1325.6
+1331.57605 1860.9
+1346.51245 2321.7
+1347.59094 17544.0
+1348.59216 12201.6
+1349.59241 4424.4
+1364.51843 8693.5
+1365.52454 4938.0
+1366.52771 1044.6
+1403.56934 3462.2
+1404.57593 2263.0
+1405.59070 1007.4
+1427.57520 1441.8
+1428.55835 2063.6
+1429.56372 1290.3
+1445.57788 2369.0
+1446.58044 2853.4
+1447.58728 1204.0
+1458.61853 2375.2
+1459.62952 2280.5
+1460.60791 804.4
+1463.59253 3439.0
+1464.58618 2097.8
+1476.63367 6664.0
+1477.63110 6426.2
+1478.62720 2463.4
+1502.60059 1074.1
+1520.57898 681.7
+1525.34729 815.2
+1561.70056 787.9
+1577.68262 7873.1
+1578.68481 7817.2
+1579.69202 3220.8
+1611.67444 1018.0
+1612.67053 1195.8
+1622.63379 1568.3
+1630.68994 1563.3
+1631.69470 1622.8
+1639.65784 6901.3
+1640.66199 6205.4
+1641.66357 3210.3
+1648.71655 11831.6
+1649.71948 10019.1
+1650.72473 4276.9
+1651.73438 1286.8
+1657.67065 6599.4
+1658.67224 5320.5
+1659.66101 1770.8
+1703.66833 1426.8
+1704.67273 875.6
+1705.74683 665.9
+1726.69751 2823.7
+1727.69409 1717.5
+1744.68103 1797.5
+1745.70081 1496.7
+1763.76062 790.3
+1811.69006 828.2
+1827.73657 1392.7
+1828.74780 1249.9
+1830.71143 649.4
+1877.79248 1650.4
+1878.80469 1360.3
+1879.19482 1271.0
+1879.51929 19561.7
+1879.89014 911.8
+1883.72522 738.1
+1906.75183 925.7
+1907.07397 7440.4
+1924.75391 5772.7
+1925.74756 8406.2
+1926.74438 6112.8
+1927.74524 1619.2
+1930.49951 891.9
+1942.76147 27946.1
+1943.76282 26554.7
+1944.76733 11965.9
+1945.76477 4508.6
+1946.76270 1151.8
+1948.79761 806.9
+1949.83875 950.7
+1960.77136 16043.5
+1961.77649 14414.1
+1962.77515 5525.4
+1963.78711 2282.4
+1964.47595 727.7
+1970.28809 851.9
+1996.73328 796.5
+S	1135	1135	488.000991267
+Z	2	974.154
+Z	3	1460.728
+120.73560 834.1
+121.80321 2608.8
+128.56755 753.6
+132.57634 532.3
+149.83282 635.7
+151.34814 628.8
+158.32974 703.7
+165.78728 770.0
+171.33199 522.4
+172.48782 646.2
+186.12282 1162.2
+188.25372 683.7
+188.27444 1453.7
+188.28439 1254.4
+188.29228 1150.7
+188.29788 1157.8
+188.30350 1152.8
+188.31566 838.7
+188.34084 667.9
+198.93106 1122.7
+199.27026 1108.2
+199.30260 776.0
+199.30960 1082.7
+199.32358 2251.0
+199.33514 1190.4
+199.35207 652.4
+199.42041 1159.2
+204.13414 6759.2
+227.10219 772.3
+229.92729 617.9
+231.14886 7910.6
+238.71590 628.1
+252.19617 568.9
+257.11499 541.7
+259.14340 1010.8
+272.00919 527.4
+276.17035 12083.7
+277.17358 1194.2
+285.13440 864.5
+302.77338 562.4
+319.16006 3255.1
+320.16479 3387.9
+364.16074 2032.2
+370.79568 580.8
+379.70193 2754.4
+380.20276 1180.0
+381.34933 582.4
+385.18689 1272.7
+385.69064 833.6
+393.69989 2326.0
+411.70224 2596.5
+412.20251 1092.1
+427.54730 672.4
+428.22391 547.7
+436.24567 1157.9
+438.55350 1685.9
+438.88663 1086.5
+448.20313 907.2
+450.24170 3859.9
+450.74319 1403.6
+470.34576 621.8
+471.22681 2055.7
+471.72845 1201.6
+472.14624 643.0
+487.31351 648.1
+511.22766 1997.7
+532.61578 1828.9
+544.23865 713.6
+549.74426 7493.7
+550.24768 5648.0
+550.74689 1765.5
+553.76398 2284.5
+554.26672 1678.8
+554.76227 786.3
+562.24481 8627.3
+563.25000 1742.2
+571.78522 1929.1
+572.29089 804.6
+575.26941 1655.0
+575.77014 1271.9
+580.78821 793.1
+584.27344 17391.7
+584.77472 10671.2
+585.27563 3037.0
+585.76038 1045.5
+593.02252 763.5
+593.27869 123697.3
+593.78003 75978.7
+594.03467 788.8
+594.28094 21748.3
+594.78406 3595.8
+612.38733 570.7
+619.26740 759.8
+620.29016 680.9
+620.78680 1248.0
+624.31165 2547.5
+625.30707 657.5
+629.29651 17725.7
+629.79834 11662.3
+630.29797 2253.6
+639.32330 5319.8
+640.32690 1093.6
+657.32660 2583.2
+666.81476 710.8
+667.31567 1222.1
+675.32892 10733.9
+676.33344 2372.6
+676.63025 1200.7
+677.33838 795.4
+702.61749 905.1
+738.35931 1046.5
+756.33093 2189.8
+757.32922 1263.6
+761.21558 571.1
+795.71503 948.2
+805.38727 676.4
+822.39716 7095.3
+823.40289 2977.0
+844.64160 566.7
+867.39117 1681.4
+868.39459 1047.3
+885.41583 716.1
+959.45587 2843.4
+960.45410 1575.9
+982.42413 11358.9
+983.42761 6081.9
+984.43207 1380.3
+1055.20129 627.0
+1057.24268 804.5
+1187.87927 645.7
+1188.37781 556.7
+1198.37732 3792.7
+1245.52527 526.2
+1288.28955 658.9
+1374.18726 636.2
+1402.33191 539.3
+1525.39490 927.8
+1792.80054 672.7
+1878.16504 831.3
+1878.52197 562.1
+1878.77478 1185.6
+1879.09106 1532.8
+1879.51575 19523.1
+1879.94849 1419.4
+1880.23413 1660.3
+1880.55835 856.6
+1880.90002 675.0
+1882.69922 615.4
+1907.14404 7175.8
+1907.56519 770.7
+S	1137	1137	1879.9148246
+Z	3	5636.469
+Z	2	3757.982
+517.75378 617.7
+532.60986 2033.7
+549.16980 991.9
+676.64282 1191.9
+728.39929 593.0
+795.71411 1224.3
+840.50732 609.0
+968.94354 582.9
+1142.08289 590.2
+1143.52502 858.6
+1198.36340 3752.2
+1244.47095 608.7
+1430.88452 658.5
+1525.44751 767.9
+1666.97961 702.3
+1704.71765 645.5
+1879.53943 19877.3
+1907.05713 7367.9
+S	1138	1138	1907.47240793
+Z	3	5719.142
+Z	2	3813.097
+521.03687 578.4
+523.04187 616.4
+532.59845 2068.2
+532.66333 583.1
+549.15234 872.6
+605.32904 550.6
+630.40967 926.2
+676.63678 773.8
+692.52216 712.1
+740.48676 562.1
+752.61639 596.7
+773.63770 601.8
+1010.41132 642.0
+1121.25562 680.5
+1140.27820 722.0
+1153.98267 724.1
+1198.33777 3262.7
+1279.72327 570.5
+1457.93884 734.0
+1525.41125 886.9
+1714.17627 642.2
+1878.01257 863.4
+1878.42419 843.4
+1879.02991 825.4
+1879.21765 1262.5
+1879.52209 20083.6
+1880.04480 1457.6
+1880.70996 766.1
+1903.50854 630.4
+1907.06030 6917.9
+S	1140	1140	1879.9708246
+Z	2	3758.094
+Z	3	5636.637
+532.60547 1665.3
+549.13464 585.3
+603.65491 616.1
+628.41113 603.3
+640.91083 635.0
+676.64581 1228.8
+731.12360 588.5
+776.46997 659.0
+795.72101 1121.0
+929.76288 649.8
+951.51788 611.3
+994.77740 609.6
+1057.25720 686.5
+1198.34717 3539.4
+1353.11951 635.1
+1365.87769 680.8
+1415.83313 658.5
+1490.28308 727.7
+1504.82825 629.5
+1525.37964 825.5
+1809.48938 695.7
+1875.23767 682.7
+1877.82922 674.4
+1878.60608 1001.1
+1879.04395 1147.6
+1879.54395 19962.7
+1880.28052 888.9
+1881.21411 1232.3
+1906.99182 7523.7
+1907.32666 679.0
+1930.59778 724.6
+1931.63562 942.2
+1946.00964 705.2
+S	1141	1141	417.7299671
+Z	4	1666.88857
+106.00001 580.8
+106.88104 730.5
+113.17236 608.8
+114.94609 607.9
+116.02270 764.4
+120.52304 657.3
+121.80342 2131.8
+128.56786 657.5
+128.69370 667.0
+130.36739 602.6
+131.08076 583.6
+136.57059 608.7
+142.72574 501.5
+146.91344 637.7
+151.76054 655.7
+165.78787 1070.3
+167.40765 581.1
+168.31818 563.4
+169.48363 583.7
+182.78369 702.0
+198.93048 1050.4
+199.20694 1098.1
+199.29146 1055.6
+199.30568 2703.6
+199.31654 848.6
+199.39908 774.3
+207.65445 569.9
+212.48795 508.7
+247.66562 518.9
+250.71164 541.4
+289.49109 582.8
+308.88266 733.0
+315.72449 643.8
+323.77194 639.4
+350.28949 740.5
+367.75464 586.2
+397.89981 498.0
+422.16373 576.1
+427.52231 914.8
+456.86261 626.3
+459.64972 508.7
+469.88501 715.1
+476.78226 739.2
+528.68097 623.7
+532.59576 1817.3
+536.39917 576.3
+539.60413 639.6
+549.12531 915.2
+576.51489 604.7
+586.29138 606.0
+661.57471 632.5
+676.63342 1110.6
+784.90204 624.1
+795.72070 1057.5
+802.50610 596.5
+962.79144 563.9
+988.69543 625.1
+1079.54028 577.6
+1198.32654 3703.2
+1255.29187 594.5
+1267.59692 644.2
+1525.33167 1071.7
+1582.11206 576.0
+S	1142	1142	566.4692246
+Z	4	2261.8456
+165.78731 751.5
+166.75171 584.4
+169.83069 578.1
+188.25729 847.1
+188.26920 1170.1
+188.27827 1111.3
+188.29276 1644.2
+188.30078 947.5
+188.30980 1182.2
+188.31467 1082.3
+191.06871 607.4
+199.29396 1435.0
+199.30835 1961.4
+199.32947 2245.3
+199.34233 824.3
+199.42934 933.5
+204.99245 585.4
+241.18860 598.3
+271.60843 578.8
+297.91492 532.5
+308.89380 633.7
+314.41965 626.3
+350.26898 923.2
+391.21719 563.1
+394.95328 657.2
+451.22415 673.4
+482.64639 699.4
+526.65070 514.2
+532.56531 1904.5
+533.07617 621.5
+575.16327 690.4
+587.73767 652.1
+610.28772 617.6
+632.62915 654.7
+676.08789 582.2
+676.56976 1113.9
+762.06458 578.7
+795.71899 743.5
+849.73401 691.6
+904.96594 565.2
+1057.13867 1012.8
+1071.63318 645.3
+1145.83850 543.2
+1198.25757 3390.6
+1270.71765 677.9
+1430.23108 550.6
+1489.19031 677.3
+1777.70361 611.3
+1879.35071 21096.5
+1907.01123 7337.9
+1918.60413 733.6
+S	1144	1144	488.0028246
+Z	3	1460.733
+Z	2	974.158
+121.80381 2221.4
+124.36875 621.5
+133.14809 959.9
+134.01250 535.0
+139.58209 550.6
+145.19876 552.0
+152.41359 648.5
+163.64551 642.9
+165.78801 594.2
+169.48416 764.5
+169.67361 568.8
+174.64015 691.7
+177.24451 595.8
+182.77162 560.9
+188.23006 555.0
+188.24487 927.3
+188.26288 1463.6
+188.28127 1826.6
+188.28951 1628.7
+188.30058 1553.7
+188.30997 1214.6
+188.32310 957.3
+188.33470 926.8
+188.34879 598.5
+198.92673 1037.5
+199.29218 1433.6
+199.30150 1231.8
+199.31265 2827.4
+199.32321 909.8
+199.33054 819.6
+199.41112 903.6
+226.74678 617.9
+234.96382 630.0
+260.82452 727.9
+267.75571 526.8
+271.58231 616.2
+273.64777 618.8
+280.26541 606.2
+308.87109 649.4
+350.27454 642.0
+352.41516 690.5
+381.32242 669.9
+423.88644 543.9
+427.49640 546.9
+428.60007 725.0
+496.26251 585.8
+532.59100 1819.6
+563.66620 551.7
+587.23517 718.0
+630.31073 701.7
+630.35278 904.8
+659.36603 717.4
+676.60126 761.5
+680.91980 614.3
+735.94019 1096.4
+736.28436 988.1
+795.69684 861.6
+832.75659 591.1
+852.57941 636.8
+1007.48260 540.9
+1049.23108 571.2
+1057.30261 672.6
+1058.38538 680.0
+1198.31677 3117.5
+1297.47009 564.1
+1446.93738 520.1
+1449.80969 529.7
+1652.37732 675.7
+1686.56104 715.4
+1708.80200 659.2
+1786.32654 575.6
+1878.60620 850.1
+1879.32336 8016.2
+1879.59814 17472.4
+1880.57141 809.0
+1904.25513 903.5
+1907.03796 7145.7
+1918.67664 859.5
+S	1145	1145	1105.0208246
+Z	2	2208.194
+Z	3	3311.787
+308.56943 10854.0
+308.73383 9800.1
+333.98401 10278.8
+350.27914 10933.5
+381.34616 10637.3
+434.62665 9541.1
+439.09769 9697.4
+482.64087 11090.4
+482.77658 11641.9
+482.92081 11448.6
+532.57721 23279.3
+558.47937 8715.6
+630.39264 14296.0
+650.56104 14169.5
+676.63177 18904.9
+677.16632 10795.3
+736.61908 17228.7
+781.04382 11176.7
+795.70691 17230.5
+860.11609 9151.8
+881.92627 11021.6
+910.11652 9858.8
+919.72845 9502.4
+995.32678 10039.2
+1057.24182 13670.7
+1094.86462 11846.1
+1103.36279 11449.5
+1179.14160 10084.0
+1198.29187 52453.3
+1199.94849 10476.0
+1321.06458 9831.9
+1465.97058 11889.3
+1642.95532 11450.5
+1725.74377 9594.6
+1763.11621 8824.0
+1874.16309 15534.0
+1878.21899 12581.7
+1878.94910 14309.9
+1879.51147 323521.8
+1879.84094 13303.6
+1880.02612 17542.4
+1907.04187 123158.3
+1930.55505 25189.5
+S	1146	1146	1103.2898246
+Z	2	2204.732
+Z	3	3306.594
+306.17398 727.6
+350.28012 835.6
+385.82718 561.8
+393.40262 534.0
+401.03223 552.8
+429.69287 605.3
+467.03104 585.4
+532.54852 1851.1
+613.37250 617.2
+621.87140 737.8
+629.29431 562.0
+650.21899 612.4
+676.66974 1334.5
+736.61688 792.5
+779.15747 649.2
+811.84552 643.0
+862.10516 646.0
+881.78711 565.8
+1051.54321 629.3
+1057.29736 775.6
+1103.76318 658.2
+1140.41064 885.8
+1188.20911 1072.0
+1198.22742 3389.2
+1593.92139 701.5
+1719.30615 853.2
+1859.94080 731.2
+1878.74683 898.5
+1878.91943 1145.9
+1879.17078 3008.4
+1879.60083 18738.9
+1880.02368 3119.9
+1880.64551 821.7
+1882.00623 1327.5
+1883.36658 638.0
+1907.05530 7559.0
+1930.54456 805.7
+1950.10510 672.4
+S	1148	1148	488.0035746
+Z	2	974.159
+Z	3	1460.736
+121.80297 2326.9
+131.12985 546.8
+138.70467 566.6
+147.52214 604.0
+151.02602 506.0
+178.40323 552.6
+186.12340 1734.9
+187.10847 634.6
+188.22580 674.9
+188.23245 688.3
+188.26167 1400.8
+188.28227 1490.9
+188.29881 1225.0
+188.30997 1224.5
+188.32318 888.5
+188.34428 559.1
+190.54915 658.6
+198.92673 783.4
+199.30125 1116.6
+199.31526 2729.2
+199.32672 1317.8
+199.40892 706.1
+199.42557 778.4
+204.13397 10029.8
+206.00354 598.1
+214.50740 664.7
+227.10217 938.0
+227.56883 579.2
+230.20567 599.4
+231.14880 10631.2
+232.15234 1489.0
+233.16429 867.7
+244.81624 589.3
+259.14362 1273.3
+276.17014 15663.0
+277.17346 2468.1
+301.14938 571.2
+308.88953 578.6
+319.16058 4559.7
+320.16476 4446.2
+320.66672 910.5
+346.14951 792.3
+350.27856 633.8
+355.23355 578.1
+360.39835 596.1
+364.16071 3238.0
+376.70529 836.3
+379.70300 3639.5
+380.20306 1451.2
+385.18536 1427.5
+385.69016 669.8
+393.69897 3797.2
+394.20105 919.8
+411.70236 3621.4
+432.81226 547.9
+436.24252 1716.2
+438.55383 2618.4
+438.88681 735.4
+441.72586 875.3
+442.17056 737.9
+448.20486 1635.7
+450.24078 6454.9
+450.74405 2312.1
+451.24359 696.1
+471.22647 2624.3
+471.72952 1594.8
+507.26251 1102.7
+508.79382 847.8
+511.22910 2232.1
+520.24896 896.2
+532.57672 1927.2
+535.74445 955.1
+544.23407 844.5
+544.75171 1262.6
+545.21368 632.1
+549.74420 10115.3
+550.24652 6482.4
+550.74609 2280.6
+553.76636 3165.6
+554.26550 1225.3
+562.24579 10061.4
+563.24762 2462.5
+563.76318 563.0
+566.76874 720.5
+571.78253 2287.9
+572.28247 719.4
+575.26947 3226.3
+575.76721 2347.5
+576.26721 1340.7
+580.78845 923.3
+580.82562 534.2
+581.28613 679.9
+584.27356 19766.2
+584.77448 14401.1
+585.27386 4380.7
+585.77448 1464.8
+591.77032 546.7
+593.27887 177900.8
+593.78009 102748.4
+594.28149 33175.6
+594.78412 6482.1
+606.44745 530.7
+620.29889 713.4
+620.78619 1466.7
+624.19562 621.6
+624.31006 2830.7
+629.29657 25786.7
+629.79791 14492.5
+630.29968 4928.7
+630.39349 843.2
+630.79822 1326.1
+639.32318 6647.2
+640.32971 1860.4
+657.32257 3163.8
+657.83789 836.9
+663.35370 570.6
+664.50574 663.9
+666.81525 1184.9
+667.31848 1521.7
+675.32916 11920.3
+676.33264 3776.0
+676.65234 949.5
+677.34265 827.5
+718.23242 859.3
+726.66882 625.6
+729.79584 765.7
+735.95123 1101.2
+736.27869 845.3
+736.61041 2233.3
+738.35699 1419.5
+756.32758 3130.4
+757.33490 2227.2
+795.69971 1233.7
+810.69189 544.7
+822.39648 9374.4
+823.39954 3879.3
+824.39722 972.4
+853.79199 573.9
+867.40021 3846.5
+868.40076 1537.0
+959.45746 4076.3
+960.45929 2342.6
+982.42395 17079.3
+983.42743 8860.5
+984.43408 2704.8
+1057.44922 937.6
+1198.28613 3499.3
+1292.03137 612.7
+1314.92651 718.4
+1470.28674 629.1
+1496.24426 598.2
+1612.29651 660.0
+1717.21594 1174.7
+1878.42993 1275.0
+1878.95520 2179.9
+1879.55627 19180.9
+1879.87146 3113.2
+1880.64514 1196.4
+1882.30737 589.2
+1907.03833 7446.4
+1918.69543 863.8
+1930.56287 1021.5
+S	1149	1149	1105.0198246
+Z	2	2208.192
+Z	3	3311.784
+308.87323 877.2
+338.96112 629.4
+342.24164 755.5
+350.28232 845.8
+375.07565 539.6
+411.78711 665.2
+431.02975 628.7
+486.87186 591.3
+510.63721 631.5
+514.34961 680.4
+527.33667 614.0
+529.02728 671.2
+532.54010 1845.9
+540.20099 1164.1
+549.26093 3703.4
+599.51184 688.1
+611.23895 1593.4
+640.99109 557.5
+676.62567 1054.2
+686.32446 2101.5
+694.28961 802.8
+712.29468 1160.2
+735.93176 765.7
+743.34113 11971.0
+744.34552 3462.5
+745.35400 897.6
+790.15588 638.1
+795.70184 755.2
+823.31879 1481.4
+824.31195 728.9
+824.40417 1036.0
+824.85992 4572.4
+825.36017 2016.0
+825.86407 837.7
+842.40845 14863.6
+843.41046 5129.1
+844.41644 726.9
+930.36755 633.3
+939.39838 924.5
+939.89630 1707.7
+957.43634 4736.0
+958.43427 1774.4
+959.45355 796.7
+974.91431 1588.1
+975.41125 1619.6
+975.92133 857.2
+1030.43982 1422.8
+1030.93030 780.9
+1057.21643 999.1
+1067.93225 813.8
+1068.46777 901.3
+1076.45374 1173.7
+1076.94446 2193.3
+1077.44019 755.7
+1077.95508 1153.4
+1085.45532 7939.2
+1085.95386 8745.3
+1086.45361 5637.9
+1086.95642 973.8
+1161.38110 640.1
+1198.21643 3450.1
+1233.55334 2437.2
+1234.56018 1245.6
+1330.44312 845.6
+1347.59277 3471.9
+1348.59253 2427.1
+1349.58545 937.0
+1350.49695 680.9
+1364.52185 2488.7
+1448.37939 738.6
+1453.47571 629.3
+1458.61841 829.7
+1476.63940 1767.8
+1577.68286 1729.8
+1578.67688 1165.7
+1639.66541 2052.4
+1640.64709 1360.6
+1648.71594 2337.3
+1649.72961 2216.9
+1657.67151 1404.6
+1658.66626 838.3
+1781.20361 844.7
+1802.01208 696.1
+1877.75134 771.5
+1878.13257 964.0
+1879.01355 2240.0
+1879.49646 19828.0
+1879.98376 1800.4
+1880.83862 970.1
+1907.06177 7364.2
+1926.74866 1142.8
+1930.45081 1044.6
+1942.76123 6412.5
+1943.75952 5733.7
+1944.76672 2223.4
+1960.77368 3152.6
+1961.77539 3311.7
+1962.77686 1482.3
+S	1150	1150	1103.29340793
+Z	3	3306.605
+Z	2	2204.739
+300.36148 550.4
+346.94391 731.7
+350.27856 832.1
+350.61801 579.3
+427.50391 805.7
+487.43268 807.7
+515.91718 564.5
+532.54498 1811.9
+549.26093 1464.0
+662.88507 588.0
+676.65863 971.5
+686.32788 759.4
+697.24036 566.0
+701.81000 630.8
+706.42419 643.5
+738.64606 634.5
+743.34143 5646.3
+744.34821 1205.9
+745.18414 595.8
+795.72089 1122.5
+825.35565 1086.6
+842.40839 5387.5
+843.41016 2476.6
+957.43677 2662.0
+974.91107 919.0
+1047.31226 549.8
+1068.47070 892.5
+1076.94788 1105.1
+1077.44800 1202.7
+1085.45093 1720.3
+1085.95166 1872.5
+1086.45703 1635.1
+1198.22510 3240.0
+1233.53809 1380.6
+1347.58704 2112.0
+1348.58508 1513.2
+1402.96069 716.1
+1469.14478 752.5
+1476.63049 1037.7
+1477.63904 743.5
+1515.15466 607.9
+1556.70300 615.8
+1577.68298 1269.0
+1640.67163 877.4
+1648.73364 883.2
+1649.73157 1057.2
+1774.23987 579.9
+1878.41956 710.1
+1878.80359 624.8
+1879.24573 3649.7
+1879.62463 16606.2
+1880.02441 3941.6
+1880.45593 1934.1
+1907.04443 7581.5
+1918.71741 1007.9
+1930.42407 910.2
+1942.77368 2984.6
+1943.75110 3016.0
+1944.78394 1544.6
+1960.75476 1311.1
+1961.79041 1068.8
+1962.79236 742.9
+S	1152	1152	1879.96899127
+Z	3	5636.632
+Z	2	3758.09
+532.55328 1121.9
+532.60840 1268.1
+546.90991 660.6
+622.99707 717.8
+630.40863 983.6
+652.98486 669.9
+676.63245 984.0
+766.58813 666.7
+795.70349 792.2
+996.28577 657.4
+1057.22742 1090.9
+1198.34180 2391.2
+1525.40405 816.5
+1531.04602 769.3
+1733.13257 712.9
+1739.13574 605.0
+1868.13843 671.3
+1877.69287 622.0
+1879.10815 1471.9
+1879.51367 19471.2
+1879.91370 1683.1
+1907.06116 7511.3
+1918.59546 696.6
+1929.59448 613.2
+S	1153	1153	417.7296621
+Z	4	1666.88735
+103.77460 664.0
+103.82060 561.4
+104.01353 618.3
+106.66354 549.7
+118.52318 577.4
+121.79443 565.8
+121.80307 2428.4
+123.72734 623.4
+133.73935 570.9
+149.43230 528.9
+152.02423 532.9
+179.52458 568.3
+189.54338 534.0
+197.27658 778.2
+198.82745 661.4
+199.20621 869.7
+199.26370 801.9
+199.27605 897.4
+199.30304 3332.6
+199.33148 1005.8
+199.40138 1113.4
+223.76718 621.6
+228.25560 672.7
+230.66112 558.7
+233.56575 718.0
+288.20184 4286.0
+320.75067 592.4
+387.27084 2465.2
+389.60849 687.3
+394.68701 743.2
+406.22586 1057.2
+431.70602 709.6
+444.49902 565.9
+469.90860 1008.8
+476.74933 633.9
+478.40186 585.9
+482.63144 582.7
+514.80310 643.6
+516.31268 628.0
+532.56158 2110.9
+576.29205 989.3
+576.79633 699.9
+577.81519 586.7
+580.36902 693.4
+618.89880 692.6
+630.36304 758.4
+640.81494 5359.2
+641.31628 4011.5
+641.82245 1374.1
+676.66498 735.8
+682.71832 587.9
+771.49060 641.1
+795.68787 656.8
+800.77765 555.0
+811.41846 702.1
+873.04718 576.8
+913.84424 608.5
+942.26135 634.2
+981.40082 646.3
+1137.83862 655.8
+1140.32397 581.2
+1188.06995 690.9
+1198.25183 3411.0
+1347.24133 664.9
+1473.06128 638.5
+1523.03442 640.8
+1644.06348 599.9
+S	1154	1154	566.4681871
+Z	4	2261.84145
+155.29933 568.1
+165.78722 793.8
+168.37376 669.7
+171.64059 587.8
+178.50290 763.7
+185.07397 598.4
+187.47844 627.9
+188.26103 882.6
+188.26833 1148.4
+188.28242 1262.6
+188.29689 1221.5
+188.31284 886.4
+188.37617 657.7
+198.92751 1024.2
+199.21494 980.2
+199.28542 784.7
+199.29344 1148.8
+199.31390 2092.3
+199.32269 1267.1
+199.33705 1087.9
+199.41219 953.8
+205.17557 647.1
+213.55473 511.2
+223.07022 657.3
+230.75955 558.1
+240.09737 2161.1
+246.15553 11525.0
+249.10664 606.0
+258.10745 698.9
+267.17014 568.8
+272.08466 749.0
+305.74170 526.8
+308.86740 659.0
+308.98135 560.3
+311.13458 1637.2
+347.68918 541.9
+348.54346 624.8
+348.79407 653.8
+364.22379 615.9
+370.60989 1008.9
+372.17459 1340.7
+378.32257 650.6
+381.32132 817.5
+384.60745 2284.8
+385.10837 775.1
+385.60352 687.3
+408.37793 740.2
+411.85373 848.9
+412.18564 809.0
+421.70877 4954.1
+422.20959 1883.8
+440.12476 1904.2
+444.19052 801.1
+448.15253 663.9
+449.12854 5210.1
+449.63077 1417.1
+449.86575 1757.2
+450.12698 2129.2
+450.20425 1518.5
+458.13449 1199.3
+479.22131 8475.1
+479.72281 3388.0
+482.61450 702.5
+490.93933 590.7
+497.64233 823.6
+498.19647 1011.7
+498.42422 631.4
+505.15579 1065.0
+506.14999 5182.5
+506.65097 1372.9
+507.14410 1594.8
+515.15436 4131.7
+515.65546 1207.5
+516.15125 1330.7
+526.92285 2095.2
+527.25861 2555.5
+527.59369 1366.2
+532.65710 2282.3
+534.73846 3353.2
+535.23773 1342.6
+539.23309 536.2
+540.61377 699.0
+543.74268 14809.7
+544.24359 6691.3
+544.74506 2043.9
+545.54059 784.7
+546.45331 920.0
+547.20099 920.6
+548.69904 1301.7
+549.19940 1235.8
+549.26099 2220.3
+551.53003 709.7
+552.95636 1580.2
+553.20612 1679.7
+553.45569 967.0
+562.60553 553.8
+588.68915 1031.9
+600.93927 639.6
+606.31738 586.6
+614.13727 859.6
+617.27637 15899.2
+617.77844 8493.4
+618.27856 2261.9
+618.78247 730.8
+635.69537 793.8
+636.19806 1006.9
+639.56763 1542.1
+639.90240 1195.9
+640.23627 1143.4
+645.23181 1726.6
+645.57086 1961.4
+645.90881 929.6
+646.23755 831.3
+653.20337 837.4
+653.71356 636.0
+655.55737 1157.6
+657.24261 1295.3
+660.89594 1417.5
+661.22687 2803.1
+661.56110 1740.8
+661.88940 904.2
+662.91486 1514.9
+663.24329 2125.9
+663.57916 2739.4
+663.91095 2499.2
+665.29517 1043.7
+665.78229 2531.8
+666.22784 1577.4
+666.28571 1794.2
+666.78613 1382.8
+666.89771 2473.8
+667.22943 1939.5
+667.56372 2527.5
+667.88922 853.7
+668.91840 4865.8
+669.25366 6058.9
+669.58453 3695.3
+669.92126 2165.4
+670.25641 961.5
+672.90143 845.6
+673.23230 674.6
+674.29773 19079.3
+674.79816 11558.9
+675.30121 2480.2
+676.65228 1059.8
+685.17010 1728.2
+686.17102 672.8
+701.72015 788.5
+702.23224 800.1
+702.72412 666.5
+710.72479 1118.7
+712.28625 1423.0
+721.35303 4277.6
+721.85620 3236.3
+722.35663 1487.1
+730.30585 3360.2
+730.80579 2858.7
+731.30066 1040.3
+731.90045 873.1
+738.81854 2453.7
+739.32306 1614.4
+739.81818 733.8
+742.02545 656.7
+743.33844 789.1
+768.20996 1985.1
+795.69659 993.5
+841.32776 1418.9
+862.57178 719.6
+880.29846 1399.2
+880.80084 872.5
+881.30188 929.1
+915.26025 950.3
+966.44696 645.8
+988.40826 1108.2
+989.41119 864.6
+1057.28198 626.4
+1079.22644 613.7
+1102.43701 1028.2
+1103.42114 938.1
+1176.20459 673.8
+1198.46948 3437.6
+1220.24939 593.0
+1381.07654 589.5
+1817.57776 664.0
+1850.21216 621.1
+1878.55676 1265.7
+1879.28699 5282.7
+1879.55981 18640.7
+1880.57678 1060.4
+1884.52844 603.8
+1907.07959 7887.7
+S	1156	1156	488.0028246
+Z	3	1460.733
+Z	2	974.158
+121.80386 2211.9
+123.94343 582.5
+129.10194 832.2
+134.64597 627.9
+135.30748 602.4
+144.32013 667.5
+165.78806 693.7
+174.67706 561.0
+177.54315 643.8
+186.12326 3104.5
+187.10747 1079.6
+188.26346 1700.4
+188.28067 1986.8
+188.29247 2443.8
+188.36668 514.1
+188.49899 567.8
+193.62813 541.1
+195.23453 491.1
+198.92686 790.1
+199.10747 1823.6
+199.20615 910.5
+199.27766 841.2
+199.30484 2614.8
+199.32140 1409.0
+199.32977 959.3
+199.33939 544.9
+199.35530 689.6
+199.41911 768.0
+204.13411 15742.5
+205.13617 940.0
+211.64630 619.8
+218.83336 520.5
+223.84734 566.0
+227.10213 1831.8
+228.10696 698.1
+231.14894 18980.2
+232.15215 2515.7
+232.82549 632.9
+233.16475 2098.5
+233.56737 560.3
+244.12949 1221.0
+249.09825 948.2
+259.14407 2835.3
+271.72278 871.4
+276.17029 27063.1
+277.17416 3703.3
+280.17679 593.9
+283.13950 741.5
+285.13461 3207.1
+293.25732 537.3
+303.75546 562.5
+306.16806 1090.3
+308.15546 614.1
+313.04877 652.9
+315.21179 499.4
+319.16071 9973.3
+320.16541 6939.6
+320.66769 1800.0
+334.16263 854.5
+346.15063 827.3
+350.27756 677.0
+364.16119 4994.1
+365.42700 526.5
+375.20294 624.8
+379.70190 6284.1
+380.20477 2548.7
+382.67123 467.4
+382.67789 466.1
+385.18631 3972.0
+385.68893 851.7
+390.70273 801.4
+393.69937 7896.4
+394.20059 2222.2
+411.70313 6597.2
+412.20425 2704.7
+430.19235 1815.2
+432.87848 1572.2
+433.21182 984.3
+436.24451 3404.4
+436.74463 1270.9
+437.25217 970.0
+438.55353 3751.4
+438.88828 2017.9
+441.72888 1519.6
+442.17267 1600.0
+442.22928 686.5
+448.20392 1951.8
+449.20200 625.0
+450.24170 10895.7
+450.74301 4716.4
+451.24658 798.2
+471.22641 6456.8
+471.72900 4059.9
+472.23447 872.8
+482.64136 821.0
+507.26144 1350.2
+507.76251 821.8
+511.22836 4767.9
+512.23309 1109.5
+520.25146 2310.0
+532.57971 2147.4
+535.74854 1939.4
+536.24750 1651.1
+540.73901 2014.9
+541.24426 917.9
+544.23352 2320.3
+544.75378 1977.0
+545.21869 687.8
+545.25726 1616.2
+549.13275 784.8
+549.74487 22474.6
+550.24664 12409.5
+550.74725 4423.7
+551.24475 648.3
+553.76581 6647.7
+554.26605 3646.6
+554.76917 1780.0
+555.76337 1001.4
+556.26544 1034.0
+562.24567 21815.1
+563.24780 5151.9
+571.78406 4966.2
+572.28326 3210.4
+572.78455 755.3
+575.26904 7243.1
+575.76727 4365.4
+576.26685 2070.1
+580.78857 1672.8
+584.27386 45517.6
+584.77460 26372.9
+585.27399 6644.8
+585.77509 1597.4
+591.75323 841.2
+592.52002 1524.4
+593.02252 1189.4
+593.27905 311757.5
+593.33148 1840.3
+593.78027 176702.6
+594.03271 1530.8
+594.28137 58975.6
+594.53955 1613.9
+594.78375 14481.2
+595.04114 579.1
+595.28662 2114.9
+596.32434 1370.4
+619.26831 1532.8
+620.29999 1295.5
+620.78442 3316.4
+621.28564 1221.9
+622.29486 962.5
+624.31158 5604.7
+625.31592 1869.9
+629.29645 44447.4
+629.79810 23882.6
+630.29956 8437.8
+630.38208 748.7
+630.79974 2147.0
+639.32312 13967.8
+640.32562 4226.0
+641.33215 670.2
+644.85663 533.4
+657.32458 6517.3
+657.79456 1707.1
+657.83972 1441.3
+658.29468 814.5
+666.81116 1427.2
+667.31689 3632.2
+675.32892 24973.9
+676.33185 8800.4
+676.62994 852.4
+677.33246 1857.6
+735.95721 634.6
+736.29028 787.3
+738.35413 2827.3
+756.32892 8756.7
+757.33325 2828.4
+780.40265 1452.7
+786.38867 1001.3
+795.71143 832.2
+804.38611 1024.6
+805.39832 724.5
+807.63586 570.0
+822.39777 22545.1
+823.40100 8389.4
+824.40216 2837.7
+867.39868 6505.2
+868.40228 2078.6
+878.64960 548.2
+885.40576 913.6
+895.35352 1018.7
+896.36108 573.3
+899.48157 1594.2
+941.45313 1261.4
+959.45569 9492.3
+960.46014 4473.9
+961.46002 1998.3
+964.41742 804.1
+965.40033 1351.6
+982.42444 33112.5
+983.42731 16670.6
+984.43097 4365.0
+985.43494 1204.3
+1021.11139 826.4
+1039.44763 1572.7
+1048.69263 612.4
+1057.45569 2027.5
+1079.20581 778.4
+1088.51245 800.1
+1098.47229 1593.3
+1107.31921 669.5
+1129.49976 693.8
+1153.86267 604.4
+1198.29590 2921.8
+1221.77478 595.0
+1278.17444 621.7
+1634.43420 829.5
+1717.79858 611.4
+1876.04773 1035.9
+1878.87402 1149.8
+1879.20557 3381.8
+1879.50940 19104.9
+1880.21423 884.5
+1907.03760 7482.7
+S	1157	1157	488.669991267
+Z	2	975.492
+Z	3	1462.735
+120.65790 893.8
+121.80308 2428.3
+127.50356 607.8
+133.14371 1048.8
+161.49370 584.7
+162.15933 593.9
+166.40450 588.6
+166.41408 588.3
+169.48918 671.4
+174.09158 579.0
+182.77277 599.9
+186.12335 1678.6
+187.10773 673.3
+188.16763 711.3
+188.24028 846.5
+188.25179 980.6
+188.26927 1974.3
+188.28217 1516.6
+188.29936 1722.9
+188.31770 1196.3
+188.34000 611.8
+188.35283 545.7
+190.52100 646.2
+198.87291 716.5
+198.92973 1040.2
+199.20410 767.9
+199.21582 818.4
+199.31503 3286.9
+199.32886 1639.8
+199.40707 613.1
+199.41554 1061.8
+204.13409 8820.7
+205.13724 997.0
+231.14871 9553.0
+232.15244 1286.4
+232.32925 603.2
+233.16544 659.8
+233.55972 670.7
+243.30411 597.6
+252.31761 688.8
+259.14316 1458.5
+276.17014 15180.8
+277.17438 2125.2
+280.16666 740.6
+298.03152 540.9
+304.67426 615.7
+306.16699 1103.7
+319.16119 3735.4
+320.16556 3614.2
+320.66718 1019.0
+350.27493 604.3
+364.16071 2127.5
+379.70120 2403.2
+380.20416 1471.0
+385.18613 1786.0
+387.59509 626.4
+393.70001 4510.2
+394.19998 1138.5
+402.69476 718.6
+411.70291 4343.5
+412.20273 843.9
+436.24356 1104.1
+438.46280 644.7
+438.55322 1711.0
+438.89023 869.9
+442.17197 621.6
+448.20071 1257.9
+450.24060 7205.3
+450.74237 2807.3
+465.01215 590.3
+471.22614 2046.6
+471.37814 574.0
+471.72729 1188.8
+482.63086 660.2
+495.34308 551.2
+505.07388 596.3
+507.25797 739.3
+511.22870 2074.9
+520.25006 796.2
+532.57074 2021.0
+549.12689 729.0
+549.74426 6823.5
+550.24670 4567.9
+550.74530 1781.9
+551.91473 588.6
+553.76727 1991.5
+554.26880 1226.1
+562.24561 11231.3
+563.24799 2817.9
+571.78259 2108.9
+572.28864 1085.7
+575.26886 2845.4
+575.76477 1866.9
+576.27026 775.2
+580.79053 874.6
+584.27350 19749.3
+584.77435 11634.7
+585.27502 5203.0
+591.75763 825.8
+592.26514 541.6
+593.27875 154463.7
+593.78003 92723.1
+594.03479 871.7
+594.28119 31477.8
+594.54150 765.6
+594.78345 8472.0
+595.28625 962.3
+619.26538 675.2
+620.79169 916.1
+624.31323 2077.3
+629.29626 27513.6
+629.79755 14210.9
+630.29816 4819.2
+630.37555 885.5
+630.80090 747.9
+639.32263 5644.5
+640.32867 1602.9
+648.46271 549.7
+651.39026 514.3
+651.60242 619.6
+657.32715 2666.0
+666.81366 1302.2
+667.31775 1766.1
+675.32898 9939.2
+676.33093 3368.2
+732.15875 755.5
+736.27466 639.0
+756.32648 2833.1
+757.33087 1561.6
+780.41187 698.3
+786.38257 745.2
+795.72107 965.4
+822.39777 8671.2
+823.40015 3814.9
+867.40210 1979.2
+885.41638 794.4
+936.69629 707.7
+959.46027 3354.0
+960.45502 1429.0
+982.42432 14269.0
+983.42621 6966.2
+984.42926 1753.8
+1039.45593 674.9
+1057.23816 673.8
+1081.63135 719.3
+1105.98584 604.8
+1123.93201 614.2
+1125.87622 618.9
+1140.45471 553.4
+1166.36584 559.4
+1176.91345 682.4
+1195.06030 595.0
+1198.27930 3352.7
+1522.64954 636.6
+1525.31848 883.2
+1666.98230 670.1
+1742.04346 677.1
+1776.90588 909.8
+1878.74756 886.5
+1879.15369 3950.2
+1879.52234 18978.8
+1879.92859 3307.8
+1880.29224 1787.3
+1882.87366 566.9
+1883.07813 565.2
+1907.02441 7696.9
+1930.53381 1366.8
+1960.36292 712.6
+S	1158	1158	1105.0195746
+Z	3	3311.784
+Z	2	2208.191
+294.41501 557.4
+308.86774 652.8
+350.28223 765.7
+363.79861 705.5
+395.99554 743.5
+442.63614 620.7
+467.72195 586.8
+484.25259 574.3
+508.06354 807.2
+514.95209 586.0
+532.52313 714.0
+532.55603 1640.5
+542.40778 638.3
+608.18402 630.0
+613.41254 573.2
+642.31616 528.9
+665.25836 590.7
+676.63538 1249.2
+795.71545 1209.9
+812.44202 602.8
+812.52557 574.2
+922.95044 824.2
+1057.25708 761.9
+1140.49207 987.9
+1198.24561 2833.1
+1226.68005 701.2
+1525.27368 805.3
+1879.03040 1300.7
+1879.52722 20031.6
+1880.00659 1117.3
+1907.06055 7578.6
+1930.41003 877.4
+S	1160	1160	488.002407933
+Z	2	974.157
+Z	3	1460.732
+120.65996 520.3
+121.79226 771.8
+121.80199 2056.8
+121.80913 786.3
+130.70810 558.7
+134.14157 517.7
+136.40816 557.7
+141.84518 582.7
+146.83249 556.1
+152.24689 534.6
+154.17970 531.0
+155.09561 532.8
+163.90602 580.8
+171.63506 730.5
+176.76663 594.9
+181.38742 577.8
+182.77361 716.7
+186.12311 2454.9
+187.06255 586.3
+187.10692 739.3
+188.24316 641.7
+188.25249 1023.7
+188.26974 2047.8
+188.29376 2159.8
+188.30324 2009.4
+188.32245 1341.3
+188.34514 601.6
+188.36195 496.1
+192.40044 542.4
+198.92912 901.7
+199.10655 1707.7
+199.22115 702.0
+199.26556 630.4
+199.27451 553.6
+199.28947 1567.3
+199.29742 1227.9
+199.30392 966.3
+199.31424 1967.4
+199.33159 1434.0
+199.36551 665.3
+204.13396 17926.8
+205.13751 1590.2
+212.11778 805.5
+227.10251 1478.4
+231.14882 17321.1
+231.37746 610.4
+232.15266 2052.3
+233.16417 1806.2
+244.12962 694.2
+255.28661 554.9
+259.14407 2094.5
+267.11539 515.5
+271.69861 836.1
+274.64505 577.3
+276.17038 27868.3
+277.17413 3389.6
+283.94492 511.6
+285.13412 3177.3
+292.00098 560.7
+306.17010 1277.6
+306.74908 580.7
+308.40344 480.1
+308.41464 531.8
+311.65198 971.0
+312.15207 635.5
+319.16089 9536.6
+320.16586 6345.4
+320.66660 2158.7
+330.12003 574.0
+334.16360 942.3
+346.15143 1746.7
+348.86823 587.9
+364.16098 5028.3
+365.16672 1301.2
+368.20822 989.5
+379.70218 8344.4
+380.20471 2667.9
+385.18524 2995.6
+385.68933 1311.5
+393.69977 7628.0
+394.20050 2614.5
+400.44577 741.2
+400.46713 494.5
+408.21997 548.7
+409.87537 565.5
+411.70236 6904.3
+412.20316 2638.6
+414.04575 577.6
+423.08945 524.4
+424.10571 528.3
+427.52109 746.8
+427.72897 746.2
+430.19214 1780.4
+431.19879 612.8
+433.21234 1395.5
+436.24384 2049.2
+436.74554 1051.5
+438.55386 3444.0
+438.88882 1762.5
+441.72787 875.4
+442.17181 1903.2
+448.20169 2426.7
+450.24112 11280.3
+450.74289 4246.7
+451.24203 958.1
+454.36597 556.8
+471.22620 6830.6
+471.72943 2808.3
+472.21249 1251.6
+507.26151 1774.8
+511.22827 4941.3
+512.23248 906.4
+517.92285 562.2
+520.25018 2596.9
+526.22717 741.1
+532.58557 1891.5
+535.74780 1745.3
+536.24847 1457.3
+539.31995 677.9
+540.74005 2097.7
+541.24469 1411.7
+544.23608 1774.9
+544.75446 2450.0
+545.22113 1445.3
+545.25610 1161.0
+549.74500 22094.3
+550.24719 11378.8
+550.74683 3807.6
+553.76550 7324.2
+554.26654 3827.4
+554.76917 1036.1
+555.24194 673.4
+555.76337 826.1
+562.24567 21562.6
+563.24921 4873.3
+564.24817 886.5
+571.78473 4929.0
+572.28595 2920.8
+572.78766 709.5
+575.26880 7020.1
+575.76923 5031.1
+576.26807 1470.6
+579.90857 744.3
+580.79022 2370.9
+581.28809 1164.0
+584.27393 45595.3
+584.77441 27542.6
+585.27472 9114.0
+585.77661 2588.1
+586.27338 801.8
+587.52057 737.2
+591.74982 1250.7
+592.02271 758.2
+592.24744 992.1
+592.52826 1670.2
+593.04004 766.8
+593.27905 310342.8
+593.78033 177274.1
+594.03577 2442.4
+594.28149 56397.2
+594.53540 2133.9
+594.78168 13330.2
+594.83026 987.4
+595.28387 2135.7
+595.83453 637.2
+619.27087 1942.5
+620.29358 1983.2
+620.78479 2119.0
+621.28406 1830.2
+624.31311 5969.2
+625.31622 1611.0
+629.29657 47518.8
+629.79828 24819.6
+630.29919 10083.9
+630.80188 1560.3
+630.97717 623.0
+631.31152 707.4
+639.32324 12175.9
+640.32263 3263.7
+641.29669 774.1
+648.32996 802.4
+650.24481 638.8
+657.32355 5419.4
+657.78778 828.0
+657.83582 2411.6
+666.81116 2083.8
+667.31604 3178.0
+668.32166 1319.5
+675.32898 25151.9
+676.33148 7276.5
+676.63611 720.7
+677.33417 1030.3
+715.13135 577.3
+738.35339 2453.6
+739.35925 1015.1
+756.32990 9481.3
+757.33246 3754.5
+780.40363 1683.0
+786.38690 1110.7
+795.70630 858.9
+804.39063 2074.7
+805.39349 1155.8
+822.39789 22626.3
+823.40112 8964.6
+824.40424 2402.3
+867.39832 6097.6
+868.40131 2779.2
+869.40387 688.4
+885.41174 1380.4
+895.35400 1015.2
+899.47870 875.2
+941.45105 1205.6
+959.45697 11034.5
+960.46033 5642.9
+961.46332 1448.0
+964.41895 809.4
+965.40417 1095.4
+982.42450 34144.3
+983.42725 17204.1
+984.43170 4588.2
+985.43549 1332.3
+1039.44409 1904.3
+1057.24280 766.5
+1057.45215 835.9
+1058.45752 845.1
+1098.48206 1412.0
+1099.48767 791.2
+1149.61169 595.4
+1198.30945 3105.4
+1328.59351 781.4
+1384.10327 598.9
+1473.09033 607.8
+1525.34448 890.1
+1540.79309 602.8
+1876.88635 689.0
+1878.12915 682.7
+1878.54114 828.6
+1878.82922 631.8
+1879.01697 1147.8
+1879.52612 19179.9
+1880.14832 1186.1
+1880.82117 1184.5
+1896.29895 705.7
+1906.97498 7660.3
+1930.49866 1086.5
+S	1161	1161	488.6698246
+Z	3	1462.734
+Z	2	975.492
+121.80162 2383.7
+126.42797 516.8
+133.15605 1223.0
+133.96855 548.0
+135.16180 558.2
+143.81175 534.4
+149.26193 537.7
+156.56287 562.6
+160.57468 646.7
+165.78670 657.8
+178.31749 581.9
+178.32550 469.0
+182.77696 594.7
+198.92931 1071.0
+199.21320 1022.3
+199.22922 738.3
+199.29750 1971.9
+199.31247 1738.4
+199.38899 617.2
+199.39995 649.2
+199.62289 676.0
+204.13409 2492.9
+206.82114 582.4
+209.73796 572.7
+214.51462 496.5
+230.01135 515.3
+231.14854 2801.0
+237.42438 533.8
+255.28743 704.4
+274.21710 548.1
+276.16977 5207.0
+282.30762 571.1
+285.03989 800.2
+292.44440 526.7
+301.51852 557.0
+319.16016 922.7
+320.16388 1228.1
+325.06400 546.7
+328.74399 573.5
+342.26636 626.0
+346.57507 547.7
+350.26230 842.2
+363.86990 586.3
+364.16299 1009.1
+379.70282 994.5
+381.35690 666.8
+385.03082 539.5
+393.70004 1554.1
+411.69962 1008.1
+445.24271 689.4
+449.24716 602.6
+450.24176 2939.0
+450.74356 825.7
+469.37634 692.6
+482.64832 636.6
+483.75497 512.1
+532.61670 2175.6
+549.74426 2691.6
+550.24707 1227.9
+553.76794 888.0
+562.24536 3717.7
+563.24878 781.9
+571.78534 892.9
+572.28131 876.1
+584.27319 5285.2
+584.77448 4739.5
+585.26886 876.7
+593.27850 47527.2
+593.78015 30346.0
+594.28070 8768.6
+594.78369 2290.0
+620.78198 803.2
+629.29645 9511.2
+629.79803 5872.0
+630.29559 1232.7
+630.39813 996.9
+639.32239 2156.8
+640.32666 847.8
+652.99518 713.0
+658.87335 569.9
+675.32831 3552.8
+676.33344 1262.7
+676.64459 983.6
+704.61847 605.9
+756.32831 928.9
+795.70245 814.1
+806.31989 703.1
+822.39569 2267.8
+823.40088 1251.0
+827.87433 533.0
+837.79297 614.0
+854.69080 561.6
+867.38849 722.3
+907.16565 537.4
+959.46124 884.5
+968.52161 607.5
+982.42114 4279.8
+983.42798 2409.8
+1198.38159 3455.9
+1615.29773 614.1
+1777.63684 868.7
+1876.90271 671.6
+1877.92810 936.8
+1878.37646 911.2
+1879.16675 2696.1
+1879.54333 19985.0
+1880.00183 1993.0
+1880.58667 1203.2
+1881.13818 520.6
+1901.27661 611.6
+1906.59058 702.3
+1906.94800 7321.3
+1930.56616 1153.7
+S	1162	1162	417.7350746
+Z	4	1666.909
+100.31757 27877.9
+116.24328 25476.1
+121.80125 105688.7
+124.60352 23037.1
+141.83258 24310.6
+147.08342 31257.8
+155.33208 22711.7
+157.59364 28871.0
+163.74339 27843.6
+165.78519 28468.2
+173.42747 23287.1
+196.29266 24556.4
+197.68524 29593.6
+198.92667 29660.0
+199.05852 23736.7
+199.22081 29753.0
+199.28802 27933.3
+199.29790 124531.4
+199.30919 65429.6
+199.31868 79743.6
+199.34235 37969.7
+199.39622 37543.0
+199.41768 37991.2
+204.49217 24823.6
+214.04770 26583.4
+214.50114 35930.3
+223.07184 27207.5
+228.82677 26412.7
+230.58934 31112.3
+248.05721 28435.5
+251.64182 28409.7
+280.16483 34474.0
+288.20215 132737.0
+297.44397 21989.0
+299.73535 27699.2
+313.96976 27411.6
+342.25076 26009.0
+366.86237 29683.8
+387.27039 73600.7
+394.15860 25557.5
+476.15009 28539.7
+491.43784 28723.1
+493.66425 32485.5
+507.29703 25686.8
+532.60083 97801.5
+549.11603 29007.8
+576.29382 47869.8
+576.79144 64252.1
+640.81549 201374.1
+641.31641 139789.2
+641.81946 66813.1
+650.90643 34696.0
+676.62915 53912.5
+686.37787 26145.0
+715.28436 31597.9
+795.70099 33757.7
+805.71552 24908.6
+817.70087 28950.3
+848.79962 26845.1
+951.62366 26411.4
+959.56335 25106.5
+1019.71906 24522.2
+1033.87354 30441.8
+1057.23462 42613.9
+1074.46753 28588.5
+1099.04639 25602.9
+1137.22253 28665.7
+1137.33521 23539.6
+1155.75806 28581.8
+1161.95947 22657.2
+1187.84290 27829.9
+1198.34229 129575.2
+1211.89929 25405.6
+1230.92188 22902.1
+1286.00867 29728.2
+1361.31726 26989.9
+1418.13977 25196.4
+1488.94995 33773.3
+1510.22290 30600.2
+1525.30103 34412.7
+S	1164	1164	1879.94940793
+Z	3	5636.573
+Z	2	3758.051
+514.00940 541.8
+516.78625 660.9
+532.57922 2051.4
+546.15466 643.8
+575.80585 565.8
+620.64087 604.3
+666.73297 601.6
+676.62250 1017.8
+699.46606 663.3
+731.10675 733.0
+795.71173 1062.0
+809.73682 612.7
+892.12677 712.8
+1198.30005 3171.7
+1270.74805 598.3
+1488.86523 682.8
+1742.65808 875.2
+1770.90076 670.4
+1878.47253 923.6
+1878.93579 1234.9
+1879.49414 19288.3
+1879.78308 2808.4
+1880.12769 1618.0
+1883.85254 633.8
+1906.73413 1041.0
+1907.06982 7244.6
+1908.38940 709.7
+1930.54639 983.6
+S	1165	1165	1907.27299127
+Z	3	5718.544
+Z	2	3812.698
+510.04395 591.5
+532.61316 1797.7
+549.24219 590.0
+676.62994 826.4
+731.01965 695.1
+795.70319 808.7
+890.71045 601.6
+1019.72827 844.3
+1057.23230 763.7
+1193.18506 638.9
+1198.38184 3414.1
+1202.72205 580.6
+1202.82031 667.5
+1661.07239 717.6
+1715.83203 699.3
+1774.68469 597.8
+1795.32593 614.6
+1871.21582 788.7
+1878.54480 742.6
+1879.09485 2040.4
+1879.51050 19067.1
+1879.90527 1613.5
+1906.73877 739.9
+1907.05444 7519.1
+1907.41943 782.3
+1930.33569 838.0
+1997.48254 818.8
+S	1166	1166	1198.83324127
+Z	2	2395.819
+Z	3	3593.224
+319.91382 724.3
+325.52640 582.3
+342.22012 783.8
+350.29303 755.2
+413.72046 582.5
+427.48685 918.7
+482.66653 733.3
+492.59714 663.2
+532.61792 1291.6
+676.63507 1074.4
+730.25946 625.2
+795.69006 940.0
+879.65833 612.5
+1186.56165 751.9
+1198.22241 1039.5
+1198.33752 2648.2
+1198.61304 721.2
+1221.03564 573.9
+1226.53296 682.3
+1344.69006 689.6
+1525.21936 928.0
+1606.91821 747.0
+1665.41736 592.3
+1777.63623 910.9
+1877.46924 822.1
+1878.85559 1559.4
+1879.52002 20287.0
+1880.19702 1058.2
+1881.03918 687.7
+1907.11389 7239.7
+1930.34351 890.3
+1970.38525 657.7
+S	1168	1168	487.917157933
+Z	3	1460.728
+121.80013 1893.5
+127.57877 544.5
+128.89789 528.6
+128.92821 609.8
+133.14359 1014.0
+134.93692 576.2
+136.50804 580.6
+136.56442 649.7
+150.57448 697.5
+165.78476 629.3
+186.12340 1433.6
+188.24956 1226.2
+188.27397 2332.4
+188.29457 2235.8
+188.31833 1408.0
+197.67737 608.2
+198.92729 822.2
+199.21275 891.1
+199.23543 881.3
+199.28368 813.9
+199.29652 1249.8
+199.31161 2119.7
+199.33339 917.1
+199.35460 807.0
+199.37767 634.9
+199.40327 892.3
+199.41040 631.6
+204.13394 4624.9
+214.67995 668.6
+231.14873 5834.0
+239.53021 652.2
+271.04501 596.2
+276.16998 9537.3
+277.17422 805.2
+281.20291 614.1
+297.07330 659.2
+298.68854 552.7
+313.41351 596.2
+319.15985 3101.8
+319.19727 596.3
+320.16498 2149.7
+334.46249 574.3
+335.41269 548.4
+335.52435 521.7
+344.54794 658.4
+355.51401 577.7
+364.16025 1514.4
+379.70102 1542.0
+380.20468 875.8
+393.70013 2418.8
+411.70236 1985.2
+428.96185 598.2
+438.55383 1273.6
+450.24188 3329.5
+450.74161 1431.6
+471.22504 1351.1
+471.72620 798.6
+501.60565 646.2
+507.25259 779.9
+511.23227 886.8
+520.25256 792.9
+525.19446 571.0
+532.57300 2451.3
+540.11951 734.7
+549.74542 5405.2
+550.24597 2025.1
+550.74780 772.6
+553.76520 1407.2
+562.24445 5608.2
+563.24530 1213.6
+568.71826 719.7
+571.78802 867.0
+575.26605 1575.2
+575.77478 771.7
+584.27307 11385.8
+584.77515 6166.7
+585.27399 2319.3
+585.78271 663.4
+591.75549 669.7
+591.88354 666.3
+593.27850 89808.0
+593.77985 52969.6
+594.28107 16620.0
+594.78455 3603.3
+624.00861 595.6
+624.31268 1171.3
+629.29590 13022.5
+629.79785 8854.6
+630.30066 2731.3
+635.16699 621.9
+639.32068 3528.2
+640.32495 1279.7
+657.32178 1416.5
+667.31390 1288.1
+675.32843 5946.7
+676.33173 1598.8
+756.33160 1673.8
+765.31268 607.1
+803.67841 572.6
+822.39886 4606.8
+823.39825 1744.3
+867.39746 1432.5
+868.38995 702.9
+959.45361 2446.4
+960.45380 997.9
+961.54559 620.3
+977.39752 592.8
+982.42426 7731.4
+983.42749 4707.7
+984.42664 1945.8
+1078.37659 588.0
+1198.28284 3031.5
+1525.29834 796.9
+1649.60632 599.3
+1777.59558 834.2
+1878.59277 968.7
+1879.11597 1057.2
+1879.54871 19942.4
+1907.08875 7144.9
+1923.20642 671.0
+S	1169	1169	488.584157933
+Z	3	1462.729
+121.80165 2737.5
+124.52708 617.7
+128.56880 698.0
+129.10172 882.8
+131.84763 517.6
+134.68889 537.2
+138.09871 608.2
+141.79298 562.3
+145.84811 652.5
+147.91272 556.0
+153.30132 614.3
+165.72485 532.4
+165.78462 766.5
+173.40581 578.8
+173.41113 706.1
+173.93587 623.7
+175.03690 531.4
+181.81824 538.9
+186.12357 4221.5
+187.10722 1657.0
+188.25470 547.6
+190.66902 538.6
+197.68069 492.4
+197.68788 575.1
+198.92578 1039.8
+199.10754 3010.6
+199.23727 872.1
+199.29366 1944.3
+199.30681 2757.4
+199.31874 1511.1
+199.33299 975.4
+199.40417 894.2
+204.13428 28596.1
+205.13707 2013.2
+209.09186 1388.0
+212.11798 1572.4
+214.11783 682.9
+227.10271 4416.8
+228.10588 743.7
+228.65623 677.3
+231.14909 31611.4
+232.15254 4707.2
+233.16486 4666.2
+234.16888 909.3
+244.12965 1148.7
+248.13135 644.6
+249.09889 1506.8
+257.14023 1771.3
+259.14398 5506.9
+260.14645 926.5
+269.14197 563.5
+271.80005 598.0
+276.17056 49684.3
+277.09305 1381.1
+277.17410 8041.7
+277.54739 568.8
+280.73367 656.0
+285.13446 5491.8
+291.14383 527.9
+297.65457 556.2
+301.15073 2631.5
+302.13425 670.6
+306.16876 3025.0
+306.66916 813.7
+311.65213 1282.9
+319.16095 18970.5
+320.16571 13147.5
+320.66763 3381.3
+327.15137 609.4
+332.86472 607.8
+334.16296 1256.4
+342.25687 652.8
+346.15054 3574.0
+357.18982 747.8
+359.11893 761.3
+364.16129 11538.9
+365.16550 1230.3
+368.20792 1571.0
+371.18799 1194.9
+372.83734 640.3
+373.04510 698.1
+379.70245 12112.8
+380.20444 6159.0
+380.70575 1301.8
+381.34155 1094.5
+383.19089 840.5
+385.18649 6541.0
+385.68799 2594.1
+389.41418 566.4
+392.02435 610.7
+393.69983 11510.3
+394.20175 4677.3
+394.70337 1167.6
+395.85593 746.1
+402.70038 695.4
+411.70297 8951.9
+412.20428 5402.8
+412.70367 805.2
+427.52054 670.3
+430.19281 2623.7
+431.19336 931.2
+432.55008 755.4
+432.87796 2047.4
+433.21149 1468.0
+436.24481 4231.4
+436.74704 2375.4
+437.24832 983.5
+438.55402 5118.5
+438.88757 4056.0
+439.22568 930.3
+439.55392 638.0
+441.72787 2159.6
+442.17252 3686.3
+442.23056 767.2
+448.20383 4120.9
+449.20648 685.4
+450.24185 15352.4
+450.74359 7732.7
+451.24506 1886.6
+470.23923 644.2
+471.22672 11126.4
+471.72910 6280.5
+472.22440 1886.8
+491.64819 718.7
+507.26337 2937.2
+507.76694 1763.5
+508.26563 797.5
+510.25134 636.0
+511.22955 8273.6
+512.23248 2052.7
+520.25128 3521.3
+521.25439 1030.1
+526.22565 803.9
+527.21338 1033.3
+529.23474 773.1
+532.55505 1768.3
+535.74695 3537.0
+536.24951 2142.9
+536.74713 1061.7
+540.74017 3031.6
+541.24213 2197.7
+544.23523 3578.7
+544.75562 3907.5
+544.93573 497.5
+545.21796 2936.7
+545.26074 1706.3
+545.75793 1006.7
+546.22888 685.8
+547.75531 745.9
+549.12640 723.3
+549.25574 658.5
+549.74518 43400.9
+550.24707 23006.8
+550.74854 7734.2
+551.25110 2386.1
+553.76611 11811.9
+554.26752 8314.4
+554.76733 1624.3
+555.76367 2048.2
+556.26813 1202.9
+562.24615 38739.6
+562.77686 799.1
+563.24939 8691.7
+564.25458 1345.3
+566.26056 1709.9
+566.76392 1059.9
+567.25800 1075.9
+571.78455 8311.9
+572.28632 4982.9
+572.78632 2571.5
+575.26886 12207.0
+575.76855 8428.6
+576.27094 3055.1
+576.76532 1132.3
+580.78839 2239.2
+581.29285 1022.2
+583.78540 732.8
+584.27448 75413.2
+584.77466 46836.5
+585.27551 19100.3
+585.77728 3594.5
+587.53680 662.5
+591.75635 2634.3
+591.91962 978.6
+592.26453 1414.7
+592.52795 1788.2
+592.59033 971.7
+592.78967 4165.5
+593.02563 1987.7
+593.27954 500499.2
+593.34387 2018.7
+593.37018 1025.7
+593.38739 889.1
+593.52466 1612.8
+593.69965 649.4
+593.78070 315990.5
+593.84692 1171.1
+593.97107 570.2
+594.03485 2513.9
+594.28180 117463.9
+594.50397 557.1
+594.64514 1053.6
+594.78333 30363.7
+595.05438 673.0
+595.28394 7125.7
+595.47327 663.9
+595.78784 1261.0
+596.31921 1873.3
+606.29889 1182.4
+611.77832 666.7
+615.29718 1192.4
+615.80011 845.5
+619.26984 3989.5
+620.29657 2303.5
+620.78595 4075.7
+621.28491 3629.2
+621.66852 661.3
+622.29413 1965.6
+624.31305 12477.5
+625.31598 3948.8
+626.58679 601.1
+629.29700 76427.6
+629.79840 46853.8
+630.29974 21338.4
+630.37927 713.4
+630.80109 5031.8
+631.30054 865.0
+639.32343 20311.3
+640.32684 8159.5
+641.30103 1721.8
+642.31165 709.0
+648.32306 1279.1
+648.82764 1024.1
+652.96570 1172.5
+657.32428 12283.7
+657.78955 1284.1
+657.83734 3491.6
+658.29388 1989.9
+658.34283 1450.6
+658.80304 881.6
+659.31091 964.8
+662.81384 920.3
+666.42090 653.5
+666.81250 3278.0
+667.31885 6370.7
+667.80670 1087.2
+668.31976 2420.9
+674.42444 633.4
+675.32971 47870.2
+676.33252 14001.8
+677.33557 2392.7
+738.35553 5169.4
+739.36115 2472.4
+756.33044 15232.7
+757.33282 7312.4
+758.33917 1499.3
+780.40594 3321.6
+781.40717 1696.3
+782.42181 663.7
+786.39294 2045.7
+787.39606 1056.0
+795.70221 1036.8
+804.38898 4321.2
+805.39301 1865.4
+813.35870 943.0
+822.39795 38878.8
+823.40125 15703.7
+824.40387 4732.1
+849.38708 1195.7
+867.39966 10846.3
+868.40057 6417.4
+869.39777 1219.4
+870.65961 663.9
+885.41107 3155.4
+886.41589 1684.0
+895.35779 1722.6
+899.47736 2755.5
+900.47858 1008.5
+903.39697 755.9
+941.44525 2429.5
+942.45007 1424.0
+959.45770 20092.9
+960.46094 8835.9
+961.45911 2809.8
+964.41052 1963.2
+965.40485 2694.4
+966.40375 1373.2
+982.31934 704.7
+982.42511 63749.5
+983.42761 32195.4
+984.43152 11187.9
+985.43732 2181.3
+1039.44434 3160.6
+1040.44812 1579.1
+1057.45398 2641.9
+1058.45496 1580.6
+1069.45007 1074.6
+1086.69556 578.4
+1098.48291 2469.8
+1099.48633 1045.1
+1110.51697 891.4
+1131.52271 560.4
+1198.24146 3396.0
+1352.39917 547.4
+1363.87817 560.4
+1385.84973 599.8
+1452.42346 599.0
+1505.67798 642.0
+1517.32166 562.5
+1525.35339 945.5
+1715.60767 617.4
+1735.60571 668.3
+1777.50293 1086.0
+1876.47827 777.0
+1876.96851 884.1
+1879.06445 1091.8
+1879.27600 3065.7
+1879.55371 19738.3
+1880.00110 1120.4
+1880.77722 865.3
+1882.77380 666.2
+1907.05127 7960.4
+1931.58923 806.5
+S	1170	1170	417.7342096
+Z	4	1666.90554
+101.88254 567.8
+110.13036 511.9
+120.65099 564.6
+121.80238 1893.4
+121.80617 1139.5
+122.05565 589.2
+122.90067 637.0
+124.16692 706.6
+134.42950 571.6
+144.67142 590.4
+164.51717 626.2
+169.47346 594.6
+175.11852 5600.1
+194.13887 1805.4
+198.92670 813.5
+199.20587 894.5
+199.23286 731.3
+199.30397 2971.6
+199.32520 683.1
+199.40282 668.4
+204.76402 681.6
+233.16414 3429.4
+261.16110 592.7
+270.19052 848.2
+271.17548 1156.6
+276.17322 603.2
+288.20251 74175.9
+289.20648 8397.7
+290.20880 827.3
+293.23654 659.4
+313.72186 601.1
+324.19165 1383.2
+341.14590 753.6
+360.85226 917.7
+361.18634 903.1
+370.70712 10624.4
+371.20932 6038.2
+371.71085 1025.6
+375.20090 6195.3
+375.53491 4744.9
+375.86917 1554.3
+384.53204 15355.1
+384.86609 9738.6
+385.20105 2170.1
+387.27036 40828.4
+388.27444 5878.8
+388.53143 1032.1
+389.32498 630.7
+390.71262 12048.5
+390.96338 12616.6
+391.21402 6259.0
+391.46399 1944.5
+392.22876 1479.3
+392.73062 973.8
+395.21426 4321.8
+395.46863 1996.5
+406.22586 8162.7
+406.72678 850.6
+427.49481 620.3
+427.54434 2052.6
+427.89612 2729.2
+428.22873 1736.6
+433.89789 1890.2
+439.23041 5415.1
+439.56470 5499.3
+439.90024 3067.3
+440.23419 943.4
+445.23441 4689.1
+445.56824 3692.7
+445.90170 1632.7
+451.23737 4386.3
+451.57065 2184.0
+451.90378 1096.3
+452.78134 564.8
+454.90125 584.2
+457.57584 7433.0
+457.91061 4846.2
+458.24612 1105.8
+460.56818 5298.9
+460.90280 2343.0
+461.23633 1554.6
+463.57999 3071.6
+463.91287 1539.6
+469.58350 2258.9
+469.91840 829.2
+471.92865 682.8
+476.25394 2001.6
+476.75919 1719.8
+483.26587 691.3
+485.93530 554.2
+495.27335 1433.0
+495.60199 1997.9
+495.94061 1190.6
+498.30225 3184.2
+501.27576 715.2
+502.75952 836.7
+507.61331 791.4
+509.40985 658.6
+511.77304 3019.2
+512.27277 1774.7
+516.31226 8298.2
+517.31647 1392.4
+532.55573 1879.1
+540.77545 8064.1
+541.27698 4044.8
+541.77948 1498.5
+549.08966 866.0
+576.29425 37436.0
+576.79584 25812.3
+577.29742 7211.2
+577.80127 1217.4
+596.28857 1257.4
+599.28314 1384.2
+599.78406 995.5
+605.29669 5996.0
+605.79846 3810.2
+606.30115 1660.4
+609.34265 651.0
+611.30109 648.5
+631.80975 11365.9
+632.31140 5568.7
+632.81165 2851.0
+633.31342 924.2
+639.10376 755.5
+640.81512 104108.0
+641.31653 67508.0
+641.67181 743.9
+641.81818 26000.5
+642.31818 5634.4
+666.35645 1395.9
+676.65814 868.0
+681.34906 1179.0
+690.34918 4999.1
+690.73053 860.1
+690.84998 3831.6
+691.35242 1700.6
+723.37537 2748.7
+724.39343 729.0
+790.30859 670.7
+796.48517 589.6
+833.38159 665.4
+876.80792 549.4
+917.15021 590.0
+984.87708 784.7
+1007.81946 642.9
+1019.72131 742.9
+1198.24463 3345.0
+1202.99695 732.5
+1319.14624 635.1
+1352.90686 611.9
+1471.53540 712.6
+S	1172	1172	1907.47140793
+Z	2	3813.095
+Z	3	5719.139
+532.63367 1781.7
+560.82465 672.5
+614.10846 642.9
+676.64362 1212.6
+698.88849 726.1
+709.98517 660.8
+731.11292 754.3
+783.99536 648.4
+884.46576 748.1
+1019.76117 776.7
+1037.81958 628.8
+1057.25903 768.0
+1162.22925 605.5
+1198.42517 2782.8
+1247.13477 646.8
+1267.89880 629.3
+1478.31580 841.8
+1570.38818 714.6
+1637.31750 628.5
+1737.98486 644.5
+1851.81787 742.2
+1865.30396 601.8
+1878.97656 1208.3
+1879.54724 20063.4
+1880.10876 1232.5
+1881.68665 591.5
+1907.15356 6942.7
+1918.37817 651.8
+1918.65698 705.5
+1930.58264 900.8
+S	1174	1174	417.7328971
+Z	4	1666.90029
+101.32452 646.3
+108.37573 559.4
+113.33651 597.5
+120.36029 547.4
+120.48106 496.7
+121.80279 2629.5
+123.16111 569.0
+126.69645 525.8
+129.04070 559.4
+164.39540 610.7
+165.78674 839.9
+165.95412 593.9
+175.11852 8693.1
+188.85458 699.9
+192.82239 508.7
+199.21201 1109.9
+199.22960 644.5
+199.29099 738.4
+199.30908 3556.7
+199.40738 1130.9
+199.66995 615.6
+213.11967 659.8
+214.51805 743.8
+233.16434 4101.3
+241.08217 804.6
+261.16055 1342.4
+270.19101 825.3
+271.17636 1967.9
+280.18381 720.7
+281.68774 533.7
+284.61771 544.3
+288.18570 996.2
+288.20248 105562.8
+289.20627 12574.5
+289.87466 622.7
+290.20929 940.3
+309.35110 575.2
+341.14517 1383.7
+351.52213 917.7
+356.70929 1090.7
+360.85297 1643.6
+361.18976 847.4
+361.85974 630.4
+369.37390 494.6
+370.70746 19150.6
+371.20911 9516.0
+371.71078 1529.0
+375.20050 11824.0
+375.53458 6520.1
+375.86993 1796.8
+376.40289 592.7
+377.84689 516.1
+384.53189 23371.6
+384.86627 12388.2
+385.20081 4652.9
+385.53607 1115.6
+387.27036 58109.1
+388.27396 10385.3
+388.53076 1214.6
+388.86676 1079.6
+389.27634 1357.0
+390.71249 20337.5
+390.96307 19466.9
+391.21368 6842.8
+391.46576 2203.6
+392.22818 3266.4
+392.72815 1104.5
+395.21555 4246.6
+395.46649 3283.2
+395.71603 1095.5
+397.21399 753.8
+397.86377 1963.0
+399.72043 737.5
+403.86465 761.3
+406.22729 621.2
+427.54633 6088.8
+427.87579 1762.1
+427.89822 2189.6
+428.22742 2512.3
+433.89734 3832.1
+434.22971 1657.6
+434.56808 675.9
+439.23004 10396.0
+439.56415 7217.3
+439.89880 3650.1
+440.23346 1300.4
+445.23358 7988.9
+445.56763 5735.6
+445.90189 2127.5
+446.23538 809.9
+447.73883 676.9
+448.56836 595.3
+451.23550 4341.4
+451.57126 3348.9
+451.90692 1301.1
+452.23853 814.4
+454.89807 894.8
+457.57593 9659.6
+457.91037 5987.6
+458.24417 2980.1
+458.58023 700.7
+459.92288 566.7
+460.56891 8159.0
+460.90350 4970.8
+461.23480 1528.1
+463.57993 2747.3
+463.91534 2106.5
+464.24667 910.3
+466.21695 954.2
+469.58139 2140.8
+469.91397 1737.7
+471.59189 861.2
+471.91959 854.3
+476.25558 3789.4
+476.75558 946.1
+482.58585 490.7
+483.25888 1026.3
+495.27060 3568.0
+495.60449 2567.0
+495.94061 695.8
+496.27512 642.5
+498.30219 3914.3
+499.30493 1161.4
+502.76077 1505.0
+503.26031 985.5
+506.72397 560.3
+511.77283 6824.9
+512.27264 3464.3
+516.31226 11945.7
+517.31537 2542.3
+531.76965 1055.5
+532.63275 2190.7
+540.77588 12064.5
+541.27777 7787.7
+541.77917 2842.9
+543.76563 972.5
+567.28290 989.6
+576.29413 58568.7
+576.79565 35633.9
+577.29675 12665.2
+577.79883 2467.8
+596.29285 1265.9
+599.28345 2946.6
+599.78625 1021.7
+605.29730 10806.0
+605.79834 6397.9
+606.30090 2732.8
+608.28564 1370.8
+609.32568 762.8
+621.32404 642.6
+631.80951 14982.4
+632.19977 622.8
+632.31097 9738.3
+632.81348 2821.6
+639.10626 879.4
+640.81500 145246.3
+641.31641 94624.1
+641.81787 37456.0
+642.31903 9379.4
+642.53094 707.2
+642.82202 2546.8
+654.82220 805.1
+666.35547 2319.9
+672.34082 1338.3
+676.65320 1063.9
+679.12842 639.4
+681.34222 2766.8
+681.84399 1640.7
+687.24353 527.8
+690.34979 8467.7
+690.85187 4767.5
+691.35492 1855.7
+723.37640 3234.2
+724.38043 1057.0
+730.95905 599.2
+847.74426 805.8
+850.90961 609.5
+882.59387 573.2
+890.49481 579.8
+929.12372 621.0
+976.52502 646.8
+1198.41199 3593.0
+1309.48474 753.7
+1653.00256 647.9
+S	1175	1175	418.2345746
+Z	4	1668.907
+110.78623 511.6
+113.45741 649.6
+116.83459 506.6
+121.80144 2422.4
+121.81369 765.4
+126.90262 577.6
+133.15729 1183.6
+136.12833 590.7
+142.95480 609.4
+145.54129 635.7
+149.39690 616.0
+156.80399 565.4
+159.15071 479.7
+171.63866 759.3
+175.11861 5877.3
+177.50343 749.1
+192.08476 635.5
+194.13863 1349.4
+199.21527 807.2
+199.28568 782.0
+199.30202 1593.1
+199.31149 2210.9
+199.34416 883.1
+199.35957 623.5
+199.38161 823.7
+199.41643 1109.0
+219.32249 537.0
+233.16422 3023.9
+261.15973 845.7
+270.19098 943.0
+271.17490 874.6
+288.20233 76098.3
+288.72021 541.4
+289.20630 8951.7
+322.51462 803.4
+324.19250 1027.9
+324.69449 623.1
+336.39468 584.8
+342.26730 758.0
+350.27899 878.4
+356.71033 1196.5
+360.85287 1088.9
+361.18796 944.2
+365.96326 687.5
+370.70761 6630.9
+371.20871 5104.4
+371.70978 1259.6
+375.20047 7526.5
+375.53448 3118.0
+384.53195 16100.1
+384.86624 8438.6
+385.20078 3850.1
+387.27020 38528.3
+388.27417 7020.2
+390.71259 11265.4
+390.96332 12412.8
+391.21338 5524.8
+391.46414 1773.1
+391.71463 794.6
+392.22873 995.9
+395.21619 3682.8
+395.46603 3137.6
+395.71802 1555.0
+397.86472 748.7
+406.22534 9008.7
+406.72772 2834.3
+427.54568 2833.0
+427.89551 1580.1
+428.23224 905.2
+433.89694 2681.4
+434.23154 1269.2
+434.56503 750.5
+439.22995 6536.4
+439.56439 6499.8
+439.89865 2344.8
+445.23340 6599.3
+445.56717 3699.5
+445.90036 1539.8
+446.23358 699.2
+447.74295 857.5
+451.23752 3890.6
+451.57092 3268.0
+451.90768 743.2
+455.23645 728.2
+457.57645 4883.3
+457.91049 4357.7
+458.24411 2070.3
+460.56808 4666.5
+460.90396 3964.9
+461.23715 2261.6
+463.57990 3750.2
+463.91156 1497.8
+464.24863 1103.6
+469.58276 1299.1
+469.87927 859.0
+469.91895 753.7
+476.25592 1918.6
+476.74579 768.1
+489.56534 705.6
+495.27112 2262.0
+495.60577 1885.6
+498.30240 3445.9
+511.77258 3598.7
+512.27374 2128.4
+516.31256 7327.6
+517.31476 1379.9
+532.62421 2247.1
+540.77515 6638.2
+541.27618 4251.5
+567.28101 767.9
+576.29401 38638.8
+576.79535 26030.7
+577.29626 8199.5
+577.80255 1521.5
+596.29102 962.5
+599.28333 1810.1
+605.29602 5900.1
+605.79645 2946.9
+606.30377 1247.7
+630.39740 817.0
+631.80963 8941.7
+632.31195 5222.4
+632.81195 3165.4
+640.81482 103078.9
+641.31616 72382.3
+641.66510 778.1
+641.81769 29670.3
+642.31909 6798.1
+642.82117 1058.1
+648.12195 712.5
+666.35614 1133.7
+673.91797 564.6
+676.62543 1252.3
+681.34424 1015.1
+690.34857 4941.7
+690.84937 3322.3
+691.35077 1235.2
+723.37573 2003.9
+731.10815 732.9
+795.69916 679.9
+899.30664 622.4
+1019.73425 701.4
+1053.24829 558.3
+1057.23035 909.4
+1188.29712 958.8
+1198.39587 3389.2
+1292.12915 578.0
+1586.18262 723.6
+S	1176	1176	730.736407933
+Z	3	2188.934
+Z	2	1459.625
+191.69031 611.0
+194.11975 586.6
+198.92638 689.8
+199.22021 834.7
+199.29582 1227.7
+199.30933 1793.8
+199.31827 2211.4
+199.33298 1023.1
+199.36583 520.7
+199.41530 856.8
+199.42709 504.3
+233.56981 585.8
+238.15590 513.6
+262.68857 686.5
+278.15567 669.7
+324.42310 554.9
+330.65582 590.2
+342.23358 604.4
+343.84760 596.0
+347.77719 618.5
+350.28186 1007.5
+362.89413 604.1
+373.42017 677.9
+440.12085 634.1
+478.26181 617.2
+512.70068 600.7
+532.63867 1904.1
+548.93628 587.9
+549.09369 786.9
+555.98816 627.7
+558.83380 623.6
+593.28046 675.5
+611.16284 588.7
+630.33606 620.5
+639.16528 628.1
+676.65308 895.9
+756.31195 646.3
+770.91718 633.8
+795.69104 1239.5
+804.26624 669.8
+836.47174 714.0
+873.90533 715.6
+963.78705 610.4
+979.73297 634.5
+1012.78912 621.1
+1185.54395 890.7
+1186.54578 1036.9
+1198.43848 3460.2
+1525.23230 969.0
+1545.26855 714.4
+1719.23962 632.1
+1752.53943 620.9
+1769.63867 596.8
+1778.36475 744.2
+1806.15576 625.0
+1876.50269 790.8
+1876.95325 543.6
+1879.02759 2005.6
+1879.56775 18369.7
+1880.18835 1206.0
+1880.45825 813.3
+1881.29785 694.1
+1882.77087 778.8
+1906.30505 874.0
+1906.64294 687.9
+1907.04773 7487.9
+S	1178	1178	417.7330496
+Z	4	1666.9009
+101.37131 595.5
+101.85674 572.6
+102.56949 582.3
+114.33581 522.5
+121.05425 664.1
+121.80144 1977.3
+121.94585 527.1
+123.23883 586.6
+125.75748 579.6
+127.12853 642.6
+131.49110 549.0
+134.42007 573.2
+134.91100 633.5
+146.98201 624.4
+156.11972 538.1
+157.59836 630.2
+170.26764 531.5
+175.11787 932.1
+176.70718 625.5
+198.92693 1072.5
+199.21675 633.6
+199.26889 711.9
+199.28067 1059.3
+199.30342 2290.2
+199.31476 1622.2
+199.32428 907.0
+199.39973 1015.1
+199.41293 629.6
+215.90251 568.6
+256.63919 601.5
+280.18826 511.8
+288.20239 9555.6
+289.20593 821.0
+299.69897 539.1
+317.65695 566.2
+331.81250 548.4
+351.63513 590.1
+354.33041 553.9
+370.70810 639.0
+381.36575 644.2
+384.53180 1728.7
+384.86505 814.3
+387.27020 4254.8
+411.24823 620.0
+429.44992 667.7
+430.21082 613.5
+456.06891 553.2
+482.66174 687.1
+486.20068 562.8
+516.31122 843.4
+532.56873 1875.1
+576.29297 3807.9
+576.79779 1694.4
+613.06244 599.2
+640.81476 10402.7
+641.31628 6720.9
+641.81732 2482.4
+642.31854 893.5
+661.71863 663.4
+676.63202 1162.3
+731.12512 795.2
+741.63049 559.2
+785.34705 790.6
+795.70752 932.7
+939.59039 712.4
+970.68280 632.1
+977.14441 553.8
+1020.85400 621.2
+1057.21741 924.9
+1198.27319 2896.8
+1206.78748 724.0
+1218.49377 561.7
+1393.32483 698.0
+1452.38647 635.8
+1525.44812 830.1
+1539.70825 605.1
+1610.10437 685.6
+S	1179	1179	418.2345746
+Z	4	1668.907
+107.37233 629.2
+115.86627 631.2
+120.07962 636.3
+120.22971 572.6
+121.80212 2142.6
+135.81337 554.8
+136.25844 570.9
+161.78391 530.6
+161.99228 632.6
+175.11848 8357.8
+183.52420 616.0
+194.13866 1579.8
+198.66525 565.6
+198.92497 953.4
+199.20154 1427.2
+199.28119 1193.2
+199.29903 3057.3
+199.30756 1410.3
+199.32764 1277.5
+199.39818 1087.6
+233.16414 3826.1
+239.25053 607.8
+246.96088 519.9
+253.02078 636.6
+258.78241 547.9
+270.19226 762.8
+271.17554 1717.8
+274.72855 660.1
+275.58823 599.1
+288.20248 100332.4
+288.46066 887.5
+289.20621 12803.6
+324.18954 1077.6
+341.14615 617.7
+349.77689 674.6
+350.27850 807.7
+351.52026 708.0
+360.85410 1738.4
+361.18539 1591.8
+363.18356 603.4
+370.70709 12463.9
+371.20886 8781.8
+371.70932 905.1
+375.20062 8277.4
+375.53445 5346.3
+375.86780 1086.0
+384.53198 23133.6
+384.86658 14393.5
+385.20010 3752.9
+387.27045 53490.9
+388.27390 8645.5
+388.53146 1517.6
+389.27454 1193.4
+390.71231 18086.2
+390.96323 20215.3
+391.21378 7121.8
+391.46503 2624.1
+392.22882 1073.5
+392.72867 1225.2
+395.21619 3431.4
+395.46588 2621.6
+395.71506 1370.0
+395.96722 585.7
+397.22510 613.6
+397.86285 1959.5
+403.14545 650.6
+406.22522 6386.4
+427.54681 3847.6
+427.87509 1629.5
+427.89960 1923.6
+428.22955 2057.3
+428.41165 567.8
+430.69595 649.4
+433.89658 2439.1
+434.23181 2255.8
+436.71500 536.5
+439.23007 9419.2
+439.56461 8349.1
+439.89841 2795.6
+440.23428 1415.0
+445.23367 8655.6
+445.56793 4456.9
+445.90311 2494.7
+446.23541 792.7
+451.23788 4546.3
+451.57065 3473.4
+451.90781 2057.5
+454.56555 1095.1
+457.57614 8673.1
+457.91122 5253.3
+458.24509 2319.3
+458.57968 692.2
+460.56888 5271.5
+460.90280 4014.1
+461.23676 2732.4
+461.57153 1443.2
+463.58005 4134.0
+463.91483 2769.2
+464.24847 1109.3
+466.21567 947.9
+469.58197 1346.6
+469.91650 1148.7
+470.25378 1197.4
+476.25403 2680.8
+476.75742 1739.1
+482.64557 726.3
+483.26492 976.9
+483.29764 573.9
+495.27011 2345.1
+495.60529 2510.3
+495.94147 914.5
+498.30151 4033.4
+499.30725 821.0
+501.60956 769.2
+502.76120 1014.5
+511.77298 5075.9
+512.27289 2191.9
+516.31232 11888.3
+517.31500 2388.2
+531.76208 599.6
+532.56049 1987.2
+540.77533 8428.2
+541.27667 6021.5
+541.78003 1427.2
+544.76154 573.4
+562.29150 804.0
+567.28717 937.2
+576.29413 56244.5
+576.79523 34832.8
+577.29669 10968.8
+577.79749 1989.1
+596.29095 1085.0
+599.28241 1949.6
+599.78308 1071.7
+600.28339 597.5
+605.29559 9080.0
+605.79773 4842.5
+606.29871 1179.2
+608.28265 904.4
+631.80969 12585.8
+632.20398 586.8
+632.31177 7625.2
+632.81427 2988.3
+633.30884 575.5
+640.81506 146556.1
+641.31647 103915.4
+641.81775 44881.5
+642.31940 9519.5
+642.82080 2418.8
+643.03571 650.7
+666.35425 2282.0
+672.83612 633.1
+681.34131 1466.4
+681.84692 1093.4
+690.35046 6929.9
+690.84973 6723.6
+691.35461 1970.8
+691.84766 820.6
+723.37787 3389.4
+724.37860 1036.9
+757.33191 649.6
+783.39545 608.8
+811.44763 664.1
+835.25616 753.9
+898.88361 641.5
+1198.25073 3341.0
+1489.54602 743.4
+1525.38489 881.9
+1533.58862 593.2
+1566.48804 575.3
+1612.48633 597.2
+S	1180	1180	730.7368246
+Z	2	1459.626
+Z	3	2188.935
+191.75229 607.3
+193.41435 534.9
+198.92712 655.7
+199.20891 656.2
+199.22951 763.4
+199.26166 858.5
+199.30659 1703.2
+199.31602 1552.2
+199.32637 1436.9
+199.40450 640.8
+199.42528 525.7
+200.83125 599.6
+200.89606 582.3
+204.72650 507.9
+205.28461 661.7
+215.96585 547.4
+226.37363 575.8
+230.39014 621.2
+255.29584 611.3
+271.88223 777.2
+292.13742 604.1
+347.85187 596.4
+372.31058 608.6
+411.14636 578.7
+427.54089 615.8
+454.80212 729.3
+458.77319 570.7
+474.56290 837.0
+487.54761 672.0
+490.26041 666.6
+532.54700 1820.0
+549.16937 820.1
+568.05658 679.2
+573.51410 666.8
+586.32251 611.0
+676.63312 1303.6
+691.54327 700.1
+694.85474 639.9
+727.19562 724.6
+735.92377 654.3
+764.61261 695.1
+837.03723 643.6
+875.13953 613.1
+875.74390 581.4
+876.53857 748.2
+1019.74146 711.8
+1026.24500 553.9
+1059.49268 736.8
+1079.27722 767.4
+1175.48169 635.1
+1198.22168 3374.6
+1260.36389 560.9
+1324.22009 593.2
+1336.80591 614.1
+1385.56946 707.9
+1525.48755 940.1
+1647.67761 655.3
+1767.40894 718.1
+1777.15698 838.7
+1821.04150 588.5
+1878.36694 1366.5
+1879.51746 19809.6
+1880.21741 905.2
+1880.66174 1601.3
+1907.06677 7479.0
+1930.63831 919.8
+S	1182	1182	1879.89140793
+Z	3	5636.399
+Z	2	3757.935
+527.81311 603.9
+532.55170 2255.6
+616.71344 512.5
+630.39056 795.3
+668.54828 731.6
+669.83191 692.8
+676.63501 1004.6
+696.37762 541.5
+708.49554 671.4
+1019.66278 695.7
+1057.22974 1012.0
+1198.23218 3505.9
+1213.42188 720.9
+1229.93079 720.1
+1416.82324 543.9
+1740.29980 832.0
+1777.01270 930.7
+1876.33374 628.0
+1876.58154 733.2
+1876.96667 725.9
+1878.04248 843.0
+1879.21484 1789.5
+1879.52515 19800.8
+1879.88159 1925.2
+1881.06433 688.7
+1882.06726 621.5
+1906.98889 7420.7
+1930.58130 999.2
+1950.48047 674.3
+S	1183	1183	1907.45899127
+Z	3	5719.102
+Z	2	3813.07
+532.53223 1646.6
+537.40918 748.5
+549.12860 697.3
+614.22052 567.0
+630.38281 707.3
+676.62341 1127.1
+795.70770 930.4
+830.58636 688.3
+878.88013 660.3
+879.44800 635.7
+880.56372 699.4
+899.96515 628.2
+1005.41162 540.3
+1015.77148 660.2
+1020.88599 774.9
+1028.67542 647.0
+1198.18896 2897.3
+1483.25305 789.9
+1525.35791 735.3
+1606.30261 584.9
+1878.82556 558.5
+1878.93042 557.5
+1879.49219 20009.1
+1879.78528 1988.1
+1880.21094 879.1
+1880.65210 758.2
+1882.42908 660.8
+1907.03479 7516.3
+1907.33350 528.3
+S	1184	1184	1198.61440793
+Z	2	2395.381
+Z	3	3592.568
+345.25464 670.9
+365.54416 578.5
+427.52710 861.4
+455.89493 752.5
+532.55963 1986.4
+562.94061 684.4
+673.52118 649.3
+676.64325 800.3
+697.93488 610.6
+731.10754 737.7
+795.70007 1020.7
+811.59552 608.7
+883.47925 646.7
+1057.23596 862.1
+1179.01501 573.0
+1198.25415 2627.5
+1244.44019 614.7
+1260.81213 712.5
+1484.39807 620.0
+1776.95313 981.8
+1877.40210 666.6
+1879.54028 19743.5
+1879.82983 2033.7
+1880.93909 679.6
+1881.71411 857.4
+1907.04980 7184.5
+1907.34277 685.8
+1930.54517 1055.7
+S	1186	1186	417.7322571
+Z	4	1666.89773
+103.09570 603.2
+105.38075 577.0
+108.52753 554.4
+111.84764 542.8
+120.65456 815.9
+120.92982 579.6
+121.79925 2613.9
+122.76382 551.8
+125.01851 543.6
+125.03830 568.9
+128.56358 631.5
+133.14233 918.3
+137.06738 647.3
+137.27885 591.9
+157.58858 628.7
+158.31293 553.5
+165.78165 672.4
+168.62270 604.8
+168.78914 592.4
+169.48022 630.5
+175.38052 579.4
+178.19037 631.9
+189.99043 583.9
+198.92773 1103.2
+199.21054 1105.5
+199.26807 748.0
+199.29788 962.1
+199.30861 3073.3
+199.32231 739.5
+199.33568 659.4
+199.40691 1410.7
+201.79071 585.1
+236.81117 619.0
+289.69040 579.6
+329.11588 522.0
+330.69083 660.2
+338.87189 590.9
+341.57501 604.6
+366.02927 571.7
+373.56216 630.9
+384.07422 703.0
+423.53979 570.6
+427.51450 732.3
+428.77039 574.1
+482.60825 611.9
+532.56921 1892.5
+549.08502 597.4
+557.13135 529.6
+565.35364 621.1
+596.70123 532.8
+606.91473 650.8
+676.63519 1377.6
+683.25983 724.4
+767.34711 608.7
+795.69928 1174.8
+944.74463 685.6
+1021.07709 624.5
+1057.23315 594.6
+1065.32715 625.6
+1198.26648 3390.2
+1435.14050 625.5
+1607.71118 603.2
+S	1187	1187	418.2338246
+Z	4	1668.904
+110.56721 6938.6
+121.03512 5875.4
+121.79990 23606.7
+135.34935 8259.1
+137.29022 5964.3
+143.09781 6227.7
+146.91949 7053.8
+150.31038 6061.6
+157.60214 7090.2
+160.10332 7011.8
+165.78343 8460.4
+182.78119 7347.7
+192.52771 8741.6
+193.92755 7031.7
+198.92729 11250.4
+199.21240 11412.5
+199.23782 8616.2
+199.29152 9890.5
+199.31087 30695.7
+199.33591 10848.5
+199.40758 13230.4
+202.04749 6614.0
+203.16917 7102.8
+206.98213 6612.4
+214.51440 7479.6
+231.01044 6198.4
+234.10184 6094.6
+244.01183 5643.6
+255.28989 7967.4
+271.56003 6707.0
+271.57068 5481.4
+279.12094 5710.0
+291.00327 10666.8
+296.61710 6675.5
+308.90027 8410.6
+379.21729 6218.0
+410.08939 6307.2
+411.83319 6600.0
+427.55078 7166.3
+448.36932 6857.9
+469.87341 9332.7
+476.76816 6411.8
+530.77844 7030.6
+532.54749 20898.2
+568.32190 5874.7
+676.62524 10283.8
+718.12335 6678.6
+784.06787 6655.0
+807.86505 8462.5
+816.41919 9901.7
+821.51318 7915.3
+906.93524 7151.4
+1074.08496 6946.4
+1150.23120 7884.1
+1198.22839 38412.4
+1223.46130 6779.6
+1263.22644 7915.0
+1297.48499 6255.6
+1433.03748 6947.6
+1517.77588 6132.3
+1608.97461 7586.9
+S	1188	1188	730.7348246
+Z	3	2188.929
+Z	2	1459.622
+194.54050 585.9
+199.04292 587.0
+199.22144 621.4
+199.28854 920.1
+199.30954 2357.2
+199.32935 1089.3
+199.36353 552.6
+199.40613 829.9
+211.53470 600.2
+222.10886 572.5
+226.42154 643.1
+228.51643 578.4
+247.03059 584.8
+254.81137 681.8
+271.26807 559.8
+271.73563 593.9
+276.17001 2315.9
+292.73438 538.4
+319.15936 973.9
+342.26877 584.3
+346.65576 648.9
+390.40179 551.1
+400.56876 530.6
+409.06409 542.6
+412.59619 624.3
+437.15656 615.7
+453.66574 606.4
+463.79443 701.5
+480.23163 1574.8
+485.77176 611.9
+532.59747 2095.9
+534.92059 619.6
+549.74548 1664.5
+560.12817 760.3
+562.24530 1059.5
+584.27496 2303.4
+584.77643 1448.0
+593.27802 9111.6
+593.77979 5362.9
+630.40265 844.4
+639.32269 1135.1
+641.94739 702.2
+644.94025 938.3
+657.32892 1124.1
+675.32751 1014.3
+676.62671 1221.4
+712.85236 891.3
+713.34430 730.1
+714.24243 679.6
+731.13171 681.2
+822.39966 2104.8
+823.39508 1346.4
+843.34985 652.0
+901.35352 722.5
+901.87964 847.8
+920.20880 636.0
+930.39050 2038.4
+930.89508 1951.7
+931.39667 1029.0
+941.44562 883.2
+959.45538 3524.8
+960.44635 1147.3
+966.40057 955.5
+982.42242 3683.1
+983.42749 1445.1
+1142.55298 2027.3
+1143.57568 1092.1
+1153.56848 648.7
+1167.53906 3818.8
+1168.53979 2909.1
+1185.54956 18309.0
+1186.55334 9421.4
+1187.56006 1907.5
+1198.34155 3387.9
+1214.50586 626.2
+1257.58350 6822.9
+1258.58923 3320.5
+1349.14734 630.8
+1422.79321 622.2
+1727.59802 592.6
+1878.91833 2216.3
+1879.48962 19746.5
+1880.08179 1711.5
+1907.10034 7168.8
+1927.29944 596.9
+1930.58960 764.1
+1941.02991 667.3
+S	1190	1190	417.7325621
+Z	4	1666.89895
+103.85843 580.7
+105.69472 605.0
+107.65209 697.7
+111.09723 583.2
+120.08369 634.3
+120.74960 589.9
+121.80093 2687.2
+129.11731 596.7
+141.84921 566.3
+151.25964 588.6
+155.73337 725.8
+161.35800 662.3
+163.19168 541.5
+169.83234 639.3
+171.63762 667.4
+174.15952 874.6
+175.11833 5473.0
+182.76955 742.0
+189.35371 588.8
+189.44481 543.0
+194.14027 727.7
+196.26906 650.9
+198.93019 790.4
+199.19734 767.0
+199.21205 1215.1
+199.29587 2201.2
+199.31053 1928.7
+199.39517 981.3
+199.40996 802.6
+233.16412 3366.9
+258.84268 468.1
+270.34784 519.8
+270.74646 579.7
+271.17587 1598.6
+288.20233 65108.2
+289.20630 7856.9
+299.40784 535.7
+326.56500 832.0
+333.10214 618.8
+342.56436 582.5
+351.52060 743.0
+360.85272 1098.6
+370.70737 9780.3
+371.20831 4338.1
+371.70987 1318.9
+375.20081 6393.7
+375.53415 4012.8
+384.53174 15410.3
+384.86594 6886.8
+385.19974 3017.4
+387.27026 37011.2
+388.27423 6823.2
+390.71231 12002.1
+390.96298 11806.1
+391.21399 5880.4
+391.46426 2195.9
+392.22913 1547.1
+395.21561 2952.7
+395.46686 1936.5
+395.71539 759.8
+397.86371 1545.0
+406.22546 5796.7
+406.73105 729.3
+427.54398 3066.8
+427.89520 2677.1
+428.23190 1454.9
+433.89606 1529.4
+434.23148 1861.8
+439.22968 4952.4
+439.56470 4815.0
+439.89822 2370.2
+440.23392 1548.0
+445.23322 4719.6
+445.56830 3465.7
+445.90274 1108.2
+451.23727 2086.3
+451.56989 1948.6
+454.56271 1158.1
+457.21103 677.8
+457.57596 5906.7
+457.91171 4006.8
+458.24460 2352.4
+458.57401 860.1
+460.56848 4467.5
+460.90350 3100.0
+461.23813 760.7
+463.20746 570.3
+463.57986 2198.9
+463.91406 1872.8
+464.24759 1114.3
+469.58344 1386.6
+469.92108 1240.2
+470.25137 888.7
+476.25443 2106.0
+476.75897 1657.6
+483.26074 857.7
+486.45041 532.3
+495.26907 1974.9
+495.60712 1682.8
+498.30133 2320.6
+499.30188 664.9
+511.77289 3729.8
+512.27435 1563.8
+516.31256 6103.5
+517.31537 1245.4
+532.59125 2049.3
+540.77545 7528.8
+541.27600 4627.9
+541.77710 2128.9
+558.28119 703.0
+576.29382 37865.2
+576.79547 21210.6
+577.29694 7645.0
+577.80029 1626.8
+579.13904 563.8
+591.79358 555.6
+596.29370 892.7
+597.31573 565.4
+599.28729 1701.5
+599.78607 1005.2
+605.29639 6011.3
+605.79810 4284.4
+606.29694 1099.8
+617.28918 961.4
+631.80920 8722.8
+632.31122 6284.2
+632.80951 2120.1
+639.12744 637.2
+640.81476 94162.5
+641.31622 65566.8
+641.81763 26305.2
+642.15918 642.2
+642.31946 5525.6
+650.23047 716.6
+660.32977 602.1
+666.35242 1550.5
+676.64874 1419.1
+690.34766 6837.5
+690.84937 3179.9
+691.35101 1855.2
+723.37823 1488.4
+724.37341 1039.6
+731.10431 673.3
+795.70215 748.5
+923.09827 559.7
+1057.25684 946.4
+1139.87207 650.2
+1174.93860 763.5
+1198.32129 3328.9
+1247.98828 516.9
+1401.53235 541.6
+1448.59827 642.1
+S	1191	1191	418.2340746
+Z	4	1668.905
+120.65625 543.5
+121.58041 529.7
+121.79868 2389.5
+128.56458 695.7
+141.85033 757.2
+152.28091 590.4
+157.14502 548.4
+157.75238 659.4
+162.88062 599.5
+175.11844 5248.1
+176.36055 562.9
+181.63980 549.8
+192.18489 481.4
+194.13867 1522.0
+198.92584 885.9
+199.21674 818.3
+199.27612 587.6
+199.28589 1000.9
+199.29814 1039.2
+199.30696 2071.8
+199.31250 1751.1
+199.33582 664.3
+199.40424 964.8
+199.41409 636.3
+218.67442 546.8
+227.75925 531.1
+233.16449 3789.0
+288.20251 79382.3
+289.20651 9362.1
+290.20816 639.9
+296.95053 595.1
+299.66901 694.3
+308.87439 827.2
+322.51083 584.1
+324.19070 970.9
+336.58795 551.4
+341.14624 716.2
+342.24420 924.1
+349.13409 616.0
+356.01526 639.0
+356.71066 1065.3
+360.85416 936.4
+370.70749 8326.3
+371.20966 3474.6
+371.70767 1007.8
+375.20026 6516.3
+375.53494 3896.1
+375.86868 2106.2
+384.53192 19058.6
+384.86667 11571.4
+385.19962 4044.4
+385.53503 1139.4
+387.27042 42377.6
+388.27438 7243.6
+388.53101 598.0
+388.86707 734.8
+390.71259 18117.6
+390.96329 14283.5
+391.21393 5143.3
+391.46359 1384.6
+391.71634 673.2
+392.22873 1946.9
+395.21429 4353.5
+395.26303 677.8
+395.46655 2646.2
+395.71524 1454.3
+400.21436 768.9
+403.86749 673.6
+406.22559 7756.3
+406.72720 2294.3
+417.96671 542.6
+419.74847 603.5
+427.50784 682.4
+427.54465 1542.0
+427.89566 1894.3
+428.22906 1204.8
+428.56320 714.9
+433.89694 2403.6
+434.23163 1002.7
+434.56979 686.3
+439.23013 7688.1
+439.56467 5149.1
+439.89868 3128.0
+445.23358 6462.4
+445.56805 4011.7
+445.90094 1504.3
+451.23663 4419.3
+451.57117 3257.1
+457.57608 5590.0
+457.91061 4305.4
+458.24609 2174.4
+460.56857 5158.3
+460.90292 4035.0
+461.23721 2223.1
+461.56958 626.9
+463.58005 3114.0
+463.91241 2454.1
+464.24954 1042.8
+469.58255 1593.5
+469.91626 2238.7
+470.59088 741.6
+472.98666 668.4
+476.14783 646.2
+476.25485 2753.8
+476.76352 1387.7
+495.27002 1690.7
+495.60571 2134.4
+498.30170 2968.8
+501.27417 751.1
+502.76047 1132.9
+511.77347 4165.0
+512.27673 2399.6
+516.31244 9072.7
+517.31689 2230.1
+532.55884 1882.5
+540.77594 7398.9
+541.27673 3440.1
+541.77838 1527.3
+576.29407 40099.1
+576.79565 27129.5
+577.29712 9542.4
+577.79504 1538.1
+599.28497 1244.0
+599.78369 1033.1
+605.29584 6033.8
+605.79749 4522.4
+630.35083 858.7
+631.80975 8923.3
+632.31165 7310.6
+632.81335 2671.9
+634.55957 611.8
+640.81506 115344.9
+641.31641 83157.6
+641.66083 784.3
+641.81781 29843.4
+642.31891 8558.1
+642.52539 865.4
+642.81641 929.5
+655.32227 539.3
+666.35187 1725.0
+667.35687 665.1
+672.34406 702.3
+673.40466 629.5
+676.64142 1575.7
+681.34766 1631.7
+681.84332 1465.2
+690.34979 5249.9
+690.85150 4814.8
+691.35291 2497.9
+691.85834 575.9
+714.52679 573.6
+723.37567 1751.7
+795.69592 881.0
+805.07184 556.8
+906.02301 632.8
+940.44421 627.3
+1019.72461 726.2
+1047.52344 708.8
+1127.88452 617.9
+1198.25452 2807.1
+1404.55664 639.4
+1465.57458 589.4
+1525.27112 1054.9
+1638.84460 635.0
+S	1192	1192	1879.91799127
+Z	2	3757.988
+Z	3	5636.479
+508.38004 582.7
+532.60522 2040.7
+676.62286 927.7
+731.16986 626.6
+795.69318 803.0
+804.79315 716.4
+1057.24915 916.2
+1110.11865 613.5
+1159.96252 717.2
+1198.35327 3182.2
+1316.75769 589.0
+1375.90100 580.7
+1403.69189 859.4
+1468.76245 637.6
+1878.62842 1732.1
+1879.48926 19472.6
+1879.77307 1559.1
+1880.18970 1318.1
+1880.85315 670.1
+1907.04028 7901.9
+1930.66663 966.4
+S	1194	1194	417.7322871
+Z	4	1666.89785
+108.85944 632.9
+113.22487 640.2
+115.58916 616.1
+117.99079 680.0
+118.64111 555.0
+119.29599 551.0
+121.80015 1931.9
+127.50429 550.9
+141.03835 729.9
+142.63194 679.5
+146.91534 595.4
+158.99118 549.1
+165.78360 794.8
+171.09044 768.3
+171.63434 633.0
+175.11841 5415.6
+176.32773 580.9
+182.77716 656.4
+199.20482 763.7
+199.21233 688.6
+199.27113 878.7
+199.29155 1171.7
+199.30301 2813.9
+199.32092 1878.0
+199.40073 928.7
+233.16437 3555.7
+242.46138 599.1
+245.80154 613.9
+255.28050 736.2
+261.16019 627.2
+270.19125 635.1
+271.17575 1279.7
+273.17392 632.2
+288.20251 71067.7
+289.20627 8442.3
+308.88486 693.4
+313.70593 622.3
+314.18872 519.2
+320.56024 574.1
+321.14240 618.4
+324.19202 778.8
+345.20786 512.0
+356.71002 1009.1
+360.85413 1292.4
+361.18875 1796.8
+370.70779 10200.1
+371.20898 4670.0
+371.71057 1065.7
+375.20108 5711.9
+375.53479 3732.0
+375.87045 1382.5
+382.53064 727.4
+384.53195 15185.6
+384.86649 8424.9
+385.20010 3569.5
+385.53476 641.7
+387.27045 38321.3
+388.27423 5869.4
+388.53204 1083.3
+390.71259 13534.2
+390.96317 10871.1
+391.21384 6037.6
+391.46536 1782.8
+391.71445 811.3
+392.73105 803.4
+395.21457 2191.1
+395.46558 2545.2
+395.71570 1910.3
+397.86307 1520.3
+406.22607 7979.2
+406.72754 579.1
+427.54657 1652.7
+427.87540 1416.9
+427.89752 1255.5
+428.23099 1046.6
+428.69971 566.6
+429.70609 567.8
+433.89758 953.7
+434.23148 1915.8
+439.23026 8680.7
+439.56494 5806.3
+439.89868 2292.3
+445.23340 5488.4
+445.56805 4200.0
+445.90274 1083.8
+451.23666 3296.3
+451.57300 2047.1
+451.90460 828.5
+457.57559 6141.7
+457.91046 4240.3
+458.24442 1485.2
+460.56918 3833.1
+460.90317 2365.7
+461.23575 1590.4
+463.58047 2918.7
+463.91483 2474.3
+464.24945 1464.2
+464.58197 837.1
+469.58362 3176.9
+469.94952 668.6
+470.25531 860.4
+471.58856 884.8
+476.25406 1949.5
+476.74979 1035.1
+482.63651 666.8
+495.27060 3274.7
+495.60431 1591.3
+495.94113 709.5
+498.30225 3098.5
+499.30457 778.9
+501.26578 598.8
+502.76050 1055.6
+511.77332 5356.4
+512.27368 1497.7
+516.31232 6858.4
+517.31488 1624.8
+532.54413 1739.7
+540.77612 7501.7
+541.27649 4527.1
+541.78003 1661.1
+549.13483 742.2
+571.48798 545.2
+576.29425 36991.9
+576.79584 22589.7
+577.29730 6788.6
+577.79865 1650.6
+596.29449 591.7
+596.80902 716.7
+599.28723 1587.9
+605.29730 5811.8
+605.79755 5396.7
+606.30078 1001.4
+608.79822 661.0
+625.76929 524.1
+631.80988 8688.3
+632.31195 5642.0
+632.81396 2647.4
+640.81525 102738.6
+641.31653 70490.5
+641.81805 26134.0
+642.31836 6156.8
+655.04865 527.9
+666.35571 1102.8
+676.70978 680.5
+681.34198 1288.8
+681.84973 837.2
+690.34937 5733.8
+690.85419 3046.8
+691.16736 692.4
+691.35437 1589.9
+723.37469 2057.1
+724.37604 745.9
+731.09344 719.8
+757.22345 629.9
+795.69269 717.2
+949.00140 550.1
+959.41895 616.5
+1038.21301 731.2
+1048.49622 616.0
+1198.21814 3439.6
+1297.06006 614.7
+1621.57825 688.9
+S	1195	1195	418.2338246
+Z	4	1668.904
+106.87708 684.5
+113.45217 821.7
+113.52818 565.8
+120.67442 732.8
+121.07382 647.5
+121.41508 697.6
+121.80127 2046.8
+124.68088 595.6
+133.13933 1129.7
+138.34479 684.1
+143.18330 597.8
+145.24117 614.8
+146.90590 665.7
+162.80840 564.4
+164.76575 583.6
+165.78418 691.7
+176.13194 679.2
+198.47426 562.4
+199.27344 984.2
+199.29765 2323.5
+199.30867 1528.3
+199.32056 728.6
+199.39209 592.3
+199.40814 950.1
+199.46370 656.2
+207.10768 520.0
+210.53273 626.3
+211.65269 533.4
+212.14119 619.9
+224.29669 582.4
+226.86369 577.8
+227.99567 546.9
+246.18913 528.6
+255.26619 645.4
+262.17526 526.1
+299.85394 745.0
+334.12589 628.6
+377.74741 587.9
+404.10333 551.8
+427.49765 675.5
+447.31638 562.6
+460.74747 805.5
+482.61252 616.5
+484.60178 575.5
+500.02225 591.4
+517.95850 618.1
+532.55432 2258.1
+573.62177 540.2
+630.34369 737.3
+636.74036 658.7
+675.89362 626.7
+676.63635 1103.3
+709.74194 573.3
+783.61469 685.9
+795.69958 899.9
+810.68970 665.9
+829.71936 687.2
+1057.22754 736.4
+1198.23926 3466.7
+1525.30103 739.1
+1540.23230 680.4
+S	1196	1196	552.0124371
+Z	4	2204.01845
+142.03554 584.0
+155.15910 517.2
+155.16324 549.2
+157.59863 671.0
+158.70482 655.6
+162.69836 591.0
+168.27510 504.4
+171.55095 589.0
+171.63982 818.4
+171.88779 545.8
+188.22899 716.9
+188.27773 1300.8
+188.29216 1255.6
+188.30382 954.6
+188.31680 720.6
+192.99106 640.2
+194.83281 563.7
+198.92435 928.6
+199.20331 737.3
+199.20782 821.4
+199.24258 608.5
+199.28503 1291.0
+199.30659 2379.6
+199.32909 943.2
+199.34222 563.8
+199.37398 663.2
+199.40344 814.6
+199.42578 643.8
+202.11456 527.0
+213.86201 520.2
+214.50949 609.4
+226.89206 660.0
+227.68465 598.7
+231.34271 579.9
+269.39444 584.7
+271.73795 648.6
+278.87634 605.1
+291.04718 543.2
+300.66473 531.7
+306.86728 565.2
+333.18649 932.4
+344.03931 533.3
+350.28308 740.6
+381.34305 798.4
+382.94016 616.0
+397.32379 546.1
+420.21866 5169.9
+421.22113 743.6
+495.98578 705.1
+498.57059 1010.4
+529.57532 577.4
+532.57208 1795.1
+535.24261 2043.0
+535.57629 3029.4
+535.91473 1747.8
+538.49261 1110.3
+538.74646 1269.1
+538.99683 842.4
+583.28021 3954.2
+584.28339 1133.5
+589.93115 868.8
+590.27026 650.2
+595.60040 970.4
+595.89233 495.1
+595.92804 685.6
+596.27142 673.2
+617.60718 594.4
+619.03772 560.8
+630.38678 770.1
+646.28986 670.0
+676.65796 791.2
+718.82867 1044.3
+719.32703 1430.3
+746.84979 898.3
+747.34344 1223.9
+747.84045 893.8
+771.47723 576.4
+795.68823 1134.0
+802.36749 1851.4
+802.86365 3266.1
+803.36682 1540.3
+811.36810 3088.2
+811.87091 3379.8
+812.37146 2007.0
+848.86938 584.7
+995.04352 558.2
+996.04529 785.9
+1047.65454 746.5
+1170.99231 634.7
+1171.39392 607.0
+1198.28003 3315.4
+1213.18127 627.3
+1217.46313 624.3
+1237.74414 608.3
+1286.29163 572.7
+1380.87512 568.6
+1525.36694 813.7
+1587.23511 579.1
+1715.86584 634.3
+1746.02759 687.2
+1860.03467 821.4
+1878.48486 1259.6
+1879.00073 1697.1
+1879.29761 6153.4
+1879.58289 18193.1
+1880.35010 1414.7
+1880.75366 1165.9
+1881.13879 758.7
+1907.06970 7713.2
+1930.50940 743.4
+S	1198	1198	417.7324096
+Z	4	1666.89834
+104.00996 568.2
+105.08741 604.3
+106.45937 475.9
+115.72923 577.8
+120.83719 570.8
+121.80008 2267.6
+131.12109 553.0
+132.88861 539.6
+133.15164 1268.8
+141.15594 497.9
+163.75897 566.1
+166.44823 616.2
+167.76961 649.5
+188.50195 533.3
+198.92378 819.1
+199.21049 587.3
+199.22478 729.6
+199.27435 1166.7
+199.28671 2171.0
+199.29765 1000.2
+199.30901 1537.0
+199.31924 736.6
+199.32709 781.0
+199.38507 792.3
+199.40616 623.9
+199.41803 572.6
+231.89365 606.2
+238.47884 676.0
+247.29430 659.7
+269.55856 735.4
+281.79529 585.5
+285.50006 606.0
+288.20233 7062.9
+289.20441 755.4
+293.69537 537.3
+308.90308 869.4
+342.27567 792.3
+349.48367 526.1
+350.28146 754.2
+372.96472 635.9
+375.19913 947.0
+381.30978 580.3
+381.36374 691.4
+384.86551 927.8
+385.14630 539.2
+387.26990 3750.9
+388.27277 816.1
+390.71249 1072.2
+390.96106 900.8
+427.54837 809.3
+445.23474 750.8
+457.57382 703.8
+468.46991 729.7
+482.65714 789.9
+532.59784 2043.2
+540.76611 776.3
+540.95300 566.1
+573.62085 639.0
+576.29370 3338.6
+576.79413 1573.4
+630.41028 907.9
+631.80847 948.2
+640.81494 9695.2
+641.31635 6330.4
+641.82123 2367.6
+667.75000 749.6
+676.64478 881.2
+757.35724 566.8
+780.12616 580.0
+795.68341 1175.8
+904.89978 578.1
+933.88666 603.1
+961.20917 587.3
+1057.25000 777.5
+1116.44324 632.2
+1177.92029 613.2
+1186.36462 650.6
+1198.34692 3612.9
+1233.21570 652.9
+1236.74023 627.4
+1343.63293 708.2
+1452.89331 562.4
+1564.79016 665.4
+S	1199	1199	591.2768421
+Z	4	2361.07607
+151.28809 591.7
+165.78430 844.0
+166.51909 549.5
+174.63091 554.7
+174.84532 536.8
+179.04745 560.7
+181.40230 651.1
+198.92314 772.1
+199.26923 650.7
+199.29587 1633.0
+199.30418 2860.5
+199.40173 719.2
+226.67239 578.1
+240.09811 1569.8
+245.84418 608.0
+246.15596 1811.5
+255.27608 663.0
+276.52399 641.5
+311.13419 2431.4
+314.27872 565.2
+359.67462 644.7
+389.26239 589.9
+427.52328 915.4
+444.25821 623.6
+482.63217 682.3
+488.34244 634.4
+525.36017 561.3
+526.74628 1365.6
+526.99854 806.8
+532.51276 658.3
+532.57782 1900.4
+549.12970 771.2
+554.24054 728.6
+564.50354 893.7
+578.01074 1255.0
+578.61041 792.7
+630.37408 1159.5
+640.29980 2213.0
+640.63525 1480.1
+654.63885 1137.5
+654.96863 2480.9
+659.30804 2132.5
+659.64001 2890.9
+659.97504 1530.9
+660.30939 1235.1
+676.65546 1025.0
+678.31409 8099.3
+678.64819 11252.5
+678.98267 6787.6
+679.31824 2479.1
+679.65320 780.2
+696.31812 784.0
+701.99194 8083.7
+702.32745 11429.6
+702.66174 5905.6
+702.99359 2186.8
+717.28577 579.5
+718.54639 655.0
+792.62408 621.9
+795.68805 960.3
+894.39459 1264.5
+894.89948 1076.1
+895.39337 643.0
+922.27820 589.7
+927.20258 595.1
+930.41266 1018.8
+933.76202 536.4
+1020.88214 611.6
+1057.25696 891.1
+1166.97522 619.1
+1188.04431 701.9
+1198.29675 3029.1
+1231.97693 567.0
+1281.35828 589.7
+1293.50537 536.2
+1302.52795 638.0
+1373.35046 548.9
+1429.79626 709.0
+1494.42310 599.6
+1568.61011 669.9
+1583.59460 577.6
+1651.84583 628.6
+1739.38647 574.4
+1766.09534 567.9
+1785.57202 603.1
+1876.63745 568.5
+1878.70789 1070.6
+1878.91016 1339.3
+1879.55273 17926.9
+1880.03125 2608.7
+1881.04736 566.8
+1881.20947 588.7
+1882.08752 579.8
+1898.39148 714.4
+1907.01685 6918.3
+1907.32483 974.3
+1918.69641 744.1
+1930.48523 817.7
+S	1200	1200	418.2340746
+Z	4	1668.905
+113.35495 590.0
+113.45796 527.7
+118.06352 518.9
+120.16805 540.5
+120.54478 658.1
+121.02505 548.2
+121.80064 2643.0
+129.10329 638.0
+137.83488 572.2
+138.91020 622.5
+142.01529 566.8
+152.53473 609.0
+153.86188 522.9
+159.01492 595.0
+163.93311 676.4
+165.94943 511.0
+171.63766 990.1
+175.11842 5385.4
+188.93752 604.1
+194.13840 850.5
+196.63089 527.4
+196.78040 491.1
+198.92393 1054.8
+199.20177 1035.1
+199.28757 1802.3
+199.29941 2224.1
+199.31102 1477.9
+199.39775 720.1
+213.55066 584.0
+220.03900 628.8
+228.54373 581.8
+231.06613 576.2
+233.16429 3812.2
+235.10356 584.3
+243.40826 683.3
+255.27844 745.8
+261.15753 884.4
+262.85873 642.3
+271.17569 802.0
+288.20251 72464.6
+289.20660 7282.7
+296.71054 674.1
+342.25656 759.5
+350.28223 685.2
+360.85464 1428.6
+370.70764 6835.3
+370.93631 624.9
+371.20892 4287.2
+371.71078 1293.8
+375.20059 5639.4
+375.53525 3463.4
+384.53214 16598.6
+384.86670 9766.0
+385.20105 4444.5
+385.53528 983.5
+387.27039 42175.9
+388.27429 7118.9
+388.53198 791.5
+390.71274 12497.8
+390.96313 13474.0
+391.21359 5576.8
+391.46442 2042.7
+395.21481 3578.1
+395.46619 2787.2
+395.71921 1030.6
+397.86267 1124.4
+398.19745 949.9
+399.71750 888.5
+399.96765 828.8
+406.22559 9294.2
+406.72684 2909.9
+408.90775 660.1
+427.54620 1381.9
+427.89478 1935.2
+428.22906 1268.0
+433.23376 611.7
+433.89767 2202.7
+434.23376 1112.3
+439.23038 5254.7
+439.56467 4092.8
+439.89841 2646.3
+440.23212 1254.1
+445.23285 5675.1
+445.56747 5533.5
+445.90265 2404.6
+446.21817 694.0
+451.23746 2920.3
+451.57126 3284.8
+451.90643 1341.0
+452.17813 663.5
+452.23529 616.7
+457.57629 6161.9
+457.91116 4810.4
+458.24554 1911.7
+460.56860 4417.1
+460.90308 4125.2
+461.23688 1546.6
+463.57913 2721.3
+463.91333 2467.2
+464.58286 1236.9
+469.58432 2814.5
+469.91525 2855.1
+470.58524 998.9
+476.25403 1785.4
+495.27124 3182.4
+495.60565 1395.3
+495.93863 1234.1
+498.30191 2231.0
+502.75772 798.3
+511.77176 4269.0
+512.27496 2138.3
+516.31238 7151.4
+517.31708 2037.9
+532.56470 1747.5
+540.77612 6814.2
+541.27679 3722.1
+541.77679 1794.1
+546.46582 551.7
+576.29425 39616.0
+576.79553 22372.8
+577.29681 7455.3
+577.79681 1473.3
+596.28864 998.2
+599.28424 1470.9
+605.29730 4814.2
+605.79590 3625.6
+606.29419 778.5
+609.34460 695.4
+630.81616 764.8
+631.81024 8074.8
+632.31256 5888.2
+632.81421 2264.1
+633.30878 923.3
+640.32355 640.2
+640.75757 1100.1
+640.81525 105728.1
+641.31647 72844.9
+641.81812 29513.3
+642.31927 7661.3
+642.81915 639.6
+666.35529 881.7
+676.65991 798.9
+681.34912 1309.6
+690.34967 4444.0
+690.85004 3333.9
+691.35077 900.0
+711.47424 692.6
+713.34125 669.8
+723.37726 1789.2
+728.50775 585.3
+749.30035 671.1
+795.68634 1098.9
+865.61389 610.9
+929.61603 555.7
+1198.26563 3566.6
+1238.99438 621.5
+1505.73730 616.9
+1506.57544 549.2
+1525.36157 729.7
+1626.72449 661.9
+1657.53125 685.0
+S	1202	1202	1879.94199127
+Z	3	5636.551
+Z	2	3758.036
+532.53308 2023.9
+795.68311 1056.4
+796.46185 826.7
+804.13281 821.7
+857.58734 619.4
+886.37054 601.0
+986.22919 631.2
+1050.04944 560.4
+1168.97998 612.1
+1188.25354 704.3
+1195.65479 520.7
+1198.18982 3247.7
+1489.29211 721.3
+1525.35510 817.5
+1743.04126 633.3
+1774.67920 725.5
+1777.12354 825.2
+1872.51270 721.9
+1876.95874 669.5
+1878.73022 1783.0
+1879.03796 1621.6
+1879.46350 19947.9
+1879.90186 1612.4
+1880.21021 1448.9
+1880.64600 713.2
+1907.05176 7685.7
+1930.51575 1273.4
+S	1203	1203	1907.40740793
+Z	2	3812.967
+Z	3	5718.947
+532.52283 1708.7
+549.73438 635.9
+565.03259 613.1
+580.75549 661.0
+639.80023 613.7
+662.48401 568.9
+676.62164 1157.3
+731.11328 744.8
+795.68073 1284.9
+889.28760 732.0
+1024.31506 660.9
+1057.23401 706.2
+1198.16919 3202.6
+1244.96997 663.8
+1260.28430 608.1
+1269.56750 765.8
+1319.94666 664.5
+1415.62976 603.2
+1525.39014 765.9
+1777.14368 815.0
+1879.49121 19873.8
+1880.20459 1006.3
+1884.21057 728.7
+1907.05835 7664.0
+1930.57458 1099.9
+1945.31702 721.8
+S	1205	1205	591.2775146
+Z	4	2361.07876
+152.27194 519.0
+156.87254 529.3
+160.44279 555.6
+169.69382 514.8
+179.24272 632.7
+182.61195 654.2
+182.78293 785.9
+189.02570 588.9
+198.77641 615.8
+198.92137 1035.5
+199.19733 1192.7
+199.20367 831.4
+199.24736 785.1
+199.29494 2837.0
+199.30157 1602.1
+199.31296 1132.3
+199.34888 579.5
+199.38931 839.5
+212.10172 1078.1
+216.04231 586.2
+216.91600 544.1
+222.08643 1398.5
+223.07054 1093.0
+240.09718 5103.0
+246.15567 6144.2
+255.18379 522.8
+305.83691 675.3
+311.13480 5955.9
+350.28928 669.0
+356.71194 646.4
+368.15503 1732.4
+381.33875 673.0
+408.15189 1367.0
+409.55243 670.9
+425.17731 1463.3
+438.67297 524.6
+452.33496 574.0
+469.99268 576.4
+473.70709 563.6
+482.34460 533.6
+487.57373 756.6
+497.23752 510.8
+507.19461 513.9
+522.50110 763.2
+523.17841 800.6
+526.74646 3879.2
+526.99591 5301.0
+527.24628 2411.7
+527.49634 1109.2
+532.53168 2193.2
+540.20135 2493.6
+543.74414 1094.2
+544.59723 1406.8
+544.93005 1389.5
+549.12189 803.3
+553.90729 1112.7
+554.60217 1299.2
+554.93146 1056.5
+557.32281 550.8
+564.25378 1000.7
+564.50690 3008.4
+564.76080 898.2
+566.21613 1418.0
+566.46729 4066.2
+566.71674 7380.2
+566.96625 5719.8
+567.21698 1387.6
+568.75897 993.0
+573.51294 863.7
+577.75891 1850.2
+578.00989 971.0
+578.27887 2681.6
+578.61517 1341.3
+602.29120 815.5
+616.62213 1474.1
+616.95349 1202.4
+629.29883 810.1
+629.80420 690.6
+635.62549 2025.1
+635.96295 2157.2
+636.29639 2076.2
+640.29999 3515.1
+640.63306 4262.3
+640.96637 2915.5
+641.30469 904.8
+648.63452 835.9
+653.00287 860.1
+653.30969 777.7
+654.63409 5430.0
+654.96826 7211.3
+655.30212 4165.3
+655.63727 2427.6
+655.97815 711.2
+659.30579 9179.1
+659.64050 10030.0
+659.97504 3939.4
+660.30591 2630.6
+672.30927 2417.0
+672.64319 1566.9
+672.97461 1211.6
+673.31195 855.3
+676.63940 1116.8
+678.31342 36148.4
+678.64740 39124.7
+678.98157 21731.7
+679.31561 7272.8
+679.65076 1897.2
+693.97400 1090.5
+694.29993 689.0
+694.63916 1084.4
+695.98846 1663.5
+696.32385 1436.2
+696.66309 869.2
+699.17999 690.8
+701.99243 32996.0
+702.32660 33418.2
+702.66083 17166.8
+702.99402 5754.3
+703.32843 1783.0
+706.31012 692.5
+707.59088 611.1
+728.94000 713.0
+744.33759 2810.4
+744.84253 1420.8
+779.85327 659.8
+795.67468 1213.3
+797.17688 649.2
+800.15491 585.6
+831.20300 615.2
+837.36969 1125.1
+838.37012 727.8
+858.87646 1235.5
+859.38562 837.2
+865.80304 555.0
+865.88104 892.9
+894.39258 4793.4
+894.89526 3727.3
+895.39142 1538.6
+904.38287 559.1
+929.90991 3237.3
+930.41162 2546.2
+930.91211 1301.1
+931.41968 773.2
+939.82581 580.2
+1019.68762 698.3
+1025.05481 551.3
+1103.05542 615.2
+1165.61267 624.1
+1198.18860 3035.9
+1335.69727 723.4
+1777.05469 1207.6
+1878.23633 1031.2
+1878.83325 907.8
+1879.52576 19569.2
+1880.32605 607.6
+1881.91736 794.9
+1882.12622 657.1
+1907.12695 7333.6
+1918.70361 1056.5
+1919.40967 653.3
+1930.46875 953.5
+1931.74463 801.5
+1991.66833 673.3
+S	1206	1206	417.7328971
+Z	4	1666.90029
+100.24121 563.8
+102.03227 556.7
+102.35174 540.2
+105.87972 623.9
+120.25281 584.2
+120.61526 568.3
+121.79759 739.1
+121.80196 2407.6
+122.90594 616.1
+130.89413 492.3
+146.91376 605.0
+153.65259 593.8
+163.10341 530.7
+164.63918 565.7
+165.78639 638.3
+170.03522 585.0
+170.28647 538.6
+175.11853 4238.7
+176.64020 535.9
+177.48572 595.1
+183.58482 696.5
+194.13908 1526.4
+198.92017 730.6
+199.21008 685.4
+199.28220 1500.4
+199.29248 2035.6
+199.29964 951.7
+199.30917 2157.8
+199.32030 726.2
+199.40819 509.6
+204.78690 609.8
+206.54703 559.2
+209.95865 564.3
+214.50427 573.9
+220.18324 590.2
+233.16440 3574.9
+238.73224 662.8
+266.30939 613.9
+271.17453 772.0
+278.16852 629.6
+288.20239 58408.7
+289.20627 6644.2
+291.03812 629.0
+291.19028 529.2
+297.61578 603.4
+321.78235 609.4
+324.19141 813.8
+342.75687 552.6
+351.52197 683.2
+356.70969 769.6
+360.85345 1791.9
+365.42905 611.7
+370.44797 555.1
+370.70737 6559.6
+371.20905 3975.2
+371.70575 836.9
+375.20111 4873.2
+375.53516 3202.7
+375.86926 971.5
+376.20285 668.5
+384.53201 11712.0
+384.86612 9431.6
+385.20068 1791.0
+385.66187 581.5
+387.27036 30078.0
+388.27396 4926.0
+388.53271 772.3
+390.71249 9339.3
+390.96344 9350.9
+391.21341 2525.8
+391.46423 1000.9
+392.22833 1363.8
+395.21591 2633.8
+395.46573 1297.4
+395.71558 1108.8
+396.39075 691.9
+397.86469 997.1
+398.19812 813.5
+406.22525 7327.1
+406.72720 1130.1
+427.54935 1121.3
+427.87363 955.6
+428.20770 982.7
+428.23077 832.9
+433.89709 1659.0
+434.23318 960.3
+434.56808 713.3
+439.22971 5395.6
+439.56458 4726.6
+439.89996 2331.2
+440.23450 1026.9
+440.57516 695.9
+445.23401 4147.7
+445.56686 2924.1
+445.90302 1064.3
+447.74368 709.7
+451.23642 1860.2
+451.57126 1988.6
+451.83682 627.8
+451.90686 825.1
+457.57535 5464.1
+457.91077 3233.2
+458.24545 940.2
+458.57935 726.5
+460.56876 4890.9
+460.90451 2268.6
+461.23911 727.7
+463.57941 4831.7
+463.91595 2383.7
+464.25266 953.7
+464.58047 1720.2
+469.58316 2649.7
+469.91916 1046.7
+470.58823 731.4
+470.78903 762.1
+476.25305 1385.3
+476.73016 633.2
+495.27072 1914.6
+495.60391 1326.4
+498.30206 2120.5
+501.27454 940.0
+503.26447 602.9
+505.00888 515.5
+507.27780 857.1
+511.77304 3382.6
+512.27460 2271.9
+512.77954 676.8
+516.31213 6246.6
+517.31622 1490.4
+530.37732 574.3
+532.56683 2005.2
+540.77612 4269.7
+541.27734 1988.6
+541.77759 1163.3
+576.29413 32877.6
+576.79541 18635.9
+577.29639 5297.5
+577.79883 1002.3
+599.28723 1300.2
+604.11774 657.7
+605.29736 3881.2
+605.79797 3668.0
+606.29919 1102.2
+630.36652 890.4
+630.47656 569.4
+630.51270 568.2
+631.81000 6921.9
+632.31128 5338.3
+632.81091 1742.4
+639.96368 574.1
+640.81494 79260.9
+641.31635 56084.1
+641.81787 18538.2
+642.31982 5062.9
+643.36902 567.2
+666.35913 1088.4
+681.34625 871.2
+681.85193 757.2
+690.34949 3847.8
+690.85120 3417.4
+691.34875 786.1
+723.37103 1436.6
+778.98022 671.4
+782.41431 777.7
+795.67529 1488.1
+861.30084 659.9
+874.46875 667.9
+886.19373 597.7
+1035.83325 626.6
+1069.53796 648.2
+1103.76514 498.0
+1178.22522 547.2
+1198.27161 3532.3
+1236.88489 550.0
+1257.46802 703.1
+1494.81641 626.1
+1500.72632 614.2
+1525.35986 1061.7
+1625.29126 627.4
+S	1207	1207	418.2345746
+Z	4	1668.907
+110.00922 627.7
+110.23437 533.3
+117.66546 601.5
+120.66019 820.4
+121.80103 2485.5
+126.87496 532.4
+130.26878 574.1
+133.13358 678.4
+133.13994 935.4
+138.12782 568.7
+144.14517 629.3
+146.02177 503.3
+148.13264 609.5
+149.57173 607.3
+157.59747 739.2
+164.66689 489.0
+165.78384 948.9
+182.77640 699.4
+192.89104 609.5
+198.92331 863.4
+199.04381 587.3
+199.20029 874.5
+199.21342 818.3
+199.26341 673.6
+199.27666 917.0
+199.29922 2646.7
+199.31097 1359.3
+199.39633 1047.0
+231.48051 606.8
+238.72702 590.9
+245.54460 611.5
+248.26508 660.9
+254.95853 701.1
+255.87660 515.7
+263.02350 625.1
+266.32077 600.8
+268.35541 575.9
+299.57272 799.4
+305.08459 569.4
+361.20102 536.5
+379.56802 606.9
+412.15338 646.5
+427.52234 909.3
+434.07901 531.8
+438.08057 656.8
+463.19397 573.5
+482.63333 872.1
+532.55603 1713.4
+548.02417 621.9
+558.81342 605.2
+568.33881 587.2
+572.25885 623.0
+589.41858 622.8
+630.38141 750.9
+631.82050 571.3
+646.20569 581.2
+676.63336 1179.1
+683.38055 643.6
+779.20038 568.9
+779.29224 515.2
+795.68567 1215.6
+834.33411 650.1
+1021.12305 676.3
+1187.94348 742.5
+1198.24194 2938.2
+1550.14600 625.5
+S	1209	1209	1879.8928246
+Z	3	5636.403
+Z	2	3757.938
+532.54486 1740.6
+540.07825 583.7
+676.63306 1223.1
+700.15466 578.2
+772.19000 656.2
+913.80444 654.2
+1019.84650 556.3
+1057.23938 1156.1
+1072.74829 575.4
+1118.74695 773.8
+1119.32153 769.5
+1198.21472 2655.9
+1216.91699 609.8
+1228.09253 628.5
+1298.58142 543.6
+1348.64490 610.7
+1416.80310 604.0
+1525.26880 736.8
+1705.46082 568.5
+1707.19641 659.1
+1870.05774 771.2
+1876.22986 771.2
+1879.15955 1157.4
+1879.51831 19540.8
+1880.06873 909.3
+1906.05823 776.7
+1906.93616 5916.7
+1908.08301 581.6
+1930.40332 916.5
+S	1210	1210	1907.2878246
+Z	3	5718.588
+Z	2	3812.728
+532.56061 2108.9
+573.12183 594.1
+630.31036 795.2
+630.37073 709.9
+730.97028 573.9
+795.67609 953.9
+844.54175 780.3
+1016.97131 582.5
+1045.42969 671.3
+1198.25842 3165.4
+1269.51807 762.9
+1464.68115 666.0
+1495.93921 609.4
+1525.20764 747.5
+1698.03430 587.5
+1878.50452 1075.7
+1879.04590 2001.7
+1879.46753 19621.4
+1879.85938 1635.7
+1880.39258 1446.2
+1906.72949 634.1
+1907.06909 7207.4
+1930.34668 787.3
+S	1211	1211	1198.59340793
+Z	2	2395.339
+Z	3	3592.505
+317.22113 688.6
+335.89478 652.0
+374.26160 824.0
+431.96133 649.1
+463.29660 638.4
+463.31958 578.7
+506.16666 662.1
+532.58142 1667.4
+543.09302 577.4
+549.12140 1177.5
+554.91638 599.3
+567.96759 542.8
+676.63281 1093.9
+935.79523 586.0
+952.13184 694.8
+1198.29724 3001.5
+1269.97815 582.9
+1334.84131 564.0
+1382.60693 813.2
+1525.36072 838.4
+1575.50732 655.2
+1749.02759 657.8
+1839.73877 653.0
+1870.18555 730.2
+1879.06140 1722.4
+1879.51843 18965.7
+1879.99731 2273.3
+1880.24805 617.3
+1880.98926 795.5
+1907.06287 7650.2
+1912.12061 732.1
+1930.48499 963.1
+S	1213	1213	591.2737296
+Z	4	2361.06362
+165.78448 797.5
+169.48984 540.0
+171.64606 753.9
+175.28249 650.4
+180.81337 555.3
+182.76776 616.7
+184.88548 642.3
+189.98402 595.6
+191.81734 640.4
+199.19894 928.1
+199.28072 1089.2
+199.29633 3053.9
+199.30746 1247.4
+199.39444 1198.8
+199.41054 695.6
+201.61549 489.1
+212.10243 1730.1
+222.08701 1642.2
+223.07082 2167.7
+235.43301 565.4
+236.85968 713.9
+240.09743 6792.1
+246.15565 12037.8
+247.15862 1023.0
+255.26604 649.1
+257.64392 642.1
+283.14023 826.0
+285.63297 587.4
+301.11252 1368.8
+303.02448 594.0
+311.13425 9156.3
+312.13879 1279.2
+321.30646 594.3
+324.48840 559.0
+332.56830 527.2
+349.30475 714.0
+350.29184 625.8
+367.93066 632.5
+368.15585 2467.2
+379.54086 589.8
+408.15097 1379.4
+421.70850 3660.8
+422.21124 1113.9
+425.17651 3177.7
+427.51096 594.8
+436.21872 594.0
+447.55911 653.2
+479.22147 1224.8
+489.73483 3185.1
+490.23273 937.0
+498.62924 635.5
+508.98883 1467.5
+509.23822 1061.4
+509.48846 1356.9
+514.91449 741.7
+515.58301 945.3
+522.24268 719.2
+522.49274 1171.3
+522.74237 1264.4
+523.17957 1359.0
+526.74530 10011.4
+526.99634 9215.2
+527.24774 5483.6
+527.49750 1492.3
+532.27673 783.1
+532.55005 1694.2
+534.73694 1210.9
+540.20300 4173.6
+543.74243 8883.6
+544.24365 3533.8
+544.59460 2779.5
+544.74463 903.7
+546.76013 580.7
+547.26135 637.6
+554.59979 2002.7
+554.93311 3254.8
+555.26642 930.2
+555.76178 1201.1
+560.25305 816.9
+564.25800 2963.9
+564.50439 2816.8
+564.75464 2057.5
+565.00690 2141.7
+566.21979 1062.8
+566.46716 3433.6
+566.71600 6383.6
+566.96515 3933.9
+567.21558 2635.4
+568.75916 2066.6
+569.00812 2118.2
+569.26337 1154.2
+569.50488 1005.5
+572.60675 824.4
+573.25818 1211.2
+573.50696 860.4
+573.76318 1051.4
+578.27789 1239.1
+611.24225 2003.8
+616.61902 2404.0
+616.95270 2703.3
+617.27795 4748.8
+617.77716 2253.8
+618.28021 1199.7
+629.29523 6044.0
+629.79584 2260.9
+634.62567 1393.8
+634.95471 930.5
+635.62787 3776.1
+635.96112 3687.6
+636.29614 3278.7
+636.63055 690.9
+640.29840 8368.4
+640.63208 7542.7
+640.96735 4767.4
+641.29816 943.4
+648.96533 1043.3
+649.29376 1032.5
+653.00165 838.5
+653.29761 801.8
+653.63745 1956.9
+653.96777 1695.2
+654.29926 802.3
+654.63501 11531.8
+654.96826 11687.0
+655.30243 6604.7
+655.63727 3490.0
+659.30603 14848.7
+659.63995 12985.2
+659.97504 6805.5
+660.25562 549.3
+660.30658 2171.4
+672.31012 2438.7
+672.63843 7420.8
+672.97388 4732.3
+673.30939 2946.5
+673.97583 945.3
+674.29822 10196.3
+674.79913 4708.7
+675.29852 2429.6
+676.63660 1216.4
+678.31342 53675.4
+678.64716 55452.9
+678.98126 30273.8
+679.31598 13224.7
+679.64856 2736.1
+688.63031 980.0
+693.97107 1386.5
+694.30145 2025.2
+694.63727 1711.3
+695.98895 1977.3
+696.31976 4242.6
+696.65228 3506.3
+696.98657 2232.1
+697.31775 1531.6
+700.29706 664.9
+701.99213 40900.7
+702.32629 42037.8
+702.66040 23328.7
+702.99457 10278.6
+703.32831 2165.7
+705.97223 1520.9
+706.31317 2382.5
+712.28461 1118.2
+713.29169 887.6
+744.33972 3571.3
+744.84082 2816.9
+745.34308 2242.8
+780.37091 799.6
+795.68463 918.5
+837.37103 1204.1
+841.33228 1342.0
+858.87256 2904.4
+859.37024 2088.3
+859.87756 1837.4
+860.21796 570.2
+865.88293 1484.0
+866.38678 1224.3
+866.88824 808.5
+885.88367 903.7
+894.39410 5927.7
+894.89319 6113.7
+895.39642 3090.3
+895.89374 1025.0
+929.91089 4302.0
+930.41193 3643.6
+930.91809 2554.8
+931.42664 1190.5
+940.15741 869.9
+1012.51318 548.6
+1057.23169 832.6
+1077.54028 581.6
+1103.39673 679.9
+1187.84607 808.0
+1198.23218 3337.7
+1449.91919 613.4
+1594.00867 623.7
+1754.21619 520.3
+1763.66589 835.3
+1879.15295 2045.5
+1879.52136 20146.5
+1879.87610 2191.1
+1907.10291 7405.4
+1930.48950 1282.5
+S	1214	1214	417.7296021
+Z	4	1666.88711
+102.69986 592.6
+104.97464 551.0
+120.08072 714.8
+121.80068 2382.9
+126.00041 602.2
+137.28978 565.4
+165.78406 790.2
+166.30548 497.3
+168.55484 683.2
+171.63940 633.4
+175.11856 5084.2
+194.13834 1155.9
+195.84439 625.7
+197.59354 636.3
+198.92339 773.4
+199.21616 542.3
+199.26425 811.8
+199.29286 2908.5
+199.31171 761.7
+199.31854 654.5
+199.34225 608.6
+199.39076 681.0
+222.81624 612.5
+233.16423 5453.7
+233.57224 806.2
+242.31660 543.2
+261.16025 894.9
+270.19211 699.0
+271.17618 880.9
+274.34140 641.9
+284.51633 556.9
+288.20233 65667.3
+288.24713 546.9
+289.20621 7523.4
+306.34268 563.9
+324.19052 694.8
+332.20844 620.8
+341.14612 621.4
+345.09113 638.0
+370.54593 642.1
+370.70676 5243.9
+371.20901 2735.3
+371.70865 638.8
+375.20029 8512.7
+375.53500 4948.1
+375.86920 1480.3
+384.53174 19518.9
+384.86615 9065.9
+385.20078 4191.6
+387.27017 38567.0
+388.27399 5949.8
+388.86816 617.4
+389.20074 761.4
+389.27664 981.6
+390.71222 7945.9
+390.96341 7398.0
+391.21414 2621.5
+392.22769 1982.9
+392.72986 794.1
+395.21671 1566.6
+395.46768 836.9
+406.22510 8676.5
+406.72769 1133.0
+427.54807 1176.2
+433.89694 1247.6
+439.12457 625.0
+439.23013 5252.9
+439.56482 2699.2
+439.89923 1519.0
+445.23389 4708.3
+445.56760 4288.8
+445.90198 1266.9
+446.21881 1266.1
+446.72134 637.0
+451.23608 1877.2
+451.56934 1938.7
+451.90524 1411.7
+454.56461 989.4
+457.57568 9553.8
+457.91028 9288.9
+458.24445 2250.5
+460.56891 3882.8
+460.90305 1907.8
+461.23965 663.7
+463.57959 8964.2
+463.91367 4579.5
+464.24863 1321.7
+464.58008 1289.1
+469.58313 6003.3
+469.91812 3829.0
+470.25229 2392.2
+470.58478 1038.1
+470.78406 1226.2
+476.78113 969.7
+483.76770 685.9
+489.59406 579.2
+495.27081 2325.1
+495.60593 2285.8
+498.30112 2526.5
+500.76904 2819.0
+501.27414 2268.8
+501.92865 835.0
+502.25681 752.5
+503.26334 634.9
+507.27649 1831.3
+507.62036 1181.3
+511.77283 4313.8
+512.27142 2152.6
+512.76215 832.1
+516.31177 8235.3
+517.31482 1976.0
+532.58191 2117.1
+540.77484 3702.3
+541.27704 2917.8
+543.76599 850.7
+549.15240 901.5
+567.28040 917.7
+576.29382 39295.7
+576.79510 25610.7
+577.29675 6791.3
+577.79559 1448.5
+584.26703 714.9
+599.28650 947.9
+599.78632 739.7
+605.29852 2127.9
+605.79938 1904.4
+606.29987 898.6
+608.28656 678.6
+621.81531 894.5
+630.39551 789.6
+630.82275 854.9
+631.80908 7246.8
+632.31030 5432.3
+632.81262 1236.9
+633.52490 619.6
+640.32367 1118.8
+640.81470 91408.2
+641.31610 62783.4
+641.81757 19356.8
+642.31860 4302.1
+666.35413 1243.9
+672.84027 990.8
+676.59058 896.6
+676.62030 790.8
+679.41492 703.0
+683.34766 1359.0
+690.34863 4670.7
+690.84943 4003.9
+691.34973 1286.7
+723.37891 1635.5
+734.04285 667.5
+795.68176 792.3
+900.35767 619.3
+1009.13086 561.6
+1009.20184 576.3
+1020.85883 719.7
+1057.14270 654.3
+1057.22278 599.1
+1079.31702 638.8
+1135.06445 711.3
+1160.61755 594.1
+1177.82959 583.7
+1187.90369 934.6
+1198.30029 3255.6
+1208.65491 613.8
+1430.46716 680.0
+1529.95154 611.2
+S	1215	1215	1879.90040793
+Z	3	5636.426
+Z	2	3757.953
+532.57080 1984.5
+549.17169 618.7
+565.83246 646.5
+594.88861 630.2
+608.12616 708.3
+630.29309 595.8
+795.67371 883.1
+875.16162 716.7
+947.07819 628.6
+978.71753 633.5
+1057.26563 853.9
+1110.57910 712.9
+1168.54663 689.1
+1198.26978 3185.0
+1870.15967 687.9
+1878.65173 1367.7
+1879.20630 4662.3
+1879.56433 18320.3
+1880.52612 632.9
+1880.73010 869.3
+1881.69385 892.1
+1907.14636 7546.2
+S	1217	1217	417.7321946
+Z	4	1666.89748
+102.27827 605.9
+102.36738 591.3
+104.86025 514.4
+106.06438 592.6
+110.94392 579.6
+112.09917 544.8
+113.79862 594.5
+116.20463 511.2
+117.59481 566.8
+121.79436 544.5
+121.80232 2153.5
+124.63268 618.1
+124.70783 527.2
+127.99274 624.5
+133.37169 489.0
+135.14233 536.8
+137.23407 534.3
+157.13852 531.7
+157.60854 736.1
+169.49684 632.0
+171.64955 575.1
+173.64767 582.9
+175.11823 3786.0
+175.31087 478.1
+177.87340 522.7
+180.82726 508.9
+194.13818 812.5
+198.92313 1207.6
+199.19897 1063.4
+199.27522 907.6
+199.29648 3157.7
+199.32637 784.8
+199.39424 1122.8
+201.79147 588.4
+217.35907 654.2
+232.08054 608.0
+233.16418 4163.6
+238.73425 529.6
+250.47891 545.3
+261.15839 611.7
+271.17300 800.5
+288.20233 47460.3
+289.20648 5391.3
+314.18817 793.3
+330.94788 567.1
+360.85309 688.6
+370.70700 4094.0
+371.20850 2416.2
+375.20023 3992.9
+375.53528 2741.4
+375.86349 860.3
+381.37186 698.6
+384.53189 10454.8
+384.86624 7623.4
+385.20041 1871.1
+386.28445 779.7
+387.27017 28384.3
+388.27380 4343.7
+390.71268 6123.7
+390.96317 6141.3
+391.21442 2876.1
+392.22775 1368.5
+392.72958 1087.0
+395.21530 1014.3
+400.90897 592.0
+406.22571 6740.9
+406.72729 1517.6
+427.54803 1518.2
+428.56573 946.6
+439.22955 3888.5
+439.56299 1950.0
+439.90097 1708.8
+445.23288 2733.4
+445.56619 2510.5
+445.90506 1012.3
+446.22018 885.1
+451.23730 1307.3
+451.57208 1231.5
+457.57663 5755.7
+457.90900 3768.8
+458.24380 1255.5
+460.56952 2271.1
+460.90454 1319.5
+463.57928 4870.8
+463.91364 4839.4
+464.24725 721.1
+464.58011 3156.3
+464.91669 814.6
+465.00534 612.8
+469.58145 2757.7
+469.91632 3067.1
+470.25150 1027.3
+476.25696 860.3
+483.76135 775.4
+495.26627 915.6
+495.93564 669.7
+498.30212 1739.9
+500.76968 5848.3
+501.27219 2275.8
+501.77228 851.7
+502.77090 813.7
+507.27667 1521.4
+511.77328 2076.4
+512.26941 1309.0
+516.31250 5242.5
+517.31744 939.1
+532.54694 2191.7
+540.77515 4579.8
+541.27490 2346.7
+549.16602 858.7
+552.77820 770.0
+576.29382 26255.4
+576.79529 16043.3
+577.29651 5137.6
+605.29645 3786.0
+605.79950 2306.8
+631.31641 823.9
+631.80994 5905.1
+632.31042 4348.6
+632.80859 938.6
+636.93561 512.8
+640.32343 755.3
+640.81482 67677.0
+641.31604 46240.3
+641.81732 15334.8
+642.31927 2930.1
+666.99457 592.8
+676.64813 929.3
+681.84235 812.7
+690.34924 3595.2
+690.85114 2215.3
+691.35803 996.5
+723.37579 669.5
+731.13983 703.4
+795.68646 1272.3
+852.47333 706.3
+856.46936 591.6
+1198.22070 3446.8
+1227.85779 624.1
+1324.50708 764.6
+1369.97534 645.6
+1427.86365 571.8
+1491.84607 708.6
+S	1218	1218	591.2765371
+Z	4	2361.07485
+157.59598 808.1
+159.58556 630.8
+165.78531 771.7
+169.48653 684.2
+171.63716 709.0
+183.26393 540.4
+184.61334 537.9
+198.80782 570.8
+198.92477 767.1
+199.17854 597.2
+199.19171 797.0
+199.29063 3093.5
+199.30301 652.3
+199.32318 705.2
+199.38823 808.7
+203.29799 595.3
+209.98972 598.0
+240.09712 967.6
+245.16673 772.0
+246.15601 1935.1
+271.33032 684.9
+293.71851 634.9
+308.89633 567.0
+309.41324 639.7
+311.13364 2279.3
+350.27795 791.8
+384.95853 624.5
+387.22900 635.8
+407.38559 586.5
+409.49738 607.0
+421.70758 817.0
+458.18066 657.9
+479.22421 729.9
+487.58032 685.0
+506.70865 562.7
+523.26031 573.9
+526.74408 1235.9
+526.99597 1191.0
+532.52637 1990.9
+543.74225 1586.4
+548.85876 532.6
+549.14386 689.4
+555.97284 734.5
+561.91010 599.0
+564.50409 1125.8
+566.21832 1987.3
+566.46735 2120.3
+566.71356 2106.7
+566.95648 686.3
+578.61481 838.0
+617.27460 1019.3
+629.29663 760.0
+630.39264 888.4
+635.62872 832.7
+636.30121 623.3
+640.29913 2376.9
+640.63562 1683.1
+640.96503 1521.9
+641.65887 648.9
+653.63013 804.5
+654.63452 1970.8
+654.96503 1057.1
+655.29779 1629.2
+655.63239 761.3
+659.30725 2716.9
+659.64093 2106.7
+659.97504 1510.6
+665.80029 577.1
+674.29803 1171.8
+676.63257 732.9
+678.31390 6396.0
+678.64728 11665.9
+678.98151 4559.3
+679.31470 2455.5
+696.32233 710.6
+701.99225 8078.2
+702.32562 6227.0
+702.66132 6459.4
+702.99506 1432.3
+723.37402 655.6
+812.81049 603.0
+894.38910 919.7
+894.88757 1243.9
+911.03503 679.9
+935.49152 849.0
+958.06537 590.4
+1038.06519 619.1
+1043.67126 577.2
+1057.23438 1044.9
+1198.18005 3440.6
+1432.56067 614.1
+1488.67273 657.7
+1878.80493 1519.1
+1879.05933 1264.2
+1879.51807 20070.2
+1879.99951 1053.8
+1880.23096 1140.1
+1907.05383 7599.2
+1930.58337 1199.2
+1931.80127 620.6
+S	1219	1219	436.2410446
+Z	4	1740.93288
+116.30216 677.8
+120.07958 885.7
+121.80161 2305.2
+122.24375 582.9
+143.44589 506.0
+154.65544 561.1
+168.36731 566.4
+175.11813 1161.7
+178.53265 578.0
+180.28477 515.9
+185.53523 650.7
+196.12067 561.1
+198.92532 719.1
+199.24139 772.5
+199.27524 1684.8
+199.29945 2354.1
+199.34056 600.1
+199.39070 804.7
+226.47379 534.8
+233.16415 10934.5
+234.16818 1322.3
+235.00568 531.4
+240.32204 539.9
+261.15967 2038.4
+264.33292 571.4
+266.39059 579.5
+271.58539 590.2
+281.13974 686.1
+286.48083 683.5
+286.67422 1118.1
+288.20200 3717.1
+297.35797 710.2
+314.19003 3569.3
+314.52423 1722.2
+337.86871 5070.5
+338.20319 1851.9
+359.87820 732.0
+365.67392 675.1
+374.88510 648.7
+374.91281 500.2
+378.79257 572.3
+383.55252 1556.0
+387.27069 1478.5
+390.20084 1405.2
+396.88596 1328.2
+397.22052 1412.7
+406.22513 904.3
+408.46997 1152.0
+408.71942 618.8
+408.97473 792.1
+409.22180 2829.0
+409.47171 2501.3
+409.72195 1440.3
+409.96112 1048.2
+410.54160 596.8
+412.97336 3259.6
+413.22556 2652.9
+413.72357 4066.0
+413.97620 1067.9
+414.22678 1503.5
+418.22684 16617.1
+418.47757 15313.5
+418.72818 5542.1
+418.97855 1156.4
+420.56467 874.5
+421.56412 2093.5
+421.89862 900.0
+422.25644 792.1
+422.73523 849.9
+445.57703 863.6
+451.24438 909.7
+452.17996 893.2
+457.58032 786.1
+457.91324 699.8
+458.15906 566.0
+464.57916 17239.6
+464.91364 11736.3
+465.24738 3359.0
+465.58203 2119.3
+470.18768 1151.1
+470.58347 7942.8
+470.78046 7450.8
+470.91721 4884.8
+471.25287 2307.2
+471.28024 2903.2
+471.78329 1420.2
+482.25623 1064.2
+482.65756 798.7
+487.57346 1418.5
+488.25787 23598.5
+488.59216 18882.1
+488.92596 6004.5
+489.26071 2848.1
+493.58118 856.7
+493.91150 963.3
+494.26151 18121.5
+494.59543 11520.8
+494.93045 5746.0
+495.26114 847.3
+506.29913 3597.0
+506.79941 3177.2
+507.30038 1023.6
+508.27621 5980.1
+508.61102 5817.4
+508.94443 2935.7
+526.27203 926.8
+526.94348 779.1
+531.95587 9133.6
+532.28986 7116.8
+532.53027 1848.8
+532.62628 3221.0
+532.95746 845.9
+534.39423 597.7
+535.28302 1104.3
+539.31171 934.1
+540.77588 1011.1
+545.62915 577.3
+549.14349 904.2
+576.29419 4018.3
+576.79382 2770.9
+579.19043 570.9
+582.37244 581.6
+667.83545 1258.9
+669.32813 881.0
+675.94958 535.1
+675.97919 543.4
+676.62592 1053.1
+676.80560 1052.7
+676.84741 949.0
+677.30713 936.7
+677.34985 1032.0
+677.83832 940.7
+678.33911 1117.1
+678.82318 665.6
+690.73120 665.6
+708.27301 612.4
+730.33978 1677.2
+731.12244 772.8
+739.82318 666.8
+786.45612 718.0
+795.68530 1136.1
+847.00873 630.9
+904.69897 602.6
+915.48669 579.8
+1009.61682 626.2
+1128.50793 661.2
+1198.18628 3132.0
+1504.33679 617.1
+1525.40540 835.0
+1740.73157 552.1
+S	1221	1221	436.2403746
+Z	4	1740.9302
+119.32517 533.4
+121.79215 759.1
+121.79939 2190.6
+124.21505 661.3
+129.48451 626.6
+135.59215 546.9
+138.32086 563.4
+141.85674 642.5
+175.11890 694.6
+180.31013 587.3
+198.91757 825.3
+199.20868 936.6
+199.29236 1186.0
+199.30701 3190.4
+199.31964 839.0
+199.40530 1590.8
+220.75735 601.6
+227.20193 545.7
+233.16425 7924.9
+233.58661 638.4
+234.16711 899.0
+234.66878 497.5
+238.67076 600.7
+256.90906 544.1
+261.15912 1392.6
+261.89117 553.5
+270.92328 556.5
+271.00131 513.1
+280.19858 692.9
+286.67331 1081.0
+288.20248 1639.5
+306.28879 550.8
+314.19025 3415.8
+314.52441 1551.6
+334.71759 518.2
+337.86887 4195.3
+338.20325 2144.8
+342.29169 572.4
+346.71149 542.0
+347.65561 547.0
+352.21320 558.1
+359.87506 710.1
+377.87903 523.3
+383.55380 1208.6
+383.88684 726.5
+386.09143 662.3
+390.20093 1259.1
+393.77707 519.8
+396.88580 1150.1
+397.22131 1285.4
+399.47275 615.7
+406.53104 543.9
+408.47089 1157.4
+409.22198 2666.3
+409.47400 1929.7
+409.72443 962.5
+412.97385 2872.4
+413.22510 2723.4
+413.47729 1010.9
+413.72305 2902.9
+413.97580 1458.2
+414.22354 696.0
+418.22659 12965.9
+418.47769 11778.2
+418.72879 5245.8
+418.97830 1354.2
+420.56717 1004.6
+421.56668 885.9
+442.83282 554.5
+445.24966 744.5
+452.17877 788.1
+464.57928 13360.5
+464.91339 12416.8
+465.24716 3261.1
+465.58212 805.9
+470.58322 7675.1
+470.78082 5420.7
+470.91769 4770.6
+471.25784 2025.5
+471.28036 3142.7
+471.78146 1012.5
+476.78867 1017.5
+485.58670 732.8
+488.25818 18207.0
+488.59189 11261.2
+488.92679 5441.4
+489.26157 1274.9
+494.26117 12915.1
+494.59598 10816.2
+494.93054 4563.4
+495.26422 1555.4
+506.29907 3766.4
+506.80087 1878.7
+508.27747 4913.5
+508.61221 2332.1
+508.94492 2293.4
+515.86359 603.0
+519.63873 545.4
+526.60498 840.6
+531.95618 7270.1
+532.29047 6098.0
+532.53546 2196.1
+532.62695 1965.5
+532.95544 884.7
+535.90845 610.9
+539.30042 594.0
+539.81177 743.9
+540.31354 675.8
+576.29437 3378.4
+576.79395 2195.4
+577.29803 761.1
+630.85498 544.8
+668.15845 625.3
+676.84930 1009.2
+677.83594 1358.8
+730.33588 1099.4
+731.34430 745.3
+755.16071 703.7
+795.66492 1032.2
+849.93250 582.7
+873.31360 696.1
+996.88776 662.7
+1057.17676 764.8
+1198.19824 3336.5
+1235.63525 662.6
+1288.92139 664.2
+1426.43213 716.2
+1628.20313 611.4
+1733.72681 585.4
+S	1222	1222	417.7313396
+Z	4	1666.89406
+112.51739 3328.8
+120.67191 3775.9
+121.76691 3218.3
+121.79971 15981.0
+122.01106 3291.4
+146.93018 4424.5
+147.89366 3053.4
+149.54996 4520.9
+157.61148 4658.2
+163.65172 3841.6
+165.78146 3317.8
+171.63641 3980.1
+173.99603 3431.1
+178.84756 3915.6
+197.70801 4107.8
+198.91768 4783.3
+199.20920 4453.9
+199.22221 3292.5
+199.24184 3803.3
+199.28839 10531.9
+199.30304 14788.2
+199.31963 4725.5
+199.37411 3137.7
+199.39868 4049.7
+205.55865 3248.1
+207.16409 4334.6
+212.23631 3679.9
+215.84071 3271.5
+225.97755 3137.9
+242.02760 3573.0
+259.93634 3478.8
+264.30334 3603.0
+266.17642 3012.6
+288.20233 34608.5
+297.47644 3252.7
+304.28201 3093.2
+327.32431 3820.9
+336.45200 4261.2
+350.27786 5368.1
+355.00085 3475.8
+384.78732 3700.9
+387.27100 19417.9
+406.22717 6325.6
+456.50217 3460.4
+463.91647 4671.1
+464.24789 3653.1
+476.76422 4485.6
+477.35507 3369.5
+500.76794 13207.3
+532.48181 8169.2
+549.19238 4522.5
+549.77179 3751.9
+552.58771 3287.6
+556.04797 3708.2
+576.29376 13812.5
+576.79553 8501.6
+579.22443 3374.3
+630.43970 3918.1
+640.81488 44854.4
+641.31714 29767.0
+641.81561 12673.1
+795.66052 5970.9
+799.88837 3372.5
+876.81421 4208.9
+922.18665 2950.1
+940.81183 3861.9
+1020.85516 4236.0
+1057.26575 5160.9
+1067.53027 3701.9
+1198.07800 15313.8
+1233.01331 3441.2
+1352.29810 4129.2
+1525.49194 3174.2
+1539.58752 3634.4
+1557.66113 4318.8
+1603.00586 4765.2
+1636.41223 3882.7
+S	1223	1223	797.1591566
+Z	5	3980.75666
+210.34975 521.5
+254.45714 670.1
+271.90045 616.6
+302.85043 680.1
+324.14532 638.9
+416.72430 630.6
+442.63754 585.8
+448.66208 610.1
+513.74554 596.4
+532.54004 1913.8
+548.43707 681.4
+560.71893 615.3
+574.77118 623.3
+622.37714 569.4
+661.56134 725.3
+674.42084 595.2
+735.97424 1413.7
+774.33722 1450.3
+774.53979 1845.7
+774.73816 1666.0
+774.93860 1268.3
+775.13141 770.5
+795.66809 1361.1
+858.12537 820.3
+862.42041 823.8
+890.12061 1000.6
+890.37006 934.2
+893.43103 805.3
+918.39740 1132.5
+922.39984 877.3
+943.64807 740.5
+968.42914 789.5
+992.14636 563.9
+998.41888 658.0
+1057.21033 1176.4
+1198.20300 3328.5
+1276.00293 594.2
+1578.65601 664.3
+1597.87988 789.7
+1624.04089 718.9
+1659.49805 673.6
+1879.09924 2129.9
+1879.47229 19759.1
+1879.86572 2033.2
+1907.05273 7170.2
+1918.73694 830.1
+1930.58984 1104.0
+S	1225	1225	1879.95240793
+Z	3	5636.582
+Z	2	3758.057
+507.97348 666.8
+532.53351 1005.9
+532.57648 1256.2
+565.07288 633.8
+587.09814 586.7
+651.54034 693.9
+667.63300 616.6
+795.67255 1161.7
+909.09387 729.6
+911.76239 627.7
+1105.83655 698.5
+1188.23242 840.9
+1198.20654 2921.5
+1198.34399 1482.5
+1488.89648 908.8
+1513.88159 610.5
+1777.76245 882.6
+1879.03516 728.5
+1879.53699 19799.9
+1880.16235 803.0
+1906.34119 694.8
+1907.01111 7380.6
+1930.59656 845.0
+1980.32788 626.9
+S	1226	1226	436.2381146
+Z	4	1740.92116
+110.97216 661.6
+113.72671 576.6
+118.56476 601.1
+120.87440 557.0
+121.79745 959.8
+121.80198 2629.0
+121.80679 628.3
+122.81632 578.9
+126.67196 586.0
+130.52084 543.2
+131.20349 573.4
+133.14185 913.0
+134.46266 565.1
+135.61705 552.6
+161.63287 575.0
+166.48999 569.3
+168.37558 516.7
+191.65677 589.9
+198.91827 938.7
+199.20404 741.4
+199.23141 1172.0
+199.25203 638.7
+199.28304 1182.6
+199.30249 2520.3
+199.31158 1427.4
+199.33571 683.4
+199.40034 894.7
+199.41071 661.9
+215.36470 601.9
+229.33676 532.3
+231.82616 540.7
+233.16389 7465.1
+234.16695 1101.5
+257.27335 557.9
+261.15775 1816.4
+286.67368 1501.2
+288.20206 2601.3
+296.87183 606.3
+314.18924 3000.7
+314.52423 1401.4
+337.86813 4494.6
+338.20230 1146.6
+350.28409 605.8
+384.53094 740.6
+384.86713 756.4
+387.27130 1432.6
+396.88943 930.2
+397.21896 883.3
+408.47086 762.0
+409.22256 2976.1
+409.47247 2844.6
+409.72318 2253.8
+410.72064 630.3
+412.97369 2609.3
+413.22443 3353.3
+413.47501 1188.0
+413.72302 2773.4
+413.97513 2388.2
+414.22626 1208.3
+418.00180 512.3
+418.22699 14409.6
+418.47754 10523.4
+418.72791 5717.7
+418.97971 1645.0
+421.56500 1618.5
+421.89883 844.7
+453.55396 553.7
+463.37009 611.7
+463.75613 626.3
+464.57941 15345.9
+464.91336 13150.1
+465.24759 5735.7
+465.58350 929.2
+470.58258 8674.0
+470.78067 5429.0
+470.91766 5342.5
+471.28067 3330.8
+471.78262 1040.9
+482.59247 896.2
+485.24695 719.6
+488.10065 578.2
+488.25766 13095.3
+488.59216 11575.7
+488.92624 5262.7
+489.26035 1176.8
+494.26163 16226.6
+494.59525 8928.1
+494.93079 3783.0
+495.26624 1224.1
+506.29785 2869.9
+506.79984 1266.9
+508.27774 4981.6
+508.61142 4098.3
+508.94540 1823.3
+531.95636 7636.4
+532.29010 5434.3
+532.56152 1623.8
+532.62561 2605.4
+539.31055 739.9
+576.29321 3581.5
+576.79395 2749.6
+587.31897 574.0
+601.78943 557.8
+613.31415 892.5
+630.37793 648.2
+640.81665 609.1
+670.81396 605.2
+676.64661 1320.2
+677.83282 3341.1
+678.33606 1733.4
+678.84485 676.1
+730.34277 1025.5
+795.66559 1238.9
+1003.11096 506.0
+1003.18927 564.7
+1057.25745 943.7
+1198.25317 3175.8
+1204.34583 580.5
+1304.12634 614.9
+1460.24060 558.8
+1542.45178 579.4
+1557.38416 607.6
+S	1227	1227	1907.43824127
+Z	3	5719.039
+Z	2	3813.029
+532.54498 1418.5
+645.39203 656.7
+676.15601 642.3
+676.61682 1341.0
+883.74542 618.8
+1057.21497 957.7
+1136.99182 551.3
+1157.96094 624.0
+1198.21802 3453.0
+1206.83777 623.9
+1877.02808 864.4
+1878.94287 1363.6
+1879.46924 19957.1
+1880.01636 1197.3
+1881.02917 876.5
+1907.01318 7195.3
+1907.26587 612.1
+1918.61963 777.4
+1930.52942 923.5
+S	1229	1229	417.7314621
+Z	4	1666.89455
+105.27660 551.5
+105.91914 495.0
+113.45353 611.6
+113.91253 603.8
+120.65491 638.9
+121.79993 2268.8
+123.05554 666.8
+127.90326 556.2
+143.95462 567.5
+145.89342 598.1
+150.66502 725.5
+152.66275 547.6
+155.39601 525.9
+160.05063 545.7
+163.71153 551.2
+165.78296 691.0
+165.88829 556.6
+166.76971 595.5
+167.41713 697.1
+175.97562 674.3
+185.15964 608.9
+188.68443 596.9
+197.67981 669.3
+198.91713 947.1
+199.20473 589.0
+199.21947 649.6
+199.28452 1519.3
+199.29227 1464.9
+199.30525 1747.6
+199.38025 542.8
+199.39275 867.6
+199.41212 637.3
+199.81094 536.7
+215.75441 563.7
+237.50749 562.5
+260.46664 626.1
+282.62296 668.4
+300.90912 576.9
+349.85272 587.7
+350.26785 718.6
+375.10495 649.7
+381.32574 612.4
+405.67685 627.2
+410.10730 557.4
+482.60815 594.9
+532.55420 2054.7
+543.83032 572.1
+549.11029 611.3
+630.35260 929.5
+676.64502 1130.1
+697.23926 593.0
+795.65820 960.6
+800.43951 726.5
+961.40967 619.2
+1160.18567 640.5
+1198.23999 3608.0
+1221.84143 621.1
+1319.17285 661.5
+1369.05420 644.8
+1418.64783 697.2
+1525.29285 958.7
+S	1230	1230	436.2405871
+Z	4	1740.93105
+112.21665 10308.7
+113.44177 8874.0
+118.13847 10235.6
+120.25153 10321.9
+121.42648 8892.1
+121.79963 41624.5
+121.89816 9267.7
+123.51547 9504.9
+130.69388 10709.1
+131.02161 10068.8
+138.73845 10387.0
+146.90169 9627.1
+165.78142 12799.7
+176.73022 8924.0
+187.96257 9912.8
+198.91771 13739.6
+199.19054 21266.6
+199.20166 9979.4
+199.22575 9990.5
+199.28938 40514.9
+199.29921 20026.8
+199.30853 13928.3
+199.32126 12000.3
+199.38339 14817.9
+199.39757 11212.7
+215.50862 8639.3
+217.81680 8921.2
+249.83125 10687.8
+253.41551 9911.4
+269.16876 9252.1
+280.14346 10328.7
+297.79306 10031.5
+299.54779 15796.0
+368.62469 9942.1
+377.41827 9643.7
+383.18460 10415.3
+413.20554 11090.9
+427.48715 11200.7
+461.79193 9537.1
+469.83380 9949.3
+489.30899 9413.6
+491.55521 9262.1
+497.06119 10012.8
+532.52979 36961.4
+533.51178 9855.3
+604.77698 8273.0
+676.57623 14094.8
+692.90149 12353.8
+795.67096 16865.9
+800.93286 9012.3
+1010.48462 9937.2
+1057.15820 19895.1
+1155.52771 10487.1
+1193.25232 10117.8
+1198.18164 54209.9
+1578.99585 10351.5
+1716.16687 19310.1
+1716.84021 9446.1
+1740.83728 8865.3
+S	1231	1231	739.752407933
+Z	3	2215.982
+Z	2	1477.657
+198.13617 530.9
+198.91652 1357.4
+199.06781 664.1
+199.24330 696.4
+199.27547 1688.2
+199.28995 1425.0
+199.29707 2081.9
+199.30583 2455.6
+199.32445 699.2
+199.39494 879.6
+201.16920 527.3
+203.35541 504.1
+210.99370 618.4
+214.49228 653.0
+218.53450 611.4
+240.99905 608.5
+243.30988 667.9
+244.22066 619.4
+244.41530 539.9
+263.43210 675.6
+268.98438 559.5
+289.55609 595.4
+297.22003 594.2
+323.39233 641.2
+342.24121 719.0
+369.01602 712.6
+378.02509 562.7
+381.33600 800.3
+403.40424 675.3
+427.49902 822.3
+453.33615 568.7
+467.18427 591.6
+476.17722 701.5
+532.51404 1918.0
+569.26514 873.2
+581.22021 1999.8
+601.27814 614.5
+607.46606 757.6
+610.92596 575.4
+629.63721 767.4
+671.41949 785.2
+676.60144 1281.0
+677.80432 1067.6
+678.30731 1473.7
+686.81036 1649.1
+687.30920 1276.1
+687.80811 849.8
+709.27948 3107.1
+710.28668 954.7
+719.35083 618.9
+721.32147 1185.6
+721.81696 1840.4
+722.31415 1269.3
+769.38159 2846.9
+770.38409 1109.2
+795.66211 1035.4
+807.14728 673.8
+897.43610 3818.8
+898.43652 2427.6
+1028.47595 3467.2
+1029.47473 1363.1
+1057.17883 861.4
+1125.67200 604.3
+1129.53247 1236.2
+1130.53186 1040.4
+1139.43750 667.4
+1140.81592 722.5
+1198.15125 3557.6
+1240.79468 606.8
+1244.54846 1451.8
+1245.54480 873.5
+1273.50964 805.0
+1338.20703 622.3
+1388.27502 677.2
+1525.25842 772.6
+1750.20679 654.1
+1751.96045 763.6
+1868.52185 684.9
+1879.42529 20720.6
+1906.99768 7005.9
+1907.31543 1657.2
+S	1233	1233	417.7305471
+Z	4	1666.89089
+107.46447 685.6
+120.08009 3273.1
+120.58012 527.4
+121.80148 1966.7
+125.51620 521.8
+128.57704 547.1
+129.54428 550.1
+134.26146 627.6
+141.84911 698.4
+147.43779 576.3
+147.84348 522.4
+153.92049 606.3
+159.20586 577.6
+167.76196 552.5
+169.48732 545.8
+173.98695 659.2
+175.11807 1153.4
+175.49411 543.6
+181.49500 579.8
+184.31778 664.8
+198.91774 1096.7
+199.19141 853.5
+199.22946 836.8
+199.25980 1217.9
+199.28148 971.1
+199.29260 2914.7
+199.39276 531.5
+199.56355 680.3
+202.59082 589.1
+210.88699 598.2
+219.14917 861.4
+227.09578 579.9
+233.16423 25466.9
+234.16757 3296.6
+239.99620 611.6
+249.09727 789.9
+255.27052 659.4
+261.15930 3356.3
+271.14984 560.0
+273.16071 646.1
+288.20245 15750.1
+289.20737 1278.1
+304.18130 557.3
+314.18314 693.6
+337.86874 20273.3
+338.20297 9047.7
+338.53683 3498.5
+342.22415 573.5
+370.70639 1140.6
+375.20096 1636.4
+377.54907 863.1
+378.13974 3144.8
+381.34332 652.6
+383.55435 5537.3
+383.88898 2820.9
+384.53204 3995.5
+384.86618 1617.2
+386.28494 639.7
+387.27017 8336.7
+388.27255 1579.9
+390.71255 2308.8
+390.96259 1188.6
+391.21457 827.5
+396.15152 2857.3
+399.47330 1346.2
+406.22552 2081.5
+427.53445 591.0
+439.22964 1235.0
+439.56488 1299.6
+442.25183 7342.2
+442.75357 2474.3
+443.25369 765.0
+445.23434 1494.3
+454.25137 802.7
+457.57458 1981.3
+457.77231 1039.2
+457.91055 1606.8
+458.23880 1239.5
+460.90271 706.7
+463.25104 753.7
+463.57941 72899.2
+463.91373 53588.7
+464.24777 21472.0
+464.58078 10441.7
+464.91418 2887.5
+469.58282 59126.8
+469.91702 43112.6
+470.25119 17509.8
+470.58429 6860.2
+470.78156 2415.5
+470.91895 1907.4
+471.79169 796.2
+476.78442 651.8
+481.01913 574.2
+495.27164 1026.8
+500.76907 6337.6
+501.27109 2276.3
+501.77145 968.1
+506.29883 14605.8
+506.80063 7962.1
+506.95309 748.6
+507.27765 33908.0
+507.61163 25668.1
+507.94559 11505.6
+508.27954 4960.0
+508.61234 1737.5
+508.74976 596.9
+510.60526 908.5
+510.77902 1885.1
+513.60205 5223.2
+513.93658 3589.8
+514.27240 1402.2
+516.31329 2939.0
+530.88531 546.8
+532.53192 1773.6
+540.77533 1213.9
+549.12408 626.3
+562.18762 600.1
+566.30139 1246.2
+574.83099 932.3
+575.30688 1045.4
+575.81293 651.1
+576.29370 8732.3
+576.79559 4485.8
+577.29858 1225.7
+601.33093 647.3
+607.81213 900.7
+628.30554 1115.1
+630.81818 17655.3
+631.31940 13329.6
+631.81879 4696.6
+632.31995 1487.5
+639.82288 17885.9
+640.32458 8406.5
+640.81543 21425.4
+641.31610 16104.6
+641.81708 5750.2
+642.31842 1248.0
+656.30157 3661.0
+657.30713 1904.2
+676.65021 1537.1
+685.32361 683.1
+690.35034 1044.7
+690.85980 723.2
+696.36523 7075.1
+696.86670 6155.2
+697.36615 2043.3
+697.86426 1108.0
+774.66205 650.6
+786.44232 989.2
+795.66815 826.7
+870.07709 633.0
+883.49524 3674.8
+884.50037 1955.2
+945.88934 586.7
+985.97052 541.7
+1188.14893 796.5
+1198.18457 3278.5
+1276.26196 619.4
+1492.93518 537.1
+1525.35706 693.3
+1651.42688 661.7
+S	1234	1234	436.2397321
+Z	4	1740.92763
+112.02257 635.8
+121.79924 1844.2
+121.80642 774.4
+123.83953 607.0
+132.13284 538.4
+142.80200 578.5
+157.60918 703.5
+160.80649 764.0
+165.78287 653.1
+199.19661 1109.3
+199.25435 677.9
+199.28278 984.5
+199.29533 2635.1
+199.30333 1664.1
+199.31622 1064.4
+199.32486 586.9
+199.39287 771.0
+208.52333 637.7
+219.93921 640.5
+223.00224 577.5
+233.16426 10504.2
+233.58604 620.1
+234.16798 1117.1
+236.32018 567.2
+261.15903 1471.7
+276.17050 879.9
+278.70483 565.8
+280.19391 703.3
+286.67334 1264.4
+288.20251 1542.0
+303.34821 554.3
+313.26907 659.6
+314.19012 4981.5
+314.52423 1744.9
+337.86893 4247.8
+338.20413 1859.6
+342.28769 783.9
+365.67294 861.2
+368.96637 613.6
+373.98047 605.6
+381.21420 536.1
+381.37625 716.6
+383.55521 1560.0
+390.20276 945.7
+395.21347 567.4
+395.85526 1564.7
+396.52731 559.2
+396.88675 1782.3
+397.22089 1317.7
+404.26880 668.4
+409.22122 1794.1
+409.47293 2757.3
+409.72446 910.7
+412.97949 1551.7
+413.22574 2060.1
+413.72415 2730.8
+413.97513 1646.2
+414.22678 1414.8
+418.22705 22351.6
+418.47772 17836.1
+418.72797 5930.8
+418.97952 1693.4
+420.56448 1442.6
+421.56580 2554.7
+421.89954 777.2
+422.25204 927.0
+422.75146 657.1
+452.17679 1158.2
+464.57935 17836.2
+464.91345 15920.7
+465.24841 6147.6
+465.58237 1255.4
+470.58295 11154.0
+470.78049 7063.5
+470.91699 7010.8
+471.25418 3272.7
+471.28232 4094.5
+476.77646 754.2
+479.57919 552.9
+482.67627 647.5
+482.93637 564.8
+488.25781 20709.0
+488.59204 17044.4
+488.92603 5140.2
+489.26129 1682.8
+494.26154 19415.5
+494.59552 11474.1
+494.92999 3979.6
+495.26633 1311.0
+506.29834 3362.0
+506.79971 1653.3
+508.27722 5686.1
+508.61102 5273.0
+508.94540 3601.5
+509.28333 776.5
+531.95636 11460.8
+532.29041 7859.1
+532.50952 1754.1
+532.62585 3587.6
+532.96039 1161.5
+537.78790 741.7
+539.31311 1140.2
+539.80737 727.7
+551.30872 2484.6
+551.81207 1408.7
+574.83179 1153.2
+575.33044 715.7
+576.29297 2250.8
+576.79449 1066.5
+593.27795 1768.3
+593.78204 1709.4
+594.82648 2968.0
+595.32831 3244.5
+630.43732 864.9
+645.31171 722.0
+653.01495 783.4
+676.63556 929.0
+730.33954 1044.6
+763.42859 579.6
+795.66870 980.0
+834.84448 764.7
+877.13275 611.2
+1061.74316 610.5
+1070.96948 651.2
+1107.98462 583.9
+1188.19702 784.0
+1198.13220 3546.0
+1378.02612 608.6
+1525.47229 1002.7
+1718.51831 1310.1
+S	1235	1235	1879.90899127
+Z	3	5636.452
+Z	2	3757.97
+532.54834 1810.2
+571.81702 633.2
+589.13586 612.4
+623.50177 629.0
+630.40973 1047.4
+676.64746 947.3
+731.12665 662.9
+783.60596 826.2
+795.66785 1018.4
+957.15741 650.7
+1018.78156 719.3
+1026.14563 590.8
+1112.42700 647.5
+1115.77112 682.1
+1198.22131 3185.0
+1599.12390 514.3
+1717.61499 1384.2
+1785.34485 688.4
+1878.64514 975.2
+1879.15295 2139.0
+1879.55432 19571.7
+1879.95007 2467.3
+1880.71155 779.9
+1890.20386 813.3
+1907.05176 7701.5
+1930.59802 1036.6
+1994.86865 742.9
+S	1237	1237	1879.9708246
+Z	2	3758.094
+Z	3	5636.637
+532.52289 1600.1
+549.14288 724.3
+554.75507 597.8
+630.39520 921.9
+670.45551 683.0
+676.63696 1174.5
+758.68872 607.7
+795.66577 850.1
+904.73383 675.9
+1021.10553 674.1
+1052.14600 590.0
+1057.24707 761.7
+1175.63147 679.9
+1198.17065 3450.3
+1256.04138 529.6
+1525.37317 771.4
+1699.26477 714.6
+1779.20728 685.5
+1853.18018 736.7
+1871.03137 839.4
+1876.54956 619.3
+1878.57605 1345.8
+1878.74316 1318.6
+1878.96521 1269.8
+1879.52466 18863.6
+1880.08984 1480.7
+1880.49268 1375.9
+1883.81189 621.8
+1907.06030 6808.8
+1954.20020 711.1
+S	1238	1238	1907.5168246
+Z	3	5719.275
+Z	2	3813.186
+532.55188 1970.7
+558.12512 567.2
+588.56201 607.7
+676.65875 934.5
+684.84613 666.3
+696.33588 611.8
+795.64893 1006.1
+942.86145 666.8
+1057.28162 837.4
+1198.23669 3462.7
+1283.25488 779.7
+1291.84778 811.0
+1338.71741 628.6
+1396.31934 610.1
+1432.57446 859.7
+1509.23633 584.9
+1611.04944 766.9
+1875.38757 695.2
+1878.24438 860.6
+1878.54504 1678.0
+1878.91577 750.7
+1879.15405 3069.8
+1879.59326 18532.2
+1880.04553 3320.7
+1880.61377 986.2
+1880.91711 779.5
+1881.08337 1002.8
+1883.57813 788.6
+1907.08252 7425.9
+1918.64856 706.2
+1930.65796 793.1
+S	1239	1239	1198.62740793
+Z	3	3592.607
+Z	2	2395.407
+334.74139 582.6
+381.32697 678.6
+470.80685 656.3
+491.76404 586.3
+518.25781 573.6
+528.84607 744.7
+532.59058 1632.7
+549.36810 591.9
+599.82379 652.4
+630.35596 646.3
+673.86566 575.5
+676.66656 911.4
+795.66302 921.5
+1048.48608 654.1
+1057.29822 910.2
+1198.30896 3266.6
+1342.45520 661.0
+1649.34302 677.3
+1777.36414 684.6
+1816.30542 686.8
+1877.44641 670.9
+1878.33582 732.2
+1878.59363 759.7
+1879.28638 5757.0
+1879.61670 18321.3
+1879.97571 4049.9
+1880.73999 1095.9
+1881.01440 1139.8
+1907.01099 7304.3
+1930.47400 906.9
+S	1241	1241	730.2358246
+Z	2	1458.624
+Z	3	2187.432
+198.91612 8379.6
+199.19867 9557.2
+199.22221 5830.4
+199.27451 9382.4
+199.28627 7656.3
+199.29640 32139.7
+199.31593 9817.6
+199.37212 7557.3
+199.39407 9132.9
+201.47871 6529.4
+203.95848 5499.1
+224.03775 7515.0
+242.71120 6405.0
+251.53398 6579.1
+253.39500 5902.1
+255.26430 6944.1
+348.21512 5822.5
+354.19876 6994.3
+364.17316 5913.3
+381.32617 8609.2
+402.11761 6130.7
+402.94763 7017.4
+422.31439 5737.3
+447.47345 5989.9
+468.88376 6954.2
+469.40137 6473.8
+532.54443 18169.1
+532.57501 8123.7
+540.62585 6789.1
+555.17603 6949.7
+630.34479 10645.6
+676.65741 9895.2
+686.90912 6369.9
+688.81940 6408.7
+758.12573 7485.0
+795.66083 8746.6
+829.84161 5718.2
+917.16382 6495.4
+973.58636 6770.0
+983.70325 6435.7
+1149.43567 6632.0
+1198.21826 31588.0
+1201.48401 5835.6
+1250.48926 6400.1
+1385.81958 6508.7
+1398.64905 6169.9
+1434.29553 5880.8
+1499.33887 6627.5
+1525.67163 6447.3
+1539.22791 7425.0
+1878.62695 8772.5
+1879.33032 45715.4
+1879.58972 191049.0
+1880.61853 11432.6
+1881.28247 9448.2
+1907.05127 74593.7
+1918.62769 7702.4
+1930.42139 9767.9
+1931.82300 8408.1
+S	1242	1242	436.2396721
+Z	4	1740.92739
+120.08063 729.0
+121.80158 2520.0
+124.52299 732.7
+129.25699 511.9
+138.26135 531.3
+141.64940 571.2
+144.28587 539.9
+150.23483 684.8
+157.59792 680.7
+168.54041 613.7
+169.48856 622.2
+179.00864 585.8
+181.67131 509.1
+183.24864 552.5
+193.80304 508.7
+197.56248 541.3
+198.91141 748.4
+199.18398 803.8
+199.26462 728.9
+199.27162 1199.1
+199.28343 2624.0
+199.29190 1527.5
+199.30484 855.8
+199.37985 1116.2
+203.85480 571.3
+204.73181 559.5
+211.41841 535.1
+216.65613 538.8
+217.35329 563.2
+231.86075 663.2
+233.16432 13116.8
+234.16774 1326.4
+249.49779 612.1
+258.26385 509.9
+261.15887 2331.4
+281.41986 570.5
+283.01001 547.9
+283.54779 510.7
+314.19028 7546.6
+314.52463 2384.9
+315.76770 588.3
+337.86877 6811.1
+338.20334 2691.7
+342.26724 602.8
+343.17380 654.7
+360.21100 1349.1
+365.67075 892.0
+366.53754 672.4
+367.15311 621.7
+379.11960 630.6
+381.34500 713.8
+383.55750 1034.1
+390.20105 1495.6
+394.78131 743.2
+395.85522 1834.0
+396.88712 2161.2
+397.22040 1892.6
+409.22208 2509.4
+409.47348 2790.4
+412.97449 1309.0
+413.72409 2730.5
+413.97495 3827.6
+414.22519 1652.8
+417.98062 603.0
+418.22699 27748.5
+418.47775 21621.5
+418.72839 9013.0
+418.97763 2796.2
+420.56702 1328.3
+421.56470 1640.7
+421.89993 1786.0
+422.25226 864.5
+422.75247 709.3
+452.17819 914.9
+457.90988 1044.3
+463.58057 2377.6
+463.91440 2397.5
+464.24365 761.0
+464.57953 26269.4
+464.91348 20601.2
+465.24802 7097.7
+465.58154 2348.4
+466.97931 589.9
+470.18362 661.5
+470.58279 11016.7
+470.78064 9629.1
+470.91766 9031.7
+471.25287 4050.6
+471.28247 5847.7
+471.78342 2129.5
+487.91269 765.0
+488.25803 28364.5
+488.59253 19448.3
+488.92664 8599.4
+489.26169 1905.5
+494.26172 24767.3
+494.59622 14578.8
+494.92993 5528.6
+495.26501 1417.6
+503.75171 789.6
+506.29904 5207.5
+506.79800 1298.6
+507.30191 1174.6
+508.27744 9839.6
+508.61160 7865.6
+508.94525 5417.7
+509.27679 794.9
+531.95642 11138.7
+532.29047 8632.5
+532.55804 1732.6
+532.62555 5592.0
+532.96136 1018.3
+535.61658 794.6
+537.79004 6754.2
+538.29108 3842.8
+538.79401 942.3
+539.81244 1432.4
+551.30670 1449.0
+551.81140 1061.5
+555.57990 600.9
+573.60028 680.2
+574.83191 1106.6
+576.29413 1488.6
+576.79187 1451.2
+587.32428 2353.1
+587.82642 1698.3
+588.33124 788.9
+593.28394 1800.8
+593.83185 722.1
+594.82904 1540.1
+595.32745 1600.2
+630.38049 647.5
+640.82452 600.3
+654.99664 684.5
+676.60645 1145.4
+730.33984 1935.5
+744.23395 548.6
+784.98218 852.0
+795.64606 1333.4
+837.48047 730.4
+956.56342 555.9
+975.86749 641.0
+1057.20447 864.6
+1074.37512 638.9
+1128.98755 570.6
+1188.17761 859.0
+1198.25049 3129.1
+1331.28601 567.6
+1345.81641 611.7
+1457.94470 737.9
+1503.44275 659.1
+1536.76306 660.1
+1540.22900 575.3
+S	1243	1243	417.7304246
+Z	4	1666.8904
+104.55732 512.7
+105.66521 619.6
+106.03096 544.3
+111.54921 549.1
+111.83946 612.0
+115.54043 548.6
+119.99319 568.4
+120.73204 575.7
+121.79919 2338.5
+133.15208 959.2
+134.34610 546.9
+136.07855 649.4
+138.14503 668.3
+141.03229 525.6
+142.08398 637.3
+151.14386 606.5
+152.07848 563.3
+175.11850 3186.8
+179.84419 531.2
+187.21123 578.2
+193.09129 541.5
+193.67900 536.9
+198.91634 1048.9
+199.19604 1170.2
+199.29291 3464.2
+199.35449 587.0
+199.39076 1333.3
+199.42532 585.4
+210.95041 537.6
+230.36913 552.8
+233.16418 5530.0
+241.84042 523.7
+261.15930 966.5
+288.20230 46376.2
+289.20584 4840.4
+308.91177 550.0
+322.51447 705.7
+341.14630 703.2
+350.28427 729.5
+368.12158 589.6
+370.70770 637.9
+374.08551 830.2
+375.20099 2807.3
+375.53473 2072.5
+384.53168 7277.2
+384.86621 5597.9
+385.19934 887.5
+387.27017 23072.3
+388.27399 3864.5
+390.51376 608.7
+390.71503 925.4
+390.96594 1111.6
+392.22763 2045.6
+392.73038 843.4
+406.22507 8466.1
+406.72659 3343.2
+423.04218 546.8
+427.87680 880.3
+428.73511 689.2
+429.23022 599.5
+439.22974 2456.2
+439.56595 1857.7
+439.89993 1533.9
+445.23355 3842.1
+445.56729 1974.4
+451.23669 4333.9
+451.57010 1782.2
+451.90829 1701.6
+457.57568 5325.6
+457.90997 4755.0
+458.24429 1744.2
+460.56937 1849.9
+460.90222 2062.4
+461.23804 912.8
+463.57901 5788.2
+463.91373 4728.9
+464.24835 1836.2
+464.57785 2717.0
+464.91373 629.1
+469.58261 6904.5
+469.91724 4733.7
+470.25113 1383.3
+482.67227 614.7
+495.26913 2410.1
+495.60425 2262.2
+495.93976 1360.7
+498.30112 1553.8
+501.27750 1261.1
+502.75955 649.7
+503.26492 737.5
+507.27933 2028.9
+507.92963 808.6
+511.77014 1364.2
+512.27771 742.2
+513.60150 1630.0
+513.93512 1609.8
+516.31232 3543.0
+517.31561 761.0
+532.60260 1760.9
+540.77271 654.5
+549.17035 860.2
+567.28088 688.9
+574.07935 637.9
+576.29376 20529.1
+576.79510 11724.0
+577.29547 4149.4
+577.79437 812.3
+584.27240 1056.1
+596.85602 596.4
+609.87781 620.6
+631.32196 798.0
+631.80890 5536.3
+632.31213 3699.4
+632.81091 1256.7
+639.82489 658.3
+640.81476 63121.3
+641.31641 41235.9
+641.81763 16355.6
+642.31940 3005.4
+676.63776 1067.2
+683.35034 1014.1
+690.34912 2630.1
+690.85345 2150.4
+691.34888 961.3
+716.43542 600.3
+723.37445 1155.4
+731.13403 676.4
+737.33759 555.5
+747.37299 645.4
+795.64996 1012.6
+810.48511 565.7
+825.89404 675.9
+918.03662 539.9
+1043.03638 582.8
+1048.99280 703.4
+1057.25110 894.1
+1057.88220 563.5
+1132.06335 557.3
+1152.53040 1035.0
+1191.59985 558.7
+1198.35144 3429.0
+1225.48096 563.0
+1414.57825 614.6
+1558.88342 669.4
+1606.53406 631.0
+S	1245	1245	417.7309446
+Z	4	1666.89248
+103.25966 586.3
+103.51629 599.9
+108.18844 510.4
+108.94704 547.4
+108.98808 527.2
+109.65741 561.1
+111.13352 739.5
+111.72950 680.6
+112.31875 567.2
+114.90310 612.4
+120.70521 526.5
+121.79980 2108.3
+125.34238 563.3
+139.19467 601.9
+139.48114 527.7
+141.99863 592.8
+145.98323 502.0
+146.91747 692.4
+146.94658 574.7
+157.60022 608.5
+171.63710 562.9
+175.11830 4838.3
+179.25627 564.3
+193.37631 593.6
+198.91733 875.7
+199.01932 600.2
+199.19530 835.5
+199.26649 1120.6
+199.29308 3618.7
+199.32031 844.3
+199.39064 1470.9
+214.51009 641.9
+222.45235 552.0
+230.20428 527.6
+231.79770 575.5
+233.16425 5677.7
+237.40244 514.2
+238.54558 584.5
+242.61304 531.5
+255.28445 844.1
+261.15936 1087.4
+264.83151 655.0
+271.17639 833.1
+288.20230 62820.5
+289.20624 6839.0
+294.25128 553.0
+303.78268 581.1
+322.51047 669.2
+338.01093 632.5
+339.64221 517.2
+340.06741 721.5
+341.14383 802.8
+350.27673 787.2
+365.15814 504.3
+370.70544 1042.6
+375.20016 4753.1
+375.53445 2715.2
+381.35025 809.2
+384.53183 8934.6
+384.86673 6749.6
+385.20084 2675.8
+387.27014 33384.6
+388.27402 5127.2
+390.71262 941.9
+390.96326 1790.6
+392.22794 3535.5
+392.72836 2177.7
+393.22836 813.8
+405.64557 548.3
+406.22513 11683.0
+406.72781 2572.4
+427.54654 798.8
+427.87811 971.0
+439.23053 1959.6
+439.56332 1990.0
+439.84991 567.8
+439.90067 2702.2
+440.23019 934.8
+445.23386 4795.9
+445.56842 2449.4
+445.89908 1298.0
+446.21536 1074.7
+446.72055 1013.9
+451.23663 6919.7
+451.57144 5972.6
+451.90588 2190.1
+452.23776 813.0
+454.56143 730.5
+457.57584 10771.2
+457.91040 5722.5
+458.24405 3694.6
+460.56808 4751.8
+460.90207 2220.4
+461.23843 1312.8
+461.87964 536.1
+463.57977 9641.8
+463.91373 6737.9
+464.24866 2372.0
+464.58243 1904.4
+464.91592 1006.1
+469.58279 10484.1
+469.91705 5804.1
+470.25302 1670.2
+476.76102 713.5
+482.65146 710.5
+485.22250 638.5
+495.27130 4045.3
+495.60431 3965.4
+498.30316 2301.8
+501.27634 1606.9
+501.58728 2737.4
+501.61865 1249.0
+501.92612 1901.9
+502.26083 1353.0
+502.76089 1083.1
+507.27811 3246.4
+507.59195 1620.6
+507.92780 1359.6
+508.27914 647.4
+510.74133 1093.4
+511.77307 1425.6
+512.25201 1603.8
+513.60242 2743.6
+513.93561 1720.0
+514.27423 854.0
+516.31189 5177.1
+517.31628 1659.1
+532.54999 1693.0
+538.50848 647.4
+541.30811 660.1
+555.13959 682.9
+567.27893 1905.0
+567.78406 1170.6
+576.29395 27521.3
+576.79547 17738.1
+577.29602 4863.4
+577.79602 801.0
+584.26904 1249.5
+584.75232 727.9
+612.80334 795.1
+616.82349 785.9
+621.81000 745.8
+630.81555 1062.8
+631.32544 809.3
+631.80945 6306.0
+632.31104 4465.0
+632.81427 1505.9
+639.82214 757.7
+640.81464 87935.7
+641.31604 58514.6
+641.81769 22890.7
+642.31836 4270.3
+653.05927 635.8
+666.34711 820.5
+672.72992 601.6
+676.60822 1098.1
+683.34985 1838.8
+684.35535 1053.3
+690.34894 5306.9
+690.84833 2347.6
+691.34985 1251.1
+723.37451 1099.2
+763.27783 725.2
+775.47827 608.4
+907.48352 556.9
+947.37097 642.5
+1023.48407 843.9
+1024.47974 769.0
+1076.95618 525.2
+1113.78796 536.8
+1153.53149 756.8
+1198.22852 2997.9
+1318.52856 708.8
+1404.24744 651.2
+S	1246	1246	730.3978246
+Z	2	1458.948
+Z	3	2187.918
+198.91693 756.6
+199.19188 728.1
+199.19705 673.4
+199.25543 684.6
+199.27406 811.0
+199.28519 1912.2
+199.29852 1136.7
+199.30612 1241.5
+199.31937 834.3
+207.46777 562.2
+208.57951 597.2
+211.20851 570.9
+212.55327 625.7
+222.08638 1102.1
+223.06940 803.8
+229.12898 2268.4
+233.60149 569.9
+234.21616 603.4
+234.36990 628.9
+240.09795 3386.9
+246.15572 59805.4
+247.15945 5725.0
+264.12219 540.7
+271.89966 635.7
+274.44836 511.8
+277.11801 3771.3
+285.10373 673.2
+301.11404 2453.3
+309.07932 673.2
+311.13446 6220.6
+328.12860 4225.7
+334.65775 1179.6
+343.66306 1236.6
+345.15512 4537.3
+355.13763 627.1
+356.12421 2108.7
+361.18250 3032.5
+368.15588 1691.3
+368.39474 627.7
+372.15009 790.8
+372.17450 1151.1
+373.15018 14685.2
+374.13553 5145.6
+375.13831 1455.8
+381.18875 1078.1
+392.14435 18780.8
+393.14865 3241.9
+408.15057 1512.8
+412.70300 4653.9
+413.20737 1823.4
+421.70862 9127.6
+422.21024 3624.8
+422.71002 1035.1
+423.16119 1249.5
+425.17801 1978.3
+439.15967 1182.3
+441.17346 2083.2
+450.98407 660.3
+455.19705 706.6
+457.16998 2995.1
+458.17749 846.4
+462.22906 6570.2
+463.15457 1513.8
+463.23352 1031.7
+470.22034 1159.8
+474.19601 1458.9
+479.22144 5361.9
+479.72369 2273.6
+480.18433 1506.7
+485.16635 4182.5
+486.17029 1250.0
+498.19290 5626.7
+499.19604 1101.6
+502.19196 10314.2
+503.19608 2406.2
+510.19699 1219.9
+513.24359 1015.2
+514.22125 753.0
+531.25116 2426.3
+532.45880 599.9
+532.51666 1814.1
+534.74036 2007.5
+535.23987 830.0
+536.17682 2091.6
+537.18011 854.9
+540.20264 4872.8
+541.20697 704.2
+543.74329 2905.2
+544.24347 1099.4
+549.26135 40791.9
+550.26428 10002.1
+551.26758 1957.0
+569.24335 599.6
+570.90045 624.0
+571.21509 1154.6
+579.25220 2729.8
+580.25775 732.9
+582.18152 10709.0
+583.18622 3044.3
+597.26093 7024.0
+598.26367 2450.0
+599.20856 10284.9
+600.18665 7302.0
+601.19373 2664.7
+601.91980 657.9
+611.23920 2263.4
+617.21875 41621.7
+617.27661 2927.5
+617.77856 1537.4
+618.22223 11953.2
+619.22473 2065.8
+632.26996 862.5
+634.94452 1007.0
+638.27197 4886.0
+638.60468 5190.9
+638.93591 2882.2
+639.27039 2267.1
+644.27441 15460.3
+644.60846 12084.5
+644.94318 5803.0
+645.27759 1750.9
+668.30994 2755.9
+669.31036 988.3
+676.64032 1005.9
+681.27783 662.2
+683.30847 780.7
+686.32007 30495.8
+687.32306 10360.1
+688.32172 1865.1
+690.28424 673.0
+690.94830 1593.2
+691.28418 1610.7
+694.27753 3283.1
+695.30341 974.6
+698.27771 1565.1
+702.79535 1469.1
+702.96399 886.4
+703.29761 1875.4
+703.96069 712.3
+706.30042 1300.2
+706.62103 2255.0
+706.95300 1230.4
+707.33386 1028.1
+708.30353 3532.7
+708.96893 1711.5
+709.30682 1975.7
+711.80426 11149.8
+711.96381 2594.6
+712.29651 12441.7
+712.63068 2672.7
+712.80164 3646.9
+712.95825 1374.1
+713.28772 745.9
+718.14246 899.2
+743.34198 6299.3
+744.34381 2248.3
+754.37170 601.7
+771.33063 1287.3
+771.83197 1786.5
+773.30762 2804.9
+780.33795 14819.4
+780.83990 8780.1
+781.33917 4017.9
+795.65930 991.8
+801.85193 684.7
+806.85156 2408.5
+807.34698 2404.3
+807.85748 1389.3
+808.35730 998.4
+815.85736 17435.6
+816.35760 15289.2
+816.86072 7047.8
+817.36249 1976.0
+823.01331 696.1
+824.39941 3403.0
+825.39691 942.5
+835.85760 661.4
+841.31592 800.3
+842.40936 42913.1
+843.41266 18402.5
+844.41681 3663.0
+845.42834 1044.8
+864.37146 2227.1
+864.86224 2976.1
+865.35931 1783.5
+873.37073 13223.3
+873.87079 14137.0
+874.37213 6153.4
+874.87128 2381.6
+875.37561 811.8
+882.37292 11172.0
+883.37433 4056.4
+884.37469 1024.7
+892.35944 776.2
+892.87366 2945.8
+893.37573 3188.1
+893.87592 2711.8
+894.07874 788.2
+894.37860 1610.8
+901.88104 18357.6
+902.38184 17545.2
+902.88293 8715.4
+903.38342 2565.9
+903.88776 787.1
+910.36725 23862.7
+911.36896 9626.3
+912.36981 2438.0
+912.86981 1233.2
+913.37445 1738.9
+913.86243 666.1
+914.37128 657.5
+921.38611 6400.0
+921.88599 7302.6
+922.38501 3975.7
+922.88837 2013.9
+930.39075 47863.1
+930.89197 41650.8
+931.39417 19398.6
+931.89502 6608.0
+932.39063 2461.3
+940.43103 927.9
+945.35822 1150.8
+947.40039 824.7
+947.89716 703.5
+953.87317 1944.3
+954.37164 3154.2
+954.87262 2180.6
+956.90222 3582.8
+957.44141 16766.5
+957.90149 3840.2
+958.44336 6384.9
+959.44012 1741.0
+962.87683 2284.3
+963.37927 1256.0
+963.88495 1146.3
+965.90961 39852.8
+966.41077 36799.0
+966.91156 19421.4
+967.41425 7175.8
+967.91498 2268.1
+971.87720 1096.0
+972.38934 803.6
+979.38800 2554.9
+980.38226 954.1
+988.39435 1598.9
+989.39307 1331.4
+997.39862 8970.0
+998.39911 4630.3
+999.39636 1795.2
+1034.44189 567.9
+1035.92773 1242.2
+1036.42322 1643.0
+1036.91650 736.5
+1057.23608 1061.3
+1068.47119 981.8
+1069.47888 815.1
+1080.43225 3101.1
+1081.43152 1426.4
+1086.47839 2508.5
+1098.44031 2016.7
+1099.45642 965.3
+1110.62231 701.3
+1177.44983 2852.5
+1178.44958 2693.0
+1179.45203 1451.1
+1195.46240 27442.5
+1196.46228 18156.6
+1197.46423 6022.1
+1198.15173 3305.5
+1198.46448 2463.3
+1213.47156 112161.6
+1214.47546 63048.0
+1215.47742 19766.9
+1216.48474 4763.8
+1217.47192 941.6
+1266.49097 683.4
+1284.50684 3976.1
+1285.51428 2004.2
+1314.52380 1153.2
+1531.72607 670.8
+1534.72913 594.8
+1609.26563 635.3
+1614.65088 772.9
+1640.99597 633.6
+1686.66321 966.3
+1768.11414 634.4
+1792.57556 707.0
+1860.06934 675.8
+1878.97412 1840.1
+1879.52502 19503.2
+1879.84949 2054.0
+1880.31421 1809.4
+1881.86853 814.8
+1906.73267 559.8
+1907.07800 6956.7
+1918.60535 851.7
+1930.77954 1243.4
+S	1247	1247	731.066407933
+Z	2	1460.285
+Z	3	2189.924
+194.49106 600.7
+198.91325 745.7
+199.21298 1039.3
+199.25455 747.7
+199.29306 2011.5
+199.30432 1810.9
+199.31200 1516.7
+199.32991 587.4
+199.40277 929.0
+199.41309 773.4
+202.72989 587.6
+212.10309 1159.0
+222.08713 2231.9
+223.07103 1787.1
+228.14436 1063.5
+229.12959 2249.8
+231.20950 558.2
+236.50406 555.6
+238.73001 926.7
+240.09755 4616.8
+246.15591 66739.3
+247.15984 6144.1
+249.12352 669.9
+256.42133 583.6
+259.93832 583.8
+277.11859 3149.7
+301.11423 3201.1
+311.13467 8951.9
+312.13907 1179.2
+323.13388 896.0
+326.14685 623.2
+328.12836 4106.7
+334.65790 902.1
+342.24811 756.4
+343.66437 2781.6
+344.16739 760.2
+345.15585 4119.9
+355.14102 590.4
+356.12393 2246.4
+361.18234 3806.0
+368.15668 3122.3
+368.81262 599.7
+369.15604 747.8
+370.36349 605.1
+372.15155 1123.3
+373.15033 11651.7
+374.13580 4987.2
+375.14120 945.9
+380.15714 841.5
+381.33624 629.2
+382.74930 543.1
+392.14459 18917.9
+393.14807 3219.5
+397.18292 915.9
+401.28925 675.4
+403.70007 873.8
+408.15027 2680.1
+412.70346 4578.8
+413.20584 1348.4
+418.62872 652.0
+421.70935 8372.7
+422.21085 3828.3
+422.70624 662.2
+423.16147 1646.7
+425.17719 3497.5
+439.16479 843.4
+441.17184 2257.4
+457.17169 2866.4
+458.17258 1289.2
+462.23038 7217.8
+463.15854 905.1
+467.80560 634.1
+470.21777 1696.8
+474.19797 1870.2
+479.22211 5359.3
+479.72174 1709.4
+480.18527 1131.6
+485.16580 5155.8
+498.19281 4735.0
+499.19824 866.0
+502.19250 10195.5
+503.19623 2148.6
+510.19971 842.3
+513.23932 943.4
+514.46027 632.1
+522.19019 1204.3
+523.17725 1513.1
+529.09253 677.5
+531.25006 2281.6
+532.51459 2226.4
+534.73834 2383.9
+535.23969 1298.8
+536.17535 1305.2
+537.18011 842.8
+540.20422 8477.6
+541.20856 1807.9
+543.74304 2269.7
+549.26154 42789.0
+550.26501 10040.7
+551.26630 1536.4
+553.20355 774.2
+579.25311 2180.8
+580.25494 838.0
+582.18140 9315.0
+583.18420 3011.5
+597.26117 6388.1
+598.26355 1750.4
+599.20868 9638.4
+600.18774 6348.6
+601.19440 2131.2
+601.92151 807.5
+608.27747 940.6
+611.24164 4432.3
+614.92786 1866.9
+617.21918 39549.7
+617.27722 4056.6
+617.77655 1677.9
+618.22229 11457.3
+619.22437 2024.4
+620.59808 2045.6
+620.93280 1395.2
+626.63440 547.3
+629.60742 671.7
+632.93152 1008.3
+634.93958 908.1
+638.27240 6569.3
+638.60486 6796.8
+638.93787 3157.1
+639.27179 1950.1
+644.27509 24108.1
+644.60950 18769.2
+644.94360 8699.4
+645.27692 3627.5
+665.29364 1318.7
+668.31006 2902.4
+674.93207 661.8
+676.26306 781.9
+676.63428 984.5
+677.25043 672.3
+681.29230 1595.5
+681.96033 656.9
+686.32086 32246.7
+687.32343 8922.0
+688.32196 1453.8
+690.29089 925.9
+690.94977 2437.2
+691.28345 2889.6
+691.62128 1135.1
+691.94177 661.2
+694.27747 4618.5
+695.29224 1105.6
+698.27490 1372.9
+702.80347 1104.2
+703.29578 2447.7
+703.79523 651.5
+705.81488 767.8
+706.28772 1630.5
+706.62091 2359.0
+706.95502 3119.4
+707.30499 1193.2
+707.80762 726.3
+708.30219 2484.8
+708.63690 1830.9
+708.96893 2429.2
+709.30383 3195.0
+709.63861 2212.4
+711.80420 11194.2
+711.96582 4065.9
+712.29773 16155.9
+712.63086 4862.9
+712.80273 2731.2
+712.96423 1078.7
+713.29120 1114.0
+731.08063 922.5
+743.34332 5348.4
+744.34241 1847.7
+755.29803 888.0
+756.29456 707.5
+771.33197 2115.0
+771.83282 2676.3
+772.33087 1110.0
+773.30847 2264.5
+774.31757 811.2
+780.33893 20489.8
+780.83942 17238.4
+781.34192 6353.1
+781.84125 1768.3
+795.64252 941.0
+806.85260 3374.8
+807.35065 3905.6
+807.85236 2630.5
+815.85724 29953.6
+816.35803 23784.2
+816.85968 10515.6
+817.36096 3091.9
+817.86169 1015.9
+823.32330 809.2
+824.39960 3424.3
+825.40405 872.0
+834.81067 679.9
+840.36566 665.0
+841.32202 1272.3
+842.40973 46309.7
+843.41321 16733.4
+843.83618 1363.6
+844.41577 4083.5
+855.85059 681.0
+864.36530 3721.6
+864.86639 4157.8
+865.36194 2219.3
+865.86060 1170.7
+873.37036 21907.3
+873.87097 17644.6
+874.37366 9474.5
+874.87769 2404.7
+882.37390 10612.4
+883.37646 4540.9
+884.36865 1656.1
+890.87341 674.5
+892.35034 1535.6
+892.87482 2997.4
+893.37915 5346.1
+893.87201 3521.9
+901.88129 30608.2
+902.38208 28877.4
+902.88385 13925.3
+903.38409 3736.7
+903.88623 1298.1
+910.36823 20872.4
+911.37018 9052.0
+912.37396 3058.7
+912.87292 1073.8
+913.37946 1306.2
+916.39221 720.7
+921.38544 9311.4
+921.88635 8983.9
+922.38416 5720.4
+922.88562 3299.6
+923.39563 905.2
+928.37097 739.7
+930.39142 66298.2
+930.89276 60854.6
+931.39429 31825.5
+931.89600 10777.7
+932.40027 3283.6
+945.36395 1843.7
+945.85535 1098.5
+946.35059 766.1
+947.40851 732.7
+948.39423 1251.4
+948.88538 968.0
+953.87305 4704.6
+954.37616 5785.1
+954.87097 2974.5
+955.37878 984.5
+956.90399 4764.6
+957.35486 1580.8
+957.44543 13905.3
+957.90582 3564.9
+958.44482 6629.8
+958.90466 817.0
+959.43927 2212.8
+962.88226 4317.2
+963.38104 3169.8
+963.88519 1479.8
+964.39410 976.9
+965.91016 55029.6
+966.41113 54482.5
+966.91187 31330.3
+967.41351 10801.4
+967.91241 3190.5
+969.41058 1191.4
+971.88300 1451.2
+972.38489 1526.5
+979.38641 2118.9
+980.38373 1390.3
+988.40558 1597.0
+989.39935 1209.6
+997.39886 8548.0
+998.40198 4768.9
+999.40875 1063.5
+1011.94525 644.8
+1019.72479 648.0
+1035.92444 2144.3
+1036.41931 2060.8
+1036.93042 1015.4
+1057.23206 904.5
+1060.86414 662.0
+1068.46802 1064.4
+1080.43506 3508.9
+1081.44141 1174.9
+1086.47900 2396.2
+1087.48877 834.5
+1098.44958 1788.3
+1101.47632 622.2
+1170.48193 719.8
+1177.45203 3593.3
+1178.45276 2880.9
+1179.44519 1351.3
+1195.46289 27430.9
+1196.46301 17249.2
+1197.46387 6735.1
+1198.15015 3261.3
+1198.46667 2131.0
+1213.47253 117627.6
+1214.47632 62853.2
+1215.47791 23001.4
+1215.71167 719.8
+1216.48364 4714.8
+1217.49707 937.1
+1245.36084 610.0
+1284.51074 4218.7
+1285.50464 2824.6
+1315.50964 1175.4
+1385.57227 979.4
+1386.55249 911.3
+1501.55103 643.2
+1614.64148 1160.8
+1615.67139 811.8
+1686.65759 1163.5
+1739.19275 595.8
+1776.84436 899.1
+1799.99670 788.4
+1877.75195 669.0
+1877.91577 599.7
+1879.11816 1112.0
+1879.52515 19720.4
+1879.96313 1317.6
+1907.02283 7314.3
+S	1249	1249	730.737991267
+Z	2	1459.628
+Z	3	2188.939
+191.28123 718.9
+199.20316 758.0
+199.21071 831.2
+199.29135 1770.4
+199.30098 1824.6
+199.31046 1882.7
+199.33545 653.6
+214.51480 595.7
+222.04857 557.4
+236.37889 710.9
+237.51807 655.0
+246.66057 589.8
+252.87930 585.7
+299.09552 665.7
+328.77429 578.8
+337.94043 552.5
+342.26968 659.3
+366.04050 564.1
+479.66089 853.9
+509.50113 553.4
+511.19626 651.7
+521.43768 689.6
+532.58289 1848.6
+609.57172 648.3
+676.65375 854.5
+795.66290 1061.2
+931.37250 628.7
+933.02692 684.4
+1010.55493 664.0
+1149.49316 635.2
+1198.30396 3542.5
+1304.10266 647.4
+1489.75183 666.6
+1818.57666 610.5
+1870.44983 830.2
+1877.60291 758.0
+1877.98621 619.2
+1878.38147 753.7
+1879.29468 4416.1
+1879.57056 18314.3
+1880.91248 997.3
+1881.29846 847.2
+1882.41833 787.2
+1883.59338 801.6
+1906.47510 643.4
+1906.99365 7332.2
+1930.53540 948.5
+S	1250	1250	731.241241267
+Z	2	1460.635
+Z	3	2190.448
+198.91579 687.6
+199.20761 869.3
+199.24716 626.6
+199.25960 1042.7
+199.27385 1076.2
+199.29225 2477.5
+199.30315 1165.8
+212.10283 2530.8
+222.08719 2863.5
+223.07132 2682.5
+228.14619 761.8
+229.12923 1755.7
+230.97041 562.8
+240.09770 10002.8
+241.10181 780.4
+246.15607 50417.6
+247.15991 4667.9
+255.28894 780.8
+255.99527 628.3
+277.11780 2279.3
+283.14127 1136.9
+284.52478 705.4
+293.12601 796.3
+294.10852 1280.6
+298.57309 798.6
+301.11395 7873.3
+309.87491 579.5
+311.13483 21149.7
+312.13834 2546.8
+323.13376 2091.1
+328.12982 3338.5
+334.65790 1119.7
+343.66412 895.4
+345.15509 2996.7
+351.13013 1386.1
+354.14420 751.4
+356.12512 1441.9
+361.18323 3857.6
+368.15619 6418.6
+372.15182 1465.7
+373.15054 9207.5
+374.13544 2864.2
+375.14026 775.1
+378.19153 616.9
+380.15628 1922.6
+388.82697 628.4
+392.14490 13020.6
+393.14841 1823.7
+397.18204 1756.7
+408.15085 3656.5
+409.15280 802.4
+412.70407 1748.9
+421.70886 5809.1
+422.20972 2301.9
+423.16177 1039.8
+425.17767 7905.4
+426.18088 1467.5
+428.38959 637.2
+428.47772 635.1
+439.15958 866.5
+440.17609 637.6
+441.17496 1162.9
+444.21741 665.3
+457.17072 1909.9
+460.29391 643.1
+462.23022 4630.0
+463.22989 793.0
+465.43268 563.2
+467.14230 635.0
+474.19727 1262.7
+479.22232 3215.0
+479.72409 1786.6
+480.18298 924.8
+484.17624 557.4
+485.16516 3527.1
+496.21851 643.5
+496.23975 648.5
+498.19302 3192.1
+499.19806 1248.2
+502.19244 6182.8
+503.19839 1585.4
+522.19843 1138.4
+523.17731 2744.6
+524.18158 1203.7
+531.25098 2262.5
+532.54803 2135.6
+534.73840 1493.6
+537.17780 808.7
+540.20398 18090.0
+541.20782 3061.1
+543.74304 2000.7
+549.14966 754.0
+549.26202 29340.3
+550.26471 7300.1
+551.26508 1442.1
+559.86243 789.7
+579.25403 1480.2
+582.18219 6330.8
+583.18152 1661.3
+593.23053 1319.8
+594.21008 898.9
+597.26270 3479.3
+598.26373 1071.6
+599.20837 8136.8
+600.18878 4990.9
+601.18958 1758.1
+601.58887 1714.1
+601.92468 911.8
+602.25586 639.5
+609.25763 772.6
+611.24048 8514.4
+612.24304 2226.6
+614.59271 1746.4
+614.92523 2100.9
+615.26465 1731.8
+617.21954 25763.0
+617.27832 2820.6
+617.78210 1362.8
+618.22339 8024.9
+619.22577 1418.7
+620.59613 2476.4
+620.93170 2364.8
+621.26147 1369.9
+626.93152 812.0
+628.93719 859.1
+630.30914 618.3
+630.39844 853.1
+632.26550 1426.0
+632.60120 3256.8
+632.93298 1618.9
+633.26501 1097.6
+634.94586 1433.7
+635.27142 768.3
+638.27277 11864.3
+638.60571 14191.8
+638.93781 9242.4
+639.27228 3417.5
+639.60309 832.6
+639.93573 1037.5
+642.95172 754.9
+644.27551 47818.4
+644.60980 39547.6
+644.94397 19204.7
+645.07904 660.9
+645.27832 7262.8
+648.22345 680.2
+650.60724 653.7
+653.01056 1281.7
+663.77625 667.1
+665.29468 1206.3
+665.79614 745.9
+666.29187 1025.2
+668.31342 2494.3
+675.28387 1420.2
+675.95270 1020.7
+676.26331 887.4
+676.62946 1132.5
+679.27722 820.7
+680.95990 2694.9
+681.29144 2186.3
+681.62750 2411.9
+684.94391 784.5
+685.28058 1403.9
+685.61847 1046.8
+686.32123 20742.6
+687.32355 7059.7
+688.29291 1684.2
+690.29108 971.6
+690.95087 2999.8
+691.28406 4775.4
+691.61853 2926.4
+691.95410 1081.5
+694.27838 7640.2
+695.28497 2491.4
+697.29059 1136.7
+702.79980 1458.1
+702.96234 1108.6
+703.29736 2539.3
+703.62854 1444.6
+703.79620 1050.0
+704.29608 1088.3
+706.29120 4603.7
+706.62421 5828.5
+706.95459 4147.9
+707.28027 1588.1
+707.33014 852.0
+707.80365 2004.6
+708.30591 1613.9
+708.63422 1360.0
+708.96997 4670.9
+709.30273 5353.1
+709.63708 1965.5
+711.80438 5603.4
+711.96680 3031.3
+712.29517 9721.3
+712.62610 2183.0
+712.80780 775.6
+731.11102 649.9
+743.34186 3802.2
+744.35474 1213.9
+762.82825 751.2
+763.31335 856.8
+766.34503 691.4
+766.41827 627.1
+771.33331 6142.9
+771.83386 4424.5
+772.32928 3482.9
+772.83423 1348.3
+773.30646 1934.3
+780.33936 43365.1
+780.83984 29306.1
+781.34174 15909.3
+781.84467 4220.7
+782.35028 814.0
+789.34540 2132.3
+789.84277 892.0
+790.34424 926.9
+795.64343 731.4
+797.84644 1205.1
+801.85547 663.8
+806.85278 5986.3
+807.34955 8985.5
+807.85419 4500.0
+808.36121 1528.8
+808.86591 983.8
+815.85791 58051.9
+816.35828 50757.1
+816.86090 20509.4
+817.06848 699.9
+817.36151 7445.2
+817.87000 1489.5
+824.32788 585.2
+824.40155 1980.9
+824.86536 1090.6
+825.35938 1120.7
+825.41833 720.4
+825.60883 703.2
+833.36627 988.6
+842.41016 30774.8
+843.41241 11276.2
+843.83929 2648.1
+844.33417 1538.7
+844.41388 2175.5
+845.42682 877.6
+856.35913 1189.1
+859.88287 762.3
+864.36658 7221.0
+864.86493 7178.9
+865.36401 4475.2
+865.86340 1356.6
+873.37109 41304.1
+873.87183 36927.1
+874.37329 17618.5
+874.87518 5914.9
+875.37329 1812.9
+881.37518 1138.4
+882.37390 6855.5
+882.87451 757.7
+883.37512 3085.1
+883.87061 998.7
+884.37848 1606.9
+884.86151 769.5
+890.37860 994.4
+890.87390 1195.7
+892.87714 5499.8
+893.37518 9873.8
+893.87476 6941.3
+894.37549 2046.0
+894.88446 1044.5
+896.36676 958.7
+901.88165 55665.6
+902.38239 48356.3
+902.88422 28076.1
+903.38391 9374.9
+903.88397 2556.3
+910.36847 16691.2
+911.37091 5997.6
+912.37274 2901.3
+912.88092 3682.9
+913.38086 2483.0
+913.88898 1551.0
+921.38666 16796.7
+921.88641 20389.5
+922.38513 12401.6
+922.88916 6137.8
+923.38812 2110.6
+927.90637 842.7
+928.33258 645.4
+930.39191 122961.1
+930.89319 116659.3
+931.39453 57615.9
+931.89508 24112.0
+932.39368 6108.9
+932.89264 2683.4
+933.39453 1323.5
+938.89221 721.3
+939.37738 1162.0
+940.96088 713.5
+944.87421 2040.4
+945.36591 4677.6
+945.86182 4348.4
+946.35522 1254.3
+947.40570 1173.2
+947.89642 1628.1
+948.39771 3244.4
+948.89886 2518.1
+953.87585 6947.3
+954.37451 8689.3
+954.87323 4639.6
+955.37463 2927.8
+956.90546 9641.6
+957.38379 7894.4
+957.46143 6240.2
+957.90393 8930.3
+958.37103 2085.0
+958.45825 3468.2
+958.90521 1934.0
+959.44830 1127.5
+962.74164 866.6
+962.88098 6659.7
+963.38214 5538.8
+963.88092 3576.0
+965.91046 111054.3
+966.41138 107759.4
+966.91241 59021.6
+967.41394 19726.1
+967.91791 6067.9
+968.41492 1435.3
+970.40143 753.6
+971.88379 4437.3
+972.38739 3723.0
+972.88843 1393.1
+978.41443 988.3
+979.39502 1136.0
+980.38733 820.3
+981.39984 854.3
+988.39996 1314.8
+989.39319 792.1
+989.88770 797.9
+990.89240 898.6
+997.39935 6806.6
+998.39935 3873.7
+999.40076 1353.8
+1005.93756 872.4
+1012.43463 747.2
+1013.44629 700.0
+1019.72522 711.6
+1021.43390 1027.7
+1021.93909 1253.1
+1027.41077 1380.6
+1027.90808 801.3
+1028.40784 707.7
+1030.03394 625.2
+1035.92273 4770.6
+1036.42615 3558.4
+1036.92432 2637.7
+1037.43555 761.9
+1049.95947 799.4
+1057.23145 762.1
+1080.43811 2105.7
+1081.44556 1051.2
+1082.39075 768.2
+1086.48315 1715.0
+1098.44592 1249.1
+1158.51575 675.7
+1177.45483 3694.8
+1178.45093 2031.4
+1179.44629 1084.5
+1195.46326 18923.9
+1196.46399 13145.7
+1197.46558 4192.3
+1198.22107 3312.1
+1198.46326 1211.7
+1213.47327 85703.5
+1214.47693 47308.6
+1215.47852 13414.1
+1216.47778 3993.1
+1284.50854 2945.8
+1285.52124 1641.7
+1286.53809 1018.9
+1314.52759 1392.7
+1315.52759 1722.0
+1368.56287 946.9
+1385.55603 1998.6
+1386.56201 1458.0
+1416.52161 749.7
+1500.58740 1050.7
+1501.56396 797.8
+1558.57202 790.2
+1614.62427 1460.2
+1615.63611 2365.2
+1616.65552 933.1
+1660.71204 673.1
+1685.67639 1424.4
+1686.68604 1802.0
+1687.67700 1020.2
+1728.65576 589.8
+1871.12524 560.5
+1879.05347 2562.9
+1879.51440 19709.0
+1879.86414 2020.7
+1880.23096 825.6
+1907.04504 7208.3
+1918.61621 835.2
+1930.57715 994.5
+1931.75574 871.5
+S	1251	1251	417.7331721
+Z	4	1666.90139
+100.70953 541.6
+100.87752 536.9
+110.01077 554.9
+113.14275 596.0
+113.72678 569.8
+115.92413 573.7
+118.82951 516.2
+119.47315 553.3
+119.95342 620.1
+121.80014 2409.4
+128.58127 516.7
+134.80333 496.2
+137.22928 549.4
+150.19031 499.4
+165.78323 631.0
+167.97337 558.1
+173.12723 1123.5
+175.11836 3735.2
+182.78896 665.0
+196.21999 580.5
+197.47421 656.5
+199.19797 1230.3
+199.27226 1010.9
+199.29510 2928.6
+199.31621 1661.8
+199.39236 929.3
+202.34987 643.9
+208.05498 529.4
+233.16422 3753.9
+260.16974 664.1
+260.60815 644.5
+271.20065 594.6
+271.53329 576.7
+281.11417 563.8
+288.20233 40738.3
+289.20682 3920.4
+337.86957 1186.1
+370.70724 2897.9
+371.20963 1637.6
+375.20111 2952.0
+375.53467 1992.7
+384.53180 7107.2
+384.86658 3951.0
+385.19980 985.6
+387.27014 23749.1
+388.27383 3737.6
+388.53253 670.3
+390.71198 7232.2
+390.96271 6180.5
+391.21359 3078.1
+391.46521 1246.3
+395.21426 1480.3
+395.46460 1294.7
+395.71622 646.1
+399.71719 2295.6
+399.96765 1935.0
+406.22549 6212.3
+439.22946 2661.4
+439.56406 2463.8
+439.89993 3418.9
+440.23410 1610.9
+440.56927 858.9
+445.23312 2304.3
+445.56744 1789.5
+445.75449 612.4
+445.90155 1457.9
+446.23972 1023.1
+451.23648 1750.8
+451.57095 1630.3
+457.57413 2685.5
+457.90927 2037.1
+458.24481 1434.7
+460.56729 2758.9
+460.90414 1821.6
+461.57013 683.8
+463.57910 6092.1
+463.91400 4094.1
+464.24866 2229.6
+464.57999 1070.9
+469.58264 5640.9
+469.87863 731.0
+469.91739 3902.0
+470.25177 822.6
+476.25565 1184.8
+476.76855 927.7
+483.59476 811.6
+483.93213 794.2
+495.27271 1024.8
+498.30023 795.1
+500.77292 907.1
+501.27319 773.1
+502.76178 609.7
+506.30301 709.4
+507.27914 2404.5
+507.60925 2154.2
+508.28137 714.6
+511.77350 2127.3
+512.27570 1033.7
+512.77802 645.6
+516.27063 542.1
+516.31311 3312.6
+532.52338 1958.8
+540.77582 3830.6
+541.17633 599.9
+541.27820 2983.7
+555.92053 587.8
+558.82294 622.1
+576.29395 20797.6
+576.79535 12655.8
+577.29694 3333.3
+599.76843 686.1
+605.29559 3131.8
+605.79730 2200.0
+630.42706 634.7
+631.80853 4712.0
+632.31000 2544.2
+632.37000 5211.2
+632.80768 749.7
+633.36957 1230.3
+639.82556 895.0
+640.32422 695.9
+640.81464 58342.3
+641.31616 37951.5
+641.81781 15471.9
+642.31891 1952.0
+655.21320 868.3
+656.29785 685.5
+656.57874 633.5
+666.35413 872.7
+676.57544 554.9
+676.61920 1005.8
+690.35083 2549.8
+690.85065 2581.3
+691.35309 1007.0
+699.53760 655.1
+723.37750 1255.0
+731.22113 586.4
+795.66644 1124.9
+1030.87781 604.2
+1034.29456 620.8
+1057.21094 912.0
+1110.82092 620.4
+1118.50916 632.1
+1198.17041 3452.8
+1301.48230 565.0
+1525.43347 816.0
+1544.67505 666.6
+1619.49512 575.3
+S	1253	1253	730.234407933
+Z	2	1458.621
+Z	3	2187.428
+193.43074 3898.5
+198.91594 5365.9
+199.19542 4740.3
+199.28351 12005.9
+199.29167 17578.3
+199.39009 4701.1
+221.54147 3774.6
+226.51422 4137.7
+231.94702 4389.2
+238.73033 4642.6
+242.76656 4620.5
+253.06686 3396.2
+255.87936 3812.9
+263.19751 3715.5
+280.18539 4756.1
+309.95923 4306.4
+350.27530 4604.3
+351.96204 4491.6
+416.91632 3697.6
+466.71350 4003.4
+482.62354 4599.7
+502.54282 3884.6
+527.53735 3932.9
+529.47748 4375.5
+532.51709 9888.4
+532.60675 3658.5
+569.75922 4916.6
+612.94794 4277.0
+629.44800 4382.7
+630.37549 4714.0
+676.62665 4871.2
+680.72839 4020.4
+705.11182 4202.7
+721.42554 3566.9
+780.84015 7224.9
+795.64789 6575.9
+815.86127 7955.5
+816.35767 5711.2
+901.87671 5520.3
+902.38562 7324.9
+912.84839 4539.8
+930.38892 14669.4
+930.89136 9825.6
+965.90906 8496.8
+966.40747 7971.2
+1164.44055 4308.4
+1198.15100 23065.6
+1213.47791 6204.2
+1231.17883 4198.3
+1239.55408 4425.8
+1284.99902 3700.2
+1327.42896 4462.5
+1525.35803 5501.1
+1878.39148 7357.9
+1878.86462 9823.5
+1879.09814 11132.1
+1879.49658 126981.5
+1879.86719 14114.5
+1880.12549 9141.7
+1906.49731 4256.6
+1907.02686 45756.8
+1931.89282 4408.2
+S	1254	1254	417.7296321
+Z	4	1666.88723
+114.54758 527.0
+120.08036 4643.2
+120.87959 529.3
+121.79955 2248.0
+121.80394 1066.3
+125.66114 525.7
+130.90816 596.4
+154.83893 765.0
+157.20573 525.3
+163.21938 489.4
+167.97029 563.3
+172.27484 590.7
+175.11882 2261.8
+185.11189 607.2
+197.70303 537.9
+198.91571 1118.5
+199.19246 581.5
+199.20096 788.0
+199.27324 806.3
+199.29193 3099.3
+199.29947 1504.8
+199.49075 776.7
+201.74130 684.3
+206.86092 550.5
+215.13948 937.3
+221.10271 828.5
+233.16464 47733.0
+234.16800 10094.7
+235.17191 1117.7
+241.08173 1194.1
+249.09772 1497.7
+255.29854 579.5
+255.81477 494.2
+261.15958 7997.5
+262.16251 1280.4
+272.76624 583.1
+288.20270 39146.3
+289.20676 6744.0
+299.50540 961.5
+306.55576 554.1
+308.50757 649.9
+308.91122 670.8
+314.19040 29924.2
+314.52463 21385.7
+314.65863 1466.6
+314.85876 6153.6
+315.15952 831.6
+315.19305 1522.3
+328.65460 1311.3
+337.86948 21595.8
+338.20358 13566.1
+338.53769 5103.6
+338.87363 703.9
+350.14523 1154.4
+350.27051 661.6
+353.87204 1056.5
+355.78741 663.4
+358.58142 592.4
+358.62289 670.6
+359.87650 6688.2
+360.08972 638.3
+360.21115 5242.4
+360.54501 2956.9
+360.87851 919.9
+370.65341 581.7
+370.70819 5066.9
+371.20950 2612.2
+371.71158 720.0
+375.20197 1039.4
+375.53452 1285.3
+375.86850 877.2
+377.55499 805.2
+378.14032 11980.7
+379.14307 2350.2
+383.55576 5673.4
+383.88940 6132.8
+384.22354 2239.9
+384.53226 1735.3
+384.86719 3086.2
+385.20120 1757.9
+387.27094 14834.8
+388.27451 3208.5
+389.20175 638.8
+389.27881 681.7
+390.20273 1074.6
+390.71323 5873.5
+390.96375 8620.5
+391.21494 5785.1
+391.46478 3059.5
+391.71420 1852.6
+392.73013 814.6
+393.74600 1540.8
+394.53622 996.7
+395.21481 1840.2
+395.46643 3920.7
+395.71732 3026.4
+396.15155 4011.3
+396.88660 6244.3
+397.15509 752.0
+397.22104 5239.2
+397.55643 2667.6
+399.71835 47583.1
+399.96893 53991.8
+400.21960 29557.0
+400.47034 9935.3
+400.72034 1976.6
+408.66388 652.7
+421.24338 547.9
+422.25827 1330.3
+422.75928 1012.3
+424.88547 761.8
+425.21497 1115.8
+426.56754 1459.8
+426.90326 1583.4
+427.55319 1250.6
+427.88177 2194.2
+428.21317 1043.3
+433.89752 3313.1
+434.23300 2030.3
+434.56311 1221.3
+439.23083 1847.1
+439.56433 1749.6
+439.90131 124570.8
+440.18509 730.1
+440.19894 708.6
+440.23538 110110.5
+440.56946 56838.9
+440.72192 844.4
+440.90375 15709.2
+441.23764 2991.7
+441.57422 1246.3
+445.23410 1277.0
+445.56784 2389.6
+445.90448 40611.2
+446.23886 44785.8
+446.57315 18891.6
+446.90723 6903.0
+447.23880 1474.2
+448.25043 1138.9
+451.23837 2042.7
+451.57175 1342.8
+451.90598 1656.3
+454.56598 712.9
+457.57516 2144.1
+457.77353 1123.5
+457.91125 3993.8
+458.24475 2336.2
+460.90240 1475.2
+461.23853 916.2
+461.77792 645.7
+463.58005 91652.1
+463.91437 91746.0
+464.09891 632.9
+464.24832 49254.3
+464.58237 17279.3
+464.91644 3927.1
+465.24561 757.4
+466.21497 725.4
+469.58340 69750.3
+469.91760 65321.6
+470.25183 33172.2
+470.58597 12747.5
+470.78125 49146.8
+470.92004 3337.1
+471.28244 36210.4
+471.78372 11609.8
+471.92358 1305.9
+472.28400 2054.3
+472.89227 618.4
+476.75693 1247.1
+483.59863 40497.4
+483.93307 41689.9
+484.26724 25373.0
+484.60208 8212.9
+484.93646 1902.8
+486.92819 1165.0
+487.99347 679.6
+495.26700 644.0
+495.60693 1541.6
+495.94193 942.3
+498.29800 1223.7
+506.29962 17830.8
+506.80090 11712.1
+507.27829 46188.7
+507.61209 44862.4
+507.80060 830.5
+507.94629 26115.9
+508.28104 9898.1
+508.61426 2923.3
+509.23380 1969.3
+516.31409 1444.1
+519.27905 630.7
+521.28918 862.8
+532.51105 1618.8
+539.31146 4442.9
+539.81085 2242.0
+540.31073 1030.0
+540.77582 5142.3
+541.27777 4326.7
+541.77838 2185.1
+572.29199 649.7
+574.82916 1740.5
+576.29462 17297.9
+576.79633 14870.0
+577.29730 6468.8
+577.80005 1583.4
+583.28833 627.3
+596.29413 719.0
+596.79688 1223.4
+603.83221 2662.6
+604.33258 3030.2
+604.83612 1317.3
+605.29803 4057.1
+605.79968 3760.6
+606.30206 2662.0
+606.79602 1289.8
+608.28851 1261.8
+608.78918 1819.1
+609.29907 734.4
+617.29309 2196.8
+617.79639 1284.7
+618.29877 1488.7
+626.78564 614.1
+628.30847 2165.8
+629.30743 1071.8
+630.42090 817.1
+630.81689 870.5
+631.80933 2290.1
+632.31146 3286.8
+632.81262 2120.5
+638.29883 762.6
+639.35449 919.5
+639.53967 572.5
+639.85193 843.8
+640.81555 35257.9
+641.31708 44075.2
+641.81866 28321.2
+642.31989 11215.0
+642.82062 2137.7
+656.30182 7921.7
+657.30609 3587.9
+666.35571 1117.3
+668.36127 854.4
+669.34338 573.0
+674.34589 750.5
+676.63965 797.6
+682.33881 668.4
+690.35083 1880.3
+690.85284 2423.8
+691.35345 1668.5
+723.37494 871.3
+724.38806 917.4
+795.66284 1189.0
+951.86273 624.2
+1018.66321 652.2
+1085.08508 685.0
+1198.14294 3277.9
+1387.45325 593.1
+1661.87317 650.1
+1680.98193 539.2
+S	1255	1255	1879.9618246
+Z	2	3758.076
+Z	3	5636.61
+532.46594 1626.8
+630.40588 781.0
+670.39142 624.0
+676.61914 1178.5
+707.01733 627.6
+730.73627 549.6
+731.11438 741.5
+766.10059 615.0
+795.66016 907.5
+810.67004 687.6
+923.12683 515.2
+1019.78772 820.9
+1087.71252 741.5
+1186.87354 572.1
+1198.04846 3055.2
+1302.09741 640.3
+1634.99683 650.2
+1875.41223 768.9
+1879.47668 20284.8
+1880.49426 677.9
+1884.32007 885.1
+1907.03540 7427.8
+S	1257	1257	417.7352171
+Z	4	1666.90957
+105.50695 512.7
+113.01095 537.4
+114.52319 555.0
+116.78497 570.2
+118.16261 580.2
+119.38071 555.0
+120.67224 567.6
+121.80061 2354.3
+128.13364 611.5
+131.03510 495.2
+137.20557 625.2
+144.11957 654.9
+144.37990 577.2
+147.48732 577.5
+165.78493 1076.4
+171.04893 583.3
+172.20724 589.8
+174.43130 521.6
+175.11859 5864.1
+185.31891 558.5
+192.71381 609.0
+194.13992 1040.7
+198.91309 831.9
+199.18890 614.2
+199.25380 570.8
+199.26375 998.4
+199.28752 3374.7
+199.31206 1260.8
+199.38585 1260.6
+199.90683 528.2
+212.82104 673.0
+213.72881 601.7
+215.14011 729.9
+219.60387 582.3
+219.86606 623.4
+219.99222 634.4
+221.93686 540.1
+223.75151 515.8
+225.44455 583.5
+233.16481 31305.0
+234.16838 4765.3
+238.95221 520.6
+241.08148 608.0
+249.09776 1534.6
+255.29599 744.6
+261.15964 5371.3
+267.91486 524.9
+270.19278 900.5
+271.17630 2928.5
+277.07751 584.1
+282.70929 578.6
+288.20303 99307.5
+289.20685 13406.8
+290.21106 1038.9
+290.37415 589.8
+300.71500 659.8
+302.78690 586.3
+310.05795 559.6
+314.19070 20679.6
+314.52484 11694.5
+314.65704 862.3
+314.85913 3355.1
+322.50912 765.9
+337.86972 14575.4
+338.20422 6356.1
+338.53687 1374.1
+341.14584 1675.2
+350.14590 2402.9
+351.52271 1105.3
+351.85568 1151.6
+353.87372 2242.7
+354.54221 1102.6
+356.71017 3142.8
+357.21109 1652.9
+359.87680 6759.8
+360.21112 5884.4
+360.54575 2027.3
+360.85376 2343.9
+361.18823 1477.6
+361.52390 813.9
+370.70813 19979.5
+371.20938 8473.3
+371.70987 1734.7
+374.06982 664.6
+375.20081 4546.8
+375.53592 3590.2
+375.86810 836.7
+377.55203 633.4
+377.88873 702.9
+378.14078 12095.9
+379.14465 1464.3
+381.55692 566.1
+383.55573 3465.1
+383.89072 2581.7
+384.53275 10588.9
+384.86740 6455.8
+385.20044 2042.9
+385.53494 959.6
+387.27133 59608.8
+388.27478 10919.0
+388.53299 1869.6
+388.86923 1566.8
+389.28015 1127.2
+390.20227 992.7
+390.71344 27689.5
+390.96405 18066.5
+391.21478 13253.2
+391.46530 5422.0
+391.71240 909.5
+392.22925 4051.5
+392.73050 1921.0
+393.74490 1678.8
+394.53632 1171.3
+394.87256 1218.3
+395.21710 5307.5
+395.46661 5269.6
+395.71747 3158.7
+396.15121 4989.2
+396.70230 708.7
+396.88672 5508.8
+397.22134 3852.2
+397.55542 2343.7
+397.86453 4096.5
+397.89044 568.2
+398.19910 3451.1
+398.53186 973.0
+399.71844 33075.3
+399.96918 27873.0
+400.21948 11439.4
+400.47079 2530.3
+408.33350 562.6
+417.47849 660.6
+421.88803 638.5
+422.25589 2089.0
+424.88321 961.8
+425.21481 1157.2
+426.56924 1898.3
+426.90280 1022.2
+427.23801 855.9
+427.54684 16464.0
+427.88116 12097.1
+428.21536 7024.3
+428.54697 1159.1
+428.72992 2714.1
+429.23035 1387.9
+432.22162 967.7
+433.49277 632.3
+433.89862 5903.1
+434.23196 4332.4
+434.56665 1870.6
+439.23099 7649.4
+439.56555 6639.0
+439.90155 118076.0
+440.23541 81165.6
+440.56976 39549.8
+440.69635 561.9
+440.90359 11260.4
+441.23856 2037.0
+445.23401 7239.1
+445.56885 5655.8
+445.90463 38888.8
+446.23892 25584.5
+446.57327 10596.3
+446.72260 699.2
+446.90799 1376.6
+447.74380 845.7
+448.25314 4264.3
+448.56290 1236.0
+448.75491 2256.6
+451.23770 14848.1
+451.57220 10750.4
+451.90607 4350.4
+452.17810 1681.6
+452.23859 729.6
+454.56558 1043.3
+454.89822 1860.0
+457.57669 7848.0
+457.77466 1168.6
+457.91113 7736.8
+458.24707 3226.1
+460.56955 19799.2
+460.90381 13164.5
+461.23828 4736.5
+461.57162 1628.8
+463.58035 68912.3
+463.91449 56638.1
+464.24838 25265.9
+464.58289 8445.6
+464.91953 856.6
+466.21741 1256.6
+466.71603 1317.4
+467.24036 783.2
+467.74557 792.5
+469.58377 69100.3
+469.91794 53219.0
+470.18661 1000.9
+470.25220 19738.4
+470.58667 6020.0
+470.66135 776.9
+470.78159 75469.6
+470.92221 1986.7
+471.28284 40251.0
+471.59210 4686.7
+471.78391 11550.0
+471.92700 4009.2
+472.27585 3365.6
+474.15634 576.3
+474.18054 576.1
+476.25476 4208.9
+476.75858 2447.0
+477.59796 1579.1
+477.92844 915.5
+478.26489 901.9
+480.25497 916.4
+481.24255 830.7
+483.59909 54753.0
+483.93326 43660.0
+484.26816 17606.6
+484.60153 4882.2
+484.93600 1470.1
+495.27084 5570.5
+495.60571 5007.0
+495.93921 2316.7
+498.30191 4651.5
+498.59891 700.6
+499.30753 1522.8
+501.27615 2354.5
+501.60953 2255.9
+501.73352 705.4
+501.94406 1348.4
+502.23499 850.5
+502.75967 1407.1
+503.26273 733.4
+506.29974 15034.6
+506.80124 10021.0
+507.27838 43172.4
+507.61237 35440.2
+507.94632 15102.7
+508.27991 4083.8
+508.61938 821.2
+509.23471 1982.4
+510.74005 619.0
+511.24292 873.4
+511.27103 594.3
+511.77234 3665.5
+512.27557 1942.6
+516.31317 10715.8
+517.31665 3390.0
+522.76019 1227.3
+523.25958 998.0
+526.77521 1282.6
+530.30640 902.1
+531.76636 1254.2
+532.26849 751.4
+532.50012 1648.5
+533.25616 793.2
+539.31152 5532.4
+539.81256 3417.4
+540.31372 1423.1
+540.77637 28714.6
+541.27783 17202.3
+541.77966 5682.9
+542.28375 1566.7
+556.29944 889.6
+556.63525 928.9
+567.28125 2024.5
+567.78235 1075.3
+574.82794 2605.1
+575.27423 927.0
+575.33014 820.2
+576.29486 56127.3
+576.79639 37924.3
+577.29742 12107.8
+577.79773 2538.4
+584.27509 1609.1
+584.77588 1700.6
+591.30133 1398.3
+593.34479 1465.5
+594.82434 1489.2
+595.33044 847.5
+596.29187 6259.6
+596.79352 4510.5
+597.29449 1455.0
+603.83276 4726.9
+604.33203 3427.4
+604.83282 1259.6
+605.29749 42671.2
+605.79895 28053.5
+606.30054 10561.4
+606.80341 1706.2
+608.28772 2025.8
+608.79401 1527.6
+616.81787 1896.3
+617.29254 2009.6
+617.79242 1159.0
+626.29822 750.8
+628.30896 2897.3
+631.81067 14208.7
+632.31177 10431.0
+632.81372 4687.4
+633.31317 1089.9
+633.80957 1613.7
+634.30957 959.6
+635.65833 664.8
+636.82001 787.1
+638.29303 1128.8
+639.10968 1169.1
+639.60840 1032.4
+639.97528 1313.5
+640.46259 748.8
+640.49066 560.0
+640.81592 216570.5
+641.31720 153703.8
+641.38947 838.7
+641.67377 1273.4
+641.81866 61751.9
+642.17297 1117.2
+642.21277 692.7
+642.31970 14969.0
+642.52759 1367.1
+642.81897 3430.8
+643.02930 919.7
+643.31982 930.8
+645.81976 915.7
+654.82837 1990.4
+655.33594 1535.2
+656.30225 7427.0
+657.30420 2527.7
+666.35590 2739.8
+667.36078 814.9
+668.35510 899.5
+668.85486 1158.2
+669.36853 750.1
+672.83667 974.3
+674.33765 736.7
+676.62347 981.4
+681.34357 2106.6
+681.84534 2268.5
+690.35016 10985.1
+690.85077 7500.2
+691.35284 3233.8
+691.85919 898.6
+692.34631 910.0
+712.41278 1137.4
+713.41620 678.9
+723.37830 4492.4
+724.38080 1961.2
+731.14148 724.8
+740.40918 4056.7
+741.42133 1238.5
+759.39325 854.4
+766.43671 812.6
+795.65137 1080.3
+811.44482 1147.7
+812.45215 878.6
+827.72650 662.0
+838.43970 1259.6
+843.49365 684.5
+1152.93567 718.9
+1198.11536 3526.2
+1216.18835 663.3
+1300.33313 559.8
+1374.23242 656.7
+1390.88989 779.9
+1525.46155 849.5
+1532.76758 751.5
+S	1258	1258	418.4858246
+Z	4	1669.912
+120.08024 1737.6
+121.79391 643.1
+121.79925 2175.9
+126.96430 632.7
+127.05825 615.3
+128.49603 590.1
+130.66167 573.4
+140.13536 610.3
+149.03201 539.3
+149.60014 609.5
+151.61348 586.9
+165.33904 593.7
+174.10728 496.4
+174.11382 694.8
+174.16022 766.3
+175.11894 8246.4
+176.42271 643.1
+178.89488 561.0
+179.17989 518.9
+179.80266 561.2
+179.81964 547.8
+184.99226 562.3
+186.21129 565.1
+186.74199 552.2
+194.13893 1596.4
+194.64142 561.7
+198.91479 984.8
+199.20374 1112.8
+199.28793 1152.0
+199.30362 2871.4
+199.32210 994.0
+199.34419 788.9
+199.40334 1097.7
+205.36726 567.6
+221.10318 927.6
+229.21136 545.0
+233.16492 48167.8
+234.16821 7712.9
+238.35272 553.5
+240.88100 575.9
+249.09816 2640.4
+253.16565 780.9
+260.82632 552.1
+261.15973 8128.0
+262.16245 951.8
+267.10809 1363.8
+270.19238 1689.7
+270.58044 538.1
+271.17664 2638.7
+275.46716 500.0
+288.20313 131305.7
+289.20700 17925.5
+290.20886 1264.0
+309.87790 571.8
+314.19070 35514.4
+314.52493 15265.4
+314.65857 1327.9
+314.85938 4392.1
+315.19263 1438.4
+328.65607 1865.2
+337.86969 19924.1
+338.20407 10341.6
+338.53888 3090.9
+341.14536 2183.3
+342.26987 630.4
+350.14636 1855.6
+350.26025 675.7
+351.52255 1419.2
+353.87390 1755.5
+354.20633 910.9
+356.71121 4120.4
+357.21420 613.2
+357.71469 626.2
+359.87692 9656.9
+360.21103 5406.6
+360.54437 1290.4
+360.85431 2160.9
+361.18707 1413.5
+370.70816 21766.3
+371.20969 8677.1
+371.71103 2394.2
+375.20142 6104.9
+375.53641 4188.1
+375.86877 1574.0
+377.55222 1069.7
+378.14102 12965.3
+379.14389 1783.6
+381.35284 538.9
+383.55624 7669.2
+383.89014 4663.0
+384.22244 1044.2
+384.53259 11425.8
+384.86737 8614.5
+385.20187 2082.7
+387.27139 61553.8
+388.21820 1387.4
+388.27496 11558.8
+388.46603 773.5
+388.53259 2331.3
+388.71887 1046.1
+388.86707 1614.9
+389.27661 1450.7
+390.20129 1252.1
+390.71362 32852.5
+390.96417 29093.6
+391.21494 16341.3
+391.40317 586.7
+391.46570 3805.2
+391.71527 1051.9
+392.22983 3835.5
+392.73062 2986.2
+393.74545 867.5
+395.21619 6424.9
+395.46655 5087.2
+395.71805 3209.2
+396.15140 5008.6
+396.88718 8379.4
+397.15430 718.4
+397.22122 3514.5
+397.55688 2081.4
+397.86432 4381.1
+398.19849 3369.9
+399.71872 41838.4
+399.96918 34979.8
+400.22009 13271.6
+400.47055 4767.5
+400.72232 1034.1
+415.55209 785.4
+420.56793 1008.4
+421.54065 1248.6
+421.87457 898.6
+422.21451 812.0
+422.25629 2274.4
+422.75586 2333.6
+424.88165 1890.3
+425.21802 1196.6
+426.57126 3220.0
+426.90421 2599.1
+427.23767 973.0
+427.54688 21615.1
+427.88086 13541.6
+428.21576 4461.3
+428.54684 1703.9
+428.72858 2607.0
+428.88385 747.4
+429.73444 618.1
+430.88907 864.7
+433.54865 630.6
+433.89786 4780.1
+434.23157 4745.1
+434.56400 1869.6
+439.23074 13082.9
+439.42065 831.3
+439.56595 8662.8
+439.90176 144806.1
+440.23560 118750.9
+440.56982 48484.2
+440.70728 636.5
+440.90369 12244.8
+441.23846 2484.8
+445.23465 9031.1
+445.41333 542.6
+445.56894 9013.3
+445.90485 52298.9
+446.23904 40348.9
+446.57349 17871.0
+446.90738 4861.6
+447.24188 1344.5
+447.74326 1613.5
+448.25226 2313.8
+448.56030 867.3
+448.75421 1083.7
+448.89697 930.5
+451.23779 15956.9
+451.57227 9915.2
+451.90692 5006.9
+452.24191 1487.9
+454.56696 1913.6
+454.90131 1147.6
+455.23593 886.7
+457.21292 668.2
+457.57678 12688.4
+457.77026 1096.2
+457.91101 9205.4
+458.24533 4011.2
+458.57831 827.7
+460.56937 13172.3
+460.90424 9987.5
+461.23853 5486.8
+461.57632 1367.4
+463.06339 811.1
+463.58051 107760.1
+463.91473 83652.4
+464.24893 37941.2
+464.58319 11135.0
+464.80112 647.9
+464.91742 2136.1
+466.21671 1419.8
+466.72015 682.8
+467.24557 723.2
+469.24847 709.7
+469.54749 597.6
+469.58383 87827.5
+469.91818 68442.8
+470.18890 936.3
+470.25229 32327.7
+470.58621 9130.8
+470.78183 71341.1
+470.92157 1458.4
+471.28305 35384.1
+471.59421 3246.0
+471.78430 10696.5
+471.92676 3304.7
+472.27307 1910.7
+474.29987 558.6
+476.25513 3178.1
+476.75485 2171.9
+477.59442 2272.0
+477.92908 1542.8
+478.26273 707.8
+480.25446 967.4
+482.67914 780.5
+483.26083 661.4
+483.59930 63019.9
+483.93338 51025.9
+484.26776 26481.3
+484.60223 6193.9
+484.93896 1219.2
+486.92419 688.6
+487.73557 907.3
+495.27081 7378.8
+495.60547 6080.8
+495.94012 2413.0
+498.30362 4122.8
+501.27487 4065.2
+501.60910 2418.4
+501.94238 893.5
+502.76141 1405.3
+503.26007 1086.0
+504.92139 749.7
+506.29977 18840.7
+506.80130 11957.7
+507.27869 54812.6
+507.61234 46208.8
+507.94669 20191.7
+508.28113 7273.0
+508.61682 1656.4
+509.23471 1460.7
+510.73981 1624.9
+511.77350 2430.7
+512.27557 1659.9
+516.31342 9303.5
+517.31647 2024.6
+519.25208 624.2
+519.75433 533.4
+522.75885 1060.0
+523.25897 1474.4
+531.76782 935.1
+532.48657 1733.8
+537.23254 759.6
+539.31097 5576.0
+539.81293 3440.4
+540.31732 964.2
+540.77643 22743.2
+541.27795 14971.1
+541.77936 4470.6
+542.28064 1052.7
+544.77545 956.5
+548.76135 751.2
+549.16772 1076.5
+556.30182 963.0
+567.28046 2146.7
+567.78558 2131.1
+572.29010 806.2
+574.83081 1975.5
+575.33295 1629.8
+576.29523 57779.0
+576.79645 42341.2
+577.29822 14167.8
+577.79932 4529.2
+584.27350 2911.2
+584.77856 1302.8
+594.82391 911.4
+595.32916 1251.1
+596.29285 5813.3
+596.79572 3081.7
+597.29913 1050.8
+603.83215 4256.0
+604.33405 2537.8
+605.29785 26487.0
+605.79913 20807.1
+606.30103 5975.3
+606.80359 1395.7
+607.78943 622.7
+608.28668 2465.6
+608.79175 1245.1
+609.29553 882.4
+616.81848 1363.4
+617.28931 2474.1
+617.33087 1532.0
+617.40015 605.6
+617.79279 912.8
+626.30017 830.1
+628.30798 2177.1
+629.31555 783.2
+630.44794 737.0
+631.81067 16116.9
+632.31226 11774.6
+632.81329 3881.5
+633.31708 1318.6
+633.81079 1368.0
+636.82098 1057.1
+639.10522 886.6
+639.34705 1157.3
+639.85107 1186.9
+639.96820 949.0
+640.81604 237633.5
+641.31732 168434.0
+641.38855 721.7
+641.65900 1481.0
+641.81879 65230.0
+642.16302 1132.7
+642.32007 18990.7
+642.52905 1392.6
+642.82129 4618.6
+643.03918 965.5
+643.31866 987.0
+646.32849 580.8
+654.82764 791.5
+656.30249 9941.8
+657.30511 3928.0
+666.35651 3232.8
+667.35620 731.3
+668.35175 767.6
+668.85913 645.9
+669.21136 578.4
+673.84088 1185.1
+674.33960 1429.1
+676.53516 681.9
+676.63025 1039.3
+681.34283 1860.2
+681.84772 1828.2
+683.11725 629.9
+690.35065 13168.8
+690.85260 10131.6
+691.35388 3775.4
+691.85681 1057.2
+723.37793 4253.9
+724.37848 1315.5
+740.40729 1427.6
+795.64771 1001.0
+811.44910 1090.0
+830.95264 682.9
+940.57227 634.1
+1019.69769 705.9
+1057.24231 891.0
+1198.08972 3569.0
+1263.41736 711.7
+1304.19128 766.0
+1509.64136 632.3
+1517.82434 582.8
+1525.46545 1032.5
+S	1259	1259	413.2319821
+Z	4	1648.89663
+102.16078 519.9
+105.17368 497.0
+113.04829 565.6
+115.08481 550.7
+121.79891 2261.6
+121.80350 871.4
+128.56339 530.4
+137.29054 750.1
+142.32059 676.4
+145.90216 536.6
+146.92148 535.4
+153.24701 669.5
+165.78110 747.2
+167.13811 623.8
+167.59097 502.4
+173.24042 538.2
+176.87741 595.9
+179.54089 529.0
+190.24706 564.4
+196.93399 609.5
+198.91408 911.7
+199.18764 752.8
+199.26060 702.1
+199.27094 1122.8
+199.28575 2417.7
+199.30125 596.1
+199.31114 1091.3
+199.32043 790.4
+199.33398 638.3
+205.81737 617.3
+210.62825 587.6
+211.77951 576.1
+217.63202 591.5
+240.45784 553.2
+264.15475 491.6
+282.22739 549.7
+288.20309 834.0
+307.91513 685.8
+313.29218 585.6
+340.10599 577.4
+345.22495 670.3
+390.71509 970.6
+390.96414 877.2
+427.55887 835.8
+460.76132 634.8
+476.77356 814.2
+532.52740 1930.6
+553.49329 563.8
+568.92719 542.8
+569.03033 641.0
+573.11487 663.1
+630.41864 801.4
+676.62335 949.3
+795.64752 1141.4
+817.15070 632.5
+824.12946 501.5
+847.58722 584.0
+864.02155 655.9
+936.17407 619.8
+1198.17798 3314.6
+1575.33850 572.4
+1592.77551 621.9
+S	1261	1261	417.7302121
+Z	4	1666.88955
+106.49200 734.5
+110.69764 520.2
+113.86954 588.3
+114.45291 523.1
+120.04752 573.0
+120.66599 549.3
+120.78094 589.7
+121.80019 2459.5
+121.81168 748.0
+131.48772 591.6
+132.56337 677.9
+136.65439 542.8
+144.14427 607.0
+159.00714 539.9
+159.81725 753.9
+169.48645 661.2
+175.11890 4584.2
+198.91507 723.5
+199.17876 668.9
+199.19455 740.2
+199.27701 1166.1
+199.29059 2706.8
+199.38904 884.3
+200.33521 736.0
+215.13899 1169.4
+233.16486 33334.1
+234.16815 5213.3
+243.13370 911.1
+249.09741 1541.9
+255.08626 635.7
+255.28107 958.4
+255.29764 658.3
+256.81433 607.7
+261.15973 6859.2
+262.16367 663.0
+267.10898 1133.8
+271.17624 2421.9
+288.20300 76409.9
+289.20712 9494.2
+299.17166 870.3
+309.24536 702.3
+311.12988 515.1
+312.76620 660.5
+314.19058 24667.3
+314.52475 15266.8
+314.85904 3931.4
+315.18784 591.9
+328.65411 658.2
+337.86969 16200.8
+338.20404 8937.8
+338.53726 2606.3
+338.86859 636.2
+340.07721 568.2
+341.14459 1183.4
+350.14566 2567.1
+350.27814 699.7
+351.52426 1360.6
+353.87338 3748.4
+354.20740 2444.0
+354.54300 730.7
+356.70959 2126.3
+359.87677 10077.3
+360.13046 1841.4
+360.21100 6363.3
+360.54535 2362.5
+360.85400 1158.1
+361.18759 1149.5
+370.23468 659.0
+370.70825 13005.3
+371.20905 5060.4
+375.20050 2598.5
+375.53543 2104.2
+375.87146 745.9
+378.14066 14701.4
+379.14468 2394.1
+383.55600 4498.6
+383.89072 3644.5
+384.53308 8916.5
+384.86728 5990.7
+385.20175 1935.3
+387.27127 46113.1
+388.27481 8927.2
+388.46591 1568.7
+388.53259 1548.4
+388.86703 1317.7
+389.27829 770.3
+390.71353 18256.7
+390.96396 17862.4
+391.21500 8715.6
+391.46545 2209.2
+391.71567 1491.4
+392.22897 3352.5
+392.73019 1497.5
+393.74466 1317.1
+394.24841 753.9
+395.21692 5359.9
+395.46692 3147.5
+395.71713 1670.6
+396.15125 5284.0
+396.88690 7907.5
+397.22177 6304.8
+397.55777 2223.6
+397.86362 2674.0
+398.19861 2123.9
+398.52921 954.3
+399.71857 38384.1
+399.96909 27630.3
+400.21933 11577.7
+400.47037 3057.3
+405.02448 548.3
+417.47827 1268.3
+417.72882 872.9
+418.21362 756.5
+421.91174 608.0
+422.21713 619.1
+422.25558 2757.4
+422.75766 1876.8
+424.88199 1388.1
+425.21802 1607.4
+425.55045 1168.7
+426.57010 2634.2
+426.90491 2072.0
+427.54700 18194.8
+427.88089 11758.1
+428.21487 4335.6
+428.55261 780.1
+428.72864 3817.8
+429.23160 1436.6
+433.89850 4898.9
+434.23279 5281.0
+434.56610 1473.7
+438.93369 687.3
+439.23065 6858.2
+439.42163 716.9
+439.56583 4414.1
+439.90164 135369.4
+440.23560 100431.4
+440.38501 641.9
+440.56961 43655.2
+440.90424 10985.9
+441.24026 2051.6
+445.23486 6432.2
+445.56854 3725.2
+445.90479 43492.5
+446.23904 32859.2
+446.57343 12197.6
+446.90787 3036.2
+447.23599 592.0
+447.74390 1083.9
+448.25308 7638.0
+448.56033 1241.2
+448.75418 3463.4
+448.89496 1076.0
+449.25488 1183.0
+451.23792 11425.0
+451.57211 10675.8
+451.90668 3396.1
+452.17877 691.0
+452.24036 1675.7
+453.26016 621.5
+454.56317 1143.2
+454.90210 774.9
+455.23199 1211.3
+457.57629 6606.5
+457.77423 1362.8
+457.91089 3868.2
+458.24481 3295.7
+458.57626 1248.8
+460.56946 20772.8
+460.90405 13926.2
+461.23755 4334.6
+461.77692 1628.8
+463.58041 89230.4
+463.91467 58495.5
+464.24857 23051.0
+464.58286 6503.1
+464.91409 1423.5
+466.21448 1617.2
+466.71585 1371.8
+467.23489 775.5
+468.51242 595.6
+468.58002 1387.1
+468.91537 1385.7
+469.58374 90967.1
+469.91791 59092.3
+470.18958 2434.3
+470.25226 24535.8
+470.45996 549.3
+470.58640 7265.3
+470.78177 105244.3
+470.92252 1423.4
+471.28265 58409.6
+471.59253 4491.5
+471.78421 17602.3
+471.86758 693.9
+471.92624 3662.6
+472.28192 5039.6
+472.78586 861.2
+476.25516 4374.7
+476.75800 1799.9
+477.25897 995.9
+477.59662 1195.6
+477.92981 1681.6
+478.26581 902.2
+480.25449 1352.5
+481.23886 1156.8
+483.26556 708.2
+483.59912 68465.8
+483.93338 53171.6
+484.26782 24194.4
+484.60199 7142.0
+484.93774 905.3
+486.92645 1012.7
+487.26425 774.7
+495.27072 4700.0
+495.60568 4570.3
+495.94009 1572.9
+498.26260 1689.5
+498.30234 4574.8
+499.30203 1024.2
+501.27316 1980.3
+501.61005 1820.8
+501.93710 1156.0
+502.75708 1416.3
+506.29996 22105.8
+506.80167 12679.3
+507.27838 49519.2
+507.61240 44678.8
+507.81161 765.2
+507.94659 19343.4
+508.28165 5411.9
+508.61676 1831.3
+509.23526 3788.3
+510.24142 1479.8
+510.74106 1292.6
+511.23965 714.1
+511.77386 1538.6
+512.27417 1130.2
+516.31311 10475.6
+517.31818 2409.6
+522.76001 1103.2
+526.78076 1408.2
+530.30701 2196.7
+530.80469 2017.0
+531.77362 1129.3
+532.54388 1692.1
+539.31061 8630.7
+539.81110 5155.3
+540.31219 1488.6
+540.77655 28228.1
+541.27747 14338.3
+541.77893 4341.6
+554.29181 1185.4
+556.29883 1638.5
+556.63574 998.1
+567.28314 1941.1
+567.78125 813.1
+572.79291 653.9
+574.82904 2763.3
+575.32855 1452.0
+576.29510 47447.8
+576.79663 28175.1
+577.29779 9549.9
+577.79846 2232.1
+578.30646 714.3
+581.30579 790.3
+582.29694 1129.9
+584.27240 2541.5
+584.77600 1336.3
+591.29742 2117.0
+591.80035 1393.5
+593.33942 1380.4
+594.82635 3175.5
+595.32867 1774.0
+596.29291 5569.0
+596.79401 3763.7
+597.29443 1396.9
+603.83307 6717.5
+604.33215 4850.3
+604.83447 959.3
+605.29730 38601.7
+605.79913 27615.3
+606.30072 10484.5
+606.80060 3003.5
+608.28949 2424.8
+608.78882 1191.0
+609.30969 669.3
+616.81787 1723.6
+617.28796 1954.4
+617.79272 1784.7
+626.11798 601.1
+628.30750 2560.4
+629.31598 1509.7
+630.32678 640.8
+630.38385 729.6
+631.80969 10280.3
+632.31250 8459.4
+632.81317 2672.5
+633.31464 824.2
+633.80890 1073.9
+634.31140 763.3
+637.31543 746.1
+639.11212 1150.1
+639.35242 1519.2
+639.85248 670.0
+640.75934 1422.6
+640.81580 184546.4
+641.31720 124953.7
+641.66235 1162.2
+641.81866 49784.7
+642.31976 13739.0
+642.52875 1022.3
+642.82269 2827.3
+643.31006 833.6
+653.36060 868.0
+654.83020 1579.4
+655.33484 1132.0
+655.83655 901.6
+656.30182 9632.2
+657.30731 2808.2
+659.34332 737.7
+666.35437 2221.5
+668.35065 2399.9
+668.86151 955.5
+672.85217 761.4
+673.83698 1333.5
+674.33887 1087.3
+676.63171 964.0
+681.34259 1786.7
+681.84528 893.2
+684.37061 1068.4
+690.35046 8836.4
+690.85193 6184.6
+691.35211 3653.6
+712.41272 1549.0
+723.37726 3981.1
+724.38116 962.1
+740.40790 7217.1
+741.35724 665.4
+741.41882 1335.4
+759.39374 731.9
+766.44482 2048.0
+786.47552 857.4
+795.64941 685.2
+811.44257 2477.3
+812.44476 975.8
+838.44073 2795.3
+840.45575 871.7
+843.50195 2480.5
+844.51007 827.3
+940.55341 2325.5
+941.54974 1253.2
+967.82159 739.2
+978.11456 565.0
+1101.36694 571.1
+1198.21851 3051.1
+1220.57227 745.1
+1525.36670 848.2
+1557.63623 637.3
+1628.25110 687.7
+1649.25342 649.0
+S	1262	1262	418.2313246
+Z	4	1668.894
+107.60664 586.0
+120.08023 2016.1
+121.80067 2397.1
+125.01759 680.0
+128.92268 651.1
+137.29471 659.0
+150.23962 618.5
+165.78510 665.1
+175.11870 4711.1
+175.97807 551.6
+182.78763 849.1
+194.13968 642.3
+198.91336 999.4
+199.19090 1086.5
+199.26224 1351.2
+199.28969 2471.6
+199.30490 680.8
+199.38783 787.4
+207.11020 573.6
+215.13931 1131.2
+215.62079 563.5
+221.10306 880.0
+233.16486 47143.9
+234.16812 6637.7
+235.68185 590.2
+241.08157 761.7
+241.60463 680.0
+243.13332 633.4
+249.09805 2794.9
+255.07431 525.4
+255.99704 656.8
+257.62512 617.9
+261.15979 6298.9
+267.10788 1227.9
+268.60147 557.8
+270.19205 1340.4
+271.17618 1872.0
+288.20306 89618.7
+289.20703 9897.5
+295.13239 601.4
+298.85287 657.1
+299.17191 1177.7
+299.50552 685.0
+308.91571 617.4
+314.19073 31167.2
+314.52490 16439.1
+314.65680 1287.7
+314.85861 4508.6
+328.65720 700.1
+332.13254 569.2
+337.86963 20389.6
+338.20389 10683.7
+338.53870 2434.3
+341.14603 1405.3
+342.24832 711.4
+350.14633 3228.9
+351.52429 1023.0
+353.87357 2913.6
+354.20807 2020.0
+356.71097 3021.9
+359.87674 11445.4
+360.13168 1936.1
+360.21106 6815.8
+360.54575 2699.3
+360.85355 1687.0
+361.18723 840.3
+361.51620 630.1
+370.70834 14583.1
+371.20959 7215.4
+371.71085 1483.0
+375.20093 3161.2
+375.53543 2072.6
+375.86981 1181.3
+378.14084 16668.6
+379.14474 3074.4
+383.55609 5585.3
+383.88989 3710.7
+384.22443 822.7
+384.53305 7259.1
+384.86633 4473.5
+385.20157 1485.9
+387.27121 48454.1
+388.21649 1164.3
+388.27466 7643.3
+388.53226 1393.9
+388.86960 961.5
+389.27570 1519.1
+390.20200 1926.7
+390.71350 21191.0
+390.96411 21073.1
+391.21478 8174.3
+391.46536 3618.9
+392.22900 3037.4
+392.73001 1670.3
+393.74530 2213.8
+394.24835 985.0
+394.53555 1165.6
+394.86859 719.5
+395.21631 5551.9
+395.46667 4632.7
+395.71677 1640.5
+396.15155 5703.4
+396.88718 10088.6
+397.15457 649.9
+397.22165 6581.0
+397.55551 3358.4
+397.86325 3729.9
+398.19785 1600.3
+399.71844 46578.0
+399.96924 33723.2
+400.21976 14174.9
+400.47092 3673.1
+417.73062 1451.8
+417.97928 1013.0
+420.89886 758.7
+422.21054 681.7
+422.25400 2536.9
+422.75632 1394.5
+424.88242 1635.6
+425.21661 1345.5
+426.57101 1134.0
+426.90463 1604.5
+427.54657 14581.3
+427.88095 9895.4
+428.21509 5261.6
+428.55002 1405.0
+428.72925 2240.3
+429.23251 979.6
+432.22629 1015.4
+433.89841 7418.3
+434.23196 5239.8
+434.56650 1661.5
+434.89920 894.7
+437.41971 603.9
+439.23044 6507.8
+439.42099 1001.4
+439.56628 4529.8
+439.90161 154516.7
+440.08176 659.1
+440.09741 640.3
+440.23557 118267.5
+440.38617 848.6
+440.56961 53549.0
+440.71384 1181.4
+440.90390 18589.3
+441.23776 3166.5
+441.57104 1363.4
+445.00116 648.8
+445.23447 6242.2
+445.56866 4648.3
+445.90479 54555.6
+446.23898 45161.1
+446.57327 15911.8
+446.90692 5694.0
+447.24048 1491.4
+447.74512 1277.9
+448.25314 6294.6
+448.56183 755.3
+448.75537 3368.0
+448.89612 1180.4
+449.23114 837.8
+451.23761 11087.4
+451.57227 9984.1
+451.90552 3201.8
+452.17676 1230.8
+452.24457 1373.0
+454.56470 2342.2
+454.89853 1092.0
+457.57678 9733.9
+457.77206 1887.4
+457.91150 6179.7
+458.24667 1924.1
+458.28162 1043.4
+460.56958 14551.8
+460.90417 10165.7
+461.23834 5224.8
+461.57144 2186.5
+461.77771 1807.1
+462.27615 721.2
+463.05484 760.7
+463.58035 102171.5
+463.91452 76424.4
+464.24866 30906.4
+464.58319 11112.8
+464.91766 2965.7
+466.21582 1665.7
+466.72021 1110.6
+467.23663 762.9
+468.58002 1171.4
+469.58368 93642.7
+469.91788 63063.0
+470.18875 1196.0
+470.25214 27515.8
+470.58710 8300.4
+470.78171 112381.2
+470.92447 1852.1
+471.28281 60437.2
+471.59207 4739.3
+471.78406 17970.8
+471.92725 3840.5
+472.19131 711.3
+472.28403 4487.4
+472.59512 687.5
+475.22003 755.6
+476.25525 3627.4
+476.75876 2484.3
+477.59647 1765.4
+477.92996 1781.3
+478.26620 1438.7
+482.67194 1056.5
+483.59915 78943.8
+483.76544 609.1
+483.93332 60813.8
+484.26776 29684.8
+484.60233 8142.0
+484.93716 2693.1
+495.26981 5297.2
+495.60608 3920.0
+495.93945 2319.5
+496.60913 677.9
+498.30237 4518.5
+498.91516 1077.7
+499.03381 568.8
+499.30643 1067.0
+501.27484 2540.6
+501.60782 1696.8
+501.73520 928.8
+501.94751 776.2
+502.76041 752.9
+506.29971 24366.7
+506.80148 14488.7
+507.27850 66123.2
+507.61221 50012.8
+507.94653 24398.8
+508.28067 8424.9
+508.61215 722.5
+508.94653 651.2
+509.23523 3316.4
+510.74164 1820.1
+511.24448 663.0
+511.77344 2999.4
+512.27478 1679.1
+516.31348 10374.5
+517.31665 2634.3
+522.75885 1289.9
+523.25537 997.7
+523.76483 798.4
+526.77667 696.2
+530.30774 1544.1
+530.80597 1187.2
+531.77148 1772.1
+532.27466 790.5
+532.52283 1692.0
+539.31110 8811.4
+539.81158 5180.4
+540.31329 2352.7
+540.77649 24515.1
+541.27747 13118.4
+541.77893 4516.1
+542.27374 1152.0
+549.17102 766.6
+549.28137 645.9
+556.29980 954.3
+567.27832 1031.2
+572.29333 797.9
+574.82825 2087.1
+575.33008 1607.2
+575.83112 872.4
+576.29504 49270.6
+576.79651 27665.8
+577.29858 10720.7
+577.79791 3061.6
+578.29919 727.4
+584.27094 1111.9
+584.77911 909.4
+591.30212 1233.8
+593.33679 892.3
+594.82764 2733.3
+595.32355 1082.8
+596.29248 5556.6
+596.79327 3083.4
+597.29462 1586.7
+603.83228 8115.7
+604.33337 4288.7
+604.83344 1580.4
+605.29749 37046.1
+605.79926 23225.1
+606.13580 653.4
+606.30054 8620.2
+606.80280 2088.6
+608.28912 4008.1
+608.79401 2089.7
+609.29645 1070.6
+616.81592 2516.5
+617.29260 3322.1
+617.79065 1418.7
+628.30951 3850.9
+629.31079 1149.0
+630.42297 796.3
+631.81073 12404.4
+632.31232 10148.5
+632.81464 4136.4
+633.31470 810.2
+638.30011 812.1
+639.35071 1330.0
+640.81586 177878.7
+641.31708 130864.5
+641.65936 933.3
+641.81860 55283.7
+642.16663 703.6
+642.31970 15661.5
+642.54681 611.8
+642.81903 3551.9
+646.33136 1257.8
+654.83020 2413.8
+655.33295 1587.7
+656.30298 11014.5
+657.30646 4189.4
+658.31061 1060.3
+664.36096 630.1
+666.35480 2385.3
+667.36041 961.7
+668.35455 2309.9
+668.86182 1034.3
+669.36414 948.8
+673.83698 1662.8
+676.62921 1230.6
+681.34552 1627.4
+681.84711 1272.2
+682.35083 841.2
+690.35071 8952.0
+690.85168 7449.3
+691.35254 3548.4
+691.85535 1047.5
+712.41351 771.1
+723.37573 3538.3
+724.38074 1580.4
+740.40790 4342.4
+741.37488 624.1
+741.42310 1491.0
+766.44501 1226.9
+795.65295 1077.9
+811.44891 1019.6
+812.44366 768.6
+838.44116 2690.9
+839.44293 1082.4
+843.50024 1606.6
+940.55847 1953.4
+941.55176 806.6
+959.25250 569.2
+966.89288 534.0
+966.92273 529.8
+967.25671 610.2
+967.80933 580.4
+995.20862 650.7
+1011.89435 636.1
+1057.23547 793.2
+1107.48853 619.5
+1129.90247 561.7
+1155.46008 602.5
+1198.17200 3464.3
+1275.18030 571.3
+1389.47119 691.0
+1502.85828 598.2
+1535.08435 627.0
+S	1263	1263	1879.91340793
+Z	3	5636.465
+Z	2	3757.979
+506.98880 702.9
+516.44781 579.7
+532.51770 2290.5
+554.69067 732.6
+604.57544 602.1
+630.42090 787.4
+676.62567 759.5
+783.82721 583.8
+924.09601 580.9
+942.48938 571.5
+1187.96936 694.2
+1198.16077 3152.1
+1400.33374 699.4
+1480.47144 651.4
+1525.45630 933.0
+1561.54224 587.8
+1699.65649 587.3
+1870.62756 664.9
+1872.97290 577.5
+1878.54321 809.1
+1878.93750 764.3
+1879.50085 19814.0
+1880.46570 679.0
+1903.16162 650.5
+1907.09009 7359.9
+S	1265	1265	417.7346671
+Z	4	1666.90737
+100.42933 571.0
+108.42806 510.8
+108.91836 546.8
+110.04118 599.1
+121.80077 2199.8
+121.80560 648.6
+122.16647 538.6
+127.40119 575.8
+135.11684 661.4
+143.79085 517.9
+145.13031 545.4
+148.88286 571.4
+156.59680 582.9
+158.23102 605.3
+158.80852 625.0
+160.67809 682.7
+167.24118 611.3
+174.15874 766.1
+190.92888 598.0
+193.50356 573.3
+194.24355 490.2
+197.70081 642.1
+198.91606 1063.6
+199.18640 739.3
+199.22722 857.7
+199.28333 2064.9
+199.29874 1820.8
+199.37236 737.3
+199.39803 584.7
+218.83713 524.6
+233.16449 39541.3
+233.57886 819.9
+234.16786 5911.5
+249.09764 1098.5
+261.15958 6077.1
+262.16360 1278.6
+288.20255 16821.1
+289.20645 2116.9
+299.17245 978.2
+314.19022 25383.7
+314.52451 11690.3
+314.65857 826.1
+314.85904 3656.0
+323.87250 594.1
+328.65549 1767.4
+337.86911 18114.6
+338.20352 12013.5
+338.53830 2789.2
+350.14673 1075.1
+353.87219 1237.6
+354.20581 1159.8
+359.87650 5306.0
+360.21118 4006.8
+360.54538 1824.8
+370.70764 2669.9
+371.20969 1277.3
+375.53680 655.5
+378.14056 7323.2
+379.14307 1474.6
+383.55502 4845.6
+383.89023 4793.6
+384.22330 1236.6
+384.53253 1282.4
+384.86548 891.4
+387.27081 6377.9
+387.69290 638.0
+388.27399 1593.7
+390.20084 1049.5
+390.71210 3878.0
+390.96375 4443.0
+391.21478 3256.7
+391.46652 850.3
+395.21606 1164.5
+395.46719 1625.7
+396.15125 3719.4
+396.88727 3476.4
+397.02423 831.4
+397.21982 3022.8
+397.55597 1263.5
+399.71811 53576.7
+399.96878 47323.3
+400.21957 24533.6
+400.46991 5340.4
+400.72040 1090.8
+402.89001 1522.6
+403.22519 2227.2
+403.55850 721.6
+426.90759 940.0
+427.55151 1018.9
+433.89670 1847.7
+434.23172 1986.7
+435.56213 567.3
+439.56729 1011.9
+439.90100 92531.0
+440.23508 83074.0
+440.56931 35840.8
+440.71240 709.0
+440.90396 10045.6
+441.23395 1069.2
+445.23456 1130.1
+445.56934 1194.6
+445.90445 37873.2
+446.23849 32489.2
+446.57278 12936.8
+446.90646 2957.6
+447.23770 1113.7
+448.89389 733.1
+451.23660 908.2
+451.57117 1781.5
+457.57547 2150.8
+457.77356 1795.8
+457.90829 1157.1
+458.24249 1243.1
+460.56931 762.6
+460.90182 1002.5
+462.86111 583.2
+463.57986 79602.4
+463.91400 71895.3
+464.24820 33467.6
+464.43192 802.8
+464.58228 8208.1
+464.91306 1007.5
+469.58319 58551.7
+469.87466 866.7
+469.91733 50905.3
+470.25180 23502.4
+470.58646 6735.6
+470.78116 40906.9
+471.28235 24379.0
+471.78351 9689.6
+472.28384 1862.4
+476.26318 728.5
+483.59863 37250.7
+483.93274 38064.8
+484.26721 19787.8
+484.60120 6991.0
+495.26755 603.4
+495.60684 1437.5
+506.29932 15866.7
+506.80078 10263.6
+507.27798 40964.5
+507.61185 39072.7
+507.94601 21119.3
+508.28027 5655.5
+509.23691 1364.2
+516.31317 1443.5
+532.55914 2102.4
+539.31049 4507.2
+539.81201 2800.1
+540.31805 856.6
+540.77466 1912.6
+541.27411 1017.1
+541.79077 767.0
+543.60449 723.9
+574.82758 1640.7
+575.33344 1672.6
+576.29498 5826.8
+576.50262 794.3
+576.79498 4812.2
+577.29858 1628.1
+596.29004 966.9
+599.67993 732.6
+603.83386 2247.2
+604.33514 1358.6
+604.83386 947.9
+605.29517 2717.1
+605.80011 1599.0
+608.29022 2209.0
+608.79358 865.8
+617.29370 1198.6
+617.79626 1523.6
+628.30768 1972.0
+630.42169 833.2
+631.80817 1831.4
+632.31091 2118.4
+632.81616 888.1
+640.81549 18548.9
+641.31683 19265.4
+641.65826 618.0
+641.81793 7606.8
+642.32190 1876.5
+656.30225 6053.9
+657.30499 2415.0
+674.34338 820.4
+676.61584 1301.2
+681.02625 638.8
+681.84314 825.2
+795.66272 1155.3
+847.51105 580.8
+1006.35071 557.2
+1044.43640 520.2
+1051.28381 596.1
+1184.66980 701.4
+1188.11511 857.6
+1198.25574 3407.7
+1249.29919 612.7
+1456.56824 569.6
+1525.41980 903.4
+S	1266	1266	418.4855746
+Z	4	1669.911
+107.17898 559.5
+120.08030 3978.4
+121.79613 860.1
+121.80061 2218.1
+128.57358 742.5
+133.14082 1120.3
+139.87021 616.0
+143.10664 589.5
+157.21338 533.9
+175.11874 1513.8
+177.73563 535.0
+187.11761 580.7
+188.16255 608.2
+198.05641 569.2
+198.91475 1094.7
+199.18909 822.5
+199.25998 615.5
+199.26584 717.6
+199.28760 2613.5
+199.38690 735.2
+205.27835 578.1
+233.16467 54687.9
+234.16817 8204.3
+235.17085 748.6
+238.72917 586.8
+249.09811 2109.6
+261.15942 9107.4
+262.16077 889.8
+264.45648 558.3
+267.10776 1021.5
+269.75549 524.4
+288.20273 21832.5
+289.20676 3238.0
+308.52292 590.2
+314.19046 35170.3
+314.52454 18340.0
+314.65909 921.5
+314.85876 3352.1
+315.19131 687.7
+328.65573 2368.1
+329.15640 888.1
+337.86938 27449.6
+338.20374 17698.0
+338.53806 6239.1
+338.87219 942.7
+350.14685 1207.8
+350.27475 589.5
+353.87259 1609.7
+359.87695 7423.3
+360.21094 5612.8
+360.54364 1648.5
+366.23276 552.8
+367.28195 530.5
+370.70755 3136.2
+371.21036 1760.4
+375.20197 679.6
+377.55286 915.5
+378.14072 8419.8
+379.14566 1150.7
+381.35464 697.2
+383.55585 8694.7
+383.88998 6317.6
+384.22354 1693.5
+384.53180 1294.3
+384.86560 1905.8
+387.27106 8249.6
+388.21381 701.3
+388.27466 1777.7
+390.20248 1645.7
+390.71277 4671.2
+390.96381 5123.1
+391.21643 1961.2
+391.46445 867.6
+392.23053 987.2
+393.74539 830.0
+395.21606 2339.9
+395.46799 2091.8
+395.71704 1206.2
+395.96622 754.9
+396.15118 5745.1
+396.88699 5882.4
+397.15375 1155.9
+397.22168 4132.0
+397.55551 1691.4
+399.71854 69387.8
+399.96902 69682.5
+400.21976 39180.7
+400.47006 12987.7
+400.56183 587.2
+400.72009 3115.1
+402.89099 1214.0
+403.22400 1098.9
+420.79834 653.0
+422.25690 802.7
+424.88214 906.2
+426.57010 1791.6
+426.90436 1671.9
+427.23627 752.9
+427.54541 1977.2
+427.88290 761.5
+433.89786 2084.4
+434.22556 1199.3
+434.56357 1062.5
+439.22906 1370.3
+439.75308 790.7
+439.90143 129063.9
+440.23550 102205.4
+440.56943 46711.9
+440.90390 10828.0
+441.21216 655.3
+441.23889 1260.4
+441.33636 534.5
+445.90472 55423.5
+446.23886 46128.2
+446.57315 20327.2
+446.90710 4394.9
+447.24008 802.5
+448.25308 1071.1
+448.56229 1424.3
+448.88959 761.7
+449.89606 717.5
+451.23572 2404.4
+451.57275 2208.6
+454.89700 1269.0
+457.57477 2087.4
+457.77271 1381.3
+457.91141 2700.0
+458.27460 728.0
+460.57004 1481.2
+460.90405 1462.5
+461.23782 720.9
+463.23370 793.8
+463.58020 116427.6
+463.91443 102517.0
+464.24829 45014.6
+464.58249 14234.7
+464.91525 2327.9
+464.97464 800.5
+469.58340 95453.0
+469.91779 82145.8
+470.25189 39439.8
+470.58588 10061.1
+470.78152 47034.8
+470.92099 2669.9
+471.28259 25925.0
+471.58850 1108.5
+471.78348 7377.1
+471.92886 760.8
+472.28482 1306.9
+477.59448 768.4
+483.59891 51312.4
+483.93304 49832.4
+484.26752 18923.8
+484.60199 3415.9
+484.93442 820.9
+491.26001 532.8
+495.26715 791.0
+495.60474 1192.8
+498.30319 747.1
+504.91693 697.2
+506.29953 20307.0
+506.80124 13210.1
+507.27823 59978.9
+507.61206 56945.3
+507.94644 26472.9
+508.28058 8468.0
+508.61404 1785.1
+509.23410 1118.0
+516.31287 1788.8
+522.39026 614.2
+532.55927 2210.2
+539.31000 4398.9
+539.81030 2035.8
+540.77704 2291.4
+541.27856 1924.4
+574.83038 3528.5
+575.33276 1224.1
+576.29510 8029.0
+576.79657 4491.0
+577.29895 2090.3
+579.90210 683.1
+603.83124 2204.1
+604.33423 1775.0
+605.29639 2950.4
+605.79822 2105.0
+606.30646 706.2
+608.28949 3184.5
+608.79102 1634.3
+617.29443 2153.7
+617.79510 1902.4
+618.29761 1231.6
+628.30768 2338.3
+629.31134 1184.3
+631.80554 1422.4
+632.31329 1679.7
+639.35187 1440.8
+639.85193 1187.8
+640.35358 1011.1
+640.81567 28443.1
+641.31696 25245.7
+641.81848 10612.3
+642.32086 4021.0
+653.05615 707.4
+656.30273 10128.5
+657.30609 3767.4
+658.31354 1267.2
+676.63599 1565.3
+688.93866 569.9
+690.35223 1759.6
+690.85486 1353.6
+731.11804 601.5
+740.96210 589.4
+773.79492 719.1
+794.96722 501.3
+795.65332 966.7
+864.00378 541.6
+871.27722 605.6
+882.99109 628.5
+883.51318 627.7
+937.78534 581.5
+1019.70282 623.6
+1057.22473 855.7
+1130.13599 569.2
+1198.25476 3440.3
+1349.68359 590.4
+1525.39111 801.1
+1590.85046 564.9
+1683.71936 518.8
+S	1267	1267	463.5137196
+Z	4	1850.02358
+115.21188 566.7
+120.95974 574.9
+121.80058 1942.2
+121.81269 585.7
+122.00063 547.5
+128.58249 672.9
+130.22632 551.3
+132.39131 595.8
+145.88191 543.0
+162.67126 673.8
+175.09035 835.1
+183.14929 660.9
+186.12376 844.7
+195.08310 523.3
+197.16414 1011.4
+197.70573 664.3
+198.29053 542.1
+198.91589 683.8
+199.19194 1104.2
+199.20410 936.6
+199.28914 2791.3
+199.30020 1207.2
+199.31743 868.8
+199.41565 703.9
+201.08641 3282.2
+203.08472 693.6
+223.63445 880.1
+227.06691 1099.7
+228.17023 3132.0
+242.67815 534.7
+246.18095 16978.0
+247.18488 3104.2
+249.15947 33903.7
+250.16269 5099.5
+255.07423 583.8
+267.11798 831.2
+268.24228 669.3
+273.16833 1405.4
+275.17352 892.2
+277.15445 13388.9
+278.15811 1807.4
+278.69519 1150.1
+280.63876 2523.7
+282.29593 549.2
+292.19968 1543.2
+292.69147 3665.1
+297.17255 670.3
+304.64059 791.2
+308.90814 579.9
+312.51978 554.6
+315.16965 722.8
+316.11215 1207.3
+319.22293 1212.8
+323.24365 2754.7
+327.73730 1016.2
+329.14725 945.1
+332.12717 1798.1
+335.18109 912.5
+338.15201 1009.7
+341.25436 11624.7
+341.39023 693.4
+341.73273 1651.9
+342.25775 2236.1
+348.19052 1320.9
+349.71326 6379.4
+350.14536 687.9
+350.21552 2195.2
+350.27847 1057.2
+357.21292 9769.3
+358.21667 1759.1
+358.28125 2516.0
+360.19232 589.8
+363.17325 5795.1
+364.17801 851.0
+366.14700 1650.1
+370.89813 1386.0
+375.22336 14594.6
+376.22723 2300.6
+376.57568 1838.3
+376.73636 8205.9
+377.23886 2975.0
+378.14026 3667.4
+381.38062 662.2
+385.24939 5926.4
+385.75058 2280.1
+390.88275 578.3
+391.88202 2836.0
+392.21613 1899.8
+392.54935 744.4
+394.14078 646.6
+395.30124 886.6
+397.88571 6685.3
+398.21997 4865.5
+398.55502 1319.4
+399.24664 6002.2
+399.74960 2100.1
+402.04813 561.3
+403.19736 788.7
+408.19498 9902.8
+409.19830 1952.8
+409.24243 7528.6
+409.57614 3989.8
+409.89218 560.5
+409.91400 1268.6
+414.23001 532.2
+414.91849 4503.8
+415.25269 3181.5
+417.47763 1007.3
+420.89505 907.6
+421.22775 1270.2
+422.25577 1213.8
+426.56793 1964.9
+426.90469 1145.9
+429.89618 4494.0
+430.22711 2726.9
+430.56525 1105.3
+432.25116 1215.3
+434.21188 1547.9
+435.89972 15112.8
+436.23434 9297.3
+436.56860 3053.3
+436.90115 988.3
+439.90128 21414.0
+439.99619 811.2
+440.23492 14475.3
+440.56937 3707.7
+440.76166 1024.8
+440.90396 1334.2
+442.57266 675.2
+442.74551 858.7
+444.49896 2639.2
+444.75012 4282.7
+445.00128 2584.4
+445.26746 1791.0
+445.44669 799.0
+445.76831 1236.5
+446.21750 1985.7
+446.26004 357139.2
+446.73065 631.2
+446.75204 1773.7
+447.02155 591.8
+447.08136 871.7
+447.15356 1322.2
+447.26306 82623.2
+448.26611 11924.5
+459.87347 647.9
+468.92227 14415.4
+469.25659 13927.6
+469.59039 10685.0
+469.92447 6141.6
+470.25735 1783.5
+470.78192 4637.3
+471.28308 1570.2
+471.78406 781.7
+471.92487 835.0
+475.21918 839.3
+476.77377 1240.2
+478.26779 719.6
+479.23123 14706.7
+480.23566 4374.3
+480.92154 1109.5
+481.25482 1300.7
+481.59259 838.7
+483.22147 1089.8
+485.29044 2299.2
+486.92569 1270.9
+487.26044 1629.6
+492.60098 5206.7
+492.93600 5000.8
+493.26901 1424.2
+493.59659 769.8
+493.93787 920.6
+498.25107 1112.2
+498.58072 1033.6
+499.28510 3580.2
+499.78842 1829.7
+503.92444 4896.4
+504.25748 4533.2
+504.59302 2164.4
+506.27032 1257.8
+506.75790 2203.8
+507.26245 847.4
+510.24490 1271.1
+513.60938 2048.0
+513.94165 934.5
+515.27301 3557.7
+515.77362 2191.8
+518.76001 1663.1
+519.23212 1060.3
+519.28796 1314.3
+519.61749 4013.9
+519.94843 2991.9
+520.28375 2095.0
+525.29034 7787.0
+525.62524 7054.8
+525.95966 4904.5
+529.94098 1503.7
+532.27545 1146.9
+532.54547 2125.0
+533.29163 2232.0
+533.78979 1040.5
+535.61475 1050.0
+535.94910 1914.3
+536.28180 874.1
+541.80444 3070.7
+542.29541 6796.8
+542.79883 4114.0
+543.29840 1444.2
+545.32782 7386.3
+546.33063 1593.1
+550.80890 17265.9
+551.31042 9843.8
+551.81134 3106.0
+554.36835 729.9
+555.80090 2966.5
+555.84637 6177.1
+556.29956 1974.9
+556.34851 4464.0
+556.79749 927.0
+556.84821 2229.6
+560.83478 824.2
+564.35956 4561.9
+564.80621 23165.8
+564.86029 2103.7
+565.30756 12273.0
+565.80823 6192.4
+566.30908 1978.3
+569.84802 742.0
+571.39319 749.7
+573.96985 908.1
+574.31226 731.1
+577.81342 1066.5
+578.31152 1043.2
+579.64514 1085.8
+580.28241 2378.7
+581.28119 1150.5
+583.39227 2320.0
+584.37280 3736.1
+585.37189 1173.1
+587.31909 7302.7
+587.82092 3698.7
+588.32062 2015.0
+589.98712 637.5
+590.26483 1797.2
+591.81256 1067.2
+596.32452 13145.3
+596.82642 7804.3
+597.32941 2777.9
+600.82007 786.3
+604.86292 849.9
+608.27301 15045.9
+608.79639 710.9
+609.27356 4664.2
+613.35944 28066.7
+613.86102 21292.9
+614.36377 6522.2
+614.86664 1253.2
+617.30957 3519.4
+617.81073 2995.4
+618.31415 1401.9
+618.81488 715.4
+621.87256 19555.0
+622.37415 14311.2
+622.87756 4596.8
+623.36078 1661.2
+625.31671 662.5
+630.83331 1255.9
+631.33502 1605.3
+632.34045 2912.5
+635.82697 3098.7
+636.32855 1607.3
+637.32996 1608.0
+639.35083 845.0
+639.85156 1006.1
+642.34198 1817.4
+644.33978 8272.4
+644.83344 22643.5
+645.33466 16338.6
+645.83514 6429.2
+646.33618 6187.3
+646.83746 3393.1
+647.34509 905.0
+653.34564 92622.6
+653.84662 66563.1
+654.34753 29604.7
+654.47058 861.9
+654.84863 10273.8
+655.35065 2034.0
+659.37097 12565.0
+660.37671 3268.4
+661.38177 865.6
+665.34418 867.5
+668.87561 4799.8
+669.37488 3260.3
+669.88055 1875.2
+674.85364 831.1
+676.62146 1250.2
+677.39325 1243.7
+677.87952 2253.2
+678.38397 1254.0
+678.89081 819.6
+682.45929 1928.6
+683.47076 662.9
+686.39514 1878.0
+686.89612 1195.7
+687.41431 917.6
+693.87372 716.7
+694.86780 688.8
+695.38385 870.4
+698.41693 5373.7
+699.42255 1025.7
+702.88007 9144.5
+703.38123 6915.0
+703.88177 2082.2
+704.37653 1319.3
+705.28931 1399.8
+721.91327 1381.5
+722.91815 1088.2
+723.29999 7871.0
+724.30371 2846.2
+725.30255 873.0
+752.47009 1387.7
+769.48718 969.4
+795.65912 1022.7
+797.48511 5141.1
+798.49530 1435.9
+804.59180 592.7
+809.45490 1001.0
+827.46173 962.0
+898.48962 1507.2
+899.49689 1007.4
+908.50494 961.5
+926.53027 1733.7
+927.53314 866.6
+948.08545 605.7
+965.43262 1204.6
+966.43683 750.0
+997.55725 1291.6
+1019.71680 1113.5
+1029.54089 2127.1
+1030.53577 892.9
+1079.27063 656.8
+1079.54028 786.3
+1112.70691 696.7
+1198.21838 3504.4
+1211.73779 688.5
+1285.32495 665.9
+1326.51953 626.0
+1387.03027 572.3
+1514.85596 622.5
+1808.16394 736.9
+S	1269	1269	417.7291746
+Z	4	1666.8854
+100.86774 541.4
+103.45802 608.3
+105.20715 545.9
+111.17065 564.8
+111.59261 593.9
+116.75655 509.7
+120.08015 1911.3
+121.80094 2336.5
+140.36583 601.3
+145.52744 529.3
+146.21603 522.5
+160.00780 666.4
+161.05098 637.2
+162.10139 573.8
+165.78403 799.8
+179.15588 575.3
+179.41927 516.5
+182.94917 608.6
+194.68430 661.9
+198.91687 790.7
+199.19566 752.3
+199.26361 762.6
+199.27324 1096.3
+199.29253 2764.3
+199.32083 677.1
+199.38948 1040.4
+200.28014 702.2
+213.30209 574.1
+213.33893 544.1
+214.56544 532.0
+233.16422 19578.4
+234.16750 3554.1
+259.86722 568.2
+261.15903 4165.3
+262.16333 720.4
+272.87622 611.7
+275.35712 586.1
+288.20218 3366.7
+299.56638 1008.1
+314.18991 12150.1
+314.52435 5495.4
+314.65567 1111.9
+314.85773 1783.1
+318.42661 642.9
+328.65732 799.5
+337.86893 9790.4
+338.20331 6934.9
+338.53717 1360.2
+338.87085 808.5
+352.75244 688.5
+359.87735 817.1
+360.21033 1350.5
+370.70645 747.8
+378.13980 2239.5
+383.55551 2812.2
+383.88812 1171.4
+387.27164 1418.7
+390.19974 735.8
+390.96136 945.7
+395.46704 615.8
+396.15216 1522.1
+399.71771 25988.7
+399.96820 34856.7
+400.21893 19110.5
+400.46924 4206.3
+402.89215 1114.5
+403.22568 784.4
+439.90048 32059.8
+440.23465 43021.4
+440.56888 21861.7
+440.90332 6196.8
+445.90369 15216.5
+446.23792 17285.9
+446.57269 7547.0
+446.90778 1145.2
+463.57928 38997.5
+463.91348 38189.5
+464.24771 19632.7
+464.58118 4964.7
+464.91434 688.3
+469.58279 30838.9
+469.91672 26532.0
+470.25150 13799.2
+470.58554 2727.2
+470.78040 11966.9
+471.28207 10676.6
+471.78345 3783.7
+472.28455 1161.0
+483.59827 14296.7
+483.93259 15834.6
+484.26688 12084.1
+484.60172 3556.3
+492.22968 1086.4
+492.72775 844.3
+494.26617 858.7
+502.91220 1359.2
+503.57883 626.1
+506.29898 6957.7
+506.79947 5021.4
+507.27780 17054.0
+507.61130 20974.0
+507.94525 9661.5
+508.27893 2695.2
+532.55682 1938.1
+539.81012 1102.3
+540.12122 604.6
+549.19049 987.1
+549.74268 2877.1
+550.24457 1303.5
+575.83240 653.8
+576.29358 1044.7
+576.79401 920.1
+603.82880 752.8
+606.28412 746.7
+609.08105 633.7
+613.92969 584.1
+630.44891 820.6
+640.81458 3278.8
+641.31598 3687.6
+641.81964 2377.4
+643.97559 571.6
+656.30200 3525.5
+657.29840 1220.4
+674.34607 721.9
+676.62842 784.3
+795.66394 1083.2
+839.95569 530.0
+858.10223 770.5
+926.02917 639.7
+1019.88104 572.2
+1054.07654 591.6
+1057.23035 765.1
+1123.02966 589.3
+1165.17114 589.7
+1188.30066 731.6
+1198.24658 3265.8
+1214.56641 706.2
+1253.97253 614.2
+1267.15442 552.5
+1325.68762 547.0
+1375.85046 703.7
+1406.24524 578.2
+1465.46130 643.3
+1525.52808 945.5
+1642.39771 604.8
+S	1270	1270	434.9759096
+Z	4	1735.87234
+106.36079 673.8
+113.20904 569.2
+114.12738 558.0
+120.67108 568.6
+121.78825 575.4
+121.80202 2485.8
+122.50904 589.1
+159.63522 521.0
+166.06013 530.1
+186.12317 2830.4
+188.14766 545.1
+188.25156 1039.3
+188.26738 1894.0
+188.28638 2380.4
+188.29884 2350.4
+188.35793 584.5
+188.38797 594.2
+188.45090 636.0
+197.70677 576.1
+199.10709 2369.1
+199.25905 597.7
+199.26920 1090.3
+199.27795 1446.9
+199.28937 1771.6
+199.29863 1613.3
+199.30995 1764.5
+199.33696 712.7
+199.40509 595.5
+202.65314 746.1
+212.11758 1260.3
+214.52679 809.8
+226.08189 2336.4
+227.10236 2886.4
+231.14871 18182.4
+231.63869 2284.4
+232.15208 2557.4
+233.16429 2940.3
+240.15195 65806.8
+240.54535 772.2
+240.65379 15977.8
+241.15485 1693.6
+244.09216 1216.2
+244.12875 2292.1
+250.81110 679.4
+255.30473 655.9
+255.76709 621.8
+259.14352 3497.4
+262.89102 495.1
+276.17020 27258.9
+277.15485 894.6
+277.17404 3999.4
+283.13928 1016.8
+285.13364 2009.3
+288.66043 3725.4
+289.15268 1873.0
+294.18073 14258.2
+295.18414 2203.5
+297.66537 20313.9
+298.16684 5503.7
+298.66229 11709.0
+299.16418 3458.0
+299.66605 845.6
+306.16809 3926.7
+306.67175 1043.9
+308.91663 723.3
+311.65070 1234.7
+312.66040 967.0
+315.18103 765.9
+320.16550 9765.0
+320.66745 3762.4
+333.19055 1523.9
+334.16357 753.7
+344.17856 760.7
+346.15088 2036.5
+347.16968 1146.0
+348.99554 601.4
+351.20267 3850.0
+353.18088 7457.1
+353.68292 3085.5
+354.18967 676.3
+355.68369 1612.7
+356.18521 1320.9
+357.17682 868.7
+359.11932 1176.7
+361.16800 4857.1
+361.66983 1782.9
+362.18057 746.9
+364.16095 5726.9
+365.16415 1331.4
+366.52740 1667.9
+366.86014 1330.4
+367.19238 771.4
+368.20758 2185.9
+369.68164 5753.5
+370.18741 1932.8
+371.19208 908.2
+374.30118 577.5
+375.85132 732.8
+376.70889 1390.8
+379.70200 3639.5
+380.20493 2607.9
+384.43695 657.0
+385.18585 2493.9
+385.68555 1087.8
+392.19116 1186.3
+393.69864 4398.7
+393.95151 1093.7
+394.20117 2841.0
+397.95679 921.6
+401.19699 1330.8
+404.26370 1830.4
+406.20618 957.7
+406.54163 1140.0
+406.87201 598.8
+410.20209 1897.6
+410.69373 2480.8
+411.19479 1239.3
+411.69144 3456.1
+412.20978 4668.7
+412.54565 3267.8
+412.69745 854.7
+412.88052 1314.1
+416.96317 646.6
+419.20786 8864.2
+419.70868 4236.6
+420.20639 1453.3
+427.56281 968.8
+441.72549 649.9
+442.16965 1058.0
+445.69113 640.6
+448.21698 1933.1
+449.22006 1252.6
+450.23932 3819.2
+450.74255 1286.7
+452.87946 890.6
+458.23102 951.5
+458.55292 2442.1
+458.88882 2055.6
+461.23291 1707.4
+461.28604 2792.0
+461.57047 1299.8
+462.28479 786.6
+466.22614 1037.2
+466.74371 2421.0
+466.89890 815.6
+467.23096 789.3
+469.56387 1212.7
+469.89862 1455.7
+470.22977 1611.0
+470.56137 836.2
+475.56833 8959.5
+475.74960 10945.3
+475.90085 11898.8
+476.23175 9026.5
+476.56589 5110.8
+476.75101 1794.3
+477.23108 742.8
+479.29660 15002.2
+480.29984 3959.8
+481.57230 48307.8
+481.90479 54191.8
+482.23776 32526.7
+482.57074 12113.4
+482.90500 2313.1
+483.22757 1521.5
+484.75430 1084.8
+486.45105 579.6
+487.26450 572.3
+487.57559 131330.2
+487.90979 114300.1
+488.24390 50379.1
+488.47034 798.0
+488.57800 21622.9
+488.71191 763.1
+488.91119 5216.6
+489.04520 1097.3
+489.24585 767.8
+491.71512 6074.2
+492.21695 3056.9
+492.25629 2164.4
+492.71896 720.0
+493.25806 764.7
+498.74765 1338.9
+499.24481 838.4
+507.26224 14083.3
+507.76367 9512.7
+508.26608 3904.5
+511.22870 9661.9
+512.23169 2806.7
+514.60254 662.3
+515.24152 841.0
+518.59570 957.0
+520.25061 3276.0
+524.60022 2808.6
+524.93500 2226.4
+525.26489 809.2
+530.27338 5356.8
+530.61212 3134.4
+530.95007 1620.0
+531.26807 963.3
+531.29559 1144.2
+531.76544 1050.5
+532.56415 2172.5
+536.59875 5364.7
+536.93256 6581.0
+537.26624 3264.8
+540.27850 5019.9
+540.77899 3508.5
+549.17889 701.4
+549.28357 24935.6
+549.78467 12412.6
+550.28741 4920.5
+550.78644 1614.7
+554.26141 825.2
+555.76312 937.9
+557.77515 732.2
+563.26923 875.9
+564.16150 603.7
+571.78363 12116.3
+572.28424 6640.1
+572.78461 3140.6
+575.26404 764.2
+575.77148 878.2
+576.31268 7316.9
+577.27887 1117.3
+577.32300 1650.1
+579.73840 639.3
+580.78729 1868.9
+584.27063 1742.2
+594.32269 37760.5
+595.32611 12543.2
+595.46716 549.3
+596.32550 2765.0
+600.30042 1051.7
+606.29437 812.9
+608.80817 3317.6
+609.30664 3562.4
+609.80701 1107.4
+617.81262 12117.1
+618.31329 9207.3
+618.81531 4152.1
+619.26929 1280.1
+619.31476 894.8
+620.29553 1760.3
+620.78619 4310.8
+621.28455 2078.3
+621.78864 747.6
+624.31232 9426.3
+625.31561 4126.2
+626.32281 981.0
+629.29620 46666.4
+629.79773 38656.9
+630.29901 17909.3
+630.43231 804.7
+630.80096 5866.6
+631.30151 1511.1
+639.32257 6210.7
+640.32074 3164.7
+640.78467 1009.4
+641.30475 695.3
+648.80322 1521.3
+649.30072 1955.9
+649.80609 792.1
+657.80658 3951.3
+658.30743 4517.9
+658.80420 1282.9
+664.81183 720.8
+665.31494 1093.7
+666.81311 8357.3
+667.31506 6377.0
+667.81238 2308.0
+668.31659 1383.8
+673.32568 1073.4
+673.83197 1177.0
+676.62970 1116.7
+678.31604 1283.4
+678.81659 908.2
+679.10321 556.2
+679.31097 1315.1
+682.33423 2737.5
+682.83386 1305.6
+683.33392 1248.3
+687.31995 1633.3
+687.82605 2751.3
+688.32294 1434.7
+690.71429 684.9
+705.35553 5819.3
+706.35706 2728.0
+721.32465 1045.9
+721.85822 1234.8
+723.36481 7451.9
+724.36676 3154.0
+730.86230 1240.9
+731.36078 1134.1
+738.35461 5801.7
+739.36066 2542.9
+740.36493 1248.2
+756.32947 984.7
+789.37909 629.3
+795.65045 871.5
+802.36896 1687.6
+804.37531 716.4
+819.39612 3357.7
+820.38605 3106.1
+821.37909 761.2
+837.40784 8835.6
+838.41193 4113.9
+839.40784 1537.4
+849.38586 794.5
+850.37964 668.3
+858.10162 587.8
+867.39807 5544.0
+868.39948 2465.0
+885.40692 1053.8
+899.48138 1287.7
+916.81647 569.0
+963.58148 592.4
+965.40729 1711.7
+982.42352 14759.0
+983.42590 9075.0
+984.42804 3090.1
+1057.23291 949.7
+1091.07129 780.9
+1118.59766 662.9
+1198.27039 3054.4
+1199.16101 665.9
+1277.27295 601.9
+1303.12048 607.1
+1326.62842 620.0
+1530.73022 622.3
+1566.78381 579.6
+1658.67371 584.4
+1713.88293 621.0
+S	1271	1271	418.2308246
+Z	4	1668.892
+106.74937 556.9
+106.85538 679.2
+118.81915 517.3
+120.08054 1872.2
+120.66174 626.3
+121.79679 546.4
+121.80083 2222.2
+128.79950 561.0
+129.43156 682.0
+135.26212 780.0
+137.79788 599.5
+156.14897 2650.2
+157.59624 666.8
+161.58655 568.5
+170.40324 594.2
+173.80130 647.4
+175.11821 884.1
+176.77809 693.0
+183.07605 647.0
+183.35780 507.4
+192.84631 566.8
+198.91193 1039.7
+199.19789 795.0
+199.28323 1280.7
+199.29549 2795.5
+199.30908 823.2
+199.36282 733.3
+199.39201 597.1
+199.40622 665.6
+199.55084 566.2
+209.64967 650.2
+221.62950 539.7
+233.16426 21489.0
+234.16776 2096.6
+236.77719 585.8
+238.73175 673.3
+249.09937 679.2
+256.10318 681.0
+261.15952 3474.1
+268.16425 1206.4
+270.37711 585.1
+271.48926 747.3
+280.13434 1641.8
+280.17560 705.4
+288.20212 3198.2
+292.16293 657.4
+296.15955 2158.1
+298.19775 557.6
+303.22427 568.4
+304.16162 1588.8
+314.19003 10495.4
+314.52399 5766.1
+326.85971 552.4
+329.15646 1136.0
+337.86896 11572.1
+338.20303 5334.1
+338.53668 1296.5
+342.20264 1927.0
+359.87512 2273.8
+360.21219 856.1
+370.70349 8608.5
+370.95450 9786.1
+371.20529 4566.9
+371.45505 1086.7
+371.70673 729.2
+378.14032 3235.3
+380.20407 5176.6
+380.53900 4909.5
+380.87222 1674.6
+381.24908 3742.5
+382.25278 875.1
+383.55469 3832.2
+383.88998 1975.6
+384.61383 685.2
+384.83716 591.9
+387.26947 1415.9
+390.19968 881.7
+390.71280 832.0
+393.74445 890.8
+396.15054 1602.3
+396.88562 1163.8
+399.71780 40012.0
+399.96844 29963.8
+400.21909 6939.3
+400.47168 712.5
+402.18610 1765.2
+402.88989 936.5
+403.52548 755.1
+404.52692 1058.6
+404.85956 1172.5
+404.95575 838.6
+427.52872 712.8
+439.90045 48884.5
+440.23465 27453.0
+440.56885 8285.1
+440.90109 1127.8
+442.22113 5073.8
+442.55600 4961.2
+442.88867 1684.6
+445.23352 745.6
+445.90405 23099.9
+446.23807 12670.9
+446.57181 2919.0
+448.22925 6711.2
+449.23257 1862.2
+450.23688 2626.2
+450.57318 888.5
+451.23331 880.7
+454.56555 697.1
+456.24023 19525.3
+456.57480 19814.0
+456.90875 8883.0
+457.24216 1641.1
+457.57788 1872.9
+457.77676 936.8
+457.91208 1061.4
+463.57919 45794.4
+463.91357 31315.6
+464.24820 8303.3
+464.58102 768.1
+469.58286 52585.7
+469.91696 32116.5
+470.25143 10476.1
+470.78055 14941.7
+471.28238 9173.8
+471.78369 1014.3
+479.24500 753.2
+483.22607 1170.6
+483.59805 18151.9
+483.93265 13097.5
+484.26724 3998.2
+488.26819 760.1
+492.23108 21663.0
+492.73230 14785.1
+493.23352 6036.1
+493.73615 1363.4
+493.93515 6939.7
+494.26944 7173.9
+494.60342 4090.3
+495.26724 991.2
+496.90799 1784.2
+497.24060 1927.7
+497.57639 888.5
+501.26984 932.9
+502.91037 10125.6
+503.24490 10218.6
+503.57916 4258.1
+503.91324 1481.6
+504.57907 760.1
+505.14099 576.2
+506.29855 7925.2
+506.79984 3697.8
+507.27737 25927.1
+507.61124 18918.4
+507.94525 6201.3
+522.21973 1762.7
+523.22211 717.9
+524.26923 4312.3
+525.27502 1192.6
+526.59442 1325.3
+530.27881 1072.8
+532.56622 1968.2
+539.31207 1269.4
+540.73895 6846.7
+541.23944 4705.7
+541.74054 1493.2
+543.30310 1028.3
+544.31006 659.2
+549.13953 663.3
+549.74396 60782.1
+550.24554 38294.9
+550.74713 14178.3
+551.24701 3539.8
+559.25861 1171.7
+563.37964 539.0
+575.32935 902.4
+576.29382 861.0
+577.27136 3102.0
+578.27399 905.1
+597.28162 2031.4
+597.78357 2155.1
+598.28345 971.8
+603.82843 880.5
+606.28589 25127.3
+606.78802 19743.4
+607.28912 7974.3
+607.79028 2070.9
+608.28876 1087.6
+617.29260 892.7
+628.30597 764.0
+630.38593 689.8
+640.81427 6875.9
+641.31683 3785.9
+651.25824 758.8
+656.29980 4158.2
+657.30444 1409.3
+662.82831 5112.3
+663.32977 3824.5
+663.83313 2000.5
+664.33417 649.9
+676.62561 811.2
+687.33417 866.7
+692.29828 3761.9
+693.30286 2218.0
+731.09283 752.7
+739.12061 682.4
+740.48291 591.3
+795.63525 1320.3
+823.30798 554.3
+839.68134 624.7
+930.44745 765.8
+1021.12512 876.1
+1057.22925 1074.4
+1188.25916 783.2
+1198.26111 3088.5
+1235.54968 674.6
+1329.78638 611.1
+1575.46228 622.5
+1651.08740 569.7
+S	1273	1273	434.9811271
+Z	4	1735.89321
+107.52726 617.9
+108.89604 577.4
+109.07735 672.1
+109.13396 598.3
+110.22045 751.1
+115.30135 595.6
+116.63006 750.6
+116.97684 573.7
+121.79140 593.0
+121.79976 2141.1
+123.69813 664.2
+127.30271 695.9
+128.57556 806.9
+131.21053 674.9
+133.22827 570.6
+141.85037 742.1
+148.98621 601.1
+163.91577 538.0
+165.78304 1007.9
+169.39806 611.1
+181.86603 571.7
+182.78494 854.0
+186.12352 2437.7
+188.19052 463.7
+188.20389 586.3
+188.22252 568.3
+188.23938 857.5
+188.25125 1087.0
+188.27657 2367.5
+188.28888 2391.4
+188.31120 1722.3
+188.33018 481.3
+188.35989 469.2
+192.90536 503.8
+193.60757 530.4
+197.28668 594.8
+198.82108 676.6
+198.91672 747.1
+199.10742 1666.3
+199.17896 624.9
+199.25706 759.7
+199.27661 1398.6
+199.29305 1853.1
+199.29996 1511.1
+199.31293 728.9
+199.32533 713.7
+199.39879 888.3
+203.12730 1270.7
+204.99835 554.2
+212.11818 1119.3
+219.88112 593.1
+224.80391 554.6
+226.08191 2460.8
+227.10249 3149.1
+231.14886 18201.9
+231.63936 1250.7
+232.15179 3127.1
+233.14754 588.5
+233.16489 4126.3
+234.16891 860.6
+240.15216 68830.6
+240.65385 18368.0
+241.15562 2197.9
+244.09230 1543.1
+244.12920 2516.9
+249.09697 1105.5
+254.15256 718.4
+255.28986 644.8
+259.14365 3015.3
+261.16019 810.1
+265.67276 616.2
+267.10590 575.1
+271.40964 660.0
+276.17032 31189.0
+276.53021 609.7
+277.15482 647.5
+277.17380 5333.0
+280.14340 683.3
+283.13959 1625.0
+283.61237 542.8
+285.13330 1019.4
+288.66037 5369.9
+289.15332 2069.8
+289.65433 866.0
+294.18094 14576.3
+295.18488 1794.5
+297.66550 23454.2
+298.16678 7973.0
+298.66241 11931.3
+299.16428 4034.2
+306.16824 4707.3
+306.66959 1017.5
+308.90369 638.8
+311.65134 1346.0
+312.66083 2083.2
+315.18118 1202.9
+320.16547 11362.2
+320.66711 3325.7
+333.19147 1499.9
+334.19357 703.0
+342.27628 710.2
+343.45404 742.8
+346.15076 2547.3
+347.16980 980.7
+351.20251 5234.4
+351.76086 736.5
+353.18146 8581.2
+353.68301 3726.8
+354.18430 598.3
+354.48639 540.7
+355.68393 2366.2
+357.17920 610.9
+359.11966 1631.7
+361.16840 5349.7
+361.67029 2165.5
+362.18317 979.5
+364.16071 7421.9
+365.16766 924.0
+366.52655 2744.9
+366.86334 1359.0
+367.19666 576.0
+368.20819 2862.7
+369.20844 1184.0
+369.68121 6263.8
+370.16843 1119.5
+370.18811 1509.6
+371.18839 1220.8
+375.85071 867.9
+379.70163 6445.5
+380.20477 3269.1
+385.18604 2965.1
+385.68570 873.2
+393.69931 6472.2
+394.20090 3320.5
+394.70123 705.4
+397.95752 1304.4
+401.19730 2280.8
+401.68484 938.5
+402.68719 877.3
+404.26550 1778.0
+406.20648 1229.9
+406.54306 843.4
+410.20377 2012.1
+410.69232 1916.9
+411.19467 955.6
+411.69174 3654.7
+412.20645 4740.2
+412.54688 2193.5
+412.88040 1172.7
+414.96951 938.2
+417.45810 630.0
+419.20801 11452.9
+419.70959 3847.5
+420.20667 1797.7
+427.54639 753.1
+435.28424 704.6
+442.17337 1657.4
+448.21704 1838.8
+449.22131 1161.2
+450.24100 2968.6
+450.74384 1856.7
+458.55386 1433.0
+458.88879 947.0
+461.23096 902.1
+461.28610 3223.4
+461.57120 727.5
+462.28748 952.0
+466.22690 1782.5
+466.56693 865.9
+466.74426 3156.5
+467.23792 1449.0
+467.73810 899.3
+469.56726 1123.0
+469.89505 2850.2
+470.22946 2758.1
+470.56073 980.8
+475.56879 8406.2
+475.74960 12570.1
+475.90002 16813.8
+476.23218 9712.7
+476.56534 3779.5
+476.75281 2135.3
+476.90060 656.2
+477.26501 650.1
+479.29694 14808.6
+480.30096 5097.8
+481.57269 55546.7
+481.90482 63206.6
+482.23758 30332.7
+482.57037 11935.9
+482.65646 830.9
+482.90552 3517.0
+483.23447 1913.5
+485.26324 735.6
+487.57602 156495.0
+487.91022 130173.0
+488.24438 59698.2
+488.47583 787.4
+488.57877 21741.7
+488.84967 653.7
+488.91336 4501.9
+489.24811 978.5
+491.71542 7084.3
+492.21710 3051.0
+492.25549 3028.7
+493.21915 963.7
+493.25604 648.2
+498.75006 2032.5
+507.26233 16243.0
+507.76361 9994.3
+508.26743 2031.5
+511.22876 12133.4
+512.23260 3043.5
+518.92786 1444.8
+519.25970 812.9
+520.25104 3814.7
+521.25415 1132.8
+521.56232 2746.5
+521.89728 3473.1
+522.22961 1105.9
+522.56757 724.6
+523.14313 583.1
+524.27124 1782.1
+524.60370 3600.1
+524.93402 1907.7
+525.60242 752.5
+527.56641 2002.4
+527.90314 1072.4
+530.27484 6235.9
+530.61096 4641.2
+530.92072 967.9
+530.95239 1494.9
+532.28229 735.4
+532.51678 566.3
+532.58136 2223.2
+536.59851 9571.2
+536.93262 8471.7
+537.26752 3491.8
+537.60278 664.0
+540.27808 5527.6
+540.63275 578.9
+540.78052 2511.8
+541.27277 1752.3
+545.46008 564.7
+549.28375 27063.4
+549.78485 18360.7
+550.28711 6661.3
+550.79034 2081.8
+554.27124 886.5
+555.76630 1004.6
+559.24811 1263.3
+563.27106 920.1
+563.77405 1416.4
+571.78375 12156.8
+572.28485 8137.0
+572.78589 2953.6
+573.28430 709.9
+575.26532 1066.6
+576.31244 8500.7
+577.28192 976.4
+577.32007 2076.5
+580.78955 2617.8
+581.28784 1395.5
+584.27289 1276.2
+594.32306 40165.7
+595.32642 13955.2
+596.32349 2514.7
+597.32031 965.2
+606.30273 989.5
+608.80731 4293.0
+609.30786 4590.0
+609.80762 2092.3
+611.78088 961.0
+612.27240 655.2
+617.81293 14870.9
+618.31390 11232.7
+618.81555 4033.5
+619.27118 1376.4
+619.31604 903.5
+620.29279 2755.7
+620.78558 3636.8
+621.28491 2871.5
+621.78198 1099.1
+622.27826 966.6
+624.31256 11282.0
+625.31494 4681.4
+629.29681 56273.6
+629.79816 46241.4
+630.29962 17209.3
+630.80121 5798.8
+631.30347 1214.5
+639.32336 9416.8
+640.32709 2468.6
+641.30804 1326.2
+648.80292 2923.6
+649.29340 1088.3
+649.79272 1078.8
+657.80756 4610.3
+658.30994 3636.4
+658.80737 1377.6
+659.31036 755.0
+664.81793 694.7
+666.81305 9645.3
+667.31512 8518.1
+667.81378 2489.9
+668.31750 851.5
+673.32825 2543.5
+673.82648 1444.5
+676.64948 1099.4
+678.32086 1086.4
+678.82123 1205.6
+679.31744 824.5
+682.33539 1577.2
+682.83038 1313.6
+687.32245 2884.3
+687.82654 3504.7
+688.31415 717.4
+705.35553 6291.1
+706.35901 2331.3
+715.07050 595.7
+721.85309 1220.4
+722.35266 1305.1
+723.36603 7985.4
+724.36853 3463.6
+725.36615 849.9
+730.86884 806.0
+731.36096 907.3
+738.35614 7362.9
+739.36389 2624.5
+756.32867 1255.0
+780.40869 628.9
+786.38525 856.0
+795.66016 940.0
+802.37030 1236.3
+803.28796 618.8
+803.35004 638.4
+819.39642 3567.4
+820.38202 3205.1
+821.38904 1054.5
+837.40808 9646.9
+838.41266 4825.1
+839.41339 1286.8
+867.39478 4488.4
+868.40277 2738.2
+869.40070 921.6
+878.09497 578.7
+885.41901 1116.7
+886.41351 683.6
+899.47345 1465.0
+900.47797 962.9
+943.58258 537.3
+964.41565 988.5
+965.39655 1576.7
+982.42474 17060.0
+983.42792 8389.7
+984.42670 2213.8
+1057.24084 937.7
+1122.55481 665.1
+1129.48755 834.3
+1188.09485 697.7
+1198.30078 3636.9
+1253.06555 695.4
+1341.27966 638.0
+1347.34436 643.6
+1405.03882 657.5
+1443.43555 561.8
+1568.11951 663.8
+S	1274	1274	426.2338246
+Z	3	1275.678
+113.45895 85030.4
+121.09509 72255.4
+121.66274 67176.4
+121.80047 292902.4
+122.01707 78420.6
+147.00186 79029.3
+154.58704 64361.6
+164.12698 81832.0
+165.68143 74949.4
+188.22264 78763.6
+188.23106 81567.2
+188.26456 204845.2
+188.28700 307845.7
+188.29315 318357.5
+188.30621 224724.2
+188.37872 71995.1
+198.91429 119131.7
+199.19885 126191.7
+199.25812 119842.7
+199.27647 102908.7
+199.29573 407992.7
+199.31448 155189.7
+199.39471 103918.7
+205.69666 83667.3
+212.31949 92692.6
+213.62509 75422.0
+217.20578 77791.0
+238.76212 71300.1
+240.96222 74170.6
+270.05402 73200.2
+271.56079 88191.0
+279.17548 87608.8
+308.89108 85620.6
+309.59698 78063.0
+319.91806 72720.0
+320.65088 84031.9
+322.43866 68624.1
+336.33841 76394.6
+342.26297 86061.3
+367.25992 82960.4
+381.34579 95719.8
+427.53116 87270.0
+459.97302 87001.1
+482.78537 75667.6
+532.56506 245046.0
+549.13116 111422.4
+630.37830 98307.5
+676.59717 83600.3
+723.99896 69175.2
+731.10400 117904.6
+742.39166 78526.1
+795.64813 135574.7
+796.53101 77563.9
+830.35150 92174.7
+837.70258 93286.0
+846.05676 69949.2
+898.03131 69825.9
+928.22559 72323.9
+975.47620 70890.7
+1017.46704 67924.4
+1057.20068 120381.6
+1184.41736 104635.6
+1188.04382 78870.3
+1194.83508 74745.8
+1198.26318 424841.4
+1488.50647 78276.9
+1495.34583 89894.2
+1525.36523 83300.3
+1612.63550 79582.8
+1669.37988 92922.1
+S	1275	1275	425.651991267
+Z	3	1273.681
+Z	2	849.456
+120.66294 821.8
+120.86782 661.1
+121.80077 2452.6
+124.44363 598.6
+129.77507 619.9
+132.02579 622.0
+137.51208 578.5
+150.50275 622.3
+155.08177 790.9
+156.14948 2471.4
+157.59981 666.6
+162.34169 648.2
+165.78427 1094.1
+169.48715 908.9
+175.11867 1421.1
+183.07654 830.6
+187.21147 573.0
+196.77174 556.4
+198.91728 758.1
+199.11362 582.9
+199.18034 10386.6
+199.26436 965.2
+199.27641 877.7
+199.28560 2975.9
+199.30046 913.1
+199.37395 630.2
+199.38333 1269.9
+200.18376 1162.6
+200.20789 587.8
+224.83961 589.0
+227.17542 3522.1
+232.14044 13134.6
+233.14401 1053.9
+233.62392 1383.2
+268.16602 2593.6
+272.20819 643.2
+272.63138 518.1
+272.63913 491.3
+275.27505 612.1
+280.13440 1165.3
+280.17657 873.4
+284.13507 1040.8
+296.16031 6806.5
+301.16232 1733.5
+302.14612 1061.1
+304.16165 7900.5
+319.15149 939.2
+319.17258 115874.5
+319.46680 683.1
+319.79523 687.3
+320.17664 13614.1
+321.17810 1828.9
+329.15646 801.2
+330.70508 607.5
+336.61240 694.8
+337.65463 597.2
+339.18414 1841.6
+342.20267 3261.1
+343.45224 595.3
+344.86111 807.2
+356.21854 1083.4
+358.38138 580.8
+363.54605 546.9
+370.70401 11193.2
+370.95505 9659.7
+371.20529 4526.9
+371.45609 1149.1
+371.52469 596.4
+373.71344 1009.3
+375.20703 36446.3
+375.45749 29473.4
+375.70813 13160.0
+375.95935 5451.2
+380.20493 4142.5
+380.53622 1484.5
+381.24969 11871.3
+382.25284 2347.5
+384.55380 2610.0
+384.88681 1979.5
+386.20847 25746.6
+386.54260 15306.4
+386.87692 6997.4
+387.20963 1954.1
+387.54471 806.9
+389.18127 1664.7
+389.70844 1996.1
+390.21005 1081.0
+391.20816 913.2
+392.96451 749.0
+393.21802 1123.6
+393.88422 2197.7
+394.70056 984.2
+396.21823 3117.9
+396.55472 3352.9
+403.70538 6667.7
+403.86432 909.8
+404.20743 2226.0
+404.70447 610.4
+404.95682 951.0
+405.20679 1663.2
+405.55197 2807.4
+405.72589 862.8
+405.88663 1663.3
+407.46872 666.8
+409.24524 797.7
+416.47067 824.3
+420.72476 1283.6
+420.97363 793.8
+421.22650 851.9
+424.55127 1902.7
+424.88495 1327.8
+425.22629 1123.4
+425.89282 1112.6
+427.53998 732.2
+433.23541 867.0
+434.23816 2721.2
+439.23975 7924.4
+439.57281 6332.6
+439.90503 3213.1
+440.23740 1095.4
+440.56906 785.2
+440.66470 545.3
+442.22202 2757.4
+442.55688 2114.4
+442.89124 1214.4
+445.24326 29602.7
+445.57742 22348.1
+445.91153 9729.0
+446.24658 3833.3
+447.22678 902.3
+447.56210 918.3
+448.22833 6320.3
+448.55896 2113.3
+449.19220 720.1
+449.23233 872.4
+450.23703 2409.2
+450.57278 1170.1
+451.24188 1204.0
+451.74606 1065.0
+452.22284 621.6
+454.23734 3073.3
+454.57474 17757.4
+454.73700 1274.6
+454.90894 11432.8
+455.24301 6057.4
+455.57629 1751.5
+455.94669 502.2
+455.96408 504.1
+456.24182 23717.1
+456.57623 15245.3
+456.91025 7396.0
+457.24442 1595.3
+460.24756 6877.9
+460.44806 639.3
+460.73209 27925.8
+461.23398 13831.1
+461.30936 716.2
+461.73380 4021.7
+462.24518 125000.2
+462.57947 93763.8
+462.76328 598.2
+462.91336 40977.5
+463.24557 20427.2
+463.58289 3459.0
+463.74332 3834.3
+464.24561 1248.4
+465.56937 749.4
+466.24060 29581.3
+467.24445 6404.9
+468.25159 3202.6
+468.57895 4677.7
+468.91266 3740.8
+469.24686 842.5
+474.25400 996.8
+476.76553 1084.9
+477.23996 6987.6
+477.58075 2125.2
+477.74124 3670.8
+477.91666 3221.7
+478.24689 1012.3
+478.90375 713.4
+483.22711 1935.0
+483.58517 14104.2
+483.72806 1039.8
+483.91910 17759.4
+484.25327 7899.3
+484.58884 1931.9
+484.92419 1285.1
+485.79401 732.2
+487.93350 827.2
+492.23187 14207.6
+492.73358 6928.6
+493.23318 1525.3
+493.93655 5616.5
+494.26993 6362.4
+494.60495 3207.8
+494.93869 1620.1
+496.90942 3812.6
+497.24246 2013.6
+499.93948 52856.9
+500.27402 41304.2
+500.60815 21008.0
+500.94275 5789.3
+501.23752 39454.5
+501.73914 19252.7
+502.24127 6862.3
+502.74222 1244.7
+502.91187 14597.3
+503.24625 12445.6
+503.57968 5515.7
+503.91516 2542.6
+504.24222 914.9
+507.24323 756.9
+508.91391 2844.3
+509.25101 2275.9
+510.77808 2501.4
+511.28146 1744.6
+512.24884 824.1
+514.91858 4155.3
+515.25360 3393.0
+515.58508 1520.9
+516.24847 18258.7
+516.74969 11304.1
+516.79034 1968.8
+517.25146 3840.1
+517.29346 1083.8
+517.75000 908.6
+519.78467 5670.3
+520.28430 3416.5
+520.75623 3423.1
+521.25885 1816.1
+522.21881 3531.3
+523.61847 1424.0
+523.95221 1014.7
+524.27124 12205.7
+524.62799 887.9
+524.77533 1270.4
+524.91138 689.1
+525.05145 829.1
+525.19586 769.1
+525.25360 274333.9
+525.30988 1091.9
+525.67792 521.7
+525.68927 550.7
+525.75488 150284.8
+525.88129 1383.9
+526.25616 49996.1
+526.52161 949.4
+526.75745 12957.1
+526.94269 672.8
+527.25897 2700.1
+530.25446 8324.8
+531.25714 1787.9
+532.58606 1732.1
+533.78113 5861.9
+534.28204 3422.0
+536.22998 736.9
+540.73944 5191.9
+541.24219 2734.9
+542.26984 669.0
+543.30292 8397.3
+543.80341 5244.3
+544.30658 1506.3
+544.80908 909.4
+547.32391 1130.5
+547.78088 627.1
+549.13721 1079.4
+549.74530 43644.1
+550.24701 26542.6
+550.74817 9370.6
+551.24860 2196.7
+558.75073 110175.0
+559.25201 61331.6
+559.75342 20283.9
+560.14606 873.4
+560.25507 5547.6
+560.29803 592.1
+560.75476 1275.1
+562.33234 1706.5
+564.29016 682.9
+566.63025 981.0
+566.96954 940.1
+572.79175 1941.1
+573.28912 1221.1
+576.33099 715.1
+577.27173 7792.6
+577.79492 1322.7
+578.27649 3137.7
+581.79529 71862.9
+582.29669 43020.5
+582.79834 16532.7
+583.29865 4201.0
+583.80243 950.5
+586.79108 985.0
+587.29047 707.7
+590.31952 2241.4
+590.82196 1942.4
+591.32245 916.8
+593.82697 839.1
+594.32758 1139.9
+595.28284 14034.5
+596.28546 3520.7
+597.28320 1697.6
+597.78168 1492.1
+598.81799 5416.7
+599.31964 3648.8
+599.82263 1587.6
+606.28711 19913.9
+606.78888 13897.1
+607.03375 679.2
+607.29083 5512.5
+607.82336 220454.6
+608.32465 152523.8
+608.60901 1103.5
+608.82635 61543.3
+609.10437 707.0
+609.32788 17049.8
+609.58771 543.6
+609.82935 2484.3
+615.29236 64397.7
+615.79358 40608.8
+616.29565 14978.0
+616.79590 3516.1
+617.30188 4750.8
+620.28455 1128.7
+623.26593 1076.1
+624.27899 674.0
+635.30463 1750.0
+638.99371 805.4
+647.30237 1708.3
+647.80505 809.3
+651.26117 3689.6
+651.33740 800.5
+651.83337 766.9
+652.26208 1122.0
+662.83026 4329.4
+663.33264 3619.6
+663.82849 1089.1
+667.88275 684.5
+671.83472 29619.7
+672.33380 17897.6
+672.83606 6704.9
+673.33148 1636.8
+674.28723 1278.1
+676.65259 904.0
+681.35748 37133.2
+681.85919 28019.3
+682.36115 14128.9
+682.86298 3418.2
+683.36731 969.5
+687.33606 2006.4
+691.37903 1335.2
+692.29907 7196.8
+693.30865 2020.1
+707.35016 943.0
+707.85120 1388.8
+710.30975 34087.5
+711.31274 11451.9
+712.31830 1751.2
+718.35394 1235.7
+722.47650 687.1
+728.33398 1854.4
+729.33997 859.1
+746.34613 13383.1
+747.34882 6007.4
+748.34821 1261.3
+753.69800 726.6
+764.34644 2573.8
+770.33636 1648.0
+771.34558 858.3
+780.30969 789.0
+788.39624 1783.2
+795.66656 1255.8
+797.84216 610.0
+798.32733 1102.0
+806.40369 3620.2
+815.42841 710.7
+831.44946 780.8
+838.40375 6065.8
+839.40308 1561.9
+842.47247 3877.1
+843.47852 1457.0
+847.39929 744.8
+857.38696 927.9
+859.43011 3044.9
+860.42743 1959.7
+875.38757 3398.6
+876.40015 1163.0
+877.43549 944.6
+883.41351 879.1
+894.40076 819.8
+903.43427 648.1
+906.64960 609.3
+919.50018 819.0
+930.45740 3893.4
+931.45856 2090.5
+953.46747 3698.9
+954.47919 1045.9
+988.47205 1382.2
+998.43878 717.6
+1001.46613 2359.9
+1002.46216 1169.8
+1020.83643 911.8
+1057.27063 919.9
+1059.49866 17372.0
+1060.50110 10045.7
+1061.50610 3472.6
+1116.49353 2045.6
+1117.50305 1398.7
+1184.33325 634.9
+1187.91638 660.1
+1198.30408 2902.8
+1206.55896 1016.8
+1342.54932 691.7
+1412.52673 602.3
+1431.95251 596.5
+1451.15002 733.9
+1505.91907 665.2
+1525.39600 743.0
+1554.44971 793.8
+1572.22314 637.0
+1657.18054 637.1
+S	1277	1277	425.4833846
+Z	4	1697.90224
+106.88734 709.3
+108.26521 535.3
+109.35513 617.0
+119.60335 550.2
+120.59935 699.8
+121.80163 1769.8
+121.80553 1114.0
+127.43050 643.5
+129.63914 659.2
+130.28847 522.3
+132.67813 588.0
+153.74652 604.4
+154.24274 551.2
+156.14951 1693.9
+171.65285 633.8
+172.37662 710.3
+172.89400 559.8
+173.19203 541.8
+175.11859 1723.6
+183.07585 1309.4
+183.60648 598.3
+185.13316 515.1
+186.74016 548.8
+188.20308 615.1
+188.27016 2134.8
+188.28128 2540.8
+188.30338 2196.2
+188.34494 540.7
+188.35716 555.4
+198.09425 577.0
+198.31909 673.1
+198.91321 928.1
+199.18079 5921.4
+199.19678 949.5
+199.23808 673.7
+199.27071 801.3
+199.28578 974.9
+199.29518 2871.2
+199.33713 755.3
+199.35324 825.4
+199.39310 1342.6
+200.18306 771.6
+204.31821 536.0
+219.97897 498.2
+227.17630 1961.2
+232.14070 14275.8
+233.14378 1016.0
+233.62402 1644.8
+233.76849 604.9
+245.07658 916.5
+255.28845 713.4
+268.16595 3297.5
+269.33151 846.5
+280.13571 2112.1
+280.65039 583.3
+284.13452 1018.2
+289.16135 710.5
+292.16721 1645.0
+296.16107 6400.4
+301.16171 1934.1
+302.14597 1274.9
+304.16190 4266.1
+305.16519 704.9
+308.90356 982.2
+319.17273 124926.7
+319.46899 776.0
+319.77600 803.2
+320.17703 14327.3
+321.17902 1315.0
+339.18466 2632.4
+342.20212 3792.5
+342.43448 705.6
+343.20728 669.2
+343.68295 676.8
+344.86096 1313.7
+346.19366 970.3
+346.65518 1010.5
+355.16406 707.2
+355.65976 749.8
+366.19907 1003.3
+366.45181 752.6
+370.70456 13252.0
+370.95535 10844.0
+371.20551 5943.1
+371.45724 1286.0
+371.52631 753.6
+371.70993 1185.1
+373.17252 1084.0
+375.20728 42950.1
+375.45770 36082.4
+375.70847 15369.2
+375.95923 5085.9
+380.20544 4727.1
+380.53879 2907.9
+380.87265 1441.2
+381.24994 13360.2
+382.25372 2759.5
+383.08267 525.5
+384.55362 2232.7
+384.88843 1003.6
+386.20868 31278.0
+386.54300 20099.5
+386.87708 8686.3
+387.21048 2092.9
+388.46436 820.8
+389.18182 2083.6
+389.70834 2352.1
+390.18600 637.9
+390.21088 1671.2
+392.96490 956.7
+393.21820 794.9
+393.88562 1018.0
+394.21933 1294.5
+394.69992 1781.9
+394.74658 579.1
+395.72748 966.1
+396.21964 3870.2
+396.55518 2556.7
+396.72409 791.2
+396.88901 1230.7
+399.88452 623.6
+403.53033 659.0
+403.70575 8806.8
+404.20825 2523.6
+404.95749 1883.7
+405.20758 1094.6
+405.72513 1041.1
+416.72366 810.2
+420.72427 2524.5
+420.97437 1431.7
+421.22910 1072.6
+424.55228 1746.2
+424.88290 1011.1
+425.22382 794.7
+427.54190 651.0
+434.24149 3771.0
+435.23984 702.5
+439.24008 9820.6
+439.57312 8244.0
+439.90701 3909.0
+440.24072 1089.4
+442.22278 3357.8
+442.55655 1525.6
+442.89224 1894.8
+444.25098 569.3
+445.24341 37215.4
+445.57758 28335.7
+445.91187 10404.0
+446.24820 5033.7
+446.74844 1128.9
+447.22543 1516.0
+447.72937 543.2
+448.22934 8471.9
+448.55847 2850.8
+448.89087 1094.2
+449.22672 1045.9
+450.23770 3692.2
+450.57120 969.6
+450.90820 1148.5
+451.24155 2390.9
+452.24933 700.6
+454.23758 3523.6
+454.57492 18388.9
+454.74237 1604.1
+454.90894 13610.5
+455.24393 7699.2
+455.57794 1206.7
+455.92191 681.6
+456.24207 24220.0
+456.57632 21522.6
+456.91037 6807.0
+457.24475 2120.3
+460.24771 9569.4
+460.73212 16413.3
+461.23410 7106.2
+461.73849 1118.5
+462.24548 156414.3
+462.57983 107888.7
+462.91382 49116.0
+463.09613 674.5
+463.24588 20798.4
+463.43930 681.0
+463.58170 3424.2
+463.62857 852.1
+463.74390 5540.6
+464.24667 1276.5
+465.57248 756.8
+465.90735 863.0
+466.24084 37800.0
+467.24432 8697.8
+468.25128 2859.4
+468.57880 6352.5
+468.73703 668.1
+468.91336 4853.5
+469.24652 1738.5
+474.25470 1434.0
+477.23972 7616.9
+477.58316 3487.2
+477.74207 3872.6
+477.91708 2260.6
+478.24518 1630.1
+482.66403 850.0
+483.22800 1144.6
+483.58554 21556.4
+483.91949 15739.7
+484.25409 9393.1
+484.58994 1861.2
+484.92172 1865.0
+486.28958 1024.2
+491.16638 524.7
+492.23230 16153.9
+492.73413 8081.9
+493.23334 2009.3
+493.93604 9096.9
+494.27084 5949.0
+494.60541 3504.6
+494.93875 1889.7
+496.90762 2908.7
+497.24362 2464.4
+497.57803 1820.7
+499.93988 68708.5
+500.27423 55516.9
+500.60858 22418.2
+500.94336 8435.1
+501.23798 50668.6
+501.27841 1747.6
+501.73907 28587.1
+502.24127 9947.9
+502.74283 2109.4
+502.91245 15739.0
+503.24637 16196.4
+503.58060 6488.5
+503.91446 2908.8
+504.20938 986.0
+504.24963 838.2
+508.91620 4486.7
+509.24878 2741.2
+509.58871 767.3
+510.77890 1508.2
+511.28156 1981.3
+511.74893 1520.3
+514.91858 5210.3
+515.25360 3629.9
+515.58777 2171.5
+516.24908 11612.3
+516.75037 5626.7
+516.78949 2981.1
+517.25366 2086.9
+518.22052 659.1
+519.78442 6525.8
+520.23938 1950.0
+520.28662 4448.5
+520.75702 4324.8
+521.26288 1221.6
+522.21991 5352.8
+523.22510 1596.9
+523.62140 922.4
+523.95276 1368.5
+523.98975 853.5
+524.27069 14552.9
+524.77399 1642.7
+525.25385 155830.2
+525.75519 85694.8
+526.25653 28730.7
+526.75757 4890.2
+527.02612 814.3
+527.25745 1338.2
+530.25568 4376.8
+530.75171 1497.8
+531.26025 962.2
+532.52783 2011.8
+533.78192 10085.0
+534.28027 3514.5
+534.78058 1295.3
+536.23462 2127.3
+540.74078 6991.7
+541.24139 3297.6
+541.73975 1239.8
+543.30341 11057.9
+543.80420 5218.6
+544.30597 1711.3
+547.32227 2275.3
+549.74567 47136.0
+550.24725 33315.0
+550.74817 11773.1
+551.24933 3778.6
+557.36212 1103.9
+558.75122 130609.8
+558.80127 905.0
+559.25244 80010.7
+559.75372 26748.9
+559.93970 597.5
+560.25452 6676.7
+560.75854 1502.0
+562.33459 2288.6
+566.63409 1363.6
+568.79248 745.1
+572.79028 1260.8
+576.32593 1801.3
+576.83038 1005.3
+577.27209 12831.1
+577.79974 1806.4
+578.27692 3478.0
+579.28821 707.5
+581.79553 40207.0
+582.29761 24691.2
+582.79852 7679.6
+583.30029 2768.1
+585.02325 548.9
+585.78931 651.3
+589.79211 556.4
+590.32202 3470.8
+590.82422 1975.8
+593.82666 1599.4
+594.32520 1649.8
+595.28339 20611.3
+596.28668 5889.3
+597.28302 3882.1
+597.78058 1376.4
+598.81842 5993.2
+599.32062 4069.4
+599.81964 2066.6
+603.78503 877.7
+606.28748 26423.1
+606.69202 558.9
+606.78943 18428.3
+607.03992 1355.5
+607.29187 6609.4
+607.82379 283593.8
+608.32513 193138.1
+608.59747 1371.7
+608.82666 74213.3
+609.11786 1482.3
+609.32794 18719.9
+609.40454 1872.9
+609.82886 4544.4
+609.90826 1407.1
+610.33356 811.9
+610.41217 688.6
+615.29279 80386.6
+615.39484 645.8
+615.79395 60056.7
+616.03040 562.0
+616.29572 21475.9
+616.79865 4417.9
+617.30035 3805.9
+624.28613 629.2
+626.75024 618.7
+630.41785 820.6
+633.25061 991.1
+635.30164 2510.5
+642.84949 1070.9
+647.30402 2089.7
+647.79962 1015.9
+648.30957 662.2
+651.26093 5169.6
+651.34235 1132.7
+652.26660 1871.9
+654.31934 789.7
+655.30817 775.0
+658.84589 1129.3
+661.92480 628.4
+662.82941 6480.4
+663.33105 4606.8
+663.83136 1963.4
+671.83502 38716.7
+672.33521 27654.9
+672.83575 11623.5
+673.33118 1462.3
+673.37665 1063.2
+673.84491 854.2
+674.29102 976.6
+676.62744 1127.3
+681.35791 46874.5
+681.85944 37187.9
+682.36121 17005.7
+682.86273 3820.6
+683.30627 928.7
+687.33801 2173.7
+688.33527 1018.6
+691.37579 1737.6
+692.29968 8364.8
+693.30585 2219.7
+707.35303 2192.4
+707.85461 2303.6
+710.31012 51009.7
+711.31360 16383.4
+712.31274 3512.9
+713.31555 814.3
+718.34930 1429.6
+746.34650 7580.3
+747.34821 2829.2
+748.35022 509.1
+748.38477 626.3
+764.34479 4073.7
+765.34583 1620.8
+770.33447 1937.9
+771.34998 1076.3
+776.89551 617.9
+788.39185 2923.6
+789.39093 1422.4
+795.65320 837.9
+798.32892 1227.7
+805.06610 653.2
+806.40283 4369.9
+807.40698 1738.6
+808.41754 695.0
+820.40002 978.4
+821.40942 686.5
+838.40332 8078.6
+839.40387 2394.4
+842.47675 4303.7
+843.29138 610.0
+843.48236 1876.3
+859.42957 2375.2
+860.42914 1053.2
+861.43121 701.7
+865.40021 687.0
+875.38715 2108.8
+877.42560 1185.2
+881.98541 590.4
+883.41644 1087.8
+903.43634 647.9
+911.41461 1561.6
+919.49164 876.2
+930.45715 6853.1
+931.46039 3200.5
+932.45355 703.1
+953.47565 3855.3
+954.47931 1578.4
+983.45618 574.2
+1001.47076 4652.8
+1002.47314 1823.1
+1031.49097 1257.2
+1032.52283 866.8
+1041.48694 1086.8
+1059.49890 24082.3
+1060.50281 13488.4
+1061.50098 3051.0
+1099.47729 803.0
+1116.49451 3576.6
+1117.49561 1950.5
+1118.52173 707.9
+1187.91956 762.5
+1198.17920 3220.3
+1206.56873 1969.9
+1207.57678 1173.8
+1525.45703 771.7
+1575.80823 598.9
+S	1278	1278	420.9806396
+Z	4	1679.89126
+108.11636 494.0
+108.62160 612.9
+111.60378 554.5
+118.18473 659.5
+120.65804 717.2
+121.80027 2334.7
+127.70565 755.4
+130.17824 574.4
+132.54546 556.6
+139.59764 635.8
+141.26630 560.1
+150.90752 669.3
+156.14923 1882.0
+160.31500 598.7
+163.66833 544.1
+165.69150 501.8
+185.62723 449.4
+185.63052 455.1
+188.14575 538.5
+188.22382 720.6
+188.27786 2068.9
+188.28893 2039.8
+188.29959 1703.2
+188.33455 506.3
+195.75345 564.5
+197.68349 615.9
+198.91124 1095.9
+199.19516 949.8
+199.20670 961.4
+199.21472 1114.9
+199.26976 1004.1
+199.27902 1043.4
+199.29263 2847.2
+199.30339 1498.7
+199.31442 846.3
+199.39047 966.9
+199.41272 557.8
+199.52998 608.0
+203.19704 580.4
+207.17178 547.8
+217.84705 648.3
+232.13979 6342.8
+233.14333 750.7
+233.62294 970.1
+251.65964 643.8
+255.28177 628.5
+268.16495 1227.1
+272.27737 554.0
+272.48624 641.6
+295.48758 626.5
+296.15976 2660.9
+308.88644 621.4
+319.17169 33137.4
+320.17563 4386.9
+331.32660 561.1
+340.32840 589.2
+342.25961 874.7
+370.70346 4926.4
+370.95419 4415.6
+371.20294 2045.9
+375.20609 7598.1
+375.45602 7031.7
+375.70758 4295.0
+380.20410 2823.7
+380.54016 1345.8
+381.24811 4460.0
+381.33780 638.2
+386.20715 4847.0
+386.54144 4119.6
+386.87296 1123.9
+393.88919 724.5
+396.21918 1025.6
+402.18347 901.8
+402.64883 749.1
+403.70474 2302.1
+404.20618 739.2
+404.95563 753.7
+405.55060 2398.0
+405.88553 1164.6
+439.23743 1372.8
+439.57178 926.3
+439.90686 867.6
+441.33261 660.1
+442.22070 876.8
+445.24225 3032.3
+445.57648 1355.7
+445.91196 1614.9
+448.22894 2228.0
+448.55829 980.0
+450.23456 1262.2
+454.23428 803.1
+454.57260 880.5
+456.24054 6508.6
+456.57465 5879.6
+456.90945 3164.5
+457.24216 963.9
+460.24524 690.2
+460.74686 888.4
+462.24399 20436.4
+462.57822 20607.0
+462.91309 7531.8
+463.24295 3731.3
+463.74316 1498.5
+464.24814 762.2
+466.23987 4956.2
+468.25034 1051.7
+468.58133 1361.7
+468.91232 1088.1
+477.24084 1048.2
+477.58151 705.2
+477.74048 1529.3
+482.20059 732.0
+483.58359 2045.5
+483.91782 2088.0
+484.25436 621.8
+492.23141 4386.2
+492.73395 2081.6
+493.23563 876.5
+493.93793 1991.0
+494.26697 1313.4
+494.60257 837.8
+496.90796 1202.4
+499.93835 6396.4
+500.27307 6122.2
+500.60800 2144.4
+501.23602 3988.2
+501.73801 2296.5
+502.91064 7755.0
+503.24454 7249.2
+503.58020 2853.0
+503.91412 855.4
+507.62341 580.5
+510.77652 673.2
+517.28796 842.0
+519.77917 772.6
+520.75928 631.8
+520.79175 601.6
+524.26947 2709.6
+525.27161 744.5
+532.54456 1958.1
+533.77979 1647.2
+540.73840 3128.2
+541.24036 1349.5
+543.30157 2509.1
+543.80438 1147.3
+549.74426 19313.4
+550.24579 12691.7
+550.74652 3858.9
+551.25275 922.7
+558.74957 8127.2
+559.25165 5711.6
+559.75330 2180.2
+577.06793 606.0
+577.28217 708.1
+595.28265 1457.5
+598.81219 821.2
+606.28534 3632.0
+606.78760 3398.9
+607.82233 37932.6
+608.32349 28829.4
+608.82532 8835.3
+609.32587 2316.6
+615.29187 4734.7
+615.79358 4341.0
+616.29541 1952.7
+630.38251 833.3
+644.39423 683.5
+671.82654 803.4
+672.33118 845.8
+676.61835 1186.3
+681.35706 5409.0
+681.85767 5349.4
+682.35736 1102.3
+710.30798 3784.5
+711.31274 1018.6
+731.08740 747.1
+846.71283 592.3
+899.17694 611.3
+917.74567 595.2
+998.94006 562.1
+1187.96948 753.5
+1198.21716 3393.6
+1244.80188 738.8
+1383.30347 692.2
+1403.55640 560.3
+1489.28687 659.0
+1525.33606 948.1
+1626.07764 745.7
+S	1279	1279	426.318407933
+Z	2	850.789
+Z	3	1275.68
+106.07713 528.0
+111.83281 541.0
+112.37109 525.2
+115.24861 572.6
+117.36680 510.4
+118.18539 637.2
+121.75449 685.6
+121.80035 2375.6
+128.57039 548.2
+141.85176 686.3
+146.92818 629.6
+155.08133 1878.5
+156.14944 4700.7
+157.11194 525.1
+157.15286 686.2
+165.78337 918.2
+169.49367 660.4
+173.85887 491.4
+175.11905 2515.2
+178.98642 623.6
+183.07628 2608.5
+198.91679 774.7
+199.18042 7741.3
+199.19371 755.0
+199.27205 922.4
+199.29056 2645.4
+199.30153 1331.2
+199.33286 836.1
+199.38644 805.2
+199.39986 631.9
+213.87805 658.1
+215.11398 881.3
+227.17497 1770.9
+232.14047 31952.1
+232.16251 772.9
+233.14401 2349.1
+233.62390 4778.4
+234.12653 687.1
+245.07689 966.5
+251.09955 634.6
+263.22379 594.4
+268.16565 5196.0
+280.13498 3096.7
+280.63699 814.7
+284.13541 651.5
+289.78607 640.7
+292.16507 757.3
+294.60861 624.9
+296.16061 9915.1
+297.16306 1404.9
+301.16205 2336.0
+302.14645 985.9
+304.16165 2844.9
+319.17255 149522.4
+319.46970 654.6
+320.17670 19746.3
+321.17819 2543.9
+328.64105 763.5
+329.15607 1627.8
+330.70724 1296.7
+339.18289 1914.5
+339.68530 1242.0
+340.19092 806.9
+342.20224 4769.2
+342.27246 764.4
+343.20728 612.7
+344.86301 1421.6
+345.19843 877.2
+346.19302 1003.9
+346.65479 1295.1
+349.84415 667.7
+350.28452 703.1
+356.15640 734.6
+364.22220 605.1
+366.20200 1752.0
+366.45309 1365.7
+366.70370 951.8
+370.70425 17104.5
+370.95511 15113.4
+371.20569 8852.2
+371.45462 2190.9
+371.52350 793.2
+371.70840 1197.6
+373.17206 1632.9
+375.20694 44757.4
+375.45743 35152.8
+375.70831 15806.4
+375.95969 5057.4
+380.20486 8428.1
+380.53912 4487.5
+380.87503 1829.6
+381.24939 18271.4
+382.25253 4657.4
+384.55325 4501.9
+384.88739 2515.8
+385.22256 1273.3
+386.20840 30369.0
+386.54276 18745.4
+386.87680 6590.2
+387.21066 2535.6
+389.18253 900.9
+389.70767 2775.7
+390.21045 995.5
+393.88489 1547.1
+394.21948 1318.9
+394.70007 1572.2
+395.72626 1246.9
+396.21951 5242.1
+396.55515 3508.8
+396.88791 1075.5
+399.88281 870.3
+400.70407 681.2
+401.69702 1128.7
+402.18579 2158.3
+402.68784 756.1
+403.52887 693.8
+403.70551 9950.2
+403.86316 752.5
+404.20764 4797.8
+404.52536 1211.9
+404.70425 824.0
+404.86255 702.3
+404.95670 1870.5
+405.20752 1991.9
+405.45963 1604.4
+405.55115 7815.3
+405.72888 1495.4
+405.88547 3420.2
+406.54950 950.7
+407.19449 1037.6
+407.46173 744.1
+409.53107 1683.3
+420.72574 1362.9
+424.54932 1442.9
+424.88620 1114.9
+425.22690 3881.2
+425.47864 1902.6
+425.72885 961.6
+426.22879 1094.0
+426.90262 866.8
+427.54007 863.9
+434.24069 2647.1
+435.23773 710.4
+439.23932 6675.4
+439.57352 8640.8
+439.90720 3677.4
+440.23538 1424.2
+442.22287 6399.3
+442.55621 4508.5
+442.88998 2502.1
+445.24310 26846.1
+445.57736 21921.6
+445.91205 8376.1
+446.24747 3325.7
+447.22794 932.4
+448.22827 10092.1
+448.55792 2668.7
+448.89053 1244.6
+448.91098 843.4
+449.22995 1178.0
+450.23798 3596.0
+450.57269 2367.8
+450.90842 1367.7
+451.24191 1156.1
+454.23712 3539.1
+454.57471 11562.9
+454.73914 1762.6
+454.90897 10015.4
+455.24371 3043.3
+455.57507 734.3
+456.24191 34534.0
+456.57599 29507.7
+456.91016 11070.4
+457.24521 2921.6
+460.24811 7311.4
+460.73111 9954.3
+461.23251 3663.6
+462.24515 128691.4
+462.57941 102826.9
+462.91342 45068.2
+463.24536 20939.7
+463.58136 2389.3
+463.74323 5329.4
+463.91531 721.5
+464.24249 1475.5
+465.57431 698.4
+466.24048 28278.3
+467.24316 5393.4
+468.25107 2026.6
+468.57965 5688.7
+468.91293 2695.9
+469.24646 1238.2
+474.25378 1309.4
+477.23923 5735.3
+477.58218 2124.4
+477.74097 3671.9
+477.91553 2905.7
+478.24402 1138.7
+482.20111 658.4
+483.22693 2282.9
+483.58521 14323.5
+483.72897 1405.2
+483.91931 13096.6
+484.25333 4742.2
+484.58826 2030.4
+484.91699 886.5
+487.93402 1159.4
+488.26871 1267.9
+490.90546 1389.6
+491.24466 588.0
+492.23209 20489.3
+492.73370 10603.7
+493.23438 3422.6
+493.74033 839.2
+493.93652 12411.8
+494.27054 10764.1
+494.60486 6662.2
+494.93961 1216.1
+496.90799 7486.3
+497.24286 5088.2
+497.57797 2076.4
+497.75952 641.0
+497.90927 711.3
+498.25101 681.5
+499.93954 54751.9
+500.27383 45503.5
+500.60818 22508.1
+500.94189 8851.9
+501.23737 41934.4
+501.62186 653.6
+501.73898 24414.3
+502.24188 7014.0
+502.74014 2352.6
+502.91156 26120.4
+503.24588 23788.2
+503.58044 9796.7
+503.91644 2711.0
+508.91565 3168.9
+509.25015 2212.8
+509.58044 1218.2
+510.77814 2291.3
+511.28021 2154.2
+511.75168 1587.7
+512.24963 1134.5
+514.91833 4538.3
+515.25287 3186.6
+515.58630 1165.5
+516.24823 7486.7
+516.74951 3601.5
+516.78992 2789.7
+517.25079 993.8
+517.29150 1437.1
+517.79614 923.9
+519.78436 7104.4
+520.23755 1480.3
+520.28461 4472.6
+520.75732 3984.6
+521.25745 2105.8
+522.21936 4806.2
+523.22510 877.9
+523.61481 1586.2
+523.95282 1655.5
+524.27081 14627.4
+524.78021 714.0
+525.25348 96586.7
+525.75494 57698.0
+526.25629 17918.1
+526.75775 3781.0
+527.25250 888.4
+530.25470 1492.5
+530.75488 1267.5
+532.25446 549.5
+532.52399 1803.6
+533.78131 7449.0
+534.28271 4578.1
+534.77783 1159.9
+536.24194 1169.9
+540.74048 10075.2
+541.24249 5042.9
+541.74310 2713.0
+543.30267 10127.7
+543.80475 7040.6
+544.30469 3208.9
+544.80939 658.4
+545.29053 848.0
+547.32385 1894.2
+548.32343 948.3
+549.74536 76479.3
+550.24689 46401.0
+550.74829 17354.4
+551.24902 4270.6
+551.75415 732.4
+558.75079 144041.4
+559.25208 84996.4
+559.75323 29760.0
+560.14703 1102.8
+560.25500 6965.5
+560.75330 1817.5
+572.53210 738.1
+573.11340 743.9
+576.31891 1908.4
+577.27161 7570.4
+577.79681 1090.8
+578.27429 2065.6
+581.79523 24450.5
+582.29718 15881.8
+582.79846 5228.1
+583.29846 867.5
+590.32159 2983.2
+590.82220 1774.0
+591.32465 863.2
+593.82391 995.7
+594.33087 838.1
+595.28271 9766.7
+596.28436 3669.5
+597.28394 3455.1
+597.78320 1971.0
+598.81866 6421.6
+599.31915 4080.3
+599.82166 1662.8
+603.78583 798.1
+606.28723 26212.6
+606.78876 17308.2
+607.29187 6716.0
+607.54968 837.7
+607.82330 240997.2
+608.32477 166232.4
+608.82617 66284.1
+609.32739 19842.3
+609.40332 1148.4
+609.82733 4018.2
+615.29248 62635.5
+615.79370 48437.5
+616.29504 19825.7
+616.79620 6071.1
+617.30084 1669.9
+623.26917 783.4
+633.24945 777.1
+635.30231 1937.8
+642.83807 816.4
+647.30341 2323.2
+647.80713 793.0
+648.30737 1093.0
+650.32404 824.6
+651.26239 4512.2
+651.84113 1197.4
+652.26166 1291.0
+662.82776 4158.1
+663.32806 3285.3
+663.82965 1892.9
+671.83466 22875.9
+672.33380 15585.6
+672.83441 4025.2
+673.33496 1599.8
+673.86255 624.0
+674.28973 1059.5
+676.62439 1141.1
+681.35754 39317.5
+681.85938 30341.3
+682.36096 13396.1
+682.86230 5334.2
+683.36389 855.5
+687.33545 1736.1
+691.37421 836.4
+692.29938 6887.8
+693.30219 1868.4
+694.30298 708.9
+707.85260 853.9
+710.30969 23627.5
+711.31165 8613.4
+712.31531 2032.1
+726.18933 588.4
+746.34515 3708.3
+747.34644 1102.4
+764.34351 2018.2
+765.34631 898.2
+770.33545 2021.8
+788.39160 1435.2
+798.33093 810.8
+806.40381 2257.2
+807.40613 1212.3
+808.41632 628.4
+815.42786 949.3
+838.40253 2372.9
+839.39923 763.8
+842.47760 3270.1
+843.48309 1777.8
+844.46985 745.1
+849.25037 686.4
+875.38220 793.1
+903.28699 567.5
+930.45801 3521.5
+931.46039 2198.3
+939.75897 630.2
+953.47510 2182.1
+954.47266 847.0
+1001.46045 1501.3
+1002.46747 897.4
+1020.03101 794.4
+1057.22131 902.5
+1059.49792 12478.7
+1060.50073 6286.6
+1061.50598 2198.0
+1086.27563 585.2
+1103.18909 598.7
+1165.26697 566.9
+1198.16638 3197.3
+1198.41321 617.9
+1230.01453 592.5
+1240.47363 671.4
+1525.39868 917.6
+S	1281	1281	425.4832021
+Z	4	1697.90151
+109.14149 475.2
+113.46082 657.6
+120.69822 646.5
+121.80053 2488.6
+125.37457 595.4
+132.05380 565.1
+155.04996 561.8
+155.08121 1044.8
+156.14906 3481.5
+162.97318 540.5
+175.11887 695.7
+183.07602 1200.4
+188.22139 758.1
+188.24878 672.7
+188.26167 1655.9
+188.27385 2094.5
+188.28006 2025.1
+188.28882 2105.9
+188.30272 1764.9
+188.31233 1657.6
+188.32671 1061.2
+188.35211 542.2
+194.33217 612.4
+198.81300 659.9
+198.91200 746.8
+199.18045 3834.9
+199.22208 719.4
+199.26881 978.8
+199.28339 1450.8
+199.29362 2044.0
+199.31992 914.6
+199.37665 852.5
+199.39096 759.3
+199.40364 515.2
+199.41591 575.5
+208.76285 567.4
+210.30214 521.3
+210.30748 495.2
+215.11327 776.9
+218.23308 525.1
+227.17513 1092.0
+232.14009 17797.2
+233.14383 1752.9
+233.57188 703.0
+233.62407 2885.9
+234.12375 637.2
+236.83643 595.8
+268.16556 3304.4
+271.92773 534.4
+280.13367 2333.0
+286.81760 586.5
+288.60275 628.5
+296.16028 5702.9
+297.16367 929.4
+301.16214 1169.9
+304.16077 935.2
+306.40030 600.2
+314.30014 549.3
+314.37766 679.8
+319.17218 91074.9
+320.17670 9455.3
+329.15570 805.8
+339.18372 1459.2
+342.20322 2260.8
+342.26810 837.6
+343.02924 566.1
+366.20236 1257.8
+370.70374 13991.7
+370.95462 10039.9
+371.20544 3842.1
+371.45493 1006.1
+373.17212 852.2
+375.20654 28409.7
+375.45715 24342.5
+375.70813 9121.1
+375.95850 3497.5
+378.54672 650.5
+380.20428 6805.6
+380.53888 2947.6
+380.87411 1085.8
+381.24908 12511.0
+381.35590 607.7
+382.25293 2290.9
+383.54340 512.1
+384.55417 1241.6
+384.88812 743.4
+386.20782 19329.9
+386.54224 11774.4
+386.87665 4546.6
+388.71286 612.9
+389.70963 1084.3
+390.21048 668.8
+393.88586 731.8
+396.22003 4411.4
+396.55408 1886.2
+403.70526 4380.6
+404.20895 1479.9
+404.52475 908.8
+404.95569 640.1
+405.20917 1557.9
+405.55161 8943.1
+405.88568 5279.8
+406.21854 1133.6
+406.54456 603.3
+407.46646 1187.4
+409.24374 9093.5
+409.53195 1343.7
+410.24771 1234.7
+410.70038 3622.8
+411.18927 2255.3
+411.71844 4715.8
+411.96780 1526.8
+419.72565 664.4
+432.79932 633.6
+434.23871 783.6
+437.79871 689.9
+439.23911 6298.8
+439.57129 4528.0
+439.90750 1527.8
+442.22238 2434.5
+442.55502 1412.2
+442.88989 764.5
+445.24255 19181.5
+445.57697 14085.0
+445.91116 3817.2
+446.24841 1236.4
+448.22870 4660.0
+448.55829 1834.5
+449.23172 1072.8
+450.23636 2151.3
+450.57230 1033.4
+451.24219 966.9
+454.23419 1107.0
+454.57404 7608.5
+454.74106 761.6
+454.90839 5203.6
+455.24234 2771.5
+456.24112 21923.3
+456.57544 16074.3
+456.90994 6275.4
+457.24200 1014.6
+460.24707 4103.4
+460.73077 2511.8
+461.23187 868.1
+462.24466 73330.0
+462.57889 59971.1
+462.91324 24888.3
+463.24493 8583.7
+463.58206 1006.7
+463.74374 3252.6
+466.24030 11578.9
+467.24448 2022.1
+468.25128 1815.5
+468.58060 3292.2
+468.91193 2799.4
+472.58051 626.6
+476.78302 618.8
+477.23969 4236.9
+477.58163 2721.6
+477.74155 2428.4
+477.91815 922.1
+483.22638 1522.4
+483.58466 11755.0
+483.91885 9471.9
+484.25275 4754.0
+492.23102 9571.8
+492.73297 4914.7
+493.23419 941.4
+493.93579 5743.7
+494.26999 5335.9
+494.60718 1503.3
+496.90851 4766.4
+497.24243 3037.9
+499.93906 28178.1
+500.27338 23120.7
+500.60757 10346.2
+500.94257 2764.2
+501.23694 14166.5
+501.73886 8239.4
+502.23978 1483.4
+502.91119 25809.9
+503.24570 20451.6
+503.58032 9075.6
+503.91360 1880.0
+508.91217 1484.9
+509.24652 1150.2
+511.76871 736.2
+514.91620 1304.3
+516.24774 1776.4
+516.74963 962.4
+519.33655 623.9
+519.78314 2500.6
+520.28650 1119.2
+520.75726 1897.5
+522.21906 1493.4
+524.26947 8249.3
+525.25256 26286.9
+525.75464 11777.1
+526.25690 1951.0
+530.24939 993.6
+530.75629 641.9
+532.49451 2025.6
+533.78046 2226.0
+534.28162 2711.6
+540.73944 5627.3
+541.24121 2522.4
+541.74103 1104.7
+543.30219 4942.4
+543.80597 2979.6
+547.31921 1150.6
+549.74481 44907.2
+550.24640 23556.1
+550.74774 7570.7
+551.25006 1950.1
+558.75031 60247.9
+559.25159 35413.2
+559.75287 10723.3
+560.25348 1830.4
+577.27069 2017.2
+578.30884 782.4
+578.52795 530.3
+581.79437 5432.4
+582.29590 2792.6
+585.44708 756.8
+590.32318 1444.9
+595.28247 2667.4
+598.82025 2844.8
+599.32037 674.6
+606.28583 8952.1
+606.78845 6143.6
+607.29132 2344.0
+607.82294 122922.5
+608.32416 79857.7
+608.82599 28893.1
+609.32666 7915.5
+609.82947 669.2
+615.29224 16108.6
+615.79321 9638.4
+616.29651 4346.8
+616.79291 889.3
+647.29846 1208.5
+651.26025 1469.4
+651.33936 888.0
+662.82928 1217.2
+663.32562 811.0
+668.04681 571.2
+671.83472 4196.1
+672.33350 2370.0
+672.83185 1491.0
+673.36188 719.3
+676.63098 941.4
+681.35699 21654.4
+681.85846 15740.0
+682.36102 5737.9
+682.86151 1960.4
+692.29810 1308.5
+699.56396 630.1
+710.30780 4276.2
+711.31329 1928.4
+746.33905 662.2
+795.64142 880.7
+798.33380 777.0
+842.47479 1270.5
+892.11249 671.3
+930.44995 879.6
+931.45905 757.3
+1019.81390 677.3
+1036.37561 531.4
+1057.22766 1073.5
+1059.49878 3188.9
+1060.50610 2071.3
+1188.19287 668.8
+1198.10767 3253.2
+1204.74658 571.5
+1244.51123 593.0
+1525.38818 878.9
+1610.30359 714.9
+S	1282	1282	420.9808221
+Z	4	1679.89199
+112.38554 543.7
+113.80215 644.9
+114.76316 611.3
+119.69937 565.7
+120.70224 595.9
+121.80143 2199.5
+128.39508 511.0
+132.85283 547.5
+138.73474 596.9
+146.54172 523.7
+146.91640 542.2
+153.60733 555.2
+156.39035 541.7
+157.60269 700.0
+169.00981 692.5
+169.49655 660.6
+172.13559 569.6
+173.79311 683.4
+188.22566 610.0
+188.25969 1575.4
+188.27046 1788.9
+188.28865 2495.7
+188.30182 2214.0
+188.33908 542.6
+188.35840 736.0
+188.40015 631.3
+189.23456 607.2
+198.91377 778.0
+199.19362 1349.7
+199.27383 1001.1
+199.28098 956.2
+199.29108 2875.0
+199.31195 989.0
+199.38872 1024.4
+199.42149 756.0
+214.51451 677.4
+216.51112 635.6
+227.09442 580.2
+235.01392 553.5
+268.94641 719.7
+323.30902 546.6
+332.14270 565.0
+342.27893 817.1
+354.52109 624.2
+360.47018 589.0
+363.87152 620.5
+397.27475 526.1
+409.61032 557.3
+427.54602 898.4
+469.68152 699.2
+476.76703 643.7
+482.65860 710.4
+532.53741 2209.6
+549.16278 767.6
+612.06732 580.5
+676.61237 1143.8
+731.12958 866.0
+746.59827 589.8
+770.24988 567.8
+777.97937 611.5
+795.65088 1117.0
+859.21771 616.9
+1019.69397 796.2
+1020.82837 713.4
+1057.20337 793.3
+1070.38281 587.2
+1153.00220 576.7
+1154.73169 521.3
+1167.24976 627.0
+1183.96277 552.6
+1198.20007 3273.4
+1246.84729 615.3
+1367.42102 645.8
+1441.17236 767.9
+1527.13403 564.0
+S	1283	1283	421.4818246
+Z	4	1681.896
+112.30573 627.8
+113.23499 535.9
+114.29996 570.7
+118.99643 672.9
+121.80074 1656.5
+121.80532 1152.9
+123.53262 625.5
+124.10838 567.2
+130.18643 670.2
+134.22726 633.5
+136.18372 592.4
+137.30057 574.3
+140.55470 655.2
+143.81924 773.9
+147.72034 629.5
+157.61548 729.2
+160.64865 627.6
+165.78384 630.6
+169.15749 613.8
+169.92612 520.4
+174.60387 611.2
+182.79463 731.0
+198.91388 983.9
+199.28578 2507.8
+199.29425 1798.8
+199.37302 616.2
+199.39075 716.6
+231.05907 663.1
+238.72810 620.1
+255.30862 876.8
+260.22665 610.9
+268.10248 598.2
+280.20367 757.5
+303.42322 575.9
+334.72339 824.3
+340.01202 565.2
+350.28159 748.7
+371.81061 594.0
+373.24393 590.9
+418.32843 630.3
+427.57513 698.3
+469.15100 493.5
+469.87024 594.2
+476.77277 762.6
+512.27026 682.7
+532.52368 2163.8
+549.19897 764.3
+550.83765 575.5
+620.45477 601.7
+630.45135 869.1
+639.05609 614.4
+676.61981 1130.2
+731.17865 717.9
+794.25500 775.5
+795.64203 1086.8
+1035.91223 632.1
+1040.20850 632.1
+1050.05188 631.7
+1057.21619 1144.8
+1179.08875 666.0
+1188.27954 612.9
+1198.17407 3295.7
+1246.60803 609.9
+1289.12756 590.7
+1508.93506 574.9
+1543.62219 641.5
+1659.71179 626.0
+S	1285	1285	425.4830496
+Z	4	1697.9009
+107.16556 546.9
+113.06186 536.8
+113.22367 588.3
+114.61489 715.1
+120.68073 770.5
+120.72379 604.2
+120.78033 525.1
+121.79948 2794.8
+121.81806 528.7
+126.64935 590.7
+134.82954 540.2
+137.29883 731.5
+145.25587 558.0
+155.08139 1950.5
+156.14928 5018.3
+158.09215 1095.0
+161.48073 648.9
+175.11909 2093.6
+177.04428 562.3
+178.11760 530.8
+183.07625 1965.4
+185.05820 604.4
+188.26015 1440.6
+188.27336 2097.1
+188.28067 2037.5
+188.29405 2198.2
+188.30966 2172.5
+188.32690 1102.0
+188.34856 761.7
+188.37080 644.6
+198.41269 597.1
+198.91252 801.2
+199.18076 3834.6
+199.20432 687.0
+199.26877 938.4
+199.29199 1621.4
+199.30325 1660.3
+199.32434 1275.8
+206.53889 595.8
+215.11450 1252.8
+224.61876 654.4
+227.17462 947.0
+228.13246 551.6
+232.14043 27677.0
+233.14346 2104.5
+233.62415 3545.1
+234.12633 841.9
+242.55017 605.0
+245.07739 1123.2
+247.14746 649.7
+268.16580 5463.3
+271.62750 747.3
+280.13492 3639.3
+280.20020 754.7
+280.63641 1059.8
+289.93774 640.6
+292.16513 720.6
+296.16061 9959.3
+297.16312 1648.1
+301.16241 2143.2
+302.14676 814.4
+304.16110 1242.5
+308.92007 695.4
+312.41110 596.1
+313.19257 521.9
+315.14767 625.5
+318.57111 951.3
+319.17252 148030.4
+319.19806 822.6
+320.17688 15621.8
+321.17865 1674.8
+329.15622 1474.2
+334.83289 560.6
+339.18329 1947.0
+342.20328 4221.4
+342.29529 813.2
+346.65234 1043.0
+363.94421 1026.7
+366.20132 2472.3
+366.45203 865.4
+366.70203 744.2
+370.70422 19929.1
+370.95511 14829.6
+371.20544 7181.9
+371.45541 2565.1
+373.17087 952.3
+374.20151 1444.1
+375.20688 48365.5
+375.45749 38189.2
+375.70822 16247.4
+375.95798 3824.0
+380.20499 10274.8
+380.53912 5146.6
+380.87381 2129.5
+381.24960 20561.5
+382.25226 3002.3
+384.55350 3766.7
+384.88760 1579.4
+386.20825 25383.6
+386.54279 19982.4
+386.87698 7431.7
+387.21127 1542.8
+389.70901 2693.5
+393.21964 637.3
+393.88510 1109.6
+394.22067 1119.7
+394.69730 916.2
+395.72629 1263.2
+396.21964 5077.5
+396.55539 2464.5
+396.88736 1221.4
+399.55078 844.4
+401.69312 818.0
+402.18668 1613.0
+403.52673 953.4
+403.70602 7852.8
+403.86118 1828.0
+404.20673 4195.3
+404.53116 652.0
+404.70923 681.5
+404.95703 3180.8
+405.20728 2332.7
+405.45685 1223.4
+405.55161 12059.9
+405.72388 800.1
+405.88654 5579.0
+406.21948 2187.3
+407.21585 2289.5
+407.46689 1587.9
+409.53250 2531.3
+409.86469 1559.7
+410.20294 700.7
+424.55060 1041.3
+427.57526 856.2
+433.57343 770.8
+434.23984 2751.6
+435.24219 562.4
+436.55350 788.1
+439.23911 9663.0
+439.57303 6725.2
+439.90717 2118.5
+440.23785 1131.6
+442.22293 7001.8
+442.55621 3847.6
+442.88855 1224.4
+445.24289 27091.7
+445.57733 21380.1
+445.91156 7476.0
+446.24841 3372.8
+446.75168 1251.9
+447.22794 1125.6
+448.22800 10002.3
+448.55954 2310.8
+449.18683 592.0
+449.23245 1769.9
+450.23981 3440.6
+450.57227 3707.8
+450.90872 1300.7
+451.24359 1573.2
+454.23755 3865.3
+454.57474 10349.0
+454.73914 1583.0
+454.90878 6720.7
+455.24371 2919.6
+456.24173 35706.4
+456.57599 25320.1
+456.91000 11924.5
+457.24261 2698.1
+457.57944 817.2
+458.95685 579.9
+460.24725 7536.1
+460.75217 3224.3
+461.23367 695.6
+461.24716 699.4
+461.53467 904.6
+462.20862 859.5
+462.24515 126337.2
+462.57928 94377.1
+462.91327 42851.3
+463.10349 986.9
+463.24518 16479.1
+463.28860 864.5
+463.58279 3078.1
+463.74350 5058.6
+464.24655 1329.0
+465.57349 730.6
+466.24054 23295.8
+467.24399 4610.6
+468.25195 2175.9
+468.57831 5734.4
+468.91223 3909.7
+469.24628 1471.2
+469.58276 921.8
+474.58838 630.2
+474.92499 603.2
+475.70737 594.2
+476.76212 729.4
+477.23932 6497.0
+477.58167 3923.0
+477.74054 3463.2
+477.91672 2790.0
+478.25076 705.8
+483.22751 2597.8
+483.58521 17301.2
+483.72723 1197.9
+483.91925 13387.7
+484.25351 5851.6
+484.58606 1290.5
+485.25317 696.9
+487.92987 860.6
+488.26416 1177.3
+492.23199 20556.0
+492.73386 10003.2
+493.23538 2304.9
+493.93613 13263.3
+494.27017 11763.1
+494.60339 3900.9
+496.90741 4767.3
+497.24319 4336.2
+497.57736 1187.2
+499.93930 50280.9
+500.27374 46105.6
+500.60773 21319.3
+500.94260 7208.7
+501.23727 35057.6
+501.73883 18507.5
+502.24176 5735.7
+502.74231 1397.1
+502.91165 28351.3
+503.24603 24135.7
+503.57996 10350.3
+503.91516 3128.2
+504.24609 903.6
+508.91348 2794.0
+509.24979 2890.6
+509.58450 1131.3
+510.77783 2157.9
+511.75244 929.7
+514.91876 3522.6
+515.25214 2888.5
+515.58795 1631.9
+515.91913 730.7
+516.25006 1664.4
+516.74884 894.9
+516.78882 1895.7
+517.29187 1032.3
+519.78448 4098.2
+520.23663 1251.6
+520.28522 3304.5
+520.75726 5527.3
+521.25928 902.2
+521.75684 681.4
+522.21863 3472.3
+523.61877 1138.1
+524.27002 13644.2
+525.25305 30245.2
+525.75519 15491.0
+526.25488 4998.1
+530.25482 1026.2
+532.26172 709.4
+532.53125 1731.0
+533.78137 4707.6
+534.28345 2732.0
+534.78448 1330.8
+538.57892 654.3
+540.73938 10093.1
+541.24133 5431.1
+541.74402 1752.2
+543.30261 8672.7
+543.80377 5155.2
+544.30511 1189.5
+547.32300 1833.9
+548.38800 755.5
+549.74518 76517.7
+550.24683 43614.4
+550.74799 14856.4
+551.25153 3512.9
+551.74884 947.9
+558.75073 110419.7
+559.25195 62477.4
+559.75311 21531.8
+560.25476 5403.8
+560.75616 1026.0
+562.33649 1554.8
+568.29395 909.5
+577.27234 5082.5
+577.80133 1225.3
+578.27734 1048.9
+581.79541 8158.3
+582.29736 3822.2
+582.79590 1621.3
+590.32086 1806.4
+590.82703 1261.5
+595.28345 5410.2
+596.28619 1259.5
+597.28217 3340.5
+597.78473 1264.1
+598.81775 4989.4
+599.31946 3667.3
+599.81940 997.8
+603.77350 637.3
+606.28723 22003.9
+606.78900 12612.5
+607.03693 961.9
+607.29211 3603.1
+607.53601 844.5
+607.82336 204992.6
+608.32465 142066.4
+608.60638 1203.6
+608.82593 54920.2
+609.11115 1045.3
+609.32721 15153.9
+609.40369 984.3
+609.83014 2345.7
+615.29236 40820.9
+615.79376 26510.4
+616.29517 10476.7
+616.79889 2710.0
+630.45117 803.6
+642.34009 1055.2
+647.30359 1929.3
+647.80499 846.0
+651.26093 2632.3
+651.34094 1216.7
+651.83990 1349.6
+662.82843 3927.0
+663.33057 3576.9
+671.83435 15613.0
+672.33435 9360.2
+672.84961 2923.4
+673.36340 677.3
+676.64221 981.3
+681.35742 37512.1
+681.85907 26891.2
+682.36060 9335.6
+682.86194 2798.8
+687.33478 1825.6
+688.33777 726.2
+692.30011 5053.9
+693.30035 1355.9
+710.30914 11791.7
+711.31213 4328.3
+746.11035 570.8
+746.35199 914.1
+764.34479 947.0
+770.32941 1350.7
+788.39166 782.8
+795.65070 780.4
+798.32715 727.7
+806.40704 2097.3
+807.42487 715.4
+838.39807 904.6
+842.47351 2314.7
+843.47913 1118.3
+849.82281 596.2
+869.69244 550.9
+879.18732 575.0
+883.43420 683.9
+886.37549 641.4
+930.45819 1922.2
+931.45276 1316.6
+953.47186 1359.6
+1001.96161 618.7
+1028.01306 671.2
+1057.25867 1038.0
+1059.49744 5641.2
+1060.50293 4098.9
+1061.50330 832.0
+1188.34521 739.8
+1198.18567 3397.4
+1213.00281 631.7
+1355.76221 654.7
+1525.51257 953.6
+1686.24365 615.6
+S	1286	1286	420.9806996
+Z	4	1679.8915
+110.67889 549.1
+120.66582 670.9
+121.78704 590.3
+121.79970 1898.6
+126.30563 585.1
+132.58353 528.1
+156.14873 1722.6
+157.26833 572.0
+158.11932 598.6
+158.82104 527.2
+164.42641 577.8
+165.78320 944.9
+169.50061 637.0
+173.84128 905.8
+178.20024 570.4
+188.16447 622.8
+188.21011 606.1
+188.24768 1016.4
+188.28372 2694.9
+188.29482 2276.8
+188.33211 907.7
+189.78545 600.5
+191.29231 552.8
+192.36452 591.7
+198.91216 1321.0
+199.17978 602.3
+199.18610 726.2
+199.19844 869.7
+199.25182 851.4
+199.26088 546.3
+199.27321 1269.5
+199.28412 937.3
+199.29401 1525.1
+199.30598 2231.7
+199.40369 1030.7
+200.37914 625.6
+232.14001 8779.1
+233.58183 774.8
+233.62404 960.0
+242.02737 575.0
+268.16544 1870.2
+271.62836 723.1
+272.49380 545.5
+275.65726 516.6
+277.76086 663.7
+280.13495 953.3
+282.53378 612.8
+296.15967 3086.2
+301.16214 862.5
+308.91586 610.3
+314.57922 531.7
+319.17191 55197.5
+320.17618 5264.2
+321.18045 708.9
+326.34793 528.4
+339.18375 882.2
+342.20270 1360.1
+355.52783 611.8
+366.20236 1303.7
+368.41272 566.9
+370.70377 6770.4
+370.95395 6750.5
+371.20474 2877.9
+375.20633 12609.7
+375.45691 11932.4
+375.70752 2967.6
+380.20486 2657.7
+380.53720 1245.7
+380.87268 872.1
+381.24890 6014.5
+382.25327 740.3
+384.15857 632.0
+384.55444 734.8
+384.88593 1082.1
+386.20795 8802.1
+386.54187 5344.4
+386.87595 1490.3
+393.21997 699.2
+395.72507 892.1
+396.21933 2122.1
+396.55399 1886.4
+396.89154 763.0
+400.46509 716.7
+402.18283 699.7
+403.52603 687.7
+403.70508 3180.0
+404.20923 1307.4
+405.55127 4727.9
+405.88571 3396.6
+434.23685 1005.0
+435.02457 656.5
+439.23785 3049.8
+439.57129 1272.7
+439.89941 1563.5
+440.23309 745.3
+442.21948 1814.8
+442.55405 1233.7
+445.24246 5514.2
+445.57599 3064.5
+445.91135 811.5
+448.22699 3697.6
+448.56067 1061.6
+449.23947 729.1
+450.23703 1415.7
+450.57230 693.5
+454.23715 1832.7
+454.57297 2288.3
+454.90750 2391.1
+455.24716 768.5
+456.24069 12791.9
+456.57565 7890.2
+456.90958 3444.6
+460.24725 2391.7
+460.74405 659.6
+462.24445 33848.8
+462.57855 32074.3
+462.91284 11532.5
+463.24377 4815.1
+463.74356 1700.9
+466.24011 7449.8
+467.24255 1511.9
+468.57968 1314.1
+468.90958 761.3
+469.33441 620.1
+469.87207 734.5
+470.59210 709.3
+476.76895 920.6
+477.23898 2256.0
+477.57959 1181.8
+477.74139 913.6
+477.91385 934.2
+483.22974 891.3
+483.58490 3706.3
+483.91788 2423.0
+484.25119 1109.9
+492.23080 6533.7
+492.73254 2714.4
+493.23489 834.6
+493.93591 4857.3
+494.26889 3952.2
+494.60287 1221.3
+496.90897 1745.1
+497.24234 1545.4
+499.93854 9993.0
+500.27319 12206.2
+500.60641 3776.6
+500.94083 1165.8
+501.23663 6191.8
+501.73813 3290.1
+502.23856 1006.1
+502.91077 12575.6
+503.24530 10097.1
+503.57944 3693.3
+509.25714 1452.7
+509.75974 874.0
+519.78247 2319.5
+520.28204 1013.3
+520.75909 1249.4
+522.21991 909.7
+524.27130 3916.5
+525.27362 934.8
+530.00714 522.2
+530.25238 924.1
+532.50098 1901.6
+533.78149 1575.9
+534.28125 916.0
+540.73956 3777.3
+541.23999 2057.9
+543.30341 2926.1
+543.80273 1032.8
+547.32318 785.4
+549.18372 1149.1
+549.74457 26233.9
+550.24652 17834.3
+550.74731 5502.8
+558.75024 17104.4
+559.25140 9644.4
+559.75031 2515.1
+577.27374 1834.0
+590.31238 929.3
+595.28192 2243.2
+598.82001 1332.0
+599.32001 647.0
+606.28583 5929.5
+606.78827 4643.2
+607.28741 1173.6
+607.82257 61484.3
+608.32391 42461.1
+608.82605 14140.3
+609.32800 1766.4
+615.29187 8176.7
+615.79303 6924.2
+616.29407 2106.4
+662.83112 874.4
+663.32611 932.8
+663.83057 670.6
+671.83234 2301.9
+672.33325 928.1
+672.86652 897.3
+676.62189 965.0
+681.35712 9985.5
+681.85870 8368.3
+682.36060 3142.3
+692.29926 1109.0
+710.31061 3838.1
+711.31177 1528.3
+770.87469 715.4
+795.63959 906.9
+971.05969 753.4
+1045.16760 620.5
+1057.22156 932.2
+1059.49658 1885.6
+1060.49854 801.7
+1188.34180 838.5
+1198.11877 3271.4
+1295.38562 623.4
+1321.16589 726.8
+1525.47620 750.2
+1657.53503 808.0
+S	1287	1287	425.9840746
+Z	4	1699.905
+111.49899 580.6
+114.47758 619.2
+121.79736 831.0
+121.80196 2505.5
+123.90099 536.5
+125.11745 570.3
+141.86578 532.5
+155.08087 2308.1
+155.25345 638.5
+156.14926 4693.6
+157.61118 743.6
+165.78653 735.2
+175.11891 1655.6
+183.07649 2663.4
+199.18011 5139.3
+199.19237 648.1
+199.20250 834.8
+199.27852 2082.3
+199.28845 1298.9
+199.30190 1942.8
+199.32153 613.6
+199.37718 767.6
+199.39650 605.5
+204.33734 585.5
+212.36060 632.0
+215.11415 1067.3
+218.98132 505.0
+221.35944 640.8
+224.62106 688.6
+227.17526 2353.7
+227.64008 523.5
+232.14037 28359.3
+233.14386 3182.4
+233.62384 4327.4
+234.12625 692.5
+241.89987 602.9
+245.07690 1419.0
+251.10503 655.6
+268.16571 5940.6
+280.13504 2630.3
+280.19714 874.4
+280.63824 860.5
+282.66000 528.2
+292.16644 927.3
+296.16064 10010.0
+297.16397 1288.6
+301.16196 2596.7
+304.16058 2435.9
+308.91904 748.9
+316.94794 562.0
+318.87842 726.0
+319.15210 1239.7
+319.17245 152380.3
+319.19644 580.1
+319.71008 675.0
+319.77612 687.4
+320.17670 16069.3
+321.17654 2107.0
+329.15765 1691.8
+330.75427 618.8
+335.87030 654.1
+339.18301 2266.1
+339.68814 766.8
+342.20233 4342.4
+343.20569 1121.3
+344.86264 1730.8
+345.19620 1193.9
+345.37454 582.6
+346.19177 1205.0
+346.65237 868.4
+352.94830 623.3
+355.15948 579.4
+359.32565 608.3
+362.12506 622.3
+364.22339 991.1
+366.20242 1671.0
+366.45117 1387.9
+366.70377 766.7
+370.70419 21620.3
+370.95508 14878.2
+371.20535 8348.5
+371.45587 2123.2
+371.52237 745.6
+373.17325 1322.6
+375.20697 41830.8
+375.45740 37580.0
+375.70822 17010.1
+375.95929 6375.2
+376.21051 851.7
+376.45236 509.9
+380.20441 9266.8
+380.53922 5392.2
+380.87344 1761.5
+381.24942 17499.7
+382.25287 3152.4
+384.55438 3231.1
+384.88907 1560.9
+385.22144 1266.9
+386.20825 28459.0
+386.54276 17576.8
+386.87677 5165.4
+387.20963 1796.3
+389.18115 1003.3
+389.70773 3430.7
+390.21332 937.0
+392.96655 1525.4
+393.21927 1294.4
+393.88559 1987.7
+394.21939 1037.5
+394.69919 1462.2
+395.72607 1403.0
+396.21921 4432.6
+396.55457 3141.4
+396.71829 609.7
+396.88895 1874.3
+402.18585 1186.4
+403.52692 1141.7
+403.70538 10998.8
+403.86334 1028.3
+404.20758 3852.8
+404.52713 1150.0
+404.70480 725.8
+404.95700 3498.3
+405.20892 2229.0
+405.45724 1397.5
+405.55167 8779.3
+405.72662 829.5
+405.88632 4630.3
+407.21606 919.7
+409.24365 674.2
+409.53098 2544.2
+420.72440 1198.0
+420.97510 725.4
+424.55045 1679.2
+424.88513 877.3
+425.22647 2365.5
+425.47583 1183.7
+425.97873 754.9
+434.23929 2272.2
+436.54443 573.3
+439.23972 8556.6
+439.57318 7644.0
+439.90500 3202.7
+440.23801 803.6
+442.22241 5282.8
+442.55707 3714.6
+442.89096 1612.0
+445.24304 26983.7
+445.57727 20902.4
+445.91144 6115.1
+446.24796 2183.5
+447.23016 704.8
+447.30658 696.8
+448.22821 8900.9
+448.55933 2922.1
+448.89069 1842.4
+449.23126 1517.2
+450.23767 3091.7
+450.57312 2603.4
+450.90851 996.9
+451.24094 2593.6
+454.23773 2498.4
+454.57486 12847.1
+454.73648 939.8
+454.90897 9932.8
+455.24350 4059.8
+455.57730 916.1
+456.24146 34836.4
+456.57590 30506.3
+456.90994 12622.3
+457.24472 2968.5
+460.24750 7111.0
+460.73154 5745.2
+461.23288 2359.8
+462.24512 124539.7
+462.57928 102039.3
+462.76938 824.4
+462.91333 43669.9
+463.24524 21145.8
+463.58301 2964.8
+463.74362 5341.8
+464.24380 1506.1
+465.57367 645.5
+466.24033 26014.9
+467.24399 6736.6
+468.25153 2808.7
+468.58035 4613.5
+468.73462 742.5
+468.91302 2920.4
+469.24683 1896.4
+469.87216 813.4
+471.58276 912.8
+474.24832 1207.3
+476.78323 1102.0
+477.23990 7125.8
+477.58273 2873.0
+477.74127 3297.7
+477.91669 2661.0
+478.24283 1053.0
+479.24557 708.5
+482.16125 590.9
+483.22556 1630.8
+483.58499 19828.0
+483.72974 794.9
+483.91882 11738.4
+484.25287 5256.1
+484.58655 1534.0
+487.93643 775.8
+488.26740 1222.8
+488.59848 813.2
+492.23209 21579.6
+492.73389 12793.8
+493.23355 3821.3
+493.73703 823.5
+493.93637 13855.2
+494.27029 11058.3
+494.60458 4927.2
+494.94016 1252.9
+496.90723 4676.9
+497.24271 3784.9
+497.57773 2197.5
+498.24606 1313.0
+498.75546 736.4
+499.93936 59089.7
+500.27377 51204.5
+500.60785 20973.4
+500.94211 7638.9
+501.23743 43357.7
+501.27853 960.7
+501.73889 23521.4
+502.24072 7367.0
+502.74026 1805.0
+502.91159 28650.3
+503.24576 20985.4
+503.57986 9779.2
+503.91455 3371.5
+504.24771 847.4
+507.22095 609.4
+507.30795 1854.5
+507.80542 1721.5
+508.91318 2667.6
+509.24854 1989.2
+509.58725 725.7
+510.77890 2778.0
+511.27979 1532.7
+511.75482 1187.7
+514.91907 3430.3
+515.25281 4697.5
+515.58936 1173.7
+516.24786 4073.6
+516.74963 2359.7
+516.79114 2583.6
+517.28857 1028.2
+519.78418 6709.4
+520.23834 1223.2
+520.28613 4322.2
+520.75726 3877.9
+521.26117 1603.6
+521.76154 658.7
+522.21887 4304.0
+523.22485 860.7
+523.61646 1484.3
+523.95221 1457.9
+524.27063 14713.1
+525.25317 66608.7
+525.75482 37960.5
+526.25616 11831.3
+526.75824 2584.0
+530.25317 1470.1
+531.25653 814.1
+532.51025 1958.6
+533.78113 4740.6
+534.28131 3633.2
+534.78479 1129.5
+536.22729 847.1
+540.74060 10051.5
+541.24286 5065.6
+541.74243 1963.6
+542.25452 536.9
+543.30243 10252.5
+543.80365 6751.3
+544.30310 2314.3
+547.32367 2272.4
+548.33075 1064.8
+549.18719 928.4
+549.74524 78393.9
+550.24689 48495.1
+550.74799 16554.0
+551.11365 623.2
+551.25012 3818.8
+558.75073 135073.7
+559.25189 75999.5
+559.75317 29570.9
+560.25360 6928.7
+560.75452 1518.4
+562.33453 1629.9
+563.34100 934.1
+577.27277 7186.1
+577.80042 1390.8
+578.27344 1364.3
+579.27966 731.2
+581.79504 16542.6
+582.29669 10159.3
+582.79761 3931.2
+583.29694 1439.4
+590.32312 3345.5
+590.82428 1102.9
+594.32568 1526.7
+595.28271 10134.9
+596.28564 3119.4
+597.28339 3594.6
+597.78302 2239.8
+598.28033 1079.5
+598.81812 5069.0
+599.32031 3933.0
+599.82410 1097.5
+603.78314 793.9
+606.28687 25166.2
+606.78876 15919.7
+607.29138 6789.1
+607.76648 1275.8
+607.82324 234073.3
+608.32465 166899.7
+608.60449 1192.3
+608.82623 58429.3
+609.32776 16037.1
+609.40851 931.5
+609.82916 4197.7
+615.29236 61167.6
+615.79346 42556.0
+616.29510 17659.5
+616.79712 5306.0
+617.29871 1702.7
+630.43652 864.6
+633.25079 673.0
+635.30035 1416.1
+642.33685 648.9
+647.30286 1952.8
+647.79279 680.7
+651.26099 4202.8
+651.33575 1419.5
+652.26544 1788.7
+655.30548 796.3
+661.89520 586.7
+662.82996 4698.6
+663.33026 3569.7
+663.83484 1131.8
+664.32623 844.1
+671.83435 22767.1
+672.33398 13447.4
+672.83496 5790.8
+673.33148 1000.3
+673.37537 742.0
+676.56085 530.7
+676.61548 1395.1
+681.35748 39496.6
+681.85901 29344.1
+682.36078 12682.0
+682.86206 3864.1
+687.33752 1794.1
+688.34052 779.9
+691.37720 1690.8
+692.29877 6403.5
+693.30292 2197.4
+710.31006 25181.0
+711.31238 8211.5
+712.31342 1985.6
+746.34357 2281.1
+764.34381 1078.3
+770.33667 1448.1
+778.07605 682.4
+788.39441 1439.5
+795.63153 1049.5
+798.32495 863.6
+799.33118 999.6
+806.40302 2599.0
+807.40796 1528.7
+815.44031 645.3
+838.40277 3048.0
+839.40192 1347.4
+842.47687 3126.1
+843.47998 1164.0
+877.43628 860.1
+883.41473 1057.0
+930.45581 3411.0
+931.46417 1904.6
+934.74976 866.3
+940.07990 649.5
+953.46979 2577.6
+954.47180 1200.9
+1001.46967 992.6
+1021.10858 622.5
+1021.86371 714.1
+1025.51440 668.7
+1059.49805 13092.6
+1060.50171 7461.9
+1061.50562 2252.0
+1116.47998 873.3
+1198.13916 3454.5
+1206.56921 1279.9
+1212.50183 601.5
+1293.99207 617.8
+1359.39648 545.1
+1539.12415 564.8
+1661.27197 673.0
+S	1289	1289	425.4778921
+Z	4	1697.88027
+106.54057 573.1
+110.52630 673.5
+120.79438 611.4
+121.59220 630.1
+121.80204 2568.8
+133.12378 837.0
+141.85027 566.8
+141.99228 583.9
+155.08109 1738.8
+156.14925 4988.1
+156.80402 528.9
+157.61938 585.9
+157.86705 584.5
+161.50444 623.0
+175.11868 2294.5
+182.80032 708.8
+183.07599 2847.6
+188.23816 660.7
+188.27092 2297.0
+188.28955 2408.5
+188.29915 2129.1
+188.31332 1513.6
+188.34024 634.9
+188.40027 518.1
+198.91124 948.8
+199.18063 3981.8
+199.19380 551.0
+199.22534 1085.0
+199.24403 816.2
+199.27484 913.8
+199.29207 1682.3
+199.30254 2118.3
+199.31366 989.9
+199.39104 728.6
+199.59100 635.2
+215.11310 1021.7
+218.80510 576.4
+227.17540 1393.5
+232.14011 26997.2
+233.14328 1871.4
+233.62387 4241.4
+235.54266 528.2
+245.07733 635.3
+251.10397 673.9
+259.14801 554.9
+259.15436 542.5
+264.06296 563.3
+268.16571 4804.7
+271.63242 849.1
+279.76868 564.8
+280.13446 3370.7
+280.63538 866.4
+292.16476 1101.0
+296.16031 9509.1
+297.16357 1071.3
+299.68579 530.6
+301.16199 1783.1
+304.16016 1489.3
+318.57251 807.8
+319.17224 133565.7
+319.77444 888.5
+320.17612 16267.2
+321.17758 1880.9
+322.42358 570.8
+329.15555 1264.8
+330.70648 568.9
+339.18341 2443.6
+342.20184 4256.5
+342.68329 596.7
+344.86261 1335.5
+346.65335 1654.2
+347.15509 656.9
+355.65747 1201.9
+356.14694 812.0
+362.53763 860.1
+366.20026 2003.7
+366.45306 1973.3
+370.70389 19134.5
+370.95477 14492.9
+371.20523 6579.6
+371.45587 1368.9
+371.70587 844.0
+373.16879 704.5
+374.20261 648.3
+375.20654 43328.9
+375.45715 30571.2
+375.70792 13948.0
+375.95844 4595.6
+380.20447 9003.0
+380.53867 4865.0
+380.87405 1045.1
+381.24905 16283.4
+382.25262 3956.0
+384.55417 2136.0
+384.88739 1499.1
+385.22125 881.4
+386.20779 25150.4
+386.54233 14935.2
+386.87634 7038.8
+387.21176 1730.9
+388.46432 879.6
+389.18228 1469.5
+389.70834 3016.7
+390.21069 1456.6
+392.96573 1134.5
+393.88556 1897.7
+394.69952 1171.7
+395.72458 1163.8
+396.22012 2550.9
+396.55310 2388.3
+396.89038 1035.2
+398.67044 656.5
+401.69458 890.7
+402.68887 780.0
+403.70493 7439.4
+404.20715 3667.9
+404.52710 806.9
+404.70590 731.0
+404.95660 2148.0
+405.20801 1892.8
+405.45914 1505.7
+405.55139 11205.0
+405.72769 939.1
+405.88574 6900.7
+406.22061 1463.0
+407.19614 735.8
+407.21689 1536.0
+407.46640 813.8
+409.53113 3076.8
+409.86517 1542.2
+410.69965 2443.9
+411.19275 925.8
+420.20401 601.6
+427.58438 1006.7
+434.23935 1989.3
+436.88702 761.1
+439.23911 8879.9
+439.57248 5821.1
+439.90686 3426.5
+440.24091 685.3
+442.22156 3918.3
+442.55521 2173.1
+442.89084 847.2
+445.24261 22370.0
+445.57672 13384.3
+445.91089 6601.0
+446.04672 614.5
+446.24707 3355.4
+447.30795 664.8
+448.22815 6547.4
+448.55597 2323.6
+449.23163 1183.9
+450.23862 2986.8
+450.30908 540.7
+450.57288 3790.0
+450.90286 627.0
+452.25900 825.9
+454.23688 3317.4
+454.57404 8864.5
+454.74054 1275.9
+454.90823 5289.7
+455.24490 3001.4
+455.57928 1079.5
+456.24124 31398.4
+456.57565 22787.6
+456.90991 9302.2
+457.24261 2720.5
+459.96289 599.6
+460.24655 5493.8
+460.73157 4128.6
+461.23410 1585.6
+462.24466 106684.0
+462.57886 78423.1
+462.91312 32957.0
+463.24496 11877.5
+463.58331 1253.4
+463.74347 4453.7
+464.24792 1370.7
+466.24011 19200.6
+467.24359 3551.5
+468.25113 2700.0
+468.57880 4302.5
+468.73911 546.3
+468.91321 2943.9
+469.24921 1075.6
+472.24741 780.9
+474.25488 1175.4
+474.59232 879.2
+476.77560 701.9
+477.23865 5471.2
+477.58078 3911.2
+477.73981 2049.7
+477.91617 2100.2
+478.24619 1221.4
+482.70398 788.8
+483.22510 1524.5
+483.58438 14152.7
+483.72955 1284.3
+483.91895 10107.9
+484.25314 3782.4
+484.58670 1078.3
+487.93015 1297.1
+492.23166 17749.8
+492.73337 7345.6
+492.77573 653.8
+493.23425 1785.4
+493.93585 11590.8
+494.26993 9646.9
+494.60364 4023.0
+494.93427 1168.0
+496.90710 6913.3
+497.24164 5865.1
+497.57550 1617.8
+499.93903 38168.1
+500.27356 37486.1
+500.60739 17054.3
+500.94247 4258.4
+501.23688 24005.0
+501.73837 14605.5
+502.24066 5052.0
+502.74493 1196.0
+502.91122 31210.4
+503.24533 24602.2
+503.57944 10075.3
+503.91486 2306.2
+507.30713 5216.0
+507.80853 3417.9
+508.30966 973.3
+508.91382 2036.2
+509.24991 1033.2
+510.77844 1731.5
+514.91803 3417.0
+515.25201 2887.5
+515.58997 1035.4
+516.24750 3086.0
+516.75189 656.2
+516.78558 1961.0
+519.78308 4191.4
+520.23773 1184.2
+520.28339 2312.4
+520.75562 3149.5
+521.26007 1696.8
+522.21973 2871.8
+524.26990 11158.1
+524.78046 856.7
+525.25287 49966.0
+525.75446 23520.0
+526.25629 5488.8
+526.75543 890.6
+527.27899 1016.8
+530.25110 1894.8
+532.48779 1820.7
+533.78088 2963.2
+534.28094 2611.2
+536.24109 773.5
+538.12964 647.6
+540.73956 8486.3
+541.24286 4737.8
+541.74274 1680.9
+543.30188 8618.2
+543.80396 3361.8
+544.30383 902.3
+547.32336 1286.0
+548.32452 782.2
+549.74481 62472.9
+550.24646 40001.9
+550.74744 10769.2
+551.25006 1807.8
+558.75037 91852.4
+559.25153 58664.3
+559.75244 19763.4
+560.25500 3333.8
+560.75452 937.6
+562.32996 1226.1
+577.26971 3977.0
+578.27332 1510.5
+580.27728 545.8
+581.79474 10217.4
+582.29602 6817.8
+582.79657 2460.4
+587.32208 3200.3
+587.81769 1085.9
+590.32056 1406.0
+590.82300 1283.4
+595.28210 4374.4
+596.28601 1522.4
+597.27881 2610.2
+597.78009 879.1
+598.81854 3611.2
+599.31824 2800.4
+599.81842 1054.0
+603.78961 845.3
+605.70868 630.5
+606.24457 766.8
+606.28705 15453.1
+606.78925 8804.0
+607.29156 3684.5
+607.82288 179126.7
+608.32422 123329.4
+608.60852 925.2
+608.82587 43003.6
+609.32745 11275.5
+609.39917 1066.3
+609.82764 2097.0
+615.29193 32450.1
+615.79309 22376.3
+616.29456 10258.2
+616.79724 2736.7
+617.30298 776.2
+647.80530 932.3
+651.26239 2516.8
+659.66351 690.4
+662.82953 2323.6
+663.33044 2064.3
+663.82867 946.0
+671.83417 12179.9
+672.33295 7162.7
+672.86145 2055.4
+674.29144 624.4
+676.61792 1116.8
+681.35693 28617.0
+681.85883 21750.1
+682.35986 7737.9
+682.86029 2829.7
+687.32916 1461.3
+691.37946 757.7
+692.29712 3643.2
+693.29980 1162.6
+693.88635 586.7
+694.12231 660.4
+710.30975 10366.5
+711.31384 4142.2
+746.34979 1573.4
+747.34320 712.1
+764.34283 796.7
+795.63879 1283.1
+806.39966 920.0
+842.47180 1406.4
+843.48230 706.9
+849.45209 528.8
+930.46008 1551.4
+931.46094 718.8
+953.47168 1151.0
+963.75714 670.0
+1021.70947 543.7
+1052.61914 596.8
+1059.49866 6145.4
+1060.50513 2586.2
+1122.67908 588.3
+1140.36133 651.5
+1145.61975 590.2
+1187.53455 611.1
+1198.09265 2984.8
+1520.03613 697.9
+1666.97192 751.2
+S	1290	1290	420.9753296
+Z	4	1679.87002
+113.47208 864.8
+121.80373 2071.5
+131.49129 538.8
+144.26561 632.9
+144.31461 533.9
+146.54333 664.1
+149.22469 559.8
+157.61586 736.0
+159.70982 505.2
+165.78816 629.0
+169.50676 679.9
+171.32083 609.2
+173.85320 655.3
+174.68373 645.9
+182.79672 781.2
+188.25589 1245.2
+188.27306 2168.3
+188.28937 1792.6
+188.30386 1837.6
+188.30942 1844.2
+188.41177 655.8
+192.71310 523.2
+198.91150 908.9
+199.23508 550.8
+199.24416 773.5
+199.27930 550.9
+199.28975 1571.6
+199.30067 2495.8
+199.32376 990.7
+199.37801 515.4
+199.38718 909.6
+199.39909 1029.7
+214.53229 725.2
+227.06691 611.4
+232.74408 584.5
+256.02789 532.4
+290.77026 590.6
+297.35303 633.7
+297.48721 585.0
+308.92566 730.6
+319.17218 1054.9
+339.16232 599.7
+342.29590 761.5
+368.07361 559.1
+394.82117 571.0
+402.99927 570.5
+413.65475 614.2
+470.56964 605.0
+476.76096 884.1
+486.74649 633.3
+532.52783 1678.7
+549.19757 844.8
+549.73969 743.6
+588.54919 554.5
+601.73425 633.7
+607.81854 902.0
+639.10223 515.8
+676.64081 720.9
+724.07977 682.8
+795.63702 1027.4
+841.40405 593.2
+862.00378 730.7
+874.68665 577.4
+1008.98450 727.8
+1057.24548 711.8
+1102.17236 681.0
+1153.54260 649.3
+1164.04126 663.8
+1198.18738 3604.2
+1231.23389 760.3
+1282.31934 599.8
+1436.55811 533.9
+S	1291	1291	425.9793246
+Z	4	1699.886
+106.83705 482.8
+110.41740 644.3
+115.71030 533.6
+118.22978 584.9
+121.80054 2362.6
+125.66788 521.9
+131.14087 613.1
+133.28520 610.8
+139.38129 606.5
+146.93219 805.3
+151.54514 614.7
+155.08147 764.6
+156.14896 2842.6
+158.46179 651.5
+169.50717 608.8
+175.11821 1502.2
+183.07574 1779.3
+198.91281 927.0
+199.18021 7939.6
+199.19350 908.5
+199.28934 3081.6
+199.30275 725.9
+199.32611 973.8
+199.38933 762.2
+200.18393 1102.9
+200.40581 547.3
+227.17511 2216.5
+232.14006 18442.1
+233.14265 1232.7
+233.62373 2905.6
+234.12466 777.4
+243.07930 1959.1
+251.10326 709.5
+260.10605 1974.9
+268.16507 3659.0
+280.13562 2133.8
+296.16006 6074.1
+301.16183 1273.1
+304.16129 3291.6
+308.92676 702.0
+319.17209 87842.0
+320.17609 9730.0
+321.17657 1268.0
+329.15637 1397.9
+330.70773 1017.6
+339.18259 1151.6
+342.20181 2387.1
+343.20621 998.1
+344.86075 1115.0
+350.28226 661.0
+366.20200 717.2
+366.45529 941.2
+366.70337 1145.3
+368.53436 678.0
+370.70346 9910.7
+370.95468 12906.6
+371.20544 4389.4
+371.45706 1264.6
+372.21271 575.2
+375.20648 24631.4
+375.45694 28395.2
+375.70773 11823.0
+375.95874 4917.8
+376.20712 973.1
+378.75781 1353.7
+379.25763 776.4
+380.20432 4742.3
+380.53857 4318.0
+380.87146 1000.9
+381.24905 12406.7
+382.25348 2725.7
+384.55219 1148.3
+384.88925 1015.4
+386.20776 17313.6
+386.54242 11701.9
+386.87628 5629.7
+387.21054 879.5
+388.46268 727.3
+389.70700 850.5
+390.20853 718.2
+393.88721 858.9
+396.21875 3343.4
+396.55283 1747.4
+396.88669 953.1
+403.70490 3888.8
+404.20734 2280.1
+404.95673 1161.4
+405.20761 1887.3
+405.45624 687.4
+405.55106 9195.3
+405.88580 7087.4
+406.22031 2175.4
+407.19620 684.4
+407.21735 928.6
+407.46512 1241.4
+407.71741 1204.6
+408.18985 952.7
+409.24423 4063.3
+409.53159 1794.4
+409.86584 2113.8
+410.70007 3318.7
+411.18869 2040.5
+411.69733 724.8
+411.71710 1320.0
+427.57498 645.0
+434.24170 1116.9
+436.55423 1123.7
+437.38174 625.6
+439.23856 5058.6
+439.57281 5332.8
+439.90607 3044.5
+440.23801 1418.7
+442.22150 2798.5
+442.55533 1799.6
+445.24255 15013.1
+445.57697 12812.8
+445.91043 6070.4
+446.24783 1639.0
+448.22861 4418.1
+448.55676 1716.5
+449.23108 1248.4
+450.23724 2595.4
+450.57120 1446.5
+454.23779 1285.2
+454.57370 6012.2
+454.90805 6340.0
+455.24249 2938.4
+456.24109 18392.9
+456.57544 18151.2
+456.91006 8127.3
+457.24353 1268.3
+460.24686 2605.2
+460.73114 11371.3
+461.23230 5581.4
+461.73645 899.9
+462.24448 59109.8
+462.57867 61258.5
+462.91281 28952.3
+463.24551 10270.3
+463.58273 2303.5
+463.74371 2768.6
+464.24481 1008.5
+466.24008 12628.5
+467.24399 2579.9
+468.24896 1838.7
+468.57971 3253.0
+468.91055 2848.9
+469.24673 1785.4
+471.78873 3838.6
+472.28964 2292.7
+472.79163 1121.3
+474.25204 737.2
+476.76801 839.9
+477.23941 2859.5
+477.58096 891.4
+477.74057 2049.0
+477.91589 2905.7
+483.22879 1035.6
+483.58466 9010.8
+483.72946 766.9
+483.91858 8282.3
+484.25241 4220.9
+488.26395 813.8
+492.23135 10992.4
+492.73322 5909.5
+493.23471 1948.1
+493.93585 6474.2
+494.26935 6915.5
+494.60474 2045.8
+494.93698 938.5
+496.90765 3261.7
+497.24213 4986.8
+497.57541 1798.9
+499.93881 23920.6
+500.27325 24991.1
+500.60724 12250.1
+500.94116 3553.0
+501.23724 11640.4
+501.73788 8632.3
+502.24008 3039.8
+502.91113 20906.8
+503.24551 24148.2
+503.57983 11217.9
+503.91449 2400.5
+504.25027 829.8
+507.30731 33807.3
+507.80893 25579.7
+508.31006 8098.7
+508.74130 664.8
+508.81140 2218.3
+508.91644 962.7
+509.24820 1078.0
+509.58618 754.1
+510.77463 688.7
+511.27795 900.7
+514.91656 1521.5
+515.25330 1380.2
+515.59253 636.7
+516.24731 6772.7
+516.74860 2862.9
+517.29309 936.2
+519.78192 2847.3
+520.28552 1671.7
+520.75555 1926.5
+521.25989 1038.4
+522.22089 1761.2
+524.27014 8323.9
+525.25269 110615.4
+525.30780 708.8
+525.75415 58763.1
+526.25531 13332.1
+526.51300 641.0
+526.75183 705.5
+530.25195 1498.3
+532.58936 1896.7
+533.78162 1884.1
+534.27954 2269.3
+540.74005 4482.1
+541.24231 4014.7
+541.74353 1499.5
+543.30157 5002.5
+543.80292 2694.7
+544.30573 935.4
+547.32306 1120.7
+549.18768 653.2
+549.74463 37574.6
+550.24622 26161.7
+550.74780 10305.9
+551.24939 2154.2
+558.75006 59343.5
+559.25134 41025.8
+559.75256 15469.3
+560.25372 2433.2
+560.75476 943.1
+577.27246 1711.8
+577.79431 899.3
+581.79431 28328.0
+582.29633 12707.6
+582.79883 3542.3
+583.29816 756.9
+587.32227 13924.5
+587.82391 14631.9
+588.32428 4922.8
+588.82788 1786.2
+590.80835 587.7
+595.28271 2057.7
+596.28516 743.2
+597.28149 1496.5
+597.78302 654.9
+598.28796 755.6
+598.81915 1942.7
+599.32043 1411.8
+604.28442 698.3
+606.28632 9807.9
+606.78754 5843.6
+607.29059 2748.5
+607.82257 105118.3
+608.32397 94092.6
+608.82544 36870.2
+609.32782 9151.9
+609.41742 690.5
+609.82562 1484.1
+615.29199 14164.0
+615.79315 11680.2
+616.29413 4422.9
+616.79663 1262.2
+617.30054 832.4
+629.24310 615.3
+630.45618 887.9
+647.80304 872.8
+651.83551 944.7
+662.82947 795.6
+663.32935 1274.9
+671.83472 3375.0
+672.33179 2835.5
+672.85834 1480.4
+673.36078 800.1
+681.35687 19319.5
+681.85822 18058.7
+682.35950 9025.9
+682.86359 2494.3
+683.73901 581.2
+692.29633 1727.1
+710.30951 4779.3
+711.30743 2183.2
+712.31049 915.8
+733.77808 614.6
+746.34491 2433.5
+747.34314 846.7
+795.64441 1065.0
+842.46680 1288.7
+867.50311 895.7
+889.71362 599.8
+930.45538 984.4
+953.46588 994.2
+974.40399 576.9
+1011.92444 594.9
+1059.49500 2127.8
+1060.49597 2345.6
+1061.50012 696.3
+1062.41614 595.2
+1109.87756 678.0
+1137.43652 642.9
+1140.20972 608.8
+1164.64099 605.7
+1198.31641 3443.3
+1307.25061 584.7
+1359.39587 611.0
+1525.53064 756.3
+1561.30725 702.4
+1652.53601 685.8
+S	1293	1293	665.5618771
+Z	4	2658.21621
+176.20215 593.9
+179.59602 605.7
+199.19383 996.7
+199.22899 689.4
+199.24799 627.6
+199.28282 707.8
+199.29167 3190.7
+199.30510 900.9
+199.33838 719.0
+199.39027 1244.1
+202.25314 559.1
+214.51489 565.0
+222.08719 1893.2
+223.07056 1130.8
+226.38574 635.9
+240.09740 4800.2
+259.03540 540.8
+290.66125 569.0
+293.12006 581.3
+301.11346 2736.4
+311.13464 8854.4
+312.13840 1093.1
+323.13428 868.1
+345.56342 636.9
+349.71857 15202.8
+350.22012 5693.0
+350.72141 1425.9
+362.64090 583.2
+368.15515 3077.4
+372.14865 1116.0
+378.13760 1988.3
+380.15860 1125.5
+382.47797 633.9
+397.48868 637.7
+403.14374 730.7
+408.14935 1209.0
+425.17712 3384.8
+426.17944 685.3
+427.57089 626.2
+452.17853 1440.1
+455.27200 1253.2
+470.18414 935.8
+488.25497 888.6
+497.25943 1334.7
+503.92261 743.2
+513.58453 703.9
+523.17639 1288.1
+526.59650 757.1
+532.52429 2141.1
+540.20355 5619.1
+541.20740 917.2
+562.61346 897.9
+562.94507 862.2
+571.28442 843.1
+578.76862 842.1
+592.26263 878.4
+596.52576 6280.8
+596.77826 5588.9
+597.03003 4266.3
+597.28784 1033.8
+598.30872 2533.1
+598.81305 1244.0
+600.62714 3815.1
+600.96118 4079.0
+601.02924 21946.2
+601.27887 18271.5
+601.53088 13816.0
+601.78088 6240.1
+611.24408 2017.2
+617.29480 28500.3
+617.79608 20462.1
+618.29736 5329.9
+618.79816 2265.3
+636.04578 613.4
+637.63702 3486.5
+637.96960 3905.6
+638.30347 1904.9
+643.63867 5897.1
+643.97491 6283.7
+644.30908 3107.4
+644.64417 1074.0
+645.30737 1386.7
+646.28076 661.3
+647.53973 1872.8
+647.69275 685.3
+647.79297 1952.2
+647.84509 3240.2
+648.34552 2308.8
+660.75415 617.2
+676.63599 1022.0
+677.32477 2103.2
+677.65656 2331.1
+677.99335 1706.9
+678.33002 781.5
+689.32635 904.5
+694.99860 4826.4
+695.33118 4483.8
+695.66620 2551.1
+695.99878 1362.4
+701.00098 20649.7
+701.33551 21518.7
+701.67023 9438.1
+702.00415 4831.2
+702.34357 1711.6
+705.36023 3034.5
+705.86011 2460.4
+710.92139 667.2
+712.29022 860.1
+728.00171 909.1
+733.33936 3242.1
+733.67328 4352.7
+734.00781 2747.4
+734.34277 1506.2
+736.19885 608.8
+739.34393 19655.0
+739.67822 18688.8
+740.01239 11360.7
+740.34601 4573.1
+740.67511 845.4
+746.67737 1027.9
+752.34698 5605.5
+752.68188 6342.7
+753.01587 2851.5
+753.34680 1876.9
+753.68201 1064.1
+758.35101 23250.3
+758.68530 29011.6
+759.01880 16671.5
+759.35406 6858.1
+759.68964 2312.5
+765.35126 1178.6
+769.87982 4571.8
+770.38013 4949.9
+770.88361 1892.6
+771.35223 6911.7
+771.68811 12294.9
+772.01978 7904.9
+772.35547 3751.6
+772.68610 2104.7
+776.57715 659.2
+777.35742 49296.7
+777.69220 57226.7
+778.02637 34449.8
+778.36047 11723.4
+778.69513 5336.3
+789.70245 1263.0
+795.03302 4591.3
+795.36792 7662.6
+795.70038 5296.8
+796.03424 3512.9
+796.37347 1326.7
+801.03632 49052.4
+801.37085 57038.3
+801.70483 39695.8
+802.03967 19888.3
+802.37256 5177.1
+802.71356 1034.1
+805.02728 1010.0
+805.35254 1743.5
+811.02856 2113.1
+811.36334 1630.3
+811.69464 1158.9
+812.03424 773.8
+843.41382 3505.2
+843.82959 804.1
+843.91577 3021.1
+844.41656 2190.6
+844.92468 774.6
+852.34229 1884.4
+852.83704 1352.0
+856.45111 5812.1
+857.45227 3204.1
+858.44415 752.5
+900.43500 5495.9
+900.93677 7898.0
+901.43610 3642.7
+901.94714 771.5
+920.97668 2722.6
+921.47699 1006.2
+930.48718 1484.8
+954.87476 854.7
+955.94104 802.9
+956.46027 1104.2
+962.88849 1998.7
+963.37775 2336.4
+963.88922 1420.8
+964.95709 4862.4
+965.45898 4882.4
+965.95679 2984.9
+966.46796 999.6
+980.89929 1137.0
+981.39166 1230.1
+981.89929 865.9
+1015.48358 3829.1
+1015.98267 3289.5
+1016.47980 2597.5
+1050.99646 908.8
+1051.49353 1079.3
+1113.00305 654.1
+1188.00671 808.8
+1198.17578 3473.2
+1463.64954 667.4
+1525.56079 1011.4
+1857.74170 709.4
+1876.71228 813.7
+1878.47961 764.8
+1878.91577 1781.7
+1879.51514 18681.0
+1880.06763 1673.8
+1880.34656 1046.5
+1907.05261 7380.3
+1930.73901 943.4
+S	1294	1294	434.9805471
+Z	4	1735.89089
+106.95093 590.8
+107.45895 535.8
+107.60747 552.2
+111.24742 635.5
+121.79984 2012.0
+123.15952 501.9
+141.71477 563.5
+142.70427 507.5
+147.39651 612.2
+150.69102 642.2
+160.68575 539.3
+166.17111 545.4
+171.64183 604.6
+173.82620 640.0
+178.90118 586.8
+185.16470 2413.5
+188.22948 521.8
+188.27670 2018.3
+188.29239 2148.5
+188.30197 2113.6
+188.31659 1065.7
+188.67838 550.6
+194.80827 528.7
+198.91574 633.7
+199.10753 1065.1
+199.19450 853.2
+199.27019 1371.0
+199.28206 725.4
+199.29202 3264.4
+199.34084 708.5
+199.38969 888.8
+205.30078 638.6
+213.58563 557.7
+224.76892 522.0
+226.08224 1155.7
+227.10204 1234.8
+230.84874 641.2
+231.14879 9242.9
+231.63806 801.7
+232.15245 1290.3
+233.16441 1822.1
+240.15192 31318.4
+240.65372 8716.3
+244.09300 749.5
+244.12813 1222.6
+256.92688 642.9
+259.14371 1893.5
+269.54449 560.9
+271.60168 796.1
+276.17014 15292.2
+277.17361 2273.4
+278.22467 582.4
+283.16586 536.7
+288.66003 2250.3
+289.16101 884.0
+294.18076 6544.7
+295.18393 777.9
+297.66553 11214.3
+298.16708 3912.6
+298.66187 4932.0
+299.16400 2488.1
+306.16904 1442.7
+306.67142 736.7
+309.84094 662.4
+311.65231 857.3
+312.66022 928.9
+317.70786 616.3
+320.16550 6376.1
+320.66644 2709.1
+333.19458 667.6
+339.17557 616.9
+344.17459 641.6
+346.15015 1073.4
+351.20145 1591.4
+353.18097 3787.7
+353.68250 2252.9
+355.68253 1236.0
+356.18741 749.4
+361.16739 2197.4
+364.16074 3703.4
+366.52670 1422.5
+366.86008 2144.0
+367.19321 873.7
+369.68066 2352.0
+370.18759 1343.5
+376.51785 617.7
+379.70163 2833.1
+380.20471 1333.1
+381.52567 590.8
+383.19281 676.3
+392.18970 646.0
+393.69940 3949.0
+394.20029 1250.3
+396.88568 728.4
+398.03516 619.1
+406.77377 604.7
+407.23868 572.8
+407.74252 589.9
+410.20047 864.9
+410.68954 1384.0
+411.68970 1823.4
+412.20993 3599.8
+412.54480 1210.3
+412.76898 654.4
+419.20764 6474.8
+419.70984 3269.9
+420.20895 762.5
+430.39215 758.3
+448.22290 807.0
+449.21759 718.9
+450.24384 1028.9
+458.55231 1190.5
+458.88651 924.7
+461.23209 1218.9
+461.28705 1628.5
+461.57019 711.9
+466.22583 624.8
+466.74387 1614.0
+467.24991 1007.0
+469.56268 686.0
+469.89221 1353.9
+474.25473 1194.5
+475.56815 4520.1
+475.74933 8622.2
+475.89941 5307.4
+476.23206 4792.4
+476.56656 1800.2
+476.75409 1417.6
+479.29672 6865.9
+480.29813 1683.7
+481.57230 29890.5
+481.90463 28367.5
+482.23788 13876.8
+482.56940 6665.9
+482.89969 1151.6
+485.79852 2039.6
+486.29880 1396.7
+487.57562 84012.8
+487.90988 67297.8
+488.24417 36442.1
+488.57849 10165.4
+488.71265 759.4
+488.91193 1382.5
+491.57764 639.3
+491.71619 4364.3
+492.21576 830.1
+492.25458 1259.2
+497.79297 676.3
+507.26221 9067.7
+507.76337 4212.5
+508.26691 1571.7
+511.22803 4185.0
+512.22650 821.1
+520.25043 1661.1
+521.56305 2583.5
+521.91180 707.1
+524.27325 1142.8
+524.57916 583.3
+524.60266 547.6
+527.56873 859.3
+527.90070 647.6
+530.27393 3025.4
+530.61176 2279.4
+532.49646 1148.8
+536.59784 3396.2
+536.93292 4022.0
+537.26666 1803.2
+537.59973 769.8
+540.27716 3493.5
+540.77802 1701.9
+541.27740 1019.2
+543.31207 66903.1
+543.81329 47924.8
+544.31488 13937.8
+544.81561 1928.9
+549.21368 868.2
+549.28333 15333.9
+549.78455 10221.3
+550.28674 2892.8
+550.79529 908.1
+556.36169 638.3
+571.78308 7912.0
+572.28455 4309.2
+572.78540 1931.8
+576.31311 3152.3
+580.79102 915.3
+581.28986 840.9
+592.84680 2830.5
+593.34833 2867.0
+593.84625 1494.8
+594.32239 14814.8
+595.32581 5764.7
+608.80731 1190.3
+609.30780 2004.6
+609.80176 1130.9
+617.81219 6947.9
+618.31421 4951.8
+618.81561 2069.0
+620.78339 1760.8
+621.28302 1621.0
+624.31171 4089.0
+625.31488 2022.2
+629.29645 30003.0
+629.79773 16192.4
+630.29950 6709.1
+630.48706 1019.1
+630.80188 1906.6
+638.62915 659.5
+639.32245 3807.8
+640.32684 1998.2
+648.30499 535.2
+649.30042 1521.2
+653.04584 600.2
+657.80908 2362.5
+658.30804 1323.0
+666.81171 3586.4
+667.31287 4185.6
+667.81171 924.9
+676.62323 1129.8
+678.32062 872.4
+682.33649 1347.2
+682.83221 986.0
+687.32330 1822.1
+687.82416 850.7
+702.65674 621.3
+705.35706 2171.7
+706.35559 1179.0
+723.36633 3528.4
+724.37183 1386.9
+729.40906 1349.1
+731.36279 677.1
+738.35663 3214.6
+739.36133 1064.3
+786.94012 632.0
+795.65161 968.6
+819.39252 1374.4
+820.38055 1085.1
+837.40741 4350.5
+838.40741 2614.4
+841.68286 578.1
+850.18536 568.2
+867.39844 2261.7
+868.40161 1453.9
+894.15649 581.5
+899.47546 832.6
+957.52002 2269.7
+958.52222 1813.7
+968.84277 656.4
+982.42310 6814.2
+983.42725 3363.1
+984.42053 971.4
+1057.21960 1149.5
+1071.55542 521.6
+1109.28516 561.6
+1176.63684 615.6
+1197.79626 1126.1
+1198.11804 2218.2
+1233.73230 549.8
+1520.59717 612.0
+S	1295	1295	425.4824996
+Z	4	1697.8987
+106.36818 662.3
+112.84077 562.8
+115.16204 557.3
+116.37370 570.5
+120.32142 514.4
+120.74977 569.0
+121.79702 1087.6
+121.80195 1979.1
+121.80621 578.7
+144.86594 570.7
+145.10374 539.0
+148.67886 558.6
+151.17305 586.7
+156.14917 609.1
+180.09692 603.6
+183.57877 496.2
+187.02377 576.2
+189.43523 657.9
+198.91023 945.1
+199.19324 793.9
+199.24033 687.6
+199.27550 1394.6
+199.29126 3182.3
+199.30550 928.2
+199.31526 600.0
+199.34486 577.1
+199.38939 1283.6
+200.30827 629.8
+201.18800 564.6
+206.20529 563.7
+211.87666 534.2
+214.52350 699.7
+218.85776 698.9
+231.60973 589.8
+232.13945 2323.8
+280.17844 616.0
+296.16257 680.5
+301.51254 536.4
+313.72449 644.7
+319.17166 12228.9
+320.17465 699.0
+350.28000 763.8
+370.70428 1452.8
+370.95337 1396.0
+375.20483 2358.2
+375.45605 2748.3
+380.20383 1192.4
+381.24759 1780.6
+386.20804 2644.8
+386.54135 1443.7
+405.55115 1960.0
+409.24295 2945.6
+411.71692 2669.4
+411.96942 2628.2
+412.21964 1182.6
+442.01733 561.1
+442.22073 620.6
+445.24249 3633.6
+445.57538 2304.2
+448.22986 619.6
+454.57547 2049.8
+454.90933 1890.2
+456.24173 1710.8
+456.57352 1243.1
+457.58148 707.7
+462.24380 6488.1
+462.57867 7427.8
+462.91306 2189.0
+466.23843 1221.2
+471.78793 2275.6
+472.29031 834.5
+476.77301 706.4
+477.23648 838.2
+477.91238 990.9
+483.58331 2087.9
+483.92160 1758.1
+492.23141 1521.7
+493.93909 893.0
+494.27081 1179.7
+499.93933 1858.3
+500.27267 2344.9
+500.60507 1169.2
+502.91013 3092.9
+503.24469 2436.7
+503.57867 1855.6
+507.30676 16695.6
+507.80807 9668.2
+508.30905 1865.2
+508.81622 655.4
+520.76361 871.3
+524.27338 1291.0
+525.25195 6005.5
+525.75208 1915.1
+532.49030 1835.1
+537.00000 539.0
+540.23181 696.7
+549.74414 6049.7
+550.24646 3582.7
+558.74908 7183.1
+559.25018 4750.7
+559.75635 726.1
+563.46741 565.9
+581.79297 1132.7
+587.32166 5126.0
+587.82416 4214.2
+588.32111 990.2
+606.28601 1530.9
+606.78937 1214.5
+607.82214 15481.7
+608.32355 11839.9
+608.82513 2975.1
+622.94061 620.8
+676.62213 1236.5
+681.35492 2593.9
+681.85712 2108.8
+682.36011 744.2
+732.78522 688.6
+795.63788 942.6
+871.51434 599.0
+908.50140 698.9
+1010.44098 627.5
+1020.79999 775.0
+1057.22522 1031.8
+1154.37683 774.6
+1166.79688 599.7
+1188.10217 830.7
+1198.09631 3438.3
+1390.96655 583.6
+1468.13135 624.1
+1525.45203 761.0
+S	1297	1297	425.4776471
+Z	4	1697.87929
+105.17245 598.7
+105.25207 587.5
+105.76204 595.6
+106.88847 766.2
+113.92483 528.3
+120.66718 725.7
+121.80253 2197.6
+126.64046 629.5
+143.55132 554.8
+153.56560 596.5
+155.08131 1949.5
+156.14928 4868.8
+157.91261 540.4
+158.09341 788.5
+165.78802 622.5
+168.25540 552.7
+169.50833 600.0
+171.64087 653.3
+175.11858 1517.2
+183.07616 2230.6
+199.18025 3887.8
+199.24878 608.6
+199.27844 995.3
+199.28864 2752.5
+199.30518 845.3
+199.38782 959.6
+200.09195 571.1
+205.83606 498.6
+207.11285 1268.5
+215.11412 1259.7
+227.17451 885.5
+232.14037 27056.9
+233.14397 1598.2
+233.62401 2975.0
+243.07964 2459.3
+245.07585 787.0
+260.10733 1916.9
+268.16534 4276.3
+269.16977 869.5
+271.68594 647.9
+280.13495 2911.8
+280.63748 817.4
+282.41476 534.1
+292.16400 834.2
+296.16034 10178.9
+297.16470 1715.8
+301.16260 1355.1
+302.14679 1112.6
+304.16132 870.7
+313.59744 576.1
+319.17239 137887.6
+319.77515 1139.5
+320.17642 16808.1
+321.17746 1143.8
+329.15741 1381.7
+339.18384 2848.3
+342.20181 3128.0
+344.86188 1289.4
+346.65335 983.6
+350.28336 585.3
+353.17282 680.5
+361.95856 666.3
+366.20114 2431.6
+366.44907 980.9
+366.70636 695.5
+367.48907 647.8
+370.70407 17830.3
+370.95502 16417.8
+371.20471 6426.4
+371.45715 2023.9
+373.17294 1069.8
+375.20685 39668.3
+375.45746 33860.3
+375.70819 16619.2
+375.95901 4029.8
+376.20935 1952.0
+378.75775 2253.0
+380.20477 8276.0
+380.53854 4843.1
+380.87262 1234.8
+381.24951 17637.8
+381.73187 665.2
+382.25360 3906.3
+384.55377 3221.9
+384.88745 1926.0
+385.22198 1341.3
+386.20813 28477.1
+386.54242 19089.8
+386.87653 5497.5
+387.21039 2151.9
+389.18155 921.4
+389.70819 2785.0
+390.20947 698.3
+391.88489 2309.2
+392.21808 1126.8
+393.21826 902.0
+393.88403 1921.6
+394.21729 741.4
+394.70047 793.4
+395.72772 1094.1
+396.21951 3325.0
+396.55341 2404.2
+396.88965 1239.9
+402.18622 1789.6
+403.70547 8582.1
+404.20850 3522.8
+404.52734 1106.0
+404.70456 973.2
+404.95654 2669.4
+405.20886 2403.1
+405.55130 9275.1
+405.70978 870.7
+405.88736 4767.7
+406.22015 1963.3
+407.21371 1443.2
+408.19070 4011.6
+409.53171 1953.9
+409.86478 1431.6
+410.23224 615.5
+424.54706 753.3
+425.21387 821.1
+433.57056 789.6
+434.23880 2519.9
+436.55338 867.4
+439.23972 8144.9
+439.57404 6496.9
+439.90619 2099.2
+440.23700 674.9
+442.22293 5381.8
+442.55685 4122.7
+442.88919 1255.0
+445.24301 23406.0
+445.57730 18224.4
+445.91153 7159.9
+446.24753 3436.1
+446.74954 1046.7
+447.22510 876.8
+448.22861 7171.4
+448.55981 2686.9
+448.89047 1197.7
+449.23157 999.7
+450.23828 5533.7
+450.57236 2713.1
+450.90518 1099.0
+451.24069 926.7
+451.74121 1035.2
+454.23697 3089.0
+454.57434 10400.4
+454.74042 1617.8
+454.90854 7646.0
+455.24368 3636.5
+455.95035 608.9
+456.24142 31405.0
+456.57568 28838.3
+456.75421 709.5
+456.90973 11962.4
+457.24457 2361.0
+460.24759 6659.7
+460.75055 3284.2
+461.23352 1392.7
+461.72485 723.6
+462.24503 110034.3
+462.57922 90767.0
+462.91330 41136.7
+463.10223 985.9
+463.24524 15125.1
+463.58206 2054.1
+463.74429 4554.5
+464.24539 2372.6
+466.24042 21103.2
+467.24335 4857.7
+468.25073 2941.7
+468.58112 4855.6
+468.91388 2510.6
+469.24603 1776.7
+469.87711 653.9
+471.78937 6970.9
+472.28989 2635.7
+472.79114 1273.6
+474.25174 751.9
+474.58789 868.7
+477.23914 5626.5
+477.58118 3127.6
+477.74130 3099.9
+477.91571 2048.8
+478.24661 1250.6
+483.22702 2124.4
+483.58481 12147.7
+483.72815 774.7
+483.91901 12380.0
+484.25317 4914.5
+484.58792 1382.1
+487.93246 765.0
+488.26453 1001.6
+492.23193 17192.0
+492.73380 8978.4
+493.23553 2248.5
+493.74081 787.5
+493.93564 11353.0
+494.26968 8986.8
+494.60391 5047.4
+494.93857 900.3
+496.90842 3412.4
+497.24243 4332.7
+497.57837 2729.3
+497.91824 732.8
+499.93930 46196.1
+500.27374 40985.8
+500.60785 19365.5
+500.94147 4931.1
+501.23718 26432.1
+501.27432 1573.3
+501.73883 16218.9
+502.24152 4229.0
+502.65720 606.1
+502.74115 1073.3
+502.91147 26176.5
+503.24597 21229.0
+503.57983 8743.2
+503.91391 3076.3
+504.21191 895.9
+507.24747 925.8
+507.26111 1156.6
+507.30768 52697.2
+507.80920 29477.2
+508.31122 8977.4
+508.81201 1667.1
+508.91351 1817.2
+509.24753 1744.3
+509.58215 1044.5
+510.77841 2708.6
+511.27982 1235.3
+511.76370 815.8
+512.25110 870.2
+514.91742 3167.2
+515.25293 2908.6
+515.58331 1310.9
+516.24731 1688.9
+516.74646 603.7
+516.78870 2716.0
+517.29120 1062.1
+519.24060 2337.4
+519.57318 1700.5
+519.78479 4604.1
+520.24127 1087.3
+520.28552 3251.1
+520.75653 3175.4
+521.26129 1133.5
+522.21887 2760.5
+523.61700 848.5
+524.27051 11921.2
+524.77576 778.7
+525.25287 27157.0
+525.75494 12490.9
+526.25568 3849.8
+526.94476 735.5
+530.25677 995.0
+532.51404 2066.2
+533.78113 5690.9
+534.28265 3641.2
+536.24030 822.0
+537.78088 1070.8
+538.28241 903.0
+540.73969 8569.3
+541.24274 4049.9
+541.73914 1766.0
+543.30212 8196.7
+543.80316 5228.1
+544.30060 999.6
+547.32300 1549.9
+548.32458 659.8
+549.74512 67170.7
+550.24670 41525.2
+550.74817 15143.1
+551.24927 2736.2
+555.50757 575.9
+558.75055 99782.5
+559.25177 58063.5
+559.75305 21830.7
+560.25409 4824.4
+560.75354 857.4
+562.33154 1286.5
+566.96582 946.9
+571.78595 1384.4
+572.78406 828.7
+577.27216 3704.7
+577.80029 1322.7
+578.27997 881.5
+578.81256 807.7
+581.79425 5768.0
+582.29681 3761.2
+582.80005 961.0
+586.40521 1014.4
+587.32288 23966.1
+587.82477 14432.6
+588.32520 5896.5
+588.82629 1686.4
+590.32635 1850.8
+590.82471 1556.3
+593.78229 844.6
+594.83350 658.1
+595.28101 4863.4
+596.28174 1418.7
+597.28259 2200.8
+597.78430 1753.1
+598.81738 5351.8
+599.32196 2258.9
+599.82330 1150.3
+606.28741 16762.5
+606.78931 14076.3
+607.04242 882.1
+607.29010 4496.4
+607.54047 682.2
+607.57343 630.3
+607.77045 732.3
+607.82324 193762.4
+608.32440 129152.7
+608.82605 48125.5
+609.11603 925.5
+609.32697 15899.3
+609.41003 1050.5
+609.82782 2734.7
+609.91504 872.8
+615.29236 38356.4
+615.79382 26575.3
+616.29523 11770.0
+616.79669 3512.3
+617.30365 801.2
+647.29816 1745.2
+647.80304 1508.9
+651.25946 2489.3
+652.26196 1017.4
+652.33588 540.8
+662.82983 2540.8
+663.33087 2219.2
+671.83472 11176.9
+672.33398 7707.5
+672.84015 2921.8
+673.35419 661.6
+681.35724 33689.4
+681.85919 23626.7
+682.36029 10550.1
+682.86475 2410.0
+687.33057 1549.8
+692.29797 3782.2
+693.30170 1112.9
+710.30994 11301.5
+711.31305 4463.8
+795.64423 683.6
+806.40204 1740.1
+807.41504 775.2
+815.43335 835.9
+842.47400 1433.4
+843.47345 1087.9
+850.05188 619.6
+863.65771 581.1
+867.50024 1110.0
+868.50616 775.3
+930.45276 1848.0
+931.46417 788.2
+936.70142 597.6
+953.47107 1690.9
+1019.69427 778.8
+1054.86780 627.4
+1055.02710 599.2
+1057.23206 804.0
+1059.49902 5471.6
+1060.50452 3437.0
+1061.50195 987.5
+1116.68311 596.2
+1177.52344 546.1
+1198.14966 3321.5
+1525.48511 943.0
+1649.67517 589.2
+S	1298	1298	665.5555896
+Z	4	2658.19106
+176.17741 523.0
+188.28467 845.0
+188.30321 975.6
+188.31523 545.2
+188.32571 677.7
+188.33659 522.3
+188.35159 654.6
+189.43646 612.3
+194.08769 595.2
+194.39369 541.3
+199.19685 781.5
+199.20985 916.9
+199.28041 1317.7
+199.29517 2522.4
+199.30872 855.1
+199.39101 828.8
+212.10246 924.1
+217.07973 595.6
+219.50369 670.0
+222.08731 1335.5
+223.07101 1614.1
+240.09756 4439.9
+268.93185 675.2
+293.12231 644.6
+293.83450 624.2
+298.84769 679.7
+301.11340 3318.8
+311.13458 8257.0
+312.13715 939.7
+320.37442 621.2
+322.26157 672.8
+349.71857 12640.0
+349.76816 625.2
+350.14496 1497.4
+350.21976 4138.1
+350.28259 807.4
+350.72067 1217.6
+357.45953 630.9
+368.15570 2419.2
+372.15286 736.5
+377.75677 669.6
+378.14020 9251.7
+379.14270 1337.1
+386.38034 744.5
+387.26941 918.3
+392.29150 643.9
+396.15109 1707.9
+408.15082 1665.2
+425.17633 3656.8
+427.56592 766.5
+465.74701 3121.8
+466.25128 1023.7
+482.67975 762.1
+501.26675 1122.2
+501.76666 675.3
+523.17700 1435.1
+525.27167 2232.4
+525.77271 1305.6
+532.21844 672.2
+532.44568 1128.3
+532.48334 1229.5
+534.27698 3893.8
+534.77814 2496.6
+540.20380 5416.8
+541.20685 984.7
+552.02319 530.1
+552.04639 614.3
+562.94312 927.4
+569.24670 550.5
+596.52533 3928.3
+596.77600 5376.8
+597.02856 4357.0
+598.31195 1837.5
+598.81384 906.7
+600.62598 3392.7
+600.96094 3032.4
+601.02899 14602.5
+601.27911 17907.9
+601.53070 10934.3
+601.62042 666.3
+601.78033 4210.2
+602.03668 931.5
+611.23938 2562.7
+617.29535 10793.0
+617.79773 5515.4
+618.30048 2178.0
+635.79980 831.5
+637.63354 2251.6
+637.97174 2636.6
+638.30615 1996.6
+642.31903 999.2
+643.63959 5321.7
+643.97375 6003.4
+644.30902 1972.1
+644.64124 916.5
+645.30792 4432.0
+645.80829 3888.6
+646.30579 969.4
+647.54694 957.4
+647.84369 2099.6
+648.04523 912.8
+648.34583 2113.0
+664.02264 659.0
+676.63965 734.0
+677.32208 2218.8
+677.65881 3312.2
+677.98999 1096.9
+694.99780 3515.1
+695.33154 4350.8
+695.66669 2853.2
+695.99762 1094.3
+701.00128 20169.8
+701.33563 20791.1
+701.67004 12647.1
+702.00372 3086.4
+702.34576 987.6
+705.35870 2347.6
+705.85657 1489.9
+712.28949 895.0
+720.38593 730.4
+728.00977 733.2
+733.34076 4017.1
+733.67346 4077.5
+734.00775 3237.4
+734.33185 1318.0
+738.62299 647.8
+739.34442 14725.3
+739.67816 16475.5
+740.01227 10143.1
+740.34406 3521.7
+740.68158 1844.6
+752.34869 3113.6
+752.68237 5069.8
+753.01563 3634.8
+753.35175 1466.5
+753.68463 865.6
+758.35175 18614.7
+758.68561 26881.8
+759.01971 14618.2
+759.35577 5618.3
+759.69275 1585.1
+760.87134 788.8
+765.68488 956.0
+769.88068 5005.1
+770.38373 3550.0
+770.88153 1894.4
+771.35126 6479.2
+771.68903 9165.4
+772.02124 7117.9
+772.35657 4227.1
+772.69189 913.0
+776.40698 803.7
+777.35773 45588.8
+777.69244 54636.1
+778.02637 31601.5
+778.35980 14618.1
+778.69604 2344.2
+795.03467 5433.4
+795.36646 6363.6
+795.62775 979.9
+795.70221 4187.9
+796.03162 2260.9
+796.70215 708.8
+801.03680 47955.7
+801.37109 53122.2
+801.70496 31720.6
+802.03943 15412.3
+802.37415 3851.1
+802.72327 789.4
+805.69830 1206.8
+811.69824 1527.9
+814.19263 698.5
+833.43671 1392.5
+834.43774 887.6
+843.41565 4598.0
+843.82355 862.3
+843.92090 3255.4
+844.41321 1318.0
+852.35010 1122.8
+852.84167 1187.4
+853.33655 1019.8
+856.44940 2072.5
+857.45844 1041.7
+900.43506 5381.6
+900.93610 6240.8
+901.43921 2715.9
+901.94342 761.3
+930.48694 22851.3
+931.48920 12115.2
+932.49426 2949.4
+954.37335 1130.4
+956.45251 947.5
+962.87897 2148.2
+963.38153 2347.0
+963.87384 1137.2
+964.95386 3603.7
+965.45837 4148.6
+965.96008 2516.4
+966.46423 1333.4
+980.89050 1310.7
+981.39746 1427.5
+1011.06665 684.0
+1015.47882 2277.1
+1015.98230 3147.8
+1016.48120 2615.9
+1017.48657 646.9
+1050.99768 677.4
+1051.49573 1157.8
+1057.26355 822.9
+1079.46948 805.7
+1128.24280 649.2
+1140.40906 735.6
+1164.21655 573.9
+1188.22839 733.4
+1198.07568 2569.5
+1295.15381 633.2
+1332.97729 818.8
+1353.19897 636.9
+1448.67615 826.4
+1489.11462 699.9
+1512.90771 824.5
+1550.36707 628.9
+1660.97522 823.3
+1754.90808 747.9
+1777.55676 628.7
+1879.09912 2280.0
+1879.55835 19588.2
+1880.02039 2280.9
+1880.56323 867.5
+1880.82678 782.2
+1907.06116 7270.4
+S	1299	1299	1879.98340793
+Z	3	5636.675
+Z	2	3758.119
+532.47760 2017.3
+536.57806 694.4
+538.18518 619.9
+676.63422 859.6
+776.76428 614.3
+795.64117 1157.3
+828.54132 676.9
+894.33490 702.9
+1198.07214 3492.7
+1218.50464 691.9
+1350.63721 662.5
+1667.62561 736.4
+1878.37598 829.2
+1879.09863 1057.3
+1879.22754 1374.2
+1879.51624 19659.2
+1881.13904 587.6
+1907.04639 7119.2
+S	1301	1301	425.4829896
+Z	4	1697.90066
+106.32626 500.8
+118.17294 642.0
+118.78765 581.7
+121.79813 2319.8
+123.76350 523.1
+127.57362 552.2
+131.23448 491.1
+141.39244 638.2
+148.82298 605.1
+155.08104 1119.5
+156.14920 4059.1
+165.78029 872.7
+170.06247 549.3
+172.10716 742.2
+173.83650 726.1
+175.11882 1037.8
+183.07613 1846.4
+188.21883 638.9
+188.24330 626.8
+188.25821 1547.3
+188.28384 2541.3
+188.29359 2223.1
+188.31454 1511.2
+188.36742 503.1
+188.51674 514.6
+192.04074 690.1
+198.90802 792.7
+199.17232 1032.7
+199.25108 783.1
+199.26157 676.5
+199.27299 2343.3
+199.28458 2200.1
+199.29826 1178.3
+199.37155 899.8
+199.38518 646.0
+199.43402 585.0
+201.70212 548.5
+215.11302 694.2
+232.14011 20094.7
+233.14371 1205.9
+233.62393 2719.8
+234.12883 577.4
+247.74289 558.6
+248.69051 560.1
+255.30055 619.5
+268.16495 4206.0
+271.61890 699.0
+280.13483 2753.2
+291.33591 580.7
+296.16028 6344.6
+297.16376 1199.3
+301.16171 1452.5
+319.17206 94880.9
+319.77472 748.5
+320.17596 10888.7
+321.17917 1140.1
+322.17728 582.9
+329.15640 761.8
+339.18408 1277.3
+342.20175 2886.7
+346.65366 995.8
+355.65811 1025.0
+355.85770 560.5
+362.87378 786.9
+366.20193 2174.3
+370.70361 14227.9
+370.95444 9211.3
+371.20499 3135.6
+371.45474 1375.5
+373.17358 754.7
+374.53317 772.2
+375.20639 28993.6
+375.45685 25632.8
+375.70786 12400.0
+375.95822 2095.1
+376.20837 843.0
+380.20407 7130.1
+380.53909 3225.0
+380.87387 1289.9
+381.24908 12538.9
+381.52554 805.4
+381.85812 945.8
+382.25266 2644.6
+384.55188 829.7
+384.88693 1521.0
+386.20776 17475.1
+386.54224 10747.7
+386.87634 2904.1
+389.70770 1224.6
+393.88449 1093.9
+396.21799 1839.5
+396.55252 2350.3
+403.70523 4420.8
+404.20615 2477.6
+404.69812 559.0
+404.86487 690.6
+404.95511 2136.0
+405.55127 7951.7
+405.88544 7642.8
+406.21817 2048.3
+407.46677 841.6
+408.18869 3625.8
+408.52298 1626.0
+408.85904 788.7
+409.24310 5647.6
+409.53085 1662.2
+409.86688 873.7
+410.70111 4390.6
+411.18878 1582.1
+411.69086 648.8
+411.71790 1783.8
+427.56378 1020.5
+433.23526 899.3
+434.23752 1735.6
+436.21878 582.6
+439.23883 6033.0
+439.57346 4536.2
+439.90726 2100.6
+442.22296 2587.0
+442.55420 2647.9
+445.24231 20520.2
+445.57660 11822.7
+445.91095 5141.6
+446.24533 1936.6
+448.22900 4114.2
+448.55289 1196.6
+448.89026 853.1
+449.23117 1126.6
+450.23877 4281.4
+450.56970 1912.1
+450.74670 966.3
+450.90543 1610.9
+454.23679 1655.3
+454.57431 7961.1
+454.73987 1279.5
+454.90863 5858.7
+455.24268 3216.1
+456.24106 20530.1
+456.57513 16056.2
+456.90884 6699.5
+457.24408 3126.7
+459.12082 632.5
+460.24603 4233.7
+460.74942 1609.4
+462.24438 69059.9
+462.57861 62273.6
+462.91290 26724.3
+463.24469 7609.1
+463.58185 1608.0
+463.74323 2637.1
+466.24020 13646.6
+467.24377 2586.3
+467.95197 614.1
+468.24939 1773.6
+468.57889 1745.2
+468.91171 2572.0
+469.24643 1162.9
+471.79340 901.5
+477.23895 3397.9
+477.58051 2815.0
+477.74033 1771.7
+477.91418 1755.8
+478.24695 1448.1
+479.68326 613.6
+480.87558 611.1
+482.68085 709.3
+483.22623 1242.9
+483.58447 10641.1
+483.91803 8047.7
+484.25284 3446.7
+491.00497 684.6
+492.23163 11251.8
+492.73297 6550.3
+493.23312 1432.2
+493.93607 7307.0
+494.26965 6373.2
+494.60376 1749.1
+496.90775 4434.7
+497.24323 3787.7
+497.57791 760.8
+499.93860 26582.4
+500.27310 21638.4
+500.60730 9969.3
+500.94131 3419.4
+501.23630 15218.7
+501.27499 1604.1
+501.73874 7623.9
+502.24060 2167.5
+502.74457 569.2
+502.91098 24907.5
+503.24521 24372.3
+503.57932 7758.6
+503.91437 2172.7
+507.26190 3633.3
+507.30698 6476.1
+507.76358 2363.6
+507.80820 3917.0
+509.24887 983.4
+511.75476 644.1
+514.91766 852.4
+515.25269 712.4
+517.28906 1168.6
+519.78296 2575.3
+520.75623 2078.1
+522.21942 1946.2
+524.27026 9081.8
+525.25128 3785.2
+525.75385 985.4
+530.24414 899.7
+532.49017 1707.9
+533.78082 3420.5
+534.28119 2215.8
+534.77875 1281.9
+540.73975 7344.2
+541.24133 4394.5
+541.74506 1526.6
+543.30157 4448.9
+543.80530 2519.8
+544.30188 1500.0
+547.32477 887.8
+549.17780 655.1
+549.74469 40523.3
+550.24652 23700.6
+550.74744 7813.7
+551.24854 2334.9
+558.75000 64480.7
+559.25122 38810.8
+559.75232 12215.7
+560.25287 2948.4
+563.77692 693.6
+571.78351 8875.4
+572.28552 5618.9
+572.78918 1959.9
+577.27106 2539.7
+585.89502 663.5
+587.32129 2224.0
+587.82397 2452.9
+588.31805 862.5
+589.26715 670.0
+590.32007 1238.4
+595.28223 1926.7
+596.28131 821.0
+597.28052 1777.1
+597.78448 934.5
+598.81689 1901.0
+599.31647 1150.2
+599.81958 747.2
+606.28583 10058.2
+606.78821 6269.5
+607.29083 1857.8
+607.82263 114433.1
+608.32391 87254.7
+608.60089 785.4
+608.82550 34666.9
+609.32739 8123.4
+609.82825 1228.6
+615.29205 16793.7
+615.79340 10904.3
+616.29413 3506.2
+616.79333 755.2
+651.26019 869.7
+651.83783 788.2
+662.82813 1455.2
+663.32953 728.5
+671.83313 6338.3
+672.33527 2885.2
+672.85095 1310.5
+676.63391 1250.2
+681.35663 20891.8
+681.85852 17069.9
+682.35980 7912.9
+682.85980 1451.4
+687.33374 878.2
+692.29950 1330.1
+693.30103 1127.4
+710.30865 5860.9
+711.31293 1478.5
+719.59924 596.7
+739.55121 626.3
+747.04578 900.8
+795.62469 1276.0
+795.87146 640.6
+797.24042 629.8
+842.47778 937.2
+855.10449 589.7
+930.44678 1209.6
+936.51324 551.9
+1059.49719 2397.8
+1060.50000 1878.7
+1105.04578 639.2
+1188.32495 990.8
+1198.09399 3108.4
+1403.06995 790.9
+1525.49072 925.3
+S	1302	1302	420.9802721
+Z	4	1679.88979
+112.44144 571.4
+117.79762 566.9
+121.79395 849.5
+121.79853 2124.6
+122.83874 582.9
+137.80910 689.7
+138.72316 619.5
+141.16508 652.4
+148.18608 592.2
+159.84573 527.4
+165.78046 935.2
+167.52277 550.4
+172.11525 701.5
+173.25397 500.5
+175.11877 754.8
+188.19426 521.7
+188.27080 2218.1
+188.29765 2275.7
+188.43062 533.3
+188.59293 707.3
+194.59439 543.6
+199.21071 838.1
+199.26512 1135.7
+199.27434 703.6
+199.28722 2585.1
+199.29822 663.4
+199.30795 966.7
+199.32742 810.5
+199.38411 1154.3
+208.30844 678.7
+217.13640 3574.5
+223.63962 1811.6
+226.08109 908.5
+229.57893 583.4
+233.59950 548.4
+234.51367 690.6
+250.15227 3133.8
+250.65318 729.6
+256.11914 825.6
+256.61911 694.1
+271.62445 716.6
+272.35776 515.0
+288.20255 2234.3
+298.83258 597.7
+300.19476 718.3
+300.24231 548.1
+305.66666 877.0
+311.07251 593.1
+311.18930 715.1
+312.57968 596.1
+319.17154 1897.4
+326.65564 601.4
+331.84091 6183.0
+332.17529 3127.8
+343.70239 692.2
+345.22354 17240.3
+346.17249 973.3
+346.22696 2137.6
+347.17197 1277.9
+350.15280 590.6
+351.20313 880.8
+356.17688 2943.5
+356.67905 1730.3
+361.17279 736.6
+366.70456 15104.2
+367.20642 14182.6
+367.70755 4166.4
+368.20776 1012.1
+370.17490 9248.8
+370.67615 3486.4
+371.21582 1493.7
+375.70969 17592.2
+376.18323 565.0
+376.21149 17088.8
+376.71289 3179.7
+377.21393 583.1
+380.22141 1251.4
+382.18933 1039.7
+391.54004 1582.9
+391.69537 1661.2
+392.16595 723.2
+392.22253 625.7
+394.67142 770.5
+396.68954 843.5
+397.21448 1235.7
+397.54816 1030.7
+397.88431 699.0
+401.23126 1283.9
+401.53638 3991.5
+401.87125 1932.0
+402.20660 1253.9
+405.44052 992.7
+405.69308 6862.8
+406.19473 3068.0
+407.21268 8624.1
+407.54648 5247.5
+407.86386 5715.6
+408.19479 2869.1
+408.52844 1629.5
+409.70111 951.4
+416.84119 603.4
+427.56229 987.8
+433.22595 1023.4
+435.26962 1910.6
+438.18222 602.8
+442.21915 1352.6
+443.17661 962.6
+443.66492 890.1
+444.17130 1261.2
+446.27103 11318.8
+447.21158 4401.9
+447.27383 1782.0
+447.71436 1641.9
+450.23926 1564.8
+452.18298 6317.8
+452.68542 7305.5
+453.18704 1620.9
+456.21756 5394.4
+456.25720 1174.5
+456.71860 1574.0
+460.69711 15978.6
+461.19830 16704.2
+461.70016 4131.9
+462.20059 968.7
+462.24539 2139.7
+469.55225 634.5
+475.72345 1275.6
+482.91861 5541.0
+483.25198 2873.6
+483.58734 2366.8
+483.91901 663.0
+490.24423 2055.6
+490.74643 2075.1
+491.24539 968.2
+497.21591 3372.0
+497.25751 18461.4
+497.75830 9468.9
+498.21979 832.1
+498.26013 2370.9
+499.29684 6630.0
+499.93939 721.6
+500.28574 1469.0
+503.24796 642.0
+506.26013 1088.0
+506.76276 848.3
+507.26224 4788.8
+507.76358 1937.2
+509.25879 1519.5
+509.75604 681.1
+511.22873 2217.8
+517.30774 10698.5
+518.30847 1949.6
+520.61359 1826.6
+520.94379 749.6
+522.29578 1798.4
+532.46558 1810.3
+549.74304 747.5
+553.79926 7533.9
+554.30005 2497.7
+554.80182 1242.0
+562.80487 2466.0
+571.77765 1359.3
+572.27850 2847.8
+573.77405 640.8
+580.79504 550.6
+607.82251 2240.1
+608.24878 2232.6
+610.29968 2058.9
+620.29608 719.8
+628.33905 2746.3
+629.78461 679.5
+639.02917 556.3
+652.27692 643.4
+668.24585 634.8
+674.29626 681.7
+676.64313 1154.6
+679.34027 1264.6
+710.31598 638.9
+738.84753 665.9
+739.34216 5909.4
+740.34613 2401.0
+774.87189 659.0
+792.36609 696.8
+795.62708 961.8
+796.65961 706.0
+810.37964 2112.3
+811.38489 1256.3
+862.86115 642.3
+945.16302 698.7
+1019.72760 860.7
+1080.08386 585.3
+1198.04517 3511.4
+1490.51135 644.4
+1492.71643 763.8
+1525.47498 732.4
+1635.33704 617.9
+S	1303	1303	425.9848246
+Z	4	1699.908
+108.39356 590.4
+121.79727 2097.0
+128.06630 544.6
+130.85132 563.4
+151.73924 556.4
+156.14867 1376.7
+170.32002 572.1
+171.61511 593.8
+182.78307 802.5
+198.90500 678.0
+199.18962 1003.7
+199.20605 666.2
+199.21960 515.6
+199.26796 623.8
+199.28581 3407.5
+199.30302 858.8
+199.32013 738.3
+199.36087 562.2
+199.38309 1366.1
+199.39072 633.9
+200.57347 581.0
+200.71811 582.2
+207.50063 588.0
+214.51495 609.3
+217.03398 618.1
+220.01573 639.5
+227.06674 578.7
+232.13986 8330.7
+233.14302 826.6
+233.62384 1236.0
+236.22664 565.9
+268.16428 1705.2
+280.18170 951.3
+296.15942 2723.3
+304.44717 616.9
+310.33878 569.5
+319.17169 40024.4
+320.17554 3864.8
+342.20169 842.5
+350.24457 569.1
+365.07843 594.3
+367.84085 592.9
+370.70343 5574.3
+370.95416 4370.7
+371.20377 1140.0
+374.06870 551.8
+375.20633 10581.8
+375.45654 10089.1
+375.70728 3779.7
+375.95691 683.0
+380.20425 3046.4
+380.53796 2377.1
+381.24823 4399.6
+381.35660 670.3
+381.52448 954.2
+381.85892 982.9
+382.24994 762.9
+384.67865 614.8
+386.20734 9056.3
+386.51523 653.4
+386.54156 6088.0
+386.87573 2626.3
+391.09027 535.7
+396.55292 1180.1
+397.94922 641.0
+398.85779 665.6
+403.70419 1589.7
+404.95358 1043.8
+405.55087 5861.0
+405.88541 4140.7
+406.21887 1004.0
+408.18622 1598.5
+408.52106 1765.4
+409.24384 7909.6
+410.24728 1261.6
+410.69867 1702.9
+411.71768 9175.0
+411.96838 9156.0
+412.21899 4949.6
+412.47131 1478.2
+413.86292 948.3
+439.23727 2970.3
+439.57257 2993.6
+439.89963 626.7
+442.22110 1076.8
+445.24216 12499.7
+445.57645 9479.7
+445.91122 2720.5
+446.24258 1003.4
+448.22842 2300.5
+450.24051 3430.7
+454.57352 5254.8
+454.90823 4586.2
+455.23987 1394.7
+456.23996 9233.7
+456.57498 6908.1
+456.90970 4111.8
+457.23987 920.6
+460.24655 1257.5
+462.24384 27009.2
+462.57831 18602.4
+462.91269 9910.7
+463.24332 2878.6
+463.74545 948.5
+466.23975 5869.6
+467.24417 1143.6
+468.24759 769.4
+468.57727 1623.0
+468.90991 2121.5
+469.89032 640.2
+474.25586 1048.0
+475.81778 548.9
+476.59918 659.6
+477.23834 1776.2
+477.58075 2703.4
+477.74170 694.1
+477.91467 1058.1
+483.58420 5323.5
+483.91846 5682.4
+484.25363 1805.6
+488.59409 1273.7
+492.23056 5653.1
+492.73187 3218.3
+493.23331 1012.2
+493.93497 2965.1
+494.26923 2385.1
+494.59500 999.1
+496.90646 1016.0
+497.23889 699.4
+498.74304 644.4
+499.93893 6758.5
+500.27292 6674.4
+500.60742 2620.2
+501.23608 3630.0
+501.73798 1499.7
+502.23642 808.9
+502.91040 8822.5
+503.24561 8644.5
+503.57886 4523.1
+503.90967 1085.3
+505.14532 580.2
+507.26184 4377.7
+507.30624 4437.2
+507.76334 2511.9
+507.80783 2368.0
+508.91452 1388.6
+524.26941 3991.0
+525.25177 1954.5
+532.45319 940.0
+532.48517 1625.7
+533.78094 1064.8
+534.28076 917.2
+540.74176 1506.5
+541.23822 727.5
+543.29889 1399.9
+543.80408 1020.9
+549.74402 22657.1
+550.24628 11247.8
+550.74677 3031.5
+554.97980 617.8
+558.74945 23199.0
+559.25098 15282.0
+559.75244 3598.5
+571.78302 11853.8
+572.28448 6954.0
+572.78650 1043.2
+577.27386 773.5
+587.31689 1697.4
+595.27972 837.3
+606.28632 4957.6
+606.78687 3625.0
+607.28894 1076.1
+607.82208 52665.2
+608.32355 35783.7
+608.82550 14642.1
+609.32648 3075.8
+611.56689 734.2
+615.29346 1022.5
+615.78998 1085.3
+620.78271 1260.2
+630.41089 816.9
+633.23779 545.3
+646.16840 736.7
+672.34808 796.8
+681.35608 8286.4
+681.85834 6471.3
+682.35950 4222.6
+687.33325 705.6
+710.30865 1061.6
+711.31183 722.5
+731.13013 955.6
+749.25916 543.5
+784.33209 729.7
+818.09521 694.6
+858.07220 608.3
+900.63965 678.5
+922.05988 724.7
+1046.44873 544.4
+1059.49805 831.5
+1086.36206 641.7
+1118.41101 637.2
+1126.36719 655.9
+1198.07361 3299.4
+1374.53625 557.4
+1412.44800 543.6
+1525.40698 739.8
+S	1305	1305	538.2537721
+Z	4	2148.98379
+153.57382 473.3
+166.81082 501.4
+188.07970 524.8
+188.14790 533.6
+188.25169 950.3
+188.26111 1567.9
+188.28014 2144.7
+188.29601 1962.0
+188.32428 1451.3
+190.07285 589.8
+195.00841 623.9
+198.90581 1232.7
+199.17065 770.0
+199.20227 857.3
+199.24411 1009.7
+199.27104 1764.5
+199.28033 1590.2
+199.30258 1667.5
+199.39809 568.8
+214.52312 620.3
+252.22163 619.7
+255.29965 945.5
+271.65039 609.7
+271.80771 847.5
+277.09634 654.6
+277.85873 521.6
+285.14432 562.9
+300.79199 700.6
+308.52536 664.0
+323.58017 538.8
+330.08673 675.5
+338.63834 1660.4
+339.14151 771.7
+342.28714 594.6
+357.40009 623.6
+389.70804 724.5
+401.61581 585.2
+438.20020 583.3
+453.34259 583.5
+463.43167 644.3
+468.69690 1495.2
+469.20026 828.5
+475.88544 702.3
+482.67221 837.6
+491.90845 3402.6
+492.24060 2160.0
+508.21527 600.5
+521.99622 983.1
+522.50079 865.7
+524.49518 616.3
+532.49091 2438.7
+549.17261 948.3
+564.38843 616.5
+576.70404 541.2
+597.62811 693.8
+607.30078 4421.1
+607.80249 2180.7
+630.42908 862.0
+641.04828 558.9
+676.26685 2166.1
+676.62616 1157.6
+682.56738 577.7
+737.35907 6273.7
+737.86090 6313.1
+738.36151 1549.6
+786.55200 675.6
+795.61731 886.9
+835.77765 666.6
+858.07397 718.4
+963.71143 545.5
+977.67230 677.8
+1021.17950 616.8
+1054.68835 556.6
+1057.24109 942.8
+1079.25647 808.6
+1092.16248 666.0
+1102.76294 603.5
+1142.08154 545.4
+1187.66821 717.6
+1198.09290 3655.7
+1278.75452 568.1
+1374.40210 658.0
+1376.09778 725.2
+1525.46204 976.6
+1663.79980 601.3
+1701.11218 601.1
+1768.34058 619.1
+1777.30249 778.1
+1878.55469 631.6
+1878.90698 1463.8
+1879.15698 834.9
+1879.50928 19967.4
+1880.11108 1712.7
+1906.67700 1151.9
+1906.96008 6858.2
+1918.65588 811.7
+1930.66248 1199.7
+S	1306	1306	681.6007546
+Z	4	2722.37172
+188.19164 713.2
+188.20192 598.8
+188.23997 629.4
+188.26021 582.8
+188.27110 857.2
+188.28369 978.3
+188.30261 553.6
+188.31152 521.2
+188.32100 652.5
+188.34743 502.7
+188.35355 560.2
+188.39084 667.3
+198.90553 1040.5
+199.19794 891.5
+199.26047 1189.1
+199.28677 2392.4
+199.29794 1954.0
+199.39622 986.2
+209.26685 506.3
+216.72733 572.1
+241.68573 632.5
+271.82596 602.8
+297.98352 659.7
+300.10632 710.1
+313.92456 624.3
+314.90219 617.8
+315.29919 723.0
+323.31677 690.3
+330.83109 632.2
+367.09726 542.5
+398.63898 695.0
+404.45685 629.0
+431.85925 609.4
+474.76257 1120.0
+483.78000 626.5
+509.29669 581.1
+532.44397 2015.6
+581.98553 673.2
+606.44305 545.3
+637.41949 626.2
+655.06909 571.2
+658.31934 714.6
+664.98419 1104.2
+670.34875 643.3
+714.41321 3331.1
+715.41595 1230.6
+777.25470 837.2
+795.61835 977.5
+796.41406 1223.5
+797.43085 894.3
+835.52008 642.9
+843.46045 1094.9
+888.46173 1922.4
+888.96295 973.3
+1087.51733 1017.6
+1119.87085 723.1
+1172.50525 638.5
+1197.99353 3173.7
+1227.53979 767.0
+1370.97107 597.5
+1386.63306 658.6
+1525.54565 846.6
+1628.71802 726.6
+1876.06531 635.7
+1878.69324 1327.1
+1879.16284 5322.4
+1879.50818 18037.0
+1879.82214 4556.0
+1880.18921 1772.0
+1880.58203 1263.1
+1907.06860 7677.4
+1918.68262 806.8
+1954.86328 634.7
+1956.23926 664.3
+S	1307	1307	1879.96140793
+Z	3	5636.609
+Z	2	3758.075
+507.39166 680.2
+532.48444 1998.2
+542.28064 630.4
+549.18597 752.3
+621.01697 601.9
+676.67590 752.0
+776.73145 621.6
+795.61310 812.4
+879.72864 652.1
+902.47211 584.5
+1005.13495 649.8
+1133.58569 635.5
+1187.69958 690.9
+1198.08337 3219.7
+1205.57007 681.4
+1476.37231 639.6
+1525.50146 795.6
+1740.12256 655.0
+1759.60828 646.3
+1777.18445 738.9
+1874.18005 630.3
+1878.59680 968.9
+1878.97461 1501.6
+1879.54370 18916.7
+1880.15942 1546.2
+1907.06226 6860.4
+1918.57800 782.6
+1930.73071 946.3
+1999.59216 678.5
+S	1309	1309	794.434407933
+Z	3	2380.028
+Z	2	1587.021
+212.11884 834.2
+214.52957 622.7
+221.73959 622.0
+229.59056 695.2
+231.60880 559.2
+233.16510 5755.0
+234.16795 794.7
+235.11855 1361.5
+238.11713 511.5
+249.09818 6212.5
+250.10167 802.6
+259.35574 615.8
+261.16000 2362.9
+274.12985 3519.6
+274.36328 611.6
+280.19421 730.1
+282.87674 505.2
+285.13422 2689.0
+288.20331 2912.9
+295.14020 1617.2
+295.47498 625.2
+297.10812 1491.6
+305.12418 732.4
+306.10867 743.7
+309.88559 702.5
+313.15073 718.1
+315.11810 3346.8
+323.13483 4564.2
+324.12091 675.3
+324.13818 651.0
+325.20221 6157.0
+326.20654 1338.7
+332.13687 921.3
+333.12848 1541.3
+341.14560 7498.3
+342.14853 843.5
+350.15665 819.7
+353.17154 552.9
+353.19647 3371.3
+355.16653 755.3
+360.12970 1852.2
+372.19153 2009.7
+378.14041 2774.1
+380.20844 3766.3
+381.21219 1094.3
+387.27148 13008.2
+388.27438 1314.8
+390.20218 5790.1
+393.65186 720.3
+395.93118 651.6
+396.16635 2961.0
+397.17023 957.7
+397.64105 622.1
+406.17206 1359.4
+424.18167 2841.0
+427.56616 787.2
+428.20245 2136.8
+428.72934 10862.5
+429.17612 650.8
+429.23129 4690.6
+429.73230 1254.7
+434.16785 2143.4
+445.22934 1114.7
+446.21283 6433.0
+447.21432 1981.5
+452.17728 12040.3
+453.18015 2315.1
+462.18674 1456.5
+463.23950 3900.5
+465.74915 1457.5
+470.18759 15118.5
+471.19202 2830.7
+474.20773 1686.3
+477.67563 682.6
+481.25980 1219.4
+482.23996 10497.6
+483.24258 2372.4
+488.21225 2421.9
+488.25336 18609.9
+488.75507 9530.9
+489.25708 2717.4
+497.25867 11714.4
+497.75867 4607.3
+498.17883 856.0
+498.26053 1194.4
+498.30286 2203.7
+509.25119 3726.5
+510.25439 1056.8
+516.31323 23672.9
+517.31616 6480.8
+518.31714 961.5
+525.21338 992.6
+525.27277 2222.1
+525.77283 1605.9
+527.25977 2784.6
+532.45215 2018.8
+532.53320 572.5
+534.27637 1074.9
+539.25299 773.5
+547.27332 1096.2
+548.25757 750.7
+551.24469 895.9
+552.77454 24019.5
+553.27594 11748.8
+553.77759 3627.0
+554.27167 1184.1
+555.27838 1618.0
+557.25659 1166.6
+565.26239 1669.1
+569.25476 2252.8
+571.24799 1932.3
+575.27039 7668.6
+576.27631 1408.6
+580.78503 1008.1
+583.26630 2345.0
+584.26825 866.5
+589.25708 767.4
+589.79285 23610.5
+590.29388 11511.6
+590.34918 3044.2
+590.79547 2678.9
+591.30060 784.3
+593.28131 8543.8
+594.28589 2771.0
+598.79822 7229.4
+599.24487 4613.7
+599.30029 3485.8
+600.24854 1280.1
+601.29681 936.1
+603.79053 775.1
+608.29041 4711.8
+608.78992 1757.3
+610.29590 3343.1
+611.26593 10277.3
+612.27142 2463.8
+617.26013 5621.5
+617.79883 1035.9
+618.26099 2204.6
+627.34222 775.5
+628.30829 5973.2
+638.29187 7763.3
+639.29456 2448.0
+645.35297 4006.9
+645.80444 2449.5
+646.27222 592.3
+646.31061 1043.6
+646.36102 1676.2
+654.31390 38340.7
+654.81549 19912.6
+655.31702 6836.6
+655.81927 1432.6
+656.30280 10401.4
+657.29669 1773.9
+663.31927 21839.7
+663.82062 10864.6
+664.32385 3161.3
+667.30499 1854.0
+668.30731 1201.6
+682.34058 2769.9
+683.34705 1206.6
+684.33435 6357.2
+685.31708 15010.9
+686.31909 5650.9
+687.32361 1186.1
+694.31866 933.6
+695.30042 1666.5
+696.31268 952.3
+700.35345 1509.3
+701.37463 705.8
+702.34351 71754.0
+703.34686 27599.4
+704.34845 4527.9
+705.34351 1039.4
+705.38580 790.3
+708.31885 1147.5
+712.32947 18726.5
+713.33350 5977.0
+714.33801 753.6
+719.86182 14098.1
+720.36395 8418.1
+720.86823 2327.0
+724.85406 2064.3
+725.35492 2042.3
+730.33966 133102.5
+731.34344 48538.9
+732.34674 11134.2
+733.34894 1654.2
+747.37286 8718.8
+747.87262 7842.9
+748.37537 3219.3
+753.36340 780.3
+759.39886 58067.1
+760.40155 22098.4
+761.40460 5451.0
+762.40546 1657.1
+764.06055 751.1
+764.47375 2722.4
+765.48450 1049.7
+770.39276 1220.6
+796.41754 1096.2
+819.39996 945.0
+827.39343 3424.6
+828.39771 1191.7
+831.48712 604.9
+833.43353 4619.4
+834.44019 1822.4
+838.44208 12462.1
+839.43634 5894.1
+840.42950 3007.0
+853.40143 947.6
+853.72778 827.7
+853.82440 3759.0
+854.06622 655.4
+854.27179 1653.8
+854.70660 1180.3
+854.82220 1815.6
+855.14447 2632.0
+855.98199 1044.2
+856.03278 867.8
+856.13525 914.7
+856.18091 797.7
+856.45129 618584.8
+857.30804 952.7
+857.45392 274085.3
+857.76599 3281.7
+858.45654 72375.6
+858.63489 1717.1
+858.76563 1438.4
+859.00122 1018.7
+859.09155 4607.2
+859.19592 939.1
+859.25244 578.4
+859.45728 15068.3
+859.64270 686.7
+860.09979 2054.9
+860.21313 1062.6
+860.45862 1631.1
+866.40057 3725.5
+867.40051 1726.5
+884.41400 4620.1
+885.41235 2433.6
+912.46973 1108.0
+928.52863 729.1
+930.48804 54069.5
+931.49072 24451.3
+932.49408 7142.7
+933.50305 1286.8
+941.43951 1897.0
+942.43695 1392.8
+975.49902 11358.2
+976.50385 5847.9
+977.50385 1353.8
+980.57532 718.8
+990.21100 962.9
+993.50958 92651.4
+994.51294 47864.6
+995.51495 12544.7
+996.51031 2567.2
+997.50555 800.7
+1020.41132 859.0
+1067.54602 4727.0
+1068.55115 2267.3
+1070.47693 11280.9
+1071.48108 4693.2
+1072.48926 1084.2
+1104.54309 3563.6
+1105.54749 2355.3
+1122.56299 787.8
+1151.51733 912.2
+1178.58020 4312.5
+1179.57959 2310.5
+1182.51123 675.1
+1196.58936 22327.3
+1197.59277 12831.9
+1198.01367 3079.6
+1198.59631 3950.1
+1199.52063 9581.5
+1200.52307 4941.9
+1201.53088 1089.0
+1216.56311 732.2
+1298.58789 7665.3
+1299.58984 4671.5
+1300.59253 1204.9
+1307.62158 2849.6
+1308.62524 2253.9
+1325.63196 16288.6
+1326.63501 11016.5
+1327.63586 3334.5
+1328.63538 854.9
+1383.68970 976.9
+1394.66577 823.5
+1411.67419 13519.5
+1412.67407 9713.1
+1413.67712 3298.5
+1414.66455 843.9
+1429.65820 816.7
+1430.84290 718.9
+1464.25098 620.9
+1525.50793 698.4
+1869.98669 871.2
+1879.58838 18454.8
+1880.01587 3164.2
+1880.87720 730.4
+1881.13013 769.4
+1881.71777 810.5
+1907.07654 7587.9
+S	1310	1310	794.935241267
+Z	2	1588.023
+Z	3	2381.53
+211.17250 645.3
+211.26785 566.7
+215.17525 666.6
+217.32095 751.3
+233.16486 5318.8
+234.41020 729.2
+235.11809 1587.7
+249.09807 4379.6
+261.15997 2522.8
+267.10889 1041.2
+271.17593 876.8
+272.44296 585.2
+274.12958 2713.9
+279.78702 530.5
+283.14005 526.4
+283.82538 657.8
+285.13431 2950.0
+288.20248 1816.8
+295.14026 1380.8
+297.10861 1054.6
+305.12616 1136.8
+306.10886 1073.7
+315.11832 3485.3
+323.13477 5799.9
+324.11768 770.3
+325.20221 4984.9
+329.20218 616.8
+332.32083 584.7
+333.12955 2293.7
+341.14557 8492.5
+342.24710 763.8
+353.16599 710.0
+353.19641 3616.7
+360.12933 1203.2
+372.19125 1746.9
+378.14041 1715.7
+380.20831 4067.0
+387.27090 12088.3
+388.27344 1319.1
+390.20215 6986.1
+391.20648 1473.8
+396.16663 3261.6
+406.17050 926.8
+409.41284 614.6
+424.18155 2559.8
+428.20444 1545.2
+428.72937 10871.5
+429.23022 4890.4
+429.73029 1166.9
+434.16739 1679.1
+434.19324 788.8
+446.21243 5542.6
+447.21777 819.7
+451.37448 578.1
+452.17728 11002.2
+453.17947 2279.1
+462.18555 1268.0
+463.23932 4015.4
+470.18701 13954.7
+471.19083 2489.3
+474.20581 1437.6
+482.23923 9298.9
+483.24255 2186.0
+486.29901 670.3
+488.21280 2439.7
+488.25314 18140.7
+488.75497 9095.6
+489.25629 2436.9
+497.25812 11540.6
+497.75992 4547.0
+498.18118 1153.0
+498.26224 1482.6
+498.30328 1951.9
+498.77240 612.5
+509.25040 3128.9
+516.31317 21648.3
+517.31653 5918.3
+518.31720 855.7
+525.27197 2010.8
+527.26135 2378.2
+528.26410 927.1
+530.24615 760.1
+532.49030 1738.8
+534.27441 772.6
+547.27893 1519.3
+552.77429 23945.1
+553.27594 12360.8
+553.77594 2716.3
+555.25079 728.3
+555.28058 1110.9
+560.55536 680.7
+565.26093 813.1
+565.29108 843.4
+569.25629 1092.5
+571.25183 1003.6
+575.26978 7224.5
+576.27368 1784.1
+580.78833 1266.0
+583.26874 3088.7
+584.26892 923.0
+589.24249 1327.5
+589.79260 26618.2
+590.29401 13282.0
+590.79504 4002.6
+593.28149 9015.1
+594.28455 2259.6
+598.79834 6866.3
+599.24500 4139.1
+599.29962 2862.9
+601.29608 1001.0
+608.28949 2885.4
+608.79340 2193.7
+609.29327 1022.5
+610.29474 2658.6
+611.26624 8130.5
+612.26727 2860.3
+617.25677 5918.6
+617.79968 805.3
+618.26099 1164.0
+627.34912 910.0
+628.30676 3547.3
+630.35590 1320.6
+638.29156 7346.9
+639.29370 2745.3
+645.25378 1112.8
+645.35565 4401.8
+645.80847 1715.2
+646.31439 1714.9
+646.35327 1592.9
+654.31366 36235.8
+654.81500 20049.7
+655.31671 9139.4
+655.81421 1649.0
+656.30176 7253.4
+657.30170 1253.4
+663.31866 17607.0
+663.82019 10261.0
+664.32233 3450.4
+667.30792 1576.3
+668.31079 1102.9
+676.61145 1194.3
+682.33936 2304.6
+683.33936 1023.4
+684.33398 7944.5
+685.31641 12188.7
+686.31909 4818.4
+687.32056 1046.3
+694.31781 1480.5
+700.34711 981.3
+702.34326 75290.4
+703.34637 24913.0
+704.34979 4774.5
+705.35248 1042.6
+708.32324 847.5
+712.32928 17064.3
+713.33246 6928.1
+714.33972 1674.3
+719.86182 12328.2
+720.36163 6410.1
+720.86353 3191.9
+722.96442 710.3
+724.85199 2873.4
+725.85413 955.8
+729.30695 646.7
+730.33942 139479.4
+731.34235 47681.6
+732.34546 10322.2
+733.34686 1911.4
+747.37164 12301.3
+747.87305 7082.2
+748.37177 2691.4
+756.37360 907.2
+759.39832 55728.7
+760.40106 19951.1
+761.40283 4637.1
+764.48029 2295.9
+765.47491 1461.3
+766.37488 651.0
+770.38940 1297.4
+772.17712 603.4
+775.38696 1762.9
+775.88074 1718.8
+795.62659 1000.6
+821.41473 866.6
+827.39178 3913.3
+828.39435 1061.7
+833.43634 1928.0
+836.64948 706.4
+838.44183 12650.6
+839.43823 5805.5
+840.43103 2692.9
+841.41650 826.9
+853.82043 2829.9
+854.28113 908.1
+854.81201 952.3
+855.14270 3033.3
+856.01215 1233.3
+856.30432 989.3
+856.45099 588116.5
+857.45355 252598.2
+857.76556 3697.6
+857.99957 918.3
+858.45636 68478.8
+858.62933 1539.6
+858.76727 1632.3
+858.88715 699.6
+859.09869 3201.9
+859.45874 13601.8
+859.62738 850.8
+860.09656 1087.2
+860.45605 1999.4
+866.40112 3074.3
+867.41254 1297.5
+884.41492 4739.5
+885.41815 2143.4
+912.49304 694.5
+930.48792 36229.1
+931.49042 17851.2
+932.49451 4562.4
+933.48645 1350.3
+941.43652 2365.0
+942.43994 900.9
+975.49951 9983.5
+976.50256 6112.9
+977.50415 1568.8
+993.50916 92928.2
+994.51239 46896.0
+995.51428 11872.8
+996.52002 2694.3
+1019.77112 695.4
+1038.44556 762.4
+1042.47400 801.1
+1057.21216 868.6
+1067.54504 3374.7
+1068.54688 1813.3
+1070.47839 10968.0
+1071.47961 5593.6
+1072.49060 994.2
+1104.53809 3440.5
+1105.54675 1522.4
+1151.52051 903.1
+1178.57861 4156.2
+1179.58020 2956.8
+1180.56567 910.7
+1196.58875 21499.4
+1197.59106 11840.7
+1198.09082 3019.3
+1198.59827 3323.5
+1199.51746 9944.1
+1200.52002 5440.7
+1201.53857 1375.3
+1215.57764 847.8
+1298.58716 8272.1
+1299.59204 4116.0
+1300.58655 2032.2
+1304.67859 670.5
+1307.62708 2549.4
+1308.61780 1403.2
+1309.62000 1088.9
+1325.63074 14779.7
+1326.63562 9628.5
+1327.63513 3220.2
+1383.67639 1233.9
+1393.67688 922.5
+1394.67834 780.3
+1411.67200 12438.8
+1412.67480 8800.7
+1413.67419 3618.2
+1414.68591 1037.3
+1491.41870 679.2
+1514.52014 662.4
+1656.72559 624.6
+1826.58984 786.6
+1875.30542 618.1
+1878.92395 1184.4
+1879.46692 19443.1
+1880.02722 1448.4
+1881.51514 589.9
+1881.79541 641.2
+1907.02588 7325.9
+1918.68677 696.2
+1930.44165 1281.6
+1976.16638 715.7
+S	1311	1311	795.547241267
+Z	3	2383.366
+Z	2	1589.247
+214.50423 737.1
+219.83430 650.3
+233.16447 5303.8
+235.11870 1251.8
+249.09787 3946.6
+253.51776 606.9
+254.04352 590.3
+261.15903 2112.3
+265.49680 651.7
+274.13000 1844.1
+285.13373 1779.3
+288.20331 1413.1
+295.13989 1233.9
+297.10843 957.3
+315.11740 2609.5
+323.13449 3792.3
+324.12125 965.8
+325.20157 3280.7
+333.12973 1549.0
+341.14520 5693.8
+353.19708 1921.8
+360.12936 1581.3
+367.36346 668.2
+372.19116 1534.2
+378.14212 1058.8
+380.20782 2650.3
+387.27069 9262.0
+388.27368 1357.2
+390.20200 5551.2
+391.20721 1274.6
+396.16592 1673.9
+410.48090 600.5
+416.18613 633.9
+424.18250 1359.2
+428.20203 1138.0
+428.72891 7311.7
+429.23029 2886.1
+429.68713 616.9
+429.73444 875.5
+434.16785 1383.3
+446.21188 3829.3
+447.21335 1050.2
+447.98700 701.6
+452.17706 7005.8
+453.17908 1827.5
+462.18582 947.2
+463.24081 3218.2
+464.24246 1235.1
+470.18686 12293.7
+471.18878 1579.7
+474.20889 1192.9
+481.25562 886.0
+482.23904 6198.4
+482.48813 574.8
+482.63214 773.8
+483.24417 1503.4
+488.21320 1879.0
+488.25323 12154.8
+488.75458 6728.3
+489.25574 1488.1
+497.25858 9333.0
+497.75940 4698.2
+498.30179 1030.2
+501.20706 668.0
+509.25021 3583.7
+510.25418 724.0
+512.70355 569.2
+516.31293 17960.4
+517.31592 4009.7
+519.24219 718.9
+524.06720 713.0
+527.25507 889.3
+532.49646 1646.5
+543.76624 708.1
+547.27527 1204.8
+548.26025 982.1
+552.77423 23647.0
+553.27557 10901.3
+553.77631 2453.5
+554.27747 748.0
+557.26392 937.5
+565.28168 981.7
+569.25311 921.5
+571.24329 915.5
+572.26526 544.7
+575.27020 5537.7
+576.27350 1820.1
+580.78821 1158.0
+583.26880 3273.6
+588.19946 763.4
+589.79242 27445.5
+590.29425 12021.6
+590.79504 3370.7
+591.29523 1165.6
+593.28125 6946.9
+594.28296 1600.8
+598.79834 7452.1
+599.24512 4062.9
+599.30011 3252.9
+599.80103 1065.9
+608.28851 3480.5
+608.79156 1544.9
+609.29327 878.1
+610.29773 1925.3
+611.26538 7711.6
+612.26819 1925.7
+617.25696 4144.9
+618.25696 1405.8
+623.80859 601.1
+627.34308 884.2
+628.30957 2067.8
+629.31842 769.1
+638.29108 6480.1
+639.29150 1822.0
+645.35516 3504.3
+645.80585 1308.3
+646.30194 937.3
+646.35889 1479.2
+654.31299 29496.6
+654.81470 19162.8
+655.31726 5865.0
+655.81537 1079.9
+656.30164 6142.2
+657.29688 735.5
+663.31848 17087.7
+663.82043 9595.5
+664.32172 3868.6
+676.64648 1193.1
+682.34009 1388.9
+684.33539 4588.5
+685.31525 10171.9
+686.31763 2833.3
+687.13782 629.8
+687.31470 908.8
+690.71887 636.3
+694.31573 1126.4
+700.34631 756.2
+702.34338 58279.9
+703.34619 21125.1
+704.34625 4766.4
+705.34399 773.8
+712.32916 14574.1
+713.33282 5807.8
+714.34210 1219.5
+719.86151 12353.5
+720.36212 6990.6
+720.86646 2198.5
+724.85242 2307.7
+725.35986 1658.4
+728.25891 802.3
+729.29144 757.5
+730.33899 119170.0
+731.34265 44599.4
+732.05847 836.2
+732.34552 8579.5
+733.34784 1462.4
+738.86041 1012.4
+746.92358 647.6
+747.37085 8608.7
+747.87347 7650.6
+748.37689 2323.1
+759.39801 41141.7
+760.40088 13163.1
+761.40308 2923.0
+764.47760 2251.6
+770.39093 963.3
+775.38470 3571.3
+775.87952 5111.4
+776.37775 2938.6
+776.87732 1002.2
+795.61383 811.4
+819.39972 930.4
+827.39270 2931.2
+828.39410 1523.6
+833.43756 876.9
+838.44037 8055.8
+839.44055 4083.6
+840.43616 1245.3
+853.82751 2176.4
+854.26819 1439.7
+854.81360 892.0
+855.13672 1551.5
+855.26434 803.0
+856.30585 694.4
+856.45062 455614.1
+856.59808 847.1
+857.30634 855.1
+857.45325 200584.9
+857.75677 2297.4
+858.45605 52966.8
+858.63196 2216.6
+859.09393 2630.3
+859.45728 8664.5
+859.64667 891.0
+860.46210 1376.5
+866.40234 3008.5
+884.41272 3804.9
+885.41473 1540.6
+930.48718 24008.6
+931.49005 11327.0
+932.49231 2582.0
+933.49371 947.9
+941.43622 1482.9
+942.43903 945.6
+975.50006 7737.5
+976.50195 3376.7
+977.49634 1119.9
+993.50897 72367.1
+994.51215 36900.4
+995.51508 10597.5
+996.51013 1558.2
+1019.75159 953.0
+1046.47668 619.5
+1067.55505 1768.5
+1068.55164 883.6
+1070.47705 8666.4
+1071.47705 3923.9
+1072.47766 1616.1
+1104.54224 3041.2
+1105.54456 1119.3
+1178.57959 3637.1
+1179.58362 2066.6
+1180.58496 908.6
+1196.58777 17511.1
+1197.59058 9861.6
+1198.11499 3608.1
+1198.59692 3012.4
+1199.51965 7495.7
+1200.51831 3777.1
+1201.52979 1463.5
+1298.58362 5022.6
+1299.59143 3260.4
+1300.60010 1820.0
+1307.62158 1647.6
+1308.60999 1726.6
+1325.63232 12317.3
+1326.63367 7059.5
+1327.63696 2676.2
+1393.68213 954.5
+1411.67053 11857.1
+1412.67603 6655.9
+1413.67908 2909.9
+1525.34570 873.3
+1601.57959 642.3
+1785.45386 720.6
+1876.26746 732.4
+1878.87708 1224.0
+1879.23572 1188.6
+1879.52051 19773.7
+1880.21985 1344.5
+1905.60144 583.2
+1907.05872 6974.3
+1930.53552 952.8
+S	1313	1313	538.2577371
+Z	4	2148.99965
+143.37636 650.2
+150.09818 566.9
+153.56566 585.9
+157.60205 735.2
+165.78236 745.9
+168.90656 571.2
+169.77092 567.0
+173.63892 592.4
+178.45662 716.8
+182.80142 583.3
+187.48637 574.1
+196.35297 642.2
+198.90996 834.2
+199.26791 1281.4
+199.28261 2202.0
+199.29848 591.0
+199.30623 793.0
+199.32632 637.6
+199.38077 592.1
+204.62404 648.8
+233.57443 652.1
+244.80890 561.4
+262.81702 558.6
+272.13409 1078.1
+275.12241 921.3
+291.18497 563.8
+292.49127 633.8
+297.42972 547.3
+297.63211 699.3
+306.63852 1124.3
+310.97662 578.0
+329.63364 1234.0
+338.63885 7060.0
+339.14087 1440.0
+343.30264 559.5
+347.49292 552.0
+360.73019 621.3
+381.35672 669.3
+388.74442 731.3
+400.19299 2010.6
+447.24347 1104.8
+447.83099 602.5
+454.07281 624.6
+454.69772 1387.5
+455.19952 839.0
+459.69064 1487.2
+468.69727 3483.1
+469.19821 1710.9
+469.69968 1381.0
+470.86115 559.2
+476.27048 2256.8
+482.76129 655.3
+489.03055 582.1
+490.19559 617.8
+491.90897 15788.3
+492.24280 11517.5
+492.57672 8861.8
+492.91058 3358.6
+493.24567 828.8
+496.24994 1381.8
+515.63116 710.9
+521.99994 5058.9
+522.24939 5072.6
+522.50085 7381.8
+522.75208 2514.6
+532.47113 2130.2
+545.13489 617.6
+545.79340 614.9
+549.15710 654.1
+560.19940 701.1
+575.96332 670.7
+607.30139 16795.9
+607.80243 12342.3
+608.30267 4148.7
+608.80200 1712.8
+608.89563 766.6
+630.40088 742.2
+674.30835 899.8
+676.26978 8653.8
+676.64856 1076.1
+677.27429 3405.2
+678.26758 668.6
+682.36841 945.7
+688.83240 1404.2
+689.33136 1213.3
+691.66705 597.2
+705.36261 1057.5
+705.86407 1403.7
+706.35394 600.3
+723.37665 1330.8
+737.35968 20819.3
+737.86102 18196.6
+738.36188 10643.9
+738.86212 3882.9
+739.35577 866.3
+787.42340 562.6
+794.31110 1074.4
+832.53662 624.8
+854.91382 597.0
+857.97864 536.2
+869.37207 613.0
+873.20673 650.7
+885.21576 601.2
+1020.97339 620.4
+1057.24219 985.6
+1075.52820 705.6
+1079.98706 732.8
+1081.09229 700.6
+1113.08032 577.3
+1198.05249 3360.7
+1629.80273 849.2
+1645.39905 735.7
+1822.32349 708.8
+1846.61597 637.6
+1878.29248 857.1
+1878.74292 1386.7
+1879.17419 2742.0
+1879.54346 20079.2
+1879.88928 2075.7
+1880.26294 776.6
+1880.88416 660.3
+1881.05664 608.9
+1884.34888 852.6
+1907.00952 7067.3
+1918.69873 855.0
+1930.59009 748.9
+1975.85107 595.3
+S	1314	1314	435.2284721
+Z	4	1736.88259
+106.95206 601.9
+109.11902 695.0
+111.38261 591.1
+112.12232 611.5
+113.15883 566.7
+113.38862 585.2
+121.80031 2246.1
+122.33763 797.8
+130.99657 524.8
+134.28719 591.6
+145.66667 680.1
+149.68510 622.2
+151.24606 660.5
+153.55853 581.1
+154.63815 625.8
+157.61885 624.8
+167.49492 606.9
+169.58643 631.1
+171.38455 540.2
+171.64333 483.2
+174.47855 558.6
+176.54199 529.6
+182.32104 554.5
+186.43790 486.5
+190.28061 549.6
+194.53033 643.5
+198.90779 917.6
+199.26935 2021.3
+199.28340 2224.1
+199.29141 723.5
+199.33853 498.3
+199.34460 573.0
+199.38008 1073.9
+200.20815 585.8
+200.61166 540.8
+210.69431 658.3
+226.88309 640.1
+230.19960 586.3
+233.18427 573.4
+233.59634 703.8
+240.15166 3479.4
+263.90570 567.0
+265.65576 908.6
+276.16949 1396.2
+289.16098 3819.9
+296.69754 654.1
+297.66495 1113.0
+303.33185 539.5
+306.18326 1467.2
+308.93420 708.1
+315.99933 561.2
+319.82828 546.1
+326.03632 547.2
+327.58322 588.0
+334.24554 795.3
+344.63184 640.5
+345.52502 982.2
+347.77029 681.2
+350.27863 860.6
+353.68231 578.9
+354.53354 700.1
+360.53677 2002.7
+360.87088 1113.6
+370.17371 1695.3
+370.67697 970.0
+374.23904 2996.6
+375.24295 919.3
+381.39850 624.3
+389.20889 586.6
+394.54437 10803.0
+394.87924 5074.9
+395.21246 1089.9
+400.19241 2325.5
+403.00394 530.9
+407.21829 844.5
+407.72134 894.3
+409.58063 666.3
+409.91537 1321.0
+411.08765 641.0
+412.55508 2143.7
+412.88919 1238.2
+416.22534 1429.4
+417.21939 17768.4
+418.22235 1905.7
+419.69763 1041.5
+420.20294 862.3
+421.97589 2168.7
+422.22525 1706.7
+422.47894 830.2
+427.58441 910.8
+438.71707 639.1
+446.88904 788.6
+463.76349 3144.0
+464.02090 561.0
+464.26230 1697.8
+472.76773 6543.8
+473.26953 3612.2
+473.76944 881.0
+476.24341 1290.6
+476.76630 812.7
+479.13052 628.2
+481.90103 2843.5
+482.23361 2892.1
+482.56848 1418.6
+484.27704 799.7
+485.26657 925.6
+486.26974 1201.3
+486.60968 887.7
+487.90372 7845.4
+488.23816 7905.7
+488.57300 2579.1
+492.27039 1654.2
+493.25507 682.6
+498.32654 538.7
+502.29697 6847.5
+502.40372 615.1
+503.30106 1019.3
+507.75458 1757.2
+508.25436 1037.6
+511.90915 752.3
+513.27466 1179.9
+530.30243 7481.1
+531.30768 831.6
+531.77606 13386.5
+532.27777 7948.4
+532.48608 2074.1
+532.77631 1051.3
+540.62781 845.8
+542.60718 980.7
+543.31097 1594.6
+543.81647 910.6
+545.29224 970.6
+545.79620 883.8
+549.77844 1553.2
+554.29932 8666.3
+554.80054 5777.1
+555.30280 1837.6
+555.80164 625.5
+562.81140 5685.4
+563.31458 2959.9
+563.81573 1217.3
+572.27441 1215.9
+572.77460 856.3
+591.31262 849.3
+591.81409 1110.5
+592.83838 619.3
+594.32178 1879.7
+595.32751 823.0
+596.30200 1509.4
+603.29810 933.0
+605.30951 30319.6
+605.81128 19880.0
+606.31140 4101.0
+613.32904 3419.5
+614.32922 764.0
+618.32916 2569.7
+618.83167 1203.9
+629.78705 2504.6
+630.28937 2413.0
+630.35498 751.9
+630.46661 853.4
+649.55115 665.2
+658.30914 656.2
+661.85223 6302.1
+662.35138 4619.1
+676.64209 956.8
+692.88031 611.0
+767.42987 596.2
+838.39618 881.8
+887.48901 591.8
+1039.83740 593.5
+1042.94434 599.1
+1084.58594 628.9
+1198.08118 3168.7
+1542.20410 820.1
+1603.51379 632.4
+S	1315	1315	509.5151846
+Z	4	2034.02944
+140.51550 582.1
+159.76028 537.0
+165.78175 681.2
+169.50250 512.2
+169.50903 694.2
+182.79120 806.8
+188.24847 627.0
+188.25974 771.0
+188.26981 1087.5
+188.28079 1187.5
+188.29065 1024.1
+188.29767 985.2
+188.30873 850.6
+188.31694 824.6
+189.49254 613.8
+194.08656 507.2
+199.18567 805.3
+199.26184 738.6
+199.27121 1279.4
+199.28328 2459.3
+199.29121 1332.5
+199.38272 750.9
+199.38985 975.9
+201.44618 579.7
+214.52554 610.5
+232.19884 659.9
+233.16365 746.5
+233.20355 527.9
+235.89175 547.5
+236.73761 543.0
+239.91397 594.4
+247.60109 541.1
+258.00064 554.5
+271.65915 880.1
+286.04602 527.4
+290.81824 621.7
+298.42606 616.1
+331.56604 598.5
+332.64963 752.8
+349.94095 566.3
+350.27512 794.5
+364.48450 576.0
+395.63611 525.5
+427.56564 911.5
+428.73022 1463.0
+434.09491 606.4
+440.21774 674.7
+475.77811 637.6
+486.29507 2212.0
+486.63043 1329.2
+489.61020 586.6
+496.26630 528.0
+532.47626 2126.0
+592.30530 850.0
+592.64685 715.8
+593.27850 579.2
+625.29407 2105.5
+625.79224 1094.3
+630.44147 880.7
+634.29663 1851.7
+634.79810 1329.6
+650.27002 875.6
+676.67316 980.8
+759.93646 581.8
+781.44379 662.4
+795.61102 1052.1
+815.19202 613.3
+837.03705 595.7
+848.90839 783.5
+856.44788 767.3
+857.43695 578.3
+877.67346 665.1
+911.43085 556.5
+938.54242 605.6
+988.60052 658.0
+1119.81226 640.4
+1198.07202 3606.3
+1525.50305 766.5
+1571.38330 660.8
+1657.52942 697.1
+1738.53503 665.5
+1814.68530 577.8
+1860.05786 772.5
+1878.56824 1231.2
+1878.92017 1707.7
+1879.60449 19252.6
+1880.29797 1259.9
+1880.63513 2018.4
+1881.03247 1041.3
+1907.03552 7492.7
+1918.70178 676.0
+1921.90002 578.8
+1930.66309 1089.0
+S	1317	1317	1879.93699127
+Z	2	3758.026
+Z	3	5636.536
+525.63995 747.8
+532.48950 2113.8
+537.69647 529.5
+537.71326 516.1
+575.77441 694.9
+669.14294 672.8
+676.57489 1074.6
+737.60516 676.0
+795.61102 728.5
+1057.14478 839.7
+1133.50488 583.8
+1198.09277 2863.5
+1213.53223 627.8
+1281.94458 632.6
+1328.33997 597.8
+1776.92566 795.3
+1779.33948 810.5
+1876.22778 885.5
+1879.34851 21013.5
+1907.05310 7309.5
+1907.42322 747.3
+S	1318	1318	1907.48099127
+Z	3	5719.168
+Z	2	3813.114
+532.48914 1531.1
+549.14032 750.3
+603.54596 595.3
+614.38855 652.0
+676.58777 992.7
+686.55847 566.9
+1001.68121 612.4
+1057.15588 913.4
+1183.37158 745.6
+1198.08875 3497.1
+1389.30383 716.3
+1485.35461 608.4
+1499.11023 570.0
+1717.42578 970.8
+1812.67810 633.5
+1879.39746 21098.7
+1907.02563 7549.5
+S	1319	1319	538.2508421
+Z	4	2148.97207
+135.08070 584.6
+162.43976 673.3
+165.78458 596.2
+165.79301 616.6
+169.50255 582.1
+187.98596 644.4
+188.25322 615.3
+188.26459 917.6
+188.27249 1036.9
+188.28761 1204.2
+188.29546 1360.2
+188.31087 672.1
+198.90088 926.8
+199.25748 1478.1
+199.28093 2187.4
+199.29245 1457.7
+199.31578 1064.4
+206.80605 577.6
+231.98683 771.2
+233.12802 1054.3
+233.58600 643.2
+239.93161 601.0
+243.86295 675.8
+255.10826 679.8
+271.67923 790.2
+272.13596 883.4
+275.66125 574.9
+277.08426 869.0
+290.95004 669.4
+298.12704 643.0
+298.63037 786.1
+301.12967 699.6
+304.24588 572.4
+306.63977 912.5
+308.73938 528.8
+321.12396 550.7
+326.02109 548.6
+338.63879 9133.0
+339.14114 1185.2
+345.93924 578.6
+350.28101 800.1
+359.20395 803.8
+379.42010 607.5
+381.24796 1305.7
+381.37744 718.6
+387.16409 775.0
+387.66483 721.9
+395.65695 644.8
+398.27509 3769.3
+400.19540 1343.3
+407.71500 1570.9
+408.21628 2541.9
+422.68994 730.8
+422.72089 660.9
+423.29636 1381.8
+426.26993 14780.1
+428.09366 534.0
+440.75650 596.8
+445.88004 630.6
+454.69781 2114.2
+455.20135 1382.5
+460.17941 717.7
+464.25516 2189.8
+464.75790 4615.6
+465.25748 783.7
+468.31784 918.0
+468.69669 7335.8
+469.19843 2217.3
+476.26953 1143.7
+491.90851 18308.1
+492.24277 14925.5
+492.57587 3569.1
+492.91458 1653.0
+494.33276 7629.8
+504.58740 4273.5
+504.91925 1462.7
+511.35870 14076.6
+521.34344 4707.0
+521.99951 5828.8
+522.24976 5847.8
+522.50055 5884.1
+522.75067 2773.3
+523.00024 1039.8
+526.79364 928.8
+532.52283 1537.1
+571.22888 896.7
+573.29102 1427.6
+573.62158 1023.7
+575.29901 974.2
+607.30127 19942.0
+607.80231 12457.1
+608.30334 3969.1
+608.81152 732.0
+659.01288 547.3
+674.57208 1140.9
+676.26965 10186.2
+676.59619 668.9
+677.27380 2807.6
+678.26788 921.6
+682.36017 1376.9
+688.83014 1154.9
+689.33606 967.9
+705.35645 839.1
+706.57703 1022.6
+706.82605 1161.5
+707.07251 1297.2
+707.32367 1446.3
+737.35980 28002.7
+737.86066 19992.6
+738.36096 8484.4
+738.86115 4321.0
+757.39807 749.0
+758.40771 920.2
+776.42346 2082.5
+781.43848 697.5
+785.36743 686.7
+794.31152 1262.0
+795.59595 1086.5
+814.42212 624.8
+815.42822 957.1
+928.54156 604.6
+1057.17822 1239.2
+1188.33777 687.8
+1198.16357 3430.7
+1434.98511 589.2
+1712.33618 621.8
+1719.31458 973.0
+1754.48889 714.2
+1755.13269 597.9
+1873.63708 811.4
+1879.41785 20418.2
+1879.70959 2711.9
+1880.13489 1000.2
+1907.05640 7215.9
+S	1321	1321	757.417407933
+Z	3	2268.977
+Z	2	1512.987
+195.76840 590.1
+198.90268 755.6
+199.18350 1103.8
+199.22563 613.4
+199.26453 1034.3
+199.28111 2592.8
+199.29655 1034.0
+199.30539 1137.9
+199.32950 618.8
+199.37915 1090.4
+212.11832 3086.9
+218.72058 656.6
+221.10345 3115.1
+233.16499 9513.2
+234.16931 920.1
+235.11876 3019.1
+240.11206 842.7
+241.08200 3606.9
+243.13411 1105.3
+249.09845 14312.7
+250.10191 1861.4
+250.79654 592.7
+255.31506 648.6
+257.31482 558.0
+259.09204 2573.2
+261.15973 3483.6
+267.10886 8483.1
+271.17755 986.3
+274.12991 5590.0
+285.13498 4116.4
+288.20303 2822.1
+299.55835 897.4
+305.63113 588.4
+308.93030 888.7
+312.15598 691.3
+314.12482 909.5
+317.18890 907.5
+325.20239 9857.8
+326.20511 1537.2
+332.13596 2387.1
+334.15228 935.0
+341.14554 2586.1
+349.58670 570.4
+350.14618 3857.2
+351.14618 673.9
+352.23364 902.1
+353.19711 5712.8
+354.20264 1079.4
+355.16443 1493.7
+360.13065 4171.7
+361.11703 601.4
+361.13354 571.2
+368.15649 630.5
+372.18060 5535.3
+373.18079 931.3
+378.14075 32706.5
+379.14429 5457.1
+380.14688 1068.3
+380.20801 5727.0
+381.21448 1090.6
+387.27133 19102.0
+388.15222 760.3
+388.27429 3290.9
+389.20245 4313.4
+390.20261 5552.7
+391.20764 1114.0
+396.15179 13843.3
+397.15671 2952.8
+398.21637 855.8
+414.17673 3995.1
+415.17905 1105.8
+421.57468 619.9
+424.14630 1207.4
+424.18475 1009.4
+428.37100 629.9
+428.72986 16365.1
+429.23099 7595.8
+429.73306 1675.1
+452.17749 1703.0
+456.21497 892.5
+465.98419 571.9
+470.18729 2322.2
+473.21982 1473.3
+474.22095 625.0
+479.73953 1744.5
+480.24677 1317.4
+481.23669 1795.6
+482.23962 11693.2
+483.24261 3357.6
+484.21341 638.5
+484.24255 990.7
+488.25378 36906.1
+488.75488 18379.5
+489.25610 5287.4
+489.75717 1141.5
+491.22604 2384.2
+492.22495 955.7
+496.00217 644.9
+497.21329 2669.9
+497.25876 20367.1
+497.76053 8791.0
+498.21854 884.1
+498.26276 2720.0
+498.30450 2545.3
+499.27438 926.4
+501.23337 1740.0
+503.24576 709.7
+504.57138 589.6
+509.23145 6488.4
+509.26425 970.2
+510.23297 1507.4
+515.22485 2002.6
+516.31360 34822.5
+517.31683 9485.3
+518.32190 1470.6
+519.24341 10897.7
+520.24677 2952.0
+525.20862 6956.9
+526.21082 1824.1
+527.26099 4821.3
+528.26270 1536.1
+532.17102 601.9
+532.54486 1893.0
+537.22980 9788.0
+538.23145 2617.7
+543.21973 8900.1
+544.22424 1824.6
+544.32043 3652.8
+551.24506 746.4
+552.77448 19580.9
+553.27557 9288.7
+553.77759 3454.0
+555.25659 1782.1
+561.78027 10517.1
+562.28082 5203.8
+562.78241 1882.9
+566.77350 1287.7
+569.25610 2432.9
+570.26001 799.5
+571.21167 1023.2
+583.28864 1828.5
+584.29199 732.8
+589.23529 1301.1
+598.78546 800.6
+608.29071 5149.3
+608.79108 4218.3
+609.29205 1475.9
+610.29834 6925.6
+611.28058 22086.5
+612.28442 8101.0
+613.28772 1481.2
+617.29608 42321.0
+617.79749 23641.5
+618.29883 6068.3
+618.80267 1516.2
+620.28156 2296.7
+621.26331 2097.9
+622.15094 628.0
+622.26556 1274.0
+626.30121 21826.1
+626.61810 586.0
+626.80292 11115.2
+627.30719 4337.1
+627.47363 1035.8
+628.30829 92524.1
+629.31177 28439.2
+630.31232 5802.9
+630.46661 794.9
+634.28552 1007.9
+638.29272 19291.3
+639.29669 5752.6
+640.30408 1048.0
+642.17145 659.9
+645.35706 6568.3
+646.35626 2608.3
+653.07507 964.5
+654.34979 1245.7
+656.30304 178304.9
+657.17859 717.5
+657.30609 60136.3
+658.07318 1383.2
+658.30902 11932.1
+659.30872 1674.3
+665.33167 1198.9
+668.33398 693.8
+676.67731 1006.0
+682.34161 3296.7
+682.84320 14487.4
+683.34570 11295.8
+683.84662 3129.6
+687.83679 3514.1
+688.33917 2012.0
+699.37103 996.8
+700.35065 2210.1
+701.34265 773.4
+702.37762 39055.2
+703.38086 13926.5
+704.38318 2619.4
+709.85858 694.4
+718.27515 912.3
+719.29224 684.7
+719.71484 686.0
+724.36853 1287.8
+725.36261 2988.6
+726.36133 1722.9
+727.15515 685.6
+729.23083 676.1
+735.34283 1331.6
+737.16821 694.7
+759.39893 6142.7
+760.40552 3300.2
+761.39905 1064.3
+792.36902 4046.4
+793.37018 1551.3
+796.41968 4584.9
+797.42749 1968.0
+810.37793 4995.8
+811.37830 1956.5
+812.47412 668.9
+819.40051 1211.8
+821.40863 1046.5
+838.44238 16707.8
+839.44025 9256.8
+840.43329 3128.8
+841.42572 1608.6
+853.41144 863.3
+853.55835 1004.0
+853.81940 5898.4
+854.00708 1236.2
+854.26086 1309.3
+854.45056 680.6
+854.55060 950.3
+854.80927 2593.2
+855.14215 3716.1
+855.26233 930.5
+855.54572 643.8
+855.57574 655.8
+855.98260 966.6
+856.03906 1519.6
+856.15704 2362.7
+856.22876 1338.9
+856.45160 854811.9
+856.60132 1745.4
+857.32068 1740.1
+857.45410 389385.7
+857.67114 766.1
+857.75433 5066.6
+858.14783 667.2
+858.20154 902.9
+858.45642 108544.9
+858.64374 1505.0
+858.76892 1835.0
+858.91370 1128.2
+859.09857 6662.5
+859.45813 23412.4
+859.79279 871.3
+860.10205 3009.2
+860.45905 3996.3
+865.31110 641.8
+867.39490 2799.6
+867.47827 892.2
+958.47235 681.0
+964.38635 1022.3
+968.45337 951.5
+975.50049 10873.7
+976.50281 5615.7
+977.50433 2096.2
+978.43805 1249.2
+993.51031 90689.8
+994.51343 46435.1
+995.51581 12558.5
+996.44434 13735.0
+996.82672 1017.7
+997.44446 6487.7
+998.44263 1473.3
+1029.39954 683.3
+1057.30640 644.1
+1077.49243 1663.6
+1097.48132 730.9
+1104.54236 8090.8
+1105.54504 4591.7
+1106.55078 1813.7
+1107.46948 1167.6
+1108.47119 766.2
+1122.55322 27950.6
+1123.55701 15049.5
+1124.55786 5363.9
+1125.48499 13614.3
+1126.48804 6830.0
+1127.49268 1536.0
+1196.56641 797.6
+1198.21118 3323.2
+1198.54321 763.2
+1215.57617 1162.2
+1224.55273 8401.3
+1225.55383 6568.5
+1226.56531 2343.3
+1233.58093 3554.2
+1234.58899 3043.4
+1235.60181 1079.8
+1251.59583 21263.5
+1252.59802 14653.5
+1253.60266 4639.6
+1254.60449 988.8
+1309.63525 711.1
+1310.67456 651.6
+1319.62573 1493.7
+1320.62988 773.7
+1337.63733 16409.3
+1338.64026 12071.2
+1339.64294 4838.2
+1340.65527 1276.8
+1355.65149 860.2
+1431.18091 839.4
+1495.50061 673.1
+1517.87341 627.9
+1560.66284 574.6
+1875.97168 742.9
+1877.90796 668.5
+1879.36121 2345.5
+1879.64648 19349.2
+1881.02625 1099.2
+1907.00134 6536.1
+1907.71606 739.3
+1930.77930 952.8
+S	1322	1322	407.639407933
+Z	2	813.431
+Z	3	1219.643
+100.87066 555.1
+105.45625 576.1
+111.20931 542.5
+112.07436 580.2
+112.90845 502.8
+113.46694 934.6
+121.79205 680.5
+121.79711 2446.5
+121.80236 719.6
+122.06894 647.4
+129.28145 511.1
+135.32799 556.0
+136.11006 599.2
+137.29588 633.5
+140.91116 751.3
+155.08134 942.0
+157.60825 673.5
+162.22812 599.2
+165.77951 648.6
+166.98485 594.8
+175.11813 1439.9
+179.75011 586.7
+180.82047 685.2
+186.12296 2207.9
+198.90378 1134.8
+199.18753 714.2
+199.22409 586.3
+199.24066 989.6
+199.26076 904.3
+199.27394 2565.1
+199.28549 2501.9
+199.37335 741.1
+205.75443 592.5
+213.08643 2374.5
+233.58066 704.4
+252.09741 5420.5
+255.29921 617.1
+262.15048 964.1
+270.10773 12795.1
+270.74475 578.1
+271.11185 1545.4
+272.09290 685.2
+272.66306 2536.3
+273.16379 978.4
+280.19370 647.1
+283.13931 1173.2
+285.36023 588.8
+311.18253 990.2
+314.06155 677.0
+316.69174 4615.6
+321.66055 830.7
+327.12906 7404.7
+330.17627 6765.5
+330.67844 2401.9
+339.18796 1028.8
+341.19269 3005.2
+350.24878 730.9
+359.20288 54530.3
+360.20639 8845.8
+361.20776 880.1
+367.69873 1242.4
+367.79248 544.5
+369.69736 2680.1
+373.14224 589.1
+375.69626 1630.1
+375.86322 864.3
+376.21243 4268.2
+376.53778 5453.2
+376.87152 6062.4
+377.20667 1360.5
+378.70261 6515.3
+379.20416 1484.8
+380.19196 2060.7
+380.69006 2917.6
+381.19406 976.2
+384.15256 600.5
+389.20267 6451.5
+389.69220 6146.9
+390.19376 1886.4
+394.56030 735.9
+398.20691 4441.9
+398.71002 784.7
+412.53143 726.1
+414.98361 644.9
+434.74661 560.1
+437.21292 4164.4
+438.21396 1375.2
+442.24094 732.5
+455.22424 6115.8
+456.22723 1025.0
+470.73062 662.7
+476.73566 716.1
+487.29651 4919.5
+488.80392 638.8
+494.90701 696.5
+507.76334 645.8
+512.23798 652.3
+515.77527 8170.9
+516.27728 4107.7
+516.77661 2466.9
+516.84180 681.2
+523.29218 1104.0
+532.48279 1745.7
+536.15466 596.1
+544.31848 32044.5
+545.32104 7714.4
+546.32428 995.6
+549.17615 1044.6
+583.26172 980.8
+624.30334 949.7
+630.42542 712.2
+639.31189 1263.7
+641.33472 1575.7
+649.20319 522.1
+659.34460 12367.0
+660.34723 3762.3
+676.65747 945.8
+795.60748 870.6
+800.03717 620.5
+1060.15503 697.0
+1065.37524 564.6
+1193.94043 632.5
+1198.07532 3798.6
+1221.55530 606.4
+1334.08362 704.2
+1525.46802 1026.6
+1554.34875 611.2
+1619.81531 630.3
+1627.61768 845.5
+S	1323	1323	758.028407933
+Z	3	2270.81
+Z	2	1514.209
+198.50716 602.6
+198.89963 925.5
+199.22322 568.5
+199.25626 1015.2
+199.26602 754.5
+199.27373 945.2
+199.28380 588.8
+199.29665 2547.6
+199.31378 758.2
+199.32092 531.8
+199.35614 812.1
+199.39690 762.3
+205.35687 663.2
+212.11864 2863.8
+214.54231 514.6
+221.10323 3762.2
+221.61761 529.8
+233.16493 10148.2
+234.16782 1014.7
+235.11908 3141.0
+240.11353 1064.2
+240.61244 501.6
+241.08217 4392.6
+243.13358 1068.0
+245.28235 752.2
+249.09824 15229.4
+250.10182 1231.0
+257.13968 1626.3
+259.09250 2803.5
+261.15970 3190.1
+262.16364 1010.9
+267.10898 8812.0
+271.17673 1708.3
+272.13190 611.2
+272.14017 570.5
+274.12994 5683.0
+275.13348 1000.5
+277.11859 862.7
+277.96030 615.7
+285.13428 3997.6
+288.20349 3034.1
+308.88754 735.3
+325.20200 8434.8
+326.20541 1662.1
+332.13577 1667.2
+341.14493 2649.9
+348.46701 610.6
+350.14667 3265.7
+353.19736 6172.6
+354.17844 603.9
+354.20062 750.8
+355.16345 1250.0
+360.12988 4484.3
+361.13028 612.1
+367.11371 542.6
+372.17825 4908.5
+373.18365 818.8
+378.14084 33963.4
+379.14453 5999.8
+380.14346 800.3
+380.20883 4994.4
+381.20993 1128.0
+387.27139 18824.9
+388.27530 3232.7
+389.20291 4524.8
+390.20248 5645.2
+391.20462 1084.8
+396.15164 15635.7
+397.15512 2415.3
+398.21640 1200.7
+414.17706 4737.1
+415.18073 1272.6
+424.18332 1039.3
+427.18033 820.7
+428.72961 17907.8
+429.23123 9411.0
+429.73364 2115.7
+449.36630 597.2
+456.21356 1153.2
+466.25684 571.1
+470.18872 2004.1
+473.23196 677.2
+479.25076 767.2
+479.73880 1940.4
+480.23886 823.9
+481.23428 1603.8
+481.26297 1618.8
+481.40915 609.2
+482.23965 13394.8
+483.24237 4176.8
+488.25369 40131.0
+488.75482 21353.2
+489.25644 6049.8
+489.75891 682.1
+491.23096 3439.5
+492.23285 849.1
+497.21533 3152.2
+497.25897 22141.5
+497.76001 9756.8
+498.26004 2170.5
+498.30362 3159.9
+501.23401 2128.6
+509.22949 5377.8
+509.26270 2194.4
+515.22565 1588.2
+516.31378 35386.5
+517.31665 9304.3
+518.31708 1355.1
+519.24341 11933.4
+520.24725 3016.5
+525.20935 6864.9
+526.21283 1376.6
+527.26105 5586.9
+528.26581 1814.9
+532.21033 918.2
+532.46411 1676.9
+537.22931 10758.2
+538.23206 2856.5
+543.21960 9889.6
+544.22302 2507.0
+544.32190 1873.9
+549.13513 917.5
+551.24799 1106.9
+552.77484 22182.9
+553.27631 11282.5
+553.77771 4690.3
+555.25671 916.8
+556.25360 881.8
+561.78015 12769.7
+562.28210 7086.5
+562.78290 2301.2
+565.87433 663.1
+566.77063 1569.2
+567.27704 993.1
+569.25629 2629.1
+571.21320 1287.8
+575.75757 614.3
+583.28589 2071.8
+584.29065 856.1
+589.23468 1572.0
+600.66479 628.6
+607.24530 764.4
+608.29047 5262.0
+608.79089 5134.5
+609.29022 1014.0
+610.29797 8289.7
+611.28064 23295.0
+612.28406 8560.2
+613.29132 2229.1
+617.29590 46176.1
+617.79736 25728.1
+618.09906 760.3
+618.29846 8654.0
+618.80176 1878.7
+620.28265 1846.5
+621.26398 2130.4
+622.26031 978.6
+626.30096 21985.3
+626.80280 13386.0
+627.30664 3678.6
+627.80695 698.4
+628.30811 100870.4
+629.12640 875.4
+629.31134 31314.2
+629.97205 802.8
+630.31403 6002.1
+631.32642 774.1
+638.29248 20921.7
+639.29755 6405.9
+640.30206 897.4
+645.35565 7228.7
+646.35919 1891.7
+651.85248 660.4
+653.84924 851.0
+654.34546 731.7
+654.53247 871.7
+656.30304 191035.3
+657.30603 63890.4
+658.07733 1112.2
+658.30902 12109.3
+659.30835 1565.6
+673.83960 1420.6
+674.34595 778.3
+676.61774 937.4
+682.34094 3755.8
+682.84357 17625.2
+683.34460 12915.6
+683.84479 3851.8
+684.34119 814.0
+687.83612 3839.3
+688.33643 2052.4
+688.84113 1296.9
+700.34778 1851.2
+702.37726 39373.0
+703.38086 12914.4
+704.38300 2770.5
+718.28522 859.0
+724.36023 924.2
+725.36176 3015.3
+726.36554 1408.3
+735.34259 1527.0
+759.39948 5944.6
+760.40338 2654.9
+761.40796 868.0
+782.38428 960.4
+792.36877 4029.2
+793.37262 2233.0
+795.59607 725.5
+796.42017 4780.9
+797.25732 677.8
+797.42334 2108.9
+798.43707 767.5
+810.37744 5721.4
+811.38507 2018.5
+812.38824 808.1
+817.34369 671.8
+819.39459 895.0
+821.40942 1119.0
+838.44202 17276.8
+839.43884 10364.6
+840.43121 3965.8
+841.43097 959.2
+845.64575 1030.7
+847.32532 1040.6
+849.23706 945.6
+852.97644 1019.4
+853.81879 4253.7
+854.27069 2020.7
+854.34363 905.2
+854.82782 1522.7
+855.14307 4175.6
+855.56567 1310.6
+856.01715 1078.4
+856.12769 2261.3
+856.18774 1314.8
+856.21631 927.4
+856.45148 882497.0
+856.60077 1620.2
+856.63965 1489.4
+856.68329 734.8
+856.72601 558.1
+856.88818 1582.4
+857.31165 1083.6
+857.45404 393487.4
+857.76501 4951.7
+858.30463 880.2
+858.45660 111738.8
+858.64136 2342.7
+858.77698 2242.5
+858.99915 965.8
+859.09320 4679.1
+859.25763 758.8
+859.45886 21109.9
+859.64722 923.4
+859.79718 742.2
+860.10388 1770.8
+860.46191 3581.6
+867.40216 3702.1
+868.40723 1434.7
+930.42963 867.6
+946.38336 911.7
+949.87799 696.5
+968.43591 882.7
+969.45770 701.4
+975.49969 10940.1
+976.50159 5797.8
+977.50848 1427.9
+978.44263 874.4
+993.51013 96780.1
+994.51337 48359.5
+995.51617 13497.9
+996.44458 13087.5
+997.44568 6762.4
+998.45074 2431.6
+1021.08960 791.2
+1077.48853 1449.4
+1078.47925 833.8
+1093.86401 909.8
+1104.54138 8027.8
+1105.54675 5252.9
+1106.54968 1290.1
+1107.46753 870.8
+1122.55310 30429.0
+1123.55676 15896.6
+1124.56067 5461.6
+1125.48523 13591.5
+1126.48572 6914.0
+1127.49170 2229.4
+1198.04492 2839.5
+1202.10388 608.5
+1206.53833 881.3
+1224.55212 10749.8
+1225.55688 5722.1
+1226.55640 2242.9
+1233.58337 3898.8
+1234.58459 3536.1
+1251.59619 22683.1
+1252.59790 14159.9
+1253.60229 4819.1
+1254.61182 1492.0
+1309.63708 1367.7
+1310.65088 817.7
+1319.61304 1445.0
+1337.63660 17942.8
+1338.64075 11872.6
+1339.64478 4503.4
+1340.64880 1114.1
+1355.65063 1150.9
+1409.26038 638.1
+1512.97583 689.1
+1623.34351 743.5
+1717.45166 1220.5
+1871.29126 715.0
+1878.29712 901.6
+1878.88843 1672.9
+1879.51208 18824.3
+1879.79749 3210.5
+1880.09290 2230.2
+1880.63184 727.7
+1907.05701 7617.3
+1930.57092 800.3
+S	1325	1325	1879.94299127
+Z	2	3758.038
+Z	3	5636.554
+532.47723 2004.0
+546.72308 677.2
+549.13226 776.1
+625.79865 593.0
+630.37994 778.5
+676.63544 870.8
+795.60822 889.2
+803.30084 628.9
+1181.44312 656.0
+1198.07141 3550.5
+1698.61108 612.2
+1716.36243 846.1
+1878.56189 644.2
+1878.87720 930.6
+1879.14636 1566.6
+1879.51477 19908.7
+1879.85291 1505.6
+1907.06445 7130.1
+1930.49915 905.5
+S	1326	1326	1907.47240793
+Z	3	5719.142
+Z	2	3813.097
+532.47198 1929.3
+549.13605 879.8
+550.48950 631.2
+676.61005 1237.2
+763.23663 622.3
+795.59900 819.4
+903.06293 660.4
+1019.73456 882.4
+1053.42273 654.9
+1057.20142 753.0
+1198.05542 3478.0
+1311.86780 716.0
+1372.79004 591.8
+1877.96252 835.0
+1878.87610 1550.6
+1879.45068 19929.7
+1880.01697 1612.0
+1880.90710 904.2
+1907.08264 7142.2
+S	1327	1327	1198.45924127
+Z	3	3592.102
+Z	2	2395.071
+378.62225 659.4
+381.34622 650.3
+518.14276 683.8
+532.46075 1638.2
+562.45233 621.6
+686.43237 629.2
+702.71832 579.2
+731.10797 793.3
+795.60254 737.5
+905.22522 622.9
+960.65240 660.2
+1021.14178 675.6
+1057.20508 716.9
+1091.61719 600.5
+1198.02661 3521.2
+1279.42908 653.8
+1372.01123 685.0
+1422.59619 715.9
+1630.47241 714.8
+1825.07751 595.8
+1862.49451 596.9
+1874.92932 636.0
+1878.62122 652.8
+1879.46021 19572.7
+1879.71338 3328.6
+1906.60986 667.9
+1907.03589 7608.6
+1930.53125 851.2
+1992.88733 615.4
+S	1329	1329	757.414241267
+Z	2	1512.981
+Z	3	2268.967
+198.90309 841.9
+199.19443 710.1
+199.25278 918.8
+199.26593 1023.8
+199.27975 855.1
+199.29169 2283.0
+199.30354 1458.0
+199.38885 993.8
+199.39995 800.9
+203.89627 627.9
+212.11810 2795.2
+214.50768 560.4
+217.89197 675.4
+221.10286 2649.7
+233.16492 9851.0
+234.16785 1304.4
+235.11900 2572.7
+240.11220 1063.6
+240.99165 754.2
+241.08168 3938.7
+249.09819 13277.3
+249.84802 656.5
+250.10092 1784.1
+257.14136 1160.3
+259.09247 1767.5
+261.15982 3139.0
+267.10855 8675.1
+268.11374 1052.7
+271.17612 857.2
+274.12982 5040.1
+277.09253 705.6
+285.13461 3711.8
+288.20264 2548.2
+289.70160 620.8
+310.97906 611.3
+325.20239 10410.4
+326.20624 1911.2
+332.13455 1671.7
+341.14511 2639.3
+350.14648 4325.7
+350.28076 789.9
+351.14981 750.8
+353.19751 5480.2
+354.19940 1391.9
+355.16711 1004.7
+356.06146 700.0
+360.12979 3378.5
+361.13248 759.8
+364.17569 764.2
+370.24216 877.7
+372.18030 4572.8
+373.13739 978.4
+373.17963 1238.4
+378.14075 33286.6
+379.14377 6415.2
+380.14774 1069.0
+380.20798 5834.6
+381.21057 1117.1
+387.21848 726.5
+387.27127 17591.6
+388.15106 999.4
+388.27414 3880.8
+389.20328 4147.5
+390.20303 4855.8
+391.20602 1265.4
+394.04861 593.2
+396.15195 13642.0
+397.15500 1935.3
+398.21906 1432.3
+406.13269 813.4
+414.17728 3542.3
+415.18109 784.3
+419.10049 674.8
+424.17773 848.4
+426.21133 667.9
+428.72964 17851.5
+429.23099 7258.9
+429.73428 1262.0
+452.17596 1719.7
+456.21249 1136.7
+460.20322 612.9
+464.20782 884.0
+470.18542 1606.3
+479.73969 1752.9
+481.23395 1332.7
+481.26138 1011.1
+482.23956 12141.7
+482.84955 656.5
+483.24319 4293.7
+488.25357 35917.6
+488.75497 16012.7
+489.25665 5059.3
+489.75674 1413.6
+491.23169 2922.7
+497.21472 2768.6
+497.25873 16910.8
+497.76004 7634.4
+498.21838 1181.8
+498.26169 2706.6
+498.30328 3028.3
+501.23068 1763.8
+507.17807 700.4
+509.22992 5459.1
+515.22424 2273.9
+516.31329 36273.9
+517.31677 8932.9
+518.31732 1996.3
+519.24341 10896.0
+520.24506 2618.1
+525.20844 6806.5
+526.21362 1167.2
+527.26038 4858.3
+528.26385 1909.5
+532.47705 1955.2
+537.22937 9475.7
+538.23303 2321.9
+540.26666 611.1
+541.26489 758.5
+542.50378 709.9
+543.21930 8078.6
+544.22174 2726.0
+552.77454 19516.9
+553.27551 8710.1
+553.77643 2785.9
+555.25305 1087.5
+561.78009 11446.8
+562.28131 5662.8
+562.77954 1319.6
+566.76752 921.8
+569.25513 3007.8
+570.26263 973.5
+571.21222 1335.4
+579.83447 567.7
+583.28546 1829.5
+584.29315 924.6
+589.23529 1240.3
+607.24121 1000.8
+608.28992 6603.8
+608.79254 3775.2
+609.28857 1524.2
+610.29828 6647.8
+611.28033 22382.9
+612.28406 8703.0
+613.28821 1643.8
+617.29578 44198.6
+617.79724 24092.8
+618.29846 8173.7
+618.55499 779.3
+618.80414 1693.1
+620.28247 1344.0
+621.26312 2099.1
+622.26984 1337.0
+626.30103 21644.1
+626.80280 12125.4
+627.30670 4447.9
+627.81165 878.9
+628.30804 91430.5
+629.31104 28695.7
+630.31354 6214.5
+630.42926 830.9
+631.31964 1048.6
+634.28845 1045.9
+638.29218 20367.5
+639.29559 6275.7
+639.73663 602.9
+640.29675 919.5
+645.35455 6094.0
+646.35687 1690.2
+654.34320 1707.3
+654.53455 954.6
+655.53156 762.0
+656.23798 798.9
+656.30267 189443.5
+657.18054 1346.0
+657.30573 66742.8
+658.07471 1263.3
+658.30835 13034.1
+659.31158 1942.3
+664.83069 1226.4
+673.83899 1107.6
+674.34070 876.1
+676.63123 797.8
+682.33997 3253.7
+682.84296 17663.3
+683.34454 13210.4
+683.84503 3481.3
+684.33575 933.2
+687.83325 3628.0
+688.34082 1605.5
+688.84082 861.5
+700.34949 1755.7
+701.35638 1018.9
+702.37714 38124.2
+703.38062 14922.6
+704.38287 3223.5
+718.27643 849.7
+725.36426 3043.1
+726.36230 1883.8
+726.74255 873.0
+729.85907 702.9
+735.34320 1362.3
+759.39966 7406.3
+760.40094 3466.7
+761.40521 1281.4
+782.38794 858.9
+792.36902 4457.3
+793.36206 1341.5
+796.42151 4496.7
+797.42200 2842.3
+801.39288 1264.9
+802.38550 643.9
+810.37823 4858.8
+811.37811 1637.2
+817.46234 604.9
+819.39624 1082.5
+821.41840 918.3
+822.40015 813.5
+838.44208 20512.9
+839.43469 9002.7
+840.43396 3980.8
+841.44141 1491.9
+845.65106 1392.0
+846.62744 969.3
+847.32312 885.3
+853.66669 1182.6
+853.82025 4973.7
+854.07880 833.3
+854.28235 2405.1
+854.35803 683.8
+854.42419 868.2
+854.65558 758.6
+854.72192 734.7
+854.81238 2240.0
+855.14642 4594.4
+856.01123 1629.2
+856.08173 654.5
+856.13055 2009.0
+856.18866 1250.7
+856.21655 943.9
+856.25903 1210.0
+856.45111 890645.0
+856.67261 1278.8
+856.88586 1359.5
+857.24219 986.3
+857.31158 1683.9
+857.45367 410220.7
+857.76331 5653.0
+857.93201 872.1
+858.07983 913.5
+858.13318 854.0
+858.31067 1030.7
+858.45642 113421.1
+858.62531 2559.3
+858.76147 2163.4
+858.81970 685.3
+858.92078 848.1
+859.09546 5887.1
+859.24255 1281.2
+859.45795 24671.0
+859.53717 919.8
+859.63330 964.2
+860.10162 2190.9
+860.26501 819.5
+860.45959 4299.4
+867.39661 3605.5
+868.39264 1233.0
+924.62347 647.7
+946.39337 945.6
+958.47375 802.6
+968.43982 855.1
+969.46515 866.2
+975.50000 11260.2
+976.50317 6661.6
+977.50757 1632.8
+978.44830 1071.7
+993.50970 97506.3
+994.51312 49947.7
+995.51410 14130.0
+996.44397 15436.6
+997.44238 7558.4
+998.44434 2450.6
+1044.64124 653.2
+1059.46631 898.9
+1077.47852 919.5
+1090.86340 649.5
+1104.54285 10222.8
+1105.54602 4264.0
+1106.54614 1393.7
+1107.46643 1747.6
+1122.55237 31714.3
+1123.55505 18033.0
+1124.56091 5582.2
+1125.48438 15564.2
+1126.48572 8276.6
+1127.48755 2636.9
+1196.55676 1080.6
+1197.55750 871.3
+1198.06970 3314.6
+1198.57336 907.3
+1215.57288 1063.9
+1224.55115 10768.8
+1225.55371 7719.1
+1226.55713 2583.5
+1233.58569 3896.7
+1234.58557 3004.7
+1235.60925 1188.1
+1251.59534 27341.6
+1252.59766 16763.4
+1253.60291 5606.0
+1254.61682 1281.7
+1309.64636 777.3
+1319.62073 1733.3
+1337.63611 18876.3
+1338.63965 14934.8
+1339.64209 5448.1
+1340.64746 1260.8
+1355.65881 1075.3
+1356.64319 895.8
+1383.81812 597.0
+1525.45593 864.6
+1877.01904 821.7
+1879.10718 1160.5
+1879.49500 19372.3
+1880.03247 1488.9
+1880.45422 955.3
+1907.03113 7193.2
+1918.68579 661.5
+S	1330	1330	757.9148246
+Z	2	1513.982
+Z	3	2270.469
+197.61923 588.7
+198.90694 988.7
+199.18204 770.9
+199.25565 1266.9
+199.28098 2362.0
+199.30186 923.4
+212.11792 2705.8
+221.10310 3863.4
+233.16483 9756.7
+234.16791 1501.8
+235.11926 3402.9
+237.77589 597.7
+240.11339 1025.7
+241.08195 3840.5
+243.13380 842.9
+249.09804 14665.5
+250.10136 1568.9
+254.70868 623.1
+257.13940 1411.7
+259.09268 2625.3
+261.15994 3267.4
+263.69473 605.2
+267.10867 8497.9
+268.11346 1161.1
+271.17654 1396.5
+274.12982 5848.2
+285.13449 3880.1
+286.13776 748.6
+288.20303 2988.3
+325.20239 9499.3
+326.20535 1722.2
+332.13535 2249.1
+333.24319 618.6
+334.15036 736.6
+341.14554 3015.6
+342.28128 746.1
+350.14627 3447.9
+351.13940 598.7
+352.23239 650.0
+353.19666 6475.9
+354.19885 1391.7
+355.16785 1321.5
+360.13000 4813.8
+368.22437 635.9
+371.19186 848.9
+372.17911 5081.7
+373.18088 1058.1
+378.14078 34964.3
+379.14365 5557.0
+379.77255 671.0
+380.20740 6200.6
+381.20901 1170.9
+381.36496 728.4
+382.16138 847.5
+387.27133 20794.8
+388.15146 1317.5
+388.27460 3157.4
+389.20282 4542.2
+390.20190 7411.3
+391.20642 1335.8
+391.87543 711.6
+396.15152 16521.9
+397.15555 2675.4
+398.21832 1080.9
+399.22128 843.4
+414.17731 4432.3
+415.18201 1553.1
+424.18039 1014.6
+427.18292 941.3
+428.72949 17073.3
+429.23105 7502.2
+429.73291 2199.3
+430.23273 686.3
+442.17838 573.7
+452.17920 1219.4
+456.21384 1072.9
+470.18878 2409.0
+471.18872 799.2
+473.21799 1240.2
+479.73886 1453.6
+480.23871 683.4
+481.23227 1517.3
+481.26276 1179.7
+482.23920 13857.5
+483.24179 4805.8
+487.25342 1018.1
+488.25351 38123.3
+488.75473 18127.3
+489.25592 5744.6
+489.75754 1703.1
+491.24130 3646.3
+497.21399 3007.3
+497.25861 20772.5
+497.76041 9673.2
+498.22040 808.6
+498.25974 2085.2
+498.30276 3745.9
+499.26752 1005.3
+501.23380 2104.5
+509.22974 6152.2
+510.23215 1492.7
+515.22302 1949.6
+516.31335 36947.5
+517.31647 9349.8
+518.31799 1239.7
+519.24316 10428.9
+520.24854 2646.8
+525.20801 6202.5
+526.21295 1882.8
+527.26111 4792.9
+528.26282 1807.9
+532.45959 1662.6
+537.22919 12487.2
+538.23334 2100.6
+541.26373 812.8
+543.21942 9800.5
+544.22168 3056.1
+552.77429 22752.5
+553.27618 9940.7
+553.77722 3005.6
+555.25592 1729.5
+561.77979 14038.2
+562.28229 6234.9
+562.78265 1394.3
+569.25726 2376.8
+570.27063 1041.9
+571.21222 1085.2
+583.28790 2895.0
+589.23767 1280.3
+593.27179 1255.8
+608.29053 6851.8
+608.78839 3378.5
+609.29456 1652.1
+610.29779 8636.8
+611.28003 23659.1
+612.28442 7661.0
+613.28717 2123.4
+617.29578 46804.3
+617.79712 28460.9
+618.29895 9684.8
+618.80078 1618.4
+620.28064 1682.5
+621.26349 2486.9
+622.27032 823.0
+626.30078 22204.5
+626.80249 11080.4
+627.30743 4535.3
+628.30798 99295.3
+629.31104 32728.6
+630.31372 6123.9
+634.28406 984.6
+638.29260 22024.1
+639.29700 5503.8
+640.29865 1163.2
+641.38928 672.4
+643.75507 661.2
+645.35559 6724.5
+646.36090 2132.3
+654.34351 814.0
+654.53558 1275.4
+655.41827 758.0
+656.30267 187355.5
+657.17072 782.2
+657.30560 67734.4
+658.07440 1419.3
+658.30896 15176.8
+659.31360 1312.3
+664.33160 912.2
+676.61670 1266.3
+682.33813 3351.5
+682.84314 19512.1
+683.34418 12680.2
+683.84644 4042.7
+684.33655 1110.7
+685.97369 596.4
+687.83502 3307.6
+688.33862 1835.5
+688.83533 1115.7
+689.33588 856.6
+700.35034 1733.1
+702.37714 40100.0
+703.37952 14205.4
+704.38287 2888.6
+706.31140 868.1
+718.27942 1172.7
+724.36523 830.5
+725.36121 3651.2
+726.36273 782.2
+735.34686 1841.6
+738.36591 993.3
+740.71484 687.6
+759.39917 5347.2
+760.40289 2764.4
+761.40149 981.6
+778.41339 869.5
+792.36810 3107.9
+793.37042 2282.7
+795.61774 876.4
+796.41815 3921.7
+797.42090 1577.7
+801.38428 1300.7
+810.37860 5013.7
+811.38477 1985.5
+819.39966 1454.4
+838.44171 18853.8
+839.43701 9556.5
+840.43158 3073.4
+841.43158 1340.0
+847.32202 786.5
+852.97473 620.2
+853.13135 730.4
+853.46417 697.0
+853.54926 614.2
+853.57391 636.5
+853.82117 5895.7
+854.27594 2011.5
+854.81805 2242.3
+855.13806 4186.5
+855.58887 1146.4
+855.68237 646.1
+855.71460 848.8
+855.78638 805.0
+856.09485 1592.6
+856.15253 2929.4
+856.22058 882.8
+856.25958 1319.5
+856.30182 2422.5
+856.45111 913114.7
+856.60040 2190.1
+856.88812 1478.4
+857.33582 2314.4
+857.45361 405550.7
+857.75751 5829.3
+858.45624 109903.8
+858.63519 2229.0
+858.78082 2486.4
+859.09436 6567.6
+859.22723 777.4
+859.45923 23496.6
+859.78528 1224.5
+859.95032 990.0
+860.10382 2640.9
+860.46265 3476.2
+860.99091 755.7
+861.12164 828.3
+863.76880 941.4
+865.33514 768.5
+867.40057 2765.1
+868.40247 1876.9
+946.39349 1498.8
+948.43896 735.1
+958.47021 942.3
+968.43732 667.3
+975.50037 11948.4
+976.50116 5999.6
+977.49945 1815.4
+978.43219 1328.9
+979.43591 1007.8
+986.37805 698.1
+993.50964 94763.1
+994.51276 49884.1
+995.51447 14905.8
+996.44281 13960.6
+996.81921 798.9
+997.44446 7340.7
+998.44568 1982.6
+1057.22144 1110.9
+1059.46448 1053.6
+1077.49463 856.2
+1104.54150 8884.0
+1105.54358 4368.7
+1106.54858 1310.5
+1108.48450 751.6
+1122.55249 30818.5
+1123.55493 16552.8
+1124.55664 5129.2
+1125.48413 14213.8
+1126.48523 7404.1
+1127.48206 2404.9
+1196.55261 871.9
+1198.03345 3276.8
+1215.55615 916.6
+1216.56213 847.7
+1224.55017 10099.2
+1225.55188 5469.6
+1226.56238 2567.8
+1233.58521 4418.6
+1234.58350 2930.4
+1235.59314 1488.7
+1251.28894 652.6
+1251.59534 23591.3
+1252.59875 15208.1
+1253.59851 4901.5
+1254.59802 1054.6
+1309.64355 1166.6
+1319.63000 958.9
+1337.63562 16622.3
+1338.63831 12446.0
+1339.64490 5229.2
+1340.64795 1311.8
+1355.65430 1633.5
+1356.65710 983.8
+1411.66248 589.1
+1458.49890 751.2
+1878.88354 647.8
+1879.16272 2205.3
+1879.48523 19513.2
+1879.85913 1368.7
+1881.15503 688.6
+1907.01013 6869.1
+S	1331	1331	505.075241267
+Z	2	1008.303
+Z	3	1511.95
+134.48161 73981.1
+142.14059 58714.5
+142.24290 61723.1
+143.57445 60774.0
+146.91498 79516.1
+152.65312 66404.4
+163.04678 64451.5
+167.19565 61113.3
+169.48622 83320.7
+175.52870 65934.4
+178.85434 62096.0
+182.14102 65780.7
+188.24481 72933.1
+188.26419 120154.1
+188.27315 119082.8
+188.27580 118778.2
+188.28607 145059.8
+188.29973 117536.5
+188.31018 124144.8
+198.90939 109635.6
+199.19479 107833.3
+199.22408 66361.1
+199.26265 100863.7
+199.27121 179652.0
+199.28056 93084.8
+199.29272 253083.9
+199.30226 183432.7
+199.32008 121972.2
+199.38957 104319.0
+199.40039 75989.0
+199.45932 63962.4
+214.50865 63179.9
+233.16431 5550025.0
+234.16765 725325.1
+235.11833 180729.2
+249.09766 268323.0
+261.15933 952923.9
+267.10733 158541.0
+268.50583 67069.4
+270.31552 63512.3
+288.20203 104502.8
+298.83780 65042.2
+350.14523 68377.4
+350.28458 85800.4
+358.29333 60517.1
+360.12430 73114.1
+378.13962 858495.5
+379.14551 129637.9
+387.26917 315235.8
+390.20056 192412.0
+396.15070 968441.6
+397.15381 185878.6
+419.72260 73733.5
+427.52655 74448.9
+428.72849 5422489.5
+429.23016 2221691.8
+429.73117 451114.9
+430.23431 115172.6
+455.56348 151223.2
+455.89832 126295.4
+466.94943 58987.8
+482.63528 98808.2
+488.25229 1330102.5
+488.75351 732866.6
+489.25504 251843.7
+489.57928 70748.9
+489.92303 70211.3
+516.31287 232145.5
+532.47400 201837.0
+549.13672 96132.9
+552.77393 1668131.8
+553.27484 825854.2
+553.77576 367579.2
+561.77850 2260737.5
+562.28003 1138139.0
+562.78107 200851.0
+563.25281 84645.9
+563.28149 95727.6
+573.21222 77699.6
+608.28912 414540.1
+608.79004 188659.6
+609.28522 94056.2
+615.80133 64552.0
+616.48926 105407.9
+617.23572 122978.1
+617.29474 16266392.0
+617.79584 11042473.0
+618.29730 4031906.8
+618.64697 59568.2
+618.79913 1023869.0
+618.91107 118304.1
+624.65759 182028.7
+625.16107 95322.8
+625.48492 111741.7
+626.20532 94853.1
+626.23358 164817.4
+626.29980 29064804.0
+626.80078 16618112.0
+627.11871 151629.9
+627.30231 5708072.0
+627.61292 93306.1
+627.66766 107691.6
+627.80353 1292723.5
+627.94897 155922.5
+628.30615 564516.6
+628.45117 132139.3
+629.31036 136560.5
+639.30023 65311.4
+639.34979 82846.6
+656.30127 1355867.1
+657.30530 396904.0
+665.33551 124552.7
+676.62610 130569.5
+682.84161 6220876.0
+683.34326 4564779.0
+683.84479 1749337.6
+684.34552 499653.8
+684.72571 72286.3
+698.09894 59420.9
+702.37543 372776.8
+703.37939 148981.8
+732.13770 67863.5
+736.28247 82575.9
+741.22223 70972.2
+759.39795 723726.2
+760.40173 301592.5
+761.41138 82726.2
+795.62396 82098.7
+840.40741 65450.1
+856.45020 3670061.0
+857.45319 1698043.3
+858.45789 443250.3
+865.32452 94185.4
+1042.82666 72718.9
+1188.18628 65895.5
+1198.05518 341321.6
+1325.09326 64188.7
+1423.76282 76700.3
+1525.33643 120675.6
+1878.60901 111248.1
+1878.89014 65187.1
+1879.15015 352946.1
+1879.47400 2139564.5
+1880.00061 142578.5
+1880.36340 104327.8
+1881.08521 65535.0
+1907.06091 783248.8
+1918.66138 113187.0
+1930.52112 96277.6
+1945.95032 62548.6
+S	1333	1333	1879.9078246
+Z	2	3757.968
+Z	3	5636.448
+532.52649 1914.9
+676.64838 960.5
+795.60437 1122.1
+927.73608 883.3
+1086.24426 752.7
+1198.18005 2861.3
+1315.31323 740.6
+1488.97229 709.3
+1585.63257 691.9
+1766.47693 664.8
+1878.49988 579.7
+1878.73181 949.4
+1879.23560 4449.6
+1879.55371 18916.3
+1880.43164 1059.2
+1880.69629 602.4
+1881.89246 711.4
+1907.06140 7338.7
+1930.61084 744.5
+S	1334	1334	423.7249921
+Z	4	1690.86867
+120.22193 561.8
+120.54118 613.6
+121.79522 1146.1
+121.79967 2029.1
+123.14468 554.3
+130.89357 605.5
+137.64868 582.3
+148.34157 597.1
+152.10626 750.7
+165.17226 543.9
+173.48694 606.5
+183.11237 3481.0
+194.92743 631.3
+197.12799 2923.2
+199.19821 631.4
+199.21071 568.3
+199.25989 844.8
+199.27426 2302.6
+199.28064 1485.7
+199.29504 1394.0
+199.31070 1126.7
+199.37302 639.3
+199.37880 856.5
+199.40706 733.2
+201.12297 21875.9
+202.12621 1895.5
+208.65424 640.5
+215.13852 11679.1
+216.14116 1169.3
+225.12305 991.4
+229.11774 13950.6
+229.93445 602.0
+230.12131 1576.8
+233.09712 565.9
+233.18483 642.2
+233.56664 591.9
+243.13344 6985.9
+244.13625 934.2
+271.15756 1768.5
+271.46387 533.2
+271.66083 689.9
+284.17511 516.3
+291.16580 2073.5
+295.11099 572.1
+300.30573 740.3
+307.68982 549.1
+308.89481 548.4
+310.11227 863.1
+326.16577 627.7
+326.65900 622.2
+342.20203 1029.0
+357.19766 1580.2
+358.16162 1092.1
+361.69406 639.3
+366.44601 906.4
+369.20746 6758.2
+369.54211 5196.5
+369.87637 1226.6
+380.91635 644.4
+390.67798 863.0
+401.54654 1207.0
+404.24957 4767.1
+406.73434 3960.5
+407.23337 1648.2
+407.54959 13346.1
+407.88431 8063.3
+408.21881 2097.9
+409.18390 1299.1
+438.55582 1290.5
+438.89349 801.5
+444.56036 23952.7
+444.89484 16687.6
+445.22891 7008.7
+445.56522 1496.2
+450.56448 2708.0
+456.26755 3310.5
+456.77106 1494.2
+464.71423 736.6
+476.25140 3353.7
+476.58429 2378.5
+476.76120 811.7
+476.91928 1561.1
+482.25543 11654.6
+482.58997 10800.8
+482.92261 2805.9
+483.25089 857.0
+487.12256 802.7
+488.25821 140047.9
+488.59232 111924.0
+488.63614 668.9
+488.81973 830.7
+488.92651 47022.4
+489.26062 13482.5
+489.59445 2165.3
+493.28653 1087.9
+504.27414 722.0
+508.25085 1124.5
+512.74365 971.0
+516.26202 899.0
+519.26434 6793.6
+519.59949 7938.4
+519.93408 3755.3
+520.27057 823.7
+524.79712 1867.3
+525.26880 51141.2
+525.60272 43359.3
+525.93701 22792.0
+526.27179 5966.5
+526.60535 1297.2
+530.26044 1865.4
+530.76636 734.3
+531.27264 1106.9
+531.60455 848.2
+532.27301 1696.7
+532.52197 1544.8
+541.30811 1988.6
+549.14551 829.4
+552.24042 1573.6
+553.23541 623.2
+553.30695 7266.5
+553.81012 4097.9
+554.31195 2004.4
+565.35114 604.3
+579.80725 580.4
+586.80817 1428.4
+587.82654 663.7
+601.81494 6770.1
+602.31641 5628.6
+602.82147 2087.5
+610.82068 103796.3
+611.32208 67171.8
+611.82343 24838.3
+612.32111 4803.7
+612.63043 664.1
+644.82019 918.9
+651.29669 738.7
+658.83643 834.5
+666.33698 10894.9
+666.83826 7402.4
+667.33887 2866.7
+667.83685 2326.1
+668.33667 1356.1
+675.09796 633.2
+675.34174 18571.1
+675.84302 11764.0
+676.34399 4466.7
+676.64282 989.0
+676.84900 697.7
+680.33649 1327.7
+712.75262 592.7
+713.39124 5359.8
+714.39563 1510.2
+795.61584 1103.7
+812.46039 3669.1
+813.46289 2028.7
+958.80432 566.8
+1057.25330 756.8
+1065.82373 590.3
+1110.89404 632.0
+1188.28857 758.7
+1198.18225 2918.1
+1222.18665 700.7
+1415.55566 561.2
+1525.36792 875.8
+S	1335	1335	1198.49824127
+Z	2	2395.149
+Z	3	3592.219
+315.25922 627.3
+317.45358 739.9
+330.46500 555.1
+381.34940 735.2
+457.58069 572.6
+463.41043 583.4
+486.36243 579.2
+489.52426 704.1
+532.54443 1407.0
+549.14233 707.7
+630.37726 831.8
+692.03400 666.4
+766.05267 617.0
+774.55273 698.1
+789.54333 591.5
+795.60980 1124.1
+884.92682 613.9
+917.38605 609.5
+991.80988 665.1
+1140.50330 955.4
+1197.05115 954.5
+1198.21313 3382.7
+1773.42554 675.1
+1878.30652 624.2
+1879.30164 3093.6
+1879.58337 19182.5
+1880.29065 695.8
+1881.38086 566.9
+1907.04431 7085.4
+1907.31628 813.4
+1918.54639 740.7
+1930.53723 651.1
+S	1337	1337	423.7293271
+Z	4	1690.88601
+118.16031 574.5
+119.64208 630.6
+120.06562 580.9
+121.79589 1029.9
+121.80028 2083.9
+121.80490 1082.8
+123.82916 530.1
+135.76695 594.7
+150.49445 598.5
+157.23856 530.7
+160.80403 596.7
+171.63680 836.0
+175.49454 569.0
+183.11264 2221.6
+185.57031 506.4
+196.52364 547.4
+197.12856 1397.6
+198.91025 706.8
+199.17432 587.5
+199.22479 639.6
+199.27226 1953.3
+199.27919 1742.9
+199.28528 1664.6
+199.37660 916.9
+201.12294 14615.7
+202.12613 1758.8
+215.13858 6507.6
+227.09001 591.3
+229.11774 8961.5
+243.13347 4646.9
+244.13647 873.0
+254.13846 537.1
+258.47787 631.0
+259.45740 553.8
+271.16022 642.9
+291.16632 1162.2
+308.36386 599.3
+308.89169 784.9
+318.01089 584.8
+322.61267 593.8
+333.31631 520.9
+342.20123 1140.1
+342.26309 623.1
+350.27838 667.2
+354.16507 604.8
+357.20026 1276.9
+358.16125 780.8
+362.19592 736.1
+369.20798 6341.2
+369.54205 2203.2
+369.87531 830.0
+378.88446 1249.0
+392.28488 598.4
+404.24890 2613.8
+405.25232 689.8
+406.73215 1697.1
+407.54932 8495.3
+407.88385 5682.1
+408.21762 2713.5
+427.77646 585.8
+444.56027 16354.9
+444.89453 10131.5
+445.03140 513.3
+445.22787 3095.2
+445.56281 712.1
+450.56430 2008.9
+450.90097 776.6
+456.26666 1684.7
+476.25034 2402.2
+476.58551 2435.6
+476.76566 903.6
+476.91818 975.1
+482.25473 6915.9
+482.58954 6498.3
+482.64709 799.2
+482.92355 2362.3
+488.25803 99911.6
+488.59222 64364.7
+488.92645 28241.4
+489.26047 5748.7
+489.59378 1326.2
+519.26514 6076.0
+519.59930 4530.1
+519.93311 2723.0
+520.26959 707.4
+525.26874 34743.9
+525.60278 29888.3
+525.93744 11738.5
+526.27197 2825.4
+530.25995 1556.1
+531.27356 1077.2
+532.27252 1008.0
+532.55151 1864.6
+541.30994 919.6
+549.14020 643.9
+553.30768 4820.0
+553.81195 2198.5
+554.31165 1387.4
+601.81488 3875.9
+602.31635 2918.4
+610.82062 63991.0
+611.32202 44917.4
+611.82336 15005.9
+612.32074 3073.4
+630.39221 904.3
+648.18298 678.4
+662.19934 564.3
+666.33575 5142.3
+666.83936 4211.7
+667.34052 2041.8
+667.83777 1706.4
+673.56250 544.0
+675.34216 9692.7
+675.84277 7668.3
+676.34589 3700.5
+676.64734 924.6
+680.32513 653.7
+713.39221 3094.2
+768.59039 615.8
+795.63428 1025.3
+812.45697 1664.9
+813.46167 867.2
+885.26093 781.5
+921.95197 694.0
+1057.02759 615.3
+1188.24707 680.3
+1198.23328 3493.7
+1525.36536 966.6
+1622.52576 598.7
+S	1338	1338	712.5815896
+Z	4	2846.29506
+188.24449 568.9
+188.27477 1870.7
+188.28683 2116.7
+188.30078 1773.1
+188.31133 1612.5
+188.32513 892.6
+198.90300 976.6
+199.26079 931.3
+199.28365 2162.3
+199.29802 1079.2
+199.30963 1208.3
+199.31685 889.7
+199.33406 640.8
+199.38080 698.0
+199.39140 605.6
+220.87425 586.3
+233.91969 577.6
+240.61597 578.6
+240.62021 584.1
+271.65613 635.6
+299.56985 966.0
+308.89157 740.1
+311.13474 2068.1
+314.46841 603.2
+368.15594 742.7
+386.81738 709.7
+403.79044 627.7
+425.17871 1130.7
+443.75775 6557.4
+444.26016 2770.2
+477.57697 627.9
+490.15961 573.8
+532.56561 1838.4
+540.20392 2026.1
+588.44379 727.2
+611.24469 961.0
+633.01709 695.8
+641.33374 842.2
+643.54407 1401.2
+643.79675 1390.4
+644.04443 795.1
+644.29926 829.4
+648.04773 6446.3
+648.29950 6461.9
+648.55096 4229.4
+648.80548 1136.8
+663.32031 1075.6
+663.65021 1394.1
+676.64972 1290.8
+688.72290 639.0
+689.39252 882.1
+691.14447 699.8
+692.85065 691.0
+694.72943 636.9
+721.60315 674.6
+731.09283 793.3
+740.01544 2489.0
+740.35016 2492.5
+740.67944 1447.1
+741.02301 1324.5
+757.69354 721.7
+758.02271 1199.1
+761.64850 652.2
+763.69385 7602.7
+764.02917 6527.2
+764.36230 4137.2
+764.69769 1008.4
+795.59497 863.3
+796.35962 842.8
+802.03766 3832.4
+802.37250 5067.7
+802.70593 3105.8
+803.04199 2577.4
+815.03967 1485.0
+815.37207 779.1
+821.04364 4407.5
+821.37769 5944.3
+821.71240 4925.4
+822.04547 2680.5
+834.04254 1457.6
+834.38037 1238.9
+840.05011 9601.1
+840.38464 11880.7
+840.72076 7065.1
+841.05511 2386.4
+841.38788 1206.6
+856.03088 1178.8
+863.72833 8083.8
+864.06342 10850.3
+864.39777 6585.7
+864.73419 3118.7
+865.06610 931.9
+962.87549 815.2
+963.87756 929.3
+994.98358 1160.8
+1021.09973 744.8
+1057.26917 1189.6
+1188.18848 675.3
+1198.25952 3552.8
+1395.77625 774.9
+1524.39905 679.5
+1525.33154 806.9
+1527.38367 762.0
+1540.00146 593.3
+1619.85730 670.2
+1777.41418 818.9
+1861.95923 741.8
+1878.93713 1336.8
+1879.29272 4029.7
+1879.56909 18954.9
+1880.56885 948.5
+1881.15454 870.5
+1883.13965 571.5
+1906.97729 7392.3
+1930.49512 839.0
+S	1339	1339	538.2547471
+Z	4	2148.98769
+142.23013 621.3
+142.80444 566.0
+156.87831 649.5
+165.78275 897.2
+176.79234 529.3
+180.80382 550.6
+181.12737 557.8
+188.25198 715.2
+188.26094 511.7
+188.27473 1354.2
+188.28268 1284.5
+188.29573 1322.6
+188.30318 1073.4
+188.31131 711.5
+188.31660 606.9
+188.32703 738.4
+198.90355 643.1
+199.18233 1028.7
+199.18881 613.2
+199.19939 620.8
+199.25584 1105.0
+199.26276 1039.3
+199.28006 2858.8
+199.30881 715.3
+199.37823 798.5
+199.38489 601.8
+206.93315 598.5
+213.08739 720.2
+214.90112 527.5
+233.12790 1166.3
+233.55922 611.5
+254.37543 573.7
+260.88412 563.3
+271.63989 701.1
+272.10663 623.0
+272.13565 2167.6
+277.08466 784.8
+283.63644 1020.5
+297.63486 1129.9
+298.12592 1195.9
+306.64050 2557.7
+313.93423 541.3
+321.11844 1124.0
+329.63324 2780.7
+338.63879 14740.2
+339.14005 3765.4
+341.68570 1457.1
+350.28046 746.3
+354.20001 678.4
+385.68619 615.7
+387.16406 994.8
+391.22025 759.9
+399.97391 571.8
+400.19241 3879.8
+401.37338 524.5
+408.16266 712.1
+414.21014 942.5
+422.70059 767.7
+427.51822 806.1
+436.69928 737.4
+439.13126 579.4
+440.75476 1529.7
+445.68942 724.6
+454.69937 4514.2
+455.20023 1843.9
+459.68890 809.3
+460.18265 923.4
+468.69626 10714.6
+469.19772 4044.2
+469.69916 1284.3
+470.57388 907.3
+476.27100 3047.6
+482.62943 838.0
+491.90866 37716.3
+492.24243 30543.2
+492.57642 12161.0
+492.91147 3246.6
+493.25021 744.7
+501.23962 751.0
+504.58823 1396.2
+504.91989 2635.1
+505.25528 5222.3
+505.58881 6126.1
+505.92398 1025.4
+506.49893 733.9
+517.49481 731.1
+517.74646 1783.3
+517.99634 980.3
+521.99921 11837.4
+522.24939 15114.4
+522.50073 10244.4
+522.75031 4591.4
+523.00055 1702.2
+532.55811 2075.8
+535.51868 748.7
+556.21735 556.3
+571.22827 1628.6
+572.23120 803.5
+575.30164 2921.9
+575.80286 1764.1
+579.97693 673.3
+598.29266 673.7
+607.30145 37924.2
+607.80273 19774.4
+608.30426 8696.7
+608.80591 1836.3
+630.37866 702.4
+658.25763 651.1
+676.26996 20710.2
+676.62445 806.4
+677.27277 5935.7
+677.84906 556.6
+678.27209 818.9
+680.08990 548.2
+682.36127 2946.7
+688.83215 3209.9
+689.33545 1374.2
+689.83002 1029.6
+690.72284 590.3
+705.35828 3532.9
+705.86462 1550.9
+728.33716 656.9
+737.35925 51351.0
+737.86060 39169.5
+738.36139 17585.8
+738.86151 5649.5
+739.36279 1495.5
+781.42828 1070.5
+782.42242 616.9
+794.31152 1746.5
+795.31409 666.7
+795.61005 977.4
+880.50531 666.1
+936.37524 632.1
+950.98383 741.9
+978.75867 589.2
+1059.20447 754.4
+1115.41125 561.5
+1140.71191 579.9
+1171.52979 593.7
+1198.24792 2868.0
+1355.77844 600.0
+1470.71399 628.4
+1525.30188 710.3
+1731.24207 651.0
+1747.61218 602.4
+1777.51038 885.3
+1796.56226 529.8
+1876.16443 619.7
+1879.07544 1903.9
+1879.52380 18334.5
+1879.90308 2785.9
+1907.05408 7494.0
+1914.35913 630.4
+1930.47986 1015.4
+S	1341	1341	757.415991267
+Z	2	1512.984
+Z	3	2268.973
+198.90578 3440.2
+199.17754 3480.5
+199.24355 2870.9
+199.27484 10934.6
+199.28291 5098.5
+199.37265 2996.3
+203.84409 2434.6
+220.02846 2874.4
+221.10330 5208.1
+230.09552 2450.5
+233.16441 15761.5
+234.16823 3962.8
+235.11754 6830.4
+241.08209 3789.1
+249.09793 27569.7
+250.10124 2400.8
+253.03853 2464.2
+257.13962 3396.1
+259.09134 3589.4
+261.16003 6740.0
+264.49911 2644.9
+267.10837 14381.9
+274.12924 10163.7
+275.38266 2471.8
+280.15457 2607.9
+285.13416 6583.9
+288.20276 6049.4
+325.20242 15823.0
+326.20438 2586.9
+341.14471 3484.8
+350.14560 6705.3
+353.19650 10522.7
+358.91556 2778.0
+360.12912 6114.9
+360.15594 3623.8
+372.17746 7230.3
+378.14017 49954.7
+379.14319 7914.1
+380.20749 9759.2
+383.38571 2681.1
+387.27042 33304.8
+388.27438 5838.6
+389.20352 7868.4
+390.20236 10452.9
+392.68927 2436.4
+396.15076 25044.5
+397.15430 3651.8
+398.21936 2929.1
+403.47098 2383.6
+408.29617 2106.3
+414.17795 5756.2
+428.72849 37449.0
+429.23032 12616.6
+429.73029 2921.5
+431.34537 2585.1
+459.24948 2320.1
+482.23877 21982.4
+483.24298 4455.2
+488.25262 75003.2
+488.75403 33660.4
+489.25528 9636.7
+491.24008 6770.8
+492.24887 2527.9
+497.25784 44072.7
+497.75922 19033.2
+498.25858 4859.9
+498.30222 6625.9
+501.23355 3622.1
+504.88980 3910.9
+509.22772 8683.3
+509.26221 4451.9
+516.31299 68417.7
+517.31622 16696.6
+519.24304 26322.8
+520.24573 4865.0
+525.20825 10677.3
+526.21106 3447.8
+527.26001 9970.7
+528.26190 3649.3
+532.55206 7459.3
+537.22821 26020.3
+538.23187 6996.8
+543.21930 16185.1
+544.22650 4559.2
+552.77368 55174.9
+553.27557 28463.5
+553.77673 7183.8
+560.06256 2467.6
+561.77942 24022.4
+562.28094 9675.3
+608.29205 7643.4
+608.78925 7260.5
+610.29669 13695.8
+611.27917 41905.1
+612.28424 14250.6
+617.29492 92499.7
+617.79645 60439.5
+618.29761 17080.6
+618.79871 2966.6
+620.28271 3524.4
+626.30023 54855.3
+626.80096 26990.5
+627.30524 7854.0
+628.30725 195040.3
+629.31036 63280.8
+630.31445 12267.3
+638.29150 43306.6
+639.29474 12443.0
+645.35614 12753.3
+656.30212 408101.6
+657.30542 126081.4
+658.30878 20765.0
+682.33813 3388.3
+682.84247 36390.7
+683.34265 25442.3
+683.84485 7890.2
+687.83350 6701.1
+688.33649 3654.6
+702.37659 69309.7
+703.38037 19672.0
+704.38580 3453.3
+725.36163 6725.2
+726.36121 5106.3
+729.35358 2585.9
+738.36920 4329.5
+738.85803 17009.2
+739.35779 11149.8
+739.85168 2691.9
+786.55450 2296.8
+792.36407 10258.2
+793.37024 3053.2
+795.62469 3287.4
+796.41888 5212.9
+810.37933 15145.4
+811.37952 4055.1
+838.44153 27036.1
+839.44116 14639.1
+840.42596 4293.0
+853.82867 7980.2
+853.95996 3199.6
+854.08466 2766.6
+855.13660 4924.2
+856.34229 6707.6
+856.45056 1548342.4
+857.45306 658587.7
+857.54694 3882.1
+857.75665 10309.9
+858.45575 177357.6
+858.75201 2668.7
+858.83295 3227.7
+859.09241 9570.4
+859.45844 25779.7
+860.09882 2752.0
+860.46136 4422.1
+867.40289 5066.8
+868.40942 2610.5
+910.27679 2668.9
+975.50024 16130.9
+976.49927 9374.8
+993.50928 169412.3
+994.51245 80903.8
+995.51440 26960.9
+996.44348 27629.8
+997.44543 14763.6
+998.44592 5421.2
+1057.58679 2479.4
+1070.19458 2156.1
+1077.48352 3196.0
+1097.89771 2536.5
+1104.54907 7921.4
+1105.54041 5740.2
+1108.47461 2813.4
+1122.55017 50640.8
+1123.55420 24311.3
+1124.55359 7927.2
+1125.48645 27112.2
+1126.48633 12163.1
+1127.48718 3955.2
+1183.44006 2424.1
+1187.96985 2453.6
+1196.98389 2396.0
+1198.23706 13350.7
+1215.54956 3129.4
+1224.54785 14427.6
+1225.55725 10069.0
+1226.56360 3007.8
+1233.59167 3741.6
+1234.59912 3838.3
+1251.59351 41243.7
+1252.59583 25387.9
+1253.60010 9917.5
+1254.63916 2571.9
+1337.63452 31129.0
+1338.64038 23000.3
+1339.64233 5897.1
+1436.83447 2314.5
+1453.14966 2417.7
+1525.30933 3302.0
+1568.35986 2166.6
+1574.05835 2902.1
+1610.78723 2201.3
+1878.29858 2911.8
+1878.94312 8654.3
+1879.35486 29863.7
+1879.60583 62788.6
+1880.37976 6326.0
+1881.31201 4787.2
+1907.08582 28420.2
+S	1342	1342	423.7310046
+Z	4	1690.89272
+105.06980 582.5
+106.87644 623.9
+119.58044 551.7
+121.79990 2335.7
+124.31583 594.0
+134.83197 640.6
+136.09320 568.0
+140.05153 522.3
+155.90904 544.4
+165.78296 535.2
+169.47681 730.0
+180.45665 553.7
+182.76346 580.0
+183.11214 3057.1
+197.12825 2237.7
+198.90071 1005.0
+199.16530 603.8
+199.19232 741.2
+199.19818 670.4
+199.24409 927.9
+199.25822 1990.0
+199.28580 1266.0
+199.30078 967.3
+201.12303 20929.6
+202.12627 1346.4
+211.72087 621.4
+214.49187 644.3
+215.13863 10471.9
+229.11789 12427.5
+233.54907 720.9
+240.60152 551.0
+243.13351 5993.1
+268.86993 560.7
+271.15686 2362.3
+280.15652 705.2
+291.16678 2264.8
+302.93384 633.7
+306.67618 763.7
+310.11301 574.5
+330.22922 591.1
+333.00003 625.4
+336.08221 632.3
+342.20255 1087.2
+342.23941 710.6
+354.16476 634.6
+357.20126 1166.9
+357.69955 668.7
+369.20804 8856.6
+369.54199 3637.3
+369.87665 1506.3
+372.87854 1069.8
+378.88565 2092.0
+379.21860 2086.4
+381.32193 720.3
+393.08783 658.0
+393.80911 596.4
+401.54706 1096.0
+404.25003 3550.5
+406.73456 2779.3
+407.54987 12893.2
+407.88470 6584.8
+408.21960 1867.2
+409.18149 1099.3
+438.55859 1237.9
+438.89011 1143.2
+444.56030 21228.2
+444.89496 15141.1
+445.22873 5492.4
+445.56558 905.8
+450.56427 2434.0
+450.89911 1942.0
+451.23111 598.2
+456.26758 2827.5
+456.77109 1278.4
+461.91733 1241.2
+474.76035 834.9
+476.25211 4294.5
+476.58591 3363.5
+476.91916 2194.5
+477.25027 753.0
+477.63370 646.9
+482.25552 10542.3
+482.58945 7389.2
+482.92352 3210.2
+484.96970 679.0
+487.69635 709.0
+488.25839 132835.2
+488.59238 95329.8
+488.82401 703.9
+488.92661 40328.6
+489.26096 11390.7
+489.59735 913.0
+493.28534 2949.9
+504.73990 740.0
+509.25323 700.7
+519.26550 8676.1
+519.60016 5173.3
+519.93420 3179.7
+520.26709 1852.7
+524.79474 982.9
+525.26892 50998.6
+525.60297 39211.3
+525.93744 16282.0
+526.27161 6059.8
+530.26147 1299.8
+530.76410 953.1
+532.27399 1038.1
+532.55347 1890.1
+532.77448 1495.5
+541.30573 1578.9
+552.23627 1399.2
+553.30768 8198.3
+553.80902 4088.0
+554.30835 1015.2
+567.82574 884.4
+575.59009 561.4
+586.27148 859.8
+601.81506 5848.2
+602.31812 3817.0
+602.82025 1128.2
+610.82092 98613.6
+611.32233 57930.3
+611.82385 20629.1
+612.32251 4132.4
+649.82825 773.4
+666.33630 8999.9
+666.83856 6552.9
+667.34045 2575.3
+667.83527 1077.5
+668.33856 1581.4
+675.34229 15820.0
+675.84351 11179.6
+676.34698 3932.1
+676.61249 1061.5
+676.83893 996.4
+713.39294 4332.0
+714.39301 1579.1
+731.04004 732.5
+731.88593 845.3
+795.59692 1074.1
+812.46075 3468.2
+813.45959 1556.4
+836.83142 627.3
+911.53851 851.6
+966.50006 663.4
+1021.03949 714.5
+1112.30054 625.8
+1198.23999 3225.2
+1260.12134 623.1
+1351.99365 535.5
+1525.27771 952.2
+S	1343	1343	758.023991267
+Z	2	1514.2
+Z	3	2270.797
+198.89888 876.3
+199.17468 497.6
+199.17937 516.6
+199.21031 530.5
+199.24515 1161.9
+199.26891 1179.0
+199.27904 711.5
+199.28633 1692.5
+199.30368 1542.2
+199.31970 620.4
+199.32668 679.1
+199.35966 634.6
+199.39401 770.2
+201.83102 540.1
+212.11810 1458.1
+215.13765 726.9
+221.10313 2439.4
+232.09885 587.4
+233.16478 8623.7
+234.16829 1114.9
+235.11841 2529.4
+236.42662 679.4
+241.08182 3632.4
+249.09808 10437.6
+250.10135 1060.5
+253.07454 584.0
+255.28841 819.6
+257.13968 726.3
+259.09274 1876.7
+261.15961 3721.3
+262.16553 727.2
+267.10870 6441.6
+271.17691 1194.0
+274.12976 4109.3
+285.13483 3119.6
+288.20404 2041.1
+325.20224 7335.0
+326.20572 1026.3
+330.03442 662.9
+332.13809 931.0
+335.16965 705.7
+341.14740 1145.4
+348.62769 656.4
+350.14572 3073.6
+353.19757 5557.0
+354.16776 699.5
+360.12991 3558.5
+372.17950 3537.8
+378.14075 28185.6
+379.14383 4478.0
+380.20822 4220.5
+381.21405 893.8
+387.27115 15115.5
+388.14954 1070.2
+388.27371 2450.3
+389.20383 3686.3
+390.20242 5482.0
+391.20432 1045.7
+393.13394 594.2
+396.15140 11330.8
+397.15503 1780.4
+398.22101 1074.4
+414.17685 2793.3
+415.18216 906.6
+424.14236 856.1
+428.72931 14854.5
+429.23132 6542.5
+429.73105 1991.8
+438.46021 572.2
+452.17712 1139.7
+456.21130 1122.9
+464.23276 722.3
+470.18762 1207.5
+473.21609 528.8
+473.24197 636.8
+479.73801 1845.5
+481.23398 1038.2
+481.26569 1222.3
+482.23956 8896.6
+482.63724 714.0
+483.24356 2186.0
+485.71606 545.3
+487.24838 650.1
+488.25336 32211.9
+488.75491 15764.6
+489.25726 4088.8
+489.75742 1118.5
+490.50323 641.7
+491.22864 2412.6
+492.22961 943.0
+497.21420 1912.5
+497.25854 18176.7
+497.75998 7673.2
+498.21808 866.0
+498.26306 1728.0
+498.30444 2059.4
+499.26370 719.1
+501.23456 1354.4
+509.22971 4177.6
+509.26370 1430.5
+515.22626 1673.1
+516.31335 29113.6
+517.31641 7126.2
+519.24323 9367.4
+520.24731 2735.9
+525.20819 4878.9
+526.21429 1867.5
+527.25970 2977.7
+528.26123 1319.5
+532.54877 1739.7
+537.22931 9236.6
+538.22888 1658.7
+538.98755 594.9
+543.21930 7028.0
+544.22296 1265.9
+545.22827 743.1
+552.77441 20398.0
+553.27606 8842.2
+553.77667 2160.5
+555.25610 1203.9
+561.77991 11993.6
+562.28094 4853.0
+562.78137 972.2
+568.61615 680.2
+569.25702 1347.5
+571.21472 1282.6
+572.25208 625.7
+583.28870 1331.2
+589.23767 775.8
+593.26715 951.3
+595.56305 648.4
+608.29041 5021.1
+608.78760 3310.8
+609.28510 745.2
+610.29681 5529.5
+611.28009 17601.3
+612.28333 6674.6
+613.28455 1824.3
+617.29572 42449.0
+617.79749 24212.7
+618.29834 7728.9
+618.80066 1322.5
+620.28076 1255.9
+621.26404 1412.0
+622.26776 955.6
+626.30109 19449.5
+626.80267 9568.2
+627.30487 2248.6
+628.30792 81141.7
+629.31104 26603.1
+630.31470 4273.8
+638.29236 17415.0
+639.29797 4975.5
+640.30066 878.3
+645.35608 6224.6
+646.35602 1059.4
+656.30273 163264.1
+657.02899 739.3
+657.30566 51630.8
+658.08594 860.5
+658.30896 10881.5
+659.31097 939.2
+661.22266 660.4
+665.33252 655.7
+669.61243 966.2
+673.83728 972.2
+674.95898 1011.0
+675.62982 1038.9
+676.64203 1069.1
+682.34045 3264.6
+682.84271 13241.0
+683.34406 9480.7
+683.84479 3227.8
+687.83453 2964.2
+688.33636 2036.0
+700.34985 1357.5
+702.37738 28677.7
+703.38031 10933.7
+704.38281 2554.9
+711.82092 1158.7
+720.88696 769.3
+725.36267 2613.1
+726.36426 1285.8
+731.11414 735.3
+735.34552 2075.2
+738.36188 1100.3
+738.85840 3694.5
+739.36426 1133.6
+759.40076 2606.8
+760.40411 1528.4
+792.36609 3328.8
+793.37408 1327.5
+795.58801 955.2
+796.42102 2639.3
+797.42407 1382.2
+810.37830 4511.9
+811.38159 1985.5
+819.39172 805.2
+826.36810 624.5
+826.86536 1946.8
+838.44073 12979.3
+839.43842 6614.5
+840.43347 3078.1
+845.65070 797.2
+849.37762 821.8
+853.08868 602.0
+853.63776 654.9
+853.69812 735.1
+853.81335 3464.0
+854.09399 1122.9
+854.27826 2179.4
+854.81769 1577.1
+854.88739 727.5
+855.14899 3330.0
+855.26428 1409.6
+855.56110 922.3
+856.01270 1445.4
+856.12854 1755.3
+856.18964 1428.3
+856.26428 1116.0
+856.29889 1977.7
+856.45129 706132.7
+856.60651 948.4
+856.63763 1625.6
+857.45386 309286.3
+857.76227 3931.3
+858.45654 81656.5
+858.56104 1057.9
+858.63483 2215.4
+858.76935 2155.3
+859.02032 1349.4
+859.09729 3769.8
+859.30609 857.3
+859.45795 15013.0
+859.65143 1136.2
+860.11487 1802.9
+860.46301 2093.8
+861.87311 1778.2
+862.37921 1798.1
+867.39209 2085.3
+868.40558 1157.7
+898.02454 631.8
+919.89471 906.2
+928.59210 719.3
+943.34253 580.2
+946.38104 920.7
+967.91022 761.8
+968.45782 660.3
+975.49963 7910.0
+976.49890 4757.4
+976.92377 1021.6
+977.50354 1509.7
+978.43616 1176.7
+992.02899 810.7
+993.50989 80177.0
+994.51349 36367.9
+995.51459 10684.7
+996.44434 11891.3
+997.44617 4798.1
+998.44751 1399.7
+1059.47546 1474.9
+1092.50293 658.0
+1104.54358 5850.3
+1105.54492 2977.0
+1122.55225 25860.9
+1123.55591 12186.5
+1124.55994 3869.3
+1125.48340 10836.6
+1126.48389 5662.1
+1127.48987 2258.4
+1175.21704 612.8
+1187.99023 906.7
+1197.55322 826.6
+1198.22449 3687.5
+1224.55212 7093.6
+1225.55615 4268.0
+1226.55676 1358.2
+1233.58472 3040.1
+1234.58533 1909.4
+1235.60205 689.6
+1251.59570 16362.9
+1252.59863 11006.4
+1253.59961 5017.0
+1254.59216 770.3
+1274.45337 730.4
+1319.63281 1305.3
+1337.63647 14444.1
+1338.63940 9356.5
+1339.64587 3465.6
+1340.65613 953.1
+1748.32629 685.5
+1777.58167 679.2
+1860.04907 659.7
+1869.67065 880.7
+1875.74194 767.1
+1879.09839 2921.2
+1879.54004 19446.5
+1880.03284 3130.4
+1880.97192 817.3
+1882.41504 824.0
+1907.07166 7516.3
+1939.13721 667.6
+S	1345	1345	757.417407933
+Z	3	2268.977
+Z	2	1512.987
+198.90166 976.7
+199.17824 1417.6
+199.23608 753.2
+199.26219 970.5
+199.27486 2856.2
+199.28694 1149.0
+199.29744 704.1
+199.37355 622.4
+212.11726 875.8
+221.10297 1757.2
+221.77728 631.7
+233.16483 5835.6
+235.11842 2202.9
+236.11990 720.2
+241.08104 1956.0
+241.88031 596.5
+243.13452 753.4
+244.18526 602.8
+249.09805 8263.3
+255.30544 673.4
+259.09280 1586.7
+261.15961 2240.8
+261.59119 677.4
+267.10858 4638.2
+270.93176 721.8
+274.12936 2921.5
+285.13422 2104.1
+288.20215 2058.3
+308.52573 528.2
+325.20233 4024.6
+327.59064 670.1
+332.13498 774.5
+341.14499 1146.8
+350.14502 1721.8
+353.19608 3110.3
+354.20456 558.2
+360.12817 1236.5
+364.81458 663.2
+370.45032 630.2
+372.17987 2146.4
+378.14041 17564.5
+379.14343 2653.1
+380.20724 3839.0
+381.21393 771.3
+381.38193 691.4
+387.27036 8446.5
+388.27560 1537.6
+389.20230 2740.2
+390.20175 4507.1
+391.20795 940.2
+396.15121 7973.5
+397.16565 742.3
+398.21960 808.3
+411.17606 681.7
+414.17789 1900.2
+427.56876 626.4
+428.72894 11060.6
+429.23013 3661.1
+457.99597 608.4
+458.21402 662.7
+479.24710 719.1
+480.24677 675.6
+482.23889 7642.6
+483.24396 2568.3
+488.25311 23585.1
+488.75449 10432.4
+489.25595 2778.1
+491.23465 1924.6
+497.21423 1271.9
+497.25851 12845.8
+497.75980 6523.8
+498.26172 1844.4
+498.30469 1610.6
+501.23245 1381.9
+502.23996 614.4
+509.22778 2468.6
+509.26205 1060.0
+516.31299 20910.6
+517.31561 4996.3
+519.24268 7074.3
+520.24603 1660.6
+525.20764 3326.7
+527.26062 3617.9
+528.26672 1156.3
+532.53271 1847.2
+537.22870 5912.3
+538.23560 1439.6
+543.21820 5851.8
+544.22101 1678.5
+552.77393 15193.1
+553.27551 8188.7
+553.77856 2332.6
+553.85559 540.4
+554.27692 665.5
+561.77997 6168.2
+562.28015 3785.7
+562.78210 1530.9
+566.77991 664.3
+569.25348 1457.8
+583.28796 962.0
+589.23218 1058.8
+590.23474 660.1
+593.27148 826.4
+598.75732 552.8
+608.29004 3458.1
+608.79004 2656.3
+609.28455 921.8
+610.29785 4275.3
+611.27942 12403.2
+612.28510 4658.3
+615.99933 613.8
+617.29498 33940.5
+617.79694 16675.3
+618.29803 5782.5
+618.80048 993.7
+626.30066 14337.0
+626.80304 6984.9
+627.30420 2175.1
+628.30756 59346.2
+629.31018 19450.8
+630.31274 3419.1
+630.44629 1014.8
+638.29132 12450.2
+639.29559 3921.2
+645.35394 3394.2
+646.35675 1012.9
+656.30212 125594.8
+657.30524 40231.3
+658.08234 1069.9
+658.30725 6774.8
+668.28577 620.3
+674.32684 619.1
+675.96259 1075.1
+676.65527 939.5
+682.33850 1594.8
+682.84283 9742.3
+683.34497 7088.7
+683.84265 2974.3
+687.83594 3392.7
+688.33545 2055.5
+700.35248 923.0
+702.37677 20094.3
+703.38037 7112.8
+704.37952 1916.0
+725.36017 1950.2
+735.34491 992.3
+738.36713 1044.1
+738.85980 5086.4
+739.36041 3145.7
+741.64771 688.9
+755.76294 638.2
+759.39764 1537.2
+792.37109 2836.3
+795.60779 802.1
+796.42041 2197.8
+797.42389 1171.4
+810.37769 3804.6
+811.37610 1112.6
+819.40253 837.3
+826.86456 1230.5
+838.44104 9886.8
+839.43451 3921.5
+840.42657 972.4
+851.66113 659.0
+853.81647 2183.2
+854.72443 832.8
+855.14496 2162.0
+855.56940 863.6
+856.45068 498954.0
+857.30505 1008.7
+857.45325 217389.4
+857.76202 2336.0
+858.45587 53672.4
+858.64709 1085.5
+858.76239 746.7
+858.79712 678.4
+859.09583 2544.1
+859.45581 9281.4
+860.10071 1125.6
+860.46063 1009.4
+860.86737 691.2
+862.37665 1195.5
+867.39752 1817.1
+868.38977 1169.7
+912.11908 624.1
+919.89508 891.4
+947.42761 762.6
+968.44733 792.7
+975.49841 5586.6
+976.50061 2714.5
+977.42767 1062.1
+989.02332 705.8
+993.50885 53458.6
+994.51221 26184.4
+995.51611 7270.5
+996.44141 9594.8
+997.44281 2919.1
+998.43811 916.7
+1055.94019 645.7
+1104.54004 4409.8
+1105.53552 1479.4
+1122.55127 16469.7
+1123.55713 8651.6
+1124.56055 2717.1
+1125.48303 8910.7
+1126.48438 3328.5
+1127.48926 1406.5
+1188.10095 816.5
+1196.57593 671.7
+1198.18982 3691.5
+1224.55078 5439.1
+1225.55115 3735.7
+1226.55859 1221.3
+1233.58911 1711.9
+1234.59424 1476.2
+1251.59534 12233.8
+1252.59570 7756.3
+1253.59778 2523.1
+1254.61108 1110.4
+1337.63477 9765.1
+1338.63733 6151.9
+1339.63672 3074.8
+1383.64563 609.5
+1717.44763 671.8
+1770.69629 657.1
+1875.41650 621.2
+1878.69189 1117.2
+1878.96252 2049.4
+1879.29333 3114.4
+1879.56604 18821.5
+1880.27209 1800.2
+1883.27148 737.6
+1907.04187 7010.4
+1931.75171 1009.8
+S	1346	1346	423.7307921
+Z	4	1690.89187
+106.64384 645.3
+107.82123 594.9
+120.67004 751.7
+121.79964 2610.7
+121.80315 480.9
+138.17360 541.4
+141.85114 822.5
+153.13206 499.6
+155.19954 538.5
+158.20421 748.2
+162.13402 538.7
+165.78175 977.5
+166.98770 516.2
+184.04047 681.8
+194.14783 503.4
+198.84605 559.4
+198.89732 683.3
+199.08946 678.3
+199.18434 1347.3
+199.21910 570.7
+199.27176 650.2
+199.28236 3049.5
+199.29161 1384.2
+199.38055 1154.2
+199.38832 1155.9
+201.12256 3633.2
+207.92320 565.6
+215.13785 1453.9
+216.76825 612.6
+219.79478 521.6
+229.11746 2612.8
+236.26472 616.3
+239.34824 619.7
+243.13313 965.6
+280.19424 550.7
+295.62985 678.9
+302.73590 701.8
+311.20770 567.1
+327.78580 732.1
+335.61359 561.0
+342.27664 481.3
+350.28177 765.0
+369.20828 1204.7
+369.54010 725.2
+378.88342 2238.9
+379.21777 909.7
+407.54999 1977.8
+407.88565 1721.3
+444.55960 3504.3
+444.89487 1182.0
+468.50558 620.2
+476.77176 741.9
+482.25491 2433.8
+482.59015 1235.3
+482.68494 605.3
+484.86890 634.2
+488.25784 24817.4
+488.59216 17464.0
+488.92697 6837.9
+489.26117 1643.3
+493.28372 1026.2
+501.08911 579.8
+502.50812 541.7
+517.24780 747.3
+519.26263 1074.6
+519.59863 1060.4
+525.26855 8902.6
+525.60260 6582.1
+525.93860 2371.7
+532.27295 606.2
+532.50189 1854.5
+545.61609 641.8
+549.17999 575.7
+552.49237 614.3
+553.30103 797.0
+610.82043 12258.9
+611.32178 9961.5
+611.82373 3741.8
+666.33185 825.9
+675.34418 2663.5
+675.84430 1843.8
+676.63617 876.2
+710.26880 627.7
+731.03717 584.4
+739.19476 590.4
+795.57904 884.6
+847.84247 689.3
+907.28735 520.8
+975.81689 611.4
+982.19568 625.9
+1034.04333 589.4
+1057.24854 727.7
+1088.73413 650.3
+1119.11743 555.1
+1159.17712 544.8
+1188.18164 689.1
+1198.11865 3621.2
+1237.10938 535.3
+1531.53918 596.0
+1551.80200 642.1
+1582.83081 565.3
+1649.54468 681.9
+1674.31189 642.2
+S	1347	1347	538.2566996
+Z	4	2148.9955
+141.40865 552.0
+143.15015 575.3
+154.69150 571.7
+160.53223 592.7
+163.01225 551.8
+163.63805 608.1
+165.78204 728.4
+166.02357 626.4
+170.67273 588.0
+175.73979 558.1
+182.77763 577.8
+187.18156 539.5
+188.24777 572.8
+188.25740 910.2
+188.27225 1264.5
+188.28136 1115.4
+188.29173 1394.9
+188.30342 1278.1
+188.31564 825.6
+197.51813 500.2
+198.89848 885.3
+199.17905 919.7
+199.18669 515.8
+199.19156 496.7
+199.23505 619.1
+199.25429 1137.1
+199.26114 894.5
+199.27637 2100.7
+199.30721 1196.5
+199.31958 1073.7
+199.37486 775.0
+212.52643 687.6
+217.17972 626.0
+219.23056 634.1
+233.57040 661.1
+235.28886 574.6
+238.72540 774.9
+249.96538 674.4
+272.13385 817.2
+288.07043 622.7
+288.20340 719.4
+289.96243 539.5
+306.64044 1195.7
+321.69846 545.5
+329.63446 1003.4
+332.64349 539.8
+336.21042 604.2
+338.63898 5889.5
+339.13913 2241.5
+341.68649 840.3
+348.97025 569.8
+387.16391 958.1
+387.27042 1499.0
+391.21835 979.2
+400.19232 1313.1
+401.72260 753.1
+419.72375 1106.6
+426.26682 823.8
+427.54428 624.8
+428.72961 2119.8
+431.76010 638.6
+440.75238 885.2
+449.28714 558.4
+454.70059 3458.1
+455.19830 1714.2
+459.69171 1680.9
+460.68661 698.3
+468.69626 6015.3
+469.19806 2135.3
+469.70184 1024.8
+470.26227 826.5
+474.06793 665.6
+476.26910 1222.4
+491.90863 21262.0
+492.24268 14236.3
+492.57645 6290.8
+492.90872 1447.9
+494.32904 638.9
+504.92108 1140.0
+505.25769 820.2
+511.35568 1250.6
+516.31073 693.2
+517.99567 1054.9
+521.99921 6785.8
+522.24951 5744.4
+522.50116 3450.5
+522.75031 1709.4
+522.99872 858.6
+523.52893 875.3
+532.52496 1925.4
+553.94580 603.4
+566.08533 689.3
+571.23199 954.4
+575.80365 1094.4
+590.05365 1645.5
+590.30316 1202.6
+591.30170 1324.8
+591.50641 1044.8
+594.55957 1336.9
+594.80688 827.2
+594.90430 1007.3
+607.30121 22301.2
+607.80255 12386.5
+608.30310 4913.8
+608.80536 1447.8
+630.39270 923.4
+642.57349 1012.8
+659.67059 4008.6
+660.00696 4698.7
+660.34381 1702.1
+665.67682 1902.1
+666.00903 1973.5
+675.08649 1368.1
+676.26984 11208.5
+676.66901 1117.3
+677.27161 3060.1
+678.27960 857.5
+679.59430 1037.0
+682.36218 751.1
+688.83301 1282.0
+689.33472 1149.9
+705.85925 757.7
+706.36957 630.0
+707.35083 1675.6
+707.59937 3169.6
+707.85211 1939.0
+711.85333 1941.2
+712.10620 1230.2
+737.35950 28959.1
+737.86060 22367.2
+738.36151 10559.5
+738.86267 3489.5
+781.43304 839.7
+782.42230 514.5
+794.30652 1467.3
+841.90686 646.4
+862.50916 1274.6
+1019.72455 678.4
+1057.29517 720.4
+1192.62292 586.3
+1198.17310 3775.2
+1198.35059 928.2
+1396.11975 633.6
+1877.87805 743.0
+1878.23169 1284.9
+1879.38135 5562.6
+1879.60767 18472.8
+1880.59753 659.1
+1881.12524 1147.1
+1881.31128 892.8
+1881.71240 589.2
+1907.03760 7241.6
+1918.74304 818.0
+1930.59399 1245.2
+S	1349	1349	647.1446306
+Z	5	3230.68403
+165.78300 831.3
+184.58466 581.5
+188.24113 809.9
+188.25102 737.9
+188.27559 2389.1
+188.29556 2004.4
+188.31006 1585.6
+188.34085 635.1
+188.36172 650.5
+194.71310 572.1
+199.19136 741.5
+199.20456 782.6
+199.22913 588.5
+199.27284 1568.7
+199.28908 2003.1
+199.30223 1172.3
+199.32835 731.4
+199.38789 850.8
+199.39839 756.7
+209.24303 649.4
+216.65607 580.2
+219.05013 635.5
+221.10449 574.5
+235.08180 631.9
+240.73611 713.3
+252.06187 732.1
+252.10869 1161.8
+266.16010 2708.6
+275.12485 2783.9
+280.18253 651.4
+294.55246 627.2
+295.58670 638.5
+304.23914 651.4
+305.85483 537.6
+308.19644 633.1
+308.89838 704.7
+370.42477 878.4
+387.27020 1995.2
+388.20947 998.2
+398.16818 652.7
+403.21906 1500.8
+408.47250 566.7
+421.23053 2730.3
+426.66110 601.3
+428.72876 24032.3
+429.23010 8213.9
+429.73196 2048.9
+472.08554 566.4
+473.29636 1307.0
+482.65634 832.8
+497.26343 650.5
+499.27313 863.1
+501.29230 1758.9
+514.21637 659.4
+516.30884 2222.7
+524.25793 572.3
+532.37140 554.4
+532.49713 1766.0
+532.53033 564.1
+534.22937 619.4
+534.31299 6241.3
+535.31451 2054.7
+552.77130 990.1
+553.27661 1609.8
+561.77783 1897.6
+572.28339 681.6
+578.00476 734.8
+590.04968 1096.5
+590.30615 698.5
+594.56061 945.8
+594.80957 751.8
+595.05951 979.3
+603.30182 988.0
+607.29181 723.0
+610.55035 744.4
+611.55316 1389.8
+614.04401 1036.7
+614.29883 2048.2
+614.54828 853.3
+618.54987 3411.2
+618.79974 2631.5
+619.04474 2018.0
+619.52612 962.1
+619.72443 803.5
+628.82245 879.9
+629.38531 4032.3
+630.39862 1885.6
+632.93079 1171.5
+633.33173 713.8
+666.08740 725.5
+675.09119 2801.9
+675.34204 3369.2
+675.59680 1564.3
+676.62866 1020.3
+700.34717 876.0
+702.37579 3649.8
+703.36505 680.8
+703.61371 1392.4
+719.38446 869.3
+719.87695 1004.9
+720.37231 769.0
+733.63239 688.4
+736.39716 618.2
+737.62268 1106.9
+737.87921 1251.9
+738.12738 1151.4
+738.87817 2233.2
+739.12933 1806.4
+739.63617 880.1
+739.87811 867.7
+741.14044 1361.0
+741.39484 2133.2
+741.64478 2671.6
+742.47302 1366.9
+743.37750 967.6
+743.48285 692.0
+743.62988 1353.3
+743.88342 1465.0
+744.13745 1460.2
+745.64337 2455.5
+745.89362 3914.1
+746.14331 1856.8
+746.39526 1374.6
+750.70416 913.9
+756.70587 757.9
+759.39783 7243.6
+760.39746 2234.6
+760.48108 3554.3
+761.47412 994.3
+762.36652 1081.6
+763.03320 1062.4
+764.89777 998.2
+765.14142 927.7
+765.39697 1016.8
+765.64868 1038.0
+768.40619 535.3
+769.66125 699.7
+770.15173 770.6
+771.89331 1691.1
+772.14325 2429.5
+772.40271 811.3
+772.64490 1510.7
+774.15845 649.5
+774.40497 2553.8
+774.65851 1163.2
+774.90186 782.4
+776.39606 1984.1
+776.64197 2769.7
+776.89899 2254.1
+777.14514 1579.2
+777.40436 1884.5
+777.73773 864.8
+778.47046 666.4
+780.39398 703.8
+780.74237 964.7
+781.06274 1146.4
+781.39874 1520.6
+783.41290 1879.3
+786.40332 1977.9
+786.73553 2766.5
+787.07062 3488.8
+787.40137 1027.4
+792.40833 6349.5
+792.74194 8436.7
+793.07666 4218.8
+793.40991 1737.8
+793.73804 794.7
+795.59125 819.6
+796.38007 823.7
+808.38281 1206.6
+813.05444 777.2
+813.40314 954.5
+813.73389 910.3
+819.06085 1344.2
+819.73907 838.5
+824.39679 2207.1
+824.73273 2687.7
+825.06812 2510.8
+833.89679 665.2
+847.39392 667.3
+851.43713 930.0
+856.45367 9835.1
+856.74921 2208.6
+857.08875 1659.3
+857.45825 4124.2
+858.45105 1622.9
+862.09259 4525.3
+862.42621 4930.4
+862.76172 4539.8
+863.09973 1000.3
+864.91101 1536.2
+865.41858 948.0
+882.15869 555.2
+885.71436 602.5
+894.46002 860.4
+899.78839 2097.7
+900.12238 3006.9
+900.45422 3089.1
+937.48730 1333.6
+937.81921 1241.9
+938.15070 1157.3
+938.47925 1142.5
+946.56342 968.5
+947.56830 856.7
+949.15643 754.4
+971.83679 821.9
+983.49774 1935.6
+983.82794 800.3
+1063.04504 753.5
+1090.73071 749.9
+1141.26270 690.7
+1198.11829 3324.2
+1270.75208 642.9
+1746.44458 616.2
+1878.25317 611.2
+1878.82739 902.6
+1879.49280 19368.3
+1879.76831 2473.3
+1879.98816 1426.1
+1880.53528 774.5
+1880.77539 698.5
+1907.06372 7208.7
+S	1350	1350	539.454926267
+Z	6	3230.68261
+147.49635 602.9
+153.70494 550.9
+161.14229 530.4
+162.14839 523.9
+173.86494 640.1
+183.71999 474.1
+188.19411 519.6
+188.24379 1128.1
+188.26640 1473.5
+188.28490 1890.9
+188.29265 2018.8
+188.30821 1670.2
+188.32889 1077.3
+198.89790 959.1
+199.06859 530.6
+199.19113 1218.2
+199.27921 834.7
+199.28960 3410.9
+199.38831 1355.1
+202.18344 553.5
+202.35680 607.5
+203.69489 603.3
+233.16495 1576.5
+251.89238 543.4
+252.10925 641.0
+255.05946 618.7
+255.31027 633.0
+266.16129 1867.2
+270.21390 687.1
+271.17389 567.5
+272.13470 924.0
+274.67523 687.5
+275.12427 1171.0
+276.43039 525.2
+282.04126 629.7
+288.20245 9457.0
+289.20584 834.8
+298.12527 1153.7
+303.95981 566.2
+306.64032 1590.8
+332.56268 577.1
+337.79083 521.1
+338.63882 10487.1
+339.14066 1961.2
+341.68491 838.1
+376.70749 690.1
+387.27036 8278.9
+388.20828 605.3
+388.27350 1529.9
+398.27670 1052.2
+400.19351 1578.4
+403.21997 908.7
+410.71622 1503.4
+419.72385 4295.3
+420.22543 2086.3
+421.23227 1029.8
+426.26971 5947.4
+428.64862 535.9
+428.72894 11759.7
+429.23010 4971.3
+429.73251 1276.8
+431.76010 3089.6
+432.26263 1672.1
+435.27100 1394.0
+435.48895 776.6
+436.26926 842.0
+440.75250 920.4
+454.70041 1967.0
+455.19815 743.6
+459.69348 1071.0
+460.18262 809.8
+468.69641 5814.1
+469.19745 3042.0
+469.70139 818.3
+476.27115 2250.6
+481.29272 895.3
+491.90887 22756.7
+492.24274 16438.2
+492.57770 6190.8
+492.91013 2628.2
+493.24515 748.0
+493.39969 558.7
+494.33261 2259.6
+498.30002 806.6
+503.20685 594.8
+504.55548 650.3
+508.55811 556.1
+509.06918 674.8
+511.35809 3233.9
+512.05841 777.7
+513.46204 689.1
+516.07867 663.6
+516.31287 4299.4
+517.74384 664.5
+517.99677 1450.2
+520.79260 668.1
+521.99933 8939.0
+522.24988 8043.7
+522.50006 4521.6
+522.75580 1229.9
+523.01025 1299.7
+523.53076 2331.0
+523.78021 1844.9
+524.02991 1300.3
+524.28510 819.4
+532.53070 1802.2
+544.87732 679.5
+549.13745 688.5
+552.77252 1592.6
+553.27393 729.2
+561.33710 634.1
+563.36627 1816.4
+564.49298 833.8
+566.28143 2023.1
+566.48157 932.1
+566.68445 775.4
+569.68311 1056.3
+569.88287 2925.0
+570.08740 834.3
+575.30487 1122.8
+583.30817 1240.9
+585.79645 881.5
+587.70313 821.8
+587.80988 1853.7
+587.89886 1713.4
+588.09406 1198.2
+588.30408 781.6
+590.05469 4127.6
+590.30511 3990.2
+590.55701 2839.9
+590.80829 847.7
+591.04980 1066.3
+591.30481 2201.5
+591.50293 2660.5
+591.70416 2872.0
+591.90515 2409.3
+592.10706 932.6
+594.55725 3790.5
+594.80847 5695.8
+594.90790 2560.1
+595.05945 3967.3
+595.10608 3956.5
+595.30743 6258.1
+595.50842 2968.8
+595.70135 818.9
+596.91345 774.6
+605.54523 858.8
+607.30115 19907.9
+607.80304 12599.7
+608.09052 742.4
+608.30402 4350.0
+608.80420 1191.6
+614.32056 892.7
+617.53754 541.7
+617.71759 705.2
+617.92175 1432.6
+618.12109 1118.1
+619.04803 593.5
+621.52148 1065.5
+621.91742 775.9
+629.38586 792.5
+630.38898 1266.6
+633.55872 741.8
+637.81036 827.2
+638.06329 1323.9
+638.31171 659.7
+638.57135 840.6
+640.06812 809.2
+642.56866 1638.4
+642.82001 2193.8
+643.07324 968.1
+646.82007 2118.0
+647.07141 3009.2
+647.31793 2366.8
+647.39551 2908.0
+647.57660 1942.8
+647.83337 691.9
+659.67255 10449.7
+660.00671 12353.6
+660.34052 7555.1
+660.67548 2687.0
+662.43433 1846.0
+664.01300 788.5
+665.67548 6847.4
+666.00983 8023.0
+666.34448 3207.3
+666.68256 679.8
+666.83173 2356.4
+667.33160 3846.9
+667.82770 1058.2
+670.83630 1030.6
+671.08423 901.5
+675.08807 3647.9
+675.34113 3976.1
+675.58966 4853.4
+675.84308 2596.2
+676.09039 1213.8
+676.27045 10382.3
+676.63995 1392.8
+677.27411 3130.9
+678.27081 1017.7
+679.59216 6747.4
+679.84283 9114.8
+680.09448 4117.0
+680.34229 2795.9
+680.59308 1167.9
+688.83344 1299.9
+689.33563 1808.8
+700.84937 880.7
+702.36676 884.6
+703.09863 1697.5
+703.34259 896.5
+703.59332 981.5
+705.10406 1545.5
+705.35706 1988.1
+705.68665 660.5
+705.86121 699.6
+706.36249 991.5
+707.10577 679.2
+707.34827 4283.8
+707.60059 7411.7
+707.85028 7838.3
+708.09937 4032.2
+708.35339 1739.8
+711.85297 12183.2
+712.10315 20001.3
+712.35388 18312.8
+712.60437 8568.5
+712.85486 3714.3
+713.10822 819.7
+725.62732 691.7
+732.37219 815.2
+733.66974 1066.0
+736.86676 646.3
+737.35944 30040.6
+737.86060 20202.2
+738.12494 1079.9
+738.36029 9717.8
+738.86267 3474.3
+759.40063 1207.0
+777.43207 663.8
+786.73999 926.9
+791.47443 1668.6
+792.40619 753.8
+792.73883 1015.2
+793.07465 1108.5
+794.31165 849.0
+856.46057 829.7
+862.51190 4960.1
+863.07379 749.1
+863.51807 1523.1
+864.52625 785.5
+864.91077 928.6
+865.40845 949.1
+906.12177 753.1
+1002.04926 632.4
+1072.71619 758.4
+1090.87732 635.7
+1194.92798 654.0
+1198.18152 3057.6
+1525.37292 975.3
+1754.24841 544.4
+1775.93262 663.7
+1777.51282 816.3
+1877.04395 795.4
+1878.61841 709.2
+1879.16760 3522.6
+1879.53442 18585.0
+1879.77112 4011.3
+1879.99011 2090.1
+1880.48596 1208.0
+1880.91162 710.1
+1881.31384 782.1
+1882.17480 755.2
+1906.72656 852.0
+1907.04956 7719.7
+1918.66772 786.5
+1930.54028 1136.6
+S	1351	1351	756.727991267
+Z	2	1511.608
+Z	3	2266.909
+199.18935 926.0
+199.22305 535.8
+199.23303 744.2
+199.25879 1374.0
+199.28062 837.9
+199.28888 2833.8
+199.38744 1027.0
+212.11763 910.5
+220.58435 510.9
+229.90329 640.3
+233.16473 4822.2
+235.11916 1503.7
+237.75914 619.2
+239.72920 611.7
+241.08115 1646.5
+243.13478 830.8
+249.09795 6836.8
+258.86575 631.3
+259.09277 1293.9
+261.15927 1845.4
+264.39551 607.1
+267.10852 3840.3
+271.79520 690.9
+273.98846 645.7
+274.12927 3411.1
+274.42535 600.6
+280.18997 788.0
+285.13449 2415.0
+288.20178 1411.7
+314.12097 704.1
+325.20135 5159.2
+341.14294 1047.5
+342.28629 702.5
+342.67554 722.1
+347.47583 581.1
+350.14484 1272.8
+350.27731 807.5
+353.19659 2561.7
+360.12891 1017.1
+372.17825 2757.4
+378.14038 16179.7
+379.14285 2467.4
+380.20792 3493.4
+381.37326 698.8
+387.27081 9666.5
+388.27747 948.0
+389.20264 2081.8
+390.20148 3108.2
+396.15125 7920.8
+397.15463 880.3
+414.17651 1992.0
+427.55734 897.5
+428.72894 8701.9
+429.23080 4115.1
+479.19778 693.3
+479.73828 1031.7
+482.23889 5694.3
+483.24197 1995.1
+484.25229 716.7
+488.25296 20620.1
+488.75424 9094.9
+489.25665 2239.9
+491.22885 1348.8
+494.20834 739.2
+497.21472 727.8
+497.25800 11523.2
+497.76004 5981.8
+498.26086 932.8
+498.30374 1657.7
+509.22977 2364.4
+516.31305 18486.3
+517.31628 4221.1
+519.24255 7021.1
+520.24695 1216.2
+525.20886 3583.0
+527.25977 1979.4
+532.48022 1642.9
+532.52252 661.7
+537.22894 5138.7
+543.21814 5474.3
+544.22028 1300.8
+549.17462 901.1
+552.77393 12326.3
+553.27521 5365.7
+553.77631 1472.0
+561.77899 7035.1
+562.28253 1746.6
+562.78741 721.7
+566.77582 745.3
+569.25500 944.6
+571.21991 665.9
+583.29456 750.7
+608.28876 2892.6
+608.78571 1561.4
+610.29559 3426.0
+611.27966 10525.6
+612.28339 4162.3
+613.28387 947.7
+617.29486 24680.5
+617.79681 14502.0
+618.29822 4245.2
+618.80225 703.1
+626.30023 11162.9
+626.80225 5565.2
+627.30334 2098.7
+628.30737 50595.6
+629.31024 16349.5
+630.31201 2109.1
+630.43127 834.5
+638.29175 9961.1
+639.29675 3002.8
+640.30402 788.4
+645.35327 2914.4
+646.35413 794.3
+656.30200 103302.4
+657.30511 34047.9
+658.07263 765.2
+658.30890 6732.1
+659.30774 1155.6
+668.40271 609.8
+675.97174 663.0
+676.61737 1068.3
+682.33612 1255.2
+682.84387 7918.2
+683.34497 5621.7
+683.84412 2468.3
+687.83289 2037.8
+688.33203 943.8
+702.37653 19132.9
+703.37927 6673.0
+704.37994 1666.1
+725.35962 955.3
+733.86536 820.3
+738.36615 899.4
+738.86169 3554.8
+739.36102 2600.6
+742.36731 798.5
+759.39954 1509.1
+792.36871 2099.0
+793.36853 982.7
+795.58020 1048.8
+796.41974 1968.6
+810.37836 3152.2
+838.44153 8694.4
+839.42957 3909.4
+840.43274 1548.3
+841.68860 738.4
+853.81726 3072.2
+854.27203 1321.0
+854.81647 1250.2
+855.13690 1513.8
+856.13354 1240.0
+856.17981 902.4
+856.45062 435477.9
+856.64441 719.5
+856.67273 794.0
+857.33527 829.6
+857.45313 190760.5
+857.75983 2079.6
+858.45599 50464.9
+858.63977 1193.2
+858.79700 1302.5
+859.10071 3647.8
+859.45807 7993.9
+859.65845 719.0
+860.10339 1186.0
+860.46643 1204.9
+861.10309 895.3
+867.39417 1844.6
+975.50085 4761.9
+976.50049 2227.9
+977.49286 673.4
+982.81610 660.1
+987.11981 659.5
+993.50922 45379.0
+994.51282 20145.9
+995.12610 640.4
+995.51379 5491.9
+995.97083 631.6
+996.44208 6790.7
+997.43793 2992.5
+1015.23517 571.5
+1024.66040 767.9
+1104.54248 3832.0
+1105.53992 2950.1
+1107.49268 639.3
+1122.55115 14159.2
+1123.55530 6865.8
+1124.55688 2039.7
+1125.48401 6709.9
+1126.48535 3312.0
+1131.34021 583.0
+1188.28333 795.4
+1198.07092 2944.4
+1224.55444 4957.6
+1225.55151 2806.3
+1226.55823 1473.5
+1233.58655 1296.6
+1235.57605 805.3
+1251.59399 11133.4
+1252.59741 7246.8
+1253.60559 2365.0
+1333.82104 732.8
+1337.63403 7637.1
+1338.63696 4328.5
+1339.64404 2111.9
+1340.64856 629.5
+1392.50513 624.5
+1465.57239 685.9
+1607.79382 687.8
+1625.01184 673.8
+1685.35718 659.3
+1777.50854 937.6
+1862.91101 775.7
+1879.02686 1477.2
+1879.47559 19864.3
+1879.91699 2128.7
+1907.05200 7671.0
+1930.66577 918.1
+S	1353	1353	647.1457906
+Z	5	3230.68983
+165.78352 988.2
+167.39175 506.7
+173.95345 601.5
+179.31297 626.0
+181.81540 638.0
+182.76973 521.3
+188.25966 1515.0
+188.27818 2091.9
+188.29420 1953.6
+188.32877 698.1
+197.45927 758.0
+198.89714 822.0
+199.18282 1179.6
+199.25682 708.0
+199.26830 620.2
+199.28159 3184.1
+199.29283 712.6
+199.30933 908.0
+202.65816 679.4
+214.51350 681.2
+214.80528 559.5
+214.89822 598.3
+221.11690 625.0
+225.41963 621.5
+233.16379 1090.3
+252.10680 1038.7
+257.25119 574.7
+266.16049 2288.8
+271.79919 802.4
+275.12521 2264.3
+284.17062 1248.0
+296.55234 616.2
+341.74741 551.5
+342.44809 593.9
+350.25537 750.9
+358.97751 672.7
+364.23401 908.5
+366.94385 639.9
+370.31323 548.3
+371.15842 719.5
+375.59454 599.9
+379.95200 671.0
+381.35297 845.2
+387.27252 1326.1
+399.70566 586.0
+403.21860 1228.5
+415.56351 659.3
+421.23007 2136.1
+423.02457 691.0
+427.53424 818.1
+428.72891 16471.4
+429.23007 6526.4
+429.73270 1169.7
+446.03079 632.2
+449.44388 628.6
+464.14166 679.7
+473.29663 1676.2
+485.06387 749.3
+486.55978 626.3
+492.83783 636.0
+497.25842 1117.0
+499.26938 671.8
+501.29251 793.6
+516.30481 2610.9
+517.31915 844.7
+532.52374 1988.8
+534.31342 5514.7
+535.31860 1756.2
+546.44513 644.3
+552.77209 1196.5
+561.77777 898.9
+569.24237 620.6
+588.62872 2839.1
+588.96075 1864.2
+589.29315 861.4
+590.81885 712.4
+594.81134 812.9
+603.04883 1022.1
+606.89362 692.6
+611.55078 891.6
+614.03314 658.7
+614.29358 997.1
+618.55237 2472.9
+618.80151 2158.6
+619.05157 2058.9
+624.89105 652.6
+627.31390 787.6
+629.38605 4410.9
+630.13214 650.8
+630.39636 1572.3
+631.30908 1192.4
+631.47015 659.4
+631.55786 804.5
+674.30365 706.4
+675.09479 875.8
+675.34253 1172.4
+675.59650 1890.6
+676.65869 728.0
+680.30817 551.4
+685.73254 666.4
+695.37555 1110.6
+699.66742 764.8
+700.36279 673.0
+702.37567 1979.8
+703.61481 1177.8
+703.86841 1223.5
+706.87714 975.4
+707.11407 844.6
+711.63013 694.5
+719.37677 7252.7
+719.87909 4423.6
+720.37732 2395.9
+730.12073 1173.1
+731.12506 730.5
+734.37915 1372.2
+734.62781 4115.6
+734.87531 3051.5
+735.12732 966.6
+735.36450 840.6
+737.87433 847.4
+738.37769 1042.1
+738.87781 5008.8
+739.12921 6887.1
+739.37854 5648.5
+739.63110 2699.0
+739.88226 1841.9
+741.14581 896.6
+741.39502 1712.2
+741.63763 1513.5
+743.38025 3758.4
+743.63074 4477.7
+743.88135 2805.7
+744.13147 2514.5
+745.64709 1278.2
+745.89331 4113.5
+746.14581 2059.7
+746.39209 1548.4
+746.63306 606.1
+746.72522 854.4
+756.70044 789.8
+759.39703 3804.1
+760.40338 1424.3
+760.48236 2903.6
+765.15131 868.1
+767.40125 905.5
+767.64764 1276.6
+767.90015 1102.0
+771.65350 1483.6
+771.89478 2563.0
+772.14868 2032.6
+772.39386 1305.7
+774.15527 1689.4
+774.41003 1361.3
+775.37860 720.3
+776.05023 1196.2
+776.39563 3055.8
+776.64703 3497.4
+776.89551 3524.3
+777.14709 2006.3
+777.39838 1319.8
+777.74683 657.3
+779.66754 816.7
+780.72882 1071.3
+781.06738 950.1
+783.07971 1218.6
+783.41553 1157.2
+783.75031 888.8
+784.07867 632.5
+786.40363 2553.1
+786.73615 1439.3
+787.07172 2632.2
+787.40167 1285.8
+792.40552 4811.3
+792.74225 5427.3
+793.07391 3434.8
+793.41217 2155.1
+795.57819 921.5
+811.07715 646.9
+815.17981 667.3
+816.42230 652.2
+818.38568 1167.7
+818.72260 968.1
+819.06915 1194.0
+824.39990 2920.4
+824.73242 2187.3
+825.06842 2232.5
+853.46503 1030.2
+854.12109 908.7
+856.45392 7288.6
+856.75165 1361.5
+857.45837 2232.8
+859.45520 2096.6
+859.78851 850.8
+862.09302 4074.5
+862.42859 5513.7
+862.76184 4336.3
+863.10370 1135.1
+863.43066 892.9
+894.44836 1299.6
+899.79010 1098.6
+900.11932 2964.9
+900.45721 1732.0
+900.78278 1050.0
+937.48004 1042.9
+937.81140 1075.2
+946.56824 785.9
+965.42303 567.1
+965.48315 609.4
+983.49829 1380.7
+983.82861 1110.2
+1022.04297 696.9
+1057.25305 1156.1
+1153.45288 857.2
+1168.11926 918.5
+1188.09717 808.9
+1198.17529 3207.4
+1541.07764 719.8
+1777.51404 701.9
+1782.51563 648.0
+1862.30103 727.3
+1876.33691 889.6
+1878.29883 723.8
+1878.94434 929.4
+1879.26770 2540.9
+1879.54211 19717.0
+1880.21033 721.5
+1880.49902 749.3
+1906.89612 7115.6
+1930.57922 1208.9
+1978.78137 587.4
+S	1354	1354	539.456207933
+Z	6	3230.6903
+136.60933 530.8
+141.83380 627.2
+164.72757 643.3
+165.78238 842.7
+165.79373 637.5
+175.11888 1026.1
+186.12334 810.3
+188.12440 507.2
+188.23988 790.7
+188.25192 1322.4
+188.26512 1973.7
+188.27878 2157.4
+188.29160 1958.4
+188.31282 1385.6
+188.33170 1014.2
+188.36986 580.8
+193.39609 546.0
+198.89548 1034.5
+199.20258 950.0
+199.26816 1178.2
+199.28815 1090.4
+199.30092 2168.3
+199.34343 695.1
+199.39943 939.8
+199.42325 600.4
+200.39307 611.3
+214.11772 719.8
+216.30743 726.5
+223.09091 620.4
+233.16476 5110.6
+248.15207 906.7
+249.09760 871.4
+250.22006 586.0
+252.10910 657.3
+266.16104 4152.1
+267.98575 642.4
+268.75122 774.2
+272.13412 862.2
+275.12500 2536.9
+284.17203 1449.2
+285.15790 1052.0
+288.20261 14856.4
+289.20663 1462.6
+292.65903 612.1
+306.64093 1562.8
+307.14484 727.3
+308.92529 816.0
+318.91849 565.4
+329.63574 1175.5
+331.10190 570.5
+338.63947 5672.6
+339.14084 1677.5
+341.14438 1201.5
+370.19867 888.8
+371.15689 1561.4
+378.14063 968.2
+380.74384 964.0
+381.24966 765.3
+387.23596 720.2
+387.27115 13882.0
+388.21060 2064.8
+388.27481 2139.6
+398.27579 1418.1
+400.19415 1767.5
+403.22031 1998.6
+410.71860 2212.7
+414.19406 873.2
+416.25934 742.5
+419.72382 4944.9
+420.22531 2270.9
+421.22968 4054.4
+422.24155 591.7
+423.29330 801.7
+424.27557 571.0
+425.27213 526.4
+426.27011 6185.2
+427.27426 1302.9
+427.57803 762.7
+428.69171 616.7
+428.72910 14401.3
+429.23053 6490.2
+429.73279 1374.7
+431.76035 12422.5
+432.26221 4169.7
+432.76285 966.0
+435.27100 4836.2
+454.69946 1763.1
+455.19809 963.5
+459.69125 1096.2
+468.69714 5908.9
+469.19766 2277.4
+469.69537 644.5
+470.18686 991.3
+476.26953 1931.0
+481.29453 1454.9
+482.70270 945.1
+483.25052 684.9
+486.28992 672.0
+488.25858 724.9
+488.68219 593.5
+490.08871 650.5
+491.90933 12835.5
+492.24319 10639.0
+492.57849 4464.3
+492.91226 642.8
+494.33344 3270.8
+495.33716 906.0
+498.30518 1368.8
+499.27585 1446.2
+501.29007 630.6
+503.25836 868.1
+509.26108 785.3
+510.92963 642.7
+511.24585 780.7
+511.26022 731.8
+511.35953 4648.6
+512.36035 1741.6
+512.47528 2116.1
+512.87537 913.2
+515.87793 1778.9
+516.07721 4670.0
+516.30066 6604.8
+516.47913 1230.0
+517.31940 1134.8
+517.65460 1063.7
+519.52112 966.0
+520.79773 1670.0
+521.34113 1297.7
+522.00061 4937.5
+522.25006 7927.1
+522.50171 4283.8
+522.75305 1589.9
+523.53302 1697.6
+523.77991 2058.0
+524.03094 2656.5
+527.53516 586.3
+532.51331 1543.6
+552.77411 1925.9
+557.07880 591.0
+560.97357 569.7
+561.77808 1213.3
+562.27441 675.1
+562.68079 1374.9
+563.36505 3722.0
+564.07886 815.1
+564.36847 665.9
+565.70050 635.1
+566.07855 1255.6
+566.11853 602.6
+566.27704 1157.1
+566.47772 1291.2
+566.67999 840.0
+569.50568 830.1
+569.67969 1830.6
+569.88336 3965.6
+570.08484 3186.7
+570.28180 941.5
+575.03510 901.8
+575.98114 554.5
+577.27637 1682.0
+577.53046 3103.9
+579.98242 634.3
+580.30945 983.0
+580.89697 749.5
+581.78400 1758.7
+582.03516 1868.3
+582.28320 1150.4
+582.53723 998.5
+583.05353 929.5
+583.30658 1218.8
+583.55487 748.9
+584.06970 600.3
+584.09705 761.4
+584.29877 1538.4
+584.50317 1729.6
+584.70239 859.2
+585.80090 1155.8
+586.05548 1049.0
+587.56012 855.1
+587.70178 2901.4
+587.80933 1969.5
+587.90283 8531.5
+588.10199 6389.3
+588.30328 3035.0
+588.50537 2034.0
+588.56000 945.2
+588.70374 1918.5
+588.90814 874.9
+590.05493 4375.5
+590.30511 5448.4
+590.55646 4561.7
+590.80786 1629.4
+591.05768 1153.7
+591.30444 9009.9
+591.50427 15220.9
+591.70496 11646.0
+591.90521 8318.2
+592.10699 4046.6
+592.30927 1272.0
+594.55835 6623.4
+594.80963 11078.9
+594.90417 4005.4
+595.06000 8041.9
+595.10699 11923.9
+595.30762 13136.7
+595.50812 7507.1
+595.56213 1339.0
+595.70776 4645.1
+595.90814 820.5
+597.11658 999.4
+601.31805 986.2
+602.31561 775.0
+603.04626 778.9
+605.80011 1063.8
+606.05157 1417.0
+606.30524 1687.9
+607.30145 14073.7
+607.80316 9662.4
+608.30420 3095.1
+608.80225 971.6
+610.05334 1656.7
+610.30328 1918.2
+610.54919 1038.3
+612.05145 1208.7
+612.71936 753.5
+613.91998 1605.7
+614.04810 709.4
+614.11914 3031.9
+614.32343 3173.9
+614.51514 1536.6
+614.71802 1782.9
+614.80615 723.8
+617.51880 919.2
+617.72284 6214.6
+617.92371 5544.7
+618.12152 4812.9
+618.32300 3076.7
+618.55554 1928.9
+619.30164 911.9
+621.51978 1959.4
+621.71936 1588.5
+621.92114 888.2
+629.38824 2364.2
+629.77380 677.9
+630.38831 949.7
+638.32098 1915.2
+638.82635 902.5
+639.07428 737.3
+640.34595 1805.6
+640.59326 1929.4
+640.85095 778.9
+642.31787 2183.1
+642.56567 2355.0
+642.81982 2532.0
+643.07599 1020.0
+643.32813 1020.0
+644.59369 1444.0
+644.84937 1893.2
+645.09589 2365.3
+645.35034 863.5
+646.82080 3412.7
+647.07196 3904.3
+647.32324 3526.8
+647.39752 7072.4
+647.57489 2057.0
+647.83276 907.3
+648.39948 2902.7
+656.30444 1916.1
+659.67310 11279.9
+660.00757 13355.6
+660.34100 6489.7
+660.67560 2584.3
+661.00696 1153.6
+662.43378 5191.9
+663.43488 1881.7
+665.67639 9428.7
+666.01031 5859.7
+666.34583 3512.0
+666.67853 1698.5
+666.83099 2321.5
+667.33301 7072.7
+667.83258 4242.3
+668.33575 2736.5
+668.83435 1263.2
+670.83582 2035.2
+671.08521 1666.4
+673.08527 758.8
+675.08899 4898.7
+675.34131 10748.0
+675.59192 7887.9
+675.84186 4506.5
+676.09528 2754.8
+676.27087 7818.3
+676.36932 816.3
+676.86157 1169.7
+677.27252 2098.0
+679.59247 8482.6
+679.84259 11784.1
+680.09332 12345.5
+680.34521 6718.2
+680.59491 2314.2
+680.84894 1686.8
+681.32898 753.8
+682.36310 1214.4
+688.83179 1416.2
+689.32983 1089.2
+694.01141 758.4
+694.34332 685.2
+699.69281 1220.8
+700.35455 1728.6
+700.85400 988.6
+702.38129 902.1
+702.85199 1245.9
+703.10138 674.8
+703.34503 1904.4
+705.10791 2128.8
+705.35815 2132.2
+705.60474 1990.4
+705.86316 1343.9
+707.10895 904.7
+707.34955 4917.9
+707.60156 12916.9
+707.85052 10330.7
+708.10223 7055.2
+708.34918 1606.6
+708.60242 2059.0
+711.85303 16221.2
+712.10394 33698.0
+712.35443 27798.2
+712.60510 20663.4
+712.85516 8297.7
+713.10547 4245.3
+713.35474 757.4
+726.00238 773.6
+727.65796 811.7
+731.87042 1190.2
+732.36652 1403.1
+732.90607 1693.9
+733.34259 977.7
+733.90448 908.7
+734.00732 1184.8
+736.87042 1149.9
+737.36029 19275.5
+737.86078 16305.2
+738.12805 1754.3
+738.36182 7673.4
+738.85742 1971.8
+741.05505 966.8
+741.38873 980.8
+742.11224 756.4
+743.47717 687.8
+750.37549 810.3
+759.39587 1139.3
+760.35986 932.1
+760.48035 1993.1
+761.03857 836.6
+761.48340 951.6
+769.71576 834.7
+770.03979 1350.2
+771.36133 886.1
+775.37958 1785.3
+775.71667 1225.6
+776.04333 755.9
+776.37134 862.2
+791.47601 4936.1
+792.47876 1956.4
+792.74268 1508.3
+793.07391 918.5
+807.72467 979.6
+813.06903 946.0
+813.40552 2069.9
+819.39185 1059.0
+850.77124 1117.4
+856.45648 1469.4
+862.51257 13192.2
+863.51575 6361.6
+864.51794 1106.3
+864.90802 1035.1
+865.41632 1370.8
+900.13226 818.9
+906.46417 656.7
+921.45233 826.7
+949.46686 1385.8
+972.32056 585.6
+1035.49609 822.2
+1108.64282 713.5
+1116.33667 632.6
+1198.14648 3345.9
+1488.89514 717.9
+1525.53931 773.3
+1688.85913 662.7
+1777.63062 793.6
+1877.57178 856.8
+1879.50012 19887.8
+1880.20679 1078.4
+1882.87390 755.0
+1906.85950 6440.2
+1907.11719 2367.5
+1930.76416 1128.4
+S	1355	1355	480.0214721
+Z	4	1916.05459
+121.79910 2145.0
+126.24580 678.5
+126.85017 486.9
+136.83870 539.1
+146.02238 605.6
+152.57001 781.3
+156.09930 543.9
+157.15836 603.2
+157.18463 539.0
+157.59825 697.9
+169.38753 610.3
+171.98550 487.3
+171.99303 523.7
+188.25433 878.1
+188.26897 1047.0
+188.28020 1524.4
+188.29474 1121.6
+188.29979 1112.4
+188.31033 1049.7
+188.32091 604.6
+188.32898 622.5
+198.90062 798.1
+199.04076 546.0
+199.17467 836.4
+199.27290 1502.6
+199.28879 1793.5
+199.29790 1652.7
+199.30498 1016.8
+199.33194 525.5
+204.01405 583.3
+208.69760 557.0
+215.62341 616.1
+218.45930 570.4
+224.72159 622.6
+225.00041 524.8
+234.21790 549.2
+238.24785 574.9
+238.72635 626.7
+242.18539 1758.8
+254.62860 601.9
+257.15976 1672.5
+260.19629 13706.1
+261.19974 1653.6
+271.52505 549.5
+300.86896 625.6
+308.41138 559.4
+308.91037 807.7
+332.57162 580.2
+335.17395 2424.1
+338.73019 630.1
+342.31039 550.0
+350.28549 765.3
+370.24323 1903.8
+398.24002 862.4
+409.24326 788.3
+420.89139 672.9
+425.65094 571.4
+431.23801 735.4
+433.24918 633.9
+448.57684 653.7
+467.50040 1730.5
+467.75198 1531.5
+468.00482 1641.5
+489.83350 534.7
+506.93747 1265.3
+524.28809 2391.5
+524.78882 1914.8
+532.51904 1808.7
+545.30786 834.8
+546.94659 2433.7
+547.28192 1391.1
+549.17395 640.7
+552.95105 21159.9
+553.28522 19381.3
+553.61945 8822.6
+553.95575 2383.6
+554.28534 1121.0
+556.83966 575.6
+558.29675 718.3
+562.29663 9318.8
+562.63092 5799.1
+562.96503 4258.0
+563.29962 1806.9
+563.64063 1620.2
+563.96991 692.7
+571.30396 945.6
+576.97845 679.0
+580.82739 3243.0
+581.32733 1903.9
+582.64557 14732.3
+582.98016 13016.4
+583.31409 6639.1
+583.64734 953.9
+586.79169 1333.2
+587.29315 1256.9
+595.64978 2088.2
+595.98157 1276.9
+600.10815 712.9
+601.65265 24765.5
+601.98724 21134.5
+602.32159 11754.3
+602.65631 2717.8
+602.98767 814.3
+616.34583 6054.0
+616.84857 3018.6
+617.35095 1404.3
+621.80164 696.6
+630.30682 3677.5
+630.80920 2913.8
+631.30731 914.2
+638.30121 554.1
+667.33087 747.2
+669.31396 666.9
+669.51379 597.7
+676.66315 909.5
+680.86835 4095.4
+681.36755 3451.4
+681.87158 2020.2
+685.35016 1088.7
+686.84357 887.2
+715.35913 1395.7
+716.38733 3664.4
+716.88690 3196.4
+717.38757 1546.6
+730.88110 619.8
+735.87848 700.7
+743.87006 13893.2
+744.37250 9071.5
+744.87396 3408.5
+745.37177 1234.9
+756.38733 959.1
+759.90277 9673.5
+760.40381 8025.1
+760.90350 3860.0
+761.41919 891.1
+772.38141 17874.3
+772.88391 15056.3
+773.38574 5700.7
+773.88611 1692.0
+788.37720 1462.8
+839.75537 635.1
+947.58051 584.0
+1057.27759 689.8
+1066.84802 616.5
+1168.63635 711.4
+1198.16541 3383.5
+1400.33606 522.6
+1640.07190 733.2
+1742.80322 684.3
+1877.19214 685.8
+1878.34204 978.0
+1878.73767 1109.4
+1879.15784 3455.4
+1879.58972 19498.0
+1880.13684 3215.6
+1881.01147 813.6
+1881.30945 786.9
+1907.05847 7410.6
+1909.81665 577.4
+1918.71277 783.2
+1930.68298 782.9
+S	1357	1357	637.5563821
+Z	4	2546.19423
+165.78314 586.3
+184.79849 573.3
+188.21645 583.7
+188.25415 1012.7
+188.26913 1498.8
+188.28209 1918.2
+188.29065 2002.2
+188.29965 1948.0
+188.35532 809.9
+188.67447 497.3
+199.20213 784.4
+199.23845 894.8
+199.27684 943.7
+199.29044 503.9
+199.29929 2227.7
+199.31325 1291.5
+199.32515 601.5
+199.39586 1061.2
+199.41032 678.5
+212.10216 1010.5
+213.96152 529.0
+222.08707 1799.5
+223.07085 1601.9
+223.14647 644.7
+236.91438 573.5
+237.38663 620.6
+239.34290 550.4
+240.09758 4931.9
+249.78444 688.4
+252.15236 620.2
+280.19473 591.8
+283.01410 599.1
+293.70520 3491.0
+294.20679 1275.6
+294.42419 715.2
+301.11337 1685.7
+302.63297 608.8
+311.13449 7842.3
+312.13971 1187.0
+316.89658 622.7
+323.85489 572.4
+330.39471 614.5
+338.04929 604.1
+339.07538 547.8
+368.15588 1564.2
+368.19199 629.7
+372.15408 693.4
+374.14478 549.8
+376.93256 628.5
+381.38062 683.0
+408.15057 1578.2
+419.41254 638.9
+425.17603 2442.7
+426.62149 650.2
+434.65955 579.4
+482.68417 923.8
+523.17963 1098.5
+532.52289 2255.3
+540.20483 3614.2
+540.76288 568.9
+541.20276 960.0
+542.29932 1695.5
+542.79987 1060.1
+559.53607 598.6
+563.28448 2539.0
+568.76984 2288.5
+569.01715 1745.9
+573.02271 5713.9
+573.27344 8841.0
+573.52350 7021.0
+573.77313 3120.7
+582.29285 947.0
+586.40057 874.3
+591.83112 2789.0
+592.33099 1942.4
+600.29468 2531.4
+600.62579 1783.8
+600.95831 1223.3
+601.04260 742.5
+604.28650 784.5
+606.29596 1700.2
+606.63147 3459.6
+606.95905 1069.8
+611.24200 1881.1
+619.53174 1142.1
+619.78162 1336.0
+620.03809 1154.8
+620.28503 872.6
+624.03967 1374.2
+657.65460 1429.4
+657.98566 2565.7
+658.32251 1473.1
+658.65881 1974.4
+663.65961 7402.0
+663.99377 10160.0
+664.32599 3651.5
+664.66302 1384.4
+664.87640 674.8
+668.49554 595.8
+676.62775 838.5
+677.24872 724.7
+690.65826 897.4
+695.99622 2288.7
+696.33295 3120.6
+696.66846 2319.9
+697.00464 930.4
+702.00269 9549.5
+702.33502 11716.5
+702.67004 6246.5
+703.00659 2464.7
+703.33759 1122.6
+712.29034 1199.1
+713.28564 705.0
+713.86743 5389.9
+714.37042 3928.2
+714.87006 1922.8
+715.00732 2889.4
+715.33899 3342.6
+715.67371 2446.2
+716.00385 1669.1
+721.00916 11706.8
+721.34332 18558.0
+721.67657 10457.5
+722.01288 3980.9
+722.34601 1411.6
+727.99506 671.2
+728.68231 1028.9
+734.01422 5657.5
+734.34601 9207.2
+734.67877 7287.5
+735.01355 3128.2
+740.01569 33967.0
+740.34985 44628.5
+740.68451 30121.5
+741.01819 11952.1
+741.35223 3518.9
+752.36206 934.0
+753.34875 642.5
+757.69250 3186.5
+758.02515 8684.9
+758.35840 5154.7
+758.69324 3010.8
+759.34076 674.5
+763.69464 38384.7
+764.02893 55467.1
+764.36261 38511.7
+764.69696 14237.0
+765.03198 4048.3
+787.40112 3254.2
+787.90094 2916.8
+788.40399 2469.4
+788.90222 982.2
+795.58557 1331.0
+816.33368 670.4
+823.31995 874.5
+842.94159 829.5
+844.42120 6207.2
+844.92261 5901.0
+845.42627 3682.6
+845.93683 1217.4
+852.34235 1307.2
+852.83917 1052.4
+859.29523 723.0
+900.43164 1248.2
+908.94342 4316.5
+909.44293 5047.0
+909.94141 2918.0
+910.44989 1284.8
+926.37030 651.9
+954.83203 811.0
+959.46375 3271.5
+959.96930 5104.5
+960.47144 3296.8
+960.97345 1088.5
+963.38300 943.4
+981.39746 673.2
+994.98248 952.6
+995.48895 673.6
+995.99017 1232.0
+1057.19263 798.1
+1198.17371 3251.0
+1500.92224 814.8
+1582.68237 657.8
+1878.62158 1198.4
+1878.97107 1011.5
+1879.50378 19312.5
+1879.78137 2987.1
+1880.29590 1003.9
+1880.83716 748.9
+1907.05261 7361.8
+1917.76733 649.7
+1918.64087 933.3
+1930.64172 842.3
+S	1358	1358	539.455231267
+Z	6	3230.68444
+135.47740 530.7
+135.78073 478.6
+138.47102 560.6
+144.30800 582.7
+146.47458 536.0
+147.29134 582.4
+147.79503 632.0
+153.28551 551.3
+153.61559 544.2
+158.93884 602.7
+162.78313 598.7
+165.78197 803.7
+176.69133 495.8
+183.26440 648.1
+184.74573 568.6
+186.12419 602.6
+188.18408 651.1
+188.25655 1373.8
+188.26689 1633.8
+188.28287 2122.4
+188.29190 2255.0
+188.32387 1156.7
+188.35986 627.9
+198.89987 1144.5
+199.27850 1591.7
+199.29114 2811.2
+199.31512 654.0
+199.38933 887.5
+233.16457 4639.7
+233.98570 558.9
+239.42184 594.3
+247.90511 544.1
+249.15996 759.4
+251.14961 542.7
+252.10750 1348.4
+266.16058 1570.7
+272.25378 970.8
+275.12424 2072.0
+284.17142 1227.3
+288.20261 7564.5
+289.20721 838.6
+306.63965 1068.7
+338.63824 2959.2
+350.28409 974.7
+371.15720 962.1
+385.20294 621.2
+387.27032 7497.4
+388.20773 1457.0
+388.27246 1312.9
+395.92957 653.2
+403.21933 2214.1
+411.21793 676.0
+419.72397 2785.5
+420.22595 1646.1
+420.51996 648.2
+421.22934 2183.9
+426.26959 2752.7
+427.54901 876.6
+428.72888 8135.1
+429.22934 2863.4
+431.75946 5905.2
+432.26135 2196.7
+432.76111 857.2
+435.27112 1883.8
+454.69861 1033.1
+468.69534 2227.1
+481.29214 1002.7
+482.66083 847.1
+483.24811 800.1
+491.64154 715.7
+491.90894 6961.3
+492.24252 4998.7
+492.57727 3624.6
+494.33249 963.9
+499.27911 765.8
+511.35745 2958.9
+512.27698 901.5
+512.47620 2636.7
+512.68103 803.1
+512.87244 663.9
+515.87549 2558.2
+516.07831 3416.5
+516.29462 5040.6
+516.48047 1996.6
+516.67834 915.9
+517.30670 832.4
+517.65753 903.7
+517.85718 1027.2
+518.05969 1600.1
+520.79657 840.5
+521.99945 2329.0
+522.25079 3116.0
+522.50220 1577.9
+522.75336 1145.2
+523.77997 2039.5
+524.03387 834.4
+524.76691 608.8
+525.01282 1040.2
+525.82489 601.4
+532.55078 2014.9
+539.18555 754.0
+549.15503 770.2
+549.50958 689.7
+553.27875 778.2
+555.76544 708.6
+563.36426 1660.7
+564.28241 842.0
+564.37933 699.0
+564.49402 662.0
+565.69489 1175.9
+565.89313 777.2
+566.27960 2740.5
+566.48291 841.8
+567.61841 852.2
+569.30389 736.4
+569.88519 2578.4
+570.08319 1285.7
+570.53021 706.8
+572.78088 1023.0
+573.02832 713.6
+577.28271 948.7
+577.78870 762.9
+581.78082 1172.3
+582.53119 801.4
+584.09839 591.6
+584.29803 1384.3
+584.50238 1650.7
+584.69806 1460.9
+587.55774 1135.6
+587.70135 4837.0
+587.80701 692.2
+587.90240 6565.4
+588.10095 5850.2
+588.30273 2439.2
+588.50165 2698.8
+590.05579 2893.7
+590.30518 3899.9
+590.55676 4198.8
+590.80444 1376.8
+591.30298 9655.1
+591.50397 18134.0
+591.70422 14108.0
+591.90582 7189.3
+592.10516 4896.6
+592.30396 1402.8
+594.55786 4145.6
+594.80890 5525.1
+594.90485 5220.1
+595.06219 3565.4
+595.10632 10867.4
+595.30676 8264.9
+595.50922 2919.2
+595.70630 1780.7
+595.91046 732.7
+596.92139 960.5
+605.80206 1421.2
+606.29443 780.4
+606.58020 965.5
+607.30090 6588.2
+607.80347 6137.2
+608.30499 2123.4
+610.05115 794.8
+610.30450 816.2
+610.52625 1039.2
+610.70789 696.3
+612.52155 1591.3
+613.92120 3196.9
+614.12268 3140.6
+614.32379 2685.2
+614.52271 2340.6
+614.71790 1190.1
+617.52185 2953.3
+617.72119 4916.3
+617.92389 4111.0
+618.11627 2318.0
+618.32208 1846.2
+618.79578 810.0
+619.71637 805.7
+620.33844 596.0
+621.52014 2413.5
+621.71796 1266.5
+621.91833 723.9
+629.06622 534.9
+629.38489 2190.2
+630.38940 1141.1
+638.32294 1287.2
+638.57983 814.0
+640.09674 1005.7
+640.35004 1230.0
+640.84229 1249.5
+642.31335 1045.8
+642.56793 1652.6
+642.81580 919.6
+644.59393 2964.4
+644.84534 3060.2
+645.09485 1320.3
+646.82202 1778.2
+647.06885 2388.7
+647.31879 1592.3
+647.39630 4392.8
+647.56738 1962.6
+648.40088 1270.5
+656.30243 1591.2
+659.67157 2293.9
+660.00781 1749.3
+660.34253 1828.4
+660.67725 937.3
+662.43134 2365.5
+664.01074 714.8
+665.67712 1317.5
+666.01031 1511.7
+666.33752 1324.9
+666.83063 2160.5
+667.33167 4172.0
+667.82977 2152.8
+668.33716 1525.4
+670.31549 729.9
+674.85876 867.7
+675.08893 2717.3
+675.33832 2764.0
+675.59216 3452.0
+675.83984 2078.9
+676.08917 1403.7
+676.26978 3961.4
+676.60950 781.1
+676.68005 834.1
+676.86908 1205.9
+677.27289 985.2
+677.36536 869.0
+679.59137 4611.6
+679.84265 5535.6
+680.09271 6188.8
+680.34344 1504.4
+680.59937 1804.0
+680.85718 985.8
+681.69354 905.2
+694.50653 553.3
+700.60114 1493.4
+705.10815 1113.7
+705.35583 1950.7
+706.85797 1228.1
+707.10864 945.4
+707.35254 2616.4
+707.60059 7243.9
+707.85046 4708.2
+708.09857 2770.2
+708.35352 2391.2
+711.85254 10813.9
+712.10388 14344.5
+712.35413 13171.2
+712.60437 5945.6
+712.85553 2427.4
+731.13849 855.5
+732.00476 964.5
+732.36273 819.1
+732.90094 1029.9
+737.36011 10398.1
+737.63306 1000.1
+737.86121 7841.5
+738.13165 1121.3
+738.36255 3531.0
+738.86163 1416.3
+759.39154 907.2
+760.47736 1753.3
+764.29541 601.9
+768.76471 593.1
+769.38080 922.5
+770.04108 1523.4
+770.37115 610.2
+774.05585 635.5
+775.71582 779.9
+776.03912 820.0
+784.78375 668.1
+791.47412 2760.2
+793.07739 1241.6
+795.60052 1064.3
+807.39252 1147.4
+813.07098 872.6
+813.40472 956.5
+815.08661 666.3
+819.41187 745.6
+838.43408 741.6
+856.44934 726.0
+862.08655 682.1
+862.51190 6207.9
+863.51245 2748.3
+917.49396 610.3
+1198.23389 3480.6
+1525.43323 945.6
+1550.40601 762.2
+1859.24268 587.5
+1869.46704 697.5
+1871.99207 608.8
+1874.03174 597.3
+1876.77966 849.3
+1877.95679 650.5
+1878.89856 1477.6
+1879.49377 19409.7
+1879.77734 3691.4
+1880.08215 1779.0
+1907.05750 7249.8
+1930.60022 1169.3
+1964.42578 587.6
+S	1359	1359	647.1446306
+Z	5	3230.68403
+177.46643 522.1
+180.26424 597.7
+185.39809 587.4
+188.21913 673.8
+188.25533 783.1
+188.26738 960.5
+188.28055 747.4
+188.28891 1344.4
+188.29996 1007.4
+188.30916 1002.7
+188.32518 618.9
+198.90149 728.0
+199.19614 716.0
+199.21973 904.1
+199.27341 1800.8
+199.29446 1851.8
+199.30479 1327.8
+199.37424 1005.4
+199.39221 882.1
+222.05048 698.2
+225.89053 639.5
+233.16481 2015.1
+236.05234 618.2
+247.28917 630.2
+252.10977 934.5
+258.09787 733.3
+266.16083 2749.3
+275.12439 2074.2
+276.21231 543.6
+282.05966 575.8
+284.17209 1081.9
+303.82565 713.4
+328.83566 518.2
+345.63736 582.9
+370.20062 661.7
+371.15585 706.1
+381.35666 645.3
+387.27280 865.8
+388.21017 1240.5
+392.25452 655.3
+403.21786 1241.0
+408.07654 677.8
+411.79062 625.3
+417.54932 590.8
+421.22873 2230.9
+428.72919 11129.5
+429.22980 5028.5
+429.73215 1071.2
+436.73682 583.7
+464.13297 647.7
+485.40875 639.0
+501.29218 818.3
+506.21591 632.9
+516.30548 1255.4
+532.52710 2419.0
+534.31348 4783.7
+535.31512 1367.3
+588.62610 730.2
+590.05322 987.0
+595.30469 860.6
+596.27411 660.6
+605.96240 993.8
+607.29358 773.4
+607.55164 761.2
+611.80316 1841.7
+612.05646 798.3
+614.04327 1051.7
+614.29865 1196.5
+617.21924 555.4
+618.54858 1620.4
+618.79834 1957.7
+619.04919 2026.6
+619.30054 770.6
+629.07678 806.1
+629.38757 3461.4
+630.60608 627.0
+631.06409 856.6
+631.81561 921.6
+647.34546 666.9
+674.60278 817.2
+675.09460 1040.0
+675.34454 1856.0
+675.59167 1115.2
+675.83783 854.8
+676.65057 901.4
+679.10962 1585.7
+695.35260 741.4
+700.34070 663.7
+702.38049 1546.9
+702.58148 698.9
+703.62256 863.3
+706.87323 1349.3
+707.12000 1482.6
+711.12537 780.2
+711.36682 983.8
+711.62482 868.4
+719.37158 1258.0
+726.11987 755.6
+730.12225 1359.8
+730.37280 1862.8
+730.62054 1064.9
+730.87537 1221.8
+731.13635 917.7
+731.36591 911.1
+734.37567 2976.9
+734.62616 5581.2
+734.87323 5296.9
+735.12714 4215.1
+735.37500 1242.2
+735.62793 1695.3
+737.88086 953.0
+738.12396 1283.4
+738.38019 978.0
+738.64294 646.1
+738.87793 8791.2
+739.12939 13999.3
+739.37915 13433.6
+739.63025 4723.1
+739.88098 3264.4
+741.14795 827.6
+741.38647 2277.8
+741.64337 1105.7
+741.89874 875.6
+742.14172 1179.0
+742.45612 1076.0
+743.37952 8303.3
+743.63141 9211.6
+743.88245 7820.8
+744.13220 4587.8
+744.38104 1898.9
+745.64209 2231.3
+745.89417 3459.3
+746.14679 3481.2
+746.39722 1422.8
+756.69965 734.1
+759.39465 3175.1
+759.66199 565.4
+760.47925 2840.6
+761.48206 1038.4
+762.90369 1062.7
+763.13409 729.2
+764.02625 809.2
+765.13617 1072.4
+765.39453 1147.7
+765.64825 830.4
+767.14899 1070.7
+767.40143 1936.6
+767.65021 1507.6
+767.89691 2033.7
+769.71661 999.8
+769.89618 681.4
+770.03473 754.8
+770.15729 1134.0
+771.65063 2587.3
+771.89709 3808.7
+772.14868 4786.2
+772.39972 3477.5
+772.64215 1412.2
+772.90112 1095.7
+773.49243 565.1
+774.16254 807.6
+774.40045 1286.5
+774.65271 1502.9
+776.39252 2068.8
+776.64624 1544.6
+776.90521 1117.7
+777.13971 1438.2
+777.40393 1186.8
+777.73584 975.1
+786.40802 1891.7
+786.73920 2093.8
+787.07007 2328.7
+792.40802 3354.6
+792.74255 3469.4
+793.07257 2238.9
+793.41333 1386.2
+795.59961 1158.5
+796.79578 632.2
+801.09900 701.1
+807.40033 1002.4
+810.42755 854.4
+810.52246 615.0
+810.74615 705.3
+811.08093 986.7
+813.40009 1839.9
+813.73175 889.8
+814.86212 591.1
+819.39465 1179.8
+824.40051 1470.1
+824.73419 2448.9
+847.45142 1115.8
+850.42499 1076.0
+850.75958 977.4
+853.45654 1353.0
+853.78870 1127.3
+854.12219 904.2
+856.45874 3923.7
+857.08752 1443.7
+857.45532 2154.0
+858.10590 664.4
+859.12201 2138.5
+859.45685 4747.7
+859.79224 2315.2
+860.13269 1349.3
+862.09052 5057.5
+862.42657 6670.5
+862.76147 4658.0
+863.09436 2543.4
+864.91077 1013.2
+894.11816 1014.6
+894.77344 850.9
+899.78522 1906.8
+900.12592 2222.8
+900.44830 1544.4
+900.79657 1639.9
+901.12842 697.9
+937.48401 1162.6
+937.81787 1506.5
+938.15240 1283.5
+946.55975 1131.1
+977.83905 753.3
+983.17377 725.5
+983.49817 1049.8
+984.16583 758.2
+1036.40698 627.4
+1062.26465 741.1
+1063.04651 663.2
+1085.46460 834.4
+1134.66138 697.6
+1198.17957 3560.2
+1292.74011 776.2
+1299.39087 637.7
+1426.02429 663.6
+1481.83325 689.6
+1489.12292 577.7
+1587.35181 608.1
+1614.55042 571.6
+1615.90454 688.6
+1789.92114 601.6
+1878.03479 991.2
+1878.30518 655.4
+1879.17932 3659.7
+1879.53979 19145.6
+1879.91919 2923.2
+1880.19434 1033.8
+1881.20825 824.7
+1907.03528 7432.2
+1930.61108 973.1
+S	1361	1361	647.1451186
+Z	5	3230.68647
+165.78322 843.1
+174.17877 658.7
+177.55861 559.8
+182.56158 551.2
+188.27132 1972.1
+188.29242 2116.6
+188.31065 1423.5
+188.33543 733.9
+188.43742 582.9
+195.31540 737.1
+198.90311 937.8
+199.19180 1172.2
+199.26215 781.0
+199.28844 2500.1
+199.30508 791.1
+199.31030 706.0
+199.38519 1142.6
+229.61815 553.1
+233.16502 2829.5
+236.29410 877.1
+241.07837 610.4
+242.30379 738.2
+247.65782 519.7
+252.10983 1093.4
+255.19380 674.6
+261.16367 578.4
+266.16086 2574.9
+271.78061 788.0
+275.12512 2568.4
+280.34705 635.2
+284.17068 852.1
+290.88391 658.6
+306.72482 602.7
+308.91125 703.1
+348.21158 634.4
+351.76614 561.4
+364.23648 782.1
+370.19711 860.3
+371.15741 956.6
+378.14139 834.3
+381.37430 845.9
+387.83817 571.7
+403.21869 1810.8
+405.75516 803.7
+420.32892 627.7
+421.23016 2246.9
+428.72897 11188.0
+429.23077 4754.2
+473.29953 952.6
+473.78732 638.9
+482.66995 907.9
+484.86206 629.8
+501.29297 774.6
+516.30530 2266.5
+522.98315 602.8
+532.54645 2043.5
+534.31415 5197.0
+535.31421 1576.0
+549.17334 836.2
+552.77264 749.9
+561.77856 721.2
+562.60638 944.8
+563.27521 1354.6
+588.63013 1067.1
+590.30560 709.4
+594.55640 808.9
+607.55115 1003.1
+611.55286 1473.4
+611.80695 1696.8
+612.06152 879.6
+614.29437 1624.9
+618.54791 1563.7
+618.79767 1304.7
+621.92023 850.1
+624.79803 844.6
+629.38489 3064.7
+630.39777 1272.2
+631.34064 772.6
+664.12103 724.9
+670.83380 781.2
+674.85760 1223.6
+675.34265 2709.5
+675.59430 2049.6
+676.63599 1064.3
+679.11194 2285.2
+679.37018 942.1
+679.60992 1562.9
+683.34979 735.2
+690.36298 655.5
+698.31287 664.7
+702.37378 1285.9
+702.61499 780.0
+703.61932 894.8
+703.86426 670.8
+706.86938 2174.7
+707.11884 986.3
+711.36938 1077.1
+711.62616 1163.7
+711.85785 815.3
+719.37317 1419.0
+719.87836 803.6
+720.39154 942.7
+730.12073 1820.9
+730.36865 2233.8
+730.61993 971.8
+730.87164 1464.5
+733.61975 746.7
+734.37500 3849.3
+734.62579 9467.3
+734.87677 7525.1
+735.12616 4927.9
+735.37860 2724.4
+737.63062 984.9
+737.88306 1809.7
+738.12036 919.6
+738.38617 1098.2
+738.87811 11292.0
+739.12915 18725.3
+739.37915 14057.2
+739.63007 10681.6
+739.88062 6064.6
+740.12744 1218.9
+741.14038 1218.4
+741.39209 1663.8
+741.64514 1995.1
+741.89569 1057.5
+743.37915 6394.2
+743.48151 728.3
+743.63245 15057.7
+743.88281 11505.1
+744.13293 5274.2
+744.38232 1889.6
+745.64124 1115.3
+745.89465 3307.5
+746.14453 2676.7
+750.34216 874.9
+756.70447 1315.2
+759.39996 4079.0
+760.48145 2194.7
+761.48608 1290.4
+762.89532 846.2
+763.68909 836.2
+764.37732 764.1
+764.89819 1062.8
+765.15039 1149.8
+765.39874 1730.6
+766.36603 905.3
+767.15063 1053.3
+767.39789 998.0
+767.65137 2215.8
+767.88873 1687.9
+768.15131 691.7
+769.37415 1145.7
+769.71362 650.8
+770.04395 821.5
+770.81488 728.3
+771.65387 4169.6
+771.90167 5319.0
+772.15027 8257.2
+772.39832 4029.4
+772.64893 2093.8
+774.15887 1739.2
+774.39471 783.5
+775.74591 1232.1
+776.04565 811.1
+776.39337 1627.2
+776.64453 2954.2
+776.89764 3068.9
+777.14801 1671.0
+777.39899 1615.0
+780.73511 939.2
+781.06201 1319.3
+781.39893 782.6
+783.41229 1254.3
+786.40875 1333.3
+786.73889 1229.9
+787.06866 1781.4
+787.40460 736.3
+792.40991 3203.0
+792.74078 3808.1
+793.07867 2337.7
+793.41919 785.7
+795.59711 1033.1
+810.42786 810.9
+813.08044 1583.1
+813.40387 1405.9
+816.75836 835.4
+818.38928 678.5
+818.72601 1357.3
+819.05902 1378.4
+819.40735 1035.7
+824.39703 1702.3
+824.73016 2432.9
+825.06897 1781.3
+825.40515 1156.4
+843.41656 708.4
+850.42023 1401.8
+850.75177 872.2
+851.43176 1121.1
+853.12347 1422.8
+853.45728 2588.7
+853.79047 2578.6
+854.12207 1217.0
+854.44818 1119.3
+856.45782 5082.2
+856.75537 1450.2
+857.08130 972.8
+857.45801 1586.5
+859.12372 3353.2
+859.45770 6021.2
+859.78943 3333.4
+860.12677 1815.3
+860.46655 1123.1
+862.09314 4693.2
+862.42621 4962.1
+862.76172 3364.6
+863.09741 2476.6
+863.42621 1049.8
+865.41937 1050.5
+890.77911 871.5
+899.47345 734.7
+899.78937 1449.2
+900.12079 2907.8
+900.45911 2212.7
+900.79816 1369.7
+901.77905 911.7
+926.79852 718.6
+937.47675 1119.6
+937.81891 996.0
+938.15228 2294.4
+946.54510 939.3
+983.16876 908.0
+983.50323 1105.8
+983.83411 1515.4
+1057.24805 782.7
+1123.03247 598.9
+1198.21521 3444.5
+1452.41699 773.4
+1491.36768 736.0
+1777.42969 766.5
+1879.10840 1668.1
+1879.53101 19766.0
+1879.95947 1949.8
+1880.72327 830.7
+1907.00964 7320.1
+1907.29199 788.8
+1929.17297 609.2
+1930.64868 950.0
+S	1362	1362	539.4559646
+Z	6	3230.68884
+141.78027 561.0
+165.78125 705.3
+169.36325 585.8
+169.47681 814.1
+171.34903 549.2
+172.15527 564.0
+176.48744 570.7
+186.12453 879.1
+188.19003 601.0
+188.20123 601.9
+188.23413 587.1
+188.24564 1097.9
+188.27122 1911.3
+188.28064 1968.9
+188.29527 2048.0
+188.33078 719.8
+197.67938 695.5
+198.89630 1053.2
+199.18347 1254.1
+199.20157 609.4
+199.23326 815.7
+199.28490 2776.2
+199.29741 1189.7
+199.38391 802.8
+211.16844 545.6
+232.55896 547.7
+233.16443 4476.4
+249.16019 692.9
+252.10841 1195.5
+257.44559 583.8
+261.14108 604.0
+261.15897 1061.8
+266.16132 2233.6
+275.12552 1835.5
+284.01004 589.5
+284.17120 2100.2
+284.87613 517.3
+288.20255 7994.3
+289.20749 847.3
+308.87271 693.1
+315.19955 694.2
+325.66229 625.8
+331.72037 1235.7
+338.63843 1682.9
+349.06671 639.7
+350.14532 873.3
+356.98853 751.4
+368.03775 547.3
+371.15762 1119.9
+378.14041 2045.2
+387.27042 7065.4
+388.20743 1273.3
+388.27591 1098.0
+396.15103 1145.8
+403.21930 1932.8
+410.71704 1167.5
+414.19507 756.9
+419.72379 3100.4
+420.22821 1105.2
+421.22940 2088.1
+426.26889 2067.3
+427.50604 899.1
+428.72882 8297.6
+429.23001 4537.1
+429.73203 1155.6
+431.76001 10049.0
+432.26172 4385.0
+435.27087 3651.3
+454.02036 614.7
+454.70123 1254.4
+468.69601 2022.1
+470.18484 918.1
+473.78180 888.9
+476.26715 582.9
+481.29483 1640.4
+482.60916 952.7
+486.78836 918.9
+491.90939 5294.8
+492.24210 3922.5
+492.57602 2419.5
+495.72946 622.1
+498.30225 783.6
+499.27374 690.1
+506.66150 655.3
+507.06281 951.1
+507.24411 703.2
+509.06448 601.4
+511.35922 1247.3
+512.28149 1192.5
+512.47870 3218.6
+512.67957 1751.6
+512.87366 1131.3
+513.26160 809.3
+513.92108 753.1
+515.87732 2097.3
+515.94086 724.0
+516.07770 4798.8
+516.29242 4761.0
+516.47504 1626.3
+517.31177 993.3
+517.65643 872.3
+517.85864 1382.8
+518.06171 1356.6
+518.26801 673.9
+520.79614 1124.8
+521.99963 2507.7
+522.25104 1872.0
+522.50696 1196.9
+522.75220 1022.5
+523.52631 1144.6
+523.77893 1243.3
+525.27930 758.5
+532.57001 2027.2
+549.10980 1002.1
+550.33514 690.5
+552.77509 1047.9
+557.31610 651.7
+561.78082 687.5
+563.36603 2840.3
+563.73413 574.1
+564.36517 902.1
+565.49573 1005.7
+565.89648 1403.7
+566.02130 757.6
+566.28381 1435.3
+566.48322 936.2
+566.68347 1135.1
+567.94757 644.6
+570.08643 1199.3
+570.28333 944.7
+570.54004 1113.2
+573.29138 903.7
+573.62445 1065.0
+573.95313 722.8
+577.27588 1430.6
+577.53467 1375.5
+577.78131 1527.0
+578.03583 897.1
+580.89783 830.9
+581.78174 1586.2
+582.03540 1721.6
+583.30951 1423.1
+584.49658 1799.6
+584.69788 2258.4
+584.90070 1086.0
+586.05493 871.6
+587.70203 3433.0
+587.90265 8567.1
+588.10168 9689.7
+588.30212 4822.2
+588.50348 3905.9
+588.70300 746.2
+590.05731 1512.9
+590.30823 3120.9
+590.55664 3189.9
+590.80841 831.4
+591.30365 10064.3
+591.50409 21769.5
+591.70428 19400.3
+591.90619 11261.7
+592.10657 5118.5
+592.30713 1177.4
+592.50470 803.9
+592.70361 742.4
+594.55945 2769.6
+594.80841 4500.5
+594.90533 5396.2
+595.06030 3113.3
+595.10675 10313.5
+595.30670 11244.8
+595.50739 6179.4
+595.71057 991.3
+595.91040 1055.8
+596.71533 665.8
+601.29718 836.8
+603.55341 932.3
+605.54688 757.6
+605.79840 1166.3
+606.29755 1399.2
+607.30237 5697.8
+607.80292 4480.8
+608.30634 1231.2
+609.11536 748.7
+610.05164 726.1
+610.30090 878.1
+610.54211 1018.1
+610.81287 844.7
+613.92059 2808.7
+614.12140 3937.3
+614.32379 3933.1
+614.52191 2053.5
+617.52185 2960.9
+617.72198 7196.9
+617.92242 7194.3
+618.12274 6460.4
+618.32666 2736.9
+618.52679 834.2
+619.28864 631.8
+619.72235 785.5
+621.31610 1104.9
+621.51477 1525.7
+621.92206 1498.2
+624.26404 594.9
+629.38538 2400.4
+630.35602 775.4
+635.82098 928.3
+636.09894 671.9
+636.33618 1316.7
+637.31866 605.7
+638.57104 834.5
+640.09552 1381.8
+640.35059 1116.0
+640.59576 2166.7
+640.83984 975.8
+642.56696 2648.4
+642.81433 1568.2
+643.65436 756.2
+644.00140 938.6
+644.59546 3299.8
+644.84589 5142.0
+645.09479 2745.1
+645.34998 1630.8
+645.60101 824.2
+646.82062 2406.8
+647.07214 2914.4
+647.32056 2496.5
+647.39728 4309.1
+647.57068 2014.7
+648.40112 1158.6
+656.30151 1196.7
+662.43231 3276.3
+663.42944 975.9
+666.83789 1158.6
+667.32922 3102.9
+667.83032 1900.2
+668.33319 912.7
+670.59027 838.0
+671.34528 1334.6
+671.58600 654.3
+671.84454 818.1
+674.88702 680.0
+675.09088 2092.2
+675.33966 3712.0
+675.59088 3447.5
+675.84137 2299.6
+676.09503 1853.2
+676.27051 2544.7
+676.36902 1812.6
+676.63000 1231.2
+676.72742 649.7
+676.86304 1961.1
+679.11285 853.2
+679.59326 1766.7
+679.84174 7295.3
+680.09424 6616.1
+680.34680 3726.3
+680.59265 2141.8
+681.10803 1083.1
+681.34692 1253.9
+688.82764 780.8
+700.60236 1153.3
+700.85400 768.4
+703.34467 925.3
+704.86200 991.2
+705.09894 1718.3
+705.36139 1540.2
+706.85834 986.3
+707.10052 1080.9
+707.35156 3778.3
+707.59991 5019.8
+707.85034 4197.2
+708.10382 3499.7
+708.35382 1548.1
+711.60785 978.1
+711.85242 8753.4
+712.10382 14764.9
+712.35443 15704.2
+712.60498 7219.5
+712.85675 4594.0
+713.10858 701.1
+718.90979 2348.9
+719.41382 1384.8
+723.34216 1011.6
+725.36469 796.6
+732.00989 1561.9
+732.90686 3400.1
+733.41345 2314.3
+733.90796 1734.9
+737.35938 9822.7
+737.86041 7048.2
+738.13220 788.6
+738.36090 3604.6
+759.39496 751.4
+760.47913 1289.1
+769.37506 1455.8
+769.70435 1866.7
+770.03357 633.2
+771.02466 780.8
+775.38214 896.6
+775.70978 951.8
+791.47571 4014.9
+792.47150 1215.2
+795.57513 943.1
+807.40161 1179.2
+813.06506 1060.3
+862.51276 9358.7
+862.75153 782.9
+863.51672 3753.5
+864.52069 1076.3
+868.28979 705.1
+906.12256 887.2
+1019.69965 782.9
+1173.35388 607.9
+1198.27405 3586.1
+1218.52380 619.0
+1220.23352 596.8
+1278.65894 576.5
+1374.57446 729.9
+1466.27991 709.8
+1507.45288 574.3
+1641.64417 697.5
+1667.01257 635.8
+1859.95215 666.8
+1878.33618 756.7
+1878.54016 814.4
+1879.20605 1967.4
+1879.56177 19080.9
+1879.93494 2612.6
+1880.73364 751.8
+1907.00476 6833.3
+1918.59998 632.9
+1986.23376 590.6
+S	1363	1363	780.8568596
+Z	4	3119.39614
+203.05287 608.4
+211.97691 552.6
+232.07164 601.7
+232.48904 634.7
+243.07942 739.6
+246.15544 2083.0
+260.10355 722.3
+260.29880 525.8
+271.62552 734.2
+295.80701 661.9
+308.19962 663.3
+308.69409 627.9
+308.85425 606.0
+308.87512 838.8
+341.65146 549.9
+357.47406 637.8
+401.98770 603.1
+421.70786 831.6
+425.11404 780.3
+436.46777 653.9
+451.12567 573.7
+465.04233 608.9
+475.88565 636.8
+482.61005 788.3
+482.64828 672.2
+487.97931 562.3
+532.51746 2060.3
+548.08063 592.8
+549.26215 1134.2
+561.23389 614.0
+617.71564 676.9
+622.29498 846.1
+676.62170 1207.4
+691.47382 723.4
+697.76819 587.3
+736.33905 810.6
+738.82593 1088.3
+743.34308 2181.8
+744.33716 750.3
+751.82916 1175.3
+754.73438 1727.0
+755.06616 4725.7
+755.40277 2148.1
+755.73236 2126.2
+755.83197 2092.0
+756.07831 3006.5
+756.33075 936.7
+756.57965 1193.7
+758.00836 1255.7
+758.34552 1985.5
+762.84381 1054.3
+795.58679 744.8
+811.69421 2691.6
+812.02472 2270.9
+812.36060 1781.9
+820.53015 638.3
+824.85724 1309.9
+825.35858 1366.4
+842.41296 1074.8
+849.71643 1994.6
+857.97375 629.5
+862.38904 701.1
+868.39258 7013.1
+868.72736 9711.3
+869.06067 7208.4
+869.39557 2187.4
+880.24146 705.6
+881.59821 590.3
+882.86853 820.5
+910.89056 1467.4
+911.38812 1213.2
+911.73981 1887.3
+912.07654 2094.2
+924.75024 1362.5
+925.08270 1882.5
+926.39935 725.1
+930.41510 11382.9
+930.75006 15567.1
+931.08331 10540.7
+931.41663 4138.4
+931.75244 1315.5
+932.08887 682.9
+939.39600 7234.4
+939.89508 5749.6
+940.40027 2622.4
+940.89771 1045.0
+948.09094 1412.5
+948.42157 3021.2
+948.75684 1640.5
+949.08136 1766.8
+952.93842 664.2
+953.40643 781.4
+954.09344 21149.3
+954.42761 27519.7
+954.76154 21932.6
+955.09613 13260.5
+955.43127 4454.5
+955.76288 1620.7
+958.74194 2329.6
+959.07874 3909.7
+959.41174 2140.6
+959.74414 1052.1
+974.91528 3379.4
+975.41614 3763.9
+975.91895 1736.8
+1007.43542 1229.7
+1007.76819 2455.6
+1008.10675 2460.1
+1008.44891 905.0
+1011.63110 677.8
+1013.95618 823.4
+1056.08728 614.3
+1057.21008 910.8
+1092.73560 779.5
+1094.46863 722.0
+1094.96387 982.7
+1095.45410 714.3
+1139.97449 996.6
+1179.51282 2017.0
+1180.00769 2015.6
+1195.86755 675.0
+1198.15833 3261.0
+1216.24609 729.6
+1272.55688 2259.9
+1273.04272 1525.6
+1273.54016 1548.1
+1308.06189 3539.4
+1308.56604 3572.0
+1309.06506 2661.7
+1309.55566 1625.8
+1367.49207 629.3
+1489.04248 846.0
+1511.82678 886.6
+1694.29944 670.7
+1772.65088 665.9
+1777.46240 684.0
+1878.20435 802.0
+1878.44006 945.3
+1879.48010 20082.5
+1880.26355 816.8
+1880.51953 1177.7
+1907.05115 7289.5
+1918.37573 695.2
+1929.24524 727.1
+1930.43372 826.3
+S	1365	1365	621.2789171
+Z	4	2481.08437
+176.94876 592.6
+186.31444 663.8
+188.24521 765.6
+188.25476 1060.3
+188.27742 2043.6
+188.28909 1668.8
+188.29892 1934.0
+188.31497 1281.7
+188.32755 745.4
+194.90123 644.6
+199.18739 911.6
+199.26256 1191.0
+199.28560 1984.4
+199.29918 859.0
+199.31271 652.6
+210.07309 671.4
+222.08786 862.8
+233.57083 532.2
+240.09727 2470.9
+242.73227 642.1
+252.02487 612.3
+270.97470 500.3
+271.71786 605.8
+272.03336 680.9
+276.99698 662.3
+279.21066 532.6
+279.84381 607.1
+297.19281 610.2
+301.11472 655.3
+311.13458 3601.9
+336.74197 609.2
+363.21124 661.3
+368.15558 1448.6
+404.74588 598.7
+408.14963 1106.8
+425.17627 1491.4
+439.55978 657.6
+442.97577 603.7
+499.30673 633.4
+532.52002 2216.8
+540.20050 924.2
+541.92114 944.8
+549.14575 797.3
+552.48401 676.7
+556.75397 2623.3
+557.00378 2259.5
+557.25299 1505.7
+557.50287 863.9
+559.28894 875.3
+579.27258 752.3
+582.28033 853.8
+584.93439 866.7
+603.76294 779.0
+607.77448 911.8
+608.01544 1487.1
+608.28473 980.2
+641.96436 1892.0
+642.29657 2764.3
+642.63586 1078.3
+672.32684 647.1
+674.29987 1663.3
+674.63538 1238.0
+674.96564 731.2
+676.63989 1192.4
+680.30615 5302.6
+680.64038 5976.4
+680.97339 2200.9
+681.32745 2074.3
+681.82733 1543.1
+693.64685 1961.0
+693.97510 1119.4
+699.31329 9526.8
+699.64636 8979.1
+699.98505 4606.7
+700.31635 2173.7
+712.32318 1329.5
+712.64935 3438.0
+712.98499 3106.7
+713.32336 1278.5
+714.66364 646.1
+718.32037 19304.0
+718.65460 21439.9
+718.98914 14387.1
+719.32281 5564.7
+719.65814 1117.0
+732.08093 738.9
+735.99554 2371.0
+736.32947 4533.6
+736.66315 2339.4
+737.32727 951.3
+741.99915 25974.6
+742.33350 31051.8
+742.66748 16868.7
+743.00256 6086.7
+743.33325 2077.8
+754.85669 1820.3
+755.35693 1367.3
+759.08691 708.4
+795.58582 1039.1
+803.88464 1559.9
+804.38373 1313.6
+811.88116 4531.2
+812.38049 2330.0
+812.88208 1449.2
+876.39941 1510.5
+876.90387 2872.4
+877.41144 919.1
+926.91736 1357.7
+927.41907 1550.6
+1057.23315 843.9
+1189.15552 759.5
+1198.16736 3335.5
+1308.13733 582.6
+1343.50037 644.4
+1667.03870 714.4
+1777.42603 770.2
+1836.75867 627.2
+1866.15088 713.8
+1874.19751 766.6
+1877.09644 847.7
+1879.05725 1416.6
+1879.53784 19921.5
+1879.95166 1140.2
+1880.73682 805.4
+1882.55115 718.6
+1907.04968 7244.2
+1930.52698 719.3
+S	1366	1366	780.8493521
+Z	4	3119.36611
+200.32835 545.9
+212.22380 709.8
+229.85005 630.1
+249.25516 563.6
+251.35829 613.8
+262.71799 659.3
+271.62347 834.0
+272.09216 760.0
+280.14737 610.5
+337.59351 559.8
+342.23392 790.7
+456.53149 646.8
+485.66910 724.0
+489.06781 727.3
+532.53815 1788.7
+549.08801 934.0
+618.63702 585.8
+621.44360 663.3
+630.33142 687.2
+676.63043 864.7
+683.20752 640.0
+741.42737 709.0
+752.61523 607.2
+754.73639 1002.2
+755.06720 2635.8
+755.40381 1342.7
+795.58728 848.3
+868.39343 754.1
+868.71973 962.1
+905.30402 747.1
+930.74707 1134.4
+931.07483 821.6
+931.41577 878.5
+948.43262 833.6
+954.09174 3031.8
+954.42969 3439.9
+954.76569 1795.6
+955.09503 1136.2
+1057.24768 852.5
+1075.46863 673.4
+1091.54089 655.0
+1121.90515 656.0
+1198.20801 3117.1
+1281.42700 715.4
+1525.23376 1158.3
+1530.37939 623.5
+1559.42676 776.1
+1785.25085 598.5
+1878.00378 860.8
+1879.01978 1919.4
+1879.21643 1169.0
+1879.51953 19698.9
+1879.99060 2177.8
+1880.93518 977.6
+1907.03003 7426.6
+1927.14404 695.2
+1930.36841 773.6
+1971.54846 637.8
+1983.31482 650.8
+S	1367	1367	1879.9558246
+Z	3	5636.592
+Z	2	3758.064
+519.62854 623.1
+529.57300 618.4
+532.50867 1752.2
+540.84857 538.5
+544.99255 588.0
+660.45605 593.4
+676.62512 916.9
+678.36902 594.3
+726.85236 681.2
+795.57312 810.8
+857.92810 589.8
+930.58362 625.9
+973.77551 683.2
+1020.84784 679.0
+1102.18811 660.9
+1143.47754 636.3
+1188.34082 693.1
+1198.14441 3093.0
+1249.73376 769.4
+1525.17737 839.5
+1765.95850 854.3
+1777.47595 988.8
+1875.43176 639.1
+1878.74158 802.4
+1879.50647 19881.4
+1879.89575 857.2
+1880.02209 763.4
+1880.25024 665.1
+1906.89038 7420.1
+1907.18665 721.9
+1907.45715 723.1
+1930.31812 993.9
+S	1369	1369	669.5649896
+Z	4	2674.22866
+180.56314 558.6
+188.25797 1733.2
+188.27100 1638.3
+188.28693 2012.7
+188.29837 1787.2
+188.30882 1425.3
+188.32037 1157.7
+188.34253 721.1
+188.94762 641.2
+190.48761 577.0
+196.94902 643.3
+198.89723 725.1
+199.20438 838.3
+199.27405 1784.9
+199.28391 1648.6
+199.30025 1919.1
+199.31441 832.4
+199.38014 1023.8
+199.39905 1087.3
+240.09729 2818.7
+241.09744 718.7
+282.05234 611.8
+301.11267 2478.7
+311.13446 4773.2
+312.13879 854.6
+315.55173 651.4
+323.13300 707.5
+353.28033 668.9
+354.27286 739.3
+357.72122 14670.1
+358.22253 5664.6
+358.72513 952.6
+368.15582 1482.5
+372.15121 925.3
+425.17712 2909.2
+427.49673 992.5
+446.49747 645.4
+470.06314 750.5
+470.58636 675.6
+482.60245 847.3
+518.92310 681.2
+521.30206 640.4
+527.27032 682.9
+532.54773 1514.5
+532.58643 721.0
+540.20276 4655.9
+541.20734 993.0
+583.01801 872.6
+586.45520 608.8
+586.80676 615.5
+600.52704 3346.7
+600.77832 4287.6
+601.02856 5043.4
+601.27875 2056.5
+601.53149 2220.3
+605.03015 11377.8
+605.28064 14053.7
+605.53088 15279.4
+605.78125 7951.6
+605.96356 1557.3
+606.03577 2019.2
+606.28796 2648.4
+606.62994 3099.5
+606.81580 1663.2
+611.23901 2241.3
+613.41986 702.2
+630.33728 700.5
+642.96851 1656.3
+643.30316 3030.7
+643.96973 976.3
+648.97540 4603.1
+649.30896 5727.2
+649.64282 5179.7
+649.97784 2798.4
+651.53766 677.1
+651.79120 1178.4
+652.04651 932.7
+655.84912 1110.6
+656.35010 1390.5
+676.61871 781.5
+682.65997 1748.1
+682.99286 2051.2
+683.32324 2023.5
+683.65924 1019.9
+692.80725 663.6
+694.28296 828.0
+700.33191 1357.0
+700.66522 2583.4
+700.99994 1426.7
+701.33679 1822.5
+701.66089 804.7
+706.33691 13448.3
+706.67084 18289.8
+707.00500 14552.9
+707.33862 7554.3
+707.67316 2008.7
+713.86456 1616.3
+733.33923 800.5
+738.67859 1752.2
+739.00897 2970.1
+739.34241 2753.1
+739.67505 1295.0
+744.67786 7417.3
+745.01361 13084.6
+745.34644 10095.0
+745.68158 5333.6
+746.01587 1292.4
+750.36456 1065.2
+750.86865 855.5
+757.67816 2220.1
+758.01282 2521.6
+758.35034 2766.4
+758.68329 1859.3
+763.68439 12615.3
+764.01996 17176.3
+764.35400 13198.5
+764.68860 8075.9
+765.02283 2886.0
+770.68182 906.8
+776.68915 2914.4
+777.02441 4793.7
+777.35706 5727.2
+777.68970 3504.1
+777.88123 1483.4
+778.02197 796.6
+778.38568 1817.0
+782.69281 17194.2
+783.02704 32531.4
+783.36096 27499.6
+783.69543 16911.4
+784.02924 4677.9
+795.58167 836.4
+800.36145 1317.7
+800.70288 5459.0
+801.03394 3261.5
+801.37122 2663.0
+801.70398 950.5
+806.37140 18373.0
+806.70557 33747.9
+807.04004 26341.9
+807.37427 15285.2
+807.70728 4457.3
+851.41571 1804.9
+851.92133 1542.0
+852.34705 878.0
+852.42035 1213.8
+852.84131 1403.9
+873.12000 677.2
+900.94275 788.8
+901.43298 1645.6
+908.07306 763.5
+908.43872 2102.8
+908.94086 1683.1
+909.43982 1941.5
+954.36292 947.0
+954.87274 1352.9
+962.88422 2239.2
+963.38306 2016.2
+963.88275 1830.2
+973.45209 1212.3
+973.96405 1591.1
+981.39575 790.5
+984.24683 677.5
+1024.48914 1190.6
+1057.22473 861.4
+1198.23083 3168.8
+1253.09851 703.3
+1291.35376 696.0
+1379.78113 700.5
+1380.64587 602.2
+1525.23181 672.2
+1877.95325 641.5
+1878.90796 2654.7
+1879.49585 19474.0
+1879.78662 2372.9
+1880.11340 1666.4
+1880.39514 755.2
+1880.77136 1035.7
+1906.86389 7114.7
+1907.26770 735.2
+1918.67554 727.4
+S	1370	1370	624.0996571
+Z	4	2492.36733
+160.30809 543.2
+166.59825 554.9
+180.22842 611.2
+185.10861 653.1
+188.20409 602.4
+188.22562 499.9
+188.24739 750.1
+188.27838 2017.1
+188.28178 2008.3
+188.29688 2150.0
+188.31361 1349.2
+188.34686 544.9
+198.89833 829.7
+199.18272 1243.2
+199.21014 750.6
+199.24263 724.8
+199.26141 941.9
+199.27080 1327.8
+199.28020 2434.9
+199.30812 721.5
+199.37756 985.7
+199.64481 730.0
+200.56033 576.2
+201.92784 635.7
+230.02011 673.1
+238.72447 770.4
+246.18066 1992.3
+254.79402 606.1
+264.10242 655.8
+273.16525 573.4
+292.64948 689.8
+347.28635 623.3
+357.14850 589.7
+382.13995 698.9
+428.72827 9113.6
+429.23035 3533.3
+429.73111 818.1
+446.25919 4701.1
+447.26440 1202.1
+501.71539 757.2
+526.05920 903.6
+529.16522 620.7
+532.54510 2074.5
+534.72253 651.8
+538.86798 618.2
+545.33411 1184.4
+546.32452 658.0
+546.73553 856.7
+562.27039 853.1
+570.80292 2760.7
+571.05463 2766.0
+571.30432 1205.4
+588.69318 636.6
+590.91486 677.5
+602.82648 667.5
+606.25781 584.1
+659.36975 4035.6
+660.37244 1028.3
+676.62537 1014.3
+680.97247 748.6
+683.03485 1959.1
+683.37103 1715.5
+683.70642 1627.9
+699.98328 933.2
+702.37292 1328.6
+712.87744 761.6
+713.38416 1079.3
+718.98834 3098.1
+719.32184 1795.1
+719.65656 2156.8
+737.31696 557.8
+742.32813 974.3
+742.66754 4455.4
+743.00195 2566.0
+743.33447 813.7
+744.73657 831.2
+745.40991 851.4
+749.72852 2227.0
+750.06567 1690.7
+750.39740 1289.7
+759.39819 1724.8
+760.73535 8969.9
+761.06940 12661.0
+761.40399 6902.1
+761.73816 1663.9
+762.08215 1056.7
+785.17438 599.4
+795.46661 604.1
+802.42316 1072.3
+802.75281 753.9
+811.41510 3216.2
+811.91736 2540.4
+812.42291 1005.4
+812.91840 679.3
+818.95251 5336.6
+819.45557 2958.4
+819.95313 2389.7
+856.45081 3605.1
+857.44031 1271.8
+868.44592 676.8
+882.45673 987.3
+917.97192 2387.7
+918.47858 1606.6
+1018.52069 1147.1
+1039.07690 708.8
+1040.59180 594.2
+1057.22876 832.5
+1111.98706 628.0
+1198.22290 3063.0
+1221.54187 648.9
+1359.07898 613.4
+1525.45105 750.5
+1608.40503 620.6
+1663.22095 664.2
+1666.96497 796.4
+1833.44373 677.6
+1875.31323 622.5
+1878.88257 1408.4
+1879.13464 1529.7
+1879.49219 19545.7
+1879.84729 1979.1
+1880.11218 869.0
+1880.72693 558.6
+1906.84460 6868.0
+1930.60144 1141.4
+S	1371	1371	499.4817266
+Z	5	2492.36951
+139.91774 1340.2
+164.22688 1350.3
+165.05984 1356.7
+171.50705 1264.5
+182.78316 1797.0
+188.26152 2105.7
+188.27229 2646.0
+188.27826 2470.9
+188.29309 3388.0
+188.30452 2897.1
+198.89590 1966.8
+199.16051 1618.9
+199.25716 4380.7
+199.26392 4052.3
+199.27567 1424.8
+199.28343 4561.7
+199.29346 3215.6
+199.32079 1325.7
+199.35541 1342.3
+199.40416 1490.3
+255.29053 2114.3
+288.20322 2122.9
+376.08295 1669.4
+387.26743 1798.5
+444.02435 1205.8
+446.25940 2172.3
+501.79224 1446.3
+532.52576 3470.4
+549.16089 1450.3
+591.83136 1260.8
+630.41260 1675.0
+676.64868 2818.9
+697.68518 1281.7
+700.33759 1337.4
+702.69684 2320.8
+703.03101 3106.3
+703.23914 1390.2
+703.36475 2377.3
+753.33093 1299.6
+779.18921 1270.2
+795.56982 1857.1
+1011.47778 1426.1
+1021.15002 2015.1
+1032.09302 1262.0
+1057.25671 2204.5
+1106.01367 1457.1
+1198.19250 5791.6
+1198.32349 2603.2
+1221.58179 1291.3
+1226.34595 1616.8
+1293.00696 1452.0
+1338.74329 1307.6
+1351.12842 1429.8
+1590.23303 1389.1
+1690.80310 1327.6
+1789.04749 1322.2
+1878.78064 2630.2
+1879.55737 45295.3
+1879.84448 7151.8
+1880.27502 2432.4
+1882.42822 1603.4
+1906.48718 1366.7
+1907.04565 17818.8
+1930.62256 2042.7
+S	1373	1373	671.800991267
+Z	2	1341.754
+Z	3	2012.128
+175.10226 19561.6
+188.02470 20437.3
+192.98395 18935.4
+198.89523 22227.2
+199.18477 23476.4
+199.24593 15005.7
+199.26080 54625.0
+199.27303 57623.9
+199.28366 34494.2
+199.37143 31864.7
+210.57834 18148.6
+222.60690 19890.9
+233.12047 18064.4
+240.21779 17237.7
+248.48306 16534.5
+257.85110 15783.2
+262.63074 19855.1
+271.28098 25618.2
+282.09262 19767.7
+296.79605 18678.6
+298.43219 17715.8
+299.13858 83533.3
+302.31845 21009.4
+308.91351 19061.4
+323.81732 18464.8
+331.77258 23803.0
+341.70831 17022.2
+364.50519 21864.0
+377.14703 16201.7
+381.37173 21027.1
+388.25412 19084.8
+389.15262 17164.4
+397.92084 16374.3
+447.27829 20828.0
+457.61993 19791.6
+530.15967 19004.3
+532.51160 57266.6
+544.34497 26673.4
+579.65686 22151.5
+598.32043 84799.7
+598.82092 55215.8
+605.52832 29130.7
+607.32513 107656.9
+607.82898 25943.1
+616.29364 22723.6
+630.42798 29828.0
+648.84332 19091.4
+650.88629 18603.1
+656.04218 32691.4
+676.63898 25203.0
+745.01807 26097.3
+764.02124 19548.5
+782.69189 23773.5
+783.03003 24164.2
+783.36084 23722.9
+786.46735 35882.0
+795.57056 27184.6
+806.71002 59070.5
+807.03827 24339.4
+826.40466 24425.2
+842.27582 17649.8
+856.44739 19967.5
+887.51605 176294.6
+888.52179 89159.5
+967.35095 21512.0
+1057.25928 21679.4
+1198.14282 94427.9
+1213.64392 820972.8
+1214.64636 615274.4
+1215.64709 219366.2
+1345.59961 20177.4
+1516.48279 19819.6
+1879.54846 553984.8
+1879.82776 95748.1
+1881.27393 31580.5
+1906.98376 213049.7
+1931.71790 26698.7
+1956.86060 26735.3
+S	1374	1374	440.2233746
+Z	4	1756.8622
+115.43059 494.6
+115.73357 621.1
+117.19611 516.1
+120.66055 822.7
+121.79984 2016.0
+141.21533 511.1
+146.78719 549.8
+146.91887 703.6
+152.77650 648.2
+159.73463 559.9
+165.07689 581.7
+165.78293 794.1
+179.23230 533.4
+184.65234 607.0
+190.63065 535.8
+192.49112 511.9
+198.89925 978.5
+199.17241 749.9
+199.23604 1149.9
+199.25911 1404.0
+199.27008 2594.2
+199.28090 1690.7
+199.36804 734.2
+199.38069 640.4
+214.11613 601.8
+243.73309 560.9
+267.27643 594.1
+286.17725 622.1
+289.52808 571.6
+299.78784 562.0
+308.89099 713.5
+311.32578 574.2
+350.27859 701.4
+369.73703 571.1
+374.81876 661.5
+379.43216 944.9
+395.96463 762.6
+399.19250 859.7
+399.52597 1367.0
+408.19455 698.2
+440.03827 559.4
+446.48666 543.5
+448.55258 731.1
+457.90717 888.6
+476.76779 710.3
+489.92325 6012.5
+490.25830 5310.9
+490.59338 2205.6
+505.57440 1466.0
+527.61786 2050.0
+527.95258 2374.7
+529.28119 551.2
+532.58521 2229.2
+618.04504 594.4
+630.38855 760.5
+643.52759 670.6
+657.09729 602.0
+676.48926 641.8
+676.65100 1046.2
+731.09363 673.3
+809.84357 545.3
+853.64087 591.2
+902.95410 572.7
+914.25446 658.3
+998.90527 612.9
+1020.09723 567.3
+1057.25525 677.6
+1168.41687 654.9
+1198.30371 3291.5
+1235.96777 655.0
+1492.01990 618.2
+1496.61792 629.4
+1754.36853 607.9
+S	1375	1375	539.4559646
+Z	6	3230.68884
+141.54385 524.7
+141.54898 540.2
+141.85300 625.2
+145.52029 751.3
+146.99353 692.9
+171.64075 557.6
+188.24193 579.7
+188.26189 992.8
+188.27161 1499.5
+188.28398 1344.5
+188.29692 1169.3
+188.30531 1379.8
+188.31961 699.5
+190.95540 631.5
+191.96959 608.2
+192.65152 533.8
+198.89459 732.8
+199.15689 644.3
+199.20313 603.9
+199.22913 607.5
+199.25775 1343.9
+199.27214 1449.7
+199.28122 1061.3
+199.29076 2203.5
+199.30363 1283.6
+199.34705 516.1
+199.38889 691.1
+201.60049 549.7
+202.95355 572.7
+205.75815 592.1
+211.97002 580.2
+213.61604 559.0
+249.15923 1911.1
+271.63232 566.3
+288.20248 6832.0
+308.87897 674.7
+349.15308 652.2
+381.33670 731.8
+384.80429 615.6
+387.27023 4002.4
+410.71786 743.8
+411.22870 553.0
+419.72458 2090.0
+420.22409 858.9
+421.23010 1274.6
+426.26984 4552.7
+427.51996 711.7
+428.72833 4617.2
+429.22958 1950.5
+468.92218 772.7
+469.80991 3712.5
+470.31244 1210.6
+470.80978 840.2
+483.17087 629.9
+492.24460 973.3
+494.33154 1994.2
+501.27792 604.8
+504.58307 978.7
+508.84760 627.9
+511.35901 2259.8
+516.30371 1304.6
+521.81128 1182.5
+525.26593 661.3
+526.24994 811.4
+532.54907 2167.5
+538.90265 573.2
+555.79785 682.6
+556.76813 631.9
+566.28247 1211.5
+569.68219 1246.0
+569.88037 892.6
+570.08435 949.1
+573.28845 851.0
+573.64380 534.2
+576.89740 747.8
+577.09918 932.7
+581.77081 1141.6
+583.30176 929.6
+585.80060 859.1
+587.70203 687.9
+590.05597 1731.5
+590.30182 1927.9
+590.55853 1071.7
+591.50372 1568.6
+592.32428 987.0
+594.55603 2275.4
+594.81104 1274.3
+595.30920 1705.7
+601.29810 902.3
+601.80316 1447.3
+602.30487 912.9
+607.29834 1094.2
+607.83466 3182.8
+608.33862 1810.4
+608.84302 687.6
+610.30200 708.8
+614.52026 909.4
+616.32080 694.7
+617.92407 1082.4
+618.31268 905.8
+623.82141 646.4
+626.60504 580.2
+629.39020 708.2
+630.37000 720.6
+637.81030 781.5
+638.32233 992.1
+642.32074 1238.6
+642.81677 1126.1
+646.33112 637.8
+646.82275 1227.2
+647.40125 1430.1
+658.36157 5957.3
+658.86255 3744.4
+659.35419 828.9
+662.36975 2404.8
+666.81818 3766.2
+667.32080 10076.0
+667.82031 5588.4
+668.32349 3282.5
+673.31079 2885.7
+675.08752 2841.6
+675.33777 1909.9
+675.58929 2301.4
+675.83655 759.9
+676.36536 9652.9
+676.64172 831.5
+676.86707 7565.6
+677.36896 3658.2
+679.58984 2486.5
+679.84247 2127.2
+680.09369 1440.8
+680.34625 842.9
+690.66449 827.5
+703.09906 822.6
+707.34863 2536.5
+707.59937 6125.9
+707.85236 3262.4
+708.10120 2071.5
+711.85236 8110.0
+712.10358 14825.9
+712.35358 7732.6
+712.60565 4423.8
+712.85626 1501.2
+713.87756 2186.6
+714.38251 2569.0
+716.86328 2143.2
+717.36200 1242.2
+718.91028 7829.1
+719.40900 5197.4
+719.91168 3023.4
+720.41260 1129.7
+722.88495 6510.7
+723.38550 4547.5
+723.88318 1513.2
+724.39240 1352.9
+730.33167 1131.8
+732.90625 15884.9
+733.40851 10263.3
+733.91064 5677.5
+734.41290 1537.1
+737.35278 1304.6
+741.91095 999.2
+742.38049 1677.0
+742.44141 929.6
+742.88538 1500.2
+751.39563 9630.3
+751.89661 7464.9
+752.39862 3158.9
+775.70538 726.0
+787.44189 754.3
+795.57867 858.6
+867.70013 629.0
+876.95599 653.6
+906.46411 762.9
+1010.32898 862.9
+1198.23254 3536.3
+1489.06909 595.5
+1522.52515 616.7
+1525.27063 650.6
+1532.07336 534.5
+1610.99316 673.4
+1777.26038 1145.9
+1877.31677 704.2
+1878.48169 700.4
+1878.70532 1091.7
+1879.14990 3701.3
+1879.52759 18594.8
+1879.89099 4336.6
+1907.08667 7295.5
+1930.51599 845.4
+1942.11133 599.1
+S	1377	1377	641.2378246
+Z	3	1920.438
+Z	2	1280.628
+165.78230 3334.5
+188.23177 1524.3
+188.23999 1745.9
+188.25127 3093.6
+188.26152 4249.4
+188.27870 6115.5
+188.29659 5559.7
+188.31348 5119.5
+188.33400 2110.3
+188.34186 1807.5
+195.57527 1810.8
+198.89349 3254.1
+199.25844 2505.3
+199.27901 4510.8
+199.28761 7740.5
+199.30803 4209.6
+199.38564 3524.6
+199.97340 1680.0
+233.56888 1507.3
+234.30984 1802.1
+244.52454 2287.4
+246.17924 1734.8
+271.62323 2155.8
+274.18707 18427.1
+302.09778 3493.3
+304.12903 4028.4
+316.11432 6418.3
+332.12253 4278.0
+342.26575 2068.5
+350.13330 7203.6
+355.12363 4933.2
+357.22964 1825.3
+360.17374 1795.2
+361.14694 2685.5
+373.13501 5358.2
+375.23422 29423.4
+376.23917 4106.6
+377.67169 3040.4
+401.14722 3079.1
+403.16040 5381.9
+411.30978 2089.9
+414.24490 23620.5
+415.24219 5013.8
+427.54333 1988.7
+432.25552 250872.6
+433.25858 42293.0
+434.26291 4288.8
+447.14987 21573.8
+448.15146 2613.1
+463.19666 3916.0
+465.15869 6441.1
+472.18329 4957.2
+473.16580 3111.2
+482.64972 2068.0
+485.97394 1810.3
+486.15869 2107.5
+490.19141 8137.5
+500.17343 2729.1
+508.20294 10552.2
+509.20569 2566.2
+513.31281 12739.4
+514.31689 2944.8
+518.18719 25392.5
+518.22101 11928.9
+519.18884 4437.4
+519.23242 2551.7
+520.22906 3020.2
+528.78156 2054.0
+529.76746 5369.5
+530.26563 2991.5
+531.32324 208701.3
+532.32642 47976.8
+532.49573 2325.0
+532.54401 6073.9
+533.24823 5780.1
+533.32501 5967.2
+534.23083 9870.8
+536.19763 43880.5
+537.20007 9129.8
+538.77032 8251.6
+546.21808 26541.5
+547.21869 9159.0
+547.77570 34279.2
+548.27698 15036.0
+548.77856 4233.5
+563.23004 2169.6
+563.72699 3645.9
+564.22943 7992.6
+565.23560 2160.0
+581.72461 1852.0
+599.28058 3090.3
+605.28741 3360.3
+610.28394 4990.2
+610.78491 7225.9
+612.37946 7115.5
+613.35724 4546.6
+615.20288 6775.2
+617.25360 5994.1
+618.25348 2307.7
+619.24963 3014.4
+622.79669 13184.3
+623.29950 2505.7
+623.61139 2637.0
+627.26392 5173.9
+627.75824 8639.4
+628.25592 2051.9
+630.39191 26258.0
+650.23169 2371.8
+651.23090 2284.0
+659.87134 1899.8
+663.29852 6543.3
+676.63727 2577.1
+685.80493 12639.6
+686.30890 5900.4
+686.80756 4430.9
+702.30792 4416.3
+704.29059 3079.1
+714.27130 7888.7
+715.28278 2941.6
+716.31940 1747.8
+716.37378 2015.7
+721.32312 11169.5
+721.82355 7675.5
+722.28741 4612.5
+727.40839 6437.9
+728.41376 2494.1
+732.28235 30842.1
+733.28528 11163.8
+734.31494 1950.7
+745.41821 194346.6
+746.42175 67749.0
+747.42468 11530.1
+750.29260 66598.6
+750.37097 2336.6
+751.29626 23685.3
+752.29413 3485.2
+754.33759 12507.4
+794.85480 8545.7
+795.36176 3620.0
+795.44806 7358.9
+795.56140 3050.3
+795.86438 2364.1
+813.33325 4250.3
+821.36554 3445.0
+831.35059 29810.9
+832.35394 11354.1
+849.36047 113152.8
+850.36462 45427.2
+851.37006 10068.8
+859.89490 2348.1
+868.39490 5837.7
+868.89252 5960.7
+869.39563 2533.1
+885.13593 1911.4
+888.37097 3525.2
+906.38184 16369.9
+907.39136 4825.8
+908.48132 43418.8
+909.48297 17620.0
+910.48474 3166.3
+914.38135 3288.8
+965.50330 68248.5
+966.50519 32558.6
+967.50806 7026.3
+989.41992 9165.9
+990.42310 4314.9
+1007.42871 9752.9
+1008.43488 4385.7
+1057.24487 2781.8
+1076.53076 3270.9
+1088.48938 12631.7
+1089.49194 7822.7
+1094.54333 9557.2
+1095.55286 5636.2
+1096.54089 2980.3
+1106.49524 7099.8
+1107.50562 3499.4
+1198.20068 9014.8
+1308.14734 2018.7
+1511.59460 2234.0
+1550.41943 2659.6
+1876.69336 2298.6
+1878.98413 5453.6
+1879.52173 61103.1
+1879.75452 3361.9
+1880.03491 4483.8
+1880.41296 2955.9
+1907.05054 21799.1
+1930.58667 4062.2
+S	1378	1378	1095.2788246
+Z	3	3282.561
+Z	2	2188.71
+311.13599 1514.0
+311.45398 582.2
+326.33350 540.3
+338.13516 695.7
+344.16608 620.2
+361.18277 2024.9
+366.14020 1299.6
+368.15585 2177.9
+372.15057 3180.7
+373.15643 1105.4
+380.15601 1869.8
+381.65915 725.5
+384.14914 1248.9
+397.18167 885.2
+408.15118 3727.3
+425.17783 4216.6
+426.17960 951.9
+437.17792 2053.5
+441.17392 860.7
+455.18716 2846.9
+462.23038 5274.8
+463.15689 856.5
+463.23361 1285.1
+464.24750 603.6
+473.19992 1253.7
+482.63538 738.9
+485.55347 583.8
+494.19940 1629.6
+495.17908 1000.8
+498.19476 1066.7
+505.17743 659.3
+513.19208 2424.6
+513.24042 1072.6
+522.19360 3043.2
+523.17688 2278.1
+531.20374 983.7
+531.25079 3070.9
+532.55304 1873.9
+540.20398 25636.0
+541.20782 5509.0
+542.20898 1572.6
+545.23285 978.6
+546.20831 827.1
+549.26190 31944.7
+549.90808 664.5
+550.26532 7710.1
+551.21967 973.2
+551.26617 1159.8
+563.24689 1472.1
+569.22528 757.6
+579.24640 786.3
+584.22870 1349.8
+593.23029 4388.5
+597.26031 2078.3
+609.27319 607.9
+610.21301 1008.2
+611.24103 17897.6
+612.03027 645.1
+612.24420 4023.1
+627.23419 1016.3
+630.87817 716.9
+635.23376 1088.1
+645.25012 904.5
+657.24774 849.8
+658.25916 787.4
+666.28168 2451.9
+668.30963 3194.5
+674.30316 2079.7
+674.79791 822.3
+676.26776 7843.4
+676.64038 1446.3
+677.27637 2033.9
+683.30762 1536.1
+686.32068 26989.3
+687.32355 8502.3
+688.32263 1422.5
+694.27814 17900.9
+695.28412 5639.9
+696.28876 1276.2
+707.32214 1972.8
+708.30280 2762.9
+712.28931 12592.9
+713.29108 3437.0
+716.28363 1589.0
+719.25183 1108.3
+725.33136 11070.2
+726.33807 3515.6
+729.80579 1236.8
+730.31128 1266.2
+730.80457 885.9
+736.27795 2808.4
+737.27014 1042.6
+738.82410 1425.6
+743.34210 132816.1
+744.34436 45858.7
+745.26886 875.3
+745.34863 10321.4
+746.34747 1821.3
+757.27655 926.6
+772.27948 1658.9
+774.30548 911.4
+775.28479 939.6
+780.33966 866.2
+782.38361 1161.3
+789.34399 2680.9
+789.84460 2544.5
+790.29285 1488.3
+792.31787 1058.6
+799.33594 670.0
+805.31165 3971.1
+806.31238 2156.6
+806.38953 2824.3
+806.85162 2888.1
+807.30615 2526.9
+807.35309 2558.9
+807.84937 2743.6
+808.30591 804.3
+808.36090 884.3
+815.85822 12662.8
+816.35608 11949.3
+816.85632 5583.5
+817.35980 1634.2
+823.32098 17395.2
+824.32483 6715.7
+824.40039 14818.4
+824.86212 37898.5
+825.36194 26520.1
+825.86487 9713.3
+826.36133 2508.6
+826.41327 794.8
+835.35516 876.8
+841.33112 3682.6
+842.40991 166156.6
+843.41254 67505.2
+843.68665 864.4
+844.41577 17160.0
+844.99884 900.8
+845.41791 4077.5
+846.33551 718.3
+850.64136 701.5
+865.37164 725.4
+871.34686 1145.8
+873.36926 2145.3
+873.86572 1950.0
+874.37378 1269.2
+882.37512 2505.5
+882.87701 2349.6
+886.32507 1087.3
+888.37384 1164.9
+892.33356 1185.5
+901.88068 1544.9
+904.33282 1903.7
+906.37561 1081.3
+909.36542 1044.7
+910.88806 2266.4
+911.38702 2326.1
+911.88947 1249.4
+912.36450 606.4
+919.35333 2416.8
+920.33295 1425.2
+921.35272 1196.6
+921.42004 779.3
+921.88123 1178.2
+922.33887 919.1
+922.42175 607.6
+930.39459 2938.1
+930.88708 2906.6
+931.38971 1438.9
+931.88983 738.1
+937.36298 7130.0
+938.36401 3345.4
+939.43481 4687.4
+939.89850 6096.5
+940.41901 2972.5
+941.41840 1529.9
+955.36969 1831.9
+957.43756 64536.3
+957.90179 1329.9
+958.44019 28229.4
+959.44257 8098.0
+960.44556 1859.8
+962.33850 789.7
+965.32336 813.5
+965.91187 2380.3
+966.40881 2286.8
+966.90753 1773.8
+974.91437 6519.7
+975.41937 5145.2
+975.91394 2781.8
+988.39551 1315.3
+991.42139 672.1
+1001.35516 1332.1
+1008.42975 1212.9
+1018.36896 1177.3
+1019.35486 1743.6
+1036.38135 4503.5
+1037.38391 1693.6
+1050.45752 1895.4
+1051.46045 1340.7
+1054.43628 918.2
+1054.93274 1084.2
+1055.43652 924.0
+1056.41846 796.1
+1057.22778 738.0
+1058.93042 1659.8
+1059.43604 1355.1
+1059.93262 1362.9
+1063.44568 1902.6
+1063.94067 1854.8
+1064.44983 1811.3
+1064.94800 958.0
+1066.42139 1488.4
+1067.45227 3340.3
+1067.94067 8078.6
+1068.47107 19050.6
+1068.94043 3560.4
+1069.47302 8610.8
+1070.47534 3176.2
+1070.95618 959.4
+1071.47021 1120.1
+1072.45068 1098.5
+1102.44275 5101.9
+1103.44409 2897.7
+1104.45056 1361.3
+1107.42578 874.1
+1133.32544 661.4
+1135.45593 1629.0
+1169.49500 869.1
+1187.49011 938.4
+1188.48608 778.6
+1195.45532 1060.5
+1196.45105 2330.4
+1197.44202 1095.8
+1197.54004 1089.1
+1198.24377 2663.5
+1198.39819 868.4
+1198.53369 1255.8
+1213.47156 3803.3
+1214.46472 5139.1
+1215.54333 3806.3
+1216.54382 3223.7
+1217.52808 781.7
+1231.48352 4189.3
+1232.48462 2539.2
+1233.54785 37930.7
+1234.55127 24892.1
+1235.55396 8125.5
+1236.55408 2207.7
+1293.45825 1223.0
+1310.48462 1339.8
+1311.47693 4388.0
+1312.46716 2451.7
+1313.55151 1614.9
+1314.54810 1322.3
+1315.53760 961.8
+1328.49805 5352.7
+1329.48914 6132.2
+1330.43774 1302.0
+1330.58008 8266.2
+1331.57654 6476.0
+1332.56055 1854.7
+1333.56177 728.9
+1334.27173 717.2
+1346.51050 3111.3
+1347.59094 50052.4
+1348.59338 35063.6
+1349.59583 13605.9
+1350.59546 4123.2
+1368.54358 766.4
+1385.55286 2434.2
+1386.56104 2814.1
+1387.54419 1105.5
+1400.55164 931.3
+1403.56873 10299.1
+1404.56885 7467.6
+1405.57666 2904.9
+1410.56628 1093.9
+1411.53772 767.2
+1427.56812 1844.0
+1428.56641 2568.6
+1429.57227 1893.4
+1440.62378 810.8
+1441.60413 1852.2
+1442.61169 1165.8
+1445.58167 3010.8
+1446.56787 1772.6
+1458.62219 9182.3
+1459.62329 8940.4
+1460.62073 3992.3
+1461.62097 2779.8
+1462.63623 751.8
+1474.61438 1028.9
+1476.63452 19809.4
+1477.63501 15237.0
+1478.63477 8140.7
+1479.62610 1757.0
+1485.58435 1360.3
+1502.56921 783.8
+1503.60608 1085.2
+1543.66028 764.9
+1559.68030 1761.0
+1560.66943 2865.1
+1561.66565 2273.3
+1562.66772 1125.1
+1575.57727 745.7
+1577.68213 17571.6
+1578.68445 14728.1
+1579.68616 6546.4
+1580.68713 2634.3
+1593.65564 1147.9
+1594.68335 704.1
+1595.65051 1643.7
+1596.65466 1279.6
+1611.66541 6295.9
+1612.67175 5494.4
+1613.66614 3188.0
+1614.69458 861.5
+1615.63245 906.3
+1621.64246 2106.1
+1622.64465 4251.3
+1623.63232 2639.8
+1624.64453 932.3
+1631.70520 1205.2
+1632.60754 1022.9
+1633.63416 1009.9
+1634.63953 891.2
+1639.65869 22399.3
+1640.66174 18767.8
+1641.66418 8800.2
+1642.66284 2870.0
+1643.66382 939.7
+1648.71973 6344.1
+1649.72266 5888.6
+1650.72632 2185.6
+1657.67578 897.9
+1690.65955 736.6
+1703.69421 1431.6
+1704.69263 1610.9
+1708.67627 3348.9
+1709.68103 3426.0
+1710.70154 1335.5
+1726.68750 7395.0
+1727.69922 5996.6
+1728.69214 3142.5
+1729.71094 1386.5
+1758.63379 877.2
+1763.68884 882.1
+1764.74695 1025.2
+1765.80884 706.2
+1789.62646 671.2
+1792.73340 796.8
+1809.72559 3043.1
+1810.72888 2838.1
+1811.71375 1702.4
+1812.70410 905.2
+1827.74219 3058.9
+1828.73975 2547.0
+1846.73010 964.0
+1878.06287 1011.7
+1879.53345 19763.9
+1879.92566 1063.2
+1881.03186 725.2
+1889.71411 1174.1
+1906.75696 4505.5
+1907.07764 7032.4
+1907.74072 6762.1
+1908.74512 4883.6
+1909.73999 2301.4
+1924.75061 11949.8
+1925.75244 15318.0
+1926.75232 11265.1
+1927.74719 4667.2
+1928.76855 1242.3
+1942.76404 72725.9
+1943.76489 69178.8
+1944.76941 36861.3
+1945.76953 13318.4
+1946.77771 4418.0
+1947.80042 1586.7
+1978.74951 868.6
+1995.79919 1297.8
+1996.80225 2564.7
+1997.77649 1582.3
+1998.80188 1057.2
+S	1379	1379	730.467407933
+Z	3	2188.127
+Z	2	1459.087
+198.89595 618.9
+199.17618 917.8
+199.18762 969.2
+199.22569 687.3
+199.24352 495.2
+199.25853 1003.5
+199.27487 2942.3
+199.29176 1394.1
+199.32837 570.5
+202.79962 491.5
+206.28745 517.0
+209.06924 613.5
+212.10278 1436.7
+221.86658 542.8
+222.08733 3708.5
+223.07137 1504.8
+229.12817 707.6
+240.09799 6782.9
+246.15617 23466.4
+247.16010 1353.5
+255.30116 696.8
+258.34760 684.9
+264.37845 561.5
+276.79938 675.0
+283.13931 1696.1
+293.12442 1577.4
+294.10815 1386.6
+295.88062 620.5
+301.11417 18198.9
+302.11920 1626.0
+306.10910 600.1
+311.13495 23599.1
+312.13892 3338.4
+313.13638 582.2
+323.13498 3307.6
+333.58844 554.9
+333.98721 609.3
+338.14349 706.7
+340.16089 1424.9
+341.91321 577.4
+343.66403 1131.5
+351.12991 1346.0
+368.15604 10563.0
+369.15924 1752.1
+372.15164 5142.7
+372.17551 5795.9
+372.67578 2417.8
+373.15430 1219.5
+379.16992 1936.4
+380.15689 4360.6
+392.60403 615.6
+397.18286 3257.8
+402.16180 856.7
+403.68628 617.3
+408.15128 6733.4
+409.15530 889.7
+421.70865 4123.5
+422.20926 1487.3
+425.17764 16910.1
+426.18066 3137.3
+427.56540 879.5
+437.17719 837.3
+455.18771 1496.7
+462.22964 1335.7
+473.19858 1629.8
+479.22272 6460.0
+479.72382 2273.8
+480.23380 871.3
+482.67532 666.0
+494.19965 1854.5
+498.19391 3185.8
+499.19559 645.2
+513.20740 632.6
+522.19415 3796.1
+523.17596 3988.4
+524.17773 767.3
+525.74371 614.6
+532.54138 1867.5
+534.74188 829.6
+535.23828 1092.4
+535.73822 789.0
+540.20422 39232.7
+541.20758 11233.1
+542.21112 974.9
+543.74316 5286.0
+544.24463 4034.0
+549.26251 6445.9
+550.26251 1762.3
+566.22119 725.9
+583.24182 991.4
+593.23206 4232.3
+594.21027 865.1
+595.58746 1176.8
+595.92261 1232.7
+597.26123 2630.4
+598.26630 757.5
+601.58734 2053.2
+601.92426 1857.9
+607.59460 1315.6
+607.92883 1368.0
+608.25220 622.9
+611.24146 23135.8
+612.24451 6750.4
+613.24469 912.7
+614.59399 2773.6
+614.92639 1959.7
+615.25977 1361.0
+617.21802 896.3
+617.27844 11314.2
+617.77924 7671.9
+618.28015 1777.1
+620.07184 653.8
+620.59735 10899.7
+620.93170 11335.3
+621.26520 4811.7
+621.59338 1393.2
+621.94165 872.8
+626.60040 2667.4
+626.93573 2907.1
+627.26807 1228.0
+630.43982 983.0
+633.25787 781.6
+635.27484 615.4
+638.27264 6703.5
+638.60632 6376.8
+638.93988 4990.3
+639.27350 2460.0
+644.27576 39546.4
+644.60999 41113.0
+644.94379 19539.3
+645.27887 9357.8
+645.61536 2502.7
+650.27972 76497.4
+650.61371 79997.7
+650.94769 44267.9
+651.28198 16847.2
+651.61548 5923.8
+651.95258 1569.8
+652.28461 874.7
+665.29333 900.7
+665.78699 1815.5
+666.28534 2059.1
+666.78485 740.1
+666.86963 694.3
+668.18127 565.5
+674.29907 51116.3
+674.80042 34552.8
+675.30170 13551.8
+675.79932 4188.7
+676.26733 2855.0
+676.62836 1128.3
+686.32306 3022.9
+687.31891 1074.8
+694.27795 19367.8
+695.28259 6320.2
+696.29126 1291.3
+706.29517 1046.9
+706.95319 1043.3
+709.29901 715.5
+709.62817 706.6
+712.28851 6310.7
+720.29852 682.3
+738.81903 5905.2
+739.32062 5066.1
+739.82495 2539.2
+740.32092 967.5
+743.34271 5836.0
+744.34637 2078.0
+745.33844 824.9
+762.33124 2481.7
+762.82782 3712.8
+763.32196 1174.4
+771.33057 1127.5
+771.83020 1137.8
+774.92224 661.5
+780.34033 3957.8
+780.83820 4421.1
+781.33984 2106.7
+781.84564 1230.0
+789.34436 105185.3
+789.84576 86377.1
+790.34705 39270.7
+790.84863 12933.4
+791.34882 3654.3
+792.18134 833.1
+805.31274 1328.3
+806.84985 1269.5
+807.80988 842.3
+808.31964 2175.2
+808.82172 899.3
+811.33844 900.3
+815.85809 24699.2
+816.35773 23153.5
+816.86066 11769.9
+817.36536 3599.2
+817.86890 1274.3
+823.32184 9122.8
+824.32825 3198.1
+824.86267 119610.3
+825.36371 106301.5
+825.86493 53756.9
+826.36713 17734.1
+826.86713 4958.7
+827.36938 1757.4
+827.85620 720.3
+834.33722 1146.6
+834.83307 1024.7
+835.34961 977.6
+841.33185 2993.3
+842.41052 7864.7
+843.33807 4969.4
+843.41132 2845.0
+843.83789 5028.2
+844.34436 1896.3
+844.41217 1284.4
+845.33447 764.1
+852.34259 6305.4
+852.84332 6516.3
+853.34460 3571.5
+853.83832 1140.7
+855.84827 848.6
+864.36615 3309.3
+864.86285 2957.0
+865.36267 1045.4
+873.37091 21913.4
+873.87152 17886.4
+874.37146 9437.9
+874.87439 3327.8
+875.36969 1210.0
+882.37610 65388.5
+882.87714 58244.0
+883.37866 31243.4
+883.88147 9783.2
+884.37939 3140.7
+884.87103 673.3
+892.87665 2508.9
+893.37695 3128.1
+893.87482 1797.8
+894.37317 1357.0
+901.88147 18819.1
+902.38232 16070.9
+902.88367 9635.1
+903.38580 3846.9
+903.88025 783.8
+910.88690 57644.9
+911.38812 53783.5
+911.88928 28420.6
+912.39044 10777.8
+912.88904 3412.3
+913.38733 866.1
+921.38849 4513.4
+921.88745 4080.9
+922.39117 2961.8
+930.39178 24637.3
+930.89258 24362.1
+931.39410 13179.7
+931.89496 5206.9
+932.39966 1318.8
+937.36188 1678.6
+939.39697 77583.6
+939.89819 77521.3
+940.39954 42871.3
+940.90082 17145.6
+941.40356 5158.3
+941.91949 1391.2
+944.87360 2410.6
+945.36719 3258.5
+945.86450 3290.8
+946.36230 1433.2
+953.87506 9518.0
+954.37531 12957.4
+954.87579 6379.4
+955.37286 3488.7
+955.87988 1021.9
+957.44562 2166.1
+957.90698 1086.5
+958.44775 1622.7
+962.88104 17388.0
+963.38239 16237.1
+963.88318 8335.9
+964.38702 4095.3
+965.91046 8422.6
+966.41119 8038.8
+966.91321 4814.6
+967.40881 1736.6
+967.91687 962.0
+971.88214 1382.9
+972.39258 2394.4
+972.88898 855.1
+973.38788 790.4
+974.91504 25042.8
+975.41705 24691.3
+975.91937 12900.3
+976.42053 3895.9
+976.91425 1358.7
+977.42938 1003.3
+986.62830 671.5
+988.39868 2077.1
+989.40179 1292.9
+1007.39691 710.0
+1057.24683 1094.8
+1084.42468 987.7
+1086.48315 2126.0
+1087.48560 1182.5
+1090.40540 660.7
+1102.44336 7891.2
+1103.44360 3776.1
+1104.45752 1705.8
+1107.41125 658.5
+1116.92981 647.0
+1195.47974 896.7
+1198.21387 2914.5
+1213.47278 2421.9
+1214.47888 2168.4
+1215.48022 1001.4
+1231.48206 3266.7
+1232.48560 2161.5
+1245.79236 703.8
+1328.51086 949.6
+1329.50159 1124.3
+1332.53247 4728.4
+1333.53564 3291.5
+1334.54431 1321.9
+1385.56116 1120.8
+1386.56006 1564.9
+1403.56909 3743.6
+1404.57117 3131.1
+1405.58618 1159.6
+1427.56982 1126.6
+1445.59094 1913.1
+1446.58435 1516.8
+1488.98230 738.3
+1518.59106 1565.4
+1632.68396 871.4
+1633.63635 652.3
+1644.36169 609.0
+1777.52820 802.2
+1869.42859 865.9
+1878.39026 1006.5
+1878.92651 823.3
+1879.03772 748.4
+1879.52527 20344.9
+1879.86401 898.1
+1880.13342 1248.3
+1880.40369 1549.8
+1880.73413 649.1
+1881.82495 656.1
+1907.02393 7656.0
+1907.34106 643.0
+1930.72522 1004.4
+S	1381	1381	1095.7628246
+Z	2	2189.678
+Z	3	3284.013
+311.13538 1493.3
+323.13348 825.3
+330.06464 660.3
+361.18280 2327.2
+366.13962 1015.2
+368.15530 1700.4
+372.15097 2250.4
+373.15594 729.1
+376.49442 571.6
+380.15619 1728.6
+384.14908 1148.6
+408.15121 2721.8
+425.17783 4006.0
+437.17801 1468.1
+452.31836 664.0
+455.18799 2068.0
+462.23016 5072.8
+463.23773 835.7
+473.19815 1319.3
+482.67007 749.9
+494.19858 1163.6
+498.19363 866.6
+503.18127 681.3
+513.19238 1840.5
+513.24060 1456.5
+522.19513 2909.4
+523.17603 2188.0
+531.20465 904.9
+531.25275 2394.0
+532.50671 2130.2
+540.20392 22831.9
+541.20728 4870.4
+542.20514 772.6
+549.16815 733.0
+549.18457 733.7
+549.26190 31068.9
+550.26544 6430.6
+563.24567 1618.4
+569.23004 1611.0
+579.24768 750.6
+584.22742 1866.3
+586.26514 735.4
+593.23022 3470.4
+597.26080 1957.4
+611.24127 15456.1
+612.24298 3554.0
+613.24756 931.4
+627.23505 874.4
+645.24561 1069.9
+648.27289 1018.2
+666.28027 1831.6
+668.31104 2673.2
+669.31616 743.5
+674.30048 1910.1
+674.80029 1320.0
+675.25372 824.2
+675.30328 605.1
+676.26782 7737.3
+676.63922 1004.4
+677.27582 1782.5
+683.30975 1395.3
+686.32043 23831.8
+687.32422 6505.2
+688.32745 972.1
+694.27808 17360.7
+695.28320 3594.4
+696.28406 1023.0
+707.32318 1414.9
+708.30542 2502.8
+712.28918 10729.0
+713.29309 3106.5
+716.28491 1583.9
+718.26239 891.3
+725.33221 9065.6
+726.33679 2264.3
+729.81409 778.7
+730.31250 1154.2
+730.81665 1015.9
+735.29614 646.1
+736.27747 2233.6
+738.81641 1016.9
+743.34198 115042.2
+744.34473 38660.8
+745.34814 8427.3
+745.48737 832.0
+746.34747 1446.8
+772.28021 1042.1
+777.32513 733.0
+789.34454 2736.6
+789.84863 2383.4
+790.28992 1700.2
+795.32220 877.3
+798.34747 944.3
+805.31055 3643.5
+806.31122 1882.5
+806.39197 2147.2
+806.85254 4146.6
+807.30658 2077.6
+807.35620 2501.4
+807.84882 2490.8
+809.05255 816.2
+815.85840 10551.7
+816.35596 11352.0
+816.85565 5934.8
+817.34869 1263.2
+817.86334 1059.5
+823.32135 15056.5
+824.32312 5985.5
+824.39978 12397.0
+824.86212 35084.9
+825.36237 24257.0
+825.86548 10368.2
+826.35883 1352.3
+841.33215 3549.7
+841.99591 726.7
+842.40979 145819.3
+843.41260 55074.6
+844.41553 14803.0
+845.41620 2660.4
+864.86432 744.1
+873.36469 1825.5
+873.87036 1989.2
+874.38068 1113.6
+882.37122 1903.3
+882.87292 1746.7
+888.37323 765.8
+897.42120 963.8
+901.88098 1023.9
+902.38232 1183.4
+903.33948 834.8
+904.32941 1196.2
+906.37238 1230.6
+910.89008 2975.3
+911.39624 1281.1
+912.37622 793.9
+919.35706 1817.2
+920.33746 1640.6
+922.31335 803.1
+930.38837 2252.1
+930.88916 2587.0
+931.39117 2343.8
+937.36322 6321.9
+938.35773 3028.3
+939.39398 3411.7
+939.42944 3068.4
+939.89771 7167.7
+940.40448 3384.7
+941.41467 768.2
+944.32538 748.9
+955.37512 1959.7
+956.36774 891.9
+957.43732 52498.0
+958.43903 25856.8
+959.44067 7501.5
+960.44867 1405.4
+961.36597 790.8
+964.45795 634.1
+965.90973 2029.2
+966.40973 3307.9
+966.90741 1411.5
+974.91479 6339.7
+975.41931 4885.5
+975.91339 1913.6
+979.35962 1017.9
+988.39148 1178.3
+1001.35541 977.8
+1018.37872 2242.0
+1019.35803 1907.9
+1036.38403 3363.3
+1037.38562 2055.1
+1050.45117 1796.3
+1054.44568 1010.1
+1054.93555 985.7
+1055.43835 1292.2
+1059.44299 1297.6
+1063.44714 1460.3
+1063.94397 1124.8
+1066.42310 1387.6
+1067.44812 3299.7
+1067.93970 8490.4
+1068.47107 15239.9
+1068.94495 2757.6
+1069.47168 7245.5
+1070.47437 2174.9
+1071.44836 719.6
+1072.44763 1142.8
+1073.91638 805.2
+1078.70349 630.9
+1102.44336 3565.1
+1103.44836 1704.3
+1135.45007 1201.7
+1189.45752 970.6
+1196.44421 1990.8
+1197.51599 1859.1
+1198.13318 3341.1
+1198.52417 1431.6
+1206.48962 1338.6
+1213.47302 3664.1
+1214.46777 4499.5
+1215.54517 3525.4
+1216.55029 2242.0
+1217.55103 1027.9
+1231.48755 3445.6
+1232.48523 2793.7
+1233.54761 30158.9
+1234.55005 19390.5
+1235.55408 5742.2
+1236.54749 1149.9
+1293.46594 793.8
+1310.48706 1732.0
+1311.47754 3412.5
+1312.47461 2129.1
+1328.50208 4775.8
+1329.49219 5398.6
+1330.43787 1512.3
+1330.57947 7076.3
+1331.57446 5044.0
+1332.55237 1972.3
+1346.50256 2752.3
+1347.59058 43020.0
+1348.59302 28892.9
+1349.59473 12012.8
+1350.60095 3120.8
+1351.87634 733.0
+1385.55237 2442.4
+1386.56079 2093.7
+1387.56909 1304.6
+1400.56689 868.3
+1403.56738 9604.5
+1404.57239 5711.5
+1405.57568 2466.5
+1410.54846 1068.4
+1427.57556 1623.5
+1428.56946 2472.2
+1429.55029 1181.9
+1441.61011 1510.0
+1445.57947 2523.1
+1446.57971 2032.3
+1458.62158 8009.1
+1459.61890 8038.0
+1460.61536 3548.9
+1476.63269 16729.2
+1477.63586 13609.9
+1478.63599 4921.2
+1479.63599 1397.2
+1480.55249 648.8
+1485.55945 851.5
+1559.66980 2555.1
+1560.66614 2917.1
+1561.67139 1799.1
+1562.67212 794.7
+1577.68176 17210.7
+1578.68384 13002.9
+1579.69006 5391.7
+1580.68896 1951.1
+1596.66516 828.2
+1611.66248 5370.2
+1612.66736 4672.1
+1613.67102 2177.0
+1614.72412 803.0
+1621.64856 2147.8
+1622.64758 3387.5
+1623.64954 2679.7
+1631.69739 1076.9
+1632.64282 917.5
+1633.61780 1129.8
+1639.65869 19854.4
+1640.66089 16661.6
+1641.66565 6979.4
+1642.65625 1828.6
+1648.71960 4638.1
+1649.71265 3761.4
+1650.71924 1698.1
+1653.35071 629.0
+1699.69019 825.5
+1703.64880 1004.0
+1704.68909 1136.8
+1708.67505 2410.8
+1709.68164 2378.1
+1710.68066 1511.5
+1726.69373 6938.7
+1727.69019 5035.4
+1728.69678 2253.6
+1729.70056 1117.2
+1763.72498 776.6
+1809.72205 2335.3
+1810.71912 2197.8
+1811.72229 1104.6
+1827.73853 2028.0
+1828.73938 2005.9
+1829.76501 731.4
+1846.72583 700.0
+1876.22974 661.2
+1878.73547 878.4
+1879.52905 18825.3
+1880.16541 1141.3
+1880.39868 1510.0
+1884.22534 660.1
+1906.73743 4326.1
+1907.07446 7148.7
+1907.34949 1017.8
+1907.73499 5097.2
+1908.73279 3743.8
+1909.72327 1643.5
+1924.75635 12909.4
+1925.75012 13954.7
+1926.75378 10283.8
+1927.74255 4424.0
+1930.61560 1126.9
+1942.76367 69862.9
+1943.76489 60824.1
+1944.76807 27948.4
+1945.76672 11778.5
+1946.77405 3415.1
+1996.77454 1770.4
+1997.81104 1172.8
+S	1382	1382	562.2235746
+Z	4	2244.863
+147.77457 548.6
+148.43994 546.2
+154.52245 634.1
+162.25336 593.2
+165.78172 638.8
+169.61592 748.4
+176.05681 595.7
+185.59286 559.8
+190.40211 545.2
+194.43196 639.1
+195.64391 553.8
+199.16006 528.3
+199.16852 616.8
+199.18076 1588.0
+199.25058 837.6
+199.25960 809.9
+199.26936 663.0
+199.27902 3055.7
+199.29378 1046.7
+199.30673 686.9
+199.36154 479.3
+199.37727 1012.9
+199.38922 554.9
+246.07257 543.8
+246.08121 563.2
+246.15565 4606.4
+255.27678 705.5
+258.89984 694.7
+271.28241 566.1
+289.41953 586.9
+293.43903 688.3
+311.13367 1059.0
+336.94620 542.9
+350.27841 647.5
+367.59653 657.2
+372.17358 616.5
+386.80737 598.6
+405.60892 682.1
+418.67261 590.8
+421.70685 1124.9
+426.12738 667.3
+440.11948 703.1
+443.21124 599.4
+449.13016 1099.5
+451.80872 574.0
+464.17969 562.4
+479.22177 1662.7
+482.62296 657.9
+497.14395 902.7
+497.64337 637.5
+498.14185 762.9
+505.14279 618.6
+506.14929 3576.9
+506.65109 1803.7
+507.01514 653.1
+507.14801 1739.0
+507.64905 665.2
+520.51385 656.7
+532.54785 1463.2
+534.73773 1076.0
+543.74188 4211.8
+544.24310 1457.4
+586.49268 562.7
+611.46381 766.5
+617.27625 6121.5
+617.77740 3826.4
+618.27954 1425.7
+645.57294 914.8
+645.90839 931.0
+667.23230 846.3
+668.91577 1775.6
+669.58643 1554.5
+669.91693 806.7
+674.29919 3724.8
+674.79663 1790.4
+675.30975 688.5
+676.63708 709.7
+701.72430 980.4
+712.28870 719.6
+743.33441 658.2
+795.58380 679.5
+880.30658 805.2
+906.45581 686.5
+1014.06598 624.6
+1057.25281 970.0
+1094.87524 860.5
+1198.22217 3362.8
+1218.56152 727.2
+1300.63147 540.3
+1525.32629 950.9
+1619.11340 642.5
+1630.90564 602.7
+1642.82690 612.2
+1697.67554 630.2
+1748.21814 653.6
+1777.53687 836.1
+1785.24255 670.0
+1816.83362 616.6
+1876.86267 778.3
+1878.67017 1088.5
+1879.13391 1714.3
+1879.23206 1807.1
+1879.52051 19931.6
+1879.95911 1970.4
+1880.43311 997.5
+1906.68994 683.7
+1907.05029 7452.2
+1912.45337 584.1
+1930.50818 939.2
+S	1383	1383	449.2642996
+Z	4	1793.0259
+111.19389 676.0
+113.46092 804.0
+120.69272 664.4
+121.80009 2360.1
+121.81297 672.7
+131.11632 527.7
+141.37961 563.4
+141.84949 680.7
+144.56487 544.3
+158.09554 803.8
+160.11034 731.3
+162.83420 558.1
+165.78313 844.3
+168.40511 515.9
+171.60741 581.3
+172.64215 597.8
+173.76572 627.1
+176.10635 1698.3
+177.10172 1245.5
+188.55614 578.1
+198.89555 975.1
+199.17979 1458.0
+199.27202 1784.6
+199.28094 2850.8
+199.30069 887.6
+199.37100 676.5
+199.38141 578.1
+218.16330 694.0
+221.12807 66214.9
+222.13141 8838.2
+227.17531 680.4
+238.40326 564.4
+238.72681 705.2
+249.12291 9695.2
+250.12636 940.8
+251.75583 650.1
+258.14999 1489.4
+270.65848 615.3
+271.59070 647.9
+277.40887 553.8
+278.30463 575.9
+299.13898 1665.8
+300.14560 864.9
+308.89749 702.8
+313.21881 605.3
+317.18573 1304.9
+337.19098 836.3
+344.19745 919.3
+362.20636 3976.5
+363.21106 670.1
+364.18954 7190.0
+364.69086 2654.2
+377.71255 1987.3
+378.22614 2341.0
+378.55695 2173.3
+378.89606 988.9
+381.35959 696.8
+387.22714 1094.6
+397.54630 2475.1
+397.57272 624.8
+397.87949 922.2
+400.26453 1029.7
+409.76492 3710.1
+410.26999 738.0
+412.73364 759.4
+416.98294 968.8
+423.74542 2177.6
+423.99667 1458.9
+434.24429 1118.5
+434.57440 1757.4
+435.24039 2259.4
+435.57693 1104.3
+440.90280 534.1
+470.59595 1221.1
+471.93851 1266.3
+472.93546 9117.1
+473.26987 8481.2
+473.60425 3036.2
+473.93762 1237.5
+475.29077 842.0
+477.93927 47136.7
+478.27338 37531.4
+478.60751 14434.2
+478.94144 5876.1
+479.27670 1703.3
+482.63898 705.3
+489.02002 621.3
+498.95151 569.2
+502.78592 1364.2
+502.94864 3924.9
+503.28442 2990.5
+503.94531 598.2
+507.81552 721.5
+508.09277 587.8
+508.30850 3839.8
+508.79297 3831.2
+509.28860 2368.3
+509.63092 6425.5
+509.79095 939.8
+509.96451 4524.4
+510.29733 2966.6
+510.79059 1775.6
+514.40149 1326.9
+514.55182 600.3
+514.73285 1748.5
+514.81403 659.5
+515.02301 1228.7
+515.35571 1633.7
+515.63361 285325.6
+515.77582 1228.0
+515.96771 247474.8
+516.01874 1001.2
+516.24561 1804.0
+516.30182 108833.5
+516.57910 1638.1
+516.63611 32864.8
+516.81909 820.6
+516.87012 2351.0
+516.91003 1382.0
+516.97064 6651.4
+517.20764 1506.0
+517.31226 914.9
+519.02228 1075.4
+524.81952 823.3
+525.31830 1069.9
+529.71674 4520.4
+530.21869 3061.2
+530.71674 1252.6
+531.77118 788.5
+532.55664 2072.7
+533.82233 1331.8
+534.32343 716.2
+540.64252 1533.1
+540.97699 1041.8
+541.31439 891.7
+549.63611 1723.4
+549.96924 2170.2
+551.30762 3269.7
+551.80835 1832.2
+555.45599 672.5
+555.63928 2321.8
+555.97479 2647.4
+556.31000 1154.6
+564.65576 11598.8
+564.99030 11782.0
+565.32410 5197.7
+565.65985 2995.5
+566.83026 1446.8
+567.33429 768.9
+573.31470 1008.6
+581.31146 801.2
+586.25873 1043.6
+586.75903 1159.6
+595.81543 18680.4
+596.31702 11850.7
+596.81696 4702.2
+600.84314 4286.0
+601.34552 3355.7
+601.84692 1898.7
+630.39716 711.5
+631.84174 742.7
+639.86310 1717.3
+640.36578 1443.5
+643.34540 774.7
+644.85425 1264.6
+645.35132 1236.7
+651.36096 802.8
+652.35718 11083.5
+652.85815 6264.5
+653.35986 3639.9
+659.86304 21362.4
+660.36456 14304.7
+660.86530 5316.0
+661.36664 1494.5
+676.63397 1380.0
+699.89362 1153.3
+708.89948 42996.7
+709.40100 31898.2
+709.90192 12235.3
+710.40216 3718.1
+710.90326 1080.6
+716.40009 1876.6
+716.91107 1809.7
+717.40454 853.7
+727.37067 4773.1
+728.36853 989.7
+731.12085 903.8
+754.41913 1337.9
+760.81042 669.4
+782.43176 1896.7
+782.93616 1244.6
+795.57935 980.5
+850.14282 654.6
+1082.46497 636.3
+1168.66248 512.4
+1190.63586 836.9
+1198.24365 3858.0
+1233.69141 702.3
+1253.84753 641.0
+1276.57727 673.9
+1352.06653 560.4
+1526.39001 577.3
+1779.14026 622.1
+S	1385	1385	449.2640546
+Z	4	1793.02492
+111.83102 572.8
+114.33562 557.1
+116.98666 561.5
+120.39807 523.9
+120.58929 725.8
+121.78461 569.4
+121.79700 1759.0
+122.03823 627.6
+125.95227 603.9
+131.75742 572.6
+148.08745 621.0
+158.09613 999.7
+163.13869 664.1
+165.77861 778.5
+171.63782 696.4
+173.64980 625.2
+177.10167 1387.1
+188.28377 2403.1
+188.30330 1987.8
+188.33026 525.3
+188.36046 540.9
+188.39929 560.8
+188.41119 620.6
+193.86922 526.1
+197.69719 610.1
+198.89680 668.0
+199.15015 673.5
+199.17981 3380.8
+199.19476 1272.9
+199.24887 529.6
+199.25604 620.4
+199.27371 1416.0
+199.28445 1913.4
+199.29327 2287.4
+199.39214 909.1
+203.11833 772.2
+216.84021 698.1
+221.12819 59831.9
+222.13170 6187.0
+229.88197 635.7
+233.58389 539.8
+248.29385 555.7
+249.12300 8101.6
+250.12599 760.8
+251.15057 725.0
+258.62842 587.0
+273.64435 623.5
+290.46628 585.2
+308.90833 635.6
+317.18582 983.4
+342.28641 750.0
+344.50470 558.4
+346.43384 557.2
+353.17328 945.3
+362.20746 2894.1
+363.20963 786.4
+364.18936 3239.9
+372.59668 724.9
+377.71304 3248.8
+378.22421 5715.8
+378.55814 2905.8
+378.89200 908.2
+381.36194 523.9
+381.37595 536.3
+381.80222 632.0
+386.97610 1043.7
+389.25775 579.1
+396.22202 787.2
+397.54526 985.7
+400.26505 2254.1
+400.89880 2725.5
+401.23428 1945.2
+409.71768 1614.5
+409.76584 1711.6
+410.21555 623.1
+410.27075 767.1
+416.98337 1108.0
+417.23010 960.6
+419.13556 560.1
+423.74463 2168.8
+423.99539 2595.5
+434.24289 1283.2
+435.57495 979.1
+435.90775 797.5
+466.25815 1002.5
+471.93784 1385.5
+472.60193 833.3
+472.93600 6915.5
+473.27036 5992.5
+473.60406 2830.2
+473.93887 801.9
+477.93927 35378.2
+478.27347 29193.7
+478.60806 8578.6
+478.94131 2717.0
+481.98514 663.7
+502.78625 1219.9
+502.94989 644.5
+503.28314 1435.4
+503.95724 709.2
+509.30881 1181.1
+509.63129 3348.5
+509.96503 3208.2
+510.28735 2228.4
+510.79144 1152.5
+514.40411 831.1
+514.61377 856.8
+514.73553 1240.3
+515.18097 942.1
+515.21600 682.5
+515.34924 764.3
+515.63367 230841.9
+515.70062 697.6
+515.78906 3928.3
+515.96790 189511.2
+516.23846 1439.9
+516.30200 81592.7
+516.63593 27024.0
+516.87250 1725.0
+516.97119 4493.1
+517.20667 1251.9
+517.62012 604.5
+519.26868 1063.5
+521.95166 583.2
+529.71936 941.6
+530.21832 1907.7
+531.91925 734.1
+532.54431 1857.1
+533.82629 821.0
+534.32019 649.0
+549.63654 2817.2
+549.97064 1422.2
+550.30298 1133.9
+551.30981 19362.9
+551.81104 13693.0
+552.31232 4274.8
+555.64075 2054.3
+555.97504 1970.0
+556.30939 944.0
+564.65582 11479.6
+564.99060 11233.5
+565.32532 3609.2
+565.66290 1522.8
+566.83136 2690.7
+567.33087 1476.8
+573.31390 1074.4
+574.31458 807.3
+575.21002 577.2
+577.24884 1346.7
+586.25897 786.3
+587.31372 756.8
+595.81561 21996.2
+596.31726 14102.2
+596.81964 5002.8
+597.31842 886.9
+600.84314 25728.4
+601.34528 13194.0
+601.84619 4971.1
+631.34985 997.2
+643.34308 780.2
+644.34985 777.4
+644.85284 1289.9
+652.35699 12535.0
+652.85895 7095.1
+653.36084 1947.0
+659.86322 29147.4
+660.36420 18459.9
+660.86682 8666.8
+661.36731 2537.8
+663.38153 878.5
+676.63739 1222.7
+686.37354 1011.0
+700.39825 703.9
+708.89954 37054.8
+709.40106 27234.1
+709.90240 12277.5
+710.40454 2960.2
+716.40442 2869.7
+716.90503 2089.1
+717.40961 1172.7
+717.90228 783.9
+727.36981 1703.6
+754.41858 3493.5
+755.41888 855.8
+782.43756 1699.0
+782.93640 936.6
+783.44800 688.7
+783.93542 783.2
+795.57330 783.3
+805.13312 634.6
+818.62714 559.4
+1039.75549 607.7
+1057.22888 752.1
+1191.62683 903.3
+1198.21667 3395.3
+1226.20776 611.4
+1436.38489 618.7
+1462.07788 571.4
+1481.67395 717.0
+1525.46045 685.7
+1541.78528 605.9
+1647.55298 545.0
+1777.60242 759.8
+1806.32556 1010.0
+S	1386	1386	449.7663246
+Z	4	1795.034
+115.98341 599.0
+121.79851 2538.5
+121.92562 583.9
+128.04773 564.2
+142.21977 588.9
+143.05658 544.6
+143.54950 684.1
+143.72856 559.1
+145.55571 654.0
+148.20084 564.3
+158.09586 1894.6
+160.11159 685.8
+169.49031 733.4
+173.42290 660.0
+174.16109 691.4
+176.10699 2163.5
+177.10173 2402.1
+197.43396 587.7
+198.10712 504.3
+198.89850 900.1
+199.16791 549.5
+199.18059 7927.0
+199.19235 710.9
+199.24620 1254.7
+199.26096 849.6
+199.26749 932.4
+199.27515 1161.9
+199.28578 1890.6
+199.29292 2091.8
+199.33945 562.3
+199.38504 867.0
+200.18410 820.8
+203.11732 1461.3
+204.13512 1451.1
+213.83443 587.1
+219.21214 577.9
+221.12834 100051.2
+222.13168 14939.7
+223.13431 812.5
+225.09760 680.7
+226.11885 1470.4
+227.17503 1903.4
+233.16429 2002.3
+237.43683 575.6
+249.12332 13176.0
+250.12648 1320.5
+251.15050 1124.9
+258.15018 1085.0
+272.17111 1748.6
+291.06705 580.7
+315.16644 771.3
+317.18683 1801.4
+329.66058 603.9
+342.26157 634.7
+344.19742 1010.7
+350.27823 686.7
+353.17407 2314.7
+362.20728 4483.2
+363.21033 1471.1
+364.18973 3587.0
+364.69153 1103.3
+374.68073 705.5
+377.71338 5288.5
+378.22583 7874.2
+378.55768 6785.9
+378.89151 2370.7
+379.22418 657.7
+381.34833 780.3
+383.40051 587.1
+384.72009 1151.2
+384.75336 835.2
+385.72946 607.3
+386.27969 536.2
+386.97888 1043.8
+387.23187 663.7
+394.86243 627.9
+396.22348 1424.7
+397.54782 2727.6
+397.88150 1040.0
+400.26639 3612.7
+400.89859 7434.4
+401.23340 5432.7
+401.56708 2869.3
+401.90070 685.0
+409.21921 953.1
+409.71625 2863.2
+409.76608 1346.4
+410.21933 917.2
+413.23941 1075.3
+415.23392 1309.5
+415.50586 655.2
+417.23477 1106.2
+421.18503 643.4
+423.74435 2340.1
+423.99521 2786.6
+424.24588 2700.7
+429.91028 849.4
+430.24573 901.7
+434.24078 1235.2
+466.25763 3003.9
+466.75870 1963.4
+472.26947 1038.7
+472.93616 9452.3
+473.27051 8380.2
+473.60495 4159.9
+475.29187 1625.2
+476.77124 875.9
+477.93982 60549.9
+478.27396 48655.7
+478.60803 24522.5
+478.94241 7766.2
+479.27280 1137.9
+483.52911 686.7
+502.78595 3201.9
+502.94778 1479.4
+503.28470 2921.0
+503.61395 634.6
+503.74716 9897.1
+504.24670 1433.1
+504.28842 937.7
+507.24500 1087.2
+508.56967 1731.0
+509.30789 1383.3
+509.63196 5697.5
+509.96561 5801.6
+510.28925 5999.6
+510.63031 650.3
+510.79068 3209.2
+511.29498 1319.4
+514.41974 1019.6
+514.61298 1067.1
+514.73010 1088.8
+514.95050 960.6
+515.02478 1266.4
+515.28839 2172.6
+515.35889 1245.3
+515.58215 1130.5
+515.63422 320396.1
+515.68768 1657.1
+515.79053 9913.7
+515.96820 321962.3
+516.02228 2008.0
+516.05341 1177.2
+516.24506 1819.4
+516.30212 168067.3
+516.40173 1013.6
+516.57794 1217.0
+516.63660 55040.4
+516.79608 2422.0
+516.84338 730.9
+516.87189 1273.7
+516.97156 14004.1
+517.21136 1379.5
+517.30713 2362.6
+517.54773 673.4
+519.27399 2522.4
+529.71521 1793.2
+530.21942 1566.5
+530.71545 1135.2
+531.21771 693.6
+531.76971 1154.1
+532.26599 783.6
+532.56580 1936.2
+535.68646 617.3
+549.63818 2731.6
+549.97156 2740.7
+550.29889 2190.2
+550.63708 924.3
+551.30994 46417.2
+551.81152 34791.8
+552.31274 12626.4
+552.81439 3300.2
+555.64117 2729.7
+555.97534 3541.5
+556.30695 2041.8
+556.64423 680.2
+562.30005 1136.2
+562.92554 957.1
+564.65662 18057.7
+564.99097 16924.6
+565.32495 8913.7
+565.65894 3486.1
+565.99695 1269.5
+566.83148 6549.3
+567.33203 3964.9
+567.82745 1260.1
+568.30750 799.3
+573.31555 1705.5
+573.81744 1111.5
+577.24518 4393.6
+578.24933 1445.1
+585.84979 620.2
+586.26245 993.2
+586.75928 990.3
+587.32300 888.8
+587.81616 676.7
+588.31262 1472.2
+591.33240 751.9
+595.81610 49036.6
+596.31750 35255.2
+596.81891 13860.7
+597.32141 3410.6
+600.84387 54756.1
+601.34534 43355.1
+601.84662 17559.9
+602.34924 4811.0
+602.84778 1006.2
+622.38708 1319.1
+630.39343 843.1
+631.34985 1404.3
+631.85229 1077.3
+640.37097 990.0
+643.34241 1078.2
+644.85425 3239.2
+645.35278 2277.8
+650.85522 1869.8
+651.35608 1122.8
+652.35773 23586.2
+652.85974 18772.1
+653.36023 8240.2
+653.86481 1870.4
+657.50732 686.1
+659.86353 64312.9
+660.36511 49136.2
+660.86664 21606.9
+661.36829 6600.3
+661.86945 1976.6
+663.26392 808.9
+663.38092 2353.5
+664.38867 891.8
+665.53510 652.7
+674.38214 881.8
+686.36920 1002.9
+686.87653 1245.2
+700.39630 1227.4
+700.89246 1038.6
+705.33246 865.5
+707.09393 668.0
+708.90009 68948.0
+709.40137 59545.8
+709.90283 27842.2
+710.40442 8716.5
+710.90515 1340.6
+716.40552 6497.1
+716.90649 6467.2
+717.41064 2219.3
+717.90155 851.1
+727.37299 2233.4
+728.37469 1458.4
+743.06909 633.4
+750.16913 647.8
+754.41870 6599.7
+755.42450 2411.0
+756.42572 791.9
+782.43671 3659.7
+782.93604 3852.6
+783.43774 1863.9
+783.93042 894.5
+795.58624 803.7
+807.87219 589.3
+957.09692 616.7
+1017.52747 668.9
+1019.71490 832.8
+1057.24207 821.4
+1123.44775 571.6
+1135.97827 588.8
+1188.05920 806.8
+1190.62378 1680.4
+1191.62952 2322.8
+1198.26880 3683.2
+1319.21411 630.5
+1448.13452 579.6
+1500.37305 569.1
+1553.54663 617.4
+S	1387	1387	1095.27840793
+Z	3	3282.56
+Z	2	2188.709
+293.62631 45655.8
+310.62854 48090.6
+340.43063 57696.3
+364.92679 47442.3
+387.60297 45711.4
+404.97446 47149.6
+414.86856 44993.4
+440.59610 47115.5
+459.07742 44460.5
+479.57184 49856.6
+483.12018 61929.7
+518.97382 50934.8
+523.18927 54439.1
+532.55963 164840.7
+542.21826 48552.8
+613.40527 56013.4
+676.63281 101635.8
+743.34113 104104.8
+794.71515 49971.8
+795.58032 74819.2
+842.41266 192986.5
+843.41998 58071.8
+933.43353 50169.6
+970.37958 52809.2
+984.63470 49987.7
+1036.32007 53831.5
+1040.34302 49897.9
+1057.23206 70728.6
+1142.97156 54443.0
+1198.25012 248017.2
+1777.53650 47501.5
+1833.66248 49079.4
+1845.03552 54279.3
+1877.74670 67713.2
+1878.12305 49411.1
+1879.09924 133935.0
+1879.52087 1565284.3
+1880.03577 58366.3
+1906.69519 135318.1
+1906.96094 499455.8
+1930.58765 80318.0
+1942.76831 68999.5
+1943.77173 85512.8
+1956.99036 43811.6
+S	1389	1389	449.2578596
+Z	4	1793.00014
+110.05078 551.4
+116.05812 493.1
+119.98357 654.6
+120.08058 969.1
+121.79956 2119.6
+124.02707 524.5
+129.03316 503.0
+132.01842 578.9
+133.14073 1233.6
+135.32884 639.0
+151.64888 585.4
+156.42517 510.0
+157.26411 596.5
+158.09587 1535.3
+164.25459 537.2
+165.78224 938.1
+171.11046 614.5
+175.26408 671.2
+176.10712 1424.0
+177.10187 2830.5
+186.12360 870.8
+198.12289 1203.8
+198.89352 871.8
+199.18024 7366.5
+199.25648 1709.9
+199.26595 2479.9
+199.27509 1660.7
+204.13411 2603.5
+214.49300 562.0
+221.12820 79138.2
+221.47516 624.7
+222.13153 9843.7
+226.11829 2776.3
+227.17548 1798.3
+233.16440 1387.6
+244.88591 579.0
+245.42601 519.4
+247.91971 555.8
+249.12318 11147.2
+250.12564 1345.1
+251.15077 1384.7
+257.69711 602.0
+272.16864 593.2
+293.98727 546.5
+297.15622 885.3
+315.16510 1343.7
+317.18445 1355.1
+329.05917 598.2
+332.44614 560.3
+332.56720 579.8
+333.17508 901.9
+342.25067 609.6
+343.38443 558.7
+344.19482 920.8
+344.65811 821.0
+345.95023 583.9
+350.05045 684.7
+353.17349 2742.6
+355.27164 869.4
+360.55612 567.1
+362.20724 4112.7
+363.20529 593.5
+364.18951 795.6
+368.22977 676.2
+377.71338 7013.9
+378.22531 8701.9
+378.55798 5268.8
+378.89243 1879.0
+386.97946 1021.8
+387.26013 643.6
+396.22495 1971.7
+397.54688 1749.7
+397.88101 775.9
+400.26694 2589.8
+400.89862 12831.6
+401.23315 10054.2
+401.56720 4072.0
+401.89886 928.3
+409.46790 997.1
+409.71616 5811.4
+410.21890 2786.1
+410.72018 893.8
+412.73080 951.3
+413.23874 1468.3
+413.90479 770.4
+414.23315 1742.1
+415.23303 1461.2
+416.98291 1695.4
+417.48157 886.3
+423.74554 1516.1
+423.99414 2435.6
+424.24326 1129.2
+427.90811 1173.7
+428.23715 717.4
+428.57089 1282.9
+429.90964 2597.0
+430.24484 1957.7
+430.58136 712.8
+434.57690 850.7
+462.21750 875.2
+463.21378 667.3
+466.25766 8171.5
+466.75833 4237.0
+471.93604 1491.8
+472.27225 1271.8
+472.93573 7070.0
+473.26965 5329.7
+473.60382 2984.8
+473.93848 961.7
+475.28885 773.4
+477.93961 45914.9
+478.27368 38862.8
+478.60785 16841.3
+478.94330 5045.1
+479.27673 1789.5
+481.19131 785.0
+487.30933 631.1
+491.30087 659.1
+502.21475 857.2
+502.78534 3237.2
+503.28592 2321.2
+503.61530 970.6
+503.74664 3311.7
+503.78790 1052.2
+503.95486 871.7
+504.24661 1119.4
+504.29248 1023.2
+507.32257 655.4
+509.30780 3444.2
+509.63034 4599.7
+509.96481 5557.1
+510.28885 5012.5
+510.79160 3288.8
+511.29062 1678.9
+514.40369 1332.7
+514.61774 724.7
+514.73248 1212.0
+515.02344 721.1
+515.63403 251338.0
+515.79108 22227.7
+515.96814 226315.5
+516.23730 1161.1
+516.30188 112035.1
+516.58575 1099.3
+516.63629 34250.1
+516.79486 3536.3
+516.87396 1513.0
+516.91620 542.8
+516.97009 7669.4
+517.20703 1128.3
+517.30115 1488.8
+519.02557 683.8
+519.27167 1806.8
+519.52753 1215.6
+519.76257 698.9
+526.32019 1055.8
+527.31732 711.1
+529.21277 802.6
+529.71777 2916.8
+530.21570 1739.8
+530.72107 1073.1
+531.21698 736.7
+531.76886 1593.1
+532.26593 998.5
+532.56000 1797.4
+542.80725 857.6
+547.92297 577.1
+549.63678 1868.7
+549.97369 1197.3
+550.30463 1626.8
+551.30981 96081.2
+551.81134 61695.1
+552.31250 20756.9
+552.81342 4315.6
+555.64215 2468.5
+555.97302 2555.4
+556.30762 1504.1
+556.64209 943.6
+562.30206 1629.9
+564.65643 13078.1
+564.99084 11821.2
+565.32562 6436.9
+565.65851 3079.9
+566.83130 5487.4
+567.33124 3346.3
+567.83026 842.6
+573.30792 1167.3
+573.82013 1178.7
+574.32465 760.1
+577.24518 8724.7
+578.24915 1766.7
+586.75964 898.5
+587.32312 1268.6
+588.31335 818.3
+595.81598 46019.7
+596.31738 29000.4
+596.81958 10279.6
+597.31897 2287.3
+599.30096 621.2
+600.84375 102411.6
+601.34491 73989.6
+601.60803 665.9
+601.84662 27493.6
+602.34760 7279.0
+602.84991 1423.7
+622.38916 2857.6
+623.39240 940.5
+624.34039 709.3
+624.67871 829.0
+625.01410 930.7
+626.32471 685.1
+627.77545 590.3
+630.37854 713.6
+631.35480 1485.9
+631.85132 879.2
+639.86438 672.7
+640.40137 1636.6
+642.62061 569.6
+643.34198 996.9
+644.85419 2076.4
+645.35364 950.1
+650.85663 1887.6
+651.85950 702.7
+652.35785 22116.8
+652.85870 14088.9
+653.36023 4966.1
+653.86249 1226.4
+659.86304 60003.8
+660.36481 46377.2
+660.86627 19899.7
+661.36743 4353.5
+661.86761 1011.8
+663.38031 2702.2
+674.37860 1037.0
+676.62756 953.2
+686.37000 993.8
+699.89618 1628.4
+700.39325 969.4
+705.34027 2117.5
+706.34052 1197.6
+708.89972 54550.7
+709.40106 45752.7
+709.90210 20314.2
+710.40259 5101.2
+716.40448 7490.6
+716.90637 5192.8
+717.41077 2454.5
+728.38470 813.7
+752.53998 627.0
+754.41998 5880.8
+755.41583 1587.2
+782.43488 2999.7
+782.93640 2599.0
+783.44049 2207.4
+785.65918 537.6
+818.42596 1571.4
+828.44470 662.5
+891.48083 766.8
+898.48700 964.5
+954.25488 598.1
+997.55536 1334.9
+1021.10992 832.8
+1113.66968 650.1
+1145.57629 997.3
+1172.10291 601.4
+1188.00232 567.4
+1190.62109 2356.4
+1191.63074 961.1
+1198.25134 3185.4
+1478.65869 663.6
+1617.73303 710.7
+S	1390	1390	409.7199871
+Z	4	1634.84865
+102.93642 533.6
+104.06245 565.6
+104.56496 539.2
+109.25570 567.7
+113.42767 644.3
+113.43259 663.8
+120.48804 759.2
+121.78929 593.2
+121.79723 2721.2
+121.87405 617.9
+136.07494 1090.0
+141.80476 670.3
+143.77051 528.3
+147.66296 576.3
+151.04654 532.8
+156.90765 631.7
+157.13304 11133.9
+158.13641 1550.8
+159.84431 595.8
+164.05067 509.2
+179.37085 559.8
+185.12794 1493.4
+192.14223 605.5
+194.61656 541.0
+198.89777 1252.7
+199.10811 1320.7
+199.18246 662.0
+199.25224 861.6
+199.26939 2958.4
+199.28473 1117.5
+199.29572 878.9
+199.30591 754.1
+199.36765 770.0
+199.44656 627.9
+206.57120 558.8
+207.11185 859.1
+211.18091 761.8
+214.66168 565.2
+215.29092 502.1
+222.09157 634.4
+223.15535 739.5
+223.78217 566.6
+225.31470 684.7
+227.10223 2876.9
+234.12344 4227.0
+234.94682 634.2
+245.80130 553.3
+250.30646 647.3
+251.14998 16126.1
+252.15437 2203.8
+266.16104 3077.9
+275.65366 1229.4
+284.17139 2243.6
+290.46359 595.6
+301.16766 868.2
+302.18387 3722.8
+302.67587 2738.9
+303.17743 1096.9
+307.17584 1798.6
+311.18915 42162.6
+311.69083 15330.9
+312.19214 2746.9
+315.68182 557.6
+316.18152 16042.9
+316.68295 6181.8
+317.18378 701.2
+323.49878 1030.2
+325.18637 3262.5
+325.68777 1141.6
+329.50253 26898.4
+329.83664 14678.7
+330.17084 4678.6
+330.50467 1061.3
+346.17334 1274.9
+349.18118 727.8
+354.67691 761.4
+356.14465 4797.2
+357.14792 1269.3
+361.16122 1726.9
+361.66196 652.0
+364.23312 921.9
+366.17679 2888.9
+369.94846 619.8
+370.34622 566.4
+371.69730 10746.6
+372.19827 4470.0
+372.70129 1871.2
+373.71429 1264.7
+379.24472 4523.8
+380.70288 5903.7
+381.20599 2399.3
+381.69858 519.1
+383.20129 1531.3
+391.71042 831.5
+420.69830 927.9
+429.24326 630.9
+429.70135 1070.2
+430.20154 874.9
+430.30130 1171.5
+435.27020 850.1
+436.21811 3855.3
+436.71979 1813.7
+437.25061 4320.1
+438.23590 1701.5
+438.73627 1576.5
+440.54944 1381.1
+440.88293 773.4
+443.53189 543.3
+444.21436 811.4
+445.22293 870.6
+446.55356 27321.9
+446.88794 22410.6
+447.22208 9068.2
+447.55786 2270.9
+447.88922 789.8
+450.28345 1648.0
+453.22079 2475.9
+453.72189 1486.3
+462.24915 738.3
+465.03433 592.5
+465.24496 7492.9
+466.24844 1517.7
+466.72604 754.4
+468.29242 13757.8
+469.29510 3365.2
+472.57071 2417.3
+472.90475 2439.6
+473.23715 1602.2
+475.74091 1637.1
+476.24243 1578.6
+476.80722 3152.9
+477.30835 2044.8
+478.24554 13978.8
+478.57944 10624.1
+478.91342 5094.6
+479.57977 513.0
+482.63306 624.2
+483.12305 1426.0
+483.21988 947.8
+483.32162 726.2
+483.38608 771.2
+483.45419 1955.1
+483.65897 784.1
+483.69153 1590.0
+483.78705 977.5
+484.02725 1463.0
+484.15903 572.8
+484.20456 1677.9
+484.24820 407348.1
+484.43814 1251.8
+484.58228 358123.9
+484.63263 2506.3
+484.74591 6635.3
+484.80469 2488.7
+484.87814 1283.5
+484.91617 183216.9
+485.14111 2296.2
+485.17239 1399.5
+485.24994 64590.7
+485.37735 2729.3
+485.42615 1036.1
+485.47830 1319.7
+485.50626 1079.3
+485.54599 812.7
+485.58487 15938.2
+485.71222 1743.8
+485.75235 1056.3
+485.91864 3114.9
+486.04391 680.9
+486.25021 990.8
+487.57251 563.3
+488.75580 985.8
+489.26144 1321.3
+492.22641 2766.7
+492.72845 1656.7
+493.23035 739.5
+493.74927 85094.6
+494.25089 55794.2
+494.75208 21179.1
+495.25369 4416.0
+495.41843 548.8
+497.25552 642.6
+502.75421 6302.4
+503.25607 5012.9
+503.75549 965.0
+510.59442 1008.3
+514.09473 545.1
+515.93475 768.0
+516.27136 3512.4
+516.60809 994.0
+517.78882 592.2
+519.20862 1615.7
+521.94238 54640.8
+522.27655 56533.6
+522.61078 30188.5
+522.94519 10341.5
+523.27679 2031.5
+525.59894 784.5
+527.74304 2029.7
+528.24817 1494.2
+532.29047 935.7
+532.55225 1893.6
+533.18353 560.5
+536.28198 4287.3
+537.28668 1567.3
+539.30652 717.2
+543.28326 3281.0
+543.78418 3186.7
+545.62158 859.5
+550.29742 7466.5
+551.30054 2201.3
+556.82147 795.6
+570.56952 665.9
+572.90356 571.2
+578.32800 1485.7
+584.28302 1750.0
+584.78442 1928.4
+585.29297 1011.4
+590.24396 690.6
+600.40668 3324.7
+600.79700 30331.8
+601.29803 24443.5
+601.41003 1394.1
+601.79993 8400.9
+602.30170 3323.2
+613.34436 1373.4
+629.32556 949.5
+630.38690 661.8
+631.35455 11206.8
+632.35803 4614.4
+649.36542 14438.8
+650.36707 5674.8
+651.36890 888.3
+652.81421 5027.2
+653.31647 5383.1
+653.81738 1827.6
+654.30151 639.1
+661.81873 1075.6
+662.82300 796.2
+669.32611 10645.7
+669.82806 8770.3
+670.32813 4211.3
+670.82977 901.6
+676.63324 935.1
+691.34082 5275.6
+692.34155 2041.6
+703.32556 1001.3
+728.52417 575.9
+731.07391 550.4
+742.38544 900.9
+743.38843 940.7
+760.39661 7994.0
+761.40039 2413.2
+762.40656 869.0
+789.51666 585.6
+795.57568 911.5
+820.38177 5062.4
+821.38397 3171.1
+822.38684 895.6
+840.38647 1275.6
+875.46350 777.4
+889.44763 1110.3
+890.44470 844.2
+986.49695 1744.7
+1004.50836 970.3
+1020.85638 909.0
+1041.36450 608.3
+1054.49146 808.4
+1057.22449 1006.5
+1198.07776 588.0
+1198.23779 3354.5
+1214.80920 584.9
+1236.92114 585.9
+1455.15686 632.7
+1525.35535 754.0
+1643.13489 653.2
+S	1393	1393	409.7251446
+Z	4	1634.86928
+103.88863 599.2
+105.39268 630.5
+106.87420 555.4
+114.92270 542.8
+119.66306 523.5
+121.79832 2442.7
+127.38414 527.7
+128.57001 565.5
+128.57373 628.9
+131.72420 608.4
+132.14276 546.7
+136.07570 1082.8
+140.10423 559.6
+142.53183 568.2
+157.13310 10387.9
+173.15726 614.6
+174.03207 702.3
+183.40001 604.7
+185.12793 2301.0
+187.10863 654.8
+188.26680 1642.7
+188.29472 2470.7
+188.30943 1727.3
+188.32285 781.4
+188.33951 635.1
+193.02440 734.6
+198.89653 712.0
+199.10762 1438.6
+199.16817 734.9
+199.24557 873.1
+199.26634 1306.3
+199.27866 2338.4
+199.28792 1889.5
+199.29985 628.1
+199.31256 634.6
+199.37556 680.7
+200.39917 537.4
+209.39983 615.0
+211.18152 1110.6
+211.89333 691.5
+213.77393 601.1
+224.50772 725.1
+227.10245 3731.4
+229.37444 551.8
+234.12306 3320.6
+235.12637 924.7
+241.40382 560.6
+251.14996 14584.3
+252.15370 2028.2
+266.16046 2616.5
+271.60858 599.9
+271.92441 735.6
+275.65182 1104.4
+284.17114 2462.6
+293.62949 562.9
+294.17859 642.3
+299.97089 659.8
+300.79022 546.0
+301.89621 602.4
+302.18430 2071.8
+302.67575 2283.2
+307.17639 899.1
+311.18909 35311.1
+311.69070 13818.2
+312.19281 3132.8
+316.18146 14130.4
+316.68307 6174.7
+317.18478 1604.5
+322.19077 705.3
+324.17548 636.1
+325.18674 2345.4
+325.68887 996.1
+329.50229 22955.8
+329.83679 14170.7
+330.17059 4675.1
+330.50443 799.8
+338.13242 1066.5
+342.25894 841.8
+345.06241 561.5
+346.17487 995.6
+350.26639 693.4
+352.16385 612.2
+356.14484 5257.3
+357.14810 826.9
+359.71625 825.0
+361.16013 1749.8
+364.23569 799.9
+365.25305 560.6
+366.17630 3028.6
+366.65952 557.3
+371.69708 12229.8
+372.19870 6173.0
+372.70078 1173.0
+374.21439 735.0
+376.48013 600.8
+379.24460 4970.2
+380.24884 757.7
+380.70285 4400.7
+381.20474 2093.0
+383.20401 1037.6
+391.70929 1445.0
+392.20935 721.4
+401.49963 614.1
+414.53754 652.0
+420.19858 540.9
+421.20050 643.2
+426.03702 569.1
+427.52802 803.2
+429.70273 975.0
+435.27307 827.0
+436.21799 3070.0
+436.71991 1918.4
+437.24936 4018.2
+438.24670 1636.7
+438.73434 688.1
+440.55252 1271.0
+440.88498 1179.2
+442.35229 559.1
+445.22235 1141.6
+446.55338 24523.1
+446.88766 22033.1
+447.22205 12773.2
+447.55545 5150.9
+447.88522 773.0
+450.28250 1088.5
+453.21957 780.6
+453.72131 1593.6
+465.24463 6945.9
+466.24841 1713.7
+467.23376 1178.6
+468.29251 11732.0
+469.29495 4289.1
+472.23947 707.1
+472.56958 3400.6
+472.90393 3880.5
+473.23746 2585.3
+473.57434 664.4
+475.73889 2336.5
+476.23904 825.0
+478.24496 9966.1
+478.57928 12407.2
+478.91336 6411.1
+479.24487 1841.7
+483.12549 1108.6
+483.45920 1226.7
+483.79105 826.9
+484.02768 1325.3
+484.05682 641.0
+484.16617 886.2
+484.19995 1804.3
+484.24799 292862.3
+484.52750 939.6
+484.58209 332835.3
+484.74716 5785.9
+484.80386 1674.2
+484.91595 199545.0
+484.96527 1554.8
+484.99463 1596.7
+485.13882 1907.7
+485.24957 78344.3
+485.29929 758.1
+485.47302 816.5
+485.58475 18956.6
+485.70850 1426.9
+485.75031 1513.2
+485.91785 3866.5
+486.04974 926.6
+486.25134 1010.6
+492.22726 1422.0
+492.72861 786.9
+493.74893 73260.9
+494.25058 56180.3
+494.60831 613.7
+494.75183 20917.6
+494.88666 646.5
+495.25372 6050.7
+495.41406 771.4
+502.75369 4411.9
+503.25732 4198.6
+503.75793 1758.3
+510.93124 1253.8
+515.93982 1187.6
+516.26886 1149.5
+516.60687 1110.6
+516.94519 691.0
+519.20502 916.0
+521.94214 39427.0
+522.27625 45923.8
+522.61035 31385.6
+522.94452 11738.4
+523.27893 3395.8
+527.74152 1246.1
+528.24255 1667.3
+532.59827 1809.6
+536.28131 3564.6
+537.28345 1282.6
+540.08362 626.9
+543.28345 3980.1
+543.78540 4184.1
+544.28864 1443.4
+549.13080 681.5
+550.29730 6728.3
+551.30127 2550.2
+562.42657 637.9
+578.25757 611.2
+578.32922 1030.1
+584.28339 1464.2
+584.78992 1681.4
+585.29211 882.2
+591.79120 760.6
+596.27130 887.2
+600.40912 826.9
+600.79651 23262.5
+601.29791 21571.9
+601.79889 9530.8
+602.29932 3499.8
+613.33990 767.1
+614.33856 872.0
+621.37622 674.6
+631.35425 10309.6
+632.35736 4996.8
+633.36157 1055.6
+649.36499 12902.7
+650.36847 6319.3
+651.37219 1544.7
+652.81494 3475.4
+653.31696 3580.9
+653.81702 1741.8
+654.32440 722.1
+661.81873 942.6
+662.31775 1017.5
+669.32587 8286.2
+669.82690 10330.7
+670.32770 4340.9
+670.83038 1513.9
+674.45020 555.1
+691.33972 4841.9
+692.34180 2368.9
+742.38348 977.3
+760.39508 5155.6
+761.39838 3413.3
+762.40619 1056.8
+820.38141 5520.3
+821.38440 2411.2
+822.38531 1058.0
+835.72205 587.5
+840.39209 1462.0
+841.39105 1068.3
+889.43817 1204.3
+986.49170 967.4
+987.50458 1131.6
+987.92023 652.3
+1004.50403 831.0
+1005.50775 1036.8
+1021.10492 874.9
+1055.49524 640.5
+1198.34204 3572.9
+1240.33533 662.6
+1403.91357 561.7
+1415.42444 634.1
+1614.19470 704.2
+1618.32922 613.7
+S	1394	1394	410.2268246
+Z	4	1636.876
+102.07314 521.5
+112.53627 492.3
+118.78338 539.6
+121.79758 2351.2
+136.07573 1249.9
+137.97568 580.6
+138.27179 588.1
+155.97470 605.3
+157.13319 11533.5
+157.61212 679.7
+158.13660 1380.1
+164.99722 730.6
+165.77965 824.9
+168.74042 638.0
+169.87897 546.2
+185.12822 2646.1
+187.10785 1090.8
+198.89848 951.9
+199.10710 1197.2
+199.18167 1221.8
+199.23239 722.9
+199.26369 2256.0
+199.27190 900.4
+199.28491 2048.4
+199.31656 850.2
+211.18059 1459.5
+227.10263 4011.2
+234.12337 4489.3
+234.64992 1027.0
+241.08423 662.1
+245.16411 707.7
+251.15019 17058.7
+252.15334 2477.2
+266.16086 3082.9
+267.09698 622.5
+271.34332 823.8
+273.09628 574.2
+275.65234 2041.5
+276.15466 1121.9
+284.17188 3337.9
+295.86969 621.6
+302.18427 2587.4
+302.67538 2622.2
+303.17783 831.7
+307.17569 1192.8
+311.18927 45771.2
+311.69098 18597.0
+312.19238 3782.3
+316.18164 17539.7
+316.68307 7157.8
+317.18332 1078.9
+320.73816 646.3
+323.49908 1097.6
+324.90421 581.2
+325.18686 2375.9
+325.68851 754.6
+329.50253 27901.2
+329.83676 21428.1
+330.17136 5517.1
+330.50546 1438.6
+338.13318 921.2
+346.17160 1230.7
+349.03149 627.6
+352.16479 785.8
+356.14474 5153.3
+361.16144 3117.0
+361.66168 646.4
+364.23312 1051.2
+366.08398 626.6
+366.17725 2744.4
+371.69720 12480.8
+372.19916 7654.6
+372.70163 1792.1
+373.71375 2330.7
+374.21432 917.4
+379.24454 6435.2
+380.24722 1393.4
+380.70248 7190.9
+381.20361 2933.6
+383.20270 1201.5
+388.69904 1220.5
+391.95917 1872.0
+420.70102 939.2
+435.26962 1389.4
+436.21838 3787.8
+436.72104 1675.1
+437.25107 4042.6
+438.23914 2054.4
+440.55124 770.6
+440.88300 912.8
+446.55365 28724.5
+446.88788 26702.6
+447.22229 12507.2
+447.55652 3671.2
+447.88980 1249.9
+450.28070 1660.3
+453.22040 2007.8
+453.72327 1434.5
+462.99530 684.9
+465.24518 7764.5
+466.24774 2267.7
+468.29257 14091.3
+469.29495 3502.1
+469.88568 836.2
+472.24374 971.3
+472.57135 3053.7
+472.90402 3679.8
+473.23819 2242.1
+473.57568 622.1
+475.74094 1840.8
+476.24301 1386.9
+476.73758 962.7
+478.24545 12029.6
+478.57922 11779.7
+478.91354 7292.4
+479.24576 2047.2
+479.97333 816.5
+481.50003 736.4
+482.37949 954.8
+483.12784 2593.4
+483.46045 2412.7
+483.69171 2074.9
+483.75726 668.1
+483.79422 1127.8
+484.02762 2160.4
+484.06097 1219.8
+484.13727 566.2
+484.15604 788.3
+484.18375 1578.6
+484.20898 2419.6
+484.24835 434410.7
+484.35895 1919.8
+484.52365 1264.6
+484.58237 425422.8
+484.65762 812.8
+484.67120 635.6
+484.74539 8673.3
+484.80493 3213.2
+484.87045 1246.6
+484.91626 235771.8
+485.13947 3358.1
+485.17032 971.3
+485.25003 86694.6
+485.30447 620.4
+485.32654 682.3
+485.37164 3083.9
+485.47522 1655.5
+485.50867 725.2
+485.58493 22068.1
+485.70734 2975.3
+485.81396 863.0
+485.86087 686.3
+485.91833 4556.7
+486.04504 1518.8
+487.90717 785.3
+488.75702 1171.6
+488.91797 733.7
+489.25946 712.0
+492.22711 2207.2
+492.72583 2092.7
+493.22833 725.8
+493.66644 631.6
+493.74939 99633.2
+494.25082 67151.2
+494.75217 25183.1
+494.90067 882.9
+495.25314 5419.2
+502.75436 7688.1
+503.25693 4236.4
+503.75815 1515.6
+510.26999 714.4
+510.59766 1230.8
+515.94110 1776.9
+516.27362 1776.9
+516.60760 1155.0
+519.20691 1722.0
+519.81744 896.7
+521.94244 56161.6
+522.27655 68796.4
+522.61090 38205.1
+522.94531 12990.7
+523.27838 2691.3
+525.93274 886.8
+527.74390 2129.2
+528.24359 1312.1
+532.57678 1720.4
+536.28247 5064.7
+537.28296 1273.8
+543.28491 4149.8
+543.78467 3937.7
+544.28503 1717.1
+545.95526 1011.9
+550.29742 7726.9
+551.29968 2489.3
+562.30457 791.8
+564.19049 516.6
+569.35339 1464.1
+578.32690 1074.4
+579.33173 773.8
+584.28583 1680.4
+584.78625 1293.1
+585.28772 1176.8
+590.24097 1165.7
+600.40656 1110.5
+600.79718 29591.6
+601.29840 27949.0
+601.79999 10933.8
+602.29987 3264.1
+613.34583 1283.3
+614.34320 1051.1
+614.67639 1197.1
+631.35461 12440.1
+631.79169 593.3
+632.35785 5948.3
+633.36365 950.2
+639.05347 615.1
+646.28192 535.7
+646.31232 512.7
+649.36542 16557.9
+650.36896 6861.8
+651.37024 1375.5
+652.81561 4759.6
+653.31763 4685.8
+653.81610 1692.8
+654.31464 1030.1
+660.32318 1404.8
+661.82001 1036.4
+662.32037 1755.6
+669.32654 13066.1
+669.82806 12452.5
+670.32916 6197.2
+670.83575 1767.2
+671.35327 559.8
+671.37073 554.5
+676.65063 1118.1
+691.33997 7011.8
+692.34131 2594.2
+742.38928 1807.2
+760.39783 6679.4
+761.40198 4572.8
+762.40302 1286.8
+788.44397 601.0
+795.59131 770.2
+820.38177 5991.1
+821.38647 3900.2
+822.38672 892.7
+840.38696 1690.6
+841.39569 864.5
+848.56195 536.5
+875.45062 1278.2
+890.43359 778.4
+986.49207 1520.4
+987.50684 1021.0
+1004.51300 824.4
+1005.50775 750.4
+1020.33807 766.7
+1055.49231 732.8
+1198.29858 3384.3
+1200.82300 746.5
+1429.69580 628.7
+1541.04846 604.1
+S	1395	1395	449.2630471
+Z	4	1793.02089
+111.67988 535.3
+113.45604 629.6
+118.98558 598.2
+120.97197 581.9
+121.79910 2751.1
+133.15240 1080.2
+152.57350 591.9
+158.09625 2108.0
+160.11212 749.2
+160.97681 538.9
+161.81956 649.3
+167.70996 638.3
+171.63206 596.5
+176.10667 2137.7
+177.10162 1954.7
+179.27119 736.9
+198.89505 988.6
+199.05319 612.6
+199.18021 7327.0
+199.22653 800.9
+199.23360 725.1
+199.24805 937.2
+199.26691 2562.3
+199.28278 1039.5
+199.29204 896.6
+199.36372 1090.7
+200.18347 1309.9
+203.11722 1149.2
+221.12820 87172.2
+222.13155 10950.3
+223.13605 722.8
+227.17569 1660.9
+233.16463 1361.7
+233.56152 634.4
+237.09915 578.7
+238.62358 562.7
+249.12317 13644.4
+250.12721 2237.4
+251.15016 1290.2
+254.38800 646.4
+269.15521 1060.5
+271.67371 752.8
+279.74365 564.5
+294.63306 705.3
+308.88611 752.8
+317.18637 1928.1
+318.25290 526.6
+335.72183 6452.7
+336.22214 1528.7
+340.52991 901.9
+344.19821 1216.9
+355.72510 654.6
+362.20694 6536.8
+363.20972 1013.4
+377.71317 4433.1
+378.22491 9502.3
+378.55801 6496.2
+378.89307 2657.0
+381.33847 609.4
+387.22745 1320.7
+395.50436 603.1
+397.54529 1177.5
+400.89966 2883.8
+409.21991 914.2
+409.47037 959.4
+409.71738 1572.9
+409.97028 1171.7
+413.24011 1299.0
+414.24548 698.5
+415.18509 614.9
+415.23462 1212.9
+416.98196 948.0
+417.22919 890.4
+419.18561 585.5
+419.20609 533.9
+423.74448 1741.8
+423.99548 2108.8
+424.24548 961.9
+427.52063 627.1
+429.39352 759.1
+434.24194 2462.8
+434.57520 1782.5
+434.90097 684.0
+459.58783 528.0
+461.33020 518.0
+466.26022 834.0
+471.93481 1890.0
+472.26944 1785.3
+472.93607 2481.9
+473.27087 3399.6
+473.60587 1316.9
+476.75702 727.0
+477.93964 60546.2
+478.27368 49060.5
+478.60809 22043.5
+478.94159 6267.0
+479.27744 2025.2
+481.19608 1154.1
+492.25803 581.0
+502.78598 2483.9
+503.28461 2085.5
+503.75110 693.8
+506.91364 822.2
+507.24850 765.7
+508.56659 762.5
+509.63101 7279.8
+509.96585 4088.2
+510.28986 6114.9
+510.79224 3164.6
+511.29205 1289.3
+514.40234 1432.8
+514.73364 948.3
+515.02271 1023.9
+515.35583 1216.4
+515.42950 835.9
+515.58209 1452.5
+515.63403 297108.6
+515.78693 1399.8
+515.80078 1503.0
+515.96814 264510.1
+516.01831 973.0
+516.24506 2078.8
+516.30219 126390.8
+516.58051 1420.6
+516.63593 40761.9
+516.87012 1029.5
+516.96979 10914.6
+517.20679 1612.1
+517.30267 1523.7
+526.32263 1077.8
+529.61243 597.3
+529.71759 3571.7
+530.21918 3130.4
+530.71820 1578.5
+531.76807 1688.5
+532.26715 1423.5
+532.60474 1989.0
+542.34088 2882.9
+543.34399 861.6
+546.62372 1180.8
+546.96112 885.0
+549.12421 803.1
+549.63782 2824.5
+549.97083 2709.5
+550.30396 2740.6
+551.31049 10716.9
+551.81189 7868.3
+552.31323 2997.0
+555.64172 3748.4
+555.97681 2751.1
+556.30798 1181.8
+563.25861 1714.8
+563.59100 1545.0
+564.65656 12864.0
+564.99097 13455.1
+565.32520 6299.7
+565.65955 1798.6
+566.83228 4728.4
+567.32959 4177.2
+567.83752 761.4
+568.30804 5643.5
+568.80963 5800.3
+569.30914 1002.8
+577.24585 1062.6
+586.25159 808.3
+586.75873 999.1
+586.81104 1999.7
+587.31818 1658.7
+588.31091 1296.6
+595.81604 52244.5
+596.31738 36127.0
+596.81879 10261.6
+597.32013 3529.7
+597.82617 705.7
+600.84296 14529.1
+601.34515 8947.6
+601.84747 2230.0
+602.35223 836.3
+617.34143 883.3
+630.37616 913.8
+631.35242 1698.0
+631.85687 825.2
+643.34235 1426.3
+643.84033 624.1
+644.85522 922.0
+645.35107 805.8
+649.29248 2376.3
+650.85864 3355.8
+651.36005 2082.9
+652.35754 17530.5
+652.85913 13291.9
+653.36035 4493.2
+653.86096 1262.5
+659.86346 70045.6
+660.36499 53136.8
+660.86627 23105.1
+661.36780 4919.1
+661.87347 1092.4
+663.37988 2776.9
+664.38593 957.4
+676.63959 1059.5
+699.88879 1122.8
+708.90002 44056.6
+709.40137 34960.2
+709.90302 16085.5
+710.40552 3771.2
+716.40521 7168.9
+716.90643 6906.3
+717.40979 2831.7
+731.08313 715.2
+754.41974 5514.0
+755.41998 2487.4
+756.42023 1018.2
+762.37610 1282.0
+763.37933 805.5
+782.43561 2403.3
+782.93292 1452.2
+783.44165 938.9
+795.57166 796.5
+820.32794 643.0
+875.46161 1774.8
+876.46558 1422.4
+1061.91638 562.3
+1145.57434 765.0
+1190.62231 2503.5
+1191.62671 970.3
+1198.34644 3283.8
+1617.38306 626.8
+1730.79480 557.2
+S	1397	1397	1879.90740793
+Z	3	5636.447
+Z	2	3757.967
+532.53015 1629.3
+552.42517 858.5
+581.66364 543.6
+586.60730 772.4
+594.93811 592.6
+611.18958 627.3
+676.65320 1221.4
+728.78760 616.3
+826.42657 653.5
+948.69257 762.3
+1033.10938 607.5
+1177.89758 640.7
+1178.24426 598.6
+1198.18420 3177.9
+1583.68579 581.0
+1876.77148 603.0
+1878.57117 1322.1
+1879.27600 2314.9
+1879.57715 19578.6
+1880.13721 782.0
+1880.63391 773.8
+1907.05542 7353.2
+1930.32874 1294.8
+S	1398	1398	533.179407933
+Z	2	1064.511
+Z	3	1596.263
+138.11127 5616.2
+139.35632 4372.6
+139.93521 4716.4
+141.85019 6791.2
+144.64638 5149.1
+147.59628 4900.5
+147.61330 4865.5
+149.62402 5068.8
+156.55246 4731.6
+157.57361 5368.8
+158.22769 4405.7
+171.63887 7075.5
+188.09319 4706.8
+188.09897 4564.1
+198.89270 6002.3
+199.18465 15572.1
+199.27271 11578.3
+199.28305 24503.6
+199.37994 10110.2
+209.08073 5149.7
+218.91241 5573.4
+227.31749 5006.9
+250.16928 5239.9
+262.42084 4966.6
+285.30457 5241.1
+289.62668 5816.9
+308.87155 5812.5
+345.49561 4953.2
+381.31912 5210.2
+386.72055 4941.4
+397.06451 5100.6
+413.93790 5140.1
+427.50174 5362.7
+433.05185 5529.2
+482.61108 6118.4
+495.43979 5086.4
+497.55310 6257.6
+500.69464 4572.2
+505.60626 5423.3
+532.57605 18750.7
+549.10767 9660.2
+557.73969 5264.6
+630.35492 6526.6
+630.71252 5639.9
+639.37201 7563.2
+653.14014 10643.3
+675.24152 6551.3
+676.63483 7785.9
+731.06342 7635.3
+736.45599 6012.3
+774.88452 5572.4
+795.56293 8923.6
+863.34906 4833.1
+903.91327 4779.8
+1057.23279 7975.6
+1103.90710 5194.5
+1121.63391 6309.6
+1136.88379 4803.2
+1198.28638 26413.2
+1700.77271 5375.2
+1753.62830 5933.7
+1878.31897 6097.4
+1879.13098 8834.4
+1879.52283 182736.8
+1879.89575 8380.4
+1880.35583 8001.4
+1881.64270 8074.1
+1884.83972 6149.6
+1907.05737 67252.4
+1930.41516 7659.1
+S	1399	1399	409.7194996
+Z	4	1634.8467
+109.43367 524.9
+115.26592 471.1
+117.52002 582.4
+120.97436 665.4
+121.41033 617.9
+121.78758 689.7
+121.79784 2225.6
+125.26965 502.9
+131.80931 621.1
+136.07510 4659.3
+137.34608 574.9
+149.10175 666.4
+151.43983 577.5
+156.14903 1291.1
+157.13298 2062.8
+157.60567 533.1
+169.56189 598.9
+173.48845 564.1
+181.47348 585.8
+190.92274 642.1
+196.85980 630.5
+198.88919 768.5
+199.17950 948.4
+199.22351 615.4
+199.26804 993.5
+199.27759 3473.4
+199.37534 1606.5
+221.30161 590.7
+251.10185 1733.6
+251.15021 1248.4
+252.13342 2022.1
+258.14883 779.5
+263.13831 1556.3
+269.65427 2192.1
+270.98047 620.2
+311.18887 4355.1
+311.69214 987.6
+316.18234 1165.2
+319.66751 1664.2
+321.07114 676.1
+328.67322 4318.6
+329.17441 1253.2
+329.50229 3604.5
+329.83578 1222.1
+341.84726 596.3
+342.67084 4629.3
+343.17169 1707.7
+343.67300 777.0
+346.79865 590.2
+348.11584 719.8
+351.18564 14065.7
+351.68713 6853.8
+352.18814 1772.8
+356.14178 762.3
+360.21915 630.5
+370.69171 1364.5
+371.69803 659.6
+378.76666 727.6
+384.19507 1235.9
+388.23312 1808.2
+389.23859 735.6
+391.23254 12765.4
+392.15765 583.8
+392.23672 3259.8
+393.20166 11763.4
+393.70294 5693.5
+394.20535 1372.3
+395.87344 2275.3
+396.20599 897.6
+397.25638 949.3
+430.83936 606.0
+431.99454 836.5
+443.41760 535.6
+446.55231 2504.8
+446.88812 1344.7
+463.24570 954.6
+464.93494 812.3
+465.24423 776.8
+468.29285 864.7
+471.24973 1261.8
+478.24274 1751.2
+478.57806 1260.6
+484.24722 48541.2
+484.58157 35004.4
+484.73920 552.8
+484.91589 8385.3
+485.24780 844.3
+493.74857 8623.4
+494.25089 4412.0
+494.75235 954.9
+502.75211 598.1
+503.25961 1409.5
+503.80444 766.9
+504.26385 579.5
+514.91766 559.4
+519.78668 14804.6
+520.28876 7320.7
+520.79071 2127.1
+521.26959 30082.3
+521.94183 4281.6
+522.27448 11064.0
+522.60925 1054.2
+523.27435 1033.8
+524.74103 1393.4
+532.59210 2110.4
+533.74567 2078.7
+534.24780 1638.8
+538.30023 32449.0
+539.30334 10974.2
+540.30615 1520.7
+566.07568 627.4
+600.79639 2454.1
+601.30194 1623.0
+630.21387 582.6
+630.25555 646.4
+631.34460 844.9
+639.26202 639.7
+649.36597 991.6
+669.32593 1189.5
+676.58374 516.8
+676.64227 750.2
+684.33191 1854.1
+701.36438 4718.0
+702.36798 1985.6
+703.37445 654.0
+732.50830 587.0
+760.39685 609.9
+766.36658 675.6
+767.45062 642.6
+795.55511 814.6
+849.60516 612.8
+898.00140 672.0
+994.94232 600.2
+1008.34955 539.8
+1144.66748 774.4
+1198.32092 3571.0
+1352.66650 613.3
+1525.43042 673.5
+S	1401	1401	449.2631696
+Z	4	1793.02138
+120.08076 772.4
+120.59686 666.0
+121.79712 2162.9
+122.16503 581.1
+122.51524 723.3
+139.66690 514.3
+139.78902 580.9
+155.17674 542.6
+158.09598 1631.5
+163.71786 616.6
+176.10696 1839.2
+177.10164 2186.3
+177.11119 779.3
+188.24989 1003.1
+188.27307 1884.5
+188.28154 1920.6
+188.29401 2059.4
+188.32045 1160.7
+188.33469 745.9
+188.37425 583.3
+193.92354 564.7
+197.67421 538.1
+198.79343 609.6
+198.89157 940.7
+199.14897 567.0
+199.18034 7016.6
+199.27238 3083.8
+199.28090 1565.0
+199.36943 1017.1
+200.18289 1493.5
+219.21762 627.5
+221.12810 75361.7
+222.13145 8353.9
+227.17517 1810.4
+231.45917 589.4
+233.16489 981.4
+240.13095 489.9
+242.14824 925.4
+243.70477 587.0
+249.12296 11995.2
+250.12682 970.2
+251.14999 1157.4
+270.14487 2940.4
+271.67609 660.5
+289.77600 701.4
+317.18579 1736.7
+319.73303 539.8
+325.03650 672.3
+329.67068 848.4
+334.08051 732.2
+335.72128 5391.0
+336.22177 931.7
+344.19681 1004.3
+354.62854 523.6
+362.20685 5816.0
+363.21011 1206.8
+377.71439 3237.9
+378.22421 11756.1
+378.55746 5017.5
+378.89124 2630.4
+386.54077 1629.4
+386.87802 1427.8
+386.97714 1359.1
+387.22580 1552.6
+389.95389 630.4
+402.77264 559.1
+413.23828 1713.6
+413.90472 616.9
+423.74442 1670.5
+423.99738 1198.0
+427.49374 736.4
+428.56339 651.0
+431.22559 1208.8
+431.55829 1176.9
+433.23129 872.2
+434.24112 1410.4
+435.24057 1221.8
+440.21140 500.5
+443.19193 695.7
+471.93588 2716.9
+472.27017 1573.1
+472.60645 909.0
+472.93588 3088.0
+473.26996 2803.8
+473.60324 1108.3
+475.28983 1416.1
+477.93942 53483.8
+478.27350 40902.5
+478.60785 18907.5
+478.94147 4075.2
+479.27908 1011.7
+480.26245 570.5
+482.59882 697.6
+486.24796 909.8
+502.78482 3095.7
+503.28629 1791.1
+503.95374 862.2
+504.29285 1226.7
+509.63034 6928.3
+509.96500 5292.8
+510.28934 5278.5
+510.79187 3431.5
+511.28763 898.9
+515.02490 679.0
+515.35785 932.1
+515.58270 949.7
+515.63379 258051.5
+515.78296 861.0
+515.79803 771.0
+515.96790 213996.8
+516.24432 1456.8
+516.30200 99731.2
+516.58099 1076.6
+516.63574 29917.2
+516.96954 6935.5
+517.20386 1033.3
+517.53882 630.1
+520.76782 2135.0
+521.26843 689.7
+521.77277 651.1
+526.32043 1053.3
+528.70709 889.1
+529.71533 1696.9
+529.77460 36321.5
+530.27594 21408.0
+530.77655 9317.9
+531.27777 1852.6
+531.76715 1633.5
+532.52405 1933.0
+534.26733 713.1
+542.33856 2469.0
+546.62457 5955.1
+546.95850 2829.0
+547.29297 973.1
+547.62714 757.8
+547.96906 631.1
+549.09058 916.1
+549.63641 1986.7
+549.97058 1941.2
+550.29926 1753.5
+551.31097 4762.1
+551.80951 1866.0
+555.63873 1892.1
+555.97522 1184.9
+556.30585 837.0
+564.65594 12241.0
+564.99054 12881.4
+565.32526 4118.8
+565.65741 2015.5
+566.30511 1512.3
+566.83179 4096.2
+567.32654 3156.7
+568.30756 10565.2
+568.80927 4577.6
+579.30847 24104.6
+579.81000 13454.5
+580.31097 5452.4
+582.29169 759.0
+586.81006 1676.7
+587.30603 993.7
+588.31305 1140.4
+589.30975 907.8
+595.81549 49579.2
+596.31702 31396.5
+596.81848 11653.8
+597.32159 3094.9
+600.84467 5559.6
+601.34631 2977.9
+624.84833 727.5
+625.34869 816.1
+631.35498 1624.5
+634.82318 2024.5
+635.32574 2032.4
+635.81989 1011.3
+643.34882 1385.0
+644.85376 1890.6
+649.29266 1967.7
+650.85693 3255.5
+651.36230 1189.6
+652.35687 17749.3
+652.85925 13509.0
+653.35980 4488.6
+653.86377 1432.3
+659.86292 66386.1
+660.36450 46306.1
+660.86566 16283.1
+661.36829 4574.1
+661.86566 1048.1
+663.38013 2131.0
+664.38599 868.3
+699.89478 1098.5
+708.89941 35398.3
+709.40070 30285.8
+709.90222 12177.0
+710.40430 3341.2
+710.91260 824.1
+716.40558 6545.5
+716.90765 5447.9
+717.40918 2372.2
+745.05676 635.4
+754.41870 6692.0
+755.42230 2018.6
+763.37506 653.9
+782.43518 1477.2
+782.93616 770.9
+783.43573 638.7
+795.54980 992.2
+797.53436 592.6
+862.42523 987.3
+867.70642 796.5
+875.45496 1590.3
+876.47052 965.9
+891.48218 918.4
+941.31702 625.4
+1019.86835 573.3
+1021.02618 755.6
+1131.30713 611.1
+1190.62964 2048.6
+1191.62598 1384.5
+1198.17517 3556.1
+1259.22498 744.6
+1313.36719 698.7
+1338.62512 568.5
+1343.72131 614.3
+1413.22864 636.0
+1447.93616 615.2
+1497.79004 551.3
+1525.23828 917.2
+1546.47253 625.8
+1583.31726 727.1
+1602.66895 707.6
+1649.48413 875.5
+S	1402	1402	449.7645746
+Z	4	1795.027
+113.86983 658.8
+116.90157 564.2
+120.08017 1032.1
+120.65717 867.1
+121.79953 2594.3
+121.80556 687.3
+133.13516 1029.1
+134.98865 584.5
+135.02042 544.6
+145.14874 521.9
+152.96393 627.8
+158.09596 2855.4
+158.32968 515.8
+160.07518 760.7
+160.18736 553.2
+176.10675 2832.0
+177.10176 3173.2
+185.16368 1665.0
+193.25037 762.6
+199.18039 11221.4
+199.21933 677.6
+199.24089 1287.0
+199.26244 935.3
+199.27292 2711.9
+199.30681 871.3
+199.37096 819.9
+199.37346 808.7
+199.39861 519.1
+200.18385 1131.4
+203.11812 1625.9
+203.70607 543.5
+214.49908 590.2
+216.11932 580.5
+221.12828 101372.9
+221.47319 691.2
+222.13159 12991.1
+225.12297 1470.9
+225.76294 583.6
+227.17523 1899.2
+233.16490 2081.6
+235.97186 641.4
+238.63452 539.6
+242.14943 2336.2
+249.12318 16043.4
+250.12639 2731.6
+251.15057 946.2
+252.05150 554.8
+254.78894 510.9
+259.96732 525.4
+270.14459 5687.4
+271.57397 733.3
+271.87329 556.0
+301.28610 602.9
+308.88104 711.9
+317.18585 2374.4
+319.65585 551.8
+327.20847 678.8
+334.92511 528.1
+335.72137 8862.8
+336.22244 2974.0
+337.53296 571.8
+339.20987 552.4
+340.86584 723.5
+342.24988 748.6
+344.19443 1368.8
+362.20718 7505.7
+363.20975 1321.4
+374.28311 551.9
+377.19501 946.1
+377.71384 5740.2
+378.22476 13204.3
+378.55862 6883.5
+378.89322 2565.4
+379.22723 1133.1
+381.33640 631.6
+386.54239 2765.4
+386.87561 1101.0
+386.97910 754.4
+387.22672 1374.4
+387.47647 789.5
+387.54572 656.0
+397.54807 1634.4
+397.88092 1168.5
+400.89890 552.1
+401.23340 735.6
+409.21930 972.7
+409.71921 706.4
+413.23920 2251.4
+413.51334 599.6
+415.22858 871.3
+417.23062 1466.9
+421.23810 977.4
+423.74518 2904.8
+423.99603 2485.7
+424.24655 1417.3
+431.22501 1973.2
+431.55978 1924.6
+432.61221 512.8
+432.75452 912.3
+433.22824 879.4
+433.56073 929.0
+433.89722 762.9
+434.24170 1414.6
+466.25836 1057.0
+469.90393 786.5
+471.93723 2187.8
+472.26965 1982.3
+472.93576 4459.7
+473.27069 4223.3
+473.60538 2009.5
+475.29175 2021.6
+476.29297 976.2
+477.93973 71296.1
+478.27380 68426.7
+478.60791 27854.3
+478.94244 7514.9
+479.27600 1926.5
+481.24863 693.8
+482.62512 799.0
+486.24792 2110.3
+501.27963 848.7
+502.78497 5908.8
+503.28412 1514.1
+503.78647 1159.1
+504.28973 736.4
+505.27353 995.4
+509.63095 6387.1
+509.96564 6273.7
+510.29028 11025.1
+510.63666 761.3
+510.79178 4501.0
+511.29337 1217.3
+514.40814 2288.3
+514.73853 1668.4
+515.02466 2125.0
+515.07397 793.9
+515.35760 1694.1
+515.57990 1957.7
+515.63416 367672.3
+515.78162 1256.0
+515.80518 1396.4
+515.96826 307133.8
+516.01855 1269.4
+516.24622 2550.6
+516.30231 148003.2
+516.37152 587.6
+516.38391 799.7
+516.57983 2197.5
+516.63617 49688.8
+516.79279 735.3
+516.86548 2505.1
+516.91241 1594.7
+516.97076 14012.0
+517.20209 2058.5
+517.30499 2922.6
+517.40454 529.2
+517.53455 952.3
+520.76917 4771.0
+521.27045 2642.3
+521.77307 994.4
+526.32068 892.0
+529.21033 1459.3
+529.71600 2412.6
+529.77502 76720.3
+530.21686 2502.6
+530.27618 43710.1
+530.77655 15896.3
+531.27667 3996.1
+531.76996 2839.8
+532.27039 1129.5
+532.53503 1871.7
+542.33978 4203.2
+543.34619 1006.3
+546.62512 5431.7
+546.95941 5988.2
+547.29388 4257.6
+547.62714 850.3
+549.63641 3682.4
+549.97168 3078.8
+550.30334 3251.7
+551.31085 8429.5
+551.81097 4820.6
+552.31506 1739.0
+555.64197 3438.4
+555.97565 3433.3
+556.30945 879.8
+556.64325 657.1
+557.28546 2157.9
+558.30133 925.5
+564.34509 833.3
+564.65680 16417.5
+564.99084 14505.9
+565.32513 9201.4
+565.65912 2815.0
+565.99677 679.9
+566.30347 2430.9
+566.83099 6618.5
+567.33136 3551.2
+567.83179 2007.5
+568.30731 21240.1
+568.80951 14334.6
+569.30920 4484.0
+570.30237 1320.5
+577.24231 1054.6
+578.24603 569.5
+579.30920 43557.4
+579.81049 27488.3
+580.31140 10850.5
+580.81030 3518.9
+582.29260 1353.0
+582.79108 1097.5
+586.25970 1555.0
+586.75311 671.3
+586.81165 2871.8
+587.31305 1453.7
+587.81293 768.2
+588.31061 1791.5
+595.81610 76476.4
+596.31732 48519.1
+596.81891 16041.7
+597.32050 3487.0
+597.82465 592.6
+600.84412 9651.1
+601.34656 6699.8
+601.84595 1735.9
+624.85114 1666.4
+625.35199 946.0
+625.82013 751.7
+626.32318 1044.2
+629.83380 1771.9
+630.35773 720.5
+631.35394 2331.9
+631.85437 1728.0
+632.35059 884.3
+634.82623 4651.5
+635.32574 4521.1
+635.83606 1064.3
+643.34851 2099.4
+643.85223 768.7
+644.36218 818.5
+644.85321 2183.0
+645.35156 2039.1
+649.29303 3361.3
+650.29199 966.4
+650.85815 5060.0
+651.35992 2826.0
+651.85809 1745.6
+652.35828 25938.5
+652.85913 18214.6
+653.25165 693.6
+653.36108 5798.4
+653.86401 1909.0
+658.32898 1100.4
+659.86346 97735.5
+660.36475 70563.5
+660.86627 28320.1
+661.36847 7155.3
+661.87146 2108.0
+663.38208 3728.6
+664.39032 1062.9
+670.43225 771.6
+676.65240 778.1
+684.77557 730.3
+686.36926 760.4
+696.43274 671.0
+699.89227 1640.2
+700.39563 1285.5
+708.90002 58381.9
+709.40112 47699.3
+709.90320 17998.1
+710.40442 5675.8
+710.90466 1660.0
+716.40594 11189.7
+716.90778 9095.7
+717.40820 3477.8
+717.90906 1027.5
+723.37054 675.8
+742.60773 585.1
+754.42023 8424.4
+755.42395 3686.3
+756.43042 1079.9
+762.37769 1983.8
+763.38574 980.8
+775.51038 626.1
+782.43402 1906.8
+782.93573 1729.3
+783.43878 969.4
+795.56213 1118.3
+862.42517 1683.1
+863.41840 1207.0
+875.45984 3126.2
+876.46021 1025.1
+1004.56525 611.9
+1190.63110 3844.9
+1191.62964 2318.4
+1198.20166 3492.7
+1360.67664 575.5
+1456.16150 621.8
+1460.18506 702.4
+1525.31287 670.6
+1688.11597 752.2
+1715.49634 725.7
+1777.44641 804.2
+S	1403	1403	567.0475946
+Z	4	2264.15908
+146.91470 635.3
+147.85977 540.0
+148.56592 557.1
+160.01051 530.4
+165.00278 654.2
+165.77939 921.9
+175.45773 647.0
+182.77419 625.4
+187.03873 607.5
+188.25815 897.1
+188.27298 1115.6
+188.28137 1126.1
+188.28970 1566.8
+188.29605 1118.0
+188.31662 1099.9
+190.42542 660.5
+191.72557 640.5
+197.77202 578.6
+198.89171 1037.9
+199.18295 803.8
+199.24512 821.2
+199.26891 1798.3
+199.29004 1633.5
+199.36723 709.8
+199.38652 1055.6
+199.40207 636.9
+213.08664 860.5
+223.97110 667.0
+229.51956 531.4
+271.97443 572.5
+276.61716 559.5
+280.16885 680.7
+282.10684 939.8
+287.37616 652.6
+288.20383 745.1
+310.18729 683.1
+318.20193 527.4
+322.98856 598.8
+325.39282 705.5
+328.36032 527.3
+345.22360 21474.4
+346.22794 4072.7
+352.44852 489.4
+353.18112 4970.6
+354.18402 878.6
+355.79013 501.1
+363.19968 18889.6
+363.70132 12492.9
+364.20334 2537.7
+372.20511 13798.3
+372.70667 7918.7
+373.20773 2568.2
+381.34427 642.8
+387.54324 564.0
+389.61276 560.9
+426.89145 600.7
+444.29117 3145.2
+478.23590 1246.2
+478.57202 710.8
+482.63467 735.2
+496.29501 753.0
+501.91388 3311.4
+502.24771 1774.8
+502.58252 1496.5
+504.80020 2028.7
+505.30209 1272.5
+516.50861 913.7
+531.32355 4397.6
+532.32745 2163.1
+532.56573 1339.8
+540.61145 882.3
+544.60907 626.2
+550.63800 649.6
+601.94708 660.1
+602.28668 1685.3
+607.61987 1876.3
+607.95734 1620.5
+608.29077 2049.8
+608.62463 1116.8
+618.28101 933.5
+625.30811 3493.6
+625.64526 1937.5
+625.97925 3845.1
+626.30884 1819.6
+628.33881 2058.5
+629.33929 784.7
+631.65649 641.3
+634.64075 9391.2
+634.97479 6983.7
+635.30951 9252.0
+635.64331 4065.8
+640.64362 2363.7
+640.97736 3102.4
+641.31317 3112.3
+641.64374 1802.0
+646.34998 2169.2
+647.35345 1373.5
+676.62360 745.6
+676.68140 700.7
+682.34241 1164.7
+682.83966 902.2
+683.34021 1157.5
+716.39111 610.0
+716.85052 2419.1
+717.35132 3880.9
+717.85468 2813.2
+718.35046 1157.1
+725.39215 3194.5
+725.85571 2093.9
+726.36786 2627.3
+726.85632 1984.1
+727.38617 628.7
+731.09430 716.3
+737.35321 2064.7
+743.40173 2800.4
+744.40259 981.5
+747.88074 760.6
+752.36798 9893.3
+752.86969 11384.7
+753.37048 9882.2
+753.87378 3715.9
+754.37256 880.5
+761.37390 30382.6
+761.87451 39951.2
+762.37628 29660.7
+762.87720 10404.9
+763.37769 1747.1
+776.39105 1126.8
+785.90308 910.9
+795.56232 1061.3
+809.97241 606.9
+867.41498 1742.7
+867.91260 1969.8
+868.41370 3676.6
+868.90894 786.5
+883.43530 959.0
+884.43500 817.2
+895.50006 758.5
+901.92566 3081.5
+902.42432 5661.2
+902.92725 5307.6
+903.42578 2553.0
+910.93042 1941.5
+911.42841 3191.0
+911.93170 4420.4
+912.43176 1050.4
+962.75555 620.8
+991.32617 664.5
+1057.20850 579.6
+1188.02466 624.4
+1198.26782 3374.8
+1316.10828 622.3
+1350.07861 553.4
+1398.09814 668.8
+1437.88367 536.9
+1482.82178 610.0
+1525.35010 1056.7
+1575.99878 628.8
+1777.35339 897.6
+1867.06091 655.3
+1876.61060 678.3
+1876.78845 684.6
+1878.83972 1071.2
+1879.50403 18585.0
+1905.87476 767.5
+1906.46582 748.4
+1906.80554 7396.5
+1907.32239 714.8
+S	1405	1405	449.2630471
+Z	4	1793.02089
+114.79740 618.1
+117.11456 492.4
+118.39707 588.6
+120.65498 575.7
+120.67393 682.0
+121.80005 2461.7
+122.01360 600.3
+124.29154 560.1
+125.31606 664.8
+128.56123 795.4
+138.08099 608.9
+146.05457 875.1
+157.02353 612.6
+158.09630 1606.7
+161.09132 655.6
+171.07614 806.5
+171.13850 547.3
+176.10699 1354.3
+177.10208 1672.6
+185.16522 1187.6
+191.54044 551.3
+199.18021 7070.8
+199.22656 1072.1
+199.26340 1197.1
+199.27293 2935.9
+199.37041 1200.4
+199.42094 658.4
+201.22163 635.7
+221.12817 60768.0
+222.13153 8793.3
+227.17505 1865.5
+233.16452 1150.2
+242.14917 1703.0
+249.12311 8648.8
+250.12740 1217.5
+263.14047 560.0
+269.26044 668.4
+270.14441 5707.5
+280.15222 605.4
+317.18515 1671.5
+328.67618 702.8
+329.67035 833.6
+335.72144 4111.0
+337.59467 526.4
+345.65866 530.8
+350.27823 590.6
+353.52164 737.5
+362.20682 4222.5
+364.29929 687.9
+377.71298 3271.4
+378.22430 7867.3
+378.55765 2743.6
+378.71469 644.0
+378.89252 1148.7
+381.31729 645.1
+386.54117 2418.4
+386.87585 1279.7
+386.97675 1301.1
+387.21143 1216.5
+387.24445 537.5
+397.54736 768.7
+397.88010 704.2
+405.07895 563.5
+409.21881 654.4
+412.71484 1021.9
+413.24219 1129.8
+416.98044 1037.4
+417.24060 658.3
+418.90039 925.7
+423.74612 1768.9
+424.24686 856.3
+427.22714 869.7
+431.22528 1005.3
+431.56046 883.2
+433.22876 1472.9
+433.56357 1126.6
+434.24042 922.3
+434.57471 1102.7
+463.70416 560.6
+466.07974 620.9
+468.31229 604.0
+471.93668 1571.2
+472.26840 1313.4
+472.79071 1027.6
+472.93555 2803.5
+473.20837 688.1
+473.28302 2378.5
+475.28925 1285.0
+476.77203 830.8
+477.93954 45238.1
+478.27365 33651.5
+478.60785 12866.9
+478.94168 4684.7
+479.27527 820.9
+481.24686 731.8
+482.60672 704.5
+486.24902 1765.9
+489.17892 524.5
+494.63815 591.7
+502.78568 3088.7
+503.28644 1724.2
+508.31091 3744.0
+508.81155 2160.3
+509.31274 1490.3
+509.63123 4329.6
+509.96533 5035.6
+510.28949 4756.3
+510.79181 2520.1
+512.67493 640.0
+514.40570 1273.9
+515.02191 1181.8
+515.58264 741.9
+515.63397 206925.6
+515.78680 537.7
+515.80334 728.5
+515.96814 173352.0
+516.24744 1133.3
+516.30237 77667.7
+516.63635 25940.2
+516.86816 1804.0
+516.97162 6349.0
+517.20477 989.1
+520.76910 3710.5
+521.27142 1851.0
+521.77277 1118.1
+529.71558 2105.9
+529.77496 65620.8
+530.21790 1569.4
+530.27625 38690.2
+530.77631 12521.2
+531.27808 2991.8
+531.76489 1248.4
+532.56989 2206.9
+542.33936 2491.9
+543.34332 861.7
+546.62408 5316.6
+546.95972 5672.5
+547.29364 2829.6
+549.63599 2000.9
+549.97009 2470.0
+550.29669 1008.4
+550.64233 687.0
+551.31042 3167.4
+551.81232 1316.7
+555.64166 1864.4
+555.97516 1869.5
+561.26154 793.8
+564.65668 9768.7
+564.99115 7378.8
+565.32532 5894.3
+566.30371 2547.2
+566.82935 4075.3
+567.32867 2346.9
+567.83142 1522.5
+568.30768 22279.6
+568.80890 10239.2
+569.31134 894.5
+570.26654 625.1
+570.30621 1334.1
+578.29095 817.0
+579.30890 42100.1
+579.81036 25251.5
+580.31116 10193.0
+580.81299 2336.2
+582.29285 2835.8
+582.79614 1674.1
+586.25977 920.6
+586.81152 1206.9
+587.31390 1276.2
+595.81598 41330.8
+596.31714 22855.7
+596.81909 9963.7
+597.31946 1413.0
+600.84515 3163.5
+601.34814 1576.4
+624.84882 2197.1
+625.35114 921.2
+626.31335 689.1
+630.34271 847.8
+634.82544 3200.3
+635.32813 2953.2
+635.82513 1841.5
+638.83447 931.5
+639.34534 743.8
+643.34784 980.0
+644.85138 1145.5
+645.34912 1134.9
+649.29321 2354.6
+650.85785 1084.4
+651.36621 1011.7
+651.85931 1028.7
+652.35785 13469.1
+652.85889 10299.9
+653.35974 3330.4
+653.86115 1183.9
+658.33868 1323.9
+659.86328 52518.0
+660.36475 37797.0
+660.86627 15556.9
+661.36859 3852.0
+661.86475 1176.4
+663.38147 1932.7
+664.38068 985.7
+676.63904 974.6
+708.90002 32200.1
+709.40161 25509.9
+709.90155 9776.6
+710.40265 3060.8
+710.90424 743.1
+716.40613 5498.3
+716.90833 5027.1
+717.40839 1733.8
+717.91321 791.9
+754.42010 4589.5
+755.41956 1452.5
+756.42291 1016.9
+782.43341 1277.3
+782.93866 1227.1
+795.55450 1261.8
+802.41882 702.1
+823.87732 657.7
+862.42487 1819.5
+863.24011 520.1
+875.45795 1792.7
+876.46307 866.9
+1017.46143 644.5
+1057.23254 890.7
+1095.39429 620.7
+1118.57361 576.5
+1184.45996 698.3
+1190.62622 1340.2
+1191.62610 1550.7
+1192.62781 741.8
+1198.27832 3596.6
+1206.72864 656.8
+1272.73608 707.7
+1388.15881 630.9
+1410.29626 623.0
+1496.62231 573.7
+1610.77856 714.6
+1665.72437 535.7
+S	1406	1406	567.0475946
+Z	4	2264.15908
+153.33397 549.7
+161.91623 530.6
+165.78426 673.3
+166.89014 475.6
+171.88097 545.3
+178.06383 647.8
+180.45338 558.4
+182.64664 566.7
+187.47720 588.4
+194.42967 534.1
+197.68181 606.7
+198.75310 604.3
+198.89294 676.5
+199.18414 970.5
+199.25362 977.0
+199.26486 992.5
+199.28113 2701.4
+199.30521 980.0
+199.37926 1023.1
+220.24046 498.3
+228.38210 576.4
+253.22673 589.0
+258.01028 538.9
+271.28412 693.6
+277.14105 517.0
+293.80194 555.7
+302.88394 606.8
+314.81409 553.9
+342.25009 608.9
+377.93500 515.5
+385.81055 612.9
+404.15659 566.5
+427.51538 705.1
+433.32324 588.5
+444.90506 628.6
+532.55835 1733.6
+549.11865 975.0
+583.21326 624.9
+599.30597 483.6
+606.34851 839.4
+645.92377 562.5
+676.62231 1142.2
+684.45709 503.5
+690.65710 590.0
+699.37384 586.9
+731.06689 603.6
+734.40436 1441.1
+734.90375 723.1
+772.03369 739.5
+776.39056 1839.4
+776.89484 747.6
+785.39832 3744.0
+785.89832 1275.2
+795.57159 898.0
+807.49530 517.1
+817.34052 728.8
+1030.95544 574.4
+1048.50781 602.6
+1198.24585 3204.8
+1310.84229 818.7
+1525.31006 739.1
+1608.48950 585.7
+1785.76343 617.4
+1872.53394 547.9
+1879.48901 19746.5
+1879.79407 3129.5
+1880.87537 719.9
+1907.01843 7417.4
+1930.47400 797.2
+S	1407	1407	449.7650746
+Z	4	1795.029
+113.80548 679.2
+115.93082 546.3
+120.72800 676.5
+121.80015 2236.4
+132.59747 639.0
+133.14362 962.1
+136.01106 656.0
+172.44177 582.4
+172.69139 514.2
+176.10709 928.3
+177.10199 1251.7
+185.16440 1406.5
+198.61880 745.2
+198.89734 937.8
+199.18069 3750.5
+199.21544 710.7
+199.23773 804.4
+199.25134 586.5
+199.27618 3005.4
+199.29181 863.6
+199.31627 1116.9
+199.37418 859.2
+200.09145 593.3
+221.12823 45910.0
+221.29900 586.4
+222.13171 5259.1
+223.06894 573.6
+225.12338 639.8
+227.17505 962.1
+233.16371 925.4
+240.41068 538.9
+242.14934 807.0
+249.12323 7005.9
+250.12653 956.9
+253.24355 642.1
+254.42935 506.2
+270.14420 2519.0
+280.16785 914.4
+282.11426 748.8
+299.13879 63431.7
+300.14243 14878.7
+301.14557 1828.6
+308.88275 817.4
+316.16299 703.1
+317.18484 1255.1
+327.13385 14219.8
+328.13666 3070.0
+335.72293 1130.7
+354.54355 683.0
+356.71988 820.0
+362.20776 2319.0
+365.72644 1422.5
+367.59979 600.1
+377.71375 1599.1
+378.22458 4159.5
+378.55872 3385.8
+378.89264 1825.7
+386.54459 806.6
+386.97787 1012.1
+388.25623 2203.5
+388.53094 800.5
+389.25763 865.3
+397.54431 1081.8
+399.74341 584.5
+401.24506 1240.8
+401.74387 765.8
+404.22485 1547.8
+406.24265 2981.3
+406.74521 1147.3
+409.18237 579.3
+412.56036 11072.1
+412.89438 11512.7
+413.22870 6294.9
+416.56613 3496.0
+416.89990 3087.0
+417.23383 970.1
+418.23538 39684.7
+418.56967 48953.2
+418.90387 20871.1
+419.23862 5661.5
+419.57397 1004.9
+422.26846 3252.3
+422.76846 1506.9
+424.23901 20151.8
+424.57309 26185.0
+424.90750 11356.0
+425.24301 2073.0
+426.22260 809.3
+426.74350 1424.3
+427.51959 827.1
+427.56732 1069.8
+427.90350 739.3
+428.18213 1953.0
+429.18439 858.9
+431.24689 3538.6
+431.49680 3457.9
+431.74799 827.5
+432.00183 1341.8
+433.22876 1144.2
+454.26056 1311.8
+454.59787 1464.8
+454.92395 631.3
+457.79483 609.3
+463.78665 3689.2
+464.28787 4070.2
+464.79160 1104.0
+471.93604 1108.7
+472.26334 1006.1
+472.79147 81650.1
+472.93713 2055.8
+473.29297 70455.1
+473.60114 745.2
+473.79395 22767.4
+474.29547 4338.4
+474.77359 1162.9
+475.29330 776.1
+477.93976 32565.6
+478.27362 22365.5
+478.60800 11975.8
+478.94040 2256.3
+481.19318 871.4
+482.63086 831.4
+491.95474 18796.0
+492.28958 12944.0
+492.62415 5968.5
+492.95834 2911.2
+499.30411 6182.5
+499.80707 5845.6
+500.30865 2146.6
+502.78586 752.6
+508.30984 110131.4
+508.81128 88995.7
+509.31274 30837.0
+509.62924 2498.0
+509.81464 5021.9
+509.96213 2126.9
+510.29095 3545.4
+510.79071 1332.3
+514.40485 1265.6
+515.63385 170241.2
+515.96808 143677.7
+516.23700 998.6
+516.30219 72069.4
+516.58582 761.5
+516.63635 31653.3
+516.87329 1170.5
+516.97107 5797.1
+517.29749 2641.8
+520.77332 1052.1
+521.27631 1170.2
+523.28711 645.1
+525.78967 1308.4
+528.71063 861.7
+529.21118 942.8
+529.71558 2632.9
+529.77496 24859.9
+530.27625 15051.9
+530.77625 5958.4
+531.30847 1161.6
+532.29089 1204.1
+532.57098 2204.3
+532.79401 713.4
+539.79474 920.5
+540.97601 1185.7
+541.30908 2029.5
+545.31769 11443.5
+545.81873 12138.7
+546.32031 2961.4
+549.12476 1007.5
+549.97656 657.6
+553.79639 1114.5
+554.32257 18334.2
+554.82373 14319.8
+555.32550 7378.3
+555.63763 885.2
+555.82996 1558.9
+556.30939 1546.0
+559.31561 3008.3
+559.81561 2496.0
+564.65601 8974.1
+564.99005 5968.6
+565.32599 2806.8
+565.65802 1476.7
+566.30273 4394.9
+566.81262 3257.6
+567.32935 1769.4
+568.30743 35967.1
+568.80896 9327.3
+570.25928 853.9
+574.31677 683.2
+575.32562 887.0
+579.30896 15349.0
+579.81091 13336.2
+580.31091 5619.3
+580.83594 11785.3
+581.33746 9188.9
+581.83917 3816.2
+582.29169 1593.8
+582.33862 1247.7
+582.79028 1025.0
+586.75995 777.2
+589.31598 1109.5
+589.84167 17147.5
+590.34271 19933.9
+590.84418 8630.2
+591.34521 1728.1
+594.83435 3557.2
+595.33545 2883.5
+595.81445 13777.2
+596.31659 8182.3
+596.81604 1989.0
+598.31982 999.6
+610.33917 825.8
+615.34338 1016.3
+624.34473 24510.2
+624.84656 15809.2
+625.34808 5767.9
+625.84705 1297.8
+628.33533 748.9
+634.82397 1977.4
+635.32538 1132.1
+636.33356 678.5
+652.35760 5884.8
+652.85858 2101.8
+653.35895 1074.7
+659.86340 39045.2
+660.36493 23564.4
+660.86652 11310.5
+661.36914 2570.0
+663.38171 1015.6
+670.40179 885.1
+676.63763 954.8
+680.88672 3287.1
+681.38617 1413.7
+686.37457 1234.1
+708.90002 13012.5
+709.40125 8675.8
+709.90039 3013.8
+716.40533 4353.0
+716.90613 2180.1
+717.40936 1479.3
+754.41742 1379.8
+782.44366 745.3
+795.58582 980.8
+798.47223 1743.0
+843.47528 679.4
+858.00543 731.5
+862.42859 665.2
+1019.73688 728.1
+1021.08661 818.1
+1057.25012 1079.7
+1094.87427 713.6
+1159.38867 567.9
+1170.97522 560.6
+1198.27429 3453.4
+1249.70447 580.1
+1474.89697 603.9
+1525.34656 849.5
+1658.26123 704.2
+1777.44946 929.5
+S	1409	1409	426.1808246
+Z	2	850.514
+Z	3	1275.267
+114.60915 612.7
+116.69736 575.2
+121.79636 990.9
+121.80047 2003.2
+121.80680 621.8
+147.19240 677.4
+151.51205 624.2
+155.08101 35713.0
+156.08440 2487.1
+157.57851 579.5
+165.78189 870.7
+183.14877 3432.4
+184.26802 543.9
+184.96616 614.7
+188.09698 576.5
+198.89404 879.4
+199.10748 887.5
+199.18867 601.8
+199.25500 1126.6
+199.26944 2386.3
+199.28192 2036.6
+199.30243 801.4
+199.33748 747.0
+199.36888 544.3
+199.37569 677.4
+211.14328 2245.3
+212.17737 572.9
+223.10701 793.2
+223.14340 1043.3
+232.13983 1160.5
+236.66661 575.8
+240.17015 37240.9
+241.17358 5192.8
+260.20572 609.6
+268.16501 30071.9
+269.16855 4167.0
+287.63852 874.0
+292.18097 28483.8
+292.68283 11219.6
+293.18274 1089.1
+319.17172 5580.8
+320.17526 1829.9
+337.22150 1511.9
+348.72302 23044.9
+349.22470 11123.8
+349.72684 2517.2
+350.28317 827.0
+365.21652 1774.1
+373.21832 26512.7
+374.22247 5425.1
+389.72830 602.9
+397.25067 727.5
+402.31543 609.5
+411.96793 3329.5
+412.21915 1920.7
+412.47119 704.0
+412.55713 858.5
+434.96155 643.6
+439.57462 1001.7
+444.05563 634.8
+450.30865 1645.4
+451.31564 643.0
+455.86111 581.2
+463.77243 571.9
+471.91061 957.1
+472.79099 4683.3
+473.29422 1395.6
+473.80386 599.1
+476.77332 806.4
+478.30148 6462.5
+479.30560 2003.8
+484.25272 1775.7
+486.30219 5279.0
+487.30542 2066.0
+490.29654 1818.7
+492.73300 1767.6
+493.23557 789.6
+501.30368 654.4
+501.73953 1009.3
+512.25818 968.8
+518.81470 1314.4
+525.25415 2130.1
+532.57544 1756.5
+532.77783 2203.6
+533.28015 1588.4
+540.74237 989.0
+554.32025 798.2
+554.73645 1427.9
+554.82092 1104.6
+563.26758 1055.8
+563.77008 1792.6
+564.27551 1583.7
+572.27600 1024.4
+572.77405 1330.7
+577.26666 853.3
+579.27838 576.1
+581.87152 2386.4
+582.01520 662.6
+582.13141 1417.1
+582.29059 1785.7
+582.61786 2038.7
+582.86084 1212.3
+583.12744 1575.0
+583.29297 1741.4
+583.35406 457751.1
+583.61328 1041.4
+583.84229 822.2
+584.09229 2370.7
+584.35669 197427.1
+584.58447 2035.1
+584.65796 770.7
+584.70441 709.2
+584.84167 3355.3
+585.09955 917.3
+585.35968 23976.9
+603.37903 2827.9
+607.82202 3746.7
+608.32379 10592.4
+608.82483 7143.8
+609.32745 2705.0
+626.30054 766.8
+650.82513 1332.0
+662.87433 529.4
+676.64478 1188.7
+681.86041 1094.4
+682.35974 755.9
+682.86163 1248.3
+690.41675 855.3
+696.43811 8287.0
+697.43976 4390.0
+703.37244 646.3
+737.41144 662.0
+981.54181 797.1
+1046.07678 597.7
+1086.64868 697.2
+1105.84778 540.8
+1124.63818 537.5
+1175.83057 690.7
+1198.29199 3432.1
+1320.63098 555.4
+1488.93970 534.4
+1547.28040 632.9
+1708.52637 638.9
+S	1410	1410	545.5273296
+Z	4	2178.07802
+145.14868 7547.0
+146.90810 6815.0
+147.09528 6995.3
+169.47513 7385.0
+170.02631 6934.4
+173.65622 7958.9
+188.19846 6415.0
+192.07733 6148.8
+198.89285 9064.4
+199.25156 20566.0
+199.26103 18632.6
+199.27431 21702.8
+199.29227 8482.3
+199.36774 9104.3
+201.37091 6891.5
+208.37682 5816.6
+209.92615 5698.4
+210.11920 5639.5
+214.49345 7251.7
+214.50238 7290.2
+246.38069 6609.3
+247.74815 6199.6
+261.73322 7405.3
+269.89633 7752.5
+280.14764 5965.6
+287.16293 8044.7
+291.42041 6345.8
+291.52979 7284.9
+305.60284 6454.9
+309.09195 7044.0
+315.00073 5740.0
+345.41116 6734.8
+347.74814 5990.8
+370.74124 6127.8
+381.31531 8108.2
+406.97592 7944.4
+412.21231 12048.9
+458.71710 8399.9
+466.47650 6463.6
+468.23343 7008.7
+474.54102 6887.0
+482.40128 7159.1
+482.60123 7086.6
+506.91776 7538.2
+507.24860 10561.6
+507.73920 26223.5
+508.24075 16905.2
+508.73950 8952.0
+530.25671 8520.0
+532.56927 21558.2
+564.28033 53238.4
+564.78259 38257.2
+565.28455 11006.1
+567.30115 6018.4
+573.32196 24290.2
+613.81488 39919.1
+614.31329 24280.5
+654.56476 7603.0
+660.35254 20372.4
+661.35895 8733.5
+676.63287 11581.0
+678.33759 44286.6
+678.83765 33086.2
+679.34265 8336.7
+700.53729 6809.8
+759.86963 11039.5
+823.41858 21577.7
+824.42261 10500.6
+857.96283 8850.1
+952.45721 15063.3
+1057.23901 8201.7
+1114.63037 6520.6
+1188.15674 8459.5
+1198.26807 40486.8
+1333.59680 5697.6
+1374.73645 6511.2
+1436.46863 7495.0
+1442.48950 6874.3
+1493.94678 5964.2
+1870.62537 6755.2
+1878.02222 10531.7
+1878.25366 10394.0
+1878.96350 21783.2
+1879.51758 218209.7
+1880.05518 19283.2
+1880.34570 12201.7
+1880.82617 16608.1
+1906.47375 7917.2
+1907.00623 82131.4
+1930.38000 11967.8
+1932.13745 9987.7
+S	1411	1411	449.4268246
+Z	2	897.006
+Z	3	1345.005
+121.79833 2192.1
+121.85031 618.6
+128.56992 782.9
+133.13556 945.0
+146.64505 624.0
+148.73857 542.9
+164.99437 617.8
+167.47307 632.7
+168.28442 640.2
+171.64029 578.1
+172.84642 558.9
+176.10660 765.9
+177.10126 1145.8
+177.22490 563.1
+179.61971 524.4
+181.22307 606.5
+181.63657 604.6
+187.37961 484.7
+189.56923 559.8
+198.79039 639.8
+199.15454 813.8
+199.17125 688.5
+199.17998 3586.3
+199.23042 587.1
+199.25197 1186.0
+199.26251 1385.2
+199.27875 2404.3
+199.37575 945.3
+221.12816 35259.4
+222.13135 4082.3
+227.17403 902.9
+233.16490 1041.1
+249.12314 5403.7
+251.10162 1385.1
+254.11807 869.2
+266.96066 519.9
+282.11276 818.6
+283.40240 576.9
+299.13867 86789.8
+299.68701 755.7
+300.14230 15673.9
+301.14606 1362.2
+301.66696 579.9
+305.57858 673.2
+308.89151 614.9
+327.13345 18657.0
+328.13708 3552.9
+333.20609 907.6
+342.25290 595.3
+346.67453 662.4
+348.22760 631.4
+349.19611 592.7
+350.28906 669.9
+354.54538 1304.9
+354.87970 1153.9
+356.71988 1930.6
+362.20892 1696.6
+365.01187 540.0
+365.72614 1341.5
+368.70474 656.8
+378.22424 4166.6
+378.55801 2501.2
+388.25519 3132.5
+396.72189 651.4
+397.22513 1035.7
+399.70059 1862.0
+399.94888 926.9
+400.20599 1220.0
+400.26526 745.0
+401.24548 1655.8
+402.66800 672.2
+404.22333 1607.2
+406.24261 5894.7
+406.74255 1885.6
+412.55984 21508.1
+412.89462 13048.0
+413.22736 6551.2
+413.56281 1998.8
+416.56583 8173.9
+416.90036 4799.1
+417.23389 1910.2
+417.32971 597.4
+418.23529 74270.0
+418.56943 48475.2
+418.90390 21721.8
+419.23856 5503.6
+419.47598 724.4
+419.57236 849.8
+422.26794 4660.2
+422.76926 1820.7
+423.74493 1402.0
+423.99615 1594.5
+424.23874 35781.6
+424.57315 24627.2
+424.90787 8285.4
+425.24146 2079.5
+426.74142 2202.4
+426.99496 1882.4
+427.24594 1104.3
+427.53241 739.3
+427.56732 1077.9
+427.90009 1604.9
+428.18085 3156.0
+431.24680 5912.2
+431.49716 2783.2
+431.74844 2436.2
+454.26108 1564.6
+454.59793 1306.7
+457.78354 1029.6
+458.28711 660.5
+463.78610 6582.2
+464.29034 2182.2
+464.79013 967.4
+468.74622 943.8
+469.88034 881.9
+472.75137 740.7
+472.79144 123247.8
+472.93723 1361.0
+473.29266 67838.2
+473.79422 22147.4
+473.88443 735.5
+474.29639 3607.8
+474.77203 2026.3
+476.78152 774.8
+477.93951 17846.5
+478.27313 14295.8
+478.60809 6282.2
+478.94254 1090.5
+482.64365 927.5
+486.28210 642.6
+489.76093 1014.1
+490.27350 738.4
+490.29813 624.6
+491.95483 29985.2
+492.28946 23111.0
+492.62338 9458.8
+492.95737 1997.1
+499.30396 10930.4
+499.80621 5474.9
+500.30829 1554.8
+500.80945 610.6
+507.09750 684.1
+508.30963 162135.3
+508.81100 92341.0
+508.90726 797.5
+509.31235 24081.2
+509.52139 874.3
+509.81317 4595.9
+509.96045 1032.4
+510.29343 1661.8
+510.79379 711.5
+515.63361 114934.1
+515.96802 99269.4
+516.30212 47271.6
+516.63666 11108.4
+516.97144 1063.6
+517.29578 4200.9
+518.29584 757.9
+520.29559 1000.0
+520.78882 687.0
+525.79297 645.8
+529.77521 3373.6
+530.27509 1442.4
+531.31482 2317.0
+531.81525 1154.2
+532.53864 1854.2
+534.30286 1437.1
+540.97766 2852.1
+541.31128 1031.3
+541.64453 1329.3
+545.31702 17425.5
+545.37097 566.6
+545.81885 10905.5
+546.32068 2513.1
+546.82550 693.9
+549.13440 765.9
+550.50879 529.0
+553.79883 2590.0
+554.32208 27622.4
+554.82379 17731.0
+555.32513 6895.6
+555.82196 1336.8
+555.97723 1275.1
+557.32898 1427.4
+559.31433 6056.9
+559.81610 3386.0
+560.29572 2007.6
+563.30670 1001.7
+564.65649 4864.1
+564.99036 5683.6
+565.32483 2824.8
+566.30273 1336.6
+566.83130 2985.5
+568.30682 2594.3
+573.30096 714.1
+574.32123 786.1
+574.82324 1013.8
+575.79236 1063.3
+576.28442 729.8
+579.30823 2226.2
+579.81091 912.8
+580.83588 18540.8
+581.33698 13096.8
+581.83868 3757.3
+582.34100 1681.0
+589.31360 1970.3
+589.84131 31471.9
+590.34271 22139.6
+590.84296 5479.9
+591.34442 1226.1
+594.83386 5637.5
+595.33600 2615.4
+595.80298 1245.2
+595.84583 1355.3
+598.31549 862.6
+598.82092 966.4
+609.84027 847.7
+615.34106 1451.1
+615.84137 1731.3
+618.56561 572.8
+624.34479 41362.0
+624.84601 26982.6
+625.34717 8781.7
+625.84705 1224.0
+628.33295 751.0
+630.33368 601.6
+659.86316 34059.8
+660.36511 24558.4
+660.86646 8237.0
+661.36688 1264.8
+663.38074 1018.7
+670.41180 1139.8
+673.38257 1263.0
+673.88153 696.9
+680.88599 4704.2
+681.38757 3854.0
+681.88794 1576.8
+686.87408 923.4
+708.90411 2047.5
+709.39880 1527.0
+716.40363 3232.7
+716.90802 1935.3
+717.40436 734.2
+792.43799 2064.2
+795.54742 983.0
+798.47235 1631.7
+799.47443 730.5
+851.94470 576.6
+876.84100 613.0
+885.35419 644.4
+891.16339 586.3
+995.71069 712.4
+1052.08093 591.3
+1057.22510 801.8
+1068.75842 691.1
+1171.66406 647.4
+1188.22424 652.6
+1198.20361 3459.8
+1364.96997 506.7
+1489.16272 636.1
+1515.68494 688.9
+1671.65894 549.6
+1777.49817 752.5
+1802.17090 622.5
+S	1413	1413	400.4593246
+Z	4	1597.806
+113.45107 690.3
+121.79870 2216.0
+127.36208 632.7
+136.07539 23983.1
+138.97961 589.7
+147.04391 2240.7
+150.09048 782.1
+150.70590 547.7
+152.56163 627.8
+157.06056 5660.0
+160.07545 1568.5
+165.78133 770.8
+175.07135 2912.5
+175.11882 4166.1
+178.08617 7877.6
+179.08894 1067.6
+182.76404 638.0
+183.38541 564.6
+183.75229 590.0
+188.07019 840.7
+197.68123 719.4
+198.89285 1213.9
+199.17088 904.0
+199.23036 595.1
+199.24388 788.0
+199.25977 1639.7
+199.26848 2101.5
+199.28766 856.6
+200.50595 692.8
+203.06627 2664.7
+206.08075 1109.9
+217.13345 10307.7
+218.13719 1275.1
+223.10765 14212.4
+224.11179 1671.2
+230.89320 658.0
+231.14330 1469.4
+233.09229 979.5
+234.07562 1174.7
+245.12865 3397.7
+247.49803 586.1
+248.13728 24060.3
+248.63901 8270.7
+249.13997 1041.7
+251.10249 18509.1
+252.10609 2684.8
+255.26585 722.2
+256.64981 1195.0
+257.14246 1453.6
+262.15427 1462.1
+264.81674 17349.8
+265.15091 7375.3
+265.48529 1980.9
+265.65601 3117.3
+266.15817 899.2
+272.17087 683.4
+274.66138 3353.9
+276.17096 5024.5
+277.17508 1240.2
+279.09827 1352.7
+280.15256 747.2
+283.14423 3902.8
+292.58020 668.5
+293.11270 1044.5
+301.83936 2178.8
+302.17410 776.9
+303.21387 1513.7
+307.51447 2457.7
+307.84848 823.1
+321.10794 5788.7
+322.11252 928.2
+330.11148 569.5
+332.16013 1751.1
+332.84729 626.6
+342.23981 685.4
+345.22794 943.0
+348.11923 6329.6
+348.19531 5185.1
+348.69669 3201.6
+349.12125 1009.2
+350.18085 740.0
+353.18970 536.9
+354.43213 1798.6
+354.68417 2099.8
+356.53790 10790.8
+356.87259 7453.1
+357.20645 2954.0
+360.23550 13601.7
+360.68243 680.3
+361.23938 1920.4
+364.93552 964.5
+365.18726 1026.4
+366.12939 8097.2
+367.13306 1201.4
+369.70242 783.2
+373.22424 1446.5
+374.70926 850.6
+374.93848 817.6
+376.44180 2307.1
+376.69131 2369.9
+376.94150 1013.2
+377.19226 1110.0
+377.44089 2812.6
+377.69122 989.5
+377.94293 1202.0
+378.71112 6085.9
+379.21393 2223.4
+379.44073 14181.8
+379.69138 17792.1
+379.94254 8622.0
+380.19214 2752.5
+380.68640 597.8
+381.93634 2789.0
+382.18750 2725.4
+382.68976 689.6
+383.94339 6263.2
+384.19431 6559.0
+384.44601 3417.7
+384.69556 1317.1
+384.94498 897.0
+404.88809 1530.4
+405.56186 652.2
+410.89221 48793.7
+411.22653 44379.7
+411.56079 19421.6
+411.89526 5966.5
+412.22629 900.7
+414.55597 785.8
+415.95117 524.9
+418.89307 1070.6
+424.67694 642.3
+426.16354 612.4
+428.56003 697.5
+429.21152 990.8
+433.22208 1062.6
+433.56311 935.6
+433.89575 648.8
+437.22787 9273.2
+437.56171 4992.0
+437.89584 2311.4
+438.23102 892.1
+439.23846 762.7
+443.23059 7505.1
+443.56448 10389.4
+443.89557 4283.5
+444.22806 2523.0
+445.89893 1010.2
+446.23535 1349.7
+448.53693 557.4
+449.23468 97041.8
+449.56863 84431.2
+449.90280 45322.4
+450.23776 21314.8
+450.57242 7724.1
+450.90659 2658.6
+451.24240 1075.9
+451.76321 1791.7
+452.25366 1263.0
+454.56354 599.1
+456.56931 683.3
+457.23453 2827.0
+457.56924 2198.8
+457.90219 807.6
+459.57333 1034.4
+460.24481 1572.4
+460.56848 1581.1
+460.76859 20158.3
+460.90018 766.9
+461.23492 690.4
+461.26379 6472.1
+461.29166 4942.7
+461.77155 3981.2
+462.24094 1329.7
+462.28964 1737.0
+462.57483 1077.7
+462.91049 887.9
+463.23840 2602.9
+463.57053 2893.9
+463.90430 2845.5
+466.23798 16491.1
+466.57217 15780.9
+466.90704 7398.8
+467.19247 949.2
+467.23938 3297.1
+467.57190 1525.1
+469.56445 2523.6
+469.90186 2602.4
+470.87329 538.3
+470.90213 604.6
+471.27100 709.6
+471.90414 1517.2
+472.24124 35962.9
+472.57556 32693.9
+472.91025 13739.0
+473.24454 5530.9
+473.57980 1958.5
+475.57025 3702.5
+475.90430 4506.0
+476.23923 3007.7
+476.76294 706.3
+477.14243 1015.1
+477.27231 528.4
+477.47174 1242.6
+477.69995 1302.8
+477.80658 834.5
+477.89932 911.6
+478.03796 1500.2
+478.18149 867.1
+478.19159 954.0
+478.24478 316711.6
+478.57895 301428.4
+478.62540 1040.7
+478.78275 1725.6
+478.91296 154144.2
+479.02231 905.6
+479.12079 1762.0
+479.24716 60169.2
+479.35275 1614.2
+479.45810 1070.6
+479.50021 533.3
+479.53192 631.5
+479.58157 19180.4
+479.68597 1820.7
+479.91592 4905.6
+480.02484 637.3
+481.57251 27603.7
+481.90689 26663.1
+482.24106 13495.0
+482.57578 5402.3
+482.90866 2035.9
+484.17007 10031.2
+485.17715 2724.1
+486.19897 689.8
+488.17288 704.3
+488.58133 2227.5
+488.91562 2094.5
+491.58060 1058.7
+491.91141 1564.0
+492.29221 681.6
+494.15482 984.1
+495.26825 3678.6
+496.26669 1058.3
+497.91159 1817.5
+498.24689 1128.3
+498.58051 1438.9
+501.19586 2430.9
+502.23077 828.0
+510.74255 1651.7
+511.24649 1685.0
+511.91797 1102.6
+512.16376 830.8
+512.29321 6901.9
+513.19635 3519.3
+513.29852 1560.3
+514.20032 918.9
+516.29230 1744.7
+516.79401 1327.8
+517.29443 825.6
+521.25391 1031.1
+525.30017 1564.3
+525.79529 867.0
+526.92291 2646.0
+527.25739 2373.5
+527.59253 1349.1
+529.19128 1589.2
+530.20123 645.0
+530.30359 1805.3
+531.30969 586.9
+532.54767 1937.1
+532.93353 771.5
+533.25171 2150.1
+533.75543 1564.8
+534.30231 47360.5
+534.80396 35483.8
+535.30505 14700.3
+535.80603 3867.0
+537.32025 1103.3
+538.32349 888.0
+544.20435 651.6
+548.31421 32454.8
+549.31677 8326.4
+550.32178 1804.5
+585.24225 652.5
+597.82574 2639.9
+598.32434 1960.9
+598.82574 829.1
+603.24261 2399.1
+604.24786 908.0
+606.83118 2381.5
+607.32941 3458.9
+607.83331 1095.8
+608.32990 812.8
+608.67639 913.5
+615.83411 67219.9
+616.33502 60380.8
+616.83673 29846.9
+617.33765 8149.7
+617.83795 1610.1
+618.32233 3138.4
+630.34448 625.8
+631.23712 2667.0
+632.24097 1138.7
+648.26520 2077.1
+648.49628 590.7
+649.26691 1340.3
+651.37262 535.3
+658.25305 1435.6
+673.34723 6527.6
+673.84900 5627.9
+674.34814 2529.9
+674.85126 905.4
+676.25958 3462.3
+676.62402 1526.4
+677.26624 1459.3
+695.38202 6826.1
+696.38428 2717.2
+697.38989 1012.6
+700.38281 1309.4
+731.04913 685.0
+780.17181 662.8
+783.49811 514.3
+785.83850 630.0
+792.43555 17908.5
+793.43738 9066.0
+794.44183 3192.9
+795.45038 831.3
+795.56506 936.1
+797.92419 528.4
+815.40259 1180.8
+816.41425 978.4
+885.41113 1560.5
+886.41992 766.9
+902.43939 1953.1
+903.44653 1537.0
+954.46832 656.0
+985.96686 699.5
+1017.55066 617.6
+1057.20508 857.8
+1188.34216 893.6
+1198.22998 3442.5
+1294.36646 656.3
+1323.19324 597.4
+1502.70935 574.6
+S	1414	1414	572.859991267
+Z	3	1715.305
+Z	2	1143.872
+155.67908 530.3
+157.59662 878.0
+158.50023 559.7
+163.57210 570.1
+163.85077 518.2
+165.56581 470.1
+165.77916 705.6
+169.48672 885.8
+177.10153 582.7
+183.11362 821.6
+185.16486 28033.9
+186.16814 2516.8
+197.69058 654.8
+198.80092 479.8
+198.89842 727.9
+199.17326 1080.2
+199.27042 3653.3
+199.36786 897.9
+201.12357 10028.6
+202.12630 1129.5
+203.22705 661.7
+213.15982 6725.2
+214.50586 690.5
+223.49269 636.3
+229.11841 4355.8
+233.56361 633.4
+243.20753 600.6
+253.22755 1312.5
+258.14642 995.9
+259.93167 570.8
+271.29999 880.0
+276.15454 943.3
+280.17139 759.9
+281.22327 2047.9
+282.18188 814.2
+283.16577 1473.1
+297.18198 1145.2
+301.01587 595.4
+308.88791 908.2
+310.13950 902.9
+310.17520 1423.2
+326.24435 1074.5
+328.16272 766.9
+328.18655 96513.7
+329.19012 16115.3
+330.19238 2042.8
+342.20258 4911.6
+342.25916 763.8
+350.27954 919.8
+356.18179 1092.0
+359.47668 663.7
+377.20303 2988.0
+381.24872 2456.3
+381.34116 1077.3
+382.23441 1584.9
+387.18744 1948.8
+390.02139 565.6
+395.26559 1076.1
+396.24936 3470.0
+399.25964 1417.2
+409.24393 1995.1
+413.27567 60160.0
+414.27945 14470.4
+415.27945 1897.9
+423.25787 856.2
+425.24063 777.1
+427.25500 10979.2
+428.26129 1896.0
+438.23627 680.9
+439.21802 1853.6
+441.27045 75357.8
+442.27408 16710.7
+442.49280 538.2
+443.27582 2894.2
+453.23404 701.5
+455.24890 813.9
+455.28796 1078.0
+456.24490 13534.0
+457.23245 3162.1
+461.57581 529.1
+465.74182 3718.7
+466.24396 1252.4
+474.25522 97133.3
+475.25882 23456.9
+476.26080 3032.2
+482.63568 865.7
+494.33356 3733.4
+495.31589 5575.2
+496.31808 961.3
+497.30646 913.1
+510.29321 803.7
+512.34369 19647.1
+513.34723 5219.9
+514.34991 976.3
+515.27637 2504.8
+515.78076 871.6
+520.26825 12830.2
+520.77026 7162.4
+521.27301 2964.7
+522.32819 6426.4
+523.33197 1314.7
+524.30890 1540.3
+525.25470 876.6
+532.53967 1967.0
+532.93463 731.1
+538.28632 3680.2
+539.28668 1190.9
+539.73950 685.2
+540.33856 92846.7
+541.34149 27409.8
+542.34375 5091.2
+549.12689 661.6
+552.30151 959.0
+562.98712 647.1
+581.16626 644.4
+585.28687 35576.6
+586.29053 13330.8
+587.29407 2053.0
+601.73596 933.2
+602.52417 793.2
+603.29755 174542.4
+604.30084 49570.9
+604.86792 927.0
+605.30334 12174.6
+606.30701 1921.5
+624.36133 1009.1
+630.37280 774.3
+641.38611 2726.1
+651.37134 3705.0
+652.37152 1182.0
+666.34442 801.2
+669.38104 50339.9
+670.38464 17491.9
+671.38690 3748.1
+676.65527 1137.9
+684.35602 2611.9
+685.34894 880.0
+698.15851 695.3
+700.41095 1165.6
+701.39825 1097.9
+702.36609 335848.1
+702.45721 978.8
+703.36914 119647.1
+703.98706 785.0
+704.27393 622.7
+704.37091 28719.3
+705.37189 5063.7
+784.37421 886.4
+792.41278 992.5
+815.45020 71676.9
+816.45319 30452.0
+817.45654 8336.9
+818.46008 1575.8
+867.47949 1993.4
+868.48560 1418.2
+912.46698 6126.8
+913.46991 2254.4
+914.46082 898.5
+927.49445 2735.4
+928.01459 1608.7
+928.49030 1862.6
+928.99713 1500.5
+929.47729 1316.8
+930.00714 1159.4
+930.30493 1935.7
+930.47650 523387.5
+930.64136 1214.6
+930.72736 1347.2
+930.97125 1366.3
+931.47949 250616.7
+931.59387 939.5
+931.85632 608.6
+931.95264 2418.4
+932.48187 71588.3
+933.07056 819.7
+933.48749 12516.7
+933.93835 1084.0
+934.48779 2345.7
+941.46106 710.8
+978.50549 901.5
+996.52441 12711.5
+997.52722 6607.4
+998.53101 2178.3
+1006.66309 619.1
+1019.70349 738.1
+1029.54565 8992.8
+1030.54822 4985.7
+1031.55042 1731.3
+1039.52673 2416.7
+1040.52966 1622.5
+1041.53699 592.5
+1053.45020 577.6
+1060.82190 593.7
+1110.11157 741.1
+1129.93335 603.1
+1198.20435 3192.2
+1230.61731 558.0
+1404.42029 604.9
+1525.33777 964.1
+1717.16931 559.8
+1878.41858 687.2
+1878.73804 542.2
+1879.30310 2855.1
+1879.57288 19556.3
+1881.83533 693.6
+1907.04138 7619.1
+1944.65784 634.1
+S	1415	1415	449.431991267
+Z	3	1345.021
+Z	2	897.016
+114.65680 539.2
+121.79724 2795.8
+131.47472 523.0
+131.70474 526.2
+135.36589 529.1
+139.34558 530.5
+143.77310 623.5
+149.42557 628.5
+150.44420 559.1
+157.59787 839.8
+165.77972 696.0
+171.40150 541.5
+186.85037 519.3
+191.71475 490.4
+193.09622 1221.9
+198.89935 718.5
+199.06525 699.0
+199.16182 629.3
+199.17923 1123.0
+199.23216 1256.9
+199.26039 3612.7
+199.28960 980.6
+199.35767 763.9
+205.38263 680.2
+221.12811 10850.5
+227.30208 518.9
+232.44942 544.9
+237.31578 599.6
+246.14734 627.7
+248.13721 4195.1
+249.12350 1219.2
+251.10204 11303.2
+252.10507 734.0
+256.75684 549.5
+276.17126 1883.1
+278.08411 614.0
+294.44833 587.1
+299.13840 20865.2
+300.14185 2985.1
+308.89053 745.0
+325.31973 570.3
+327.13336 5691.3
+328.13708 930.8
+356.53473 769.2
+357.94055 589.3
+360.23438 1441.3
+378.22247 899.9
+378.56259 623.7
+387.71646 936.5
+396.72021 4966.2
+397.22174 1947.3
+399.70044 1023.2
+406.24045 1621.0
+410.89124 7787.3
+411.22504 4891.8
+411.55737 838.7
+412.55743 1167.4
+413.68439 665.3
+416.56488 2931.3
+416.89987 1572.9
+418.23495 19940.1
+418.56934 13650.2
+418.90347 4079.0
+419.23718 1628.3
+424.23868 11417.2
+424.57294 8545.1
+424.90646 3221.5
+428.18265 749.9
+431.24249 1642.4
+431.49615 2183.8
+436.23831 2155.0
+436.57083 2631.0
+436.90955 1124.3
+437.22781 2665.3
+437.56494 851.2
+444.52939 613.4
+444.89600 598.4
+456.24289 657.1
+464.28665 686.4
+469.88046 731.6
+472.79092 19508.9
+473.29257 10241.4
+473.79401 3107.7
+477.93976 7125.1
+478.27380 5519.2
+478.60825 1185.1
+491.95474 8489.0
+492.28909 6470.2
+492.62320 2573.4
+497.26041 903.9
+499.30368 4312.5
+499.80551 2624.1
+501.50415 538.7
+504.01477 567.8
+504.26920 2020.8
+504.76926 1079.3
+508.30923 45857.9
+508.81079 21065.9
+509.31277 6608.7
+509.81281 1438.8
+510.29108 1150.1
+515.63324 39240.5
+515.96753 30342.2
+516.30182 10386.9
+516.63605 1166.6
+525.29608 1274.9
+529.77429 1115.8
+532.54852 2089.3
+534.30182 15138.5
+534.80304 7743.6
+535.30487 1452.9
+541.30853 812.5
+545.31622 2369.5
+545.81689 933.0
+548.31580 1206.4
+554.32300 3480.2
+554.82343 2144.3
+558.74823 910.4
+559.31415 737.0
+560.81201 6359.7
+561.31323 3851.1
+561.81226 1137.6
+564.65637 1903.2
+564.99457 1171.0
+579.30963 1158.8
+580.83514 3261.2
+581.33679 2085.7
+581.83990 1027.1
+585.25269 654.9
+589.31372 1241.8
+589.84119 6937.4
+590.34216 3497.6
+590.84363 1922.8
+594.83301 1632.0
+598.32349 649.0
+600.92090 690.5
+624.34418 6701.8
+624.84631 4637.6
+625.34912 1311.9
+625.63452 697.0
+630.39343 625.0
+659.86310 9460.4
+660.36383 5719.5
+660.86102 1402.7
+676.60657 1406.6
+680.64825 626.2
+681.38397 910.1
+710.72668 634.5
+716.90112 867.7
+786.35278 595.4
+792.43347 8061.8
+793.43683 2909.5
+795.58514 971.9
+815.40875 983.1
+839.64435 553.8
+844.55225 515.7
+865.28241 627.7
+918.39996 635.4
+1013.50305 537.6
+1019.70117 1184.4
+1024.56262 620.2
+1057.20532 646.1
+1198.22107 3380.3
+1287.86633 654.7
+1525.36499 932.8
+1574.73901 773.5
+1766.85474 618.9
+1807.81799 697.2
+S	1417	1417	533.024991267
+Z	3	1595.8
+Z	2	1064.202
+136.07555 2482.4
+140.01872 629.2
+145.42548 610.3
+160.07544 1486.6
+165.77892 1069.3
+169.46977 664.7
+171.63762 727.8
+175.11880 2687.9
+178.08607 15017.4
+179.08963 1312.8
+179.98326 580.6
+188.07138 1745.5
+198.48103 520.7
+198.89682 893.3
+199.17682 865.2
+199.18381 948.5
+199.25143 1266.1
+199.26224 1554.6
+199.28069 2234.1
+199.30043 743.3
+199.33687 1054.5
+199.37233 689.3
+199.37845 798.2
+202.44904 657.0
+212.76152 708.8
+216.06590 1053.6
+217.13336 2307.5
+223.10768 29711.3
+224.11113 3528.5
+231.15086 2060.9
+232.15402 720.0
+233.09178 2063.2
+241.78615 573.6
+248.13712 5639.4
+248.63829 1494.6
+251.10246 21496.5
+252.10582 2523.6
+254.80780 717.0
+274.66092 1873.8
+276.17053 9514.9
+277.17377 1491.0
+279.09729 1831.1
+283.14450 3325.5
+289.23654 556.1
+299.84637 505.8
+303.09760 633.7
+303.21167 954.3
+310.00940 539.7
+311.13876 1005.8
+323.40259 640.0
+329.00525 776.8
+330.10721 739.0
+331.09314 1552.8
+344.49191 519.4
+345.22815 616.4
+347.55981 609.5
+348.11899 16073.9
+348.19522 1162.8
+349.12161 1815.6
+354.52939 533.5
+355.21109 752.5
+360.23495 8220.7
+361.23706 737.8
+366.12936 19081.9
+367.13281 3192.2
+372.84503 554.0
+373.22287 2343.7
+376.11139 699.0
+378.71188 987.8
+381.14380 1938.4
+387.71564 3385.3
+388.21884 1864.2
+396.72128 26143.4
+397.22217 10831.2
+397.26263 708.9
+397.72467 2261.3
+400.16666 621.5
+402.46790 541.2
+410.61310 606.8
+410.89160 3952.5
+411.22690 2515.3
+411.56155 892.1
+411.89203 694.3
+426.16565 3707.9
+427.16748 711.1
+427.48361 798.0
+437.22217 679.3
+437.56235 929.8
+437.89880 835.8
+438.23322 1080.3
+439.23380 1143.8
+442.19293 677.9
+442.75818 756.5
+443.22781 871.1
+443.56494 2244.6
+445.89966 1226.2
+449.23404 18339.2
+449.56812 11422.9
+449.90305 4753.8
+450.23953 1422.7
+451.76331 3576.5
+452.25443 2024.6
+452.75830 818.9
+456.77789 618.0
+460.25488 2148.4
+460.76849 31463.3
+461.26437 10528.7
+461.29254 5830.0
+461.77106 5005.1
+462.28888 2071.6
+467.19330 992.7
+468.17422 868.5
+472.24063 2305.2
+472.47949 561.4
+472.57513 2395.7
+475.90512 839.7
+476.24127 791.5
+478.24420 14556.8
+478.57928 8884.2
+478.91373 3425.0
+481.57336 3896.3
+481.90756 3181.1
+482.24167 711.5
+483.18951 679.3
+484.16995 2596.0
+485.19894 2033.3
+495.18448 2155.2
+495.26553 4197.5
+496.27020 1060.1
+497.26810 1253.8
+497.76370 890.7
+501.19720 12740.4
+502.20123 2957.2
+502.59427 877.9
+504.91364 863.8
+506.25583 5301.0
+506.59125 4080.7
+506.92542 2460.1
+508.91394 1989.7
+509.24557 1754.5
+510.74515 2712.6
+510.91663 4152.0
+511.18271 835.5
+511.24918 4090.1
+511.58649 2887.3
+511.92166 1554.0
+512.25604 949.4
+512.29413 3594.9
+513.19696 3929.7
+514.58685 2205.3
+514.91669 9883.5
+515.25067 7284.0
+515.58521 2811.5
+516.91901 1448.7
+517.25494 988.5
+532.54968 1851.2
+534.30249 1002.2
+548.31421 15239.4
+549.07849 816.7
+549.31671 2945.9
+550.32336 683.4
+593.97906 587.6
+597.82477 1945.6
+598.32349 703.1
+606.82928 2059.9
+607.32990 1844.9
+615.83405 92748.2
+616.33527 70586.9
+616.83710 26905.9
+617.33868 8067.3
+617.83618 1519.2
+618.32281 1554.9
+619.32831 832.5
+630.25787 1256.4
+631.23816 1822.2
+647.33356 633.2
+648.26349 2434.4
+652.34027 599.7
+653.16504 792.2
+655.33673 6503.4
+655.83777 5627.8
+656.34100 2545.6
+658.25183 2211.3
+659.25793 817.8
+659.32428 716.7
+664.34229 12739.7
+664.84064 14093.7
+665.33820 8111.6
+665.83765 3320.6
+666.33856 1512.4
+671.50885 1288.9
+672.01068 1176.2
+672.44183 1142.8
+673.34778 280063.2
+673.42517 1051.5
+673.46130 582.5
+673.47742 582.2
+673.84888 206255.5
+674.26270 1389.7
+674.35016 81062.6
+674.77374 1097.4
+674.85144 26502.0
+674.91833 715.4
+675.19043 1570.7
+675.35309 6065.7
+675.69330 934.7
+675.84985 736.4
+676.25879 5889.7
+677.26318 1939.5
+681.33307 806.4
+689.84827 767.2
+695.38220 8144.5
+696.38544 3189.8
+697.39227 912.5
+698.85254 4425.0
+699.34583 14417.3
+699.84705 12743.8
+700.34686 5653.9
+700.85382 672.0
+702.84094 913.9
+703.83899 823.6
+704.35400 937.0
+706.84973 899.9
+707.34644 758.3
+707.85815 11110.3
+708.35986 9208.0
+708.85962 5175.4
+712.85077 6871.3
+713.35278 4854.4
+713.85742 1620.6
+714.35461 1275.0
+714.84625 974.9
+715.34943 838.0
+715.86670 811.8
+716.86346 173298.5
+717.36438 137884.3
+717.86578 60789.0
+718.36749 19650.9
+718.53210 721.3
+718.86987 5636.2
+719.37494 977.9
+721.85468 25819.8
+722.35657 19777.1
+722.85944 8118.8
+723.35980 2499.5
+756.41833 1059.4
+757.42059 1042.3
+770.38470 752.7
+774.42664 3936.7
+775.43219 1819.7
+792.43481 115521.6
+793.43732 54678.8
+794.44080 14347.3
+794.78638 796.2
+795.44421 2886.1
+795.58252 1201.0
+804.35205 1650.7
+815.40656 896.3
+867.40656 797.2
+920.53003 5297.3
+921.53137 3025.4
+1019.91748 719.8
+1048.47571 1899.5
+1049.46826 1057.1
+1056.55603 1149.9
+1057.54700 695.1
+1065.50146 1808.1
+1066.49329 1205.6
+1067.57324 1034.9
+1135.51404 1039.2
+1136.50696 671.4
+1171.57654 4913.6
+1172.57874 2647.8
+1173.58508 836.5
+1198.23840 3195.3
+1258.61279 1979.0
+1259.61914 1231.3
+1262.64795 525.2
+1264.61853 595.0
+1525.21936 834.4
+1598.84204 639.6
+1777.47681 1001.8
+1788.62036 825.6
+1869.66052 911.3
+1879.04236 1824.3
+1879.24487 2598.3
+1879.52612 19553.9
+1880.02087 1870.5
+1882.16394 696.2
+1882.42407 576.9
+1907.04956 7454.4
+1930.33850 1130.1
+S	1418	1418	400.4593246
+Z	4	1597.806
+101.67431 547.6
+102.60209 643.3
+103.41358 542.3
+105.21242 505.1
+113.45764 587.0
+114.43013 509.6
+121.79984 2590.3
+134.45679 541.1
+136.07536 25620.5
+143.84654 678.4
+147.04375 1840.7
+147.70740 602.0
+150.43553 697.4
+157.06046 5601.6
+160.07579 1362.7
+165.78262 1107.5
+166.83130 759.3
+175.07097 3025.9
+175.08612 683.6
+175.11885 4495.9
+178.08597 9028.0
+179.08981 753.4
+180.32529 794.8
+188.06955 904.6
+189.34081 622.5
+197.68826 872.3
+198.89481 1106.5
+199.17570 994.5
+199.23639 1170.5
+199.26237 1339.8
+199.27203 2801.0
+199.31750 853.4
+199.36894 1220.9
+199.40150 562.2
+203.06609 3296.3
+205.36327 561.2
+206.08086 1133.1
+206.63849 616.9
+217.13335 11705.1
+218.13611 1305.7
+220.90645 516.5
+223.10760 16185.5
+223.47479 577.6
+224.11072 1733.4
+227.62399 649.1
+231.14372 1796.4
+233.09201 1345.8
+234.14014 869.2
+245.12810 2587.8
+248.13728 25342.9
+248.63898 6643.6
+249.14095 1197.6
+251.10251 19689.8
+252.10693 2587.7
+252.81090 1088.2
+257.14310 1448.1
+257.28909 548.9
+258.81396 990.6
+262.15448 1722.8
+264.81671 18796.7
+265.15082 5128.1
+265.48578 892.0
+265.65555 4760.6
+266.15738 924.2
+272.17215 689.7
+272.74323 546.0
+274.61050 739.7
+274.66104 3608.9
+275.16101 670.2
+276.17047 6267.6
+277.17426 1163.2
+277.54675 638.6
+279.09729 904.4
+283.14398 4394.7
+284.14966 905.1
+284.17178 658.8
+293.11313 996.3
+294.77271 614.7
+301.83841 941.7
+303.09799 805.3
+303.21384 1675.0
+307.51459 3334.1
+308.18185 667.7
+308.88766 881.3
+315.36478 538.7
+321.10794 5568.8
+322.11145 1151.0
+323.51639 635.1
+326.52399 597.4
+332.16116 1830.4
+339.19070 953.4
+345.22775 766.9
+348.11896 5333.2
+348.19470 6627.8
+348.69510 1433.5
+349.12192 923.8
+349.92841 711.9
+350.28058 845.0
+354.43329 1860.8
+356.53784 10497.8
+356.87268 5919.2
+357.20761 2178.4
+360.23511 14705.7
+360.43451 598.9
+361.23932 1768.7
+364.93680 1111.9
+365.68729 564.9
+366.12949 8612.1
+367.13232 1294.7
+369.70587 1503.8
+374.70856 695.6
+376.44003 2284.5
+376.51288 893.1
+376.69202 2656.3
+376.94382 1098.6
+377.19092 2235.2
+377.44058 2912.2
+377.69116 2833.5
+377.93985 1326.7
+378.71121 6283.5
+378.93707 807.8
+379.21463 2206.6
+379.44055 19803.3
+379.69147 17464.2
+379.94205 9031.4
+380.17191 1353.0
+380.19278 1635.2
+380.67639 699.3
+381.93762 2232.6
+382.18707 2139.9
+382.43912 1085.3
+383.94366 7325.6
+384.19431 7161.2
+384.44336 2861.2
+404.88739 1034.2
+405.22256 1800.7
+410.89221 56030.9
+411.22647 42183.8
+411.56097 14688.5
+411.89539 3876.5
+418.89194 992.6
+420.70627 669.1
+423.83362 589.6
+429.71902 660.6
+431.22427 784.7
+433.89679 834.6
+437.22705 7593.1
+437.56174 7097.0
+437.89609 2317.5
+438.22931 741.1
+439.23804 1148.9
+442.47729 612.7
+443.23080 11509.6
+443.56348 9541.4
+443.89594 5093.5
+444.22882 1939.2
+445.89828 3144.7
+446.23505 1702.5
+449.23459 120514.6
+449.40317 827.8
+449.56851 89005.7
+449.73367 684.9
+449.90289 35554.1
+450.23773 15654.2
+450.57175 4295.7
+450.90686 2287.5
+451.72333 858.0
+451.76459 2236.8
+452.22443 731.3
+456.11121 650.4
+456.17957 742.3
+457.23474 3269.3
+457.56754 2830.0
+457.90167 1279.4
+459.57413 1757.0
+459.90851 1096.9
+460.23666 1691.8
+460.55997 861.3
+460.76859 23754.5
+460.89542 735.9
+461.26254 6175.4
+461.29077 6182.0
+461.77228 3723.6
+462.23810 2905.9
+462.28766 1749.0
+462.57315 1830.5
+463.23865 2954.2
+463.57114 3552.8
+463.90686 2496.9
+464.24402 1055.8
+466.23792 21437.8
+466.57196 18130.4
+466.90558 7066.1
+467.18997 979.6
+467.24063 2686.9
+468.24139 1284.6
+469.56619 2304.8
+469.89859 2567.5
+471.57092 940.6
+471.90836 799.1
+472.24124 43005.4
+472.57535 29770.6
+472.90982 13754.1
+473.24332 4962.8
+473.57990 2025.8
+475.56897 5494.5
+475.90378 3991.4
+476.23700 2238.6
+477.14413 2121.4
+477.18826 758.4
+477.33701 765.3
+477.47501 1648.4
+477.69699 1568.4
+477.92142 737.7
+478.03146 1101.5
+478.19058 1156.3
+478.24466 386230.8
+478.29858 1305.7
+478.57877 301493.0
+478.61826 1314.5
+478.64279 831.5
+478.79266 1903.0
+478.91281 140367.6
+478.95178 979.7
+479.03848 1131.5
+479.13205 1266.3
+479.24701 48731.7
+479.35049 2765.0
+479.45697 644.5
+479.48929 833.2
+479.58139 10646.0
+479.68671 1455.9
+479.91379 2148.5
+481.57236 36079.8
+481.90677 28512.7
+482.24078 12268.1
+482.57623 4852.5
+482.90930 938.2
+484.17072 11465.7
+485.17728 2791.4
+485.90775 884.4
+486.18997 643.6
+488.57935 2096.4
+488.91556 1641.6
+491.57712 2628.6
+491.91095 2271.8
+492.29477 1749.8
+495.18338 1034.7
+495.26547 5527.4
+496.26694 1316.5
+497.91168 2180.4
+498.24533 1313.0
+498.57898 738.1
+501.19839 2305.4
+502.20630 1054.6
+510.74414 2347.0
+511.24847 754.0
+512.16595 1356.3
+512.29297 7470.1
+513.19727 2921.0
+513.29657 1509.5
+516.29279 1480.8
+516.79193 748.2
+517.58197 781.9
+522.42328 571.8
+523.18066 899.9
+524.73877 624.0
+525.29968 1950.3
+525.79584 1039.6
+526.92419 3538.8
+527.25775 2654.6
+529.19128 2340.9
+530.19464 932.8
+530.30237 2875.9
+532.55774 1947.8
+533.25354 3111.6
+533.75494 1617.7
+534.30219 59596.7
+534.80396 37291.0
+535.30475 12976.8
+535.80573 2695.5
+537.31378 1498.6
+544.90491 635.2
+548.31390 37810.5
+549.31696 8796.3
+550.31970 1699.6
+585.23981 1177.8
+597.82379 3795.6
+598.32477 2646.8
+598.82971 1049.3
+600.30914 977.6
+603.24384 3207.1
+604.24280 879.8
+606.82941 3297.3
+607.33069 3564.2
+608.32928 1023.0
+608.67126 1149.1
+613.22693 1053.3
+615.83392 80038.5
+616.33508 62994.9
+616.83704 22643.3
+617.11719 658.4
+617.33820 7410.9
+617.83398 966.0
+618.32178 1733.1
+619.58148 594.6
+630.38928 799.2
+631.23798 4325.4
+632.23999 967.5
+641.22455 846.7
+641.28821 717.4
+648.26538 2276.0
+649.26917 884.7
+658.25006 1892.2
+673.34741 7621.8
+673.84930 5692.6
+674.35333 2246.3
+676.26044 2857.9
+676.61450 1127.1
+677.26282 1478.1
+677.37042 1028.8
+686.90845 714.1
+695.38184 7692.9
+696.38593 3172.7
+700.37817 1343.0
+757.42542 854.4
+774.42090 1059.8
+792.43542 21149.4
+793.43793 8850.1
+794.43573 2086.8
+795.57019 1055.1
+798.37787 1233.3
+804.33490 916.9
+815.40814 2078.3
+816.40955 790.1
+885.41260 1378.6
+886.41931 804.9
+902.44281 2958.3
+903.43994 1691.7
+1029.43445 612.3
+1057.20923 793.9
+1125.41357 760.2
+1174.49390 813.9
+1188.00964 715.9
+1198.24243 3254.6
+1280.66907 729.4
+1385.45984 637.9
+1451.78845 768.6
+1486.16577 524.7
+1533.51013 508.8
+1533.61462 507.6
+S	1419	1419	533.692991267
+Z	3	1597.804
+Z	2	1065.538
+136.07506 32371.6
+148.44684 24443.1
+155.10716 24521.6
+156.18912 24844.0
+160.44016 26242.9
+164.00435 23583.3
+168.75052 28360.7
+175.01172 25340.8
+175.11810 44742.9
+177.90224 24726.6
+178.08585 161183.0
+179.08971 26176.5
+188.24081 26032.6
+188.25728 36391.8
+188.26680 52686.1
+188.27707 39407.2
+188.28406 54167.4
+188.29497 36974.2
+188.30228 45315.7
+188.30869 45126.1
+188.32019 25193.3
+188.32664 22869.7
+195.17978 24685.6
+198.38254 22166.3
+198.89348 47397.3
+199.17517 61707.7
+199.24600 55852.5
+199.25919 65300.9
+199.27359 103787.6
+199.35616 25192.6
+199.36122 27614.4
+199.37183 41724.4
+214.51457 28124.1
+223.10722 391417.8
+224.11008 32658.2
+247.84268 22847.0
+248.13701 114218.2
+248.63788 26283.9
+251.10208 248560.3
+274.66232 30692.7
+276.17014 67779.0
+283.14291 37304.0
+317.63821 28542.9
+345.92746 22495.2
+348.11835 218662.0
+360.23526 109531.6
+366.12845 233329.2
+370.19629 23711.3
+374.80621 23188.6
+381.36240 27509.1
+387.71603 37701.3
+396.72067 328263.6
+397.22220 166031.4
+397.72723 29205.0
+426.16516 50845.6
+443.98935 34773.9
+449.23325 277075.4
+449.56815 240842.1
+449.90302 66271.8
+451.76358 50069.1
+460.76816 369982.8
+461.26154 66766.1
+461.28943 54829.0
+461.77148 40612.5
+464.01257 25594.2
+472.22836 25105.5
+478.24387 185209.1
+478.57898 168573.7
+478.91232 43999.2
+481.57077 80261.1
+495.26791 59166.4
+501.19714 218515.1
+502.20099 72187.6
+506.25595 67104.7
+506.58987 53280.1
+510.74213 36958.2
+511.24600 67761.4
+511.58731 43749.0
+513.19073 34451.9
+514.58862 35709.6
+514.91815 148154.0
+515.24994 111699.2
+515.58191 43460.0
+517.58575 53464.1
+520.59131 186035.3
+520.92047 247953.3
+521.25507 108602.9
+532.55157 82610.8
+548.31488 112692.5
+548.43225 25844.4
+549.15930 34049.6
+549.31683 53418.9
+576.61188 23288.0
+606.82727 35211.5
+615.83307 1257634.8
+616.33472 860187.2
+616.83630 250311.9
+617.33832 83203.3
+623.88605 23571.1
+648.26025 35938.7
+655.33392 71722.1
+655.83588 71200.0
+664.34143 166790.7
+664.84125 151651.5
+665.34326 82801.1
+665.83838 47159.1
+673.34674 3965718.3
+673.84796 2712518.0
+674.34924 1195449.9
+674.85132 288909.0
+675.19025 23893.4
+675.35449 74790.6
+676.26099 73135.1
+676.62500 40444.5
+677.26019 44195.7
+691.80792 26882.9
+695.38318 94087.7
+698.85083 36513.2
+699.34290 227689.8
+699.84717 113184.8
+700.34601 37780.3
+707.32330 23330.0
+707.85748 142211.4
+708.35962 110350.6
+712.84863 69775.5
+713.34656 49356.8
+716.86261 2166630.5
+717.36371 1649940.8
+717.86536 788795.4
+718.36652 125657.3
+718.86987 48504.3
+721.85516 336466.4
+722.35510 336250.1
+722.86237 69276.1
+754.48254 23779.2
+774.42224 40557.7
+792.43396 1017034.8
+793.43622 404250.6
+794.43951 92512.8
+795.57001 46044.6
+879.23737 30120.6
+903.83612 24457.3
+920.52295 40190.2
+1019.74213 29888.9
+1057.22485 32910.0
+1109.13525 24480.7
+1140.24060 31304.7
+1171.57300 47262.1
+1195.58545 22917.4
+1198.23022 144374.5
+1228.22754 26025.7
+1352.21887 24574.3
+1364.97131 25960.4
+1525.40942 45064.8
+1649.50525 23088.0
+1664.59338 28710.1
+1786.05811 27384.8
+1853.96997 27748.3
+1871.69312 32556.2
+1878.36279 36957.5
+1878.68970 60746.5
+1879.19312 103658.3
+1879.51794 851259.9
+1879.81213 99722.9
+1880.20203 63125.6
+1880.43311 35549.1
+1906.65857 47340.1
+1906.98523 303021.2
+1907.27820 69621.4
+1930.62610 48374.0
+S	1421	1421	533.0248246
+Z	3	1595.799
+Z	2	1064.202
+136.07520 2617.3
+141.50838 668.8
+141.84830 600.1
+149.29762 554.8
+151.61891 582.1
+156.71236 607.4
+157.59865 793.3
+160.07539 1995.6
+165.78035 842.4
+169.48872 655.0
+170.06009 586.8
+171.96419 741.3
+173.43842 557.0
+175.11896 3068.6
+177.40891 674.3
+178.08594 13188.4
+179.08897 1302.4
+181.12486 578.3
+185.30241 654.0
+188.07021 1358.9
+197.69215 526.3
+199.17186 954.1
+199.20874 600.7
+199.24304 920.4
+199.25328 1065.3
+199.27002 2462.8
+199.28745 803.0
+199.36668 722.1
+209.66888 535.2
+216.06563 1012.6
+217.13324 2365.1
+217.34641 586.5
+218.51123 490.0
+219.82643 499.7
+220.38562 608.9
+222.57712 609.5
+223.10754 24278.1
+224.11108 2455.1
+225.29471 541.7
+225.71330 605.1
+231.14969 1575.7
+233.09209 1957.9
+244.61203 535.7
+248.13736 5387.3
+251.10243 17773.3
+252.10579 1982.0
+259.03381 606.9
+262.58755 587.9
+265.65671 682.2
+274.66043 1611.6
+276.17044 7561.4
+277.17395 1125.0
+279.09689 1802.6
+280.17386 733.5
+283.14365 3466.3
+287.89661 596.2
+303.14227 627.8
+303.21237 736.0
+311.14032 783.6
+316.78525 615.5
+321.16156 565.0
+330.10785 1011.7
+331.09201 1042.8
+348.11877 14215.2
+349.12088 2333.9
+353.15109 1426.4
+360.23492 8277.3
+366.12943 17818.3
+367.13300 3372.0
+373.22339 1733.3
+381.14487 1578.8
+381.59308 695.2
+382.14954 784.1
+387.71637 2485.1
+388.21808 1698.6
+396.72137 25582.7
+397.22272 11645.4
+397.72388 2940.8
+410.89233 3245.5
+411.22693 2606.5
+411.56094 970.9
+426.16617 3278.4
+427.16943 1290.1
+427.53241 709.7
+437.55786 592.9
+437.89700 1025.0
+438.23199 1436.8
+443.23032 1490.2
+443.56186 1206.5
+443.89642 821.1
+445.89755 863.0
+446.23132 887.2
+449.23425 12648.9
+449.34616 632.4
+449.56848 14974.3
+449.90314 4963.9
+450.23804 1877.9
+451.76413 2013.6
+452.26230 982.7
+452.75562 1078.1
+460.25565 1760.7
+460.76859 27690.3
+461.26340 7392.8
+461.29150 4956.9
+461.77139 3831.7
+462.29047 1506.0
+467.18802 664.3
+468.17673 1078.6
+472.24405 2203.3
+472.57535 1210.4
+472.91010 1602.7
+475.90063 1224.6
+478.24484 11548.8
+478.57910 11356.6
+478.91299 3750.7
+479.24704 1092.4
+481.57257 4862.9
+481.90744 2885.4
+483.17606 848.3
+484.16763 1400.7
+485.20172 1777.6
+495.18567 1145.0
+495.26633 3953.3
+497.24213 961.2
+497.26892 966.0
+501.19751 12548.2
+502.20065 3712.2
+506.25650 3517.6
+506.58975 4361.7
+506.92624 1406.6
+508.91422 1367.2
+509.24728 1377.1
+509.58521 743.7
+510.74466 1744.7
+510.91589 2875.8
+511.18146 1027.2
+511.24820 2563.6
+511.58459 2829.3
+511.92148 2194.9
+512.25641 776.2
+512.29340 3143.4
+513.19543 2900.1
+514.20099 912.3
+514.58887 2382.6
+514.91748 8150.8
+515.25116 7064.1
+515.58514 3965.8
+516.58948 717.2
+516.92023 2075.6
+517.25677 1877.0
+524.65637 590.5
+532.50238 1351.3
+534.80609 1046.7
+548.31433 13234.3
+549.31726 4032.8
+550.31836 619.8
+565.55286 690.2
+597.82349 1709.3
+606.82721 1808.2
+607.32855 1385.2
+607.82849 944.6
+615.83405 83801.8
+616.33514 66056.8
+616.83698 26763.0
+617.11926 750.3
+617.33813 6759.7
+617.84125 1714.5
+618.32428 1511.4
+619.32800 821.3
+630.38123 884.0
+631.23615 1031.0
+632.72894 616.7
+641.29639 643.2
+642.31494 672.7
+646.82861 722.7
+648.26538 2033.9
+649.26941 1106.4
+653.16919 1468.3
+655.33551 5319.0
+655.83826 4204.2
+656.34039 1867.0
+656.84277 932.2
+658.24872 2907.5
+664.34186 12925.4
+664.84039 13103.3
+665.33691 7859.1
+665.83527 2415.7
+666.33478 1097.2
+671.51080 1412.7
+672.00690 1415.1
+672.44305 945.7
+672.95197 965.1
+673.01642 604.2
+673.34772 242213.3
+673.84888 206393.2
+674.24884 1591.2
+674.34991 86093.4
+674.74774 1100.1
+674.77368 902.3
+674.85181 26500.8
+675.19080 1256.0
+675.28278 681.2
+675.35394 5593.7
+675.69513 1656.2
+675.86005 932.1
+676.26056 5533.4
+676.61169 792.7
+677.26227 2156.8
+695.38190 6819.8
+696.38501 3376.8
+698.85272 3819.9
+699.34546 13446.8
+699.84692 9661.6
+700.34900 4602.7
+700.84778 1687.6
+706.85046 770.5
+707.85791 9462.1
+708.35889 9001.4
+708.86078 1781.6
+709.35388 1270.4
+712.84991 6682.8
+713.35199 6630.6
+713.85400 2873.9
+714.35730 1119.1
+715.85370 1033.8
+716.07227 672.7
+716.37329 630.5
+716.86346 135965.0
+717.36432 132670.0
+717.86566 61202.6
+718.36694 18059.9
+718.86523 3903.2
+719.36371 819.5
+721.85529 22775.5
+722.35657 18118.5
+722.85840 8465.4
+723.35858 4051.5
+738.35071 651.3
+746.41779 1026.4
+757.42450 941.2
+770.39178 646.6
+770.47101 619.0
+774.42505 3289.2
+775.42993 1235.6
+777.35345 574.4
+792.43481 100736.1
+793.43750 53054.4
+794.44067 15407.9
+795.44043 2501.2
+795.79852 787.3
+804.35120 1618.2
+805.35553 803.2
+827.35455 631.6
+885.43054 698.1
+886.40497 780.5
+888.28174 577.1
+920.52911 5156.6
+921.53180 3413.3
+922.53394 1068.5
+979.94855 547.7
+1048.47876 1641.4
+1049.47693 1216.2
+1056.54749 1297.2
+1065.51123 1252.3
+1066.50854 959.3
+1067.57751 717.7
+1068.60034 799.7
+1143.19788 590.9
+1171.57471 3905.1
+1172.58374 2821.1
+1173.57397 1361.1
+1187.92871 1094.7
+1198.12390 3004.6
+1258.60120 1383.1
+1259.61938 1770.2
+1260.63965 705.7
+1399.54529 728.0
+1525.37097 880.2
+1576.72229 683.6
+1623.74780 557.4
+1695.75171 623.9
+1768.84265 682.0
+1876.71460 669.8
+1879.47559 19263.5
+1907.03369 7662.2
+1931.89636 817.1
+S	1422	1422	400.6268246
+Z	3	1198.605
+Z	2	799.406
+109.20565 1110.7
+113.57252 997.1
+121.80105 5534.4
+125.26617 1169.6
+132.43167 1193.6
+135.67322 1239.0
+136.07530 47786.6
+138.28287 1282.3
+139.31197 1439.9
+142.08675 1095.5
+147.04349 5078.5
+149.74910 1442.6
+150.09103 2053.9
+151.15837 1404.4
+157.06041 9839.1
+160.07567 3127.2
+169.98428 1283.4
+175.07137 4570.3
+175.11841 5970.7
+178.08598 19700.8
+179.08890 1882.7
+181.48109 1279.3
+188.06956 2609.7
+189.07091 1227.6
+197.70033 1250.4
+198.89676 1660.8
+199.16724 1982.3
+199.17467 1261.3
+199.24136 1432.6
+199.25780 5263.7
+199.27408 4689.9
+199.35303 1344.2
+199.36969 2327.6
+203.06610 6119.6
+203.42982 1325.3
+206.08032 1979.0
+214.58150 1169.5
+217.13335 22232.3
+218.13742 2574.4
+223.10750 31853.4
+224.11057 2622.8
+226.12378 1571.5
+226.32687 1181.1
+231.14307 3380.1
+233.09183 2555.6
+234.07654 1866.7
+238.07227 1048.8
+239.08755 1226.5
+244.96535 1208.4
+245.12843 5850.9
+248.13715 61157.9
+248.63892 12369.6
+249.13945 2054.3
+251.10226 39863.2
+252.10632 4309.8
+252.80914 1989.6
+255.29597 1711.4
+256.65036 3786.7
+257.14215 1747.9
+258.81061 1286.0
+260.32544 1814.9
+262.15332 2164.6
+264.81662 31301.4
+265.15100 14209.7
+265.48459 2887.0
+265.65585 9112.8
+266.15674 2373.1
+267.71277 1267.2
+274.66104 6395.7
+276.17035 11484.9
+277.17459 2517.0
+278.45294 1152.7
+279.09711 2232.5
+283.14438 8673.2
+293.11255 2392.6
+301.83984 4032.8
+302.17413 1881.2
+303.21371 3852.0
+307.51529 4463.4
+307.84872 1974.0
+308.90817 1586.5
+321.10812 9326.4
+332.16022 2802.1
+338.22528 1144.8
+344.53479 1908.7
+348.11890 12935.0
+348.19495 11074.7
+348.69724 5375.0
+349.92905 1543.3
+353.18674 1663.9
+354.68451 3095.0
+356.53796 24937.0
+356.87161 15065.7
+357.20688 4547.5
+360.23477 26298.6
+360.43539 1600.3
+361.24020 3463.4
+364.94080 1444.8
+365.18781 2783.1
+366.12946 16502.2
+367.13385 1904.8
+374.70825 1813.4
+374.93964 1552.3
+376.43936 3868.3
+376.69196 4821.8
+376.94009 1881.9
+377.19098 1781.6
+377.43982 6067.4
+377.68921 2838.7
+377.94180 2557.1
+378.48764 2232.0
+378.71103 14152.1
+379.21448 4980.6
+379.44064 31315.8
+379.69122 33583.5
+379.94217 11656.7
+380.19305 5301.5
+380.67535 1404.2
+380.69394 1105.6
+381.36652 1434.7
+381.93622 6795.1
+382.18777 1783.2
+383.44022 1411.7
+383.94293 19655.3
+384.19403 11830.8
+384.44385 7305.6
+384.94312 1871.6
+404.88828 4079.1
+405.22360 1534.2
+410.89206 108336.1
+411.22641 84198.1
+411.56073 30226.9
+411.89523 8377.7
+418.89276 1771.1
+426.16953 1376.5
+433.22510 2756.7
+437.22702 14367.7
+437.56204 11165.7
+437.89511 4684.8
+438.23233 2150.4
+439.23096 2078.4
+442.76129 1406.0
+443.23029 14318.3
+443.56265 14846.9
+443.71246 1371.5
+443.89462 9613.2
+444.22653 3575.8
+444.95001 1377.6
+445.90079 3086.8
+446.23441 4316.8
+446.56799 2636.0
+448.22900 1546.2
+449.23450 233908.3
+449.56851 180036.0
+449.72952 1659.8
+449.90274 74800.4
+450.23782 29104.9
+450.57263 12398.6
+450.90778 4286.9
+451.76447 3654.1
+457.23407 5624.7
+457.56686 4337.0
+457.89932 1945.0
+459.57208 2405.1
+459.90506 2749.6
+460.23569 5754.1
+460.56644 2670.4
+460.76862 46402.2
+460.89728 1795.3
+461.26343 13040.5
+461.29178 9540.6
+461.77029 4786.6
+462.23801 4161.6
+462.28638 2553.7
+462.57025 1949.9
+463.24011 7068.6
+463.56976 7440.9
+463.90549 4269.2
+464.23917 2931.5
+466.23798 35678.2
+466.57175 27467.2
+466.90570 13336.3
+467.19153 3128.6
+467.23959 4633.9
+468.24390 1864.7
+469.56567 5875.3
+469.86441 1791.4
+469.90118 4400.1
+470.23343 3101.6
+472.24100 76242.4
+472.57547 65036.4
+472.90997 24534.6
+473.24463 7143.6
+475.22830 1267.1
+475.56915 9131.8
+475.90317 8031.3
+476.23514 2586.0
+477.14310 3615.6
+477.47592 1902.5
+477.69690 2994.6
+478.03232 2300.8
+478.05997 1797.2
+478.18124 2085.4
+478.19080 1974.7
+478.24457 750812.6
+478.29559 2840.0
+478.57874 604451.6
+478.78970 5023.4
+478.91278 257758.6
+479.12567 2635.6
+479.24695 87142.2
+479.34891 3243.8
+479.58157 22965.9
+479.68677 2883.4
+479.91757 4759.9
+481.57224 66554.1
+481.90659 53780.6
+482.24100 19005.2
+482.57520 7836.6
+482.66556 1585.3
+482.91278 1858.3
+484.17044 20691.4
+485.17538 4365.7
+488.58124 6628.0
+488.91562 3699.6
+491.57617 4818.3
+491.90424 2654.4
+492.24741 2573.6
+492.29837 1948.9
+494.15198 1579.2
+495.18713 2578.7
+495.26572 8415.3
+497.26691 2485.6
+497.91415 2043.4
+498.24539 2788.3
+501.19748 5703.2
+502.22241 2153.9
+506.26282 1500.8
+510.74615 3757.5
+511.24539 1850.4
+512.16571 2886.9
+512.29291 12554.9
+513.19800 6767.0
+513.29663 2157.6
+514.19922 2444.9
+516.29236 3576.7
+517.25482 2191.1
+520.91980 1649.2
+525.29620 3184.3
+525.79718 2318.2
+526.92395 6042.8
+527.25793 3124.2
+527.59680 2438.7
+529.19202 3290.9
+530.30237 4846.6
+532.52557 4208.4
+533.25311 5540.8
+533.75958 3191.1
+534.30219 110578.6
+534.80383 67074.9
+535.30487 22238.0
+535.80530 4841.3
+537.31934 1649.6
+538.31781 1635.6
+548.31384 68563.1
+549.31708 15901.4
+550.31635 3042.4
+563.91394 1214.8
+597.82343 4735.7
+598.32306 5884.2
+598.82562 2359.8
+600.31671 2413.9
+603.24329 4718.7
+604.24829 1954.5
+606.82880 7266.1
+607.32654 5304.5
+607.83154 1999.9
+608.67267 1473.5
+613.76660 1577.3
+614.22705 2100.8
+615.83368 149094.9
+616.33484 110956.9
+616.83667 41695.4
+617.33765 10086.0
+617.83966 3296.6
+617.94611 1185.0
+618.32483 3602.1
+631.23608 6481.0
+632.24310 3565.7
+648.26544 5184.6
+649.26697 2128.6
+658.24652 3584.1
+658.55780 1315.8
+673.34753 12358.0
+673.84943 12081.2
+674.34851 5811.6
+676.26086 6613.3
+676.61975 1419.3
+677.26471 1827.1
+677.37653 1777.4
+683.35260 1857.0
+695.38239 14584.1
+696.38556 4468.9
+700.37866 2922.6
+705.37738 1359.2
+735.52393 1214.6
+768.19391 1391.3
+792.43530 36388.3
+793.43726 12916.2
+794.44354 3682.3
+815.40735 3738.1
+885.42401 1778.4
+902.43964 4610.6
+903.43750 2767.7
+957.39874 1308.9
+958.95081 1261.1
+988.70575 1298.0
+1006.14124 1372.8
+1114.79358 1267.9
+1125.83899 1217.6
+1198.17993 7403.7
+1525.45251 1456.4
+1538.32788 1171.5
+S	1423	1423	533.6928246
+Z	3	1597.803
+Z	2	1065.538
+136.07524 2570.5
+136.88858 550.1
+137.29080 604.6
+139.89865 563.3
+152.98323 710.2
+160.07524 1926.4
+165.78445 778.4
+171.63927 618.7
+173.04892 628.9
+173.94148 536.4
+175.11916 2995.6
+178.08612 14050.4
+179.08942 1706.6
+188.07045 1899.6
+188.25676 804.8
+188.26355 1065.0
+188.27525 1148.7
+188.28383 1291.8
+188.29503 1679.6
+188.30563 867.6
+188.31288 629.7
+188.32320 616.5
+198.89877 940.9
+199.18094 877.8
+199.21208 799.3
+199.22827 636.0
+199.24797 1057.2
+199.27873 3108.5
+199.37651 1039.0
+205.23813 592.2
+209.23195 618.1
+216.06528 1850.8
+217.13358 2993.5
+223.10771 31086.0
+224.11127 3552.4
+226.15240 525.0
+231.14987 2944.8
+232.15184 743.3
+233.09204 2475.8
+234.07649 794.7
+248.13728 5507.7
+248.63835 1558.8
+251.10254 21693.7
+252.10561 2925.6
+260.66696 558.6
+271.78763 626.6
+274.66122 2514.1
+275.16315 959.2
+276.17047 10055.6
+277.17383 1993.5
+279.09698 2042.8
+283.14401 4144.2
+284.14676 903.0
+303.21356 1211.8
+308.90466 761.6
+311.13879 973.1
+318.37183 643.5
+331.09204 1574.9
+345.22916 708.2
+347.57617 551.1
+348.11887 16000.0
+349.12296 3291.9
+353.14932 1358.0
+355.21490 1046.3
+360.23505 9467.1
+361.23965 851.2
+366.12936 21034.3
+367.13281 3818.8
+373.22403 2115.5
+381.14435 2084.6
+387.24487 601.2
+387.71564 2700.5
+388.21872 1813.4
+396.72141 32435.9
+397.22272 12994.4
+397.72375 2857.4
+410.89249 4894.8
+411.22653 2640.9
+411.55988 942.2
+411.89645 619.4
+426.16611 4693.3
+427.16812 1185.2
+437.21057 550.8
+437.23175 789.9
+437.89764 978.9
+438.23395 802.7
+438.57050 715.2
+439.23340 923.6
+442.75977 921.6
+443.23123 1800.7
+443.56244 2257.7
+444.22827 946.6
+446.23178 1197.0
+446.56949 787.4
+449.18677 608.1
+449.23444 20717.1
+449.56882 12183.6
+449.90271 6180.8
+450.23792 1814.9
+450.40387 582.4
+450.57266 802.9
+451.76306 4628.9
+452.26279 1461.9
+452.56604 909.7
+460.25510 2795.3
+460.76871 31688.4
+461.26248 7789.8
+461.29041 8114.7
+461.77225 3202.5
+462.28876 2634.5
+463.29031 920.5
+467.19070 867.3
+472.24051 3404.4
+472.57602 2465.6
+474.20108 760.4
+476.23999 707.7
+478.24457 15221.3
+478.57941 11305.5
+478.91351 5786.6
+479.24716 1422.4
+481.57370 3270.8
+481.90698 3832.8
+482.24234 1773.1
+482.57364 755.9
+482.65482 866.5
+483.18262 1512.1
+484.17035 2503.5
+485.20236 2406.7
+486.20782 1008.3
+494.15903 949.7
+495.18713 2262.1
+495.26669 4918.7
+496.26996 924.1
+497.26254 1469.8
+501.19724 17602.9
+501.73480 859.9
+502.20081 3501.9
+503.26193 897.0
+505.24786 691.5
+505.92377 778.7
+506.25720 5435.4
+506.59167 4822.6
+508.91031 2467.7
+509.24622 2262.5
+510.74277 3223.0
+510.91666 3476.9
+511.18134 1287.9
+511.24936 5169.5
+511.58597 2302.5
+511.92117 3867.2
+512.25610 526.0
+512.29272 4855.8
+513.19604 3513.7
+513.27521 1221.6
+514.58826 3846.2
+514.91736 11523.1
+515.25092 7445.5
+515.58496 3566.7
+515.73639 844.6
+515.91833 948.4
+516.29236 1338.8
+516.59338 597.0
+516.92053 1854.5
+517.25330 875.2
+532.49097 1932.8
+532.60242 1018.1
+534.79791 949.3
+548.31409 15309.0
+549.15796 827.3
+549.31714 4020.8
+554.26471 1024.5
+561.30396 928.8
+597.82214 2745.2
+598.32520 1456.3
+604.92181 568.9
+606.82874 3053.4
+607.33087 3233.4
+614.24487 728.9
+615.83417 113705.7
+616.33514 78407.7
+616.83655 30264.2
+617.33826 9610.3
+617.84003 1653.8
+617.95172 591.1
+618.32599 2249.7
+619.32831 731.0
+630.25677 933.9
+630.40851 963.4
+631.23950 1314.9
+641.29327 913.3
+644.81244 708.3
+648.26648 2767.4
+651.83612 879.9
+655.33606 9651.3
+655.83911 5861.4
+656.33929 2947.2
+658.24945 2858.6
+661.14258 600.4
+664.34235 15598.7
+664.83984 15214.3
+665.33881 7943.2
+665.84009 3309.8
+666.33893 1917.1
+671.51288 1366.5
+671.83026 1412.9
+672.01459 1002.1
+672.12347 907.8
+672.43347 1388.1
+672.73193 752.1
+672.92078 1086.8
+672.94934 1019.6
+673.25049 1028.5
+673.34778 339047.7
+673.84888 239291.5
+674.24945 1802.0
+674.27924 1421.6
+674.35010 96858.1
+674.55896 585.0
+674.57404 579.2
+674.75513 863.8
+674.77612 855.4
+674.85144 27555.9
+675.19720 1833.6
+675.34991 5503.0
+675.40546 833.5
+675.70221 1524.1
+676.25885 6269.1
+676.59167 746.4
+676.64655 815.1
+677.26428 2066.3
+690.33875 855.1
+695.38287 9303.9
+696.38373 3122.6
+698.85327 4605.0
+699.34576 18905.1
+699.84698 11245.2
+700.34833 4609.8
+700.84418 1459.8
+703.84521 1100.6
+704.34576 1133.6
+706.85236 1721.3
+707.35785 791.0
+707.85797 11386.7
+708.35907 11760.4
+708.86060 4562.0
+709.36041 2299.9
+711.83282 720.0
+712.85077 8442.3
+713.35107 7294.3
+713.85321 2742.2
+714.35553 1179.0
+714.83966 1121.1
+716.03961 562.5
+716.37299 926.4
+716.86353 194022.6
+717.36426 147801.0
+717.86584 68948.6
+718.36700 20138.4
+718.86639 3221.7
+719.39197 577.2
+720.67883 617.2
+721.85510 30907.3
+722.35675 21067.7
+722.85858 10108.4
+722.95026 657.0
+723.36206 3129.6
+746.41571 798.6
+747.43188 692.0
+756.41217 1924.0
+757.42023 1215.7
+769.32043 755.6
+770.37909 825.1
+774.42419 4521.9
+775.43219 1731.3
+786.34674 1052.0
+792.43488 131592.9
+793.43738 56857.3
+794.44067 15562.2
+795.44165 2870.8
+795.58179 1279.0
+804.35254 1616.9
+815.40826 1023.2
+868.49005 870.5
+885.41461 797.6
+893.48749 976.6
+920.53156 6173.5
+921.53436 3334.8
+959.85522 763.0
+977.84509 637.9
+1005.71887 617.5
+1031.46289 705.0
+1032.45288 882.4
+1048.47937 2689.8
+1049.47705 1685.7
+1056.55042 1033.1
+1057.25940 864.6
+1065.50220 1490.8
+1066.49841 1577.2
+1067.58093 844.9
+1135.50635 695.9
+1171.57764 4737.1
+1172.57263 2490.5
+1173.59265 986.0
+1188.06885 672.8
+1198.09851 3623.2
+1258.60974 2555.9
+1259.60669 1349.6
+1622.79993 696.1
+1874.01453 641.9
+1879.29810 3642.3
+1879.55823 19450.2
+1879.95044 2091.0
+1907.05371 7521.0
+1918.66736 770.9
+1930.61975 1139.0
+1931.61011 655.5
+1934.24316 750.8
+S	1425	1425	532.9418246
+Z	3	1595.802
+136.07539 2085.3
+144.23515 609.7
+160.07573 1249.9
+166.63393 594.8
+166.84801 676.7
+171.63760 611.9
+173.92915 736.4
+173.94669 704.0
+175.11867 1825.1
+175.37471 542.1
+176.02388 569.0
+178.08604 8465.7
+179.08943 1137.8
+180.52829 729.4
+187.01746 611.1
+188.06944 939.6
+198.89363 810.4
+199.16078 1015.6
+199.25911 2730.5
+199.27133 1908.4
+199.35098 685.3
+199.35884 921.3
+217.13289 1519.6
+223.10747 16037.9
+224.11098 2436.3
+231.14970 1556.0
+232.79816 613.2
+233.09290 1074.9
+243.92433 550.5
+248.13710 3262.7
+248.63834 1023.5
+251.10237 11870.4
+252.10574 1841.1
+262.80643 537.3
+274.66180 606.0
+276.17053 4592.6
+283.14410 1445.8
+308.86493 540.0
+313.19162 574.0
+331.09210 1111.7
+342.26376 605.0
+348.11877 10152.2
+349.12265 2337.6
+350.28012 1035.5
+360.23492 4500.8
+361.23672 735.9
+364.31235 578.7
+366.12927 9707.9
+367.13327 2092.0
+373.22290 1089.8
+378.56183 606.3
+379.37640 655.9
+381.14227 1055.1
+387.71603 1797.2
+388.22073 700.6
+396.72104 15097.9
+397.22253 9080.6
+397.72400 2584.7
+410.89194 1850.9
+411.22626 2586.6
+411.38049 638.7
+411.55984 706.7
+426.16559 2793.2
+427.17087 877.2
+434.22980 495.3
+442.75336 716.1
+445.89966 1066.6
+446.23611 835.6
+449.23410 7819.2
+449.56784 10006.7
+449.90173 3618.1
+451.76398 1226.5
+452.25604 762.2
+460.25500 1293.5
+460.76859 14190.4
+461.26495 6924.7
+461.29337 3082.2
+461.77084 4189.2
+462.29150 1095.7
+466.90332 846.4
+472.24091 1768.2
+472.57077 763.8
+472.91028 1119.7
+473.08221 518.3
+478.24451 5748.5
+478.57953 7643.1
+478.91373 3204.0
+479.24710 1575.9
+481.57358 1707.8
+481.90689 2561.7
+482.24448 1116.7
+482.65289 840.8
+484.16739 1144.1
+485.20544 720.8
+495.26700 2588.8
+497.26489 2592.7
+497.78030 891.4
+501.19714 8522.1
+502.20062 2852.7
+503.20166 922.4
+506.25577 2523.8
+506.59116 2643.3
+506.92780 1520.6
+509.24548 1069.5
+510.74445 2154.9
+510.91660 1340.1
+511.24988 3095.4
+511.58475 1630.1
+511.92154 1681.1
+512.25452 954.1
+512.29120 2202.5
+512.59119 955.1
+513.19678 2412.8
+513.30536 815.9
+514.58783 2119.6
+514.91742 4970.7
+515.25140 6816.4
+515.58508 3821.5
+515.92004 1414.2
+516.29370 808.9
+516.92023 2088.8
+517.25238 1560.8
+517.58734 858.1
+517.92108 768.3
+518.25513 881.9
+532.51581 2143.8
+546.85303 531.7
+548.31415 6536.7
+549.31744 2311.4
+575.89111 649.3
+598.32520 962.6
+606.82733 1925.3
+607.32941 1221.9
+615.83405 43126.6
+616.33502 49106.4
+616.83667 21832.6
+617.33813 8343.7
+617.84137 1775.9
+618.31909 1276.4
+637.02185 630.1
+646.34021 596.0
+648.26874 1114.3
+649.27026 913.5
+653.16791 1284.4
+655.33643 3371.4
+655.84180 3230.5
+656.34229 1413.6
+656.83789 708.4
+658.24817 1138.3
+664.34235 7117.5
+664.84137 7709.9
+665.33978 6145.7
+665.84265 2254.5
+672.00708 695.7
+673.34760 140125.1
+673.84882 151316.1
+673.93439 938.6
+673.97437 801.5
+674.14044 744.8
+674.34985 82043.5
+674.85083 25643.2
+675.18958 1148.6
+675.35046 5315.9
+675.69562 896.5
+676.25946 3778.1
+676.62854 1076.4
+677.26416 1204.5
+690.34625 739.9
+695.38226 3537.6
+696.38776 1259.2
+698.85199 2388.5
+699.34680 6533.1
+699.84845 8604.8
+700.34857 4237.0
+700.84741 1539.9
+707.35046 1130.6
+707.85754 5901.3
+708.35938 5964.4
+708.85962 2329.0
+709.36005 1362.8
+712.84961 3600.5
+713.35229 2703.3
+713.84918 2370.3
+714.34863 837.8
+715.34082 848.1
+716.86346 74954.8
+717.36426 93258.3
+717.86603 48981.2
+718.36719 17654.4
+718.86908 4569.5
+721.85443 11905.4
+722.35651 13133.4
+722.85913 7807.1
+723.35803 2536.6
+750.69922 662.2
+756.40778 822.9
+774.42395 1585.7
+792.43494 53208.9
+793.43781 34089.6
+794.44031 10543.3
+795.44489 2394.5
+795.58105 1087.2
+798.37708 771.0
+805.36523 755.3
+816.41309 616.0
+870.20892 577.0
+872.82025 632.1
+893.49310 835.6
+913.15704 582.1
+920.53107 2115.4
+921.53082 1826.4
+951.17920 524.0
+1048.47888 1477.2
+1065.51367 1126.9
+1066.49622 846.4
+1171.57690 2235.2
+1172.57874 2127.9
+1173.57141 897.2
+1198.15259 3632.5
+1218.94507 660.8
+1525.40881 957.3
+1675.57861 641.8
+1874.19775 763.5
+1879.49207 20043.1
+1879.93652 2138.2
+1880.47095 1035.2
+1907.04858 7521.1
+S	1426	1426	400.4595746
+Z	4	1597.807
+102.71246 546.4
+110.53432 609.5
+121.79913 2097.9
+127.90167 558.4
+128.57603 672.1
+136.07533 16151.0
+137.51828 583.0
+147.04347 1066.9
+154.13437 573.5
+154.15273 564.6
+157.06052 3227.0
+165.78273 713.9
+175.07123 2159.7
+175.11893 2259.5
+178.08612 5346.9
+179.08920 777.8
+180.62009 575.7
+188.07048 701.4
+190.66699 526.7
+198.89357 997.0
+199.16766 917.2
+199.17850 1264.7
+199.24097 644.9
+199.26451 2278.1
+199.27681 1684.0
+199.36259 980.9
+203.06636 1848.7
+206.08229 1239.5
+217.13367 9152.4
+218.13699 917.6
+223.10771 9946.7
+223.24394 525.9
+224.11066 1055.5
+231.14317 1191.6
+233.09235 867.4
+245.12831 1299.5
+248.13750 21953.4
+248.63905 4374.1
+251.10265 12831.0
+252.10634 1550.5
+255.28683 571.7
+256.65015 943.9
+257.14246 741.1
+257.64545 621.3
+262.15518 1021.9
+264.81683 10474.3
+265.15109 5193.3
+265.48480 1261.3
+265.65607 3253.5
+271.78183 584.4
+274.66220 1518.7
+276.17056 5884.3
+277.17429 991.7
+279.09512 793.9
+280.18051 640.0
+283.14462 3688.8
+293.11444 1243.9
+293.16690 634.8
+297.11179 535.6
+298.99399 569.8
+301.84122 681.0
+302.17270 860.3
+307.51517 2037.4
+311.13889 858.0
+313.16241 682.7
+321.10834 4561.2
+322.11417 713.3
+322.91696 647.1
+328.18329 1082.9
+332.16010 919.2
+348.11920 7531.4
+348.19522 4980.7
+348.69666 2349.2
+349.12250 1739.7
+354.43304 1990.9
+354.68353 1016.9
+355.12207 607.8
+355.21362 919.1
+356.53809 10320.3
+356.87274 6986.7
+357.20734 1490.4
+357.54089 813.1
+360.23553 16352.2
+361.18472 567.5
+361.23993 2735.7
+364.17947 618.2
+364.93625 1798.4
+365.18735 1406.6
+366.12973 10771.8
+367.13513 1172.6
+370.68509 623.4
+372.71191 695.7
+373.22485 1792.3
+374.70920 1219.1
+376.44147 1629.3
+376.69150 1763.9
+376.93982 804.2
+377.19217 1326.5
+377.44104 2916.0
+377.69019 1298.4
+378.71121 3531.0
+379.21387 1809.8
+379.44107 12032.7
+379.69174 14079.3
+379.94211 6997.3
+380.19315 2913.3
+380.94571 664.4
+381.93655 1204.4
+382.18683 919.9
+383.94376 2459.9
+384.19495 1198.6
+384.43945 783.6
+388.94907 721.6
+396.72333 1248.2
+397.20441 674.9
+399.70175 10460.5
+399.95242 11923.6
+400.20236 6517.1
+400.45416 3112.2
+400.70456 2814.4
+400.95450 1492.5
+404.89093 1334.4
+405.22153 1159.3
+410.89255 74515.2
+411.22675 54481.4
+411.56088 22589.3
+411.89539 6993.4
+412.23123 1280.7
+415.19589 913.9
+419.22623 1296.3
+425.17679 662.4
+426.16650 1897.7
+427.53409 935.2
+429.21335 937.5
+433.22583 919.2
+433.55960 941.7
+437.22745 7029.3
+437.56177 5344.2
+437.89670 1586.9
+439.23340 1089.4
+442.24493 1267.7
+443.23138 10639.4
+443.27213 917.1
+443.56375 8558.6
+443.89603 5957.6
+444.22983 1877.5
+445.89847 1856.5
+446.23398 2087.9
+446.56781 1593.6
+448.23752 1147.3
+448.89630 735.0
+449.07602 576.4
+449.23495 151324.1
+449.56879 105002.9
+449.90298 45216.1
+450.06644 621.4
+450.23807 18110.1
+450.57236 6362.7
+450.90884 2031.7
+451.24774 778.3
+451.72791 1037.9
+451.76425 3759.8
+452.26483 1542.3
+452.75684 1065.4
+457.23456 3166.6
+457.56949 2291.9
+457.90356 1284.9
+459.56955 1377.8
+459.90610 2632.4
+460.25198 2354.4
+460.56924 2043.8
+460.76917 31232.9
+460.89459 979.6
+461.26205 7929.8
+461.28995 10306.5
+461.77203 5454.8
+462.23788 2005.2
+462.28873 2715.7
+462.57275 2418.5
+463.23697 3553.7
+463.57138 4210.4
+463.90176 900.4
+466.23843 18306.5
+466.57254 17683.5
+466.90701 7914.7
+467.19122 2891.3
+467.23993 2653.2
+468.17566 1636.9
+468.24130 918.1
+469.56598 3405.2
+469.90347 1420.8
+470.23419 1061.6
+471.26425 701.9
+472.24152 41276.8
+472.57602 34238.6
+472.91049 16546.3
+473.24503 5887.3
+473.57999 2292.2
+475.22495 699.5
+475.56967 4239.3
+475.90353 3423.8
+476.24066 823.6
+476.57129 759.5
+477.14633 2256.0
+477.47562 1906.0
+477.69943 2134.0
+477.80905 1050.1
+477.91647 912.2
+478.04077 1536.7
+478.07178 639.7
+478.17300 703.3
+478.19305 1499.7
+478.24503 441930.8
+478.37003 1191.6
+478.43002 920.3
+478.57907 337557.1
+478.70370 695.8
+478.79031 2454.6
+478.91299 159252.6
+479.12390 1691.2
+479.16098 1303.4
+479.24695 42708.2
+479.35104 3127.3
+479.58179 10327.0
+479.68292 2433.1
+479.91660 3566.5
+480.01849 1066.4
+481.57263 39328.5
+481.90701 35019.4
+482.24136 14326.6
+482.57510 3280.5
+482.91214 1327.4
+484.17084 10128.5
+485.18195 3226.5
+485.90933 1026.5
+488.58163 2318.0
+488.91531 1994.7
+491.57764 1338.9
+491.90845 991.2
+492.24448 1203.6
+492.29480 1814.3
+494.15506 1355.3
+495.18704 2481.3
+495.26675 6694.9
+496.26852 1283.7
+497.25980 1594.3
+497.91412 2645.0
+498.24799 2191.7
+498.58136 829.0
+501.19794 4285.2
+502.20071 1285.7
+503.26266 838.4
+510.74524 2275.3
+511.24490 1242.8
+511.91550 855.5
+512.16663 1280.4
+512.29340 11537.7
+513.19580 4920.9
+513.29797 3276.1
+514.19916 882.2
+516.29266 1988.4
+516.79340 1958.4
+520.28876 812.1
+520.91705 1288.4
+521.25128 1527.6
+521.59058 682.5
+523.18378 694.5
+524.73889 1039.8
+525.30139 1682.0
+525.79919 1878.8
+526.92389 4090.5
+527.25891 4929.6
+527.59216 1334.6
+529.19226 2803.3
+530.30383 4865.7
+531.28290 1220.7
+532.52362 2073.8
+532.59967 1946.1
+532.93054 1639.6
+533.25140 1602.7
+533.75879 1164.6
+534.30267 63466.7
+534.80420 42292.2
+535.30530 17255.2
+535.80725 4766.1
+536.30884 1161.6
+537.31635 1309.9
+538.31750 576.4
+548.31433 55256.0
+549.31702 14746.2
+550.31885 3017.8
+554.25720 894.8
+582.29437 2702.4
+582.79321 1623.1
+585.23090 808.8
+597.82404 3796.6
+598.32532 3753.6
+598.82819 1008.4
+600.31183 1225.7
+601.30798 819.4
+603.24481 3558.4
+604.24945 931.9
+606.82904 5228.4
+607.32794 3964.1
+607.82886 2491.3
+608.33276 1830.4
+609.01093 689.6
+613.22675 971.0
+615.83429 110311.7
+616.33545 84046.0
+616.83704 37073.8
+617.33826 9779.8
+617.44373 647.0
+617.83972 2265.3
+617.95129 701.6
+618.32263 4480.5
+619.32550 1748.4
+621.33380 775.3
+622.34003 598.7
+630.25037 695.4
+631.23914 4050.5
+632.24023 1818.0
+636.31866 707.6
+641.22113 942.0
+641.29022 1260.6
+648.26715 3758.1
+649.26746 1092.4
+655.84082 886.1
+658.24927 2190.6
+664.33673 957.1
+664.84106 770.2
+665.34088 825.1
+673.34839 15053.0
+673.84937 12268.3
+674.35193 4235.5
+674.85309 1804.8
+676.26044 5994.2
+676.62836 875.2
+677.26440 2802.7
+677.37451 2995.5
+678.33679 1055.8
+681.42590 660.6
+683.35327 2280.5
+695.38263 23037.1
+696.38641 9492.4
+697.38666 1541.1
+700.38214 2225.6
+723.56720 537.3
+731.10956 700.6
+732.39673 702.8
+738.34741 822.5
+744.41211 1369.2
+746.41852 1497.7
+748.40680 1372.4
+749.41046 681.8
+756.41486 4799.6
+757.41650 1411.8
+770.38934 1679.8
+774.42578 6620.7
+775.42413 2610.6
+776.40942 842.7
+792.43549 136186.9
+792.51300 937.2
+793.43829 60586.3
+793.60071 1099.5
+794.44128 15317.5
+795.44635 2659.9
+795.57623 914.4
+798.37708 987.6
+815.40863 2651.1
+816.41119 925.9
+867.40942 1497.3
+872.12891 606.1
+885.41077 3169.2
+886.41711 1873.4
+893.48761 1283.5
+902.44006 3269.4
+903.43610 1257.8
+920.53076 5250.6
+921.53363 2164.0
+922.53772 863.1
+954.44055 698.8
+972.44971 1463.6
+973.43829 717.5
+1056.55029 1278.4
+1057.22327 925.8
+1057.56006 989.6
+1159.89856 643.4
+1188.22583 767.0
+1198.16516 3354.1
+1236.92847 768.4
+1269.29871 608.2
+1575.96021 622.4
+S	1427	1427	533.6098246
+Z	3	1597.806
+136.07518 2059.8
+138.20088 569.5
+141.80417 518.5
+146.18394 535.5
+148.97432 536.3
+153.31024 593.4
+156.15187 590.8
+160.07550 1790.0
+165.78197 796.7
+173.30768 626.8
+174.13594 544.9
+175.11885 3278.0
+178.08617 17041.4
+179.08954 1602.6
+182.78893 610.7
+188.07051 1660.1
+188.24202 747.1
+188.25456 606.2
+188.26993 1373.1
+188.28096 1398.7
+188.30257 1232.4
+188.30792 1538.1
+188.32425 582.4
+198.89249 927.5
+199.25708 1147.7
+199.26547 931.4
+199.27719 2344.5
+199.29590 1285.2
+199.32965 947.9
+199.35527 695.0
+199.37433 1016.0
+205.09775 836.8
+216.06610 1626.1
+217.13362 3041.9
+223.10770 32497.9
+224.11090 4652.1
+231.15007 2965.1
+233.09177 2613.9
+233.50221 586.9
+245.12914 1007.4
+246.98711 548.8
+248.13741 7675.6
+248.63846 1373.1
+249.46391 605.4
+251.10251 25045.4
+252.10579 2546.8
+255.29933 549.7
+259.14398 722.3
+265.65701 962.5
+267.53625 555.4
+271.64951 539.5
+274.66116 2153.9
+276.17075 11239.0
+277.17438 2224.3
+279.09805 2104.6
+283.14380 5066.1
+291.63193 587.2
+299.13898 910.6
+302.95700 640.6
+303.21350 1162.4
+308.91116 680.3
+311.13773 878.0
+321.10648 1024.0
+330.10959 922.6
+331.09277 1914.5
+332.09467 776.2
+348.11899 18594.1
+349.12283 2516.5
+353.14853 1103.5
+355.21381 1087.9
+360.23532 10423.0
+361.23935 1909.7
+366.12949 24220.5
+367.13287 3391.6
+369.14496 641.7
+373.22433 2265.4
+378.71149 1354.7
+381.14429 2399.2
+387.71646 4893.7
+388.21988 1199.4
+391.74048 584.2
+396.72141 31993.6
+397.22296 15352.0
+397.72369 2825.4
+410.89200 4716.7
+411.22577 2526.2
+412.02295 560.6
+424.39719 644.4
+426.16592 4965.1
+427.17264 961.7
+427.32166 589.1
+437.22678 959.5
+437.71799 602.1
+437.89951 2383.6
+439.23077 1585.7
+442.24515 695.7
+442.76108 1005.8
+443.23190 2673.9
+443.56241 964.2
+445.90118 1624.8
+446.23459 864.2
+449.23444 23702.4
+449.56854 16427.2
+449.90286 4623.6
+450.23834 2361.0
+451.76395 3865.9
+452.26797 1342.4
+452.56488 688.2
+452.75809 1156.9
+460.25574 2255.3
+460.76883 39171.3
+461.26352 9694.1
+461.29153 7734.8
+461.77200 3431.1
+462.28989 2496.2
+466.24020 1416.6
+466.57108 877.8
+466.90417 662.1
+467.19324 1647.0
+468.17706 977.0
+472.24210 3713.0
+472.57629 3325.1
+472.91138 1021.6
+478.24460 16411.8
+478.57919 12674.0
+478.91302 5492.0
+479.24890 1773.1
+481.57312 5679.7
+481.90619 1582.3
+482.24048 1858.5
+483.18842 1482.0
+484.17105 2557.6
+485.20126 3424.0
+486.20816 927.3
+492.28983 811.4
+493.55496 705.6
+494.15598 1045.9
+495.18591 2094.8
+495.26682 5523.3
+496.26819 1619.4
+500.24963 570.5
+501.19733 17394.9
+501.73935 896.8
+502.20041 4381.9
+503.20325 845.4
+505.91754 756.7
+506.25708 5646.0
+506.59149 6213.4
+506.92490 2368.0
+508.91412 2074.6
+509.24722 2044.9
+509.58350 680.9
+509.91547 913.1
+510.58746 746.3
+510.74390 2547.2
+510.91663 3497.4
+511.11395 706.6
+511.18222 1347.0
+511.24792 4321.4
+511.58679 4497.6
+511.92249 2519.1
+512.29327 5004.2
+513.19690 4357.6
+513.27301 1078.1
+514.58820 2454.1
+514.91675 10065.2
+515.25122 6296.2
+515.58478 3222.9
+515.73462 899.9
+516.91992 1437.7
+532.51050 1290.8
+532.54468 1297.5
+532.60040 812.7
+534.80524 892.0
+535.30743 872.9
+548.31439 18143.5
+549.15808 884.0
+549.31677 4992.8
+550.31689 1364.5
+554.25897 1338.1
+561.29742 665.3
+582.29102 1703.8
+597.82538 1968.1
+598.32385 1940.6
+606.83118 3265.0
+607.32855 3012.4
+607.83392 910.2
+615.83429 120372.9
+616.33533 81026.1
+616.83734 33711.9
+617.33875 9326.3
+617.66284 678.1
+617.84015 1412.8
+617.95313 809.6
+618.32397 2644.2
+619.32910 1101.0
+631.23529 1168.1
+632.23676 735.2
+648.26636 2611.4
+649.26642 1273.0
+655.33728 9046.5
+655.83777 7543.3
+656.34137 2152.1
+656.84509 1211.0
+658.24994 3850.9
+659.25696 967.6
+664.34259 17487.3
+664.83972 17585.7
+665.33807 11770.9
+665.84338 3784.1
+666.29736 619.3
+666.34186 724.9
+671.36945 670.2
+671.51257 1169.2
+671.83588 884.0
+672.33820 895.9
+672.43890 1465.3
+672.93433 1119.6
+673.34796 352397.0
+673.41724 1777.6
+673.84900 267124.2
+673.93103 875.4
+674.25494 1582.5
+674.35010 108201.0
+674.75720 1550.1
+674.85120 33262.6
+675.19165 1751.4
+675.35168 5321.5
+675.84625 814.3
+676.25977 6676.8
+676.57214 913.0
+677.26233 2247.8
+677.36719 711.9
+681.84747 733.2
+683.35834 991.1
+690.34308 1086.3
+690.83466 691.4
+692.85425 781.8
+695.38220 10662.8
+695.87885 1021.4
+696.38672 4078.0
+697.39148 1305.7
+698.85254 5561.9
+699.34637 19303.7
+699.84692 12941.7
+700.34888 5087.4
+700.85144 1372.5
+703.83746 1317.2
+704.34052 868.8
+704.84442 811.7
+706.85498 1371.1
+707.34918 1388.2
+707.85815 13134.5
+708.35931 12766.6
+708.86011 5307.0
+709.35614 2057.1
+712.84998 10740.0
+713.35211 7280.4
+713.85303 4097.6
+714.35760 1033.4
+714.84308 763.1
+716.35883 850.9
+716.86359 213806.9
+716.93793 1152.8
+717.36432 169917.3
+717.86572 79638.5
+718.36725 23522.8
+718.86597 4323.5
+719.90228 740.7
+720.34149 950.0
+721.85522 31942.1
+722.35730 22165.6
+722.85822 11684.5
+723.36072 3607.4
+725.79761 702.9
+738.34045 842.0
+746.42157 1311.2
+756.41376 2445.8
+757.42096 1154.9
+770.38599 913.2
+774.42578 4630.6
+775.43207 1250.0
+786.34064 742.8
+792.43500 147695.0
+792.51538 916.7
+793.43738 68757.9
+793.61224 728.6
+794.44006 16611.0
+795.44061 2713.7
+795.56519 772.0
+804.35876 1471.7
+815.40607 868.8
+816.41010 1073.5
+859.64331 555.8
+885.41089 1635.2
+893.47949 993.9
+920.53040 6958.9
+921.53168 3419.6
+922.53430 1458.1
+1021.17285 654.9
+1031.43591 745.9
+1048.47632 2961.2
+1049.47327 1009.0
+1050.48730 615.0
+1053.50452 623.3
+1056.55151 1923.1
+1057.13623 1061.6
+1057.55737 1021.1
+1058.55322 700.6
+1065.50427 2236.1
+1066.50098 1951.8
+1067.58789 1331.8
+1068.59155 994.2
+1072.72986 557.2
+1136.50879 763.5
+1171.57556 5697.2
+1172.58020 3401.9
+1173.59009 1492.8
+1184.39197 653.4
+1198.14392 2740.2
+1198.24133 1361.9
+1258.60364 2295.8
+1259.61377 1961.4
+1356.14856 694.8
+1420.04614 721.9
+1525.42590 951.0
+1583.05664 713.3
+1646.87952 588.8
+1669.70361 700.9
+1832.60840 588.4
+1871.36255 600.8
+1879.34644 21061.9
+1907.05164 8069.2
+1918.66125 935.2
+1983.77014 550.7
+1987.33057 626.1
+S	1429	1429	400.4540746
+Z	4	1597.785
+104.57747 608.8
+114.13627 588.3
+120.66599 535.4
+121.79285 682.5
+121.79978 2176.3
+127.95900 721.4
+131.95428 650.7
+133.05176 555.9
+133.14287 872.7
+136.07538 25607.1
+141.67409 570.0
+144.56625 572.6
+147.04355 2066.4
+151.10713 712.1
+157.06053 4416.3
+157.60892 709.5
+160.07541 1282.3
+163.12320 562.6
+163.28018 683.2
+169.44737 692.6
+169.49782 603.9
+175.07101 2722.2
+175.11874 4351.3
+178.08609 7816.5
+179.16460 600.8
+186.14532 580.7
+188.07080 1085.7
+190.45506 598.1
+193.73567 542.6
+198.89781 597.9
+199.22469 891.5
+199.23831 948.1
+199.24757 1564.4
+199.25714 2836.6
+199.29996 585.8
+199.32040 740.5
+199.35349 971.1
+203.06604 2694.9
+206.08138 1151.1
+217.13350 11239.0
+218.13615 993.8
+223.10776 12504.9
+223.31886 591.3
+224.11026 1104.6
+224.90356 625.9
+226.12364 862.5
+231.14357 1086.2
+231.15158 1338.8
+233.09215 1739.6
+233.35385 696.3
+234.07664 1118.3
+234.36743 583.1
+245.12814 3094.2
+247.81952 662.0
+248.13731 28529.0
+248.63893 5531.5
+249.63254 548.5
+249.64098 534.2
+251.10258 18734.6
+252.10641 2044.1
+252.80946 1046.1
+256.65115 840.3
+257.14261 1715.7
+262.15536 932.7
+264.81689 17978.0
+265.15118 5974.9
+265.48547 2810.6
+265.65591 4963.4
+267.16003 572.0
+274.66098 3417.9
+275.16125 682.9
+276.17087 6218.9
+279.09735 989.9
+283.14417 5354.3
+284.14944 920.0
+284.17230 800.1
+285.29395 561.6
+288.35815 643.6
+293.11194 1103.7
+301.83890 1633.6
+302.17502 785.8
+303.21405 1092.2
+307.51474 3305.4
+321.10803 5718.8
+325.16449 536.1
+328.18488 750.7
+328.80939 694.1
+330.10751 715.6
+331.09323 752.8
+331.19131 578.9
+332.16046 1914.7
+339.19064 720.5
+344.52805 875.1
+348.11917 7474.1
+348.19550 5686.8
+348.69586 2068.3
+349.10397 811.4
+349.12183 1126.6
+349.19666 622.2
+350.29471 810.3
+353.15503 594.6
+354.43317 1642.2
+354.68466 870.6
+356.53796 12194.4
+356.87250 8880.2
+357.20700 2532.8
+360.23529 15180.4
+360.43393 1225.8
+361.23874 2135.1
+363.19394 536.1
+364.93631 1312.7
+365.18555 2340.9
+365.43579 1029.8
+366.12979 9234.5
+367.13348 1626.1
+368.13361 604.0
+368.51239 797.1
+369.70395 656.0
+373.22321 804.1
+374.93607 858.5
+375.19110 1015.5
+376.11542 643.3
+376.44110 2193.0
+376.69232 2325.5
+376.94244 1794.3
+377.19171 1789.5
+377.44122 2791.1
+377.69064 2799.3
+377.94101 1499.5
+378.71066 5584.9
+379.21539 1878.9
+379.44083 18528.0
+379.69156 17224.4
+379.94241 7436.9
+380.19226 4335.0
+380.44144 750.6
+381.93604 2056.5
+382.18787 1872.2
+383.94415 5640.4
+384.19424 4174.7
+384.44492 672.3
+396.71985 712.5
+399.70068 2493.3
+399.95395 2237.3
+400.20444 1855.6
+400.45389 1472.2
+400.70474 1037.1
+404.88977 983.1
+405.22342 1022.0
+410.89236 57771.3
+411.22656 48827.8
+411.56091 20167.5
+411.89499 4916.8
+412.22754 1405.2
+415.19843 721.0
+418.89325 968.1
+426.16391 793.2
+427.55600 627.0
+429.21045 1134.8
+429.71310 800.5
+433.22571 676.0
+433.56393 850.7
+433.89902 1193.0
+437.22757 8753.0
+437.56213 5527.0
+437.89606 2824.6
+438.23291 911.9
+443.23123 10847.3
+443.56372 10698.3
+443.89740 5306.0
+444.23242 2081.3
+445.90039 2665.2
+446.23376 2611.3
+446.56894 767.3
+447.89978 661.2
+449.23480 117980.3
+449.56882 91009.1
+449.90292 40632.6
+450.23807 16304.5
+450.57315 7383.5
+450.90732 1610.4
+451.24518 1399.9
+451.76349 3175.5
+451.90955 632.9
+457.23499 3372.5
+457.56863 2359.8
+457.90552 841.8
+459.57303 1481.2
+459.90570 1294.2
+460.24905 2424.2
+460.56677 1559.0
+460.76898 26781.4
+460.90506 954.4
+461.26202 6944.9
+461.29037 7467.5
+461.77127 4481.7
+462.23822 1966.2
+462.28891 1745.8
+462.57407 1227.1
+462.90662 963.4
+463.24023 2803.2
+463.57059 4665.4
+463.90091 1339.8
+465.89850 622.6
+466.23807 23838.1
+466.57205 16385.9
+466.90619 10406.7
+467.19144 823.9
+467.24164 2100.5
+467.57468 930.1
+467.90637 906.0
+468.24091 1497.0
+469.56686 3019.4
+469.90088 2968.7
+470.23718 845.8
+471.57117 776.5
+471.90231 1264.7
+472.24142 39144.3
+472.57578 36355.9
+472.91019 16533.6
+473.24374 4800.8
+473.57813 778.3
+475.57050 4463.9
+475.90427 4596.3
+476.23944 1987.4
+476.57126 609.9
+476.68002 779.2
+476.78946 947.0
+477.13956 1656.3
+477.47305 1810.0
+477.70285 1614.7
+478.04041 1324.6
+478.18112 747.9
+478.19278 1390.3
+478.24487 402070.1
+478.29791 1071.9
+478.31769 778.4
+478.57892 342330.6
+478.62427 1441.1
+478.78809 1579.0
+478.91293 149091.5
+478.95868 919.0
+479.12262 1595.2
+479.15317 1204.5
+479.24719 48064.8
+479.35504 2554.9
+479.45197 838.2
+479.49207 670.0
+479.58163 11894.2
+479.68872 2457.1
+479.91638 2360.2
+480.02646 996.8
+480.42715 628.5
+481.57263 40763.1
+481.90686 31076.0
+482.24155 13907.7
+482.57574 5294.8
+482.90799 2168.4
+483.24243 1003.4
+484.17075 11906.7
+485.17706 3177.0
+485.90906 1020.0
+488.58112 2579.2
+488.91568 1662.3
+489.24631 1108.2
+491.57660 1064.9
+491.91199 1845.9
+492.29947 956.9
+494.15833 746.6
+495.18802 1724.6
+495.26648 5932.8
+496.26859 1291.7
+497.91455 1323.0
+498.24753 1825.1
+501.19702 2860.7
+502.22772 1283.2
+503.24753 742.0
+510.74362 2117.5
+511.24667 969.5
+511.91431 775.9
+512.16370 1388.3
+512.29297 7812.3
+513.19653 4285.0
+513.29816 1729.6
+514.19751 690.2
+516.29059 2061.3
+516.79382 963.4
+520.92493 933.8
+525.29828 2378.2
+525.79968 1676.5
+526.92371 3796.7
+527.25891 4064.6
+527.59314 1467.9
+528.75891 757.2
+529.19183 2565.3
+530.19238 689.6
+530.30432 3340.6
+530.77448 584.5
+532.57471 2015.3
+532.92944 1076.1
+533.25555 3235.7
+533.75714 1562.2
+534.30243 63851.7
+534.80402 43054.1
+535.30548 14472.7
+535.80634 3680.4
+537.31702 1764.8
+548.31433 44676.8
+549.31732 11921.5
+550.31757 1443.1
+554.25970 669.7
+582.29279 1325.7
+585.23572 936.0
+597.27362 615.7
+597.82391 5601.8
+598.32562 2690.7
+598.82581 1004.0
+600.31470 966.1
+602.15765 603.9
+603.24426 2778.1
+604.24384 1199.3
+606.82935 3269.1
+607.32794 3095.5
+607.83008 1444.8
+608.33295 1451.6
+608.67627 1030.5
+613.22162 987.2
+615.83417 94282.9
+616.33521 69639.8
+616.62250 648.4
+616.83691 29968.7
+617.33844 7986.6
+617.83917 1282.7
+618.32452 2286.9
+630.41852 817.5
+631.23767 4233.4
+632.24127 2067.9
+638.55634 623.1
+641.21997 781.5
+648.26697 3000.0
+649.26715 1036.4
+658.24835 2066.2
+658.67633 665.2
+664.83545 860.8
+673.34778 13309.6
+673.84912 9403.7
+674.35040 4268.9
+674.85315 1016.5
+676.18445 688.0
+676.25946 5194.7
+676.61200 1224.8
+677.26215 1618.2
+677.36871 1149.3
+678.34314 881.8
+684.36548 766.8
+695.38257 12064.4
+696.38611 3605.5
+697.38916 1397.1
+700.38110 1666.3
+701.38715 786.6
+705.23297 618.2
+731.12781 885.6
+739.35199 668.2
+755.02191 578.9
+756.41296 1199.5
+774.42920 2151.7
+792.43555 44730.8
+793.43793 19457.0
+794.44318 4629.2
+795.58923 1020.2
+798.39050 838.3
+815.40936 2777.4
+816.40741 1145.2
+885.41406 1786.8
+902.44110 3230.0
+903.44250 1620.6
+904.44611 883.5
+920.53326 1032.4
+972.45215 810.8
+1021.22650 706.5
+1057.21289 858.4
+1188.27893 963.3
+1198.26855 3194.8
+1208.10535 622.3
+1229.55066 571.4
+1467.29102 610.0
+1470.67456 636.0
+1525.44446 877.3
+S	1430	1430	1879.76899127
+Z	3	5636.032
+Z	2	3757.69
+532.54950 2077.7
+549.14496 797.6
+627.15076 699.2
+630.38910 714.0
+632.33264 608.6
+676.63751 758.1
+775.62018 637.2
+820.82678 785.0
+1076.49573 560.7
+1135.09558 650.9
+1198.23132 3115.3
+1340.24658 633.1
+1489.26587 796.4
+1499.11938 808.7
+1578.95203 647.9
+1609.58545 644.5
+1720.39526 614.4
+1873.88342 581.0
+1874.41125 669.5
+1878.30969 999.7
+1878.68384 1341.7
+1878.94824 1164.6
+1879.24377 1644.5
+1879.52759 19611.4
+1880.12048 1771.7
+1880.38354 899.2
+1880.83655 745.8
+1907.06836 7259.7
+1930.54553 986.0
+1981.22913 623.5
+S	1431	1431	1907.46399127
+Z	3	5719.117
+Z	2	3813.08
+521.43060 643.5
+532.52637 2061.2
+587.17578 663.6
+676.65674 797.3
+738.71021 584.7
+1041.34241 681.6
+1198.18018 3448.1
+1488.80322 580.0
+1491.99988 870.1
+1719.36450 841.0
+1873.53271 717.1
+1878.19897 714.9
+1878.55957 982.9
+1879.15283 1256.4
+1879.58252 19463.5
+1880.03210 1101.9
+1880.64319 755.2
+1880.96277 1430.1
+1907.04785 7386.5
+1909.60742 588.6
+S	1433	1433	1879.9618246
+Z	2	3758.076
+Z	3	5636.61
+532.54510 1628.2
+606.50378 590.9
+660.00024 605.8
+675.25220 561.7
+676.64526 1176.9
+775.27881 588.8
+785.95416 697.4
+795.58392 792.1
+817.13446 605.1
+916.46997 682.9
+976.83966 721.1
+1010.43079 714.0
+1025.33167 767.0
+1040.29846 591.0
+1057.27588 870.2
+1107.93738 628.3
+1188.04797 752.5
+1198.22144 2954.0
+1670.16943 724.0
+1717.76233 1036.7
+1717.97974 815.6
+1721.43335 672.6
+1872.00012 925.0
+1877.32300 1073.6
+1879.05701 1245.2
+1879.56152 18382.8
+1880.15552 724.4
+1880.32458 749.4
+1881.68994 931.6
+1882.81201 692.3
+1906.80322 2593.9
+1907.03943 6050.9
+1918.62219 761.3
+1930.55566 1089.3
+S	1435	1435	1198.5148246
+Z	2	2395.182
+Z	3	3592.269
+355.14874 606.1
+360.01654 616.0
+370.02115 641.5
+375.20618 627.8
+411.51047 645.9
+412.32571 638.6
+472.08838 636.9
+477.75760 566.3
+532.52478 677.5
+532.56378 1564.3
+572.82855 646.4
+588.47125 599.8
+623.73553 592.0
+664.89825 654.6
+676.66541 874.2
+706.06317 587.7
+731.07086 888.3
+795.55304 1056.1
+858.12646 739.2
+867.25024 577.6
+902.95789 701.3
+1014.10962 606.0
+1072.29431 651.2
+1102.42249 721.6
+1198.26123 2721.9
+1205.29236 620.7
+1245.56812 663.8
+1386.75415 718.0
+1588.24927 635.4
+1598.87842 632.9
+1716.35059 876.3
+1767.39233 639.3
+1877.96790 700.9
+1878.61780 767.3
+1878.79004 768.7
+1879.60449 17645.7
+1880.04077 2491.7
+1880.44775 1071.1
+1880.65833 1097.8
+1906.26563 814.9
+1906.78271 6665.6
+1907.05579 1145.7
+1907.24365 929.9
+1930.47168 788.3
+S	1437	1437	400.4585746
+Z	4	1597.803
+100.40854 30421.6
+101.06680 31819.3
+104.35823 27986.5
+104.48396 34005.4
+111.58546 34953.2
+112.66910 27414.7
+114.85311 28360.7
+121.79708 112965.7
+144.40125 29784.1
+144.86617 31167.5
+153.42665 30148.9
+158.71701 29090.3
+162.78917 29081.2
+165.77917 33418.5
+167.96835 32169.3
+169.94449 30071.4
+171.63510 42661.4
+172.94041 31858.4
+172.97859 34098.7
+175.21893 27647.5
+176.45581 29828.2
+186.18384 33882.2
+186.97243 32731.0
+187.56000 33917.0
+197.54128 30870.7
+198.89023 53699.1
+199.10249 31983.2
+199.17485 67184.2
+199.25476 44324.3
+199.27220 192160.8
+199.28955 42862.8
+199.30762 47031.3
+199.37086 66434.1
+205.07846 29749.4
+225.35297 31629.4
+232.90298 27535.3
+233.56837 36819.7
+250.72685 31129.1
+260.84399 27795.0
+266.77722 29423.5
+283.70953 32676.2
+299.25775 33707.5
+310.18326 34976.0
+334.20999 30300.7
+350.27866 47443.8
+355.23386 31295.2
+358.75940 34443.2
+375.70822 34211.8
+385.24374 31046.2
+398.93668 29189.2
+428.09351 38415.4
+454.92999 30674.2
+504.87891 33021.7
+532.59326 100903.0
+548.59467 32053.1
+549.12500 44833.0
+593.10870 38438.4
+593.83661 31722.8
+630.37134 48379.0
+676.63257 47537.6
+699.86725 35835.2
+708.67004 34492.6
+731.07971 31968.9
+787.73120 35363.6
+791.54077 29650.0
+793.75970 33299.9
+795.54529 70614.4
+860.36115 28927.1
+877.64221 32352.8
+1019.76874 37645.4
+1020.80652 33846.8
+1067.93860 31031.2
+1197.12000 30730.5
+1198.33252 164008.0
+1198.52441 40758.6
+1289.61475 37192.6
+1305.21399 31345.5
+1525.32629 54519.9
+S	1438	1438	449.2624071
+Z	4	1793.01833
+115.57702 625.0
+120.53310 571.3
+121.79758 2713.7
+121.93449 533.2
+125.16313 746.2
+128.58392 702.7
+133.22539 671.6
+137.00218 536.1
+137.68918 530.4
+151.49484 740.5
+153.04631 490.5
+157.61180 569.0
+165.78101 771.1
+182.77396 652.9
+182.78818 676.3
+187.04547 580.8
+187.65828 634.9
+198.88962 753.8
+199.11359 610.1
+199.16122 1122.0
+199.24257 821.5
+199.25957 3262.7
+199.27858 614.4
+199.35724 965.9
+203.93733 580.0
+221.12775 21344.8
+222.13103 2365.0
+226.35603 583.7
+249.12280 3712.5
+284.82214 549.6
+285.15848 589.1
+330.81601 831.4
+335.72342 839.5
+344.23615 635.6
+362.20651 1773.8
+364.18918 1724.5
+364.68921 1425.6
+369.20807 520.1
+378.22333 1193.9
+383.06216 459.8
+383.07620 465.6
+397.07080 687.9
+406.24295 1066.8
+410.89130 738.6
+411.69412 548.5
+416.56638 3406.4
+416.89969 2845.9
+417.23215 1066.3
+423.99438 1149.1
+426.99503 1162.9
+427.56415 696.4
+431.24664 5412.2
+431.49768 2081.5
+431.74829 1603.8
+431.99875 1043.4
+435.03226 661.5
+472.93710 1545.9
+473.27216 705.8
+473.60577 809.6
+477.93872 12048.9
+478.27325 6975.3
+478.60840 1927.8
+478.93896 982.5
+482.93866 642.8
+491.95413 19000.2
+492.28845 16637.4
+492.62265 6795.7
+492.95883 1460.2
+508.31085 1029.8
+509.22937 581.8
+509.62881 1573.7
+509.96326 954.0
+510.29266 910.5
+515.63312 77356.0
+515.96735 57894.8
+516.30151 24129.1
+516.63538 7152.6
+516.97028 824.9
+532.54254 1570.8
+540.97693 1584.7
+541.31226 625.8
+555.64246 807.9
+558.33228 1021.3
+564.65533 3255.9
+564.99042 2839.1
+565.31830 1191.0
+596.93732 618.9
+615.33063 629.0
+624.34467 6615.6
+624.84558 5440.0
+625.34485 2235.3
+630.43433 893.4
+659.86267 10264.1
+660.36493 6732.5
+660.86566 3050.8
+676.62286 1305.9
+680.88672 838.0
+708.89789 692.3
+795.55347 1084.2
+876.70496 596.6
+882.98151 596.2
+905.53766 607.4
+975.34619 560.0
+1117.19482 662.6
+1198.20679 3457.6
+1285.70520 581.9
+1376.89648 728.6
+1498.23108 595.2
+1525.45313 744.7
+S	1439	1439	498.300241267
+Z	2	994.753
+Z	3	1491.625
+126.24709 597.9
+133.13568 639.3
+134.20825 491.6
+135.33015 593.8
+139.97400 603.2
+142.05107 612.6
+142.23903 697.5
+144.07790 515.4
+149.33122 535.2
+149.98909 546.3
+156.11238 1793.7
+156.12448 539.0
+156.20659 660.6
+157.10791 1903.3
+157.59131 841.4
+158.09215 6970.8
+160.36475 637.7
+165.78049 836.8
+167.08162 850.5
+170.69165 544.4
+171.63751 561.7
+172.68651 519.7
+175.11865 31274.6
+176.12175 2121.1
+185.09259 718.1
+187.14384 3077.6
+188.25577 1001.9
+188.26599 860.4
+188.27646 1128.1
+188.28638 1325.3
+188.29318 1363.2
+188.30740 1238.7
+195.64801 543.2
+198.98764 650.2
+199.17232 974.5
+199.23369 761.3
+199.25975 538.8
+199.26996 3054.5
+199.27957 1365.4
+199.28966 857.8
+199.31900 461.1
+199.36784 718.0
+208.08661 641.6
+212.46240 596.4
+216.14931 1314.0
+217.13333 7780.8
+218.13556 1194.8
+226.81676 519.4
+228.16980 1076.1
+229.25768 596.7
+241.12955 607.7
+242.12778 1156.3
+244.14404 6420.5
+245.12828 2222.9
+245.14795 1323.3
+249.99855 574.1
+253.16589 1360.0
+253.85417 560.0
+254.15071 704.1
+259.15497 31278.9
+260.15869 5212.1
+270.12393 616.0
+271.17615 9563.5
+272.17944 936.7
+276.18155 2179.5
+287.14990 10135.2
+288.15320 1875.8
+288.20248 7222.8
+289.20673 969.1
+298.17648 846.7
+304.17648 3924.3
+305.16162 908.0
+310.19067 619.1
+314.14825 973.8
+321.68933 1898.1
+322.19119 923.4
+327.17328 2101.6
+327.67490 1066.2
+328.19852 1061.4
+330.35684 515.7
+330.69388 869.2
+332.16010 2748.9
+335.68680 5193.1
+336.19165 1287.0
+344.69202 4976.0
+345.19308 1634.1
+354.21289 3023.8
+356.21844 763.9
+361.19833 807.1
+361.78146 595.5
+363.21503 1668.3
+365.22235 1149.9
+369.71686 1351.9
+370.22189 633.5
+371.24039 1877.0
+372.22418 4968.3
+373.19809 1908.9
+373.23117 825.0
+374.18198 3302.1
+378.23105 6696.5
+378.73206 3196.7
+385.20746 790.2
+389.24997 5134.9
+390.25446 1355.0
+391.20798 7532.0
+392.18753 533.2
+392.22278 1620.9
+405.05740 660.3
+424.23563 3133.6
+424.73721 1130.7
+427.22800 846.2
+428.26218 2087.3
+429.25818 675.9
+431.23090 614.1
+435.76547 1426.2
+437.25391 943.3
+438.23495 747.0
+444.28101 2260.3
+444.76239 662.7
+445.75726 826.1
+446.26968 2808.1
+446.29187 775.7
+448.75845 1459.0
+453.26828 1398.6
+455.25894 1771.0
+457.25323 3478.1
+457.76093 5927.1
+458.26538 4387.3
+458.76535 4877.4
+459.27274 5332.2
+460.27695 747.6
+463.25848 909.2
+465.78018 958.4
+466.27612 19797.5
+466.76724 32687.1
+467.26917 17073.6
+467.76984 12220.7
+468.27164 5221.1
+468.77350 1187.9
+469.26074 669.7
+470.77097 2886.6
+471.25540 879.5
+471.27682 740.2
+471.75885 966.7
+472.28784 2161.3
+473.26883 3620.7
+473.77579 5816.2
+474.27319 3173.7
+474.79672 1404.8
+475.28134 76298.6
+475.78278 39435.0
+476.27707 8248.0
+476.30576 5900.8
+476.78543 2314.8
+477.30084 2449.4
+478.29987 629.2
+479.28299 5120.8
+479.77542 24685.5
+480.27753 13967.9
+480.77954 4425.8
+481.28415 995.2
+482.28940 6480.7
+482.79172 2650.8
+497.29507 1328.3
+497.79633 2024.0
+498.29694 8863.2
+498.47549 666.5
+498.79837 21482.7
+499.29965 7956.2
+499.70322 591.7
+499.80356 1093.4
+504.29114 6195.8
+505.29611 1886.7
+512.06317 542.6
+519.55249 702.3
+522.30127 1422.4
+529.35016 679.6
+532.37280 789.3
+532.41193 826.2
+532.52441 1133.8
+532.54950 700.4
+539.94080 535.3
+544.28918 3632.2
+545.29022 883.2
+546.29364 954.6
+559.35675 1398.0
+560.31415 1752.7
+561.31476 9210.4
+562.31683 2434.5
+563.32001 976.4
+570.30194 6752.9
+571.30762 1942.2
+577.34467 4367.2
+578.34729 1552.2
+585.30292 796.8
+585.36932 1263.7
+587.32861 15825.8
+588.30200 3528.0
+588.34296 3654.2
+589.31067 1416.1
+601.30676 2530.3
+603.38080 19009.8
+604.38470 5168.8
+605.33887 21724.3
+605.38995 968.6
+606.34418 7239.9
+612.34045 623.6
+617.33942 1584.2
+618.33734 4547.7
+619.33911 1405.9
+622.36401 1963.6
+623.34680 2460.4
+624.94482 663.4
+627.32330 5721.4
+628.32581 2263.6
+628.37378 1268.9
+629.33087 812.8
+630.37225 716.7
+634.36584 4008.2
+635.36877 1223.5
+644.35004 6778.9
+645.33136 11415.8
+646.33356 4437.5
+646.38751 6142.8
+647.33667 1839.4
+647.39221 2285.9
+648.38861 1037.5
+653.34058 2269.7
+654.34485 661.2
+661.36493 5215.7
+662.36084 29490.4
+663.36426 9941.4
+664.36951 2429.8
+670.36591 2926.9
+671.34869 13796.6
+672.40125 8819.6
+673.36493 1678.1
+673.41388 1979.5
+676.60345 946.4
+678.39209 13602.9
+679.39575 4530.2
+680.40076 1050.2
+688.37598 35987.2
+689.35498 20216.8
+690.41217 96315.8
+691.41534 35870.4
+692.41821 7755.5
+693.41919 1245.9
+700.39233 1094.8
+701.39691 835.1
+705.40729 1004.9
+706.38605 72979.8
+707.39008 31322.5
+708.39160 6115.2
+709.39075 952.0
+712.40369 826.4
+724.39856 2537.2
+725.39886 880.6
+729.43951 1222.7
+730.42297 6827.7
+731.42017 3889.9
+732.42657 1434.8
+740.40094 1434.6
+741.40472 684.7
+742.41058 810.3
+747.44928 17849.7
+748.45227 7550.9
+749.45575 1833.0
+750.46667 868.7
+756.43500 1499.7
+757.43591 3523.8
+758.41626 9423.6
+759.41797 3475.0
+760.41980 1715.5
+773.46429 4116.8
+774.44867 17592.5
+775.44580 33328.0
+776.44934 12689.2
+777.45178 3026.3
+783.44843 1409.5
+784.43365 4516.4
+785.43878 2515.2
+789.45886 933.4
+791.47559 77020.6
+792.47858 36047.3
+793.43658 4498.5
+793.49744 4872.2
+794.45117 2788.8
+795.46466 1218.4
+795.55762 827.4
+801.45941 11953.9
+802.44281 24837.4
+803.44574 10147.3
+804.44678 2851.3
+807.46539 1040.1
+808.46912 751.3
+819.46997 92727.9
+820.47369 40368.5
+820.70490 616.4
+821.47461 10994.2
+822.48004 1745.4
+829.45911 690.8
+836.49707 5603.4
+837.48041 116996.9
+838.48364 54100.3
+839.48669 14257.4
+840.48859 2736.9
+841.51190 749.7
+847.46515 10097.9
+848.46729 4108.2
+849.46936 1009.8
+858.00696 703.3
+858.85535 552.6
+863.59735 564.3
+872.49500 1001.3
+873.39502 594.4
+884.81256 545.0
+890.50592 4937.0
+891.50854 2356.0
+892.50989 912.9
+899.47760 652.8
+916.52283 4467.6
+917.51257 4432.5
+918.51050 1464.0
+934.53345 50119.5
+935.53571 26104.6
+936.54004 7710.0
+937.54340 1547.7
+1019.71967 860.9
+1197.87317 1643.0
+1198.12891 1725.7
+1198.25354 1468.6
+1398.86621 559.5
+1715.43677 588.3
+1814.48706 806.3
+1845.71814 585.3
+1878.97656 1760.1
+1879.45203 19930.9
+1879.92383 2547.8
+1882.89929 869.6
+1907.04041 7503.8
+1927.21106 614.4
+1930.47363 913.1
+S	1441	1441	1879.91924127
+Z	2	3757.991
+Z	3	5636.482
+519.18262 615.9
+532.52802 1947.0
+546.47229 540.7
+546.50110 535.3
+653.24115 684.0
+676.63257 1176.3
+730.15765 618.7
+739.81744 522.5
+753.59692 674.6
+785.02875 655.9
+785.06781 560.1
+795.55017 842.1
+804.07678 688.0
+812.53229 656.0
+1057.23389 1021.9
+1134.01782 617.4
+1198.18457 3491.7
+1198.96448 713.5
+1339.59717 675.0
+1866.60986 758.7
+1875.01172 964.5
+1879.08350 2003.5
+1879.52490 19728.6
+1879.93799 1767.4
+1884.10376 653.7
+1907.04248 7591.5
+1930.45435 928.9
+1985.28430 735.0
+S	1442	1442	1907.48324127
+Z	2	3813.119
+Z	3	5719.174
+532.49811 1903.2
+549.10657 761.7
+571.53253 751.8
+574.66821 647.0
+609.86407 670.7
+630.34119 688.6
+675.15881 775.0
+676.63995 1184.9
+775.27594 601.6
+783.65863 681.8
+784.90985 617.1
+795.55438 974.9
+818.75885 643.9
+1079.30176 607.2
+1087.74683 574.2
+1142.58521 710.3
+1198.11462 3055.9
+1256.80603 544.9
+1344.66174 646.3
+1525.31335 895.1
+1537.89526 656.7
+1581.32776 637.4
+1624.03821 755.7
+1665.18701 653.0
+1809.96436 588.4
+1879.54248 19986.4
+1879.84631 3487.2
+1907.00977 6656.6
+1907.52661 638.3
+1918.66199 770.0
+1930.37524 828.2
+S	1443	1443	1198.6488246
+Z	3	3592.671
+Z	2	2395.45
+346.04065 574.3
+349.37512 576.3
+350.27914 803.6
+351.57056 626.2
+354.51682 545.5
+523.16388 737.1
+532.49432 2063.7
+567.78149 826.8
+573.60852 759.8
+607.24420 823.9
+660.59247 645.8
+676.62018 913.2
+784.75018 912.1
+795.56122 772.5
+1057.21594 833.8
+1102.72424 598.9
+1110.71838 783.2
+1188.12354 721.8
+1198.10718 3346.8
+1223.35095 642.4
+1715.49414 692.1
+1877.40881 732.5
+1878.80054 931.4
+1879.49121 19415.0
+1880.20898 787.9
+1880.55420 798.0
+1907.05261 7742.1
+S	1445	1445	1879.91824127
+Z	3	5636.479
+Z	2	3757.989
+522.59961 616.4
+532.51080 1732.4
+676.62543 999.0
+731.08923 818.3
+757.61603 692.8
+795.54907 1224.6
+969.02454 699.6
+1181.99609 668.9
+1198.14587 3305.6
+1262.43494 728.7
+1420.77869 787.0
+1449.25684 599.1
+1525.35181 754.0
+1552.38635 802.3
+1713.18115 676.9
+1852.65088 688.8
+1879.13416 2856.9
+1879.49756 19394.9
+1879.84326 3252.4
+1881.12195 932.5
+1907.00269 7094.5
+1907.28333 890.7
+1966.41260 664.3
+S	1446	1446	449.2579521
+Z	4	1793.00051
+118.41395 7201.3
+120.26669 6998.7
+120.65838 8206.8
+121.79365 9988.9
+121.79859 26736.5
+157.59431 8435.4
+198.89302 13933.7
+199.16669 12256.2
+199.18044 23108.7
+199.24936 14930.3
+199.26407 38190.1
+199.27744 10336.5
+199.31087 6414.0
+199.34515 9056.3
+199.36203 8692.1
+199.38647 6921.9
+219.50560 8449.4
+221.12781 140807.8
+222.13213 17785.2
+223.69562 6935.9
+229.47166 7365.1
+240.65245 7388.3
+249.12326 21063.7
+263.48734 7279.3
+263.78082 7637.4
+280.16785 9706.9
+299.13812 93030.8
+300.14072 13638.8
+307.81454 7178.1
+327.13306 29850.8
+378.22363 12256.8
+406.24207 10606.5
+416.56738 18056.1
+416.90402 13110.7
+417.23502 11072.4
+418.23456 65765.4
+418.56940 60901.0
+418.90402 21105.6
+424.23880 35587.6
+424.57269 17848.7
+424.90552 9735.7
+431.24606 17824.4
+431.49905 19530.1
+436.16660 8693.3
+436.24054 15707.0
+469.87747 8820.5
+472.79092 56518.8
+473.29230 27669.7
+473.79205 7621.5
+476.75659 12433.1
+477.93893 73077.3
+478.27325 45665.0
+478.60468 18658.6
+486.28687 9076.5
+491.95389 92323.8
+492.28833 82508.5
+492.62238 36328.3
+499.30426 13644.3
+508.30917 195474.6
+508.81082 92366.4
+509.31128 28547.5
+509.62753 7240.3
+509.96585 8813.5
+513.72974 6956.1
+515.22473 6269.4
+515.63312 458147.3
+515.96741 346514.8
+516.30170 169345.2
+516.63531 39385.0
+516.96802 12994.9
+532.52515 24377.4
+545.31287 8311.2
+549.12506 13069.7
+564.65381 23834.4
+565.32147 12820.4
+579.53290 7605.1
+580.83893 17121.0
+589.84430 20278.7
+590.34161 13889.7
+624.34381 54976.5
+624.84705 35561.6
+625.34485 20030.1
+659.86426 69755.7
+660.36371 52528.2
+660.86584 14494.8
+676.62567 10530.1
+716.41028 7884.7
+736.95313 7082.8
+795.55859 12914.0
+796.47559 7176.3
+869.63080 6810.8
+919.48407 8604.1
+1074.40674 6886.9
+1109.73596 6490.7
+1150.14307 7187.4
+1181.93323 7235.1
+1198.16931 41160.0
+1204.80774 9218.5
+1213.14233 6395.1
+1315.24597 6846.5
+1426.68225 7051.9
+1444.17407 7199.3
+1777.47339 9902.1
+1800.25061 7258.0
+1806.51379 7407.1
+S	1447	1447	1907.45740793
+Z	3	5719.097
+Z	2	3813.067
+532.52118 1277.1
+536.62262 613.7
+537.55579 554.0
+557.51843 644.3
+676.62579 1062.7
+731.10767 725.9
+795.54926 1058.6
+867.27295 759.7
+943.79535 598.5
+1057.23792 864.9
+1066.37219 717.7
+1198.16797 2857.3
+1311.25000 659.9
+1852.50439 594.8
+1878.71094 938.9
+1879.23181 914.1
+1879.49707 19929.0
+1907.02795 7268.9
+1987.69568 649.6
+S	1449	1449	448.342241267
+Z	3	1341.751
+Z	2	894.837
+112.41836 698.8
+113.45021 787.8
+121.79677 2392.2
+141.06424 545.1
+141.08673 625.6
+148.82263 765.9
+152.00809 532.1
+152.70543 603.2
+158.09634 2313.0
+165.77893 643.6
+168.10823 576.5
+173.50731 536.4
+176.10669 2073.5
+176.29784 574.4
+177.10196 2096.3
+198.88681 960.2
+199.15929 836.3
+199.18005 9859.4
+199.23613 543.8
+199.24181 880.6
+199.25706 1939.5
+199.26840 1768.4
+199.27400 1955.2
+199.36433 1029.2
+199.39825 555.4
+200.18327 729.4
+203.11662 962.0
+209.45813 575.1
+221.12827 63718.7
+222.13165 6807.4
+224.92885 558.8
+227.17520 1602.9
+233.16487 2136.7
+233.37915 542.9
+236.15602 764.6
+244.08072 557.8
+249.12320 8370.5
+250.12675 953.1
+251.14897 937.3
+254.11697 738.6
+255.25568 532.6
+258.74475 544.2
+267.14828 973.9
+279.07742 623.2
+298.05502 570.7
+299.13876 49744.0
+300.14252 13120.7
+300.20343 2372.7
+300.70389 1105.1
+301.14630 1058.4
+301.20712 782.9
+301.70682 781.2
+304.86185 613.3
+317.18546 1459.6
+327.13351 11223.3
+328.13693 3242.4
+333.20447 985.9
+333.53946 779.0
+335.72159 2272.6
+354.54431 2316.8
+354.87958 1342.5
+362.20718 3392.7
+364.19308 1292.7
+364.68967 842.9
+365.72705 1165.8
+366.22842 817.0
+378.22446 4907.6
+378.55795 3643.4
+378.89133 738.6
+388.25482 663.7
+390.22354 617.6
+397.54788 734.2
+401.24527 1820.1
+401.74588 1675.1
+406.24249 10837.3
+406.74380 4153.9
+410.18118 731.8
+410.56195 1866.0
+410.89636 734.7
+412.56030 11116.4
+412.89429 10772.0
+413.22623 4739.2
+413.56320 1651.4
+416.56616 15535.4
+416.90039 11191.1
+417.23447 4335.5
+417.56906 826.1
+418.23541 33188.2
+418.56967 48284.3
+418.90414 21345.8
+419.23846 8046.2
+419.57309 1910.5
+422.26895 2784.9
+422.76941 1459.7
+423.74548 1694.4
+424.23859 8439.3
+424.57300 12821.4
+424.90680 3642.4
+425.24292 889.9
+426.74426 3210.1
+426.99445 4327.6
+427.24622 1580.9
+427.48364 753.9
+427.56717 1139.8
+428.18088 2026.2
+428.23779 561.2
+431.24692 5615.1
+431.49814 5082.6
+431.75000 1000.3
+454.26144 4815.5
+454.59515 3964.7
+454.92868 1619.1
+457.79413 858.8
+463.78766 4924.7
+464.28848 2005.5
+464.79370 1032.9
+467.26630 744.4
+471.93762 1226.5
+472.79153 73227.6
+472.93625 1848.1
+473.29303 59330.5
+473.79437 22855.6
+474.29587 5274.6
+474.77328 5612.9
+475.27713 1869.3
+477.76224 704.4
+477.93964 27988.4
+478.27350 18955.2
+478.60809 9039.0
+478.94135 2707.5
+482.59018 780.6
+485.95096 2965.2
+486.28720 1906.4
+491.95499 43959.8
+492.28943 30521.0
+492.62366 12485.8
+492.95816 3739.9
+495.86737 572.3
+499.30551 5281.0
+499.80713 4524.8
+500.30896 880.5
+502.16165 657.4
+508.30988 76204.4
+508.81125 67224.0
+509.31265 22673.2
+509.63025 3717.9
+509.81421 6282.6
+509.96359 1035.8
+510.03458 627.3
+510.29083 4939.7
+510.79193 2428.7
+511.69525 670.1
+515.63391 146458.9
+515.96814 119122.0
+516.23688 930.3
+516.30249 50098.3
+516.57037 938.6
+516.63654 13744.1
+516.97009 3533.9
+531.31244 6371.8
+531.81500 4046.6
+532.31702 1528.5
+532.49402 899.0
+532.55170 1248.7
+540.97662 3496.2
+541.31299 3443.2
+541.64404 761.8
+545.31763 8959.0
+545.81903 9623.5
+546.32001 4385.7
+546.82471 703.2
+549.08374 607.6
+553.79694 805.1
+554.32275 12552.6
+554.82428 15407.4
+555.32550 5800.6
+555.82855 1934.0
+555.97754 1497.0
+559.31403 3629.7
+559.81671 4230.3
+560.29602 5228.7
+560.79590 2857.8
+561.29834 1203.4
+562.80499 807.7
+564.65643 7203.1
+564.99133 6643.0
+565.32642 2459.0
+565.65845 1016.6
+566.83026 3074.7
+567.33270 1602.3
+573.28601 694.7
+574.31555 656.8
+580.83649 8377.6
+581.33710 10281.1
+581.83868 4448.9
+584.13202 568.5
+587.06360 636.3
+589.31195 959.9
+589.84131 13181.7
+590.34338 14530.8
+590.84253 5379.2
+591.34253 1223.0
+593.18243 578.0
+594.83411 2100.4
+595.33301 2174.9
+595.80292 1647.9
+595.84564 2662.8
+596.30524 950.4
+596.34845 870.9
+598.82367 911.6
+599.39862 2122.1
+604.30359 793.0
+615.33966 5611.8
+615.84052 3741.6
+616.34045 1030.1
+617.34570 1163.1
+624.34497 83917.7
+624.84625 58057.3
+625.34772 22246.7
+625.84906 5005.1
+626.34503 769.4
+631.35498 1283.1
+638.38086 661.3
+649.29156 2966.9
+650.29852 940.8
+650.85834 2263.8
+651.36060 1176.9
+652.35907 1026.8
+659.86340 63381.0
+660.36499 39580.5
+660.86603 14996.0
+661.36786 3062.9
+661.87091 973.9
+671.88135 1433.5
+673.38379 2247.3
+676.61816 1188.8
+680.88647 11478.9
+681.38855 8866.2
+681.88971 4232.1
+682.39288 1437.9
+686.37177 1556.5
+687.37708 750.0
+694.35638 586.3
+708.89990 1577.1
+709.40027 1114.8
+716.40454 7908.0
+716.90717 6746.5
+717.40814 1878.5
+747.48541 861.5
+762.37158 1083.2
+784.38324 590.7
+795.54749 715.9
+798.46844 2141.3
+799.47693 926.9
+865.97797 616.9
+875.46173 1049.1
+911.08118 628.0
+1009.51660 576.2
+1057.21021 836.4
+1145.56567 645.1
+1171.84363 583.2
+1188.30115 751.8
+1198.22437 2256.6
+1225.46191 597.6
+1436.67554 627.1
+1437.11816 603.9
+1525.22913 864.5
+S	1450	1450	544.5134746
+Z	4	2174.0226
+136.47774 571.6
+166.86447 579.7
+172.48907 600.3
+172.51605 610.6
+172.82698 530.6
+173.64276 574.1
+180.28860 660.0
+180.98460 602.6
+184.36159 617.0
+193.18727 541.8
+196.57642 542.7
+198.88722 967.7
+199.16318 904.7
+199.17914 564.4
+199.21335 702.8
+199.26183 3959.3
+199.36020 1045.7
+214.50087 664.7
+217.41647 556.4
+221.67024 658.1
+225.42407 638.4
+230.62317 560.4
+233.56772 514.3
+254.79222 603.6
+271.31342 725.1
+280.16998 741.7
+297.97003 627.4
+308.87979 511.6
+321.00272 540.3
+332.27679 507.4
+342.25299 883.8
+342.30704 593.4
+350.27588 853.3
+381.32642 688.3
+416.26010 1441.9
+427.51419 703.6
+492.14142 557.7
+508.22433 617.7
+517.00574 762.5
+517.25232 1095.6
+517.50629 918.6
+518.00085 65397.1
+518.13599 890.1
+518.25146 111311.4
+518.50165 177649.4
+518.75183 154698.3
+519.00220 62138.3
+519.11847 1171.9
+519.19794 563.5
+519.25409 1090.2
+519.37018 760.2
+519.51318 518.4
+519.74731 729.3
+519.89539 515.3
+520.00818 617.1
+527.29114 2901.5
+532.56268 2036.4
+572.69678 622.1
+598.14709 634.3
+604.03650 570.2
+622.32111 665.7
+676.64966 885.2
+683.23657 672.0
+722.84332 1308.2
+790.33496 643.3
+793.41229 648.1
+795.54236 841.1
+995.07867 530.8
+1057.24695 840.1
+1060.92749 631.9
+1188.25146 734.6
+1198.26514 3441.3
+1288.29785 531.3
+1525.26660 941.7
+1559.58057 607.6
+1842.50110 567.5
+1876.95105 824.3
+1878.29346 1087.8
+1878.64380 1267.2
+1879.14941 1667.2
+1879.56836 20121.6
+1879.99976 1181.8
+1880.49121 924.1
+1880.85693 897.1
+1882.05945 638.4
+1906.53357 744.6
+1907.02148 7860.8
+1918.64282 680.3
+1930.43665 892.3
+1931.93481 611.1
+S	1451	1451	449.2619796
+Z	4	1793.01662
+113.17644 519.2
+113.36987 697.2
+114.99329 572.9
+117.34653 553.9
+119.68302 463.9
+121.41640 593.1
+121.79774 2845.4
+122.64864 537.2
+129.64250 546.9
+134.24048 667.3
+144.52061 518.0
+155.96075 521.4
+158.09625 1264.6
+160.11295 587.9
+162.58080 546.6
+165.77995 763.6
+170.18924 531.2
+171.63792 683.8
+176.10751 754.4
+177.10226 1165.7
+179.65198 473.6
+180.64517 574.1
+198.89229 786.0
+199.13675 607.6
+199.16057 459.5
+199.16968 921.5
+199.18013 8273.9
+199.21864 603.0
+199.24799 1158.1
+199.26842 3029.7
+199.28732 940.9
+203.11819 763.7
+221.12825 59047.2
+221.30002 886.9
+222.13138 6896.6
+222.17723 581.3
+227.17560 1391.3
+230.65884 631.2
+233.16490 1127.1
+233.53610 819.3
+233.65527 604.5
+248.33575 556.6
+249.12334 7402.4
+250.12625 1105.4
+251.15012 913.8
+251.50842 610.0
+254.11668 1468.5
+271.43661 645.3
+275.16757 758.8
+282.11215 725.2
+289.19894 577.0
+290.44476 537.1
+299.13879 81819.7
+300.14236 16951.0
+300.20328 1991.2
+301.14462 1626.5
+301.20499 1503.4
+317.18539 1936.0
+327.13361 17921.1
+328.13754 4149.9
+329.14096 772.8
+333.20554 842.7
+333.53922 1177.2
+335.72052 2193.8
+336.72473 887.7
+342.19983 607.1
+350.27917 910.2
+354.54416 1409.6
+354.87955 931.1
+362.20721 3279.0
+365.72665 1693.0
+366.22842 901.6
+377.71423 608.7
+378.22424 6382.1
+378.55814 4429.6
+378.89230 867.3
+381.29422 655.6
+386.97702 859.6
+388.25278 817.7
+397.24289 931.7
+397.40451 608.2
+399.03223 546.8
+401.24515 4038.0
+401.74585 1943.4
+406.24179 6172.2
+406.74387 2308.4
+407.24683 869.4
+409.90799 706.7
+410.56149 855.4
+410.89880 628.7
+412.56009 18654.9
+412.89450 17379.1
+413.22766 5342.8
+413.56424 1624.8
+416.56601 15996.8
+416.90045 9518.5
+417.23456 3802.4
+417.57010 867.7
+418.23544 67663.1
+418.56967 62920.9
+418.90417 27130.8
+419.17828 651.1
+419.23868 6536.9
+419.57254 1153.2
+419.90891 679.8
+422.26779 4206.0
+422.76923 1641.7
+423.26822 677.1
+423.99579 2329.6
+424.23880 23250.6
+424.57312 14318.8
+424.90762 5401.7
+425.24142 1670.6
+426.74350 4188.9
+426.99515 4697.8
+427.24701 1832.2
+427.47488 681.0
+427.56882 1439.1
+427.89978 1213.5
+428.18091 3702.0
+431.24786 2811.3
+431.49823 3100.5
+431.75015 1957.0
+432.00330 829.2
+447.76645 575.7
+450.88217 566.3
+454.25986 4521.5
+454.59381 4074.0
+454.92996 1911.7
+457.78638 1331.2
+463.78616 6712.7
+464.28860 4388.8
+464.79440 694.2
+471.71350 723.4
+471.93814 1584.2
+472.26450 604.2
+472.75433 943.0
+472.79163 123176.0
+472.93774 1403.5
+473.29306 71347.3
+473.79428 19853.9
+474.29492 4028.0
+474.77332 2331.8
+475.27255 1087.2
+477.78198 792.8
+477.93967 32713.4
+478.27377 23620.8
+478.60800 12683.0
+478.94342 2893.9
+479.27682 917.3
+482.56998 683.4
+484.15466 580.2
+485.95084 1111.4
+486.28122 1507.5
+491.95505 42679.2
+492.28955 33606.2
+492.62354 13236.0
+492.95764 3548.3
+493.28915 875.6
+499.30521 9860.5
+499.80588 5940.5
+500.31046 1040.6
+508.30988 145735.8
+508.81125 88283.1
+509.31274 25704.3
+509.63135 1759.3
+509.81363 4866.3
+509.96555 3551.7
+510.29102 3897.1
+510.79846 614.2
+514.73962 842.9
+515.63391 173245.0
+515.96808 153903.0
+516.30225 71004.9
+516.63623 20657.1
+516.97137 2216.3
+525.28760 879.3
+526.31000 896.5
+531.31317 2562.0
+531.81268 1301.4
+532.48822 527.4
+532.55005 1504.2
+532.58575 630.8
+536.31036 828.4
+540.98041 1811.9
+541.31409 2043.1
+541.64636 949.3
+545.31744 19814.9
+545.81927 12465.2
+546.32056 3487.2
+546.81964 1117.9
+553.79712 2696.3
+554.32257 24466.0
+554.82385 15326.3
+555.32562 5412.9
+555.64075 1176.7
+555.82709 1276.7
+559.31464 6804.3
+559.81647 3586.5
+560.29419 1814.8
+560.32745 619.2
+560.79688 1299.5
+562.80188 828.5
+563.09052 625.0
+564.65710 7794.4
+564.99054 7372.3
+565.32562 3030.9
+565.66333 1106.4
+566.83282 3567.3
+567.33484 2863.9
+573.29065 878.5
+574.82159 1067.8
+580.83569 18500.6
+581.33716 12261.1
+581.83832 5204.1
+582.34143 1231.3
+589.31641 1533.8
+589.84161 26202.8
+590.34332 18355.8
+590.84393 5486.5
+591.34344 780.0
+594.83344 4022.6
+595.33539 4036.7
+595.80402 1847.9
+595.84521 1889.6
+596.34662 1420.2
+598.82050 989.9
+599.40027 845.2
+604.30048 1507.7
+609.84039 1187.9
+615.34088 4009.0
+615.84192 2208.9
+616.33826 1288.9
+616.84119 1249.1
+624.34491 59884.5
+624.84607 35257.4
+625.34753 13081.5
+625.84802 3241.7
+626.60651 609.5
+630.29755 828.6
+631.34979 1077.0
+643.34741 738.4
+649.29327 2239.3
+650.85895 2510.4
+651.35632 1378.5
+652.36353 1649.4
+659.86365 59153.2
+660.36487 40782.7
+660.86627 14853.6
+661.36847 3740.5
+661.63947 721.1
+663.37952 913.8
+670.40979 961.0
+673.38367 1788.7
+674.37903 817.5
+676.65015 717.4
+680.88629 8158.5
+681.38928 4563.1
+681.88940 1995.3
+686.37347 1337.5
+686.87335 1130.8
+697.41382 823.7
+708.89990 2963.4
+709.40167 2523.1
+716.40393 4972.4
+716.90649 4570.5
+717.40723 2167.8
+730.45117 739.5
+795.56171 1269.9
+798.46802 2465.7
+799.47595 744.4
+821.59784 572.1
+842.46503 803.4
+870.97565 546.5
+875.46503 779.1
+880.85413 541.8
+990.12683 786.0
+1004.18079 622.5
+1198.24072 2887.8
+1225.88159 623.7
+1265.13000 555.3
+1373.64697 540.0
+1418.69360 610.0
+1543.53577 717.7
+1574.38062 642.2
+1691.22168 596.2
+S	1453	1453	1879.90999127
+Z	2	3757.972
+Z	3	5636.455
+532.53589 633.3
+532.57135 1808.7
+595.90790 578.0
+597.07007 564.2
+626.85724 637.0
+676.65271 1136.1
+725.30450 690.1
+743.86871 541.5
+784.09467 603.4
+795.54645 1519.6
+876.16821 558.9
+939.49860 576.1
+953.93433 653.9
+1047.75977 886.4
+1198.27710 3547.2
+1214.66199 630.1
+1253.75330 668.9
+1291.32825 737.7
+1415.87378 630.1
+1856.12854 621.5
+1868.42480 705.3
+1877.26404 781.1
+1877.95496 738.7
+1878.98596 1112.0
+1879.14905 902.3
+1879.55334 20037.8
+1880.06970 1083.8
+1881.16504 772.9
+1882.39832 730.0
+1889.68433 634.9
+1906.69080 1268.2
+1907.00854 6739.4
+1930.44800 852.4
+S	1454	1454	1907.46740793
+Z	2	3813.087
+Z	3	5719.127
+532.57397 1524.0
+549.09808 817.8
+582.12823 675.6
+630.34845 765.3
+676.65082 979.9
+765.01331 696.5
+835.26416 640.4
+1110.56726 749.7
+1198.28149 3140.8
+1302.02612 681.9
+1330.61499 629.8
+1525.24792 827.3
+1777.70874 1001.5
+1876.83948 704.0
+1878.92151 915.8
+1879.16821 1021.2
+1879.30103 1169.7
+1879.56335 19132.6
+1879.97437 1225.3
+1880.24084 897.6
+1906.55237 934.6
+1907.05774 6989.8
+1918.67468 1084.7
+1930.39893 1595.9
+S	1455	1455	1198.7078246
+Z	2	2395.568
+Z	3	3592.848
+315.05222 650.6
+319.52670 645.3
+341.55536 563.9
+381.31201 862.5
+427.48828 615.4
+436.40640 597.4
+482.58798 773.6
+532.51025 1807.5
+549.08252 1105.1
+640.92773 647.6
+651.85608 745.0
+702.81714 532.0
+723.33331 606.4
+826.65564 730.5
+848.86633 640.1
+908.49316 655.3
+939.01672 687.4
+1198.14258 3208.7
+1203.96936 708.6
+1468.73425 718.3
+1778.72095 613.5
+1807.61487 695.8
+1877.94434 683.3
+1878.23438 1377.0
+1878.95117 1125.0
+1879.53503 19268.7
+1880.72949 641.0
+1881.19788 863.4
+1907.05383 7462.4
+1930.34131 1049.9
+S	1457	1457	544.5150021
+Z	4	2174.02871
+149.30319 641.6
+153.78714 622.7
+154.09235 549.3
+162.57269 616.3
+162.81613 533.3
+166.61496 589.5
+166.90297 511.0
+166.90764 523.1
+170.54648 552.1
+177.81204 676.3
+178.30765 574.1
+182.76630 646.7
+191.67883 545.2
+195.98203 817.8
+196.33090 559.1
+196.50285 614.1
+198.89207 1027.8
+199.16896 1050.4
+199.20792 741.0
+199.26563 3079.5
+199.27690 1182.0
+199.36345 1109.8
+222.53671 701.4
+233.55350 701.3
+244.76981 557.6
+247.50739 572.4
+255.27083 591.0
+271.29895 582.9
+281.69226 682.3
+292.24362 606.1
+294.35352 576.6
+326.83786 634.9
+340.83682 540.2
+367.40558 659.9
+416.25946 1724.4
+416.47098 778.1
+421.57492 569.8
+437.37753 556.2
+482.61130 733.0
+493.88525 679.1
+518.00049 30480.3
+518.25098 43958.9
+518.50128 53209.2
+518.75177 39520.2
+519.00201 14136.9
+519.25397 800.3
+527.29108 3300.9
+532.50854 1926.3
+542.70874 632.1
+549.11658 993.8
+581.06134 681.5
+598.00208 595.7
+627.35168 1410.1
+630.35101 1005.3
+632.30823 708.1
+639.68085 992.4
+640.01593 1091.3
+640.34698 690.1
+668.06152 581.4
+676.29962 851.2
+676.63660 1124.3
+684.81335 1631.9
+685.30847 887.4
+722.84406 1646.1
+754.58423 600.1
+795.56274 873.2
+850.50012 670.2
+930.90521 705.9
+1074.30737 616.2
+1095.25232 632.0
+1179.68823 553.9
+1198.13318 3579.6
+1204.97998 601.8
+1343.64575 563.4
+1382.44031 749.9
+1391.22668 692.2
+1520.44946 582.7
+1521.42053 615.6
+1525.30286 645.0
+1878.91772 1623.7
+1879.52429 19654.4
+1879.76807 3703.1
+1880.34546 903.1
+1881.18042 940.3
+1907.08093 7038.1
+1930.41199 1007.6
+1931.88635 641.6
+1982.56909 616.8
+S	1458	1458	449.2631696
+Z	4	1793.02138
+112.87789 642.2
+121.79819 1980.0
+126.41590 609.1
+130.01361 544.3
+131.74829 561.1
+133.13918 1026.4
+158.09578 1043.9
+163.18294 583.9
+165.78183 716.1
+165.88687 529.5
+176.10689 1265.5
+177.10173 2379.3
+178.43085 635.7
+187.65471 818.1
+199.18024 7763.6
+199.20871 602.4
+199.24800 1776.7
+199.25856 1249.0
+199.27582 2046.3
+199.29004 818.9
+199.37480 640.4
+199.40642 618.6
+200.18327 910.7
+221.12808 58701.7
+222.13164 8974.5
+227.17570 1472.2
+232.57776 594.8
+232.71718 534.6
+233.16443 1512.4
+234.79883 598.2
+249.12306 7844.0
+250.12639 1325.5
+267.14871 3119.0
+273.98459 568.1
+280.15414 801.4
+289.16119 750.0
+295.14359 1376.3
+299.13867 13596.0
+300.14240 2944.5
+300.20218 1662.5
+308.87097 662.5
+316.84949 555.4
+317.18637 900.4
+327.13376 4197.8
+335.72104 3183.3
+336.72238 755.8
+354.54474 1464.8
+354.88116 893.4
+361.82474 675.4
+362.20734 3652.6
+365.45358 554.2
+374.65622 677.1
+378.22388 7187.8
+378.55801 3717.0
+378.89200 1900.7
+381.24301 621.2
+406.24237 6367.3
+406.74356 2750.8
+409.21411 655.0
+411.89594 617.5
+412.55972 3815.6
+412.89374 1950.9
+413.23978 873.8
+413.39209 564.7
+416.56555 12508.5
+416.89984 9407.1
+417.23465 4814.6
+418.23514 22213.2
+418.56961 12330.3
+418.90402 3784.5
+419.23746 1992.7
+423.74506 1898.9
+423.99643 2171.7
+424.23871 6266.5
+424.57257 3815.9
+424.90717 1513.9
+426.74335 3899.8
+426.99490 4281.4
+427.24615 1906.1
+431.24622 4514.4
+431.49814 6690.4
+431.74835 5001.4
+431.99918 1451.2
+433.22052 735.6
+434.57370 981.0
+436.23929 2350.0
+454.26083 2618.8
+454.59442 3287.1
+454.92633 850.7
+457.78506 778.4
+458.20743 532.3
+463.78647 1151.7
+469.89642 741.6
+471.93564 1253.2
+472.27444 993.2
+472.59714 939.5
+472.79114 19869.8
+472.93686 1852.9
+473.29269 9189.9
+473.79449 3481.1
+474.29584 1061.2
+474.77658 1940.3
+475.26892 890.4
+477.07584 579.3
+477.93936 29927.0
+478.27347 29768.7
+478.60794 12906.5
+478.94302 4636.8
+485.95203 2016.3
+486.27966 844.8
+491.95480 33871.6
+492.28922 36690.3
+492.62335 16741.2
+492.95749 3733.1
+499.30331 3297.6
+499.80457 1409.7
+508.30948 44568.4
+508.81128 21622.0
+509.31256 4964.8
+509.63126 2540.4
+509.81723 1029.9
+509.96564 3420.1
+510.29031 3498.1
+510.79163 1499.3
+514.73004 710.6
+515.02368 758.9
+515.63373 151322.0
+515.91156 958.9
+515.96796 171732.2
+516.02130 955.9
+516.30212 85050.6
+516.42096 881.0
+516.57690 1264.0
+516.63629 29270.8
+516.87750 691.9
+516.90796 699.3
+516.97162 4679.5
+517.21057 736.2
+526.30762 562.8
+531.31305 2801.6
+531.81104 1578.8
+532.55145 2168.2
+540.97760 1998.4
+541.31171 2515.8
+541.64471 1975.7
+545.31818 3013.9
+545.81909 1765.7
+549.09906 763.0
+550.29901 756.5
+554.32166 4383.5
+554.82751 1723.7
+555.97681 774.2
+559.31451 1212.9
+560.29437 2057.3
+560.79510 1291.6
+564.65546 7350.9
+564.99048 7999.1
+565.32477 4009.7
+565.65918 2121.1
+566.83173 4904.3
+567.07733 660.6
+567.33502 1829.4
+580.83472 3725.8
+581.33545 3219.6
+586.29523 1622.7
+589.32068 879.4
+589.84125 5626.3
+590.34058 3243.4
+590.84344 884.9
+594.83075 2047.5
+595.33081 1219.1
+595.81036 1927.9
+596.31140 1141.6
+602.32654 756.2
+604.30396 8676.6
+615.34125 2829.8
+615.84369 2872.0
+616.83893 803.9
+617.84271 795.0
+624.34467 43731.1
+624.66528 864.7
+624.84583 35407.8
+625.34741 14076.9
+625.84900 2981.2
+630.34174 1009.7
+631.34863 1024.7
+631.85376 767.1
+649.29547 1878.4
+650.85809 1438.7
+651.36029 1899.8
+653.36176 757.9
+659.86322 53018.7
+660.36456 43960.2
+660.86578 16419.9
+661.36981 4436.1
+662.01691 696.5
+663.38232 1093.6
+670.42908 694.8
+673.38617 953.1
+673.88660 1090.4
+674.38348 650.7
+676.64386 1161.6
+680.88666 5801.1
+681.38873 3878.7
+681.89246 1834.9
+686.36621 886.3
+695.73639 629.0
+708.90289 2047.5
+709.40118 1044.1
+716.40515 5514.0
+716.90729 6079.6
+717.40369 1843.9
+754.81958 611.5
+782.83490 566.5
+795.54187 1021.0
+1020.85724 762.3
+1057.25928 897.4
+1106.87048 609.1
+1185.78308 536.1
+1198.23486 3213.1
+1339.09387 581.4
+1460.17651 605.4
+1525.27148 845.5
+1698.19031 620.1
+1718.34375 670.4
+1795.37183 665.8
+S	1459	1459	518.2581046
+Z	4	2069.00112
+132.11157 6097.9
+133.77892 5892.5
+134.05594 5883.2
+139.80345 6613.0
+141.74455 5531.2
+165.78183 7933.8
+184.37437 6050.0
+186.15121 5697.5
+188.26201 9973.4
+188.27188 11971.6
+188.27861 10820.9
+188.28763 16592.9
+188.30093 7748.8
+188.30884 11884.4
+191.15657 5774.0
+198.88408 10804.5
+199.15353 6310.5
+199.17554 13431.1
+199.24847 10212.0
+199.25591 13115.8
+199.27419 30291.4
+199.29442 14000.6
+199.35472 6989.6
+199.37180 9476.6
+204.84512 6577.7
+206.41930 6326.2
+227.62630 8118.9
+253.25824 6219.5
+258.63229 6229.1
+313.43945 5283.5
+328.54388 5793.8
+341.68439 19135.8
+342.21179 5955.5
+342.22681 6005.3
+354.70706 6432.4
+355.42542 6543.3
+381.31018 7596.2
+388.15320 8287.3
+416.25912 12502.3
+465.02176 7573.3
+470.72382 5525.2
+489.49292 21371.0
+489.74228 12579.5
+489.99518 7673.5
+492.29169 7696.8
+532.52039 19748.8
+545.30298 24873.5
+546.30231 7494.3
+549.07990 6423.6
+552.58649 7576.4
+559.73114 27468.3
+595.25262 10139.6
+598.61804 22026.0
+598.95227 14784.0
+630.32208 9709.2
+630.78339 8455.6
+641.40045 7120.0
+643.29596 10341.2
+644.78387 32743.7
+645.28119 18177.7
+645.78986 8455.5
+676.63428 9719.9
+682.36273 19280.7
+694.31946 30621.6
+694.81879 22882.0
+731.02704 8880.6
+783.43945 6643.1
+795.53491 9589.0
+877.50415 6029.5
+1057.25232 8167.0
+1138.18457 7216.6
+1145.09253 6246.5
+1174.41614 5650.6
+1188.13171 9008.4
+1198.15637 38769.8
+1431.78821 6401.2
+1525.22278 5815.2
+1878.11462 8892.6
+1879.05469 10907.6
+1879.52124 212479.0
+1880.02478 11140.8
+1880.76453 7451.2
+1881.21155 8127.5
+1897.31262 7604.7
+1907.05542 81673.3
+1924.55994 7309.6
+1930.34412 9661.6
+S	1461	1461	1879.97199127
+Z	3	5636.641
+Z	2	3758.096
+532.53589 1572.2
+630.34180 919.0
+644.67609 596.2
+676.65314 1149.2
+725.97247 610.2
+795.54156 986.2
+876.70593 618.0
+1180.18445 598.7
+1198.20276 3304.2
+1272.78357 565.9
+1302.03320 635.2
+1335.73718 829.5
+1715.50549 734.7
+1744.34998 598.3
+1765.40698 576.2
+1777.41785 886.5
+1872.40820 692.0
+1877.63147 704.6
+1878.12500 865.1
+1878.81201 809.3
+1879.15491 678.3
+1879.55444 20086.9
+1880.29651 913.7
+1881.14917 719.2
+1906.79834 837.9
+1907.06750 7363.7
+1930.40845 1285.0
+S	1462	1462	497.7978246
+Z	2	993.58
+128.01862 611.9
+133.12569 896.8
+133.71503 636.0
+134.12914 572.3
+136.82024 645.0
+153.36272 514.6
+155.22479 558.1
+157.58134 611.5
+158.42059 697.9
+162.06429 645.9
+165.78033 1130.9
+171.63692 865.2
+175.11844 1224.2
+175.77322 657.9
+188.09492 554.1
+188.19882 568.2
+188.21021 539.5
+188.25526 1418.3
+188.28664 2198.5
+188.29343 2092.6
+188.30911 1497.6
+188.32501 1288.1
+188.34103 630.3
+188.36726 592.9
+197.66888 726.2
+198.89023 945.8
+199.18758 1042.5
+199.25323 1332.7
+199.26346 2036.1
+199.27455 1214.9
+199.28377 1760.2
+199.32300 706.0
+199.34988 1139.4
+199.37234 706.2
+199.38033 683.6
+213.46039 677.6
+219.09570 616.6
+229.17229 659.6
+233.54271 669.8
+255.14023 678.9
+255.25615 780.2
+271.76379 574.9
+280.14581 647.9
+301.00635 544.4
+315.32947 581.7
+350.21030 534.1
+350.27933 1005.3
+381.51077 581.7
+393.38483 603.8
+432.46317 554.7
+448.45532 592.7
+466.28030 834.5
+466.76678 1859.4
+468.49924 737.2
+468.97855 6055.8
+469.22934 4786.5
+469.42929 558.3
+469.47791 2058.2
+469.72958 854.4
+475.28125 2923.2
+475.78165 1274.7
+479.77319 1182.3
+486.73761 650.3
+488.28653 762.5
+488.77914 1655.5
+532.50037 2338.5
+562.01849 645.9
+570.27423 1723.1
+570.61365 1067.9
+588.65845 619.8
+593.28180 758.4
+603.38171 706.7
+606.50183 712.7
+630.32031 824.2
+636.86340 596.5
+652.73962 564.5
+656.69263 541.0
+676.59882 629.5
+676.64899 1260.9
+688.38068 699.6
+690.40967 3143.3
+706.38354 2025.2
+707.39044 817.0
+731.01520 784.8
+775.44080 1050.8
+789.39343 717.1
+790.35431 612.3
+791.47308 2032.3
+792.48083 800.1
+802.44238 1639.6
+819.46869 3604.8
+820.47778 857.5
+821.39099 637.7
+823.79657 751.8
+837.47913 3391.5
+838.48584 1480.5
+934.53479 1538.2
+935.52917 655.8
+1057.25549 821.5
+1198.11755 3053.6
+1316.13062 618.8
+1414.82947 616.1
+1525.19177 830.4
+1613.35315 534.4
+1625.15967 646.6
+1877.85474 758.9
+1878.23840 1168.4
+1879.23792 2625.5
+1879.55725 19524.5
+1879.86072 2541.0
+1881.24915 821.6
+1881.60266 967.9
+1882.97327 769.2
+1907.04956 7308.2
+1918.70325 721.7
+1930.34094 945.4
+S	1463	1463	544.5089596
+Z	4	2174.00454
+142.20592 501.5
+153.14197 625.7
+169.15877 789.8
+183.17603 513.4
+187.61003 709.2
+188.25635 596.6
+188.27084 970.5
+188.27707 941.0
+188.29022 1066.2
+188.29980 924.1
+188.30511 1009.6
+194.72890 667.5
+198.89037 537.1
+199.16821 815.3
+199.17592 851.3
+199.23637 810.7
+199.24458 909.9
+199.25777 1098.9
+199.26613 1574.3
+199.27409 2936.4
+199.36679 660.3
+199.37082 795.8
+206.27702 590.0
+211.31625 600.0
+214.49837 657.2
+221.12767 1994.8
+238.84340 624.5
+251.38005 493.1
+251.38440 497.7
+286.51068 677.5
+297.41281 663.9
+318.45004 545.9
+324.17535 567.3
+328.89581 568.3
+336.17938 544.0
+345.46573 569.9
+427.49402 986.7
+440.55826 934.6
+482.12003 674.7
+487.77606 717.9
+488.27753 747.7
+494.37634 600.2
+500.30475 2221.7
+518.00067 19255.4
+518.25116 20048.3
+518.50183 8980.8
+526.09399 605.1
+532.51044 2067.3
+542.97986 585.2
+549.09863 599.2
+564.28925 1214.9
+564.62439 3478.2
+564.95758 708.3
+597.47552 622.3
+601.98358 3922.9
+602.31885 2576.2
+602.65485 1551.8
+615.57654 1107.6
+615.82550 1787.4
+616.08044 762.7
+639.33368 643.8
+639.67841 9019.4
+640.01404 10082.5
+640.34717 5447.6
+640.68359 1068.4
+668.32092 714.1
+668.81738 1842.0
+669.32117 1597.4
+675.80768 2026.3
+676.30591 2008.8
+676.64209 815.9
+684.81171 4472.4
+685.31085 2612.1
+690.85516 691.0
+718.81927 2924.3
+719.32269 2522.0
+719.82037 959.9
+722.34534 836.4
+731.03394 819.1
+750.80328 649.1
+795.53992 899.8
+974.54785 685.0
+980.96320 612.9
+1057.25696 756.9
+1144.55212 634.6
+1170.50317 593.5
+1198.14026 3643.1
+1408.09839 608.3
+1611.34363 688.2
+1852.13940 580.6
+1855.75366 685.4
+1878.18164 635.3
+1878.91541 1668.2
+1879.53687 18489.3
+1879.75562 2850.0
+1880.21509 2131.9
+1880.53003 772.5
+1880.86829 1240.2
+1894.02771 611.7
+1907.09827 7406.9
+1930.36938 883.9
+1992.31958 775.2
+S	1465	1465	1879.93640793
+Z	3	5636.534
+Z	2	3758.025
+515.66705 648.9
+532.52484 2070.0
+580.10162 637.5
+630.23651 603.9
+630.36249 832.6
+676.73792 741.1
+1048.44604 597.2
+1057.31580 780.7
+1140.48853 742.5
+1198.17566 3481.1
+1216.17859 756.5
+1270.29883 710.3
+1489.06433 994.1
+1525.31641 1018.0
+1737.01331 594.5
+1777.47461 848.5
+1878.63721 837.9
+1878.88232 1382.5
+1879.38037 7425.7
+1879.61829 16811.0
+1907.04517 7115.6
+1930.46460 914.2
+S	1466	1466	1907.46324127
+Z	3	5719.114
+Z	2	3813.079
+532.50452 2101.0
+549.11017 653.6
+561.58527 663.7
+598.52142 548.4
+607.99420 613.1
+632.43323 662.4
+644.91553 668.4
+712.57452 617.4
+753.42584 552.3
+795.54181 1399.1
+839.68011 680.5
+931.16473 641.3
+1198.13354 3035.1
+1525.30725 701.3
+1770.81177 640.6
+1878.12170 862.5
+1879.42761 19707.0
+1879.82739 1300.2
+1880.83057 619.2
+1907.04065 7338.8
+1930.45203 873.1
+S	1467	1467	1198.57299127
+Z	3	3592.444
+Z	2	2395.298
+327.22903 575.4
+342.27899 649.3
+382.62314 676.4
+385.25180 753.9
+388.66556 625.4
+427.54541 887.5
+465.02734 685.7
+466.17987 672.7
+498.57333 639.7
+532.52704 2173.1
+548.70294 570.1
+549.16156 1056.4
+612.50012 531.5
+630.41821 721.3
+676.64471 1086.7
+692.23450 596.5
+719.54901 620.5
+734.05432 725.4
+804.38409 595.1
+848.02216 636.4
+1057.25586 927.2
+1081.50623 3321.0
+1082.50745 1175.6
+1084.54468 625.6
+1174.85107 703.8
+1198.17444 3121.4
+1206.17871 702.3
+1285.76563 691.0
+1350.24365 638.0
+1400.49097 694.9
+1525.43787 988.8
+1678.75415 713.1
+1697.29236 657.7
+1785.88098 603.6
+1879.31934 2711.4
+1879.54651 19807.1
+1880.32544 780.4
+1893.13757 719.6
+1907.05005 7628.2
+1930.64087 664.6
+S	1469	1469	526.0238521
+Z	4	2100.06411
+133.30731 614.1
+136.07526 863.5
+141.84901 632.6
+157.59068 725.0
+163.04910 619.0
+181.37404 525.6
+188.27420 1883.0
+188.28461 2078.3
+188.29468 1961.7
+188.32809 1152.7
+188.52644 533.8
+198.88885 903.9
+199.18280 796.6
+199.21066 955.5
+199.23146 902.1
+199.25296 1189.1
+199.26385 664.5
+199.27460 986.5
+199.28226 1667.8
+199.29314 606.4
+199.31845 728.7
+199.37241 889.8
+199.38063 848.6
+199.39043 850.4
+205.04315 564.7
+207.47081 537.6
+221.05325 601.6
+232.74406 540.8
+238.12277 1296.8
+249.15945 2344.3
+258.97803 585.0
+265.96448 608.8
+272.17148 1932.8
+277.15421 668.3
+278.08359 538.6
+283.14371 45921.2
+284.14722 8536.2
+285.14957 809.2
+311.13907 4844.7
+342.24677 723.5
+350.28107 746.5
+355.71863 8167.0
+356.22015 4731.4
+356.72141 903.7
+381.32956 703.0
+384.22906 16638.4
+384.73053 8141.3
+385.23199 1414.8
+400.26633 888.3
+407.48184 773.4
+420.70349 3165.6
+421.20395 1598.3
+426.16495 2523.6
+427.51276 835.1
+428.26129 3900.5
+428.76187 1246.2
+433.76303 38252.3
+434.26459 18117.3
+434.76599 5968.1
+448.70898 1300.1
+462.70486 1708.2
+463.70471 580.1
+471.94312 964.7
+477.61151 4648.5
+477.94525 4516.2
+478.28043 1634.6
+485.37427 635.7
+485.77545 1036.2
+490.30484 16878.3
+490.80627 10133.0
+491.30734 3137.4
+497.16260 855.1
+497.27933 1488.0
+498.24283 719.7
+504.27228 971.6
+504.61096 1241.3
+508.83395 645.9
+509.94974 4826.6
+510.28293 4346.5
+510.61761 2754.3
+510.95068 894.5
+514.30786 4463.1
+515.31189 808.4
+532.52002 1903.7
+543.71100 907.9
+546.84735 2380.1
+546.96338 962.7
+547.23108 1639.5
+547.29431 1269.0
+547.34741 906.1
+547.73114 1032.3
+549.11877 813.8
+550.29462 1259.9
+550.79730 846.4
+552.22717 1115.4
+552.71729 1478.4
+552.96375 6103.2
+553.29895 5274.8
+553.63245 3248.2
+553.96558 1603.5
+558.96783 3575.0
+559.30273 3879.2
+559.63965 1690.8
+561.23560 1700.8
+561.73309 1346.0
+583.22534 686.9
+583.42627 683.7
+585.63177 1351.1
+585.81274 5745.9
+585.96204 1870.0
+586.31927 1268.6
+586.75153 676.0
+591.30646 11489.2
+591.63892 16906.6
+591.97260 13291.2
+592.30573 4830.0
+592.64368 973.6
+594.75635 547.3
+595.76971 1299.2
+597.20947 695.0
+597.30963 159879.0
+597.64374 164876.4
+597.97803 84483.1
+598.07599 981.0
+598.31195 28002.4
+598.40887 952.3
+598.64587 6041.6
+598.84326 993.7
+598.98096 853.2
+599.19031 679.0
+601.98779 734.9
+603.77203 1377.8
+603.86871 2517.4
+604.27802 1434.9
+604.36920 1955.6
+604.87476 1167.5
+609.25793 799.7
+610.82684 657.2
+613.37622 1944.3
+614.37927 998.1
+614.99347 608.1
+617.77338 656.6
+640.32690 3169.5
+640.66345 4310.9
+640.99524 1795.6
+641.32465 1418.1
+643.16156 648.1
+646.33191 41581.6
+646.66626 50793.7
+647.00061 27323.0
+647.33594 10931.7
+647.66730 1795.1
+647.88416 5557.3
+648.38678 2428.4
+649.99536 1485.5
+650.77081 718.9
+651.33331 23596.2
+651.83466 9623.3
+654.81403 734.8
+676.64941 920.5
+690.72797 732.1
+695.82062 1038.2
+710.42883 7653.2
+711.43329 4178.8
+712.43243 1240.1
+715.91138 1718.7
+716.41455 2187.3
+716.91547 692.0
+732.86920 1412.5
+733.35681 829.6
+745.20068 681.1
+767.45007 10511.2
+768.45563 5076.1
+769.45740 1349.8
+773.42896 2667.7
+773.92883 1773.8
+774.42780 849.8
+795.55090 1122.6
+807.32166 812.1
+811.32074 4539.1
+812.32135 2407.4
+842.40924 1687.7
+857.98938 676.0
+866.51892 7611.3
+867.52185 4364.9
+868.53217 919.9
+924.40192 4482.9
+925.41034 2145.6
+927.56067 605.0
+958.39679 1233.7
+959.38678 718.7
+991.34021 918.7
+1008.38287 832.5
+1018.29883 671.9
+1023.47430 2097.1
+1024.46680 989.8
+1057.25195 904.0
+1080.48462 997.7
+1104.42102 1393.4
+1110.62415 806.6
+1121.45544 2806.5
+1122.46094 1017.0
+1188.03406 665.1
+1198.15625 3435.7
+1212.75586 620.2
+1315.78442 587.5
+1437.85889 758.6
+1525.32776 943.1
+1591.72986 689.8
+1777.58203 869.7
+1875.23303 631.1
+1876.71350 739.1
+1878.68237 1524.9
+1878.90259 1507.5
+1879.54626 19805.9
+1880.22913 832.4
+1880.60217 726.4
+1882.88586 625.3
+1906.55664 757.4
+1907.05310 7239.2
+1930.45166 1530.0
+1967.37427 639.6
+S	1470	1470	567.5438246
+Z	4	2266.144
+147.47446 552.0
+154.52869 730.5
+157.57231 593.4
+163.11092 655.1
+165.77713 778.4
+169.46037 847.1
+171.30641 545.0
+175.90611 522.1
+184.81007 554.4
+188.25035 965.3
+188.26350 1713.4
+188.27588 2349.9
+188.28503 2120.8
+188.30130 1957.9
+188.31583 1683.4
+188.36713 562.9
+192.22366 576.5
+198.89175 806.7
+199.26057 1014.6
+199.27458 1996.2
+199.28479 1118.5
+199.30147 1308.6
+199.36656 561.6
+199.37450 780.5
+228.03195 637.8
+229.57718 542.0
+232.57866 614.0
+232.79797 520.2
+232.80516 525.0
+235.06216 551.1
+253.31699 505.2
+255.23827 639.6
+280.12817 763.7
+285.69427 531.1
+307.09320 554.9
+308.84460 668.1
+322.15298 2108.9
+322.65445 1266.2
+345.16632 685.5
+345.22372 14537.7
+346.22842 1005.1
+353.18094 2721.5
+363.19989 10928.9
+363.70105 3316.3
+372.20496 8560.0
+372.70700 3455.6
+380.30200 642.7
+381.28568 845.9
+412.99838 637.9
+440.24417 883.8
+444.29190 1350.8
+444.83728 512.7
+457.27896 690.3
+473.23273 612.2
+477.03552 641.1
+502.24069 769.0
+502.57745 986.7
+510.28769 811.1
+515.82202 596.0
+531.32379 1992.9
+532.54486 2129.5
+532.61346 1235.3
+532.94733 1645.6
+536.95111 2129.3
+537.28577 1306.1
+537.61932 724.9
+541.04413 808.7
+541.95929 1573.2
+542.95056 1385.6
+543.28571 2137.8
+543.62115 1904.2
+545.54523 4804.9
+545.79749 6132.3
+546.04724 1350.1
+547.27576 536.6
+550.04938 921.6
+550.29919 730.4
+554.07288 577.9
+589.37512 577.4
+593.31274 637.6
+601.83746 614.0
+601.94336 1013.9
+607.94830 874.3
+608.28674 663.9
+608.62335 727.2
+624.34448 5296.1
+624.84680 2477.4
+625.63770 3239.8
+625.97076 2449.0
+626.30292 935.0
+630.28430 1743.4
+634.96826 8541.5
+635.30365 6616.4
+635.63647 2331.3
+640.97119 2102.0
+641.30536 1852.3
+641.64166 1400.3
+646.34534 1590.0
+647.34497 677.8
+659.86230 2020.9
+660.65100 703.7
+668.38953 578.5
+676.60828 652.8
+680.88684 2310.1
+681.38678 1192.5
+683.86212 932.9
+684.10846 1475.3
+684.35254 1277.5
+684.61395 916.2
+684.84949 1164.2
+688.36652 1243.8
+688.61255 1246.8
+688.86035 654.3
+701.34448 703.3
+701.59332 1265.4
+701.83759 1085.2
+702.09747 891.1
+705.59851 2152.8
+705.84961 3865.0
+706.09766 3307.4
+706.60187 1188.9
+708.37152 814.1
+717.34137 2080.2
+717.84644 1437.7
+718.34961 727.2
+719.86377 1453.9
+720.36115 649.7
+725.39319 1777.7
+726.35040 1018.3
+726.70123 876.2
+726.84369 1073.7
+727.03345 931.9
+729.38043 663.4
+743.40222 1239.7
+752.86139 8156.5
+753.36218 6077.3
+753.86237 2366.9
+760.41760 844.8
+761.86609 22847.6
+762.36707 15387.5
+762.86774 5444.9
+763.37158 1227.2
+790.88477 1092.6
+795.55750 895.0
+819.40228 3080.5
+831.10046 755.8
+867.90613 2030.9
+902.41693 3024.0
+902.91394 3170.5
+903.41229 1141.1
+911.41815 2342.3
+911.92798 902.2
+1057.21082 687.9
+1150.01196 600.8
+1198.05237 629.3
+1198.21924 3258.5
+1376.96924 719.7
+1590.13367 588.3
+1717.69238 570.5
+1775.84485 761.9
+1878.58911 858.9
+1879.47473 18915.2
+1879.71692 3284.0
+1880.42419 575.8
+1907.05579 7452.6
+1918.66650 1065.7
+1930.24182 979.6
+S	1471	1471	644.7548246
+Z	3	1930.989
+Z	2	1287.662
+167.00751 542.5
+173.39886 533.1
+184.77875 646.6
+188.21420 792.0
+188.24591 513.7
+188.25653 624.3
+188.26523 895.2
+188.27505 1206.2
+188.28864 1253.3
+188.29868 1083.0
+188.30884 793.4
+188.31546 639.6
+198.89001 1079.0
+199.25957 1970.1
+199.28101 1792.2
+199.30252 1513.1
+199.37834 860.6
+206.44414 548.8
+206.45142 474.6
+223.70844 571.1
+231.73790 598.0
+242.96393 705.7
+246.15567 1055.6
+255.26799 596.1
+271.91788 751.4
+290.25333 665.1
+299.57980 969.1
+331.20822 883.9
+350.28903 802.7
+397.17126 759.9
+421.70987 987.5
+427.49442 642.2
+466.29367 574.8
+482.61539 664.1
+483.13538 656.6
+484.77777 1000.6
+489.14676 779.8
+496.24323 1122.4
+499.70087 657.7
+501.31323 1763.7
+514.25006 2213.9
+532.46820 650.1
+532.58575 2366.1
+543.74164 2201.2
+544.24078 885.3
+549.10480 858.2
+563.27014 590.5
+591.04785 1022.5
+595.55286 839.2
+597.17188 670.8
+597.28839 1337.6
+598.02502 663.9
+600.31750 668.4
+613.27863 1805.1
+613.53467 908.2
+613.77985 1233.4
+614.28882 1025.5
+615.29395 2335.5
+616.30719 655.3
+617.27374 1405.2
+623.30914 1492.4
+625.81519 744.8
+626.31738 1339.3
+630.33441 806.8
+673.36041 4129.2
+674.29736 1974.7
+674.36560 1029.9
+674.79810 1428.9
+676.65564 655.0
+677.31348 578.4
+693.08990 1362.0
+693.33386 845.3
+702.50464 750.2
+704.66272 960.5
+709.46350 715.4
+712.12390 688.1
+715.92773 766.7
+716.32520 932.9
+719.13422 1129.6
+720.47369 661.6
+736.03345 1231.8
+736.36285 1526.9
+736.69720 1236.4
+739.32306 949.4
+760.05249 1240.3
+760.38617 1840.2
+763.80920 613.6
+774.40808 7636.2
+775.40936 1893.8
+776.41083 649.6
+784.39856 722.9
+795.54889 1025.9
+796.70081 4070.0
+797.03552 5043.4
+797.36823 3567.7
+797.69928 2684.3
+837.09387 811.6
+885.94867 864.6
+886.45276 831.1
+887.49091 3913.3
+888.48950 1631.8
+957.43298 815.3
+1056.51843 954.0
+1057.26489 766.5
+1198.31348 3463.4
+1306.63501 598.8
+1407.16260 644.0
+1653.87244 686.1
+1740.47144 594.2
+1879.29053 5221.9
+1879.55518 17818.5
+1880.26880 639.9
+1907.08423 7370.7
+1907.77661 953.0
+1930.37305 926.3
+S	1473	1473	526.0252546
+Z	4	2100.06972
+133.14830 945.2
+143.83127 520.5
+156.18950 600.1
+165.77914 751.5
+171.87021 595.7
+172.17043 570.7
+182.65617 591.8
+198.89223 807.1
+199.16901 1418.8
+199.26692 4099.5
+199.36545 1085.9
+214.88394 653.1
+222.78018 566.9
+237.83327 575.3
+271.29666 868.9
+283.14371 13034.8
+284.14679 2212.0
+303.01349 572.0
+310.17709 1032.6
+311.13770 1045.2
+352.66418 650.3
+353.31042 565.0
+355.71799 1929.1
+356.22052 1051.2
+384.22955 2623.7
+384.73215 1116.2
+401.90668 580.6
+409.30432 619.8
+414.77960 585.1
+420.70380 2873.5
+421.20599 1249.7
+430.16980 625.0
+433.76288 10505.8
+434.26404 3910.5
+477.61224 1545.5
+477.94672 1076.9
+490.30453 5169.4
+490.80646 2171.3
+509.94949 1927.5
+510.28308 1409.9
+510.62042 830.3
+510.93921 535.9
+512.25018 791.3
+512.70288 588.3
+514.30695 1530.7
+532.59106 1987.8
+552.96179 2965.7
+553.29504 1287.0
+558.96704 1388.3
+584.75952 584.9
+591.30664 2607.4
+591.63843 3867.1
+591.97278 2325.4
+595.98291 1474.0
+596.31818 2061.1
+597.30908 48669.4
+597.64355 43230.6
+597.97760 16729.6
+598.31195 6849.8
+603.76740 622.1
+611.32739 1130.7
+616.65436 710.4
+617.77661 660.6
+622.33539 1472.9
+622.66931 2020.7
+631.65881 689.6
+640.98425 857.3
+646.33148 13135.4
+646.66620 12356.9
+646.99982 6045.6
+647.33527 2732.4
+647.66791 708.1
+647.77350 751.5
+647.88550 1032.8
+651.33191 1007.8
+654.81384 2086.5
+655.69360 1084.9
+656.02948 647.2
+676.63812 708.0
+710.43091 1879.6
+711.43372 823.0
+715.91211 747.6
+731.05200 721.0
+767.45380 2308.0
+768.45123 1653.6
+773.42163 915.9
+773.93884 929.4
+778.41309 975.7
+779.53662 572.9
+788.57483 539.0
+795.56342 1107.2
+811.32281 875.7
+816.18726 583.8
+842.41125 745.1
+866.52008 2131.3
+924.40613 1099.2
+1024.49353 794.4
+1198.31665 3385.1
+1253.16809 589.3
+1413.63477 732.4
+1459.73254 613.2
+1524.48730 551.5
+1525.27539 891.1
+1589.62305 561.3
+1820.25488 573.3
+1849.31177 564.4
+1878.43628 799.5
+1879.52917 20033.3
+1907.07178 7327.1
+1931.79968 787.6
+1960.09424 695.9
+S	1474	1474	450.4771896
+Z	4	1797.87746
+110.24814 577.4
+110.97595 612.4
+113.45066 734.1
+116.66159 591.8
+118.68842 508.8
+121.79686 2496.3
+121.96124 656.5
+124.30893 614.3
+187.75807 536.3
+198.88850 647.3
+199.17247 765.5
+199.24255 641.0
+199.27249 2308.7
+199.28090 1771.8
+199.37036 1202.5
+199.37915 751.8
+211.61848 586.1
+215.35553 560.9
+221.12823 4042.2
+233.54875 824.5
+237.13470 1149.0
+246.90811 577.0
+252.63181 2439.3
+255.22052 663.2
+271.45657 689.9
+272.89572 520.8
+278.62488 901.7
+281.85059 609.8
+294.17020 3811.0
+294.95615 688.8
+303.17712 1623.0
+311.13715 832.9
+316.54865 565.8
+318.15137 1915.0
+318.65457 708.1
+320.14169 14279.0
+320.64377 4869.2
+322.38391 528.8
+336.73135 536.6
+341.68457 27379.8
+342.18607 9517.5
+342.68814 1287.4
+343.70239 1139.4
+344.20660 1119.5
+351.57053 572.4
+366.16321 2169.6
+367.19662 4762.8
+367.68527 1124.3
+379.35382 614.5
+382.21252 735.1
+385.21805 1061.0
+391.21857 30718.4
+391.72009 12036.0
+392.22269 2834.8
+403.18787 1325.2
+403.51605 624.7
+410.89603 779.2
+411.89035 27394.0
+412.22470 18236.8
+412.52170 5249.2
+412.55786 5606.4
+412.85605 3269.1
+412.89252 1207.0
+413.18732 1102.4
+415.16162 4725.5
+415.64996 1555.4
+415.66855 1259.2
+416.26093 8782.9
+417.26440 1010.8
+418.52625 829.7
+418.86063 1174.7
+423.23428 825.4
+424.16507 1248.9
+424.66934 857.7
+427.49533 636.2
+430.31323 3165.3
+431.31635 1628.4
+431.75037 793.2
+432.73587 698.9
+433.96497 997.7
+434.23639 1175.9
+434.46548 1027.4
+436.68384 820.3
+436.95648 762.1
+461.69101 612.4
+470.57846 1349.0
+470.91028 1563.3
+471.24905 814.1
+476.27130 20865.5
+476.77261 9588.3
+477.27396 2426.2
+477.70370 9691.0
+477.93915 2889.2
+478.20538 5420.0
+478.27451 2869.9
+478.61285 740.6
+478.70755 1247.0
+482.60938 744.4
+486.24231 1408.2
+487.24771 567.0
+491.75027 1650.9
+491.95511 2061.3
+492.25018 940.7
+492.28720 1543.5
+492.62051 1064.0
+500.21475 4170.4
+500.30167 882.0
+500.71591 3260.3
+501.21432 757.5
+504.25494 6640.6
+505.25827 1490.8
+508.21060 696.5
+508.30908 720.0
+508.81107 1103.2
+509.31052 1167.5
+510.26910 603.5
+512.92834 980.7
+514.25818 1074.1
+514.58685 874.3
+515.63367 26164.5
+515.96796 21004.4
+516.26062 2504.0
+516.30237 8423.0
+516.63721 2196.5
+516.76575 712.9
+520.26166 3530.3
+520.76227 1461.0
+524.78119 1969.9
+525.27350 734.3
+527.28979 1034.9
+532.25372 633.1
+532.58362 1656.0
+532.61597 832.9
+533.78406 13447.2
+534.28583 7491.4
+534.78650 1986.0
+539.67792 725.5
+541.61481 1935.3
+542.28613 1088.2
+544.28107 1207.5
+545.30261 20311.7
+545.80255 1175.6
+546.30505 4902.4
+549.09387 657.1
+549.74951 3089.2
+550.24988 1663.4
+553.28571 1702.9
+557.27100 1095.9
+557.60638 864.5
+557.93829 754.2
+560.62262 5618.1
+560.79138 1599.4
+560.95685 4764.1
+561.29041 3923.2
+569.30457 597.7
+584.23322 4352.6
+585.23950 803.5
+587.79272 1022.9
+588.27356 1859.2
+588.61237 2093.0
+588.94531 810.1
+594.28070 108904.4
+594.61475 109080.3
+594.94867 65915.6
+595.28278 21228.8
+595.61749 3447.1
+599.30249 1433.5
+599.36993 1530.6
+601.25220 744.6
+601.79187 2859.9
+602.79065 699.8
+610.79675 3372.5
+611.29889 2027.9
+615.32678 7239.1
+615.84576 835.9
+616.32440 1571.9
+618.77179 1384.2
+619.27216 2271.4
+621.16022 645.5
+624.34308 1899.0
+624.84564 1475.1
+627.27765 1012.1
+634.85223 566.2
+635.29547 8793.0
+636.29602 2271.9
+659.86621 2301.6
+660.36444 1750.1
+673.38556 2040.1
+676.63300 1134.2
+682.36139 10307.4
+682.86176 745.2
+683.29047 2171.1
+683.36230 3399.8
+683.78955 1829.0
+684.29407 792.2
+714.39563 7053.5
+715.27454 3828.5
+715.39935 1903.3
+716.27686 1680.0
+716.39227 1013.6
+729.36078 923.0
+729.86633 826.5
+732.79303 624.4
+734.36237 2766.4
+735.36084 983.5
+775.26941 665.9
+781.42596 2082.6
+795.55170 902.8
+800.35577 1653.5
+801.35797 735.3
+803.85919 663.9
+830.30066 5702.2
+831.30231 2896.7
+845.43164 2541.6
+846.44141 1377.2
+900.34827 894.7
+901.33777 4232.9
+902.00684 691.4
+902.34277 1875.1
+903.33899 576.4
+999.42212 2020.3
+1000.41156 2740.7
+1001.41022 1241.2
+1057.23523 852.8
+1099.47327 2412.2
+1100.47339 790.7
+1126.18274 593.8
+1158.73181 626.4
+1188.09656 878.4
+1198.29932 3028.3
+1198.42676 648.8
+1278.82397 651.0
+1315.63293 617.5
+1382.58765 572.9
+1666.03125 652.0
+1715.70166 626.4
+1719.26953 556.1
+1799.61157 629.0
+S	1475	1475	543.737991267
+Z	3	1627.939
+Z	2	1085.628
+137.79663 682.8
+169.46996 586.7
+171.86725 610.3
+188.26259 689.8
+188.27304 1083.5
+188.28316 1753.5
+188.28911 1205.2
+188.29814 1053.3
+188.30836 1308.0
+191.05678 614.6
+198.88954 701.0
+199.16591 833.1
+199.19205 942.3
+199.24043 1234.1
+199.26323 1983.7
+199.27597 1959.8
+199.28911 1379.8
+199.36230 1002.9
+204.88687 602.2
+211.53979 541.6
+214.63678 538.1
+214.92226 539.3
+224.83711 609.5
+233.16440 1292.4
+241.43381 538.2
+255.26555 647.6
+256.01776 547.0
+257.61475 661.4
+259.96097 662.4
+269.72128 595.6
+271.60934 635.1
+279.82761 633.6
+287.50885 657.3
+342.24161 736.1
+345.15015 642.0
+350.28015 959.8
+368.43271 580.8
+396.17679 879.5
+415.25275 976.7
+425.89050 524.5
+428.72821 1865.1
+447.40802 551.7
+459.27905 7542.4
+473.59070 576.5
+482.60861 931.7
+483.27887 3528.4
+492.60364 593.9
+500.30490 139769.9
+501.30792 18850.0
+523.25940 884.4
+532.55786 2310.7
+549.09271 790.3
+552.16510 563.9
+620.29858 813.3
+628.30847 703.6
+639.92322 577.5
+646.66406 1342.4
+647.00177 799.4
+664.39563 699.6
+674.32214 691.0
+675.80603 5546.8
+676.30798 2290.6
+676.62262 594.2
+684.81152 7272.6
+685.31293 4800.4
+685.82721 632.7
+696.83490 645.4
+698.76971 618.2
+702.10614 628.5
+715.24445 566.6
+727.36609 609.3
+734.34113 1551.1
+734.84668 1248.4
+741.35260 1841.7
+756.37640 4960.5
+756.87860 2595.6
+763.27234 493.7
+763.30096 501.5
+795.36713 711.8
+822.18762 597.5
+856.45251 829.2
+861.79779 793.0
+917.57056 554.2
+974.03540 567.1
+1001.95184 715.4
+1009.62415 547.2
+1039.63928 586.3
+1057.22107 854.0
+1074.66089 595.3
+1076.17957 576.0
+1079.26733 761.9
+1198.24695 3461.7
+1426.47375 626.1
+1525.25427 764.3
+1777.42700 779.7
+1877.25732 704.8
+1877.77283 605.3
+1878.06812 721.7
+1879.07056 2186.2
+1879.49316 19887.1
+1879.90356 1953.7
+1880.21277 916.3
+1880.62341 971.1
+1907.05261 7543.7
+1918.68127 763.9
+1923.97766 656.1
+1930.40967 688.3
+1949.28210 594.9
+1983.89832 561.3
+S	1477	1477	644.5551621
+Z	4	2574.18935
+165.77646 643.8
+165.78459 645.5
+169.48094 604.8
+171.63872 703.2
+172.16386 487.9
+175.50645 559.6
+188.24052 710.0
+188.26715 2038.0
+188.28717 1881.9
+188.29741 1797.5
+188.30801 1596.4
+188.38005 558.7
+198.89174 740.3
+199.23553 920.2
+199.29488 620.4
+199.37102 1127.4
+207.12965 693.2
+237.36018 615.2
+249.12329 1170.6
+255.27112 597.4
+270.03336 714.9
+270.73663 587.2
+277.11792 2855.7
+280.16168 737.9
+289.15546 655.3
+299.13864 1052.9
+300.32086 702.9
+334.17661 975.6
+347.14001 750.5
+350.28180 858.9
+364.16437 6644.7
+365.16794 1567.3
+367.66916 563.8
+381.33087 705.7
+390.20102 778.0
+392.97043 639.2
+426.57050 685.3
+427.50906 933.2
+433.19897 1019.5
+445.20935 890.0
+460.16403 586.3
+464.21796 564.1
+473.26422 1541.0
+479.19171 2919.4
+484.40573 625.3
+489.74084 824.4
+492.89273 615.1
+496.57938 591.8
+498.20493 726.6
+502.56583 677.5
+508.91037 956.7
+517.29388 904.8
+522.55902 661.0
+532.53400 2187.9
+534.88184 647.0
+536.94098 1045.8
+537.27124 1284.8
+537.48816 557.4
+546.26923 1547.6
+546.60345 1086.3
+546.93829 766.8
+547.92822 817.4
+548.58521 871.0
+558.26740 2134.1
+558.77203 1881.8
+559.26874 1139.0
+567.75732 882.3
+570.60773 1738.0
+570.94202 2381.1
+571.27844 1555.8
+584.93079 941.0
+585.26837 1286.2
+588.77216 1126.2
+589.02185 1536.2
+589.52582 1187.0
+592.27386 4073.1
+593.27435 3192.8
+593.52563 2747.6
+593.77594 2134.0
+594.02667 2824.9
+594.27527 1490.1
+597.77844 22336.7
+598.02893 28391.2
+598.27924 36647.7
+598.53003 24073.8
+598.77972 11113.2
+598.97180 1417.6
+599.02911 4543.8
+599.30713 3086.2
+599.64026 1669.5
+599.97272 1373.7
+608.30273 2652.8
+608.63519 1315.9
+608.97125 2157.7
+609.30969 749.4
+616.28339 836.2
+618.76062 727.8
+622.79633 774.9
+623.04480 1099.7
+624.30090 1122.2
+624.80762 846.0
+625.54504 1083.2
+627.32147 4473.7
+627.61871 2207.2
+627.82593 1473.4
+627.95142 3466.7
+628.28271 3611.3
+628.61542 1290.7
+630.35754 746.1
+666.97058 5249.7
+667.30493 6957.1
+667.63794 6837.3
+667.97003 3934.8
+668.30713 1582.7
+676.61456 946.6
+676.64758 925.4
+677.31750 679.2
+684.31415 1546.3
+684.81299 997.8
+685.30170 776.7
+686.24475 630.1
+688.05829 609.3
+698.66272 2098.5
+698.99548 3411.3
+699.32837 4081.0
+699.66357 2551.8
+699.99756 1391.0
+704.66602 17059.5
+704.99982 24051.3
+705.33386 25137.2
+705.66754 17459.0
+705.81390 1736.7
+706.00201 7577.3
+706.33533 2829.1
+706.82037 1365.9
+710.61725 644.9
+735.27802 763.8
+735.67413 765.1
+736.33331 685.4
+737.68732 2331.1
+738.01550 1571.1
+738.34778 1706.4
+738.68958 1208.0
+741.15869 678.1
+741.67554 4678.2
+742.01135 4628.3
+742.34448 8506.0
+742.68005 4293.9
+743.01306 2480.5
+743.34711 1225.3
+747.67969 12621.8
+748.01434 17615.4
+748.34735 22067.9
+748.68195 14380.4
+749.01459 5974.8
+749.34796 1461.6
+749.68762 731.0
+752.30548 14255.1
+752.84198 1137.5
+753.30664 7039.4
+753.84613 1288.8
+754.30334 3621.8
+755.31976 927.1
+762.35748 4481.8
+762.85950 4070.9
+763.36383 2843.8
+766.35529 667.3
+767.02789 703.2
+783.45831 665.1
+785.03210 1908.0
+785.36462 1811.4
+785.69830 1638.0
+790.69910 7039.6
+791.03180 9661.9
+791.36682 14023.8
+791.70056 9661.4
+792.03430 5239.0
+792.36847 2666.6
+795.00067 697.2
+795.32727 1229.7
+796.19965 917.2
+796.70239 96947.5
+797.03699 154592.3
+797.37012 186877.4
+797.48047 1018.9
+797.70374 134151.3
+798.03754 67140.0
+798.37140 24064.8
+798.70642 7042.7
+798.86621 5201.3
+799.03656 1234.6
+799.36572 6378.7
+799.75366 1053.6
+799.86987 2963.1
+800.36957 1392.1
+805.39917 886.5
+806.40967 832.2
+818.90564 2425.0
+819.40027 3226.0
+819.90558 1505.9
+820.40967 965.3
+830.05652 753.3
+832.37897 1025.3
+855.40881 7552.4
+855.91052 8404.7
+856.41101 6385.3
+856.91638 2239.1
+865.38739 3587.2
+866.39301 2642.8
+867.39001 1051.7
+875.41907 1237.7
+875.91986 748.5
+877.89441 852.3
+911.95673 1358.6
+912.44855 1094.7
+912.95007 1426.4
+940.44495 806.4
+945.52521 981.3
+963.53876 874.6
+978.46527 1441.6
+979.48254 799.4
+999.94843 972.5
+1000.46063 953.9
+1000.95367 1281.6
+1001.97278 843.0
+1004.96240 741.5
+1012.97083 4512.5
+1013.47156 6945.2
+1013.97382 4512.6
+1014.47083 3171.5
+1014.98126 1554.3
+1056.50647 819.6
+1056.99524 1861.6
+1057.20862 729.3
+1057.24890 689.1
+1057.50378 1375.3
+1079.25110 756.4
+1115.53284 1782.5
+1116.53882 1620.4
+1121.97620 826.8
+1122.49194 806.5
+1125.54761 845.3
+1131.02039 800.3
+1132.00513 694.8
+1132.77380 656.8
+1140.37109 758.6
+1188.19263 1050.9
+1198.03027 596.2
+1198.18835 3568.3
+1274.55640 999.4
+1399.80310 662.5
+1525.30176 805.8
+1703.33679 628.4
+1716.62854 610.2
+1777.52979 647.7
+1807.05188 749.6
+1878.54602 788.8
+1879.54346 16753.5
+1880.02649 2398.5
+1880.60706 908.0
+1907.05566 7456.6
+1930.46375 778.6
+S	1478	1478	476.7275246
+Z	4	1902.8788
+121.79581 29342.5
+122.66326 6074.5
+129.50604 5964.3
+133.12683 10337.1
+168.48605 6395.3
+171.63464 8717.9
+180.03671 7600.0
+195.35333 6344.9
+195.53085 6196.6
+198.89154 9313.6
+199.16682 10773.5
+199.21136 11156.0
+199.23000 8278.5
+199.24275 8479.7
+199.26367 31752.3
+199.28387 16346.2
+199.34515 10117.4
+199.36453 6910.2
+199.38297 6859.4
+238.71866 9446.4
+243.54793 6862.6
+259.80759 6242.9
+271.29596 8654.3
+283.95895 6098.4
+308.87131 6214.3
+317.92676 5879.0
+337.95746 7314.3
+382.96936 6239.9
+383.36710 7648.8
+391.21747 15766.5
+405.26385 6012.8
+435.91721 6749.6
+445.71646 75455.0
+445.96661 121112.8
+446.21719 68100.4
+446.46478 16105.8
+446.70779 8500.1
+449.20984 15101.0
+449.46835 9460.9
+449.69977 12836.9
+449.96991 12075.0
+450.21893 2686909.8
+450.46939 2697677.5
+450.71967 1430057.5
+450.88278 10256.5
+450.96994 389831.1
+451.05524 6905.9
+451.12747 10179.2
+451.22278 35701.0
+451.48337 8846.2
+459.90552 5963.2
+460.96930 11345.5
+498.92303 6366.7
+532.50787 22427.4
+533.78510 12510.3
+534.28412 11518.0
+594.28003 65548.8
+594.61456 81504.4
+594.94806 53887.0
+595.28241 28137.6
+599.95563 290557.7
+600.28961 255486.5
+600.62402 118553.1
+600.95728 45107.8
+676.65448 11354.1
+682.13574 6204.1
+683.08893 7115.1
+690.19879 5699.1
+764.24316 6136.7
+795.55530 12965.7
+1021.06317 12258.9
+1057.26270 7929.3
+1198.13232 35005.8
+1356.85559 6896.0
+1391.21338 6636.7
+1525.28418 9259.4
+1561.86890 6118.1
+1805.55237 8323.4
+1852.34119 7444.9
+1877.46936 8208.5
+1878.50403 8244.3
+1879.57776 220699.2
+1907.01709 83966.6
+S	1479	1479	450.4712696
+Z	4	1797.85378
+120.65775 676.7
+121.79509 2022.6
+124.84558 636.6
+126.06354 514.9
+153.81148 589.8
+163.13832 531.7
+165.08754 523.1
+173.56642 680.8
+175.11882 771.2
+182.31732 615.4
+199.15636 627.0
+199.17487 859.9
+199.23178 548.1
+199.23849 507.4
+199.25542 2094.4
+199.26308 2570.4
+199.27278 1779.0
+199.36174 620.3
+220.10838 792.9
+237.13451 3924.7
+249.09724 785.2
+255.61830 726.5
+262.59216 611.1
+278.13177 828.7
+278.62421 2391.9
+279.12512 1903.4
+286.14816 852.1
+292.13007 711.4
+292.75754 558.0
+294.17136 2001.6
+302.13086 585.0
+303.17743 3782.8
+311.13934 848.9
+320.14206 25965.8
+320.64343 9285.8
+321.14496 1788.7
+323.67300 1649.6
+328.65445 1463.6
+336.20224 1979.7
+341.68475 54940.9
+342.18622 20883.0
+342.68753 2884.2
+343.18680 764.5
+366.16379 3192.3
+371.13855 738.0
+373.70004 1112.1
+382.21356 1335.0
+384.45462 571.7
+391.21881 66442.6
+391.65350 842.6
+391.72015 24678.3
+392.15015 625.2
+392.22168 5810.3
+392.65204 1494.5
+392.72296 733.4
+393.15323 761.2
+397.85403 559.9
+400.49902 579.9
+403.18961 2645.8
+403.52319 1559.8
+407.24277 757.1
+411.88983 3692.5
+412.22418 2232.0
+412.52127 10754.5
+412.85568 8103.6
+413.18933 3322.7
+413.52017 1181.6
+415.16208 12544.0
+415.64871 3353.1
+415.67203 1968.8
+416.16403 1222.1
+416.26099 16674.2
+417.26459 2925.6
+418.52402 2780.9
+418.85828 1706.9
+419.19482 1022.5
+423.23312 1213.5
+423.73706 926.1
+424.16733 3368.0
+424.66812 1063.1
+427.52768 607.2
+428.16934 2342.1
+428.67456 816.4
+431.74911 910.3
+433.96228 2587.6
+434.21280 2507.4
+434.46475 1362.0
+436.68143 905.8
+437.20514 636.3
+446.35602 596.0
+455.53308 761.2
+465.24561 741.6
+467.26593 795.7
+467.77271 642.3
+470.57602 5176.5
+470.91049 2793.5
+471.24680 1608.8
+476.27124 41996.5
+476.77283 19471.1
+477.21643 888.3
+477.27432 5554.3
+477.70392 21018.3
+478.20554 11221.6
+478.70578 3828.4
+479.20529 1687.5
+483.90018 641.6
+483.95044 519.3
+484.23572 966.6
+486.21741 2183.7
+486.72516 719.2
+493.22888 1038.2
+500.21484 9323.4
+500.71698 4657.6
+501.21811 1948.1
+504.25797 1309.1
+507.26157 711.0
+509.22107 1014.6
+509.72101 597.0
+514.25574 1383.8
+514.58966 1912.8
+515.96985 617.4
+516.26630 2854.3
+516.77039 988.5
+524.77942 4163.3
+525.28082 1999.8
+527.29419 1277.8
+532.56976 2105.7
+533.78442 26296.9
+534.28589 18597.4
+534.78772 6128.8
+535.91534 1339.3
+536.25470 1103.0
+541.93793 594.4
+544.79260 702.2
+545.30286 44410.2
+545.80145 2275.5
+546.30597 12550.5
+547.31018 2121.3
+549.74854 5727.2
+550.24945 3225.6
+550.74872 834.6
+552.54700 549.9
+557.27032 4359.7
+557.60510 1914.0
+557.94000 1530.5
+558.75348 660.9
+561.60468 1621.3
+561.93298 1530.6
+562.26660 1020.3
+569.30426 1400.6
+569.79810 796.8
+583.25061 830.9
+584.23431 9515.6
+585.23846 3310.6
+588.27618 2917.4
+588.61133 5293.9
+588.94568 2307.3
+589.27039 1510.5
+592.75250 876.9
+593.08496 1149.9
+593.52704 816.7
+593.85095 948.5
+594.28113 214400.9
+594.61499 227842.3
+594.67883 973.5
+594.94879 128136.8
+595.04865 1034.8
+595.28278 54746.9
+595.37531 1014.8
+595.61633 17531.0
+595.81720 1054.4
+595.95001 4831.2
+596.15173 1208.8
+599.30420 3032.5
+599.80579 1551.3
+601.26215 1263.7
+607.09766 654.9
+618.28094 965.7
+618.76837 4969.1
+619.26978 2576.3
+627.27509 1845.6
+628.27856 856.2
+653.02155 622.4
+673.38586 2889.1
+673.52222 514.3
+678.93011 635.3
+682.36169 22176.6
+682.79517 1156.9
+683.29114 3780.3
+683.36456 7261.8
+683.79022 1556.4
+684.29443 1121.6
+684.36951 1177.5
+714.39746 1031.3
+715.27325 7456.5
+716.27747 3859.4
+729.36084 2528.0
+729.86462 1556.2
+732.29999 898.8
+740.33551 839.7
+745.25275 576.0
+765.54688 541.3
+781.43042 4242.7
+782.43280 2089.3
+791.74780 628.9
+795.56976 1115.8
+803.86597 1352.9
+804.36719 1146.6
+830.30145 14763.1
+831.30328 6215.0
+832.30280 1448.2
+883.33643 1005.0
+900.35248 2345.5
+901.33704 10205.2
+902.34076 4851.2
+903.33740 718.1
+918.36774 1283.0
+919.36847 1035.7
+999.42181 4772.7
+1000.40979 6887.9
+1001.41351 3767.9
+1002.40674 1571.8
+1018.43756 821.7
+1047.45972 579.5
+1057.27881 737.4
+1075.16406 566.5
+1099.47620 3381.5
+1100.48291 1980.4
+1101.47729 975.5
+1188.24121 1006.7
+1198.27271 3535.3
+1552.25732 577.7
+1679.77698 598.0
+1699.25049 553.8
+1752.86963 617.4
+1777.46912 898.3
+S	1481	1481	644.5601071
+Z	4	2574.20913
+165.85522 696.9
+171.28447 634.6
+171.63524 533.0
+172.19771 592.3
+177.47784 594.3
+198.89046 1342.0
+204.35492 717.5
+210.14523 602.5
+220.14418 616.4
+239.66046 528.4
+239.66661 524.9
+249.12343 1215.0
+259.51105 605.3
+260.64661 573.3
+261.16095 620.0
+261.27032 557.9
+264.64166 607.9
+265.30359 546.0
+271.13074 620.3
+271.15057 648.1
+271.30627 792.6
+272.58307 611.2
+277.11819 1811.9
+278.23486 579.1
+282.86646 570.6
+286.16132 542.8
+289.15463 978.3
+308.90634 667.9
+317.29056 610.9
+340.77014 639.5
+350.27664 645.3
+364.16434 4959.8
+373.29501 610.1
+376.65607 714.2
+387.25052 609.0
+422.22876 598.0
+427.54834 579.0
+433.20056 958.6
+439.01074 601.4
+444.23785 685.1
+447.73041 601.0
+463.21814 1051.6
+466.51590 680.8
+473.26648 809.1
+479.19055 1376.2
+508.57806 874.4
+523.68799 580.5
+532.57080 1495.6
+537.27240 671.5
+546.60333 959.8
+558.26581 1859.4
+558.77026 1550.1
+570.60809 2750.2
+570.94568 1258.7
+584.33203 598.9
+592.27637 2714.8
+593.27643 1688.6
+593.52319 2358.8
+593.77454 2534.3
+594.02887 910.5
+597.77850 22223.0
+598.02869 33601.7
+598.27911 21302.5
+598.52917 8884.1
+598.77966 4625.7
+598.97101 3331.8
+599.02875 906.4
+599.30573 3153.2
+599.63757 1187.0
+608.30426 2724.6
+608.63660 2383.6
+608.97382 1284.7
+609.31342 667.3
+613.28125 2287.7
+613.78406 1195.9
+622.79944 687.4
+623.04395 1134.5
+624.30023 834.9
+627.32050 3412.4
+627.61438 2688.8
+627.95074 1775.4
+628.28094 1428.3
+628.59906 606.7
+630.74036 598.0
+639.75513 727.6
+666.97119 4265.5
+667.30481 6912.4
+667.64063 2662.5
+667.97369 963.8
+675.65253 639.0
+675.98267 1036.6
+676.63605 1005.7
+681.54761 718.0
+684.30762 737.9
+684.80664 880.6
+685.80267 734.1
+687.34723 667.1
+691.80237 693.2
+698.66412 2243.6
+698.99622 2696.6
+699.33240 2529.5
+704.66510 18007.7
+704.99915 20115.4
+705.33398 15197.4
+705.66663 7529.7
+705.81873 1758.0
+706.00098 2577.4
+726.94928 711.8
+731.12720 828.3
+737.68109 2303.7
+738.01520 2279.9
+738.35101 899.3
+739.15143 639.7
+741.67670 4594.1
+742.00983 5012.6
+742.34521 4231.2
+742.67877 1683.2
+743.01349 953.9
+747.67957 13507.7
+748.01422 16950.2
+748.34747 13247.6
+748.68213 4895.7
+749.01196 740.3
+752.30511 11491.1
+752.84027 1400.4
+753.30652 4316.5
+754.30890 1682.7
+762.35638 1907.7
+762.86060 2956.1
+763.36639 888.2
+785.02423 2577.7
+785.36560 1439.2
+790.69824 7276.2
+791.03284 10375.4
+791.36566 8167.8
+791.70197 5448.1
+792.03284 2692.1
+792.36798 704.9
+795.87775 730.1
+796.70227 99764.5
+797.03656 144421.7
+797.36963 104972.1
+797.70349 54169.7
+797.81348 684.0
+797.86279 798.3
+798.03796 26275.3
+798.19684 798.4
+798.37195 6583.5
+798.67822 725.8
+798.86633 4752.3
+799.36719 3750.3
+799.87244 2214.1
+818.90350 1650.6
+819.40326 2330.9
+819.90167 1186.7
+832.37732 1047.3
+833.51654 681.4
+855.40869 5893.0
+855.90979 6141.1
+856.40625 2278.4
+865.38611 3053.7
+866.39270 1262.1
+867.38373 761.9
+873.18585 689.3
+911.94635 1154.8
+945.51831 999.3
+970.89764 707.5
+1000.68665 726.0
+1001.49371 1497.4
+1002.48944 916.2
+1012.96790 3368.7
+1013.47498 4297.9
+1013.97449 3556.2
+1014.47241 1123.6
+1051.87122 591.9
+1056.97473 609.8
+1057.23218 579.7
+1063.50977 760.3
+1086.84766 743.9
+1115.52722 859.0
+1116.53735 1033.9
+1122.48682 922.0
+1125.54749 674.0
+1198.27429 3251.0
+1235.59546 593.2
+1601.16138 602.6
+1761.75684 636.9
+1878.91882 1269.8
+1879.52612 19547.3
+1879.80164 3094.3
+1880.11951 1418.1
+1880.87183 945.9
+1907.02136 7144.6
+1918.73376 938.5
+1930.59082 951.0
+S	1482	1482	450.4754196
+Z	4	1797.87038
+111.35884 673.5
+112.93581 539.3
+113.45461 663.7
+114.92051 518.2
+116.22521 562.0
+120.67905 523.7
+121.79601 2598.3
+125.35912 635.0
+125.39758 563.0
+125.47404 606.9
+128.26810 654.7
+128.56584 705.0
+131.85550 528.7
+153.20354 571.9
+165.77698 841.4
+169.70857 751.7
+171.63680 783.6
+198.89198 966.8
+199.15782 732.1
+199.17982 9580.6
+199.25583 2508.1
+199.27422 2157.2
+199.29637 1058.2
+199.31079 653.0
+199.35316 723.1
+199.37175 920.0
+199.39261 834.1
+200.13989 693.6
+200.18263 1150.7
+217.06287 531.0
+217.58551 593.3
+227.17506 2424.6
+238.71800 703.7
+240.73680 531.4
+244.17174 1746.6
+261.93173 602.6
+289.18900 783.1
+294.17249 823.1
+303.29700 500.6
+319.17245 2322.2
+320.14188 4421.1
+320.64413 1174.2
+322.55844 568.0
+327.15018 531.4
+341.68451 13412.1
+342.18747 2376.7
+342.24860 600.5
+356.19412 1065.8
+381.55920 1365.7
+381.89539 1301.9
+391.21844 15659.5
+391.72021 4765.5
+405.15414 626.2
+409.23117 709.6
+412.52170 2614.9
+412.85391 786.8
+413.21893 1238.8
+415.16153 1828.1
+415.65347 1640.0
+416.26065 3738.2
+418.21777 914.2
+418.52682 768.3
+419.70670 1298.7
+420.22290 1014.1
+420.72302 960.3
+424.16946 1154.8
+432.72406 1052.6
+436.24243 3271.6
+436.47531 716.1
+436.57709 3173.0
+436.91577 767.1
+469.88635 941.1
+470.57449 834.3
+476.27136 9834.2
+476.77255 2424.6
+477.70407 5504.7
+478.20538 1779.0
+484.54071 682.3
+491.95389 727.6
+500.21191 1351.2
+501.23660 10381.1
+501.73834 5691.0
+502.24057 1441.3
+503.31863 1304.6
+503.80817 640.2
+504.31839 854.5
+505.95764 2175.4
+506.29242 1275.8
+513.25378 740.4
+515.63507 1471.0
+515.96777 1129.0
+516.30756 842.7
+525.30383 1065.5
+528.71039 1307.7
+532.59961 1888.6
+533.78424 7034.7
+534.28540 2097.2
+544.99420 719.9
+545.30273 9515.7
+546.30713 1169.7
+549.74524 4428.0
+550.24603 2153.5
+550.31372 713.6
+550.62695 2455.5
+557.27100 778.3
+558.75000 112046.3
+559.25122 63566.7
+559.75226 22166.8
+560.25397 5005.9
+560.65033 659.0
+560.75995 1292.9
+562.80731 4862.0
+563.30914 3783.1
+571.81244 4290.8
+572.31384 2584.0
+572.81116 1413.7
+584.23480 1584.8
+586.75299 783.5
+588.27606 1177.7
+594.28033 58480.5
+594.61462 44325.7
+594.94836 15649.3
+595.28320 2639.4
+596.27728 1716.3
+596.69098 535.3
+613.35913 1138.6
+615.29114 12403.5
+615.79303 7225.8
+616.29376 3176.8
+618.77802 890.8
+631.37671 2663.9
+632.38666 815.3
+636.94495 598.5
+646.37390 578.8
+668.30615 1271.6
+676.64233 1049.5
+682.36176 4702.8
+683.28986 802.3
+683.36359 906.8
+715.27155 1480.5
+716.28259 813.0
+743.11395 626.1
+778.15497 660.7
+795.55383 1006.0
+830.29742 2678.1
+831.30511 1527.8
+838.41541 842.4
+862.29114 661.8
+901.33606 2066.8
+902.34143 938.5
+912.18188 589.9
+938.93817 649.7
+999.42310 931.1
+1000.40289 1136.4
+1001.06573 680.3
+1020.91028 871.2
+1057.24817 698.5
+1198.34155 3597.8
+1332.96875 532.0
+1641.43726 556.1
+S	1483	1483	645.3128246
+Z	4	2577.22
+171.63896 800.2
+176.58096 532.7
+185.91748 645.8
+187.47493 591.8
+188.24483 634.8
+188.25668 605.2
+188.26595 1182.5
+188.27632 1077.5
+188.28416 817.1
+188.29433 974.3
+188.30438 956.5
+198.89214 780.6
+199.22536 664.2
+199.23386 636.9
+199.29047 1438.8
+199.37851 775.8
+226.06537 596.3
+228.38306 539.9
+245.84760 536.6
+247.12128 706.2
+277.11835 1546.2
+288.20297 5005.6
+321.38620 696.2
+332.73621 590.2
+340.11371 616.9
+357.78021 776.8
+364.16418 4245.9
+369.69174 594.6
+376.65598 1267.9
+377.98657 613.6
+390.20139 752.5
+394.11465 577.4
+399.68790 644.9
+427.52966 893.3
+433.19858 1036.9
+457.44858 653.0
+463.21777 831.9
+465.79773 666.3
+479.18982 1814.5
+482.63226 622.8
+532.55798 1860.8
+534.79236 891.1
+537.66492 684.2
+543.74377 1039.7
+546.27209 832.0
+546.60724 942.7
+547.91949 1055.1
+556.43378 571.1
+558.26599 1505.9
+558.77173 1482.3
+561.59668 635.7
+563.26538 646.2
+570.60364 1587.0
+570.94220 1917.1
+579.22266 605.9
+592.27228 2855.9
+593.27728 2322.1
+593.52795 1643.6
+593.77411 2040.3
+597.77808 24101.4
+598.02863 29987.8
+598.27954 20112.0
+598.52911 11201.9
+598.78082 4323.3
+598.96948 2235.6
+599.02887 1625.6
+599.30829 2228.3
+599.63989 804.4
+608.30341 3383.3
+608.63556 2392.1
+612.28857 698.2
+613.28180 5434.6
+613.78412 3050.7
+615.50726 594.3
+622.54663 1448.2
+622.79730 1497.5
+623.04340 697.7
+623.30182 1166.3
+625.31201 766.6
+626.13330 596.5
+627.31879 2572.0
+627.61426 2520.8
+627.94769 1646.8
+628.28705 973.1
+654.57178 639.8
+662.65240 855.4
+666.97009 4857.5
+667.30481 3966.5
+667.63916 2822.8
+667.97363 1199.2
+674.29584 1059.0
+674.79205 1102.3
+676.63184 826.0
+681.34247 866.3
+684.30933 785.4
+698.66266 2640.8
+698.99878 2472.0
+699.32806 1671.6
+703.33630 778.8
+704.66571 17977.2
+704.99921 17454.0
+705.33319 13051.5
+705.66583 6546.4
+705.72540 1003.7
+705.81769 1805.3
+706.00128 2316.0
+706.31006 1149.3
+716.13525 1336.4
+719.53497 1429.4
+719.73340 1921.1
+719.93481 934.6
+720.13580 1601.8
+735.27734 666.1
+736.37952 1058.0
+737.68176 2199.4
+738.01489 1743.5
+738.35229 938.7
+741.67609 3927.5
+742.01099 5055.0
+742.34674 4203.7
+742.55444 1070.2
+742.67456 1967.0
+747.67938 14492.5
+748.01392 15350.1
+748.34698 9758.6
+748.68066 6474.2
+749.01501 2334.6
+749.34491 779.5
+752.30499 10991.0
+753.30597 4244.1
+754.30945 1846.1
+760.04620 1384.3
+760.38037 699.7
+762.36084 3001.4
+762.86395 2203.5
+763.35663 1420.1
+784.68152 686.6
+785.03040 1430.0
+785.36517 1995.4
+787.72266 806.9
+790.70001 6388.5
+791.03174 8302.6
+791.36621 8234.9
+791.69934 3978.9
+792.03503 1859.1
+792.36902 654.8
+795.58020 762.8
+795.87872 912.3
+796.70227 117037.6
+796.79730 708.0
+797.03662 145273.9
+797.36963 104665.1
+797.70361 59120.6
+798.03766 24752.2
+798.37170 9004.5
+798.55383 882.3
+798.71582 843.2
+798.86646 4513.7
+799.07837 752.7
+799.36481 3221.5
+799.43665 1111.9
+799.74994 640.7
+799.87201 1850.4
+818.90118 1384.6
+819.40466 1916.1
+819.90228 955.7
+821.37946 755.2
+821.86206 1154.2
+830.05762 788.6
+832.37891 1357.3
+841.40271 803.0
+855.40839 6331.4
+855.90991 7461.2
+856.40625 1241.6
+856.91229 1238.5
+858.01556 983.5
+858.47119 825.8
+865.38434 2831.0
+866.39130 1096.4
+871.62842 620.0
+874.76300 1009.8
+884.65161 795.8
+886.44971 817.0
+911.94885 1445.7
+912.44769 1025.6
+945.50751 782.8
+1001.48895 11714.8
+1002.49121 5438.2
+1003.49255 886.5
+1012.97235 3864.6
+1013.47192 3658.2
+1013.97076 2421.0
+1014.47772 1316.0
+1021.15082 584.3
+1046.51306 1161.1
+1056.50598 992.7
+1057.22778 684.6
+1086.57727 920.1
+1096.19250 681.2
+1110.69092 616.5
+1115.53223 1067.6
+1125.57361 722.6
+1198.24768 2923.9
+1337.86377 658.1
+1368.40808 716.1
+1543.43152 816.6
+1777.57593 805.7
+1782.18481 590.7
+1879.15930 2824.4
+1879.50574 19622.5
+1879.85828 2905.9
+1907.05835 7199.9
+1930.55066 1007.8
+S	1485	1485	1879.95340793
+Z	3	5636.585
+Z	2	3758.059
+507.37552 562.2
+524.96484 660.8
+532.52515 2000.8
+538.89191 633.4
+618.92480 639.8
+630.37103 823.4
+658.53638 644.9
+674.47296 643.0
+676.62140 924.6
+715.40173 670.0
+731.06549 733.0
+740.00336 588.9
+896.76666 615.7
+1198.17969 3031.3
+1578.81250 648.0
+1856.53467 618.7
+1878.82593 1750.2
+1879.48413 19609.2
+1879.76746 2553.7
+1907.05469 7813.6
+1930.46399 876.2
+S	1486	1486	1907.2948246
+Z	5	9531.435
+517.44812 605.0
+532.28363 575.5
+532.57086 2002.9
+549.12476 706.1
+575.84052 544.3
+676.61462 688.9
+698.21375 581.1
+795.55798 865.0
+853.32294 828.5
+867.53326 558.0
+997.46643 633.2
+1021.97894 594.7
+1057.20996 788.7
+1177.30957 578.4
+1198.28040 3144.6
+1226.57104 648.2
+1549.69800 710.9
+1811.17334 824.5
+1878.31323 699.4
+1878.88940 1208.4
+1879.46729 18980.4
+1880.30518 1160.2
+1907.05469 7380.7
+1918.65344 758.0
+1930.49133 1005.0
+S	1487	1487	1198.75440793
+Z	3	3592.988
+Z	2	2395.661
+317.03015 711.7
+369.97614 572.3
+432.04507 525.1
+472.90100 701.1
+483.19525 699.4
+486.62234 565.5
+504.39569 651.4
+518.78937 628.2
+532.56354 1826.9
+552.36218 592.0
+578.31848 677.1
+608.51294 684.8
+696.69836 591.6
+704.05963 618.7
+711.38745 709.4
+795.56726 912.8
+931.42505 779.5
+1021.07257 699.1
+1029.35754 589.0
+1198.26233 3353.8
+1504.61902 570.8
+1877.72705 1049.0
+1878.36340 595.7
+1879.06812 1887.4
+1879.20374 2138.1
+1879.51831 19611.2
+1880.00818 1348.9
+1882.46106 825.6
+1907.07983 7165.2
+1930.47473 780.4
+S	1489	1489	1879.99799127
+Z	2	3758.148
+Z	3	5636.719
+532.57404 1807.8
+542.89465 604.2
+544.68793 568.1
+594.17767 782.7
+630.37018 759.9
+647.58771 727.3
+653.21759 744.0
+676.63861 686.6
+688.57831 707.5
+742.23901 757.6
+795.55817 1046.4
+1020.92474 645.0
+1057.25464 762.8
+1198.27942 3142.0
+1525.33374 1114.2
+1619.47034 581.4
+1785.83716 829.4
+1879.53076 18705.2
+1880.62903 959.8
+1907.00281 7170.7
+1918.71082 914.5
+1930.48865 1031.6
+S	1490	1490	410.2271296
+Z	4	1636.87722
+102.68873 597.8
+104.00694 593.5
+114.00944 471.2
+114.94941 536.5
+115.81676 612.1
+116.47378 526.6
+121.79641 2435.2
+131.65790 563.8
+136.07510 3766.5
+144.37901 540.0
+145.68005 563.9
+147.65100 589.7
+165.77760 799.5
+171.63921 687.4
+171.94911 515.7
+175.44476 661.2
+182.76756 565.5
+198.59451 629.5
+199.17894 2362.1
+199.23546 881.3
+199.24521 632.7
+199.25285 824.3
+199.27086 3502.2
+199.28069 751.6
+199.30342 676.1
+199.36931 1215.9
+200.06361 559.0
+206.69173 631.5
+220.26289 602.7
+221.12782 9291.2
+222.13173 854.9
+222.50018 572.2
+233.54927 707.3
+235.14349 13987.6
+236.14734 670.4
+239.75002 583.6
+249.12329 1798.1
+257.65878 1332.0
+263.13864 2112.0
+263.17474 550.6
+268.76923 655.8
+276.03766 513.7
+280.15811 623.7
+304.85056 2545.2
+305.18491 1777.3
+326.18146 643.6
+330.16455 642.1
+355.07828 594.8
+366.42639 589.8
+370.20776 2846.4
+370.71234 920.9
+378.16592 1720.6
+388.20447 1259.0
+400.02612 677.3
+425.89859 1328.5
+426.23178 1022.8
+426.74973 4668.2
+427.25662 1804.2
+427.51138 577.4
+447.50198 4862.8
+447.75247 6372.9
+448.00421 3182.7
+448.25381 1897.3
+448.50543 1128.3
+462.29755 564.6
+463.59097 9111.8
+463.92563 4721.1
+464.25858 2372.9
+464.59845 1020.0
+474.27072 711.4
+475.25562 3236.2
+475.75073 1095.7
+476.76917 1133.4
+476.80487 6667.3
+477.30655 3731.0
+477.80817 922.3
+482.98456 796.8
+484.26230 88693.4
+484.76355 38158.7
+485.26480 6545.3
+491.79074 572.9
+500.41953 657.0
+501.29462 646.7
+510.26532 5637.8
+511.27127 1111.1
+520.94495 4829.8
+521.27820 4058.1
+521.61212 2724.2
+528.28015 661.1
+530.77216 597.2
+532.56891 1724.6
+538.84503 670.6
+541.36566 665.2
+556.81079 2510.9
+557.30212 1653.0
+559.30511 906.2
+561.58514 670.6
+562.29175 1854.2
+562.79718 1128.7
+565.79340 48738.9
+566.29474 27568.1
+566.79645 6259.1
+581.79926 16009.5
+582.30133 9131.2
+582.80127 3620.0
+583.30127 774.9
+638.33478 1602.2
+638.84534 1246.4
+639.34839 645.9
+676.65167 865.6
+736.75995 513.0
+739.40356 954.7
+779.10339 551.2
+795.56384 973.0
+876.15460 564.1
+1198.13538 530.3
+1198.26550 3138.4
+1317.46082 639.1
+1525.30237 864.0
+1644.44910 777.2
+S	1491	1491	666.0947121
+Z	4	2660.34755
+188.24689 1152.9
+188.27094 2656.3
+188.28035 2464.3
+188.29193 2345.1
+188.30638 1642.9
+188.31337 1693.1
+192.44287 1236.7
+198.45938 1295.5
+198.89043 1711.6
+199.17613 1888.9
+199.27402 5969.3
+199.37181 2261.1
+209.50641 1160.1
+233.56403 1549.1
+238.41547 1322.9
+240.05325 1136.0
+255.28319 1133.5
+271.09058 1259.9
+271.80710 1561.5
+336.77875 1345.1
+337.59390 1387.1
+363.64914 1295.8
+388.30151 1140.8
+428.41821 1339.1
+431.59695 1427.2
+482.64166 1842.1
+505.53125 1264.8
+522.71002 1317.6
+532.57257 3576.8
+534.52545 1211.1
+537.54297 1444.5
+623.35248 1663.7
+626.41980 1421.0
+662.05261 1424.3
+670.74579 1339.7
+676.63617 1982.7
+718.24341 1699.1
+795.56104 1764.9
+848.99054 1381.1
+868.98090 1376.7
+969.78925 1364.2
+1057.24817 1954.9
+1198.27942 6767.8
+1488.92871 1584.6
+1525.37341 1938.4
+1777.48303 1616.4
+1876.83911 1591.8
+1879.11328 3872.4
+1879.52722 41293.2
+1879.94678 4161.6
+1880.14893 1711.9
+1880.54163 1375.7
+1907.04785 15627.0
+1918.71558 1925.4
+1930.51978 1480.7
+S	1493	1493	646.780407933
+Z	2	1291.713
+Z	3	1937.066
+167.14278 560.0
+168.51746 528.9
+169.04671 671.5
+178.86281 604.6
+184.07867 639.9
+188.72403 600.0
+191.78293 507.7
+192.24257 603.5
+195.50615 527.6
+199.29004 634.6
+199.37183 799.1
+222.94139 615.8
+234.58997 627.5
+237.12332 892.3
+246.18121 1836.6
+255.30498 518.3
+258.60648 582.7
+280.15808 597.7
+286.02704 565.2
+288.20319 2114.7
+330.18182 550.5
+352.45288 608.7
+360.18729 1231.7
+364.16446 1297.1
+395.36652 594.8
+396.79684 691.9
+419.41785 605.5
+427.51001 1023.2
+428.88626 586.4
+446.25940 623.4
+450.15872 621.3
+455.15881 679.1
+468.26682 901.7
+479.71048 559.1
+512.27661 659.4
+528.72211 889.9
+532.54987 1852.8
+558.27142 777.2
+560.78223 589.7
+560.90631 633.8
+567.76318 1352.8
+570.94073 893.4
+588.83887 10699.2
+588.99957 637.8
+589.27545 947.0
+589.34125 3541.2
+589.82587 839.4
+591.28827 811.9
+592.27582 1532.3
+593.27472 992.4
+593.53137 781.1
+593.77283 849.8
+597.77814 8755.9
+598.02856 11817.9
+598.27850 8159.7
+598.52960 4389.9
+598.77643 980.8
+598.97046 1005.1
+599.30847 701.6
+605.47900 607.8
+608.30243 994.1
+608.63690 1587.1
+608.97595 1152.3
+613.28400 1649.9
+613.78290 9750.5
+614.28314 3718.1
+614.77942 804.9
+619.33752 1124.9
+623.04163 780.1
+627.32227 567.5
+627.94434 978.9
+628.33752 693.1
+630.35956 663.6
+638.35333 703.6
+667.30695 1420.3
+674.29565 1018.7
+674.79596 1179.2
+676.63721 1181.1
+693.57538 794.4
+704.66528 4301.1
+704.99817 3822.2
+705.33209 4653.8
+705.67578 955.8
+716.13562 828.0
+716.33331 1250.9
+723.35205 661.4
+737.69440 884.7
+741.67584 1146.3
+742.01227 1391.2
+742.33887 1031.8
+747.68036 2587.0
+748.01233 5372.1
+748.34424 3119.3
+748.67316 1523.4
+752.30450 3259.3
+753.30780 1107.7
+758.41394 1005.1
+760.04852 908.8
+760.71442 664.6
+762.36346 651.2
+762.85480 880.7
+790.69916 2571.6
+791.03210 2837.3
+791.36798 2191.9
+795.57025 871.1
+796.70184 35852.7
+797.03644 45492.9
+797.37006 33097.9
+797.70428 15547.6
+798.03857 5581.0
+798.37054 2242.7
+798.86029 1066.1
+799.37152 999.3
+800.61969 698.7
+818.44159 834.1
+819.40625 947.1
+837.40936 872.6
+846.44757 1606.6
+855.40802 2212.7
+855.91211 2775.5
+856.40369 1070.0
+875.09442 887.0
+875.42456 988.8
+883.48962 626.5
+887.44580 708.2
+892.44220 732.0
+910.45886 2216.8
+911.45837 785.7
+917.48364 2727.4
+931.49023 2088.3
+988.48633 861.5
+1001.48798 4155.1
+1002.49481 2126.5
+1013.48395 940.9
+1013.96246 1122.9
+1021.03278 596.9
+1021.09216 553.9
+1030.55969 791.5
+1046.52356 17985.9
+1047.52893 5626.6
+1087.56274 1123.6
+1088.57507 1122.3
+1145.59058 5736.8
+1146.58984 1384.7
+1188.07764 737.1
+1198.23572 2927.8
+1427.53088 636.8
+1447.19226 619.5
+1525.29382 886.2
+1878.29785 712.0
+1878.80127 1245.5
+1879.08533 1025.9
+1879.53870 19749.5
+1880.03076 1034.6
+1880.24060 1231.1
+1905.84644 764.4
+1907.01843 7295.5
+1930.45325 970.4
+1931.91516 987.7
+S	1494	1494	459.705407933
+Z	3	1375.841
+Z	2	917.563
+116.18003 647.5
+121.01340 657.6
+121.79765 2187.9
+128.90276 562.8
+133.08551 2720.8
+147.17496 571.5
+157.24158 558.1
+160.13486 512.2
+165.77756 705.9
+169.47725 604.4
+171.63783 787.5
+175.11864 835.3
+177.11182 6046.0
+182.75417 669.4
+194.95891 546.5
+198.89336 894.2
+199.18153 1703.4
+199.24722 1002.7
+199.25592 1620.6
+199.26649 1201.1
+199.28075 2446.5
+199.37279 966.1
+214.50124 580.4
+216.52153 601.4
+220.85727 621.2
+221.13779 4587.9
+223.15364 1535.9
+223.72382 487.4
+232.00749 680.4
+238.72093 688.3
+239.14810 1830.8
+243.07916 880.3
+253.64815 701.8
+260.10587 882.4
+265.16415 3842.9
+267.17731 1066.0
+270.63498 551.1
+272.16525 1407.1
+283.17474 3100.3
+309.19012 2809.9
+311.94824 633.5
+327.20032 5538.9
+330.42874 508.4
+332.17758 549.6
+342.22952 518.9
+342.24582 536.3
+342.25351 549.5
+345.22479 2401.6
+353.21594 3746.8
+357.18924 603.8
+361.21796 1509.6
+371.22705 18476.3
+389.25027 761.2
+397.24197 1393.9
+400.18124 892.4
+402.39581 566.1
+410.21976 1107.3
+415.25284 22348.3
+416.25879 1107.6
+432.90881 964.1
+433.24316 1184.8
+437.23898 1288.1
+441.26730 2962.2
+441.56799 745.7
+443.22177 1076.2
+480.25626 1106.8
+487.79160 3910.4
+488.29523 3600.9
+488.79535 1200.0
+489.27679 2828.7
+498.92679 1722.3
+499.26031 3046.4
+499.59259 1245.0
+501.74109 888.1
+508.68182 571.8
+522.60461 16686.4
+522.93848 23796.6
+523.27258 12493.5
+523.60651 3995.7
+532.51447 1799.9
+532.55658 1155.0
+543.32373 3455.9
+544.32703 858.5
+549.09186 628.5
+552.97272 5056.1
+553.30615 3137.4
+553.64050 1837.9
+553.97607 682.5
+555.78137 1082.8
+558.28662 1624.2
+558.62231 676.8
+558.78430 976.3
+569.80188 1290.9
+570.27570 995.7
+572.84308 7035.0
+573.28693 23583.2
+573.34467 9254.7
+573.78833 12005.2
+573.84644 3600.6
+574.28900 2952.4
+574.34875 1474.5
+575.94836 5526.3
+576.28271 9252.6
+576.61810 4174.4
+576.95947 2959.0
+577.28430 824.0
+578.32660 2003.9
+578.82697 4494.9
+579.32721 4043.9
+579.83026 1239.9
+582.80389 781.1
+593.78674 4856.0
+594.28760 3313.6
+594.78748 1065.6
+614.82568 4851.2
+615.32727 2082.1
+615.86163 751.0
+619.94843 660.6
+622.32843 748.9
+629.30414 1460.2
+629.83252 1573.9
+630.32056 813.0
+630.86017 842.4
+631.35901 864.9
+635.85223 1209.4
+639.81134 677.8
+653.22247 842.9
+654.30096 521.8
+676.65198 1234.0
+690.39172 4026.9
+691.39215 1719.9
+748.38544 870.5
+783.50293 737.3
+795.56360 1052.5
+848.04889 589.5
+871.02625 594.1
+933.37799 628.7
+1057.26392 808.5
+1079.73645 567.8
+1114.71655 594.2
+1148.40320 627.6
+1198.15210 3563.8
+1261.52808 655.3
+1547.86597 607.1
+1623.91675 708.1
+S	1495	1495	428.9871996
+Z	4	1711.9175
+110.09382 571.1
+113.38803 516.8
+113.45882 603.5
+113.62061 498.3
+117.37799 596.6
+120.08009 830.8
+120.68427 618.9
+120.86446 618.6
+121.79459 2508.7
+123.73411 584.7
+126.75690 573.1
+135.25186 575.7
+138.54878 503.5
+158.09586 1298.3
+162.61829 643.3
+168.42807 622.8
+176.10678 2283.7
+177.10188 2560.9
+179.02428 564.4
+193.01854 511.6
+198.89227 1326.7
+198.98976 631.1
+199.14958 531.0
+199.15994 617.8
+199.18008 18972.6
+199.18857 674.7
+199.19737 707.6
+199.25861 1288.3
+199.27310 2795.7
+199.28664 1115.7
+199.29683 647.8
+199.31717 535.4
+199.36940 626.8
+200.18307 1464.3
+200.63654 788.5
+203.11717 1084.2
+205.23090 523.9
+206.31419 573.4
+207.11276 635.9
+209.87595 592.6
+216.07779 650.5
+217.53902 570.1
+221.12808 82653.9
+222.13150 9860.9
+226.15508 982.3
+227.05888 625.7
+227.17511 4673.8
+230.27026 566.0
+233.16426 2562.1
+238.90428 561.6
+249.12305 14072.8
+249.63643 752.0
+250.12694 1497.5
+254.16028 1373.8
+255.10852 1657.8
+258.14993 30708.1
+258.65155 7375.3
+271.51828 543.4
+271.70523 678.9
+272.13489 1075.1
+272.17084 711.1
+277.64996 1314.7
+284.19739 752.0
+287.57639 628.0
+295.16852 4494.9
+295.67026 1305.8
+308.87442 658.5
+312.56320 645.6
+317.18494 1662.3
+326.22455 555.6
+341.01755 1007.2
+344.19681 1347.7
+350.28323 736.4
+351.18896 1210.6
+362.20703 7474.6
+363.21045 1599.3
+363.52048 1074.1
+363.85489 1985.1
+364.18933 6346.3
+364.69205 1786.7
+366.70010 1417.2
+372.38046 581.6
+374.19208 777.0
+376.52368 8117.4
+376.85794 5659.3
+377.19250 1676.3
+381.11783 577.3
+382.85974 629.9
+387.19882 2929.9
+388.19885 2620.2
+388.53378 1386.4
+389.20624 651.7
+400.26556 1422.3
+401.20435 908.3
+403.46783 1342.2
+403.71887 890.8
+405.71692 1414.7
+413.20947 10436.2
+413.54428 6185.0
+413.87814 2705.8
+418.51239 575.9
+421.28003 573.1
+427.50659 870.1
+444.90231 1259.8
+445.23529 1520.6
+450.90405 29320.5
+451.23831 22531.9
+451.57278 5658.1
+451.90543 1738.2
+454.56409 681.1
+457.19781 576.6
+463.23218 799.9
+469.89862 689.3
+475.24835 686.8
+475.29089 2488.6
+476.28824 652.7
+476.59204 3918.5
+476.92557 3597.7
+477.25708 977.4
+481.46750 626.1
+482.59509 9092.4
+482.93002 6716.8
+483.26395 2858.9
+488.59860 96353.5
+488.93289 80124.8
+489.26654 30288.8
+489.60193 9968.5
+489.76404 3493.2
+489.93851 790.6
+490.26352 1282.0
+508.28229 942.3
+511.25061 2006.1
+514.30743 673.5
+515.29285 1072.7
+516.94147 773.0
+525.61761 988.1
+526.27893 1767.6
+526.77863 1275.7
+532.59436 2162.9
+536.81232 949.5
+537.62061 4051.0
+537.95593 2318.9
+538.28876 1043.0
+544.77722 1483.5
+549.11145 807.1
+555.26355 3803.2
+555.76398 2385.3
+562.29108 1032.5
+564.28168 3665.7
+564.78381 2413.0
+573.79175 1447.0
+581.79425 6908.3
+582.29651 5385.9
+582.79816 1475.6
+583.29395 1352.3
+583.86029 546.8
+590.30408 4363.4
+590.80225 5525.5
+591.30450 3428.9
+591.80743 779.2
+599.30957 9243.7
+599.81152 7300.9
+600.31250 2625.2
+601.29681 758.7
+610.30493 9587.6
+610.80774 6548.9
+611.31091 4000.6
+611.80841 2149.2
+618.18390 748.2
+618.51733 830.3
+619.03381 1048.8
+619.31073 222997.5
+619.81183 160473.8
+619.88202 816.6
+620.09869 865.8
+620.31293 60361.5
+620.81415 13528.9
+620.94110 862.6
+621.31580 2387.6
+624.33588 752.1
+648.29797 931.1
+649.29395 1238.0
+666.84735 1778.9
+667.34503 949.1
+668.34851 1677.2
+668.84497 967.3
+675.85254 29956.7
+676.35437 23926.3
+676.64966 1194.7
+676.85498 10350.7
+677.35742 2817.4
+717.07227 629.0
+717.84637 649.0
+723.32922 5688.3
+724.33356 1581.0
+725.33392 853.0
+727.37250 3329.9
+728.37604 1453.7
+737.41754 872.3
+762.38110 1053.6
+795.55499 1280.4
+801.40631 1253.1
+836.41309 3122.1
+837.41302 1054.6
+838.35577 1180.8
+863.85010 597.7
+875.46039 844.9
+949.49506 2440.6
+950.49750 1523.8
+952.54553 572.9
+986.56177 675.2
+1026.22595 654.8
+1041.50769 657.1
+1198.32666 3580.2
+1266.94202 709.5
+1453.93298 637.0
+1489.31226 788.8
+1525.30774 804.6
+1565.51270 564.7
+1578.41235 608.4
+S	1497	1497	410.4727946
+Z	4	1637.85988
+102.76687 562.5
+103.03254 621.9
+120.65383 665.5
+120.86597 648.3
+121.79471 2046.8
+121.80663 710.2
+124.74874 660.4
+146.96620 581.1
+150.63593 706.0
+155.64546 568.4
+157.90193 514.4
+161.28308 603.9
+165.77686 507.7
+165.78212 568.3
+173.89246 488.9
+177.10155 709.0
+181.40627 588.6
+182.75529 571.3
+182.76511 713.8
+186.16934 544.4
+188.21977 567.7
+188.25539 1062.0
+188.28575 2674.4
+188.30875 1885.4
+188.33276 496.9
+194.85522 600.0
+199.18037 7845.1
+199.21062 680.0
+199.23152 743.5
+199.24115 917.7
+199.24933 946.8
+199.26030 1478.2
+199.27122 1372.0
+199.28101 2027.8
+199.30083 1065.9
+199.33842 528.5
+199.37921 903.4
+200.18309 827.4
+206.29207 638.8
+217.00571 669.1
+221.12790 32915.4
+222.13118 4411.6
+227.17508 1814.3
+245.07854 610.9
+249.12280 5366.6
+257.61371 731.2
+258.14978 16344.6
+258.65143 3566.1
+261.85098 554.3
+301.58270 552.0
+308.87039 609.1
+326.51016 2127.3
+326.84384 1308.8
+331.94968 601.1
+347.96924 610.2
+358.31534 655.5
+362.20694 2881.0
+364.11249 586.5
+364.19025 3022.1
+388.53061 5635.5
+388.86380 3002.0
+389.20053 1091.0
+426.22485 4240.9
+426.55969 3026.2
+426.89188 947.9
+427.50079 693.2
+432.71860 1099.7
+447.04422 612.8
+463.91943 35768.3
+464.25385 29247.8
+464.58807 10660.1
+469.89276 776.2
+475.29120 1485.2
+476.80505 6474.3
+477.30466 2409.2
+482.32779 566.4
+483.45358 722.8
+489.26077 3974.2
+489.76202 1741.7
+490.25989 664.3
+512.94354 1442.0
+513.27808 938.5
+513.61053 693.8
+514.90826 535.4
+518.24371 848.8
+518.75073 737.5
+525.42712 580.8
+532.63013 2101.1
+546.86359 647.0
+553.28723 995.8
+553.78448 2166.5
+554.28778 1137.8
+556.82037 2951.2
+557.31476 687.5
+561.76788 585.0
+562.29071 5358.3
+562.79340 2848.7
+573.28748 1401.7
+573.78473 893.3
+581.29578 668.7
+581.58051 828.6
+582.29163 80100.3
+582.79303 59041.4
+583.29449 16160.7
+583.79395 1997.5
+596.53558 505.6
+638.83374 8789.2
+639.33545 9581.0
+639.83685 3720.8
+643.21954 561.9
+649.29285 3216.6
+650.29395 860.8
+676.63898 850.1
+727.37616 939.7
+762.37756 1888.0
+763.37689 1075.3
+772.02777 582.4
+795.55444 979.3
+875.46216 1220.6
+876.45990 720.9
+893.38910 646.7
+952.76459 583.1
+1005.02411 589.5
+1010.36865 629.9
+1076.97498 628.7
+1188.18884 1088.0
+1198.40942 4061.4
+1214.57495 651.8
+1262.99426 533.3
+1324.88184 617.8
+1560.54724 707.9
+S	1498	1498	403.4713621
+Z	4	1609.85415
+101.07058 513.7
+109.11926 560.5
+109.80669 557.1
+111.56030 578.2
+114.03785 589.0
+120.66594 646.0
+121.79430 2645.5
+128.57381 687.5
+135.43011 630.4
+137.19954 569.2
+141.11687 575.7
+159.10648 678.7
+161.57704 572.1
+163.35927 551.7
+165.54765 536.1
+165.77554 692.6
+166.35147 573.7
+169.52534 539.3
+171.63750 580.8
+182.34273 630.7
+182.77885 636.8
+198.88663 964.1
+199.05560 559.8
+199.16177 623.5
+199.17664 1287.8
+199.25620 1190.2
+199.27309 2406.8
+199.28336 1001.0
+199.37115 1085.3
+211.32912 608.1
+215.02696 568.8
+221.12744 2004.5
+230.49493 600.0
+241.63681 587.9
+242.28748 537.2
+243.38782 649.5
+249.04382 513.9
+255.04045 586.0
+282.08789 571.4
+320.30103 711.4
+376.10394 652.9
+390.47092 587.8
+450.24112 743.6
+454.58347 1014.3
+459.74231 907.2
+461.93631 553.9
+467.09299 629.5
+469.89557 746.2
+472.77783 1500.8
+473.27969 1790.6
+491.79770 928.7
+492.29968 763.8
+503.61063 724.5
+532.61621 2016.5
+536.39008 513.7
+536.41254 496.8
+549.14575 940.7
+554.31049 1047.8
+554.81128 940.5
+568.28912 4822.0
+568.79211 2246.3
+568.96570 644.6
+573.85852 610.7
+575.33643 1049.4
+589.30548 937.1
+630.40338 1113.0
+676.64246 943.7
+795.54700 1003.9
+899.09247 667.6
+929.41388 621.0
+1019.71246 882.2
+1160.36768 604.8
+1188.19031 651.1
+1198.37878 3710.4
+1234.72156 532.3
+1261.63550 617.7
+1442.15051 598.1
+1466.24744 653.7
+S	1499	1499	428.9817071
+Z	4	1711.89553
+117.03236 620.2
+117.31407 666.8
+121.78608 664.8
+121.79688 2084.9
+121.80957 538.9
+128.54994 775.8
+137.15604 605.3
+139.27742 738.3
+165.77823 858.3
+171.63939 732.4
+181.71498 619.7
+182.33191 557.1
+183.83156 638.4
+193.74350 600.4
+199.16768 765.3
+199.18102 1790.9
+199.19795 778.3
+199.23990 539.4
+199.26556 2231.8
+199.28310 1141.1
+199.29535 1248.7
+199.31406 659.7
+199.35097 744.9
+199.36601 563.4
+227.39816 543.9
+249.89989 627.9
+256.36841 565.3
+270.84680 641.5
+289.15970 635.2
+289.37698 532.9
+309.79379 482.0
+316.77554 650.7
+327.28790 626.8
+340.83350 582.4
+351.83270 664.7
+352.27283 529.0
+360.46948 517.8
+412.21747 604.9
+414.50629 629.4
+427.45956 888.1
+434.74915 568.9
+448.84854 606.1
+467.95004 580.0
+469.89166 656.0
+476.39053 565.9
+479.65845 543.5
+501.30923 1123.7
+512.49841 598.4
+525.84503 570.5
+532.58759 1893.2
+536.98328 662.1
+570.85760 649.2
+576.35828 872.3
+580.41467 613.9
+580.77478 615.7
+582.78967 1096.9
+583.29547 3088.1
+583.80048 1093.2
+630.35278 2804.8
+665.43658 557.8
+676.63275 1128.2
+687.10284 775.5
+721.66388 590.3
+775.69940 651.9
+783.21289 706.9
+795.55682 953.6
+933.02997 559.1
+936.84369 566.9
+945.91071 639.9
+1020.88458 523.0
+1055.62195 571.1
+1198.31433 3443.6
+1237.01868 698.3
+1384.57019 612.3
+1498.17737 638.7
+S	1501	1501	410.4781971
+Z	4	1637.88149
+103.72272 544.1
+105.08065 565.0
+105.69530 593.5
+108.29369 542.4
+109.62702 570.6
+113.07187 588.3
+113.21811 494.2
+113.43521 574.4
+117.29765 565.1
+120.87025 615.3
+121.62810 620.2
+121.79739 2989.0
+125.04847 600.7
+127.67989 637.5
+129.56500 593.4
+129.60283 610.2
+130.08583 529.2
+148.96994 608.0
+158.09587 1479.5
+159.13055 530.6
+161.24927 611.6
+169.45319 783.6
+169.83960 600.0
+173.89833 563.5
+176.04169 570.8
+176.10715 1848.4
+177.10216 2732.5
+188.21379 541.8
+188.24782 1111.1
+188.27121 2073.1
+188.28468 2167.4
+188.29440 2031.3
+188.30817 2163.0
+190.45540 596.3
+191.74475 576.6
+198.89104 783.4
+199.18019 19120.4
+199.20088 634.2
+199.23843 705.0
+199.24808 994.5
+199.25938 1176.2
+199.27773 2369.9
+199.29437 964.7
+199.29814 1063.5
+199.30672 649.5
+199.31772 1058.9
+199.34908 564.7
+199.37306 674.3
+199.41283 664.7
+200.18364 3814.5
+200.63708 1205.5
+203.11809 1348.2
+214.11827 649.5
+219.98395 562.0
+221.12820 80683.5
+222.13156 18157.4
+223.13499 1225.1
+227.17526 4600.0
+228.17758 663.8
+233.16472 2632.6
+234.16803 953.0
+238.72256 690.8
+240.65611 576.9
+244.16608 923.1
+249.12312 13422.6
+249.63643 2101.1
+250.12631 3022.3
+251.14964 1357.7
+251.36040 601.7
+254.16144 1992.3
+255.10901 1093.9
+255.16611 642.4
+258.15005 36656.2
+258.65179 15576.2
+259.15280 3279.1
+260.02200 544.9
+260.31757 582.1
+264.45016 518.8
+272.13403 1173.4
+272.27234 601.5
+276.83224 637.9
+280.11673 663.7
+296.14334 550.1
+317.18546 1643.8
+326.51038 3626.7
+326.84418 3437.1
+327.17786 908.7
+342.07178 546.6
+342.18771 840.5
+344.26321 730.2
+350.27875 1036.4
+362.20712 6290.6
+363.21011 2275.9
+364.18967 5885.8
+364.69104 3815.7
+365.19049 813.1
+378.99591 509.6
+381.26468 763.0
+385.20859 1331.5
+385.46051 1861.5
+387.19843 2654.2
+388.19910 920.6
+388.53128 6430.8
+388.86530 9064.9
+389.19901 4168.7
+389.53326 1091.4
+394.96399 755.5
+426.22580 6838.9
+426.55991 12534.9
+426.89389 6823.4
+427.22830 2314.0
+432.23495 534.8
+432.72025 1416.6
+433.22211 1649.2
+437.21399 3128.9
+438.21631 888.7
+438.73627 719.9
+454.18372 843.0
+458.57968 791.1
+463.23041 1038.6
+463.92023 40138.1
+464.25439 66914.6
+464.58832 48468.0
+464.92270 15664.4
+465.25598 4447.0
+475.29135 1980.6
+476.29636 1122.7
+487.51099 656.6
+489.25931 4943.6
+489.76208 8747.5
+490.26328 3792.3
+490.76678 953.0
+493.92352 870.3
+495.65640 706.3
+512.93909 1181.3
+513.27454 2013.0
+513.61182 2460.9
+515.29266 1713.9
+516.29095 1070.8
+518.24585 1064.9
+518.74451 2593.2
+519.24536 1321.7
+532.61523 1703.8
+544.78070 684.1
+545.04059 679.5
+545.27533 954.5
+553.28668 1386.8
+553.78558 5105.8
+554.28723 3839.6
+554.78796 1073.0
+562.29144 6125.4
+562.79333 7864.3
+563.29443 4820.8
+563.79364 1339.5
+573.28888 1394.4
+573.78925 4968.9
+574.28784 1724.1
+574.79041 1405.7
+580.81616 714.0
+581.31854 1120.5
+581.56000 850.8
+581.81445 1003.1
+582.06018 670.5
+582.13312 885.8
+582.23840 783.4
+582.29242 128411.4
+582.79382 187534.6
+583.29504 113402.1
+583.52350 980.8
+583.79620 38202.2
+584.03113 803.6
+584.29456 6573.0
+584.78290 1033.3
+631.32861 770.7
+638.83453 17888.4
+639.33569 29227.7
+639.83716 20403.2
+640.33807 8350.8
+640.83856 2538.6
+644.31964 771.4
+649.29181 7094.9
+650.29510 4193.2
+651.29419 922.9
+676.64008 958.2
+727.37170 4010.3
+728.37543 2623.0
+762.37604 4190.1
+763.38025 3230.3
+764.32043 743.7
+764.38574 1053.6
+765.31445 843.2
+795.54572 836.1
+795.65552 668.7
+835.00934 646.1
+868.17834 678.0
+875.46246 2733.3
+876.46155 2215.9
+877.46350 1318.5
+896.32306 561.6
+971.54340 552.9
+1017.48297 666.6
+1098.98962 624.9
+1198.37280 3168.0
+1283.55103 671.3
+1293.44751 557.5
+1293.57422 574.4
+1361.64917 731.0
+1525.04065 708.5
+S	1502	1502	411.2295746
+Z	4	1640.887
+102.91604 588.0
+105.80981 606.4
+111.53103 541.6
+114.78725 589.0
+120.85909 636.6
+121.79781 2009.3
+128.44296 626.8
+130.81473 592.4
+154.90852 520.8
+158.09608 1664.3
+158.10484 674.2
+160.11150 1067.2
+165.78247 778.4
+169.47171 610.4
+172.07001 541.8
+174.32730 528.3
+176.10684 4479.8
+177.10199 5325.4
+177.91594 636.4
+182.07033 592.6
+182.76094 751.4
+187.36185 540.4
+192.79158 564.7
+198.88910 889.9
+199.18044 39396.5
+199.21466 793.6
+199.22603 890.7
+199.24817 727.7
+199.25917 825.5
+199.27371 2570.9
+199.28259 1450.1
+199.31456 599.4
+199.37019 845.5
+200.18353 6891.8
+200.63676 2595.6
+201.22038 662.2
+203.11818 2253.3
+210.15257 652.9
+211.33083 502.3
+213.08675 793.2
+220.78169 695.8
+220.95703 781.4
+221.12836 165857.7
+221.30031 1202.6
+221.47586 974.7
+222.13168 28313.5
+223.13489 1386.7
+226.15489 1944.2
+227.17532 9526.6
+228.17874 1903.2
+231.11165 629.7
+233.16470 6086.5
+234.12355 565.7
+234.16872 1364.8
+235.89584 606.1
+240.25748 537.1
+244.16551 1725.6
+249.12331 27116.2
+249.14523 1505.7
+249.63686 2911.1
+250.12703 4368.5
+251.15001 2562.3
+254.16093 4799.2
+255.10834 3557.7
+258.15027 81809.3
+258.65192 21161.6
+259.15320 4614.4
+259.65463 750.0
+261.15948 1241.8
+262.92590 606.0
+272.13495 2953.6
+272.17145 1890.6
+289.19089 809.2
+316.46176 565.9
+317.18646 4246.5
+318.18768 1013.0
+326.51001 8063.8
+326.84430 4727.5
+327.18039 1417.1
+344.19666 1710.7
+350.14484 1118.9
+354.00833 568.9
+362.20731 14721.4
+363.21075 3146.6
+363.52036 1068.6
+363.85629 1530.4
+364.18994 17379.4
+364.23517 607.5
+364.69171 7580.7
+365.19257 1964.4
+369.18808 971.9
+376.52530 852.0
+382.26215 613.9
+384.95898 3192.6
+385.20959 2725.8
+385.46204 1392.6
+387.19916 4837.8
+388.53131 18279.1
+388.86551 14741.7
+389.19974 4908.5
+389.53467 1644.2
+408.14474 656.9
+421.22815 602.1
+426.22583 31645.7
+426.56027 31308.4
+426.89429 17213.6
+427.22803 5137.9
+427.56226 807.5
+432.71890 6242.7
+433.22079 3279.9
+433.72418 699.0
+437.21375 6151.8
+438.22183 1840.7
+438.73309 1050.7
+447.29419 1462.1
+448.29919 747.7
+452.03406 631.7
+452.16241 638.2
+457.91705 1531.2
+458.25101 1297.5
+458.58453 995.9
+461.71613 583.9
+463.19403 895.7
+463.22867 2953.1
+463.92056 145646.8
+464.25467 148345.1
+464.42929 652.3
+464.58859 84361.4
+464.77774 789.9
+464.92273 26220.4
+464.95734 552.7
+464.98120 759.9
+465.25632 9187.8
+465.31635 954.1
+465.59039 2005.2
+475.29123 5621.4
+476.29361 2204.0
+476.76685 688.3
+489.26102 22093.3
+489.76239 15484.7
+490.26462 4077.9
+490.76456 1093.0
+512.94318 4869.8
+513.27765 4948.7
+513.61176 3209.3
+513.94574 884.6
+514.59607 596.1
+515.29218 3577.2
+516.29437 1304.3
+518.24512 7049.6
+518.58600 609.7
+518.74750 5690.9
+519.25006 1979.3
+523.30573 686.7
+532.30945 897.2
+532.61115 2212.9
+544.77631 1377.5
+545.27899 1363.1
+545.77899 900.8
+546.62982 627.9
+548.03400 604.7
+550.29510 1519.4
+553.28625 5508.3
+553.78510 11201.5
+554.28613 6878.3
+554.78473 2969.1
+562.29205 23065.0
+562.79364 18610.6
+563.29541 7297.9
+563.79510 1275.1
+564.27850 1000.8
+564.78131 1378.5
+573.28754 8585.0
+573.78925 6250.1
+574.28986 3489.3
+574.78796 2413.7
+575.29120 1822.3
+575.98132 583.8
+580.81335 2249.8
+581.06976 1058.3
+581.12378 828.5
+581.31067 1482.0
+581.56476 2620.2
+581.80780 683.5
+582.07611 1745.7
+582.23718 1686.3
+582.29272 431256.6
+582.37347 1334.4
+582.54260 1064.9
+582.72748 1335.6
+582.79382 362764.1
+582.86865 991.5
+583.02917 2583.1
+583.29517 160506.6
+583.52710 2558.0
+583.67554 737.2
+583.79645 51353.3
+583.96765 825.9
+584.02405 2277.8
+584.17737 958.2
+584.29730 12434.4
+584.79504 2764.9
+585.27893 1015.3
+592.27106 1782.0
+599.27869 997.6
+619.81647 636.8
+629.83087 1216.9
+630.30566 792.5
+631.33014 2410.9
+631.83075 2600.6
+632.33093 1212.0
+638.83453 61695.9
+639.33563 60654.2
+639.83698 33927.3
+640.33801 10383.7
+640.83905 2562.1
+641.04077 728.0
+643.34186 1032.0
+649.29285 16289.1
+650.29626 7219.7
+651.29846 1948.7
+655.15717 590.2
+661.35626 1392.3
+662.35699 867.3
+663.38190 1408.4
+676.63312 868.5
+727.37231 10402.5
+728.37628 4112.4
+729.37604 1519.5
+762.37738 9419.7
+763.37897 6020.5
+764.31958 3325.2
+764.38049 1451.4
+765.31781 1054.8
+774.43494 894.8
+795.54846 861.9
+857.93823 800.8
+875.45966 8111.8
+876.46576 5416.1
+877.46582 2223.1
+1021.04773 627.9
+1057.25281 639.0
+1073.98352 544.4
+1188.11597 722.9
+1198.36365 3683.7
+1240.39783 720.5
+1308.36865 631.5
+1498.76123 641.7
+1539.62781 638.4
+1613.35217 586.8
+S	1503	1503	547.331407933
+Z	2	1092.815
+Z	3	1638.719
+142.36220 578.9
+145.53485 616.2
+153.57869 900.5
+155.29999 730.5
+164.25705 617.1
+170.19873 494.1
+185.08781 546.4
+188.26526 1070.4
+188.27794 1155.4
+188.28972 1349.9
+188.29945 1480.0
+188.30803 955.7
+188.31734 902.8
+188.32448 768.5
+192.83836 509.7
+199.18071 1426.6
+199.24179 671.4
+199.25755 719.6
+199.27805 2789.6
+199.30136 825.5
+199.32144 570.0
+199.37640 1462.5
+207.44978 640.4
+208.00218 611.5
+208.73705 670.0
+209.49113 559.5
+212.14984 615.2
+221.13011 11005.3
+222.13344 1956.0
+235.32127 553.0
+243.89388 549.9
+245.48257 662.8
+249.12541 8876.7
+250.12923 1314.9
+255.05798 664.9
+255.11063 1210.1
+261.00195 606.4
+263.58133 591.6
+272.13712 1642.1
+272.17389 1597.0
+302.00803 562.8
+312.07257 508.0
+317.18793 2334.8
+342.24719 651.1
+362.21017 7059.7
+363.21429 1790.8
+364.19131 984.2
+382.25815 739.9
+383.24591 665.4
+384.45200 619.9
+387.20132 9104.0
+388.20764 769.2
+391.28769 1069.4
+392.19562 960.8
+398.85245 557.2
+400.26959 10722.2
+401.27505 1280.0
+403.47910 573.1
+409.22314 727.7
+415.04721 552.9
+427.45557 643.1
+432.72318 2633.5
+433.22449 1167.9
+437.21732 2898.8
+447.29944 3623.2
+448.30261 692.1
+457.28448 2212.5
+458.28860 881.1
+463.92407 3916.5
+464.25879 3445.0
+464.59357 864.4
+475.29510 5985.7
+476.29797 1647.3
+477.33420 578.8
+480.26328 654.1
+484.21967 2124.9
+485.22382 616.1
+489.26575 6369.6
+489.76791 3431.9
+493.34735 716.1
+497.28595 1941.2
+498.26724 1659.7
+503.23569 674.5
+513.55182 669.5
+521.77063 617.0
+527.59821 1054.5
+529.38379 756.2
+530.55261 687.5
+531.63104 1216.1
+531.96655 905.7
+532.60553 2179.8
+536.27625 567.7
+540.62701 6022.1
+540.96259 5719.1
+541.11267 3305.9
+541.29468 3633.1
+541.43964 3347.8
+541.62677 1538.4
+541.76416 1813.6
+542.09912 841.8
+542.69867 1163.0
+542.94098 2611.2
+543.26801 1785.3
+543.48932 642.6
+543.59802 1455.1
+543.98224 991.4
+544.38995 2970.7
+544.62573 1419.1
+544.72101 3470.4
+544.77991 3727.4
+544.85364 2334.5
+544.88312 860.4
+544.93713 1084.7
+544.95966 937.0
+545.04523 2382.8
+545.07867 2782.4
+545.18640 3460.1
+545.23798 3866.3
+545.28625 9918.8
+545.32172 2174.5
+545.36646 3777.7
+545.41290 4457.1
+545.51831 6842.1
+545.56110 4388.4
+545.61627 11761.2
+545.65771 2736.5
+545.69629 2765.3
+545.74115 3190.6
+545.77075 1088.6
+545.84772 6668.2
+545.90302 3041.0
+545.93860 3762.4
+545.96796 9598.3
+546.01733 1386.3
+546.03497 2150.8
+546.06689 3594.7
+546.09821 2739.9
+546.13971 1700.5
+546.18433 6006.4
+546.23254 2968.6
+546.25385 2007.2
+546.30304 9024.0
+546.36823 3035.0
+546.40692 7372.8
+546.46765 3089.2
+546.48413 3769.3
+546.52075 6781.9
+546.57568 14107.0
+546.63074 2502860.0
+546.70856 7316.3
+546.72833 8084.8
+546.76196 3937.2
+546.81097 3882.7
+546.83759 4423.5
+546.87531 3757.0
+546.90125 18044.8
+546.96161 2596445.8
+547.03662 9829.8
+547.05322 5167.5
+547.07568 4819.4
+547.09448 2054.7
+547.11682 2228.5
+547.14185 2165.9
+547.17224 4576.3
+547.19830 5569.7
+547.22357 5463.6
+547.29413 1458388.0
+547.36816 4773.8
+547.40692 5846.6
+547.44128 2181.6
+547.46033 1430.2
+547.50311 5463.2
+547.52789 6451.0
+547.56989 4638.0
+547.62805 559001.8
+547.70490 1815.6
+547.74469 7534.0
+547.78717 2379.7
+547.83209 2399.2
+547.85907 4415.7
+547.89929 3489.1
+547.96423 166798.5
+548.07764 8761.3
+548.18469 5082.9
+548.23456 4453.3
+548.30249 45621.2
+548.36664 4810.9
+548.41199 7611.5
+548.45618 1495.4
+548.51825 3899.6
+548.63934 15718.8
+548.69611 3329.3
+548.74786 3418.6
+548.79858 917.3
+548.85687 2920.8
+548.88824 3855.4
+548.93323 5886.3
+548.97589 4845.6
+549.02869 1710.3
+549.08423 1799.6
+549.21686 3238.3
+549.26385 1164.0
+549.30554 2423.1
+549.36084 1391.7
+549.41681 1097.8
+549.44879 650.6
+549.55200 2216.8
+549.63330 1247.4
+549.84406 743.4
+549.94226 707.4
+549.96619 1028.3
+550.25360 962.9
+550.30182 7029.1
+550.35510 1866.0
+550.63586 623.7
+550.69238 2141.6
+551.02972 1315.2
+551.29980 1527.7
+551.97113 844.6
+552.23297 3133.2
+552.57001 3044.6
+552.90527 2200.0
+553.25275 942.8
+553.78455 7025.2
+554.28668 4234.0
+554.78406 1437.8
+573.28925 3407.2
+573.79266 1825.7
+574.78967 4827.9
+575.29181 2725.4
+581.56451 832.0
+582.29626 179979.9
+582.79755 111772.1
+583.03021 796.5
+583.29901 38459.5
+583.79950 10595.3
+584.29993 1897.7
+595.28284 651.0
+599.28040 9485.0
+600.28479 2531.7
+613.29694 1414.7
+629.83282 6392.0
+630.33136 5126.1
+631.33295 10809.6
+631.83508 6217.5
+632.34149 2081.8
+632.84015 643.3
+635.39014 3380.8
+636.39679 1401.9
+637.14172 955.2
+637.99628 1512.4
+638.48407 981.0
+638.83832 298300.8
+639.26343 818.2
+639.33960 194572.5
+639.68842 1725.5
+639.84100 71155.1
+640.18726 871.8
+640.34247 21097.5
+640.54114 1514.0
+640.68719 981.8
+640.84320 3994.6
+641.05017 1181.0
+643.34735 1159.4
+649.29712 3836.8
+650.30066 832.6
+661.35699 2966.2
+662.36511 1164.2
+663.38580 15963.7
+664.38867 4421.4
+665.39557 1304.2
+667.34357 910.1
+676.63110 1121.6
+676.72668 1774.4
+677.05280 2038.1
+677.39606 863.5
+677.86365 966.5
+678.06195 638.5
+683.45825 713.2
+686.37610 17036.5
+686.87708 10781.7
+687.37805 4305.4
+687.47028 1324.8
+687.96924 1104.0
+693.32660 997.6
+693.37079 1316.0
+693.45160 4098.9
+693.55823 1168.6
+693.65344 712.4
+693.95026 2494.1
+694.09277 1448.2
+694.14258 1000.8
+694.41968 2425.1
+694.58917 1127.7
+694.93433 1884.2
+695.05939 1539.6
+695.21454 615.6
+695.24420 2160.5
+695.31561 13106.6
+695.38068 801580.2
+695.63489 741.0
+695.68695 1207.6
+695.73767 1139.1
+695.77252 1118.8
+695.88141 601996.1
+696.01794 1878.3
+696.04144 833.7
+696.13165 904.5
+696.23584 1192.2
+696.38281 249717.0
+696.82330 2892.2
+696.88495 69759.9
+697.17682 1789.5
+697.31323 3326.9
+697.38641 15881.2
+697.44794 1286.1
+697.67822 909.8
+697.71692 793.5
+697.81866 3025.7
+697.88043 2826.9
+697.94611 1271.8
+697.98914 580.0
+698.31708 1118.9
+702.60815 569.6
+703.42151 1027.1
+709.36450 6575.1
+710.33453 622.0
+710.37659 1109.5
+718.59314 608.6
+727.37653 95313.8
+728.37994 30582.0
+729.38306 7455.0
+736.33997 3292.6
+755.39081 4867.5
+755.89362 2860.3
+756.40302 1138.4
+762.38104 5170.9
+763.38477 1728.4
+764.32300 2879.7
+765.32751 1139.0
+768.91504 11105.7
+769.41748 10317.4
+769.91943 4019.2
+770.42096 1407.1
+774.44550 1970.7
+795.54694 1167.9
+819.43793 5023.4
+819.94196 6551.7
+820.44281 2370.3
+820.94006 1050.3
+828.41846 770.1
+846.27014 649.3
+846.42261 3913.4
+849.42993 1552.5
+864.43701 21148.1
+865.44025 8586.4
+866.43964 1800.9
+875.46558 10171.3
+876.47107 4645.6
+877.41290 4743.4
+878.41437 2132.8
+879.41858 795.7
+891.37372 624.7
+911.50378 3136.6
+912.51312 1182.5
+914.47034 644.5
+920.42920 1743.6
+921.42468 951.4
+923.52081 623.4
+959.50543 972.0
+977.52228 7576.1
+978.52496 3245.7
+979.52094 1008.3
+990.49469 9603.2
+991.49548 4314.2
+992.49701 1327.3
+1033.51611 1110.4
+1034.50818 998.3
+1035.48914 3075.5
+1036.49426 1403.3
+1073.25439 585.4
+1106.57239 741.8
+1145.57361 1080.3
+1146.59985 3914.2
+1147.59985 2140.3
+1149.57654 698.7
+1163.58582 11012.0
+1164.58960 6063.9
+1165.59241 2348.5
+1188.07104 815.1
+1198.35730 3339.0
+1440.83472 682.7
+1525.31836 874.1
+1546.64380 695.3
+1879.12378 1746.2
+1879.50757 19864.9
+1879.81213 2457.7
+1881.02307 868.0
+1902.59680 611.5
+1907.08813 7362.3
+1918.63733 818.5
+1930.45374 947.9
+S	1505	1505	410.4783496
+Z	4	1637.8821
+100.86156 2257.4
+102.10724 2063.7
+102.94464 2458.0
+103.28111 2282.2
+107.62620 1995.4
+113.45744 3016.9
+117.39951 2109.7
+120.77749 2366.7
+121.79735 8558.2
+121.80359 2523.1
+128.57018 2536.7
+137.07646 2397.0
+140.24025 2183.0
+145.25964 2206.2
+157.59543 2442.9
+157.97052 2490.3
+182.77257 2802.1
+188.21123 2616.1
+188.23708 3182.2
+188.25903 6633.2
+188.28427 9068.3
+188.30183 7126.5
+188.31372 6542.4
+188.33932 2107.1
+188.35518 2471.9
+188.36124 2621.1
+188.55774 2119.2
+191.94742 2315.9
+194.78815 2156.6
+198.88837 3110.3
+199.18068 4016.1
+199.21347 2776.9
+199.26488 6847.0
+199.28215 8180.1
+199.30583 4017.2
+199.32117 2556.2
+210.63345 2121.6
+211.90067 2151.0
+214.50410 2769.7
+229.19604 2072.7
+232.11989 2105.6
+232.13910 2241.9
+246.58694 2295.5
+262.17139 2371.1
+271.80057 2338.9
+271.95721 2892.1
+275.72729 2006.5
+297.84369 2492.8
+308.88782 2346.7
+309.97247 1914.1
+328.49557 2268.2
+331.98053 1835.2
+342.25638 2858.4
+357.13773 2301.2
+388.79224 1962.9
+431.65573 2270.4
+476.77155 4091.1
+483.47961 2570.0
+528.32813 2284.7
+532.57324 7823.7
+546.60492 2519.9
+552.04712 2174.0
+566.10510 2277.3
+570.93848 2145.3
+616.05627 2551.6
+647.38275 2063.1
+653.20050 2978.0
+676.64154 5416.9
+710.01880 3203.9
+748.77673 2051.8
+769.01831 2742.1
+786.22552 2467.2
+971.19995 2047.6
+1057.25671 4445.1
+1152.02039 2218.4
+1198.28748 12219.2
+1223.24487 2956.8
+1372.61316 2562.4
+1389.32166 2042.0
+1525.35120 3268.5
+1541.16614 2072.7
+1629.69873 2457.6
+S	1506	1506	411.2283246
+Z	4	1640.882
+100.71461 55412.3
+100.86317 43540.4
+104.58630 49081.4
+110.06252 40026.8
+113.45370 48253.9
+115.53463 45583.3
+120.12325 49492.6
+121.79796 203384.3
+128.56287 51078.9
+131.74580 45693.6
+140.35988 43006.3
+154.84094 64685.0
+157.32156 42542.8
+160.94656 45674.2
+163.88441 47999.0
+164.00879 57391.5
+165.78130 69481.3
+170.37186 41768.7
+171.60675 49564.8
+171.63850 60803.5
+177.22423 48644.0
+179.51991 46855.0
+181.68068 42763.2
+182.76596 49351.4
+183.77075 50313.6
+198.88927 68450.9
+199.17514 60910.8
+199.21486 82782.7
+199.24341 59653.0
+199.26216 114087.9
+199.27220 235187.6
+199.28227 86197.9
+199.29742 71932.5
+207.20541 47909.3
+228.65471 48611.2
+239.33910 49659.8
+255.26451 68988.8
+291.78058 58263.6
+301.07718 50698.0
+304.64883 55691.9
+317.29288 48412.4
+338.27307 49798.3
+340.26700 56838.1
+342.23813 65961.9
+344.59512 50744.6
+350.28381 72782.3
+363.15204 58344.7
+377.39783 54972.8
+377.49097 47117.1
+391.48569 51975.0
+414.01178 65198.2
+418.84158 61089.3
+469.93753 50319.3
+532.59253 140973.0
+567.41364 57617.1
+630.35303 73193.7
+630.54688 59027.2
+670.30670 55311.9
+676.63177 84837.5
+698.28040 60009.7
+709.34332 57285.9
+731.50232 51722.8
+768.12354 52182.1
+768.16101 50447.7
+795.54333 71383.8
+844.01923 46475.4
+845.02100 49683.7
+925.33392 54866.3
+955.18073 43448.9
+1023.71564 51031.8
+1065.61414 52958.6
+1070.12244 56708.0
+1175.58813 55267.5
+1178.62854 48588.7
+1198.32617 296215.0
+1198.46765 72049.2
+1241.71338 51549.5
+1525.28723 56343.0
+1587.10791 53175.3
+S	1507	1507	547.3325746
+Z	3	1638.723
+Z	2	1092.817
+141.84927 633.9
+153.57869 1026.0
+153.75092 836.6
+177.46404 746.4
+188.25256 882.1
+188.26392 1015.2
+188.27563 1157.0
+188.28973 1655.3
+188.30331 1319.8
+188.31149 1026.3
+198.88550 1185.6
+199.20532 627.8
+199.24120 1685.3
+199.26413 1848.4
+199.27513 2371.8
+199.28592 2057.9
+199.29985 783.2
+199.37321 1386.5
+199.40405 773.5
+221.11568 607.8
+221.12994 15650.9
+222.13365 2654.1
+231.49876 530.8
+231.50415 543.1
+234.87175 623.3
+249.12520 9225.5
+250.12848 1537.8
+251.15269 1025.2
+255.11139 1424.7
+261.15735 695.0
+269.82822 594.1
+271.65640 850.5
+289.19476 1309.6
+300.65311 836.7
+317.18857 2483.6
+320.52066 702.8
+362.21014 9851.0
+363.21347 1906.2
+364.19046 1004.2
+369.26639 620.0
+382.25958 1338.3
+387.20120 8578.1
+391.28671 1489.8
+400.26932 8978.4
+423.72003 786.2
+432.72177 4247.1
+433.22495 1196.6
+437.21780 3369.1
+447.29974 5387.3
+448.30139 1685.2
+457.28409 3544.8
+463.92465 7303.3
+464.25830 4184.7
+464.59244 1907.3
+475.24878 1103.1
+475.29504 7943.3
+476.29898 1585.7
+478.28928 585.1
+482.65500 723.1
+484.21811 1044.4
+489.26477 8529.5
+489.76794 3363.1
+497.28381 1377.8
+498.26727 989.3
+522.59558 752.0
+527.28754 1043.8
+527.60590 1315.0
+527.93610 1208.2
+528.25995 655.1
+531.63257 2117.2
+531.96313 2534.9
+532.54431 2129.2
+540.62726 6919.3
+540.96191 6011.8
+541.11414 4562.5
+541.29559 4078.8
+541.43933 4358.5
+541.62598 2209.3
+541.76581 2109.9
+542.77216 650.3
+542.94269 1789.2
+543.27399 2553.8
+543.60126 1289.2
+544.08307 1138.7
+544.14508 1076.0
+544.40417 2523.0
+544.47668 1715.4
+544.55054 896.1
+544.57166 864.8
+544.59998 957.2
+544.62085 1518.3
+544.65790 1112.4
+544.71875 2861.5
+544.77997 5026.3
+544.84442 2015.7
+544.87048 1738.7
+544.90796 1994.3
+544.94965 2303.2
+544.98413 1595.8
+545.00128 1593.4
+545.09955 5285.4
+545.15515 2348.8
+545.18237 2228.1
+545.23108 2561.2
+545.28015 14979.9
+545.35010 4045.4
+545.42358 7163.3
+545.47723 2170.8
+545.50720 3955.3
+545.55780 7094.9
+545.60919 16329.8
+545.67932 6792.1
+545.73785 6243.4
+545.79315 1784.0
+545.83954 4632.4
+545.88800 5679.4
+545.93018 7138.0
+545.97192 10204.8
+546.00708 2094.3
+546.04681 2415.5
+546.06866 3846.8
+546.09949 3180.5
+546.13885 2627.2
+546.17847 6860.5
+546.21527 5058.7
+546.25476 3353.5
+546.29614 12503.4
+546.35101 2575.4
+546.37006 3079.2
+546.40637 10204.4
+546.44562 3522.9
+546.48877 4077.6
+546.50653 5687.3
+546.53900 6060.1
+546.63074 3215768.3
+546.70709 9044.0
+546.72992 9149.2
+546.76410 4782.6
+546.79376 3020.9
+546.81488 3410.6
+546.83453 8467.8
+546.86670 7808.7
+546.90173 20084.5
+546.96112 3213747.3
+547.05634 9353.9
+547.08990 8690.7
+547.12402 3552.4
+547.17169 6992.5
+547.19751 9945.3
+547.22424 4151.0
+547.29382 1745409.0
+547.35663 7603.6
+547.38782 6602.9
+547.41840 8658.5
+547.45721 3590.4
+547.49994 2352.6
+547.52594 5430.0
+547.56744 4266.5
+547.62793 652194.2
+547.68665 3874.3
+547.75299 8749.7
+547.85883 9257.1
+547.91528 8391.2
+547.96271 180861.3
+548.04126 7625.8
+548.09058 2873.2
+548.11810 3083.0
+548.18628 8116.6
+548.24756 6666.3
+548.29797 48815.1
+548.37311 6068.1
+548.41791 2930.2
+548.44971 2350.7
+548.50031 7346.8
+548.56165 1774.0
+548.63037 13198.8
+548.68927 3065.7
+548.75214 1968.9
+548.77881 1389.9
+548.83185 4513.0
+548.88239 2684.4
+548.93787 5577.2
+548.99109 4125.2
+549.11316 989.3
+549.13495 884.4
+549.17078 1858.8
+549.20026 3268.4
+549.26764 2189.7
+549.33209 1475.7
+549.36047 794.0
+549.53436 1820.2
+549.56628 1087.9
+549.80133 1746.3
+549.86963 860.4
+550.30066 6433.5
+550.35425 2100.4
+550.62683 1400.0
+550.68854 2422.0
+551.30457 1553.6
+552.23267 4102.1
+552.56842 4600.1
+552.90350 1959.3
+553.26215 701.6
+553.78424 7689.8
+554.28723 4195.4
+554.78455 1616.6
+573.28998 4248.2
+573.79321 2166.4
+574.79211 4471.0
+575.29260 2287.7
+581.56036 1235.7
+582.29626 221219.0
+582.79749 133252.1
+583.02887 753.9
+583.29871 41204.2
+583.79968 10737.3
+584.29883 1642.8
+599.28058 9015.7
+600.28625 1841.9
+618.36145 756.0
+629.83325 7361.2
+630.33099 5237.2
+630.40112 1036.5
+630.83099 988.3
+631.33264 11681.2
+631.83264 6673.1
+635.39063 3770.5
+636.39130 1096.8
+637.13354 1419.5
+637.63226 1084.4
+638.00464 1212.2
+638.83826 352300.4
+639.33960 219484.8
+639.68207 1914.6
+639.84094 76528.0
+640.34259 19800.6
+640.54773 2213.8
+640.84479 4181.2
+641.04651 1211.2
+643.34650 1703.0
+649.29541 2152.9
+650.31342 991.6
+661.35754 4242.6
+662.36389 833.2
+663.38519 15095.2
+664.38843 5459.4
+676.64569 1258.1
+676.72217 2340.4
+677.05505 3646.3
+677.39362 1483.0
+677.71655 1308.8
+684.33423 770.2
+686.37653 16705.3
+686.87769 10276.4
+687.38098 3372.9
+687.46924 1047.2
+687.88104 851.0
+688.45190 788.9
+692.17474 873.7
+693.14655 1363.7
+693.27020 891.4
+693.31714 970.1
+693.35870 906.6
+693.44543 4571.6
+693.54053 1946.5
+693.57953 794.4
+693.62872 1058.0
+693.77264 2647.7
+693.94293 2946.3
+694.12341 1300.7
+694.26349 1836.7
+694.41467 3278.4
+694.48376 1374.9
+694.56396 1205.0
+694.61877 1137.8
+694.66901 1241.2
+694.92499 2455.4
+695.06018 2679.7
+695.20258 1136.8
+695.23749 1912.2
+695.27002 3075.1
+695.31622 16489.6
+695.38062 956837.6
+695.48944 3323.2
+695.54834 1600.0
+695.56677 918.0
+695.68402 1539.8
+695.73352 1570.6
+695.76849 943.2
+695.88141 665805.8
+695.98907 1895.6
+696.38263 261340.9
+696.65356 1849.8
+696.74493 1144.8
+696.88397 71411.2
+696.99493 1589.4
+697.10724 1085.2
+697.13782 1280.9
+697.22607 1440.1
+697.32013 4055.4
+697.38593 17871.6
+697.50226 2492.8
+697.64215 1753.1
+697.82526 4179.6
+697.88971 2858.9
+698.00238 1194.4
+698.32642 1710.7
+698.60962 914.2
+699.10822 998.7
+700.72894 815.5
+703.42444 1370.1
+709.36499 6581.0
+710.37732 1758.3
+715.05786 715.1
+718.78888 829.0
+727.37653 93000.4
+728.38031 27625.4
+729.38159 5360.4
+736.34100 2982.4
+737.34882 1303.8
+738.69623 666.3
+755.39240 4346.6
+755.89423 2892.2
+756.39404 2056.9
+762.38306 4221.9
+763.38641 1780.8
+764.32233 2803.2
+765.33154 1133.4
+768.91534 13660.2
+769.41718 11279.7
+769.92139 4270.6
+774.44476 1806.5
+775.44354 904.4
+795.53436 1137.6
+819.43939 5782.5
+819.94049 5021.2
+820.44342 2638.1
+820.94366 895.3
+846.42432 2932.3
+847.43408 832.6
+849.42200 1637.9
+850.42926 721.2
+864.43677 22388.1
+865.43817 9590.3
+866.44122 1666.0
+875.46661 13327.9
+876.47015 3364.1
+877.41144 4402.9
+878.40948 1795.8
+911.50110 3477.3
+912.50415 2120.5
+920.43231 2473.8
+921.42566 940.7
+977.51990 8287.0
+978.52643 3288.5
+990.49390 9278.5
+991.49860 4709.5
+992.50897 1169.1
+1033.50916 2026.5
+1035.48816 2573.3
+1036.49707 1153.0
+1057.26184 975.0
+1128.04041 624.5
+1145.58472 818.1
+1146.59668 3004.7
+1147.59338 1343.6
+1163.58606 9749.7
+1164.58948 4522.2
+1165.59290 1144.4
+1181.39807 810.3
+1197.86865 823.9
+1198.22253 3236.3
+1276.68066 1086.3
+1368.18359 769.5
+1387.05786 727.4
+1499.98462 663.4
+1525.41711 907.6
+1690.69580 750.7
+1694.76892 737.3
+1878.75073 1181.7
+1879.23914 2105.3
+1879.55310 22503.8
+1879.86462 1787.9
+1880.05908 2002.0
+1906.67737 1080.5
+1907.06946 8204.4
+S	1509	1509	410.4783796
+Z	4	1637.88222
+100.74953 627.6
+108.73532 556.7
+109.23130 536.1
+110.85993 595.5
+112.80999 684.8
+113.82679 528.6
+114.03416 652.8
+121.79801 2153.1
+129.60789 555.9
+146.92003 542.5
+151.24731 523.5
+161.14664 605.7
+161.35719 562.6
+163.92987 576.4
+165.69975 528.8
+180.07843 596.8
+182.77861 577.1
+188.27086 2274.8
+188.28101 2190.0
+188.29459 2445.0
+188.32808 563.1
+197.83138 547.9
+199.15923 668.3
+199.18170 5450.1
+199.24281 734.4
+199.25519 1454.9
+199.27487 2389.8
+199.28828 766.2
+199.29614 1178.2
+199.30365 716.6
+199.40028 563.6
+200.18318 836.4
+200.63759 1897.8
+221.12965 40383.9
+222.13307 6845.9
+227.17682 2879.8
+235.37849 587.0
+249.12476 27678.3
+250.12801 4327.9
+251.15280 1362.1
+254.16284 1618.0
+255.11018 1471.0
+258.15182 68211.5
+258.65350 18327.9
+259.15503 3276.6
+259.65598 594.9
+265.72754 568.8
+266.05936 584.0
+272.13742 1467.4
+272.17313 5832.5
+280.17181 557.4
+290.14749 881.5
+300.00211 599.6
+301.89832 646.6
+303.08566 586.0
+317.18726 2499.9
+318.19113 698.6
+326.51193 4245.0
+326.84677 2967.8
+327.18069 859.7
+333.74991 652.8
+348.68506 569.7
+350.14545 769.3
+350.29626 934.7
+362.18234 1062.4
+362.20975 4922.1
+363.21194 1152.6
+363.51895 870.9
+364.19247 6831.9
+364.24792 1504.9
+364.69424 2985.4
+365.18579 545.7
+369.18787 757.7
+388.53418 4270.1
+388.86801 1682.7
+389.20313 942.5
+389.53659 625.4
+391.28619 2428.3
+395.95105 1683.1
+398.97488 1586.6
+399.22723 873.5
+405.72165 8113.9
+405.97250 9767.7
+406.22327 7221.4
+406.47574 2095.6
+406.63348 2902.7
+406.73264 740.0
+406.88019 2930.0
+407.12900 1440.5
+407.82697 1319.3
+408.06946 1666.0
+408.76376 1606.3
+409.00977 1068.9
+409.03879 1564.7
+409.07578 1605.6
+409.16150 958.9
+409.22357 2035.5
+409.24994 824.1
+409.28821 2049.5
+409.35092 9966.0
+409.40152 1552.1
+409.43820 1408.8
+409.47327 2210.9
+409.50406 3300.4
+409.52457 1164.5
+409.53793 1217.2
+409.59921 10220.7
+409.65076 4236.5
+409.68704 2405.6
+409.72775 2323.8
+409.74530 4240.8
+409.79031 8074.9
+409.84903 6990.3
+409.90005 3481.4
+409.93649 4145.3
+409.97873 2291.4
+409.99036 3221.1
+410.01459 1225.4
+410.03912 9312.6
+410.07837 4827.5
+410.10168 4307.4
+410.11484 2013.5
+410.12735 3059.2
+410.15161 6351.3
+410.18286 8048.7
+410.22473 1658369.0
+410.26587 6370.4
+410.28519 6759.5
+410.30841 2370.0
+410.32437 5480.9
+410.34756 3742.0
+410.36340 4061.7
+410.38486 3218.9
+410.39798 4477.8
+410.40970 4204.8
+410.42484 5904.8
+410.43793 9529.8
+410.47314 1820845.9
+410.50912 10482.2
+410.53482 6573.8
+410.54941 2937.6
+410.57285 5317.7
+410.59671 3231.3
+410.61102 3704.0
+410.63806 3187.1
+410.66052 13472.3
+410.67969 4117.0
+410.72205 1071715.8
+410.76239 7693.6
+410.78177 3914.7
+410.79697 3767.0
+410.81995 3716.0
+410.84500 2604.8
+410.85522 1359.3
+410.86734 1402.5
+410.90842 13202.3
+410.97226 434243.5
+411.01196 6342.4
+411.04681 5507.2
+411.06857 1961.7
+411.09961 11988.0
+411.13498 3596.0
+411.15793 7675.8
+411.22357 126850.8
+411.26248 3920.9
+411.29752 4262.6
+411.34970 12561.2
+411.38266 2164.3
+411.40958 3569.0
+411.47556 30144.7
+411.51294 1294.3
+411.54977 2293.8
+411.60040 7690.2
+411.66257 2179.6
+411.69562 1074.2
+411.72650 7509.5
+411.80215 1170.1
+411.85208 3474.6
+411.87479 1218.8
+411.91583 1594.1
+411.94534 1475.9
+411.97583 1911.8
+412.10535 1267.6
+412.12885 1041.9
+412.16592 1248.5
+412.19501 1272.7
+412.22607 727.9
+412.64191 1469.6
+412.89267 976.6
+413.15140 604.4
+413.22375 1205.8
+413.47421 1470.2
+413.86200 2256.5
+414.11426 3255.2
+414.36530 1598.3
+414.61923 796.6
+414.71078 803.6
+419.20468 582.3
+420.22937 731.6
+420.56302 647.2
+423.71445 2917.5
+424.21710 804.8
+425.21976 925.9
+426.22751 44994.1
+426.56177 41258.0
+426.89584 17379.2
+427.23019 5079.5
+427.56339 1307.3
+432.72095 8722.7
+433.22348 2131.6
+433.72058 931.7
+437.21552 15148.1
+438.22009 2981.4
+442.19510 882.9
+447.29709 1197.1
+448.30408 1036.9
+456.22076 720.1
+457.91895 1603.4
+458.25150 995.6
+458.58487 1199.5
+462.87201 1672.6
+463.04910 753.8
+463.20078 1230.1
+463.23276 2607.0
+463.40292 1187.9
+463.73441 966.6
+463.92252 312843.4
+464.21854 2741.0
+464.25635 305542.4
+464.44547 1737.6
+464.59061 153865.1
+464.64938 1066.9
+464.77786 1173.7
+464.92499 57710.4
+464.98007 2151.9
+465.10187 684.6
+465.25986 14347.9
+465.31320 2000.5
+465.59506 2006.8
+465.64877 815.1
+466.24246 617.1
+470.25385 585.2
+475.29294 7851.8
+476.29709 1887.7
+480.25781 1270.2
+480.73148 687.7
+483.48697 628.8
+484.21637 4722.5
+489.26294 29725.6
+489.76477 15624.8
+490.26541 4238.6
+490.76627 1091.4
+497.28488 1877.3
+498.26907 2283.6
+502.22748 1258.3
+505.27808 852.6
+512.94482 7378.7
+513.27972 9488.2
+513.61487 5291.1
+513.94666 1517.9
+514.27673 738.9
+514.30438 573.0
+515.29523 31148.9
+516.29791 8954.6
+517.29791 1520.4
+518.24762 17148.8
+518.74988 8208.9
+519.24963 2562.9
+519.74689 957.6
+522.30408 2578.9
+530.01819 595.2
+532.31097 1058.2
+532.55341 2401.8
+542.78302 1224.8
+544.77917 5166.6
+545.28320 1171.9
+545.78186 630.2
+546.62830 12999.3
+546.96259 14824.8
+547.24835 672.9
+547.29651 8136.7
+547.63220 3825.7
+549.14966 737.3
+550.30078 9814.7
+550.38983 604.1
+551.30457 2461.2
+553.28699 3818.0
+553.78595 11470.4
+554.28650 7243.2
+554.78589 2203.4
+562.29437 92441.8
+562.79596 76896.9
+563.29742 31885.2
+563.79834 7440.6
+564.26996 807.2
+564.31024 1297.4
+564.77979 2029.7
+567.29071 601.7
+572.02454 613.2
+573.28992 17147.4
+573.79083 9634.0
+574.29181 5031.3
+574.78979 7091.9
+575.29211 4207.1
+575.78979 1378.6
+576.23431 788.0
+576.72235 784.4
+577.71478 570.9
+580.81805 4020.1
+580.86243 589.8
+581.07288 1144.3
+581.26630 1243.3
+581.31970 2123.3
+581.56140 2690.7
+581.63220 793.8
+581.81018 1507.2
+582.06647 1305.7
+582.19586 1254.5
+582.21594 1695.4
+582.29535 614325.1
+582.43982 1034.7
+582.52655 1282.0
+582.57324 637.5
+582.79663 399971.3
+582.88440 1416.7
+582.91650 1029.2
+583.03064 3660.4
+583.29767 152124.7
+583.53241 2607.6
+583.66187 598.0
+583.68872 878.7
+583.79865 40316.9
+584.02032 1571.1
+584.24493 760.4
+584.29779 9862.5
+584.50793 639.3
+584.53302 638.3
+584.79083 2626.9
+588.45770 1067.5
+589.30347 677.4
+592.27667 1313.1
+593.27942 909.2
+599.27985 14592.1
+600.28381 3543.3
+613.29315 1204.6
+619.80634 1779.3
+620.30524 1029.8
+629.83191 5243.5
+630.32288 5851.4
+630.39484 634.7
+630.83466 1237.7
+631.26373 631.3
+631.33124 4193.0
+631.83618 2599.2
+632.32806 982.0
+638.83716 132009.5
+639.33856 91847.9
+639.83984 30900.6
+640.34198 10211.3
+640.54706 643.1
+640.84314 910.1
+641.04523 779.7
+643.34711 2660.8
+643.83099 1061.7
+649.29565 32710.4
+650.29871 11325.3
+651.30341 2553.8
+661.35901 4235.8
+662.35931 2290.8
+663.38556 4119.3
+664.38904 1917.5
+676.62793 1128.7
+695.38147 2573.6
+695.88440 1149.2
+709.36505 8644.0
+710.37183 2218.8
+711.33746 929.7
+727.37549 108219.2
+728.37842 36518.0
+729.38062 7759.0
+730.38098 1440.5
+736.34052 1500.6
+737.33813 808.0
+762.38086 23800.6
+763.38342 9692.7
+764.32526 7278.3
+765.32635 3140.4
+780.31116 629.7
+795.55444 1062.6
+846.42114 1313.0
+864.43549 7869.3
+865.43701 3714.4
+866.44507 1152.4
+875.46503 24419.2
+876.46838 12884.9
+877.43866 3800.6
+878.44177 1200.2
+911.49738 2261.7
+912.50714 850.0
+920.42358 3228.0
+921.43152 1695.2
+977.52368 1147.3
+1033.50452 807.1
+1035.48767 1290.8
+1057.22266 776.2
+1101.32959 562.4
+1105.26440 540.0
+1140.36646 715.8
+1159.21094 649.3
+1198.23657 3639.4
+1224.78491 669.9
+1262.44910 632.2
+1396.17041 673.7
+1432.06165 755.7
+1525.38574 995.0
+1546.88452 598.1
+1650.62610 751.8
+S	1510	1510	411.2283246
+Z	4	1640.882
+101.72872 726.8
+106.53803 582.3
+121.29422 735.8
+121.79374 1366.7
+121.79729 1407.5
+121.80134 1622.0
+123.23695 545.8
+129.01440 594.6
+134.73598 500.0
+136.02986 501.2
+143.51756 693.5
+146.91275 653.9
+161.01120 637.7
+169.21169 592.7
+177.10286 1459.5
+186.52592 522.8
+194.73370 565.7
+199.05765 556.5
+199.17088 789.5
+199.18147 4257.1
+199.21779 809.4
+199.25237 1400.4
+199.26808 3148.0
+199.27937 1159.0
+199.36502 1193.9
+199.48753 539.5
+200.63774 1942.8
+221.12952 41322.0
+222.13287 5710.0
+224.82695 652.6
+225.54790 478.7
+227.17657 4055.6
+233.16554 736.2
+249.12459 28754.1
+249.47720 566.3
+250.12802 5249.1
+254.16309 986.3
+255.11032 1243.4
+258.15170 69403.8
+258.58914 712.6
+258.65344 16578.1
+259.15488 2983.2
+272.13483 1061.2
+272.17303 6422.7
+285.48022 573.7
+290.14771 1581.8
+317.18793 2200.7
+326.51163 2817.1
+326.84607 3221.0
+327.18149 734.1
+344.19547 725.3
+359.66971 1052.3
+362.20950 4629.1
+363.21188 831.3
+364.19238 4358.8
+364.24802 1180.3
+364.69357 2564.2
+366.53363 566.0
+381.31619 589.8
+382.85327 589.0
+386.19559 807.2
+388.53354 4503.7
+388.86768 4242.3
+389.20206 1062.2
+391.28708 2243.4
+396.19907 1245.4
+399.22748 1099.8
+405.72104 5435.9
+405.97198 8828.5
+406.22244 4298.4
+406.47025 1632.2
+406.63251 1179.2
+406.87625 1208.7
+407.12161 717.4
+407.82227 1012.8
+408.06906 1173.8
+408.68866 793.8
+408.76437 781.5
+408.77521 764.2
+408.88599 1330.4
+408.90973 845.5
+409.01297 1418.8
+409.07318 1979.5
+409.13528 1069.2
+409.21033 1892.6
+409.27643 1403.9
+409.30734 2275.2
+409.31638 2223.7
+409.34982 9550.3
+409.38889 1694.3
+409.41464 2143.8
+409.45309 3159.4
+409.49612 5055.7
+409.53003 1374.7
+409.55228 1853.3
+409.59711 9412.6
+409.63858 2283.8
+409.66296 3204.7
+409.70291 2197.4
+409.74533 4927.4
+409.78934 7534.0
+409.84567 4811.8
+409.88873 1917.2
+409.91232 1892.9
+409.92856 2078.7
+409.95322 1642.0
+409.97852 1877.3
+409.99231 3683.6
+410.01315 2524.3
+410.03925 7867.0
+410.06500 2887.9
+410.07980 2917.9
+410.09143 3610.5
+410.09976 3626.1
+410.11490 2078.5
+410.12811 1976.5
+410.14203 2806.4
+410.15222 4652.0
+410.17398 3824.4
+410.18448 4802.4
+410.22400 1480296.9
+410.26837 4670.7
+410.28543 5653.1
+410.31027 3647.6
+410.32358 3313.0
+410.33429 3719.3
+410.34744 3373.8
+410.37302 5513.9
+410.39807 3678.6
+410.40961 3479.1
+410.42352 4462.3
+410.47290 1517313.8
+410.52252 7009.4
+410.55978 3296.0
+410.58539 2541.6
+410.59808 2304.0
+410.62094 4587.4
+410.65985 12594.6
+410.72253 847818.3
+410.77008 5154.2
+410.78723 2577.7
+410.80743 3389.6
+410.83289 2316.9
+410.85941 2544.3
+410.90848 11497.6
+410.93268 3678.0
+410.97327 325560.9
+411.01877 2323.6
+411.03482 3865.1
+411.05939 3546.0
+411.10147 10936.0
+411.13641 1043.2
+411.15933 6144.8
+411.22458 97984.1
+411.28525 3305.4
+411.31134 2213.1
+411.35098 11171.3
+411.39560 2649.5
+411.41473 3012.3
+411.47678 18756.3
+411.53598 1806.8
+411.56277 1439.5
+411.60117 6470.3
+411.63364 2507.9
+411.67648 1734.8
+411.72916 4181.3
+411.81754 1660.4
+411.85330 2551.2
+411.88058 1225.6
+411.90176 990.3
+411.93814 1532.4
+411.98740 1138.5
+412.00113 850.9
+412.06793 971.4
+412.64633 1261.9
+412.70016 660.6
+412.89844 1245.3
+413.72607 1029.3
+413.86325 1130.6
+414.11432 1146.3
+414.70972 1277.9
+419.20303 674.3
+423.71472 2635.1
+424.21918 1360.4
+426.22742 38751.8
+426.56152 30139.7
+426.89569 14930.6
+427.22922 3338.2
+427.56540 996.2
+432.72116 9763.4
+433.22327 3267.9
+433.72107 915.3
+437.21548 19357.9
+438.21866 3817.9
+447.29761 1645.3
+457.28220 1041.5
+457.91824 1131.5
+458.24954 1049.4
+460.71289 1077.1
+462.87091 1297.1
+463.20456 1467.7
+463.23328 2509.3
+463.40594 1261.4
+463.53839 738.6
+463.73697 1341.1
+463.92230 290778.7
+463.96735 1648.7
+464.07132 1111.0
+464.09512 911.5
+464.25623 271418.2
+464.44482 1830.2
+464.59033 138751.2
+464.69989 815.5
+464.77618 1499.8
+464.92459 42827.4
+464.97931 2178.1
+465.13504 897.1
+465.25885 10781.1
+465.31274 1615.3
+465.59369 2937.8
+465.64780 798.8
+475.29260 7952.6
+476.29791 2000.1
+476.77521 898.6
+480.25916 1084.4
+480.73239 621.6
+484.21558 5482.9
+485.21951 1134.9
+487.03452 599.3
+489.26270 29350.8
+489.76462 15149.9
+490.26572 4518.5
+490.76718 688.7
+497.28503 2540.7
+498.26849 3104.1
+499.04944 637.2
+502.22617 1724.4
+505.27670 1021.3
+510.50751 629.6
+512.94489 8571.9
+513.27893 7898.2
+513.61353 5376.0
+513.94781 1531.8
+515.29480 39966.6
+516.29749 9617.4
+517.29980 1567.8
+518.24768 18807.7
+518.74908 9162.3
+519.24976 1378.9
+522.30603 2967.6
+532.31256 1252.8
+532.55823 1720.9
+533.32037 801.0
+534.26453 541.2
+535.96240 638.4
+542.78149 1373.6
+544.77948 5713.0
+545.28052 2545.9
+545.78711 836.8
+546.62866 13130.3
+546.96185 14816.6
+547.29633 7647.8
+547.63043 3617.5
+547.96436 1038.6
+550.29993 12490.6
+551.30267 3118.5
+552.30255 691.9
+553.28778 2393.8
+553.78571 15322.2
+554.28619 6813.0
+554.78827 3063.0
+562.29401 88462.5
+562.79553 69836.7
+563.29724 26305.1
+563.49353 600.5
+563.79895 7537.4
+564.28033 1784.6
+564.77795 2906.5
+565.27563 1418.3
+567.29028 934.6
+573.28992 19322.5
+573.79132 8889.8
+574.29291 3623.8
+574.78986 7393.8
+575.29120 4312.6
+575.79340 1643.4
+578.26062 798.6
+579.87817 584.1
+580.34222 1035.5
+580.81659 3852.7
+580.88342 1102.4
+581.07190 1832.5
+581.26764 1790.8
+581.31433 2451.5
+581.55853 1818.6
+582.06274 2055.2
+582.29498 625792.4
+582.54510 2144.5
+582.69501 1049.7
+582.72345 1650.5
+582.79626 416824.2
+582.88239 1193.8
+582.98352 631.5
+583.02509 3396.2
+583.29755 157992.3
+583.60223 664.6
+583.72620 1163.5
+583.79773 46192.9
+583.85693 1216.8
+584.01440 1500.7
+584.29651 9040.2
+584.41235 697.7
+584.52515 808.7
+584.79773 1728.1
+586.00452 551.1
+592.26996 1386.7
+599.28009 18165.6
+600.28308 5726.6
+601.28870 741.7
+613.29456 2481.6
+619.80560 1672.0
+620.30670 1212.4
+629.83075 4631.1
+630.32477 7853.5
+630.83490 810.9
+631.32916 5499.5
+631.83386 2032.3
+632.32825 850.8
+635.39374 903.4
+637.14465 866.0
+637.99310 751.3
+638.83679 145491.2
+639.33820 98925.0
+639.83917 36237.9
+640.34045 9906.4
+640.54315 1328.3
+640.84296 2058.4
+643.34546 2503.8
+643.82910 1546.7
+649.29523 37495.3
+650.29797 11912.7
+651.30188 3065.7
+661.35657 3849.6
+662.35876 1016.0
+663.38501 4878.7
+664.39020 1780.1
+667.34485 1301.4
+671.16418 665.6
+695.37775 1652.6
+695.87903 1253.1
+709.36493 10366.6
+710.37177 2063.8
+726.35364 843.3
+727.37494 145612.2
+728.37793 45300.7
+729.38049 10693.7
+730.38019 1515.7
+734.85516 626.5
+736.33710 2684.0
+738.34985 683.0
+744.37793 796.2
+762.37988 27754.9
+763.38318 11462.8
+764.32446 9431.3
+765.32574 2761.1
+766.33221 888.4
+772.09399 589.3
+774.44318 937.5
+795.55670 1086.8
+846.42804 1753.9
+849.41956 852.5
+864.43445 11203.3
+865.43683 4611.5
+875.46411 25948.3
+876.46692 12979.7
+877.44037 5378.8
+878.42932 1529.3
+911.49896 1006.2
+912.06775 555.5
+912.49518 878.5
+913.51257 653.9
+920.42548 4334.2
+921.42670 1615.1
+977.51563 2374.5
+978.52502 1320.4
+1019.69928 721.2
+1033.51221 895.6
+1034.52356 720.5
+1035.48938 1755.0
+1057.24023 870.2
+1151.22388 642.9
+1198.24707 3223.6
+1202.26501 759.3
+1242.48450 594.9
+1312.17993 705.6
+S	1511	1511	476.3028246
+Z	1	475.295
+120.93543 544.1
+121.79671 2518.4
+128.73836 523.0
+130.41138 563.3
+134.65172 541.5
+136.87604 535.4
+138.29279 552.0
+143.52014 544.4
+148.76688 843.0
+159.33722 662.4
+163.54256 546.1
+168.15010 583.8
+170.75435 591.9
+187.48027 495.0
+188.24771 872.6
+188.26375 826.7
+188.27438 1298.3
+188.28503 1359.3
+188.29257 1118.4
+188.30090 989.6
+188.31473 974.0
+198.89011 799.7
+199.18375 915.1
+199.21964 824.4
+199.23134 843.7
+199.25446 1329.2
+199.27304 2208.1
+199.28264 1586.7
+199.30254 953.0
+199.37068 603.4
+199.37979 656.2
+200.56026 626.0
+204.20329 626.7
+219.40120 657.7
+221.12852 1001.3
+233.56432 544.3
+249.12332 1694.8
+255.27713 502.3
+258.10977 683.5
+260.82910 563.8
+262.98749 555.6
+271.63721 775.4
+275.58124 597.9
+284.48029 576.7
+286.67914 516.3
+317.18454 1239.2
+321.61685 519.7
+340.63040 600.9
+355.42264 713.1
+362.20667 8790.8
+363.21042 1817.5
+370.30063 601.6
+410.21942 2140.1
+410.46823 1931.5
+427.53430 840.1
+447.29565 4507.8
+448.29984 832.6
+452.89951 604.5
+457.27985 2552.0
+459.27878 10229.4
+473.48648 618.6
+474.56198 596.7
+532.53339 2262.6
+546.62219 737.7
+549.13324 810.9
+625.61987 617.9
+676.61737 1062.5
+795.55676 960.0
+846.26361 592.7
+873.57446 563.3
+1019.72418 825.2
+1057.21558 883.8
+1060.81787 585.4
+1197.93652 550.9
+1198.18726 3466.4
+1203.32935 715.3
+1555.40991 706.3
+1708.49304 646.9
+1720.05579 762.0
+1784.92908 629.0
+1800.49951 613.1
+1878.37964 787.1
+1878.70215 1262.6
+1879.04138 941.7
+1879.47266 19357.6
+1879.96484 1284.8
+1880.28113 1376.4
+1880.76208 619.1
+1881.32019 958.6
+1907.06140 7415.1
+1907.33667 697.5
+S	1513	1513	410.4798246
+Z	4	1637.888
+102.17500 4892.4
+106.72956 5128.4
+121.79766 22899.9
+122.20675 5080.2
+129.48480 5327.5
+130.04088 5790.6
+146.43332 4833.0
+152.78918 5747.1
+165.68929 5550.2
+166.63188 6008.0
+166.90343 5043.7
+171.89517 5179.9
+174.03275 8763.0
+188.22849 5808.5
+188.25490 11004.8
+188.27892 20542.7
+188.29167 21437.0
+188.31534 17482.2
+188.33748 5443.6
+188.35158 5344.0
+191.59230 5040.2
+199.23383 8103.7
+199.25345 8396.7
+199.26025 5886.2
+199.27267 9364.3
+199.28148 10796.5
+199.29245 21087.7
+199.30431 6343.9
+199.34038 6148.5
+199.34717 4647.6
+199.39409 7232.7
+205.55566 7074.9
+214.50827 5662.9
+221.37364 5245.1
+232.04074 5260.3
+255.28435 7654.4
+255.69678 5103.4
+260.75500 4843.1
+269.09729 5871.4
+271.92850 6365.7
+294.31317 5079.7
+322.73773 5347.1
+327.71777 5298.5
+330.95911 5531.7
+340.18948 5581.4
+350.28864 5838.4
+364.56909 5698.5
+423.16153 5152.2
+427.52673 6169.3
+448.94165 5814.6
+475.26947 7961.5
+478.69858 5243.5
+482.63458 8494.8
+489.17050 5913.0
+489.22559 6081.3
+489.71973 4729.3
+490.21124 5593.8
+515.23303 6024.1
+532.60687 14251.3
+549.13605 7133.4
+582.29388 12793.8
+582.79749 8359.0
+590.21466 6757.3
+596.90271 6202.4
+653.20966 5589.3
+658.07947 5401.4
+676.63800 8269.5
+698.27045 5139.3
+707.56207 5540.2
+737.24054 5574.7
+819.83698 4911.9
+842.85132 6295.6
+915.95758 5677.4
+1172.33472 5539.1
+1188.14453 6134.6
+1198.35925 27768.7
+1199.34045 5765.5
+1345.48645 5429.6
+1400.02563 6096.9
+1453.28784 6145.5
+S	1514	1514	411.2283246
+Z	4	1640.882
+116.30223 602.8
+117.48995 580.8
+119.36164 542.1
+120.32410 612.2
+121.79746 2430.0
+131.37570 702.1
+144.50041 591.5
+150.69408 555.0
+160.51822 696.9
+173.37422 581.2
+174.03894 602.9
+177.10321 795.1
+188.20871 830.9
+188.25639 1410.7
+188.28387 2288.2
+188.29762 2317.4
+188.33365 610.3
+188.34489 535.8
+188.36874 714.6
+188.37645 597.9
+195.53848 601.5
+199.18144 5723.1
+199.24133 623.7
+199.25349 887.7
+199.27739 2897.1
+199.37512 1084.0
+200.63809 1263.9
+209.63307 728.2
+214.51982 625.9
+221.12965 43511.1
+222.13290 6652.7
+227.17636 3962.9
+231.29205 581.2
+233.16609 734.7
+249.12466 30349.8
+249.63904 1245.3
+250.12845 3888.0
+251.15227 1175.6
+254.16353 1569.4
+255.11040 1563.0
+258.15182 71724.3
+258.65344 17909.2
+259.15460 3513.5
+272.13757 1766.0
+272.17313 6818.1
+273.17624 868.6
+273.97513 672.4
+289.19373 742.1
+290.14764 855.9
+317.18759 3371.4
+318.19241 762.2
+326.51202 3633.2
+326.84625 2753.9
+327.18115 1722.6
+342.27896 544.2
+342.28925 492.6
+355.68994 669.0
+362.13898 743.4
+362.20950 5059.1
+363.21423 862.3
+364.19238 8393.2
+364.24701 1496.3
+364.32135 550.7
+364.69473 2406.7
+388.53317 4045.0
+388.86844 3445.5
+391.28668 2036.1
+395.95294 1470.8
+396.84048 556.5
+397.12445 590.3
+398.97339 764.0
+399.47162 638.5
+403.46530 594.0
+405.72177 7676.8
+405.97223 9207.8
+406.22269 4540.7
+406.47104 2057.8
+406.63345 2734.5
+406.87790 2611.2
+407.12305 1605.3
+407.82788 1304.7
+408.07278 1268.0
+408.77014 1607.3
+409.02094 1811.3
+409.11496 1538.9
+409.14886 914.2
+409.18243 1294.9
+409.20926 1881.1
+409.27338 1528.3
+409.31613 4736.9
+409.34631 6762.1
+409.38235 2447.6
+409.42203 2503.9
+409.43140 2666.0
+409.45541 2950.7
+409.50137 4870.5
+409.56232 5706.5
+409.59451 6026.9
+409.62955 1882.4
+409.64929 1626.8
+409.66547 1307.0
+409.68417 1768.2
+409.74579 4930.8
+409.79150 6141.3
+409.81406 2366.3
+409.84079 2568.7
+409.86584 1460.3
+409.87717 1766.6
+409.91879 2290.7
+409.93735 3646.1
+409.94962 1389.9
+409.97705 1262.0
+409.99182 3312.1
+410.03909 6795.1
+410.07733 4612.2
+410.11642 2598.9
+410.12683 3662.7
+410.14157 3139.0
+410.15250 4135.4
+410.16608 3910.8
+410.18362 7376.6
+410.22467 1762506.8
+410.26465 9501.8
+410.28510 5806.7
+410.29575 6233.9
+410.32343 6124.2
+410.34796 2533.0
+410.36282 4408.0
+410.37115 4854.6
+410.38443 3919.3
+410.39673 3059.0
+410.40979 4014.7
+410.42459 6115.4
+410.47272 1738913.5
+410.51120 13666.6
+410.53741 4014.2
+410.54672 5241.2
+410.57147 4707.9
+410.59186 1606.1
+410.61157 4621.5
+410.65158 9872.6
+410.72177 949611.0
+410.76111 7828.8
+410.78040 3156.3
+410.79550 4593.6
+410.81863 2731.0
+410.82986 1553.6
+410.84601 1973.2
+410.85556 1984.6
+410.90356 8564.3
+410.93066 3041.2
+410.97250 355678.4
+411.01050 4980.1
+411.03189 2457.0
+411.04651 2105.7
+411.07083 3567.1
+411.10660 7521.5
+411.13455 5296.3
+411.15421 3148.5
+411.16608 3182.0
+411.22379 104611.6
+411.26495 3932.3
+411.27933 3214.6
+411.31891 3168.8
+411.35474 7902.5
+411.38559 6396.5
+411.42026 2493.6
+411.47403 21679.1
+411.51868 2067.4
+411.52966 2066.4
+411.55792 1648.6
+411.60428 4015.2
+411.63409 3150.3
+411.67853 2537.7
+411.69443 2689.2
+411.72452 5542.4
+411.76648 1160.4
+411.84158 1484.6
+411.88947 1096.8
+411.93100 2105.3
+411.97238 681.8
+412.18378 1212.3
+412.19870 882.4
+412.64139 1240.1
+412.89304 1119.0
+413.14276 877.8
+413.86270 2754.1
+414.11465 2754.5
+414.20947 1012.6
+414.36731 1356.1
+414.70834 714.9
+419.20587 1316.0
+420.22308 1008.5
+423.71454 3946.8
+424.21692 1523.5
+425.21594 786.1
+426.22757 63998.0
+426.56152 47564.0
+426.89606 20531.5
+427.23038 5968.3
+427.55130 527.6
+427.56830 708.8
+432.72104 10682.5
+433.22379 4781.2
+433.72293 1003.1
+437.21573 19517.7
+438.22009 3748.9
+438.62320 524.0
+439.97528 612.1
+442.19464 852.6
+447.29913 1369.6
+448.29959 1024.6
+448.92029 788.2
+450.47467 672.0
+456.75540 584.2
+457.91776 1648.8
+458.25357 1199.9
+458.28558 708.3
+458.59082 776.0
+462.82526 726.3
+462.86615 1161.5
+463.05167 830.8
+463.16727 828.7
+463.20126 1398.2
+463.23047 2632.4
+463.39737 1830.2
+463.56128 629.1
+463.72855 1331.7
+463.92245 348834.3
+464.08209 838.1
+464.09549 765.1
+464.21835 3477.5
+464.25632 312013.3
+464.43988 2457.1
+464.59039 147098.1
+464.78241 2475.2
+464.92468 47903.9
+464.98047 1333.0
+465.01974 748.3
+465.12231 1468.9
+465.17859 835.7
+465.25891 11876.5
+465.32037 1045.2
+465.35562 799.7
+465.45392 781.9
+465.59445 1678.9
+465.93414 591.7
+475.24359 772.5
+475.29288 8016.4
+476.29639 2709.8
+476.76624 786.9
+480.25735 2537.7
+480.73044 953.5
+482.44388 568.1
+483.43811 628.0
+484.21701 5752.3
+485.21909 1059.8
+489.22281 517.6
+489.26291 33325.1
+489.76450 18945.5
+490.26541 4789.1
+490.76743 865.3
+495.29398 654.7
+497.28461 1876.2
+498.26761 3099.5
+502.22614 1979.2
+505.27515 1433.6
+512.94525 8691.9
+513.27930 7302.3
+513.61432 5374.9
+513.94855 1762.4
+515.29504 39303.1
+516.29846 8065.2
+517.30231 1075.3
+518.24762 19497.4
+518.74915 8201.4
+518.79559 606.4
+519.25085 2728.8
+519.74799 717.0
+522.30591 3702.0
+523.30499 895.1
+528.42651 597.2
+528.91254 595.7
+532.30835 1702.7
+532.60706 1860.6
+534.40033 741.6
+542.27252 1637.3
+542.78082 1585.3
+543.28455 779.2
+544.77966 5326.7
+545.28009 2747.8
+546.62823 15320.1
+546.96265 13292.7
+547.29663 6497.4
+547.63019 1783.5
+549.16827 680.4
+550.29999 12221.3
+551.30310 3099.2
+553.28912 3607.5
+553.78577 13628.3
+554.28656 7782.3
+554.78644 1470.8
+562.29437 97664.4
+562.79596 74946.9
+563.29730 29225.1
+563.79846 7448.2
+564.28522 2471.1
+564.77887 2491.8
+571.69495 579.5
+573.29034 22093.9
+573.79120 11819.4
+574.29395 3281.9
+574.79016 6713.3
+575.29230 2748.4
+575.79279 1201.0
+580.75531 1257.3
+580.81110 3037.7
+580.95953 616.6
+581.06830 1106.4
+581.23029 1057.8
+581.27301 767.0
+581.30664 1212.0
+581.56470 3862.4
+582.05316 2887.1
+582.21240 3398.8
+582.29523 684252.9
+582.38409 987.3
+582.56354 1421.4
+582.71765 691.9
+582.79657 420555.4
+583.03027 4322.5
+583.29773 158072.0
+583.36481 1163.9
+583.39081 535.5
+583.52747 4169.5
+583.63049 909.6
+583.65692 557.8
+583.72974 1119.0
+583.80011 40627.6
+583.86029 1404.2
+584.03540 1349.2
+584.24084 689.6
+584.30432 6677.0
+584.34991 554.3
+584.81403 1095.3
+588.46112 1139.2
+588.96442 692.3
+590.45392 602.5
+592.27509 2753.9
+593.27942 1308.0
+599.27979 20316.7
+600.28278 3939.3
+601.28210 944.5
+612.30939 811.8
+613.29504 2222.9
+619.80646 2310.3
+620.30780 1193.8
+629.83289 5102.6
+630.32227 6656.4
+630.83606 1293.3
+631.32990 5759.5
+631.83423 2735.0
+635.39612 1003.9
+638.83704 148462.0
+639.33844 93768.4
+639.67987 968.4
+639.83984 33497.6
+640.34125 9136.2
+640.84088 1460.2
+642.82642 688.4
+643.34680 2755.1
+643.83093 2688.1
+649.29565 36776.1
+650.29913 12647.8
+651.30310 2624.2
+653.20093 927.1
+661.35687 4428.2
+662.36163 1394.5
+663.38550 4673.2
+664.38855 1810.4
+667.34503 701.3
+676.64038 726.8
+676.66272 728.9
+695.38080 1803.9
+695.88068 743.9
+706.11798 715.5
+709.36505 10603.7
+710.37866 1857.2
+711.37238 605.5
+727.37537 138089.4
+728.37878 42796.4
+729.38177 9749.4
+730.38245 1332.7
+736.33801 2276.7
+762.38068 27503.0
+763.38367 10149.2
+764.32532 9422.0
+765.32703 3030.0
+774.43939 971.9
+795.54413 910.6
+804.86609 654.3
+846.42535 1080.6
+858.06323 722.6
+864.43506 9478.7
+865.43604 4290.7
+866.44604 1214.5
+875.46558 24204.7
+876.46790 11617.7
+877.44189 3706.5
+878.45123 680.9
+911.50391 1984.4
+912.49872 1593.1
+920.42438 3812.7
+921.42822 2000.4
+947.85791 742.0
+977.51794 1429.9
+978.53369 739.7
+984.69910 561.1
+990.49329 719.0
+991.71027 648.1
+1019.72107 771.9
+1033.50708 962.3
+1035.48694 969.2
+1036.49878 1078.9
+1057.22974 975.2
+1162.89209 620.7
+1188.17212 718.5
+1198.36206 3240.7
+1430.07080 646.0
+S	1515	1515	410.2629871
+Z	4	1637.02065
+108.34764 684.7
+109.03154 544.7
+117.40453 530.2
+120.77711 607.5
+121.79574 2602.6
+124.85661 542.2
+125.37457 579.7
+132.30199 579.0
+148.63960 524.5
+158.09825 739.9
+160.01082 514.1
+164.08530 541.1
+165.77806 654.8
+169.48065 511.2
+169.48448 474.6
+177.10335 753.2
+180.34879 599.9
+189.82385 585.9
+198.78886 569.1
+198.88838 828.3
+199.18076 3805.1
+199.25760 1456.4
+199.27261 3288.3
+199.28822 1094.9
+199.30504 763.0
+199.35489 743.2
+199.36995 869.0
+199.47038 613.8
+213.08908 663.2
+219.40564 678.7
+221.12943 35758.0
+222.13287 5051.1
+227.17645 3347.3
+249.12444 22437.7
+250.12823 3098.5
+251.13187 607.5
+254.16194 1211.0
+255.10994 1603.8
+258.15158 61162.2
+258.65311 16278.1
+259.15448 2195.1
+272.13669 1956.9
+272.17285 3263.5
+288.25168 641.0
+289.19440 1156.5
+299.03918 556.8
+307.11459 648.8
+307.23291 583.7
+317.18707 2807.0
+326.51202 4154.7
+326.84680 2831.5
+344.19980 892.4
+350.28146 842.0
+362.20923 5220.5
+363.21347 1763.7
+363.85593 587.7
+364.19135 7919.0
+364.24570 970.4
+364.69324 2198.8
+366.11258 585.8
+372.35791 558.7
+388.53241 3314.1
+388.86755 1787.4
+389.20279 1012.6
+391.28583 1707.9
+395.72275 614.9
+395.95468 1494.7
+396.20416 1200.1
+399.21820 755.4
+405.72165 5293.3
+405.97235 7188.0
+406.22418 5155.0
+406.63422 2302.5
+406.87827 2308.7
+407.12320 1030.6
+407.82376 960.4
+408.07074 672.9
+408.67026 791.2
+408.76215 1489.5
+409.06442 1316.8
+409.16037 820.7
+409.18674 1119.3
+409.21115 1337.4
+409.28583 1034.3
+409.31351 2324.6
+409.34573 6886.1
+409.37903 1273.7
+409.39392 1161.8
+409.41843 782.3
+409.46442 1833.1
+409.50232 4355.0
+409.55151 1066.5
+409.56198 871.3
+409.59384 5747.0
+409.64264 3473.1
+409.68787 1833.2
+409.75076 3726.2
+409.79105 8104.8
+409.84116 3014.8
+409.89154 2514.0
+409.93100 3037.0
+409.95175 1791.3
+409.99600 1900.6
+410.01752 2900.1
+410.03897 8184.3
+410.06674 2584.5
+410.07559 2103.0
+410.08884 2548.1
+410.10312 2174.4
+410.11511 2057.0
+410.12820 2295.1
+410.14001 4034.6
+410.15384 2642.7
+410.18307 7102.9
+410.22458 1612343.6
+410.26553 5821.8
+410.28586 6582.6
+410.31094 4034.9
+410.33484 5200.4
+410.34744 4208.2
+410.37308 4709.8
+410.38437 3354.7
+410.39627 2708.5
+410.42426 5582.0
+410.47256 1607092.0
+410.52286 6974.8
+410.53598 4049.6
+410.54773 2894.5
+410.55978 3067.2
+410.58273 3148.2
+410.59729 4505.3
+410.61969 5036.8
+410.65887 12395.5
+410.67862 5097.3
+410.72098 860940.2
+410.76834 5606.9
+410.79602 2174.2
+410.80624 3577.9
+410.83328 3360.3
+410.86877 3671.1
+410.90677 11219.0
+410.93091 5731.7
+410.97147 299407.2
+411.01126 4050.7
+411.03207 993.7
+411.05524 3722.2
+411.10553 7731.7
+411.15329 6478.1
+411.22330 83925.9
+411.25726 1361.1
+411.27371 913.8
+411.30289 2665.5
+411.35461 7685.3
+411.38586 2444.6
+411.40002 2150.2
+411.43680 3037.1
+411.47504 17592.3
+411.52057 1218.4
+411.55179 1348.7
+411.57043 1093.2
+411.60370 3937.3
+411.63678 1945.9
+411.66064 1398.1
+411.73056 4455.2
+411.76730 1380.0
+411.86133 1530.1
+411.88824 1279.7
+411.94229 1257.5
+411.98343 1421.4
+412.19485 903.9
+413.86401 2207.3
+414.11624 1871.8
+414.36398 1078.2
+414.70883 1133.0
+419.20483 687.0
+420.22232 1147.2
+420.55759 895.8
+423.71521 2319.0
+424.21533 854.9
+426.22717 59841.8
+426.56131 40373.2
+426.89606 13879.3
+427.23026 4247.5
+427.50815 828.9
+427.56491 1311.5
+432.72079 9716.1
+433.22177 4205.4
+433.72235 975.3
+437.21536 13685.7
+438.21933 2190.7
+438.73422 586.9
+447.29605 989.6
+456.75153 722.3
+457.91898 2339.8
+458.25409 1632.6
+458.59415 691.0
+458.92374 823.1
+462.86685 1287.1
+462.97888 760.5
+463.04672 834.9
+463.22641 2449.1
+463.40051 1564.6
+463.53275 1003.2
+463.72940 869.3
+463.87839 2175.1
+463.92200 358544.2
+463.96814 1997.3
+464.09610 1084.3
+464.21136 2200.6
+464.25589 309420.6
+464.44666 1825.5
+464.59000 142328.2
+464.69443 929.4
+464.77954 1777.6
+464.80688 778.4
+464.86929 694.3
+464.92426 41116.3
+464.97873 1877.3
+465.12860 1112.6
+465.18405 596.1
+465.20178 638.3
+465.25800 11059.2
+465.31647 1097.7
+465.59265 1561.5
+469.88275 935.3
+475.29245 7998.4
+476.29507 1667.0
+476.76965 1038.3
+476.86151 712.1
+480.25830 1469.8
+480.75500 629.6
+482.62320 633.6
+484.21680 3181.5
+489.26251 31497.8
+489.76450 15110.3
+490.26575 3323.7
+490.76624 653.6
+497.28439 1757.9
+498.26776 1414.7
+501.24252 725.3
+502.22980 1115.7
+504.89059 672.4
+505.28391 604.2
+511.77148 607.1
+512.94495 11647.6
+513.27924 7279.2
+513.61310 3611.8
+513.94989 816.9
+515.29480 24486.0
+516.29791 5086.7
+518.24689 14318.6
+518.74963 7828.6
+519.24902 2142.0
+522.30481 2059.8
+523.30676 641.3
+532.31335 1335.1
+532.58844 2213.1
+533.22559 630.9
+541.11841 687.7
+542.27661 1051.5
+542.78729 753.8
+543.27954 750.4
+544.77881 4845.9
+545.27936 2347.5
+546.62726 10622.2
+546.96198 12871.5
+547.29590 5808.2
+547.63098 1979.6
+550.29962 9612.0
+550.68176 644.8
+551.30341 2213.4
+553.28918 3183.8
+553.78455 12381.8
+554.28619 6066.9
+554.78717 2238.4
+562.29370 88380.4
+562.79541 72234.0
+563.29712 24688.0
+563.79803 7322.8
+564.27820 2006.5
+564.78052 1164.7
+565.78760 748.8
+573.28961 15178.9
+573.79095 6838.7
+574.29114 1460.9
+574.78973 7032.3
+575.29181 4149.0
+575.78772 961.1
+576.22473 727.4
+580.33673 816.8
+580.55328 595.6
+580.59058 609.9
+580.80963 2509.2
+581.07471 1510.7
+581.31104 1588.7
+581.40051 616.5
+581.55920 3096.5
+581.80017 1169.6
+581.83099 844.4
+582.05353 939.1
+582.08588 1111.4
+582.20734 1412.1
+582.29462 587745.1
+582.54352 1668.2
+582.79608 318587.1
+583.03302 4027.9
+583.29730 106611.6
+583.46320 747.8
+583.52356 2783.8
+583.57471 635.6
+583.79956 25036.3
+583.90100 510.8
+583.91724 526.8
+584.01782 1495.5
+584.30304 2577.9
+592.27313 1607.2
+594.67902 705.7
+599.27917 11564.7
+600.28302 2042.1
+601.28589 598.2
+606.35199 612.1
+613.29730 1170.4
+619.80957 2513.4
+620.31049 1353.4
+620.80908 1127.2
+629.83130 4303.2
+630.32239 3965.8
+631.33124 4832.2
+631.83112 1577.8
+632.33032 1131.6
+638.83661 117931.1
+639.33801 68585.0
+639.83917 24216.2
+640.22559 668.1
+640.34106 5932.2
+643.34845 2388.3
+643.82983 2205.6
+645.51062 681.7
+649.29504 31891.8
+650.29791 9433.6
+651.30286 2097.0
+661.35602 4958.0
+662.36090 1570.4
+663.38501 3850.5
+664.38873 1354.3
+667.84222 688.4
+674.36823 670.5
+676.63580 1374.1
+695.37531 1643.4
+709.36432 6016.5
+710.36853 1926.4
+727.37488 91355.7
+728.37799 24423.8
+729.38147 6423.8
+730.37463 653.5
+736.33844 1351.6
+737.33673 730.7
+762.38025 21980.6
+763.38239 8707.8
+764.32373 7263.4
+765.32367 1326.4
+774.43835 1274.5
+795.54474 993.8
+834.79340 599.2
+846.42065 1070.1
+864.43536 6328.3
+865.43982 2792.4
+875.46442 22014.7
+876.46655 10670.4
+877.46167 3017.8
+878.42169 1249.7
+911.50391 2005.1
+912.50122 1221.4
+920.42523 2647.8
+1019.69641 620.9
+1035.49756 936.5
+1057.23376 882.8
+1140.35400 764.8
+1198.32385 3438.9
+1264.76257 676.0
+1441.23181 669.4
+1518.09705 817.9
+1545.88855 679.8
+1589.66687 712.2
+S	1517	1517	410.4738946
+Z	4	1637.86428
+121.79474 210244.4
+126.50577 72364.9
+128.56444 77095.8
+139.30116 70333.7
+169.47838 78006.4
+171.63896 66810.2
+174.07625 80898.0
+176.10678 122293.4
+177.10136 164321.9
+188.20790 58778.5
+188.21825 65493.2
+188.24786 68621.3
+188.26559 201999.7
+188.28966 271834.5
+188.29802 276228.4
+188.31778 153084.4
+188.33774 60456.0
+191.03462 68513.8
+198.89078 83854.3
+199.15990 68567.5
+199.18010 1778761.8
+199.23956 65741.4
+199.25610 191918.8
+199.27696 280824.7
+199.29492 181469.4
+199.30676 80521.2
+199.35370 66260.1
+199.39215 76110.6
+200.18326 230250.8
+200.63594 136552.8
+203.11763 93540.2
+207.12573 63284.7
+209.58527 57379.8
+220.88092 58185.1
+221.12793 7690477.5
+222.13130 908621.8
+227.17519 426567.6
+230.93089 57301.5
+233.16397 205188.9
+233.55507 70085.3
+244.16331 93652.6
+249.12285 1326930.4
+249.63713 174728.8
+250.12753 128558.9
+251.14886 90389.2
+254.15982 126865.8
+255.10768 140330.3
+255.26559 79786.0
+258.14981 3948710.0
+258.65143 868830.5
+259.15268 96377.1
+269.42764 68499.5
+271.99506 75752.4
+272.13446 142434.7
+272.17023 95397.0
+308.87018 76041.7
+317.18430 184672.5
+323.05835 74677.6
+326.51013 379440.6
+326.84308 198896.6
+333.95511 68624.5
+344.19656 93493.4
+350.28021 80085.3
+362.20627 676046.0
+363.20865 110120.1
+364.18958 747668.6
+364.69287 157696.3
+374.44571 62420.9
+381.32153 104253.6
+384.95770 174737.5
+385.20956 134867.2
+387.19702 262549.0
+388.53064 1222364.6
+388.86523 639304.2
+389.19504 98553.1
+389.27377 64823.5
+400.08978 63049.9
+410.20807 90165.3
+410.45200 114195.9
+423.71487 85798.9
+426.22534 1019368.8
+426.56000 749025.4
+426.89392 249268.4
+427.23508 61100.0
+427.50961 80508.8
+432.71930 184416.0
+437.21289 240311.3
+443.91882 64248.3
+447.29535 129080.4
+457.91672 100778.7
+458.24686 83405.2
+458.58051 77029.7
+463.22781 159476.7
+463.91968 8742195.0
+464.25372 5624697.5
+464.58807 2220611.0
+464.92169 496283.6
+475.29022 293871.6
+476.76907 92596.3
+486.97775 65409.9
+488.15097 64889.9
+489.26001 990118.4
+489.76166 603805.8
+490.26138 160732.7
+511.76071 95192.5
+512.93970 317647.3
+513.27637 258498.8
+513.95264 88587.0
+515.29126 108885.7
+518.24518 351806.6
+518.74335 107108.2
+532.59589 161176.5
+532.67780 80710.0
+532.71954 67377.6
+532.74487 55007.6
+548.39252 69457.5
+550.29712 78313.9
+553.28467 282088.4
+553.78174 612985.4
+554.28387 188269.2
+562.29077 1116023.3
+562.79291 647414.8
+563.29260 253868.1
+573.28668 466582.7
+573.78754 179759.4
+574.78845 120550.9
+580.80884 137434.9
+581.31201 97674.2
+581.56531 103117.4
+582.29181 21843388.0
+582.79309 13483619.0
+583.02826 115429.0
+583.29486 4315979.5
+583.52374 98875.6
+583.74823 72097.9
+583.79681 905029.2
+584.28308 98214.2
+630.34827 69172.5
+631.32880 137565.8
+631.82410 125051.5
+638.83362 3274849.8
+639.33521 2017461.4
+639.83746 673580.7
+640.33990 166006.8
+649.29248 754738.9
+650.29321 191091.5
+661.35272 91249.6
+663.38165 98946.1
+676.61865 109992.4
+727.37384 311924.4
+728.37488 141620.5
+731.06360 74879.3
+762.37982 475757.4
+763.37921 174324.0
+764.32367 83431.2
+795.54858 103919.9
+875.46130 379717.9
+876.46124 139439.1
+974.56305 64855.8
+1050.72400 72498.0
+1188.13184 76903.9
+1198.31885 275274.4
+1330.35815 66007.5
+1525.25989 76171.9
+1597.95361 64965.0
+S	1518	1518	410.9745746
+Z	4	1639.867
+100.85394 591.7
+101.08145 550.0
+101.87446 538.6
+105.67455 585.2
+113.27900 584.4
+113.44897 530.8
+121.79619 2690.9
+126.08044 605.4
+132.63303 543.1
+133.56575 670.4
+166.63356 602.1
+169.47333 788.2
+174.05116 506.6
+176.10715 1170.4
+177.10258 3414.6
+178.59499 530.9
+182.44502 621.2
+187.57541 565.3
+188.28246 2371.9
+188.29279 2220.8
+188.31363 1460.3
+188.35367 530.9
+188.36539 747.7
+197.67081 843.3
+198.88876 1001.7
+199.18059 15741.3
+199.19322 762.9
+199.20274 623.4
+199.22301 742.1
+199.25754 1009.0
+199.26651 1218.7
+199.27791 2249.3
+199.28789 1112.9
+199.30157 728.2
+199.37567 968.4
+200.18349 2421.9
+200.63690 1258.0
+203.11842 951.1
+209.18404 738.0
+217.18590 686.4
+218.65456 622.4
+221.12880 72294.2
+221.47556 857.7
+222.13202 13694.1
+226.15576 856.0
+227.17563 4203.2
+233.16537 2626.0
+233.54300 666.0
+234.12437 718.6
+247.53625 528.4
+249.12379 13718.4
+249.14528 780.2
+249.63728 795.7
+250.12746 2292.4
+251.15010 2872.8
+253.98865 703.5
+254.16158 1625.5
+255.10907 3252.9
+258.15082 51218.8
+258.65253 14958.6
+259.15384 3366.8
+272.13547 2717.2
+272.17169 3931.7
+289.19189 853.7
+300.14880 696.6
+317.18628 4238.5
+326.51068 5918.1
+326.84558 4831.2
+327.17789 2007.1
+328.11313 1040.6
+332.13550 779.1
+344.19714 2036.7
+345.19968 857.5
+348.44397 984.2
+350.14490 1743.7
+350.28244 919.9
+355.18628 1231.3
+359.89734 613.8
+362.18073 1032.3
+362.20801 16070.4
+363.21133 3630.3
+363.52115 1537.6
+364.19067 20151.7
+364.69220 7939.8
+364.88998 544.6
+365.19373 1927.9
+368.67468 921.3
+369.18811 1936.6
+373.19556 520.0
+376.52402 1430.6
+376.86121 1211.0
+380.19400 931.6
+381.30893 927.7
+382.25699 2125.8
+382.52872 751.6
+382.86423 705.6
+383.24753 916.9
+384.95966 1214.0
+385.21072 2298.4
+385.46234 1727.2
+387.19922 12030.4
+388.20370 1886.0
+388.53189 12143.1
+388.86572 5631.4
+389.20062 3305.3
+392.83099 531.1
+410.22189 2618.2
+410.47235 6083.0
+410.72321 3853.5
+410.97467 2382.5
+411.22372 924.4
+413.23846 635.8
+419.20447 1283.9
+420.22443 1476.2
+421.56137 659.3
+423.71484 4781.3
+424.21609 1957.4
+424.71844 633.3
+425.21506 1179.0
+426.22678 90533.3
+426.56091 74770.9
+426.89499 30019.5
+427.22906 10354.6
+427.49036 829.1
+427.56366 2061.9
+432.71997 14793.3
+433.22101 6385.5
+433.72397 2021.5
+437.21448 27172.5
+438.21866 5174.8
+438.73505 1332.3
+439.21768 679.8
+440.27884 641.7
+447.29883 2635.4
+447.75168 701.3
+448.92078 670.4
+457.28284 1340.3
+457.91684 2042.0
+458.25125 2158.8
+458.92645 1027.7
+462.86874 1500.0
+463.05075 1002.1
+463.19775 1480.9
+463.23022 4820.2
+463.37338 844.6
+463.53165 1058.5
+463.92148 323947.0
+463.97058 1043.1
+464.09601 1305.7
+464.25522 321355.5
+464.29855 1152.1
+464.44748 1432.3
+464.58920 161432.5
+464.77734 965.7
+464.92334 55502.9
+464.98080 1814.0
+465.13232 834.4
+465.25717 14601.8
+465.31390 1543.8
+465.59265 4655.3
+465.98355 640.8
+475.29135 9467.7
+476.29547 2887.0
+476.77615 803.5
+480.25708 1841.7
+482.59229 690.2
+484.21536 5443.7
+485.21878 879.5
+489.26144 46004.3
+489.76324 26515.6
+490.26459 8747.7
+490.76691 2228.3
+497.28174 2943.0
+498.26682 3966.0
+502.22562 2299.6
+503.92737 715.0
+511.77078 737.3
+512.94391 10013.4
+513.27808 10978.6
+513.61224 6039.4
+513.94641 2295.1
+515.29358 44152.3
+516.29688 10707.0
+517.29944 1468.3
+518.24597 26638.1
+518.74805 12316.8
+519.24854 4683.9
+519.74878 916.3
+522.30353 3236.0
+523.30914 850.9
+530.26257 757.9
+532.31024 1274.4
+532.63879 2085.7
+532.67828 806.2
+542.77972 1059.3
+544.77795 6288.9
+545.28027 3773.1
+545.78052 1183.0
+546.62549 1856.8
+546.96014 1993.4
+548.27380 936.6
+550.29846 13397.6
+551.30151 4663.5
+553.28778 5586.3
+553.78442 19594.2
+554.28497 10421.9
+554.78564 3689.6
+555.29083 1623.4
+562.29272 67313.2
+562.79443 54754.7
+563.29578 26410.8
+563.79730 6559.2
+564.28027 3053.6
+564.77582 3011.0
+565.27582 1665.0
+567.28833 1150.2
+567.58612 657.1
+573.28864 25769.6
+573.79010 15596.5
+574.29138 5928.8
+574.78906 8326.6
+575.29065 5798.4
+575.78986 1123.6
+576.22852 1561.4
+578.25201 1391.8
+579.83398 607.2
+580.65900 874.5
+580.81433 4632.7
+580.89008 705.3
+580.97198 1214.8
+581.07178 2832.2
+581.22314 890.0
+581.26239 1038.4
+581.31256 3512.9
+581.55573 3272.4
+581.81158 2336.7
+582.06622 2260.7
+582.15332 1026.6
+582.17279 1545.6
+582.20282 1524.0
+582.22809 3027.6
+582.29340 876705.3
+582.37274 2557.4
+582.39240 1449.6
+582.67432 831.6
+582.69379 1312.6
+582.72491 1759.6
+582.79443 561607.8
+582.86621 1718.4
+582.89056 934.6
+583.02679 4815.1
+583.22827 1083.1
+583.29572 220146.8
+583.34833 1484.9
+583.37720 1731.0
+583.52563 4112.1
+583.61682 1839.3
+583.68536 882.1
+583.72192 1051.2
+583.79663 66846.6
+583.90674 773.9
+583.93518 719.5
+584.02185 2187.3
+584.12036 1478.7
+584.17609 783.4
+584.29688 18445.5
+584.41217 585.8
+584.44806 692.2
+584.52069 907.8
+584.62878 792.0
+584.79694 4097.3
+585.29706 801.1
+588.45551 1414.3
+588.96436 967.5
+592.27130 2669.3
+593.27216 1031.3
+594.01361 1251.7
+594.34906 1041.7
+599.27759 18699.1
+600.28131 5503.9
+601.28326 1215.4
+612.31323 1081.2
+613.29169 1404.1
+619.80731 1293.3
+620.31055 1242.0
+629.82941 5347.4
+630.32361 9087.4
+630.83435 1640.5
+631.32715 6485.2
+631.83142 3961.6
+632.32886 1698.4
+632.82904 934.6
+635.38031 1155.0
+637.14166 961.6
+638.77795 1425.5
+638.83521 185405.0
+639.27966 831.6
+639.33636 129759.4
+639.68829 1296.3
+639.83752 48217.4
+640.33948 15374.0
+640.54254 975.7
+640.83856 3877.9
+641.04272 948.3
+643.34540 3448.1
+643.82892 1547.5
+649.29333 46137.6
+650.29620 15327.0
+651.03333 771.4
+651.29840 4037.6
+661.35571 4335.7
+662.35950 1491.4
+663.38391 5593.1
+664.38525 2094.6
+669.05310 680.9
+672.53351 615.1
+695.37830 2055.3
+695.87726 1983.1
+709.36200 10146.8
+710.37097 2864.3
+711.38983 796.6
+727.37323 130865.7
+728.37604 49927.8
+729.37817 11104.4
+729.44794 965.5
+730.37799 2092.3
+733.08618 735.7
+736.33472 1705.2
+737.34064 818.3
+756.43109 1075.2
+762.37817 34110.5
+763.38074 15222.1
+764.32227 10259.8
+765.32196 4322.1
+766.32867 997.4
+774.44299 1397.0
+783.82678 634.1
+795.54230 813.0
+846.42200 1254.9
+849.44189 675.4
+864.43256 9467.9
+865.43762 4835.7
+875.46210 31295.0
+876.46503 15899.6
+877.45245 6229.9
+878.42438 2054.9
+879.41376 741.6
+911.49823 2421.8
+912.50403 1098.8
+913.50122 797.2
+920.42078 4118.1
+921.42511 1877.2
+977.51819 2000.2
+1033.50781 989.2
+1035.48987 826.9
+1198.11377 704.7
+1198.43115 2942.4
+1380.84180 788.9
+1525.26563 672.8
+S	1519	1519	411.4760746
+Z	4	1641.873
+102.28297 511.6
+103.54098 565.3
+103.77973 631.2
+120.50318 593.9
+121.29371 609.1
+121.79445 2286.5
+122.11749 577.8
+133.14922 899.5
+134.38365 537.6
+136.37915 545.3
+151.46909 560.1
+157.60315 727.5
+158.86710 524.2
+160.27191 641.8
+165.77516 652.5
+177.10242 1161.5
+177.83797 531.6
+178.06433 647.2
+179.70816 542.8
+182.77580 490.8
+190.75731 523.4
+198.89224 1041.1
+199.02177 548.4
+199.18153 4909.9
+199.20198 646.7
+199.22598 914.3
+199.25227 1179.0
+199.26692 1418.3
+199.27579 2659.3
+199.28955 1393.2
+199.37415 1139.9
+199.38892 918.8
+200.18513 723.2
+200.63710 763.4
+201.13976 810.5
+213.08719 630.3
+221.12962 41071.4
+222.13277 6023.5
+225.01831 685.2
+227.17653 3415.4
+229.70033 712.1
+229.94722 586.4
+235.55334 606.8
+249.12469 26790.5
+249.63806 1268.7
+250.12807 3983.4
+254.16373 907.4
+255.11041 1194.8
+258.15176 66162.1
+258.36945 669.6
+258.65353 18259.7
+259.15524 2765.3
+271.75549 699.1
+272.13681 1560.2
+272.17285 4584.5
+274.68350 588.5
+275.75842 532.3
+317.18765 2280.3
+326.51141 3884.0
+326.84641 3465.5
+333.50397 566.6
+342.26834 724.9
+344.19791 622.3
+362.18079 852.0
+362.20941 4518.1
+363.21475 840.6
+364.19235 9357.9
+364.24753 1168.6
+364.69363 2969.9
+369.18942 759.5
+381.35620 630.8
+386.89932 487.8
+388.53455 4760.9
+388.86823 3085.0
+389.20331 952.2
+389.29300 660.6
+391.28638 1615.6
+392.29047 699.0
+395.45612 672.7
+395.95319 1381.5
+396.20749 909.2
+399.22147 1484.8
+399.47293 1229.9
+405.72162 6623.7
+405.97241 8297.2
+406.22302 5504.0
+406.47470 2716.1
+406.63287 975.6
+406.71616 894.4
+406.87787 1132.3
+407.82291 1343.2
+408.06577 1084.3
+408.17688 748.3
+408.56390 1101.3
+408.62949 839.8
+408.76514 1495.0
+408.78452 1055.0
+409.01138 1070.3
+409.03223 860.2
+409.04886 1491.9
+409.06888 990.6
+409.16858 793.6
+409.18683 790.2
+409.21356 3127.5
+409.25949 792.1
+409.27881 2042.9
+409.29401 1382.6
+409.34982 10995.9
+409.39859 1963.9
+409.43832 2711.7
+409.46625 1887.7
+409.50223 4793.9
+409.55368 892.2
+409.59695 11993.2
+409.64682 4003.4
+409.68869 3346.9
+409.71634 1716.3
+409.74963 4956.4
+409.79309 7153.4
+409.84473 6864.9
+409.89240 3758.5
+409.92892 1888.5
+409.93823 1832.6
+409.96417 1209.0
+409.97885 2984.3
+410.00177 2399.1
+410.03546 7269.5
+410.07947 1508.7
+410.09048 2593.7
+410.10147 3069.2
+410.11569 2814.2
+410.13083 2143.9
+410.14063 5508.2
+410.15164 4544.9
+410.18182 6917.7
+410.22485 1742020.9
+410.26279 6925.3
+410.27957 5620.1
+410.29590 6736.8
+410.30750 3032.5
+410.32330 3073.0
+410.33441 4483.2
+410.34552 2428.3
+410.36246 5334.2
+410.38596 5655.7
+410.41055 3777.5
+410.42343 7368.8
+410.47284 1783566.8
+410.52347 7976.1
+410.54617 4551.0
+410.56104 3015.2
+410.58368 3812.8
+410.61096 5730.7
+410.63138 3610.6
+410.66675 10516.6
+410.72162 967002.1
+410.77020 6904.0
+410.78555 2915.5
+410.80707 6343.8
+410.83054 3735.0
+410.85791 3101.8
+410.90253 10368.9
+410.97226 371214.3
+411.01004 5396.0
+411.03549 2520.2
+411.05359 5436.2
+411.10318 13763.6
+411.15106 5054.3
+411.16766 4657.8
+411.22333 101335.8
+411.26083 3453.2
+411.28760 1434.5
+411.30283 2999.1
+411.35107 13787.4
+411.40372 2927.6
+411.42072 2925.6
+411.47617 24644.9
+411.51270 1691.3
+411.54807 1738.5
+411.60086 7600.8
+411.65271 2106.4
+411.67548 1982.7
+411.69312 2319.6
+411.73087 5311.7
+411.76401 1113.1
+411.79950 1173.2
+411.82986 874.7
+411.85110 2719.0
+411.89014 1014.1
+411.90421 1009.3
+411.92236 740.4
+411.94153 1404.7
+411.98880 988.6
+412.64841 1426.3
+412.89874 1177.3
+413.86023 1209.1
+414.11392 1095.7
+414.36942 828.8
+420.22382 737.5
+420.56070 913.5
+421.56024 881.8
+423.71518 2518.2
+424.21609 748.6
+426.22760 45578.6
+426.56165 35974.4
+426.89621 17429.9
+427.23065 5752.4
+427.56335 1057.4
+432.72095 11626.4
+433.22211 4595.2
+433.72427 1087.4
+435.03842 612.7
+437.21561 18897.5
+438.21896 3292.1
+447.29855 1996.6
+456.75443 689.4
+457.28256 1307.5
+457.91809 1650.8
+458.25674 1470.0
+462.86893 2057.2
+463.19986 1411.7
+463.23178 2360.9
+463.39670 1025.6
+463.56503 1172.8
+463.73523 1395.9
+463.92245 333527.7
+463.96146 2899.9
+464.08087 1083.9
+464.21838 2885.3
+464.25629 305184.3
+464.42090 884.6
+464.44662 2008.5
+464.59045 152395.4
+464.78085 1301.8
+464.92502 53701.3
+464.98196 2121.5
+465.12714 1037.7
+465.25952 12417.0
+465.31656 1801.2
+465.59219 1956.1
+465.65088 1224.4
+473.90314 491.4
+475.29263 7242.0
+476.29562 2951.4
+476.77512 865.1
+477.27100 593.2
+477.29144 528.2
+482.65912 716.0
+484.21658 4487.7
+485.21646 1081.0
+489.26312 35763.3
+489.76447 15116.3
+490.26511 4545.5
+490.76251 1257.7
+497.28488 2179.9
+498.26968 2236.4
+502.22501 1715.0
+504.26645 732.9
+505.28146 900.7
+512.94531 8693.0
+513.27930 8395.7
+513.61377 3404.2
+513.94708 1315.3
+515.29529 33989.9
+516.29779 8081.4
+518.24780 19054.8
+518.74951 8796.8
+519.25018 1676.1
+522.30554 2537.1
+523.30884 999.6
+526.31207 616.6
+532.31384 1022.4
+532.59875 2595.6
+535.76984 701.1
+542.26166 688.4
+542.78479 1251.7
+543.28223 921.2
+544.78003 5515.9
+545.28125 3533.4
+545.77380 1301.6
+546.62775 12796.5
+546.96216 14635.2
+547.29620 6615.0
+547.63196 2337.7
+550.29993 11311.1
+551.30304 3598.4
+553.28979 3476.4
+553.78558 16866.6
+554.28735 8019.6
+554.78766 4372.9
+562.29431 99781.4
+562.79596 71370.4
+563.29730 30381.6
+563.43951 644.9
+563.79816 7549.8
+564.21063 663.6
+564.27905 2244.3
+564.78546 1614.8
+565.27716 1020.9
+573.29041 17046.3
+573.79175 10018.6
+574.29279 4089.4
+574.79077 8083.2
+575.29187 3592.6
+575.78308 837.8
+579.82990 895.7
+580.57788 1054.7
+580.81689 3850.0
+580.90112 570.3
+580.97260 1594.0
+581.07385 2024.5
+581.13300 659.8
+581.27026 708.9
+581.31079 953.5
+581.38806 719.4
+581.55353 2140.7
+581.79395 1141.0
+582.05450 2351.1
+582.21277 3101.0
+582.29523 672697.5
+582.41382 786.4
+582.52734 1253.9
+582.55737 1820.4
+582.65479 664.9
+582.66748 670.9
+582.72644 885.9
+582.79651 431515.0
+583.02966 3682.5
+583.29779 155152.0
+583.49084 1263.2
+583.54187 1071.8
+583.62726 1148.6
+583.69604 758.6
+583.79840 41391.3
+584.01721 1206.2
+584.12506 907.2
+584.29669 9207.0
+584.52246 1380.9
+584.79205 1922.9
+586.90991 804.2
+592.27490 3097.0
+599.27966 18106.9
+600.28442 4433.4
+612.31689 1019.0
+613.29645 2182.5
+617.10657 722.6
+619.80646 1993.8
+620.30493 1203.3
+629.83221 6218.2
+630.32458 7175.3
+630.83514 863.8
+631.32898 5936.6
+631.83356 1905.4
+632.32837 1051.0
+637.13428 1300.8
+637.62762 678.9
+638.83710 147060.9
+639.33844 96839.6
+639.83960 32297.0
+640.34088 7242.9
+640.84021 1474.6
+643.34467 2221.4
+643.82715 1378.9
+647.57043 639.7
+649.29559 36231.2
+650.29871 11774.3
+651.30365 2135.0
+661.35724 3596.6
+662.35986 2266.9
+663.38501 4545.2
+664.38751 1536.5
+667.34229 1299.9
+676.63635 966.2
+687.12738 578.9
+695.37909 1803.8
+709.36517 9330.8
+710.34711 1869.5
+727.37537 128142.6
+728.37878 40707.6
+729.38184 8528.1
+730.38336 1303.1
+736.33618 2797.8
+737.34393 813.2
+762.38074 27296.0
+763.38275 10633.0
+764.32416 8720.4
+765.32849 2866.5
+795.56061 764.2
+832.02972 624.9
+846.42377 1386.2
+864.43481 8843.0
+865.44000 3649.9
+866.43933 1091.0
+875.46545 25971.1
+876.46820 11661.7
+877.44482 3735.0
+878.42682 1441.5
+911.49768 1953.8
+912.50397 1628.3
+920.42474 3328.3
+921.42981 1627.4
+977.52563 1170.5
+990.49231 1002.8
+1033.50562 666.8
+1035.48645 1032.7
+1036.47949 570.8
+1088.79761 607.7
+1140.36023 750.6
+1188.10071 850.4
+1198.33765 3227.3
+1399.91455 785.6
+1409.63452 662.9
+1526.79749 585.8
+1533.56616 750.7
+1638.59900 668.7
+S	1521	1521	410.4784421
+Z	4	1637.88247
+120.66354 690.8
+121.36162 523.5
+121.79351 950.8
+121.79823 2119.2
+144.10764 608.2
+158.09613 851.0
+160.24559 605.8
+165.78018 773.8
+171.63771 857.5
+174.08000 877.1
+176.10713 1877.5
+177.10187 1831.7
+188.25670 1374.3
+188.27396 2063.7
+188.28256 2056.4
+188.29160 2040.4
+188.29817 2076.0
+188.30777 1967.1
+188.33463 765.5
+188.38086 524.7
+188.38943 616.3
+188.55618 572.3
+189.99580 544.0
+198.89282 838.2
+199.18071 14555.5
+199.20374 765.0
+199.25168 1170.5
+199.27742 2527.2
+199.29236 1265.7
+199.31625 720.7
+199.36168 658.4
+199.37270 541.4
+200.18419 1792.5
+200.63739 2079.7
+208.49559 571.2
+221.12866 69524.8
+222.13197 12984.5
+223.13519 701.4
+224.50751 719.0
+226.15497 1047.3
+226.91801 731.5
+227.17583 3262.7
+231.27884 592.5
+233.16513 2410.5
+234.12366 729.4
+244.16568 1200.4
+249.12369 15734.4
+249.63832 1163.1
+250.12686 2117.2
+251.15005 2182.3
+254.16124 2801.8
+255.10873 3015.7
+258.15063 48649.5
+258.65244 12878.6
+259.15372 2802.6
+267.80292 563.4
+272.13571 2655.9
+272.17148 2080.4
+288.81348 610.2
+289.19025 823.6
+293.22937 656.6
+317.18671 3409.2
+326.51059 7385.0
+326.84543 3319.8
+332.13437 1079.5
+342.26819 723.3
+344.19684 1654.0
+350.14594 1279.2
+354.74377 589.9
+355.18680 996.7
+359.66714 999.8
+362.20786 14765.7
+363.21164 3393.0
+363.52313 773.0
+363.85489 657.0
+364.19052 16337.1
+364.25125 807.1
+364.69202 7089.7
+365.19177 1239.3
+368.67303 1318.9
+374.18103 916.9
+376.52722 789.4
+380.19547 976.9
+382.25574 1301.5
+382.52600 914.6
+384.95975 3079.8
+385.21140 1090.5
+387.19910 9151.8
+388.20242 1349.5
+388.53186 18918.6
+388.86646 10937.6
+389.20038 4827.3
+389.53488 1194.6
+405.27383 595.9
+421.22372 1284.2
+422.65347 659.3
+423.71463 3744.9
+424.21567 1281.0
+425.21289 1351.5
+426.22659 89518.1
+426.56067 55466.1
+426.89484 21711.2
+427.01831 654.3
+427.22992 5487.5
+427.56418 933.2
+432.71991 10764.2
+433.22086 4954.9
+433.72241 1726.1
+435.95813 546.4
+437.21423 19198.9
+438.21875 3963.2
+447.29739 2604.1
+457.27856 934.3
+457.91748 2450.1
+458.25220 1911.6
+458.58713 1220.9
+459.59604 657.2
+462.86920 1960.2
+463.20105 1397.4
+463.23077 4052.5
+463.39908 2041.0
+463.73535 946.1
+463.86646 1033.2
+463.92123 365790.7
+463.96506 1136.0
+464.25500 282355.8
+464.43805 2329.4
+464.58896 120277.3
+464.78336 2421.8
+464.92313 38161.2
+464.97461 1841.7
+465.01089 763.2
+465.12698 1632.1
+465.25775 9146.5
+465.31372 1724.0
+465.45349 1030.6
+465.58893 1741.6
+465.64890 942.2
+475.29123 8956.6
+476.29480 3686.1
+480.25668 916.9
+484.21405 3872.2
+489.21466 599.9
+489.26138 36376.1
+489.76285 18598.9
+490.26431 5518.1
+490.76987 783.3
+497.28149 2021.0
+498.26489 1420.7
+502.22675 1350.4
+503.92990 709.4
+505.27460 1040.1
+512.94348 9435.4
+513.27795 9370.9
+513.61243 5073.5
+513.94617 1696.1
+514.29828 983.1
+515.29333 31148.5
+516.29620 7649.9
+517.24249 787.9
+517.29565 953.7
+518.24591 19547.8
+518.74774 10442.8
+519.24896 2367.9
+522.30316 2570.8
+532.30933 2042.9
+532.55914 1980.8
+533.31256 663.2
+542.78204 828.9
+544.77759 5529.7
+545.27887 2511.4
+546.62628 2089.9
+546.95886 738.3
+547.25696 589.9
+550.12109 605.5
+550.29834 9996.0
+551.30188 1940.6
+553.28674 4696.2
+553.78363 12856.8
+554.28436 7825.9
+554.78485 2099.8
+557.97632 641.0
+562.29248 77158.0
+562.79425 55249.6
+563.29572 18830.1
+563.79645 5138.2
+564.27740 2088.4
+564.77808 1691.9
+565.27765 1267.7
+565.78070 656.7
+573.28809 18427.2
+573.78931 10683.3
+574.29163 4095.6
+574.74371 533.0
+574.78870 7347.7
+575.29071 3323.0
+575.78687 1155.5
+580.64301 779.0
+580.76129 641.7
+580.81641 3569.9
+580.87915 839.3
+580.94330 790.1
+580.97693 777.1
+581.07129 1214.6
+581.31293 3142.7
+581.38892 1002.5
+581.56207 3931.4
+581.78381 994.5
+581.81122 1574.5
+581.85193 876.6
+582.06335 2527.1
+582.20630 1534.5
+582.22540 2506.2
+582.29315 684287.3
+582.37024 1666.3
+582.39362 1126.6
+582.54358 1462.0
+582.72174 1122.4
+582.79437 405504.9
+582.87531 1323.4
+583.02960 3977.3
+583.29578 150317.1
+583.52417 4388.2
+583.58881 866.4
+583.61853 817.5
+583.67480 694.1
+583.71155 1233.7
+583.79828 38193.7
+583.98566 524.0
+584.02869 1315.0
+584.06354 658.3
+584.15631 851.6
+584.29993 7948.9
+584.78986 1986.9
+588.45569 854.7
+592.27362 2212.3
+594.01233 1022.7
+594.68073 685.8
+597.41473 743.3
+599.27759 11731.8
+600.28058 2680.3
+613.28955 1205.5
+619.80609 2357.3
+620.30469 840.5
+629.83075 4062.5
+630.32336 4941.4
+630.40509 634.8
+630.83569 1178.4
+631.32623 4742.6
+631.83069 2151.1
+632.33606 774.0
+637.12830 712.8
+638.83502 140240.7
+639.33624 89499.8
+639.83740 34007.5
+640.17834 773.8
+640.33838 8863.3
+640.53528 964.3
+640.84259 3369.5
+643.34436 2986.8
+643.82776 1814.9
+644.83136 807.4
+649.29315 36957.7
+650.29602 11576.9
+651.29761 1421.6
+661.35480 4712.3
+662.35791 1760.7
+663.38263 4682.0
+664.38635 1529.6
+676.60999 798.3
+695.37726 2176.9
+695.88037 822.9
+709.36108 7602.5
+710.37134 1867.1
+727.37292 103319.3
+728.37524 34087.3
+729.37720 8264.2
+730.38037 1082.6
+731.11670 805.3
+736.34271 1164.1
+756.42218 638.9
+758.27313 628.4
+762.37787 25270.2
+763.38104 9826.6
+764.32172 7568.2
+765.32526 3000.8
+774.43787 1085.1
+777.93066 1055.0
+795.55780 1076.9
+813.51312 726.8
+846.42786 1168.6
+858.04626 806.3
+864.43146 8094.7
+865.43604 2908.3
+866.43597 912.0
+875.46161 24524.8
+876.46423 12097.2
+877.01160 677.3
+877.45331 3596.0
+878.41644 1606.9
+882.42010 592.5
+911.49921 2407.1
+912.50439 1233.5
+920.42078 2703.2
+921.43506 812.2
+977.51410 1170.0
+978.52478 687.3
+1035.49158 989.6
+1057.20935 598.2
+1079.26819 697.9
+1198.25159 3512.3
+1525.43457 820.8
+S	1522	1522	411.2285746
+Z	4	1640.883
+106.57408 598.9
+106.88702 718.8
+109.11938 623.8
+113.46287 878.2
+113.72066 670.9
+116.35133 555.6
+116.63457 559.0
+121.55210 542.5
+121.79618 2174.3
+121.80152 637.3
+136.23003 623.6
+143.07260 716.6
+153.27550 522.7
+153.48825 562.2
+158.09616 980.4
+163.93793 514.4
+176.10709 2236.6
+177.10239 1940.2
+185.22061 575.2
+190.12224 630.9
+199.18054 17951.8
+199.22256 844.3
+199.23404 656.9
+199.27213 3589.1
+199.32010 764.0
+199.36990 1422.4
+200.18393 1980.8
+200.63728 1233.3
+203.11867 678.1
+221.12872 78862.2
+222.13200 11747.5
+223.68379 647.1
+226.15512 888.8
+227.17586 4732.1
+229.53271 602.8
+233.16547 3348.4
+244.16611 989.7
+249.12367 16000.6
+249.63776 1774.9
+250.12746 2446.7
+251.15062 2557.7
+254.16104 2696.2
+255.10895 2895.8
+258.15073 59291.2
+258.65240 15336.2
+259.15344 2960.3
+267.92581 595.3
+272.13602 2216.7
+272.17172 3578.5
+272.85440 571.6
+274.33444 613.6
+277.95447 530.6
+295.05237 545.7
+296.06393 774.8
+300.15320 961.5
+306.48349 574.1
+308.89514 652.3
+316.18164 671.0
+317.18634 4867.0
+326.51074 9283.5
+326.84467 2919.1
+327.17929 1485.3
+328.11365 968.7
+329.34698 542.9
+342.27301 657.7
+344.19800 2049.7
+350.14655 1498.9
+350.27966 920.7
+355.18494 1161.9
+359.66650 811.5
+362.20792 17234.1
+363.21106 3521.9
+363.52075 1842.7
+363.85413 1353.1
+364.19052 19273.8
+364.69229 6621.1
+365.19357 1346.5
+365.68195 753.3
+368.67450 1571.5
+369.18845 1098.1
+376.52286 1413.1
+381.35995 865.0
+382.25626 1824.9
+382.52875 793.6
+383.24121 1033.9
+383.53076 857.1
+384.95874 3443.7
+385.21106 1995.4
+385.24442 784.8
+385.46027 822.0
+387.19916 10958.9
+388.20389 1740.6
+388.53186 20425.7
+388.86652 11512.8
+389.20142 4248.5
+389.53314 1697.7
+392.67834 622.3
+403.42361 696.7
+419.20706 1745.7
+420.19275 600.1
+420.22144 1175.0
+420.55652 1425.8
+421.22589 844.8
+423.71506 4981.0
+424.21591 1692.4
+425.21609 1371.4
+425.57016 556.5
+426.22668 102157.8
+426.56079 66497.6
+426.89496 26097.6
+427.22852 7124.7
+427.56161 1483.0
+430.27243 861.7
+432.71997 15079.4
+433.22159 6353.7
+437.21457 23489.3
+438.22363 4738.3
+438.73804 1586.6
+447.29620 2936.7
+457.27826 942.1
+457.91812 2672.3
+458.25247 1441.3
+462.15909 714.8
+462.56168 551.3
+462.86783 1671.8
+462.94141 727.6
+463.05386 1030.5
+463.16632 549.4
+463.20111 1410.1
+463.23041 4493.6
+463.40152 1298.1
+463.52554 905.4
+463.92136 389220.1
+463.96832 1357.5
+463.98193 1049.1
+464.25516 306337.1
+464.41943 830.8
+464.44513 2118.6
+464.58923 127785.9
+464.78952 1166.3
+464.86249 797.3
+464.92331 39426.8
+464.98090 2454.3
+465.25845 8865.1
+465.31357 1247.5
+465.59250 2601.3
+468.30115 638.5
+469.90726 760.1
+475.29166 10668.8
+476.29489 3343.5
+476.77283 969.9
+480.25510 1601.2
+482.66183 775.1
+484.21487 5051.8
+489.26154 42346.9
+489.76315 20608.5
+490.26422 5213.9
+490.76501 1147.2
+497.28256 3237.6
+498.26709 2688.9
+502.22519 2091.4
+505.27707 1779.2
+511.76544 898.7
+512.94348 12868.6
+513.27844 10151.0
+513.61316 4849.5
+513.94757 920.1
+514.30103 1282.9
+515.29352 39194.2
+516.29633 9531.5
+518.24597 22891.2
+518.74811 10806.8
+519.24994 3513.9
+519.74902 830.6
+522.30267 3166.9
+532.30957 1779.3
+532.54950 2092.7
+537.69110 661.7
+542.78223 832.9
+543.28033 994.6
+544.77740 6417.9
+545.27869 3307.9
+546.62805 2009.4
+546.95972 2120.8
+547.29443 849.0
+548.27258 1035.9
+550.29828 13083.5
+551.30237 2419.4
+553.28705 5502.9
+553.78357 17768.8
+554.28552 9149.7
+554.78687 2638.6
+555.28253 698.0
+562.29272 76990.0
+562.79431 54927.0
+563.29590 19611.1
+563.79681 4773.0
+564.28070 2764.4
+564.77686 2412.9
+565.27643 1406.1
+567.29034 828.5
+572.79077 580.1
+573.28845 22849.5
+573.78937 12059.5
+574.29004 4419.1
+574.78906 8303.5
+575.29193 4124.2
+575.79224 1420.7
+576.22778 1146.5
+578.27563 780.7
+579.82483 777.5
+580.62488 677.3
+580.81177 4524.6
+580.97760 1694.0
+581.03400 1256.5
+581.08289 2789.4
+581.12988 839.2
+581.31158 2947.0
+581.47827 914.0
+581.56036 4626.6
+581.79779 1830.3
+581.86292 708.0
+582.06641 1918.0
+582.13318 719.5
+582.15161 1476.2
+582.19519 1705.3
+582.23511 2807.7
+582.29327 869901.9
+582.36847 2374.6
+582.52405 1800.4
+582.56195 940.5
+582.61340 911.0
+582.62592 1000.6
+582.65356 998.8
+582.69586 1048.7
+582.72260 1553.4
+582.79431 498044.2
+582.86829 1303.5
+583.02698 5297.0
+583.29565 170293.1
+583.45892 1116.4
+583.52661 3402.0
+583.61163 1653.3
+583.72443 1196.1
+583.79596 47530.9
+583.92957 1139.3
+583.95752 1320.9
+584.00861 2444.6
+584.11102 883.1
+584.29663 11836.1
+584.50208 1099.6
+584.79309 3090.8
+586.38617 609.2
+588.45966 1222.2
+592.27063 2995.1
+594.01178 826.3
+599.02063 621.8
+599.27716 17964.5
+600.28094 4217.3
+612.30780 986.9
+613.29150 1762.3
+619.80353 1480.3
+620.31061 1328.5
+629.82910 4547.6
+630.32343 6986.1
+630.40674 883.2
+630.83282 1029.8
+631.32886 6146.1
+631.83173 4230.0
+632.32996 1312.0
+637.34003 645.4
+637.37970 579.1
+638.83521 169093.4
+638.90179 651.0
+639.33636 112247.1
+639.67590 1070.6
+639.83777 37730.4
+640.33923 10853.0
+640.54889 988.5
+640.84137 2869.7
+643.34351 3274.0
+643.82880 1947.5
+649.29340 45312.8
+650.29657 13779.3
+651.29932 2239.5
+661.35461 6109.3
+662.35858 1744.4
+663.38239 5812.1
+664.38611 2567.0
+676.46417 692.2
+676.66180 1061.9
+678.14478 701.7
+693.32336 723.1
+695.37744 1945.4
+695.88086 1539.0
+709.36255 8234.9
+710.33148 1419.7
+710.37494 1357.0
+727.37311 127462.4
+728.37549 40085.2
+729.37817 9022.0
+730.38275 1314.0
+736.33502 2105.1
+738.52899 707.5
+757.42529 914.9
+762.37817 30584.8
+763.38074 12931.0
+764.32123 9886.9
+765.32239 3895.7
+766.32684 879.6
+774.43915 1002.6
+775.44647 747.2
+777.43005 957.1
+777.93365 935.6
+783.38110 581.3
+788.84473 665.7
+795.54919 823.6
+846.42139 1343.9
+864.43195 9460.4
+865.43396 3875.6
+875.46210 30405.3
+876.46484 12507.5
+877.43939 4237.8
+878.40472 2198.0
+911.49542 1713.5
+920.42236 3618.5
+921.43170 1347.4
+949.55145 581.9
+977.51477 1351.5
+1033.51379 1239.2
+1036.47388 809.8
+1140.24963 711.6
+1188.10303 1070.6
+1198.22595 3568.8
+1525.42273 974.1
+1620.24866 595.8
+S	1523	1523	547.331241267
+Z	3	1638.718
+Z	2	1092.815
+150.63664 533.7
+154.19727 500.0
+154.20100 505.0
+158.09627 1392.9
+159.17157 734.1
+161.07649 560.6
+163.85393 466.1
+169.15823 634.5
+169.47363 605.8
+173.29872 508.0
+176.10684 2543.9
+177.10202 3553.6
+188.25925 836.1
+188.26686 931.9
+188.27269 1039.9
+188.28468 1331.6
+188.29707 1245.4
+188.31003 810.0
+188.31834 639.4
+193.17245 524.0
+198.88911 1188.7
+199.18135 1215.9
+199.21310 851.4
+199.22609 613.9
+199.26518 1488.4
+199.27869 2235.1
+199.29442 661.8
+199.30304 827.6
+199.36595 947.9
+199.37642 861.0
+203.11790 798.5
+219.25661 749.2
+220.78014 697.1
+221.12854 117888.4
+222.13177 22306.2
+223.13438 1645.6
+226.07820 551.4
+227.04622 612.9
+233.16505 1630.5
+244.16441 660.4
+249.12335 28768.6
+249.16052 754.8
+250.12689 5242.2
+251.15028 1762.0
+255.08405 491.7
+255.09274 519.8
+271.81064 538.1
+289.19092 1938.9
+297.86328 558.7
+301.16275 648.9
+306.51025 572.1
+317.18600 8657.8
+318.18915 2233.0
+322.78250 528.9
+344.19711 3155.1
+345.19733 818.0
+350.27988 827.3
+362.20746 32887.9
+363.21091 8282.9
+364.19046 3044.1
+364.21152 1215.3
+364.69073 2383.9
+372.33337 622.3
+381.15833 636.7
+387.19891 887.2
+400.26666 7296.9
+401.26981 1853.4
+409.21970 1549.2
+413.24002 1058.7
+423.71344 977.5
+424.21686 1387.1
+425.21362 681.7
+430.27045 773.8
+432.71909 5362.9
+433.22137 3314.6
+433.72269 1320.0
+437.21375 4814.7
+438.21747 1421.1
+447.29651 6282.1
+447.75009 789.7
+448.29898 2031.0
+457.28052 2585.5
+458.28009 703.5
+463.92053 8976.1
+464.25494 7435.1
+464.58978 4475.2
+464.92413 1158.9
+475.29120 14940.7
+476.29440 5197.7
+477.29562 879.1
+480.75565 595.8
+489.26111 12770.3
+489.76233 9763.9
+490.26395 3907.0
+490.76123 1037.2
+497.92099 998.3
+498.26242 995.0
+498.59152 1356.6
+512.94354 1555.2
+513.27765 1275.0
+513.61475 863.0
+514.30194 2198.0
+515.29260 10810.5
+516.29480 3706.5
+517.29852 870.9
+517.51965 663.1
+518.24463 4527.1
+518.74585 3455.4
+519.24561 901.5
+519.28809 733.0
+522.30695 789.7
+523.98651 584.5
+526.28107 839.9
+532.58649 2124.4
+549.11719 729.9
+550.29974 927.2
+551.30847 829.7
+558.92664 589.2
+573.28918 4347.4
+573.78821 3252.7
+574.28906 1275.8
+574.78699 4510.6
+575.28882 4391.4
+575.78906 2295.9
+582.29297 144167.5
+582.79437 122636.9
+583.02881 741.9
+583.29578 65237.6
+583.52130 911.5
+583.79712 18375.1
+584.29633 3241.9
+584.79657 708.4
+599.27887 2130.8
+629.82935 5106.7
+630.33331 6569.4
+630.83478 1825.5
+631.33002 7732.5
+631.83173 6547.6
+632.33478 2689.8
+637.12634 1114.0
+637.63342 660.9
+637.92181 940.5
+637.99463 807.1
+638.49792 1178.4
+638.83514 203272.0
+639.33618 199192.2
+639.40808 1066.6
+639.67438 1618.8
+639.83728 103384.5
+640.17676 1205.1
+640.33868 38837.6
+640.55164 905.3
+640.84058 7595.2
+641.05896 782.3
+641.33966 2030.8
+643.34039 1216.7
+647.34833 713.9
+648.35779 1079.7
+649.29346 2181.8
+661.35211 1436.6
+663.38281 4597.6
+664.38422 2784.3
+665.38617 1010.0
+676.63947 1147.0
+677.85254 717.9
+678.35565 669.1
+684.32361 1579.1
+686.37225 8943.9
+686.87378 9891.7
+687.37549 4676.5
+687.87628 2069.2
+688.37842 827.1
+690.99896 722.0
+693.00269 580.0
+693.32959 567.7
+693.44061 1927.6
+693.93628 2159.9
+694.42902 2568.9
+694.92401 2303.9
+695.37769 397856.6
+695.45898 1495.9
+695.87817 442549.8
+695.95612 1821.9
+695.98749 1275.8
+696.37885 249809.0
+696.87982 98363.6
+697.00220 775.4
+697.03149 803.3
+697.37994 23663.8
+697.49084 1381.3
+697.87384 4083.6
+709.36017 1379.3
+727.37238 26826.9
+728.37488 15248.7
+729.37744 4302.2
+731.07843 887.9
+755.38965 1175.0
+755.89282 1260.1
+756.38721 885.7
+762.37585 2691.4
+763.37885 1238.1
+764.32062 1320.4
+765.32837 930.0
+768.91101 5404.1
+769.41302 7373.0
+769.91437 4281.5
+770.41833 1045.6
+773.89172 780.8
+795.54895 956.2
+864.43280 3070.0
+865.43280 3104.4
+875.46027 3032.9
+876.46594 2672.9
+877.41455 2497.1
+878.41986 1414.1
+911.49860 839.8
+912.49847 913.1
+936.85358 660.6
+977.51373 907.5
+990.49036 3680.5
+991.48792 2570.9
+992.49219 1090.5
+1019.71411 664.6
+1034.48633 640.8
+1057.23682 943.4
+1101.42224 589.2
+1179.38855 600.4
+1198.31177 3213.3
+1525.30432 1019.6
+1526.56714 657.3
+1536.98364 603.4
+1721.48596 688.3
+1875.21436 725.5
+1877.80334 801.5
+1878.92798 836.3
+1879.51563 20062.7
+1880.06775 894.6
+1880.30823 1055.4
+1880.80640 811.4
+1907.05432 7414.7
+1930.47815 1258.2
+S	1525	1525	410.4734971
+Z	4	1637.86269
+100.86365 1852.8
+107.56995 1495.9
+115.85574 1608.1
+116.18622 1520.3
+121.79660 7029.3
+128.54996 1601.4
+132.07982 2168.0
+133.08640 1499.9
+133.15054 2568.6
+147.58844 1938.1
+155.11348 1758.6
+157.59912 2501.4
+158.09612 3755.7
+165.44615 1672.3
+169.48892 2209.1
+170.04463 1930.3
+176.10675 7400.5
+177.10210 8429.6
+180.43263 1502.7
+191.73633 1748.4
+194.42804 1687.0
+198.89204 2405.2
+199.17145 2617.2
+199.18045 54134.5
+199.19547 1660.4
+199.23732 1877.6
+199.24498 3350.8
+199.26711 9147.0
+199.28795 1727.9
+199.36658 1846.0
+200.18364 6593.1
+200.63664 4364.1
+200.67203 1531.0
+203.11806 4642.0
+221.12833 283215.1
+221.41359 1608.8
+221.47481 2439.8
+222.13181 34924.6
+223.13519 2235.2
+226.15526 3292.3
+227.17545 11492.8
+232.81529 1920.8
+233.16451 9158.7
+238.72231 1793.0
+244.16615 2353.3
+249.12329 51191.1
+249.63739 4624.6
+250.12704 4885.7
+251.15013 6596.5
+254.16086 9600.5
+255.10886 7421.5
+255.28333 1655.4
+256.11426 2149.3
+258.15033 176868.6
+258.65189 41899.7
+259.15347 6379.8
+261.15863 2440.2
+271.55655 1637.3
+272.13486 6205.9
+272.17245 4881.2
+272.34586 1563.6
+286.73529 1804.0
+289.19092 2010.4
+308.89374 1898.2
+316.20355 1601.5
+317.18582 9467.8
+326.50998 20453.2
+326.84442 6155.9
+327.17737 2940.8
+344.19571 3533.4
+350.14648 2969.8
+355.77094 1440.3
+362.20728 39270.6
+363.21024 6853.5
+363.52078 3241.2
+364.18997 40610.7
+364.69110 11072.7
+365.19336 2763.2
+369.18677 3732.5
+371.83054 1789.7
+380.19229 1726.1
+380.80307 1538.3
+382.25586 4439.9
+384.95969 8455.7
+385.20932 4934.1
+387.19839 18968.5
+388.20148 3326.9
+388.53131 50880.7
+388.86581 28106.7
+389.19971 9539.3
+389.53726 2014.3
+392.19244 2419.5
+401.66043 1579.5
+410.22000 3966.9
+410.47180 3103.0
+410.90997 1528.2
+414.82297 1892.5
+423.71426 3766.8
+425.21570 2341.4
+425.71902 1824.4
+426.22595 159215.6
+426.56024 102865.6
+426.89441 42883.7
+427.22922 8579.3
+432.71909 25428.0
+433.22168 8643.8
+435.10730 1545.3
+437.21396 37312.3
+438.21722 6283.1
+442.93997 1726.8
+447.29626 4939.1
+457.12955 1604.4
+457.91730 6042.1
+458.25244 4591.7
+458.58423 2163.2
+462.87000 5437.9
+463.22980 8633.6
+463.39410 4769.9
+463.73886 3912.6
+463.92065 849819.5
+464.25455 609594.4
+464.44141 5824.2
+464.58844 236789.0
+464.78293 4726.8
+464.92285 65511.6
+464.97437 5572.9
+465.11978 2798.6
+465.25824 12746.0
+465.30957 4731.9
+475.29077 22212.7
+476.29495 5209.1
+480.25211 1832.7
+482.64157 1990.5
+484.21390 4800.0
+489.26096 80922.3
+489.76230 45396.8
+490.26385 10939.7
+490.76352 3348.7
+491.26697 2118.2
+497.28357 3115.6
+498.26923 2595.1
+505.27432 2748.1
+509.24142 2651.7
+512.94330 17758.5
+513.27734 19228.2
+513.61255 7493.6
+513.94769 5526.0
+515.29272 50690.4
+516.29626 10602.2
+518.24530 37901.8
+518.74640 19495.1
+519.24695 5700.6
+522.30048 5203.0
+532.30981 3832.1
+532.59827 5742.6
+544.77777 10699.0
+545.27679 6268.7
+546.96289 2890.3
+550.29773 21458.3
+551.30103 5539.9
+553.28638 11235.1
+553.78345 27689.7
+554.28381 16476.3
+554.78839 5553.2
+562.29193 196976.4
+562.79364 129326.8
+563.29468 36831.0
+563.79761 10833.6
+564.27979 5936.6
+564.77557 3882.3
+573.28735 35667.1
+573.78857 24121.3
+574.29108 8490.2
+574.78638 12179.3
+575.28894 6856.0
+575.78888 2330.7
+580.30634 2332.8
+580.81738 9555.9
+581.07513 3424.1
+581.31696 6125.9
+581.56409 8262.8
+582.05066 6999.3
+582.20587 3489.4
+582.22540 4708.5
+582.29260 1480939.5
+582.36340 3958.7
+582.79382 861136.8
+583.03241 8609.3
+583.29517 314936.1
+583.52448 7904.9
+583.79425 85740.4
+584.02423 3070.9
+584.29364 20568.8
+584.79401 6206.5
+588.45313 2315.5
+592.27002 5026.3
+599.27692 22228.3
+600.28094 6022.5
+612.31433 1902.2
+619.80200 3905.6
+620.30597 2531.7
+629.82983 8852.2
+630.32361 10094.0
+630.39166 2096.0
+631.32867 8712.0
+631.83112 5639.4
+638.83447 281063.7
+638.89020 2641.8
+639.33563 182083.2
+639.83716 74272.3
+640.33881 22001.6
+640.72833 1782.8
+640.84137 2295.0
+643.34119 4745.0
+643.83063 3895.5
+649.29297 67520.3
+650.29590 26566.9
+651.29767 3226.7
+652.07947 1849.6
+661.35468 8553.4
+662.35883 3978.6
+663.38220 7305.6
+664.38507 3176.1
+676.63623 2605.3
+692.16278 1788.4
+695.37695 3671.1
+695.87946 3954.5
+709.36090 11047.6
+710.37683 3844.2
+727.37250 173663.8
+728.37506 59614.6
+729.37799 15882.7
+730.37891 2665.6
+736.34155 3137.0
+762.37750 47937.4
+763.38037 18742.6
+764.32074 16205.0
+765.32300 5761.8
+774.43823 2494.7
+777.42023 1955.2
+795.55463 3032.0
+864.43250 12656.0
+865.43793 6325.4
+875.46149 42265.5
+876.46429 19673.0
+877.43488 6982.9
+911.48932 3762.5
+912.50897 2638.6
+920.41693 6797.6
+959.34430 1601.0
+1057.23425 2018.5
+1184.54395 1820.6
+1198.33350 9282.1
+1199.72192 1521.1
+S	1526	1526	1187.0178246
+Z	3	3557.778
+Z	2	2372.188
+315.17010 695.7
+326.17065 1230.8
+353.18149 2726.8
+354.16562 4105.6
+355.16861 673.2
+358.13962 2451.4
+360.19186 2743.8
+361.17697 1624.5
+365.14914 2788.3
+367.20160 4078.0
+368.20578 886.3
+371.19131 1098.1
+372.17627 10234.6
+373.17850 1180.4
+376.14938 1474.3
+377.13531 1167.5
+378.20200 1697.2
+383.16013 2411.4
+384.15076 773.8
+388.18713 1818.0
+388.25500 11416.0
+389.19272 600.7
+389.25864 2191.4
+393.14386 1872.6
+395.19678 2652.8
+404.14560 3131.1
+406.19705 2901.5
+410.17090 23832.5
+411.17377 5256.0
+422.15506 6042.2
+423.15906 1083.6
+426.20190 1964.0
+427.22159 1026.1
+428.18146 8191.4
+429.18539 1818.4
+437.20261 3698.8
+438.16855 1902.2
+439.25397 1746.3
+440.23639 2671.5
+443.23059 1167.2
+444.21375 4061.5
+452.21490 1014.3
+455.21259 9359.5
+456.17975 696.6
+456.21323 1698.7
+457.26511 1331.6
+461.23889 1139.7
+462.22223 2157.4
+463.22711 1330.8
+467.24930 799.0
+470.45325 543.9
+471.22321 8530.8
+472.21753 1434.0
+473.22391 9848.4
+474.22574 2044.4
+475.22864 743.3
+476.18057 5558.2
+477.18250 1248.2
+478.23318 10999.5
+479.23502 2754.6
+482.22452 2961.1
+482.26166 3818.8
+483.21024 680.4
+483.88782 659.7
+485.26004 4925.4
+487.18231 2807.5
+488.18857 1031.4
+488.25116 910.6
+489.23416 12610.6
+490.21826 3607.5
+491.22293 782.2
+494.19083 5248.9
+495.19235 1552.9
+495.25925 3638.4
+496.24344 8033.2
+497.24536 1695.5
+499.21747 1429.2
+499.28668 13924.0
+500.29074 3057.0
+501.27881 678.3
+505.19098 1777.7
+506.22964 1167.5
+507.24487 6563.7
+508.25052 1906.0
+512.19855 844.5
+513.27277 1339.9
+516.24536 1743.3
+517.22821 6333.1
+517.29724 31542.4
+518.23199 1441.5
+518.29944 7792.4
+519.30353 1424.9
+520.21808 931.1
+521.20233 24281.3
+522.20544 7213.4
+522.29248 976.9
+523.20563 1178.1
+523.25317 12846.6
+524.25824 3181.9
+532.58203 1698.2
+535.23804 5310.0
+536.24341 1437.3
+539.21240 10004.6
+540.21594 2708.3
+540.30444 1743.8
+541.26312 3996.6
+542.26465 962.3
+549.19537 800.7
+550.28583 4362.8
+551.24847 3223.9
+551.29199 1054.4
+555.24298 1554.8
+557.21967 934.9
+557.24628 674.5
+558.31366 1684.0
+561.27179 977.1
+563.32190 1166.3
+567.20923 1922.4
+568.29681 14069.0
+569.29919 3955.7
+570.29462 937.3
+572.26971 1941.1
+573.25385 11730.1
+574.25757 4063.8
+575.30579 1307.2
+576.30560 999.2
+582.25385 914.9
+584.30621 3057.8
+585.21631 1122.2
+586.30884 5267.2
+587.30951 2007.5
+589.26453 6162.9
+590.28735 1475.8
+591.26416 9824.4
+591.31732 4547.6
+592.26825 4069.7
+592.32025 1152.7
+593.30011 737.7
+593.51959 601.2
+597.28571 986.6
+600.26489 9844.9
+601.26794 2579.8
+602.31726 4903.5
+603.29767 1960.0
+604.61658 615.6
+606.29138 6018.8
+607.27228 8273.4
+608.27295 3249.7
+609.32703 2189.1
+610.32684 1067.1
+611.29761 1164.8
+613.31738 827.9
+617.29053 842.2
+618.27594 22067.9
+619.27991 6729.2
+620.28375 903.1
+620.32806 1340.5
+623.23193 1358.1
+624.23401 791.7
+624.30359 4057.2
+625.28369 6736.6
+626.28839 2758.8
+626.35504 819.3
+628.32849 7256.2
+629.34473 1603.8
+630.30591 1523.7
+630.38391 753.9
+630.43030 663.5
+632.23309 2976.6
+633.23901 858.4
+634.28583 26402.5
+635.29083 8023.4
+636.28723 9009.1
+636.33569 3258.4
+637.29114 2989.9
+642.31189 2876.1
+643.31738 923.6
+645.28680 2569.7
+646.26691 844.8
+646.33923 20487.0
+647.34204 6119.9
+647.63647 641.8
+648.31116 1369.9
+650.24384 11186.7
+651.24811 4224.5
+651.31146 1230.6
+652.29596 26952.8
+653.21094 1133.9
+653.30322 7742.8
+654.32318 1265.2
+662.28314 931.8
+663.29639 752.3
+665.01245 667.3
+665.30981 754.7
+668.25574 6368.9
+669.25958 1764.0
+670.30597 9534.7
+671.31262 3492.6
+672.30731 910.4
+676.34741 934.5
+680.29041 1941.8
+686.26294 1525.5
+686.33777 5294.7
+687.34125 1335.2
+695.33539 954.7
+696.35675 2403.4
+698.30243 2225.6
+699.30035 729.1
+702.34424 1344.8
+703.36682 2257.8
+704.34747 5818.6
+705.34900 2048.0
+708.32739 755.0
+711.30286 673.5
+713.34937 5719.4
+714.35590 2791.4
+718.29987 1016.5
+718.95398 690.3
+719.30585 908.0
+719.37579 1869.1
+720.35675 3444.7
+721.37256 2251.3
+722.37793 961.0
+726.33356 1327.9
+728.31952 1084.3
+731.35999 27484.8
+732.36401 10632.2
+733.36334 2553.7
+735.33704 3071.8
+736.31671 11020.6
+737.31665 6274.3
+737.37225 1129.9
+738.36792 8592.8
+739.37177 3249.9
+742.39526 855.2
+745.31775 3008.9
+746.33710 2386.9
+747.37024 7106.5
+748.37946 1398.0
+749.37018 10665.0
+750.37317 3882.3
+753.34454 5563.0
+754.32690 15215.2
+755.33252 5750.3
+756.32709 1556.8
+759.42365 17080.9
+760.42596 6377.8
+761.42969 960.1
+762.35138 1641.5
+763.32855 22005.6
+764.33252 7939.9
+765.37756 9043.3
+766.38550 4008.0
+767.38361 657.5
+771.35431 7239.6
+772.36237 2166.3
+780.35431 3751.9
+781.33875 67872.7
+782.34180 28112.7
+783.35809 6491.0
+784.38177 1906.0
+784.65662 714.0
+795.55273 1078.3
+798.36615 906.3
+799.34985 34969.9
+800.35370 11636.8
+801.35486 3437.7
+808.34680 827.0
+811.39075 705.0
+823.37628 929.8
+825.44647 1210.6
+841.40637 1539.8
+842.45941 6057.7
+843.45764 2936.0
+848.41559 2227.7
+849.39948 7288.9
+850.40179 3795.6
+851.40051 1688.9
+858.39984 1542.9
+859.41876 8383.7
+860.47009 30548.8
+861.47278 12769.4
+862.47778 3028.4
+865.36334 758.3
+866.42859 7966.8
+867.41174 14954.3
+868.41248 7155.6
+869.41284 2194.8
+874.35840 754.9
+875.42297 900.5
+876.15405 807.8
+876.41266 11621.2
+877.42218 6215.5
+878.42670 1664.2
+884.43835 7663.2
+885.43951 2732.2
+891.38593 2353.4
+892.36987 1939.5
+893.43457 2607.9
+894.42273 60235.2
+895.42603 24822.6
+896.42725 5569.9
+897.44110 948.4
+909.39618 7980.6
+910.39636 3207.2
+911.45337 2079.9
+912.43329 26013.8
+913.43555 10727.4
+914.43799 2326.0
+927.40552 4815.9
+928.40283 1336.4
+977.45660 1061.7
+978.45642 1146.7
+987.43066 795.7
+995.47620 1715.8
+996.47015 1541.8
+1004.47278 4002.0
+1005.45636 3287.1
+1006.45410 1180.3
+1006.56207 673.8
+1012.51086 1116.1
+1019.76843 769.2
+1022.48145 22251.7
+1023.47528 9210.5
+1024.47937 2705.8
+1024.54919 1516.5
+1040.49207 12932.3
+1041.49414 6211.4
+1057.04932 761.0
+1058.49768 1072.6
+1059.51465 731.9
+1124.56006 2529.2
+1125.56567 1527.2
+1133.54675 1411.0
+1142.57202 5092.7
+1143.56836 2449.6
+1150.57654 7789.8
+1151.56592 10132.0
+1152.56519 5621.1
+1153.56384 1450.3
+1168.57251 1239.8
+1178.08594 739.5
+1198.30505 3455.5
+1347.33997 755.0
+1525.40283 998.8
+1664.03516 651.9
+1715.71106 719.6
+1815.64673 631.7
+1833.28784 703.5
+1875.30835 857.8
+1878.11829 779.6
+1879.06287 1427.7
+1879.51868 19431.0
+1880.19080 889.2
+1907.05908 7563.1
+1918.67505 837.5
+1930.56116 1062.8
+S	1527	1527	410.9748246
+Z	4	1639.868
+101.42538 489.2
+103.45184 574.7
+105.71022 481.9
+107.33839 536.6
+110.86469 907.6
+110.93118 557.1
+111.93694 486.8
+113.18900 547.7
+113.45252 560.3
+113.68133 613.6
+115.49256 525.3
+115.78496 700.4
+116.66278 496.3
+118.80642 547.9
+120.65313 600.8
+121.79665 2275.8
+124.79121 547.6
+127.16687 614.2
+127.43756 647.5
+130.98462 747.7
+139.91316 596.6
+158.09605 1303.7
+160.11151 635.2
+170.26251 610.2
+173.90672 546.6
+175.54578 595.5
+176.10710 3026.4
+177.10201 2713.1
+177.15779 731.5
+182.76601 679.6
+192.90565 614.0
+196.85071 614.1
+199.18050 24711.4
+199.21902 911.0
+199.26895 3489.1
+199.28877 905.9
+199.36685 1350.6
+200.18373 2918.6
+200.63684 1359.2
+202.00490 611.8
+203.11775 1729.7
+203.26073 679.2
+208.59860 560.4
+213.08539 666.8
+220.95863 645.8
+221.12854 109505.7
+222.13182 17098.0
+223.13577 804.3
+226.15457 1327.2
+227.17563 4779.9
+233.16489 4438.7
+234.16931 800.1
+244.16632 1571.4
+249.12344 19228.7
+249.14497 789.0
+249.63721 1976.8
+250.12675 2708.1
+251.15051 2768.8
+254.16121 2401.5
+255.10854 2776.8
+256.11450 543.9
+257.98502 637.5
+258.15045 67545.6
+258.65207 15924.8
+259.15308 2052.1
+259.18408 636.0
+259.22717 627.2
+261.16037 794.1
+266.95526 576.2
+272.13519 2610.5
+272.17194 2076.8
+292.59149 560.2
+303.72064 637.2
+305.14734 885.9
+315.06070 678.9
+317.18634 3968.7
+326.51050 10357.7
+326.84464 4626.7
+327.17923 1279.9
+344.19724 788.0
+350.14597 1224.5
+355.18359 805.5
+362.20764 14050.5
+363.21063 2675.4
+363.52017 1799.2
+364.19034 16614.2
+364.69174 4893.2
+365.19315 829.7
+369.18689 903.0
+382.25568 1162.2
+382.86462 676.3
+384.95956 3685.8
+385.21069 3075.7
+385.46066 894.6
+387.19852 8274.9
+388.20184 1196.8
+388.53146 24517.4
+388.86600 13602.9
+389.20004 4115.1
+401.97562 599.1
+410.22168 2803.0
+410.47281 1490.7
+410.72192 1174.6
+411.22141 716.3
+420.22406 844.4
+420.55685 1072.6
+421.22488 828.6
+423.71445 2668.6
+424.21564 921.6
+425.21527 933.1
+426.22620 64640.3
+426.56039 37087.6
+426.89450 14478.3
+427.22824 3916.2
+427.50436 791.3
+432.71970 8548.0
+433.22128 4358.5
+433.72662 870.5
+437.21411 11948.6
+438.21866 3163.2
+447.29697 2197.8
+457.91745 2722.3
+458.25339 1679.8
+460.70767 761.1
+462.86758 1563.4
+463.22763 2836.4
+463.39868 1997.3
+463.72296 733.7
+463.73529 721.7
+463.92093 310724.4
+463.96115 1028.3
+463.98511 667.8
+464.25476 206803.0
+464.29922 1023.1
+464.44055 1698.5
+464.58887 84432.5
+464.77829 1731.3
+464.92319 25133.3
+464.97568 1543.7
+465.11929 1012.7
+465.25797 5938.8
+465.31531 1348.9
+465.45532 695.4
+475.29156 7199.2
+476.29431 1783.6
+476.76501 838.6
+480.25497 893.3
+480.75479 717.7
+482.61258 905.4
+484.21417 1734.5
+485.22098 741.5
+485.24637 702.2
+485.31625 668.5
+489.26111 29440.6
+489.76245 16821.8
+490.26318 4317.5
+490.76938 804.7
+497.28015 1183.3
+498.26437 887.6
+499.27216 767.5
+507.27145 740.5
+512.94305 7990.3
+513.27802 6189.2
+513.61096 2537.8
+513.94690 1488.7
+514.29346 754.3
+515.29309 18906.8
+516.29614 3979.2
+518.24536 14858.6
+518.74695 7412.0
+519.24982 3335.8
+519.74719 733.4
+522.30383 1829.1
+532.25427 553.3
+532.30859 1657.4
+532.54437 2131.5
+542.78180 965.4
+544.77783 4026.6
+545.27930 2919.7
+545.78180 886.8
+546.62299 1120.7
+546.96375 1273.0
+550.29816 6533.6
+551.30084 1967.2
+553.28638 3958.3
+553.78351 10431.1
+554.28412 6271.4
+554.78442 2130.5
+555.28363 771.0
+562.29224 70546.6
+562.79388 40069.0
+562.92059 555.2
+563.29529 14946.4
+563.79712 3442.8
+564.27698 1342.5
+564.77856 2120.8
+565.27728 639.9
+573.28796 15503.5
+573.78925 9472.8
+574.29004 2588.9
+574.78833 6233.3
+575.29071 2438.2
+580.69934 615.0
+580.81250 2829.7
+580.99078 631.1
+581.01764 579.8
+581.08197 1353.0
+581.26825 740.6
+581.31451 1584.6
+581.56525 2876.9
+581.79791 1463.1
+582.05927 1366.9
+582.20593 1130.4
+582.22839 1637.6
+582.29297 560564.1
+582.37012 1524.0
+582.39343 1173.4
+582.54492 1156.4
+582.72241 795.8
+582.79419 338965.1
+582.86218 1391.2
+582.97943 865.1
+583.03119 3583.1
+583.07770 655.0
+583.29565 120787.1
+583.52289 3125.0
+583.60376 1332.8
+583.63818 641.1
+583.79681 30393.3
+584.01056 1463.2
+584.11755 882.0
+584.29858 8572.4
+584.76819 972.1
+588.46014 931.3
+588.95343 770.6
+592.27454 1631.0
+594.34821 1877.8
+599.27710 7052.0
+600.27997 1537.4
+619.81049 852.3
+620.30432 759.7
+629.82898 4352.9
+630.32397 3307.5
+630.83496 1056.0
+631.32928 4422.3
+631.82935 2450.2
+632.32202 1045.9
+638.83472 114027.8
+639.33606 70790.1
+639.83716 26774.5
+640.17883 602.9
+640.33862 7858.6
+640.83771 1870.0
+641.32745 667.5
+643.34589 1684.7
+643.82654 1307.0
+649.29309 26904.6
+650.29578 9538.9
+651.29785 1713.2
+661.35449 3404.8
+662.35309 1197.6
+663.38245 3813.3
+664.38611 1392.9
+678.11682 743.0
+690.69629 648.5
+695.37793 1334.9
+695.86694 1043.1
+709.36224 4987.0
+710.37201 1055.1
+727.37262 65866.1
+728.37506 23297.0
+729.37769 4897.9
+736.33563 1017.7
+762.37775 17403.7
+763.38165 6832.9
+764.32062 5904.3
+765.32416 1773.2
+774.43811 970.7
+777.42908 934.1
+795.56311 1381.6
+829.34723 577.7
+864.43335 5023.5
+865.42871 1657.8
+866.43323 749.8
+875.46167 16916.4
+875.90039 599.5
+876.46490 8308.2
+877.44623 2618.9
+878.40173 1081.1
+911.50171 2045.5
+912.51007 851.6
+920.42200 1966.4
+1035.49194 675.1
+1057.27063 796.0
+1198.21741 3276.9
+1203.27478 582.6
+1204.89893 594.1
+1239.75745 720.4
+1243.81079 556.7
+1400.38892 584.7
+1458.79614 649.5
+1503.41577 588.0
+1525.27393 857.9
+S	1529	1529	410.4785321
+Z	4	1637.88283
+102.76141 34777.7
+103.52238 38194.5
+113.45937 38232.6
+121.79523 135816.8
+125.47041 35722.1
+133.70114 31452.8
+154.40877 36973.3
+156.50641 29630.2
+157.59937 29807.0
+165.77643 42596.0
+171.32057 30745.2
+173.46082 30225.7
+174.62354 34183.3
+182.77696 30316.5
+188.13145 36074.7
+188.26514 96921.6
+188.28008 151502.4
+188.29486 131888.1
+188.30855 118468.6
+188.35292 32081.8
+188.36749 31961.2
+188.43268 32410.6
+193.00012 29722.0
+195.72946 42366.3
+199.04434 29591.6
+199.16092 34128.5
+199.17554 38295.7
+199.18289 47070.6
+199.19821 41604.3
+199.25777 40565.2
+199.27306 119715.7
+199.28174 106457.6
+199.29672 104340.9
+199.37872 63034.7
+199.39388 35301.4
+234.91277 36938.4
+249.08348 39283.4
+254.49088 33720.1
+269.29413 33961.0
+280.17398 35734.0
+301.83545 38156.4
+305.36737 38922.1
+308.87616 50834.9
+342.79398 34398.5
+372.90753 39249.5
+375.19775 35905.8
+381.34515 47813.4
+400.45441 35757.6
+421.61926 37074.3
+427.50696 35772.1
+444.88901 32051.5
+469.88107 49370.1
+476.75995 47176.3
+532.59338 105111.2
+532.68903 42695.7
+538.51221 37131.1
+549.11853 45952.0
+571.72491 35824.2
+572.17834 32060.4
+580.35309 35533.1
+585.26788 44429.6
+586.83948 38655.5
+589.35559 38000.6
+594.28424 64718.6
+595.34039 31931.9
+622.93134 35257.3
+626.77448 37300.3
+630.38165 49957.2
+676.63037 76874.4
+731.08221 56194.3
+795.56024 63398.1
+976.16016 43063.7
+1057.23267 46344.5
+1085.14087 35258.6
+1183.50317 38826.5
+1198.32593 157189.1
+1198.46680 78483.8
+1235.46777 33300.2
+1362.68250 40420.2
+1489.64355 34305.4
+1489.75586 30069.4
+1546.66577 42929.5
+1548.30615 34400.6
+1563.08691 36531.5
+1594.83801 36705.5
+S	1530	1530	410.9798246
+Z	4	1639.888
+107.93944 611.6
+120.75246 509.8
+121.79677 1940.6
+121.81649 576.5
+133.12769 600.1
+136.83888 526.1
+139.06903 590.7
+141.84866 640.6
+146.80600 611.9
+157.60823 669.9
+158.09660 1831.9
+160.11157 724.9
+165.77777 613.6
+173.83546 541.6
+176.10678 3535.4
+177.10211 4682.0
+177.11017 566.9
+178.10435 858.2
+182.79295 664.6
+198.11935 595.9
+198.89204 1178.7
+199.15536 678.2
+199.16829 1238.7
+199.18034 29396.1
+199.25427 1626.2
+199.26768 2742.6
+199.28009 1485.0
+199.29738 599.6
+199.36441 1132.8
+200.18338 3863.7
+200.63661 2417.1
+200.67575 536.4
+203.11783 1804.2
+213.08629 744.8
+221.12837 131803.3
+221.47787 833.6
+222.13176 18832.7
+223.13496 1138.5
+224.65456 670.2
+226.15477 1314.4
+227.17523 6215.6
+231.11310 973.5
+233.16467 5347.1
+234.12376 732.4
+237.85919 533.8
+244.16646 1244.3
+248.31441 608.5
+249.12340 21129.1
+249.63760 2035.8
+250.12726 2572.9
+251.15028 2604.7
+254.16124 2795.7
+255.10892 3334.0
+255.30371 721.7
+258.15033 74616.9
+258.65192 17651.3
+259.15308 2988.8
+259.65225 638.1
+271.56036 574.1
+272.13507 2107.9
+272.17145 1444.8
+317.18616 4025.0
+326.51035 7717.7
+326.84451 3939.8
+327.18240 686.2
+327.73639 743.6
+342.29102 685.3
+344.19791 1412.2
+350.14655 1079.5
+362.20731 12596.7
+363.21063 3186.7
+363.51953 812.1
+363.85492 779.3
+364.19003 13838.9
+364.69141 6629.9
+365.19226 880.8
+368.92383 584.3
+369.18747 1082.1
+372.99405 667.8
+376.85806 688.0
+382.25555 1296.8
+382.53137 727.7
+384.96036 2217.0
+385.20990 1116.9
+385.45963 980.2
+387.19824 5484.9
+388.20355 672.7
+388.53137 20499.1
+388.86548 12282.1
+389.19974 3006.5
+410.22128 963.7
+410.47076 1159.9
+421.22437 1012.1
+423.71497 1675.4
+424.21625 696.7
+425.21497 1069.5
+426.12866 559.2
+426.22595 44171.4
+426.56027 28457.4
+426.89432 11598.9
+427.22873 2237.6
+427.56979 715.6
+432.71942 8000.6
+433.22052 3019.9
+433.72543 1020.2
+435.85419 584.5
+437.21399 11456.1
+438.21765 1758.6
+439.92184 548.4
+447.29639 1822.9
+448.30020 905.9
+457.28262 1084.3
+457.91687 2243.2
+458.24841 1254.1
+458.58878 691.1
+460.71683 549.2
+462.86438 796.3
+463.04013 925.3
+463.19095 891.6
+463.23062 3221.2
+463.40067 1144.7
+463.87241 780.6
+463.92068 222552.1
+464.25464 154857.1
+464.44711 856.2
+464.58865 66900.9
+464.77582 791.8
+464.92300 22503.0
+464.98093 1071.9
+465.13303 762.1
+465.25739 5422.8
+465.31543 1004.8
+475.29123 6830.1
+476.29440 1484.9
+476.77112 774.6
+477.92383 634.7
+477.98993 535.8
+484.21228 934.6
+485.25140 807.6
+489.26083 27691.6
+489.76227 15107.4
+490.26312 4744.8
+490.76678 1358.7
+507.26880 2249.0
+507.77087 1344.3
+509.31412 626.1
+511.77216 795.1
+512.94342 5706.9
+513.27814 5666.6
+513.61188 4513.6
+515.29309 10459.7
+516.29486 2168.6
+516.60547 658.6
+518.24536 12120.8
+518.74689 6789.6
+519.24622 2884.5
+522.30133 918.3
+532.31299 1246.6
+532.57513 2006.8
+544.77777 3946.9
+545.28009 2927.3
+545.78363 693.9
+546.62714 770.9
+546.95642 1344.1
+550.29834 5281.5
+551.30115 1104.3
+552.30585 778.6
+553.28534 5740.1
+553.78333 12446.9
+554.28534 7296.7
+554.78619 2528.2
+562.29199 46050.7
+562.79382 32075.2
+563.29498 10288.3
+563.79736 2992.1
+564.28174 1793.7
+564.78186 1353.6
+573.28772 11355.6
+573.78888 8559.0
+574.28918 2722.0
+574.78906 4689.4
+575.28674 2041.1
+575.78986 901.7
+578.25378 749.2
+580.27295 671.0
+580.80908 2232.6
+581.07080 1360.7
+581.30457 1583.8
+581.56610 2998.5
+582.05377 900.0
+582.08368 1325.8
+582.29272 541488.2
+582.37549 1834.4
+582.54370 1280.4
+582.58960 584.6
+582.60376 617.8
+582.79382 341326.3
+583.02997 3710.1
+583.29523 138408.0
+583.52789 3502.8
+583.73193 719.8
+583.79675 36786.6
+584.02539 2183.4
+584.07837 612.0
+584.11359 720.8
+584.29700 6039.6
+584.50928 979.9
+584.62097 652.7
+584.79871 1231.7
+592.27026 2046.4
+599.27808 3279.8
+619.81451 755.5
+629.82880 2747.2
+630.32147 2380.9
+630.83533 900.9
+631.32855 3674.9
+631.83118 2224.2
+632.33429 945.1
+638.83453 100707.1
+639.33582 70763.8
+639.83722 29061.5
+640.15851 627.7
+640.33807 9397.3
+640.84180 1803.1
+643.34344 1282.4
+643.82886 894.2
+649.29266 24442.5
+650.29626 7679.2
+651.29840 2208.4
+661.35193 2626.5
+662.15631 678.1
+662.35767 865.2
+663.38013 2625.2
+664.38702 812.7
+676.63483 1001.8
+695.37518 1256.7
+695.87531 975.0
+709.36371 2020.6
+727.37256 39450.9
+728.37555 14995.9
+729.37634 2862.7
+762.37744 14069.6
+763.38080 6165.2
+764.32178 5110.3
+764.60309 675.1
+765.32275 2095.8
+795.56201 1169.2
+852.38898 707.5
+864.43066 2133.3
+865.43591 1077.5
+875.46185 13128.5
+876.46429 5708.0
+877.45215 2094.2
+878.43060 654.2
+883.43207 584.5
+911.49908 826.1
+920.42090 1730.3
+921.40753 805.0
+1057.22571 682.6
+1079.72131 663.9
+1198.28625 3456.8
+1232.68872 589.4
+1235.90808 571.9
+1243.56909 629.6
+1330.40271 597.3
+S	1531	1531	529.2815421
+Z	4	2113.09487
+141.84784 689.2
+147.97227 648.9
+150.19095 561.5
+152.18491 622.6
+157.60194 564.5
+163.33693 572.4
+167.10524 513.1
+169.80548 666.9
+175.31743 652.1
+184.41534 644.7
+188.25708 720.8
+188.26326 768.9
+188.27203 1001.9
+188.28189 1341.6
+188.29416 1056.9
+188.30281 839.2
+188.31091 791.1
+188.32054 600.0
+198.89046 897.9
+199.18192 1137.1
+199.18864 988.8
+199.23140 687.1
+199.26202 781.3
+199.27040 2678.4
+199.29013 1649.3
+199.30336 856.7
+199.36913 956.6
+199.38329 791.3
+207.20103 557.8
+222.13194 584.6
+224.12939 577.1
+224.18802 505.8
+224.19579 465.4
+233.57539 525.3
+250.01414 683.1
+258.14987 3290.3
+258.65128 720.1
+263.86929 653.9
+281.80396 630.0
+285.10059 643.2
+290.66321 682.7
+292.84433 608.6
+308.89935 955.1
+313.79391 582.0
+330.11108 1054.1
+330.66199 970.6
+339.66766 1759.3
+345.16196 738.1
+353.66376 1027.7
+364.18872 1159.0
+364.69000 817.1
+379.23917 606.7
+387.70114 575.4
+388.53046 2204.6
+388.86560 2991.1
+389.20203 956.7
+396.20773 5000.3
+396.70929 2481.6
+397.20959 1153.8
+400.26672 1431.2
+407.46185 666.7
+410.20596 4572.1
+410.70718 2490.7
+411.20840 1302.9
+417.72144 615.5
+419.21167 742.2
+420.55688 553.7
+426.22534 35928.0
+426.55981 32026.4
+426.89395 20291.2
+427.22736 4056.6
+432.71820 1396.7
+437.21240 1272.2
+438.21417 714.7
+453.25061 869.2
+457.74301 644.4
+458.20523 2152.5
+458.24585 1138.2
+459.20975 1025.5
+462.25980 869.7
+463.92020 7930.1
+464.25455 10123.7
+464.58865 3757.3
+464.92209 1394.0
+466.74802 11934.4
+467.24973 8591.3
+467.74939 3579.3
+475.75195 827.2
+482.65488 631.5
+489.26065 7870.5
+489.76263 5448.8
+490.26239 2100.8
+495.25867 2949.9
+495.75830 1864.8
+496.26147 925.9
+501.22885 561.1
+513.28168 755.3
+513.60913 665.8
+515.29230 1369.6
+532.55298 1802.1
+541.24268 2228.9
+541.95862 551.2
+542.24457 1385.0
+545.27826 1679.9
+553.78241 7217.5
+554.28363 6776.7
+554.78516 1863.1
+555.28857 710.1
+559.25366 3881.6
+560.25354 2209.2
+573.28705 3098.9
+573.78845 1418.4
+574.28912 1236.2
+574.78467 1584.6
+575.28815 1303.0
+575.79498 788.4
+577.34180 781.4
+578.33710 872.9
+580.80695 693.4
+581.31207 911.0
+582.05652 730.7
+582.29218 143769.2
+582.79358 140472.8
+583.29480 62788.0
+583.79590 18092.0
+584.29492 4167.5
+584.75244 658.0
+589.65643 1437.7
+590.32300 800.5
+593.78314 580.3
+600.05145 567.7
+618.33429 4624.5
+618.66882 6794.2
+619.00171 5579.0
+619.33514 2309.0
+619.67657 1238.0
+629.82800 991.4
+630.32764 1024.5
+630.40485 697.7
+630.82703 881.1
+631.32886 740.5
+638.83398 81900.5
+639.33508 92918.2
+639.83643 48457.1
+640.33777 15112.4
+640.83984 2986.6
+649.29108 1594.9
+663.93762 611.8
+676.64374 1481.3
+686.52686 659.2
+688.31085 3200.5
+689.31281 2090.5
+690.31061 865.4
+695.37653 16206.4
+695.87775 18428.2
+696.37903 9178.0
+696.88123 2920.3
+697.37927 763.6
+706.32153 37575.1
+707.32434 21234.6
+708.32367 7898.7
+709.32330 1406.8
+727.37054 4090.8
+728.37439 2412.6
+764.32269 891.5
+767.81860 549.7
+769.41016 763.6
+790.89032 2587.1
+791.38855 3058.2
+791.89154 2648.0
+795.54932 752.4
+801.39185 2773.4
+802.39917 2217.1
+819.40509 53718.3
+820.40778 37063.7
+821.40759 15468.3
+822.40979 4288.5
+823.41528 625.8
+837.41620 1712.7
+838.42004 1372.8
+877.40277 783.0
+932.49066 796.2
+933.49884 935.2
+969.97015 647.8
+1030.46753 551.8
+1057.24988 810.9
+1140.39282 640.6
+1198.23840 3212.1
+1298.09216 536.0
+1348.27539 677.5
+1351.02795 662.9
+1512.62378 682.1
+1755.47803 611.6
+1877.87463 880.8
+1879.25549 3290.8
+1879.53906 19760.5
+1880.93628 699.7
+1881.25537 872.4
+1901.20691 639.9
+1907.01721 7185.5
+1918.73767 969.7
+1930.54285 678.2
+1958.18762 595.7
+1977.98718 574.8
+S	1533	1533	410.4733446
+Z	4	1637.86208
+113.23273 39717.1
+113.46999 41865.2
+119.18505 39531.8
+120.63061 47762.2
+121.43775 41141.8
+121.79689 184662.5
+133.80659 47765.2
+142.14836 44520.3
+157.61172 48093.1
+163.58591 51653.4
+164.97188 44643.6
+165.77948 66808.1
+173.38103 39495.8
+173.51440 48288.8
+179.85616 46204.2
+181.19240 55594.7
+182.79074 48920.2
+188.21437 53943.6
+188.25294 80684.6
+188.28749 182388.4
+188.40312 41993.2
+197.73657 50397.0
+198.89177 74911.6
+198.98869 52604.6
+199.13734 47765.7
+199.15610 52544.7
+199.18018 660636.1
+199.23470 70818.2
+199.27144 168688.5
+199.28769 73698.9
+199.30199 128515.6
+199.32762 63759.7
+199.36707 84337.1
+200.18062 42667.6
+208.45143 45798.5
+213.45369 38659.3
+213.94856 49272.4
+221.12788 2444391.5
+222.13145 300752.6
+227.17448 147202.5
+233.59116 57089.2
+235.72833 46364.3
+235.76836 44938.0
+249.12296 351582.4
+255.43143 43916.0
+258.14981 1268684.0
+258.65179 262345.3
+270.56256 46911.2
+271.90811 39510.9
+284.81396 40748.6
+286.55136 51542.9
+287.70782 42501.8
+301.01794 43664.6
+320.63696 46934.0
+325.95465 39480.6
+326.50876 67596.5
+327.97079 49354.2
+343.19867 37343.7
+350.24289 59332.9
+354.25116 40073.2
+362.20599 177994.9
+364.18945 176801.0
+364.69406 51735.8
+387.19714 69390.3
+388.53098 327256.0
+388.86591 178099.7
+389.19843 52394.6
+392.04071 49743.9
+426.22513 315953.7
+426.56006 183542.8
+426.89465 111497.8
+427.56903 53862.5
+437.21063 92157.2
+458.90320 55647.7
+463.91971 2897585.5
+464.25403 1519314.3
+464.58844 483105.2
+464.91901 69101.2
+465.25226 68464.3
+469.75540 43884.9
+475.28979 66314.8
+489.26031 283143.4
+489.76233 113396.9
+512.94055 82435.5
+513.27313 87670.1
+518.24585 66202.3
+519.63269 49845.2
+532.56146 124956.2
+532.60730 51334.2
+532.64520 57934.5
+532.67346 40656.1
+553.28540 82108.7
+553.78271 124564.8
+554.28766 52959.5
+562.28986 331074.1
+562.79285 212235.5
+573.28571 128825.5
+582.29181 5736495.5
+582.79321 3543665.0
+583.29462 1328042.5
+583.79553 300045.8
+601.12402 39231.5
+601.13922 39816.6
+638.83405 762968.2
+639.33533 610197.3
+639.83636 175041.8
+649.29199 211073.4
+650.29443 50187.1
+676.58411 52416.2
+676.64587 66615.7
+727.37134 56174.7
+762.37561 134200.0
+772.72577 43966.6
+789.21362 43466.7
+830.81110 42172.8
+845.18701 47795.3
+875.46332 144659.2
+886.63135 46106.5
+913.47449 43473.0
+1057.24731 75759.1
+1063.87512 50089.7
+1150.03784 55015.6
+1169.54980 55986.4
+1188.16882 73530.5
+1196.02808 49756.2
+1198.25330 212832.0
+1198.40161 73083.4
+1231.28589 59875.6
+1278.19763 43109.8
+1362.09595 44333.8
+S	1534	1534	410.9748246
+Z	4	1639.868
+100.71810 586.0
+105.26244 516.8
+109.11940 625.3
+109.34507 533.6
+111.26277 682.2
+115.57204 575.9
+116.12048 513.3
+116.79794 674.6
+120.72294 538.2
+120.90394 659.0
+121.79654 2691.9
+125.78428 595.8
+125.84536 611.8
+130.12105 646.6
+133.13602 1048.2
+135.68524 609.0
+146.25928 623.6
+148.54118 532.5
+152.03082 666.7
+155.26280 525.6
+157.58681 620.9
+158.09546 1465.4
+160.11180 644.5
+165.77852 827.6
+170.78433 521.7
+176.10654 2701.0
+177.10188 3719.9
+177.11082 598.9
+181.30956 495.1
+186.71751 555.7
+191.75729 602.8
+198.88931 1111.4
+199.18013 33741.4
+199.27794 2555.9
+199.29079 1013.2
+199.29979 976.7
+199.36967 732.5
+199.39816 671.7
+200.18324 3834.1
+200.63693 2033.7
+203.11801 1436.0
+214.81296 563.6
+220.78217 813.8
+221.12817 127089.2
+221.29871 756.4
+221.47545 850.3
+222.13152 20150.1
+223.13510 1096.6
+223.52129 577.9
+226.15396 850.6
+227.17508 8196.7
+228.17850 906.0
+231.11101 816.8
+233.16447 4367.1
+234.16821 782.6
+240.62776 667.1
+244.16508 924.1
+248.47293 655.1
+249.12321 19554.2
+249.63693 2315.2
+250.12636 3642.1
+251.15041 1712.8
+254.16135 2865.0
+255.10817 2824.3
+258.15005 59401.7
+258.65164 18438.6
+259.15359 2037.8
+261.16016 941.7
+272.13477 1341.0
+280.15158 653.9
+282.22937 568.0
+298.03152 586.1
+317.18616 3337.3
+326.51019 6851.8
+326.84409 5485.8
+327.17889 1558.6
+344.19437 1011.4
+362.20715 12041.3
+363.21115 2784.1
+363.51999 861.2
+364.18976 11816.6
+364.69159 5308.9
+366.53821 603.5
+369.18716 956.8
+382.52725 650.8
+384.95938 2359.0
+385.20950 1776.9
+387.19855 3934.7
+388.53107 18123.8
+388.86533 14044.8
+389.19934 5839.1
+389.53226 827.0
+415.81650 541.4
+420.55203 938.6
+421.22137 752.0
+426.22549 24067.8
+426.55981 22539.3
+426.89380 10127.2
+427.22949 2000.1
+427.47678 560.0
+427.49860 789.5
+432.71841 2582.6
+433.22131 2140.5
+433.71951 709.2
+437.21365 3692.8
+438.21854 1469.8
+438.73541 1169.2
+441.41449 646.1
+447.29437 1371.3
+457.91821 1150.5
+458.24878 1646.4
+463.22995 1378.4
+463.92017 118903.9
+464.25433 114562.5
+464.58826 59522.1
+464.92236 20338.3
+465.25629 3126.3
+465.30811 1051.1
+475.29095 4843.1
+476.29294 1471.2
+483.26566 621.6
+489.26080 15322.8
+489.76212 12772.1
+490.26361 3868.3
+512.94141 3426.6
+513.27765 4202.2
+513.60944 2748.3
+513.94476 1280.5
+515.29163 2160.6
+516.29358 1511.5
+518.24469 6396.3
+518.74603 4149.2
+519.25128 1211.2
+519.75293 603.0
+532.31427 732.9
+532.53546 2183.7
+544.77734 2677.8
+545.27429 959.1
+550.29962 1426.9
+553.28656 3993.1
+553.78479 9394.6
+554.28448 4604.1
+554.78394 1754.3
+562.29163 15597.5
+562.79358 13517.4
+563.29401 4708.9
+563.79907 1730.3
+564.27985 680.2
+564.77496 831.6
+573.28754 5255.4
+573.78973 5424.1
+574.29150 1983.2
+574.78668 1590.0
+575.28864 804.5
+580.81458 2009.0
+580.97278 559.2
+581.31201 1653.1
+581.56281 1618.9
+582.06342 1218.6
+582.29230 327853.5
+582.52692 716.7
+582.55743 1160.7
+582.79352 277496.5
+583.02747 2369.7
+583.29480 114873.6
+583.52362 2603.9
+583.79706 29221.6
+584.02051 848.3
+584.09430 548.7
+584.29956 5029.0
+584.78363 1348.1
+592.27057 1024.5
+619.80389 740.3
+629.83118 1252.3
+630.32904 868.9
+631.32953 1378.9
+631.83063 862.3
+632.33521 680.7
+638.83411 49876.7
+639.33521 46468.1
+639.83655 21517.2
+640.33710 5544.1
+640.83691 1210.5
+643.34308 1433.0
+644.32281 795.2
+649.29242 12341.7
+650.09363 697.1
+650.29578 5698.5
+651.29956 1061.5
+657.72253 584.0
+661.35455 1548.6
+663.38123 1314.9
+676.61743 1106.5
+694.61536 576.8
+696.38281 646.9
+727.37238 8217.1
+728.37646 2725.4
+760.06201 580.2
+762.37708 6787.2
+763.38037 3418.2
+764.31732 2231.2
+765.32666 1100.6
+875.45996 7341.1
+876.46161 3617.6
+877.45764 917.1
+912.51270 572.3
+1019.72003 693.3
+1020.84607 724.2
+1070.30627 669.2
+1075.88892 549.9
+1095.81848 582.4
+1135.74817 620.4
+1158.19543 666.8
+1187.97437 846.2
+1198.19873 3068.6
+1221.78357 590.5
+1325.06421 614.5
+1392.31445 616.9
+1424.72485 725.1
+1502.05652 655.8
+1525.27930 1095.0
+S	1535	1535	529.2753171
+Z	4	2113.06997
+143.99960 498.0
+157.57777 572.5
+165.77657 734.0
+171.64001 705.9
+176.33267 685.7
+180.61395 540.7
+181.85683 542.5
+186.51093 538.8
+188.27306 1244.5
+188.27995 1185.3
+188.28795 1048.9
+188.29669 1171.1
+188.30829 690.3
+188.32071 604.1
+198.89456 989.2
+199.07217 567.2
+199.16774 841.4
+199.25044 1038.0
+199.26801 2368.8
+199.27744 1046.2
+199.28702 1023.0
+199.35991 921.9
+220.98911 628.6
+239.52467 562.1
+258.14996 1754.5
+260.36603 536.0
+264.71683 534.0
+271.96515 562.6
+322.86044 582.1
+339.66809 1235.1
+350.28177 737.1
+364.18811 1056.2
+369.63287 551.0
+388.52930 1344.1
+388.86203 1008.0
+396.20807 2522.8
+396.71185 1062.3
+410.20596 4593.9
+410.70660 1840.5
+426.22528 22427.7
+426.55951 20440.7
+426.89383 8547.0
+427.22696 2250.6
+437.21210 680.6
+457.74179 679.6
+457.94730 686.7
+458.20758 662.7
+462.62186 749.4
+463.92047 5204.3
+464.25351 5604.6
+464.58835 2332.3
+466.74808 10323.6
+467.24930 6524.7
+467.74948 2421.0
+468.25409 791.1
+488.24606 638.7
+489.26053 3792.2
+489.76111 3205.6
+490.26276 861.9
+495.25870 1679.1
+495.75748 1086.1
+512.94757 724.4
+515.29016 766.4
+532.51520 759.5
+532.56116 2011.2
+541.24396 1229.7
+553.78107 5763.2
+554.28387 3302.3
+554.78552 1865.0
+559.25311 2881.0
+573.28735 1705.9
+574.77527 534.6
+580.79584 613.6
+582.29181 89614.2
+582.79315 72575.3
+583.29456 27410.1
+583.79639 7825.5
+597.51740 596.0
+612.66089 663.3
+618.33447 3569.6
+618.66779 4922.3
+619.00183 4615.3
+619.33789 1295.4
+630.32642 791.0
+638.83374 58029.4
+639.33502 50140.4
+639.83649 23445.3
+640.33795 5675.5
+676.58984 1030.8
+688.31335 1491.1
+694.69708 609.3
+695.37579 9720.4
+695.87720 7423.2
+696.37805 5170.8
+696.87994 2073.0
+706.32098 22376.5
+707.32434 10257.9
+708.32458 3116.5
+727.37018 1697.7
+731.00800 571.0
+733.98419 665.8
+766.58075 611.9
+790.88495 1250.7
+791.39722 1586.3
+791.89117 1131.9
+795.57800 1221.7
+801.39532 1292.3
+802.39990 970.4
+819.40479 36066.9
+820.40753 20358.4
+821.40784 6705.3
+822.40875 1484.5
+822.93945 690.4
+837.41254 1325.6
+838.42310 1015.5
+932.49854 828.7
+1057.15869 996.6
+1079.49500 650.0
+1187.82654 657.5
+1198.10620 914.5
+1198.25696 3358.3
+1238.63989 665.6
+1271.72327 647.3
+1525.19092 874.2
+1623.85132 637.0
+1716.94580 1621.6
+1879.38574 21491.8
+1879.72009 692.7
+1906.67590 724.5
+1907.06750 7412.6
+1930.28357 619.1
+1935.29517 622.1
+S	1537	1537	410.4777396
+Z	4	1637.87966
+102.69507 594.1
+104.78991 658.3
+107.70928 592.7
+110.14431 519.8
+113.45516 730.7
+115.58392 590.8
+120.65623 610.6
+121.78870 671.7
+121.79470 772.1
+121.79806 1677.0
+122.90477 502.6
+124.32366 495.2
+128.56673 806.6
+133.19821 632.0
+142.67677 770.7
+149.70656 564.8
+153.05894 626.7
+155.05000 581.4
+155.12241 557.8
+176.10692 1424.5
+177.10152 1075.7
+181.56810 571.3
+182.76904 631.4
+198.89400 946.7
+199.17987 18384.0
+199.21896 619.0
+199.25827 729.7
+199.27020 2416.6
+199.28642 1082.5
+199.36873 1097.3
+200.18314 3078.0
+200.63626 808.6
+203.11787 1018.1
+221.12790 70377.0
+221.41631 585.2
+222.13126 12352.1
+226.15456 870.2
+227.17497 3908.8
+233.16422 2268.1
+249.12283 10555.6
+249.63652 1361.7
+250.12665 1894.1
+251.14841 698.0
+254.16035 1656.9
+255.10745 1355.2
+258.14975 33902.5
+258.65155 11560.3
+259.15353 1375.0
+271.56613 762.6
+271.75113 626.8
+272.13556 1013.0
+280.16193 684.1
+283.99435 626.3
+285.86548 547.7
+297.28564 566.9
+317.18591 899.7
+321.99509 606.4
+326.50980 2162.4
+326.84390 1844.1
+331.73996 663.1
+361.04633 600.1
+362.20654 6914.0
+363.21008 1698.7
+364.18930 6390.7
+364.69070 3049.9
+382.25983 694.3
+382.53058 851.1
+384.95981 815.6
+385.21030 1918.4
+387.19696 1210.7
+388.53079 8127.9
+388.86456 7590.4
+389.19846 2696.1
+400.06042 632.1
+410.06461 570.8
+426.22491 10093.2
+426.55942 10169.8
+426.89331 3199.3
+427.22781 1346.3
+427.51419 896.0
+432.71936 1341.7
+433.21960 766.8
+437.21243 1895.0
+438.21570 865.0
+448.29684 628.9
+458.25241 1036.4
+463.22552 1080.7
+463.91946 58157.6
+464.25378 60689.2
+464.58795 34247.1
+464.92224 7901.9
+465.26102 895.9
+469.88651 681.3
+475.28979 3042.2
+476.29419 1234.3
+476.76425 738.5
+482.62210 808.8
+489.26050 6455.9
+489.76102 7038.3
+490.26181 2102.3
+498.11612 628.1
+503.86221 616.6
+506.12421 590.5
+512.94159 1517.5
+513.27649 3239.4
+513.60962 2089.1
+515.29010 788.0
+518.24542 1471.6
+518.74542 1382.3
+519.24835 785.1
+532.52838 2344.7
+544.77557 848.1
+545.27930 663.1
+549.11926 704.1
+553.28546 1905.9
+553.78546 4232.0
+554.28510 3269.7
+557.60614 759.5
+562.29034 8288.3
+562.79291 7368.1
+563.29456 2914.2
+573.28705 3056.6
+573.78900 4183.2
+574.28955 1718.1
+574.78857 1253.8
+580.80682 692.3
+582.04932 765.3
+582.06201 789.8
+582.29163 163038.8
+582.35974 641.1
+582.55334 720.0
+582.79285 154924.3
+583.02295 1089.7
+583.29425 71146.6
+583.52588 1155.0
+583.79553 17102.0
+584.10773 577.9
+584.29395 2136.7
+601.06573 645.9
+629.84241 581.9
+630.33356 955.3
+631.32391 877.9
+638.83350 21195.1
+639.33472 25472.0
+639.83606 11595.9
+640.33868 3559.8
+649.29108 6550.0
+650.29517 3165.7
+663.37946 1031.2
+676.62823 755.9
+713.43683 685.1
+725.67963 643.9
+727.37146 3937.6
+728.37396 2116.5
+762.37781 3624.2
+763.38165 2091.3
+763.56116 628.1
+764.31787 1172.2
+795.57098 972.6
+873.94592 585.4
+874.78119 592.8
+875.45905 2645.0
+876.46033 2058.8
+882.39532 559.7
+934.23364 616.3
+975.13666 726.3
+1006.27637 625.7
+1171.63721 636.5
+1190.70081 622.2
+1198.17871 3618.8
+1284.68506 645.4
+1559.20398 601.7
+S	1538	1538	529.2806871
+Z	4	2113.09145
+158.56258 753.8
+184.82831 626.3
+193.93005 700.4
+195.93059 620.4
+198.88812 954.3
+199.17758 1177.5
+199.22824 512.0
+199.23120 513.2
+199.25137 1222.5
+199.27261 2429.8
+199.29350 1096.9
+199.30553 704.2
+199.37013 1271.2
+218.32274 721.0
+227.16745 661.3
+249.68094 599.9
+255.28064 503.3
+258.14993 2950.5
+272.19901 570.0
+278.80353 637.8
+289.95782 611.8
+322.25214 592.1
+330.11246 579.3
+334.65268 561.2
+339.66638 2391.0
+342.25839 605.8
+350.29541 651.9
+361.76276 619.9
+364.19046 1651.2
+364.69122 897.8
+385.61636 562.3
+388.53214 1919.1
+388.86472 2578.7
+389.19852 958.1
+396.20844 2802.8
+396.71075 1819.4
+400.26578 1594.8
+405.22174 660.2
+410.20624 7369.3
+410.70712 2302.7
+411.20746 1557.0
+426.22516 36461.6
+426.55954 35353.9
+426.89398 12977.4
+427.22760 3362.6
+427.52841 894.1
+427.56213 721.9
+428.15594 545.8
+432.71924 1652.0
+433.71945 601.9
+437.21329 1710.4
+438.43423 639.0
+452.75040 1089.8
+458.20334 1905.8
+463.91949 8217.6
+464.25418 9090.7
+464.58923 2675.0
+464.92212 954.0
+466.74817 15156.3
+467.24942 9841.7
+467.75058 3661.6
+468.25568 686.8
+489.26007 7255.8
+489.76181 5444.7
+490.26328 2450.6
+495.25674 2164.4
+495.75885 2646.0
+496.25986 662.6
+514.70380 544.2
+515.29193 1585.8
+523.98712 630.4
+532.54382 2209.1
+541.24292 2795.9
+542.24683 1093.2
+544.77667 2015.4
+545.28058 1048.4
+553.78210 8418.3
+554.28357 6355.6
+554.78345 1921.5
+559.25262 4286.0
+560.25629 2264.3
+562.43054 662.4
+573.28833 1821.9
+573.78894 1645.9
+574.79059 1195.2
+575.78510 682.7
+577.32935 865.4
+582.29199 151040.4
+582.79321 127117.4
+583.29456 55205.8
+583.79498 11985.1
+584.29272 2145.5
+584.45874 736.1
+589.65924 1046.1
+589.98950 1107.6
+599.27582 638.8
+613.33655 694.6
+618.33313 3846.4
+618.66742 7961.6
+619.00220 5482.9
+619.33533 1986.6
+629.82910 967.7
+630.33154 993.2
+630.38416 624.4
+638.83386 91115.3
+639.33502 85502.8
+639.83630 42830.0
+640.17084 763.0
+640.33801 11354.9
+640.83942 1686.4
+649.29071 1314.0
+653.21869 1286.4
+667.68048 619.4
+676.67474 632.8
+688.30890 3701.5
+689.31165 1252.4
+695.37628 16299.9
+695.87750 18274.2
+696.37885 7883.1
+696.88074 3363.8
+706.32098 37720.8
+707.32422 20255.8
+708.32495 5672.2
+709.32477 945.3
+727.37286 3998.1
+728.37634 1776.5
+790.89081 2773.5
+791.39343 2411.7
+791.89240 2318.9
+795.55353 771.7
+801.39191 2598.5
+802.39636 1450.0
+819.40485 57453.4
+820.40729 34373.9
+821.40802 13763.0
+822.40912 3893.8
+837.41431 2422.0
+838.41705 1227.6
+841.80200 674.1
+842.04797 703.9
+877.39716 798.6
+880.16235 624.6
+932.48193 982.5
+959.38947 568.1
+986.10547 562.4
+988.03857 608.9
+1019.73071 812.0
+1020.85223 683.8
+1057.30212 772.0
+1133.27710 684.2
+1198.21680 3230.9
+1215.15417 576.5
+1493.55457 578.9
+1543.16235 657.4
+1550.18420 566.3
+1719.23438 1114.7
+1752.70837 941.1
+1877.84583 795.7
+1878.45862 1023.7
+1878.79041 989.2
+1879.12512 2592.2
+1879.34412 4226.5
+1879.62097 18756.4
+1880.20972 1770.3
+1880.49365 872.0
+1880.82373 836.8
+1881.89880 787.3
+1885.79736 572.8
+1907.11609 7364.4
+1917.87402 675.8
+1930.54504 959.5
+1932.13232 675.5
+1996.92102 704.7
+S	1539	1539	410.9790746
+Z	4	1639.885
+102.06432 27888.1
+106.62612 26297.2
+106.88828 30467.1
+106.97996 33632.3
+115.78472 25995.3
+121.79578 90050.8
+128.57610 33463.1
+133.13750 47008.5
+137.29106 40089.4
+146.92299 38345.6
+149.88638 28239.9
+152.75522 32176.7
+158.09653 59591.8
+176.10616 80274.7
+176.12457 27079.6
+176.39534 28910.4
+176.83290 31848.7
+177.10193 128800.6
+180.52531 30429.3
+182.78450 25793.7
+198.89003 34667.8
+198.95169 27222.5
+199.16624 46575.0
+199.18018 983660.6
+199.19244 26382.9
+199.24821 32554.9
+199.26485 87439.7
+199.27351 108067.5
+199.28534 81244.6
+199.37163 32453.7
+199.38116 24908.7
+200.18332 102472.7
+200.63686 37976.9
+203.11734 41989.1
+221.12802 4181305.5
+222.13141 485049.8
+226.71526 30078.7
+227.17503 255286.4
+231.11122 34051.6
+233.16409 125581.5
+249.12297 773563.4
+249.14467 40895.0
+249.63693 70685.0
+250.12679 113878.2
+251.14899 52258.6
+253.31355 28812.7
+254.16060 94059.1
+255.10785 76403.3
+255.29298 35983.9
+258.14993 2318575.3
+258.65173 527604.9
+259.15298 63432.1
+261.15952 36184.3
+271.57742 33651.7
+272.13513 86198.3
+272.17096 30756.9
+280.18533 32931.7
+311.20883 27701.0
+317.18628 96282.0
+326.51010 258119.1
+326.84338 108154.6
+344.19675 68139.9
+350.14560 37941.4
+350.27734 30042.4
+362.20715 406070.1
+363.20990 84397.0
+363.85818 31503.1
+364.18979 404379.3
+364.69128 107300.0
+365.38815 34945.5
+373.93494 28625.6
+381.36090 29608.0
+384.96021 116080.7
+385.20901 53986.9
+387.19757 77248.6
+388.20203 40290.8
+388.53094 605853.1
+388.86517 368958.0
+389.19989 174669.8
+389.53632 39426.2
+414.70743 31582.3
+415.69116 30719.0
+423.71655 40900.8
+426.22507 852773.1
+426.55981 648492.4
+426.89407 272323.0
+427.22980 52377.9
+427.55127 29430.3
+432.71881 94983.3
+433.21964 33776.3
+437.21304 109907.3
+438.23129 53944.7
+447.29602 40363.5
+457.91608 64921.7
+458.24893 89274.8
+463.22864 82926.1
+463.92004 5265592.0
+464.25415 4085976.0
+464.58813 1949622.0
+464.92230 556297.6
+465.25662 80709.7
+468.27240 28193.6
+475.29028 179406.9
+476.29376 45289.8
+482.65640 36432.9
+489.26041 529157.9
+489.76129 186699.2
+490.25922 54664.5
+512.94360 231419.3
+513.27527 133882.3
+513.60876 71000.9
+515.29010 61715.7
+518.24609 136690.3
+518.74573 62783.8
+532.54858 87149.8
+544.77612 57577.9
+545.28699 38388.6
+546.27924 26885.0
+553.28479 138866.5
+553.78394 254052.3
+554.28284 134938.1
+554.78619 48847.6
+562.29169 711965.6
+562.79309 527071.6
+563.29431 157101.7
+563.79413 45651.2
+573.28680 195902.7
+573.78766 142473.6
+578.40582 27949.0
+580.81677 61303.9
+581.31909 41544.1
+582.29211 11299654.0
+582.36017 29340.1
+582.79340 6872592.5
+583.03027 71663.5
+583.29462 2237586.0
+583.53479 42832.7
+583.79614 576789.1
+584.29498 60972.1
+592.26385 37468.7
+603.69708 31264.8
+630.33179 49166.8
+631.32910 73891.0
+631.82867 57756.7
+632.34155 33817.5
+638.83423 1589776.0
+639.33557 1103508.9
+639.83618 408078.7
+640.33826 124223.6
+643.34253 48193.9
+649.29266 409729.8
+650.29846 117025.2
+651.29681 35824.1
+661.35455 59190.9
+676.66846 45272.8
+706.32178 44053.4
+727.37402 162091.1
+728.37256 47721.4
+731.12305 35544.2
+743.98975 34251.9
+753.01959 27438.8
+762.37653 255869.6
+763.37872 72063.5
+764.32178 70838.6
+764.37915 24603.3
+795.55127 39594.1
+875.46198 222500.5
+876.46130 127820.0
+1137.32422 25906.2
+1198.21667 155344.0
+1525.42871 35693.6
+1619.39783 28004.9
+S	1541	1541	410.4738321
+Z	4	1637.86403
+100.43063 2023.6
+101.94452 2338.8
+105.45963 1934.7
+121.79443 3479.4
+121.79861 7684.4
+121.80341 3101.4
+133.72156 2128.4
+137.07091 1875.6
+141.70114 2276.8
+147.11061 2445.5
+148.06541 2081.7
+157.59018 2023.7
+158.09587 8615.9
+160.11130 4638.6
+165.35208 2486.9
+165.78156 2685.2
+169.50496 2160.9
+176.10666 15825.5
+177.10188 18872.8
+178.10443 2373.0
+182.62611 4869.9
+184.35187 2406.4
+184.78172 2157.0
+199.18021 122985.4
+199.25815 6932.5
+199.26851 8913.9
+199.28386 4717.6
+199.36650 2875.8
+200.18333 16072.2
+200.63727 3649.2
+203.11743 7333.9
+204.11984 2937.9
+215.14256 1954.9
+221.12817 549743.9
+221.29912 3678.4
+221.67868 2842.5
+222.13155 82838.9
+223.13455 3240.6
+223.15335 2386.7
+226.15472 5511.1
+227.17513 29128.5
+228.17841 3366.5
+231.33978 3008.6
+233.16469 24096.5
+244.16536 4236.8
+249.12311 91210.3
+249.14510 3114.3
+249.63713 6168.4
+250.12704 13568.3
+251.15002 10373.6
+254.16074 14381.7
+255.10828 11818.3
+256.40167 1972.0
+258.15012 280389.6
+258.65182 71996.6
+259.15338 9122.6
+272.13480 9617.0
+272.17157 7772.7
+274.98056 2761.8
+282.15625 3596.2
+316.20276 2473.2
+317.18561 12537.3
+326.50986 33062.6
+326.84381 17436.0
+327.17795 10005.9
+340.04019 2332.3
+344.19629 6612.4
+348.44510 2517.0
+350.14679 3422.1
+355.18356 4514.1
+362.20700 45515.8
+363.21051 8333.2
+364.18985 55822.0
+364.69141 22222.1
+365.19370 3500.2
+365.69266 2732.8
+369.18738 4253.8
+374.18430 2007.3
+376.52545 4664.0
+376.85919 3533.8
+382.52621 2737.5
+384.95874 11104.9
+385.20880 5796.3
+385.45932 4441.0
+387.19830 16017.0
+388.53085 66120.7
+388.86511 42692.8
+389.19910 19209.2
+389.53223 5774.1
+401.53613 2102.3
+411.48126 2074.6
+423.71484 4088.5
+424.21542 2468.8
+426.22562 110240.1
+426.56003 83545.5
+426.89447 35214.4
+427.22858 11444.8
+432.71881 21974.4
+433.21844 7752.1
+433.72562 2652.2
+437.21326 27789.2
+438.22440 7516.9
+444.53516 2145.4
+447.29733 5055.0
+457.91455 6570.4
+458.25098 4850.8
+463.22775 5956.1
+463.92026 585312.2
+464.25433 461486.0
+464.43591 2634.6
+464.58835 191128.2
+464.92236 64697.8
+464.97223 3464.8
+465.25635 15219.2
+471.52771 2006.6
+475.29031 18459.7
+476.29370 5618.0
+489.26053 86565.2
+489.76181 62689.8
+490.26364 15901.9
+490.76382 4306.6
+507.26987 3407.7
+512.94312 20681.6
+513.27643 21471.0
+513.60907 5618.6
+515.29150 18152.4
+515.36066 2646.3
+516.29553 2932.2
+518.24487 32879.5
+518.74664 19282.0
+519.24902 4148.8
+532.30658 3566.5
+532.51251 6686.9
+544.77844 7007.2
+545.27924 6695.3
+550.29468 7552.5
+553.28644 26428.0
+553.78357 36003.3
+554.28558 17355.4
+554.78564 5506.9
+562.29163 99472.6
+562.79321 62868.0
+563.29456 23613.5
+563.79620 8998.6
+564.27649 4280.5
+564.77966 4244.8
+573.28784 38075.3
+573.78894 29380.2
+574.29120 8133.6
+574.78497 10706.2
+580.81824 7263.2
+581.07703 2970.4
+581.19550 2714.7
+581.31549 6056.7
+581.55658 5103.3
+581.81097 3728.7
+582.22644 5226.6
+582.29242 1546381.9
+582.70709 3009.5
+582.79352 1108085.9
+583.03003 7051.1
+583.29492 457587.8
+583.79547 134610.1
+584.29303 27317.2
+584.79016 5761.2
+589.72614 2256.7
+592.27014 3905.1
+599.27325 4871.4
+629.83020 5935.2
+630.32507 6145.1
+631.32739 7247.8
+631.83203 3660.5
+638.83423 256305.6
+639.33545 202410.0
+639.83673 93396.7
+640.33856 24328.7
+640.83868 2799.1
+643.34326 6076.9
+649.29260 65191.3
+650.29541 23990.3
+651.29688 5787.9
+661.35352 4437.3
+662.36230 2527.1
+663.38287 8159.8
+664.37140 2749.5
+676.63647 4905.7
+727.37238 53484.7
+728.37524 21028.9
+729.37549 4684.3
+731.10175 2707.0
+762.37708 32927.6
+763.37988 14188.4
+764.32172 8307.7
+765.32275 7068.5
+784.01471 2477.9
+795.55090 4643.3
+875.46185 27163.4
+876.46594 14936.0
+877.45142 5438.4
+971.12549 2157.1
+1057.23669 3374.5
+1124.13281 2221.8
+1128.87732 2160.9
+1169.58252 2815.1
+1177.95947 2732.9
+1198.13965 12412.6
+1258.86389 2514.8
+1285.98608 2456.3
+1550.55920 2618.5
+S	1542	1542	529.2759871
+Z	4	2113.07265
+137.27600 665.4
+146.90706 738.1
+157.58694 754.7
+158.75591 638.1
+163.85899 559.3
+163.86458 581.0
+183.53220 616.1
+185.17648 575.1
+198.89207 903.7
+199.17033 1079.9
+199.23866 573.3
+199.25420 1098.9
+199.26590 2747.7
+199.36497 1155.7
+251.45110 571.4
+258.14975 2724.9
+258.65134 781.5
+267.84409 520.3
+271.90842 813.3
+308.81396 591.8
+308.86935 848.4
+330.66052 866.6
+339.66766 1213.4
+340.79367 515.4
+345.33258 601.3
+381.32108 719.4
+388.53082 1848.7
+388.86490 1658.3
+396.20871 3408.7
+396.71066 2769.8
+397.21344 624.3
+400.26666 856.4
+410.20636 5600.5
+410.70688 2283.6
+413.36548 576.6
+426.22507 30372.0
+426.55936 26116.4
+426.89368 11278.4
+427.22815 2407.6
+427.56351 789.1
+433.21973 660.9
+437.21237 990.9
+447.92148 609.3
+453.24750 750.2
+458.20642 1374.2
+463.91949 6506.5
+464.25378 7237.9
+464.58887 2517.9
+466.74768 11688.9
+467.24933 6569.8
+467.74988 3181.3
+486.25659 630.9
+489.26053 4570.9
+489.76089 3930.4
+490.26251 1504.2
+495.26059 2093.0
+495.76059 1564.2
+496.17871 556.6
+507.43640 581.4
+515.29443 846.9
+532.50085 1404.3
+541.24219 1787.2
+544.77356 735.9
+545.27399 1075.8
+547.73431 691.0
+553.78174 6946.7
+554.28223 4456.1
+554.78510 1439.1
+559.25244 3704.1
+560.25641 1506.3
+573.28760 1832.7
+573.78711 1096.3
+574.78711 800.0
+575.28888 827.3
+577.33234 789.8
+582.29187 111705.5
+582.79309 91403.0
+583.29462 37323.5
+583.79547 8178.0
+618.33441 3239.5
+618.66650 5074.9
+619.00372 3939.9
+619.33325 894.1
+630.83624 629.2
+638.83380 68030.4
+639.33502 62746.9
+639.83649 29308.9
+640.33759 6177.3
+649.28998 845.8
+653.21564 708.1
+676.64941 1040.6
+688.31281 1573.0
+689.31293 1123.0
+695.37567 12316.9
+695.87787 12423.9
+696.37872 6019.1
+696.87573 1835.3
+706.32123 30982.6
+707.32391 14012.0
+708.32458 3966.2
+711.25751 585.7
+727.36676 971.7
+728.37634 1012.0
+749.26685 695.4
+790.88879 2241.4
+791.39032 2342.8
+791.89697 1183.4
+792.38965 954.7
+795.56329 1200.7
+801.39612 1300.8
+819.40497 43992.0
+820.40747 26206.8
+821.40900 8902.0
+822.40564 2081.9
+837.41241 1254.2
+838.41302 736.8
+866.86841 554.3
+881.60858 582.0
+888.50647 580.4
+932.49371 1495.4
+967.04187 705.5
+1163.73389 770.6
+1188.12964 660.3
+1198.12024 3287.4
+1373.37183 666.3
+1525.27808 794.0
+1641.14929 713.9
+1716.57544 600.7
+1717.09241 1708.9
+1783.30078 552.2
+1791.49805 650.8
+1877.01880 712.0
+1878.33020 1274.5
+1879.26343 4224.9
+1879.56299 18767.7
+1880.51184 1054.9
+1880.81396 667.7
+1881.20288 649.7
+1907.13135 7736.1
+1907.45740 530.4
+1930.41223 798.2
+1932.27319 1061.5
+1974.71521 658.2
+S	1543	1543	410.9753246
+Z	4	1639.87
+101.20975 517.0
+110.11797 617.3
+110.39230 669.3
+113.39023 646.8
+113.87976 625.3
+121.79201 1220.3
+121.79690 2139.7
+141.38562 683.7
+145.29428 540.4
+148.73166 488.8
+149.79222 665.8
+150.94565 559.8
+158.09569 941.7
+164.55455 530.7
+164.85533 548.0
+176.10640 1452.5
+177.10191 2186.7
+180.35515 552.0
+194.15068 602.7
+198.24777 606.2
+198.89299 746.3
+198.94820 608.2
+199.16022 599.1
+199.16801 1052.7
+199.18015 23117.4
+199.24533 1112.0
+199.25690 1387.1
+199.26643 2423.1
+199.27615 1788.1
+199.30669 713.7
+199.33432 765.1
+199.36441 770.2
+199.37679 747.0
+200.18333 2957.7
+200.63686 1449.4
+203.11768 1276.7
+209.31599 638.6
+215.49174 588.1
+221.12816 94150.2
+221.72958 615.4
+222.13153 15528.5
+223.13516 795.1
+227.17480 5250.6
+233.16406 3409.6
+233.56723 657.5
+234.12138 627.8
+241.88713 528.2
+249.12309 15634.9
+249.63696 1347.4
+250.12701 1960.9
+251.14949 1219.8
+254.16040 1096.4
+255.10852 1513.8
+257.80212 655.7
+258.14996 44728.1
+258.65173 15499.2
+259.15286 1553.2
+265.41541 643.2
+271.58511 625.5
+272.13498 1752.5
+272.17126 911.6
+294.47736 553.3
+304.95749 746.6
+317.18478 2006.5
+318.18869 659.7
+326.51001 4935.4
+326.84442 4177.0
+327.17642 1248.9
+344.19589 917.9
+350.29102 679.9
+355.18365 619.7
+362.20712 9136.5
+363.21011 1947.8
+364.18991 6588.1
+364.69125 3136.4
+365.19458 973.7
+381.34756 710.9
+385.21017 2353.5
+385.46106 1131.7
+387.19818 2282.5
+388.53094 10312.4
+388.86511 7891.1
+389.19901 2996.0
+389.53427 1721.2
+398.18924 538.5
+404.00690 616.6
+420.42130 641.1
+426.22546 14002.4
+426.56009 14273.4
+426.89383 7832.8
+427.09995 521.1
+427.22733 1381.5
+432.71967 3225.5
+433.21759 1101.8
+437.21371 2662.4
+438.23361 622.4
+457.28241 983.3
+458.25174 863.7
+463.22873 1205.2
+463.92014 92910.1
+464.25418 93872.3
+464.58835 50661.5
+464.92245 16707.8
+465.25696 2760.6
+474.26102 543.2
+475.29166 3233.7
+476.29633 913.4
+476.78366 595.9
+489.26016 11997.1
+489.76236 7687.5
+490.26291 2129.0
+503.49081 652.1
+512.94202 2808.3
+513.27563 2718.8
+513.61176 2281.8
+513.94617 1194.5
+515.29395 2198.4
+516.27448 592.4
+518.24609 3447.6
+518.74823 2943.1
+532.55542 1687.1
+544.77490 943.6
+545.27972 710.3
+553.28668 3855.0
+553.78375 5478.3
+554.28326 3807.4
+554.78357 1346.0
+562.29150 12545.2
+562.79303 9169.8
+563.29346 5253.3
+563.79626 932.4
+573.28754 3313.9
+573.78912 3775.2
+574.29083 1566.0
+574.78644 863.2
+580.81134 1176.6
+581.31055 974.1
+582.29230 226077.5
+582.79358 192127.9
+583.02643 906.7
+583.29468 75328.1
+583.79742 18968.4
+584.30286 2101.9
+592.26892 752.3
+631.33221 1433.9
+631.83051 1596.8
+638.83405 32458.6
+639.33539 29901.1
+639.83710 13667.5
+640.33588 3527.0
+648.20728 587.2
+649.29218 8182.3
+650.29602 3459.1
+661.35272 1044.2
+669.29071 670.0
+676.65143 1156.8
+727.37054 4311.4
+728.37427 1758.2
+762.37714 6391.5
+763.37970 3096.7
+764.32452 1720.8
+795.55865 789.6
+875.45990 5227.9
+876.46130 3215.4
+911.49243 926.1
+983.10559 582.1
+1173.14185 541.5
+1188.15710 775.3
+1198.24414 3106.2
+1533.67102 654.7
+1647.04333 707.9
+1651.49207 660.8
+S	1545	1545	410.4784421
+Z	4	1637.88247
+103.19534 508.8
+106.82719 591.1
+111.37550 511.8
+113.18822 491.5
+119.99508 575.4
+121.16429 499.4
+121.79418 747.9
+121.79867 2178.7
+121.82171 550.1
+124.00706 551.5
+138.30159 519.2
+145.35262 535.6
+151.11409 627.8
+158.09636 1949.7
+160.11122 781.9
+162.34828 493.7
+165.78339 940.6
+168.13338 525.5
+169.48430 706.7
+171.63863 686.6
+174.53104 567.2
+176.10677 3312.6
+177.10191 4029.5
+182.62656 1082.7
+191.63014 597.1
+198.89250 970.8
+199.16196 712.6
+199.18031 28650.0
+199.20197 574.3
+199.21004 814.0
+199.22923 950.9
+199.25989 2825.6
+199.28093 748.1
+199.30788 502.4
+199.35880 1116.5
+200.18364 5204.7
+200.63655 1292.1
+203.11765 1671.3
+211.19572 549.9
+214.50322 571.6
+221.12833 126847.2
+221.47746 1036.0
+222.13168 20346.4
+223.13519 1166.3
+226.11333 614.0
+226.15485 1336.2
+227.17513 7358.3
+228.20117 587.5
+231.11148 872.0
+233.16469 5125.8
+234.16747 960.8
+244.16556 1132.8
+249.12326 21679.4
+249.14517 643.2
+249.63708 2742.4
+250.12706 2943.2
+251.15048 2283.7
+253.77730 549.9
+254.16092 2909.2
+255.10832 1559.6
+257.00485 586.3
+258.15021 58838.1
+258.59708 745.7
+258.65179 18475.3
+259.15314 3870.7
+261.15936 933.5
+272.13470 1965.4
+272.17120 1545.4
+274.58890 731.0
+286.81393 559.1
+308.88388 605.1
+317.18613 2673.6
+322.75629 617.0
+326.50980 6728.7
+326.84399 3139.0
+327.17871 894.1
+334.78564 625.2
+342.25797 619.6
+344.19669 947.9
+350.28003 632.0
+362.20734 11446.0
+363.20953 2109.9
+363.52097 1064.8
+363.85498 1472.5
+364.19000 12432.9
+364.69138 5955.6
+365.19156 1234.2
+369.18698 668.1
+381.33624 595.8
+384.95911 2129.7
+385.21066 3142.2
+385.24326 747.6
+385.46088 1420.3
+385.70941 758.5
+387.19833 3401.5
+388.20410 743.3
+388.53094 13390.8
+388.86572 10115.1
+389.20016 4220.3
+419.27313 554.0
+426.22571 21766.8
+426.56012 19066.2
+426.89407 8158.1
+427.22806 2304.7
+432.71994 2870.2
+433.21826 1909.5
+437.21432 5379.7
+438.22183 1360.3
+447.29501 895.2
+448.91449 593.0
+456.54291 678.2
+457.91782 1040.4
+458.25159 1879.8
+458.58325 796.0
+463.22980 1407.3
+463.92050 100029.6
+464.25452 93443.6
+464.58859 47259.6
+464.77795 786.6
+464.92264 17350.3
+465.25845 2499.5
+467.49777 565.4
+469.87808 905.0
+475.29050 4061.8
+476.29703 1152.9
+476.77237 939.2
+482.63400 755.1
+489.26086 19807.8
+489.76233 12271.9
+490.26218 3898.6
+490.76437 950.1
+512.94159 2827.1
+513.27838 3317.3
+513.61005 1679.2
+513.94720 747.7
+515.29004 2834.0
+516.29376 1186.6
+517.27521 756.4
+518.24585 5769.7
+518.74561 3915.3
+519.24615 1752.7
+532.51465 2310.4
+544.77734 2077.2
+545.27649 1166.0
+548.73126 859.1
+549.13391 691.4
+550.29718 1454.1
+553.28711 4082.8
+553.78497 7170.0
+554.28577 4145.1
+554.77948 790.7
+557.04584 536.0
+562.29181 14182.9
+562.79413 10559.8
+563.29388 5338.5
+563.69299 662.9
+563.79858 938.4
+564.27972 1567.5
+564.77966 1029.2
+573.28778 8195.9
+573.78955 6082.2
+574.29150 3286.1
+574.78888 1529.5
+575.28571 952.2
+580.80670 1476.1
+581.30688 1239.9
+581.56342 1762.9
+582.06329 1635.4
+582.29260 332921.7
+582.79382 261938.2
+583.02618 1813.3
+583.29517 107013.7
+583.52551 1835.5
+583.79712 27629.0
+584.02563 1216.6
+584.30090 2167.5
+584.53699 636.2
+584.78119 753.6
+592.27252 831.0
+599.27844 990.9
+629.82526 1347.7
+630.33795 864.8
+631.32849 1103.5
+631.82892 1448.5
+632.32611 824.6
+638.83429 50081.2
+639.33563 44861.1
+639.83704 20483.7
+640.33795 3798.2
+640.84113 1168.7
+643.34747 1037.4
+643.83112 843.9
+644.32190 809.6
+649.29272 13037.5
+650.29449 5746.8
+651.30206 931.7
+661.35162 1161.6
+663.37988 1439.6
+664.38428 668.3
+674.92487 623.9
+676.62561 1128.9
+695.39111 612.1
+727.37354 9348.8
+728.37592 3946.6
+729.37775 1176.8
+731.08893 840.8
+762.37683 7235.9
+763.38019 3859.3
+764.13062 602.5
+764.32092 1675.4
+765.32770 973.7
+875.46082 6697.2
+876.46484 3422.6
+877.46204 1177.4
+905.76288 601.9
+962.84656 609.0
+968.37146 584.1
+1020.49084 575.8
+1021.11743 703.8
+1057.21338 668.4
+1150.87219 587.5
+1188.27551 653.2
+1198.14343 3571.1
+1239.51758 605.4
+1489.24109 548.6
+1524.88086 642.0
+1525.35474 773.0
+1579.40552 673.8
+S	1546	1546	529.2817871
+Z	4	2113.09585
+150.10115 651.4
+150.10995 550.6
+157.56071 525.0
+171.64491 657.8
+180.99844 806.8
+182.75166 566.4
+185.06871 544.9
+197.67880 739.1
+198.89177 919.0
+199.16866 973.7
+199.26617 2634.3
+199.27458 1819.7
+199.36497 821.4
+214.49625 594.2
+221.12776 755.0
+223.10600 532.7
+238.72562 697.1
+246.27359 550.3
+258.15024 3257.0
+259.51392 507.1
+268.43866 537.6
+275.03555 651.4
+280.15918 1074.0
+286.51990 618.4
+330.11151 783.2
+330.66232 1032.2
+339.66690 2214.3
+340.16965 1040.3
+344.66080 716.7
+345.15973 799.0
+353.66724 610.8
+364.18976 2841.6
+364.69220 1473.4
+380.18765 607.2
+383.53049 733.7
+387.19876 611.5
+388.53094 3665.4
+388.86389 3132.2
+389.19852 1666.8
+389.90067 603.4
+396.20901 5118.9
+396.71082 1938.2
+397.20847 858.3
+400.26563 2379.9
+403.65088 558.9
+410.20663 5945.7
+410.70758 4339.7
+411.04852 599.4
+411.20834 1367.3
+413.26086 618.0
+418.65903 642.8
+426.22543 37457.1
+426.55988 42010.7
+426.89383 23168.5
+427.22836 7417.1
+427.51257 676.0
+427.56339 848.6
+432.71826 1208.5
+433.22046 1572.2
+436.25171 659.3
+437.21402 2492.8
+438.21350 913.4
+452.75070 1266.1
+453.25156 957.1
+457.74268 1189.9
+458.20712 1907.6
+461.75693 716.9
+463.92029 6768.6
+464.25415 9489.5
+464.58789 5005.5
+464.92273 2202.6
+466.74835 14893.4
+467.24942 9231.1
+467.75018 3265.8
+468.25485 718.1
+475.75287 991.9
+489.26004 9239.3
+489.76205 7604.7
+490.26163 2493.7
+490.76483 714.9
+495.25882 3088.7
+495.76004 2720.1
+496.26096 919.2
+515.29407 1779.7
+532.51324 2094.2
+541.24219 3447.8
+542.24432 1150.6
+544.77704 2698.4
+545.27740 1822.2
+545.79260 593.3
+549.10559 664.5
+550.29523 1001.2
+551.30115 740.3
+553.78156 8684.2
+554.28314 7284.6
+554.78485 3139.6
+555.28516 1155.4
+559.25323 6269.1
+560.25659 2520.3
+562.80542 566.4
+564.77472 634.5
+573.28479 2383.4
+573.78925 1892.3
+574.28796 959.4
+574.78809 1655.6
+575.28558 882.5
+575.79272 805.1
+577.33362 913.1
+581.31085 1053.8
+581.56696 940.1
+582.29236 176749.6
+582.79364 165464.5
+583.03070 1024.8
+583.29510 76130.5
+583.52295 1394.4
+583.60919 532.9
+583.79718 20780.5
+584.02332 748.8
+584.30170 2792.7
+584.62091 579.2
+589.32623 857.9
+589.66260 1555.8
+589.99030 1254.6
+590.32349 896.6
+599.28101 946.6
+612.66431 1409.2
+618.33374 4773.2
+618.66791 8898.5
+619.00195 7534.0
+619.33673 3470.6
+619.67224 771.5
+629.82867 1548.0
+630.32959 1987.9
+630.82843 979.4
+631.32684 775.8
+638.83423 109236.4
+639.33533 122072.7
+639.83655 58472.4
+640.33789 17099.7
+640.61407 563.9
+640.84058 3185.8
+649.29230 1790.5
+653.20715 986.2
+656.66339 729.3
+668.83289 733.5
+669.93127 590.0
+676.64752 776.8
+688.31030 3571.5
+689.31390 2275.0
+690.31787 905.6
+695.37622 20973.8
+695.87756 22745.1
+696.37927 10668.5
+696.88190 3865.3
+696.99475 629.1
+706.32147 49223.6
+707.32397 26112.7
+708.32404 9717.1
+709.32574 2079.0
+727.37238 7333.5
+728.37421 3619.8
+729.38171 1555.8
+764.30743 796.2
+765.32288 729.2
+780.21436 521.5
+790.88971 2718.6
+791.39294 4562.8
+791.89038 2794.4
+792.39648 772.4
+795.55817 973.4
+800.40625 679.1
+801.39435 3009.4
+802.39502 2104.2
+803.39850 758.2
+819.40521 68979.9
+820.40814 43656.1
+821.40912 17762.2
+822.40845 4398.8
+823.40863 814.2
+837.41693 2681.8
+838.41876 1623.8
+839.42780 736.5
+846.11566 570.8
+878.39093 606.4
+891.84534 572.8
+932.49408 1010.8
+933.50079 988.2
+957.16547 627.6
+1028.84485 669.3
+1140.50781 674.7
+1155.76208 583.8
+1198.14172 3391.8
+1447.94580 636.0
+1525.28821 841.0
+1877.61475 700.0
+1878.54248 803.6
+1879.20313 1746.2
+1879.53784 20164.4
+1879.95837 1436.1
+1880.28064 1172.2
+1884.01892 655.6
+1907.02808 7645.5
+1907.33899 616.8
+1930.43713 1054.7
+1932.18896 861.9
+S	1547	1547	410.9795746
+Z	4	1639.887
+102.42401 63094.6
+108.76150 52099.0
+113.45525 60098.7
+121.79766 253018.5
+121.81214 47507.2
+121.81567 60089.9
+126.47119 56312.6
+133.13527 113059.7
+134.45918 67657.1
+135.04820 61661.1
+136.96181 59943.7
+143.92979 44778.8
+157.98750 56934.6
+165.61014 51099.3
+165.78052 68468.5
+166.38942 50544.4
+177.10260 74818.3
+195.79890 56356.6
+198.88927 92891.8
+199.15887 80710.4
+199.17996 693969.1
+199.19032 70388.9
+199.22394 72826.0
+199.23001 64383.5
+199.23921 92479.6
+199.26436 210891.8
+199.27046 194169.8
+199.30833 61131.8
+199.37054 69469.9
+200.18361 65089.9
+221.12785 2955734.0
+222.13115 371993.6
+227.17467 167921.7
+233.16438 72278.5
+242.91534 52271.5
+249.12323 466971.3
+249.63896 61955.3
+250.12474 67425.1
+258.14993 1813739.5
+258.65149 289610.4
+271.69016 55364.8
+280.17029 63002.0
+284.44623 53827.7
+303.59494 60616.6
+312.93008 63055.7
+317.18417 75445.6
+326.51013 210105.1
+362.20529 204576.8
+364.18878 160638.3
+364.68906 78193.8
+380.23886 56110.2
+381.35114 61269.9
+388.53024 398711.1
+388.86499 129395.1
+426.22598 348278.4
+426.56033 176749.4
+426.89410 104241.1
+427.53076 73635.3
+437.21292 67314.4
+463.91971 4414675.0
+464.25385 2510811.5
+464.58774 735699.7
+464.92328 121995.0
+465.25931 66756.7
+475.29132 159386.3
+489.25986 299445.0
+489.76230 205133.8
+490.26257 71643.7
+512.94177 99179.4
+513.61658 73661.5
+532.54022 207224.8
+549.12836 96943.0
+553.28430 128627.8
+553.78412 134848.8
+562.29163 508896.1
+562.79108 214586.4
+563.29254 67478.9
+573.28607 99371.1
+581.56635 60608.3
+582.29181 6642907.0
+582.79309 4310216.0
+583.29468 1605682.5
+583.79761 303756.6
+630.37756 64226.6
+631.33435 52049.6
+638.83374 921771.9
+639.33569 734193.6
+639.83765 306718.3
+649.29224 281691.7
+650.29285 84397.3
+676.63922 76142.0
+727.37909 87371.7
+762.38116 156329.7
+763.38281 61781.0
+783.90051 50799.5
+845.31140 53890.4
+875.45740 126673.6
+876.46063 90980.1
+880.08594 57845.9
+944.57581 60282.1
+954.10028 59226.8
+989.99329 55441.1
+1009.05701 55299.5
+1051.04724 57708.8
+1080.16687 59111.3
+1116.30457 65702.8
+1198.20642 330850.4
+1215.77332 61943.2
+1285.42285 56371.8
+1380.79810 55734.2
+1463.73694 57275.8
+1530.64746 57414.3
+1650.53357 56581.5
+S	1549	1549	410.4733746
+Z	4	1637.8622
+102.10282 471.8
+103.39455 514.2
+105.57676 521.9
+106.25061 628.6
+107.43762 575.7
+108.72262 558.0
+112.59380 628.1
+120.23935 686.5
+120.70132 660.7
+121.79671 2564.7
+124.26617 534.3
+126.68431 745.4
+130.49501 544.8
+133.41850 604.3
+158.09621 836.3
+160.11189 695.2
+166.41516 554.6
+173.16396 583.6
+176.10663 2456.9
+176.48322 552.2
+177.10172 2107.8
+177.54420 520.9
+191.71002 508.3
+197.69209 565.6
+198.74014 552.8
+198.88878 812.9
+199.15994 535.1
+199.18015 25274.6
+199.22343 825.2
+199.24648 1526.6
+199.25871 1932.6
+199.26855 2030.2
+199.28267 967.3
+199.35947 664.2
+199.36636 927.8
+200.18362 3271.1
+203.11707 984.3
+213.64867 651.4
+220.78314 739.9
+221.12811 102081.9
+221.41376 506.7
+222.13148 15566.1
+226.15465 1283.2
+227.17526 6349.3
+228.17767 727.0
+233.16397 3648.7
+244.16408 691.5
+245.13507 659.0
+249.12300 16787.6
+249.14595 763.7
+249.63687 1929.6
+250.12665 2601.0
+251.14954 1443.8
+254.16159 2224.2
+255.10786 2164.9
+258.14996 49046.4
+258.65164 15453.4
+259.15302 2462.2
+261.15924 991.4
+272.09372 614.6
+272.13388 1094.4
+272.17075 1026.4
+276.71832 690.9
+279.01422 609.0
+285.92795 552.9
+293.57449 538.5
+308.89536 851.8
+310.74857 595.2
+317.18582 2238.3
+321.93475 526.4
+324.31531 734.6
+326.50974 7330.2
+326.84381 4597.6
+344.19662 912.4
+352.96823 590.1
+362.20673 8398.3
+363.21054 2925.0
+363.51926 900.0
+364.18961 9761.9
+364.69083 5120.8
+365.19470 1427.5
+369.18658 649.4
+384.95905 3037.0
+385.21088 683.6
+385.45877 1091.3
+387.19733 3184.8
+388.31265 612.3
+388.53085 12246.2
+388.86530 9541.8
+389.19855 3009.7
+420.82748 565.3
+421.22113 599.9
+426.22537 15312.6
+426.56018 15782.5
+426.89398 8186.6
+427.22797 2484.3
+432.67261 529.1
+432.71896 3400.6
+433.21933 1824.5
+437.21304 3949.4
+438.21661 1159.7
+447.29443 1005.0
+457.91495 1276.1
+458.25134 1633.7
+463.22974 1842.4
+463.92001 86216.9
+464.25409 82052.0
+464.58820 36325.1
+464.92230 13136.4
+465.25598 1834.1
+475.29034 4262.7
+476.29828 1153.0
+482.65451 790.3
+489.26062 12630.2
+489.76166 8812.3
+490.26270 2326.8
+509.95255 726.2
+511.77213 577.4
+512.94232 2845.5
+513.27728 3649.9
+513.61053 1691.5
+515.29175 2483.1
+516.29163 858.0
+518.24426 3999.3
+518.74493 3525.8
+519.24780 1328.5
+532.56677 1850.9
+532.73273 537.3
+544.77539 1346.3
+545.28058 935.7
+550.29810 1227.2
+553.28638 4083.2
+553.78448 6329.2
+554.28381 3481.8
+554.78345 1424.7
+562.29132 13118.3
+562.79297 8740.2
+563.29340 3558.4
+563.79639 712.3
+564.28052 1009.6
+572.72150 771.9
+573.28748 5790.9
+573.78937 4429.3
+574.28839 1708.6
+574.79266 692.0
+575.28479 1000.6
+579.44409 577.1
+580.81671 924.7
+581.07623 688.8
+581.30701 1311.6
+581.46960 663.6
+581.55029 963.7
+582.06647 820.4
+582.29211 270039.6
+582.79333 223259.3
+583.02393 1423.5
+583.29468 78645.5
+583.53271 1515.6
+583.79565 22640.5
+584.29114 4168.7
+592.27490 1222.1
+599.27551 755.9
+629.82581 1023.1
+631.32703 1811.3
+631.82922 1159.0
+638.83398 39375.5
+639.33521 37773.9
+639.83673 15561.4
+640.33875 4473.9
+640.84283 1214.5
+643.33716 1059.9
+649.29248 10516.6
+650.29431 4788.9
+651.29718 839.0
+663.38519 1196.9
+664.38196 1047.5
+676.62787 1204.5
+727.37189 7007.3
+728.37427 2987.2
+731.09991 1055.0
+762.37677 6115.6
+763.37982 2790.9
+764.32477 2409.7
+795.54474 862.2
+829.11694 620.7
+843.12561 678.1
+858.02045 737.8
+875.46136 5194.2
+876.46448 2958.2
+877.46234 1308.0
+965.61963 580.3
+981.82770 625.0
+993.97375 655.8
+1005.29077 625.1
+1057.22888 1014.0
+1198.26978 3077.2
+1235.58020 640.9
+1488.47632 527.0
+1488.57959 545.1
+S	1550	1550	529.2754396
+Z	4	2113.07046
+141.85199 645.3
+146.41956 590.0
+146.91333 595.8
+147.30344 686.3
+150.94925 547.0
+157.59476 625.5
+160.75597 595.0
+166.06572 655.6
+168.33633 679.8
+169.48720 689.4
+176.38239 549.6
+180.71931 543.6
+188.17810 616.7
+188.75146 582.6
+198.89078 946.8
+199.16747 949.6
+199.18913 687.6
+199.24269 839.9
+199.25340 1178.3
+199.26524 2190.2
+199.28070 1654.6
+199.37732 849.6
+199.41223 593.9
+201.48933 527.8
+205.78276 570.0
+209.46959 674.0
+210.37357 687.2
+213.58482 551.7
+214.50565 696.7
+218.26649 561.4
+221.12793 1004.4
+238.72020 543.0
+241.21451 506.8
+242.92764 573.4
+253.00438 501.6
+255.27760 761.6
+258.15036 1128.6
+259.75613 619.2
+263.08380 502.4
+271.73792 605.4
+286.08917 563.0
+332.01843 649.7
+339.66620 1249.8
+342.26160 663.6
+344.69757 546.5
+345.15961 663.0
+350.26941 742.0
+362.17209 656.4
+369.53531 621.4
+374.99539 560.7
+381.34091 683.0
+388.53046 1499.1
+388.86554 1166.7
+396.20789 2357.7
+396.71179 720.3
+400.26489 675.0
+408.71298 542.8
+410.20627 4690.9
+410.70660 1806.6
+411.20920 869.5
+426.22501 25088.8
+426.55960 21956.6
+426.89398 10450.9
+427.22784 2315.3
+427.52036 873.6
+433.22101 621.7
+458.20493 1375.0
+463.91895 4767.3
+464.25439 4033.6
+464.58817 2697.7
+466.74796 10097.7
+467.24988 5857.7
+467.75037 2449.2
+468.24985 893.4
+482.63416 785.9
+489.25983 4697.3
+489.76074 2792.2
+490.26285 1045.5
+490.76041 749.7
+495.25925 2914.2
+495.75891 715.9
+515.29327 756.5
+532.53601 1991.9
+541.24109 1465.7
+544.77930 1063.5
+545.26904 677.6
+545.88660 539.4
+549.12994 795.7
+549.54639 550.8
+553.78137 5079.7
+554.28143 3549.6
+554.78448 1534.2
+559.25299 3369.0
+560.25360 791.4
+573.18573 625.2
+573.28345 844.4
+573.78314 661.6
+578.33826 1016.8
+582.29187 93330.3
+582.79303 80630.6
+583.29474 33924.5
+583.79633 9614.0
+589.32782 805.8
+590.25671 579.2
+618.33423 3561.5
+618.66815 3252.1
+619.00134 2090.5
+619.33527 1338.8
+620.01215 2520.0
+620.34808 2751.1
+620.68030 1224.5
+629.83179 1101.8
+630.33490 1047.9
+638.83356 56752.2
+639.33484 55138.8
+639.83600 27651.6
+640.33698 8040.4
+649.29364 934.5
+653.21564 1075.0
+676.61780 870.3
+688.31042 1740.8
+689.31116 1510.4
+695.37646 10251.4
+695.87823 11694.8
+696.37793 5139.3
+696.88049 2102.9
+706.32117 26227.6
+707.32318 12785.2
+708.32410 4048.8
+709.32544 735.2
+712.43164 645.1
+725.66083 671.1
+727.37335 1869.4
+728.36871 675.3
+790.88922 1816.9
+791.39008 2664.2
+791.89709 1741.8
+795.54523 772.7
+801.38959 1833.7
+802.39606 995.9
+819.40491 38363.4
+820.40692 21971.5
+821.40826 9132.9
+822.40869 2043.5
+837.40942 870.9
+838.41620 931.6
+893.78625 667.8
+932.41455 560.2
+932.48059 677.4
+1095.77722 618.7
+1140.47839 547.2
+1160.67773 611.6
+1198.20044 3255.9
+1338.98657 567.4
+1367.38110 633.2
+1527.36975 607.9
+1536.67310 575.5
+1621.66125 587.8
+1876.83704 561.8
+1878.22449 704.8
+1878.79993 1288.4
+1879.48315 20172.9
+1880.19556 1058.3
+1907.01123 7712.8
+1930.50684 848.8
+S	1551	1551	410.9748246
+Z	4	1639.868
+108.17959 47502.3
+115.96946 54129.0
+117.05354 44652.1
+119.87676 47756.8
+121.73662 52790.1
+121.79626 219897.8
+126.09662 47380.0
+126.61634 44278.1
+127.12448 44077.9
+128.57755 55602.9
+137.64465 42915.7
+143.28175 48490.4
+147.85707 43457.3
+151.57576 50104.8
+170.65475 48564.7
+173.85045 50089.1
+175.76328 58649.9
+179.95970 56493.4
+182.78456 48611.7
+187.58395 46474.2
+188.13594 49444.7
+193.49213 57816.8
+199.15971 43263.2
+199.18022 333352.3
+199.22707 67930.3
+199.25813 137462.2
+199.27229 193068.5
+199.28062 98975.8
+199.35576 69997.6
+199.36966 83559.4
+199.37851 63130.0
+221.12775 1109589.6
+222.13083 115125.1
+227.17567 57665.4
+249.12265 120924.8
+258.14987 603569.7
+258.65179 123985.2
+306.16580 53023.4
+309.10800 49044.8
+326.50693 62127.0
+350.28143 75281.9
+362.20575 117581.4
+375.89008 44768.8
+381.85638 46994.1
+382.52914 51508.6
+388.53064 177579.2
+426.22629 130475.6
+426.55576 115087.7
+463.91949 1518255.9
+464.25400 734284.9
+464.58777 267888.7
+464.92355 101317.9
+476.76428 74800.1
+485.46591 47505.5
+489.26147 56400.8
+505.80872 48763.9
+510.16391 52582.6
+532.54285 146650.7
+549.15948 56757.5
+562.28937 164611.0
+562.78894 65120.7
+577.43781 50161.2
+582.29156 2272328.0
+582.79346 1373314.9
+583.29425 527081.2
+583.79193 107488.9
+630.41351 58468.8
+637.44867 48627.4
+638.83215 243992.3
+639.33563 163096.6
+649.29401 93604.9
+671.65131 45007.2
+674.83722 55706.1
+740.65924 49781.9
+811.65027 49283.8
+875.45935 72021.9
+1019.73413 55130.7
+1057.22900 51775.7
+1164.01013 53918.0
+1188.31262 61332.9
+1198.21887 296993.5
+1308.88147 53487.2
+1339.23389 54986.7
+1525.41602 87513.1
+S	1553	1553	410.4785946
+Z	4	1637.88308
+105.96205 531.3
+107.98975 578.2
+110.96270 551.8
+121.79752 2724.3
+121.81374 555.3
+122.69962 654.5
+128.56990 589.2
+138.68301 657.4
+138.78409 601.9
+144.31339 556.8
+146.91783 621.3
+147.60475 622.2
+148.45386 556.7
+149.21555 581.1
+157.59846 649.4
+158.09624 1727.4
+160.11075 901.1
+165.23096 543.3
+165.78003 905.4
+170.27271 562.2
+170.80865 700.3
+172.47318 565.4
+176.10703 2712.9
+177.10222 4352.3
+191.14648 585.6
+198.88676 752.1
+199.18042 32525.1
+199.19168 615.5
+199.23282 685.2
+199.24512 860.8
+199.25925 970.7
+199.26947 2625.1
+199.28262 686.3
+199.29378 704.5
+199.36810 981.3
+199.72992 582.6
+200.18373 4475.4
+200.63638 1208.8
+203.11761 1641.5
+204.12093 691.4
+213.08661 698.8
+221.12846 124911.5
+222.13179 21434.6
+223.13510 1523.6
+226.15514 1331.8
+227.17542 6713.8
+228.17767 767.4
+233.16490 3900.0
+234.16974 694.4
+244.16531 884.8
+247.40657 613.8
+249.12341 20502.0
+249.63708 2172.1
+250.12701 3480.1
+251.15004 2090.9
+254.16101 3354.0
+255.10890 2229.1
+255.16397 640.0
+258.15042 59686.5
+258.65201 17394.3
+259.15311 3124.6
+261.15979 723.1
+271.58249 697.6
+272.13519 2280.5
+272.17194 1959.1
+273.13605 597.2
+317.18607 2555.0
+318.68787 521.0
+326.51019 4215.0
+326.84485 3446.2
+327.17847 1496.2
+344.19678 1512.0
+348.19287 804.0
+362.20740 10753.2
+363.21072 2645.0
+363.85886 650.0
+364.19025 11579.5
+364.69180 5385.2
+365.19119 885.7
+368.93137 623.9
+369.18750 752.7
+380.18948 610.6
+381.34592 742.7
+384.96088 2350.2
+385.21030 2762.1
+385.46155 1571.6
+387.19910 3827.3
+388.20059 948.2
+388.53131 14623.1
+388.86557 10573.8
+389.19974 4995.6
+389.53558 1046.7
+426.22598 20560.9
+426.56039 17666.2
+426.89462 9904.1
+427.22916 2324.8
+432.71967 4561.5
+433.22052 2101.8
+433.72617 834.0
+437.21411 5599.3
+438.21799 1707.1
+447.29544 1206.6
+457.91693 1296.4
+458.24893 735.3
+463.22943 2550.2
+463.92068 97263.8
+464.25482 96735.5
+464.28964 605.6
+464.58893 51304.5
+464.92331 18858.6
+465.25815 2368.4
+475.29160 3977.7
+476.29248 1413.8
+476.75970 722.1
+483.50360 541.3
+489.26111 13981.4
+489.76242 12192.0
+490.26468 5336.2
+490.76682 1179.0
+501.24753 573.0
+512.94342 4053.9
+513.27771 4884.5
+513.61151 1462.7
+515.29315 3287.6
+516.28754 881.9
+517.23834 743.0
+518.24622 5007.9
+518.74640 5061.3
+519.24896 2025.4
+532.50745 2343.8
+544.77679 1472.0
+545.27795 1974.2
+549.14551 783.9
+550.29950 1344.3
+551.30170 708.4
+553.28577 4600.6
+553.78436 6409.0
+554.28479 4710.4
+554.78534 1133.8
+562.29230 14400.9
+562.79358 12394.3
+563.29572 6194.5
+563.79596 1453.3
+564.78186 829.3
+573.28760 6688.9
+573.78973 7731.4
+574.28839 2549.1
+574.78967 1788.4
+575.28656 911.4
+578.25714 696.7
+580.81696 1323.1
+581.32336 1443.0
+581.56287 1250.9
+581.79590 740.1
+582.29297 307180.9
+582.37207 773.2
+582.70673 816.1
+582.72211 791.9
+582.79425 275799.6
+583.03491 1800.4
+583.29547 119192.9
+583.52661 2026.2
+583.62402 764.6
+583.79620 39151.9
+584.02576 1372.9
+584.29663 7912.1
+584.79065 1717.9
+590.04041 618.3
+592.27441 841.1
+592.30774 544.3
+599.27649 694.1
+619.81250 622.5
+629.82788 912.1
+630.33191 1151.8
+630.39063 742.2
+631.32971 2233.6
+631.82971 727.3
+632.33167 934.8
+638.83472 48160.2
+639.33612 51775.9
+639.83728 23610.2
+640.33881 7285.3
+640.60205 745.3
+640.83966 1643.2
+643.33850 1302.0
+649.29309 12517.7
+650.29559 5220.0
+651.29913 1255.3
+661.35510 850.6
+662.35986 854.6
+663.38495 1601.3
+664.37897 1474.0
+676.66211 792.0
+727.37341 10000.0
+728.37531 5047.2
+729.37579 1255.2
+762.37708 7165.2
+763.38147 4282.1
+764.31934 2204.5
+764.38458 1001.7
+765.32123 842.8
+795.54517 878.7
+803.12274 606.7
+826.24335 841.9
+850.50128 631.2
+875.46045 5370.0
+876.46423 3825.8
+877.46210 1231.0
+911.20203 567.6
+917.88971 710.9
+1057.28259 816.3
+1095.81091 640.2
+1179.13892 675.4
+1198.13794 2974.8
+1264.51672 586.5
+1397.60156 600.1
+1525.40576 956.4
+1525.55981 517.1
+1534.48376 796.1
+1648.70667 617.0
+S	1554	1554	529.2819071
+Z	4	2113.09633
+140.38852 703.6
+147.48544 556.5
+153.05293 680.3
+157.60201 918.2
+160.72903 588.6
+164.58372 536.9
+172.88393 532.6
+197.69624 739.0
+198.88811 995.0
+199.16351 927.1
+199.22026 763.1
+199.25281 1907.4
+199.26245 2726.1
+199.35075 858.8
+199.36154 771.8
+207.20998 555.9
+214.36375 590.0
+219.61638 583.5
+226.56783 537.7
+233.16565 688.3
+255.28972 687.8
+258.15002 2944.0
+272.13803 619.3
+291.70465 568.2
+308.89902 700.1
+330.11166 659.1
+339.66611 1523.5
+340.16824 1542.6
+342.26947 914.0
+344.66016 1192.2
+349.19690 542.6
+351.68597 734.2
+353.66455 817.3
+358.36642 606.0
+369.04807 533.7
+381.35687 1031.3
+387.32047 547.7
+387.66913 582.1
+388.52997 2994.4
+388.86545 3839.4
+389.19922 1768.9
+396.20905 5372.6
+396.71085 3004.9
+397.21335 897.1
+400.26611 2322.3
+401.69662 689.3
+410.20645 6441.2
+410.70752 3906.5
+411.20636 1126.6
+411.70453 1035.7
+413.68152 762.8
+420.55539 1313.0
+422.76709 598.7
+426.22546 40602.9
+426.55981 42168.7
+426.89407 20671.4
+427.22812 5512.7
+427.54013 777.6
+432.71927 1766.9
+433.22156 1259.3
+437.21445 2251.8
+451.29944 611.6
+457.74240 656.7
+458.20587 1764.1
+463.18942 609.9
+463.92007 9521.9
+464.25455 7900.6
+464.58963 3161.8
+464.92279 1184.4
+466.74847 13984.0
+467.24982 10654.6
+467.75137 2746.5
+475.29300 523.5
+475.74985 920.7
+481.26187 936.6
+489.26065 8443.2
+489.76276 5828.9
+490.05624 598.7
+490.26376 2502.7
+495.25848 3423.0
+495.76031 1940.4
+496.26172 792.9
+515.29175 2312.7
+532.49268 1492.4
+541.24261 3498.5
+542.25146 1420.0
+544.77625 2365.4
+545.27942 1811.3
+553.78168 8276.8
+554.28271 7439.3
+554.78577 3159.0
+559.25348 5426.5
+560.25842 1956.4
+573.28796 1821.1
+573.78772 2138.7
+574.28442 847.4
+574.78632 1275.0
+575.28711 1863.2
+580.81921 1165.7
+581.31445 599.4
+582.05316 918.8
+582.29248 178020.0
+582.79376 162467.9
+583.02441 804.7
+583.29498 66416.5
+583.53156 639.8
+583.79657 18388.6
+584.29602 2735.5
+589.32239 758.1
+599.27850 1010.4
+604.95819 517.7
+612.34149 652.8
+612.66656 991.7
+612.99561 691.3
+618.33197 5182.1
+618.66888 7777.4
+618.80383 813.4
+619.00281 5454.3
+619.33661 2152.8
+619.66779 920.3
+629.83044 1249.0
+630.33282 2168.8
+630.82141 858.4
+638.83423 102911.4
+639.33545 109163.4
+639.67548 976.7
+639.83661 49916.5
+640.33789 14918.4
+640.83575 2431.1
+641.03467 785.6
+649.29523 1007.6
+651.03156 614.7
+653.19147 1333.2
+676.63641 913.6
+685.35138 718.1
+688.31183 4866.2
+689.31403 2475.3
+695.37665 19007.3
+695.87799 19840.7
+696.37939 10638.3
+696.88007 3134.2
+705.34528 747.8
+706.32178 41953.2
+707.32428 24423.3
+708.32422 8808.1
+709.32300 2236.4
+724.32666 724.6
+727.37170 6313.6
+728.37427 3082.7
+729.38177 876.2
+790.88855 2496.2
+791.39227 3642.9
+791.89539 2329.2
+792.38678 613.6
+795.54913 1109.9
+800.64813 653.4
+801.39520 3464.1
+802.39807 2135.3
+819.40540 62834.4
+820.40814 44214.0
+821.40887 15842.1
+821.87646 587.5
+822.40936 3860.4
+823.41107 844.8
+837.41498 1979.1
+838.41797 1442.6
+896.02130 550.5
+932.49036 1452.2
+1174.28076 574.8
+1187.88745 787.3
+1198.09229 3401.0
+1335.50598 567.7
+1411.41467 590.4
+1620.97900 667.6
+1657.85632 702.1
+1777.43726 919.1
+1876.27295 601.3
+1878.97522 1992.0
+1879.50647 20154.2
+1880.04041 1720.1
+1907.05017 7771.9
+1930.61316 704.7
+1932.24915 759.4
+S	1555	1555	410.9800746
+Z	4	1639.889
+101.52908 584.3
+102.14073 538.2
+113.46536 609.6
+115.88783 504.1
+117.18159 534.3
+120.66828 631.4
+121.14098 547.4
+121.79573 2619.8
+124.91155 548.2
+128.57845 606.4
+128.63112 479.4
+137.29294 654.3
+143.51729 648.1
+144.21100 702.8
+146.92543 607.5
+147.87630 546.3
+156.85156 504.6
+158.09581 1473.4
+158.15396 527.5
+161.03978 696.0
+165.77701 621.2
+169.44524 585.4
+169.49837 699.5
+173.35593 559.5
+176.10652 3009.4
+177.10214 3740.5
+178.72762 581.3
+182.62579 691.0
+183.52072 594.7
+184.04234 630.6
+198.88423 739.2
+199.18042 33979.1
+199.23083 774.1
+199.27220 2636.6
+199.28546 775.2
+199.36818 1349.5
+199.39955 763.7
+200.18350 4177.2
+200.63680 1510.5
+201.13821 660.7
+202.86049 544.8
+203.11780 1923.2
+214.99527 592.5
+221.12828 129529.5
+221.41533 671.0
+222.13162 19204.0
+223.13519 1415.0
+224.20598 535.9
+226.15517 1435.8
+227.15555 598.6
+227.17531 8144.1
+228.17926 863.9
+233.16478 5504.4
+244.16463 1337.2
+249.12312 19954.9
+249.63806 2827.3
+250.12694 3138.8
+251.15031 1671.0
+252.63596 578.6
+254.16049 3070.0
+255.10831 1622.0
+258.15018 63672.7
+258.65173 16250.1
+259.15311 3579.9
+265.03683 706.3
+272.13544 2227.8
+272.17209 1325.4
+280.18823 740.4
+281.62549 523.9
+282.61377 639.1
+283.34167 567.5
+291.46060 569.9
+308.90958 707.7
+317.18710 2026.4
+326.51001 7157.8
+326.84402 3828.5
+327.17877 1126.9
+342.27704 991.4
+344.19702 814.3
+350.27698 835.9
+359.06021 575.0
+362.20743 11242.2
+363.21130 2747.6
+363.52231 902.8
+363.85379 862.1
+364.18991 11173.8
+364.69171 4893.1
+379.66080 682.7
+381.37192 624.5
+384.95917 2206.2
+385.21054 2248.9
+385.46289 1259.4
+387.19806 4720.2
+388.53128 17469.7
+388.86526 12034.9
+389.19968 5320.1
+389.53421 1737.7
+416.50043 688.4
+426.22562 25601.4
+426.56015 22730.5
+426.89407 7911.8
+427.22913 2612.2
+427.55563 1127.9
+427.95782 633.2
+432.23560 571.4
+432.71918 2952.5
+433.21701 1217.9
+437.21359 3782.7
+438.22034 839.9
+447.29587 1515.8
+457.91772 1229.7
+458.25089 1484.2
+463.20001 889.3
+463.22867 1631.0
+463.92032 115646.4
+464.25443 117829.3
+464.58838 53910.8
+464.92279 20072.7
+464.97372 560.1
+465.25650 4255.2
+465.31512 612.5
+466.73416 1002.1
+475.29037 5203.4
+476.29282 2269.6
+476.76157 721.2
+482.66580 633.9
+484.22784 549.2
+489.26068 16269.7
+489.76181 10276.6
+490.26291 3068.3
+504.22913 690.8
+512.94391 3590.1
+513.27802 3812.3
+513.61133 1617.2
+515.29163 2482.9
+518.24500 5129.3
+518.74670 4584.5
+532.48712 1738.8
+544.77576 2770.2
+545.27942 892.4
+546.61963 599.5
+549.17096 813.5
+550.29865 1055.7
+553.28796 3710.3
+553.78369 6903.2
+554.28442 4858.0
+554.78644 791.7
+562.29156 16567.9
+562.79340 11406.4
+563.29437 5828.6
+563.79443 1160.3
+563.95135 695.0
+564.77527 649.8
+573.28741 6979.4
+573.78888 6434.2
+574.28918 1914.7
+574.78699 1315.5
+575.28766 1590.4
+580.58209 841.8
+580.70245 756.9
+580.81000 1216.7
+581.06781 955.0
+581.31122 1528.3
+581.45740 682.1
+581.55865 1331.3
+582.05341 881.1
+582.29242 339417.0
+582.36078 706.3
+582.79364 261934.9
+583.02917 1672.5
+583.29492 114394.8
+583.52887 1718.9
+583.67645 662.1
+583.69330 657.6
+583.79541 27808.0
+584.01837 695.3
+584.29517 5263.4
+584.51715 699.4
+584.75391 822.8
+584.79828 782.5
+592.26660 1328.3
+629.83032 1573.5
+630.33215 1139.0
+630.42169 832.3
+631.32910 2236.4
+631.82623 1047.0
+638.83411 50917.9
+639.33539 45811.6
+639.83673 18443.1
+640.33789 6306.0
+643.34100 1225.9
+643.82623 761.9
+649.29254 12739.8
+650.29376 4519.2
+651.30090 1737.1
+661.36084 947.3
+663.38000 1383.3
+672.87524 615.5
+676.75378 676.4
+695.88159 703.8
+727.37262 6937.3
+728.37164 3151.2
+731.13501 917.5
+745.71008 661.6
+762.37659 7852.9
+763.37799 4420.5
+764.32312 2019.3
+765.32611 1012.5
+795.52997 980.5
+875.46027 6515.8
+876.46503 4464.7
+877.46686 1373.5
+909.39905 637.7
+930.56293 675.1
+1021.22699 569.0
+1181.53198 608.0
+1198.09229 3285.8
+1201.19348 594.3
+1411.69299 568.7
+1471.84253 631.4
+1525.48413 599.9
+S	1557	1557	410.4786846
+Z	4	1637.88344
+102.10498 512.0
+106.98145 493.3
+114.38197 515.7
+115.27786 508.8
+118.11813 542.6
+119.78579 537.6
+120.87080 615.8
+121.79545 2655.2
+127.27012 546.3
+128.58060 768.8
+141.85025 649.8
+147.80342 546.0
+152.32603 589.6
+157.61024 655.8
+158.09602 1904.8
+160.11160 849.5
+161.92368 515.3
+163.34236 591.9
+165.63858 498.1
+165.77744 793.1
+169.50076 610.3
+171.63887 649.3
+176.10669 2750.5
+177.04691 617.9
+177.10191 3611.6
+179.38074 536.7
+196.14420 676.3
+197.70490 664.8
+198.89064 811.1
+199.18022 28586.5
+199.22073 671.1
+199.25296 1824.9
+199.26225 1580.7
+199.27411 2292.5
+199.37166 714.1
+199.38049 575.8
+200.18365 3741.5
+200.63638 999.1
+203.02188 515.7
+203.11787 1858.4
+204.77568 600.0
+214.52348 535.2
+221.12823 118881.0
+222.13156 20292.5
+222.67787 538.1
+223.13477 868.6
+225.15265 534.7
+226.15495 1466.9
+227.17523 6398.5
+228.17926 877.4
+229.65160 622.4
+233.16458 4500.6
+234.16724 698.6
+244.16638 962.9
+245.33026 557.6
+249.12318 19497.7
+249.14401 1283.6
+249.63698 1979.6
+250.12650 2712.2
+251.14983 2010.1
+253.36230 737.4
+254.16090 2421.8
+255.10834 1940.6
+258.15018 55313.8
+258.65182 17843.9
+259.15338 1828.0
+271.29004 643.7
+272.13495 1456.0
+272.17075 974.5
+278.16370 594.5
+280.18933 622.4
+311.89255 684.0
+317.18475 2216.6
+325.23169 572.7
+326.51038 4694.0
+326.84363 4650.2
+330.55026 579.2
+344.19540 1141.1
+349.39908 541.2
+352.65955 606.2
+361.47681 653.0
+362.20724 9573.5
+363.21033 2796.0
+364.19003 12395.8
+364.69101 4725.8
+365.19302 944.8
+381.37271 695.1
+384.95810 2202.9
+385.21014 2134.4
+385.45798 872.1
+387.19830 2446.2
+388.20102 908.4
+388.53116 11933.3
+388.86539 8367.2
+389.19943 5200.8
+421.22144 606.8
+423.71036 893.8
+426.22559 18818.4
+426.56009 16509.5
+426.89444 7402.7
+427.22964 1882.9
+432.71832 3116.3
+433.22025 1886.1
+437.21301 4658.7
+438.21851 601.6
+438.23581 675.7
+447.29642 1339.9
+457.91238 649.6
+458.24792 676.9
+463.22849 1987.4
+463.39871 764.3
+463.92032 96455.2
+464.25449 92288.3
+464.58853 46070.2
+464.92261 15157.9
+465.25806 1289.9
+466.73099 1003.3
+475.29062 3707.7
+476.29221 856.6
+489.26096 15432.9
+489.76205 10420.6
+490.26389 3868.4
+490.76505 852.1
+503.75812 620.3
+512.94281 2993.0
+513.27649 4282.7
+513.61261 1422.9
+513.94427 740.5
+514.28363 672.5
+515.29303 2530.8
+516.29602 1062.5
+518.24463 5509.2
+518.74670 4097.4
+519.25128 1442.3
+532.31238 728.6
+532.50958 1908.0
+542.00500 650.0
+544.77673 978.1
+545.27643 1395.5
+550.29852 1534.3
+553.28485 2828.2
+553.78369 6635.7
+554.28442 4058.7
+554.78168 1164.8
+562.29187 14242.4
+562.79315 11640.2
+563.29456 3307.9
+563.80170 884.1
+564.78229 948.9
+573.28802 8237.1
+573.78857 5824.9
+574.29095 1652.1
+574.78662 1919.6
+575.28778 820.0
+580.80859 778.6
+581.29736 879.3
+581.55573 773.9
+581.80219 785.0
+582.05792 1204.2
+582.29242 306956.6
+582.36328 731.0
+582.55798 755.0
+582.79370 258249.7
+582.91302 673.4
+583.02313 1741.6
+583.29486 103498.5
+583.51587 1065.8
+583.79590 27054.8
+584.29364 3274.1
+584.79773 625.5
+590.01685 676.8
+623.50958 618.9
+630.32990 1379.3
+630.42706 758.5
+631.32928 1147.9
+631.83490 982.4
+638.83429 46650.9
+639.33557 43840.2
+639.83685 20484.8
+640.33838 7394.9
+643.34668 684.5
+643.82568 940.7
+649.29279 11291.8
+650.29529 5506.4
+650.64972 598.2
+661.35590 1247.6
+663.38416 1319.5
+727.37280 8084.6
+728.37457 4792.4
+729.38226 1125.6
+731.15491 926.7
+762.37714 6521.2
+763.38049 2794.0
+764.32098 2408.3
+795.55206 874.6
+802.13239 857.1
+814.81403 625.2
+875.46130 5109.8
+876.46448 3410.3
+877.45142 1344.0
+878.41248 691.4
+1150.36279 685.2
+1154.82263 661.6
+1198.14221 3494.4
+1525.48267 757.8
+1581.68640 636.8
+1638.77295 649.0
+S	1558	1558	529.2820921
+Z	4	2113.09707
+136.71645 799.6
+136.74979 482.7
+142.61778 756.1
+155.19096 556.8
+165.77849 595.6
+170.65498 566.3
+173.93793 589.2
+176.31017 524.9
+182.76425 664.4
+198.88791 1182.2
+199.18375 925.9
+199.23035 650.9
+199.23575 770.7
+199.24808 912.9
+199.26192 1875.1
+199.26993 2213.3
+199.28241 1032.0
+199.36061 827.6
+199.36894 842.7
+203.30835 534.5
+214.50096 783.7
+221.12769 1141.9
+258.14975 2507.5
+266.76501 541.6
+324.35291 533.3
+339.66565 1397.4
+342.24518 625.9
+348.05054 534.8
+350.09671 678.4
+364.69031 662.0
+367.59457 578.9
+388.53091 1838.8
+388.86530 1883.1
+396.20944 3888.4
+396.71060 1678.8
+410.20670 3873.5
+410.70737 1898.5
+412.21973 649.1
+426.22522 26676.1
+426.55981 19992.4
+426.74231 564.0
+426.89407 11059.6
+427.22729 2509.8
+427.51196 742.8
+437.21298 1211.2
+443.17700 591.9
+447.09586 538.5
+452.75058 776.3
+458.20721 1374.8
+463.91998 7326.2
+464.25415 4686.4
+464.58755 1298.5
+466.74792 10312.4
+467.25000 6132.6
+467.75208 2018.0
+468.40710 589.2
+489.26056 4111.1
+489.76154 4130.9
+490.26035 1211.7
+495.25842 1652.0
+495.75980 1114.7
+501.24210 817.5
+505.60129 576.8
+515.29260 990.3
+532.51288 1790.1
+541.23993 1752.4
+549.11511 708.2
+553.78052 5432.4
+554.28326 3904.9
+554.78467 1459.8
+559.25317 2523.3
+560.25696 908.1
+573.28809 1429.5
+580.79504 567.5
+582.29205 99367.0
+582.65125 2196.5
+582.79340 74764.0
+582.99176 783.6
+583.29468 29417.7
+583.79633 6516.7
+584.30072 1213.1
+599.28076 669.2
+618.33362 4435.9
+618.55249 1155.9
+618.66797 4144.8
+618.80212 1256.0
+619.00342 2894.7
+619.33600 1882.4
+620.01276 4748.7
+620.34680 6070.2
+620.68170 2486.6
+629.82495 949.9
+638.83392 58710.1
+639.33514 52453.7
+639.83636 24550.8
+640.33820 5829.3
+653.22009 1246.7
+688.31213 2129.3
+689.32013 1227.8
+695.37573 14067.2
+695.87665 9457.0
+696.37885 4857.4
+704.90387 694.9
+706.32129 24409.3
+707.32440 11103.8
+708.32709 4344.9
+709.32062 883.0
+727.37073 1891.0
+783.35919 617.3
+790.88977 1985.1
+791.39111 2126.6
+791.89319 1609.8
+795.54138 1075.0
+801.40186 963.0
+819.40491 38118.5
+820.40735 20721.6
+821.40997 7934.5
+822.40973 2070.9
+837.41388 692.9
+857.19275 572.5
+932.48682 820.7
+1019.71667 976.0
+1048.13000 659.3
+1113.45422 587.3
+1122.43372 683.4
+1152.79675 634.6
+1188.03137 1023.1
+1198.15039 3597.3
+1241.01953 613.3
+1298.88147 566.4
+1335.19153 780.4
+1346.49548 575.3
+1473.47742 606.6
+1696.29956 651.1
+1777.64478 869.6
+1849.00891 557.6
+1876.96179 724.2
+1877.69885 781.5
+1879.11365 966.5
+1879.54968 19787.6
+1880.02625 799.6
+1880.26575 832.2
+1907.07300 7294.5
+1930.44299 904.9
+S	1559	1559	410.9800746
+Z	4	1639.889
+103.28092 740.9
+105.47176 613.2
+109.35537 547.1
+114.95815 544.4
+115.48037 534.2
+116.95441 572.3
+117.49976 582.2
+121.79169 685.9
+121.79603 2387.3
+124.59356 581.1
+125.06109 573.8
+126.56134 562.8
+127.74970 553.8
+129.45160 558.6
+142.35091 740.8
+146.59947 572.3
+158.07718 553.6
+158.09579 2093.8
+159.34418 692.9
+160.11185 970.5
+167.16681 554.4
+171.63748 501.5
+174.48924 588.4
+176.10678 3933.4
+177.10196 4145.1
+183.61241 600.3
+187.70219 576.7
+198.87247 588.5
+199.18037 38968.3
+199.27052 2792.9
+199.28932 583.4
+199.36824 838.1
+200.18352 4365.1
+200.63670 1683.9
+201.94467 553.0
+203.11913 1192.7
+207.78011 607.4
+213.08748 820.7
+215.87923 629.1
+220.78210 710.9
+221.12837 144007.9
+221.30118 923.7
+221.47641 948.8
+222.13165 21190.9
+223.13499 1155.3
+226.15547 1420.2
+227.17528 8251.3
+232.72079 595.9
+233.16487 6219.4
+244.16541 1342.2
+249.12329 23278.2
+249.14442 829.1
+249.32323 595.8
+249.63802 1704.4
+250.12674 3081.8
+251.14995 2961.2
+252.15347 744.6
+254.16109 3138.2
+255.10832 2215.2
+255.28094 628.4
+258.15030 71741.6
+258.65204 18633.5
+259.15372 2491.5
+261.16080 917.5
+261.45947 675.4
+272.13480 2225.2
+272.17136 1571.6
+284.19669 737.4
+288.30106 686.3
+308.89291 791.6
+308.89780 780.4
+317.18607 3146.0
+326.51025 9150.4
+326.84476 3865.4
+337.98785 522.2
+344.19659 2223.0
+350.14114 636.6
+350.27640 739.7
+355.18240 746.6
+358.65729 560.2
+362.20755 12477.6
+363.21130 2615.8
+364.18997 15357.5
+364.69196 5505.2
+365.19223 765.8
+369.18774 1196.4
+376.52411 778.7
+384.30374 564.8
+384.95938 3032.5
+385.21036 2677.5
+385.46179 1362.7
+387.19833 4658.7
+388.53128 22521.0
+388.86557 12461.3
+389.19971 4340.3
+389.53375 810.0
+391.78488 610.2
+420.22424 673.7
+421.55392 691.6
+421.77890 582.2
+422.10370 539.5
+423.71396 663.2
+426.22592 32845.5
+426.56046 25392.4
+426.89456 9936.4
+427.22910 2936.9
+427.49908 730.3
+427.56186 916.6
+429.25018 567.9
+432.71948 5129.8
+433.22092 2761.4
+437.21405 4652.3
+438.23190 1460.5
+447.29788 1685.8
+457.27939 946.0
+457.91684 3828.3
+458.25287 759.6
+458.28915 607.6
+462.86758 893.9
+463.23026 1847.7
+463.92065 147975.5
+464.25467 119521.2
+464.44040 661.9
+464.58878 51001.7
+464.92303 14280.0
+465.11832 574.2
+465.25812 2265.4
+466.73050 846.8
+467.23715 1058.2
+469.87442 778.4
+475.29132 5076.6
+476.28979 1146.4
+483.14758 717.8
+489.26089 22980.6
+489.76257 12560.5
+490.26495 2405.3
+493.61472 587.4
+512.94165 4720.6
+513.27740 4530.0
+513.61273 2337.2
+515.29230 4012.4
+516.27924 1106.7
+517.29492 592.2
+518.24487 8020.2
+518.74750 4066.0
+519.24799 1296.6
+532.54651 1857.3
+535.28314 631.7
+537.51758 677.5
+544.77661 2175.8
+544.88831 566.1
+545.27802 1808.5
+549.12714 751.5
+550.29749 1538.1
+553.28632 6225.1
+553.78436 8294.4
+554.28528 4230.6
+554.78601 1376.2
+562.29193 22465.1
+562.79388 11566.3
+563.29492 4446.6
+563.79108 1077.6
+564.28711 1014.1
+564.78009 1060.4
+573.28845 10100.6
+573.78918 6399.5
+574.28986 2074.3
+574.79150 1179.4
+575.29010 1113.1
+580.57306 678.0
+580.81183 2220.3
+580.98993 720.9
+581.06897 702.8
+581.31287 1021.2
+581.56134 2231.7
+582.06116 1853.5
+582.20557 1016.3
+582.22937 1403.1
+582.29279 454654.5
+582.36481 1106.4
+582.57922 945.5
+582.79401 284999.6
+583.03125 2596.0
+583.29529 101622.4
+583.52557 2937.3
+583.60541 1036.9
+583.79596 26300.4
+584.29584 6049.9
+584.79327 1156.2
+592.27264 932.9
+594.01355 691.6
+599.27533 640.1
+629.82916 1989.9
+630.32190 1219.8
+630.38062 830.7
+631.32996 3378.4
+631.83051 2102.4
+638.83447 70933.8
+639.33575 49655.5
+639.83716 20528.3
+640.33862 4083.2
+640.84106 688.5
+643.34656 1578.2
+643.82623 1202.3
+644.82806 586.6
+649.29291 16246.9
+650.29651 5654.3
+651.29669 1142.8
+661.35559 1837.3
+663.38385 1770.3
+676.63666 820.3
+706.31476 880.4
+727.37213 11428.5
+728.37390 4032.8
+762.37714 10941.5
+763.38159 3925.1
+764.32129 3035.7
+765.32739 976.5
+777.54950 554.0
+795.55743 992.2
+875.46216 9437.7
+876.46429 3862.7
+877.46460 860.3
+945.25671 674.8
+978.99609 562.7
+987.38043 675.6
+1020.42413 570.5
+1055.97717 612.1
+1057.23950 1125.3
+1105.67419 671.6
+1116.98657 575.2
+1143.38623 640.5
+1188.12427 636.6
+1195.11975 674.6
+1198.22302 3174.3
+1295.89441 565.2
+1339.83923 562.7
+1408.48047 595.9
+S	1561	1561	410.4742596
+Z	4	1637.86574
+100.28772 519.8
+102.84418 549.7
+102.84669 518.7
+113.24860 631.4
+119.19262 591.0
+121.79597 2440.4
+142.86046 642.8
+158.09587 1810.4
+168.04594 577.4
+172.43567 638.5
+176.10648 3271.9
+177.10190 3183.9
+178.10583 927.7
+183.10899 576.1
+187.75511 562.0
+194.10481 586.5
+198.88518 1034.4
+199.16199 1051.1
+199.18021 30003.6
+199.26071 3557.0
+199.35789 1208.3
+200.18347 3663.6
+200.63701 1194.9
+203.11778 1547.6
+215.78680 592.6
+221.12813 120874.5
+221.29926 864.9
+222.13147 19568.8
+223.13551 1066.9
+226.15421 1942.6
+227.17491 5297.2
+231.11261 793.2
+233.16452 4819.5
+244.16510 1487.0
+246.20995 582.5
+249.12306 19950.1
+249.63747 2101.7
+250.12663 2878.3
+251.15004 3249.5
+253.85803 657.2
+254.16049 2250.1
+255.10889 2176.6
+258.14999 53562.3
+258.65167 16438.7
+259.15234 2267.5
+261.58151 523.8
+272.13477 1895.0
+272.17145 1344.5
+282.15363 653.1
+308.89230 640.6
+311.19693 579.3
+312.63187 640.2
+317.18491 3088.2
+326.50998 6495.6
+326.84396 3551.4
+327.17813 2046.9
+342.26898 781.7
+344.19540 1617.8
+362.20700 9697.8
+363.20944 2490.1
+363.70358 637.2
+364.18970 11041.6
+364.21466 504.1
+364.69098 5599.5
+365.18979 884.9
+369.18735 752.7
+375.77499 565.6
+376.52328 737.9
+382.52792 892.4
+384.95859 1607.6
+385.20966 2590.3
+385.46136 694.8
+386.94388 751.0
+387.19778 2623.7
+388.53110 14060.1
+388.86545 13327.5
+389.19919 2783.4
+389.53549 1593.8
+425.90857 608.3
+426.22519 20382.6
+426.55984 16919.4
+426.89325 6288.8
+427.22852 2159.5
+427.55524 689.6
+432.71838 4512.3
+433.21945 1945.9
+433.24521 557.7
+437.21295 4733.4
+438.21848 1251.8
+447.29846 914.0
+457.91635 898.2
+458.25287 916.7
+463.22879 1711.9
+463.92004 101921.1
+464.05466 594.0
+464.25415 87458.0
+464.58838 45233.7
+464.92255 16329.2
+464.98044 833.5
+465.25650 2623.9
+466.73270 983.1
+467.23291 1098.9
+469.87338 855.1
+475.29037 4321.8
+476.76276 880.5
+489.26047 18234.5
+489.76212 11590.2
+490.26474 3574.2
+490.76413 761.4
+495.48810 627.6
+512.94299 2725.2
+513.27612 3486.3
+513.60718 1000.0
+515.29108 3599.3
+516.29144 1310.2
+518.24481 6501.1
+518.74622 3973.1
+519.24609 1640.5
+532.53284 2276.3
+544.77820 1777.8
+545.27777 1655.5
+550.29578 1225.2
+553.28601 4616.0
+553.78473 6832.3
+554.28564 4401.9
+554.78662 1151.0
+562.29163 13447.2
+562.79309 9499.3
+563.29425 3595.2
+564.28009 1202.1
+564.78259 1165.2
+573.28705 6483.0
+573.78851 6224.9
+574.28619 1524.7
+574.78601 2111.3
+575.78943 780.2
+580.81390 1533.5
+581.06177 593.7
+581.30988 1103.2
+581.56171 1358.4
+581.80597 801.9
+582.05396 1679.1
+582.22736 1205.7
+582.29218 310261.1
+582.37170 720.4
+582.54596 986.6
+582.79333 265446.2
+582.86511 810.9
+582.87982 617.8
+583.03198 1506.3
+583.29468 106172.5
+583.52606 1055.1
+583.73450 930.3
+583.79517 25688.1
+584.02161 800.8
+584.29327 5579.5
+584.79138 639.8
+591.67737 543.5
+592.26880 845.7
+620.80896 662.3
+629.83081 1214.9
+631.32910 1798.1
+631.83069 1434.2
+632.33624 1007.9
+638.83392 50959.4
+639.33514 46172.5
+639.83630 20305.5
+640.33789 5061.9
+643.34595 1410.1
+643.82776 638.7
+649.29272 12319.6
+650.29504 4673.5
+651.29834 1197.1
+661.35187 1385.3
+663.37854 1710.8
+676.61603 1144.2
+695.87939 738.9
+727.37189 9308.1
+728.37512 4167.1
+729.37286 862.3
+731.11328 602.8
+762.37610 7527.8
+763.37994 2602.9
+764.32373 1739.5
+765.32800 1117.2
+795.53571 877.4
+875.46149 5307.7
+876.46484 3162.8
+877.45978 886.3
+979.05042 616.8
+1021.18713 646.7
+1030.30652 586.7
+1079.28442 745.3
+1188.21338 683.7
+1198.19421 3704.9
+1593.90027 835.1
+1643.59814 638.1
+S	1562	1562	529.2765371
+Z	4	2113.07485
+143.79041 580.6
+156.48921 494.0
+156.49275 460.9
+163.26196 631.9
+168.11145 503.8
+169.48062 514.4
+182.58952 518.8
+188.53009 618.2
+191.12556 761.2
+198.88744 1059.1
+199.16772 1238.4
+199.21320 734.3
+199.23334 951.0
+199.25407 635.1
+199.26540 3157.5
+199.27640 763.8
+199.31889 639.4
+199.36392 970.5
+220.25645 642.3
+229.97697 586.2
+237.27910 735.9
+238.20758 616.7
+258.15054 2133.3
+269.90710 576.0
+279.63556 559.7
+338.50284 643.3
+339.66748 1803.6
+342.23877 772.2
+350.27811 887.5
+353.66232 752.4
+356.34802 673.3
+364.18555 787.0
+372.57440 591.1
+375.88245 708.6
+388.53174 1791.9
+388.86490 1691.7
+389.19968 984.8
+396.20920 3332.3
+396.71048 2092.4
+400.19064 750.7
+400.26990 825.0
+410.20648 4079.1
+410.70645 1429.3
+414.20935 767.6
+426.22513 30147.1
+426.55945 25127.6
+426.72568 713.7
+426.89398 8884.8
+427.22760 2750.2
+427.50592 972.5
+429.69589 695.8
+432.71851 1671.5
+437.21371 1021.2
+457.74426 708.7
+458.20386 841.3
+462.66644 586.5
+463.91977 8577.4
+464.25397 5679.5
+464.58820 2697.8
+464.92169 798.6
+466.74780 13052.8
+467.24942 5875.7
+467.74994 2332.9
+470.81192 649.8
+489.26022 4455.0
+489.76205 3097.9
+490.26691 743.9
+494.11893 557.2
+495.25906 2830.5
+495.75967 1190.8
+501.24176 1369.2
+512.94696 702.2
+515.29047 1224.0
+532.52686 2361.9
+541.24237 1880.7
+544.77441 1227.1
+545.27716 974.1
+549.10101 654.4
+553.78223 6356.7
+554.28235 3282.9
+554.78326 2004.0
+559.25165 4399.3
+560.25726 946.7
+565.11108 535.3
+568.65228 642.8
+573.28772 1955.7
+573.79004 869.2
+575.29010 780.5
+582.29181 122183.6
+582.65076 1144.5
+582.79315 84372.8
+583.29443 31174.7
+583.79578 6241.3
+618.33240 6092.9
+618.54993 825.4
+618.66779 6961.7
+619.00226 3015.5
+619.33392 1735.2
+620.01331 3089.9
+620.34698 4755.8
+620.68158 2232.0
+629.82599 819.9
+630.34326 1257.0
+638.83368 75542.7
+639.33490 58239.1
+639.83606 23726.1
+640.33789 5251.1
+647.01611 683.6
+649.29138 744.2
+653.22131 1162.4
+676.60284 564.9
+676.65350 836.7
+688.30682 2358.1
+691.22998 643.3
+695.37585 10608.8
+695.87793 10607.8
+696.37970 4133.5
+696.87775 1186.1
+706.32086 29799.5
+707.32416 13617.1
+708.32477 3592.7
+716.69287 599.7
+727.37122 2008.4
+728.37451 1017.0
+784.19244 597.4
+790.88983 2577.0
+791.39124 2443.8
+791.89886 828.4
+795.53845 940.4
+801.39532 1934.9
+819.40448 46191.5
+820.40741 24349.6
+821.40924 6540.6
+821.77539 599.4
+822.40521 1490.9
+837.41516 1555.7
+932.48975 1108.2
+991.46790 603.0
+1057.29187 664.2
+1198.17871 3149.3
+1209.82214 590.4
+1488.80261 589.2
+1582.68762 683.1
+1620.81726 722.9
+1878.69116 1471.1
+1879.55115 19091.6
+1880.17212 811.8
+1880.42236 1043.5
+1907.05396 7690.4
+1918.68506 892.4
+1930.43286 944.8
+S	1563	1563	410.9760746
+Z	4	1639.873
+106.61858 622.4
+106.65160 607.5
+107.00874 555.6
+113.28246 494.8
+121.79772 2225.2
+123.13367 600.3
+149.01724 652.3
+150.25163 696.0
+152.77536 513.5
+155.84029 539.2
+158.09613 1887.3
+160.11165 1004.7
+169.47740 564.4
+176.10678 4391.8
+177.10210 4777.3
+194.71832 632.3
+198.88895 672.7
+199.18039 40758.0
+199.22626 1101.7
+199.24860 1259.7
+199.25810 1558.1
+199.26878 2316.8
+199.36905 802.0
+200.18353 4757.6
+200.63686 2063.4
+203.11737 2985.7
+205.09738 771.6
+205.27177 566.3
+205.67436 556.7
+208.72073 611.7
+213.08568 1024.3
+214.49100 567.7
+218.31656 720.2
+220.77983 699.4
+220.95685 726.6
+221.12837 171611.2
+221.47621 1002.8
+222.13168 23071.4
+222.24655 596.3
+223.13449 1249.5
+226.15477 2444.3
+227.17543 9731.5
+228.17915 1351.4
+233.16472 7040.6
+234.16830 1113.5
+244.16591 1875.9
+249.12332 28568.5
+249.14519 1065.6
+249.63763 2742.5
+250.12708 4066.6
+251.15033 2942.3
+254.16086 4069.6
+255.10887 3187.7
+258.15030 88549.2
+258.65198 20874.3
+259.15338 2350.5
+261.15939 1897.2
+264.31201 665.9
+272.13486 3346.4
+272.17154 2178.1
+280.15887 605.8
+282.15561 789.4
+294.95779 537.9
+308.87744 760.5
+317.18591 4314.6
+318.18918 1015.9
+326.50998 11223.0
+326.84467 5072.3
+327.17773 1279.8
+344.19644 2673.9
+350.14557 773.2
+355.18649 777.7
+362.20721 14855.0
+363.21152 2966.3
+364.19009 18736.0
+364.69183 5441.9
+365.19290 1639.6
+369.18604 1158.7
+376.52298 817.4
+380.58264 656.1
+382.25482 1183.7
+384.95929 2910.8
+385.20810 1945.8
+385.46240 1220.5
+385.71240 566.5
+387.19870 4963.2
+388.53119 22606.7
+388.86560 14770.9
+389.19971 4199.2
+389.53201 1058.8
+420.55646 724.5
+421.22263 758.9
+421.28540 656.0
+423.71460 767.5
+426.22586 39962.7
+426.56015 28613.3
+426.89423 12315.2
+427.22888 3700.9
+427.51361 1033.9
+427.56308 873.5
+432.71872 5240.9
+433.22046 2745.3
+433.72565 711.5
+437.21396 8142.1
+438.21899 1411.4
+447.29593 2537.7
+457.28421 834.8
+457.91660 2918.3
+458.24911 1393.9
+462.86526 993.0
+463.23010 2544.3
+463.39523 1014.0
+463.92059 192629.0
+464.25458 137703.5
+464.44217 920.7
+464.58865 55416.6
+464.62244 635.4
+464.78140 1309.8
+464.92279 16819.2
+464.98071 696.6
+465.12164 618.0
+465.25656 3941.8
+465.59207 1196.0
+466.73099 2034.5
+467.23477 958.6
+469.89157 901.8
+475.29031 6500.1
+476.29276 1419.3
+476.76831 788.5
+480.25790 957.9
+489.26080 29776.3
+489.76245 14264.0
+490.26505 4167.4
+512.94275 5290.5
+513.27740 4795.1
+513.61145 2459.6
+515.29266 5827.7
+516.29736 670.1
+517.05206 647.5
+518.24530 11151.0
+518.74744 4847.7
+519.24994 1731.9
+519.74768 690.1
+532.31152 655.8
+532.56445 1293.7
+532.60626 598.3
+544.77802 2097.6
+545.27979 2108.1
+549.10858 835.1
+550.29919 2062.3
+553.28680 6040.9
+553.78387 11615.5
+554.28320 5716.1
+554.78705 1727.9
+555.77631 720.8
+562.29199 30837.8
+562.79382 18385.6
+563.29443 6092.3
+563.79810 1786.2
+564.27985 907.6
+564.78168 1443.8
+573.28821 12276.0
+573.78918 5555.7
+574.29041 2857.6
+574.78528 2445.1
+575.28778 1177.1
+580.80914 2646.7
+581.06824 1370.4
+581.30536 1407.4
+581.56128 2775.8
+581.63879 541.9
+582.06299 2102.7
+582.20789 1258.3
+582.22949 1998.7
+582.29266 534235.0
+582.35968 1707.7
+582.72577 1220.4
+582.79376 332771.6
+582.86078 1802.3
+583.02612 3089.1
+583.23022 740.4
+583.29510 123444.8
+583.45239 759.6
+583.52472 3502.8
+583.74078 904.5
+583.79730 28247.8
+584.30188 5073.8
+588.45215 660.4
+592.27173 1106.9
+599.27753 1335.2
+629.82861 1671.8
+630.31335 969.0
+631.32892 2826.7
+631.83160 1927.1
+638.83453 80435.1
+639.33569 60777.4
+639.83710 23764.4
+640.33844 5091.6
+640.84106 1383.1
+643.34473 1143.1
+649.29279 21256.8
+650.29523 6403.5
+651.29749 1348.2
+661.35327 1748.0
+663.38232 2835.0
+664.38342 917.1
+676.63995 842.4
+695.38263 865.3
+706.32745 675.5
+727.37250 14116.7
+728.37457 4560.3
+729.37891 1003.5
+731.07642 770.3
+762.37781 10283.1
+763.38043 4404.8
+764.32074 3563.7
+765.31738 812.7
+795.55798 1037.3
+864.43170 711.2
+875.46082 11051.3
+876.46313 4431.4
+877.46442 943.7
+911.50311 982.6
+920.41937 708.6
+967.47882 616.4
+993.32288 619.9
+1012.50201 636.7
+1020.59717 690.3
+1048.44678 721.8
+1136.10242 558.2
+1140.48352 755.5
+1198.25598 2845.9
+1198.39819 876.0
+1213.39648 516.3
+1277.83386 615.3
+1304.00183 590.8
+1505.38416 576.3
+S	1565	1565	410.4779521
+Z	4	1637.88051
+105.05029 547.7
+105.75498 589.6
+108.25829 461.8
+108.81015 541.5
+111.10685 590.8
+115.57313 523.7
+120.56126 531.4
+120.91081 908.7
+121.79079 522.8
+121.79726 1853.6
+121.80566 812.5
+134.20020 618.0
+139.80893 548.1
+141.83636 552.0
+144.90457 636.6
+158.09607 2111.5
+160.99852 561.7
+165.58730 569.8
+165.77927 940.3
+170.24445 556.8
+171.63754 645.6
+172.49358 674.9
+176.10652 3645.8
+177.10181 4566.6
+186.09137 725.6
+188.24242 865.3
+188.28860 2443.7
+188.30289 1579.8
+188.35609 600.5
+189.91895 583.1
+191.00377 604.6
+198.88817 799.2
+199.18037 33868.4
+199.19722 804.1
+199.21501 558.9
+199.27028 2837.6
+199.29752 1164.5
+199.35178 579.0
+199.36818 1081.6
+199.63654 584.1
+200.18379 3486.1
+200.63680 1477.5
+203.11830 1869.9
+205.93556 673.9
+211.89990 677.0
+213.08647 789.3
+220.78165 771.2
+221.12831 140679.3
+222.13158 17847.2
+224.15257 941.2
+226.15465 1220.8
+227.17523 7427.0
+227.20413 657.7
+231.11221 873.7
+233.16475 5063.1
+234.16875 1222.4
+244.16537 1208.4
+249.12331 22952.2
+249.63704 2051.7
+250.12656 2777.4
+251.15025 3115.0
+254.16084 3444.1
+255.10840 2030.1
+255.29991 666.5
+258.15027 64193.6
+258.65186 15793.7
+259.15326 2140.0
+261.16046 1297.5
+261.19937 684.9
+272.04907 796.5
+272.13535 2185.3
+272.17154 1226.2
+280.18954 566.0
+308.91016 707.0
+317.18518 3183.3
+326.50995 7277.3
+326.84442 3275.4
+327.17874 1219.2
+333.67664 625.2
+342.28394 783.1
+344.19702 1556.3
+350.28046 839.8
+360.53311 592.3
+362.20706 12393.3
+363.21094 2540.3
+363.52161 1574.6
+364.19009 14942.4
+364.69119 4656.6
+365.19171 1294.4
+369.18756 726.0
+382.52728 879.4
+382.91638 531.0
+383.11237 563.6
+384.96002 2222.3
+385.21008 1659.3
+385.46286 885.1
+387.19870 4187.1
+388.53104 19545.4
+388.86539 11012.4
+389.19925 3069.4
+389.53354 625.7
+397.52786 598.6
+406.46924 639.3
+409.73267 576.2
+420.55627 665.3
+423.71359 732.0
+426.22571 29319.1
+426.56030 16718.3
+426.89462 6721.6
+427.22827 2234.1
+427.55817 719.0
+432.71957 5203.3
+433.22107 1778.2
+437.21365 5721.1
+438.22073 919.5
+447.29471 1518.9
+457.27859 614.8
+457.91840 2155.1
+458.24911 1062.9
+463.22955 1994.4
+463.92050 135520.5
+464.25455 95067.9
+464.58890 35591.8
+464.92242 10868.3
+464.97559 889.6
+465.25784 3381.8
+466.73291 2459.1
+467.23141 930.2
+474.30380 1435.2
+475.29065 4093.1
+476.29541 1243.3
+489.26108 21971.3
+489.76181 12883.7
+490.26266 3753.3
+506.40359 615.1
+507.26563 684.7
+512.94281 4114.1
+513.27747 3066.5
+513.61151 2207.1
+513.94788 702.0
+515.29291 4258.3
+515.53564 554.8
+516.29340 681.0
+518.24493 6585.0
+518.74744 3976.6
+519.25183 1157.6
+525.92542 781.8
+532.59540 1961.7
+544.77753 2210.4
+546.62683 1136.3
+548.72943 731.0
+550.29626 1896.2
+553.28705 5842.4
+553.78406 8338.7
+554.28412 4524.2
+554.78259 695.3
+562.29169 18839.9
+562.79346 11276.5
+563.29449 3993.9
+563.79340 695.4
+564.28223 1536.9
+573.28784 9300.5
+573.79059 6724.0
+574.28876 1329.6
+574.78845 1544.7
+580.81525 2554.4
+581.31964 865.8
+581.55969 1570.7
+582.20587 1054.1
+582.23273 1430.8
+582.29260 429909.1
+582.36029 1036.5
+582.79376 255265.5
+583.02997 2442.4
+583.29523 92260.2
+583.52997 1602.9
+583.64117 917.8
+583.79565 24820.7
+584.29028 3023.1
+584.78448 944.3
+592.27173 1674.9
+599.26788 747.4
+603.73383 536.5
+607.36810 567.7
+629.82904 2011.9
+630.33240 2033.0
+631.32947 2698.9
+631.82886 1766.5
+638.83435 69099.7
+639.33563 45349.2
+639.83698 17403.8
+640.33960 4436.5
+640.83459 1120.8
+643.34296 1181.3
+649.29260 15184.0
+650.29401 4777.1
+661.35303 2122.9
+663.37952 1313.5
+676.62561 673.6
+676.79541 574.9
+727.37225 12690.2
+728.37671 4354.2
+762.37744 8852.1
+763.38055 2610.4
+764.32300 2657.6
+783.85797 663.7
+795.54944 976.4
+863.57605 680.7
+875.46112 6204.6
+876.46582 2771.5
+877.43140 784.4
+908.32080 567.2
+929.92932 631.1
+930.45691 642.1
+1000.85437 660.6
+1137.33252 613.4
+1198.34265 3283.9
+1525.45447 1021.4
+S	1566	1566	410.9798246
+Z	4	1639.888
+102.29151 586.8
+102.72798 603.1
+110.40942 507.7
+111.52559 586.5
+113.56949 576.9
+117.59688 620.6
+117.88109 641.2
+121.79424 2236.8
+121.79926 503.0
+126.52006 735.0
+127.36391 533.8
+128.55267 517.5
+133.28914 637.5
+136.58417 579.4
+138.02907 538.3
+140.27747 538.5
+147.88425 616.1
+149.52119 587.9
+158.09601 1935.7
+170.23003 580.7
+171.63739 637.6
+176.10670 3701.5
+177.10204 5825.8
+179.95499 540.6
+187.67165 686.1
+189.35867 625.3
+193.02898 611.3
+199.18040 43941.2
+199.24706 811.5
+199.25253 623.3
+199.26799 2097.6
+199.27383 2182.2
+199.36411 761.8
+200.18352 4484.8
+200.63680 2095.5
+201.13869 769.3
+201.34152 647.6
+203.11745 2201.5
+213.08687 1112.1
+214.33089 624.0
+221.12831 164304.6
+221.29984 1317.2
+221.41290 778.9
+221.47708 914.4
+222.13164 22304.9
+223.13510 1033.4
+224.15176 1049.6
+226.15491 1673.0
+227.17523 9722.3
+228.59428 577.1
+230.72958 584.6
+231.11403 630.5
+233.16444 6339.5
+244.16476 1475.3
+249.12325 26742.9
+249.63704 2563.2
+250.12711 3287.3
+251.15016 4559.6
+252.41742 605.6
+254.16074 3706.2
+255.10876 3014.5
+258.15021 82999.7
+258.65186 17919.7
+259.15311 3115.2
+261.16101 1534.1
+272.13586 2835.9
+272.17178 2577.9
+289.19092 656.0
+315.05127 536.1
+317.18597 4305.1
+318.18839 839.5
+326.51004 9622.0
+326.84451 4953.9
+327.17737 1522.7
+344.19672 2133.8
+348.19058 1326.6
+350.14420 737.8
+350.27872 682.9
+355.18234 832.5
+361.21945 1099.3
+362.16330 586.7
+362.20724 15140.7
+363.21106 2993.6
+363.52130 1238.6
+364.19012 17517.3
+364.69147 5577.7
+365.19077 756.7
+369.18692 1111.2
+369.60880 785.4
+375.18683 595.4
+376.52335 1404.9
+380.01465 639.0
+382.25482 1249.7
+382.52835 964.4
+384.95859 2325.9
+385.20920 2707.4
+385.46091 1935.3
+387.19843 5602.5
+388.53110 20612.3
+388.86536 12053.1
+389.19919 4442.2
+415.78860 520.9
+420.21960 834.3
+421.22028 915.4
+426.22565 39711.5
+426.56006 29612.3
+426.89398 12057.9
+427.22925 2241.1
+427.51236 573.0
+432.71884 6794.9
+433.22055 2977.3
+433.72424 712.9
+437.21353 7084.2
+438.23325 1219.7
+447.29883 1617.8
+450.13907 542.4
+457.28040 892.8
+457.91586 2719.5
+458.25067 1358.3
+462.86115 958.3
+463.19565 1058.0
+463.22937 2846.3
+463.74173 733.0
+463.92047 183519.1
+464.25449 135508.6
+464.43826 839.5
+464.58835 50132.3
+464.87625 536.4
+464.92242 15878.0
+464.97928 870.8
+465.25751 4702.8
+465.31589 1025.9
+466.73233 3987.5
+467.23526 1442.1
+474.30276 2550.9
+475.29059 6140.6
+476.29321 1309.8
+482.62592 834.1
+489.26083 27675.8
+489.76230 13448.2
+490.26318 4439.2
+490.75488 716.1
+507.26740 1612.4
+512.94324 6248.1
+513.27698 2609.7
+513.58203 550.2
+513.61444 1837.6
+514.30286 848.3
+515.29352 5125.0
+518.24518 8221.5
+518.74695 2613.1
+519.24817 1346.4
+531.26672 838.3
+532.31134 1113.9
+532.59259 996.1
+532.63263 1094.8
+536.67889 580.7
+544.77606 2892.9
+545.28070 1995.6
+545.77039 690.3
+546.62079 799.3
+550.29626 2688.4
+553.28674 6281.7
+553.78351 11113.2
+554.28436 6458.0
+554.78595 1959.1
+559.76324 739.0
+562.29175 27396.9
+562.79333 16161.6
+563.29510 6454.6
+563.79883 1592.5
+564.77521 1261.6
+573.28790 12903.1
+573.78888 8447.7
+574.28979 2734.5
+574.78564 2334.2
+575.29077 1543.6
+575.79510 750.1
+580.80536 2434.9
+581.07990 1181.8
+581.14038 818.1
+581.30426 2140.3
+581.46503 720.8
+581.55646 2692.3
+581.80927 1270.5
+582.05060 1152.8
+582.08411 1105.5
+582.19116 1024.8
+582.22723 2032.1
+582.29248 529884.8
+582.37152 1396.4
+582.52332 914.0
+582.55048 935.6
+582.79364 328226.2
+583.02747 2419.3
+583.29492 114389.8
+583.53302 1694.5
+583.79626 31953.8
+583.85529 861.4
+584.00171 921.1
+584.29639 5742.8
+588.96118 797.5
+592.27466 1287.6
+593.27173 679.4
+629.82898 2009.0
+630.32538 1247.3
+630.36511 810.7
+631.32861 3140.4
+631.83246 2065.1
+638.83429 90277.9
+639.33539 59909.3
+639.83698 21864.7
+640.33716 5997.4
+640.83710 1243.4
+643.34167 1047.8
+644.32092 736.0
+649.29260 19617.1
+650.29529 6211.9
+651.30145 1421.3
+661.35419 1766.9
+662.35919 683.9
+663.38116 2604.2
+670.36987 526.3
+676.63055 1137.9
+695.36414 669.1
+727.37292 13448.6
+728.37555 5862.1
+756.63379 653.0
+762.37744 10987.6
+763.38043 4904.3
+764.31921 4336.0
+765.31873 936.4
+875.46063 10948.8
+876.46564 4654.8
+877.44971 1413.4
+878.40967 805.7
+905.66699 580.5
+1057.24097 824.0
+1079.69275 728.3
+1121.91650 555.6
+1198.34351 2483.2
+1199.99011 694.1
+1281.42810 671.8
+1281.91016 678.4
+1293.99109 616.0
+1331.27185 691.5
+1348.85803 621.8
+1455.06104 554.6
+1621.29114 606.0
+S	1567	1567	788.7840946
+Z	5	3938.88135
+207.14986 587.4
+215.93860 606.4
+217.56879 583.4
+260.59402 593.2
+272.00525 611.1
+280.44647 619.1
+283.80951 557.1
+286.13919 2241.1
+287.77081 595.5
+293.66422 631.5
+300.21704 699.0
+314.86563 769.9
+324.19366 844.9
+337.48349 636.8
+348.20596 599.7
+393.21326 746.0
+403.19495 1568.3
+439.21585 1345.4
+449.20953 654.1
+449.69366 627.5
+464.50766 696.1
+496.23828 4821.0
+497.24069 1435.0
+532.59308 2012.3
+536.93695 673.9
+545.30737 688.0
+548.27222 674.0
+548.77209 646.7
+549.10040 935.4
+556.54297 622.9
+566.27679 1676.9
+566.60828 2608.3
+566.94263 849.0
+585.85803 737.5
+589.29010 1152.3
+589.78674 920.3
+590.28430 943.6
+593.27966 805.5
+593.53314 1969.3
+601.45746 684.2
+602.32831 1147.5
+613.29834 1440.0
+616.30896 1083.9
+620.79480 806.8
+621.04095 2131.6
+621.81360 1783.9
+622.31274 2286.9
+623.34070 752.6
+625.31677 872.1
+625.53998 1312.8
+625.79126 801.4
+631.30707 2362.5
+641.29370 766.2
+659.30072 3771.8
+660.30817 1528.8
+661.80750 745.4
+665.99207 2641.0
+666.06006 2330.6
+666.30524 5123.6
+666.55927 5030.1
+666.66510 1731.5
+666.80902 2676.3
+666.99603 885.3
+667.06024 689.0
+674.93622 665.0
+676.61157 932.0
+686.32745 3988.2
+686.82764 3387.5
+687.32257 1044.3
+697.52246 767.4
+699.33942 791.4
+702.82300 1804.7
+703.07764 3094.2
+703.32697 2470.6
+703.57648 2148.5
+703.82684 1575.0
+704.33807 3093.5
+704.67108 3080.1
+705.00818 1524.2
+705.34900 650.7
+708.33307 1279.2
+712.34363 1092.1
+716.33026 954.7
+720.33905 1550.7
+720.53693 1312.4
+720.74133 771.9
+720.94183 1154.1
+721.13489 768.4
+728.07349 1268.5
+728.33789 2150.7
+728.58655 1624.0
+728.83325 817.6
+735.94977 1378.9
+736.15228 1300.3
+736.35138 2418.9
+736.75647 741.2
+739.34998 2845.8
+739.54974 5469.5
+739.75012 4009.2
+739.94885 4018.2
+740.15179 3575.4
+740.55292 823.0
+741.01709 1201.8
+741.34821 4251.2
+741.68109 3464.1
+742.01324 2488.4
+742.35046 1245.0
+742.95233 2694.7
+743.15198 8414.9
+743.35242 7972.3
+743.55035 3867.6
+743.75433 2545.6
+743.95435 1890.4
+747.02313 7882.1
+747.35541 8111.6
+747.69128 4603.9
+748.02313 1946.8
+750.84460 1283.0
+760.39386 1165.3
+761.38733 696.9
+765.39459 1234.0
+765.60883 1333.5
+765.85962 1759.2
+766.10724 2520.6
+766.35583 1079.6
+766.61035 1900.1
+766.84473 806.6
+770.10925 4489.1
+770.36066 9022.3
+770.61108 8532.3
+770.86115 5776.7
+771.11365 2608.8
+792.42377 665.7
+811.88531 2008.4
+812.13684 3948.7
+812.38739 2492.5
+812.63629 3017.1
+812.89374 1177.1
+816.38885 6710.9
+816.63965 12887.7
+816.89001 13036.3
+817.14038 6462.3
+817.39557 3342.1
+817.64429 1189.5
+822.04150 1610.7
+827.37823 2332.1
+827.71515 9955.7
+828.04822 13187.4
+828.38287 9884.9
+828.71661 4342.1
+829.05823 1075.0
+833.38867 7175.4
+833.72235 11271.7
+834.05646 9230.0
+834.39087 4544.8
+834.72375 1566.5
+841.89288 1052.0
+848.90674 9912.4
+849.40912 7901.4
+849.91058 5060.1
+850.40997 1772.5
+853.14722 1379.2
+853.40619 2346.3
+853.65460 1045.6
+857.15576 4787.2
+857.40411 8802.4
+857.65698 8611.6
+857.90845 7215.8
+858.15802 4133.8
+858.40802 1131.0
+866.90814 1586.1
+867.15717 3845.8
+867.40710 6524.4
+867.66211 4889.0
+867.90979 2074.0
+868.15295 1134.3
+868.41400 1013.8
+871.40991 13611.9
+871.66095 30632.7
+871.91168 30915.9
+872.16138 23274.6
+872.41168 15216.1
+872.65967 4876.6
+872.91437 1531.2
+873.15594 1118.7
+882.41180 899.2
+887.74225 15962.4
+888.07684 22907.7
+888.41064 20559.6
+888.74420 10816.1
+889.07977 5209.7
+889.40985 2074.5
+891.66431 1619.4
+892.40295 844.2
+893.44965 1626.0
+895.66235 2422.2
+895.91534 8253.8
+896.16364 9991.7
+896.41724 8259.8
+896.66467 6295.0
+896.91504 3356.4
+897.16925 1256.6
+900.16705 22060.2
+900.41669 48620.9
+900.66766 52511.9
+900.91803 40659.6
+901.16833 23276.4
+901.41821 10315.1
+901.67163 3710.4
+901.92365 757.5
+924.18353 3086.4
+924.43506 3749.3
+924.68695 2509.6
+924.92499 1289.0
+925.18231 1641.3
+928.43762 13694.2
+928.68866 32914.3
+928.93842 41304.8
+929.18884 27954.9
+929.43988 20229.6
+929.68835 7871.9
+929.93921 3589.3
+936.76599 4157.0
+937.09814 9651.9
+937.43390 7748.1
+937.76923 4587.7
+938.09949 2546.3
+938.43243 1096.3
+962.35980 686.0
+970.44299 1733.9
+970.78070 4841.8
+971.11499 4778.4
+971.44904 2018.5
+971.78595 1087.6
+994.45062 1635.1
+994.79510 1077.8
+998.48828 877.1
+998.98486 1816.8
+999.49115 751.8
+1012.50568 1205.0
+1020.81616 2692.0
+1021.13971 3085.9
+1021.47797 2048.1
+1021.80499 929.4
+1026.47717 6736.6
+1026.81177 16372.2
+1027.14453 17314.8
+1027.48096 8325.8
+1027.81274 6960.0
+1028.14636 1797.4
+1028.47961 1208.0
+1038.48438 753.1
+1047.50000 855.1
+1050.58813 1331.1
+1056.50134 1970.0
+1057.00256 1197.5
+1057.50623 932.0
+1066.49121 755.1
+1095.54590 4560.2
+1096.54382 2444.7
+1096.85022 579.3
+1097.55554 833.3
+1103.00293 863.7
+1106.52576 2169.8
+1107.53772 1994.3
+1111.51636 920.3
+1112.02002 1290.5
+1112.50916 937.4
+1113.30017 675.0
+1177.56372 1228.4
+1178.57422 935.2
+1185.54724 974.6
+1186.05908 1670.8
+1188.19531 825.0
+1198.31738 3117.7
+1242.62097 2587.0
+1243.61682 1354.9
+1260.62463 3155.0
+1261.62561 2054.4
+1262.62085 1527.8
+1326.78186 658.7
+1363.53381 701.2
+1491.96204 781.4
+1513.11731 686.0
+1613.57471 693.7
+1720.31934 704.9
+1741.45313 632.0
+1777.57593 701.6
+1829.02026 703.4
+1868.57874 652.5
+1878.88318 907.5
+1879.47559 19024.3
+1879.77380 3291.0
+1880.07629 2175.1
+1902.64172 888.3
+1907.04675 7579.1
+1930.48279 759.9
+S	1569	1569	410.4735896
+Z	4	1637.86306
+101.44182 565.2
+102.87621 513.3
+104.18882 622.9
+104.76367 662.2
+105.97636 512.5
+107.56432 532.6
+113.46320 580.4
+121.79548 2041.4
+121.80043 560.8
+123.30289 547.2
+128.00725 749.5
+129.20299 584.6
+141.85022 604.9
+157.60400 639.2
+158.09595 2250.1
+160.11177 1213.2
+161.99702 540.9
+165.77684 593.9
+168.66063 617.1
+171.63589 572.6
+174.10394 664.6
+176.10680 3354.9
+177.10187 5120.3
+182.62610 785.9
+188.24228 959.5
+188.27855 2019.5
+188.28828 2185.6
+188.30339 2004.7
+188.31651 1345.1
+188.33621 830.0
+198.88742 1176.7
+199.16086 1023.6
+199.18030 35928.8
+199.23795 1057.0
+199.25978 2385.5
+199.26964 1527.6
+199.27948 982.5
+199.29745 804.7
+199.33794 765.8
+200.18367 4485.8
+200.63707 2381.8
+201.78204 572.3
+203.11731 2194.8
+205.63483 578.1
+214.51521 537.2
+220.78297 937.6
+221.02507 552.8
+221.12827 148010.2
+221.30087 1164.2
+221.47548 969.1
+222.13161 20142.4
+223.13490 997.8
+226.15506 1389.2
+227.17503 8554.3
+228.17818 720.1
+231.11299 930.4
+232.20065 535.2
+233.16449 6769.9
+234.12369 1177.4
+234.16772 935.0
+242.61601 566.3
+244.16466 1277.7
+245.52475 579.9
+247.36038 543.0
+249.12331 22817.0
+249.14424 863.8
+249.63705 2944.1
+250.12686 3462.6
+251.15016 3691.4
+254.16132 3134.0
+255.10822 2645.6
+255.29002 674.8
+258.15015 66605.6
+258.65192 15032.1
+259.15311 2157.8
+261.15942 895.3
+272.03607 932.6
+272.13571 2234.9
+272.17090 1480.2
+272.19174 593.5
+274.49890 671.9
+277.39755 518.4
+296.99582 601.4
+300.15332 552.9
+300.16879 1030.5
+304.72504 591.1
+317.18582 3474.3
+319.12064 788.1
+326.51007 8407.0
+326.84406 4046.6
+327.17923 1380.9
+344.19696 1298.8
+348.19193 1322.0
+350.28049 743.3
+355.18448 735.4
+361.21909 1229.3
+362.20718 13691.2
+363.21063 3069.8
+363.51917 1287.2
+363.72156 649.4
+364.19003 15267.7
+364.69150 6875.1
+365.19324 1279.3
+369.18628 907.0
+375.18976 876.3
+381.36218 974.9
+382.86081 902.4
+384.12717 598.3
+384.95956 1973.5
+385.20947 2174.2
+385.46048 1257.9
+387.19821 3694.5
+388.53107 20983.0
+388.86560 10349.7
+389.19958 3618.5
+389.53320 759.6
+423.71234 896.3
+426.22571 32067.0
+426.55994 22193.0
+426.89374 6699.1
+427.22870 1602.4
+427.54077 780.4
+432.71878 6242.6
+433.22141 2414.6
+437.21387 7501.1
+438.22479 1428.1
+440.05145 571.0
+447.29648 1535.2
+457.27997 954.4
+457.91599 1498.3
+458.24878 1499.9
+458.58194 792.3
+462.86774 752.7
+463.22992 2370.8
+463.92038 152832.3
+464.25446 105405.2
+464.44492 1013.5
+464.58844 45103.7
+464.92294 14166.0
+464.97693 967.5
+465.25696 2103.0
+466.73178 7163.4
+467.23447 2017.3
+474.30246 2015.5
+475.29022 4787.5
+476.29428 1311.1
+476.77509 802.8
+479.71347 657.4
+485.24951 1176.1
+487.92212 623.2
+489.26077 25180.4
+489.76187 12764.2
+490.26334 5541.7
+490.76221 1068.9
+507.26996 1844.4
+508.41434 623.9
+509.74792 720.0
+512.94318 4783.4
+513.27667 3768.6
+513.61438 1913.9
+515.29230 5763.9
+516.60181 768.1
+518.24567 8335.0
+518.74689 4173.5
+519.24890 1607.1
+532.60480 1687.9
+532.64850 673.4
+544.77722 2340.2
+545.27704 1548.7
+549.14764 1013.9
+550.29712 1676.7
+553.28668 5492.3
+553.78369 8418.7
+554.28473 4718.1
+554.78485 2077.4
+559.77008 1849.7
+560.26849 845.4
+562.29187 22497.0
+562.79333 15523.4
+563.29510 4778.2
+563.79962 834.0
+564.17706 641.7
+564.27747 1710.3
+564.77734 1901.7
+573.28802 9603.1
+573.78833 6050.0
+574.28937 2908.4
+574.78821 2542.8
+575.29388 917.3
+580.81165 2548.8
+581.08563 1030.2
+581.26300 599.9
+581.31445 1162.6
+581.55811 1473.8
+582.20660 1200.6
+582.23193 1408.3
+582.29248 440178.9
+582.37476 1335.4
+582.70758 658.1
+582.72394 654.8
+582.79370 271060.2
+583.02295 2437.7
+583.29517 97999.2
+583.42157 691.2
+583.44598 827.2
+583.53601 786.1
+583.79700 26009.4
+584.00177 840.0
+584.30011 4217.9
+584.77692 1027.4
+592.27136 1005.4
+599.27679 892.1
+605.83435 709.6
+629.82880 1517.7
+630.31958 1239.2
+630.83160 856.6
+631.33032 2974.0
+631.83118 1354.5
+638.83423 73738.0
+639.33551 49269.7
+639.83661 20303.8
+640.33905 4067.3
+640.53430 728.1
+643.34332 1260.3
+643.82800 1287.7
+649.29230 17368.5
+650.29565 4587.7
+661.35333 2005.2
+663.38269 2243.0
+664.39081 923.7
+676.63617 868.5
+695.38361 660.3
+727.37317 15106.5
+728.37518 4746.0
+729.38348 1227.4
+762.37708 9313.2
+763.38116 4315.8
+764.31866 2486.1
+765.31775 670.5
+795.54510 1355.5
+796.74426 579.1
+833.61780 691.9
+858.04108 801.2
+875.46069 7919.0
+876.46393 4062.7
+877.46094 1222.4
+983.15851 624.6
+1056.92419 592.8
+1082.53809 611.3
+1198.35144 3292.1
+1272.40417 617.8
+1525.41516 837.3
+1561.46313 692.3
+S	1570	1570	410.9753246
+Z	4	1639.87
+115.81699 509.6
+118.23576 600.2
+120.73745 592.3
+120.74688 619.6
+120.79391 599.7
+121.79663 2358.2
+124.93484 555.4
+129.12700 535.0
+132.83156 578.0
+145.93025 591.0
+152.23026 568.4
+158.09593 867.2
+158.95383 610.9
+160.11076 628.5
+165.77858 925.7
+167.04541 714.6
+171.63849 762.8
+176.10655 2519.2
+177.01776 593.4
+177.10175 2652.9
+193.33925 568.4
+197.70940 546.4
+199.16684 1105.1
+199.18024 27396.2
+199.23933 913.8
+199.26758 2092.8
+199.28169 1948.3
+199.36284 865.6
+199.37918 861.9
+200.18361 3541.4
+200.63710 1312.6
+203.11809 1165.3
+213.08659 644.9
+221.12820 115229.3
+222.13158 15337.8
+223.13489 960.5
+226.15494 1001.6
+227.17516 6797.1
+228.71182 633.3
+233.16437 3598.9
+233.57394 579.4
+234.16908 795.5
+244.16490 1488.6
+249.12317 17541.1
+249.14619 887.9
+249.63660 1966.2
+250.12682 2355.4
+251.15028 1921.8
+254.16063 2426.3
+255.10873 1342.9
+256.35352 585.9
+258.15009 57720.9
+258.65179 15058.1
+259.15295 1527.1
+259.42126 581.5
+261.16064 661.6
+272.13483 1771.1
+272.17160 1165.5
+281.34201 583.5
+300.17227 749.1
+317.18567 3031.2
+326.50974 7044.4
+326.84421 4214.4
+339.63696 641.6
+340.77853 644.0
+344.19742 917.7
+347.90805 661.9
+348.44455 716.2
+362.20712 11792.5
+363.21115 2017.8
+363.51947 1339.7
+363.85809 701.6
+364.18979 11077.0
+364.69104 4018.5
+368.22739 831.5
+369.18546 934.3
+382.86517 817.2
+384.95981 2761.2
+385.20975 1484.4
+385.46124 1598.5
+387.19815 3389.8
+388.53116 18656.6
+388.86526 12342.3
+389.20044 3352.7
+389.53311 1169.2
+421.22168 870.5
+426.22571 25862.8
+426.55988 17066.6
+426.89435 7806.8
+427.22961 1470.1
+432.71945 2480.4
+433.22211 1080.4
+437.21329 4091.5
+438.22656 954.6
+447.29984 748.5
+449.71310 783.2
+457.28018 676.9
+457.92377 953.4
+458.25015 1585.5
+460.20163 732.9
+463.22903 1500.4
+463.52222 595.4
+463.92032 129116.2
+464.25439 105863.3
+464.58835 41813.2
+464.92276 10967.8
+465.25845 3229.0
+465.63556 700.3
+466.73181 5421.8
+467.23315 1015.0
+474.30099 1323.2
+475.28964 4557.7
+476.29446 879.5
+476.76944 683.7
+478.95343 640.4
+480.75638 624.4
+482.65237 654.6
+489.26080 15654.8
+489.76175 9103.9
+490.26263 2819.2
+491.48508 594.3
+505.98633 544.9
+512.94348 5257.3
+513.27795 3604.4
+513.61157 1795.9
+515.29095 2412.2
+516.29132 678.0
+518.24512 4492.7
+518.74628 3151.6
+531.24469 722.0
+532.31665 903.2
+532.60748 2158.0
+544.77759 1768.9
+545.27740 969.5
+546.62238 1171.2
+549.14856 676.4
+550.29956 1047.2
+553.28601 4091.3
+553.78375 6869.6
+554.28516 3933.5
+559.77338 1084.8
+562.29126 15625.3
+562.79340 9312.6
+563.29431 3828.9
+564.28107 1197.1
+564.78540 797.3
+573.28772 6556.1
+573.78876 3746.0
+574.29071 939.2
+574.78949 1561.8
+575.29248 752.2
+580.80560 873.8
+581.31989 890.0
+581.41815 780.7
+582.06158 853.2
+582.29236 347261.8
+582.36304 729.4
+582.79352 212183.8
+583.02576 1667.8
+583.29486 71476.4
+583.79565 20530.9
+584.29572 3378.9
+588.45331 717.4
+592.27625 683.4
+629.83063 1102.8
+630.31348 946.1
+631.32727 3002.0
+631.83032 1922.6
+633.10419 611.7
+638.83429 48737.4
+639.33551 33755.2
+639.83673 12000.1
+640.33972 3304.6
+640.84247 826.5
+643.33887 896.9
+649.29236 12591.6
+650.29364 3215.1
+661.35590 1646.0
+663.37915 2335.2
+676.62762 1553.9
+697.83636 653.3
+727.37238 6549.7
+728.37555 2581.6
+762.37695 8058.2
+763.38196 2941.5
+764.32068 2297.6
+765.31531 641.0
+795.54980 992.6
+827.70490 523.9
+875.46014 6208.5
+876.46460 2677.5
+877.45667 690.9
+1188.04834 724.7
+1198.35999 2885.7
+1232.91626 555.5
+1381.38354 726.7
+1649.41589 662.3
+S	1571	1571	534.2530396
+Z	4	2132.98086
+157.59445 630.2
+165.78015 669.1
+169.48563 673.3
+169.50475 614.3
+175.55550 539.3
+188.25369 481.6
+188.26065 1034.2
+188.27509 1276.3
+188.28696 1201.3
+188.30168 823.3
+188.30717 711.6
+188.31630 1041.8
+190.71388 552.6
+198.88806 926.3
+199.17725 842.9
+199.25401 1055.3
+199.26100 1786.4
+199.27693 1724.2
+199.29076 1736.6
+199.33147 600.5
+199.37523 907.9
+199.38837 994.8
+202.21581 601.5
+202.36850 573.2
+217.13365 1004.4
+228.26340 507.4
+236.66872 581.5
+261.95328 495.4
+265.03992 630.3
+272.13605 919.7
+276.16989 1051.9
+280.17081 817.9
+283.14395 2091.6
+283.63464 701.6
+284.12891 3228.6
+292.64246 6414.0
+293.14325 841.6
+297.31726 520.7
+300.55469 562.5
+303.59659 507.9
+305.18405 666.4
+305.39426 578.4
+308.88760 976.8
+318.67029 5699.4
+319.17191 1964.0
+330.64111 2377.5
+341.64679 690.2
+341.68411 1568.3
+355.54330 765.0
+373.98630 525.6
+374.20270 1140.9
+379.16736 2888.0
+382.71771 2389.8
+387.76257 505.7
+387.98248 580.2
+391.21796 1252.7
+392.21295 3312.5
+395.07578 761.2
+400.19308 2054.9
+405.20480 824.6
+405.53714 626.9
+414.20886 2530.3
+415.19000 530.9
+416.26202 1542.9
+427.52515 780.3
+433.20566 672.2
+440.75363 1629.0
+446.70203 1792.7
+447.21008 585.2
+450.24619 729.8
+457.25369 1948.6
+457.50400 1650.8
+457.75168 1690.6
+458.00943 634.6
+460.69974 2645.8
+463.17618 683.3
+466.11060 1385.3
+468.69778 822.8
+470.57602 1642.5
+470.90948 918.4
+476.26926 1877.6
+485.51367 719.9
+485.77258 719.8
+491.90851 76107.6
+492.24237 44037.5
+492.57651 11406.0
+492.91165 831.9
+496.22150 976.7
+501.23834 1989.4
+505.19873 791.3
+508.23911 1849.2
+511.21988 625.7
+512.20746 808.6
+514.92303 1337.6
+517.92322 1566.8
+518.00220 1825.6
+518.25140 2021.6
+520.59058 4490.1
+520.92767 3492.6
+522.22894 27721.0
+523.23212 5701.9
+524.23047 799.4
+527.54272 698.2
+532.55353 2099.6
+549.13104 794.9
+559.62018 873.5
+571.63885 7686.1
+571.97266 6317.3
+572.30768 3017.3
+572.64410 1413.4
+600.31409 1394.9
+602.32288 2767.8
+607.30133 20679.2
+607.80231 8197.3
+608.30450 1817.9
+609.33331 5548.8
+609.66791 7267.2
+610.00244 3883.5
+610.34399 1038.5
+618.32257 5344.4
+619.32648 2298.0
+630.35651 581.0
+636.33276 61354.6
+637.33600 23230.0
+638.33948 5194.8
+647.02631 2259.2
+647.36261 2851.8
+647.69562 878.7
+652.17731 652.6
+660.27490 27232.7
+661.27698 6198.3
+662.27618 762.6
+668.30182 1254.1
+668.80237 1311.5
+673.36066 727.7
+676.63770 1316.9
+682.36206 2868.3
+685.29156 11663.7
+686.29645 4914.3
+687.29669 1009.3
+688.83325 8117.5
+689.33588 3296.3
+689.84399 794.5
+705.36285 895.8
+705.87079 714.2
+706.32196 1953.0
+707.32782 918.3
+725.34650 1137.9
+725.84198 1469.3
+726.34717 906.1
+734.34644 4944.2
+734.84857 3458.7
+735.35236 2208.5
+735.85950 653.7
+737.35913 57127.8
+737.86041 38591.2
+738.36224 8843.9
+738.86682 827.4
+746.42450 927.2
+764.42865 5387.0
+765.43195 2324.7
+768.86316 1093.8
+769.37140 1308.5
+778.31805 809.6
+781.43640 775.6
+783.81390 603.1
+791.37384 769.7
+795.54926 964.6
+804.36481 2693.1
+814.35248 780.5
+819.40656 2114.0
+820.40533 761.5
+822.28052 1066.3
+832.35974 39879.1
+833.36310 21882.8
+834.36481 4895.7
+849.38794 1702.7
+960.45605 4089.7
+961.46045 2157.0
+1057.30615 554.4
+1198.23657 3309.0
+1293.54797 628.2
+1308.22009 667.4
+1335.83813 675.9
+1362.15283 604.1
+1508.37231 576.6
+1724.55737 611.0
+1877.57922 799.9
+1878.07227 673.2
+1878.56445 620.6
+1878.67517 630.0
+1879.54370 19802.0
+1880.28809 1128.2
+1880.81567 818.5
+1907.13184 7457.9
+1930.53882 806.9
+S	1573	1573	400.7113246
+Z	2	799.407
+106.54813 795.6
+109.12093 1112.4
+114.35284 845.9
+120.08041 6617.1
+121.79572 3267.7
+122.25853 958.6
+122.85865 808.5
+133.16043 1362.3
+134.09319 803.4
+135.99538 920.1
+136.07510 1663.2
+137.67043 750.9
+144.08009 6714.7
+147.82886 849.5
+162.09088 9492.2
+171.64091 968.1
+172.43716 815.9
+175.43082 921.4
+176.26437 854.1
+179.10739 874.8
+179.96677 847.1
+180.27762 879.9
+188.25726 2234.6
+188.28096 3472.2
+188.29338 3256.9
+188.33331 1027.1
+188.36256 858.9
+198.88907 1473.1
+199.22838 1104.8
+199.23817 1155.0
+199.24916 1834.0
+199.25890 1118.2
+199.26978 3776.6
+199.27962 2456.5
+199.36682 1389.7
+199.37735 1184.4
+206.79936 1050.5
+206.81313 1220.1
+207.11243 265342.4
+207.26901 1436.8
+207.42691 1368.9
+208.11571 29238.9
+216.47270 772.1
+235.10722 22916.0
+236.11160 2790.2
+245.97627 917.4
+257.27899 919.0
+301.05325 793.1
+303.20230 11687.6
+304.20499 1408.7
+308.85800 900.6
+309.43869 962.5
+311.33157 833.3
+320.17102 4314.7
+324.29471 926.8
+328.46356 870.7
+330.73679 801.8
+337.15250 2073.4
+339.16562 859.3
+346.85162 1670.7
+347.18494 1827.3
+347.52246 980.5
+356.68579 7539.3
+357.18851 4199.4
+359.19250 3476.9
+359.43866 824.4
+359.52536 2055.0
+359.85345 1022.7
+362.52798 2208.5
+364.16388 3078.8
+379.81897 870.9
+381.93884 1097.2
+382.17664 3893.8
+382.44193 1192.7
+384.00266 982.7
+384.47110 1000.2
+386.19318 4495.4
+386.44345 17561.7
+386.69421 20585.9
+386.94473 5304.1
+387.19586 2979.1
+389.19238 947.1
+396.99194 939.0
+415.87885 2755.3
+416.21194 4268.9
+416.54660 1514.2
+418.22870 14862.9
+419.23218 2643.2
+427.48834 1294.5
+438.24179 5301.3
+438.74268 7947.8
+439.24442 2345.9
+443.21979 2856.8
+443.47238 2458.3
+447.47485 2308.8
+447.72845 4287.2
+447.97873 1397.5
+448.23099 1100.3
+453.57309 6078.0
+453.90656 7450.6
+454.24115 1952.2
+454.57159 1050.5
+456.25220 8642.4
+456.75302 11969.7
+457.25412 7816.5
+463.16672 883.9
+479.19113 931.8
+481.88785 981.4
+482.60065 1067.5
+497.20328 2970.8
+519.77313 1490.1
+520.27203 2457.0
+520.77625 2184.9
+522.22919 11346.3
+523.23279 6796.6
+524.23645 1519.4
+529.27734 966.9
+532.64087 2762.5
+537.78241 3175.6
+538.28632 4126.7
+538.78552 2853.8
+547.28467 4293.1
+548.28827 1145.2
+549.08984 1319.8
+563.88531 2253.8
+564.12946 1159.4
+564.59570 2182.4
+565.21509 1604.7
+565.24506 2223.6
+565.29620 520849.1
+565.37231 1010.5
+565.99860 3165.1
+566.29919 153645.3
+566.46222 1565.7
+566.71503 2996.5
+567.00201 1009.5
+567.30231 6439.2
+577.97968 1180.5
+596.30444 934.9
+603.29065 1645.1
+608.69049 855.8
+611.55438 1007.2
+626.69141 866.4
+635.28107 3284.0
+653.21802 1337.5
+653.29175 3991.1
+654.29681 949.1
+676.64008 1393.8
+712.36462 6763.2
+713.36908 3386.1
+724.19971 1073.1
+769.03442 931.9
+795.54742 1257.1
+844.65576 1050.4
+854.05066 913.6
+888.38531 770.8
+1013.91290 906.4
+1019.31189 887.8
+1139.24121 745.3
+1139.30176 726.0
+1176.25830 1005.8
+1198.43311 4458.1
+1198.55127 906.9
+1314.63257 738.1
+1357.76453 901.0
+1525.25500 926.6
+S	1574	1574	410.4782271
+Z	4	1637.88161
+100.86639 643.1
+102.09633 490.6
+102.38062 528.0
+106.91660 592.8
+107.35920 527.7
+112.09279 510.6
+114.07581 586.4
+114.33113 498.6
+121.79492 2468.1
+121.99740 716.8
+128.46815 533.1
+131.95622 609.8
+137.27995 575.0
+150.86841 687.7
+153.90833 621.5
+157.60249 689.9
+158.09583 1092.8
+161.60223 551.0
+165.18820 596.1
+168.66484 619.9
+176.10637 1895.8
+177.10161 2423.9
+180.77959 613.2
+185.29646 543.7
+189.60938 562.1
+190.15335 516.7
+190.95396 568.6
+195.87704 566.4
+198.88818 1344.8
+199.18008 20791.5
+199.19739 579.8
+199.22057 715.3
+199.25151 727.3
+199.27188 3213.7
+199.29156 938.7
+199.36972 1261.1
+200.18378 2377.4
+201.13310 562.1
+203.11775 1388.9
+211.53691 552.0
+218.63931 575.2
+219.25728 701.8
+220.77979 675.6
+221.12816 95138.7
+221.47600 658.9
+222.13141 15171.5
+226.15437 873.6
+227.17532 5490.4
+228.17758 646.6
+233.16432 2884.2
+235.13200 728.4
+236.55345 589.6
+244.16338 705.5
+249.12308 16339.3
+249.14464 863.1
+249.63699 1270.7
+250.12749 1691.3
+251.15009 1644.3
+254.16087 2163.6
+255.10941 1489.2
+258.15002 40492.2
+258.65170 9652.1
+259.15338 1257.2
+261.15878 869.3
+272.13562 1286.0
+296.82578 586.8
+298.70349 690.4
+300.16949 1393.0
+308.90668 712.0
+317.18588 1633.3
+326.50964 5793.4
+326.84503 3177.1
+344.19559 894.4
+353.30405 569.8
+360.57919 743.8
+361.22092 625.9
+362.20728 8674.4
+363.20923 1638.0
+364.18973 8783.4
+364.69122 3350.9
+368.22693 1434.6
+369.18988 863.5
+384.95801 2816.7
+385.20999 1709.7
+385.46140 824.7
+387.19836 2064.4
+388.53094 13218.4
+388.86499 9210.5
+389.19928 2590.2
+393.19598 695.5
+402.05490 571.0
+426.22546 15249.3
+426.55991 12577.5
+426.89404 5115.2
+427.22723 870.0
+432.71896 2901.9
+433.22061 1522.3
+437.21320 3517.0
+438.21695 955.4
+447.29810 1143.8
+456.25394 679.2
+457.91837 855.5
+461.86792 560.6
+463.22702 1753.2
+463.73541 581.9
+463.92017 89389.3
+464.25430 71150.2
+464.58850 31967.2
+464.92282 9321.0
+465.25760 1212.1
+466.73145 12263.2
+467.23315 3117.5
+474.30237 1050.8
+475.28946 3458.7
+476.39999 637.2
+476.77380 595.5
+487.93277 613.5
+489.26083 12006.5
+489.76239 6896.8
+490.26193 2120.8
+512.94214 3432.0
+513.27747 1984.1
+513.60999 1490.9
+514.16888 782.3
+515.29205 2615.0
+516.29547 782.7
+518.24518 4566.1
+518.74707 3395.8
+528.58044 585.4
+532.61285 2247.4
+544.77606 1851.9
+546.64520 567.3
+550.30072 731.0
+553.28723 3000.6
+553.78326 6273.8
+554.28564 2618.0
+554.78687 1290.9
+559.77118 3515.0
+562.29193 10012.2
+562.79266 5726.5
+563.29626 2567.0
+565.78076 678.4
+568.55200 673.0
+573.28668 6361.5
+573.78967 3197.1
+574.78900 1605.3
+580.80890 1395.4
+581.30536 783.0
+581.55780 1129.3
+582.05457 865.4
+582.29230 257053.1
+582.79352 172685.2
+583.02570 1157.1
+583.29504 63956.7
+583.79736 15851.9
+584.30402 1417.1
+630.39966 679.4
+631.32855 1786.0
+631.82996 1604.7
+638.83398 36840.9
+639.33527 28916.7
+639.83655 9219.0
+640.33826 3017.1
+649.29199 8695.9
+650.29639 2918.4
+661.34979 889.6
+663.38458 1075.2
+676.61761 1153.8
+727.37244 5317.5
+728.37598 2521.1
+762.37579 4866.5
+763.38354 2038.9
+764.32233 1741.8
+795.54401 1025.1
+874.00122 565.2
+875.46069 4254.1
+876.45990 1892.4
+923.00793 633.3
+1057.22693 769.7
+1126.66138 696.1
+1198.36902 3617.6
+1198.49109 618.9
+1258.56396 563.8
+1469.21887 694.2
+1536.79761 579.1
+1635.25769 597.8
+1639.63098 648.2
+1642.67175 617.4
+S	1575	1575	755.9560246
+Z	5	3774.741
+198.88573 1050.8
+199.19087 880.8
+199.23401 721.3
+199.24783 971.5
+199.26102 565.7
+199.26810 1149.2
+199.27374 895.9
+199.28938 2131.6
+199.30484 517.1
+199.31194 634.1
+199.38734 692.0
+207.16907 575.3
+222.02463 539.7
+230.83878 624.5
+231.41096 580.8
+246.15530 4435.5
+247.16090 788.7
+260.82349 583.4
+267.33969 621.5
+271.63892 528.2
+277.64737 655.4
+291.59402 568.2
+323.98160 524.9
+423.86362 591.9
+446.20886 594.5
+454.73380 617.1
+476.99503 616.0
+482.62512 672.3
+506.65915 620.1
+532.55969 1805.8
+549.26221 921.9
+581.26154 928.6
+617.27399 872.1
+630.35339 947.2
+656.30145 1100.1
+658.95831 959.8
+674.29565 2314.6
+674.80078 1238.0
+676.63629 1284.7
+684.65375 977.7
+691.07697 796.9
+692.68091 697.7
+711.31403 3620.8
+711.81921 2430.8
+715.17816 598.9
+726.67383 983.3
+731.58759 666.7
+738.34821 648.8
+738.82037 1501.7
+741.67908 700.3
+743.34003 1344.1
+774.31506 621.0
+776.34003 703.8
+789.34192 792.3
+789.84729 683.3
+796.11444 775.8
+814.75610 568.0
+826.36060 3219.6
+826.86475 2980.9
+827.36249 1475.7
+842.12323 1442.3
+842.37280 3055.5
+842.62836 4745.8
+842.88080 1216.9
+846.87994 1829.1
+847.13129 1645.5
+850.38251 1030.3
+850.71954 1111.1
+851.05829 737.6
+857.06659 732.2
+858.46057 661.9
+862.38361 1054.4
+869.89008 1300.3
+870.13129 3619.6
+870.37982 2440.8
+870.63458 3125.8
+870.88495 1478.9
+871.74768 813.5
+873.63617 821.3
+873.88721 764.1
+874.13416 942.1
+874.38672 8847.7
+874.63635 16871.9
+874.88611 19556.7
+875.13788 12780.0
+875.39075 6586.0
+875.63953 3076.5
+875.92676 1197.0
+876.43146 881.5
+878.39044 991.9
+878.88831 16832.9
+879.13947 24277.3
+879.39056 21975.9
+879.64099 13266.8
+879.89081 6566.5
+880.14276 2132.6
+883.74371 828.2
+884.06519 636.3
+895.89886 712.4
+896.40564 803.0
+903.15088 1185.3
+907.16028 2049.8
+907.40924 3613.8
+907.65930 4374.5
+907.91321 2981.1
+908.15790 1582.3
+911.45001 1128.1
+911.94458 1718.5
+919.38165 720.9
+921.36273 702.8
+940.45551 794.6
+968.46442 804.6
+972.08850 746.2
+982.49213 2572.4
+982.99054 2187.1
+983.49158 1171.2
+983.99634 815.2
+1009.44110 808.3
+1015.11365 1029.9
+1015.46234 1442.4
+1015.78351 1177.5
+1025.97693 2011.9
+1026.47534 3413.9
+1026.97888 1841.0
+1027.48352 1356.7
+1034.46509 716.4
+1039.80688 1771.3
+1040.13513 2617.5
+1040.47656 1369.3
+1040.78625 641.9
+1057.23303 839.1
+1061.49329 3127.5
+1061.99927 2544.7
+1062.50293 1237.7
+1062.99512 1966.6
+1063.49670 2067.0
+1064.00525 1163.8
+1078.13538 971.5
+1078.46838 923.3
+1078.78418 910.1
+1083.79382 1978.7
+1084.13110 2312.5
+1084.46326 2524.4
+1084.79309 815.4
+1089.79407 1843.2
+1090.13037 3257.6
+1090.46472 2843.5
+1090.80518 2120.5
+1091.13599 1422.3
+1098.52014 1212.9
+1098.99817 883.2
+1103.00403 901.4
+1104.02161 868.9
+1112.01294 1219.0
+1127.82031 1490.0
+1188.09497 661.2
+1198.25586 3361.8
+1503.12805 620.1
+1525.32336 982.6
+1631.87512 562.1
+1738.22278 593.5
+1879.11462 1019.9
+1879.52527 19744.0
+1880.65283 619.0
+1881.49573 988.6
+1882.33240 645.5
+1907.06238 6966.1
+1930.48730 884.5
+S	1577	1577	1879.95940793
+Z	2	3758.071
+Z	3	5636.603
+509.11661 580.5
+532.55835 1997.8
+630.37634 770.5
+646.97180 673.0
+653.22919 1259.6
+676.63861 1029.2
+731.08862 785.5
+738.60968 605.6
+795.54572 764.4
+889.69086 782.6
+981.09564 607.4
+1122.24902 643.8
+1143.70496 737.9
+1144.44800 581.8
+1198.24988 2797.6
+1198.39246 836.5
+1349.77429 610.6
+1460.35718 659.5
+1534.35840 669.3
+1571.84143 662.2
+1876.55627 731.4
+1878.75598 1249.1
+1879.52332 19544.5
+1879.78064 1989.9
+1880.20276 849.6
+1906.77771 1220.6
+1907.09363 7166.5
+1907.44202 660.0
+S	1578	1578	410.4723996
+Z	4	1637.8583
+100.96943 592.1
+104.86578 490.1
+109.46557 481.1
+113.54074 522.3
+120.80082 686.1
+121.77874 623.5
+121.79408 2306.7
+130.05435 566.3
+131.85548 583.5
+143.51663 590.4
+165.56895 560.4
+165.77478 753.5
+173.53120 550.3
+174.06296 584.3
+175.57361 617.2
+176.10556 538.6
+177.10187 1460.4
+179.34676 563.6
+186.52701 631.3
+194.91852 551.2
+198.89038 800.0
+199.16418 651.9
+199.17978 9166.8
+199.21703 1324.7
+199.24760 964.0
+199.26410 3150.9
+199.27766 610.0
+199.31491 550.3
+199.36055 1132.1
+200.18320 1157.4
+218.00819 539.3
+221.12788 41086.3
+221.15201 574.6
+222.13118 4186.3
+227.17480 2960.8
+233.16447 1482.0
+238.71509 779.6
+244.75240 496.0
+249.12280 7040.5
+249.21046 539.6
+250.12566 917.2
+251.15056 791.3
+255.11795 638.1
+255.27713 688.4
+258.14969 16719.9
+258.65125 3855.1
+265.03531 648.0
+267.37732 595.4
+269.47321 585.9
+272.13416 616.6
+297.39026 615.0
+300.16855 1036.0
+308.88608 669.3
+313.68002 652.0
+326.50885 1737.7
+326.84518 760.3
+338.65964 619.6
+343.36923 599.8
+353.16199 597.9
+362.20657 3362.9
+363.21103 1040.9
+364.18900 3617.6
+364.69189 959.0
+388.53067 6074.5
+388.86453 3250.5
+389.20044 971.0
+393.19971 852.2
+426.22495 5568.5
+426.55966 4513.1
+426.89410 860.5
+427.52023 727.7
+432.71768 993.5
+437.21219 804.5
+446.55936 549.5
+453.02267 608.0
+458.25018 1858.3
+463.91953 47812.0
+464.25394 35388.4
+464.58777 15914.9
+464.92255 3611.7
+466.73129 11916.1
+467.23438 772.5
+475.29224 1558.0
+482.00098 605.6
+489.26059 3982.4
+489.76135 2328.2
+490.25955 731.3
+513.27570 1030.2
+518.24377 1265.4
+518.74371 730.2
+521.52051 611.8
+532.54431 1579.9
+553.28497 1545.9
+553.78284 1477.4
+554.28217 1299.0
+559.77057 2911.3
+562.29016 4000.2
+562.79327 3728.2
+573.28693 1448.0
+573.78882 1934.0
+574.29602 706.8
+582.29150 97593.5
+582.79279 67652.3
+583.29419 20516.8
+583.79663 4055.4
+630.37390 849.8
+638.83374 12535.7
+639.33447 10043.0
+639.83606 3515.7
+640.34076 1250.4
+649.29279 3762.3
+650.29431 643.8
+650.35638 598.4
+676.63464 959.1
+727.37256 2140.7
+731.08093 775.7
+732.11639 608.0
+762.37830 1996.6
+764.31561 769.9
+795.55591 903.5
+849.11597 538.5
+860.72705 576.5
+875.45880 1612.8
+891.71710 623.5
+1006.30432 535.7
+1016.93793 655.2
+1057.23315 711.8
+1189.86877 613.6
+1198.22058 3752.1
+1321.13635 677.8
+1525.32068 738.7
+1594.00208 634.7
+1626.23083 626.7
+S	1579	1579	579.5035166
+Z	5	2892.47846
+146.92368 587.7
+152.40468 507.9
+161.94972 548.3
+165.77733 630.2
+176.62247 527.0
+178.98563 641.1
+186.89038 548.8
+188.25853 729.3
+188.26663 772.9
+188.27847 1282.9
+188.29224 1299.0
+188.30269 884.8
+188.31317 1082.0
+199.18994 600.6
+199.21628 764.4
+199.26016 2082.0
+199.27347 2225.3
+199.28630 559.5
+199.31172 769.5
+199.37123 979.5
+199.41113 868.7
+199.49644 691.5
+212.71867 638.8
+233.57784 719.8
+243.29118 571.4
+280.18317 572.4
+290.73340 636.0
+310.96524 504.8
+318.55173 549.7
+350.28415 649.1
+394.68109 578.7
+432.24081 8601.9
+432.57458 5134.3
+466.75189 1002.1
+514.77399 4152.7
+515.02472 4208.3
+515.27460 1178.4
+522.49792 738.8
+532.53412 2082.3
+539.64093 623.4
+543.04584 1561.1
+543.29730 887.6
+551.25830 601.7
+553.94562 618.3
+559.80420 1121.7
+560.05536 2004.6
+560.30780 1057.8
+586.20624 591.6
+587.72943 540.4
+620.55328 531.8
+629.32983 970.6
+630.40570 763.9
+639.59705 599.3
+639.80304 550.0
+648.33453 17408.4
+648.66937 15826.3
+649.00311 4646.6
+651.65771 599.0
+659.35724 725.3
+664.19208 606.5
+674.66064 681.7
+676.62701 1360.5
+681.35980 704.4
+686.02966 10666.8
+686.36426 12397.7
+686.69879 4184.1
+686.88422 566.1
+687.03302 1109.2
+688.99866 947.5
+689.33618 1657.7
+689.66559 1479.4
+694.02490 710.5
+694.66907 784.8
+700.01160 1151.4
+706.32111 4262.2
+723.72614 3019.2
+724.05945 2825.3
+724.39319 1074.9
+731.12341 689.8
+737.67841 843.6
+751.84473 1051.0
+777.31854 616.1
+783.90045 639.0
+790.88953 5459.1
+791.39166 3261.2
+791.88763 870.6
+798.55469 585.3
+819.40320 5198.4
+820.40515 1623.8
+1014.86987 604.8
+1057.23059 1027.2
+1079.06848 579.5
+1079.55615 609.6
+1085.37915 746.9
+1198.19373 3427.6
+1346.98181 616.3
+1381.01489 578.0
+1777.41553 1144.3
+1786.51416 638.3
+1878.02185 821.7
+1878.76001 1007.8
+1879.50867 19936.9
+1879.80640 3186.0
+1907.03333 6937.0
+1930.62988 808.3
+S	1581	1581	1880.00599127
+Z	2	3758.164
+Z	3	5636.743
+532.55927 1665.1
+550.88538 613.7
+552.35150 742.6
+630.37878 869.5
+676.62817 1093.9
+712.01617 677.9
+795.53192 835.5
+854.73633 625.5
+1001.69818 649.3
+1020.58783 678.5
+1020.75916 595.5
+1044.33960 733.9
+1057.22510 933.4
+1198.25378 2836.4
+1305.96167 714.2
+1525.32764 864.8
+1717.80933 560.6
+1878.61609 1174.6
+1878.99414 2220.2
+1879.49658 19725.5
+1879.96863 2439.2
+1880.38892 1454.1
+1906.77002 1438.3
+1907.10132 7633.3
+1930.53516 813.6
+S	1582	1582	410.4726121
+Z	4	1637.85915
+101.63352 544.0
+103.52890 511.4
+116.80521 572.7
+116.80865 470.1
+121.79649 2166.9
+122.82040 548.1
+125.99238 507.5
+125.99406 517.8
+130.43364 654.5
+135.97972 631.7
+141.69086 533.3
+143.78951 565.4
+153.03780 502.4
+155.02153 588.8
+157.59872 817.5
+165.77832 809.6
+171.63701 785.7
+174.59282 683.3
+176.10635 658.2
+181.23778 542.7
+182.77843 535.3
+191.13455 534.9
+198.88828 853.8
+199.16481 790.0
+199.18002 3549.2
+199.24562 1176.4
+199.26219 2653.2
+199.27567 1099.9
+199.28438 581.1
+199.36153 1003.3
+202.96263 517.2
+205.96819 587.6
+211.57433 540.4
+221.12782 20543.5
+222.13078 2215.3
+227.17320 861.9
+240.17505 598.9
+249.12347 2929.3
+258.14966 6430.4
+258.65240 1873.4
+272.17654 921.9
+272.39047 627.3
+300.17072 2095.2
+326.02383 721.4
+326.50955 1520.1
+350.28049 711.2
+356.95483 557.5
+361.54697 534.5
+362.20639 1608.6
+364.18964 1289.3
+369.24210 699.8
+369.98535 564.3
+388.52997 2422.1
+388.86438 1802.4
+393.19940 1405.5
+405.93747 702.8
+426.22736 1895.7
+426.55878 1542.1
+426.89288 774.3
+427.53558 701.4
+427.56711 823.2
+454.48215 610.8
+463.91931 24007.4
+464.25351 15502.8
+464.58829 5510.6
+464.91995 1091.6
+466.73099 20507.3
+467.23126 708.2
+469.88333 688.4
+475.29312 665.2
+476.76816 1111.4
+489.26022 1426.2
+489.76117 1335.4
+522.88159 519.7
+524.82166 645.4
+532.53375 1659.9
+549.12451 601.3
+553.28369 1082.9
+559.77014 4169.0
+562.29089 2255.8
+562.78827 1171.6
+582.29126 43569.5
+582.79272 30414.8
+583.29462 9293.4
+583.79614 2229.4
+584.29126 819.7
+630.40613 530.8
+638.83337 5175.9
+639.33490 3767.3
+639.83484 1654.5
+649.29395 1141.5
+650.95044 616.2
+669.69891 580.7
+676.62805 1431.3
+762.38074 961.9
+795.54224 685.1
+868.89398 645.4
+875.45746 1158.1
+939.98938 565.6
+969.41589 679.1
+976.31085 541.5
+1020.04150 586.9
+1188.32971 856.3
+1198.19568 3028.0
+1208.91370 553.4
+1226.92053 591.6
+1309.32092 677.1
+1392.90710 576.0
+1526.39148 604.8
+1530.55493 672.6
+1546.89221 644.1
+S	1583	1583	741.1380246
+Z	5	3700.651
+190.05927 694.8
+191.73703 570.5
+198.88603 833.2
+199.27066 2997.2
+199.28023 845.3
+199.31418 625.2
+199.36940 1132.3
+213.70581 535.1
+219.61401 579.5
+220.91728 604.1
+223.30411 663.1
+229.13049 805.2
+230.59717 540.0
+233.16499 7051.0
+234.16748 801.6
+245.86569 620.1
+246.15613 26012.6
+247.02266 676.2
+247.15999 2801.4
+249.00804 601.4
+249.09676 938.2
+253.35094 564.1
+256.30664 656.7
+261.15964 1568.3
+263.05493 601.5
+270.34241 626.1
+286.83539 603.5
+301.11154 738.2
+318.40714 571.9
+327.96085 598.1
+330.30130 631.7
+343.66409 1122.1
+361.18475 695.8
+372.17416 2495.6
+378.14145 3148.1
+390.20105 851.9
+392.14420 1068.6
+392.83246 645.1
+396.15155 5590.1
+405.91895 593.5
+421.70969 6022.7
+422.21207 2752.6
+428.90857 586.6
+441.17316 943.7
+442.15347 591.1
+462.22971 1766.4
+463.16101 835.2
+478.21921 587.0
+479.22260 3855.7
+479.72565 1410.2
+480.18619 1021.9
+480.23062 613.1
+498.19388 3999.1
+499.19601 974.4
+504.69550 506.2
+504.71231 521.5
+509.23438 1064.7
+519.24475 853.5
+520.89282 1064.3
+526.56366 2161.9
+526.90094 1955.6
+527.56512 841.1
+532.54407 1854.7
+534.73804 3138.9
+535.23846 1361.6
+538.90131 789.7
+543.74274 5989.6
+544.24457 4173.8
+549.26221 9294.4
+550.26630 2302.1
+554.24634 1821.7
+554.74860 1470.0
+563.24890 2128.3
+563.74738 1294.5
+567.25244 825.2
+568.95563 676.6
+574.95233 676.1
+582.91888 802.4
+584.28741 1647.2
+584.62048 1173.3
+597.26318 3748.7
+598.26361 827.0
+598.78265 1424.0
+607.96704 1403.4
+608.29889 2254.4
+608.62622 724.9
+612.77942 2871.5
+613.28107 1929.5
+617.22064 1251.7
+617.27667 7420.5
+617.77759 5240.7
+618.27966 1241.4
+620.59418 978.6
+620.93250 1027.3
+621.28210 756.8
+626.94080 1147.5
+627.29584 1376.1
+628.30701 3121.6
+629.31104 934.7
+656.30359 10461.5
+657.30615 4021.8
+665.29095 1310.6
+665.78693 3278.8
+666.28760 2460.8
+667.02820 719.2
+667.79242 870.6
+669.32208 950.0
+674.29968 24024.2
+674.80084 16742.0
+675.30365 7922.1
+675.80170 2196.4
+676.31152 657.0
+676.64337 1222.5
+678.64618 857.3
+684.32019 5504.4
+684.65564 5479.8
+684.98828 3447.7
+685.32892 843.2
+686.32123 6338.8
+686.65204 656.7
+687.32434 1955.2
+693.78680 797.4
+694.28198 982.1
+698.82288 1014.4
+702.33270 1204.3
+708.00043 2204.6
+708.33417 3316.2
+708.66553 1661.2
+712.28876 3962.6
+713.29474 1701.6
+714.31396 896.1
+718.27228 946.2
+720.81165 1548.6
+721.01532 697.5
+721.30371 1539.8
+731.10828 778.3
+739.37384 822.6
+757.08917 1215.2
+757.34656 1546.3
+761.59869 3829.7
+761.84473 4967.6
+762.09656 4842.0
+762.34991 1922.8
+762.60437 1119.4
+769.66455 595.6
+772.36603 1480.1
+772.86151 1260.4
+776.86865 680.4
+778.69171 3566.8
+779.02643 3562.3
+779.36072 3568.1
+779.68457 823.4
+780.34393 904.6
+780.83795 1130.1
+781.37701 1571.4
+782.37213 744.2
+782.59949 838.7
+785.02875 807.7
+785.36652 1225.2
+787.35596 1448.3
+788.01514 1283.7
+788.35156 1575.8
+788.68011 1531.8
+789.34485 19761.3
+789.84613 16128.0
+790.34808 6800.6
+790.84497 1802.1
+791.35590 2307.9
+791.60779 4840.3
+791.85907 3710.1
+792.10895 3633.3
+792.36401 1692.4
+795.86145 4314.4
+796.11145 6459.7
+796.36249 6382.2
+796.61194 4722.3
+796.85986 1528.8
+799.34528 827.1
+802.40265 874.0
+803.46478 646.8
+809.87323 970.1
+810.38135 1606.4
+811.03314 998.3
+811.37396 991.9
+811.89423 1352.0
+812.39343 1118.0
+815.85803 1723.5
+816.36060 2494.2
+816.70642 2376.4
+817.03845 2598.2
+817.37463 2774.8
+818.04468 853.1
+819.01990 630.6
+819.10547 1630.8
+819.36731 1239.9
+819.62036 1604.7
+819.70776 833.3
+819.86169 1253.4
+820.03668 2291.4
+820.36981 1461.2
+822.70850 1734.2
+823.05243 842.8
+823.32587 3135.5
+823.61938 3433.5
+823.87073 7600.2
+824.11938 6278.3
+824.36859 3997.5
+824.62219 2260.0
+824.86334 8360.7
+825.36578 6796.1
+825.70953 7217.0
+825.86279 3882.8
+826.04376 6311.2
+826.37665 6352.4
+826.71222 2341.3
+827.04236 1053.1
+827.40289 1207.5
+828.12347 4062.5
+828.37085 10759.0
+828.62042 6064.3
+828.87250 4290.4
+829.12457 1785.3
+831.38989 813.6
+837.91467 829.4
+838.39288 1123.4
+839.40082 683.7
+841.33051 4459.1
+842.33923 2549.1
+842.41284 6512.6
+843.41626 2090.8
+845.11890 1221.6
+847.12006 3366.9
+847.37415 3294.6
+847.62012 3683.9
+847.86987 1092.3
+848.37378 831.7
+850.88055 1136.6
+851.12720 1205.0
+851.37598 11072.1
+851.62592 18840.9
+851.87628 21351.6
+852.12665 16338.4
+852.37799 6682.2
+852.62531 3039.7
+852.87476 1398.4
+853.07172 854.6
+853.39532 1338.2
+853.50586 663.1
+855.37585 3349.5
+855.62439 2714.5
+855.87927 51594.0
+856.12927 99133.6
+856.37958 90244.5
+856.62976 64664.8
+856.88098 29718.0
+857.13086 12296.5
+857.38501 4399.6
+857.63580 1793.6
+858.73120 3879.9
+859.06866 5295.1
+859.40021 2749.3
+859.62646 1863.6
+859.72888 1340.1
+859.87952 5797.3
+860.12830 3614.8
+860.38129 72597.5
+860.63190 118314.7
+860.79407 956.0
+860.88214 111639.5
+861.13239 78851.8
+861.38312 40543.7
+861.63458 14898.2
+861.88416 5050.7
+862.13531 1358.4
+863.30933 1001.2
+864.37891 2372.4
+864.63361 814.1
+864.88239 2208.7
+865.34247 1426.7
+866.06024 2244.5
+866.38568 914.7
+867.38245 859.1
+871.73181 5302.7
+872.06500 6394.3
+872.40076 4323.0
+872.73309 2776.0
+873.07373 1273.4
+875.92212 11111.6
+876.42383 12351.8
+876.92487 7190.7
+877.42352 2704.2
+879.89417 971.3
+880.14044 1930.8
+882.37506 3986.8
+882.87445 1889.2
+883.36804 938.0
+884.14886 2901.0
+884.40088 6897.6
+884.64917 7891.9
+884.90118 4178.3
+885.15033 2783.0
+885.39832 1272.1
+886.89569 2450.5
+887.39105 3105.4
+887.89905 1484.7
+888.65192 14658.7
+888.90289 28947.7
+889.15283 27136.7
+889.40369 18389.5
+889.65454 11542.1
+889.90619 4737.1
+890.29224 691.8
+894.92401 817.4
+895.89874 6520.8
+896.07501 1325.7
+896.40167 6320.6
+896.74438 1037.5
+896.90094 3131.8
+897.40137 1570.9
+901.74481 3189.3
+902.07959 2359.8
+902.41632 2213.6
+902.74133 1028.4
+909.41406 1432.7
+910.88531 2928.8
+911.43945 14001.0
+911.94232 14395.0
+912.44440 7094.1
+912.61670 642.4
+912.94415 2743.9
+922.41479 1462.8
+922.91296 1110.3
+927.74237 917.5
+930.39606 901.8
+930.88989 1538.9
+931.42047 1542.7
+931.91742 1819.7
+932.40717 669.3
+933.74139 987.1
+934.06726 1172.7
+939.39612 3518.1
+939.94958 7077.8
+940.45398 6975.4
+940.95624 5200.4
+941.39838 1013.3
+941.47467 1237.1
+941.74915 1366.2
+947.41901 924.6
+947.75287 1550.4
+952.44690 1301.7
+953.09229 1274.4
+953.70959 855.5
+957.43738 5373.5
+958.43781 3329.0
+958.75854 1029.3
+959.44489 1833.2
+963.89990 733.1
+964.09839 1294.2
+964.43268 2498.8
+964.76489 1673.0
+965.08636 949.2
+968.46307 6209.1
+968.96454 5818.7
+969.46582 3917.1
+969.97644 1593.3
+970.40186 705.4
+973.09802 911.7
+973.43347 3348.4
+973.76025 972.5
+973.93616 1131.4
+974.90826 824.9
+975.41174 2185.0
+975.91760 959.5
+977.43878 874.3
+979.42511 2169.1
+979.76349 1917.2
+980.10950 1388.5
+980.42786 989.6
+982.77307 1999.5
+983.10553 2889.1
+983.43610 1706.2
+987.10187 1043.7
+988.40015 4075.2
+989.39856 1175.5
+990.39471 1378.5
+996.44446 2311.2
+1003.09882 799.0
+1003.44781 1212.4
+1003.78015 1083.9
+1005.44666 959.9
+1009.12134 3282.8
+1009.45386 7175.5
+1009.78827 7765.8
+1010.12213 4919.6
+1010.45648 2125.2
+1015.12372 15818.8
+1015.45898 25894.9
+1015.79358 24166.0
+1016.12793 12499.0
+1016.46002 5748.4
+1016.79437 2408.1
+1016.96906 1338.4
+1017.10846 1506.1
+1017.47632 946.5
+1017.96930 1408.7
+1022.77631 1969.5
+1025.97546 28875.2
+1026.47705 29399.0
+1026.97778 18438.7
+1027.47961 7699.9
+1027.98669 2273.2
+1037.45349 1316.7
+1037.96606 1008.8
+1038.46338 965.7
+1046.96704 1041.7
+1047.45898 996.7
+1047.99475 851.4
+1048.42969 802.7
+1053.11719 2911.8
+1053.44495 6083.5
+1053.78491 6420.3
+1054.11694 3811.7
+1054.45105 1588.4
+1054.79443 972.4
+1057.23315 882.3
+1059.12097 11314.6
+1059.45361 24237.3
+1059.78748 22304.8
+1060.12061 13618.6
+1060.45532 7981.6
+1060.78870 2633.7
+1061.12610 1181.2
+1061.49475 21000.9
+1061.99585 23171.1
+1062.49683 13381.3
+1062.99670 6325.9
+1063.49658 1935.0
+1065.12219 11644.0
+1065.45728 18960.2
+1065.79272 18357.4
+1066.12476 10334.1
+1066.45923 6030.3
+1066.79382 2490.4
+1067.14172 1172.4
+1085.41394 1253.1
+1086.48486 3882.3
+1087.48315 2329.9
+1088.48303 1111.9
+1094.48132 1683.6
+1094.97131 2105.6
+1095.47803 1192.4
+1096.81775 1238.9
+1097.14636 2251.1
+1097.48059 1855.0
+1097.81750 1521.8
+1098.15808 1557.2
+1098.47400 820.0
+1101.48572 1428.1
+1102.43811 5926.4
+1102.81641 4144.7
+1103.01245 7405.5
+1103.15222 4325.0
+1103.51563 6777.5
+1103.81982 5497.1
+1104.01587 4059.4
+1104.15564 2654.2
+1104.52710 1670.2
+1107.48083 4309.7
+1108.48511 2774.0
+1109.46375 830.8
+1112.01819 6223.4
+1112.52039 5089.6
+1113.02112 4320.2
+1113.51892 2138.9
+1114.03040 875.8
+1115.48450 1510.7
+1115.98547 1100.2
+1116.50928 711.0
+1125.48535 3420.0
+1126.49390 2342.1
+1127.47119 818.8
+1165.00940 1074.8
+1168.03210 1350.9
+1176.54065 4284.0
+1177.04248 4634.1
+1177.54077 4654.5
+1178.03625 857.0
+1198.21362 3302.8
+1213.47302 2809.0
+1214.47522 3113.4
+1215.47644 783.1
+1223.61023 802.3
+1224.54260 1701.5
+1225.55286 1741.8
+1229.54675 850.1
+1230.55017 1068.2
+1231.48401 2568.4
+1232.48694 1495.4
+1233.56482 2616.7
+1234.06018 4914.5
+1234.56384 2987.0
+1235.05994 1329.5
+1236.52563 741.0
+1237.52173 1052.0
+1240.06104 787.5
+1290.04712 1432.5
+1290.54980 2949.4
+1291.05066 2494.3
+1299.06335 1067.3
+1299.55884 1391.9
+1300.05542 1157.1
+1300.55945 858.3
+1332.52649 2150.5
+1333.52209 1515.2
+1348.12683 765.8
+1348.59082 960.6
+1349.62537 1025.6
+1369.09229 1114.1
+1377.08960 774.9
+1390.61487 1067.5
+1391.10449 1296.9
+1391.60461 1983.6
+1392.13281 1406.5
+1395.64990 1653.3
+1396.65149 1309.7
+1399.60437 4533.0
+1400.11267 5919.3
+1400.61646 5931.2
+1401.11548 1980.8
+1403.56116 1168.6
+1404.55896 785.4
+1525.36316 883.4
+1878.47754 944.1
+1879.54297 20251.1
+1880.21899 1032.4
+1880.48523 679.5
+1906.78296 7251.8
+1918.72192 820.1
+1930.54431 1059.6
+S	1585	1585	740.7497326
+Z	5	3698.70954
+193.19728 610.4
+198.88701 1087.3
+199.17905 863.0
+199.20412 554.8
+199.24757 1349.6
+199.27606 2741.3
+199.28781 1482.2
+199.37383 853.5
+233.16516 6096.3
+246.15627 19480.4
+247.15962 1999.8
+249.09796 774.2
+261.15933 1120.5
+268.15948 671.5
+271.83276 612.9
+301.11447 693.0
+308.87292 643.8
+326.07220 564.7
+329.53964 644.9
+343.66367 950.5
+369.78845 619.0
+372.17502 1290.4
+372.67654 762.2
+373.14832 804.4
+378.14127 3258.7
+392.14731 1148.6
+396.15112 3788.2
+412.70328 936.8
+421.70889 3798.3
+422.21201 1128.5
+441.17371 1217.4
+462.23148 1338.2
+476.17532 657.8
+479.22223 2446.0
+479.72263 1188.2
+480.18274 1172.3
+498.19394 3570.0
+499.19522 637.4
+503.79340 565.4
+506.19101 809.0
+519.25031 695.0
+526.57013 1448.7
+526.89825 859.2
+532.57257 1677.2
+534.73920 1382.5
+535.23993 1035.7
+536.25690 559.6
+543.74341 5403.2
+544.24402 3876.7
+549.26257 9480.1
+550.26825 2225.0
+550.89801 613.1
+553.08875 573.8
+554.24786 1167.5
+563.24518 1492.5
+563.74683 1183.0
+567.25464 792.0
+579.24890 1311.3
+584.28223 1415.8
+584.61884 1622.2
+588.28119 611.9
+597.26105 3589.4
+598.26917 1068.1
+607.95428 2686.9
+608.29474 2978.0
+608.63312 889.7
+612.77936 3276.5
+613.28491 1922.5
+613.77930 928.1
+617.21875 1058.0
+617.27686 7553.4
+617.77832 4812.1
+618.27924 1740.4
+620.59814 677.7
+626.60413 810.3
+626.96405 2623.8
+627.30164 2083.0
+627.63477 1094.2
+628.30792 2813.0
+629.30951 1133.2
+638.29529 990.6
+645.97412 1059.5
+646.31409 793.6
+656.30365 12913.3
+657.30792 4586.0
+665.29242 914.1
+665.78864 3477.5
+666.28809 1260.3
+669.32123 1534.0
+669.82379 1481.0
+674.29993 28161.8
+674.80054 18582.5
+675.30255 8496.8
+675.80591 2179.4
+676.63623 665.0
+678.64740 692.1
+684.32013 6959.8
+684.65424 6971.1
+684.98859 4818.7
+685.32312 2043.1
+686.32153 6042.8
+687.00458 816.1
+687.32220 2503.4
+690.29193 750.7
+693.78394 1026.5
+696.29480 1485.2
+697.29773 797.6
+698.32764 1119.0
+699.00232 1211.0
+699.33185 1046.1
+702.32330 944.8
+702.67212 941.6
+705.29797 654.9
+707.25854 602.9
+707.99890 4450.0
+708.33484 5047.6
+708.66748 2892.7
+709.00348 2150.7
+709.32721 655.5
+709.68329 665.2
+712.28937 4654.3
+713.29382 1258.4
+714.32288 1759.5
+718.27863 995.1
+731.07355 859.3
+743.35022 1227.5
+757.09418 1546.3
+757.34723 2291.6
+757.59369 1981.1
+757.84283 1265.9
+758.09436 1938.7
+761.59570 9401.5
+761.84674 15681.0
+762.09705 12085.0
+762.34900 6042.7
+762.59894 3777.8
+764.03162 717.4
+769.36298 820.3
+769.69366 938.0
+770.03064 765.0
+772.36426 1109.9
+772.86267 1091.1
+773.35638 984.8
+778.69403 4799.0
+779.02521 4956.5
+779.36047 4793.1
+779.69049 1613.2
+780.83740 1616.0
+781.37189 2097.7
+782.38013 1065.2
+784.37775 703.0
+784.69531 2217.9
+785.02856 2571.2
+785.36542 1572.6
+787.60577 720.4
+788.01813 2284.7
+788.34430 1866.0
+788.43213 1302.7
+788.68317 2051.0
+789.34515 29303.1
+789.84662 22491.7
+790.34747 11049.2
+790.84918 4166.8
+791.35425 3638.8
+791.61139 4036.8
+791.85834 4848.8
+792.11060 2999.9
+792.35913 1464.7
+795.54126 960.4
+795.85938 4403.6
+796.11169 6808.6
+796.36298 9158.1
+796.61041 4002.5
+796.86450 1912.6
+797.11310 929.1
+800.87091 1236.5
+802.36987 940.5
+809.87756 1228.1
+810.37585 1745.7
+811.37567 1457.6
+811.89734 1472.6
+812.39862 978.8
+812.90717 1085.8
+815.85217 1729.1
+816.35901 1931.4
+816.70618 2695.4
+816.85303 1710.6
+817.04120 3349.2
+817.37604 2733.5
+818.79279 1536.9
+819.36169 1554.8
+819.62067 1773.0
+819.70447 1160.9
+819.86066 1070.8
+820.03986 1576.0
+820.36969 1940.0
+820.71033 1100.3
+823.04767 1961.9
+823.35431 3134.8
+823.61884 5457.8
+823.87030 9095.2
+824.12006 7440.1
+824.36871 4394.3
+824.62543 2354.1
+824.86353 10997.5
+825.36462 8386.8
+825.70898 9547.4
+825.86615 4067.1
+826.04425 12879.7
+826.37708 8391.0
+826.71210 3000.2
+827.03436 951.5
+827.40039 1869.3
+828.12274 4668.7
+828.37146 13306.8
+828.62244 14203.9
+828.87268 9239.2
+829.12354 3957.5
+829.37299 2617.9
+831.37073 1378.5
+831.88593 634.8
+838.41418 703.1
+841.33411 4531.0
+842.41034 9048.5
+843.41498 3172.6
+844.41101 1065.1
+845.12915 932.7
+846.87195 1490.2
+847.11871 1973.9
+847.37231 3794.4
+847.62360 2493.1
+847.86877 1543.4
+848.13220 940.8
+849.35999 1151.6
+851.11462 1030.1
+851.37689 13027.3
+851.62640 18719.0
+851.87689 22707.1
+852.12738 15621.0
+852.37897 7564.9
+852.62402 1994.7
+852.87244 1313.2
+853.38544 1633.8
+853.74792 848.6
+854.35492 1204.4
+855.01672 1063.6
+855.12158 1029.5
+855.37427 2953.0
+855.62665 5393.9
+855.87964 52601.0
+856.12982 100911.6
+856.37982 102338.7
+856.63037 68031.1
+856.79376 704.1
+856.88177 30962.4
+857.13208 15677.4
+857.38220 5273.4
+857.64056 2340.3
+857.89526 1159.4
+857.98480 872.1
+858.23401 1268.5
+858.40900 612.9
+858.48187 799.8
+858.60944 812.6
+858.73334 5376.9
+859.06744 8716.3
+859.29126 749.7
+859.40027 6748.6
+859.62933 3410.2
+859.73792 2573.6
+859.88025 10415.7
+860.12958 8495.5
+860.38226 107843.9
+860.47729 1128.3
+860.63226 175121.1
+860.79041 1301.5
+860.88245 171646.7
+861.13251 122628.7
+861.38318 58498.2
+861.63391 28934.4
+861.88507 10094.1
+862.13269 3250.3
+863.05627 977.1
+863.29413 1158.6
+864.12866 2886.7
+864.38361 6184.9
+864.63403 5827.9
+864.88391 4347.4
+865.13019 1520.5
+865.32184 1964.4
+865.72632 1529.7
+866.06085 1149.4
+866.40039 1147.1
+866.91138 804.0
+867.41382 1143.3
+871.73157 5413.9
+872.06714 9151.7
+872.40021 8132.1
+872.73590 3889.1
+873.07098 1122.9
+875.92279 15179.9
+876.42480 12226.6
+876.92480 8261.6
+877.42767 2840.5
+879.63629 965.3
+879.89673 1124.8
+880.39868 1560.9
+882.37396 5338.6
+882.87701 2469.0
+883.37671 2396.8
+884.14948 4404.5
+884.39935 7600.7
+884.64838 7836.3
+884.90186 5185.4
+885.15350 3782.0
+885.39410 1174.9
+885.65613 1192.1
+886.42712 671.6
+886.89355 3712.9
+887.39575 4060.4
+887.89276 2263.4
+888.40558 767.3
+888.65204 20921.7
+888.90295 31893.8
+889.15302 29915.7
+889.40460 22277.2
+889.65424 11361.0
+889.90570 4287.6
+890.14642 1073.8
+891.40692 1124.1
+895.90027 7094.7
+896.40088 7640.8
+896.89929 3544.0
+897.39807 1415.0
+897.95337 806.3
+901.74457 3588.7
+902.08105 5677.5
+902.41888 3611.3
+902.74689 2429.8
+903.08972 818.3
+909.40747 1096.7
+910.88977 4888.0
+911.43951 18279.9
+911.94244 18383.1
+912.44519 10399.6
+912.94525 3543.3
+915.41376 1350.1
+915.74695 711.0
+922.41016 1361.8
+922.91418 1952.1
+923.41534 1128.3
+926.18488 776.2
+927.40887 910.2
+927.73792 1456.4
+928.07239 1498.5
+930.39557 1485.8
+930.88257 852.0
+931.42285 2268.2
+931.91901 2003.5
+933.40259 916.3
+933.74542 1598.7
+934.08582 1181.5
+939.39471 6384.8
+939.95056 10228.2
+940.45465 8323.6
+940.95605 5475.5
+941.46649 1734.1
+941.75000 1372.2
+942.08643 1092.8
+945.09387 1038.9
+947.08527 985.2
+947.42163 2219.4
+947.76270 1461.8
+948.08051 1178.6
+952.44739 1564.0
+952.94263 1206.3
+953.43274 1541.2
+953.75934 1250.4
+954.09070 2765.6
+957.43823 8171.7
+958.08978 1485.1
+958.44098 4324.5
+958.75580 1515.9
+959.44598 1936.8
+963.77002 1632.1
+964.09937 2536.5
+964.43585 2241.8
+964.76379 1800.6
+965.09833 1279.5
+968.46045 6606.4
+968.96375 7362.8
+969.46503 4039.6
+969.96515 2341.0
+970.41101 1091.9
+972.93890 1793.3
+973.08679 1032.2
+973.42932 3603.2
+974.09265 885.8
+974.45294 1133.7
+974.91290 1813.2
+975.41852 2288.2
+977.10486 927.9
+979.42950 1628.0
+979.76520 1063.2
+980.45013 1982.7
+980.77466 1016.6
+981.94318 1194.7
+982.43341 1052.5
+982.77338 2015.6
+983.11182 2848.7
+983.43146 1164.0
+983.78088 1636.0
+986.78137 1626.2
+987.11017 1516.4
+987.95959 890.8
+988.40125 4693.7
+989.39948 2527.9
+996.44220 2102.5
+997.44720 1147.4
+1003.45319 1267.9
+1005.12061 837.7
+1005.46130 1315.3
+1009.12067 3645.9
+1009.45435 9609.7
+1009.78961 9835.3
+1010.12213 5987.8
+1010.46106 2974.2
+1015.12469 20818.1
+1015.45929 32161.4
+1015.79358 22906.3
+1016.12695 16036.4
+1016.46045 6466.8
+1016.78088 2904.4
+1016.97302 1227.0
+1017.12164 1455.7
+1017.47052 1547.0
+1017.97217 1098.8
+1022.44470 2111.9
+1022.77325 1365.8
+1025.97632 37479.6
+1026.47717 39647.5
+1026.97913 24715.9
+1027.48242 10809.7
+1027.98169 3391.2
+1029.97461 1148.7
+1037.44885 1238.4
+1037.95776 2517.6
+1038.45789 966.1
+1046.45251 1048.9
+1046.97314 1253.6
+1047.44055 1031.3
+1047.77832 2314.2
+1051.14612 880.4
+1052.49670 971.3
+1053.11682 2992.6
+1053.44482 7098.6
+1053.78442 5874.2
+1053.97302 1043.1
+1054.11731 4700.7
+1054.44812 2675.5
+1054.78271 1610.6
+1057.23938 1160.5
+1059.11975 13534.9
+1059.45337 26619.6
+1059.78735 21604.1
+1060.12146 16496.7
+1060.45593 7060.3
+1060.79236 3018.3
+1061.12866 1520.7
+1061.49597 27742.8
+1061.99585 30418.3
+1062.49719 19552.4
+1062.99805 7807.5
+1063.50049 2403.0
+1065.12268 13047.5
+1065.45740 24739.7
+1065.79138 21528.7
+1066.12561 12526.7
+1066.46118 5400.9
+1066.80151 1890.9
+1069.45984 814.2
+1080.15063 1133.8
+1084.43005 936.0
+1085.40393 1477.6
+1086.38086 974.0
+1086.48926 5484.3
+1087.47827 2497.6
+1092.47595 885.0
+1094.02173 1177.2
+1094.47632 1709.5
+1094.97839 1870.6
+1095.55530 1956.4
+1096.54590 908.0
+1097.14685 1403.3
+1097.48059 3075.0
+1097.82434 1700.5
+1101.48486 2135.2
+1101.97815 1453.3
+1102.43835 8343.3
+1102.81836 3641.9
+1103.01184 8562.1
+1103.15076 7133.6
+1103.41614 3366.1
+1103.52209 8800.4
+1103.82239 3321.7
+1104.01904 5770.2
+1104.15625 2259.8
+1104.44055 767.3
+1104.52515 2166.8
+1107.48486 10487.2
+1108.48730 7352.2
+1109.49792 1959.4
+1112.01917 7521.2
+1112.51904 9067.9
+1113.02185 5287.0
+1113.51685 2840.1
+1115.48645 1466.9
+1115.97583 1421.6
+1116.49048 1115.1
+1125.48523 3489.9
+1126.48352 2357.7
+1165.51331 1050.2
+1166.58606 1351.2
+1168.03613 1196.9
+1168.52612 1420.6
+1169.02954 957.7
+1176.54004 5732.2
+1177.03857 8524.3
+1177.54468 4462.0
+1178.04041 3093.7
+1198.28149 3518.7
+1213.47339 3079.0
+1214.47058 2322.2
+1215.48730 932.7
+1224.54834 2695.2
+1225.05640 2007.1
+1225.55750 1659.2
+1226.05029 1019.3
+1231.48218 3787.7
+1232.48486 1979.9
+1233.56128 5593.7
+1234.06482 5516.1
+1234.56042 5611.8
+1235.06274 1125.0
+1236.52307 1867.3
+1237.53052 1700.5
+1280.62842 851.3
+1281.54980 679.5
+1282.01648 1142.2
+1285.07129 760.7
+1290.04810 2422.8
+1290.54956 2889.7
+1291.04785 1975.6
+1291.53906 1371.8
+1299.04700 1477.9
+1299.55798 1982.7
+1300.04041 941.7
+1332.53113 3550.3
+1333.52698 2047.2
+1340.08569 1417.9
+1347.59521 1946.1
+1348.58496 1239.8
+1349.06750 863.4
+1351.57947 1612.1
+1352.07568 857.0
+1355.61218 837.5
+1390.59888 1213.8
+1391.10413 2411.2
+1391.60010 3507.1
+1392.10034 1996.4
+1395.65002 3855.9
+1396.65100 2799.2
+1399.61169 4527.7
+1400.11230 7775.1
+1400.61108 5628.2
+1401.12805 2185.5
+1401.63184 1199.4
+1403.56702 1170.4
+1404.58411 1133.2
+1489.10278 691.3
+1710.35974 658.1
+1877.29236 987.3
+1877.92578 905.1
+1878.98633 1221.5
+1879.22058 3134.6
+1879.51953 19226.0
+1880.08289 1365.4
+1881.27576 755.4
+1881.95642 724.5
+1906.52502 1257.7
+1906.84851 7007.6
+1918.71460 980.3
+S	1586	1586	925.6836421
+Z	4	3698.70327
+241.51196 642.3
+246.84962 573.3
+271.69507 791.2
+271.77356 542.9
+273.04901 762.5
+280.17950 633.6
+284.32495 642.2
+301.97446 638.7
+325.19995 790.3
+343.66251 1267.0
+372.17520 1000.4
+378.14093 2596.7
+380.20670 893.0
+392.14423 980.8
+396.15344 1225.9
+412.70529 756.6
+421.70770 2496.4
+422.20911 1198.9
+423.16010 920.4
+427.54605 630.6
+441.17233 1545.8
+462.23108 1463.4
+463.15518 821.8
+479.22186 839.8
+482.23914 1464.0
+498.19360 3396.7
+519.24701 1427.4
+525.21216 763.9
+532.54938 1816.4
+537.23108 944.6
+543.21985 944.2
+549.14191 679.9
+549.26147 10943.8
+550.26410 2554.7
+573.59198 617.2
+579.25049 1547.8
+582.75476 639.8
+597.26141 4032.0
+610.30115 945.5
+611.27759 1800.4
+613.27783 779.6
+617.28015 1111.5
+628.30804 9846.4
+629.31073 3132.8
+637.77435 626.5
+638.29187 1744.5
+656.30200 25874.3
+657.30566 8010.4
+658.30914 2183.7
+674.29987 1995.4
+674.79822 1495.6
+675.29413 729.1
+676.64642 1234.5
+686.32025 8944.1
+687.32495 3252.6
+698.32605 1362.6
+698.82690 827.2
+712.29095 1545.6
+716.30396 639.4
+725.32458 1159.5
+732.96472 666.9
+743.34198 30211.6
+743.53088 705.8
+744.34454 9752.1
+745.34772 2468.1
+747.37262 1503.5
+747.87299 2296.5
+753.36096 1404.5
+757.85315 745.4
+758.34436 849.9
+761.58466 906.0
+761.84235 1309.7
+788.01300 899.3
+788.95081 566.8
+789.34998 876.2
+789.83276 650.4
+791.35712 1357.4
+791.60974 2040.6
+791.86060 1964.6
+794.39740 701.7
+795.54419 1045.8
+795.86157 1458.6
+796.11200 2034.1
+796.36346 1712.3
+796.61200 875.9
+810.38025 931.1
+810.87335 638.2
+811.89685 1204.5
+812.39465 1448.3
+817.03375 1100.7
+823.33289 580.1
+823.61115 1918.3
+823.87512 1190.7
+824.11371 1905.6
+824.86200 3816.2
+825.36499 4129.8
+825.86365 1124.1
+828.11542 837.0
+828.36090 960.3
+828.62439 1026.7
+831.37579 704.8
+838.44238 1607.4
+841.33228 1007.6
+842.40955 12217.2
+843.41290 4731.0
+844.41785 1065.7
+848.88354 750.0
+855.87830 1171.0
+856.13153 3916.6
+856.37689 2785.0
+856.62970 1758.8
+856.88849 692.9
+858.73022 2109.1
+859.06128 2190.2
+859.39789 1325.8
+860.37885 1476.4
+860.63007 3599.9
+860.88330 2901.2
+861.13013 1397.4
+861.38190 827.8
+867.40125 822.1
+871.72894 3511.2
+872.06458 4633.7
+872.39984 2979.1
+872.73419 1892.4
+875.92236 5507.6
+876.42505 5437.8
+876.92493 2165.2
+886.89014 939.8
+889.14294 1160.0
+895.91040 873.3
+896.07428 917.1
+901.73389 1155.6
+902.07898 2113.2
+902.93524 1553.6
+957.43719 8553.2
+958.43909 3791.3
+959.44263 974.9
+967.47571 1666.7
+968.45667 927.9
+968.96112 1790.7
+969.45044 970.6
+973.42871 1161.0
+973.76062 1947.4
+974.91132 1198.1
+975.41333 1447.8
+979.43237 1434.9
+982.77045 1017.4
+983.10162 2466.2
+983.44489 2672.3
+988.40295 933.6
+996.44312 2330.9
+997.44031 1669.4
+999.43689 702.5
+1000.44116 579.3
+1003.44836 1555.1
+1003.77997 1270.4
+1004.11755 1029.2
+1009.12189 3644.0
+1009.45258 7702.0
+1009.78625 6874.1
+1010.11987 5096.1
+1010.45209 1082.4
+1015.12366 27651.8
+1015.45752 37225.7
+1015.79211 30203.8
+1016.12628 13169.0
+1016.45880 7146.9
+1016.80060 2005.2
+1016.96454 790.1
+1017.12604 1154.2
+1020.85394 815.0
+1022.44720 1375.2
+1022.78809 992.7
+1024.69531 709.6
+1025.97412 15174.0
+1026.47644 15652.2
+1026.97742 7463.6
+1027.47729 3507.6
+1027.98254 922.1
+1041.48267 818.0
+1041.80676 2713.3
+1042.14880 968.6
+1042.47583 1796.0
+1044.96948 815.1
+1046.46924 922.3
+1050.80396 3059.1
+1051.14160 4235.4
+1051.47644 3963.4
+1051.80420 2543.8
+1052.13831 874.4
+1052.49048 1234.6
+1052.98560 827.1
+1054.80908 2068.2
+1055.13855 4383.3
+1055.47107 2494.6
+1055.81274 2560.4
+1059.12024 1168.6
+1059.44775 3207.9
+1059.78650 1340.3
+1059.94165 831.7
+1060.81287 3023.5
+1061.14478 4066.6
+1061.49097 8798.7
+1061.80920 1229.3
+1061.99463 8087.4
+1062.14771 1008.8
+1062.49451 4833.1
+1062.99951 992.4
+1065.11853 921.9
+1065.46313 1587.7
+1068.47583 2217.4
+1069.46936 869.8
+1074.14148 1309.6
+1074.47705 773.5
+1079.81860 2006.4
+1080.14844 3310.0
+1080.47998 2581.6
+1080.81348 1418.0
+1086.47803 9968.5
+1087.48145 5445.8
+1088.48621 2118.7
+1090.00293 842.5
+1090.99951 704.6
+1095.53870 2152.7
+1096.54419 1504.9
+1097.83484 687.9
+1098.15173 1354.8
+1098.48462 1074.0
+1099.16980 1029.2
+1101.47925 3346.7
+1101.98438 2985.1
+1102.51831 1228.4
+1103.01111 3004.7
+1103.51929 3747.3
+1103.81555 1443.9
+1104.02246 3077.0
+1104.50757 1044.5
+1109.71619 759.7
+1112.01563 3608.8
+1112.51807 4176.7
+1113.01672 2014.8
+1125.48267 2722.1
+1126.48767 1505.7
+1137.02258 824.0
+1137.17639 1002.0
+1139.83972 1300.6
+1140.16370 2996.4
+1140.49939 3795.1
+1140.83142 3490.4
+1141.16809 2814.4
+1141.49402 1925.2
+1141.82971 1555.0
+1145.83496 8015.8
+1146.16870 12507.3
+1146.50244 15538.3
+1146.83582 9847.4
+1147.17346 7884.6
+1147.50745 3915.6
+1147.83911 2417.9
+1148.17554 1069.9
+1151.83923 55880.0
+1152.17346 98773.8
+1152.50696 84644.8
+1152.84143 53039.5
+1153.17651 25460.8
+1153.50940 9627.5
+1153.84045 2662.1
+1154.19312 1416.0
+1154.54871 903.9
+1157.00952 680.5
+1165.01587 891.1
+1165.51929 2349.9
+1166.02234 831.6
+1166.58032 2854.5
+1167.51160 1238.8
+1167.60596 738.0
+1168.03430 2577.1
+1168.52063 1911.8
+1169.03455 871.3
+1170.50366 844.1
+1175.84753 1184.2
+1176.19287 1376.7
+1176.53528 10496.0
+1177.03992 11397.2
+1177.54089 7336.5
+1178.03943 3821.1
+1178.55127 1136.4
+1198.23755 3062.9
+1206.25293 683.5
+1212.55566 678.3
+1223.61084 904.2
+1224.53772 2410.8
+1225.04688 2110.0
+1225.55078 3241.3
+1226.05664 1098.8
+1229.53796 1365.4
+1230.03943 1401.8
+1230.53723 795.0
+1231.46985 789.4
+1233.55640 13012.0
+1234.05981 12010.4
+1234.55713 9851.0
+1235.06348 5825.2
+1235.55933 3708.2
+1239.04773 960.8
+1239.54907 1158.4
+1240.54272 1115.5
+1248.05151 2709.3
+1248.55505 3354.7
+1249.05847 3238.8
+1249.55872 1290.1
+1283.06140 1068.9
+1291.57996 902.8
+1292.06653 871.9
+1293.09180 765.2
+1293.56799 725.4
+1298.58643 1279.6
+1307.09314 3293.3
+1307.59167 4101.1
+1308.09302 3274.2
+1308.60364 1352.7
+1323.57288 720.4
+1324.08313 765.2
+1337.63391 1741.3
+1343.07983 1567.4
+1347.59253 3462.2
+1348.59155 2585.7
+1349.59460 840.2
+1351.08191 1539.4
+1351.58423 2409.9
+1352.08313 1596.4
+1363.10938 736.7
+1365.57324 768.6
+1371.61646 2825.9
+1372.11499 6023.0
+1372.61414 3521.9
+1373.12720 1937.3
+1381.60730 815.5
+1382.09583 1174.5
+1382.59058 2830.8
+1383.10876 1011.1
+1390.60339 3686.1
+1391.10413 8599.5
+1391.60339 6258.5
+1392.10205 3385.5
+1392.61023 1506.5
+1395.64673 5470.6
+1396.64929 4513.8
+1397.65259 2152.4
+1399.60718 19507.4
+1400.10950 28829.6
+1400.61060 19471.6
+1401.11218 11075.1
+1401.61951 4633.4
+1402.10571 1044.3
+1403.56189 4071.2
+1404.57239 2716.8
+1420.11035 874.1
+1420.62646 2613.0
+1421.11719 2736.2
+1421.63037 1982.8
+1422.11194 1281.3
+1429.12842 16029.7
+1429.62927 19392.9
+1430.13196 17498.2
+1430.63025 7863.3
+1431.13721 3754.3
+1431.64148 1160.0
+1435.10791 793.5
+1445.63623 895.8
+1466.69824 1326.0
+1467.67639 1258.5
+1468.13770 1763.1
+1468.63074 1674.9
+1469.13782 1822.0
+1469.65442 908.1
+1470.16162 1363.5
+1471.17371 854.2
+1471.68420 734.7
+1473.65393 1623.6
+1474.17212 1641.9
+1474.66309 1390.3
+1477.63611 850.5
+1478.66309 5824.5
+1479.16553 7847.2
+1479.66602 6545.1
+1480.17151 4136.6
+1480.66919 1317.1
+1481.15747 857.2
+1498.66357 1305.0
+1499.16931 1500.5
+1507.17188 4899.3
+1507.67493 6423.8
+1508.17285 4635.3
+1508.67371 3597.5
+1509.17493 1431.6
+1522.18909 912.5
+1522.70667 903.6
+1523.16162 1291.0
+1525.36096 728.7
+1549.72327 805.6
+1588.40771 692.7
+1597.70752 868.9
+1648.69910 1253.0
+1667.35938 919.9
+1696.75769 1590.3
+1697.76379 1271.1
+1861.81445 925.6
+1870.58521 623.5
+1877.85925 1156.4
+1878.87451 1111.0
+1879.54382 20137.8
+1907.05481 7650.1
+1930.56030 975.1
+S	1587	1587	741.5494246
+Z	5	3702.708
+191.00134 580.3
+198.88863 1067.0
+199.17432 1272.0
+199.20369 681.0
+199.23862 781.1
+199.25177 870.2
+199.27159 2501.4
+199.28195 1359.9
+199.29688 770.5
+199.34912 570.7
+199.36983 888.8
+203.42763 603.7
+205.93977 576.4
+212.35490 635.4
+218.50972 657.2
+219.84979 629.0
+225.72623 615.7
+229.13068 1107.3
+231.39478 686.1
+233.16507 8263.5
+233.55174 773.9
+234.16893 1192.9
+246.15631 28275.2
+247.15999 2991.5
+249.09819 1485.2
+261.15991 1788.2
+269.00577 640.2
+269.89697 657.0
+284.68689 655.8
+299.76508 639.1
+332.61157 638.1
+342.23929 679.2
+343.66464 2251.2
+344.16852 1087.4
+350.27832 647.5
+351.67267 594.7
+372.17706 2211.6
+373.15295 869.9
+376.68854 575.7
+378.14099 4756.2
+384.90707 685.3
+392.14569 753.2
+393.46252 629.4
+396.15112 5296.0
+398.77896 650.1
+421.70956 5216.9
+422.21051 2003.6
+422.70856 725.4
+441.17712 1360.8
+443.92987 635.8
+452.89850 587.9
+453.20834 763.5
+462.23172 2199.9
+470.19135 673.3
+470.21170 598.0
+474.89600 633.2
+479.22330 3789.0
+479.72354 2159.0
+480.18329 1266.5
+483.24872 805.6
+498.19421 3688.0
+519.24176 956.1
+520.56598 719.1
+520.89789 906.3
+526.56451 2024.6
+526.89978 2867.1
+527.23370 1161.2
+531.77118 589.6
+532.63635 2007.3
+534.28271 575.3
+534.73871 2921.6
+543.74384 7194.0
+544.24371 4814.2
+544.74512 1014.1
+544.91125 794.8
+549.10236 826.2
+549.26300 11531.4
+550.26782 1678.3
+554.24463 2343.4
+554.74701 1379.2
+555.24780 871.9
+563.24225 1646.9
+563.74701 1289.3
+567.25116 1087.6
+575.28094 1009.4
+579.25128 1475.1
+583.26111 918.1
+584.28650 2965.1
+584.61664 1953.6
+584.94952 938.0
+597.26294 4811.1
+598.26807 1747.8
+598.78247 1296.4
+601.93933 894.9
+603.77386 807.5
+607.25488 821.2
+607.96027 3176.0
+608.29865 2686.2
+611.28137 1036.4
+612.77875 3245.6
+613.28339 953.2
+613.78442 909.0
+617.21973 1485.4
+617.27716 9925.5
+617.77924 6411.2
+618.27917 2186.4
+620.59595 1150.6
+626.96313 2029.9
+627.30292 2650.2
+627.63458 1468.3
+628.30896 4314.3
+629.31549 1093.8
+630.33783 898.5
+640.29608 715.5
+646.64166 798.3
+650.60925 975.5
+656.30341 12202.5
+657.30701 4215.1
+658.31573 1098.8
+665.29443 1367.8
+665.78625 2812.2
+666.28979 2107.6
+669.32397 1401.7
+674.29999 32918.5
+674.80115 22546.0
+675.30170 8394.9
+675.80438 1856.9
+676.13763 692.3
+676.62604 779.0
+678.65112 1126.2
+678.98047 1392.1
+681.82837 714.2
+684.31989 6438.2
+684.65338 5892.4
+684.98846 2564.8
+685.31854 1613.2
+685.64972 1005.2
+686.32281 7111.5
+687.32458 2030.9
+693.28711 2564.6
+693.78784 1574.1
+694.28870 1010.3
+694.80292 1276.4
+696.29535 1211.6
+698.33057 1574.4
+698.82281 1339.1
+702.32635 1768.9
+707.91779 1060.7
+707.99603 3036.7
+708.33429 4096.6
+708.66638 1995.1
+708.99939 805.5
+712.29156 4330.1
+713.29224 1027.3
+714.31653 1786.7
+716.83905 952.4
+717.12683 697.7
+718.27124 1080.7
+720.34485 1104.2
+720.67590 1306.4
+720.80896 1705.5
+721.30359 917.0
+721.82263 605.0
+743.34473 857.6
+757.34393 2143.0
+757.59442 1754.9
+757.84399 1168.8
+758.11432 666.3
+761.59589 5860.8
+761.84735 6824.1
+762.09741 5133.6
+762.34991 2323.5
+762.60400 874.1
+772.37073 1042.5
+772.86951 895.7
+773.35809 732.7
+778.69318 3219.7
+779.02789 4025.9
+779.35858 2109.7
+779.68994 1273.5
+780.33698 1141.4
+780.83344 1029.7
+781.30994 1057.2
+781.37640 1855.7
+781.87030 1846.9
+784.69006 790.5
+785.02124 1449.0
+785.34265 1419.7
+786.86121 811.5
+787.10693 1613.0
+787.35626 2324.6
+787.60107 909.6
+788.35077 2390.4
+788.68658 1412.9
+789.34509 24493.7
+789.84698 20139.2
+790.34802 7837.1
+790.84985 1680.1
+791.35742 3780.6
+791.60974 5839.7
+791.85779 4920.7
+792.11194 2175.0
+792.35986 1134.8
+795.54987 986.8
+795.85938 5628.2
+796.11133 6856.4
+796.36292 7350.2
+796.61090 3268.8
+796.86127 2220.7
+799.34253 829.8
+800.87805 877.8
+802.38116 899.9
+809.87567 1193.9
+810.37915 2350.7
+810.88580 1154.9
+811.37598 1000.6
+811.89551 2388.6
+812.39587 1929.6
+814.03412 680.0
+815.86084 1855.6
+816.35925 2217.4
+816.70801 1633.8
+816.85840 1098.8
+817.04016 2901.1
+817.37415 2012.6
+817.71356 825.5
+818.06738 717.2
+819.18567 707.5
+819.36700 1881.4
+819.61005 851.5
+819.70099 1531.6
+819.86285 1842.6
+820.03656 2027.2
+820.11798 1800.6
+820.37225 2076.9
+820.70966 953.1
+822.71240 1118.2
+823.04291 2466.2
+823.33240 2693.4
+823.61981 5012.8
+823.73322 704.5
+823.86969 9549.2
+824.12024 8512.8
+824.36694 5118.3
+824.61658 1430.2
+824.86365 9017.7
+825.36481 6926.0
+825.70917 5903.6
+825.86572 4570.9
+826.04364 9951.3
+826.37756 6951.3
+826.71497 3634.1
+826.86963 722.1
+827.04504 1137.4
+827.40582 2242.8
+828.12286 5479.5
+828.37085 11263.1
+828.62305 7652.3
+828.87354 4641.9
+829.12482 1766.6
+829.37848 1292.7
+829.87738 775.6
+837.92084 834.6
+838.37433 972.9
+841.12732 847.4
+841.33313 6058.2
+842.33246 2473.4
+842.41382 7831.5
+842.62299 1065.5
+843.41815 3293.8
+846.87549 1163.3
+847.12280 2695.2
+847.37189 3044.3
+847.62445 2084.8
+847.87311 1640.0
+850.62469 1033.2
+850.86682 983.2
+851.11963 1862.8
+851.37616 12022.2
+851.62708 20701.7
+851.87653 26490.0
+852.12775 16162.6
+852.37671 10397.8
+852.62811 3947.3
+853.06030 1525.5
+853.39288 1475.4
+855.11523 1141.3
+855.37329 3585.6
+855.62671 4973.9
+855.88000 66620.5
+856.13000 110194.6
+856.38007 100621.1
+856.63055 67581.8
+856.88147 37014.4
+857.13220 13885.8
+857.38135 3623.4
+857.64838 2461.8
+857.91827 1095.7
+857.97992 1424.9
+858.23004 687.0
+858.49127 1001.5
+858.73602 5479.1
+859.06378 6624.7
+859.29639 805.0
+859.40045 5526.0
+859.62823 3780.8
+859.74048 2373.1
+859.88055 9060.6
+860.13025 6630.8
+860.38239 86393.7
+860.63269 141177.0
+860.88263 134207.0
+861.13287 76621.7
+861.38324 44897.5
+861.63531 16301.6
+861.88397 5845.5
+862.00275 690.2
+862.21088 867.4
+862.78845 700.8
+863.06335 983.0
+863.29980 1114.3
+863.53986 1047.7
+864.13000 1429.0
+864.38141 1345.8
+864.63281 1406.1
+864.88062 1693.3
+865.32605 1836.2
+865.73047 1934.1
+866.06232 1701.1
+866.38336 1900.4
+866.91998 994.0
+867.41003 1121.9
+871.73248 4635.6
+872.06763 5246.1
+872.40015 6783.1
+872.73322 2539.8
+873.06958 1582.4
+875.92389 13869.0
+876.42487 14317.5
+876.92480 7046.1
+877.43292 1765.3
+878.38318 1129.4
+879.89807 1600.3
+880.14441 1423.9
+880.39417 1064.1
+882.37610 4089.6
+882.87939 2441.4
+883.37518 1494.2
+884.15326 2994.2
+884.40076 7271.8
+884.65094 8128.6
+884.90088 5115.4
+885.14880 3731.6
+885.39966 2128.9
+885.65814 1027.6
+886.89478 4247.9
+887.39575 2979.7
+887.90259 1441.1
+888.39636 1067.6
+888.65247 18349.0
+888.90277 32673.3
+889.15356 29802.3
+889.40515 18924.3
+889.65442 10357.9
+889.90509 5153.1
+890.39996 1106.4
+895.73981 818.7
+895.90009 8022.9
+896.40167 7710.1
+896.74115 1503.1
+896.90216 3587.1
+897.39801 1420.9
+901.74292 4601.4
+901.87769 966.6
+902.07867 4595.4
+902.42017 2555.3
+902.75354 1019.7
+902.93439 1270.4
+903.07904 1349.4
+904.73450 649.2
+909.07635 1497.2
+910.88739 3411.1
+911.44037 17609.9
+911.94287 18315.7
+912.44604 8675.4
+912.94824 3606.7
+915.08466 1069.4
+917.92780 810.8
+922.41138 1216.0
+927.40649 1636.9
+927.73639 1249.9
+928.07086 1285.7
+930.38885 1696.7
+930.88818 1249.3
+931.42639 1453.4
+931.93152 2285.5
+933.74402 2367.0
+934.07971 1623.1
+939.39520 5288.3
+939.95148 9893.4
+940.45306 8206.8
+940.95825 3513.9
+941.39099 1053.3
+941.46802 1452.2
+941.74847 1128.7
+947.42072 2377.0
+947.74634 1018.7
+948.08691 943.0
+950.42920 996.1
+952.45197 1355.5
+952.76050 784.1
+952.94556 1505.9
+953.43048 739.5
+953.75433 1292.2
+957.43793 7983.2
+958.08215 1018.5
+958.44263 4068.9
+958.76276 1556.5
+959.43970 1049.4
+963.76508 1470.9
+964.09241 3020.5
+964.43500 3143.4
+964.76190 1666.6
+964.93768 1082.7
+965.10132 853.9
+965.41211 781.1
+967.07349 815.1
+968.46295 8812.6
+968.96436 7187.0
+969.46375 4429.1
+969.96631 1168.0
+970.45331 820.5
+972.93701 1734.6
+973.09509 937.9
+973.43262 3350.5
+973.75970 1143.4
+973.94342 1023.4
+974.09479 1327.1
+974.42780 811.1
+974.91730 1316.1
+975.41821 1165.1
+979.42920 1910.1
+979.76471 2303.6
+980.10175 1326.4
+980.44934 932.2
+982.77643 1798.1
+983.10474 3525.8
+983.44183 3218.3
+983.77557 2698.2
+986.78748 907.4
+988.40051 4408.9
+989.40338 2531.0
+996.43811 2184.9
+997.44568 1019.2
+1003.45331 1721.3
+1003.78143 1082.4
+1009.11993 4261.2
+1009.45422 9222.2
+1009.78821 7519.6
+1010.12018 5532.9
+1010.45459 3669.3
+1010.78638 1224.1
+1015.12561 22229.7
+1015.45941 30572.1
+1015.79395 25606.5
+1016.12762 14964.2
+1016.46069 5881.6
+1016.78546 3767.6
+1016.97626 1931.3
+1017.12067 1129.5
+1017.46985 2215.6
+1017.97260 1727.6
+1022.12048 1462.5
+1022.44537 1028.4
+1023.11920 776.0
+1025.97632 35315.3
+1026.47754 38377.5
+1026.97876 22672.3
+1027.48145 9062.2
+1027.98279 3210.4
+1037.46265 1551.5
+1037.95972 1358.5
+1046.96887 1266.9
+1047.43665 950.7
+1048.11841 1020.5
+1052.48718 1086.7
+1052.98730 1672.2
+1053.11536 4612.1
+1053.44543 7016.9
+1053.78394 7054.3
+1054.11963 6012.1
+1054.44958 2746.5
+1054.78589 1585.6
+1059.12097 17532.3
+1059.45374 31520.4
+1059.78833 24868.8
+1060.12183 16495.0
+1060.45850 7972.7
+1060.79028 2828.7
+1061.13916 1089.9
+1061.49646 23319.1
+1061.99622 26144.5
+1062.49854 17300.3
+1062.99866 6531.9
+1063.49866 2472.3
+1065.12378 12767.4
+1065.45825 26166.9
+1065.79272 22492.1
+1066.12573 14079.6
+1066.46130 6068.7
+1066.79529 3481.2
+1068.45715 1172.2
+1077.48840 875.9
+1085.41248 1076.2
+1086.48523 5259.7
+1087.48596 2826.4
+1094.48938 2012.5
+1094.97449 1337.7
+1095.47815 1643.1
+1096.55786 912.4
+1096.81470 1072.6
+1097.14795 3463.5
+1097.47900 3182.4
+1097.81128 2117.7
+1101.48364 1234.5
+1101.98401 1117.9
+1102.44067 8114.1
+1102.82129 4924.2
+1103.01233 6919.5
+1103.15149 5831.0
+1103.40808 2063.5
+1103.52039 8481.7
+1103.81885 3283.2
+1104.01660 4919.9
+1104.15283 2418.0
+1104.52954 1698.6
+1106.99084 1167.0
+1107.48413 5676.3
+1108.48523 4077.7
+1109.48926 1172.9
+1112.01575 6619.8
+1112.52026 9672.1
+1113.02295 6137.4
+1113.53088 2020.0
+1115.47791 1806.8
+1115.98401 2192.0
+1125.48059 3696.5
+1126.48645 2092.5
+1146.58789 746.7
+1151.50647 1010.7
+1152.02100 857.7
+1159.02429 783.1
+1165.02332 1501.2
+1165.51306 778.0
+1166.02258 1153.0
+1166.58813 997.3
+1168.02832 1520.5
+1176.53748 5295.9
+1177.03845 6071.1
+1177.54517 3889.4
+1178.04321 2256.6
+1178.52930 769.7
+1196.45825 1129.2
+1198.42627 3539.7
+1213.47620 3703.8
+1214.46899 2816.3
+1215.46326 1934.3
+1224.54285 1688.9
+1225.05127 1847.7
+1225.55652 2357.5
+1226.55457 832.5
+1230.03284 1263.7
+1231.48108 3983.7
+1232.48572 1183.5
+1233.56091 4644.8
+1234.06140 5079.4
+1234.56006 4336.1
+1235.06775 1759.0
+1236.52515 1278.4
+1237.53210 1189.2
+1242.04309 857.1
+1249.53577 810.4
+1290.05286 1903.0
+1290.54944 3459.0
+1291.05554 2801.7
+1291.55286 1330.2
+1299.05884 2259.2
+1299.55591 1605.9
+1300.04712 1453.2
+1323.04688 976.4
+1332.53528 3011.2
+1333.53345 1913.0
+1334.53284 1030.1
+1340.08484 1056.9
+1347.58765 1081.8
+1348.58801 1220.4
+1349.58179 1043.0
+1351.58911 978.8
+1355.60583 951.7
+1368.59045 1057.0
+1390.60889 920.5
+1391.10437 2429.2
+1391.60535 1995.5
+1392.08960 879.2
+1392.59033 930.9
+1395.28027 796.6
+1395.64233 2132.9
+1396.64563 1019.4
+1399.61108 4280.1
+1400.11182 7156.9
+1400.61206 4925.4
+1401.12256 2239.0
+1401.62451 995.6
+1402.13904 827.3
+1403.56775 2096.9
+1404.57019 1726.3
+1776.24744 690.0
+1878.39795 986.9
+1878.63928 1382.4
+1879.01428 2287.8
+1879.51257 19738.0
+1879.97107 1837.2
+1907.06055 7154.7
+S	1589	1589	740.7370366
+Z	5	3698.64606
+198.79361 700.8
+198.88966 790.7
+199.17458 1056.1
+199.22487 957.3
+199.24355 796.5
+199.27209 2233.4
+199.28525 697.9
+199.29619 974.7
+199.37062 1051.3
+205.04092 595.9
+208.30682 495.3
+212.72487 616.7
+233.16476 6451.1
+233.56783 757.2
+246.15601 20398.0
+247.15950 1536.3
+248.11125 603.1
+260.90524 662.7
+261.15930 1107.6
+271.22260 656.0
+301.11472 1419.8
+325.24753 717.0
+342.26437 760.5
+343.66357 1086.1
+360.12924 815.3
+370.11636 642.9
+372.15222 768.8
+372.17645 1469.3
+378.14136 2514.8
+378.32904 633.1
+381.34875 698.8
+387.08984 640.5
+392.14325 754.3
+396.15109 2999.4
+421.70981 5337.0
+422.21054 2247.2
+440.82483 608.2
+462.22949 1228.9
+469.35394 620.5
+479.22235 3301.3
+479.72455 1483.9
+492.89063 731.2
+498.08588 673.7
+498.19373 2691.1
+498.72598 878.4
+506.18414 778.1
+526.56519 3066.6
+526.89813 2337.2
+527.23633 574.7
+532.57043 2188.9
+534.74054 1775.0
+535.24225 912.6
+535.74023 726.1
+543.74347 5464.7
+544.24506 2562.5
+549.26324 7180.6
+550.26978 1520.1
+550.39435 625.4
+563.24561 1989.2
+563.74597 698.7
+578.89679 636.7
+582.91718 1082.5
+584.28503 2172.0
+584.61987 952.1
+597.26245 3380.6
+598.78235 1421.5
+601.92926 1024.2
+607.96259 1895.6
+608.30072 1124.1
+612.77789 2418.9
+613.28088 2205.4
+617.22144 990.5
+617.27795 7027.3
+617.77905 4816.4
+618.27911 1343.4
+620.93079 1126.5
+626.96405 1847.4
+627.26569 531.6
+627.30347 824.7
+628.30939 3003.0
+645.97729 1178.8
+650.61688 1008.0
+656.30255 9252.0
+657.30469 2973.7
+665.78644 2473.6
+666.28821 1568.9
+674.29889 23942.5
+674.80023 15235.0
+675.30029 5528.8
+675.80176 2082.4
+676.64532 1103.9
+678.64960 1110.1
+684.31860 6451.7
+684.65363 5682.9
+684.98907 2692.4
+685.32281 1142.1
+686.32220 3747.8
+686.56390 764.0
+687.32922 842.1
+693.29071 2175.0
+693.78998 2927.1
+694.28986 1612.1
+698.82715 1104.0
+701.99103 669.7
+707.99866 3152.2
+708.12207 802.7
+708.33398 3261.5
+708.66345 2037.8
+712.29053 2931.9
+720.34521 1146.4
+720.81537 918.2
+721.30408 1290.8
+745.85864 683.8
+746.33972 628.1
+757.09491 731.1
+757.33850 1014.7
+757.84277 839.8
+761.59540 2899.2
+761.84821 3282.6
+762.09625 4280.0
+762.34729 1840.1
+762.59741 832.6
+773.36548 731.1
+778.68805 3027.6
+779.02545 3405.3
+779.35504 2065.0
+779.68976 976.2
+780.83173 1606.3
+781.37421 1170.1
+781.87604 996.8
+785.35925 900.9
+787.35095 1048.7
+788.01880 1360.7
+788.34937 2306.5
+788.67999 1402.2
+789.34454 16961.1
+789.84570 16041.9
+790.34875 6134.8
+790.85004 1587.2
+791.35760 1760.9
+791.60864 5480.9
+791.85852 2964.4
+792.10736 3028.5
+795.55139 1276.2
+795.86060 3019.7
+796.11145 3936.2
+796.36035 4420.0
+796.61145 2748.9
+796.86383 1492.9
+797.36932 904.1
+807.71069 735.2
+809.87354 1127.7
+810.37805 940.4
+810.88123 788.9
+811.89404 1828.1
+812.39893 1227.8
+815.86011 1938.9
+816.35455 1561.8
+816.70856 2491.1
+817.04004 2629.2
+819.36847 2338.9
+819.70947 890.8
+820.03864 1805.7
+820.70349 761.5
+822.71368 1211.1
+823.04565 1388.2
+823.33337 1797.8
+823.61713 5187.0
+823.70923 815.9
+823.86835 6717.5
+824.12115 6752.6
+824.36731 3870.3
+824.61823 1413.8
+824.86340 5766.2
+825.36444 6616.3
+825.70923 5871.0
+825.86523 2424.3
+826.04376 7485.3
+826.37616 4518.4
+826.71277 2336.2
+827.41174 1033.7
+828.11853 4566.0
+828.36957 6629.3
+828.62146 6332.3
+828.87354 4108.2
+829.12482 1489.3
+829.37653 1825.8
+831.37970 899.6
+838.37976 825.0
+841.33234 3617.7
+842.33813 1567.4
+842.41040 5398.3
+843.41125 2582.5
+845.37775 871.3
+847.12524 2499.3
+847.37714 2356.8
+847.62177 1361.8
+850.87177 1130.5
+851.12164 2098.8
+851.37567 8073.1
+851.62628 17398.3
+851.87567 17390.2
+852.12683 13558.2
+852.37628 7902.1
+852.62823 3117.3
+852.88702 1065.9
+853.05414 944.3
+853.39124 1431.8
+855.12469 1657.4
+855.37421 4403.9
+855.62744 3535.5
+855.87897 49528.3
+856.12915 82955.6
+856.37915 71619.7
+856.63000 45117.2
+856.88098 24080.5
+857.13263 12106.6
+857.37915 2046.5
+857.63177 1288.3
+857.99872 881.4
+858.19861 733.7
+858.73077 3758.5
+859.06738 4674.0
+859.39941 2836.9
+859.63171 2884.0
+859.73456 2022.9
+859.87842 4912.1
+860.12524 4548.1
+860.38141 62947.8
+860.63159 105633.7
+860.88165 94855.0
+861.13208 63022.7
+861.38263 25558.2
+861.63348 13756.8
+861.88586 3522.5
+862.14465 987.7
+864.38190 1025.0
+864.63647 1182.7
+866.06177 1124.5
+866.90173 747.3
+867.40948 680.6
+871.72992 3219.8
+872.06537 6176.2
+872.40106 3146.4
+872.73553 1290.7
+875.92255 9953.7
+876.42432 7996.9
+876.92432 4686.0
+877.42090 1221.5
+879.63806 675.8
+880.14685 1209.8
+880.39594 1532.2
+880.65961 916.9
+882.37292 2486.4
+882.87561 2126.0
+883.37286 932.0
+884.15100 3896.7
+884.39899 6418.0
+884.65100 5380.3
+884.89734 4526.2
+885.13934 999.8
+885.40088 1005.2
+885.65015 780.1
+886.89771 2374.8
+887.39276 2334.8
+887.90411 1019.7
+888.65155 12641.2
+888.90247 26438.4
+889.15228 25046.6
+889.40363 13543.7
+889.65375 8000.4
+889.90906 1489.9
+890.14630 1199.9
+891.64594 1861.2
+895.89844 4640.3
+896.06116 1079.1
+896.39990 5551.4
+896.90210 2489.5
+897.39252 1130.9
+900.06158 741.2
+901.74689 2328.3
+901.87866 783.2
+902.07776 2738.8
+902.41394 1452.4
+902.74292 1892.7
+903.74933 806.9
+909.74976 1172.3
+910.88422 2730.0
+911.43884 13001.7
+911.94128 12012.6
+912.44305 6014.2
+912.94843 2643.0
+922.41394 842.9
+930.37677 1064.6
+930.93872 635.1
+931.41760 1176.8
+931.92261 1525.1
+933.41498 960.8
+933.74927 905.5
+939.39569 3760.1
+939.94946 4745.9
+940.45123 5685.9
+940.95398 3492.9
+941.43903 1098.9
+941.74792 1378.6
+942.09174 811.2
+944.76660 836.5
+947.42474 1293.3
+947.75812 1082.6
+948.08838 1267.4
+952.43994 1417.7
+952.96167 917.6
+953.04810 665.1
+957.43604 6028.7
+958.43506 2149.0
+958.76379 1115.2
+963.76746 1262.6
+964.09918 2609.0
+964.42975 2405.9
+964.77173 772.6
+967.41962 1284.3
+968.46594 4264.3
+968.96387 4687.1
+969.46631 2273.6
+971.10602 779.6
+972.93750 942.7
+973.42737 1852.0
+974.10052 967.9
+974.90515 1448.4
+975.90643 878.3
+977.10669 1204.8
+977.42371 1077.4
+979.09888 1381.0
+979.42798 1381.3
+979.76160 1199.8
+980.44421 1003.6
+982.77197 1520.4
+983.10626 2108.8
+983.43817 1227.7
+983.77667 1457.4
+988.40271 3667.1
+989.41150 1426.9
+996.44159 1769.8
+997.43396 806.4
+1009.12170 1994.0
+1009.45306 5150.3
+1009.78662 6087.2
+1010.11908 3680.6
+1010.45233 1566.7
+1010.79443 953.8
+1015.12433 13743.3
+1015.45825 22472.7
+1015.79297 22748.8
+1016.12616 11242.1
+1016.45892 4590.5
+1016.77991 2262.1
+1017.12842 1258.7
+1022.43689 1252.8
+1022.77655 984.8
+1025.97522 23011.8
+1026.47644 26609.9
+1026.97791 15258.2
+1027.48206 6081.8
+1027.98193 1941.4
+1037.45703 1010.8
+1037.96460 1068.7
+1046.96326 965.2
+1052.99524 1298.6
+1053.12061 3040.8
+1053.44592 4737.8
+1053.78210 4476.6
+1054.11768 3789.6
+1054.45313 1548.1
+1059.12000 12038.5
+1059.45276 18797.5
+1059.78674 21538.7
+1060.12122 13473.0
+1060.45642 5375.6
+1060.79077 3286.2
+1061.12170 1300.9
+1061.49377 16330.9
+1061.99597 20414.3
+1062.49670 10928.4
+1062.99744 3624.3
+1063.50220 1518.9
+1065.12305 11391.1
+1065.45715 15253.4
+1065.79163 16074.2
+1066.12561 9911.4
+1066.46094 5768.1
+1066.80090 967.0
+1067.12439 1111.4
+1083.81946 775.4
+1085.41650 1288.9
+1086.48694 2928.4
+1087.48450 1630.5
+1096.54810 888.6
+1096.80542 991.5
+1097.14099 1442.5
+1097.47461 1724.5
+1098.14893 1226.5
+1102.44067 5780.3
+1102.81555 2570.4
+1103.01257 6607.2
+1103.15002 5542.0
+1103.51428 6717.4
+1103.81689 2061.4
+1104.01880 4167.1
+1104.15808 1462.1
+1104.52332 1916.0
+1107.48523 1857.2
+1112.01440 4368.0
+1112.51880 5420.6
+1113.02148 3751.0
+1113.51355 1320.6
+1114.02515 910.8
+1115.98718 1004.4
+1125.48218 2062.6
+1126.48572 1794.2
+1151.51685 885.6
+1167.51050 936.6
+1168.02710 1724.4
+1168.53735 1023.5
+1176.53809 2742.4
+1177.03723 3833.4
+1177.53857 3538.8
+1178.04053 1678.2
+1198.28125 3545.7
+1213.47302 3291.6
+1214.46130 1611.0
+1224.56042 1471.6
+1225.55530 1378.4
+1226.53320 830.0
+1231.48767 1865.9
+1233.56665 3066.1
+1234.05579 2974.9
+1234.55859 2976.2
+1235.07458 1366.2
+1282.87146 712.5
+1290.03943 1502.9
+1290.54883 1694.8
+1291.05408 1538.5
+1291.54333 724.4
+1299.04602 1290.4
+1299.55835 1796.2
+1300.05566 1611.8
+1332.52429 1749.4
+1333.53040 1641.9
+1340.09338 803.1
+1350.09741 967.4
+1352.07898 775.4
+1391.11438 1542.3
+1391.62170 1225.2
+1396.60559 957.0
+1399.60205 2909.7
+1400.10486 3774.0
+1400.60706 2608.4
+1401.11584 2567.5
+1401.60107 1403.5
+1402.59363 807.8
+1403.56213 1356.6
+1525.40332 963.2
+1646.68262 700.1
+1877.81726 1127.7
+1878.23828 657.9
+1878.69360 934.6
+1879.10400 2042.4
+1879.54456 19829.0
+1879.97644 1667.9
+1880.22144 1705.4
+1907.04053 7174.2
+1918.72229 746.1
+1930.55322 1096.5
+1994.60718 682.4
+S	1590	1590	925.6695421
+Z	4	3698.64687
+271.83661 725.5
+273.39999 545.6
+275.97122 581.6
+280.17975 821.9
+287.14844 625.8
+308.89911 703.8
+310.81604 661.2
+323.36646 604.7
+347.97375 574.5
+351.09714 603.4
+372.17523 754.9
+376.10696 651.7
+378.13953 1758.2
+393.37219 617.5
+396.15070 1102.1
+413.11401 603.1
+421.70917 1813.0
+441.17273 997.3
+462.23111 966.1
+498.19092 1787.6
+532.53961 1364.4
+532.58008 939.1
+533.37689 648.1
+549.26172 5897.5
+550.26172 2094.6
+565.08307 657.9
+579.25012 916.7
+597.26141 2763.5
+611.27655 1099.4
+620.08435 768.1
+628.30768 6122.7
+629.31000 1633.3
+630.40179 879.0
+638.29199 1145.3
+656.30212 16623.2
+657.30646 5837.9
+658.30334 1379.4
+674.29926 1579.3
+674.79846 976.0
+676.63757 1015.3
+686.32062 5110.9
+687.32251 1557.7
+712.28680 908.5
+743.34125 18770.8
+744.34424 5650.2
+745.34924 1563.1
+747.37018 1126.2
+747.87738 752.0
+753.35742 730.2
+761.83771 1003.2
+789.34509 923.8
+791.34766 1026.6
+791.60791 1394.3
+791.85510 1467.8
+792.10266 729.0
+796.10962 1363.6
+810.37756 701.6
+811.89185 1150.5
+816.70715 687.4
+823.61658 1482.4
+823.86493 1584.8
+824.11176 854.0
+824.86041 3389.9
+825.36212 2362.4
+828.36884 792.3
+838.43683 1169.2
+842.30640 600.7
+842.40894 7921.8
+843.40863 3417.3
+853.04761 690.6
+856.12738 1487.1
+856.37927 872.1
+856.62885 1598.9
+856.88318 895.6
+858.73096 1259.8
+859.39508 1150.4
+860.63434 1491.8
+860.88116 2453.4
+861.13275 1369.0
+867.38898 818.1
+871.72937 2000.5
+872.06287 3274.5
+872.40570 1424.7
+875.92133 3690.2
+876.42285 3183.5
+888.64832 1129.3
+888.90118 932.9
+894.14935 693.9
+902.08075 1609.8
+902.82416 654.8
+905.90466 771.7
+957.43799 4542.8
+958.44012 2043.8
+963.38037 770.0
+973.07288 699.6
+973.42737 1264.5
+979.44189 999.1
+982.76892 1405.7
+983.45227 1320.8
+991.55157 800.7
+996.43951 1929.2
+997.43219 1048.2
+1003.45306 1349.6
+1003.77380 1025.7
+1004.11230 1802.9
+1009.11798 2263.6
+1009.45435 4445.4
+1009.78455 3849.0
+1010.11957 2754.6
+1010.44641 1099.4
+1010.80029 755.9
+1015.12311 14781.2
+1015.45709 23007.3
+1015.79199 19686.1
+1016.12592 9131.0
+1016.46094 5040.0
+1016.78461 2236.9
+1017.46283 650.8
+1022.42633 926.3
+1025.97388 8054.4
+1026.47656 9299.8
+1026.98047 6741.2
+1027.47729 2747.5
+1027.98779 1060.0
+1036.46033 1079.3
+1041.47241 1483.0
+1041.80334 1385.0
+1042.14734 934.3
+1042.47876 1132.3
+1050.80859 2146.8
+1051.13586 2726.4
+1051.47620 1791.8
+1051.80786 1907.5
+1055.13440 1304.1
+1055.46777 1607.9
+1059.44189 2276.0
+1059.78638 1306.8
+1060.80249 2309.8
+1061.14246 3715.1
+1061.49255 4697.2
+1061.99548 4013.2
+1062.49475 3107.4
+1062.99707 809.9
+1065.45288 1085.8
+1065.81311 944.2
+1068.46570 1302.9
+1080.14624 1507.7
+1080.47864 2267.5
+1081.14978 1098.0
+1086.47729 6323.5
+1087.47925 4046.0
+1088.48865 1244.1
+1090.50696 966.8
+1092.14612 768.8
+1095.54224 1778.1
+1096.55090 859.6
+1101.48193 1890.5
+1101.97998 1777.3
+1103.01416 2763.5
+1103.51624 2784.7
+1103.82471 1018.1
+1104.01514 1415.0
+1104.15149 1391.2
+1104.51428 1227.4
+1112.01428 2522.8
+1112.52100 2308.5
+1113.01355 1001.8
+1113.49976 972.2
+1125.48608 2041.2
+1135.17627 761.1
+1140.16467 2434.9
+1140.49829 2624.5
+1140.82495 1093.4
+1141.16846 2216.9
+1141.50061 1371.3
+1145.83362 5274.8
+1146.16956 9992.6
+1146.50183 9245.6
+1146.83594 6899.7
+1147.16748 4104.6
+1147.50256 2507.4
+1147.84863 1285.3
+1151.83875 36483.3
+1152.17273 61787.6
+1152.50647 53759.0
+1152.84082 29541.1
+1153.17639 15992.6
+1153.50928 6837.1
+1153.84656 2650.4
+1154.18689 960.3
+1165.52612 1186.0
+1166.58118 1391.9
+1168.03540 1598.0
+1176.53687 5075.3
+1177.03845 6407.5
+1177.53906 4711.9
+1178.03638 2641.7
+1198.20911 3227.8
+1219.13586 640.3
+1224.53491 1509.8
+1225.05884 899.0
+1225.54797 1417.6
+1233.55371 7567.7
+1234.05945 8018.0
+1234.55737 6186.7
+1235.06079 2268.0
+1235.56494 1144.8
+1238.05603 888.9
+1248.54797 2010.3
+1249.05566 1458.5
+1292.04700 915.4
+1293.09717 975.4
+1298.58911 923.7
+1307.09375 1022.9
+1307.59143 1252.0
+1308.08594 1461.8
+1338.61902 916.7
+1347.59546 1869.2
+1348.58740 1003.7
+1351.08630 1392.9
+1351.57471 1749.9
+1371.61670 2021.6
+1372.11438 3087.3
+1372.61646 1527.6
+1373.11475 1150.5
+1381.61206 718.5
+1382.11096 943.4
+1382.59583 1038.8
+1390.60669 2396.3
+1391.10303 4297.2
+1391.60486 4318.2
+1392.10156 2549.5
+1392.59900 1152.3
+1393.11243 979.8
+1395.64575 4262.3
+1396.64319 2267.6
+1397.65527 1286.0
+1399.60669 12471.0
+1400.10767 16593.0
+1400.61206 12624.6
+1401.11169 5869.3
+1401.61462 1614.1
+1403.57056 2293.0
+1404.56970 1322.8
+1420.11133 1192.3
+1420.62708 1531.4
+1421.12695 2032.7
+1421.63611 1068.9
+1429.12695 9369.6
+1429.63049 10713.0
+1430.13025 11326.1
+1430.63208 5486.1
+1431.12903 2123.8
+1431.62329 841.9
+1459.61060 1200.9
+1466.66650 692.1
+1468.12830 1323.2
+1474.18823 899.4
+1476.64246 915.5
+1478.65784 3436.8
+1479.16284 5125.8
+1479.66260 3030.7
+1480.17786 1712.0
+1480.65906 921.4
+1507.17285 2716.2
+1507.67615 5105.2
+1508.16736 2437.0
+1508.68066 2392.1
+1649.67517 726.3
+1698.77954 783.4
+1875.49207 695.2
+1878.70032 865.6
+1879.52368 19906.4
+1881.13306 679.5
+1881.95593 765.7
+1907.08569 7249.1
+S	1591	1591	1879.9648246
+Z	3	5636.619
+Z	2	3758.082
+532.54053 1717.3
+549.11890 858.6
+566.66193 632.8
+611.95038 585.6
+628.13971 639.9
+662.32916 626.0
+676.63824 714.9
+682.63971 620.6
+1013.65497 613.7
+1057.23218 779.9
+1105.90759 563.8
+1126.07629 726.9
+1198.05774 746.3
+1198.21106 3161.5
+1232.84241 632.3
+1384.99463 620.6
+1576.59302 704.8
+1665.63000 774.3
+1774.75427 745.4
+1878.77588 825.4
+1879.12610 1355.3
+1879.54053 19238.8
+1879.96680 1160.3
+1880.29395 1039.4
+1881.08105 942.9
+1907.09668 7089.6
+1918.78882 790.0
+1930.49072 1297.9
+1970.88037 626.8
+S	1593	1593	410.4731921
+Z	4	1637.86147
+101.01534 637.8
+101.07150 531.2
+102.13528 493.5
+102.28182 539.6
+105.82793 534.4
+107.33730 501.4
+115.44162 605.8
+118.40710 587.3
+121.79164 1240.5
+121.79521 1946.6
+123.05209 598.9
+123.49663 598.1
+124.64744 726.1
+127.91621 615.8
+129.44475 570.4
+138.51260 564.2
+143.07266 727.1
+149.64111 625.3
+153.59735 581.7
+158.09595 2005.9
+160.11224 991.1
+164.43713 627.9
+164.78958 567.1
+165.77583 600.0
+172.16347 649.5
+174.48196 555.2
+176.10654 3471.2
+177.10170 3791.2
+177.15546 547.9
+178.10585 692.2
+188.24152 715.1
+188.26530 1761.2
+188.27776 2317.4
+188.29414 2427.7
+188.36377 659.2
+198.88838 1038.8
+199.18027 33495.3
+199.25114 1320.4
+199.26924 2208.9
+199.27757 1509.6
+199.29524 594.2
+199.32233 654.4
+199.36736 1017.7
+200.18318 2556.8
+201.85858 557.2
+203.11789 2246.5
+209.63441 587.2
+221.01166 743.1
+221.12825 137755.9
+221.29968 728.1
+221.47533 871.4
+222.13152 17906.6
+223.13551 875.7
+226.15479 1077.9
+227.17526 6982.8
+229.48814 597.1
+231.11253 1286.0
+233.16437 6105.0
+234.12297 1124.5
+234.16731 830.5
+244.16518 959.0
+249.12321 22588.0
+249.63916 756.7
+250.12703 2971.5
+251.14990 4526.9
+254.16106 1572.6
+255.11061 692.8
+255.33339 589.7
+255.64871 688.1
+258.15018 22017.9
+258.65173 4871.8
+272.02570 517.9
+272.13504 1068.2
+272.17020 1232.1
+281.16547 672.4
+296.23148 592.4
+317.18631 3751.6
+326.51007 10818.9
+326.84436 5161.1
+327.17850 2055.3
+344.19629 1651.7
+348.19202 1064.9
+350.28253 792.8
+355.18515 2610.0
+362.20709 12273.9
+363.20981 2008.5
+363.51840 1603.6
+363.85458 1142.8
+364.18988 17410.1
+364.69180 6645.3
+365.19257 1509.3
+376.52493 935.8
+382.52725 1807.6
+384.95911 5138.0
+385.20926 2212.1
+387.19644 872.3
+388.53119 25233.0
+388.86536 15792.8
+389.10495 602.6
+389.19925 4289.8
+389.53369 956.0
+420.22269 1156.2
+421.55441 728.2
+423.71362 2070.6
+426.22568 42434.9
+426.55994 31260.0
+426.89423 10703.5
+427.22794 3320.6
+427.54547 682.2
+432.71921 5840.0
+433.21936 2780.1
+433.71930 755.7
+437.21390 11618.2
+437.91638 543.2
+438.21817 1851.1
+447.29410 1466.1
+449.24628 571.8
+457.27942 750.0
+457.91672 2317.3
+458.25162 2684.3
+462.86740 1274.3
+463.22906 1482.1
+463.92038 210628.7
+464.25446 150431.3
+464.58841 59200.5
+464.62347 682.0
+464.92242 17429.6
+464.97495 1329.5
+465.25629 3160.7
+465.31433 731.0
+465.59247 791.8
+469.90591 602.3
+475.29126 4466.2
+476.29453 818.8
+476.77686 813.2
+480.75848 772.9
+489.26068 28666.3
+489.76196 15594.6
+490.26361 4173.4
+490.76248 802.5
+509.73718 640.4
+512.94305 6275.0
+513.27704 5446.0
+513.61011 1241.5
+514.29797 732.4
+515.29272 11587.3
+516.29456 3032.4
+517.29718 645.7
+518.24512 12812.4
+518.74750 5969.4
+519.24780 1383.3
+532.52014 2583.8
+543.60339 605.7
+544.77661 4292.7
+545.27942 1903.6
+546.95819 868.8
+547.29022 703.8
+550.29846 3763.8
+551.30054 806.2
+553.28778 3523.6
+553.78278 9559.4
+554.28345 4031.9
+562.29144 7705.0
+562.79358 5912.7
+563.29486 2140.0
+564.28296 1907.0
+564.77484 1500.3
+565.28662 915.1
+573.28741 20556.3
+573.60590 649.2
+573.78870 14630.1
+574.29077 5762.8
+574.79016 3435.4
+575.28998 1333.3
+580.32861 743.1
+580.81134 2766.2
+581.07251 1155.9
+581.30646 1657.2
+581.55121 1302.7
+581.80719 1098.5
+582.29236 461152.9
+582.79352 276286.7
+583.02533 2433.4
+583.29486 104632.3
+583.79639 25941.7
+584.29486 4965.1
+584.78754 1681.8
+588.45184 755.7
+599.27893 994.8
+612.30762 1184.5
+629.82874 3948.4
+630.32703 2241.4
+630.83203 1128.3
+631.32788 3381.9
+631.83197 1326.0
+638.83411 73295.6
+639.33557 48913.9
+639.83661 20972.4
+640.33813 5940.0
+640.83948 1378.0
+643.34528 1183.6
+649.29224 11783.2
+650.29553 4281.5
+651.29889 682.8
+653.22430 764.1
+661.35406 2623.1
+662.35162 750.9
+662.73419 593.5
+663.38257 2549.9
+709.36243 1992.3
+727.37207 25585.0
+728.37469 8907.0
+729.37592 1764.7
+753.24164 614.1
+761.95508 838.2
+762.37762 5209.2
+763.38202 1605.5
+764.32068 3022.5
+765.32111 1657.5
+795.54645 782.8
+875.46204 3141.7
+876.46393 1161.5
+920.41736 1015.0
+922.67737 528.4
+939.42462 547.8
+1050.79541 616.9
+1057.27234 875.9
+1138.46558 561.0
+1188.14551 865.7
+1198.16125 3398.7
+1216.27002 622.9
+1370.88574 582.8
+1489.00378 651.6
+1653.52307 711.3
+S	1594	1594	410.9748246
+Z	4	1639.868
+100.94254 524.4
+107.18391 541.7
+110.55186 578.3
+113.21880 623.9
+113.45734 655.9
+113.74077 544.7
+117.85332 602.7
+118.78507 611.0
+121.79614 2476.1
+121.82115 624.8
+124.36143 853.3
+130.14523 514.1
+139.58931 588.0
+141.26366 572.6
+146.23482 489.0
+155.37585 568.5
+157.59967 542.3
+158.09596 2296.8
+158.27582 497.9
+159.10057 639.1
+160.11185 731.7
+161.92070 666.8
+163.31804 514.7
+171.38446 610.6
+176.10677 4071.9
+177.10197 6400.8
+181.25775 524.3
+182.77615 623.2
+188.78958 598.5
+194.47783 712.5
+195.83540 717.4
+199.15794 785.7
+199.16711 1022.8
+199.18031 44591.3
+199.24057 650.3
+199.25760 1920.2
+199.26724 2460.9
+199.36345 976.3
+200.18352 5084.3
+203.11772 2394.1
+205.09773 807.1
+211.51659 605.9
+217.09311 656.0
+220.78215 729.8
+220.95866 665.4
+221.11305 549.9
+221.12830 178150.2
+221.30141 699.4
+222.13165 23113.5
+223.13570 1220.7
+226.15491 629.4
+227.17528 10598.9
+231.11249 835.3
+233.16470 6306.9
+234.12379 1049.8
+234.16647 651.4
+237.86957 561.2
+244.16599 885.8
+249.12323 26497.8
+249.14478 898.4
+249.63567 924.9
+250.12642 3350.1
+251.15010 4717.5
+252.72382 530.1
+254.16098 1975.2
+255.10953 840.3
+258.15027 24563.4
+258.65189 6805.8
+259.15189 967.9
+261.15936 1343.8
+272.13626 1148.0
+272.17166 1306.5
+300.14740 624.4
+305.84641 609.6
+308.89001 574.7
+317.18597 4167.7
+326.50989 15536.4
+326.84454 6964.9
+327.17804 2971.6
+344.19641 2350.6
+348.19244 895.5
+350.29520 810.2
+355.18411 2227.4
+355.68542 936.4
+362.20731 12100.2
+363.21078 2677.1
+363.52045 1866.1
+363.85504 1096.9
+364.18991 22202.8
+364.26938 550.1
+364.69150 8151.4
+365.19247 2011.6
+370.42780 734.4
+371.52179 586.7
+382.25409 765.1
+382.52649 1388.0
+382.86218 739.6
+384.95920 4710.3
+385.21039 4252.4
+385.46094 1371.6
+387.19962 2044.1
+388.53104 31868.4
+388.86548 17597.6
+389.19983 6305.3
+420.22318 1008.0
+420.55096 776.8
+423.71262 1439.6
+426.22574 47815.6
+426.56003 30540.5
+426.89426 12705.4
+427.22803 2986.3
+432.71909 7980.2
+433.22116 2275.4
+433.72540 685.4
+436.62048 604.4
+437.21368 12017.0
+438.21652 2102.0
+446.86325 638.4
+447.24609 849.0
+447.29556 1066.4
+457.91550 3329.3
+458.25098 2206.2
+458.58499 970.6
+462.86725 1221.1
+463.22406 1016.8
+463.73401 760.2
+463.92044 188072.8
+464.25446 136622.8
+464.29163 858.3
+464.44742 983.6
+464.58853 54518.0
+464.92285 18089.4
+464.97546 1175.4
+465.25641 6426.2
+465.30643 877.9
+465.59100 859.2
+475.29071 4171.7
+476.29367 1228.1
+476.78467 817.4
+480.25363 979.1
+480.75565 916.8
+487.02832 646.4
+489.26065 30308.4
+489.76196 16362.0
+490.26230 5059.6
+490.76358 877.4
+511.26709 619.4
+511.76935 839.3
+512.94366 4469.8
+513.27722 5052.3
+513.61206 2364.9
+513.94696 1109.9
+515.29272 12422.2
+516.29523 3032.7
+518.24469 10720.0
+518.74683 5447.7
+519.24860 2040.7
+519.74609 909.4
+532.52173 1848.9
+536.27838 759.3
+544.77686 4417.6
+545.27917 2922.6
+545.78119 744.3
+546.62408 896.4
+550.29803 3523.9
+551.29962 954.1
+553.28723 2673.6
+553.78271 13964.0
+554.28448 6197.3
+554.78497 1824.8
+562.29236 6504.3
+562.79346 3527.6
+563.29272 1849.8
+564.28113 2591.8
+564.78101 2689.9
+565.27533 1331.7
+569.91199 593.6
+573.28778 29255.1
+573.78912 17479.7
+574.15784 638.6
+574.29089 5275.1
+574.78845 4768.3
+575.28876 1853.4
+580.57111 554.5
+580.81525 3222.0
+580.97021 877.6
+581.06946 1149.3
+581.16650 1165.9
+581.31427 2011.6
+581.55408 2047.9
+582.05109 1335.1
+582.08344 1078.0
+582.17645 706.7
+582.20544 1581.3
+582.23267 1890.5
+582.29248 563800.8
+582.36670 1098.9
+582.55457 1090.4
+582.79358 349496.0
+583.02515 3236.9
+583.21069 1148.9
+583.29492 127405.8
+583.43835 631.5
+583.53961 726.1
+583.62067 1268.2
+583.79724 32211.7
+583.96533 652.1
+584.29736 7088.8
+584.35297 602.4
+584.51782 570.3
+584.79895 1071.7
+599.27795 1596.1
+606.92401 613.1
+612.30835 1186.4
+622.32605 707.8
+629.82977 4665.6
+630.32837 3424.7
+630.83337 662.2
+631.32813 2957.2
+631.83032 2230.0
+632.33105 728.4
+638.83423 82909.1
+639.33539 59432.2
+639.83679 22554.4
+640.33807 7563.6
+643.34656 2040.8
+643.82855 801.4
+649.29224 13316.4
+650.29510 3999.9
+651.29596 955.0
+661.35474 2671.9
+662.35596 928.7
+663.38159 2278.0
+664.38751 1150.4
+672.69000 760.8
+676.67578 681.3
+702.95551 711.8
+709.36133 977.7
+727.37231 21601.9
+728.37549 8341.1
+729.37732 2027.4
+756.42554 916.2
+762.37726 4848.1
+763.37915 1090.6
+764.31891 3277.7
+765.32953 1138.4
+786.55493 615.2
+795.53088 1131.2
+828.18292 661.6
+875.46362 3151.1
+876.46033 1302.8
+920.42377 1166.3
+933.20691 737.9
+1198.16968 4061.9
+1379.24756 694.4
+1477.04309 723.1
+1525.35889 890.0
+S	1595	1595	740.7379526
+Z	5	3698.65064
+195.64766 635.1
+197.68813 728.8
+199.17633 809.6
+199.19757 628.1
+199.20351 493.3
+199.23727 638.1
+199.25151 813.9
+199.27196 2270.5
+199.28435 1181.3
+199.29587 742.8
+204.70129 677.7
+205.45187 538.4
+232.18681 664.1
+233.16423 1016.6
+246.15488 2498.9
+250.73427 580.6
+280.16870 700.4
+372.21017 536.7
+381.33984 674.6
+382.86371 704.2
+382.98975 615.5
+421.71158 754.3
+435.47235 649.7
+453.44705 598.8
+462.23013 1062.4
+464.56445 690.0
+481.75171 990.2
+532.54663 1859.3
+535.15167 552.7
+536.40613 649.5
+537.16943 746.6
+549.12830 1005.2
+564.36859 646.7
+627.28503 1010.7
+656.30408 950.7
+674.29956 2778.3
+674.79675 1467.0
+675.30127 1372.0
+676.63458 1361.5
+684.28088 1384.6
+684.77954 1644.4
+685.28394 710.3
+685.78162 683.5
+693.28821 18234.8
+693.78925 14324.0
+694.28955 7497.4
+694.78992 2687.8
+720.42389 575.1
+725.31976 564.6
+730.02045 662.6
+784.71045 620.2
+784.75281 664.0
+789.34680 1837.4
+789.83521 1431.9
+790.34686 922.5
+795.52509 1157.8
+796.35803 690.7
+828.36060 1085.1
+849.41077 2265.3
+851.62378 2107.4
+851.87604 1601.9
+852.12469 1002.1
+855.87665 5967.7
+856.12781 8137.0
+856.37842 6604.9
+856.62787 6227.6
+856.88306 3148.0
+857.12781 1308.9
+860.38086 8567.3
+860.63123 13454.9
+860.88080 10613.8
+861.13245 6516.8
+861.38239 2925.1
+861.62671 1156.7
+872.40210 917.9
+875.92352 1078.2
+884.39185 931.0
+884.90289 766.7
+888.65076 1291.4
+888.89655 1462.6
+889.15356 2520.3
+889.40283 2128.4
+909.80640 650.7
+911.41431 658.1
+911.93530 1648.1
+912.43951 1058.1
+928.22296 690.1
+935.50598 654.2
+941.45654 1079.1
+997.52087 654.9
+1010.44189 641.0
+1015.12689 1598.7
+1015.45557 1490.4
+1015.79749 1211.6
+1020.85638 634.3
+1025.97119 1573.5
+1026.47791 2560.4
+1026.98047 1127.0
+1057.23328 902.4
+1059.12659 1107.7
+1059.45740 2288.8
+1059.78381 1573.3
+1060.12341 1256.1
+1060.45361 840.4
+1061.49304 1817.1
+1061.99780 1365.2
+1062.49170 1043.3
+1065.12524 1026.2
+1065.45630 1435.0
+1065.79089 1794.9
+1066.12537 1032.0
+1072.56262 655.4
+1090.70264 775.4
+1171.14282 577.6
+1198.21924 3329.3
+1214.47278 988.5
+1215.09509 561.6
+1215.18799 560.9
+1462.24414 730.1
+1525.34839 849.4
+1879.06421 1525.9
+1879.51440 19459.9
+1879.80273 1312.8
+1879.94873 1642.9
+1906.72766 684.8
+1907.08179 7765.4
+1907.52100 779.3
+1930.49146 1051.2
+S	1597	1597	410.4774946
+Z	4	1637.87868
+103.25219 10944.3
+107.41748 13186.8
+114.99449 10584.1
+121.79144 15539.5
+121.79601 36149.6
+135.42877 11442.6
+144.24261 10585.0
+145.45280 9346.5
+146.91992 12753.3
+148.30075 10787.6
+159.20187 11260.3
+160.26297 10602.5
+165.76712 12724.4
+165.77817 12618.3
+174.08890 16019.8
+176.10684 30247.7
+177.10185 31940.1
+182.45866 11429.0
+188.27158 37187.9
+188.28827 46651.1
+188.29749 44159.8
+188.30721 43019.7
+188.32330 22783.3
+188.33710 12542.9
+188.35611 11022.2
+188.38460 11532.7
+189.32671 10324.2
+193.75027 9732.6
+198.05850 10770.9
+198.88332 18543.3
+198.93384 10952.0
+199.14644 14224.7
+199.18001 356628.8
+199.21335 17615.8
+199.24504 20836.7
+199.25774 33112.4
+199.26892 51500.2
+199.29570 16843.6
+199.36705 18926.5
+199.39352 10980.1
+200.18266 36134.1
+203.11714 16931.0
+221.12796 1318621.1
+222.13135 152110.1
+227.17485 87201.5
+228.17729 11084.7
+230.42291 10966.9
+233.16440 44384.1
+244.54851 10935.6
+249.12283 228769.7
+250.12677 17805.3
+251.14941 27269.0
+255.10698 13753.4
+255.26950 12939.0
+258.14993 192499.3
+258.65112 37340.9
+262.70877 12421.8
+272.01376 16302.2
+272.16855 17132.5
+289.41122 9831.1
+292.50479 12846.7
+317.18515 35691.2
+326.50946 101905.0
+326.84479 29546.0
+330.69266 10789.7
+342.23438 11962.0
+344.19650 18911.4
+345.74814 11981.9
+362.16669 12208.8
+362.20651 94576.7
+363.21213 16719.4
+363.51978 19220.9
+364.18954 137002.1
+364.69101 29965.2
+384.95807 43844.1
+385.21030 15234.9
+388.53064 232484.8
+388.86481 145844.8
+389.19852 18274.5
+426.22513 193819.9
+426.55954 154591.7
+426.89465 38182.3
+427.50784 20415.6
+430.67136 13429.1
+432.71783 26701.0
+437.21329 61972.3
+438.23248 17679.3
+457.91708 17464.8
+460.92172 18098.1
+461.25348 32612.4
+463.91983 1401208.6
+464.25397 934897.1
+464.58832 309060.3
+464.92303 83913.0
+464.97308 13246.4
+475.29172 26348.2
+476.77286 14553.2
+489.26007 187941.8
+489.76089 84876.4
+490.26129 35640.6
+506.35547 10390.7
+511.26617 18683.8
+511.59558 35268.3
+512.94330 46452.7
+513.27411 40337.8
+513.60571 13713.4
+515.29205 61057.2
+518.24548 58254.1
+518.74390 31014.4
+532.53979 28985.8
+544.77484 21810.3
+553.28693 26709.6
+553.78168 52422.3
+554.28424 28283.9
+562.29028 46860.5
+564.28027 19318.6
+569.71344 11296.0
+573.28754 149515.2
+573.78857 122144.5
+574.28778 26158.8
+574.78589 18319.5
+578.28851 13016.1
+580.81860 22060.8
+582.29193 3618289.8
+582.79321 2265671.3
+583.02350 20595.0
+583.29462 657687.4
+583.79388 130832.1
+584.27911 23230.9
+584.42169 13326.1
+615.78918 12409.6
+629.82672 22606.7
+631.32831 23112.9
+638.83423 462993.8
+639.33539 359189.1
+639.83649 114585.0
+640.33783 25418.5
+643.34064 16084.5
+649.29193 68269.8
+650.29608 17190.9
+663.39130 13709.1
+663.80359 11399.4
+727.37213 82602.1
+728.37244 35525.6
+762.38177 25777.6
+784.64325 11910.1
+855.94025 11200.1
+875.45642 17911.5
+1113.13989 12855.4
+1198.06592 24099.5
+1198.20642 56016.8
+1220.61084 12692.5
+1583.76782 12781.0
+S	1598	1598	410.9790746
+Z	4	1639.885
+101.47267 3465.8
+105.84470 3602.4
+108.27119 3936.8
+108.62387 3283.0
+109.70397 3580.7
+115.22823 3322.8
+121.79610 13820.7
+122.05286 3173.5
+124.54125 3688.1
+127.50484 2867.2
+127.50822 2893.4
+137.28363 3980.7
+137.91280 3504.7
+142.43175 3513.0
+146.59624 3109.5
+146.90561 3825.7
+156.31682 3214.7
+158.09584 13232.8
+160.11131 4952.9
+161.92384 3595.6
+163.97252 3080.4
+165.77823 4260.3
+176.10683 22101.3
+177.10193 29536.9
+195.39764 4356.5
+195.65170 3905.0
+198.88135 5259.3
+199.08109 5538.1
+199.18036 258864.8
+199.19446 3796.6
+199.19954 3222.8
+199.23352 5047.1
+199.26242 13679.5
+199.27441 7326.8
+199.28818 5213.1
+199.36259 6471.0
+199.38260 4034.3
+200.18332 28520.7
+203.11775 12311.1
+207.57524 3821.4
+215.10997 3192.7
+218.47842 4205.2
+220.78391 6168.1
+221.12823 1006797.5
+221.30122 4045.2
+221.47435 4773.6
+222.13153 123610.4
+223.13551 5578.8
+224.15163 6653.5
+226.15536 5827.3
+227.17517 65688.9
+228.17851 8924.4
+231.11209 5470.0
+233.16463 39636.4
+234.16833 9395.6
+244.16541 9071.4
+249.12308 151931.7
+249.63779 4988.1
+250.12709 16404.6
+251.15012 23678.1
+254.16127 9972.4
+255.10910 7151.7
+257.92670 3314.8
+258.15018 151348.3
+258.65198 33752.1
+259.15192 5376.7
+261.15909 6555.8
+272.13452 5624.8
+272.17041 5703.6
+315.02121 3426.4
+317.18610 21485.3
+326.50992 83857.5
+326.84454 49542.2
+327.17883 7195.0
+344.19653 12011.4
+348.19321 6053.3
+355.18466 10446.2
+362.20731 72811.4
+363.21054 15309.9
+363.52213 8630.6
+363.85403 7740.6
+364.18973 112049.4
+364.69141 42575.3
+365.19034 7011.8
+369.47766 3965.3
+372.77661 3246.1
+373.80011 3418.1
+376.52209 4012.6
+379.70032 3670.2
+381.33868 4874.2
+382.25510 4976.4
+382.52933 8150.4
+384.95886 34731.8
+385.20938 23767.2
+385.46072 11287.4
+385.71317 4414.8
+387.19812 12064.3
+388.53113 184840.7
+388.86572 90739.8
+389.19934 38785.2
+389.53470 6823.0
+420.22113 6459.5
+420.55682 5210.0
+421.22223 5556.1
+423.71304 9358.3
+426.22568 230921.9
+426.56006 164684.5
+426.89441 63603.7
+427.22852 19439.9
+427.52307 4122.9
+428.99719 4049.9
+432.71924 31609.3
+433.22128 16208.6
+433.43970 3675.6
+437.21371 56553.2
+438.22095 9370.7
+447.29474 9856.0
+447.74005 3432.6
+457.91611 12864.5
+458.24960 10404.8
+463.10785 3876.7
+463.22781 8722.8
+463.39832 4169.7
+463.92044 943622.7
+464.25446 724210.8
+464.44324 6548.3
+464.58868 281208.1
+464.78284 5295.7
+464.92300 87098.5
+464.96902 5602.9
+465.25754 25634.1
+465.30374 5380.5
+475.29129 26875.3
+476.29654 4733.7
+476.78394 4874.3
+480.25644 6790.6
+480.75772 5355.0
+489.26074 183996.3
+489.76221 89888.0
+490.26361 30724.6
+490.76938 5028.2
+509.77417 7852.1
+510.38141 3643.6
+511.26050 10619.9
+511.59915 8126.2
+511.92758 6512.5
+512.94330 25011.5
+513.27649 29587.1
+513.60913 7240.8
+515.29236 62616.8
+516.29559 15409.8
+518.24518 56635.5
+518.74725 40310.5
+519.24878 8120.8
+528.63708 3938.1
+532.51837 13386.0
+544.77655 25626.5
+545.27783 12207.0
+549.56702 3661.6
+550.29688 12709.5
+553.28632 20875.3
+553.78351 62970.1
+554.28381 38068.0
+554.78638 13238.9
+562.29181 30830.4
+562.79468 10291.5
+564.28473 14160.4
+564.77673 10439.8
+573.28802 138266.2
+573.78918 83095.2
+574.28998 29572.8
+574.78772 20170.7
+575.29315 9067.6
+580.82294 15614.5
+581.07410 7222.0
+581.32129 12057.2
+581.56537 14926.1
+581.79950 4793.9
+582.06616 8269.5
+582.29248 3108677.8
+582.36591 7315.2
+582.72150 4690.7
+582.79364 1818864.1
+582.87360 4255.6
+583.02588 21151.3
+583.29510 634818.4
+583.43707 7055.1
+583.52222 19838.5
+583.79742 177705.9
+584.01569 7317.8
+584.26300 8676.1
+584.30072 23492.2
+584.51794 4713.1
+611.33252 3649.1
+612.31146 7171.8
+629.82953 22584.9
+630.32538 14657.9
+630.38062 5146.1
+630.75751 3670.2
+630.83484 6677.3
+631.32782 20795.1
+631.83203 13476.9
+632.33179 4736.2
+638.83447 467273.4
+639.33569 314032.3
+639.83728 111367.8
+640.33856 28660.9
+643.34393 15593.2
+643.82452 5242.6
+644.32281 5045.1
+649.29279 69789.5
+650.29523 22005.1
+661.35254 9441.0
+663.38110 16665.8
+664.38580 7738.0
+676.64819 6525.2
+680.17322 3903.2
+689.92554 3937.5
+705.45917 3327.5
+709.36127 6054.8
+727.37286 110260.2
+727.72723 4652.8
+728.37622 34580.4
+729.37225 6790.5
+762.37354 18945.1
+763.38348 9701.8
+764.32062 11560.5
+765.31885 8289.2
+795.52301 5229.7
+815.38251 3636.2
+853.72839 3407.0
+875.46069 16298.1
+876.46210 7117.7
+920.42657 4323.8
+931.43591 3366.3
+974.72223 3598.0
+990.15955 3675.6
+990.54645 5029.3
+1018.59723 4676.2
+1057.25586 4166.8
+1140.87903 3963.3
+1188.28015 4704.2
+1198.16125 20428.6
+1260.17773 3427.1
+1380.16809 4002.5
+1605.59546 4194.6
+S	1599	1599	683.0826896
+Z	4	2728.29946
+179.03008 1231.4
+185.19855 1552.8
+188.26038 1700.8
+188.26938 2405.9
+188.27864 2547.0
+188.29813 2764.5
+188.30321 2718.3
+188.31383 1766.2
+188.34508 1464.7
+191.25824 1110.6
+198.88152 1759.5
+199.16623 2521.6
+199.23830 1221.2
+199.25063 3144.8
+199.26031 3492.1
+199.26582 3207.1
+199.27469 4243.9
+199.29724 1886.2
+199.30995 1779.9
+199.37334 1919.6
+222.08684 2405.0
+223.07127 3482.0
+233.58029 1368.3
+235.17134 1229.8
+240.09698 8496.1
+246.25186 1679.1
+252.85873 1460.9
+264.57764 1422.7
+300.45184 1442.0
+301.11414 5985.7
+311.13461 13704.4
+323.13644 1776.1
+340.16348 1483.1
+368.15451 5643.0
+368.95236 1474.6
+372.15115 2084.6
+379.17157 1629.0
+380.15479 1973.8
+381.37619 1560.7
+384.75732 50796.8
+385.25903 21677.0
+385.75986 2745.3
+408.14850 2683.7
+425.17627 7609.7
+426.17841 2004.6
+427.56189 2187.5
+442.00446 1322.2
+461.40897 1252.4
+463.83826 1724.8
+475.29962 1459.2
+481.83173 1341.6
+482.95294 1435.7
+493.93842 1500.2
+532.52679 4088.4
+536.31390 1945.2
+540.20355 13686.8
+541.20477 1993.8
+549.17511 2534.6
+582.30151 1425.9
+594.21057 2052.1
+594.41333 1944.2
+596.28619 1868.5
+596.54205 3055.1
+596.78668 2990.5
+604.83997 1856.7
+605.62335 1788.3
+608.58832 1594.5
+611.24054 4305.9
+614.04578 10868.8
+614.29620 13052.1
+614.54675 12093.2
+614.79413 2608.6
+615.04230 2838.1
+618.54858 35808.8
+618.79932 44968.6
+619.04980 26673.8
+619.30054 10535.2
+619.54901 4877.4
+622.40399 2659.8
+623.98529 8036.2
+624.31970 9612.9
+624.65222 5432.7
+624.99249 2851.7
+633.35168 5977.9
+633.85358 5182.8
+646.31964 1511.5
+660.99402 4923.1
+661.33002 8635.6
+661.66376 8722.8
+662.00085 2770.6
+665.05945 2837.6
+665.55597 2716.3
+666.99933 13848.9
+667.33411 18844.0
+667.67010 8612.9
+668.00317 3299.3
+698.26025 1747.0
+700.68256 16168.1
+701.01581 14820.6
+701.34875 9046.0
+701.68213 3567.2
+718.35699 5176.4
+718.69238 9419.8
+719.02191 7158.6
+719.35986 3935.8
+719.68591 1848.2
+724.36096 47876.3
+724.69531 57946.3
+725.02899 33376.6
+725.36377 11576.8
+725.69891 4832.1
+737.57825 1577.6
+740.40186 2669.7
+740.89722 3605.7
+756.70013 8082.6
+757.03607 8514.9
+757.36517 6510.5
+757.70325 5648.3
+762.70294 35251.5
+763.03680 43179.8
+763.37115 28341.0
+763.70514 16461.0
+764.04663 2860.0
+775.70673 8555.1
+776.04034 9496.5
+776.37701 4467.0
+776.70856 2680.3
+781.71063 42329.5
+782.04443 57807.2
+782.37909 39355.0
+782.71271 15416.5
+783.04968 5002.3
+783.31805 2372.2
+783.39789 1497.1
+783.82233 1962.0
+784.32397 2023.2
+784.71075 1506.1
+789.37933 2041.3
+794.71436 16884.4
+795.04822 17394.0
+795.37921 14355.0
+795.52710 2014.8
+795.71655 6992.7
+796.04401 1844.5
+800.71759 92904.2
+801.05109 118229.5
+801.38544 71799.7
+801.71985 36858.7
+802.05365 10706.6
+804.91937 6943.8
+805.42035 5922.7
+805.92249 5165.6
+806.38135 2767.2
+812.38611 2148.6
+818.39392 6160.4
+818.72614 11035.8
+819.06165 7884.8
+819.39117 5538.8
+819.71881 2203.0
+824.39575 80545.4
+824.73035 108306.3
+825.06384 71028.8
+825.39868 38198.7
+825.73065 8871.9
+829.37579 1534.4
+840.36224 1962.0
+852.34113 4608.2
+852.84619 3308.6
+878.45648 4637.1
+878.96173 3694.8
+879.45929 2395.5
+927.96948 1787.9
+935.47137 7720.7
+935.97540 11022.5
+936.47778 8029.7
+936.98090 4294.2
+937.47833 1713.5
+954.37799 2303.7
+954.87347 1947.7
+962.88208 10036.6
+963.38464 6439.7
+963.87946 2562.8
+980.89471 2835.8
+981.38782 5231.3
+981.89746 2415.0
+991.98004 1672.6
+999.99347 6419.6
+1000.49103 5534.6
+1000.99658 2382.7
+1039.49463 1611.9
+1051.02356 5682.8
+1051.52161 4155.1
+1057.23218 2512.8
+1140.47510 1520.8
+1143.56787 1413.8
+1198.17773 7485.8
+1298.69250 1652.4
+1489.15918 1960.9
+1620.41553 1760.6
+1694.74951 1681.9
+1701.89844 1547.9
+1793.65039 1592.3
+1878.95630 2583.1
+1879.52295 43229.1
+1879.80078 7824.5
+1880.11475 2974.4
+1881.15369 2147.4
+1881.54712 2035.1
+1906.70398 2010.2
+1907.04663 17777.2
+1930.68323 2282.1
+S	1601	1601	410.4728571
+Z	4	1637.86013
+100.86162 654.7
+101.68374 615.0
+101.91012 572.6
+103.70311 508.3
+105.54782 574.4
+109.81597 634.1
+115.05366 640.1
+120.43445 629.7
+120.66007 563.8
+121.79560 2233.5
+123.30714 516.4
+127.83678 605.5
+133.12709 1057.7
+137.76282 661.2
+141.06509 698.1
+142.76338 575.5
+146.03357 536.8
+151.77342 585.9
+158.09627 2331.0
+162.46561 556.2
+164.37509 572.7
+165.77718 759.4
+169.48622 777.0
+171.63687 569.2
+176.10683 4041.7
+177.10205 4243.4
+182.77499 1089.5
+183.08287 592.2
+188.21797 583.2
+188.24597 1092.8
+188.27834 2223.3
+188.29768 2027.9
+188.33759 775.0
+198.88257 929.9
+199.15912 669.2
+199.18025 38162.8
+199.21436 892.6
+199.24472 1448.2
+199.25752 1189.0
+199.26788 2503.9
+199.29076 713.3
+199.31575 749.0
+199.34521 792.1
+199.51318 596.5
+200.18367 4858.9
+200.63663 841.8
+203.11722 1869.1
+212.00014 644.4
+218.26385 611.8
+220.78363 771.8
+220.95827 627.4
+221.11340 807.1
+221.12823 156163.2
+221.29996 1029.0
+221.47563 754.7
+222.13161 22113.2
+223.13463 1036.6
+227.17519 8381.8
+228.17915 1210.0
+231.11160 845.1
+233.16469 6351.9
+234.12361 1389.0
+234.16811 1064.3
+241.19235 650.3
+244.16612 981.0
+249.12318 23197.1
+250.12648 2515.7
+251.15019 4733.6
+254.16139 2117.0
+255.10655 883.6
+258.15009 21557.9
+258.65173 5852.8
+261.15906 893.7
+265.68918 498.2
+272.05234 756.8
+272.17136 1161.3
+280.17004 942.2
+288.81454 1525.9
+300.15118 1102.7
+317.18515 3649.6
+318.18765 706.9
+318.56586 575.6
+326.51007 10315.2
+326.84467 6897.4
+327.17825 2549.4
+330.22458 558.1
+344.19662 2224.8
+348.19031 695.5
+348.44443 947.6
+355.18567 2424.2
+362.20715 11931.5
+363.21069 2249.1
+363.52121 2509.3
+363.85458 1253.2
+364.18994 18680.8
+364.69141 7775.3
+365.19324 965.0
+365.69583 682.7
+367.12360 594.5
+376.52353 865.7
+382.52808 1611.8
+382.86127 1453.7
+384.95911 3637.5
+385.20920 3637.1
+385.46283 1558.5
+387.19852 1766.8
+388.53113 25547.4
+388.86533 14891.1
+389.19968 5971.9
+389.51355 554.0
+389.53464 1357.9
+395.88242 540.8
+400.48709 643.5
+423.71423 1285.9
+424.21756 825.5
+426.22552 38602.7
+426.55994 21632.3
+426.89432 9270.0
+427.22839 2253.6
+427.52521 808.1
+427.56149 933.5
+432.71902 5114.2
+433.22131 2781.3
+433.71976 955.6
+433.76004 628.6
+437.21320 11364.7
+438.21793 2546.1
+447.29599 925.0
+457.27866 869.0
+457.91730 2914.9
+458.25128 1858.3
+459.98004 582.9
+460.78818 1606.8
+461.06989 682.4
+461.08908 586.8
+461.29019 988.6
+463.22913 1150.1
+463.92032 147876.3
+464.25439 103506.4
+464.58847 45793.6
+464.77756 618.8
+464.92258 13890.6
+464.97549 779.7
+465.25613 3537.3
+475.29056 3371.4
+476.29700 1002.1
+480.25439 1678.4
+480.76126 957.4
+483.29840 552.5
+489.26065 27534.9
+489.76178 13995.8
+490.26324 4502.4
+490.76306 903.9
+509.77585 1656.7
+510.27414 1574.7
+512.94287 3827.1
+513.27802 3815.8
+513.61176 1500.0
+515.29224 11481.4
+516.29663 1985.8
+518.24518 10138.3
+518.74683 6672.7
+519.24774 1918.1
+519.74957 603.0
+522.30115 762.1
+531.15112 653.5
+532.50214 2409.1
+544.77594 4003.3
+545.27673 2356.9
+547.00342 672.8
+549.12970 895.2
+550.29694 2770.5
+552.27472 713.0
+553.28790 2044.8
+553.78253 7277.6
+554.28461 4986.8
+554.78473 2034.2
+562.29175 4764.7
+562.79248 3714.1
+564.28418 1888.8
+564.77905 1383.9
+565.27393 1179.6
+573.28723 20393.8
+573.78894 16837.2
+574.28955 4779.4
+574.79065 2812.0
+575.29053 1250.6
+575.78925 898.9
+576.22803 871.2
+579.84534 881.6
+580.81879 2357.3
+580.97058 882.9
+581.07239 1185.3
+581.22882 636.8
+581.32202 910.1
+581.56250 2364.8
+582.08112 1446.2
+582.20319 1034.5
+582.22791 1510.5
+582.29236 448849.6
+582.37354 1196.9
+582.72583 1053.2
+582.79352 279697.4
+583.02795 2772.4
+583.29498 102094.8
+583.52264 3247.5
+583.62390 833.5
+583.65302 703.6
+583.79535 28043.5
+583.89984 856.8
+584.01764 1766.8
+584.29187 5861.3
+584.41522 834.9
+584.80078 1183.5
+599.27832 1351.2
+609.32758 709.0
+612.14655 586.0
+612.31104 1153.8
+629.82715 3604.3
+630.32941 3143.3
+630.83221 839.6
+631.32727 2736.5
+631.83118 1857.1
+632.33594 818.4
+638.83417 69871.3
+639.33533 49243.2
+639.83679 20699.9
+640.33807 4644.7
+640.83887 998.7
+643.34167 1687.0
+643.82935 740.2
+649.29199 10742.5
+650.29456 3805.5
+661.35541 2854.6
+662.35114 948.8
+663.38422 1791.8
+664.38153 1204.4
+676.62268 1144.0
+695.37054 1163.7
+710.36578 766.1
+727.37231 19286.7
+728.37402 7479.5
+729.37714 1202.5
+762.37622 4176.6
+763.37988 1619.5
+764.32153 3479.0
+765.32611 1264.5
+795.52649 965.4
+809.85663 658.3
+875.46332 2392.0
+876.46051 1309.4
+877.41235 646.9
+920.42255 905.5
+978.22614 542.2
+1019.70026 693.6
+1057.20813 785.8
+1109.12036 657.0
+1136.53394 570.6
+1198.13416 2923.3
+1308.67334 599.0
+1389.68005 609.9
+1521.41980 661.2
+1525.34412 1072.5
+S	1602	1602	410.9743246
+Z	4	1639.866
+103.71615 594.7
+104.28410 665.1
+104.76037 564.4
+112.17350 528.2
+113.44843 756.3
+118.23682 661.0
+119.29003 547.4
+121.79447 1947.1
+121.79801 712.4
+130.50430 585.0
+133.33514 574.1
+158.09601 1510.4
+160.80859 673.4
+165.79396 631.9
+167.47159 565.3
+171.64113 572.1
+172.19911 552.1
+176.10669 2176.5
+177.10172 2521.9
+178.44151 559.9
+182.75920 796.2
+183.98230 597.9
+189.16420 549.9
+199.16631 1104.5
+199.18011 32591.6
+199.26434 2836.9
+199.28038 893.0
+199.36488 1147.5
+200.18333 4084.6
+200.78760 604.3
+202.75090 609.6
+203.11830 1213.1
+221.12808 116066.5
+222.13152 17004.7
+223.13338 742.9
+227.17508 7137.1
+228.17905 841.3
+233.16435 3717.1
+246.81235 488.2
+249.12300 19229.7
+249.63673 906.6
+250.12624 1874.6
+251.14932 2001.8
+251.72794 590.3
+253.73987 652.6
+254.16125 1866.6
+255.78383 606.5
+258.14993 17839.9
+258.65186 4089.8
+259.15170 678.0
+259.83353 531.2
+261.15939 797.5
+270.99380 541.8
+272.13779 633.3
+272.17068 821.1
+283.64719 540.7
+284.19476 674.0
+308.86041 776.4
+314.24164 545.2
+317.11023 554.2
+317.18460 2281.3
+326.50961 10037.8
+326.84399 5015.7
+327.17877 1064.2
+328.47342 601.5
+328.98151 562.0
+342.22800 717.1
+344.19601 1033.3
+355.18542 1024.7
+362.20697 8453.7
+363.21072 2045.7
+363.52078 1379.2
+364.18997 12448.7
+364.69141 4871.6
+365.19482 901.8
+378.24313 1051.2
+378.57932 745.1
+379.39380 611.5
+382.52661 1249.8
+384.95978 2514.7
+385.20932 3723.0
+385.45889 1956.3
+387.19635 1157.9
+387.96942 750.6
+388.53085 21872.3
+388.86511 12162.2
+389.19989 4520.5
+389.53342 693.3
+396.69962 580.0
+426.22519 25722.9
+426.55951 15588.6
+426.89420 5935.7
+427.22800 1586.7
+427.49048 774.7
+432.71829 3928.2
+433.22293 826.8
+437.21286 5260.5
+438.22217 1079.2
+438.73538 914.3
+447.29623 1540.6
+450.18420 679.7
+457.91595 3628.4
+458.24875 1983.5
+460.78680 2729.0
+461.25327 900.9
+461.29074 1197.0
+461.58936 798.4
+463.22833 974.3
+463.92001 120688.2
+464.25415 91216.0
+464.58820 40280.3
+464.92203 9971.3
+465.25671 2192.8
+466.55380 603.3
+475.28973 2552.0
+476.77969 783.0
+481.74042 534.2
+489.26050 18474.2
+489.76227 8511.4
+490.26376 2209.0
+509.77478 3031.2
+510.27774 1844.4
+511.26184 2881.0
+511.59595 1801.6
+511.93073 860.7
+512.94183 3784.1
+513.27728 3681.1
+513.60931 2303.8
+513.94958 716.1
+515.29175 5686.0
+516.29199 1075.2
+518.24457 6049.1
+518.74579 2973.5
+519.24701 1148.5
+532.49866 1667.5
+544.77539 3068.7
+550.29700 1229.9
+553.28583 2361.0
+553.78210 7633.0
+554.28430 3654.2
+554.78430 1151.1
+562.29077 4254.8
+562.79358 2020.9
+564.78772 1577.1
+565.28052 727.8
+573.28729 15056.8
+573.78888 8272.8
+574.29114 3496.9
+574.78644 1947.9
+575.28552 734.9
+577.28131 578.0
+578.68787 619.3
+578.79346 981.2
+580.68896 506.4
+580.70673 492.5
+580.81622 1555.4
+581.31769 831.9
+581.55811 1424.4
+582.29205 349576.6
+582.35938 983.8
+582.79333 213876.3
+583.02637 1757.6
+583.29462 71284.2
+583.53345 1107.8
+583.79492 17241.3
+584.00128 756.2
+584.29419 3549.6
+584.79803 634.4
+599.06482 556.5
+605.65515 574.0
+629.82813 1952.6
+631.32599 1727.3
+631.83167 1032.5
+632.32813 700.3
+638.83398 47758.4
+639.33502 32586.2
+639.83698 11900.4
+640.33740 3289.9
+643.33905 1339.6
+643.82697 986.1
+649.29279 6846.4
+650.29486 2199.3
+661.35547 1580.6
+663.38330 1845.6
+676.61945 932.0
+727.37164 9414.9
+728.37512 3498.5
+760.79669 593.4
+762.37726 2251.6
+763.37970 1401.8
+764.31866 1766.5
+795.53674 1030.1
+875.45428 1928.2
+877.40692 692.5
+920.42896 744.2
+1019.70264 893.0
+1124.08838 664.2
+1140.41772 954.4
+1141.60999 616.7
+1198.11353 3229.9
+1207.53992 620.2
+1222.06531 667.2
+1248.96167 620.4
+1329.78455 727.2
+1403.81531 638.4
+1445.58960 608.8
+1489.24683 585.5
+1530.33716 609.8
+S	1603	1603	1879.93924127
+Z	3	5636.542
+Z	2	3758.031
+531.59949 649.9
+532.52954 1741.8
+542.55096 608.2
+630.35321 716.5
+676.63959 1058.1
+766.13538 682.8
+795.53320 1118.9
+853.96033 703.0
+1198.17883 3153.6
+1243.46313 779.7
+1420.66199 733.4
+1427.87219 617.9
+1434.76709 616.2
+1494.73181 635.2
+1499.66541 722.2
+1525.30957 823.2
+1568.70068 612.2
+1879.24927 3119.8
+1879.53210 19741.8
+1880.49207 767.7
+1881.94519 588.3
+1883.17883 681.9
+1907.05872 7501.2
+1930.43225 1248.3
+1973.91736 631.3
+1991.39612 563.1
+S	1605	1605	757.5539926
+Z	5	3782.73084
+197.12646 632.7
+197.73378 547.1
+198.79048 758.7
+198.88942 952.6
+199.17439 684.4
+199.19200 983.2
+199.20270 582.8
+199.23648 675.0
+199.25903 1291.5
+199.27295 1834.8
+199.28828 1297.0
+199.34702 682.1
+199.38702 762.7
+200.95033 580.2
+207.50690 639.5
+209.13774 563.7
+210.27579 560.6
+216.43669 562.1
+230.20341 529.9
+234.45479 666.1
+237.47345 784.9
+241.90660 599.8
+246.15590 9999.4
+247.15970 948.9
+251.10225 719.0
+254.74483 633.5
+279.18918 733.0
+311.13467 1032.6
+348.11826 922.7
+350.27817 847.7
+366.12735 1138.5
+396.72156 3446.2
+397.22354 1364.5
+413.99167 567.0
+421.70892 2489.8
+422.20721 747.8
+428.72995 1005.7
+441.16922 763.2
+459.28302 1062.1
+462.23032 806.1
+479.22351 608.1
+479.72290 665.2
+482.65695 668.3
+483.16754 555.8
+498.19620 2186.5
+501.19681 1073.6
+502.19397 790.9
+516.31213 747.2
+517.81519 799.4
+529.19708 990.1
+532.47614 2159.9
+532.59808 6144.1
+532.93317 6460.3
+533.26825 3287.3
+533.60138 690.9
+534.74060 1762.4
+535.23651 1398.3
+536.22571 641.1
+538.22626 1664.5
+540.20251 2266.5
+543.74304 3454.2
+544.24530 2559.4
+548.31451 2374.9
+549.15558 700.6
+549.25958 2927.3
+549.31396 950.5
+550.26147 859.4
+575.61847 636.4
+575.95691 1011.3
+597.26318 1504.2
+603.94006 794.4
+611.24451 874.9
+612.29425 1689.8
+612.62866 1928.4
+612.96429 1147.9
+615.82703 999.1
+616.33417 1265.4
+617.27594 3617.0
+617.77875 2218.6
+618.27924 1142.8
+635.97491 3234.1
+636.30933 2805.5
+636.64209 2300.2
+636.97278 968.4
+638.99072 684.0
+649.64349 789.2
+655.31165 1600.6
+661.28033 759.8
+665.78522 956.0
+666.28143 1202.8
+673.34875 2056.6
+673.84497 1289.3
+674.29858 12042.5
+674.79962 6928.0
+675.30084 2147.4
+676.26532 1080.2
+676.63348 1146.6
+686.32135 1343.7
+694.31268 3656.6
+695.31238 703.9
+695.38318 1516.0
+700.66394 715.8
+702.38342 766.8
+706.12573 952.1
+706.31720 2239.3
+706.51959 1022.1
+712.29205 3326.3
+712.66449 2221.5
+713.00159 1160.4
+713.29620 907.2
+716.34717 1390.3
+716.86322 1515.9
+717.35687 1843.0
+717.86694 1349.7
+723.09894 1535.3
+723.34924 1962.2
+723.41791 768.9
+723.59827 1958.1
+724.11035 758.2
+729.81305 2768.5
+730.30896 1296.6
+730.81573 870.6
+736.01062 3525.6
+736.34491 2678.1
+736.60974 1410.8
+736.68121 2020.8
+737.23962 598.0
+737.59033 987.2
+737.80505 641.4
+737.86127 780.1
+738.81860 5969.7
+739.31903 3867.0
+739.81128 1600.9
+743.34167 3841.5
+744.35138 1071.7
+781.35327 2506.6
+782.33881 884.7
+783.70868 642.2
+785.35815 808.0
+789.34241 5801.1
+789.61279 925.6
+789.83795 2753.7
+790.33826 1621.5
+792.43500 21266.9
+793.43683 8672.5
+794.44159 2100.3
+795.36023 811.8
+798.39795 6109.3
+798.89679 5850.1
+799.39832 3636.8
+807.37378 4339.8
+807.62964 2449.2
+807.88062 1976.0
+808.13049 1282.1
+809.88074 872.4
+810.13013 1273.0
+812.11841 735.2
+812.70880 928.2
+813.03772 962.3
+813.38000 855.3
+815.85150 777.7
+816.36694 699.3
+823.32043 1695.6
+824.86121 4188.7
+825.36261 2702.6
+826.36902 818.1
+831.40448 2258.3
+831.89874 2280.7
+832.40485 1721.1
+834.15955 677.1
+836.12811 1290.2
+836.38239 1217.9
+836.63934 1235.3
+839.04810 1268.1
+841.32886 3180.4
+842.41150 3287.7
+843.40802 1471.0
+844.71686 1472.6
+845.05481 1275.8
+845.37457 834.4
+845.72583 1009.2
+850.63959 2296.6
+850.71887 921.8
+850.89215 1657.9
+851.05194 1365.9
+851.14276 2778.9
+851.39124 3393.7
+851.88995 843.8
+852.37646 660.8
+854.41272 1568.2
+855.64301 1260.9
+856.45081 11216.8
+857.45313 1268.0
+864.39191 2475.7
+864.64545 2877.5
+864.89563 6263.0
+865.14697 5014.0
+865.39996 2315.6
+870.37701 1523.6
+872.12891 2232.2
+872.38110 1466.1
+875.14752 1392.7
+875.39539 1949.4
+875.64764 3596.8
+875.89880 1354.6
+876.14056 980.8
+876.38397 2803.2
+876.63379 2457.1
+876.71979 1218.7
+876.88696 2406.8
+877.13062 1428.2
+878.14313 907.9
+878.40210 1654.7
+878.89178 1726.6
+879.14056 734.1
+879.39966 5605.4
+879.65057 6879.3
+879.90271 8579.3
+880.15302 7045.8
+880.40796 4844.3
+880.64618 1217.1
+880.88654 3596.8
+881.14093 3529.9
+881.38037 1789.1
+881.88776 807.1
+882.14990 2254.8
+882.40863 4884.5
+882.65430 9907.2
+882.90643 5498.9
+883.15497 4521.5
+883.39557 860.3
+884.15533 1707.8
+884.40814 2386.9
+884.66138 1296.3
+885.12872 1304.3
+885.38324 1647.9
+885.64160 3825.0
+885.88904 2226.2
+893.73810 1455.6
+894.07135 1818.2
+894.41632 1510.6
+894.74347 937.6
+897.40778 1129.5
+899.75562 977.6
+900.08105 1694.6
+900.41107 1895.5
+901.40930 3832.1
+901.65851 4483.8
+901.91595 2026.3
+902.16516 1798.3
+904.15295 1248.7
+905.90973 904.3
+906.40723 1278.8
+906.73138 699.8
+909.43701 1289.0
+909.93134 1168.6
+910.88525 3073.1
+911.38251 3087.5
+911.88391 2181.1
+917.93994 3871.2
+918.44147 2616.4
+918.94110 1579.9
+919.45514 1183.7
+930.38361 998.9
+930.89532 1851.6
+931.38849 1073.4
+932.37714 973.5
+937.09082 887.0
+937.42206 1426.0
+938.39307 813.8
+939.39612 7362.1
+939.89789 5444.8
+940.40155 4702.7
+940.90094 1605.3
+943.09967 1070.8
+953.45575 908.9
+953.95807 1020.6
+954.46515 909.2
+957.43549 1462.9
+958.43219 969.0
+966.40894 1877.4
+970.08899 1033.4
+970.77051 998.0
+974.91412 7428.0
+975.41748 7007.2
+975.91998 3220.4
+976.10266 1061.1
+976.42273 1663.9
+976.91699 836.7
+978.96460 809.5
+981.46588 4635.8
+981.76715 1466.7
+982.09802 1038.9
+982.46838 1316.3
+988.10559 1197.8
+988.38983 1989.0
+989.10791 872.8
+989.40167 870.0
+994.45264 933.8
+998.09698 1846.9
+998.41516 1066.5
+1030.91711 838.3
+1052.46204 1385.0
+1058.81250 719.0
+1067.99097 1262.0
+1068.49170 1416.6
+1070.45752 943.7
+1070.80188 1443.7
+1071.14368 1292.3
+1071.81470 816.9
+1083.51660 827.6
+1085.13757 1128.0
+1086.47131 1607.8
+1090.47827 888.8
+1090.81799 2871.6
+1091.15808 1886.4
+1091.48572 1303.9
+1094.45764 7654.4
+1094.82471 1621.2
+1094.95898 8999.8
+1095.15259 1529.6
+1095.46252 6100.4
+1095.96570 1768.1
+1102.44177 2869.4
+1103.49878 2268.4
+1104.01648 2146.9
+1104.52539 1341.5
+1120.15601 787.8
+1120.50427 860.2
+1127.53284 1981.8
+1155.04700 958.7
+1155.53064 1050.6
+1198.06616 3319.8
+1219.06238 1688.2
+1231.47888 928.9
+1256.56580 2367.8
+1267.59644 957.4
+1316.94067 676.3
+1332.53650 1413.4
+1681.15405 694.4
+1683.35425 806.9
+1777.27246 793.2
+1878.86487 1150.2
+1879.54260 18562.0
+1880.07617 944.3
+1880.25891 1214.0
+1880.95508 865.6
+1882.55652 606.9
+1907.04236 7334.3
+1907.36060 1428.8
+1930.59631 1437.5
+S	1606	1606	562.8190171
+Z	4	2247.24477
+146.92699 778.1
+152.09291 571.3
+157.60716 817.6
+165.77467 719.1
+167.38965 674.1
+188.27827 2197.8
+188.29419 2020.1
+188.30281 1949.7
+188.32930 1048.8
+198.88774 953.3
+199.16483 688.0
+199.17564 1152.4
+199.23773 1380.0
+199.24756 625.8
+199.25845 1054.4
+199.27180 2077.7
+199.28249 1308.0
+199.31947 613.9
+199.35818 774.2
+199.68529 591.9
+206.26164 518.4
+206.31123 490.5
+208.88438 577.5
+221.12808 3389.1
+249.12349 867.3
+249.16016 1151.1
+255.29976 780.0
+269.31085 567.5
+271.71854 872.4
+271.99487 537.3
+272.17163 1299.6
+280.19168 718.4
+299.13467 1433.4
+308.91037 718.2
+341.27838 623.5
+358.01215 594.0
+362.20874 916.9
+384.22409 1214.3
+393.34988 621.9
+398.36612 587.5
+409.35541 521.3
+412.21713 1345.9
+416.19803 610.9
+418.22134 1039.1
+428.28482 2097.3
+446.76428 724.8
+447.22745 779.3
+455.77008 5023.4
+456.27322 1168.0
+474.75916 1663.8
+475.26740 850.6
+477.27081 859.7
+495.41785 593.8
+500.78534 5685.1
+501.28732 1789.1
+505.31534 860.0
+513.07098 646.8
+517.75226 3071.4
+518.25409 1228.3
+525.28528 780.5
+529.62543 1213.7
+532.49786 1762.5
+536.30377 3038.0
+537.81561 695.9
+538.29962 24881.7
+538.63422 11687.5
+538.96838 4042.0
+539.29932 996.6
+540.27844 665.6
+542.87598 621.4
+543.29956 2966.3
+544.30255 884.3
+549.17780 696.0
+582.79089 980.7
+588.52911 675.8
+589.13306 720.5
+591.65051 6059.8
+591.98425 5083.2
+596.99939 566.1
+608.80927 806.9
+613.32898 4981.2
+614.33313 1206.8
+629.34375 9567.4
+629.67822 8825.3
+630.01147 2501.7
+638.83057 1050.6
+639.32892 692.8
+644.35083 1666.3
+645.35999 968.9
+655.91846 619.0
+665.83154 1076.0
+667.03851 29674.9
+667.37299 23502.7
+667.70709 8609.7
+668.03979 2311.2
+668.86993 1133.3
+669.36517 817.5
+676.63574 1020.5
+680.35895 903.1
+683.97528 687.1
+695.37579 1851.8
+696.36682 694.9
+704.84393 1729.5
+707.87415 600.6
+710.35565 11355.9
+711.35950 3753.2
+713.88794 1027.6
+729.35547 4560.2
+729.85815 2536.1
+730.35767 1297.3
+739.36469 5114.5
+739.86786 2456.9
+757.43573 4261.3
+758.43909 1667.6
+761.38843 714.2
+795.55334 874.1
+849.44226 962.9
+852.23810 610.2
+892.43365 981.2
+893.43610 3709.0
+894.43842 1666.7
+910.53699 3618.9
+1057.23096 863.4
+1187.97437 962.7
+1198.11926 3278.5
+1422.18347 865.1
+1525.46985 893.7
+1777.28906 724.5
+1877.97034 911.2
+1878.30103 903.1
+1878.59656 794.8
+1879.07104 1461.0
+1879.51367 20122.7
+1879.94458 1343.7
+1880.47852 713.8
+1907.05798 7621.3
+1930.67700 939.5
+1982.59119 768.1
+S	1607	1607	503.7318246
+Z	2	1005.616
+Z	3	1507.92
+128.27335 483.3
+128.77957 655.9
+146.79410 569.0
+149.55544 600.1
+152.70781 617.9
+158.57104 557.0
+159.14867 535.0
+177.11198 1743.0
+182.78140 530.1
+187.12848 606.2
+188.22385 652.3
+188.26007 1001.6
+188.27275 1200.3
+188.28511 1452.9
+188.29829 1363.9
+188.31316 764.7
+188.33238 628.3
+188.96748 558.7
+194.04166 558.4
+198.88835 697.0
+199.09190 473.6
+199.16623 822.7
+199.19682 631.1
+199.22221 885.3
+199.23207 601.4
+199.24211 1831.7
+199.26472 1803.7
+199.27246 1375.1
+199.28075 1215.5
+199.29616 1204.4
+210.21472 573.1
+217.13348 3348.7
+221.13821 1228.4
+231.80598 763.5
+233.08269 606.0
+241.74164 585.2
+245.12692 1309.9
+246.08058 515.2
+272.33746 628.1
+283.17520 642.2
+288.75522 642.5
+294.18246 962.4
+309.19095 723.7
+327.19931 786.1
+348.67236 4777.2
+348.88376 691.4
+349.17505 904.8
+350.28220 1022.4
+371.22623 979.0
+380.67166 6327.0
+381.17349 1186.6
+388.69189 695.8
+392.16104 670.9
+395.22968 1494.7
+397.19812 12681.3
+397.24002 709.7
+397.69916 4125.3
+415.25217 4366.2
+420.19302 4096.0
+420.69458 1565.6
+429.19727 89021.3
+429.69888 30574.1
+430.19809 5109.4
+434.99097 644.2
+459.27887 4972.4
+461.72668 2174.4
+465.79504 1076.1
+469.72000 687.0
+470.73196 49149.6
+471.23373 16088.1
+471.73376 2512.5
+476.97427 641.9
+482.25928 4032.4
+483.24896 989.4
+483.32736 643.3
+484.72049 4013.7
+485.22263 1543.9
+487.57449 2103.2
+487.90997 2240.4
+488.23477 779.8
+532.48877 2019.0
+565.79303 808.5
+566.03870 2424.4
+570.79102 1126.1
+586.09985 569.8
+591.98468 727.3
+592.31860 1065.9
+609.56885 685.2
+613.30011 8191.7
+614.30450 1697.5
+616.61011 603.5
+630.41833 561.0
+645.33258 1429.3
+645.83966 1042.2
+676.62103 1144.2
+696.33618 8833.4
+697.33978 2300.6
+698.33630 741.3
+710.31268 1208.2
+731.13287 928.4
+760.33478 18245.8
+761.33850 5060.1
+762.34180 873.8
+793.38892 1481.6
+794.39728 1095.3
+795.54510 991.4
+822.33124 1259.7
+840.33710 693.7
+857.38544 5297.7
+858.33679 983.8
+858.39935 1222.7
+876.35706 827.9
+954.72760 715.9
+1014.49506 659.6
+1020.83740 825.2
+1057.20313 696.8
+1187.99622 744.9
+1198.08777 3666.0
+1212.90820 633.0
+1221.89050 654.2
+1229.16553 595.2
+1525.43823 716.8
+1851.46863 658.3
+1868.26123 546.3
+1877.78223 688.3
+1878.86157 1039.0
+1879.14063 1160.5
+1879.48962 20042.0
+1879.86584 1022.1
+1880.12903 1001.2
+1880.34631 614.6
+1881.21252 752.3
+1882.79846 688.4
+1907.05322 7280.4
+1922.05127 669.6
+1930.61377 995.5
+S	1609	1609	580.713241267
+Z	3	1738.864
+Z	2	1159.579
+153.17212 603.4
+165.77667 696.2
+169.49504 651.4
+188.24928 990.1
+188.26443 1608.2
+188.28017 2320.2
+188.28642 2355.5
+188.30644 1717.1
+188.33015 673.4
+188.34633 511.7
+199.19728 825.0
+199.23651 1110.1
+199.25508 2347.9
+199.27057 1615.9
+199.28061 1407.4
+199.31308 771.6
+217.34848 589.0
+252.21967 578.9
+255.30261 686.9
+255.94728 567.9
+257.13950 1023.1
+262.82941 527.0
+269.15869 736.9
+271.83038 808.9
+276.14484 1512.1
+285.13449 5503.3
+286.13742 1410.3
+292.13962 4508.1
+302.12299 1454.1
+307.09131 583.3
+308.91635 813.5
+320.13501 63727.9
+321.06320 651.4
+321.13876 17960.3
+326.35965 594.8
+370.22235 715.2
+380.20786 7026.8
+381.20966 2445.7
+398.21869 1912.7
+409.39706 620.4
+410.23877 717.0
+415.21030 1028.6
+426.21335 989.7
+427.56689 674.3
+438.73007 791.0
+439.20834 125282.2
+440.21133 69312.6
+441.21396 874.5
+449.19189 2352.5
+450.19635 1477.5
+452.22955 1342.7
+462.84589 1149.8
+465.96976 913.2
+466.14261 3886.0
+466.25491 705.7
+466.32581 1854.6
+466.50574 957.4
+466.67661 2572.7
+466.85025 619.2
+467.01392 789.8
+467.03693 1132.9
+467.15616 3270.0
+467.20267 632782.4
+467.26025 1352.9
+467.37790 1043.6
+467.49628 821.4
+467.55902 1333.9
+467.73035 3542.0
+467.90332 771.6
+468.08093 2339.7
+468.13394 519.1
+468.15402 1070.8
+468.20544 245058.1
+468.26859 4463.9
+468.31262 728.0
+468.73529 1338.7
+468.90640 663.4
+469.08597 1012.9
+469.20883 3730.0
+469.27356 1512.9
+470.27213 1765.8
+471.62598 1240.4
+482.68338 776.0
+487.79367 1607.3
+488.29285 1394.1
+505.64276 633.4
+518.28717 749.8
+527.30273 1287.9
+532.54407 1941.6
+534.28333 2071.5
+536.29504 2863.6
+545.30499 5980.9
+545.80743 4422.7
+550.92865 1024.4
+552.29175 199161.7
+552.34802 643.1
+552.97052 836.0
+553.29449 86401.5
+553.34174 894.6
+553.66125 1246.6
+554.29700 1089.3
+554.57507 628.9
+562.27496 3456.7
+563.27960 1188.7
+564.31213 1407.7
+616.85077 588.9
+630.45050 991.5
+657.20111 565.8
+676.62341 1418.8
+689.48035 531.6
+690.70660 645.4
+722.53223 620.2
+795.53864 1257.7
+823.05414 702.4
+940.74304 585.8
+1105.24646 595.2
+1198.21387 3200.8
+1331.40979 662.5
+1525.48242 1067.6
+1862.35437 599.8
+1874.42639 723.7
+1879.49902 20115.9
+1880.50439 960.0
+1880.82007 681.9
+1882.04041 705.3
+1906.58130 979.6
+1907.08130 7015.3
+1907.62012 840.6
+1918.65527 749.9
+1930.68787 781.2
+S	1610	1610	503.7308246
+Z	2	1005.614
+Z	3	1507.917
+126.95281 623.7
+132.91962 722.6
+133.13252 1040.7
+145.73447 601.9
+149.74921 664.2
+161.31995 654.3
+164.75104 565.7
+177.11128 1129.7
+182.77534 769.0
+188.17099 656.3
+188.25441 1637.5
+188.27570 2385.4
+188.29558 1911.6
+188.31064 1762.0
+188.32385 1159.6
+188.33269 924.8
+188.34950 796.9
+188.36320 676.2
+197.23256 613.4
+198.88942 875.0
+199.19360 1047.4
+199.24524 1325.6
+199.25275 1497.6
+199.26540 2870.1
+199.27634 900.2
+199.29184 616.3
+199.36365 926.2
+220.66859 668.4
+233.56474 699.0
+242.49118 668.4
+253.77763 547.8
+255.45212 646.3
+271.99982 685.1
+279.08459 650.4
+308.88779 714.9
+309.32190 553.6
+341.14670 854.5
+350.27072 866.9
+366.12909 1728.8
+367.11151 624.6
+369.14398 2459.0
+371.22650 1626.8
+390.15714 665.2
+397.24231 1122.2
+415.25293 3010.1
+429.19760 2828.4
+429.69925 3785.8
+430.19650 1820.1
+432.91928 652.0
+459.27798 3932.2
+470.73309 1595.1
+471.23358 1095.9
+482.63660 1091.7
+484.16980 2044.8
+494.28012 655.8
+508.47748 647.3
+532.52637 1997.1
+630.38501 1054.5
+676.63800 1391.3
+683.46307 697.7
+710.30853 1987.4
+717.90424 558.9
+761.33923 1161.8
+795.54535 929.7
+1198.17651 3764.0
+1628.88831 644.4
+1763.12695 709.6
+1879.23853 1615.0
+1879.52832 21522.6
+1880.39917 953.3
+1907.00964 7520.7
+1918.67529 723.8
+1930.52405 787.9
+S	1611	1611	581.722991267
+Z	2	1161.598
+Z	3	1741.894
+153.95457 2547.4
+159.47324 2959.1
+159.74249 3233.2
+165.77699 3299.3
+171.41322 3094.0
+171.63828 3466.7
+173.41576 2490.6
+173.70102 2727.6
+188.26100 3313.9
+188.28000 6211.9
+188.29698 6632.2
+188.30966 5138.3
+188.31683 3725.2
+188.32896 2979.3
+198.88751 4009.5
+199.16733 5618.3
+199.21107 2592.7
+199.21922 3258.4
+199.25333 6436.3
+199.26537 12200.4
+199.27695 4606.7
+199.36409 4226.3
+250.06825 2468.1
+257.13806 3313.7
+272.17200 4924.1
+276.14648 3486.2
+281.90668 2590.4
+285.13400 23185.1
+292.13916 7698.8
+302.12463 5672.1
+307.65726 3157.7
+308.87903 2683.4
+320.13480 190601.1
+321.13855 37008.5
+331.17935 2594.8
+350.27719 3029.7
+357.71045 2431.2
+380.20776 26950.3
+381.20914 8035.7
+398.21732 6661.3
+427.50293 2593.3
+427.52032 2936.8
+439.20804 403127.3
+439.24149 3853.0
+440.21127 145234.1
+449.19318 4773.7
+450.19305 5648.0
+452.22858 4124.3
+457.04904 2438.2
+462.83936 4874.8
+466.09973 4189.0
+466.14105 15712.2
+466.21539 4989.6
+466.25073 3893.7
+466.27698 3046.1
+466.32071 5983.9
+466.43726 3683.0
+466.67548 11945.4
+467.01385 3130.0
+467.03830 5585.2
+467.14120 9878.9
+467.15771 10191.9
+467.20236 2809616.3
+467.26083 5985.3
+467.72913 17624.0
+467.97513 3539.3
+468.05713 3416.8
+468.08865 5704.5
+468.20520 725010.3
+468.26578 19982.0
+468.30716 5617.0
+468.44025 4151.2
+468.73315 3430.1
+468.97723 3560.4
+469.20560 3758.6
+471.62860 4019.8
+472.97571 2564.9
+482.62634 4150.8
+484.33685 2850.6
+527.30579 12161.2
+532.52856 10080.5
+534.27844 7232.9
+536.29584 12786.9
+537.30774 3527.6
+545.30188 7413.4
+545.80878 3420.5
+550.92773 5919.7
+551.61298 5524.4
+552.13733 3241.4
+552.29144 1111673.8
+552.35028 4615.9
+552.97070 5049.1
+553.29419 299706.0
+553.65955 6060.9
+562.27643 21314.8
+582.83319 3379.3
+661.38434 2651.9
+676.64703 4206.0
+696.44458 4278.7
+795.54364 4796.7
+807.91730 3320.5
+841.07227 2964.5
+857.75623 2675.3
+1022.77240 2626.4
+1170.99817 2876.4
+1184.57312 2975.2
+1198.17969 14745.8
+1260.75708 3116.1
+1283.68506 2723.9
+1286.63879 3038.3
+1309.99121 2849.9
+1485.35278 3324.3
+1514.34741 3150.2
+1517.61121 2662.6
+1538.86023 2487.7
+1786.04016 2956.4
+1877.96912 3426.3
+1879.23474 5951.3
+1879.56628 92577.0
+1879.88574 4714.0
+1880.05933 5014.2
+1880.70496 3413.1
+1880.91577 3039.6
+1883.20715 3680.5
+1907.05994 32458.1
+1907.60608 3088.2
+1920.80054 3475.1
+1930.50659 3854.4
+S	1613	1613	1879.89999127
+Z	2	3757.952
+Z	3	5636.425
+532.53223 1939.9
+539.69720 648.3
+569.78979 642.5
+676.63965 883.8
+698.03674 619.9
+715.56464 707.2
+777.17731 772.5
+795.54626 851.5
+814.93628 566.6
+915.17151 696.5
+1198.18237 3462.3
+1455.54492 616.5
+1479.87524 711.6
+1544.84497 591.5
+1621.40710 698.6
+1877.23022 675.7
+1879.08838 2189.5
+1879.52588 19800.9
+1879.93823 1904.0
+1906.99670 7172.3
+1918.60986 723.9
+S	1614	1614	1907.41499127
+Z	2	3812.982
+Z	3	5718.97
+532.46466 1477.9
+549.12463 921.1
+565.87201 693.7
+622.57086 681.1
+664.26990 642.0
+676.62396 734.7
+795.53247 1282.1
+857.69946 656.2
+1020.83453 660.7
+1033.99194 799.6
+1057.22375 828.5
+1079.27380 846.3
+1155.79456 668.7
+1198.03699 3175.2
+1198.18250 777.9
+1593.48401 646.6
+1859.77161 709.0
+1878.85291 1259.6
+1879.23108 2083.7
+1879.50171 19468.7
+1880.12537 929.6
+1906.99744 7159.4
+1907.30945 668.4
+1907.50684 747.2
+S	1615	1615	757.5434346
+Z	5	3782.67805
+198.88376 1182.7
+199.24969 830.0
+199.26167 1294.8
+199.27209 1948.5
+199.29222 703.5
+199.29987 703.4
+199.37073 775.1
+215.35733 583.3
+218.64275 544.4
+224.10069 553.5
+233.57210 838.6
+243.97629 553.9
+246.15588 3971.5
+270.59460 641.8
+272.15479 675.4
+279.16916 602.9
+304.46902 633.8
+311.13437 1224.2
+314.80096 564.7
+317.52872 563.2
+358.35645 609.6
+386.97336 640.1
+401.72629 611.4
+416.96481 673.2
+421.70871 1818.4
+427.53882 953.5
+458.84558 632.2
+459.94153 635.7
+479.21753 1029.1
+479.72272 674.0
+482.65793 616.2
+484.39072 650.3
+498.19382 754.0
+505.80014 705.6
+532.53302 1102.0
+534.73804 1083.9
+540.20068 2139.8
+543.74200 4037.5
+544.24628 2453.9
+546.72003 599.3
+547.73425 645.4
+549.26025 1071.6
+611.24188 1675.4
+615.74750 618.4
+617.27771 2782.2
+617.78040 1755.8
+638.87042 706.7
+664.41028 821.1
+665.77942 1207.7
+674.29840 6798.9
+674.79828 5855.0
+675.30139 1325.3
+676.25586 850.0
+676.66077 1450.1
+694.27509 1135.8
+706.12183 1832.4
+706.32184 1066.8
+712.28473 1083.2
+724.59906 619.0
+731.14075 691.5
+739.73114 939.5
+741.34521 781.0
+743.34045 1239.3
+744.34821 1495.4
+756.60303 683.6
+789.36768 2712.5
+789.61578 2451.3
+789.86664 2324.1
+790.11517 1911.9
+792.43219 667.2
+794.69611 838.2
+799.34955 667.8
+801.36890 918.4
+803.36713 1203.7
+807.12933 1472.8
+807.37488 3764.6
+807.62476 2599.0
+807.87292 1560.9
+810.12714 1862.9
+810.38275 1608.0
+814.63116 652.6
+831.39978 1721.0
+831.89709 1012.2
+832.40790 869.7
+836.38580 1815.9
+839.37085 753.2
+841.33020 1322.9
+845.05292 707.0
+846.13214 716.2
+846.38879 781.1
+850.64087 4291.7
+850.89331 4623.8
+851.14447 3167.4
+851.39136 1656.9
+853.91125 1136.7
+854.41211 1289.3
+854.91455 1219.9
+864.38403 1804.0
+864.64270 3604.1
+864.89508 6333.7
+865.14624 3775.2
+865.39575 2294.2
+871.13562 1156.2
+872.38910 945.2
+874.90051 1655.4
+875.14899 2986.2
+875.39441 3360.7
+875.64758 2349.3
+875.90167 1150.0
+876.13708 1347.7
+876.38544 1538.8
+876.63226 2762.4
+876.88971 1362.0
+877.13000 895.1
+878.39398 1265.8
+879.39917 8439.5
+879.65167 13773.3
+879.90295 13689.1
+880.15179 10961.4
+880.40344 5978.6
+880.65424 1261.8
+880.90686 1179.6
+881.99377 1118.7
+882.15186 3774.1
+882.40027 6583.0
+882.65338 9692.0
+882.90240 5156.4
+883.15320 3795.0
+883.40582 1103.8
+883.90240 803.7
+884.15808 1131.7
+884.40533 1577.6
+884.65955 892.8
+885.13910 1771.8
+885.39453 1491.8
+885.63989 1678.4
+885.89227 2195.8
+886.14618 1127.2
+886.91144 1320.0
+888.39954 861.2
+893.74115 2078.0
+894.06848 2794.0
+894.40765 1880.2
+894.74023 1291.6
+895.43658 849.6
+896.90198 982.4
+897.41669 1098.7
+897.65582 1291.7
+900.10742 647.1
+901.16199 2571.1
+901.40729 4628.8
+901.65979 6410.3
+901.90686 2997.5
+902.15979 2216.5
+902.41449 693.5
+904.44019 891.4
+904.92828 742.6
+906.73975 955.6
+949.77759 593.4
+959.48969 601.1
+970.43677 903.6
+970.76611 1116.9
+976.09424 816.2
+987.77057 738.3
+988.11829 1949.7
+988.45282 2216.9
+988.78351 1325.2
+994.11060 1128.1
+994.44458 961.8
+994.77960 1056.4
+1051.80200 938.8
+1052.47058 885.0
+1053.49121 882.3
+1067.98730 615.1
+1070.45532 724.1
+1070.80334 2150.3
+1071.13647 1838.8
+1071.45764 857.9
+1090.47253 1107.5
+1090.81396 1923.3
+1091.15442 2193.9
+1091.48560 1307.6
+1094.49182 1991.9
+1094.81726 2412.4
+1095.15332 1810.0
+1095.43909 733.4
+1119.82312 1664.6
+1120.16089 1382.5
+1148.46460 613.8
+1198.18042 2954.2
+1210.04443 1125.1
+1492.19580 787.3
+1525.43140 852.9
+1544.16235 676.4
+1777.52979 695.4
+1873.52173 685.9
+1877.59570 645.0
+1878.72803 959.0
+1879.27966 3867.9
+1879.57813 19448.1
+1880.12500 710.3
+1880.41199 1102.8
+1883.01746 893.6
+1907.02869 7000.4
+1914.90295 712.3
+1918.63660 800.1
+1930.54602 825.2
+S	1617	1617	1907.46399127
+Z	2	3813.08
+Z	3	5719.117
+532.51715 2506.0
+538.78833 554.1
+549.15472 819.8
+592.35449 580.4
+618.93152 699.8
+630.41339 767.2
+638.54089 566.5
+640.45795 758.6
+643.50885 607.0
+653.82660 595.5
+656.35010 594.8
+676.64117 963.6
+747.26776 568.2
+795.55493 772.0
+854.52820 756.8
+910.72052 719.6
+925.32648 608.3
+932.83978 557.2
+1198.15503 3120.4
+1198.93567 633.8
+1570.43726 638.4
+1758.43445 590.6
+1766.53223 648.3
+1878.53308 769.5
+1879.19788 1637.4
+1879.53845 19662.7
+1879.85425 1788.3
+1880.57654 827.9
+1907.04858 7454.1
+1930.61108 1259.5
+1987.98584 595.8
+S	1618	1618	1198.54724127
+Z	3	3592.366
+Z	2	2395.247
+433.06921 645.4
+482.65799 670.8
+505.08667 744.5
+511.30719 604.7
+513.63672 584.7
+532.52917 1429.2
+549.15845 768.5
+565.28052 590.8
+569.66620 636.5
+599.96515 640.8
+627.85687 608.5
+670.10101 722.6
+676.64709 1239.5
+795.53424 891.2
+819.85358 633.2
+841.33514 572.0
+1057.24316 909.8
+1076.35156 694.0
+1162.89294 647.3
+1198.18494 3023.3
+1250.77429 686.2
+1367.66174 585.7
+1370.35632 750.2
+1609.72302 589.2
+1671.26929 692.7
+1817.64417 738.2
+1879.10974 2761.8
+1879.54175 19357.6
+1879.97034 2098.1
+1880.47107 736.5
+1880.82117 819.1
+1907.04846 7738.5
+1918.64697 852.4
+1930.57080 1095.3
+1988.57544 674.9
+S	1619	1619	532.925241267
+Z	2	1064.003
+Z	3	1595.5
+135.05943 550.5
+157.60089 610.0
+164.26291 654.8
+169.49304 727.2
+171.63853 754.4
+175.11893 580.0
+183.97227 588.7
+188.22978 600.3
+188.25075 704.8
+188.26056 630.7
+188.27423 909.2
+188.28677 1065.1
+188.30591 1265.3
+188.32262 713.4
+198.88890 877.3
+199.15012 772.1
+199.15709 721.8
+199.18022 4968.9
+199.22847 845.0
+199.24553 1989.1
+199.25815 1209.9
+199.26884 1456.8
+199.27762 1341.4
+199.28790 1029.1
+199.34465 559.1
+199.37660 807.6
+227.17461 1705.7
+230.25368 574.8
+238.72285 699.4
+250.89146 622.9
+266.67212 740.4
+280.44125 670.4
+281.21988 833.0
+286.55063 573.7
+306.15872 2099.2
+326.24457 906.9
+350.28229 775.4
+381.35968 757.0
+396.81570 679.8
+409.19611 1017.4
+435.19998 2176.8
+441.27026 1381.6
+470.33817 701.7
+477.42029 605.7
+494.32922 591.7
+502.19946 3322.0
+503.20340 656.3
+510.29047 757.1
+512.18268 1582.2
+515.29547 1469.4
+532.51807 1993.3
+582.17249 561.0
+595.96198 537.9
+606.52142 590.6
+621.29871 3456.5
+626.66321 730.5
+629.79718 655.3
+634.90143 580.7
+636.33307 1539.2
+636.99475 1322.3
+637.33936 660.2
+647.10126 602.1
+676.66119 1279.5
+689.92419 703.3
+712.85229 599.3
+731.13184 697.3
+736.32800 10607.3
+737.33038 3222.2
+738.33105 1048.5
+795.54602 1065.3
+817.37982 1494.0
+835.39520 26657.9
+836.39844 10070.9
+837.40088 2275.3
+948.48315 1047.8
+1057.25879 697.4
+1115.86414 679.4
+1140.36267 776.0
+1198.15100 3521.2
+1380.52234 684.0
+1421.75537 959.3
+1658.62976 539.9
+1845.05249 613.4
+1873.58057 705.3
+1878.30334 810.8
+1878.71509 1778.7
+1878.99304 1668.2
+1879.58105 19927.3
+1880.21179 2439.4
+1880.56531 1199.5
+1907.05603 7843.9
+1930.59583 818.8
+S	1621	1621	1879.93940793
+Z	3	5636.543
+Z	2	3758.031
+514.67657 668.4
+532.53680 1413.2
+549.11951 690.8
+578.22955 652.0
+592.36475 655.0
+623.15271 661.3
+686.54370 529.1
+711.20355 631.5
+795.52399 677.5
+803.09131 777.0
+827.79755 692.9
+852.43353 701.4
+1111.17126 649.6
+1198.20862 3221.2
+1502.27808 914.8
+1525.34900 914.0
+1604.20618 642.5
+1777.55066 979.5
+1879.27844 7084.7
+1879.54773 17512.1
+1881.27466 795.1
+1881.70068 786.6
+1907.05042 7362.5
+1918.73279 716.3
+1933.86072 607.3
+S	1622	1622	1907.4718246
+Z	2	3813.096
+Z	3	5719.14
+532.47791 627.9
+532.52502 1738.4
+533.51227 606.2
+604.65137 647.2
+676.61963 1082.9
+707.92462 707.3
+795.55591 829.5
+888.35510 682.2
+959.80048 608.9
+1034.92090 660.1
+1057.20715 714.3
+1170.05029 618.8
+1198.17310 3150.5
+1239.02222 725.1
+1525.40674 894.4
+1814.85046 691.9
+1836.47949 705.7
+1877.66602 591.6
+1878.82556 1293.8
+1879.49048 19821.9
+1879.76318 774.4
+1880.18726 1077.3
+1881.30493 1002.7
+1884.29529 630.1
+1907.03467 7052.0
+1907.30542 1718.7
+1930.60803 741.2
+S	1623	1623	1198.62899127
+Z	2	2395.41
+Z	3	3592.612
+315.89972 649.1
+350.28394 717.8
+356.70526 726.2
+446.50269 694.0
+496.67081 607.0
+532.47644 2011.1
+622.87225 605.9
+630.39703 816.8
+671.19080 646.1
+676.64258 1335.3
+783.78021 613.3
+784.09589 653.7
+795.55499 945.8
+858.03955 851.5
+963.37714 614.2
+1198.07007 3227.8
+1369.21240 574.7
+1540.15039 598.3
+1819.87024 558.0
+1872.14856 882.4
+1876.77515 691.9
+1878.72778 949.7
+1879.54175 19832.4
+1880.12671 1112.6
+1881.09497 865.2
+1883.48706 705.8
+1907.05896 7532.0
+S	1625	1625	721.3818246
+Z	2	1440.916
+Z	3	2160.87
+188.24672 820.5
+188.26331 1192.1
+188.28528 1813.8
+188.29794 1427.6
+188.30409 1491.1
+188.31477 1334.0
+188.32639 903.7
+188.76733 629.7
+198.88721 557.8
+199.16447 1066.2
+199.17038 1075.2
+199.18651 681.7
+199.24396 1175.2
+199.26155 1812.6
+199.28117 1018.2
+199.36012 986.2
+199.37772 690.2
+202.71669 564.1
+216.06609 1309.4
+217.13397 1262.5
+223.10805 3141.8
+231.14807 780.9
+233.09229 2160.0
+233.57655 614.8
+235.45110 638.8
+245.12900 953.3
+251.00826 586.2
+251.10275 10172.7
+251.99495 588.0
+252.10579 1098.2
+255.30063 653.9
+276.17053 2822.6
+283.14420 8587.3
+287.17117 1088.3
+299.13931 935.6
+303.09814 1151.3
+305.18216 7389.3
+311.13940 3110.2
+320.12375 1348.3
+321.10779 1436.7
+321.15497 1979.8
+325.15305 683.2
+330.10974 1573.9
+331.09241 1151.2
+332.16074 2364.5
+338.13892 630.9
+338.18503 1248.3
+339.16663 8535.8
+340.16986 1224.2
+341.14966 1757.3
+348.11935 25230.4
+349.12296 5926.3
+353.14975 2844.1
+355.21326 1746.5
+356.19260 1114.4
+357.17871 1823.3
+366.12994 32837.2
+367.13327 6583.6
+368.13531 1307.1
+369.14526 1920.3
+374.20419 3589.8
+381.14478 1221.6
+381.37311 782.3
+382.33380 598.7
+382.71964 1331.3
+390.42896 742.6
+392.21399 16029.2
+393.21851 2706.6
+397.18884 1846.0
+398.17322 1149.8
+401.18478 2635.5
+408.15662 995.6
+415.19846 3062.6
+416.20197 1042.4
+426.16565 3842.9
+427.16681 883.3
+427.19839 827.9
+429.18155 4002.5
+430.18472 1442.8
+433.20908 2079.9
+439.23618 673.7
+442.24451 1375.1
+449.18198 1487.2
+450.16736 1900.6
+454.20877 1967.7
+456.25168 2676.6
+456.75604 2062.4
+457.25638 935.8
+460.25583 2288.1
+466.16296 1278.9
+467.19293 6319.5
+468.17700 10289.7
+469.18155 2905.3
+472.22119 2698.7
+473.22406 1002.1
+474.20200 4121.9
+474.53110 698.8
+475.20313 1066.2
+477.17728 1720.9
+482.66684 825.3
+483.18619 3032.8
+484.17163 7955.3
+485.20087 4578.4
+486.20694 2134.4
+490.23068 3307.9
+491.23105 1554.1
+492.78595 622.6
+493.26309 578.6
+495.18719 9274.3
+496.19028 2538.7
+501.19800 29827.5
+502.20154 7849.2
+503.20325 1130.2
+508.23981 9138.4
+509.24292 3046.4
+511.18262 4189.3
+512.18158 1005.6
+513.19824 15232.2
+514.19989 4427.6
+516.21289 1676.0
+519.77289 867.9
+520.77356 621.0
+521.27460 1390.1
+523.18317 890.5
+525.27936 852.2
+528.78113 2686.4
+529.19244 10760.5
+529.28485 1016.6
+530.19489 2868.8
+532.53607 1527.0
+536.24841 801.2
+537.78436 49936.1
+538.28613 31469.4
+538.78754 10867.7
+539.28320 10360.2
+540.28326 3687.9
+543.29010 1291.6
+549.16772 726.5
+549.26685 1641.8
+555.32538 668.7
+561.23285 1269.7
+561.30322 5986.1
+562.30322 2044.1
+573.28833 714.8
+574.29443 887.6
+577.28815 1591.5
+577.78870 1241.1
+578.30481 736.5
+582.30426 2870.4
+585.23792 1173.5
+586.29315 4307.6
+586.78986 5651.0
+587.28613 2633.7
+587.78687 823.9
+588.31189 1516.1
+589.23193 2132.9
+590.29370 1358.1
+590.80017 642.7
+592.30676 2378.3
+595.29779 74085.1
+595.79944 47600.5
+596.30035 16335.7
+596.80200 4886.8
+597.30060 777.4
+600.31482 8267.9
+601.32239 2456.7
+603.24530 11083.4
+604.24872 4053.4
+605.24310 972.5
+607.32434 1804.4
+612.24957 1588.8
+613.22528 1563.6
+615.75171 683.6
+617.22333 638.0
+618.32452 45488.0
+619.32794 16511.2
+620.33154 4073.2
+620.80609 1757.3
+621.30426 1674.6
+623.28064 709.3
+629.80914 9867.0
+630.25610 10182.7
+630.31104 8475.1
+630.80920 2560.4
+631.23602 13264.5
+631.31476 1155.9
+632.24084 5402.5
+633.24579 869.5
+634.64569 1671.5
+634.80042 2291.9
+635.30328 1389.8
+635.49652 1140.9
+635.64923 781.4
+635.78790 826.3
+636.33478 349928.5
+636.47894 736.7
+636.51801 814.3
+637.01086 640.6
+637.17633 1354.2
+637.33752 130874.0
+637.72644 721.7
+638.02893 2542.3
+638.17535 831.1
+638.27985 658.0
+638.34003 29701.2
+638.81335 67492.2
+639.03009 627.7
+639.04852 586.5
+639.31415 49066.5
+639.59515 665.8
+639.81610 20676.0
+640.24072 2059.7
+640.31561 5285.3
+643.80573 7426.7
+644.30768 5116.4
+644.80945 1990.9
+648.26611 23779.1
+649.26910 9481.8
+650.27301 1594.9
+651.29803 749.7
+658.25037 25904.3
+659.25366 8402.2
+660.25677 1673.8
+676.26111 44166.6
+676.60944 1004.7
+677.26428 16390.1
+678.26868 3128.5
+679.27777 696.6
+680.32336 1205.1
+683.35626 2200.1
+687.33319 1186.9
+687.62280 628.2
+687.82324 4243.5
+688.32385 3281.4
+688.82629 1638.3
+690.67609 657.7
+693.32990 4819.1
+693.82324 8421.0
+694.32458 7276.8
+694.82428 3379.3
+695.32581 1039.3
+696.33405 2111.7
+696.83649 1809.9
+697.34033 1173.1
+698.83264 1424.6
+720.34509 5257.2
+720.84454 2987.4
+721.35010 1412.3
+721.85120 635.5
+722.34747 994.6
+728.41058 3171.8
+729.41388 1639.4
+746.41931 36397.5
+747.42432 14994.5
+748.42548 3102.0
+762.22076 727.7
+763.31757 692.9
+764.43030 163675.9
+765.43280 67250.5
+766.43536 17486.2
+766.54211 866.2
+766.66254 962.3
+766.73602 664.4
+767.43530 3059.1
+770.38428 1558.5
+771.38641 1212.8
+783.40338 6490.6
+784.40540 2676.6
+786.34460 4234.4
+787.34412 1910.5
+795.55133 789.5
+798.38275 2213.7
+799.38312 1099.4
+804.35614 18523.1
+805.36047 7179.2
+806.35760 1865.0
+813.16687 793.2
+815.42297 802.6
+836.45276 773.7
+846.42230 767.8
+857.46478 1018.4
+858.47333 977.3
+861.38385 974.0
+867.45465 1507.7
+871.43298 2729.3
+872.44434 1005.3
+875.47858 2486.6
+876.48242 1950.1
+883.39771 1006.5
+885.41217 3812.7
+886.41858 1961.9
+893.48853 21271.6
+894.49005 10833.2
+895.49219 3314.3
+901.40955 4227.4
+902.41559 1545.7
+908.60358 1255.9
+910.05060 960.9
+911.38837 707.7
+911.49799 206051.2
+912.50085 111332.5
+912.94366 1436.1
+913.50421 32810.9
+914.38672 986.8
+914.50769 7089.7
+915.39740 951.0
+915.51727 811.7
+921.47760 1022.2
+928.45239 1686.4
+939.39014 739.0
+946.46649 3563.2
+947.47168 2365.6
+962.42889 738.3
+972.44135 956.7
+986.45782 2323.4
+987.47662 1363.0
+992.43634 853.3
+993.44440 1296.2
+995.62878 883.6
+1015.48370 624.5
+1020.97107 685.4
+1030.46887 2826.6
+1031.46497 1760.8
+1032.48596 796.0
+1038.54236 1816.2
+1039.53271 1007.3
+1043.48767 1836.5
+1044.48547 915.8
+1048.47717 23778.0
+1049.47998 15390.0
+1050.48108 4146.2
+1056.55127 6863.2
+1057.30176 746.7
+1057.55286 4934.7
+1058.55969 1643.0
+1061.49475 3368.2
+1062.49243 1062.7
+1065.50464 7471.2
+1066.50647 5067.5
+1067.51196 1499.0
+1073.49512 1524.7
+1074.56116 86452.9
+1075.56470 52406.9
+1076.56775 16369.4
+1077.56848 4514.9
+1080.30151 714.8
+1094.48608 753.5
+1099.48450 757.8
+1117.49878 4204.1
+1118.49695 2166.9
+1119.51416 1473.9
+1130.51221 1262.9
+1131.48657 668.9
+1135.50793 18413.3
+1136.50964 9850.5
+1137.51392 3490.3
+1138.53027 941.8
+1140.18652 648.8
+1142.52039 1377.4
+1143.50574 1177.4
+1148.52454 1215.1
+1149.50195 1098.2
+1153.57666 1515.8
+1171.57849 10134.0
+1172.57642 7793.2
+1173.57507 2745.2
+1174.57764 941.3
+1184.51355 784.2
+1189.58813 65835.1
+1190.59167 45165.5
+1191.59460 16046.8
+1192.60059 4143.4
+1198.19653 3105.2
+1200.52429 2571.3
+1201.53296 2650.3
+1202.52332 1194.1
+1218.54858 6702.8
+1219.55139 5459.0
+1220.55017 1591.8
+1236.55627 27710.7
+1237.56067 17036.0
+1238.56287 6510.4
+1239.56702 1676.9
+1241.58643 2558.5
+1242.58752 1777.5
+1257.56079 1723.5
+1258.62317 3122.0
+1259.61865 1955.3
+1260.61145 1270.9
+1268.58191 860.3
+1275.56909 4615.7
+1276.62866 15306.0
+1277.62878 12007.2
+1278.63110 5448.8
+1279.63879 1351.1
+1286.62341 1271.4
+1287.59583 1261.8
+1292.58508 698.0
+1293.57776 21264.9
+1294.58228 13841.6
+1295.58191 5870.4
+1296.58521 1746.5
+1311.58826 27435.7
+1312.59204 17099.9
+1313.59631 7243.3
+1314.60107 1852.2
+1323.09717 681.7
+1501.10522 695.6
+1786.90039 697.6
+1863.27124 705.4
+1876.85059 878.4
+1878.29395 711.0
+1879.04321 941.7
+1879.36121 6194.1
+1879.59998 17621.6
+1880.08130 2067.5
+1881.08008 720.7
+1881.72559 909.1
+1882.21338 1095.4
+1907.04260 7262.0
+1907.33911 648.6
+1907.48926 610.5
+1958.31787 622.3
+S	1626	1626	721.883241267
+Z	2	1441.919
+Z	3	2162.374
+187.38612 609.2
+188.20763 534.0
+188.27318 2056.2
+188.29047 2435.4
+188.30927 1444.9
+188.32742 851.9
+188.73172 502.6
+188.73508 473.1
+192.41629 550.4
+198.88651 736.5
+199.13371 794.5
+199.23360 915.7
+199.24316 709.0
+199.25113 672.9
+199.26909 1505.1
+199.27904 1047.3
+199.28929 1047.1
+199.36743 897.6
+208.86630 521.5
+213.38203 614.4
+214.51450 774.3
+215.72896 768.7
+216.06572 1715.5
+217.13377 1551.7
+223.10771 3700.1
+224.11125 902.2
+231.14964 1758.8
+232.14854 597.7
+233.09236 1528.1
+235.48318 594.0
+237.38409 559.7
+238.12260 1135.7
+245.12805 1477.1
+246.87878 593.9
+251.10277 11590.6
+252.10632 1563.0
+252.14050 555.7
+261.14581 607.4
+262.15530 1311.5
+276.17093 3340.9
+283.14413 9978.1
+284.14734 3170.4
+286.60095 567.8
+287.17010 816.5
+299.13934 1842.8
+301.91397 631.0
+302.11337 948.0
+303.09781 1150.9
+305.18216 10704.8
+306.18671 1012.0
+311.13889 3980.3
+312.14578 886.8
+314.14893 1017.8
+320.12454 1744.7
+321.10815 2456.1
+321.15610 1064.0
+325.15506 881.7
+327.13242 657.6
+330.10818 2384.1
+331.09326 1721.2
+332.16022 1511.2
+338.13464 1009.7
+338.18353 1087.4
+339.16605 9256.4
+340.17078 1829.0
+341.15091 2426.7
+342.27136 803.6
+344.19168 747.0
+348.11914 32170.0
+349.12268 6647.9
+353.14859 2573.6
+354.15494 726.0
+355.21271 1657.9
+356.19284 1172.6
+357.17767 2058.3
+359.35046 583.2
+366.12967 38932.6
+367.13306 8202.8
+368.13388 1070.2
+369.14487 3344.6
+370.14972 940.5
+374.20367 3672.1
+381.14612 1307.3
+382.71863 2422.6
+383.22046 1073.4
+390.24881 902.9
+392.21387 21491.5
+393.21735 3674.9
+397.18808 1825.6
+398.17410 1770.4
+401.18668 2914.1
+402.19022 978.0
+408.15533 1064.0
+414.61798 587.9
+415.19760 4318.8
+416.12888 654.6
+416.20126 1511.1
+426.16620 3759.8
+427.17230 1216.9
+429.18088 4929.2
+430.18420 1035.7
+433.20724 2737.4
+434.21118 680.3
+438.55478 623.0
+439.23248 1277.4
+442.24350 1469.4
+449.18054 1603.9
+450.16565 2603.7
+451.16830 906.6
+454.20883 2573.0
+455.20715 1153.3
+456.25235 3119.0
+456.75491 2043.2
+460.25455 2146.3
+467.19232 7118.7
+468.17618 13391.5
+469.17981 4610.8
+470.18875 1140.6
+472.21948 2618.6
+473.22226 782.6
+474.20361 4764.4
+477.17603 1607.1
+482.86584 654.3
+483.18619 3157.5
+484.17068 8791.0
+485.20053 6247.2
+486.20804 1602.4
+490.22845 3493.8
+491.23306 1099.7
+495.18747 11168.2
+496.19086 2685.2
+501.19754 31847.7
+502.20099 9609.9
+503.07446 612.9
+503.20425 1285.3
+503.26324 871.8
+508.23914 8534.7
+509.24200 2716.0
+510.24472 836.0
+511.18243 4234.8
+513.19751 18105.3
+514.20117 4757.2
+515.20679 995.8
+516.21399 1446.1
+517.21747 646.7
+521.26978 1838.3
+523.18201 2012.0
+525.27802 1099.5
+528.78058 2928.0
+529.19238 12523.5
+529.28217 982.9
+530.19464 3755.2
+532.56561 1915.2
+537.78387 55271.0
+538.28564 32446.5
+538.78650 13022.3
+539.28223 13538.5
+540.28473 3792.6
+541.28949 831.0
+543.22058 902.9
+543.29688 1442.7
+544.29437 876.9
+549.26660 1985.7
+561.23279 1463.4
+561.30292 6189.9
+562.23596 809.2
+562.30341 1834.5
+577.28784 1746.9
+577.78876 1663.1
+578.29193 936.4
+582.30206 2000.6
+583.31146 918.7
+585.23743 1549.1
+586.29224 3350.4
+586.78729 6231.9
+587.28650 2660.3
+587.78595 1251.7
+589.22998 1927.9
+592.30896 1510.4
+595.29724 75878.0
+595.79895 49950.7
+596.30005 15354.5
+596.80334 5335.1
+600.31409 9039.2
+601.31818 2517.1
+603.24420 11695.4
+604.24738 4216.8
+605.24414 991.0
+606.25195 726.0
+607.32410 2039.9
+608.31958 1155.6
+612.24396 1442.4
+613.22815 1956.3
+618.32428 44429.7
+619.32764 16735.8
+620.32983 3740.9
+620.80316 1928.7
+621.30573 1498.7
+625.79205 923.5
+629.80865 10024.8
+630.25500 8291.5
+630.30963 6947.3
+630.80988 2553.0
+631.23651 14805.6
+631.31940 1240.3
+632.24042 5633.6
+634.64178 1260.4
+634.79724 1787.4
+634.93829 761.1
+635.30127 1379.1
+635.50012 1461.2
+636.33423 332902.3
+637.17151 2183.8
+637.33710 126430.1
+637.72583 1165.7
+637.84784 951.6
+638.03107 1523.0
+638.33954 26843.0
+638.41992 733.3
+638.44763 777.5
+638.81287 68824.4
+639.31372 41187.8
+639.81573 18270.1
+640.24164 2352.9
+640.31622 5003.6
+640.81592 1395.8
+643.80469 7202.5
+644.30566 5569.1
+644.80847 2540.6
+645.31049 709.2
+648.26538 24538.4
+649.26801 8461.3
+650.26831 1903.8
+658.24957 23591.1
+659.25244 9313.5
+660.25641 1534.0
+667.32648 1107.7
+676.26074 39061.8
+676.60760 1195.8
+677.26331 14844.4
+678.26349 2753.9
+679.28125 637.0
+680.31818 824.4
+680.82996 1196.8
+683.35455 1584.3
+683.46844 692.4
+684.81854 1103.7
+687.32947 1046.9
+687.82166 5762.7
+688.32361 4429.7
+688.82520 2281.9
+689.32367 1482.4
+689.82843 868.1
+693.32745 6372.5
+693.82159 12467.3
+694.32422 9934.4
+694.82788 2949.0
+695.32532 1763.6
+696.33459 2294.5
+696.83490 2824.9
+697.33331 1107.9
+697.83612 871.3
+698.33142 2062.9
+698.83295 2001.4
+720.34430 6753.2
+720.84698 5260.2
+721.34857 1719.2
+728.40912 3663.5
+729.41522 1467.3
+730.39795 840.3
+746.41895 34199.4
+747.42377 12179.7
+748.43011 2205.0
+749.42584 759.4
+763.32513 992.6
+764.42963 148750.2
+765.43207 61544.3
+765.54083 885.7
+766.43494 16975.1
+767.43634 3426.1
+768.33948 716.6
+770.38531 1719.6
+771.38507 982.6
+783.40375 5205.4
+784.19141 604.8
+784.40582 2487.6
+785.41290 1094.5
+786.34558 3428.8
+787.34875 1164.8
+795.54742 1036.5
+798.38037 2201.5
+799.39014 875.5
+804.35596 12812.0
+805.35883 5787.7
+806.36621 1277.3
+829.67639 692.4
+853.41705 794.2
+857.45917 840.2
+858.38776 618.4
+858.47223 875.9
+861.39246 789.7
+863.45953 680.0
+867.42108 1343.2
+871.43420 2329.2
+872.43427 1447.4
+873.40326 662.1
+875.47894 3008.5
+876.48474 1164.4
+883.40167 894.8
+885.41321 3073.4
+886.41187 1274.4
+893.48773 18985.0
+894.49042 10209.9
+895.49115 3456.5
+901.41089 3802.3
+902.40747 1612.1
+904.40338 679.6
+911.49738 183145.5
+912.50000 98821.2
+912.93591 1486.1
+913.50391 29172.7
+913.91113 929.5
+914.50690 6178.5
+915.39032 647.6
+915.51343 959.6
+928.45154 2123.6
+929.45129 1154.5
+939.37531 648.2
+946.46851 2928.6
+947.46375 1502.3
+986.46307 1810.3
+987.44867 959.1
+995.62976 816.8
+1025.45972 882.2
+1026.49487 781.0
+1030.47009 2375.5
+1031.46716 1515.6
+1038.53442 1282.8
+1039.53564 1071.5
+1041.73779 718.0
+1043.48315 1252.2
+1044.51099 890.2
+1048.47742 20135.7
+1049.48022 10587.1
+1050.48157 4019.4
+1051.48755 1349.8
+1056.55005 6516.6
+1057.55591 4349.0
+1058.54602 921.5
+1061.49280 2039.6
+1062.49329 1256.0
+1065.50305 7969.4
+1066.50586 4224.4
+1067.49609 1134.9
+1073.49207 1693.6
+1074.56042 74788.5
+1075.56409 46524.6
+1076.56689 15419.2
+1077.56567 4294.7
+1089.51868 785.7
+1105.48413 748.9
+1106.48792 806.4
+1117.49805 3393.8
+1118.49829 2512.2
+1119.50159 625.9
+1130.52563 902.0
+1131.52368 803.4
+1135.50659 14437.9
+1136.51038 7810.6
+1137.51245 3153.5
+1142.51331 1119.4
+1143.52771 1052.9
+1148.51843 1319.8
+1154.57727 1285.2
+1158.49976 824.7
+1171.57776 9569.1
+1172.57544 6740.2
+1173.58398 1997.1
+1174.58801 831.2
+1182.94543 608.6
+1188.01599 928.4
+1189.58691 56475.8
+1190.59119 35880.3
+1191.59448 14238.7
+1192.59583 2942.6
+1198.26270 2929.7
+1200.53491 2257.6
+1201.53284 1943.4
+1202.52319 824.8
+1218.54785 5670.2
+1219.54663 4333.4
+1220.55103 2254.1
+1236.55518 20537.5
+1237.55908 13708.3
+1238.56128 4559.0
+1239.56177 1629.1
+1241.58923 2628.9
+1242.58801 2062.0
+1257.56421 1763.4
+1258.62646 2893.6
+1259.62439 1991.8
+1260.62183 770.5
+1275.56274 3894.9
+1276.49792 1016.3
+1276.62744 13180.1
+1277.62683 9991.3
+1278.62769 4112.5
+1279.62439 1572.7
+1286.60461 816.2
+1287.61511 1228.1
+1293.57788 18363.2
+1294.58057 11613.1
+1295.58740 4231.1
+1296.58533 1463.9
+1311.58813 20444.1
+1312.58948 14423.1
+1313.59338 5828.3
+1314.59131 1494.5
+1502.23926 643.8
+1777.49658 905.5
+1860.04333 608.9
+1878.19543 776.8
+1878.72913 1531.6
+1879.44604 19571.5
+1879.74707 1701.4
+1880.12573 1516.4
+1880.45239 973.1
+1881.04919 897.7
+1884.17590 797.1
+1907.05457 7691.7
+1930.58081 856.3
+S	1627	1627	481.0508246
+Z	3	1439.877
+Z	2	960.254
+121.13868 72744.4
+121.79718 263479.8
+133.40176 70836.7
+157.60017 67412.3
+159.40788 60161.6
+178.08583 625919.4
+179.08925 88709.1
+181.41853 57554.5
+188.25545 74812.6
+188.26535 108373.3
+188.27881 168874.4
+188.29472 136859.4
+188.30339 119704.5
+188.31381 109482.2
+188.34073 67783.7
+191.82715 58690.8
+199.16859 134195.0
+199.23381 191594.5
+199.24484 86320.7
+199.25826 133161.0
+199.26633 354744.2
+199.28091 112734.2
+206.08070 86258.8
+223.10722 1472055.1
+224.11072 159564.8
+251.10199 841182.4
+252.10574 77530.6
+252.14111 90415.9
+268.71198 83360.8
+276.16956 146836.8
+283.14499 112243.7
+286.16519 65749.3
+293.42426 67983.3
+304.89063 69384.0
+318.67050 1145624.8
+319.17203 287655.7
+331.39255 76512.8
+348.00107 61102.3
+348.11786 421851.8
+366.12909 436239.2
+367.74353 67736.5
+374.25827 73910.8
+382.71786 580727.4
+383.21890 172666.4
+386.28912 62136.2
+392.21274 257237.8
+414.20288 111888.2
+427.54266 100106.8
+436.64743 71254.0
+456.25125 1987516.0
+456.75302 864854.5
+457.25369 133584.6
+459.55304 107570.2
+462.58160 60692.1
+462.88214 102781.4
+463.21622 104220.9
+465.55713 294865.8
+465.89261 257214.2
+468.56296 78512.5
+468.88541 499864.8
+469.22122 138990.7
+478.09940 75599.5
+501.19287 183702.1
+513.19708 161686.5
+529.18939 117402.1
+532.58173 195541.3
+537.78229 3135764.8
+538.28418 1752353.4
+538.78552 560188.2
+539.28241 277494.0
+540.28235 88572.3
+577.78650 88472.2
+578.28894 76186.8
+586.29254 241539.0
+586.78363 233274.0
+587.28497 180826.7
+594.55121 79736.0
+595.29572 14121143.0
+595.79730 8696871.0
+596.29840 3248184.0
+596.80029 701585.8
+600.28650 87691.5
+601.04834 70639.4
+618.31708 86839.6
+620.80408 92943.0
+629.80701 893350.6
+630.30859 611575.1
+630.81097 269736.8
+634.79938 219722.2
+635.29980 204073.4
+636.33264 2304076.8
+637.33594 802224.8
+638.33783 161796.0
+638.81165 9662323.0
+639.31293 6205252.0
+639.81403 2527479.8
+640.31458 585171.5
+641.20673 108538.2
+643.80353 2063888.5
+644.30530 1550949.3
+644.80609 531443.9
+646.29028 73062.1
+648.26251 157064.5
+657.68799 66505.4
+658.24994 126977.6
+676.25836 359749.7
+676.62195 106908.9
+677.26160 98737.0
+720.00861 65243.9
+764.42377 247810.8
+765.42792 83054.5
+795.54626 93921.7
+796.51581 64414.5
+873.22919 85395.7
+911.49652 162075.8
+957.55713 76778.7
+1021.13629 89476.2
+1126.98865 85241.9
+1198.30310 402059.7
+1489.27905 78592.4
+1525.41394 103438.9
+1869.79578 70504.4
+1877.66479 74813.3
+1879.11133 76498.4
+1879.48853 2353090.3
+1880.37903 94045.1
+1881.26587 106406.6
+1885.87476 76677.3
+1907.09241 920405.0
+1930.60193 104001.8
+S	1629	1629	1879.99840793
+Z	2	3758.149
+Z	3	5636.72
+532.53802 2050.5
+549.16742 974.2
+630.42596 696.2
+663.76312 812.7
+795.53473 1049.2
+821.10437 672.2
+849.88031 597.9
+1021.17609 738.0
+1115.19055 619.3
+1162.01367 592.9
+1188.11096 907.7
+1198.19458 3298.0
+1221.12952 679.0
+1675.69702 633.8
+1877.79883 869.7
+1878.88696 1555.3
+1879.52869 16355.9
+1880.25830 973.3
+1907.06494 7423.0
+1930.60828 793.8
+S	1630	1630	1907.4778246
+Z	2	3813.108
+Z	3	5719.158
+532.57233 1831.5
+532.62488 799.3
+549.14111 945.8
+579.96307 509.6
+630.39374 841.4
+676.63660 1262.2
+795.54114 941.5
+847.81140 578.9
+909.99030 641.4
+991.06085 569.8
+1198.30054 2858.5
+1626.03503 653.4
+1762.61377 629.0
+1777.44678 1030.4
+1860.07043 613.8
+1869.86292 747.5
+1878.64868 754.1
+1878.91125 1091.7
+1879.52869 19900.9
+1879.79846 2006.2
+1880.12524 1611.2
+1880.41345 781.6
+1907.06250 7602.1
+1930.54041 818.0
+1984.30664 704.0
+S	1631	1631	656.5510121
+Z	4	2622.17275
+170.54376 730.9
+171.56622 567.7
+171.64011 798.9
+188.25876 1087.5
+188.26927 1020.7
+188.28302 1271.0
+188.29309 1227.2
+188.30707 823.5
+188.31201 747.8
+188.46979 491.8
+198.18430 661.2
+198.88635 788.5
+199.24612 1457.1
+199.25728 2187.3
+199.26363 1534.6
+199.27426 1014.3
+199.28670 903.6
+199.34291 700.3
+199.35521 925.7
+199.36171 563.8
+229.55904 579.5
+236.00778 651.3
+240.09700 1440.4
+264.11920 808.8
+264.52179 533.9
+303.17416 677.0
+304.41324 617.2
+311.13489 2464.2
+322.68127 738.2
+331.70764 4015.9
+332.21011 1209.3
+339.06873 620.0
+361.57614 688.5
+366.67682 523.1
+368.15265 662.0
+375.10361 652.8
+377.27899 663.0
+381.36377 508.5
+402.31702 644.9
+425.17627 1000.1
+427.53149 536.7
+427.55319 653.2
+440.62695 805.5
+462.84970 724.3
+481.23322 688.2
+500.43207 686.0
+532.58087 2264.9
+540.20294 2331.8
+541.20685 816.8
+549.16382 705.5
+565.84094 691.7
+572.23761 594.1
+580.30072 826.0
+587.77240 1940.8
+588.01105 572.9
+592.02350 7851.1
+592.27393 6841.5
+592.52448 3845.5
+592.77441 1577.9
+593.54901 587.8
+611.23724 899.9
+613.61969 1436.4
+613.78601 845.4
+616.62000 918.3
+616.95862 1226.7
+623.27722 912.9
+625.95996 784.1
+629.83618 1080.6
+631.63220 2954.6
+631.96368 2037.2
+636.33276 1231.8
+637.34009 791.6
+638.28748 1757.2
+638.78827 1106.9
+643.04181 843.6
+676.66620 1001.4
+688.99329 5880.6
+689.32660 6487.8
+689.66486 3148.5
+689.99493 977.8
+721.33362 2056.3
+727.33490 6781.1
+727.67053 5140.5
+728.00348 3239.2
+728.34143 1201.2
+740.33856 1520.8
+745.74097 639.5
+746.34308 7720.3
+746.67645 7186.8
+747.01160 3769.6
+747.34473 1085.2
+751.86938 1405.0
+759.34668 1719.8
+759.68060 2267.7
+760.01398 1169.1
+760.68085 718.5
+765.35010 13544.5
+765.68396 14088.1
+766.01874 9005.0
+766.35095 1656.4
+776.38269 976.0
+780.06647 910.5
+780.40875 934.6
+781.12982 805.8
+783.35480 704.6
+783.40863 953.2
+783.69794 1588.1
+784.14850 676.6
+789.02826 12012.3
+789.36340 13592.8
+789.69769 6601.1
+790.02960 1317.7
+791.34528 724.3
+795.53046 826.1
+804.65857 622.7
+819.43219 867.1
+852.85663 781.5
+867.53040 1275.9
+882.41650 1083.0
+882.93066 911.7
+887.49457 974.5
+930.89929 594.1
+966.90271 682.0
+980.89014 989.9
+992.46100 731.9
+1019.68549 861.0
+1061.47424 928.9
+1097.61682 606.4
+1198.29199 3205.5
+1702.83875 705.0
+1722.59717 742.3
+1877.74939 795.1
+1878.99365 1737.1
+1879.31213 4296.6
+1879.58386 18348.3
+1880.04785 2211.1
+1881.42908 827.1
+1907.06653 7619.0
+1918.67908 670.6
+1930.65906 831.7
+1955.13062 888.0
+S	1633	1633	1907.4738246
+Z	2	3813.1
+Z	3	5719.146
+532.55615 1959.5
+549.17883 731.3
+630.43872 716.5
+676.63092 1116.8
+683.44159 731.6
+748.67059 735.5
+768.47583 577.9
+784.15967 608.6
+828.93146 659.6
+1159.37915 783.3
+1188.25391 715.8
+1198.24207 3416.0
+1280.39172 582.4
+1427.17224 583.9
+1445.47034 705.1
+1525.12048 651.8
+1578.07874 679.7
+1770.27490 704.1
+1878.76904 1101.1
+1879.05237 1605.5
+1879.52148 18975.4
+1879.92151 1513.1
+1880.32776 800.6
+1882.17505 845.5
+1899.23938 606.2
+1907.10400 7449.1
+1930.66333 819.7
+1934.85791 666.9
+S	1634	1634	482.099407933
+Z	3	1443.023
+Z	2	962.351
+120.77160 586.7
+120.91118 711.1
+121.79655 2324.4
+121.80981 648.3
+122.02622 528.7
+151.75162 603.9
+165.77696 667.9
+178.08624 8231.9
+179.08873 1257.5
+181.75024 649.3
+186.06398 577.5
+188.24583 969.0
+188.26289 1524.8
+188.28613 2476.2
+188.31473 1228.1
+198.88391 1033.1
+199.06374 658.6
+199.18488 592.5
+199.22559 792.7
+199.25137 2050.9
+199.26749 1238.2
+199.28178 1098.0
+199.29881 952.5
+199.35010 1149.1
+199.36555 762.4
+213.33516 537.5
+216.06512 486.9
+216.07104 519.7
+217.13304 1077.8
+223.10789 19232.1
+224.11140 2937.3
+231.14877 1217.4
+233.09302 985.4
+243.45366 576.8
+251.10284 13121.7
+252.10582 2041.8
+276.17111 6935.9
+279.09808 1061.3
+283.14496 3084.5
+286.99869 662.2
+293.11310 856.0
+305.18246 1934.7
+309.66544 910.4
+311.13901 845.0
+318.67160 21476.3
+319.17328 9686.1
+319.67532 1422.2
+321.10974 1723.5
+330.11020 928.1
+331.09277 1278.5
+332.16101 745.0
+339.16812 1496.1
+348.11938 10167.7
+349.12347 1746.2
+350.26929 604.4
+352.86362 594.5
+353.15042 1510.0
+353.90787 563.9
+366.12994 14008.8
+367.13287 2192.0
+368.13724 860.9
+373.22342 940.6
+374.20453 3237.7
+380.08112 574.0
+381.14517 2603.8
+382.14816 717.4
+382.71902 14477.5
+383.22046 6853.4
+383.71899 1123.6
+390.56747 664.6
+392.21414 14219.3
+393.21786 2375.3
+397.18637 1193.3
+398.70599 664.5
+400.53006 1152.6
+400.67523 627.5
+400.86462 1268.5
+402.68198 2068.0
+403.18402 1690.2
+404.67352 563.9
+408.15826 776.9
+414.20871 777.1
+414.53787 886.1
+415.19672 1971.0
+426.16669 4982.0
+426.21533 658.6
+427.16925 876.0
+427.19992 1026.4
+429.18286 713.8
+429.54028 1069.9
+433.20850 1344.5
+438.16522 640.8
+439.23102 1005.8
+442.24316 708.9
+450.16574 813.1
+454.20676 750.2
+456.25302 34140.1
+456.75452 20271.4
+457.25562 6178.8
+457.75800 1624.9
+459.55655 885.3
+459.88382 586.8
+480.56641 4742.2
+480.90079 5565.6
+481.23544 5516.8
+481.56897 3852.6
+481.90411 1506.8
+484.17145 1268.1
+485.20370 1212.1
+490.22852 1768.1
+494.15613 1321.9
+495.18619 3637.2
+496.19128 1243.9
+496.26791 622.0
+501.19809 13123.1
+502.20233 2978.2
+503.20435 694.1
+503.26459 615.5
+508.23929 6138.9
+509.24048 1131.7
+510.74588 997.2
+511.18286 1016.1
+511.24838 1208.3
+512.16486 2721.7
+513.19757 9840.4
+514.20117 2835.8
+515.20050 788.5
+516.20740 678.7
+519.77448 2052.0
+521.27356 2025.7
+523.18512 778.8
+524.74585 934.2
+528.77875 2867.9
+529.19312 8174.6
+529.28192 1432.9
+530.19641 2671.0
+532.57367 1876.9
+536.25006 743.6
+537.78461 163601.9
+538.28601 106032.4
+538.43610 648.9
+538.78748 40708.9
+539.09515 797.8
+539.28455 22066.6
+539.61249 700.4
+539.78967 1644.4
+540.10706 738.5
+540.28638 4874.0
+541.29102 836.2
+542.77948 794.7
+549.26233 758.1
+554.25739 799.8
+561.30328 1956.7
+568.25616 814.2
+571.78076 736.8
+573.08929 576.0
+577.28729 3448.6
+577.78937 3440.7
+578.28772 1179.7
+579.29614 687.0
+582.30353 995.7
+585.23145 633.9
+586.29285 14366.1
+586.78735 21195.3
+587.28723 13979.5
+587.78723 5019.3
+588.28735 1055.0
+589.02350 646.8
+590.29742 1324.7
+592.31110 1238.3
+592.79669 632.4
+593.72125 615.2
+593.76550 3653.4
+594.03479 671.8
+594.11102 600.5
+594.26495 1972.4
+594.53955 3456.2
+594.80389 1100.7
+594.84161 706.3
+595.04242 3909.2
+595.17609 823.7
+595.19513 1201.2
+595.22882 2884.8
+595.29779 632782.8
+595.37085 1817.4
+595.54651 2099.8
+595.79901 480202.2
+595.86182 2145.6
+595.88739 780.9
+595.90668 850.4
+595.97302 918.8
+596.05249 4301.1
+596.30042 201633.8
+596.55847 3323.1
+596.80145 60757.2
+596.87939 1284.6
+597.06244 1754.2
+597.30249 13356.0
+597.80261 2511.9
+599.64563 561.1
+600.31464 5396.2
+600.78949 959.6
+601.32715 802.7
+603.24298 2167.1
+604.25012 657.8
+606.25586 842.6
+607.29346 1510.1
+607.90222 584.3
+610.79926 1068.6
+612.29315 841.7
+613.22723 1895.6
+616.80316 810.2
+618.32452 26358.3
+619.32861 7749.9
+620.32861 1627.3
+620.80341 5150.7
+621.30383 4640.9
+621.80322 2085.6
+623.28033 940.4
+628.80219 2725.9
+629.30341 1604.4
+629.40540 815.7
+629.80835 51039.7
+630.25177 1959.1
+630.30969 35568.0
+630.81146 14600.8
+631.23810 4674.5
+631.31189 3548.4
+631.81952 1314.6
+632.24335 2091.4
+634.63898 1118.9
+634.80115 11163.8
+635.30255 7804.6
+635.49188 1079.4
+635.80298 3134.2
+636.33453 303021.6
+637.10608 3231.0
+637.17340 1876.5
+637.33759 101494.9
+637.43140 1292.9
+637.60980 2747.6
+637.68909 934.8
+637.75458 881.0
+637.90161 1244.4
+637.97113 2258.9
+638.03943 2184.3
+638.10364 1524.0
+638.26672 1195.6
+638.34052 23288.6
+638.46948 1676.7
+638.53973 1208.5
+638.67261 1157.8
+638.71429 1955.5
+638.74762 1942.2
+638.81311 578645.8
+638.90381 1654.9
+638.95764 1847.7
+639.00208 935.8
+639.17938 657.0
+639.21350 1192.7
+639.23694 1863.2
+639.31396 427124.3
+639.57874 1239.1
+639.65613 3471.0
+639.74396 1162.3
+639.81519 184256.4
+639.91241 778.3
+639.93317 928.6
+640.15796 2071.7
+640.23407 1694.4
+640.31653 59919.4
+640.52411 3571.7
+640.57294 1033.1
+640.66241 755.6
+640.72723 1074.4
+640.81689 13020.0
+641.02917 2535.6
+641.21533 880.4
+641.31952 2804.4
+641.81158 808.8
+643.19745 633.8
+643.80511 78281.5
+644.01831 954.6
+644.30652 63944.6
+644.80768 25624.8
+645.30920 8243.8
+645.80841 2170.7
+647.29553 931.0
+647.80261 800.0
+648.26501 7563.7
+649.26727 3128.5
+656.29645 843.7
+656.79626 1891.0
+658.24927 7816.6
+658.31744 674.8
+659.25958 2619.7
+676.26062 21896.3
+677.26373 8931.3
+678.26868 1817.9
+683.35321 1358.1
+683.50238 744.8
+708.37006 1046.6
+720.34418 1505.4
+720.84686 1529.1
+728.41162 2127.9
+729.41394 1492.5
+738.34955 1474.3
+739.35352 970.2
+746.41943 13003.3
+747.42365 4203.0
+750.33618 552.3
+764.42993 68303.4
+765.43280 26256.5
+766.43555 5729.5
+767.44067 1077.2
+770.39020 808.0
+776.36823 646.2
+783.40216 2805.3
+784.40863 882.9
+787.32220 762.1
+790.93994 996.4
+795.52771 1303.6
+798.38043 1410.8
+804.35712 6613.6
+805.35944 3358.6
+833.95398 915.8
+867.42358 704.8
+871.43634 1094.6
+872.43787 922.7
+875.47821 1016.9
+884.37939 857.4
+885.41473 3801.1
+886.42322 1487.2
+893.48761 5208.1
+894.48969 2594.2
+911.49762 53094.3
+912.50110 25581.0
+913.50470 7842.1
+914.51001 1527.2
+928.45087 1769.4
+929.46814 799.2
+946.46515 1744.6
+972.45178 1585.2
+973.45300 1004.3
+986.46143 2145.7
+987.46704 1205.9
+1001.25391 578.2
+1019.67273 736.4
+1025.47363 678.2
+1040.24707 566.8
+1043.48328 1783.4
+1044.48267 1069.7
+1048.47742 889.4
+1056.54797 909.0
+1057.21814 997.5
+1061.49292 4211.0
+1062.49683 1598.3
+1073.49060 2223.0
+1074.56006 6471.2
+1075.56213 3632.7
+1076.57031 1207.8
+1112.50098 961.9
+1130.51892 2392.1
+1131.52112 1626.9
+1148.52820 4131.5
+1149.53723 1530.3
+1150.53271 864.4
+1198.12976 622.6
+1198.28345 3331.0
+1281.70935 804.7
+1421.51917 664.7
+1454.86646 629.2
+1525.50732 977.5
+1677.80090 755.0
+1720.18018 618.6
+1860.05103 795.0
+1877.43909 552.5
+1877.68506 963.6
+1878.51245 1289.4
+1878.77966 1067.3
+1879.22253 3260.7
+1879.50427 19540.5
+1880.23425 1060.9
+1880.51611 762.3
+1882.02917 657.5
+1883.76965 679.4
+1907.07861 7499.1
+1918.69714 937.7
+1930.76624 862.1
+S	1635	1635	481.533407933
+Z	3	1441.325
+Z	2	961.219
+121.79716 2347.7
+123.36501 631.2
+130.09270 666.9
+160.64139 696.3
+163.63539 660.5
+164.41368 582.4
+165.22783 683.7
+165.77901 822.9
+168.08696 652.9
+178.08632 8820.4
+179.08949 1108.2
+181.19528 628.6
+188.26797 1254.9
+188.27667 710.7
+188.28409 1166.4
+188.29131 1229.5
+188.30457 1130.6
+188.31712 673.9
+188.50484 613.4
+188.94609 645.2
+192.65826 677.4
+198.88684 1051.2
+199.19641 1140.8
+199.23817 980.8
+199.25500 1714.0
+199.26935 2608.7
+199.28900 1878.5
+199.30719 958.1
+199.35759 690.9
+206.08127 923.3
+216.06561 891.5
+217.13304 836.3
+218.09360 645.6
+223.10782 20616.9
+224.11093 4019.4
+231.14876 1743.1
+233.09126 1309.6
+251.10277 15122.0
+252.10631 2793.5
+276.17090 7616.7
+277.17502 1430.9
+279.09842 1048.3
+283.14456 2936.9
+284.14771 874.6
+305.18143 1442.6
+309.66812 1062.2
+318.67142 19962.3
+319.17270 8538.9
+319.67410 2272.1
+320.12518 812.3
+321.10764 1940.8
+321.16196 656.9
+323.66013 624.4
+330.10803 807.7
+332.81985 654.7
+339.16711 1705.4
+342.30548 743.7
+348.11914 9320.3
+349.12283 1885.0
+350.68970 687.5
+353.15005 1720.9
+355.21277 766.0
+357.27191 590.6
+366.12985 14494.4
+367.13287 1910.7
+373.71719 780.0
+374.20456 3601.4
+374.70468 1079.9
+381.14499 2439.9
+382.71881 14278.4
+383.22046 6328.6
+383.72159 1897.5
+392.21411 13709.1
+393.21616 2309.5
+397.18646 1295.1
+400.52783 949.1
+400.86465 890.1
+402.68152 3459.5
+403.18402 2329.6
+408.15778 785.6
+409.15427 605.6
+414.20377 1318.7
+415.19733 2264.5
+426.16678 5463.6
+427.16904 1680.5
+427.58688 684.6
+429.53793 879.6
+433.20728 1812.4
+439.23114 748.9
+450.16571 761.6
+454.20688 881.0
+456.25281 33044.1
+456.75433 19711.2
+457.25522 7045.2
+457.75803 1904.1
+480.56668 2457.5
+480.90085 5433.5
+481.23560 4345.4
+481.56897 3156.2
+481.90161 1149.7
+484.17255 1275.3
+485.17679 797.0
+485.19388 691.9
+490.23074 1688.9
+491.12131 582.3
+494.15671 1580.1
+495.18643 3758.6
+496.19046 1072.4
+501.19800 14374.5
+502.20178 3329.5
+503.20251 717.4
+507.26041 719.0
+508.23868 5623.1
+509.24234 1116.3
+510.74738 1141.9
+511.24695 853.1
+512.16473 2655.5
+513.19763 9924.7
+514.19989 3475.5
+516.21918 971.1
+519.77277 1467.3
+520.29907 702.0
+521.27032 2048.8
+523.18237 1082.9
+528.78058 1877.5
+529.19257 7962.4
+529.28192 1301.3
+529.77930 758.7
+530.19653 2977.0
+532.60107 2376.1
+537.78424 168605.5
+538.28577 118698.7
+538.78717 46662.2
+538.93823 940.4
+539.10425 1019.0
+539.28424 26566.0
+539.78979 2751.6
+540.28668 5388.7
+541.28735 1290.9
+549.26526 1091.2
+550.27264 747.5
+554.25958 1466.3
+561.30090 2074.3
+573.28406 1124.7
+577.28827 4581.3
+577.78766 2412.2
+578.28687 1066.0
+578.79236 1114.1
+582.30505 1959.6
+582.79376 847.9
+586.29303 15808.0
+586.78705 22286.6
+587.28815 13719.6
+587.78815 5180.5
+588.28705 898.3
+590.29895 1324.7
+591.29675 801.6
+592.30475 1118.0
+593.76764 3825.1
+593.90430 1105.7
+593.95691 778.1
+594.26398 3029.4
+594.33588 901.0
+594.53802 2646.3
+594.78778 1224.7
+595.04108 1788.2
+595.11041 806.3
+595.12469 777.5
+595.20929 1237.6
+595.22845 2127.0
+595.29767 650392.8
+595.37030 2000.0
+595.54742 1875.8
+595.79883 510425.0
+596.05499 4569.8
+596.30017 215362.7
+596.37244 1309.7
+596.40326 1029.6
+596.55927 3339.4
+596.69714 922.1
+596.74762 743.7
+596.80188 66745.6
+597.02722 1469.6
+597.06140 1555.3
+597.15057 1171.1
+597.20569 884.6
+597.30359 18255.8
+597.70416 666.6
+597.80646 3883.2
+600.31567 4583.7
+600.79004 1465.5
+601.32605 1332.9
+603.24438 1766.2
+604.24701 857.6
+605.18164 718.0
+606.25757 700.4
+607.79614 1580.9
+612.29633 921.2
+613.23114 1187.5
+614.23273 767.7
+616.80475 1078.4
+618.32428 24905.1
+619.32837 8576.5
+620.32898 1823.2
+620.80182 6300.5
+621.30267 3854.6
+621.80457 2306.2
+623.80664 989.5
+626.29865 921.9
+628.80298 2888.5
+629.31158 1471.5
+629.80804 54026.5
+630.25171 1443.8
+630.30963 37651.1
+630.46277 934.7
+630.81061 15689.8
+631.23883 4363.7
+631.31213 4640.4
+631.80908 971.4
+632.24390 1939.9
+634.64441 1370.5
+634.80066 8842.3
+635.30127 7470.5
+635.80237 2779.9
+635.96973 670.7
+636.23511 690.3
+636.33441 309907.2
+636.81946 664.0
+636.84906 890.7
+637.11517 3069.9
+637.16565 1260.4
+637.33740 111826.1
+637.61371 2118.5
+637.73059 789.5
+637.76685 1404.9
+637.87378 1056.3
+637.97028 1859.2
+638.02716 1756.8
+638.26044 1181.1
+638.34027 27464.3
+638.47345 1901.7
+638.52814 1252.5
+638.54816 1011.4
+638.67993 800.3
+638.71228 1447.1
+638.74054 2249.9
+638.81305 596769.4
+638.95935 1521.8
+638.97656 1066.1
+639.03070 1782.2
+639.21436 1273.9
+639.23615 2200.8
+639.31390 454053.5
+639.40430 1229.1
+639.65405 2748.7
+639.81525 197694.2
+639.93689 947.3
+639.95331 715.4
+640.16138 2316.3
+640.31635 65411.0
+640.37225 1653.1
+640.52264 3252.9
+640.65411 1066.2
+640.81757 16623.7
+640.87646 1389.9
+640.95026 732.6
+641.02075 2669.9
+641.22675 1372.8
+641.28510 1274.2
+641.32031 2856.4
+641.52625 1306.0
+643.80475 81292.8
+644.30652 63699.6
+644.80731 29738.6
+645.30933 9310.5
+645.80969 2587.6
+648.26495 8028.9
+649.26807 2886.9
+650.26733 915.9
+651.30609 942.5
+652.43140 675.6
+655.72839 609.9
+656.29260 1011.5
+656.68964 899.5
+658.25012 8342.3
+659.26385 1726.7
+676.26086 23163.9
+676.64557 1464.5
+677.26318 9750.4
+678.26965 2233.4
+683.35620 1471.1
+684.34576 720.8
+708.37219 2133.8
+711.83374 1041.7
+720.34442 1489.7
+720.84161 1595.7
+728.41028 2620.4
+738.34082 1146.4
+739.34503 750.7
+746.41907 12743.4
+747.42657 3804.1
+748.42267 1346.5
+764.42981 63635.1
+765.43243 28448.6
+766.43518 7106.2
+767.44055 1625.5
+770.38849 1169.6
+783.40228 3072.8
+783.81580 682.0
+784.40295 1216.5
+798.38300 1201.3
+804.35547 6654.2
+805.36139 3283.1
+833.95502 786.3
+857.43945 810.4
+871.43628 1574.6
+872.43164 969.8
+875.46820 709.6
+885.41174 3792.7
+886.41852 2510.9
+893.48743 5099.6
+894.49054 2427.1
+895.49023 756.9
+911.49762 53441.2
+912.50092 26217.4
+913.50507 7632.8
+914.50793 1918.7
+928.44708 1087.5
+946.47278 1779.3
+972.44647 1980.0
+986.46057 2116.6
+987.46442 1045.2
+1019.69891 807.3
+1020.83386 722.2
+1043.48267 2539.7
+1044.48987 1867.8
+1048.46228 780.0
+1055.49023 1056.7
+1056.56531 1091.8
+1057.56421 944.3
+1061.49609 5237.4
+1062.26563 651.9
+1062.49622 2318.9
+1063.50208 1208.6
+1073.49731 2664.4
+1074.55994 5864.8
+1075.56641 4388.4
+1076.55493 1078.7
+1130.51282 2128.5
+1131.51758 2134.6
+1143.16785 662.9
+1148.52979 3696.7
+1149.53381 2514.4
+1158.50916 927.1
+1198.35156 4017.6
+1203.74573 651.0
+1225.97693 749.1
+1312.33838 687.1
+1457.15845 733.0
+1504.21130 620.7
+1525.56689 1067.6
+1694.64209 668.4
+1750.44397 714.1
+1766.74609 746.3
+1878.28210 879.4
+1878.65308 1044.1
+1879.11914 2377.5
+1879.54773 22384.8
+1879.97668 2340.9
+1880.83142 897.5
+1907.04187 8689.6
+1930.81006 978.4
+S	1637	1637	1879.94640793
+Z	2	3758.045
+Z	3	5636.564
+532.58728 2142.9
+549.19257 683.2
+642.46985 592.4
+657.81110 716.0
+676.62250 1064.4
+682.85620 581.9
+731.13849 744.3
+735.97253 675.0
+795.53577 735.7
+916.29016 745.4
+987.66394 565.1
+1057.22534 808.8
+1198.31799 3381.9
+1454.31628 642.0
+1518.05017 654.3
+1668.24365 604.6
+1876.85925 688.9
+1878.25159 762.3
+1879.49316 19446.4
+1879.76807 2619.1
+1880.04004 1498.5
+1881.21704 662.9
+1897.13611 816.2
+1899.06384 615.5
+1907.04895 7645.3
+1918.67200 744.6
+1930.67456 954.7
+1940.41101 644.4
+S	1638	1638	1907.4648246
+Z	2	3813.082
+Z	3	5719.119
+532.57739 1937.0
+569.28308 664.4
+576.17163 600.9
+676.65240 759.5
+724.05725 724.7
+795.54730 1582.3
+858.07928 759.7
+1021.19000 827.9
+1071.26709 625.8
+1155.22791 701.3
+1198.29419 3387.4
+1525.49829 935.9
+1593.54517 648.3
+1666.87512 680.5
+1678.37402 897.7
+1876.28162 756.6
+1877.68677 836.0
+1879.19141 1952.8
+1879.56567 19586.1
+1879.94092 2304.1
+1881.81653 755.9
+1907.05823 7740.3
+S	1639	1639	482.0978246
+Z	3	1443.018
+Z	2	962.348
+121.79335 288120.1
+136.07518 135274.0
+136.75334 64606.4
+138.18346 63311.3
+139.44635 54375.9
+139.76974 67016.4
+141.85027 75308.6
+162.35071 56025.9
+165.77356 96935.1
+170.86348 56780.4
+174.31824 66533.5
+175.08644 98177.7
+178.08600 1096056.8
+179.08900 73517.0
+179.54234 58042.0
+185.37297 58028.7
+185.50041 58548.3
+188.07085 110301.5
+188.23083 66367.2
+188.25931 84247.5
+188.26987 101325.5
+188.27948 76617.6
+188.28729 113581.2
+188.30147 125794.4
+188.30946 80477.8
+194.93106 58113.1
+198.88713 84311.2
+199.15784 83623.1
+199.17543 65088.0
+199.23758 86346.1
+199.25397 238758.9
+199.26434 113039.8
+199.27443 179173.8
+199.28746 93585.5
+199.29765 73014.4
+199.37286 67338.0
+223.10741 2083047.8
+224.11046 235702.2
+227.98686 51379.5
+251.10234 1088769.6
+252.10553 165927.2
+271.84119 85754.6
+273.84454 57377.4
+276.17017 248285.2
+283.14392 109783.4
+298.24719 68131.8
+307.70697 62734.3
+318.67038 1756389.4
+319.17230 537706.1
+319.67514 101287.0
+348.11835 548124.4
+349.12305 113535.8
+366.12881 612546.9
+367.13196 81696.9
+374.20459 65614.4
+382.71802 757055.1
+383.21967 316259.9
+392.21368 394819.3
+426.16617 133332.1
+456.25165 2701784.8
+456.75333 1366950.5
+457.25491 417028.5
+459.55301 68067.0
+459.89001 65076.3
+460.23141 59642.1
+460.24374 57778.7
+462.88303 84571.7
+465.55844 413526.1
+465.89203 385762.1
+466.22739 141874.9
+467.59848 67020.4
+468.88589 895791.5
+469.22083 420725.4
+469.55927 105427.1
+495.18481 84980.0
+501.19647 387956.9
+502.19537 85832.7
+512.16443 81263.1
+513.19415 203779.9
+513.62335 74628.9
+529.19110 213417.8
+532.56378 144725.1
+537.78278 4548304.5
+538.28442 2592277.0
+538.78613 922030.3
+539.28259 454434.1
+540.25299 62072.9
+540.29004 111655.8
+586.29108 463105.2
+586.78381 409414.4
+587.28510 346324.1
+587.78619 91997.7
+593.76917 109603.1
+593.91339 76541.8
+594.53638 86708.2
+595.04395 62371.2
+595.24292 65103.1
+595.29620 20655964.0
+595.79773 14018144.0
+595.85065 66360.9
+596.06006 110982.2
+596.29901 4965509.5
+596.56134 78271.5
+596.80023 1229091.6
+597.30280 307796.9
+600.28864 118858.8
+600.79095 126381.4
+618.32684 101043.1
+621.30127 63468.0
+629.80719 1339799.9
+630.30792 886939.6
+630.80920 405335.6
+634.79718 425082.3
+635.29980 352262.8
+635.80035 109665.3
+636.33325 3529236.0
+637.33691 1116702.4
+638.34076 236446.5
+638.81201 13071963.0
+639.31329 8879156.0
+639.81451 3514586.3
+640.31537 897623.4
+640.52216 91478.5
+640.81860 176267.7
+643.80402 2944354.3
+644.30585 2044598.6
+644.80646 772595.4
+645.30853 195458.0
+648.26477 127150.9
+658.24939 207901.5
+676.26013 540308.9
+676.64276 75950.9
+677.26251 283339.5
+687.44061 65751.0
+692.07123 73443.5
+764.42743 369366.5
+765.43451 117387.8
+794.35754 71882.2
+804.34998 136639.6
+868.73431 72543.7
+892.13989 68401.1
+911.49695 207864.8
+912.49719 84387.7
+933.20184 55487.3
+977.71399 64889.3
+1189.62354 60260.4
+1198.26880 335636.3
+1212.41553 59813.6
+1232.97327 67931.5
+1385.69226 77095.0
+1525.37695 81498.9
+1694.55261 89046.6
+1729.79871 66113.8
+1776.99207 77040.1
+1860.03467 68090.5
+1879.25269 266466.2
+1879.55005 1989859.1
+1879.87378 293391.3
+1880.15491 106814.9
+1881.03918 83120.2
+1907.05725 771982.8
+1930.55225 94288.2
+S	1641	1641	721.3818246
+Z	2	1440.916
+Z	3	2160.87
+188.24696 654.5
+188.26936 1417.5
+188.28647 1694.6
+188.30276 1946.5
+188.31915 1297.0
+188.33247 786.3
+188.54997 561.8
+199.19368 600.3
+199.22104 739.6
+199.23917 1492.2
+199.26591 2522.0
+199.29381 787.4
+199.36354 910.3
+205.09628 714.3
+216.06525 1290.1
+217.13371 2333.8
+220.61641 650.3
+223.10768 3719.4
+231.14879 1219.6
+232.39096 562.0
+233.09151 2059.1
+234.35291 685.5
+234.73709 758.0
+241.58989 720.5
+251.10271 13455.8
+252.10629 1529.4
+261.15823 636.2
+262.15546 1305.0
+273.07175 599.7
+274.65411 598.1
+276.17044 2937.0
+279.09784 1316.0
+283.14407 12845.5
+284.14771 2854.3
+285.81741 581.1
+287.17126 1314.8
+299.13904 1040.7
+302.11414 771.8
+303.09668 1020.6
+305.18188 11155.1
+306.18533 1055.5
+311.13846 3236.5
+312.14325 1219.8
+314.14966 1028.3
+320.12402 1176.3
+321.10748 1550.0
+321.15530 1507.8
+325.15466 1231.8
+330.10831 1728.5
+331.09235 1945.8
+332.16058 1819.7
+338.13318 1253.9
+339.16611 10741.9
+340.17194 1351.0
+341.14865 2801.6
+342.15756 680.7
+348.11899 32731.3
+349.12244 5932.3
+350.12503 515.1
+350.29272 703.6
+353.14911 2663.8
+354.15009 721.2
+355.21252 2113.6
+356.19360 1186.1
+357.17746 3068.5
+366.12949 40856.8
+367.13242 7178.7
+369.14526 3468.8
+373.22446 1420.4
+374.20328 4752.7
+380.16052 1439.7
+381.14551 2545.2
+381.37000 653.0
+382.71887 1762.1
+387.31790 635.1
+392.21378 21439.5
+393.21735 3718.0
+397.18674 2605.3
+398.17590 866.3
+398.92279 644.6
+401.18503 3230.4
+402.31268 628.8
+408.15692 1279.6
+409.15149 653.8
+411.11267 632.6
+411.30994 582.2
+415.19806 5105.1
+416.20145 962.6
+422.16583 767.3
+426.09607 627.7
+426.16510 4325.1
+427.19531 846.3
+429.18036 4216.4
+430.18564 1549.7
+433.20740 2725.0
+442.24243 1084.9
+449.18237 2030.1
+450.16696 3151.5
+451.17239 651.0
+454.20969 2232.0
+456.25238 4499.6
+456.75613 1589.8
+460.25552 2128.9
+465.17374 951.6
+466.16071 1510.7
+467.19250 6528.9
+468.17624 12472.9
+469.17917 3370.7
+470.18097 789.8
+472.21844 2891.8
+473.22287 1249.9
+474.20383 4129.6
+475.20831 828.9
+477.17609 1851.3
+480.87399 1212.5
+483.18533 3232.5
+484.17062 9157.7
+485.20096 7183.4
+486.20956 1416.5
+487.20380 576.8
+487.23486 552.4
+490.22858 4193.2
+495.18707 10023.2
+496.19077 1979.3
+501.19739 31250.4
+502.20090 7764.9
+503.20380 1802.0
+508.23904 8176.3
+509.24139 2248.7
+511.18085 4183.9
+512.18622 1205.1
+513.19733 17193.4
+514.20020 3864.3
+515.20294 748.4
+516.20978 1462.4
+520.27368 706.0
+521.26923 2049.0
+523.18286 1211.8
+528.77698 1591.6
+529.19202 12210.5
+529.28131 1338.2
+530.19562 2210.0
+532.54529 1905.1
+537.31323 799.2
+537.78369 50213.7
+538.23102 621.8
+538.28564 29837.1
+538.78638 8489.8
+539.28217 12681.8
+540.28497 2995.2
+543.29535 1197.5
+549.15063 704.7
+549.26477 1294.7
+561.30389 4945.9
+562.30719 1973.7
+573.27899 800.8
+577.28839 1729.1
+577.78485 960.4
+578.28760 999.1
+582.30371 2710.3
+585.23596 1377.5
+586.24030 774.4
+586.29053 2973.2
+586.78680 5502.0
+587.28766 3003.3
+587.78949 1072.2
+588.31488 1652.5
+589.22943 2269.8
+590.30042 956.5
+592.30652 1788.9
+593.31213 921.9
+595.29712 67450.7
+595.79883 36661.4
+596.30023 9632.8
+596.80219 3437.5
+600.31317 6602.6
+601.32013 2209.4
+603.24420 10646.9
+604.24768 3125.1
+605.23773 835.3
+607.32257 2038.7
+612.24158 907.6
+613.22510 1445.6
+614.22650 936.7
+618.32397 36353.4
+619.32825 13251.4
+620.33032 1894.2
+620.80475 1361.6
+621.30115 1354.2
+621.79694 851.5
+629.80811 9374.0
+630.25391 8488.4
+630.31079 7210.0
+630.81012 1762.6
+631.23566 12932.2
+632.23975 3748.8
+633.25024 901.0
+634.63586 1405.1
+634.79907 2698.3
+634.94336 872.4
+635.30017 763.1
+635.49896 1327.3
+635.80341 846.1
+636.33405 284680.8
+636.41272 743.6
+637.17401 1634.7
+637.33691 103847.7
+638.03748 1271.7
+638.33929 21214.7
+638.81268 60829.9
+639.31366 39651.6
+639.81537 13491.2
+640.24133 1095.8
+640.31812 3552.9
+643.80408 6502.7
+644.30670 4368.7
+644.80664 1518.6
+648.26563 17990.7
+649.26855 5791.9
+650.26489 1329.1
+651.29675 654.9
+658.24976 19849.1
+659.25287 7926.5
+660.25592 1380.4
+666.82227 1001.9
+676.26062 32089.8
+676.64728 1431.4
+677.26349 10435.0
+678.26385 1827.4
+680.32141 881.0
+681.32544 742.0
+683.35309 1418.2
+684.81763 989.5
+685.31952 769.3
+687.33221 1097.0
+687.82318 5891.5
+688.32300 4327.0
+688.82178 1763.3
+689.32666 821.3
+689.82910 822.2
+690.36639 893.3
+693.32922 7003.4
+693.82324 13326.2
+694.32288 7037.2
+694.82391 2780.9
+696.33478 3264.2
+696.83521 2409.7
+698.33374 2066.5
+698.83325 3149.7
+702.33582 1957.1
+728.40967 2873.2
+729.40967 1239.9
+746.41882 28168.7
+747.42310 11056.7
+748.42896 2221.7
+752.33075 634.9
+756.51752 671.4
+764.42932 113688.1
+765.43219 46379.8
+766.43475 11039.9
+766.67596 671.7
+767.44061 2095.2
+783.40216 3872.8
+783.84088 765.6
+784.40503 1772.3
+786.34180 3144.5
+787.35754 827.3
+795.53833 973.6
+798.37085 1009.7
+804.35742 7037.1
+805.02435 1015.3
+805.35876 5200.3
+805.69928 951.8
+811.03003 2477.3
+811.36292 2630.4
+811.69305 2102.0
+844.48352 762.4
+871.43652 1871.2
+875.47437 3063.5
+876.48187 1391.7
+885.41034 1894.3
+886.40948 862.6
+893.48828 15324.0
+894.48895 7999.7
+895.49396 2464.4
+900.66541 799.1
+901.41003 2901.8
+902.40137 1018.6
+911.49701 138797.1
+912.49988 69330.9
+912.70038 836.9
+912.94116 793.8
+913.50317 22019.3
+914.50598 3958.1
+928.45203 1196.5
+929.45056 1033.9
+946.46539 1783.6
+947.46686 1057.6
+948.50616 609.2
+974.45972 731.3
+974.95776 1046.0
+986.45459 1511.7
+987.48193 899.6
+1030.46826 2378.5
+1031.45850 1174.6
+1043.48621 869.5
+1048.47632 16613.7
+1049.47949 9134.1
+1050.48059 2876.4
+1056.55054 4331.6
+1057.55920 2409.3
+1061.49109 2222.8
+1062.49292 950.2
+1065.50330 7911.4
+1066.50818 3394.2
+1067.50842 1262.6
+1073.48218 1045.8
+1074.56055 47353.2
+1075.56396 29074.2
+1076.56641 9251.6
+1077.56445 2137.6
+1117.49780 1766.3
+1118.49854 1853.5
+1131.51965 856.5
+1135.50745 8935.5
+1136.51160 5058.1
+1137.51392 896.8
+1142.51404 1625.9
+1160.52393 665.6
+1171.57886 5319.2
+1172.57581 4003.2
+1173.57422 1271.9
+1189.58691 33126.3
+1190.59082 21351.7
+1191.59265 9031.0
+1192.59607 1743.8
+1198.22192 3222.3
+1200.53088 1539.8
+1201.53210 1103.6
+1202.87415 734.3
+1218.54602 3725.5
+1219.54297 3278.4
+1220.55164 1022.8
+1236.55603 12489.9
+1237.55823 8321.1
+1238.55505 2705.3
+1241.59106 1831.3
+1242.59473 1669.8
+1257.56458 954.8
+1258.62598 993.5
+1259.62268 1179.6
+1275.56604 3168.7
+1276.62817 5561.0
+1277.62720 5421.9
+1278.63696 1595.7
+1293.57788 10366.9
+1294.57874 7479.4
+1295.58301 3510.7
+1311.58716 11330.5
+1312.58899 7793.1
+1313.59692 3004.8
+1351.00256 653.2
+1720.46057 608.5
+1870.16492 895.9
+1879.55432 19762.6
+1879.83203 1902.5
+1880.04871 860.2
+1881.48572 776.2
+1904.02087 726.8
+1907.07825 7300.3
+1910.55750 687.7
+1930.61084 1207.3
+S	1642	1642	721.8838246
+Z	3	2162.376
+Z	2	1441.92
+188.24983 1040.9
+188.26266 1347.4
+188.27596 1830.9
+188.28795 1753.0
+188.30426 1610.1
+188.31152 1881.3
+188.33476 934.0
+188.39368 539.0
+189.41273 684.3
+198.89073 711.2
+199.16521 1254.8
+199.22356 723.3
+199.26286 3148.0
+199.30559 607.6
+199.36168 1083.6
+205.37115 576.4
+206.12309 761.1
+209.53378 601.3
+216.06558 1255.2
+217.13406 1796.2
+221.82814 601.4
+223.10785 3881.4
+224.11069 584.3
+231.14944 1629.9
+233.09244 2326.1
+238.12184 684.0
+245.12860 1313.8
+248.92659 637.0
+251.10271 14883.2
+252.10641 911.4
+262.15454 1734.7
+272.85468 605.5
+276.17084 4170.4
+279.09863 1364.1
+281.90659 555.7
+283.14413 14602.9
+284.14786 2485.3
+287.17258 907.5
+293.11032 958.1
+299.13898 1126.7
+302.11420 733.3
+303.09869 1134.6
+305.18198 10855.4
+306.18710 1559.0
+311.13940 4373.3
+312.99713 642.9
+314.15097 1289.4
+320.12463 2171.6
+321.10843 2213.5
+321.15512 1233.2
+325.15543 1298.6
+325.71677 619.8
+330.10764 1922.5
+331.09128 1853.7
+332.16074 2220.2
+334.16809 626.7
+338.13599 794.0
+338.18335 1168.8
+338.24225 599.9
+339.16635 9251.1
+340.17032 1116.7
+341.14984 2830.9
+348.11905 35941.1
+349.12253 5446.0
+350.27701 639.1
+353.14999 2945.0
+355.21359 1148.9
+356.19342 1539.7
+357.17801 1807.3
+366.12964 44087.1
+367.13324 7806.6
+368.13623 1072.1
+369.14499 3419.7
+370.14886 813.5
+373.22256 1939.2
+374.20303 4805.7
+378.80508 730.8
+380.15952 1529.8
+381.14545 2312.8
+382.71832 2152.8
+383.21768 655.5
+390.25174 988.5
+392.21387 22983.0
+393.21707 3257.8
+397.18649 1876.1
+398.17230 1739.9
+401.18610 3380.8
+402.19034 996.0
+408.15753 727.6
+415.19717 5471.5
+416.20370 759.9
+424.16791 828.0
+426.16614 5192.0
+427.16769 971.9
+429.18079 4830.4
+430.18549 1286.8
+433.20789 3611.8
+434.20947 960.0
+439.23315 1409.9
+442.24432 1057.6
+449.18213 2427.5
+450.16614 2649.2
+451.17010 933.6
+454.15656 697.8
+454.20892 2220.3
+455.21078 908.2
+456.25223 4272.4
+456.75369 1909.2
+460.25650 2672.0
+466.16019 2083.4
+467.19162 7291.2
+468.17612 12739.9
+469.17877 3269.1
+472.21970 2309.5
+473.22379 844.2
+473.43567 756.5
+474.20209 3970.5
+475.20453 974.3
+477.17740 1736.2
+483.18762 3563.5
+484.17099 9930.6
+485.20151 7150.7
+486.20407 1581.7
+490.22742 3326.5
+491.22855 1148.6
+494.15631 802.4
+495.18680 9981.4
+496.19141 1652.6
+497.18805 793.5
+501.19739 36421.3
+502.20093 8194.9
+503.20520 940.9
+503.26331 702.2
+508.23935 9661.4
+509.24350 2971.3
+511.18179 4501.0
+512.18726 1235.2
+513.19757 18323.2
+514.20135 5043.0
+516.21088 1562.3
+521.27307 1611.0
+523.18024 1504.2
+528.78119 1817.6
+529.19257 10986.2
+529.27991 1241.1
+530.19537 2617.6
+531.71637 627.0
+532.52130 1798.6
+537.78375 53957.3
+538.28528 31727.2
+538.78680 9446.5
+539.28217 12322.0
+540.28558 3447.8
+543.28986 1577.3
+549.26324 1219.1
+561.23358 1231.7
+561.30206 6408.5
+562.30383 1635.1
+566.21887 606.2
+577.28619 1372.0
+577.78705 1159.2
+578.29163 1107.9
+582.30444 2652.6
+583.31128 733.9
+585.23224 1368.3
+586.29224 5600.7
+586.78522 6130.0
+587.28564 2868.7
+588.31311 1176.1
+589.22833 2108.5
+590.29199 1335.2
+592.30969 1484.1
+595.20001 618.6
+595.22498 889.1
+595.29724 70077.6
+595.79871 41023.0
+596.30017 12297.7
+596.80157 3391.8
+600.31317 6883.5
+601.31989 1928.9
+603.24426 11365.3
+604.24817 3300.6
+607.32208 1852.4
+612.24744 1342.6
+613.22461 1935.9
+617.22491 697.2
+618.32410 38024.7
+619.32776 13242.8
+620.33197 2647.3
+620.80383 1523.2
+621.30225 2449.7
+629.80829 10531.0
+630.25500 8308.3
+630.30975 6884.3
+630.80896 2459.1
+631.23547 11419.5
+632.23999 4629.3
+633.24170 1025.5
+634.63574 1046.7
+634.79907 2424.6
+635.30078 1133.5
+635.50281 881.2
+636.33417 304236.8
+637.17194 1797.1
+637.33691 105348.0
+638.04205 1792.5
+638.17291 793.4
+638.33972 21716.2
+638.81281 62029.9
+639.31366 41789.2
+639.81616 14826.9
+640.24127 1796.0
+640.31750 3338.8
+643.80591 7000.0
+644.30688 4867.6
+644.80823 1087.2
+648.26563 20013.8
+649.26868 6861.1
+650.27094 1050.1
+651.28503 965.2
+655.79688 733.7
+658.24957 20383.9
+659.25342 6934.4
+660.25708 1646.1
+666.83276 894.9
+667.32190 731.5
+676.26068 32582.9
+676.64520 1044.8
+677.26355 12123.1
+678.27075 2015.9
+683.35437 1546.7
+684.34991 928.8
+684.81866 1406.9
+685.32233 990.3
+687.32739 1952.6
+687.82111 5340.1
+688.32257 4713.7
+688.82129 1507.9
+689.32532 1267.6
+691.33856 762.6
+693.32959 7387.7
+693.82379 14939.8
+694.32306 9714.4
+694.82574 3540.2
+695.32367 1015.4
+696.33453 3199.9
+696.83667 2265.1
+697.33295 1692.3
+697.82666 787.3
+698.33142 3550.9
+698.83130 2131.6
+702.33405 5745.5
+702.83069 1899.4
+728.40790 2866.0
+729.41058 1361.9
+746.41876 29052.6
+747.42334 10145.7
+748.42676 2225.8
+764.42950 121726.1
+765.43195 48079.5
+766.43488 11756.5
+767.43555 2463.1
+770.38672 2019.5
+771.39941 863.9
+783.40198 4202.0
+784.40454 1802.9
+786.34467 3494.6
+787.35120 1382.0
+795.55267 1031.2
+798.37628 1679.5
+804.35413 6400.6
+805.02448 1201.4
+805.35919 6838.8
+805.68982 1254.6
+806.36633 883.0
+811.02917 3580.4
+811.36249 3923.4
+811.69519 2206.7
+812.36688 907.2
+815.41449 813.7
+861.38483 1082.9
+867.50995 689.4
+871.44250 1182.2
+872.44080 828.5
+874.92560 635.0
+875.47284 2804.4
+876.47760 1185.1
+885.41437 1783.3
+886.42456 1282.0
+893.48761 15439.8
+894.48840 7155.8
+895.49548 2037.0
+901.40625 2350.9
+903.46637 959.9
+911.39972 975.3
+911.49719 144172.5
+912.49994 72561.3
+913.50336 21272.2
+914.41510 1002.2
+914.50757 4171.9
+915.50574 1045.1
+928.45667 1215.1
+946.46539 1762.6
+947.46674 990.6
+986.46698 973.8
+1001.35028 663.7
+1020.46277 701.2
+1030.46863 2779.0
+1031.46777 1483.9
+1036.05530 729.7
+1038.54541 833.5
+1043.48535 1546.6
+1048.47742 16070.6
+1049.47998 7323.5
+1050.48425 2627.3
+1054.11743 693.3
+1056.55420 4817.6
+1057.24133 890.8
+1057.55408 2530.8
+1058.56885 1062.7
+1061.49304 1455.7
+1062.49109 1247.4
+1065.50281 7484.0
+1066.50269 4392.7
+1067.51172 1070.7
+1074.56006 47400.9
+1075.56433 27646.2
+1076.56689 9863.9
+1077.56555 1394.0
+1117.49719 2632.1
+1118.50000 1274.4
+1135.50647 9946.6
+1136.50989 4108.8
+1137.51270 1670.4
+1142.51221 1507.7
+1143.50659 929.1
+1148.52991 915.1
+1153.59082 893.6
+1171.57751 5535.2
+1172.57751 3751.2
+1173.57922 2307.0
+1182.51001 802.9
+1189.58691 32706.9
+1190.59058 22904.4
+1191.59460 8154.7
+1192.59521 2397.2
+1198.16003 3348.3
+1200.53784 1585.5
+1201.52905 973.2
+1218.54675 4824.2
+1219.55200 3125.2
+1220.54260 1267.1
+1223.60364 801.7
+1236.55481 11804.5
+1237.55762 8029.9
+1238.56140 2213.9
+1241.58386 2487.5
+1242.59131 1395.6
+1258.63184 1226.0
+1259.60986 1003.4
+1268.58313 1253.5
+1269.59692 898.1
+1275.57031 3021.3
+1276.49109 907.8
+1276.63196 5236.1
+1277.62903 4052.3
+1278.62976 1534.8
+1286.60144 1107.2
+1287.62366 906.5
+1293.57556 10601.2
+1294.58057 7105.2
+1295.58508 2251.8
+1311.58850 9209.2
+1312.58679 6251.2
+1313.59277 2705.6
+1378.78821 588.3
+1489.61475 798.0
+1630.57422 669.1
+1732.56042 799.8
+1870.13501 970.5
+1878.04004 1204.5
+1878.88074 795.1
+1879.11475 2819.7
+1879.52295 18255.1
+1879.92920 3148.5
+1880.72156 1026.5
+1883.47668 666.3
+1907.03857 7103.5
+S	1643	1643	829.9728246
+Z	2	1657.93
+249.81123 545.1
+250.16446 578.5
+263.95267 619.8
+264.02551 617.9
+271.80530 923.1
+272.17145 3863.3
+277.08945 620.4
+277.31137 626.5
+279.04214 553.7
+279.60370 583.1
+286.34753 638.3
+291.11459 556.9
+308.88773 812.9
+310.00485 604.8
+329.03299 616.5
+329.10614 666.6
+333.09436 584.8
+356.40515 767.3
+373.49106 577.8
+381.34537 736.2
+385.25375 998.1
+389.74832 602.4
+402.12653 649.5
+417.01813 595.3
+427.52240 678.9
+471.00967 754.3
+475.29739 5646.4
+476.30356 715.2
+486.30276 2393.9
+487.30249 877.1
+496.27307 947.5
+511.24780 966.4
+512.38593 617.4
+523.28705 944.3
+526.24933 686.3
+532.51904 1794.3
+541.29828 1130.1
+556.47168 675.8
+559.30383 689.0
+582.28650 1015.5
+585.36664 868.9
+604.33887 6634.3
+605.33966 1928.4
+624.33160 873.2
+641.34082 2161.2
+641.84778 742.6
+642.34198 861.8
+649.85577 2834.3
+650.34729 6883.5
+650.84656 2614.4
+651.34845 918.5
+655.31348 834.6
+658.86060 3759.5
+659.36029 2171.5
+672.40057 1086.0
+676.64819 1210.6
+685.42914 742.0
+695.37091 2278.4
+703.40778 13299.9
+704.40918 3631.3
+707.36810 2292.4
+707.86926 1415.5
+711.32776 807.1
+712.38831 665.9
+713.38202 707.0
+716.37439 10114.9
+716.87518 6406.7
+717.37299 1766.2
+720.34009 727.9
+720.85077 2191.6
+721.34766 971.9
+727.64459 619.4
+729.42273 4069.4
+730.42224 1298.4
+731.09375 809.0
+734.95270 628.6
+772.91248 962.0
+778.40143 589.0
+790.28345 826.4
+795.54474 933.0
+800.46320 3322.0
+801.46875 988.6
+811.44330 765.0
+811.94415 1813.7
+816.49176 6835.1
+817.49493 1737.4
+911.40778 795.7
+927.52356 777.0
+928.43073 1206.1
+929.48810 1064.7
+937.01038 637.6
+937.49323 1060.4
+941.52032 623.2
+942.73254 577.4
+945.53510 12179.9
+946.53717 5752.0
+947.52985 1202.1
+955.50525 1494.9
+986.52448 4738.8
+987.52667 2433.6
+1016.57196 12296.4
+1017.57275 6423.0
+1018.57446 1646.3
+1019.58655 688.7
+1057.25549 843.6
+1057.55908 1248.4
+1114.58350 4599.6
+1115.58545 2934.9
+1116.58667 1135.4
+1117.61841 18440.0
+1118.62219 9424.5
+1119.62549 2798.6
+1144.15869 621.8
+1153.54260 1118.2
+1154.08093 891.0
+1170.65417 878.2
+1171.58362 1947.0
+1188.65503 7153.1
+1189.66052 4766.0
+1190.64502 870.3
+1198.15613 3532.3
+1227.65796 1071.2
+1254.57483 738.0
+1272.60645 1645.9
+1273.59155 798.0
+1316.70081 987.8
+1349.67029 1449.0
+1350.65503 1228.7
+1351.67468 855.8
+1367.67883 4267.0
+1368.66736 3550.9
+1369.66528 976.6
+1385.69019 7451.6
+1386.68958 3703.5
+1387.69250 1095.1
+1431.73816 2796.3
+1432.74268 1799.9
+1486.82385 563.7
+1489.70227 767.7
+1520.68420 630.7
+1655.24902 647.2
+1870.33069 770.0
+1877.88293 624.8
+1878.95642 1482.8
+1879.55518 19721.0
+1879.84595 2150.1
+1881.05798 832.5
+1882.41809 728.6
+1907.09216 7413.2
+S	1645	1645	1879.95399127
+Z	3	5636.587
+Z	2	3758.06
+532.56836 2126.5
+561.16547 606.0
+630.41925 848.6
+671.88770 603.6
+676.40454 789.0
+676.58948 1044.6
+756.27606 628.4
+763.35541 619.0
+797.69653 585.1
+829.89514 599.3
+841.06665 613.3
+918.79407 583.3
+965.98181 600.9
+999.33221 663.2
+1057.16211 1140.2
+1145.71191 575.1
+1175.67517 744.1
+1198.27039 3331.5
+1260.80908 658.4
+1268.47046 708.6
+1404.93469 685.0
+1429.38623 699.6
+1509.03589 635.8
+1531.71936 595.1
+1702.24939 888.7
+1879.38391 20796.7
+1906.91284 6480.2
+1930.09680 670.5
+1930.64172 1037.1
+1947.88257 700.0
+1994.27246 742.0
+S	1646	1646	1907.47040793
+Z	3	5719.136
+Z	2	3813.093
+532.57666 1670.3
+588.83130 577.7
+600.71710 536.7
+671.54437 664.3
+676.61322 950.2
+700.22491 557.9
+715.85913 793.6
+722.72772 731.9
+977.30725 625.4
+999.66772 778.9
+1022.45306 610.5
+1057.21741 1024.5
+1087.71216 820.2
+1198.28894 3331.9
+1223.26965 696.6
+1256.43884 647.1
+1330.22034 695.2
+1383.75452 600.4
+1432.88025 666.0
+1585.22058 550.6
+1718.56262 1211.9
+1735.71436 802.2
+1875.89941 761.1
+1878.96326 758.9
+1879.19788 1039.0
+1879.46985 20387.6
+1907.04431 6975.7
+1930.52612 947.1
+1931.92004 903.4
+S	1647	1647	450.719407933
+Z	2	899.591
+Z	3	1348.883
+110.10502 633.4
+112.87585 489.1
+114.22813 605.8
+115.54873 540.7
+121.06223 576.1
+121.79536 2261.2
+122.90200 557.6
+134.87010 560.9
+138.88737 678.4
+152.69618 535.9
+158.08960 599.9
+166.99205 611.5
+171.64085 677.3
+177.25661 543.7
+181.18089 546.6
+185.16547 962.9
+198.88322 763.9
+199.16739 977.5
+199.17987 13437.8
+199.18922 646.4
+199.26382 2847.5
+199.27666 598.6
+199.36195 1165.9
+200.18304 870.3
+208.61633 907.5
+210.68872 519.9
+214.51521 635.5
+215.85158 518.3
+227.17525 3978.0
+232.60970 526.4
+235.14368 25170.9
+236.14709 3519.3
+239.41615 605.5
+248.64565 639.1
+255.29228 706.4
+258.14972 1064.2
+262.14978 1895.9
+263.13867 5398.9
+265.15775 4010.8
+265.65952 1159.7
+275.17096 1730.9
+294.83051 643.2
+299.57300 988.6
+300.25143 597.1
+301.73837 609.4
+309.69974 684.7
+314.20618 1061.5
+314.69357 841.7
+328.20959 836.1
+329.19293 1959.4
+329.87915 563.9
+331.36090 564.7
+359.20322 18462.5
+360.20731 2426.4
+360.69843 1710.0
+366.21295 1489.4
+378.16476 7020.3
+378.73883 3109.3
+379.16898 1131.6
+379.24017 933.8
+380.21158 1011.1
+384.19974 1257.4
+384.75156 1162.4
+388.25385 1913.6
+388.35654 521.8
+395.26389 1313.6
+396.23560 7607.1
+396.73730 4697.8
+397.23816 1380.1
+398.20990 764.5
+398.27347 1009.9
+398.74881 3531.2
+399.24936 1421.3
+400.22855 1571.6
+401.22739 938.1
+403.24814 609.0
+409.95889 947.2
+410.23285 5459.2
+410.73526 1939.8
+416.22430 42131.6
+417.22672 7140.7
+422.75821 756.9
+426.22354 1132.5
+426.56277 853.4
+427.54233 588.0
+429.26294 10651.2
+429.76367 5679.5
+430.26395 2569.6
+435.14700 521.3
+435.20776 757.0
+463.25198 656.0
+466.77469 2819.2
+467.27966 1097.3
+476.77567 758.2
+481.28748 1024.8
+485.80457 14114.7
+486.30536 8614.4
+486.80640 2420.8
+487.32309 4371.6
+491.24927 899.9
+492.68832 644.1
+494.33145 1036.7
+494.38440 578.8
+495.28525 1905.1
+495.78973 1510.8
+499.31418 569.2
+502.30490 761.2
+507.92181 1589.3
+508.25473 1122.4
+509.52252 3537.4
+509.77243 3271.5
+510.02286 1516.3
+514.25452 611.2
+524.62280 937.0
+529.30780 18151.4
+530.31097 5945.7
+531.31561 1316.2
+532.57587 2392.0
+534.31110 2985.5
+534.81592 2501.4
+535.31262 1127.3
+542.47882 767.8
+543.31763 165913.0
+543.81909 114682.7
+543.98352 1188.4
+544.32043 37110.2
+544.65894 955.0
+544.82129 7495.6
+546.27496 11899.4
+546.61011 10437.2
+546.94489 2619.8
+547.29913 1459.8
+549.15393 682.5
+557.32874 1056.7
+559.26227 674.1
+573.33643 1438.2
+574.28436 2102.6
+578.31445 1028.1
+582.29224 8518.5
+582.79211 5210.1
+583.29315 1716.0
+583.81000 591.9
+586.38861 2361.6
+587.39545 817.5
+592.29547 3300.1
+604.31763 7371.0
+604.82971 638.7
+616.34454 725.0
+618.37457 728.4
+624.84888 31185.1
+625.35065 24707.1
+625.42694 1163.6
+625.85144 7770.0
+626.35144 2493.7
+628.37500 4380.3
+629.37769 1672.5
+630.39740 1020.3
+638.83313 4310.6
+639.33679 2635.9
+639.83868 818.0
+655.41278 1583.1
+670.40717 1740.6
+673.42218 73055.7
+674.42554 23238.1
+675.42883 2153.7
+676.66431 933.4
+705.85992 1530.8
+717.40210 5256.2
+720.39130 5488.0
+721.39545 2790.2
+731.85199 862.7
+759.40668 1096.1
+768.49396 1095.0
+781.93909 699.4
+783.20111 719.6
+786.51099 770.1
+795.52942 1008.4
+796.49097 2228.3
+797.49066 1011.9
+801.44745 952.6
+819.45917 13112.7
+820.46094 6053.4
+821.46161 1700.2
+830.04089 539.7
+858.03943 758.9
+876.47144 653.6
+901.72852 620.3
+932.54059 1429.4
+982.06030 598.8
+990.50336 604.8
+1013.70251 631.8
+1057.28748 1006.0
+1123.73560 660.8
+1198.28687 3514.1
+1224.33923 605.3
+1366.34290 586.2
+1434.38489 585.1
+1525.39868 783.1
+1649.30530 509.3
+1677.46069 645.9
+1719.69507 1026.4
+S	1649	1649	1907.47299127
+Z	3	5719.144
+Z	2	3813.098
+532.51727 954.1
+532.54651 1752.6
+676.66821 1265.1
+725.36664 635.8
+795.52985 912.8
+839.56970 576.9
+1198.09387 832.4
+1198.22998 3045.8
+1599.84436 718.4
+1610.01135 613.7
+1719.15430 1165.1
+1833.31555 591.9
+1879.27588 1431.3
+1879.62402 19668.2
+1879.95386 1507.2
+1905.47839 736.2
+1907.05383 7134.9
+1930.57080 1100.2
+1996.25073 589.8
+S	1650	1650	1198.6978246
+Z	2	2395.548
+Z	3	3592.818
+317.52484 557.0
+323.86661 598.7
+347.20068 690.8
+350.29538 758.0
+386.11392 584.0
+394.93784 592.0
+532.51752 1836.3
+549.09277 647.5
+584.40613 613.8
+602.69501 627.7
+603.20557 712.5
+795.54785 1012.5
+831.84863 643.9
+943.73987 629.6
+1019.70093 779.5
+1106.00305 702.1
+1198.15442 3322.8
+1202.35742 689.3
+1226.46558 572.5
+1406.68542 597.5
+1630.38599 790.0
+1679.50708 735.5
+1718.45471 1499.1
+1872.05688 637.5
+1877.23743 938.6
+1879.03992 1599.9
+1879.57056 18309.1
+1880.60010 795.4
+1907.11206 7826.2
+1930.53821 965.5
+S	1651	1651	532.991407933
+Z	2	1064.135
+Z	3	1595.699
+153.09332 645.3
+154.90993 586.6
+160.28650 558.4
+165.77507 682.3
+169.49382 546.4
+172.97914 623.2
+173.05746 617.4
+183.49243 489.5
+188.25731 548.2
+188.26270 790.8
+188.27126 719.3
+188.27812 1004.7
+188.28856 1294.2
+188.30028 849.3
+188.31320 635.6
+188.32103 479.2
+188.35376 695.0
+198.88599 826.1
+199.13844 668.5
+199.17873 945.9
+199.20470 619.5
+199.23431 726.9
+199.25642 1967.8
+199.26521 2151.6
+199.27678 1388.5
+199.31073 696.9
+199.35391 627.2
+199.36316 1077.5
+212.27046 532.7
+214.51642 581.5
+233.57333 743.9
+288.07202 633.7
+308.90253 855.6
+342.27292 585.7
+350.28897 583.3
+376.47598 538.2
+432.99121 563.7
+442.27560 9427.4
+443.27902 4935.5
+444.27997 694.9
+465.18582 771.7
+480.56534 1015.1
+480.89819 1061.7
+481.23218 763.6
+482.66248 731.9
+486.20105 669.3
+504.21069 1888.1
+505.20865 1541.2
+514.28186 985.2
+532.52032 1932.8
+537.87616 718.7
+555.36011 3323.5
+556.36279 3072.7
+582.29443 2168.0
+599.28333 723.2
+600.28418 767.7
+600.81952 792.3
+601.06586 756.5
+617.29523 3820.6
+618.29602 4582.0
+619.29053 1226.2
+623.81042 607.4
+631.54388 711.8
+632.34235 1787.7
+636.99017 1233.3
+638.82831 982.5
+639.33606 795.5
+660.39203 628.6
+676.66260 1095.4
+680.35858 1128.1
+694.45654 531.6
+733.41956 703.1
+795.54248 1107.0
+817.46594 845.8
+847.17505 567.1
+858.05408 687.7
+862.46594 574.2
+889.46252 2307.8
+898.00696 572.9
+1079.23315 670.2
+1151.41504 649.9
+1198.16003 3619.8
+1204.61841 702.7
+1267.87146 650.9
+1309.43848 658.1
+1488.91284 609.2
+1625.63000 636.1
+1717.60107 1701.2
+1877.74280 547.4
+1878.26355 1179.8
+1878.78088 2698.4
+1879.26990 1734.9
+1879.62830 18974.9
+1880.17615 1983.4
+1880.45410 2453.7
+1880.96997 1416.5
+1907.06506 7405.5
+1930.60974 708.8
+1993.09912 545.0
+S	1653	1653	636.3456896
+Z	4	2541.35146
+173.75671 602.4
+188.20831 600.3
+188.26900 1633.3
+188.28592 2027.1
+188.30452 1665.0
+188.32816 1105.6
+194.03952 699.4
+196.24338 531.7
+197.29922 611.0
+199.15408 617.8
+199.20316 602.0
+199.22160 663.9
+199.24841 2015.1
+199.27425 1734.8
+199.30399 875.9
+199.33913 882.9
+199.37190 868.5
+204.38072 613.4
+232.11163 1451.1
+236.76541 548.0
+240.90660 533.1
+249.09804 1140.8
+254.16139 792.2
+255.14532 1868.2
+257.09457 1061.1
+263.34378 688.5
+270.08301 663.9
+272.17148 7711.2
+273.17554 1017.6
+274.12195 2005.7
+280.18600 639.3
+280.88425 523.0
+305.18152 1616.5
+313.67545 1916.8
+320.91412 624.3
+322.68082 5013.9
+323.18179 1682.2
+332.16125 1043.2
+339.16498 1628.1
+341.14670 730.5
+349.23355 1556.0
+352.40295 581.8
+353.76395 597.2
+373.19086 1419.5
+379.22223 8462.5
+379.72385 3757.1
+385.25531 20287.7
+386.25851 4130.6
+387.27316 2512.3
+391.55945 751.7
+392.21338 3598.5
+397.18491 1142.9
+400.64435 647.4
+415.19751 1999.9
+416.20166 689.4
+428.72903 43369.9
+429.23056 23124.0
+429.73178 5142.1
+430.23499 806.5
+433.20560 813.3
+454.21146 1108.1
+457.79199 626.5
+472.21921 1168.8
+482.65680 667.1
+484.32321 52614.1
+485.32657 16693.0
+486.32919 2992.5
+488.25537 2134.9
+488.75354 1056.9
+490.22757 730.3
+497.25894 1788.7
+497.76215 1693.4
+500.28253 660.7
+507.77441 1759.9
+508.24210 1805.1
+508.27585 2008.3
+508.77725 910.0
+508.87357 588.9
+516.31305 4685.0
+517.31677 1595.3
+521.77106 2419.5
+522.27374 1972.4
+522.77655 1067.1
+526.60687 641.5
+532.51404 1443.8
+539.28143 1353.1
+541.15411 616.3
+552.77509 5005.1
+553.27661 2078.1
+553.34552 785.9
+553.63019 2174.3
+553.77612 1673.5
+553.96820 1092.4
+558.28571 673.2
+561.77917 5132.1
+562.28119 2873.4
+562.63013 2079.1
+562.78381 1288.0
+562.96686 2014.3
+563.30225 1600.2
+569.97791 1043.7
+579.30994 1073.5
+580.26721 613.2
+586.64246 944.3
+589.20288 659.4
+589.96149 1446.8
+590.29138 1027.2
+595.24554 634.9
+595.32324 1492.4
+595.57330 2527.3
+595.63611 3236.9
+595.82263 2484.3
+595.96997 4542.2
+596.07324 1493.3
+596.30316 2537.2
+600.30933 1233.7
+613.63318 699.3
+617.29468 2810.2
+617.79956 3372.2
+618.32458 9710.0
+618.66016 908.6
+618.98187 674.2
+619.32678 3085.4
+630.41510 1007.5
+636.58063 699.5
+644.35327 2345.2
+644.68317 614.8
+645.35907 1062.1
+646.77399 610.5
+648.00287 761.8
+663.35223 1093.8
+668.35449 597.7
+671.26147 620.5
+676.74701 706.4
+681.33466 2142.9
+681.66956 1336.6
+682.00226 796.6
+686.67426 4347.0
+687.00867 6823.2
+687.34229 4401.3
+687.67517 3407.9
+688.01221 1138.8
+690.03094 926.3
+695.36945 1121.7
+695.84985 824.7
+697.15289 705.3
+702.37628 8314.7
+703.37885 3221.2
+710.69672 1193.8
+713.36938 1136.5
+715.36987 871.2
+719.36426 1529.6
+719.69586 4795.9
+720.03082 5395.7
+720.36383 3318.5
+720.69843 3680.6
+721.03888 951.2
+747.36780 1144.6
+748.36810 1049.6
+751.87921 763.8
+752.38110 1444.5
+752.87720 813.6
+753.86658 696.2
+754.36719 1281.9
+754.86334 1005.4
+755.35718 907.5
+756.40332 992.8
+756.86157 804.3
+757.43762 30750.9
+757.72321 1627.5
+758.06091 2934.9
+758.43951 16089.9
+758.72137 738.9
+759.40210 13943.7
+760.40192 6258.9
+761.40204 2886.3
+761.73706 1124.0
+762.06415 802.5
+762.88373 839.3
+763.38599 852.4
+776.41888 750.2
+788.90704 3664.1
+789.40875 3392.0
+789.91357 2174.1
+790.40692 1546.2
+793.42810 1964.4
+793.75885 3509.7
+794.09406 2374.9
+794.41418 3102.3
+795.56232 923.0
+810.91431 1964.1
+811.41858 4857.8
+811.92133 4975.3
+812.42297 3223.2
+812.92126 1759.2
+819.42181 890.2
+819.91632 2843.7
+820.41803 1374.8
+825.41644 20903.5
+825.91803 26350.2
+826.41943 13957.3
+826.92096 6488.3
+827.41962 2436.8
+829.44501 4108.6
+829.94830 5243.7
+830.16528 662.3
+830.44983 2949.7
+830.95300 2141.4
+834.94232 853.3
+836.91003 885.8
+837.91547 683.2
+843.44366 16207.1
+843.94550 17731.4
+844.44568 11229.5
+844.94720 5874.6
+845.44916 2973.3
+845.96503 673.9
+856.45068 32420.0
+857.45441 19462.0
+858.06714 710.4
+858.45514 6707.3
+859.45825 1652.1
+867.96295 3792.4
+868.46130 5271.2
+868.96332 3358.9
+875.45026 764.7
+881.95868 10894.9
+882.45953 13970.8
+882.96057 8170.8
+883.46423 2672.4
+883.96545 1784.0
+884.43701 13141.7
+884.93872 18561.3
+885.43933 12137.3
+885.94391 4959.1
+886.44238 1460.4
+892.95062 14158.4
+893.45154 20820.6
+893.95410 14657.8
+894.45398 5707.3
+894.95483 1592.8
+901.45453 989.4
+907.45605 769.6
+911.92212 654.0
+912.42609 923.2
+929.45087 3175.9
+930.45410 2067.8
+931.45905 841.0
+936.00299 887.4
+940.48700 2703.5
+940.98859 3880.7
+941.48761 3715.8
+941.99225 1130.3
+947.98016 1314.8
+948.48114 1397.0
+948.97858 1417.8
+949.49353 6066.2
+949.99347 9325.0
+950.49731 5463.8
+950.99811 2188.4
+961.97528 3715.5
+962.47369 5336.3
+962.97467 4106.5
+963.48230 1556.9
+963.97302 790.1
+993.51190 3131.1
+994.51758 2169.2
+995.51642 907.9
+1011.52515 753.5
+1012.51031 935.4
+1025.51807 741.8
+1042.53662 3263.9
+1043.53516 2678.7
+1079.52185 630.8
+1099.49426 727.9
+1122.55151 992.5
+1123.56531 1121.0
+1198.14441 3478.8
+1219.99597 636.6
+1233.57520 790.5
+1415.72595 1174.6
+1416.72571 766.6
+1574.95313 713.6
+1588.65112 631.8
+1621.69104 662.5
+1716.21265 701.5
+1750.42920 848.5
+1874.51025 582.6
+1878.74536 702.1
+1879.05945 2089.5
+1879.50305 9392.8
+1879.68677 15260.9
+1880.55176 1529.5
+1880.90686 1308.8
+1906.74036 1169.1
+1907.06311 7187.6
+1930.63013 1201.0
+1966.44360 731.5
+S	1654	1654	509.2780226
+Z	5	2541.35099
+133.68839 64038.0
+141.18547 49857.6
+142.84479 45330.8
+188.20784 67274.0
+188.25089 101489.2
+188.27592 160696.3
+188.28667 178418.9
+188.29813 197342.3
+188.31892 110452.0
+191.52211 48073.4
+198.88762 66063.0
+199.17491 107303.0
+199.24385 69839.0
+199.25398 87444.3
+199.26251 93281.9
+199.27338 206215.0
+199.35979 54081.1
+226.87894 62306.0
+239.47932 57207.1
+246.21635 51777.6
+271.82721 57138.5
+288.20242 66965.1
+301.99683 63244.3
+308.89355 73363.8
+342.09485 55711.0
+342.14307 50909.1
+376.17484 49038.4
+387.26901 80834.5
+388.17749 50163.3
+388.55295 58753.3
+410.83307 53368.5
+416.00519 55809.4
+421.61807 49922.1
+467.23096 60917.9
+473.23422 168208.5
+473.56686 72286.4
+491.87741 45671.2
+523.50061 44931.7
+532.52570 189086.4
+540.27179 55553.6
+540.77441 52997.9
+549.74780 62619.6
+571.04694 121136.8
+571.29980 110672.3
+571.54999 52731.4
+575.95911 54333.1
+616.55267 51628.6
+630.39795 75326.6
+676.66620 93027.6
+719.01984 106317.8
+719.69446 145630.3
+720.02917 118876.3
+720.37152 101681.8
+731.11139 86815.1
+762.55804 51479.3
+784.00134 45428.3
+795.55011 77811.5
+935.82452 62300.4
+1057.26855 58999.7
+1134.22083 48549.4
+1147.41833 51277.3
+1198.17468 287754.3
+1299.62708 62288.1
+1332.15686 47167.6
+1360.86243 48825.5
+1525.40308 54786.8
+1528.23413 54307.7
+1601.97949 48721.1
+1771.69385 54240.1
+1859.99438 55168.0
+1877.70105 76368.7
+1878.81128 110290.2
+1879.10693 127068.7
+1879.60608 1488632.1
+1880.12537 168205.4
+1880.64478 95364.0
+1881.47937 56697.5
+1882.68994 56078.0
+1882.79114 57105.8
+1906.56470 45311.3
+1906.93018 586044.4
+1907.38342 67266.7
+1930.56030 79468.4
+S	1655	1655	637.0985746
+Z	4	2544.363
+188.27077 1032.3
+188.28500 991.0
+188.28986 1093.7
+188.30348 1104.3
+188.31258 683.5
+199.18111 981.9
+199.22162 664.5
+199.24792 1454.5
+199.26736 2128.3
+199.27924 1027.3
+199.29524 787.6
+201.42368 606.9
+213.35381 765.1
+225.93588 615.5
+231.98929 563.7
+232.11147 2624.1
+249.09760 856.4
+252.09816 712.7
+255.14520 1653.6
+257.09592 1295.2
+266.15695 607.6
+272.17142 9571.2
+273.17520 788.1
+274.12247 2794.9
+276.48083 602.3
+292.30997 697.7
+305.18207 1274.3
+308.87195 773.8
+313.67490 1137.1
+320.36026 552.3
+322.68079 4630.7
+323.18292 1587.1
+332.60794 507.6
+339.16690 909.0
+341.67987 549.6
+349.23535 760.1
+350.24777 650.2
+357.17081 748.4
+369.68549 669.0
+373.18970 1686.2
+374.20526 1096.4
+376.71143 565.4
+379.22220 9886.7
+379.72400 3161.9
+381.34348 600.7
+385.25531 20154.9
+386.25858 3521.0
+387.27097 2787.6
+389.69247 517.8
+392.21375 2674.9
+413.58041 565.7
+415.19662 898.4
+427.53290 663.8
+428.72903 42906.6
+429.23068 19874.3
+429.73172 4837.7
+454.20724 1133.0
+472.21964 1266.3
+484.32324 57386.1
+485.32666 14105.3
+486.32910 2935.4
+488.75153 1685.3
+490.23306 840.8
+497.25809 2172.6
+500.28241 751.9
+507.77368 2768.5
+508.23859 1448.0
+508.27390 1439.3
+516.31232 5308.8
+517.31158 945.4
+521.77185 2256.8
+522.27161 1509.8
+526.27582 751.2
+526.60638 1330.8
+532.53308 2006.9
+549.10114 607.9
+550.95026 757.9
+552.77405 4523.5
+553.27661 2270.0
+553.63544 1901.8
+553.77570 770.5
+557.94238 732.1
+561.77948 6518.1
+562.28107 3004.8
+562.63141 3486.1
+562.78210 900.6
+562.96552 2122.7
+571.05676 771.7
+571.54456 834.7
+571.79700 669.0
+573.63043 964.4
+582.28760 687.6
+584.65039 694.2
+587.75574 773.7
+589.96198 799.2
+590.29358 1861.4
+595.32202 2146.8
+595.57086 4003.5
+595.63593 7582.4
+595.82233 1973.7
+595.97119 4460.5
+596.07269 1210.6
+596.30011 2040.5
+598.23737 673.1
+600.31531 1287.8
+601.78973 741.3
+602.66760 556.7
+612.33417 622.3
+613.99237 1171.4
+614.32922 1190.1
+617.29425 3790.7
+617.79883 2063.9
+618.32428 7127.6
+618.65820 2374.2
+618.99188 1833.6
+619.32910 1050.3
+620.37311 686.7
+621.64404 754.4
+644.35529 2087.4
+645.35126 1033.2
+663.34412 1123.5
+676.65314 1338.1
+678.01556 1043.1
+680.67700 837.6
+680.99921 1588.2
+681.33405 1656.5
+681.66693 1257.2
+686.67468 7574.0
+687.00824 8465.4
+687.34180 5425.9
+687.67487 2801.9
+688.00775 902.2
+690.02911 827.3
+695.83057 859.6
+702.37787 6780.9
+703.38049 2773.2
+704.85437 1000.1
+710.40070 846.0
+710.70093 1506.7
+713.36951 1345.8
+713.86841 1125.9
+719.02771 1354.2
+719.35498 1201.2
+719.69556 6405.4
+720.03088 7236.2
+720.36688 4731.7
+720.69568 2028.1
+742.74292 715.3
+747.37567 1112.2
+747.87836 902.4
+752.38300 2089.6
+754.36456 836.2
+754.86676 1338.5
+757.43658 32048.9
+757.72485 2120.2
+758.05920 2019.6
+758.43988 14335.3
+759.40009 13579.1
+760.40076 5673.0
+761.06091 1050.3
+761.40271 2633.4
+761.72858 1799.6
+762.41010 1485.0
+769.37891 933.7
+773.03436 950.8
+776.44104 826.6
+784.90686 886.2
+788.90839 3071.7
+789.41382 2222.1
+789.90497 2321.7
+790.41235 1736.7
+793.42706 2502.3
+793.75946 3482.6
+794.09570 2431.8
+794.42065 2635.9
+795.39728 936.7
+795.53961 1133.7
+796.75146 948.3
+797.08466 830.3
+803.56812 764.0
+808.43182 669.8
+810.39801 743.8
+810.91278 1738.8
+811.41626 4684.9
+811.92004 4757.4
+812.42542 2295.5
+816.91772 1137.3
+819.91998 1553.3
+820.41919 1307.0
+825.41614 19631.5
+825.91809 22487.1
+826.42004 12835.6
+826.92120 6262.4
+827.42517 1576.1
+829.44592 4817.0
+829.94757 6390.4
+830.45074 2666.7
+834.93854 1121.0
+835.45178 795.1
+836.91119 712.6
+839.45270 712.3
+843.44373 17719.4
+843.94476 20254.3
+844.44629 12085.8
+844.94794 4663.4
+845.45544 837.2
+849.48486 709.8
+856.45056 33016.8
+857.45428 15495.4
+858.45764 4774.9
+859.45087 1380.4
+867.96234 4809.9
+868.46362 4381.1
+868.96631 3038.5
+881.95850 10344.2
+882.45959 12018.9
+882.96106 6421.1
+883.46185 3115.0
+884.43701 17971.1
+884.93878 18127.9
+885.43988 11896.7
+885.94073 4057.2
+886.43817 1300.3
+886.96326 602.1
+890.44958 727.0
+892.95001 18339.3
+893.45160 21882.6
+893.95355 12986.7
+894.45477 4792.6
+894.94904 1175.7
+912.42474 811.4
+929.44928 2800.4
+930.44983 1654.1
+931.45416 900.0
+936.01300 849.8
+940.48798 2831.7
+940.98590 4157.0
+941.48944 3648.3
+941.98663 836.6
+942.48456 910.1
+942.98615 1151.4
+947.97382 1343.7
+948.47644 2208.8
+948.98260 970.6
+949.49048 7244.8
+949.99341 8070.6
+950.49420 4011.1
+951.00195 1780.5
+961.97192 4978.8
+962.47266 4843.8
+962.97351 2276.8
+963.48462 991.3
+977.00854 609.5
+981.63818 611.2
+993.51038 3163.0
+994.51764 2593.6
+1011.50726 772.9
+1012.50635 731.1
+1023.01172 756.4
+1026.97925 838.6
+1030.52429 746.8
+1042.53613 2636.6
+1043.53723 2040.6
+1122.54639 1758.0
+1123.54968 935.7
+1127.52954 776.0
+1128.58191 973.7
+1166.59448 697.1
+1198.18848 2997.7
+1220.10120 627.2
+1301.62598 986.3
+1329.73474 708.2
+1410.74915 701.0
+1414.72864 1101.0
+1489.00635 758.5
+1502.99316 614.4
+1569.88513 695.6
+1692.79675 641.5
+1729.85498 625.8
+1877.33521 768.8
+1878.56250 804.5
+1879.56360 19957.0
+1880.07642 762.9
+1881.08032 766.1
+1881.44958 635.2
+1882.99780 686.0
+1906.89575 7422.2
+1979.04175 653.4
+1996.81934 621.9
+1997.66833 682.0
+S	1657	1657	509.2719806
+Z	5	2541.32078
+165.77435 835.0
+172.94563 731.4
+172.95230 640.7
+175.11867 3056.9
+188.20244 691.9
+188.25972 2131.9
+188.27924 2833.4
+188.28781 2682.5
+188.31247 1899.7
+188.37202 689.7
+196.02673 698.4
+196.18510 655.9
+199.00246 774.8
+199.16946 1347.2
+199.25066 1320.9
+199.25682 838.1
+199.26741 3356.9
+199.28337 1017.1
+199.36679 1394.6
+219.94226 771.1
+233.16463 6829.7
+233.57907 924.2
+234.16875 1597.1
+235.90277 771.9
+240.05392 719.9
+261.15921 1506.8
+267.99661 698.1
+269.12735 787.5
+269.67905 662.8
+270.19138 862.8
+272.13782 762.0
+272.17117 17951.1
+273.17517 3416.9
+288.20248 17681.6
+289.20605 2559.7
+290.88766 806.8
+306.15710 746.0
+308.88843 894.2
+311.10114 681.9
+314.91547 689.1
+319.17212 1606.8
+322.68143 1865.5
+341.14276 1109.2
+355.35574 660.1
+355.88745 919.7
+369.03983 788.5
+372.87448 698.7
+379.22253 3454.1
+379.72427 2452.4
+380.25357 997.6
+385.25497 8648.7
+386.25751 1579.7
+387.27057 18495.8
+388.27408 4348.3
+412.74564 731.5
+419.72427 2093.6
+420.22372 867.2
+422.72623 779.7
+428.72925 7677.9
+429.23068 4315.2
+441.82602 701.8
+442.22244 1549.7
+442.55734 1812.8
+442.89093 1258.4
+453.63638 1364.5
+453.84006 1265.1
+457.03625 875.0
+457.24005 3470.9
+457.43948 2375.1
+457.63495 1085.4
+466.24002 3944.1
+467.89883 908.3
+473.23541 1417.1
+473.56705 2644.3
+473.92999 4509.6
+474.26358 2478.6
+474.56900 1182.8
+474.59866 1137.7
+474.91467 691.7
+483.70847 676.2
+484.32297 9874.8
+485.32587 2328.1
+488.25558 1695.2
+498.30377 1971.4
+514.18433 789.2
+516.44623 654.2
+524.79907 2666.9
+525.29852 1992.1
+525.80200 1042.2
+529.02344 942.3
+532.52722 1248.9
+532.55688 1903.6
+533.02637 2810.8
+533.27551 1121.5
+533.52588 1162.7
+535.01819 854.7
+535.51752 1102.1
+536.01477 815.7
+539.51959 5555.9
+539.77106 5570.4
+540.02069 4983.3
+540.27435 3027.4
+540.52502 1836.5
+540.74304 2037.2
+541.24445 941.4
+541.73828 938.5
+543.77240 1114.0
+544.27521 1336.0
+546.61005 1152.8
+546.94354 951.9
+549.13831 866.7
+549.74457 10004.4
+550.24622 9071.4
+550.74707 4851.8
+551.25970 847.3
+552.77258 5922.1
+553.27283 4499.7
+553.77618 1863.7
+557.28595 1056.0
+557.54254 1551.4
+557.81000 5656.6
+558.30804 3983.2
+558.80774 1969.4
+561.29681 1734.5
+561.54633 3014.0
+561.77728 6442.8
+562.04437 1900.5
+562.27478 3143.3
+562.54352 3005.6
+562.63025 4614.3
+562.77966 1843.2
+562.96649 4214.9
+563.30341 2091.1
+564.28363 1699.5
+564.54095 1766.9
+564.78821 733.7
+564.91754 723.6
+566.54553 6096.6
+566.79602 8967.2
+567.04651 7625.6
+567.29749 4984.0
+567.54688 1896.1
+568.28845 1132.3
+568.54724 1070.4
+569.04321 860.0
+571.04755 20766.1
+571.29852 30643.2
+571.54913 26590.9
+571.79919 19429.7
+572.05017 7122.6
+572.30170 1641.8
+574.63715 818.1
+579.96057 1163.3
+580.62677 1502.6
+580.81512 913.7
+589.29340 2314.7
+589.62659 2358.8
+589.96045 2560.6
+595.29095 744.7
+595.31995 710.2
+595.63776 1171.8
+595.79449 1077.6
+595.96973 1359.6
+599.57013 1710.0
+599.82269 1297.1
+600.30243 880.2
+606.28638 3596.8
+606.78906 4992.5
+607.28668 2929.7
+607.78540 946.3
+608.26129 804.9
+617.29559 1820.0
+618.29578 1019.9
+627.32428 1522.0
+630.67096 757.1
+632.31061 1500.0
+632.64178 2129.4
+632.96619 1893.5
+633.34302 1324.1
+633.67145 1408.8
+644.35309 4303.9
+645.35547 1952.6
+668.90118 1133.4
+669.90277 1353.1
+670.66644 870.2
+671.00641 1436.5
+671.33704 747.4
+676.01080 15782.6
+676.34442 22200.9
+676.67908 17443.7
+677.01282 8045.0
+677.34680 3229.3
+677.67816 1704.3
+680.67419 835.5
+681.00116 2597.6
+681.33484 1137.2
+681.66602 1275.8
+681.99939 1080.6
+686.67291 2434.9
+687.00824 4421.8
+687.34259 2954.6
+687.67676 3007.8
+688.00818 925.5
+689.68817 1189.7
+703.36682 829.0
+708.02087 1048.7
+710.33765 811.0
+713.36157 2215.0
+713.69061 5458.7
+714.02869 7466.2
+714.36108 4177.4
+714.69330 2775.2
+715.02832 1660.6
+718.27032 888.7
+719.02454 27992.6
+719.35907 42267.6
+719.69379 51390.4
+720.02850 41333.2
+720.36328 31715.7
+720.69714 12366.7
+721.03290 4133.8
+721.36700 1200.7
+752.04877 1138.3
+752.38159 3647.1
+752.71613 2381.9
+753.05713 938.3
+757.43555 2727.2
+758.43805 1874.6
+795.53864 1208.3
+817.49817 731.9
+821.39258 1307.4
+844.97754 734.6
+856.45087 2643.3
+857.45959 997.6
+896.55310 878.8
+924.83246 666.0
+1041.49683 1095.4
+1057.22290 1463.1
+1198.24390 4060.6
+1266.06970 703.2
+1525.36426 902.9
+1815.69482 830.9
+1878.48523 1307.7
+1879.00940 2185.3
+1879.50623 24489.0
+1879.80920 2150.8
+1879.98743 2047.7
+1880.49194 812.7
+1906.75464 1188.1
+1907.09619 8880.1
+1918.66956 776.1
+1930.53064 887.8
+1934.08484 803.0
+S	1658	1658	636.3378771
+Z	4	2541.32021
+188.24057 684.3
+188.25024 613.2
+188.27071 943.0
+188.28607 823.6
+188.30046 672.7
+188.31403 820.1
+188.32976 608.8
+198.89064 1331.4
+199.18474 1371.1
+199.19563 614.8
+199.25656 1490.5
+199.26581 867.6
+199.27246 1093.0
+199.28397 2642.7
+199.38142 906.5
+199.41461 595.7
+227.86287 685.2
+232.11165 760.2
+234.23698 587.4
+238.09399 682.2
+251.69821 619.3
+252.93695 547.2
+255.14560 988.2
+255.28276 837.8
+257.09460 892.9
+271.64719 696.4
+272.17108 5361.7
+274.12027 854.2
+305.18079 666.6
+322.67990 3319.7
+346.41721 751.7
+379.22177 6036.7
+379.72296 1633.6
+385.25507 11901.3
+386.25876 1331.3
+387.27213 1343.2
+389.18518 644.1
+392.21298 2277.2
+399.91760 737.4
+415.64642 652.7
+421.16782 603.4
+428.72870 29536.1
+429.23026 12235.3
+429.73175 3389.7
+433.06985 586.1
+443.25345 893.6
+482.64346 776.6
+484.32263 38004.7
+485.32599 9577.4
+486.32968 863.0
+488.25174 1558.1
+497.25778 2345.8
+507.77151 1178.2
+508.24234 1130.3
+508.27380 1094.7
+516.31293 3095.4
+517.31238 1219.5
+521.76996 1619.7
+522.27045 1777.4
+526.27466 1470.8
+532.56458 1913.1
+547.34985 525.6
+547.63715 742.8
+552.77521 3578.5
+553.27789 1535.6
+553.63635 1734.4
+561.77899 2733.9
+562.27740 1277.3
+562.62878 2308.9
+562.96710 1322.3
+563.29822 869.1
+569.79816 716.8
+571.05273 802.0
+589.95880 1049.4
+595.31915 1980.7
+595.56927 2881.7
+595.63599 3904.0
+595.81970 1739.6
+595.96930 4322.7
+596.30969 904.3
+597.82367 915.8
+615.30371 700.1
+617.29779 1660.7
+617.79175 974.1
+618.32440 4031.0
+618.65741 913.5
+618.98840 891.9
+619.32776 1255.9
+621.64990 1232.6
+627.42651 545.7
+632.43469 543.7
+644.35626 1400.5
+645.35760 1171.4
+676.64380 872.2
+680.99817 1618.8
+681.33234 1367.5
+686.67395 6552.5
+687.00720 4158.4
+687.34082 2394.6
+687.67352 2536.7
+702.37726 4818.3
+703.38391 878.4
+715.37054 929.5
+719.69525 4983.7
+720.02991 5163.7
+720.36554 2529.0
+731.10126 718.6
+747.36505 1030.5
+751.88208 747.6
+754.36133 855.5
+755.24481 674.3
+757.43616 21654.5
+757.73120 2028.1
+758.05756 1050.1
+758.43958 8819.1
+759.40002 8528.8
+760.40210 3328.9
+761.05835 1136.8
+761.40015 1690.4
+761.85913 694.3
+762.38086 620.5
+762.88171 957.8
+784.90668 852.8
+788.90948 2852.7
+789.41083 1705.6
+793.42987 1359.6
+793.75653 1769.4
+794.09137 2156.6
+794.41107 982.2
+796.75171 787.6
+797.07605 1108.6
+808.92743 825.4
+810.91022 1208.6
+811.41943 3279.0
+811.91846 1977.8
+812.42102 1321.5
+825.41565 16508.9
+825.91730 14669.1
+826.41852 5401.6
+826.91699 2014.3
+829.44611 3640.2
+829.94684 3162.2
+830.44977 1915.6
+843.44281 12106.7
+843.94373 9050.9
+844.44678 5606.2
+844.94830 2009.2
+845.45892 1067.8
+856.45001 22475.9
+857.45264 8889.3
+858.45313 2270.1
+859.45721 924.0
+867.95953 3308.2
+868.46326 2929.2
+868.96808 1037.6
+881.95801 9065.1
+882.45856 7589.8
+882.95978 4205.6
+883.46295 1429.6
+884.43634 12364.2
+884.93726 11465.7
+885.43695 4569.9
+885.94067 2355.2
+892.94922 15298.5
+893.45081 15426.4
+893.95197 7901.3
+894.45313 2270.7
+929.44873 2260.5
+930.45972 1180.5
+940.48248 2644.6
+940.98993 2202.7
+941.48334 1306.8
+942.49121 761.4
+947.97192 1080.8
+948.47845 977.5
+948.97528 999.0
+949.49213 5964.5
+949.99316 3645.4
+950.49951 1276.3
+950.99750 1287.4
+961.97382 3559.8
+962.47333 3087.3
+962.97363 1617.0
+993.50836 1888.7
+994.51617 1210.0
+997.51074 730.0
+1018.58392 691.0
+1042.52881 2911.7
+1043.53125 820.4
+1122.55469 1020.1
+1198.26489 3403.8
+1233.60571 709.1
+1348.50647 630.6
+1414.70410 747.9
+1415.71899 1142.5
+1667.15271 975.0
+1879.15747 1660.8
+1879.55139 20090.7
+1879.93298 1012.8
+1880.12524 858.1
+1880.45508 1034.0
+1907.07043 7501.8
+1909.45203 747.1
+1930.53943 1285.5
+S	1659	1659	1880.00524127
+Z	2	3758.163
+Z	3	5636.74
+532.54572 1839.0
+630.39435 793.5
+658.46307 628.3
+676.65381 1271.7
+784.02875 769.1
+795.54413 971.3
+995.09033 758.4
+1003.35846 638.8
+1021.12909 638.9
+1198.22974 3405.6
+1871.31091 680.3
+1878.82153 863.6
+1879.57935 19575.0
+1880.27881 614.4
+1899.15894 646.9
+1907.05054 7649.0
+1930.54688 889.6
+S	1661	1661	1879.91640793
+Z	3	5636.474
+Z	2	3757.985
+532.54602 1823.7
+549.15857 938.8
+554.28882 670.0
+676.64886 951.6
+779.76440 588.1
+795.55164 1009.2
+798.99841 714.4
+842.90643 586.4
+889.19952 889.0
+1198.21912 3366.4
+1525.45239 699.4
+1656.33716 757.4
+1777.53699 1211.8
+1875.11365 641.8
+1878.58496 1336.7
+1879.57361 18899.3
+1879.84778 4071.9
+1880.16199 1508.4
+1880.42346 868.4
+1881.87097 718.0
+1907.04712 7562.0
+1915.50952 593.9
+1930.59863 1069.7
+S	1662	1662	509.2715226
+Z	5	2541.31849
+137.47337 571.4
+148.05644 639.5
+164.65225 522.0
+165.77637 672.1
+171.88548 690.7
+179.63756 567.4
+188.24184 785.9
+188.27287 1863.8
+188.28209 2035.0
+188.28932 2113.7
+188.29939 2033.8
+188.31149 1670.4
+188.34293 510.4
+194.87611 573.9
+198.89120 745.7
+199.16811 1296.3
+199.26639 3061.5
+199.33826 650.6
+199.36464 1120.8
+201.12312 1715.9
+209.47623 540.8
+233.16365 1068.2
+251.35846 524.5
+271.79901 634.7
+272.17120 6231.9
+288.20242 7752.7
+294.33023 522.7
+319.17178 1219.6
+334.05057 592.6
+343.03546 636.3
+377.74966 870.9
+379.22125 1817.0
+385.25586 2633.7
+387.27075 5515.0
+388.27350 808.0
+396.25989 620.5
+399.75055 528.3
+409.24326 812.6
+410.52420 596.5
+419.72293 1095.3
+427.57297 938.3
+428.72885 1950.1
+429.22696 814.6
+442.22220 1667.1
+444.14520 578.4
+455.78711 840.6
+466.23840 1921.2
+467.22922 17181.5
+467.56378 19935.8
+467.89777 4159.4
+473.23279 49763.5
+473.56708 41086.0
+473.90140 11612.7
+474.23682 2480.8
+484.32104 2736.8
+488.75278 658.8
+532.54510 1784.7
+533.02405 1787.1
+539.51904 3216.4
+539.77161 2023.9
+540.02045 2865.2
+540.73877 1053.7
+544.76599 1142.5
+549.04285 583.4
+549.74402 7817.7
+550.24634 2257.7
+552.76703 785.2
+557.53961 1221.0
+561.29584 1311.2
+561.35529 892.6
+561.54810 1417.2
+562.54523 1274.5
+566.54358 2091.0
+566.79523 1803.5
+567.04309 1303.3
+568.83673 555.2
+571.04755 5085.7
+571.29993 6331.2
+571.54907 4127.3
+571.78180 511.1
+571.80371 631.3
+573.53693 1511.5
+573.79095 1328.5
+582.29340 3286.8
+582.79315 2633.7
+589.29413 721.6
+589.62915 670.0
+589.96313 1190.4
+594.81915 828.5
+595.29053 17753.3
+595.54498 1718.3
+595.79169 14159.4
+596.29327 3409.2
+606.28741 3156.3
+606.78546 1148.9
+611.38348 706.3
+611.89178 1179.2
+626.39673 3887.3
+627.32202 695.6
+627.39813 1355.4
+627.82538 3471.4
+628.32922 2447.1
+628.82471 921.6
+633.33374 1025.9
+644.34943 1404.2
+648.29767 608.9
+660.39856 982.5
+668.49634 707.7
+668.89905 9859.4
+669.39966 7216.5
+669.90277 2541.5
+670.40222 1180.4
+676.00952 6359.4
+676.34369 4806.4
+676.67749 3793.7
+686.67194 1746.8
+687.00964 2848.4
+704.41980 1033.6
+704.91943 738.1
+709.34680 2778.2
+709.84460 2478.0
+710.34241 678.2
+713.69141 2248.1
+714.02643 2575.5
+714.36359 1251.1
+715.01263 736.2
+719.02460 17464.2
+719.35834 17053.7
+719.69427 16236.3
+720.02917 12546.5
+720.36438 5371.0
+720.69855 1324.1
+731.16998 626.2
+739.36407 627.1
+752.71338 1029.5
+757.44403 759.0
+795.56262 782.9
+856.45593 729.4
+993.16760 547.0
+1198.21570 3566.6
+1256.22644 652.9
+1753.81299 654.5
+1777.47974 1110.5
+1780.92419 637.7
+1858.50366 609.9
+1876.08496 584.7
+1878.02844 1054.6
+1878.38513 964.6
+1879.51501 19089.3
+1880.25989 1106.2
+1880.82422 902.4
+1907.04419 7697.2
+1930.76465 1011.4
+S	1663	1663	636.3379396
+Z	4	2541.32046
+165.77614 853.2
+183.87189 549.9
+188.25888 665.0
+188.26448 699.8
+188.27399 1377.0
+188.28378 1234.9
+188.29576 982.4
+188.30814 897.2
+188.32021 522.7
+188.32533 534.9
+196.07156 551.7
+199.17200 1202.9
+199.26956 2728.2
+199.27971 591.4
+199.28986 569.1
+199.36148 843.1
+199.36749 884.1
+202.17801 563.0
+204.15741 522.9
+216.16164 599.7
+223.45744 523.6
+227.86989 635.4
+229.06247 565.0
+229.16487 545.2
+242.68414 632.8
+250.32764 570.3
+256.26962 564.4
+267.79169 586.1
+278.01514 576.5
+280.91846 629.6
+292.00687 597.8
+297.04022 590.8
+329.08929 601.7
+329.45044 572.2
+347.05151 669.3
+350.26868 716.5
+350.49362 612.5
+366.87045 802.4
+379.22256 1725.2
+385.25397 2373.2
+428.72787 4640.1
+429.22992 1569.7
+435.19769 583.1
+475.25732 575.3
+484.32190 8636.3
+485.32397 851.7
+493.03586 660.9
+497.25754 791.3
+498.77399 630.4
+532.57635 1787.2
+549.18152 1166.1
+560.24048 627.1
+577.76776 743.7
+595.63361 776.3
+595.82452 1037.6
+595.96619 1002.5
+610.44910 618.2
+630.42853 760.5
+676.62073 874.2
+681.70514 534.3
+686.67090 934.5
+687.00366 1215.1
+687.67670 686.5
+702.37408 776.9
+706.28680 1063.7
+719.69843 836.5
+720.03595 1083.2
+757.43585 4346.2
+758.43408 1599.5
+759.39758 2063.6
+761.39575 661.2
+762.88873 647.6
+772.93951 660.8
+787.40436 754.5
+795.55914 896.1
+811.41614 840.4
+825.41748 3412.4
+825.91724 2083.0
+826.41583 1232.9
+826.90533 700.1
+843.44006 2019.1
+843.94403 2116.1
+844.44867 1317.9
+856.45001 4046.0
+857.45013 2233.8
+864.11633 826.0
+867.95709 870.4
+868.46881 721.9
+881.95093 1964.9
+882.46088 1342.6
+884.43732 1432.0
+884.93665 2619.2
+892.94604 3736.0
+893.45203 3008.5
+893.95807 817.2
+940.48621 1252.2
+949.98712 1118.3
+1019.77167 746.4
+1022.38367 602.7
+1057.21619 913.2
+1123.64294 745.1
+1140.27551 667.8
+1198.28821 3275.3
+1203.24170 570.6
+1244.62927 577.2
+1871.98425 1012.9
+1873.14771 639.5
+1877.95654 1200.8
+1878.68591 1143.2
+1879.00171 2227.1
+1879.48621 19758.7
+1879.97009 2363.3
+1880.48657 1136.4
+1907.00183 6843.7
+1930.71057 914.5
+S	1665	1665	720.3381221
+Z	4	2877.32119
+188.21951 582.0
+188.24133 980.5
+188.25696 1466.8
+188.27512 1916.2
+188.29536 1914.2
+188.30894 1481.5
+198.88930 895.3
+199.18480 875.9
+199.24921 1669.6
+199.26381 1237.2
+199.28133 2258.9
+199.29413 867.4
+199.37929 739.0
+212.45258 791.7
+222.08704 860.2
+233.59596 601.0
+240.03029 540.5
+240.09764 3836.0
+244.16597 1082.2
+280.66873 819.2
+301.11407 3951.1
+304.50201 618.9
+307.90881 546.0
+311.13446 6592.3
+312.13824 1003.7
+342.29947 664.1
+344.20807 550.2
+348.11566 1129.3
+350.28448 634.6
+365.00043 589.3
+366.12790 1544.0
+368.15683 2410.5
+371.03714 551.1
+372.15222 834.0
+389.67953 599.1
+408.15115 1877.2
+425.17740 3215.4
+428.72842 1111.7
+456.25168 693.0
+459.28082 28041.9
+459.78235 20799.0
+460.28403 6773.3
+460.78482 1169.2
+468.17328 1062.5
+477.18311 1024.7
+498.19373 689.0
+499.17899 855.7
+501.19705 1121.8
+505.60840 1160.8
+513.19659 1143.9
+523.17535 995.9
+524.17621 843.3
+532.55481 1737.7
+537.78375 3205.7
+538.28851 1027.1
+540.20343 5212.4
+541.20642 1733.4
+541.60474 681.9
+553.78406 600.0
+561.77643 811.4
+584.49249 610.6
+586.63666 1004.4
+586.79498 631.6
+595.29755 4083.1
+595.79883 1886.6
+596.30029 954.2
+601.86084 569.4
+603.24072 699.7
+611.24194 2802.1
+611.33502 1340.3
+612.24408 872.2
+618.32196 1415.2
+618.47577 648.7
+626.10400 663.4
+633.55145 1099.7
+633.80072 1440.1
+634.05334 730.6
+634.29608 653.9
+635.65680 1067.2
+635.98615 1574.0
+636.33356 15057.5
+637.33691 5714.7
+638.33527 1392.9
+638.81030 3028.7
+639.31000 1225.2
+647.00024 889.0
+647.05182 784.9
+647.33868 1468.3
+648.26666 836.1
+648.82916 985.4
+649.32770 936.0
+651.30823 2680.1
+651.55865 7509.0
+651.80945 6817.3
+652.05963 3570.8
+652.30804 1141.9
+655.81042 6951.0
+656.06085 21157.7
+656.31171 19438.1
+656.56323 10246.5
+656.81354 3655.2
+658.24591 1056.3
+673.66785 3891.3
+674.00171 7422.7
+674.33643 4032.0
+674.39935 2666.3
+674.66901 1233.1
+675.00769 948.6
+675.39825 1646.9
+676.25793 1609.6
+676.64240 1276.5
+679.36133 1313.3
+679.86652 1569.1
+683.82581 996.4
+693.81451 886.4
+694.27966 2595.5
+695.28571 847.9
+695.87830 761.8
+699.31970 725.9
+702.33179 1615.3
+702.57361 1128.7
+702.82428 1013.8
+703.34625 907.1
+717.96307 625.1
+731.18530 754.3
+746.41882 1174.0
+750.36481 8762.0
+750.69818 17972.3
+751.03241 17703.4
+751.36676 7278.6
+751.69958 1719.2
+756.37762 1024.1
+756.87598 790.8
+757.40863 1652.5
+757.91052 3198.3
+758.40900 2424.4
+761.84479 585.8
+762.70752 767.5
+764.42969 6798.6
+765.42773 2213.6
+768.04022 1359.5
+768.37469 5141.9
+768.70734 5581.0
+769.03778 2601.0
+769.38477 858.7
+774.04315 15733.3
+774.37762 31039.6
+774.71161 24464.0
+775.04639 11894.8
+775.37976 4153.6
+781.42615 913.8
+781.67780 636.2
+783.06183 655.2
+795.54535 1003.5
+806.37299 1039.8
+806.71820 4089.6
+807.04865 4863.6
+807.38361 2604.2
+808.05298 931.6
+810.98309 717.3
+812.38538 7874.0
+812.72021 21465.0
+813.05377 17329.6
+813.38849 9057.2
+813.72290 3530.1
+814.92047 1735.3
+815.42041 2638.1
+815.92810 1411.3
+816.41522 1052.2
+820.92303 1270.6
+825.39130 996.2
+825.72174 3556.8
+826.05994 4474.8
+826.39001 2239.9
+826.72021 1212.6
+828.12830 775.6
+831.39374 10034.0
+831.72620 25112.4
+832.06073 21595.3
+832.39471 14056.4
+832.72955 3139.7
+843.84161 1071.2
+844.39276 2960.2
+844.73187 9200.0
+845.06439 8422.1
+845.39746 5657.7
+845.73291 1350.8
+850.39911 18783.7
+850.73389 45413.8
+851.06763 45492.7
+851.40192 24946.3
+851.73700 8184.2
+852.07367 2122.6
+852.34052 1694.9
+852.84216 2172.6
+856.44946 4783.9
+857.45172 2494.9
+868.06921 1690.1
+868.40820 5170.1
+868.74274 4944.9
+869.07550 2686.0
+869.41150 1447.4
+870.45850 1539.6
+874.07867 15498.7
+874.41290 39234.5
+874.74658 42725.1
+875.08130 20756.5
+875.41479 7107.7
+875.74500 1398.6
+879.43829 2873.7
+879.94208 3655.0
+880.44788 2175.0
+911.49573 6948.4
+912.50024 3628.5
+913.49231 989.5
+944.43396 1284.7
+952.98553 1409.8
+953.48193 2966.5
+953.98346 2105.7
+954.37482 1665.8
+954.88000 1178.3
+955.37836 1084.2
+962.88135 2926.9
+963.38123 4443.0
+963.88184 2243.5
+964.38086 1175.5
+969.41656 1446.8
+969.99762 4036.6
+970.49805 5137.6
+970.99957 1804.9
+971.51038 1013.9
+978.58636 767.9
+980.89240 1961.8
+981.39417 2095.3
+981.88818 1657.4
+982.39038 1005.5
+1005.01855 585.3
+1010.00177 1520.1
+1010.49878 3372.0
+1010.99878 3415.7
+1011.49536 1384.2
+1066.01733 870.1
+1074.57373 1040.0
+1075.01978 2145.6
+1075.49695 1237.6
+1081.11047 687.6
+1126.04114 978.4
+1154.52649 2088.0
+1171.58521 1776.4
+1172.59558 1724.5
+1173.59399 813.5
+1190.03955 1552.5
+1198.24646 3566.5
+1214.47070 1161.3
+1236.55688 806.3
+1243.61572 767.7
+1275.59802 716.9
+1878.98804 871.6
+1879.53760 20002.9
+1879.85083 1556.2
+1880.12415 940.0
+1880.51440 807.5
+1881.51697 883.3
+1882.33728 718.2
+1907.05835 7615.9
+1907.39746 902.6
+1930.73718 651.5
+1991.51233 674.0
+S	1666	1666	721.0928246
+Z	4	2880.34
+188.18683 6614.7
+188.22069 5335.0
+188.23866 4997.9
+188.26154 8116.2
+188.28694 6335.5
+188.31041 4973.2
+188.33438 7580.2
+188.34409 5898.8
+188.52898 4354.7
+192.02602 5204.0
+195.50818 5327.8
+198.88893 7550.0
+199.06607 5438.8
+199.17511 6597.9
+199.19958 6846.2
+199.21661 5738.5
+199.24907 7487.4
+199.25688 9422.1
+199.27339 20699.1
+199.29965 10622.5
+199.31940 8364.4
+199.35309 5940.6
+199.37178 6691.3
+199.39862 5426.2
+226.60222 5239.6
+240.09756 8834.6
+255.78348 5564.4
+261.45447 5106.3
+277.99985 5065.6
+294.32642 4962.1
+297.38400 5293.7
+301.11398 10162.9
+311.13428 24460.1
+338.94006 4793.5
+342.28024 5563.8
+350.25342 5145.8
+414.42258 5563.8
+425.17526 14218.0
+427.55203 6870.5
+459.28036 109442.9
+459.78220 60976.4
+501.91000 5780.8
+523.16815 5490.1
+532.54767 17832.4
+537.77985 7815.3
+540.20160 26056.2
+543.61450 6563.6
+549.16681 7318.0
+603.43127 5863.2
+611.24097 7549.1
+636.33600 35170.7
+637.33508 7749.4
+651.31067 11915.3
+651.55743 25362.9
+651.80768 18723.2
+655.81055 62685.7
+656.06085 92290.8
+656.31201 66346.4
+656.56311 36232.8
+656.81195 13232.6
+673.66583 21228.8
+674.00781 15181.6
+674.39728 10185.8
+674.67090 7631.7
+676.64972 10721.3
+694.27277 8051.5
+702.82764 7274.4
+705.30640 5801.3
+731.14178 7079.3
+750.36359 55619.9
+750.69794 78745.7
+751.03278 46121.0
+751.36835 20811.0
+764.42419 10690.7
+765.43365 5875.1
+768.04071 8726.1
+768.37402 23422.2
+768.70758 10043.9
+774.04333 79039.0
+774.37762 126576.8
+774.71100 82952.0
+775.04425 39068.5
+795.55096 8487.5
+806.38293 12081.4
+806.71942 14995.7
+807.05194 7646.3
+807.37982 9394.8
+812.38434 52336.1
+812.71924 61299.9
+813.05408 49253.3
+813.38745 24806.4
+814.91089 6792.5
+825.38464 12566.8
+825.72266 17299.7
+831.39276 63214.8
+831.72638 75436.4
+832.06097 52256.6
+832.39465 30255.1
+844.39069 20775.6
+844.73126 23913.0
+845.06073 18269.2
+845.39661 15652.4
+850.40015 136678.2
+850.73370 199049.4
+851.06726 135863.9
+851.40302 58725.1
+851.73584 20405.4
+852.35553 8568.9
+856.45123 6132.7
+868.07892 12789.1
+868.40930 11977.2
+868.74036 12773.3
+869.07776 9778.5
+874.07788 99011.9
+874.41284 160123.6
+874.74561 85781.7
+875.07977 51774.2
+875.41809 17109.4
+875.74829 10792.2
+911.49414 11886.6
+954.88202 6833.1
+962.88171 16847.9
+963.38135 17406.1
+970.48145 5783.0
+980.89935 6211.0
+981.39709 7485.0
+1010.49908 13471.0
+1085.95337 8193.4
+1122.77869 7009.7
+1188.24548 8573.4
+1198.22290 24880.5
+1390.58740 6000.4
+1437.91357 6566.4
+1801.70410 5656.9
+1848.39380 5948.9
+1872.47449 5037.4
+1879.04089 8979.7
+1879.57495 167284.4
+1880.11951 6220.9
+1880.75085 7259.3
+1906.91492 62646.9
+1907.21313 5617.5
+1907.66956 5577.2
+1930.65576 8180.0
+1955.67017 5480.4
+1983.01343 5875.1
+S	1667	1667	1879.93440793
+Z	3	5636.528
+Z	2	3758.021
+532.55078 1486.2
+630.50354 852.8
+676.62750 1125.3
+722.43488 570.1
+731.29230 612.9
+777.66766 598.0
+782.53912 715.1
+795.55646 810.3
+825.75037 542.0
+836.12561 689.6
+910.11536 791.5
+950.70911 590.0
+976.59113 556.1
+1198.22925 2675.4
+1368.28455 693.5
+1525.61658 911.9
+1578.50903 770.5
+1878.63647 999.5
+1879.49097 19944.7
+1880.24402 865.2
+1907.05579 7527.7
+S	1669	1669	720.3382446
+Z	4	2877.32168
+188.19896 1004.2
+188.23274 1449.9
+188.24588 1109.6
+188.25142 1088.3
+188.29404 1469.7
+188.30920 1407.4
+188.31770 1305.4
+188.34360 1336.1
+198.89067 1713.8
+199.20650 1010.2
+199.22330 2165.0
+199.24141 1687.0
+199.27498 2975.0
+199.29265 2822.0
+199.30551 1580.9
+209.64633 1178.2
+214.59343 1180.1
+217.77234 1129.4
+222.08719 1354.5
+232.24300 1111.7
+256.06680 1140.8
+257.59000 1044.2
+299.32178 1105.2
+301.11496 2163.3
+309.54446 1095.4
+311.13425 5313.8
+312.14975 1160.2
+313.53622 1255.9
+368.15317 2039.0
+425.17542 2475.0
+459.28061 24665.7
+459.78210 12088.6
+460.28311 3590.9
+471.51053 1131.1
+477.74945 1314.5
+499.17752 1527.3
+511.44876 1125.9
+532.57123 3959.3
+540.20361 5524.6
+541.76642 1235.0
+554.44934 1107.3
+571.12445 1374.4
+581.32611 1437.0
+595.29706 2450.4
+595.79785 1352.0
+598.92053 1159.4
+605.79865 1228.1
+608.68427 1427.3
+611.24133 2259.7
+634.11481 1145.1
+636.33313 7766.7
+637.33307 2823.1
+638.79639 1540.5
+650.80084 1217.3
+651.30695 6281.7
+651.55823 4578.7
+651.80914 4723.7
+652.05505 2648.7
+655.43372 1065.3
+655.81067 12806.5
+656.06122 16572.4
+656.31128 12083.8
+656.56396 5327.7
+673.66632 3452.1
+674.00366 5010.1
+674.33258 2438.1
+674.39648 1702.9
+686.33313 1639.8
+694.27441 2009.2
+750.36383 12273.7
+750.69836 14465.7
+751.03467 6117.5
+751.36365 2798.5
+757.40320 2624.6
+757.91150 2824.6
+764.43005 3354.3
+768.03784 2668.6
+768.37360 5552.2
+768.70337 2264.1
+774.04242 22695.2
+774.37659 22329.5
+774.71271 14207.6
+775.04639 5995.7
+775.37750 1466.5
+804.41187 1459.5
+806.38098 2566.1
+806.71564 3046.3
+807.03833 1461.9
+812.38495 13845.9
+812.71954 17501.8
+813.05292 8735.3
+813.38940 6356.9
+814.93414 1415.0
+825.38611 2014.8
+825.72681 3475.3
+826.06299 3056.3
+826.39185 1469.7
+831.39178 16169.7
+831.72662 21966.1
+832.05951 14648.6
+832.39307 4848.8
+832.73450 1711.3
+844.39386 5076.9
+844.72791 5729.0
+845.06042 4603.6
+845.40015 1782.2
+850.39868 28487.1
+850.73328 37911.3
+851.06750 22374.6
+851.40210 11253.8
+851.74133 3114.5
+852.84424 1385.4
+868.40070 3020.5
+868.73932 3774.3
+874.07758 24057.5
+874.41254 29792.3
+874.74683 20432.4
+875.08179 10179.3
+875.40839 1570.1
+879.43591 1645.9
+879.94366 1405.7
+910.74725 1277.7
+911.49750 3401.1
+962.87408 3152.4
+963.38147 3762.5
+972.38861 1100.8
+980.90137 2591.1
+981.39984 1607.2
+995.01990 1251.5
+1009.99689 2751.9
+1057.25513 1445.9
+1188.28076 1416.2
+1198.27698 5759.8
+1214.47437 1585.3
+1250.39880 1189.5
+1525.40881 1330.0
+1544.57092 1148.6
+1567.89697 1105.3
+1649.71313 1490.6
+1715.32617 1097.9
+1777.32373 1746.9
+1867.77197 1401.5
+1879.26111 4849.9
+1879.55469 36369.4
+1879.87256 5464.4
+1880.24487 2451.0
+1882.31995 1411.4
+1906.66443 1659.7
+1907.07239 14036.6
+1907.44897 1410.6
+1930.55383 1617.0
+1999.22791 1227.7
+S	1670	1670	1879.9608246
+Z	2	3758.074
+Z	3	5636.607
+517.35168 592.7
+532.57782 1681.6
+532.96204 660.6
+550.35443 602.3
+580.51294 611.7
+589.06610 619.3
+599.27655 589.8
+630.42236 955.4
+642.52350 555.9
+676.62927 855.3
+723.44867 609.7
+738.24017 661.2
+754.47174 707.2
+795.55060 1203.7
+1019.68408 746.0
+1198.29456 3065.2
+1300.05786 775.4
+1525.46179 777.1
+1878.07349 695.4
+1878.29895 570.7
+1878.86304 1220.5
+1879.49829 19438.5
+1879.80383 2459.9
+1880.11877 765.3
+1881.28455 774.7
+1907.05237 7502.2
+1930.63464 1197.8
+S	1671	1671	724.3415746
+Z	4	2893.335
+188.25061 1033.9
+188.26047 971.1
+188.26631 1024.8
+188.27707 1101.0
+188.28790 1280.7
+188.30040 786.2
+188.30923 737.0
+188.33185 479.1
+192.27499 494.2
+192.32608 542.9
+197.98660 579.2
+198.89507 1063.5
+199.17076 1111.2
+199.23419 814.5
+199.24915 1225.0
+199.26006 1550.2
+199.28358 1726.4
+199.36714 887.0
+199.90178 562.6
+222.81239 626.4
+237.47925 641.3
+261.51245 656.0
+263.64856 596.2
+271.82068 623.2
+275.65509 642.3
+290.70618 587.1
+305.73422 587.7
+311.78210 642.7
+314.51303 687.7
+326.13785 628.2
+341.20309 551.1
+351.72595 656.3
+396.70364 661.1
+424.49152 725.6
+512.50061 637.1
+515.94812 774.7
+532.58081 1751.3
+549.14026 707.7
+573.59991 798.6
+582.10712 623.3
+630.39447 824.8
+653.34882 584.1
+662.75861 723.0
+705.99988 608.0
+731.11517 844.3
+738.31409 682.0
+783.91302 632.3
+794.56274 563.6
+795.57928 773.3
+850.88019 703.7
+854.37128 1018.1
+916.74408 1872.9
+928.47290 644.1
+1027.86707 633.0
+1130.87610 634.8
+1140.56189 673.9
+1198.29370 3498.4
+1297.41235 744.9
+1337.65381 632.2
+1478.99329 693.2
+1777.29688 757.6
+1802.92725 668.8
+1869.58765 709.5
+1876.62744 831.3
+1877.95703 912.7
+1878.76538 789.3
+1879.12109 1983.7
+1879.56104 19654.4
+1880.01538 1738.1
+1880.31030 686.2
+1880.98169 671.4
+1881.20740 731.7
+1907.11609 7527.3
+1918.75232 722.1
+S	1673	1673	1879.94940793
+Z	3	5636.573
+Z	2	3758.051
+522.81714 580.5
+532.60565 1831.4
+644.07568 727.1
+674.52930 608.4
+676.64136 989.9
+795.56226 708.5
+997.91681 665.4
+1126.97668 644.7
+1198.35107 2618.5
+1399.20618 638.3
+1509.75793 627.8
+1525.43921 745.8
+1878.28809 745.3
+1878.64233 748.8
+1878.73718 750.0
+1879.22668 2138.5
+1879.53589 20137.2
+1879.88635 1842.3
+1880.71460 913.1
+1880.90344 619.5
+1881.39270 726.5
+1907.04944 7490.5
+1917.06934 669.4
+1930.62305 834.8
+S	1674	1674	1907.46140793
+Z	3	5719.109
+Z	2	3813.075
+532.62915 1849.8
+570.09796 536.6
+626.67712 562.2
+630.43927 1068.3
+676.62408 1203.5
+683.29028 575.3
+699.86615 703.7
+747.35962 630.5
+818.70093 755.6
+945.51752 633.4
+1019.74109 909.9
+1057.22974 640.0
+1165.29407 562.0
+1198.41211 3468.5
+1326.60852 690.5
+1377.66577 621.8
+1629.53271 672.6
+1699.93091 723.5
+1717.65869 743.0
+1750.23132 662.7
+1777.34668 784.7
+1879.19800 1374.2
+1879.49841 19983.1
+1879.78003 1018.1
+1880.65430 649.7
+1893.97083 622.5
+1907.04980 7526.3
+1968.52344 664.8
+S	1675	1675	1198.71540793
+Z	2	2395.583
+Z	3	3592.871
+350.27756 790.3
+359.05563 742.9
+366.78790 626.8
+381.35504 617.4
+449.58902 759.6
+451.41592 605.6
+470.65356 592.9
+481.89816 665.6
+485.53854 613.7
+505.43716 573.6
+523.01563 655.4
+530.70947 796.9
+532.62726 2199.7
+533.47980 594.5
+554.23999 660.6
+578.27057 617.5
+608.49139 591.6
+659.38507 615.2
+661.90741 630.5
+676.62622 626.9
+676.66656 633.7
+686.81067 662.3
+694.27991 544.8
+705.25415 607.3
+731.10895 592.1
+779.40540 618.9
+783.81091 871.7
+785.52905 550.5
+785.59247 569.8
+795.54541 811.4
+809.87567 682.2
+833.20624 627.2
+1038.03809 630.3
+1079.25256 793.4
+1132.20178 581.6
+1133.94177 807.7
+1198.40161 3353.6
+1419.06604 666.0
+1477.37744 621.2
+1644.86621 621.4
+1878.23682 706.7
+1878.88416 1307.9
+1879.61462 17284.2
+1880.37549 1177.7
+1881.39978 717.0
+1907.04492 7385.8
+1918.61316 634.3
+1930.61340 844.2
+S	1677	1677	463.5224471
+Z	4	1850.05849
+121.79070 772.9
+121.79639 2025.5
+125.49005 593.6
+126.64519 599.4
+133.89191 515.2
+141.18782 554.6
+158.24989 598.4
+165.77829 808.9
+173.31291 629.1
+180.50496 627.9
+180.94467 572.1
+187.14394 31809.7
+188.14714 3043.2
+197.12785 989.5
+198.89027 932.8
+199.16702 1192.9
+199.20155 651.5
+199.22621 1007.0
+199.24353 987.4
+199.25443 1546.2
+199.26468 2485.0
+199.28769 598.0
+199.36220 828.5
+211.88292 613.8
+215.13889 11711.4
+216.14226 1555.5
+227.42604 608.6
+228.36145 604.7
+233.16475 61899.6
+233.54222 715.8
+234.16815 10818.4
+238.72298 631.2
+241.19113 3307.0
+250.48502 529.8
+261.15973 11060.6
+262.16266 1947.8
+268.34262 565.1
+269.18585 6957.2
+270.18881 853.8
+271.24142 563.2
+289.17163 6997.4
+289.50562 3175.8
+296.19659 1915.8
+299.13327 963.2
+300.80392 634.6
+314.20737 13164.0
+315.21146 2088.8
+316.54263 588.6
+318.18069 964.5
+344.19690 8132.7
+345.20062 1907.4
+347.20435 1023.3
+362.20746 9972.3
+363.21115 2512.6
+365.21487 713.6
+367.07401 596.6
+369.20609 5213.1
+369.70779 2061.1
+380.84198 616.7
+383.54352 6443.2
+383.87781 4686.1
+384.21207 826.3
+384.22784 809.1
+384.72760 2073.7
+387.88611 1103.9
+388.21799 867.3
+389.47784 1549.1
+393.73071 11763.3
+393.89197 1434.6
+393.98090 9967.7
+394.23233 6224.9
+394.48447 1497.6
+398.23282 1505.0
+398.48425 1945.2
+410.56195 1187.0
+410.89627 1850.6
+411.22925 1234.1
+412.21878 2255.5
+412.26483 684.1
+414.23465 754.5
+416.56683 5320.7
+416.90198 3183.5
+417.23422 1282.2
+417.74966 1450.2
+420.23871 6434.3
+420.57205 4636.1
+420.90704 1913.7
+422.00174 8010.7
+422.25226 8398.4
+422.50351 3903.9
+422.75427 3034.3
+426.11722 685.7
+426.24194 141827.5
+426.57587 111649.8
+426.91010 47360.0
+427.17490 1030.1
+427.24426 12702.3
+427.57712 3255.3
+427.74210 933.4
+428.24252 1863.5
+429.00015 1061.3
+429.25012 1569.5
+429.28537 6847.1
+430.28790 2204.6
+432.94669 570.1
+432.99289 2208.2
+433.25336 66144.2
+433.48947 1150.2
+433.75455 32838.9
+434.25616 9525.6
+434.75598 1894.5
+437.49585 13754.6
+437.74655 17522.8
+437.99734 8279.7
+438.24841 3557.7
+438.49911 1872.5
+447.25766 715.3
+454.35416 648.7
+469.88330 824.2
+475.29242 1013.0
+476.27603 632.0
+476.77252 845.9
+481.93881 1127.3
+482.27438 1290.7
+482.76950 917.5
+483.27478 903.3
+484.28226 839.6
+484.78568 875.2
+489.79395 2529.3
+490.29807 1671.5
+496.95905 8260.7
+497.29352 5583.9
+497.62723 4188.4
+503.29623 785.7
+509.53009 556.8
+511.28577 1222.9
+519.63763 1435.4
+524.63824 5942.0
+524.97321 3632.0
+525.30377 1335.9
+525.63971 788.2
+526.28522 3747.8
+526.78918 2204.8
+527.29016 1033.0
+528.35529 798.7
+530.64154 119785.0
+530.97565 120195.0
+531.30963 62045.4
+531.50153 589.8
+531.64380 23106.7
+531.97864 7335.7
+532.31323 1615.9
+532.60321 2392.9
+540.29498 2673.1
+540.62787 3718.1
+546.36414 1341.0
+546.81677 5050.1
+547.31641 3727.2
+547.81720 1169.1
+549.14758 605.8
+556.34863 15499.3
+557.35168 5260.4
+558.35254 1082.4
+562.33160 3301.7
+562.66742 2211.6
+563.31110 1224.0
+565.80634 1920.6
+566.30737 2118.1
+568.33765 1955.6
+568.65631 14838.9
+568.99054 17598.9
+569.32532 9993.9
+569.65991 4025.5
+569.99292 1104.2
+574.35895 8734.5
+574.81128 57461.1
+575.31256 40612.0
+575.36316 3685.3
+575.61987 854.0
+575.81390 15082.0
+576.31598 4022.8
+576.81946 707.7
+582.99213 5878.1
+583.32611 7160.0
+583.66052 2752.7
+583.99402 1474.5
+590.33246 10392.0
+590.83350 7262.5
+591.33185 1903.6
+595.32599 2093.2
+595.82379 1732.5
+596.32550 786.7
+615.33997 4417.4
+615.84027 3688.4
+616.33569 1444.1
+619.55170 688.7
+624.12958 601.0
+624.34564 31665.5
+624.84674 26005.5
+625.34808 8121.1
+625.85260 2327.6
+629.85413 3542.1
+630.35065 2347.0
+630.40625 750.2
+630.85272 1450.6
+637.14917 930.3
+637.65460 933.7
+638.01514 743.0
+638.52051 1205.2
+638.85858 194222.7
+639.23816 1085.1
+639.35968 157439.2
+639.70160 1032.2
+639.86084 71841.0
+640.20764 908.7
+640.36151 18951.3
+640.56891 1275.8
+640.86316 5099.9
+641.07196 746.1
+641.36493 937.3
+676.63110 1059.1
+679.38788 1280.2
+679.88940 926.9
+680.89172 986.0
+681.38812 1055.4
+688.39270 48705.3
+688.62292 584.7
+688.89380 45504.9
+689.39526 20017.7
+689.89777 5175.9
+690.39606 1745.0
+731.41071 6842.4
+731.91290 4772.3
+732.41180 2843.3
+737.40497 12237.1
+738.40759 5480.5
+739.40735 1497.5
+744.93695 802.0
+745.44196 1145.5
+783.56567 552.9
+795.55585 969.6
+800.45166 686.0
+809.94037 1179.8
+810.43445 1560.7
+810.93921 864.3
+836.45837 1152.3
+854.47589 12866.3
+855.47968 6175.4
+856.48547 2060.5
+872.48090 757.5
+892.80713 542.1
+941.30090 729.0
+964.53656 1388.4
+967.56201 1321.7
+968.57001 756.4
+1037.28967 596.9
+1051.56592 1167.4
+1052.57410 656.5
+1102.74304 677.7
+1148.61499 7489.4
+1149.61804 6914.2
+1150.61523 1755.6
+1184.54724 576.8
+1198.34631 3447.5
+1247.67822 1370.2
+1328.63489 567.5
+1331.71143 663.7
+1356.99756 709.9
+1516.16956 543.2
+1777.37903 1228.8
+1820.34888 618.1
+S	1678	1678	509.2713706
+Z	5	2541.31773
+135.00867 658.1
+137.78313 492.8
+165.77336 552.1
+171.64098 846.9
+175.11850 920.4
+188.15366 794.0
+188.18520 621.5
+188.21431 990.9
+188.23892 642.9
+188.25169 726.2
+188.26682 727.0
+188.28215 631.2
+188.29970 704.7
+188.30670 760.5
+188.32669 553.3
+188.33557 619.1
+188.35120 665.9
+188.38644 702.0
+198.88640 794.1
+199.17880 792.8
+199.22058 579.7
+199.23114 529.4
+199.25092 1073.2
+199.25929 992.0
+199.27104 1379.8
+199.27710 1674.6
+199.30424 1203.4
+199.37392 845.1
+199.40047 636.1
+199.44476 539.4
+232.11134 1161.7
+233.16437 12955.3
+234.16783 1533.9
+237.60924 665.9
+247.67667 549.5
+255.29453 645.1
+258.34570 582.4
+261.15973 1755.6
+271.82446 605.5
+272.17114 4901.3
+273.17587 874.0
+274.12219 1182.3
+288.20233 1529.5
+313.67502 1317.7
+320.34341 601.7
+322.68051 3931.3
+323.18228 2252.2
+343.56747 604.3
+350.28110 812.0
+360.12360 644.8
+367.08423 620.0
+373.19025 1074.6
+378.13998 1533.4
+379.22208 7965.9
+379.72418 4251.4
+380.22491 1556.5
+380.73166 710.4
+385.25525 12295.3
+386.25867 2838.7
+387.27316 1122.6
+390.11627 563.1
+396.15045 1519.8
+397.15460 650.7
+449.41626 544.4
+468.95749 912.9
+469.28940 933.2
+472.26175 5583.4
+472.51288 7786.5
+472.76334 8790.9
+473.01343 4184.7
+473.26541 1586.2
+475.24918 1779.8
+475.49792 1032.5
+479.50595 827.3
+479.75485 1363.0
+482.65140 557.4
+482.66879 573.2
+484.32281 28040.5
+485.32608 9857.6
+486.32755 1672.4
+526.27185 1012.1
+526.60889 1380.3
+532.58386 2081.8
+534.53577 777.0
+534.78412 1229.1
+539.03857 1660.4
+539.28766 1461.3
+540.27405 1554.7
+540.60785 2510.8
+540.94330 2416.1
+541.27930 1055.2
+546.61505 2383.6
+546.94794 2146.4
+547.28278 1382.0
+549.14362 659.6
+550.94672 1948.3
+552.28339 783.8
+552.62372 758.9
+556.58740 678.6
+562.79071 987.5
+565.30493 1656.3
+566.54498 17840.2
+566.79596 23666.7
+567.04614 22492.8
+567.29742 17091.9
+567.54626 6454.9
+567.79712 3005.0
+568.29205 881.3
+569.65302 733.4
+571.04767 21336.5
+571.29871 26414.5
+571.54865 21313.4
+571.79919 15607.9
+572.04932 6971.1
+572.30096 3707.7
+574.81616 578.2
+584.30914 1235.0
+584.64972 709.3
+584.97894 1893.2
+586.30310 1314.2
+589.95795 2192.8
+590.29382 1916.9
+590.62628 843.0
+591.62573 694.0
+593.95551 820.3
+594.62683 921.4
+595.63464 4389.4
+595.97015 5378.0
+596.30402 4639.3
+596.63715 2331.0
+599.31946 9428.4
+599.56976 13876.9
+599.81940 11169.3
+599.95660 1643.1
+600.07074 8903.7
+600.31805 5475.6
+600.56848 1203.7
+600.62268 1484.5
+607.65631 4142.4
+607.99078 7146.4
+608.32520 4543.0
+608.65881 1256.8
+613.71436 559.3
+621.59180 745.9
+621.84991 871.4
+628.30475 1284.5
+629.34729 8569.5
+629.68176 9984.7
+630.01495 8788.3
+630.34747 7207.0
+630.68445 3504.2
+633.33350 2080.4
+633.66980 2230.3
+633.99884 1599.1
+634.33215 1825.7
+637.64795 1161.8
+637.98541 1098.7
+644.35370 13519.3
+645.35657 5971.0
+646.35229 1984.4
+650.32574 1406.1
+656.30164 3704.1
+657.30670 1544.5
+658.83344 993.6
+659.32855 1079.6
+671.00745 1247.0
+671.34418 1588.0
+671.67615 750.9
+673.26465 570.8
+675.71515 784.7
+676.03967 648.2
+676.62177 723.7
+686.33398 2399.4
+686.55896 664.7
+686.83368 1557.0
+687.34009 1874.4
+687.83441 901.1
+695.34058 1580.0
+695.84100 2987.2
+696.34863 979.4
+720.03656 665.0
+720.70764 645.0
+745.36115 1931.6
+745.85455 3379.8
+746.35645 2080.4
+746.86139 761.6
+751.88385 1223.7
+752.38446 950.2
+752.88104 918.5
+753.86792 1523.0
+754.36664 3810.9
+754.86456 3989.3
+755.36420 2355.4
+755.86853 1488.0
+757.43781 3603.4
+758.44067 2499.9
+762.87469 2889.1
+763.37610 3646.8
+763.87592 2605.0
+764.88641 586.4
+764.92792 566.3
+775.81506 594.9
+787.55493 700.7
+789.91559 990.4
+795.52942 1265.1
+810.41345 1486.8
+810.91199 2064.5
+811.41064 2269.6
+811.90698 1161.2
+819.41687 2613.8
+819.91754 3509.0
+820.41992 3092.6
+820.91705 1269.6
+825.41528 3622.4
+825.91907 4893.0
+826.41827 2821.2
+826.92657 1146.0
+876.46143 948.6
+884.93726 728.1
+892.95874 777.1
+893.45618 909.0
+1032.06641 618.4
+1040.88354 635.5
+1068.70813 693.4
+1087.75940 662.7
+1198.30566 3214.5
+1301.51013 626.2
+1353.15955 570.6
+1496.42847 652.8
+1525.39429 643.5
+1667.16479 855.2
+1694.56738 601.8
+1777.53955 1108.2
+1869.50977 618.5
+1871.65430 652.0
+1878.16394 956.6
+1878.44067 661.9
+1878.82874 1041.0
+1879.36108 6898.1
+1879.64697 17580.2
+1880.16833 3983.4
+1880.57068 1909.2
+1880.93494 839.0
+1881.36951 627.4
+1907.06555 7707.1
+1910.40259 671.3
+1918.68811 836.6
+1927.66895 563.2
+1930.60132 821.6
+S	1679	1679	1879.93299127
+Z	2	3758.018
+Z	3	5636.524
+517.77716 618.5
+532.60229 1952.9
+547.38574 646.3
+549.13684 926.5
+551.63898 601.5
+557.28162 614.7
+577.42999 630.8
+630.38074 919.5
+676.62720 763.6
+684.40704 638.0
+696.96545 599.4
+731.09613 749.3
+783.66821 653.6
+795.55157 1342.9
+897.05475 615.3
+906.40509 588.8
+985.56702 771.9
+1198.34644 2970.9
+1281.63794 662.0
+1297.12476 630.1
+1581.69128 625.6
+1708.34790 667.2
+1877.18591 628.5
+1878.48645 1130.9
+1878.95959 1045.8
+1879.25623 4353.6
+1879.50366 19231.9
+1880.23364 1261.4
+1880.50464 755.6
+1907.05945 7180.0
+1930.53320 1029.0
+S	1681	1681	463.5296196
+Z	4	1850.08718
+116.28571 41812.5
+117.16737 32447.1
+118.11659 39044.4
+120.73735 46024.7
+121.79420 162077.3
+122.98089 36547.5
+128.90271 38750.8
+162.94118 40855.5
+163.81104 37184.0
+165.77646 50325.0
+166.30965 47847.3
+174.46614 34582.3
+184.44997 33595.9
+187.14372 337644.0
+198.48407 38810.9
+198.89108 45347.5
+199.16008 72122.9
+199.22256 59657.8
+199.23404 61695.7
+199.24451 53189.9
+199.25755 207613.4
+199.28030 109618.7
+199.35551 78793.5
+199.37863 51982.2
+215.13850 136007.1
+233.16447 797751.4
+234.16838 99431.1
+253.15575 37185.7
+255.43814 38404.8
+259.69940 40111.4
+261.15948 195737.4
+289.17279 53984.8
+305.15091 42022.2
+314.20795 199549.5
+327.45966 43014.5
+329.16241 40550.7
+340.18668 37697.5
+342.28781 44564.9
+342.82236 42134.7
+350.27814 54932.5
+362.20633 112045.6
+389.47894 49872.2
+393.73029 140102.8
+393.98071 148818.7
+394.23233 90300.0
+398.48145 53909.4
+422.24976 57928.7
+426.24124 1609793.8
+426.57532 1141049.0
+426.90851 400273.0
+427.24182 53574.8
+429.28427 78745.0
+433.25278 582855.5
+433.75336 322566.7
+437.49600 179824.2
+437.63373 39635.9
+437.74567 128022.4
+437.99741 82862.8
+438.25012 55669.5
+461.46686 43064.7
+464.49295 39303.9
+469.84198 43709.7
+476.76529 74179.5
+484.27682 46271.8
+489.23026 40499.7
+524.58185 41328.4
+524.63788 136392.9
+530.64081 2010738.9
+530.97510 1336406.0
+531.30927 616629.7
+531.64307 182763.0
+532.59186 115773.7
+532.65405 62517.4
+556.34998 140311.5
+568.65796 115281.5
+568.98938 104859.2
+569.32477 58826.2
+574.35870 103943.8
+574.81061 270275.4
+575.31183 203764.4
+575.81543 108049.8
+582.99127 76315.9
+583.32697 146397.5
+588.59387 40264.9
+590.32764 74442.7
+590.82581 41029.3
+624.34467 250251.1
+624.84760 167102.0
+625.34851 66604.1
+626.92773 39585.3
+638.85785 1912654.8
+639.35938 1277633.4
+639.86035 614431.5
+640.36371 120506.2
+676.66290 74361.3
+688.39258 547900.3
+688.89349 365286.1
+689.39563 148891.3
+731.41168 82916.8
+731.91681 60483.9
+739.28680 42877.2
+809.48297 47167.2
+854.47107 102968.2
+858.08478 65667.3
+1019.72473 56401.9
+1039.60510 40617.9
+1127.50012 36526.3
+1148.60120 46731.4
+1198.32483 204026.7
+1206.84399 44151.3
+1226.15454 45587.8
+1327.90308 46309.7
+1536.08447 40653.5
+1684.16650 38859.7
+S	1682	1682	636.3465446
+Z	4	2541.35488
+174.03183 608.4
+186.07323 605.3
+188.21939 617.9
+188.23724 540.5
+188.27931 2229.9
+188.29385 2119.9
+188.30780 1796.3
+188.32060 1150.3
+188.36256 512.9
+193.58902 585.0
+199.17224 830.1
+199.27032 2970.3
+199.33884 824.9
+199.36792 1230.6
+206.31918 681.0
+232.11137 875.1
+233.16478 4151.2
+233.44850 544.9
+234.16687 678.1
+255.14542 692.7
+255.28313 696.0
+261.16025 715.4
+271.82248 771.3
+272.17145 4675.0
+281.00098 592.4
+288.20294 646.4
+322.67981 2505.7
+358.25226 536.1
+365.19232 782.9
+378.14056 1622.6
+379.22290 5302.6
+379.72382 1981.8
+385.25531 10515.9
+386.25934 2077.0
+387.27148 1123.6
+396.14978 952.1
+412.62442 605.5
+458.83142 600.5
+484.32330 30628.5
+485.32632 7629.2
+503.06064 559.9
+516.31287 1592.0
+522.64709 560.7
+532.58075 1942.1
+543.28723 4132.4
+544.29205 1398.2
+545.62769 612.6
+548.76996 1139.2
+549.13928 705.6
+549.34686 722.9
+556.78918 1290.7
+557.28259 1098.4
+562.31921 711.5
+565.30554 1096.5
+565.80219 781.3
+570.82782 3232.3
+571.32886 2164.1
+578.32550 1102.4
+582.29327 1166.9
+590.36426 5182.5
+591.36743 1584.1
+595.63660 2555.7
+595.96637 1505.4
+596.30231 1453.4
+597.33191 1049.2
+599.57117 1335.9
+599.82581 697.6
+612.83752 1986.5
+613.34045 1587.4
+613.84106 1093.4
+615.54230 1326.2
+615.82391 695.7
+618.32147 1897.8
+619.27979 677.9
+619.54358 768.7
+620.37958 687.3
+621.84467 821.9
+656.30396 3258.3
+657.30786 1326.0
+669.03296 1363.8
+669.36469 3211.2
+669.69928 2231.6
+675.03253 2478.8
+675.36926 4492.9
+675.70227 3806.5
+676.02600 1481.8
+676.37292 789.3
+676.64337 1306.1
+677.34155 1999.9
+677.67749 1367.0
+686.67499 3787.3
+687.00793 4414.4
+687.34137 2322.6
+687.67590 1220.2
+695.37518 1258.7
+695.87799 1980.0
+704.69977 778.4
+710.70428 855.8
+712.04681 2392.7
+712.37756 4175.1
+712.71350 2203.4
+713.04633 980.0
+718.04926 1715.1
+718.38428 2882.4
+718.71783 1036.6
+719.06281 668.6
+719.69971 2660.1
+720.02960 2348.1
+720.36908 3345.7
+723.33301 3210.1
+724.33752 3040.1
+731.88531 720.8
+732.33649 632.3
+736.15063 633.9
+745.35370 868.3
+747.39026 894.4
+747.88068 824.4
+749.38983 1101.7
+749.72284 1007.9
+750.05688 1420.9
+750.38977 811.4
+751.39948 924.3
+751.89844 1142.2
+754.36548 2220.7
+754.85913 1354.0
+755.05878 17819.9
+755.39355 26523.2
+755.72711 20398.8
+756.06097 12253.9
+756.39850 2996.8
+757.43762 12716.7
+757.72479 1761.7
+758.06378 1117.0
+758.27234 621.4
+758.44037 5423.5
+759.43665 1622.7
+761.06238 19228.6
+761.39648 25839.1
+761.73047 22187.1
+762.06427 11489.1
+762.39935 3670.4
+762.88043 797.6
+763.37378 1331.5
+763.87073 745.5
+764.34937 751.3
+782.67212 741.3
+784.01880 725.1
+787.64478 696.7
+788.40851 701.8
+788.90778 1924.1
+789.41211 1485.8
+789.91779 1408.6
+792.72754 839.4
+793.42413 2015.4
+793.76099 3102.1
+794.09528 1682.1
+794.42694 1011.7
+794.76727 773.5
+795.57166 1023.0
+798.75708 5386.8
+799.09204 7105.5
+799.42566 7491.7
+799.75922 5131.3
+800.09210 891.5
+801.90369 1115.7
+808.44800 758.2
+808.93457 732.0
+810.41699 1761.1
+810.91327 3379.1
+811.41418 1457.3
+819.41644 2255.5
+819.91705 3069.0
+820.41504 1535.4
+825.41730 7123.8
+825.91864 8755.3
+826.41815 4447.4
+826.92371 1610.4
+828.37225 3297.5
+828.87195 3406.5
+829.37329 1183.7
+834.43835 971.5
+856.96301 1015.1
+876.93408 981.3
+879.45520 900.3
+881.95624 3423.1
+882.45953 3567.3
+882.95825 2915.8
+883.46875 938.1
+884.43719 10517.5
+884.93921 9993.8
+885.44067 10178.9
+885.94366 2563.9
+886.45441 874.8
+892.95087 13131.8
+893.45270 13994.5
+893.95306 7378.0
+894.45532 3223.7
+894.99243 1545.6
+895.49213 1984.7
+895.98590 1310.6
+899.43292 1219.3
+899.93274 1675.5
+900.43488 1105.4
+902.43964 1944.2
+903.43610 1940.0
+940.48907 1799.9
+940.99359 2391.2
+941.48761 1100.8
+943.51782 7517.9
+944.02008 11055.5
+944.52161 9719.5
+945.02240 2411.1
+945.51581 926.1
+948.97131 1267.5
+949.49329 5540.4
+949.99390 6529.7
+950.49719 5270.0
+961.97382 1721.8
+962.47748 2188.4
+962.97156 1651.2
+963.48364 890.6
+982.44745 849.1
+1005.52130 1152.9
+1006.00854 824.8
+1030.01233 763.9
+1064.95947 635.2
+1079.54468 770.4
+1129.59363 878.1
+1198.29297 3459.5
+1200.04761 715.3
+1489.17212 680.5
+1614.66211 725.7
+1697.92090 978.3
+1802.35608 811.6
+1860.12317 665.0
+1878.13000 793.5
+1878.68774 971.5
+1879.12793 2664.4
+1879.53430 19424.2
+1879.88306 2714.6
+1880.12854 1151.9
+1894.99011 686.9
+1895.35022 624.6
+1907.00293 7229.9
+1930.54980 1312.2
+S	1683	1683	509.2790606
+Z	5	2541.35618
+145.30214 2336.7
+168.89650 2600.9
+171.73315 2940.5
+173.53542 2477.1
+182.78253 2579.8
+185.65390 2515.7
+185.75970 2819.1
+188.25920 3896.9
+188.26863 5445.9
+188.28001 4569.4
+188.29111 5942.0
+188.30510 5634.0
+188.31567 4252.0
+188.32968 3680.5
+198.89125 3766.9
+199.17143 4390.0
+199.25027 6023.5
+199.26120 5098.8
+199.26955 14230.0
+199.29390 2491.0
+199.36713 4945.1
+202.09196 2846.1
+220.67128 2696.2
+225.76718 2579.4
+233.16449 28303.8
+233.57394 3429.5
+236.42693 3025.3
+239.49568 2383.9
+240.12997 2804.6
+244.29633 2614.6
+245.97327 2901.3
+249.96083 3254.4
+255.27489 2813.5
+255.29204 3674.1
+259.10294 2649.4
+259.39551 3581.5
+260.46027 2659.8
+261.15891 6102.2
+267.19949 3276.6
+269.37796 2775.1
+272.17197 10336.4
+274.12177 4542.3
+275.81683 2509.6
+280.99011 2651.4
+288.20267 5575.9
+310.15729 2731.0
+313.67542 3234.9
+322.68054 13538.8
+323.18478 4826.7
+342.27176 2342.5
+347.38159 2861.4
+348.22882 2382.3
+356.65466 2481.0
+359.71161 2624.8
+376.03958 2705.3
+379.22220 28039.8
+379.72418 9899.4
+385.25485 29799.2
+386.25705 4810.1
+387.26379 3730.6
+396.14981 6205.2
+409.61990 3303.2
+426.11807 3402.9
+427.54434 4103.2
+441.26764 7135.4
+472.26157 27695.8
+472.51279 19248.9
+472.76456 8668.1
+473.01395 2941.4
+480.30746 4168.7
+482.65695 3363.6
+483.94250 3064.2
+484.32285 66718.1
+485.32614 12084.5
+492.23166 8096.3
+492.73572 4399.5
+526.27667 3600.5
+532.61096 9084.4
+533.02789 3386.2
+538.78961 2907.0
+539.27008 2723.5
+540.60718 4514.3
+540.94446 4921.1
+546.61267 4027.8
+546.94830 5822.2
+547.34564 15479.0
+547.84601 6565.5
+549.74548 7235.2
+550.24719 3823.5
+550.94849 5006.3
+554.34467 2714.3
+557.29041 2797.8
+557.72461 2841.8
+562.28900 3980.1
+566.54541 61331.9
+566.79602 80997.0
+567.04608 43944.9
+567.29565 6670.8
+571.04791 65527.3
+571.29883 86740.3
+571.54889 56497.6
+571.79993 13737.7
+573.42273 2669.1
+589.95398 2964.6
+595.63489 16934.1
+595.97009 10520.9
+596.30493 6613.5
+599.31854 25560.3
+599.56970 44083.8
+599.81927 28067.5
+599.95740 5506.9
+600.07092 10694.2
+600.29785 4949.1
+622.31311 4686.4
+629.34650 25475.6
+629.68005 33238.6
+630.01544 11784.3
+630.34949 4080.9
+632.98242 4202.6
+633.32843 14207.6
+633.66833 9025.1
+637.63367 2716.1
+644.35297 34674.3
+645.33099 11185.2
+645.83899 10461.6
+656.30078 10084.7
+676.64020 4021.8
+686.33966 8179.0
+686.83728 4535.7
+691.74182 3772.1
+695.33691 4703.6
+695.84308 5254.4
+703.86536 5002.5
+708.83362 3482.7
+745.36066 9356.6
+745.84906 7255.2
+746.34076 3443.6
+751.88354 5108.4
+752.37775 3371.1
+753.86829 7318.4
+754.36353 12825.6
+754.86340 11742.5
+757.43695 10151.3
+758.43512 5940.1
+762.87415 6148.8
+763.37421 7980.4
+763.88599 4334.2
+780.17328 3390.1
+795.56012 3682.1
+810.40845 5639.4
+810.90222 5333.1
+811.41699 3708.0
+819.41602 9754.7
+819.91864 8362.1
+825.41589 14350.4
+825.92047 11890.0
+826.41028 5200.3
+882.44794 3472.5
+892.78333 3408.8
+892.94897 3937.1
+1025.48425 2911.9
+1095.80896 2737.7
+1198.37256 14606.2
+1254.82434 2851.0
+1268.15552 2700.0
+1382.42261 3682.7
+1386.86401 3050.9
+1495.47803 3081.2
+1525.42078 3437.7
+1703.01111 2895.5
+1715.01208 3076.1
+1768.73987 2686.1
+1777.68005 4814.2
+1878.72058 4188.8
+1879.54236 93988.1
+1880.06238 6736.8
+1906.56555 5364.0
+1906.81519 4962.2
+1907.10583 33029.2
+1964.49622 3171.1
+S	1685	1685	1880.03940793
+Z	2	3758.231
+Z	3	5636.843
+532.53082 658.5
+532.58270 1971.3
+570.56665 705.4
+625.53870 590.4
+630.42401 925.2
+653.28162 846.8
+656.01453 659.5
+676.64752 737.6
+792.15576 593.3
+795.55194 807.7
+999.51404 628.5
+1061.37378 662.9
+1198.30237 3078.6
+1297.27026 542.7
+1353.08044 659.0
+1525.45923 868.1
+1537.22021 586.3
+1562.87744 658.9
+1602.27380 650.8
+1629.94739 536.8
+1806.31702 654.3
+1836.27966 612.8
+1844.70251 575.9
+1877.46606 702.7
+1878.63586 1064.3
+1879.03796 2089.8
+1879.54736 19397.4
+1880.04712 1666.2
+1880.42542 788.2
+1880.67834 1108.2
+1881.11523 693.8
+1907.03308 7375.5
+1907.35876 727.2
+1930.60010 914.8
+1932.00574 804.0
+S	1686	1686	416.5001996
+Z	4	1661.9695
+106.95347 39658.4
+107.56734 37595.5
+120.58691 38719.8
+120.63237 41370.7
+120.77174 41459.0
+121.79391 147061.3
+122.51241 38504.1
+131.65091 37613.2
+134.82011 33103.3
+148.30913 45082.4
+165.77489 61637.9
+169.48770 70809.7
+171.63748 44227.1
+173.74889 38241.9
+175.86516 42125.4
+182.77673 41320.5
+199.17978 597631.6
+199.23882 43449.8
+199.24971 86383.8
+199.26796 194924.0
+199.28139 91586.6
+199.30617 44136.8
+199.36534 52572.8
+200.05168 40023.9
+200.18349 54702.2
+204.56166 51592.6
+209.12848 122829.8
+217.81902 35014.7
+226.15445 1078446.5
+227.15924 85851.4
+227.17506 220327.7
+236.75711 41412.4
+244.16496 4191782.0
+245.16859 448612.2
+254.12047 42911.2
+255.27592 37872.7
+266.31424 39331.4
+271.42514 44350.0
+280.17392 45050.0
+285.79669 38513.7
+288.60571 39306.1
+321.86438 41042.5
+350.28418 55402.1
+360.07727 45528.0
+381.34869 45888.3
+425.23718 105574.1
+433.74628 64784.4
+435.26538 62803.5
+438.30447 47248.9
+443.30679 42505.8
+446.60950 34351.3
+464.27972 209829.7
+464.61215 220910.5
+464.94189 66287.1
+467.60513 137039.0
+467.93338 330447.7
+468.26813 335394.6
+468.60141 131399.1
+468.94098 50762.5
+469.89200 44031.7
+471.58817 42105.5
+473.07339 57642.3
+473.26834 283328.1
+473.40466 51114.9
+473.60840 11100743.0
+473.94266 8699874.0
+474.14804 43330.4
+474.27707 3522414.8
+474.48932 49955.2
+474.61130 848512.3
+474.94687 86903.3
+477.90591 38516.9
+479.27087 379705.3
+479.60544 262069.7
+479.93994 107212.6
+482.61719 37286.2
+482.63681 39239.6
+492.29083 77462.3
+510.20352 44062.7
+516.96576 431651.4
+517.30066 301682.3
+517.63556 183026.8
+532.56989 140036.5
+532.79614 221329.3
+533.29639 68194.1
+553.33319 353796.7
+554.33746 119690.1
+579.30890 59847.6
+579.80212 49087.7
+582.32910 49603.9
+587.82019 1205011.8
+588.31476 1587137.9
+588.81439 906880.6
+589.31561 334147.6
+589.81732 90998.6
+596.82513 3001345.3
+597.32678 2055229.5
+597.82770 645889.5
+598.32935 146750.9
+602.86334 143238.7
+603.36316 114989.5
+623.29199 108320.1
+624.29694 58824.6
+630.38867 47668.1
+639.37567 41139.4
+640.31866 57547.1
+652.39655 49404.1
+652.89746 108273.3
+653.36743 1516463.5
+653.86865 1141611.6
+654.37079 536792.2
+654.87354 152545.7
+660.37714 83807.2
+666.41760 133204.0
+667.42303 45090.8
+770.68091 41015.3
+780.46503 64371.1
+795.54926 44837.2
+858.01300 45949.8
+866.48468 88249.2
+928.52612 44393.3
+940.11163 36025.7
+1027.19446 47388.4
+1057.24451 58454.8
+1198.27954 233874.7
+1216.66016 44650.8
+1371.66284 36763.3
+1525.36511 52615.3
+S	1687	1687	463.5225096
+Z	4	1850.05874
+121.79522 12119.0
+125.79684 2520.7
+132.58908 2537.1
+140.62773 3355.2
+146.92439 3290.5
+147.61626 3320.3
+168.42529 2877.8
+176.05150 3117.1
+179.27744 2744.5
+187.14366 37334.6
+188.14706 4553.6
+198.88994 5123.5
+199.16246 3180.0
+199.26071 13067.5
+199.28305 6512.0
+199.35893 6172.6
+215.13840 22238.7
+223.23193 2956.0
+230.67708 2831.8
+233.16437 90420.1
+233.58234 4635.0
+234.16750 16631.2
+254.78809 2806.0
+255.29611 3864.1
+261.15897 18466.5
+262.22583 3091.8
+269.18524 9972.7
+289.16998 7280.1
+292.85721 3185.6
+314.20676 22549.5
+327.59000 3359.2
+342.28210 4321.0
+344.19501 6909.6
+362.20712 12334.6
+369.70770 3281.3
+381.37027 4739.9
+384.72922 4262.4
+393.72980 12681.1
+393.98029 10287.0
+394.23099 11480.5
+398.73550 4300.1
+410.01251 2852.5
+410.90002 3565.4
+416.56558 5992.6
+416.90018 6322.6
+420.23795 7556.0
+420.57315 7185.5
+422.00143 8297.8
+422.25055 13776.3
+422.50342 11174.8
+426.24115 146524.8
+426.57532 182651.5
+426.90958 69565.1
+427.24365 19397.6
+429.28195 6303.2
+433.25275 77098.1
+433.75418 45496.3
+434.25519 9981.9
+437.49585 14968.2
+437.74625 22009.0
+437.99765 17750.5
+438.24991 5003.3
+444.25125 4051.5
+445.20621 3181.9
+484.28210 4490.6
+489.79309 4663.0
+490.76608 3106.9
+496.95749 6160.3
+497.29364 8223.7
+524.63916 3356.4
+524.97064 6919.7
+525.30267 3728.2
+530.64063 155228.3
+530.97510 173859.9
+531.30920 90829.3
+531.64331 21089.9
+532.54193 8679.9
+546.81177 4412.2
+547.31403 4607.4
+553.98364 2696.5
+554.78339 3457.0
+555.31165 7746.8
+555.64655 5477.4
+555.98779 4871.1
+556.34741 14403.5
+557.35333 5953.4
+560.95276 3628.4
+568.65308 12969.0
+568.98956 18388.2
+569.32629 15928.3
+569.67059 3848.4
+574.35596 11357.5
+574.81018 40336.8
+575.31213 41122.2
+575.36133 5519.8
+575.81348 16057.4
+582.29254 12740.4
+582.79303 5487.8
+583.32550 14452.4
+583.65808 7831.1
+590.32922 8755.0
+590.83246 7278.1
+591.33331 3969.6
+600.11627 2762.6
+602.84021 5180.4
+615.34100 4079.7
+615.83807 5934.9
+624.34442 28457.3
+624.84637 30024.5
+625.34637 12532.3
+638.85803 226144.7
+639.35913 257065.3
+639.86047 104028.2
+640.36194 25871.6
+676.62659 5693.2
+680.93964 3100.6
+682.60602 2915.3
+688.39142 55002.8
+688.89313 68766.1
+689.39526 29614.3
+689.89386 5865.4
+731.41339 7122.9
+731.90967 9653.6
+736.92352 2851.8
+737.40417 8467.3
+738.40723 5066.8
+783.20105 3037.4
+795.55634 3824.2
+814.35321 3162.4
+845.20795 3359.6
+854.47803 14436.4
+855.47498 7212.0
+1057.25208 4064.4
+1126.23315 3038.1
+1135.61560 3437.6
+1148.61743 6392.3
+1149.61792 6732.9
+1198.21765 15743.5
+1525.45740 4050.6
+1582.40051 3287.3
+1633.71399 3420.2
+1659.21265 3272.0
+1777.48718 4317.3
+S	1689	1689	416.5058146
+Z	4	1661.99196
+102.47525 2328.6
+105.12331 2095.9
+106.89993 2309.4
+108.71407 2147.6
+109.30202 2101.6
+110.53752 2085.2
+112.33535 2409.0
+116.41476 2485.2
+121.79697 9151.3
+135.05737 2473.3
+137.88312 2215.4
+146.31471 3343.7
+150.12680 2052.9
+155.24356 2394.3
+158.92287 2622.4
+174.07335 2288.6
+181.13315 3549.4
+188.15877 2529.3
+188.28395 9445.9
+188.29710 9785.7
+188.32468 4456.6
+188.37659 2160.8
+189.25368 3124.4
+192.40094 3137.2
+195.38132 2583.3
+199.14938 2641.7
+199.18013 47951.2
+199.19310 3003.5
+199.19984 2864.0
+199.22919 3009.8
+199.27008 10448.0
+199.28110 6346.1
+199.30348 3017.1
+199.31668 3430.5
+199.35452 2754.9
+199.36685 4499.6
+200.18359 5921.2
+206.60954 2543.2
+209.12827 13578.5
+209.95515 2343.9
+215.10239 3684.1
+226.15469 79125.4
+227.13876 3173.9
+227.15741 7338.2
+227.17519 19098.3
+228.14589 2066.2
+228.37894 2107.4
+244.16515 295419.5
+245.16846 31849.8
+251.12001 3660.2
+278.18317 2667.8
+306.18607 4469.6
+319.16458 7799.5
+319.66602 4272.2
+327.42657 2337.3
+343.08221 2105.8
+350.96283 2493.4
+355.22812 2637.7
+358.01172 2466.0
+361.67422 2383.3
+386.95859 3550.5
+394.06256 2671.4
+405.97559 2512.3
+425.23932 9063.2
+425.93582 5204.9
+426.27176 3395.4
+427.57059 2458.0
+433.74655 6027.2
+435.92291 3591.2
+437.80688 2289.1
+458.60172 3949.2
+459.26184 2445.6
+464.27975 21203.2
+464.61261 13535.9
+464.76990 2845.6
+464.94543 5105.0
+467.60507 10467.7
+467.93396 30079.1
+468.26843 25016.0
+468.60297 12150.9
+471.94858 2628.4
+472.51981 3385.5
+472.85071 3391.2
+473.07135 3170.4
+473.26938 30644.7
+473.57083 2935.0
+473.60861 857469.7
+473.75854 4318.9
+473.94284 627842.2
+474.15091 4930.8
+474.27716 285754.4
+474.48578 4927.8
+474.61136 80406.3
+474.69965 5672.2
+474.94626 13366.4
+479.27219 22136.7
+479.60559 16589.9
+479.94031 11156.1
+481.74548 15528.6
+482.24844 5911.5
+492.29269 6301.5
+516.96680 28187.4
+517.30066 27656.3
+517.63574 12978.9
+517.97229 5189.1
+532.60303 5952.9
+532.79657 12648.6
+533.29742 8890.3
+540.27039 4024.4
+549.17633 2466.5
+553.33270 33724.5
+554.33661 7315.4
+578.82373 2630.1
+579.30511 2948.7
+582.82721 6933.1
+583.33234 3617.4
+587.82043 114400.6
+588.31482 137159.9
+588.81494 69934.2
+589.31512 22473.8
+589.81702 6391.6
+594.35144 3233.2
+594.85590 2387.0
+596.82538 238709.5
+597.32721 168400.0
+597.82837 62748.6
+598.33002 13902.3
+602.86176 10051.0
+603.36316 11555.6
+603.68494 2841.3
+604.27686 4804.4
+618.83936 3166.5
+623.29120 11086.2
+624.29303 4193.4
+630.43060 2426.1
+639.36127 3229.7
+640.32141 4200.1
+652.39227 8433.8
+652.89813 9566.9
+653.36749 137088.5
+653.86890 93551.3
+654.37134 38338.3
+654.87262 12461.6
+660.37579 8400.9
+660.87378 3763.9
+662.29779 2212.9
+666.41827 11790.3
+667.41846 6421.8
+668.38965 3800.8
+676.63818 3279.0
+731.16815 3290.7
+753.40472 7775.0
+754.40820 2699.7
+780.45862 6504.4
+795.55878 5487.3
+866.48016 3565.4
+927.52899 4362.5
+949.94690 2510.3
+950.00647 2552.1
+1057.22925 3089.8
+1198.34656 12870.3
+1198.83887 2854.3
+1442.04236 3165.4
+1457.83923 2713.6
+1500.76733 2423.1
+1525.48706 2800.2
+S	1690	1690	417.0078246
+Z	4	1664.0
+107.69790 515.5
+108.32707 522.7
+113.32968 562.8
+115.27885 626.6
+120.67120 569.3
+121.79584 2281.5
+122.84418 545.2
+128.58205 784.2
+129.83478 629.4
+130.05116 493.7
+135.06805 546.5
+144.30565 598.8
+146.24013 558.5
+147.11272 1632.1
+151.75456 656.0
+161.41843 613.6
+163.13824 575.4
+165.77692 620.2
+175.11961 552.7
+180.39368 561.1
+181.13382 1205.8
+183.07318 558.7
+198.88933 896.3
+199.16844 1094.9
+199.18031 23231.4
+199.23878 791.4
+199.25130 1672.6
+199.26610 2826.8
+199.28020 1017.5
+199.31679 593.8
+199.33192 714.5
+199.34276 638.3
+199.36421 1048.0
+200.18336 2558.6
+209.12831 5698.0
+215.09895 654.9
+222.64696 555.3
+226.15486 37844.7
+227.13914 3467.4
+227.15828 3828.7
+227.17537 9361.5
+228.17998 607.5
+233.58626 800.7
+244.16544 141559.8
+244.56721 636.3
+245.16896 16914.7
+246.17119 880.8
+249.09821 1169.4
+272.35950 606.6
+280.84512 589.4
+306.18692 1930.5
+306.68863 1069.3
+308.91803 675.3
+331.18018 671.1
+338.81122 561.1
+351.08710 946.2
+353.41501 531.7
+354.69382 1615.5
+355.19843 766.1
+369.19437 728.9
+375.19955 575.7
+377.20514 2083.9
+377.70563 874.9
+385.25632 1467.1
+387.21552 953.0
+387.46301 903.1
+391.23486 657.2
+396.16696 920.5
+396.94608 574.6
+397.56619 612.2
+398.57004 510.5
+414.00842 576.6
+418.92545 705.3
+422.65540 526.0
+425.23819 5542.7
+425.93573 5217.6
+426.24042 1609.1
+426.26923 3301.0
+426.60074 674.8
+433.74646 2065.7
+434.24893 1862.5
+435.26688 4105.8
+435.60260 1121.5
+436.25217 690.2
+438.30670 1591.2
+440.58936 686.8
+441.25375 653.4
+446.25739 574.4
+447.27161 551.0
+449.26773 1044.0
+449.60229 679.5
+454.26959 770.6
+458.27594 678.9
+458.60205 2837.3
+458.93518 2268.8
+459.26352 702.4
+464.28009 7355.4
+464.61234 7650.0
+464.77518 1131.8
+464.94647 3577.7
+465.28268 1495.6
+467.60602 6329.7
+467.93533 14649.8
+468.26877 10154.8
+468.60312 5405.7
+468.93851 2682.1
+471.80399 647.9
+472.35413 837.1
+472.52243 2269.6
+472.66949 758.9
+472.71249 856.4
+472.85419 2041.5
+473.06784 1669.7
+473.26993 9607.7
+473.39838 1375.8
+473.43954 814.2
+473.54675 1176.6
+473.56906 1415.2
+473.60883 423856.7
+473.66354 1049.2
+473.73154 1364.7
+473.84244 663.2
+473.86002 656.1
+473.87857 1127.7
+473.89957 1360.9
+473.94278 331881.5
+474.01993 1063.6
+474.03284 1011.7
+474.06577 946.7
+474.08234 844.3
+474.15076 2338.0
+474.27710 149628.3
+474.48703 1514.5
+474.51477 566.6
+474.61163 49144.5
+474.65314 906.4
+474.70129 2304.5
+474.83487 771.5
+474.94647 13470.6
+475.03336 1847.5
+475.23782 772.9
+475.27988 2405.3
+475.37100 775.0
+475.42642 730.3
+476.77841 860.2
+478.12402 646.8
+479.27243 13300.8
+479.60641 10185.8
+479.93997 3705.8
+480.27145 1223.6
+482.67651 759.2
+484.32318 4067.1
+492.29227 3547.1
+493.29721 1028.9
+497.79141 670.8
+502.63293 549.1
+516.96704 13355.0
+517.30139 13945.4
+517.63599 6101.7
+517.96960 2011.5
+527.23376 922.0
+532.61945 1949.3
+532.79742 8465.1
+533.29810 3589.3
+533.79895 2010.5
+538.26276 926.0
+549.17969 913.0
+553.33398 16555.5
+554.33667 4514.8
+555.34021 1329.1
+562.30200 708.1
+562.80145 1108.0
+570.30096 578.0
+573.82495 1069.0
+574.32074 1500.0
+578.81573 1440.3
+579.30914 3368.7
+579.80597 2878.7
+580.29974 1419.0
+580.81354 657.9
+581.09314 627.1
+582.32953 805.9
+582.82965 3458.8
+583.32983 1930.6
+585.84418 882.2
+587.82086 65377.1
+588.31598 86204.6
+588.81610 46519.7
+589.21790 637.8
+589.31659 15515.6
+589.81940 2724.9
+594.34692 1544.8
+594.84637 1059.0
+595.29321 652.7
+596.82593 128199.9
+597.32758 86506.2
+597.58600 810.3
+597.82880 31699.9
+598.33057 7967.8
+598.82928 1683.3
+602.32806 674.3
+602.86249 6386.1
+603.36328 3580.0
+603.86273 1965.4
+604.03381 721.3
+618.84326 1555.0
+619.34277 1685.9
+622.31024 1377.8
+623.29156 6303.4
+624.29260 2087.6
+635.84277 1829.5
+638.87158 969.2
+639.37006 1460.5
+640.32037 2825.9
+641.32214 869.3
+644.85663 2493.4
+645.35754 1819.0
+645.85577 970.3
+651.85474 683.9
+652.39569 3581.6
+652.89850 3897.5
+653.36786 74609.9
+653.86914 59822.3
+654.37128 25543.0
+654.87408 6085.8
+655.37262 1803.3
+658.85748 678.5
+659.35675 849.0
+660.37457 3176.2
+660.87744 1946.1
+661.37457 911.1
+666.41754 5574.4
+667.42145 2478.2
+668.39856 1191.5
+676.65253 936.4
+750.39093 948.4
+751.39020 1535.0
+753.40326 4295.2
+754.40869 1845.8
+768.41406 837.4
+780.45984 3439.8
+781.46082 1676.5
+834.68481 692.9
+866.48657 3320.2
+867.48920 1438.7
+927.52600 2680.4
+928.52338 1304.7
+952.91455 672.4
+1080.74219 653.3
+1198.38696 3139.4
+1276.45435 615.9
+1283.72668 634.2
+1348.13647 610.4
+1399.84631 682.0
+1525.49255 718.1
+1558.46936 622.4
+1645.22546 718.3
+1677.66382 693.7
+S	1691	1691	513.6938246
+Z	3	1537.806
+Z	2	1025.54
+136.65279 549.0
+153.74100 558.7
+157.06001 1518.8
+160.63354 566.1
+161.74405 580.9
+165.37823 549.4
+175.07126 1212.3
+188.26483 1024.5
+188.27603 826.1
+188.28514 1148.2
+188.29601 1195.8
+188.30414 1027.5
+188.30933 934.0
+188.32434 652.8
+189.09351 559.5
+198.89009 762.9
+199.15189 702.1
+199.16235 976.8
+199.24568 1363.1
+199.26559 2013.6
+199.28590 574.1
+199.36398 669.0
+199.38235 706.2
+200.79321 721.9
+201.03709 556.4
+203.06531 1147.8
+208.54707 564.2
+232.89566 623.5
+255.29594 718.1
+258.15091 923.8
+271.66299 638.7
+286.84375 587.2
+288.20303 1772.2
+290.38416 665.0
+299.09787 758.2
+300.10159 666.9
+302.43381 614.5
+305.19492 1520.9
+306.72498 513.6
+350.29276 632.1
+360.21829 1818.6
+360.70837 2042.7
+360.93048 555.8
+361.21085 678.3
+369.22375 4448.6
+369.72522 1324.0
+371.82263 639.6
+373.95288 590.8
+376.11386 606.3
+379.08646 595.0
+397.09869 2131.5
+414.12305 846.7
+415.10764 1201.8
+424.24759 4936.7
+424.73697 5954.3
+425.25146 4895.8
+425.74231 764.5
+426.26291 850.4
+432.13501 1993.2
+433.25333 9259.5
+433.75360 4313.1
+439.36310 687.1
+440.55975 1284.3
+442.49524 629.5
+446.23672 1197.1
+446.57016 1637.9
+458.22110 845.1
+462.25287 586.2
+472.27689 688.7
+472.77402 929.4
+480.13708 1291.6
+487.24927 1054.2
+487.90543 1613.9
+489.79459 30599.3
+489.90414 1153.1
+490.23596 1769.5
+490.29575 17969.7
+490.56458 1548.9
+490.79657 2481.1
+495.90656 8746.9
+496.24048 7782.7
+496.29730 8201.1
+496.57285 3537.6
+497.30035 1629.1
+510.28992 548.0
+526.14117 5981.6
+527.14307 1120.3
+532.63342 1436.4
+544.14941 2003.5
+545.31024 4394.2
+545.81189 4253.2
+546.31372 765.5
+554.31543 18939.7
+554.81647 13251.8
+555.31659 1968.8
+561.17609 667.0
+562.31207 1515.5
+570.46674 642.9
+582.29199 5275.8
+582.79266 4623.5
+583.29382 1151.7
+593.23700 616.9
+594.31665 606.4
+600.31989 5799.4
+600.65405 5989.6
+600.98804 5116.5
+601.32251 1595.5
+602.82520 858.2
+603.32104 841.2
+605.29529 689.5
+609.38092 2445.4
+610.38617 884.9
+610.63129 1183.4
+611.23108 908.2
+611.29926 1195.5
+611.82861 20596.1
+612.33008 17814.8
+612.83124 4252.6
+621.33557 661.7
+623.34979 2083.5
+623.84656 980.3
+629.32831 2991.4
+629.66327 4229.0
+629.99725 2916.2
+630.32886 941.1
+630.41681 723.7
+638.83496 1388.9
+639.22540 2435.9
+639.34088 812.3
+640.22559 746.6
+651.33539 1096.3
+653.30853 613.2
+657.22540 619.9
+659.84595 1014.2
+660.33734 11554.2
+660.83887 10208.9
+661.34222 2482.5
+668.85004 79249.0
+669.35156 70662.0
+669.85291 17647.4
+674.95422 567.0
+675.30280 1244.8
+675.63367 1804.7
+676.65723 892.8
+693.34802 1622.6
+708.84631 1539.5
+709.34540 2636.6
+717.85278 2124.1
+718.35059 2348.8
+726.36401 7593.5
+726.86523 6559.0
+727.36664 1825.9
+731.35248 1119.6
+731.84930 5581.4
+732.35223 3514.7
+732.85217 1330.0
+737.43933 1933.5
+738.44055 1057.2
+752.11743 719.0
+763.80414 1056.9
+764.24567 1019.2
+764.31165 957.7
+795.55518 942.3
+895.35297 655.5
+897.10681 548.3
+902.24237 648.2
+1077.06360 587.6
+1085.92432 637.8
+1112.41479 710.9
+1123.90967 624.4
+1152.65686 928.7
+1188.27222 831.4
+1198.42285 3099.1
+1235.08630 598.5
+1325.01343 676.6
+1345.44543 653.1
+1525.46277 778.4
+1536.17444 618.2
+1777.53101 742.5
+1878.66455 1354.8
+1879.12463 1859.9
+1879.58411 18461.0
+1880.00940 2896.4
+1880.41687 1318.6
+1880.69263 565.7
+1882.05823 795.0
+1905.84082 613.8
+1907.13586 7274.3
+1930.64917 918.5
+S	1693	1693	764.7258246
+Z	2	1527.604
+Z	3	2290.902
+222.81329 551.5
+243.72398 631.4
+260.10602 925.2
+268.16486 1142.7
+271.85321 622.6
+272.17130 5854.9
+273.17599 979.9
+282.26987 638.0
+324.98843 534.9
+344.30884 588.8
+348.41492 733.5
+356.78146 623.6
+359.17471 2732.4
+363.42722 593.6
+373.18970 2437.3
+375.16278 589.8
+381.24921 2914.5
+385.25513 4434.8
+387.11127 565.8
+403.23172 822.7
+413.22452 1089.1
+434.45877 631.5
+444.26392 1161.8
+458.24475 1187.4
+461.67050 645.6
+464.26993 831.1
+472.25803 8266.4
+473.26117 1956.4
+478.76004 1007.7
+480.31680 2565.8
+482.65387 712.5
+484.08542 659.2
+484.32187 825.6
+492.23148 1804.8
+526.30603 2512.9
+531.28632 886.4
+532.62756 1592.4
+540.29321 682.6
+543.33038 3924.7
+544.25562 744.8
+544.33301 1004.0
+557.25781 1385.8
+557.75684 1225.8
+561.76685 2091.1
+562.26758 1091.5
+563.75946 1768.7
+564.26221 1627.9
+571.32532 13668.9
+572.32965 3475.7
+575.04425 632.1
+587.40973 646.5
+592.79321 6803.3
+593.29639 6021.5
+593.79962 3288.3
+594.30536 1722.5
+594.80542 920.5
+597.79169 675.0
+598.29071 1060.9
+605.78583 938.5
+606.28937 2057.0
+607.29285 808.3
+608.30768 1010.2
+609.78741 3486.6
+610.28906 1028.6
+613.76959 965.0
+614.26947 1892.3
+614.78925 2513.1
+615.29034 3192.5
+615.79163 1498.7
+619.15662 2549.1
+620.33594 1515.4
+622.77246 912.7
+631.78168 4353.1
+632.28326 3439.3
+632.33527 2572.5
+633.33575 1230.0
+637.28851 835.9
+650.15979 609.6
+653.29791 1291.5
+657.84357 4460.1
+658.34619 4042.1
+666.78217 999.7
+668.37567 929.1
+669.27728 1588.7
+669.77832 1424.8
+670.27350 623.2
+675.27393 739.6
+676.63403 950.8
+692.30048 1413.1
+698.31830 655.5
+703.37109 1778.5
+706.26929 625.8
+712.79327 1433.4
+713.29309 960.7
+720.30530 3787.9
+720.80701 2252.1
+726.38562 721.5
+732.24731 740.9
+741.29181 790.3
+741.81281 868.7
+742.30005 8359.4
+742.79999 5750.0
+743.29877 1780.8
+750.03729 1100.5
+769.19574 619.7
+795.55450 945.9
+796.35999 864.4
+799.99365 778.2
+820.39160 1131.7
+823.38568 982.5
+823.87897 1150.7
+859.46350 829.8
+895.50800 1698.3
+901.34497 1025.0
+909.43390 7056.2
+910.43585 1927.8
+930.32574 617.6
+935.04376 629.6
+938.49835 1257.3
+956.51367 81127.8
+957.51648 37420.9
+958.51898 8353.3
+959.52612 890.0
+967.97760 1011.5
+968.49774 1070.1
+983.45862 2397.6
+984.45428 1826.2
+991.40991 1202.2
+1016.42584 640.3
+1025.00061 875.9
+1025.50037 975.3
+1035.49768 827.3
+1055.58142 6147.3
+1056.58167 2959.6
+1057.57996 881.5
+1074.01489 1208.4
+1098.48450 1600.8
+1099.48535 911.7
+1127.52979 1027.8
+1143.34021 1800.4
+1144.33728 793.0
+1168.44653 1637.8
+1169.45032 885.7
+1198.41431 3434.4
+1203.28625 718.7
+1212.42603 3832.4
+1213.43225 2111.6
+1214.41553 792.5
+1215.61279 5796.3
+1216.61340 3725.7
+1217.61560 1465.8
+1254.41345 775.8
+1256.41870 4088.7
+1257.41370 1659.2
+1258.42920 901.7
+1275.58826 744.3
+1352.72144 1381.4
+1425.42297 663.4
+1638.89075 658.0
+1723.02380 704.8
+1761.11267 697.7
+1822.10999 639.3
+1879.55139 19776.2
+1906.37280 899.8
+1906.88855 6993.9
+1907.43262 935.5
+1918.73364 660.2
+1930.62646 1069.9
+S	1694	1694	765.226991267
+Z	2	1528.606
+Z	3	2292.406
+214.52252 4307.7
+231.52600 3447.3
+244.21396 3770.6
+251.68054 4122.6
+265.04242 3604.3
+268.16562 6158.2
+272.12756 3963.7
+272.17120 37617.1
+280.19559 4206.2
+282.21738 3765.7
+304.15961 5968.0
+321.33951 5562.6
+342.27563 4437.6
+350.25595 5312.8
+359.17426 11531.1
+360.96619 4041.2
+373.19095 8455.3
+381.24921 17356.7
+385.25430 23455.5
+427.24323 3884.5
+453.09201 3949.1
+458.23853 3964.9
+472.25732 29678.0
+473.25687 4187.8
+480.31497 14331.7
+492.23001 19745.1
+492.73178 7498.5
+524.26886 7853.2
+526.30621 5937.0
+531.28497 5309.6
+532.63696 13834.1
+543.33112 14133.1
+557.25568 8394.0
+557.75708 5564.7
+561.76630 8706.7
+563.75696 7441.8
+564.26178 12527.8
+567.32062 4024.1
+571.32526 53399.4
+572.32715 11441.9
+573.09961 4733.8
+577.31152 5560.4
+592.79175 24955.4
+593.29443 36613.6
+593.79712 13579.8
+594.30499 10157.2
+594.79883 8402.2
+597.27289 4781.0
+605.79089 5735.6
+606.28632 16139.1
+606.78522 8680.2
+609.78802 13024.7
+610.28845 10299.2
+614.78931 21981.3
+615.29163 14456.4
+615.79138 11095.7
+616.29681 4907.7
+619.15125 12488.0
+620.15411 4123.7
+628.95911 4583.3
+631.78052 17835.1
+632.28192 14725.8
+632.33282 13519.9
+637.18164 4201.7
+637.28455 6819.1
+653.25873 6415.9
+657.84259 21416.4
+658.34753 7978.3
+662.82410 4598.9
+666.78326 9375.7
+667.28320 7559.6
+669.27472 12243.6
+669.78070 7254.7
+692.30011 13525.7
+702.12170 3696.9
+703.37000 7154.0
+713.29211 5858.9
+720.30383 19122.7
+720.80475 13857.9
+721.30695 5397.6
+742.30029 43901.8
+742.80225 28491.9
+743.30206 19670.2
+745.35455 7086.6
+752.13013 3993.0
+784.13385 4356.3
+795.56299 5841.4
+796.34741 8528.7
+820.39258 9221.4
+821.39575 4836.9
+828.99011 4070.6
+850.55969 4761.1
+859.45953 5268.1
+901.34735 4306.6
+909.43298 30208.9
+910.44012 11161.2
+911.41937 6284.3
+911.93665 4331.5
+956.51385 275331.3
+957.51666 129814.2
+958.51886 40585.0
+959.52466 5527.0
+979.18201 3893.7
+983.45300 20783.5
+984.45483 14094.5
+1010.87329 3870.9
+1019.67389 4411.0
+1055.58228 20957.5
+1056.58765 14580.8
+1098.48364 16612.0
+1099.48755 6137.0
+1140.27441 4329.6
+1143.34473 7984.0
+1144.34851 5154.8
+1168.43628 6981.6
+1188.12219 5726.1
+1198.43494 24079.8
+1211.55347 5069.0
+1212.42615 20322.8
+1213.43311 11245.7
+1215.61023 22178.8
+1216.61194 13435.7
+1256.41968 16833.3
+1257.41907 6396.6
+1258.41833 7597.6
+1736.83765 4645.3
+1788.55103 4123.6
+1798.61829 4102.5
+1878.36572 4878.6
+1878.88635 6597.6
+1879.51855 124085.9
+1879.82117 14554.4
+1880.04663 6283.4
+1880.66272 6732.0
+1906.92322 45348.1
+1930.64722 5218.6
+S	1695	1695	416.5059996
+Z	4	1661.9927
+100.91702 582.3
+106.80287 652.1
+111.71095 748.5
+114.33971 568.6
+120.19187 548.5
+121.78808 558.4
+121.79671 2338.3
+122.04056 507.3
+129.69553 537.7
+132.39827 738.0
+132.43039 597.6
+132.97374 566.0
+137.28856 635.4
+165.77859 901.6
+170.71912 550.1
+182.78453 608.7
+198.88933 886.1
+199.18282 1281.4
+199.24196 1104.5
+199.25473 1380.1
+199.26582 2164.2
+199.27470 1827.9
+199.28087 2068.9
+199.35396 950.8
+199.36426 1090.0
+199.37735 655.5
+202.66096 586.8
+203.11768 4564.7
+208.69560 532.4
+212.64078 551.4
+212.77502 585.2
+221.94595 655.4
+235.63142 564.0
+244.16533 1147.9
+246.26152 557.9
+251.12071 5740.0
+252.12405 644.5
+257.09341 627.1
+279.11612 990.6
+280.18671 852.5
+285.68259 794.3
+288.20282 645.5
+291.35910 611.4
+319.16479 27373.8
+319.66602 8274.0
+320.16513 907.7
+326.17001 1087.6
+336.57556 596.8
+352.53345 1255.4
+359.00110 616.2
+361.90729 594.9
+366.44855 588.4
+374.23120 596.5
+377.54028 1403.9
+377.87463 1110.7
+383.54428 1710.2
+386.95898 1060.6
+390.89090 630.3
+394.14212 5063.4
+395.14612 712.9
+401.24622 1275.4
+401.74792 1244.0
+404.71805 1294.6
+424.23181 1769.7
+424.73846 789.5
+443.22177 968.7
+443.71780 568.8
+458.11935 560.3
+467.56812 617.6
+472.73563 900.4
+473.60944 4924.2
+473.94266 2094.2
+476.72980 652.0
+481.74579 25010.9
+482.24741 10536.1
+482.74808 3227.7
+483.24435 1276.5
+490.28000 2839.2
+490.78461 1357.7
+491.19653 2335.4
+492.29266 931.6
+526.79620 817.9
+528.29742 2367.1
+528.79791 1528.3
+532.61743 1810.9
+540.27014 6994.9
+541.27325 886.0
+547.26660 2168.9
+547.76642 990.1
+571.81262 1496.9
+572.31750 985.4
+576.28619 1734.1
+596.82678 988.3
+604.27802 13512.7
+605.28186 4257.8
+606.28363 665.6
+616.29871 606.0
+637.32227 7529.4
+638.32178 1829.0
+653.37061 949.8
+676.61285 1086.9
+697.32507 1341.5
+756.95624 540.7
+767.48340 573.9
+795.55029 977.4
+797.32794 576.0
+871.53015 591.6
+878.78406 568.8
+921.59125 701.2
+922.17426 586.5
+1001.11658 634.7
+1050.64331 603.4
+1057.22485 833.7
+1091.97998 576.2
+1187.95325 790.3
+1198.38513 3309.2
+1316.56763 650.5
+1364.10669 721.3
+1457.80334 638.2
+1525.44019 853.5
+1534.86621 610.8
+1598.01270 613.0
+1661.68726 550.6
+S	1697	1697	1879.94740793
+Z	3	5636.567
+Z	2	3758.047
+532.58649 1423.0
+630.36969 677.5
+676.64844 1004.6
+785.52924 638.0
+795.55853 1059.8
+865.18176 637.2
+965.37140 621.4
+1057.25757 720.1
+1079.29993 712.5
+1198.30920 2987.8
+1525.34070 889.1
+1611.55676 586.4
+1876.34180 616.9
+1877.18933 623.1
+1878.92920 761.0
+1879.55786 17671.3
+1880.23010 1564.2
+1907.06628 7429.1
+1930.52771 1062.9
+S	1698	1698	426.7313396
+Z	4	1702.89406
+108.51651 521.7
+118.84721 554.1
+120.66799 806.2
+121.78815 796.9
+121.79343 2352.8
+131.38344 597.5
+137.29312 690.7
+165.77394 783.5
+167.25792 501.4
+173.12817 2752.5
+192.56374 534.1
+199.09435 564.0
+199.17084 1042.8
+199.18106 892.0
+199.18695 797.0
+199.22499 696.3
+199.25122 1438.9
+199.26859 2578.6
+199.28445 1070.0
+199.36725 1592.5
+200.13907 2316.9
+201.12303 1399.2
+202.01601 504.0
+202.02179 480.4
+242.72374 710.8
+249.34363 493.8
+257.17966 998.4
+278.15149 836.4
+291.52414 548.7
+309.92383 507.7
+313.72119 1630.9
+315.13547 556.6
+329.78278 522.2
+338.38824 574.9
+343.45514 554.0
+343.76550 678.7
+355.29657 689.6
+361.89032 607.5
+380.24625 787.9
+380.75491 670.1
+385.25665 1689.9
+391.23599 772.4
+395.91507 1997.9
+396.17017 735.1
+396.25159 695.3
+398.46014 538.5
+400.91205 552.0
+401.92062 600.1
+427.55426 1080.2
+463.25827 1056.6
+463.75958 843.7
+469.77194 825.9
+471.29996 640.6
+476.78363 627.3
+477.25668 660.4
+478.51746 1128.5
+479.78058 1546.1
+482.66925 799.9
+497.23715 1049.7
+512.78992 2882.9
+513.29193 2400.3
+520.85522 565.4
+525.24805 660.2
+526.81836 705.3
+530.60492 944.4
+532.60089 1672.3
+536.31403 776.0
+537.29651 26781.5
+537.79791 13374.2
+538.29919 4725.2
+538.79755 879.2
+554.82538 1566.4
+562.29999 1180.3
+581.85651 1709.3
+582.29254 1192.0
+582.35651 1435.5
+582.79517 889.9
+586.83411 883.7
+591.28656 593.7
+609.31476 3779.0
+609.82104 906.1
+623.34930 7040.4
+624.35046 2108.2
+626.42993 1511.6
+630.33008 874.0
+635.50531 616.8
+665.86188 819.7
+676.37335 657.1
+676.66254 773.0
+686.56744 723.2
+731.13959 598.6
+733.93738 568.0
+784.64337 656.3
+795.54547 818.3
+834.78857 618.4
+879.38025 739.1
+1057.28601 835.7
+1171.17920 650.3
+1198.34241 3209.1
+1198.45117 679.7
+1333.55249 586.7
+1525.43884 1030.1
+1582.76733 945.6
+1626.83057 681.8
+1651.69446 526.2
+1651.81909 505.4
+S	1699	1699	596.3328246
+Z	2	1190.65
+165.35703 1187.7
+167.84328 1139.8
+169.49994 1308.4
+184.59369 1129.7
+186.06625 1286.6
+188.24655 1592.3
+188.26006 1858.9
+188.26863 1720.8
+188.27405 2027.3
+188.28604 2634.3
+188.29500 2284.0
+188.30560 1191.2
+188.30937 1211.9
+188.31825 1364.2
+190.99277 1193.5
+198.88792 2088.0
+199.15361 1319.7
+199.16632 1253.2
+199.17685 1801.9
+199.18739 1921.6
+199.19775 1991.0
+199.23079 1293.5
+199.23956 1393.4
+199.25352 3664.1
+199.26317 1995.8
+199.27444 5680.6
+199.28561 3630.0
+199.30287 1351.6
+199.37309 1459.5
+199.38449 1931.0
+206.18964 1416.4
+223.01520 1412.5
+224.43301 1263.8
+252.33118 1128.8
+255.28951 1158.3
+255.30042 1367.2
+258.90381 1229.4
+270.26190 1105.9
+296.34323 1157.8
+299.99619 1188.4
+308.91101 1338.4
+347.22672 1569.9
+352.27261 1215.6
+355.78604 1382.8
+411.62036 1365.2
+441.55948 1339.7
+466.23987 1744.6
+470.75998 1322.8
+532.60028 3388.8
+545.79041 1189.2
+549.16370 1402.5
+577.27130 6844.4
+578.27814 1791.3
+630.42633 1568.4
+648.22565 1156.0
+676.67371 1888.6
+710.41766 1365.7
+722.31531 1570.7
+763.06006 1342.9
+793.72156 1099.7
+795.55536 2076.9
+795.72943 1321.1
+813.80579 1208.7
+871.26563 1439.7
+873.43311 1410.3
+885.32001 1416.2
+904.97797 1058.6
+1020.41144 1217.1
+1026.64661 1223.4
+1096.89819 1139.9
+1165.86267 1207.5
+1198.35339 6335.2
+1212.12061 1358.9
+1243.89978 1345.0
+1525.46240 1822.5
+1815.94763 1210.0
+1835.79333 1631.6
+1837.47913 1175.0
+1877.43811 1211.6
+1878.37720 2330.6
+1879.08862 1756.3
+1879.65149 40738.4
+1879.93286 10213.8
+1880.24622 2450.2
+1907.06885 16252.6
+1909.28796 1455.1
+1930.66345 2004.1
+S	1701	1701	1879.9298246
+Z	2	3758.012
+Z	3	5636.514
+532.62616 1917.1
+586.05389 640.0
+594.37122 593.5
+622.83978 571.9
+630.43909 846.4
+653.27521 1108.9
+663.10620 596.4
+672.98535 571.7
+676.64801 893.8
+699.19666 643.6
+795.54694 996.4
+925.91986 585.8
+1198.40295 3169.0
+1274.49048 543.6
+1368.02026 677.2
+1862.43835 679.2
+1879.17493 2025.4
+1879.56274 20027.9
+1879.89258 2041.2
+1882.23914 574.8
+1907.05310 7338.9
+1918.64343 811.1
+1930.67261 1100.2
+S	1702	1702	407.9859796
+Z	4	1627.91262
+103.45890 3366.2
+116.58973 3200.4
+120.67237 3544.2
+120.88538 3787.5
+121.79362 15354.5
+130.02208 3798.3
+133.32126 4717.9
+137.39668 3540.2
+139.80998 3388.4
+144.41428 3424.8
+149.97191 3890.9
+157.13303 4910.2
+163.43481 3268.0
+165.77527 4262.4
+169.49908 2797.0
+169.50320 3679.7
+171.64171 4722.7
+198.88840 4508.9
+199.16374 3997.2
+199.17090 5008.6
+199.20784 6619.9
+199.26091 8584.9
+199.26910 16445.0
+199.28790 7345.3
+199.35849 5651.3
+199.36731 7548.3
+213.08734 5670.8
+233.58676 5892.5
+242.95578 3247.0
+243.20120 3706.9
+250.17264 3560.1
+255.30486 3658.9
+261.50241 3078.1
+297.55807 3322.7
+309.17871 6269.2
+311.52469 5099.3
+318.18314 4122.2
+322.27255 3685.5
+341.25443 6672.7
+348.68054 4048.7
+349.87027 5943.2
+350.20221 5898.7
+351.64981 3173.7
+369.24829 27082.4
+370.25058 5269.1
+374.72531 29950.2
+375.22742 8076.3
+382.22055 32511.4
+382.72272 11662.4
+384.20300 9917.7
+384.53577 7748.2
+392.23569 4757.9
+393.47772 3994.8
+395.18948 8052.8
+396.20724 3498.4
+424.55359 3914.1
+428.81351 3596.7
+430.23267 3540.7
+440.74353 4641.6
+466.78583 23453.4
+467.28763 7406.3
+479.68030 4185.9
+481.93707 4037.5
+482.27277 4451.3
+503.37576 3329.0
+514.20599 3275.1
+517.62921 3636.9
+524.29865 46434.1
+524.80066 21819.4
+525.30255 5534.3
+529.78040 7770.6
+530.28772 4029.8
+532.60364 13579.7
+534.31146 3712.0
+549.18036 4869.7
+569.96936 4257.4
+573.80530 3907.0
+581.81390 4756.5
+617.34985 7168.5
+630.34064 5088.4
+630.84161 5737.2
+635.35919 19048.3
+636.36432 4716.3
+668.69958 3281.6
+676.63666 5011.9
+678.34369 7293.5
+694.45105 3203.4
+696.35370 52370.9
+697.35583 15591.9
+735.22144 3635.6
+795.54199 6312.3
+809.44446 3826.1
+810.82526 3349.9
+1039.89111 3309.0
+1057.25281 5521.5
+1120.30310 3689.0
+1198.35254 18128.7
+1338.50195 3421.0
+1357.22864 3516.9
+1380.86963 3643.1
+1405.82507 3507.8
+1414.43530 3920.4
+1525.49438 4580.0
+1545.86255 3982.0
+S	1703	1703	1907.51640793
+Z	2	3813.185
+Z	3	5719.274
+532.57416 1847.2
+549.35089 693.9
+568.11798 641.3
+659.32074 631.9
+676.64124 1144.2
+685.54883 672.3
+732.06396 783.2
+783.66577 602.1
+795.54358 1289.1
+1079.73694 666.3
+1198.29199 2976.7
+1525.48914 688.4
+1877.75818 713.8
+1879.12354 1109.5
+1879.54456 19297.5
+1879.96558 850.9
+1880.26672 1160.6
+1907.10413 7477.0
+1930.67090 911.4
+S	1705	1705	691.4278246
+Z	1	690.42
+198.89662 19709.6
+199.20340 15924.9
+199.23833 19014.9
+199.24841 21843.2
+199.25746 28043.3
+199.26987 44417.6
+199.36699 19280.2
+206.31461 11212.6
+206.94176 13571.0
+214.53683 12672.6
+214.56244 12015.3
+221.07832 12808.7
+233.52556 13002.9
+239.24643 14947.8
+267.52802 13220.2
+272.07245 12031.9
+331.11453 14025.5
+340.79257 14020.3
+350.28009 16856.6
+367.19711 19678.6
+385.20786 16665.3
+427.58533 17038.9
+430.73032 13410.5
+473.26651 15994.5
+480.28104 22906.7
+480.89777 14637.0
+498.28583 18010.1
+498.97623 16691.0
+501.19760 16569.5
+505.53195 11750.7
+525.27667 21313.0
+532.60059 38961.5
+545.47260 12525.8
+564.78223 12615.8
+573.17261 14217.1
+628.38055 20086.9
+636.31006 13143.0
+637.37280 13733.4
+646.38824 92953.2
+647.39008 45224.9
+653.27100 19864.3
+660.40088 27254.9
+672.40283 75215.2
+673.38373 49486.6
+676.61975 23864.3
+751.79016 15940.6
+795.57458 23558.5
+913.43506 12313.3
+1019.79468 12831.4
+1188.18884 16413.0
+1198.34473 65124.8
+1204.81555 17025.8
+1225.80798 13426.0
+1248.13489 11418.1
+1357.78088 15585.8
+1368.41064 14647.1
+1437.96350 12655.4
+1499.04065 11890.0
+1523.96484 17095.4
+1525.54138 14281.2
+1535.16077 13730.5
+1617.73535 15728.8
+1742.96411 13379.5
+1777.48987 17729.4
+1876.91528 18885.4
+1879.19592 45787.4
+1879.48743 417295.1
+1879.75830 55539.3
+1880.41016 15666.5
+1882.11206 15556.0
+1907.04663 153905.7
+1930.85034 25064.3
+1932.24634 17358.0
+S	1706	1706	409.669407933
+Z	2	817.491
+Z	3	1225.733
+101.77202 542.6
+102.25944 563.0
+104.95501 642.6
+105.69160 543.1
+109.11906 660.0
+110.44559 500.4
+110.65004 555.2
+113.47073 521.4
+117.21041 572.8
+121.79448 2223.9
+124.37907 544.2
+124.76104 677.6
+125.83837 640.6
+127.13644 692.5
+131.74286 536.7
+133.15271 1012.2
+134.36400 582.4
+141.56641 500.2
+150.19591 509.9
+159.72826 502.4
+165.55107 592.8
+169.50519 593.9
+199.16795 1001.1
+199.18513 735.8
+199.23196 901.5
+199.24884 858.1
+199.25743 968.1
+199.26596 2566.4
+199.28235 1058.6
+199.36330 1111.8
+230.62315 539.2
+241.37869 755.3
+253.73073 679.3
+255.31160 711.9
+269.20288 544.8
+321.60333 664.8
+342.29868 715.4
+343.57809 622.5
+348.02676 521.3
+381.38803 762.4
+423.39496 526.3
+427.57846 641.1
+433.22830 683.1
+448.19208 493.0
+469.89279 642.7
+490.28867 919.5
+516.11633 655.5
+532.60712 2073.9
+559.05078 558.4
+585.36786 1136.7
+630.45239 924.7
+657.68591 593.6
+669.08008 707.2
+672.40057 960.6
+676.64032 1483.0
+682.37781 837.3
+699.77802 515.0
+700.39838 1411.3
+784.71344 678.2
+791.58569 528.1
+795.55963 924.3
+890.31647 585.0
+1033.21008 599.9
+1103.46899 659.1
+1198.36011 3584.9
+1275.72034 591.7
+1380.89014 702.1
+1491.80762 648.2
+1549.86230 620.1
+1600.44092 551.0
+1611.05444 785.0
+S	1707	1707	1879.9808246
+Z	3	5636.667
+Z	2	3758.114
+532.61676 2037.1
+549.21173 1000.7
+657.55194 674.6
+676.63654 999.9
+687.80438 659.5
+688.63165 557.4
+708.35992 617.5
+731.19604 823.6
+1184.77466 747.7
+1198.38208 3557.4
+1459.98596 601.2
+1525.58704 756.1
+1545.52173 762.2
+1631.67224 680.2
+1660.59888 597.9
+1777.29712 747.7
+1878.96362 874.7
+1879.52710 18856.9
+1881.02832 750.7
+1881.31702 665.9
+1882.15686 782.4
+1907.03967 7756.7
+S	1709	1709	1879.96324127
+Z	2	3758.079
+Z	3	5636.614
+507.75711 653.5
+532.61023 2270.2
+549.25165 536.0
+580.04596 558.8
+651.86493 564.6
+664.13147 536.6
+701.33380 583.0
+795.56134 830.0
+795.90857 562.0
+804.34869 567.4
+858.19751 611.9
+872.26849 538.6
+938.32050 704.1
+1073.11133 553.2
+1131.89343 607.2
+1198.36340 3300.7
+1233.16736 613.7
+1247.06396 666.5
+1870.98828 736.2
+1872.46484 654.1
+1878.58386 753.8
+1878.83777 834.5
+1879.21716 922.6
+1879.54785 20088.2
+1879.88721 1018.6
+1880.55652 751.1
+1907.04749 7766.4
+1930.88818 872.6
+S	1710	1710	1907.4748246
+Z	2	3813.102
+Z	3	5719.149
+532.61029 2002.6
+549.23444 809.7
+676.67798 1026.3
+711.35522 709.8
+732.76666 674.3
+795.54016 817.3
+887.74988 698.3
+901.49103 623.3
+992.04871 711.1
+1140.57996 775.4
+1188.34277 655.2
+1198.36292 3634.2
+1212.72424 570.6
+1278.58618 597.9
+1525.60791 911.7
+1558.24548 662.9
+1854.63379 755.8
+1870.51343 642.3
+1877.96399 719.0
+1878.23462 696.5
+1879.00977 1337.3
+1879.34680 3334.1
+1879.63098 19431.7
+1880.22900 1313.1
+1881.31067 848.3
+1906.26147 672.3
+1907.01233 6938.0
+1908.93530 640.2
+1930.84912 1408.1
+1935.86230 657.6
+1953.09680 680.5
+S	1711	1711	420.106407933
+Z	2	838.365
+Z	3	1257.044
+106.45714 75057.8
+107.18513 76617.4
+109.11994 68150.3
+113.53629 71034.4
+117.06958 145986.0
+119.31541 64603.3
+120.08027 763430.9
+120.67427 79380.4
+121.79535 249353.6
+121.79981 70026.7
+121.80367 78216.3
+126.00868 87175.8
+144.08026 364743.5
+145.08406 74748.5
+148.49345 64858.1
+153.12273 64314.0
+159.09111 301265.4
+162.09085 3204094.3
+163.09430 330906.0
+165.77718 124438.6
+168.06155 69065.4
+169.50525 87701.9
+172.07605 134032.6
+175.11821 352114.1
+189.10149 198664.8
+198.88959 88389.8
+199.15378 73865.3
+199.21814 75207.6
+199.24973 125342.9
+199.26439 288397.1
+199.27376 186394.5
+199.36331 90707.6
+207.11246 8809135.0
+208.11560 881484.3
+215.13850 121751.4
+217.09669 790077.6
+235.10721 3949461.0
+236.11040 400276.0
+278.38870 58508.8
+284.18375 722522.4
+284.68643 198874.2
+285.15933 623327.9
+286.16318 143454.2
+288.20248 1311416.8
+289.20813 111213.0
+289.27020 66849.0
+293.18906 1954891.9
+293.69070 461979.5
+294.19116 112198.8
+302.19479 826948.6
+302.69595 189062.5
+303.16949 135652.6
+312.87122 63629.8
+318.14371 93924.8
+321.83240 75221.3
+323.39529 60841.3
+330.18054 5256876.0
+331.18414 976552.1
+332.19009 92505.4
+336.70535 543737.9
+337.20892 102566.9
+340.06583 67712.8
+341.69736 145898.6
+350.28491 90574.5
+350.70261 256923.6
+377.71487 241646.2
+381.38724 76240.6
+386.20529 101552.1
+388.22589 162913.0
+389.24994 6755852.5
+390.25351 963652.8
+391.25531 128472.6
+392.22900 419361.8
+392.71487 145672.7
+392.73685 98694.3
+401.23355 7605757.0
+401.73697 2705457.0
+402.22159 119063.6
+402.23935 412656.3
+404.21774 67922.7
+423.55859 74648.9
+427.57742 94117.7
+431.22800 898441.9
+432.22998 167738.1
+449.23834 1306684.8
+450.24170 279076.4
+454.27658 485639.1
+455.28214 150118.4
+472.28659 319106.3
+476.77161 126398.6
+489.14905 112578.0
+490.29703 20197712.0
+491.30014 4516575.0
+491.44562 105898.2
+492.30252 835568.8
+496.25479 90879.1
+500.28201 531328.5
+501.28207 81208.8
+514.26501 320758.7
+515.27295 88777.7
+532.27478 284991.4
+532.58118 226434.9
+533.28448 97061.0
+535.53412 68856.1
+567.35883 178687.0
+585.37012 3341857.8
+586.37354 968154.2
+587.37622 120633.2
+602.61005 100616.6
+603.38074 30491422.0
+604.15228 137869.9
+604.38342 9557856.0
+604.67615 83725.9
+605.38580 1562304.8
+608.08783 66600.0
+627.34637 137292.5
+628.35431 105165.6
+642.22864 87352.5
+645.36188 192374.3
+646.36163 117726.3
+654.39294 152823.7
+663.36780 105918.3
+672.40234 2567044.3
+673.40497 803227.9
+674.40741 102740.2
+676.63129 95220.9
+679.57880 64554.4
+682.38739 285896.8
+683.38495 100410.4
+690.41272 5596158.0
+691.41608 1896081.1
+692.41968 306960.3
+700.39667 4843020.0
+701.40027 1763933.3
+702.40173 340741.5
+795.55121 135819.0
+906.08557 71684.5
+910.51257 73137.7
+1057.23438 78435.1
+1120.15918 81500.2
+1178.27161 71239.7
+1198.29309 432946.8
+1261.50940 77860.1
+1307.99500 63518.4
+1359.77209 76543.4
+1365.69165 73692.6
+1525.54797 108433.1
+S	1713	1713	603.807407933
+Z	3	1808.147
+Z	2	1205.767
+162.78256 646.0
+165.77615 876.8
+175.11897 5197.5
+177.24751 517.8
+185.09207 1512.6
+187.14386 10012.6
+187.81960 580.4
+188.22334 502.5
+188.23778 1122.7
+188.25137 1025.4
+188.27261 1280.1
+188.29141 1289.7
+188.30562 893.6
+188.31740 1090.5
+188.32483 1039.7
+188.33437 814.9
+188.34918 747.3
+188.37360 607.9
+195.07716 674.4
+196.95782 552.9
+197.12840 2738.9
+198.89131 1319.4
+199.16516 587.3
+199.17096 635.6
+199.17821 668.4
+199.23041 708.3
+199.26286 1107.4
+199.27501 1953.8
+199.28885 1535.7
+199.37186 773.9
+199.38721 932.3
+202.07045 571.4
+208.14377 1648.8
+215.13873 3706.2
+216.13705 638.8
+220.06026 537.2
+226.15520 1592.3
+228.16986 1243.9
+237.12280 725.5
+238.15575 651.8
+241.12936 1009.2
+252.17055 3406.1
+253.15529 3178.5
+254.14986 7292.4
+255.11839 664.9
+255.15363 1046.2
+255.20711 1634.2
+264.28430 553.2
+270.18378 854.3
+271.17615 19685.8
+272.16013 1972.3
+272.17969 3576.2
+280.16531 29746.4
+281.16885 5194.3
+282.14478 826.3
+283.20105 1636.7
+288.20267 9007.9
+289.20639 1435.5
+298.17572 35533.4
+299.17987 5799.2
+308.15952 2187.9
+308.89194 728.2
+310.18607 1552.9
+311.20734 3472.9
+311.94730 642.3
+316.18549 857.9
+324.21930 596.1
+326.21814 5548.7
+327.22318 833.7
+328.19742 3250.9
+329.21692 1414.2
+336.20285 976.9
+337.18655 1982.2
+339.23962 1829.3
+342.26154 595.3
+345.22491 905.8
+348.22580 776.6
+350.24414 603.4
+354.21313 14260.1
+355.21457 3293.1
+356.20825 689.4
+357.24924 3085.3
+358.25244 798.6
+365.25452 5690.7
+366.24158 2056.1
+367.23129 1541.3
+371.23972 5371.1
+372.22360 23588.5
+373.22736 4490.0
+383.26489 5833.4
+384.25977 3607.7
+385.26065 1686.6
+389.25024 6048.4
+390.25339 1549.0
+393.24878 5479.0
+400.90237 748.1
+401.27539 5633.6
+402.28018 724.1
+411.25937 11202.5
+412.26300 2314.1
+414.70636 658.4
+422.23853 915.3
+429.26871 2860.8
+430.25354 1174.1
+437.25018 1233.8
+438.23523 1724.9
+440.24591 918.8
+455.25998 4590.1
+456.25894 1431.1
+466.22162 717.3
+472.28629 4285.4
+473.27100 7361.9
+474.27350 3238.3
+480.29156 2385.2
+481.29089 1209.8
+485.30725 1436.2
+490.29822 5055.0
+491.30066 1246.1
+497.02557 579.0
+497.31946 3506.6
+501.72293 649.8
+505.69434 538.5
+506.30637 3128.3
+507.28906 1960.0
+512.07990 559.0
+515.33179 1849.1
+516.33203 1531.6
+523.33453 6864.4
+524.27142 1190.1
+524.31720 22507.7
+525.32086 6894.2
+525.35468 790.8
+526.30029 1036.0
+526.32770 787.2
+531.25024 773.9
+532.32263 7718.4
+532.60229 1995.4
+533.29840 1863.3
+533.33093 2653.8
+534.30975 1294.0
+541.34442 26518.5
+542.32300 10073.5
+542.35510 7236.4
+543.32617 4490.5
+543.36108 1371.3
+549.34869 893.5
+550.33252 8633.5
+551.31470 9933.9
+552.31964 3495.6
+557.37811 1835.3
+558.35632 682.3
+558.38275 1006.3
+559.35480 101308.3
+560.35791 35296.9
+560.74615 687.8
+561.36005 7743.2
+562.36267 750.3
+562.87506 595.0
+567.35986 9162.2
+568.34192 17807.5
+568.38263 1450.5
+569.32104 8338.2
+569.35779 3666.4
+570.32849 4293.1
+571.33362 848.5
+585.37036 153105.4
+586.11615 963.8
+586.34698 57918.6
+586.38818 25938.1
+586.86877 671.7
+587.35327 23014.8
+587.39819 3316.3
+588.35895 3448.0
+596.50067 633.4
+630.39215 735.2
+676.66199 1134.4
+695.87158 1050.9
+722.78931 580.0
+723.38483 778.3
+731.10059 740.8
+731.93628 573.5
+754.71289 1407.2
+755.04712 1643.9
+758.10968 694.8
+772.41748 1155.8
+772.92963 1120.8
+795.56012 1179.7
+798.31830 591.4
+848.72369 553.0
+861.93115 643.2
+944.52557 571.4
+984.85718 611.4
+1049.63892 650.0
+1059.49609 2829.0
+1060.50061 9803.9
+1061.50330 7835.0
+1198.21252 888.5
+1198.34680 3159.0
+1489.46875 1016.1
+1603.96228 741.0
+1606.02271 663.6
+1667.09985 603.3
+1805.87158 581.8
+1878.46570 1438.4
+1878.73914 1627.5
+1879.24829 3909.8
+1879.59570 19248.5
+1879.91736 2866.3
+1880.44385 2014.0
+1880.83533 1154.7
+1905.17908 658.9
+1906.25977 793.0
+1906.83740 6859.4
+1907.20959 882.3
+1907.42590 716.1
+1918.82104 1044.5
+1920.83301 626.6
+1930.55640 1010.9
+1975.60461 618.7
+S	1714	1714	1543.7638246
+Z	1	1542.756
+430.22922 705.8
+512.04437 717.7
+522.34906 663.6
+532.58850 1788.7
+595.28033 3214.6
+596.28180 894.4
+604.68597 630.0
+630.41821 627.8
+676.66315 860.5
+726.76196 628.4
+795.53204 928.5
+858.08698 811.1
+984.43982 964.7
+1001.46619 10729.7
+1002.46863 5539.1
+1003.47296 1805.3
+1057.28308 838.1
+1198.31494 3450.5
+1413.70264 829.8
+1504.82813 601.6
+1506.71680 3201.9
+1507.70911 2961.3
+1508.72656 1869.3
+1524.72473 5545.7
+1525.73438 2164.7
+1585.29211 609.1
+1699.32605 685.6
+1777.01917 696.5
+1871.05286 945.7
+1872.84937 950.7
+1879.13660 3212.2
+1879.59497 19097.9
+1880.04773 2797.5
+1880.61047 1033.1
+1881.44702 1197.6
+1906.83240 7023.7
+1907.10266 1569.0
+1918.66785 718.7
+S	1715	1715	1544.7678246
+Z	1	1543.76
+457.30838 612.0
+483.28952 615.7
+512.64886 591.5
+518.22479 680.5
+522.22479 629.2
+532.60577 1968.3
+549.14972 660.2
+560.48267 766.5
+577.27307 941.4
+595.28223 4131.1
+596.28638 1180.0
+643.47943 559.3
+676.63745 1232.5
+710.30884 1099.2
+763.00452 726.1
+795.56055 1149.3
+838.42926 517.8
+858.04486 642.7
+906.26239 675.7
+938.63763 551.4
+1001.46606 12180.1
+1002.46893 5787.6
+1003.47278 1470.5
+1019.74359 784.9
+1195.68994 649.4
+1198.35364 3101.8
+1275.37732 700.4
+1293.52014 641.7
+1413.69458 1000.0
+1506.71765 3143.4
+1507.71765 2795.7
+1508.73340 1816.8
+1524.73035 9440.4
+1525.40417 857.8
+1525.73486 4273.2
+1526.74988 731.6
+1702.96606 585.2
+1870.24646 703.9
+1878.76746 957.4
+1878.85339 1014.7
+1879.54321 19490.6
+1906.48193 1310.6
+1906.84863 6709.5
+1907.17627 912.9
+1930.60718 873.6
+S	1717	1717	1879.9648246
+Z	2	3758.082
+Z	3	5636.619
+516.57892 547.4
+532.62775 1969.0
+592.37085 655.7
+676.63666 1107.1
+739.33417 679.7
+795.54504 705.8
+825.03754 565.7
+845.17853 736.7
+983.28204 702.3
+1018.48553 677.3
+1027.59912 611.9
+1059.09973 655.8
+1098.66272 568.3
+1110.32861 741.8
+1172.54407 694.9
+1187.70496 627.6
+1198.39856 3268.7
+1483.99524 634.2
+1878.23767 797.0
+1878.74719 1130.8
+1878.96191 1707.9
+1879.53284 19363.9
+1879.81458 2363.7
+1880.12280 2058.5
+1880.37634 774.8
+1880.64795 1102.3
+1880.86877 712.0
+1881.96069 847.7
+1907.07104 7032.9
+1918.74512 943.3
+S	1718	1718	1907.34499127
+Z	2	3812.842
+Z	3	5718.76
+532.61829 1713.5
+546.77411 690.0
+630.47864 1153.0
+676.65033 1110.3
+737.04254 672.2
+815.22589 612.4
+860.62390 676.8
+1020.82672 739.4
+1187.72192 712.6
+1198.38367 3141.7
+1216.26379 664.3
+1345.36804 610.3
+1540.94824 825.3
+1587.42493 644.9
+1648.71277 613.8
+1875.97974 681.4
+1879.56628 20124.3
+1879.94470 1044.6
+1880.19202 921.4
+1907.02588 7118.0
+1910.47827 644.5
+1918.69995 878.9
+S	1719	1719	1198.7928246
+Z	2	2395.738
+Z	3	3593.103
+333.80814 661.6
+350.24274 795.8
+350.27426 799.0
+427.55222 1025.0
+532.62482 1647.3
+569.72729 669.2
+676.62262 1179.6
+737.24121 625.9
+810.08679 593.8
+1030.04089 590.9
+1097.86707 665.0
+1198.39990 2979.7
+1297.17102 707.1
+1370.17395 627.0
+1525.45068 977.9
+1878.93933 1105.6
+1879.48230 19961.3
+1880.01550 959.9
+1880.40088 742.8
+1880.99255 701.7
+1907.02661 7573.3
+1930.66357 1005.6
+1956.00403 657.0
+S	1721	1721	503.252157933
+Z	3	1506.733
+135.00952 3879.3
+136.75720 3242.8
+142.82281 3883.0
+143.06374 3581.1
+157.61362 3711.8
+199.17633 4812.5
+199.25294 9390.1
+199.26262 10010.7
+199.27504 13156.6
+199.28333 9245.8
+199.35271 3568.3
+199.36060 3634.0
+199.37221 3822.1
+199.38213 3998.3
+208.54681 3725.1
+211.05237 3322.2
+236.17787 3914.0
+247.14304 10382.4
+247.59969 4097.0
+261.60175 4027.5
+266.72214 3121.3
+275.13632 4570.9
+280.13330 5740.5
+287.40704 3772.1
+292.16489 30402.0
+293.17136 5083.3
+296.15939 8396.2
+308.92410 3110.0
+319.17197 15142.4
+330.12201 4137.8
+342.20062 7612.1
+346.65393 4629.1
+350.27927 4484.9
+367.22720 3927.7
+373.39117 3165.9
+381.24899 21719.9
+389.18057 3812.0
+407.19080 15444.3
+408.19580 4207.8
+409.20105 5161.0
+409.24371 29436.9
+410.24698 3973.0
+410.69998 17316.6
+411.20245 5261.0
+419.70535 17700.6
+420.20636 11072.7
+436.55505 4144.8
+442.22211 19647.1
+442.31339 3784.8
+442.55551 23854.4
+445.07242 3382.9
+448.22968 24862.9
+449.18668 4380.7
+449.68991 9082.4
+466.23926 19403.8
+483.22626 13665.6
+492.23132 70384.2
+492.73328 16204.3
+497.72406 5054.1
+501.20551 8417.2
+519.23242 3784.8
+522.19525 3079.9
+524.26965 21524.1
+525.27429 9574.4
+532.62750 11168.1
+536.23584 6100.6
+540.74060 21992.7
+541.24072 15135.0
+541.30914 3098.3
+549.74451 252289.1
+550.24603 166560.2
+550.74854 25381.2
+577.27124 11110.4
+581.28979 4361.3
+590.30371 5162.0
+590.63562 11128.2
+590.97400 7293.4
+595.28223 22127.3
+596.28241 9103.3
+597.27917 7742.0
+597.77875 5449.5
+606.28625 55610.4
+606.78748 52766.4
+607.28894 9731.5
+630.45105 5711.7
+653.25104 5718.7
+676.67816 5601.3
+687.33026 6020.5
+692.29974 25458.4
+693.30359 9885.1
+710.30829 125089.7
+711.31207 69368.3
+712.31482 18646.7
+713.29779 5103.7
+728.63501 3546.9
+752.33649 4519.6
+779.09052 3531.1
+795.55164 6474.8
+859.02820 4078.2
+993.11755 3484.9
+1021.20361 4722.0
+1021.77271 3788.9
+1057.27930 4347.2
+1198.40576 19470.5
+1207.87109 3746.8
+1295.76184 6195.3
+1412.05823 3629.0
+1472.02222 3699.0
+1481.79456 3632.3
+1697.70801 3534.9
+1711.07178 3377.5
+1777.74561 3519.1
+1801.31750 3556.2
+1878.69580 5171.8
+1879.05872 9848.1
+1879.64148 119028.5
+1880.23572 7803.4
+1907.04688 47004.9
+1928.92578 3914.4
+1930.71228 4775.6
+1932.05737 4860.9
+S	1722	1722	409.668991267
+Z	2	817.49
+Z	3	1225.732
+102.36499 1987.3
+102.74155 2687.6
+106.34811 2281.7
+113.21799 2451.2
+113.47162 2162.8
+113.53802 2420.8
+114.78409 1930.3
+117.59960 2027.8
+121.79585 9113.9
+122.60355 2034.4
+125.88768 2171.5
+133.15533 3478.4
+137.92458 2203.7
+142.53336 2088.1
+153.85345 2270.4
+156.63246 2029.2
+165.77698 3375.8
+175.98732 1980.6
+176.87770 1887.5
+185.10838 2135.7
+188.94949 2359.9
+198.89273 2231.0
+199.16403 2155.0
+199.17888 4253.4
+199.20880 2522.1
+199.23845 3954.0
+199.24789 4679.2
+199.26199 9281.7
+199.28343 5122.1
+199.35838 3409.6
+200.16626 2072.3
+201.73592 2553.9
+204.97675 2231.8
+207.11235 2627.9
+211.37653 1971.4
+222.13101 2132.0
+238.71945 2395.8
+244.76343 2282.9
+271.72717 2985.3
+272.04391 2509.7
+317.14545 1943.5
+329.74985 1986.4
+332.30109 2332.0
+342.40244 2285.8
+351.02280 2249.7
+418.20773 2135.0
+476.77292 2429.1
+482.89789 2694.8
+489.09436 2336.0
+503.37500 2108.7
+532.61755 7575.8
+544.51270 2176.8
+573.22479 2530.0
+575.76337 2337.7
+578.23608 2407.6
+585.36981 11263.0
+589.35327 13614.0
+590.36169 3546.1
+630.45984 2533.9
+642.20386 2110.1
+672.31061 2073.0
+672.40472 5770.0
+676.63867 4100.2
+700.39734 10589.9
+795.56610 2974.5
+867.05475 1982.3
+933.78815 2543.5
+956.58698 2089.8
+1089.07019 2111.7
+1102.07507 2276.3
+1198.38135 11816.8
+1199.12610 2034.6
+1340.49170 2638.3
+1466.49915 2188.5
+1467.45850 2374.1
+1583.30115 2436.3
+1596.37537 2557.4
+1621.29688 2217.2
+1628.71863 2697.0
+S	1723	1723	547.756991267
+Z	2	1093.666
+Z	3	1639.996
+143.46921 624.1
+157.59007 663.9
+165.77876 782.0
+169.47734 635.5
+177.11194 2410.3
+181.09645 1478.3
+185.46696 585.1
+188.25471 651.5
+188.26947 1284.4
+188.27560 1245.9
+188.28302 1174.4
+188.29208 1235.7
+188.30235 1085.9
+188.30795 1223.3
+188.32291 971.5
+188.91684 582.4
+197.67896 860.8
+198.89095 890.8
+199.16371 755.8
+199.19176 780.2
+199.21365 684.0
+199.23747 1416.8
+199.25284 1609.5
+199.26208 1688.1
+199.27162 2294.9
+199.32237 552.8
+199.36867 1224.8
+214.49391 558.3
+220.67287 634.7
+221.13695 1125.9
+223.15428 920.8
+247.14299 1311.1
+254.16083 963.8
+262.87408 654.3
+265.16489 1230.6
+267.18051 724.2
+272.17130 29006.4
+272.64694 583.6
+273.17499 2560.4
+280.15891 697.3
+283.17484 1570.7
+284.20117 557.3
+289.15454 1553.7
+308.87708 877.6
+309.19080 1704.8
+317.14935 3645.4
+318.15417 775.1
+327.20056 1234.2
+334.17557 41461.7
+335.17944 6087.3
+349.00522 586.3
+350.28052 752.6
+353.21655 2536.5
+358.24036 641.4
+363.25214 517.3
+371.22800 2172.3
+385.25491 20989.8
+386.25739 3375.3
+395.31808 860.1
+397.24216 1209.0
+415.25348 2809.4
+441.26892 1201.6
+447.25888 24513.7
+448.26193 5526.9
+450.49280 568.7
+459.27936 7255.6
+460.28674 1289.3
+464.27402 4883.2
+464.77539 2313.8
+471.71088 646.7
+482.61813 737.3
+484.32291 9027.1
+485.32593 2841.8
+501.19302 768.5
+502.26611 1320.1
+503.30463 10580.3
+528.28754 1396.3
+529.31812 873.1
+532.62073 1971.4
+549.11145 615.2
+552.21094 686.2
+592.44196 817.6
+592.79041 692.0
+593.27148 1093.4
+607.28937 3016.8
+608.29150 922.4
+615.34991 2942.5
+624.29266 599.7
+630.35522 865.3
+631.34552 716.0
+639.35797 670.2
+643.74194 571.2
+644.35278 40710.4
+645.35632 14437.1
+646.35510 1877.0
+656.37634 932.5
+661.33405 684.8
+676.65088 933.2
+678.36432 1341.1
+680.86243 4130.2
+681.36560 3738.1
+681.86523 1662.1
+706.35742 11448.0
+707.36047 2920.2
+708.35950 895.3
+728.43054 1719.7
+729.44006 730.9
+753.40210 1043.5
+755.23792 1109.6
+757.43707 103308.6
+758.43958 44495.0
+759.43945 9077.1
+760.44269 1985.4
+762.39709 812.4
+774.42133 1141.3
+791.44391 2105.0
+792.44702 1077.8
+795.55396 935.3
+819.44147 23913.3
+820.44409 10121.5
+821.44385 1819.6
+916.49567 1077.6
+927.54633 599.4
+1057.27283 694.2
+1079.90540 540.6
+1188.03857 851.9
+1198.38135 3224.9
+1525.30408 1038.4
+1586.03137 726.7
+1878.23083 741.1
+1878.64734 721.0
+1878.98584 809.6
+1879.26721 2122.4
+1879.58154 19379.9
+1879.91931 1807.6
+1880.22192 1566.9
+1880.90674 822.7
+1881.20605 619.2
+1907.05408 7366.7
+1930.42346 1113.0
+S	1725	1725	547.752241267
+Z	2	1093.657
+Z	3	1639.981
+146.30049 7514.8
+157.52931 9098.7
+169.49208 10306.0
+169.80423 9172.3
+178.44337 9294.4
+180.86453 9618.3
+187.68533 7820.9
+188.08902 8534.7
+188.16640 11784.9
+188.24805 11822.6
+188.26375 12651.3
+188.28833 15245.0
+188.30206 15122.3
+188.30661 13012.5
+188.32138 11399.3
+188.33926 10260.9
+188.36177 8613.2
+188.41023 8788.2
+194.07033 9225.4
+197.69162 10756.4
+198.89310 14507.2
+199.17833 9182.0
+199.20891 12377.0
+199.23663 11233.2
+199.24713 16111.0
+199.26874 22688.9
+199.27750 19927.8
+199.28503 17734.7
+199.29492 21052.6
+199.30975 8308.3
+222.85638 8576.0
+230.30576 8647.9
+234.00195 8476.9
+252.29913 8465.2
+252.50491 7886.6
+271.79214 10846.7
+272.17093 48770.8
+296.73190 9070.6
+312.10126 7959.2
+334.17554 56131.9
+335.17661 13564.3
+342.26782 10284.9
+343.14893 9032.9
+350.27463 11683.3
+381.17987 7960.1
+385.25449 31529.3
+392.58881 10523.0
+406.46017 9112.0
+408.06509 7533.2
+423.62686 8799.6
+427.53870 10752.9
+428.75134 7850.4
+434.22507 10542.0
+447.25778 43410.8
+448.26233 10781.0
+459.28018 25434.9
+466.21121 8268.8
+484.32169 21215.9
+503.30292 35048.6
+525.75897 12853.1
+532.59680 26773.7
+535.04694 8190.9
+549.14502 12093.4
+561.96722 7852.1
+578.96014 9202.4
+644.35217 56477.1
+645.35181 20864.6
+652.30078 8674.7
+680.86639 14501.2
+681.36469 26293.9
+683.46234 9174.8
+706.35229 18010.7
+731.12109 12874.5
+751.64740 9320.3
+757.43726 159239.0
+758.43915 58755.7
+759.44116 22585.1
+795.55334 13512.3
+819.44043 34784.5
+830.83850 8841.1
+937.87897 7993.1
+1057.27734 12467.9
+1058.90564 8720.1
+1078.00134 8560.5
+1087.81592 9055.8
+1169.41760 8495.8
+1188.09216 8413.4
+1198.32983 40790.4
+1220.44360 9362.8
+1279.26624 8593.5
+1360.94568 8237.1
+1386.38647 8615.9
+1581.15955 8235.9
+1661.39758 10420.5
+1688.65222 8057.9
+1862.41016 9011.1
+1875.27600 11209.4
+1875.86804 8418.0
+1879.29578 30257.7
+1879.54578 295524.3
+1907.00452 108179.6
+1930.58240 11552.5
+S	1726	1726	1879.95699127
+Z	3	5636.596
+Z	2	3758.066
+532.59253 1865.6
+549.17822 1111.1
+676.65692 929.3
+755.52454 650.5
+795.56067 703.4
+897.72589 575.8
+1198.33252 3386.9
+1204.72681 628.6
+1525.47998 916.8
+1878.14587 757.3
+1879.12891 1753.2
+1879.57422 19757.6
+1880.17834 1302.2
+1881.68628 702.8
+1882.15820 868.0
+1907.05322 7595.1
+1919.78967 678.2
+1930.66504 779.2
+S	1727	1727	1907.47240793
+Z	3	5719.142
+Z	2	3813.097
+532.55615 2150.6
+549.19647 728.7
+565.52118 611.6
+676.61005 1151.7
+783.30658 738.5
+783.38348 644.3
+783.44354 711.5
+795.53906 914.8
+858.11633 613.4
+1021.62195 618.0
+1057.20740 1078.2
+1198.24268 3453.9
+1239.73840 645.4
+1275.86902 681.8
+1401.32495 658.4
+1525.53638 1158.7
+1554.84167 683.5
+1878.72583 878.1
+1878.97302 858.8
+1879.45276 19574.1
+1879.69788 3380.5
+1879.99829 1217.9
+1880.39893 823.3
+1907.02649 7463.5
+1990.66528 574.3
+1999.62183 645.8
+S	1729	1729	1879.96424127
+Z	2	3758.081
+Z	3	5636.617
+518.92084 560.6
+532.55273 1377.3
+630.38055 826.2
+655.13202 571.0
+676.63361 934.7
+764.75519 856.9
+795.54401 1251.6
+831.89148 654.7
+887.55457 556.1
+913.90527 612.8
+1188.20850 734.8
+1198.23462 2931.6
+1370.77441 733.5
+1488.88123 783.8
+1501.70251 616.3
+1525.35608 773.1
+1710.85767 648.7
+1878.76160 604.9
+1878.97168 1240.7
+1879.52393 19970.4
+1880.06433 797.7
+1906.73645 1006.0
+1907.03870 7295.8
+1907.36426 634.1
+1930.52356 735.1
+S	1730	1730	1907.4698246
+Z	2	3813.092
+Z	3	5719.134
+532.55389 1848.6
+608.62506 565.3
+609.67737 594.8
+630.39539 783.5
+676.63977 1024.2
+715.59039 600.4
+731.11493 818.7
+756.52484 605.5
+795.54553 845.6
+886.29230 602.2
+1019.69861 602.6
+1057.16003 639.0
+1079.92346 577.2
+1198.24268 3353.8
+1214.13000 684.9
+1528.70361 671.2
+1597.51318 690.9
+1691.84082 857.0
+1755.74963 671.3
+1798.71033 595.3
+1878.44214 784.1
+1878.79883 1146.0
+1879.13892 1370.7
+1879.52954 20468.7
+1880.66882 826.2
+1907.05066 7347.7
+1930.55078 713.4
+S	1731	1731	1198.64540793
+Z	3	3592.661
+Z	2	2395.443
+318.36838 611.9
+320.59357 528.7
+332.62982 625.4
+343.79889 571.3
+352.61340 576.2
+379.14227 539.5
+379.51123 657.8
+390.95975 612.6
+394.87766 623.2
+414.10284 646.9
+464.81860 769.1
+482.65564 910.3
+532.56335 1932.4
+558.02600 726.2
+576.83868 605.2
+579.14447 584.3
+579.34698 607.4
+630.41455 774.6
+659.08728 618.0
+676.63422 976.2
+731.14166 680.3
+795.55096 1039.7
+816.16418 586.1
+864.12946 595.5
+872.23193 640.8
+1198.25928 2885.8
+1416.32764 670.6
+1468.39368 702.3
+1489.14734 744.0
+1525.41650 977.6
+1580.73694 629.8
+1878.86096 1798.3
+1879.50952 19667.4
+1879.79309 3173.8
+1880.15088 1598.9
+1907.02771 7497.2
+1930.62329 1238.6
+S	1733	1733	1879.9405746
+Z	2	3758.033
+Z	3	5636.547
+532.54742 2041.0
+604.33954 620.7
+649.30371 667.0
+676.65228 1154.7
+821.36444 603.9
+972.47601 623.0
+1005.93933 630.3
+1146.40576 672.1
+1185.65308 611.6
+1198.22437 3079.0
+1217.89258 681.6
+1280.90881 638.8
+1384.03638 610.7
+1505.18286 598.7
+1519.69885 668.2
+1525.48853 777.5
+1540.18909 597.9
+1658.03967 603.4
+1728.72083 740.8
+1876.58276 607.5
+1878.01074 681.7
+1878.42834 909.6
+1878.69678 1195.4
+1879.56812 19435.1
+1880.42114 1010.2
+1881.07617 922.9
+1907.02246 7373.1
+1907.28650 944.8
+1930.67944 869.0
+S	1734	1734	1907.44824127
+Z	2	3813.049
+Z	3	5719.069
+532.53998 1942.7
+549.15070 723.8
+630.38739 906.0
+676.64801 732.0
+732.39722 566.7
+795.56274 777.1
+853.65216 597.8
+978.86810 709.8
+1019.72162 620.0
+1057.25049 814.4
+1198.21130 2994.2
+1423.49133 696.9
+1480.71973 746.8
+1555.64917 723.1
+1662.16760 1002.6
+1860.05615 731.6
+1879.24304 3383.4
+1879.54224 19174.0
+1880.15857 1058.3
+1881.71631 738.2
+1907.05200 7828.9
+1930.56409 930.8
+1971.72900 624.5
+S	1735	1735	1198.74999127
+Z	2	2395.652
+Z	3	3592.975
+342.30093 639.7
+350.28009 834.2
+423.18729 735.9
+430.69180 576.8
+448.71936 608.7
+532.52496 1601.6
+549.15881 627.6
+581.32214 638.8
+599.17773 615.2
+610.01233 591.8
+654.10919 561.0
+676.66071 909.5
+844.40936 673.5
+1019.72125 887.3
+1092.36035 635.9
+1140.37183 678.9
+1198.17932 3086.7
+1362.26233 605.5
+1522.42517 641.9
+1525.42090 757.0
+1532.46582 561.2
+1771.85693 604.5
+1876.65247 652.5
+1879.04663 776.7
+1879.57996 19601.8
+1879.88782 2394.2
+1880.13196 704.9
+1907.05249 7137.7
+1930.65723 1087.1
+1985.63428 703.0
+S	1737	1737	603.807991267
+Z	3	1808.149
+Z	2	1205.768
+158.93924 6817.4
+162.19383 6560.9
+168.31798 5815.1
+169.49014 11155.0
+170.69516 5981.9
+175.11819 11359.1
+182.77925 7965.4
+187.14336 24675.6
+187.76266 6786.8
+188.23904 9039.0
+188.27869 23366.3
+188.29054 24591.7
+188.32509 12514.1
+190.27177 6860.1
+197.12732 7507.2
+198.89000 11996.2
+199.16954 6189.5
+199.21922 9844.9
+199.24983 8426.1
+199.25754 16306.1
+199.26636 16588.6
+199.27556 20878.9
+199.27982 19846.6
+199.29128 11840.9
+199.30728 4837.5
+199.31033 4817.7
+199.32275 6735.9
+199.37965 6386.2
+199.38664 6689.1
+203.92836 6370.7
+205.54559 6249.4
+206.78847 5855.2
+210.13062 7072.3
+228.17068 11327.8
+252.17242 5857.6
+254.14865 15901.8
+271.17572 45546.2
+272.16104 5930.9
+272.17877 7638.9
+280.16507 78631.0
+281.16971 8470.2
+288.20233 29247.4
+292.04050 7990.0
+298.17535 81985.0
+299.17969 7594.5
+304.30585 5417.3
+311.27359 6292.0
+316.64832 5696.8
+326.21686 13315.9
+328.19336 6882.1
+354.21320 41584.9
+355.20074 6550.7
+371.24091 15597.5
+372.22290 61959.2
+381.35321 9104.8
+383.26691 14152.0
+384.25769 12313.2
+389.25113 15386.3
+392.86267 6426.8
+393.24829 14375.1
+401.27518 15530.7
+409.20370 12324.2
+411.25958 40347.8
+417.09528 6492.7
+417.56863 6909.8
+427.53467 7000.0
+429.26953 10187.4
+436.15085 6903.3
+459.10696 6245.1
+459.74796 5908.8
+472.28647 11998.6
+473.26984 18184.4
+475.45886 8797.1
+482.64328 7637.2
+490.29489 13362.8
+497.32343 8349.9
+507.29663 6685.3
+523.33221 13981.9
+524.26855 9134.0
+524.31677 73400.2
+525.32312 17700.5
+532.32220 25041.4
+532.52344 22275.1
+533.25018 7722.3
+541.34430 78995.4
+542.32477 24593.4
+542.35590 9821.9
+543.32312 6740.9
+550.05695 6537.0
+550.33429 28195.7
+551.31488 27721.5
+552.32568 13356.3
+559.35437 285585.6
+560.35736 64928.0
+566.25238 7621.5
+567.35913 24240.7
+568.34296 52396.4
+569.32349 25363.5
+570.32397 7894.9
+585.37000 491352.0
+586.34955 238982.5
+586.38989 40934.6
+586.77301 7036.5
+587.35742 59563.5
+587.51099 6106.5
+590.22546 8104.9
+606.99817 5971.3
+630.39783 11746.0
+676.64050 9364.8
+686.36304 22011.7
+687.34003 7925.0
+771.73566 5797.8
+784.10999 7277.7
+790.89136 7555.1
+907.02039 5363.9
+907.05316 5378.1
+1022.45502 9991.9
+1042.45276 6090.0
+1057.24207 8416.2
+1059.49646 125708.2
+1060.50464 9991.2
+1108.99243 7015.0
+1140.29602 6576.7
+1151.72314 6927.4
+1198.17041 35662.6
+1283.62073 5729.3
+1373.58838 6243.5
+1438.42896 6083.6
+1492.05737 7331.4
+1728.22998 6951.3
+1761.89124 6116.6
+1777.29480 7582.6
+1851.59839 6256.4
+1876.46143 6034.2
+1878.38635 8348.6
+1879.52991 208189.9
+1880.21729 7347.2
+1880.39319 6176.5
+1881.35095 6732.0
+1892.16492 7134.9
+1907.05225 78875.4
+1930.56470 9738.7
+1986.51392 7020.9
+S	1738	1738	501.662991267
+Z	2	1001.478
+Z	3	1501.714
+137.36034 612.5
+141.53151 596.1
+146.91080 578.3
+165.87219 531.2
+172.17673 652.7
+188.25418 1168.5
+188.26865 1654.8
+188.28159 2303.2
+188.29640 2221.8
+188.32425 846.3
+188.33499 502.3
+198.98366 547.8
+199.17381 933.3
+199.25795 562.3
+199.27196 2442.2
+199.27776 1388.1
+199.29533 1593.4
+199.36861 1261.2
+199.39528 627.7
+204.61568 566.1
+225.84856 543.2
+232.13956 1136.3
+233.16394 1738.2
+247.14360 11639.8
+248.14647 2033.7
+272.12311 1134.4
+275.13870 6112.3
+276.14163 948.7
+289.80090 568.7
+292.16501 18297.5
+293.16870 3104.7
+310.13028 611.4
+319.17200 6432.0
+337.92834 641.0
+338.26810 579.8
+350.28293 676.3
+359.96442 566.5
+364.04370 514.2
+372.15314 662.9
+389.17972 2933.8
+390.16571 1104.7
+401.16565 1925.7
+407.19131 11178.5
+408.19565 2367.7
+410.70187 989.3
+411.19019 2884.0
+411.69522 1985.1
+419.70526 24661.4
+420.20691 12699.0
+420.70599 976.8
+424.69614 1178.8
+425.19934 867.0
+427.52411 726.9
+440.19186 678.0
+449.18933 12786.7
+449.69080 6930.1
+449.90375 3124.4
+450.23917 2034.3
+452.88367 547.6
+456.25681 1335.1
+466.23953 25941.0
+467.24286 5418.3
+469.72296 874.7
+470.22217 764.5
+478.72528 1881.0
+479.19113 739.9
+479.22391 1035.1
+482.27380 1113.3
+483.71790 4619.0
+484.22031 3456.2
+489.21002 567.1
+495.68005 597.8
+518.22394 2309.1
+519.20020 857.3
+532.39606 577.0
+532.54041 1918.1
+536.23358 2496.2
+537.23596 701.1
+538.60583 864.0
+548.23218 729.2
+575.61536 10447.3
+575.94879 10890.4
+576.28241 4937.5
+577.26996 2875.9
+578.27661 1207.5
+581.61865 11041.9
+581.95184 9023.2
+582.28845 3083.1
+595.28162 30720.2
+596.28497 11024.5
+597.28674 848.6
+610.40967 660.6
+614.21350 566.2
+619.31293 3212.2
+619.64764 5933.7
+619.97937 2103.8
+629.93774 596.4
+630.37048 764.3
+665.29327 784.3
+674.35321 3324.8
+674.85199 2669.7
+675.34924 1153.3
+676.65057 1085.3
+683.30273 2113.4
+684.29523 611.7
+692.29694 3481.7
+693.30609 712.6
+710.30859 153502.1
+711.31152 55508.9
+711.96265 779.5
+712.31439 8452.0
+713.57501 694.3
+771.81531 566.6
+795.55743 881.1
+832.82751 639.7
+838.40131 1757.9
+839.40607 732.5
+848.39178 725.8
+849.37512 841.3
+855.37341 723.0
+867.81201 634.5
+943.62555 709.5
+1037.79224 612.6
+1198.20874 3569.1
+1225.35693 617.5
+1240.17590 608.7
+1425.22437 665.6
+1846.60046 611.2
+1877.55530 704.3
+1878.59485 868.2
+1879.27441 2001.0
+1879.56360 20169.4
+1880.50732 921.7
+1907.05859 7535.3
+1909.69946 658.2
+1930.50842 613.7
+1930.72131 647.8
+S	1739	1739	515.301991267
+Z	3	1542.631
+Z	2	1028.756
+130.50023 62739.1
+134.14272 71334.4
+140.27489 63360.6
+147.02528 63936.9
+147.50299 58480.9
+150.14076 64269.3
+160.85980 62179.7
+165.54309 54471.8
+171.63756 64220.8
+176.94211 68685.3
+182.78448 80831.8
+186.73637 53563.0
+187.47148 65914.6
+188.25737 61135.7
+188.26831 85664.8
+188.27551 95721.3
+188.28577 138581.2
+188.29707 126751.9
+188.30615 105599.4
+188.31700 92188.1
+196.66733 58325.7
+198.89247 103207.9
+199.16646 84385.9
+199.18425 73540.2
+199.26367 296991.6
+199.27800 170753.0
+199.29352 96338.1
+199.36478 76680.6
+199.37796 75557.7
+221.60532 70229.1
+228.83733 69138.9
+232.13997 625307.9
+233.62392 337472.2
+235.10858 62714.8
+245.07648 149052.3
+255.28789 79668.0
+255.35204 73641.3
+260.70587 60021.1
+265.29367 65794.6
+268.16562 359496.0
+280.13477 105522.5
+280.17889 68744.1
+292.16537 254370.9
+295.52576 66676.0
+296.15982 435427.5
+298.77954 62947.4
+308.87308 66955.9
+312.11536 68668.3
+319.17191 4365322.5
+320.17593 383697.4
+342.20175 692212.9
+342.26819 87107.3
+343.20529 110671.8
+346.65356 320619.4
+350.27942 79703.7
+355.65875 196354.7
+373.17029 263901.9
+381.24884 1631474.1
+381.35510 62218.9
+382.25269 216161.9
+389.18158 84585.3
+394.76770 65042.0
+404.52628 105882.9
+407.19116 359528.6
+408.21722 150432.9
+408.54980 62668.2
+408.71945 79261.3
+409.19693 66386.3
+409.21078 63272.7
+409.24387 2307302.0
+410.24756 391739.4
+410.52957 359871.5
+410.70111 233765.9
+410.86420 260389.2
+411.19379 86330.0
+419.70535 1910069.4
+420.20724 973683.6
+420.70740 213120.8
+427.25220 83749.4
+441.26257 93673.0
+442.22156 331924.8
+442.55585 185105.8
+442.89590 73230.7
+445.47638 71159.5
+448.22540 1684571.6
+448.55978 972836.4
+448.89291 203964.7
+458.71796 61020.3
+465.73083 137636.4
+466.23984 4754383.5
+467.24313 1085852.1
+468.24362 105587.1
+474.56174 57296.8
+482.64676 85189.9
+483.71875 105575.4
+492.23157 1160562.9
+492.73294 709496.9
+493.23407 232390.0
+496.90848 416963.3
+497.24088 172875.6
+501.23672 11082005.0
+501.73813 5297393.0
+502.23886 565650.3
+502.42090 70890.7
+502.72824 77096.7
+522.21851 121507.2
+524.26978 980513.8
+525.27197 265595.1
+530.25214 487132.6
+530.75433 241643.4
+531.25726 105732.9
+532.51544 219538.2
+533.14752 58627.3
+536.23456 376854.3
+537.23425 139587.8
+540.73932 139975.3
+542.28198 121950.5
+549.14813 88502.4
+549.74469 2741533.3
+550.24640 1487547.8
+550.74823 513179.0
+551.25177 110279.0
+558.75012 20221768.0
+559.25116 11578889.0
+559.44159 82056.1
+559.75250 3830133.0
+560.13751 101050.6
+560.25488 710402.6
+570.07806 61939.3
+577.26935 146323.5
+580.78473 165940.6
+589.78925 194779.4
+590.29120 144299.9
+593.83649 67379.9
+594.78046 131083.7
+595.28217 852432.8
+596.28784 181193.8
+603.78644 1004187.3
+604.28754 481123.6
+604.79443 143490.8
+606.28638 721768.4
+606.78796 493867.3
+607.29315 173625.3
+615.29169 6138338.0
+615.79303 4240297.0
+616.29437 1466288.4
+616.79468 284278.0
+623.26593 318623.6
+624.26666 96973.9
+633.30273 97799.1
+635.30151 134696.4
+647.30084 574318.1
+647.79889 196820.9
+648.30811 116723.1
+651.26019 783614.4
+652.26331 139499.4
+671.83405 1889777.5
+672.33575 1132492.8
+672.83588 410732.3
+676.62854 154478.5
+687.33289 919369.6
+688.33356 137972.0
+692.30115 75884.1
+710.30859 1246396.6
+711.31122 582511.3
+712.31482 176275.2
+731.11005 87378.1
+764.34222 99458.6
+769.83252 72290.4
+795.56293 85994.0
+798.33008 86654.8
+815.42761 208157.9
+877.37567 71659.4
+930.45618 589991.1
+931.45966 248606.6
+985.03241 71098.1
+1059.49768 2451808.0
+1060.49902 1183397.5
+1061.50195 349413.4
+1119.91382 65228.1
+1187.98047 96723.5
+1198.15625 347630.3
+1297.73828 76658.4
+1305.99841 59027.0
+1525.36560 81691.3
+1591.42639 57613.9
+1775.76050 63433.8
+1870.12378 71198.8
+1876.83691 61252.0
+1878.33533 89915.3
+1878.85645 159704.7
+1879.17200 118336.3
+1879.49231 2180428.8
+1879.84314 142683.4
+1880.10547 159709.0
+1880.53357 114885.0
+1907.05713 820968.0
+1918.71301 117049.3
+1930.57239 121385.3
+1966.22290 65134.8
+S	1741	1741	588.2996696
+Z	4	2349.16738
+151.52597 1719.6
+152.94701 1967.0
+157.59508 1837.6
+169.48804 1882.8
+183.11235 3776.1
+188.19960 1704.1
+188.28250 6491.2
+188.30157 6324.8
+188.31377 4958.1
+188.34084 2055.2
+198.89185 2223.4
+199.15565 1888.6
+199.18015 24529.4
+199.19203 1760.8
+199.21469 1466.7
+199.23929 2726.3
+199.25185 3256.3
+199.26215 3014.1
+199.27550 5507.8
+199.29016 4525.3
+199.38914 1828.2
+200.18346 2098.2
+201.12263 3111.0
+204.07973 1767.4
+215.13983 1891.2
+227.17514 4382.3
+240.09769 2465.5
+241.08163 3043.8
+242.14943 8015.1
+243.13443 2105.2
+258.10895 4239.3
+271.62173 2352.9
+274.03024 1684.3
+280.16492 1953.9
+282.38873 1719.5
+296.19461 2550.5
+300.71091 1684.3
+302.27142 1869.0
+308.88675 1845.3
+324.19186 3585.0
+342.20248 4105.5
+345.15897 6623.8
+350.29312 1936.7
+354.16660 2716.9
+356.21725 10513.0
+357.22153 2767.1
+363.16873 4552.0
+367.23355 3178.7
+371.19116 8831.0
+387.20483 9761.1
+389.23172 1998.6
+419.67572 1818.3
+423.25961 15750.6
+424.26367 4409.1
+427.29092 2804.1
+430.25058 2401.1
+452.24973 3661.2
+455.28635 14554.6
+456.28851 3410.4
+458.24341 10024.6
+470.26193 4608.2
+502.90033 2165.6
+508.90689 32979.1
+509.24084 35743.2
+509.57513 17688.7
+509.90878 7267.9
+510.24371 3490.8
+521.16113 1635.9
+531.26837 3257.0
+531.76855 2213.6
+532.55414 6254.8
+538.28864 3378.3
+540.37366 1895.6
+543.33594 2535.3
+545.91669 9572.6
+546.25195 11909.2
+546.58600 6992.6
+546.91742 2432.9
+549.12970 1946.9
+551.34448 1770.3
+551.92053 3032.3
+555.53070 2268.2
+560.03094 1988.8
+560.27655 3426.6
+561.28625 2831.2
+561.78204 1961.2
+563.28625 2427.8
+568.36877 8530.8
+582.24109 1668.5
+599.30243 3722.8
+601.26349 3125.0
+605.41833 1776.2
+620.62262 3784.5
+620.95746 6235.9
+621.29181 2927.7
+621.62244 1987.7
+622.68555 1894.4
+626.62415 2612.2
+626.96191 2288.6
+632.30151 53621.6
+632.63550 71250.8
+632.97003 50573.7
+633.30414 25591.5
+633.63672 8508.5
+640.80463 3741.1
+649.80811 3954.3
+650.30841 4927.4
+650.81708 3346.3
+656.81665 9197.1
+657.31647 10270.4
+657.82086 5857.6
+658.31696 2903.0
+659.98267 4365.9
+660.65289 2432.8
+665.32446 69098.6
+665.65881 83159.9
+665.99323 71824.5
+666.32825 27294.7
+666.65991 9782.8
+666.99701 3001.1
+676.64008 2188.4
+684.32623 2558.5
+689.80023 1919.7
+690.79816 3237.6
+694.61438 2061.8
+696.33252 5607.8
+696.42871 5424.5
+696.66321 13372.3
+696.99640 17281.5
+697.32794 15667.3
+697.66345 13037.5
+697.99323 3870.6
+701.69818 2303.1
+702.33539 172548.5
+702.66937 275847.7
+703.00366 222083.7
+703.33801 117288.1
+703.67206 43565.9
+704.00574 10539.2
+706.35455 2407.3
+707.35455 2474.4
+707.68683 2488.0
+708.33923 375322.0
+708.67291 591104.9
+709.00665 395860.5
+709.34088 219284.2
+709.67511 82241.4
+710.01080 14603.8
+710.34393 5315.6
+713.34711 2922.9
+713.85925 3667.3
+714.32831 5058.5
+714.82965 2563.1
+715.34088 3194.6
+720.34412 2011.9
+734.69281 3039.3
+738.36664 3321.4
+740.36127 3858.4
+740.69470 6209.0
+741.02960 3540.6
+741.35907 2064.6
+746.03271 106247.9
+746.36731 160919.7
+746.70166 133223.7
+747.03540 72392.3
+747.36987 25639.1
+747.70319 9675.0
+749.69238 2641.7
+753.84912 3927.0
+754.35114 9294.9
+754.84924 5783.0
+755.35114 3162.8
+755.85162 2893.4
+762.85645 146816.9
+763.35754 163460.7
+763.85907 103175.2
+764.36053 37453.0
+764.86285 10826.3
+765.36133 3315.4
+786.85645 1983.2
+795.56055 2565.7
+809.86584 2844.7
+810.36615 2177.9
+818.37238 45187.9
+818.87421 68242.8
+819.37494 43492.2
+819.87640 20034.8
+820.37823 7526.6
+825.39807 27710.6
+826.40051 16782.1
+827.37402 27047.0
+827.87872 33274.0
+828.38007 21918.0
+828.88306 11578.2
+829.38855 2393.7
+839.10242 2570.9
+841.87732 3391.2
+842.37750 6066.5
+842.87292 4965.3
+850.87939 6097.7
+851.37634 10247.5
+851.87842 7353.4
+852.37933 3230.9
+866.90625 2144.4
+873.89117 2523.9
+874.38733 4312.5
+874.88397 3580.3
+875.38434 2999.9
+882.39960 6603.3
+882.89716 35224.2
+883.39636 49279.8
+883.89764 31046.4
+884.39722 18139.0
+884.89496 5105.9
+889.94092 2957.9
+891.40796 11108.6
+891.90845 19758.1
+892.41150 12409.6
+892.90930 6024.1
+893.41632 2214.2
+907.91315 2354.9
+908.42139 3534.9
+924.46552 7709.9
+925.47357 3833.5
+930.92975 3126.5
+939.94928 3110.3
+947.94977 31117.0
+948.45087 43835.7
+948.95117 32462.6
+949.45172 18966.2
+949.95160 5321.5
+950.46802 2189.8
+952.29272 1517.5
+988.96527 1975.0
+989.46014 5170.1
+989.96851 2622.6
+997.47919 3601.8
+997.98352 5923.8
+998.49054 5409.8
+998.99347 4750.7
+1061.52576 2027.8
+1062.54468 2893.7
+1071.07495 1708.3
+1102.44397 2309.5
+1177.91174 2046.8
+1198.24365 9697.7
+1256.92859 1876.4
+1379.87488 1638.6
+1475.53101 1665.5
+1524.72241 1723.9
+1711.16248 1787.0
+1777.31201 2779.7
+1876.53101 2070.4
+1879.53027 53783.4
+1882.99854 1673.1
+1907.12512 21240.7
+1930.46741 3029.5
+S	1742	1742	589.0518246
+Z	4	2352.176
+155.85651 10028.4
+157.59059 10701.1
+168.14493 9544.2
+188.22145 10612.8
+188.23732 8387.3
+188.28448 9593.6
+188.29962 10436.0
+188.31369 10490.8
+188.31680 10364.9
+188.34392 11296.4
+188.38791 10157.9
+191.40468 10509.3
+198.88805 14095.4
+199.18066 136791.5
+199.19327 8730.5
+199.24837 10376.2
+199.26889 26270.0
+199.28101 19545.7
+199.29192 24830.7
+199.36737 18096.8
+199.37909 11147.8
+199.39166 12829.9
+200.18317 13134.2
+201.12347 15597.9
+211.29271 9496.8
+216.29416 9186.3
+222.80750 9240.0
+227.17493 22152.9
+242.14998 23490.7
+243.13350 14314.8
+258.10696 20567.9
+271.60675 10804.7
+271.76340 11508.7
+286.76782 8866.8
+296.19733 12680.6
+331.23343 10004.5
+342.20300 30011.5
+342.24265 10653.1
+356.21826 52856.8
+363.17068 10817.9
+371.19281 25316.5
+381.32336 11566.4
+387.10312 11562.2
+387.20532 26372.0
+402.98788 9567.5
+407.51193 8761.3
+417.56265 9476.5
+423.25964 69673.5
+427.29401 14401.7
+427.50702 12584.7
+449.31104 8230.6
+452.24713 15565.8
+455.28589 69509.7
+458.24307 27748.4
+460.27545 19703.6
+470.26138 15374.3
+474.47659 8584.0
+478.28946 10996.1
+482.76819 8960.8
+501.28738 51932.1
+501.78806 50503.4
+502.29434 10965.7
+508.90674 182926.1
+509.24100 126670.5
+509.57498 59415.5
+527.27686 11290.6
+532.53748 25941.9
+538.28705 11872.3
+545.91602 55757.7
+546.25195 30386.2
+546.58527 27973.8
+559.77649 27722.9
+560.03021 14932.6
+560.27789 13035.8
+561.28668 11525.7
+568.36835 42691.6
+569.25824 8650.7
+571.33453 11187.5
+573.35077 9624.6
+599.30347 13976.9
+620.62726 19989.1
+620.95618 22059.9
+626.29590 16214.0
+632.30115 400532.5
+632.63562 364366.3
+632.97003 190797.8
+633.30420 70080.4
+633.63715 16814.1
+640.80212 20743.6
+641.30469 19488.1
+644.39899 20635.8
+645.40381 31078.5
+649.80890 23979.7
+650.31073 19195.6
+652.60107 10476.9
+656.81726 64430.4
+657.31671 22986.4
+657.81702 17091.1
+659.65283 15073.6
+659.98206 18053.6
+665.32410 465229.9
+665.65857 417634.9
+665.99280 309187.0
+666.32758 122069.7
+666.66284 34302.6
+676.63879 16409.9
+696.33057 52565.5
+696.42645 22492.6
+696.66364 108650.2
+696.99463 84295.3
+697.33124 63372.1
+697.43359 10997.9
+698.41766 9897.6
+702.33514 1306753.3
+702.66913 1430662.3
+703.00336 946260.4
+703.33765 388911.7
+703.66925 102566.1
+704.00275 33847.2
+707.35986 23209.0
+707.68860 17753.6
+708.33905 2993087.8
+708.67267 3490159.5
+709.00653 2222586.5
+709.34045 1027097.7
+709.67407 340044.9
+710.00446 76453.2
+710.32831 39886.9
+710.66248 14679.7
+713.36182 11532.7
+713.86133 15084.8
+714.33051 11491.7
+730.91595 8523.1
+734.02979 16033.1
+738.36548 14133.0
+740.03876 14122.6
+740.36261 29914.6
+740.69580 12496.3
+746.03271 755788.4
+746.36725 854951.9
+746.70154 562746.6
+747.03510 287232.5
+747.37012 93924.4
+747.69922 26659.3
+753.85052 25538.6
+754.06476 10028.6
+754.34979 35595.9
+754.84784 22820.4
+762.85608 693197.1
+763.35760 581827.2
+763.85938 269394.0
+764.35938 70882.9
+764.85889 16744.9
+775.41406 8608.8
+793.38373 14564.2
+795.54578 12241.4
+810.36591 11362.9
+818.37195 208612.1
+818.87421 223649.3
+819.37567 88503.4
+819.87665 35696.6
+820.38519 9438.8
+825.39697 114336.6
+826.39978 47978.7
+827.37671 171612.1
+827.87952 116211.3
+828.37823 81107.3
+828.87714 26176.3
+841.86829 27272.8
+842.37573 21039.4
+850.87848 56164.2
+851.37903 51971.1
+851.87689 20603.0
+852.38074 13004.3
+873.90063 15427.8
+874.36841 10924.3
+882.40277 36719.6
+882.89490 178450.2
+883.39575 165536.0
+883.89746 73988.2
+884.40381 23791.6
+887.48273 21388.1
+888.48389 55041.2
+889.48407 28795.9
+891.40802 93387.6
+891.90662 85939.3
+892.41095 42323.8
+907.42255 26144.4
+924.46552 31509.9
+939.43365 15350.6
+947.94897 183295.2
+948.45044 157941.0
+948.95276 101905.1
+949.45081 31595.7
+980.45038 18865.4
+988.95142 27765.5
+989.45422 14891.7
+997.48822 32578.9
+997.98499 31130.9
+998.49286 18071.1
+1001.57190 30800.4
+1002.57092 30855.3
+1025.54810 11731.9
+1057.24963 12135.5
+1061.52100 16785.1
+1187.97205 11090.9
+1198.20349 45326.4
+1296.25098 10310.8
+1737.93787 10491.0
+1777.25696 17237.0
+1877.86267 10023.5
+1879.00574 22390.1
+1879.55762 284298.7
+1879.95789 25207.1
+1882.41760 12509.3
+1907.04553 111965.3
+1926.04944 9183.4
+1930.47253 10095.9
+S	1743	1743	1879.98624127
+Z	2	3758.125
+Z	3	5636.683
+512.95428 678.9
+532.52411 1771.0
+573.59924 573.3
+630.39807 765.3
+663.05225 654.7
+676.65033 880.6
+709.70319 750.1
+795.56079 678.3
+809.62579 652.6
+896.69946 644.8
+1057.25793 677.0
+1126.33057 603.2
+1187.97095 611.5
+1198.16248 3154.6
+1198.32788 726.8
+1387.10181 621.5
+1525.42004 1106.7
+1649.05334 656.3
+1871.03198 871.9
+1878.28003 1231.3
+1879.25916 2993.4
+1879.58191 19429.2
+1879.90625 2997.0
+1880.24390 672.9
+1880.75610 988.2
+1906.96973 6955.7
+1930.55371 825.9
+S	1745	1745	588.2990596
+Z	4	2349.16494
+159.70107 9434.0
+169.48857 9988.5
+170.09085 11795.0
+175.70828 9777.8
+178.17099 9595.9
+183.11264 15808.1
+188.25735 18670.9
+188.27499 35274.2
+188.28549 33278.1
+188.30013 32332.9
+188.32242 16191.2
+188.33873 11439.4
+188.37561 10176.6
+188.42516 8650.4
+190.17783 9080.3
+198.88828 18289.5
+199.16963 12318.6
+199.18066 146817.4
+199.25182 17420.9
+199.26425 30500.4
+199.27904 27544.3
+199.29347 20928.8
+199.30768 12189.9
+199.36330 15546.8
+199.37769 16450.3
+201.12306 14088.8
+214.51971 10334.9
+216.02095 9854.9
+227.17517 19338.0
+240.09749 17306.4
+242.15002 26131.2
+243.13332 16069.6
+248.35033 10765.1
+258.10849 10980.5
+271.63733 12087.6
+277.92136 8940.4
+280.17245 11104.1
+324.19128 14783.6
+325.75677 9911.9
+342.20251 33932.9
+342.26129 11303.4
+356.21799 49567.8
+363.16818 12851.3
+369.98138 10338.2
+371.19183 41588.1
+380.08704 8728.8
+387.20578 11533.3
+409.41843 10110.8
+423.25992 87623.9
+424.26102 19198.1
+427.28952 14233.8
+440.65186 8316.2
+452.24982 18865.4
+455.28500 71329.1
+458.24466 14685.5
+463.05106 10942.9
+470.26016 22819.0
+470.46835 8867.6
+474.40109 9335.2
+495.51474 8928.1
+501.28589 18866.1
+508.90643 231521.8
+509.24115 170018.0
+509.57446 79086.5
+509.90845 20656.7
+531.26190 12573.1
+532.51056 10815.0
+532.55304 31440.6
+536.02753 9126.8
+538.28589 15296.0
+540.37946 13085.2
+545.91656 47898.0
+546.25238 43760.7
+546.58600 20158.0
+546.92120 14293.2
+560.02734 23349.5
+568.36884 44568.6
+569.37335 20666.1
+594.60730 12269.5
+599.30566 23564.5
+600.30640 12463.1
+620.62170 24496.7
+620.95935 21050.0
+621.28784 12425.2
+621.61707 10342.0
+626.29865 11107.5
+626.96191 14909.2
+632.30127 424951.8
+632.63550 398842.9
+632.96997 188841.7
+633.30511 75163.8
+640.80316 15504.9
+649.81036 34822.4
+650.30914 14679.0
+656.81763 68764.7
+657.31976 47048.1
+657.82178 16417.6
+660.32159 12272.0
+663.26050 9896.0
+665.32434 493718.1
+665.65863 446918.9
+665.99310 249827.6
+666.32703 116158.4
+666.66675 23598.7
+676.63483 14943.4
+691.43799 9373.2
+696.33130 38495.5
+696.42798 17813.9
+696.66315 113196.8
+696.99640 93516.6
+697.32867 54250.0
+697.66394 32964.0
+700.32092 10177.0
+702.33521 1282853.8
+702.66925 1525324.5
+703.00342 1022371.3
+703.33789 422028.4
+703.67206 175743.1
+704.01080 33061.3
+706.34656 15088.0
+706.68634 10543.4
+707.35724 16905.5
+707.68976 12208.3
+708.33905 3005749.8
+708.67255 3008760.8
+708.75031 10200.4
+709.00653 1769191.6
+709.34064 760730.0
+709.67340 236925.4
+710.00409 55258.4
+710.33551 13640.2
+710.66510 14224.1
+710.97314 9397.9
+714.32611 29890.0
+714.82813 14441.1
+734.35944 29022.2
+734.69641 13920.9
+735.03796 11671.6
+738.36664 27315.5
+740.02551 21312.7
+740.36493 29367.8
+740.69696 20124.8
+746.03284 731877.8
+746.36707 892889.4
+746.70160 587336.4
+747.03577 237883.0
+747.26489 8228.1
+747.36945 90320.1
+747.70532 14453.1
+753.84918 27341.1
+754.34503 32687.2
+754.84509 18920.1
+762.85614 855547.6
+763.35754 761652.2
+763.85962 359343.8
+764.36029 102268.7
+764.86157 23179.7
+795.54736 13444.3
+802.06018 10241.7
+809.85974 14681.5
+818.37231 242234.3
+818.87354 255447.3
+819.37524 152557.6
+819.87592 48650.7
+820.37463 14493.6
+825.39838 117820.1
+826.40192 52560.9
+827.37555 168649.2
+827.87909 174510.1
+828.37921 83781.7
+828.87677 20077.5
+841.87067 36537.4
+842.37585 29553.7
+850.87677 65551.9
+851.38202 45110.9
+851.88123 15407.7
+852.89038 11192.9
+874.90210 11421.2
+875.39661 16016.7
+882.39948 57178.4
+882.89490 173484.8
+883.39551 227567.0
+883.89758 108652.3
+884.39825 46115.2
+888.48517 21821.6
+891.40735 79955.9
+891.90814 108602.9
+892.40765 54371.0
+892.91046 17234.4
+907.41943 25533.7
+908.42267 13044.8
+924.46967 36881.7
+925.47205 27167.4
+930.28217 9859.7
+939.93738 9969.7
+947.94904 226273.2
+948.44958 205662.0
+948.95093 126901.2
+949.45178 64551.6
+980.44580 13463.8
+988.94263 26401.5
+989.45837 15206.1
+997.48505 17845.0
+997.98193 31057.0
+998.49182 19144.1
+1001.56183 13251.8
+1045.49207 13419.4
+1057.25586 10850.9
+1061.53357 16034.3
+1062.54504 12324.0
+1070.37512 10416.4
+1099.22974 9496.8
+1188.01477 13150.8
+1198.23511 58169.5
+1200.34021 9831.9
+1261.25513 9660.0
+1525.34814 13989.3
+1874.97546 8888.5
+1879.03638 19650.8
+1879.52271 310261.3
+1880.03003 18916.0
+1880.52002 10723.7
+1906.98792 117194.9
+1918.72449 15968.3
+1930.56104 14693.9
+S	1746	1746	589.0513246
+Z	4	2352.174
+150.43416 7408.7
+154.09756 8035.3
+157.59842 11721.1
+164.70662 7215.7
+167.83974 7299.6
+168.13571 7543.1
+183.11246 19763.0
+187.91478 8745.8
+188.20726 6482.9
+188.21562 6389.3
+188.23131 10922.2
+188.23744 9788.5
+188.26961 8985.1
+188.28119 9930.1
+188.29251 9333.0
+188.30853 9347.8
+188.32480 10189.6
+188.34784 9932.2
+194.25449 8002.5
+198.88960 10038.1
+199.18059 177486.0
+199.19992 9598.4
+199.24464 8974.1
+199.25638 10856.1
+199.27124 30534.9
+199.28227 16578.5
+199.30200 13791.5
+199.35304 8127.3
+199.36957 12635.4
+199.39632 10966.1
+200.18307 25599.3
+201.12338 24479.7
+227.17538 29481.9
+228.17717 9689.9
+240.09750 10738.6
+241.08260 14522.0
+242.14960 26253.1
+243.13406 20471.2
+258.10873 38434.6
+268.13000 7386.9
+271.79544 7015.9
+296.19662 11357.8
+310.17700 10901.0
+324.19180 26866.6
+328.72913 7258.2
+341.21848 9985.7
+342.20245 45777.7
+342.26633 8729.7
+350.28293 10222.0
+350.66135 14792.5
+354.16519 13492.8
+356.21811 73059.8
+356.68991 6790.1
+357.22406 9987.5
+359.96487 7362.2
+371.19220 44113.3
+372.19501 9708.9
+375.85196 8338.4
+387.20547 10796.5
+401.21213 8015.9
+416.57132 6985.4
+423.26004 109669.1
+424.26358 23047.9
+427.29150 28462.9
+427.53677 9414.3
+437.27618 13590.8
+452.24899 26638.1
+455.28674 88579.2
+456.29010 20462.1
+458.24258 13325.0
+462.74295 9486.7
+470.26062 25598.0
+479.21277 9104.5
+503.24063 10287.2
+508.90720 246653.5
+509.24146 205985.2
+509.57532 106864.4
+509.91028 42933.0
+510.13870 7845.1
+510.24063 11212.2
+527.00958 8776.4
+531.26697 30814.0
+531.77069 12760.9
+532.56116 23780.4
+535.75507 11328.0
+538.28693 23627.9
+540.37555 12599.9
+545.91736 80997.7
+546.25256 72595.4
+546.58771 14840.9
+547.75330 7127.9
+550.36121 10661.7
+554.69061 7469.6
+559.77606 27708.3
+560.02887 47080.5
+560.27869 19635.1
+568.37091 49547.9
+569.37976 9652.6
+594.61066 10068.3
+594.94220 12855.5
+599.30157 26275.9
+599.79529 17921.1
+600.30420 8920.6
+600.77594 12395.6
+608.26361 6834.5
+620.62262 37857.2
+620.95880 33052.2
+621.29181 12719.3
+626.29773 20338.3
+626.62982 22946.8
+626.96844 18087.6
+627.30646 16324.6
+630.39679 8635.2
+632.30206 469704.8
+632.63635 523828.5
+632.97070 326290.4
+633.30426 111161.3
+633.63971 40486.8
+633.96753 10566.9
+640.80408 17641.8
+641.30731 17812.9
+649.80939 40619.1
+650.30939 24187.6
+650.81525 10199.1
+656.81775 102089.4
+657.31836 68418.1
+657.82025 27606.0
+659.32550 12718.2
+659.65485 29112.0
+659.99243 14600.8
+660.31958 12321.8
+665.32507 560366.6
+665.65918 641643.8
+665.99377 359279.4
+666.32837 174956.5
+666.66223 50078.9
+666.99811 25106.2
+667.33386 11039.0
+671.77472 10139.0
+676.64484 14609.1
+689.80573 18022.6
+690.98920 9023.4
+696.33270 48267.7
+696.43262 38487.7
+696.66272 158610.2
+696.99664 158077.4
+697.33160 94056.2
+697.43506 12249.9
+697.66522 47527.7
+700.32117 13714.1
+700.37390 10591.6
+700.70923 12476.2
+701.04694 10799.1
+702.33618 1628890.0
+702.66992 2001760.6
+703.00391 1330337.3
+703.33783 581996.8
+703.67188 197488.3
+704.00671 54656.4
+704.34344 15168.9
+704.62531 13262.1
+704.96246 11438.5
+706.36035 24096.4
+706.56567 8330.3
+706.69641 27709.6
+707.03357 20503.5
+707.34869 10924.0
+707.69885 9001.0
+708.33997 3455462.8
+708.53180 14048.4
+708.58752 25729.4
+708.67316 4253545.5
+708.91449 15125.8
+709.00708 2698267.5
+709.10449 9870.8
+709.34119 1173057.5
+709.67572 430307.2
+710.01025 121098.3
+710.33191 44336.0
+710.40582 12542.6
+710.66364 34639.2
+710.73993 9723.6
+710.82922 8183.8
+710.99500 26241.5
+711.32257 12586.7
+712.38904 10901.9
+713.35266 16931.0
+713.86096 20657.1
+714.33124 36308.2
+714.83020 30157.5
+715.33997 13910.6
+722.34875 7645.2
+734.02869 11557.4
+734.36090 28379.6
+734.69635 22315.5
+736.82581 19722.5
+737.32153 16013.5
+738.36688 23591.3
+740.03534 16186.0
+740.36340 31818.6
+740.69702 20059.3
+741.03253 16922.0
+741.35229 10302.4
+746.03314 914407.8
+746.36761 1206592.9
+746.70209 776694.9
+747.03589 369837.2
+747.37048 138431.5
+747.70325 53053.6
+748.04016 17390.5
+749.36188 16619.7
+749.69830 17713.4
+750.03424 10818.0
+753.85046 54755.7
+754.35126 56288.2
+754.84454 44969.2
+755.34491 16805.5
+761.55847 8704.5
+762.85681 1277836.6
+763.35809 1057933.9
+763.85962 489360.8
+764.36133 135390.9
+764.86096 39742.5
+780.46490 8041.1
+809.36414 11262.3
+809.86493 24363.2
+810.36127 20413.7
+818.01025 9603.5
+818.37256 412079.8
+818.87408 382755.1
+819.37543 209908.1
+819.87683 76955.3
+820.38666 19192.4
+820.88220 9451.4
+825.39886 170127.5
+826.40247 71986.1
+827.37720 229843.5
+827.87952 229792.0
+828.38110 124161.9
+828.88574 36488.6
+841.87378 39434.3
+842.37494 46383.8
+842.87817 25038.7
+850.87921 80182.9
+851.38007 77999.5
+851.87988 49452.3
+852.38739 12353.2
+873.39465 20868.8
+873.89423 31939.0
+874.39349 25136.1
+874.89026 25508.0
+875.38953 10906.2
+882.40192 87065.8
+882.89539 364645.0
+883.39624 335539.3
+883.89758 160718.7
+884.40009 58654.5
+884.89502 11217.5
+891.40802 133101.1
+891.90930 158179.4
+892.40839 75909.4
+892.91162 27069.3
+893.41467 9012.9
+898.42285 13991.3
+902.66730 6970.3
+902.71234 7119.2
+907.41986 21600.7
+907.91327 19134.3
+908.41602 18338.8
+924.46875 59087.4
+925.47424 33339.4
+930.43610 18040.5
+930.92975 10036.0
+931.89032 7355.8
+938.94678 10560.7
+939.44220 17232.9
+939.94476 24897.7
+940.44525 11700.4
+947.95013 295714.3
+948.45093 324001.6
+948.95264 177538.0
+949.45343 55481.0
+949.96271 17336.9
+979.94275 12642.6
+980.44635 13859.0
+988.94879 15398.5
+989.45184 30224.9
+997.48499 45505.1
+997.98627 45992.0
+998.48468 32728.9
+1010.45953 9208.4
+1020.50708 15753.5
+1021.00964 10920.9
+1045.49292 8464.5
+1057.25464 10337.7
+1061.52209 25492.8
+1087.98145 8363.5
+1198.25525 36660.8
+1379.26721 7403.7
+1525.39197 11570.0
+1773.72473 7725.4
+1838.88513 8308.8
+1872.89172 8578.1
+1878.70752 11702.8
+1879.22461 27892.5
+1879.54431 244264.7
+1879.87476 30845.5
+1880.71777 9510.1
+1882.55859 10414.0
+1907.05249 95150.6
+1918.78772 8300.1
+1975.19580 7844.7
+S	1747	1747	1879.92199127
+Z	3	5636.491
+Z	2	3757.996
+532.55591 2109.3
+573.61334 742.9
+589.76263 526.2
+630.38348 857.8
+654.08771 627.1
+795.54785 792.4
+813.77673 803.6
+1013.49292 702.7
+1021.10620 742.6
+1057.31421 1042.7
+1198.24414 2919.6
+1525.32495 959.2
+1777.09302 1322.7
+1871.90369 673.2
+1879.31970 4911.9
+1879.61914 18410.9
+1881.06409 972.0
+1907.06531 7627.1
+1907.45813 857.7
+1930.51208 1177.1
+1940.73560 854.3
+S	1749	1749	588.2986921
+Z	4	2349.16347
+152.03009 876.2
+178.26151 889.7
+182.78839 1275.3
+183.11258 1646.5
+185.16219 934.4
+188.18622 909.5
+188.22499 856.3
+188.23212 801.6
+188.24980 1134.0
+188.26311 998.7
+188.29031 1027.5
+188.29932 1485.8
+188.32147 1156.0
+199.18057 13501.2
+199.19792 1374.4
+199.25159 1727.7
+199.26595 2574.5
+199.27983 3398.8
+199.29413 2240.8
+199.37849 1085.6
+200.18343 1674.5
+201.12370 1772.0
+206.21838 1011.9
+214.52626 892.9
+220.01393 908.3
+227.17589 2998.5
+240.09767 1379.1
+242.15030 3306.3
+243.13297 2401.0
+258.10812 2540.0
+271.64056 1389.2
+272.10913 1030.9
+296.19687 1400.7
+308.90869 1237.3
+309.80893 918.9
+316.16220 945.9
+324.19168 2499.1
+340.10138 1070.1
+342.20230 3153.8
+345.15878 1344.6
+356.21832 5274.4
+356.73380 862.6
+363.16913 1199.0
+371.19153 5161.4
+387.20456 1959.3
+404.37238 837.4
+423.25986 10456.4
+424.26328 2889.8
+427.29205 2692.2
+428.29294 1551.2
+447.49127 1011.2
+452.25183 1762.1
+455.28629 8449.7
+456.29147 1347.9
+458.24286 2035.2
+459.32199 1008.4
+462.73697 1511.1
+470.25928 2004.9
+503.24548 1134.5
+503.71259 1244.4
+508.90631 19897.2
+509.24084 24204.5
+509.57443 9138.0
+509.90833 3943.3
+531.26465 3035.5
+532.54633 2891.9
+535.74902 1060.1
+538.29083 1314.3
+540.37823 1117.9
+545.91656 4179.1
+546.25214 6301.1
+546.58698 2642.9
+546.91205 1455.1
+549.23761 948.4
+559.78003 1146.0
+560.02716 2809.4
+560.27600 1077.3
+561.28833 3252.2
+568.36902 5121.3
+594.94391 1133.6
+599.30243 1847.6
+620.62128 4053.1
+620.95685 3056.4
+621.29529 2054.1
+621.62268 1778.1
+626.30133 1732.4
+626.62482 1859.7
+626.95898 2229.8
+632.30109 33438.5
+632.63550 46567.4
+632.97015 30131.0
+633.30518 12243.9
+633.63666 2680.7
+634.02936 991.9
+640.80249 1574.9
+641.29907 1588.0
+649.80585 2894.0
+650.31000 3395.3
+656.81671 8283.3
+657.31775 7715.4
+657.81866 2165.2
+659.65112 1102.9
+659.97858 1628.8
+660.31653 1112.9
+665.32446 38520.0
+665.65845 56559.2
+665.99298 37916.8
+666.32697 15023.7
+666.66205 3312.7
+676.63446 1951.8
+690.30249 1276.7
+691.31744 1286.4
+692.85400 1005.8
+696.33160 5021.2
+696.42822 3291.7
+696.66376 10095.2
+696.99603 10820.1
+697.32764 11232.6
+697.43268 1030.6
+697.66370 4555.0
+697.99323 1689.4
+700.70929 1392.0
+702.02026 1067.0
+702.33508 108724.3
+702.66919 162548.1
+703.00354 120188.3
+703.33746 57137.9
+703.67084 24159.0
+704.00397 5129.5
+704.33008 1110.7
+706.35748 2141.9
+706.68921 2435.4
+707.02319 1720.4
+707.35742 1337.6
+707.69604 1738.7
+708.00702 920.1
+708.02380 969.1
+708.33905 260639.9
+708.67261 359331.1
+709.00641 236928.9
+709.34015 99623.0
+709.67358 32827.3
+710.00519 7813.5
+710.33691 3389.7
+710.66486 2566.1
+711.00146 2237.0
+712.39136 1120.8
+713.35608 1612.6
+713.85883 2440.6
+714.33002 3723.0
+714.83289 1961.9
+734.03375 1120.6
+734.36542 1841.7
+738.36676 2561.9
+739.37122 1615.2
+740.36609 3463.1
+740.69879 1421.9
+746.03265 69998.9
+746.36719 107688.9
+746.70148 79700.8
+747.03571 34544.8
+747.37036 10246.8
+747.70557 1940.8
+749.36621 1501.0
+753.85077 2712.6
+754.34985 4641.6
+754.84991 5268.1
+755.34393 1850.1
+762.85602 88695.3
+763.35742 96219.5
+763.85895 52255.0
+764.36023 16075.0
+764.86176 5198.5
+786.86230 2353.5
+795.55231 1870.1
+809.86652 1965.4
+810.36292 1877.3
+814.42706 2398.8
+815.43848 1005.3
+818.37170 30273.9
+818.87347 34023.7
+819.37506 18687.0
+819.87640 8036.3
+820.37543 2285.7
+825.39771 16225.6
+826.40179 6937.3
+827.37476 13767.6
+827.87854 24520.5
+828.37933 11802.2
+828.88098 4052.5
+841.86987 2804.9
+842.37378 4837.5
+842.87683 2284.0
+843.38275 1124.2
+850.87549 5291.2
+851.37659 6667.2
+851.88177 2965.1
+864.09015 943.7
+873.89221 1757.8
+874.38177 2694.0
+874.89105 2623.3
+882.40332 5019.2
+882.89569 27215.3
+883.39587 25987.8
+883.89734 18592.4
+884.39734 8007.8
+884.89789 1455.6
+890.44141 1050.0
+891.40686 8828.3
+891.90875 14977.0
+892.40979 6392.0
+892.91553 3359.9
+907.42120 1487.6
+907.92188 1528.9
+908.42047 1263.9
+924.46625 4364.2
+925.47198 2702.1
+926.42120 909.9
+927.51410 1951.7
+930.92310 1337.5
+931.13855 1128.1
+945.11609 1319.0
+947.95026 18428.3
+948.44983 27590.2
+948.95172 20224.0
+949.45245 7930.3
+949.95538 2019.4
+982.87054 912.8
+989.44843 2229.4
+997.48676 2641.5
+997.98596 4159.5
+998.48358 2132.2
+1044.88306 1093.9
+1054.67273 1021.8
+1061.52466 1992.4
+1102.44861 1368.5
+1144.98901 1034.7
+1198.22180 4846.3
+1213.46033 959.4
+1876.48987 915.7
+1878.16931 1357.6
+1878.94238 2478.2
+1879.15173 3220.2
+1879.52100 31688.1
+1879.85596 3898.6
+1907.08057 11998.9
+1916.38879 864.5
+S	1750	1750	1879.98940793
+Z	2	3758.131
+Z	3	5636.693
+532.55383 1991.7
+532.60931 571.1
+573.78046 772.5
+580.51178 638.2
+636.70642 592.6
+649.21863 607.3
+672.21710 692.2
+676.65167 1100.9
+685.56274 662.0
+697.80383 625.5
+709.39252 651.2
+745.89294 654.1
+795.54724 1037.5
+854.82532 598.6
+908.94611 668.0
+1057.25439 795.4
+1188.18127 785.7
+1198.23523 3167.1
+1352.89185 671.3
+1611.18201 778.6
+1763.76147 765.3
+1773.28711 634.3
+1807.46411 602.4
+1877.62732 641.6
+1878.62354 973.7
+1879.14624 2893.1
+1879.56470 18450.7
+1880.01306 2315.2
+1880.56628 1189.3
+1907.04846 7677.4
+1930.67029 915.3
+1994.21509 677.1
+S	1751	1751	589.0508246
+Z	4	2352.172
+161.66118 514.3
+162.47923 557.8
+164.20140 553.9
+165.77487 909.4
+168.82243 611.6
+185.40784 576.5
+188.26361 854.6
+188.26865 886.1
+188.27475 907.8
+188.28342 933.9
+188.29631 748.5
+188.30414 1041.0
+188.31837 769.0
+195.71240 621.5
+198.88911 1082.7
+199.16618 560.3
+199.18022 6274.5
+199.22928 1058.3
+199.24684 781.6
+199.26929 2288.5
+199.27847 1312.2
+199.36748 1108.2
+199.37587 676.4
+201.41492 597.3
+214.52016 604.6
+227.17519 1018.4
+242.14951 876.6
+271.60654 647.2
+284.05258 670.7
+285.63553 764.0
+291.70508 573.5
+308.89105 463.2
+308.90021 478.1
+335.30075 527.0
+341.21783 661.9
+342.20221 1157.0
+342.27393 652.1
+348.02179 648.6
+356.21753 1861.5
+371.19162 1338.2
+415.44244 780.5
+423.25946 2905.7
+427.29330 855.8
+437.12292 548.7
+455.28397 2167.6
+458.24387 846.3
+468.43265 568.9
+508.90640 7611.7
+509.24155 6096.6
+509.57471 2342.7
+532.54114 2103.6
+545.91577 2996.3
+546.25220 2195.5
+546.58344 823.9
+555.09814 676.2
+555.61407 577.0
+560.02197 618.0
+560.27814 755.4
+561.28564 1336.8
+568.36884 1664.1
+599.30640 1070.6
+599.36908 610.4
+620.62042 791.3
+626.29889 570.4
+626.33313 557.8
+632.30109 14912.5
+632.63525 16653.8
+632.96967 9398.9
+633.30231 3196.4
+633.63916 884.0
+636.83203 1654.2
+649.80609 1463.1
+656.81531 1016.1
+657.31879 1580.3
+665.32373 18114.6
+665.65802 22388.4
+665.99237 13329.8
+666.32599 5347.6
+666.65564 1262.4
+676.64612 810.0
+676.99774 624.8
+696.33221 1304.2
+696.42200 1002.3
+696.66205 4495.0
+696.99664 3926.1
+697.33160 2605.1
+702.33466 43462.4
+702.66882 59384.0
+703.00305 39487.1
+703.33765 16803.3
+703.67291 4596.8
+705.41687 577.3
+706.35480 901.4
+707.98462 864.5
+708.33856 119255.7
+708.67224 141650.2
+709.00604 101558.5
+709.34021 46493.5
+709.67413 12784.8
+710.00897 3488.8
+710.33392 951.6
+710.67462 1273.0
+710.98743 644.9
+713.86060 1394.8
+714.33704 1115.9
+716.92548 698.1
+740.36066 1174.2
+741.89496 895.7
+746.03241 28233.0
+746.36719 40534.6
+746.70123 23657.9
+747.03491 11243.1
+747.37085 3914.3
+754.35522 996.4
+757.40631 888.1
+762.85608 25487.0
+763.35712 23479.8
+763.85834 12077.8
+764.35876 4010.4
+764.85864 957.8
+814.43182 1607.8
+815.39539 645.4
+818.37225 6137.2
+818.87354 7878.4
+819.37305 3518.5
+819.87109 984.1
+823.28778 559.2
+825.39923 2656.8
+826.40326 1880.4
+827.37463 6482.8
+827.87848 7021.7
+828.37811 2954.9
+828.88800 1018.4
+837.29181 652.9
+842.36798 857.5
+850.87671 2105.0
+851.38147 1608.0
+851.88464 1178.8
+874.89709 744.8
+882.40460 848.2
+882.89557 4871.0
+883.39661 5965.7
+883.90076 1929.4
+884.39478 1284.5
+891.40497 2665.2
+891.90759 3894.8
+892.40918 2086.2
+924.47577 952.9
+927.51636 1559.2
+947.94855 4423.2
+948.45026 4871.2
+948.94867 3950.1
+949.46118 1102.7
+989.94275 669.9
+1051.50488 699.9
+1057.25964 962.0
+1061.50830 1013.6
+1086.57568 524.5
+1190.94702 574.3
+1198.20862 3183.1
+1198.55518 571.2
+1525.38672 717.8
+1746.17261 670.5
+1771.88184 639.6
+1877.59766 647.4
+1878.48499 736.1
+1878.82813 915.9
+1879.54700 20306.9
+1880.54724 807.7
+1907.05127 7783.5
+1930.57849 874.5
+S	1753	1753	726.3360366
+Z	5	3626.64106
+188.24094 66764.2
+188.26039 99888.0
+188.27208 101248.4
+188.28188 120445.1
+188.28995 123213.1
+188.30376 106490.9
+188.31770 83670.6
+188.32434 65681.3
+188.34732 49041.9
+188.45796 35293.2
+199.17686 80555.5
+199.19125 52451.3
+199.26038 107770.3
+199.27457 181933.5
+200.51805 37877.9
+247.71191 42759.0
+256.98465 40753.1
+270.60760 42135.6
+271.60901 40791.8
+326.04730 37611.4
+355.21820 41507.9
+399.75757 42868.8
+416.03140 38252.2
+427.54346 38594.9
+448.02393 44725.5
+499.45605 53298.6
+506.18811 39536.6
+519.57263 40962.8
+532.56189 126617.6
+538.46246 45840.7
+549.14905 46639.0
+613.08984 42840.5
+636.33075 75352.2
+643.27386 48692.9
+670.79596 45385.9
+674.29999 72144.2
+674.79224 61096.1
+676.62341 77497.0
+704.32428 80733.8
+717.12579 40092.4
+795.55884 78258.0
+799.28448 42291.9
+962.96350 45573.0
+1057.20947 52750.8
+1188.27515 57656.9
+1198.25354 213082.9
+1489.63074 49988.1
+1525.38806 61849.0
+1813.37683 41969.4
+1865.87256 39314.3
+1878.13599 94053.1
+1879.48547 1347377.9
+1879.98523 75038.5
+1880.39612 56013.7
+1880.82849 50334.1
+1907.05078 502809.8
+1945.67993 37974.2
+S	1754	1754	712.8068246
+Z	3	2135.145
+Z	2	1423.766
+188.26263 1739.3
+188.27628 2029.6
+188.29063 2454.9
+188.32428 801.2
+188.46120 581.9
+194.05792 623.1
+196.92142 606.8
+197.69643 477.8
+197.70322 620.9
+198.89659 888.1
+199.15753 620.6
+199.17337 1096.2
+199.19624 708.7
+199.21585 834.7
+199.25027 1236.9
+199.26236 1070.4
+199.27225 2288.7
+199.29953 765.6
+199.33423 552.8
+199.37024 1024.7
+209.43338 673.3
+212.10283 986.8
+225.84679 633.2
+233.12810 1558.6
+233.57536 584.5
+257.31369 552.6
+258.71344 613.8
+261.12476 625.1
+271.62372 745.0
+285.82138 536.8
+298.48688 636.3
+303.17795 1770.6
+317.67874 672.1
+325.18713 2051.3
+341.68484 15621.2
+342.18646 4089.4
+342.68805 866.5
+345.22327 989.5
+353.40292 730.8
+355.16730 844.8
+360.98163 640.7
+375.16934 710.5
+381.36874 825.9
+391.21890 8206.0
+391.71960 2849.9
+392.19556 1257.7
+393.17630 1081.2
+397.54465 630.3
+408.80920 602.5
+416.26135 13030.7
+417.26575 2320.9
+436.69891 1164.2
+440.75305 1778.9
+441.25333 975.4
+464.24115 610.4
+466.24039 665.5
+468.69574 3651.7
+469.20117 1361.2
+476.27148 16370.1
+476.77301 8931.8
+477.27573 2672.4
+492.76733 2329.9
+493.26508 951.4
+497.19711 625.7
+501.24020 1058.5
+502.21704 1148.0
+502.72244 809.1
+505.27905 1252.3
+507.19022 10093.8
+508.19186 2551.4
+517.30713 1052.5
+523.28711 1521.9
+525.21008 687.9
+527.29230 2464.3
+529.23596 6626.5
+530.23920 1806.1
+532.58167 1968.3
+533.78394 1847.1
+534.21704 3304.8
+534.28271 1214.8
+534.71527 1432.0
+534.79053 808.6
+535.21063 651.5
+538.23694 677.5
+541.29254 2509.9
+541.79279 2072.7
+545.30298 26531.1
+546.30627 8005.3
+547.30933 891.8
+550.29803 10765.7
+550.79901 5392.2
+551.29559 816.5
+559.73047 1468.2
+560.23560 1777.7
+560.73120 818.0
+561.24500 3077.2
+561.72766 1006.5
+569.73383 1422.4
+578.22827 1732.8
+578.27551 1208.2
+579.25140 1370.9
+581.24786 905.4
+582.72687 787.3
+583.22394 707.5
+583.73529 618.8
+589.80304 764.3
+590.29858 861.7
+591.73071 3451.5
+592.23212 2281.7
+595.25037 7351.8
+595.75293 5933.6
+596.25665 1755.1
+598.31396 3319.8
+598.81342 2030.6
+599.30389 1899.8
+599.80798 718.5
+603.37982 700.3
+607.32037 4188.1
+607.81891 1430.4
+610.50671 668.1
+612.27454 3126.8
+614.36102 28986.1
+615.36420 7551.1
+616.36072 869.6
+618.24548 1513.7
+618.74091 1302.7
+619.23975 1197.3
+627.24908 19354.1
+627.74945 11491.9
+628.24957 5051.8
+628.74957 1673.1
+630.43188 603.7
+635.35870 678.2
+637.83862 916.4
+644.78632 3285.5
+645.21295 645.5
+645.28436 1643.4
+646.31030 980.6
+646.84094 4607.9
+647.34265 2121.9
+651.99103 14671.3
+652.32446 19067.2
+652.65869 10770.1
+652.99365 4864.8
+653.34058 1915.7
+655.84515 14072.1
+656.34698 6373.0
+656.84906 924.3
+658.25739 767.7
+661.65308 981.1
+667.31903 1361.0
+667.77728 1216.6
+667.98108 1115.0
+668.27777 948.2
+671.38336 6532.6
+672.38611 1075.9
+673.32300 21727.4
+673.65747 22243.1
+673.99109 11679.1
+674.06189 680.8
+674.32556 5743.7
+674.66394 888.0
+675.00159 765.0
+676.27118 21102.1
+676.64288 1000.8
+676.78387 6660.9
+677.27783 8190.1
+677.78442 2381.8
+678.26898 1574.0
+678.98694 892.3
+679.31622 1672.9
+680.82025 640.4
+681.36041 925.5
+682.36212 66008.8
+683.36456 20995.2
+684.35468 5957.1
+684.66180 8593.2
+684.99457 8340.0
+685.32922 4651.4
+685.65948 1928.9
+688.42340 802.2
+689.40393 666.9
+689.72601 888.8
+690.33307 114749.8
+690.66663 141421.3
+690.88220 979.8
+691.00012 82348.0
+691.33429 31054.9
+691.66956 7256.8
+691.93823 810.2
+692.00513 2584.1
+692.24811 986.6
+692.33051 1482.9
+692.39447 2904.3
+692.58575 976.3
+694.32355 798.2
+695.36658 715.6
+729.36371 1583.6
+762.84381 1567.3
+763.34900 1709.5
+763.85016 1464.7
+770.87921 2117.0
+771.38080 2368.6
+772.39709 673.2
+781.43048 47439.5
+782.43335 20738.9
+783.43646 4091.5
+792.40228 994.6
+794.31317 841.9
+794.84399 3225.6
+795.35016 2988.7
+795.84900 2236.5
+796.35663 1127.7
+802.88281 2801.5
+803.38232 2462.6
+803.88574 866.3
+827.36707 2873.2
+827.86932 3301.8
+828.37836 1146.4
+836.87354 700.1
+845.86780 857.3
+859.36707 6392.7
+859.87048 5294.1
+860.36786 2974.0
+860.86957 1348.7
+870.42206 809.8
+872.38611 2030.3
+873.39270 1425.5
+880.49811 13361.2
+881.50201 6338.8
+882.50543 2483.6
+883.13708 918.8
+883.91260 981.0
+884.42841 1394.1
+890.92059 1286.7
+891.42444 1426.4
+901.48822 20023.8
+902.49054 8294.6
+903.49890 1490.7
+915.90912 2347.9
+916.41351 2207.2
+916.90344 1227.6
+922.92096 2133.8
+923.41296 910.9
+923.91931 921.4
+934.36096 697.1
+936.38574 6384.0
+937.39038 2598.5
+938.39221 959.5
+947.94196 2977.9
+948.44324 2572.8
+948.94244 1952.9
+951.53625 5730.6
+952.53320 3360.1
+963.33502 716.2
+979.93909 4661.8
+980.43903 4155.7
+980.94080 2714.3
+984.52179 732.5
+990.66077 877.3
+993.37402 904.2
+1002.53436 6592.5
+1003.42938 1927.2
+1003.53796 2950.3
+1012.52875 1308.5
+1057.23853 830.2
+1066.56262 9339.6
+1067.42578 3446.9
+1067.56677 5332.2
+1068.42358 1681.1
+1068.56494 1607.6
+1081.57727 2958.5
+1082.57739 1597.4
+1099.58838 45474.2
+1100.59131 20123.8
+1101.59436 4278.6
+1118.45667 5649.8
+1119.45654 3359.5
+1120.45264 1408.7
+1174.78394 690.2
+1182.45215 8772.4
+1183.45471 5339.1
+1184.46240 2165.3
+1189.49500 3744.1
+1190.49927 2244.1
+1191.49524 1698.5
+1197.60657 3787.4
+1198.30603 3082.9
+1198.60657 2522.6
+1199.60144 1552.9
+1204.49060 677.5
+1213.63037 11516.5
+1214.63513 4885.7
+1215.64014 1023.3
+1224.57495 1403.8
+1232.77551 700.7
+1253.49011 8614.6
+1254.49304 4856.8
+1255.49939 2251.3
+1288.55469 2750.0
+1289.56689 1738.8
+1290.56799 1249.9
+1291.60059 661.3
+1352.55945 5910.0
+1353.56543 3823.3
+1354.56494 2151.3
+1355.56079 1062.7
+1387.62256 3068.9
+1388.63086 3123.3
+1389.63037 1254.7
+1434.61133 806.3
+1451.63110 6546.3
+1452.63159 4616.6
+1453.62244 2716.9
+1454.61633 948.4
+1742.10461 642.3
+1748.81946 737.3
+1777.59424 788.1
+1878.51099 1088.4
+1879.52954 19869.9
+1880.05920 595.4
+1880.23303 1303.3
+1880.52710 976.0
+1882.98218 917.8
+1906.83984 1085.2
+1907.12256 7515.9
+1930.62451 967.9
+S	1755	1755	534.2599971
+Z	4	2133.00869
+141.49834 572.3
+152.87465 670.4
+165.77666 720.3
+169.01968 560.5
+175.68216 630.2
+176.80646 608.0
+178.07278 607.3
+188.24933 495.9
+188.25499 576.7
+188.26401 955.6
+188.27299 1167.1
+188.28391 1239.7
+188.29037 1249.5
+188.29915 1506.0
+188.30840 1158.7
+188.31256 1108.3
+188.32043 821.2
+195.07657 1025.7
+199.16655 921.6
+199.24519 2093.5
+199.25676 1138.2
+199.26402 1160.8
+199.27354 2246.9
+199.32999 648.1
+199.36198 786.2
+204.21916 672.2
+213.08722 2077.6
+214.50760 776.4
+223.97382 555.2
+230.35863 500.3
+233.12837 7696.4
+233.55685 942.6
+234.13005 1101.6
+247.07497 600.9
+255.10864 4005.1
+255.82349 568.7
+256.11221 779.6
+259.07452 1621.5
+261.12283 988.8
+261.81985 576.9
+268.11584 1005.9
+271.50397 598.1
+271.76999 692.2
+272.13507 5949.2
+275.12442 1901.2
+277.08502 3033.4
+283.63663 1777.5
+285.16678 1562.0
+289.12201 3197.2
+289.62048 832.2
+292.64331 1160.7
+297.63474 3689.1
+298.12689 7254.5
+298.62802 2042.7
+303.17786 983.2
+306.64014 11546.7
+307.14026 2606.2
+318.11240 932.7
+320.63138 804.6
+321.12091 3819.2
+321.62323 1520.3
+329.63403 10631.7
+330.12512 3677.1
+330.62537 1102.0
+338.63934 48258.7
+339.14078 15521.4
+339.63995 3586.4
+341.68484 5828.4
+342.18616 2195.5
+355.16736 983.4
+361.27310 573.2
+365.15610 1090.3
+372.19894 1200.1
+382.18381 1302.3
+383.16653 965.7
+387.13394 1072.6
+387.16574 5682.2
+387.66711 1091.7
+388.11679 3322.9
+391.21924 3781.4
+391.72104 2514.5
+399.87326 1863.7
+400.19287 10801.2
+401.19803 1983.5
+405.14276 3311.7
+414.20944 3269.0
+416.26120 3573.7
+417.18314 1002.8
+422.70071 1588.2
+436.69910 1544.1
+437.20160 1249.5
+440.75275 3387.8
+441.25519 1304.3
+443.21341 556.8
+445.69489 1262.1
+446.19949 974.9
+446.69485 623.8
+454.11856 567.1
+454.69995 9021.8
+455.20160 6211.3
+455.70181 1447.2
+459.69162 4582.2
+460.18112 3317.4
+460.68375 1925.8
+461.18341 1030.8
+466.20456 1157.0
+468.69711 28283.8
+469.19833 16813.4
+469.69907 6863.8
+470.19745 1195.1
+472.57346 689.1
+476.19147 857.7
+476.27161 13347.1
+476.77332 7898.0
+477.27338 3148.7
+482.63266 629.1
+486.57755 89096.9
+486.91180 81776.3
+487.24570 49599.0
+487.57971 18166.8
+487.71243 664.8
+487.91385 6888.0
+488.24707 1315.4
+489.74557 1789.6
+493.21265 1113.3
+501.24026 2587.0
+502.23282 1246.9
+507.19034 2716.4
+508.19470 925.3
+509.57083 786.8
+511.22699 1350.8
+512.20837 1409.8
+513.49548 1117.2
+513.74866 2665.6
+513.99835 2237.6
+514.25049 2337.3
+514.92700 897.6
+518.00134 29704.0
+518.25183 39066.4
+518.50214 32029.8
+518.75262 16746.0
+519.00238 5928.2
+522.77252 657.1
+532.58875 1812.7
+545.30273 3592.3
+546.30536 860.1
+547.22992 1242.5
+561.24475 1832.6
+571.22803 6097.7
+572.23340 1515.5
+589.23889 2054.3
+590.29749 1023.6
+590.80219 1113.5
+591.27979 614.9
+599.30493 109230.0
+599.80603 81322.6
+600.30658 39613.9
+600.80719 13424.5
+601.30737 4423.2
+601.36176 673.6
+612.27130 830.2
+613.77802 640.8
+620.98633 1625.7
+621.32385 1306.9
+654.31061 762.3
+658.25842 2384.6
+676.27069 59339.9
+676.64935 948.1
+677.27307 20759.6
+678.27209 5797.8
+679.27417 1675.1
+680.83630 13283.6
+681.33807 12596.7
+681.83820 6417.3
+682.36523 12567.0
+682.84229 973.5
+683.36536 5554.6
+684.36792 1541.6
+720.36102 777.1
+720.85730 1384.0
+721.36279 810.0
+727.29645 772.4
+728.34467 908.7
+728.83221 722.5
+729.36316 161087.2
+729.86395 153554.7
+730.36456 92553.1
+730.86597 36409.4
+731.09521 763.4
+731.36755 8833.3
+731.86926 1825.7
+731.94800 841.2
+736.13263 697.4
+776.35144 767.3
+778.44446 687.7
+778.89587 573.2
+781.43024 8520.7
+782.43359 3754.8
+783.44147 1043.6
+794.31219 6103.5
+795.31720 2748.3
+795.55261 902.4
+796.31451 995.3
+802.87817 1439.0
+803.37762 1114.1
+807.31110 934.0
+893.55536 643.7
+936.38916 1548.6
+937.39587 1049.9
+938.38153 777.8
+951.52905 972.3
+979.69684 741.7
+1198.31628 2997.3
+1304.72729 588.1
+1349.06506 697.5
+1879.00037 1185.4
+1879.29590 3480.8
+1879.54431 19688.7
+1880.19360 693.6
+1880.41296 881.9
+1900.50281 643.1
+1907.00171 7292.0
+1907.26587 794.4
+1909.20740 631.5
+1918.72644 673.6
+1930.53479 752.5
+1965.87671 572.0
+S	1757	1757	534.2532221
+Z	4	2132.98159
+146.20572 5015.3
+146.41298 5018.5
+146.92921 6035.2
+154.23041 5118.8
+169.49989 5867.8
+172.93018 5438.0
+182.78468 5483.9
+187.81328 6247.3
+188.26180 13849.5
+188.27647 19610.0
+188.30702 16680.9
+188.31920 14609.2
+188.33691 6465.9
+198.89099 7106.6
+199.16280 7803.3
+199.17055 8812.4
+199.18701 7218.2
+199.26007 18567.2
+199.26801 14816.5
+199.27872 16497.3
+199.37662 7431.8
+213.08714 7411.2
+233.12817 21539.6
+237.50165 5353.2
+243.46538 6270.5
+250.83772 6600.0
+251.16789 4776.4
+255.10783 19581.0
+255.30270 5907.9
+259.07379 8710.6
+271.76367 6894.1
+272.13455 25227.3
+277.08420 15008.0
+285.79999 5304.0
+286.14014 6705.4
+289.12225 13960.9
+289.62149 7786.9
+297.63510 14510.9
+298.12637 33461.3
+306.63974 53843.6
+307.14063 9600.0
+320.62918 5922.4
+321.11957 25159.9
+329.63406 45681.5
+330.12222 7721.2
+330.13760 13450.5
+334.98645 5127.5
+335.34161 5079.2
+337.60425 5436.9
+338.63895 277982.7
+339.14056 67849.6
+339.63950 11890.6
+341.68555 25285.8
+387.16498 19409.7
+388.11966 9488.9
+391.21710 12087.4
+391.71756 7857.2
+399.87140 10722.9
+400.19247 43008.5
+401.19604 6912.0
+403.29471 5949.7
+405.14490 9832.2
+414.20883 13953.4
+416.26019 12556.3
+427.55112 7350.9
+436.70026 8515.2
+437.19971 6795.5
+439.48184 5782.7
+440.75223 10059.6
+445.69525 10017.5
+445.98834 5499.6
+454.69955 64957.0
+455.20056 28501.2
+459.68951 15619.2
+460.18268 18497.6
+460.67947 8928.8
+468.69675 194079.1
+469.19797 93700.7
+469.69791 30257.3
+470.19904 6221.9
+476.27100 59619.4
+476.77246 33660.9
+486.57697 531788.6
+486.91147 385686.3
+487.24496 197914.5
+487.57935 43173.8
+501.24045 12575.3
+507.19095 13912.9
+511.22253 6378.0
+513.49609 7216.5
+513.74908 9468.9
+513.99823 7025.5
+514.25299 11634.6
+518.00079 134180.0
+518.25153 174388.0
+518.50153 112352.4
+518.75269 47333.3
+519.00446 10778.6
+532.60486 18903.5
+545.30127 11109.1
+549.17017 6113.2
+571.22803 31649.5
+589.23602 9117.1
+599.30438 593792.3
+599.80554 347162.6
+600.30621 132457.2
+600.80658 28490.5
+613.32562 5652.1
+627.24792 5516.6
+630.42181 8552.3
+655.26373 5350.7
+676.27020 273614.8
+676.64392 9683.8
+677.27277 72236.6
+678.26837 14420.5
+680.83588 58114.4
+681.33704 45909.9
+681.83771 19916.0
+682.36340 53291.6
+683.36426 16104.8
+729.36255 950353.9
+729.86353 684554.0
+730.36426 341734.4
+730.86572 102485.5
+731.36658 12292.0
+731.45746 5544.6
+764.77808 4663.9
+764.82996 5008.0
+781.43011 24828.1
+782.35712 5560.5
+782.43756 12227.2
+794.31177 30269.0
+795.31689 10528.7
+795.55048 8302.7
+796.32770 6235.5
+858.80139 5879.2
+873.88458 5341.9
+917.23779 5249.2
+947.09412 5660.9
+968.61462 5282.0
+974.33875 6777.7
+1021.03442 5508.5
+1021.12860 5372.2
+1057.23450 9803.4
+1198.35461 29453.7
+1497.30627 6888.0
+1525.43445 7602.7
+1682.96765 5570.5
+1721.78186 6360.8
+1729.31763 5253.4
+1878.92151 5828.9
+1879.53235 181902.3
+1880.08020 8557.5
+1907.04272 70252.9
+1930.65894 11394.1
+S	1758	1758	726.3255986
+Z	5	3626.58887
+198.89259 932.4
+199.13486 773.4
+199.17270 710.5
+199.19661 640.9
+199.23044 988.5
+199.24748 937.3
+199.25905 1091.7
+199.26953 2422.5
+199.29337 1276.8
+199.39218 559.7
+202.05807 556.9
+213.09346 569.5
+217.69522 578.5
+234.82657 583.5
+246.15573 3179.7
+256.23288 611.2
+265.96368 530.6
+270.06317 545.2
+276.19690 594.3
+288.06583 628.6
+288.34668 572.7
+295.64090 662.3
+303.77573 672.7
+352.66150 1493.7
+370.68686 636.4
+397.26025 756.5
+421.70786 776.0
+460.18790 676.9
+479.22473 974.1
+480.56537 738.7
+515.35950 671.2
+528.27795 558.5
+532.58655 1633.4
+534.73627 1344.1
+538.27423 829.9
+543.74274 4191.5
+544.24316 1692.7
+549.26001 838.3
+574.29382 1736.3
+575.31653 542.3
+595.29340 779.9
+595.78711 650.3
+607.41779 1007.9
+617.27777 4475.3
+617.77802 2290.2
+622.68134 621.2
+628.48206 801.9
+630.28131 1101.9
+632.23169 680.7
+636.33356 12426.4
+637.33636 3691.2
+638.80988 626.9
+641.80615 1143.1
+642.30414 835.6
+646.29175 637.2
+661.34979 599.3
+662.29889 926.8
+665.21497 664.7
+665.78809 1080.5
+666.28021 675.2
+667.97253 974.2
+668.30786 2649.6
+668.81769 723.9
+674.29797 10885.2
+674.79852 5450.0
+675.29999 2354.1
+676.65094 747.7
+677.32562 2875.4
+677.82562 2273.2
+678.31793 1255.7
+687.37518 1997.1
+694.31360 1295.6
+700.99402 661.8
+704.31915 13449.1
+705.32172 4112.4
+705.66309 857.7
+706.32300 861.9
+711.65662 932.3
+711.99371 675.1
+731.14807 780.6
+749.32068 1389.4
+754.66461 801.2
+755.33917 844.2
+760.67017 780.2
+789.34448 1617.7
+793.01703 1234.3
+793.35065 836.7
+795.56378 1030.1
+798.68860 720.2
+799.01849 1339.9
+799.86707 823.9
+811.86548 945.8
+815.43475 1786.0
+816.35406 852.7
+824.86139 961.8
+825.87610 1175.0
+830.37970 4022.7
+830.88104 3782.7
+831.37878 1185.2
+837.35724 768.0
+837.85474 1024.8
+838.11792 760.6
+840.87048 1269.1
+841.33044 1694.3
+841.70294 1001.1
+842.10278 741.3
+844.87366 1571.9
+845.12396 1826.4
+845.36426 1248.4
+847.71368 1407.6
+848.04327 2599.5
+848.37567 1861.4
+849.18127 732.3
+862.63525 907.5
+879.03961 710.3
+887.89203 844.2
+896.91962 1012.1
+897.43835 812.2
+918.90753 1096.1
+923.06305 785.6
+923.73187 858.2
+934.73761 656.7
+939.39130 945.4
+944.91296 3579.8
+945.41638 2454.2
+945.93201 868.5
+985.95251 929.2
+1001.45386 2114.0
+1025.46228 1612.4
+1025.96570 1595.4
+1026.46594 1130.1
+1041.41040 737.0
+1057.25000 744.3
+1066.98376 699.5
+1067.47510 828.0
+1075.98511 1525.6
+1076.48499 1891.7
+1094.46204 2830.9
+1094.95740 940.1
+1102.43860 1495.3
+1124.61340 722.8
+1140.51099 2360.4
+1141.00378 1401.6
+1197.53613 818.6
+1198.03540 1002.2
+1198.31262 3302.6
+1295.44128 748.2
+1467.71155 858.6
+1560.34912 650.8
+1804.94519 557.2
+1870.32227 779.8
+1879.28650 1781.8
+1879.56116 19742.5
+1880.66296 975.5
+1881.13416 671.4
+1881.83899 719.7
+1906.49402 657.5
+1907.04602 7494.7
+S	1759	1759	535.0043246
+Z	4	2135.986
+157.60579 60138.4
+165.54286 50368.7
+169.50748 55672.9
+172.97963 53342.4
+175.25185 51528.9
+188.25859 56843.4
+188.26807 77198.6
+188.27692 108494.2
+188.28552 94302.2
+188.29408 67512.6
+188.30452 68254.0
+188.31909 77740.6
+188.45572 49831.9
+198.89349 79188.9
+199.17197 86482.7
+199.18372 96634.1
+199.24701 131910.8
+199.26001 97882.9
+199.26875 171667.6
+199.28119 162555.7
+206.56400 50118.9
+214.52649 59199.6
+221.97729 49200.9
+235.38237 66092.7
+236.21082 48497.8
+238.24142 50858.8
+238.71463 60113.8
+239.32884 47949.9
+255.30144 56572.5
+305.83707 59756.0
+306.64063 83271.8
+330.15143 58164.6
+332.46619 49843.4
+338.63873 533631.1
+339.14014 135212.8
+339.63211 51812.1
+342.30267 52201.0
+370.67758 59361.9
+400.19171 72526.1
+440.22440 50009.3
+453.42242 50527.8
+454.69986 105125.2
+465.80069 49847.1
+468.69687 366073.4
+469.19940 123162.4
+476.26971 116654.0
+486.57687 633492.6
+486.91165 458036.4
+487.24622 209640.0
+487.57898 102078.3
+517.99939 175533.5
+518.25092 124443.1
+518.50299 87204.8
+532.58862 167483.3
+578.16168 49153.8
+599.30463 650726.9
+599.80652 430784.1
+600.30573 166504.9
+676.27051 413449.2
+676.64795 117543.8
+677.26953 106097.0
+680.84528 54099.7
+681.34027 54068.0
+725.48578 55563.5
+729.36316 1333324.0
+729.86420 1136935.1
+730.36517 586363.8
+730.86389 147863.6
+777.20276 64995.8
+832.41095 48919.3
+838.64789 57067.4
+891.31378 52212.1
+934.49261 69539.3
+1057.25488 59776.1
+1192.99927 51526.7
+1198.31421 304863.1
+1378.86707 54218.7
+1426.45630 63705.5
+1596.01208 51494.1
+1597.92139 61292.3
+1694.49707 69656.6
+1791.40845 48816.2
+1869.30530 58985.3
+1875.28870 59444.8
+1877.03833 64123.6
+1877.58167 59217.1
+1879.01550 98192.2
+1879.56006 1749177.6
+1880.17053 149315.1
+1880.77026 86707.5
+1882.45337 59881.7
+1907.04602 676510.9
+1913.55200 70913.5
+1918.69141 59040.4
+1930.73157 114453.7
+S	1761	1761	534.2601196
+Z	4	2133.00918
+135.59052 642.5
+155.89626 569.6
+157.61165 750.1
+164.70633 527.5
+170.39236 542.3
+176.42528 621.9
+177.86269 600.4
+188.27071 1805.8
+188.28596 2294.9
+188.29660 2057.2
+188.36751 635.2
+198.38606 575.6
+198.89258 833.8
+199.17123 804.4
+199.17712 1052.0
+199.23618 580.0
+199.25186 1047.5
+199.26053 1994.6
+199.26883 1345.1
+199.27652 2271.1
+199.35909 745.6
+199.37494 779.5
+213.08723 1404.2
+233.12849 5264.7
+238.71770 760.5
+245.09535 679.2
+255.10860 2815.9
+271.91058 582.5
+272.13474 3419.9
+275.12500 865.8
+277.08533 2380.3
+280.19092 733.1
+283.63715 1148.1
+285.16638 1246.1
+286.14075 870.2
+288.62900 1013.4
+289.12149 1968.5
+292.64362 717.2
+297.63486 1789.9
+298.12689 3665.0
+298.62860 2034.0
+304.16440 615.5
+306.64038 4651.5
+307.14185 1689.0
+309.94373 612.7
+315.47913 624.0
+321.12134 2033.7
+329.63431 5446.1
+330.12350 1717.3
+330.13855 1226.4
+338.63925 28084.5
+339.14102 13016.8
+339.64001 3199.5
+340.14264 951.2
+341.68506 4341.5
+342.18753 2262.1
+342.68381 876.2
+345.19586 570.0
+364.36331 600.8
+369.90640 588.7
+382.18170 816.5
+387.16595 2311.9
+388.11707 1567.7
+391.21878 4660.7
+391.72089 2608.7
+397.17358 640.0
+399.87265 786.6
+400.19278 7318.7
+401.19733 1707.5
+405.14456 1903.3
+414.20923 2279.7
+416.26111 3232.1
+425.85529 614.2
+429.60669 626.9
+436.69821 1366.0
+437.19897 1449.6
+440.75299 3176.0
+441.25504 1471.7
+445.69366 887.4
+454.69989 7520.2
+455.20123 5611.4
+455.70200 2165.5
+456.20477 979.1
+459.69183 1949.3
+460.18207 2270.7
+460.68338 1744.9
+468.69708 18244.4
+469.19867 14439.9
+469.69824 5776.3
+470.20062 2130.0
+476.27164 10970.3
+476.77316 6890.2
+477.27628 2545.4
+479.23145 521.5
+481.82651 589.5
+482.68176 696.8
+486.57745 39742.3
+486.91162 58317.6
+487.24548 48017.2
+487.57950 19751.7
+487.91373 5461.9
+488.24896 1062.4
+493.21408 687.3
+501.23874 2311.9
+501.47006 533.4
+502.21829 1574.7
+502.71915 1636.7
+504.20346 555.6
+507.18915 1652.8
+512.20831 897.1
+513.74670 1203.0
+513.99969 1007.6
+514.25195 1081.4
+514.49957 929.1
+518.00104 12289.1
+518.25165 20601.4
+518.50214 25974.6
+518.75250 16824.9
+519.00250 8141.2
+519.25073 1989.6
+532.60156 2020.6
+545.30365 2471.2
+546.30634 1209.0
+549.18494 712.0
+561.24774 801.7
+571.22833 3639.1
+572.23529 1053.0
+589.23987 913.5
+598.29773 784.5
+599.30487 55190.6
+599.80615 58194.4
+600.30682 37291.6
+600.80701 12148.4
+601.30640 2688.8
+603.90961 560.8
+617.09601 570.2
+622.29419 636.6
+651.30981 886.6
+658.25970 807.2
+676.27051 33923.3
+676.59344 1237.0
+677.27271 16183.0
+678.27325 6895.0
+679.27155 1073.8
+680.83514 4823.6
+681.33868 7925.1
+681.83990 5445.9
+682.36493 12096.7
+683.36572 5073.1
+684.36731 1326.3
+720.35193 743.4
+721.36279 840.6
+727.79395 817.6
+729.36298 78634.1
+729.86401 104316.7
+730.36456 77313.2
+730.86511 35057.1
+731.36591 11513.7
+731.86835 1850.7
+731.95105 763.8
+781.42975 6635.0
+782.43488 3969.1
+783.44623 769.0
+794.31317 3569.0
+795.31604 2955.3
+795.55725 1400.8
+796.31470 1040.1
+804.38000 937.3
+880.50037 722.1
+936.39264 866.3
+937.39166 891.2
+981.91992 583.6
+1120.40173 600.3
+1151.07935 665.1
+1188.03284 673.0
+1198.34521 3133.6
+1347.76074 645.7
+1570.91089 576.9
+1859.98901 922.3
+1877.68518 728.4
+1879.40283 21106.9
+1907.05518 7378.2
+1918.77612 841.6
+S	1762	1762	535.0115746
+Z	4	2136.015
+136.86183 557.8
+137.91626 583.0
+195.07645 931.8
+198.88968 1062.0
+199.16115 833.8
+199.17253 768.3
+199.25961 1313.5
+199.27075 2408.5
+199.28433 1315.8
+199.29518 731.8
+199.36787 1096.4
+199.38510 772.4
+205.19508 588.3
+208.23099 538.0
+213.08667 2542.3
+233.12810 5545.1
+240.09741 569.8
+255.10867 3649.5
+259.07516 2415.8
+261.12335 1302.0
+269.38074 597.8
+272.13495 5226.0
+274.68958 595.5
+275.12457 1713.6
+277.08478 2913.4
+283.63742 2193.9
+284.13052 1330.2
+285.16705 1779.6
+286.14041 1343.8
+288.62949 943.1
+289.12167 3079.1
+289.62305 814.7
+297.63492 3710.5
+298.12677 6086.1
+298.62793 1807.9
+303.17740 1142.3
+306.64014 9408.6
+307.14233 2653.0
+307.64362 1279.6
+315.64838 661.4
+320.62845 1129.3
+321.11990 2934.2
+321.25037 626.4
+321.62299 841.4
+324.12085 752.7
+324.63846 626.2
+329.63382 9606.6
+330.12375 3028.9
+330.13782 2429.6
+338.63922 43649.1
+339.14078 15764.6
+339.63968 3029.1
+341.68481 6650.1
+342.18631 2279.8
+368.28003 670.9
+372.19949 766.2
+382.18109 822.6
+384.45630 528.5
+387.13150 1582.8
+387.16602 4782.3
+387.66635 1371.7
+388.11725 2362.0
+388.54767 552.7
+391.21936 6177.9
+391.71964 1942.1
+392.23264 534.4
+398.18063 686.4
+399.87164 1442.3
+400.19308 10028.6
+401.19775 1287.6
+402.51227 578.6
+405.14294 2614.1
+406.14822 670.6
+414.20901 3034.0
+416.26178 3049.9
+422.69934 1047.6
+427.56854 603.3
+428.18393 601.1
+436.69736 2182.9
+440.75336 5011.2
+441.25519 901.6
+445.69418 1359.0
+454.69958 13079.7
+455.20175 6275.5
+455.70123 2651.8
+459.69180 4084.4
+460.18237 3890.7
+460.68411 2468.5
+468.69696 33259.4
+469.19855 18286.7
+469.69855 7001.0
+470.19873 1949.3
+476.27142 13392.3
+476.77261 9294.5
+477.27426 2725.1
+477.77640 719.9
+478.87244 771.8
+482.51605 616.4
+486.57739 97338.6
+486.91187 78523.9
+487.24557 41105.8
+487.57941 17110.1
+487.91385 6850.7
+488.24680 905.7
+489.49414 1063.8
+493.21176 1236.3
+494.26996 654.0
+498.04932 583.2
+501.23865 2630.6
+502.21957 2964.8
+504.26285 610.3
+507.18912 2835.5
+508.19452 680.4
+508.25461 678.2
+512.21027 881.3
+513.49591 931.6
+513.74738 2318.9
+514.25806 754.5
+514.58826 1063.9
+516.70593 636.5
+518.00122 30991.9
+518.25165 40008.6
+518.50214 23794.8
+518.75256 11322.2
+519.00269 5392.1
+519.24860 1305.1
+532.61725 1706.2
+545.30322 3523.5
+546.30432 1059.0
+547.23383 1374.6
+561.24658 2212.7
+571.22858 5184.2
+578.60394 711.7
+589.23718 1846.4
+590.29578 1148.1
+599.30475 112245.4
+599.80591 74010.7
+600.30652 32561.5
+600.58270 586.9
+600.80688 11430.8
+601.30963 2320.3
+602.88348 755.8
+612.27509 867.5
+615.61591 689.1
+625.72052 545.1
+625.77954 583.7
+630.27472 861.1
+658.25793 1576.3
+676.27057 55003.2
+676.59991 1234.3
+677.27344 18449.3
+678.27173 5408.8
+679.26770 1032.0
+680.83563 11268.0
+681.33838 9084.8
+681.83850 5200.1
+682.36365 15165.7
+683.36450 7103.5
+684.36548 1033.6
+687.28564 757.9
+696.29974 1114.4
+696.79791 1177.9
+697.29639 741.6
+704.73877 554.9
+716.38574 634.1
+718.31329 767.8
+720.85992 1630.1
+721.36597 673.2
+722.59485 649.2
+728.33838 761.3
+729.36304 174454.5
+729.86383 153589.6
+730.36438 72869.6
+730.86517 31362.0
+731.12061 745.9
+731.36676 10812.3
+731.86975 1788.9
+752.83691 1112.7
+753.33777 791.9
+781.42950 9324.6
+782.43567 3504.2
+783.42725 760.6
+794.31354 5952.7
+795.31567 2162.4
+795.55157 935.1
+796.31854 880.9
+803.38251 1132.8
+803.88391 641.2
+807.30664 1736.2
+880.49957 793.3
+1019.73444 862.3
+1057.18677 1075.8
+1086.28687 635.7
+1175.84973 702.6
+1198.37988 3396.0
+1374.77942 615.4
+1465.60498 572.7
+1525.53784 601.1
+1718.40076 1389.6
+1872.79053 1211.1
+1879.44019 20916.6
+1906.87915 2422.7
+1907.15198 6226.6
+1930.69482 917.8
+S	1763	1763	463.5294046
+Z	4	1850.08632
+121.79453 2253.5
+133.09102 515.3
+133.14661 915.8
+137.81731 593.2
+147.64680 575.8
+169.13242 1004.2
+174.52483 641.4
+176.36235 625.9
+182.08505 666.9
+185.09074 608.3
+185.16464 1265.5
+187.14407 40381.2
+188.14714 3372.7
+194.72769 523.5
+197.12837 983.8
+198.89438 887.1
+199.16753 823.6
+199.17686 799.9
+199.21255 664.9
+199.24832 750.0
+199.26442 2315.1
+199.27466 1682.5
+201.45535 533.9
+215.13905 14454.9
+216.14217 1380.0
+227.23755 547.0
+233.16490 76983.5
+234.16841 10573.8
+235.17232 848.3
+236.80434 568.3
+240.93956 638.7
+241.19124 3988.6
+253.02446 556.9
+261.15982 12671.0
+262.16351 2333.9
+265.49216 3267.8
+265.82657 1489.5
+269.18610 7164.6
+270.18823 886.5
+276.03250 657.7
+277.11856 733.4
+281.12354 847.6
+289.17157 4624.9
+289.50562 2004.3
+291.12354 624.5
+296.19727 1131.2
+299.13480 847.4
+300.15790 623.6
+308.92358 625.9
+308.94019 673.4
+310.21222 811.0
+314.20755 16266.4
+315.21021 2285.1
+318.17880 811.9
+344.19693 6312.8
+345.20233 1559.9
+349.20905 3190.8
+349.71069 1373.2
+362.20764 10876.2
+363.21072 2395.5
+364.20938 1163.7
+365.21359 805.5
+371.46933 647.4
+374.10651 605.1
+375.97165 2191.5
+376.22134 701.0
+384.73050 670.1
+385.23022 860.0
+387.88873 968.2
+388.76010 787.3
+389.22748 1819.2
+389.47946 1698.2
+389.72379 915.0
+393.61646 604.3
+393.73083 9250.9
+393.98126 6912.2
+394.23267 3387.1
+394.44675 540.2
+394.48248 1386.4
+396.55936 2950.4
+396.88739 2199.3
+397.73505 50852.5
+398.23624 23034.7
+398.48495 1725.1
+398.73792 5548.4
+399.23752 725.3
+402.25290 830.1
+402.56296 55513.8
+402.89719 42225.0
+403.23148 15529.0
+403.56534 4478.2
+403.89954 679.9
+404.24307 862.2
+412.21817 1243.3
+412.25769 784.8
+413.22034 665.3
+415.72995 610.5
+417.74838 1295.1
+418.73618 1273.8
+419.23962 1118.6
+419.73721 2568.6
+419.98694 1183.7
+420.23871 7814.8
+420.57214 3355.0
+420.90500 1273.7
+422.00165 4011.8
+422.25281 4619.2
+422.50323 2219.3
+422.75296 1107.7
+426.24216 116606.6
+426.57617 83719.5
+426.70233 888.9
+426.91046 34983.3
+427.04086 918.0
+427.16934 1002.0
+427.24420 8292.5
+427.58014 2040.6
+427.74188 2319.2
+429.28601 6591.8
+429.58191 11004.4
+429.91602 7860.2
+430.25162 2745.2
+430.28781 1394.8
+430.58005 1208.7
+432.99600 878.8
+433.25372 61479.8
+433.48898 863.8
+433.75479 29103.8
+434.20416 749.9
+434.25604 6374.6
+434.75955 1107.7
+435.58566 40795.8
+435.91977 28961.3
+436.25394 11105.4
+436.50641 9914.1
+436.58725 3364.7
+436.75653 12841.2
+436.92337 939.9
+437.00555 7064.8
+437.25549 4185.0
+437.49509 8961.0
+437.74689 8950.7
+437.99762 6287.0
+438.25089 714.5
+440.59338 3394.4
+441.00906 39314.2
+441.25983 39075.4
+441.51050 22788.0
+441.76120 6989.5
+442.01135 1185.4
+442.25989 829.5
+443.26282 986.2
+453.84760 560.6
+462.71857 643.7
+475.29218 1847.4
+476.76654 880.1
+484.28375 3570.4
+484.78555 3191.1
+489.79596 2772.2
+490.29758 1082.1
+496.95972 5927.4
+497.29352 4809.5
+497.62781 2579.0
+500.95837 942.0
+501.29425 1326.3
+506.96237 6495.5
+507.29642 4186.5
+507.63110 3346.3
+507.96298 793.3
+511.29886 9020.6
+511.79935 4513.7
+512.08850 564.1
+512.30060 1273.8
+523.83948 657.4
+524.63824 5674.7
+524.97260 5278.6
+525.30847 1323.4
+528.35712 834.1
+529.35992 1069.2
+529.68781 753.6
+530.33197 922.7
+530.64178 119066.4
+530.97589 114360.2
+531.01923 576.6
+531.30994 54864.8
+531.64404 17923.3
+531.92023 662.5
+531.97772 5179.0
+532.26843 850.6
+532.31207 1270.8
+532.58032 2315.9
+532.66296 728.2
+538.65289 1514.9
+538.98785 1297.9
+545.80853 1073.2
+546.30933 879.6
+546.36414 1217.6
+546.81604 5723.5
+547.31812 3425.0
+552.28290 711.8
+552.95941 610.3
+553.64087 1422.8
+553.97058 771.5
+554.81415 13805.3
+555.31537 9486.6
+555.81445 2291.4
+556.34827 16735.0
+557.35266 5088.7
+558.35321 1005.5
+559.31110 4196.0
+559.64734 3558.2
+559.80664 3741.1
+559.98126 2772.2
+560.30420 1969.2
+560.80597 970.1
+562.33215 2448.2
+562.66650 1946.5
+568.33765 1553.6
+568.67035 2283.5
+574.35895 9775.5
+575.36267 2718.3
+577.32086 994.3
+581.33026 920.9
+581.82361 627.3
+582.29730 999.0
+582.79718 823.0
+582.99176 5912.7
+583.32684 5449.2
+583.66003 2489.4
+583.99188 1242.7
+590.33289 9586.7
+590.83435 5553.3
+591.33521 2195.0
+594.33575 4023.1
+594.83582 3825.7
+595.32587 2619.7
+595.82361 1915.5
+601.81207 1279.8
+603.07538 907.7
+603.34039 112838.1
+603.84186 77059.1
+604.09521 865.6
+604.34271 26941.2
+604.84473 9360.5
+604.91284 732.8
+605.34570 1173.9
+605.40973 739.9
+609.32007 1760.1
+609.81848 1208.8
+629.12701 652.5
+629.85406 9043.5
+630.35474 6089.7
+630.45648 674.2
+630.85339 2405.5
+636.88287 803.9
+637.15973 1133.4
+637.65424 628.7
+638.02094 781.2
+638.51862 847.5
+638.78943 1168.8
+638.85883 227057.7
+639.35986 169703.9
+639.70154 1278.8
+639.86090 69100.5
+640.20197 1219.4
+640.26495 681.6
+640.36243 18175.3
+640.55951 1542.5
+640.86401 3496.3
+641.06476 1195.2
+641.36487 959.0
+652.87396 24159.9
+653.37494 18207.1
+653.87811 7271.2
+654.38055 1917.6
+676.64124 1480.5
+679.38806 3258.3
+679.88959 1690.8
+680.38904 1027.2
+688.39301 64027.4
+688.89429 50807.1
+689.39581 22089.7
+689.89673 6897.2
+690.39648 1079.9
+693.39923 832.5
+709.41614 1200.7
+709.91986 1106.5
+731.18994 755.9
+740.42896 919.0
+744.93311 2420.2
+745.43915 2334.3
+745.93536 842.4
+767.40051 865.0
+769.39685 889.7
+795.56415 1045.9
+836.46979 1394.8
+854.47644 16605.2
+855.47913 9037.0
+856.48370 2175.7
+872.48743 2254.8
+873.48639 925.3
+946.65295 623.7
+967.55933 1090.8
+1041.76770 588.0
+1198.30310 2965.1
+1229.41980 586.1
+1514.44446 622.6
+1730.95679 731.0
+1860.79712 664.0
+S	1765	1765	534.2522446
+Z	4	2132.97768
+140.84225 535.2
+144.16293 591.1
+146.91629 577.5
+147.09555 526.0
+149.24521 588.6
+166.35994 539.3
+169.48837 743.2
+171.15242 612.9
+171.63763 572.8
+177.01332 593.6
+184.96593 593.4
+194.97232 558.7
+198.89073 945.4
+199.16934 1113.0
+199.25235 837.3
+199.26714 3153.9
+199.28391 1304.9
+199.36499 880.4
+199.38069 660.4
+202.90555 546.2
+213.08679 1201.1
+226.51697 570.7
+227.09845 552.1
+231.60544 522.1
+233.12834 2597.6
+234.98840 661.9
+238.50905 552.4
+241.11874 684.0
+255.10809 2001.6
+259.07330 880.6
+272.13507 3043.7
+274.63025 559.8
+275.13135 803.7
+277.08505 2250.8
+283.63715 856.0
+286.14093 996.8
+289.12161 1826.4
+289.62329 1098.4
+294.14456 608.5
+297.63428 1436.5
+298.12650 2335.1
+298.62875 1173.7
+304.16092 765.7
+306.64020 4914.6
+307.14194 1534.2
+311.54968 538.4
+315.64777 584.3
+321.12009 1113.0
+325.51181 591.2
+328.17819 736.0
+329.63422 4958.2
+329.95175 577.6
+330.12491 782.9
+330.13779 645.8
+338.63889 22642.9
+339.14044 8956.0
+339.63992 1861.7
+340.00244 628.7
+341.68430 3632.5
+342.18613 1432.9
+342.25891 806.4
+342.68671 662.1
+348.45969 718.2
+372.99503 596.4
+381.29077 554.4
+387.16556 2400.1
+387.66959 1140.6
+388.11499 1249.0
+391.21820 2614.0
+391.71896 1088.4
+400.19266 6124.1
+405.14194 1780.9
+414.21234 1385.5
+416.26050 2247.0
+427.52972 801.2
+436.69589 1141.4
+437.19543 995.2
+440.75278 2264.6
+441.25314 1339.9
+445.69186 998.2
+454.69946 5607.9
+455.20148 4184.3
+455.70013 1346.0
+456.28207 546.3
+457.22446 718.7
+459.69055 2396.0
+460.17889 1414.5
+460.68610 1557.9
+468.69672 16172.9
+469.19821 10068.9
+469.69867 4077.5
+470.19672 1120.3
+474.64990 613.0
+475.82489 829.3
+476.27075 8606.3
+476.77332 4655.3
+477.27448 2146.6
+478.87332 1299.7
+479.20688 830.6
+486.57697 35545.0
+486.91141 47372.0
+487.24524 30206.6
+487.57922 15943.4
+487.91458 3389.5
+491.85205 608.9
+501.23785 1044.8
+502.22375 964.9
+502.72198 963.9
+507.18671 1185.8
+512.29236 1438.7
+514.00079 1021.3
+514.25427 1011.9
+516.70581 586.1
+518.00104 10170.2
+518.25122 17255.5
+518.30170 737.4
+518.50183 18050.7
+518.75238 12681.6
+519.00226 5258.3
+532.56775 1729.0
+545.30267 2014.9
+546.30267 835.0
+547.22437 1066.5
+561.24139 962.0
+571.22711 2568.2
+572.23279 1294.7
+589.24200 741.4
+591.30133 718.2
+599.30420 48103.2
+599.80566 45222.7
+600.30597 27191.1
+600.80750 7844.1
+601.30841 1386.1
+617.27679 593.1
+620.29877 824.3
+630.28821 933.8
+630.38556 905.8
+651.30719 1126.9
+664.84113 1040.1
+676.26990 25612.9
+676.65308 1248.7
+677.27301 11791.8
+678.27203 3734.8
+679.27069 1118.4
+680.83502 5456.8
+681.33630 5890.9
+681.83899 3527.2
+682.36407 9723.5
+682.83575 860.5
+683.36432 4458.4
+696.29407 1208.9
+696.79657 1160.8
+717.80737 1116.0
+729.36230 69875.7
+729.86322 78147.2
+730.36414 58458.9
+730.86554 22507.5
+731.10742 835.0
+731.36652 6358.5
+753.34235 892.3
+781.42914 4134.4
+782.43408 2890.3
+794.31415 2853.1
+795.31348 1462.5
+795.55414 1149.5
+815.38220 1440.7
+929.42688 947.2
+947.25415 610.2
+1066.59387 595.9
+1198.26782 3559.9
+1216.25281 628.9
+1221.91577 530.7
+1460.22974 540.6
+1525.36987 767.3
+1644.91394 692.8
+1654.92249 614.6
+1669.47693 708.4
+1719.12170 1705.7
+1873.92346 652.1
+1878.17200 990.2
+1878.67627 2749.2
+1879.23401 4359.8
+1879.55847 18633.4
+1879.86572 3893.9
+1880.19043 2881.9
+1880.77734 1088.2
+1881.56921 1228.1
+1906.62207 542.8
+1907.04321 7552.1
+1907.33606 1175.8
+1930.54089 948.8
+1932.05981 818.1
+1934.83618 618.2
+1997.23816 686.8
+S	1766	1766	463.5226921
+Z	4	1850.05947
+117.79597 31729.8
+121.79413 125157.3
+128.82855 32842.2
+131.67137 26308.3
+141.85431 36418.3
+143.27975 34743.9
+147.02150 29866.2
+150.91312 25119.2
+157.59631 32629.6
+163.67529 31439.7
+166.05736 29574.2
+187.14372 219158.9
+187.20195 27545.9
+198.47981 26926.8
+198.88768 47667.2
+199.16023 42700.2
+199.22643 27317.6
+199.23230 31972.7
+199.25914 165558.2
+199.27032 69384.0
+199.35574 49987.0
+215.13834 82875.0
+220.05263 26954.0
+233.16417 569710.4
+234.09438 26488.1
+234.16722 77224.5
+247.29257 28079.8
+250.98770 28626.8
+253.71194 27853.0
+261.15948 106973.2
+263.94464 35379.6
+266.85751 32802.8
+269.18494 49659.9
+285.92902 29363.0
+308.90808 30213.3
+314.20737 126493.3
+315.20599 29552.0
+342.28143 31601.8
+362.20566 57102.9
+381.36765 30063.2
+387.88260 27553.3
+389.22977 34920.1
+393.98026 85669.0
+397.73520 98251.9
+402.56268 112028.5
+402.89572 96279.1
+420.24146 38481.7
+422.00125 52217.1
+426.24100 844496.3
+426.57526 472515.3
+426.90948 217473.9
+427.55441 32605.4
+429.28589 45899.1
+429.58057 98263.3
+430.39856 32743.5
+433.25259 378775.2
+433.75519 167464.6
+434.25803 50499.3
+435.58401 210891.2
+435.91888 160833.1
+436.25305 94749.6
+436.50748 68513.8
+436.75720 64860.7
+437.74329 55789.9
+437.99707 40004.4
+441.00839 265559.1
+441.25928 291886.4
+441.50827 101208.4
+441.76227 46994.3
+448.21402 29286.5
+469.91092 42480.4
+482.66806 43035.5
+484.28009 37348.2
+506.96259 63925.9
+507.29422 63008.4
+530.64063 904436.3
+530.97485 611648.6
+531.30902 227771.5
+531.64148 60684.3
+532.57697 111287.3
+546.81213 32611.6
+549.16602 44403.7
+556.34772 80426.8
+574.35663 38582.3
+582.98938 33822.6
+603.33899 245127.3
+603.84070 195306.8
+604.34155 84596.3
+629.85400 45863.7
+630.40936 43721.9
+638.85797 1499105.5
+639.35944 994405.1
+639.86072 393898.8
+640.35889 90407.6
+653.37433 49123.1
+676.67230 54907.3
+688.39307 429684.3
+688.89337 243325.1
+689.39465 166285.1
+715.89136 30216.4
+732.06549 31283.8
+763.78918 32114.6
+818.38397 27497.3
+854.47290 72647.4
+855.48035 41531.3
+1047.68030 29461.0
+1053.25183 37547.3
+1057.30420 39014.0
+1198.28711 166427.3
+1207.66650 36015.7
+1260.65527 28079.4
+1339.41846 34021.7
+1381.84424 28345.9
+1512.54150 27168.0
+1525.47461 56601.0
+1540.27551 28697.8
+1718.94885 62779.6
+1726.29529 32337.2
+1819.76746 36815.6
+1820.71387 33908.3
+S	1767	1767	1879.9268246
+Z	2	3758.006
+Z	3	5636.505
+532.55341 1771.3
+551.16089 555.8
+555.15125 586.8
+560.18640 650.2
+573.60315 644.2
+606.03656 536.4
+609.27136 593.6
+649.85535 673.9
+668.51740 617.9
+676.68683 1047.8
+693.25385 600.7
+698.37781 617.0
+717.24261 565.9
+780.02319 635.3
+795.58759 811.0
+1062.44653 598.0
+1198.24036 3291.2
+1198.42346 624.1
+1346.25366 644.5
+1658.29822 630.7
+1718.04712 1808.2
+1860.03796 680.8
+1872.00684 639.7
+1878.19946 773.2
+1878.56506 1082.0
+1878.81104 1671.3
+1879.31921 4671.2
+1879.66724 18312.0
+1880.02954 3856.6
+1880.34680 1776.3
+1880.45264 1808.5
+1880.74268 1594.0
+1907.09155 7280.9
+1930.71997 1137.8
+S	1769	1769	436.2185846
+Z	4	1740.84304
+118.92310 45797.5
+120.59072 74661.1
+121.79353 205906.7
+140.32878 50298.2
+150.44365 42784.4
+157.61205 49220.4
+165.98819 45142.0
+171.63806 53251.7
+185.30789 42150.8
+186.13843 41562.0
+187.07751 47347.2
+187.46774 44297.8
+188.25421 116531.9
+188.27438 196124.0
+188.28650 191620.2
+188.30037 188535.0
+188.31834 95525.9
+188.33714 69577.5
+191.17285 44146.9
+197.12726 118751.5
+198.88872 53038.0
+199.17374 58295.8
+199.22165 64167.3
+199.25357 48958.6
+199.27188 208537.6
+199.28094 111229.6
+199.29060 97798.8
+199.36252 44102.5
+199.36737 42356.6
+209.24301 50783.4
+214.00337 52610.3
+214.53481 54326.1
+215.37234 45383.2
+251.98776 41919.3
+256.65009 70046.9
+256.89331 46086.3
+264.84824 46018.5
+268.23743 40986.9
+271.32755 76571.5
+294.65399 64867.0
+308.16016 209313.3
+326.17020 609355.9
+327.17355 59996.5
+336.73276 57809.8
+342.07489 46901.2
+342.67447 230507.9
+346.68179 43374.0
+350.16260 108092.0
+350.27835 52033.8
+350.49591 69599.6
+351.20172 849212.1
+352.20526 133508.0
+356.16510 636250.5
+356.49927 338556.8
+356.83389 57194.4
+369.21194 151500.1
+375.23224 98052.6
+375.43457 875357.4
+375.68564 603000.8
+375.93579 241753.1
+379.19656 1172448.5
+380.19989 212321.2
+382.17908 48820.1
+387.85583 60828.7
+388.70407 79295.4
+388.85568 52827.2
+393.85989 3260541.5
+394.19400 2191012.5
+394.52795 670659.6
+397.20688 630091.7
+398.20895 69542.2
+400.48669 43666.7
+407.60385 49488.8
+422.45782 274336.6
+422.70551 340262.8
+422.95703 265835.2
+423.20615 91311.2
+442.88263 820178.8
+443.21710 587784.7
+443.55084 270104.2
+445.73227 41261.5
+465.21558 186890.8
+465.71704 109377.2
+466.21002 47262.6
+466.56119 2287570.3
+466.89542 1575880.8
+467.23026 522958.2
+467.56201 115302.3
+469.90366 63447.2
+494.24115 73735.0
+500.24350 1863012.0
+500.57797 1754535.5
+500.91132 732454.6
+501.24612 85795.1
+515.64624 45662.4
+519.68121 46673.0
+526.26361 159400.4
+527.27887 48258.5
+532.54163 131402.6
+533.74542 246841.2
+534.24683 151989.3
+534.74841 73929.5
+544.27435 481416.0
+545.27472 107800.5
+549.18732 52769.4
+600.02747 47377.4
+630.44330 68227.3
+639.89655 43464.6
+651.64642 51920.6
+657.37677 43710.6
+667.64764 45671.5
+676.65753 99279.3
+730.63324 45936.9
+731.17267 73078.6
+759.75745 53058.3
+795.55591 77713.9
+801.44330 45420.8
+827.92712 47939.2
+889.04681 59734.0
+904.16998 48224.4
+1057.26733 75963.7
+1086.63989 59748.0
+1127.44116 59956.7
+1139.01538 51875.9
+1188.08643 81660.9
+1198.19800 211578.0
+1405.33899 47742.5
+1408.93921 46761.1
+1424.68835 53846.0
+1525.51257 65090.6
+1551.68677 50783.0
+1717.01343 105066.3
+1751.05127 52045.3
+S	1770	1770	436.7200746
+Z	4	1742.849
+121.78603 753.4
+121.79438 2207.5
+121.80231 574.6
+124.64902 577.9
+126.20182 586.5
+128.58228 747.4
+130.54434 547.9
+133.13271 1052.4
+145.09697 954.7
+146.56021 571.0
+151.68196 574.1
+153.31998 525.3
+157.61179 630.8
+159.15909 579.6
+161.01811 480.5
+166.51598 578.8
+167.02037 587.9
+169.50468 623.7
+182.79396 613.2
+183.30428 561.8
+184.71947 616.7
+185.84315 612.8
+197.12813 4823.1
+198.13158 700.7
+198.89400 1111.3
+199.16788 759.4
+199.18315 589.4
+199.25005 983.4
+199.25497 1151.2
+199.26559 2829.1
+199.28116 824.6
+199.36296 982.7
+199.39684 591.9
+202.26434 509.5
+212.32576 520.1
+215.13907 960.7
+225.12334 3243.0
+232.67123 588.9
+233.16402 1746.7
+251.14374 611.3
+256.49081 665.8
+256.64999 2235.7
+257.15204 635.5
+261.44461 533.3
+276.16605 2962.3
+287.99918 577.3
+295.46158 640.3
+298.17612 2425.4
+299.18008 809.4
+308.15988 8201.9
+308.91888 818.7
+309.16342 1596.1
+326.17053 18805.2
+327.17456 4302.5
+341.68359 609.3
+342.67419 5960.7
+343.17496 2069.0
+350.16272 2992.5
+350.49695 2346.0
+350.83020 1075.0
+351.20197 25846.7
+352.20566 6900.4
+353.18146 1047.0
+353.20789 829.0
+356.16574 14107.0
+356.50015 12245.9
+356.83356 5405.4
+357.16718 2213.1
+362.66589 563.0
+369.21249 4734.5
+370.21732 1717.6
+370.92929 808.9
+371.18253 986.9
+371.68042 1036.7
+375.23441 3885.1
+375.43494 17713.1
+375.68591 26251.9
+375.93637 17122.7
+376.06491 572.3
+376.18668 7580.2
+379.19693 33004.4
+380.19989 10086.5
+381.20212 1288.5
+381.38150 635.0
+382.18283 665.3
+382.51712 1289.7
+387.85617 3123.1
+388.19250 1613.6
+388.52081 1359.5
+388.70679 1021.5
+393.86014 78916.2
+394.19418 87344.4
+394.52786 51181.5
+394.86203 14718.5
+395.19504 3986.5
+396.12018 606.9
+397.20718 16025.8
+398.20932 3885.6
+408.19427 1457.9
+415.95636 1151.2
+416.20508 2365.1
+416.45813 1000.6
+418.70502 817.1
+418.95737 575.7
+422.45819 4881.0
+422.70840 11127.9
+422.95782 11408.9
+423.20801 6442.4
+423.45648 2452.0
+427.56400 711.3
+442.88260 25735.3
+443.21701 33511.6
+443.55063 24969.5
+443.88419 11163.6
+444.21884 2485.5
+457.20486 728.2
+460.55939 1207.2
+460.88876 1208.9
+461.21692 1091.1
+461.55487 1111.5
+465.21521 5009.8
+465.71582 3330.7
+466.21759 1156.4
+466.56155 45324.0
+466.89563 61567.8
+467.22968 43649.1
+467.56354 15449.4
+467.89706 3885.2
+468.23334 941.0
+477.21051 757.3
+478.47046 648.9
+493.93832 1403.7
+494.23819 686.5
+494.27209 826.2
+494.57584 1064.2
+494.91180 1571.4
+498.26801 1336.1
+499.26968 646.6
+500.24374 42638.3
+500.57819 58801.7
+500.91168 44493.8
+501.24582 21182.4
+501.57965 4599.0
+512.29272 1107.4
+516.27997 2775.4
+517.28217 1047.2
+524.73975 1701.0
+525.23132 725.8
+526.26385 4642.1
+526.50085 664.4
+527.26868 2221.1
+528.27222 609.7
+530.38336 564.2
+530.94891 1765.6
+531.28577 906.1
+532.52924 2094.9
+533.74298 7010.8
+534.24530 6444.6
+534.74750 3459.1
+535.24365 934.9
+536.62604 1478.4
+536.96051 929.3
+544.27423 11908.3
+545.27795 5104.5
+549.18835 911.8
+555.19574 976.4
+590.28534 845.6
+590.78650 1575.9
+630.44061 639.4
+663.81494 1000.9
+664.32135 953.3
+664.81720 744.8
+676.67438 886.0
+682.52148 695.2
+684.34344 1244.5
+731.16815 957.5
+795.56671 984.9
+858.65381 590.5
+890.45074 718.6
+891.44806 922.3
+1018.61835 548.5
+1078.38794 721.3
+1186.94128 583.5
+1198.18530 3223.1
+1442.73352 569.3
+1664.79956 641.0
+1716.50476 713.8
+S	1771	1771	1880.04999127
+Z	2	3758.252
+Z	3	5636.875
+532.49774 2084.2
+573.61023 640.0
+607.22174 673.2
+624.42365 664.1
+676.65448 704.5
+709.94025 596.9
+795.54340 815.2
+856.34631 705.7
+1032.06787 641.5
+1116.66638 677.4
+1198.11389 3596.5
+1272.68713 787.9
+1417.65344 691.9
+1473.38135 723.3
+1525.39417 898.4
+1870.32300 906.6
+1873.14624 785.7
+1877.33789 800.9
+1878.65393 1090.0
+1879.22363 2791.4
+1879.59241 19273.5
+1879.96692 3003.5
+1880.54565 767.7
+1881.08606 716.2
+1907.04590 7261.2
+1930.55481 1118.9
+1997.73901 588.8
+S	1773	1773	436.2253896
+Z	4	1740.87026
+120.65701 571.8
+121.78938 1063.7
+121.79380 2059.0
+121.79799 612.9
+124.91972 558.5
+145.09644 888.7
+146.91780 586.3
+164.66331 492.3
+173.09346 646.5
+183.61838 617.3
+197.12846 6612.1
+198.13171 783.8
+199.16156 999.4
+199.17496 848.8
+199.21593 806.0
+199.23886 907.6
+199.25970 2667.9
+199.27177 1371.7
+199.28642 1282.3
+199.29512 1018.5
+199.32219 687.2
+199.35805 989.3
+199.37280 579.0
+199.38126 631.1
+211.33743 580.7
+215.13892 1522.0
+221.67906 603.4
+225.12349 6444.1
+226.12589 869.7
+233.16516 3431.8
+241.68436 551.8
+249.90471 614.9
+251.15016 1981.9
+252.10965 1150.9
+256.65079 6254.2
+257.15179 1432.9
+261.15991 651.9
+267.08618 769.6
+276.16702 5021.0
+280.16687 1961.4
+281.17657 623.2
+282.14404 1027.3
+282.88385 581.3
+296.29016 598.8
+298.17648 2979.6
+308.16068 16154.7
+309.16437 2927.2
+319.56931 565.4
+325.18552 952.9
+326.17133 37631.3
+327.17505 5886.1
+333.67029 1241.4
+334.17767 900.8
+342.26831 643.0
+342.67511 10571.4
+343.17755 3617.4
+346.63248 1560.8
+350.16324 10362.6
+350.28064 767.5
+350.49826 4712.4
+350.82999 872.0
+351.20285 47587.5
+352.20670 8407.2
+353.18195 1827.3
+353.20941 670.3
+356.16650 42141.5
+356.50101 23333.9
+356.83401 8870.6
+357.16788 2322.3
+365.13867 991.0
+365.19333 937.5
+366.11478 556.9
+369.21353 12351.9
+370.21631 1557.9
+370.93320 2466.4
+371.18350 2418.3
+371.43488 1360.0
+375.23526 13921.1
+375.43607 57815.9
+375.68661 46750.0
+375.93723 20174.6
+376.18768 6432.3
+376.23868 2049.9
+376.43808 1603.5
+379.19778 67977.9
+380.20096 13631.6
+381.20343 1890.7
+382.18246 3683.7
+382.51688 2536.5
+382.84991 1710.1
+383.09015 639.0
+387.85754 9982.6
+388.19159 5967.7
+388.52109 2376.3
+388.70929 2880.2
+388.85397 918.3
+389.20129 1008.5
+393.03671 932.1
+393.45093 759.6
+393.86111 230190.0
+394.19489 136906.0
+394.52866 56575.6
+394.68536 901.2
+394.86261 17273.9
+395.19659 3859.5
+395.52701 887.0
+397.20816 41623.1
+398.21094 6888.5
+399.18967 917.7
+404.18259 1089.5
+406.48141 530.6
+408.19482 7307.0
+408.69629 2446.6
+415.95532 1919.6
+416.20581 1505.6
+416.45667 890.6
+418.20468 1032.4
+418.45428 2135.1
+418.70807 818.2
+436.88168 1267.8
+437.21786 1369.4
+442.88370 128489.7
+443.21780 105752.4
+443.55133 47918.3
+443.88535 20220.8
+444.21988 4612.1
+444.55679 1078.8
+445.72626 939.0
+447.70047 1016.9
+454.88654 1029.7
+455.21753 721.3
+456.21002 2602.6
+456.70151 2672.1
+457.20377 1451.3
+460.55942 1673.5
+460.89020 2748.6
+461.22644 1880.2
+461.55731 1216.9
+462.71283 965.5
+465.21619 22728.9
+465.71817 10005.3
+465.83252 802.0
+466.21844 3161.4
+466.38223 894.8
+466.56256 185240.3
+466.86050 1392.2
+466.89645 137934.8
+467.23026 61536.2
+467.42667 1047.6
+467.56424 20671.8
+467.89908 5917.3
+468.22952 1818.8
+476.70636 2206.3
+476.76767 676.2
+477.20932 626.6
+477.23016 609.1
+482.25812 943.4
+484.53574 629.2
+488.90375 999.3
+493.94373 1427.5
+494.24146 6474.1
+494.57474 4686.8
+494.90775 2864.6
+495.24283 1550.2
+498.27115 2739.3
+499.27838 902.6
+499.65613 747.8
+500.24496 175223.3
+500.57895 147374.7
+500.83124 728.3
+500.91251 68577.1
+501.24661 23120.9
+501.42618 883.0
+501.58023 6683.0
+501.91321 1764.8
+502.24985 938.1
+503.57501 858.1
+503.90247 886.2
+512.22949 915.9
+512.29303 18517.7
+513.29626 3534.2
+516.22577 1396.6
+516.28119 5591.8
+516.73279 874.9
+517.28259 1400.1
+520.25439 1663.4
+520.75592 1332.4
+524.73987 6936.7
+525.23297 4168.7
+525.73718 2017.7
+526.26459 8083.3
+527.26709 2503.2
+530.95459 2635.5
+531.28577 2304.3
+531.95831 933.6
+532.53040 2388.3
+533.74512 50354.8
+534.24652 27481.2
+534.74689 12712.7
+535.24426 2131.3
+536.62506 1570.7
+538.16986 1104.0
+538.27643 753.0
+544.27576 38256.6
+545.27911 11578.6
+546.28198 1994.3
+549.15155 877.8
+555.19617 6517.1
+556.20026 1872.4
+569.60553 990.0
+572.76971 1182.6
+573.27161 1494.7
+580.95331 2633.5
+581.28668 1352.5
+588.75348 609.0
+590.28748 14421.3
+590.78876 8362.7
+591.28870 2947.3
+594.85443 749.8
+627.31970 2306.1
+628.33258 689.6
+639.34766 714.6
+651.25818 697.7
+653.23517 806.5
+657.35992 3269.7
+658.36163 1260.1
+663.82117 13107.6
+664.32202 7337.5
+664.82678 3198.9
+665.31995 1103.5
+665.80011 1587.2
+666.33405 2891.7
+668.28180 1814.8
+668.82013 685.5
+676.62286 1226.5
+684.34253 13512.9
+685.34357 4171.2
+686.34705 963.3
+692.26196 833.8
+699.33673 1252.2
+699.83673 1097.3
+783.16052 742.9
+795.55927 1072.3
+797.37610 1303.9
+798.32440 601.1
+815.31952 1282.2
+815.38885 8666.7
+816.39276 3305.0
+817.38202 939.1
+822.18616 603.4
+840.04291 634.1
+875.97266 627.5
+886.39130 960.0
+890.45355 1574.5
+902.47974 540.1
+908.46149 2148.9
+909.45959 1897.3
+911.42725 950.2
+912.39740 1482.8
+929.42542 12240.0
+930.42804 4952.9
+931.42651 1722.0
+940.39258 1678.1
+941.39948 1027.0
+1019.68542 814.2
+1157.12476 595.0
+1195.25220 611.1
+1198.18860 3247.4
+1256.15845 717.5
+1473.16992 579.8
+1525.42334 789.3
+1532.80249 652.0
+1691.65356 586.2
+1730.64954 666.9
+1741.88306 574.8
+1753.19238 628.4
+S	1774	1774	431.7225221
+Z	4	1722.85879
+106.88621 616.4
+112.73520 636.9
+113.46274 825.7
+118.17876 594.2
+120.69525 570.0
+121.78968 990.8
+121.79455 2269.4
+133.27000 621.2
+137.26541 539.9
+139.91815 606.5
+156.78719 527.8
+157.60242 613.3
+168.62015 532.4
+172.69029 546.0
+173.79840 848.3
+186.86865 579.2
+188.26741 1800.6
+188.27872 2216.3
+188.28691 2195.3
+188.29541 1944.4
+188.30624 1967.5
+188.33403 656.8
+188.34837 562.8
+188.58307 515.3
+190.39760 589.8
+193.70718 575.7
+197.12814 1839.1
+198.89284 840.8
+199.16016 754.8
+199.24397 1068.1
+199.25842 2196.6
+199.27246 1600.4
+199.29312 539.4
+199.30058 574.7
+199.31248 757.6
+199.35553 927.3
+199.37057 790.3
+199.64169 524.6
+205.72076 638.8
+207.11375 692.7
+212.38628 587.5
+219.07246 563.3
+225.12250 1429.0
+233.16481 1540.8
+233.38843 573.7
+236.42192 582.7
+245.00700 564.6
+252.11168 649.0
+256.64984 1270.8
+257.34418 647.9
+261.14423 1026.1
+263.33469 556.4
+271.25137 612.8
+276.16611 1471.7
+308.16022 4287.4
+314.10406 638.4
+324.33716 592.0
+326.17065 10697.7
+327.17358 1987.7
+333.19086 738.8
+333.66711 807.6
+342.01773 679.1
+342.67383 4209.7
+343.17599 1585.2
+347.19052 559.4
+350.49945 747.8
+351.20203 21262.1
+352.20648 3673.2
+356.16583 8544.8
+356.50027 7234.4
+356.83279 2530.6
+361.36560 617.5
+369.21255 3122.3
+370.21259 784.3
+370.93402 947.3
+371.43073 852.2
+375.19778 577.6
+375.23465 2812.0
+375.43500 9570.6
+375.68613 12143.9
+375.93661 5965.6
+376.18707 774.3
+379.19687 23413.3
+380.19998 4881.9
+381.35608 684.5
+382.17834 1284.7
+382.51346 913.4
+387.85730 3589.5
+388.19223 1717.0
+388.52469 1106.7
+393.86029 59834.9
+394.19421 52667.4
+394.52792 19548.0
+394.86301 3181.6
+397.20721 11160.3
+398.21094 1386.6
+408.19217 1238.0
+411.71112 1496.4
+413.23798 1239.2
+415.95605 1048.6
+416.20660 1119.5
+416.45609 1096.8
+418.21957 2085.8
+418.44925 898.8
+418.71988 3268.5
+427.54541 715.4
+442.88266 34331.5
+443.21710 29728.7
+443.55109 14487.0
+443.88373 3492.6
+460.55872 1078.2
+460.89081 1020.6
+461.55255 854.7
+465.21631 3991.9
+465.71701 1432.3
+466.56155 24736.2
+466.89578 28214.5
+467.22949 12988.1
+467.56519 2514.5
+470.43549 693.4
+471.79095 1510.2
+474.25864 605.9
+476.75577 1025.5
+486.58810 686.1
+494.57578 1449.0
+494.91061 1108.9
+495.23544 684.5
+498.26852 1047.1
+500.24411 17985.5
+500.57831 21492.7
+500.91214 10917.5
+501.24594 2686.0
+512.28943 961.5
+516.28265 1374.6
+526.26520 3046.9
+527.26605 1008.5
+528.33112 6643.3
+528.83240 5280.8
+529.33234 1213.8
+532.49622 2134.6
+533.74402 5029.2
+534.24622 4001.4
+534.74445 1090.4
+544.27527 9116.8
+545.27881 2866.9
+549.15991 779.1
+571.84625 3967.6
+572.34875 1708.0
+572.84985 852.4
+576.83911 1056.1
+577.34113 834.4
+580.28656 2246.4
+598.29688 1701.6
+602.86273 678.9
+657.35205 699.7
+664.31653 820.7
+676.64209 1106.2
+693.37054 10617.0
+694.37439 4230.2
+711.38092 9223.8
+712.38403 4356.7
+719.12128 569.4
+783.26147 635.8
+795.56213 1409.6
+818.45264 752.0
+946.04150 639.8
+1029.82788 612.6
+1089.50964 677.8
+1162.25720 607.0
+1198.10938 3678.5
+1288.29102 587.8
+1346.87097 582.1
+1399.56519 628.1
+1525.39893 625.2
+1584.82556 593.9
+1666.96509 664.7
+S	1775	1775	427.2197121
+Z	4	1704.84755
+105.58482 619.9
+106.88437 737.2
+107.12450 561.6
+107.42245 526.4
+121.79328 1970.0
+128.02382 573.6
+143.22081 547.3
+162.76956 655.5
+169.48865 869.9
+170.05951 1145.1
+193.69032 643.9
+194.29066 610.9
+197.69211 633.2
+199.16536 807.6
+199.25031 1096.2
+199.26514 2206.6
+199.28259 1347.8
+199.36359 1323.7
+225.12294 1031.8
+233.16425 2981.9
+233.56737 605.6
+240.17012 909.8
+246.18037 916.4
+251.14993 2294.0
+252.10826 675.3
+255.70842 567.3
+256.65009 5004.0
+259.04755 693.2
+272.17139 872.1
+276.16614 6774.0
+280.17087 570.6
+289.21805 618.9
+309.27634 646.5
+316.72293 506.1
+326.16815 651.9
+333.66959 1147.4
+338.33609 520.2
+342.26389 799.0
+342.67368 2808.5
+343.17615 897.9
+350.16214 5125.6
+350.27972 734.4
+350.49658 3018.7
+351.20193 71357.3
+352.20551 12199.7
+353.20901 1043.6
+356.16568 18851.6
+356.49976 10584.6
+356.83304 2957.9
+358.91064 507.7
+374.71039 1279.7
+375.23422 9957.6
+376.23883 1460.9
+379.19678 11359.5
+380.20096 1207.8
+382.18161 3091.7
+382.51520 1261.6
+382.84720 798.9
+384.21579 819.1
+385.25473 996.8
+385.55392 584.8
+387.85626 9138.9
+388.19128 4669.3
+388.52277 1245.1
+388.70596 2278.4
+389.12134 621.6
+389.20999 801.5
+393.85989 45189.3
+394.19412 25171.5
+394.52786 9778.7
+394.86209 1236.1
+394.94611 699.4
+398.21719 1540.4
+399.20114 1049.4
+403.17499 958.7
+408.19342 4227.9
+408.69629 1669.5
+411.45029 973.4
+427.53653 748.0
+428.83606 546.0
+436.87894 5100.8
+437.21136 3453.2
+437.54575 1670.1
+437.87741 615.9
+441.73804 594.2
+442.88263 34125.7
+443.21716 20184.5
+443.55096 8497.4
+443.87970 815.6
+445.72537 577.8
+447.69577 1387.1
+456.20993 2506.2
+456.70038 1884.9
+460.55795 988.9
+460.88712 672.0
+461.28708 803.7
+462.61346 742.3
+465.21536 13720.7
+465.71698 4169.7
+466.21829 1291.0
+466.56165 5483.7
+466.89557 4388.8
+467.23035 2093.5
+476.22644 716.6
+476.70840 1274.3
+476.75977 834.5
+484.32266 667.4
+494.24002 1491.0
+494.57751 1351.4
+498.27026 2992.6
+499.27521 834.2
+499.62299 4553.0
+499.95685 2692.6
+500.29239 1336.0
+503.57333 2054.9
+503.90643 1444.3
+512.29126 2379.9
+513.89966 591.7
+516.72583 571.2
+523.63104 948.0
+523.96704 993.0
+524.73877 2221.1
+525.23602 1602.7
+525.73303 762.2
+526.26428 5857.5
+527.26855 1337.5
+532.51208 2465.3
+533.74432 14082.5
+534.24567 7947.5
+534.74554 2207.2
+535.59222 652.9
+535.92975 723.1
+549.14172 798.7
+555.19489 2206.8
+575.94995 697.2
+590.28479 2107.2
+590.78534 744.3
+614.22345 753.0
+626.33179 661.6
+630.38733 1147.5
+651.80304 743.8
+665.80023 1234.8
+668.28003 1291.6
+676.64069 997.5
+684.33844 3149.7
+685.34729 1093.0
+720.72101 566.5
+762.21973 880.7
+795.54364 1240.3
+797.05792 610.4
+890.45313 1351.5
+935.57800 564.3
+952.87451 556.8
+968.25635 635.1
+1057.25378 697.4
+1110.91162 684.0
+1187.25781 636.5
+1198.14563 3251.1
+1249.86523 555.8
+1280.07178 729.7
+1393.71533 612.1
+1402.67358 621.5
+1406.14331 511.4
+1525.38550 1041.4
+1570.87109 591.0
+S	1777	1777	436.2188271
+Z	4	1740.84401
+117.32202 586.1
+118.03032 576.6
+120.07934 627.0
+120.60168 785.3
+121.79433 2309.3
+133.58812 606.2
+138.85468 564.1
+144.88361 634.7
+145.09692 1655.2
+152.95161 648.2
+157.11327 561.1
+157.60522 665.9
+164.95409 592.9
+167.03384 708.2
+170.90808 566.2
+173.09216 1187.0
+175.11868 816.7
+188.25545 1410.4
+188.27560 2040.1
+188.28702 2337.9
+188.30232 1791.4
+188.33022 653.4
+188.36739 523.6
+188.37357 547.0
+191.11757 873.8
+197.12837 7951.6
+198.13199 1037.4
+198.89153 857.0
+199.17322 985.3
+199.19151 720.2
+199.23431 769.0
+199.25705 1891.9
+199.27361 1676.4
+199.28941 1333.2
+199.30528 766.2
+199.37167 827.1
+199.38733 699.5
+215.13876 1960.6
+216.52264 692.5
+216.66965 553.1
+225.12347 8119.6
+226.12619 1336.0
+233.16475 3896.6
+234.12299 633.1
+235.08247 764.9
+245.32718 575.0
+251.15036 2340.2
+252.10905 1814.6
+256.65048 8705.2
+257.15210 1851.7
+271.20001 608.2
+271.36578 599.4
+276.16623 7482.6
+277.16925 691.9
+280.16608 2062.5
+282.14655 635.6
+298.17554 3369.5
+308.16037 20959.6
+309.16461 3195.9
+325.18753 641.6
+326.17087 37175.8
+327.17462 6984.2
+328.17688 854.4
+332.63312 914.3
+333.66937 1030.3
+334.17538 961.6
+338.00464 665.3
+342.67462 10756.9
+343.17688 3552.5
+344.17474 545.6
+344.48892 612.8
+346.63422 809.3
+347.13461 585.5
+349.80460 634.5
+350.16275 10959.7
+350.49817 4430.6
+350.83087 2200.6
+351.16541 755.9
+351.20248 57057.9
+352.20630 10914.0
+353.18167 1681.3
+353.20694 915.1
+353.99277 618.9
+356.16626 41580.3
+356.50079 19358.0
+356.83389 6785.3
+357.16876 2117.4
+357.50049 869.8
+365.13882 754.3
+368.87860 696.1
+369.21313 10254.5
+370.21692 1543.1
+370.93384 3362.5
+371.18283 3294.2
+371.43054 1329.8
+375.23499 12170.9
+375.43570 45521.6
+375.68607 36131.7
+375.93652 18008.6
+376.18878 4700.8
+376.23883 2128.2
+376.43735 1581.8
+379.19745 66941.9
+380.20035 12658.0
+381.20251 1144.1
+382.18237 5142.2
+382.51550 2657.5
+382.85074 737.7
+387.85727 13258.8
+388.19034 7118.7
+388.52362 2407.6
+388.70786 2279.6
+388.86359 749.4
+389.20822 1285.7
+393.03671 735.3
+393.45444 834.2
+393.51538 504.5
+393.82373 655.2
+393.86072 201401.7
+394.19446 135065.9
+394.26425 1446.0
+394.52820 54190.7
+394.60202 772.5
+394.68845 701.9
+394.86221 14711.2
+394.94574 698.2
+395.19623 4287.2
+395.52972 677.0
+397.20767 32589.3
+397.47104 534.3
+398.21017 4009.3
+399.19943 873.8
+399.69647 652.2
+399.70688 666.1
+403.17441 845.3
+404.18295 714.8
+408.19391 7119.9
+408.69516 2536.0
+409.19855 691.3
+413.18756 679.6
+415.18542 670.7
+415.95532 4107.5
+416.20532 2506.3
+416.45529 1869.5
+416.88654 608.2
+418.20331 2213.2
+418.45258 2451.8
+419.52075 641.7
+419.74966 821.2
+427.54935 1197.0
+436.87973 2343.6
+437.21249 796.3
+437.28894 660.4
+437.54544 1385.1
+442.40213 664.9
+442.88336 129417.1
+443.21689 114726.1
+443.55057 59269.6
+443.69928 1217.7
+443.88455 20779.1
+444.22116 4350.2
+444.55615 807.9
+456.21167 2725.7
+456.70096 2395.3
+460.55939 3250.2
+460.88992 3653.7
+461.22104 1230.9
+461.55203 941.1
+461.89050 1159.6
+465.21597 18462.3
+465.71777 8581.4
+466.03497 791.2
+466.21902 2039.8
+466.56216 150327.3
+466.89584 112397.1
+467.08130 798.7
+467.22964 57513.5
+467.41843 957.6
+467.56354 18696.2
+467.63034 990.9
+467.89597 5172.1
+468.23239 1020.6
+469.88300 929.3
+476.70932 1723.5
+477.22519 783.5
+477.56866 818.6
+481.24173 735.4
+488.89767 868.4
+493.93900 1314.9
+494.24121 6861.7
+494.57455 6498.1
+494.90848 2803.8
+495.24133 1415.0
+498.26926 4065.3
+499.09653 703.8
+499.12646 686.4
+499.27280 1147.2
+500.24442 155028.2
+500.57828 127588.8
+500.82892 689.3
+500.91165 62820.4
+501.24579 22563.5
+501.57993 6569.4
+501.91373 1923.4
+512.29260 7571.1
+513.29596 1273.7
+516.28015 4338.1
+517.28345 1130.4
+520.25507 1368.9
+521.30206 1269.9
+524.73920 5540.6
+525.23700 4188.3
+525.73169 1740.0
+526.26453 10328.1
+527.26880 2298.9
+528.27075 1155.9
+530.62189 852.1
+530.95093 3563.2
+531.28632 1900.8
+531.61768 1672.8
+532.50568 1923.3
+533.74463 32877.6
+534.24609 17957.4
+534.74603 6516.6
+535.24506 2185.8
+535.59473 908.9
+536.62579 980.9
+536.96436 1337.5
+537.93982 717.7
+538.17059 864.3
+544.27539 28179.6
+545.27899 9044.5
+546.28314 1506.9
+555.19641 4085.9
+572.76788 789.8
+580.95105 830.5
+581.28485 1534.2
+582.27020 637.8
+590.28717 8342.2
+590.78796 4661.2
+591.28925 2489.5
+594.85852 2157.4
+595.35950 843.2
+595.77094 1058.1
+601.65271 567.7
+630.40991 761.1
+657.35895 2439.8
+663.82135 8249.9
+664.32227 7354.9
+664.82166 2473.5
+665.32080 1033.9
+665.80273 1223.0
+666.32703 1337.5
+668.27991 1141.8
+676.63116 819.6
+684.34235 5123.9
+685.34692 1339.8
+730.19275 660.6
+731.11633 1036.0
+795.56616 1028.3
+815.33600 621.4
+815.38885 2028.2
+890.45081 1790.8
+891.45367 1003.0
+908.46198 992.8
+911.40857 850.3
+929.42255 2223.0
+1008.13470 639.1
+1156.92261 582.9
+1181.34631 557.4
+1198.12305 3175.7
+1213.68970 565.8
+1308.18506 590.5
+1410.89563 544.4
+1525.43774 937.8
+1548.44592 583.8
+1549.64258 669.0
+1589.60571 620.0
+S	1778	1778	436.7198246
+Z	4	1742.848
+117.28020 590.1
+120.08028 618.4
+121.79466 2372.6
+122.18598 589.9
+126.75006 622.1
+128.12663 520.7
+128.57076 547.1
+130.15865 526.3
+143.48643 567.0
+145.09694 1288.6
+146.10101 719.4
+165.38571 588.9
+165.77374 581.0
+166.97136 680.3
+173.09178 1227.7
+174.05295 578.3
+182.77693 620.4
+197.12823 8967.4
+199.17996 781.2
+199.25069 884.2
+199.26611 941.6
+199.27718 2914.1
+199.29028 961.7
+199.37624 1553.6
+199.39073 907.7
+205.65001 534.3
+215.13882 2047.3
+225.12323 8968.9
+226.12701 765.5
+229.98686 629.4
+233.16466 5072.9
+234.16920 672.7
+235.08099 822.3
+240.24010 564.4
+251.14993 2866.4
+252.10901 1217.1
+254.79227 544.7
+256.65036 8846.2
+257.15155 2684.0
+261.16049 569.1
+271.27039 607.2
+276.16666 7644.2
+277.17163 833.5
+280.16586 2903.6
+298.17661 2777.7
+303.02548 543.8
+305.15704 592.9
+308.16037 25836.0
+309.16403 3473.9
+325.18649 1142.1
+326.17087 44426.6
+327.17450 6096.5
+332.63498 1159.0
+333.13638 670.2
+334.17538 1265.7
+342.67459 11114.5
+343.17633 3771.8
+344.16129 1006.5
+346.63174 1220.9
+350.16260 8111.1
+350.27856 507.7
+350.49847 3018.0
+350.82980 1224.1
+351.20251 59793.8
+352.20581 10059.8
+353.18240 2131.0
+353.20938 606.5
+356.16617 40332.0
+356.50064 19610.3
+356.83392 6972.6
+357.16846 2007.1
+369.21298 9209.7
+370.21649 1642.3
+370.93350 3145.3
+371.18353 4219.4
+371.43402 3418.0
+371.68341 1108.2
+375.23489 11807.6
+375.43558 47190.3
+375.68604 41240.0
+375.93655 18767.1
+376.18689 6100.9
+376.23828 1820.6
+379.19742 63848.8
+380.20038 11208.6
+381.20212 1339.5
+382.18137 6948.2
+382.51544 2212.0
+382.84879 1078.8
+387.85712 13437.9
+388.19037 6609.2
+388.52344 2988.1
+388.70865 3101.7
+388.85364 1042.3
+389.20264 600.3
+393.03842 859.4
+393.45142 956.1
+393.86066 219000.2
+394.19434 133667.3
+394.26715 1293.6
+394.52811 52208.2
+394.68936 1234.9
+394.86218 13287.0
+395.02124 1143.7
+395.19601 2859.9
+397.20767 27395.9
+398.21127 4674.1
+399.19275 1321.8
+399.22025 717.2
+400.19128 566.1
+408.19434 7447.7
+408.69516 2968.7
+409.19742 929.4
+413.18457 1269.4
+415.95557 2914.5
+416.20444 2625.6
+416.45453 871.9
+416.71146 734.2
+417.95737 1291.0
+418.20172 2584.3
+418.45279 3511.9
+419.24744 1352.7
+419.50211 777.3
+436.88083 1622.7
+437.21249 884.3
+441.90350 909.6
+442.88321 138345.1
+443.21677 111710.8
+443.37164 690.0
+443.55029 57383.1
+443.88440 17612.9
+444.03546 688.5
+444.21860 4550.8
+445.72980 1317.0
+446.53745 883.5
+447.69806 1641.1
+456.20905 2241.8
+456.70261 2577.8
+457.20447 1017.3
+460.55838 5334.8
+460.89172 3758.1
+461.22293 2419.4
+461.55542 912.5
+465.21567 18760.2
+465.50079 1182.5
+465.71786 7669.3
+466.03174 751.9
+466.21634 1819.7
+466.39407 811.2
+466.56201 149446.2
+466.89578 125146.5
+467.08835 912.3
+467.22931 55085.9
+467.42865 734.9
+467.56293 20036.1
+467.62003 1296.0
+467.89587 4909.1
+467.96130 911.9
+468.23288 1139.9
+469.89227 1110.4
+476.70740 2159.1
+477.22736 1118.7
+477.56149 897.0
+493.93872 1695.3
+494.24121 6391.7
+494.57376 4511.2
+494.90759 3037.9
+495.23969 1366.3
+498.27002 4927.0
+499.27155 1073.7
+499.85120 661.9
+500.24429 147239.0
+500.57806 127757.8
+500.91156 68264.9
+501.24594 22631.3
+501.42490 826.5
+501.57928 6086.6
+501.76074 780.2
+501.91315 1317.9
+512.29230 5644.7
+513.29492 1694.1
+516.22150 939.7
+516.28064 4789.8
+517.28357 1247.1
+520.96680 1540.9
+521.30267 1241.6
+521.64429 695.7
+524.73999 4780.3
+525.23273 3750.3
+525.73523 1522.3
+526.26501 11282.4
+527.26746 3424.5
+530.62408 1031.4
+530.95245 3164.3
+531.28387 3068.4
+531.62262 1130.8
+532.51636 1802.9
+533.74475 28130.4
+534.24597 16854.4
+534.74579 5758.1
+535.24438 958.9
+536.62439 842.4
+536.96014 1756.9
+537.94135 847.0
+541.61139 790.1
+544.27527 24570.8
+545.27869 6271.8
+546.28320 822.9
+549.13678 841.7
+555.19727 4480.5
+562.74347 984.3
+572.21210 601.2
+572.77405 864.1
+581.27893 1219.3
+590.28699 8925.5
+590.78784 4161.3
+591.29041 2739.2
+591.88690 638.6
+594.85590 1756.3
+595.77057 1063.2
+602.66510 573.0
+612.03363 692.6
+627.31732 894.7
+630.33838 659.3
+630.38947 1043.5
+639.31110 560.1
+639.35547 976.9
+653.23340 924.3
+657.35779 1731.0
+663.81866 6331.4
+664.32239 5473.6
+664.82318 2463.3
+665.31543 1090.7
+665.79700 1075.4
+666.29828 1300.4
+666.33954 1422.0
+668.28339 697.1
+676.64270 987.4
+684.34235 4908.0
+699.83374 818.7
+782.51227 735.1
+795.54968 901.7
+815.38873 1886.9
+858.02710 629.7
+890.45026 1503.5
+891.44183 1049.4
+908.46069 1604.5
+929.42780 2098.3
+949.94470 789.0
+984.75586 578.0
+996.10767 699.2
+1031.32764 614.3
+1054.36011 576.1
+1057.25525 978.9
+1102.26575 573.0
+1198.15747 3565.4
+1420.30066 662.3
+1479.50659 581.6
+1559.25769 768.1
+1574.27319 632.3
+S	1779	1779	431.7164471
+Z	4	1722.83449
+116.47970 521.6
+121.79163 2355.9
+121.80470 508.8
+121.80614 496.0
+121.83919 559.6
+137.30055 544.3
+139.91602 523.9
+151.44550 626.6
+162.98279 598.0
+165.77257 796.2
+186.02966 805.4
+192.06834 609.7
+197.69055 651.9
+198.26828 605.9
+198.89102 1037.8
+199.17920 1207.7
+199.25510 687.7
+199.26436 890.4
+199.27641 2595.3
+199.30621 664.1
+199.37309 1232.0
+201.87724 528.2
+209.52237 539.5
+210.74551 585.7
+237.80794 621.2
+254.63141 589.3
+282.17047 617.1
+293.07687 932.6
+305.18185 948.5
+308.15845 765.1
+308.38547 584.1
+316.84244 1084.4
+316.87811 740.5
+317.17874 725.6
+321.07217 1045.5
+326.17014 2128.6
+339.08243 1242.8
+342.01547 1174.6
+351.20184 3221.7
+356.16437 1942.7
+369.69223 3189.5
+370.19550 1632.1
+375.43536 2699.2
+379.16208 1828.7
+379.19675 3532.7
+379.66360 1004.7
+381.34772 669.2
+387.67572 1455.7
+387.85550 1044.4
+388.17746 1150.4
+392.21268 740.6
+392.66113 593.3
+393.86008 11663.4
+394.19296 1909.8
+397.20673 1616.1
+402.03690 632.5
+402.17606 1015.2
+413.23663 977.9
+415.70212 1042.6
+415.95453 758.1
+416.20016 821.6
+417.52866 2047.1
+417.85956 920.0
+418.21848 36655.7
+418.71973 21031.3
+419.22086 5112.0
+419.72263 763.4
+419.95245 738.7
+420.20761 11146.5
+420.45883 4295.6
+420.71017 1410.7
+427.11276 672.7
+442.88235 9240.4
+443.21652 5733.1
+444.42184 662.6
+452.16568 2252.9
+456.25229 839.0
+456.74957 1097.4
+457.30164 782.5
+460.56241 1105.9
+460.88712 707.1
+465.21432 963.9
+466.56128 5448.3
+466.89554 1655.9
+469.88602 773.3
+470.21017 602.5
+471.78992 1231.3
+472.29037 792.9
+474.75986 7960.4
+475.26099 4503.6
+475.76337 1187.7
+476.76605 677.7
+494.23880 1963.0
+499.82816 631.7
+500.24344 4521.8
+500.57962 1166.8
+510.91739 929.4
+517.24799 796.5
+517.58545 734.6
+522.92505 2729.3
+523.26007 2131.1
+528.33008 8762.0
+528.83148 3820.7
+529.33539 853.5
+532.54425 2396.3
+544.27771 1730.2
+571.84601 5389.9
+572.34741 2401.8
+572.85254 811.8
+576.83734 2437.7
+577.34003 872.5
+580.28589 1063.1
+621.35040 558.3
+637.33655 642.3
+661.81482 1174.3
+666.13885 609.3
+676.63464 945.0
+693.36853 3925.5
+694.37268 1673.4
+701.52765 562.3
+711.37781 3779.0
+774.66199 646.9
+795.55414 805.8
+820.39160 725.3
+848.85297 573.2
+981.49780 563.5
+984.36182 576.8
+1019.74377 724.4
+1192.58643 693.4
+1198.21875 3405.5
+1249.19397 615.7
+1284.10510 655.7
+1323.24084 570.2
+1386.44873 573.5
+1525.41589 673.2
+1551.60144 658.0
+1656.17126 617.5
+S	1781	1781	1880.02199127
+Z	2	3758.196
+Z	3	5636.791
+526.82672 785.8
+532.53320 2037.2
+549.14899 806.9
+573.20288 576.5
+608.41492 594.9
+676.63086 1081.7
+777.73694 653.5
+795.58203 794.5
+807.66595 632.9
+1012.79895 630.6
+1057.22046 860.1
+1065.77966 631.1
+1194.20593 765.2
+1198.19116 3164.6
+1383.43726 662.5
+1514.12427 632.8
+1591.44458 778.0
+1667.02832 944.0
+1679.93921 653.1
+1687.56543 648.3
+1751.04749 654.9
+1794.34436 678.0
+1870.05615 894.6
+1878.23279 691.7
+1878.75745 727.2
+1878.92969 645.6
+1879.50183 20060.8
+1907.04639 7346.1
+1930.54138 1365.3
+S	1782	1782	539.0312371
+Z	4	2152.09365
+137.29106 5699.7
+140.14798 6953.3
+141.85027 7694.5
+154.68866 6809.5
+165.77213 6840.9
+171.63921 7847.0
+174.17432 6025.1
+185.16502 10530.7
+185.93869 5245.1
+188.23917 8207.7
+188.24632 5843.9
+188.26366 8292.0
+188.27766 8876.6
+188.30769 7746.7
+188.31866 8385.7
+188.35332 7537.6
+188.78123 5668.6
+198.95212 6869.4
+199.17444 6600.7
+199.19221 9369.0
+199.24074 5458.8
+199.25964 12792.0
+199.28001 15073.0
+199.29031 18496.9
+199.30231 9903.4
+199.38744 9600.2
+215.46684 6036.1
+216.02228 5991.8
+218.23526 6653.7
+237.40479 5740.1
+245.39630 5927.3
+251.31293 5466.7
+255.29442 9125.9
+272.09323 6320.7
+284.76370 6142.3
+299.54694 10830.9
+320.57611 6068.6
+327.23633 6020.6
+348.99072 7529.9
+350.28009 11559.7
+377.17545 5386.8
+427.54868 6265.6
+462.27249 7218.4
+501.23566 31428.3
+501.73825 13125.2
+514.21130 5584.3
+532.52631 19133.9
+543.05334 6222.3
+558.74561 8596.6
+615.29340 9995.1
+632.73004 6955.5
+647.32019 313643.9
+647.65417 352295.8
+647.98804 187444.9
+648.32288 64376.1
+648.65796 23326.2
+683.83459 5746.5
+685.01215 18826.0
+685.34741 25391.9
+687.79541 6327.1
+788.76282 6108.7
+795.56860 7280.1
+897.39227 7288.5
+932.17407 5987.9
+939.48047 7303.9
+1057.20361 13535.7
+1065.11841 5889.2
+1177.86646 5671.8
+1198.17249 36997.3
+1289.32410 5753.7
+1491.15613 6711.9
+1504.40442 6663.4
+1525.38953 9883.3
+1723.06787 6615.1
+1783.26257 7112.1
+1810.90405 5726.2
+1870.21082 9039.6
+1877.69983 6034.6
+1878.59827 8052.1
+1879.48901 207352.7
+1879.90466 10282.8
+1880.16309 6435.8
+1880.40405 8723.4
+1907.05688 81252.6
+1930.61194 11541.0
+1994.13586 6489.8
+S	1783	1783	1907.46524127
+Z	2	3813.083
+Z	3	5719.12
+532.53925 1270.0
+560.59991 707.0
+597.17651 641.3
+619.13214 841.4
+630.38751 853.1
+635.00043 614.1
+676.64624 1160.6
+795.57288 969.5
+882.59967 653.9
+966.10632 689.0
+1071.32068 677.9
+1198.20789 3319.0
+1248.74084 606.4
+1356.02075 603.6
+1637.53394 647.4
+1878.90686 564.6
+1879.55542 19919.4
+1879.85510 1874.6
+1880.17603 849.6
+1880.58142 752.2
+1907.08447 7225.0
+1918.62488 790.2
+1930.52368 659.5
+1952.43286 673.1
+1965.04883 633.5
+S	1785	1785	1879.98724127
+Z	3	5636.686
+Z	2	3758.127
+532.49597 1718.1
+570.38989 733.3
+606.13794 641.8
+676.48950 632.2
+676.64008 1009.7
+713.31580 564.4
+715.85522 703.7
+795.56213 1000.8
+931.63000 625.9
+962.74231 576.9
+1021.10052 602.0
+1058.47302 705.0
+1198.11267 3148.5
+1248.92810 620.9
+1364.14648 755.7
+1570.98352 855.3
+1662.80896 611.9
+1763.66772 610.0
+1767.10327 711.0
+1878.72681 758.0
+1879.53931 19385.0
+1880.26257 842.7
+1880.82642 753.5
+1881.99011 760.5
+1906.73877 717.5
+1907.04810 7116.4
+1930.54309 773.3
+S	1786	1786	740.9392246
+Z	5	3699.657
+198.88809 3060.6
+199.24263 4744.1
+199.26379 12128.9
+199.28540 4479.7
+199.36465 3945.1
+240.09727 3611.8
+243.63727 2590.3
+250.42709 2546.6
+254.65967 2513.6
+256.74683 2544.8
+301.11304 5545.4
+311.13425 10846.6
+356.96375 2707.0
+368.15515 3470.3
+371.32568 3002.3
+381.31671 3544.8
+382.55029 2672.4
+408.14786 4638.3
+420.49683 3273.5
+425.17740 5170.8
+428.72815 19231.0
+429.22943 7714.5
+460.42493 2996.5
+498.09189 2970.2
+513.74512 3094.6
+523.17261 2686.1
+532.49805 9136.9
+540.20300 12338.0
+549.09808 3042.4
+560.77393 2856.7
+561.78119 7431.6
+562.27991 3107.6
+562.78107 3900.9
+580.29846 58565.2
+580.63324 55283.8
+580.96735 25129.5
+581.30078 7412.5
+584.48645 2545.6
+611.23859 4981.1
+641.81097 2971.0
+642.84100 3575.1
+671.71692 4612.8
+675.11292 3710.4
+676.65216 4615.7
+683.52130 3110.6
+685.71301 9107.9
+685.91394 9167.3
+689.11481 30162.2
+689.31689 30637.3
+689.51617 32622.3
+689.71716 28874.6
+689.91504 9622.3
+690.11896 7901.5
+710.82794 5290.3
+711.08679 7420.9
+711.33563 9285.9
+711.58801 5517.9
+712.28375 3625.9
+731.05963 3659.0
+754.08405 2517.2
+768.35895 18752.5
+768.60760 32142.1
+768.85974 24935.9
+769.11078 15326.3
+769.35748 5212.2
+770.18878 2989.6
+779.05188 9168.3
+779.38776 7264.0
+780.06055 3756.9
+781.86566 9521.7
+782.11371 3992.3
+782.37085 6768.9
+786.11597 36323.9
+786.36774 58902.0
+786.61743 48478.9
+786.86841 27076.6
+787.12152 8580.0
+809.89459 3176.5
+810.37091 5980.0
+810.61945 9861.0
+810.86694 7568.0
+811.12476 6138.2
+811.37909 4653.0
+814.87073 13699.7
+815.12433 45962.8
+815.37469 26493.9
+815.62433 17045.9
+815.87701 5257.3
+816.11261 3463.9
+817.38788 4117.6
+818.06628 6518.5
+824.62872 5656.2
+824.88037 10785.3
+825.38159 4440.0
+829.12994 26650.1
+829.37830 49758.9
+829.63074 34428.2
+829.88293 16915.6
+830.13025 12853.8
+838.87878 12981.0
+839.12915 20186.9
+839.38123 15495.2
+839.63446 10247.3
+839.88452 6896.1
+843.38416 57404.5
+843.63397 81223.2
+843.88507 73359.3
+844.13623 52072.5
+844.38580 18751.0
+844.63995 6034.7
+852.83380 5000.6
+856.44885 13859.1
+856.64288 4896.0
+856.88678 5364.3
+857.13818 9136.7
+857.41162 8267.5
+860.40918 5262.7
+860.74304 6014.1
+861.14221 44563.6
+861.39313 71692.0
+861.64398 64944.2
+861.89337 33794.3
+862.14417 23192.5
+862.39276 9583.1
+862.64282 4105.7
+880.45667 3042.3
+883.94922 3227.9
+904.36090 7923.9
+905.35681 6095.1
+909.42334 5363.5
+909.76666 4369.7
+910.09491 5269.5
+946.16016 3297.9
+947.44684 7768.8
+947.78021 12277.2
+948.11230 16718.4
+962.87280 4188.5
+963.37097 3963.6
+971.95166 3298.0
+972.87891 2874.6
+990.77838 4298.4
+991.12952 4991.7
+991.46350 6182.3
+1003.46826 4113.7
+1003.97241 4461.2
+1024.13806 4407.4
+1024.46423 5718.8
+1024.80774 9050.7
+1025.14233 4361.6
+1038.42505 3004.2
+1187.93274 2830.7
+1198.11292 15475.1
+1227.63525 3591.2
+1233.98511 3370.3
+1373.43286 3263.0
+1416.60754 3497.5
+1491.29651 3351.0
+1525.27600 3563.6
+1549.21741 2835.5
+1639.09851 3124.8
+1879.00684 3753.4
+1879.54749 92297.9
+1880.05518 7105.9
+1880.26013 4822.9
+1907.05457 32797.8
+1930.43140 4643.4
+S	1787	1787	450.9904946
+Z	4	1799.93068
+110.60817 6878.5
+121.79268 22808.8
+121.79911 7961.8
+121.80312 7507.6
+133.13591 12627.1
+136.03447 5867.8
+147.04388 9710.1
+157.59636 7666.2
+166.72417 7319.2
+173.68684 7291.4
+189.95583 5409.9
+197.12778 35176.4
+198.89473 8506.5
+199.15860 9381.8
+199.16840 9728.4
+199.18056 19064.9
+199.25661 21396.4
+199.26619 23531.7
+199.27538 18822.1
+199.35497 6541.5
+199.36363 10215.7
+199.37367 9270.9
+206.35284 7300.1
+217.09630 12448.4
+221.09192 17611.2
+227.10236 10639.9
+234.12352 41763.4
+241.23056 7300.3
+258.14438 48479.1
+259.64404 33482.0
+260.14490 13622.6
+262.33777 6154.2
+276.15503 67382.2
+276.56192 6517.7
+284.19653 13053.7
+289.15411 25292.0
+308.88666 8394.1
+319.50485 7709.6
+334.17532 34483.1
+340.54752 10946.1
+341.19302 14304.7
+342.26236 6036.1
+350.29086 11547.9
+360.89130 5828.5
+362.28671 6494.2
+363.68448 10341.8
+372.69122 89705.7
+373.19312 32019.4
+373.90738 7936.1
+385.45905 20829.3
+387.18643 155915.7
+388.19046 26898.5
+389.19272 7159.4
+402.23663 11504.9
+403.22562 29679.5
+405.19748 103958.5
+406.20108 18654.0
+409.90741 11634.6
+410.24252 8244.5
+410.57785 6871.3
+411.22241 38955.0
+411.55710 33779.4
+411.89111 19539.1
+412.14853 6182.5
+415.91202 53171.2
+416.24609 68346.6
+416.58005 29680.8
+416.91617 7387.8
+419.26172 39580.9
+419.57413 21875.0
+420.26776 10693.5
+422.22433 11770.6
+425.24341 206470.0
+425.57785 210665.5
+425.61368 6600.8
+425.62207 5577.9
+425.91208 95218.9
+426.24634 19998.8
+427.52011 7723.4
+428.46432 6374.1
+428.78479 21549.3
+429.28690 15110.3
+429.78488 7625.7
+431.47430 7870.6
+432.71704 9094.1
+435.23141 10209.8
+435.97949 15246.9
+437.72186 40614.7
+437.97269 19852.9
+462.93927 12715.7
+463.26978 14261.6
+463.94360 10910.0
+469.90094 8203.4
+475.78506 6412.9
+480.94260 13315.0
+481.25977 79251.1
+481.59464 25700.3
+486.61179 86221.5
+486.94635 69348.6
+487.28156 29111.4
+487.61603 8417.3
+488.28238 10332.0
+490.61319 6777.0
+496.61990 20590.3
+496.95587 20083.1
+497.28641 17036.1
+499.94717 23969.8
+500.28262 20005.9
+500.61414 11504.1
+505.95154 76005.3
+506.28598 73705.5
+506.62192 34265.8
+507.60846 27038.2
+509.26544 31309.1
+509.76819 10905.1
+510.31985 15659.0
+510.81601 9898.7
+513.61108 1149424.6
+513.94525 485354.6
+514.22034 10595.9
+514.27972 47720.6
+516.74603 14107.7
+518.28094 200560.3
+518.63647 19267.8
+518.77179 21305.7
+518.97284 26394.0
+519.28436 63803.1
+520.28400 10269.3
+524.30664 125916.4
+524.64014 129529.1
+524.81696 35514.5
+524.97498 75558.4
+525.31036 28887.2
+527.31836 9391.1
+527.82123 15545.9
+532.34698 8088.2
+532.54108 22664.1
+537.31006 47258.6
+537.64502 63353.8
+537.97894 28520.4
+541.26581 6757.0
+542.64618 9671.6
+543.31360 236766.3
+543.64764 299140.4
+543.98193 142023.1
+544.31604 57263.8
+544.65015 15103.7
+548.96558 10853.9
+549.30023 22892.6
+550.78528 15841.1
+551.93823 7192.8
+555.82849 21938.9
+556.33380 20284.7
+556.82544 8224.1
+556.94727 14515.9
+559.78912 29132.3
+560.29010 23363.2
+560.34265 34082.5
+560.78900 9694.0
+561.34180 18246.6
+562.63275 10932.5
+565.83276 14777.1
+565.96436 35641.0
+566.30811 22743.1
+572.83496 7127.1
+573.78790 7578.0
+576.62073 14684.4
+579.82880 23784.6
+580.33044 28132.8
+601.37213 14351.7
+607.32513 17932.8
+607.82520 12421.4
+616.33038 168893.6
+616.83228 101104.5
+617.33356 54281.5
+617.83331 13660.0
+623.36145 12644.5
+623.86371 8539.0
+629.31799 17089.3
+630.31909 7904.7
+630.37958 7224.2
+637.36133 198402.3
+637.86261 194692.8
+638.36377 63008.1
+638.86298 20769.4
+647.32422 14757.2
+648.38489 11275.1
+663.86493 13430.0
+664.86700 8232.0
+665.48578 5831.2
+672.87195 130834.6
+673.37402 127307.0
+673.87695 49573.0
+674.38141 18373.9
+676.65228 12707.7
+676.89172 12031.2
+677.38745 14212.3
+677.86194 9910.9
+681.37183 8249.8
+689.20068 5440.6
+693.37421 8406.7
+693.90997 14609.1
+694.40839 18448.1
+694.90503 8869.5
+698.51715 6503.1
+702.38367 10949.4
+714.45428 11207.4
+715.46075 7058.0
+721.48572 7190.3
+729.41486 85871.6
+729.91638 76251.8
+730.41766 36127.1
+730.91461 12170.7
+731.08929 10746.5
+744.37469 41196.7
+745.38037 18462.4
+786.15833 6435.5
+795.57104 9082.2
+884.56287 19267.7
+885.56384 12238.4
+939.04767 6896.1
+969.73938 5949.7
+1017.52722 11466.2
+1035.53528 35413.3
+1036.53149 18093.8
+1047.62073 10905.0
+1048.63464 10094.5
+1114.50366 6558.4
+1149.22607 6003.8
+1188.05530 8302.7
+1198.20471 33794.8
+1221.93640 6839.6
+1269.77234 6798.6
+1356.64587 8213.9
+1398.41345 6549.0
+1406.28406 6968.1
+1504.42529 5949.3
+1522.56689 5727.3
+1525.35132 10721.6
+S	1789	1789	621.777991267
+Z	2	1241.708
+Z	3	1862.059
+173.95131 2381.1
+182.49643 1915.0
+188.26433 5915.0
+188.29008 8279.4
+188.30397 8527.0
+188.33867 2113.1
+188.36041 2376.8
+199.17976 3202.5
+199.25894 4193.4
+199.27747 8465.0
+199.29411 5204.6
+199.32620 2043.4
+199.34238 2947.8
+199.37518 3884.8
+221.12770 5772.0
+221.50038 2507.1
+222.71100 2035.9
+232.97717 2369.5
+241.16420 2309.0
+256.16428 2897.5
+259.08197 2178.4
+264.65512 2323.1
+277.75845 2108.9
+280.17584 2064.0
+280.25076 2385.3
+282.13046 2804.0
+308.88831 3250.0
+350.28247 3163.9
+354.93671 2710.5
+361.20621 7515.7
+371.31140 2590.5
+376.81763 2478.1
+398.23837 3165.9
+406.67444 2469.0
+427.52908 2667.8
+440.28574 8657.6
+452.75369 2368.3
+467.72690 2632.7
+471.63574 2610.5
+486.39249 2584.3
+487.89819 2468.9
+490.24930 23984.6
+491.25183 4460.3
+497.56146 2172.7
+511.32245 24285.3
+512.32391 4498.3
+514.23816 4604.2
+529.29535 7431.5
+529.79749 7209.1
+532.52435 7507.7
+549.14038 3258.6
+551.57184 4872.7
+561.28656 19512.5
+562.28821 3773.3
+565.61060 5402.4
+565.94556 3127.7
+568.34314 5337.5
+569.34723 3350.2
+575.45367 2331.2
+599.27405 2314.1
+602.36310 4548.6
+630.38788 3063.5
+674.36969 9856.1
+676.64520 4095.1
+681.42657 14861.2
+682.42712 4905.5
+694.79694 20505.3
+695.30103 15900.1
+726.60016 2232.2
+726.64374 2035.6
+731.39172 44415.8
+732.39258 17873.5
+734.86005 3506.4
+751.34009 21895.4
+751.84320 19376.3
+752.46411 17895.5
+753.46625 8380.9
+777.43958 2267.4
+799.88092 2891.7
+802.42865 23197.5
+803.43359 9660.6
+807.88232 45702.9
+808.38318 34068.0
+808.87775 5157.6
+827.85535 2877.3
+828.36420 2733.2
+847.92151 2400.1
+850.89886 2417.8
+873.46454 13836.9
+874.46326 5167.4
+879.48724 2704.7
+881.51465 4905.6
+882.51349 3174.0
+914.38397 5395.7
+944.49768 9188.2
+945.50189 5127.0
+996.52753 3130.2
+1027.46460 4362.4
+1028.45422 3134.1
+1057.25146 3333.0
+1057.59290 7416.8
+1095.59851 11023.8
+1096.60730 9351.5
+1170.96155 2568.8
+1198.17188 12405.0
+1348.10840 2406.9
+1414.99597 2393.4
+1540.21997 2553.6
+1776.88928 2974.4
+1835.76807 2839.2
+1876.07593 3044.3
+1878.61426 2871.0
+1879.10767 11651.3
+1879.55396 71766.6
+1880.01062 7856.6
+1880.50256 3660.8
+1907.06775 29255.9
+1930.54626 3785.2
+S	1790	1790	475.0118271
+Z	4	1896.01601
+120.79329 38613.7
+121.79317 152119.2
+126.15084 33286.8
+131.33882 32245.1
+131.50119 34180.4
+135.92900 37031.9
+136.58864 41164.1
+137.41148 36554.2
+145.68945 33214.6
+146.50121 36545.1
+155.33884 33517.4
+165.77513 32137.3
+165.88757 37183.9
+169.48979 55416.6
+171.63707 45067.2
+172.50027 31312.0
+182.72667 34167.5
+182.77869 42328.6
+188.19080 35037.8
+188.23560 33787.0
+188.27818 124228.4
+188.28877 142952.8
+188.30841 107571.5
+188.32083 62867.4
+189.40907 34050.3
+191.40778 38045.8
+191.70216 42046.9
+193.21938 34641.4
+198.90068 41085.9
+199.04976 45667.6
+199.18881 53307.1
+199.24464 52983.9
+199.26166 46405.3
+199.27196 75138.5
+199.28099 141840.3
+199.28804 105858.4
+199.37785 73659.7
+214.50890 37198.1
+232.98584 33254.3
+254.46877 37505.3
+256.15921 40050.1
+257.74609 35294.0
+306.98569 35611.2
+309.07092 33822.1
+321.69305 50215.6
+322.22491 40052.4
+332.98972 35949.0
+341.65475 34155.4
+378.68472 33758.3
+386.97708 34860.0
+389.69324 54403.4
+405.19965 77913.7
+410.86407 39003.1
+427.52979 59275.2
+444.25232 102632.4
+444.49707 58458.2
+445.73148 48658.4
+447.75845 48235.1
+448.50299 6943776.0
+448.75348 6705941.0
+449.00415 3616575.8
+449.25452 1317643.3
+449.50507 267444.9
+463.27084 36392.0
+470.30676 39464.9
+482.64844 33784.1
+501.23117 36627.7
+532.51221 123456.0
+558.74841 63571.1
+559.25250 69881.9
+586.84662 34447.6
+597.66693 169466.5
+597.99951 146291.8
+598.65619 39880.2
+615.28955 79797.0
+615.79688 55162.2
+637.37158 38065.1
+637.86041 45117.7
+641.75079 36120.4
+670.37653 51967.7
+676.64209 70716.1
+684.06415 40817.6
+795.58466 55474.2
+922.94678 49538.3
+1021.11115 40513.7
+1054.42725 41719.4
+1062.49951 39717.1
+1151.74048 40878.6
+1178.81226 42193.1
+1191.59619 36703.9
+1198.15051 211292.9
+1248.70728 37760.9
+1306.21301 35584.8
+1352.98010 39057.2
+1525.38477 45203.3
+1675.00208 38200.0
+1860.08020 33267.2
+1878.11145 61724.8
+1878.35059 42917.0
+1878.48267 41883.6
+1878.92017 91250.8
+1879.52087 1257933.5
+1880.11621 75043.3
+1880.87866 62641.4
+1906.23669 37119.0
+1907.04163 457097.8
+S	1791	1791	633.431407933
+Z	2	1265.015
+Z	3	1897.019
+177.86200 11210.5
+188.25822 15522.9
+188.26523 16573.4
+188.27876 16333.8
+188.28760 19259.3
+188.29951 17519.9
+188.30779 9820.7
+188.31206 10299.1
+199.17647 20047.6
+199.18895 9393.5
+199.25041 12097.7
+199.26096 22064.2
+199.27464 46490.9
+199.30394 15925.5
+199.31950 10100.3
+199.37283 17775.1
+211.18018 40326.2
+212.18288 11718.9
+218.25464 9867.4
+233.16605 20000.3
+238.21121 11270.0
+239.17511 26698.8
+243.18263 10340.8
+249.88060 10373.9
+279.61414 9593.4
+284.19669 51961.9
+306.02780 10564.9
+326.29428 9013.2
+331.17664 55126.7
+332.17896 23891.1
+349.18619 51394.2
+363.20023 10815.5
+369.83212 9959.2
+386.24313 17826.9
+398.82977 10877.9
+403.26947 34278.8
+408.35641 10915.9
+410.14758 8708.0
+427.54324 12311.0
+431.26407 53011.7
+432.26624 11442.7
+450.23355 16559.3
+451.23355 11895.4
+466.84003 11180.6
+481.22595 20890.9
+481.73422 12419.1
+484.22049 12057.2
+490.23358 86238.0
+490.73624 58571.4
+491.23895 17413.3
+501.23697 57209.0
+512.21240 14361.2
+524.31451 90848.5
+524.81586 61851.7
+528.28088 39259.6
+529.27972 45435.8
+530.27527 14968.5
+532.51691 30827.0
+537.77118 93356.4
+538.26569 99511.7
+538.76428 73952.4
+539.26550 15828.4
+545.30792 55623.9
+546.31250 17828.6
+546.77625 640137.4
+547.28131 449011.2
+547.77905 149338.0
+548.28839 79657.3
+549.16058 13256.1
+556.24335 9841.8
+562.98206 11226.6
+576.95300 44361.9
+577.28400 24216.7
+586.29834 18103.6
+592.33282 18646.2
+595.28461 20052.2
+596.13678 27273.9
+596.40863 19247.6
+596.46838 29499.6
+596.80182 17039.8
+596.90710 18914.5
+597.23914 24573.2
+597.29553 15325.3
+597.66870 5306058.5
+597.73651 22807.8
+598.00226 6116679.0
+598.06415 25641.5
+598.33600 3212718.5
+598.42938 28561.9
+598.52209 19278.3
+598.67004 997274.3
+598.76495 34519.6
+599.00421 95410.6
+599.10474 19438.4
+599.20862 30279.2
+599.26428 24620.0
+599.53937 40929.2
+599.60236 15313.1
+599.88000 12820.6
+600.80798 14527.0
+604.30743 337205.7
+605.30927 120725.0
+605.79810 24763.3
+606.31311 16228.8
+609.31335 17060.0
+613.81732 77820.1
+614.30975 194988.7
+614.81036 160565.4
+615.31378 70630.0
+615.81555 21904.9
+619.36884 11474.9
+639.81097 9696.1
+641.32300 10889.1
+642.31909 26969.8
+643.32507 12860.6
+659.34717 34476.1
+660.34943 15436.9
+672.87109 32563.2
+673.37982 17917.8
+676.63293 19444.1
+681.33295 14938.1
+682.31689 29693.9
+683.31732 16311.2
+684.30817 13804.5
+686.03296 18723.4
+686.36249 33005.9
+686.75934 11280.2
+687.03149 9483.1
+699.34418 123134.6
+700.34430 54910.6
+704.08990 10571.2
+707.34827 24248.7
+710.31024 61674.5
+711.31482 14749.3
+716.37195 63282.5
+717.37811 36360.3
+718.35016 210308.7
+719.35510 87516.6
+720.35669 24378.5
+723.72711 44360.1
+724.05817 44860.7
+724.39520 17044.2
+728.41650 11621.5
+729.41327 33731.5
+729.91803 34051.1
+744.37482 50581.7
+745.37994 34929.9
+749.64435 9611.1
+758.42810 35799.0
+758.92767 39307.8
+759.42432 15027.9
+761.42035 90219.8
+761.75476 114361.4
+761.96216 9689.6
+762.08661 20852.4
+762.41626 12491.9
+762.86230 15044.4
+771.87097 31120.2
+772.37860 16093.0
+785.95862 21625.9
+786.45917 29326.8
+786.96777 14549.2
+795.55731 22522.1
+796.39343 11055.2
+814.37805 31595.2
+814.46979 21771.1
+814.96747 19974.5
+815.37085 38032.9
+816.37280 19075.3
+832.39392 420577.5
+833.39526 191841.5
+834.39899 55879.8
+864.92377 49031.7
+865.42310 32968.7
+880.42053 33416.8
+897.44104 30338.5
+898.44019 16612.6
+914.47107 68093.3
+915.47522 52899.4
+956.10309 10304.5
+961.45032 45823.1
+962.43958 96628.5
+963.44336 49918.5
+964.44684 16598.6
+979.46155 602360.8
+980.46454 311902.7
+981.46674 120560.5
+982.47028 18122.6
+985.18127 10065.8
+1016.01434 10280.6
+1075.51953 21378.0
+1076.52100 13810.4
+1081.50708 42876.6
+1082.49915 41176.4
+1083.49805 24880.3
+1092.54834 114217.9
+1093.54749 53853.6
+1094.55945 28609.0
+1098.53076 27808.2
+1099.52039 69598.3
+1100.52759 31386.5
+1116.54919 47383.6
+1117.54419 46891.3
+1119.55652 10489.9
+1143.51050 10649.8
+1161.51367 10195.4
+1198.15649 56445.3
+1599.54736 10718.6
+1601.05725 10309.7
+1859.93237 12539.5
+1870.26343 9596.1
+1877.46240 18244.6
+1879.51294 334789.5
+1880.01245 12137.2
+1906.98987 119424.0
+1918.67212 12691.8
+1930.64648 11706.7
+S	1793	1793	584.8252421
+Z	4	2335.26967
+157.31259 41185.6
+161.87711 35928.6
+164.16280 37095.1
+165.77464 50173.1
+166.22244 38252.7
+169.50032 42021.4
+174.61052 35704.7
+175.80067 43525.8
+187.14394 68570.0
+188.15479 43557.7
+188.25468 77053.0
+188.28090 160435.8
+188.29858 129287.6
+188.31895 59564.4
+188.32867 51160.6
+191.20264 38600.5
+199.17606 66518.5
+199.25375 58259.4
+199.26430 58577.6
+199.27341 147886.8
+199.30235 77134.1
+199.31700 39941.8
+199.36400 51610.4
+199.37009 45175.0
+199.39371 55639.8
+199.40643 35017.8
+199.41544 39564.6
+199.58148 39546.5
+208.14549 41391.3
+217.27852 44098.6
+226.04695 44142.8
+233.16408 195934.6
+238.71497 54013.8
+246.18037 57271.9
+261.15967 51065.2
+272.08054 39932.2
+273.12457 38464.1
+275.65686 39975.2
+278.08734 40295.9
+299.13895 78850.9
+304.27240 37989.2
+314.20697 93349.8
+324.78458 43921.8
+344.19934 43940.4
+347.32425 39944.7
+347.84567 44571.6
+349.11768 38474.0
+349.24564 37023.8
+354.60666 38275.6
+361.76703 34330.7
+362.20804 59769.2
+366.17703 34721.2
+371.37338 44783.3
+381.36371 41797.7
+396.96957 41972.9
+450.90945 41259.4
+457.27756 128382.4
+460.17569 39270.6
+461.27325 53370.3
+462.89636 40292.4
+475.29327 51109.8
+501.01715 35433.2
+515.03217 195622.9
+515.28217 71581.7
+529.32068 41708.2
+532.48944 118072.8
+532.52911 39771.0
+537.22388 36536.6
+543.30334 60832.3
+546.36157 69869.0
+556.34741 330379.3
+557.34998 135975.9
+558.79230 66869.8
+559.29846 46397.0
+588.70172 47782.2
+589.44287 40309.4
+621.00000 666075.5
+621.33392 613810.3
+621.66882 319147.7
+622.00183 149529.6
+630.42773 55392.0
+659.02740 53184.4
+675.85883 300324.9
+676.35956 146343.4
+676.65326 59883.6
+676.85614 55169.1
+691.36615 207235.1
+691.70197 180419.8
+692.03857 83976.6
+692.37775 618372.6
+692.71167 592288.3
+693.04779 285064.0
+693.37848 91031.0
+731.13904 57408.6
+758.87903 128806.7
+759.37665 125470.4
+777.06201 44121.6
+789.42548 101212.1
+789.91876 44887.0
+795.56104 61521.3
+808.41095 77749.1
+808.91077 76887.8
+832.93384 91736.1
+833.44098 69372.5
+842.45740 228139.1
+843.46216 77970.4
+879.70972 39028.7
+881.46301 1036870.2
+881.96478 1220529.4
+882.46722 534204.6
+882.96967 204839.9
+930.99902 108225.2
+931.49506 118806.5
+931.99487 106577.6
+1057.27307 65402.0
+1060.05469 40725.7
+1063.30896 52305.2
+1156.91614 44714.2
+1198.11841 201002.0
+1279.18176 42544.3
+1334.77380 46476.3
+1489.76855 44096.0
+1502.35266 42785.3
+1525.45227 65469.9
+1540.02539 43471.6
+1776.97974 39511.5
+1870.19641 46260.4
+1873.09998 56054.7
+1876.75195 46076.4
+1877.96460 38620.7
+1878.72375 111815.8
+1879.12939 194656.4
+1879.57104 1326925.6
+1879.96997 191779.3
+1880.49353 72551.4
+1906.80615 72909.4
+1907.08044 502072.2
+1907.78125 55074.4
+1974.33997 48537.0
+1981.61926 48228.1
+S	1794	1794	537.8056496
+Z	4	2147.1913
+137.28433 700.1
+139.93321 648.6
+142.80074 573.6
+147.40840 543.5
+165.77315 755.6
+166.21960 581.8
+171.76813 533.7
+181.64381 548.8
+187.14363 4359.4
+188.20175 647.2
+188.21745 544.7
+188.24165 729.3
+188.25270 713.6
+188.26123 686.9
+188.27734 725.9
+188.28784 531.0
+188.29774 643.4
+188.32103 835.0
+188.32996 798.6
+188.33684 746.3
+188.35445 702.7
+188.36177 511.7
+198.89490 769.2
+198.98712 618.7
+199.15759 594.9
+199.16960 640.4
+199.22568 659.3
+199.24796 1061.8
+199.26608 1307.5
+199.29099 2136.6
+199.30873 919.2
+199.38980 1185.7
+210.51749 655.4
+215.13844 1400.5
+217.89926 514.4
+233.16428 8276.3
+234.16705 1105.8
+237.33916 592.9
+241.19101 612.3
+246.28416 541.5
+254.51517 551.9
+260.17566 597.6
+261.15842 1389.4
+268.33112 595.9
+269.18399 1238.0
+295.43646 630.9
+314.16302 580.3
+314.20694 2749.5
+340.45428 673.3
+350.27643 635.1
+362.20691 1690.7
+374.85010 707.0
+375.10721 534.8
+388.21478 1764.6
+388.54828 1128.3
+388.68732 4324.0
+388.88489 764.0
+400.24536 583.8
+402.66049 679.6
+410.14090 533.8
+412.21854 744.2
+422.36020 513.7
+427.52856 700.6
+429.28360 1322.8
+457.27866 2687.7
+465.26453 641.4
+468.01309 3391.0
+468.26297 4570.5
+468.51501 3262.3
+482.72040 2096.8
+482.97403 1576.7
+483.22073 1103.7
+491.48129 645.9
+496.28174 1174.1
+496.53568 2321.2
+511.77832 3267.2
+512.02838 4750.5
+512.27911 1982.4
+519.28015 4235.3
+519.61505 4436.4
+519.94934 2771.7
+522.26886 624.3
+525.28455 37259.1
+525.61884 25530.8
+525.95361 5082.0
+532.48035 2013.9
+552.63739 1741.1
+556.34790 4161.8
+557.34900 1124.3
+558.30725 14898.1
+558.64136 15813.1
+558.97595 4878.4
+559.31067 876.3
+561.97900 593.9
+570.60516 538.0
+574.35742 2462.5
+575.36047 966.8
+581.81848 13319.1
+582.31885 9183.6
+582.81927 2177.0
+620.82300 703.3
+624.01025 818.7
+629.68463 16592.8
+630.01868 16184.7
+630.35327 7528.3
+638.36401 785.8
+638.86566 730.6
+643.96399 1645.4
+644.30042 1951.5
+644.63123 971.0
+666.34619 1130.7
+676.35400 624.7
+676.62640 1027.3
+678.33936 3832.4
+678.84308 1557.6
+679.34448 720.6
+682.03485 1438.9
+682.36890 1320.5
+682.70184 715.7
+689.39539 1754.8
+695.37933 1590.3
+695.88129 2339.9
+721.85388 1063.0
+723.88477 1134.2
+738.89508 2694.2
+739.39954 3262.1
+739.90265 1058.3
+744.39105 970.1
+776.36621 1827.3
+778.91553 1021.3
+787.42352 46794.2
+787.92480 47711.3
+788.42621 15497.8
+788.92737 1014.3
+795.29437 702.3
+795.56744 893.1
+799.45508 665.7
+819.57184 774.1
+826.60004 689.0
+836.95789 9614.7
+837.45874 10657.9
+837.96033 3672.6
+854.47253 1701.5
+855.48975 1305.0
+872.48547 787.0
+893.49683 713.7
+919.14868 619.9
+1079.28394 727.4
+1129.50000 593.0
+1151.29199 595.8
+1198.06628 3172.1
+1255.64539 683.7
+1281.61121 570.5
+1446.61133 536.8
+1450.53821 802.4
+1525.38989 996.9
+1582.55603 777.2
+1859.88196 575.6
+1877.73572 765.2
+1878.14661 750.3
+1878.71924 872.6
+1879.03613 1709.6
+1879.50159 19637.1
+1879.98962 1680.6
+1880.38586 1087.7
+1904.25818 759.9
+1907.03406 7380.4
+1930.52234 933.5
+S	1795	1795	1879.9908246
+Z	3	5636.697
+Z	2	3758.134
+532.46948 1885.7
+542.09943 585.3
+545.99091 710.1
+549.18048 714.7
+562.27118 561.9
+572.23041 588.5
+676.62030 924.2
+706.57001 575.6
+782.84790 584.4
+820.95691 582.6
+822.54053 583.6
+842.86816 792.8
+864.91766 683.1
+888.98175 603.6
+965.79834 574.8
+1015.11688 663.6
+1198.04932 3591.8
+1252.40210 619.0
+1581.97302 605.6
+1879.15869 3509.3
+1879.48401 19084.9
+1879.79102 3147.4
+1880.15576 2036.2
+1907.12744 6957.5
+1915.70850 624.5
+1930.70984 839.0
+1972.14148 649.5
+S	1797	1797	666.1008771
+Z	4	2660.37221
+188.21793 762.4
+188.22716 604.9
+188.24504 650.3
+188.27895 2221.0
+188.28966 2586.1
+188.30115 1923.0
+188.33955 682.9
+188.35056 523.5
+198.88979 883.7
+199.02252 549.9
+199.19960 606.9
+199.21883 647.2
+199.23973 725.3
+199.25861 1660.6
+199.27240 1348.1
+199.28195 2264.2
+199.30136 854.9
+199.31699 595.7
+199.37895 744.8
+200.14969 581.4
+213.71744 688.2
+228.96077 561.5
+229.80557 539.5
+243.88176 737.7
+246.15608 2215.2
+259.73431 627.1
+259.97308 690.2
+273.14825 865.0
+277.19937 600.7
+283.14011 22475.1
+284.14374 3013.9
+291.15591 4532.9
+291.65704 1170.5
+296.79492 552.2
+319.31766 673.4
+328.43365 661.2
+328.65915 2073.0
+337.17566 1169.2
+346.17981 9113.2
+346.68124 4824.3
+347.20358 14147.3
+348.20706 1989.4
+352.35358 670.9
+354.17709 2084.9
+355.18484 2949.2
+355.68701 1155.4
+361.12460 734.7
+371.67996 760.7
+385.18564 720.8
+386.21719 884.6
+390.20898 845.5
+398.21463 8092.8
+399.21274 1540.4
+402.21356 1085.4
+405.69806 1411.8
+406.23569 776.2
+414.21204 4138.8
+414.69968 1494.9
+414.71878 857.7
+415.20187 819.1
+415.75537 740.1
+416.22626 3403.1
+417.20770 614.7
+423.21667 8486.5
+423.70782 16692.7
+424.20975 6412.3
+424.71292 1729.0
+430.20718 2130.4
+432.22186 89095.7
+432.72327 46978.2
+433.22485 11892.8
+433.72592 1813.9
+434.23566 87576.2
+434.71701 618.4
+435.23843 17848.4
+436.23959 2743.9
+444.21451 583.6
+448.93393 660.1
+467.74063 8397.7
+468.24213 3395.7
+468.74402 1164.2
+488.77252 744.8
+494.22913 833.6
+499.22675 756.0
+499.28799 735.2
+525.25085 804.9
+526.21069 642.8
+528.63391 1065.7
+528.96918 1144.0
+529.29822 821.2
+530.36108 604.4
+532.47144 1817.2
+538.30042 991.8
+543.80261 632.1
+544.79620 705.0
+545.28198 6616.0
+546.28552 1885.2
+552.79956 1403.6
+553.29675 977.0
+560.79773 993.5
+563.29279 7937.4
+564.29858 2849.1
+570.30542 2705.2
+570.63995 2872.3
+570.97284 1252.3
+576.30853 5263.2
+576.64276 4787.3
+576.97784 2801.1
+581.30353 135666.7
+582.30627 44621.9
+582.78833 949.6
+583.30963 8859.7
+584.31195 822.6
+585.32312 800.1
+588.31396 1136.2
+593.98364 3552.1
+594.31702 3189.9
+594.65198 1582.9
+594.82281 1749.0
+599.98700 16458.3
+600.32147 16472.3
+600.65594 8977.6
+600.99072 4683.1
+601.32831 1587.9
+603.32971 885.9
+605.63788 881.0
+611.30701 1366.1
+615.36133 778.7
+617.00238 2579.0
+617.33514 2056.2
+617.67267 799.9
+618.00671 937.1
+621.30768 714.2
+626.66809 832.6
+632.33807 4333.8
+632.67242 4837.2
+633.00555 2669.6
+639.33704 1874.4
+639.66882 2213.8
+640.00366 2226.7
+640.33514 879.7
+640.67627 844.3
+645.34174 11199.0
+645.67596 12480.6
+646.00989 6572.8
+646.34473 2690.5
+656.40002 681.1
+676.65179 963.4
+682.02289 1066.2
+682.35645 1067.2
+688.02863 5344.8
+688.36450 3858.2
+688.69342 5050.0
+689.02911 1328.2
+689.36456 928.3
+691.35168 2234.8
+692.33337 3324.2
+693.33929 1346.7
+694.03168 22161.1
+694.36652 25214.0
+694.70044 18469.4
+695.03516 7540.2
+695.37177 2259.4
+709.36230 18903.7
+710.36609 8039.8
+711.36310 1322.7
+721.39386 1837.3
+721.89569 2387.9
+722.39850 1266.7
+728.42529 1286.2
+729.37115 801.2
+731.04913 833.2
+731.33856 1205.6
+731.70825 1099.4
+732.03992 695.8
+733.71912 749.5
+734.39496 1396.3
+737.05157 5247.9
+737.38501 7790.8
+737.71729 7053.6
+738.05420 3802.8
+738.38269 1705.3
+742.35217 636.5
+743.05444 73115.2
+743.38855 107445.3
+743.45911 836.9
+743.72290 71922.7
+744.05731 36414.7
+744.39294 15023.3
+744.72736 3044.4
+745.06195 1267.8
+745.59314 602.0
+748.37268 2106.0
+749.35498 8008.9
+749.90552 1666.9
+750.36456 3509.5
+751.36981 1271.4
+757.39508 1281.5
+760.72919 1006.8
+766.06140 4226.7
+766.38513 30546.2
+766.73187 4794.0
+767.06348 3542.4
+767.38617 11508.6
+768.38794 2014.7
+770.38483 988.8
+772.06537 6653.5
+772.40009 9866.8
+772.73279 9253.4
+773.06781 4589.2
+773.40320 1138.9
+778.89154 1014.7
+779.39453 2327.3
+793.73346 1071.2
+794.07495 1314.0
+794.42664 1022.7
+794.74603 805.9
+795.54480 1218.9
+799.74518 2743.7
+800.07782 5015.8
+800.41443 3097.3
+800.74615 2391.4
+801.08301 1059.0
+801.40302 1252.6
+801.72552 802.8
+806.08124 1402.4
+806.44727 10862.1
+806.94702 11799.0
+807.44867 6418.7
+807.95044 2332.4
+811.45941 927.0
+815.45947 915.2
+816.40369 760.8
+822.40985 940.6
+823.42352 1609.8
+823.75836 2286.4
+824.09796 1268.4
+824.42969 1488.2
+825.90045 1071.6
+829.47266 3849.1
+830.09692 1670.6
+830.47278 2032.8
+833.08582 846.9
+833.42633 1403.6
+833.91431 1381.9
+834.40961 1597.0
+834.92065 1100.5
+835.41766 741.1
+838.76080 1094.4
+839.09009 2085.8
+839.42706 2154.6
+839.76465 1221.0
+842.91956 2400.2
+843.42249 3342.1
+843.92932 1629.5
+845.10773 639.4
+845.42834 3116.3
+846.40912 2833.9
+847.41058 1222.0
+854.95416 2797.5
+855.45587 2340.0
+855.96313 1122.1
+856.45105 730.3
+863.43695 25604.4
+863.95911 57255.2
+864.46075 55844.4
+864.96179 28728.4
+865.46344 12876.9
+865.96460 3883.9
+866.42102 914.1
+867.45630 806.9
+870.69849 682.6
+881.46973 1676.8
+881.96533 1835.2
+882.46014 2282.5
+882.96198 1208.9
+885.47760 2386.0
+885.98291 3572.5
+886.48999 1636.1
+888.13000 882.4
+890.47321 13580.0
+890.97229 15708.5
+891.47296 11310.8
+891.97559 5411.1
+896.62860 1088.2
+897.12708 1536.2
+897.47766 862.9
+897.64264 1069.0
+898.07532 1315.1
+898.44446 1729.3
+898.56586 1409.8
+899.04761 987.2
+899.35852 1086.8
+899.47748 270187.4
+899.97876 301165.8
+900.47913 176249.0
+900.98090 71110.3
+901.48132 22207.5
+901.98352 5488.4
+902.33130 2006.4
+902.40741 692.1
+902.48206 895.1
+902.84259 1469.5
+903.03955 778.9
+904.46417 1140.7
+907.45776 987.5
+907.95422 1234.5
+909.46405 1120.2
+916.45844 4858.7
+916.95905 4953.6
+917.45697 2238.9
+917.95599 902.4
+967.50330 1085.6
+968.01270 2184.8
+968.51849 1309.4
+969.01105 1167.6
+969.48541 1148.8
+976.51404 20666.1
+977.01563 24369.7
+977.51599 16703.5
+978.01886 5628.7
+978.51459 1639.0
+979.02673 805.5
+985.53143 844.5
+1020.03497 698.8
+1031.53870 3373.3
+1032.04053 5152.7
+1032.53674 2177.5
+1033.04175 1846.3
+1038.21411 605.7
+1040.54346 56073.8
+1041.04456 69238.2
+1041.54578 44694.6
+1042.04736 20914.9
+1042.54956 8885.2
+1043.05286 2277.8
+1179.57947 675.4
+1188.37366 1057.7
+1198.05896 3643.7
+1240.11108 700.6
+1304.71045 823.8
+1466.96790 603.8
+1493.18250 745.2
+1512.35706 701.5
+1879.56543 19145.0
+1880.15247 911.4
+1907.05444 7535.7
+1930.59937 1073.9
+S	1798	1798	537.8054671
+Z	4	2147.19057
+137.81496 572.3
+137.83696 536.5
+142.87791 613.2
+146.91554 645.1
+163.26311 536.8
+170.04478 631.7
+183.42355 557.2
+187.14388 1008.4
+188.25522 1106.2
+188.27501 2025.4
+188.29259 2246.5
+188.31442 1522.0
+188.32761 781.7
+188.35123 519.5
+191.78951 643.4
+199.05992 620.6
+199.15938 691.1
+199.17441 782.1
+199.24458 670.5
+199.25742 1122.1
+199.27284 2569.3
+199.28970 1098.8
+199.35570 1031.9
+199.37132 767.8
+209.91420 629.4
+217.89883 583.6
+230.03410 571.0
+232.17714 626.6
+233.16438 2782.1
+235.78027 596.3
+255.29314 599.9
+261.16049 907.8
+267.14844 974.6
+271.62366 561.9
+296.74081 733.2
+314.20630 1111.4
+350.26614 722.0
+355.37918 624.0
+362.20343 728.2
+388.54959 817.8
+388.68710 7492.7
+389.18814 3321.4
+412.37915 623.3
+422.22061 9983.2
+422.72165 5150.8
+423.22379 1067.0
+457.28146 924.3
+468.26282 1796.8
+475.00473 621.5
+482.72195 717.0
+482.97113 1170.4
+483.22156 1146.6
+496.78619 934.0
+498.24399 1516.5
+511.77808 1340.2
+519.61646 1174.4
+519.94482 795.3
+521.27600 1219.6
+525.28412 9071.3
+525.61902 12908.7
+525.95325 4775.9
+532.49298 1750.5
+556.34454 667.9
+558.30676 3444.8
+558.64191 4781.9
+558.97528 2963.3
+559.30908 890.2
+575.13782 554.6
+575.63013 1352.0
+578.97949 651.4
+581.81866 2385.3
+582.31525 3139.1
+582.79517 2671.9
+583.28253 614.2
+601.27850 787.9
+629.68384 4747.2
+630.01825 5718.3
+630.35321 4301.4
+630.68512 1050.4
+639.33356 734.6
+644.62982 890.0
+644.97107 675.1
+676.65662 1092.2
+678.33600 2332.0
+678.84064 1683.2
+682.37732 748.1
+738.89105 857.1
+776.36530 3459.4
+777.36914 645.8
+787.42383 12830.0
+787.92517 17412.4
+788.42615 9367.9
+788.92938 3223.4
+789.43207 802.9
+793.95093 609.0
+795.55280 1088.3
+836.96057 1788.5
+837.45764 2360.7
+837.96118 2451.5
+843.43304 3221.0
+844.43365 1697.6
+937.03369 689.4
+991.80170 681.3
+1057.28003 989.5
+1188.37781 791.2
+1198.09485 3581.0
+1204.35779 693.7
+1387.64514 716.7
+1525.43726 792.9
+1877.81592 659.2
+1878.12622 782.6
+1878.85999 839.4
+1879.16956 1654.9
+1879.57996 20071.0
+1879.98254 1592.8
+1880.28711 651.0
+1881.04285 892.0
+1888.16272 700.1
+1906.96497 7431.0
+1918.62207 927.2
+1930.64392 1225.3
+1957.80139 613.4
+S	1799	1799	666.8530746
+Z	4	2663.381
+177.38913 555.1
+188.24794 639.9
+188.25693 642.2
+188.26241 728.5
+188.27254 1057.3
+188.27560 1050.2
+188.28386 725.0
+188.29268 891.7
+188.30476 986.6
+188.31726 669.4
+193.57961 624.9
+195.47942 632.4
+199.17551 744.6
+199.21982 885.8
+199.24182 761.6
+199.26227 1572.8
+199.27307 2406.8
+199.28250 1393.3
+199.29533 1169.3
+214.25392 659.8
+234.03113 540.0
+246.15700 1020.8
+261.82425 600.0
+270.49591 551.2
+272.07965 607.2
+280.17340 843.3
+282.14514 781.0
+283.13968 11510.7
+284.14359 1927.4
+291.15546 2673.3
+291.65961 730.8
+318.45093 626.7
+328.61835 638.6
+329.15997 936.8
+329.86597 616.6
+342.27008 565.8
+346.17960 3801.8
+346.68146 1591.6
+347.20313 6649.5
+348.20740 898.4
+349.20410 618.3
+355.18292 1507.2
+361.78571 702.7
+398.21402 5030.4
+399.21667 1217.5
+414.21130 3217.9
+416.22327 1142.5
+417.20645 617.2
+423.21515 5191.9
+423.70682 10350.0
+424.20889 5629.9
+424.70996 2125.7
+428.52359 632.3
+432.22110 40460.7
+432.72256 24389.9
+433.22397 8983.5
+433.72571 1887.8
+434.23474 44517.9
+435.23801 9276.9
+436.24042 2024.9
+439.19736 768.3
+449.72516 728.2
+467.73907 3857.9
+468.24103 2110.1
+468.74280 1027.9
+493.00162 611.5
+528.63403 742.4
+532.43280 2062.9
+545.28119 2980.2
+546.28607 1374.9
+563.29156 4563.9
+564.29602 1459.7
+570.30359 1047.2
+570.63953 1763.4
+570.97211 1560.7
+576.30914 1262.6
+576.64215 2699.8
+576.97632 1143.9
+577.31299 1057.4
+580.25397 632.2
+581.30261 63067.4
+582.30573 26557.0
+583.30750 5934.4
+584.31213 903.1
+589.02863 587.1
+593.98322 1035.2
+594.32196 1785.2
+594.65491 996.2
+597.77075 566.2
+599.98608 5849.1
+600.32019 5664.2
+600.65448 4671.5
+600.99017 2004.7
+617.00366 1349.3
+617.33575 1308.3
+617.67334 1030.2
+623.30902 912.0
+630.39581 1086.5
+632.33710 2639.4
+632.67059 1458.0
+633.00488 2060.2
+639.67120 1291.2
+645.33917 6383.7
+645.67499 8931.2
+646.00732 5704.1
+646.34186 2106.0
+648.57733 683.7
+688.02496 929.5
+688.36377 2442.3
+688.69550 1251.9
+689.02405 1163.0
+691.34882 1151.7
+692.33051 1476.9
+694.03027 3883.3
+694.36627 10400.2
+694.69934 7703.6
+695.03137 3537.6
+695.37097 933.4
+709.36108 9237.3
+710.36597 4533.0
+711.37000 1516.2
+721.39404 1420.8
+721.89221 1279.1
+722.39630 1448.3
+731.71490 662.5
+734.72174 741.4
+737.04993 2469.8
+737.38208 3634.7
+737.71411 3286.7
+738.05414 1886.1
+738.38000 1066.1
+743.05328 25861.6
+743.38727 44328.0
+743.72174 45189.9
+744.05615 21124.5
+744.39111 8042.3
+744.72699 2640.4
+748.37695 1097.1
+749.35327 3300.0
+749.90460 926.8
+750.35718 1494.0
+756.05786 661.5
+757.72516 713.1
+766.38385 14189.1
+766.73370 2062.0
+767.06366 1350.9
+767.38568 6215.9
+768.38629 1648.4
+771.42865 562.0
+772.06451 1825.6
+772.39838 5122.8
+772.73444 4366.9
+773.06384 2367.4
+773.40479 957.7
+779.39447 926.8
+793.22943 544.0
+799.74310 1670.9
+800.07770 1982.4
+800.40680 985.4
+800.74158 1065.5
+806.44727 4749.5
+806.94708 4933.1
+807.44855 4690.0
+807.94073 1025.7
+815.43250 684.0
+822.40466 728.8
+823.75092 701.0
+824.09033 880.4
+829.47668 1738.4
+830.48010 1278.1
+833.42236 1042.4
+839.43042 751.0
+839.77344 746.0
+842.91748 1059.0
+843.41986 1470.3
+843.92035 913.9
+845.42889 762.1
+846.40546 737.4
+855.45337 1420.7
+856.45239 785.7
+863.43585 11190.7
+863.95758 21022.2
+864.45990 29893.3
+864.96014 18079.6
+865.46375 8254.2
+865.96106 2165.3
+866.46063 598.1
+873.73077 598.6
+881.97388 785.8
+885.47192 760.1
+885.98895 861.9
+886.47870 931.9
+886.97595 638.2
+890.47107 6137.7
+890.97162 8317.7
+891.06769 806.3
+891.47369 6726.3
+891.97479 3817.8
+892.47760 1203.9
+899.47607 110151.3
+899.97760 158495.0
+900.47809 113846.9
+900.97986 50247.8
+901.48102 14240.2
+901.98071 2870.2
+902.87549 660.6
+916.45532 1666.7
+916.95197 2874.7
+917.46277 1436.8
+917.95129 756.7
+967.48212 790.7
+968.00909 1623.9
+976.51324 7169.7
+977.01373 12539.4
+977.51440 10412.3
+978.01782 5072.4
+978.51392 1807.1
+1031.54846 801.7
+1032.04004 1050.3
+1032.54004 2131.0
+1033.03870 1312.7
+1040.54248 17814.6
+1041.04285 33442.1
+1041.54419 27602.7
+1042.04614 14018.2
+1042.54993 5240.2
+1043.04980 907.9
+1057.27100 825.8
+1112.82727 651.3
+1135.98572 690.8
+1197.97485 3284.4
+1305.70764 675.2
+1442.50781 665.0
+1710.29333 686.1
+1808.59546 738.8
+1872.73669 663.4
+1878.35742 1505.5
+1878.79626 997.5
+1879.21338 2270.2
+1879.57971 19351.5
+1879.95471 2899.3
+1880.77759 1277.9
+1882.05334 1102.8
+1907.04700 7589.3
+1930.57349 994.7
+S	1801	1801	666.1004496
+Z	4	2660.3705
+170.85439 6663.8
+171.63422 6612.8
+188.25040 7294.5
+188.26886 17185.8
+188.27998 22651.8
+188.30202 20522.1
+188.31244 14005.2
+188.32544 10177.2
+189.81760 6300.7
+199.18416 12898.0
+199.27164 9503.0
+199.28114 22284.8
+199.32298 9126.2
+199.34206 7477.0
+199.37915 12092.6
+214.53325 7869.3
+225.20215 6776.3
+230.02190 7498.1
+236.20247 5419.1
+246.15532 12468.5
+256.34637 8280.0
+283.13965 89724.6
+284.14401 11662.5
+291.15567 23007.3
+296.68384 6653.3
+323.27222 7913.5
+331.30154 5832.8
+346.17929 38823.2
+346.68146 14748.8
+347.20306 58993.7
+348.20706 9816.9
+355.18576 11967.6
+370.00201 7086.9
+388.38513 6717.6
+391.55896 7434.6
+398.21353 32887.8
+405.69736 9064.1
+406.23889 8356.0
+412.28979 6691.0
+414.21042 18867.6
+416.22708 13790.9
+423.21606 32979.8
+423.70688 88066.2
+424.20856 39490.2
+432.22110 352403.2
+432.72272 165913.3
+433.22314 59873.4
+433.72653 10675.5
+434.23474 373606.9
+435.23825 69060.5
+435.86267 7121.0
+436.23868 14290.9
+467.73880 24780.7
+468.24265 10699.1
+516.27179 14691.8
+528.96802 6921.0
+532.46545 21613.5
+545.28052 17080.7
+546.28156 7526.6
+549.23029 7331.2
+563.29218 27497.0
+570.30676 10977.7
+570.63812 12780.0
+576.30518 21369.3
+576.63885 16364.7
+581.30249 576483.9
+582.30560 185902.7
+583.30737 34853.4
+593.97803 12049.2
+594.31824 21410.6
+599.98608 48101.3
+600.31934 51207.3
+600.65442 35026.6
+617.33282 16119.9
+632.33582 16261.5
+633.00397 15986.2
+639.67383 10549.1
+643.86285 9058.8
+645.34100 44638.7
+645.67511 84177.3
+646.01068 55777.6
+646.34802 15072.0
+648.07141 7649.3
+667.07196 7679.7
+676.66174 10026.4
+688.02979 7993.4
+688.36053 16830.2
+688.68677 13707.3
+694.03076 49617.2
+694.36627 57114.5
+694.69983 34918.7
+695.03271 18898.4
+709.36169 91984.3
+710.36340 45640.2
+721.39606 9930.7
+721.89209 11555.8
+734.04993 7914.8
+737.04834 15438.7
+737.38501 37310.5
+737.71588 24130.7
+738.04974 12815.7
+743.05334 264869.6
+743.38782 378465.3
+743.72247 253272.5
+744.05664 122175.8
+744.39221 54481.4
+748.36926 11437.9
+749.35059 22587.8
+750.36322 13049.8
+760.37982 9048.3
+766.38318 114570.3
+766.72437 16427.5
+767.06506 10483.5
+767.38617 59430.6
+768.39844 8786.8
+772.06458 26883.9
+772.40015 30361.8
+772.73218 21988.9
+799.75513 10378.8
+800.07507 15892.9
+806.44641 47426.4
+806.94604 52147.2
+807.44763 30439.9
+807.90826 6627.9
+823.42316 8677.0
+823.75989 8922.4
+824.08801 10955.5
+829.47150 15613.2
+842.91608 8693.9
+843.42255 7169.7
+843.92584 12413.9
+845.43024 12957.5
+846.40881 9630.4
+854.94470 9525.8
+863.43500 110745.1
+863.95837 203300.5
+864.46057 248031.0
+864.96075 124491.4
+865.46350 45901.8
+865.96240 11435.3
+882.46173 10731.0
+885.47607 13547.8
+885.98438 12943.3
+886.47260 7377.8
+890.47131 50441.8
+890.97186 97057.5
+891.24127 7695.9
+891.47229 49670.1
+891.97424 25556.2
+897.14978 10760.1
+898.56268 10902.5
+899.47614 1132491.1
+899.97760 1307186.1
+900.47839 725777.1
+900.98010 246078.1
+901.48145 67441.1
+902.82404 8143.7
+903.87671 6664.4
+916.45667 19886.7
+916.95807 15038.7
+917.45514 7496.8
+944.72974 8054.0
+968.02112 10085.8
+976.51215 78580.3
+977.01501 98342.3
+977.51666 64179.5
+978.01581 15385.5
+1019.98199 7120.0
+1031.32556 7447.8
+1031.53699 12768.1
+1032.03955 11555.8
+1032.54297 10670.3
+1040.54224 209483.9
+1041.04382 314762.2
+1041.54492 178148.7
+1042.04810 60938.0
+1042.54565 18339.2
+1043.04346 6914.3
+1139.89807 8733.4
+1188.18579 8856.9
+1198.04114 33853.5
+1217.07434 7365.5
+1256.28760 7636.3
+1259.10352 7306.4
+1525.55554 9826.5
+1535.21375 6471.3
+1825.47693 7456.7
+1825.54980 7405.1
+1862.09058 7076.5
+1875.55530 7591.4
+1877.04333 7240.8
+1878.85327 16241.6
+1879.21997 29444.6
+1879.59729 209983.5
+1879.97839 26841.1
+1880.34473 10106.6
+1882.86023 8767.4
+1907.04541 81914.5
+1918.74329 7325.1
+1930.79224 9652.2
+S	1802	1802	666.8528246
+Z	4	2663.38
+171.51175 10150.1
+183.35461 12686.7
+188.21524 11587.6
+188.24966 11713.6
+188.25697 18785.4
+188.27014 12083.0
+188.28069 14950.3
+188.29355 10665.3
+188.31609 16523.4
+188.33302 13481.8
+188.35077 10207.1
+188.36868 16086.7
+193.93094 10097.4
+198.41219 10803.4
+198.88972 15116.7
+199.18047 20416.4
+199.20743 13062.9
+199.25301 20938.9
+199.27026 40377.5
+199.27902 20950.5
+199.29059 15023.9
+199.30881 14302.5
+199.31795 14176.3
+199.36794 16511.9
+229.78171 11699.1
+249.59200 11803.7
+253.39914 10806.5
+271.76526 13445.0
+283.13937 88600.2
+291.15469 26736.1
+329.85205 12044.5
+332.91455 12126.7
+342.28415 12761.2
+346.17920 45075.5
+347.20200 64305.8
+352.30417 13174.7
+361.52338 11537.0
+368.61432 11969.6
+372.67926 11542.9
+381.37421 19479.8
+398.21295 29668.1
+405.69626 17021.0
+409.34940 12332.8
+414.21027 24287.9
+423.21768 42168.6
+423.70673 73542.8
+424.20761 43189.6
+432.22092 438111.8
+432.72253 166708.0
+433.22104 33747.6
+434.23462 405649.2
+435.23853 68900.1
+467.73969 39196.1
+469.09845 12427.9
+472.27380 10669.1
+528.96625 13332.2
+532.46863 36394.6
+545.28137 17041.3
+563.29181 26410.0
+568.49451 11147.4
+575.04419 15896.5
+576.30743 19996.1
+576.64392 21812.1
+581.30243 556851.4
+582.30536 170940.5
+582.42719 10717.5
+583.30878 26427.3
+594.64398 12384.3
+599.98700 64137.6
+600.32037 75142.4
+600.65338 29690.2
+600.99249 15364.0
+605.01617 10525.0
+617.00269 14260.5
+617.33319 16138.6
+630.42780 14679.8
+633.00195 20870.5
+645.33923 49309.9
+645.67749 51589.1
+646.00879 27301.5
+648.33319 15947.7
+659.33301 10983.3
+676.63000 24611.7
+688.36121 21575.0
+688.71222 14496.8
+688.75201 12885.5
+694.03247 43572.0
+694.36615 51890.2
+694.69904 42293.8
+709.35950 83101.0
+710.36322 30555.5
+737.05164 30707.5
+737.38116 36928.6
+737.71826 24822.8
+743.05334 345135.5
+743.38788 477548.6
+743.72217 225484.1
+744.05737 98505.4
+744.39087 25700.2
+749.35004 17075.5
+766.06012 32426.9
+766.38324 135318.6
+766.73120 17959.3
+767.38190 47224.9
+772.06641 33772.5
+772.39929 31452.8
+772.74036 14059.0
+785.47595 16077.4
+795.55975 17687.9
+800.07721 20460.5
+806.08887 13726.2
+806.44403 52704.1
+806.94641 44431.6
+807.40448 10501.0
+809.93231 13771.0
+834.93628 11818.9
+855.44543 15903.1
+863.43573 102097.1
+863.95831 226308.6
+864.46045 231486.9
+864.96143 102045.3
+865.46301 30109.6
+881.96069 14548.9
+890.47040 60939.4
+890.97052 72876.3
+891.47180 31029.8
+897.12567 14226.4
+899.47601 1298577.9
+899.97736 1301956.3
+900.47827 660824.6
+900.98071 216842.7
+901.48254 46832.9
+902.33124 11952.6
+916.45892 26491.2
+916.96368 13656.1
+917.45679 15936.3
+942.22748 10678.4
+976.51294 73903.6
+977.01257 96452.1
+977.50983 40496.5
+978.01965 17999.5
+1021.20093 13322.4
+1032.04114 18164.5
+1040.54358 248411.3
+1041.04382 285964.0
+1041.54590 167149.9
+1042.04785 46306.3
+1042.54053 21255.1
+1098.22681 12638.9
+1175.08789 10795.8
+1182.08154 12190.9
+1188.21179 13568.8
+1198.04724 68229.5
+1300.39148 14545.8
+1349.07080 11665.7
+1403.46875 10358.8
+1878.56873 16752.8
+1878.85010 23993.0
+1879.15002 21863.2
+1879.49780 364161.3
+1880.10950 26226.0
+1906.92456 126264.2
+1907.24353 28789.6
+1927.74451 12628.0
+1930.65967 16084.7
+S	1803	1803	1879.9728246
+Z	2	3758.098
+Z	3	5636.643
+532.48676 2137.3
+549.17590 792.6
+627.79364 624.4
+630.44000 740.0
+669.09521 546.8
+676.64246 1009.4
+765.14063 694.8
+795.56293 1138.3
+827.78833 729.4
+988.97736 732.7
+1026.73853 717.3
+1079.09351 610.5
+1153.03381 658.4
+1198.08691 3386.4
+1200.71704 721.9
+1354.98425 733.9
+1877.05176 789.7
+1879.53333 18817.6
+1880.05103 1805.9
+1906.85645 7638.7
+1907.27380 906.2
+1918.73169 804.8
+1930.69934 1275.3
+1950.09485 586.9
+S	1805	1805	666.0999621
+Z	4	2660.36855
+171.51157 573.8
+181.04124 512.7
+181.04628 520.1
+188.20667 671.1
+188.21806 716.3
+188.23926 740.5
+188.25922 990.6
+188.27452 890.5
+188.31146 673.4
+188.32220 608.9
+188.33356 706.3
+188.34846 783.1
+190.88548 516.5
+191.69389 751.8
+198.89713 982.0
+199.19034 1147.1
+199.20540 612.4
+199.25063 795.2
+199.27425 846.8
+199.28699 2454.6
+199.29994 746.6
+199.35645 607.9
+199.38551 1128.4
+224.62390 633.5
+264.16959 848.5
+272.03922 640.0
+278.78885 603.9
+281.98956 620.8
+282.18039 1023.3
+282.35574 572.6
+283.14023 1908.2
+306.54318 562.7
+308.91855 676.3
+347.20032 731.0
+367.26904 842.5
+374.58212 728.5
+397.19046 593.1
+398.21298 917.1
+408.28906 496.6
+414.21097 777.0
+423.21796 1045.5
+423.70572 1147.6
+427.58084 724.4
+432.22110 5756.6
+432.72247 3970.1
+433.22293 993.9
+434.23422 5641.8
+435.23886 1283.3
+445.98508 622.4
+458.29663 2199.9
+480.32233 731.6
+482.03384 610.2
+482.67487 934.5
+490.27878 4077.9
+491.28552 677.6
+507.41949 695.4
+518.47461 573.3
+522.52032 663.1
+523.35870 1096.7
+523.79999 1470.6
+524.30164 681.9
+532.48199 1825.5
+559.32074 850.3
+559.83130 752.5
+563.29340 1070.1
+576.97516 783.5
+581.30310 8892.6
+582.30750 3397.2
+583.30627 919.0
+594.41754 633.9
+594.79877 743.9
+599.35254 631.8
+600.31964 834.5
+600.65991 770.2
+603.80072 911.4
+607.84808 5590.9
+608.34943 3475.9
+608.84283 1568.6
+630.45166 788.7
+645.67737 1082.2
+646.00897 1269.7
+646.37030 730.7
+646.88348 831.3
+655.97839 627.4
+676.65759 612.2
+688.02478 605.1
+694.69403 1556.0
+704.37506 2016.0
+709.36267 1201.7
+715.43225 1036.2
+727.40894 1883.0
+737.05878 730.3
+737.38531 1439.4
+743.05505 2614.6
+743.38715 7858.0
+743.72253 7723.4
+744.05511 2881.3
+766.38531 1854.7
+767.39343 973.2
+772.73480 1436.0
+795.58435 1332.4
+805.42230 5275.7
+806.42334 2110.1
+822.47388 657.9
+838.49933 1931.6
+839.51141 1098.8
+845.42560 712.7
+860.98303 644.2
+863.43695 1947.9
+863.95758 2328.2
+864.46027 4452.3
+864.96326 3950.7
+877.48712 1473.0
+878.49725 2451.1
+879.49695 1444.1
+890.00610 747.1
+890.96924 1085.4
+891.46863 1077.4
+892.44684 805.7
+899.47644 16092.8
+899.97748 25631.3
+900.47894 21002.1
+900.98022 6660.2
+909.43964 1049.3
+933.51764 3332.8
+934.52197 1629.9
+977.01184 2404.6
+977.51129 1868.3
+995.87451 646.7
+1021.19586 640.5
+1040.54517 2137.1
+1041.04395 4864.9
+1041.54541 4508.5
+1042.04675 2102.8
+1046.59485 2342.1
+1047.61096 794.9
+1052.24438 641.3
+1054.52844 1175.0
+1055.54395 837.1
+1117.61719 777.6
+1198.07629 2888.5
+1306.40955 707.1
+1725.90259 565.5
+1860.05652 593.6
+1876.54077 881.2
+1878.20801 982.8
+1879.06189 1632.3
+1879.32117 4744.2
+1879.59448 18271.9
+1880.56787 1192.7
+1881.83813 720.3
+1907.05994 7662.2
+S	1806	1806	1879.9415746
+Z	2	3758.035
+Z	3	5636.55
+532.51117 1941.4
+624.17560 662.5
+630.40637 656.3
+676.65179 1235.1
+731.12811 770.8
+788.25922 591.7
+790.01288 573.6
+795.56763 822.5
+802.88605 558.6
+1022.01410 679.6
+1198.14160 3039.0
+1519.93311 751.8
+1636.62866 569.0
+1876.63940 688.3
+1878.35632 1244.0
+1878.80774 1458.0
+1879.31226 3665.8
+1879.56067 18927.5
+1879.98926 1928.7
+1880.35156 1292.0
+1880.91797 1215.6
+1881.49377 746.6
+1907.05066 7455.9
+1918.72290 862.5
+S	1807	1807	666.8528246
+Z	4	2663.38
+179.75284 7197.1
+188.26929 11509.4
+188.27788 11162.7
+188.28941 12628.3
+188.29826 14800.4
+190.97305 8146.8
+191.58435 9268.8
+199.20886 10103.6
+199.24150 9955.6
+199.25809 12824.2
+199.27052 19774.1
+199.28178 30978.8
+199.29771 17553.2
+199.38071 17411.8
+201.74753 7791.5
+223.50777 9148.0
+247.25587 8478.4
+249.60616 8580.9
+265.03400 9301.7
+267.20367 8572.4
+269.81937 10240.4
+271.77841 12968.4
+283.13882 12637.8
+295.65860 8112.5
+326.53442 8904.0
+352.63339 7489.2
+381.38837 7573.7
+400.67502 7492.0
+401.73718 7965.6
+404.57516 8212.3
+412.21948 13671.6
+432.22031 24678.6
+434.23468 30327.4
+458.29617 15769.1
+460.82095 7624.7
+532.49316 10379.7
+532.52924 25474.4
+539.13806 8769.3
+552.28107 29951.2
+561.28644 335739.6
+561.78851 141426.8
+581.30115 49386.8
+608.84698 9998.9
+663.97504 9080.6
+664.45410 8457.4
+676.64246 11916.6
+710.35754 63617.5
+711.36145 12055.1
+743.05237 27195.8
+743.38306 16521.2
+743.72180 15615.8
+744.05701 11625.4
+775.35883 9506.5
+795.57672 10816.4
+820.70502 8732.9
+863.96411 15600.7
+898.01263 8726.2
+899.47510 103018.2
+899.97699 88873.5
+900.48041 48273.2
+900.98425 18792.0
+1040.54077 15906.6
+1041.05432 11325.3
+1042.10864 8730.1
+1121.56543 26359.1
+1198.19092 46230.5
+1203.87317 9316.7
+1439.37280 8646.8
+1495.15063 7917.3
+1525.71887 8744.5
+1564.33154 9787.7
+1648.56360 9158.2
+1777.34314 10244.6
+1879.06995 24512.8
+1879.53784 270342.1
+1880.01038 20981.5
+1885.52551 8825.7
+1907.04138 106264.4
+1907.49841 11001.0
+1924.90466 8582.7
+1930.74060 15539.3
+S	1809	1809	561.7973246
+Z	2	1121.579
+157.60719 655.4
+165.77165 631.7
+175.57137 538.8
+182.78767 909.4
+187.40225 470.0
+188.24449 715.2
+188.26375 1652.4
+188.28185 2061.7
+188.29236 2082.2
+188.30940 1652.7
+188.31868 1383.2
+188.36400 958.8
+198.89629 740.1
+199.21297 785.9
+199.25447 1253.0
+199.26909 1418.3
+199.27956 2168.8
+199.30156 945.0
+199.37633 1391.5
+200.34494 655.4
+218.47806 570.5
+228.20236 605.5
+233.58067 564.3
+235.11934 523.2
+249.21274 618.2
+271.37689 619.9
+281.12399 2482.0
+296.19736 649.5
+299.13409 5808.6
+300.13690 688.1
+308.91199 929.8
+326.14389 560.0
+347.20206 2130.7
+348.20676 833.6
+355.68201 2772.6
+356.18216 1392.3
+367.19778 900.0
+380.85010 640.3
+384.22348 8293.1
+385.22672 1335.1
+395.19098 2263.4
+412.21805 5612.2
+413.22183 714.4
+421.07718 609.5
+427.55426 869.7
+429.28500 2339.9
+430.28751 739.8
+443.22446 782.1
+453.25592 568.7
+454.23581 494.1
+457.28397 1359.6
+460.73981 680.4
+469.24545 3322.8
+469.74622 1100.5
+472.92422 3138.4
+473.25742 3592.6
+473.59158 1766.7
+473.92377 602.3
+476.24484 2415.1
+477.24261 670.6
+482.66580 605.1
+492.11856 696.3
+503.75565 2103.9
+504.25940 935.9
+508.74594 1608.0
+509.24753 1013.3
+510.61850 1038.6
+510.95096 1460.3
+512.76099 3990.2
+513.26141 1573.9
+517.75342 7664.9
+518.25360 3240.1
+518.75140 1001.0
+528.35278 2173.1
+529.35461 814.0
+531.27832 2078.9
+531.61279 3631.5
+531.94525 2428.5
+532.27893 793.3
+532.52014 1928.2
+543.27576 1994.6
+543.77478 1391.1
+544.19177 576.4
+549.16547 791.3
+559.93237 753.2
+561.72583 777.0
+580.91571 616.8
+610.81940 2911.9
+611.32294 3793.6
+611.81799 1016.2
+612.32397 680.4
+613.30426 2314.5
+614.29523 790.1
+630.43427 652.8
+646.32825 978.7
+653.25977 607.9
+679.61444 583.9
+692.34595 706.4
+710.35583 52267.7
+711.35944 17307.7
+712.35950 2756.2
+775.36377 958.4
+777.72479 621.3
+795.57977 846.7
+823.44055 3339.9
+824.44238 1132.3
+850.60999 550.2
+937.48212 2569.7
+938.48151 826.4
+1016.48175 630.8
+1031.81543 620.6
+1034.50232 927.6
+1035.47754 816.5
+1057.22803 885.7
+1102.66650 640.3
+1164.04956 601.9
+1198.16187 3290.1
+1220.45618 607.2
+1223.16711 578.4
+1393.90442 582.2
+1525.45508 919.9
+1813.23999 776.4
+1853.62329 702.0
+1869.94482 738.8
+1878.66724 941.3
+1879.00781 822.3
+1879.51892 20255.2
+1880.34082 1104.8
+1907.00830 7346.1
+1918.65442 724.9
+1930.65491 855.6
+S	1810	1810	562.2983246
+Z	2	1122.581
+142.01901 3476.5
+146.17415 3402.5
+158.21922 4034.6
+165.78220 3029.1
+169.50294 3256.9
+171.71306 3446.6
+173.72156 2912.9
+188.24796 5375.6
+188.26933 11726.9
+188.29305 13913.9
+188.31898 8035.5
+188.33920 3788.3
+196.14453 17159.8
+198.89177 5683.9
+199.21619 4677.2
+199.24086 8687.9
+199.25261 9576.1
+199.26204 6784.7
+199.27805 12528.5
+199.29276 6567.6
+199.30774 7159.4
+199.37613 4853.9
+199.38197 4102.6
+199.40453 4156.5
+202.04228 3287.0
+224.25096 3296.9
+226.08098 3570.4
+237.67078 3040.0
+243.97687 3492.7
+255.29984 4601.8
+262.08789 3337.3
+266.08456 3384.0
+279.53979 3811.6
+280.19241 3779.3
+284.64359 3700.2
+295.17648 5164.6
+299.13367 8139.0
+305.94336 3564.4
+308.91547 4830.1
+342.28568 3477.5
+347.20544 4638.1
+349.15057 3640.9
+350.28101 4161.6
+384.22296 12587.7
+386.23395 3961.3
+391.35480 3110.1
+412.21973 7199.2
+419.49261 3510.2
+423.34451 3387.6
+424.21832 19845.2
+427.56659 4501.1
+430.90848 3397.0
+440.26834 3625.7
+443.20233 4858.2
+454.89407 3505.2
+460.30609 5390.3
+469.22363 3124.1
+472.87662 3906.6
+504.25674 5130.0
+517.75378 15254.9
+518.25391 10503.4
+518.71533 4666.4
+518.75250 4277.8
+532.52148 10480.0
+537.30249 8040.0
+549.18182 4840.8
+559.93372 6050.5
+561.22742 8653.0
+572.87097 3721.2
+588.36737 11397.6
+595.40283 3149.0
+611.26520 3644.6
+673.74310 4204.0
+676.63965 5907.5
+701.45313 16325.3
+702.46210 6501.3
+706.31012 3514.0
+710.35638 77973.1
+711.35895 38792.9
+712.36060 9014.5
+731.15833 3826.9
+734.38281 6724.6
+735.38232 4934.0
+769.60468 3553.8
+770.92218 3810.5
+795.55664 4866.0
+823.44189 7010.7
+830.50006 9766.4
+847.46344 14713.2
+847.65637 3713.5
+848.46198 5660.7
+863.63806 3388.6
+865.46796 5818.5
+901.53314 47398.9
+902.53571 20111.8
+967.13953 3547.8
+978.55750 17166.4
+1034.35754 3446.4
+1057.23828 5925.7
+1169.35571 3368.2
+1188.06079 3975.5
+1198.16577 20031.3
+1248.65002 3681.1
+1390.05872 4275.6
+1442.01843 3958.8
+1466.33936 4676.3
+1584.88428 3472.1
+1777.13770 6185.2
+1832.41455 3926.9
+1869.92627 5207.9
+1878.48022 4144.6
+1879.10657 12239.2
+1879.53186 123480.8
+1879.76904 9519.9
+1879.96875 11860.8
+1892.97107 3419.9
+1907.04834 47427.3
+1907.44043 4772.5
+1918.67749 5652.5
+1930.65930 6958.1
+S	1811	1811	572.3513246
+Z	2	1142.687
+183.31264 56757.3
+184.06067 59760.3
+188.25682 83793.9
+188.26993 87585.6
+188.28360 99838.6
+188.29477 123492.3
+188.30136 87346.3
+188.31261 91325.9
+190.98436 58928.0
+196.14417 589128.3
+197.14703 106879.0
+198.89021 73922.8
+199.15837 64827.9
+199.17204 83220.9
+199.23032 65615.8
+199.24072 70143.8
+199.25198 77423.6
+199.26988 170882.1
+199.27911 135425.7
+199.29147 118455.9
+199.31178 58042.9
+199.33498 74128.9
+199.34538 75965.8
+201.08661 450511.4
+205.49617 67325.5
+214.15479 145544.9
+224.13890 262171.4
+233.52148 62640.8
+238.71556 60301.4
+260.19629 206215.7
+271.62195 61338.1
+271.77335 62284.1
+295.17612 198338.5
+296.15970 184615.5
+312.23206 51603.0
+314.16962 269552.3
+324.05865 62877.9
+373.27866 97209.8
+397.20615 104169.5
+424.21878 766338.4
+425.20224 1456030.4
+426.20486 269047.8
+437.43427 60250.3
+442.23056 135403.1
+444.41986 53760.9
+447.04636 66506.9
+451.26788 175911.9
+460.31180 775244.4
+461.31641 143905.7
+485.06046 51357.3
+492.28049 132800.4
+493.98441 60879.0
+510.29129 358937.2
+520.27014 68473.1
+531.34888 417546.2
+532.29218 65425.1
+532.35193 116649.6
+532.52008 218777.0
+537.30182 655265.8
+538.28394 824164.9
+539.28906 208868.0
+549.21826 50629.3
+552.29395 54942.5
+553.82928 537966.6
+554.32928 275168.6
+555.30957 161704.5
+561.72186 49090.0
+571.02454 66413.7
+579.84473 62219.6
+588.36969 2678890.8
+589.37280 668312.5
+594.32318 93104.8
+595.30505 220834.9
+665.35699 169918.1
+666.33795 137002.5
+667.34723 70654.1
+676.66974 99736.5
+701.45374 3404477.5
+702.45703 1116978.9
+734.38519 248874.7
+735.39227 74203.2
+737.53888 49289.8
+748.91254 77438.4
+752.39105 156951.9
+795.54834 89334.3
+830.49591 901320.4
+831.50305 397498.0
+847.46448 474187.8
+848.46228 179848.2
+865.47675 531044.7
+866.48267 179489.0
+901.53320 3617907.3
+902.53601 1634414.0
+903.53986 190805.7
+904.57263 62433.1
+908.23938 52737.4
+978.56085 929032.4
+979.55847 553228.4
+980.32672 58577.8
+980.55688 156143.4
+996.56726 122923.7
+997.56915 89224.4
+1019.72992 77976.9
+1057.29053 69110.0
+1198.16541 327805.4
+1271.56104 60891.2
+1330.47266 60990.5
+1363.10217 53688.4
+1511.13293 58619.7
+1536.22571 59519.8
+1620.94702 79341.4
+1869.91870 87446.0
+1877.08813 69772.0
+1877.57898 64836.8
+1878.70325 106890.1
+1879.18701 167522.3
+1879.60779 1922045.0
+1880.04822 200996.4
+1880.50439 74914.7
+1882.03308 71157.9
+1907.11499 722499.3
+1930.53894 82752.0
+1988.85339 57063.1
+1992.89417 53848.6
+S	1813	1813	567.8258246
+Z	3	1700.202
+Z	2	1133.804
+147.05754 1120.9
+165.77879 974.4
+169.13368 1009.4
+172.05418 977.2
+177.45296 876.8
+187.14476 5651.3
+188.20601 795.4
+188.24315 806.7
+188.26015 1224.7
+188.27126 1139.2
+188.30225 1078.7
+188.31615 1015.5
+188.32866 1597.2
+188.34700 1772.3
+188.37640 897.5
+193.32675 871.6
+197.12892 3451.5
+199.17143 917.3
+199.17908 1380.8
+199.19992 1345.4
+199.25212 1036.9
+199.26813 3113.6
+199.27834 3423.0
+199.28955 1996.8
+199.30630 1442.3
+199.32800 1077.8
+199.38568 1585.1
+205.69293 938.5
+215.13942 3033.7
+216.27209 1009.6
+233.16559 44043.6
+234.16876 8440.0
+235.11923 1105.5
+241.19186 1093.1
+253.77695 871.5
+255.20648 1172.3
+261.16052 8935.9
+263.97003 958.5
+266.60361 872.9
+268.20221 1063.7
+269.18747 1469.3
+270.14682 1168.4
+270.24106 893.9
+270.96921 1019.3
+277.11990 1188.0
+281.12527 9271.3
+282.12802 1130.1
+283.06378 977.8
+287.21213 2182.1
+291.63007 871.0
+296.19791 10325.6
+297.15729 1776.7
+297.20148 1558.1
+299.13593 22073.9
+300.14029 3208.9
+302.36029 1017.8
+307.15738 2628.6
+307.65649 939.0
+314.20862 5661.2
+315.20761 2899.7
+316.17288 1131.7
+317.18771 999.8
+318.18149 1661.0
+325.15219 1179.2
+344.19806 27515.0
+345.20160 5598.4
+345.77902 1112.0
+346.20389 967.4
+346.67630 1239.0
+347.13504 762.9
+347.20477 15465.3
+348.20798 2222.3
+350.29269 1031.7
+354.57126 1031.3
+355.68378 18480.2
+356.18481 7621.1
+356.83688 915.8
+360.23141 1506.9
+362.20862 22687.1
+363.21222 5518.4
+364.21603 1157.6
+364.26001 1169.1
+365.32083 1037.6
+367.19946 3504.8
+372.19583 868.8
+374.52875 2884.1
+374.86432 2124.3
+382.27090 5168.3
+383.27402 2057.0
+384.22507 30904.8
+385.22833 7715.4
+394.20895 3945.2
+395.19360 16373.3
+396.19846 3458.8
+398.24564 3055.6
+399.17630 857.8
+405.26318 853.0
+407.55099 3117.2
+407.88879 2166.1
+408.21979 1315.4
+409.28061 1911.8
+412.22018 37290.3
+412.26022 3150.6
+412.72632 1374.6
+413.22412 8723.5
+413.26501 1421.0
+414.22220 1010.9
+415.27097 2324.2
+416.25555 3839.7
+421.18365 1584.3
+427.29526 1704.0
+427.55444 1388.1
+428.29147 2670.1
+429.28693 19375.5
+430.28976 5212.7
+433.28192 2253.9
+435.19955 2669.6
+439.44772 1010.7
+443.26663 28882.7
+444.27039 9209.7
+447.29745 6783.6
+448.30167 2233.0
+457.28232 47763.1
+458.23767 4467.0
+458.28516 19477.9
+459.23758 820.6
+459.28894 3356.3
+460.73233 1910.9
+461.27719 16150.4
+462.28049 6069.5
+464.76343 866.0
+466.26324 1377.3
+469.24731 20394.7
+469.74927 11497.8
+470.24988 3691.9
+471.26089 2129.7
+472.92584 21691.6
+473.21866 808.2
+473.25998 22276.7
+473.59436 14180.6
+473.92822 4147.1
+474.23944 1029.6
+475.29254 24499.1
+476.24774 29166.5
+476.29608 7610.4
+477.25085 6884.8
+477.29929 1503.3
+478.24707 923.9
+478.92886 9947.2
+479.26398 11996.1
+479.59702 5546.8
+479.93173 1373.6
+481.27795 4069.7
+482.66635 1002.9
+483.29553 3878.9
+484.16873 971.5
+484.34369 881.2
+494.26160 3281.1
+495.24023 1135.9
+495.26804 1106.3
+495.74677 1255.7
+501.20508 902.2
+501.34396 3285.7
+503.75797 22252.5
+504.25998 12529.6
+504.75992 3599.9
+508.75012 17643.0
+509.25299 10174.7
+509.75226 3174.3
+510.26569 1581.8
+510.62027 12081.9
+510.95490 13298.5
+511.28876 17565.7
+511.32928 17749.1
+511.62006 1276.5
+512.29272 3163.7
+512.33228 6223.6
+512.76306 40658.6
+513.26459 24919.8
+513.76605 9167.2
+514.26685 2663.9
+517.75507 54828.6
+518.22028 1925.7
+518.25867 28251.6
+518.75787 10547.8
+519.26166 1730.7
+519.94885 1628.9
+520.28564 2744.8
+520.62134 2717.3
+528.35535 22383.4
+529.33496 7004.3
+529.36346 5261.2
+530.34076 2532.2
+531.27972 19355.3
+531.61456 22422.7
+531.94788 12055.7
+532.28149 4443.5
+532.51587 3375.9
+532.61768 1611.0
+534.76508 1850.1
+535.26208 2131.3
+537.30676 1148.8
+549.16840 1054.9
+556.34827 2068.6
+557.35291 1234.6
+559.64081 1151.7
+559.97430 1821.4
+560.30896 1377.2
+561.28955 14402.9
+561.79010 12900.8
+562.29260 6905.1
+565.64685 33648.5
+565.98083 49680.3
+566.31494 34653.6
+566.64923 18736.6
+566.98401 4016.8
+567.31726 1493.4
+571.84363 34963.1
+572.34521 19246.5
+572.84613 5846.3
+574.36084 113461.2
+575.36420 62402.5
+576.36749 16880.8
+577.30865 1121.1
+577.36780 2885.9
+578.26740 1162.5
+588.37244 14213.2
+589.37427 2374.9
+591.30933 1146.0
+593.80902 1747.2
+594.32697 1839.0
+595.31256 1297.6
+596.27576 1209.0
+601.29919 1410.8
+601.81866 18842.8
+602.31531 16017.1
+602.81470 9593.3
+603.31494 2596.2
+608.34491 1254.9
+609.73035 1175.1
+610.03241 2401.0
+610.55145 1438.5
+610.82361 484507.1
+610.89734 1398.0
+611.25909 1592.4
+611.32471 391499.9
+611.61029 2927.2
+611.82605 175954.8
+612.11597 2354.0
+612.26715 1227.0
+612.32751 53926.3
+612.42389 2327.1
+612.62073 1147.0
+612.82843 11376.1
+612.93610 1121.4
+613.30585 45896.9
+614.30951 15735.3
+615.31378 2883.6
+615.81335 1057.4
+618.33636 1698.5
+624.37109 2381.5
+628.32404 2171.6
+629.30103 2586.1
+630.30573 1054.7
+632.31555 5092.2
+636.78796 994.0
+646.33154 11151.2
+647.33386 4782.4
+648.32135 1992.7
+650.32635 10396.5
+651.32983 2540.6
+652.32928 1136.9
+658.29163 1633.4
+660.30243 1102.9
+662.31207 1077.2
+665.36713 1447.6
+666.33264 5305.8
+667.36603 130135.8
+667.86731 116697.3
+668.36859 56125.1
+668.87024 19661.7
+669.37305 4153.6
+671.41473 1452.4
+674.33929 1516.5
+675.32068 2816.2
+676.30328 1394.5
+676.60974 1407.2
+690.38055 2925.9
+692.34845 17232.6
+693.32886 10574.2
+694.33252 3881.3
+695.87982 1768.9
+700.36987 1107.5
+700.87360 1652.6
+701.45721 9530.7
+702.46008 2427.1
+703.45825 994.3
+707.41119 5215.3
+707.73529 1339.3
+708.36877 4589.0
+708.55621 1434.7
+708.88452 9478.4
+709.37793 18494.4
+709.59814 1474.1
+709.70386 1591.4
+709.88171 12697.4
+710.02765 2031.6
+710.08191 1914.2
+710.14783 953.6
+710.16858 1161.7
+710.27716 3638.4
+710.35925 958863.1
+710.46661 2549.8
+710.88721 2409.0
+711.28888 2770.6
+711.36151 366062.9
+711.93933 1231.5
+712.36407 80524.4
+713.36646 15076.5
+714.37152 3965.6
+715.33069 1020.0
+715.86438 4471.9
+716.35840 3866.9
+716.88074 6437.5
+717.38336 5560.9
+717.69275 2144.2
+717.71912 1325.7
+717.89038 1015557.9
+718.03790 2168.9
+718.19482 1175.8
+718.39038 1022787.8
+718.47314 4626.2
+718.55786 1937.5
+718.61322 1527.9
+718.69592 1866.0
+718.74469 2126.2
+718.79932 2107.2
+718.89099 547950.2
+718.98596 2313.0
+719.03406 1792.9
+719.05652 1617.4
+719.09991 1396.1
+719.39270 209779.5
+719.89410 57315.8
+720.03711 1287.2
+720.39636 14329.9
+720.77319 1277.0
+720.87750 2149.7
+720.93182 2321.5
+722.88177 5322.2
+723.38196 5294.1
+723.87915 3157.8
+724.38867 1168.4
+725.42090 11932.3
+726.32953 1302.1
+726.41986 5287.9
+726.83282 1303.0
+727.41986 1009.2
+729.37366 1192.7
+731.14886 1287.6
+731.34949 1568.8
+734.38428 4295.9
+740.34009 1858.9
+745.40253 2042.8
+747.38446 1801.2
+749.39734 1797.9
+752.39447 2813.6
+753.40869 1235.9
+757.36511 2591.8
+758.34741 3224.0
+759.34906 2373.2
+765.42877 1800.5
+770.42493 1297.9
+774.43268 11098.9
+774.93384 9055.1
+775.37653 22260.4
+776.37830 7984.2
+777.38519 2153.3
+783.08032 1091.3
+789.91949 1411.3
+796.41302 2476.9
+796.91711 4746.1
+797.42188 2089.9
+805.43073 6537.1
+806.43427 2299.7
+823.44336 118667.1
+824.44641 48273.1
+825.44849 13003.3
+826.44781 3272.7
+828.40381 1268.3
+829.38245 1469.2
+830.38470 1212.1
+830.49921 5639.0
+831.50574 1540.0
+832.39032 1410.2
+833.42609 1191.1
+837.44659 2077.1
+846.41107 10893.9
+847.44458 7205.3
+848.47040 2641.9
+854.47925 7417.5
+855.48065 4677.1
+865.47852 2687.0
+866.46863 1219.1
+872.48987 2185.1
+873.49072 1624.1
+874.44708 4158.2
+875.44775 3249.7
+901.53613 25911.4
+902.45215 1222.3
+902.53998 9491.9
+903.43231 3013.3
+903.54364 2326.3
+919.48151 2114.9
+920.46027 14092.2
+921.46594 7417.8
+922.46527 1207.5
+929.44946 6152.7
+930.44037 3684.7
+931.44769 1442.1
+932.03314 1022.8
+937.48608 110505.7
+938.48889 52378.2
+939.49280 14018.8
+940.50037 3996.5
+946.48071 1630.3
+947.45953 15138.6
+948.46179 7564.0
+949.46832 2548.3
+950.52631 1778.7
+959.52899 2862.1
+960.53290 2433.1
+964.48889 1431.5
+965.47449 4331.4
+966.48016 1657.8
+967.56189 3393.2
+968.56866 3196.7
+978.55945 3764.5
+979.55969 2568.2
+985.57507 1717.6
+989.47314 1459.5
+1004.49127 1751.8
+1005.48767 1388.8
+1006.50861 12995.6
+1007.49890 9358.1
+1008.49573 2804.7
+1014.59106 1375.1
+1016.49054 8448.8
+1017.48859 7282.7
+1018.49292 2713.1
+1024.51819 129025.4
+1025.52148 66382.9
+1026.52368 20938.4
+1027.52795 3999.2
+1028.52966 1363.4
+1034.50317 28704.1
+1035.49292 33097.0
+1036.49353 15428.3
+1037.49683 3687.0
+1038.49475 1078.0
+1046.52905 2164.8
+1047.53577 1897.3
+1057.20374 1292.0
+1060.56738 1216.1
+1061.53333 3387.2
+1062.54077 2285.1
+1077.54126 2803.6
+1085.54480 1593.6
+1086.53564 1793.4
+1088.58252 5703.7
+1089.57983 4956.5
+1103.56201 19732.0
+1104.55225 19757.1
+1105.55469 8586.5
+1106.56287 3171.1
+1116.32043 909.0
+1117.60632 2512.4
+1118.59460 1577.7
+1119.62024 2695.3
+1120.61743 2038.9
+1121.57117 611885.9
+1122.57288 364014.5
+1123.57764 116190.1
+1124.58105 28254.8
+1125.58264 6600.9
+1126.56482 1568.2
+1159.60999 3986.5
+1160.61865 2438.3
+1198.15234 5157.5
+1202.62183 1302.3
+1220.64050 25813.5
+1221.64514 16466.4
+1222.64404 5939.4
+1223.66504 1151.0
+1230.63098 1999.6
+1236.31653 1029.8
+1242.63721 1642.6
+1260.66455 3986.8
+1261.65820 2814.6
+1869.90271 1090.3
+1878.79370 3254.8
+1879.04065 2385.7
+1879.45935 30414.6
+1879.88586 2321.7
+1880.10754 2452.1
+1907.11365 11674.2
+S	1814	1814	1907.5278246
+Z	3	5719.308
+Z	2	3813.208
+532.55469 1900.8
+560.66510 620.6
+635.73383 706.6
+676.61487 1281.2
+795.56171 944.2
+1022.98450 607.3
+1198.23840 3464.7
+1521.93958 755.3
+1643.50989 668.0
+1662.98926 774.3
+1699.77881 621.5
+1730.45142 674.9
+1777.05798 783.8
+1850.64075 616.8
+1879.46387 20178.7
+1880.18164 770.8
+1907.05652 6960.7
+1918.73303 726.9
+1930.58423 700.9
+S	1815	1815	566.128407933
+Z	2	1130.409
+Z	3	1695.11
+157.58946 96329.7
+161.13536 77525.5
+165.31340 72774.3
+169.13387 110498.8
+172.15222 75453.4
+187.14386 709394.5
+188.24512 86301.9
+188.26640 122414.1
+188.28632 141798.9
+188.30186 117507.5
+188.30783 106516.5
+188.32550 82463.7
+188.59869 74451.6
+195.80031 67760.0
+197.12834 231577.3
+197.69240 69523.0
+198.89326 147291.0
+199.16722 92554.5
+199.18089 82360.2
+199.18709 78944.1
+199.21217 91250.7
+199.24130 146976.5
+199.26987 359031.4
+199.28485 139165.4
+199.33481 91150.5
+200.13988 115021.4
+215.13870 350853.2
+219.15002 102049.5
+233.16467 5505445.5
+234.16789 799405.4
+235.99991 77348.7
+260.40039 82507.1
+261.15955 1171818.8
+262.16315 152065.3
+263.11261 162106.4
+269.18509 166449.4
+271.60880 93963.4
+276.16653 327219.1
+277.11902 152671.8
+278.59128 72731.5
+281.12427 829644.8
+282.12820 102981.3
+287.21039 187990.3
+287.74796 73194.0
+289.18793 86609.2
+296.19666 730179.6
+299.13467 2424424.3
+300.13834 259000.1
+307.15643 183632.9
+310.21289 140173.7
+314.20682 588168.0
+315.20700 291405.6
+317.18536 164488.2
+317.55093 78876.0
+318.17975 148735.5
+329.22208 90676.3
+333.63867 84848.7
+344.19650 2502692.8
+345.20065 568405.5
+347.20337 1151761.1
+348.20773 135079.8
+349.00125 83569.0
+355.68253 1461630.9
+356.18381 454918.7
+360.22647 175187.7
+362.20703 2004624.6
+363.21054 340835.9
+366.21426 134990.1
+367.19672 327737.8
+368.20782 76575.9
+374.52750 299928.7
+374.86258 113169.1
+382.26877 320212.6
+384.22351 3451727.5
+385.22693 562424.6
+386.30762 76645.7
+394.20792 551155.9
+395.19244 1751151.1
+396.19586 268991.0
+398.24274 101463.6
+407.55014 495590.3
+407.88507 156221.0
+409.28189 155745.9
+412.21866 3780195.8
+412.25879 272124.8
+412.72998 108670.8
+413.22226 767627.4
+415.27069 140298.9
+416.25479 200169.6
+427.29120 116861.9
+427.53354 118256.3
+428.29022 149580.9
+429.28534 1588319.0
+430.28784 421135.8
+431.26440 79751.2
+433.28088 297667.5
+443.26471 2157703.8
+444.26855 490435.6
+447.29654 539151.0
+448.29898 236506.6
+456.24377 75541.2
+457.28018 4126328.5
+458.28348 1095154.4
+459.27988 146096.7
+460.73157 150654.9
+461.22565 96203.2
+461.27502 983997.2
+462.28049 260784.4
+465.16238 99524.6
+469.24509 2056831.1
+469.74698 780366.8
+470.24890 140542.0
+471.26102 112889.6
+472.92365 3394399.0
+473.25797 2644504.8
+473.59256 863851.8
+473.92346 219897.4
+475.29034 1200009.9
+476.24548 1071588.6
+476.29382 289392.3
+477.24945 186482.9
+478.92743 460247.3
+479.26065 414536.3
+480.04755 72022.6
+484.02182 87651.1
+501.34290 139586.9
+502.74588 105432.6
+503.75568 1600430.1
+504.25754 781862.4
+504.75897 240889.0
+508.74826 1039131.2
+509.25171 507515.4
+510.24554 106622.1
+510.61826 993575.1
+510.95282 912461.9
+511.28641 887464.3
+511.32721 637047.7
+511.62061 150220.1
+512.33112 249944.8
+512.76093 2333009.3
+513.26251 1158202.3
+513.34357 78436.5
+513.76355 257105.0
+515.01587 74825.2
+516.62256 93170.4
+517.75305 5550311.5
+518.25482 2359425.8
+518.75671 768019.0
+519.25189 97739.3
+519.95001 285771.3
+520.28467 247882.8
+520.62311 157620.5
+520.94623 89753.4
+525.94244 87798.8
+528.35303 2036057.0
+529.33527 479672.1
+529.35992 483826.3
+530.33588 156936.4
+530.36768 105038.9
+531.27777 2588094.8
+531.61224 2622077.3
+531.94659 1117788.0
+532.14380 77002.1
+532.28113 279565.5
+532.55841 257441.4
+532.61200 139832.6
+534.76392 180073.9
+535.26416 120146.7
+538.33698 150638.1
+539.27020 118627.3
+539.76654 94847.5
+543.27661 2007810.5
+543.77692 925683.9
+544.27124 371845.3
+546.36493 492516.7
+549.13953 84714.7
+574.35907 780934.8
+575.36157 359965.0
+601.81647 485187.9
+602.31482 369910.6
+602.81775 173094.1
+603.30664 127802.9
+610.76428 124431.3
+610.82147 16327657.0
+611.32257 10790203.0
+611.82397 3620815.0
+612.32446 843673.8
+612.82465 140257.5
+613.30377 887418.6
+614.30664 305465.4
+624.37201 70838.8
+628.31415 110205.1
+630.38837 121038.5
+643.07599 85354.5
+646.32892 430475.7
+647.33032 157824.7
+667.36353 4656006.5
+667.86530 3288217.0
+668.36676 1211418.5
+668.86804 282115.8
+676.63910 100644.5
+692.34979 207061.5
+708.36993 187983.9
+708.88434 409096.4
+709.37817 614800.8
+709.88208 277795.6
+710.35693 23057942.0
+711.35986 8366594.5
+712.01416 112124.6
+712.36224 1698388.0
+713.36627 231063.3
+715.85504 128089.8
+716.35760 113610.4
+716.88623 172636.4
+717.38214 139923.6
+717.79907 81163.8
+717.88739 32031168.0
+718.38873 23866614.0
+718.47412 82478.6
+718.88940 10071962.0
+719.39172 2888104.3
+719.90063 683250.8
+720.41254 222284.2
+722.88116 166385.4
+723.37512 85978.0
+725.41656 279872.1
+757.35840 109819.0
+758.33990 128533.0
+774.42657 147540.5
+774.93048 196260.7
+775.37238 849676.3
+776.37616 284830.8
+795.56433 141596.6
+796.41443 454051.1
+796.91711 260602.5
+797.41669 162959.9
+823.44000 2168335.8
+824.44409 871687.8
+825.44165 197727.7
+846.40991 329153.3
+847.41534 97454.2
+854.47595 163441.3
+905.59650 87353.3
+920.45245 113599.0
+929.44495 93973.1
+937.48248 1169416.5
+938.48639 520740.9
+947.45343 411768.3
+948.45581 164540.3
+967.55853 129688.0
+968.56470 120293.5
+1016.47961 122833.5
+1019.85736 75192.0
+1024.51599 474318.0
+1025.51636 343645.8
+1026.51782 128608.0
+1034.49841 862717.0
+1035.49585 518315.0
+1036.49170 279258.9
+1056.96558 86979.2
+1057.23242 110221.9
+1121.56909 2036975.1
+1122.57104 1062416.9
+1123.57690 404889.6
+1198.24939 457122.1
+1591.67590 83156.2
+1869.89600 118261.5
+1879.53247 2514894.8
+1880.16565 142320.2
+1880.83264 81798.2
+1906.81262 104388.2
+1907.09790 919573.4
+1930.55835 133292.0
+S	1817	1817	561.714407933
+Z	2	1121.581
+Z	3	1681.868
+140.19675 6426.0
+144.25038 5832.3
+144.52606 7454.2
+146.57538 6839.0
+146.92047 7757.9
+147.48006 5591.4
+152.62650 6512.7
+157.39928 7203.6
+162.60574 8024.2
+167.29840 6491.7
+169.38071 7126.5
+169.49323 7319.2
+178.46054 6176.6
+181.12871 6570.1
+182.78117 7327.1
+188.24741 10701.9
+188.26680 19435.5
+188.28621 25445.3
+188.30292 23422.4
+188.31357 21451.7
+188.36406 6803.9
+192.16699 6671.0
+198.89148 8079.6
+199.20027 14160.6
+199.24976 15409.4
+199.27345 34070.7
+199.29683 10925.3
+199.37094 11084.8
+199.39569 6672.7
+218.49687 7565.8
+221.06470 7310.6
+238.71478 6404.5
+263.11298 9243.7
+266.52496 5945.7
+269.83615 5940.8
+276.16904 9324.1
+281.12427 75938.2
+282.12711 13393.1
+297.15512 14796.5
+299.13443 195708.7
+300.13791 27512.2
+314.17590 7383.1
+316.33566 6073.3
+328.10922 7098.1
+339.08466 6589.9
+343.15814 8293.9
+346.90958 7329.4
+347.20337 65207.2
+349.18393 8080.9
+355.68246 81127.3
+356.18350 34413.4
+367.19775 24747.4
+368.19986 9321.9
+381.35651 10093.4
+384.22345 209325.9
+385.22672 33680.2
+394.20810 25096.0
+394.80884 6288.1
+395.19226 90622.1
+396.19577 12386.8
+400.26242 9043.5
+412.21844 151997.2
+413.22018 30958.1
+429.28412 23345.1
+430.28506 9326.1
+445.84033 7266.2
+457.28168 10081.7
+458.23184 8384.3
+458.27695 6588.6
+467.19434 6743.5
+469.24469 77448.4
+469.74652 30637.6
+472.92508 16949.7
+473.25824 37452.3
+473.55081 17135.2
+473.59262 14205.8
+476.24487 69118.8
+477.25052 17870.7
+494.75195 8880.6
+503.75589 98113.6
+504.25693 46219.9
+504.75943 14115.2
+508.74808 45845.5
+509.25436 25610.4
+509.74908 8775.4
+510.62204 9721.5
+510.95276 16603.8
+511.28674 11388.9
+512.76093 95363.4
+513.26282 56912.2
+516.52112 6734.1
+517.75311 266756.3
+518.25452 148081.8
+518.75525 30538.5
+526.49292 7284.0
+528.35156 27820.8
+530.26428 11051.7
+531.27942 15503.6
+531.61334 37617.3
+531.94891 19948.1
+532.55573 24478.4
+534.76569 12775.0
+543.27667 67246.3
+543.77039 43136.4
+544.27240 15476.0
+561.41309 7203.1
+561.75464 10829.4
+565.61823 11476.3
+565.94830 10093.1
+610.82007 33659.7
+611.32208 37426.2
+611.82745 13786.0
+613.30334 65095.2
+614.31097 24173.3
+639.70093 7534.5
+646.32880 23736.3
+669.75134 6242.2
+676.64630 14848.5
+692.34619 14440.3
+708.34656 7109.2
+710.35645 1390878.8
+711.35931 509828.1
+712.36176 76372.9
+735.33264 6388.3
+775.37140 36608.8
+776.38171 11342.8
+776.66644 6937.7
+795.56158 12644.2
+823.44086 92638.3
+824.44397 49914.5
+846.41077 10881.9
+880.00439 6942.4
+915.22595 6426.6
+937.48407 57302.0
+938.48755 28941.8
+947.45709 12299.8
+972.40479 6504.9
+1024.51465 26384.4
+1025.51672 12796.3
+1034.49792 36587.3
+1035.49292 28304.6
+1036.48584 10189.7
+1057.25098 10338.2
+1188.31018 8070.9
+1198.23792 40424.0
+1275.43811 6756.1
+1513.27344 8838.5
+1530.29431 7183.6
+1654.27808 6261.1
+1776.97217 10968.4
+1793.65466 7468.1
+1878.13220 7457.0
+1878.60657 14555.2
+1879.06531 8238.9
+1879.55273 224895.2
+1880.11157 12789.0
+1880.39307 13231.4
+1907.06030 84528.1
+1930.58875 11784.2
+S	1818	1818	562.215407933
+Z	3	1683.371
+Z	2	1122.583
+140.05150 485.2
+141.36151 506.9
+141.84636 481.6
+147.95399 571.9
+152.56689 580.6
+152.87170 605.2
+159.99480 527.7
+160.19733 503.4
+170.47676 531.7
+185.09100 912.4
+188.20963 498.0
+188.23729 579.0
+188.24763 787.0
+188.26868 1848.0
+188.28494 1993.0
+188.30040 1967.8
+198.89407 942.4
+199.17815 729.2
+199.24161 753.9
+199.25487 1344.5
+199.26869 2010.9
+199.27707 1285.5
+199.29225 1147.5
+199.32143 619.9
+199.36745 911.5
+200.13899 1626.7
+200.35617 500.8
+202.08157 735.2
+210.59627 569.2
+214.51074 496.9
+216.11661 552.4
+233.56345 621.2
+235.11902 798.7
+243.10643 541.8
+243.21655 592.1
+244.35243 616.2
+255.06821 535.7
+255.28575 559.2
+263.11395 1192.7
+264.09674 734.7
+270.14435 1354.6
+271.85349 621.0
+276.16608 2213.0
+279.09534 590.1
+281.12399 9213.4
+282.12833 1056.3
+282.78616 687.3
+285.21350 645.2
+286.21027 491.9
+296.86365 655.1
+297.15442 1232.6
+299.13461 23486.3
+300.13831 2878.3
+307.15555 1547.5
+307.65717 778.2
+313.14944 698.6
+319.93658 620.2
+325.15005 1748.0
+347.20352 8900.1
+348.20740 1486.9
+349.17264 534.6
+355.68213 12617.1
+356.18362 6287.0
+356.68466 1159.9
+367.19638 2721.2
+367.33807 550.5
+373.69641 749.3
+376.90649 575.5
+377.18112 898.4
+384.22342 27781.6
+385.22736 5881.6
+386.22842 578.9
+394.20795 3855.8
+395.19202 11789.2
+396.19589 2196.9
+412.21848 23008.7
+413.22241 4924.4
+414.22308 757.0
+421.59201 631.3
+427.52872 651.0
+429.28540 3142.6
+430.28696 1400.1
+439.15057 564.1
+457.23276 924.4
+457.28119 2012.4
+458.28003 738.9
+460.72821 1067.8
+469.24496 10246.3
+469.74634 6830.6
+470.24835 907.9
+472.88913 1074.6
+472.92410 4362.0
+473.25827 5729.9
+473.59219 2992.6
+473.92734 1806.4
+474.25958 644.0
+476.24585 9863.4
+477.25101 2125.5
+481.27628 2148.3
+482.64365 756.3
+503.24991 696.4
+503.75601 11240.4
+504.25778 6587.6
+504.75592 1032.9
+508.74808 8198.9
+509.25067 4686.1
+509.74426 1350.2
+510.27142 757.7
+510.95193 2938.9
+511.28629 1599.8
+512.76086 13382.7
+513.26178 8674.0
+513.76288 1763.8
+517.75293 33466.9
+518.25446 21879.3
+518.75598 7094.0
+519.94043 618.5
+528.35382 3616.5
+529.35852 2326.1
+531.27734 3589.6
+531.61206 4840.9
+531.94672 4138.5
+532.27991 2280.1
+532.48828 1998.6
+532.61279 872.8
+534.76392 1561.9
+543.27661 7939.2
+543.77521 5954.4
+544.27155 3140.4
+544.77380 1082.8
+555.52271 599.1
+561.74017 830.5
+562.19928 615.7
+610.82117 5345.8
+611.32312 6735.4
+611.82538 2619.1
+612.32904 814.3
+613.30328 8002.8
+614.30853 3740.2
+618.32477 612.0
+628.31903 748.1
+630.38879 799.3
+646.33026 2863.7
+647.32977 1407.5
+676.65350 840.1
+692.34485 2132.3
+710.35657 183815.0
+711.35913 82003.9
+712.36169 17810.1
+713.35864 1149.7
+723.89282 710.4
+757.36469 688.1
+758.34070 754.4
+759.35168 636.6
+775.37292 4373.8
+776.37415 2334.9
+795.57159 1087.7
+823.44055 13892.5
+824.44336 7545.4
+825.44733 1309.4
+846.41040 1265.5
+847.41309 1471.9
+901.25671 746.1
+937.48322 7960.8
+938.48541 5664.5
+947.46045 1720.9
+948.45367 1654.2
+1006.49646 1153.0
+1007.48560 668.7
+1015.75519 564.1
+1016.48920 1336.3
+1017.48413 595.3
+1024.51611 2896.7
+1025.51624 3267.8
+1026.51855 680.2
+1034.49792 5723.0
+1035.49512 5101.9
+1036.48206 1911.7
+1140.54407 662.9
+1141.41162 607.9
+1161.44690 574.9
+1175.91162 704.1
+1198.09302 2899.3
+1204.36182 651.8
+1268.30603 625.0
+1473.02527 653.7
+1628.13232 627.3
+1877.19055 752.4
+1878.53796 1390.8
+1878.90710 858.2
+1879.18103 1366.8
+1879.56201 20048.4
+1879.91797 1117.5
+1881.99878 1321.5
+1883.07031 649.6
+1907.05481 7545.0
+S	1819	1819	611.3313246
+Z	2	1220.647
+155.44576 531.8
+159.71251 732.8
+169.16772 501.2
+172.42307 743.0
+174.01266 588.8
+178.12700 610.6
+181.43848 638.9
+188.18858 565.2
+188.24283 807.6
+188.25475 605.8
+188.26299 912.8
+188.27155 962.7
+188.28473 1687.2
+188.29953 1087.3
+188.31088 1174.9
+188.32487 638.5
+193.00458 536.9
+193.33258 575.1
+195.51845 659.6
+199.18701 647.5
+199.23344 866.9
+199.24551 877.2
+199.25580 720.8
+199.27277 2414.6
+199.28197 1704.4
+199.30272 658.7
+199.34447 525.7
+199.37053 1270.6
+202.08208 1356.1
+205.49429 611.6
+223.35744 525.2
+223.70461 555.3
+223.99165 588.3
+236.13924 1725.9
+239.36693 579.2
+251.07848 552.6
+252.13068 511.2
+266.14948 6795.8
+267.15454 973.0
+275.53128 513.1
+276.16708 1596.0
+280.12888 684.2
+280.19885 766.7
+281.12378 2103.2
+282.12784 672.0
+284.16031 912.4
+297.15472 876.9
+299.13452 6234.9
+300.14154 849.3
+307.15585 1498.8
+315.16553 878.5
+327.20309 954.2
+343.16397 756.0
+347.20340 10367.5
+348.20728 1080.6
+350.27765 877.5
+353.17963 1115.5
+355.68219 8049.1
+356.18295 3171.8
+367.19806 794.7
+370.20645 977.0
+379.19632 870.7
+380.19104 1375.4
+381.17487 2609.6
+381.38235 562.9
+384.22336 9686.0
+385.22809 1373.7
+394.20773 1753.5
+395.19266 4202.3
+398.20227 5820.0
+399.20926 1020.6
+411.44983 505.4
+412.21844 18451.7
+413.22116 3333.6
+427.56873 815.7
+428.09030 577.7
+442.26666 603.6
+448.25443 2131.0
+452.51776 532.2
+458.23260 750.1
+466.26465 6294.1
+467.27225 1197.9
+469.24521 10704.4
+469.74811 3936.4
+470.24762 1190.9
+476.24716 12233.0
+477.25165 2375.8
+480.25906 703.9
+482.68958 688.2
+483.29129 17494.0
+484.29492 3807.6
+493.27606 3095.4
+494.25854 8322.6
+495.26529 1106.1
+503.75552 19169.3
+504.25696 8460.2
+504.75278 2535.4
+508.74902 840.5
+509.25308 684.5
+509.27673 521.5
+511.28619 19185.3
+512.28870 3835.7
+512.76074 18834.1
+513.26202 9588.7
+513.76666 1898.6
+517.75262 3667.2
+518.25653 2547.7
+518.75464 791.1
+532.08429 527.7
+532.50781 1663.0
+543.27521 2285.8
+543.33197 599.3
+552.28217 9250.9
+552.77893 7320.0
+553.27588 4953.3
+553.77789 875.6
+560.12427 530.8
+561.28705 97145.0
+561.78827 55125.3
+561.83508 723.6
+562.28955 13707.4
+565.34387 1743.8
+567.28894 888.7
+578.29578 1570.5
+578.62512 1257.1
+580.80200 1054.2
+581.30908 1106.3
+582.36749 946.5
+584.80231 627.3
+588.30865 1202.2
+588.80872 974.0
+589.52173 592.9
+591.35730 9526.0
+592.36078 7678.1
+592.80872 2639.6
+593.30566 5585.9
+593.36871 1072.2
+593.80414 3486.1
+630.44781 811.0
+676.63757 1165.3
+692.34607 2038.8
+693.33759 802.3
+709.36725 1042.4
+710.27570 658.4
+710.35645 178539.0
+711.35889 64150.2
+712.36176 10739.5
+728.36615 734.8
+731.16528 719.2
+733.91083 613.6
+745.39752 2209.5
+757.44482 640.2
+760.39569 618.4
+791.43872 2097.6
+791.94507 721.5
+795.55945 740.5
+805.42560 629.2
+823.44073 13108.7
+824.44391 6248.6
+825.44836 1291.5
+870.40186 653.6
+874.43927 5337.3
+875.44238 1914.7
+902.00446 545.3
+937.48291 23752.1
+938.48572 10942.1
+939.48969 1896.3
+945.47632 2134.6
+1006.50714 1352.2
+1007.50116 1259.8
+1011.73303 597.9
+1024.51489 22715.8
+1025.51855 11670.8
+1026.51953 2605.8
+1028.51270 965.7
+1034.49255 1459.8
+1035.48328 1180.4
+1046.52539 2251.6
+1047.54211 1403.2
+1057.24768 698.3
+1106.72656 666.7
+1121.56689 1365.3
+1122.57043 1242.7
+1188.37964 840.0
+1198.13013 3436.9
+1449.04590 567.0
+1612.04846 706.0
+1627.93420 572.3
+1630.26111 681.2
+1656.73547 538.7
+1763.63611 675.1
+1776.89392 765.8
+1819.26025 633.8
+1876.11145 906.0
+1877.87256 746.3
+1878.22473 779.3
+1879.24902 3313.0
+1879.53540 19888.2
+1880.60095 857.2
+1907.04077 7461.2
+1930.72827 897.6
+S	1821	1821	1879.94940793
+Z	2	3758.051
+Z	3	5636.573
+532.50812 1884.9
+542.55914 566.5
+552.26385 611.0
+617.89807 657.1
+630.42712 822.4
+795.55804 1202.7
+926.34521 575.2
+1010.27026 643.9
+1154.39734 648.8
+1198.13293 3177.1
+1215.12061 671.7
+1300.56750 604.0
+1399.40271 784.0
+1549.14099 732.4
+1876.99036 718.7
+1879.11877 2326.6
+1879.54211 19216.3
+1880.24060 786.0
+1880.79968 1094.7
+1907.03967 7632.1
+S	1822	1822	566.777991267
+Z	3	1697.059
+Z	2	1131.708
+165.26756 71944.8
+187.14394 659853.0
+188.26337 225469.5
+188.27620 289218.4
+188.28979 302159.3
+188.30095 251833.5
+188.32010 153082.3
+188.33575 97989.8
+197.12787 274786.7
+198.89285 125546.7
+199.16403 68508.3
+199.25923 220727.7
+199.26987 221529.2
+199.28874 174908.0
+199.30304 79926.3
+199.34523 91501.3
+199.37486 107335.6
+199.46825 82571.6
+200.13866 103751.2
+204.78011 80033.9
+215.13895 347674.6
+218.71791 72144.6
+229.06918 86369.7
+233.16473 5642064.5
+234.16808 805390.4
+235.12022 122388.6
+237.19633 123455.5
+241.18968 90983.5
+255.20425 87909.2
+261.15958 1274656.4
+262.16351 165420.4
+268.20328 112346.6
+269.18652 300294.5
+276.16629 342631.9
+277.11664 188113.1
+281.12418 828498.8
+282.12680 96681.4
+282.73230 85027.1
+283.20068 99616.6
+287.21115 207856.6
+289.19318 100130.9
+296.19666 895279.7
+297.15457 112963.0
+297.20096 163922.6
+299.13474 2565007.5
+300.13910 294484.2
+307.15491 318228.3
+308.91122 89948.6
+310.21237 225906.1
+313.14648 93410.9
+314.20740 586952.2
+315.20615 346134.1
+317.18405 187412.6
+318.17914 92861.3
+325.14868 155561.9
+330.17825 100513.6
+334.43399 84093.9
+339.17960 77423.3
+342.28897 85753.2
+344.19659 2540497.5
+345.19983 546760.6
+347.20355 1427441.8
+348.20547 174219.8
+350.27911 94013.3
+355.68213 1305975.8
+356.18301 404808.2
+356.68546 116362.3
+360.22775 83662.9
+361.07611 95179.7
+362.20697 2327863.8
+363.21118 414684.8
+367.19763 246941.0
+374.52798 274466.2
+375.19571 88374.8
+381.37613 81567.5
+382.27002 251436.1
+384.22360 3469764.3
+385.22699 528417.1
+389.65900 73094.7
+394.20929 405956.1
+395.19254 1678836.4
+396.19492 247745.3
+398.24405 203380.3
+407.55042 560411.3
+407.88464 241563.5
+408.21588 97177.5
+409.27826 193895.0
+412.21860 3878473.5
+412.25784 256795.8
+413.22162 654889.6
+415.27127 138966.7
+416.25549 314011.8
+427.29141 148583.2
+428.29138 125741.8
+429.28528 1411422.1
+430.28613 444667.9
+431.26065 98903.9
+433.28082 262678.1
+443.26453 2405164.5
+444.26791 603283.4
+445.27097 87301.0
+447.29538 588933.2
+457.28018 4285277.5
+458.23123 74901.4
+458.28363 1287288.9
+459.28702 166124.9
+461.27512 1213324.1
+462.27979 163533.6
+467.24457 139599.9
+467.58450 123239.7
+469.24521 2018399.4
+469.74719 923152.1
+470.24615 135136.4
+471.26208 90470.5
+472.92361 3832045.0
+473.25787 2872850.0
+473.59229 1374219.4
+473.92615 219561.9
+475.29041 1372286.9
+476.24600 1177164.8
+476.29581 415039.2
+477.24805 230588.1
+478.92697 586796.8
+479.26099 416575.9
+479.59637 258948.1
+482.27905 79058.7
+486.56354 72061.8
+503.75620 1593849.4
+504.25793 820008.7
+504.76019 142786.0
+508.74808 1005658.6
+509.25168 536691.7
+510.27441 93687.7
+510.61823 1103769.4
+510.95309 832267.2
+511.28690 562320.9
+511.32690 593356.7
+511.62677 101496.5
+512.33160 185751.8
+512.76099 2593666.0
+513.26245 1213357.8
+513.76428 310538.1
+516.62024 119252.3
+517.75330 5797407.5
+518.25433 2415457.8
+518.75677 892531.5
+519.25696 139073.3
+519.95123 254513.1
+520.28320 237106.0
+520.62219 117773.3
+528.35339 2239004.3
+529.36017 544510.1
+530.26898 104903.1
+530.33875 272954.2
+531.27765 3052274.8
+531.61230 2500116.5
+531.94659 1039791.4
+532.28088 299764.0
+532.50616 270609.7
+534.76227 242433.6
+535.26770 201117.3
+538.33490 107992.7
+543.27649 2122711.3
+543.77655 1215723.9
+544.27338 271158.8
+544.77051 99282.0
+546.36279 703614.1
+547.37231 105172.1
+549.17981 96580.9
+561.23297 138616.7
+574.35944 631084.8
+575.36591 171745.5
+601.81390 521944.5
+602.31335 333415.9
+602.81378 167369.6
+609.22632 86297.1
+610.82147 18602004.0
+611.32269 12374952.0
+611.82404 4433058.5
+612.32532 830154.1
+612.82452 225120.5
+613.30341 915476.3
+614.30713 327501.9
+635.18262 78343.2
+646.33008 398482.3
+647.33752 90761.6
+659.33533 73621.5
+667.36346 5575680.5
+667.86548 3848414.0
+668.36694 1451204.3
+668.86896 317914.0
+676.63794 97831.5
+680.61621 81322.4
+692.34344 178331.1
+708.37341 89916.5
+708.88324 510209.8
+709.37842 476684.6
+709.88019 279235.0
+710.35699 22579586.0
+711.35974 8118021.0
+712.36267 2032023.3
+713.36670 268274.2
+715.86029 177168.0
+716.88330 186137.3
+717.38159 122780.9
+717.88751 38631980.0
+717.99585 85762.8
+718.38873 28747442.0
+718.56201 82623.7
+718.88965 13028557.0
+719.39185 4140170.8
+719.89679 775828.3
+720.41577 140559.3
+722.88550 99302.1
+725.42004 295504.2
+727.83209 87974.3
+740.32983 115154.2
+757.35974 136850.8
+758.35504 98285.2
+774.42517 289768.0
+774.93109 153732.0
+775.37280 730004.0
+776.37946 237480.2
+795.55823 136414.2
+796.41650 238467.3
+796.91833 276114.8
+797.41235 109776.8
+823.44104 2038458.0
+824.44305 737661.8
+825.44281 164933.6
+842.73743 77642.5
+846.41003 329244.2
+847.41595 156074.2
+854.47620 223090.9
+855.48120 168888.1
+880.18378 80117.2
+920.45465 106983.4
+929.43121 90567.3
+937.48383 1309773.1
+938.48553 629573.3
+939.48694 174157.1
+947.45898 471940.9
+948.46033 234894.9
+967.56018 178870.1
+1006.50616 197581.1
+1016.48779 186770.2
+1017.47406 109712.8
+1024.51624 573580.6
+1025.51685 356747.9
+1026.51941 81252.7
+1034.49988 998511.5
+1035.49805 678517.6
+1036.49609 237206.4
+1076.01294 89480.4
+1121.56885 1826450.9
+1122.57031 1017568.6
+1123.57642 279253.4
+1124.54468 118771.1
+1140.50903 76744.8
+1198.13330 464982.0
+1404.58667 92284.1
+1414.09802 94286.2
+1438.55225 96664.6
+1525.48975 97472.1
+1540.40955 88503.9
+1599.21765 87736.7
+1831.07544 87367.3
+1859.56653 75544.3
+1876.09265 149684.1
+1878.55310 121128.8
+1879.52551 2633024.3
+1879.78894 209415.0
+1880.48523 140993.4
+1881.22498 91098.1
+1907.04297 979847.8
+1930.65796 86684.5
+S	1823	1823	567.4868246
+Z	3	1699.185
+Z	2	1133.126
+149.51720 2105.9
+162.10597 2229.4
+169.13373 2587.2
+173.76680 2503.2
+187.14488 18066.4
+188.25862 2817.3
+188.26909 3640.7
+188.28355 5518.3
+188.29153 3231.2
+188.30002 3741.4
+188.31255 4934.3
+188.32906 3403.8
+197.12944 8347.0
+197.76128 2140.9
+198.88954 4055.2
+199.15292 2652.6
+199.18515 3347.7
+199.25734 3057.6
+199.27362 9479.3
+199.28210 8785.0
+199.37160 3420.0
+200.14003 2453.3
+203.73650 2390.5
+206.30194 3038.0
+215.13988 9527.8
+215.82281 2258.8
+225.48764 2099.7
+233.16556 128202.7
+234.16904 28019.8
+235.11905 4851.9
+235.17172 3421.8
+237.19698 4305.2
+241.19087 3092.8
+255.28784 2710.2
+255.64444 2191.5
+261.16061 28484.2
+262.16425 4107.6
+263.11398 4110.1
+264.09900 3204.6
+265.19241 3874.6
+269.18719 8594.9
+269.92932 2689.1
+270.14505 5553.7
+271.76883 3722.5
+281.12546 27660.5
+282.13086 2977.0
+287.21289 9988.7
+289.19125 4108.1
+296.19775 26104.9
+297.15823 5611.3
+297.20059 3944.6
+299.13608 64476.6
+300.13870 11382.6
+306.77835 2450.2
+307.15714 8403.4
+307.65811 2909.6
+309.36746 2543.5
+310.21317 6798.5
+312.14856 7822.4
+314.20850 17781.7
+315.16565 2571.6
+315.20810 9374.9
+316.21161 2935.7
+317.18781 5205.6
+317.46487 2484.0
+318.18237 4420.4
+320.12820 2874.1
+325.15091 3462.2
+344.19806 81055.3
+345.20157 20221.3
+347.20459 42607.7
+348.21014 3917.5
+355.68356 58256.9
+356.18546 18827.2
+356.68781 6213.5
+360.22830 4806.2
+362.20837 58559.0
+363.21173 13772.5
+364.16302 3504.3
+364.26132 4028.7
+366.21640 3053.3
+367.19846 9160.3
+374.52939 6157.8
+374.86423 4913.0
+379.40829 2583.8
+382.27182 12977.8
+384.22485 95982.1
+385.22833 19028.2
+386.23169 3388.5
+394.20932 11145.8
+395.19391 42448.9
+396.19778 10190.1
+398.24493 8883.2
+407.55029 9667.1
+407.88654 8107.5
+408.21912 3916.3
+409.28238 4817.3
+410.79553 2452.1
+412.22037 103440.0
+412.26062 12794.3
+412.72681 7611.0
+413.22385 18210.6
+415.27148 5748.2
+416.25647 13036.3
+417.26089 2615.6
+421.18262 3772.7
+427.29349 5583.2
+427.57642 2936.2
+428.29227 7821.2
+429.28702 46980.1
+430.19241 2562.9
+430.28894 18237.8
+431.26733 3716.1
+431.29120 2831.1
+433.28235 8212.4
+434.28772 3529.0
+435.19583 4256.5
+443.26669 82355.5
+443.53851 2315.9
+444.26923 24599.5
+447.29770 19205.2
+448.30075 5896.1
+457.28229 155646.0
+458.23621 10728.8
+458.28531 47668.0
+459.21640 2862.6
+459.28818 10505.4
+460.73090 5048.9
+461.27698 49313.9
+462.28101 16287.6
+466.26483 3211.8
+469.24728 51690.9
+469.74887 35574.2
+470.24884 8496.8
+471.26144 5866.8
+472.92587 70504.1
+473.25989 75116.3
+473.59424 36600.5
+473.92798 12335.9
+474.23953 3745.2
+475.29248 71396.8
+476.24750 85810.3
+476.29593 26842.9
+477.25012 18338.2
+477.30289 3075.5
+478.25339 3619.9
+478.92947 39705.6
+479.26355 26955.9
+479.59769 19108.1
+479.93127 3772.4
+480.26495 2892.2
+481.27719 11262.7
+483.29266 12399.5
+483.33456 8467.3
+485.31494 3263.8
+494.26102 9553.2
+501.34583 9132.3
+502.34534 4519.6
+502.74942 4239.3
+503.75787 66578.1
+504.25906 35821.3
+504.76230 7891.5
+508.75018 49741.4
+509.25342 30165.6
+509.75021 10383.6
+510.26932 4182.3
+510.62000 35718.1
+510.95447 47996.1
+511.28815 50476.3
+511.32916 51003.0
+511.62347 10634.8
+512.29309 7325.2
+512.33252 18848.0
+512.76294 134628.0
+513.26453 80871.3
+513.76642 20069.2
+514.26764 4028.5
+516.24426 2573.9
+516.62439 3751.5
+517.25458 3000.6
+517.75525 146022.4
+518.25775 85811.3
+518.75806 25993.2
+519.26166 6000.9
+519.95123 11884.6
+520.28442 12962.1
+520.62030 5448.0
+528.35522 58874.9
+529.33612 24568.4
+529.36108 15505.9
+529.77618 3730.8
+530.33832 9957.5
+531.28009 54545.2
+531.34430 2945.9
+531.61481 60198.1
+531.94806 33603.6
+532.28223 17825.0
+532.49786 8698.7
+532.61780 4396.0
+534.27179 2801.0
+534.76550 7739.2
+535.26489 3284.5
+535.60089 2776.5
+536.24683 3753.9
+542.32550 3548.7
+556.35156 7286.2
+559.64307 5517.0
+559.97461 7107.3
+561.29010 45226.6
+561.79114 32016.9
+562.29303 12290.6
+562.79889 4486.8
+565.64685 123743.5
+565.98108 161344.2
+566.31512 123292.1
+566.64917 48549.6
+566.98346 13991.7
+567.31604 5659.8
+574.36090 383324.6
+575.36438 186227.7
+575.81830 3363.0
+576.36743 47853.7
+577.37054 7586.1
+578.26575 3149.4
+591.30670 3303.2
+601.31378 3256.6
+601.81873 58609.0
+602.31641 53101.1
+602.81421 24403.4
+603.31512 8678.8
+603.81586 4958.6
+608.34399 4483.8
+609.18683 2655.8
+609.23297 9119.3
+609.41064 3288.3
+609.52881 2789.0
+609.73224 6984.8
+610.03632 5035.3
+610.28052 3182.6
+610.54736 6666.7
+610.75446 6709.1
+610.82361 1538242.0
+610.90070 3287.4
+611.26093 5788.3
+611.32477 1163080.8
+611.61914 7861.2
+611.82605 471344.0
+612.11133 5229.8
+612.32770 135984.5
+612.41895 8926.4
+612.82941 31798.3
+612.92401 7321.8
+613.30554 135526.3
+613.42773 3162.6
+614.30908 35777.9
+615.31158 7843.3
+615.81866 4066.5
+619.35474 2825.4
+624.37286 6547.7
+626.35736 3346.7
+628.32239 6378.1
+629.30389 4685.3
+630.30267 3159.4
+630.46252 2830.3
+632.31586 11629.5
+646.33081 27586.0
+647.33459 8475.3
+648.32104 4015.2
+650.32721 25374.8
+651.32953 6122.8
+658.85272 4245.3
+659.84955 2972.7
+666.33105 7440.0
+667.36627 419540.6
+667.86749 367211.8
+668.36877 177205.2
+668.87061 54251.6
+669.37238 12920.7
+669.86926 4667.6
+671.41254 5870.4
+675.31915 8643.9
+676.29175 3529.7
+676.64984 5560.4
+678.32001 4043.4
+690.38733 6204.5
+692.34875 44171.8
+693.32843 26414.3
+694.33264 7757.0
+695.87750 3746.6
+696.37885 4388.1
+697.41956 3719.2
+700.37421 6905.0
+700.87457 5160.4
+707.41162 17029.9
+708.36493 10472.5
+708.39447 11407.0
+708.58466 5205.8
+708.73444 3916.5
+708.88489 35321.5
+709.04120 4983.9
+709.38037 58938.7
+709.58862 4286.7
+709.68402 4062.3
+709.88129 33495.0
+710.05780 5421.9
+710.10632 6073.4
+710.21808 5523.1
+710.27197 13347.7
+710.35931 2659552.3
+710.46997 7893.5
+711.02875 5983.6
+711.28485 3585.5
+711.36194 935851.1
+711.68262 3787.5
+712.00049 6033.3
+712.08032 2968.1
+712.14465 3610.7
+712.36469 196030.2
+712.67316 3518.9
+712.84802 3411.0
+713.36938 29003.9
+713.87689 3724.0
+714.37103 6010.9
+714.41656 2866.4
+715.72211 2985.6
+715.79956 7438.6
+715.86230 17704.1
+716.09979 5660.2
+716.22559 10133.3
+716.36359 13684.3
+716.55017 2416.0
+716.60144 6330.0
+716.64917 2828.7
+716.72314 8735.0
+716.89838 7252.6
+717.03656 6550.8
+717.09192 3645.5
+717.15051 3033.3
+717.21313 9529.5
+717.25024 4041.7
+717.39661 14568.1
+717.54510 5559.4
+717.60101 3415.9
+717.63727 3467.2
+717.66437 4523.2
+717.71490 7183.2
+717.74896 8265.2
+717.78387 8387.8
+717.89050 3292289.8
+717.98285 13134.7
+718.03625 7175.0
+718.08447 5456.9
+718.21613 5519.5
+718.24255 3452.0
+718.27472 7042.0
+718.39050 3052399.8
+718.54095 6944.1
+718.57715 11280.7
+718.89111 1491690.6
+719.07770 7582.6
+719.25006 7004.0
+719.39301 529383.6
+719.48743 4752.2
+719.56287 10741.0
+719.64044 4557.1
+719.68695 7507.6
+719.74335 6606.7
+719.89307 138430.3
+720.06073 10576.1
+720.19012 7220.1
+720.39087 17233.8
+720.44092 13434.3
+720.49512 5094.9
+720.56970 7545.9
+720.68768 4904.0
+720.76324 2233.2
+720.90039 3252.8
+720.94122 6663.3
+721.00183 3141.3
+721.78369 4046.4
+722.88159 13276.5
+723.38300 14124.3
+723.88464 7147.3
+725.41998 40091.4
+726.32629 4215.8
+726.42413 13204.7
+726.84174 3057.8
+727.43127 3541.0
+731.18091 3506.4
+740.33673 3984.7
+745.40302 7301.2
+757.36670 8448.0
+758.34662 11294.1
+759.35077 6819.3
+763.41736 2583.8
+770.42511 4228.1
+770.92035 3304.1
+774.43188 25771.4
+774.93292 31043.4
+775.37567 56555.4
+775.93500 4993.5
+776.37720 23100.0
+777.37885 5401.3
+779.42511 5241.3
+789.91766 4346.3
+790.42615 3847.6
+795.55975 4872.5
+796.41608 11176.4
+796.91779 15955.5
+797.41315 3457.1
+805.43292 15438.7
+806.43542 5490.4
+823.44354 317018.7
+824.44647 134567.8
+825.44897 30766.2
+826.44757 4922.9
+828.40387 4138.6
+829.38086 6588.5
+837.45435 5038.8
+838.45831 3555.8
+846.41077 27092.1
+847.41431 13567.9
+848.42499 5097.6
+854.47705 24493.8
+855.48090 10417.3
+856.48096 5449.1
+872.49097 8107.5
+873.49200 3627.9
+874.44165 13478.1
+875.45020 4750.2
+877.47260 3287.6
+882.47516 3128.8
+902.44031 3004.6
+903.43384 5243.3
+904.42383 2911.1
+912.41272 3443.9
+919.46979 6867.0
+920.46075 39992.6
+921.46503 15410.9
+929.45081 17683.3
+930.45166 8907.2
+931.43597 5134.4
+937.48657 292410.4
+938.48950 122331.7
+939.49261 31522.0
+940.49994 5661.8
+946.48267 4420.3
+947.45966 41901.9
+948.46338 20249.6
+949.46411 8878.0
+959.53485 11322.6
+960.52618 4161.0
+964.48682 6659.5
+965.47095 9703.4
+966.46515 4167.3
+967.56055 14529.1
+968.57324 5793.7
+985.57013 7801.6
+986.56958 4433.1
+989.47772 5411.5
+990.47833 2983.1
+991.51575 2921.3
+1004.49390 6682.1
+1006.50885 28091.5
+1007.50366 25204.3
+1008.49860 9099.8
+1016.49188 27788.2
+1017.48419 18293.6
+1018.48566 7575.6
+1020.85266 3336.0
+1024.51855 346730.2
+1025.52209 163929.7
+1026.52319 46415.9
+1027.52283 6089.9
+1028.51880 3709.5
+1034.50244 79577.0
+1035.49402 85175.6
+1036.49316 37219.1
+1037.49121 11477.4
+1038.49536 3460.9
+1043.52539 3205.6
+1044.52087 3299.7
+1046.53882 7205.2
+1061.53723 8837.8
+1085.55493 4909.4
+1086.54492 3918.3
+1088.57886 17723.3
+1089.58386 9918.4
+1103.56189 51101.6
+1104.55298 43421.2
+1105.55786 17565.2
+1106.54382 6341.2
+1117.61450 7688.5
+1118.34241 3827.3
+1118.60974 3849.0
+1119.61914 8582.5
+1121.57141 1667807.1
+1122.57349 875104.3
+1123.57715 268749.0
+1124.57910 58989.8
+1124.81238 3283.7
+1125.03430 2777.9
+1125.55798 9419.2
+1125.70398 3645.6
+1125.80042 2773.9
+1126.53296 4465.4
+1159.61584 10276.2
+1160.61108 9166.0
+1161.62073 3408.3
+1198.11487 12901.4
+1220.64026 61554.3
+1221.64087 36042.7
+1222.64709 9718.3
+1230.62195 6823.2
+1260.66150 11078.9
+1261.65906 5988.0
+1460.60779 3137.9
+1512.49536 2992.7
+1525.53235 3913.9
+1870.20532 3114.2
+1878.33130 3835.7
+1878.56042 2706.1
+1879.01025 4594.4
+1879.54492 86685.0
+1879.95715 4966.6
+1907.04639 31681.7
+1930.74292 3571.5
+S	1825	1825	1879.94740793
+Z	3	5636.567
+Z	2	3758.047
+516.71387 575.0
+532.50806 2186.5
+539.83551 719.0
+540.65271 669.0
+630.43835 847.0
+676.66534 691.7
+731.15857 729.4
+795.55914 1112.2
+928.54803 642.4
+1034.14111 585.6
+1070.43152 658.7
+1132.45520 688.3
+1155.37329 678.9
+1198.13074 3178.4
+1244.16150 754.1
+1275.29712 685.9
+1460.04187 661.3
+1492.88843 639.7
+1702.97095 629.1
+1765.69946 774.0
+1777.81604 677.2
+1878.00330 985.1
+1879.10706 1657.7
+1879.60522 18773.5
+1880.16699 1417.6
+1881.97571 642.7
+1907.04810 7115.1
+1918.68665 709.8
+1930.67749 771.2
+S	1826	1826	1907.46299127
+Z	2	3813.078
+Z	3	5719.114
+516.17273 589.5
+532.49750 2262.6
+549.18561 991.9
+558.23370 609.1
+630.44031 770.7
+659.66260 736.2
+676.62561 1004.5
+731.15479 735.8
+956.18604 645.7
+1019.33167 668.3
+1165.73889 584.9
+1198.11133 3303.1
+1375.87317 690.0
+1525.49158 1372.9
+1774.67566 725.7
+1817.76794 746.0
+1878.94360 739.6
+1879.50513 18852.8
+1880.04761 1093.5
+1884.40686 634.6
+1906.89014 7000.8
+1907.18127 1544.9
+1918.76990 719.3
+1930.70703 1086.0
+1949.45447 641.4
+S	1827	1827	524.0398246
+Z	1	523.032
+141.17747 540.8
+142.98546 528.4
+157.44186 562.4
+173.37280 558.2
+175.49243 540.2
+178.86024 556.5
+187.14375 2269.8
+187.94899 539.4
+188.25426 712.1
+188.26761 959.5
+188.28192 1039.4
+188.29370 1189.6
+188.30260 911.0
+188.31306 732.2
+199.18234 942.3
+199.23947 486.5
+199.25592 1419.8
+199.26901 782.5
+199.27863 2031.9
+201.57077 586.4
+212.79137 603.3
+215.13889 1376.0
+217.18227 613.6
+226.11908 824.9
+230.87334 578.7
+233.16444 9509.0
+234.16829 1154.1
+245.49236 504.2
+253.57571 569.6
+271.67807 613.9
+281.35577 632.4
+288.20270 6003.2
+289.20709 838.4
+314.20660 2100.4
+323.27835 653.3
+342.64090 562.7
+346.96588 777.7
+350.28845 707.4
+354.73425 713.7
+357.34195 659.6
+359.23843 2180.6
+362.20712 1198.8
+363.46973 592.5
+363.99820 3270.1
+365.52908 1269.6
+369.73331 571.5
+376.22571 1850.2
+384.73892 16934.2
+385.24097 4860.9
+386.02060 551.2
+391.39563 630.9
+396.98624 1115.2
+398.19061 758.9
+407.20090 650.3
+414.01208 4568.6
+427.51590 852.6
+432.02197 2267.3
+434.80096 709.3
+446.71750 1113.8
+450.99686 4087.4
+451.24783 4285.6
+451.49863 2092.6
+451.74924 753.2
+455.50317 716.9
+455.75211 932.4
+456.00360 686.9
+457.27972 2412.5
+458.28436 963.8
+462.01550 2364.7
+470.96817 831.2
+472.32260 2690.8
+475.29221 780.8
+476.96268 817.6
+477.20627 919.1
+478.20621 2005.9
+479.26804 1266.9
+479.51694 886.0
+479.69012 566.1
+479.77499 983.7
+482.62268 671.6
+487.99475 2907.9
+488.97852 9899.2
+494.61603 567.7
+494.76248 3205.9
+495.01407 3047.9
+495.26532 1732.3
+495.51422 1397.0
+496.75214 748.6
+497.24615 727.1
+501.74005 1585.4
+502.59708 33567.9
+502.93124 27519.0
+503.26584 10554.2
+503.59955 3468.1
+504.03189 1353.6
+505.02072 11130.5
+506.00470 24261.1
+507.00766 904.0
+516.33075 751.7
+531.97546 513.8
+532.48077 828.0
+532.52161 1870.0
+535.61969 6797.3
+535.95386 5034.2
+536.22949 590.8
+536.28888 2550.0
+536.62305 801.5
+543.35913 3727.6
+546.26685 2325.3
+547.78741 5397.3
+548.28821 3705.3
+548.78839 922.4
+549.14429 570.6
+556.34680 3465.4
+557.35138 1364.1
+573.31567 1489.9
+573.65216 1716.2
+574.35687 3718.2
+575.35736 1087.9
+580.57715 1000.6
+584.65442 1275.1
+584.98907 1098.5
+591.97906 2843.6
+592.31427 3015.6
+592.64752 1416.0
+597.98456 876.2
+598.31696 917.7
+602.80493 1745.1
+604.32349 953.2
+606.26538 697.4
+606.99683 30634.9
+607.33112 31056.4
+607.66492 14614.1
+608.00000 5850.2
+608.33459 1635.8
+609.79547 3147.4
+610.29517 2738.8
+610.79791 643.6
+641.28864 810.9
+642.99451 1112.5
+643.32336 1638.9
+659.68494 1148.3
+659.83081 758.3
+660.01257 650.7
+671.42090 1116.5
+676.63965 970.9
+753.39258 23400.4
+753.89423 21420.4
+754.39429 7865.3
+754.89709 3648.4
+766.39600 1716.2
+766.89429 1745.8
+767.39929 873.6
+768.47083 1376.8
+795.01776 674.7
+795.37646 8511.7
+795.55981 688.1
+796.37683 2898.7
+802.92841 4199.6
+803.42719 4685.0
+803.93237 2406.6
+817.79456 529.0
+848.63007 541.0
+854.47498 1118.6
+855.48920 1033.0
+905.23627 614.1
+960.82568 625.0
+1010.55286 641.9
+1027.98669 583.1
+1057.23755 905.8
+1104.89478 630.6
+1198.16138 3585.0
+1424.23145 696.6
+1443.33154 646.7
+1447.21057 651.6
+1525.29553 671.1
+1530.38464 626.3
+1782.71460 629.4
+1877.41113 705.3
+1878.37158 662.8
+1878.98767 1231.2
+1879.52588 20131.6
+1879.81494 2168.4
+1880.03662 1322.2
+1907.10559 7189.9
+1918.83240 657.4
+1930.48633 798.7
+S	1829	1829	1879.9218246
+Z	3	5636.49
+Z	2	3757.996
+532.55444 1838.3
+540.03955 616.5
+630.38672 1055.4
+639.50629 676.7
+668.55981 574.7
+795.57922 1104.3
+855.73901 632.0
+858.02356 780.1
+915.48657 649.6
+1198.23914 2887.5
+1198.35815 825.2
+1387.08875 638.3
+1512.59497 740.2
+1604.30188 609.9
+1626.67517 626.9
+1667.12561 792.8
+1777.63879 855.4
+1859.89746 623.9
+1879.53430 18308.9
+1879.95190 729.8
+1907.12598 7110.0
+S	1830	1830	1907.49024127
+Z	3	5719.195
+Z	2	3813.133
+532.53394 1866.3
+542.72473 538.7
+549.17542 1030.4
+630.43256 859.0
+731.14453 807.8
+795.55621 760.0
+798.44617 581.9
+832.70789 522.4
+1019.69641 650.2
+1057.24255 818.8
+1198.18811 3074.9
+1433.30640 644.1
+1625.79822 683.1
+1661.57288 647.5
+1777.74304 740.7
+1814.41418 617.7
+1878.60547 973.7
+1879.23315 4440.4
+1879.52979 18818.2
+1880.31604 989.4
+1906.85657 1725.1
+1907.13599 6588.2
+1911.24670 757.1
+1918.70691 768.1
+1930.70923 945.3
+S	1831	1831	640.7903921
+Z	4	2559.13027
+165.77365 1026.2
+167.96082 567.3
+169.99600 664.2
+170.59740 619.6
+171.64323 816.1
+173.95184 560.4
+188.25859 746.0
+188.27280 957.0
+188.27887 1201.3
+188.28958 1127.4
+188.30898 1241.6
+198.89409 796.7
+199.18106 759.8
+199.26663 1237.6
+199.27887 2368.6
+199.28850 1597.9
+199.30238 809.7
+199.36406 644.2
+199.37741 1045.6
+199.38538 628.8
+212.63991 685.1
+221.57460 592.3
+229.43053 609.3
+281.56100 559.1
+285.08759 829.0
+305.65082 934.8
+337.92438 658.1
+353.34488 624.8
+361.17728 847.7
+370.17078 4356.2
+370.67084 1274.4
+371.20453 1118.2
+379.17667 2317.8
+391.59491 575.0
+428.72763 864.6
+436.69119 1330.3
+437.19299 908.7
+442.42001 621.5
+455.14944 677.9
+459.27731 526.6
+482.23575 1123.7
+484.69568 648.2
+490.72150 546.9
+491.32953 637.0
+499.21909 899.6
+499.26010 1600.4
+499.72983 698.9
+521.21484 2070.4
+521.71655 1682.6
+529.72919 5885.1
+530.23163 2875.6
+530.73059 1055.2
+532.56042 1807.8
+551.23029 1137.8
+551.73499 758.2
+567.77905 709.1
+576.86993 656.0
+577.81799 1264.8
+578.31677 1412.1
+579.26300 2311.4
+579.76215 1500.4
+580.74933 1075.0
+581.25293 842.3
+589.01703 1726.0
+589.26672 2292.6
+589.51465 923.8
+589.77228 809.9
+591.79626 788.3
+593.77002 1114.8
+594.01959 732.1
+594.75336 1012.6
+595.95789 837.9
+599.27277 1088.5
+607.77655 1650.8
+608.27521 1644.8
+610.29352 3179.6
+615.27246 1264.4
+615.52704 1975.0
+615.77917 1632.3
+615.90887 652.8
+616.02808 824.8
+616.29822 6572.4
+616.63080 5168.6
+616.96454 2031.0
+617.29315 1289.8
+620.52692 1802.3
+620.77533 2047.8
+621.02893 2565.4
+621.61517 3138.4
+621.94971 4492.9
+622.28290 3015.6
+625.02948 14625.3
+625.28009 23109.7
+625.53101 12813.4
+625.78131 7625.9
+626.03113 2014.3
+642.57483 699.8
+651.29358 929.5
+657.31268 949.2
+667.30377 1558.7
+667.97070 868.0
+670.79987 695.3
+670.84387 536.2
+676.63696 777.2
+687.81549 1244.9
+688.31482 1654.8
+688.82306 857.6
+692.81049 2178.5
+693.31439 1945.9
+693.81232 891.4
+700.32458 2312.1
+700.82697 2526.4
+701.32690 902.7
+701.81506 12659.3
+702.31549 8773.8
+702.81763 2812.3
+703.31952 1092.9
+704.99615 2691.3
+705.33038 3739.9
+705.66455 2478.1
+705.99768 766.1
+720.32928 795.0
+734.88538 5722.8
+735.38586 4968.7
+735.89050 1706.5
+736.38550 917.5
+739.33234 1089.5
+742.00470 3525.4
+742.34192 5841.1
+742.67511 2835.9
+742.84192 876.4
+743.00720 1236.0
+748.01038 2323.2
+748.34528 4326.6
+748.67999 1908.0
+751.34967 7882.7
+751.85254 5474.7
+752.35278 2960.4
+757.34601 6167.7
+758.35089 1548.3
+779.02130 728.6
+781.85797 4378.4
+782.35822 3578.4
+782.86279 1673.6
+783.76263 837.6
+785.02075 12571.6
+785.35455 16937.6
+785.68860 9548.6
+786.02283 6172.0
+786.35529 1307.6
+786.68860 627.0
+791.02374 23308.3
+791.35791 27837.5
+791.69263 19084.5
+792.02625 9003.4
+792.35614 1810.2
+795.56580 894.4
+800.40137 787.2
+800.90289 966.3
+814.03076 1639.2
+814.36462 1838.2
+814.69879 2444.8
+820.03314 11159.1
+820.36908 13293.2
+820.70264 10502.0
+821.03711 5036.7
+821.36938 1209.0
+822.41144 965.8
+823.36127 978.1
+823.69464 2015.9
+824.03302 1021.8
+824.36438 842.4
+824.69537 849.7
+828.91559 4033.0
+829.41333 3606.3
+829.91901 1489.0
+834.37598 1240.3
+863.39392 2503.8
+863.88763 1931.7
+864.38110 1232.4
+864.88287 768.4
+872.37195 7461.2
+873.37433 3148.6
+874.37750 1133.7
+893.95605 740.9
+901.90198 3598.4
+902.40070 2121.4
+902.90332 1813.5
+908.22675 673.4
+913.88727 595.2
+931.91785 3263.3
+932.41943 3523.2
+932.92346 1391.8
+933.41138 1149.6
+966.43817 788.2
+966.93079 1661.7
+967.42688 973.8
+1000.44745 1814.4
+1000.95404 1194.3
+1040.44470 1298.2
+1058.45093 8361.6
+1059.45459 5301.7
+1060.45532 1364.9
+1128.81311 666.4
+1140.07910 750.2
+1157.52917 1040.5
+1159.51587 650.2
+1198.25928 3376.1
+1333.44238 690.4
+1416.42798 652.8
+1481.85474 676.9
+1588.12354 636.6
+1679.20825 675.5
+1777.71094 919.7
+1853.57642 754.7
+1877.08118 674.5
+1878.66467 1031.1
+1879.30371 6255.3
+1879.55688 17681.0
+1880.35571 1225.5
+1880.72070 1186.5
+1881.73010 724.6
+1892.83997 627.8
+1906.53943 702.8
+1907.11572 7103.0
+1967.37537 619.5
+S	1833	1833	562.216407933
+Z	3	1683.374
+Z	2	1122.585
+145.08710 36369.0
+149.34587 35247.2
+156.81219 41489.5
+158.29884 37418.7
+168.57133 35434.1
+175.17278 38052.3
+182.77913 44209.6
+184.02696 40526.0
+188.24779 63206.3
+188.27733 159205.9
+188.29507 139223.6
+188.35828 34351.9
+198.89714 65715.3
+199.18381 38985.8
+199.21117 50235.6
+199.21980 45336.0
+199.25421 57785.7
+199.26646 97636.3
+199.28194 181065.3
+199.29799 64286.5
+199.31982 60098.5
+199.33260 55184.8
+199.37903 71291.4
+201.10622 45994.8
+202.19856 38692.9
+226.07010 33810.6
+271.41614 39136.1
+276.22177 40051.6
+299.13425 97425.0
+317.56918 41316.2
+347.20605 72729.1
+378.88593 37994.7
+381.35358 47923.7
+384.22244 123017.8
+395.18945 43555.2
+412.17453 42638.4
+412.21848 125456.6
+428.71838 39530.6
+443.21912 50101.3
+445.60620 40735.1
+446.65274 38467.4
+469.19412 51023.6
+469.70523 48244.4
+473.22186 133674.3
+483.07092 43759.1
+503.75891 53123.6
+512.75940 58185.7
+517.75543 136656.1
+518.25220 43585.3
+532.49310 101981.7
+532.56427 40295.6
+532.60950 62344.3
+543.02924 40240.3
+549.14661 55382.1
+550.47772 49188.7
+559.61688 44905.3
+559.94855 59714.0
+561.21637 88722.8
+561.76440 87220.0
+562.25818 62397.3
+565.96631 80740.1
+610.78448 60445.9
+630.38855 48268.1
+632.09015 45515.3
+676.61066 60578.6
+710.35632 916998.2
+711.35895 358226.0
+712.36090 75641.6
+795.58167 50100.0
+823.43854 59163.8
+1019.71167 53978.6
+1131.06580 40181.6
+1144.55872 37563.4
+1198.12378 178062.1
+1308.50391 39567.5
+1399.91016 40185.5
+1525.38892 46835.5
+1592.27942 45444.2
+1594.41101 40069.2
+1659.18433 46324.5
+1814.59485 35644.5
+1820.17078 34472.0
+1876.79932 45949.6
+1878.12280 45026.1
+1879.03845 78705.3
+1879.46472 1405772.6
+1879.88123 99522.6
+1881.75159 49087.4
+1902.56030 49918.7
+1907.06152 486246.0
+1924.58276 40833.8
+1930.55664 71692.8
+1950.75305 38482.2
+S	1834	1834	611.3318246
+Z	2	1220.648
+157.00639 585.1
+176.08105 625.4
+177.11208 2434.0
+180.37241 554.2
+183.11404 644.0
+188.20544 689.8
+188.24921 945.7
+188.29163 2423.1
+188.32770 736.9
+188.34027 536.8
+188.36420 586.0
+194.54150 643.6
+198.89684 1351.2
+199.18201 1139.4
+199.19046 830.8
+199.23749 855.0
+199.24829 547.5
+199.27962 3006.9
+199.29771 842.0
+199.35324 714.6
+199.37753 987.0
+220.84770 651.9
+221.13800 1767.0
+229.04829 564.9
+236.13959 1550.3
+236.99690 553.4
+238.20892 595.8
+239.46031 640.9
+243.16139 558.9
+245.57698 506.7
+245.58636 533.4
+250.57718 723.5
+255.66093 628.4
+263.51489 663.6
+265.16486 2128.4
+266.14935 5356.2
+267.17972 702.4
+276.16626 2005.0
+276.34058 609.6
+276.53485 607.1
+280.19086 722.8
+281.12405 2373.8
+285.71677 565.0
+299.13446 7775.2
+307.15582 3037.5
+309.19034 2965.6
+320.91949 603.4
+327.20184 2308.8
+344.27521 641.1
+347.20331 10059.2
+353.18353 1025.2
+353.21667 3861.1
+354.21823 1006.8
+355.68201 8139.1
+356.18521 1013.6
+367.19226 779.7
+370.20593 854.4
+371.05341 638.6
+371.22678 2063.4
+380.19180 1108.2
+381.17664 3456.8
+384.22357 8842.5
+394.20782 1415.3
+395.19272 3984.6
+397.24252 3608.0
+398.20215 5180.1
+398.24609 1151.5
+407.33713 593.7
+412.21826 18537.2
+412.68182 639.7
+413.22104 1402.8
+415.24911 1420.2
+422.07605 577.3
+427.55493 1022.6
+430.33279 596.1
+441.26923 2762.2
+442.27148 1361.6
+448.25488 1722.6
+459.27930 2824.2
+460.28183 938.3
+466.26514 6047.8
+469.24521 10416.2
+469.74719 2133.6
+476.24692 13347.8
+477.25073 1389.3
+483.29175 17813.2
+484.29727 1678.1
+485.29459 3638.3
+486.29715 1437.2
+493.27606 3355.4
+494.25974 7602.3
+495.24380 1615.7
+496.68900 687.9
+503.30511 7606.3
+503.75568 19300.8
+504.25278 5503.7
+504.30740 2189.4
+504.75983 834.7
+508.74359 1469.1
+509.27078 777.3
+511.28595 16237.8
+512.29181 1565.0
+512.76093 20598.6
+513.26141 4802.4
+516.47443 696.9
+516.70398 566.8
+517.75201 4786.3
+518.25409 1535.7
+529.31714 649.0
+530.48163 621.5
+532.52679 2101.6
+540.22443 607.7
+543.27527 2351.1
+543.77484 621.2
+547.33167 10174.3
+548.33527 3073.4
+552.28235 10792.2
+552.77350 6321.5
+553.27600 1566.8
+559.94080 574.8
+561.28717 103286.1
+561.78845 27985.0
+562.28931 2443.7
+573.34778 3941.6
+574.34753 1540.0
+579.80432 891.3
+580.30615 697.3
+580.80560 1121.9
+584.29840 1147.6
+584.80298 734.9
+586.81055 761.8
+588.30847 974.5
+588.80786 1371.0
+589.83722 1288.5
+590.61102 1389.5
+591.35699 339357.9
+591.61029 1033.2
+592.10553 2125.9
+592.36072 97186.7
+592.60547 828.4
+592.70752 1031.4
+592.81128 3438.2
+592.88135 1722.1
+593.30200 6253.4
+593.36218 5843.3
+593.80328 1605.7
+610.77551 869.8
+630.42535 992.4
+646.32288 854.9
+670.58557 774.6
+676.63141 868.9
+692.34363 2986.7
+708.35333 978.1
+710.35638 184038.5
+711.35864 36365.9
+712.36127 3135.3
+744.72211 628.5
+745.39642 3148.0
+775.37256 1334.8
+795.58496 1017.8
+823.43970 17986.9
+824.44476 3260.7
+842.47345 2815.2
+856.43317 1290.9
+857.40955 1039.3
+874.43915 5371.6
+875.44037 1211.8
+888.03094 669.5
+920.45264 1020.3
+937.48279 23461.1
+938.48334 6463.5
+945.47290 1355.7
+946.47406 903.7
+1006.50488 1511.9
+1007.49341 1000.4
+1024.51465 22978.7
+1025.51819 6653.9
+1034.49915 1614.1
+1035.49512 1161.2
+1046.52161 2495.2
+1057.24365 793.3
+1121.57007 1945.7
+1198.17664 3558.8
+1772.42249 618.5
+1816.86377 780.1
+1878.12146 1204.1
+1879.01538 1401.3
+1879.20703 1744.8
+1879.51794 21020.2
+1879.82129 1840.1
+1880.04346 1252.7
+1880.27185 971.2
+1881.05054 1427.4
+1882.43005 724.0
+1907.07019 8061.1
+1930.63049 1055.1
+1936.30725 627.8
+1969.90027 677.7
+1987.99353 666.8
+S	1835	1835	611.8328246
+Z	2	1221.65
+160.53143 671.6
+169.51634 635.6
+174.34088 642.9
+177.11215 713.6
+188.24841 732.1
+188.25714 933.5
+188.26286 1061.3
+188.27242 897.8
+188.28203 1458.2
+188.29295 1326.5
+188.30560 947.2
+188.31360 1120.0
+196.51146 728.3
+198.89665 1019.2
+199.17122 737.0
+199.17867 1130.1
+199.21231 1291.0
+199.22563 794.0
+199.24307 868.1
+199.24858 910.2
+199.25731 1116.3
+199.26726 2496.6
+199.27773 2192.6
+199.36548 816.2
+207.53607 646.8
+208.34299 661.2
+212.87592 698.4
+212.88458 690.4
+226.17252 710.3
+236.13910 1339.3
+236.52457 724.1
+237.19365 984.0
+266.14926 8323.1
+266.62625 624.5
+267.15363 1218.8
+268.16528 1147.6
+271.30463 714.2
+276.16608 2701.6
+281.12399 2333.1
+284.24023 630.3
+297.15359 2206.4
+299.13425 7070.2
+306.37326 679.7
+307.15619 1918.7
+307.65891 757.0
+311.34000 708.6
+312.14819 1099.4
+315.16550 1536.5
+327.20190 1657.0
+336.82700 660.2
+347.20316 11287.3
+348.20651 1102.5
+349.06149 786.5
+353.18097 1609.8
+353.25375 2797.0
+355.68167 9005.6
+356.18375 4153.6
+357.34680 579.0
+361.85245 853.0
+370.20718 857.5
+381.17691 3694.6
+381.24927 1552.6
+382.83356 654.5
+384.22324 9915.9
+385.22739 1802.1
+388.98306 617.4
+394.20825 2127.7
+395.19214 5334.9
+396.19516 889.3
+398.20251 6107.9
+412.21805 22857.5
+413.22125 4116.2
+428.24939 3335.1
+448.25400 1937.2
+456.84882 616.8
+463.14447 597.5
+466.26465 7251.0
+467.26889 2074.2
+469.24487 13815.8
+469.74582 5506.7
+470.24844 1446.5
+473.63095 658.1
+475.26361 839.1
+476.24713 17683.4
+477.25162 3444.4
+479.93860 838.6
+482.67462 762.7
+483.29117 20362.8
+484.29449 5313.0
+485.30035 795.5
+486.29999 790.3
+493.27554 4697.5
+494.25943 10563.0
+495.26105 2518.5
+499.75150 634.7
+503.75549 24045.9
+504.25665 10581.1
+504.30640 1348.7
+504.75723 3183.8
+505.24326 1042.0
+508.74966 1421.5
+511.28564 25315.4
+512.28925 6662.2
+512.76044 27337.6
+513.26221 12737.1
+513.76367 3781.1
+514.39600 596.3
+517.34796 657.0
+517.75342 5861.4
+518.25421 4031.9
+518.75403 1233.1
+530.27338 855.0
+532.51703 2199.7
+543.27551 1848.5
+543.77802 810.1
+546.26642 3350.4
+548.33405 1799.2
+552.28131 11268.6
+552.77820 7851.9
+553.27576 4439.2
+553.77264 1054.9
+555.31842 3304.6
+560.58380 668.9
+561.28668 122179.7
+561.78790 69423.7
+562.28949 20609.2
+562.44556 665.2
+562.69604 740.7
+562.79016 2235.1
+567.28558 1418.0
+574.34863 1015.8
+574.89685 733.0
+578.29303 1132.9
+578.62488 1309.1
+578.96271 980.1
+580.80652 1068.1
+581.30518 863.1
+584.29218 746.0
+584.79517 952.3
+586.81641 655.8
+588.30792 1035.0
+588.80896 2249.3
+591.35626 6321.6
+592.36011 87130.5
+592.81036 3696.4
+593.30408 7521.1
+593.36334 9890.1
+593.80450 4229.4
+594.30951 1073.2
+594.36353 1559.8
+676.67358 838.8
+692.34277 1509.3
+693.35083 1272.2
+694.02563 775.8
+708.35773 943.8
+709.36945 628.4
+710.35596 205925.9
+711.35822 80361.3
+712.36090 15123.4
+724.59979 690.5
+728.36835 772.1
+745.39551 3220.5
+746.39368 984.8
+750.91571 853.9
+775.36755 2039.1
+795.37616 5060.0
+795.58063 700.6
+808.17767 640.2
+823.43982 19056.0
+824.44305 7807.7
+825.44812 2063.6
+842.47021 23290.1
+843.47333 2870.8
+857.41455 1891.3
+858.40961 1081.4
+874.43915 6192.2
+875.44293 2405.6
+876.43085 662.8
+920.45721 783.6
+921.45349 724.6
+937.48212 27730.1
+938.48425 13748.9
+939.48633 2694.0
+945.47113 2232.8
+966.34100 740.7
+1006.50397 1756.6
+1007.49188 2226.8
+1012.57123 1155.9
+1024.51416 27284.1
+1025.51782 14692.9
+1026.51917 3089.4
+1028.51514 1159.4
+1030.50684 710.3
+1034.48743 1012.8
+1035.48950 1460.1
+1046.52551 2639.5
+1047.52783 1310.9
+1059.33264 793.8
+1081.26196 669.3
+1121.57129 2276.9
+1122.56458 1492.6
+1140.35132 955.1
+1188.74353 672.8
+1198.15601 3777.2
+1311.32605 730.7
+1525.44495 993.9
+1812.59692 721.0
+1829.87891 729.2
+1878.40808 1149.5
+1878.99121 1607.4
+1879.24121 4603.4
+1879.61707 22406.9
+1879.98108 3633.8
+1880.35254 1666.7
+1880.68176 1216.7
+1881.28284 723.9
+1883.09961 780.4
+1907.08984 8030.2
+S	1837	1837	1879.91399127
+Z	2	3757.98
+Z	3	5636.467
+509.51770 600.2
+532.49927 1827.6
+551.60571 575.0
+630.45642 1082.3
+676.61493 1066.2
+676.71234 670.3
+676.76324 523.6
+731.17267 823.6
+767.12415 595.0
+795.57806 864.4
+843.08954 673.8
+886.77893 558.1
+1148.27563 611.2
+1198.11877 3388.7
+1211.45203 549.0
+1274.04163 557.2
+1310.67834 686.4
+1506.92896 700.0
+1525.54053 731.7
+1861.66467 585.7
+1878.68994 728.8
+1878.89893 790.2
+1879.34851 11297.3
+1879.63220 14190.6
+1907.10901 7331.4
+1930.77991 1037.2
+S	1838	1838	528.0720586
+Z	5	2635.32117
+141.50905 528.0
+144.96243 551.4
+145.20160 560.4
+148.16997 591.2
+155.06720 759.9
+157.59383 491.9
+157.82103 596.2
+159.13373 623.9
+161.22124 640.2
+186.07704 536.6
+188.19443 594.4
+188.26732 1994.6
+188.27574 2066.5
+188.29005 1859.6
+188.30128 2179.5
+188.31297 1273.8
+191.27422 564.4
+199.18779 656.5
+199.24648 1363.1
+199.26122 964.8
+199.27000 1167.7
+199.27892 1795.6
+199.28731 1403.7
+199.29610 812.8
+199.37677 775.6
+202.88158 630.5
+207.11186 1499.8
+211.44032 571.9
+213.08707 779.3
+215.13895 978.2
+233.16451 1447.9
+236.98878 589.1
+243.13503 1048.3
+255.27449 538.7
+258.15543 3592.8
+266.16251 979.1
+272.08676 636.0
+274.18710 1186.4
+314.13843 967.2
+318.64313 886.8
+324.14484 3299.7
+325.14996 901.5
+327.64563 2568.8
+328.11295 2239.1
+328.14740 973.4
+328.66772 4112.9
+329.17047 1076.3
+336.64972 1974.4
+337.15213 1495.0
+342.24948 636.1
+354.05832 626.0
+364.25742 816.5
+370.27655 656.3
+375.20569 8546.2
+375.53900 4802.5
+375.87375 1591.5
+378.17712 3730.3
+378.68018 941.5
+385.21011 1013.4
+387.18185 7895.0
+387.68512 2460.2
+387.89578 587.5
+388.18576 1171.6
+390.37219 601.0
+390.46136 754.9
+391.34607 507.5
+392.17325 1008.5
+394.46597 982.9
+394.71442 1251.5
+398.24554 897.0
+401.17908 3083.5
+401.68146 1802.3
+405.22812 2786.2
+410.18170 1061.6
+417.61368 533.3
+417.90280 1458.8
+418.23737 1541.4
+418.57108 764.8
+422.22354 1517.5
+422.47269 1531.6
+422.72015 1122.3
+422.97525 770.1
+426.87698 641.0
+427.52353 819.7
+435.17944 925.7
+443.26602 1089.6
+452.24042 2050.9
+454.99564 7687.3
+455.24667 9992.2
+455.49652 8692.9
+455.74646 3393.3
+457.71951 2106.2
+458.22089 901.7
+463.59015 6956.7
+463.92432 4921.9
+464.25754 1424.8
+466.72775 2250.9
+467.22641 1420.1
+470.23502 9976.2
+471.23859 2595.8
+478.25989 2252.3
+478.76221 774.8
+482.62479 597.1
+483.24823 628.8
+483.32986 969.5
+487.75504 700.3
+491.76291 7825.7
+492.01285 15601.2
+492.26303 9699.1
+492.51434 4428.6
+492.76636 809.4
+502.24200 3855.2
+503.24661 1041.0
+511.32745 2875.7
+513.52026 8774.8
+513.65790 638.7
+513.77124 12128.7
+514.02130 6535.6
+514.27264 3616.2
+532.49585 2199.7
+546.59271 669.4
+553.29840 1124.1
+554.16174 623.6
+556.94617 940.6
+557.29034 1372.2
+559.02905 1380.8
+562.30408 20222.8
+562.62616 20048.4
+562.80609 14728.2
+562.96039 22811.7
+563.00256 558.0
+563.29504 10968.3
+563.62823 3952.8
+563.80475 2087.0
+563.96692 1465.2
+568.63019 20703.9
+568.96429 22898.3
+569.29846 15938.9
+569.63220 6372.5
+569.96637 2145.6
+581.28363 2929.2
+581.82465 945.7
+582.28394 868.2
+585.26123 19921.2
+586.26416 4909.0
+587.26538 889.7
+594.65216 1189.8
+594.98657 1250.2
+600.31842 1199.1
+600.65515 2274.1
+600.98718 2453.8
+601.31763 680.2
+601.65448 592.9
+605.40857 606.6
+605.77753 593.3
+606.32477 75993.5
+606.65881 99721.8
+606.99286 68589.0
+607.32617 25086.2
+607.66125 8220.4
+607.77203 627.6
+607.99615 1716.8
+608.24200 658.6
+617.31378 499.4
+626.35114 6372.8
+626.85406 6450.6
+627.35187 1617.1
+641.33008 874.9
+645.33704 869.1
+649.67950 1269.7
+649.84680 1081.3
+650.00549 1256.2
+650.35742 1227.3
+651.33392 708.3
+651.67261 1202.7
+652.00092 661.7
+654.28302 14776.9
+654.85852 924.6
+655.28467 5267.4
+655.34753 34303.8
+655.68140 51465.4
+656.01563 31871.0
+656.30762 4447.0
+656.35791 10103.9
+656.68372 4583.4
+657.01697 1247.3
+657.32745 2716.2
+660.68005 793.0
+672.29340 22563.2
+673.29718 8514.4
+674.29688 1645.1
+676.66016 972.5
+678.69684 687.1
+684.35852 10854.1
+684.69208 16111.3
+685.02637 11032.1
+685.35968 3370.0
+685.69464 1466.1
+692.81348 1030.3
+693.30975 624.2
+694.36517 2291.3
+694.88068 2858.2
+695.38165 4090.5
+695.88525 1896.5
+706.36053 1030.3
+706.68628 893.5
+716.69910 1031.6
+717.03400 1719.2
+717.36682 695.6
+722.70105 4551.8
+723.03467 7159.2
+723.36890 4584.9
+723.70416 2550.6
+723.88141 1063.1
+724.03638 1301.8
+748.36139 708.3
+756.86163 3497.3
+757.36359 3971.2
+757.86377 2497.8
+761.38208 917.6
+769.41107 3206.4
+770.40973 964.4
+772.18915 680.0
+783.34290 1041.2
+787.91772 1754.7
+788.42230 3933.3
+788.92322 1366.1
+789.42609 1234.5
+795.55225 845.4
+801.34998 5480.6
+802.35254 2968.3
+819.36151 12711.1
+820.08929 580.5
+820.36542 6101.0
+821.37189 1975.0
+845.99976 575.2
+852.45166 956.6
+852.94305 1415.2
+956.52863 604.4
+1048.55090 1139.4
+1097.72485 656.6
+1123.60815 1289.9
+1141.53540 580.7
+1198.09961 3212.7
+1229.19653 583.6
+1246.76282 704.4
+1271.84753 547.1
+1447.17847 632.5
+1571.42383 598.4
+1667.06079 777.6
+1770.89429 677.5
+1878.61475 869.0
+1879.27441 3854.0
+1879.57642 19349.4
+1880.58655 575.1
+1880.84839 749.9
+1907.05225 7625.2
+S	1839	1839	567.4868246
+Z	3	1699.185
+Z	2	1133.126
+153.94492 76723.8
+155.98599 75399.6
+158.44730 79310.0
+163.33495 69925.0
+165.21944 83640.0
+165.57906 73146.8
+187.14380 393994.1
+188.25093 70519.3
+188.27422 136409.1
+188.28308 132558.0
+188.29056 128677.9
+188.29695 164704.4
+188.30556 128747.0
+197.12767 118163.1
+198.89201 148983.3
+199.19119 106235.6
+199.21358 88602.9
+199.22781 118858.6
+199.27777 214574.0
+199.28882 201615.6
+199.30263 147237.8
+199.31129 130360.2
+199.32581 92383.4
+215.13875 225634.6
+233.16452 4026785.0
+234.16798 509542.3
+261.15942 837222.1
+262.16275 105605.2
+263.11371 129464.0
+268.20111 124705.6
+269.18521 131241.2
+271.76526 75988.4
+275.13229 62317.4
+276.16577 214084.2
+280.17053 115540.0
+281.12393 461404.5
+282.12772 85697.7
+287.21164 115244.4
+289.19226 85627.1
+296.19681 603234.2
+297.15628 106549.3
+299.13470 1381340.6
+300.13858 163794.3
+307.15710 180846.4
+308.19196 79792.8
+308.88837 87377.1
+310.21115 98462.6
+314.20752 493658.0
+315.20889 144331.4
+316.21182 121238.7
+317.18491 156886.5
+323.73120 78044.5
+324.87738 75264.0
+325.15146 85283.8
+342.25998 111250.1
+344.19669 1481705.9
+345.20001 281001.2
+347.20331 855797.6
+348.20822 107198.6
+355.68222 941491.4
+356.18384 246443.7
+360.22748 87476.2
+362.20676 1637212.3
+363.21060 355474.0
+364.26093 110174.1
+367.19601 169078.7
+374.86017 89255.6
+380.16501 67064.3
+382.26962 227603.8
+384.22342 2407604.8
+385.22665 413236.0
+394.20734 329603.9
+395.19211 1072829.4
+396.19409 216657.5
+396.26498 84911.5
+398.24533 122468.6
+407.55170 194441.7
+407.88449 146741.6
+409.28021 157120.9
+412.21854 2777392.5
+412.25769 191436.5
+412.72604 115223.4
+413.22153 529376.9
+415.27112 87896.2
+416.25583 90858.8
+427.28769 90449.1
+429.28494 963049.3
+430.28781 234713.9
+433.27975 195029.0
+443.26459 1636576.8
+444.26682 350170.4
+447.29514 417911.7
+457.28012 3505377.3
+458.28299 964297.4
+459.28708 110822.6
+461.23260 113574.9
+461.27512 645146.3
+462.27930 179658.5
+467.58075 99474.8
+469.24487 1623616.9
+469.74661 662333.7
+470.24954 166616.0
+471.64902 74382.4
+472.92340 3283530.3
+473.25775 2240186.5
+473.59186 1030774.3
+473.92618 262135.5
+475.29053 982961.3
+476.24545 582653.6
+476.29385 144653.4
+477.25128 153169.8
+478.92801 483433.8
+479.26233 461470.5
+479.59488 186250.8
+481.27664 110416.8
+503.75604 1217665.6
+504.25601 553271.5
+504.75824 95485.9
+508.74771 591340.3
+509.25320 243940.7
+510.61847 620740.9
+510.95184 578567.6
+511.28754 232996.5
+511.32660 368074.9
+512.33020 142818.5
+512.76086 1323811.1
+513.26251 834602.6
+513.76288 218942.8
+517.75305 4027987.3
+518.25464 2010575.6
+518.75623 583517.3
+519.94867 144575.2
+520.28210 148523.0
+520.61035 89882.3
+523.02826 73847.9
+528.35291 1719834.1
+529.33337 350498.4
+529.36151 412911.2
+530.33392 139459.2
+531.27759 2025652.8
+531.61237 2130051.5
+531.94672 982669.3
+532.28058 310168.4
+532.50531 232935.8
+534.76471 105288.6
+535.26245 86717.6
+537.27454 142778.1
+543.27686 1413563.8
+543.77631 671336.6
+544.27466 239308.5
+544.62396 95897.0
+544.76965 121327.4
+546.36298 637175.6
+547.36682 132139.3
+552.28235 2346568.0
+552.78040 839961.8
+562.18597 81175.8
+601.81116 165693.2
+602.31671 172368.6
+610.82129 13680932.0
+611.32251 8414294.0
+611.82397 3078251.0
+612.32465 893078.5
+612.90808 87853.3
+613.30347 568759.4
+614.30469 218536.1
+646.33038 304456.7
+647.33759 116685.3
+667.36340 4353566.5
+667.86511 2873781.3
+668.36603 1031186.6
+668.86658 211400.0
+676.64789 133859.1
+692.34247 88098.6
+708.37311 80800.9
+708.88171 276589.8
+709.37915 359605.2
+709.88123 188261.0
+710.35669 14259662.0
+711.35974 5057626.0
+712.36261 1097250.9
+713.37103 128741.4
+715.86151 126929.4
+716.20416 98950.2
+716.36102 101544.6
+716.88275 185433.2
+717.37598 150751.2
+717.88733 30008794.0
+718.38861 23070834.0
+718.88940 10154713.0
+719.39160 2979316.5
+719.89783 658528.8
+720.06110 80673.4
+720.40918 213516.7
+731.09503 92467.7
+774.42828 176299.1
+775.37225 590999.3
+776.37421 159444.6
+779.91638 90268.9
+795.56458 132452.3
+796.41663 273750.1
+796.91522 259451.0
+823.44031 1218817.1
+824.44293 541888.8
+825.44843 160939.1
+846.40430 224136.3
+854.48059 186950.0
+937.48401 897796.6
+938.48926 456148.6
+944.91541 88864.7
+947.45544 261476.8
+967.55029 122346.2
+987.72992 74130.9
+1006.50391 112950.0
+1024.51672 234879.5
+1025.51489 226748.2
+1031.80701 87665.6
+1034.50061 548620.3
+1035.49670 422432.1
+1036.48669 211692.4
+1057.15649 84053.2
+1103.71106 88942.6
+1111.19629 69552.4
+1121.57019 824276.9
+1122.56995 470862.4
+1123.56030 127777.6
+1126.04590 73992.4
+1188.29663 104616.1
+1198.13513 431533.3
+1218.77917 76271.8
+1288.93799 80041.6
+1310.17566 72272.9
+1376.88135 77832.5
+1428.98828 78774.1
+1525.35522 83889.0
+1777.26917 106443.7
+1800.68225 78145.9
+1878.79370 81233.0
+1879.57385 2413377.5
+1880.29553 118225.7
+1880.90088 110833.0
+1907.09473 916113.4
+1907.35791 200226.6
+1930.54541 153061.0
+S	1841	1841	1879.9408246
+Z	3	5636.547
+Z	2	3758.034
+532.53064 1761.2
+630.45703 929.9
+676.63965 1326.3
+702.77246 671.7
+714.32245 596.2
+732.63110 585.1
+784.14691 653.9
+795.55090 774.5
+858.13403 931.2
+869.36133 613.4
+894.44049 625.4
+944.34961 568.2
+970.75452 645.0
+1017.56433 636.4
+1188.33899 694.3
+1198.18420 3752.1
+1330.57947 637.8
+1460.61755 674.3
+1525.52905 770.6
+1667.08594 636.3
+1878.85913 1581.6
+1879.21777 2890.4
+1879.53125 19954.6
+1879.82947 2236.4
+1880.22888 1214.4
+1881.45178 746.4
+1907.05066 8032.7
+1918.66931 1165.0
+S	1842	1842	1907.46640793
+Z	3	5719.124
+Z	2	3813.085
+532.50513 1453.0
+549.17151 859.2
+607.51233 641.2
+625.77039 649.3
+630.42889 597.4
+676.62854 842.9
+783.42255 743.5
+795.57330 1237.6
+870.32629 619.8
+880.22345 614.2
+1024.85303 566.0
+1025.03308 562.9
+1073.52441 752.4
+1128.09595 680.7
+1198.12866 2589.2
+1286.48547 581.8
+1595.49353 686.9
+1879.00659 1870.6
+1879.51416 19425.9
+1880.15430 2196.1
+1880.74231 952.6
+1907.04492 7413.5
+1930.63184 886.6
+S	1843	1843	1198.57824127
+Z	2	2395.309
+Z	3	3592.459
+318.47931 565.6
+322.13486 663.5
+333.11813 656.9
+350.28424 559.8
+467.88174 602.9
+507.35657 636.5
+532.49341 1641.0
+595.93945 621.4
+630.44537 717.2
+676.62805 865.9
+731.16516 925.8
+795.57391 912.0
+968.15979 749.9
+1057.24365 1205.7
+1058.31494 688.6
+1198.10620 2977.9
+1417.33215 653.6
+1609.49133 717.5
+1846.38098 666.8
+1876.00745 818.0
+1877.76282 705.9
+1878.68713 742.0
+1879.24939 4389.3
+1879.52039 19158.7
+1879.93909 2407.8
+1881.35718 691.9
+1907.07849 6757.4
+1930.73706 758.2
+S	1845	1845	562.216407933
+Z	3	1683.374
+Z	2	1122.585
+143.80101 580.5
+164.91273 527.2
+165.77301 780.1
+176.75291 579.8
+188.20302 744.7
+188.24089 728.5
+188.27136 2091.8
+188.28571 2029.3
+188.29512 1817.2
+188.30809 1650.1
+188.34065 569.2
+190.60512 674.7
+198.89812 1228.7
+199.18758 851.2
+199.25574 772.5
+199.26749 1461.3
+199.28450 2130.6
+199.30336 979.7
+199.31590 792.6
+199.32300 894.2
+199.33792 670.5
+199.35507 831.7
+199.38426 1189.4
+200.14005 792.0
+224.08028 642.8
+240.97334 580.6
+245.57108 582.7
+247.43895 569.5
+263.11273 1102.5
+270.14508 1172.7
+271.78165 646.3
+275.20248 629.4
+276.16626 1651.4
+281.12424 7239.8
+282.12830 808.4
+294.81207 546.6
+296.19543 894.5
+299.13446 18530.9
+300.13861 2477.0
+307.15601 1187.8
+308.92358 892.0
+315.16904 569.4
+325.15198 1132.1
+332.00592 536.8
+342.29675 739.6
+346.67972 1207.3
+347.20316 7345.6
+355.68179 7365.8
+356.18350 4111.2
+356.68518 1496.9
+367.19720 2260.6
+381.38721 625.4
+384.22351 22167.7
+385.22745 4185.0
+386.22849 790.7
+394.20801 3013.8
+395.19205 10031.3
+396.19580 1813.0
+408.01532 530.2
+412.21844 18261.8
+413.22202 3497.2
+429.28513 2484.4
+430.28586 1011.0
+457.28024 1157.8
+458.28400 641.2
+460.73181 1294.2
+469.24573 6639.6
+469.74667 4247.9
+472.87988 587.7
+472.92297 5771.3
+473.25848 3248.0
+473.59201 2329.3
+476.24533 8694.7
+477.24789 2055.1
+481.27441 1063.1
+482.69543 736.5
+495.24146 668.0
+503.75574 9073.8
+504.25745 5323.7
+504.76117 1205.5
+508.74719 5080.1
+509.24863 3196.4
+509.74554 1283.6
+510.23813 678.6
+510.61969 1760.5
+510.95096 1501.0
+511.28845 1507.9
+512.76044 11376.2
+513.26221 5139.3
+513.76599 1705.0
+517.75311 28521.0
+518.25427 17928.4
+518.75562 5506.0
+519.24402 1091.1
+522.11322 678.2
+528.35229 3190.4
+529.35730 1593.8
+531.27759 2959.4
+531.61108 4432.8
+531.94818 2711.8
+532.28088 1692.3
+532.47998 2238.4
+534.76160 1536.6
+543.27692 6400.3
+543.77386 5688.0
+544.27155 3210.4
+544.77600 836.0
+561.72577 730.6
+575.61047 728.1
+604.78479 578.9
+610.82104 4797.3
+611.32178 4677.3
+611.82526 2511.0
+612.32654 1422.0
+613.30402 6198.7
+614.30737 2346.9
+625.55359 564.0
+628.16040 731.7
+630.45099 738.8
+637.15619 616.7
+646.32898 2462.9
+647.32751 1071.8
+676.64178 978.5
+692.34460 2116.2
+708.35992 689.7
+710.29028 1544.0
+710.35632 143500.2
+711.35883 65586.5
+712.36157 13743.5
+740.35046 697.1
+775.37231 3276.4
+776.38098 1401.1
+779.31860 621.8
+795.57983 959.1
+823.44000 11440.9
+824.44183 6359.2
+825.44214 1360.6
+846.40057 992.9
+925.31415 589.7
+930.41534 681.4
+937.48248 6096.6
+938.48706 4501.8
+939.47760 927.0
+947.45593 1353.8
+948.45831 1151.2
+1017.47681 1052.1
+1021.22156 686.2
+1024.51306 2429.9
+1025.52234 2008.3
+1034.49792 3806.6
+1035.49121 3338.4
+1036.48499 1814.6
+1057.24646 726.7
+1065.48743 554.5
+1080.08447 596.9
+1117.55786 773.6
+1120.36121 620.6
+1198.06665 3834.3
+1222.26099 566.1
+1429.36487 620.2
+1471.56287 610.9
+1480.93689 563.1
+1525.54065 828.8
+1550.92078 528.8
+1777.07910 863.1
+1800.78308 567.0
+1810.95203 616.9
+1869.91431 733.0
+1872.65320 648.7
+1878.19067 529.7
+1878.55371 965.7
+1879.14087 3042.7
+1879.54578 19413.0
+1879.96924 3211.5
+1880.50769 906.9
+1907.05713 7425.6
+1918.69092 739.6
+S	1846	1846	611.3318246
+Z	2	1220.648
+157.40836 555.0
+170.50999 619.2
+180.14824 599.0
+182.79947 662.1
+188.24998 1055.9
+188.26830 1825.4
+188.27963 1835.6
+188.29027 1998.2
+188.30128 1932.5
+188.31148 1486.6
+188.46489 566.1
+189.19302 546.4
+198.89484 895.4
+199.17476 1217.9
+199.24173 897.7
+199.26364 927.5
+199.27284 3287.1
+199.29462 497.8
+199.30650 744.3
+199.37129 969.1
+202.48799 572.9
+203.71013 525.4
+204.42682 517.4
+211.01524 630.0
+212.93889 563.0
+214.65483 735.0
+228.67755 525.3
+236.13885 2460.7
+243.63528 604.5
+266.14978 6356.4
+270.14304 765.9
+272.09369 804.2
+276.16537 1422.0
+281.12396 1545.5
+283.99435 674.2
+284.16003 859.3
+297.15479 770.9
+299.13455 5108.9
+307.15598 993.9
+311.84866 516.8
+316.14020 572.9
+324.00372 550.4
+336.40457 644.0
+347.20346 9370.3
+353.17905 822.3
+355.68210 6709.3
+356.18225 1121.0
+380.19168 1160.2
+381.17560 2718.1
+384.22333 7068.2
+394.20892 1244.5
+395.19254 3818.8
+398.20300 4796.7
+412.21866 15976.3
+413.22235 1299.1
+427.56039 569.6
+436.63132 591.1
+438.11310 625.5
+448.25525 1685.1
+463.21243 706.1
+465.28479 1032.5
+466.26526 4651.5
+467.26764 597.1
+469.24539 9786.7
+469.74658 1505.2
+473.21140 690.1
+474.73019 645.9
+476.24719 12269.7
+477.24890 1294.3
+483.29141 14425.5
+484.29510 1379.3
+493.27536 3440.5
+494.25943 9070.4
+495.24197 1258.4
+503.75552 20386.7
+504.25171 3755.9
+508.74878 1329.1
+509.26743 721.8
+511.28595 19045.6
+512.28986 1631.9
+512.76086 21261.3
+513.26276 4423.7
+517.75287 4781.5
+518.25427 1168.0
+532.48108 2430.7
+543.27728 1509.6
+543.77405 798.0
+552.28241 8359.2
+552.77448 7168.6
+553.27588 2280.5
+561.28699 106182.8
+561.78839 26493.9
+561.97821 748.2
+562.29077 2793.3
+567.28888 1802.7
+580.80463 1408.3
+584.29803 1451.4
+585.94012 675.6
+586.81354 822.0
+588.30890 2028.4
+591.30371 516.5
+591.35785 4614.9
+592.36005 2507.8
+592.81091 3576.8
+593.30206 7212.8
+593.80627 1031.2
+604.10907 534.5
+676.63477 970.4
+692.34680 2044.4
+708.36444 1001.2
+709.36304 1010.1
+710.35657 158534.7
+711.35895 28068.9
+712.36084 3050.3
+712.42859 492.7
+728.36945 769.7
+745.39954 3215.3
+763.39905 1232.0
+775.37329 969.5
+795.57941 799.8
+823.44019 15084.9
+824.44019 2851.5
+856.43481 806.6
+857.40552 1214.7
+874.44025 4501.2
+875.43829 856.7
+892.26874 575.4
+920.45624 698.5
+937.48334 22130.4
+938.48480 5211.7
+945.47742 1844.1
+973.35413 590.6
+1006.50104 1571.8
+1007.48370 916.9
+1016.50336 571.9
+1024.51501 23531.6
+1025.51892 5482.6
+1034.49646 825.4
+1035.47290 692.1
+1046.52856 2425.2
+1047.53284 917.5
+1057.25000 812.1
+1121.57178 2416.4
+1126.46082 649.5
+1133.14172 570.3
+1198.07373 3518.2
+1207.82764 618.4
+1213.06726 616.4
+1308.24963 574.3
+1515.54028 721.0
+1525.54175 772.5
+1635.11182 607.9
+1651.38647 607.9
+1776.95728 690.9
+1876.19006 953.8
+1878.00281 900.4
+1878.42529 765.6
+1879.04773 940.9
+1879.53369 20482.7
+1880.01257 977.6
+1881.07434 1031.6
+1888.31360 540.4
+1906.81580 1338.5
+1907.08179 6981.2
+1918.75085 833.7
+S	1847	1847	574.7858246
+Z	2	1147.724
+Z	3	1721.082
+148.59431 2309.0
+157.61520 2805.9
+163.07234 2406.3
+171.63373 2586.7
+180.93991 2264.0
+188.26025 2301.3
+188.26967 3534.3
+188.27824 4414.1
+188.28584 4582.6
+188.29340 6195.7
+188.31230 4098.1
+188.31873 3665.6
+189.54565 2391.0
+199.17259 2613.8
+199.17908 2593.3
+199.24953 2639.1
+199.25734 3866.3
+199.26633 4790.6
+199.27669 14055.2
+199.29955 2980.3
+199.34306 3392.7
+199.35448 2549.0
+199.37517 3444.8
+199.39458 3164.3
+215.95128 2338.7
+230.92339 2275.8
+254.08936 2371.5
+272.25378 2682.4
+276.35739 2304.7
+289.02286 2827.8
+296.19644 4806.3
+296.63000 2089.8
+314.20566 5608.3
+328.22168 3347.4
+372.14130 2511.4
+462.80164 2760.1
+475.29034 5028.9
+516.69666 2567.2
+516.72021 2452.1
+532.47211 8158.5
+556.34747 9977.5
+583.59192 2447.9
+630.45477 4298.9
+676.65106 4632.2
+728.87347 3738.4
+732.48553 3095.0
+771.14105 2535.4
+795.59143 4038.4
+833.42657 2443.8
+841.30066 2434.8
+1055.53577 2750.4
+1057.28516 3417.5
+1187.95361 3733.1
+1198.05798 14442.3
+1524.34729 3585.2
+1533.81116 2158.3
+1613.69373 2861.5
+1614.21448 2309.0
+1678.95532 2480.9
+1712.25110 2723.5
+1877.33264 2504.3
+1878.25110 3550.4
+1878.58716 3351.7
+1878.93909 2531.9
+1879.27271 10018.3
+1879.54675 81703.4
+1880.54810 5586.1
+1907.02112 30741.5
+1907.29602 3062.7
+1930.71899 4221.9
+1931.86804 2456.0
+S	1849	1849	501.2584096
+Z	4	2001.00234
+149.08743 3914.8
+155.29388 4536.6
+157.59904 4951.1
+163.17006 3940.8
+165.77048 5994.3
+177.76233 4056.9
+180.46974 4041.0
+188.19223 4783.6
+188.20982 4067.3
+188.22197 5706.3
+188.24747 5318.5
+188.27065 6046.6
+188.28136 4169.5
+188.29764 5334.9
+188.30927 6393.4
+188.32161 6127.9
+188.34837 5260.3
+188.37097 4172.5
+188.37509 4297.6
+198.58388 4973.4
+198.89519 5600.2
+199.17534 5307.6
+199.21266 3978.5
+199.25667 11927.1
+199.27350 12361.9
+199.30142 10522.9
+199.32225 5820.6
+199.37329 5760.1
+199.41772 5268.4
+200.89915 4484.1
+210.69279 4964.7
+214.51015 4912.2
+225.67619 4282.1
+233.12827 13232.2
+267.14502 8344.3
+268.12915 26920.6
+271.36215 4534.6
+271.61276 4903.8
+272.64874 58422.4
+273.15012 15430.6
+285.15588 12802.4
+308.89935 3866.5
+312.66235 9883.1
+314.52853 4057.3
+321.17523 15279.1
+321.67511 6669.1
+341.68454 45662.4
+342.18649 16086.4
+342.26788 3844.3
+342.28015 4126.8
+379.70486 12024.6
+380.19379 22932.7
+380.69733 14270.9
+382.15067 3932.9
+388.70911 32667.3
+389.21048 14355.6
+389.71622 5503.8
+391.21774 29083.3
+391.72037 12000.8
+392.16312 5295.1
+392.22089 4510.5
+393.70184 13975.9
+394.18814 6782.8
+396.22372 28284.3
+398.18555 9889.3
+399.16913 15044.3
+399.87277 23331.4
+400.20633 8034.3
+400.54343 5254.6
+402.70673 35013.5
+403.20886 13985.8
+407.19327 5269.7
+413.25000 117022.4
+414.25327 22694.1
+416.19556 46003.2
+416.26068 19601.0
+417.19626 8071.4
+427.53333 6530.4
+430.22626 11990.2
+430.73019 6056.9
+440.75351 26463.9
+441.25238 10035.9
+459.71454 7493.7
+464.28659 14168.3
+465.28888 6199.5
+468.22589 32183.6
+468.72644 15068.2
+476.27078 131924.1
+476.77213 59716.7
+477.27203 14024.1
+480.23914 10754.0
+480.57095 15857.3
+480.90341 11581.3
+482.63739 4621.3
+485.00055 5565.5
+485.48889 4650.3
+486.23642 6748.0
+486.57678 373050.8
+486.91129 298354.0
+487.24512 129531.8
+487.57916 39949.4
+487.91379 8235.8
+490.80020 4091.5
+516.73450 12287.2
+523.24933 8891.2
+523.58514 6303.5
+525.27191 5778.4
+525.74603 5476.5
+526.23877 3654.4
+527.26318 122121.4
+528.26624 32209.1
+529.26801 5012.1
+530.25708 33748.0
+530.59137 32613.2
+530.92554 20380.9
+532.51202 13352.0
+533.78400 253428.9
+534.28552 121214.6
+534.78540 29399.7
+541.27905 17306.7
+544.28937 80754.0
+545.30219 47875.4
+546.31018 9568.3
+549.14935 4664.9
+551.87366 4201.0
+552.81360 3998.5
+563.35583 12135.3
+564.35419 7282.9
+589.95471 12805.7
+590.28741 11687.3
+590.62207 8823.8
+590.94946 5260.5
+591.29541 4640.3
+599.30426 431716.5
+599.80554 246859.2
+600.30634 116664.8
+600.80640 36652.2
+601.78662 21357.2
+602.28802 11260.0
+618.96912 218742.8
+619.30322 222079.0
+619.63751 117954.8
+619.97070 53039.9
+620.30408 19639.5
+621.23669 4368.3
+624.31451 6206.3
+625.31519 8909.4
+628.65002 5763.3
+630.39526 5892.0
+651.32080 13396.8
+651.82074 8065.7
+652.31415 4813.4
+662.32910 7375.1
+676.63635 8859.1
+680.83551 109759.6
+681.33740 86205.4
+681.83832 39429.8
+682.36407 50565.1
+683.36517 17787.6
+726.42108 8399.2
+727.75317 3587.1
+728.84552 4593.3
+729.36237 553532.2
+729.86322 419925.3
+730.36426 199602.1
+730.86603 64815.4
+731.36530 11689.2
+781.43036 31138.5
+782.43567 11608.2
+787.37891 53558.0
+788.38043 26291.4
+789.39178 5370.8
+794.88214 29557.8
+795.38269 13759.2
+795.56836 7458.9
+841.44232 29181.3
+842.44232 17636.3
+843.45837 5649.0
+898.46564 23517.7
+899.46631 18293.7
+929.01489 4107.1
+999.01819 4619.9
+1008.53528 3814.0
+1189.52722 4628.3
+1198.13745 23982.1
+1204.58545 4577.9
+1291.22400 4219.0
+1525.38940 5740.3
+1698.49927 5251.5
+1777.00879 5362.6
+1840.34021 4399.1
+1878.31970 5418.7
+1879.09399 13954.4
+1879.31787 23750.5
+1879.54297 141924.1
+1880.94812 6315.6
+1907.08862 54090.0
+1918.71716 6943.8
+S	1850	1850	1879.9348246
+Z	2	3758.022
+Z	3	5636.529
+532.41418 694.7
+532.47412 1592.2
+577.81537 561.7
+585.99902 566.9
+623.77319 578.6
+664.86670 611.8
+676.63165 1000.4
+795.57086 937.7
+943.08142 683.4
+1019.72601 797.9
+1198.06165 2913.0
+1286.98938 619.9
+1870.16431 974.1
+1878.73169 944.9
+1879.04858 609.9
+1879.51599 19619.4
+1879.78088 2206.4
+1880.27893 1334.7
+1880.55530 1147.1
+1881.37988 602.9
+1907.04993 7279.7
+1975.35071 675.0
+S	1851	1851	718.3068246
+Z	3	2151.645
+Z	2	1434.766
+187.14395 3817.8
+188.05049 697.7
+188.26517 696.9
+188.27380 692.1
+188.28719 1172.1
+188.29520 1000.9
+188.31664 733.3
+189.80595 658.0
+199.17450 787.0
+199.20303 783.9
+199.22369 668.9
+199.25262 1249.0
+199.27591 1934.7
+199.28610 1500.9
+199.32793 689.5
+199.37033 1173.4
+205.07597 618.5
+213.66821 597.7
+215.13895 3566.6
+235.11873 6694.0
+240.09753 981.3
+241.19130 3193.9
+242.66327 623.5
+243.44386 671.0
+244.43121 576.8
+255.30246 902.8
+269.18561 2321.2
+276.16623 1957.4
+281.12448 3572.6
+290.75403 728.3
+299.13486 11468.6
+300.13840 1444.3
+311.13483 1369.1
+314.20709 4975.2
+320.13495 1046.9
+342.20691 674.0
+342.28659 842.5
+346.14948 832.4
+347.20358 20021.5
+348.20728 2787.9
+350.28076 706.8
+355.68280 5562.4
+356.18198 818.9
+364.16104 2166.9
+366.14127 2275.2
+366.21246 851.8
+367.19556 1336.6
+381.17502 986.9
+381.37680 795.5
+384.22409 15762.3
+385.06583 626.1
+385.22687 2816.5
+386.22955 766.0
+394.20929 2178.4
+395.19232 7232.7
+396.19601 1433.4
+398.20319 1466.7
+412.21887 18952.0
+413.22247 4688.2
+421.17059 765.5
+427.22919 974.1
+427.56317 809.5
+431.17047 629.2
+435.19797 3603.5
+436.20508 702.8
+458.23581 1813.1
+459.21887 772.6
+467.19070 924.3
+469.24518 6470.9
+469.74701 3355.0
+470.24823 1369.3
+476.24591 13260.8
+477.24850 3365.8
+478.24304 780.5
+479.23059 669.1
+481.28140 697.8
+483.29633 1286.1
+489.26089 1868.8
+494.26633 872.1
+495.25558 1123.0
+498.29364 606.6
+503.75583 7567.5
+504.25815 3257.0
+504.75803 1159.6
+508.74936 2785.5
+509.25290 1846.3
+511.28668 3581.0
+512.29547 867.5
+512.76141 7915.5
+513.26318 5087.5
+513.76324 1433.5
+517.75385 11776.1
+518.22937 2425.7
+518.25757 5224.8
+518.75629 1785.9
+519.23547 1209.3
+532.48669 1623.8
+534.76813 804.8
+535.25916 928.6
+536.24634 3760.0
+537.25183 1460.5
+537.61383 1795.2
+537.94873 2568.8
+538.30493 3889.5
+538.80780 1556.3
+543.27777 6310.0
+543.77887 2808.0
+544.27948 1069.4
+552.28271 24165.5
+552.78308 15481.0
+553.27594 6158.9
+553.78076 2598.9
+554.25378 2215.3
+555.55182 722.4
+559.88318 1586.8
+560.38251 1148.0
+560.59473 1673.9
+561.07574 950.3
+561.10583 960.3
+561.18683 904.7
+561.20355 855.1
+561.23492 1430.3
+561.28754 393913.5
+561.78870 226288.3
+561.98187 1684.1
+562.28998 70045.4
+562.40594 609.9
+562.48596 1565.8
+562.69824 1659.7
+562.79144 13172.3
+563.28876 2433.0
+565.64874 797.9
+567.31073 772.3
+576.28894 1525.5
+577.29657 3724.7
+578.30096 796.8
+582.29022 901.5
+582.79572 1183.1
+585.80786 4330.7
+586.05878 5487.3
+586.30829 4612.6
+586.55634 969.1
+591.31195 1079.1
+593.82373 920.0
+594.32281 1870.1
+595.30670 5486.1
+596.31006 1319.1
+601.81683 6230.6
+602.31427 5146.8
+602.82477 8136.2
+603.32800 3897.1
+603.82843 2059.4
+608.34033 2346.2
+610.82153 95626.3
+611.32281 58789.0
+611.82410 18637.9
+612.32690 5738.1
+613.30511 9445.1
+613.65051 1850.2
+613.98334 1250.3
+614.30615 4009.0
+626.34888 1661.9
+627.35077 837.8
+630.43994 820.8
+632.31342 2671.7
+633.31293 1327.9
+638.83386 1315.7
+639.33563 1163.9
+646.32800 1845.5
+648.31860 2604.7
+650.32501 9907.2
+651.32178 2908.6
+651.67651 2312.9
+652.01312 729.3
+658.29242 1864.5
+658.73236 785.8
+660.33771 6982.8
+660.83899 4785.1
+661.34174 2480.0
+664.79974 559.2
+666.33038 4517.0
+667.33209 1512.3
+667.87878 684.6
+668.78387 1099.1
+668.99213 776.7
+669.29016 1283.2
+671.81989 1255.0
+674.33447 1925.9
+674.65271 1371.7
+674.81964 2302.4
+674.99200 4743.1
+675.15564 1669.4
+675.32184 6448.9
+675.68268 784.0
+676.29913 1740.9
+676.40997 5003.8
+676.65472 1167.2
+677.41748 1414.8
+680.39386 1059.3
+681.39856 892.8
+689.33667 1121.1
+689.53699 736.3
+689.92999 832.7
+690.38104 6573.3
+691.38666 2033.8
+692.34589 16680.1
+693.32544 10476.3
+694.32880 4109.3
+695.35345 970.0
+695.87274 2111.9
+696.34210 1604.8
+735.00195 703.8
+735.34576 1236.4
+735.75684 1340.4
+735.95673 1019.1
+745.95984 761.0
+749.55768 1443.1
+749.76129 2204.1
+749.95728 1996.9
+750.16010 1867.6
+758.14661 691.9
+765.34875 797.5
+765.56299 1071.8
+769.16650 1578.3
+769.36078 1249.7
+772.55890 818.7
+772.76697 1493.3
+772.97040 1334.7
+775.37140 2809.3
+776.37531 2014.9
+780.37543 1340.9
+780.56970 2324.8
+780.73407 2176.2
+780.97241 1063.3
+781.07544 4155.6
+781.40875 3729.6
+781.73975 1475.3
+782.08374 898.9
+783.97046 1265.6
+784.16925 2235.4
+784.36511 1469.0
+784.76025 959.2
+784.98389 824.1
+791.76996 3862.6
+791.97278 3685.3
+792.17175 2055.5
+792.36963 1491.0
+792.58752 764.7
+795.17554 1716.6
+795.36627 2082.3
+795.42633 1139.8
+795.57306 4682.6
+795.77649 3033.3
+795.97736 2366.4
+796.13696 894.7
+796.38977 1160.2
+805.91815 12856.3
+806.41992 10460.5
+806.58209 1377.5
+806.92200 4179.3
+807.42517 1357.9
+807.92725 1037.3
+809.38312 3356.6
+809.58270 5619.0
+809.78204 6409.2
+809.98456 4778.0
+810.18274 3189.6
+810.38092 1823.0
+823.44122 26070.7
+824.44379 10829.2
+825.44617 2638.6
+831.43158 725.9
+832.90521 1408.1
+833.15594 2106.1
+833.40826 1385.2
+839.42157 647.4
+846.40411 1679.1
+847.96136 902.2
+848.45935 1075.4
+852.34021 792.1
+855.42566 1041.5
+857.16644 945.4
+861.16406 1278.8
+861.42126 3482.9
+861.66608 3122.5
+861.91504 2810.4
+862.17590 764.0
+863.43060 14570.4
+863.93256 12761.2
+864.43274 7780.0
+864.93707 1472.7
+865.44446 762.3
+889.17487 2060.4
+889.41980 999.1
+889.67285 905.1
+892.66235 654.6
+893.43225 934.5
+893.67542 3400.7
+893.92865 3289.0
+894.17670 1708.7
+918.68842 2088.3
+918.93909 2458.2
+919.18756 3186.3
+919.44055 1402.5
+919.69550 1084.9
+919.97626 4767.4
+920.47449 7048.9
+920.97491 3213.0
+922.65637 738.6
+929.45227 814.5
+931.45471 835.3
+936.69427 2098.0
+937.19336 1079.5
+937.48444 15531.9
+938.48633 8333.1
+939.48547 2635.1
+947.45813 2184.2
+948.46490 1502.5
+956.39594 717.7
+958.76459 666.6
+959.53186 3769.3
+960.52747 1843.5
+963.39856 616.7
+976.52509 899.9
+977.01929 1852.5
+979.73120 850.1
+1006.49908 1083.7
+1024.51624 13491.5
+1025.51794 8335.4
+1026.52405 2379.6
+1034.49646 3203.0
+1035.49280 3289.9
+1036.49231 1303.7
+1057.26904 913.4
+1071.55139 838.0
+1074.04602 725.8
+1088.57178 4729.2
+1089.57764 3033.5
+1090.56543 833.4
+1103.55359 2923.9
+1104.54553 3787.0
+1105.55164 2011.2
+1106.57214 685.9
+1117.60815 776.6
+1119.61438 762.7
+1121.56812 207898.0
+1121.70361 930.3
+1122.56995 118518.4
+1123.57336 40007.0
+1124.57373 10183.3
+1125.56763 2275.8
+1159.61475 2282.1
+1160.61523 1857.5
+1171.50159 615.9
+1188.03528 601.0
+1197.95496 905.2
+1198.08789 2875.1
+1220.63684 6434.9
+1221.63464 3682.8
+1222.64270 1746.9
+1249.73279 639.3
+1260.66138 2742.2
+1261.66321 1624.7
+1262.68347 805.5
+1556.97668 638.9
+1803.60291 711.2
+1816.39392 682.9
+1878.10120 792.1
+1878.86353 1458.9
+1879.29883 4736.8
+1879.58655 18901.1
+1880.33203 1940.3
+1881.12854 681.7
+1906.37500 753.6
+1906.82349 1372.8
+1907.07422 7139.4
+1930.69373 1120.7
+S	1853	1853	562.216407933
+Z	2	1122.585
+Z	3	1683.374
+144.42029 32389.5
+145.24901 34801.5
+154.33365 34313.4
+163.58633 40047.1
+165.34306 40569.4
+165.77065 38137.8
+166.49846 36781.8
+167.61775 42743.4
+170.25908 41115.4
+175.66515 34198.2
+180.20526 40128.2
+188.24184 50145.1
+188.27875 148202.1
+188.30571 108017.6
+188.36609 34208.7
+198.89462 63224.6
+199.01973 40176.6
+199.17221 51394.0
+199.20184 60349.7
+199.24725 72837.5
+199.27045 117619.9
+199.27968 157530.0
+199.29085 74344.0
+199.36775 55514.9
+202.18954 35974.5
+211.02534 43541.7
+212.36919 33726.7
+223.46854 36225.6
+225.08908 37121.8
+228.79282 33719.6
+262.83347 36378.8
+299.13531 95418.4
+299.33676 42908.1
+306.61539 37976.7
+308.92307 38716.5
+308.94434 39788.6
+322.04224 37797.4
+347.20502 44333.3
+350.28107 56803.5
+355.62479 39388.5
+384.22281 107097.9
+395.19144 60481.7
+412.21777 105381.4
+427.57526 60245.7
+439.65219 40925.9
+440.20560 39362.5
+443.22733 36696.8
+452.01428 37765.2
+473.20160 56721.5
+476.25180 71580.6
+503.76041 45834.1
+510.11176 40154.1
+517.75690 90652.5
+518.75623 53543.6
+532.45667 106676.1
+532.51428 44370.4
+532.53021 36888.6
+542.99457 37666.5
+545.29480 39802.5
+549.19397 51838.2
+559.95099 95668.0
+561.21857 86264.2
+561.27411 49059.7
+611.26337 62813.5
+630.44629 57502.6
+660.45953 41134.0
+676.63013 73025.8
+684.45294 35121.6
+693.15118 35074.7
+710.35663 777779.1
+711.36017 325593.8
+712.36572 88611.2
+733.97864 35525.0
+769.60132 42380.4
+792.65430 38621.1
+795.57245 50739.8
+968.02179 41575.4
+991.07971 49214.6
+1046.03076 40442.9
+1057.23792 71598.1
+1122.39307 40890.2
+1198.03601 201846.7
+1198.18213 59632.0
+1214.39124 38486.1
+1297.91638 36821.6
+1336.98401 43717.9
+1377.23767 37127.4
+1462.90601 42959.0
+1770.85107 36309.9
+1870.27832 45031.9
+1876.16248 42952.4
+1878.40381 58799.1
+1879.23193 209965.7
+1879.51440 1286240.4
+1880.36414 77371.0
+1880.77649 52491.1
+1907.05493 485983.5
+1930.75903 60492.4
+S	1854	1854	524.3128246
+Z	2	1046.61
+144.88062 2449.5
+165.77243 3398.0
+175.11882 14834.4
+180.60922 2300.2
+186.12448 2820.2
+188.22885 2174.4
+188.25369 4685.4
+188.28609 9241.4
+188.29770 9486.2
+188.31534 5743.4
+188.32813 3478.9
+188.34882 2327.2
+188.35995 2510.5
+198.89447 3749.9
+199.17911 4347.5
+199.25517 5481.4
+199.27666 12774.3
+199.28717 3459.4
+199.29846 6025.4
+199.37492 6085.1
+201.12358 3411.2
+202.03130 2272.5
+202.08592 2495.6
+217.09712 42677.2
+225.03073 1895.0
+228.06564 15115.9
+229.11790 5840.2
+232.71965 2249.9
+233.19594 2450.7
+234.12352 14456.8
+241.85489 2217.1
+245.09192 87572.7
+246.09523 12550.1
+251.45744 2214.5
+262.11847 288270.6
+263.12216 33779.6
+267.63940 2481.1
+288.20273 66309.0
+289.20642 5706.1
+316.16507 40836.6
+317.16888 7062.8
+328.18738 4231.2
+333.19159 11574.0
+334.19788 2485.6
+343.17297 12785.7
+344.10120 2752.1
+344.16055 14264.4
+349.14627 2634.2
+349.32831 2907.0
+359.23962 191695.1
+360.24341 32461.5
+361.18652 102064.0
+362.19028 17369.8
+370.21277 2486.2
+373.14694 3508.0
+381.37613 3569.4
+391.16034 4878.4
+393.24725 20224.8
+393.74954 10583.3
+418.21237 2423.3
+423.36484 2614.5
+425.20306 10530.7
+427.19659 13247.3
+428.20172 2951.5
+442.22931 8271.3
+443.20709 2653.0
+443.22906 2606.5
+445.20734 50841.4
+446.21082 14817.0
+450.27039 5783.3
+455.19162 10447.0
+455.26254 3499.9
+458.30780 409455.5
+459.31110 94782.7
+460.25565 3229.6
+460.31433 8927.3
+462.23477 13885.5
+463.24054 3480.6
+466.65491 2489.6
+472.21921 7698.6
+473.20212 92927.6
+474.20639 21975.2
+488.98172 3038.3
+490.22858 91254.8
+491.23270 17815.9
+492.23145 2552.3
+499.29553 2585.3
+506.00415 4283.4
+506.28403 32783.3
+506.78418 15122.2
+507.00983 5712.4
+507.28552 4970.3
+508.00174 3047.9
+532.47137 8439.2
+532.50409 3514.2
+544.27448 15696.4
+545.28198 5301.0
+547.73279 2195.9
+554.25958 11766.6
+555.25873 2909.2
+557.37598 378567.9
+558.37897 127045.2
+559.38074 18124.5
+561.24078 4470.6
+561.30273 11917.6
+562.31122 2658.1
+565.94531 3095.5
+571.28735 22758.9
+572.26941 89141.8
+573.27362 21220.0
+589.29694 78309.2
+590.30029 24651.8
+591.30847 2792.1
+630.43951 3165.4
+643.34406 5329.8
+651.79260 2775.8
+653.33264 3239.3
+660.36395 6446.9
+668.40906 3386.1
+670.35626 7662.5
+671.33771 39285.4
+672.34088 15455.2
+686.41870 630015.2
+687.42151 243149.3
+688.36536 53284.0
+688.42487 47137.5
+689.36755 16332.7
+690.36597 2584.9
+742.37537 21711.1
+743.37848 8183.1
+757.71747 2742.6
+759.40363 31043.0
+760.40674 11480.5
+767.47479 3535.8
+785.48688 537614.1
+786.48956 235374.8
+786.64136 3050.5
+787.49237 43285.0
+794.29028 2427.6
+798.93488 2509.1
+804.40149 3576.8
+852.18304 2371.7
+854.46558 3581.7
+855.46069 19284.4
+856.46460 6863.0
+864.49329 2811.2
+872.48761 36317.8
+873.49219 14657.3
+874.49615 4534.8
+899.52948 24423.1
+900.53131 13161.4
+901.53711 2811.6
+910.49976 4433.2
+979.89600 2349.1
+1057.25879 3144.0
+1198.05640 13625.6
+1215.66565 2497.0
+1377.61694 2618.3
+1423.79956 2868.2
+1488.27954 2582.8
+1522.04163 2421.0
+1523.50745 2518.4
+1525.49561 2980.7
+1594.46277 2381.1
+1776.04492 2380.8
+1776.93042 2843.1
+1878.55688 4209.6
+1878.84509 5023.9
+1879.17786 12108.0
+1879.57800 77950.0
+1879.97046 8400.8
+1880.65332 4435.0
+1880.99548 2441.0
+1904.10718 3345.9
+1907.08130 30572.1
+1930.71216 3345.0
+1991.51233 2767.9
+S	1855	1855	501.2638421
+Z	4	2001.02407
+128.51109 570.3
+130.35416 645.6
+161.84035 673.3
+166.85587 591.3
+174.16049 630.4
+180.11334 533.3
+188.23753 643.6
+188.25308 753.7
+188.26549 785.8
+188.27568 1401.8
+188.29176 1134.5
+188.30136 786.4
+188.30795 782.8
+188.31523 730.8
+188.33076 814.4
+195.51270 523.1
+198.07042 624.4
+198.12408 942.2
+198.79887 637.2
+199.19666 908.6
+199.22905 713.8
+199.26675 903.0
+199.27547 1419.7
+199.28438 1841.0
+199.29440 1899.4
+199.32211 861.2
+199.38292 703.7
+208.14069 573.9
+233.12837 8768.5
+233.59122 586.4
+234.13211 1186.5
+240.13370 1467.0
+247.07501 679.4
+249.04137 552.0
+255.65523 1280.4
+259.67206 578.9
+261.12332 2308.1
+263.64319 2260.8
+264.13916 614.3
+267.14517 2574.5
+268.12888 7793.7
+269.13361 1146.6
+272.64896 18006.6
+273.15076 5869.5
+273.65460 1080.6
+274.14890 679.8
+280.20718 622.9
+285.15549 4781.6
+286.14221 1218.9
+288.22208 501.9
+288.42053 574.2
+298.66605 560.9
+303.17761 1731.2
+305.97247 511.6
+308.91986 596.5
+312.66132 2297.4
+313.16370 941.6
+318.11206 1855.1
+321.17542 3921.1
+321.67596 920.5
+337.18747 1344.9
+340.35040 617.0
+341.68500 15858.7
+342.18668 5535.6
+342.68854 1592.1
+350.27707 747.0
+355.28964 604.6
+364.70883 1711.7
+365.20779 820.4
+379.70398 4478.6
+380.19403 3360.2
+380.69641 2727.6
+381.19556 1137.6
+385.20883 853.3
+388.71021 6046.9
+389.18433 861.2
+389.21130 4000.4
+389.71271 921.8
+391.21924 8534.7
+391.72076 4045.9
+392.16385 1128.6
+392.22266 811.1
+393.70230 3018.2
+394.20850 1188.5
+395.19113 602.8
+395.24084 1164.5
+396.22397 9324.0
+397.22699 2341.7
+398.18445 3166.7
+399.17059 4239.6
+399.87299 4447.1
+400.20676 4219.3
+400.54025 1800.3
+402.70703 8247.6
+403.20844 5368.7
+403.70844 1393.4
+413.25034 34629.5
+414.25345 7824.1
+415.25787 1367.2
+416.19586 14673.1
+416.26154 9001.2
+417.19833 3467.1
+417.26349 1935.4
+421.71497 1141.3
+427.57370 783.2
+430.22806 2515.1
+430.72803 1775.3
+431.22641 996.9
+440.75296 6696.0
+441.25436 3778.8
+441.75522 1001.3
+444.22711 1300.6
+457.21661 1331.0
+457.71509 2032.4
+458.37460 731.0
+459.22287 812.8
+468.22714 6176.5
+468.72870 3657.8
+469.22858 1345.1
+472.87268 611.6
+475.23090 617.2
+476.27164 38247.1
+476.77325 20492.7
+477.27411 7237.9
+477.77560 1100.1
+478.98700 703.6
+480.23709 4199.5
+480.57077 4340.2
+480.90472 3112.1
+481.24146 2694.9
+481.57376 1142.6
+482.68988 654.1
+484.74658 821.5
+484.99686 961.5
+485.24106 1085.2
+485.48853 1505.8
+485.74127 1959.0
+486.57755 68533.4
+486.91190 55559.4
+487.24603 16535.0
+487.49301 643.8
+507.18991 2421.2
+508.19278 775.0
+512.74335 677.8
+516.73627 2937.0
+517.23572 1410.0
+519.34882 554.0
+521.73499 1295.7
+522.24182 1572.2
+523.25006 1690.5
+523.58307 1797.2
+523.91742 1647.8
+524.78247 1062.1
+525.27057 1112.3
+526.27985 1092.8
+527.26361 36450.8
+528.26691 11670.1
+529.26685 2425.9
+530.25739 9283.7
+530.59155 7925.1
+530.92535 5100.3
+531.26031 4030.7
+531.59613 1009.2
+532.42981 2090.2
+533.78461 59342.3
+534.23877 780.3
+534.28583 40166.3
+534.78723 13576.7
+535.28979 3118.5
+541.27899 5129.4
+542.28656 1622.5
+544.29028 21751.1
+545.30237 17264.5
+546.30933 4134.5
+547.31128 1021.3
+549.19385 702.0
+552.25494 3039.9
+552.75214 2157.4
+555.32031 916.3
+556.32990 791.9
+559.91992 693.4
+561.76202 1067.1
+579.23419 631.0
+590.29950 2275.6
+590.80005 2038.8
+599.30493 116362.1
+599.80615 92027.6
+600.07526 819.9
+600.30646 45241.5
+600.80737 15590.0
+601.30688 3726.9
+601.78668 4874.5
+602.28687 4394.7
+602.79156 1928.6
+603.28650 909.5
+603.96875 818.1
+604.28223 1029.8
+611.29211 1889.0
+612.96680 1506.4
+613.63196 1234.9
+618.96979 51454.3
+619.30383 65710.3
+619.63776 46795.8
+619.97125 26289.2
+620.30530 9926.5
+620.63928 2766.4
+624.31879 1097.9
+624.98285 809.4
+625.31683 1862.7
+625.64429 970.9
+651.32117 3717.1
+651.82166 3167.9
+652.32373 1221.1
+653.30414 1164.9
+655.80084 803.1
+656.30170 722.0
+658.29547 1257.9
+662.33081 1612.2
+676.65948 1125.0
+677.29303 2161.4
+678.29675 1329.9
+680.83636 32837.3
+681.33801 28617.3
+681.83862 17437.3
+682.31116 2111.7
+682.36688 17773.6
+682.84277 2442.3
+683.36578 8784.6
+684.36713 2466.4
+720.36066 1325.5
+720.85907 1388.7
+721.36292 960.8
+727.09058 644.7
+727.65985 848.3
+729.36285 133317.4
+729.86377 124934.6
+730.36469 78194.9
+730.86615 32607.0
+731.36615 10794.9
+731.44299 687.7
+731.86877 2118.9
+731.94556 903.0
+776.36090 1704.0
+777.36194 1071.7
+781.43091 10879.4
+782.34943 889.6
+782.43451 5293.1
+783.44354 1568.0
+787.37903 15705.0
+788.38019 6931.5
+789.38269 3518.4
+794.88348 7331.6
+795.38409 6648.2
+795.57465 1138.7
+795.88373 4012.5
+796.38080 1350.1
+804.40161 1666.0
+805.40308 956.2
+880.49615 2044.8
+881.51117 1055.2
+882.72040 650.0
+904.36908 1921.8
+905.36371 1194.1
+951.53784 1872.7
+952.54138 947.0
+975.41754 916.2
+977.23163 714.4
+1024.47827 713.3
+1038.66138 835.0
+1150.02673 601.0
+1173.56543 800.9
+1182.89734 634.2
+1184.39563 624.6
+1197.95459 3541.9
+1448.71423 603.6
+1470.24329 629.2
+1525.50989 999.7
+1876.37378 582.7
+1879.18262 4499.7
+1879.57629 18237.8
+1879.98621 4272.7
+1880.61560 1015.0
+1907.03223 7255.6
+1930.73633 1243.0
+S	1857	1857	501.2579221
+Z	4	2001.00039
+128.57831 669.7
+131.20940 538.8
+134.24667 603.8
+134.38860 503.9
+144.98866 514.3
+151.10439 674.9
+152.09970 539.5
+154.69771 600.6
+157.60503 652.9
+163.20778 576.3
+174.47354 891.6
+174.80966 520.0
+181.65468 639.6
+187.25034 523.8
+188.22702 727.6
+188.24602 553.5
+188.25462 867.2
+188.26547 703.0
+188.27394 620.2
+188.28654 678.0
+188.30251 773.6
+188.31442 716.7
+188.35196 696.5
+188.36208 694.1
+194.94913 645.9
+198.12245 1042.0
+198.89780 988.2
+199.17274 604.4
+199.18034 557.7
+199.19659 799.1
+199.22047 606.0
+199.27457 1700.7
+199.28537 1989.1
+199.29445 1629.4
+199.30571 667.7
+199.31642 589.9
+199.37621 935.7
+199.47652 647.7
+223.07199 921.7
+233.12843 9159.5
+234.13171 1764.2
+235.91013 554.2
+237.13341 919.5
+240.13371 1083.5
+241.11554 661.0
+247.07497 711.0
+250.11908 811.7
+251.06679 629.4
+251.10283 606.8
+255.65437 1412.4
+261.12344 1709.5
+262.13107 681.9
+263.64383 1701.5
+267.14502 3177.5
+268.12918 10153.5
+268.34277 595.0
+269.13290 1753.5
+272.64905 17272.5
+273.15073 5878.2
+285.15579 5809.7
+286.14069 1258.5
+286.16150 676.3
+287.14783 576.4
+303.17740 1835.6
+303.81671 596.7
+305.02252 601.7
+307.24619 576.7
+312.66226 1949.5
+313.18604 1189.2
+318.11060 1299.6
+321.17526 4781.2
+321.67697 2409.7
+327.86050 567.1
+331.67084 674.1
+337.18665 1381.2
+341.68484 16829.6
+342.18655 6986.2
+342.68845 1235.4
+349.09067 680.5
+350.01935 553.9
+364.70755 1916.8
+365.20999 803.1
+379.70410 3371.2
+380.19421 4729.1
+380.69681 3130.7
+385.20718 1450.0
+388.70950 6770.4
+389.18521 841.2
+389.21039 4674.8
+389.70895 781.7
+391.21887 9921.8
+391.72086 4736.0
+392.16281 1538.9
+393.70200 3315.5
+394.18268 863.0
+394.20703 1831.1
+396.22391 9985.4
+397.22760 2080.3
+398.18567 2328.8
+398.22723 693.1
+399.17004 4313.7
+399.20636 645.3
+399.87244 4783.5
+400.17258 920.9
+400.20654 3972.1
+400.54053 1313.9
+400.87650 788.6
+402.70657 9348.1
+403.20859 4340.5
+403.70859 1240.4
+413.25031 36794.9
+414.25375 7123.3
+415.25589 1209.1
+416.19583 14879.5
+416.23294 904.3
+416.26144 8997.6
+417.19617 2988.8
+417.26541 1512.4
+421.71463 1146.0
+422.21509 712.0
+427.55380 747.8
+430.22720 3443.7
+430.72772 2261.0
+434.05295 539.9
+440.75296 6756.2
+441.25485 3147.3
+444.22830 1145.0
+457.21503 2733.7
+457.71634 1083.8
+459.71094 1309.0
+468.22699 8211.6
+468.72867 2610.5
+469.22775 1588.1
+472.84848 581.9
+476.27148 41303.7
+476.77289 22580.5
+477.27344 6528.3
+477.77579 2191.1
+478.99384 884.0
+479.24860 1420.3
+479.49408 768.3
+480.23672 5743.8
+480.57123 4414.7
+480.90530 3561.7
+481.24191 1424.8
+485.00211 788.8
+485.23846 1677.9
+485.48672 974.9
+485.74017 832.4
+486.57751 63463.5
+486.91183 46495.8
+487.24539 7548.9
+507.19031 3210.8
+508.19409 1535.5
+513.13940 526.0
+516.73602 2268.3
+517.23303 1563.4
+517.73029 1041.2
+521.73431 1421.5
+522.25409 1122.2
+523.58441 1728.1
+523.91895 1361.1
+524.77826 921.1
+525.26752 894.2
+525.73816 1252.6
+526.24146 984.1
+526.35089 615.4
+526.63147 566.7
+527.26367 36330.7
+528.26685 10495.0
+529.25616 1773.6
+529.59552 646.6
+530.25732 7869.4
+530.59180 6953.9
+530.92603 5653.5
+531.25848 2030.7
+531.59375 1150.0
+532.47363 2001.0
+533.78473 65250.2
+534.28589 41804.0
+534.78723 17881.5
+535.28888 4324.7
+535.79083 821.6
+537.73645 920.4
+541.27960 4687.5
+542.28235 1734.5
+544.29022 22065.5
+545.30304 18337.3
+546.30865 4781.7
+552.25366 3049.7
+552.75659 2207.1
+553.25000 963.1
+561.25305 845.4
+590.29730 2246.9
+590.80090 2099.9
+591.29901 1313.3
+597.96808 591.1
+599.30493 127877.1
+599.35895 763.6
+599.80609 96997.4
+600.30664 49027.7
+600.80750 13792.4
+601.30579 3808.2
+601.36847 677.2
+601.78595 5348.3
+602.28839 4326.4
+602.78973 2353.2
+603.28540 1250.2
+609.63324 777.4
+610.79150 1218.3
+612.96747 1141.8
+613.30042 2552.3
+613.63281 1779.3
+614.29279 880.9
+618.96967 53536.1
+619.30371 69542.2
+619.63757 47802.2
+619.97137 21266.7
+620.30536 7319.1
+620.63910 1911.3
+624.31366 1517.5
+624.97461 1228.0
+625.31342 1366.8
+625.66003 665.3
+628.31396 802.1
+644.70428 652.0
+645.31152 963.8
+651.32178 3798.8
+651.82318 2239.5
+652.32489 1973.9
+653.30847 1122.8
+655.80182 827.0
+656.30145 824.7
+656.79279 630.2
+658.30109 1141.2
+659.28168 848.9
+662.33417 1735.5
+671.82782 858.6
+676.31726 947.2
+676.63574 646.4
+677.29248 2156.7
+678.30133 1104.5
+680.83612 38635.1
+681.33765 34112.1
+681.83868 17317.7
+682.31232 2961.6
+682.36774 16786.6
+682.84052 1812.1
+683.36572 8606.7
+684.36481 1443.7
+720.30994 975.0
+720.36389 1162.3
+720.85870 1534.9
+721.37000 938.7
+723.01196 595.1
+727.78821 777.4
+728.33539 777.9
+729.36298 146458.3
+729.86377 137565.5
+730.20251 906.1
+730.36456 76727.7
+730.86566 27706.2
+731.36688 7563.5
+731.86859 1431.0
+731.95709 868.8
+776.36035 1869.5
+777.37006 757.2
+781.43097 13211.7
+782.43292 5400.5
+783.43097 2002.3
+787.37964 16149.2
+788.38324 8523.5
+789.38263 2107.1
+790.37915 814.6
+794.88391 6386.3
+795.38373 6770.0
+795.58160 722.7
+795.88501 3684.6
+796.38727 2455.9
+804.40875 1346.2
+840.90149 875.3
+858.08038 785.5
+880.49384 1998.1
+881.50220 964.5
+883.62170 629.7
+904.36804 1981.0
+905.37134 827.6
+913.42139 809.1
+951.54016 1790.7
+975.40289 894.3
+976.40503 726.0
+1057.23047 914.3
+1066.55933 1162.1
+1074.47412 1248.5
+1198.06006 3149.8
+1256.52551 689.3
+1435.97705 616.9
+1609.12866 582.5
+1685.70801 721.0
+1865.69141 693.5
+1872.64819 634.0
+1877.72205 878.3
+1878.73657 787.9
+1879.50964 19886.7
+1879.79785 1424.3
+1879.94788 1572.3
+1880.28723 781.9
+1880.67358 548.7
+1880.84875 580.3
+1907.10071 7205.5
+S	1858	1858	1879.95240793
+Z	3	5636.582
+Z	2	3758.057
+512.27753 614.3
+530.74176 682.0
+532.53644 1643.0
+572.43878 614.6
+598.54535 675.9
+630.38104 676.8
+638.47894 657.7
+676.63824 939.9
+686.94025 534.6
+698.15198 635.3
+713.05188 664.0
+789.58130 677.2
+795.56335 710.1
+806.45770 720.2
+868.81793 646.9
+912.83997 741.9
+1017.48578 585.7
+1018.61444 651.6
+1021.14484 652.6
+1108.45239 633.5
+1198.20410 3018.7
+1361.03198 680.5
+1446.22656 633.0
+1474.41980 677.8
+1517.59766 620.0
+1817.81152 683.9
+1876.82288 1106.4
+1878.76660 1250.5
+1879.53552 18901.6
+1880.05066 1178.9
+1880.36914 682.2
+1880.65356 631.1
+1881.90613 722.0
+1906.85876 1726.2
+1907.14417 6714.5
+1930.57849 930.8
+1954.76648 825.7
+S	1859	1859	718.090407933
+Z	2	1434.333
+Z	3	2150.996
+187.14407 1342.2
+188.26845 812.3
+188.27667 1003.8
+188.28574 1157.1
+188.30014 1075.4
+188.31078 716.5
+198.40536 603.7
+199.24463 586.9
+199.26125 1453.5
+199.26938 1180.1
+199.28384 1341.6
+199.29639 1424.5
+199.31961 605.4
+199.35912 901.1
+199.38264 852.5
+200.32072 599.7
+211.49074 613.6
+215.13918 1447.0
+216.06990 643.2
+235.11884 2613.1
+240.09631 856.0
+241.19099 1509.4
+269.18726 1694.2
+279.74826 639.5
+291.61871 701.2
+299.13516 4835.0
+300.13843 874.8
+301.11395 1255.5
+311.13440 2600.4
+314.20731 2786.4
+347.20343 9698.3
+348.20728 1427.8
+355.68301 1666.6
+356.18405 814.6
+364.16159 1151.6
+364.19104 840.8
+366.13947 812.5
+380.19312 737.9
+384.22336 5806.6
+385.22800 1315.9
+392.06854 687.0
+394.09149 615.0
+394.21179 763.0
+395.19205 3745.3
+406.81436 661.0
+411.26370 678.0
+412.21875 9557.5
+413.22318 2420.7
+427.56558 789.0
+428.82266 629.1
+432.26266 739.4
+435.19806 1568.6
+436.20038 890.5
+458.23755 750.8
+469.24478 2801.1
+469.74570 1746.5
+476.24591 6659.2
+477.24863 1781.2
+489.26294 1629.7
+489.76447 1141.2
+503.75729 2089.3
+504.25607 1256.0
+508.74747 1726.9
+509.25055 1199.1
+511.28391 1345.4
+512.76135 3533.3
+513.26257 2742.9
+513.76392 1572.0
+517.75403 3791.9
+518.25671 3012.2
+518.75568 1523.7
+532.51855 2144.9
+536.24329 1723.6
+540.20587 1707.9
+541.82751 639.7
+543.27722 2956.2
+543.77679 1611.7
+549.16931 669.4
+552.28278 10929.6
+552.78284 9169.7
+553.28326 4146.8
+553.78534 798.3
+554.25732 1062.0
+559.88562 799.2
+560.60028 868.7
+561.28748 180805.0
+561.74146 791.8
+561.78870 139754.0
+561.98724 1021.1
+562.28998 53854.8
+562.46271 967.7
+562.79138 11994.1
+563.28864 804.6
+570.40277 763.6
+572.72839 614.4
+577.29712 1603.7
+582.79126 734.3
+585.80707 6439.9
+586.05768 8744.8
+586.30902 7320.9
+586.55884 5392.6
+586.80945 2437.6
+587.05530 837.0
+594.32111 1018.9
+595.30646 1989.8
+601.81445 3031.1
+602.31433 3045.2
+602.81342 1553.8
+608.33575 1458.7
+610.82135 39514.0
+611.32281 35113.0
+611.82397 16499.7
+612.32452 4792.2
+613.30603 3599.1
+614.30566 1714.0
+626.34583 1226.3
+630.42767 986.1
+632.31305 1418.7
+638.83618 1785.4
+639.33636 1554.7
+650.32513 4786.7
+651.32465 1342.5
+666.33362 1686.6
+669.15601 1127.8
+669.32135 917.3
+671.81641 1829.8
+671.98413 3741.4
+672.15509 923.6
+672.32623 1262.7
+674.64911 1212.1
+674.81958 5397.3
+674.98584 4390.6
+675.15338 4800.1
+675.31982 3443.1
+675.48413 820.1
+676.40924 4173.9
+676.65192 1076.0
+689.53204 939.0
+689.73383 1753.7
+690.37988 2301.6
+692.34637 6976.9
+693.32404 4499.0
+694.32971 1887.2
+695.37622 1976.9
+695.87793 1484.0
+696.37537 1257.7
+700.37018 1388.2
+700.86761 1209.0
+727.37061 1281.3
+731.16693 768.9
+732.74506 687.6
+735.34979 1156.5
+735.55347 2054.3
+735.75665 2194.4
+736.15460 732.3
+739.04968 828.1
+745.95288 1099.2
+746.15820 1966.6
+746.35999 2139.9
+746.56329 1203.2
+749.36023 1911.2
+749.55841 3480.6
+749.76123 4122.6
+749.96021 3735.2
+750.16632 1607.1
+750.55615 797.5
+757.55457 913.8
+764.13251 954.2
+764.38477 1258.0
+765.76819 885.3
+768.96252 2098.4
+769.16296 1404.9
+769.37085 2282.8
+769.57318 1338.1
+769.76111 834.1
+772.57306 1650.9
+772.76379 2429.4
+772.96619 2947.9
+773.17218 1142.2
+773.55615 715.1
+775.37201 832.7
+776.37531 827.5
+777.16815 958.8
+780.36768 3461.4
+780.56793 3314.1
+780.72876 2237.1
+780.79120 1370.8
+780.96973 1741.4
+781.07465 7738.5
+781.16895 772.2
+781.41003 8096.1
+781.74182 3498.0
+783.97144 3647.6
+784.16766 3879.3
+784.37000 3741.2
+784.57025 2374.9
+788.57623 1495.9
+788.97504 1247.3
+791.56946 1135.6
+791.62592 1019.6
+791.77283 2754.0
+791.97351 4073.8
+792.17358 5794.4
+792.37408 4957.7
+792.57611 1866.7
+795.17139 2460.3
+795.37555 6922.7
+795.57678 8651.4
+795.77435 6920.6
+795.97681 4484.0
+796.18396 1499.5
+796.38788 1597.1
+805.77893 1837.7
+805.97400 905.7
+806.17603 1246.3
+806.38373 897.6
+806.58405 1638.2
+806.94397 656.0
+809.38196 1537.8
+809.58044 4786.1
+809.78247 6633.5
+809.98138 6984.2
+810.18420 4224.1
+810.38458 3183.1
+810.57605 1213.9
+823.44104 10058.9
+824.44452 6018.3
+825.44000 2064.7
+828.40094 779.7
+832.66345 1047.9
+833.15491 2374.9
+833.40814 2302.6
+833.65692 1646.8
+833.91083 993.4
+841.33319 684.0
+843.33618 1413.6
+852.34216 1062.2
+856.90967 851.1
+857.41479 960.3
+861.17352 1193.6
+861.41895 5198.5
+861.66809 5732.5
+861.91864 4759.6
+862.16644 2158.2
+862.42401 1654.1
+881.77460 885.7
+882.13025 755.4
+882.77344 1042.2
+889.17511 1493.8
+889.42938 2453.5
+889.68060 1480.8
+889.92010 2229.6
+893.67847 5937.7
+893.93036 3511.7
+894.17938 4630.6
+894.42798 3016.4
+894.68073 2327.1
+894.94977 820.5
+914.16217 654.9
+918.68909 2895.0
+918.93951 7050.1
+919.19086 6736.5
+919.44159 6901.2
+919.69177 3979.6
+919.93921 2314.9
+920.20044 1920.5
+936.44818 953.8
+936.70667 920.4
+936.94348 1550.2
+937.19958 2892.7
+937.48773 5023.5
+937.70844 1610.6
+937.94550 826.4
+938.48657 3001.2
+939.49976 1496.2
+944.44513 696.3
+946.80890 1260.4
+947.13715 1195.5
+947.47406 1059.4
+959.52850 1336.9
+980.15588 701.3
+980.89398 831.5
+1017.50775 715.6
+1021.19885 737.0
+1024.51428 5711.8
+1025.51648 3861.3
+1026.52271 1494.9
+1034.49695 1151.9
+1035.49988 1215.6
+1061.20642 835.8
+1088.57520 1931.6
+1089.58752 1726.6
+1104.54382 1281.4
+1105.55408 1092.1
+1121.56812 82555.4
+1122.57056 66284.1
+1123.57288 26909.6
+1124.57507 6011.4
+1125.56934 866.1
+1148.12842 627.7
+1159.60132 821.8
+1185.68652 799.5
+1186.67297 1144.9
+1188.34106 815.4
+1198.16125 3426.5
+1220.63318 2525.8
+1221.63440 2585.3
+1222.64587 715.3
+1261.66016 1058.1
+1406.49463 667.5
+1420.85156 655.1
+1465.38293 725.9
+1480.67896 686.6
+1715.87537 647.4
+1803.03723 600.3
+1808.31738 626.3
+1878.65637 790.6
+1878.84338 657.9
+1879.12073 2017.2
+1879.55945 19720.6
+1879.97473 1188.0
+1880.51062 992.6
+1907.10950 7788.4
+1918.71313 676.2
+1926.56653 605.1
+1930.65112 943.8
+1936.12793 687.2
+S	1861	1861	1879.8958246
+Z	2	3757.944
+Z	3	5636.412
+514.95782 686.4
+530.40002 553.6
+532.52509 1445.7
+549.16425 795.4
+609.98706 646.9
+795.56488 1131.1
+839.43109 722.5
+937.51849 915.7
+1067.00146 593.0
+1100.13391 659.4
+1198.17651 2910.8
+1398.68799 557.5
+1469.34302 676.4
+1583.77563 622.6
+1777.05640 881.5
+1870.27222 1025.0
+1872.98120 797.5
+1876.26196 871.7
+1877.46411 735.7
+1878.91846 1263.3
+1879.49658 19061.0
+1879.77637 3917.9
+1880.04370 998.8
+1907.04932 7481.2
+1930.65552 764.0
+S	1862	1862	501.2572796
+Z	4	2000.99782
+126.68725 512.4
+129.72223 536.9
+133.12782 1032.6
+142.46651 726.2
+152.85495 503.5
+161.43582 615.1
+173.61220 664.9
+175.95844 593.0
+186.54921 505.4
+187.06306 561.7
+188.21626 526.6
+188.25684 773.5
+188.27063 687.5
+188.27812 654.7
+188.29860 590.9
+188.32942 848.7
+188.33969 693.1
+188.39095 808.7
+199.19763 870.1
+199.21432 692.6
+199.26819 1177.3
+199.27859 1963.6
+199.29558 2133.3
+199.31363 1386.1
+199.37865 645.1
+199.39375 940.4
+220.39569 710.8
+233.12848 3880.4
+240.13452 858.1
+245.37280 600.0
+253.37404 688.9
+267.14563 2045.3
+268.12930 6571.7
+272.64905 13974.3
+273.15076 3734.0
+278.83759 547.9
+285.15561 3723.7
+286.14044 729.8
+298.66342 683.0
+303.17654 1086.8
+312.66110 2245.4
+313.16281 752.5
+321.17532 3659.3
+321.67670 1294.2
+341.68466 10465.7
+342.18668 2940.6
+350.27847 636.9
+364.70880 1354.2
+365.21185 865.6
+379.70404 2878.8
+380.19464 5225.2
+380.69742 2277.0
+388.70920 6387.5
+389.21057 2376.8
+391.21939 7283.2
+391.72092 3466.9
+392.16818 529.7
+393.70203 2977.7
+394.19049 1046.6
+396.22388 7257.1
+397.22665 1134.9
+398.18512 1731.0
+399.16904 2641.1
+399.87247 4603.3
+400.20746 2919.6
+400.54230 1017.1
+402.70706 6933.7
+403.20798 3712.6
+403.70895 720.6
+413.25018 25392.1
+414.25433 4218.8
+416.19586 10197.5
+416.23279 942.6
+416.26123 4818.5
+417.19864 1972.8
+417.26688 995.7
+430.18298 1990.9
+430.22791 3301.6
+430.73114 1664.6
+431.22772 748.8
+439.36914 601.6
+440.75281 5022.2
+441.25452 2355.4
+447.24667 636.8
+456.27911 774.1
+459.22507 774.0
+459.71500 1115.4
+468.22726 6827.9
+468.72900 3743.4
+469.22702 1137.1
+476.27170 23460.7
+476.77271 13703.1
+477.27390 5250.7
+477.77515 897.8
+478.74472 3393.8
+478.99420 4381.6
+479.24509 2828.5
+479.49399 1596.2
+480.23697 3355.7
+480.57132 2790.8
+480.90497 2687.5
+481.23755 862.2
+482.69687 847.4
+485.23788 1127.8
+485.48947 1177.9
+485.73883 1037.2
+486.23816 894.1
+486.57739 73795.6
+486.91177 58397.4
+487.24561 31089.0
+487.57935 6947.3
+487.90720 608.2
+507.18832 1003.5
+516.73346 2247.7
+517.22595 687.3
+523.24976 2517.7
+523.58490 2038.6
+523.91516 694.1
+525.27338 896.5
+526.24347 729.6
+526.27814 783.2
+527.26373 26978.3
+528.26709 7565.1
+529.17590 624.8
+529.26233 1275.7
+530.25793 6812.6
+530.59204 6391.6
+530.92664 3754.6
+531.25629 1976.5
+531.58704 828.1
+532.51062 2025.9
+533.78461 51884.4
+534.28589 30451.2
+534.78705 8588.7
+535.28906 2234.9
+541.27960 3640.5
+542.28448 922.6
+544.29047 17379.2
+545.30341 10647.9
+546.30682 2923.1
+549.19489 640.1
+552.25739 1616.4
+552.75171 1042.4
+561.25226 909.6
+561.75873 684.3
+590.30267 1047.7
+590.80035 1041.2
+591.30066 833.9
+599.30493 92493.1
+599.80603 57126.4
+600.30670 28943.4
+600.80682 7516.5
+601.30627 2279.3
+601.78784 2564.6
+602.28943 2785.0
+602.79041 1424.6
+603.63049 1448.3
+610.79376 1238.2
+613.29932 1158.8
+613.63196 921.1
+618.96973 43781.5
+619.30365 46877.9
+619.63745 33889.2
+619.97113 14257.7
+620.30450 5199.2
+620.63702 929.4
+624.31738 1106.2
+624.97913 1102.3
+625.31866 1257.3
+625.65033 651.1
+651.32166 4042.5
+651.82251 2827.2
+652.31915 1023.5
+662.33167 1460.8
+669.88422 883.4
+677.29565 1116.3
+680.83636 25150.2
+681.33783 17478.2
+681.83923 11240.7
+682.36639 10076.0
+683.36530 4634.2
+684.37042 881.7
+720.35303 763.5
+729.36292 110848.0
+729.86383 91230.1
+730.36493 46774.3
+730.86572 16514.4
+731.15216 940.1
+731.36633 4712.8
+731.86902 1346.7
+761.96228 654.7
+781.43073 6882.6
+782.43335 2696.5
+787.38007 12589.8
+788.38342 5996.6
+789.38330 1884.3
+794.88361 5249.5
+795.38263 4480.9
+795.58447 1271.6
+795.88855 1998.8
+796.38037 756.4
+796.89221 861.3
+804.40955 1245.1
+880.49731 820.4
+904.36407 1055.5
+951.53931 890.2
+1042.48389 664.1
+1074.47290 1259.8
+1171.17700 738.6
+1173.54419 826.8
+1198.14697 3291.1
+1205.36255 759.4
+1489.75830 775.3
+1492.61133 564.4
+1525.54492 669.5
+1558.96008 643.8
+1654.17786 582.2
+1873.08887 704.4
+1878.30261 1248.5
+1878.89380 1326.7
+1879.60852 18688.9
+1880.79578 920.7
+1880.94080 942.7
+1882.01184 549.5
+1906.30505 675.3
+1907.04797 7606.9
+1918.75244 798.4
+1930.72693 788.6
+S	1863	1863	1907.47940793
+Z	3	5719.163
+Z	2	3813.111
+522.97534 713.0
+532.51239 1735.9
+549.19531 701.0
+630.44891 707.4
+676.67242 675.0
+731.16663 734.2
+955.09320 618.1
+963.58337 669.6
+988.08380 618.7
+1045.13208 634.2
+1198.13599 3069.5
+1299.04089 544.8
+1346.53516 722.3
+1525.51868 960.9
+1531.13367 639.2
+1692.59521 705.6
+1694.45874 733.2
+1866.01025 679.5
+1875.78979 651.7
+1876.24622 998.7
+1876.80383 806.1
+1878.82043 1317.2
+1879.32690 4987.7
+1879.60706 18751.4
+1880.25061 1369.1
+1881.39502 999.8
+1906.87683 6038.2
+1907.49976 881.9
+1930.69580 1046.2
+S	1865	1865	495.2443246
+Z	2	988.473
+138.05466 543.5
+141.85217 872.2
+143.66629 609.5
+145.21597 542.6
+150.93729 574.4
+151.79854 583.6
+152.66228 548.7
+154.65517 514.9
+165.77184 758.1
+182.78267 587.1
+187.09053 776.3
+188.15021 535.9
+188.24864 1227.3
+188.26906 1795.9
+188.27855 2333.8
+188.29280 1786.5
+188.30574 1779.0
+188.32164 1363.9
+193.91507 566.9
+195.81671 656.1
+196.83058 636.9
+198.89299 848.0
+198.98573 697.7
+199.23509 690.7
+199.26851 1036.4
+199.27702 1628.7
+199.28642 2177.0
+199.29579 1237.2
+199.30829 1005.5
+201.10503 5388.5
+201.13829 725.1
+202.10844 1158.0
+217.13329 16792.8
+218.13696 3570.4
+229.10004 2091.0
+235.09251 640.3
+245.12799 7111.5
+246.13197 1703.8
+274.08133 587.6
+276.17209 797.4
+294.18121 3206.1
+303.14551 641.7
+327.36224 487.3
+348.67331 1537.0
+350.28931 712.6
+358.15802 4390.4
+359.16180 1180.7
+360.14136 2255.2
+372.67407 5713.8
+373.17590 3528.6
+373.67245 869.8
+376.16840 3576.1
+377.17020 1455.4
+377.36230 570.1
+395.22916 2732.7
+396.23181 1030.8
+403.18820 1318.0
+403.69180 893.3
+412.15540 576.1
+412.19629 2456.1
+412.69650 2803.9
+413.19305 1970.9
+421.20035 164135.8
+421.70154 177759.1
+422.11884 579.3
+422.15070 1101.0
+422.20062 108950.7
+422.45923 844.9
+422.62201 835.6
+422.70084 20939.9
+423.20801 665.0
+426.19266 942.4
+427.19254 850.5
+429.21301 1085.5
+430.21573 1230.1
+431.16306 568.0
+431.20844 1774.0
+432.21045 1036.6
+464.24905 4981.4
+465.25378 2294.9
+473.22369 728.9
+476.72467 3168.4
+477.22430 4340.9
+477.72507 2107.2
+479.20868 1131.4
+482.25964 15406.2
+483.26337 2832.3
+532.56323 2134.7
+549.15594 970.1
+549.28564 611.0
+550.00934 771.7
+552.23645 673.6
+556.63300 607.7
+595.28900 1658.8
+596.28870 899.0
+613.29999 50439.6
+614.30267 35862.0
+615.30188 11578.1
+616.30426 2020.1
+630.40527 688.2
+660.28094 938.1
+676.63959 866.7
+677.27716 1502.3
+678.28015 1739.5
+695.28766 1046.1
+696.29346 1098.9
+726.32983 1238.2
+727.33740 808.5
+744.33997 91010.5
+745.34259 74780.1
+746.34064 43500.2
+747.34174 8508.8
+784.32953 616.5
+795.56622 723.0
+806.33380 830.3
+814.34753 934.6
+815.52582 551.5
+824.34222 886.6
+825.34204 1290.5
+832.75842 595.2
+841.39240 29668.1
+842.39569 31651.8
+843.39557 18035.9
+844.39545 3812.7
+860.36670 825.0
+861.36682 796.8
+861.96448 707.9
+866.81091 577.0
+1198.25964 3282.8
+1460.71887 809.6
+1525.41199 889.2
+1530.26904 614.2
+1533.69714 619.4
+1878.06250 783.3
+1879.12402 1511.4
+1879.52905 20136.6
+1879.94885 1949.9
+1907.08521 8053.2
+S	1866	1866	562.216991267
+Z	3	1683.376
+Z	2	1122.586
+141.86420 4108.3
+146.93440 4163.0
+153.14514 4498.7
+182.79486 4404.5
+188.23201 4384.8
+188.26331 10652.7
+188.27943 15621.0
+188.29538 16938.7
+188.31660 10922.8
+188.33896 4214.1
+198.89383 7179.1
+199.19836 4597.9
+199.21179 4215.7
+199.23375 4287.8
+199.25519 5375.4
+199.26256 6578.3
+199.27881 12217.6
+199.29108 12949.2
+199.30801 4618.7
+199.37321 5626.1
+199.38710 4554.3
+199.39261 4571.6
+199.40440 4669.1
+199.93057 3647.6
+207.88994 4052.0
+212.04720 3994.3
+223.20753 4544.1
+224.13814 4305.7
+226.94202 3679.2
+234.21289 3510.8
+247.61960 4098.7
+267.63635 3860.1
+271.60522 5094.3
+271.76794 4751.0
+271.92239 4535.5
+281.12387 11818.0
+294.92590 3978.0
+299.13452 27410.6
+310.74142 3824.0
+347.20233 9317.8
+355.68182 14170.5
+356.18195 5573.9
+384.22284 42408.9
+385.22797 6112.4
+395.12415 4517.4
+395.19147 18727.3
+412.21902 32229.6
+413.21866 6543.9
+429.28625 10540.2
+457.27911 7377.3
+459.18936 4411.8
+469.24435 12001.4
+469.74582 5926.8
+472.87326 4466.4
+472.92422 13854.3
+473.21930 5129.2
+476.24606 7129.7
+477.24759 4354.0
+477.91406 3561.6
+483.95831 4840.0
+484.38333 4039.1
+503.75592 14752.3
+504.26187 7200.3
+508.74841 6947.6
+509.25317 6682.6
+510.61554 5709.0
+510.95740 7707.4
+511.28824 5013.9
+512.76031 12961.2
+513.26166 8067.9
+517.75232 41456.5
+518.25415 21674.7
+518.75763 5491.0
+528.35193 12323.3
+529.35748 7321.1
+531.27814 15304.5
+531.60822 8374.9
+531.94562 9000.6
+532.56299 12773.7
+543.27521 6783.4
+543.77063 6128.1
+561.25818 3717.4
+610.82056 22168.5
+610.97858 4002.6
+611.32220 8027.1
+614.30341 4888.1
+630.46472 4155.4
+676.64911 6768.7
+700.30737 4156.0
+708.88782 4275.3
+710.35626 237728.8
+711.35938 102354.4
+712.36237 30151.7
+729.15295 4614.8
+731.17755 4548.9
+793.43146 4074.4
+795.56641 8552.2
+823.43640 17206.9
+824.43909 6272.8
+937.48376 11233.8
+938.49280 5419.4
+954.00262 5065.9
+1034.50208 8688.9
+1057.25818 5364.7
+1117.73425 4171.4
+1198.25806 23582.1
+1256.29077 4811.5
+1310.13318 5701.5
+1470.40576 3875.9
+1524.45227 5386.3
+1525.47937 5771.6
+1876.23584 8374.0
+1878.03992 4179.2
+1879.20288 10516.0
+1879.56238 144267.1
+1879.97253 13735.2
+1882.84558 4957.9
+1907.08130 52080.9
+1923.00818 5106.1
+1930.71863 6127.0
+S	1867	1867	495.7458246
+Z	2	989.476
+125.69865 9479.3
+135.51376 9187.4
+137.88095 8581.6
+149.55904 8325.6
+151.01605 10391.9
+155.32146 9964.5
+157.60547 8975.5
+159.27139 9212.4
+165.76872 12744.7
+169.49632 12442.2
+181.42610 8441.4
+188.26524 16941.0
+188.27455 18087.6
+188.29181 16892.8
+188.29997 17333.9
+188.30865 18631.7
+188.33191 13608.8
+188.36041 9376.1
+197.70309 9487.8
+198.89423 12865.9
+199.16812 10070.8
+199.18535 12028.8
+199.19376 10460.5
+199.21881 9860.1
+199.24828 10311.5
+199.26770 27035.3
+199.28275 36366.4
+199.29379 23077.1
+199.31284 14116.8
+199.32310 10355.8
+199.39177 8870.8
+201.10550 58479.1
+208.25722 9649.4
+217.13324 271666.5
+218.13675 33472.3
+229.10031 25061.4
+229.23143 8318.8
+235.09274 15816.0
+245.12814 132003.4
+246.13254 14456.3
+272.07831 13444.5
+286.09766 9349.7
+287.05191 9408.1
+294.18130 31301.4
+310.47998 10334.3
+321.04681 8687.6
+348.67340 22877.3
+350.27481 11578.2
+358.15845 71098.9
+360.14151 30099.3
+363.66925 13027.5
+372.67377 158314.5
+373.17554 44213.6
+376.16855 68062.0
+386.25562 8851.1
+395.22897 35132.3
+397.92377 9437.1
+403.19046 34655.8
+403.69324 16220.6
+412.19473 68621.2
+412.69537 26185.8
+413.19659 12499.0
+420.29269 18770.8
+420.44931 15626.5
+420.75046 16699.0
+420.79001 18888.9
+420.94702 10876.5
+421.20029 4386663.0
+421.23993 20623.8
+421.49600 10082.7
+421.65652 18564.8
+421.70142 2011153.6
+421.81076 10395.3
+421.95160 15192.7
+422.04639 11630.8
+422.11493 27842.5
+422.20093 665999.8
+422.45761 15572.9
+422.61636 12391.5
+422.69998 49682.2
+426.19870 10173.1
+431.21045 29145.6
+464.24936 45027.6
+465.25070 21889.4
+472.71957 24479.8
+475.25186 11745.1
+476.72354 97618.1
+477.22476 46417.2
+477.72565 11410.1
+479.21289 22992.4
+482.25952 362245.7
+482.66272 12635.6
+483.26251 50558.3
+488.67154 11365.3
+526.81635 10667.9
+532.58142 34797.4
+561.20490 9928.7
+595.28864 31541.6
+613.29987 909587.7
+614.30280 341505.3
+615.30255 63890.7
+676.62585 17349.6
+677.28137 27548.9
+694.91833 9804.0
+695.28833 21729.2
+722.27209 9558.4
+726.33044 35482.2
+727.33093 10262.5
+731.15295 9412.2
+744.34027 2262021.5
+745.34302 851115.0
+746.34082 265917.0
+746.40784 9255.3
+746.48737 15900.5
+747.34473 14871.4
+795.57452 15312.0
+806.33112 26856.1
+809.16492 10279.3
+823.38452 14252.6
+824.34448 24446.8
+825.34863 12587.8
+841.39264 779037.2
+842.39709 365231.2
+843.39667 113892.6
+850.77802 11364.3
+858.09955 9613.8
+860.36694 14916.6
+864.21454 9004.9
+1039.41553 10609.6
+1073.82117 10347.0
+1198.29907 57890.6
+1525.44812 10691.4
+1676.82190 9152.9
+1695.89563 10522.4
+1777.00671 14825.3
+1870.10693 8813.8
+1878.84399 12039.9
+1879.20642 36374.8
+1879.49316 312792.8
+1880.20349 14716.8
+1888.38672 10625.9
+1907.00647 123317.8
+1916.20764 10643.8
+1930.65332 15829.0
+1988.32239 12705.6
+S	1869	1869	644.9492566
+Z	5	3219.70716
+165.29799 4985.0
+183.96399 5864.0
+185.19603 5145.5
+188.20407 5027.3
+188.24713 5895.6
+188.27686 15649.9
+188.28737 16475.3
+188.30351 13957.0
+198.89502 7299.3
+199.18730 8283.4
+199.24857 6526.9
+199.27382 15679.7
+199.28391 16876.6
+199.30678 9391.8
+199.37219 6275.0
+213.64644 5592.8
+220.65613 5453.6
+251.29358 5684.2
+276.24722 7044.2
+288.59460 4958.9
+295.49368 5756.7
+303.61795 5994.3
+304.59332 4802.5
+345.24905 6137.8
+347.73550 5190.4
+376.71393 6654.5
+417.68420 5496.1
+428.10284 6183.0
+466.75180 5553.6
+468.20966 5329.0
+472.88593 8573.7
+482.67474 7712.1
+492.63309 6800.1
+501.23392 8439.6
+501.62778 19775.1
+501.96252 6945.2
+502.28955 8758.0
+523.03442 13768.2
+532.60400 15776.6
+535.30786 16213.1
+535.64423 12307.6
+541.31140 37260.2
+541.64642 40243.5
+541.97888 20445.5
+546.69470 6565.1
+549.17627 6751.2
+549.28033 5486.7
+561.24213 6202.7
+575.05469 5576.2
+581.52808 6540.8
+595.10992 8094.2
+607.08398 6090.0
+611.72882 10039.3
+611.93738 22230.6
+612.13092 21851.4
+612.33630 9493.1
+613.92950 10720.1
+617.32953 14023.6
+617.53290 25687.6
+617.73303 12734.0
+617.93372 10953.3
+630.42786 6932.0
+666.04291 6137.9
+676.64276 6177.5
+680.03009 8742.8
+680.36084 8488.6
+685.35162 7061.9
+690.18518 5475.1
+695.23035 5694.1
+695.39587 11990.3
+695.89575 9105.9
+706.32178 16478.0
+707.32410 12029.0
+711.51349 5791.7
+717.72058 43911.5
+718.05682 43281.0
+718.13269 8287.2
+718.38843 31592.9
+718.62756 6233.4
+718.72400 8984.0
+727.87390 6515.9
+738.89142 13792.7
+739.14337 20916.5
+739.38782 14020.7
+741.16785 12761.3
+742.88641 5518.4
+743.14294 88288.7
+743.39441 148499.5
+743.64502 153961.8
+743.89557 102262.3
+744.14673 41677.3
+744.40271 10253.7
+745.34998 5780.6
+745.77045 5960.7
+747.64752 22176.1
+747.89642 38081.5
+748.14746 36259.2
+748.39923 18560.5
+748.65186 10433.6
+749.41833 6767.6
+751.40033 19852.2
+751.73615 12780.0
+751.94019 15267.7
+752.07605 8879.0
+752.45331 8236.8
+752.94135 8444.4
+754.71814 6131.6
+755.41730 34585.0
+755.75116 45515.6
+756.08527 16247.5
+756.41925 11586.3
+757.40887 51470.0
+757.74194 64374.3
+758.07605 36597.8
+758.41211 13096.9
+760.14893 9041.1
+763.36841 17706.2
+763.60217 5686.2
+764.41779 12087.3
+764.66803 12721.2
+764.91956 11111.8
+765.16699 19932.1
+765.41437 8435.2
+766.91235 10844.1
+767.15790 19412.3
+767.41083 23391.8
+767.65717 22459.6
+767.91840 14202.6
+768.12311 8468.9
+768.90717 8426.7
+769.16583 9681.6
+769.41608 15895.6
+769.66772 9083.8
+771.41394 344805.4
+771.66473 623352.7
+771.91479 651882.5
+772.16583 360881.3
+772.41547 181601.3
+772.66656 59562.1
+772.91284 12018.2
+773.93121 5806.0
+774.17334 7741.5
+775.91644 208200.1
+776.16687 353201.1
+776.41791 347628.2
+776.66754 217444.2
+776.91827 117428.2
+777.16748 34452.6
+777.41730 8492.6
+789.42883 11953.3
+790.89020 57294.2
+791.39185 52390.8
+791.89374 23856.4
+792.38928 10390.4
+793.78400 8316.0
+794.11035 8414.7
+795.10217 29131.3
+795.43561 50459.7
+795.56714 7841.9
+795.77094 31503.5
+796.10736 6250.8
+799.89624 34467.0
+800.39636 23930.1
+800.90039 7713.7
+811.77307 8261.2
+819.40607 34234.2
+820.41302 20657.3
+821.41541 7694.8
+842.45819 6352.0
+858.47876 18606.9
+858.97870 7683.2
+876.48572 9104.1
+887.34375 6538.9
+957.16943 6278.7
+957.51331 11579.4
+1057.24805 8447.0
+1068.96448 5639.6
+1187.81946 7913.5
+1198.35364 25443.2
+1339.82239 6331.2
+1404.85999 5145.9
+1452.59729 5462.4
+1525.46692 9395.3
+1776.85034 8493.3
+1783.56555 6312.9
+1870.37439 10391.5
+1876.89575 6799.5
+1877.65369 7659.5
+1878.43909 7321.5
+1879.54163 174484.5
+1880.38184 8584.4
+1880.69775 5694.5
+1882.24194 6084.8
+1906.51306 9434.8
+1907.00842 63352.3
+1918.74988 6273.5
+1930.66272 6987.4
+S	1870	1870	631.823407933
+Z	3	1892.195
+Z	2	1261.799
+173.77220 7400.6
+188.23390 7749.3
+188.24210 9542.6
+188.26460 15941.9
+188.27615 20696.1
+188.28467 22668.6
+188.30237 20338.7
+188.31598 13539.2
+188.32687 10453.2
+188.36513 5861.7
+198.89572 8883.6
+199.17891 9357.3
+199.20909 7064.2
+199.26198 6279.9
+199.27664 22031.1
+199.28719 26486.8
+199.38443 8676.6
+201.12308 92270.6
+206.44829 6641.5
+219.17291 6488.1
+229.11783 10217.6
+275.40433 6541.1
+280.16559 7842.6
+305.57053 6700.3
+308.91852 8946.2
+312.15244 7637.2
+330.16592 8840.7
+338.86328 6357.8
+339.92792 7760.9
+340.66602 6980.5
+350.28665 6888.3
+350.54880 6697.3
+351.20142 12637.4
+361.69333 6039.7
+369.21265 56180.2
+370.96573 8000.3
+384.96490 7142.5
+387.22339 58052.8
+396.18344 11454.4
+404.24896 21617.8
+405.19257 9973.7
+430.36942 6209.3
+438.27167 7892.8
+454.30099 12472.4
+454.72192 32925.7
+455.22797 8954.5
+455.28470 10498.0
+464.28592 109401.5
+465.29254 9710.1
+472.31259 55797.3
+475.25406 7034.7
+482.29608 213020.4
+483.30209 14061.1
+491.49487 8232.2
+500.30692 284249.0
+501.30975 24107.4
+511.26352 16371.0
+532.57977 20229.4
+542.89496 8948.9
+543.22894 24076.7
+543.56299 24528.3
+544.22839 8898.3
+548.59314 18821.0
+548.90234 76447.0
+549.23566 40546.7
+549.27209 7452.9
+549.56775 23832.1
+549.90186 12757.1
+554.59271 18169.3
+554.90527 54606.5
+555.24054 69135.7
+555.57391 34670.3
+555.90698 12991.1
+567.80249 15426.3
+568.30676 9999.0
+577.36981 9862.5
+582.29260 7632.4
+586.59668 38802.5
+586.92993 24210.3
+587.26440 23134.3
+587.59570 11074.4
+588.10760 6769.9
+591.98535 6773.5
+592.27020 10079.5
+592.60474 32274.5
+592.93640 26884.2
+593.26862 23293.4
+593.60760 7842.2
+595.38000 36938.8
+597.60303 42257.7
+597.93768 42231.7
+598.27246 28285.7
+598.60480 14115.2
+603.60687 87267.7
+603.94116 71568.3
+604.27600 44287.5
+604.60651 20663.5
+605.60864 6268.1
+607.25861 7805.2
+608.83698 14957.7
+609.61078 23105.0
+609.94708 10937.4
+612.93091 33245.3
+613.26172 87163.0
+613.38757 34303.5
+613.59570 92819.3
+613.82141 8693.5
+613.92963 72542.1
+614.26154 24048.8
+614.59747 12921.4
+618.29315 10050.0
+630.44427 11231.6
+676.64520 12223.6
+680.32672 9427.2
+690.79578 7656.4
+723.82007 73745.4
+724.32227 51425.1
+724.82312 33365.4
+725.31842 11955.9
+726.34381 9496.0
+731.15100 7367.5
+749.33539 14145.0
+772.32062 10150.7
+772.82086 16125.3
+781.33319 202833.3
+781.83533 188599.8
+782.33350 112963.9
+782.83215 54418.6
+792.32446 6906.7
+795.57489 12919.3
+799.85809 41083.6
+800.36035 50952.5
+800.85907 32747.5
+801.35797 20709.6
+809.36877 26053.1
+810.37567 7570.1
+822.85400 40548.9
+823.34943 61850.3
+823.84711 50495.7
+824.34528 36775.0
+824.85211 15888.9
+831.38977 24977.1
+831.85645 1379457.1
+832.35736 1151822.5
+832.44055 10761.7
+832.85754 777274.4
+833.10681 10389.1
+833.35754 357985.1
+833.85693 72714.5
+834.89423 9540.7
+837.37128 7304.4
+840.39551 56981.6
+840.89679 63237.6
+841.40149 56562.1
+841.90564 43173.9
+842.40771 11997.5
+848.96436 9558.5
+852.29639 6888.4
+863.85492 11841.9
+864.35931 15699.6
+884.38666 28591.7
+884.88959 26787.1
+885.39270 17623.0
+893.39130 38210.3
+893.89264 35057.2
+894.40710 18097.9
+894.85883 7563.7
+908.43842 19652.7
+947.37122 9325.1
+965.37433 11945.7
+966.38434 11210.1
+1191.24939 7613.1
+1198.28833 35671.1
+1245.64380 7784.2
+1251.05884 6575.8
+1361.83423 7015.0
+1367.32727 7234.8
+1667.29968 7931.1
+1776.96936 9312.1
+1873.07166 7185.5
+1877.46948 10352.1
+1879.08276 10830.7
+1879.55127 218699.8
+1880.11426 10801.1
+1880.53577 10737.5
+1881.58337 8109.6
+1907.01587 76618.5
+1927.51367 7685.8
+1930.74622 10540.7
+S	1871	1871	523.4548246
+Z	2	1045.062
+Z	3	1567.089
+132.07681 764.5
+145.18129 568.0
+155.87726 535.3
+159.97275 489.1
+172.65921 534.1
+181.98779 579.8
+183.29573 492.2
+188.24736 596.6
+188.26286 710.3
+188.27124 949.8
+188.28011 1049.3
+188.29237 1246.7
+188.29901 982.7
+188.31503 764.3
+196.11771 641.6
+198.66580 560.5
+198.89438 863.3
+199.22324 551.1
+199.24838 1202.2
+199.27742 1447.5
+199.28717 1468.5
+199.29616 786.5
+199.31688 816.6
+199.33980 639.0
+199.36584 595.5
+199.38454 643.9
+199.39374 634.2
+202.51352 673.6
+204.78006 612.4
+206.69730 565.4
+210.51755 543.2
+217.09677 691.9
+221.12733 707.0
+222.85883 543.1
+245.09267 890.9
+252.33334 547.6
+253.98534 468.6
+262.11786 3956.5
+263.01166 526.0
+301.33557 526.2
+304.99561 643.2
+308.88681 783.9
+333.98618 1274.1
+342.25824 731.0
+345.98590 751.9
+346.97018 2006.1
+350.28641 624.1
+359.23883 2397.6
+361.18774 1291.8
+363.25528 625.3
+363.99686 9733.8
+367.40747 676.0
+368.44827 624.1
+373.38190 638.4
+384.74133 633.5
+386.01910 777.7
+396.00201 1544.4
+396.98657 2918.6
+414.01257 11002.3
+414.99850 2017.0
+424.90610 3122.3
+425.23947 1605.2
+425.57217 782.0
+427.18677 545.7
+427.52695 880.0
+432.02319 6872.7
+442.97644 735.5
+444.98798 1608.1
+445.20703 1076.9
+446.48059 593.7
+450.98184 529.6
+458.30655 6629.9
+459.02634 733.1
+459.99924 2233.9
+462.01584 9716.2
+463.01694 806.1
+468.65521 596.8
+470.96762 1711.7
+473.20111 792.7
+478.01028 772.4
+487.01010 1294.7
+487.99490 9733.0
+488.97885 42398.4
+489.98141 3483.4
+490.22864 1317.8
+497.29007 955.5
+502.65848 496.6
+503.78134 6888.6
+504.03156 9305.8
+504.20511 698.1
+504.28281 5844.4
+504.53198 2034.5
+505.02090 35110.3
+506.00491 101953.4
+507.00870 7261.6
+528.85223 661.6
+532.54749 1697.4
+543.84485 547.6
+557.37518 6126.8
+563.56451 1532.4
+563.81421 1638.8
+572.27350 1403.8
+574.57898 565.2
+580.24561 521.2
+582.55219 1008.8
+589.02124 755.1
+589.29718 1771.0
+591.83234 6549.9
+592.08234 4571.3
+600.30664 926.6
+600.55829 2286.7
+600.80939 1629.3
+601.05505 737.9
+601.29926 720.1
+601.64087 859.7
+625.98364 918.2
+630.38104 835.2
+636.85449 714.2
+662.86530 584.8
+676.59082 837.3
+686.41748 11848.6
+688.36725 800.0
+713.38605 1883.6
+713.71881 1171.2
+731.08325 657.9
+742.37042 1231.9
+778.17438 554.3
+785.48639 11544.8
+795.57721 892.3
+819.07770 553.8
+896.10071 535.3
+898.84479 559.6
+1019.65289 692.3
+1020.19824 558.0
+1050.27747 607.1
+1057.17346 1314.9
+1122.03650 589.7
+1198.23560 3027.2
+1230.42566 582.4
+1309.64868 643.0
+1490.29541 710.7
+1674.59033 743.2
+1752.57666 673.9
+1777.51880 1158.0
+1870.91516 968.0
+1876.73804 930.9
+1879.01978 1951.4
+1879.39832 20816.4
+1879.70068 1970.7
+1906.66455 687.5
+1907.07397 7216.4
+S	1873	1873	644.9482806
+Z	5	3219.70228
+165.77197 66958.6
+167.64508 41879.9
+169.49731 52575.2
+177.35002 52223.4
+178.89781 49203.4
+188.20045 63582.5
+188.22385 49830.5
+188.26311 48991.5
+188.26982 58333.8
+188.28841 59109.3
+188.29906 42545.2
+188.32024 58031.9
+188.33183 50018.4
+188.37608 42053.5
+190.76384 53760.3
+192.39236 57822.9
+198.89517 48131.0
+199.23291 57533.0
+199.24989 54887.7
+199.26494 133882.5
+199.28838 152055.4
+199.29861 104464.9
+199.31390 84794.4
+199.33028 79678.0
+199.38719 88428.0
+199.42880 73313.9
+210.86404 55098.7
+215.26257 47805.1
+270.25119 47901.6
+276.87115 46868.0
+301.68610 53989.5
+308.90015 51433.4
+320.55438 48731.5
+332.61896 53895.2
+350.28076 72415.9
+363.74460 45557.4
+427.54297 98685.6
+444.64047 49379.4
+456.08115 63624.3
+456.64331 51911.4
+460.42505 58166.0
+466.91211 57552.1
+502.93088 47188.0
+532.56488 149929.8
+535.64972 63806.9
+541.31201 92756.3
+541.64301 57742.6
+541.98004 71570.1
+549.15607 60245.6
+570.46735 52551.2
+573.59711 49097.3
+610.86780 54947.0
+611.73419 58906.0
+612.13690 59793.8
+612.33624 67354.4
+617.53229 108289.4
+630.40979 84661.7
+673.48376 50938.1
+676.60925 92203.0
+706.32697 102874.9
+717.71448 101620.0
+718.05554 137229.1
+719.75970 51391.2
+740.90826 70369.7
+743.14441 185186.7
+743.39331 451011.2
+743.64478 241390.4
+743.89551 225700.9
+744.14465 98276.5
+744.39484 82806.1
+747.89465 80295.8
+748.14459 133275.6
+748.39917 63111.9
+749.19513 46007.5
+751.94037 96815.4
+755.42096 87134.7
+755.75336 89415.7
+756.08270 70806.9
+757.25708 54437.9
+757.40729 108535.5
+757.74658 177968.2
+758.07916 95419.3
+771.41284 1110356.0
+771.66443 1666276.5
+771.91467 1983964.3
+772.16516 1092331.3
+772.41510 600349.9
+772.66840 120362.9
+772.91833 100426.0
+775.91534 707617.8
+776.16626 1010291.4
+776.41718 1099539.6
+776.66888 602062.8
+776.91547 149729.0
+777.16101 109703.5
+790.88892 223367.3
+791.39246 138847.1
+791.89557 65167.1
+795.10223 102786.3
+795.44019 106471.1
+795.57428 69596.5
+799.88580 54862.1
+800.39233 78862.5
+819.40320 95241.6
+902.98755 52353.9
+992.26855 61026.8
+1057.20313 77847.3
+1188.04871 63173.8
+1198.26526 262606.0
+1873.36572 53018.6
+1879.09668 81287.0
+1879.44690 1710776.0
+1907.04578 573410.3
+1930.60132 67959.1
+S	1874	1874	1879.83340793
+Z	2	3757.819
+Z	3	5636.225
+519.55579 640.7
+532.55170 2153.1
+570.80707 610.4
+607.42700 592.7
+640.10010 684.9
+676.61285 1013.3
+701.56012 607.4
+701.61462 566.2
+717.28271 632.1
+731.13959 643.0
+783.24762 587.2
+795.56848 1067.5
+880.04236 703.1
+1068.69971 671.3
+1198.23279 3363.6
+1324.23645 679.6
+1410.51196 647.5
+1525.47046 719.8
+1676.05994 809.1
+1821.92383 597.8
+1874.80603 821.7
+1879.44324 19897.2
+1907.04456 7404.0
+1921.72742 672.7
+1984.92065 626.8
+S	1875	1875	645.7510246
+Z	5	3223.716
+171.63528 14085.3
+177.43546 12895.6
+179.84059 14809.6
+186.36899 13077.5
+188.24533 12140.5
+188.26114 13152.2
+188.26608 14712.7
+188.27972 20092.6
+188.28839 20919.5
+188.29576 20491.6
+188.30176 15381.4
+188.31129 13901.3
+198.89549 16964.6
+199.19102 24883.8
+199.24368 14980.3
+199.27061 24859.5
+199.28900 52185.7
+199.31091 18115.7
+199.33290 13321.9
+199.38673 20568.3
+240.97089 12919.2
+241.03862 13088.6
+315.00287 14773.6
+358.12830 15290.1
+360.29474 13193.6
+376.71274 15164.1
+391.57648 12105.4
+392.45557 12306.2
+399.82452 14516.1
+410.20862 20318.0
+442.10080 14563.9
+467.25479 15742.8
+492.62991 18905.4
+501.62573 27362.0
+501.96524 19004.8
+517.54120 15135.9
+517.78320 13756.2
+523.03040 18303.7
+530.12616 16397.7
+532.53827 41839.6
+535.30865 67547.8
+535.64331 49578.4
+541.31207 163044.8
+541.64557 128016.2
+541.98071 66240.4
+566.81946 13830.8
+567.06207 23721.2
+569.63501 12190.0
+592.32880 18504.7
+594.91559 17912.6
+596.57739 25107.6
+597.07611 17413.3
+600.53717 12466.4
+606.43018 13723.4
+609.08148 15693.4
+611.73169 44679.8
+611.93335 62646.7
+612.13324 47906.2
+612.33508 39301.2
+617.33124 79731.0
+617.53271 75837.7
+617.73322 70357.1
+617.93286 61521.0
+618.13477 19375.0
+624.92944 12278.4
+630.39081 18897.1
+676.62445 17371.8
+680.36285 18558.4
+695.38721 35108.1
+706.32562 55411.8
+707.32648 25532.9
+717.72363 81455.1
+718.05658 105316.0
+718.39063 62801.4
+718.64014 12512.3
+718.72632 25303.8
+723.55444 13978.2
+729.50665 13137.2
+738.40076 18874.4
+738.73193 28726.9
+738.89319 20265.3
+740.65851 24959.3
+740.91302 38931.5
+741.16217 36173.6
+743.14368 183822.4
+743.39282 298698.1
+743.64478 310841.2
+743.89539 239528.0
+744.14471 124198.8
+744.39417 46461.9
+744.64893 23346.9
+747.64728 59149.5
+747.89832 96035.6
+748.14795 100373.9
+748.39807 74379.8
+751.39685 15220.9
+751.73309 28344.9
+751.93866 28262.2
+752.44458 22934.5
+755.41620 77276.0
+755.75226 85239.6
+756.08606 61773.9
+756.42145 24625.9
+757.40887 124777.9
+757.74164 165114.6
+758.07544 96132.6
+758.40930 49639.6
+764.41925 14982.8
+764.66510 30551.2
+764.91302 24173.4
+765.16980 18647.0
+767.16711 28704.1
+767.41193 40467.4
+767.66595 28235.1
+767.90948 18374.5
+769.42590 25347.5
+769.67328 15143.0
+771.41339 983974.1
+771.66467 1666928.3
+771.91461 1501021.6
+772.16534 1011646.1
+772.41602 526020.3
+772.66626 213608.1
+772.91553 79325.8
+775.91614 621350.3
+776.16626 1035234.1
+776.41754 969096.0
+776.66705 589229.8
+776.91779 314304.9
+777.16791 101006.6
+777.41888 43671.5
+783.76556 15382.1
+787.75385 17135.6
+790.89069 147985.1
+791.39264 125063.4
+791.89423 60658.1
+792.38861 39608.9
+793.11646 21289.1
+793.44629 21857.9
+793.77893 31270.7
+795.10321 67490.9
+795.43744 121739.7
+795.57849 16192.1
+795.77319 46605.9
+796.10095 18138.4
+797.07996 14187.8
+799.89496 87528.6
+800.39807 71882.3
+800.89441 35203.3
+804.77771 12706.0
+811.76648 19713.0
+819.40521 75101.9
+820.40332 41990.5
+821.40430 16428.7
+837.41040 24307.7
+857.96936 22563.1
+858.47754 21913.0
+911.14929 15855.1
+947.84448 14931.4
+995.84503 13145.9
+1000.11176 16840.4
+1007.53381 13963.0
+1057.22522 16437.9
+1188.12402 18434.3
+1198.20801 69010.3
+1255.28516 15614.6
+1295.71265 12869.7
+1352.12903 15455.0
+1399.11914 11661.6
+1462.69824 15806.0
+1469.35059 13435.8
+1711.20898 12965.7
+1719.18347 24459.7
+1738.10291 13739.5
+1749.99475 14626.6
+1874.79834 17742.9
+1878.61890 20573.9
+1878.91675 16843.4
+1879.49304 418231.8
+1880.32422 19141.6
+1907.01990 158441.1
+1930.54224 19601.5
+1936.64661 13747.0
+S	1877	1877	644.9513326
+Z	5	3219.71754
+188.17395 654.7
+188.21834 621.7
+188.22574 657.7
+188.23586 678.1
+188.25291 970.4
+188.26448 898.8
+188.27885 603.5
+188.28854 753.4
+188.30312 656.0
+188.31427 1051.1
+188.33305 783.0
+188.34193 708.4
+188.35995 898.4
+188.36954 810.5
+198.89290 712.7
+199.25418 1157.4
+199.26451 829.4
+199.27774 956.6
+199.28407 880.2
+199.29497 1704.0
+199.31009 1051.6
+199.37547 976.0
+199.39316 925.1
+222.81017 622.1
+237.00970 657.8
+271.75601 675.1
+283.78107 619.8
+291.80161 613.1
+308.91119 909.8
+310.61966 522.7
+337.21255 757.5
+375.54492 655.2
+376.71252 1358.3
+431.49750 618.5
+436.51248 766.5
+440.93253 641.5
+447.25882 611.9
+466.74957 930.9
+482.67404 728.7
+488.54150 537.0
+492.62997 2619.5
+492.96628 777.3
+493.29672 811.2
+495.95740 1056.6
+501.62619 2517.4
+501.96069 2087.8
+502.29492 847.9
+520.64209 778.7
+520.97772 680.4
+532.53333 2068.5
+535.30914 3040.6
+535.64362 3422.3
+535.97552 1821.2
+538.79633 856.6
+541.31268 8532.6
+541.64728 8993.7
+541.98181 5652.4
+542.31342 1909.7
+542.65125 1111.0
+546.19141 566.9
+549.17242 981.9
+567.06378 2145.1
+595.11084 996.5
+596.57611 967.6
+596.83020 856.5
+597.08423 1108.7
+603.13458 830.2
+608.82166 713.4
+611.73383 2019.1
+611.93542 2959.7
+612.13611 3195.7
+612.33514 3801.5
+612.53436 3604.9
+613.93158 963.0
+614.12878 1192.1
+617.33307 1756.9
+617.53314 3517.5
+617.73260 2335.4
+617.93445 2968.7
+618.00806 679.0
+618.13055 1209.4
+618.33911 1224.5
+655.68927 664.4
+676.05011 595.7
+676.66791 1117.7
+680.02527 1229.0
+680.36261 2031.7
+680.69745 1628.7
+681.02832 917.1
+684.85260 1505.8
+685.35260 1379.2
+685.85773 1147.0
+690.10834 1691.1
+694.41833 770.3
+695.39777 1641.9
+695.89105 990.3
+696.40021 1248.1
+704.30286 726.2
+706.32025 4204.6
+706.50177 724.2
+707.32391 1839.2
+708.32587 838.0
+709.05933 1319.1
+715.11865 823.5
+717.72375 6477.7
+718.05701 10736.7
+718.13275 1736.4
+718.38879 9466.3
+718.63507 1699.5
+718.72540 4235.0
+719.05896 1529.7
+719.13196 1127.9
+731.14679 934.0
+732.89386 729.9
+733.39209 1046.1
+737.07184 761.8
+737.15228 1146.4
+737.40417 1214.7
+738.64038 1987.1
+738.89264 2958.8
+739.14050 3311.5
+739.39069 4990.6
+739.64520 2565.3
+739.89246 1192.6
+740.91187 1353.5
+741.16547 2633.2
+741.41376 2134.7
+743.14319 12382.5
+743.39380 25793.9
+743.64484 33979.2
+743.89514 27076.0
+744.14539 17335.0
+744.39740 7992.2
+744.64825 2631.8
+747.64465 2700.9
+747.89441 4754.9
+748.14722 4908.0
+748.39929 7477.5
+748.65070 3084.1
+748.90076 2362.1
+749.19519 571.6
+751.40582 1412.3
+751.74139 2227.4
+751.93353 1919.1
+752.07489 2253.6
+752.39252 1062.3
+752.44757 2969.8
+752.94202 1948.7
+755.41528 3507.1
+755.75116 7618.8
+756.08679 4730.0
+756.41901 3116.0
+756.75769 1607.8
+757.40863 7772.5
+757.74304 11045.0
+758.07678 11072.7
+758.41211 6010.3
+758.74908 2313.8
+759.09216 787.9
+760.66150 1861.8
+760.91095 1282.3
+761.41779 923.9
+761.65295 774.3
+764.66431 1848.9
+764.91595 4203.1
+765.16803 5365.9
+765.41571 2381.2
+765.66760 1352.8
+767.16174 6837.8
+767.41364 5486.0
+767.66187 5091.7
+767.91412 4149.6
+768.16479 1937.0
+768.42157 859.1
+768.66217 1032.2
+768.91113 2267.7
+769.16608 1875.5
+769.41418 3286.1
+769.66571 2293.0
+769.92035 1916.7
+770.16229 857.6
+771.41425 41931.2
+771.66498 102412.8
+771.91504 129695.7
+772.16516 94952.5
+772.41583 58736.5
+772.66589 28643.4
+772.91632 10259.3
+773.17072 3876.8
+773.30457 777.5
+773.65839 606.1
+773.93140 1084.7
+774.18848 915.6
+774.78137 739.1
+775.10834 1284.6
+775.91595 23760.8
+776.16675 58826.4
+776.41748 70468.7
+776.66766 55429.4
+776.91748 37142.3
+777.16827 17528.7
+777.41882 5519.6
+777.67078 1624.3
+778.46716 653.3
+780.91742 1106.4
+788.14069 553.0
+789.09729 1482.7
+789.43085 1247.5
+790.88983 7985.2
+791.39221 10005.6
+791.89124 7022.3
+792.39020 2753.4
+792.89319 1019.7
+793.11633 761.4
+793.43939 1901.4
+794.11530 2134.4
+795.10388 4818.4
+795.43646 8020.1
+795.56653 1023.9
+795.77106 4721.8
+796.10724 3136.5
+799.89667 4833.5
+800.39783 6885.1
+800.89880 3609.5
+801.39557 3157.1
+811.76184 1178.6
+819.40637 6756.7
+820.40765 3654.1
+821.40900 1474.5
+832.79364 979.1
+833.12524 1040.2
+833.46826 1162.9
+833.80316 925.4
+837.41791 1163.6
+857.97571 1524.7
+858.47900 4142.5
+858.97717 2779.8
+876.48962 1778.1
+876.82098 1040.4
+903.85358 737.6
+918.00305 1222.4
+919.47021 1133.1
+919.81305 933.8
+920.14697 1180.4
+926.50140 951.5
+927.00720 1346.8
+927.50995 913.9
+947.88953 679.0
+953.48907 870.5
+957.17450 1423.7
+957.51324 1402.1
+966.14172 786.6
+1035.32471 607.8
+1057.27795 920.6
+1077.09131 754.0
+1118.57141 655.8
+1172.66223 636.7
+1188.19470 889.0
+1198.18494 3124.9
+1232.61401 671.5
+1378.08875 635.2
+1525.47217 891.6
+1528.30835 692.3
+1718.41162 789.9
+1852.66528 562.9
+1862.23010 692.4
+1874.16052 1004.9
+1876.35999 572.7
+1877.44421 1156.8
+1878.84534 1100.3
+1879.13049 1857.1
+1879.60828 19495.6
+1880.10083 2310.8
+1880.38940 723.0
+1880.90796 1119.3
+1881.70190 910.3
+1906.59644 692.1
+1907.01917 7507.0
+1930.65979 785.8
+1971.41846 714.2
+S	1878	1878	1879.9378246
+Z	3	5636.538
+Z	2	3758.028
+505.68564 655.4
+532.57709 2217.0
+572.91541 646.8
+575.99493 652.3
+660.37225 556.9
+676.67700 1073.1
+695.76764 580.4
+706.39746 555.5
+731.17822 685.5
+870.94580 637.9
+937.41675 608.5
+952.22430 581.2
+958.83478 673.5
+1163.91077 575.9
+1188.26892 769.9
+1198.28931 3680.5
+1294.66052 698.5
+1419.01294 749.0
+1717.57422 1631.0
+1873.07581 1056.5
+1877.08130 636.0
+1878.07788 704.1
+1878.91650 1738.6
+1879.36304 4142.3
+1879.60168 18310.6
+1880.25305 1147.6
+1880.54150 1532.9
+1881.73035 761.5
+1890.86462 635.8
+1907.03210 6876.7
+1916.25842 659.3
+1918.74634 944.4
+1930.76038 919.7
+1976.14685 631.2
+S	1879	1879	805.9371821
+Z	4	3219.71743
+217.29929 533.7
+232.84857 575.4
+240.18137 586.5
+248.33083 735.9
+249.51083 561.0
+260.47424 596.8
+262.84879 596.7
+266.55725 654.5
+268.48474 561.0
+271.73404 849.4
+280.18610 876.3
+288.12781 632.0
+296.51019 611.4
+299.32327 522.9
+305.20300 600.8
+329.59033 584.4
+333.65195 572.0
+342.82437 549.5
+374.22119 625.9
+417.18280 578.4
+447.53534 576.0
+487.58328 774.9
+532.52069 1940.5
+618.00421 1132.0
+630.41504 925.2
+656.03699 943.8
+670.85321 1495.5
+676.65906 1106.5
+684.85333 2200.8
+685.35266 1500.5
+685.84698 854.0
+686.87671 724.6
+687.10614 681.1
+693.85632 2098.2
+694.35663 1372.8
+694.42126 1093.4
+694.85944 1123.2
+695.38715 2054.6
+715.11554 854.9
+715.37299 1009.2
+718.05164 778.6
+718.12781 1144.2
+718.38293 1516.2
+727.89374 735.0
+732.14142 965.6
+732.39087 1034.5
+734.63257 754.9
+735.99359 745.8
+736.38757 1257.2
+736.64673 1954.0
+736.89917 1538.8
+738.64148 1693.0
+738.89270 3842.7
+739.14178 2272.0
+739.38586 1382.4
+740.90332 757.0
+741.14648 652.2
+743.14221 6229.6
+743.39252 8140.8
+743.64362 7513.8
+743.89484 6233.0
+744.14813 1236.8
+747.64429 3075.4
+747.89496 5088.4
+748.14618 3413.2
+748.40259 1178.2
+748.65210 738.3
+751.93671 2872.7
+752.43506 1900.5
+752.93762 1206.9
+753.94366 1388.5
+755.75201 1606.3
+756.39911 757.6
+760.16901 732.1
+760.40991 1264.7
+760.65729 1758.9
+760.91547 1268.8
+761.15771 783.5
+764.41382 4143.9
+764.66467 3002.9
+764.91473 3665.9
+765.16748 2641.0
+765.41479 2291.5
+766.91144 2209.9
+767.16107 6148.8
+767.41223 4709.3
+767.66406 2664.1
+767.91437 1822.0
+768.91553 2196.9
+769.06842 733.0
+769.16827 2491.2
+769.41956 1868.8
+769.67914 1040.6
+770.42969 1329.0
+771.41327 20039.4
+771.66382 29657.4
+771.91412 26983.3
+772.16492 12492.5
+772.41589 4857.3
+772.66632 2045.4
+775.91522 11777.6
+776.16681 17316.4
+776.41766 12053.0
+776.66742 6304.6
+776.91858 4099.3
+777.17358 1387.2
+785.67987 1195.2
+785.93292 1164.6
+786.17535 1379.4
+790.89160 2418.3
+791.39368 1331.9
+795.56372 773.3
+842.45813 751.6
+843.11053 736.9
+848.96313 877.9
+857.97498 4765.4
+858.47711 3163.9
+858.97772 2543.0
+859.47888 1571.1
+870.46252 741.0
+875.82068 1575.5
+876.14978 1608.7
+876.48792 1107.6
+881.82776 1227.6
+882.15552 998.3
+909.49768 729.7
+909.82074 867.2
+915.50226 2440.8
+915.83685 4008.7
+916.16864 2070.6
+917.50586 8390.7
+918.00659 7633.1
+918.50531 5140.2
+918.85284 736.3
+919.00555 1620.1
+919.47473 1256.2
+919.81354 1105.2
+920.14563 1585.2
+925.14728 1485.5
+926.50494 1104.0
+927.00635 1121.2
+945.40594 691.2
+956.83514 892.4
+957.17139 973.3
+957.84387 986.5
+958.18219 584.8
+959.97485 824.5
+977.51807 656.9
+986.03607 2019.1
+987.04279 948.2
+987.54553 2160.7
+987.88159 1009.5
+988.21649 1050.4
+990.52167 1214.6
+990.85541 2243.6
+991.18616 1336.7
+991.52216 1068.5
+996.85754 1317.6
+1018.59119 572.5
+1023.53259 2391.8
+1028.55518 799.1
+1028.87219 1036.3
+1042.58569 648.4
+1076.07300 1612.0
+1076.57666 1177.9
+1077.07874 1435.6
+1118.54797 864.1
+1133.11450 836.2
+1136.11755 821.0
+1188.23669 698.1
+1198.16541 3214.4
+1231.64771 1103.8
+1232.64185 898.3
+1249.65771 943.4
+1567.43567 587.5
+1716.76819 804.4
+1856.75635 705.6
+1872.29077 626.6
+1877.71851 619.9
+1878.90344 2364.8
+1879.13660 2131.8
+1879.59192 19359.9
+1880.30298 2338.3
+1880.51526 895.4
+1881.20667 971.3
+1886.56519 564.8
+1906.82996 1373.6
+1907.11377 6970.8
+S	1881	1881	644.9534686
+Z	5	3219.72822
+167.29588 590.3
+167.78314 614.5
+176.89587 549.2
+186.58443 566.5
+196.02866 565.3
+198.89780 927.8
+199.15411 777.6
+199.17203 810.5
+199.22224 708.5
+199.26164 747.1
+199.26956 2806.7
+199.29402 752.6
+199.36728 855.3
+215.50562 729.5
+215.82159 549.7
+224.17160 543.9
+248.45778 580.6
+254.12820 594.2
+256.61673 648.7
+271.07614 598.2
+271.09027 606.1
+271.25412 608.3
+271.71378 622.0
+278.41101 556.9
+279.93591 600.7
+281.35596 558.1
+297.75513 513.8
+303.42697 654.8
+308.89877 671.1
+315.92801 593.3
+350.28546 769.5
+376.71390 1481.2
+412.11737 644.4
+427.53836 647.6
+431.19882 601.9
+445.37112 549.1
+456.20776 568.1
+457.93094 816.0
+466.75055 723.3
+492.29837 1376.6
+492.62952 2878.7
+495.96063 982.7
+496.29150 1300.1
+501.62714 2518.0
+501.96164 2630.6
+520.64948 1118.6
+532.46759 1713.6
+535.30865 3089.3
+535.64325 4630.7
+535.97925 2360.5
+536.31232 1421.7
+541.24384 1061.1
+541.31329 10558.2
+541.64722 12222.0
+541.98114 7169.0
+542.31580 3387.5
+559.25641 1582.3
+560.31989 667.3
+561.26904 633.2
+566.81531 1577.6
+589.11035 669.9
+592.08234 1028.6
+592.32880 1644.9
+592.83612 783.6
+594.92297 741.3
+596.57904 647.3
+596.83063 1108.1
+606.00348 857.6
+606.33936 1654.6
+608.70532 781.0
+611.73199 2450.4
+611.93439 4463.6
+612.13715 3561.4
+612.33521 2344.9
+612.53436 1904.9
+612.73566 1141.7
+613.92883 885.1
+614.32300 818.4
+617.33337 1883.5
+617.53442 4816.7
+617.73407 3997.7
+617.93890 1944.5
+618.00177 1135.8
+618.13263 1818.8
+618.33502 1547.2
+618.59381 744.3
+618.67639 691.8
+621.33539 1518.8
+621.37854 579.6
+656.03497 752.4
+670.85742 960.4
+676.63379 917.8
+680.02716 1398.1
+680.36200 4024.5
+680.69745 3143.4
+681.03186 1469.6
+684.85303 3712.7
+685.35150 3407.2
+685.85449 2330.9
+686.35834 1016.6
+688.31329 1446.4
+689.86182 1337.2
+690.11517 1413.4
+690.36108 1652.1
+693.86139 1061.9
+694.36096 1569.5
+695.39539 3008.2
+695.71832 1803.0
+695.89606 3161.1
+696.05524 774.3
+696.39648 1896.1
+696.90485 738.7
+701.85736 1011.3
+703.59546 770.6
+706.32379 7349.0
+706.64130 1047.6
+706.88885 611.5
+707.32434 2636.4
+708.32623 1064.2
+708.39026 1455.7
+708.72650 730.4
+709.05865 1277.0
+711.15570 1822.5
+711.40173 1159.5
+711.64740 1287.6
+712.05597 1871.9
+712.38458 973.3
+712.71759 978.4
+714.39215 773.1
+715.12073 1163.5
+715.37811 1904.5
+715.62219 1118.0
+715.87183 1211.8
+717.72296 9496.1
+717.88446 1563.1
+718.05804 15350.9
+718.13275 3002.7
+718.38965 16131.3
+718.63385 3769.2
+718.72589 7698.4
+718.88123 1758.7
+719.05884 1869.5
+719.14172 881.5
+719.40320 981.4
+722.63770 914.6
+727.64417 914.2
+727.88403 1316.3
+728.13617 2840.5
+728.38770 739.0
+732.14197 1449.6
+732.38824 2313.6
+732.63934 2218.9
+734.36694 724.9
+734.63812 983.9
+734.88550 1347.7
+735.14386 874.4
+736.14166 869.7
+736.40118 1142.8
+736.64575 1416.4
+736.74329 1321.5
+736.89716 1951.9
+737.07715 1427.2
+737.40546 877.0
+737.75049 804.2
+738.40521 718.8
+738.63959 3255.3
+738.74139 1120.5
+738.89160 8492.4
+739.14215 9061.3
+739.39478 6464.3
+739.64240 5346.5
+739.89105 1857.4
+740.15411 805.7
+740.91138 1908.6
+741.16425 2846.6
+741.41418 2434.0
+741.66467 1000.0
+743.14429 21663.7
+743.39471 51154.7
+743.64551 54063.4
+743.89587 43621.9
+744.14673 23295.8
+744.39673 8458.4
+744.64789 3259.0
+744.90106 2101.7
+746.41846 1463.3
+747.64752 6434.0
+747.89697 8488.9
+748.14734 11560.7
+748.39923 10474.6
+748.65070 5974.1
+748.90045 2832.5
+749.75110 1498.4
+751.40051 2486.8
+751.73987 3965.7
+751.93848 5865.9
+752.07294 2434.7
+752.38782 694.1
+752.44562 4074.8
+752.94086 3114.4
+753.44464 1392.2
+755.41846 9044.1
+755.75256 13520.5
+756.08673 10375.4
+756.42114 5409.5
+756.75891 1269.6
+757.40912 12093.3
+757.74329 17522.3
+758.07739 11349.5
+758.41119 8003.5
+758.74658 3657.2
+760.15887 1263.6
+760.41046 2179.2
+760.66119 3095.9
+760.91229 4292.0
+761.16467 1079.3
+761.39612 1114.3
+762.65900 893.6
+762.90814 1650.1
+764.41559 3757.8
+764.66656 8568.9
+764.91785 9350.8
+765.16760 10153.0
+765.42084 5742.3
+765.66803 2576.7
+765.92145 859.3
+766.91351 3940.1
+767.16388 8873.5
+767.41296 12509.1
+767.66364 10525.9
+767.91443 7467.7
+768.16290 3356.7
+768.41913 1528.6
+768.66058 1696.7
+768.91473 2694.6
+769.16736 2714.9
+769.42041 3681.0
+769.66547 3288.9
+769.91602 3073.1
+770.16241 935.1
+770.78394 865.2
+771.41498 64299.8
+771.66589 142759.8
+771.91571 173056.0
+772.16602 131047.2
+772.41620 88170.2
+772.66663 37659.5
+772.91742 11308.4
+773.04828 1108.0
+773.16724 2978.6
+773.29742 1069.9
+773.54852 635.9
+773.68250 701.6
+773.79810 754.5
+773.92181 1353.6
+774.05212 894.3
+774.18250 1404.1
+774.43658 894.1
+774.77063 1131.9
+775.03937 786.2
+775.91711 40596.7
+776.16748 83934.8
+776.41821 101396.5
+776.66815 82290.5
+776.91852 49952.7
+777.16913 23093.3
+777.42120 7504.0
+777.67041 2429.2
+777.92181 1111.5
+778.45563 882.9
+778.71399 900.9
+780.67316 716.9
+781.18103 813.4
+781.41443 826.7
+789.09961 1078.6
+789.43774 1748.2
+789.76379 1620.8
+790.89160 12768.9
+791.39264 15472.3
+791.89368 9256.4
+792.39484 4463.6
+792.88971 1124.1
+793.44440 3300.0
+793.78369 2046.9
+794.11517 1149.9
+795.10382 7574.0
+795.43707 9141.7
+795.77197 8474.7
+796.10504 6376.7
+796.44580 1477.9
+799.89667 8000.0
+800.39856 8944.8
+800.89923 6466.1
+801.39294 3759.3
+801.93903 1590.8
+802.39447 1472.6
+802.43176 1455.4
+803.39514 758.7
+811.42761 2008.2
+811.76300 2067.1
+812.09387 2020.2
+812.42682 1258.2
+819.40454 9530.1
+820.40912 5577.5
+821.41095 1826.6
+832.80267 787.4
+833.13190 1597.9
+833.46692 1217.8
+837.41913 1486.1
+838.13660 684.9
+838.41327 1149.2
+838.78357 1518.3
+839.12366 871.0
+842.47748 935.8
+842.80688 1817.8
+844.48175 967.9
+849.97546 925.1
+857.97565 6564.3
+858.47760 7204.9
+858.98248 4920.7
+859.48547 1835.2
+869.48907 993.9
+869.96924 1036.9
+870.46985 850.5
+875.81494 969.4
+876.15057 2129.0
+876.48499 2822.2
+876.81488 924.8
+880.78650 706.3
+917.50232 1404.5
+918.01056 1984.7
+918.50836 1253.4
+919.12585 1197.8
+919.47736 2238.8
+919.81329 2280.9
+920.14490 2746.4
+920.47815 737.4
+925.81567 975.7
+926.51031 998.8
+927.00720 1422.4
+927.50891 1057.0
+932.49371 1410.7
+948.52722 1218.9
+956.84106 1192.4
+957.16968 2549.2
+957.50879 2566.4
+957.84204 1619.9
+958.17773 1304.6
+959.82642 845.4
+963.50977 1472.3
+963.84119 1185.9
+964.17175 668.6
+991.18451 1786.6
+991.52008 809.5
+1057.23462 907.3
+1076.58191 1486.0
+1077.08655 844.5
+1118.55188 1390.4
+1119.55957 1125.2
+1198.04761 3275.4
+1231.64307 625.8
+1550.16870 721.8
+1877.30640 998.1
+1878.91846 1282.7
+1879.52539 18598.8
+1880.30237 808.0
+1882.64917 904.1
+1907.07031 7382.5
+1907.72424 667.0
+1931.84424 1049.4
+1974.70422 668.4
+S	1882	1882	434.2639321
+Z	4	1733.02443
+116.90445 697.8
+120.68375 655.8
+121.78830 1108.1
+121.79298 1870.8
+124.27352 571.3
+124.60324 585.4
+133.11877 884.1
+137.29291 694.0
+139.65115 578.3
+152.52721 598.1
+156.77698 554.0
+157.13330 20300.2
+157.60696 787.0
+158.13658 1881.0
+169.49481 546.4
+171.64084 656.6
+171.78378 592.6
+173.28409 667.2
+175.26433 533.8
+181.50070 492.8
+182.45097 514.0
+183.14938 883.3
+185.12827 3343.7
+185.97115 641.7
+198.89842 741.6
+199.17371 1019.9
+199.18661 578.6
+199.23897 1172.0
+199.27092 3483.0
+199.28131 1220.5
+199.36958 1085.0
+209.12851 4092.3
+210.13025 699.7
+225.12329 1167.9
+225.19580 1972.5
+226.15492 28625.3
+227.13936 2503.2
+227.15828 4326.3
+242.14911 1794.5
+243.81758 721.4
+244.16551 121302.9
+244.56863 927.6
+245.16901 15197.4
+246.17123 1027.6
+255.29578 601.5
+259.81522 737.7
+264.15604 635.7
+270.05276 560.5
+271.28119 548.5
+298.21277 1371.5
+308.91000 746.8
+310.21286 964.1
+326.69916 683.4
+347.20438 794.2
+355.76044 559.0
+356.56534 509.9
+379.20959 1694.3
+399.43460 570.3
+410.55017 2389.8
+410.88394 1732.2
+412.72400 939.5
+416.49661 739.9
+455.22342 576.0
+464.26892 1780.6
+469.26538 1229.2
+469.88394 618.3
+470.76428 573.2
+473.27011 2708.1
+473.60944 4337.8
+473.94666 2956.3
+474.25589 655.3
+474.28110 1409.2
+474.62003 776.1
+476.24594 759.3
+479.27454 3215.0
+479.60617 3208.8
+482.28262 848.8
+482.62042 708.0
+482.66730 970.1
+487.95724 1280.5
+491.28580 1454.3
+491.61365 4097.6
+491.94742 2554.6
+492.28195 1485.0
+496.44809 885.5
+497.24881 668.9
+497.28854 138898.0
+497.62271 125508.1
+497.95703 71076.6
+498.29135 25353.5
+498.62604 6218.2
+498.79782 715.7
+498.96072 832.0
+505.28827 1908.2
+505.62256 1566.2
+505.95798 1496.0
+510.96011 679.8
+512.31403 920.2
+515.26129 775.8
+516.05530 725.0
+516.96735 172242.1
+517.30127 165002.9
+517.63562 98654.1
+517.96979 33839.9
+518.22351 1016.8
+518.30487 9631.6
+518.54999 832.8
+518.64063 2172.0
+525.52618 681.9
+526.27173 862.5
+527.28027 703.5
+532.46863 1719.5
+532.79694 14162.3
+533.29785 11757.8
+533.79944 3724.1
+534.30383 793.5
+546.32104 1410.3
+546.82367 1083.8
+553.33325 9660.2
+554.33838 3379.1
+554.66095 3210.7
+554.99579 5916.2
+555.33112 2455.0
+555.66705 1248.0
+563.32861 1221.5
+585.84814 2124.3
+586.34912 1046.0
+587.82074 8026.3
+588.31622 10164.4
+588.81665 6797.5
+589.31812 2304.9
+595.85583 1998.4
+596.35608 1197.2
+596.82629 14702.8
+597.32794 13294.1
+597.82904 4626.8
+598.32758 1095.7
+619.05713 640.5
+629.31628 1350.2
+630.84607 794.6
+635.84985 4906.6
+636.35120 4627.3
+636.85400 1620.1
+638.38245 1132.9
+638.88098 1298.3
+639.37054 1648.9
+639.87531 767.7
+640.32031 1916.9
+641.32544 673.3
+643.91779 609.1
+644.36072 2799.7
+644.85657 7162.1
+645.35712 5953.4
+645.85919 3054.6
+651.60748 1690.3
+651.74371 657.5
+652.10498 1166.3
+652.22046 690.2
+652.69830 785.8
+652.99414 739.2
+653.28638 1231.7
+653.36847 308396.2
+653.66144 809.6
+653.86920 287496.9
+653.94861 1434.9
+654.23102 1430.1
+654.37103 141869.6
+654.75928 1290.3
+654.87305 47206.1
+655.00543 804.4
+655.13873 1382.3
+655.37439 12740.0
+655.64117 1466.0
+655.87445 2094.8
+656.14532 693.4
+656.81982 607.5
+666.41748 2982.3
+667.41986 1049.2
+668.39490 4674.1
+669.39917 1279.9
+676.62280 928.5
+686.54639 605.4
+695.89508 802.1
+709.91016 6334.2
+710.41119 6631.4
+710.91357 3337.3
+731.13983 651.9
+753.40381 6816.5
+754.40820 3739.1
+755.40674 1025.2
+780.46228 2776.5
+781.46338 1071.5
+795.57776 1127.6
+832.73828 592.2
+881.49646 5322.4
+882.50067 3423.0
+913.61597 581.3
+927.52802 1486.1
+928.53857 1150.3
+1064.59192 1752.4
+1065.58606 1235.4
+1178.53674 596.9
+1198.05322 3176.1
+1306.78027 541.9
+1323.56750 603.4
+S	1883	1883	645.7558246
+Z	5	3223.74
+165.71986 10591.7
+165.77168 11069.7
+169.50182 8776.3
+182.79341 9729.6
+188.25964 10112.3
+188.26990 13700.7
+188.28140 14848.3
+188.29187 16271.1
+188.30815 14028.5
+188.31459 10851.6
+188.33087 9084.6
+199.18658 19041.0
+199.19728 11295.0
+199.23820 9917.6
+199.27452 14764.9
+199.28427 40631.9
+199.30370 10638.0
+199.38232 17157.9
+201.66628 7942.2
+215.98245 8897.8
+224.54164 9454.7
+238.71136 8319.8
+255.30365 13149.0
+260.06790 9177.8
+308.92126 10247.0
+318.78683 8975.5
+326.52112 9602.1
+329.45081 8615.9
+381.36588 8654.0
+404.41458 9419.2
+469.54263 8461.3
+476.49884 11172.0
+490.51349 10507.8
+501.62357 11759.6
+532.47919 33429.3
+535.30652 12481.7
+535.64362 21746.2
+541.31250 79535.0
+541.64606 78503.2
+541.97919 17617.4
+559.08813 10152.7
+562.54169 10031.0
+567.43646 10141.4
+596.82635 16581.5
+611.93005 18596.6
+612.13483 29209.6
+613.62482 10063.1
+617.33118 31440.7
+617.53168 36836.7
+617.73389 35897.2
+617.93011 9450.0
+676.63263 11936.8
+679.03094 9207.2
+706.32141 24468.1
+717.72186 30537.1
+718.05603 54568.2
+718.38776 18945.7
+738.40454 10003.3
+740.91162 17693.7
+741.65924 8759.8
+743.14246 75059.0
+743.39307 140704.4
+743.64410 130849.0
+743.89563 70965.1
+744.14783 45809.0
+744.40027 19342.0
+747.63922 12891.8
+747.89612 36943.7
+748.14441 12880.3
+748.39508 14766.3
+751.40308 15411.8
+751.93420 13018.5
+755.41321 19236.0
+755.75348 17553.2
+757.40710 60144.8
+757.74274 74887.4
+758.07672 46511.6
+758.41449 22231.6
+760.90173 8641.0
+764.92438 14763.1
+767.16187 19221.7
+767.90857 11617.6
+771.41357 424928.4
+771.66425 814776.0
+771.80408 13576.2
+771.91412 687154.2
+772.16528 454230.7
+772.41547 213287.5
+772.66638 83647.4
+772.91803 40032.8
+775.91669 258717.5
+776.16669 429986.8
+776.41730 401192.8
+776.66779 223922.9
+776.91705 109169.5
+777.16785 47579.6
+777.41852 16761.1
+790.88977 66859.3
+791.39148 55715.6
+791.89233 28297.4
+792.39337 14678.1
+795.10406 22395.8
+795.43500 40258.8
+795.57764 15732.3
+795.77094 36474.5
+799.89825 37790.1
+800.39233 31417.3
+801.39526 17191.6
+819.40259 37702.2
+820.40094 17762.7
+840.10205 8983.9
+988.49841 9189.2
+1049.64111 10608.5
+1100.35669 10048.5
+1198.07031 49523.6
+1221.35364 10402.7
+1329.26074 10369.9
+1336.11536 9873.2
+1483.17358 8754.0
+1525.50867 11546.8
+1581.09387 10524.7
+1763.51086 10091.5
+1877.26868 12526.3
+1878.47314 19290.9
+1878.91284 11659.3
+1879.39966 117860.2
+1879.63953 246239.1
+1879.91284 85450.4
+1880.47656 21402.9
+1907.04004 100823.6
+1907.27344 29063.7
+1918.77136 11451.5
+1925.86487 10389.4
+1930.70178 19387.4
+S	1885	1885	434.2598446
+Z	4	1733.00808
+106.88775 615.9
+115.56909 551.5
+120.20766 597.7
+121.79105 1755.5
+121.79868 605.4
+126.03477 544.0
+138.94489 546.4
+141.84796 514.7
+146.92117 511.8
+147.11325 884.2
+157.13324 20508.3
+158.13672 1606.2
+171.63838 774.9
+173.42809 489.8
+181.13255 732.9
+182.78247 631.0
+183.14894 1911.4
+185.12839 3346.4
+198.89449 717.6
+199.24954 951.1
+199.26192 641.8
+199.27110 1458.3
+199.28386 1618.7
+199.29523 1720.3
+199.31435 1270.8
+199.36908 732.4
+199.39668 569.2
+199.63376 590.3
+204.26465 548.3
+205.96017 812.6
+209.12846 4667.2
+211.28261 558.6
+225.12312 1094.1
+225.19704 1107.7
+226.15488 27639.8
+227.13911 2001.9
+227.15800 2938.9
+242.15050 1783.8
+244.16545 115537.3
+244.36455 817.0
+245.16901 14455.4
+253.19131 1041.0
+271.57532 732.3
+272.74936 555.3
+298.21274 1463.2
+301.34930 630.7
+308.90298 1114.8
+320.46936 599.3
+341.70517 819.6
+379.20877 1765.4
+412.72488 1007.0
+413.22589 709.3
+441.25278 661.7
+464.26630 1096.1
+469.26700 1666.2
+469.76392 604.7
+469.89127 693.3
+473.26923 2033.1
+473.61053 4617.4
+473.92465 1443.1
+473.94940 2463.8
+474.27994 2174.2
+475.91870 531.2
+479.27277 6553.8
+479.60739 3841.5
+479.94135 1655.0
+487.96246 879.7
+491.28543 1141.4
+491.61331 6400.7
+491.94620 2957.8
+492.28333 1312.2
+496.12329 660.6
+496.22440 603.6
+496.45343 942.0
+496.52466 648.8
+497.03778 961.2
+497.28851 213026.0
+497.62268 200478.2
+497.87201 1788.7
+497.95694 100510.7
+498.20139 1653.1
+498.29141 35887.2
+498.46191 886.7
+498.62546 8667.0
+498.79565 896.6
+498.96136 1672.1
+499.13803 556.2
+505.28925 1270.0
+505.62018 1500.4
+505.96030 1138.0
+510.96597 1134.4
+512.31262 865.0
+516.35071 1215.7
+516.96722 231941.6
+517.02264 685.2
+517.08716 927.3
+517.30109 217201.0
+517.63544 109789.5
+517.91992 1025.4
+517.96967 35697.1
+518.10559 1275.2
+518.21008 1380.5
+518.24963 804.3
+518.30505 7488.8
+518.54480 1057.2
+518.63989 1964.8
+526.27759 1513.0
+532.47827 2201.3
+532.79675 17983.4
+533.29810 11864.8
+533.79846 2785.3
+546.32220 1749.5
+546.82526 814.3
+553.33374 10389.9
+554.33563 2795.6
+554.66193 5547.5
+554.99677 7420.9
+555.33136 2481.9
+555.66785 1027.4
+563.33026 1336.9
+579.31793 629.4
+585.84729 1309.6
+586.35205 813.8
+587.82086 9605.0
+588.31805 10155.7
+588.81635 5439.9
+589.31970 1303.6
+595.85364 2415.6
+596.35516 1407.7
+596.82642 16570.4
+597.32819 11830.5
+597.82941 4449.8
+598.33002 1472.5
+603.83075 982.1
+623.29559 1020.3
+629.87097 1062.9
+630.37152 897.8
+635.85040 5304.6
+636.35291 4953.1
+636.86176 1257.9
+638.38367 1656.1
+638.88483 1250.0
+639.36963 1699.4
+639.87494 848.0
+640.31824 1221.7
+641.33527 664.5
+644.36517 2773.0
+644.85681 8156.4
+645.35706 6418.6
+645.85956 1659.0
+646.35706 935.9
+651.60590 1222.8
+652.10748 748.5
+652.49615 1482.1
+652.99780 1397.7
+653.36835 351613.5
+653.44824 1489.8
+653.49078 1029.5
+653.69189 759.4
+653.70996 606.7
+653.86914 273456.3
+653.99005 899.5
+654.24286 2485.1
+654.29706 580.3
+654.37103 115946.7
+654.74304 1595.3
+654.87329 37189.3
+654.95557 676.0
+655.03363 745.2
+655.06677 860.4
+655.13831 1220.4
+655.30756 611.8
+655.37384 9000.8
+655.63873 1311.7
+655.86932 1669.3
+656.13751 659.7
+666.41577 3860.4
+667.41992 951.7
+668.39575 3892.3
+669.39996 1382.8
+676.64429 934.6
+686.54492 618.7
+688.41193 728.5
+709.91064 9313.8
+710.41168 6478.3
+710.91132 1758.7
+719.40894 641.1
+720.99030 657.5
+753.40405 8501.2
+754.40631 4023.2
+780.46069 3218.2
+781.46552 1959.4
+867.04590 725.1
+881.49896 4553.5
+882.50061 3042.3
+927.52832 2551.1
+928.53290 1655.0
+937.52808 1092.0
+958.40118 612.3
+1064.58777 3379.3
+1065.59436 2281.4
+1198.06604 3521.3
+S	1886	1886	644.9481586
+Z	5	3219.70167
+171.07964 515.3
+179.47351 560.0
+182.78650 568.2
+195.37764 602.9
+198.89607 777.2
+199.18018 712.9
+199.19617 664.5
+199.23592 707.4
+199.24365 481.3
+199.25031 877.1
+199.28024 2670.9
+199.37946 750.9
+199.40445 676.7
+209.38831 648.7
+214.52751 616.8
+229.03636 526.2
+245.98746 599.3
+255.29263 722.7
+308.91089 631.6
+325.16153 621.4
+327.27563 571.9
+328.80661 521.7
+342.27692 606.0
+343.83289 565.2
+354.69733 572.7
+381.35980 691.6
+406.39682 636.7
+484.18515 666.7
+490.71112 560.6
+492.29514 894.2
+495.95624 967.4
+501.96112 1456.5
+502.29132 871.7
+520.98108 649.9
+529.94647 646.1
+532.48505 1681.2
+535.30957 1464.4
+535.64227 2437.0
+535.97461 973.1
+541.31213 4506.2
+541.64734 5558.5
+541.98065 4240.1
+542.31390 1343.2
+542.64703 719.9
+544.11102 590.4
+549.16028 869.2
+553.78540 1664.3
+559.25189 966.3
+567.07031 819.8
+567.30975 655.6
+597.07629 691.0
+611.93732 1535.5
+612.13318 3144.8
+612.33490 4153.1
+612.53455 2058.1
+617.32806 682.8
+617.53125 1108.6
+617.73230 2158.6
+617.93207 2472.0
+618.13580 1351.4
+618.33997 1332.4
+625.34961 756.4
+630.41534 1055.2
+633.16333 590.4
+639.05432 645.0
+675.02905 591.3
+676.60950 1004.7
+680.36078 1107.5
+680.69354 879.1
+684.84985 1047.9
+685.35675 1171.3
+685.85034 1428.1
+689.38251 947.5
+694.36078 748.8
+695.39050 1112.3
+695.89502 1278.9
+696.39899 1037.1
+706.32288 2937.5
+707.32684 1753.8
+708.32336 849.3
+711.91138 797.1
+712.66907 575.3
+712.70258 578.3
+715.62341 874.0
+717.72485 2804.0
+717.86597 595.7
+718.05560 8180.6
+718.13037 1182.7
+718.38892 8038.5
+718.63696 1059.4
+718.72510 4629.3
+722.88666 924.2
+728.13251 804.0
+732.38580 857.9
+732.89020 1138.5
+736.88892 1281.6
+737.40552 1108.1
+738.89185 900.0
+739.06836 1044.3
+739.14117 1994.1
+739.39301 3430.8
+739.64264 2564.1
+739.90070 1046.2
+740.91913 916.0
+741.16046 1396.3
+741.66467 960.9
+743.14319 4442.1
+743.39374 15595.9
+743.64496 26697.3
+743.89526 29809.4
+744.14496 18458.0
+744.39691 9204.1
+744.64862 2225.3
+747.63910 818.0
+747.89648 2359.2
+748.14685 6030.5
+748.39789 6343.9
+748.64862 2625.3
+748.89679 2323.4
+751.74664 896.9
+751.93915 2488.3
+752.07520 1980.2
+752.44482 3156.3
+752.94257 1743.2
+755.41486 1691.4
+755.75122 6391.1
+756.08624 7821.6
+756.41986 4279.2
+756.75635 1783.0
+757.08691 801.6
+757.17249 662.6
+757.40887 2928.8
+757.74207 7272.2
+758.07629 8852.6
+758.41101 7141.3
+758.74188 2634.1
+759.08014 820.0
+760.90540 633.8
+763.12012 3135.6
+763.36945 2601.1
+763.62115 1407.2
+764.91650 4281.4
+765.16919 4497.5
+765.41614 2562.8
+765.66278 1379.8
+765.92126 1063.2
+766.92169 804.2
+767.16089 2364.8
+767.41412 6638.0
+767.66370 5527.4
+767.91229 4900.6
+768.16095 1610.6
+768.40784 997.1
+769.15863 1258.8
+769.40869 1036.1
+769.66528 2697.2
+769.92084 1641.1
+770.16406 752.9
+771.41461 11657.7
+771.66510 38978.6
+771.91528 95940.1
+772.16541 99248.2
+772.41571 64296.9
+772.66577 26844.2
+772.91730 10013.1
+773.16632 3008.1
+773.41351 1211.3
+774.42737 886.1
+774.78381 1019.9
+775.91577 6563.6
+776.16693 27773.0
+776.41779 53083.2
+776.66779 56037.3
+776.91803 39412.3
+777.16888 13727.2
+777.41888 4787.0
+777.67303 1180.6
+789.76611 1423.3
+790.89056 3912.1
+791.39276 7610.3
+791.89203 6103.3
+792.39136 3928.1
+793.44647 1163.1
+793.78351 1145.9
+794.10895 1116.3
+795.10498 1870.5
+795.43738 3725.6
+795.57336 888.7
+795.77167 4890.2
+796.10486 4977.7
+796.44202 1746.7
+798.11163 618.9
+799.89722 3319.5
+800.39532 4866.0
+800.89746 3122.1
+806.08807 765.6
+812.10052 889.4
+812.42554 1114.3
+819.40405 4125.2
+820.41138 3142.2
+821.41022 1657.5
+849.93561 551.8
+857.97211 1883.9
+858.47717 3575.5
+858.97693 1794.7
+859.46942 1502.5
+876.82745 907.1
+917.50275 855.9
+919.80664 1230.0
+920.14819 1410.7
+920.47656 1575.3
+948.53748 1087.7
+957.51160 1233.7
+1020.83942 696.7
+1030.92725 598.7
+1041.96875 729.0
+1057.21338 814.1
+1119.56335 769.5
+1188.08911 856.1
+1193.48376 631.0
+1198.08105 3208.4
+1216.62781 634.9
+1280.45166 673.5
+1669.25879 610.9
+1870.21521 1203.6
+1878.43042 786.1
+1878.99536 1562.0
+1879.46399 20282.9
+1879.97034 1451.4
+1907.05273 7316.2
+1907.84985 655.5
+1918.74622 752.9
+1930.62915 1184.6
+1932.12280 827.4
+S	1887	1887	434.7615746
+Z	4	1735.015
+107.81380 4604.3
+109.61659 4732.4
+121.79045 18480.3
+128.54590 3993.8
+140.87379 4363.6
+157.13301 125420.9
+158.13622 6476.0
+159.21098 4853.0
+164.55753 4501.8
+167.17766 3890.8
+167.18306 3912.1
+170.10309 4124.4
+185.12836 19402.6
+197.27901 4794.8
+198.89713 9158.9
+199.08936 4320.4
+199.19398 4686.8
+199.26820 16002.6
+199.28064 15232.4
+199.30716 4756.3
+199.31487 3782.5
+199.32253 3884.7
+199.37608 4326.5
+206.89503 4451.9
+209.12819 16029.4
+210.55566 4534.9
+225.19505 5444.2
+226.15454 133820.3
+227.13834 10579.5
+227.15813 10891.9
+235.51895 4446.4
+244.16504 575245.2
+244.43280 4691.4
+245.16853 59817.2
+264.24802 4851.4
+280.17245 4043.1
+298.21152 12969.3
+306.07526 4789.7
+341.28043 4079.0
+388.22964 5607.6
+392.05792 4687.7
+397.84836 4119.0
+399.36807 4529.6
+410.07599 4446.0
+423.86304 4805.0
+438.48309 4984.4
+443.37418 4367.7
+459.47922 4496.4
+464.26376 6179.2
+469.26682 9154.2
+473.26852 9893.0
+473.60916 22718.0
+473.92520 15001.5
+474.06857 4433.9
+474.27820 7494.9
+479.27109 16638.7
+479.60800 15609.6
+482.08804 4642.1
+482.61572 5180.3
+482.90448 4042.6
+488.29492 5490.9
+488.62582 3683.0
+491.28226 7985.5
+491.61240 26171.0
+491.94702 17565.2
+492.28101 13425.6
+497.04633 4109.1
+497.28778 755741.5
+497.62204 624078.8
+497.95624 307107.3
+498.29044 106539.8
+498.62512 11801.9
+498.80191 4628.3
+505.28708 10419.7
+505.62125 11712.1
+511.29636 7111.2
+512.31720 5367.0
+516.96661 965200.3
+517.30066 930822.0
+517.63501 428442.6
+517.96924 139182.6
+518.30450 31300.7
+525.98383 4277.9
+532.47791 14465.8
+532.79645 48714.2
+533.29718 28949.4
+533.79761 10366.5
+536.78778 5712.2
+539.83002 4997.6
+549.14832 5200.5
+549.29706 4482.6
+553.33319 39447.1
+554.33496 10387.1
+554.66193 16013.4
+554.99536 18696.5
+555.32892 18733.1
+555.66382 5704.4
+563.32990 6657.8
+585.85291 5295.2
+587.81976 28838.5
+588.31335 29170.6
+588.81354 19356.9
+589.31958 10559.8
+593.03082 4797.3
+593.44543 5027.2
+595.84912 6808.5
+596.82599 74811.3
+597.32733 46782.6
+597.82922 14625.4
+627.11487 4327.1
+628.05585 6032.8
+630.40210 5439.5
+635.85443 9550.0
+638.38141 5722.9
+638.87866 6539.9
+639.37201 6083.0
+640.31738 6357.9
+644.85406 25467.0
+645.35919 18946.9
+651.59631 5674.8
+652.09863 7181.7
+652.49323 7002.6
+653.36774 1516369.9
+653.86871 1148967.0
+654.23779 7521.8
+654.37079 482384.6
+654.87219 143635.4
+655.14020 10134.7
+655.37518 29895.0
+666.41736 6974.0
+668.39722 8716.8
+676.64124 8083.2
+709.91162 23961.6
+710.41107 23126.1
+753.40009 22473.8
+754.39636 5625.9
+795.58380 8375.2
+881.49854 12183.6
+882.49329 6043.7
+905.30658 5892.4
+1064.59021 10495.9
+1065.59302 6664.6
+1198.06470 22430.5
+1338.05859 5452.2
+1375.96680 5691.9
+1685.51318 4734.6
+S	1889	1889	434.2587446
+Z	4	1733.00368
+109.11848 10763.5
+118.35603 7413.9
+118.35813 6876.7
+118.56524 9742.3
+121.78987 36258.4
+140.81586 7592.0
+156.59789 10753.6
+157.13307 148791.2
+158.13623 12594.2
+165.61017 8754.4
+165.76875 13592.0
+170.00645 9077.5
+176.25618 9275.4
+182.79105 11363.6
+185.12715 17342.9
+195.82167 9232.1
+198.89613 12625.7
+199.14337 9917.2
+199.18301 13578.7
+199.19197 9886.4
+199.24173 10162.2
+199.25665 8217.8
+199.28165 42166.7
+199.28940 21709.2
+199.30003 10193.9
+199.37952 17920.4
+199.38745 8370.4
+209.12827 15524.8
+209.49957 8703.2
+210.64520 8690.1
+213.14687 10903.3
+226.15456 160192.7
+227.13893 10865.9
+227.15747 12984.4
+229.68999 7375.1
+230.06789 8937.1
+244.16501 682149.6
+245.16853 87343.0
+269.04651 8634.9
+274.97583 9373.5
+280.19730 11028.2
+281.54553 10866.0
+297.58743 8844.1
+304.11310 9842.3
+308.91745 10835.2
+310.12488 8273.2
+318.96295 9917.3
+356.30237 8069.4
+363.99149 8503.3
+380.35107 9438.7
+395.52228 6926.3
+395.53033 7084.9
+429.65820 9729.1
+436.81293 9025.3
+466.31839 8242.1
+469.26511 17484.8
+469.89514 10608.8
+473.27039 19929.5
+473.59662 22767.5
+473.94547 11660.9
+479.27292 24097.7
+479.60541 16512.4
+479.76865 7309.5
+479.93353 13873.0
+482.49698 8711.4
+487.95428 14192.2
+491.28558 10204.1
+491.61389 38220.7
+491.94586 20788.3
+492.28732 10401.2
+497.28772 866526.6
+497.62198 800655.8
+497.95642 368333.2
+498.29132 99522.6
+511.96347 10135.3
+516.96661 1262012.8
+517.30066 1036577.1
+517.63501 482082.2
+517.96942 151105.7
+518.30829 13659.5
+518.67230 9663.7
+532.48792 30912.3
+532.79590 58886.7
+533.29565 33018.6
+549.18457 10249.2
+553.33356 37989.1
+554.34064 9886.8
+554.66199 41127.4
+554.99432 41430.7
+555.32916 15926.4
+561.41528 9252.7
+587.82019 48839.5
+588.31689 35918.3
+588.81287 26451.1
+589.32007 11618.8
+596.82526 82213.9
+597.32751 68183.4
+597.82599 21940.0
+623.30011 10200.3
+630.43854 9244.8
+635.85095 15804.2
+636.30444 9511.8
+644.36353 18157.6
+644.85529 25058.4
+645.35602 21157.5
+652.49200 11485.2
+653.36774 1779124.6
+653.86865 1334338.8
+654.37079 606164.3
+654.87378 172542.3
+655.37732 25102.4
+666.41772 14136.2
+668.40131 18670.1
+676.64429 16668.7
+686.50903 8569.4
+709.90985 24348.7
+710.40729 20590.7
+753.40417 21776.7
+881.50378 14020.2
+927.94977 8023.3
+1020.94379 7724.4
+1021.17603 9074.3
+1057.23621 11947.6
+1188.01196 12712.6
+1198.08972 49324.6
+1241.76624 9706.8
+1377.36780 9020.2
+1674.73462 10183.6
+S	1890	1890	501.2563046
+Z	4	2000.99392
+138.54492 532.0
+143.46985 631.8
+148.39931 591.4
+149.84641 566.4
+168.65474 554.6
+169.49977 674.1
+170.70746 596.9
+171.63899 567.4
+188.23633 575.6
+188.25102 683.8
+188.26411 829.4
+188.29332 905.1
+188.30403 508.3
+188.31296 647.7
+188.32806 745.4
+188.33945 622.6
+188.35387 603.3
+188.37007 691.9
+188.38615 606.7
+198.89688 761.9
+199.25694 766.3
+199.27995 2322.2
+199.29607 1022.0
+199.30344 1768.8
+199.37711 693.3
+199.40434 590.9
+228.94370 677.6
+233.12840 3513.3
+234.13184 1328.1
+237.12997 2116.8
+237.60188 677.8
+237.63153 844.3
+247.07312 819.0
+255.29796 734.9
+261.12210 837.0
+263.64337 760.0
+264.14117 598.3
+272.64899 4169.3
+273.15033 930.8
+280.19360 700.0
+285.65601 1140.5
+286.14029 1545.6
+301.55484 696.9
+303.17761 1368.9
+308.90875 727.5
+312.66339 1015.6
+318.11179 1134.6
+321.17523 4231.5
+321.67596 1334.2
+324.20261 874.9
+325.18652 3717.2
+326.19116 1068.5
+326.25070 519.3
+329.18964 870.5
+341.68469 8547.5
+342.18631 3953.2
+342.21335 3902.9
+344.18536 3422.6
+344.68842 1258.4
+345.44409 662.8
+347.50827 540.2
+353.19064 3661.2
+353.69266 2130.3
+358.18338 1938.9
+363.84717 634.0
+364.70590 852.1
+365.21118 1152.4
+366.66473 596.3
+367.18829 1839.6
+367.68970 1038.8
+368.23071 760.9
+379.70508 3830.4
+380.19281 4541.2
+380.21512 1290.8
+380.69437 2075.5
+381.00214 580.8
+381.19742 1312.0
+381.37259 705.6
+388.70892 9374.7
+389.21042 5005.5
+389.30234 630.5
+389.71164 1723.7
+390.20917 827.2
+391.21820 6964.9
+391.71982 2960.7
+392.22101 843.7
+393.70157 3222.8
+394.20401 1143.7
+394.71185 2159.8
+395.21176 1930.0
+396.22388 6458.0
+397.22855 1616.2
+399.87259 4526.2
+400.20673 4437.2
+400.54074 4179.8
+402.70676 9820.7
+403.20795 5304.1
+403.70853 2000.9
+404.19379 578.1
+413.25058 11766.7
+414.25342 2283.0
+416.26141 4262.2
+417.17896 1125.1
+417.26727 899.6
+421.71353 1217.4
+428.22961 971.0
+430.22757 4903.0
+430.72995 3163.7
+431.22565 1385.4
+432.70892 3516.8
+433.20880 2086.7
+439.26883 816.3
+440.75290 6231.4
+441.25339 4259.6
+441.75571 1112.6
+456.22662 3741.6
+456.55731 999.6
+456.89069 651.3
+457.22971 1702.5
+460.21780 1081.7
+468.22705 8205.4
+468.72867 7141.0
+469.22824 3628.7
+471.24649 1278.7
+473.25381 7236.2
+474.26056 2288.2
+474.49228 1096.4
+474.74356 2202.3
+474.98941 619.0
+476.27142 23609.2
+476.77295 19200.3
+477.27377 7286.1
+477.77609 1600.0
+478.74390 45427.9
+478.99429 96434.1
+479.24442 83435.2
+479.28430 700.0
+479.49417 45155.0
+479.74481 19632.5
+479.99490 6427.8
+480.23157 1203.7
+480.56824 1774.2
+480.90427 1808.9
+481.21979 1314.6
+481.71631 873.4
+482.21646 852.9
+483.24631 4795.0
+483.49686 7194.5
+483.74741 6391.2
+483.99643 4849.6
+485.23630 1016.3
+486.57709 36834.0
+486.91150 39597.3
+487.24539 22516.5
+487.57959 5756.3
+507.19080 661.7
+516.73425 1429.3
+517.72974 895.1
+524.77979 839.1
+525.27283 748.0
+526.24554 806.2
+527.26337 19783.1
+528.26672 7622.3
+529.26434 2093.5
+530.25665 3545.0
+530.59082 4163.7
+530.92279 2932.6
+531.25708 1043.1
+532.42603 1643.3
+532.97839 626.0
+533.78430 61434.6
+534.28546 51972.1
+534.78693 21765.1
+535.28778 4406.5
+535.79126 748.7
+541.27911 3617.1
+542.28394 1874.0
+544.28998 14370.0
+545.30048 8238.4
+546.30939 3199.3
+552.24371 672.1
+561.25452 1268.6
+590.29907 1645.9
+590.80096 1803.0
+591.29456 1002.2
+596.31573 684.5
+599.30463 90472.3
+599.80566 90342.8
+600.30621 49039.5
+600.80609 16655.4
+601.30524 3429.5
+602.28979 1592.9
+602.78973 1231.3
+604.28180 631.2
+609.95313 1112.9
+610.28937 2616.1
+610.62079 2746.0
+610.95477 1920.7
+611.29138 1082.0
+616.31134 872.4
+624.31702 1203.2
+638.98096 781.5
+651.82935 1030.6
+652.31573 1097.6
+653.30841 726.6
+662.33667 1233.8
+676.62701 935.1
+680.83606 17431.2
+681.33771 18721.3
+681.83905 13566.0
+682.31494 2032.0
+682.36829 9576.0
+682.83997 1308.2
+683.36450 5290.5
+684.37378 1153.2
+716.34387 2102.9
+717.34528 987.0
+720.35529 1202.1
+729.36285 42143.0
+729.86359 53180.2
+730.36456 37505.4
+730.86646 13627.6
+731.13947 733.3
+731.36536 4405.6
+731.85614 620.1
+733.36603 2044.2
+734.37134 1596.6
+742.36169 697.4
+781.43005 6335.7
+782.43225 4140.8
+783.43353 963.8
+787.37988 11293.7
+788.38086 6624.2
+789.38330 2848.4
+790.38110 1052.2
+795.38141 1255.6
+795.57996 664.2
+799.31592 576.8
+804.40686 2909.3
+805.40857 2045.1
+806.40533 820.1
+858.08533 853.6
+880.50189 660.8
+881.50787 765.6
+1130.92078 626.4
+1164.11743 767.4
+1197.95374 3376.0
+1301.77014 621.0
+1431.37073 573.2
+1489.81042 614.8
+1491.35901 566.2
+1545.82092 637.2
+1777.01758 676.7
+1875.99426 846.3
+1877.26489 641.2
+1879.01392 1055.4
+1879.48706 19724.1
+1879.77979 1589.8
+1879.95435 1759.3
+1880.33215 877.9
+1881.69543 784.5
+1882.16418 710.2
+1891.32129 689.9
+1907.05408 7283.6
+S	1891	1891	1907.45140793
+Z	2	3813.055
+Z	3	5719.079
+532.43896 1910.9
+569.77051 587.5
+676.63208 1013.1
+795.57715 819.5
+971.05133 715.0
+1019.71985 675.0
+1057.25220 985.3
+1087.81689 610.4
+1197.98340 3052.5
+1357.29614 606.7
+1525.40442 705.1
+1786.66736 620.7
+1877.85156 882.5
+1878.98120 1144.0
+1879.52405 19866.2
+1879.80652 1879.5
+1880.09937 1155.9
+1880.57629 1180.6
+1881.12988 1021.3
+1907.14124 7030.8
+1914.52173 712.6
+1930.57532 924.9
+1932.46484 593.9
+S	1893	1893	501.2643296
+Z	4	2001.02602
+127.00233 562.3
+128.57599 751.1
+132.71848 593.3
+137.29134 676.8
+145.86656 737.1
+147.96959 527.8
+150.52621 520.7
+153.02739 549.9
+154.08638 624.2
+165.77174 603.8
+169.49637 597.8
+180.80190 597.8
+198.89113 1108.4
+199.18301 1096.2
+199.19305 647.0
+199.24411 674.0
+199.27008 1698.1
+199.28035 2446.9
+199.28915 1279.7
+199.29865 824.0
+199.37898 1333.5
+227.69933 573.0
+233.12831 6658.0
+234.13127 1659.3
+237.13017 3667.0
+237.63263 1274.6
+241.12097 580.1
+242.12163 634.4
+242.15009 806.8
+247.07481 734.2
+253.08965 678.1
+261.12296 1304.9
+263.36508 561.3
+263.64325 897.7
+271.09915 564.9
+272.64923 4643.5
+273.15094 2765.1
+280.10318 540.4
+280.18726 913.0
+285.65573 1794.7
+286.14087 747.5
+296.18900 561.4
+303.17676 1314.3
+312.17233 515.3
+312.66098 1108.7
+313.16388 694.8
+313.79028 664.2
+317.45209 513.4
+318.11072 1652.1
+321.17572 4150.1
+321.67816 1354.2
+323.46606 582.8
+323.54138 637.9
+324.20233 986.1
+325.18698 5359.1
+326.19092 1073.0
+329.19189 675.8
+341.68521 9806.6
+342.18619 5805.1
+342.21344 6123.3
+342.27744 689.6
+342.68820 1242.2
+343.21738 1418.7
+344.18579 4290.8
+344.69022 1718.3
+348.37509 560.5
+353.19031 4881.2
+353.69241 1497.3
+354.19370 865.6
+358.18423 1162.7
+359.18292 718.0
+360.06409 546.0
+364.70929 989.9
+365.20993 751.2
+367.18878 2947.8
+367.69064 2179.4
+368.22986 1032.9
+369.23459 565.8
+371.76718 532.5
+377.64697 551.5
+379.70425 6715.8
+380.19296 5542.9
+380.21515 1186.9
+380.69528 2594.5
+381.20120 807.6
+385.20782 1097.1
+388.70947 10508.9
+389.21112 6918.6
+389.71179 1835.8
+391.21899 7759.2
+391.72031 4476.0
+392.16293 854.1
+392.22247 2390.8
+393.70157 4291.4
+394.20654 2513.3
+394.52661 744.7
+394.71024 3194.0
+395.21426 1630.5
+396.22397 8005.2
+397.22794 2034.7
+399.87189 9027.8
+400.20621 6168.3
+400.54120 3523.7
+400.87183 1392.5
+402.70633 11600.2
+403.20819 6438.9
+403.70807 2599.5
+404.21298 644.3
+413.25027 14073.0
+414.25421 3452.8
+416.26147 5423.4
+417.17908 1244.6
+417.26392 2179.3
+422.21558 736.2
+427.54828 743.8
+430.22787 5740.4
+430.72943 3888.1
+431.23016 1341.8
+432.70795 3292.0
+433.20947 2140.1
+433.70905 1303.8
+440.75299 9427.4
+441.25409 6709.3
+441.75464 1794.1
+444.22601 717.6
+454.23166 1233.8
+454.73062 809.3
+456.22760 4782.5
+456.55603 1078.7
+456.89203 2144.2
+457.20694 933.7
+457.23499 1258.1
+457.71735 1769.1
+460.21689 908.3
+467.00143 642.6
+468.22668 9118.2
+468.72836 7948.4
+469.22665 2604.0
+469.72842 2071.0
+470.24377 1345.6
+471.24728 1188.0
+471.49741 891.9
+471.74374 1198.2
+473.25369 8725.7
+474.25787 2770.4
+474.49191 2074.2
+474.74292 2320.8
+474.99185 2383.5
+476.27148 32345.8
+476.77310 23679.2
+477.27448 10286.0
+477.77597 2304.1
+478.74380 50814.7
+478.99423 98249.2
+479.24460 87642.3
+479.28430 889.7
+479.49457 55843.0
+479.74512 27624.8
+479.99597 7446.7
+480.24283 1225.3
+480.57162 2019.6
+480.90692 2229.9
+481.23279 1982.1
+481.72070 1031.1
+483.24557 3885.2
+483.49744 10924.1
+483.74707 8163.3
+483.99731 6656.6
+484.24619 2331.2
+486.57703 25782.2
+486.91138 23036.2
+487.24561 6745.4
+493.09192 577.2
+507.19006 1668.9
+516.73450 1972.5
+517.23621 1230.3
+517.73309 1629.2
+521.73328 1174.1
+522.26147 1007.1
+523.57666 1198.5
+524.78052 1477.4
+525.27521 1405.8
+525.76556 1801.4
+526.23676 737.3
+526.28192 816.9
+527.20819 666.0
+527.26355 24111.6
+528.26678 9914.6
+529.26257 2225.5
+530.25726 3038.7
+530.59003 3843.5
+530.92633 3146.1
+531.25958 1245.9
+532.46265 2009.1
+533.78448 69527.3
+534.28564 62762.2
+534.78705 27985.5
+535.28851 6714.1
+535.78906 730.0
+538.78040 659.8
+541.27985 4227.4
+542.28369 1917.6
+544.29016 17518.9
+545.30237 13422.9
+546.30872 4074.9
+547.31592 1394.1
+549.15887 696.7
+552.25385 846.4
+558.78320 632.5
+559.27216 611.9
+561.25873 1319.1
+561.75586 922.5
+562.26093 636.3
+562.75787 909.1
+566.27191 1205.4
+566.77179 1340.0
+590.30212 1777.3
+590.80011 2023.8
+591.29700 1553.0
+595.30280 1044.2
+595.97186 820.9
+596.30377 661.7
+599.30475 111385.0
+599.80603 111037.6
+600.07184 731.6
+600.30634 67896.5
+600.35889 776.4
+600.80725 25758.3
+601.30853 6621.6
+601.78375 1782.7
+602.28772 1492.3
+603.28589 676.9
+603.95245 888.1
+604.28107 1375.5
+604.61700 976.1
+609.95349 2118.5
+610.28772 3389.4
+610.62134 4229.7
+610.79163 586.4
+610.95679 681.2
+611.28900 2510.2
+616.31049 1072.6
+624.31586 2082.4
+625.31586 968.3
+630.41235 914.9
+638.97668 806.4
+644.05994 705.9
+651.32306 1643.3
+651.82233 1233.2
+653.30389 1086.9
+662.33191 1339.9
+662.66528 1523.7
+662.99908 920.0
+676.64313 1016.5
+677.29810 944.5
+678.30035 854.9
+680.83600 23116.4
+681.33771 25199.6
+681.83832 17305.7
+682.31451 2346.2
+682.36737 13820.7
+682.83832 2517.7
+683.36554 8513.4
+684.36975 1754.9
+685.34448 803.9
+686.32849 599.4
+716.34308 2501.1
+717.34259 1675.2
+717.70764 614.2
+729.36273 53019.2
+729.86365 63245.3
+730.36420 42930.1
+730.86523 19441.5
+731.13495 788.7
+731.36652 6092.2
+731.86426 1178.3
+733.36902 2905.5
+734.37421 1910.6
+764.40576 770.1
+777.36212 913.6
+781.43085 9212.4
+782.43262 5942.6
+783.44128 1230.1
+783.90784 762.3
+787.37927 12073.1
+788.38220 8631.7
+789.38361 2965.8
+790.38562 1055.8
+794.88739 1258.9
+795.38336 1334.5
+795.55493 994.4
+795.89111 1049.1
+804.40613 4658.1
+805.40784 2489.0
+806.41412 1112.0
+809.85925 646.6
+880.49487 1040.7
+952.54480 835.5
+1057.25940 733.0
+1138.29907 561.2
+1188.07971 767.3
+1198.02454 3657.7
+1369.47156 660.5
+1416.77075 637.0
+1525.44141 1452.0
+1544.02673 736.5
+1740.15771 706.4
+1824.38660 631.2
+1870.31409 1139.7
+1879.18994 1834.0
+1879.55835 20285.1
+1879.94238 962.0
+1880.69910 753.8
+1882.01868 776.7
+1906.74268 946.8
+1907.05798 7509.5
+1907.33862 742.1
+1930.61938 1215.6
+1932.06189 712.5
+1974.99304 705.2
+S	1894	1894	434.2657646
+Z	4	1733.03176
+117.21092 3661.7
+118.10408 3852.9
+120.66346 8788.9
+121.26752 4003.0
+121.42170 4140.9
+121.78986 18782.9
+121.79914 4715.0
+128.57361 4205.9
+129.09010 3879.9
+137.28752 6006.1
+143.79482 4257.0
+143.91479 4937.3
+145.68098 4033.4
+148.98657 5105.8
+157.13290 33079.4
+157.60168 5256.1
+158.00591 5383.2
+159.89471 4199.0
+171.63730 5409.4
+174.94641 4239.1
+188.60812 4252.3
+198.89302 8171.8
+199.04602 4708.4
+199.17120 5803.8
+199.23280 5778.8
+199.24802 7008.4
+199.26801 20432.5
+199.27597 9783.3
+199.30789 5450.7
+199.35707 4752.1
+199.36691 7794.6
+217.80397 4736.3
+225.49243 4023.1
+226.15437 25359.1
+231.71820 4807.3
+244.16492 143807.8
+245.16820 11792.4
+264.59387 5581.9
+280.17786 5625.6
+284.20905 4260.3
+308.89157 5331.3
+321.64691 4286.3
+337.92621 5197.5
+338.87653 4659.5
+459.88696 4948.2
+474.03531 4937.8
+476.76282 6445.6
+496.71310 5177.4
+497.28748 183091.2
+497.62189 126421.0
+497.95566 48222.8
+498.29059 20863.2
+516.96655 239366.2
+517.30066 208923.4
+517.63477 105763.0
+517.97034 26478.9
+532.45905 14963.0
+532.79584 13566.0
+553.33112 12083.4
+565.70380 4938.2
+587.81818 7521.2
+588.31091 10095.0
+596.82513 15007.1
+597.33105 9309.1
+630.40570 6966.0
+644.85590 10692.9
+653.36737 347823.7
+653.86853 276808.2
+654.37079 109752.7
+654.87256 34822.7
+655.37238 3869.0
+655.44519 4709.2
+676.64008 10979.2
+676.72357 5557.2
+690.43311 4666.2
+709.90625 9856.5
+768.69751 4621.1
+795.56372 6131.5
+1020.80597 5428.7
+1057.24182 6028.2
+1111.89514 3977.9
+1188.12354 5627.4
+1198.03162 22840.6
+1324.40051 5360.0
+1329.35083 4637.2
+1490.11279 5641.0
+1722.59900 4026.9
+S	1895	1895	502.0160746
+Z	4	2004.033
+128.88490 576.1
+133.11766 930.9
+136.35132 615.6
+144.61511 514.1
+147.05524 531.8
+151.41924 689.8
+151.45096 577.5
+157.60591 823.9
+165.77229 677.6
+181.68983 541.8
+182.36894 562.3
+187.07176 1044.2
+188.25072 609.7
+188.26703 818.5
+188.28088 1522.6
+188.29073 1199.9
+188.30574 973.3
+188.32104 725.1
+198.89514 745.7
+199.18541 829.7
+199.19629 718.2
+199.24312 810.8
+199.26604 1314.9
+199.28317 1832.9
+199.29242 1773.3
+199.31239 960.5
+199.38127 820.8
+220.13853 912.7
+233.12859 9333.5
+234.13246 1416.7
+237.13049 6144.0
+237.63216 1631.0
+247.07301 841.7
+255.29495 884.3
+257.39554 571.1
+261.12347 1983.2
+263.64343 769.3
+271.74911 760.8
+272.64923 7969.8
+273.15060 2543.8
+275.15338 580.1
+285.45981 624.5
+285.65692 1904.6
+286.14084 2176.1
+286.16013 919.3
+290.17920 556.7
+303.17761 2444.4
+305.91946 653.1
+312.66168 1620.2
+313.18433 609.1
+318.11301 1759.3
+321.17566 6000.3
+321.67755 3082.3
+322.16797 684.1
+324.20322 1689.6
+325.18707 6438.7
+326.19006 948.2
+329.19006 1129.6
+329.69498 624.1
+341.68512 13680.0
+342.18683 6131.9
+342.21347 6964.9
+342.68762 1114.0
+343.21753 1219.2
+344.18576 5996.5
+344.68918 2145.8
+345.17630 709.8
+350.28555 601.6
+353.19086 5867.6
+353.69281 3194.8
+358.18320 2963.6
+358.68732 1329.6
+364.70834 1558.1
+365.20911 1308.9
+367.18793 3294.5
+367.69040 1116.0
+368.19385 811.6
+368.23026 1602.4
+379.70450 8022.1
+380.19327 5340.8
+380.21524 1681.3
+380.69583 3589.6
+381.19452 998.0
+383.87173 1782.9
+384.20709 817.6
+385.20895 1158.9
+388.70981 14474.3
+389.18713 1294.8
+389.21152 8738.3
+389.71188 2399.4
+390.21310 1067.4
+391.21933 11256.8
+391.72089 6749.6
+392.16354 1438.4
+392.22128 1983.6
+393.70239 5697.3
+393.87451 834.4
+394.18640 739.5
+394.20779 2934.8
+394.71106 3106.9
+395.21170 1365.3
+396.22412 10195.3
+397.22803 2362.3
+399.87271 12296.0
+400.20700 10882.2
+400.53979 4784.9
+400.87476 1135.0
+402.70712 14074.5
+403.20874 8188.6
+403.70987 1894.3
+407.71649 586.7
+413.25067 17224.8
+414.25467 3937.9
+416.26157 7388.0
+417.18073 1025.9
+417.26547 1734.7
+421.71625 1169.7
+423.70441 1248.6
+423.89209 626.5
+428.23367 824.8
+430.22818 7731.4
+430.72989 5446.8
+431.23141 2343.1
+432.70819 5435.4
+433.21014 2988.8
+433.71136 1746.5
+440.75348 10496.0
+441.25452 6070.9
+441.75562 2003.7
+444.22391 736.4
+454.22958 1265.1
+455.24521 1251.1
+456.22739 5719.6
+456.55640 1831.1
+456.89261 2361.3
+457.23511 1491.5
+457.71646 1413.3
+458.22137 725.3
+459.71115 1188.0
+460.21857 1312.4
+467.73251 707.9
+468.22739 15120.4
+468.72916 9320.7
+469.22836 4336.3
+469.72757 1245.4
+471.24808 744.1
+471.49716 922.7
+471.74811 1341.5
+473.25400 12660.3
+473.72440 834.2
+474.26016 2867.5
+474.49286 2879.0
+474.74265 2188.3
+474.99182 1958.7
+475.23062 728.2
+476.27182 45159.2
+476.77313 31545.1
+477.27475 9728.4
+477.77753 1720.6
+478.69348 591.8
+478.74423 89707.3
+478.99451 134959.3
+479.24475 103264.9
+479.49469 61039.9
+479.53625 639.2
+479.74551 26536.6
+479.99542 7707.2
+480.24100 2651.3
+480.36261 774.1
+480.57269 4170.3
+480.90668 1663.3
+481.22702 2608.1
+481.71890 1037.3
+482.21448 980.2
+483.24606 7984.1
+483.49750 10346.1
+483.74759 8489.5
+483.99750 4094.2
+484.24774 990.0
+485.48770 842.0
+486.57770 14417.4
+486.91193 6057.0
+507.19086 2585.4
+508.19485 1352.8
+516.24597 1112.3
+516.73627 2322.2
+517.23474 1143.4
+517.73041 944.9
+521.73810 1673.6
+522.25861 1489.0
+523.25049 990.9
+523.58435 1510.9
+523.91840 804.3
+524.78082 1012.7
+525.27618 1578.1
+525.74579 1476.0
+526.24213 2148.4
+526.74323 642.3
+527.26392 30880.3
+528.26746 10944.6
+529.25989 2407.2
+530.25732 6826.6
+530.59216 6645.6
+530.92609 5415.2
+531.25873 2418.6
+532.46588 2202.8
+533.48151 630.4
+533.78491 107173.7
+534.28601 77617.0
+534.78760 29763.3
+535.28949 7849.0
+535.78693 1309.7
+541.27869 5366.7
+542.28229 1950.6
+544.29041 23268.0
+545.30310 16715.6
+546.31024 4622.2
+547.31348 1152.3
+549.16693 778.3
+552.25409 1018.6
+555.32550 773.9
+558.16400 672.6
+561.25586 1545.7
+561.75824 1298.7
+566.26794 2337.6
+566.77246 1691.6
+567.27686 841.6
+570.30499 970.8
+575.27094 927.2
+580.28754 727.4
+590.30090 2473.9
+590.80090 1958.3
+591.29755 1963.8
+595.63824 1459.7
+595.97070 1097.5
+598.53973 1148.7
+599.30518 176878.7
+599.80634 138599.0
+600.06720 1503.5
+600.30658 77199.5
+600.57513 1366.6
+600.80737 26637.8
+600.87073 1076.8
+601.30719 6999.3
+601.78113 2545.2
+601.84100 652.5
+602.28711 2581.3
+602.78668 1326.1
+604.28510 705.0
+609.95148 1758.6
+610.28802 5353.0
+610.62219 4654.6
+610.78986 716.3
+610.95825 2629.5
+611.29944 691.6
+611.79095 760.2
+615.80322 1828.2
+616.30292 1084.2
+624.31860 2221.2
+625.31750 1223.0
+638.31793 844.1
+638.65710 2005.2
+638.97778 890.2
+645.30566 1365.8
+651.31842 2019.4
+651.82446 1158.5
+652.31531 952.8
+652.67029 591.4
+652.82098 822.9
+653.30756 1844.1
+662.33124 2597.4
+662.66229 1538.2
+677.29578 2164.4
+678.30206 873.4
+680.83655 38364.3
+681.33813 36196.2
+681.83881 21883.0
+682.31104 2399.6
+682.36737 16125.0
+682.83972 2254.9
+683.36548 9105.0
+684.28052 693.5
+684.36694 2041.7
+690.76263 648.5
+706.36591 651.1
+716.34082 3358.5
+717.34473 1093.3
+720.85999 1422.4
+729.36310 81799.8
+729.86407 87138.5
+730.36505 51628.2
+730.86676 23032.9
+731.36694 7897.8
+731.87189 1526.5
+733.36932 3302.1
+734.37152 2697.8
+776.36432 1126.1
+777.36310 1131.6
+781.43121 10970.0
+782.35089 1223.9
+782.43451 5663.0
+783.43518 2007.3
+783.52716 618.5
+783.65424 663.6
+787.37982 16396.6
+788.38373 10065.2
+789.38257 3354.8
+790.39154 826.6
+794.88678 1448.3
+795.38464 1937.4
+795.57587 765.2
+795.88690 720.8
+796.38611 832.6
+804.40625 6013.2
+805.40961 3456.7
+806.40857 1393.4
+880.50006 1343.2
+892.46692 773.7
+908.94318 628.2
+923.48688 597.7
+951.52496 692.2
+1057.30847 696.9
+1088.04224 640.0
+1147.94348 624.7
+1198.04346 3177.0
+1489.70935 781.6
+1525.42432 851.0
+1562.09473 620.7
+1606.28088 619.2
+1626.51599 736.3
+1791.04614 740.3
+1870.22986 798.1
+1878.47961 999.1
+1878.82849 980.0
+1879.33545 6902.4
+1879.58582 16631.9
+1880.89758 938.8
+1881.88416 624.9
+1907.04749 7237.5
+1930.62231 994.4
+S	1897	1897	501.2576471
+Z	4	2000.99929
+126.41428 618.1
+135.78864 530.8
+141.84920 803.8
+144.12419 599.0
+144.16522 646.0
+148.50485 648.3
+156.27618 589.6
+165.77174 776.1
+186.56146 582.0
+188.28172 2262.7
+188.30318 1974.8
+188.32869 750.7
+188.33896 539.5
+188.35986 566.4
+188.40320 612.5
+188.50703 486.7
+193.03871 610.4
+193.68951 599.7
+197.66280 617.0
+198.90050 772.8
+199.18953 834.1
+199.21152 674.2
+199.22614 556.6
+199.26033 1115.5
+199.27246 1013.8
+199.28656 2414.9
+199.30054 1101.9
+199.31123 890.6
+199.37119 735.7
+199.38408 1098.7
+199.74013 643.9
+209.12111 608.2
+227.19954 750.5
+233.12834 10155.1
+234.13170 1625.7
+237.13036 3746.5
+237.63237 1223.0
+238.70708 708.3
+255.65599 1150.0
+261.12277 2244.2
+262.12784 628.1
+263.64389 1208.5
+271.75043 774.2
+272.64908 7061.1
+273.15121 2003.5
+280.15469 711.7
+285.65720 1859.5
+286.14026 1367.7
+291.59235 660.8
+297.19202 943.4
+303.17746 2309.4
+312.66144 1600.2
+318.11276 2650.5
+319.11615 637.7
+321.17551 6509.4
+321.67712 1996.7
+322.18240 800.6
+324.20291 1724.8
+325.18695 6946.6
+326.19055 1438.5
+329.18958 1343.1
+337.19080 745.3
+339.73419 558.6
+341.68500 18471.6
+342.18671 5756.2
+342.21378 6650.1
+342.68719 1819.1
+343.21732 754.8
+344.18573 6232.6
+344.68939 2954.1
+353.19147 6069.4
+353.69278 3186.3
+358.18369 2947.8
+358.68680 1254.1
+360.36646 577.6
+364.70657 1564.0
+365.21109 943.9
+367.18781 3847.2
+367.68900 1590.0
+368.22900 1677.7
+372.11105 585.1
+379.70456 7246.0
+380.19379 7373.8
+380.69650 3047.9
+381.19702 770.4
+383.87500 657.4
+384.20511 934.3
+385.20889 2142.0
+388.70959 14273.1
+389.18549 2034.2
+389.21112 6517.7
+389.71048 2009.3
+391.21915 13904.2
+391.72083 6940.5
+392.16553 1621.8
+392.22192 1827.6
+393.70230 5246.5
+394.20737 1518.5
+394.71149 3057.2
+395.21060 1775.4
+396.22412 9188.9
+397.22760 2080.5
+398.23370 766.5
+399.87228 11159.6
+400.20709 8525.4
+400.54129 4334.6
+400.87537 1177.8
+402.70703 14158.0
+403.20776 7041.1
+403.70825 2156.1
+413.25037 18226.6
+414.25394 3943.1
+415.25800 774.0
+416.23309 610.3
+416.26129 8077.2
+417.17944 1691.3
+417.26575 2190.1
+418.71332 937.5
+419.20950 658.5
+419.56696 630.9
+423.70523 927.3
+427.20087 557.8
+427.49982 888.7
+430.22842 8584.1
+430.73016 4732.6
+431.22519 1492.5
+432.70853 4653.1
+433.21106 3225.8
+433.71127 1053.6
+440.75308 9859.8
+441.25421 7061.2
+441.75577 1644.7
+444.22836 1087.3
+446.25995 593.1
+454.22958 1780.7
+455.24673 1253.6
+456.22778 7563.8
+456.55682 1810.5
+456.89224 1536.9
+457.20828 1697.3
+457.23834 1040.6
+457.71890 1157.7
+458.21439 1008.5
+459.21930 893.5
+465.71771 726.3
+466.99243 804.1
+467.97946 836.0
+468.22678 11903.2
+468.72885 8490.0
+469.22864 2783.9
+469.72913 873.0
+470.24149 1254.2
+471.24567 1497.2
+471.49670 2065.8
+471.99460 994.9
+473.25430 12486.9
+474.26050 2986.0
+474.49301 2613.1
+474.74237 3258.0
+474.99164 2151.0
+475.48743 850.1
+476.27158 45448.1
+476.77301 28819.5
+477.27432 9074.2
+477.77634 1689.5
+478.74414 85432.0
+478.99442 128333.6
+479.24466 111082.6
+479.28629 1045.6
+479.49460 56152.1
+479.74509 19267.8
+479.85550 635.3
+479.99448 8098.9
+480.10553 775.1
+480.23779 2644.3
+480.48566 661.2
+480.57108 2917.6
+480.90579 2380.1
+481.21747 3285.9
+481.57596 748.7
+481.71768 2220.4
+482.60651 900.3
+482.72571 710.0
+483.24634 8108.7
+483.49725 8271.5
+483.74780 5976.2
+483.99869 2896.3
+484.24115 1024.5
+486.57761 3883.1
+495.44641 666.5
+507.18872 1833.9
+516.24841 1078.7
+516.73425 2964.1
+517.23730 1698.8
+521.73547 1352.0
+522.26147 1712.8
+523.25006 931.4
+523.58514 1433.0
+524.78021 1358.4
+525.27625 1333.4
+525.76483 2086.6
+526.24213 1426.1
+526.27667 1221.6
+526.74231 740.1
+527.26379 31954.3
+528.26740 9978.3
+529.26447 1832.7
+530.25616 4386.5
+530.59161 4924.1
+530.92560 3705.5
+531.26086 1576.5
+531.59546 1126.0
+532.47961 2185.9
+533.78473 99474.2
+534.28589 66876.8
+534.78723 26951.8
+535.08582 652.5
+535.28870 6299.2
+535.78345 868.0
+537.03503 647.6
+541.27808 6298.9
+542.28223 1845.0
+544.29041 19627.7
+545.30334 20796.9
+546.30902 5621.7
+547.31293 957.8
+549.12134 589.4
+552.25647 1498.1
+552.75171 826.7
+553.26080 558.1
+555.31891 1697.9
+561.25623 1979.3
+561.76160 1077.7
+566.26929 2118.0
+566.77032 1678.9
+567.26886 1543.9
+574.27130 782.7
+575.27460 911.9
+579.39880 683.7
+590.29999 2849.9
+590.80096 2789.2
+591.29919 1747.9
+595.30829 1195.9
+595.63654 1825.3
+597.75281 726.2
+598.53644 1116.1
+599.30499 165414.0
+599.80615 141104.8
+600.07233 737.0
+600.25543 875.9
+600.30658 70618.0
+600.80707 23898.1
+601.08582 646.4
+601.30707 5878.0
+601.64551 1173.4
+601.78210 1394.6
+602.28937 2228.0
+602.78986 1218.4
+603.95178 795.6
+604.28217 652.6
+609.95331 3234.5
+610.28735 5014.0
+610.62067 3400.7
+610.79718 955.1
+610.95734 2668.4
+615.80182 1448.8
+616.30627 1410.9
+624.31470 1487.0
+625.31903 999.9
+638.32104 761.5
+638.65265 1261.4
+638.98889 1146.0
+639.32440 668.4
+645.30933 821.6
+651.31818 2218.9
+651.82178 1241.5
+652.32361 919.1
+653.30774 2119.4
+659.29724 609.6
+660.82861 742.9
+662.33313 1399.7
+662.66638 914.7
+676.62341 1299.4
+677.29382 2127.9
+678.29828 818.2
+680.83612 35862.8
+681.33801 37436.7
+681.83844 18872.8
+682.31067 2779.8
+682.36688 19388.5
+682.83850 2442.3
+683.36487 9584.1
+684.36450 1809.3
+686.32684 1195.2
+716.34283 3797.2
+717.34467 2578.0
+720.85638 1516.5
+729.36285 76828.0
+729.86359 80579.8
+730.36469 46248.3
+730.86615 19751.3
+731.36603 6164.1
+731.87079 1325.0
+733.37006 3137.8
+734.37354 1894.4
+776.35992 1341.0
+777.36938 875.1
+781.43036 13412.0
+782.43268 6850.1
+783.43542 2619.9
+787.37939 16701.8
+788.38318 8722.8
+789.38367 2879.8
+790.39008 865.7
+794.88635 1662.5
+795.38422 2291.1
+795.57813 823.1
+795.88379 1589.2
+804.40656 5855.5
+805.40900 3222.8
+806.40912 933.6
+880.50342 1457.5
+951.53760 847.8
+1057.23071 801.8
+1114.12366 678.4
+1188.22583 674.2
+1198.06921 3553.7
+1202.48083 601.5
+1525.25195 888.4
+1591.23450 670.4
+1615.53186 662.9
+1764.75098 638.5
+1777.00256 672.2
+1855.60217 657.2
+1878.98779 1527.2
+1879.48364 19927.7
+1879.75537 3346.1
+1907.04712 7296.8
+1930.37793 1142.3
+1998.23438 635.5
+S	1898	1898	524.222407933
+Z	3	1569.392
+Z	2	1046.597
+131.88741 565.3
+132.04688 628.3
+132.63428 541.0
+138.96762 657.1
+147.51517 598.7
+152.47752 576.4
+171.12335 598.9
+188.22685 649.2
+188.24393 998.2
+188.26102 1766.1
+188.27255 1857.5
+188.29317 2331.3
+188.31003 2042.5
+188.33647 513.4
+188.35786 732.9
+199.18417 1025.0
+199.25798 723.8
+199.26695 972.3
+199.28065 2651.0
+199.29161 1230.0
+199.33195 536.5
+199.35959 553.6
+199.37790 874.6
+199.38785 794.2
+211.56793 553.1
+218.09148 635.9
+220.32338 630.2
+223.61690 601.2
+235.67633 554.4
+242.71494 614.3
+260.92471 591.0
+262.11755 1270.1
+271.75507 664.7
+314.13062 728.2
+314.19574 566.8
+344.74908 603.7
+397.93591 671.0
+426.22519 3582.8
+426.56064 832.3
+458.30643 2231.9
+459.31308 880.4
+466.75052 814.2
+482.66370 855.9
+503.78204 1355.2
+504.02985 1446.9
+504.27768 762.0
+506.00104 693.9
+532.47040 2126.1
+541.24634 555.8
+549.22070 733.4
+557.37671 1518.8
+558.37317 1176.8
+582.03418 502.3
+582.29138 17496.5
+582.79346 8052.5
+583.29425 1467.3
+630.40704 692.3
+638.83331 9932.3
+639.33521 5746.7
+639.83258 1416.2
+642.48865 593.3
+676.64453 885.3
+686.41742 2881.4
+687.41913 1844.0
+688.31580 794.7
+688.42853 1281.6
+706.32050 2828.2
+707.32300 1149.7
+722.15985 620.2
+731.11108 682.0
+785.48346 1609.1
+786.49023 2031.4
+787.49268 1449.0
+817.95685 662.1
+819.40619 4249.8
+820.40875 1550.0
+837.18231 675.5
+959.34894 613.7
+978.90192 598.3
+1057.26147 732.9
+1167.07129 640.3
+1168.68701 893.7
+1198.05554 3486.4
+1228.70093 573.7
+1275.48682 629.3
+1481.59448 622.5
+1605.44946 701.6
+1667.07861 819.9
+1728.56018 622.2
+1870.32068 1153.1
+1877.15308 602.0
+1877.81763 674.4
+1878.58826 1123.5
+1879.01990 1263.2
+1879.54736 19863.5
+1879.83557 1725.5
+1880.10254 1604.1
+1881.95239 520.9
+1898.76270 633.5
+1907.09094 7727.5
+1930.61499 842.2
+S	1899	1899	502.0090746
+Z	4	2004.005
+139.10745 35053.1
+155.93988 41859.6
+157.60442 48548.9
+163.73346 40708.0
+164.06416 42975.4
+188.21304 41064.2
+188.25049 38053.1
+188.25601 47355.7
+188.27333 63448.6
+188.28494 65991.0
+188.29552 63425.2
+188.30417 41874.5
+188.31078 71897.7
+189.14088 39979.7
+190.48473 43954.6
+198.89503 66081.2
+199.17406 72172.3
+199.18762 71916.3
+199.20526 42295.9
+199.21172 54867.1
+199.25183 92504.3
+199.27211 92867.6
+199.28581 102281.8
+199.30507 89276.4
+199.32430 52530.7
+199.37306 42629.5
+199.40222 50142.3
+240.62912 41387.5
+257.61285 43858.0
+272.64825 99980.0
+273.24628 45672.2
+283.96219 36600.0
+298.05164 41871.2
+308.20236 41526.4
+321.17361 87008.5
+325.18661 69659.1
+327.70135 39053.7
+342.21289 79454.4
+342.27155 48102.6
+353.19046 77317.5
+361.30051 46624.3
+380.19351 118493.3
+388.70822 137327.6
+389.20914 94037.9
+391.21799 176880.7
+391.75970 37664.9
+394.18979 56360.1
+396.22354 123176.4
+399.87170 166497.5
+400.20605 192803.3
+402.70663 266572.0
+403.20740 79599.9
+413.24954 224970.0
+430.22427 97224.9
+432.70410 58712.6
+440.75211 103891.1
+441.25372 54411.0
+456.22510 78517.4
+468.22632 193351.8
+468.72745 138316.6
+473.25192 140500.3
+473.72183 72931.1
+475.17990 38056.8
+476.27081 412740.5
+478.74301 1226565.6
+478.99347 1378560.5
+479.24442 803388.4
+479.49426 480386.0
+479.74609 101431.0
+480.23639 52322.2
+480.57541 52652.7
+482.65634 50431.3
+483.24652 313511.9
+483.49689 334615.2
+483.74789 98174.5
+483.99622 96453.7
+486.57639 1003525.7
+486.91104 804243.2
+487.24463 319066.8
+487.57834 110915.3
+488.21179 40029.6
+514.95300 39853.5
+527.26221 364501.2
+528.26971 69893.5
+530.25641 82136.6
+530.58832 55384.8
+532.46771 141101.7
+533.78381 1274116.6
+534.28510 689662.5
+534.78705 235204.3
+535.28442 56994.9
+541.27100 47616.7
+544.28918 312152.2
+545.30292 101627.1
+549.20087 49010.3
+599.30365 2003709.6
+599.80524 1149436.4
+600.30597 372347.0
+600.80658 154442.8
+607.81104 41970.6
+609.94873 82195.3
+662.67084 43751.6
+676.64795 63773.3
+680.83594 370769.6
+681.33704 228321.6
+681.83496 63808.8
+683.36609 49271.5
+729.36200 1122588.6
+729.86292 756455.4
+730.36432 351703.7
+730.86523 139061.3
+781.43146 47789.1
+787.37781 250590.2
+788.37769 145523.2
+795.39240 53749.6
+795.57990 63843.7
+804.40118 74085.9
+812.11096 37035.6
+853.76202 41294.7
+920.62463 36437.3
+952.41974 36308.4
+952.51263 35963.5
+958.71259 39148.5
+1019.70422 47205.9
+1107.72778 39660.9
+1198.04175 219093.8
+1345.37097 46285.1
+1535.46631 36570.0
+1690.26794 41723.9
+1732.79236 44592.2
+1776.90161 45627.9
+1876.18591 45043.2
+1878.72217 72218.7
+1879.05347 52015.1
+1879.54004 1360974.8
+1880.06458 50437.1
+1907.09534 515088.5
+1930.57849 78444.9
+S	1901	1901	501.2565171
+Z	4	2000.99477
+128.04649 790.5
+140.85634 802.4
+144.20624 701.4
+154.40680 707.7
+160.75267 740.4
+186.59027 753.7
+188.05139 824.7
+188.21097 887.3
+188.22514 1311.5
+188.25385 762.1
+188.26720 1316.2
+188.28656 833.6
+188.30093 1179.2
+188.31569 721.2
+188.32826 769.8
+188.33829 1137.1
+188.34877 947.1
+188.36018 764.2
+188.36853 958.6
+189.55043 785.4
+198.89597 1615.3
+199.15611 757.7
+199.18449 1114.6
+199.20695 906.6
+199.24550 830.8
+199.25505 1059.9
+199.26401 1298.5
+199.28304 3277.4
+199.30626 2016.7
+199.32181 1019.9
+199.38020 1486.8
+199.41508 756.7
+205.84222 833.9
+209.10149 989.8
+214.51230 1141.9
+228.08351 960.2
+233.12814 9079.7
+234.13152 1160.9
+236.24301 917.2
+237.12956 4527.0
+237.63190 1204.5
+245.13829 775.7
+247.07213 1125.0
+254.60101 768.2
+255.65536 1224.9
+261.12320 2431.1
+268.77512 818.3
+272.64841 8522.7
+273.01138 753.6
+273.15027 1650.0
+280.17932 836.7
+285.65775 3531.1
+286.14020 1620.4
+294.16904 715.2
+297.19196 1006.4
+303.17752 2039.7
+312.66263 1337.3
+313.18787 821.8
+314.73877 779.7
+316.83783 772.7
+318.11212 1691.5
+321.17508 5549.1
+321.67725 2466.6
+324.20285 1446.0
+325.18643 8377.8
+326.19031 2094.7
+329.18942 1432.1
+341.68460 15566.9
+342.18625 6764.9
+342.21313 9216.7
+343.21790 1312.6
+344.18515 8001.2
+344.68857 3064.0
+353.19098 7772.4
+353.44992 769.9
+353.69101 2379.5
+358.18280 2123.2
+358.68680 1662.6
+364.70767 1188.2
+367.18781 2200.3
+367.69080 2800.9
+368.22964 1102.0
+379.70413 6792.2
+380.19318 8762.4
+380.69583 5110.4
+381.19492 1356.2
+383.87012 1221.3
+384.20538 882.3
+384.67239 676.5
+385.20963 960.9
+388.70926 15876.5
+389.21078 10303.0
+389.71106 2294.6
+391.21872 13932.9
+391.72018 6698.9
+392.22067 2162.8
+392.72061 884.7
+393.70145 6390.3
+394.20605 2669.1
+394.71033 4764.4
+395.21228 1340.9
+396.22348 10576.8
+396.31976 979.8
+397.22791 2322.3
+399.87207 11577.6
+400.20667 10828.3
+400.48398 769.3
+400.53976 3991.4
+400.87350 2117.1
+402.70654 15194.3
+403.20816 8127.8
+403.70709 2973.8
+408.21667 999.7
+409.44232 899.7
+413.25006 18898.5
+414.25366 4904.2
+416.26126 7426.6
+417.18161 1271.3
+417.26419 1400.3
+421.71487 3290.0
+428.23495 962.3
+430.22754 8459.0
+430.72937 3827.5
+431.22919 2628.9
+432.70877 4255.4
+433.20895 4082.2
+433.70813 1221.4
+440.75272 12211.9
+441.25455 6710.5
+441.75696 2906.0
+454.22635 888.7
+455.24658 1999.8
+456.22653 5581.9
+456.55902 1553.6
+456.88904 888.4
+457.23334 1320.3
+457.71548 1942.9
+459.22021 1242.1
+460.72214 808.3
+468.22665 16168.5
+468.72900 8707.4
+469.22760 4634.2
+469.72989 1351.7
+470.24255 1133.8
+471.24313 2489.0
+471.99738 1477.2
+473.25345 13614.8
+474.25946 2902.1
+474.49194 3314.3
+474.74274 3102.4
+474.98868 1711.5
+475.23465 1324.3
+476.27118 47543.6
+476.77237 31548.3
+477.27441 8040.2
+477.77814 1487.4
+478.74356 94652.5
+478.99390 150913.1
+479.24432 116429.1
+479.49417 61122.3
+479.74478 30513.1
+479.99609 5067.3
+480.23495 3144.7
+480.56976 2085.4
+480.90585 3292.4
+481.23114 2799.5
+481.56924 1239.6
+481.71875 1774.4
+482.64835 1232.1
+483.24640 10407.8
+483.49661 15230.2
+483.74710 9851.6
+483.99728 8149.4
+484.24786 2490.0
+485.48950 1032.7
+485.73978 988.8
+486.57684 40805.8
+486.91122 36037.9
+487.24484 7485.0
+497.83319 857.1
+507.19080 2338.1
+516.24487 1318.1
+516.73590 2772.1
+517.23413 1614.4
+517.73236 1217.3
+522.26459 1054.3
+523.57849 945.8
+524.77759 2308.3
+525.27075 1482.6
+525.74060 2206.1
+526.24567 999.0
+526.28271 1428.4
+527.26300 33824.6
+528.26624 10998.8
+529.26862 2735.0
+530.25677 5152.6
+530.59113 6381.8
+530.92590 4775.9
+531.26160 1284.8
+532.51855 2219.0
+533.78412 107527.4
+534.28528 81813.0
+534.78680 33273.0
+535.28790 7213.6
+535.79254 1380.7
+541.27911 6659.2
+542.28265 2628.8
+544.28967 23190.3
+545.30157 17471.2
+546.30792 5621.7
+549.14917 824.3
+552.20605 833.8
+552.25714 1626.0
+553.26337 964.5
+555.32098 1563.6
+556.32635 1087.1
+561.25702 1946.2
+561.75647 1393.9
+566.26886 2084.8
+566.77283 948.6
+568.89520 960.3
+573.12433 954.9
+590.29968 4016.3
+590.80072 2321.5
+591.29419 1474.2
+591.80096 962.7
+595.96942 1222.2
+599.30438 167469.0
+599.80566 147636.2
+600.30591 81551.5
+600.57635 1346.5
+600.80670 24416.5
+601.30585 6030.1
+601.78162 2679.2
+602.28729 1920.6
+602.78491 1551.4
+604.28436 1656.0
+609.95337 3572.1
+610.28943 3056.2
+610.62311 2908.8
+610.95587 2141.1
+611.29004 2038.1
+615.80573 1317.3
+616.30310 1716.8
+624.31549 2176.4
+625.31805 1493.8
+630.40485 910.4
+638.98804 1814.4
+641.34442 1002.9
+645.29962 1507.9
+651.31842 1500.2
+651.81891 1689.9
+652.32605 1184.1
+662.33105 3032.5
+662.66022 1235.5
+663.33038 1309.5
+676.62433 1339.1
+677.29657 1483.0
+678.30322 993.9
+680.83539 35639.5
+681.33728 37755.0
+681.83826 25444.5
+682.31171 2384.4
+682.36676 17164.3
+682.83740 2587.5
+683.36517 9391.9
+684.36682 2707.1
+689.73425 745.5
+716.34381 3284.6
+717.34595 1634.6
+728.14587 819.4
+729.36230 81709.7
+729.86328 89840.6
+730.36407 55711.6
+730.86517 21723.7
+731.36603 7381.6
+731.85944 1280.3
+733.36768 3661.2
+734.36536 1081.5
+776.36212 1188.5
+781.42999 12495.7
+782.43427 6484.9
+787.37823 18795.0
+788.38098 11003.1
+789.38226 4438.1
+790.37988 1024.5
+794.88177 2250.6
+795.58154 1651.9
+795.88483 1307.6
+799.37140 944.9
+804.40662 5934.0
+805.40692 3412.7
+806.40601 1106.3
+880.50348 844.5
+951.52448 1268.8
+1057.21277 1259.0
+1198.16602 4994.5
+1215.91821 846.9
+1529.99683 737.6
+1555.12781 875.7
+1590.64441 938.9
+1703.10303 794.0
+1745.57568 779.5
+1878.74292 908.6
+1878.98560 2264.7
+1879.49341 26973.9
+1879.88416 3142.5
+1906.67871 1415.9
+1907.00232 10261.8
+1930.56580 1092.1
+S	1902	1902	1879.7553246
+Z	4	7514.99
+530.23743 675.1
+532.52740 1587.0
+564.07593 656.0
+589.44098 687.9
+630.40234 703.0
+676.64215 1142.6
+680.58118 765.2
+688.15924 654.9
+697.30109 578.4
+731.14172 600.4
+783.63440 619.8
+795.56921 1341.0
+889.33923 833.4
+932.29944 570.3
+1139.63611 758.9
+1177.36938 655.6
+1198.17822 3391.5
+1318.53320 616.5
+1458.88123 751.0
+1651.33813 676.1
+1869.52625 785.1
+1877.86829 713.8
+1879.53479 19831.0
+1880.15515 749.8
+1882.99072 747.6
+1906.68469 905.5
+1907.10071 6991.4
+1907.49390 683.3
+1930.60828 883.9
+S	1903	1903	524.7712271
+Z	4	2095.05361
+151.68079 620.7
+160.16878 538.0
+160.31435 652.9
+161.52763 509.9
+166.35075 541.5
+169.49483 561.9
+173.02687 546.5
+181.95531 516.6
+187.44945 508.7
+188.26736 861.6
+188.27765 1183.5
+188.28169 1080.6
+188.29291 1194.9
+188.30498 923.5
+188.32077 522.3
+197.75124 539.0
+198.36411 593.8
+198.89713 917.6
+199.16183 576.9
+199.17685 1079.2
+199.21072 560.3
+199.24242 583.4
+199.25958 924.3
+199.26633 608.4
+199.27876 2602.3
+199.30107 660.1
+199.37350 832.8
+199.37779 765.5
+215.33331 589.1
+216.57465 679.9
+217.09688 636.8
+218.68895 599.5
+233.57852 594.8
+238.71426 604.1
+245.09233 1184.5
+255.29582 616.9
+258.14975 1170.0
+262.11807 6368.9
+263.12262 1653.0
+267.60980 535.2
+271.88937 637.4
+288.20227 2284.1
+308.90723 570.2
+343.92834 574.7
+344.49722 618.2
+347.20419 582.5
+359.23965 5872.6
+360.24265 1113.6
+361.18549 2500.2
+362.19110 782.8
+387.70251 1707.7
+388.20386 1125.5
+396.20987 1069.4
+400.26678 961.5
+409.21527 709.4
+410.20651 2257.0
+410.70920 1098.2
+426.22525 18750.5
+426.55954 13598.6
+426.89368 7015.9
+427.22510 785.0
+427.55353 666.8
+437.21817 1019.9
+445.20758 701.6
+447.80884 621.2
+458.30719 7559.4
+459.31232 2179.3
+463.92166 3504.4
+464.25580 2376.8
+464.58884 1276.3
+465.88297 657.8
+466.74799 6884.1
+467.24890 4246.7
+467.74976 667.5
+471.30020 652.7
+473.20151 1610.4
+481.26535 911.5
+489.26013 3014.7
+489.76251 1342.9
+490.22934 2031.3
+495.25858 1639.6
+495.75891 795.6
+496.26721 550.5
+503.26151 2425.0
+504.03381 731.8
+504.28296 1962.2
+504.53488 968.8
+506.00452 1090.7
+521.27179 596.2
+526.39526 526.2
+532.49652 1721.8
+541.24213 1568.0
+544.77527 948.6
+545.28162 655.7
+553.78186 4624.3
+554.28302 3529.2
+554.78552 1805.8
+557.37567 7171.8
+558.37885 2349.9
+559.25085 1628.1
+559.38367 1084.2
+561.96045 532.7
+572.27124 1385.1
+573.29388 1161.4
+573.79132 969.0
+582.29211 80781.3
+582.79346 63247.6
+583.29523 23977.7
+583.79590 5382.1
+584.29694 865.2
+584.70685 734.4
+589.29565 1882.1
+595.29742 784.1
+609.33063 1164.7
+613.79791 592.1
+638.83441 39892.7
+639.33539 38161.1
+639.83691 14773.5
+640.33862 2726.2
+670.29712 1012.8
+671.30945 633.0
+676.61780 1181.1
+679.73730 601.1
+686.41821 13030.0
+687.42059 6340.5
+688.31348 5759.8
+688.42493 2311.4
+689.31372 3111.5
+690.31982 866.9
+695.37482 3469.7
+695.87787 3044.6
+696.37872 875.0
+706.32172 12882.3
+707.32343 5711.0
+708.32733 1763.6
+716.42603 646.0
+722.41949 984.0
+727.37207 1498.7
+728.38361 588.6
+731.14301 780.6
+732.38092 800.9
+760.41339 677.1
+783.38361 631.9
+785.48651 12137.0
+786.48865 6414.3
+787.49445 3230.5
+788.50433 886.8
+790.88538 944.5
+791.38721 961.6
+795.57941 1069.5
+801.39532 5538.5
+802.39691 2663.6
+803.40143 747.2
+819.40497 22961.5
+820.40839 12227.4
+821.41046 4233.3
+872.48419 1047.7
+946.44922 753.4
+1012.75421 657.6
+1025.70667 714.4
+1188.17041 985.6
+1198.10522 3233.1
+1525.46350 755.0
+1711.21497 572.7
+1776.98206 1189.7
+1835.45923 743.8
+1860.00208 703.2
+1877.85632 775.1
+1879.11926 2192.4
+1879.47839 19703.7
+1879.86938 2725.9
+1880.26807 675.4
+1880.59314 723.8
+1893.64709 597.3
+1905.99182 652.6
+1907.04138 7391.6
+1918.79797 659.3
+1930.65295 1081.5
+1966.31604 613.6
+S	1905	1905	501.2576771
+Z	4	2000.99941
+132.18759 522.7
+139.72023 527.7
+141.01123 564.6
+146.97707 584.0
+154.07622 592.6
+165.77022 793.5
+188.12230 524.1
+188.22028 700.4
+188.23233 704.0
+188.23840 766.9
+188.25696 726.7
+188.27173 643.9
+188.28047 785.3
+188.29405 594.3
+188.30284 603.2
+188.32094 830.9
+188.34071 859.8
+188.37674 581.1
+198.89487 744.7
+199.09491 736.4
+199.19269 1048.6
+199.23088 685.4
+199.25522 1065.2
+199.27101 1434.4
+199.28055 871.9
+199.28989 1651.4
+199.29750 1896.5
+199.31024 769.1
+199.39548 1106.9
+211.07274 574.4
+233.12859 2897.7
+233.56715 606.8
+237.13004 3207.5
+237.63005 785.1
+237.79466 627.0
+238.15077 618.4
+247.07524 613.6
+261.12244 680.8
+263.64258 772.8
+271.59552 813.2
+272.64890 4677.9
+273.15149 1321.4
+281.09027 636.1
+286.14044 1117.2
+290.64963 565.9
+294.10568 548.2
+299.50195 1011.9
+303.17752 1249.8
+308.89343 739.5
+312.66141 892.4
+313.16299 861.4
+313.18652 712.9
+318.11044 964.0
+321.17487 3696.9
+321.67706 1621.6
+324.20309 1076.6
+325.18677 4499.9
+341.68454 6442.1
+342.18668 2607.4
+342.21350 4067.3
+344.18628 3315.5
+344.68799 1713.1
+353.19153 3652.8
+353.69174 1170.0
+354.69363 579.8
+358.18405 1351.9
+362.75601 620.5
+367.18842 2477.2
+367.68884 1019.1
+368.22977 698.1
+378.29141 614.8
+379.70367 4672.2
+380.19318 5278.0
+380.69656 2816.5
+381.19907 1176.1
+383.87164 808.4
+385.20786 1048.8
+388.70929 9000.2
+389.21011 5138.5
+389.71234 987.4
+391.21866 7612.4
+391.55746 580.5
+391.72009 3393.5
+393.70166 3547.2
+394.20590 1741.2
+394.69022 837.7
+394.71097 2014.0
+395.21225 661.0
+395.73032 632.6
+396.22336 7543.2
+397.22708 1159.7
+399.87222 7752.8
+400.20639 6862.7
+400.54178 2093.4
+402.70673 8555.6
+403.05008 616.3
+403.20825 5014.8
+403.70917 1057.4
+413.24991 11859.2
+414.25458 2898.5
+416.26129 3672.3
+417.26443 1095.3
+430.22827 5085.6
+430.72913 2307.4
+432.70837 3843.5
+433.20953 2315.1
+440.75278 6303.8
+441.25394 3522.0
+441.75650 1371.7
+454.22690 1012.6
+454.73254 940.6
+455.24637 763.1
+455.84735 592.3
+456.22650 2455.9
+456.55417 1632.2
+457.22989 1055.1
+458.76505 806.7
+459.71414 711.0
+468.22675 9267.4
+468.72888 6147.4
+469.22748 1729.4
+469.72882 840.0
+473.25354 6857.9
+474.26172 1607.2
+474.49344 2068.2
+474.73782 940.3
+476.27133 25823.7
+476.77286 13683.8
+477.27344 6279.7
+477.77631 1269.0
+478.74359 48366.4
+478.99411 87424.2
+479.24429 66334.0
+479.49432 40874.5
+479.74500 17729.9
+479.99673 4296.9
+480.22977 1116.4
+480.57074 2121.7
+480.90585 1120.1
+481.22266 1339.5
+482.65039 628.5
+483.24615 5742.0
+483.49680 8307.5
+483.74667 6878.0
+483.99658 3502.5
+484.24759 2147.9
+485.49054 761.6
+486.57687 43968.3
+486.91138 39498.2
+487.24509 21911.2
+487.57990 6844.4
+487.91376 1091.0
+495.84311 524.0
+508.80185 626.1
+516.24939 745.7
+516.73169 1323.4
+524.77911 1414.2
+525.74945 1733.8
+526.24237 952.2
+526.27814 914.5
+527.26367 18119.1
+528.26697 6643.0
+529.26392 840.8
+530.25714 3610.3
+530.59094 3720.1
+530.92493 2109.5
+531.26062 1139.8
+532.44244 2125.6
+533.78424 59819.3
+534.28546 45923.4
+534.78705 17236.5
+535.28809 3219.2
+535.78998 1091.6
+541.27832 2908.8
+542.28400 1189.0
+544.28986 13593.5
+545.30164 8872.2
+546.30878 2392.8
+549.14478 1020.0
+552.93805 684.6
+555.32654 681.7
+562.25989 735.9
+566.26343 764.5
+578.30737 587.0
+582.30176 716.8
+590.29773 1549.6
+590.80084 1118.1
+591.29871 1083.4
+596.62573 586.4
+598.26849 779.9
+599.30444 90822.3
+599.80566 79540.1
+600.30615 37336.2
+600.80682 15429.4
+601.30737 3170.8
+601.36090 575.6
+602.28760 1387.8
+609.95233 1607.4
+610.28845 2776.1
+610.62195 1764.2
+610.79700 717.6
+611.29846 775.9
+638.65118 863.7
+651.32123 1372.2
+651.81842 935.2
+652.31616 862.6
+652.79797 729.1
+662.33313 1335.4
+676.63397 1284.9
+677.30212 616.7
+680.83551 16267.0
+681.33752 17395.2
+681.83777 8255.8
+682.31232 1123.6
+682.36658 8019.0
+682.83545 1016.7
+683.36700 4152.9
+684.36115 730.7
+704.80121 517.1
+704.83911 514.2
+716.34460 2218.4
+728.85278 621.6
+729.36243 42571.1
+729.86353 50692.4
+730.36444 30612.6
+730.86505 10414.2
+731.36652 2299.5
+731.86377 1103.0
+733.36554 1652.9
+734.37433 1118.2
+781.42902 5960.9
+782.43549 2810.5
+787.37964 10411.4
+788.38141 5337.2
+789.38086 2423.2
+791.74713 636.1
+794.88593 1441.9
+795.38049 772.5
+795.57355 781.7
+800.35370 688.8
+804.40509 2946.6
+805.41132 2070.6
+853.13281 576.4
+1057.24060 721.4
+1197.99304 3356.5
+1243.58875 626.5
+1266.82410 564.9
+1583.62866 775.2
+1621.41663 818.0
+1649.97742 644.5
+1711.30481 661.2
+1771.25391 684.9
+1870.25879 861.1
+1877.32568 619.6
+1878.63928 1185.9
+1879.21387 2881.1
+1879.51489 19520.5
+1879.85107 2405.6
+1884.00317 863.2
+1907.05225 7381.0
+1930.56860 857.3
+S	1906	1906	1879.90899127
+Z	2	3757.97
+Z	3	5636.452
+507.12204 655.7
+525.39789 665.5
+528.47412 633.3
+532.42871 2081.6
+555.47046 630.6
+565.52948 636.2
+574.40906 605.5
+740.60480 716.5
+756.76770 599.1
+795.58008 798.1
+916.10663 594.9
+950.60028 606.0
+1103.98108 702.5
+1188.04907 887.9
+1197.96301 3588.1
+1451.25098 667.9
+1514.61755 592.5
+1525.29773 814.3
+1719.78625 635.2
+1725.83691 751.9
+1758.20068 637.0
+1875.29761 693.7
+1875.86926 884.8
+1877.70349 1170.9
+1878.65979 984.9
+1879.47778 19978.2
+1879.84131 777.4
+1880.07031 706.5
+1880.22339 709.3
+1881.34082 878.4
+1906.49780 840.5
+1906.77454 1002.0
+1907.06787 7011.1
+1930.50122 833.6
+1961.74207 656.2
+S	1907	1907	1907.4698246
+Z	3	5719.134
+Z	2	3813.092
+532.48407 2367.4
+549.13226 728.2
+572.64569 594.9
+629.15259 709.6
+630.39240 1054.6
+636.06061 621.9
+676.63837 1275.1
+726.83905 618.2
+756.13489 565.3
+952.60565 582.2
+1075.20117 533.4
+1198.07532 3520.3
+1287.61682 654.6
+1346.93616 689.6
+1382.66431 572.5
+1694.67285 633.1
+1771.27832 630.4
+1870.34094 682.5
+1875.66382 663.4
+1876.08594 633.7
+1878.39294 1167.5
+1878.67078 977.1
+1879.23792 2773.6
+1879.54419 20115.1
+1879.85718 2437.7
+1880.18420 1146.5
+1880.36804 1099.9
+1880.70032 1070.0
+1881.28284 714.3
+1881.57678 683.9
+1906.80920 980.3
+1907.09167 7011.1
+S	1909	1909	501.6828246
+Z	2	1001.518
+Z	3	1501.773
+127.75635 727.0
+140.71063 608.5
+142.31877 634.9
+146.92146 601.0
+147.97638 525.5
+148.04463 497.8
+158.16908 526.1
+165.77013 762.4
+169.49286 853.9
+170.90419 601.2
+188.24174 751.2
+188.26321 1658.3
+188.28259 1954.7
+188.29456 1813.6
+188.30867 1974.8
+188.33530 555.5
+188.35321 591.7
+188.37700 577.9
+188.44148 686.2
+198.89545 875.8
+199.19174 921.5
+199.22728 596.0
+199.25049 1087.1
+199.26208 828.0
+199.27155 1784.8
+199.28056 1315.0
+199.29045 1511.8
+199.36087 702.9
+199.36987 681.8
+199.39043 920.4
+199.80101 534.9
+204.71294 591.2
+209.42592 589.9
+220.13522 839.0
+223.64522 541.5
+233.12840 5065.8
+234.13164 907.4
+237.13002 3834.5
+259.95596 613.8
+261.12393 1728.5
+271.29492 544.0
+271.57880 613.7
+272.64917 4644.9
+273.15054 1507.3
+285.65720 1679.5
+295.98975 557.0
+303.17715 1594.6
+304.05997 614.9
+304.17792 677.7
+308.90356 823.5
+312.66269 2180.5
+313.16101 731.9
+318.11279 977.0
+321.17551 4910.7
+321.67645 1598.1
+324.20227 731.1
+325.18701 5528.8
+326.19040 965.4
+329.18942 678.9
+337.94559 651.0
+340.25031 683.5
+341.68491 10472.9
+342.18637 4514.7
+342.21350 6528.0
+342.68839 1339.2
+344.18484 3400.3
+344.68979 1607.5
+351.56619 569.2
+353.19122 5062.6
+353.69296 1776.7
+358.18384 2172.6
+358.68054 611.2
+364.70840 2012.9
+367.18762 3277.9
+367.68991 1491.2
+368.22992 1115.6
+379.70428 4791.8
+380.19391 5970.0
+380.69675 3062.3
+381.19833 1028.6
+383.87314 1235.8
+388.70941 11770.3
+389.18359 563.9
+389.21097 6547.8
+389.71100 1518.7
+390.21729 778.8
+391.21893 10093.5
+391.72089 5327.4
+392.16101 826.2
+392.22058 881.4
+393.70178 4632.6
+394.20938 1226.0
+394.70941 2727.1
+395.21085 1333.3
+395.23816 983.8
+396.22345 7069.6
+397.22775 1705.8
+399.87296 7530.6
+400.20724 5993.8
+400.54062 2829.4
+402.70670 10517.8
+403.20828 6656.1
+403.71094 1200.6
+413.25031 13725.2
+414.25311 2647.9
+416.26096 6080.0
+417.26532 948.0
+421.71243 1034.3
+422.71725 729.9
+427.54147 703.8
+430.22763 5378.8
+430.72861 3286.2
+431.22678 1144.5
+432.70816 4657.9
+433.17026 617.9
+433.20950 2482.0
+433.71030 756.8
+440.75281 9869.8
+441.25479 4471.6
+441.75464 1605.9
+454.23282 659.6
+455.24759 1130.7
+456.22690 4595.1
+456.56018 1547.2
+456.89462 1495.6
+457.23398 1743.9
+457.71686 1127.6
+459.22421 725.2
+459.70862 679.3
+460.21832 1379.9
+467.76190 766.1
+468.22687 11411.9
+468.72861 6458.4
+469.22693 2393.8
+469.72684 1115.2
+470.24432 765.3
+471.24655 1720.6
+471.49551 1964.5
+471.74863 808.6
+471.99954 804.7
+473.25357 9425.9
+474.23563 749.2
+474.26236 1707.4
+474.49161 2350.2
+474.74365 2090.0
+475.49094 844.7
+476.27158 32859.2
+476.77286 20310.4
+477.27426 7836.3
+477.77649 1718.8
+478.74387 76755.9
+478.99423 112968.8
+479.24466 79135.9
+479.29410 876.7
+479.49445 44636.2
+479.74496 17350.7
+479.99506 5569.9
+480.23871 1677.9
+480.57233 2666.6
+480.90482 2600.9
+481.22134 2394.5
+481.71948 1222.1
+483.24622 9628.1
+483.49698 11800.3
+483.74741 6281.1
+483.99908 2991.9
+484.24637 1304.9
+486.57724 44779.0
+486.91168 31863.1
+487.24554 9557.0
+501.25269 761.1
+507.19101 1649.2
+513.37579 653.8
+516.73633 1639.6
+517.23438 1484.4
+517.73401 1096.9
+522.25940 1620.0
+523.91565 1051.8
+524.78271 1160.9
+525.26782 1735.8
+525.76447 1883.6
+526.23846 898.3
+527.26373 23645.6
+528.26672 7939.1
+528.62659 690.5
+529.25983 1626.7
+530.25824 3506.8
+530.59174 4055.1
+530.92328 1832.7
+531.25562 1112.6
+531.58612 742.3
+532.48419 1575.0
+533.78467 78877.0
+534.28571 58536.3
+534.78741 20778.4
+535.28827 4678.2
+535.79376 1017.1
+538.72632 891.3
+541.27954 3687.6
+542.28186 1595.2
+544.29034 17184.1
+545.30292 13224.0
+546.31006 3174.0
+552.25330 1390.3
+552.75232 730.5
+555.32257 1084.5
+560.52319 597.0
+561.25580 1233.2
+566.77557 882.2
+567.27502 959.7
+575.77893 914.8
+590.29883 2778.9
+590.80237 1207.7
+591.29401 1243.9
+595.30005 1676.7
+595.63702 1128.3
+599.30487 131074.3
+599.80609 100281.4
+600.07202 833.5
+600.30670 50001.2
+600.80688 15238.4
+601.30621 3383.4
+601.78455 1455.1
+602.28589 2122.0
+603.29797 626.7
+604.61908 668.6
+609.95392 3194.6
+610.28772 3137.6
+610.62299 3170.5
+610.95685 1225.5
+615.80463 1563.0
+616.30316 1234.4
+623.80194 903.2
+624.31781 2637.1
+625.31769 757.3
+630.41699 655.8
+638.64819 1016.0
+638.98492 1365.0
+645.30249 1451.7
+651.32013 1322.9
+651.82458 1046.4
+653.30829 763.2
+661.99176 1150.7
+662.33136 1318.6
+665.01575 864.5
+676.62695 1311.1
+677.30499 706.7
+678.29913 759.2
+680.83624 25808.4
+681.33771 21455.9
+681.83838 12517.3
+682.31128 1736.0
+682.36658 12816.3
+682.83948 825.8
+683.36493 7122.0
+684.36591 1028.7
+716.34192 2566.2
+717.34143 1445.5
+719.85065 696.1
+720.35474 1078.4
+720.85895 1061.0
+729.36267 62182.5
+729.86371 57551.9
+730.36475 33520.2
+730.86646 13453.1
+731.36615 3359.9
+733.36798 2807.6
+734.37207 1308.3
+781.43060 7801.2
+782.43243 3988.7
+787.37939 13604.3
+788.38354 6941.1
+789.37976 2746.3
+794.88916 1223.6
+795.38641 1635.9
+795.57330 853.3
+795.88373 1049.8
+804.40472 3759.9
+805.40564 2737.2
+806.40979 918.0
+942.08563 801.6
+969.43042 646.9
+981.04840 601.8
+986.97662 665.5
+1198.08020 3587.0
+1319.88770 631.6
+1457.32532 618.0
+1656.05786 616.4
+1770.12854 604.5
+1860.03662 848.3
+1870.51819 809.5
+1877.95264 972.8
+1878.32324 724.0
+1878.74438 1117.8
+1879.52283 18663.6
+1879.79724 4775.8
+1880.34656 852.9
+1880.73303 1006.6
+1890.15173 733.3
+1907.10864 7368.4
+1930.59363 952.3
+S	1910	1910	624.177991267
+Z	3	1869.259
+Z	2	1246.508
+165.76918 63961.7
+168.28773 66362.2
+171.11230 188259.9
+174.43222 58944.7
+177.29240 58325.3
+188.24492 79441.1
+188.26077 115616.4
+188.27394 124926.6
+188.28798 224418.1
+188.31094 146064.1
+188.31905 130079.2
+189.87155 57315.8
+199.17230 76380.3
+199.18420 95390.5
+199.24707 85084.0
+199.27766 131653.5
+199.28232 144666.8
+199.29158 140855.4
+199.30501 200705.1
+199.37508 69585.2
+199.40401 69110.8
+210.49675 58038.0
+211.18044 1191631.8
+212.18381 165006.7
+223.13643 63954.7
+233.16486 806848.6
+234.16846 171579.1
+239.17508 638560.0
+245.16425 233264.3
+247.34213 66784.5
+255.27675 84489.8
+261.15918 287560.3
+262.11801 161777.2
+262.16382 70091.7
+266.03964 93558.1
+271.73569 96060.3
+272.08685 76670.3
+273.15991 216782.7
+276.77823 58287.9
+283.87869 85077.2
+284.19681 1311148.8
+285.15643 97237.6
+285.20050 136536.4
+288.17145 143475.6
+298.15457 190013.7
+300.44025 61856.7
+300.73532 56168.6
+306.33463 67647.3
+310.79443 63771.2
+315.18112 185902.2
+316.16595 125350.2
+318.18091 127769.5
+333.19183 2373415.3
+334.19556 357515.0
+337.15015 143263.0
+350.29453 100073.5
+355.05136 55203.4
+358.05035 70473.5
+375.20221 288135.6
+376.16312 126580.0
+381.21384 146604.3
+381.33322 102475.6
+382.49799 69259.0
+385.00214 65895.1
+386.24362 329257.0
+387.20291 233472.2
+387.24579 81124.1
+403.26938 742529.5
+404.27414 107429.8
+408.70490 82207.5
+415.19699 269251.0
+427.51462 72269.6
+431.26495 1001527.1
+432.22241 167186.7
+432.26804 206156.4
+434.24008 407649.2
+435.24246 71229.2
+464.71811 95981.1
+472.21561 96129.2
+473.23373 101092.1
+473.72330 237833.6
+474.22394 140077.5
+478.23019 151782.3
+482.23743 1848965.9
+482.73828 1042559.0
+483.23959 279436.8
+483.73923 74659.0
+484.21973 308887.9
+489.24472 264396.5
+500.28583 416978.3
+501.29077 75380.5
+512.21246 197206.2
+513.28162 606540.5
+514.28400 127777.4
+514.86499 63439.0
+516.27014 102909.3
+517.31171 233041.8
+521.25989 210728.1
+521.75195 231310.7
+522.26190 116735.2
+526.11975 67578.1
+527.29938 103399.9
+528.28040 801785.1
+529.23877 258839.8
+529.28461 190943.4
+529.77386 967962.6
+530.26569 2777794.3
+530.76691 1364250.5
+531.22748 85085.3
+531.29175 6749070.5
+531.76013 56094.1
+532.29462 1913280.8
+532.48993 148517.2
+533.29626 222319.9
+535.25348 129195.8
+538.77893 14067045.0
+539.28021 7713552.5
+539.78149 2139394.5
+540.10522 75119.0
+540.28375 372589.9
+540.59430 69570.9
+540.78668 108313.7
+545.30609 743914.6
+546.26642 177438.9
+546.31110 136838.4
+548.53522 63552.7
+570.30322 299866.2
+571.30273 103408.2
+584.28870 120682.7
+588.31281 8890555.0
+589.31604 3111358.8
+590.31921 449056.4
+592.80957 506899.7
+593.31110 376740.8
+593.80817 169160.7
+595.32153 148346.9
+597.30133 424531.1
+597.79968 530565.4
+598.30304 517419.5
+598.80127 158811.2
+601.32123 570221.0
+601.82239 408957.9
+602.32080 98910.7
+602.82867 83098.5
+605.82068 89288.4
+606.31317 2094408.0
+606.81372 1419032.0
+607.31409 440952.6
+607.80627 111007.1
+614.86798 69880.1
+623.78070 167740.5
+624.25146 58282.5
+624.30200 137531.5
+641.33978 206773.9
+642.32318 1490931.5
+643.32642 406643.4
+654.32410 105889.2
+655.33575 74978.7
+659.35095 766979.6
+660.35144 198978.2
+667.32306 82963.4
+671.34906 185522.8
+676.63556 103817.4
+681.33423 208893.6
+682.31641 913981.0
+683.32098 365242.6
+685.32819 606692.1
+686.33160 136774.9
+688.36865 85681.1
+698.36078 263065.9
+699.34491 2401496.8
+700.34833 840507.9
+701.35596 132669.4
+702.35620 5765821.0
+703.35895 2232275.0
+704.35999 448845.0
+716.37183 1062372.3
+717.37439 385322.2
+721.46771 69053.7
+727.33405 119363.0
+731.07794 68556.7
+781.35663 94973.7
+795.57635 122165.1
+796.39587 102952.7
+798.38892 381497.1
+799.37201 1499037.0
+800.37622 672913.6
+801.37756 107081.9
+815.17578 72709.6
+816.39880 13539261.0
+817.40161 5830711.5
+818.40466 1489554.0
+819.40985 275155.3
+852.42529 101527.7
+853.42896 103623.3
+857.98773 79956.7
+862.40466 131858.1
+879.43494 343279.7
+880.41937 736746.7
+881.42474 337266.0
+896.46069 231494.5
+897.44641 805661.4
+898.44983 330516.1
+913.41370 107794.0
+914.47089 556754.5
+915.47491 222063.1
+916.48114 77489.1
+928.42188 138577.5
+929.43158 114332.4
+930.42621 76876.8
+945.45648 549526.9
+946.44073 2147427.8
+947.44421 1050406.9
+948.44501 396036.4
+963.46722 16911454.0
+964.46954 9214594.0
+965.01892 129194.2
+965.47314 2462219.0
+966.47485 455531.3
+966.63062 92174.0
+974.44745 114064.3
+975.44012 94490.7
+1037.51855 112677.6
+1038.50281 165187.5
+1048.48999 257970.7
+1049.48376 144180.8
+1056.53430 89401.3
+1057.25562 61001.8
+1057.32642 59500.6
+1058.53699 86983.2
+1059.52344 600513.3
+1060.53284 292284.5
+1061.52942 75965.6
+1065.51477 1018890.8
+1066.50525 1038483.9
+1067.50476 520615.4
+1068.50415 130317.6
+1076.55151 3344558.5
+1077.55432 2001223.4
+1078.55420 521089.9
+1079.55750 87756.5
+1082.53992 562628.5
+1083.52661 1648266.0
+1084.52844 996629.2
+1085.53235 231596.8
+1086.52551 69268.9
+1100.55225 2251601.5
+1101.55322 1244410.3
+1102.55823 389512.0
+1103.55286 120507.1
+1140.19543 72051.5
+1150.49365 64235.7
+1174.54285 61654.1
+1198.08484 354164.9
+1276.34229 68894.5
+1279.20581 65863.7
+1467.69849 61414.2
+1525.30615 77110.0
+1863.98242 90605.8
+1872.96814 62279.5
+1879.07068 93488.5
+1879.52771 1939671.6
+1881.35620 63379.4
+1906.68945 76629.1
+1907.11511 748392.1
+1918.74072 70857.6
+S	1911	1911	695.932991267
+Z	2	1390.018
+Z	3	2084.524
+188.26888 1061.4
+188.28168 1092.3
+188.28769 1326.9
+188.30037 1464.5
+188.30965 952.1
+188.32304 963.1
+189.60872 520.9
+197.69922 706.9
+198.89687 696.2
+199.18826 1470.3
+199.25494 948.7
+199.28520 3300.2
+199.30717 739.5
+199.31059 741.9
+199.38441 1150.4
+206.62491 568.4
+214.03867 623.9
+229.62929 726.0
+230.31711 587.6
+233.57750 703.4
+234.72852 656.9
+251.88852 618.3
+258.39926 596.9
+270.52893 661.7
+280.70840 718.3
+307.91498 634.7
+308.90823 684.3
+314.98837 561.6
+337.82367 697.2
+349.28262 556.6
+351.60284 703.7
+378.82440 672.2
+387.30856 638.1
+399.16675 681.1
+415.96320 632.6
+425.31418 554.3
+429.36780 590.6
+443.08981 707.7
+457.26282 625.9
+469.60797 616.3
+482.66348 700.4
+483.47577 636.3
+532.48053 1711.9
+535.09698 685.8
+613.33112 627.1
+627.61865 649.8
+630.41992 966.8
+676.38348 658.2
+723.50702 634.6
+795.58270 1030.5
+867.69263 655.0
+953.43958 669.2
+962.78064 626.4
+1092.19763 666.8
+1197.94287 806.0
+1198.07520 2830.3
+1553.61121 664.5
+1668.92249 675.3
+1776.88818 992.3
+1830.01819 717.1
+1875.96802 642.3
+1877.14160 975.5
+1878.39453 1179.0
+1878.73132 954.1
+1879.14673 1538.5
+1879.54419 19960.5
+1879.93970 2053.9
+1880.36267 1126.2
+1881.08081 900.7
+1906.79419 782.3
+1907.06677 7207.9
+1930.64648 742.3
+1963.50122 788.5
+S	1913	1913	1879.8918246
+Z	3	5636.4
+Z	2	3757.936
+513.22546 721.7
+532.49255 2089.0
+549.17023 808.5
+608.62488 612.7
+616.21368 624.5
+676.65143 1124.4
+746.01208 576.9
+795.58026 782.5
+799.57184 598.8
+807.32562 559.5
+814.51825 572.4
+924.84436 725.3
+1019.73981 769.9
+1051.61169 670.2
+1057.24231 988.6
+1169.06042 743.8
+1188.11877 886.6
+1198.09888 3162.0
+1268.13208 541.1
+1268.21228 601.1
+1314.97424 654.1
+1475.61926 695.7
+1525.44177 753.3
+1876.15869 975.6
+1879.03101 2187.6
+1879.55981 19874.6
+1880.15405 1485.5
+1907.15942 6792.1
+1930.66394 1044.9
+1986.61377 705.0
+S	1914	1914	501.2589596
+Z	4	2001.00454
+159.86880 609.2
+166.45799 586.3
+174.91406 720.6
+181.94336 601.9
+182.16176 584.2
+184.86938 586.7
+188.24207 801.0
+188.25249 1155.7
+188.28235 2477.2
+188.29933 1859.9
+188.30893 1514.7
+188.36137 676.2
+198.89677 776.1
+199.09866 618.0
+199.17206 564.7
+199.21330 723.3
+199.24699 1192.5
+199.25412 1383.3
+199.27097 1921.5
+199.29349 1410.9
+199.36588 755.7
+199.39023 870.1
+200.05443 661.2
+214.53424 596.5
+233.12805 1976.2
+234.03127 589.6
+234.13182 765.1
+237.13055 2017.8
+258.48087 593.1
+272.64871 2836.6
+280.20041 593.0
+303.17700 623.9
+312.66138 1036.6
+321.17511 2571.5
+321.67719 1126.7
+324.20297 844.3
+325.18655 3503.5
+326.18768 725.3
+341.68448 5699.5
+342.18628 2244.3
+342.21252 2708.7
+342.29950 587.7
+344.18445 1932.4
+344.68793 900.1
+353.19016 1935.1
+353.69003 1183.3
+358.18268 916.5
+367.18915 1698.7
+367.69119 643.0
+379.70294 2527.4
+380.19284 2517.7
+380.69617 3377.2
+384.20657 664.1
+388.70950 6450.4
+389.21072 4235.1
+389.71216 683.8
+391.21912 5232.8
+391.72003 2795.1
+392.21860 898.6
+393.70187 1829.7
+394.71216 1106.0
+395.71039 675.8
+396.22235 3202.9
+397.22614 827.9
+399.87250 3114.7
+400.20642 4825.0
+400.54031 1365.5
+402.70612 6083.5
+403.20798 3251.6
+403.70667 1750.6
+405.21161 598.1
+413.25018 7346.2
+414.25381 2100.5
+415.25745 699.4
+416.26099 2366.6
+427.58853 777.3
+430.22781 2491.3
+430.72931 2485.6
+432.70724 2455.4
+433.21060 1744.7
+433.70682 717.7
+440.75253 4591.4
+441.25433 3362.4
+441.75687 1112.0
+447.81168 654.6
+456.22687 2364.8
+456.56128 731.0
+468.22650 4668.0
+468.72821 4434.3
+469.22778 1707.0
+471.45639 650.3
+473.25305 4445.3
+474.25781 1072.8
+474.74240 1624.0
+476.27145 15289.1
+476.77216 10101.2
+477.27417 4403.4
+477.77704 837.5
+478.74338 23707.9
+478.99399 58184.5
+479.24438 58033.0
+479.49442 32367.8
+479.74475 11701.5
+479.99487 2911.2
+480.56842 1609.4
+480.90677 1284.5
+481.22583 731.8
+483.24518 4272.9
+483.49713 6443.0
+483.74771 6809.9
+483.99762 3406.5
+486.57663 21811.8
+486.91119 31958.4
+487.24524 21329.4
+487.57895 7829.5
+487.91211 1995.3
+516.24445 554.7
+517.22845 587.0
+517.72650 630.1
+524.78375 795.7
+525.27991 1181.4
+527.26331 13586.5
+528.26593 5419.0
+529.25989 910.4
+530.25916 1395.7
+530.59119 2312.5
+530.92688 2228.0
+531.26105 1296.5
+532.46613 2205.4
+533.78412 41488.7
+534.28540 36302.8
+534.78699 14777.8
+535.28662 2458.1
+541.27838 2359.9
+544.28925 8735.5
+545.30121 5287.6
+546.31250 1175.4
+561.76453 659.6
+590.30072 1293.0
+590.79968 1373.3
+591.29938 984.0
+592.30237 685.3
+595.30383 576.2
+599.30426 53019.9
+599.80573 57503.5
+600.30597 33047.2
+600.80688 10759.3
+601.30768 2864.4
+601.77557 738.3
+602.28918 645.7
+602.78918 706.7
+610.28906 1073.4
+610.62445 2394.8
+610.95917 943.3
+624.31488 996.5
+630.47559 710.3
+638.65228 900.2
+676.64160 1291.3
+680.83575 9904.3
+681.33746 12838.1
+681.83850 8821.1
+682.31561 1420.2
+682.36957 5476.3
+683.36401 3267.7
+696.41718 614.1
+716.34131 756.4
+717.34802 858.1
+723.71027 540.8
+729.36261 22551.9
+729.86334 32085.8
+730.36426 24316.4
+730.86523 8944.9
+731.36761 2230.7
+733.36688 1112.2
+771.29852 552.0
+781.43115 3463.4
+782.43494 2174.1
+783.44043 938.0
+787.38037 7635.2
+788.38214 4186.0
+789.37354 738.0
+795.58038 1127.0
+795.89966 1007.9
+804.40680 2297.9
+805.41260 1441.1
+841.83606 591.2
+960.00128 620.1
+1057.25073 678.5
+1188.19604 1001.3
+1198.04285 3258.1
+1201.50171 717.2
+1381.92053 631.5
+1417.80591 731.7
+1426.97070 562.6
+1525.59326 1060.7
+1529.96375 629.9
+1557.04919 709.2
+1776.90137 817.4
+1870.29810 902.3
+1877.82495 925.6
+1879.07642 1875.7
+1879.53284 19925.4
+1879.95679 1487.3
+1881.17017 927.0
+1907.09326 7609.3
+1907.54871 709.1
+1918.80786 684.1
+1930.83728 774.6
+S	1915	1915	501.7603246
+Z	4	2003.01
+128.58151 697.8
+136.73019 546.7
+137.29736 694.7
+141.51158 553.9
+146.09859 604.8
+157.61293 689.2
+165.77223 875.3
+169.50200 537.2
+171.31918 599.9
+183.05975 607.2
+188.26642 1107.0
+188.27776 985.3
+188.28697 1390.5
+188.29755 977.9
+188.30287 909.0
+188.31326 872.1
+188.33072 774.6
+198.89877 705.0
+199.16675 785.8
+199.26398 1229.1
+199.27902 2277.9
+199.29378 1044.9
+199.37779 1185.7
+209.77415 573.7
+214.52888 667.6
+215.43889 641.2
+222.10941 566.0
+233.12820 2541.8
+234.13188 690.8
+236.82698 575.9
+237.13077 1853.1
+262.00833 520.7
+271.57953 752.7
+272.64954 4225.8
+273.15134 1719.7
+303.17688 725.2
+309.24481 582.2
+312.66229 1384.4
+313.16461 853.5
+318.11081 1059.0
+321.17551 3336.0
+321.67810 1190.0
+325.18665 3934.9
+326.19122 968.9
+329.18973 1038.6
+341.68515 5395.8
+342.18668 2410.2
+342.21359 3830.0
+342.30276 752.8
+343.21643 738.2
+344.18579 2757.8
+353.19055 4449.8
+353.69421 1115.7
+358.18237 1352.9
+364.70874 1022.3
+367.18802 1424.5
+377.84665 629.3
+379.70419 5105.7
+380.19452 6144.0
+380.69684 3522.7
+385.20129 632.6
+388.70935 11173.5
+389.21115 5157.7
+389.71191 1222.9
+391.21896 6848.2
+391.71866 2921.6
+392.16452 732.7
+393.70175 3973.1
+394.18787 1096.2
+394.71243 956.4
+395.21176 1223.5
+396.22342 5486.8
+397.09799 651.7
+397.22705 1126.0
+399.87225 6228.6
+400.20660 3987.3
+400.54086 2611.3
+400.87540 1248.3
+402.70663 11570.9
+403.20837 5164.9
+403.70624 1650.0
+407.58832 658.9
+413.25046 10263.0
+414.25409 2424.6
+416.26056 3144.0
+417.26385 658.3
+417.37216 530.5
+418.70996 958.8
+421.71332 788.9
+424.37146 651.0
+430.22711 4717.1
+430.72910 2760.6
+432.70761 2666.8
+433.20923 1849.9
+440.75290 6174.5
+441.25400 3303.8
+451.95966 558.0
+454.22705 925.4
+456.22684 2995.9
+456.55658 878.8
+456.89465 1210.3
+459.71362 1283.3
+459.97562 753.7
+468.22705 10015.8
+468.72937 4315.4
+469.22827 2542.4
+469.72577 894.1
+470.72980 715.9
+471.24466 1231.0
+471.49710 972.1
+473.25409 6097.7
+474.26205 1438.4
+474.48886 1814.7
+474.74179 1072.3
+476.27121 25113.7
+476.77304 12068.1
+477.27362 4150.0
+477.77289 770.3
+478.74365 64470.7
+478.99411 81704.5
+479.24445 62904.5
+479.49429 28878.8
+479.53113 626.9
+479.74570 12008.6
+479.99564 1881.3
+480.23215 874.9
+480.25143 719.4
+480.56937 1774.8
+480.90445 1302.3
+481.22339 1379.0
+481.72162 896.4
+482.70047 664.4
+483.24606 8555.3
+483.49683 9949.3
+483.74686 8257.0
+483.99768 5574.8
+484.24646 1965.9
+485.00095 737.3
+485.48987 820.7
+485.73871 657.5
+486.57697 49360.6
+486.91153 40555.4
+487.24521 22804.6
+487.57837 6787.6
+495.10815 562.5
+516.72815 1048.1
+523.58569 1148.6
+524.78210 1430.0
+525.27509 1000.4
+525.74188 1130.2
+525.77234 736.4
+527.26324 16237.3
+528.26697 4072.0
+530.25702 3719.3
+530.59180 3067.9
+530.92542 1600.0
+532.50092 2103.9
+533.78436 61678.8
+534.28552 37691.1
+534.78741 14299.8
+535.28833 1866.8
+541.27899 3650.7
+544.28998 11739.4
+545.30273 6291.3
+546.30896 1180.8
+549.18011 562.5
+552.25177 819.2
+561.25500 1389.7
+561.76062 792.3
+566.26813 779.4
+567.03430 640.1
+590.29871 1868.5
+590.79950 1091.8
+591.29028 689.6
+599.05414 635.2
+599.30463 96515.8
+599.80579 69957.2
+600.30658 29960.3
+600.58575 702.5
+600.80664 9540.5
+601.30725 2705.9
+601.78528 1343.9
+602.28571 869.0
+603.94751 732.5
+609.95190 2109.8
+610.28955 2429.3
+610.62054 1225.0
+610.79138 1044.2
+610.95782 1169.7
+611.28802 854.7
+624.31317 1027.7
+638.64984 1322.1
+651.32050 969.0
+651.81848 805.7
+662.33228 922.2
+662.65857 644.3
+676.58398 784.0
+676.65405 1351.0
+680.83600 18218.0
+681.33783 16569.6
+681.83893 6911.6
+682.31152 1276.3
+682.36737 6618.1
+683.36462 3598.0
+716.34161 1951.7
+717.33997 966.3
+718.33557 694.1
+729.36243 47111.8
+729.86365 47243.3
+730.36456 26913.5
+730.86609 7906.4
+731.36554 2304.8
+733.36816 1940.7
+770.30695 580.5
+781.43011 4406.4
+782.43347 2474.1
+787.37976 9128.5
+788.38196 5002.2
+789.38147 1652.3
+791.69659 543.7
+794.88361 1154.3
+795.38513 1275.8
+795.58148 783.2
+796.38635 779.8
+804.40546 2993.6
+805.40753 1576.3
+955.78198 646.1
+1053.08838 645.2
+1198.11951 3827.7
+1239.18591 683.4
+1410.21570 617.0
+1419.66296 604.5
+1456.60449 686.5
+1503.06836 610.6
+1528.76587 654.7
+1584.53992 658.2
+1651.59888 688.3
+1776.94299 1044.7
+1878.87427 1159.9
+1879.23682 3125.7
+1879.57434 19562.6
+1879.92871 3490.2
+1880.34900 600.6
+1880.61304 813.9
+1907.04639 7480.0
+1930.73926 934.1
+S	1917	1917	1907.4875746
+Z	2	3813.127
+Z	3	5719.188
+532.47223 674.8
+532.51190 2114.9
+547.06061 617.4
+623.84692 542.5
+663.91437 580.6
+667.49249 664.2
+676.61469 631.9
+699.94684 596.4
+746.89191 586.3
+866.26758 569.4
+957.45862 674.7
+970.96600 595.0
+1057.19080 792.1
+1188.30884 839.6
+1198.03345 702.4
+1198.14685 2705.8
+1306.77954 614.0
+1376.12183 684.2
+1664.89905 690.5
+1771.53796 678.5
+1867.34106 781.5
+1878.90637 971.8
+1879.48499 17297.9
+1879.71423 4617.7
+1881.28162 1035.0
+1907.11145 6904.4
+1918.78748 932.2
+S	1918	1918	501.2570046
+Z	4	2000.99672
+130.07683 1370.9
+131.74808 1288.8
+133.00926 1794.6
+157.11734 1316.6
+158.22136 1452.3
+165.76871 1851.9
+170.41245 1402.4
+171.63544 1924.9
+172.74223 1470.8
+188.21117 1641.6
+188.22279 1661.3
+188.25714 4620.8
+188.27208 4676.1
+188.28314 6143.8
+188.29681 5416.0
+188.31511 3562.6
+188.32829 1835.6
+188.34576 1508.1
+188.39172 1540.9
+197.71109 1271.0
+198.90004 2552.2
+199.18073 2213.4
+199.19016 2179.4
+199.21944 1638.2
+199.25356 3330.1
+199.26930 3909.6
+199.27791 3744.4
+199.29108 4936.9
+199.36751 2325.6
+199.38968 2119.6
+211.22107 1398.2
+225.49597 1522.3
+233.12720 2033.2
+237.13017 2852.3
+272.64905 3984.4
+272.74326 1339.0
+280.20554 1205.8
+280.21249 1263.2
+290.23587 1406.5
+299.16858 1542.1
+321.17770 1903.9
+323.62073 1241.1
+325.18655 4213.2
+326.93372 1353.7
+338.31296 1418.4
+341.68341 4193.2
+342.18555 1535.4
+342.21225 3305.4
+342.29611 2038.5
+353.19067 5614.7
+354.14001 1467.3
+367.19156 2076.1
+367.22064 1402.9
+380.19351 3527.1
+388.70908 8091.2
+389.21045 3507.3
+391.21805 4541.3
+393.70154 3844.0
+396.22455 3785.1
+397.39862 1622.3
+399.87125 11250.8
+402.70691 7813.7
+403.20728 2241.3
+413.24951 8796.0
+416.26245 3162.3
+430.22910 4080.0
+432.70837 2503.7
+440.75208 6496.5
+456.22360 2432.5
+463.91571 2495.4
+468.22644 8236.2
+468.72742 5865.1
+473.25317 5674.8
+474.20111 1428.4
+474.72391 1551.2
+476.27075 18528.9
+476.76999 9306.5
+478.74310 66176.9
+478.99341 57569.1
+479.24420 29263.1
+479.49396 16100.5
+483.24542 11942.9
+483.49692 7779.8
+483.74640 3734.5
+483.99661 2024.3
+486.57642 39651.6
+486.91125 33718.5
+487.24490 12499.5
+487.57172 2993.2
+516.73816 1679.0
+516.98926 2153.2
+527.26300 13714.8
+528.26752 3030.9
+530.25623 3890.8
+530.58875 3222.0
+532.50024 4542.9
+533.78351 50010.6
+534.28516 29543.6
+534.78503 4763.9
+544.28979 10572.3
+545.30499 5136.7
+582.28998 2754.5
+599.30389 82467.2
+599.80542 43307.5
+600.30640 20354.6
+600.80402 3380.2
+609.94800 2417.1
+624.32520 2017.6
+630.46503 1603.5
+644.40289 1942.2
+676.64227 3444.0
+680.83539 14226.1
+681.33789 7627.0
+681.83844 3607.9
+682.36621 6169.7
+683.36896 1672.4
+720.34613 1723.8
+729.36218 52971.0
+729.86298 33764.1
+730.36334 13932.9
+730.86200 2502.0
+781.44232 2927.6
+787.37970 8837.9
+788.38348 2700.7
+794.88037 2063.7
+804.41510 2199.0
+849.20612 1480.2
+857.89276 1771.6
+1198.11548 8759.3
+1631.26282 1706.3
+1670.40845 1578.5
+1878.17957 2454.8
+1878.57800 2360.5
+1879.02405 5461.3
+1879.24780 2338.9
+1879.53552 50139.1
+1880.03284 5751.8
+1880.55054 3150.9
+1881.03125 1857.2
+1894.11572 1836.4
+1907.02966 19892.6
+1918.80908 2146.4
+S	1919	1919	625.9843246
+Z	2	1249.953
+165.18193 78133.1
+167.99619 87969.2
+171.11235 278673.6
+186.83321 80174.8
+188.26590 108805.1
+188.27759 136070.3
+188.28952 116913.8
+188.30150 118707.1
+188.30893 88256.5
+188.31465 80174.6
+191.60881 81728.3
+198.89655 91800.2
+199.26668 282341.2
+199.28185 163394.4
+199.28894 234517.4
+199.38843 173898.4
+211.18022 1224923.6
+212.18286 130149.5
+233.16454 668428.0
+239.17497 891799.0
+240.17569 105967.0
+240.64667 79059.9
+245.16426 236222.4
+252.27278 78763.0
+261.15826 230727.0
+273.15909 249625.8
+284.19659 1542935.3
+285.19995 262785.7
+288.17166 106853.2
+293.60052 83719.9
+298.15402 140613.8
+316.16162 110930.2
+318.17972 92030.5
+333.19150 3004841.8
+334.19586 454679.4
+337.14975 126034.6
+373.46310 87384.9
+375.20279 201821.9
+386.24353 579022.3
+387.20010 212660.1
+387.24609 133809.4
+403.26929 955241.0
+404.27325 186408.5
+415.19806 204071.3
+427.56396 111461.3
+431.26483 1479467.1
+432.26855 260656.7
+434.23965 458248.2
+435.24417 161237.9
+454.35019 84823.4
+473.72141 201690.7
+474.22620 146063.9
+478.22791 117766.4
+482.23676 2239892.0
+482.73853 1166418.5
+483.23959 343733.7
+484.21985 164928.4
+489.24219 172067.3
+500.28467 336048.9
+501.28784 139754.6
+502.84769 78137.4
+512.21161 188379.0
+513.28046 393439.5
+517.31403 348050.5
+521.26172 130702.8
+521.75183 156571.3
+527.29486 160150.8
+528.28040 988801.0
+529.23932 190784.8
+529.28308 217135.5
+529.77386 1009270.9
+530.26520 2826577.0
+530.76715 1699107.8
+531.29138 7467118.0
+532.29425 1891664.1
+532.50690 255392.4
+533.29565 272270.5
+538.77850 18903752.0
+539.27979 10732792.0
+539.43481 100927.1
+539.78125 3155948.8
+539.93774 93750.5
+540.28290 683362.5
+545.30609 930233.3
+546.26434 136833.4
+546.30817 293042.1
+569.23468 94513.1
+570.30029 182104.5
+573.59943 80090.8
+575.41345 97589.0
+588.31238 8884977.0
+589.31567 2696603.3
+590.31897 594454.4
+592.80811 355320.6
+593.30475 227116.3
+595.31537 108517.5
+597.30072 526851.2
+597.79956 363548.0
+598.30151 344811.1
+601.32245 323785.3
+601.81982 389972.8
+605.82507 105384.2
+606.31213 3545899.3
+606.81116 2648786.8
+607.31158 1010818.3
+607.80975 268716.7
+641.33728 226725.2
+642.32300 1811514.5
+643.32660 675200.1
+644.33362 103572.0
+654.89856 99128.0
+659.34991 1058732.4
+660.35229 425193.1
+676.64850 144272.4
+681.33923 163333.4
+682.31781 1152178.9
+683.32233 442168.8
+685.32788 364102.4
+698.36224 510420.7
+699.34381 3074987.0
+700.34766 1129036.8
+701.34985 259882.8
+702.35553 5763087.5
+703.35846 2101273.3
+704.36206 433698.5
+716.37177 1449193.8
+717.37299 426235.2
+718.37738 117005.9
+731.19757 93580.9
+744.35498 86740.8
+795.58582 141721.1
+796.39526 114266.2
+798.38727 235142.6
+799.37158 1187809.8
+800.37427 468640.2
+804.52295 85361.5
+810.09937 76561.4
+816.39801 11805190.0
+817.40070 5284278.0
+818.40375 1500743.8
+819.40625 214883.8
+858.13397 100719.4
+862.40582 138275.9
+864.41675 82210.2
+879.43396 334671.6
+880.41711 799769.1
+881.41888 440136.4
+882.41418 166834.2
+896.45691 407926.2
+897.44385 1111719.0
+898.44843 522991.0
+906.33154 95067.3
+914.47211 831295.1
+915.47614 357324.8
+929.41608 125025.6
+945.45557 613712.9
+946.43988 2013667.8
+947.44385 1163120.8
+948.44800 348845.4
+960.31299 79720.4
+963.46637 17812874.0
+964.46881 9289285.0
+965.47247 2709530.8
+966.47205 538005.1
+966.63306 113568.7
+974.43066 133085.0
+1038.50781 175754.3
+1048.48340 194612.2
+1049.48035 131610.2
+1058.53137 110762.8
+1059.52515 501069.3
+1060.52673 296691.7
+1065.51306 1189535.3
+1066.50537 1209025.6
+1067.50781 590757.2
+1076.55017 3235830.5
+1077.55298 1710755.1
+1078.55469 604383.8
+1082.53845 681435.8
+1083.52527 2185907.3
+1084.52661 1253915.9
+1085.52563 310480.5
+1086.52612 167706.0
+1100.55078 2882739.0
+1101.55273 1819072.1
+1102.55530 428949.9
+1103.55286 114226.4
+1111.81909 88980.4
+1198.13428 445232.0
+1236.33179 125038.0
+1294.34424 96885.8
+1496.50183 93888.2
+1525.50366 107288.5
+1721.13782 76697.5
+1721.23926 70759.7
+1878.05615 109456.8
+1878.98096 92924.2
+1879.14685 148985.6
+1879.55493 2647210.8
+1881.04382 108086.6
+1897.26465 92021.7
+1906.59766 110064.4
+1907.05225 1029055.2
+1930.68982 146454.6
+S	1921	1921	1879.9708246
+Z	3	5636.637
+Z	2	3758.094
+532.46265 1728.1
+547.33588 636.3
+623.73651 570.7
+676.61945 1381.3
+690.88184 667.9
+731.17743 783.6
+795.59271 979.8
+812.43103 552.1
+858.09943 663.2
+999.98151 660.6
+1052.33203 692.6
+1057.23254 698.1
+1198.02734 3901.6
+1402.46997 789.2
+1525.47363 816.9
+1667.08276 765.1
+1796.89380 710.2
+1876.71082 858.0
+1878.26575 1095.6
+1879.46863 19800.6
+1880.36389 715.7
+1904.95740 589.2
+1906.88330 6453.4
+1930.66431 845.7
+S	1922	1922	1907.44740793
+Z	3	5719.067
+Z	2	3813.047
+532.46637 1749.7
+534.34790 572.4
+555.95435 582.0
+569.39325 628.1
+584.22760 690.1
+665.05817 628.0
+677.61627 546.0
+683.28754 652.1
+795.58887 998.6
+819.73608 629.6
+891.60468 590.0
+1004.28149 715.2
+1019.69781 693.2
+1071.39600 690.9
+1113.10718 576.5
+1139.75342 683.2
+1140.11182 816.4
+1198.05042 3119.6
+1271.26331 810.5
+1593.83276 734.7
+1598.83777 628.7
+1777.45325 626.5
+1831.72168 736.4
+1834.78601 732.1
+1878.28235 1124.1
+1879.52087 20090.2
+1879.80408 2510.4
+1880.27893 716.3
+1906.89404 6654.9
+1908.85706 547.0
+1918.84998 801.1
+1930.69019 867.8
+S	1923	1923	652.829407933
+Z	3	1955.213
+Z	2	1303.811
+171.63422 5919.5
+177.11093 21110.9
+186.07448 6306.4
+188.26817 11974.8
+188.28108 11144.0
+188.28851 10292.2
+188.29976 11445.0
+198.90105 10975.6
+198.99792 7290.9
+199.26617 16255.9
+199.28542 33997.8
+199.30626 15985.4
+199.38356 14827.5
+201.52156 8270.2
+214.77890 6895.4
+215.30107 7219.5
+221.13809 9912.2
+232.96980 8124.5
+234.08694 7338.5
+240.07834 7479.3
+245.26944 6918.6
+249.15887 52104.8
+255.27982 8526.6
+265.16333 15907.5
+271.87808 7108.7
+273.32785 7052.8
+277.15341 17409.3
+280.55493 7470.2
+283.86646 7497.0
+292.28549 7643.1
+309.18997 36075.7
+327.20157 11432.2
+338.17969 17916.4
+339.49893 7716.0
+350.28116 8023.6
+353.21634 30497.5
+371.22815 12905.7
+377.41431 7770.4
+381.34222 9240.3
+397.24185 34852.3
+408.19479 16017.8
+413.49496 8285.4
+415.25174 12666.6
+416.16580 7437.6
+425.13577 7301.6
+427.52362 9473.8
+428.75803 7742.4
+439.82794 7662.4
+441.26831 33377.7
+469.22162 60934.6
+482.63269 10559.8
+485.29565 23479.2
+503.30447 25524.9
+514.72784 21735.6
+515.22894 12284.9
+529.31793 23733.2
+532.45764 25819.5
+547.33026 61211.1
+548.33496 10174.4
+549.12378 8678.3
+550.01782 7650.3
+580.27594 9887.8
+580.46576 8175.6
+582.30389 18848.8
+588.31140 8452.5
+591.35773 68563.7
+592.35864 19575.2
+596.25702 14014.6
+608.27155 23882.0
+617.37085 28977.5
+618.37390 9738.3
+621.26050 12740.6
+628.58771 9100.1
+629.77637 20829.5
+630.28192 12935.1
+630.37592 15814.0
+630.77460 10448.8
+634.27155 27641.7
+634.69513 7463.5
+634.76794 15994.8
+635.38275 1657628.1
+636.22675 10336.7
+636.38623 283978.0
+637.07806 13168.7
+651.66101 6286.3
+676.63812 16596.8
+679.00012 12060.0
+687.78204 7216.8
+697.33179 113658.9
+698.32996 24273.1
+731.09265 8550.2
+766.75427 7814.4
+795.59497 9495.6
+826.37335 104808.9
+827.37885 31684.9
+836.38190 20314.8
+897.41211 124506.9
+898.41541 45342.3
+935.18976 7770.8
+967.42212 17943.8
+1028.45154 175572.1
+1029.45142 64195.9
+1057.25049 8424.3
+1122.34570 7539.7
+1198.02234 34193.0
+1274.50085 7866.0
+1399.96021 6944.4
+1489.16357 8856.7
+1548.29736 8521.9
+1606.62842 9544.5
+1879.09302 28572.3
+1879.52112 246916.4
+1879.93933 23882.6
+1881.14526 8440.2
+1906.97437 84786.3
+1918.83936 10653.9
+1930.53345 8441.7
+1954.44849 8556.3
+S	1925	1925	1879.96340793
+Z	3	5636.615
+Z	2	3758.079
+510.89685 595.4
+514.50684 803.0
+532.10565 729.2
+532.50366 1791.9
+549.17743 1147.8
+660.66522 543.6
+676.62750 1158.0
+731.15649 681.2
+736.53046 780.6
+795.58838 1193.0
+839.11267 635.4
+1057.22815 801.9
+1061.46643 667.0
+1198.11926 3183.5
+1321.24194 654.3
+1397.33044 646.4
+1640.79688 655.6
+1676.98828 657.2
+1872.41785 559.8
+1878.91125 1377.7
+1879.50354 19933.8
+1880.10278 845.3
+1881.13757 823.6
+1907.05530 7761.5
+S	1926	1926	1907.21799127
+Z	3	5718.379
+Z	2	3812.588
+532.47388 1812.9
+536.48529 672.4
+549.18622 640.3
+567.27625 675.0
+625.15076 593.6
+676.65509 776.1
+793.17615 616.9
+1057.26770 803.4
+1160.58508 576.4
+1198.06335 3045.8
+1255.41418 660.8
+1525.48145 736.3
+1717.76953 742.9
+1787.88000 658.9
+1870.35266 656.6
+1878.15027 635.1
+1878.32300 581.3
+1878.47009 632.0
+1878.93872 1044.1
+1879.14404 1609.4
+1879.57568 19447.3
+1879.83105 1844.7
+1880.00293 1894.9
+1880.40381 718.0
+1880.75208 764.9
+1907.07971 7446.6
+1907.42578 681.8
+1930.65845 759.9
+S	1927	1927	1198.4538246
+Z	3	3592.086
+Z	2	2395.06
+315.52551 623.3
+427.52985 695.0
+433.59595 653.4
+446.98856 627.0
+471.57339 611.2
+483.05801 642.4
+500.70944 594.4
+532.43488 530.6
+532.47137 1799.7
+532.50366 635.6
+584.64709 602.3
+611.22186 616.9
+630.38354 871.2
+676.62323 773.6
+720.02649 616.0
+720.06323 530.0
+748.42480 662.9
+1049.39368 621.2
+1057.23035 715.4
+1187.72559 728.7
+1198.04907 3349.3
+1198.17664 721.3
+1246.64294 776.7
+1274.97742 705.2
+1291.82141 659.6
+1784.49390 756.3
+1878.62915 989.9
+1879.48450 19872.5
+1879.77966 1140.7
+1879.97705 895.6
+1907.01184 7405.3
+1907.29919 1020.6
+1930.53442 1203.1
+S	1929	1929	1879.88340793
+Z	2	3757.919
+Z	3	5636.375
+532.47540 1968.9
+549.15759 933.7
+582.81219 545.6
+589.56842 595.2
+589.59265 579.8
+596.49268 579.8
+676.64740 1013.7
+795.59210 875.5
+858.05280 772.4
+1057.24646 919.1
+1071.90894 632.0
+1120.01160 603.3
+1173.98938 588.2
+1187.84668 642.4
+1193.02087 569.7
+1198.06177 2918.5
+1242.15259 601.9
+1483.08240 597.0
+1501.09924 681.8
+1525.42908 822.2
+1620.65564 644.1
+1870.23010 1091.4
+1878.01343 1409.3
+1878.75854 1561.4
+1879.11694 1109.2
+1879.55688 19639.5
+1880.00439 1491.3
+1880.38733 1344.2
+1881.12390 874.2
+1906.88452 1841.8
+1907.12732 7149.5
+S	1930	1930	1907.44240793
+Z	2	3813.037
+Z	3	5719.052
+532.46991 1761.1
+551.04382 662.6
+579.80829 637.6
+671.71832 627.1
+676.60101 923.9
+726.39404 721.1
+795.58374 661.9
+996.25073 618.3
+1019.69629 1008.2
+1039.79700 654.0
+1062.75195 762.3
+1122.38318 658.2
+1148.32288 619.7
+1180.91968 589.6
+1198.04712 3331.7
+1620.07385 705.1
+1662.14075 695.1
+1878.08899 848.6
+1878.48376 730.1
+1879.44751 19450.8
+1907.08948 7499.8
+S	1931	1931	625.9828246
+Z	2	1249.95
+165.77129 868.7
+169.50211 626.9
+171.11319 1756.4
+175.72433 531.6
+181.42996 640.7
+188.25230 815.5
+188.26651 1029.9
+188.27690 954.2
+188.28374 823.1
+188.29173 934.9
+188.29742 895.4
+188.34268 557.8
+196.57123 544.0
+199.18555 867.3
+199.21680 783.7
+199.25070 849.6
+199.28297 2989.5
+199.33899 873.8
+199.38312 1039.7
+203.58513 606.0
+211.18112 7791.3
+212.18530 1124.5
+223.19685 573.5
+232.39142 570.7
+233.16568 3959.7
+233.58655 784.6
+234.16972 900.2
+239.17609 3469.3
+240.17978 838.6
+241.06168 821.2
+245.16533 1269.8
+253.80466 609.8
+261.16098 1485.4
+262.16452 631.6
+273.16162 1284.1
+273.66370 598.9
+279.08728 623.4
+280.19937 737.2
+282.38354 543.2
+284.19772 7657.6
+285.20160 1468.6
+288.17337 935.4
+298.15857 763.7
+301.22516 710.3
+302.40256 556.4
+315.18042 1060.0
+315.92380 635.2
+316.16934 607.4
+316.18356 659.4
+333.19324 17427.3
+334.19684 4636.0
+350.28436 859.0
+365.14725 831.8
+369.19608 751.8
+375.20361 1946.6
+381.21429 666.2
+381.37384 876.7
+386.24533 3466.4
+387.20380 2792.3
+388.20743 921.5
+398.24173 635.1
+403.27136 6422.2
+404.27588 1785.2
+414.21277 1134.2
+415.20065 2094.9
+422.16928 977.3
+424.19943 1552.7
+431.26660 9544.4
+432.15283 1582.9
+432.22534 957.8
+432.26929 3934.8
+434.24200 4065.6
+435.24405 1605.1
+442.20984 1991.6
+442.77780 549.5
+443.26782 830.3
+444.22574 2863.6
+449.17780 848.1
+450.16098 917.8
+465.71896 673.1
+468.19028 728.6
+472.22202 1182.7
+473.72427 2235.3
+474.22516 1660.8
+482.23886 14767.9
+482.68155 683.9
+482.74057 11737.9
+483.24194 3821.5
+483.74008 967.3
+484.22058 3584.9
+485.22382 826.0
+489.24640 2563.4
+490.25052 802.2
+493.22131 1274.8
+500.28860 4265.8
+501.17282 653.4
+501.24899 1481.9
+501.29169 1805.4
+504.19376 865.7
+507.75595 1071.6
+508.27713 654.9
+511.23343 1513.2
+512.21436 3467.4
+513.21173 1074.1
+513.28308 11293.5
+514.28674 4076.3
+516.26917 809.8
+517.31458 3018.4
+518.32111 850.6
+521.21527 3701.8
+521.26221 3551.0
+521.76025 2227.0
+522.25543 1776.6
+524.21552 1342.9
+527.30188 1230.3
+528.28223 11056.1
+529.24011 3108.4
+529.28479 3683.6
+529.77509 7495.8
+530.26727 21062.2
+530.76910 17737.4
+531.29376 93401.6
+531.34753 715.9
+531.77002 1578.0
+532.29688 36621.1
+532.50854 1623.9
+533.29944 8085.4
+534.20111 860.5
+534.30200 1113.5
+535.25000 2632.0
+536.27185 1174.8
+536.77026 1088.4
+538.24066 1798.0
+538.47833 605.9
+538.78088 170862.0
+539.22668 1910.8
+539.28217 134747.1
+539.43286 768.0
+539.78345 55538.1
+540.28455 14457.3
+540.78833 2587.0
+541.23846 1834.1
+544.32703 961.9
+545.30878 13275.0
+546.26776 3010.4
+546.31293 6497.6
+547.26849 942.3
+547.31488 1058.0
+551.22522 1532.1
+552.27777 1293.5
+556.25433 1337.6
+568.24664 1102.4
+569.23633 5041.7
+569.30811 1147.3
+570.23993 2112.9
+570.30420 13024.3
+571.30792 3920.6
+575.52600 664.5
+579.21942 2733.6
+584.29828 1067.7
+586.26257 1918.1
+588.26086 1000.4
+588.31494 155504.8
+589.05823 718.2
+589.31812 53151.5
+589.82574 999.8
+590.23706 1402.6
+590.32104 13327.2
+591.32562 2086.8
+592.80988 3496.4
+593.31293 3025.0
+593.81189 1631.1
+597.30414 1039.2
+598.30798 988.5
+610.65894 767.2
+623.83356 41747.4
+624.33527 46122.2
+624.83649 30127.6
+625.33728 11646.8
+625.83972 2770.2
+626.30884 982.0
+630.44385 727.4
+631.35236 745.9
+635.25916 2921.8
+636.23926 3676.4
+637.29926 683.2
+641.33984 4252.6
+642.32550 41325.4
+643.32910 17539.4
+644.33295 4815.4
+645.31079 776.5
+650.29144 891.9
+652.28455 1006.3
+653.26904 3191.2
+654.27472 1029.6
+654.32648 3381.7
+655.32758 1284.7
+658.32251 699.0
+659.35254 29968.9
+660.35565 13506.3
+661.35895 3307.2
+664.31067 1160.5
+665.08386 878.4
+667.32135 6925.4
+668.33710 1072.7
+670.29608 1873.0
+671.35266 3945.1
+671.43561 681.4
+672.35968 1698.5
+676.64758 866.5
+681.33820 7194.0
+682.32007 22221.4
+683.32306 7777.4
+684.35651 3150.4
+685.09253 898.4
+685.33093 23005.2
+686.33380 9287.4
+687.34131 1934.1
+688.37787 1582.8
+689.37842 1010.8
+692.30615 1173.5
+698.36517 6803.6
+699.34674 54285.2
+700.35077 22999.9
+701.35590 5346.2
+702.35828 171664.0
+703.36084 73340.9
+704.36420 17562.5
+705.36621 4116.6
+706.37439 714.0
+709.32654 1567.1
+710.31390 751.2
+712.35693 722.5
+713.60760 1023.4
+713.85925 3050.5
+714.10645 2453.9
+714.36371 2037.2
+716.37433 33295.1
+717.37720 15691.3
+718.11096 890.4
+718.37933 2985.5
+718.60919 1585.9
+718.86108 1443.8
+720.27606 1298.4
+721.36914 1195.6
+721.62518 1079.8
+726.35864 1118.5
+731.12323 1222.6
+733.35297 886.3
+734.35968 723.6
+735.35907 1980.4
+735.61749 2727.4
+735.86780 2526.6
+736.11615 2345.3
+737.30676 1608.6
+738.36652 820.4
+739.32611 711.4
+740.11975 1977.8
+740.29956 765.8
+745.41296 616.1
+751.37683 1881.8
+752.68866 825.6
+755.32074 3261.4
+756.31903 1223.2
+764.34265 2909.3
+765.29901 4848.6
+766.31067 1659.6
+767.05420 1873.9
+767.34412 2636.9
+768.34229 1466.1
+772.33533 1196.7
+773.06189 788.8
+780.37878 1595.3
+781.36371 7897.6
+782.32007 3086.7
+783.30817 8177.4
+784.31671 4186.3
+785.31720 1209.8
+795.44281 729.4
+796.40094 4244.1
+797.39899 1246.0
+798.39117 13047.6
+799.37512 70363.9
+800.37927 32507.3
+801.38129 7456.9
+802.38226 1190.1
+813.94189 1941.6
+814.37109 1475.6
+815.17975 1763.6
+815.99402 1030.7
+816.13098 828.4
+816.19501 1424.3
+816.22522 797.2
+816.28723 1230.9
+816.40161 470949.8
+817.22937 970.6
+817.40387 222703.8
+817.62030 2918.7
+818.40717 61243.0
+818.62854 1001.8
+818.87299 1857.4
+819.41034 12574.5
+820.11353 626.7
+820.42126 2092.9
+821.41589 916.3
+827.37256 3111.0
+828.37061 1336.7
+834.40723 759.7
+835.36853 1026.0
+840.43860 770.7
+852.42639 5469.4
+853.42926 3838.8
+855.44617 953.3
+856.40515 958.0
+861.42444 905.6
+862.41071 7378.0
+863.41547 3836.2
+867.40601 1064.3
+868.40466 924.7
+869.45105 1522.2
+870.44830 851.8
+878.38159 1554.2
+879.43799 11916.4
+880.42206 22177.2
+881.42645 10684.8
+882.42706 2888.2
+883.42932 750.3
+887.48743 654.4
+888.45667 833.7
+895.40881 3726.1
+896.44745 7272.6
+897.44952 21224.4
+898.45245 11905.6
+899.45209 3390.5
+901.41602 883.0
+911.40723 2413.6
+913.42212 4746.5
+914.47552 22489.5
+915.47833 14776.2
+916.48230 4728.0
+917.47302 1178.2
+919.43616 2260.4
+920.44501 1154.7
+927.45691 815.1
+928.43420 8520.9
+929.42279 7786.9
+930.43518 2474.9
+931.44177 1360.9
+945.46106 26869.5
+945.94165 810.0
+946.44421 102452.0
+947.44733 53029.5
+948.44983 17205.9
+949.45270 4864.4
+950.57965 1671.4
+952.45569 2694.3
+953.41174 1847.8
+956.43494 991.5
+957.17487 578.8
+958.77148 809.6
+960.16046 752.9
+960.31445 3866.9
+960.45227 1520.9
+960.65588 1086.1
+960.73114 639.2
+960.86389 3129.4
+961.31946 1822.8
+961.91565 3101.1
+962.42377 897.7
+962.90430 2981.2
+962.96509 1546.4
+963.03192 1371.8
+963.19873 1116.3
+963.24066 1339.8
+963.28717 3280.5
+963.36469 6072.3
+963.46954 902068.2
+963.64563 1910.5
+963.69269 2234.1
+963.77264 1062.9
+963.84137 766.3
+963.98901 1856.5
+964.47162 500184.3
+965.03888 5125.5
+965.47485 161791.5
+965.91364 803.4
+966.01855 1722.5
+966.09741 2172.6
+966.18695 1323.2
+966.29834 1230.1
+966.47803 38304.2
+966.63574 4215.1
+967.10828 1647.9
+967.47894 6836.9
+967.65540 2255.9
+968.22736 878.6
+968.53156 975.9
+968.67865 1296.4
+972.19861 749.2
+973.45245 801.6
+974.44043 9214.9
+975.44183 5780.5
+976.46118 1229.3
+976.61218 1440.5
+977.65479 1037.9
+986.44379 1466.4
+1003.45966 1523.9
+1004.45264 984.3
+1019.69287 802.8
+1020.49963 2162.7
+1021.49933 1987.9
+1037.52271 2265.7
+1038.50452 4995.7
+1039.50769 3941.1
+1040.51160 1238.6
+1041.51672 3304.1
+1042.51147 2451.9
+1047.51257 1691.7
+1048.48901 9245.0
+1049.49121 5859.7
+1050.49927 1953.7
+1054.49646 872.3
+1055.53796 2875.0
+1056.53308 2575.9
+1057.24988 845.1
+1058.54126 7015.9
+1059.52869 29494.4
+1060.53137 17468.5
+1061.53394 5394.5
+1062.53101 1450.4
+1064.53943 1315.1
+1065.51770 34100.6
+1066.51160 31786.0
+1067.36523 595.0
+1067.50891 15112.8
+1068.50928 5307.8
+1069.51807 1431.6
+1071.53345 1400.0
+1072.55164 1481.2
+1072.82739 795.4
+1073.55322 1106.6
+1074.71301 1029.5
+1076.55359 245499.3
+1076.71252 1317.4
+1077.55676 148432.9
+1078.41541 979.9
+1078.55933 46976.1
+1079.38538 655.6
+1079.56152 11382.2
+1080.29370 1267.5
+1080.56628 2018.1
+1081.51099 1387.2
+1082.54480 22251.9
+1083.52917 66340.2
+1084.53052 44236.4
+1085.53357 16895.2
+1086.53308 5416.3
+1087.52649 4223.8
+1088.53101 2476.0
+1089.52466 884.0
+1099.52039 3582.3
+1100.55432 92495.0
+1101.55664 73183.1
+1102.55920 29930.4
+1103.56409 8463.6
+1104.56763 1459.1
+1107.04272 649.9
+1116.54175 2129.7
+1117.55090 1363.9
+1198.13452 3224.8
+1315.30737 621.6
+1460.77808 632.4
+1515.56348 731.8
+1525.49353 922.2
+1878.18018 623.1
+1878.82629 1221.4
+1879.55908 19003.5
+1879.83887 2765.6
+1880.06885 1658.0
+1881.04150 867.4
+1907.07068 7211.7
+1918.71448 923.3
+S	1933	1933	1879.95540793
+Z	2	3758.063
+Z	3	5636.591
+532.49286 1991.7
+549.15656 780.2
+580.10559 684.1
+676.65253 1276.4
+694.17877 588.6
+795.58307 1193.5
+1079.31958 722.4
+1198.10144 3375.5
+1525.43396 821.5
+1762.99255 659.0
+1777.04126 857.5
+1878.38184 1137.3
+1878.91199 1519.9
+1879.15039 2100.9
+1879.56250 18998.5
+1879.97278 2302.8
+1880.21643 1585.4
+1880.47107 972.6
+1880.78613 1559.7
+1882.65906 878.2
+1907.05566 7598.7
+1930.63391 1230.6
+S	1934	1934	541.8093121
+Z	4	2163.20595
+137.23126 519.0
+138.56409 556.2
+140.87506 616.6
+146.93472 566.3
+149.89691 633.2
+153.67870 665.5
+165.76608 591.6
+185.59644 505.6
+187.14359 1362.8
+188.19444 609.7
+188.20355 568.7
+188.23006 585.6
+188.26875 1838.7
+188.28168 2253.8
+188.30341 1791.2
+188.32719 1196.7
+198.69775 596.8
+198.89629 785.6
+199.18297 884.7
+199.25705 871.5
+199.28078 2087.9
+199.28903 1578.9
+199.37212 690.3
+199.37903 635.2
+206.62624 582.9
+214.53506 600.4
+215.13911 775.6
+216.68880 595.3
+221.12833 3019.6
+233.16463 6177.7
+234.16806 721.5
+237.32843 561.3
+241.19173 772.8
+251.20692 680.7
+257.16382 609.3
+258.85803 630.7
+261.15933 1479.5
+262.63956 519.2
+314.20700 971.7
+342.30530 593.4
+350.27725 836.6
+354.35510 666.1
+362.20728 1654.1
+390.69812 1904.6
+408.24557 782.6
+411.26236 687.0
+412.21774 2129.4
+457.28015 2353.6
+466.74591 1623.6
+466.88184 639.0
+472.01401 2648.5
+472.26498 1829.7
+475.29095 721.1
+498.60599 562.6
+515.77856 2440.8
+516.03076 2547.2
+516.28369 868.8
+524.61664 4320.4
+524.94781 2250.8
+525.28302 912.7
+530.62012 4854.6
+530.95575 1144.4
+532.56537 2276.1
+556.34735 2144.2
+557.63647 648.6
+557.97418 1052.9
+563.64276 12061.1
+563.97693 9535.4
+564.31085 3240.7
+565.11456 693.1
+571.27722 1246.0
+571.77570 1579.5
+572.27704 826.7
+573.66211 592.5
+574.35907 2913.4
+575.36237 811.6
+589.31598 745.7
+589.82159 14160.1
+590.32263 8309.6
+590.82629 1143.2
+598.65027 1699.5
+623.66418 833.1
+627.81812 3111.1
+628.31812 2526.5
+628.82318 1199.5
+630.46667 694.4
+630.62701 571.1
+635.02039 8533.1
+635.35443 6496.9
+635.68976 1518.3
+636.99518 2510.2
+637.32788 5341.8
+637.66199 1674.0
+639.33679 897.1
+646.36328 1779.6
+646.86554 909.0
+666.00684 3016.3
+666.34039 2839.0
+666.67572 2129.9
+667.00616 1227.1
+667.30261 4038.2
+668.30524 1071.3
+669.33356 1094.2
+678.36237 761.3
+684.35999 10773.3
+684.86151 10088.9
+685.36249 4606.0
+685.86237 1407.6
+702.35217 845.8
+703.38727 4446.7
+703.88525 3464.9
+706.32751 713.7
+708.33051 636.8
+710.48602 607.4
+737.88953 867.2
+738.39209 672.2
+746.89905 3308.7
+747.40332 3652.1
+751.89429 2215.9
+752.39191 2746.4
+765.01385 746.8
+772.96960 547.0
+795.42664 22780.6
+795.57825 719.3
+795.92841 18981.7
+796.43018 5683.6
+796.93195 1039.4
+816.39703 3580.0
+817.39996 4370.5
+818.40271 1395.7
+819.40247 2721.9
+820.40350 2067.5
+844.95892 3411.6
+845.46350 2978.9
+845.95837 927.0
+854.48248 789.1
+875.72070 647.0
+964.47449 706.8
+969.96222 562.3
+976.90778 544.0
+1002.60040 664.7
+1011.98608 721.0
+1098.06299 573.0
+1122.54199 562.5
+1188.16553 720.7
+1198.26514 3417.1
+1207.72766 613.2
+1354.81677 692.5
+1525.54346 734.2
+1666.97290 781.2
+1673.43811 650.6
+1777.01990 706.2
+1853.54749 667.6
+1860.11304 796.4
+1878.98315 1971.6
+1879.30054 2710.8
+1879.56091 19483.7
+1880.15796 1726.7
+1890.80029 590.4
+1906.49634 668.4
+1907.04224 8190.0
+1930.75598 1142.0
+S	1935	1935	479.7078246
+Z	3	1435.848
+Z	2	957.568
+121.78953 917.8
+121.79407 1748.7
+152.03572 557.4
+157.61465 637.8
+164.17601 655.0
+175.72768 591.2
+176.10649 3796.6
+178.40044 620.9
+186.09094 719.1
+188.25722 673.8
+188.26527 920.1
+188.26991 1087.5
+188.27826 971.7
+188.28403 769.7
+188.29462 1576.0
+188.30212 844.0
+188.30876 511.9
+188.31958 689.2
+188.33250 544.5
+197.71080 615.4
+198.89677 754.8
+199.18166 931.6
+199.23299 966.2
+199.24490 1011.1
+199.25682 1943.0
+199.26535 1324.0
+199.27937 1870.8
+199.30261 902.2
+199.33681 761.6
+199.36084 776.2
+201.12231 886.2
+209.65285 506.1
+214.53159 707.9
+221.12808 4671.2
+231.11234 27027.4
+231.16980 32599.8
+232.11540 1773.9
+232.17305 1715.0
+235.10657 1899.1
+235.58057 554.3
+248.94308 592.7
+249.12273 3650.0
+271.71838 573.3
+280.10120 660.4
+280.20276 746.7
+285.15900 14380.9
+286.16409 798.2
+286.43906 508.8
+287.42508 780.1
+297.18066 580.9
+298.87579 526.4
+302.18561 1523.5
+303.17209 775.7
+308.92130 749.0
+330.18039 90970.9
+331.18369 6983.6
+332.21619 979.6
+332.63599 567.2
+334.39838 587.9
+342.20081 650.4
+348.19067 2305.0
+392.62698 608.4
+404.86942 583.0
+411.45538 545.3
+418.43845 540.9
+433.28009 8938.9
+434.28348 1049.3
+435.57294 1749.8
+441.57727 13232.1
+441.91168 7089.7
+442.24554 2810.2
+443.26373 2437.1
+447.05795 566.5
+447.57858 838.8
+447.91718 609.6
+460.98660 581.4
+461.27463 26708.0
+462.27902 3538.7
+495.30682 711.4
+503.83780 901.0
+505.89005 706.5
+517.73639 657.9
+527.34930 899.2
+532.51935 1474.2
+533.30487 635.2
+534.48627 551.4
+558.75330 1046.3
+570.82654 1011.5
+598.39075 5839.4
+603.30621 835.1
+622.17511 582.6
+629.80286 939.9
+644.93079 673.5
+676.64038 1060.6
+697.45972 5935.4
+716.39551 1104.4
+741.20673 601.0
+746.82782 550.1
+782.77173 674.9
+795.58301 826.3
+803.94818 663.9
+841.10236 607.1
+870.80377 734.9
+942.98059 597.9
+947.06927 619.5
+959.16321 539.1
+1004.75409 611.7
+1019.69177 727.8
+1028.94873 626.1
+1057.23254 827.8
+1188.20544 647.6
+1198.15662 3292.5
+1424.07483 619.6
+1525.52161 808.4
+1670.46216 608.6
+1746.73718 616.1
+1777.02173 647.7
+1803.75134 792.5
+1877.65320 681.0
+1878.49280 537.2
+1879.14294 1084.9
+1879.51990 20005.4
+1879.91040 985.4
+1880.22583 766.5
+1880.37439 694.4
+1881.75696 761.8
+1888.69104 664.6
+1907.10400 7297.2
+1907.55237 687.7
+1925.87451 698.7
+S	1937	1937	815.3698246
+Z	2	1628.892
+Z	3	2442.834
+225.36417 576.9
+230.71956 662.7
+239.27069 587.3
+243.78442 603.5
+254.38287 554.0
+264.44028 547.6
+279.37286 652.3
+290.09708 853.3
+311.14645 589.0
+313.25168 579.2
+324.67938 580.7
+333.19113 1035.4
+338.21835 1672.5
+339.20108 1684.4
+356.22891 1881.7
+357.18985 605.4
+382.55173 586.1
+383.12164 779.9
+395.19431 746.9
+403.18320 2160.5
+421.19098 933.6
+423.10837 637.6
+425.19843 711.4
+429.27713 632.6
+431.21414 2514.2
+432.15067 1353.9
+450.16440 1308.5
+453.27518 803.8
+480.48563 639.7
+492.43906 765.8
+496.37997 701.4
+500.23483 1117.8
+504.22873 910.8
+508.26938 1158.5
+518.24567 1197.5
+522.23944 2742.4
+525.30353 801.1
+529.71344 791.8
+531.29004 2717.6
+532.56342 2150.4
+537.31879 669.0
+551.66364 780.5
+553.29828 897.9
+586.84149 1170.0
+587.26685 1475.4
+587.33453 808.1
+588.31342 4131.0
+590.23450 1323.2
+595.84283 2210.6
+596.34149 1300.6
+605.27661 2883.7
+606.27661 918.0
+608.24713 870.3
+618.22943 2437.1
+623.28650 6880.9
+623.79199 1123.9
+624.32281 1296.4
+625.26978 1212.3
+633.93164 707.6
+635.25568 3557.8
+636.23914 2437.7
+643.36981 1198.3
+643.87634 1306.1
+647.39148 1328.8
+647.89813 827.6
+651.36969 5366.1
+652.27832 1058.5
+652.38403 1778.8
+652.88464 1277.1
+653.26825 1036.9
+661.88544 1064.3
+666.37927 1602.6
+676.62598 1102.9
+679.37689 2319.2
+680.38501 1263.6
+685.32489 889.4
+688.36237 1066.3
+696.87006 1026.9
+701.37799 1630.9
+701.87848 1423.5
+702.35455 1814.5
+709.89569 1423.4
+710.30463 1010.1
+710.39063 1087.4
+715.23676 896.1
+718.35980 763.8
+718.90192 12290.8
+719.40295 7443.1
+719.90265 1455.0
+734.41406 906.3
+736.37012 5612.1
+737.37909 1221.2
+743.71051 780.4
+744.05243 1075.1
+744.41425 1165.8
+744.90009 1717.4
+752.41705 1642.6
+753.41345 2552.8
+753.91229 1608.6
+762.41766 6660.2
+762.92084 3955.8
+763.37433 1871.7
+764.33167 1199.2
+766.18732 712.7
+771.41791 815.0
+772.37872 1187.6
+779.46521 5024.0
+780.42706 4865.3
+781.36267 4859.1
+782.34601 4612.7
+787.92426 1098.0
+788.41675 926.7
+795.59363 1106.6
+796.40564 1132.7
+796.92773 8057.3
+797.43213 6216.5
+797.93738 970.0
+798.38770 2594.4
+799.37164 22803.8
+849.45013 1517.3
+853.45959 1118.9
+854.47437 750.0
+875.49133 1284.6
+876.48035 957.1
+891.41882 728.1
+893.50812 9720.0
+894.51007 4187.2
+930.53931 964.2
+941.07507 697.1
+948.53314 2807.8
+948.96844 6786.0
+949.47650 5769.5
+949.97644 1908.8
+950.51190 1099.2
+966.55023 2720.9
+967.55310 1568.4
+988.57922 2141.2
+989.56482 3388.0
+990.56458 955.0
+995.50677 743.5
+1006.59064 31331.7
+1007.59406 14784.5
+1008.59338 1807.8
+1024.81018 628.4
+1079.64453 970.7
+1081.57324 4138.1
+1082.57837 2612.7
+1089.62463 1033.9
+1090.63879 995.8
+1107.63782 10562.2
+1108.63989 5817.4
+1125.44824 1402.1
+1126.47083 759.5
+1135.58484 579.9
+1150.59790 1049.9
+1168.60413 1545.6
+1190.67236 1086.9
+1191.67090 927.1
+1198.25427 3313.3
+1208.68420 8282.9
+1209.68494 5027.8
+1210.68115 905.5
+1237.62183 1068.3
+1238.63074 984.5
+1246.65002 998.2
+1255.64087 4242.9
+1256.64233 2131.9
+1273.64893 29673.3
+1274.65222 17319.6
+1275.65747 2941.9
+1303.75439 790.8
+1304.75391 1261.8
+1321.76892 8483.9
+1322.77014 4621.4
+1395.73181 823.2
+1400.79065 627.6
+1401.74597 3080.0
+1402.76440 2237.7
+1436.79785 1210.4
+1437.80225 1113.6
+1726.62952 676.6
+1776.99658 1141.9
+1793.66797 642.7
+1840.27563 621.3
+1878.21216 972.7
+1878.83789 988.9
+1879.48218 19433.2
+1880.39246 1258.1
+1907.04688 6810.6
+1907.39783 955.3
+1918.79785 751.9
+1930.60510 1362.8
+S	1938	1938	815.871407933
+Z	2	1629.895
+Z	3	2444.339
+217.82124 2553.2
+231.39899 2847.3
+240.20265 2849.9
+246.17110 2761.9
+248.69084 2734.2
+256.78177 3182.3
+271.72659 3555.6
+278.20364 2961.1
+281.94516 2653.7
+322.92783 2904.2
+338.21466 3060.4
+342.28186 3070.3
+358.46741 3135.8
+360.40958 3101.0
+364.88541 2799.3
+381.56915 2848.1
+382.58344 3523.9
+390.82077 2698.2
+426.38058 2949.4
+427.55496 3470.1
+444.06876 3431.0
+488.63904 3067.8
+490.33432 3302.4
+491.34082 2961.6
+521.96558 3490.9
+532.51929 3028.5
+532.55066 6640.7
+532.58557 5521.3
+574.90411 2611.1
+588.30634 4495.1
+623.28809 7925.2
+651.37360 3904.7
+652.28857 3028.7
+660.35687 3082.4
+676.64825 4443.0
+679.38190 3538.3
+691.71326 2729.6
+718.90454 8938.2
+719.40991 5136.6
+731.15594 3340.7
+753.42188 3918.1
+762.42004 4862.3
+780.42108 3219.6
+781.36383 3904.1
+795.59552 4557.0
+796.92444 5633.4
+799.37262 29734.7
+800.37439 3937.3
+893.50763 7299.8
+936.08191 2679.7
+949.47943 3105.3
+1006.59210 22909.3
+1007.59277 10552.9
+1008.59351 3134.1
+1107.64807 8971.9
+1108.64746 4268.4
+1190.01855 2813.5
+1198.23364 13372.3
+1208.67212 6041.8
+1220.61133 2740.1
+1237.51746 2823.2
+1273.64795 23512.0
+1274.65417 12884.1
+1275.65198 6802.2
+1321.76355 5903.4
+1679.93994 3182.0
+1877.36475 3299.2
+1878.94312 4310.5
+1879.31738 13657.0
+1879.56128 92630.5
+1880.18420 3811.1
+1881.28198 4064.8
+1907.08655 35815.9
+1918.83130 4138.5
+S	1939	1939	695.9248246
+Z	2	1390.002
+Z	3	2084.499
+185.60400 515.6
+185.77238 544.7
+188.25951 1097.0
+188.27463 1034.1
+188.28221 1246.1
+188.29819 1242.7
+188.31615 854.2
+198.49913 658.0
+198.74014 577.3
+198.90105 733.8
+198.95604 691.8
+199.00104 554.7
+199.17911 1101.3
+199.18993 689.8
+199.24969 905.3
+199.27754 2690.8
+199.30003 727.2
+199.32245 615.3
+199.37498 912.6
+218.75848 733.5
+238.70966 532.3
+244.97015 603.9
+245.74380 568.7
+263.25854 605.0
+272.17206 869.0
+284.80420 713.0
+292.53928 745.6
+299.06195 509.4
+305.09216 728.3
+308.88297 774.9
+327.67822 637.1
+330.37476 673.0
+361.07504 632.0
+373.21506 660.4
+381.34106 625.0
+463.96381 598.0
+470.97736 659.9
+477.96344 575.9
+491.03928 684.6
+501.23386 964.3
+528.90247 556.3
+531.24054 707.4
+532.54224 1870.5
+540.16162 604.5
+541.30786 17770.5
+542.31122 9808.8
+543.31158 1540.7
+552.82336 577.3
+556.72107 582.9
+565.86200 584.7
+580.29718 740.2
+612.34521 4456.6
+613.34631 3659.7
+635.99701 7918.4
+636.33014 42512.2
+636.66455 27282.3
+636.99860 8748.7
+637.33551 2120.1
+657.56860 692.2
+657.85754 1686.4
+658.36285 2011.7
+663.37909 766.0
+671.82117 640.4
+673.54700 736.2
+726.43073 1047.9
+756.42926 1704.1
+757.43018 1781.5
+773.45453 1292.4
+774.45416 1960.6
+792.43665 689.2
+795.60638 784.7
+802.37463 817.6
+826.02594 662.1
+827.46509 4331.6
+828.46643 5370.1
+829.46875 1912.9
+839.46820 1236.5
+840.47821 1782.7
+844.48950 6320.4
+845.49469 6558.8
+846.49756 1767.3
+850.73590 1241.5
+851.40198 853.5
+855.92999 2244.2
+856.43323 971.8
+895.43707 946.6
+953.99280 1923.3
+954.49200 666.4
+1097.60474 1276.7
+1098.13599 669.7
+1114.62244 1639.2
+1147.21130 717.6
+1198.21301 3105.4
+1215.59546 695.0
+1216.69006 739.3
+1459.67712 735.6
+1568.05164 720.2
+1579.32397 644.3
+1632.84863 638.7
+1668.08191 662.6
+1776.92188 742.1
+1802.03784 589.0
+1860.06812 716.9
+1878.68933 733.8
+1879.53052 19437.6
+1907.11035 6690.3
+1930.48816 884.1
+S	1941	1941	1879.94699127
+Z	2	3758.046
+Z	3	5636.566
+532.50861 1865.9
+616.98059 570.1
+701.13202 693.8
+705.55420 813.8
+752.61578 625.5
+761.09509 619.8
+795.58942 1185.5
+1021.17303 783.4
+1198.13501 3101.0
+1231.25574 627.6
+1235.65588 593.4
+1288.84961 699.5
+1471.43970 630.9
+1876.02966 642.5
+1879.07922 1519.7
+1879.46606 19879.8
+1879.87866 1725.1
+1906.74597 621.1
+1907.04419 7453.9
+S	1942	1942	625.1588246
+Z	2	1248.47
+Z	3	1872.201
+165.76874 931.6
+171.11273 1358.2
+183.46590 638.6
+188.19391 605.4
+188.22057 693.4
+188.22659 566.7
+188.25490 637.3
+188.26866 615.0
+188.28586 712.6
+188.29956 829.5
+188.31302 694.0
+188.32236 870.1
+188.33958 645.5
+188.35382 596.8
+198.89636 1287.2
+199.17769 1129.5
+199.27559 2086.8
+199.30237 902.3
+199.30951 961.1
+200.90811 606.1
+211.18036 7140.9
+212.18480 1341.1
+214.44891 578.9
+222.39824 664.1
+233.16505 4279.2
+233.57811 641.3
+239.17577 3149.0
+245.16486 1242.2
+257.90564 652.8
+261.16068 1974.7
+265.08221 632.6
+271.70972 684.7
+284.19730 7354.3
+285.15628 912.4
+285.20087 1460.0
+288.17102 909.0
+288.99164 641.1
+307.89233 689.4
+315.18130 933.6
+318.18112 816.2
+333.19223 17781.7
+334.19672 3216.4
+337.15079 1305.1
+338.43427 584.1
+339.61798 551.2
+342.74655 622.3
+350.28134 710.5
+353.61145 707.5
+367.17471 685.9
+375.20361 1662.4
+381.21509 953.0
+381.36856 720.2
+382.74158 709.9
+386.24518 2657.4
+387.20355 2902.8
+387.25201 739.6
+388.20502 765.4
+403.26993 6590.2
+404.27451 1452.0
+409.20218 658.7
+415.19595 2137.7
+423.06589 560.1
+431.26492 10503.7
+432.15222 771.1
+432.22321 1542.9
+432.26846 2217.0
+434.24051 3465.4
+435.24304 829.4
+444.22491 1628.1
+448.37708 617.9
+473.72031 965.9
+474.22238 1072.3
+479.25821 780.3
+482.23764 17843.6
+482.73901 11969.4
+483.23984 3893.4
+483.74081 753.5
+484.21841 2800.8
+485.22202 796.7
+489.24603 3039.8
+490.24908 1318.2
+500.28616 3719.8
+501.24249 810.4
+501.28757 1166.8
+507.62964 5190.7
+507.75516 729.5
+507.96634 4188.1
+508.30066 1817.8
+512.21497 2182.1
+513.21808 822.1
+513.28192 9606.6
+514.28497 2693.9
+517.31281 3025.6
+521.21265 1577.8
+521.26190 2745.4
+521.75787 1974.1
+522.25305 1399.0
+524.66736 747.7
+527.29517 1382.2
+528.28088 9911.7
+529.23907 2248.9
+529.28387 3164.3
+529.77448 6493.1
+530.26605 23599.7
+530.76794 14843.7
+531.29230 92031.9
+531.76837 2056.9
+532.29535 31863.2
+532.58502 1981.2
+533.29761 6107.7
+535.24792 1725.4
+538.77942 196731.5
+539.28070 126597.2
+539.43103 1025.6
+539.78223 42954.1
+539.87817 864.2
+540.28387 11326.3
+540.78601 2735.3
+543.04657 722.2
+544.32281 1591.8
+545.30756 16664.7
+546.26501 2548.4
+546.31067 4517.7
+549.17145 742.7
+550.75720 751.3
+560.28088 692.9
+569.23254 2111.8
+570.30292 6285.2
+571.30591 2014.1
+571.56946 2838.5
+571.82178 792.5
+573.08978 620.8
+579.21710 994.9
+582.86200 581.3
+584.29065 849.0
+586.25800 954.9
+587.56677 720.6
+588.31335 129127.6
+589.31647 45135.4
+590.31970 9602.7
+591.32251 2229.1
+592.80853 4998.5
+593.30914 4213.8
+597.30353 3027.2
+597.79980 3615.5
+598.30286 5416.7
+598.80414 1402.6
+601.32172 2402.3
+601.82062 2205.3
+623.83307 2092.9
+624.33350 1654.5
+624.83557 885.5
+625.30481 746.7
+635.25269 965.7
+635.45605 717.2
+636.23724 1216.0
+641.34003 3042.7
+642.32379 31414.2
+643.32727 10761.9
+644.32782 2097.2
+646.33398 669.2
+653.26312 1773.0
+654.32153 2053.1
+655.29803 552.6
+659.35040 28052.4
+660.35339 10300.5
+661.35901 2197.6
+662.04865 716.1
+664.30072 765.6
+667.31946 2560.9
+671.35260 1825.3
+672.34631 886.4
+676.64355 1266.6
+680.36304 1094.8
+681.33368 4510.6
+682.31830 12703.0
+683.32056 6096.3
+685.32953 11847.2
+686.33362 4821.0
+687.33783 1108.2
+688.31018 912.6
+688.37744 1389.5
+698.36261 5677.5
+699.06116 708.6
+699.34503 41300.2
+700.34814 16552.7
+701.35608 3552.2
+702.35638 106923.9
+703.35907 41354.6
+704.36188 11300.4
+705.35828 1339.0
+706.32214 1725.1
+707.32355 1083.9
+716.37238 31681.5
+717.37537 12434.4
+717.72150 1869.2
+718.05743 1026.0
+718.38348 2436.8
+723.72760 9076.2
+724.06036 16086.0
+724.39417 8624.8
+724.73010 3304.9
+725.06812 1178.4
+727.33685 920.7
+737.30414 817.5
+743.14276 2685.3
+743.39288 6197.9
+743.64685 2877.6
+743.89447 3523.4
+750.31165 715.1
+755.42047 1061.9
+755.75122 976.7
+761.42017 7553.6
+761.75543 9786.5
+762.08972 6604.2
+762.42474 2887.0
+762.76550 1029.8
+764.34192 1027.5
+765.29474 1537.8
+767.33423 1198.5
+772.33582 707.2
+780.37811 756.7
+781.36340 3372.4
+782.35754 1398.1
+783.30505 4134.9
+783.38623 656.8
+783.42737 808.2
+784.32196 1260.5
+790.88977 2613.4
+791.39319 1736.0
+791.89478 1104.4
+795.42706 913.3
+796.40070 2673.7
+798.38812 6021.8
+799.11945 1473.2
+799.37268 36198.6
+799.78815 1092.4
+800.37616 15721.9
+801.37903 4008.3
+801.94208 874.6
+802.38721 693.5
+813.42365 1505.7
+813.93878 959.5
+814.36426 1119.3
+814.93225 1035.0
+816.29065 772.4
+816.39929 272993.0
+817.40155 133095.1
+817.61249 1624.3
+818.40491 34998.2
+818.87183 1329.0
+819.40790 9834.2
+819.87433 894.2
+820.40918 2783.2
+821.41748 736.6
+827.36450 2077.0
+852.42303 2842.8
+853.42737 1853.0
+856.43286 742.4
+861.42285 782.5
+862.40918 4362.3
+863.40979 2389.4
+866.97833 2633.2
+869.44635 1071.1
+878.86151 681.4
+879.43658 7390.9
+880.42072 12899.6
+881.42255 7295.7
+882.42090 2247.9
+895.41235 1676.4
+896.45221 5071.4
+897.44647 14597.8
+898.44830 7441.1
+899.45245 2189.9
+913.42120 2231.3
+914.47314 19450.0
+915.47565 9932.3
+916.47931 2169.3
+919.43951 884.3
+928.42761 4849.3
+929.42877 3056.9
+930.43628 1344.8
+936.46521 696.6
+945.45770 13050.5
+946.44147 52169.4
+947.44446 29254.3
+948.44727 8007.6
+949.44525 1707.7
+952.44519 1352.7
+953.41425 1356.6
+960.31433 2043.8
+960.44672 633.4
+960.85095 1372.9
+961.31079 1160.7
+961.91071 1976.5
+962.44501 1199.8
+962.90186 1191.4
+963.29449 749.4
+963.46722 499982.5
+963.87622 732.8
+963.99268 1180.8
+964.35760 1066.9
+964.46942 265617.9
+965.04022 2425.6
+965.47272 84466.5
+966.10193 1171.2
+966.47491 18752.7
+966.64056 2761.9
+967.47791 3476.3
+967.64551 1343.9
+969.47516 1067.4
+974.43799 4489.9
+975.43738 1906.0
+1020.49664 888.3
+1037.52136 1929.3
+1038.50720 2841.5
+1039.50989 2422.9
+1040.50171 781.1
+1041.50989 1543.1
+1042.51929 995.5
+1048.48779 6105.6
+1049.49133 3030.4
+1050.49255 973.9
+1054.51025 690.2
+1055.52478 1317.4
+1056.53113 1125.3
+1057.25806 787.8
+1058.54480 2738.2
+1059.52551 14835.5
+1060.52698 8315.1
+1061.53259 3203.6
+1065.51465 21314.7
+1066.50781 19197.6
+1067.50720 9737.9
+1068.51086 2613.3
+1069.50842 885.3
+1072.55908 969.3
+1076.55103 115189.9
+1077.55371 70306.2
+1078.55664 25312.6
+1079.55835 6782.8
+1080.28552 776.0
+1080.54492 739.1
+1081.28772 816.3
+1082.54187 13621.6
+1083.52637 42508.9
+1084.52832 24584.4
+1085.52917 7960.3
+1086.53516 2862.8
+1087.51990 2014.6
+1099.51782 1827.5
+1100.55115 80890.7
+1101.55420 53552.7
+1102.55664 19503.5
+1103.56116 4691.2
+1104.56812 813.3
+1116.54321 1055.3
+1118.53943 858.4
+1198.26440 3040.2
+1861.32959 738.0
+1878.13025 661.2
+1878.29431 846.7
+1878.90308 726.9
+1879.24536 1480.6
+1879.55237 20217.3
+1882.02246 724.3
+1907.06531 6978.2
+1930.67957 1037.2
+S	1943	1943	1907.53699127
+Z	2	3813.226
+Z	3	5719.336
+532.51532 1825.1
+549.19763 692.9
+572.22150 541.7
+621.87067 667.9
+676.99438 581.5
+795.57855 1157.2
+827.00800 599.9
+858.12225 663.2
+885.31995 597.6
+948.44330 585.7
+1091.09521 676.7
+1140.73877 590.7
+1198.15625 3183.7
+1198.94153 617.0
+1494.77905 701.2
+1525.54590 837.5
+1598.93140 690.6
+1724.13513 664.6
+1738.10291 683.5
+1776.86157 878.7
+1877.01306 688.8
+1878.91479 1540.9
+1879.29065 5140.1
+1879.57861 18367.2
+1880.20691 1143.5
+1883.17712 652.0
+1907.04968 7649.2
+1930.79675 1607.7
+S	1945	1945	1907.35399127
+Z	2	3812.86
+Z	3	5718.787
+532.55450 1619.7
+534.79706 565.2
+549.17743 614.7
+612.04242 601.2
+621.13422 571.4
+644.23828 691.9
+656.12915 569.0
+676.62292 708.2
+689.95459 614.2
+795.58722 1099.9
+1051.86572 600.2
+1057.20435 664.0
+1103.18640 629.0
+1198.00159 802.7
+1198.24255 2903.9
+1198.45178 774.7
+1201.69971 827.5
+1238.18079 683.7
+1525.57458 685.6
+1546.18860 697.3
+1877.66797 873.8
+1878.73767 880.8
+1879.48364 19212.3
+1879.97766 968.5
+1880.28198 806.5
+1907.05115 7351.6
+1918.81116 736.0
+1930.66528 566.9
+1931.02551 801.3
+S	1946	1946	536.2727521
+Z	4	2141.05971
+136.69388 4115.1
+139.83847 3822.4
+140.56296 4069.5
+141.88737 3819.1
+146.69994 3600.3
+146.91905 3232.1
+151.60242 3536.9
+185.23756 4149.9
+188.24149 6287.0
+188.25113 8496.4
+188.27420 10939.3
+188.29158 11084.3
+188.29762 11364.2
+188.31789 8553.4
+188.33022 6914.8
+188.34181 5258.4
+198.89928 6064.1
+199.18596 4152.7
+199.24139 3923.1
+199.24953 5217.7
+199.26602 11381.5
+199.27509 12045.2
+199.28557 7844.6
+199.30576 4387.1
+199.31287 3930.5
+199.35318 3964.1
+199.36406 5559.9
+216.59746 3517.9
+221.54262 3509.8
+244.95052 3944.5
+248.69089 3409.9
+250.54390 4190.4
+269.81140 3707.5
+271.23969 4030.9
+271.55099 4393.8
+273.84409 3834.2
+288.20248 7482.1
+342.27432 5525.3
+353.66519 4413.2
+360.51163 3617.1
+381.36282 5243.8
+404.33008 3926.3
+412.31680 4351.2
+419.87695 3959.4
+424.20380 9080.8
+424.69925 4874.9
+426.22479 41624.9
+426.55807 17021.6
+427.22601 4915.2
+427.54419 4789.7
+433.20877 5928.8
+463.26227 3784.5
+463.92221 14617.1
+464.25449 8261.7
+471.00046 4520.0
+480.74472 17164.6
+481.24332 7496.5
+482.66483 6503.4
+489.74777 10278.5
+490.75089 4628.2
+509.25256 5413.4
+517.32068 13615.1
+532.55487 10856.3
+550.41571 3800.8
+562.52490 4714.3
+563.25818 3897.3
+582.29150 179502.5
+582.79291 114038.3
+583.29449 30160.4
+583.79779 9094.1
+587.24768 10362.3
+605.25793 3967.7
+613.22058 5178.0
+627.67242 4557.0
+638.83368 121213.0
+639.33527 79071.8
+639.83795 25450.5
+640.33899 6212.6
+674.07440 4877.4
+676.62878 6210.5
+695.37628 25812.4
+695.87640 19076.6
+706.08228 11712.5
+706.33270 12995.6
+706.58453 15772.8
+716.30762 12853.8
+717.31372 4875.1
+728.71124 3831.5
+729.36316 5271.8
+729.86432 5297.8
+734.31702 15579.3
+752.32697 16699.3
+753.32233 7709.5
+773.68591 3783.0
+795.58521 6504.3
+817.37421 3924.2
+847.39996 25988.9
+848.39935 10643.9
+864.28247 3542.6
+865.41107 26737.0
+866.41345 10674.5
+1006.47949 4805.9
+1035.74756 3891.8
+1057.23425 4258.6
+1198.24060 20727.6
+1235.26978 5562.4
+1320.45581 3684.3
+1401.53210 4262.7
+1521.32336 4221.7
+1613.46692 4481.6
+1776.88672 4971.1
+1839.42065 3923.5
+1870.26563 5912.6
+1879.10962 4558.7
+1879.50806 126760.2
+1879.84705 10640.4
+1881.07593 4656.2
+1907.03735 47626.6
+1930.59729 7477.7
+S	1947	1947	1198.55140793
+Z	2	2395.255
+Z	3	3592.379
+319.63815 607.3
+328.70258 681.3
+337.30402 682.5
+342.27664 669.6
+374.36438 670.4
+419.56705 574.2
+465.23444 644.5
+481.20993 593.5
+518.77118 717.8
+532.50922 1234.9
+549.00098 599.9
+555.14209 656.8
+562.52325 641.6
+573.60181 816.2
+607.86743 657.5
+611.67804 613.1
+655.48230 701.6
+668.18060 550.8
+731.14850 885.5
+742.61169 654.7
+795.59186 986.2
+802.67780 598.7
+838.28052 632.9
+992.86420 651.8
+1019.72540 986.0
+1040.87048 665.6
+1103.65295 671.4
+1198.14441 3160.6
+1525.40198 652.2
+1715.01721 668.9
+1776.93213 865.6
+1875.47571 794.3
+1879.03015 1679.4
+1879.54065 19854.9
+1880.04993 1654.8
+1907.12256 6711.4
+S	1949	1949	1880.06740793
+Z	3	5636.927
+Z	2	3758.287
+532.54285 1756.3
+630.43048 860.3
+676.65820 821.2
+795.59558 1002.8
+828.04425 739.3
+873.88464 714.9
+1021.18152 674.0
+1140.18787 707.5
+1198.21228 3671.4
+1267.03467 588.3
+1525.48071 994.5
+1629.49988 673.7
+1683.57886 636.9
+1758.35217 674.8
+1870.32275 798.7
+1878.59045 1335.9
+1879.30286 3517.6
+1879.58923 19125.4
+1879.94666 2429.7
+1880.27148 1449.1
+1880.93616 720.9
+1907.09900 7275.3
+1930.69043 1008.1
+S	1950	1950	1907.4718246
+Z	3	5719.14
+Z	2	3813.096
+532.50702 2374.0
+630.49048 957.7
+672.03333 563.5
+676.64819 1272.6
+739.42328 565.5
+739.48401 566.4
+786.53479 686.8
+795.58228 1259.6
+797.10986 567.2
+903.38220 605.8
+916.08179 812.2
+1057.25623 903.9
+1139.81580 617.0
+1193.75330 652.5
+1198.12939 3486.8
+1206.45886 685.4
+1235.83875 572.0
+1259.77490 629.1
+1604.77527 602.9
+1799.98523 707.4
+1870.19421 1162.3
+1876.16553 729.8
+1878.07666 778.2
+1878.71985 1008.0
+1879.07788 2282.3
+1879.56567 19576.6
+1880.05957 1594.8
+1880.44324 1017.6
+1880.73279 1048.9
+1907.05408 7620.5
+1930.83923 938.9
+S	1951	1951	550.739407933
+Z	2	1099.631
+Z	3	1648.943
+146.93279 6778.7
+150.94290 6893.6
+157.60999 5505.9
+157.84416 5839.8
+159.25497 4715.6
+169.50017 5415.7
+171.63850 6034.7
+173.70624 4473.1
+178.57614 4373.2
+179.09230 6068.8
+184.64580 4881.1
+188.15421 4860.2
+188.26744 7019.2
+188.27454 9581.3
+188.28799 9797.8
+188.29825 8458.5
+188.31136 5615.4
+188.51315 4988.1
+192.47263 4696.2
+192.95140 4657.0
+198.90221 8251.2
+199.18106 12784.4
+199.19922 5819.0
+199.25299 8509.1
+199.27618 15008.4
+199.28964 16715.4
+199.29764 13112.6
+199.31804 6532.4
+199.39780 5708.0
+221.12773 114221.8
+227.17509 13406.4
+238.04732 4779.1
+238.40100 4756.3
+249.12277 105491.1
+250.12563 6206.6
+254.83136 4785.6
+275.30606 5768.1
+277.73895 5436.2
+287.61234 6527.1
+288.33109 6074.7
+289.19104 6043.3
+293.33063 5363.4
+302.20660 30206.7
+317.18558 38645.4
+345.21304 11114.7
+350.28174 5652.1
+362.20642 260795.1
+363.20953 31112.3
+376.99411 5154.7
+393.24847 9789.6
+427.58246 8006.4
+441.26132 5669.1
+447.29544 77224.7
+448.29907 11417.1
+457.27939 24822.4
+473.21713 5468.7
+475.28998 412871.4
+476.29330 44815.7
+491.43420 4894.4
+492.74609 9635.9
+493.24448 6320.1
+500.92761 5896.4
+501.25656 6687.1
+512.28833 5728.7
+531.30005 9137.6
+532.55463 14745.4
+538.77106 10251.9
+548.09418 5304.0
+550.24158 5175.2
+657.36542 8118.5
+676.60303 5338.2
+676.64709 6141.0
+693.86340 7241.3
+702.87494 14680.1
+703.38062 10618.3
+707.49677 5567.9
+779.37091 8654.2
+780.37256 13659.3
+784.41565 9004.1
+886.19116 4790.2
+899.44769 68314.9
+900.45117 31502.4
+986.48315 29468.5
+987.48267 22611.8
+996.46252 7222.8
+1019.65991 6507.0
+1121.81921 5333.9
+1122.13330 5704.0
+1198.24866 28692.6
+1248.51636 6041.4
+1290.64185 5435.6
+1431.85730 5071.9
+1489.70801 7363.9
+1582.78796 4884.6
+1776.92371 7777.4
+1859.95105 6477.8
+1877.28418 5525.9
+1878.62134 8907.2
+1879.10718 32956.0
+1879.55029 167748.6
+1879.97546 28614.3
+1880.45898 9463.8
+1880.87793 6358.6
+1881.86438 7032.5
+1903.23267 6017.3
+1907.06042 65938.9
+1930.77319 6688.1
+S	1953	1953	1880.0088246
+Z	3	5636.751
+Z	2	3758.17
+516.41150 587.1
+527.64545 607.2
+532.50537 1634.8
+539.10010 554.4
+543.74780 655.0
+549.19989 693.3
+630.46533 887.3
+676.62158 1144.4
+731.18445 925.7
+758.68512 627.4
+926.01685 662.2
+1019.75714 623.8
+1057.20422 639.6
+1107.15771 661.6
+1138.43494 606.5
+1138.88574 593.6
+1139.82544 696.1
+1173.01782 645.9
+1198.12903 3273.8
+1394.49255 644.0
+1563.55896 583.0
+1870.39539 738.7
+1877.72852 1131.5
+1878.75378 1441.6
+1878.98914 1605.0
+1879.48730 19863.3
+1880.00488 1605.2
+1880.33643 1501.0
+1907.05859 7585.9
+1930.79883 768.0
+S	1954	1954	550.743407933
+Z	3	1648.955
+Z	2	1099.639
+149.05649 599.8
+150.80188 583.9
+155.65297 592.3
+164.17545 632.8
+165.76794 609.5
+171.63928 592.7
+172.08340 672.5
+176.07005 560.1
+188.24117 518.9
+188.25958 1141.8
+188.27721 2021.6
+188.28572 2216.9
+188.30327 1934.6
+188.33514 692.7
+188.43289 494.4
+196.33562 642.1
+196.74458 548.5
+198.89803 910.8
+199.22539 671.3
+199.23314 608.7
+199.28481 2784.6
+209.24564 507.2
+221.12819 4646.2
+226.11853 758.5
+244.75378 504.0
+248.34077 578.6
+249.12289 4151.2
+261.38684 576.9
+268.95850 622.6
+271.69165 711.3
+280.18866 666.0
+287.18521 2253.0
+288.19321 1217.6
+290.29254 638.2
+317.18539 1945.6
+327.71078 562.5
+337.10803 546.1
+339.89822 517.5
+345.21185 1117.4
+350.28201 687.7
+351.16757 613.6
+362.20682 11402.8
+363.20987 1105.1
+381.36462 559.1
+432.64404 646.4
+446.30887 608.2
+447.29514 2973.5
+471.75299 823.6
+475.29037 16522.8
+476.29367 2670.0
+482.66656 570.4
+492.74423 1437.0
+511.61395 911.3
+511.95447 603.1
+531.25250 1477.2
+531.29913 3045.5
+532.26154 1177.5
+532.50507 1811.6
+533.25555 838.9
+537.95184 934.9
+538.27954 1032.2
+538.76965 4107.9
+539.27167 784.7
+539.77362 855.5
+563.28729 824.3
+564.29645 942.1
+640.33484 782.8
+642.96484 615.7
+650.32086 1251.0
+652.34845 1281.6
+652.85626 1257.6
+660.35895 833.1
+676.62775 1024.1
+700.84271 1434.2
+701.34161 820.0
+702.87512 4304.6
+703.38104 1860.6
+703.87927 1469.8
+707.73047 580.0
+727.37140 948.6
+728.62500 691.7
+740.21783 686.6
+756.37195 1104.3
+779.36511 1539.7
+780.37372 4110.4
+781.37408 1546.1
+899.45288 1573.1
+937.00964 658.9
+950.55334 576.3
+952.55670 713.2
+966.38739 690.0
+986.47687 1735.7
+1028.00208 564.1
+1057.24377 537.6
+1057.31738 607.5
+1141.99524 611.4
+1188.18518 726.3
+1198.12830 3026.0
+1238.32056 778.9
+1423.43274 686.8
+1534.14209 727.8
+1603.92712 878.7
+1617.45117 591.3
+1870.21509 785.4
+1878.86072 1280.7
+1879.50830 19560.5
+1880.08887 1322.5
+1880.41223 674.2
+1880.89868 888.1
+1907.05249 7784.5
+1930.67688 1156.3
+S	1955	1955	598.7205746
+Z	3	1792.887
+Z	2	1195.593
+156.47736 43011.8
+157.58765 46166.2
+171.64122 61108.8
+171.99883 44416.9
+182.79268 48173.7
+188.26170 82149.0
+188.26984 65816.2
+188.27913 69693.6
+188.28674 69239.7
+188.29185 76168.8
+188.30305 67809.9
+188.31161 60743.3
+195.72028 40950.2
+198.90158 55177.9
+199.00177 44879.0
+199.18056 55089.7
+199.23245 53193.9
+199.26230 138027.3
+199.27164 204778.6
+199.29349 85755.1
+199.30403 52081.8
+199.36945 50889.2
+199.51300 41069.1
+202.97186 44358.0
+206.64957 37093.7
+209.28687 38504.9
+220.36180 44024.2
+232.67392 40868.2
+233.58904 54458.0
+238.70657 41753.3
+260.69308 41824.4
+271.10239 43386.9
+273.09265 39373.8
+275.77472 51117.0
+287.25128 39628.0
+299.51688 70382.6
+308.92087 62450.2
+348.86115 46243.9
+391.58844 43360.8
+427.57358 46104.4
+467.20239 55702.6
+482.42560 40396.6
+482.68854 47116.0
+483.03659 45309.8
+485.21970 41603.0
+518.98895 42027.7
+532.47089 154527.5
+549.18890 53899.4
+555.06616 44463.4
+570.30072 154589.5
+571.31335 67276.5
+652.52917 42510.8
+676.59406 53012.2
+731.16711 59618.2
+795.60065 65787.9
+858.11823 64336.4
+859.37811 40394.3
+871.11456 44963.9
+873.87183 41365.9
+924.80518 45651.1
+1060.29712 58392.7
+1198.05432 240372.4
+1299.35266 40852.1
+1498.52148 45179.7
+1525.52466 61810.9
+1555.68250 38912.6
+1875.30237 44078.4
+1878.48206 62953.0
+1879.28528 483729.2
+1879.59143 1293795.8
+1880.73267 69135.0
+1885.20984 43045.6
+1907.08704 540525.0
+1930.70911 62445.1
+S	1957	1957	1879.9658246
+Z	2	3758.084
+Z	3	5636.622
+532.49286 1655.8
+549.21869 779.3
+573.60925 563.6
+634.43201 684.0
+649.38867 600.4
+1140.22327 758.6
+1198.10193 3197.6
+1320.62451 609.4
+1489.75952 838.4
+1525.55676 856.0
+1603.39978 613.4
+1675.35034 716.4
+1776.52087 829.5
+1878.57617 1123.7
+1878.92834 1870.2
+1879.53564 19076.7
+1880.19910 1705.3
+1881.58118 700.8
+1907.06091 7539.8
+1930.77173 1293.5
+S	1958	1958	1907.46124127
+Z	2	3813.075
+Z	3	5719.108
+530.10303 667.9
+532.47736 2136.1
+563.60333 646.1
+589.12201 610.6
+676.61841 799.6
+731.14313 608.2
+795.58447 1111.9
+1018.55951 776.9
+1188.34058 863.0
+1198.07202 3153.9
+1236.10217 635.1
+1303.29224 623.9
+1615.58508 648.5
+1743.86731 658.3
+1879.15149 2457.6
+1879.48071 19593.9
+1879.87085 2274.7
+1881.31702 985.8
+1907.09656 7360.8
+1930.69507 955.3
+1937.38989 793.3
+S	1959	1959	1198.5168246
+Z	2	2395.186
+Z	3	3592.275
+338.14716 6419.0
+356.16971 11050.3
+359.23892 38977.9
+360.24295 4634.0
+362.58307 2799.4
+369.40262 3177.0
+377.92847 3100.2
+380.20728 32081.5
+398.21841 5124.1
+401.78595 3085.4
+406.20352 3765.1
+431.63058 3031.7
+439.20801 69905.8
+440.21042 16679.8
+457.21707 20985.1
+457.85672 3197.3
+458.22214 5471.6
+467.20261 100961.6
+468.20575 29931.4
+469.25415 9280.0
+470.25351 4501.4
+471.25342 4723.2
+485.21310 56374.3
+485.27588 4425.9
+486.21567 12711.7
+488.28220 13122.6
+511.22607 3660.5
+511.30182 11048.8
+512.30573 4463.0
+532.46954 10040.6
+548.48615 3520.0
+552.29181 37389.2
+553.26770 8757.4
+553.30365 6213.2
+554.27557 5205.8
+556.31073 5174.0
+559.32190 3102.3
+566.32800 3762.6
+570.30170 33403.2
+571.30627 10966.5
+574.32159 7039.8
+580.28607 146851.0
+581.28998 55752.8
+582.29041 7269.0
+582.33868 22331.5
+583.33868 6869.2
+598.29651 120102.7
+599.29926 45764.2
+600.30249 10648.0
+601.36475 14965.0
+602.36395 4824.8
+622.33234 4140.4
+624.31403 4478.9
+630.42926 3562.7
+633.29272 3862.8
+640.34375 19330.8
+641.34363 8966.3
+665.37323 5778.4
+666.35669 22256.6
+667.36310 5458.6
+669.33197 11260.4
+670.33954 5791.7
+676.61554 4767.2
+677.33984 4074.6
+678.00439 3470.2
+683.38599 25560.8
+684.38831 11149.5
+685.29144 4244.2
+693.37036 88371.8
+694.37402 38272.7
+695.37927 9779.5
+697.40955 3030.9
+709.33453 6213.3
+711.38043 157397.5
+712.38342 63732.6
+713.38757 11755.7
+714.44830 22062.4
+715.45032 12353.6
+727.33862 14127.2
+728.33759 5166.5
+737.40222 4562.4
+764.40515 9785.9
+765.37634 2971.7
+774.39777 3641.2
+779.43616 4525.5
+780.36255 7966.5
+782.41754 41134.8
+783.42194 24032.6
+784.42645 4824.2
+794.41486 7412.6
+795.39618 7292.8
+795.58508 5996.5
+796.46545 3395.4
+798.37659 28600.5
+799.38043 10225.1
+804.40070 6557.7
+810.41315 3246.1
+812.42773 21598.3
+813.42889 10460.6
+822.41254 102704.1
+823.41583 55271.1
+824.46033 20769.1
+825.46112 9644.4
+830.21722 2869.7
+840.42316 126888.6
+841.42627 58785.7
+842.42615 13109.8
+844.49091 12579.8
+845.49707 3830.7
+848.38690 2999.8
+861.51672 39380.1
+862.52264 21479.7
+863.52271 4947.3
+865.45142 5804.0
+866.43909 13700.0
+867.44666 3454.9
+875.43658 9458.1
+876.44189 6080.1
+877.48584 4900.8
+883.46564 34631.8
+884.46625 18329.9
+893.44977 145120.1
+894.45239 85038.0
+895.46094 18786.3
+895.49390 18618.9
+896.50409 12570.5
+908.48254 5697.0
+911.45953 263650.9
+912.46301 125811.1
+913.46320 28498.8
+938.54431 4929.8
+953.50793 3739.1
+963.54724 5919.9
+978.54407 6983.3
+979.52441 6064.3
+981.55115 13449.6
+982.55469 6422.0
+989.51776 4545.2
+996.54688 15520.9
+997.54950 4934.6
+998.57703 49388.5
+999.57794 32047.8
+1000.58209 8690.1
+1006.53339 46310.0
+1007.53485 34010.6
+1008.53094 9342.4
+1024.54358 120215.2
+1025.54663 63658.9
+1026.54858 20263.2
+1042.56079 3527.9
+1051.60388 5094.8
+1052.59460 8101.3
+1069.61279 254004.5
+1070.61548 157179.4
+1071.61865 48525.9
+1072.61450 4072.6
+1074.36902 3036.8
+1120.61377 17891.4
+1121.60852 18160.0
+1122.62329 5442.7
+1136.64929 7648.4
+1137.65149 4977.1
+1138.62268 21214.0
+1139.62207 16168.8
+1146.59387 3980.3
+1152.65039 4957.8
+1154.65601 8664.9
+1155.65186 4176.5
+1162.63403 59050.9
+1163.62793 88777.5
+1164.62317 57276.0
+1165.61963 15124.2
+1180.64368 698131.6
+1181.64661 405226.6
+1182.64893 85646.8
+1182.81299 3720.2
+1183.66577 8260.5
+1188.31628 3285.1
+1198.04541 15950.5
+1198.31323 3728.9
+1443.85657 3902.4
+1721.79309 3387.4
+1741.69812 3202.0
+1745.64575 3124.0
+1876.01514 3571.6
+1877.38611 3807.6
+1878.80017 5608.8
+1879.02136 4528.8
+1879.51416 93761.1
+1879.78906 17559.0
+1880.23499 4489.2
+1880.57996 5731.7
+1907.05347 35614.9
+1930.68909 4846.9
+S	1961	1961	1199.0758246
+Z	2	2396.304
+Z	3	3593.952
+339.10388 601.0
+342.41321 612.1
+349.32275 577.3
+350.28326 716.3
+356.17136 1361.2
+359.23898 4319.6
+380.20642 2855.1
+381.20819 653.8
+406.20749 797.1
+411.73196 553.1
+416.93314 569.4
+429.16132 591.2
+439.20767 7395.3
+440.21118 1492.5
+457.21832 2592.3
+458.40945 689.0
+464.22531 648.1
+467.20285 11886.8
+468.20581 2315.3
+469.25681 915.7
+485.21323 5542.0
+486.21396 1037.2
+488.28088 1064.8
+497.24722 918.7
+511.29910 936.8
+525.16266 570.8
+532.43451 2095.6
+542.21552 636.9
+549.15521 692.5
+552.29236 3330.4
+553.26862 949.7
+570.30164 3557.5
+580.28607 16501.3
+581.28955 4217.9
+582.33960 2312.1
+595.32306 814.2
+597.40973 712.9
+598.29706 14511.1
+599.29980 4348.7
+601.36230 1952.3
+630.41400 715.4
+640.34180 2698.1
+641.35315 888.6
+657.86243 638.4
+665.36792 1168.3
+666.35779 2073.0
+667.36792 777.8
+669.32764 1063.6
+676.62964 949.4
+682.53656 654.7
+683.38470 2666.0
+684.39471 1148.9
+693.37000 10409.0
+694.37323 3267.9
+711.38049 18531.2
+712.38214 6564.1
+714.44965 2586.8
+727.33832 1726.4
+731.12903 847.4
+764.39661 940.1
+780.36353 1169.7
+782.41962 4856.3
+783.42566 1584.2
+795.58185 1002.4
+798.37378 3370.6
+799.38379 906.3
+812.42761 2473.4
+813.42444 755.2
+822.41235 10262.4
+823.41602 4842.1
+824.46313 2612.2
+840.42255 14883.2
+841.42621 6877.1
+844.48810 1461.0
+861.51556 4976.7
+866.44525 1829.5
+876.44824 651.6
+883.46625 4336.2
+884.46997 1971.4
+886.46216 547.7
+893.44940 16156.8
+894.45068 6326.4
+895.50116 2701.6
+896.50250 1285.7
+897.31659 587.2
+911.45911 32348.0
+912.46344 13736.7
+913.46484 1361.4
+978.52411 983.1
+979.52209 780.3
+981.54956 1126.2
+982.53839 771.3
+998.57538 5905.8
+999.57983 2880.3
+1006.53345 5471.4
+1007.53363 2583.0
+1019.66815 894.4
+1019.76373 826.6
+1024.54321 18798.9
+1025.54663 7429.5
+1026.54773 1140.1
+1028.28540 627.0
+1052.57971 756.9
+1069.61255 33598.2
+1070.61646 16450.6
+1071.62000 2162.5
+1120.61462 2938.8
+1121.61206 1458.6
+1138.62183 3465.3
+1139.62756 1234.6
+1162.63403 4630.1
+1163.62244 8833.1
+1164.62158 5010.0
+1180.64319 111478.4
+1181.64600 52522.0
+1182.64600 9676.3
+1188.34363 792.5
+1197.97168 3590.0
+1438.07446 644.5
+1772.95239 684.5
+1870.33240 684.1
+1878.44336 982.8
+1879.49121 20196.2
+1880.00354 859.6
+1880.39453 1291.1
+1907.07532 7365.5
+1918.72693 1042.8
+1930.62061 1007.8
+S	1962	1962	1200.6648246
+Z	1	1199.657
+320.20453 617.9
+338.14719 1257.8
+356.17191 3800.2
+359.23984 14589.8
+360.24377 2003.9
+380.20816 9423.3
+381.21167 3222.3
+384.16510 895.7
+388.19681 776.3
+398.21796 1984.3
+400.25613 742.3
+406.20859 2711.8
+407.21490 628.8
+426.21408 1620.9
+427.25250 1567.5
+427.57925 747.7
+436.46039 651.4
+439.20840 23435.8
+440.21021 6202.8
+441.21707 803.7
+442.62570 630.0
+449.19131 943.7
+452.23224 852.7
+456.56216 548.1
+457.21887 5968.8
+458.22028 1456.6
+461.24161 845.0
+467.20297 31602.3
+468.20654 9949.3
+469.20761 1308.9
+469.25458 2688.8
+470.25253 1108.1
+471.25415 1001.7
+482.24057 998.1
+485.21356 18991.2
+486.21655 4374.6
+488.28128 3411.8
+489.28433 737.4
+495.31854 959.1
+497.25095 1249.5
+503.28806 1099.4
+504.28857 691.2
+511.22852 910.0
+511.30203 2962.7
+512.30640 981.2
+525.28210 1197.8
+527.26086 1335.1
+529.30048 1640.7
+532.50342 1819.5
+535.26624 934.1
+537.31665 1171.1
+540.33472 974.2
+549.20416 780.0
+551.55975 594.1
+552.29187 13028.6
+553.26996 4453.0
+553.30518 2779.9
+554.27759 1296.0
+554.34540 1215.3
+556.24780 1339.2
+556.31549 1243.9
+562.28003 958.7
+564.30847 1305.0
+566.32898 832.5
+568.25818 710.1
+570.30249 13065.2
+571.30481 3047.8
+574.32135 1986.7
+577.31146 916.6
+580.28705 53529.5
+581.29059 20172.2
+582.29291 3681.3
+582.33942 7590.0
+583.34033 2786.4
+595.31934 1299.1
+596.24182 1270.8
+598.29736 44205.8
+599.30017 14164.3
+600.30481 3132.6
+601.36591 5154.6
+602.37030 1737.0
+612.34558 966.4
+614.25354 790.5
+622.33221 2427.9
+623.34515 1009.1
+624.31256 2006.7
+638.36725 757.5
+640.34412 8052.9
+641.34552 3123.3
+642.37018 1117.0
+651.30164 1040.4
+665.37726 3092.1
+666.35858 6562.3
+667.29132 1034.1
+667.36163 2258.0
+669.33319 4066.4
+670.33771 1692.6
+676.33978 1672.0
+676.65112 1088.9
+677.35052 964.1
+679.41522 1114.3
+683.38641 10117.2
+684.39032 3074.6
+685.28613 880.7
+687.40540 1982.1
+693.37109 31523.5
+694.37512 14330.2
+695.37946 3442.9
+697.42120 2226.3
+698.42230 769.6
+699.34235 835.3
+703.36652 967.1
+703.62555 623.5
+709.32715 1630.6
+711.38153 57364.6
+712.38440 23085.8
+713.38501 4735.2
+714.45038 8194.5
+715.45453 3196.0
+721.36859 864.7
+724.36749 727.9
+727.34076 5911.5
+728.34058 2076.3
+731.18207 789.6
+737.40106 1403.0
+738.40295 870.7
+739.36707 722.2
+747.37805 765.7
+751.46210 689.7
+754.42206 1770.8
+764.39630 2715.3
+764.81934 847.2
+765.40088 968.0
+766.41235 653.7
+767.42249 750.2
+770.38403 2275.0
+774.40240 1599.9
+776.45819 598.1
+777.39307 1122.5
+779.44043 1862.5
+780.36578 3285.6
+781.37250 1529.7
+782.41919 15345.7
+783.42108 7460.1
+784.42639 1161.1
+792.41162 806.0
+794.41949 3748.1
+795.40234 3095.2
+796.46277 2088.8
+797.47101 839.9
+798.37610 8706.3
+799.37878 3957.0
+804.40466 1540.8
+805.38922 920.0
+812.42938 7840.5
+813.43347 3109.5
+814.43652 717.8
+821.15234 645.8
+822.41364 40656.0
+823.41656 18579.6
+824.44928 8056.8
+825.46704 2906.2
+826.47284 1473.7
+840.42365 48014.3
+841.42688 22922.8
+842.42828 4621.9
+843.42560 1013.6
+844.49176 3294.5
+845.49567 2077.8
+846.51050 743.7
+853.82599 710.9
+861.51776 12920.5
+862.52039 5903.5
+863.52057 1433.7
+865.45801 1517.8
+866.43842 5083.7
+867.44751 2081.1
+868.45087 1105.5
+875.44043 3348.4
+876.44025 1876.5
+877.47137 1787.2
+883.46655 10762.5
+884.46973 6194.5
+885.47369 1041.0
+887.48578 830.7
+893.45026 62559.7
+894.45349 30467.0
+895.49634 9007.2
+896.50519 4722.6
+897.50061 928.2
+903.15649 827.6
+908.47968 1029.9
+911.46051 94648.6
+912.46387 42805.0
+913.46747 10066.7
+914.46552 1951.2
+920.54919 1249.5
+938.54773 2046.9
+939.54407 1163.1
+953.50751 2367.1
+954.51263 1324.2
+963.53619 1423.6
+964.53784 1399.9
+978.53918 2794.7
+979.53461 2973.8
+981.55060 3989.8
+982.55377 2024.3
+988.51727 1599.0
+989.52435 1079.6
+996.54950 4468.8
+997.55145 2518.4
+998.57751 19624.2
+999.58051 11156.7
+1000.58325 2699.7
+1006.53491 24303.3
+1007.53699 13071.8
+1008.54041 3650.8
+1019.70288 955.1
+1024.54431 51477.0
+1025.54846 23436.6
+1026.55151 6504.5
+1027.54492 1497.8
+1034.58508 1247.2
+1035.57556 1455.2
+1042.55566 2317.1
+1043.55188 683.0
+1049.48401 836.3
+1051.60046 3437.8
+1052.59656 3185.1
+1069.61365 95404.8
+1070.61670 60371.3
+1071.61914 16666.2
+1072.62549 3418.9
+1102.59900 1929.4
+1103.61169 1786.6
+1120.61304 10873.7
+1121.61584 6775.6
+1122.61670 1621.3
+1136.65051 2854.5
+1137.65930 1851.8
+1138.62170 7648.2
+1139.62415 4377.6
+1140.62524 1115.2
+1145.60266 1214.1
+1146.60535 1706.2
+1147.60339 1249.5
+1152.64099 2535.0
+1153.65613 1077.3
+1154.66504 3318.5
+1155.66382 1490.9
+1156.62695 1252.0
+1162.63525 24242.9
+1163.62622 38242.5
+1164.62390 23045.6
+1165.62756 6235.6
+1166.60986 1358.4
+1176.36951 932.6
+1178.52795 1019.6
+1180.64465 200678.3
+1181.64771 103909.0
+1182.65051 22149.5
+1183.66150 2411.8
+1184.94800 1665.0
+1198.12390 3268.4
+1350.63159 1085.1
+1368.35950 677.4
+1481.68652 2266.5
+1482.68005 1237.3
+1487.70215 1058.5
+1489.71570 976.8
+1511.68665 830.1
+1525.53369 777.9
+1574.73389 926.3
+1667.15747 734.8
+1679.16858 821.8
+1698.22046 664.2
+1776.86401 954.6
+1788.83118 708.9
+1879.12341 2716.5
+1879.54834 19155.9
+1880.02673 2276.2
+1907.08484 7092.4
+S	1963	1963	1879.95040793
+Z	3	5636.576
+Z	2	3758.053
+510.20636 617.3
+510.92349 659.6
+525.52771 642.9
+532.50098 1614.7
+549.21283 853.3
+556.60449 738.5
+630.48010 805.8
+676.65039 894.3
+682.49738 630.7
+700.65912 614.3
+795.59650 1018.6
+987.23792 662.9
+1009.15576 624.9
+1079.28284 654.1
+1188.20056 650.3
+1198.11707 2824.5
+1525.58508 804.1
+1636.28638 622.5
+1874.69543 845.1
+1878.60791 861.9
+1879.17578 798.3
+1879.56470 19266.3
+1881.63843 813.0
+1896.43237 829.1
+1906.53503 1009.5
+1907.00012 6112.2
+1907.39661 1338.3
+S	1965	1965	1880.02640793
+Z	3	5636.804
+Z	2	3758.205
+518.86505 546.8
+532.46118 619.9
+532.49664 1488.3
+582.37103 608.8
+597.42029 546.8
+604.30432 739.5
+604.82935 555.2
+619.24921 629.8
+648.32220 612.2
+657.40503 860.4
+676.63879 922.4
+685.92950 535.7
+703.39893 586.1
+795.58954 1071.8
+947.73993 717.9
+1019.74951 722.4
+1057.25305 859.3
+1138.95605 646.5
+1198.11414 2709.2
+1366.20178 698.0
+1525.54333 1012.7
+1629.04004 612.4
+1879.09558 1173.8
+1879.54846 20015.2
+1880.03845 694.7
+1880.77014 961.0
+1907.04211 7528.0
+1930.74951 1119.1
+S	1966	1966	1907.43699127
+Z	2	3813.026
+Z	3	5719.036
+529.31226 662.2
+532.51733 2105.8
+630.46667 674.2
+669.93243 597.8
+676.63873 927.3
+693.41675 678.4
+731.18463 793.7
+795.57819 971.9
+1110.52747 689.6
+1198.15466 3376.1
+1228.45032 608.5
+1233.30786 624.1
+1249.26868 723.0
+1278.75354 765.2
+1380.47412 718.1
+1431.97144 732.0
+1476.12842 680.1
+1525.56250 793.3
+1656.82092 680.3
+1674.56238 585.0
+1876.92920 822.1
+1878.18494 725.1
+1879.18713 2947.8
+1879.53625 19598.5
+1879.84558 2824.9
+1880.24463 865.6
+1882.13623 717.0
+1907.07068 7154.7
+1930.73938 913.6
+1934.43494 662.4
+S	1967	1967	1198.5588246
+Z	2	2395.27
+Z	3	3592.401
+350.28241 15473.3
+359.23816 11208.9
+376.69525 9452.2
+412.65015 10264.1
+427.54803 9222.4
+439.20688 13854.4
+451.67117 9763.7
+461.96756 9682.6
+467.20200 29757.2
+467.63345 10814.4
+482.66519 16005.6
+526.12592 10009.0
+532.48993 14622.5
+532.53809 18401.7
+570.30072 10611.6
+577.25739 10949.8
+580.28400 39600.4
+598.29639 38262.3
+636.83020 8830.8
+657.13739 10648.5
+676.65436 15340.0
+693.36536 15836.1
+701.94867 8531.8
+706.36469 12995.8
+710.85925 10562.7
+711.37891 46440.7
+731.14697 10769.4
+737.03156 8770.7
+782.76794 10100.5
+795.59680 15173.7
+812.42657 11572.0
+822.40967 26643.7
+823.41736 17452.0
+840.42157 45053.7
+841.44073 16323.5
+865.07538 8598.9
+883.46753 11191.2
+893.44537 37525.2
+911.45782 80562.1
+912.46576 20008.7
+998.57977 13931.4
+1006.53302 13104.1
+1024.54590 39538.7
+1025.54309 18701.9
+1069.61292 91080.7
+1070.62170 45222.8
+1163.61536 21041.4
+1171.83826 9720.2
+1180.64441 263169.8
+1181.64758 180939.0
+1198.11670 38903.1
+1198.24585 33039.0
+1272.93176 11703.9
+1349.59497 11424.9
+1598.44104 10041.5
+1870.41162 10949.8
+1876.65955 11654.5
+1878.77454 10155.3
+1879.14612 23027.8
+1879.56689 299058.4
+1880.34497 20195.7
+1907.05139 117873.6
+1930.66650 14291.6
+S	1970	1970	496.8499226
+Z	5	2479.21049
+137.45816 5228.4
+171.63774 5535.7
+188.18822 3438.1
+188.23907 3796.8
+188.26314 11103.4
+188.28215 13165.7
+188.29492 12445.0
+188.36400 3719.6
+197.23517 4156.2
+198.90042 5760.7
+199.20200 4368.7
+199.21024 6394.3
+199.26154 5082.6
+199.28316 9088.0
+199.29068 6991.3
+199.30084 12089.1
+199.33189 4101.7
+199.39772 4069.0
+218.72260 4078.9
+235.17726 3715.8
+255.10512 3852.6
+258.10916 3913.7
+261.55466 3542.8
+266.16064 8426.5
+271.52176 3503.5
+271.52686 3427.1
+274.18704 9632.8
+280.19424 3990.5
+280.39529 3599.9
+321.33853 3637.5
+321.70697 3695.1
+324.14532 17710.0
+328.11301 20989.0
+328.66821 17863.2
+329.16971 6412.8
+350.28012 6150.9
+351.00327 3371.1
+375.20547 58790.9
+375.53906 30570.6
+375.87329 15527.4
+376.19717 3273.3
+385.20911 13608.2
+390.20837 10836.4
+390.45868 11308.3
+394.46442 34206.6
+394.71439 35908.4
+394.96567 9446.1
+395.21637 7340.8
+405.22705 20293.9
+417.90244 9013.9
+418.23395 5580.5
+418.56714 4524.2
+422.22220 27735.9
+422.47235 37637.3
+422.72327 23151.1
+422.97385 6112.7
+426.97293 9430.3
+427.22888 5985.6
+429.15906 8376.8
+434.74448 5809.1
+446.23648 3769.8
+449.52554 3732.5
+454.99567 55128.9
+455.24628 58154.2
+455.49612 19324.4
+455.74734 14763.5
+463.59000 80551.9
+463.92404 74594.1
+464.25745 30161.6
+464.59201 14271.5
+465.73181 7460.5
+472.83603 9497.0
+473.03665 19090.8
+473.23575 24626.2
+473.43649 7596.9
+473.62827 4600.1
+474.04071 4152.1
+474.76407 4258.3
+476.43878 167484.4
+476.63950 203513.4
+476.76236 3303.8
+476.83942 146044.7
+477.03964 65087.6
+477.23950 24114.9
+477.44266 6385.6
+478.26022 18779.3
+478.75876 8784.4
+479.26190 3903.1
+480.17380 8453.7
+492.26929 4857.6
+509.01559 4752.4
+513.51648 4604.0
+513.78076 9047.7
+514.27625 4061.7
+515.29755 3683.2
+515.77820 6031.9
+516.19275 34131.1
+517.19373 8774.6
+519.26947 54582.5
+519.50403 7703.6
+519.61499 8325.3
+519.75073 4910.3
+519.93970 17959.4
+520.27380 24019.9
+520.61127 5813.6
+525.61578 157180.8
+525.94995 141539.2
+526.28400 76243.9
+526.61896 20413.9
+526.94946 7559.5
+532.52936 11772.8
+538.28131 4938.0
+542.27655 11194.3
+542.52716 10328.5
+542.78094 5011.4
+549.16980 4100.2
+553.29492 6282.0
+556.95490 7262.7
+557.28827 13025.0
+562.21252 11308.0
+562.30426 91981.1
+562.62628 185696.9
+562.80542 69141.0
+562.96063 169782.0
+563.21680 5226.1
+563.29395 79488.9
+563.62756 33570.6
+563.80975 8481.7
+563.96387 14207.5
+566.53064 14300.3
+566.78125 21080.3
+567.03241 25393.5
+567.28113 6748.6
+567.53021 6738.8
+568.62994 150883.1
+568.96448 164291.4
+569.29816 79556.0
+569.63184 23843.2
+569.96552 7552.8
+570.30164 4892.5
+571.03345 43055.1
+571.28467 63370.3
+571.53418 39799.1
+571.78516 26267.2
+572.03577 13625.9
+581.28265 7693.9
+581.31982 7317.1
+582.28302 6765.8
+584.30377 8543.4
+590.79224 7819.5
+591.04633 13729.9
+591.29163 15872.0
+591.54633 8213.0
+591.79230 5731.6
+594.65045 6728.9
+595.29657 143814.9
+595.54718 203881.7
+595.79779 161575.4
+596.04840 77039.4
+596.30023 21144.7
+596.54907 6164.8
+599.30078 7853.9
+599.63403 5240.4
+600.65179 5885.6
+605.33911 3952.5
+606.32452 203540.6
+606.65857 203189.1
+606.99280 129340.8
+607.32703 42262.2
+607.65839 17988.0
+608.63818 7267.9
+609.30396 4525.4
+620.63867 6171.4
+620.97437 6954.5
+621.30591 5075.7
+626.35187 38632.5
+626.85242 30019.2
+627.23840 17607.5
+627.34985 11818.2
+628.24414 6877.9
+628.77972 6288.6
+645.25000 69679.6
+646.25360 26218.9
+650.33380 3897.7
+654.32074 16030.4
+654.65851 18801.3
+655.34882 25531.6
+655.68213 30483.5
+656.01611 24723.8
+656.32507 36385.2
+657.32806 12777.1
+663.26123 78691.9
+664.26215 24979.0
+675.30359 5221.3
+676.30334 4154.7
+676.60065 7360.2
+678.81146 15174.1
+679.31677 11460.1
+679.81372 7016.0
+684.35834 39820.0
+684.69269 40175.7
+685.02606 25194.2
+685.36072 12047.1
+685.68658 4349.4
+690.41345 6650.2
+691.06464 3917.2
+694.36993 5631.8
+694.88251 16022.1
+695.38116 17416.5
+698.88928 4268.4
+722.69977 7659.2
+723.03284 9319.6
+723.36475 9332.5
+723.70160 7532.4
+739.07251 4634.0
+758.33649 15833.8
+759.33411 6942.7
+761.37793 12093.2
+761.70941 8381.3
+762.04633 7324.4
+769.41425 9859.2
+770.42242 4235.9
+776.34241 15266.6
+777.33899 5964.9
+787.92169 4675.5
+789.29504 3600.1
+795.59216 6615.8
+804.33856 5418.0
+807.31812 3279.3
+851.19214 3871.3
+856.72247 3445.8
+887.37799 9173.3
+905.38330 10356.6
+906.38983 5799.9
+939.76093 4587.0
+1045.05798 4142.0
+1110.75574 3503.9
+1123.59888 5647.5
+1132.31836 3332.9
+1197.89734 4378.4
+1198.18884 19405.2
+1230.76465 3467.7
+1500.95605 3558.4
+1584.30237 3674.8
+1718.40710 11034.7
+1755.64526 3891.4
+1859.23059 4275.7
+1870.44849 3620.0
+1874.07190 7788.5
+1879.41846 128510.2
+1907.05090 46086.1
+1913.46802 3773.2
+1918.75464 5436.6
+1930.57104 6255.3
+S	1971	1971	620.8105346
+Z	4	2479.21084
+172.69995 10489.7
+188.25273 12182.1
+188.26895 20378.1
+188.28204 21582.0
+188.28824 18366.7
+188.30034 16385.8
+188.32022 16023.3
+190.77505 10737.0
+199.17531 12062.7
+199.18509 17077.0
+199.23761 10652.0
+199.25180 23692.1
+199.27319 41111.9
+199.28246 38395.0
+199.29189 12177.0
+199.30032 16469.8
+199.37068 12148.8
+199.38129 15092.8
+222.71346 14039.0
+226.89754 11529.1
+233.59018 15769.6
+248.46951 10819.4
+255.30838 11463.6
+277.38733 9509.5
+294.12100 11228.5
+324.14560 18222.1
+328.11298 19685.2
+328.66736 36874.5
+336.16055 10655.0
+340.55701 10414.5
+342.29504 13813.0
+381.38257 17675.3
+405.22702 22715.9
+408.96237 10277.7
+424.39261 12231.1
+427.57407 13060.9
+429.16119 20587.7
+452.24384 12973.5
+460.37656 12727.4
+463.58957 28441.4
+463.92102 14689.6
+470.03491 11019.3
+476.96368 10506.6
+480.12576 11415.3
+482.71051 10646.1
+518.90112 15630.8
+519.26941 94791.6
+520.27411 28980.2
+525.61542 84342.0
+525.95044 79137.0
+526.28491 41489.4
+532.53033 39091.6
+549.19641 13857.8
+553.30450 11487.6
+561.28851 19334.1
+562.30341 160217.1
+562.80511 88234.7
+563.30878 34281.2
+590.79480 22934.3
+591.04272 34369.0
+591.29419 26850.4
+591.54529 18397.0
+595.29608 316755.1
+595.54694 420755.8
+595.79761 261135.4
+596.04810 131135.1
+596.29718 51908.5
+599.30481 24206.0
+599.64081 20406.7
+600.76215 12792.1
+601.30823 9931.0
+606.31879 14872.9
+606.65900 35837.5
+606.99768 14054.6
+630.45050 14676.4
+655.35010 15392.6
+655.68225 39961.2
+656.32526 91953.1
+657.33331 33603.7
+669.30762 11450.8
+676.08917 11332.3
+678.81177 20499.2
+679.31885 25086.2
+684.35846 81682.5
+684.69196 78522.6
+685.02533 46314.7
+685.35840 27356.2
+694.87994 36700.2
+695.37903 16672.7
+717.03021 16205.3
+722.69916 64277.5
+723.03497 109009.9
+723.36731 69774.3
+723.70551 31919.7
+724.03259 14899.1
+746.25116 11144.8
+755.04199 14361.3
+755.70630 21361.5
+761.04224 201133.6
+761.37695 281875.8
+761.71191 167703.3
+762.04523 101173.1
+762.37646 43063.1
+769.41223 48522.5
+787.92059 19028.1
+793.39142 41918.8
+793.72882 74798.8
+794.05682 16687.3
+794.39886 17986.7
+795.59015 18173.0
+807.39496 13861.6
+852.44226 16737.7
+852.94366 17329.5
+855.91077 13219.9
+858.11230 14219.4
+885.75641 12518.1
+887.37183 15118.2
+905.39362 15787.4
+913.92517 12565.3
+976.68854 12330.9
+1124.61096 16847.6
+1130.29419 14122.6
+1198.18738 61770.5
+1235.47083 12615.0
+1525.49939 13370.4
+1548.79102 11803.6
+1573.87158 11848.2
+1603.75928 10970.8
+1718.85242 24353.1
+1806.91248 12430.8
+1850.92261 12789.6
+1874.52527 17792.6
+1878.98267 13223.8
+1879.45959 377850.3
+1879.93494 20617.4
+1907.05042 130381.3
+1907.33081 11040.3
+1930.74731 22687.3
+S	1973	1973	620.8104721
+Z	4	2479.21059
+161.12685 525.6
+168.51093 546.0
+169.50551 676.6
+182.67392 633.9
+188.24649 779.2
+188.26468 1687.2
+188.28848 2189.9
+188.30341 1609.6
+191.61247 640.3
+199.24577 668.2
+199.25713 1463.9
+199.27043 1727.2
+199.28120 2288.7
+199.30206 1122.5
+199.40215 689.8
+205.31670 628.8
+206.80234 664.5
+221.88745 568.8
+225.37781 567.7
+261.07755 572.3
+272.17123 870.2
+289.89670 607.4
+296.12393 1797.1
+296.38483 612.1
+300.08383 969.5
+314.13477 1508.9
+324.14441 3153.3
+328.11392 4052.7
+328.66797 7857.7
+329.16983 3327.8
+337.18585 856.2
+373.97055 569.9
+381.38770 865.2
+385.20944 2168.7
+385.71069 1177.6
+397.13528 754.1
+405.22659 3012.4
+406.23398 692.4
+413.41632 700.4
+414.76556 534.2
+415.14404 717.8
+429.16077 3916.7
+430.68555 686.3
+432.25546 3584.5
+435.74185 710.7
+440.29254 689.3
+447.15137 1120.4
+452.24051 1652.0
+463.59073 3316.0
+463.92435 3780.8
+464.26010 999.7
+468.28290 998.6
+478.25980 1667.7
+478.76096 1952.3
+482.17850 680.6
+502.24530 1446.8
+513.78052 1131.3
+519.26947 21467.8
+519.93707 1084.5
+520.27362 7737.5
+520.61243 1296.4
+521.26727 1012.6
+525.61615 14215.6
+525.95026 15695.4
+526.28473 7719.4
+526.61884 1849.7
+532.56549 2449.3
+535.53589 621.8
+539.92413 613.5
+553.29865 2506.0
+553.80286 1202.9
+559.95245 645.3
+561.60571 1575.9
+562.30408 32261.5
+562.62561 1673.2
+562.80542 17748.0
+562.96045 2174.3
+563.30707 7889.3
+563.62756 1325.9
+563.80878 1211.3
+564.25659 802.5
+565.95337 903.9
+566.53320 1005.0
+568.43707 630.0
+568.63116 2211.0
+568.96326 1956.2
+569.30084 1360.0
+571.03479 925.8
+571.28259 1467.5
+571.61371 675.6
+581.28497 1181.8
+586.54163 789.6
+590.79419 3779.1
+591.04462 8120.9
+591.29486 6111.3
+591.54498 4109.9
+591.78876 1836.9
+593.30005 1119.2
+595.29663 57426.9
+595.54736 78165.8
+595.79791 60572.2
+596.04822 28559.5
+596.29846 10742.4
+596.54559 1212.9
+596.82288 568.2
+599.30212 2471.4
+599.63855 2434.3
+599.97339 1826.9
+600.76825 2015.6
+601.25977 1139.6
+601.29431 652.6
+602.96832 865.9
+603.28571 792.6
+605.05133 1287.0
+605.29657 1325.8
+606.32361 3612.0
+606.65717 2092.7
+626.34747 1109.1
+626.85217 2219.4
+628.29095 820.5
+628.79187 1085.5
+630.45178 840.6
+644.98993 854.2
+645.25067 1244.5
+649.84991 806.9
+654.32324 3147.3
+654.65833 2994.5
+654.99023 1867.6
+655.34943 5059.2
+655.68060 6459.8
+656.01495 4531.5
+656.32635 19511.5
+656.38458 632.4
+657.33087 8395.7
+658.33063 2237.0
+658.64941 1109.2
+658.98499 1197.6
+659.32330 947.6
+663.26318 1034.6
+669.80658 1407.1
+675.30072 984.3
+676.67865 867.8
+678.68567 753.3
+678.81207 4476.5
+679.31689 3817.0
+679.81958 1731.5
+684.35779 12332.8
+684.69250 16650.8
+685.02637 11689.9
+685.36206 4372.0
+685.69287 1889.3
+692.33282 1218.8
+692.67078 1369.7
+694.36603 1636.0
+694.88098 5356.3
+695.38123 4165.3
+695.88330 2290.2
+707.28729 828.9
+716.69873 1342.1
+717.03070 3367.7
+717.36243 1951.8
+717.69678 1460.4
+722.70068 17029.4
+723.03497 24475.9
+723.36835 17719.5
+723.70325 8234.8
+724.03625 2210.1
+733.43927 2008.5
+750.03473 771.9
+755.03925 2786.4
+755.37292 5044.7
+755.70593 5488.5
+756.04071 1551.3
+756.36731 1005.1
+758.33752 1696.2
+760.57635 697.4
+761.04303 42957.4
+761.37695 57336.7
+761.71106 39987.2
+762.04504 16272.0
+762.38037 4907.0
+762.70996 1419.2
+769.03729 706.9
+769.41187 8285.2
+769.70648 814.8
+770.41760 3548.0
+771.41602 1022.0
+776.34583 986.3
+786.31439 693.7
+787.38629 859.9
+787.72308 1320.0
+787.92053 6626.8
+788.05725 944.6
+788.42346 5604.1
+788.92688 3770.0
+789.42285 1244.3
+793.39362 10857.1
+793.72784 13065.4
+794.06219 10978.1
+794.39679 4729.1
+794.72827 919.4
+796.89050 808.9
+804.33844 1108.0
+805.36694 803.3
+805.87201 725.9
+806.89868 894.7
+811.37134 593.5
+841.43707 903.0
+843.43732 1002.2
+843.94287 1301.7
+852.44116 3788.2
+852.94397 3725.6
+853.45068 1863.9
+855.90637 1888.0
+856.40845 1711.3
+856.90942 1258.1
+862.42291 1111.7
+862.92737 854.8
+868.48181 1156.7
+881.92841 917.5
+882.43292 1867.1
+887.37616 3594.5
+888.37915 1811.9
+903.45306 708.3
+905.38654 3137.1
+906.39874 1165.2
+908.98285 3066.9
+909.48370 3310.3
+909.99005 1171.3
+910.49530 780.6
+912.44885 2001.0
+912.95337 2131.6
+913.45935 972.2
+919.51392 1499.7
+928.46393 856.9
+929.45984 1025.3
+949.48096 1076.9
+955.50708 2627.6
+956.52240 1891.0
+1026.54651 699.9
+1043.48572 1092.8
+1048.56189 1155.7
+1073.44275 876.2
+1091.45898 852.2
+1109.11072 780.6
+1123.60303 7796.5
+1124.60840 4926.6
+1125.60840 1768.7
+1158.51428 1426.8
+1159.53479 1360.7
+1160.52344 999.3
+1198.26880 3481.8
+1228.51306 1181.0
+1229.52539 819.6
+1279.00537 741.4
+1437.03333 627.9
+1477.62134 818.7
+1494.69641 646.3
+1525.53271 1013.9
+1541.55298 772.3
+1665.40796 642.5
+1724.15930 736.6
+1762.27612 638.2
+1878.30493 848.1
+1879.62805 19003.5
+1880.20190 1199.3
+1881.75537 665.0
+1907.04907 7486.5
+S	1974	1974	496.8503186
+Z	5	2479.21247
+157.61011 9773.0
+169.50044 12253.0
+176.49142 8269.8
+187.10892 9235.7
+188.20946 8554.9
+188.21777 8047.5
+188.22929 10318.9
+188.24944 9834.0
+188.25964 11421.1
+188.27718 12790.9
+188.29062 18866.5
+188.31308 7947.9
+188.33122 14385.1
+188.34482 9780.3
+188.36887 10358.3
+198.89830 11640.8
+199.15953 10993.7
+199.26019 17619.7
+199.27821 23523.5
+199.28519 28145.4
+199.29433 18876.5
+199.30113 23694.7
+199.31400 17985.9
+199.37727 12027.3
+199.39931 9616.2
+200.36166 9167.8
+220.77554 9815.1
+260.14352 10289.5
+271.54562 9993.9
+274.18628 15042.1
+308.91544 13782.6
+322.57623 8189.1
+324.14435 21781.8
+328.11316 20126.7
+328.66846 30739.2
+332.52121 10085.2
+335.74561 11563.0
+342.28528 11323.1
+350.27484 11724.6
+369.20184 11278.4
+375.20575 94242.2
+375.53946 45899.7
+375.87476 18419.0
+381.37680 9630.0
+384.60495 8071.6
+385.16907 8481.4
+389.96512 8680.4
+390.45795 15197.9
+390.71210 10528.1
+394.46445 55760.3
+394.71506 56340.8
+394.96561 24985.0
+405.22681 34461.8
+417.90149 12822.3
+418.23947 20215.1
+422.22214 82015.8
+422.47208 70003.2
+422.72314 23760.9
+422.97830 15617.9
+426.27646 9346.6
+427.56427 11431.1
+429.15881 13955.6
+452.24142 11275.6
+454.99576 91540.4
+455.24631 97737.0
+455.49719 31940.0
+455.74796 20821.7
+463.58997 135401.4
+463.92413 113836.5
+464.25937 51853.4
+464.92349 12367.4
+465.98074 12132.8
+466.23434 13189.4
+472.83606 17660.1
+473.03604 37801.0
+473.23843 17128.1
+473.42700 10812.7
+473.63977 11419.6
+476.43869 284307.3
+476.63922 324187.0
+476.83951 261580.4
+477.03976 88982.2
+477.23883 36866.9
+478.25964 33225.8
+478.76254 16089.9
+484.44257 21679.1
+513.77234 20891.5
+514.33856 7459.6
+516.19208 52734.2
+517.19232 15955.7
+519.26990 80588.8
+519.50037 11889.5
+519.75507 14710.6
+519.94189 27049.5
+520.27429 43304.5
+520.61188 18787.1
+525.61603 229311.5
+525.94983 245113.1
+526.28375 119744.1
+526.61816 32941.5
+532.54596 26880.6
+542.27661 12565.2
+542.52521 18705.5
+542.77747 11947.7
+556.95251 22162.8
+557.28821 24930.0
+562.21198 22315.2
+562.30396 124481.6
+562.62604 257251.0
+562.80505 132174.8
+562.96069 292121.1
+563.29358 160155.2
+563.62732 55252.0
+566.52710 9957.4
+566.78131 27674.7
+567.03174 27995.6
+568.63007 276274.3
+568.96436 282822.7
+569.29822 131102.9
+569.63251 52266.2
+571.03339 103244.9
+571.28333 105424.5
+571.53430 48717.5
+571.78522 42018.9
+572.03699 11525.8
+579.12915 9324.4
+581.28265 18656.0
+582.28021 9889.4
+589.73138 8862.0
+591.04236 18668.2
+591.29694 22662.3
+591.54175 14532.0
+594.31659 14041.5
+595.29639 280200.8
+595.54688 402805.4
+595.79761 231475.2
+596.04742 109815.2
+596.29797 46479.2
+600.65155 12121.1
+602.62567 10864.1
+606.32416 300441.8
+606.65826 334474.7
+606.99286 190611.7
+607.32562 65597.7
+607.65942 22926.9
+608.04700 9702.3
+608.63519 13545.0
+620.97034 12583.1
+621.31293 11885.5
+626.35150 60171.8
+626.85425 54441.0
+627.23962 20652.9
+627.34888 19629.1
+630.44000 11858.2
+645.24969 110861.3
+646.25275 43138.9
+654.32520 19990.3
+654.65735 16962.3
+654.99579 13201.6
+655.34760 34084.3
+655.67889 45035.2
+656.01379 12663.0
+656.32495 36719.1
+657.33270 15352.9
+663.26068 137599.1
+664.26611 35210.1
+676.64612 11756.1
+678.81323 39738.8
+679.31348 16111.6
+682.55328 9421.7
+684.35925 49510.0
+684.69226 61647.3
+685.02789 47520.1
+685.36151 24624.3
+694.88330 15147.4
+695.39398 12229.2
+722.69098 17024.2
+723.03436 15012.5
+723.70032 9921.1
+723.75128 8239.6
+758.33807 28278.1
+761.71027 13555.8
+769.41626 16773.2
+776.34528 40004.7
+777.35052 12318.9
+787.91760 13165.7
+795.59009 17890.9
+905.38800 13184.1
+954.91748 9012.4
+1051.23230 8762.8
+1079.32629 10028.2
+1102.11597 8620.1
+1188.16187 15439.2
+1198.22778 55481.2
+1215.69641 9358.9
+1477.37292 10401.8
+1525.51831 11662.9
+1600.06018 10220.8
+1657.58850 9687.1
+1718.75989 19610.4
+1721.43945 10794.9
+1802.89160 12442.9
+1810.98767 10115.9
+1874.60046 22422.1
+1878.05847 11491.1
+1878.74500 15073.6
+1879.00098 14454.3
+1879.14966 17418.8
+1879.55383 299729.0
+1879.96289 23605.0
+1880.14075 18716.3
+1880.84778 13469.7
+1906.07935 9877.2
+1906.60498 9828.1
+1907.02576 110760.8
+1930.72815 17584.7
+S	1975	1975	1879.89640793
+Z	3	5636.414
+Z	2	3757.945
+525.05151 717.8
+525.14490 674.3
+532.62469 1885.0
+646.66583 716.3
+686.51196 749.8
+793.33990 677.9
+795.59497 846.3
+814.48737 656.9
+828.73816 621.4
+875.43744 741.9
+1057.25500 716.1
+1139.96289 617.9
+1198.38989 3184.2
+1434.81213 714.4
+1600.61365 664.9
+1722.25562 758.0
+1873.55249 1761.4
+1877.93860 647.2
+1878.82959 930.5
+1878.97717 1169.6
+1879.14319 1427.8
+1879.53882 18840.5
+1880.21582 1692.6
+1881.08447 790.5
+1891.18115 649.4
+1907.01794 7405.4
+1930.66125 1108.0
+1953.93506 767.2
+S	1977	1977	620.8162096
+Z	4	2479.23354
+179.78993 698.6
+188.26302 1813.5
+188.27579 1817.8
+188.28493 1828.6
+188.29709 1638.3
+188.33012 770.7
+189.33931 567.1
+199.18161 1064.9
+199.24765 814.0
+199.25528 1056.5
+199.27908 2977.0
+199.29007 992.0
+199.36923 789.9
+199.37796 931.7
+215.27010 524.6
+231.37662 565.6
+236.82239 624.0
+237.41866 573.8
+243.42812 559.4
+244.46396 543.6
+287.67496 591.9
+318.84647 719.2
+319.01688 557.0
+333.16803 730.3
+339.15652 574.2
+342.31183 663.1
+353.02368 602.5
+381.40424 709.5
+394.58524 588.1
+403.29483 544.9
+457.67996 628.5
+482.45944 595.2
+482.71207 720.2
+491.90070 654.5
+499.73941 876.2
+532.64301 2051.8
+547.93085 862.7
+595.29144 1174.4
+595.54572 889.2
+636.07672 644.3
+676.64764 1081.5
+740.98358 758.5
+761.04462 1367.9
+779.71851 731.9
+795.58447 786.9
+841.46936 689.1
+851.50507 642.2
+892.68909 559.8
+900.55249 643.9
+1198.44397 3324.1
+1558.47693 617.6
+1716.38086 1040.5
+1750.84985 828.6
+1877.49365 763.5
+1879.55554 19616.6
+1879.83936 2075.7
+1881.57410 759.0
+1906.76489 1521.5
+1907.06750 6956.9
+1908.30481 620.0
+1930.82422 1260.7
+1974.80115 673.0
+S	1978	1978	496.8548046
+Z	5	2479.2349
+128.58301 557.2
+133.14964 926.9
+136.99658 760.8
+141.84749 661.5
+144.69264 539.0
+148.16571 678.1
+160.09052 610.7
+163.79033 620.5
+165.76894 893.0
+175.73116 670.6
+188.19579 576.3
+188.20966 644.8
+188.27518 2068.0
+188.28598 2186.6
+188.30133 2487.5
+188.33673 565.3
+198.89915 919.9
+199.18130 971.8
+199.20876 949.6
+199.25703 782.0
+199.26697 1368.2
+199.28017 1617.7
+199.29851 1353.7
+199.30710 1347.9
+199.31779 813.8
+199.39542 645.5
+200.54439 581.4
+203.65303 544.1
+211.53708 579.8
+214.52690 542.7
+269.44086 591.9
+274.18680 2061.1
+308.91528 623.6
+314.33487 570.6
+324.14447 1890.1
+324.16321 622.6
+328.11368 2463.9
+328.66751 2645.0
+334.97189 531.8
+347.16104 664.2
+350.27359 672.7
+354.48801 592.2
+375.20596 5921.0
+375.54019 4371.2
+375.87274 2528.9
+376.20782 941.2
+378.24329 592.5
+385.20847 1193.8
+390.20709 1320.7
+390.45901 1456.8
+394.46399 3417.6
+394.71448 5502.4
+394.96439 4473.5
+395.21497 1102.0
+405.22626 2176.3
+417.90475 693.8
+418.23447 1126.3
+422.22208 4524.4
+422.47217 6027.5
+422.72375 2516.2
+422.97366 1131.9
+423.22763 946.2
+426.97473 916.1
+429.16348 1464.9
+446.21823 601.3
+450.98868 599.1
+452.23886 740.9
+454.99591 4972.4
+455.24686 8098.1
+455.49634 4372.2
+455.74640 2993.0
+455.99472 690.5
+463.58942 7224.0
+463.92401 11088.5
+464.25723 5753.3
+464.59061 1463.1
+472.83636 660.0
+473.03653 1994.1
+473.23828 2534.9
+473.43765 1944.0
+476.43878 13359.0
+476.63934 25441.9
+476.77118 937.6
+476.83966 25608.0
+477.04019 16134.1
+477.24084 6378.3
+477.44205 2264.1
+478.25897 3681.5
+478.76080 1741.1
+482.99545 699.4
+488.46744 646.4
+513.77319 2130.1
+514.02142 1267.0
+514.27185 1219.6
+516.19177 4546.6
+517.19299 992.1
+518.37500 671.6
+519.26886 5814.3
+519.61218 811.8
+519.75812 918.0
+519.94165 1246.6
+520.00165 823.1
+520.27435 4361.2
+520.60974 2067.9
+521.27448 813.2
+525.61560 13084.3
+525.94977 15428.1
+526.28448 14124.2
+526.61823 5634.0
+526.95160 1297.2
+532.59772 2075.7
+538.02576 837.4
+538.27930 929.7
+542.52893 1103.9
+542.77692 1785.0
+549.17944 880.1
+556.95142 685.0
+557.28424 1280.0
+557.61560 1308.6
+562.21326 2266.4
+562.30402 10424.7
+562.62628 10651.8
+562.80585 10671.6
+562.96057 22600.3
+563.29431 15220.8
+563.62805 8385.8
+563.80725 1726.6
+563.96259 2383.1
+566.53046 1676.6
+566.77954 2003.3
+567.03387 2013.6
+567.28363 2160.7
+568.62976 13701.8
+568.96393 20705.4
+569.29828 17943.6
+569.63263 7210.4
+569.96649 2466.4
+571.03333 3321.9
+571.28326 6000.8
+571.53485 8496.5
+571.78455 4679.3
+572.03772 2134.9
+581.28632 1274.5
+582.28754 840.5
+584.81091 819.6
+590.79346 968.8
+591.04626 2553.5
+591.29205 2812.1
+591.54565 1651.9
+591.78607 613.9
+592.04620 1048.6
+592.32263 577.2
+594.31390 1235.4
+594.65051 1202.2
+594.98114 1043.7
+595.29596 10728.3
+595.54736 24561.9
+595.79810 25366.4
+596.04871 14254.9
+596.29767 6322.2
+596.54993 2117.2
+599.97278 970.0
+600.64740 976.4
+600.98468 1281.3
+606.32410 14792.8
+606.65863 22717.9
+606.99274 20485.0
+607.32574 10451.5
+607.65942 2842.6
+608.63538 630.7
+608.96692 1091.3
+609.30310 753.9
+613.61975 725.6
+620.96826 1082.0
+626.35132 5303.3
+626.85254 4994.3
+627.24023 2219.9
+627.35345 2692.9
+627.85480 985.9
+628.25439 897.9
+628.27692 882.5
+628.79504 872.7
+636.14807 585.6
+645.24982 7214.3
+646.25232 3904.1
+647.25446 923.9
+654.31903 1379.8
+654.65240 1797.4
+654.99261 1468.9
+655.68152 3986.2
+656.01746 4334.3
+656.32385 3475.9
+657.32831 1698.9
+658.31915 1016.3
+663.26013 8302.2
+664.26300 4147.3
+665.82990 601.7
+678.81238 1814.7
+679.31714 1705.4
+680.67981 634.4
+684.35779 2561.2
+684.69305 3654.0
+685.02625 3496.6
+685.36060 1522.7
+685.68890 966.6
+686.37439 689.8
+694.88232 1401.0
+695.38239 1912.5
+695.88580 1447.0
+710.74640 558.5
+723.04132 1313.6
+723.36835 1696.3
+723.70441 768.1
+733.43054 667.5
+758.33771 2109.3
+759.33997 864.4
+761.37213 1036.5
+761.70947 1008.3
+762.04297 650.3
+767.31860 609.4
+769.40839 892.8
+776.34973 1775.0
+782.97528 665.9
+795.58856 939.2
+829.84003 550.0
+887.37683 886.3
+905.38074 1425.3
+1057.27759 984.2
+1140.54224 701.1
+1144.81018 696.9
+1198.33508 2902.4
+1385.18433 592.2
+1392.35168 618.7
+1686.96790 532.2
+1764.27893 632.7
+1801.77490 664.7
+1812.33154 662.4
+1876.32629 664.3
+1877.75708 699.9
+1878.09314 969.6
+1878.89246 1582.2
+1879.62549 18272.3
+1880.06995 2317.8
+1880.45654 829.6
+1880.59229 813.2
+1881.19458 911.1
+1881.53149 772.3
+1882.43762 988.7
+1907.03174 7325.8
+1918.76013 712.9
+1930.73071 672.3
+1938.28528 648.3
+S	1979	1979	598.725407933
+Z	2	1195.603
+Z	3	1792.901
+164.28558 14136.0
+188.26895 20859.7
+188.27762 25630.7
+188.28404 28114.0
+188.28908 24844.9
+188.30121 32916.1
+188.32176 14572.1
+188.32686 16580.6
+191.62622 14819.2
+197.72171 13709.5
+198.89900 19897.1
+199.19994 27852.3
+199.23671 16956.4
+199.25822 34921.0
+199.27786 74365.0
+199.29626 30527.7
+199.37662 18473.1
+204.08594 15924.5
+209.85280 15095.2
+271.53098 17806.2
+271.68506 21577.3
+283.13245 14617.4
+285.13446 23142.8
+287.39133 16780.4
+304.00601 17926.9
+314.37122 16577.3
+324.15363 16720.9
+367.09103 15960.0
+380.20831 27651.7
+432.85324 13825.2
+438.77002 15431.6
+439.19690 15758.1
+449.83719 15635.3
+463.62976 14522.6
+467.20203 35543.9
+474.30682 16575.0
+495.58609 18588.3
+518.96490 16621.6
+525.27472 14967.6
+532.60339 51895.7
+553.27637 25564.8
+563.26105 22503.8
+570.30206 145176.7
+580.28595 48766.7
+624.02008 18746.6
+630.44910 16205.7
+676.62817 23481.2
+795.59381 26028.7
+1057.24048 24362.8
+1158.19043 16597.3
+1198.35144 99610.0
+1388.04285 16076.5
+1476.55615 17916.6
+1525.52405 31607.8
+1798.32446 15931.7
+1876.27161 24132.3
+1877.33972 19338.1
+1879.11133 75540.0
+1879.51282 526454.3
+1879.90430 79649.1
+1880.88916 16629.7
+1902.93896 19180.7
+1907.05261 190966.0
+1907.42773 17431.7
+1915.05981 16729.5
+1930.72729 22036.3
+1955.96802 16273.0
+1972.14075 16037.5
+S	1981	1981	1879.94824127
+Z	2	3758.049
+Z	3	5636.569
+532.60400 1508.1
+598.82861 630.5
+612.69543 638.0
+795.59155 971.5
+1043.15967 558.5
+1057.27112 814.7
+1195.43054 539.6
+1198.35095 2705.2
+1434.57324 597.2
+1472.93945 642.4
+1485.24207 647.3
+1491.49854 809.4
+1783.10205 815.2
+1795.44141 665.1
+1878.84875 1299.0
+1879.21252 1952.5
+1879.61011 19034.2
+1880.03418 1931.3
+1880.35559 1357.8
+1881.03418 771.2
+1906.42041 732.1
+1907.04333 7426.2
+1918.81226 856.7
+1930.64001 1033.9
+S	1982	1982	496.8498306
+Z	5	2479.21003
+130.67281 625.8
+146.94037 704.5
+157.33948 592.7
+157.62636 581.6
+159.64268 575.4
+169.51634 619.2
+187.17712 629.1
+188.23164 519.8
+188.24763 619.4
+188.26419 1795.5
+188.27702 2265.8
+188.28664 2298.6
+188.29820 2191.5
+188.30977 1750.0
+188.36893 540.8
+198.89757 809.3
+199.18652 911.3
+199.19453 726.3
+199.27281 1849.6
+199.28450 2523.2
+199.30289 941.0
+199.38240 830.5
+228.35724 649.9
+235.59982 615.0
+241.26555 582.3
+271.67380 538.6
+274.18509 941.1
+320.80453 530.8
+324.14487 1054.1
+328.11365 1514.5
+328.66965 973.3
+345.06326 633.1
+347.94144 726.2
+375.20547 5075.9
+375.54187 1508.7
+385.20792 744.9
+394.46408 3241.3
+394.71402 2457.7
+399.25922 637.9
+405.22763 1379.7
+415.14542 747.5
+417.90308 674.8
+418.23767 813.3
+422.22134 3846.4
+422.47134 1452.8
+422.72610 1232.3
+427.60434 974.4
+454.99536 5000.4
+455.24612 5374.8
+455.49805 1696.6
+457.75317 642.5
+457.91403 602.1
+461.70578 609.5
+463.58951 8064.8
+463.92413 4138.5
+464.25748 1574.8
+465.73428 860.6
+472.83282 1211.1
+473.23804 1150.4
+476.43851 19300.9
+476.63928 20911.2
+476.83966 7948.8
+477.04132 2958.0
+477.23807 843.4
+478.25793 1521.4
+516.19177 2631.3
+519.26935 3603.1
+519.50385 1545.2
+519.75513 1406.5
+519.94025 2205.6
+520.27252 2090.8
+525.61584 13005.9
+525.95013 8071.1
+526.28314 3354.4
+526.61877 1019.3
+532.59888 668.0
+532.63690 1790.7
+542.27319 1367.7
+542.53015 1118.5
+549.23468 742.6
+556.95160 963.8
+562.30365 9134.9
+562.62610 17241.0
+562.80493 4319.8
+562.96051 11408.1
+563.29382 3039.3
+563.62555 1436.0
+566.52997 1391.7
+566.78033 1100.4
+567.28857 668.6
+568.62952 18047.4
+568.96423 11763.0
+569.29724 2918.3
+571.03296 5870.3
+571.28418 4005.0
+571.53577 1693.6
+581.28296 768.5
+590.79144 737.4
+591.04425 1907.3
+591.28943 948.8
+591.54535 727.7
+594.31793 1502.4
+594.65137 727.1
+595.04785 845.3
+595.29602 17242.7
+595.54675 19218.0
+595.79816 6999.9
+596.04803 2570.1
+596.30127 1240.9
+600.65387 1093.3
+606.32428 17391.0
+606.65820 15332.0
+606.99255 4542.0
+607.32776 1986.8
+607.66754 1059.6
+626.35022 3117.2
+626.85529 1879.2
+627.24115 1689.7
+627.35492 804.6
+630.49585 894.1
+645.25000 5108.1
+646.25201 1024.2
+654.32159 1593.7
+654.65259 1092.4
+655.34552 2318.5
+655.68414 1101.8
+656.02307 1062.7
+656.32800 2273.0
+657.33398 813.2
+662.96039 665.8
+663.26038 7210.0
+664.26324 1294.6
+676.62286 998.0
+678.81671 1724.1
+679.31964 952.3
+684.35706 2752.4
+684.69116 2423.2
+685.02710 1027.9
+690.41296 1742.8
+694.88190 1126.7
+722.69666 919.6
+733.41217 723.0
+758.33167 2008.3
+761.04541 1220.4
+776.34515 1705.2
+777.35406 732.5
+795.58246 1017.8
+799.39044 628.8
+837.48145 1221.3
+846.43024 675.9
+850.53748 656.8
+887.37677 811.2
+905.39471 1133.4
+1095.77722 579.6
+1145.53076 625.4
+1188.14917 694.5
+1198.41272 3250.0
+1222.61108 712.2
+1473.94019 714.1
+1525.62781 718.0
+1653.05750 626.5
+1667.17163 796.1
+1720.02527 637.7
+1777.11157 783.4
+1870.37903 1174.9
+1878.91882 1361.6
+1879.49683 18628.5
+1879.77661 3360.1
+1880.10669 856.2
+1880.52698 746.3
+1881.25281 760.2
+1906.60339 693.8
+1906.72839 696.4
+1907.02075 7160.2
+1930.85522 909.7
+S	1983	1983	620.8098021
+Z	4	2479.20791
+167.28496 1367.9
+168.15448 1409.1
+172.89432 2086.7
+173.11780 1232.3
+173.12219 1279.7
+188.25740 1975.3
+188.27008 2581.3
+188.28487 2998.3
+188.29643 3134.0
+188.30284 2499.0
+191.14656 1672.3
+198.89885 2505.4
+199.26103 3438.2
+199.27654 2300.6
+199.28911 6425.1
+199.29843 2086.2
+199.31013 2733.5
+199.38696 2311.2
+199.40933 1671.3
+211.24843 1501.2
+218.47804 1762.6
+225.59563 1541.9
+227.71492 1499.8
+235.15016 1619.2
+248.75529 2172.6
+272.76520 1463.3
+293.54950 1681.8
+293.90591 2015.7
+295.97836 1590.1
+314.32843 1858.1
+335.78769 1631.2
+342.30612 1827.2
+347.64984 1632.2
+386.16638 1647.9
+394.54816 1558.1
+401.68277 1462.7
+428.81256 1650.9
+530.53931 1933.2
+532.62250 5457.4
+539.06567 1781.9
+543.27710 1589.0
+549.20032 2127.2
+637.53668 1855.9
+653.77277 1760.9
+663.72687 1564.5
+672.47833 1498.2
+708.74402 1649.1
+753.86835 1621.3
+772.04230 1611.4
+782.93066 1401.9
+795.58655 2908.6
+810.95361 1968.1
+832.86066 1672.2
+841.33368 1741.7
+851.89319 1710.0
+851.91534 1706.6
+928.57062 2076.7
+1075.35815 1680.7
+1188.06738 2189.9
+1198.38904 8218.1
+1309.46387 1829.8
+1365.28650 1693.1
+1525.55896 2579.6
+1550.87671 2120.2
+1718.28638 1863.0
+1736.19043 1509.3
+1776.98523 1919.1
+1853.35693 1797.3
+1876.67102 2057.1
+1878.93933 5769.3
+1879.46057 50270.1
+1879.75574 6636.8
+1880.01721 6095.4
+1882.25159 2153.8
+1906.81384 16447.7
+1930.79126 2791.1
+1983.23340 1880.1
+S	1985	1985	1199.0768246
+Z	2	2396.306
+Z	3	3593.955
+329.30045 7302.0
+368.34726 9957.1
+368.64142 7936.7
+380.15460 8161.8
+398.32550 8673.9
+429.36584 7546.3
+440.74112 7883.3
+467.20264 10754.5
+512.50287 7370.0
+532.59869 24255.3
+547.31738 7222.6
+580.28729 18630.2
+598.29572 11699.4
+617.30511 9065.0
+617.65100 7346.6
+630.42828 10264.8
+667.40619 8447.3
+676.63361 14305.9
+703.37421 8272.1
+711.37769 26401.0
+712.39038 9985.2
+736.89886 7810.9
+774.98804 8570.0
+822.41504 15611.1
+840.41632 14163.9
+841.42950 11450.6
+853.44641 8355.0
+864.82300 7690.2
+893.44598 21218.3
+894.45984 16073.3
+911.45941 51714.4
+912.46210 11643.3
+1019.72137 9725.7
+1024.54700 21139.9
+1057.23352 12983.5
+1069.61426 35722.1
+1070.61890 16940.4
+1146.06238 9545.0
+1166.57288 9161.0
+1180.64490 166295.9
+1181.64734 81464.5
+1182.64673 15436.4
+1198.33862 42536.5
+1301.44653 7908.8
+1525.44373 12418.6
+1753.74341 8836.2
+1875.90991 7774.5
+1879.52039 249985.7
+1880.23230 10966.6
+1880.75208 11479.7
+1906.99316 89828.0
+1918.81360 9335.5
+1930.60999 11855.5
+1935.34448 7680.8
+S	1986	1986	1200.07924127
+Z	2	2398.311
+Z	3	3596.962
+325.82874 947.4
+338.14844 1742.4
+356.17163 5379.8
+359.23950 22260.6
+360.24271 2833.5
+362.19702 1332.7
+368.96161 731.3
+380.20746 15507.8
+381.21045 4103.7
+398.21915 3695.2
+406.20801 3827.2
+406.37784 805.1
+407.20859 871.3
+422.18454 1123.5
+424.23596 1385.9
+426.21237 2407.5
+427.25223 2065.0
+427.54639 1263.4
+433.22232 1149.4
+439.20804 36690.8
+440.21069 8753.3
+441.25986 1114.0
+443.22800 1168.5
+449.13010 798.6
+450.17685 2038.5
+451.22852 1241.0
+457.21881 8606.2
+458.21970 1832.9
+461.23489 1412.6
+467.20279 50136.6
+468.20627 14070.1
+469.20721 2353.6
+469.25504 5739.0
+471.25867 1249.9
+479.24500 1452.1
+482.24207 1412.4
+482.66122 1287.1
+485.21362 27786.5
+486.21649 7241.0
+488.28128 5446.7
+489.28174 1388.7
+497.24753 2140.3
+503.29001 1420.4
+511.30243 4585.2
+512.30652 1462.7
+520.08954 744.7
+520.20850 1103.4
+525.28021 1271.3
+527.26190 2174.8
+528.25800 1023.7
+529.30188 2348.1
+530.76251 746.4
+532.61707 2768.8
+535.26636 1344.4
+537.31671 2102.5
+540.33850 1625.3
+543.17938 833.1
+546.32758 1262.5
+549.16125 1048.2
+551.22534 1055.8
+552.29224 17668.7
+553.27069 7268.2
+553.30341 3615.8
+554.27673 2438.2
+554.34167 1867.5
+555.34625 962.5
+556.25024 2249.4
+556.31482 1447.7
+562.27942 1116.0
+563.25684 1832.3
+564.31000 1703.1
+569.23328 1332.7
+570.30243 18638.8
+571.30591 5188.6
+572.29712 742.9
+574.32379 3967.9
+575.32416 1157.0
+580.28674 81535.2
+581.29059 24614.6
+582.29120 4540.6
+582.33881 10656.3
+583.34290 4296.9
+584.33392 1668.8
+595.32306 1874.9
+596.24670 1192.2
+598.29724 64244.6
+599.30054 20663.0
+600.30652 2345.1
+601.36530 7601.0
+602.36841 2515.6
+612.34894 1954.5
+614.25555 1496.2
+622.33191 2598.4
+624.31299 2987.0
+626.29181 1167.5
+633.29596 1032.0
+638.35883 1752.3
+640.34369 11349.3
+641.34631 4992.3
+642.35522 1597.6
+651.30530 1649.2
+653.37543 1162.6
+654.41309 1032.6
+665.37842 4917.2
+666.35675 7788.3
+667.28137 2270.3
+667.36243 2669.3
+668.28760 1196.2
+669.33411 6532.6
+670.33643 2318.4
+675.36346 2353.0
+676.34521 2683.1
+676.62781 1881.9
+677.34979 1012.5
+679.42078 1028.2
+682.32391 1139.8
+683.38647 15786.1
+684.38892 5937.4
+685.29523 2716.6
+685.38708 1556.4
+686.29791 929.2
+687.40875 1580.0
+693.37079 50573.7
+693.66016 767.4
+694.37427 20372.9
+695.37823 4655.5
+697.42462 3011.9
+698.42377 984.2
+699.34125 1842.6
+703.36523 1231.5
+704.36108 1026.4
+709.32794 3591.1
+710.32910 1080.9
+711.38110 85687.9
+712.38428 31664.7
+713.38721 6296.8
+714.44952 12198.0
+715.45367 3904.6
+719.36890 1139.1
+727.34100 7890.8
+728.34448 2934.7
+729.34998 916.2
+737.39508 2347.4
+738.40027 1455.0
+740.41815 885.3
+746.38770 874.6
+747.38141 1867.6
+754.42133 2824.7
+764.39557 4250.9
+765.39783 1600.3
+769.38733 1234.4
+770.22986 764.0
+770.38324 2306.8
+774.40900 2043.8
+777.39233 1916.0
+779.44434 2114.2
+780.36560 5451.7
+781.37158 2311.2
+782.41833 24933.8
+783.42108 9905.2
+784.42023 2255.4
+792.40558 1058.6
+794.41724 4871.5
+795.40576 4809.3
+795.59375 1800.9
+796.45734 2652.3
+798.37720 16492.1
+799.37958 5561.5
+800.38293 1639.5
+801.47296 1159.1
+804.40240 2687.5
+805.39099 1363.2
+806.44818 1986.8
+812.42804 11061.0
+813.43213 5127.0
+814.43201 1079.6
+822.41309 61683.7
+823.41638 26959.0
+824.46057 12372.4
+825.46710 4143.2
+826.47479 2019.6
+840.42328 69088.3
+841.42676 27616.8
+842.42944 6241.0
+844.48956 5518.4
+845.49878 3229.7
+850.47546 1189.0
+861.51770 22511.5
+862.52277 9395.5
+863.52881 2093.2
+865.45520 2834.2
+866.43726 5793.4
+867.44659 3643.7
+871.50043 1100.1
+875.43561 6211.9
+876.44061 2381.0
+877.48370 2967.5
+878.48505 1693.7
+882.89105 888.8
+883.46631 18195.0
+884.46893 7189.1
+885.47363 1740.7
+893.44983 91883.0
+894.45349 46614.7
+895.50238 13987.9
+895.66516 1013.0
+896.50531 6347.8
+897.50421 1828.4
+908.48322 2848.2
+909.49103 1547.4
+911.46014 137629.9
+912.46362 58889.5
+912.89038 1141.1
+913.46661 13330.7
+914.47156 2245.6
+920.53168 1509.2
+921.51105 857.0
+938.54041 2108.6
+939.54456 1018.9
+953.50739 2562.7
+954.50238 1500.1
+963.54163 1615.1
+964.55133 909.2
+974.53827 957.6
+978.53839 5258.4
+979.53229 2992.2
+980.52802 1150.0
+981.54901 6489.0
+982.55396 3559.4
+988.52899 3322.6
+989.52777 1416.7
+996.54993 8452.4
+997.55457 4224.1
+998.57666 28221.1
+999.57941 15208.3
+1000.58325 4087.4
+1006.53448 34972.3
+1007.53766 19408.5
+1008.53845 5581.7
+1019.69403 1194.9
+1023.55988 1196.4
+1024.54395 74352.0
+1025.54846 34606.8
+1026.54968 8305.9
+1027.55542 1212.5
+1034.57666 2794.1
+1035.57141 1655.9
+1039.03418 1022.2
+1042.55688 2599.5
+1043.54932 1058.7
+1049.94922 806.0
+1051.60107 6446.6
+1052.59814 4467.1
+1053.59229 1597.1
+1067.54395 1042.1
+1069.61328 146555.6
+1070.61658 76622.4
+1071.61902 23203.4
+1072.62219 4845.8
+1102.60486 2805.5
+1103.60693 1331.5
+1120.61328 16932.8
+1121.61755 10920.9
+1122.62109 2781.6
+1136.65576 3534.8
+1137.66003 2645.6
+1138.62219 11523.3
+1139.62769 7260.9
+1140.62720 2077.4
+1145.60034 2364.3
+1146.59314 2144.8
+1147.59375 1755.2
+1152.64648 3576.7
+1153.63525 2183.0
+1154.66968 3500.2
+1155.66663 1798.4
+1156.62720 1409.7
+1157.60522 1066.8
+1162.63635 41584.2
+1163.08118 2473.6
+1163.62622 57437.7
+1164.62451 28853.4
+1165.62463 8932.2
+1166.62048 1803.4
+1180.64441 259859.4
+1181.64722 107434.3
+1182.64905 23197.1
+1183.64807 2190.3
+1184.94128 1179.3
+1187.91077 1012.6
+1198.37634 4685.5
+1348.12805 855.1
+1378.24402 802.5
+1772.14172 861.9
+1876.84326 899.5
+1879.05188 1962.9
+1879.50513 25991.6
+1907.06201 9919.1
+1918.79541 1090.8
+1930.64661 1149.9
+S	1987	1987	1879.92624127
+Z	2	3758.005
+Z	3	5636.503
+527.37219 610.7
+532.64594 2148.5
+557.41315 668.3
+630.47382 841.5
+676.64319 1443.0
+789.80798 618.0
+795.59546 869.6
+1057.25916 885.9
+1092.33228 589.9
+1198.44104 3225.7
+1267.50623 587.3
+1521.73193 599.8
+1525.57080 718.8
+1877.34290 755.1
+1879.52429 19002.2
+1907.09204 7349.7
+1918.74463 761.3
+1930.76257 1148.9
+S	1989	1989	598.7238246
+Z	3	1792.896
+Z	2	1195.6
+151.14641 594.1
+153.21242 546.1
+157.60651 839.8
+165.76865 647.4
+167.55847 593.5
+171.63576 634.4
+174.89192 538.6
+176.97917 576.4
+178.31894 607.4
+188.23737 755.1
+188.27303 2149.5
+188.29016 2123.4
+188.30592 1786.9
+198.90182 919.9
+199.18307 669.1
+199.23167 740.5
+199.24698 807.1
+199.27121 2123.8
+199.28195 2289.2
+199.30843 1247.5
+199.38138 679.6
+211.48097 502.4
+225.88333 574.0
+233.58063 593.1
+244.11855 654.3
+288.65057 582.8
+306.39334 624.1
+308.90887 747.7
+318.34689 669.6
+333.16302 911.0
+333.65738 590.2
+347.16248 1164.3
+347.66156 793.9
+349.00998 600.4
+350.27576 653.6
+359.22232 717.7
+400.12668 564.6
+427.55881 958.8
+482.60202 585.2
+515.37482 712.9
+532.58344 1823.9
+553.12915 618.5
+570.30084 779.2
+585.52539 567.8
+591.76691 576.7
+630.42725 784.7
+636.27887 699.2
+636.62476 837.4
+676.66095 826.8
+775.74158 578.2
+782.83606 855.3
+795.59589 1113.0
+1065.16882 598.9
+1198.30664 3350.5
+1306.79102 760.4
+1341.93994 609.3
+1415.96753 543.1
+1421.15442 594.7
+1465.98218 547.4
+1489.06750 728.3
+1525.49695 887.0
+1615.44739 590.3
+1640.71106 651.2
+1648.34790 586.8
+1734.29370 706.6
+1777.39551 699.6
+1877.09045 607.0
+1878.19348 699.9
+1878.50378 691.9
+1879.14600 1863.4
+1879.60010 19749.4
+1880.09888 2411.9
+1880.45703 1332.9
+1882.01697 569.0
+1901.13721 587.9
+1907.03821 7348.3
+1930.65320 770.1
+1938.38013 582.9
+S	1990	1990	530.2615746
+Z	4	2117.015
+138.51404 5842.1
+146.92586 5746.0
+150.05804 7246.0
+157.96472 5349.6
+161.36305 6075.1
+164.01083 6131.2
+165.77122 8566.1
+188.21988 6441.4
+188.24179 9704.6
+188.26675 19094.0
+188.28058 25145.0
+188.29344 23356.1
+188.30701 18562.8
+188.33728 5989.4
+188.36743 7539.7
+195.73071 6539.8
+195.82866 5745.3
+198.90273 7804.2
+199.20099 7815.2
+199.20894 11159.4
+199.24788 12020.7
+199.25815 9039.4
+199.27017 13152.2
+199.28642 22636.2
+199.29788 12755.1
+199.32672 6983.3
+199.39406 7713.9
+242.57616 6926.5
+272.13452 11427.3
+272.16089 7768.3
+275.62576 7741.1
+276.56198 7125.2
+283.63696 24223.8
+292.15012 26638.8
+292.64203 29401.5
+321.63519 9307.2
+330.14880 13363.4
+330.64041 9625.3
+333.15744 7467.3
+333.65936 7482.2
+355.07288 6948.6
+361.20578 7113.9
+362.19296 6630.2
+371.47556 5957.6
+392.72571 153289.6
+393.22748 75529.5
+393.72961 16550.9
+426.60352 6827.7
+449.26611 15044.7
+460.69647 12677.8
+472.32437 6162.1
+486.57660 286297.2
+486.91101 206413.0
+487.24478 107150.5
+487.57861 24403.1
+500.25732 14691.2
+501.24057 12826.0
+532.61243 18304.5
+549.16870 7050.1
+573.57117 6094.9
+599.30444 59272.2
+599.80499 45019.3
+600.30707 19977.5
+630.43073 8713.3
+636.28351 11976.1
+644.79956 8248.7
+659.29077 36947.3
+660.27411 72934.5
+661.27594 17979.8
+676.63049 11161.1
+680.83649 36187.8
+681.33636 28100.8
+729.36212 368698.8
+729.86292 239242.2
+730.36353 129602.1
+730.44440 5605.7
+730.46136 5218.8
+730.86493 35318.4
+731.15485 7101.7
+731.43530 6969.5
+735.60999 5050.0
+767.41370 6458.5
+784.44373 104275.8
+785.44708 59480.4
+786.45117 9081.7
+858.08325 7511.6
+968.01190 6092.1
+1035.78223 6114.7
+1186.98047 6082.2
+1187.99170 9044.3
+1198.36841 35046.5
+1211.58337 6010.8
+1444.88647 6562.2
+1498.94678 6837.3
+1525.47974 8408.7
+1594.83923 6002.4
+1877.12024 9217.7
+1878.00635 7545.7
+1878.60474 8181.2
+1879.04639 14905.1
+1879.51538 209949.2
+1879.98352 20462.7
+1880.46692 8023.1
+1906.99329 73394.6
+1958.32825 6201.8
+S	1991	1991	560.727407933
+Z	3	1678.907
+Z	2	1119.607
+142.23438 596.9
+143.83150 619.3
+162.22179 519.1
+163.67493 568.2
+169.50258 965.9
+188.24760 799.8
+188.27110 1131.7
+188.28055 1145.1
+188.29721 1387.2
+188.31213 1221.9
+188.32576 735.3
+188.35376 624.4
+197.23352 707.2
+198.90439 899.0
+198.92111 609.1
+199.18095 1276.3
+199.20322 721.9
+199.25639 1200.9
+199.28058 3077.0
+199.29185 873.3
+199.30322 1414.8
+199.37820 922.0
+200.48906 595.6
+202.60982 730.3
+217.09726 1535.6
+226.57722 601.9
+226.58316 534.7
+228.69444 568.4
+238.70004 666.1
+239.07411 577.1
+245.09148 2795.4
+251.15117 1305.2
+251.89531 520.2
+258.16788 555.7
+258.98624 519.1
+262.11804 6573.5
+262.91666 535.6
+263.12027 691.8
+272.53851 519.9
+276.24551 564.9
+329.51120 587.4
+342.29144 572.0
+347.16476 734.4
+374.13419 1896.7
+391.16074 3218.2
+420.72528 841.5
+426.20349 958.4
+426.71310 787.9
+427.56155 957.0
+429.19913 1060.3
+435.21597 1014.5
+437.71194 1957.2
+442.70486 611.9
+443.19669 1363.6
+451.26770 1036.2
+451.71024 5891.5
+452.21234 1767.7
+452.71344 845.7
+467.58267 594.6
+469.27563 6068.9
+477.22818 4522.5
+477.72852 899.4
+478.23267 1182.0
+482.22159 970.5
+482.68481 669.0
+482.72803 752.5
+485.25021 1232.2
+485.74112 16954.8
+486.24228 3686.4
+486.74640 916.0
+487.23859 943.6
+488.17477 1164.6
+490.73248 4228.9
+491.22504 11101.2
+491.72580 2747.1
+492.22845 920.6
+494.25418 41110.7
+494.75644 10247.5
+495.25760 3748.8
+499.24680 5704.4
+499.73816 29398.8
+500.24011 5680.6
+500.74097 2792.1
+505.20230 1715.9
+508.25159 29905.2
+508.75256 5090.5
+509.25491 3317.2
+511.30093 1049.8
+528.36334 606.3
+532.59772 1613.6
+534.24945 1099.2
+534.73944 797.3
+542.76447 1873.2
+543.25397 12416.5
+543.75146 2162.9
+544.25653 1430.9
+544.71063 561.5
+571.93353 581.7
+573.42200 602.3
+598.33258 902.3
+599.87317 612.4
+602.80621 638.4
+616.34357 4081.5
+625.34332 2912.6
+635.24402 1417.9
+641.30414 977.9
+646.79742 892.3
+652.26996 2285.6
+661.17511 565.6
+676.63824 1062.7
+709.87817 1588.2
+710.35468 937.3
+712.36884 963.5
+727.43536 601.4
+730.38562 8968.8
+731.15631 700.7
+731.38800 1770.0
+736.37799 2446.7
+754.38361 2590.9
+772.30481 1921.9
+772.40973 1330.1
+789.32983 5376.1
+790.32825 1208.5
+804.90106 656.0
+841.41644 5563.0
+842.42218 1628.8
+851.40057 2117.4
+859.42902 18724.0
+860.43164 4610.3
+861.43451 1738.9
+863.83893 677.3
+868.42578 4278.6
+869.43225 866.7
+885.38477 3970.7
+886.40173 1324.6
+902.41272 9115.8
+903.41620 1749.8
+904.41815 1124.7
+909.01593 595.7
+938.42920 717.8
+966.41998 901.8
+973.47278 3280.5
+981.47626 669.1
+984.44220 1838.9
+998.46942 4936.4
+999.49438 775.1
+1015.49512 4495.9
+1016.50323 741.7
+1017.50293 1015.8
+1057.25452 831.5
+1157.35547 668.8
+1198.05530 706.3
+1198.34167 2499.9
+1736.12915 646.6
+1777.86340 602.8
+1879.22461 2821.6
+1879.53357 19884.9
+1880.18445 917.4
+1881.20850 687.4
+1881.57971 660.2
+1881.94360 638.9
+1907.04810 7645.0
+1930.73242 749.3
+S	1993	1993	474.2684796
+Z	4	1893.04262
+120.70087 655.8
+121.53204 560.6
+121.79218 2339.6
+141.91428 631.8
+144.01836 544.4
+147.83029 582.4
+148.90530 584.7
+150.07845 590.9
+159.05988 551.7
+159.62294 553.4
+162.77083 560.7
+169.50522 561.3
+179.55302 540.2
+180.52626 606.2
+187.05415 889.5
+187.84033 662.8
+188.20900 775.7
+188.22733 871.1
+188.23564 854.8
+188.25070 643.9
+188.27757 1107.9
+188.30325 682.4
+188.31175 891.9
+188.35667 713.5
+198.54424 814.3
+198.90106 851.7
+199.14389 527.2
+199.25810 994.6
+199.26414 1141.1
+199.27365 1438.9
+199.28899 1296.4
+199.30482 1194.2
+199.31665 1259.9
+199.37047 545.7
+199.41429 653.4
+199.56551 716.5
+204.08009 5559.8
+208.04337 603.5
+209.12822 2405.4
+211.77133 624.6
+215.05067 660.3
+219.23866 628.2
+226.15480 17649.8
+227.13837 1402.2
+227.15855 2201.5
+232.07491 2800.4
+243.45700 558.2
+244.16530 61671.3
+245.16881 7869.7
+255.29974 718.3
+258.92001 572.0
+262.95282 723.2
+291.36264 516.8
+317.40985 650.8
+324.89581 572.6
+333.54959 688.6
+333.66644 827.6
+345.15878 12802.6
+346.16248 1316.2
+361.89120 550.8
+362.18365 1527.5
+362.68573 992.8
+396.64853 660.3
+402.45752 519.8
+421.71887 1690.8
+425.23871 6382.4
+426.24280 854.7
+430.24634 741.2
+435.71692 1412.4
+436.21686 804.6
+438.34555 643.3
+444.58530 593.4
+452.99603 1013.6
+453.24963 612.5
+455.25348 880.2
+458.24307 1011.7
+459.25351 1304.6
+487.88834 650.0
+490.69635 641.4
+492.73840 1426.5
+493.23935 1216.0
+515.86487 571.1
+516.96869 1532.4
+517.61371 1427.7
+517.94159 1286.6
+532.60925 2049.7
+532.79578 4139.0
+533.29883 1678.2
+533.79926 652.6
+535.62848 1978.1
+535.96381 1195.6
+538.62335 1225.4
+538.96002 1212.1
+539.28961 1658.1
+540.76324 1064.7
+541.29852 4427.5
+541.63452 3856.3
+541.96747 2244.3
+544.62805 38952.0
+544.96167 48462.5
+545.29559 29727.1
+545.62805 12865.4
+545.96252 4236.5
+549.18433 523.8
+549.27722 1941.1
+549.59351 1154.8
+549.70642 756.8
+549.78113 1366.9
+549.92181 1053.7
+550.27417 633.4
+550.29926 795.4
+550.63135 233489.5
+550.96527 265693.2
+551.29907 176219.9
+551.63324 76271.6
+551.96704 23371.8
+552.01508 1191.7
+552.04706 606.9
+552.30237 2123.3
+552.34692 1313.6
+552.68359 803.6
+553.33270 4470.4
+554.33630 1159.4
+554.66321 1908.4
+554.99579 2456.1
+555.33105 1777.1
+566.64856 2935.3
+566.98413 3923.3
+567.31897 856.2
+573.96466 829.8
+585.85400 588.1
+587.82129 2117.1
+588.31647 2643.0
+588.46356 650.6
+588.81464 2304.2
+596.82617 6473.6
+597.32617 4268.7
+597.82739 1506.4
+626.00409 1071.4
+630.44409 885.2
+645.35974 1065.5
+653.36786 28210.2
+653.86884 21968.8
+654.37085 12127.9
+654.87109 3490.4
+655.09235 612.8
+666.41656 1936.4
+667.42346 839.0
+668.39490 2134.9
+669.39520 805.5
+676.63538 912.1
+690.68573 675.5
+701.39966 1538.4
+701.90900 845.5
+709.91010 39454.3
+710.41168 39351.5
+710.91327 17407.5
+711.41364 6415.2
+711.90125 877.7
+723.35455 1371.0
+745.42865 2306.4
+745.92749 1175.2
+746.43140 1801.7
+753.40405 1001.6
+780.46100 3168.6
+781.46570 1439.7
+795.59637 783.7
+799.40363 534.6
+817.42596 1332.3
+821.91302 625.1
+849.31805 551.5
+866.48376 1374.1
+927.52887 1650.8
+928.53571 1239.9
+995.57916 815.2
+1035.21448 707.8
+1097.54700 1184.9
+1110.77283 625.4
+1188.14380 1039.9
+1198.36560 3436.6
+1249.03027 561.9
+1274.25464 630.1
+1474.97473 589.9
+1489.46143 645.5
+1525.48767 925.5
+1798.78015 721.4
+1875.59558 735.2
+1876.93066 788.5
+1878.80383 1297.3
+1879.12585 3437.1
+1879.53430 18907.9
+1879.94507 2683.8
+1907.09192 7504.8
+S	1994	1994	1879.95940793
+Z	2	3758.071
+Z	3	5636.603
+520.40570 587.2
+532.58411 761.9
+532.61487 1517.6
+557.37164 610.2
+576.74835 636.7
+590.08429 601.2
+612.50067 615.9
+630.45428 743.7
+669.58466 644.5
+676.65088 994.8
+739.05750 612.0
+782.68677 620.1
+788.44220 774.2
+795.61035 1077.0
+934.95013 591.6
+1160.33667 573.2
+1198.37061 3593.9
+1255.30286 696.7
+1275.06763 696.8
+1277.82935 650.4
+1398.13843 670.4
+1506.93347 705.8
+1550.41968 532.6
+1617.48132 724.2
+1777.20544 826.0
+1869.96191 910.5
+1876.23633 782.2
+1877.84863 825.4
+1878.72498 1577.4
+1879.27344 4164.0
+1879.55615 19106.5
+1880.52173 987.2
+1882.25378 695.5
+1907.06689 7182.1
+1930.73413 1103.7
+S	1995	1995	530.2549921
+Z	4	2116.98867
+140.54366 470.9
+142.92332 681.2
+146.93317 780.9
+148.55846 620.4
+151.26834 477.2
+153.59682 486.3
+159.13713 605.4
+164.18124 716.3
+165.76672 918.8
+167.48631 539.6
+167.93216 598.6
+174.54831 568.8
+187.44632 656.2
+188.27544 1107.7
+188.28514 1496.0
+188.29767 821.9
+188.30498 1082.1
+188.31497 731.0
+189.80359 595.7
+190.52684 509.2
+197.15852 630.3
+199.18944 825.4
+199.19835 591.3
+199.25352 653.9
+199.26384 861.3
+199.27431 1047.6
+199.28751 3119.7
+199.29839 720.3
+199.30592 548.6
+199.38545 599.4
+199.40649 663.0
+205.32054 606.6
+210.37674 579.0
+227.13841 3190.4
+251.73398 611.7
+255.10880 703.9
+255.32028 565.6
+268.57108 576.7
+272.13446 2872.6
+272.15961 2969.0
+275.12439 671.7
+278.46918 689.9
+283.63770 1326.5
+284.12939 2580.1
+285.16760 1202.1
+292.64206 3899.0
+293.14429 1678.0
+325.43671 520.9
+330.64255 1653.1
+345.99545 641.1
+362.76190 648.2
+379.16837 1096.0
+379.67007 863.9
+380.17587 707.1
+386.21301 993.7
+392.72565 52919.0
+393.22708 35444.6
+393.72876 5374.9
+399.87109 859.9
+400.19235 3833.7
+413.95157 752.9
+414.20840 6170.0
+415.21384 661.9
+438.20599 804.0
+440.74872 864.7
+449.26672 5659.1
+449.76935 4142.9
+450.27518 623.3
+453.05203 602.9
+456.41794 499.5
+460.26480 2550.5
+460.69824 1879.6
+460.73187 511.0
+461.20099 1507.4
+461.27203 685.3
+476.27386 1012.2
+482.71167 739.1
+486.57660 22641.0
+486.91098 39517.8
+487.24475 23195.1
+487.57867 6252.5
+488.72061 672.6
+493.04245 556.6
+501.23956 5919.0
+502.24323 1371.6
+507.29105 1274.4
+512.20642 1096.9
+514.27631 1009.9
+532.60602 2112.5
+573.72809 556.8
+587.92456 575.5
+589.30634 767.4
+593.37024 756.5
+593.59656 577.1
+596.33759 1827.5
+599.30389 6960.3
+599.80566 7516.2
+600.30573 3698.4
+600.65747 675.7
+611.10400 743.3
+630.68066 575.5
+660.27478 15887.1
+661.27826 6611.9
+662.27942 1424.2
+676.63708 921.4
+680.83447 2335.7
+681.33685 4805.0
+681.83990 3008.8
+682.37183 963.1
+687.38916 1248.7
+729.36169 18174.4
+729.86255 34321.6
+730.36383 23567.9
+730.86688 4758.1
+779.50470 712.7
+784.44385 38565.9
+785.44641 25576.8
+786.45129 3570.3
+795.59558 1312.4
+877.83984 627.1
+881.47778 976.4
+899.47931 643.3
+1016.01129 610.8
+1025.92517 596.1
+1057.22180 759.5
+1198.35913 3461.4
+1257.67297 551.4
+1339.29785 622.4
+1438.73181 574.3
+1784.38794 566.6
+1878.41187 701.3
+1879.02429 1510.9
+1879.51660 19151.1
+1879.99756 1743.4
+1881.67834 746.4
+1902.73669 633.8
+1906.80078 912.8
+1907.07141 7167.8
+1930.51013 814.5
+1930.85815 954.9
+1946.27539 559.1
+1964.89441 553.4
+S	1997	1997	598.721991267
+Z	3	1792.891
+Z	2	1195.596
+156.72794 45549.5
+165.76883 68161.5
+188.25247 86450.9
+188.26730 142699.3
+188.27927 165233.6
+188.28671 164575.7
+188.30234 159343.2
+188.31595 75353.4
+188.32991 44091.9
+188.35143 56069.0
+188.36792 59454.6
+189.90448 47935.1
+198.90146 72870.1
+199.09596 41090.5
+199.17554 45472.3
+199.18579 77722.4
+199.20822 45677.5
+199.23463 38227.9
+199.25557 59486.9
+199.26291 61502.9
+199.27351 100767.8
+199.28293 174521.3
+199.30042 119422.4
+199.36269 73757.4
+199.38223 79844.0
+226.29703 53964.5
+269.32156 43893.0
+269.52499 45744.1
+280.18936 50400.4
+285.13266 63368.3
+295.57834 43074.3
+308.89655 55046.0
+320.13434 91566.9
+333.15512 54869.7
+333.16583 53568.0
+347.16504 91426.0
+359.23953 83608.1
+377.73465 47537.1
+418.93964 39651.1
+439.20920 98992.2
+455.60767 63203.7
+458.15103 47065.6
+467.20322 192402.3
+482.66913 69257.8
+485.21182 69981.1
+488.28162 248997.2
+494.85526 59104.3
+499.79163 592042.9
+532.61700 116997.4
+532.66302 81193.8
+532.70746 69345.8
+549.16711 76276.7
+552.29437 74532.8
+570.30078 194539.2
+578.23291 48686.7
+580.28601 237272.5
+581.82001 139378.5
+586.02478 53304.9
+591.30402 53723.7
+636.28906 92729.0
+660.40717 44303.1
+676.46796 46185.1
+676.62439 73804.8
+693.36957 119953.5
+714.04395 45448.9
+714.44824 467177.8
+760.19141 54295.2
+798.84406 48040.5
+822.41406 131183.8
+857.24872 46219.1
+861.51648 471046.5
+893.44775 57334.2
+908.30731 48077.5
+1121.85986 54792.7
+1198.39990 210171.4
+1198.60669 68240.8
+1241.45789 50645.5
+1298.29419 44728.0
+1328.04224 40870.0
+1526.21838 45622.0
+1595.83179 55801.6
+1814.24133 50913.9
+1873.71814 42249.1
+1876.74829 49663.5
+1877.77905 62050.8
+1878.44897 60337.4
+1878.85144 94211.8
+1879.49841 1563990.3
+1880.12354 143522.0
+1907.06921 559385.5
+1907.60742 50235.1
+1918.79736 56408.8
+1930.63269 84647.3
+S	1998	1998	530.2585921
+Z	4	2117.00307
+139.80252 4683.3
+145.53798 5368.8
+158.39153 4679.0
+160.87814 5905.9
+161.11598 4579.0
+171.63741 6237.0
+173.68181 6175.1
+182.75084 5148.3
+188.18832 5464.3
+188.21704 7462.8
+188.24776 4959.3
+188.28406 21572.8
+188.30249 15078.3
+188.31131 14671.2
+188.33310 6695.6
+188.35123 7148.2
+197.76971 4540.5
+198.89844 7899.1
+199.18810 6411.2
+199.25565 6320.7
+199.26411 8365.1
+199.27238 15917.5
+199.28632 18638.6
+199.29735 10202.6
+199.30577 5466.6
+199.32251 6487.8
+199.38387 6184.2
+204.71266 4587.9
+210.47218 5966.2
+227.13805 6850.2
+233.12762 6541.5
+255.10788 6900.1
+255.31572 4846.2
+267.71954 5542.4
+270.13196 11280.0
+271.52835 6789.5
+272.13434 9766.5
+272.16071 8145.8
+275.12231 7492.7
+283.63702 5622.6
+284.12906 29676.7
+285.16638 11077.7
+292.64236 73106.8
+293.14404 11047.9
+330.64142 27761.9
+331.14618 6969.3
+333.15414 6502.7
+333.66461 6399.3
+341.68430 5934.0
+342.16046 4783.6
+347.17093 11780.3
+347.73376 4643.4
+359.21756 7088.4
+379.16794 29990.9
+379.66757 5150.1
+381.38956 7446.6
+391.21814 8606.9
+392.72592 106730.4
+393.22723 93452.8
+393.72940 29542.9
+399.87073 13048.9
+400.19174 17967.2
+414.20703 19486.0
+416.25500 5428.2
+431.30234 5483.8
+434.32120 4957.2
+440.75391 8165.2
+446.70325 8765.3
+449.76917 8237.5
+460.69916 54227.0
+461.20187 22296.5
+461.70209 7333.3
+476.27155 19020.9
+477.70468 6065.3
+482.69571 5309.8
+486.57681 566179.9
+486.91116 458672.4
+487.24484 219122.0
+487.57913 51747.8
+487.90997 9570.9
+488.22278 12233.7
+501.23944 32089.3
+532.57037 16948.2
+571.70288 4665.3
+582.29218 8462.1
+599.30414 133504.2
+599.80518 76939.1
+600.30627 35480.4
+600.80457 6889.4
+619.24371 5418.8
+660.27539 243259.6
+661.27759 80287.5
+662.27759 16813.7
+676.63519 8639.6
+680.83588 69932.5
+681.33551 44060.2
+681.83716 23878.8
+729.36224 486160.9
+729.86334 365405.6
+730.36462 162049.1
+730.86633 49677.6
+731.36310 7704.1
+784.44476 87375.7
+785.44653 66184.3
+786.44763 10744.4
+794.36212 5670.3
+795.58710 7688.5
+835.94629 5430.8
+867.01843 5590.9
+874.06396 4602.4
+882.16113 5083.9
+915.05194 5750.4
+920.39478 9151.2
+972.48798 4951.5
+1019.68457 7132.0
+1057.25098 6574.2
+1088.88574 4875.0
+1198.27820 28883.1
+1218.93433 6026.3
+1288.44873 6052.3
+1392.26306 5182.4
+1550.02515 6118.4
+1666.91199 5479.1
+1770.80127 5047.1
+1777.12439 6216.2
+1869.75806 5191.2
+1877.32727 8846.8
+1879.02173 11748.5
+1879.54517 150114.9
+1879.93835 30964.8
+1880.32141 10988.0
+1880.61353 5481.3
+1880.77783 6092.5
+1880.93481 6689.1
+1907.04089 64503.0
+1909.67590 4551.5
+1956.96814 5461.2
+S	1999	1999	474.2709521
+Z	4	1893.05251
+121.79007 5463.5
+121.79403 2077.1
+122.04877 1512.2
+128.58484 1711.5
+145.43556 1612.6
+157.61415 1477.9
+165.76865 1465.9
+187.05255 1749.8
+188.25154 2252.0
+188.26442 1839.5
+188.27234 2046.5
+188.28308 3271.4
+188.29498 2966.2
+188.30859 2340.8
+198.90158 3363.5
+199.11790 1415.1
+199.23549 1466.1
+199.23950 1412.6
+199.26550 2363.4
+199.27623 4542.8
+199.28572 4525.5
+199.29695 4360.0
+199.30759 2834.5
+199.37323 1636.2
+199.39389 1659.7
+202.12022 1358.2
+204.07948 6538.8
+209.12781 3399.6
+209.88574 1603.2
+211.33299 1527.7
+213.95303 1851.7
+223.48924 1400.6
+226.15460 29156.8
+227.13776 2645.0
+227.15784 2854.2
+232.07504 4381.6
+244.16504 111150.0
+245.16867 13446.1
+324.18875 1511.0
+344.33432 1434.7
+345.15839 17479.2
+346.16254 3808.1
+347.16602 2181.1
+355.08701 1565.7
+362.18567 2238.1
+380.92804 1598.7
+381.38242 1808.7
+425.23892 8601.3
+427.56934 1978.9
+435.71722 3062.2
+442.94418 1919.6
+448.49438 2326.2
+448.74277 1888.2
+452.99847 4968.1
+458.24213 2135.2
+458.75061 11563.0
+459.00150 12591.5
+459.25186 13030.0
+459.50311 5262.2
+483.92535 1589.4
+492.73831 2861.2
+493.24142 3002.2
+494.08072 1575.7
+504.96301 2591.0
+517.30170 2469.7
+517.60699 1537.0
+530.18329 1606.4
+532.55865 3944.3
+532.79645 5565.8
+533.29688 3724.1
+533.80078 1982.4
+536.29858 2073.4
+537.37469 1493.9
+538.96063 3137.8
+541.30188 5662.1
+541.63422 6808.3
+541.96368 3201.1
+542.30237 2314.9
+542.59918 1462.2
+544.62762 60659.1
+544.96161 75081.2
+545.29486 48444.3
+545.62830 26369.6
+545.96088 2907.7
+546.96863 2275.8
+549.59576 1755.1
+549.78394 2494.8
+550.28815 3604.4
+550.63098 415075.1
+550.96503 464556.1
+551.29883 288290.4
+551.63257 118136.5
+551.96692 21682.6
+553.33038 5827.3
+553.65747 1813.3
+554.33728 1784.6
+554.66376 1972.3
+560.64532 13070.0
+560.98029 18077.8
+561.31256 7687.6
+561.64514 5716.5
+562.31342 2292.5
+566.64911 18232.1
+566.98358 20551.6
+567.31744 12963.4
+567.65338 3576.4
+573.63214 2945.7
+577.80292 1599.3
+580.24878 1956.5
+587.81842 2516.0
+588.31232 3027.0
+588.81573 3708.6
+596.82416 9359.5
+597.32672 7004.3
+597.65161 2083.0
+597.82568 2478.9
+597.99017 2828.5
+619.11481 1640.2
+634.34161 3835.5
+644.85382 2057.2
+653.36749 32270.4
+653.86884 33983.5
+654.37091 17157.2
+654.87244 4670.3
+662.32178 1470.8
+666.41620 2954.9
+668.39337 3228.3
+676.63647 3125.2
+709.90948 56761.0
+710.41138 61477.4
+710.91223 31318.4
+711.41241 8900.9
+715.63373 1615.1
+745.42810 2631.9
+745.92712 3334.9
+746.43396 1995.2
+780.45758 5308.6
+781.46271 2376.6
+795.59399 2012.9
+847.09430 1586.1
+866.48419 2772.9
+867.47760 1681.4
+883.83600 1552.3
+927.52417 2082.7
+928.53046 2022.5
+989.20331 1546.4
+1140.56702 1738.1
+1154.78455 1442.4
+1198.26721 7788.0
+1220.51770 1392.7
+1378.63489 1620.0
+1403.38208 1822.6
+1470.79016 1440.3
+1640.50757 1681.7
+1776.95837 1821.6
+1794.44934 1820.0
+1870.22827 2220.1
+1876.82947 1427.0
+1878.58643 3505.1
+1879.52649 53717.6
+1880.08569 2394.0
+1880.46606 3372.7
+1907.03149 19024.1
+S	2001	2001	693.797407933
+Z	3	2078.117
+Z	2	1385.747
+185.23228 627.3
+188.26938 2075.6
+188.28438 2062.6
+188.29803 1961.8
+188.31499 1412.6
+188.34259 691.8
+192.99275 707.0
+198.90388 1029.1
+199.19156 680.8
+199.27843 1531.2
+199.29015 2727.5
+199.38782 1060.9
+202.43481 698.5
+212.47667 576.6
+224.35701 627.1
+225.32469 633.5
+232.51897 542.0
+233.44672 586.7
+239.60690 702.6
+255.28375 572.0
+265.58130 599.1
+267.66290 734.8
+285.13379 647.6
+291.87933 656.4
+292.13922 988.2
+308.89069 880.6
+311.86942 670.3
+320.13507 9329.7
+333.66513 1447.3
+342.25906 727.9
+359.21356 1488.6
+380.20526 1701.1
+398.21637 959.4
+427.52896 633.5
+439.20767 11576.9
+467.20267 81526.9
+468.20868 963.8
+482.64447 737.8
+490.41025 707.5
+491.05341 596.2
+511.30045 2051.1
+531.77136 916.3
+532.56152 2125.4
+534.28094 862.4
+545.29834 769.7
+552.29175 47069.3
+553.29504 913.0
+556.34937 1313.4
+562.27448 2573.6
+570.01416 657.7
+574.35815 1318.4
+576.24719 681.9
+578.23438 2623.1
+578.64185 707.9
+578.80182 1731.3
+579.56122 1338.9
+580.20581 1241.1
+580.28644 387306.7
+580.77466 578.9
+580.79388 589.8
+581.01740 2348.3
+581.28912 5015.8
+581.65912 617.5
+581.77380 2348.3
+610.92151 680.8
+630.38196 1026.5
+631.97168 699.6
+635.99005 24516.7
+636.32440 20861.8
+636.65869 14607.1
+636.99451 2298.6
+648.34906 1130.5
+663.32544 1101.0
+665.37506 36102.9
+666.37561 870.7
+672.51611 1064.6
+672.67883 1389.1
+675.35730 3420.7
+676.65656 1061.8
+729.67297 6558.6
+730.00720 13127.1
+730.34088 10558.7
+730.67499 5828.4
+731.00812 1707.5
+731.09869 826.3
+731.33752 584.4
+738.37958 1397.8
+738.87714 662.4
+762.69708 1310.1
+763.02893 3781.9
+763.36743 3188.3
+763.69952 1046.0
+773.89221 837.8
+779.00372 1075.6
+779.20453 2411.8
+779.40533 4138.5
+779.60535 2765.9
+779.80426 1432.8
+780.00995 723.5
+782.36316 735.2
+787.79517 745.2
+800.73132 1122.9
+834.07104 1266.8
+834.40515 5932.5
+834.74207 5597.3
+835.07434 2146.2
+855.42316 1819.2
+855.92743 1291.3
+856.42853 1978.9
+905.46106 802.7
+933.44794 600.9
+953.48810 673.7
+965.00946 604.9
+1198.25061 3167.6
+1349.33997 682.9
+1525.37097 865.8
+1734.05591 656.0
+1869.96069 659.6
+1876.28369 657.7
+1878.49170 1077.0
+1878.98572 2010.5
+1879.58350 19746.3
+1879.88562 746.6
+1880.15576 2073.8
+1880.59253 876.0
+1880.88733 679.4
+1881.44177 684.5
+1906.63245 809.7
+1907.11084 7217.9
+1907.42725 650.9
+1907.95081 833.5
+1930.54529 994.3
+1937.31970 765.6
+S	2002	2002	598.722991267
+Z	3	1792.894
+Z	2	1195.598
+165.76704 14247.3
+171.54102 12084.9
+174.98206 10933.6
+177.75447 11108.8
+178.55478 10848.2
+182.78987 10728.4
+188.19267 10749.4
+188.24695 16419.6
+188.26802 34776.8
+188.27649 35035.4
+188.28880 41754.4
+188.30864 30851.4
+188.33047 11775.4
+193.43463 11285.3
+198.89966 16909.7
+199.18611 14122.7
+199.26431 22907.9
+199.28648 47007.3
+199.29593 35244.2
+199.38426 15822.5
+206.42755 11225.0
+213.65846 10774.2
+216.28468 10332.1
+229.59377 11585.4
+232.11148 12171.8
+246.15282 11412.8
+256.52356 11132.1
+280.19556 12463.0
+285.13321 25836.6
+309.71741 11269.5
+313.72839 10437.7
+320.13437 17488.9
+333.16373 23510.0
+350.26413 16437.7
+356.17261 19669.1
+360.22015 11538.7
+361.30933 10298.0
+380.20618 37993.7
+387.23123 11452.2
+400.93515 10812.1
+427.56250 12745.5
+457.56439 11612.6
+467.15167 16029.2
+467.20383 29910.3
+485.21317 26580.8
+509.17886 10610.7
+532.57941 42007.6
+549.16010 9321.8
+549.17712 9182.3
+570.30170 127773.3
+577.04431 10638.9
+580.28589 43106.5
+582.57849 11060.0
+676.64038 19023.6
+795.59686 19364.8
+808.36200 10424.7
+1057.23511 13912.2
+1060.58643 9535.8
+1188.29321 15371.0
+1198.29626 57684.5
+1308.83740 9627.4
+1315.46533 12083.5
+1525.48950 17644.5
+1535.57654 10700.2
+1777.04919 13350.1
+1835.79883 11209.6
+1878.49622 13372.3
+1879.51563 344666.3
+1880.26660 16154.3
+1881.86475 14813.8
+1904.22815 11064.3
+1906.98975 123204.0
+1918.30090 10895.2
+1924.93701 11245.5
+1930.71228 17244.0
+S	2003	2003	694.801241267
+Z	3	2081.128
+Z	2	1387.755
+182.07567 10837.3
+182.42363 10423.0
+188.25043 13675.0
+188.26730 16335.2
+188.27730 19865.1
+188.29129 19306.3
+188.30035 16371.0
+188.31348 15703.3
+198.90285 13485.7
+199.16777 12606.6
+199.19095 13964.2
+199.20445 12079.7
+199.25629 11297.9
+199.26541 19241.3
+199.27528 18813.9
+199.28870 41134.4
+199.31018 11801.1
+199.32825 11883.1
+199.34882 11445.2
+199.36833 12075.9
+199.38724 19318.0
+201.69778 9768.3
+213.47952 11301.4
+216.67468 9533.5
+217.87340 11683.1
+224.99483 10930.0
+226.04178 11817.3
+257.98575 8780.4
+271.84610 9882.1
+272.00439 10297.3
+299.41309 9870.7
+320.13492 28280.9
+346.63876 10948.4
+359.21121 13643.5
+364.13898 12220.2
+381.36194 12175.7
+427.55325 15706.3
+439.20782 33137.7
+463.99396 12656.8
+467.20242 224942.2
+468.20435 64230.2
+482.66348 14704.4
+485.87009 10063.9
+494.63385 11254.1
+532.54980 37006.5
+535.56165 12113.6
+552.29163 117699.0
+552.69470 10792.4
+553.29846 51072.6
+580.28632 1614257.8
+581.28925 534270.8
+582.29224 61089.9
+598.21094 12049.6
+635.98999 184869.7
+636.32489 200636.1
+636.65802 172436.5
+636.99164 49963.6
+665.37567 170634.7
+666.37891 48102.7
+676.62616 25126.1
+750.36041 11313.9
+804.15930 10977.6
+847.19299 10240.9
+848.89911 9316.8
+850.85254 11683.9
+882.77942 10686.5
+890.84644 12537.1
+917.27295 11018.1
+953.98486 12277.2
+1055.20068 11773.3
+1090.88220 15657.3
+1150.00610 10069.3
+1198.22974 58432.5
+1525.44861 13658.8
+1542.64038 10584.4
+1544.81726 14092.1
+1575.95410 11352.7
+1748.77747 14405.4
+1777.12659 18712.3
+1869.97168 11600.9
+1870.21741 12768.4
+1879.09766 35750.3
+1879.49402 339705.9
+1879.91895 37142.1
+1880.92834 12733.4
+1906.63525 15690.8
+1906.92053 126420.2
+1926.22156 10949.6
+1930.68738 13393.0
+S	2005	2005	530.2535271
+Z	4	2116.98281
+136.62114 842.4
+139.50568 897.7
+141.47597 736.6
+142.34445 1073.0
+142.48401 772.8
+157.60869 1062.7
+165.77007 910.4
+171.62741 1138.5
+179.06911 821.8
+184.66675 979.5
+188.19043 1172.2
+188.20457 902.1
+188.21996 714.1
+188.22467 702.9
+188.24651 885.0
+188.26158 1120.5
+188.27769 1040.7
+188.29367 1062.1
+188.31064 1431.2
+188.32195 821.9
+188.32872 957.3
+188.33807 802.7
+188.35918 1110.0
+197.44069 852.3
+198.89975 1237.0
+199.18840 1150.5
+199.20261 792.9
+199.20901 908.2
+199.28645 3537.4
+199.30423 1149.7
+199.31754 1020.4
+199.38588 2058.5
+200.84352 1093.8
+215.63451 818.3
+218.56209 939.1
+228.44640 843.9
+231.87192 782.0
+233.12827 9237.0
+234.13126 1344.7
+238.71004 958.1
+240.09717 1092.5
+241.08179 1139.4
+243.91283 862.2
+255.10869 5821.4
+255.30240 1006.6
+261.12314 3433.4
+261.61865 1249.8
+266.70465 1154.9
+270.13220 5099.4
+270.63373 1681.8
+272.13538 9040.0
+273.13867 1443.1
+274.62973 1018.3
+275.12506 3594.6
+275.61655 3387.7
+276.11908 1259.7
+276.62598 877.5
+279.20078 837.4
+280.19373 1249.7
+283.63739 7158.9
+284.12927 25662.8
+284.63086 5450.5
+285.16675 5545.6
+292.64264 48635.1
+293.14429 15225.0
+293.64468 3143.4
+295.33292 995.6
+303.17651 1250.3
+308.21555 791.2
+310.15076 1732.5
+316.64349 2497.8
+318.11035 983.6
+321.63684 2561.8
+322.12869 1848.1
+330.64172 26323.8
+331.14301 8431.5
+331.64401 1245.1
+336.62216 854.8
+341.16891 5495.1
+341.68369 11123.9
+342.18594 3370.5
+342.28622 947.6
+342.68762 950.6
+355.96997 887.0
+359.22437 1118.2
+365.16949 1239.1
+370.65356 1188.4
+371.17923 855.0
+379.16794 21362.5
+379.66983 8516.0
+380.17093 1995.8
+382.18475 1597.1
+382.28830 1013.2
+383.16595 1251.1
+384.82059 827.3
+386.21503 3431.3
+389.15039 1452.2
+389.18640 964.7
+391.21854 10753.7
+391.72107 4122.3
+392.16275 1535.8
+392.22012 1368.8
+393.22794 2537.1
+393.73138 1233.9
+393.96597 914.5
+394.22949 1153.4
+395.17801 1278.6
+396.19910 1270.0
+399.87213 9527.9
+400.19199 9883.6
+400.53934 2562.3
+401.19568 2262.2
+414.20874 12772.8
+415.21283 1738.0
+416.26114 4668.5
+417.26480 1126.0
+422.69962 3754.8
+423.20023 1924.3
+427.56018 1051.2
+430.18329 880.0
+437.70142 1065.4
+438.20828 5705.9
+440.75290 6826.7
+441.25452 2976.9
+446.70197 7173.1
+447.20297 2339.8
+448.02975 903.8
+448.73367 861.9
+451.69357 2915.8
+452.17993 2309.5
+452.68857 1334.5
+457.71561 1243.2
+458.90076 932.5
+460.69958 28548.5
+461.20074 13989.5
+461.70013 4942.1
+462.20410 1111.1
+476.27164 26999.3
+476.77332 15742.1
+477.17401 1428.8
+477.27325 3968.9
+477.77280 1162.0
+480.57437 2634.5
+485.44241 1410.0
+485.59387 878.0
+485.76978 2056.6
+485.90851 1482.3
+485.93967 896.5
+486.01486 1618.1
+486.51669 1048.6
+486.57736 421822.6
+486.63828 1174.5
+486.91147 362442.2
+486.96097 1430.7
+487.13782 2408.8
+487.16257 974.6
+487.24500 181545.2
+487.28397 1120.7
+487.47430 2190.6
+487.50058 1309.9
+487.57892 69180.9
+487.71851 2921.6
+487.91241 18899.2
+488.05200 2374.0
+488.22476 8858.3
+488.57877 1428.3
+488.72070 4618.2
+489.22739 1345.1
+494.19302 1270.9
+501.24014 23978.1
+502.24255 6093.0
+503.25171 1174.4
+507.18958 6963.6
+508.19223 1653.4
+510.79211 927.2
+511.22403 1160.0
+512.19995 1506.5
+513.31427 1255.7
+514.20569 1204.3
+523.73083 892.5
+529.23511 1513.6
+532.58624 2372.8
+542.53436 1058.2
+545.25183 1638.8
+545.30206 10693.2
+546.25232 1037.1
+546.30377 1834.7
+569.07697 951.0
+580.23102 1183.7
+583.73547 2125.6
+584.23560 1045.1
+590.29449 1743.7
+597.74774 855.4
+599.30444 140651.9
+599.80579 96445.0
+600.30652 41459.4
+600.80646 13500.7
+601.30585 3150.9
+614.47229 1157.2
+616.66656 1427.3
+617.00293 1128.1
+619.25250 3355.3
+619.75085 2207.9
+626.28552 1058.1
+630.43726 1249.9
+632.27338 1027.2
+642.26483 2202.2
+643.24127 1586.1
+653.95093 807.0
+660.27557 198555.9
+661.16718 1259.1
+661.27838 66482.3
+662.27771 17706.4
+663.27789 4691.9
+663.99713 1116.9
+664.31866 1377.9
+668.78528 1374.5
+670.00043 1599.0
+670.32648 1452.3
+671.39893 1161.4
+676.64240 1339.9
+677.29639 3077.6
+678.30096 1980.0
+680.83575 65537.2
+681.33716 50059.6
+681.83844 28164.7
+682.31720 3070.1
+682.36853 14626.8
+682.83972 1866.6
+683.36743 6736.0
+688.51923 815.6
+697.34045 1629.5
+698.31488 863.2
+711.35889 801.2
+720.35840 1673.1
+720.86176 2871.2
+727.28308 1896.8
+727.77826 1336.9
+728.31500 1771.5
+728.82996 1104.4
+729.01495 1371.2
+729.36267 369079.1
+729.44934 1002.5
+729.86328 317724.6
+730.36377 166930.8
+730.86475 61191.4
+731.15338 1023.9
+731.36530 15653.1
+731.45044 1687.6
+731.86389 3558.0
+731.95386 1969.1
+776.36200 2356.9
+777.37225 1357.0
+778.31653 6864.6
+779.32404 3802.0
+781.42993 12524.2
+782.43347 4752.7
+785.44318 2360.4
+786.44861 1938.2
+791.31189 1561.8
+794.88184 2473.8
+795.38519 2508.0
+795.57477 1271.5
+920.39069 10351.5
+921.39294 6363.0
+922.38812 1393.8
+951.53784 1138.8
+1103.65540 781.4
+1187.99158 1093.7
+1198.30737 4433.0
+1215.25549 902.8
+1288.34229 854.3
+1409.46008 905.5
+1525.49670 1454.1
+1613.16968 801.8
+1674.61218 1129.1
+1691.13501 931.5
+1797.81519 857.8
+1878.57690 1870.3
+1878.99475 2199.8
+1879.50256 26609.6
+1880.29517 2157.8
+1881.96948 1132.4
+1904.27966 794.5
+1906.92981 10598.0
+1907.26917 930.8
+1924.96265 968.9
+1929.45117 954.0
+1930.70251 1754.5
+1964.04443 967.2
+S	2006	2006	1879.9648246
+Z	2	3758.082
+Z	3	5636.619
+532.60730 1724.0
+580.40027 663.0
+589.77521 632.5
+676.62396 778.6
+714.96741 663.3
+811.35828 602.3
+833.84174 648.1
+844.60559 559.4
+857.10974 587.0
+870.21259 670.8
+1048.22400 545.4
+1057.24036 911.2
+1156.68738 577.9
+1198.37024 3172.7
+1267.63281 589.5
+1438.61804 672.7
+1468.29517 887.9
+1525.34460 679.0
+1649.96631 555.9
+1785.46716 651.8
+1826.93530 689.4
+1876.69250 713.1
+1879.04919 2040.0
+1879.49219 19464.4
+1880.00244 1780.7
+1882.21460 650.4
+1898.77026 628.0
+1906.69202 761.0
+1906.98987 6886.4
+1918.84875 789.4
+1941.86670 605.4
+1986.99097 643.9
+S	2007	2007	531.0050746
+Z	4	2119.989
+136.10153 9987.8
+137.38045 12074.2
+138.97841 9677.8
+141.97266 11243.1
+144.47426 9597.3
+170.85915 9034.5
+170.86493 8203.4
+171.62448 12530.2
+188.26292 9899.1
+188.27232 20150.9
+188.27979 15014.8
+188.28920 21148.0
+188.29738 10511.1
+188.30765 17217.9
+188.31938 11433.4
+195.45247 10380.7
+196.84229 8927.4
+198.90022 18079.5
+199.12112 9675.6
+199.18607 16946.1
+199.25876 22730.2
+199.28386 49845.5
+199.30161 17429.0
+199.31883 13005.4
+199.35269 16474.4
+199.38145 17533.0
+200.64020 10620.2
+214.50774 9595.8
+217.92603 9068.2
+233.12848 13738.9
+235.09685 10686.5
+255.10768 17932.8
+257.68170 11222.8
+270.13260 22323.2
+272.13467 45172.4
+275.12549 15043.7
+280.17630 16548.5
+280.61679 12010.1
+283.63696 38162.2
+284.12912 99088.9
+284.49411 10821.3
+284.63040 25219.1
+285.16534 21845.2
+292.64230 264754.4
+293.14386 48753.8
+293.64310 18206.1
+321.63708 17206.4
+322.12827 16071.2
+330.64169 108916.0
+331.14160 17191.8
+340.06323 12470.0
+340.70868 10190.6
+341.16779 17218.3
+341.68356 23914.2
+342.26157 11357.8
+370.65274 13309.9
+379.16724 95375.1
+379.67035 36520.7
+381.34421 11286.4
+391.21857 31240.1
+392.72522 46173.8
+393.22681 107228.0
+393.72934 29927.3
+396.67908 10984.3
+399.87192 40848.1
+400.19260 55168.5
+405.07162 10579.9
+413.64474 9344.1
+414.20816 53023.0
+427.53412 15204.6
+438.20911 16172.4
+440.75049 21106.7
+446.70056 40253.3
+451.69275 24614.4
+460.69955 134877.2
+461.20071 65893.2
+461.69717 12686.6
+476.27084 91267.9
+476.77173 50318.3
+486.57678 1989780.6
+486.91110 1529861.9
+487.24484 714985.3
+487.57877 240065.0
+487.71573 12537.9
+487.91089 52584.6
+488.22488 21280.8
+494.25153 10369.7
+501.23959 107366.8
+502.24249 16064.7
+507.19156 24411.2
+517.20520 14642.1
+532.61359 36533.5
+565.78302 9533.9
+599.30420 483294.7
+599.80524 297648.3
+600.30542 113768.7
+600.80615 32228.6
+601.89771 13336.4
+619.74725 11613.9
+630.39276 11780.6
+660.27539 881382.1
+661.27832 264897.7
+662.27924 72352.0
+676.62701 23520.6
+680.83527 272057.3
+681.33618 165416.8
+681.83649 71195.6
+682.37024 35083.7
+683.36920 18207.2
+720.86041 10988.9
+727.28015 13430.2
+729.36218 1731998.6
+729.86304 1318445.1
+730.36407 664782.1
+730.86499 205676.4
+731.09045 17712.3
+731.36353 44956.4
+761.34418 10477.9
+778.31848 21437.0
+781.43201 21924.0
+784.44385 22081.4
+785.44501 69980.9
+786.44904 20099.4
+787.64233 10409.6
+795.59900 20170.3
+806.77869 10997.8
+839.21948 11768.7
+853.48877 10866.7
+920.39392 53304.0
+921.39545 17694.4
+941.19696 11287.8
+990.38367 9966.8
+1003.78107 11830.2
+1033.19324 9980.8
+1057.20215 11431.8
+1141.53735 13331.2
+1198.36975 52217.5
+1239.08594 9824.0
+1462.10144 9607.9
+1489.64172 12236.3
+1495.28687 13630.0
+1870.23633 17654.1
+1876.34167 12241.1
+1879.02502 26527.5
+1879.49121 350736.4
+1879.93323 24064.1
+1880.29102 13621.9
+1880.43127 15304.0
+1882.34058 12270.5
+1906.92212 120645.4
+1930.53699 14325.8
+S	2009	2009	794.779407933
+Z	3	2381.063
+Z	2	1587.711
+224.85664 8891.5
+232.43811 11184.5
+258.91110 9977.8
+265.40509 9042.1
+271.69534 13229.5
+278.38940 9551.0
+279.91068 11511.0
+280.17087 15963.7
+288.20245 298334.3
+289.20667 27770.0
+294.45740 8964.5
+308.90366 10464.9
+322.45761 10584.7
+333.16064 13300.4
+374.11307 14610.8
+381.34543 9379.7
+381.67978 9923.2
+425.26053 18992.8
+428.18509 12623.5
+443.13666 10678.3
+464.93579 9238.0
+465.30066 9136.9
+467.13815 14855.9
+473.30286 9566.3
+479.16727 9725.9
+483.01669 11218.9
+486.88522 12095.0
+489.14185 36627.9
+494.68759 11332.4
+496.29727 42486.7
+497.29535 17457.4
+507.15439 23251.5
+507.24377 11009.0
+516.01166 10108.8
+524.93683 10804.0
+525.40753 11177.6
+532.62054 33408.6
+589.22559 9415.1
+610.38770 13592.4
+616.17902 10553.5
+624.66034 10518.6
+668.64471 11581.4
+669.85382 12850.5
+676.63013 20376.9
+680.31390 11840.1
+717.30762 9793.2
+738.44171 11427.8
+761.43585 12091.6
+776.33398 15274.2
+795.61053 15814.1
+848.47131 25180.1
+867.50317 13154.2
+874.92218 9176.9
+973.39758 13384.2
+1041.21460 11206.7
+1057.23914 15391.5
+1063.56104 34068.7
+1087.47192 13299.8
+1110.33301 10465.9
+1141.52136 11142.4
+1198.38538 57309.7
+1210.62524 19977.1
+1343.72290 10068.6
+1374.67505 11365.4
+1811.59131 11701.1
+1828.86255 11681.2
+1833.12854 10800.9
+1870.29419 11451.3
+1878.79822 11887.6
+1879.20178 34004.3
+1879.51025 321779.2
+1879.91650 25544.5
+1880.28821 13216.2
+1907.08411 118493.3
+1913.73315 9586.7
+1918.78271 13005.4
+1930.48865 16585.4
+S	2010	2010	530.2598146
+Z	4	2117.00796
+135.46124 602.8
+138.06079 544.1
+144.66397 521.8
+145.95796 590.0
+153.75125 598.1
+165.77199 830.8
+174.70158 526.7
+183.85532 551.9
+186.49518 550.3
+188.20679 612.1
+188.21529 642.2
+188.24251 741.7
+188.25655 1347.5
+188.27074 1801.0
+188.27696 1882.7
+188.29074 2075.8
+188.30698 1949.2
+195.39186 530.9
+198.90538 852.5
+199.18900 1047.3
+199.25905 1087.2
+199.27197 1226.1
+199.28607 1993.1
+199.29839 1500.3
+199.31837 689.0
+199.37921 836.4
+199.39484 1151.0
+199.56621 543.1
+233.12791 1495.9
+233.58884 599.8
+247.86987 594.6
+255.10854 2194.4
+264.63632 534.8
+270.13165 844.5
+271.38574 614.6
+271.54065 648.2
+272.13492 3375.4
+275.12375 923.8
+283.63580 1022.6
+284.12918 5471.8
+284.62985 1311.1
+285.16656 1756.5
+286.71530 575.5
+287.74969 521.8
+292.64233 15915.4
+293.14435 5744.4
+293.64511 983.3
+302.18509 636.6
+314.64511 681.3
+316.64273 674.0
+321.18063 562.9
+321.63724 630.9
+322.12906 605.6
+330.64178 6540.4
+331.14365 1940.9
+341.16730 882.6
+341.68384 2583.0
+357.21933 664.0
+363.61853 553.1
+367.90903 602.9
+372.19952 689.4
+379.16815 4751.2
+379.66870 2594.9
+380.16910 757.0
+381.38394 695.4
+383.16714 631.0
+386.21347 1412.6
+391.21948 945.1
+391.71555 877.5
+392.72449 1253.9
+397.18100 898.8
+399.87274 1414.8
+400.19113 4677.0
+400.54156 911.8
+414.20847 5402.2
+416.26117 975.1
+438.20721 1112.4
+440.75323 1074.1
+441.25647 767.4
+446.70343 1612.3
+447.20236 834.9
+451.15671 514.4
+452.18661 824.9
+460.69958 6632.5
+461.20099 4629.6
+461.70145 2035.7
+475.16281 689.0
+476.27155 4089.0
+476.77173 4098.9
+477.27231 1626.7
+482.69455 594.2
+486.57709 70320.1
+486.91144 113380.9
+487.24503 86834.7
+487.47333 784.4
+487.57870 32674.8
+487.80643 764.3
+487.91306 10272.5
+488.22150 1873.4
+488.71967 975.2
+489.21906 729.5
+501.24020 8686.3
+502.24222 2106.2
+507.18808 1033.5
+512.20563 1068.6
+532.46497 1531.1
+545.30328 954.8
+552.43024 643.2
+554.89069 547.9
+593.46472 557.0
+599.30432 23483.6
+599.80548 25747.7
+600.30621 12838.4
+600.80695 5529.8
+601.30896 1007.4
+609.23547 493.0
+611.09357 723.8
+618.42462 536.7
+639.23828 587.1
+660.27539 42968.1
+661.27808 20987.0
+662.27740 7417.3
+663.27551 1236.5
+669.40900 588.4
+671.39209 1195.3
+672.39655 706.5
+676.62964 1029.3
+680.83545 10420.9
+681.33704 13612.6
+681.83765 8837.4
+682.32703 2603.3
+682.37952 1374.0
+682.83917 934.9
+683.36499 1719.6
+707.84741 596.8
+729.36237 59797.7
+729.86310 91398.5
+730.36414 63241.6
+730.86499 27097.5
+731.18286 796.7
+731.36462 5692.9
+735.27863 636.0
+778.32019 1496.5
+779.31281 1008.4
+781.42963 1504.3
+782.43256 906.8
+783.44342 820.0
+920.38959 2097.3
+921.39362 1743.7
+922.40314 1049.1
+967.39642 573.3
+970.82953 718.8
+1035.92786 750.1
+1057.23267 815.0
+1168.41138 677.7
+1198.04407 3375.7
+1216.61560 633.8
+1465.35718 770.6
+1660.38208 655.0
+1870.27722 891.0
+1872.88464 734.6
+1878.39087 711.9
+1879.05725 728.4
+1879.23547 2099.5
+1879.49902 19936.8
+1880.83179 784.2
+1881.25903 552.0
+1882.59778 963.9
+1903.00269 643.0
+1907.05042 7931.0
+1910.01367 619.2
+1930.73352 1154.6
+1983.57129 611.2
+S	2011	2011	795.786991267
+Z	3	2384.086
+Z	2	1589.726
+207.71956 576.5
+211.32584 564.3
+216.75461 693.3
+229.15520 797.9
+230.07674 1791.0
+232.89778 622.6
+251.15039 865.9
+251.78262 676.2
+253.16573 3312.5
+253.40097 684.2
+263.08478 8383.7
+264.08688 882.5
+270.19214 3867.1
+271.17633 12207.5
+272.17963 1514.4
+283.14465 900.5
+284.63541 613.3
+287.68484 777.5
+288.18478 1240.9
+288.20291 173449.1
+288.62781 695.3
+288.72314 777.7
+289.20685 19581.9
+291.08011 1949.5
+298.18671 2220.8
+310.06845 1177.4
+312.75494 560.4
+322.18729 2670.4
+323.09708 623.5
+324.08206 955.4
+325.18860 878.5
+328.07709 5816.6
+329.08139 892.5
+341.10959 2612.9
+342.09235 1609.8
+345.10455 4138.9
+346.11612 1321.4
+353.18167 2933.9
+356.77646 661.6
+358.16153 1914.6
+359.11960 2278.7
+359.21173 576.3
+361.14893 619.4
+365.21149 582.5
+370.20911 1395.2
+371.19952 754.9
+373.19806 874.6
+374.11697 12975.0
+375.12091 2014.9
+379.15939 2434.4
+385.22040 1395.4
+386.20343 2215.2
+390.22403 1368.9
+392.12772 5001.0
+393.10489 1252.7
+393.13269 1157.6
+403.23041 1752.8
+407.24957 1646.5
+408.23434 1289.5
+408.94507 559.7
+411.11282 1342.1
+417.15921 2735.9
+421.09821 3356.6
+422.10101 1227.6
+424.22049 757.6
+425.26147 61680.9
+426.26471 17108.5
+427.26804 2477.6
+429.12549 3400.9
+437.16983 763.6
+438.12469 1661.2
+439.10950 9938.8
+440.11267 2930.3
+441.24622 1198.5
+443.13797 9031.6
+444.14209 2190.8
+446.15277 742.8
+446.30051 1428.4
+451.17331 699.2
+456.13519 11281.2
+457.12012 18455.0
+458.12280 4139.2
+459.12222 1362.1
+461.15012 1487.9
+461.26175 1441.7
+463.12561 929.4
+472.20218 1395.4
+474.14587 19712.0
+475.15018 6128.3
+476.15067 1194.5
+478.28735 2301.0
+479.27267 2259.4
+481.20441 1277.3
+481.24213 1139.8
+487.25235 1018.2
+488.24115 824.2
+489.14331 26789.8
+489.79559 3979.5
+490.14603 5196.0
+490.29752 1749.7
+496.29837 122312.0
+497.30118 46885.1
+498.23489 715.4
+498.30408 7740.9
+499.27817 704.7
+499.30508 664.6
+500.24939 628.9
+506.28445 1196.5
+507.15396 10407.8
+508.15872 2258.3
+514.66003 568.1
+524.20105 1479.8
+532.53949 2131.7
+536.79938 1983.6
+537.30029 1711.1
+545.31067 14866.3
+545.81201 15644.9
+546.31342 5280.2
+546.81262 1160.2
+549.16486 733.6
+550.14337 1683.7
+554.31635 23086.7
+554.81763 19356.2
+555.31812 6991.3
+555.82404 1360.4
+557.18536 1347.0
+567.16919 1984.2
+568.15021 7303.2
+569.15479 3305.0
+569.21307 1003.3
+570.15479 1188.1
+570.20233 2542.5
+571.20850 1730.5
+575.19385 1147.5
+575.33801 2454.6
+583.23181 747.0
+585.17749 12506.3
+586.15924 16256.5
+587.16223 6279.5
+587.23059 2028.3
+588.16547 1234.0
+592.24597 1543.8
+592.34949 1176.3
+594.32385 999.6
+603.18835 35244.8
+603.32446 1420.0
+603.82489 870.4
+604.19183 14195.4
+605.19446 3527.0
+605.24066 2151.2
+609.31842 688.3
+609.38202 48900.0
+610.38513 24810.3
+611.38733 5776.3
+611.82977 5165.3
+612.33063 7000.8
+612.39026 1487.3
+612.83081 3122.2
+613.33759 1026.3
+630.42584 1013.3
+635.22931 1328.0
+651.82739 1097.0
+652.32318 1118.3
+653.23572 1289.7
+654.24762 853.2
+659.34503 831.8
+659.84619 1423.8
+660.33923 8013.5
+660.83972 9945.6
+661.34106 4181.2
+661.84686 981.5
+663.22504 1151.8
+668.85071 36079.0
+669.35236 43953.6
+669.85358 18657.2
+670.27472 747.9
+670.35645 5802.4
+670.85406 1207.4
+671.24634 895.5
+674.40369 1055.5
+676.62207 1165.7
+678.34827 1202.1
+678.84357 961.2
+680.25262 2191.6
+681.23254 4441.2
+682.23724 2302.1
+682.36047 827.5
+687.34631 1061.1
+690.85254 2124.9
+691.36237 628.1
+693.37488 795.3
+697.26563 807.2
+698.26117 9328.7
+699.02686 1027.7
+699.24097 6745.1
+699.36292 1323.7
+700.24768 3927.5
+701.24707 989.7
+705.35681 771.6
+705.68768 669.3
+706.03156 833.8
+709.34174 890.9
+709.84161 1212.0
+715.28925 1819.7
+716.27203 29900.5
+717.27545 15553.1
+717.34802 918.0
+717.85431 2433.5
+718.27850 4104.6
+718.35419 4494.1
+718.85437 1004.9
+719.42975 3586.7
+720.41339 3823.4
+721.41449 2763.6
+726.36548 8441.4
+726.86682 12161.6
+727.36853 7341.6
+727.86597 2210.0
+728.37531 836.4
+732.31073 2540.2
+734.31390 1135.9
+736.40057 722.6
+737.44049 60605.8
+738.44324 38651.6
+739.44763 11977.2
+740.45288 1616.4
+748.33698 1091.7
+750.32196 4618.6
+751.32928 1346.2
+751.88342 725.3
+752.32843 1658.8
+752.86877 790.6
+758.33179 1095.0
+760.88147 1310.4
+761.44025 4579.9
+761.87469 901.3
+762.44238 907.7
+764.36182 1129.7
+764.86542 2695.1
+765.36090 2080.5
+765.85608 783.3
+766.87640 1677.2
+767.38849 2135.8
+767.87634 1386.7
+768.37341 1570.0
+769.37061 846.1
+770.87408 906.7
+772.87476 6530.3
+773.37317 16893.3
+773.86993 16071.7
+774.36761 8130.0
+774.86707 3426.3
+775.36414 992.7
+776.33862 7715.8
+820.44373 817.1
+826.32074 4373.5
+827.31561 2702.1
+830.46887 1052.7
+831.44562 1207.5
+843.35162 1120.7
+844.32996 3782.8
+845.33270 2001.6
+847.48859 4452.3
+848.47131 17206.1
+849.47534 10959.0
+850.47815 3319.3
+856.45209 851.6
+861.35663 721.2
+865.49884 65146.3
+866.50153 49861.2
+867.50391 15779.7
+868.50635 3138.3
+869.50433 876.3
+897.53241 859.3
+904.68146 1073.9
+924.90875 685.8
+933.49261 820.2
+937.36108 1368.6
+938.35803 999.5
+943.54327 1161.1
+944.54767 941.7
+949.51886 5633.5
+950.52216 2189.3
+954.37964 4946.8
+955.36877 6014.5
+956.36768 4393.9
+957.36615 1346.7
+961.56097 2967.4
+962.55603 2798.4
+972.38940 23066.3
+973.39203 14469.9
+974.39398 5069.3
+975.38898 1009.4
+978.58246 35538.0
+979.58594 31629.7
+980.58832 12472.9
+981.59595 2973.5
+1019.65747 557.3
+1019.71606 615.7
+1045.55322 2218.1
+1046.53931 1688.4
+1047.55542 740.5
+1050.44495 1683.2
+1051.43591 1025.1
+1052.43384 900.6
+1057.23291 940.0
+1063.56091 7435.9
+1064.55920 3408.9
+1067.46069 5462.2
+1068.45801 7152.0
+1069.45557 4397.9
+1070.45605 2116.5
+1085.47229 34676.9
+1086.47546 28404.6
+1087.47864 10975.1
+1088.47729 2797.2
+1089.61548 1811.0
+1090.60913 2781.7
+1091.60657 1810.8
+1104.94666 714.9
+1107.62622 11161.7
+1108.62793 11440.2
+1109.62622 4536.4
+1110.62830 1569.8
+1121.45764 614.4
+1138.49829 1471.7
+1139.49207 2254.3
+1140.48901 1823.2
+1143.49963 961.4
+1156.50964 5432.2
+1157.51416 4577.4
+1158.51013 1913.4
+1163.58203 1071.0
+1198.20154 3146.7
+1205.61682 788.1
+1210.62817 7197.8
+1211.62659 3542.6
+1212.63257 976.8
+1222.64893 3931.8
+1223.65320 5109.0
+1224.65417 2158.0
+1265.57251 2712.7
+1266.57373 3441.0
+1267.57202 1349.2
+1275.55859 946.2
+1276.55371 3957.6
+1277.54419 3270.3
+1278.53796 1208.8
+1293.56897 20421.2
+1294.57104 21037.9
+1295.57373 10147.3
+1296.57397 2898.4
+1356.69055 676.9
+1356.79895 571.6
+1373.69592 3728.4
+1374.69519 1105.1
+1375.70264 1003.8
+1379.66638 1007.6
+1388.64453 1293.8
+1389.63696 3864.5
+1390.63025 3358.0
+1391.63281 1517.9
+1406.65381 18146.9
+1407.65686 20970.4
+1408.65833 11634.0
+1409.66040 3652.4
+1425.65930 1171.8
+1525.45605 916.3
+1876.21436 764.9
+1876.96021 655.9
+1878.81921 1065.3
+1879.08264 1658.0
+1879.50183 20124.0
+1879.94861 1553.7
+1907.10938 7108.8
+1930.64368 1140.1
+S	2013	2013	530.2545046
+Z	4	2116.98672
+143.57887 539.9
+163.99164 585.0
+168.70792 615.4
+169.49962 682.0
+188.23790 620.5
+188.25056 975.4
+188.28795 2398.4
+188.30415 1640.1
+188.31282 1533.9
+188.35863 541.7
+188.43506 598.2
+199.18449 1029.5
+199.26009 944.7
+199.26778 1024.4
+199.28337 3068.2
+199.38164 908.8
+206.58633 612.7
+233.12805 2295.3
+233.80734 498.2
+244.22202 532.0
+245.89760 500.1
+255.10866 3130.8
+258.10794 608.5
+261.12231 1022.3
+270.13217 1527.1
+272.13501 5830.9
+275.12418 1297.6
+275.61838 1033.2
+283.63684 1713.2
+284.12921 7319.0
+284.63083 2733.9
+285.16705 2249.9
+286.17038 739.1
+292.64261 17400.2
+293.14386 7651.6
+293.64618 1277.1
+294.14771 606.2
+321.63745 1163.2
+330.64169 8281.7
+331.14331 3863.8
+331.64044 886.0
+341.16812 1952.1
+341.68375 2653.0
+342.18701 2141.3
+350.28592 775.0
+364.74744 665.4
+372.19827 1179.7
+379.16779 7695.9
+379.66934 4792.0
+380.17188 817.5
+380.66931 539.6
+386.21506 1294.8
+391.21893 2651.7
+391.71988 1660.2
+391.88428 637.4
+392.16031 752.0
+392.21848 644.4
+399.87067 2394.5
+400.19229 5554.5
+400.54062 1299.4
+401.19556 1034.4
+401.91495 646.3
+405.56024 515.8
+414.20859 8105.4
+415.21176 1261.9
+416.26025 1480.4
+422.69968 1849.3
+423.20422 727.4
+427.21622 556.1
+427.55579 756.9
+435.23462 556.4
+438.20966 1341.7
+440.75217 1774.4
+441.25378 1315.4
+446.70099 2277.6
+447.70325 684.6
+452.18600 1686.7
+452.68723 860.8
+460.69931 10193.1
+461.20108 6918.3
+461.70041 3431.1
+462.20184 1356.7
+471.62463 634.9
+476.27142 6573.6
+476.77307 6397.1
+477.27350 2653.9
+481.23508 687.8
+486.57718 106361.3
+486.91144 143159.0
+487.24503 105578.7
+487.47516 556.8
+487.57874 49734.8
+487.91257 15603.2
+488.24338 3864.4
+488.71994 1233.5
+489.22052 1124.2
+489.82443 536.2
+493.20474 622.1
+501.24014 12380.7
+502.24295 2365.1
+503.24158 862.6
+507.19058 2312.0
+511.22284 717.6
+511.62274 626.2
+512.20587 1026.2
+513.31470 720.9
+519.40027 690.7
+529.23712 1285.5
+532.54156 1888.1
+545.30133 2150.6
+546.30780 806.0
+549.17017 574.5
+579.36554 849.0
+599.30396 31686.7
+599.80579 36604.5
+600.30597 20860.5
+600.80713 8005.2
+601.30585 2654.7
+601.81110 651.0
+619.24988 741.3
+626.28436 886.1
+630.45044 613.6
+631.65277 598.1
+642.26166 979.0
+660.27521 64151.2
+661.27814 30447.6
+662.27692 11146.2
+663.27789 1994.0
+668.78656 723.7
+676.62115 1397.6
+677.28735 946.7
+680.83502 13614.7
+681.33710 20895.0
+681.83734 14114.0
+682.32312 3275.8
+682.37469 3838.7
+682.83636 1306.1
+683.36597 2458.7
+684.36401 910.2
+724.22278 692.7
+727.77673 620.2
+729.36218 83519.4
+729.86304 115083.1
+730.36371 81458.0
+730.86469 38306.4
+731.36438 12214.2
+731.86780 2642.0
+762.59576 557.6
+778.31934 2253.2
+779.31824 1036.8
+781.43042 2096.2
+782.43024 1639.5
+795.59668 1239.1
+902.41260 580.9
+920.39325 2510.6
+921.39771 2179.8
+922.39661 1245.3
+1015.39996 591.1
+1018.30212 602.0
+1026.04675 593.7
+1033.26929 724.5
+1067.77454 608.0
+1130.04736 579.2
+1198.21716 3494.0
+1520.21155 563.0
+1607.97046 637.5
+1667.19226 713.8
+1876.20215 876.9
+1878.85803 907.0
+1879.14587 1171.2
+1879.48547 20135.9
+1879.90601 1570.0
+1880.13733 708.9
+1880.86047 830.9
+1907.08679 7257.7
+1930.67468 1228.5
+S	2014	2014	531.0063246
+Z	4	2119.994
+135.04996 52712.5
+137.30571 55254.2
+137.63783 52545.9
+138.09087 48096.7
+138.09503 43883.9
+148.55215 48993.0
+149.05403 55445.5
+150.77475 46984.5
+154.56334 48745.9
+157.66302 59535.9
+169.51079 62350.8
+185.14879 54066.5
+188.21391 45985.5
+188.22157 52419.3
+188.26521 69806.1
+188.27257 61431.0
+188.28310 76853.6
+188.30104 60183.4
+188.31413 51029.3
+188.32822 64485.7
+188.34781 59779.0
+188.36247 56478.6
+188.37846 63845.3
+188.38478 45548.9
+199.19666 99414.1
+199.20741 72540.9
+199.21875 82080.7
+199.23479 103474.0
+199.24422 61910.8
+199.27242 102319.0
+199.27853 79341.5
+199.29372 236171.0
+199.30615 109409.8
+199.31181 88009.8
+199.39333 83763.1
+199.40483 69098.0
+226.94844 55786.7
+244.16676 55816.8
+246.60103 51404.5
+271.68091 63431.4
+271.98828 51761.3
+272.13553 158244.2
+283.63632 168072.9
+284.12952 383370.3
+284.63455 53119.6
+285.16672 78528.7
+292.64230 1013177.3
+293.14359 223170.9
+316.64227 81181.7
+321.63687 72430.2
+330.64160 423719.0
+341.68475 138996.6
+342.30560 72138.8
+368.74918 49163.4
+370.43344 47737.0
+379.16751 291999.6
+379.66907 129864.5
+388.38651 52434.6
+391.21585 83823.1
+399.87201 158174.4
+400.19250 251580.0
+400.53812 83916.0
+410.34174 51933.4
+414.20905 305562.3
+427.58670 66100.9
+438.20541 85103.3
+440.75568 89473.9
+446.70029 91034.7
+447.21167 59066.8
+451.69092 52584.4
+460.69882 575443.0
+461.20126 307207.3
+461.70166 67912.9
+476.27017 216996.8
+477.27518 78541.2
+486.57663 8354149.5
+486.91086 5574030.5
+487.24509 2893640.8
+487.57861 1016340.4
+487.91321 230104.8
+488.22006 127297.9
+501.23920 421122.0
+517.21490 83593.6
+521.39819 55060.0
+532.53308 167224.9
+544.32104 50025.3
+549.15497 66374.6
+580.41675 55521.3
+599.30383 1718659.1
+599.80542 1183684.5
+600.30548 383508.3
+600.80762 115706.0
+619.24786 68608.1
+623.62537 90079.6
+642.25653 64615.2
+660.27496 3220103.3
+661.27777 901350.9
+662.27545 270348.8
+668.78455 69106.4
+676.63354 126615.1
+680.83508 917030.9
+681.33679 731129.3
+681.83746 334258.1
+682.36908 110603.9
+684.26581 58431.0
+686.50256 49706.8
+706.77478 50312.1
+729.36200 6542299.0
+729.86304 4858651.0
+730.36426 2327428.8
+730.86554 750285.2
+731.19379 80231.0
+731.36328 203308.2
+778.31946 58204.7
+785.44611 97153.5
+795.60925 99607.9
+823.84778 47263.2
+864.15137 53448.5
+884.64716 67289.5
+920.39209 129991.9
+971.87408 60636.4
+1037.66638 49622.9
+1057.24243 87877.8
+1140.21765 55642.7
+1185.63489 60221.8
+1198.19189 346347.7
+1198.43201 52119.2
+1208.38013 49672.2
+1497.48132 51863.0
+1525.58606 63350.2
+1726.18188 50341.1
+1860.08887 67021.1
+1878.74622 69276.6
+1879.50256 1823518.1
+1880.30518 60655.2
+1880.49182 84694.8
+1907.08325 691798.2
+1918.84680 71965.4
+S	2015	2015	1879.97299127
+Z	2	3758.098
+Z	3	5636.644
+532.50537 1784.4
+549.16974 909.9
+567.30371 686.8
+642.23792 625.3
+676.62329 1129.8
+731.13623 1084.4
+823.91150 588.2
+979.54517 583.8
+983.64301 604.4
+1019.70197 768.7
+1198.12646 3510.4
+1237.78918 581.1
+1328.58911 608.7
+1443.84399 606.0
+1654.66345 653.9
+1703.06360 653.5
+1776.94421 697.6
+1831.36633 641.9
+1870.41443 864.5
+1877.26868 658.5
+1879.51038 19656.3
+1880.31445 867.1
+1880.57715 793.9
+1881.33423 648.2
+1907.08936 7413.5
+1930.63965 858.2
+S	2017	2017	530.2542596
+Z	4	2116.98574
+137.29703 45359.2
+142.56909 45342.2
+152.82845 53426.3
+165.86299 48036.7
+171.64261 52615.4
+181.50711 47921.9
+182.79225 54281.5
+188.24554 82937.7
+188.25571 113668.7
+188.27298 156813.0
+188.28351 197113.5
+188.29655 216757.5
+188.30743 188720.3
+188.34804 60566.5
+188.38626 52329.9
+198.90552 97414.7
+199.19150 69797.8
+199.26714 71940.7
+199.27786 63426.8
+199.28902 298321.4
+199.30183 74363.1
+199.38741 89446.7
+200.23625 41654.0
+213.08540 59610.7
+214.02232 46831.7
+214.03127 49257.2
+214.85327 49632.2
+233.12788 255726.8
+255.10823 173286.1
+261.61954 59948.2
+262.66544 52983.8
+265.12173 55039.3
+270.13159 152306.7
+272.13516 302663.9
+273.93936 56978.9
+274.04169 58079.7
+274.20786 46077.1
+274.81674 47744.0
+275.12378 164894.2
+275.61588 107464.2
+283.63684 266861.5
+284.12918 759671.4
+284.63068 191846.9
+285.12964 61605.1
+285.16626 129176.4
+286.13629 46737.5
+292.64249 1922247.8
+293.14362 388093.8
+293.64359 64615.4
+297.92242 47405.8
+306.34326 49146.7
+306.53653 51757.9
+308.91879 65437.7
+313.21667 51731.6
+316.64536 83692.4
+318.11035 60347.8
+321.63614 240156.2
+322.12595 54073.9
+330.64148 809935.8
+331.14313 258019.9
+341.16855 122951.6
+341.68445 313171.3
+342.18506 104142.4
+352.44760 60562.8
+379.16766 812135.3
+379.66855 220699.3
+380.16879 73929.6
+386.21225 67854.4
+391.21887 408752.7
+391.72171 102714.8
+399.87250 319451.6
+400.19193 386616.3
+414.20889 458051.3
+415.21274 71225.0
+416.26065 135059.2
+422.69992 66445.2
+427.55182 81180.0
+437.70523 55826.6
+438.20953 129600.7
+440.75372 247578.8
+441.25262 85512.3
+446.70132 269910.7
+451.69366 104312.4
+452.18439 92875.9
+458.20285 44397.9
+460.69913 978125.2
+461.20093 470761.2
+461.70291 113096.5
+476.27087 767793.6
+476.77307 383486.8
+477.27139 53985.6
+485.29324 53419.6
+486.01495 107792.9
+486.57709 15626907.0
+486.91129 11897414.0
+486.95981 79370.0
+487.24493 5736366.0
+487.47845 69530.4
+487.57889 2092207.3
+487.71619 104677.7
+487.86560 48114.4
+487.91321 401505.9
+488.04575 65327.0
+488.22385 218978.9
+501.24026 897965.1
+502.24442 134892.9
+507.18869 196079.9
+512.20569 102297.1
+523.35498 54864.6
+529.23907 71895.9
+532.53833 172345.4
+542.75140 47249.3
+545.30206 189525.4
+546.31250 50482.6
+549.17877 57838.1
+599.30420 4339756.5
+599.80542 2644726.8
+600.30634 1017399.9
+600.80597 269481.7
+604.66882 59180.6
+616.67126 56030.1
+619.74933 100526.7
+630.46313 65603.6
+642.26880 91298.0
+660.27539 6571068.0
+661.27814 2085557.8
+662.27789 452026.8
+663.26886 80949.6
+666.52966 59181.8
+676.60852 90572.3
+680.83545 2105162.5
+681.33728 1528658.5
+681.83783 657470.9
+682.36859 300972.3
+683.36810 140976.2
+711.80743 78152.2
+729.36237 12565748.0
+729.86316 9121513.0
+730.36426 4517826.5
+730.86609 1471345.6
+731.36890 342958.3
+731.45264 67455.3
+773.29443 56705.2
+778.31677 254738.9
+779.31635 75881.8
+781.42902 198643.2
+782.42944 68465.3
+795.61548 78057.5
+901.31995 49398.8
+920.38904 252594.2
+921.39282 151987.4
+963.67377 47789.5
+1017.03564 65663.4
+1019.68665 53744.8
+1057.17139 49177.5
+1098.41113 61461.2
+1188.12842 58681.9
+1198.21155 250858.7
+1514.08191 50825.0
+1578.02344 55702.9
+1580.10999 65685.1
+1782.34033 52277.3
+1854.08630 47982.1
+1878.82581 61308.6
+1879.46753 1678738.6
+1879.70630 264023.2
+1879.93579 110501.4
+1881.32617 49073.1
+1884.06335 56301.7
+1907.10327 617483.9
+1918.85071 72264.1
+1985.43311 66566.6
+S	2018	2018	531.0058246
+Z	4	2119.992
+142.94258 33086.1
+153.41287 37568.7
+160.49982 35209.9
+166.19717 32756.9
+169.51874 36652.2
+175.27135 32032.8
+176.84665 33201.6
+178.50653 35223.1
+188.23415 32613.8
+188.24390 52411.0
+188.25851 59643.6
+188.27142 45248.8
+188.28804 50284.8
+188.30508 29549.7
+188.31310 33426.5
+188.32274 53200.9
+188.34741 42568.3
+188.35823 36143.1
+188.36725 42482.8
+194.37296 29285.9
+197.34895 34756.8
+198.90483 83278.6
+199.18727 47625.2
+199.19684 37295.4
+199.22330 37188.9
+199.26933 34803.8
+199.28513 145197.9
+199.29367 97933.2
+199.31252 69956.0
+199.38316 75287.7
+204.75072 31561.1
+206.22455 39202.9
+210.69508 34134.5
+226.93770 37608.4
+229.85550 30872.0
+233.12822 105427.9
+243.72340 36355.0
+245.69293 31147.2
+248.45500 32224.2
+255.10844 153861.0
+270.13171 109225.9
+272.13492 172825.2
+275.12366 77895.4
+283.63739 161442.3
+284.12930 544505.5
+284.63065 161815.6
+285.16660 96847.4
+292.64233 1176671.5
+293.14389 262923.6
+293.64471 45559.0
+303.17941 38966.0
+309.25522 32983.2
+316.64459 60017.3
+321.63632 60613.8
+330.64148 532979.1
+331.14273 139644.0
+331.38351 33514.3
+331.39517 28746.2
+331.64716 42430.4
+335.74908 31912.0
+341.16977 58997.8
+341.68365 130406.2
+342.18576 36970.1
+343.63156 36136.3
+370.16110 56545.2
+372.19785 43300.3
+379.16794 440604.7
+379.66867 186200.9
+386.21027 50666.9
+391.21783 153755.7
+394.64285 43009.4
+399.07645 35564.1
+399.87158 298370.6
+400.19229 276863.9
+400.54144 50987.6
+403.18570 34376.9
+414.20889 311125.1
+416.26257 62770.9
+422.70105 55487.9
+437.10101 36426.9
+437.70297 32667.5
+438.20618 98625.3
+440.75259 88023.0
+441.25311 37570.8
+446.70154 139890.2
+447.20483 57883.6
+451.69330 105115.3
+452.18546 45395.8
+460.69922 618901.7
+461.20071 302169.2
+461.70523 95754.1
+476.27179 382409.2
+476.77429 253143.1
+485.43878 44440.3
+485.77142 46851.3
+486.01773 47500.4
+486.57690 9508628.0
+486.91129 7188524.0
+487.13522 76127.6
+487.24481 3888763.3
+487.57864 1300334.0
+487.91248 254525.6
+488.21857 123878.1
+488.71948 44673.4
+501.23981 391078.0
+502.24539 122346.3
+507.18973 113506.5
+508.18994 52291.8
+512.72388 32484.7
+532.54547 125738.6
+541.56256 31771.4
+545.24554 36898.8
+545.30200 64411.7
+599.30408 2237951.3
+599.80566 1482579.8
+600.30585 616226.6
+600.80530 149779.0
+601.31372 43102.9
+617.00391 40757.9
+619.25018 74691.0
+619.75385 53246.4
+642.26770 54164.3
+660.27539 4021957.8
+661.27820 1234742.6
+662.27545 311838.8
+663.27979 49020.2
+676.61121 75313.5
+680.83551 1169841.0
+681.33667 893363.7
+681.83777 403007.5
+682.36938 150686.1
+682.82916 44547.1
+720.85736 40079.1
+729.36243 7452108.0
+729.86322 6089366.0
+730.36401 2908648.3
+730.86493 883944.0
+731.20996 45046.7
+731.36475 220496.0
+731.45526 46102.5
+778.31952 130380.9
+779.33997 46028.4
+781.43439 109835.7
+782.87225 37092.3
+795.38837 45928.3
+795.60822 64254.2
+920.38702 166924.1
+921.39478 111003.2
+994.09241 34256.8
+1019.68311 43488.0
+1110.67419 31855.4
+1198.22534 199119.6
+1292.11169 37507.8
+1403.52747 30900.7
+1525.60120 52458.5
+1541.10046 32416.5
+1736.52527 41693.2
+1774.18262 33669.4
+1870.39233 50782.2
+1878.98706 82220.5
+1879.46118 1144598.0
+1879.94495 86639.0
+1907.12610 432905.8
+1930.85669 76393.5
+1945.06299 44899.9
+S	2019	2019	1879.9588246
+Z	2	3758.07
+Z	3	5636.601
+522.60901 579.6
+532.54388 1726.3
+549.20465 880.8
+581.84528 647.7
+630.46466 847.2
+631.39740 699.4
+676.62311 1429.3
+685.71796 717.8
+795.60028 1360.2
+797.25592 615.1
+824.98157 615.3
+890.25818 680.1
+947.65778 663.1
+990.95422 572.2
+1012.77777 629.8
+1052.46558 700.9
+1055.06738 713.7
+1079.39331 641.6
+1107.54810 623.8
+1198.20117 3177.7
+1198.38049 814.9
+1776.99072 901.7
+1876.65369 677.7
+1878.74207 699.8
+1879.06213 1552.8
+1879.49487 20059.4
+1879.91614 1511.5
+1883.82275 905.9
+1907.04382 7581.0
+S	2021	2021	530.2612171
+Z	4	2117.01357
+137.28455 541.8
+138.81137 554.9
+142.07408 632.9
+148.70990 605.8
+165.76842 863.6
+167.46158 555.2
+180.70364 573.4
+182.78596 742.7
+184.27957 560.7
+196.05858 533.6
+197.70093 805.3
+198.90401 826.0
+199.17093 1259.5
+199.25565 906.4
+199.27007 1903.2
+199.27980 2129.5
+199.28767 1849.1
+199.29749 1064.9
+199.36734 895.4
+213.08650 759.5
+215.31886 591.6
+216.18156 609.1
+217.91096 549.1
+221.93694 792.1
+233.12846 6748.0
+233.57816 685.2
+233.78003 531.3
+234.13246 957.3
+237.13498 520.2
+238.70750 677.3
+241.08191 782.8
+254.12311 611.4
+255.10872 3850.2
+258.10889 934.5
+261.12335 2015.1
+265.12137 648.7
+270.13239 3027.1
+271.20367 606.9
+272.13510 5843.5
+273.58533 730.8
+275.12436 2412.9
+275.61676 2103.9
+278.17975 651.4
+280.18811 673.1
+283.63757 5760.9
+284.12952 14302.0
+284.63135 2791.8
+285.13171 1466.2
+285.16681 2392.2
+286.14682 597.9
+290.65646 589.6
+292.64285 37222.5
+293.14426 8752.5
+293.64606 2882.5
+310.15063 1083.4
+313.12250 799.1
+316.64423 2396.3
+318.11365 858.7
+321.63589 1495.1
+322.12643 1147.8
+330.64191 14865.6
+331.14359 5559.7
+331.64313 973.2
+341.16922 2869.7
+341.68411 7760.8
+342.18506 2300.4
+355.32141 712.2
+365.16943 1285.5
+370.16193 922.5
+370.64972 749.2
+372.11966 772.5
+372.19916 1331.4
+373.57181 535.6
+379.16830 11879.3
+379.66965 5131.5
+381.36804 817.9
+383.16647 1271.1
+386.21500 2069.1
+387.21265 797.5
+391.21887 5215.6
+391.72131 2804.2
+392.16629 820.3
+395.17990 1297.2
+396.18475 970.7
+399.87292 5892.2
+400.19241 6669.3
+400.54132 1288.5
+401.19803 1336.0
+414.20929 8049.6
+415.21024 1170.0
+416.26157 3518.8
+417.18091 725.7
+417.26514 817.0
+422.70093 2470.1
+427.55511 855.4
+429.50595 513.3
+430.71646 571.9
+438.20895 3430.3
+439.21506 693.5
+440.75345 4357.8
+441.25424 1689.8
+441.75467 620.2
+446.70224 4458.0
+447.20285 1357.6
+451.69522 1654.3
+452.18762 1142.6
+457.21500 1521.7
+457.71686 910.9
+460.69986 17765.8
+461.20139 9755.6
+461.70273 4272.4
+462.20639 641.6
+476.27133 17203.7
+476.77341 8520.5
+477.27533 2399.0
+480.57504 1649.4
+481.56876 685.9
+482.67029 831.7
+485.44232 1053.4
+485.77814 676.6
+485.89886 662.8
+486.01712 1757.9
+486.34900 1067.9
+486.57782 255765.0
+486.62970 1109.8
+486.91180 248517.2
+487.13675 1652.6
+487.24557 136277.8
+487.29437 1147.9
+487.47452 1779.3
+487.57919 51741.6
+487.72159 970.4
+487.91330 15461.6
+488.05093 1126.1
+488.22507 4564.6
+488.72101 3182.3
+489.22278 856.1
+489.48984 665.5
+489.53043 538.2
+497.24512 615.1
+501.24054 14833.6
+502.24417 4289.9
+503.25085 617.4
+507.14850 634.8
+507.18936 5123.1
+507.63242 542.9
+508.19012 1668.7
+511.22153 1343.3
+512.20294 1650.3
+512.72534 640.9
+513.21014 676.2
+514.20630 1261.8
+529.23572 2203.3
+530.23138 669.6
+532.48126 1952.0
+545.25238 920.6
+545.30304 5832.6
+546.30548 1750.6
+549.16840 856.5
+555.25098 762.5
+571.00244 707.7
+578.23029 773.6
+583.72931 815.5
+590.29962 688.2
+599.30481 85421.9
+599.80609 61377.6
+600.30658 27730.2
+600.80743 8270.9
+601.30774 2012.7
+617.00342 1629.1
+619.25433 1437.8
+619.75061 1144.3
+630.28613 599.8
+642.26703 1212.4
+658.47662 707.8
+659.39606 768.1
+660.27606 128343.9
+661.27875 42941.7
+662.27814 14271.5
+663.27783 2634.4
+664.26868 911.5
+668.78827 1082.7
+676.63434 1220.7
+677.29681 1752.7
+678.30328 903.6
+680.83606 40504.7
+681.33777 38260.9
+681.83850 17700.5
+682.31915 1515.1
+682.36896 8753.1
+682.83997 1274.2
+683.36578 3876.4
+684.36157 915.7
+720.35291 1053.4
+721.35352 876.5
+727.27606 1247.2
+728.33563 1040.2
+728.81989 941.0
+729.36316 214120.4
+729.86401 209484.9
+730.36438 120996.9
+730.86572 41546.7
+731.36646 12835.4
+731.44708 894.1
+731.87274 3578.7
+731.96936 919.4
+778.31635 3500.5
+779.31891 2187.2
+780.31818 828.2
+781.43127 5996.2
+782.43475 2568.5
+791.31647 1292.6
+794.88965 1004.7
+795.37854 1154.1
+795.61261 849.1
+858.06415 821.6
+920.39142 7037.9
+921.39301 3844.1
+922.39172 1248.4
+951.54596 842.9
+983.05792 603.8
+1188.26599 735.6
+1198.07104 3324.2
+1269.62439 569.5
+1320.86401 528.1
+1398.80408 592.0
+1456.35547 611.5
+1870.27869 912.1
+1873.92151 662.9
+1876.07263 735.5
+1878.82202 796.7
+1879.20227 2011.5
+1879.50818 19671.1
+1879.84277 1530.1
+1880.16711 1300.5
+1905.56555 670.3
+1907.04663 7499.6
+1907.34033 978.6
+1908.65259 626.2
+1918.83350 916.6
+1936.36621 623.2
+S	2022	2022	446.196991267
+Z	3	1335.316
+Z	2	890.546
+113.42271 616.1
+120.08022 12256.5
+121.08379 1581.0
+121.14263 585.4
+121.79124 1866.6
+136.29359 574.2
+140.34604 558.4
+146.93935 659.6
+147.11276 866.3
+153.42447 576.0
+175.12653 555.3
+178.36543 544.7
+189.63614 543.0
+189.82381 533.9
+190.84921 566.7
+195.83440 623.7
+198.90654 899.5
+199.23746 919.6
+199.26820 1316.0
+199.27615 3142.9
+199.28729 1287.1
+199.30898 663.7
+199.37405 980.2
+207.72272 524.9
+212.40239 599.3
+215.13861 705.0
+224.87231 601.3
+225.06635 638.9
+225.12297 729.0
+232.98030 709.9
+233.16447 156159.2
+233.34935 957.1
+233.54277 765.3
+234.16776 31868.5
+235.17155 2148.7
+242.18570 4822.4
+243.13570 565.8
+243.17018 789.5
+255.19127 642.0
+255.33054 627.2
+257.54480 550.2
+260.19644 35074.8
+260.79526 563.4
+261.15930 33276.5
+261.20004 6080.9
+262.16260 5926.5
+276.13385 3814.8
+278.18735 651.5
+281.93445 633.7
+304.12823 765.3
+306.68884 8014.4
+307.19046 4328.5
+307.68857 704.8
+315.69443 2388.0
+316.13498 708.0
+316.19257 808.4
+328.52686 578.3
+353.18094 1401.8
+354.16702 961.5
+356.21826 1096.6
+371.19522 2591.5
+371.22812 13858.7
+372.20139 799.8
+372.23114 3628.8
+379.15997 991.2
+380.71335 1470.2
+381.21536 747.1
+389.21576 20526.1
+389.24054 12409.5
+389.72974 5869.7
+390.21988 6062.7
+390.73068 785.8
+391.15292 736.5
+391.22464 1349.3
+404.26712 537.4
+418.36823 550.2
+436.34360 537.8
+466.26767 835.0
+467.24747 3196.6
+468.24948 990.3
+474.30585 1675.4
+475.30521 779.5
+484.27524 2441.0
+485.27850 1091.9
+486.87924 590.0
+500.24982 2117.6
+502.32208 103089.6
+503.28500 1213.1
+503.32547 37783.6
+503.92023 670.9
+504.32889 7892.4
+518.25671 1524.3
+519.26227 704.1
+532.48212 1931.8
+538.30591 813.8
+554.71265 571.2
+569.09656 599.8
+580.33356 1443.1
+586.32214 1339.7
+587.32599 788.0
+594.36157 1172.2
+596.30627 766.5
+600.62793 587.6
+603.34930 2950.0
+604.34973 1201.7
+612.37000 45363.9
+613.34955 38620.6
+613.39478 7685.4
+614.35364 20394.4
+614.40436 1417.8
+615.35620 5235.2
+616.36530 866.0
+618.23120 581.0
+628.70728 1730.6
+629.00842 797.9
+629.55548 1738.0
+629.70898 969.8
+629.81805 759.5
+630.38031 398948.0
+630.45105 1858.8
+631.20905 2116.2
+631.38208 181906.0
+631.75610 1228.7
+631.93884 1307.7
+632.05524 1721.5
+632.20569 650.7
+632.38391 46686.1
+633.06824 1148.6
+633.38635 7225.3
+654.69897 680.8
+676.60602 1311.4
+699.40106 997.4
+716.42828 659.6
+726.41278 1574.0
+742.41266 5198.2
+743.41431 3870.5
+744.42700 10630.3
+745.42865 4988.0
+746.43512 1604.3
+760.41309 682.0
+761.43549 677.9
+777.44861 61235.4
+778.45172 38771.9
+779.45441 12926.4
+780.45569 2107.3
+787.43237 2746.5
+788.43530 1163.6
+795.61401 857.5
+818.45264 641.9
+926.53497 798.1
+928.75824 590.6
+929.33691 593.4
+948.84827 551.8
+969.59583 651.3
+1198.08313 3223.0
+1433.67065 633.7
+1776.89844 736.4
+S	2023	2023	668.3598246
+Z	1	667.352
+170.42690 611.7
+178.04610 900.6
+182.78842 717.0
+187.09369 699.7
+188.24641 758.1
+188.25664 1050.8
+188.27283 1161.9
+188.28581 1242.6
+188.29491 1001.9
+188.30278 948.6
+188.31007 1122.1
+188.31877 967.9
+198.90964 673.3
+199.19543 866.1
+199.24864 717.5
+199.27139 1871.0
+199.28381 2566.7
+199.29170 1840.8
+200.69215 802.6
+211.23087 559.2
+226.15437 1362.1
+229.13304 874.5
+231.14749 846.7
+236.13857 901.5
+241.02184 669.6
+249.12273 1762.8
+254.14964 1475.7
+255.29984 731.8
+259.14407 873.5
+267.13361 2938.3
+302.14896 2822.9
+307.14142 1079.2
+308.91171 715.8
+321.19473 2055.7
+331.48834 664.2
+344.19638 5150.6
+344.73361 638.7
+349.19083 4611.0
+352.16473 1400.3
+356.19699 3742.5
+357.19986 806.7
+369.70438 705.9
+373.22256 47214.3
+374.22592 8728.9
+401.21719 46517.1
+402.22046 7270.6
+405.56302 675.7
+406.21106 3817.5
+413.25400 1598.0
+416.87228 693.5
+427.56256 991.6
+433.34918 670.6
+441.24930 4609.7
+445.24243 3704.3
+446.24893 942.9
+461.21786 891.7
+463.25360 34762.9
+464.25757 6680.6
+467.00934 718.1
+475.26898 11697.1
+476.27243 4698.8
+477.21176 3327.0
+478.26736 1468.6
+479.22882 3944.3
+482.67426 699.2
+491.98584 681.1
+502.28339 1402.0
+503.26355 26593.8
+504.26770 9207.8
+508.24658 738.8
+520.29022 69661.4
+520.92633 673.6
+521.29395 22021.7
+524.91211 642.2
+530.27441 27922.9
+531.27802 8125.3
+532.47992 2280.8
+546.93158 873.3
+547.61688 805.5
+548.28485 210195.3
+548.95758 918.0
+549.11920 840.9
+549.17407 978.5
+549.28784 54155.9
+549.64594 1350.9
+554.83154 703.4
+560.32355 1627.3
+567.29492 7434.6
+567.79651 3685.6
+568.29578 1050.8
+588.31696 3453.6
+589.32104 1942.5
+605.34143 4222.7
+606.34338 1576.2
+611.37024 1461.7
+622.32825 2815.1
+630.42548 1219.2
+631.32214 10158.9
+632.32385 2948.1
+647.32062 1837.4
+649.33197 75687.4
+650.33496 21218.7
+662.27930 736.8
+676.62000 988.0
+721.35199 3468.4
+752.45325 760.8
+776.63611 645.4
+777.59882 669.3
+795.63104 1124.3
+801.11438 795.0
+810.38080 868.1
+810.86188 738.3
+819.37543 689.0
+834.44049 2569.2
+835.41321 667.7
+854.46320 946.0
+858.07922 826.9
+900.96790 766.3
+916.12903 651.9
+949.46143 6818.5
+950.46881 3798.2
+951.46613 1279.5
+1020.50226 5425.5
+1021.50702 2243.5
+1022.49750 1322.2
+1054.42773 723.0
+1057.21130 1341.3
+1133.58386 8324.0
+1134.58582 4766.4
+1135.58325 1656.4
+1187.78882 686.1
+1198.07178 4043.5
+1288.82251 624.6
+1525.48206 1292.6
+1629.52051 879.2
+1776.84839 886.5
+1870.37988 781.6
+1878.36865 1388.8
+1878.95386 2369.7
+1879.47266 22223.6
+1879.71130 1541.4
+1879.99377 2492.4
+1880.97986 849.9
+1881.48279 765.8
+1907.08569 8516.4
+1930.67505 1381.7
+1941.94299 889.8
+S	2025	2025	530.2550521
+Z	4	2116.98891
+135.54170 66377.3
+137.87306 67933.6
+143.57231 64271.4
+146.42752 57873.8
+164.18864 56967.1
+165.77037 112909.1
+174.43987 58259.1
+177.17850 63601.1
+182.52832 57085.7
+188.19394 58627.4
+188.24487 78781.0
+188.27161 218159.3
+188.29500 243593.0
+188.30487 243687.2
+188.32259 143499.8
+188.34300 65531.9
+199.18614 103143.6
+199.24834 70764.7
+199.26222 92193.9
+199.27437 85731.8
+199.28467 317438.5
+199.31256 70998.3
+199.33098 56035.3
+199.38303 140604.8
+200.98145 58076.1
+204.31911 63649.6
+206.64752 60442.1
+212.16525 53109.9
+212.45288 68602.0
+213.03676 60476.2
+218.90929 61971.8
+233.12811 268542.4
+255.10863 325645.0
+260.01352 69429.4
+261.12335 110750.4
+266.12158 75969.1
+270.13199 158969.8
+271.70419 65208.1
+272.13480 328770.9
+272.81793 65298.4
+273.38605 52160.7
+275.12393 206835.8
+275.61578 198471.8
+280.20657 86745.0
+283.63696 288753.2
+284.12909 947170.3
+284.63126 224277.3
+285.16608 125117.6
+292.64243 2212743.3
+293.14383 619635.3
+293.64511 88004.8
+311.72217 76870.2
+316.64493 165390.0
+321.63696 107649.5
+330.64127 996847.0
+331.14209 242974.8
+338.45813 60138.2
+341.16879 138636.2
+341.68332 255331.1
+342.18640 80610.6
+342.29980 89535.3
+379.16751 858456.6
+379.66901 315779.3
+386.21136 69045.7
+391.21921 348118.1
+395.17752 80008.4
+399.87201 298841.4
+400.19199 377456.9
+400.54294 82134.5
+414.20874 532520.7
+415.21143 76733.0
+416.26199 96417.0
+422.69656 90486.5
+438.20480 79866.8
+440.75232 271336.6
+441.25308 67867.8
+446.70224 285497.7
+447.20447 91514.1
+451.69409 118333.2
+452.18414 122723.6
+456.99869 81225.3
+457.21341 84593.0
+460.69943 1005361.4
+461.20001 446748.1
+461.70215 150953.3
+471.35657 68292.8
+476.27090 754075.4
+476.77197 486917.6
+477.27338 161414.5
+480.90912 78360.3
+482.26776 74159.1
+482.67322 67431.5
+485.44839 109565.8
+486.57700 18427152.0
+486.91116 13462758.0
+487.13358 113669.7
+487.24481 7090047.5
+487.57913 2177968.3
+487.71231 121911.0
+487.91248 491689.1
+488.21942 234017.8
+488.37674 76659.3
+488.72388 128271.8
+494.95853 61758.5
+501.24008 984443.5
+502.24130 204602.1
+507.18732 165337.7
+512.20526 106823.4
+529.23578 93501.9
+532.50018 154223.3
+532.56244 114001.3
+545.25354 116818.8
+545.30188 144666.6
+579.68365 60027.1
+583.73737 74980.1
+584.23779 66812.4
+596.91663 59744.9
+599.30420 4677293.5
+599.80554 2838577.0
+600.30573 1030851.3
+600.80383 383393.3
+619.24872 144821.4
+642.26349 97993.3
+660.27545 7810955.0
+660.34918 60676.6
+660.37634 76942.4
+661.27844 2317611.8
+662.06128 81934.1
+662.27600 592763.8
+663.28107 115644.7
+676.61047 149600.7
+680.83551 2411574.0
+681.33746 1674115.0
+681.83807 769826.3
+682.31555 141569.9
+682.36963 375244.0
+683.36389 232251.8
+685.82556 64565.0
+720.85864 116747.2
+729.36243 14729674.0
+729.86322 11022447.0
+730.36407 5335292.0
+730.86377 1517340.1
+731.36438 487959.9
+731.44226 93264.5
+778.31781 192330.8
+779.32031 111123.9
+781.42841 305198.8
+795.39087 101861.7
+795.60364 95848.0
+795.89905 69405.7
+920.39130 302914.9
+921.00653 67516.8
+921.38879 163125.0
+930.12787 64711.4
+971.42731 65484.4
+980.10657 73788.5
+1144.52954 66852.9
+1174.93005 70653.0
+1188.34070 102625.0
+1198.11743 320162.7
+1198.29517 102027.7
+1198.80969 59727.8
+1277.08472 61121.8
+1294.86731 63698.4
+1311.76428 67120.6
+1496.02173 73689.2
+1525.56726 99047.7
+1640.46350 80606.8
+1793.88623 69425.9
+1870.19690 82654.1
+1878.98694 149575.3
+1879.45605 2123296.5
+1879.72791 241889.7
+1882.12000 62105.3
+1907.05347 802294.9
+1907.34912 91219.5
+S	2026	2026	531.0060746
+Z	4	2119.993
+141.84906 856.5
+165.34042 656.6
+165.76756 588.2
+167.55153 540.7
+182.79250 713.5
+186.39178 603.5
+188.18205 571.5
+188.21423 751.3
+188.23373 902.4
+188.25011 863.6
+188.26280 671.0
+188.27667 1217.6
+188.28764 898.0
+188.29733 866.9
+188.30779 857.1
+188.32872 638.6
+188.34586 541.0
+188.35439 733.6
+198.90353 755.3
+199.18474 702.9
+199.19756 1007.7
+199.27168 922.3
+199.28206 1349.6
+199.29698 1915.6
+199.30865 1055.7
+199.32614 969.8
+233.12921 5448.1
+234.13229 831.5
+255.10928 2534.6
+255.74353 635.1
+261.12357 1470.7
+269.20779 592.9
+270.13220 1144.0
+270.63458 669.7
+272.13629 3296.2
+275.12567 1756.0
+275.61893 1400.0
+283.63840 3319.7
+284.13065 10699.9
+284.63220 2865.5
+285.16763 968.9
+292.64374 20590.7
+293.14526 6389.9
+293.64624 975.0
+303.17834 1389.7
+310.14890 814.1
+316.64569 2720.9
+321.63824 1445.2
+330.64273 12484.0
+331.14413 3797.3
+331.64294 1026.0
+336.93317 630.0
+341.17065 3000.8
+341.68555 7465.6
+342.18799 2287.3
+342.28723 727.7
+350.28000 845.4
+356.98135 564.6
+365.17047 1234.1
+369.19019 926.2
+371.17517 981.7
+374.12369 582.8
+377.50882 581.2
+379.16959 13226.7
+379.67090 5551.4
+380.17221 1108.0
+382.18207 811.6
+386.21597 1971.9
+389.15076 694.5
+391.21973 6272.9
+391.72156 3126.7
+392.16586 1161.6
+392.22543 696.9
+393.65338 679.8
+395.17966 1153.8
+395.68341 877.3
+396.18909 577.8
+399.87369 4657.1
+400.19382 4199.7
+400.20731 3786.7
+400.54108 2811.8
+414.21014 4020.5
+415.21182 950.8
+416.26273 8839.7
+417.18018 1513.8
+417.26642 1992.8
+422.70169 3757.4
+423.20575 1538.8
+427.56680 655.8
+438.21021 3033.3
+440.75546 7173.5
+441.25562 2393.9
+441.75708 898.6
+445.03244 668.7
+446.70419 6319.1
+447.20520 2908.9
+447.70621 1390.1
+451.69574 2544.6
+452.18713 3392.6
+452.69247 2037.9
+457.21750 2097.2
+457.71466 832.2
+460.70135 36704.2
+461.20285 15604.7
+461.70340 7583.7
+462.20798 1490.1
+466.56049 670.2
+476.27307 33664.8
+476.77505 16565.8
+477.27673 5602.3
+477.77686 1192.5
+479.70926 1005.9
+480.57550 2752.2
+480.91077 1306.4
+481.24252 787.1
+482.18411 595.8
+485.03012 661.6
+485.44211 2747.2
+485.64325 1613.8
+485.70880 756.4
+485.77393 2479.2
+485.97354 1406.4
+486.01831 1976.5
+486.04449 658.6
+486.11011 1178.8
+486.19958 949.2
+486.35468 2522.0
+486.39297 1167.7
+486.48752 592.8
+486.49973 1534.4
+486.53088 3307.7
+486.57944 568070.4
+486.64838 1176.3
+486.68768 1691.2
+486.85104 1662.9
+486.86670 2818.7
+486.91302 496463.2
+486.96167 2680.6
+486.98016 1156.2
+486.99506 882.9
+487.02127 985.3
+487.13736 3915.1
+487.19879 1790.5
+487.24661 265041.5
+487.47397 2694.2
+487.51620 2104.3
+487.58032 103417.9
+487.62634 1170.4
+487.72018 2823.6
+487.77820 911.2
+487.80917 1529.3
+487.85141 1939.3
+487.91412 33176.4
+488.05414 2459.1
+488.18451 768.4
+488.24350 10227.5
+488.38794 1725.7
+488.58145 2720.3
+488.72241 2819.4
+489.22488 1701.8
+495.18365 635.6
+501.24207 13373.0
+502.24503 3323.4
+507.19119 5975.4
+508.19547 939.8
+529.23694 6446.2
+530.23193 1606.1
+530.50745 1066.0
+531.50568 906.9
+532.53339 2112.2
+533.78674 6090.7
+534.28766 3730.6
+534.78943 2140.9
+535.28448 872.4
+545.25146 5969.4
+545.30481 25570.8
+546.25385 1801.5
+546.30841 7495.1
+547.31598 1172.1
+549.19031 707.7
+550.23145 729.6
+552.24927 892.1
+573.24683 1476.9
+578.23059 2780.1
+578.32587 685.4
+579.23254 912.2
+581.24811 915.6
+582.28772 622.9
+583.73511 4490.0
+584.23688 2866.5
+584.73096 995.0
+590.29639 2727.8
+591.30157 1352.7
+597.74976 1162.2
+598.24976 1147.7
+598.54102 937.3
+599.24683 867.0
+599.30664 220862.3
+599.80768 149996.3
+600.07410 891.0
+600.30804 65367.9
+600.58246 1091.8
+600.80939 18525.1
+600.86719 1030.1
+601.31274 4108.9
+601.81165 1172.1
+605.61023 920.8
+608.27637 663.1
+612.23346 661.2
+612.75220 610.9
+616.28912 742.7
+616.66949 1242.1
+617.00330 2382.6
+617.33929 1038.0
+619.25299 6080.5
+619.75452 4236.7
+620.25311 1550.9
+625.24280 788.1
+626.28943 2321.7
+627.29260 778.2
+632.28265 9018.9
+633.28217 2143.0
+634.28607 934.0
+642.26660 3461.6
+643.24744 2682.4
+647.28033 1321.9
+649.30389 1352.9
+651.30914 1948.6
+652.31287 769.1
+653.30896 2031.1
+654.30719 799.7
+658.48236 1773.1
+658.80377 896.8
+659.39532 1658.3
+660.27771 397985.1
+660.33942 2281.2
+660.88513 938.7
+661.16339 1692.3
+661.19885 935.4
+661.28027 133703.5
+661.75665 1317.4
+662.08044 2322.1
+662.27948 40171.7
+663.08624 1008.7
+663.28021 8821.7
+664.28229 1442.3
+665.33997 2021.5
+668.78442 3651.7
+669.28973 3075.2
+669.78717 1697.3
+670.29425 1072.6
+671.83063 1165.2
+672.33014 858.4
+672.83057 790.1
+676.64233 851.4
+677.29779 8301.3
+678.30084 2248.3
+679.29944 1415.6
+680.83832 138924.0
+681.33960 102438.1
+681.76740 973.1
+681.84021 55190.8
+682.30878 4855.8
+682.36694 64090.3
+682.84119 5653.3
+683.22662 746.0
+683.36804 23352.0
+684.36847 4839.2
+685.82916 1124.6
+686.33203 1637.0
+698.29285 1926.5
+706.33832 1006.6
+706.66901 1695.6
+707.00714 1332.6
+718.32410 985.0
+720.35913 5887.2
+720.86182 4893.9
+721.36005 3140.4
+721.85217 2437.9
+722.35242 1026.2
+724.39191 1168.8
+725.91046 1090.0
+726.39819 1299.4
+726.97534 664.6
+727.27863 4507.6
+727.38043 1084.0
+727.54572 1123.1
+727.64996 2057.9
+727.77350 4389.3
+728.01123 703.0
+728.14362 2024.0
+728.26752 3044.1
+728.33765 3657.8
+728.66187 2139.4
+728.76129 1593.4
+728.83618 2703.7
+729.02173 1113.0
+729.14764 1172.5
+729.21851 2463.9
+729.24988 1565.7
+729.36523 881274.4
+729.48785 1619.2
+729.51440 1344.0
+729.55792 654.6
+729.58783 1152.5
+729.67816 1264.7
+729.72156 1673.6
+729.76807 2441.7
+729.86517 744620.6
+729.95880 1710.7
+730.00494 1355.4
+730.06152 1837.0
+730.18262 924.3
+730.36499 391770.2
+730.56104 1644.7
+730.72778 2132.4
+730.86542 148895.1
+731.08063 2868.0
+731.21936 1482.2
+731.36572 48526.4
+731.46295 5857.8
+731.58197 2620.4
+731.86664 12779.6
+731.96326 5316.2
+732.09332 1031.7
+732.19873 856.2
+732.26306 1338.2
+732.36719 3352.7
+732.46808 3029.9
+732.86023 1381.3
+732.97247 1378.9
+733.36316 1004.1
+746.29321 754.5
+764.39435 1505.8
+765.40094 808.3
+776.36597 5416.7
+777.37109 2765.0
+778.32092 11837.6
+779.32178 4346.5
+780.32574 1543.8
+781.43176 74119.7
+782.35071 2259.6
+782.43536 28840.5
+783.43945 6698.8
+784.44128 1504.2
+789.35284 2053.3
+790.35968 1032.1
+791.31323 1408.2
+794.88477 5779.6
+795.38757 5618.1
+795.61011 957.3
+795.88708 3597.3
+816.37482 1000.8
+823.33942 1126.1
+850.47913 1671.6
+851.37677 785.9
+851.49658 714.9
+880.50104 20462.9
+881.50458 9093.6
+882.50562 2235.6
+892.40051 3308.8
+893.40344 1344.0
+895.43243 989.8
+902.38434 1902.8
+913.42560 3911.7
+914.42651 1387.1
+920.39410 42589.7
+921.39728 21019.4
+922.39795 7039.3
+923.40314 2096.7
+924.50238 1014.4
+934.51733 779.4
+940.65302 577.8
+945.41864 812.7
+951.53790 22031.0
+952.54034 10683.7
+953.54163 2463.2
+954.55396 1004.9
+955.37592 727.6
+965.52545 628.4
+988.52356 579.5
+1023.49677 1361.7
+1024.49854 1041.0
+1042.46692 2737.3
+1043.47083 1420.7
+1044.47046 805.5
+1051.43994 1101.1
+1066.56506 21656.3
+1067.56787 11559.5
+1068.57007 3700.1
+1069.59119 633.3
+1127.61646 618.0
+1148.34290 572.0
+1155.55090 2016.6
+1156.55664 1625.9
+1181.59839 631.7
+1197.60645 11856.0
+1198.19348 3506.7
+1198.60840 6966.1
+1199.60669 2806.9
+1237.50964 813.3
+1283.61047 1503.6
+1284.61011 2153.6
+1285.59888 697.8
+1360.67065 2428.1
+1361.67004 998.4
+1362.67896 802.1
+1775.24011 608.4
+1876.15857 721.7
+1877.46790 675.7
+1877.56616 694.8
+1878.50525 953.7
+1878.82312 1572.9
+1879.11487 982.7
+1879.55334 20011.6
+1880.28430 1572.0
+1881.96387 873.3
+1883.43713 673.2
+1907.05054 7489.7
+S	2027	2027	1879.9508246
+Z	3	5636.577
+Z	2	3758.054
+532.52686 2147.1
+549.18213 802.3
+621.91193 628.0
+730.24176 583.3
+730.38013 643.9
+795.60052 753.1
+806.68060 628.3
+841.13892 752.5
+868.09961 621.3
+878.55988 712.9
+1060.95496 609.8
+1085.16504 723.6
+1178.15137 596.2
+1198.18469 3383.5
+1664.49646 674.5
+1777.29797 606.9
+1870.44287 851.2
+1876.15686 1178.6
+1878.18347 994.2
+1878.69043 817.0
+1878.96692 1124.1
+1879.53223 19453.9
+1879.79675 3395.8
+1880.31299 1030.6
+1882.25342 734.2
+1885.28027 683.7
+1906.81201 912.9
+1907.07898 6901.9
+1907.54553 776.5
+1918.79211 771.8
+1930.78552 1077.8
+S	2029	2029	530.2530396
+Z	4	2116.98086
+135.28404 43720.8
+136.47719 53199.5
+146.21729 51630.7
+149.67592 52527.7
+149.90559 41414.7
+150.36830 41280.6
+155.38364 51482.4
+156.84924 45523.4
+159.03558 49805.2
+162.55812 56704.2
+165.76988 56257.5
+168.66154 49567.9
+170.76881 54981.8
+173.07639 51642.3
+178.57440 46566.8
+181.60332 49816.2
+188.24631 60748.8
+188.26909 171251.7
+188.29027 199644.3
+188.31015 122189.7
+188.31978 120555.1
+188.36211 45738.0
+197.70979 58998.9
+198.90309 49262.5
+199.19173 66191.4
+199.20618 55741.1
+199.22731 56786.0
+199.25040 61916.7
+199.26152 99599.1
+199.27631 71228.1
+199.28972 209661.6
+199.30441 124656.7
+199.32925 60208.9
+199.38980 88348.3
+199.40045 65164.9
+201.94139 52199.5
+202.85097 48818.9
+203.72607 53862.1
+204.90276 48215.1
+229.34314 59750.7
+233.12782 167750.4
+242.22820 53611.5
+255.10873 134712.2
+255.30865 53747.0
+258.10925 68149.4
+270.13205 102106.3
+271.68460 60262.2
+272.13486 205982.1
+275.12405 138260.0
+283.63730 183058.3
+284.12930 669145.3
+284.63019 154849.3
+285.16580 111441.6
+289.84970 45616.4
+292.64236 1464611.1
+293.14407 391814.4
+293.64529 65548.4
+299.44775 55961.7
+316.64481 158627.5
+321.48944 48665.5
+321.63821 59018.0
+324.85104 43102.0
+330.64178 490314.6
+331.14206 139507.8
+341.68390 176980.4
+342.29285 53088.3
+349.01004 52062.3
+350.27856 68258.8
+353.32135 53158.5
+370.16766 54040.1
+370.65448 109842.9
+379.16818 582181.6
+379.66913 169690.0
+383.16412 77165.8
+386.14163 53754.9
+386.21463 71570.9
+388.22528 46215.4
+391.21890 219343.2
+391.72025 74544.9
+399.87213 291609.6
+400.19174 292261.9
+400.54089 67440.1
+411.89529 49959.0
+413.24460 46152.0
+414.20865 382839.6
+415.21255 60998.3
+416.26202 80540.3
+417.23453 54853.6
+422.70023 95614.8
+424.25513 42881.0
+438.20917 110945.2
+439.20416 63105.9
+440.75256 99787.3
+446.70209 197437.2
+451.69186 106455.8
+452.18240 80905.6
+452.68936 53144.3
+460.69904 739192.0
+461.20016 348139.7
+461.70026 113129.4
+476.27136 673864.6
+476.77167 266555.0
+477.27164 88715.3
+482.99146 48259.8
+486.57709 12743344.0
+486.91135 10406914.0
+487.13498 68496.7
+487.24496 4841680.0
+487.47488 71548.1
+487.57916 1533111.5
+487.71277 72341.1
+487.91379 298596.9
+488.22015 203003.5
+488.38504 57476.1
+488.72275 89896.4
+501.24008 579039.8
+502.24265 120476.8
+507.19070 167653.2
+511.22815 64850.1
+514.21234 68708.5
+529.23615 72801.0
+532.53296 97718.7
+532.62994 81931.0
+543.51569 50211.3
+545.30334 119757.3
+570.85913 58463.6
+583.72607 49261.9
+599.30408 3494137.0
+599.80530 2132166.0
+600.30566 824404.6
+600.80902 226114.1
+616.67065 48463.3
+619.25262 63734.9
+642.26740 79053.3
+660.27533 5323752.0
+661.27844 1715096.3
+662.27893 324268.6
+662.99121 46930.9
+663.28143 102349.4
+680.83575 1571725.3
+681.33746 1222080.3
+681.83887 514949.6
+682.36755 256383.0
+683.36499 101120.5
+698.27783 52724.9
+703.69208 53282.2
+720.35950 82255.3
+729.36255 10128018.0
+729.86340 7573432.0
+730.36426 3362197.0
+730.86584 1263846.6
+731.36774 314593.1
+731.57434 47249.6
+744.58008 48130.4
+777.00323 46503.5
+778.31934 143740.4
+778.82831 53862.2
+781.42578 170162.2
+782.42218 63571.6
+794.88477 86033.3
+795.60852 101740.2
+883.01135 52437.2
+897.81586 48678.7
+903.46045 49799.3
+907.34576 50900.1
+920.39008 276028.6
+921.39874 96828.0
+1020.87994 63210.7
+1057.31055 53414.3
+1076.04675 51581.7
+1176.93665 52903.9
+1198.19275 231875.1
+1198.35669 91792.8
+1338.97156 51242.7
+1525.51465 84871.4
+1629.35718 49437.9
+1684.04358 42883.8
+1713.33386 50034.2
+1870.21082 90364.9
+1875.25439 45033.6
+1877.32190 52624.4
+1878.43103 106469.4
+1879.32446 415286.3
+1879.60986 1505241.8
+1879.99182 346132.5
+1880.83594 127708.6
+1881.60193 68078.0
+1907.04321 651446.2
+1918.78271 61751.4
+1930.73059 85697.7
+1951.71997 53218.0
+S	2030	2030	531.0043246
+Z	4	2119.986
+136.06944 576.6
+145.71808 596.7
+159.07635 601.9
+159.86607 632.2
+161.07584 685.3
+165.76752 940.1
+177.85002 553.0
+182.81136 761.0
+188.18123 755.9
+188.20335 586.6
+188.21503 576.1
+188.23886 751.9
+188.25722 733.2
+188.28087 1047.5
+188.29036 820.8
+188.30045 858.8
+188.31609 688.0
+188.32378 723.5
+188.34850 524.5
+188.35892 663.9
+188.37704 676.8
+190.45186 533.7
+198.90335 688.3
+199.18549 1077.8
+199.19130 886.1
+199.20869 549.2
+199.26733 1166.0
+199.28406 1835.8
+199.29066 2118.0
+199.30901 1775.2
+199.38289 725.2
+221.05875 631.9
+233.12865 7456.9
+234.13133 1256.8
+237.13423 720.8
+254.78377 698.5
+255.10883 5561.2
+258.10800 678.6
+261.12323 1697.9
+267.01846 528.4
+270.13199 4173.8
+270.63370 909.6
+271.60995 570.5
+272.13525 8004.7
+273.13855 609.5
+274.63181 942.5
+275.12418 3778.5
+275.62091 1849.5
+283.63763 6965.6
+284.12985 18638.4
+284.63141 4316.7
+285.16684 4577.1
+289.12259 748.0
+289.16263 768.1
+292.46744 630.3
+292.64301 46613.5
+293.14453 13152.0
+293.64575 2773.5
+297.45639 542.1
+303.17834 1521.3
+310.15073 1175.6
+313.15933 753.7
+316.64471 3920.1
+318.11111 784.1
+321.63647 3133.6
+322.12738 1873.9
+330.64212 21919.5
+331.14383 7150.3
+331.64194 923.4
+334.85077 632.6
+341.16931 3980.1
+341.68457 8911.5
+342.18655 3802.0
+342.31000 619.7
+342.38181 641.8
+350.27991 828.0
+359.25751 664.1
+365.16953 1490.4
+368.98291 505.6
+369.18951 960.9
+370.16318 1190.3
+370.65353 1326.2
+372.11926 719.5
+372.19919 1713.1
+379.16849 16367.8
+379.66983 6013.9
+380.17032 1407.1
+382.18362 1153.6
+383.16705 1595.0
+383.87201 732.5
+386.21527 3658.5
+387.95969 646.0
+391.21942 7396.2
+391.72049 2581.6
+392.16495 1400.5
+395.18451 807.2
+395.67627 688.7
+396.18021 1412.2
+399.87234 6459.1
+400.19214 8739.3
+400.54086 1852.5
+401.19537 1057.2
+414.20911 10385.8
+415.21222 2325.8
+416.26172 5011.1
+417.26807 877.8
+421.82205 671.1
+422.70093 3392.7
+423.20169 1779.5
+438.21005 3560.2
+439.21378 1016.1
+440.75317 6620.2
+441.25446 4082.3
+441.75714 729.5
+446.70251 6309.5
+447.20441 3260.4
+447.70132 1252.1
+451.69470 3245.3
+452.18494 2244.1
+452.68784 2118.7
+453.18863 708.8
+457.21854 739.8
+457.71582 771.2
+460.70001 25817.6
+461.20187 14265.1
+461.70193 4403.4
+476.27200 20440.6
+476.77374 12885.5
+477.27563 3372.3
+477.76752 542.5
+479.70700 1333.5
+480.57623 821.0
+480.91208 1249.4
+481.24167 577.6
+481.57104 701.2
+485.44571 1775.8
+485.73898 662.1
+485.77768 1732.4
+486.01807 1331.3
+486.11014 804.5
+486.34726 1378.9
+486.57803 368222.3
+486.63373 1004.4
+486.75455 965.7
+486.78226 824.8
+486.86276 1485.0
+486.91196 330758.1
+487.10284 548.7
+487.14651 2080.3
+487.24570 173127.8
+487.47696 1970.9
+487.57922 70388.3
+487.71732 2389.2
+487.91327 19051.3
+488.05176 1784.6
+488.23532 7826.1
+488.72202 3512.4
+489.22217 1302.7
+494.19775 993.4
+497.24551 835.9
+501.24075 22598.4
+502.24411 5148.1
+503.23941 827.4
+503.70535 722.1
+507.18991 6099.2
+508.19080 1912.9
+508.71530 638.4
+509.20306 685.8
+512.20721 2361.4
+514.20532 1562.3
+529.23431 2365.7
+532.50348 1884.2
+533.78552 2137.4
+545.24969 1294.1
+545.30316 6901.7
+546.30707 1851.8
+549.21582 1119.5
+573.25409 722.8
+582.86664 655.6
+583.73187 1188.2
+590.79938 1036.1
+599.30518 113076.7
+599.80646 81278.6
+600.30688 37210.1
+600.80713 11839.6
+600.86310 908.5
+601.30768 2845.4
+616.66418 771.9
+617.00006 860.7
+619.25391 2407.0
+619.75287 2200.6
+620.24951 898.1
+632.27979 937.9
+642.26495 2496.6
+653.29846 846.0
+658.48596 883.5
+660.27637 177755.3
+661.27881 63331.4
+662.08173 875.3
+662.27820 16804.1
+663.27759 2615.9
+668.78259 952.6
+669.29150 855.0
+670.28558 923.2
+676.65430 1123.7
+677.29272 2654.3
+678.29895 763.2
+680.83661 60919.8
+681.33826 47482.0
+681.83875 23332.8
+682.31775 3276.2
+682.36981 11178.9
+682.83893 2587.0
+683.36804 5041.0
+698.29773 1130.2
+704.22321 651.3
+706.66742 818.8
+710.96368 545.7
+720.35980 1572.1
+720.85608 1013.4
+727.27875 1548.6
+727.77448 1211.2
+728.33813 1697.9
+728.83612 1289.4
+729.36353 334955.0
+729.45367 1075.3
+729.86420 285525.4
+730.36469 154299.5
+730.86591 62087.9
+731.22626 882.8
+731.36761 18929.9
+731.45544 1542.7
+731.58514 666.8
+731.86938 4155.3
+731.95898 1743.2
+732.36853 899.8
+732.45490 749.6
+776.36243 1633.3
+777.36566 830.7
+778.31897 5073.1
+779.32306 2265.5
+780.31769 909.2
+781.42993 8009.9
+782.43445 4108.1
+789.34662 1099.9
+791.31042 1297.0
+794.88586 2348.9
+795.38733 1789.1
+795.60187 907.8
+795.88947 859.8
+849.61707 648.2
+881.50549 820.1
+915.45325 659.7
+920.39270 9135.1
+921.39709 5082.2
+922.39948 1636.7
+951.53308 1259.5
+988.24292 586.3
+991.71661 673.7
+1001.14319 601.3
+1057.28320 786.9
+1105.96216 580.0
+1108.46094 593.3
+1140.23804 665.3
+1167.75049 684.6
+1198.12695 3048.8
+1198.24500 1033.7
+1238.73218 535.2
+1300.96057 765.3
+1797.60571 635.6
+1868.82153 683.1
+1876.70398 601.5
+1878.61377 752.8
+1879.29163 4534.1
+1879.57117 18876.0
+1881.43665 685.0
+1907.06323 7684.3
+1930.79321 917.7
+1997.94250 698.2
+S	2031	2031	1879.9568246
+Z	3	5636.595
+Z	2	3758.066
+532.49176 567.1
+532.52997 1354.8
+598.90765 672.5
+676.62354 1093.0
+701.76770 623.3
+795.61090 961.8
+799.13434 543.1
+820.47192 578.6
+826.28387 632.4
+1057.22473 948.0
+1120.01709 639.1
+1198.19092 3228.7
+1204.74646 618.1
+1288.86621 644.3
+1308.56628 643.5
+1391.04626 812.5
+1583.89783 616.2
+1870.36963 848.3
+1877.79272 578.9
+1878.05798 696.4
+1878.22437 610.8
+1878.96399 1003.8
+1879.50134 20130.7
+1880.32666 747.8
+1880.70581 844.2
+1882.36243 642.5
+1907.06653 7157.1
+1930.79456 976.1
+S	2033	2033	624.7518246
+Z	3	1870.98
+Z	2	1247.656
+165.76863 85788.9
+185.85361 74268.1
+188.04942 71766.9
+188.17538 65288.4
+188.23248 64030.9
+188.26662 159313.0
+188.28291 179876.6
+188.30113 194132.3
+188.31888 127897.2
+188.33629 62978.8
+199.18735 98289.7
+199.20039 91390.8
+199.22301 59041.5
+199.25182 112842.9
+199.27408 139702.8
+199.28484 193534.5
+199.29659 127180.1
+199.38394 74327.6
+199.42447 68087.7
+211.18030 175721.8
+211.47823 61771.2
+233.16432 141454.9
+238.70625 59043.3
+239.17439 122084.4
+245.16183 64378.0
+247.89130 67493.1
+253.75294 59956.8
+255.31349 65341.8
+260.21567 70015.4
+267.94440 56928.4
+284.19650 236897.7
+304.95462 58937.8
+308.61417 58058.0
+308.93207 55907.1
+329.39252 55775.0
+333.19177 380676.9
+358.04410 56869.9
+361.84985 59200.6
+363.69830 60629.1
+381.24347 55103.8
+381.39484 77090.8
+403.26990 195827.3
+415.19791 109096.4
+431.26517 280893.6
+442.83469 59688.2
+482.72586 191026.8
+486.54596 73176.7
+490.22949 185488.2
+498.99066 60890.5
+500.28159 80341.5
+517.42072 68295.9
+528.27930 154708.6
+530.18042 71324.9
+530.26801 172887.8
+530.76520 114076.7
+531.23389 61987.0
+531.29065 907197.5
+532.29498 227613.7
+532.53320 189114.7
+539.27026 3146736.0
+539.77216 1725035.4
+540.27350 302371.3
+545.30603 135999.3
+588.31232 1502073.8
+589.31561 406839.7
+606.80530 307375.6
+607.30994 73883.7
+642.32355 97109.9
+643.30762 161558.0
+657.61804 65746.1
+660.33362 256064.8
+667.96094 78093.4
+668.27863 115774.6
+668.61035 112649.4
+668.96112 68770.0
+670.79669 62413.8
+676.64032 114915.0
+682.30847 57955.9
+684.32141 72133.8
+691.37311 68662.6
+700.32849 305731.3
+703.33929 807949.2
+704.34198 319851.5
+705.35010 68449.9
+706.30334 101583.3
+706.63580 207528.3
+706.98083 121480.6
+707.32068 95222.0
+717.35962 140155.1
+795.59711 90779.5
+796.56628 66382.0
+799.37170 91890.0
+803.91779 64168.9
+817.38165 2400726.3
+818.38470 998189.5
+819.38757 194238.5
+898.43231 96383.9
+915.45947 156249.8
+946.43561 120953.7
+947.41760 134939.4
+964.44983 3359771.3
+965.45416 1610205.9
+966.45862 283953.6
+1057.25244 79155.1
+1066.49377 136006.1
+1067.50549 97682.2
+1077.53577 700822.1
+1078.53381 289822.3
+1079.53113 115841.5
+1084.51685 230217.2
+1085.51099 98935.2
+1101.53284 494265.8
+1102.54053 235862.0
+1103.54016 79416.0
+1159.81335 62318.8
+1187.96094 82426.6
+1198.18530 341540.7
+1323.13623 61496.2
+1346.56226 58598.5
+1350.19067 57670.0
+1704.97070 75680.5
+1776.95642 76849.5
+1878.31702 61889.3
+1879.17334 295264.5
+1879.54761 1863053.9
+1879.91357 251407.3
+1907.06091 735010.8
+1930.81750 91467.1
+S	2034	2034	530.2617046
+Z	4	2117.01552
+137.27577 71702.3
+151.38646 54585.6
+155.41380 65001.6
+166.80077 60488.7
+171.65710 60909.0
+184.33878 68199.9
+188.24380 68514.3
+188.26735 240553.4
+188.28543 218438.6
+188.30309 227985.7
+188.31621 170889.9
+188.32668 107072.1
+188.43530 62115.8
+188.44489 60674.8
+191.86186 69284.2
+193.26611 60826.3
+198.90616 94621.9
+199.18971 85212.2
+199.25525 77560.4
+199.26335 102025.8
+199.27597 194269.0
+199.28690 182950.4
+199.29788 227632.0
+199.31512 64117.9
+199.39671 98885.4
+199.40582 71003.6
+203.41968 68580.4
+207.85313 60934.3
+214.54370 69277.6
+214.86693 64542.6
+216.97462 67249.2
+223.78635 73021.6
+233.12833 215294.8
+233.60361 81302.3
+240.50999 66858.7
+255.10817 204844.9
+261.12320 91365.1
+262.99973 59198.1
+270.13245 81120.7
+272.13461 341208.5
+275.12369 256660.5
+275.61609 88899.3
+283.63708 256399.0
+284.12952 792000.1
+284.63086 223449.0
+285.16641 156984.0
+292.64270 2033173.9
+293.14432 578980.3
+316.64389 157109.5
+321.63602 113533.4
+330.64178 820145.8
+331.14392 306846.4
+341.16995 109255.1
+341.68280 143977.5
+342.18567 65886.1
+342.31744 89592.1
+342.68909 58698.1
+350.28476 66825.4
+364.16940 67154.6
+370.16049 76403.3
+372.19955 90943.4
+379.16791 887337.5
+379.66785 251208.2
+380.16638 95734.3
+381.68616 59738.3
+391.21899 290567.7
+391.71936 139599.4
+399.87219 455088.6
+400.19263 416968.8
+400.43350 78495.8
+414.20892 478875.3
+416.26102 104027.2
+422.69952 106658.4
+427.60101 104649.3
+438.20947 208238.2
+440.75195 191016.9
+441.25238 124870.9
+446.53677 62964.9
+446.70154 195722.3
+447.20416 154103.8
+451.69400 177257.8
+452.18433 138687.1
+460.69965 1176557.1
+461.20096 381497.3
+461.69870 206578.9
+476.27130 717034.3
+476.77472 274780.0
+480.56070 82597.5
+482.72754 77912.5
+485.44241 80574.1
+486.01746 99641.9
+486.52805 81762.5
+486.57730 17744796.0
+486.91147 12331214.0
+486.95059 86925.7
+487.13358 95641.5
+487.24518 6063478.5
+487.57889 2083909.9
+487.71646 101066.1
+487.91171 478997.8
+488.22232 203280.0
+501.24057 833135.7
+502.24063 186989.0
+507.18808 223928.6
+521.64612 63775.7
+524.18341 71161.6
+530.23578 72607.6
+532.50055 229935.9
+535.26288 62720.1
+545.30444 147187.0
+549.84058 59906.1
+554.61383 72170.5
+583.73126 103074.5
+599.30457 4279709.0
+599.80597 2491864.8
+600.30585 971564.3
+600.80756 273788.2
+619.25299 171968.3
+625.63812 63149.9
+657.96222 73284.8
+660.27576 6926330.5
+661.27856 2067725.1
+662.27704 534225.0
+663.28101 105652.1
+667.96674 78907.3
+668.29944 78487.3
+669.29114 107686.3
+676.63593 136658.0
+677.29236 88804.5
+680.83649 2356408.8
+681.33722 1341901.8
+681.83856 655401.2
+682.37030 267629.7
+683.36511 160476.9
+706.30798 123493.8
+706.61670 111019.9
+706.97144 266459.4
+727.79297 69703.6
+729.36279 13895595.0
+729.86365 10285015.0
+730.36420 4943120.0
+730.86426 1458613.4
+731.21558 76596.8
+731.36322 305742.3
+753.52124 63416.6
+778.31598 230102.4
+779.32257 116885.6
+781.42810 189464.6
+781.50684 65640.9
+782.43402 107204.0
+794.88342 101300.9
+795.38971 100503.8
+795.61914 142664.8
+809.14233 73231.6
+867.85522 74586.2
+914.72699 67365.1
+915.22662 57068.5
+920.39050 296550.3
+921.39954 142519.6
+987.75140 65383.6
+996.39258 67378.5
+1198.11731 374668.7
+1316.61157 78518.9
+1356.02466 65654.7
+1525.62805 87709.7
+1860.04260 75246.7
+1877.75415 65042.9
+1878.26904 87636.7
+1878.82629 99834.0
+1878.99292 83835.9
+1879.53442 2200240.0
+1880.04407 132678.4
+1880.13953 126495.4
+1881.29651 86665.3
+1882.01294 101843.1
+1907.04358 840359.8
+1930.86475 124403.4
+S	2035	2035	625.252991267
+Z	2	1248.658
+Z	3	1872.484
+164.85294 41611.8
+166.98090 35141.5
+169.50453 40374.5
+171.63905 52461.8
+188.25932 51461.8
+188.26732 74794.1
+188.27869 80394.5
+188.29335 73339.9
+188.30833 57477.4
+188.32498 37216.0
+193.85570 35868.0
+198.90515 68440.7
+199.16585 34724.5
+199.22295 46278.6
+199.23264 37807.3
+199.27039 118215.6
+199.28192 116003.0
+199.29277 104415.2
+199.39119 48610.8
+207.37090 46465.8
+211.18025 247788.4
+233.16484 183942.8
+233.58847 53914.0
+239.17552 170170.5
+255.30617 43551.6
+259.16232 46817.4
+271.24316 43289.7
+271.61554 58663.3
+284.19617 325393.5
+285.19815 50164.4
+318.17938 56701.7
+327.42914 38676.7
+333.19144 542878.2
+334.19562 48201.1
+350.28665 70338.7
+368.13287 38578.7
+375.20245 64863.5
+382.20990 37871.2
+386.24493 126002.1
+393.22028 34357.5
+403.27002 238398.9
+404.27286 55677.7
+431.26413 307184.9
+435.48969 41007.1
+444.48514 43872.9
+452.35040 46094.5
+482.72894 256714.4
+483.22974 138225.4
+487.22086 76519.0
+490.22916 159003.6
+500.28418 43051.5
+513.28131 52176.9
+517.30975 46681.2
+528.28015 195167.7
+530.26471 209914.8
+530.76178 221848.8
+531.29089 1051462.9
+532.29395 282081.1
+532.50140 129026.8
+539.27026 4029814.8
+539.64142 47825.9
+539.77167 2048947.5
+540.27301 545547.8
+545.30713 235619.1
+587.24799 49002.8
+588.31226 1553035.1
+589.31592 446431.3
+590.31439 50045.4
+601.81659 64158.4
+606.31219 57901.1
+606.80444 419007.1
+607.30560 252037.8
+607.80597 81471.7
+642.32239 110226.1
+643.30347 235914.7
+644.29834 41815.1
+654.25861 41635.6
+660.33417 307137.5
+661.33746 59912.5
+662.62854 42995.8
+663.25177 44945.7
+676.60907 80466.0
+699.34442 67285.5
+700.32831 506137.9
+701.33270 121776.6
+703.33960 1015659.2
+704.34210 415346.0
+705.34570 62620.0
+706.64215 84232.7
+713.78992 39985.0
+717.35510 193385.4
+783.37756 45328.0
+795.61365 46619.4
+799.37360 86308.8
+817.38184 2671304.0
+818.38477 1166214.8
+819.38910 210162.3
+880.41583 70963.8
+881.42664 60963.8
+897.44403 118573.4
+898.42810 179250.9
+899.43652 82517.6
+915.45697 268248.5
+916.45789 83244.1
+946.44037 155392.8
+947.42896 112354.3
+948.42706 55997.4
+952.55731 45468.2
+964.45038 3624363.0
+965.45422 1721825.5
+966.45667 452964.7
+1019.69012 52754.3
+1034.17310 47537.4
+1049.49817 51169.3
+1057.20911 55176.1
+1060.50830 61198.5
+1066.49756 199402.8
+1067.49438 93567.7
+1077.53601 754072.5
+1078.53687 469368.3
+1079.53870 144861.9
+1083.52368 149171.5
+1084.50830 232941.7
+1085.50977 109669.6
+1086.50537 54266.3
+1101.53418 449273.9
+1102.53918 277728.4
+1103.55200 48593.9
+1198.11597 217233.5
+1273.88269 47898.7
+1437.98865 54515.4
+1525.53259 49966.6
+1662.08789 38437.2
+1775.76477 42966.4
+1877.83435 57042.6
+1879.45959 1278114.5
+1879.73132 162407.4
+1880.28345 51730.6
+1880.49841 38451.1
+1907.06665 471594.8
+1918.78870 72265.8
+1930.70654 77815.9
+1985.65137 39060.5
+S	2037	2037	530.2549296
+Z	4	2116.98842
+135.21077 556.6
+137.29074 686.9
+137.62350 628.9
+140.87637 535.8
+146.90169 579.9
+155.62117 571.1
+157.60474 782.2
+159.17171 620.6
+168.85771 667.8
+171.64046 833.7
+172.74524 586.5
+173.56082 602.0
+181.59157 578.1
+182.78381 631.4
+188.27266 1993.6
+188.28896 2058.6
+188.30165 2112.5
+188.31529 1276.5
+188.33887 620.0
+189.55525 519.9
+198.90424 1238.6
+199.18896 799.6
+199.19882 689.6
+199.26563 866.8
+199.28586 2513.7
+199.29596 1361.0
+199.31009 850.6
+199.31615 647.2
+199.38219 871.1
+199.39447 775.5
+199.40865 498.6
+219.71217 649.6
+220.92390 633.2
+231.02242 622.4
+233.12857 8207.3
+234.13173 1073.0
+249.53606 653.3
+255.10886 6235.6
+255.29210 697.3
+258.10864 961.5
+261.12311 2048.4
+261.61826 954.1
+264.23492 589.0
+265.12085 636.0
+270.13226 3607.8
+270.63498 709.3
+272.13516 5814.3
+275.12427 3014.0
+275.61713 1459.3
+276.11682 851.1
+283.63788 4662.8
+284.12961 13524.9
+284.63107 5210.8
+285.13275 1164.8
+285.16632 2603.5
+286.14371 687.1
+292.64294 36277.4
+293.14447 13592.8
+293.64557 3812.4
+297.07159 558.3
+298.63159 690.4
+301.05695 647.6
+303.17654 732.8
+310.15112 1344.6
+313.15994 653.0
+316.64539 3399.1
+317.14563 1084.5
+321.63620 2388.2
+330.64206 16947.5
+331.14343 6320.5
+331.64529 1793.3
+341.16858 2812.5
+341.68469 7609.6
+342.18567 3056.0
+342.69022 686.2
+365.16357 1042.6
+370.16443 1016.9
+372.19861 1250.8
+379.16852 12696.6
+379.66925 5138.2
+380.16995 2371.1
+382.18552 1209.6
+383.16855 1061.0
+386.21414 2823.0
+391.21918 5648.8
+391.72134 3095.7
+392.16632 685.2
+395.17871 1698.8
+396.18170 1162.6
+396.67657 606.4
+399.87271 4910.9
+400.19266 6512.2
+400.54022 1677.8
+401.19769 1590.0
+405.49283 587.8
+414.20920 8055.7
+415.21289 1458.5
+416.26157 5181.6
+417.17987 792.8
+422.70108 2664.6
+423.20438 1082.4
+427.54263 690.2
+432.85956 606.6
+438.20868 3929.8
+439.21387 791.4
+440.75357 5174.2
+441.25485 3261.9
+441.75775 1202.0
+442.20676 646.1
+446.70224 4139.8
+447.20303 2347.4
+447.70258 1006.3
+451.69452 1881.9
+452.18716 1542.6
+452.68869 1641.0
+453.98843 520.5
+457.21564 1938.3
+457.71591 979.3
+460.69986 19722.5
+461.20139 11406.7
+461.70221 4920.2
+462.20218 1190.9
+462.70541 780.0
+476.27209 20189.3
+476.77386 11890.5
+477.27429 3946.8
+477.77515 956.7
+479.70728 683.1
+480.57407 1574.1
+480.90796 1918.6
+481.24081 1099.4
+485.44452 1431.3
+485.77756 1372.2
+486.01508 1192.8
+486.24033 794.1
+486.35129 848.0
+486.52625 1482.7
+486.57800 256145.0
+486.67313 1021.9
+486.91199 272338.3
+487.14685 1375.1
+487.24557 168582.4
+487.47644 1361.1
+487.57919 75786.1
+487.71613 1332.9
+487.91278 25326.2
+488.04947 1911.2
+488.24252 7620.1
+488.38986 908.2
+488.58044 916.7
+488.72061 1964.2
+489.22327 923.4
+501.24088 17029.9
+502.24371 5776.0
+503.24426 1157.4
+507.19037 6016.9
+508.18997 1499.1
+508.63034 649.9
+511.22424 936.2
+512.20142 1561.6
+514.20758 1140.1
+529.23364 1787.3
+532.53455 2284.8
+534.28418 717.8
+545.25214 946.9
+545.30206 6230.0
+546.25555 664.5
+546.30548 1784.9
+578.22809 858.7
+582.26935 570.5
+590.29755 1009.3
+599.30505 84938.6
+599.80634 69686.3
+600.30670 37055.8
+600.80731 13380.9
+600.86938 628.1
+601.30768 4498.7
+619.25250 1699.6
+619.75482 1127.1
+620.25421 1245.7
+626.29120 1242.7
+632.28522 903.5
+642.26746 2288.0
+647.28021 975.0
+653.30920 881.1
+658.48132 950.0
+660.27618 139339.4
+661.27881 57473.6
+662.08118 769.0
+662.27856 18529.3
+663.27893 5620.4
+668.78662 1080.1
+669.78754 1134.8
+676.63580 865.5
+677.29675 1763.6
+678.29700 1192.2
+680.83606 45568.2
+681.33801 40668.6
+681.83862 25856.7
+682.32050 4685.7
+682.37238 9383.4
+682.84100 3249.2
+683.36725 6294.8
+684.36139 928.2
+698.29297 1074.2
+720.35791 829.0
+720.86853 716.3
+721.35522 1135.5
+727.28186 1322.4
+727.77942 917.1
+728.83496 814.3
+729.36334 227933.1
+729.43439 940.9
+729.86414 235444.2
+730.36438 151126.9
+730.86523 61577.0
+731.06512 1015.6
+731.36627 19326.8
+731.45496 1191.2
+731.86798 5769.1
+731.95679 1239.4
+732.37354 933.0
+732.46326 747.6
+776.36823 1553.4
+778.31879 4591.9
+779.32043 1670.1
+781.43109 5594.3
+782.43353 4095.4
+783.44501 1100.2
+791.31464 1178.8
+794.88776 877.2
+795.38574 1740.9
+795.60980 1234.8
+795.88599 653.8
+920.39032 7064.4
+921.39502 4431.6
+922.39172 2074.2
+932.77740 651.1
+951.53442 1114.9
+1037.19446 613.4
+1123.13562 637.2
+1164.29700 652.3
+1198.20105 3312.9
+1878.25122 828.9
+1878.74072 711.5
+1879.10461 1756.2
+1879.52930 19478.2
+1879.94275 1774.2
+1880.22253 660.6
+1880.81714 972.1
+1907.08386 7495.8
+1918.81763 903.7
+1930.63770 824.2
+S	2038	2038	531.0058246
+Z	4	2119.992
+135.64928 12083.0
+141.85214 14583.3
+146.92375 16403.4
+151.76306 16092.9
+158.26837 13434.6
+165.77184 21123.7
+186.80769 14333.4
+188.21579 14818.7
+188.22833 15943.1
+188.24001 16664.3
+188.26555 16421.4
+188.27438 18102.1
+188.27986 17631.8
+188.30177 17116.3
+188.31209 19530.0
+188.31886 20822.5
+188.34550 13045.2
+188.36229 13122.7
+199.16287 16037.1
+199.21021 21876.4
+199.24265 21396.9
+199.26572 37559.6
+199.28340 17064.0
+199.29259 27564.9
+199.30893 42015.4
+199.32779 24973.6
+199.33990 15333.2
+199.36311 27515.4
+199.39076 17800.3
+213.08653 34539.1
+219.30440 16237.8
+233.12862 203488.3
+234.13116 18213.9
+237.13455 22140.5
+240.09824 30271.4
+241.08122 22461.6
+249.12767 17550.0
+255.10886 164916.6
+255.29126 14878.3
+258.10986 36990.1
+261.09021 17383.7
+261.12311 65750.5
+261.61893 42849.8
+265.12283 37648.2
+266.12009 22480.9
+270.13223 118640.5
+272.13550 252569.4
+274.63205 18779.5
+275.12466 126814.7
+275.61740 65759.6
+283.63785 156084.5
+284.12991 531022.9
+284.63126 117607.0
+285.16705 100100.5
+286.14102 29687.9
+289.16159 16137.9
+292.64313 1293994.9
+293.14471 367029.1
+293.64551 54432.3
+294.48239 14401.0
+298.12430 15361.8
+303.17825 36698.0
+306.63724 17915.1
+310.15262 23936.1
+313.16379 16334.9
+313.52997 17006.9
+313.64783 28596.7
+316.64511 78252.2
+317.14676 26355.7
+318.11185 21417.4
+321.63742 80041.2
+322.12820 33375.4
+330.64221 567417.8
+331.14386 154943.5
+331.64398 39293.2
+341.16949 105024.7
+341.68494 237072.2
+342.09024 14555.4
+342.18509 71040.6
+347.73712 13594.9
+349.08362 14554.0
+350.28528 15103.5
+365.17191 34831.6
+370.16354 26170.4
+372.20074 46200.2
+379.16870 455451.1
+379.67020 184797.5
+380.16864 36947.0
+381.37030 15433.2
+382.18652 26445.2
+383.16876 33052.0
+386.21594 72299.0
+389.14783 20730.6
+389.18674 25856.9
+391.21948 202765.7
+391.72113 88979.7
+392.16400 24497.4
+395.17981 34048.5
+396.18433 20016.9
+397.18225 23155.6
+399.87329 254890.6
+400.19250 210934.2
+400.53940 54511.1
+400.87579 35498.1
+401.19711 33812.9
+414.20969 270290.3
+415.17422 14014.4
+415.21387 37613.4
+416.26111 128536.9
+417.26349 21242.5
+422.70151 81093.5
+423.20221 47478.6
+435.15140 17957.1
+438.20905 94850.7
+439.21375 17303.9
+440.75375 170871.6
+441.25555 72566.5
+441.75394 20920.6
+443.18198 18529.8
+446.70294 147606.0
+447.20447 60179.2
+447.70593 21273.5
+451.69519 83442.8
+452.18521 61642.1
+452.68228 20794.6
+457.21622 59846.7
+457.71762 35025.6
+460.70035 713526.1
+461.20178 288515.8
+461.70270 100891.5
+462.20020 28495.7
+476.19052 17875.1
+476.27219 565653.9
+476.77402 264488.8
+477.17679 16180.0
+477.27512 80475.1
+477.77411 17335.9
+479.71265 18661.8
+480.16998 15731.7
+480.57391 48494.3
+480.90689 36438.6
+481.24112 20848.0
+481.93607 16443.8
+482.63281 15898.6
+482.66086 13346.4
+484.21759 14877.1
+485.44601 55314.3
+485.64600 23232.4
+485.78003 44095.6
+485.90973 18881.1
+485.98080 24532.6
+486.02051 52852.5
+486.11655 29288.7
+486.35300 36572.9
+486.39825 17311.9
+486.45291 19767.8
+486.46573 17226.5
+486.52579 45194.9
+486.57825 10879656.0
+486.63031 38151.6
+486.64755 17702.7
+486.67191 27342.9
+486.68317 16345.3
+486.71951 16557.7
+486.73315 17310.7
+486.91211 8944367.0
+486.96164 49120.4
+486.98111 17566.9
+486.99399 17367.7
+487.13742 58480.9
+487.24576 4291117.5
+487.32776 33805.8
+487.46933 49512.6
+487.50916 34552.9
+487.57953 1618126.5
+487.71234 78225.7
+487.80228 30699.2
+487.84750 36810.6
+487.91351 437152.2
+488.04803 53511.3
+488.22684 170238.3
+488.38446 19385.8
+488.47589 19050.4
+488.72171 80000.2
+489.22430 28520.7
+494.20038 29858.3
+496.34158 13371.7
+501.24078 598516.4
+502.24472 136506.1
+503.24240 21889.6
+507.18982 140407.3
+508.19000 25379.3
+511.22229 35288.1
+512.20746 51451.9
+514.20697 23538.8
+529.23462 49334.4
+531.23724 15575.9
+532.51971 52294.6
+533.78131 48260.8
+534.28436 20205.9
+534.77637 18726.4
+545.24951 51990.0
+545.30402 201114.2
+546.30908 23622.8
+573.24597 17405.1
+574.15662 14212.2
+583.73615 41262.5
+589.26953 16528.3
+590.30231 36097.7
+597.75818 18139.4
+599.30548 3311597.5
+599.80652 2024394.0
+599.86115 18383.5
+600.30688 852815.7
+600.57727 20892.4
+600.80817 232342.3
+601.30719 65656.4
+605.18268 13905.8
+609.85345 13573.1
+616.67188 40658.1
+616.99951 17724.4
+619.25189 104045.7
+619.75391 58347.6
+620.25635 31132.7
+632.28333 18560.3
+642.26617 86842.9
+658.48358 22831.7
+659.38788 21789.1
+660.27692 5025709.5
+660.35059 20449.0
+661.15570 31998.0
+661.27936 1615256.6
+662.07153 30119.4
+662.27911 453391.1
+663.28088 88686.2
+668.78571 43232.7
+669.29010 43687.7
+669.78687 29778.2
+670.29443 32713.0
+672.56799 15272.1
+673.26025 15710.2
+676.62634 19073.8
+677.29681 72515.0
+678.30048 27548.6
+680.83710 1682557.3
+681.33862 1260818.9
+681.83905 572397.4
+682.31555 64715.5
+682.36957 344186.6
+682.83917 53161.1
+683.36591 145119.7
+684.36523 23147.6
+685.82629 21610.9
+706.34320 23536.2
+714.83759 14146.4
+720.35822 51253.8
+720.86237 43737.7
+721.36407 50086.8
+722.34705 19448.0
+727.28839 55714.5
+727.65540 21381.1
+727.71942 13172.7
+727.78595 46610.6
+727.99335 20459.3
+728.33649 43277.4
+728.84119 35123.9
+729.03210 17384.5
+729.07794 16680.6
+729.36395 9863924.0
+729.86462 7716105.5
+730.36493 3793916.0
+730.86591 1396116.4
+731.09222 25065.4
+731.36658 418178.2
+731.45190 55137.8
+731.59021 14024.8
+731.73956 21430.7
+731.86969 90442.9
+731.95111 51367.0
+732.45990 25366.6
+738.01398 16993.5
+776.36603 38702.7
+778.31958 140735.1
+779.32062 69267.5
+781.43005 220940.9
+782.33398 19457.7
+782.43475 122583.4
+783.44037 18901.0
+791.31433 42779.4
+794.88617 65508.0
+795.38617 51590.0
+795.60583 25639.3
+795.88623 20748.8
+841.44666 14510.7
+866.03168 15806.9
+880.50031 35146.4
+902.37311 17249.3
+920.39331 266922.1
+921.39453 142493.0
+922.39648 39352.7
+927.65033 12694.1
+951.54071 34014.7
+1005.16357 14780.9
+1019.68011 17537.7
+1057.23572 16863.4
+1188.92322 15219.8
+1198.16028 83043.6
+1412.56189 14151.7
+1520.59595 14344.7
+1696.99109 16934.5
+1728.62524 14059.0
+1870.45654 15227.0
+1878.15735 24622.6
+1879.21179 54129.2
+1879.49915 480759.7
+1880.08948 23300.9
+1880.47693 12741.9
+1880.59265 12710.5
+1880.82544 20916.6
+1882.41943 17893.3
+1907.10229 178648.2
+1930.63684 30788.1
+S	2039	2039	1879.91440793
+Z	2	3757.981
+Z	3	5636.468
+518.26868 622.0
+532.51105 1603.4
+676.63574 1128.7
+764.11908 629.2
+765.82184 672.9
+783.59137 674.8
+795.61639 791.7
+897.70642 698.7
+925.29395 633.2
+1012.09119 602.5
+1038.52356 613.5
+1168.53882 597.1
+1197.87610 705.3
+1198.00208 983.5
+1198.13940 3308.1
+1351.61072 527.9
+1488.33618 742.0
+1506.46948 732.2
+1525.46863 1086.9
+1777.08142 906.2
+1878.30457 1033.6
+1878.83179 1046.3
+1879.19739 1215.3
+1879.53027 19995.3
+1879.83630 1404.3
+1880.72766 842.2
+1907.08118 7277.7
+1912.19458 596.8
+1963.79968 635.9
+S	2041	2041	530.2538321
+Z	4	2116.98403
+141.85071 595.1
+146.30991 519.7
+146.31424 537.2
+161.85976 509.2
+165.77043 776.2
+188.21619 733.1
+188.24791 887.8
+188.27791 2237.7
+188.29092 2114.2
+188.34181 601.7
+195.02373 593.8
+198.90413 665.1
+199.18979 815.2
+199.20015 479.8
+199.20477 492.7
+199.25417 758.6
+199.27765 1320.6
+199.28845 2615.8
+199.30687 662.7
+199.34068 750.7
+199.37009 698.7
+199.38560 931.3
+225.62794 662.8
+233.12886 3148.6
+255.10875 2597.0
+255.30615 620.3
+269.82938 564.4
+270.13269 1444.2
+272.13611 2818.2
+275.12506 1661.4
+275.61957 885.6
+283.63876 2929.5
+284.13040 7541.8
+284.63202 2933.5
+285.16919 1570.6
+286.14017 920.2
+292.64377 18617.4
+293.14542 6263.5
+293.64691 1468.0
+308.92020 572.2
+310.15277 839.3
+316.64508 2737.2
+317.14862 1595.7
+319.00287 642.4
+321.63773 1940.8
+322.13077 946.4
+330.64282 13669.4
+331.14413 4814.0
+331.63986 1009.7
+341.17004 3036.7
+341.68506 5073.1
+342.18680 1842.3
+356.65747 591.5
+365.16824 894.5
+369.19022 862.9
+371.16235 677.4
+376.14160 565.7
+379.16937 12761.2
+379.67038 5512.4
+380.17184 1835.1
+382.18182 575.4
+386.21616 2363.3
+391.21991 6166.1
+391.72168 2300.9
+392.16284 897.7
+392.22351 1028.7
+395.18158 824.5
+399.87402 4244.7
+400.19370 3016.0
+400.20935 3357.1
+400.54102 2067.7
+401.19385 739.5
+414.21030 4959.1
+415.21384 759.3
+416.26257 6178.1
+417.26608 1032.8
+422.23746 556.3
+422.70154 3064.4
+423.20566 826.9
+423.70529 773.2
+424.06747 739.0
+438.20987 2313.9
+440.75452 6679.7
+441.25693 3300.5
+441.76044 877.2
+446.70355 6704.6
+447.20575 3648.9
+447.70441 1093.1
+451.69501 3234.3
+452.18591 2303.9
+452.68631 1088.4
+457.21539 1162.4
+460.70093 37188.8
+461.20255 19451.8
+461.70316 6383.0
+462.20651 829.6
+462.70218 842.9
+476.27283 26376.9
+476.77393 14301.2
+477.27582 3637.0
+477.77594 1034.9
+479.70718 1695.6
+480.57581 1589.8
+480.90942 1067.3
+481.57434 832.7
+485.28067 592.0
+485.29938 634.1
+485.40036 980.0
+485.44443 1714.8
+485.55405 582.1
+485.64496 1200.4
+485.73843 857.5
+485.77667 1806.5
+485.89832 858.7
+485.97867 1069.1
+486.02002 1807.4
+486.31427 891.7
+486.34573 1772.5
+486.57916 513550.3
+486.64844 986.5
+486.67355 1450.5
+486.85001 1533.6
+486.91278 424799.9
+486.97821 1213.8
+486.99570 764.7
+487.00937 773.8
+487.09064 803.7
+487.14636 2944.9
+487.24640 220019.8
+487.32828 1090.7
+487.46106 1766.3
+487.48120 1803.9
+487.51520 1988.3
+487.58017 88128.4
+487.71808 2426.3
+487.80161 827.2
+487.85052 1850.5
+487.91425 27796.8
+488.05350 1687.4
+488.09451 748.1
+488.19104 1178.1
+488.24109 7558.1
+488.38791 1002.0
+488.58173 1478.4
+488.72318 2000.8
+489.22897 657.4
+489.71756 633.8
+491.20355 545.8
+494.19769 1057.6
+501.24161 10715.4
+502.24426 2482.2
+507.19122 8816.1
+508.19321 2020.6
+529.23676 5138.3
+530.24017 1921.7
+532.48212 1988.4
+533.78613 2150.8
+534.28699 2818.9
+534.79163 1048.5
+541.75928 563.1
+545.25140 3311.0
+545.30414 17427.4
+546.25464 972.8
+546.30762 4708.6
+547.31055 1051.6
+549.18323 698.1
+567.62299 690.4
+578.22937 3054.8
+580.24402 1012.4
+583.73334 3302.3
+584.23425 2047.3
+584.73578 1292.5
+590.30078 1751.8
+590.79932 1639.2
+598.50372 545.0
+598.54120 511.9
+599.30640 177526.2
+599.80750 112064.2
+600.30811 48042.5
+600.80823 15778.8
+601.30927 4442.0
+601.81311 828.1
+605.95239 1101.5
+615.96088 670.9
+616.66913 883.7
+617.00531 2050.9
+619.25299 6109.7
+619.75360 3583.6
+620.25378 1935.2
+626.28827 1011.4
+629.32666 730.9
+632.28259 6664.1
+633.28394 869.8
+642.26636 3327.5
+643.24573 2244.3
+644.25500 1042.3
+647.28619 725.7
+649.30347 885.8
+651.31036 1444.8
+653.30933 1558.6
+658.48395 1056.3
+658.66711 688.9
+658.79761 781.7
+659.39642 1291.1
+660.18152 668.8
+660.27753 330244.9
+660.35461 1409.6
+661.16852 1643.2
+661.22095 1102.3
+661.27997 109526.7
+661.75848 954.2
+662.07971 997.1
+662.15790 958.5
+662.27966 32678.6
+663.27972 6408.1
+664.28583 948.1
+665.33148 1338.9
+668.78906 3240.3
+669.28857 3380.4
+669.78809 1150.7
+671.83337 885.2
+676.65918 1047.1
+677.29706 5469.8
+678.29828 1648.9
+679.30182 805.7
+680.83795 107471.0
+681.33942 83750.5
+681.84015 38921.0
+682.31018 4472.7
+682.36755 44787.5
+682.84216 3791.8
+683.36774 16294.2
+684.36658 3922.4
+685.37402 713.7
+685.83710 737.3
+686.33746 721.0
+706.33813 1825.7
+706.66724 1010.7
+707.00372 1285.2
+720.36090 3246.1
+720.86151 4694.4
+721.36176 2273.0
+726.63800 585.9
+727.19958 1078.4
+727.28418 3020.2
+727.48932 1689.8
+727.66431 2043.9
+727.78113 2397.1
+727.98364 2011.7
+728.15155 1494.4
+728.33954 2993.4
+728.48608 820.0
+728.84351 2732.0
+728.96747 938.3
+729.01813 1261.9
+729.18896 1530.6
+729.36493 727198.6
+729.44910 2532.5
+729.86505 604904.4
+729.96362 1904.8
+729.98578 990.0
+730.03925 1253.8
+730.29645 2153.6
+730.36536 308770.6
+730.45007 915.0
+730.74988 1256.3
+730.86652 116175.0
+731.08167 1949.4
+731.24762 2092.9
+731.36755 36534.8
+731.45386 3063.2
+731.57556 1891.3
+731.75653 2358.6
+731.87042 9469.8
+731.95691 2762.7
+732.05200 1457.0
+732.25513 1238.0
+732.37201 2026.2
+732.45703 1210.8
+757.33051 596.1
+764.39984 974.3
+776.36725 3594.2
+777.37067 1354.9
+778.31958 8580.7
+779.32019 3029.9
+780.31555 967.8
+781.43152 48522.6
+782.35114 2018.2
+782.43506 17962.6
+783.43701 4726.2
+789.34973 1743.8
+791.31934 863.0
+794.88416 6099.6
+795.38654 4932.9
+795.60333 1061.3
+795.88525 2615.5
+816.37372 778.1
+823.33917 929.4
+880.50024 13892.1
+881.50269 6017.3
+882.51044 1078.5
+892.40070 1566.4
+893.39868 953.3
+895.43359 1103.6
+912.37427 570.0
+913.42493 2670.5
+914.42444 988.7
+920.39343 29785.9
+921.39661 15336.7
+922.39520 4743.6
+950.91846 568.1
+951.53717 15697.4
+952.54156 6651.9
+953.54047 1549.8
+1023.49622 1378.6
+1042.46350 1844.9
+1043.46802 953.6
+1049.53491 821.5
+1057.27014 712.8
+1066.56458 12372.6
+1067.56738 7158.6
+1068.56885 1690.0
+1155.53857 1334.0
+1156.02966 618.2
+1156.55872 806.3
+1197.60376 7774.6
+1198.07581 3515.1
+1198.60535 4035.5
+1199.61072 1687.2
+1283.61560 1146.7
+1284.62146 613.9
+1355.79382 628.9
+1360.67236 1142.6
+1384.95789 538.2
+1386.47961 666.2
+1683.69446 614.6
+1876.14087 795.7
+1879.20630 3456.6
+1879.58105 19726.0
+1879.93738 3176.4
+1880.30457 769.3
+1882.78027 760.4
+1907.03552 7129.9
+1930.70959 952.8
+S	2042	2042	531.0050746
+Z	4	2119.989
+138.87007 6961.5
+145.23279 6560.4
+146.92534 8505.5
+152.69275 7741.6
+165.77209 7529.1
+166.56195 6627.4
+169.42828 6345.7
+169.49840 9316.4
+182.78844 8435.9
+188.21655 6657.0
+188.22720 7311.6
+188.24008 6519.7
+188.24713 9198.6
+188.25893 11800.7
+188.27577 9423.5
+188.28944 9841.3
+188.29842 9649.0
+188.31602 10793.2
+188.32892 6816.6
+188.34850 10495.8
+188.36755 8630.3
+198.90588 7666.8
+199.22206 8515.7
+199.26331 10381.8
+199.27504 10952.7
+199.28143 19717.2
+199.28769 22929.9
+199.30682 16056.8
+199.38338 8651.6
+213.08687 12594.3
+227.10797 6602.4
+233.12849 102125.9
+233.58054 10228.2
+234.13197 13066.1
+234.93254 8462.4
+236.78856 7004.6
+241.08183 11575.5
+241.11787 7395.8
+248.33694 6814.6
+255.10863 69919.9
+255.29674 8980.8
+258.10776 8066.6
+261.12332 25556.4
+261.62000 17164.8
+265.62430 7862.3
+270.13202 51029.9
+272.13550 96568.6
+275.12393 39310.2
+275.61710 24358.3
+276.12268 8683.2
+280.19275 7214.4
+283.63763 86529.0
+284.12973 222844.8
+284.63162 67596.8
+285.13040 11180.7
+285.16696 44723.1
+286.14209 10519.9
+291.86627 6600.1
+292.64304 559143.4
+292.90509 8820.7
+293.14459 160160.9
+293.64502 24037.5
+297.63498 9770.1
+303.17636 16348.5
+306.64410 6788.5
+308.13452 9132.3
+310.14886 14982.7
+312.62848 7096.6
+315.85135 6444.3
+316.64493 42775.4
+317.14517 9344.4
+318.11224 11617.7
+321.63681 51221.5
+322.12912 20186.1
+322.62894 8017.0
+330.24817 6851.4
+330.64215 268457.2
+331.14371 84344.8
+331.64468 10866.0
+334.48181 7149.6
+341.16907 56540.2
+341.68451 140772.2
+342.18671 46710.3
+355.66776 6612.4
+365.16931 10842.8
+366.22638 7424.8
+369.18976 11447.5
+370.16312 11331.3
+370.65179 14444.2
+371.15439 8530.5
+372.12445 13988.5
+372.19983 19224.2
+372.88489 7061.3
+379.16843 219486.0
+379.66949 72229.6
+380.17001 23450.7
+383.16696 12644.5
+386.21481 31842.3
+389.14938 14267.8
+391.21936 111981.4
+391.72049 32132.8
+392.16205 13468.0
+392.22174 18000.3
+395.18112 14731.5
+395.67850 8309.7
+396.17908 15305.2
+397.17932 7708.1
+399.87277 115871.2
+400.19199 98250.3
+400.54037 20575.6
+401.19614 9920.3
+408.81891 6830.3
+414.20920 120247.2
+415.21237 19578.6
+416.26151 63353.1
+417.18021 10362.1
+420.06503 9374.3
+422.70132 54918.5
+422.86484 6636.7
+423.20255 19827.8
+423.70297 8888.7
+427.55679 10825.5
+438.20935 53694.2
+439.21515 10992.8
+440.75357 81864.4
+441.25568 33881.0
+441.60843 6577.1
+443.18359 7356.7
+446.70261 66597.6
+447.20319 39403.2
+447.70505 12591.6
+451.29373 7045.9
+451.69562 30585.0
+452.18582 37936.8
+452.68469 11333.1
+453.18640 15150.2
+457.21539 31397.7
+457.71536 14390.8
+460.70023 354116.7
+461.20157 169164.8
+461.70227 59353.5
+462.20071 20476.4
+476.27209 302754.2
+476.77380 158164.7
+477.17517 7565.0
+477.27469 35201.3
+480.57465 16655.6
+480.90836 19937.2
+481.19339 6581.5
+481.58554 7743.3
+482.67062 8938.9
+485.44452 26483.2
+485.56717 9753.8
+485.64554 13012.9
+485.77838 20123.1
+486.01959 20375.8
+486.19858 10183.4
+486.35266 15383.3
+486.52353 17773.9
+486.57806 5716746.0
+486.63077 21815.9
+486.64508 13470.1
+486.70636 11358.7
+486.73529 16152.4
+486.76782 18239.4
+486.85138 14556.7
+486.91193 4435405.5
+487.02161 9384.1
+487.13806 29731.0
+487.24561 2333714.5
+487.32556 15873.6
+487.34991 6675.1
+487.47275 21993.4
+487.51407 18456.8
+487.57901 826228.5
+487.71329 28317.3
+487.84436 12615.0
+487.91302 206023.0
+488.05060 24378.9
+488.22546 91902.3
+488.38660 8912.5
+488.72171 39624.1
+489.22522 16861.3
+501.24072 253893.9
+502.24362 53947.7
+503.23111 7183.7
+507.18997 91695.1
+508.19315 18987.5
+511.22281 11176.2
+512.20941 28941.5
+529.23590 31056.1
+532.46234 20587.2
+533.78400 22603.1
+534.28528 12618.5
+545.24982 27037.3
+545.30328 113365.7
+546.30682 27339.8
+547.30859 9697.3
+558.38800 6401.7
+574.04529 7851.6
+578.23029 11434.8
+583.73602 29787.0
+584.23474 20544.4
+590.29663 17467.6
+590.79602 19139.8
+597.74933 7122.5
+599.30524 1740642.5
+599.80621 1081340.8
+600.30676 454391.2
+600.80762 131710.3
+601.30737 26920.7
+616.66895 11649.0
+617.00549 10267.1
+617.34100 11234.4
+619.25342 38586.2
+619.75220 39353.0
+620.25555 9343.4
+626.28906 16108.1
+633.71844 6888.5
+642.26733 36252.4
+643.23907 10340.8
+644.26355 7512.5
+658.48871 10812.0
+660.27661 2778060.0
+660.34222 12168.6
+661.16077 12412.3
+661.27924 895114.2
+661.88489 8562.7
+662.07642 11199.7
+662.27844 246917.6
+663.27698 50591.3
+668.78760 28052.3
+669.28888 22534.4
+676.62976 13745.3
+677.29572 30506.9
+678.30212 14747.8
+680.83673 940382.3
+681.33826 748226.8
+681.83905 316142.8
+682.31812 47380.8
+682.36981 174290.7
+682.84106 25219.1
+683.36658 76771.1
+684.37073 15888.5
+698.29169 10361.7
+704.64410 7375.3
+706.33362 11112.8
+706.66754 15093.2
+720.35785 26028.1
+720.85248 16832.7
+721.35168 9903.0
+727.28668 27970.8
+727.64960 15192.9
+727.78241 22016.7
+727.99597 12483.1
+728.14844 10149.9
+728.27856 10885.7
+728.33612 23144.3
+728.66394 13721.8
+728.83972 20557.9
+728.99969 7156.5
+729.03802 9744.1
+729.36371 5524109.0
+729.86420 4371403.5
+729.97626 10304.9
+730.36444 2165436.0
+730.86523 833767.3
+731.07202 16839.1
+731.14899 16286.6
+731.23376 18139.0
+731.36499 234431.0
+731.45270 35615.3
+731.73553 9600.1
+731.86469 53167.2
+731.95490 26769.3
+732.09869 6931.3
+732.36963 10063.1
+732.45990 8994.5
+732.96173 8469.9
+776.36597 23469.0
+777.36646 8963.3
+778.31793 84302.9
+779.32245 28558.8
+781.43036 141272.5
+782.43402 47484.1
+783.43323 14777.1
+789.35876 10609.8
+791.31207 19007.3
+794.88446 47401.9
+795.38171 34810.2
+795.88806 16605.4
+843.72491 7565.3
+880.49487 17601.9
+920.39276 152462.8
+921.39551 78637.5
+922.39276 22461.8
+951.53900 13434.9
+952.53094 7915.0
+1004.26611 8781.7
+1034.19348 6531.7
+1110.75415 6826.7
+1188.19043 8022.0
+1198.03101 31302.9
+1208.49670 6634.3
+1283.57959 9683.0
+1489.84277 7074.9
+1636.23596 6789.7
+1768.88391 7099.0
+1786.92407 6969.2
+1870.33984 9405.2
+1876.09497 6947.5
+1877.23779 7529.5
+1879.04529 26309.9
+1879.50049 233349.0
+1879.95642 28140.9
+1906.79565 21338.4
+1907.06799 72245.0
+1930.73645 7804.2
+1962.37988 6640.1
+S	2043	2043	1879.92824127
+Z	3	5636.509
+Z	2	3758.009
+532.45966 1816.4
+549.15680 927.1
+606.04633 709.1
+676.63843 760.3
+754.66431 677.3
+795.61755 858.8
+851.01807 711.8
+895.59589 684.7
+902.24231 645.1
+906.77216 643.3
+988.46136 715.8
+1142.89441 642.1
+1198.02954 3011.5
+1246.76245 659.5
+1293.77966 666.8
+1312.05310 580.0
+1525.41504 852.4
+1528.84839 545.5
+1566.44702 578.6
+1640.69568 595.9
+1705.03162 651.4
+1831.62671 707.3
+1870.38855 1211.1
+1875.82043 691.9
+1877.07019 749.4
+1878.88940 998.0
+1879.51013 19109.0
+1882.44336 706.5
+1907.02942 7191.6
+1930.59692 762.8
+S	2045	2045	530.2528546
+Z	4	2116.98012
+164.46246 51517.8
+167.05690 44310.5
+167.06044 45781.0
+168.05064 46430.1
+175.97050 48730.7
+176.91586 44859.4
+188.26701 144535.5
+188.28047 167096.7
+188.28922 172346.7
+188.30481 177482.3
+188.32098 116483.6
+188.37172 41678.5
+195.07701 54086.7
+198.90294 85348.5
+199.20226 59980.1
+199.24561 95155.4
+199.25969 112674.9
+199.26721 68261.6
+199.27968 136712.8
+199.28731 112877.3
+199.29791 96506.7
+199.31163 43917.1
+199.31786 48834.8
+199.33440 65568.5
+199.41406 59949.2
+212.81929 59821.3
+214.51750 59666.8
+224.35043 56807.1
+227.90373 44734.8
+229.20650 46034.9
+229.68768 47863.8
+233.12849 326164.7
+238.70540 66859.7
+240.10002 52553.5
+241.08214 72154.1
+255.10797 291204.4
+255.29298 51530.3
+261.12299 97060.7
+262.46548 42096.6
+270.13217 188122.0
+271.66333 49878.9
+271.82025 59276.4
+272.13501 451252.3
+274.63370 72089.0
+275.12463 179930.0
+275.61661 201080.0
+283.63736 344658.9
+284.12939 1119468.4
+284.63031 226414.5
+285.16617 229701.9
+292.64261 2543537.8
+293.14401 585764.0
+293.64398 101301.2
+313.16394 62094.7
+316.64279 158704.9
+321.63623 57018.8
+330.64182 1102064.3
+331.14285 308989.0
+331.64291 46949.5
+341.16910 178721.6
+341.68408 441049.9
+342.18665 157404.9
+365.16858 97702.5
+368.77060 48804.4
+370.16281 104139.4
+372.19836 79971.8
+379.16782 1003153.0
+379.66922 353100.8
+380.17206 73946.2
+383.17035 75797.9
+386.21606 122589.5
+391.21869 424076.2
+391.72110 109668.2
+392.16351 70473.6
+392.33823 54012.1
+394.56274 49423.0
+395.18103 84480.3
+399.87225 353504.4
+400.19244 556574.4
+406.82214 46708.5
+414.20889 593041.4
+415.21457 67436.1
+416.26004 145646.3
+422.70007 128776.3
+423.20267 68321.4
+423.23407 45247.5
+434.84601 42625.6
+438.20810 182399.5
+440.22412 49076.3
+440.75296 353026.5
+441.25235 194217.4
+446.70255 323285.4
+446.86496 44129.6
+447.20370 92341.9
+451.69397 215489.6
+452.18286 133903.9
+457.21518 90404.3
+460.69962 1415342.9
+461.20105 706025.6
+461.69974 159667.0
+462.20639 62209.8
+476.27106 845443.4
+476.77319 530618.5
+477.27539 157034.3
+480.57193 54566.8
+481.93738 50972.8
+485.44482 85863.9
+486.01770 72008.2
+486.35297 99902.8
+486.57721 20632884.0
+486.91141 16165227.0
+487.13611 139683.9
+487.24496 7800762.5
+487.47101 113980.1
+487.50739 54882.6
+487.57870 2775940.0
+487.71313 82364.3
+487.80560 74525.3
+487.91333 622823.9
+488.05176 70823.6
+488.22150 278029.4
+488.71967 124173.8
+501.24017 1066575.9
+502.24210 269205.6
+503.21194 51521.5
+507.18976 266876.9
+511.22382 69529.6
+512.20026 94712.3
+529.23486 115795.2
+532.46106 116193.6
+532.51721 51038.5
+532.54572 55517.9
+536.24078 50214.7
+545.25031 112579.4
+545.30200 314756.8
+549.16132 66822.1
+583.72394 63826.7
+599.30420 5749961.5
+599.80566 3718072.5
+600.30603 1334280.5
+600.80792 403964.4
+601.30414 95682.6
+619.25360 136945.9
+642.26483 96937.1
+659.39258 56560.9
+660.27557 8544346.0
+661.27844 2608743.5
+662.06848 75675.0
+662.27771 689028.3
+663.28143 118953.5
+668.78784 85266.5
+676.63605 83872.0
+680.83569 2945873.0
+681.33759 2131867.0
+681.83844 905394.6
+682.36700 488336.0
+682.83960 83764.9
+683.36633 221715.8
+717.74799 48462.2
+719.54254 54281.5
+720.35931 80870.6
+720.86243 96937.6
+727.28931 92095.5
+728.33612 82130.7
+729.36273 16898392.0
+729.86353 12766142.0
+730.36383 6232160.5
+730.86475 1990100.0
+731.36346 465257.3
+731.86652 108332.0
+776.35992 65306.7
+778.31769 302740.2
+779.31366 86080.2
+781.43115 388010.5
+782.43597 188751.9
+791.32202 83374.9
+794.88208 135135.0
+795.38495 96538.6
+820.66779 45671.0
+920.39038 485711.7
+921.39038 244247.3
+1012.02667 50145.2
+1157.97498 50102.2
+1198.04187 225309.6
+1198.19666 52874.7
+1198.27466 53643.1
+1253.91614 49942.4
+1519.83691 55831.7
+1524.58643 53110.4
+1658.56470 48617.4
+1776.98010 89687.3
+1876.86926 63770.5
+1878.77637 70494.5
+1879.08850 121668.4
+1879.51819 1649836.8
+1879.91943 110491.3
+1880.25769 75363.0
+1904.47729 48272.9
+1907.06714 629197.1
+S	2046	2046	531.0043246
+Z	4	2119.986
+136.91422 2162.6
+141.84966 2870.8
+171.63741 3977.1
+174.11154 2360.7
+188.23216 2633.1
+188.25674 2796.7
+188.27089 3603.7
+188.29021 3112.2
+188.30118 3320.4
+188.30901 3371.8
+188.31966 2436.9
+188.32697 2425.4
+188.34091 3604.1
+192.84784 2559.4
+198.90234 3877.7
+199.20894 3411.0
+199.26781 6534.4
+199.28201 10098.3
+199.29390 4161.1
+199.30974 5299.3
+199.33203 2715.3
+199.34259 2422.9
+199.38071 3060.5
+199.40749 2815.3
+212.67847 2299.0
+231.19646 2819.8
+233.12865 24223.5
+234.22624 2405.3
+238.70648 2979.5
+255.10884 19379.9
+255.20753 2613.2
+261.12341 4857.1
+261.62030 2786.2
+262.29776 2177.7
+270.13242 15559.8
+270.63394 3326.6
+272.13550 25435.2
+275.12408 11697.6
+275.61673 8524.2
+283.63794 23221.4
+284.12982 69402.6
+284.63144 15562.4
+285.13080 3763.1
+285.16730 12685.8
+285.67963 2893.6
+286.14133 2976.3
+292.64331 178786.5
+293.14490 48468.1
+293.64584 7489.7
+297.64371 2242.6
+303.17896 5723.4
+306.63925 2847.4
+310.15042 5046.6
+316.64557 14528.0
+317.14679 5461.9
+321.63672 13212.3
+322.12732 8178.7
+322.14340 2827.7
+330.64261 81977.4
+331.14410 21130.7
+331.64270 5630.9
+339.54105 2570.8
+341.16934 15476.1
+341.68460 27217.2
+342.18768 9625.5
+349.01065 3343.2
+350.27835 3008.3
+365.15549 2855.9
+365.16620 2878.5
+365.67078 2735.9
+372.20026 5064.3
+379.16898 79371.1
+379.67026 23136.3
+380.17072 7303.1
+381.36508 2971.9
+383.16830 3426.3
+386.21408 10514.3
+389.14954 4714.3
+391.21973 32124.6
+391.72205 16323.9
+392.16287 4205.2
+395.18170 4012.2
+397.18494 3626.3
+399.87354 35432.3
+400.19266 21417.3
+400.20917 21240.8
+400.54105 9315.0
+410.45422 2465.0
+414.21011 32927.8
+416.26196 25526.4
+417.17719 3321.4
+417.26590 3020.3
+422.70053 16680.4
+422.98349 2480.8
+423.20236 6405.9
+423.70621 3440.2
+427.54758 3117.3
+437.69485 4361.4
+438.20935 13954.9
+440.75436 40899.9
+441.25552 16110.9
+441.75604 3368.3
+446.70303 35538.6
+447.20441 15703.2
+451.69498 15651.2
+452.18677 13143.0
+452.68738 5287.4
+455.25449 2705.0
+457.21478 7555.7
+457.71567 5456.1
+460.70053 171133.9
+461.20206 67096.3
+461.70367 20130.4
+461.89691 2690.5
+462.20444 4445.4
+476.27246 121503.1
+476.77368 61732.8
+477.27661 6926.7
+479.70660 4947.8
+480.57568 12142.4
+480.90942 7522.3
+481.94183 3417.2
+482.27277 2892.0
+482.97647 3004.2
+484.21512 5036.2
+485.44638 12344.0
+485.49039 2905.1
+485.59610 4041.1
+485.65030 6415.4
+485.77966 6486.5
+485.82388 3858.4
+485.98270 4037.0
+486.01624 8663.4
+486.15912 3758.8
+486.30734 2685.9
+486.34375 5968.4
+486.38928 5416.9
+486.50201 4189.1
+486.52200 7336.1
+486.57843 2441026.0
+486.62891 6779.2
+486.65186 5703.3
+486.66891 3919.4
+486.70499 5065.0
+486.72064 4984.9
+486.73337 5154.6
+486.85010 6382.4
+486.91226 1898928.5
+486.96219 9124.8
+486.98053 4137.0
+487.00867 5184.4
+487.10199 4538.5
+487.14655 15016.5
+487.24588 874116.5
+487.29507 7054.4
+487.40979 3323.1
+487.43762 5352.5
+487.47888 10127.0
+487.51105 6798.4
+487.51935 6497.5
+487.57956 317925.4
+487.67032 6044.7
+487.71225 12036.7
+487.76779 4059.7
+487.83966 4817.3
+487.91330 89686.0
+488.00449 3376.4
+488.05084 8847.3
+488.17517 3041.2
+488.22946 29814.1
+488.32550 2895.8
+488.38885 4094.1
+488.57941 4165.4
+488.72244 12783.8
+489.22614 5439.7
+489.70782 2519.4
+494.20172 4091.6
+501.24103 78511.0
+502.24393 14008.7
+503.24338 3609.0
+503.71384 4079.9
+507.19055 39693.8
+508.19406 8990.8
+512.20764 4699.3
+524.44879 2818.3
+529.23572 28342.0
+530.23962 6052.6
+532.45764 9395.0
+533.78516 9426.1
+534.28693 8997.3
+545.25092 14393.7
+545.30402 74618.0
+546.30695 19292.9
+573.24524 4807.5
+578.22858 7221.1
+583.73364 17997.6
+584.23566 7880.5
+584.73853 4519.1
+586.69885 2766.5
+588.20410 2637.0
+590.29730 9370.2
+590.79773 5825.7
+599.24408 2756.0
+599.30573 728930.4
+599.80676 432193.1
+600.30737 178879.6
+600.58301 2485.1
+600.80859 56322.5
+601.30756 12957.5
+605.94232 4908.5
+615.96179 4658.4
+616.66949 8116.3
+617.00336 4449.2
+619.25140 23892.7
+619.75409 13030.4
+620.25293 6735.4
+626.28589 7424.3
+630.41534 3810.9
+630.46527 2707.7
+632.28265 20137.4
+633.28247 5703.9
+642.26703 11579.0
+643.24640 4345.5
+647.28186 4161.0
+648.73163 2822.3
+651.30939 7096.0
+652.96045 3255.8
+658.48541 5472.9
+658.79663 4417.8
+659.38562 4962.2
+660.27710 1379157.5
+661.16705 4613.5
+661.27954 411093.2
+662.07251 7194.0
+662.27936 109677.6
+663.27899 23354.6
+663.76263 2864.6
+664.27948 4606.7
+665.33185 4761.4
+668.78644 16134.0
+669.28693 12307.8
+671.83081 4549.0
+677.29675 19164.8
+678.29858 7391.2
+680.83746 466549.3
+681.33875 332522.5
+681.83966 153415.2
+682.36548 195026.2
+682.84033 18143.3
+683.36786 59903.7
+684.37128 13379.0
+698.29236 3920.4
+706.33630 5164.2
+706.66986 9790.5
+707.00104 6921.3
+720.35956 18710.7
+720.85999 14816.8
+721.35883 11918.2
+721.85181 5398.5
+727.06628 5208.2
+727.28857 12689.7
+727.64978 5683.5
+727.78601 10471.0
+728.15356 4040.6
+728.32990 13137.3
+728.83282 7555.8
+729.01898 4998.8
+729.18787 6019.8
+729.21417 4794.9
+729.25110 6766.2
+729.36420 3068716.3
+729.48779 5081.6
+729.52881 3626.2
+729.70624 4104.0
+729.76563 7092.0
+729.86456 2277845.3
+729.96271 6193.3
+730.00275 2799.6
+730.06104 4690.2
+730.29437 9991.2
+730.36505 1087176.8
+730.54681 5507.3
+730.86639 388528.9
+731.08331 7122.5
+731.12030 4894.2
+731.17200 4766.5
+731.36755 117821.3
+731.44727 12710.9
+731.58990 4278.8
+731.87006 28444.7
+731.95337 12915.5
+732.37006 6119.9
+732.45319 3863.2
+733.35040 4107.5
+738.01379 4939.1
+764.40063 5085.1
+776.36346 14146.8
+777.37274 6570.7
+778.31995 34832.4
+779.32043 12432.1
+780.30963 2865.3
+781.43121 180395.1
+782.34924 5084.1
+782.43402 68403.4
+783.43579 13303.7
+789.36102 5285.3
+791.31134 4431.3
+794.88434 19116.6
+795.38568 17546.9
+795.87976 5745.9
+832.92480 2696.1
+858.04773 3268.3
+880.49994 49221.7
+881.50183 18191.5
+882.50433 3796.7
+892.39465 6367.2
+893.41266 3692.0
+913.42639 8483.1
+920.39313 106256.5
+921.39569 52899.3
+922.39575 18100.2
+923.39471 4551.9
+947.85858 3286.0
+951.53802 49167.7
+952.54053 23736.6
+953.54425 5657.5
+972.96112 2752.2
+1019.69891 4116.0
+1042.47009 5185.4
+1043.46729 3053.1
+1066.56335 47145.4
+1067.56702 20275.0
+1068.57471 7733.2
+1140.56482 3051.3
+1153.21289 2473.9
+1155.55627 5806.0
+1186.55151 4344.6
+1188.34216 2882.5
+1197.60718 25109.2
+1198.01563 16231.7
+1198.60645 12589.7
+1199.60974 4742.3
+1283.60364 5841.9
+1284.59766 6548.6
+1302.29956 2575.7
+1360.67786 4496.2
+1368.17578 2552.6
+1434.58386 2817.3
+1479.22827 3219.5
+1525.43567 4007.8
+1576.00854 2910.1
+1771.87769 2832.9
+1776.90857 2946.2
+1876.40735 2655.6
+1878.76318 4397.3
+1879.08179 9943.0
+1879.47253 87519.3
+1879.86267 11414.6
+1880.16626 4604.9
+1907.04675 33224.6
+1978.31213 2467.2
+S	2047	2047	1879.97199127
+Z	3	5636.641
+Z	2	3758.096
+512.90936 665.2
+532.48633 1600.2
+564.98993 589.5
+567.64783 538.9
+630.43475 863.6
+648.34399 545.3
+676.65033 624.1
+677.73029 610.4
+758.21179 635.7
+805.23315 675.2
+835.71442 559.9
+858.07892 768.5
+1020.84326 650.9
+1188.35864 838.9
+1198.08423 3077.0
+1343.27917 688.2
+1466.84204 654.8
+1718.08862 650.5
+1859.99292 738.0
+1870.40955 875.3
+1878.34192 684.8
+1878.98755 837.2
+1879.33484 5175.1
+1879.58130 18327.7
+1907.01392 6888.5
+1907.29211 1075.9
+S	2049	2049	530.2631096
+Z	4	2117.02114
+140.14987 547.6
+144.03885 576.7
+149.39374 707.3
+151.57385 628.2
+153.89990 595.5
+168.08244 524.4
+169.54247 670.6
+171.63905 794.6
+175.26802 580.4
+188.14742 606.9
+188.25626 1425.8
+188.27861 2152.3
+188.29550 2257.5
+188.30740 1835.1
+188.34641 630.4
+188.37395 571.6
+192.69772 514.8
+198.90350 1271.8
+199.23959 569.9
+199.25491 774.6
+199.25964 683.7
+199.27200 1447.7
+199.28233 2208.1
+199.29466 1165.6
+199.30670 555.2
+225.59921 647.7
+233.12917 4822.7
+234.13222 1312.0
+235.40965 597.2
+235.59717 609.6
+255.11020 2058.2
+261.12375 1721.5
+261.61859 762.5
+266.12021 787.7
+270.13272 2381.7
+272.13553 2435.9
+272.58295 638.7
+275.12607 1642.5
+275.57245 651.1
+275.61768 1425.4
+280.17670 486.6
+283.63864 3389.7
+284.13086 7527.4
+284.63251 2055.6
+285.16800 1736.3
+290.36188 594.9
+292.64386 18675.1
+293.14529 7134.2
+293.64716 1277.3
+303.17572 735.0
+308.90005 913.1
+313.34824 597.1
+314.15027 500.4
+316.64584 2689.6
+321.63840 1806.8
+330.64294 11596.4
+331.14435 4396.4
+331.63831 698.5
+341.17029 2795.3
+341.68573 7274.9
+342.18726 2483.5
+369.18964 1043.8
+370.16373 1529.1
+370.65384 1306.4
+379.16974 10770.5
+379.67139 4410.3
+380.17276 1182.4
+383.16934 857.6
+384.51923 594.8
+385.21530 683.4
+386.21591 2509.7
+389.18655 743.0
+391.22040 8122.4
+391.72128 2204.4
+392.16299 945.1
+392.22498 833.3
+392.58530 603.7
+395.18033 1175.7
+396.18231 721.8
+397.18286 1373.1
+398.18091 804.6
+399.87360 6022.7
+400.20905 4543.0
+400.54242 2537.1
+410.13800 1099.9
+413.84061 672.0
+414.21066 4976.3
+416.26279 8527.3
+417.18024 1029.9
+417.26892 874.8
+422.70242 3163.3
+423.20416 1759.6
+427.54303 849.9
+438.21075 1872.3
+440.75470 7388.8
+441.25656 4673.0
+441.75909 1098.2
+444.98550 852.9
+446.70425 6371.1
+447.20468 3117.7
+447.70178 620.3
+451.69730 2450.3
+452.18738 3663.1
+452.69037 1925.2
+453.19089 773.5
+457.21631 1361.7
+457.71475 1210.7
+458.72980 577.6
+460.70163 35115.4
+461.20309 19223.6
+461.70337 6968.8
+462.20358 1950.5
+476.27335 32360.6
+476.77490 18545.6
+477.27600 5754.6
+477.77634 1317.0
+479.21310 755.8
+479.70758 1230.3
+480.57520 2391.0
+480.91104 3124.7
+481.24442 1291.6
+481.90311 756.5
+482.93643 589.0
+485.17496 620.0
+485.28220 686.8
+485.44305 2650.8
+485.57373 875.4
+485.64447 1405.8
+485.77414 2481.1
+485.98575 644.0
+486.01721 1808.7
+486.10880 990.9
+486.20358 981.5
+486.35260 1799.5
+486.51883 1544.6
+486.57974 550499.1
+486.62985 2047.3
+486.64575 1947.1
+486.67636 1325.0
+486.70502 920.2
+486.73569 1379.3
+486.83374 1572.9
+486.85007 1202.4
+486.91336 473547.7
+486.96237 2585.5
+486.97873 2133.7
+487.07156 886.1
+487.08841 933.4
+487.14252 2943.9
+487.19794 1892.8
+487.24683 264190.0
+487.41272 788.8
+487.47757 3020.7
+487.51169 1327.1
+487.58041 103941.4
+487.65405 998.9
+487.67999 854.8
+487.71902 3480.2
+487.81000 1170.6
+487.85043 1009.5
+487.91446 28627.1
+488.01849 1326.6
+488.05536 2775.6
+488.24243 8136.8
+488.35696 848.9
+488.38916 1868.0
+488.51678 654.5
+488.58401 1512.2
+488.72183 2145.3
+489.22116 1079.4
+497.24850 847.2
+501.24219 13264.8
+501.78897 593.5
+502.24445 2374.8
+507.19141 7378.2
+508.19601 1188.2
+529.23718 6843.8
+530.00787 1335.3
+530.23151 797.9
+530.26105 1513.4
+530.50574 3383.7
+530.75433 1574.6
+531.00446 995.4
+532.44330 2000.7
+533.78693 7062.6
+534.28802 7019.5
+534.78717 2120.3
+545.25085 6665.9
+545.30511 26736.4
+546.25580 1698.2
+546.30865 6824.7
+547.31067 1194.4
+549.14911 689.7
+553.72900 685.2
+555.22681 662.8
+573.24792 1201.9
+573.82703 626.4
+578.22968 2927.7
+579.23138 921.8
+580.24554 1048.6
+583.73407 3036.2
+584.23584 1917.1
+584.27808 889.0
+584.73993 841.1
+586.20337 578.5
+590.30151 2069.2
+590.80237 1846.2
+591.30377 736.1
+597.75470 1153.2
+598.25208 656.8
+598.53314 645.8
+599.24438 951.2
+599.30701 213284.1
+599.37140 800.5
+599.75549 965.9
+599.80811 147386.5
+600.07202 1087.7
+600.30853 61848.0
+600.80920 21277.3
+600.86957 1238.7
+601.08649 919.4
+601.31183 5026.9
+601.37091 834.8
+615.25482 715.1
+616.66815 1503.3
+617.00507 1193.6
+617.67609 849.6
+619.25403 5477.2
+619.75543 3791.5
+620.25433 1957.7
+620.75525 1022.4
+626.29010 1763.5
+630.39874 918.9
+632.28259 7488.5
+633.28406 2515.9
+637.10132 830.6
+642.26801 4092.2
+643.24396 1677.4
+647.28729 982.0
+649.29987 1038.9
+649.36536 1049.2
+651.31067 1780.9
+653.30908 2697.8
+658.48108 1578.8
+658.80676 719.1
+659.11249 743.5
+659.39172 1115.6
+660.27795 381281.6
+661.17157 1927.8
+661.28040 130796.5
+661.75861 1147.0
+662.08154 2333.8
+662.14203 1134.7
+662.27972 38359.0
+663.07788 987.6
+663.28033 8186.4
+664.27765 1030.0
+665.33331 1460.4
+666.33368 952.3
+667.95911 780.9
+668.78796 3278.5
+669.28912 2268.4
+669.79242 1258.2
+670.29236 1098.5
+671.82837 1174.2
+672.32184 706.0
+676.65125 869.7
+677.29742 7677.8
+678.29962 2117.0
+679.30682 1138.2
+680.83875 133341.7
+681.33990 103959.0
+681.41565 588.3
+681.77209 1096.9
+681.84064 47720.1
+682.30914 4397.6
+682.36725 60919.8
+682.72614 991.5
+682.84277 4650.7
+683.36780 22909.5
+684.37079 4478.4
+685.37531 749.7
+685.82764 1399.5
+686.33252 932.0
+698.29028 1726.6
+699.30194 814.5
+706.32880 1535.0
+706.67664 1273.4
+707.33716 1609.4
+720.35962 4795.8
+720.86261 4487.2
+721.36218 3531.5
+721.85815 2151.7
+722.35101 728.1
+725.90833 566.1
+727.28046 4776.7
+727.42493 1092.0
+727.50201 836.3
+727.65118 1787.7
+727.78564 3159.8
+728.00391 1224.1
+728.14539 1555.9
+728.27026 1791.3
+728.33875 3927.8
+728.49377 830.2
+728.83344 3045.9
+728.99536 1570.9
+729.03992 1137.4
+729.21851 2003.5
+729.24597 1681.3
+729.36554 863280.3
+729.44965 3506.6
+729.49054 1485.6
+729.51190 1992.1
+729.61517 713.0
+729.69348 1902.8
+729.76550 1848.9
+729.86554 725739.0
+729.96259 2497.3
+730.00372 1041.9
+730.04163 1426.5
+730.07349 854.6
+730.19885 1431.3
+730.27618 1684.9
+730.36566 378528.0
+730.69598 695.7
+730.73022 925.6
+730.86694 152736.4
+730.96069 1352.2
+731.08698 2400.4
+731.23431 1561.3
+731.36859 47418.8
+731.45715 4409.5
+731.59033 1810.3
+731.72913 1345.5
+731.87250 11612.4
+731.95856 3829.5
+732.10913 837.5
+732.24939 705.9
+732.37549 2577.3
+732.45721 1947.4
+732.94250 745.4
+733.00006 712.3
+737.07538 602.6
+738.01044 771.9
+738.51776 803.5
+764.40271 2030.4
+776.36713 4354.5
+777.37128 2675.3
+778.31976 11459.9
+779.32465 4609.1
+780.32269 1803.3
+781.43207 66341.7
+782.35034 1867.7
+782.43573 28291.9
+782.83844 667.5
+783.35590 952.3
+783.43823 6151.0
+784.43390 1230.4
+789.35309 2498.4
+790.35101 1361.3
+791.30731 1158.8
+794.88495 6691.3
+795.38831 4689.6
+795.59406 703.7
+795.88727 3854.6
+796.38770 1046.1
+816.36981 1093.9
+823.34216 1317.2
+826.49500 671.3
+851.87091 762.2
+858.06909 772.6
+880.50122 20948.3
+881.50409 9392.1
+882.50598 1877.3
+892.40314 2808.7
+893.40442 1359.3
+895.43274 1099.6
+902.38812 1363.9
+903.38306 812.8
+903.72290 706.1
+913.42499 3490.0
+914.42932 1856.0
+915.42944 854.1
+920.39435 43589.7
+921.39740 19172.4
+922.39899 6782.3
+923.39465 1584.1
+924.49908 881.4
+924.99628 682.7
+945.40997 1519.1
+951.53821 19504.0
+952.54279 10374.0
+953.53967 3409.7
+954.38446 802.1
+994.23041 593.8
+1023.49878 1293.7
+1024.50745 845.8
+1042.46875 2730.9
+1043.46997 1026.5
+1044.46521 683.7
+1049.53613 1263.0
+1051.43079 938.2
+1057.23242 899.2
+1066.56555 17351.9
+1067.56726 11004.8
+1068.56836 2922.5
+1069.57422 971.1
+1155.54639 1417.6
+1191.13794 715.7
+1197.60547 10609.1
+1197.99036 3098.5
+1198.60864 6419.5
+1199.60938 1331.0
+1283.60913 3153.9
+1284.61206 1334.4
+1360.66602 1842.2
+1361.67029 1034.5
+1447.01819 759.6
+1525.42322 757.0
+1617.74988 612.3
+1641.88391 675.5
+1777.02100 886.1
+1832.42871 557.0
+1879.15857 3503.4
+1879.53931 19226.6
+1879.93079 2405.8
+1880.07886 2255.3
+1880.47314 957.8
+1882.74536 799.8
+1907.06470 7623.8
+1918.73889 652.0
+1924.71423 558.5
+S	2050	2050	624.7548246
+Z	2	1247.662
+Z	3	1870.989
+163.75186 45671.6
+173.39664 43800.7
+175.06628 43302.4
+188.24547 40517.6
+188.26921 112572.2
+188.28949 124393.1
+188.30414 136943.4
+188.32253 77674.4
+189.50426 40546.5
+193.76422 35639.4
+195.24319 43667.3
+198.90181 51009.1
+199.21260 48805.2
+199.25400 63015.4
+199.28120 144791.9
+199.29457 116371.3
+199.30652 94672.4
+199.40343 53286.0
+219.45175 40078.3
+239.17479 47201.6
+247.18018 38840.6
+249.86548 39658.1
+255.28873 58459.5
+257.39334 48097.5
+271.49857 43656.4
+271.81659 59298.2
+284.19595 87753.8
+300.38098 45386.2
+315.59192 44541.7
+333.19122 255714.5
+347.63550 39188.3
+350.27997 38598.5
+355.21982 43804.0
+360.16397 43914.1
+361.27182 50397.6
+403.27167 51172.6
+413.03525 43386.8
+431.26395 63922.0
+475.96555 45283.9
+476.22299 54214.8
+506.30249 38558.3
+530.26483 87156.5
+530.76251 79836.5
+531.29053 307832.5
+532.29132 58471.1
+532.43781 116529.9
+538.77997 198907.3
+539.27039 634947.7
+539.77155 366868.3
+540.27423 104779.0
+546.29016 59523.3
+553.90540 41825.2
+588.31134 316535.5
+589.31427 96995.3
+606.31696 66697.4
+606.80774 114541.4
+643.30884 54456.6
+653.04346 52133.7
+660.67487 46899.9
+676.64703 74968.4
+683.31799 57103.8
+699.34521 92865.6
+700.32269 47342.1
+702.35828 202402.0
+703.35413 78656.5
+703.66449 50279.3
+714.64886 41757.5
+731.12158 51275.2
+778.29431 41733.7
+795.60712 61161.4
+799.37286 58358.6
+810.72742 53058.8
+816.39508 159793.9
+817.38074 375624.8
+818.38501 193921.1
+897.44702 81504.8
+898.44403 53713.1
+915.45337 43512.5
+934.25134 45801.9
+946.43683 49114.2
+948.42090 48057.9
+963.46454 204771.8
+964.45288 680103.0
+965.45380 363606.7
+966.45526 96078.2
+978.62854 43159.8
+1065.52417 53886.9
+1066.50623 52799.7
+1077.53088 159511.4
+1083.53040 64785.4
+1101.53528 69471.0
+1140.48962 53584.8
+1196.70520 45755.8
+1197.98389 223302.6
+1222.15930 42519.0
+1232.23364 43152.9
+1287.44189 47388.2
+1476.68384 52545.7
+1514.60156 43718.0
+1582.52222 48648.4
+1714.95630 44087.0
+1844.71814 52804.8
+1870.12561 60044.9
+1877.50659 50227.6
+1878.36279 40498.7
+1878.74756 90646.7
+1879.54150 1347556.0
+1880.09167 50240.3
+1880.39551 63619.4
+1881.20654 45311.1
+1885.21387 39908.2
+1906.61084 59876.7
+1906.98193 494320.9
+1907.37671 76061.3
+1930.59302 61608.0
+S	2051	2051	625.254991267
+Z	2	1248.662
+Z	3	1872.49
+168.55980 695.0
+170.27634 540.9
+171.11215 2203.0
+171.14040 609.9
+174.56046 554.2
+182.78601 658.0
+188.26360 1004.3
+188.27205 1533.5
+188.28133 1187.0
+188.29007 1020.5
+188.30093 1070.5
+188.31329 750.1
+188.33272 665.8
+198.90167 1267.2
+199.18787 721.7
+199.24924 704.6
+199.25600 564.1
+199.26643 1388.1
+199.28473 1925.9
+199.30263 1230.3
+199.36232 579.8
+199.38220 985.9
+199.86743 572.4
+211.18010 7952.2
+212.18355 1410.4
+220.07045 684.0
+233.16498 5159.9
+233.18185 627.9
+234.16855 817.2
+239.17494 5435.8
+240.17836 822.2
+245.16425 1093.4
+259.18619 603.8
+260.48456 759.4
+261.15936 1919.7
+264.36282 637.5
+265.19220 692.0
+271.67697 735.4
+273.15894 1013.9
+274.16342 635.3
+284.19635 10231.4
+285.20059 1912.0
+315.18262 694.5
+316.16531 801.9
+318.18051 1058.7
+321.59451 671.8
+333.19171 25106.2
+334.19525 6172.6
+342.27692 705.5
+355.89752 696.8
+366.89529 658.1
+376.18701 2881.1
+377.18970 1216.1
+386.24423 2510.4
+403.26968 6130.4
+404.27252 1714.0
+415.19766 1227.0
+417.55649 635.6
+425.01608 615.1
+427.55362 960.0
+431.26480 8695.4
+432.26770 2885.4
+433.20676 689.0
+434.23825 2107.5
+443.04465 592.1
+473.72397 851.9
+474.22382 1219.4
+482.23654 1946.4
+482.72690 5034.2
+483.22937 3247.4
+483.73007 1676.2
+485.19766 684.2
+500.28598 1234.0
+513.28308 2360.3
+514.28436 1128.5
+518.29553 1149.9
+521.88904 714.4
+528.28070 3666.9
+529.28290 1544.4
+530.26508 9160.4
+530.76526 10804.3
+531.29065 42147.1
+531.76221 2140.7
+532.29449 17925.8
+532.39832 2094.5
+533.29657 2902.0
+538.77905 16206.3
+539.11835 702.1
+539.27179 84620.6
+539.77252 60029.9
+540.27350 20074.3
+540.77411 4387.8
+545.30737 1521.4
+546.29016 6182.0
+547.29169 2017.1
+549.16553 845.6
+586.26202 765.3
+588.31274 39346.7
+589.31610 19454.9
+590.31909 3979.0
+592.81122 869.3
+593.30841 1157.4
+597.30212 1170.4
+598.30682 1877.0
+601.32312 1028.2
+601.81830 3674.5
+602.31488 2825.1
+602.81635 1279.8
+604.21130 808.2
+605.98993 671.9
+606.31250 6095.1
+606.81018 12799.4
+607.30780 8242.4
+607.80762 3099.2
+608.31152 1336.1
+613.62396 636.5
+630.42065 1065.6
+642.32404 4142.2
+643.29871 2884.5
+643.34381 968.9
+644.30579 2218.5
+649.57489 661.4
+660.33075 2500.9
+661.34088 934.9
+671.35107 719.0
+676.62103 1199.3
+682.31702 1843.5
+683.32324 823.1
+685.32581 1760.1
+686.33411 1130.8
+689.35114 724.9
+699.34491 7708.6
+700.32275 6818.8
+701.32996 3814.3
+702.35608 32162.3
+703.35956 16713.4
+704.36188 4606.4
+716.37305 1469.6
+717.35492 7988.4
+718.35596 2949.7
+734.60242 1498.2
+735.10229 774.2
+795.60571 1098.4
+799.37195 4412.9
+800.36450 3121.1
+801.35986 1620.1
+816.39862 21028.2
+817.38263 61021.6
+818.38507 36829.6
+819.38806 12010.4
+819.87445 689.3
+820.39349 2555.8
+852.41943 898.3
+858.07556 779.4
+880.41931 3136.6
+881.41962 3827.1
+897.44446 8796.6
+898.44604 8545.3
+899.44354 3171.7
+914.47394 1138.2
+915.45782 3558.6
+916.46246 1329.8
+945.46381 748.6
+946.44000 7403.2
+947.43445 7994.1
+948.43073 4276.0
+949.43414 1166.9
+963.46704 21540.7
+964.45294 98037.4
+965.45459 65547.5
+966.45703 21621.1
+966.75037 609.3
+967.45801 4860.3
+1019.72229 1026.6
+1021.46826 683.3
+1048.47180 872.2
+1055.53625 688.9
+1057.20215 859.4
+1059.53040 2012.2
+1060.51245 1884.2
+1061.52295 1708.7
+1065.51379 2525.8
+1066.50769 5948.7
+1067.50366 4013.3
+1068.50793 1927.4
+1076.55225 2928.2
+1077.53687 19558.3
+1078.53906 14500.9
+1079.53955 4597.3
+1080.53894 1431.0
+1083.52380 6039.3
+1084.51990 9692.8
+1085.51611 4405.2
+1086.52051 1201.5
+1087.49646 786.4
+1100.54492 2086.9
+1101.53723 10053.5
+1102.53601 6309.7
+1103.53589 1967.2
+1104.53198 727.0
+1188.43787 629.3
+1197.89050 3540.4
+1289.25061 624.6
+1346.57178 708.6
+1627.13623 739.5
+1647.49402 722.8
+1775.17102 767.1
+1873.03809 930.7
+1875.61389 703.5
+1878.34448 1062.4
+1878.98096 1422.5
+1879.47607 19319.0
+1879.75781 2141.3
+1880.56213 948.9
+1882.30945 997.8
+1907.06104 7103.7
+1907.37036 1459.9
+1930.65869 1070.7
+1960.34155 655.5
+S	2053	2053	530.2548696
+Z	4	2116.98818
+157.60054 72468.1
+165.76891 65413.2
+166.08913 66589.0
+171.98883 58918.4
+171.99496 59501.8
+173.23190 62347.9
+186.43828 80117.6
+188.25838 222892.6
+188.27989 294618.8
+188.29019 238975.5
+188.30286 209997.1
+188.32059 148081.8
+188.38503 77453.3
+199.16359 86340.6
+199.25958 98845.1
+199.27061 135657.2
+199.28149 150283.7
+199.29115 114093.8
+199.30132 234543.2
+199.31363 92499.6
+199.32114 96145.9
+199.40141 109252.5
+207.27425 66675.7
+215.19556 65771.0
+217.69250 73493.3
+233.12793 351455.8
+236.81163 62147.8
+255.10806 298376.2
+255.28090 74549.6
+261.12207 90478.4
+263.54318 75676.8
+270.13199 291703.7
+272.13458 384288.8
+275.12421 173243.7
+280.17719 87517.3
+282.34976 75915.8
+283.63699 348283.5
+284.12903 1163609.4
+284.63101 297283.5
+285.16678 228355.2
+292.64252 2819054.5
+293.14423 731548.6
+293.64548 175743.3
+310.15164 142327.8
+313.12262 103329.6
+316.64520 236283.1
+321.63611 196721.7
+322.12637 74801.6
+330.64154 955386.4
+331.14334 359245.7
+341.16843 174744.4
+341.68399 371130.3
+341.72754 67699.5
+342.18475 82512.8
+350.23941 62580.8
+379.16794 1061859.1
+379.66849 340104.8
+383.87088 79580.9
+386.21326 108516.3
+391.21899 403583.8
+391.71948 138851.9
+397.18500 70365.9
+399.87213 454319.8
+400.19263 493257.5
+401.19574 153645.4
+414.20905 667502.9
+416.25818 118850.7
+420.01669 68992.6
+422.70071 104085.0
+423.20068 83544.1
+438.20764 220414.3
+440.75211 471153.4
+441.25470 174622.4
+446.70169 350235.8
+447.20328 142507.7
+447.47296 63827.0
+451.69476 287709.1
+451.78558 68770.4
+457.21265 111544.5
+460.69931 1686651.6
+461.20123 679795.6
+461.70038 173924.8
+476.27142 1081404.5
+476.70975 90780.7
+476.77179 435065.1
+477.27502 216508.5
+479.21121 88084.2
+480.57620 125597.0
+482.64258 72739.4
+485.44635 111656.9
+486.01498 107931.4
+486.35004 107824.0
+486.52664 118725.2
+486.57712 23438858.0
+486.91132 17295532.0
+487.13776 167295.1
+487.24500 8316307.0
+487.57883 2762558.0
+487.71234 113771.8
+487.91293 644883.3
+488.04892 116321.5
+488.21957 288698.2
+488.72049 138548.8
+489.49139 90598.2
+501.24026 1152667.1
+502.24335 200898.4
+507.19009 357675.4
+512.20160 112969.8
+514.15338 78582.6
+517.80737 64456.3
+529.23792 111193.8
+530.16443 69087.4
+532.45074 194218.8
+532.52722 136205.1
+545.30414 317159.6
+546.55499 69418.8
+569.96893 79865.4
+592.52600 67968.1
+599.30414 5864680.0
+599.80573 3729097.8
+600.30615 1520620.1
+600.80743 451220.7
+601.30566 111466.7
+615.11188 75849.4
+619.25891 119760.5
+619.75104 176625.0
+630.39514 111708.4
+642.27203 87326.3
+644.77930 72460.3
+660.27563 9486222.0
+661.27844 2816819.0
+662.27606 858471.3
+663.27960 153792.5
+665.50824 70696.6
+676.62372 148534.6
+680.83563 3520596.0
+681.33765 2148096.8
+681.83740 1002787.0
+682.31226 166825.8
+682.36902 571514.1
+683.36591 131873.1
+706.34070 90948.0
+720.85675 86841.6
+728.33710 86395.7
+729.36261 19113620.0
+729.86340 13664966.0
+730.36438 6773783.0
+730.86572 2204263.0
+731.10614 86058.9
+731.36865 538161.0
+731.43158 99501.2
+731.95056 114630.2
+732.12433 82890.9
+778.31879 309621.8
+781.42987 323110.6
+782.43506 83978.1
+794.88568 86658.5
+865.71429 69354.1
+920.39276 457157.3
+921.39819 170586.0
+1040.46545 69306.6
+1057.22961 111969.0
+1129.75647 79982.8
+1198.01794 376344.8
+1525.39441 115914.4
+1618.32080 83505.3
+1756.10059 67694.5
+1767.93921 68007.9
+1877.52026 76245.3
+1879.13757 191965.5
+1879.49841 2433252.3
+1879.80859 241130.1
+1906.08569 79869.7
+1906.24878 78493.2
+1906.82068 866019.6
+1907.34790 82362.1
+1930.57141 104311.0
+1962.24829 69019.0
+S	2054	2054	531.0058246
+Z	4	2119.992
+147.44858 9863.5
+151.68497 9052.5
+152.49277 9372.5
+173.99539 10463.8
+177.10039 11942.4
+188.23453 12549.2
+188.24605 13592.6
+188.26558 13482.4
+188.28349 15086.2
+188.30379 11228.1
+188.31787 11749.0
+188.32893 11200.1
+188.34520 12484.9
+188.38292 10277.7
+192.91269 10457.2
+199.19795 16082.6
+199.22482 16290.3
+199.25050 14370.0
+199.25977 18877.9
+199.27182 17453.2
+199.29410 32836.0
+199.32043 11769.3
+199.33835 16044.3
+199.39352 12595.6
+199.39929 11329.1
+211.02472 10021.2
+213.08673 12722.9
+221.16815 10239.4
+233.12848 142229.8
+234.13229 21534.8
+237.13472 11425.2
+241.08208 19801.4
+246.64261 11131.3
+247.07541 11552.1
+255.10899 95111.1
+261.12299 43592.7
+261.61960 21798.2
+264.05756 11535.4
+265.12411 23160.5
+266.12021 22615.8
+268.14163 13218.0
+270.13217 80870.5
+270.63354 19116.7
+271.36938 9766.5
+271.67987 15480.6
+272.13531 126755.2
+274.63193 24800.5
+275.12482 94984.7
+275.61682 51883.3
+278.15097 16420.1
+279.39676 9817.0
+280.18683 9909.9
+283.63791 140263.6
+284.12970 331506.0
+284.63181 116750.0
+285.13290 19533.1
+285.16702 76989.4
+286.14023 11687.7
+289.12030 10821.6
+292.64319 856842.9
+293.14474 251988.1
+293.64551 42067.8
+294.14786 14978.6
+298.12714 14782.2
+303.17728 15278.1
+306.64044 13781.5
+310.15073 26087.0
+310.70557 10313.1
+316.64539 71369.2
+319.44150 8967.7
+321.63654 56225.5
+322.12823 23602.5
+322.62988 16068.0
+330.64227 389379.8
+331.14386 122653.2
+331.64276 17501.2
+341.16965 75943.2
+341.68472 190802.4
+342.18610 61036.0
+342.68814 10426.7
+350.26910 11455.7
+365.16968 21178.1
+370.16248 38843.3
+370.65237 20743.8
+371.14310 9352.6
+372.12350 13140.3
+372.19769 27262.1
+379.16873 305436.6
+379.66937 125376.3
+380.16995 30370.6
+382.18234 10971.6
+383.16922 27188.9
+383.87189 14429.0
+386.21497 56416.5
+389.15002 16050.5
+391.21927 127420.1
+391.72150 39906.3
+392.16483 21405.2
+395.18015 23570.2
+396.17981 15121.5
+397.18246 13902.6
+399.87308 145978.2
+400.19312 153435.7
+400.54099 27216.7
+401.19687 32693.0
+403.17038 11375.7
+414.20956 181006.2
+415.21292 35025.5
+416.26202 80141.2
+417.18378 14528.2
+417.26614 13870.5
+422.70151 46421.2
+423.20294 28173.4
+438.20999 92008.4
+440.75391 141385.9
+441.25354 51748.9
+441.75903 13484.6
+446.70297 107597.0
+447.20541 65928.4
+447.60895 9356.2
+451.69586 55851.2
+452.18655 35552.5
+452.68674 33718.4
+457.21588 33074.9
+457.71738 21770.9
+460.70020 562863.4
+461.20157 266855.3
+461.70221 87970.5
+462.20383 20830.7
+466.70306 10846.6
+476.27222 370475.6
+476.77408 223708.2
+477.17566 11090.6
+477.27460 52333.1
+479.70721 20032.3
+480.57349 53009.3
+480.90759 31064.7
+482.60886 13115.9
+485.44608 40178.1
+485.64499 17933.3
+485.77853 36180.5
+486.02054 31173.2
+486.11264 18336.0
+486.35574 30132.2
+486.38916 19915.8
+486.52527 27629.4
+486.57831 7943357.5
+486.64081 25274.2
+486.91217 6272490.5
+486.95392 31705.9
+486.97610 22829.5
+487.13507 49082.2
+487.24582 3064881.0
+487.46921 32405.9
+487.51199 27897.5
+487.57959 1116874.3
+487.62033 16272.3
+487.71371 57360.3
+487.84998 21179.8
+487.91330 338513.7
+487.95062 9453.7
+488.04922 38827.7
+488.22418 132326.3
+488.38605 20712.3
+488.58374 16410.8
+488.72232 71446.6
+488.93320 11083.2
+489.22391 16311.8
+497.25204 12937.7
+501.24109 391178.9
+501.74939 10055.9
+502.24417 83064.4
+503.24628 23925.6
+507.19077 117842.4
+508.71545 10035.0
+511.22635 21037.5
+512.20703 34101.8
+514.20850 12010.8
+529.23737 48659.3
+531.23035 12896.9
+532.43054 30126.3
+533.78149 22591.6
+545.25012 34870.4
+545.30389 145793.0
+546.30933 32215.5
+549.16547 15414.5
+549.46704 9721.8
+578.22455 16454.5
+583.73438 29630.4
+584.23401 35005.3
+590.29639 26953.4
+597.75854 14109.3
+599.30548 2321117.5
+599.35968 15128.5
+599.80676 1537900.8
+600.07080 13920.1
+600.30707 624434.4
+600.57599 12491.1
+600.80798 193042.1
+601.07489 10917.4
+601.30847 42399.7
+616.66840 20269.7
+617.00397 12685.4
+617.34351 16650.5
+619.25177 55166.1
+619.75488 27204.2
+620.25397 23211.6
+626.29242 18012.9
+630.42749 12565.3
+632.27698 17727.7
+634.91278 10178.8
+642.27020 58890.0
+658.48431 13334.9
+659.39111 18554.1
+660.27692 3711694.8
+660.34009 17539.8
+661.16211 20716.5
+661.27942 1144988.3
+662.06659 20284.7
+662.27875 311993.5
+663.28210 64837.4
+664.27637 14097.9
+668.78632 36926.1
+669.28760 27284.5
+669.79327 19221.8
+671.83917 13838.7
+676.65057 12591.1
+677.29877 47332.7
+680.83716 1231565.8
+681.33893 987242.3
+681.83936 408890.2
+682.31653 44079.7
+682.36896 255916.4
+682.84106 51891.9
+683.36639 102190.0
+684.37109 18596.2
+687.89929 11486.4
+706.34149 32680.1
+706.67126 14167.5
+718.31390 10868.4
+720.36047 31652.5
+720.85553 12644.0
+727.28802 39926.3
+727.54352 14357.4
+727.65613 24359.8
+727.78033 20879.3
+728.14893 17274.8
+728.34088 27637.8
+728.83960 33446.8
+729.25128 15857.5
+729.36407 7204467.0
+729.76843 20507.8
+729.86481 5762907.5
+730.28064 9940.0
+730.36493 2752789.3
+730.86548 942594.3
+731.08386 17145.9
+731.21484 12302.4
+731.36530 261181.6
+731.45319 41503.3
+731.57715 19856.6
+731.86688 63705.7
+731.95526 30288.2
+732.08862 20761.1
+732.45154 15358.9
+732.97852 12107.8
+776.36212 22312.7
+777.37280 15249.2
+778.31927 117120.6
+779.32074 61838.3
+780.32391 12158.3
+781.43121 165494.0
+782.43317 71024.9
+783.43243 18445.2
+791.31366 30540.6
+794.88293 45162.2
+795.38629 33625.5
+795.62451 13513.1
+795.87836 24466.9
+880.08527 10544.0
+880.50366 22658.4
+920.39404 210703.5
+921.39624 101156.4
+922.39789 18710.0
+924.49799 13235.9
+951.53687 14532.1
+1023.48853 13040.8
+1057.25854 11075.1
+1073.80078 10043.5
+1197.96545 58886.0
+1246.50378 9084.1
+1309.73499 10930.6
+1436.67676 9074.8
+1667.27551 13079.1
+1835.28552 10289.1
+1843.45349 10442.7
+1876.10156 11129.4
+1878.35046 17490.4
+1878.76111 12899.9
+1878.85974 13287.0
+1879.17664 52417.7
+1879.55872 333890.2
+1879.95508 54776.3
+1880.85303 14634.3
+1906.69617 16146.4
+1906.99475 127326.2
+1907.95715 11742.7
+S	2055	2055	1879.96340793
+Z	2	3758.079
+Z	3	5636.615
+525.93945 734.9
+526.41412 666.1
+532.43451 1762.2
+549.12067 813.7
+573.61108 747.5
+630.35962 1041.6
+676.61725 1060.2
+742.35901 688.1
+753.14594 589.3
+795.59607 893.1
+1019.71796 695.3
+1057.21875 1378.4
+1197.73499 619.3
+1197.82434 590.9
+1197.97131 3581.7
+1215.44946 584.5
+1436.14514 577.0
+1525.35547 1021.9
+1876.89465 705.3
+1878.57410 1312.4
+1879.01697 543.9
+1879.47583 20472.0
+1879.88831 1474.0
+1880.23438 943.2
+1880.38538 1057.5
+1907.05786 7432.7
+1993.49731 623.3
+S	2057	2057	530.2617671
+Z	4	2117.01577
+149.06734 632.6
+154.45189 754.9
+169.50221 639.9
+169.69003 618.7
+181.90701 522.0
+188.05046 591.8
+188.25748 1244.4
+188.27414 2071.5
+188.28664 2050.8
+188.29533 2092.2
+188.30745 1694.7
+198.90047 1178.8
+199.18138 789.6
+199.22897 813.3
+199.25385 1016.6
+199.27826 2456.1
+199.28754 1718.5
+199.36772 879.1
+199.37617 841.6
+199.41388 743.4
+207.09390 644.6
+225.61598 573.5
+232.01787 574.0
+233.13019 14243.8
+234.13264 1709.0
+236.70096 635.8
+261.12509 3451.4
+277.45486 544.5
+278.15424 578.8
+280.18591 737.4
+283.63834 1063.2
+284.13242 1944.0
+292.64532 14675.8
+293.14716 4819.9
+303.18027 780.3
+316.64719 8376.5
+317.14908 2504.0
+321.63928 1232.5
+322.13586 922.5
+330.64481 38248.1
+331.14630 13685.2
+331.64859 2841.7
+332.14664 900.5
+341.17068 1129.9
+341.68793 9219.7
+342.18988 2597.9
+342.68848 741.0
+346.45514 672.4
+346.77557 709.2
+369.91162 558.2
+374.99268 561.6
+378.35098 556.4
+379.17123 8128.8
+379.67316 2550.4
+386.21887 2085.2
+391.22269 6622.3
+391.28793 2162.8
+391.72284 3086.2
+392.16754 1683.5
+392.29123 950.3
+399.87665 2819.7
+400.20969 2056.9
+400.54724 964.1
+410.14063 1289.2
+414.21161 1880.5
+416.26486 5563.5
+417.26730 876.3
+418.20337 576.0
+422.70261 1216.1
+422.79965 553.0
+423.64999 560.5
+427.54672 842.7
+440.75693 4102.3
+441.26016 1700.1
+441.75967 846.6
+443.29019 538.7
+446.70676 3211.2
+447.20816 1908.7
+451.69562 1444.9
+452.19098 1161.7
+457.21915 7031.1
+457.71945 3841.9
+458.22125 1771.5
+460.08334 618.4
+460.70358 19273.6
+461.20520 10562.2
+461.70590 3015.8
+462.20782 768.1
+471.22507 679.5
+476.27573 35719.2
+476.77692 19604.7
+477.27780 6030.1
+480.57706 1747.6
+480.91235 2112.3
+481.24561 1646.9
+483.22891 625.3
+486.58194 134395.1
+486.91589 109500.6
+487.20554 1149.3
+487.24963 55268.0
+487.58356 18286.4
+487.72012 1164.1
+487.85443 610.3
+487.91739 7228.5
+488.04233 688.7
+488.22968 1235.3
+509.73123 533.6
+511.24667 885.1
+511.74170 960.0
+511.99600 1119.1
+512.23724 1388.0
+515.74213 785.7
+515.78284 503.7
+515.98547 837.8
+516.23407 842.9
+519.48938 1039.8
+521.73987 736.6
+522.24213 775.1
+524.74078 2189.4
+524.98334 2299.4
+525.22650 1703.6
+525.46466 961.8
+525.50659 4553.3
+525.75531 5889.8
+526.00586 4879.7
+526.22693 11158.8
+526.50018 1656.5
+526.72668 6759.5
+526.96967 876.1
+527.00555 863.8
+527.22589 3710.2
+527.30371 514.4
+527.71887 1258.7
+527.85712 1619.0
+527.90656 764.8
+527.92908 826.3
+528.10394 2150.8
+528.15381 779.5
+528.31982 581.0
+528.35535 992.5
+528.40857 941.3
+528.54327 1102.0
+528.62463 1538.8
+528.67175 1759.7
+528.71967 8842.6
+528.78723 2035.9
+528.86731 3381.6
+528.92700 5011.4
+528.96783 9761.5
+529.06384 2327.2
+529.11951 3705.1
+529.18073 5100.7
+529.20642 4361.1
+529.24316 36950.6
+529.28796 2096.8
+529.36981 8818.8
+529.43231 3578.1
+529.46497 3393.0
+529.52094 1101.2
+529.53784 1048.9
+529.61914 9061.0
+529.68292 1401.1
+529.71521 2101.0
+529.75269 1282.2
+529.81653 3662.2
+529.85107 5675.1
+529.87537 5956.0
+529.89667 2847.6
+529.91412 3100.1
+529.93481 4475.6
+529.95502 8660.9
+530.00885 1604245.0
+530.05951 8823.5
+530.08270 4234.9
+530.10077 5996.0
+530.11804 5440.1
+530.14795 5497.9
+530.16199 4461.9
+530.20294 12058.7
+530.25616 1992118.9
+530.33276 5822.5
+530.34900 5432.5
+530.36646 5027.9
+530.39642 5714.4
+530.41486 5780.6
+530.50403 1454120.3
+530.55627 6297.2
+530.59363 10403.6
+530.64612 7504.8
+530.66113 7191.5
+530.69995 13649.9
+530.75336 788480.2
+530.81061 4577.5
+530.83167 2310.7
+530.84698 2306.7
+530.89581 10372.2
+530.94788 3589.8
+531.00403 340138.7
+531.05048 2976.4
+531.07764 6839.6
+531.14337 9938.0
+531.19745 1660.4
+531.25507 122405.0
+531.33392 6103.3
+531.39624 7014.5
+531.45233 2657.5
+531.50537 34629.8
+531.54816 11631.6
+531.58899 4571.4
+531.64795 4723.4
+531.70294 978.2
+531.71832 1167.6
+531.75726 8373.6
+531.79718 8805.8
+531.83984 4091.7
+531.89935 3809.6
+531.97461 1565.7
+532.04626 4620.9
+532.08929 1370.8
+532.15179 2089.7
+532.22321 1106.2
+532.29132 1963.9
+532.38586 1038.5
+532.43298 3042.8
+532.50201 704.5
+532.59357 998.4
+532.61652 1013.7
+532.67224 1750.7
+532.86841 1265.0
+533.10126 786.9
+533.29633 927.8
+533.56573 1108.5
+533.78699 88850.9
+533.83472 1380.1
+534.00256 1518.1
+534.06335 1379.2
+534.28827 45199.2
+534.50378 1074.3
+534.58099 1324.1
+534.78894 14774.6
+534.86664 521.9
+534.89386 650.7
+535.29126 3016.1
+535.35858 1880.3
+535.60901 2230.1
+535.86212 1764.2
+545.25275 3967.1
+545.30670 23166.2
+546.31042 4780.5
+547.31378 895.4
+573.24548 873.3
+578.23004 2731.5
+578.28143 1010.9
+579.23175 791.6
+580.24890 880.5
+583.73859 2398.9
+584.23578 1531.6
+584.73596 1015.2
+590.30133 2770.2
+590.80609 1568.6
+597.75250 1034.2
+599.30878 211060.6
+599.55029 931.5
+599.80981 137468.0
+600.31055 58053.0
+600.59772 838.3
+600.81116 18204.1
+600.86896 964.5
+601.31140 3384.4
+605.61475 1009.2
+605.94769 876.6
+606.60132 661.1
+607.32373 856.4
+619.25586 4262.6
+619.75708 3035.9
+620.26001 1433.3
+620.75677 899.7
+626.28937 1181.9
+627.42719 814.3
+630.41418 977.8
+632.28577 6525.0
+633.29010 1579.4
+642.28180 3313.6
+642.81189 1346.8
+643.25116 1746.0
+647.27844 895.6
+649.30585 1332.0
+651.31653 2283.1
+653.30933 1979.6
+658.48279 884.4
+659.39069 975.6
+659.76013 772.4
+660.28015 299416.6
+661.17401 1638.9
+661.28278 96509.2
+661.75409 672.7
+662.08221 1415.1
+662.28241 24718.4
+663.09564 826.8
+663.28290 4855.6
+665.33704 1188.6
+668.28210 709.4
+668.79041 4858.7
+669.29126 2704.1
+669.79346 2211.5
+670.29688 1257.2
+671.83478 762.1
+672.33734 1120.0
+672.84711 1005.3
+676.63501 948.9
+677.30072 11274.1
+678.30396 3392.4
+678.96967 787.5
+679.31787 795.7
+680.84106 126126.5
+681.34229 97947.5
+681.84296 43252.3
+682.31116 4083.6
+682.36987 55039.3
+682.84265 3603.1
+683.37061 19712.4
+684.37238 3417.2
+686.33099 1565.8
+698.29572 1479.7
+706.33862 13997.6
+706.67316 17054.5
+707.00653 12951.0
+707.34045 7014.9
+707.67444 3834.0
+708.00323 869.1
+720.36243 4975.1
+720.86237 3387.0
+721.35413 1157.7
+726.62665 725.0
+727.10950 746.3
+727.28387 3969.1
+727.40747 612.5
+727.52338 949.2
+727.65039 1657.9
+727.78363 3228.2
+728.01208 1115.9
+728.16205 1737.5
+728.27704 1744.8
+728.33618 2757.2
+728.57770 808.3
+728.83051 2355.2
+729.01910 1418.6
+729.22009 1260.3
+729.24664 1682.6
+729.29547 9876.0
+729.36761 754192.3
+729.48785 1399.5
+729.51526 2330.0
+729.60925 676.8
+729.67755 1665.4
+729.72485 1590.0
+729.77020 1538.4
+729.86853 617409.9
+729.94373 4579.6
+730.02435 1198.5
+730.06549 2113.3
+730.18170 1239.4
+730.22491 1099.8
+730.28088 963.9
+730.36853 310301.0
+730.52325 1343.3
+730.67603 908.0
+730.86963 117946.6
+730.95959 1023.1
+731.09259 1490.7
+731.22412 1462.3
+731.37134 28494.1
+731.46204 4512.3
+731.59094 1329.2
+731.87555 7206.5
+731.96222 3652.1
+732.08710 1088.5
+732.13678 1336.6
+732.38538 1300.5
+732.46649 1902.9
+732.63306 849.6
+732.85706 798.1
+732.95984 762.0
+738.01685 852.7
+738.51892 831.4
+748.37469 937.5
+759.38110 877.0
+764.40717 1009.0
+776.36859 5873.8
+777.37415 3348.0
+778.32410 8314.4
+779.32581 2997.5
+780.31885 908.6
+781.43555 61682.2
+782.35175 1626.7
+782.43823 23389.5
+783.44043 5703.1
+784.44104 745.5
+789.35730 2049.9
+794.88776 5510.5
+795.39105 5488.1
+795.59650 741.5
+795.89417 2698.8
+796.39447 1551.7
+816.38110 893.1
+859.80933 647.3
+860.13257 627.1
+880.50476 17843.1
+881.50824 8301.2
+882.50793 1538.7
+892.41101 2828.1
+893.41638 1739.1
+895.44006 1033.8
+902.38153 746.3
+913.43097 3199.7
+914.42572 1829.7
+920.39795 31647.7
+921.40082 14272.3
+922.40106 4737.9
+923.40143 1459.4
+935.55023 537.0
+945.41248 822.8
+951.54156 18430.2
+952.54425 8530.5
+953.54327 2300.3
+1019.86127 616.9
+1023.51160 1411.5
+1042.47302 2052.4
+1043.47546 975.6
+1049.53662 1018.1
+1051.44043 782.5
+1057.23926 894.6
+1058.51819 744.9
+1066.56897 19779.8
+1067.57178 9975.5
+1068.57471 3215.5
+1155.55664 1240.0
+1156.55554 907.6
+1177.38391 786.8
+1197.61121 11267.8
+1197.98413 3068.6
+1198.61365 5700.2
+1199.61621 2161.5
+1200.59937 731.4
+1219.39587 646.3
+1237.50415 758.9
+1283.61707 1949.7
+1284.61865 1714.4
+1360.66821 1820.2
+1361.67566 927.6
+1464.58972 553.3
+1876.11633 792.4
+1877.16418 689.2
+1879.00574 904.3
+1879.49390 18932.9
+1880.30090 821.8
+1882.02808 1138.7
+1907.07703 7463.7
+1930.63184 1399.2
+S	2058	2058	531.2598246
+Z	4	2121.008
+148.41563 53994.4
+149.00035 51156.8
+154.57039 50690.4
+161.70769 51709.9
+188.24089 79841.4
+188.25510 129337.0
+188.27177 157968.3
+188.29066 159132.2
+188.29982 173916.9
+188.31644 115633.9
+188.34837 64934.8
+189.67738 51715.7
+198.89954 87694.7
+199.18399 68259.9
+199.20834 68333.1
+199.23618 66503.4
+199.24586 95049.2
+199.26277 93250.8
+199.27489 123004.8
+199.28143 162223.7
+199.29330 194088.3
+199.30585 78319.2
+199.35880 63774.6
+222.00389 53001.2
+233.12842 152387.0
+255.10818 230240.7
+266.61282 60130.1
+270.13190 196947.6
+271.69061 62909.0
+272.13480 333131.9
+273.13382 54261.6
+275.12521 102538.4
+275.61371 62527.3
+283.63702 300349.3
+284.12949 871419.9
+284.63120 190482.0
+285.16724 165791.1
+292.64264 2240012.8
+293.14401 620086.9
+293.64490 142865.4
+303.17773 72339.5
+316.64435 243797.5
+321.63708 204837.4
+322.12668 91428.5
+330.64175 1043577.9
+331.14307 368770.7
+341.16708 118888.9
+341.68399 249113.7
+342.72302 50527.6
+343.50198 57951.0
+379.16809 972090.1
+379.66879 265078.5
+380.17178 69261.5
+381.37292 83077.3
+385.16339 48677.2
+386.21301 101916.6
+388.96561 51149.2
+391.21832 270187.6
+399.87183 359969.0
+400.19153 467635.3
+400.54102 108391.7
+414.20901 518804.3
+415.21445 65900.3
+416.26248 67338.4
+422.70163 93741.8
+438.06711 51189.3
+438.21082 150499.8
+440.75327 332246.0
+441.25375 133359.5
+446.70169 317044.0
+447.20374 161898.6
+447.70892 56789.0
+451.69464 171978.9
+452.18591 107163.7
+452.68414 81880.3
+455.21194 65471.2
+460.69949 1191533.3
+461.20074 730966.2
+461.70267 138747.7
+475.22134 51294.6
+476.27170 628959.8
+476.77148 228298.3
+479.69904 70734.5
+480.90656 86113.1
+481.23489 61877.4
+485.44019 89617.5
+485.64191 51431.8
+486.57733 17639314.0
+486.91159 13881492.0
+487.13547 123251.6
+487.24527 7179823.0
+487.47168 92230.0
+487.57889 2649396.3
+487.71527 123020.7
+487.91275 569232.4
+488.05069 78965.7
+488.22357 235978.4
+488.71994 79847.8
+496.03452 50575.4
+501.24030 949323.2
+502.24338 180005.5
+507.19122 193991.8
+508.18610 86034.2
+512.20239 115221.3
+529.23462 128742.6
+529.98578 116611.2
+530.22375 128218.2
+530.50537 58454.1
+532.44855 151953.5
+545.30310 127567.7
+599.30457 4509863.0
+599.80597 2840140.5
+600.30658 892438.9
+600.58154 47293.6
+600.80847 284886.4
+616.66888 60880.7
+619.25470 99135.7
+619.75647 64031.2
+630.43005 86011.3
+636.44745 54072.5
+641.36780 48527.8
+642.26501 94769.6
+660.27594 7620457.5
+661.15564 69299.1
+661.27869 2191045.5
+662.27832 615936.3
+663.27972 101934.3
+668.78241 98592.4
+676.64221 105272.5
+680.83594 2161542.0
+681.33746 1744830.9
+681.83850 796939.3
+682.37128 249215.6
+683.36572 75042.3
+706.27136 47431.5
+706.97424 85973.9
+720.35681 85218.9
+720.85614 85343.0
+727.27771 86625.6
+727.78107 68518.2
+728.34039 59870.8
+729.36292 14578555.0
+729.86377 11775173.0
+730.36407 5992665.0
+730.86456 1974953.5
+731.36377 360893.5
+731.44855 63726.6
+731.67828 71203.3
+731.86493 77717.6
+736.74457 50712.0
+757.31085 51975.6
+778.31781 285398.2
+781.43054 271793.0
+782.41730 72707.0
+784.57739 58342.0
+794.88678 54577.0
+795.38342 77700.0
+795.59735 73564.9
+810.13293 56336.2
+819.37836 51991.7
+920.39075 397901.0
+921.39618 188483.7
+931.29065 51256.4
+1056.50110 54206.6
+1057.24658 76300.7
+1146.75977 52679.5
+1187.96289 68284.5
+1198.00952 287655.2
+1407.42383 54149.7
+1525.46155 104514.5
+1535.57483 50429.6
+1560.65894 57460.5
+1633.58606 56202.4
+1683.31262 60363.6
+1831.41528 48415.2
+1841.58594 63964.2
+1870.46606 46387.5
+1876.17993 70097.3
+1879.06506 128671.3
+1879.53711 1766875.9
+1880.01172 90003.9
+1880.25269 92117.6
+1907.08142 659765.3
+1930.66052 79297.1
+S	2059	2059	988.781991267
+Z	2	1975.716
+Z	3	2963.071
+267.54669 608.1
+318.53967 670.4
+323.64969 580.3
+381.35138 672.3
+455.55966 700.3
+461.15820 616.4
+512.24939 603.0
+512.28668 512.0
+529.15009 651.2
+530.48212 855.6
+532.48315 1758.9
+540.91223 597.6
+571.70032 766.9
+614.59125 635.1
+615.37573 797.7
+630.41229 591.9
+637.76520 763.6
+662.71295 585.3
+676.62915 922.8
+690.76605 719.9
+706.33093 1219.9
+706.99884 1299.7
+795.61340 847.9
+813.91016 660.1
+832.58899 580.7
+972.82507 677.9
+1019.74811 803.4
+1057.18542 832.9
+1059.00452 1319.2
+1059.49597 1812.9
+1060.02051 730.9
+1060.49231 846.0
+1070.99268 612.0
+1198.08667 3357.9
+1477.08984 671.9
+1870.32312 979.5
+1876.05737 925.8
+1878.68640 668.6
+1878.93164 1197.1
+1879.48572 19477.7
+1879.76294 3448.7
+1880.00989 1808.1
+1884.33923 577.4
+1907.06982 7590.7
+1930.58264 1008.5
+1943.92493 660.9
+1957.66479 631.8
+S	2061	2061	530.2546871
+Z	4	2116.98745
+139.62253 639.7
+148.69444 517.5
+149.18135 536.5
+154.37669 553.4
+154.42142 571.9
+165.76895 669.6
+171.73201 606.3
+172.69662 556.8
+172.90434 541.5
+180.13104 579.4
+188.21165 581.4
+188.24193 609.2
+188.25775 1305.7
+188.28604 2215.3
+188.30258 2324.9
+188.34039 602.5
+188.55554 737.7
+197.66251 523.1
+198.62241 591.7
+198.80305 696.7
+198.90361 816.2
+199.18524 751.4
+199.21867 562.8
+199.23846 1103.6
+199.25517 1289.6
+199.28288 2735.2
+199.33562 761.9
+199.34496 518.6
+199.38158 603.2
+199.38708 564.0
+204.39929 540.5
+210.32729 539.6
+217.32205 585.3
+224.26228 538.2
+233.12929 6288.3
+234.13185 1123.4
+255.10970 2381.5
+261.12375 2200.7
+261.62030 954.4
+267.61664 593.4
+270.13403 1500.3
+270.31375 574.9
+271.23181 574.3
+272.13623 2826.0
+275.12488 1252.9
+275.61691 900.1
+283.63870 2113.0
+284.13058 8099.0
+284.63144 1714.9
+285.16718 1163.2
+285.73425 627.3
+286.14218 712.9
+292.64380 19918.0
+293.14578 4699.1
+293.64664 1665.6
+297.63577 697.6
+303.17944 860.6
+316.64566 2910.4
+318.11356 937.0
+321.63821 1385.5
+330.64307 13812.8
+331.14478 3712.4
+331.64606 1154.7
+334.51379 572.8
+335.03766 630.5
+341.17038 2375.6
+341.68591 7311.8
+342.18762 2734.5
+350.28687 710.1
+362.18530 1208.7
+365.16257 709.9
+366.17468 532.3
+369.18948 1162.1
+370.29916 576.4
+370.64926 811.4
+376.15222 1374.6
+379.16971 11261.0
+379.67093 5231.9
+381.37338 624.1
+382.18127 728.1
+383.16718 811.1
+386.21603 2574.7
+389.18503 997.8
+391.22046 6627.3
+391.72177 2670.7
+392.16559 2415.6
+395.18164 853.3
+396.20456 617.8
+397.96317 596.8
+399.87448 4096.1
+400.20911 4089.9
+400.54099 986.4
+410.13934 1287.2
+414.21048 4872.3
+415.21426 783.0
+416.26285 10295.5
+417.18109 1389.1
+417.26361 1444.8
+422.70245 4482.5
+423.20288 1323.3
+423.70712 794.0
+427.54755 596.4
+438.21008 3521.9
+440.75497 7744.8
+441.25647 3981.3
+446.70404 4420.7
+447.20514 2825.5
+447.70309 1045.8
+451.69498 2496.4
+452.18683 2810.5
+452.68851 1644.2
+457.21591 2319.7
+457.71988 1751.9
+460.70145 34673.5
+461.20300 17735.3
+461.70361 6329.4
+462.20309 1118.3
+465.24283 663.5
+476.27319 36776.5
+476.77493 15576.2
+477.27576 5064.0
+479.70679 725.2
+480.57590 1932.0
+480.91016 2172.7
+481.17642 782.1
+481.24939 1038.7
+482.67200 655.0
+484.21664 816.8
+485.43616 2341.9
+485.64819 1285.1
+485.76898 2037.0
+485.98380 1438.7
+486.02374 1584.1
+486.10498 746.8
+486.15433 745.0
+486.34967 1484.3
+486.40338 1246.2
+486.51672 2143.1
+486.57956 566125.1
+486.62958 2984.0
+486.65359 1015.9
+486.68536 731.5
+486.70441 1300.3
+486.73654 1342.7
+486.76923 1459.1
+486.85281 1326.2
+486.86740 2472.5
+486.91318 470169.5
+486.95956 2784.2
+486.97830 1320.4
+487.00986 806.3
+487.02579 801.7
+487.10239 1283.8
+487.14627 3421.5
+487.24677 234518.0
+487.31213 1247.3
+487.47745 1641.0
+487.50815 1792.8
+487.58047 86470.0
+487.63153 1021.6
+487.65115 836.6
+487.66638 498.6
+487.72629 2668.7
+487.84634 2085.3
+487.91437 29045.0
+487.99741 634.0
+488.06369 2854.3
+488.18585 754.5
+488.23679 7367.2
+488.40100 1161.7
+488.58084 1731.5
+488.72156 2714.4
+489.22675 1108.5
+494.20059 1164.1
+501.24234 12025.7
+502.24628 2851.6
+503.23337 689.8
+507.19196 4683.6
+529.23737 7234.0
+530.00397 4892.6
+530.25726 5892.4
+530.50488 9315.3
+530.57977 637.8
+530.75525 4477.6
+531.00525 4249.6
+531.26178 1415.2
+531.50385 776.2
+532.52240 2181.3
+533.78644 13502.6
+534.28748 9577.7
+534.78839 4610.4
+535.29193 606.7
+536.27917 606.1
+545.25140 7637.7
+545.30493 29769.7
+546.25385 2053.4
+546.30859 7080.7
+547.31006 1130.3
+550.22992 1100.9
+559.72284 637.7
+560.21515 711.0
+573.25085 1373.9
+575.22687 619.7
+578.22937 3748.2
+583.73547 5062.0
+584.23773 2504.1
+584.73431 1592.2
+590.30139 2587.7
+590.79669 1243.4
+591.29608 1196.2
+597.74146 1207.6
+599.02893 785.5
+599.30682 239111.7
+599.37152 880.4
+599.75525 1155.7
+599.80792 146996.6
+600.06653 1090.8
+600.30835 62847.8
+600.80859 17636.5
+600.87372 1312.3
+601.30896 5416.3
+605.94733 805.5
+606.61633 939.5
+608.28510 618.0
+609.95642 705.9
+616.66724 1599.3
+617.00458 1357.2
+617.33990 858.5
+619.25476 5188.3
+619.75464 4256.8
+620.25653 2128.3
+620.75708 652.9
+622.32648 914.5
+625.24048 805.8
+625.30951 755.8
+626.28870 1613.2
+632.28345 10530.6
+633.28491 2326.7
+634.28900 684.5
+642.26862 4676.7
+643.24640 3229.8
+644.25098 1037.8
+647.28369 1740.9
+649.30359 1960.6
+649.36969 797.5
+650.30359 806.8
+651.31165 2028.1
+653.30933 3241.4
+654.31683 1093.0
+658.47278 1895.3
+658.80841 921.0
+659.30005 661.2
+659.39343 1870.1
+659.99756 806.9
+660.03107 576.9
+660.18134 921.1
+660.27795 403617.5
+661.16400 1967.9
+661.28033 135821.7
+661.75287 850.5
+662.09070 1502.7
+662.18030 616.9
+662.27979 38333.1
+663.27838 6514.5
+664.27454 1134.4
+665.33881 941.2
+668.78619 4454.6
+669.28833 2607.7
+669.78931 1632.1
+670.29535 817.1
+671.83521 1079.9
+672.33478 1129.4
+676.65363 1001.0
+677.29810 7879.4
+678.30121 2851.7
+679.30615 1058.2
+680.83850 142093.1
+681.33972 109859.6
+681.84027 49121.0
+682.31219 3923.3
+682.36658 72264.0
+682.72870 676.0
+682.84186 4084.4
+683.36804 24484.6
+684.37012 5141.3
+685.83063 1199.1
+692.30890 690.4
+698.29120 1743.5
+706.33856 1767.3
+706.67297 2392.2
+706.85925 755.5
+707.00488 1017.8
+707.33008 739.3
+720.36053 4576.5
+720.85852 5040.0
+721.36200 2485.7
+721.85797 1595.2
+723.67889 817.8
+725.89856 993.2
+726.39380 902.5
+726.62000 784.0
+727.02466 845.8
+727.11273 836.2
+727.27142 3433.7
+727.33197 1026.6
+727.66010 2046.9
+727.76758 2282.3
+727.89172 694.0
+727.98199 1477.0
+728.15839 991.4
+728.34064 3528.8
+728.48822 1522.2
+728.67133 1977.1
+728.84064 3331.9
+729.04413 1197.0
+729.16388 2126.6
+729.36536 914233.8
+729.45184 4215.6
+729.51007 1348.7
+729.53729 1253.9
+729.59668 1019.9
+729.66980 688.3
+729.69794 1575.2
+729.75323 1686.7
+729.86542 737960.9
+729.96283 2335.3
+730.00684 1092.1
+730.06409 2526.4
+730.36542 377020.7
+730.47809 923.0
+730.56146 1869.5
+730.73456 1603.1
+730.86664 139919.3
+730.96198 1663.2
+731.06940 2887.1
+731.25330 1393.7
+731.36798 41418.6
+731.47101 3914.8
+731.57269 2583.0
+731.75818 1630.7
+731.87042 11432.5
+731.97150 3529.2
+732.07458 862.2
+732.13446 1428.3
+732.37122 1189.2
+732.46924 1245.2
+732.63702 1131.2
+732.80170 664.5
+732.86133 735.3
+738.01392 651.1
+748.36200 720.1
+757.34625 692.5
+764.40344 1986.0
+765.39771 945.8
+776.36493 4707.8
+777.37292 2817.8
+778.32019 14187.7
+779.32416 5102.6
+780.31256 1565.4
+781.43201 79102.0
+782.35114 2840.5
+782.43542 29459.0
+783.35016 775.9
+783.43732 6603.2
+789.35175 2914.3
+790.36511 1061.4
+791.31531 1266.1
+791.42572 878.2
+792.31781 709.3
+794.88525 6866.1
+795.38641 5858.2
+795.60645 954.0
+795.88757 2366.8
+816.37390 1528.5
+823.33582 1246.0
+824.33618 765.9
+876.49030 738.0
+880.50116 22491.3
+881.50439 9845.0
+882.50299 2063.4
+892.40515 3758.9
+893.40076 2034.6
+895.44366 1628.5
+903.37030 1290.5
+913.42328 5103.5
+914.42676 2347.6
+920.39429 46450.7
+921.39734 22053.2
+922.39709 6842.8
+923.39606 1867.3
+924.50519 758.4
+925.00922 983.2
+940.30682 616.1
+945.40906 1286.6
+946.40985 648.4
+951.53833 25406.0
+952.53973 11350.7
+953.54199 3190.8
+1023.49823 1920.8
+1042.46570 3276.1
+1043.47412 1775.0
+1049.53735 980.1
+1051.43677 856.4
+1066.56494 22083.5
+1067.56775 11192.2
+1068.56946 2947.5
+1076.55579 631.0
+1155.55029 2827.6
+1156.55969 1726.4
+1186.55432 965.2
+1197.60608 14275.1
+1198.16296 3449.6
+1198.60938 7658.9
+1199.61047 3446.1
+1200.61719 1060.2
+1283.60791 3010.8
+1284.61694 2133.6
+1285.58923 1031.4
+1360.66772 1986.2
+1361.66321 1987.4
+1418.85059 605.3
+1525.49072 912.1
+1877.08386 1105.9
+1878.72449 1190.9
+1879.21228 1239.4
+1879.57898 18805.9
+1879.97253 919.0
+1880.18726 657.0
+1880.65747 932.4
+1881.31213 660.3
+1881.49463 594.3
+1882.17249 874.3
+1883.11328 520.3
+1883.21912 508.6
+1907.07117 7123.0
+1933.26526 682.1
+S	2062	2062	531.0058246
+Z	4	2119.992
+141.82497 573.4
+157.85283 555.9
+165.76859 624.8
+169.49274 725.2
+178.20299 546.2
+184.84703 592.2
+188.21336 674.4
+188.25481 795.5
+188.27567 1005.3
+188.30234 956.3
+188.31226 973.9
+188.32440 537.6
+188.33583 579.0
+188.34543 914.0
+198.90350 748.3
+199.20212 1199.1
+199.26236 663.1
+199.27596 1014.0
+199.28891 2445.2
+199.30054 1723.0
+199.37376 606.6
+200.65422 582.7
+214.51051 569.9
+233.12894 6056.5
+234.13304 845.4
+236.89476 550.0
+250.43330 566.2
+255.10947 2985.4
+255.28549 558.8
+255.29280 594.2
+261.12390 1971.0
+268.13672 657.1
+270.13327 1746.0
+272.13580 3099.0
+275.12582 1592.6
+275.61929 811.2
+283.63821 3138.4
+284.13052 8924.7
+284.63208 1544.9
+285.16797 1353.3
+289.12173 573.5
+292.64374 19815.5
+293.14569 5962.6
+293.64609 1344.3
+303.17877 883.2
+316.64600 2630.3
+317.14459 597.5
+318.11151 884.2
+320.66812 574.3
+321.63782 2022.1
+326.99973 651.2
+330.64307 12637.4
+331.14490 4314.4
+331.64310 1349.2
+341.17078 3518.6
+341.68576 8159.7
+342.18814 2720.7
+353.18369 528.0
+370.16501 846.5
+370.65652 751.9
+376.14990 912.6
+379.16953 13726.5
+379.67096 5231.3
+380.17023 1145.4
+381.22980 593.5
+383.16821 672.6
+385.20883 1066.2
+386.21658 2139.1
+389.15195 524.6
+391.22009 6385.3
+391.72186 2892.1
+392.16510 1170.0
+392.22577 693.7
+395.18118 871.4
+399.87344 5113.7
+400.19385 4488.1
+400.54263 1991.0
+410.14059 755.7
+414.21091 5524.8
+415.21463 1079.0
+416.26263 8819.9
+417.18207 1200.3
+417.26553 1637.2
+422.70221 3778.7
+423.20383 2046.7
+438.21115 2379.0
+438.68735 568.5
+439.20950 626.4
+440.75443 6534.5
+441.25568 3010.3
+441.75864 952.8
+442.24139 606.6
+442.91483 685.9
+446.70477 5030.0
+447.20547 3130.2
+451.69510 2342.1
+452.18649 3740.9
+452.69006 1700.6
+455.69278 578.5
+457.21716 2936.5
+460.70132 33504.1
+461.20313 15670.4
+461.70337 6790.4
+462.20273 1868.2
+467.26596 869.8
+476.27332 34399.7
+476.77435 16115.1
+477.27493 4914.2
+479.70996 1033.6
+480.57611 3144.2
+480.91031 1501.4
+481.24234 1109.7
+481.56839 676.0
+484.21967 944.5
+485.44379 2642.3
+485.52719 874.8
+485.58072 683.8
+485.65012 939.4
+485.77817 2391.6
+485.86542 888.0
+485.89688 549.1
+485.92603 803.5
+485.98312 1214.2
+486.02261 2157.7
+486.10559 1188.1
+486.16647 768.0
+486.20343 1370.9
+486.35709 1899.5
+486.38910 949.0
+486.57950 567265.3
+486.62900 2297.6
+486.65735 1130.2
+486.68893 1780.7
+486.72025 940.4
+486.73416 910.4
+486.86664 2513.7
+486.91318 482989.6
+486.95322 3089.3
+486.97849 1654.5
+487.13861 3241.7
+487.19998 1347.6
+487.24670 254634.0
+487.28497 2337.6
+487.32742 1827.1
+487.47360 2644.3
+487.50745 1109.1
+487.58044 99475.8
+487.62234 1507.7
+487.65955 1283.8
+487.72049 3890.9
+487.80676 1404.0
+487.91461 32139.5
+487.96552 1364.9
+487.99329 622.8
+488.05338 3091.5
+488.23993 8339.3
+488.38779 1733.4
+488.58215 1464.5
+488.72229 4550.5
+489.22537 838.8
+491.28351 959.9
+501.24164 14039.8
+502.24594 2941.8
+507.19165 6149.3
+508.19220 922.9
+529.23743 6731.9
+530.00269 1378.6
+530.22998 1013.9
+530.26294 1126.6
+530.50446 2720.4
+530.75220 1060.1
+532.53418 2000.3
+533.78522 6250.4
+534.28687 4829.5
+534.57593 1047.3
+534.78674 2319.9
+535.28937 720.9
+545.25153 6952.5
+545.30481 28431.7
+546.25568 852.7
+546.30811 6422.7
+547.30676 1283.8
+559.79840 611.1
+578.22833 3679.5
+579.23163 1272.6
+580.24872 1116.3
+583.73517 4773.3
+584.23706 3122.1
+584.73468 1269.6
+590.29767 2472.8
+590.80182 1878.8
+591.30237 1143.9
+597.75476 1266.4
+598.25201 873.2
+598.54279 1336.5
+599.30676 226367.8
+599.80774 153873.1
+599.87103 788.9
+600.07343 1292.3
+600.30817 67106.7
+600.57330 1090.5
+600.80878 20648.3
+600.86542 1535.0
+601.30963 4652.4
+601.36603 1195.2
+605.94800 1104.1
+606.11481 645.6
+607.32092 820.2
+610.28363 614.9
+616.67120 1527.7
+617.00122 834.7
+617.33850 1212.1
+619.25391 5093.6
+619.75525 3961.0
+620.25494 2661.9
+620.75055 842.3
+626.29144 2187.9
+630.39838 688.7
+632.01343 608.1
+632.28308 9582.9
+633.28528 3219.3
+642.26990 4269.6
+643.24561 2188.2
+645.24548 855.1
+647.28156 1123.4
+649.30566 1613.8
+650.30658 960.6
+651.30951 2510.8
+652.97009 624.1
+653.30804 2163.9
+658.48602 1873.0
+658.68030 719.1
+659.39386 1526.8
+660.17944 960.2
+660.27783 403855.5
+660.87506 732.1
+661.15735 2525.2
+661.28033 133611.1
+661.75348 1122.1
+662.08099 2299.9
+662.27979 39811.8
+663.27936 9023.5
+664.27185 1127.8
+664.34949 1004.9
+665.33881 2070.8
+668.78937 3680.0
+669.28931 3585.0
+669.78839 1222.4
+670.29010 1378.6
+671.83466 1718.2
+672.33606 999.3
+676.63037 592.5
+677.29742 8181.3
+678.30304 2618.6
+680.83832 141789.6
+681.33960 107919.4
+681.84033 49507.9
+682.31580 3779.8
+682.36646 72992.9
+682.71808 1046.0
+682.84296 3805.6
+683.15149 591.0
+683.36737 25973.3
+684.36823 6062.3
+685.83099 1086.1
+686.33319 1323.8
+698.29193 1799.8
+706.33728 1329.3
+706.66394 1192.1
+707.00220 2177.3
+718.31659 860.5
+720.35913 6284.0
+720.85724 4270.6
+721.36310 3472.8
+721.85754 1857.5
+722.34961 756.2
+726.97595 1253.6
+727.28058 4841.9
+727.43506 1553.8
+727.51172 1389.1
+727.66150 1635.4
+727.78101 4632.8
+727.92596 1645.6
+728.00128 2192.3
+728.15356 1290.6
+728.27472 3023.2
+728.34418 4310.5
+728.43622 785.4
+728.50116 1205.2
+728.67908 1507.4
+728.84180 3801.8
+729.16193 1876.0
+729.36530 902505.3
+729.48718 1884.1
+729.51239 1935.3
+729.56110 1471.3
+729.58301 798.3
+729.68781 1151.4
+729.75897 1727.4
+729.86530 748396.4
+729.98004 1978.6
+730.06250 2563.2
+730.17712 931.7
+730.22369 1462.0
+730.36511 386770.6
+730.51880 811.8
+730.56323 1476.0
+730.71185 735.8
+730.74658 1278.8
+730.86609 139319.0
+731.07611 1983.5
+731.22070 2257.6
+731.29565 1408.1
+731.36798 42325.8
+731.45837 6119.5
+731.57043 1693.7
+731.64117 851.5
+731.73468 2435.8
+731.79919 1851.8
+731.87213 9618.6
+731.96130 4843.7
+732.06860 917.0
+732.26984 1587.0
+732.37408 1879.6
+732.46246 2515.4
+732.96405 1025.6
+733.46246 854.1
+738.01147 1376.1
+738.51764 961.8
+746.29620 1076.8
+748.36334 1571.2
+757.32715 1004.3
+764.39874 2332.2
+765.39923 757.3
+776.36597 5385.0
+777.37146 2926.2
+778.32062 13468.5
+779.32269 4222.3
+780.32367 1923.5
+781.43201 77688.6
+782.35034 3159.7
+782.43542 29055.0
+783.35382 848.0
+783.43909 6900.5
+784.44116 1312.6
+789.35132 2361.8
+790.35907 1159.7
+791.31421 1100.3
+791.39771 604.3
+794.03589 659.1
+794.88574 6869.1
+795.38708 5456.2
+795.61267 1078.2
+795.88818 3906.2
+796.38586 1593.5
+805.36737 1049.1
+816.37079 1198.3
+823.34174 1225.0
+880.50079 22941.4
+881.50446 10037.7
+882.50690 2419.4
+885.44000 881.7
+892.40216 3707.1
+893.40680 1377.1
+895.44202 1356.3
+902.38208 830.0
+903.36346 798.8
+904.36505 794.6
+913.42230 3103.3
+914.42719 2167.3
+920.39410 44957.5
+921.39709 19684.6
+922.39929 6826.2
+923.40039 1219.0
+945.41394 931.4
+951.53839 22871.8
+952.54150 10993.4
+953.54633 2795.1
+1019.49872 561.2
+1023.49426 1664.7
+1024.50916 790.2
+1042.46960 2725.6
+1043.46680 1321.8
+1044.47510 706.3
+1049.53967 1150.0
+1057.22937 938.5
+1066.56482 22826.8
+1067.56726 12866.6
+1068.57068 3144.9
+1069.58191 747.0
+1155.55286 2254.2
+1156.55396 1345.7
+1197.60583 11588.2
+1198.19226 3551.7
+1198.60974 7936.0
+1199.60864 1750.8
+1237.47888 761.6
+1283.60754 2590.4
+1284.61975 1501.7
+1285.62866 820.8
+1296.26819 603.9
+1308.70935 678.6
+1360.67188 2707.6
+1361.67236 1873.8
+1362.66187 912.1
+1525.38367 794.2
+1667.10950 580.7
+1692.64404 571.1
+1777.01843 782.4
+1798.30737 574.2
+1870.30200 1049.6
+1872.78613 623.5
+1878.80786 768.3
+1879.51453 18473.4
+1880.81897 780.5
+1907.12964 7139.6
+1930.57654 938.6
+1935.29199 714.5
+S	2063	2063	1879.84724127
+Z	2	3757.847
+Z	3	5636.266
+524.98291 573.3
+532.53668 1835.0
+588.99005 643.9
+630.91748 567.6
+676.63464 704.9
+752.32635 660.8
+795.61530 1216.5
+810.95532 644.7
+929.38696 641.6
+930.02606 660.2
+1019.74799 615.3
+1057.22949 776.7
+1117.36475 579.0
+1193.00659 589.4
+1198.20056 3076.1
+1234.45166 571.6
+1602.08655 764.9
+1634.38245 640.5
+1870.32532 1101.8
+1878.24402 772.5
+1879.03003 2270.9
+1879.51831 19486.8
+1880.00732 2050.4
+1907.05249 7304.0
+1930.50854 898.2
+S	2065	2065	530.2554796
+Z	4	2116.99062
+135.58957 58473.1
+139.75761 60810.1
+146.90294 58839.4
+147.87459 56752.5
+148.18205 51824.8
+150.95297 77821.9
+151.96217 56719.1
+157.58598 59522.5
+159.95712 58630.4
+160.32736 59619.6
+188.23572 55982.7
+188.27209 221298.7
+188.29268 257838.7
+188.31839 164313.8
+188.33621 53690.4
+188.37785 57182.2
+188.53806 72233.3
+188.99876 65517.9
+190.83730 66143.9
+198.90408 113982.7
+199.17906 143262.7
+199.25201 163224.2
+199.27708 369958.6
+199.29855 66912.1
+199.31337 78221.0
+204.25980 61175.3
+207.22089 68318.6
+213.08884 70412.2
+233.12819 366526.0
+236.07883 61073.2
+240.09714 62409.6
+243.33955 60800.8
+255.10846 286196.2
+255.89523 55751.8
+258.60831 68913.6
+261.12289 137062.3
+261.61880 130458.5
+261.74451 53490.0
+270.13138 320886.8
+270.67499 56848.9
+271.67581 82125.5
+272.13498 596638.5
+275.12442 193171.0
+275.61676 151859.3
+283.63782 395034.6
+284.12939 1430970.6
+284.63037 250302.5
+285.16711 230990.2
+292.64261 3078538.0
+293.14429 805493.2
+293.64676 97107.9
+316.64526 160422.0
+321.63617 221838.2
+322.12772 141557.6
+330.64185 1279947.3
+331.14273 366450.5
+331.64355 99385.5
+341.16989 222710.3
+341.68448 540639.2
+342.18619 130453.1
+350.28964 74496.3
+356.78464 67922.8
+358.69373 62880.2
+365.17157 113310.6
+372.19983 113654.3
+379.16803 1223401.5
+379.66998 379601.9
+380.17062 91819.4
+381.31644 83308.8
+383.16589 87505.8
+386.21613 126554.3
+390.86331 64989.0
+391.21954 365950.3
+391.71887 119375.9
+395.17972 67317.4
+399.87234 494071.5
+400.19232 583400.6
+400.53537 74234.4
+404.09744 57431.1
+414.20953 795775.8
+415.21118 130472.1
+416.26031 246340.7
+422.70047 192359.8
+423.20270 92214.7
+438.20840 262201.9
+440.75269 373128.5
+441.25793 164890.0
+441.54663 57676.0
+446.70267 308073.4
+447.20334 106215.6
+451.69431 223232.5
+452.18448 183363.0
+457.21411 111805.2
+460.69955 1780878.8
+461.20139 892199.0
+461.69839 201579.5
+476.27151 1271653.3
+476.77151 611202.5
+477.27374 135817.2
+479.69772 61762.8
+480.57196 85922.3
+480.90314 140559.7
+482.59845 101008.8
+485.44467 110597.8
+485.78186 82945.2
+486.01614 98695.4
+486.52753 133148.7
+486.57727 24850982.0
+486.63708 75197.6
+486.76788 86372.8
+486.91153 19028522.0
+487.14545 139771.4
+487.24524 10002882.0
+487.47845 87758.1
+487.57895 3223455.5
+487.71387 161884.4
+487.91269 842447.5
+488.22095 408966.2
+488.72156 126266.0
+501.24011 1409815.0
+502.24323 195090.3
+507.18854 442002.7
+511.22186 133575.7
+512.20007 153761.8
+529.23547 147207.8
+532.50208 179856.8
+532.55939 82625.9
+532.58905 85596.3
+545.24762 107134.1
+545.30298 386504.8
+546.31049 71754.1
+579.25433 69478.5
+583.73083 155312.4
+599.30432 7026788.5
+599.80560 4114718.8
+600.30634 1937179.4
+600.80713 505348.6
+601.30566 101854.1
+605.46173 63735.4
+614.52374 61038.6
+619.25098 181414.3
+619.75433 76561.2
+632.27460 71663.2
+642.26166 145046.4
+643.24432 75649.6
+658.47302 68427.8
+660.27570 10890700.0
+661.27850 3148534.3
+662.27759 906776.2
+663.28180 166774.2
+668.78174 76605.4
+669.28290 89047.6
+676.64166 125821.1
+680.83600 3502969.0
+681.33765 2386980.0
+681.83838 943212.0
+682.25604 70645.7
+682.31390 134951.5
+682.36908 599525.7
+683.36560 267860.8
+698.28864 69431.5
+720.86029 97203.0
+721.35156 63438.0
+727.29071 96582.2
+729.36285 19828994.0
+729.86359 16023653.0
+730.36456 7506161.0
+730.86597 2833120.8
+731.36633 610898.6
+731.45392 92702.9
+776.37006 99376.3
+778.31500 352337.7
+779.31488 113925.2
+781.43097 425938.6
+782.43591 109692.5
+795.61804 94999.6
+833.22559 64356.2
+859.94751 68496.2
+880.51099 71866.6
+909.72528 74281.6
+920.39069 576110.3
+921.39380 336567.4
+934.31793 74271.8
+937.40961 75817.3
+947.35956 61107.9
+1013.07526 84414.1
+1019.67816 73825.8
+1131.23071 69369.0
+1188.78918 63474.8
+1198.14368 354092.5
+1235.65125 69906.2
+1422.04004 69085.0
+1525.27893 88688.2
+1669.06458 64800.0
+1808.29822 58071.8
+1808.47314 55893.9
+1870.51050 79095.6
+1877.90015 93628.4
+1878.34497 113978.2
+1878.67090 64028.4
+1879.07239 189646.7
+1879.55957 1988499.0
+1880.38672 111066.5
+1880.78467 101779.6
+1881.14856 63029.4
+1881.59973 78094.9
+1907.09863 832105.6
+1907.40356 74590.1
+1930.44482 88598.4
+S	2066	2066	531.0065746
+Z	4	2119.995
+135.28952 49698.2
+141.85379 72859.5
+144.83034 58544.9
+146.36755 54597.5
+151.65305 53696.4
+171.64366 71824.7
+179.47922 63583.6
+180.72279 56747.9
+184.22456 63519.9
+188.24983 114228.6
+188.26173 193422.9
+188.27397 198201.9
+188.28874 216011.2
+188.30495 170298.1
+188.31555 141718.5
+188.36748 56315.8
+198.90283 99093.0
+199.19374 58918.8
+199.26273 98251.3
+199.27457 108757.1
+199.28374 264420.6
+199.29448 113102.3
+199.29968 128942.6
+199.31017 125774.4
+199.32690 102163.1
+199.40987 83548.6
+233.12837 416669.2
+233.47467 62617.1
+238.70587 66803.6
+249.12390 61379.7
+255.10815 378448.9
+256.56201 58764.4
+259.27057 59347.5
+261.12350 113495.4
+261.61945 132976.2
+270.13223 266368.6
+272.13495 671182.8
+275.12390 362671.0
+275.61731 151843.4
+283.63751 572416.9
+284.12930 1445412.4
+284.63101 415474.6
+285.13284 81007.0
+285.16669 315504.1
+288.57538 61815.4
+292.64279 3641416.5
+293.14432 1187595.0
+293.64777 170000.8
+306.63916 70783.7
+310.15237 101258.6
+311.89987 61750.3
+316.64389 226343.6
+317.14557 78532.9
+321.63678 217695.8
+322.12756 96545.7
+330.64197 1592220.8
+331.14395 523649.9
+331.18878 65567.2
+331.64200 131661.7
+333.82718 63027.7
+341.16919 229020.0
+341.68433 452295.5
+342.18619 145467.9
+365.16873 73617.5
+369.18234 72767.9
+370.16251 158858.8
+370.65128 102094.4
+372.19812 119852.8
+379.16821 1653476.8
+379.66974 547516.3
+380.16864 94852.1
+386.21393 181105.5
+391.21826 490180.9
+391.71991 214931.1
+392.16183 83099.5
+392.22513 69672.3
+395.17670 126622.8
+396.18356 80502.3
+397.18381 70502.1
+399.87262 829643.5
+400.19217 626543.1
+400.54248 186889.8
+401.19150 104992.2
+410.22104 56031.7
+414.20935 784043.3
+415.21213 106221.4
+416.26031 289403.2
+422.69952 201136.4
+423.20187 99784.8
+427.53073 83658.5
+437.70139 72076.6
+438.20786 263967.6
+439.20734 55668.1
+440.75372 496416.9
+441.25616 170029.0
+442.20667 61211.8
+446.70157 396934.3
+447.20444 229906.9
+451.69528 263997.9
+452.18375 209086.8
+452.68842 96175.6
+457.21252 117956.6
+457.71146 80196.7
+460.69977 1865556.4
+461.20120 929642.8
+461.70010 282898.1
+462.20520 128656.5
+476.27136 1221267.5
+476.77249 657302.6
+477.27530 212602.9
+477.39365 55516.0
+479.21176 75750.3
+479.70276 94066.2
+480.57291 96151.7
+480.90784 77510.8
+485.44580 141458.7
+485.77475 115649.8
+486.01877 119816.7
+486.35376 135229.6
+486.52286 117666.9
+486.57751 29377008.0
+486.86209 126604.2
+486.91165 23107474.0
+487.13681 226299.1
+487.24524 11938139.0
+487.47348 144524.8
+487.51276 93510.2
+487.57883 4155175.0
+487.71866 183329.6
+487.84967 79044.5
+487.91214 1029493.3
+488.04861 124795.6
+488.22232 495269.8
+488.72003 223874.3
+490.04727 71908.2
+501.24042 1557044.9
+501.35031 56056.8
+502.24216 362649.1
+503.70560 83819.0
+507.18887 363347.7
+508.70459 103417.6
+512.20349 172510.8
+514.20337 78054.4
+529.23700 159226.6
+531.23077 82233.1
+532.47369 222784.0
+545.24963 166870.8
+545.30365 307987.6
+569.76642 59130.7
+571.86761 58056.5
+583.72986 75858.9
+596.42383 66139.9
+599.30475 8111958.5
+599.80585 4956842.5
+600.30695 1912557.9
+600.58386 60753.0
+600.80743 566309.6
+600.85840 54317.7
+601.30566 149548.3
+606.03687 58415.4
+616.67664 91249.2
+617.00446 99284.8
+619.25104 240969.1
+619.75378 120722.2
+620.24640 66731.0
+626.29022 100451.8
+630.39319 81829.4
+642.26733 177201.9
+643.25714 73106.1
+651.30878 72584.4
+660.27612 12508414.0
+661.27875 3914737.0
+662.08008 81440.9
+662.27808 1098699.3
+663.27563 160890.0
+668.78564 94089.9
+669.29028 66674.0
+676.61584 95079.1
+680.83624 4380261.0
+681.33783 3220854.3
+681.83881 1328158.9
+682.31403 86220.6
+682.36853 685663.2
+683.36316 229344.5
+684.37427 74098.6
+720.36145 156784.6
+720.86157 143608.3
+727.28119 104828.9
+727.77637 78660.5
+728.33569 122511.6
+728.83258 74564.0
+729.36310 24737844.0
+729.86389 19304968.0
+730.36414 9342347.0
+730.86542 3372055.8
+731.09473 107115.5
+731.36609 931070.2
+731.45837 125119.4
+731.86908 149093.7
+731.96112 92785.2
+736.11157 63268.5
+778.31824 441655.5
+779.32190 170865.7
+781.43005 462374.7
+782.43457 202024.5
+782.58069 54550.4
+791.31311 106248.4
+794.87988 116208.4
+795.38434 100186.3
+795.61005 87108.1
+817.94556 54536.5
+902.37402 63150.6
+909.87695 55215.3
+920.39203 683783.9
+921.39642 229356.2
+925.85583 70168.4
+937.13300 60428.8
+970.07269 55184.6
+1016.20947 64595.1
+1057.19312 80725.6
+1109.38586 63620.1
+1166.43042 63658.3
+1198.05920 327469.6
+1781.02466 70235.8
+1847.87695 67617.3
+1875.14697 64415.4
+1879.02417 165867.1
+1879.48010 2020134.6
+1879.94666 117512.2
+1880.44336 70914.9
+1907.12146 763810.4
+1930.55042 87151.5
+1989.65918 58420.6
+S	2067	2067	568.0812766
+Z	5	2835.36726
+148.00439 6255.7
+149.12946 6831.7
+171.64339 7985.7
+171.76840 6662.8
+172.22989 5723.0
+177.54575 6352.1
+188.26703 7246.1
+188.28094 11323.1
+188.29053 9052.6
+188.30128 7083.8
+188.31038 9758.7
+193.90645 6505.8
+198.90726 6981.3
+199.19235 10288.5
+199.25507 11879.8
+199.26416 15676.7
+199.28137 17168.4
+199.29056 20342.2
+199.36833 8959.0
+199.37885 7384.3
+199.38908 10805.5
+224.18872 6644.6
+232.09669 5518.8
+233.16347 7688.8
+249.15955 63392.7
+250.16296 13358.5
+251.14799 8389.4
+258.14954 29602.7
+277.15411 28945.9
+278.16003 6840.6
+280.17496 7707.6
+288.40668 6132.4
+288.88580 6630.2
+303.14426 6943.3
+305.91769 6496.2
+310.38120 6368.7
+313.02914 5906.5
+332.12714 15490.8
+350.29211 10518.9
+363.17163 14650.0
+364.18811 18581.8
+372.50000 7489.2
+377.36044 6650.8
+387.19461 7846.2
+388.53116 13832.3
+400.26505 11875.2
+408.19424 30161.2
+409.21582 7047.4
+426.22528 271563.8
+426.55981 141297.3
+426.89417 53211.0
+427.22787 11910.6
+432.71820 13325.0
+437.21234 17501.7
+451.23721 8886.8
+463.91974 45967.1
+464.25394 42282.6
+464.58771 13051.4
+467.54214 9887.4
+476.87723 10096.8
+477.22241 8121.5
+479.23114 31308.2
+480.23627 7949.2
+482.64041 7636.4
+486.87640 9754.1
+489.26071 45459.4
+489.76212 18534.6
+492.24347 16998.5
+492.58038 8570.9
+495.19269 13542.8
+508.92178 6256.2
+511.90692 11205.9
+512.94189 13460.5
+513.28009 10267.7
+514.56818 10502.3
+514.90619 11733.1
+515.29205 32566.2
+518.24884 11142.5
+518.74231 7649.9
+520.57330 36919.5
+520.90796 26148.7
+521.24261 23985.1
+532.27344 9513.9
+532.46692 19496.7
+543.98260 19478.9
+544.23206 14645.7
+544.48010 8717.5
+544.77765 23115.4
+545.27753 23251.7
+545.78217 13350.2
+546.62286 10179.9
+549.13947 10027.1
+550.29858 21427.6
+552.59729 9647.0
+553.78156 84063.3
+554.28229 40934.9
+554.77661 7370.7
+582.29211 367768.6
+582.79382 232564.8
+583.29535 96561.3
+583.79541 22315.1
+590.26544 14612.0
+591.27417 8919.6
+599.27686 11163.2
+608.27344 172928.3
+609.27655 55495.3
+610.27747 17540.4
+618.34766 6531.6
+621.82172 8814.7
+627.55469 7276.7
+629.83014 20127.1
+630.32971 15235.6
+632.27295 30511.5
+632.77191 20775.8
+633.27728 18021.5
+636.30536 11802.0
+637.07135 7279.5
+638.83435 1000500.9
+638.89209 9207.1
+639.33569 705152.4
+639.83698 224936.2
+640.33875 63890.0
+640.56110 46827.8
+640.81000 24200.1
+641.05988 26696.8
+641.28217 33504.6
+641.55951 13220.3
+641.77783 28379.8
+642.28186 15813.2
+642.78271 6985.4
+649.29175 20149.9
+650.29053 14538.2
+650.78027 12405.9
+651.28741 7578.4
+652.56647 6346.0
+656.26819 23574.7
+661.28992 7285.0
+674.27643 11464.7
+676.64191 12325.1
+685.80841 10967.2
+689.81793 8644.2
+692.29083 9372.4
+695.37665 245821.2
+695.87769 180589.1
+696.37854 77316.9
+696.79980 9404.1
+696.88147 17524.4
+698.82861 16939.0
+699.33167 12340.1
+699.69226 10313.0
+700.81274 12611.3
+705.80402 52608.3
+706.30609 43044.9
+706.80963 23196.9
+709.81818 23136.7
+710.32190 23159.7
+714.80975 72356.8
+715.31238 74768.8
+715.81433 34206.5
+716.31024 11388.7
+723.29938 35526.8
+723.81628 101965.1
+724.31757 54607.2
+724.82007 31092.6
+725.32001 7527.7
+727.37207 69250.9
+728.37445 23284.6
+731.36243 11997.5
+731.69427 13197.1
+737.36804 15236.6
+737.69769 20545.2
+738.03534 17378.2
+738.70862 8640.2
+738.86798 8079.9
+742.87018 8161.3
+743.37646 9893.0
+743.70776 15729.1
+755.85944 8988.9
+762.33325 12009.8
+762.85284 10911.3
+766.36237 34312.3
+766.86115 13842.4
+767.04657 8668.3
+767.35529 12718.9
+768.90863 12988.6
+769.41077 21108.0
+769.91046 9874.4
+771.35309 81889.9
+771.85388 64886.4
+772.35254 38196.7
+772.85522 7851.1
+774.37268 9412.6
+774.70325 9216.9
+775.02814 17759.4
+780.35797 166160.6
+780.85938 148253.9
+781.36072 79517.6
+781.85852 27190.6
+783.13409 6814.1
+795.61322 12695.3
+815.38739 13178.2
+819.94562 13053.0
+821.34570 24248.6
+823.36035 8179.2
+833.84229 8233.3
+837.41870 15536.5
+839.35944 92024.7
+840.36102 42459.7
+841.36395 14356.1
+857.01294 6807.2
+887.42102 10910.2
+920.41290 8411.6
+934.43182 21506.5
+952.44250 81809.4
+953.44763 43285.7
+954.44592 13953.6
+968.40198 14427.9
+969.41254 11034.4
+1021.41840 7697.4
+1039.43530 19354.6
+1040.42627 8458.0
+1057.25757 7542.8
+1081.48401 14270.0
+1082.48401 9110.5
+1131.71655 8421.0
+1135.58960 6481.8
+1152.53284 18057.4
+1153.53162 11681.6
+1198.03381 37717.0
+1263.53320 10043.0
+1264.54419 8220.7
+1283.54578 7813.4
+1284.52478 8283.6
+1446.63159 8813.5
+1525.33215 7249.4
+1712.76343 6257.8
+1718.01807 6431.3
+1726.44189 7157.4
+1878.66772 8347.3
+1879.12793 18845.5
+1879.54419 224022.2
+1880.01648 19976.5
+1880.49817 11428.9
+1882.02222 6829.9
+1907.09900 80703.2
+S	2069	2069	530.2614621
+Z	4	2117.01455
+139.10646 620.5
+146.08531 637.2
+150.17677 604.0
+164.10397 557.2
+165.76993 594.9
+169.15375 639.8
+170.87181 520.6
+181.41156 545.9
+183.02200 517.4
+188.17699 512.3
+188.21605 589.0
+188.25523 1759.1
+188.27403 2287.4
+188.28586 2362.7
+188.29814 2191.5
+188.32686 792.9
+188.34259 609.2
+196.29315 568.4
+199.18958 656.8
+199.19827 827.6
+199.24947 998.6
+199.26048 940.9
+199.27148 1689.2
+199.28723 1367.5
+199.30243 1287.7
+207.72815 583.5
+233.12865 5039.6
+237.70999 570.6
+245.47797 596.0
+255.10886 4176.1
+255.24358 540.6
+261.12198 1125.3
+261.61694 794.9
+270.13245 2474.5
+270.63373 731.4
+271.54221 556.0
+271.69604 652.0
+272.13553 5307.0
+275.12506 2596.2
+275.61847 1551.0
+283.63803 4395.7
+284.12988 13725.6
+284.63165 2962.8
+285.13162 919.3
+285.16727 2030.2
+292.29587 583.2
+292.64316 33109.6
+293.14487 11339.2
+293.64609 2492.4
+297.79306 592.2
+303.17737 1297.9
+307.39777 532.8
+310.15106 935.9
+314.06979 530.7
+316.37393 635.1
+316.64502 2956.9
+320.10947 624.9
+321.63684 2181.9
+322.12869 1431.8
+330.64227 17222.2
+331.14392 5482.0
+331.64459 1431.0
+341.17007 2260.4
+341.68515 7324.5
+342.18671 3680.2
+350.29886 711.1
+365.17014 837.4
+369.18649 738.2
+370.16040 652.2
+370.65353 1102.4
+372.11993 806.7
+372.19766 1191.7
+379.16870 13563.8
+379.67035 5814.3
+380.17044 1158.5
+383.16748 1321.6
+386.21484 2539.1
+389.15237 707.4
+390.17392 635.8
+391.21933 6539.0
+391.72144 3514.2
+392.16379 1090.4
+396.18091 881.0
+397.18149 811.6
+399.87277 6189.7
+400.19321 5352.5
+400.20706 4759.0
+400.54150 1615.4
+400.87527 672.5
+401.19727 923.6
+403.17224 739.0
+414.20987 6876.6
+415.21191 1192.4
+416.21078 665.8
+416.26196 3999.8
+417.18066 715.2
+422.70264 2670.4
+423.20139 1461.3
+438.20987 3196.3
+440.75455 5928.1
+441.25583 2871.4
+446.70294 5472.5
+447.20453 2549.7
+447.70081 1064.3
+448.20822 757.5
+451.69687 1548.5
+452.18622 2125.3
+452.68866 1578.9
+453.19095 793.1
+454.37759 621.4
+457.21487 1407.4
+457.72098 624.5
+460.70035 25884.7
+461.20187 12962.8
+461.70215 4292.1
+462.20395 1362.8
+469.33786 684.9
+476.27243 21122.5
+476.77432 15082.7
+477.27432 4279.2
+477.77313 815.9
+479.70874 836.1
+480.90585 1082.9
+481.24780 703.9
+485.40726 968.6
+485.44608 1237.9
+485.63770 1049.8
+485.77835 1420.9
+485.97034 1281.0
+486.01730 1680.5
+486.10788 785.2
+486.30515 752.6
+486.35254 1706.0
+486.52655 1193.9
+486.57840 348233.5
+486.63031 1378.4
+486.68732 1451.5
+486.77008 825.8
+486.78162 826.6
+486.91229 333753.4
+486.96140 1440.2
+486.98181 665.8
+486.99310 900.6
+487.13687 1789.2
+487.24588 183842.4
+487.47418 1833.6
+487.51981 884.8
+487.57962 75624.8
+487.71716 1828.2
+487.80707 1210.9
+487.85794 1308.6
+487.91376 20399.2
+488.05078 1439.4
+488.14621 843.2
+488.17419 726.0
+488.23883 6970.6
+488.38446 880.0
+488.58234 1755.6
+488.72226 4433.1
+489.22263 1165.7
+494.19611 783.9
+501.24103 15203.6
+502.24457 3582.0
+504.20920 780.9
+507.19107 6597.6
+508.19308 2453.8
+511.22232 1184.6
+512.20795 1271.5
+529.23541 3393.3
+531.23206 753.9
+532.48584 2270.4
+533.78552 1474.1
+534.28741 1380.3
+545.25092 2600.4
+545.30396 11829.3
+546.30603 3373.5
+547.31476 811.8
+549.11133 596.8
+558.20087 543.2
+564.55444 678.9
+578.22705 1234.0
+583.73383 1940.8
+584.23608 1071.1
+590.30151 917.8
+590.80225 1183.3
+593.75354 617.2
+599.30560 115686.1
+599.80670 92861.8
+600.30731 40902.1
+600.80786 15504.4
+601.30804 3237.2
+601.81018 1168.1
+605.61578 701.1
+609.29834 697.1
+616.67053 1007.7
+617.00342 1510.6
+619.25201 2598.7
+619.75433 2957.6
+620.25543 1575.7
+622.78760 618.5
+630.36029 676.6
+632.28149 2209.9
+633.28381 1009.9
+642.26691 2206.8
+643.24835 631.7
+651.30713 986.3
+653.30811 1226.8
+659.39203 1023.8
+660.27667 217044.7
+660.34131 909.6
+661.16718 1257.7
+661.27924 80532.2
+662.07715 952.9
+662.27893 26867.3
+663.28070 5201.5
+664.28363 786.2
+668.78632 2552.6
+669.29126 1257.0
+676.61707 646.7
+676.65417 614.8
+677.29694 3410.6
+678.29736 1772.3
+680.83685 74225.3
+681.33856 64504.7
+681.83942 34610.7
+682.31256 3905.8
+682.36792 29534.7
+682.84088 5111.5
+683.36652 13137.3
+684.36786 2524.6
+698.28717 862.7
+706.65643 1394.2
+707.00305 1081.3
+707.33850 1108.0
+720.35919 2553.0
+720.85944 2291.1
+721.35571 1585.6
+723.68683 661.5
+727.28357 1798.0
+727.57562 528.3
+727.63690 902.4
+727.78137 1421.8
+727.98163 853.3
+728.14490 1203.3
+728.28766 1039.8
+728.33618 1812.7
+728.49127 649.3
+728.65796 1176.3
+728.83728 1699.7
+728.99902 788.5
+729.36401 426704.9
+729.69312 1463.4
+729.76935 1623.9
+729.86444 400901.6
+730.19855 1161.9
+730.36444 222812.4
+730.46716 732.4
+730.55035 637.1
+730.56897 623.1
+730.86499 88687.2
+731.07758 1828.1
+731.24261 808.1
+731.36548 29598.7
+731.45007 2003.7
+731.58563 1476.3
+731.75012 1075.4
+731.86688 8680.2
+731.95935 2182.5
+732.10333 786.7
+732.25739 926.3
+732.36047 824.6
+732.45776 1136.7
+735.81915 756.3
+748.36078 938.0
+764.38190 765.7
+776.36554 2511.9
+777.36530 710.0
+778.32043 4745.8
+779.32050 2802.4
+781.43079 29170.4
+782.43329 12820.4
+783.43512 3003.8
+789.35400 1001.2
+791.31287 1467.3
+791.37811 612.6
+792.32037 698.0
+794.88611 2700.3
+795.38550 2295.6
+795.60693 888.5
+795.88654 967.7
+796.38666 1095.4
+853.52814 609.5
+880.49866 6173.1
+881.50031 2574.9
+882.49939 869.9
+892.41064 748.2
+903.35852 610.3
+913.42688 1954.6
+920.39301 18000.5
+921.39435 9624.6
+922.39465 2846.9
+923.39923 1133.4
+925.00299 859.2
+946.41357 620.0
+951.53662 5994.9
+952.54047 4703.3
+953.54315 1143.1
+954.40332 619.9
+986.24664 755.3
+1042.45862 955.4
+1066.56274 5030.5
+1067.56726 3149.1
+1068.56567 763.0
+1122.96997 561.4
+1155.54321 906.3
+1197.60645 1888.7
+1198.08130 3354.3
+1198.60181 1258.7
+1199.59814 639.4
+1241.10278 661.0
+1257.36072 585.0
+1283.59436 777.3
+1284.61719 765.2
+1778.60022 642.4
+1872.91858 637.2
+1877.08130 599.5
+1878.10266 770.4
+1879.03162 1004.5
+1879.47546 20112.8
+1879.91589 1099.2
+1880.20068 998.4
+1907.12329 7552.9
+1930.45740 1017.6
+1946.54700 634.4
+S	2070	2070	531.2605746
+Z	4	2121.011
+136.51273 45688.0
+144.84885 47875.0
+145.09950 50862.9
+149.55365 51826.5
+154.56958 43942.1
+176.91281 55969.4
+188.23686 61451.0
+188.27119 149251.8
+188.27547 149757.1
+188.29056 174764.3
+188.30095 161220.3
+188.31622 110873.6
+188.34335 47937.6
+199.18254 109754.7
+199.19098 49026.7
+199.27953 258042.5
+199.29147 89024.4
+199.29700 42390.2
+199.37759 62574.6
+199.40297 52739.1
+252.27361 50750.3
+253.60352 44780.2
+255.10974 74851.2
+255.11893 41719.0
+263.53888 43291.9
+265.73074 44401.4
+271.69016 44512.6
+272.13507 128414.2
+275.12369 94168.5
+283.63672 198662.4
+284.12924 296405.3
+284.63043 85168.7
+285.16537 74504.0
+285.82928 57502.9
+292.64240 959053.8
+293.14410 256620.6
+308.89322 59715.6
+316.64203 122319.0
+318.95227 53518.5
+321.63596 109412.4
+330.64154 555536.0
+331.14319 97588.7
+341.68515 76681.9
+376.28500 49514.8
+379.16763 357795.9
+379.66821 198985.2
+381.35120 54444.3
+386.21295 53600.2
+391.22018 102515.0
+399.87231 137623.0
+400.19373 149894.8
+400.20767 179485.8
+414.20795 272987.7
+428.19022 62944.0
+429.71954 50729.6
+440.75089 107079.0
+441.07864 44455.8
+441.25299 54831.3
+445.39273 49736.8
+446.70468 84132.5
+452.18451 87547.7
+460.69916 605396.8
+461.19968 232800.3
+476.27151 246899.7
+477.27039 46603.4
+481.24493 45429.9
+482.63861 70266.3
+486.57678 6784614.5
+486.91107 5195973.0
+487.24469 2275647.3
+487.57803 727693.6
+487.91452 129645.3
+501.24057 384005.2
+502.24173 88674.4
+507.19037 91601.4
+517.21558 65678.6
+530.23871 49389.7
+532.48492 146365.7
+545.29474 48879.7
+549.14136 58350.9
+584.48370 52846.2
+587.43359 50658.3
+599.30402 1587544.5
+599.80536 914231.3
+600.30664 436748.5
+600.80902 91748.4
+660.27533 2866199.3
+661.27820 824980.1
+662.28070 201014.6
+676.65717 81549.2
+680.83533 927698.1
+681.33691 611920.0
+681.83862 204232.9
+682.37177 81743.5
+687.51550 69962.5
+706.59387 57986.8
+729.36182 5674479.0
+729.86310 4440640.5
+730.36414 2224016.8
+730.86493 700224.5
+731.36377 136159.1
+764.32990 46709.1
+778.32477 81548.8
+795.59174 80091.5
+887.81464 51332.1
+920.39246 88939.7
+921.38831 57192.0
+994.05298 54016.4
+1019.68274 62599.1
+1049.93982 50431.3
+1105.89575 48272.9
+1198.08606 301275.9
+1255.72339 47464.2
+1291.70398 58015.5
+1719.64209 60078.9
+1807.42847 62440.2
+1875.65967 61228.4
+1879.17432 145951.9
+1879.58154 1591211.8
+1880.32825 87754.0
+1880.70117 55027.5
+1881.68591 54185.3
+1882.02722 61089.3
+1906.88403 110016.5
+1907.13513 638564.3
+1930.54761 62146.1
+S	2071	2071	484.2973246
+Z	2	966.579
+120.74010 719.3
+121.79111 2316.2
+125.70913 504.4
+126.09130 523.8
+128.57475 660.4
+130.74187 567.7
+136.07526 5651.2
+143.00587 584.1
+146.91936 578.7
+165.35574 600.6
+172.17284 600.4
+180.10184 999.6
+188.26550 997.0
+188.27495 1136.6
+188.28200 1084.2
+188.29071 1259.9
+188.29695 1179.3
+188.30670 959.6
+188.32159 766.9
+193.09692 9152.5
+194.10110 920.9
+198.90096 1129.8
+199.16650 633.6
+199.18074 2813.1
+199.26523 1564.4
+199.28337 2222.8
+199.29422 1521.4
+199.30486 754.8
+199.31142 740.6
+199.39308 762.5
+199.40891 586.2
+199.41890 748.0
+207.65837 558.7
+219.44524 686.8
+221.09186 21875.8
+222.09534 1682.5
+227.17514 922.2
+230.14977 1321.9
+232.85742 607.6
+233.16454 1721.7
+233.57225 703.9
+233.96954 671.0
+239.17502 1723.8
+253.07738 587.1
+261.12564 1284.3
+261.15976 4779.7
+262.16473 672.1
+276.13815 2447.4
+277.13815 708.4
+284.19583 3015.6
+289.15424 27391.4
+290.15750 4050.4
+294.14780 13398.7
+306.18069 2949.0
+307.00696 551.5
+311.17566 578.0
+314.83261 589.9
+334.17566 31470.5
+335.17978 4405.6
+343.23288 4524.9
+344.23605 820.3
+346.60132 585.9
+350.27820 703.8
+356.72043 519.6
+362.17099 930.1
+369.28412 698.0
+373.24524 571.2
+373.74548 11620.3
+374.21188 958.5
+374.24673 5553.7
+374.74808 671.1
+377.17523 591.1
+389.22092 3324.2
+397.28079 3015.5
+398.28122 836.1
+400.45035 682.1
+400.64142 622.5
+402.23798 7516.1
+403.24271 1596.8
+407.23151 66552.0
+408.23499 11915.9
+409.22504 1515.0
+419.26443 28595.6
+420.26791 5935.8
+421.26675 871.9
+424.90500 2174.6
+425.24139 1695.5
+425.57507 986.5
+429.24979 678.7
+430.23331 1327.0
+442.78351 2533.4
+443.27469 4807.4
+443.77634 2699.2
+447.25909 29506.8
+448.26251 5427.3
+448.52536 591.5
+451.78806 23263.2
+452.28943 9127.8
+452.78989 2001.9
+456.31720 14147.2
+457.32077 4128.7
+463.74261 560.8
+464.58740 646.5
+466.26801 1644.6
+466.76843 1224.2
+486.55093 705.4
+502.30295 1148.3
+515.32220 7328.6
+516.32404 2513.4
+520.31500 119876.3
+521.31818 27598.8
+522.31396 3848.7
+532.34790 14407.0
+532.49451 1968.4
+533.35101 4248.9
+549.15790 845.3
+550.61639 9466.1
+550.95026 12218.6
+551.28479 7018.9
+551.61957 1949.4
+551.95074 641.5
+553.28510 540.1
+556.62018 9377.8
+556.95386 8876.8
+557.28778 4281.5
+557.62177 1980.5
+560.34259 22590.5
+561.34680 6020.3
+562.35236 1200.6
+569.40088 8312.2
+570.40320 3249.1
+590.36853 646.8
+594.31543 4390.9
+594.64844 3831.1
+594.98389 2199.4
+615.38464 1185.6
+628.40393 1689.2
+633.39862 142299.4
+634.23383 634.7
+634.40155 49094.9
+635.40063 8524.3
+636.85364 4630.7
+637.35736 2095.8
+637.85730 1112.6
+645.42957 2099.5
+646.43359 1249.7
+656.29877 695.8
+668.37604 611.2
+673.42731 6187.9
+674.43085 2336.1
+676.64716 932.1
+682.48438 4015.1
+683.49139 1768.6
+707.37701 1539.1
+739.50800 2627.5
+740.50787 959.6
+744.70441 626.0
+746.48248 56361.0
+747.48590 22244.6
+748.48724 4917.1
+756.46497 2930.8
+757.46503 1396.3
+774.47656 1790.6
+775.46930 869.5
+792.47314 1210.8
+795.59857 1028.3
+802.45465 1034.7
+803.50397 42276.0
+804.50677 18493.9
+805.50696 4631.3
+820.46216 11830.9
+821.46429 4311.1
+822.47247 907.0
+827.74719 724.3
+836.45978 1141.8
+838.47656 929.9
+1019.71576 748.0
+1046.17444 594.8
+1198.10657 3427.2
+1313.07520 683.2
+1525.39832 826.2
+1870.29150 961.0
+1875.86768 625.8
+1877.63684 873.5
+1878.77344 779.6
+1879.17065 1618.0
+1879.56165 19585.2
+1880.30579 1230.6
+1906.35010 805.4
+1907.04187 7564.8
+1930.60693 1072.6
+S	2073	2073	530.2538921
+Z	4	2116.98427
+135.82823 548.9
+157.60301 732.5
+161.44122 699.0
+165.77052 619.2
+180.65691 569.5
+182.78256 569.5
+188.23334 586.4
+188.27538 2054.6
+188.28294 2304.6
+188.29378 2020.8
+188.31523 1242.1
+188.33511 652.8
+191.77473 577.8
+198.90834 997.6
+199.26096 927.2
+199.28862 2805.0
+199.30409 740.8
+199.38705 602.6
+213.08759 751.2
+224.92133 516.5
+233.12840 5965.1
+234.13120 1264.5
+255.10841 3667.9
+255.86697 539.7
+261.12286 1914.4
+261.61969 1310.0
+270.13220 3198.3
+270.63361 969.8
+271.53946 775.9
+272.13525 6610.5
+273.13928 972.9
+274.63083 783.3
+275.12546 1428.9
+275.61966 1136.7
+283.63748 4164.4
+284.12979 10738.2
+284.63138 4327.8
+285.13406 640.8
+285.16705 3269.3
+292.64291 28176.1
+293.14453 10966.3
+293.64575 1994.2
+308.89957 883.9
+310.15155 1331.2
+316.64325 1838.3
+317.14828 840.1
+321.63678 1892.8
+330.64206 11278.5
+331.14362 5155.9
+331.64465 1334.8
+341.16843 2613.1
+341.68378 5322.0
+342.18634 1485.0
+342.27173 671.7
+342.68851 785.1
+354.25418 574.8
+366.95673 514.9
+370.16312 837.1
+372.19824 1211.2
+379.16809 10698.0
+379.66946 5549.6
+380.17169 1799.2
+382.18811 775.3
+383.16742 1192.2
+386.21457 1969.7
+387.21851 1042.8
+391.21887 5570.7
+391.72083 2388.6
+392.16324 1021.3
+392.22049 757.9
+392.54742 543.0
+395.17993 940.8
+399.20831 763.6
+399.87247 2748.2
+400.19257 8581.7
+400.53955 2198.1
+400.87283 1415.6
+401.19647 1675.5
+403.17560 796.5
+414.20938 9157.6
+415.21378 2773.5
+416.26147 2970.5
+417.26624 1009.4
+422.70154 1948.7
+423.20126 1586.6
+438.20813 2301.9
+440.75330 3943.6
+441.25375 2674.7
+441.75568 863.7
+446.70294 2622.2
+447.20410 1513.7
+447.70303 1117.8
+451.69312 877.9
+452.17950 955.5
+452.68982 1012.8
+457.21725 1150.7
+460.69971 11284.7
+461.20139 9341.3
+461.70212 3406.6
+462.20148 1424.0
+471.56534 1057.5
+476.27206 10181.6
+476.77362 8593.2
+477.27493 3036.4
+477.77539 759.0
+479.70776 803.1
+480.90707 1369.8
+485.44403 852.0
+485.72067 631.0
+485.77850 1042.8
+486.11194 635.4
+486.34595 864.5
+486.57776 169174.8
+486.86017 1078.5
+486.91196 208920.2
+487.13971 656.2
+487.24545 144420.3
+487.31265 654.6
+487.32608 588.3
+487.57910 72101.3
+487.70987 821.2
+487.91330 21420.9
+488.04865 1077.7
+488.24396 5994.2
+488.38425 1159.8
+488.43420 679.0
+488.58246 996.8
+488.72223 1888.5
+489.22311 795.6
+492.58963 652.5
+501.24048 14828.9
+502.24341 6764.5
+503.24734 1649.1
+507.18970 3456.0
+508.19250 1765.3
+512.20776 1527.7
+514.20569 1503.4
+529.23602 1159.0
+531.23688 639.2
+532.51453 2242.2
+545.25024 1361.5
+545.30402 4218.4
+546.24622 759.3
+546.30920 1908.4
+583.25525 580.5
+583.73468 803.5
+590.30121 1000.2
+598.74554 595.3
+599.30481 59366.6
+599.80609 54688.9
+600.30670 32329.6
+600.80743 11444.4
+601.30786 2041.3
+601.80914 1052.9
+619.25226 1050.7
+619.74438 874.1
+642.26740 1084.0
+660.27588 99727.5
+661.27856 45192.4
+662.27710 16429.9
+663.27985 3728.0
+663.54913 616.4
+676.63824 1027.6
+677.29352 1717.3
+678.29523 848.1
+679.31274 626.6
+680.83630 28444.0
+681.33801 32727.9
+681.83856 20415.6
+682.32147 3808.8
+682.37311 6659.9
+682.84174 2455.6
+683.36676 4714.1
+684.37030 1469.0
+706.96204 548.1
+720.35962 1292.0
+727.77808 659.4
+729.36316 148667.6
+729.86401 174511.9
+730.36450 121912.6
+730.86566 54228.9
+731.36694 16032.4
+731.45221 713.6
+731.86987 3729.5
+731.96198 1018.3
+732.36707 736.1
+732.45856 699.1
+776.36066 1059.8
+778.31836 3295.9
+779.31799 1814.7
+781.43024 5213.3
+782.43286 2847.1
+782.52441 894.0
+783.45142 986.0
+789.38043 519.4
+795.39056 804.3
+795.62799 691.5
+795.87933 1274.1
+893.81421 638.0
+920.39105 4399.5
+921.39575 4201.4
+922.39508 1412.0
+939.43127 784.2
+1076.84741 625.2
+1155.55298 662.9
+1188.12231 837.4
+1198.15320 3278.5
+1489.75928 585.3
+1506.97351 742.3
+1545.41199 625.2
+1777.02148 809.5
+1870.17261 956.1
+1878.62354 1279.5
+1879.11646 1442.6
+1879.53027 20260.7
+1879.93066 1717.1
+1880.40039 994.5
+1893.51270 672.3
+1906.89417 7090.6
+1918.85571 745.8
+1930.60046 1312.0
+S	2074	2074	531.0053246
+Z	4	2119.99
+141.84877 1756.4
+146.08144 1683.7
+146.90388 1766.9
+148.07327 1585.5
+158.20659 1431.8
+165.76852 1931.7
+169.64351 1651.5
+172.47182 1718.8
+175.75508 1494.8
+188.23289 2097.1
+188.24529 2537.0
+188.25900 2061.5
+188.27333 2163.2
+188.29190 1568.5
+188.30206 2312.3
+188.32169 1442.6
+188.33478 1648.3
+188.35207 1688.6
+198.90793 2102.9
+199.10318 1498.1
+199.19545 1717.6
+199.25879 2306.4
+199.28008 4307.0
+199.29149 3634.0
+199.30592 3587.6
+199.37680 2503.1
+201.26547 1673.7
+213.93672 1465.7
+215.90993 1558.6
+229.84818 1687.4
+233.12859 21478.4
+243.75507 1443.0
+243.95239 1457.5
+255.10881 12713.9
+255.28008 2089.1
+261.12292 6068.9
+261.61874 4038.6
+270.13278 7280.5
+270.63501 1922.4
+271.26880 1984.2
+271.69211 1289.1
+271.70248 1581.4
+272.13562 19474.0
+273.77762 1463.7
+275.12488 6812.4
+275.61768 6098.4
+283.63785 16208.2
+284.12997 42133.1
+284.63150 13204.4
+285.13123 2871.8
+285.16711 9745.5
+286.14090 2244.9
+292.64316 123111.1
+293.14471 34926.1
+293.64621 6212.4
+298.12650 1878.8
+303.17801 4779.5
+305.23303 1540.0
+310.15082 4134.6
+313.12375 2461.2
+316.64529 8004.2
+317.14450 1891.7
+321.63763 7762.4
+322.13031 4238.1
+330.37405 1446.8
+330.64240 57097.9
+331.14426 19432.4
+331.64294 2555.3
+336.86057 1679.3
+341.16949 11423.5
+341.68472 25781.1
+342.18665 8844.3
+366.13168 1693.1
+369.18912 3017.7
+370.16159 2922.5
+370.65564 3102.6
+372.20166 2535.5
+372.98209 1575.9
+379.16864 45345.0
+379.66974 15753.0
+380.16992 2854.0
+382.18420 1991.7
+383.16827 2796.4
+385.20468 2276.3
+386.21469 6620.0
+391.21936 19906.9
+391.72180 8402.6
+392.16614 3297.6
+392.22278 3032.4
+395.17889 2339.8
+396.18707 2383.3
+397.18423 2618.8
+399.87323 17284.1
+400.19312 20897.6
+400.54077 3887.0
+400.87479 2089.0
+401.19659 2516.6
+414.20956 24516.5
+415.21307 3595.7
+416.26239 15458.3
+422.70065 7324.5
+423.20291 4844.4
+427.51459 1826.8
+431.74054 1470.3
+435.92719 2368.0
+437.68347 1468.0
+438.20898 8575.6
+439.21243 1980.0
+440.75394 19881.9
+441.25568 7734.4
+441.75766 3525.6
+446.70325 16044.2
+447.20605 7239.3
+447.70541 2077.7
+451.69647 6141.6
+452.18512 7869.9
+452.68350 2731.2
+457.21609 7680.5
+457.71555 2385.3
+460.70035 73474.2
+461.20200 42829.0
+461.70242 14260.0
+462.20737 2133.6
+476.27219 68391.5
+476.77310 28485.9
+477.27533 9698.5
+477.78101 1829.9
+480.57364 4024.5
+480.90793 3887.4
+481.24112 2347.3
+481.57294 2047.8
+482.63065 2027.8
+485.44449 5807.3
+485.64636 2999.5
+485.77750 4277.4
+486.01575 5355.9
+486.22983 3358.1
+486.34445 2955.4
+486.36777 2542.4
+486.52719 5219.6
+486.57837 1187778.3
+486.64105 3463.7
+486.86478 5054.9
+486.91223 980168.4
+486.98105 1875.2
+487.00797 2573.5
+487.14630 7926.7
+487.24585 535201.8
+487.28830 4685.1
+487.47943 6700.5
+487.51233 4341.3
+487.57965 219866.8
+487.62540 2125.3
+487.71539 6439.3
+487.81314 3252.9
+487.84875 2633.5
+487.91354 60912.9
+487.99936 1870.2
+488.05072 4941.5
+488.14813 2119.2
+488.23846 24115.8
+488.38580 3277.1
+488.47949 2005.2
+488.58258 3512.0
+488.72189 5987.2
+489.22284 4356.6
+494.26962 2422.3
+501.24115 50975.8
+501.48608 1656.0
+502.24350 11341.9
+507.18997 22520.6
+508.19373 4174.4
+511.22595 2873.0
+512.20856 4725.2
+519.87836 1493.9
+529.23553 9773.6
+530.26135 2376.8
+531.23450 2598.6
+532.51770 5779.5
+533.78357 6023.9
+534.28357 2972.3
+545.25122 5615.5
+545.30377 35007.1
+546.30499 7128.9
+547.31274 3322.5
+570.64587 1618.4
+578.22705 4324.3
+581.11163 1608.3
+581.24506 1993.7
+583.73499 8926.7
+584.23425 3832.6
+584.73688 2368.6
+590.29987 5141.0
+590.80554 2593.3
+591.29944 2468.4
+596.28009 1983.3
+599.30554 404208.8
+599.80664 268889.8
+600.30707 118912.1
+600.80731 40749.2
+601.30817 10852.2
+614.02826 1672.1
+617.00781 3599.9
+617.34259 2874.7
+619.25201 14756.6
+619.75452 6292.4
+632.28290 5786.0
+642.26569 8002.8
+651.31329 2622.5
+653.31165 3586.8
+658.48956 2969.2
+659.39136 2894.9
+660.27686 664480.8
+660.34021 3237.8
+661.16199 3792.7
+661.27948 232685.2
+662.07404 3024.1
+662.27954 64891.9
+663.28021 13988.5
+664.28339 1863.7
+668.78638 7087.1
+669.28491 4688.4
+672.33160 2106.0
+676.62061 2999.9
+677.29626 10094.0
+678.30188 4583.9
+680.83704 250004.9
+681.33875 177401.5
+681.83936 84521.0
+682.31555 10495.6
+682.36859 61026.1
+682.70593 1804.4
+682.84271 9290.8
+683.36713 29101.5
+684.36829 5303.6
+698.28839 2907.0
+706.33752 2758.1
+706.66571 4240.4
+707.00983 2907.7
+711.31055 1895.5
+720.35846 7488.3
+720.85052 4267.2
+721.35626 3670.5
+726.80511 1660.5
+726.85291 1648.0
+727.28619 5584.4
+727.65417 3402.2
+727.78442 5444.3
+728.15076 1924.2
+728.33521 4464.8
+728.83655 4089.0
+729.02246 2668.4
+729.24689 4080.3
+729.36401 1356303.1
+729.51111 2545.5
+729.86450 1151038.8
+730.36499 601219.6
+730.86646 226072.6
+731.07507 3205.8
+731.36707 65394.0
+731.45099 6808.9
+731.58777 4252.2
+731.86768 15376.7
+731.95380 5353.8
+732.36731 4471.2
+732.44983 3019.6
+732.85443 2628.4
+738.01373 1711.6
+776.36560 6389.2
+777.36487 4100.5
+778.31940 19142.6
+779.32159 7175.0
+781.43085 64380.5
+782.43323 25531.7
+783.43829 4337.3
+789.35297 3169.6
+791.31494 4755.8
+794.88483 8365.5
+795.38654 9098.9
+795.62500 4003.4
+795.88550 3656.4
+796.38477 2260.7
+880.49768 11631.7
+881.50269 4678.9
+895.43573 2311.6
+902.38861 2012.2
+903.37622 1665.9
+913.42249 2786.0
+920.39288 52295.3
+921.39661 26815.3
+922.39496 9220.6
+923.39954 3117.0
+951.53748 9936.7
+952.54065 3995.7
+1019.69354 2701.1
+1023.49799 2094.5
+1042.44885 2858.9
+1043.13782 1673.8
+1066.56531 10323.4
+1067.56384 4995.1
+1068.57764 1641.2
+1197.61340 2540.0
+1198.15942 9576.9
+1226.27332 1681.5
+1246.77332 1764.7
+1283.62097 1900.5
+1287.76294 1639.0
+1356.00586 1708.9
+1357.62280 1683.2
+1426.96960 1651.9
+1525.28040 2478.2
+1667.16907 1928.5
+1774.98328 1439.7
+1775.17725 1611.7
+1877.56177 2331.1
+1878.61816 2182.2
+1879.49121 52981.6
+1881.59900 1997.7
+1906.97620 19105.9
+1907.21997 5626.6
+1930.42944 2558.9
+S	2075	2075	1879.9358246
+Z	2	3758.024
+Z	3	5636.532
+515.47223 554.6
+532.51501 2261.1
+549.12927 933.4
+556.89465 711.2
+630.37457 796.8
+676.62860 656.2
+795.59857 701.2
+811.20087 568.4
+821.53674 642.4
+855.32275 653.2
+858.02393 933.4
+1057.21948 807.6
+1198.15222 3331.5
+1272.68164 627.1
+1349.85706 590.9
+1551.35132 801.6
+1776.88684 1001.4
+1870.68787 663.7
+1878.27222 908.3
+1879.49146 19092.1
+1906.96130 6958.4
+1930.48706 1104.7
+S	2077	2077	530.2534046
+Z	4	2116.98232
+135.92168 508.5
+139.23488 681.6
+141.79962 545.8
+142.04706 618.3
+143.35265 530.3
+144.06424 608.5
+144.38286 525.0
+149.48135 547.8
+154.49725 573.3
+157.71941 662.8
+159.07379 605.9
+165.76775 880.8
+174.63867 671.3
+182.52147 541.6
+188.18854 505.6
+188.19356 493.3
+188.23804 540.7
+188.27657 2195.0
+188.28844 2354.6
+188.29941 1623.4
+188.31148 1607.5
+193.96359 611.2
+198.90509 825.5
+199.18678 905.0
+199.26337 619.9
+199.27420 1233.4
+199.28424 2268.9
+199.29436 2120.0
+199.34735 621.7
+199.39180 960.3
+206.48396 682.9
+214.67943 494.9
+225.90297 631.4
+233.12842 4668.7
+234.12900 751.1
+239.11432 637.0
+255.10869 3318.8
+258.10730 583.0
+261.12292 1651.1
+270.13211 2458.0
+272.13541 4494.0
+275.12357 1767.5
+275.61612 1216.2
+283.63721 3040.3
+284.12943 10989.3
+284.63098 2372.9
+285.16635 2367.0
+292.64273 26689.8
+293.14429 8718.7
+293.64444 1722.3
+303.17676 682.3
+308.64120 554.7
+308.88037 680.2
+310.15060 651.2
+316.64487 1764.8
+321.63779 1508.1
+322.13968 745.3
+330.64191 12842.0
+331.14322 4768.1
+341.16794 917.6
+341.68356 4234.2
+342.18600 2273.2
+342.68478 768.0
+343.77850 619.5
+350.29761 839.9
+365.67010 627.9
+370.16281 1108.1
+372.19946 872.0
+378.13821 727.5
+379.16830 9670.4
+379.66949 3967.4
+380.16730 1137.6
+383.16495 821.3
+386.21454 1406.3
+391.21866 4979.2
+391.72070 1919.0
+395.17914 835.3
+397.18524 815.2
+399.87274 4223.5
+400.19186 4899.1
+400.53775 1097.9
+401.19821 711.8
+402.00555 550.1
+414.20895 6326.1
+415.21475 887.0
+416.26086 2239.3
+422.70218 1189.5
+423.20084 607.4
+427.53546 573.4
+438.21024 1920.3
+440.75372 3201.0
+441.25461 2311.7
+446.70294 2513.6
+447.20456 1436.4
+451.69574 835.2
+452.18246 1141.8
+452.68201 881.1
+453.52850 600.8
+457.21335 970.9
+457.71631 781.3
+460.69949 12007.4
+461.20114 7537.9
+461.70038 2703.8
+462.20401 859.8
+465.70840 748.2
+476.27158 11581.4
+476.77448 6740.0
+477.27377 2240.2
+480.90891 872.2
+485.77899 616.0
+486.01410 1142.2
+486.57755 186259.4
+486.86069 645.3
+486.91171 193020.5
+487.13815 781.3
+487.24527 119011.5
+487.47415 1140.5
+487.57907 49856.3
+487.71863 700.0
+487.80505 905.0
+487.91370 14243.0
+488.05795 767.8
+488.24210 2895.9
+488.72318 1600.2
+492.29898 582.1
+501.24036 12783.9
+502.24268 3539.2
+507.18918 3628.9
+508.19189 1015.2
+509.19989 966.3
+512.20508 1140.9
+515.21100 815.2
+523.56287 659.4
+529.23474 1761.4
+532.44580 682.1
+532.53363 1928.4
+535.15887 599.6
+545.24994 883.8
+545.30219 3649.0
+546.30420 1401.2
+583.73090 839.6
+590.30072 857.3
+599.30450 56439.9
+599.55145 621.5
+599.80597 44160.9
+600.30652 24157.0
+600.80664 7181.1
+601.30701 2880.5
+610.28583 546.8
+619.24799 1115.6
+619.74817 959.5
+620.25751 600.6
+641.59747 680.6
+642.26636 861.0
+653.30756 938.5
+660.27557 95532.2
+661.27844 38253.3
+662.27710 12163.3
+663.27722 3001.6
+668.78644 738.3
+676.63513 1235.7
+677.29230 1002.4
+680.54266 743.4
+680.83618 28993.5
+681.33746 29815.1
+681.83820 15936.4
+682.32318 3526.7
+682.37488 4526.4
+682.84009 2026.3
+683.36359 2822.7
+720.35645 1532.4
+729.36279 156593.9
+729.86359 165867.5
+730.36401 95963.8
+730.86414 42146.4
+731.36383 8537.9
+731.45306 702.8
+731.86615 2028.3
+741.41547 571.1
+776.36359 871.6
+778.31836 3555.5
+779.32062 1345.4
+781.42975 4724.0
+782.43353 2856.4
+791.30884 802.1
+795.38391 1012.9
+795.62189 1133.4
+796.38318 699.7
+920.39246 4949.9
+921.39026 3563.8
+922.39673 905.6
+949.47815 568.2
+1057.25562 652.8
+1106.77197 511.8
+1198.19580 3181.2
+1368.70239 558.1
+1464.62463 637.2
+1556.57129 593.6
+1666.79089 583.7
+1756.97888 569.4
+1776.96423 1045.8
+1818.75964 553.7
+1878.18591 611.0
+1878.98840 1243.1
+1879.09277 1100.8
+1879.51843 20048.7
+1879.92651 1027.9
+1880.05029 1398.4
+1880.60522 677.8
+1907.13501 7421.9
+1918.91455 658.1
+1930.49060 914.0
+1972.62109 722.3
+S	2078	2078	531.0048246
+Z	4	2119.988
+137.01756 51091.0
+139.29431 48927.9
+148.39571 48361.4
+159.82893 44400.0
+181.37798 48444.1
+188.18228 56443.6
+188.22313 61440.4
+188.24515 51787.1
+188.25652 65796.6
+188.26967 64124.7
+188.28354 98514.2
+188.29903 49561.2
+188.31038 52755.4
+188.32195 67286.4
+188.33833 67289.7
+188.35014 69730.5
+198.90340 91332.5
+199.10678 57047.1
+199.17204 63861.8
+199.21973 58807.2
+199.25287 67544.5
+199.27126 122248.1
+199.27936 187825.0
+199.29543 95386.8
+199.30510 80428.0
+199.31345 115690.3
+199.36818 53854.2
+199.37691 62546.2
+199.40308 50658.3
+199.41103 46216.9
+233.12810 111359.3
+234.80151 52646.6
+235.17325 55908.8
+238.70952 50117.1
+240.50594 44618.9
+249.14426 47712.2
+255.10829 109489.9
+270.13190 125774.9
+271.68091 66073.5
+272.13467 213988.0
+272.52026 54911.4
+274.61304 45276.8
+275.12204 74475.2
+275.61960 69613.4
+283.63696 181948.5
+284.12915 654011.1
+284.63116 92047.3
+292.64224 1422403.3
+293.14380 355279.1
+308.87985 53668.4
+316.64484 111780.9
+330.64163 626284.6
+331.14371 126169.6
+341.68286 124837.3
+379.16760 596246.3
+379.66873 80572.8
+391.21915 156483.1
+391.71964 79380.5
+399.87119 307510.1
+400.19193 298058.1
+414.20868 316607.1
+415.21002 72120.0
+423.20111 73645.3
+440.75128 154514.2
+446.70087 142755.1
+447.20447 79726.1
+452.18356 91741.0
+460.69910 986221.4
+461.20090 334405.8
+461.70358 84794.8
+476.27045 408842.4
+480.90054 55605.3
+486.57672 10992408.0
+486.91104 8550034.0
+487.12830 65545.5
+487.24469 4429028.5
+487.57883 1272613.5
+487.91257 383119.7
+488.22485 138234.4
+488.72183 94818.7
+489.22244 66622.7
+501.24014 512359.6
+504.81207 56742.8
+507.18869 153760.0
+517.21204 92519.3
+532.53607 196320.0
+545.30267 78449.6
+549.07953 59722.1
+583.73389 83245.8
+599.30377 2780236.3
+599.80505 1615305.5
+600.30627 513091.9
+600.80652 186984.5
+619.25403 86614.7
+650.17059 51606.4
+660.27521 4590056.5
+661.27795 1396651.0
+662.27570 340262.7
+663.27264 72455.3
+676.63916 97694.0
+680.83508 1378432.6
+681.33783 986156.8
+681.83771 384912.1
+682.36987 205964.9
+729.36194 8870987.0
+729.86285 7169132.5
+730.36414 3534616.3
+730.86487 865034.6
+731.36444 209178.7
+778.32001 112985.7
+781.43188 114530.3
+794.89050 73391.3
+795.61200 97382.8
+920.38892 171173.0
+921.39465 75610.4
+977.90112 64921.1
+1082.39453 62170.6
+1194.09326 54429.8
+1198.19922 299607.1
+1249.62378 59364.2
+1382.32397 50004.1
+1459.55469 50938.3
+1525.29700 62485.1
+1529.86804 52698.3
+1587.12756 52601.7
+1599.04529 53462.9
+1872.71875 67758.3
+1876.39941 81683.1
+1879.13196 281884.1
+1879.53320 1734630.9
+1879.87878 260815.0
+1880.67944 67852.5
+1907.06519 654229.1
+1930.46130 71840.5
+S	2079	2079	1880.0088246
+Z	3	5636.751
+Z	2	3758.17
+532.49426 2047.2
+534.09698 516.5
+544.26257 813.0
+546.04108 717.4
+592.61511 686.6
+630.39221 736.9
+635.67578 595.2
+670.76910 624.9
+676.63544 844.8
+691.23456 725.9
+794.39587 615.7
+795.61292 1082.5
+866.15314 513.3
+931.09247 560.6
+1057.25452 1003.5
+1198.11438 3391.2
+1240.53918 794.9
+1480.08459 536.6
+1511.73560 800.4
+1525.39844 1151.5
+1572.92212 591.3
+1698.52063 766.6
+1776.98181 935.2
+1877.49536 845.6
+1878.42712 981.5
+1878.88574 811.2
+1879.54419 20420.9
+1879.85706 1752.5
+1880.19031 1090.1
+1907.05811 7508.2
+1930.58289 760.6
+1975.48584 608.8
+S	2081	2081	530.2532821
+Z	4	2116.98183
+137.05566 551.3
+137.29794 815.2
+141.08948 567.8
+146.93039 770.0
+157.61310 773.2
+162.68906 608.8
+165.76642 683.3
+175.88666 535.9
+188.21457 692.0
+188.25453 1224.9
+188.28319 2046.5
+188.29723 2275.9
+188.31734 1321.3
+188.35500 692.6
+199.20721 808.3
+199.27443 986.2
+199.28540 1020.2
+199.29355 1677.2
+199.30443 1367.2
+199.36975 741.5
+199.39423 654.2
+199.40361 1256.4
+201.12596 585.3
+233.12843 4619.8
+236.80458 599.1
+244.19350 781.3
+250.58708 657.5
+255.10771 2449.3
+258.10526 682.0
+261.61783 784.4
+265.16681 552.4
+270.13147 2126.1
+271.69305 651.3
+272.13504 4599.2
+273.13855 721.1
+274.63058 654.3
+275.12463 1338.2
+275.61795 1010.9
+280.19864 806.9
+283.63687 3144.9
+284.12949 8558.3
+284.63104 2677.6
+285.16687 1418.9
+292.64258 20795.6
+293.14429 7233.8
+293.64645 1352.1
+315.17020 504.2
+316.64417 1887.4
+321.63602 1481.5
+322.12607 880.5
+330.64182 9146.3
+331.14316 4381.5
+331.63852 775.5
+341.16968 2411.2
+341.68387 4002.8
+342.18542 2013.6
+342.69006 807.3
+372.11862 662.1
+372.19675 974.7
+379.16782 9527.8
+379.66885 4281.0
+380.17004 972.2
+381.38080 938.8
+382.18439 851.1
+383.16711 630.2
+391.21854 3046.0
+391.72043 1135.8
+396.18021 658.5
+399.87222 3507.8
+400.19247 4575.8
+400.20648 3577.4
+400.54272 1414.1
+401.19708 635.3
+414.20886 5912.2
+416.26077 1410.8
+422.69955 1339.8
+425.55182 548.5
+427.56787 666.5
+438.21106 1799.9
+440.75214 3214.1
+441.25192 1737.7
+441.75592 705.1
+446.70386 2116.2
+447.20135 1311.3
+451.69312 996.8
+452.18274 939.7
+452.68750 740.2
+457.21701 796.5
+457.71332 1018.5
+460.69925 11615.7
+461.20102 6282.8
+461.70029 2796.6
+462.19955 834.3
+472.32990 621.3
+476.27112 10602.2
+476.77350 6617.1
+477.27338 1444.6
+477.77246 786.9
+480.57071 1130.2
+486.35803 776.7
+486.49316 532.9
+486.50815 559.0
+486.57718 168513.7
+486.91141 173499.3
+487.14850 1031.8
+487.24487 101450.8
+487.48083 1080.9
+487.57889 42304.7
+487.71515 1122.6
+487.91315 11101.2
+488.23947 2451.7
+488.71887 1122.5
+501.23965 10330.4
+502.24261 3287.5
+503.24655 924.5
+507.18848 3229.9
+508.19241 1033.9
+512.20087 812.4
+529.23077 1266.1
+532.50592 1984.2
+545.24829 984.9
+545.30261 3547.2
+548.12854 622.7
+599.30426 48243.2
+599.80548 42044.1
+600.30609 20696.6
+600.80695 6266.8
+607.43738 541.8
+617.00317 779.6
+619.24805 1097.9
+630.44434 933.3
+642.26715 1187.6
+646.78772 656.7
+660.27521 82225.0
+661.27789 30464.4
+662.27692 11523.8
+663.27777 1955.5
+669.28992 707.9
+676.63422 1075.0
+677.28998 758.9
+680.83575 21609.9
+681.33704 24672.4
+681.83765 12912.5
+682.32440 3033.5
+682.37634 3162.8
+682.83630 935.7
+683.36731 3138.6
+712.72607 554.4
+713.88770 618.6
+728.33185 648.1
+728.83429 732.3
+729.36237 136524.8
+729.86310 137487.0
+730.36389 84428.5
+730.86475 31248.2
+731.17694 761.1
+731.36456 10450.4
+731.45081 706.8
+731.86499 1768.4
+739.08801 565.1
+778.31750 2390.3
+779.31708 1427.3
+781.42682 3010.2
+782.43146 1537.2
+791.31085 953.0
+795.38678 1250.0
+795.52655 574.9
+795.61694 863.7
+796.38666 808.2
+837.75189 647.4
+839.64185 557.9
+920.39014 3696.8
+921.39343 1861.9
+1087.75061 608.4
+1187.79614 581.0
+1187.90784 552.6
+1198.13025 3169.8
+1616.54163 666.7
+1691.89343 633.8
+1776.95837 661.0
+1835.09534 672.4
+1877.85962 651.7
+1878.99609 1175.3
+1879.51563 20104.4
+1880.01489 918.2
+1881.28857 680.2
+1907.08838 7528.2
+1930.72876 770.7
+1932.07458 692.8
+S	2082	2082	531.0048246
+Z	4	2119.988
+149.75880 29427.2
+151.14638 25430.0
+164.50702 25221.0
+168.68298 27139.4
+171.73988 29463.2
+187.70361 27694.0
+188.18066 24396.2
+188.20366 28093.5
+188.22568 30228.9
+188.26901 47387.0
+188.29630 32881.3
+188.31656 34088.4
+188.33144 37365.7
+188.36440 36582.9
+188.38902 33617.4
+198.90720 41937.8
+199.17705 29926.6
+199.22433 51288.5
+199.26585 68755.1
+199.27654 68958.1
+199.29605 79743.4
+199.30734 62795.2
+199.32416 39311.2
+199.35019 30276.4
+199.37563 35762.9
+221.05490 29302.2
+226.53046 29937.7
+233.12799 40324.2
+255.10800 37888.8
+270.13116 59621.9
+271.99057 33952.3
+272.13474 115676.0
+275.61511 44814.5
+283.63785 43320.6
+284.12894 236490.3
+284.63123 61925.7
+285.16696 68526.4
+292.64230 706323.3
+293.14380 183671.6
+309.62854 29351.1
+311.52539 35042.0
+313.20111 29653.3
+316.93423 28810.3
+321.63644 58132.5
+330.64151 300972.4
+331.14264 84419.6
+341.16739 41521.4
+341.68365 81333.8
+342.29535 38630.2
+350.29166 40205.8
+379.16760 273070.7
+379.66867 55286.0
+391.21994 74811.1
+399.87213 109369.7
+400.19168 120855.0
+400.54068 36252.2
+414.20892 163234.8
+427.57217 39904.2
+438.20929 45918.8
+440.75012 79923.6
+446.70059 83078.2
+451.69501 39324.1
+452.68625 37718.1
+460.69925 344738.2
+461.20032 186485.1
+461.69650 58673.9
+462.20352 40050.3
+476.27133 175547.6
+485.77618 34618.5
+486.57684 5248592.0
+486.91119 3729017.0
+487.14404 38604.5
+487.24469 1994394.1
+487.57816 620564.0
+487.70984 36146.7
+487.91180 159848.0
+488.22125 69636.9
+501.24017 237501.1
+502.24072 50479.2
+507.18948 42984.3
+508.18134 30353.5
+529.23645 33903.2
+532.50781 95350.6
+549.19104 38979.6
+599.30408 1438233.4
+599.80554 693441.7
+600.30646 329875.3
+600.80414 74280.5
+660.27533 2143015.8
+661.27808 622160.1
+662.27570 134994.2
+663.28809 40978.7
+676.63965 59212.2
+680.83533 685837.4
+681.33801 504791.2
+681.83856 205800.8
+682.37262 63135.3
+729.36224 4077699.3
+729.86322 3339701.5
+730.36426 1729522.9
+730.86456 488143.4
+731.36499 137790.3
+731.45233 38624.9
+731.96313 39134.4
+743.42950 32412.5
+778.32251 57867.2
+791.30798 34095.0
+795.36377 34693.7
+795.62152 54014.9
+836.28992 28566.0
+920.38959 109458.4
+921.38751 31812.2
+940.98303 38722.2
+1155.96643 32391.3
+1187.93188 32846.0
+1198.13525 156487.2
+1667.12158 44966.2
+1879.17993 116895.6
+1879.53894 1006276.6
+1879.89124 133697.3
+1880.49756 43110.2
+1880.78479 37618.7
+1880.99939 28778.7
+1907.11694 385928.1
+1930.77246 65127.7
+1948.77563 31763.8
+1972.03516 32845.2
+S	2083	2083	1879.92940793
+Z	3	5636.513
+Z	2	3758.011
+532.53192 1612.0
+549.84100 546.0
+556.76483 545.8
+559.50140 631.5
+669.62927 536.6
+670.53308 654.5
+676.65210 834.9
+676.82031 609.4
+697.90045 604.2
+712.69263 614.7
+795.62323 1065.3
+829.08411 611.7
+893.59314 656.1
+950.72028 596.7
+1019.72357 718.3
+1044.69519 650.6
+1180.87024 635.8
+1198.18933 3541.8
+1257.43945 667.8
+1558.82593 716.1
+1562.70837 640.4
+1870.40186 607.6
+1878.80627 737.4
+1879.13098 2188.3
+1879.56921 17944.8
+1880.24512 1099.0
+1880.45325 772.5
+1906.41455 723.2
+1906.76660 817.9
+1907.06567 7452.8
+1918.78943 692.8
+1930.65210 865.6
+S	2085	2085	530.2585321
+Z	4	2117.00283
+150.15054 4210.7
+157.07095 4403.8
+165.76401 4247.2
+176.55646 3936.0
+179.18336 4424.2
+182.80392 4999.3
+188.25464 8757.7
+188.27119 13503.0
+188.28413 15646.1
+188.29929 13403.8
+188.32091 9369.4
+188.36971 4490.0
+199.18922 5531.8
+199.22571 6128.1
+199.25136 5149.8
+199.26274 7038.9
+199.27859 4884.1
+199.28606 15497.3
+199.30386 4816.1
+199.32050 5901.9
+199.38394 4401.4
+199.39140 3763.3
+199.41455 4551.8
+222.19955 4009.7
+233.12819 17169.8
+236.48505 3662.3
+240.25117 3753.4
+245.05191 4765.7
+250.85040 3937.3
+255.10898 12005.5
+261.12274 5624.0
+261.62003 4770.1
+270.13159 14109.4
+271.65973 5102.7
+272.13464 24659.3
+275.12360 10678.0
+277.12634 4283.9
+283.63776 17995.0
+284.12921 59904.7
+284.63040 13417.3
+285.16650 14880.4
+289.27374 3589.9
+292.64258 152268.8
+293.14462 38061.6
+293.64490 4768.9
+308.94220 4464.6
+315.06702 5255.7
+316.64355 8374.4
+317.14206 5060.8
+321.63699 19085.4
+322.12753 9225.0
+330.64182 68676.7
+331.14328 20968.2
+331.84387 4565.5
+341.16916 12854.9
+341.68466 30527.4
+342.18600 7561.5
+355.60739 4238.2
+370.16208 4897.9
+370.65219 5555.0
+379.16797 59069.4
+379.66910 22390.7
+382.18420 6067.1
+391.21893 27519.1
+391.71994 7617.2
+395.17920 7609.0
+399.87207 31980.4
+400.19208 24818.0
+400.54053 7179.8
+414.20895 39281.5
+416.25992 10223.1
+421.47125 3830.7
+422.70090 8730.3
+423.20166 6654.1
+438.20975 14546.7
+440.75433 18941.9
+441.25452 5626.3
+446.70242 18374.5
+447.20197 7512.5
+451.69699 5979.0
+452.18387 9828.7
+460.69943 99553.9
+461.20114 36413.0
+461.70148 11410.0
+462.20016 4099.3
+476.27130 74140.9
+476.77234 30575.3
+477.27380 5580.2
+480.57407 7189.2
+482.57288 5023.1
+482.71024 5215.5
+485.44196 7949.5
+486.01797 5078.2
+486.10461 4238.5
+486.57721 1317541.5
+486.91138 984316.2
+487.14624 6546.3
+487.24524 482399.7
+487.47345 4585.3
+487.57877 164562.6
+487.62210 5817.9
+487.71112 8778.6
+487.91293 39260.8
+488.05255 5993.1
+488.22070 13168.4
+495.22269 4744.9
+501.24023 69003.4
+502.24390 13034.0
+507.18958 21087.7
+508.19720 5956.4
+508.70068 4261.6
+511.22031 5026.8
+512.20575 11128.6
+532.54211 12932.8
+534.46124 3979.0
+545.30328 16298.5
+546.30048 4493.2
+546.57428 4051.5
+549.21954 4586.3
+573.24677 5522.0
+599.30457 356153.3
+599.80579 206964.4
+600.30634 95385.7
+600.80536 26241.3
+600.85217 4395.8
+601.30011 6474.5
+617.00006 4691.5
+619.25421 7294.1
+631.46472 4258.3
+642.26392 8752.4
+660.27570 528138.0
+661.27844 159999.8
+662.27740 44616.5
+663.27734 6931.7
+668.78638 5787.2
+671.27844 5073.9
+676.64258 8856.9
+680.83588 167025.8
+681.33771 127439.1
+681.83856 57910.4
+682.30933 6742.5
+682.36725 34761.7
+683.36407 14772.2
+691.19995 3682.6
+720.35852 7746.7
+727.28778 5063.3
+728.83899 6003.5
+729.36267 1060360.9
+729.86353 779161.3
+730.36407 379261.0
+730.86517 129514.3
+731.21814 4625.3
+731.36621 24459.3
+731.45178 8323.6
+731.87036 5167.8
+731.95667 6039.6
+778.31519 13523.8
+779.32361 7105.1
+781.43231 10819.8
+782.42999 5780.1
+791.31415 5783.1
+791.39191 3839.0
+794.87518 6912.7
+795.61737 8120.1
+796.37360 4377.4
+815.25916 4940.5
+872.89313 4964.8
+880.51636 4968.6
+888.26904 4032.7
+920.39478 21325.7
+921.39532 10285.9
+995.46259 4351.6
+1057.24744 5757.3
+1061.63147 3881.4
+1177.41968 4214.5
+1188.13013 5877.0
+1198.21509 22476.0
+1228.60999 3969.8
+1316.11536 3747.7
+1316.93018 3797.4
+1377.32336 3755.3
+1489.72571 6228.1
+1490.06836 4087.9
+1525.57532 6523.6
+1667.20630 4592.9
+1720.60474 4076.6
+1856.77490 4387.6
+1872.00476 4809.4
+1878.31262 5277.8
+1878.59375 9115.3
+1879.09448 7627.8
+1879.53931 133291.3
+1880.22583 10831.5
+1880.51453 6465.5
+1907.09863 52072.1
+1930.81897 9597.8
+S	2086	2086	531.2595746
+Z	4	2121.007
+135.55623 564.0
+137.30801 742.5
+143.54218 738.2
+160.04604 554.9
+181.94763 481.6
+182.80560 677.4
+188.24706 997.8
+188.26443 1259.9
+188.27695 1908.7
+188.29344 2080.3
+188.30688 1587.5
+188.31587 1170.6
+188.33220 747.4
+198.90514 659.3
+199.18549 990.8
+199.24400 722.5
+199.25790 835.6
+199.27214 1097.1
+199.28363 2858.0
+199.31119 817.3
+199.32335 685.5
+199.38300 1102.9
+213.08684 877.9
+227.05817 625.2
+230.66644 582.0
+231.36432 600.7
+233.12834 2839.4
+233.60446 997.0
+238.69983 716.3
+241.08197 705.3
+255.10841 3369.5
+261.12183 779.7
+261.61728 842.8
+270.13107 1229.9
+272.13519 4496.8
+272.28958 670.5
+275.12442 1860.6
+275.61594 688.6
+283.63708 3050.6
+284.12936 11094.8
+284.63126 4130.9
+285.16681 1866.3
+292.46307 622.8
+292.64264 27799.9
+293.14447 9817.0
+293.64612 1823.7
+306.97198 613.4
+310.42297 654.6
+316.64532 1001.1
+321.63602 1776.3
+322.13101 687.2
+322.14026 709.2
+330.64178 11517.1
+331.14279 4297.4
+331.64435 711.4
+340.13300 554.5
+341.16803 2207.8
+341.68326 2979.8
+342.18497 1392.3
+355.06619 562.4
+360.43542 692.6
+370.16312 746.3
+372.19763 927.5
+379.16800 10458.1
+379.66946 5123.7
+380.17072 1102.9
+381.40637 797.5
+382.18195 974.4
+383.16885 738.1
+386.21481 887.5
+391.21848 3880.0
+391.71985 2241.1
+396.18073 631.2
+399.87262 5055.7
+400.19232 5438.8
+400.54138 2211.3
+403.27478 622.4
+414.20926 7724.6
+415.21310 1357.2
+416.25977 1788.6
+420.26236 675.8
+422.69937 1240.8
+438.20889 2703.5
+440.75342 3297.4
+441.25363 1650.3
+441.75522 772.5
+445.41309 589.0
+446.70245 2656.3
+447.20322 2728.5
+449.44171 488.2
+449.45718 491.4
+451.69275 1472.6
+452.18326 1508.7
+452.68729 1376.0
+457.21347 754.9
+460.69968 12573.2
+461.20111 7577.0
+461.70114 4357.8
+462.20264 969.8
+476.27197 8066.4
+476.77310 7102.9
+477.27377 1446.1
+480.71146 646.6
+480.90848 889.6
+485.43442 658.7
+485.77258 761.8
+486.02029 788.7
+486.57761 175418.4
+486.91183 195724.1
+487.13385 1846.9
+487.24539 125521.0
+487.46841 1051.1
+487.57925 53119.5
+487.71686 901.4
+487.79742 853.5
+487.91333 13339.3
+488.05307 1496.3
+488.14166 586.5
+488.24216 3346.7
+488.72018 1187.3
+501.24011 11864.2
+502.24402 3343.2
+503.24088 795.4
+507.18927 2835.8
+512.20673 1654.8
+512.72394 1095.2
+513.22363 922.3
+514.20764 876.4
+529.23865 1146.6
+532.48297 1899.4
+540.09705 614.3
+545.30273 2598.7
+548.18237 780.9
+561.47186 694.8
+590.87622 569.1
+599.30487 47562.4
+599.80609 42451.5
+600.30670 20120.5
+600.80707 8317.1
+601.30811 1967.6
+619.25354 905.5
+619.75250 1602.8
+621.25110 599.0
+631.37592 790.3
+642.26733 1528.0
+658.48450 850.6
+660.27582 87240.7
+661.27863 39110.0
+662.06219 687.2
+662.27765 13057.8
+663.27771 2554.0
+668.78418 804.6
+676.62860 1211.0
+680.83588 24210.7
+681.33789 23908.0
+681.83862 14450.5
+682.32751 3151.5
+682.37805 2735.3
+682.83850 1940.6
+683.36761 2158.7
+684.36407 629.9
+689.75824 692.5
+727.13641 702.8
+727.26221 982.7
+727.77545 625.7
+729.36310 143573.8
+729.86383 169945.8
+730.36414 98394.5
+730.86493 42898.0
+731.36542 11647.4
+731.46344 970.8
+731.86279 2710.5
+731.94855 1396.9
+733.12115 678.1
+778.32062 2243.7
+779.32227 990.2
+781.43103 2661.0
+782.43640 1506.9
+795.37781 970.8
+795.61249 1005.0
+920.39160 4043.9
+921.39264 2555.6
+922.39624 1315.4
+926.37854 528.7
+1019.66577 760.9
+1084.23401 550.7
+1110.77454 565.0
+1140.47437 666.5
+1147.52148 555.6
+1148.64172 798.3
+1188.16760 816.5
+1197.93665 604.6
+1198.08057 3166.4
+1198.24194 563.8
+1251.93591 620.9
+1446.08240 702.1
+1478.33496 671.3
+1489.79651 620.2
+1525.62500 829.3
+1865.28503 735.6
+1870.27844 613.9
+1875.67444 700.4
+1876.19336 781.6
+1878.88318 640.3
+1879.49414 20151.3
+1880.16968 813.9
+1907.03967 7839.0
+1930.86768 1133.9
+1934.66284 604.3
+S	2087	2087	821.782991267
+Z	2	1641.718
+Z	3	2462.074
+227.09067 688.8
+246.12212 1115.7
+255.30232 624.2
+263.35516 555.2
+269.50830 559.9
+271.50986 711.5
+272.08719 685.7
+274.11783 3029.1
+284.49109 648.2
+305.16034 8699.9
+306.16275 828.5
+322.18698 911.6
+324.36276 702.5
+347.20248 810.1
+375.78647 629.9
+381.37329 662.3
+384.22086 918.0
+391.72153 556.4
+397.22046 582.0
+412.21906 1784.0
+425.87082 599.0
+436.15854 875.0
+450.58694 618.0
+454.17093 8386.4
+455.17609 1199.6
+464.15683 1803.2
+469.23132 572.3
+472.18176 13406.4
+473.18527 2911.5
+473.22943 576.7
+474.21497 1135.2
+476.24368 899.8
+482.16626 16923.3
+482.68585 715.7
+483.16983 2311.3
+491.23792 2754.7
+500.17664 11927.7
+501.17831 1741.3
+508.26636 2843.2
+525.04071 574.7
+530.25598 807.1
+532.45618 1735.6
+545.27191 628.3
+549.18524 856.0
+549.28882 652.0
+552.28406 1715.0
+552.76447 692.3
+553.28137 740.3
+554.27667 2158.5
+554.77783 921.1
+560.25806 1992.9
+561.28687 19366.2
+561.78900 8515.1
+562.28979 2181.5
+563.28131 1994.8
+565.28589 1768.6
+571.59534 708.4
+577.28668 6327.3
+578.26868 3778.6
+579.27106 847.8
+588.30927 1304.9
+588.54590 756.6
+589.31769 1948.0
+595.29718 127095.1
+596.30035 25861.9
+596.83136 848.8
+601.81299 1217.1
+605.82526 1103.1
+610.81805 6084.0
+611.31915 2723.2
+619.82404 3048.9
+620.32556 1823.0
+630.44879 702.6
+641.72339 629.0
+655.35901 784.8
+660.85803 788.9
+669.35760 1685.5
+676.63818 1115.9
+682.36292 697.5
+692.31525 1218.2
+693.29443 1341.0
+710.35663 18769.8
+711.36053 6056.1
+712.35846 930.0
+716.37433 614.8
+724.96234 600.1
+728.37402 1076.1
+730.74298 627.3
+756.46204 1795.6
+764.36206 790.7
+779.33423 1477.1
+791.34961 2174.4
+795.61987 800.7
+801.34961 1133.5
+802.45831 854.7
+803.34589 13112.0
+804.35034 2079.4
+874.96661 1077.9
+901.45630 1358.3
+901.95831 981.4
+904.85510 603.7
+911.43066 648.4
+935.47229 629.6
+937.48615 1782.9
+938.47229 890.9
+965.93298 1340.0
+966.17242 1234.5
+978.18109 612.4
+1024.51233 4196.3
+1025.51379 1769.4
+1058.16797 661.5
+1079.48962 659.8
+1089.51807 923.4
+1103.55835 1184.3
+1104.54163 1612.5
+1105.54712 775.9
+1107.54529 3600.8
+1108.55212 1940.7
+1121.56812 42304.7
+1122.57056 21428.8
+1123.57031 6684.1
+1124.57642 1244.6
+1125.55591 2074.6
+1126.54980 1307.0
+1128.92456 787.8
+1182.54932 615.7
+1188.24268 901.2
+1198.02173 3286.7
+1205.36572 684.3
+1220.63354 2722.3
+1221.63892 1651.4
+1224.61548 968.9
+1238.63940 5793.4
+1239.64246 3604.9
+1240.64124 1039.9
+1319.70142 1190.9
+1320.69775 1372.6
+1337.70886 16283.6
+1338.71191 10540.1
+1339.72046 3377.5
+1340.71179 1029.5
+1525.49084 846.9
+1746.12451 639.4
+1777.40906 834.6
+1789.02454 696.7
+1879.53784 19285.1
+1879.82458 2805.3
+1900.99890 730.1
+1907.06250 6950.3
+1918.83728 868.1
+1930.67737 903.2
+S	2089	2089	530.2537721
+Z	4	2116.98379
+145.28229 7433.5
+148.67697 8353.6
+150.41006 10163.9
+165.77275 7026.2
+169.60861 7532.9
+177.32115 6979.6
+184.44612 6621.2
+188.22145 10125.6
+188.24330 9861.0
+188.26599 21343.0
+188.27966 29904.8
+188.29150 27650.9
+188.30956 22989.9
+188.33244 12378.9
+188.45279 9203.5
+193.02464 8988.6
+198.90916 7802.0
+199.19223 13335.8
+199.27196 14693.9
+199.28177 22585.4
+199.28894 33743.1
+199.38025 12016.7
+199.38789 12649.4
+209.08311 8818.1
+214.52632 9343.1
+217.28522 9091.4
+233.12816 28136.1
+238.36688 7768.9
+255.10876 23874.5
+270.13187 27132.6
+271.20087 10036.3
+271.31866 8660.3
+272.13516 37092.3
+273.13629 8594.2
+275.12424 21109.9
+275.61606 10355.0
+283.63727 40401.4
+284.12909 117872.2
+284.63187 22645.3
+285.16461 12440.8
+286.23837 10058.0
+292.64224 214474.8
+293.14380 62038.1
+293.64410 14849.2
+314.57397 7244.8
+316.64319 21188.3
+321.50781 10089.4
+321.63565 13359.2
+330.64127 83831.6
+331.14276 30304.3
+331.64346 10453.9
+341.16635 17765.1
+341.68277 30303.3
+350.27917 9909.9
+379.16705 81967.5
+379.66919 37638.6
+383.17554 7653.0
+386.21118 10100.4
+391.21838 29056.4
+391.71933 14736.2
+399.87210 35855.5
+400.19141 47230.8
+414.20895 61287.1
+416.25989 12072.1
+418.88757 8457.5
+422.70099 14441.5
+423.19968 12155.9
+438.20807 16569.1
+440.75238 24883.8
+446.70047 22541.6
+451.69412 10644.2
+452.17944 13089.6
+452.20773 9288.0
+460.69888 100865.5
+461.19958 55636.1
+461.70166 16180.7
+476.27094 80095.4
+476.77274 47196.7
+477.27301 20280.8
+479.38187 7947.2
+480.90848 10962.9
+486.24179 8225.2
+486.35156 9091.1
+486.57672 1704460.3
+486.91092 1587234.3
+487.12604 8723.1
+487.24466 744714.3
+487.46985 9521.4
+487.57834 233331.4
+487.91284 23477.9
+488.21826 26677.8
+488.72177 19640.5
+501.23953 102806.8
+502.24130 19855.5
+507.18979 27597.1
+512.20154 11490.6
+517.51306 9087.8
+529.23792 11586.4
+531.11676 7949.6
+532.42139 15265.9
+532.47449 17950.7
+545.30341 17523.8
+568.00348 7367.2
+584.98206 7987.0
+599.30383 455422.4
+599.80511 313360.5
+600.30591 118324.6
+600.80762 39081.5
+619.24713 11895.3
+660.27502 724049.4
+661.27826 237579.9
+662.27728 58625.1
+680.83514 202141.4
+681.33698 174403.9
+681.83789 93636.0
+682.36975 30636.4
+683.36469 12934.1
+689.67810 35383.7
+690.01294 11017.7
+690.67664 11103.1
+720.35553 12313.5
+722.70325 11893.6
+724.68890 8465.6
+729.36194 1290472.3
+729.86279 1206794.5
+730.36407 616202.4
+730.86487 171960.4
+731.16431 13430.5
+731.37030 21731.8
+778.31445 16725.1
+781.42896 26239.9
+795.37970 10791.6
+795.62018 13271.8
+920.38898 42205.9
+921.39563 19894.3
+1140.50769 8865.9
+1197.91406 26360.9
+1198.01331 31960.2
+1203.34241 9296.4
+1288.97168 9115.7
+1506.52002 8222.6
+1525.51794 10726.7
+1876.04358 10512.1
+1877.77930 10982.1
+1879.03870 20340.7
+1879.53296 260072.7
+1880.03625 25954.1
+1907.03979 100115.2
+1930.71851 11886.8
+S	2090	2090	615.5705746
+Z	4	2458.251
+159.23946 3708.5
+169.51854 3927.0
+178.38736 4634.5
+186.84204 3819.7
+188.21803 4187.2
+188.23399 6926.7
+188.25081 5305.7
+188.26276 4601.5
+188.27577 4397.7
+188.28606 5496.8
+188.30176 4278.4
+188.31181 4648.2
+188.32307 5159.7
+197.73000 4168.7
+198.90361 5449.8
+199.18729 5941.2
+199.21098 4121.6
+199.27165 10580.0
+199.28098 6028.5
+199.28644 7808.9
+199.29462 8652.1
+199.31099 12054.9
+199.32245 7189.0
+199.38428 5829.7
+199.40714 5997.4
+211.18015 6625.3
+214.50928 4027.2
+233.16449 7600.8
+255.32954 5233.5
+284.19650 4666.1
+293.68005 3749.2
+328.98499 4195.3
+341.68500 9111.0
+371.13770 6441.5
+376.87125 4262.7
+389.30283 3636.9
+391.21765 8627.1
+416.26331 4314.3
+427.60605 6073.5
+456.20761 3892.3
+476.27042 14674.7
+479.16019 4291.3
+482.73166 5951.9
+486.57587 25049.0
+486.91190 22135.6
+493.68167 4854.2
+530.26471 80514.9
+530.58661 3867.2
+530.76581 48428.3
+531.27362 6510.8
+532.44275 12453.6
+533.78674 5170.5
+545.30237 11247.3
+549.24036 4409.6
+560.27979 4750.4
+561.28613 56733.2
+561.78674 16599.7
+599.30249 10134.3
+623.99078 3905.7
+630.50781 4693.0
+632.97638 3938.1
+660.34827 5860.5
+660.74127 3624.4
+675.83954 4919.5
+676.63495 6728.8
+680.83209 6331.2
+682.36023 17546.7
+685.32629 13828.0
+696.00085 4224.0
+703.86316 4618.2
+704.12061 4692.7
+714.02252 4694.3
+717.88641 6222.6
+727.01636 22419.5
+727.35010 20020.9
+727.68488 9052.3
+728.01758 7154.8
+728.34857 6497.6
+728.67194 4374.7
+729.36218 76459.3
+729.86359 56272.0
+730.36359 5143.1
+733.02161 14940.2
+733.35382 16770.3
+733.69061 11595.6
+748.35760 11219.8
+748.69556 15171.9
+749.02643 8040.6
+769.86084 4014.0
+770.71637 6311.1
+771.37915 5296.3
+782.42145 5244.3
+794.88416 20506.5
+795.38464 14509.1
+795.60791 6140.1
+799.37140 71303.8
+800.37579 24543.5
+849.37299 4720.7
+876.33075 6113.9
+910.89038 3726.1
+946.43951 87662.6
+947.44098 47643.0
+948.43860 6516.7
+1046.42932 5930.6
+1059.52405 12137.6
+1060.52368 7899.6
+1083.51563 5758.3
+1140.53906 4256.1
+1158.49902 4341.1
+1196.70435 4627.0
+1197.98718 22729.8
+1383.66492 4338.8
+1525.66272 6058.6
+1553.90625 4349.1
+1754.67737 4315.8
+1878.26929 7142.4
+1878.66870 6884.9
+1879.10254 19363.1
+1879.52234 131542.9
+1879.95471 14362.3
+1880.41321 8200.5
+1880.78735 7889.7
+1907.04016 48015.1
+1907.30200 7110.4
+1918.85950 4870.3
+1930.88208 6297.7
+S	2091	2091	1879.95940793
+Z	2	3758.071
+Z	3	5636.603
+532.46375 1382.7
+556.69550 728.2
+595.92914 595.4
+630.45068 742.8
+632.58667 556.6
+638.29834 592.3
+640.66925 562.8
+676.65656 1130.0
+774.69324 615.0
+795.61462 1024.2
+852.38513 733.2
+970.98785 571.0
+1021.19934 848.7
+1057.26196 790.5
+1073.34814 621.7
+1110.00488 712.6
+1198.04126 3110.4
+1198.17578 770.2
+1454.63770 724.0
+1479.05627 673.6
+1525.52026 842.2
+1777.33533 754.0
+1869.95740 803.3
+1876.65588 712.6
+1877.69495 653.5
+1879.14160 1702.4
+1879.57776 19941.3
+1880.02173 1297.4
+1907.10938 7634.0
+1918.85132 776.8
+S	2093	2093	707.088407933
+Z	2	1412.329
+Z	3	2117.99
+188.16443 31050.7
+188.23524 37019.5
+188.24945 32224.4
+188.26082 37623.4
+188.27730 49021.2
+188.28743 27871.7
+188.29814 34469.8
+188.30577 27706.5
+188.32657 30514.3
+188.34036 27290.9
+188.41850 35342.8
+194.38103 29212.6
+198.90570 48711.5
+199.19574 30492.0
+199.23288 26896.8
+199.26526 30336.6
+199.27394 34630.5
+199.28661 108904.4
+199.29260 75503.5
+199.30594 43423.4
+199.38832 37572.3
+199.40878 32549.7
+238.63422 34119.8
+243.09894 29015.8
+244.06596 28293.5
+245.69377 30061.2
+271.51358 27838.9
+283.05750 27848.6
+295.94669 31931.2
+320.23108 38697.0
+326.51898 28399.1
+333.18823 47261.2
+337.25836 98617.4
+338.26154 39793.2
+341.68384 33004.3
+350.28427 28866.3
+379.16910 32962.5
+391.21921 32739.7
+418.79712 29998.4
+438.30609 79939.5
+439.30862 33076.0
+445.26212 35696.9
+446.27170 52942.3
+507.19257 58105.0
+529.23633 34178.2
+532.50031 88743.3
+545.30219 92005.0
+546.30310 27770.5
+547.31836 252197.9
+548.32233 107579.3
+549.17004 27926.5
+610.36218 32517.5
+613.26001 31612.1
+619.24677 46359.5
+619.75018 39685.3
+630.41040 33266.7
+630.43768 32864.9
+634.87799 36023.9
+635.38074 47105.6
+642.37756 60755.0
+660.27557 67036.0
+660.40094 315499.1
+661.40521 223720.7
+667.98828 107653.5
+668.32587 143499.2
+668.65771 69752.4
+676.60956 39787.4
+682.36017 269843.6
+683.36542 52900.4
+683.71594 35206.3
+690.42230 170384.4
+690.91791 151611.7
+737.46045 42854.7
+755.25732 26916.1
+755.46460 129918.2
+756.46716 106695.8
+773.48541 551036.4
+774.48877 283141.9
+775.48639 31897.6
+781.43011 209107.8
+782.43518 68941.4
+795.61627 41713.7
+868.54895 157009.3
+869.55408 163845.6
+880.48969 54408.3
+887.96722 37135.8
+902.52734 248613.6
+903.52917 129554.5
+920.38550 45996.4
+941.54510 45237.3
+951.60376 34981.1
+959.54834 1062360.6
+960.55237 709788.6
+961.55231 112522.5
+968.35455 28518.0
+969.60370 55096.2
+970.60046 66184.9
+1016.57587 32988.5
+1042.58691 113435.5
+1043.58936 89615.8
+1057.18567 37393.1
+1060.59619 1318786.0
+1061.59973 1032723.1
+1062.60657 124226.3
+1082.68665 84903.3
+1083.68701 111559.0
+1153.71643 58524.4
+1154.71301 126706.1
+1155.66553 143579.7
+1156.66919 109080.3
+1166.48047 45738.6
+1169.26880 39141.4
+1173.67993 1582945.6
+1174.68311 1193197.3
+1175.68201 214074.8
+1198.12134 133711.8
+1212.37146 39280.6
+1237.49463 61652.2
+1241.74060 39661.4
+1268.74585 43580.1
+1269.73926 69961.5
+1286.76440 736174.9
+1287.76733 861414.5
+1288.76501 86425.0
+1296.76343 44388.5
+1297.73499 31129.2
+1389.29248 33361.0
+1647.54468 30427.7
+1742.29028 30567.6
+1852.45618 34446.2
+1877.69800 41300.5
+1878.51282 43519.7
+1878.93347 54153.4
+1879.45154 951852.4
+1879.73120 102048.7
+1879.93616 50614.8
+1907.05713 354861.7
+1907.46985 35861.4
+S	2094	2094	1879.9615746
+Z	3	5636.61
+Z	2	3758.075
+532.52362 1770.3
+549.18573 697.4
+676.63892 912.1
+782.92572 650.6
+868.36548 655.8
+1031.36658 606.9
+1057.24548 884.9
+1137.54004 594.9
+1198.16565 3481.1
+1229.49695 677.5
+1667.10913 663.5
+1674.95374 771.3
+1762.71094 805.8
+1798.30359 646.0
+1878.54858 1052.7
+1879.12708 3062.9
+1879.53296 19434.6
+1879.96130 2906.8
+1907.04614 7713.0
+1930.70398 904.5
+S	2095	2095	740.883407933
+Z	2	1479.919
+Z	3	2219.375
+198.91801 8980.3
+199.18900 11471.3
+199.25827 14939.1
+199.27022 14428.2
+199.28165 23413.3
+199.29599 34864.2
+199.39903 9635.3
+213.40109 9799.6
+216.29111 9582.4
+216.34738 9723.9
+221.13800 15688.9
+230.12985 8787.1
+256.32541 8754.0
+267.49158 9293.4
+271.50732 11927.6
+275.82849 10118.8
+280.20688 9625.0
+300.31406 8981.3
+309.19101 30121.8
+329.22827 9199.7
+332.45508 11539.0
+333.61481 8898.0
+342.30313 11764.6
+353.21561 45731.8
+371.22552 14725.0
+393.20782 9197.2
+397.24246 50230.1
+415.25333 16545.3
+426.92896 9390.5
+427.58023 13900.9
+433.50696 8922.1
+441.26727 48923.4
+459.27887 18513.4
+460.28574 23998.4
+482.70026 12733.6
+485.29373 43438.9
+485.76715 64575.9
+486.26862 46728.8
+486.77167 14293.0
+496.27637 19634.6
+503.30682 17605.0
+514.27411 11817.3
+527.60339 11294.4
+529.31952 34908.3
+529.78552 15005.9
+531.32269 61921.4
+532.54187 24394.3
+549.20941 11978.9
+573.34564 42708.1
+578.82074 14002.1
+591.35565 32764.5
+609.36133 44409.4
+617.37122 23435.8
+622.33344 31890.0
+622.83691 20929.5
+627.36902 37018.8
+630.31250 10552.1
+631.39471 11227.2
+635.38293 83200.9
+676.63904 22098.8
+679.40900 95161.2
+687.41211 38779.6
+688.41931 12670.9
+695.43420 14899.1
+704.43280 27182.5
+705.42627 34537.0
+706.07080 10824.4
+706.66736 15543.8
+706.99548 10215.8
+712.46082 33552.4
+722.44171 314742.8
+723.43506 1479033.5
+724.43823 99599.0
+782.05750 10582.4
+785.91101 15140.5
+792.91180 12441.7
+793.41821 12552.7
+795.61865 14145.3
+815.19952 10003.7
+832.93384 14421.7
+841.94000 20357.5
+842.43854 30579.6
+854.44556 9987.9
+877.45679 17845.2
+877.95856 23632.7
+934.49268 15838.0
+970.52832 34596.2
+971.52899 31564.6
+1019.67975 12698.7
+1057.24097 14458.9
+1057.55920 19841.6
+1198.21094 55067.2
+1226.69067 9834.0
+1243.66577 36074.1
+1244.66467 26019.3
+1280.81604 10321.9
+1505.48547 9127.7
+1674.29346 11389.1
+1869.85645 11942.9
+1878.57532 16460.5
+1879.08142 23615.4
+1879.53381 312451.8
+1879.99536 18971.1
+1880.53210 13280.0
+1907.08691 120062.4
+1985.32458 10773.9
+S	2097	2097	1879.9178246
+Z	3	5636.478
+Z	2	3757.988
+507.63019 909.0
+532.55029 1889.9
+542.64294 605.0
+573.58563 691.4
+598.83209 673.6
+616.82855 630.8
+676.60510 1087.2
+747.16412 675.7
+782.83502 664.1
+795.61334 1139.0
+825.07544 589.0
+968.05029 628.0
+998.22064 633.2
+1019.73010 1031.7
+1057.19531 1056.7
+1072.83240 620.9
+1148.34949 555.1
+1148.46155 765.4
+1188.13745 807.5
+1198.22852 3347.1
+1422.41968 681.7
+1505.03833 569.1
+1717.29675 1346.0
+1878.88977 729.5
+1879.42761 20346.5
+1879.93323 797.7
+1907.07495 6694.0
+1930.82556 869.0
+1951.68396 679.6
+S	2098	2098	1907.46124127
+Z	3	5719.108
+Z	2	3813.075
+525.80835 798.9
+532.54224 1879.6
+543.94507 692.4
+599.31488 589.2
+617.82928 673.2
+661.77008 661.8
+769.24115 666.7
+782.93884 817.7
+795.61438 922.2
+1019.69806 681.8
+1057.21204 899.7
+1188.09863 784.9
+1198.21484 3278.3
+1273.05042 651.5
+1621.01746 677.9
+1655.20166 624.9
+1718.94861 1477.6
+1873.85083 763.8
+1874.10925 808.9
+1879.48499 20194.0
+1880.52734 626.1
+1906.67163 655.3
+1907.05273 7621.4
+1930.85461 1083.4
+S	2099	2099	707.0868246
+Z	2	1412.326
+Z	3	2117.985
+182.80486 712.6
+188.26294 977.7
+188.27510 902.6
+188.28206 1010.4
+188.29156 941.0
+188.29877 796.2
+188.30768 1076.1
+198.91081 739.3
+199.24893 1028.1
+199.25470 874.3
+199.27919 2036.6
+199.28757 880.9
+199.30220 1009.6
+205.60951 549.2
+215.70656 711.9
+221.00484 666.5
+240.80122 638.9
+244.75848 688.6
+255.31949 806.0
+270.73465 607.5
+273.13757 582.3
+286.70450 622.2
+293.62930 510.9
+293.63589 503.3
+307.18820 759.3
+314.14859 670.4
+341.68381 2167.0
+350.27866 1163.2
+365.70126 641.8
+369.53055 572.5
+392.02115 677.8
+416.25702 1016.9
+435.00485 703.2
+459.43759 632.9
+476.27109 1645.0
+483.74854 682.6
+507.18695 1980.5
+529.23663 779.4
+532.50140 2103.7
+542.50055 626.8
+545.30261 3908.9
+546.30017 799.5
+549.21985 892.9
+553.28217 5688.4
+554.27887 1195.0
+571.56866 651.6
+582.30182 1957.8
+583.73395 1335.8
+619.24982 2904.3
+619.74652 767.1
+660.27423 4143.5
+666.36609 3949.0
+667.37042 1561.2
+667.98914 4481.1
+668.32489 4154.9
+668.78363 1237.1
+679.38336 610.1
+682.36102 7863.2
+683.36383 1433.9
+686.50616 646.9
+687.84790 944.3
+745.36322 2064.2
+764.39337 796.8
+781.42969 5517.1
+782.43195 1942.5
+786.83972 733.3
+826.06525 771.3
+829.42889 4532.6
+830.43152 1470.8
+837.35522 638.9
+851.87372 823.2
+858.44885 3004.6
+859.44672 1190.5
+862.14941 751.4
+880.49615 2314.7
+881.20898 682.6
+914.91003 736.6
+920.38843 1723.8
+929.83405 619.5
+934.63232 794.6
+966.48688 4265.3
+967.48486 1497.8
+1050.29956 615.7
+1071.53064 609.6
+1092.32275 691.0
+1166.46143 2039.4
+1198.11377 2884.0
+1216.08813 659.3
+1237.49609 1713.8
+1238.48389 1129.7
+1336.55359 1704.9
+1435.62915 1137.0
+1436.62939 779.1
+1517.14099 713.8
+1525.58289 956.8
+1719.44031 1195.6
+1878.79858 1414.0
+1879.51733 18675.2
+1880.37012 1045.6
+1880.90869 959.9
+1907.05359 7008.1
+1930.84473 723.9
+S	2101	2101	624.750991267
+Z	2	1247.654
+Z	3	1870.978
+162.65944 580.9
+169.50035 818.5
+173.73386 617.7
+182.78941 775.6
+195.81012 540.0
+197.13765 699.3
+198.17201 554.9
+198.90559 762.8
+199.18141 1172.7
+199.27924 2856.2
+199.37621 1115.8
+206.27153 571.2
+216.42775 608.4
+219.91443 601.1
+226.70770 613.1
+294.93103 582.7
+346.01596 656.0
+372.21198 558.7
+381.37735 705.2
+384.36078 553.3
+416.89874 580.1
+427.56479 681.9
+482.67160 600.1
+488.31198 593.5
+507.29694 713.7
+507.79944 966.2
+532.47864 2132.4
+539.27155 1010.3
+544.59943 2118.1
+572.22888 702.3
+604.58905 1299.1
+630.44202 812.6
+646.87518 642.0
+676.65106 855.2
+716.65460 762.4
+736.87006 1586.5
+737.37756 1341.3
+745.68939 750.9
+781.31323 663.1
+781.61505 641.7
+795.61908 918.2
+813.89716 664.3
+816.39349 959.9
+817.37933 1291.4
+897.47559 601.1
+964.45734 1120.6
+1019.73895 805.7
+1057.26624 980.8
+1101.42029 549.4
+1135.95435 615.7
+1187.94385 752.2
+1198.06750 3172.9
+1364.04688 647.8
+1392.78491 819.2
+1437.09253 645.4
+1653.56299 608.3
+1717.60046 754.7
+1717.89355 1630.2
+1873.30554 603.3
+1877.45508 844.7
+1878.29907 656.8
+1879.07837 1376.3
+1879.57922 19534.3
+1880.10425 1097.3
+1880.96497 674.6
+1882.24768 677.9
+1907.06836 7801.3
+1988.58630 670.7
+S	2102	2102	418.9716371
+Z	4	1671.85525
+106.01180 509.4
+106.78815 744.7
+112.07992 504.9
+116.08730 525.8
+118.66492 589.9
+119.88400 550.8
+120.08036 4076.7
+121.78863 2296.6
+122.55763 595.6
+128.58057 642.9
+136.36246 571.5
+151.97595 677.6
+157.20552 556.3
+157.60992 745.2
+160.10912 663.7
+161.51057 583.7
+161.63089 476.6
+162.49632 540.8
+163.53304 581.7
+165.06139 556.0
+165.76807 820.1
+172.07555 7771.1
+175.08633 6304.0
+175.11916 1300.7
+176.08897 851.3
+182.79176 762.1
+189.10104 1090.3
+198.91254 933.9
+199.19232 596.7
+199.26585 712.3
+199.27467 1936.6
+199.28554 2180.2
+199.31723 750.4
+199.37244 748.6
+199.38460 922.4
+199.39563 813.9
+200.07123 1366.4
+206.53539 567.0
+207.11256 976.0
+207.68614 596.9
+212.19107 627.6
+216.11296 2288.8
+216.49344 522.8
+217.09705 20386.4
+218.10069 2503.1
+226.20818 663.1
+228.06482 1331.0
+234.12357 88393.6
+235.12703 10845.7
+245.09207 1660.2
+249.15964 3609.6
+260.67783 592.9
+262.11856 11622.2
+263.12213 1138.8
+268.14063 3425.4
+268.64240 759.5
+270.93771 523.6
+277.14548 47112.2
+277.64700 13089.8
+278.14984 1586.3
+291.65546 3426.9
+292.15753 1394.3
+297.12302 9826.8
+298.12683 2145.1
+308.91443 673.5
+312.17758 1740.8
+314.14941 2240.7
+315.15488 657.1
+316.83182 837.1
+320.13904 600.3
+322.83484 4000.6
+323.16956 862.1
+324.18787 764.2
+325.11783 2524.8
+325.68631 4886.5
+326.18811 1430.9
+333.68759 2986.6
+334.19019 1340.5
+348.93503 1035.5
+349.18472 1290.9
+349.43530 1594.9
+353.43695 32831.1
+353.68759 30192.8
+353.93848 10314.9
+354.18927 3005.6
+354.52615 2054.3
+354.86063 725.4
+359.18869 2715.5
+359.69119 1792.9
+360.52945 10392.6
+360.86365 8760.3
+361.19659 1687.9
+361.53217 908.2
+364.18271 1087.1
+364.68344 740.1
+365.65912 629.8
+367.20520 3299.2
+367.70660 1679.5
+372.19943 1222.2
+373.18661 18698.9
+373.68814 9085.6
+374.19031 2596.9
+378.93842 1770.8
+379.44162 878.9
+381.20163 1120.8
+381.37460 678.7
+381.44559 1473.7
+381.94595 952.7
+384.15521 2240.2
+385.70090 757.4
+385.94730 1409.7
+386.19800 1216.2
+390.20425 9764.2
+390.45453 7996.8
+390.70520 3912.6
+390.95602 1983.2
+391.30167 649.5
+393.21854 869.3
+396.17911 1095.0
+396.69162 688.2
+398.70038 1127.5
+398.94916 2459.2
+399.21014 2694.4
+399.45358 2977.3
+399.70364 2472.1
+399.95035 2349.0
+401.19644 8991.8
+401.44696 9759.2
+401.69785 4344.5
+401.95023 1455.6
+402.95566 1549.1
+403.20230 7906.2
+403.45370 7060.2
+403.70416 2213.0
+403.88358 656.6
+403.95673 1028.7
+415.73151 1102.5
+420.72278 2439.9
+421.22458 1344.4
+429.72855 36180.3
+430.23050 19941.4
+430.73175 5874.9
+432.55847 3112.0
+432.89203 2785.6
+433.22586 1467.3
+438.56262 59414.5
+438.89670 43956.2
+439.23123 17276.9
+439.56573 5092.1
+439.90143 1099.1
+441.89044 1848.4
+445.24368 1297.6
+452.21567 971.9
+456.23050 8465.7
+457.23441 1887.2
+458.90744 1682.9
+459.06161 648.0
+459.24088 1467.9
+459.57587 826.1
+464.91064 10448.0
+465.24438 12364.3
+465.57846 4255.9
+465.91483 1789.3
+466.82755 636.0
+469.44989 712.6
+469.83566 1612.9
+469.89200 853.8
+470.02200 1298.8
+470.06229 555.3
+470.17084 1919.9
+470.22592 734.2
+470.38187 1934.6
+470.51147 739.5
+470.71643 2363.4
+470.74478 1120.8
+470.84161 710.5
+470.85492 1532.6
+470.91357 471434.6
+470.96082 1545.9
+470.97684 1185.8
+471.00275 1143.4
+471.04852 1656.0
+471.07831 1141.1
+471.09354 991.1
+471.24722 400133.4
+471.41403 1174.4
+471.44656 3179.8
+471.58118 179323.4
+471.67694 994.6
+471.68564 1007.7
+471.78024 2896.3
+471.81705 1419.4
+471.91531 56162.2
+471.99551 2804.3
+472.11304 1010.2
+472.14575 851.4
+472.25012 13747.9
+472.32974 2037.8
+472.58636 2122.6
+472.66418 847.4
+478.25531 980.7
+483.74716 5018.6
+484.24869 4088.6
+485.24860 998.1
+490.29691 1099.8
+491.32657 588.3
+493.17520 540.8
+494.25302 1349.1
+498.91214 2154.9
+499.24799 1575.3
+504.91672 2708.5
+505.25082 4530.7
+505.58423 1893.5
+506.76193 739.3
+508.24222 2462.0
+508.57892 2083.6
+508.75269 676.7
+508.90836 723.7
+513.30530 2021.1
+514.24750 7022.3
+514.58252 7283.5
+514.91626 3169.6
+515.25269 1465.9
+519.93732 8169.5
+520.27234 5939.5
+520.60571 4526.2
+523.26367 24881.8
+523.59802 21063.7
+523.93262 10217.6
+524.26587 3394.7
+531.22174 877.3
+532.51270 2184.6
+535.27325 3163.7
+536.27679 1125.9
+540.28973 4454.1
+540.79114 2368.2
+541.20441 1162.4
+542.29181 964.8
+551.90381 692.3
+553.28302 111154.9
+554.28595 30396.8
+554.42621 582.2
+555.28723 4972.0
+556.28546 1356.1
+580.28479 1408.3
+582.30249 14683.5
+583.30627 4996.5
+601.34082 1036.4
+603.37842 1124.9
+613.82385 7360.4
+614.32471 6995.9
+614.82733 1679.4
+615.32733 659.7
+618.80890 1157.0
+619.31335 797.2
+650.36426 4214.6
+651.36804 1786.8
+657.33990 10614.2
+657.84131 6029.1
+658.33960 2417.7
+662.33215 6536.1
+662.83264 4914.9
+663.33624 2019.0
+666.36584 5302.8
+667.37225 1327.1
+674.36548 1176.0
+676.64984 1024.6
+697.82428 629.9
+735.29181 593.8
+743.38159 966.3
+745.36517 10119.0
+746.36786 4765.9
+747.37128 1078.8
+761.39594 2922.1
+762.40167 2048.9
+795.64172 952.1
+829.42761 1826.0
+830.43152 701.4
+843.99988 620.0
+846.67151 615.4
+858.44904 15184.3
+859.45227 8167.6
+860.45544 1777.0
+861.46887 700.1
+918.85156 664.4
+989.15814 632.8
+1057.27405 827.9
+1163.20300 662.5
+1176.15686 689.3
+1184.47754 586.9
+1198.14929 3616.5
+1334.53235 628.7
+1384.24207 956.5
+1416.44031 552.7
+1535.07971 602.3
+S	2103	2103	740.891991267
+Z	3	2219.401
+Z	2	1479.936
+198.90593 844.6
+199.19514 1068.6
+199.25148 610.1
+199.26222 901.5
+199.26839 800.8
+199.28523 2017.8
+199.29413 2043.0
+199.33582 642.8
+199.38501 799.4
+206.77127 565.5
+220.98332 589.0
+233.56963 542.3
+238.13025 658.2
+254.83467 613.3
+255.61203 711.6
+280.73709 646.2
+306.50931 617.0
+353.21616 1491.9
+363.21143 655.3
+372.91956 606.7
+397.24179 902.2
+415.25299 1343.2
+421.98694 604.9
+441.26700 1200.3
+453.54645 533.9
+458.22968 607.3
+463.57416 686.3
+471.37241 622.2
+479.49173 654.5
+482.67120 999.4
+485.29398 1438.7
+485.76950 1407.4
+486.27240 1131.6
+494.25967 1379.2
+503.30542 932.8
+504.60629 663.4
+529.31940 946.3
+531.32385 1028.1
+532.49530 2059.9
+549.17126 756.3
+588.31610 822.1
+591.35388 879.5
+609.35876 1775.4
+617.37268 1157.6
+627.37000 1104.2
+630.42102 971.4
+635.38263 3373.5
+676.62341 1163.9
+679.40985 3004.1
+693.49475 663.9
+695.43445 672.8
+704.42993 975.6
+705.32288 899.4
+705.42627 1438.1
+706.01489 690.8
+706.33289 7284.8
+706.66705 7270.1
+707.00244 3767.9
+707.33936 880.6
+712.45209 768.9
+720.28394 564.2
+721.34882 2014.5
+722.44263 12229.3
+723.43524 50612.2
+724.43628 1783.0
+726.63660 657.3
+778.81415 573.4
+795.62830 943.8
+806.40106 783.7
+826.89270 730.5
+856.12701 724.9
+884.94110 782.9
+911.94366 621.9
+964.45300 1986.1
+965.44824 886.4
+970.53723 818.6
+986.50153 1060.4
+997.05072 649.4
+1020.85107 1287.1
+1043.52832 1662.1
+1115.18433 781.7
+1115.63574 605.7
+1149.92554 698.2
+1191.81543 674.0
+1198.10986 2907.7
+1221.93726 730.7
+1233.65527 1188.5
+1243.66956 763.4
+1244.67395 705.0
+1500.20422 587.4
+1632.04346 590.6
+1716.23584 748.8
+1871.29089 1265.7
+1872.79590 1045.5
+1878.02686 974.3
+1878.60083 614.0
+1878.78503 724.7
+1879.49915 18639.5
+1879.76660 3312.9
+1880.17297 991.6
+1880.40881 853.1
+1880.79578 771.0
+1881.08777 762.5
+1906.80542 1167.2
+1907.10449 6920.3
+1907.44275 1204.3
+1930.68457 1001.2
+S	2105	2105	1879.95740793
+Z	3	5636.597
+Z	2	3758.067
+532.47656 1197.1
+532.51245 787.3
+574.06708 569.8
+783.37903 644.8
+795.62860 1149.2
+1057.28613 751.3
+1197.88916 707.7
+1198.06848 3368.4
+1263.84814 745.8
+1346.02478 930.9
+1350.98718 627.9
+1357.07251 577.9
+1424.07483 582.2
+1525.49768 914.6
+1546.78540 876.3
+1571.59778 730.2
+1595.50464 636.0
+1621.08557 687.8
+1878.47998 927.3
+1879.26477 2503.9
+1879.59778 19879.0
+1880.02161 2080.2
+1880.25574 1313.2
+1881.09888 1101.3
+1907.05762 7323.7
+1930.69885 856.3
+1932.01843 756.1
+S	2106	2106	418.9665396
+Z	4	1671.83486
+105.52667 2916.8
+108.19215 2589.3
+113.81768 2537.2
+116.08457 2251.7
+120.08031 21558.9
+121.78740 10272.7
+159.39436 2426.9
+165.76491 3741.7
+172.07524 24448.6
+175.08618 26010.7
+175.11902 3126.4
+177.01968 2698.0
+177.77150 2772.6
+179.06993 2762.7
+182.77606 2831.8
+188.43703 2433.9
+190.39120 2591.5
+198.90697 4131.1
+199.19371 4698.9
+199.20171 3556.1
+199.26140 6697.7
+199.27310 7762.8
+199.28085 8138.0
+199.29062 8842.0
+199.35788 3883.1
+199.37057 2446.7
+199.37814 3240.8
+211.05212 2420.7
+216.11304 10257.5
+217.09685 75819.7
+218.10007 10354.5
+228.06471 3632.9
+228.74355 2670.8
+230.38972 2548.2
+234.12335 338077.6
+235.12675 44585.4
+236.13025 3400.1
+245.09233 6034.0
+249.15913 12105.1
+262.11826 44023.3
+263.12201 6488.5
+268.14066 6715.4
+277.14523 165659.6
+277.64700 40126.2
+278.14828 5973.5
+291.65469 8793.5
+297.12311 32934.4
+298.12604 6142.5
+301.32886 2545.6
+304.25250 2511.2
+312.17789 3732.8
+314.14996 8073.6
+321.60260 2441.5
+322.83447 19300.0
+323.16724 5044.3
+323.69031 4002.9
+325.11740 8917.7
+325.68549 13360.4
+325.76334 2291.0
+325.77521 2404.8
+328.47363 2725.0
+331.94116 2646.1
+332.53448 2710.4
+333.68692 8049.0
+334.18896 5338.5
+348.05081 3104.8
+348.93277 3460.7
+349.18332 4019.6
+353.43655 107503.9
+353.68713 78540.6
+353.93820 38181.9
+354.18817 9685.4
+354.43927 4971.9
+359.18808 11235.3
+360.52875 51054.9
+360.86346 33060.8
+361.19638 13503.3
+364.18286 5026.3
+367.20508 8180.5
+372.29834 2562.4
+373.18610 59444.9
+373.68777 20797.9
+374.18860 5582.5
+375.84601 2459.2
+378.94009 3684.3
+381.20187 5825.9
+381.44537 4851.2
+384.15442 12473.8
+385.94800 7137.2
+390.20349 36634.3
+390.45456 38605.7
+390.70535 18258.3
+390.95538 3220.6
+396.18106 3995.7
+398.70139 2804.7
+399.20990 5548.5
+399.45224 17936.2
+399.70193 15470.0
+399.95026 9575.3
+401.19632 28682.7
+401.44638 31012.5
+401.69705 17662.7
+403.20200 25621.3
+403.45331 24089.2
+403.54868 7154.5
+403.70325 12364.8
+403.88214 5577.7
+403.95425 8271.8
+405.69855 36127.6
+405.94928 18336.2
+406.19766 3649.9
+410.22174 3011.3
+420.72421 4900.9
+421.22214 3246.2
+429.72815 139097.4
+430.22995 73662.0
+430.73047 16382.2
+431.23404 4346.9
+432.55920 6678.8
+432.89099 5149.4
+433.22903 5624.1
+438.56232 184923.6
+438.89645 145938.2
+439.23087 52682.9
+439.56461 13830.3
+439.89923 2980.3
+441.89249 2974.0
+456.23032 22921.4
+457.23557 4496.6
+458.90485 5225.5
+459.23914 4339.9
+464.90958 50658.0
+465.24414 35369.5
+465.57840 10658.1
+465.91022 4450.4
+469.76764 3003.6
+469.83774 11422.8
+469.89789 3265.9
+470.02625 6297.6
+470.16800 8247.6
+470.38232 4820.3
+470.50082 5539.5
+470.71487 7121.3
+470.85666 4848.6
+470.91309 1954121.4
+470.96292 6670.5
+470.97598 5161.3
+471.04880 4563.0
+471.06210 3565.4
+471.24695 1554110.1
+471.32843 3061.8
+471.33728 3378.0
+471.44675 11317.7
+471.58099 719102.6
+471.77951 8413.3
+471.82147 4298.2
+471.84882 3346.5
+471.91516 197975.5
+471.99371 14057.9
+472.13641 5291.0
+472.24948 44843.9
+472.32648 8809.9
+472.46667 3190.6
+472.58783 3875.9
+472.66193 4496.4
+476.77008 3376.1
+478.25186 5027.7
+483.74701 15911.3
+484.24826 10450.2
+499.24582 6567.2
+503.26382 3679.7
+504.91541 12354.2
+505.24890 8747.5
+508.24689 5021.1
+508.57886 11316.5
+508.75772 3697.2
+508.91064 3787.6
+514.24695 37562.8
+514.58185 33982.2
+514.91577 9400.2
+519.93707 28500.8
+520.27100 33488.6
+520.60498 7551.1
+520.93671 5175.5
+523.26343 92225.5
+523.59790 75292.0
+523.93195 36118.7
+524.26526 12799.8
+532.49609 9820.9
+535.27496 7053.8
+540.28986 7384.7
+540.78931 4717.5
+542.29156 5025.5
+553.28265 322804.7
+554.28552 81931.3
+555.28772 15198.8
+557.54755 2725.2
+558.29144 3563.9
+559.21906 4323.2
+580.28577 4219.0
+582.30176 39015.5
+583.30536 9295.6
+584.31110 2907.4
+613.82300 29808.9
+614.32404 18482.2
+614.82544 5141.0
+650.36621 14230.3
+657.33942 23536.5
+657.83984 14002.8
+658.33533 6768.4
+662.33173 15776.3
+662.83276 14312.5
+663.33673 5773.0
+666.36627 15661.5
+667.36804 5592.8
+674.36426 3644.1
+676.63757 4245.1
+712.00433 2766.1
+724.11255 2678.4
+745.36432 23151.1
+746.37097 11010.7
+747.37085 3119.4
+761.39929 8091.0
+762.39954 4255.9
+795.62354 3665.0
+829.43121 7509.1
+830.42712 4142.4
+838.51837 2571.2
+858.44897 44444.2
+859.45313 26930.4
+860.45740 6530.1
+861.47211 3208.3
+872.31659 2574.7
+972.42719 3889.5
+1057.24963 3776.4
+1065.47461 2947.9
+1099.36658 2971.5
+1198.10791 13029.9
+1281.29065 2698.5
+1387.92004 2710.2
+1600.33093 2900.3
+1675.03210 2554.5
+S	2107	2107	1907.51099127
+Z	2	3813.174
+Z	3	5719.258
+532.47626 1226.3
+545.77966 678.2
+607.40070 630.8
+616.14709 589.5
+640.08820 693.8
+676.64880 717.7
+713.69849 604.4
+767.86761 682.0
+792.84406 657.2
+835.52087 597.6
+840.07935 743.4
+850.53876 610.1
+968.02771 574.3
+1019.75122 688.7
+1057.26233 875.7
+1107.64294 717.2
+1197.81592 1032.2
+1198.04907 2898.5
+1489.72815 719.8
+1621.30566 665.0
+1825.64233 671.7
+1872.55090 650.1
+1878.67859 666.7
+1878.93225 915.2
+1879.28723 5123.2
+1879.56970 18450.9
+1880.40674 997.6
+1907.12292 7500.0
+1930.78906 1005.4
+1951.39661 620.3
+1993.62378 635.0
+S	2109	2109	418.9721546
+Z	4	1671.85732
+105.38204 1702.7
+117.35717 1596.1
+117.47958 1686.9
+117.48081 1687.8
+118.69202 1780.1
+120.08036 12633.4
+121.17928 1565.5
+121.78663 6728.8
+121.79829 1980.6
+137.88083 1756.5
+138.93819 1785.9
+140.08228 1878.7
+152.54199 2084.6
+154.27551 2252.5
+171.63884 1940.6
+172.07535 17706.8
+173.07977 2346.9
+175.08623 17281.6
+195.84074 1702.2
+198.90762 2759.6
+199.18031 3684.3
+199.20692 1902.2
+199.23480 2334.2
+199.26567 3070.4
+199.27855 9840.0
+199.34795 1872.9
+199.37648 3692.6
+207.11195 2099.4
+216.11276 7593.8
+217.09700 52065.2
+218.10030 6173.7
+233.56448 2032.7
+234.00404 1610.1
+234.12355 248266.5
+235.12711 27971.0
+245.09215 3383.4
+249.15948 7272.0
+250.16263 2265.1
+262.11847 31717.6
+262.66672 1966.0
+263.12161 3947.9
+266.28784 1839.8
+268.14041 4227.7
+277.14554 117462.8
+277.64719 28739.4
+278.14914 3067.1
+279.58975 2361.2
+282.94568 1735.7
+291.65585 6213.7
+297.12338 28528.3
+298.12701 5204.6
+312.17737 2366.6
+314.14981 3658.0
+316.83121 2403.4
+322.83466 10764.1
+323.16916 5542.0
+323.68774 2329.7
+325.11856 7796.1
+325.68692 9856.8
+326.18918 2896.8
+333.68765 9683.1
+334.18939 3788.7
+348.93521 2199.9
+349.18494 2879.4
+353.43701 84012.5
+353.68771 57461.1
+353.93835 27864.8
+354.18994 7000.7
+354.44150 2377.0
+355.43250 2912.7
+359.18741 5041.5
+360.52933 46051.9
+360.86356 24416.8
+361.19574 6919.7
+364.18234 3650.4
+367.20459 6940.0
+367.70691 2831.0
+372.19934 2477.7
+373.18658 42539.4
+373.68796 20702.6
+374.18921 4910.6
+378.94128 4803.6
+381.19919 3232.7
+381.69498 6048.1
+384.15530 9180.0
+385.94778 3408.0
+390.20364 23244.5
+390.45483 26552.2
+390.70578 7965.0
+390.95636 2851.8
+396.17828 2711.3
+396.68048 2189.0
+399.20911 5782.1
+399.45242 10398.6
+399.70148 11735.5
+399.95151 6594.5
+401.19632 32392.1
+401.44693 21075.0
+401.69781 10410.3
+401.94785 3460.1
+403.20288 17146.1
+403.45303 19797.1
+403.54855 3263.1
+403.70358 7031.5
+403.88422 4812.8
+403.95258 4290.4
+405.69858 12533.6
+405.94983 3217.3
+415.72614 3149.6
+416.22330 2032.2
+420.72150 5642.9
+427.53467 2174.3
+427.56149 1636.3
+429.72864 98060.0
+430.23047 60810.6
+430.73099 13533.3
+431.23380 3302.7
+432.55954 6617.0
+432.89340 6658.3
+438.56268 153447.5
+438.89670 114980.5
+439.23093 38656.2
+439.56586 14218.0
+441.88766 3068.1
+442.22699 2475.7
+445.24359 3039.3
+456.23074 17409.8
+457.23520 2506.1
+458.90756 3401.1
+464.91022 34788.2
+465.24484 24246.5
+465.57922 9326.1
+465.91318 2684.4
+469.83731 6050.4
+469.88885 2404.9
+469.95276 1958.8
+470.02020 5346.1
+470.16745 4560.1
+470.28308 2008.3
+470.35593 2964.2
+470.38116 7580.7
+470.50079 3196.6
+470.71191 4141.5
+470.74734 3478.7
+470.85522 4977.7
+470.91348 1441820.3
+470.96198 6087.2
+470.98166 2993.5
+470.99789 2159.6
+471.07925 4985.2
+471.10934 3965.2
+471.24728 1171641.3
+471.29248 5503.9
+471.41385 5014.2
+471.45343 6810.5
+471.58130 516830.0
+471.78067 6786.2
+471.80481 5178.3
+471.86902 2548.7
+471.91541 141015.2
+471.99411 8231.4
+472.03650 2368.5
+472.11539 3652.3
+472.14572 4819.6
+472.24991 26421.5
+472.32593 6378.4
+472.36618 2218.9
+472.48563 2145.3
+472.57724 2660.3
+472.92737 1658.0
+476.77118 2585.4
+478.25473 4316.5
+478.75732 2593.2
+482.70724 2167.2
+483.74847 15429.7
+484.24936 10457.5
+484.75485 2623.4
+490.29807 2515.1
+494.24677 2873.6
+498.90985 3092.3
+499.58066 2081.5
+503.26273 3471.0
+504.91669 14001.5
+505.25064 10378.1
+505.58279 2653.4
+508.25082 4359.9
+508.57809 5840.0
+508.91141 2794.7
+513.30353 3197.3
+513.93262 2906.5
+514.24841 23793.9
+514.58160 23521.0
+514.91693 13118.2
+515.25134 6277.5
+519.93781 25372.6
+520.27173 19351.3
+520.60608 12907.9
+520.94110 3767.3
+523.26355 61437.1
+523.59802 47996.9
+523.93250 29312.4
+524.26459 10985.8
+524.60083 3735.4
+530.21887 2472.7
+531.21912 2424.0
+532.49988 7295.0
+535.27374 2817.3
+536.27704 2132.8
+540.28790 11748.0
+540.79291 3378.3
+553.28302 238323.9
+554.28571 60302.6
+555.28809 10080.3
+559.04382 2131.2
+559.21985 5456.4
+563.76379 1992.9
+582.30212 25989.3
+583.30316 8085.5
+601.00824 2594.1
+603.37750 3305.9
+613.82404 19996.8
+614.32458 14324.4
+614.82489 5009.9
+618.81146 5721.5
+619.31500 2836.5
+650.36627 9378.0
+651.36548 3624.9
+657.33954 16102.6
+657.84131 14984.4
+658.33954 5743.3
+658.84515 2146.6
+662.33380 9900.1
+662.83380 12561.7
+663.33295 4179.6
+666.36627 12511.5
+667.36646 3220.5
+674.35992 3726.8
+676.63495 2577.3
+726.11798 2348.7
+727.34406 2441.7
+745.36664 20119.4
+746.36969 7647.9
+747.38837 1790.8
+761.39764 8878.8
+762.39581 2794.6
+763.40070 1796.0
+795.63055 3021.2
+824.29138 1812.1
+829.43146 3865.2
+830.64160 1863.2
+858.44958 42728.2
+859.45306 20889.8
+860.45831 5236.0
+1020.88232 2091.1
+1021.19928 1773.8
+1057.24426 2533.3
+1198.12451 11342.6
+1315.46912 2014.1
+1348.24182 1906.2
+1348.39978 1871.8
+1445.95740 2263.8
+1508.48303 1929.3
+1525.45703 3544.4
+1662.83655 1914.9
+S	2110	2110	707.097407933
+Z	2	1412.347
+Z	3	2118.017
+180.62714 1454.0
+184.07690 1886.9
+185.63031 1462.1
+187.47449 1568.8
+187.78925 1254.9
+190.39362 1412.5
+194.43933 1483.3
+198.90782 2361.1
+199.23332 1478.6
+199.25151 1244.4
+199.27039 5271.9
+199.28082 3843.8
+199.31454 1803.4
+199.36934 1726.6
+199.37990 1755.7
+210.13799 1431.2
+215.19716 1440.6
+222.16171 1347.8
+225.56970 1826.4
+231.67017 1691.0
+247.30795 1496.5
+248.52135 1487.2
+268.83591 1816.3
+313.85367 1538.8
+314.14966 4641.3
+316.25073 1679.2
+332.15955 2439.3
+341.68320 4873.4
+350.28354 1679.9
+391.21762 3710.5
+416.25934 3903.2
+417.25064 4251.7
+419.42444 1593.3
+427.55481 1649.5
+428.10138 1623.0
+445.24420 2918.4
+456.22833 1776.9
+476.27158 4423.0
+483.74832 5945.4
+484.24777 2335.7
+484.74695 1798.2
+507.18851 6445.5
+508.19446 1790.7
+526.23590 1775.0
+526.72552 2952.7
+529.23468 3363.3
+532.54987 5086.9
+545.30243 10651.7
+546.30530 2758.9
+553.28259 59498.5
+554.28381 13345.2
+555.28326 1653.9
+555.31128 1439.6
+564.29016 3957.9
+565.29407 1870.6
+582.30194 14746.1
+583.30731 3168.7
+584.23529 1582.7
+585.70337 1592.6
+603.26276 1830.2
+613.82343 2964.7
+619.25092 8486.3
+619.75299 4320.6
+620.25238 1904.0
+633.25269 1845.9
+642.27332 1437.3
+648.32867 2590.5
+648.83258 3844.0
+649.32745 1538.2
+653.82886 1717.3
+657.33984 2221.5
+658.35345 1937.1
+660.27594 13441.9
+660.40118 2028.5
+661.27747 3098.2
+662.33295 6544.4
+662.83197 4465.2
+663.83105 1609.7
+666.36682 32081.5
+666.95996 1641.0
+667.36993 12038.3
+667.98999 17987.6
+668.32764 9337.8
+668.65869 7812.4
+668.98865 4710.2
+669.30157 2269.3
+676.61902 2910.3
+682.36072 27851.1
+683.36536 10163.9
+687.85480 9740.6
+688.35712 4067.6
+688.85974 3765.1
+691.65234 1599.8
+727.35779 4164.9
+729.52893 1433.3
+735.71735 1841.5
+745.36536 17995.9
+746.36804 5620.0
+773.49640 2213.2
+781.42932 23035.1
+782.43311 9794.0
+787.35309 1989.5
+795.61920 2671.8
+829.42871 38621.7
+830.42883 17876.1
+831.42896 4173.0
+840.43793 5354.9
+841.44391 2876.0
+842.45148 1918.1
+851.86987 2806.0
+858.12036 1865.8
+858.44775 25937.3
+859.45142 13941.3
+860.45294 3509.0
+880.49896 5356.6
+882.93970 1925.8
+902.53552 1840.6
+918.95831 1535.6
+920.39124 5471.7
+921.39355 3081.2
+951.53778 1994.5
+952.53961 1931.6
+959.54999 7598.7
+966.48755 32316.8
+967.49139 17536.8
+968.49963 4316.4
+971.92572 2729.5
+972.44727 1761.6
+991.01312 1541.9
+1018.59045 1462.6
+1060.60010 6380.9
+1065.53027 1646.0
+1066.55359 3767.4
+1079.57227 3587.5
+1080.57373 2803.3
+1140.52368 1836.6
+1151.74182 1480.1
+1157.21680 1502.7
+1166.45984 5774.1
+1173.68152 10059.8
+1198.23218 8541.5
+1236.61096 2686.9
+1237.49133 5833.8
+1286.76831 4458.5
+1294.21899 1443.9
+1336.56628 3839.0
+1337.55664 2927.7
+1435.62378 3385.5
+1525.43213 2177.7
+1606.04333 1562.7
+1748.93567 2140.7
+1772.83167 1414.3
+1853.22498 1777.9
+1877.87292 1769.4
+1878.83691 3337.1
+1879.47034 47819.7
+1880.10803 2963.2
+1907.08679 18506.1
+1932.18921 2777.3
+1959.41663 1649.1
+1978.77783 1586.2
+1988.45667 1524.7
+S	2111	2111	419.7248246
+Z	4	1674.868
+108.08216 546.8
+112.03064 653.8
+116.97749 544.6
+117.70367 513.0
+120.08034 3351.4
+121.78815 2466.9
+121.79401 586.2
+122.15599 682.7
+161.53308 698.5
+165.76660 672.9
+171.63789 744.8
+172.07550 7940.8
+173.07872 719.8
+175.08638 8639.9
+175.11839 970.3
+176.08972 648.6
+176.61873 610.8
+178.01686 517.8
+189.10255 1247.2
+194.39754 675.9
+198.90559 1003.2
+199.17929 769.9
+199.19254 859.2
+199.23138 708.2
+199.26352 1413.4
+199.27701 2935.8
+199.29163 1108.0
+199.37434 1122.4
+200.07024 1400.4
+204.80159 713.6
+210.73314 517.9
+214.51736 590.7
+215.35046 567.9
+216.11304 3896.4
+217.09711 23634.0
+218.10045 3519.0
+228.06577 1090.2
+233.93790 631.9
+234.12366 105361.0
+234.13663 1099.5
+235.12709 13691.3
+242.80722 637.6
+245.09167 2479.2
+246.09627 783.3
+249.15944 3863.9
+262.11850 13804.2
+263.12192 1863.6
+268.14011 3852.9
+268.64075 650.9
+274.94370 610.7
+277.14566 46055.0
+277.64749 13061.4
+278.14908 2438.5
+285.06833 578.0
+291.65549 2805.3
+293.11099 558.2
+297.12329 11392.5
+298.12616 2356.3
+312.17896 2052.7
+314.15051 2259.3
+315.15628 685.5
+316.83066 966.7
+322.83530 5155.7
+323.16873 2546.4
+323.86694 596.4
+325.11789 2745.1
+325.68680 3138.0
+326.18771 1571.8
+333.68781 4802.7
+334.18854 1633.0
+342.27789 708.1
+345.76343 526.8
+348.43286 645.5
+348.93475 2568.7
+349.18500 865.6
+349.43903 904.6
+350.28107 772.3
+352.93298 1026.9
+353.43716 28846.8
+353.68790 31057.5
+353.93851 12760.0
+354.18921 4450.8
+354.86044 1219.9
+355.43036 1095.6
+358.20187 684.1
+359.18771 2585.3
+359.68964 1129.8
+360.52933 14646.9
+360.86365 7895.7
+361.19675 1912.5
+361.53217 863.7
+364.18134 1170.5
+364.59460 562.4
+364.68527 857.4
+367.20422 3062.4
+368.20795 837.5
+373.18658 16543.5
+373.68829 8525.0
+374.18954 1598.0
+378.94196 1292.7
+379.18701 1061.9
+381.20251 1598.8
+381.44458 1655.2
+384.15546 3054.5
+385.15872 734.1
+385.94714 1238.4
+390.20413 10428.8
+390.45471 12514.8
+390.70529 6370.2
+390.95618 3325.8
+396.18146 1107.0
+396.94455 728.6
+398.70187 1084.3
+398.94983 1330.1
+399.20935 2530.0
+399.45370 3235.2
+399.70313 4669.7
+399.95139 1829.3
+400.20029 1296.1
+401.19653 8817.7
+401.44693 9046.6
+401.69772 5396.2
+401.94882 2119.5
+402.95779 690.7
+403.20358 5652.9
+403.45389 5434.6
+403.54922 1163.3
+403.70428 3230.3
+403.88196 640.1
+415.72635 1066.4
+416.23221 774.9
+420.72391 2658.8
+421.22336 956.0
+422.21957 659.5
+427.54813 667.8
+429.72867 41579.9
+430.23041 25374.3
+430.73203 7402.9
+431.23178 1726.3
+432.55945 3318.5
+432.89374 2917.0
+438.56287 58038.2
+438.89706 45131.0
+439.23120 20321.6
+439.56543 5447.0
+441.12302 759.4
+442.22672 1618.7
+445.24490 1539.1
+451.71393 1221.9
+456.23102 7333.3
+457.23395 2010.5
+458.90698 1575.7
+459.24252 1265.7
+464.91034 12954.5
+465.24484 11902.5
+465.57886 5256.7
+465.91602 1084.6
+469.83173 3262.8
+469.89032 556.6
+469.97906 921.3
+469.99677 819.9
+470.09140 580.7
+470.11496 881.0
+470.16354 2578.6
+470.35413 607.0
+470.38266 2144.8
+470.49841 1136.0
+470.68665 955.8
+470.72021 2806.0
+470.86935 2630.0
+470.91385 606280.4
+470.95166 3077.2
+470.97668 1442.8
+470.99008 1220.9
+471.01785 1218.2
+471.03427 1133.7
+471.06357 2259.5
+471.08701 768.1
+471.14072 1249.6
+471.15378 839.7
+471.18875 1505.3
+471.20242 3302.8
+471.24734 560063.9
+471.30908 2170.7
+471.35068 798.4
+471.36951 901.3
+471.45135 2996.5
+471.53522 1763.7
+471.58121 264471.5
+471.73810 789.7
+471.78052 3055.6
+471.80933 601.0
+471.84775 616.0
+471.86780 1240.8
+471.91528 89448.7
+471.99689 3641.5
+472.04117 975.8
+472.07767 1116.0
+472.11142 1441.9
+472.18692 1251.1
+472.24939 19656.4
+472.33371 3640.7
+472.38647 941.8
+472.43582 627.5
+472.44937 737.2
+472.52509 763.7
+472.58389 5069.9
+472.67249 1555.8
+475.39255 905.8
+477.70776 778.0
+478.25366 1875.7
+478.75482 1084.0
+483.74817 6141.7
+484.24927 3073.0
+485.24594 706.9
+494.26041 1209.1
+498.91122 1422.5
+499.24857 1892.8
+503.76688 1015.7
+504.91574 4732.9
+505.25122 4433.5
+505.58551 1129.6
+508.24368 2048.4
+508.57919 1460.9
+508.75800 872.8
+508.91553 1227.7
+513.30627 1844.1
+514.24799 10133.1
+514.58203 9765.6
+514.91681 3605.5
+519.93732 10793.4
+520.27155 9288.6
+520.60577 4743.2
+520.93732 1725.0
+522.78296 612.7
+523.26373 22429.5
+523.59802 22950.8
+523.93219 12902.9
+524.26721 4546.2
+524.60309 1229.9
+532.49054 2120.4
+532.60095 866.1
+532.92865 801.6
+535.27405 1650.7
+540.28912 3627.1
+540.79144 2435.7
+541.20941 943.6
+541.29431 709.2
+546.60016 946.8
+547.01111 659.6
+553.28320 104865.6
+554.28625 29904.5
+555.28802 5642.2
+557.95093 1163.5
+559.21722 1356.5
+582.30249 12076.3
+583.30573 4471.2
+584.30835 862.4
+601.00409 1150.8
+601.33752 2530.0
+601.66833 641.0
+613.82373 7163.3
+614.32635 5649.8
+614.82837 2794.3
+618.81024 1157.9
+619.31244 1254.2
+630.41290 1088.9
+650.36462 2914.4
+651.36395 1301.1
+653.32806 1206.1
+654.29681 669.1
+657.33984 7403.6
+657.84155 5623.3
+658.34460 3264.6
+658.84741 994.8
+662.33301 6234.6
+662.83466 5212.5
+663.33307 1660.5
+666.36688 5187.0
+667.37140 1821.5
+674.36572 1428.6
+675.37970 802.4
+676.64911 960.8
+703.36859 576.4
+745.36505 9532.0
+746.36707 3866.8
+761.39667 4388.8
+762.39966 1926.3
+789.37872 725.3
+795.62427 1255.4
+829.42920 1526.5
+830.40875 786.4
+858.44940 16253.6
+859.45374 9217.8
+860.45361 3011.2
+923.34735 682.1
+931.97302 603.4
+989.45935 708.2
+999.33862 590.8
+1026.03003 705.3
+1057.25732 1018.9
+1188.31812 680.7
+1198.09912 3220.8
+1234.65808 647.7
+1258.62781 590.6
+1273.80310 613.9
+1335.04077 632.8
+1355.34875 692.2
+1468.32239 579.9
+S	2113	2113	418.9662646
+Z	4	1671.83376
+107.24770 1228.9
+116.13648 1220.8
+116.72022 1136.3
+120.08043 9882.5
+121.40343 1423.1
+121.78677 4915.5
+127.19102 1431.2
+133.03447 1303.6
+135.86932 1256.4
+152.07430 1268.7
+165.76495 1913.1
+166.00093 1233.1
+171.63733 1647.4
+172.07524 15789.3
+173.07938 1611.1
+173.93138 1164.9
+175.08626 17005.2
+175.11908 1989.1
+176.08940 2407.3
+182.80394 1406.9
+189.10158 2423.2
+197.71205 1178.1
+199.19827 1347.1
+199.23518 2006.4
+199.25111 3223.1
+199.27652 3576.5
+199.29390 3842.9
+199.30663 1536.6
+199.37120 1415.1
+199.37395 1430.1
+199.39180 1995.5
+200.06956 2792.8
+203.33064 1057.6
+216.11282 6028.3
+217.09691 53197.4
+218.10060 6210.5
+228.06531 2939.5
+229.83968 1471.3
+234.10986 2657.1
+234.12350 196535.8
+234.49969 1517.6
+235.12704 24790.9
+236.13098 1411.2
+244.16371 1408.4
+245.09236 5175.3
+249.15953 7581.3
+261.76968 1411.2
+262.11838 25246.4
+263.12152 3151.1
+268.14005 7744.8
+277.14554 95716.2
+277.64719 23357.3
+278.14877 2349.1
+278.65057 1352.2
+289.83035 1280.5
+291.65530 8035.5
+292.15704 2270.3
+297.12320 27245.7
+298.12653 4114.8
+298.42877 1245.4
+300.58966 1408.9
+312.17773 3335.0
+314.14978 3598.8
+316.83029 1689.3
+322.83438 4281.1
+323.16922 6003.5
+323.69153 1602.2
+325.11792 5343.5
+325.68649 8634.3
+326.12369 1122.4
+326.18607 2215.6
+326.21030 1075.2
+333.68759 9396.8
+334.18973 1822.0
+342.31931 1180.1
+348.93332 2788.6
+349.18600 2030.3
+350.27560 1554.6
+353.43686 72356.1
+353.68762 59576.9
+353.93842 26456.5
+354.18869 9420.1
+354.52737 1937.1
+358.20023 1432.1
+359.18857 7480.0
+359.69052 3402.5
+360.52927 33927.5
+360.86353 17828.7
+361.19879 5673.0
+364.18408 1855.1
+364.68881 1148.6
+367.20502 6629.7
+367.70728 4981.1
+373.18643 44680.2
+373.68835 16122.3
+374.18973 3825.0
+374.43973 1972.4
+374.69202 1329.3
+375.69730 1297.2
+378.93900 3188.6
+379.17346 2216.8
+381.20166 3498.9
+381.44513 1711.8
+381.69464 3696.9
+384.15387 7195.4
+385.15189 1219.6
+385.94754 4823.7
+386.19836 3249.2
+390.20386 24353.0
+390.45465 23931.6
+390.70529 13429.5
+390.95480 3528.8
+392.03006 1178.2
+396.18015 3259.7
+396.20544 2089.3
+396.68155 1389.2
+398.69720 1534.7
+399.20993 4425.5
+399.45337 6354.1
+399.70267 7571.9
+399.95154 3011.8
+400.19824 2920.7
+401.19623 23787.8
+401.44684 18015.8
+401.69791 10520.9
+402.20193 1283.5
+403.20261 17209.0
+403.45367 9982.9
+403.54611 2228.0
+403.70404 1911.2
+403.88290 1511.3
+403.95306 1715.3
+415.73108 1449.4
+420.72333 4627.5
+421.22525 3830.1
+427.58755 1840.9
+429.72849 89908.6
+430.23019 48546.7
+430.73184 12602.7
+431.23328 2710.8
+432.55923 7253.7
+432.89380 6278.6
+433.22632 2447.6
+438.56253 133358.4
+438.89670 96323.5
+439.23102 32201.2
+439.56528 15018.2
+445.24374 3682.8
+451.71332 2159.5
+452.20901 1718.9
+456.23074 17254.9
+457.23444 3786.1
+458.90634 2890.4
+464.91055 28123.7
+465.24475 29994.3
+465.57965 10246.9
+465.91458 2552.4
+469.11441 1301.0
+469.83615 6162.3
+469.86490 2946.3
+470.02719 3926.5
+470.13037 1845.1
+470.17178 5251.6
+470.37646 4871.9
+470.50983 1513.2
+470.53812 1571.3
+470.67175 1638.1
+470.68323 1497.4
+470.71597 4823.9
+470.86163 3332.9
+470.91342 1196854.8
+470.96240 4913.1
+470.97815 2689.4
+470.98962 2047.6
+471.07843 2230.6
+471.09464 2808.9
+471.24713 942937.1
+471.41345 1278.6
+471.44604 7748.0
+471.58109 400940.7
+471.78177 5818.3
+471.80774 4799.3
+471.91495 128833.2
+471.99435 8469.3
+472.13916 3571.0
+472.24915 32358.9
+472.33057 6189.3
+472.58344 5545.9
+472.66418 1957.7
+472.98953 1670.5
+478.25589 4464.9
+478.75717 2387.6
+483.74741 14398.1
+484.24911 6965.1
+484.75272 1806.2
+485.24295 1639.1
+494.25107 1599.9
+498.91019 1966.8
+503.76385 2011.8
+504.91623 8007.9
+505.24982 7192.9
+505.58444 3197.0
+505.91895 1991.2
+508.24237 4918.8
+508.58002 4696.2
+508.91156 1687.5
+513.30463 4499.9
+513.93616 1496.3
+514.24725 21084.2
+514.58185 18588.4
+514.91650 9618.7
+515.25336 2237.6
+517.25757 1920.4
+519.93671 20524.8
+520.27124 17415.8
+520.60614 5969.2
+520.93970 5405.2
+523.26337 54650.8
+523.59784 49865.9
+523.93182 23505.9
+524.26617 6337.0
+531.22394 1842.9
+532.49188 4299.4
+532.52301 2490.5
+535.27179 6166.6
+540.28998 9135.3
+540.79022 5281.5
+541.20551 1938.8
+541.29694 1831.0
+553.28290 244890.6
+554.28564 63563.8
+555.28821 11190.8
+558.81494 1537.7
+559.21533 2332.6
+582.30212 28230.1
+583.30493 9917.5
+584.30664 2413.4
+601.00580 3267.6
+609.80780 1492.9
+613.82300 20937.5
+614.32538 13639.3
+614.82806 4694.4
+618.80627 3421.4
+619.31451 1650.9
+650.36578 8533.8
+651.36945 2859.9
+653.32257 1715.6
+657.34021 19785.9
+657.84186 17239.7
+658.34338 5789.3
+662.33228 15439.8
+662.83319 12027.3
+663.33557 4369.8
+666.36877 10941.4
+667.36945 3417.5
+674.36456 4231.1
+676.60852 2239.5
+731.18634 1488.1
+743.38776 2753.8
+745.36560 18435.8
+746.36792 9088.1
+747.36371 1753.8
+761.39697 8382.9
+762.39771 4677.0
+795.62616 1843.1
+829.43079 4689.8
+830.42834 2495.6
+858.44885 37761.9
+859.45099 17004.0
+860.45636 5049.7
+874.61554 1567.7
+925.10645 1611.7
+1089.58691 1594.5
+1198.09814 6136.6
+1370.87280 1438.1
+1545.20972 1274.7
+S	2114	2114	1879.90124127
+Z	2	3757.955
+Z	3	5636.428
+526.44745 924.9
+532.49939 2007.6
+632.92896 594.2
+676.62170 1249.9
+795.63074 1033.4
+1171.61853 671.6
+1198.11975 3484.3
+1404.75317 613.6
+1525.51294 742.3
+1541.45093 779.9
+1776.89954 633.6
+1870.38074 874.6
+1876.20837 660.2
+1878.43384 866.7
+1879.06934 1564.2
+1879.48157 19714.8
+1879.85791 1426.2
+1880.21863 1108.6
+1880.43213 873.7
+1880.79480 653.1
+1907.05750 7382.0
+1930.75098 816.7
+S	2115	2115	1907.51440793
+Z	2	3813.181
+Z	3	5719.268
+532.51392 1655.6
+549.15741 885.1
+676.64069 793.2
+731.12024 886.1
+731.91602 582.1
+795.62671 768.7
+805.99664 687.4
+946.76630 576.2
+1019.70496 1020.5
+1057.23132 1105.1
+1167.96082 684.0
+1198.14197 2422.2
+1525.40906 960.1
+1870.37024 1022.1
+1878.99756 1897.9
+1879.52930 20000.1
+1880.12390 1965.2
+1882.22046 745.3
+1883.48120 725.2
+1907.03943 7448.5
+1918.79639 766.5
+1930.60449 1098.3
+S	2117	2117	1879.92724127
+Z	3	5636.506
+Z	2	3758.007
+532.45667 1906.7
+676.63831 1305.3
+778.71161 788.9
+832.19360 591.5
+1112.76611 583.9
+1198.01550 3325.5
+1250.26746 671.3
+1305.42871 596.0
+1381.48608 678.1
+1397.59583 585.7
+1525.39893 979.1
+1581.99792 634.7
+1625.67004 596.5
+1629.99585 583.2
+1780.64722 717.5
+1805.92358 818.1
+1878.58301 692.7
+1879.09998 800.9
+1879.52539 19799.7
+1880.01587 1212.9
+1880.53833 1093.6
+1886.45422 617.2
+1906.74548 1192.7
+1907.05762 7390.1
+1907.39124 789.1
+1923.36621 756.3
+S	2118	2118	1907.4398246
+Z	2	3813.032
+Z	3	5719.044
+532.45935 2204.5
+577.77618 620.3
+667.05902 683.8
+676.62592 1043.4
+706.52771 675.8
+778.86932 653.2
+782.96655 733.0
+795.61639 1029.7
+899.49371 639.1
+1057.22656 863.4
+1076.75623 680.4
+1192.46277 686.4
+1198.03503 3247.9
+1339.61475 826.2
+1756.69226 642.8
+1873.07581 816.2
+1878.89172 1492.3
+1879.49768 19428.3
+1884.35352 677.9
+1907.05969 7257.1
+1918.80383 641.1
+1930.48584 911.7
+1955.94580 657.2
+S	2119	2119	418.9657771
+Z	4	1671.83181
+116.65991 41977.0
+120.08018 120630.7
+121.32041 41937.7
+121.78650 103846.4
+121.78938 120785.0
+121.80104 51174.2
+157.60272 41580.5
+160.29994 41705.5
+172.07468 73851.2
+175.08571 102266.4
+178.92940 38127.3
+192.11418 41328.8
+198.90652 62152.0
+199.17020 63563.3
+199.18346 83769.8
+199.26965 105109.8
+199.28156 208257.3
+199.30029 59543.1
+199.38010 58149.8
+199.45918 44008.8
+199.83507 41404.5
+217.09644 361826.5
+218.10057 47077.0
+234.12297 1747450.6
+235.12695 200830.4
+262.11765 213972.5
+266.14536 44659.7
+267.72614 43966.3
+277.14471 514267.9
+277.64673 137367.6
+279.43369 40581.6
+295.94336 51541.9
+297.12299 143773.3
+314.14902 66104.1
+330.50101 44892.2
+353.43625 199773.5
+353.68738 205129.4
+353.93863 99965.4
+355.95978 47047.2
+360.52795 225942.5
+360.86246 113295.3
+373.18585 147372.5
+381.35303 61959.8
+384.15390 61958.9
+390.20291 100119.4
+390.44919 78539.0
+390.70697 56727.8
+403.20157 110991.2
+403.45352 91108.1
+403.95474 196033.6
+404.20474 158990.4
+404.45468 61979.5
+405.69800 477308.2
+405.94827 406328.7
+406.19962 267600.6
+429.72717 558140.4
+430.22925 269082.2
+438.56149 575184.6
+438.89554 530139.1
+439.22943 258860.1
+456.22980 109966.6
+464.90787 238579.8
+465.24213 126719.2
+470.71570 49062.1
+470.91232 9196578.0
+471.24646 6723677.5
+471.58057 2730536.0
+471.91476 789218.6
+471.99686 59122.2
+472.24680 102393.4
+476.78214 69025.0
+478.24979 51398.6
+508.24158 66534.2
+523.26202 275320.0
+523.59692 548798.8
+523.93152 137987.0
+532.50995 162231.0
+549.14581 53541.2
+553.28223 998074.3
+554.28326 236582.1
+571.51868 45182.6
+582.30017 85882.7
+613.82184 52786.2
+620.10321 46068.8
+623.32935 45513.5
+657.83862 63356.8
+745.36243 63984.7
+746.91870 43435.9
+777.27216 41188.8
+795.62482 77539.0
+829.29980 48053.9
+858.44330 153482.1
+859.45020 57604.0
+989.77057 50410.0
+1050.91785 48136.0
+1198.13367 253879.2
+1233.07410 42449.4
+1307.86108 52281.3
+1348.19177 56276.7
+1521.71814 40708.1
+1635.60730 41177.8
+S	2121	2121	418.9670896
+Z	4	1671.83706
+110.78014 9460.3
+113.45724 10599.5
+120.08017 44292.4
+121.78895 34956.1
+126.99109 8326.3
+153.14087 8226.8
+155.31528 9582.7
+156.33830 7886.6
+161.89249 8125.2
+171.63078 11053.8
+172.07492 37392.3
+175.08600 32356.8
+175.11885 8833.5
+193.44933 8452.6
+198.91127 10241.7
+199.18120 13970.4
+199.27866 52126.4
+199.37628 17707.3
+200.06561 9913.0
+206.09102 9716.6
+214.50226 8284.9
+214.92232 8637.9
+216.11229 20476.1
+217.09656 114743.0
+221.56223 8974.1
+234.12308 548294.1
+235.12665 70003.8
+245.09077 12631.2
+250.16769 8522.2
+255.27600 7737.3
+262.11789 69471.2
+263.12051 9977.6
+263.60892 9850.3
+268.13968 18962.7
+277.14508 222874.5
+277.64636 50857.0
+291.65527 11292.0
+297.12338 28188.1
+309.89218 9941.5
+312.29843 7957.3
+322.83533 10264.5
+323.16849 11140.2
+323.68762 9101.4
+325.11847 13684.3
+325.68539 15093.4
+334.18512 9809.2
+350.26953 12368.3
+353.43628 127702.2
+353.68701 108993.1
+353.93805 40720.1
+354.18759 11837.2
+360.52872 93926.2
+360.55151 7623.9
+360.86273 51862.8
+372.70364 9215.5
+373.18564 63801.6
+373.68671 27307.1
+375.53717 7621.1
+384.15466 13625.3
+390.20352 45740.2
+390.45404 49733.9
+390.70514 25471.8
+399.45624 9381.5
+399.70233 19565.1
+399.95374 10436.7
+403.20145 44846.8
+403.45294 42211.5
+403.70471 12002.2
+403.95456 49929.2
+404.20526 46655.9
+404.45651 30307.0
+405.69803 166191.0
+405.94879 209126.6
+406.19873 83948.8
+406.45035 29003.7
+407.70709 11309.2
+429.72726 170792.3
+430.22919 91087.9
+430.73068 21011.5
+438.56189 273758.6
+438.89581 187776.1
+439.22983 63008.9
+439.56427 23149.4
+456.22995 24908.2
+459.75394 8699.3
+464.90887 38429.3
+465.24295 59835.2
+465.57968 16056.2
+465.90836 10876.0
+469.83832 16273.3
+470.04303 7821.9
+470.17242 13828.8
+470.36160 8778.1
+470.37958 9389.8
+470.70480 14413.0
+470.91263 3227881.3
+471.24667 2487095.5
+471.44983 15926.8
+471.58060 1082661.1
+471.78909 15431.7
+471.91446 287964.5
+471.98410 21129.7
+472.24915 29203.0
+472.32581 15341.6
+478.25455 10544.3
+483.74490 14118.4
+484.24924 12193.9
+489.86664 7900.9
+504.91501 14298.8
+505.24951 10765.2
+508.24304 10020.6
+508.57742 14957.6
+514.24750 60154.7
+514.58124 27396.0
+514.91547 23658.6
+519.93744 47931.4
+520.27277 26320.5
+520.60480 9909.6
+523.26300 140378.5
+523.59705 144293.4
+523.93170 64721.1
+524.26538 10591.5
+532.50482 31956.6
+539.32770 9231.1
+540.37311 9864.5
+540.77887 8061.5
+553.28229 383316.6
+554.28552 87197.9
+555.28711 10600.9
+559.21173 12761.3
+582.30133 36438.7
+583.30109 11017.0
+613.82056 24452.3
+614.32074 13377.7
+618.80133 10241.5
+619.47137 10330.9
+625.02100 7795.4
+638.20398 9356.1
+646.35791 9886.7
+650.36969 10125.7
+657.33698 17960.5
+657.84027 21911.0
+662.33112 20079.6
+666.36823 12704.8
+676.63409 15022.0
+681.53857 9131.4
+685.98169 10960.6
+686.28119 8059.4
+745.36621 27478.3
+795.63385 16350.9
+829.42755 11473.2
+857.84222 9456.5
+858.44556 67153.1
+859.45074 21488.7
+1057.25684 10151.1
+1114.29199 8963.9
+1140.27112 10626.5
+1198.12744 55236.3
+1313.46057 9719.3
+1318.78503 9339.6
+1361.89612 12411.9
+1412.30347 10027.8
+1421.14404 8185.7
+1497.71033 8963.6
+1612.44812 9381.1
+S	2122	2122	592.5873896
+Z	4	2366.31826
+154.04239 494.3
+162.15395 615.8
+165.76741 907.8
+171.64069 631.4
+187.14432 938.5
+188.20319 691.1
+188.22444 551.7
+188.23802 585.3
+188.26712 1710.4
+188.28079 2167.2
+188.30461 2177.8
+188.32004 1366.0
+197.68777 602.2
+199.19180 681.5
+199.20744 1282.1
+199.25888 1010.0
+199.26874 1042.7
+199.28136 1484.9
+199.28998 1291.0
+199.30351 1867.1
+199.31837 745.3
+199.36794 665.1
+199.40143 665.7
+201.12318 1446.0
+212.63499 631.3
+220.09277 683.2
+233.16440 2729.6
+283.78143 526.4
+304.11725 666.4
+308.85480 608.6
+308.89020 561.7
+314.20490 861.4
+330.22165 618.0
+345.21967 598.2
+370.45126 538.1
+393.19901 993.4
+439.20914 632.5
+457.27826 848.8
+467.20288 740.3
+482.63885 840.4
+510.91080 1094.4
+523.04272 1920.6
+523.29669 1262.6
+526.53040 545.8
+529.49725 1716.5
+529.74908 914.6
+530.00208 783.7
+530.25287 972.8
+532.49487 1627.7
+534.25061 1047.3
+547.33325 1024.0
+551.31818 1173.6
+556.34753 3541.1
+557.35028 1536.7
+558.26373 658.3
+560.78162 612.1
+566.55817 1387.7
+566.80817 2917.9
+567.05853 1728.7
+574.35760 3069.2
+575.35773 1135.7
+577.52502 1229.3
+577.76953 842.4
+598.32532 1310.6
+598.66010 1190.4
+630.37970 1199.2
+631.34857 7074.7
+631.68286 13517.5
+632.01770 7811.4
+632.25934 651.5
+632.35565 939.6
+638.84583 752.7
+639.64203 997.5
+639.97571 772.1
+650.96588 1014.6
+655.30988 653.4
+671.08661 1997.6
+671.33466 1720.2
+671.58246 1129.8
+671.83691 1075.0
+676.62854 747.4
+677.98486 4979.2
+678.18195 576.3
+678.31989 4616.1
+678.65070 2477.9
+678.98401 1189.4
+691.38239 3787.2
+691.88257 2731.1
+692.38647 800.2
+702.72565 10123.5
+703.06061 16236.8
+703.39459 9698.9
+703.72760 1421.6
+705.99835 934.9
+711.66754 26355.3
+712.00195 26041.8
+712.33588 17281.8
+712.66901 5733.7
+712.99689 931.0
+714.47589 572.4
+716.32813 847.1
+716.83331 913.5
+719.36584 755.0
+724.97662 1707.1
+725.30695 1280.6
+731.09869 847.4
+732.58850 639.4
+734.88843 900.3
+741.61017 596.8
+745.06921 744.1
+747.01947 820.7
+748.95471 644.9
+752.69635 644.7
+755.41895 981.5
+765.86163 1001.0
+766.35834 1515.2
+811.92126 711.8
+839.85333 618.5
+896.98724 10741.8
+897.48767 16685.2
+897.98907 9165.5
+937.41638 548.8
+947.02057 2398.9
+967.57062 782.9
+1013.78265 740.5
+1021.96796 731.8
+1197.97583 659.8
+1198.10217 3050.3
+1342.34290 679.5
+1483.81934 668.1
+1525.35364 788.1
+1666.52942 616.5
+1669.61926 708.3
+1678.95703 673.3
+1870.18591 865.2
+1877.97961 757.9
+1878.72949 820.0
+1879.05017 1183.7
+1879.49524 20034.1
+1879.90198 1456.8
+1880.24304 1368.5
+1881.03882 770.5
+1907.07507 7546.1
+1930.51709 1156.5
+1986.77869 539.1
+S	2123	2123	607.5553246
+Z	4	2426.19
+165.76707 820.1
+174.89723 546.3
+185.90244 564.9
+188.25603 879.8
+188.26813 854.9
+188.27708 1189.9
+188.28792 1140.3
+188.29512 1092.2
+188.30698 974.5
+188.31497 785.3
+198.85117 670.1
+198.90578 1074.6
+199.18799 961.8
+199.25638 1377.9
+199.27022 1802.9
+199.27617 1196.0
+199.28651 2008.4
+199.30656 574.5
+204.13426 1032.3
+215.01695 504.7
+215.58038 593.2
+226.58115 533.1
+237.65189 566.2
+239.61464 488.5
+255.29756 670.9
+255.76483 525.7
+277.12909 553.2
+280.19080 625.7
+291.43402 507.3
+293.54645 494.5
+296.09012 605.9
+336.78552 521.9
+342.28577 585.5
+349.00623 722.2
+351.20160 3262.5
+354.93869 610.9
+359.23807 678.2
+365.60825 594.2
+371.19891 653.2
+381.37198 602.3
+398.21683 816.6
+404.16315 1232.3
+427.55688 585.0
+428.72696 1966.6
+439.23462 944.2
+447.75003 2277.4
+488.28018 894.4
+504.28833 1086.8
+532.49316 1926.1
+552.77136 1061.0
+555.73608 482.9
+555.77625 701.8
+561.77753 1356.9
+580.97858 923.7
+581.31506 1005.9
+581.64978 1113.5
+582.28516 1290.4
+582.53693 868.1
+589.28314 682.6
+630.42413 798.2
+636.99927 1359.1
+637.33563 848.5
+655.82825 1221.3
+657.81641 896.7
+676.63586 1019.2
+680.01410 677.2
+699.02130 7423.7
+699.35663 4812.7
+699.69043 1704.4
+700.03564 742.2
+707.34924 2797.6
+707.85254 1514.7
+714.03345 601.8
+722.70032 27914.6
+723.03424 21530.9
+723.36780 9881.4
+723.70203 3946.4
+724.03589 1208.1
+725.89801 572.7
+727.33862 748.1
+733.52332 759.6
+738.33374 784.8
+757.85083 631.9
+759.50342 737.1
+763.89130 4787.1
+764.39099 2929.4
+764.89307 1762.8
+765.40430 933.6
+771.03796 703.3
+776.04346 6963.5
+776.37683 6726.4
+776.71136 3046.4
+777.04779 885.2
+813.42883 873.4
+856.44830 2532.4
+857.45532 956.7
+858.42810 745.2
+910.45190 557.4
+939.83844 693.6
+977.81049 584.3
+1025.40320 640.2
+1057.24817 986.5
+1198.10474 3032.3
+1358.77148 710.0
+1365.50220 590.2
+1525.40076 853.4
+1694.52795 569.4
+1776.93591 809.5
+1794.23730 604.0
+1873.07544 740.4
+1878.83337 836.0
+1879.12488 814.3
+1879.53503 19607.9
+1879.78943 2218.4
+1879.95850 1363.7
+1880.15588 746.7
+1880.32458 847.9
+1882.17273 700.3
+1906.79578 886.4
+1907.11084 8028.3
+1930.63391 1023.4
+S	2125	2125	418.9716971
+Z	4	1671.85549
+110.09660 14818.5
+110.38312 11293.8
+111.38605 12742.6
+120.08010 24327.2
+120.68212 12481.9
+121.78866 47570.8
+123.00439 11168.1
+128.58174 16465.6
+155.34514 11738.9
+156.58403 13393.3
+157.60968 13960.1
+158.80875 10622.9
+158.81226 11192.5
+164.84436 12435.3
+169.49922 11591.0
+171.63368 12841.6
+172.07487 15761.7
+175.08603 32179.1
+186.11856 12138.9
+187.22116 11691.3
+190.99112 10283.8
+197.70558 11770.8
+198.80374 13037.3
+198.90297 21985.3
+199.22748 17698.3
+199.25049 28554.7
+199.27722 37600.7
+199.28375 47191.2
+199.29320 33379.6
+199.38292 19920.7
+205.03000 12237.3
+207.90028 11781.3
+209.22775 13106.1
+210.73233 11256.1
+213.75351 13030.8
+217.09656 94167.4
+222.47972 12464.0
+234.12315 468289.7
+235.12653 32717.9
+238.70601 14192.8
+243.21593 12069.0
+262.11786 72064.8
+275.75217 14822.2
+275.91385 12328.5
+277.14536 155438.0
+277.64584 20948.2
+280.19623 15802.1
+286.67468 12067.7
+297.12286 36076.5
+314.14975 14304.6
+317.21829 12503.3
+323.16895 16209.1
+352.31235 16701.6
+353.43674 78012.2
+353.68774 43587.2
+353.93835 14977.1
+354.18875 15603.4
+360.52890 62321.2
+360.86227 38353.7
+373.18533 27513.6
+374.21692 13358.4
+374.38425 12966.5
+390.20355 48768.8
+390.45416 20677.4
+390.70599 15422.9
+391.34100 13970.7
+399.70160 14428.3
+399.95459 14912.8
+403.20123 29802.2
+403.45374 22483.3
+403.95486 31839.4
+404.20609 27623.9
+405.69794 114050.6
+405.94919 101233.9
+406.20023 81121.5
+406.45032 18268.9
+421.60178 14005.2
+425.80389 13553.3
+429.72818 128934.9
+430.22958 62331.4
+430.73123 23457.5
+438.56186 194376.5
+438.89658 123359.9
+439.23053 32468.9
+439.56241 19968.6
+447.89304 12706.5
+456.19330 11688.1
+456.23093 22926.4
+464.91101 47505.1
+465.24478 27489.7
+469.91806 14707.0
+470.38403 12346.4
+470.91275 2500261.0
+471.24686 1990264.0
+471.58090 758331.1
+471.91486 161408.6
+475.01666 12270.3
+476.76379 11962.8
+490.90744 12492.7
+505.24875 17099.5
+514.24854 33812.8
+514.58209 21146.0
+519.93677 39770.5
+522.18646 13130.3
+523.26367 110162.4
+523.59766 109571.6
+523.93317 30457.0
+524.26550 17193.4
+526.98706 14453.0
+531.85748 12430.8
+532.48553 35948.3
+553.28198 276690.7
+554.28717 65712.1
+569.61151 14727.2
+582.29919 22789.3
+598.25610 18504.9
+598.57745 19425.7
+602.41199 11611.8
+644.97626 14957.2
+657.83289 19860.6
+662.32471 19035.3
+666.35846 15337.9
+670.29559 13006.5
+671.37689 12421.9
+674.87079 11296.8
+676.65509 18303.8
+731.14032 13035.4
+742.95282 12788.1
+745.36420 21022.8
+778.16296 15522.3
+795.60303 20441.3
+853.86041 11820.1
+858.07593 13837.0
+858.44879 36305.6
+859.45001 18986.0
+868.05713 13628.5
+943.82227 12333.5
+965.86682 14182.1
+983.49493 12778.1
+1019.71857 13475.7
+1050.74731 15125.5
+1198.08386 73932.3
+1257.47510 11535.0
+1488.27246 13016.2
+1499.77234 12612.5
+1573.99622 13809.2
+S	2126	2126	592.5938596
+Z	4	2366.34414
+150.38602 674.9
+170.75299 625.4
+171.48109 525.6
+171.64226 573.9
+194.62946 527.5
+196.21025 555.8
+198.90683 960.1
+199.18384 1443.3
+199.28183 3647.3
+199.38028 1456.4
+200.55963 603.0
+201.12334 1938.1
+233.16505 1585.4
+233.56943 629.4
+248.04924 501.1
+290.56552 669.1
+308.89395 590.3
+352.27222 713.2
+364.54309 596.0
+377.42838 703.3
+407.60391 564.2
+413.57761 524.2
+446.28989 629.2
+486.58136 899.1
+493.78040 840.5
+502.12228 583.1
+510.91144 1200.7
+516.31580 583.3
+523.04083 1181.6
+525.00323 772.0
+526.29736 830.3
+529.50055 1222.2
+529.75208 1718.9
+532.46783 1874.1
+534.25757 835.6
+547.32965 835.2
+549.13641 769.1
+550.31995 723.7
+556.34802 1550.1
+566.81036 1480.6
+573.56543 809.9
+574.35950 1331.9
+577.77161 2093.1
+578.02112 1032.3
+630.38641 1424.3
+631.34918 7807.5
+631.68372 6589.1
+632.01807 886.6
+632.75745 656.2
+638.83105 895.8
+639.64099 1738.1
+639.97345 1279.6
+642.38153 1232.5
+650.98303 984.3
+669.38074 659.3
+671.33923 825.9
+673.80145 572.1
+676.47675 650.8
+676.65778 945.6
+677.98511 4279.2
+678.32092 4471.1
+678.65448 1683.4
+684.12610 736.2
+691.38348 1667.7
+693.91461 564.4
+699.04584 695.0
+702.72675 7210.4
+703.06073 7369.6
+703.39502 1218.1
+711.66803 24024.2
+712.00238 21946.8
+712.33588 12433.2
+712.66919 5149.9
+713.00354 1308.7
+716.32904 655.0
+720.33929 704.2
+720.85388 989.4
+721.35077 900.8
+724.97327 1815.0
+725.30884 2251.3
+725.98419 841.2
+745.07135 1553.4
+745.40308 731.0
+753.33588 756.9
+762.22583 724.7
+765.85986 1188.5
+766.37012 949.1
+791.46454 1047.3
+795.62433 775.0
+800.40674 901.8
+811.41937 1052.4
+830.44507 927.9
+896.98773 8464.9
+897.48706 6317.4
+897.98981 773.4
+947.02478 775.2
+975.55280 572.8
+1009.68140 681.7
+1188.22803 770.6
+1198.04260 3277.9
+1238.15686 655.3
+1260.47144 728.4
+1522.25415 667.9
+1525.39746 860.3
+1684.39783 582.3
+1770.78711 625.4
+1870.14258 1281.5
+1877.65674 612.9
+1878.85486 1366.3
+1879.57642 19389.5
+1880.09473 863.1
+1880.34131 1021.4
+1880.79932 803.0
+1907.10242 7934.8
+1918.79822 580.0
+1930.53528 903.7
+1958.58459 660.8
+1985.22632 566.7
+S	2127	2127	419.4740746
+Z	4	1673.865
+106.88181 4543.3
+110.33226 4272.1
+111.48554 3770.5
+112.39182 3635.0
+114.98393 4083.7
+120.07999 12997.6
+121.79070 16306.2
+135.87155 3594.7
+138.22171 3525.6
+146.57773 4544.0
+158.40508 3381.8
+162.61411 4063.3
+168.20750 3558.3
+169.48561 5135.2
+172.07469 8847.1
+173.70570 4089.0
+174.58287 3841.4
+175.08629 17034.6
+189.10255 4317.3
+191.43321 4026.8
+198.90999 7191.6
+199.19478 4918.3
+199.23621 5246.3
+199.26828 8356.6
+199.27904 19063.7
+199.37741 6602.4
+199.41225 4853.3
+213.90915 4662.2
+215.75684 5162.1
+216.11151 5320.3
+217.09673 53350.0
+233.56470 5059.8
+234.12321 250394.8
+235.12671 30129.7
+245.09232 4490.1
+249.15953 4147.5
+252.72903 3942.4
+262.11823 38408.3
+265.03244 3953.4
+268.13940 3975.0
+272.22589 3931.7
+277.14508 81094.8
+277.64661 16139.3
+297.12262 16701.6
+308.89084 4635.6
+311.34222 4562.2
+322.83521 7863.0
+323.16684 5303.3
+325.11823 8760.5
+328.16168 4181.4
+333.54132 4366.6
+353.43634 42437.0
+353.68753 37580.7
+353.93820 15024.6
+354.18961 9165.4
+360.52921 24664.6
+360.86295 16614.1
+367.20520 5058.1
+373.18564 23066.5
+373.68637 8580.6
+381.34067 5584.5
+390.20303 15186.7
+390.45361 29510.9
+390.70132 4447.9
+403.20105 9978.1
+403.45453 9845.4
+403.95435 33846.9
+404.20526 22129.3
+404.45645 10806.3
+405.69830 65997.3
+405.94928 76700.0
+406.20020 25233.9
+406.37396 4225.0
+406.44995 6652.7
+406.73581 4347.0
+407.45993 5742.7
+429.72803 60770.0
+430.23010 39506.1
+430.72852 6215.9
+436.49564 3792.2
+438.56207 102795.0
+438.89639 77004.4
+439.23071 22907.3
+456.23053 9595.3
+458.90640 5217.7
+464.90952 18307.6
+465.24374 17525.9
+466.88721 4198.9
+470.16525 5343.7
+470.37274 4520.8
+470.91290 1258247.1
+471.24698 1087280.0
+471.45178 7219.4
+471.58096 451948.4
+471.78152 5261.3
+471.91525 140008.7
+471.99771 5061.7
+472.13840 5572.8
+472.24933 19959.0
+472.33673 5907.4
+476.78186 6046.9
+478.24948 6639.3
+482.63864 4760.4
+502.39139 4463.7
+504.92017 6886.0
+505.24951 8323.6
+514.24640 13814.3
+514.58154 17337.0
+514.91718 7700.3
+515.25049 5633.6
+519.93878 15850.7
+520.27136 15647.3
+520.60382 9812.9
+523.26343 51952.2
+523.59766 66500.0
+523.93103 25790.8
+524.26721 6720.0
+532.43542 13510.0
+540.29205 5495.6
+540.79254 6768.0
+553.28247 133829.9
+554.28516 31217.3
+582.30084 11694.1
+614.32697 5548.6
+618.81262 6076.0
+630.38696 6102.1
+640.64044 4655.3
+657.33862 12126.9
+658.34381 4603.4
+666.36896 5779.2
+676.60138 5892.1
+680.15662 4370.3
+731.09357 6048.8
+745.36786 9653.2
+746.37299 4677.3
+761.39136 5313.8
+783.08759 4957.6
+795.62354 6652.8
+858.44836 24022.7
+859.45251 11313.3
+864.74274 4101.5
+878.53314 4090.9
+1025.40955 4212.4
+1030.65625 3642.9
+1197.97412 26091.8
+1246.67651 3793.8
+1525.35730 5641.6
+1658.71204 4473.8
+S	2129	2129	418.9673021
+Z	4	1671.83791
+107.06745 592.4
+112.86033 601.0
+120.08035 2614.3
+121.78924 2480.1
+127.65245 710.6
+130.14267 617.2
+131.36345 579.7
+132.47894 676.5
+132.77235 603.7
+135.56702 600.5
+140.67747 713.8
+153.13458 868.3
+157.59810 554.1
+164.76236 589.6
+169.44836 568.9
+169.45288 487.3
+169.48038 646.6
+171.86885 513.0
+172.07532 2434.2
+175.08620 1911.2
+175.11890 675.5
+176.09029 879.2
+184.22125 514.8
+198.90480 716.8
+199.26434 1998.3
+199.27542 2425.5
+199.30403 902.0
+199.37221 1103.6
+216.11299 873.9
+217.09685 8518.1
+218.10040 1532.3
+234.12340 35447.4
+235.12680 6034.2
+262.11816 5412.5
+268.14011 890.8
+277.14542 13464.5
+277.64676 5313.3
+291.65323 1071.1
+297.12277 3109.5
+298.12537 772.1
+305.53995 525.0
+307.24927 526.7
+308.87375 782.3
+312.17688 645.7
+322.83588 1311.3
+322.92944 518.0
+325.11987 945.1
+325.68585 1275.0
+330.91135 550.1
+332.96140 757.7
+333.68903 1114.9
+349.18335 611.6
+353.43707 5692.6
+353.68719 8469.0
+353.93832 5237.0
+354.18912 1309.9
+359.18738 623.2
+360.52872 3860.9
+360.86389 5559.1
+361.19757 1726.0
+367.20432 742.6
+367.70853 642.1
+373.18616 5617.7
+373.68866 2470.1
+374.18820 1523.0
+376.73193 620.7
+381.32996 982.2
+384.15402 972.7
+390.20404 2668.2
+390.45419 3936.8
+390.70538 2300.9
+390.95639 785.2
+393.21814 615.1
+399.21017 920.8
+399.45114 953.9
+399.70465 1284.7
+399.95041 1381.9
+401.44559 622.0
+403.20248 1959.8
+403.45422 2150.7
+403.70444 1714.7
+403.88431 878.3
+403.95578 3002.7
+404.20480 2080.5
+404.45688 2240.4
+405.69879 10091.0
+405.94940 9891.6
+406.19989 8780.4
+406.44980 2588.4
+429.72839 11292.0
+430.23022 8883.4
+430.73013 2578.8
+438.56241 17455.9
+438.89661 15295.4
+439.23111 8707.6
+439.56497 2364.6
+452.16885 511.0
+456.22989 2333.7
+464.91034 4395.3
+465.24521 3628.0
+465.57889 2695.7
+465.91278 743.9
+470.24200 816.5
+470.91336 155295.0
+471.24734 198705.8
+471.29190 657.5
+471.44733 1393.5
+471.58124 107147.0
+471.78253 1047.7
+471.91541 27294.7
+471.99542 1003.1
+472.11807 808.7
+472.24774 657.9
+472.33093 938.8
+482.61670 917.6
+483.74863 1960.9
+484.24738 691.3
+490.29437 1078.2
+493.92004 623.4
+504.91202 917.7
+505.24844 1714.9
+508.58136 872.1
+514.24744 1965.0
+514.58234 4480.5
+514.91608 2973.4
+515.24860 711.2
+519.93646 2785.9
+520.27216 3218.7
+520.60492 2179.1
+520.93976 958.1
+523.26355 7696.8
+523.59760 12874.5
+523.93170 5122.5
+524.26398 1430.2
+532.44830 1861.2
+540.28760 759.8
+540.79352 777.3
+549.10999 783.7
+553.28253 25966.3
+553.33167 690.1
+554.28619 9385.1
+555.28748 2023.6
+559.21906 833.1
+582.30334 3664.4
+583.30518 1628.6
+598.32074 717.2
+603.38141 1792.5
+613.82147 1663.5
+614.32532 1479.8
+615.27820 616.3
+630.35413 859.7
+657.33966 2496.8
+657.84064 1102.8
+658.34314 1606.9
+662.83087 1089.3
+663.70129 600.7
+666.36755 830.6
+676.63226 970.8
+731.06958 620.7
+745.36621 1642.9
+746.37250 1185.5
+761.39667 781.0
+779.30341 558.4
+835.94702 736.7
+858.44775 4113.9
+859.14069 631.3
+859.45319 2473.7
+860.44971 820.3
+869.31653 625.6
+962.83282 691.9
+1057.22852 631.9
+1143.27454 681.1
+1147.95142 548.4
+1197.99976 3260.2
+1260.28748 645.8
+1273.72607 665.3
+1318.08240 600.1
+1374.66248 622.7
+1514.03918 596.5
+1525.27454 548.8
+S	2130	2130	1880.03840793
+Z	3	5636.84
+Z	2	3758.229
+532.48029 1912.3
+532.51068 590.3
+550.60175 604.3
+636.36200 742.3
+676.63025 1005.8
+747.21594 613.7
+783.36682 600.5
+795.63324 1093.1
+796.87970 728.7
+858.06989 633.3
+937.02686 586.9
+1056.89941 628.0
+1172.74646 599.7
+1198.08032 3255.2
+1234.58545 594.1
+1466.82227 655.6
+1579.20581 662.6
+1590.07971 687.5
+1808.54651 716.9
+1870.22986 751.7
+1877.80322 697.9
+1878.42822 1014.4
+1878.75012 924.8
+1878.93896 1005.8
+1879.24707 1718.0
+1879.50391 19662.2
+1880.04102 1002.2
+1880.47656 1084.1
+1880.80957 666.9
+1907.07703 7543.8
+1918.86621 742.6
+1930.68494 934.1
+1948.60217 700.4
+S	2131	2131	580.2769021
+Z	4	2317.07631
+157.55759 3197.4
+167.30699 3781.0
+167.46355 3664.8
+172.64536 3310.8
+179.55855 3210.9
+188.26801 6261.6
+188.28438 6183.2
+188.29796 6747.5
+188.31911 3837.8
+199.17522 4527.2
+199.18637 6302.7
+199.26303 7144.2
+199.28400 12136.7
+199.29152 10747.0
+199.31377 3902.8
+201.12274 9200.5
+213.58234 3079.9
+235.10965 4128.2
+255.71449 3468.6
+271.98569 3096.9
+285.53751 2975.0
+295.95691 3208.9
+312.84683 3686.9
+341.11841 3092.3
+366.69131 3311.7
+366.98029 3845.7
+396.03204 3411.2
+407.04025 3558.9
+427.53601 3554.8
+463.20694 3668.0
+467.20276 4233.2
+468.72174 2647.5
+496.23688 5827.7
+513.61139 4245.4
+518.49396 8877.5
+518.74323 4677.3
+522.06067 2993.9
+523.59595 3166.3
+532.46869 11977.4
+547.01196 4347.2
+552.30225 3513.9
+564.19275 3068.5
+567.01019 3984.1
+581.61969 3303.0
+624.96393 6725.7
+625.29999 5766.7
+625.63654 5317.4
+629.79248 7805.9
+630.29449 7250.3
+630.39117 6208.0
+663.30908 21837.7
+663.64380 22755.7
+663.97882 11043.4
+664.31232 7982.5
+676.64557 4800.5
+677.03204 4573.6
+685.31372 5853.8
+690.99072 4840.0
+691.32129 4567.2
+691.65942 5657.4
+694.31458 11144.9
+694.81750 5672.5
+696.31378 5280.7
+696.99207 144266.0
+697.32642 147353.7
+697.65985 92455.6
+697.99341 58278.6
+698.32745 18664.3
+700.98236 3343.5
+705.87366 5194.4
+732.68103 4519.7
+743.85333 8798.7
+744.35126 9678.6
+744.85120 4196.5
+756.36987 3658.4
+769.91211 5992.0
+770.41431 5803.4
+795.62799 5651.9
+813.37219 4851.1
+860.87360 3352.5
+982.84149 3641.3
+992.97675 2900.2
+994.96790 3144.9
+1057.25684 4240.7
+1198.04663 19160.4
+1223.14636 4920.0
+1447.15771 3582.2
+1776.91968 4962.5
+1854.70984 3586.2
+1870.29199 3703.7
+1878.12842 4274.1
+1879.18396 21830.4
+1879.55115 107088.1
+1879.87085 19931.5
+1880.27356 5188.9
+1880.53992 5585.2
+1906.56458 4789.8
+1906.96558 40183.4
+1907.38684 5950.1
+1918.78357 4796.2
+1930.55908 4788.0
+S	2133	2133	1879.89540793
+Z	2	3757.943
+Z	3	5636.411
+532.49261 1661.4
+536.96875 607.9
+581.69781 596.6
+630.24823 604.3
+690.24744 609.4
+764.29028 625.4
+795.62561 1107.3
+1057.25269 871.6
+1198.09949 3605.4
+1870.19629 705.4
+1878.78662 1064.5
+1879.07349 2054.9
+1879.53210 19997.1
+1879.93591 2555.1
+1906.94153 7198.8
+1930.54822 886.5
+1995.45605 643.7
+S	2134	2134	1907.5228246
+Z	2	3813.198
+Z	3	5719.293
+532.50714 1664.3
+579.62531 584.7
+676.63257 1161.3
+690.94110 582.7
+784.61072 633.8
+794.02649 636.4
+795.61584 1042.7
+809.42621 621.2
+888.05212 791.7
+1198.13013 2995.5
+1359.73755 642.1
+1739.17310 673.8
+1814.89185 681.1
+1873.00415 861.3
+1877.67358 755.8
+1878.03223 962.1
+1878.93250 1176.8
+1879.18286 1815.7
+1879.49573 19350.1
+1880.01038 1466.9
+1905.80884 633.8
+1906.03809 1093.6
+1906.84741 6235.3
+1907.12500 2372.9
+1907.43005 1012.1
+1918.83813 956.1
+S	2135	2135	580.5263246
+Z	4	2318.074
+155.35652 2137.8
+157.62180 1876.2
+157.91528 1640.4
+163.91515 1679.2
+169.48642 2366.3
+188.26814 3104.8
+188.27847 3145.7
+188.28658 2132.1
+188.29474 3566.5
+188.30617 3495.5
+188.31053 2949.6
+188.32185 2393.2
+198.90475 2452.8
+199.25073 2170.2
+199.26576 2093.2
+199.27467 2418.8
+199.28899 6297.7
+199.38641 3773.4
+201.12302 2876.9
+206.44530 1996.4
+279.25687 1937.0
+301.91718 1804.3
+302.85773 1840.5
+308.89325 1801.1
+332.58594 2018.9
+343.26099 1932.2
+427.53210 3296.7
+450.21518 2126.8
+457.20981 1884.1
+467.20166 4616.3
+502.54150 1974.2
+513.61072 14351.3
+513.94476 10389.9
+514.27777 3767.9
+516.26337 2363.5
+518.49231 3087.2
+520.01355 4104.7
+520.26654 4373.1
+532.51190 5931.8
+549.13165 2208.7
+552.29462 2148.5
+562.63263 8251.3
+562.96698 5703.6
+566.77112 1828.1
+567.03674 2148.4
+591.27405 1907.7
+615.28705 12079.5
+625.30457 3643.3
+629.79504 2348.5
+630.38837 2443.8
+663.30615 4522.4
+663.64514 3349.8
+663.97925 6704.2
+664.30402 2519.0
+694.31403 2243.9
+694.81604 3851.1
+696.99213 38771.3
+697.32648 50447.0
+697.66022 34863.6
+697.99500 13844.4
+698.31885 2537.4
+706.35956 2222.0
+728.35815 2824.9
+731.09027 2255.1
+755.85822 2983.8
+760.90594 5361.9
+761.41321 5191.6
+769.91260 26462.7
+770.41406 24456.4
+770.91656 10549.8
+771.41052 2595.6
+771.76276 2249.8
+795.61975 3190.6
+826.07800 1734.7
+1086.43079 2155.7
+1198.15100 9993.9
+1262.29553 1806.4
+1488.23621 2505.2
+1525.35791 3122.3
+1541.17029 1917.2
+1694.97559 1939.0
+1764.89587 2282.0
+1776.92310 2597.4
+1805.79419 2223.8
+1845.65869 1787.4
+1876.17786 3252.8
+1877.70178 2263.1
+1878.35107 3303.8
+1879.01550 5251.5
+1879.29639 10045.0
+1879.54651 58912.4
+1880.03870 5656.2
+1880.20789 5685.6
+1880.65454 3381.8
+1906.89453 22104.9
+1930.50793 3396.3
+S	2137	2137	552.0967786
+Z	5	2755.44477
+143.01620 566.2
+148.98831 529.9
+156.12711 513.7
+159.66872 547.9
+162.83049 562.0
+165.76790 801.7
+169.15602 602.1
+177.88042 563.9
+181.12642 597.9
+186.09132 1158.7
+188.14720 512.1
+188.24484 836.0
+188.25537 1300.7
+188.26534 1605.3
+188.27702 1976.4
+188.29381 2003.0
+188.30211 1974.4
+188.32118 1137.4
+188.34030 773.0
+196.35600 566.9
+197.70963 540.3
+198.90623 955.2
+199.19972 668.6
+199.20638 485.8
+199.26158 543.9
+199.27257 1743.5
+199.28107 1405.0
+199.28725 1852.4
+199.29962 2136.3
+224.83279 560.1
+226.11880 1068.4
+249.12306 1630.4
+255.29396 631.4
+276.13428 3609.9
+277.11823 3832.7
+278.12119 762.0
+288.20325 719.5
+315.14328 1118.0
+330.20148 580.5
+332.17191 812.8
+333.15549 2618.6
+335.06473 533.7
+347.31131 576.1
+350.28412 672.3
+358.88406 3850.5
+359.21866 1941.0
+359.55396 960.8
+360.16159 724.0
+366.72913 879.1
+371.59354 703.1
+377.71356 670.9
+379.17093 644.2
+397.22534 1623.2
+397.56088 1412.6
+420.77115 557.5
+425.25906 1305.4
+430.77609 5416.2
+431.27777 3583.6
+440.90799 2836.4
+441.23984 1749.2
+441.57379 882.4
+443.20306 15160.3
+444.18869 6731.7
+445.19174 1301.4
+451.00299 3641.1
+451.25247 2431.7
+451.50247 2087.6
+452.55713 631.9
+461.21280 2796.5
+462.21854 872.6
+481.85446 1232.0
+482.05609 2949.5
+482.25781 1075.3
+482.45764 1514.2
+487.76944 4397.9
+488.01910 5700.9
+488.26996 4324.5
+488.52084 1701.2
+488.78815 1041.5
+489.29358 699.8
+505.52817 14558.7
+505.77911 16717.1
+506.02991 10109.4
+506.28064 3599.0
+506.53232 905.0
+511.46494 3238.2
+511.66690 3800.1
+511.86823 3375.1
+512.06683 1864.2
+514.87115 3288.1
+515.07043 1892.3
+515.27246 4887.1
+515.47186 2488.3
+522.31335 4166.6
+523.31378 1048.1
+529.03040 793.8
+529.29608 765.8
+532.48914 2047.5
+533.28589 16879.5
+533.53668 26819.1
+533.78778 15128.2
+534.03766 6509.9
+534.28864 1321.9
+535.28497 1166.6
+537.82306 6144.6
+538.32446 2630.4
+539.72675 585.9
+570.05212 1139.6
+570.30560 1738.3
+570.55341 2024.6
+573.24408 1532.3
+574.55579 10309.7
+574.80640 13719.3
+575.05688 9668.0
+575.30676 2318.5
+588.30298 630.3
+590.27173 7298.6
+591.24976 3658.1
+592.25366 1543.4
+595.33649 21281.0
+595.83777 14189.1
+596.33881 4074.5
+601.00079 3411.0
+601.33551 3700.9
+601.66968 1531.6
+602.06659 2192.0
+602.31635 4904.4
+602.56641 4418.5
+602.81409 2541.5
+603.06384 1330.5
+606.82422 674.4
+608.28070 1727.7
+630.40973 805.0
+639.07794 858.0
+639.32867 962.8
+643.33258 869.8
+643.58978 1146.4
+650.02319 19644.8
+650.35699 26127.1
+650.69128 14676.8
+650.80609 782.5
+651.02454 4867.7
+651.34973 1317.2
+653.34985 874.1
+659.81873 6178.0
+660.31897 3737.8
+660.85535 10461.6
+661.35730 6813.6
+661.85797 2508.7
+668.03296 1822.2
+668.35773 1344.5
+668.82172 2382.6
+669.32501 1742.6
+673.70197 67512.5
+674.03595 74143.8
+674.36957 47182.0
+674.70374 17239.1
+675.03802 6554.2
+675.33997 1103.2
+675.37366 1154.2
+675.67328 2603.6
+676.01031 1265.1
+676.61951 1104.3
+699.38568 754.7
+700.83771 1275.4
+701.33185 943.4
+709.35327 8477.9
+709.85425 9104.9
+710.36102 2442.1
+710.71460 3069.9
+710.88544 1583.0
+711.04620 5605.3
+711.38348 3185.4
+711.72101 813.2
+716.71600 15885.6
+717.05060 22594.2
+717.38452 15067.7
+717.71844 6108.7
+718.05719 2139.6
+718.35706 2165.8
+718.85889 2184.8
+719.31567 2643.9
+720.32257 1313.9
+732.45001 7386.5
+733.45459 3030.9
+737.32123 1123.5
+738.32996 890.3
+739.70697 799.4
+743.54498 569.1
+754.06360 865.5
+761.38214 1564.8
+761.87769 900.4
+765.73914 4194.5
+766.07404 5855.3
+766.40839 4403.5
+766.73981 1938.2
+775.37787 762.0
+775.44263 1033.0
+782.51239 559.3
+795.61829 1307.4
+822.94720 1083.6
+823.43225 772.0
+823.86969 829.8
+823.93378 676.4
+826.41986 764.6
+832.38812 2834.2
+832.88983 2249.2
+833.39258 1878.9
+854.42920 777.4
+858.13855 703.6
+874.43066 713.4
+876.48462 4416.9
+877.48242 1352.9
+900.43689 970.7
+939.43365 715.4
+945.45416 882.8
+946.45972 808.8
+1044.52698 796.3
+1086.75403 608.9
+1160.54956 1086.1
+1198.09424 3247.9
+1333.67322 588.6
+1373.31104 587.3
+1489.68127 656.8
+1511.45093 556.4
+1718.67957 626.2
+1779.83508 613.7
+1803.49976 539.4
+1876.18311 787.1
+1878.02954 745.0
+1878.77856 1137.6
+1879.48596 20416.4
+1879.78174 1025.1
+1880.20959 1153.9
+1880.92200 968.8
+1907.05762 7526.1
+1930.59363 976.1
+1999.04578 630.8
+S	2138	2138	580.5591921
+Z	4	2318.20547
+159.54770 1885.6
+165.76721 2091.9
+169.50291 2360.4
+174.85336 2025.2
+188.22200 1611.8
+188.23796 1846.2
+188.27028 5735.8
+188.27715 5772.8
+188.29268 6417.6
+188.30141 5567.6
+188.31589 4153.1
+188.34055 1927.7
+198.90546 3766.4
+199.17531 2372.7
+199.24814 2499.7
+199.25899 2131.8
+199.27202 5739.9
+199.28180 6849.5
+199.29715 3512.4
+199.37856 3562.7
+219.64400 1759.5
+226.73938 1880.4
+246.21782 1774.4
+280.19653 2384.6
+308.91904 2830.1
+328.49942 1763.4
+337.06067 1600.2
+341.19388 2567.0
+342.28955 2509.3
+350.27975 1884.6
+381.38190 2344.1
+390.99524 1925.1
+417.40149 1734.0
+452.58490 2098.5
+467.20145 10253.3
+479.26663 3177.7
+479.76315 2375.9
+501.93417 1807.8
+511.50018 3551.9
+511.75177 4266.9
+513.61066 34193.8
+513.94537 26871.6
+514.28076 10736.9
+514.61597 2431.0
+515.75842 2721.7
+516.00739 4242.9
+516.25873 3426.5
+520.01318 7294.3
+520.26581 3565.6
+520.51483 5214.0
+525.16486 2143.8
+532.46497 7341.1
+541.32550 2474.4
+545.19672 3572.2
+547.79395 4569.1
+548.29816 3261.4
+549.17578 2339.8
+562.63379 19671.0
+562.96820 29401.1
+563.30182 9355.3
+567.03888 3643.2
+567.53687 4832.2
+577.05023 1878.9
+600.98370 2167.9
+614.34967 5673.9
+615.28625 23582.8
+618.09247 2154.6
+630.44220 2581.8
+632.98816 5136.3
+633.32953 3601.5
+633.66028 2108.1
+638.66376 4773.0
+638.99817 5669.4
+641.10657 2162.7
+663.32593 1666.2
+672.81067 2245.9
+676.63477 2332.2
+678.37280 2170.2
+681.37958 3973.2
+681.66895 3213.4
+693.01422 5625.0
+693.35297 9205.7
+693.68359 6040.1
+696.99133 6456.3
+697.32501 6581.9
+697.66107 5280.4
+706.86115 1860.8
+721.38226 2659.0
+721.89410 3480.8
+728.36041 2344.6
+755.85498 4417.9
+756.36597 3542.9
+760.91022 7470.2
+761.41180 9100.0
+761.91058 3121.5
+762.35480 5395.7
+763.34039 5956.8
+764.33685 2159.5
+769.91315 72662.9
+770.41437 62883.4
+770.91663 23116.1
+771.41504 4620.1
+783.29749 1709.1
+795.61591 3339.9
+798.34418 2899.8
+836.39825 1743.0
+843.45990 2343.3
+854.43280 2039.1
+890.31775 1872.2
+900.97559 2917.0
+1028.07874 1763.8
+1173.34814 2204.5
+1198.03796 10953.6
+1525.50879 3101.0
+1567.28394 1966.2
+1611.15186 2069.6
+1870.34058 3158.6
+1878.49268 4226.5
+1878.99902 5173.1
+1879.51782 61925.0
+1879.99182 7317.4
+1880.52332 3019.1
+1907.07019 21218.9
+1907.33850 4170.3
+1918.85034 2435.6
+1932.93115 1965.9
+S	2139	2139	530.2610346
+Z	4	2117.01284
+148.11414 2640.5
+148.91449 2036.0
+149.46021 2133.1
+157.59993 2351.5
+157.60504 3261.8
+161.07709 2013.4
+165.77330 2107.5
+169.49625 2357.4
+171.63200 2636.9
+179.07916 1865.5
+188.25630 2376.5
+188.27435 4756.7
+188.29565 4552.3
+188.30634 4067.4
+188.32100 2891.6
+191.97372 2056.0
+198.90723 3167.5
+199.18941 2024.2
+199.26044 3603.6
+199.26726 3469.0
+199.27727 6419.1
+199.28874 6236.2
+199.30017 6860.0
+199.30789 2705.1
+199.32271 4252.0
+199.33673 2128.8
+199.39798 2337.9
+199.42709 3029.2
+199.44653 2246.3
+201.13840 1931.0
+231.24924 1844.7
+246.88531 2073.3
+271.52948 2787.4
+275.38858 1961.6
+278.91989 2330.8
+280.18738 2468.7
+284.49786 2741.7
+308.90509 2353.6
+320.29526 1982.1
+341.84885 2259.0
+395.56879 10645.2
+395.90201 4885.2
+406.91415 3651.9
+421.98529 4539.3
+436.08392 2391.5
+448.24438 2969.0
+448.49625 3788.9
+452.88266 2124.2
+459.20407 1819.7
+460.78357 2133.5
+475.66208 2558.7
+482.66296 2643.2
+486.57581 3320.0
+486.91086 4769.9
+487.24472 4573.1
+501.24173 3232.7
+505.41147 1861.7
+510.68317 2796.9
+512.75928 2288.3
+513.56860 2628.2
+514.28229 3612.7
+532.47113 6393.8
+552.03467 1982.5
+556.34912 3374.5
+558.29663 9674.1
+558.62781 5683.9
+562.31110 32472.1
+562.64545 27333.8
+563.30914 2424.9
+564.29919 23735.7
+564.63373 17513.2
+564.96741 10500.0
+576.94550 2151.3
+577.95978 3403.9
+591.31934 7624.2
+591.98572 2747.2
+592.84631 3373.9
+593.31970 3640.7
+597.12238 8380.1
+597.32306 24985.1
+597.65625 10800.5
+597.99054 5881.2
+600.00623 5863.7
+606.84650 11868.1
+607.34833 8910.0
+607.85083 3229.6
+607.92163 2882.7
+610.32037 2662.0
+611.32245 4080.4
+611.52844 2379.4
+611.63129 2008.4
+615.85260 2854.8
+616.05743 2238.6
+619.35913 2731.0
+622.39734 2511.4
+630.41937 3828.9
+638.01825 6704.8
+638.35358 6025.6
+645.67194 5716.0
+646.00702 4538.1
+646.66913 2844.5
+647.83167 2343.4
+651.67670 7935.6
+652.01093 7984.1
+667.03052 3038.1
+669.34399 3326.6
+670.36389 4390.3
+670.68945 5265.1
+671.02509 3449.8
+676.64819 3963.8
+688.37787 17072.0
+688.88062 13979.7
+690.76642 2436.3
+694.04999 3555.1
+697.38232 2694.2
+699.37872 3946.2
+699.71906 3989.6
+703.12500 2198.1
+720.34052 5195.1
+730.36230 2597.9
+731.13678 2630.4
+796.78448 2175.0
+807.11182 2486.1
+935.39148 2133.1
+1164.86670 1954.4
+1198.05347 14071.1
+1220.07617 2595.0
+1525.45447 2646.5
+1666.24414 2152.7
+1753.67603 2297.8
+1876.11292 3012.7
+1878.25513 2625.6
+1878.44409 2994.7
+1878.74146 4528.1
+1879.55469 68894.0
+1880.20996 5750.3
+1880.43469 4281.8
+1880.81177 4407.4
+1896.09180 2783.6
+1906.99780 27311.0
+1930.65710 4271.4
+S	2141	2141	1879.9498246
+Z	3	5636.574
+Z	2	3758.052
+516.74158 698.8
+532.48663 2203.7
+549.18787 701.5
+560.69678 629.2
+564.03210 656.8
+573.13440 568.3
+581.96295 580.6
+630.44751 994.6
+675.91473 675.2
+730.27362 762.2
+741.69043 611.7
+795.60364 910.0
+1057.24084 642.8
+1187.91565 666.9
+1198.08643 3130.7
+1556.14648 657.3
+1568.52148 635.5
+1742.64771 867.0
+1876.13989 723.6
+1878.83020 892.9
+1879.54785 17845.8
+1880.50183 794.4
+1882.50049 761.1
+1907.06079 7685.2
+1918.80713 691.9
+1930.67249 1058.5
+S	2142	2142	1907.49124127
+Z	2	3813.135
+Z	3	5719.198
+532.47131 2144.7
+540.15100 585.0
+630.39612 779.1
+646.86096 665.3
+676.65259 1070.7
+782.48517 760.1
+810.74060 633.4
+1121.06750 678.5
+1176.03247 591.7
+1198.05225 3489.3
+1224.81982 795.5
+1268.15002 615.2
+1489.83301 856.9
+1633.08447 623.6
+1759.97632 659.5
+1776.63098 685.7
+1870.44739 898.4
+1879.56787 19601.1
+1879.83875 1468.1
+1907.09863 8013.2
+S	2143	2143	584.2739121
+Z	4	2333.06435
+156.58664 513.5
+164.39705 533.9
+169.49928 556.0
+177.30331 512.8
+187.14401 2996.2
+188.25409 757.9
+188.26193 647.4
+188.27318 1069.6
+188.28387 1051.8
+188.29134 917.7
+188.29787 940.3
+188.31183 728.1
+192.04321 658.5
+199.18666 1077.7
+199.21997 976.4
+199.23720 704.5
+199.25752 1269.6
+199.27097 624.2
+199.28378 2372.2
+199.29054 1380.6
+199.30203 1214.9
+199.38026 728.2
+199.39201 633.6
+200.10806 739.5
+201.12318 920.2
+207.30431 586.9
+215.13853 1899.8
+233.16446 12934.8
+234.14912 600.4
+234.16794 1672.7
+241.19119 677.2
+261.15942 2974.4
+267.85959 648.0
+268.42941 529.2
+269.18576 1093.7
+281.12381 978.1
+286.80017 588.8
+299.13437 2419.9
+303.26044 582.7
+305.57196 611.8
+308.90680 715.6
+309.03351 657.6
+314.20746 3299.8
+330.57822 592.4
+344.19540 2377.5
+346.49191 563.3
+350.27740 702.2
+362.20734 4256.6
+363.20947 1050.9
+364.08978 651.9
+370.28848 584.1
+384.22284 1826.3
+395.19171 917.4
+397.65015 526.3
+399.05203 673.1
+400.14966 599.0
+412.21829 1253.9
+417.60110 518.7
+417.61575 516.2
+429.28516 1884.4
+442.22766 866.2
+443.26532 1472.5
+448.23254 2077.0
+448.56619 2109.1
+448.89920 1196.5
+457.27933 5970.7
+458.28430 1888.0
+461.27451 2303.3
+462.27856 751.9
+475.29044 4438.6
+476.29523 854.2
+482.53903 660.4
+483.01718 3685.8
+483.26746 4348.3
+483.51746 3602.6
+483.76788 1809.5
+489.26038 708.5
+490.26584 973.8
+503.29129 671.1
+508.77145 836.6
+509.02158 759.1
+513.02570 5739.6
+513.27722 9256.7
+513.52722 6862.9
+513.77838 2340.5
+517.52979 1745.9
+517.77893 1997.0
+518.03021 1172.8
+521.99213 1010.8
+522.49268 1011.7
+524.25305 669.0
+529.33167 719.3
+532.49908 1722.3
+536.31763 21838.6
+537.32104 6308.7
+538.32043 1215.3
+541.29675 2670.7
+541.54749 3074.6
+541.79889 1999.4
+546.36383 4775.8
+547.36938 1454.8
+549.17010 737.1
+552.94513 792.6
+553.61786 1199.5
+554.78705 807.4
+556.34760 23102.6
+556.79224 6451.0
+557.04248 10131.6
+557.29291 5080.7
+557.35107 7076.9
+557.54315 2664.5
+558.35303 1305.7
+563.94910 837.1
+573.19550 624.4
+594.00128 637.5
+609.79517 1500.3
+610.23035 661.9
+610.29346 2456.5
+612.30627 946.8
+612.65619 1705.4
+612.98889 1659.1
+613.31775 1117.6
+616.36658 812.7
+618.32513 43217.7
+618.65961 52603.5
+618.99396 33905.5
+619.32782 8863.4
+619.66321 2606.6
+621.60028 672.4
+623.32074 1129.9
+623.82196 1227.3
+623.89758 2250.9
+624.04279 3582.4
+624.18762 1941.4
+624.47247 815.4
+630.30005 1198.2
+633.33331 784.0
+636.33533 884.7
+637.33759 1176.5
+637.79718 532.8
+639.84027 1256.1
+640.06110 1364.5
+640.22717 582.1
+640.34015 688.2
+649.98254 580.7
+651.34375 890.3
+656.01959 5768.7
+656.35437 6724.8
+656.68909 4907.1
+657.02039 1585.2
+659.32935 865.9
+659.82825 1246.1
+662.84106 1664.4
+667.96948 990.7
+668.30389 1247.2
+668.64301 1985.6
+671.84534 28323.3
+672.34668 21117.7
+672.84778 10319.5
+673.34937 2069.9
+675.83691 1518.0
+676.64099 1213.2
+679.84351 1058.7
+680.09247 909.4
+680.34479 1802.7
+680.59088 942.3
+684.03400 2333.1
+684.36920 1073.0
+689.70282 56819.0
+690.03656 88918.3
+690.37030 54807.9
+690.70490 22573.2
+691.03882 6242.0
+691.96515 977.2
+701.30505 1449.5
+701.65265 9808.0
+701.98633 6789.7
+702.32349 17913.5
+702.65771 5201.1
+702.99213 1046.0
+705.86853 1106.8
+716.37500 743.4
+727.35388 1236.3
+728.06018 808.7
+728.38635 2884.1
+728.88678 2848.8
+737.79169 560.7
+742.38330 2151.8
+742.71228 800.9
+750.84210 1046.4
+751.84583 1201.6
+766.39624 1030.8
+766.89722 833.5
+776.89380 699.6
+777.40417 732.9
+777.90863 787.3
+785.40833 5548.4
+785.91089 6748.1
+786.41248 3332.1
+801.43976 1047.2
+807.37335 4683.3
+808.37885 2251.6
+813.37744 709.5
+819.92090 1064.5
+820.42657 1368.7
+824.91302 829.5
+828.92480 4052.7
+829.42560 5404.4
+829.92633 3100.5
+830.41943 730.4
+833.91412 1789.9
+834.41278 2348.6
+834.91492 1684.7
+850.07330 650.5
+868.45557 846.0
+868.95166 830.7
+870.44086 572.1
+877.45032 40642.9
+877.95215 46645.4
+878.45300 25390.7
+878.95551 7322.2
+879.45868 1728.6
+881.12115 751.2
+914.53534 756.6
+926.98193 3190.5
+927.48364 3568.2
+927.98584 2941.7
+1016.75250 604.9
+1198.11438 2953.7
+1201.26416 681.9
+1859.99792 752.6
+1878.66931 716.8
+1878.87683 621.2
+1879.15625 864.2
+1879.54175 20477.9
+1879.81995 1138.6
+1880.17078 842.2
+1881.76880 682.8
+1907.04590 7686.2
+1930.64905 920.5
+S	2145	2145	516.5417346
+Z	4	2062.13564
+130.76004 586.8
+130.80261 528.0
+133.12904 1157.6
+141.55096 532.7
+150.40755 553.8
+158.94569 660.6
+162.55595 599.5
+165.76515 904.2
+171.63736 575.3
+198.90506 899.5
+198.93942 562.2
+199.17981 864.9
+199.20015 560.9
+199.24136 660.1
+199.25029 757.0
+199.26775 879.1
+199.27765 3105.2
+199.29614 1004.0
+199.30838 630.4
+199.37500 1192.0
+201.58379 584.6
+203.08243 566.2
+203.11746 628.3
+204.42348 522.1
+204.46555 570.8
+214.49857 622.6
+225.67792 527.4
+241.78180 603.2
+247.01488 589.3
+252.97289 557.6
+265.76752 557.5
+272.17200 1077.9
+311.89871 686.6
+316.33624 533.3
+327.20297 942.4
+341.19836 590.7
+350.20480 3239.1
+350.28036 716.9
+350.70801 906.6
+351.21640 682.7
+369.22372 26760.4
+370.22778 6204.6
+371.22794 762.1
+372.15329 633.0
+388.19186 566.3
+454.67337 524.8
+455.24753 4016.9
+455.58176 5292.9
+455.91525 1998.8
+456.25031 1472.9
+482.30652 3835.5
+483.31223 1689.1
+484.25543 770.5
+485.24698 1224.1
+486.25513 909.4
+487.49188 536.1
+487.51520 518.8
+497.27902 777.9
+499.28595 2155.7
+499.80881 696.5
+532.51086 2118.4
+534.96985 2362.7
+535.30383 2453.3
+535.63916 1111.6
+535.97131 1121.1
+542.28326 665.5
+543.28253 726.2
+556.30731 1188.7
+558.75031 1314.5
+559.24646 669.5
+563.07666 642.0
+565.30542 1751.6
+565.64014 2498.8
+565.97314 1514.6
+566.03027 696.4
+566.30383 989.1
+571.29236 492.2
+599.33362 1419.4
+608.85474 907.3
+611.54144 596.9
+612.37073 4276.9
+613.37219 2316.0
+614.37531 860.1
+630.37262 669.8
+651.25745 551.2
+676.64148 850.8
+682.36523 8493.4
+682.86719 7223.2
+683.36890 6191.9
+683.86938 3670.1
+699.40155 2226.8
+700.40387 1849.4
+710.89691 968.8
+711.40479 1089.1
+711.90320 694.3
+725.88263 1491.9
+726.38226 1680.5
+726.88599 1134.7
+736.90283 726.9
+745.41107 5339.5
+745.91138 7168.1
+746.41492 3570.8
+746.91827 1808.8
+781.90918 841.5
+782.40442 970.4
+782.91602 980.4
+783.41119 705.4
+790.91406 9301.5
+791.41541 10869.0
+791.91565 7948.8
+792.41779 4961.5
+795.61255 1141.9
+811.94983 585.2
+813.42957 2385.7
+814.42078 685.5
+847.45605 1700.7
+847.95502 960.3
+848.46161 1558.7
+1028.27637 675.1
+1100.76538 598.2
+1168.60315 593.7
+1198.15186 3355.7
+1206.27637 625.1
+1245.61206 549.0
+1776.84729 720.9
+1803.41260 638.4
+1870.38208 919.5
+1876.39868 890.7
+1877.45569 615.3
+1877.61121 680.8
+1877.85168 526.5
+1878.58215 733.5
+1878.87646 1037.5
+1879.23853 2624.1
+1879.53528 19800.6
+1880.67310 628.9
+1907.04639 7481.2
+1930.49854 1101.7
+S	2146	2146	465.9820121
+Z	4	1859.89675
+119.61560 551.4
+121.35473 504.5
+121.78736 2530.3
+123.56535 490.4
+123.72900 570.4
+123.98041 671.5
+126.04987 610.0
+126.34210 619.5
+127.54708 504.1
+128.38548 532.1
+137.24562 525.3
+137.30081 566.8
+138.26468 576.9
+145.20226 823.8
+152.77792 500.3
+156.07614 1810.7
+165.76587 679.2
+166.73337 592.2
+176.98840 540.9
+183.11206 1809.8
+187.89430 644.5
+191.11761 1647.3
+194.03745 564.6
+194.14027 567.4
+196.11650 653.5
+198.49933 489.8
+198.90500 1221.1
+199.17204 684.2
+199.23068 790.3
+199.23746 765.3
+199.26753 2544.2
+199.28986 1064.6
+199.36218 905.0
+201.12306 24889.9
+202.12651 2137.5
+204.65796 581.9
+229.11769 2155.2
+258.44620 613.5
+261.66873 503.8
+266.15009 1981.5
+274.18671 2820.6
+284.15903 1239.0
+290.94937 547.1
+297.16763 880.4
+301.37128 551.3
+312.02002 620.0
+312.15372 1017.8
+327.64627 1091.0
+328.13821 1040.6
+330.16464 662.1
+333.15433 1706.1
+336.65497 1402.2
+337.15405 857.5
+339.08978 607.4
+343.83875 5625.0
+344.17316 4017.7
+344.50793 1935.9
+354.99176 556.2
+367.56110 574.3
+373.25519 8159.7
+374.25870 1193.8
+377.11368 1460.4
+381.53342 7124.9
+381.86752 5150.9
+398.18576 1117.7
+401.19876 2361.0
+401.70020 1510.4
+407.19376 2443.8
+407.69653 1406.9
+418.24432 2122.5
+419.23080 991.7
+419.89395 810.3
+432.46698 968.2
+432.97287 640.6
+435.76340 1120.6
+437.47293 680.2
+437.72351 609.5
+438.25797 666.2
+441.17694 630.6
+445.19037 754.9
+446.23853 3739.1
+446.46722 896.8
+446.71036 981.1
+446.96942 785.4
+447.24414 791.9
+473.24203 705.2
+486.33890 8577.0
+487.34161 1407.5
+505.24188 1135.3
+506.24814 714.3
+510.91360 13900.6
+511.24710 10951.9
+511.58096 8826.2
+511.91653 1829.8
+514.21252 1861.2
+515.25403 72263.6
+515.75549 46870.6
+516.25604 19767.5
+516.75665 4534.7
+532.48755 2200.7
+532.84033 1211.4
+533.32220 649.6
+533.80524 829.0
+534.31757 783.2
+538.59253 6191.4
+538.92645 8795.6
+539.26105 6422.6
+539.59271 2428.1
+541.84332 1082.2
+542.09033 732.4
+542.29474 1393.7
+542.64648 2638.5
+542.97961 3258.6
+543.24384 795.4
+543.57996 997.5
+543.93445 643.9
+544.59595 136131.8
+544.92981 154035.7
+545.26324 100925.4
+545.59711 42276.1
+545.93048 10742.4
+546.25433 1119.0
+549.19702 707.7
+555.94043 571.9
+559.32214 2425.8
+571.79590 54192.6
+572.29681 39797.8
+572.79791 17674.8
+573.29846 4896.3
+573.79999 1169.4
+577.35748 1278.9
+579.94635 1138.8
+580.98547 1392.9
+581.32202 946.9
+582.29120 1360.3
+585.28558 683.2
+585.61823 1278.0
+585.94794 965.8
+586.29401 1049.5
+586.93280 838.4
+587.21173 8335.1
+588.21588 3168.5
+589.36993 549.9
+599.42108 3286.5
+603.27759 1538.5
+605.22198 9700.2
+606.22571 2683.8
+628.33759 6945.9
+628.83948 6008.9
+629.25592 725.7
+629.33899 3016.5
+629.84412 662.8
+630.45319 711.0
+658.38660 1373.8
+676.64752 1258.6
+682.28333 2336.9
+700.29565 19622.3
+700.38184 944.7
+701.29895 7297.7
+702.30084 1840.5
+708.35272 11383.9
+708.85480 14499.8
+709.35455 7195.3
+709.85382 2388.3
+710.35638 1270.5
+710.88599 776.8
+713.46564 11680.3
+714.46948 3393.9
+718.30536 7731.9
+719.30872 3598.8
+720.30963 755.2
+738.85443 2439.7
+739.35724 2974.5
+739.85822 1334.5
+746.33875 831.5
+755.47308 649.2
+757.35303 2978.6
+757.45801 665.6
+765.86176 1085.9
+766.36798 2397.7
+766.86981 1093.6
+775.36420 1784.3
+776.36609 924.0
+813.37946 4461.7
+814.38519 1678.0
+831.39459 1116.6
+874.43121 4601.3
+875.43762 2257.2
+876.43835 1031.7
+909.25519 634.4
+909.32782 569.7
+987.51483 2640.6
+988.52209 1323.9
+1019.67645 810.9
+1021.25000 564.1
+1057.25977 875.5
+1198.09082 3503.3
+1315.24805 698.3
+1329.40027 658.5
+1348.60986 848.5
+1349.57324 788.6
+1368.93945 652.8
+1454.57922 651.4
+1455.28564 628.9
+1525.54358 668.1
+1586.54285 638.2
+1791.17053 612.4
+1807.83362 632.2
+1870.57324 664.4
+S	2147	2147	582.8228021
+Z	4	2327.25991
+156.34387 3063.8
+158.11066 3581.9
+161.82559 3833.4
+164.86470 2925.7
+165.76518 4748.4
+185.73099 3535.4
+187.14372 12994.7
+188.22301 3871.9
+188.25537 4782.6
+188.27054 7904.1
+188.28404 8866.6
+188.29478 6258.5
+188.30289 6451.0
+188.30986 5246.2
+188.31999 4090.0
+188.32458 3802.7
+198.90814 7275.2
+199.20560 6214.3
+199.22458 4276.7
+199.25450 4307.7
+199.29106 9940.9
+199.30113 16202.5
+199.33324 5522.9
+199.39868 6508.4
+215.13805 7472.3
+233.16428 44290.2
+234.16711 4954.1
+239.10512 3791.5
+255.28941 3669.1
+261.15909 7814.1
+296.19656 3679.0
+299.13464 6835.3
+314.20639 12042.1
+344.19583 11400.2
+348.84286 3546.4
+362.20724 14842.5
+381.35645 4887.6
+384.22382 6305.7
+427.54636 5629.4
+429.28406 5949.1
+432.96930 3170.0
+443.26575 5611.6
+447.29761 4328.4
+448.23114 10731.2
+448.56644 7262.8
+457.27927 20598.1
+458.28220 7144.2
+461.27649 6224.3
+475.28766 11123.8
+476.29095 5907.0
+481.58453 3356.3
+482.66019 3652.4
+490.26935 4327.4
+490.77783 4320.2
+506.27307 3539.2
+513.02563 19045.7
+513.27704 18887.1
+513.52643 14857.3
+513.77863 5032.0
+532.49866 10580.7
+536.31732 62914.0
+537.31940 15544.5
+541.29401 8166.0
+541.54639 11693.0
+546.36340 18589.2
+547.36768 4633.1
+549.14923 4998.7
+552.95068 4650.3
+556.34747 71959.4
+556.79126 24306.7
+557.04242 20636.1
+557.29358 8981.3
+557.35205 22296.6
+557.54584 5147.3
+564.32068 3349.1
+609.79547 10580.2
+612.32355 4424.9
+612.65283 9914.8
+616.21924 3815.4
+618.32477 143366.9
+618.65936 155958.6
+618.99286 78678.0
+619.32684 26250.5
+630.40686 4276.4
+651.34668 5130.2
+656.02136 15209.1
+656.35284 10112.1
+656.68823 5595.7
+671.84497 100003.6
+672.34686 86522.5
+672.84875 29120.4
+676.63544 5093.9
+683.70453 4407.5
+689.70264 174289.8
+690.03619 183824.1
+690.37073 88244.6
+690.70544 34198.6
+691.04028 7399.6
+701.30426 3793.9
+701.65277 30971.5
+701.98914 7691.8
+716.64978 3127.9
+727.73840 4197.2
+728.38391 7952.3
+728.88300 8899.1
+729.38837 6317.8
+733.90497 7367.4
+734.40564 8116.7
+737.15967 3551.6
+750.84167 4657.4
+756.85028 3721.3
+785.41266 17821.2
+785.90735 17303.2
+786.41235 9331.8
+795.61823 5759.5
+807.37531 11249.2
+819.92303 6137.9
+828.92395 21232.9
+829.42334 20601.1
+829.93280 10893.4
+833.91669 4405.2
+834.42084 7131.2
+834.91870 7987.6
+854.46851 4140.2
+868.95160 3856.7
+877.45032 172962.1
+877.95221 171951.7
+878.45227 91467.1
+878.95679 28814.7
+879.46155 4243.7
+902.43115 4082.0
+926.98108 14870.1
+927.48810 18227.9
+927.99408 10037.6
+928.48547 6098.9
+993.54486 3578.4
+1057.22717 4246.2
+1198.11548 18956.8
+1222.74609 3435.7
+1228.08704 3191.9
+1273.89954 3126.4
+1333.30090 3393.5
+1343.55298 3672.4
+1739.57996 3804.2
+1860.00916 3841.2
+1869.41528 3572.7
+1874.75562 3739.7
+1876.77087 5415.5
+1879.10376 17239.5
+1879.51587 110745.8
+1879.93762 18179.7
+1881.49316 4023.8
+1907.11768 42052.9
+1930.62073 5423.1
+1969.16125 3194.7
+S	2149	2149	516.5386821
+Z	4	2062.12343
+141.85039 528.5
+144.58382 593.4
+157.55492 538.0
+164.55658 613.5
+167.14629 599.2
+171.61259 654.6
+182.78064 580.6
+187.10736 4339.3
+188.25520 1416.1
+188.26677 1646.5
+188.27745 1907.5
+188.29375 2383.1
+188.30670 1752.1
+188.31653 1356.5
+188.32889 1169.2
+188.36734 584.9
+198.90240 1098.0
+199.18700 1010.9
+199.20009 681.3
+199.25433 639.9
+199.26332 997.0
+199.27638 1113.9
+199.28445 2253.7
+199.29524 1178.5
+199.30925 1081.8
+199.32527 538.9
+199.38138 1197.5
+199.72438 548.1
+215.10216 877.3
+265.40887 504.4
+265.41409 504.9
+273.85236 619.7
+307.72104 601.0
+308.89932 750.6
+320.56311 537.3
+322.18604 3828.7
+323.19095 1228.2
+330.12930 3396.6
+331.13266 1707.6
+335.98773 637.7
+345.13394 568.8
+350.20465 1189.7
+368.38068 563.8
+369.22366 11095.5
+370.22729 2837.6
+386.84079 615.1
+387.86426 609.3
+401.20175 2398.4
+402.20587 1562.4
+422.49167 583.9
+427.53592 804.6
+429.19675 8056.6
+430.20041 5541.5
+435.05386 561.6
+451.61722 590.1
+451.85864 763.7
+455.24493 1298.7
+455.58115 2092.0
+455.91599 1153.1
+471.22336 894.9
+482.30579 1703.9
+482.64188 647.1
+482.99289 596.1
+483.31433 689.9
+484.59039 851.3
+485.24936 10719.4
+486.25229 10497.8
+487.11246 513.0
+487.25598 2135.3
+488.75388 570.5
+497.81775 708.0
+499.28961 984.1
+501.23520 1265.8
+502.90860 697.8
+505.70804 604.3
+507.91614 582.7
+518.48395 586.6
+532.46619 1909.1
+532.50256 811.7
+542.27979 5058.7
+543.28326 6282.3
+544.28760 1322.5
+549.14990 976.5
+558.75214 2035.3
+559.24823 824.8
+565.30481 620.8
+565.63513 755.8
+565.97168 900.5
+574.66766 606.9
+598.33295 9403.1
+599.33588 16124.3
+600.33948 5028.1
+607.78650 571.6
+612.36658 2013.4
+676.63489 1538.9
+682.36511 3449.3
+682.86780 3735.4
+683.36932 2855.8
+697.40192 1221.9
+698.40765 3058.2
+699.40448 2657.1
+700.40662 717.4
+705.34247 1084.4
+706.34698 2934.0
+707.34784 880.7
+726.38318 1063.1
+731.11548 823.2
+745.40723 1583.1
+745.91016 3546.8
+746.41357 2694.6
+746.90991 881.6
+790.91699 2998.6
+791.41711 5859.7
+791.91656 5172.1
+792.41779 1123.6
+795.60095 1078.6
+797.10895 610.4
+812.42651 5005.1
+813.43146 22151.1
+814.43365 8619.4
+815.43134 1034.4
+848.96277 583.1
+853.23730 571.5
+853.40363 880.3
+1006.79041 594.5
+1026.17798 561.6
+1057.21948 656.6
+1198.04419 3261.1
+1390.80225 621.7
+1419.25830 560.4
+1433.38159 660.7
+1525.39441 684.1
+1534.48572 533.8
+1582.12219 623.4
+1803.82886 659.6
+1860.12097 790.1
+1878.57007 626.7
+1878.78064 716.2
+1879.09021 1930.6
+1879.51184 20014.2
+1879.90088 2305.7
+1880.18787 928.7
+1907.10095 7596.6
+1907.39783 769.0
+1930.56201 725.9
+S	2150	2150	582.8195046
+Z	4	2327.24672
+156.39748 609.3
+163.89162 586.7
+179.49536 556.1
+181.74406 662.2
+182.65022 535.3
+182.79749 650.1
+187.14395 1518.4
+187.98779 587.2
+188.20946 696.9
+188.22939 538.6
+188.24422 696.3
+188.26242 1046.2
+188.28186 846.3
+188.28763 831.2
+188.30550 744.7
+188.32425 593.4
+188.34682 476.4
+188.35510 567.8
+188.36987 527.3
+194.22917 593.6
+196.31746 569.7
+198.90079 1172.4
+199.17590 1001.1
+199.18652 1221.3
+199.22142 732.5
+199.24689 766.3
+199.27499 1388.5
+199.28365 2069.7
+199.29140 922.3
+199.30032 992.8
+199.30934 1373.3
+199.31885 1054.0
+199.37265 678.5
+199.38060 687.5
+215.13895 860.3
+233.16432 5751.0
+234.16811 1353.6
+240.14499 518.8
+261.15979 1166.0
+271.68118 853.7
+271.83743 599.0
+299.13477 709.5
+302.15799 498.8
+302.25412 644.2
+314.20670 1082.8
+322.39166 591.7
+323.92828 536.8
+342.30783 647.2
+344.19522 767.9
+350.27954 628.0
+362.20547 1762.8
+363.21368 739.5
+431.37448 541.2
+448.22870 818.2
+457.28012 2849.5
+458.27927 729.4
+461.00079 548.3
+461.27866 649.4
+463.20868 626.3
+467.01840 739.1
+467.20258 3549.8
+473.41956 556.9
+482.70099 693.6
+483.01663 3528.5
+483.26773 3110.9
+483.42221 643.8
+483.51761 938.8
+489.97110 525.4
+490.76947 686.1
+513.02661 1871.2
+513.27686 3495.1
+513.52661 3125.5
+513.77997 1445.1
+515.00183 576.6
+519.26062 1214.4
+519.76117 756.6
+532.48206 1927.9
+536.31775 2111.3
+537.31940 1100.2
+541.54877 1446.1
+541.79590 905.1
+542.04590 660.1
+546.36475 1538.3
+547.27753 578.0
+549.20435 913.2
+552.29285 1143.5
+553.29486 868.3
+553.61871 799.0
+556.34723 8401.4
+556.78973 1669.9
+556.95728 913.0
+557.04144 2936.5
+557.29242 4148.4
+557.35187 3799.8
+557.54352 2423.5
+558.35254 1067.5
+565.18561 649.3
+592.01624 604.9
+612.65179 864.7
+618.32550 10406.3
+618.65930 18771.7
+618.99341 16526.8
+619.32721 6853.8
+619.66046 1908.8
+623.34424 715.6
+623.60681 853.9
+623.75641 1299.2
+623.90015 2095.6
+624.18677 956.5
+630.47021 781.3
+632.23987 574.0
+637.08606 874.4
+639.83752 824.0
+640.08563 849.1
+656.01935 1504.3
+656.68591 1241.5
+668.36298 843.7
+671.84503 10195.0
+672.34692 11967.7
+672.84827 6768.0
+673.34998 2436.2
+676.64301 1126.0
+679.83948 2478.7
+680.09216 814.6
+680.34393 841.7
+680.59009 788.0
+687.35431 586.1
+687.71301 1073.1
+689.70251 9631.8
+690.03619 16827.6
+690.37054 16305.9
+690.70551 8831.9
+691.03766 1146.9
+692.01465 1849.1
+692.34808 3209.5
+692.67804 1276.6
+693.01575 669.5
+694.38055 843.3
+701.65216 1058.9
+707.38892 645.2
+710.09857 589.9
+727.37286 1495.0
+728.38202 1078.2
+728.88593 1637.5
+733.90497 3762.0
+734.40631 1699.8
+734.90668 1151.6
+735.90656 1007.6
+756.84607 568.8
+771.15424 670.3
+785.40857 1535.7
+785.90637 2367.1
+786.40948 1093.9
+786.91620 902.1
+795.59119 1021.2
+807.37152 673.9
+820.42938 1007.7
+820.91418 812.7
+828.92249 2129.7
+829.42542 2103.7
+829.92505 2357.2
+834.40936 956.0
+834.91205 1031.0
+858.12921 839.6
+873.96118 890.0
+877.45044 12459.5
+877.95221 22425.8
+878.45270 18541.4
+878.95361 8341.2
+879.45239 779.4
+926.98657 1745.9
+927.48633 2157.6
+927.98743 2309.8
+928.48535 1323.6
+987.51508 758.6
+1019.67371 755.1
+1130.72180 640.9
+1153.48499 639.4
+1160.52527 628.3
+1174.49976 723.4
+1197.93726 741.8
+1198.07422 2963.3
+1489.73694 874.2
+1705.92432 690.0
+1809.45142 612.2
+1831.61255 668.0
+1870.15857 811.9
+1875.99695 608.5
+1877.50720 740.7
+1877.96790 658.5
+1879.55469 19539.0
+1882.06580 594.7
+1882.32361 576.2
+1907.04285 7895.7
+1918.78149 1052.1
+1930.77026 942.1
+S	2151	2151	1879.94940793
+Z	2	3758.051
+Z	3	5636.573
+532.44379 1917.9
+571.26392 693.4
+634.95428 507.0
+646.43164 599.1
+676.62653 1205.4
+726.38904 595.6
+767.55371 691.6
+795.62848 807.3
+950.09961 611.7
+1019.73010 718.0
+1057.22424 687.1
+1197.99402 3288.3
+1327.98584 686.2
+1503.00867 603.7
+1877.44055 692.7
+1878.20325 952.1
+1878.80371 834.0
+1879.50696 19298.5
+1880.70923 639.3
+1881.05627 904.1
+1907.04248 7172.1
+1985.49194 631.3
+S	2153	2153	803.6158226
+Z	5	4013.03999
+215.24779 574.1
+219.39392 553.4
+221.48788 577.7
+233.36285 664.4
+235.81801 543.9
+251.09911 679.3
+254.27919 525.3
+260.53006 653.7
+260.72177 586.8
+263.56570 739.4
+291.95316 550.5
+326.04401 725.2
+332.03516 628.2
+353.21475 732.3
+362.49423 836.3
+375.86914 577.3
+384.86722 633.1
+390.25842 617.5
+444.95383 550.6
+498.23462 704.2
+518.50836 646.5
+532.42102 1660.9
+559.31970 1536.8
+577.97485 755.4
+580.27124 648.7
+591.80524 5156.9
+592.30835 3218.2
+613.50977 575.2
+630.35284 1833.7
+631.35339 762.7
+651.08453 776.9
+676.65857 1038.6
+677.87555 1110.5
+707.61530 3600.1
+707.86554 2258.1
+708.11377 3589.7
+708.36829 1078.1
+739.63446 3510.5
+739.88800 6730.0
+740.14069 6149.3
+740.38977 3463.3
+740.63940 1065.0
+743.43945 4216.7
+744.44092 1387.8
+747.79004 886.7
+748.18317 1264.8
+748.38184 2233.6
+748.88904 832.8
+756.64984 813.0
+756.89264 1321.4
+776.40332 753.7
+779.45337 629.0
+786.60504 804.7
+787.34723 815.2
+788.71527 897.3
+795.61237 1136.9
+830.93988 1286.6
+834.93317 1467.8
+835.17639 891.2
+835.43494 1738.0
+848.41260 1969.2
+862.38849 1838.0
+863.69165 1724.1
+863.94287 2287.2
+864.19452 1849.6
+864.70667 745.7
+874.47321 2214.5
+877.77979 852.7
+878.11420 1846.1
+878.43671 2299.4
+885.45325 765.1
+888.95587 3153.5
+889.20941 4424.7
+889.45905 4988.5
+889.70831 2575.6
+889.95874 1381.6
+890.20978 1303.9
+899.45526 778.0
+902.70508 1825.5
+902.95209 1464.9
+903.20294 1522.5
+903.44336 932.8
+907.20544 2331.8
+907.45239 1706.1
+916.96472 1626.7
+917.21136 840.1
+917.46655 1358.2
+921.21472 2632.5
+921.46875 3921.6
+921.71704 2902.5
+921.96881 1320.1
+922.21851 1081.5
+922.48279 1023.6
+922.95569 733.5
+923.42908 1087.3
+934.13110 844.8
+934.47083 2365.9
+934.72211 1277.0
+934.97217 1939.8
+935.21808 1769.8
+935.47504 1122.7
+935.72375 959.2
+937.48163 785.8
+937.80243 891.0
+938.97595 11039.1
+939.22650 14910.0
+939.47791 15826.5
+939.72766 11379.0
+939.97540 5334.6
+940.22607 1071.2
+943.14825 5988.1
+943.48309 10918.0
+943.81775 9333.8
+944.15192 5374.1
+944.48358 3650.4
+944.81903 1397.4
+947.47766 1341.4
+960.81329 808.2
+963.48108 945.1
+967.49500 1672.9
+967.73505 3201.1
+967.98853 1694.1
+968.23633 1624.6
+971.99481 3375.8
+972.24182 4383.9
+972.49377 3907.7
+972.74017 3074.3
+972.99554 1041.4
+979.12262 830.5
+981.98883 1219.7
+986.18103 1409.0
+986.51544 1507.7
+986.84711 825.3
+1008.52478 3772.0
+1008.85889 5615.3
+1009.19135 4857.3
+1009.52423 4026.5
+1009.85034 903.6
+1024.47876 993.1
+1027.52930 3872.0
+1027.86609 7419.8
+1028.19714 5224.7
+1028.53210 4364.7
+1028.86597 1505.8
+1040.50781 1026.1
+1045.99780 1234.5
+1046.48242 867.9
+1057.27576 1004.2
+1058.51257 2737.3
+1059.51819 720.7
+1060.56506 1130.9
+1064.87585 1274.4
+1065.20618 1801.1
+1065.54541 1121.3
+1070.21631 1739.7
+1070.54956 2228.1
+1070.88184 1968.3
+1071.22986 1238.1
+1080.01611 1020.6
+1095.52783 996.2
+1096.03259 1537.5
+1096.53613 1007.6
+1106.29077 682.1
+1108.56592 1115.5
+1108.89441 966.0
+1109.22827 1244.6
+1109.56055 1052.3
+1131.04736 1217.2
+1131.53442 1251.3
+1132.05774 832.8
+1140.47876 689.8
+1142.24585 1138.6
+1142.57300 3402.6
+1142.91223 2758.2
+1143.24744 1325.6
+1150.13440 699.2
+1180.24634 950.8
+1181.57043 1551.6
+1182.06689 2274.0
+1182.57153 2159.1
+1183.59680 1012.4
+1185.22974 819.9
+1185.59607 996.0
+1185.91663 794.8
+1197.93262 2783.0
+1203.58948 989.7
+1203.93567 780.9
+1208.93933 2582.8
+1209.26758 6983.6
+1209.60376 4589.2
+1209.93457 2640.3
+1210.27295 2013.6
+1210.60352 962.2
+1238.61426 1455.7
+1239.12378 1422.8
+1286.13635 816.5
+1316.15808 1369.7
+1316.66516 883.6
+1317.15503 1200.4
+1344.10510 614.5
+1406.21436 744.5
+1414.22339 3114.5
+1414.72339 4886.6
+1415.22131 6127.1
+1415.72778 3105.3
+1416.23828 1819.1
+1443.87793 710.9
+1512.79126 1960.3
+1540.80957 938.0
+1541.28076 851.1
+1541.78882 1742.2
+1542.30896 907.9
+1649.26636 660.5
+1878.50452 977.3
+1878.93872 1083.4
+1879.19543 2800.3
+1879.56616 19530.4
+1879.91577 2746.3
+1880.19641 689.3
+1880.96741 932.3
+1907.04736 7795.6
+1930.71313 1111.1
+S	2154	2154	1004.2668946
+Z	4	4013.03628
+271.66901 713.6
+274.97684 631.3
+290.47388 656.9
+350.27255 792.3
+482.66135 741.1
+485.40256 600.3
+495.73785 677.1
+505.47141 665.2
+532.44202 1928.8
+570.78925 628.8
+676.66376 815.3
+795.61365 740.7
+923.42780 1785.2
+923.91949 1024.5
+924.43103 1582.8
+943.15277 1012.7
+943.48779 1881.2
+944.15295 690.7
+957.86371 630.2
+972.23517 937.2
+972.49268 951.2
+972.73584 1024.7
+978.70026 608.3
+979.07410 615.8
+988.72095 688.3
+1027.85925 1004.7
+1036.15369 613.5
+1058.50757 687.6
+1070.23987 861.3
+1084.22144 630.5
+1137.56726 1311.5
+1182.06665 1005.1
+1197.98901 3110.2
+1240.53821 666.6
+1295.63489 975.8
+1295.97974 2308.5
+1296.32166 3414.1
+1296.65723 2184.5
+1296.98999 1060.3
+1414.72205 1936.8
+1415.22876 1352.0
+1512.79114 1225.7
+1525.43945 717.5
+1542.28967 711.7
+1600.09106 634.0
+1781.82629 694.1
+1878.06628 665.6
+1878.73633 1040.8
+1879.14587 1602.7
+1879.58716 19404.1
+1880.28589 1332.7
+1880.42078 1354.5
+1881.94666 948.2
+1889.62000 621.9
+1893.91565 840.7
+1907.01514 7417.7
+S	2155	2155	516.5388671
+Z	4	2062.12417
+138.44469 5673.1
+151.27089 5973.5
+153.39882 6636.9
+157.61145 7118.6
+169.14546 5869.0
+171.25047 5643.9
+171.52303 7195.6
+182.79178 6054.0
+184.79707 5858.2
+187.10718 52233.8
+188.11006 12355.6
+188.26361 7901.7
+188.27350 10083.4
+188.28030 9533.4
+188.29239 9545.8
+188.30531 9877.3
+188.31902 7112.2
+190.36731 6739.7
+191.06314 7057.7
+193.47861 5231.6
+198.90248 8032.8
+199.18895 11218.7
+199.19820 5519.9
+199.23128 5032.7
+199.26631 6892.2
+199.27426 14241.9
+199.28651 29457.3
+199.29778 10569.1
+199.38507 11570.8
+199.39534 9719.8
+202.92133 6567.3
+215.10135 11861.8
+220.32191 7679.8
+233.76631 5769.0
+247.65144 6473.0
+251.58594 6212.0
+299.48950 9842.9
+301.97281 5739.1
+308.91895 5789.0
+322.18631 37522.5
+323.19260 15795.0
+328.76346 6321.2
+330.12949 41463.1
+331.13446 13741.4
+336.20599 7823.0
+341.17026 6167.2
+350.20410 32263.3
+350.70529 6392.7
+369.22327 227216.5
+370.22717 26597.6
+372.39694 6080.6
+373.50467 6031.5
+401.20193 26242.6
+402.20667 14319.6
+404.04623 6107.5
+406.56885 6648.7
+429.19681 91489.9
+430.01126 6425.5
+430.19962 48164.4
+431.20087 7695.8
+455.24750 48479.1
+455.58133 35343.2
+455.90649 6000.1
+482.30670 31435.7
+482.68893 7517.9
+484.25760 12676.9
+485.24878 113456.4
+486.25217 103649.8
+487.25400 19478.0
+497.27917 8040.2
+499.28561 14153.9
+501.23547 10171.4
+524.27478 7684.2
+527.93793 7032.1
+532.41913 22148.9
+532.46771 7119.0
+534.96783 16431.6
+535.30194 15552.6
+542.27954 63558.3
+543.28375 74627.8
+544.28479 13004.8
+549.18451 8275.6
+555.97455 11433.0
+558.74933 11991.0
+565.30615 13502.4
+565.63965 25700.8
+565.96820 10071.7
+598.33264 101832.6
+599.33594 166732.1
+600.33936 37954.8
+601.33246 7060.1
+612.37000 32773.3
+613.37048 12383.6
+630.44214 7463.1
+672.36389 9164.3
+676.66144 9720.2
+682.36462 98951.9
+682.86688 72217.6
+683.36682 21777.0
+685.64874 7574.3
+688.17511 5140.1
+697.39764 13679.9
+698.40277 38295.7
+699.40204 25086.7
+700.40607 13641.0
+705.34094 16240.8
+705.48065 7659.3
+706.34424 31094.2
+707.34601 7277.1
+711.39996 14144.3
+725.88098 14030.7
+726.38055 10459.8
+745.40985 60213.7
+745.91107 46369.8
+746.40790 11371.7
+751.22461 6675.0
+782.41034 16944.4
+790.91418 125472.7
+791.41565 109848.8
+791.91577 37753.3
+795.60760 9693.2
+812.42810 55921.4
+813.43054 253906.6
+814.43268 72567.6
+817.36169 5930.0
+847.45502 11753.8
+847.95911 17096.0
+848.47107 7443.9
+849.52466 6250.5
+853.41150 16081.3
+854.41730 7909.2
+941.53076 5724.2
+983.70099 7343.7
+994.82611 5302.0
+1002.42706 6601.8
+1019.99878 5953.8
+1057.26038 7164.9
+1163.82776 6870.3
+1168.99585 6183.3
+1197.93494 34986.5
+1426.60669 6020.9
+1441.11218 6962.9
+1489.38477 8865.2
+1509.99792 6637.1
+1525.51709 7874.8
+1864.44971 8365.6
+1869.85498 8821.9
+1876.33704 7610.9
+1878.09106 7995.0
+1878.69604 15423.8
+1879.26001 25128.6
+1879.58887 196212.7
+1879.99915 32248.7
+1880.19006 14853.8
+1880.50122 12519.5
+1881.06897 7098.8
+1907.04053 75583.6
+1909.29211 6743.2
+1918.85791 10004.4
+1930.70886 12560.5
+S	2157	2157	516.5404521
+Z	4	2062.13051
+138.34987 7334.5
+143.35667 7658.8
+144.06726 5869.4
+146.39429 6327.5
+161.12372 7093.4
+161.24774 7974.2
+169.49174 7605.5
+171.62088 7517.7
+175.62462 6129.0
+177.77330 7011.1
+184.13028 6838.1
+185.11563 13963.7
+187.10744 35644.3
+187.24335 6462.9
+188.11116 9646.0
+188.22624 6204.2
+188.24052 8899.1
+188.25427 10352.8
+188.27826 8197.4
+188.30119 8397.7
+188.31026 7224.2
+188.32712 8498.2
+188.34090 8280.6
+198.90562 8253.0
+199.20599 6837.4
+199.24518 8160.2
+199.25890 11014.9
+199.27454 15284.0
+199.29076 22327.6
+199.30629 19485.7
+199.39996 10783.0
+215.10147 9645.7
+216.61409 7381.8
+233.03174 6858.2
+233.56926 7759.1
+239.75166 6734.3
+242.05159 7008.2
+243.91971 7168.2
+271.51306 7950.0
+271.66989 8594.0
+272.17078 15262.5
+289.38144 7132.2
+298.91177 6598.5
+310.31348 6916.1
+322.18710 26457.4
+322.31750 6679.4
+323.18948 9674.1
+323.45453 6742.2
+327.20206 18492.3
+330.12897 28483.3
+336.20709 15197.4
+350.20419 65414.4
+350.27856 7070.8
+350.70642 17878.2
+351.21329 16988.4
+369.22345 633623.6
+370.22809 74945.9
+401.20178 18099.7
+402.20590 8704.1
+413.13388 7275.7
+427.54086 8938.7
+427.95218 7712.5
+429.19696 60322.0
+430.19952 35972.9
+455.24673 123980.1
+455.58096 89299.2
+455.91507 29900.3
+456.25021 7990.7
+468.28726 8841.4
+474.27325 7721.7
+482.30701 74933.1
+482.97653 9354.0
+483.31232 19974.0
+484.25613 36997.7
+484.59109 27101.8
+484.92480 10437.0
+485.24854 73936.3
+486.25238 81881.8
+487.25211 24995.5
+488.75726 13138.2
+491.60550 11726.8
+498.25790 10322.3
+499.28549 47999.7
+500.28641 8728.3
+527.61218 13900.2
+532.48480 22077.0
+534.97052 55653.5
+535.30389 51655.4
+535.63751 15581.8
+542.28015 43591.2
+543.28406 48995.5
+544.28461 15008.5
+549.14954 8863.5
+555.97516 22537.4
+556.30780 31082.5
+556.64343 14437.7
+558.63116 7325.1
+558.75085 18908.2
+559.75317 8784.8
+565.30646 71552.8
+565.64020 74063.7
+565.97424 46375.6
+598.33258 66266.0
+599.33545 116895.4
+600.33801 42887.3
+603.23041 6073.3
+612.36908 94955.9
+613.37183 21788.1
+630.32513 10021.1
+631.00043 11476.0
+642.34753 6548.3
+650.36328 9341.2
+663.11102 7166.2
+672.25079 8331.2
+672.36566 23841.7
+672.87451 9123.9
+676.65717 14180.8
+682.36511 244151.2
+682.86743 195658.5
+683.36768 90022.0
+683.86816 16910.6
+697.39948 9306.1
+698.40472 27454.3
+699.40125 77397.9
+700.40607 26095.6
+702.38916 7695.8
+704.26093 6797.8
+705.34906 7889.5
+706.34631 24034.9
+707.34698 12256.7
+710.89795 34728.4
+711.40137 27538.3
+711.90533 7963.4
+719.40833 10791.8
+725.88104 35182.4
+726.38422 33085.2
+726.88177 16274.6
+739.42480 10747.6
+745.41034 148834.4
+745.91156 150347.4
+746.41394 61735.6
+746.90588 11032.3
+771.73004 8716.9
+781.90997 29195.4
+782.40631 12414.7
+782.91150 11344.3
+790.91431 338625.3
+791.41510 326115.9
+791.91656 159456.8
+792.41669 36164.0
+795.61523 7970.1
+812.42719 31957.7
+813.43024 166323.2
+814.43445 74082.0
+815.43457 8715.2
+847.45514 36554.4
+847.95715 48591.4
+848.45538 21325.2
+875.73865 8153.5
+969.16852 7495.2
+998.94635 6770.6
+1056.04517 7233.4
+1198.08374 38704.0
+1293.66333 7255.2
+1354.61108 7642.4
+1369.36255 7046.0
+1649.41382 6796.7
+1667.28381 10397.0
+1786.14502 8430.2
+1875.72693 8386.7
+1877.09265 10084.7
+1879.29028 32487.7
+1879.58203 226483.9
+1880.10400 25369.3
+1906.97571 85001.6
+1918.83264 9846.2
+1930.55078 11230.7
+S	2158	2158	1879.99740793
+Z	2	3758.147
+Z	3	5636.717
+532.46875 1825.3
+573.10199 656.5
+676.65570 1081.8
+729.69427 702.4
+747.69080 592.0
+795.61975 890.0
+858.04779 653.2
+888.01318 772.0
+974.97083 690.5
+1198.04944 3618.5
+1489.71130 637.1
+1529.64246 648.0
+1879.17224 2758.4
+1879.56213 18900.0
+1879.98474 2927.9
+1907.03003 7180.8
+1907.35095 822.5
+1930.60071 963.4
+S	2159	2159	804.0194246
+Z	5	4015.058
+224.88606 3206.8
+229.76059 2924.1
+233.16307 4432.0
+233.56512 4124.5
+235.21004 3084.2
+238.12469 3145.0
+239.90819 3567.5
+246.61258 3039.1
+247.03583 3291.6
+263.03848 3417.2
+293.88647 3643.0
+296.03058 3245.6
+297.48801 3721.2
+315.00116 3439.8
+328.87543 3640.9
+350.27884 3145.3
+366.63843 3368.8
+403.97287 3099.9
+461.23785 5535.5
+465.00623 3839.7
+482.63611 4859.2
+490.42960 3588.7
+506.27884 4266.3
+511.93784 3297.9
+532.46442 9211.4
+533.44464 3049.3
+555.25775 5225.7
+555.75293 4485.6
+559.31934 6440.7
+559.60675 3551.7
+572.31573 3741.3
+591.80487 16576.2
+592.30304 12795.7
+592.80444 6060.6
+616.64960 4709.8
+630.35449 12512.7
+631.35297 4511.9
+649.30853 3859.6
+672.30560 5648.8
+676.65100 7587.4
+690.85327 3904.2
+700.85638 4114.6
+701.10187 14178.5
+701.35724 5665.2
+703.35889 3389.4
+707.61743 9971.4
+707.86401 15033.8
+708.11334 10191.2
+708.36255 6673.9
+708.61469 5446.4
+733.37927 5988.5
+736.36951 3602.9
+739.63940 23908.7
+739.88788 23735.2
+740.13892 24656.3
+740.39496 6242.0
+743.44049 21126.5
+744.44232 5791.3
+747.97614 8855.8
+748.17712 4512.9
+748.38336 11755.9
+748.89172 3997.5
+751.78442 5716.1
+754.69324 3569.8
+755.03809 4552.3
+757.13544 4191.4
+778.21692 5782.2
+782.71808 5501.3
+783.04230 6210.4
+783.37396 5419.6
+784.79468 4988.2
+785.51514 4876.4
+786.40210 7818.7
+787.35712 6678.4
+788.04303 3862.7
+788.38135 9014.3
+788.71082 8629.9
+830.68414 7452.4
+834.94263 5704.2
+835.19373 8557.1
+835.43512 5245.9
+836.46832 4075.7
+848.40851 9372.0
+859.46271 4104.1
+862.38727 5187.7
+863.69257 6821.2
+863.94818 6235.7
+864.19086 5636.8
+864.44391 5658.9
+866.44397 3836.6
+867.44293 3901.2
+871.69885 6040.4
+874.48090 6241.3
+875.48578 4149.4
+877.77600 5854.8
+878.10535 5378.6
+885.20892 4568.7
+888.95740 17283.2
+889.20831 21589.3
+889.45227 17114.4
+889.71161 20481.8
+889.96057 13922.2
+894.92218 9467.8
+902.45752 5771.2
+902.69922 11007.3
+902.95721 7329.7
+903.71136 3570.5
+907.20258 5129.1
+907.45953 5303.2
+917.22089 4542.9
+917.47192 7710.9
+917.71423 6873.7
+921.21863 17370.7
+921.46796 33798.9
+921.71979 25655.5
+921.97168 12399.9
+922.22278 6854.9
+922.48279 4977.6
+923.43207 4898.2
+923.92444 6192.1
+934.12427 6485.4
+934.47168 23353.0
+934.79498 12032.9
+934.97388 16217.9
+935.14337 4971.9
+935.22827 6955.3
+935.47144 9505.3
+935.73022 4857.0
+937.80469 5546.4
+938.13977 6020.0
+938.97552 44554.2
+939.22540 69613.9
+939.47754 60163.8
+939.72784 38034.4
+939.97797 27071.1
+940.22430 15596.5
+940.48199 6221.0
+943.14795 35032.9
+943.48309 53183.5
+943.81805 50796.3
+944.14917 20656.2
+944.48560 13052.2
+944.82214 6432.8
+947.47327 10547.8
+958.94495 7021.4
+959.44550 13667.4
+959.93781 6760.1
+962.85913 4769.5
+967.49792 7613.0
+967.74023 8811.2
+967.99030 6860.5
+968.23999 8724.5
+971.98389 6516.4
+972.24292 12642.7
+972.49298 19395.8
+972.74036 13858.6
+985.86255 5612.1
+986.18573 5540.3
+986.52008 6429.4
+986.86102 4082.7
+1008.52441 18020.4
+1008.85870 14449.9
+1009.19385 15531.0
+1009.52368 14725.8
+1009.86151 6813.7
+1022.95569 4042.4
+1023.47675 9473.0
+1023.96509 5040.5
+1027.53333 18909.9
+1027.86584 31735.0
+1028.20374 21067.6
+1028.53406 15825.2
+1028.88550 3756.5
+1040.49805 4110.4
+1041.51855 3599.2
+1045.99756 9054.7
+1046.49280 9217.4
+1051.56470 4439.6
+1057.27502 3929.0
+1058.51318 8017.9
+1059.52124 7523.4
+1064.54993 4970.6
+1064.87732 10048.3
+1065.21619 7189.3
+1070.55615 14338.0
+1070.89380 11192.6
+1079.49829 4663.8
+1080.01221 12810.9
+1080.51184 8699.2
+1095.53125 13050.0
+1096.03833 10558.6
+1108.56824 5854.0
+1108.89441 7940.1
+1109.21851 5718.9
+1131.52734 6321.2
+1132.04114 6128.9
+1142.57349 8723.5
+1142.91040 10790.7
+1143.23840 9781.3
+1159.72095 3596.7
+1159.96436 3375.3
+1181.57056 13713.3
+1182.07288 19870.9
+1182.57678 13715.5
+1183.07141 7887.0
+1185.58557 6444.7
+1196.30261 3165.7
+1198.04102 18345.9
+1203.26343 7922.4
+1203.58777 10345.1
+1203.92395 4556.0
+1208.93152 14554.6
+1209.26904 30064.7
+1209.60144 32057.7
+1209.93701 22344.2
+1210.26978 9600.3
+1238.62390 5702.4
+1239.10693 6778.3
+1262.36096 4748.7
+1317.15649 4354.3
+1342.21460 4035.7
+1371.95618 3595.2
+1404.39282 3557.4
+1414.21216 15537.9
+1414.72278 29030.8
+1415.22534 18756.9
+1415.72705 16271.1
+1416.22461 4905.9
+1513.29333 5744.9
+1525.34937 4607.5
+1541.28540 4537.8
+1541.79724 6625.4
+1645.97668 2995.2
+1662.55579 3595.6
+1762.37988 3648.3
+1777.08630 4902.9
+1870.10925 4530.1
+1877.34119 3298.9
+1877.43677 3336.0
+1879.15771 16792.6
+1879.58789 96743.0
+1880.01672 14022.1
+1881.16711 4560.8
+1906.29053 3876.0
+1907.03601 36317.1
+1930.51904 6499.7
+S	2161	2161	1879.96424127
+Z	3	5636.617
+Z	2	3758.081
+510.06174 655.7
+512.09058 743.9
+532.47253 1594.9
+542.52747 753.8
+676.63544 1225.6
+770.45599 701.1
+874.90155 581.4
+1057.25293 823.9
+1079.30859 693.3
+1198.05994 2968.7
+1245.75830 710.4
+1274.77612 578.6
+1465.47046 743.7
+1525.49866 1218.6
+1548.56506 676.9
+1607.45447 717.1
+1785.56726 945.3
+1876.38574 910.6
+1879.07190 1733.2
+1879.53223 19736.9
+1879.95386 1773.1
+1880.45630 583.6
+1881.45740 676.6
+1907.06213 7450.7
+1918.81348 650.2
+1930.69385 1168.3
+S	2162	2162	1907.4908246
+Z	2	3813.134
+Z	3	5719.197
+532.49915 1629.1
+540.73340 656.2
+559.19489 596.5
+585.06970 676.5
+655.11798 542.8
+676.62134 816.0
+700.34076 576.3
+795.60095 748.8
+1020.81360 717.7
+1057.21716 677.5
+1071.89355 584.3
+1079.33289 608.3
+1107.44250 761.1
+1136.56799 608.9
+1198.10803 3348.1
+1316.10083 690.6
+1397.22961 618.4
+1489.56311 1070.6
+1527.65649 718.7
+1612.76953 628.3
+1878.24316 906.9
+1878.40857 611.4
+1879.07825 1703.4
+1879.48450 18587.3
+1879.88281 2643.2
+1880.53430 1037.6
+1907.07971 7495.4
+1907.34229 1105.8
+1918.85999 705.9
+1930.44702 1064.1
+S	2163	2163	1198.55140793
+Z	3	3592.379
+Z	2	2395.255
+374.82108 707.5
+414.37274 813.1
+416.25955 745.3
+443.17407 703.5
+482.67670 682.9
+504.40915 583.1
+510.13980 575.8
+513.02356 596.3
+525.96356 566.3
+532.48572 1865.7
+536.27789 802.4
+546.02142 669.7
+549.18616 635.2
+550.88232 591.9
+559.86877 823.5
+613.05670 688.7
+635.39197 671.0
+676.64545 1300.3
+680.08411 737.2
+698.81390 586.8
+709.27380 606.8
+776.82233 620.4
+782.34601 2522.6
+783.34674 767.0
+795.59094 820.4
+804.62836 643.0
+808.87640 759.6
+895.43115 2024.7
+951.53394 22775.8
+952.53589 9970.4
+953.54187 2267.6
+1021.19849 695.3
+1023.49316 1459.1
+1057.25281 1123.7
+1092.90833 633.4
+1137.56677 910.3
+1140.28918 537.7
+1180.59290 1302.4
+1198.08655 3570.1
+1242.59082 622.0
+1443.21912 656.6
+1777.02466 1186.6
+1788.55957 629.1
+1870.30774 943.7
+1877.70544 796.9
+1878.89563 1033.2
+1879.15576 1871.2
+1879.53992 20026.4
+1879.91125 1158.7
+1880.15222 1033.0
+1907.09351 7587.2
+1918.80237 663.5
+1930.67114 1105.6
+S	2165	2165	539.7178246
+Z	3	1615.878
+Z	2	1077.588
+136.07504 18804.6
+139.17036 2572.4
+140.78934 3002.5
+141.95654 3157.3
+145.15433 3032.4
+146.92029 2998.4
+153.61617 3181.7
+153.69403 3092.2
+154.74086 2810.1
+155.86034 3488.7
+165.76529 3296.7
+165.79967 3205.8
+168.37541 3219.9
+169.13309 56492.3
+171.63759 3909.7
+188.24001 3115.5
+188.25716 9495.6
+188.28180 11000.7
+188.29552 9893.0
+188.31181 8340.9
+188.32724 5561.7
+188.43193 3386.8
+193.44464 3310.3
+196.97063 3531.7
+199.18314 5115.2
+199.21692 3779.5
+199.27341 7912.1
+199.28133 17503.4
+199.32401 3812.5
+199.37903 6734.3
+201.10506 3496.1
+214.50815 3591.8
+217.13644 83149.4
+218.13934 4256.5
+232.13454 4643.7
+245.13144 56691.2
+249.15936 24207.3
+250.14351 12226.7
+267.11554 4552.9
+267.63483 3480.3
+271.68631 3002.7
+278.13824 41933.6
+295.11099 4876.2
+295.16455 1149741.0
+295.43143 5903.4
+295.70468 3860.2
+296.16809 51511.3
+314.34244 3525.4
+335.17859 39901.7
+342.27231 3042.0
+350.28601 4368.4
+363.17288 156400.7
+364.17517 10692.1
+381.35242 4355.5
+390.23871 7426.0
+395.94962 3022.5
+408.19424 418828.4
+409.19748 24964.0
+421.62729 3280.8
+426.20425 33167.3
+431.79382 3199.6
+436.18878 11285.2
+438.17032 2919.3
+438.17749 2915.6
+445.28464 3583.1
+476.21359 8951.5
+486.51212 4121.2
+486.82669 3915.9
+493.28268 55579.1
+494.28522 4660.2
+502.65881 3356.9
+504.24835 6222.5
+521.27753 115204.6
+522.27930 13413.4
+527.78204 3360.7
+532.53577 8196.5
+532.57867 4026.9
+573.49579 4651.8
+592.88708 2890.8
+610.25372 4876.2
+610.59210 3909.2
+622.56134 3492.9
+652.33459 2943.3
+690.92407 3371.8
+794.98596 3701.8
+795.63043 6015.1
+811.16852 3758.0
+945.20709 4426.4
+1019.88788 3463.8
+1064.79602 3622.5
+1069.96875 3686.8
+1144.37952 3401.5
+1198.21094 15636.3
+1213.86816 3175.3
+1294.13049 3352.1
+1389.68079 3497.8
+1397.42847 2910.2
+1489.70361 4659.0
+1498.13379 3710.6
+1525.36841 4794.6
+1773.33533 3330.6
+1872.42053 3760.0
+1878.18445 5868.0
+1878.44226 4613.4
+1879.27551 35701.6
+1879.54626 101613.8
+1880.07068 5121.6
+1880.83813 4272.0
+1881.75574 3243.8
+1907.05615 43040.0
+1908.30322 3479.8
+1930.59570 6032.2
+1966.40540 2988.7
+S	2166	2166	924.9768246
+Z	3	2771.655
+Z	2	1848.106
+248.04869 79221.9
+271.60519 88267.3
+271.67422 77544.4
+281.24210 88298.5
+308.91934 127224.0
+309.65604 74244.6
+316.51959 84196.7
+327.62790 98045.6
+354.81522 73610.6
+388.20657 81285.3
+427.57028 122152.8
+454.78558 79672.2
+471.67331 76304.1
+473.89291 85010.1
+476.21872 102251.6
+483.59323 81727.3
+486.52496 111379.1
+486.84891 99194.6
+497.32080 92382.0
+507.18967 116146.7
+530.21521 114616.8
+532.52014 253899.8
+533.74323 94076.8
+534.25250 85956.3
+616.27502 122534.8
+652.98383 87147.3
+676.63531 110422.4
+682.36188 287851.4
+729.36499 155409.5
+729.86829 117996.0
+781.43042 223415.2
+794.88928 105874.9
+795.61194 136614.0
+951.53876 170484.9
+1057.22302 98403.7
+1114.42664 100322.8
+1188.16064 94897.7
+1197.61511 80614.1
+1198.16504 466534.2
+1320.58704 83169.9
+1385.69519 71547.1
+1566.03162 81998.2
+1856.80933 109745.9
+1870.30859 108514.1
+1878.59692 74481.4
+1878.77954 80316.9
+1879.52686 2559643.8
+1907.05249 995433.5
+1930.72607 128153.0
+S	2167	2167	540.720991267
+Z	3	1618.888
+Z	2	1079.594
+136.07515 27245.3
+139.72398 4290.0
+147.32065 4569.0
+153.95139 4509.1
+154.04970 5575.3
+157.60220 4437.3
+165.76834 5368.4
+169.13313 45911.6
+171.64555 4367.3
+188.25052 5151.9
+188.26161 5388.6
+188.27534 9903.8
+188.28615 10134.6
+188.29616 8313.8
+188.30498 7001.4
+188.31367 5834.0
+188.32314 5688.8
+198.05994 4042.1
+198.90407 6766.7
+199.18573 12254.2
+199.24849 4328.3
+199.26436 5134.3
+199.27234 7441.3
+199.28386 24100.4
+199.29987 8984.4
+199.33224 5132.0
+199.38126 10065.7
+201.96280 4687.8
+208.39948 4715.8
+214.51451 4520.6
+217.13643 70862.2
+218.13982 6734.1
+231.52010 4325.5
+245.13135 51700.1
+249.15880 26772.9
+250.14301 15523.4
+277.15414 5584.3
+278.13800 33684.0
+287.22989 4245.6
+289.20389 4513.3
+294.89957 6996.2
+295.16455 1237280.0
+295.60532 5143.4
+295.70367 8920.9
+296.16806 155380.2
+308.90576 4457.5
+335.17767 29337.7
+353.38593 4381.7
+362.16617 5063.8
+363.17273 143696.5
+364.17535 27833.6
+380.05817 5469.4
+408.19421 448389.0
+409.19769 84350.4
+409.72870 5168.9
+426.20502 26256.2
+427.54553 5535.5
+436.18896 7640.7
+443.87668 4709.8
+477.67761 5289.3
+493.28271 46490.5
+494.28561 10387.0
+521.27765 151842.0
+522.28101 26027.6
+532.49683 13543.9
+676.63818 7167.6
+682.78217 4912.6
+731.11951 5897.8
+750.50183 4618.0
+764.46216 4553.8
+794.18054 4563.0
+826.85333 5889.4
+891.39050 4541.3
+1019.88531 4227.7
+1198.10876 25528.2
+1258.18115 4889.1
+1308.39063 4822.5
+1777.58728 5412.2
+1789.76379 4764.7
+1824.45190 4831.9
+1877.14258 4893.4
+1877.64856 5777.1
+1878.21875 4234.8
+1878.77551 16966.2
+1879.16797 12326.4
+1879.54187 159483.7
+1879.91394 11527.6
+1880.30603 14861.0
+1881.99939 5319.1
+1907.05579 56300.6
+1910.04102 5574.3
+1930.61084 5877.0
+1951.29028 4443.9
+S	2169	2169	903.2034171
+Z	4	3608.78237
+256.94571 522.5
+271.97427 683.4
+308.91446 694.1
+337.02271 586.1
+342.28366 817.1
+391.10803 623.1
+399.10504 568.2
+427.56274 729.8
+448.23227 1518.8
+452.45236 836.7
+482.95895 709.7
+509.26370 637.2
+517.54089 614.1
+523.28577 847.6
+532.50446 2003.4
+545.25873 784.9
+549.17847 822.0
+584.28082 956.8
+602.06818 731.6
+610.23309 712.3
+626.95679 733.8
+676.63782 1144.5
+685.35944 2650.7
+685.86481 822.0
+697.67505 855.1
+698.01300 1157.5
+703.68439 1580.2
+727.37494 2443.4
+730.36591 587.7
+741.36450 1123.9
+749.36255 1532.3
+767.37482 1383.4
+771.64508 663.4
+792.26917 624.8
+795.61554 818.1
+798.40515 1130.6
+810.79535 664.7
+849.74847 889.7
+850.08667 1678.0
+855.75775 1767.3
+856.09790 2356.9
+858.08319 759.9
+860.68219 757.8
+862.07977 1058.0
+868.08557 1064.8
+868.45264 744.3
+874.43872 727.5
+877.45490 3317.3
+883.41425 959.3
+884.42181 1426.1
+885.43829 768.8
+890.61035 560.6
+940.46826 1324.5
+940.96429 959.8
+1001.98248 698.4
+1008.82477 633.9
+1029.83374 764.3
+1046.01086 1398.6
+1046.50854 1587.8
+1052.95471 790.8
+1055.01782 1264.5
+1055.52393 816.3
+1106.21045 757.9
+1109.59521 873.9
+1120.53870 6855.2
+1121.04016 6370.4
+1121.53906 2213.1
+1155.22961 1175.0
+1169.08020 839.8
+1177.60437 1346.2
+1198.12292 3144.9
+1262.27588 616.6
+1274.63855 1026.4
+1292.13110 792.0
+1357.66455 3780.5
+1358.16260 4438.8
+1358.65942 884.4
+1369.71790 2675.8
+1370.71387 1370.9
+1525.45947 714.9
+1777.73340 818.8
+1877.76501 622.5
+1878.80444 858.1
+1879.54199 19564.8
+1907.11902 7341.5
+1918.86963 660.4
+1958.84167 683.3
+S	2170	2170	1879.94799127
+Z	3	5636.569
+Z	2	3758.048
+532.50763 1967.1
+795.60211 925.4
+839.89929 612.2
+873.89154 627.5
+964.07733 600.1
+973.67218 622.0
+1021.54724 611.6
+1057.24255 824.2
+1070.41516 664.0
+1120.46411 594.7
+1198.13550 3128.0
+1525.50549 973.8
+1715.76550 688.8
+1742.52185 645.2
+1777.74329 920.2
+1833.62146 620.4
+1875.78735 712.0
+1877.68042 626.0
+1878.15906 721.7
+1878.77075 1848.2
+1879.02051 2133.6
+1879.48718 19615.2
+1879.78320 2240.5
+1879.93359 2112.4
+1880.49487 1691.5
+1881.26208 684.3
+1881.80225 736.1
+1906.04480 795.5
+1907.02673 7633.1
+1930.69641 1019.7
+S	2171	2171	903.2038246
+Z	4	3608.784
+243.80743 1242.8
+251.98532 1363.3
+264.10184 1209.2
+269.31375 1262.6
+271.66232 1550.4
+276.78467 1256.0
+284.88281 1151.6
+290.12183 1357.3
+308.89920 2485.2
+336.63895 1388.4
+344.15891 3350.2
+396.97995 1579.4
+398.63058 1496.2
+404.88818 1389.9
+427.54349 1530.8
+448.23633 10427.0
+448.73785 7335.5
+449.24008 1970.6
+456.22363 2059.9
+523.28461 5522.4
+524.29395 1759.9
+532.50433 4082.8
+581.27057 1643.9
+584.28345 2178.2
+602.29218 4446.6
+627.65082 1522.9
+630.41101 1927.9
+630.91528 1370.6
+670.35791 2247.9
+676.35413 1852.6
+676.66235 2307.9
+676.85388 3059.6
+685.35895 6453.8
+685.86182 8030.8
+686.36444 4640.6
+697.67822 3031.6
+698.01038 6040.3
+698.34692 5050.6
+698.67505 3402.1
+701.01257 1495.9
+704.01709 5293.9
+704.34583 3648.1
+727.37616 9629.6
+728.37671 5301.8
+731.34888 4235.7
+732.93750 1325.3
+736.02246 1727.3
+741.69293 3701.8
+742.02557 3403.8
+742.36926 2040.9
+747.69489 3890.8
+748.03412 2361.5
+749.35938 6140.7
+750.36176 2554.2
+767.36987 6128.4
+768.37134 4008.7
+770.38098 1862.6
+774.34119 1250.8
+779.72614 2146.6
+781.66064 1286.2
+795.61255 3067.7
+798.40930 4464.2
+799.41864 2411.5
+818.40613 2419.3
+819.05621 1788.4
+828.40222 1813.4
+834.40472 1928.8
+849.75653 2802.0
+850.09558 3562.8
+850.42444 8840.6
+850.75702 4811.4
+851.09143 3035.8
+854.06982 1438.3
+855.75885 3032.1
+856.09479 7350.6
+856.42780 7899.7
+856.76361 3004.5
+857.09338 2378.1
+857.42828 2530.1
+860.74487 2033.0
+861.08026 2883.7
+861.74115 2310.4
+862.09088 5690.4
+862.41400 5595.8
+862.74921 3510.1
+866.41992 1851.7
+866.75720 1988.7
+867.07404 1585.1
+867.41980 1682.1
+867.75122 1680.1
+868.08276 3875.9
+868.41400 3911.2
+868.75549 1524.0
+877.45453 15791.6
+878.45935 10297.5
+879.46045 2776.1
+885.10089 2699.5
+930.85638 1293.0
+940.45892 3113.7
+940.96997 7267.0
+941.47516 3318.9
+941.96057 2050.0
+961.47742 1778.9
+962.13916 2990.0
+976.49823 1269.4
+981.14166 1753.8
+1004.49384 1826.2
+1005.00085 3514.9
+1005.49432 2518.5
+1008.54333 3522.0
+1009.54669 3000.8
+1020.83130 1366.3
+1024.14099 1499.5
+1028.45801 1361.0
+1030.16870 2464.3
+1046.01074 4466.8
+1046.51355 12358.2
+1047.01685 5362.6
+1055.01929 2503.4
+1055.52148 4620.0
+1056.02344 4417.7
+1057.28137 1576.3
+1106.20947 1531.2
+1106.55786 1530.7
+1109.59204 3029.1
+1110.61255 2630.1
+1111.53125 2329.0
+1112.03455 3642.2
+1112.54211 3235.6
+1113.03357 2533.6
+1120.53784 12778.5
+1121.03967 30651.6
+1121.54150 30226.1
+1122.04175 12739.9
+1122.54651 4561.9
+1128.55518 1885.9
+1129.06433 1847.2
+1145.07141 1406.6
+1155.56116 4971.3
+1155.90674 1907.4
+1169.08679 2310.8
+1169.57471 3796.5
+1177.57324 2818.1
+1178.08191 4926.1
+1178.58923 3342.9
+1179.08606 1475.2
+1185.07239 1777.7
+1188.33691 1677.2
+1198.11951 7946.8
+1219.59082 1605.7
+1235.10437 1734.0
+1236.62683 1735.3
+1242.12097 1677.7
+1251.59668 1804.8
+1252.10242 1436.6
+1275.13342 1667.1
+1283.64099 2159.5
+1284.14160 2446.0
+1292.11194 2636.1
+1292.61975 5928.6
+1293.11853 3741.3
+1293.62805 2989.4
+1301.12231 2397.5
+1301.62585 2519.5
+1302.12256 2691.4
+1302.62500 2285.5
+1349.67896 1855.3
+1357.65955 4176.6
+1358.16443 18738.6
+1358.66455 20419.2
+1359.16565 15389.1
+1359.66003 3500.9
+1369.71362 9642.6
+1370.71191 12688.5
+1371.71082 6264.8
+1863.28296 1439.6
+1873.39001 1443.9
+1878.52197 2321.4
+1878.86865 2445.8
+1879.29846 5863.8
+1879.58362 41395.6
+1880.65601 2171.5
+1906.76880 2229.0
+1907.15356 14497.6
+1930.60388 1978.5
+S	2173	2173	1879.95799127
+Z	3	5636.599
+Z	2	3758.068
+532.45648 2116.9
+625.10779 638.6
+676.63019 1134.2
+714.57428 682.9
+1069.43103 754.1
+1188.32837 800.5
+1198.02271 3575.1
+1502.45264 629.0
+1662.39246 616.8
+1715.56567 675.6
+1843.74255 562.5
+1860.05261 839.1
+1876.71375 619.0
+1878.09082 685.6
+1878.57190 842.7
+1878.85425 882.9
+1879.13757 1391.5
+1879.51306 19769.8
+1879.87915 1386.1
+1880.20740 1208.3
+1880.37720 927.4
+1907.05273 7290.4
+1930.67395 672.4
+S	2174	2174	903.2018296
+Z	4	3608.77602
+255.29596 6278.7
+281.59720 7578.5
+298.40198 7455.1
+308.90851 6949.1
+309.79092 6439.0
+380.24527 6281.0
+427.54745 12388.6
+447.32486 6193.8
+448.23758 7794.0
+448.73865 10029.0
+471.41089 6635.8
+485.80487 5969.4
+485.82983 5351.1
+488.45456 6361.8
+499.27063 5589.4
+503.12531 6873.8
+524.71100 5983.2
+532.42450 22076.3
+676.62286 11361.0
+685.36035 12774.1
+685.86206 14563.8
+697.66357 7460.5
+727.37531 22447.9
+728.37897 11495.8
+741.69336 11255.0
+749.35980 11943.7
+767.36346 8539.5
+781.97589 6737.1
+795.61047 7876.5
+798.42297 7311.7
+850.08948 9485.2
+850.42676 10485.1
+856.09235 15253.7
+856.76477 12339.9
+857.09253 9850.5
+862.08264 11156.8
+867.75116 8444.8
+877.45404 31107.3
+878.45447 10795.3
+888.10052 11134.9
+900.22504 7181.2
+928.42047 6091.2
+1004.99854 9854.2
+1008.54382 6340.3
+1046.01770 13171.2
+1046.51355 12311.7
+1055.51270 10252.8
+1057.21277 9270.0
+1109.58960 8317.5
+1112.03455 9566.7
+1120.53857 31000.1
+1121.04004 50707.4
+1121.54797 30039.3
+1122.04700 10099.7
+1178.08630 8566.8
+1188.31445 8887.7
+1197.94214 37607.8
+1260.51465 6039.7
+1301.61829 6872.1
+1357.67151 16415.6
+1358.16455 33133.9
+1358.66638 16848.7
+1359.16577 9863.9
+1369.70447 19839.3
+1370.71350 20405.5
+1371.72437 8392.0
+1524.61768 6917.5
+1524.98438 7726.2
+1525.45215 7807.4
+1644.57068 6225.7
+1877.13013 7093.3
+1879.12109 17751.2
+1879.48889 213921.3
+1879.95251 17485.4
+1880.47595 11748.9
+1881.39014 6776.1
+1881.97522 8010.6
+1882.47839 9247.4
+1907.08264 75361.3
+1930.64990 14801.9
+S	2175	2175	1907.46840793
+Z	3	5719.13
+Z	2	3813.089
+515.63922 619.2
+532.45569 2214.9
+676.64056 1210.9
+795.59784 793.2
+1012.21478 616.4
+1025.54712 633.5
+1188.29150 739.7
+1198.01685 3216.7
+1216.18909 578.2
+1380.37561 621.8
+1403.41541 603.1
+1490.78564 800.2
+1525.36389 653.8
+1777.41895 696.0
+1869.73242 848.8
+1878.00769 924.8
+1878.96912 850.9
+1879.25671 3868.3
+1879.54407 19398.0
+1907.04346 6993.6
+1930.52441 912.2
+S	2177	2177	625.091241267
+Z	3	1871.998
+Z	2	1248.335
+162.67169 11032.1
+171.11247 57218.9
+182.78477 13252.0
+188.09331 11888.9
+188.19621 9389.2
+188.23665 13079.8
+188.25949 28380.9
+188.27402 32377.2
+188.28090 32332.8
+188.28818 35649.9
+188.30156 31938.2
+188.31706 29850.5
+188.33487 9060.7
+188.41872 12618.4
+198.18997 9959.6
+199.17465 13172.5
+199.26118 16426.0
+199.27382 34058.7
+199.28384 40369.4
+199.29237 16078.3
+199.30037 20955.7
+207.51894 11380.7
+211.18025 298815.8
+212.18327 21721.6
+220.71777 10754.7
+233.16452 236209.4
+234.16832 43343.4
+237.20497 10506.6
+239.17505 158553.6
+245.16447 83168.6
+250.79118 10269.3
+261.15948 107588.0
+262.11765 46633.5
+266.18436 14929.2
+273.15988 54327.5
+284.19662 339650.3
+285.15533 30123.8
+285.19992 48543.8
+288.17041 41596.4
+298.15479 69005.8
+299.15860 14805.8
+301.22824 12532.5
+315.18149 40608.1
+316.16473 54447.4
+318.18021 44742.9
+333.19171 958779.1
+334.19522 165506.0
+339.48056 10756.4
+375.20230 103807.5
+376.20059 18737.0
+381.21304 30836.5
+381.36569 12003.9
+386.24359 127898.2
+387.20221 128409.8
+387.24738 21755.0
+388.20364 25611.2
+398.24033 32322.8
+403.26978 234641.8
+404.23178 13811.8
+404.27423 44921.6
+409.19479 42811.6
+409.69836 12139.5
+410.23517 11626.7
+415.19754 99187.9
+416.19812 14199.0
+431.26474 311428.3
+432.22574 41039.5
+432.26791 74216.0
+434.23956 35144.0
+438.50592 11794.3
+440.69437 11189.4
+473.72455 31772.5
+474.21283 17327.1
+474.71640 45680.0
+477.21335 17861.1
+482.72885 329146.7
+483.23105 163400.3
+483.73218 24901.5
+486.85254 13780.6
+490.22842 90642.9
+491.23392 20231.6
+500.28595 92108.3
+501.29047 41990.0
+507.77719 10978.3
+513.28082 107931.2
+514.28241 30233.8
+517.31152 100375.0
+518.31622 16314.5
+521.26093 20465.2
+521.75146 31185.4
+527.29791 34571.8
+528.28070 242869.4
+529.28375 70677.6
+530.21997 21206.7
+530.26526 252422.5
+530.54468 13718.1
+530.76074 224536.8
+531.29077 1057182.3
+531.75769 29047.3
+532.29407 314249.9
+532.46838 29848.0
+533.29755 67137.6
+539.27063 2363713.5
+539.31665 13916.6
+539.77203 1385767.6
+539.92603 21300.4
+540.27332 388833.0
+540.77527 71450.2
+545.30695 272425.9
+546.31299 73887.7
+547.31714 16678.3
+549.15680 13107.2
+570.30219 40425.0
+587.24084 19486.4
+588.31262 909109.6
+589.31592 319594.8
+590.31927 70684.7
+592.80634 27511.8
+593.30194 34149.3
+595.72742 12874.0
+595.81232 12525.0
+598.29767 21222.1
+598.80103 13865.0
+601.32111 14487.6
+601.81250 140004.2
+602.31329 109812.9
+602.81781 22893.1
+603.31262 18033.6
+606.31061 50618.4
+606.80444 189886.1
+607.30579 117886.9
+607.80664 30264.6
+609.93921 19823.4
+641.99646 10729.2
+642.32306 52798.8
+643.30188 64162.8
+644.30707 18103.1
+660.33429 110662.6
+661.34094 35760.6
+672.33307 71406.1
+673.33630 22713.6
+682.31873 55578.6
+685.32867 125460.8
+686.33527 24386.0
+689.36334 21245.0
+699.34546 49969.0
+700.32813 366660.8
+701.33301 129933.7
+702.32837 19634.0
+703.33984 2282628.3
+704.34277 873611.4
+705.34521 189148.8
+706.34711 23666.7
+712.29413 13767.7
+717.35651 199314.5
+718.36017 56358.2
+731.11163 11161.4
+743.09564 11467.7
+762.42749 10436.9
+782.34106 14398.9
+785.34607 28125.1
+795.59265 21736.6
+799.37225 241597.7
+799.63245 11311.0
+800.35535 193782.8
+801.35913 91793.9
+802.35791 21702.2
+803.10059 13281.9
+814.92639 14979.7
+816.16461 17760.7
+817.38226 4007025.3
+818.38519 1750662.4
+818.60669 22429.0
+819.38849 473316.9
+819.87207 21977.8
+820.39178 71792.0
+824.35773 11557.9
+852.42218 15774.9
+855.43359 28326.4
+856.43457 12221.5
+870.43213 39746.8
+879.43201 18018.0
+880.41803 141097.3
+881.42255 59752.1
+897.44470 148219.8
+898.43018 404457.4
+899.43323 203394.9
+900.43738 42120.6
+915.45593 357834.7
+916.45996 160778.2
+917.46497 44727.6
+929.41064 22573.9
+930.40973 11125.1
+931.42902 14843.3
+932.44666 12896.0
+946.44080 236298.0
+947.42871 240921.3
+948.42859 137864.7
+949.43402 50381.8
+961.28912 14744.3
+961.87604 12429.6
+962.88354 22041.5
+964.45056 4072189.3
+965.45331 2306000.3
+966.01501 22814.9
+966.45587 654067.1
+967.01971 17540.4
+967.45874 130099.5
+967.61328 22509.1
+968.46893 14040.4
+991.64948 11949.2
+1039.13684 12167.8
+1048.48206 22242.6
+1056.50647 16515.3
+1059.52698 44463.6
+1060.51257 80076.2
+1061.51123 33340.1
+1065.51318 18616.2
+1066.49866 139450.5
+1067.50232 82682.5
+1068.50012 29560.4
+1077.53479 699726.9
+1078.53748 421279.6
+1079.54065 157925.3
+1080.53931 33399.5
+1083.52454 141994.2
+1084.51099 181377.5
+1085.51196 90554.2
+1086.51660 31478.5
+1093.65820 12219.6
+1101.53430 454923.4
+1102.53784 240065.0
+1103.53625 73171.0
+1117.54126 20966.4
+1198.04956 60000.2
+1383.00977 11893.9
+1442.76038 11373.4
+1448.50977 11128.0
+1468.32300 13978.8
+1667.20361 13172.1
+1688.25940 11877.7
+1723.02197 13823.4
+1879.27881 44276.2
+1879.56140 353689.0
+1903.27625 12361.0
+1906.90430 132555.5
+1907.73206 11983.6
+1962.19910 12317.1
+S	2178	2178	625.5928246
+Z	3	1873.503
+Z	2	1249.338
+163.27028 577.4
+171.11287 1626.0
+178.00246 553.2
+188.24527 632.6
+188.26845 1507.1
+188.27786 2098.5
+188.28778 1913.6
+188.30388 1631.0
+188.32043 1021.7
+188.34430 566.4
+188.35857 623.5
+198.90611 953.8
+199.22346 562.4
+199.23801 576.8
+199.26884 729.0
+199.27374 1021.2
+199.28357 2791.8
+199.29915 1256.3
+199.38187 1077.5
+211.18086 10037.9
+212.18449 1012.7
+233.16513 7396.3
+239.17584 5669.2
+244.30939 581.2
+245.16481 2027.1
+255.27322 553.5
+261.16034 2430.9
+262.11945 692.4
+264.26266 593.4
+264.57953 529.8
+266.18604 756.0
+273.16071 2121.0
+276.89978 558.9
+281.79041 707.4
+284.19720 11246.5
+285.15607 1037.2
+285.20221 1776.6
+288.17053 1743.5
+298.15588 1884.0
+312.85831 694.8
+315.18152 1393.3
+316.16626 1643.4
+318.18298 1931.1
+333.19235 33094.5
+334.19577 7625.5
+335.19943 656.8
+349.20758 526.4
+364.94073 661.3
+375.20230 3559.6
+376.20135 958.4
+377.14316 685.1
+386.24438 4398.8
+387.20319 3799.0
+387.24701 1059.8
+388.20410 1134.8
+394.64731 646.8
+398.23633 1024.8
+400.19034 887.8
+403.27039 9246.9
+404.22629 828.8
+404.27264 2366.8
+409.19547 2102.8
+410.24576 705.5
+415.19836 3600.7
+416.20111 1277.0
+424.19867 1198.0
+431.26566 15859.9
+432.22583 1780.1
+432.26868 4629.0
+434.24084 2376.1
+442.20816 1155.4
+443.91187 603.1
+444.22348 980.8
+446.05206 644.7
+457.73792 637.0
+460.22348 1053.2
+473.14774 635.4
+474.21710 1377.7
+474.49442 601.4
+482.72995 12868.4
+483.23291 8539.8
+483.73425 2015.4
+490.22995 4575.5
+493.22247 731.1
+500.28683 6485.5
+501.28922 2204.2
+513.28156 7184.4
+514.28516 1861.1
+517.31317 6411.0
+518.31750 1787.2
+521.21460 1254.6
+521.75275 1142.8
+522.74750 704.8
+527.29761 2525.8
+528.28156 16697.9
+529.28381 5035.5
+530.22058 1408.5
+530.26617 13072.9
+530.76202 11958.4
+531.29199 86699.2
+531.76123 2162.8
+532.29559 28532.1
+532.45258 2075.8
+533.29852 5068.9
+533.73303 667.6
+534.30548 801.1
+539.22363 4398.1
+539.27173 200655.6
+539.32367 614.3
+539.77301 116945.0
+539.93140 873.5
+540.27441 40012.8
+540.60449 1208.7
+540.77612 10544.5
+541.27802 1494.8
+545.30811 39919.7
+546.31213 10170.1
+547.25049 771.1
+547.31567 1679.0
+550.27917 596.1
+557.23688 2178.4
+570.30371 6905.6
+571.30426 2198.2
+586.80750 1131.6
+587.24738 1703.3
+588.31366 117457.2
+589.31659 37566.2
+589.82605 852.6
+590.31970 6649.1
+592.81097 998.8
+593.30151 1469.6
+593.80627 1237.3
+595.80908 965.5
+597.79877 1468.3
+598.30237 989.7
+601.81195 2507.2
+602.31573 2899.9
+624.32733 1913.1
+624.82855 1383.2
+633.99646 625.8
+636.23895 1673.2
+640.30865 1672.2
+642.32581 4720.7
+643.30560 6920.6
+644.31079 2242.8
+653.26605 958.1
+654.24713 1480.8
+654.95258 780.2
+655.30890 1318.5
+657.33490 2252.7
+658.34033 819.2
+660.33496 21747.9
+661.33881 7026.7
+662.34595 1000.0
+667.32526 1131.0
+672.33459 5670.7
+673.33966 2117.5
+676.64941 747.2
+682.31903 3231.8
+683.32416 1485.1
+685.33063 13750.8
+686.34143 3221.3
+688.43451 1006.2
+689.29333 1084.9
+689.36334 1252.2
+699.34607 4523.1
+700.32935 35456.7
+701.33411 12918.1
+702.33881 3070.9
+703.34106 232475.9
+704.34363 87401.1
+704.96790 801.8
+705.34692 20609.3
+706.35205 3070.0
+717.35681 34887.4
+718.36066 12252.7
+719.36121 2505.9
+727.34485 714.8
+728.31903 973.8
+731.12213 611.5
+744.38568 730.5
+745.35040 1368.8
+751.35425 735.7
+768.32611 667.9
+781.36713 862.4
+782.34760 3504.0
+783.30408 2410.0
+783.38031 930.3
+784.31860 910.6
+785.35101 2517.1
+786.35504 1512.0
+797.37994 1211.1
+799.37384 28898.8
+800.35724 30441.3
+801.36212 12164.2
+802.36627 3373.1
+814.40723 1089.5
+814.90796 1978.6
+815.35101 869.5
+815.40424 675.6
+816.16180 1985.0
+816.98169 860.1
+817.24109 1138.8
+817.29553 2137.4
+817.38354 419795.8
+817.49799 1208.5
+818.30310 1455.4
+818.38623 177532.2
+818.60132 1894.1
+819.38977 45862.9
+819.64563 990.9
+819.86932 2062.4
+820.39252 8865.7
+820.88263 988.1
+821.39752 1272.9
+837.09241 614.8
+840.42627 1357.0
+850.89117 693.8
+852.42584 2625.9
+853.12915 669.1
+855.43542 2503.7
+856.44702 1022.3
+862.40973 1651.2
+869.45190 884.6
+870.43451 5125.6
+871.43750 1957.5
+872.44653 803.8
+879.43219 1541.8
+880.41907 13674.9
+881.42334 6577.5
+882.41943 1243.3
+896.38745 1052.6
+897.44580 18068.9
+898.43091 48911.7
+899.43347 22524.2
+900.43628 6438.3
+901.44232 1206.9
+914.12592 700.3
+914.40887 1732.1
+915.45721 64721.3
+916.46021 32154.7
+917.46564 8732.1
+918.46124 1943.4
+920.42169 873.7
+928.43347 1726.7
+929.41669 5080.1
+930.41882 2653.9
+931.42279 1828.5
+932.43616 1150.5
+946.44153 32752.7
+947.42950 36878.1
+948.43036 18266.1
+949.43359 5620.4
+950.43213 906.4
+951.55634 956.5
+953.41534 926.9
+961.00977 620.4
+961.28455 3206.0
+961.44031 1327.0
+961.53564 880.7
+961.84430 1785.9
+962.27759 1473.5
+962.89160 2371.9
+963.39087 999.2
+963.91058 1755.0
+964.26892 1281.1
+964.30048 2178.9
+964.45190 612510.1
+964.93713 1409.4
+965.45416 321394.2
+966.01746 3106.5
+966.45654 94931.7
+967.11786 1222.2
+967.45923 21948.2
+967.63629 2832.8
+967.90234 788.4
+968.45837 3297.3
+968.64691 2411.9
+970.46246 1585.5
+975.41705 952.6
+977.60791 851.1
+987.49329 1103.6
+1038.50281 1804.1
+1039.49878 2205.9
+1042.48987 1108.9
+1048.48987 1904.7
+1049.49597 1345.8
+1056.51221 3439.4
+1057.51379 2320.0
+1059.52576 7963.6
+1060.51624 9807.9
+1061.51379 5657.5
+1062.51257 1646.5
+1065.51648 3008.4
+1066.49890 17238.5
+1067.50305 9561.1
+1068.50623 2922.6
+1069.50806 1310.3
+1072.51465 1230.9
+1077.53589 135378.8
+1078.53784 73753.6
+1079.54175 24850.2
+1080.54248 6387.7
+1081.54175 1003.6
+1083.52661 17360.3
+1084.51208 27684.7
+1085.51526 14715.2
+1086.51306 4661.6
+1087.52258 1758.9
+1088.49670 861.5
+1100.51782 901.9
+1101.53528 85723.2
+1102.53845 49545.9
+1103.54102 17231.4
+1104.54199 3397.4
+1105.53979 1003.6
+1117.52820 2132.9
+1118.53271 1322.1
+1119.53296 805.2
+1198.01025 3465.0
+1312.08044 694.9
+1525.39893 651.1
+1877.22888 627.9
+1878.54102 1316.6
+1879.22168 3433.6
+1879.57349 18120.0
+1880.01758 3371.6
+1906.93372 7006.5
+1907.22021 1407.8
+1907.61621 652.6
+1973.77393 665.8
+1986.31824 683.0
+S	2179	2179	616.052407933
+Z	2	1230.257
+Z	3	1844.882
+165.76958 792.4
+168.09673 564.4
+188.26030 799.6
+188.26736 815.1
+188.27821 1352.3
+188.28748 1013.7
+188.29532 1372.9
+188.30379 1380.5
+188.31305 742.4
+188.32321 601.3
+199.18050 933.4
+199.19078 819.2
+199.25691 1020.2
+199.27832 2650.4
+199.28856 1718.5
+199.37743 1113.9
+214.51811 642.3
+233.12854 587.1
+233.58009 565.4
+238.33365 565.4
+240.09790 1058.7
+246.86256 561.9
+249.86748 560.2
+251.25024 545.7
+257.16354 657.8
+273.56039 667.5
+291.40640 575.4
+300.97452 605.7
+301.78549 717.8
+303.17938 851.5
+341.68445 4094.8
+342.18619 1859.9
+342.28668 650.4
+342.68945 715.0
+348.76733 587.9
+370.91177 722.1
+371.13721 3465.9
+372.12198 2102.8
+384.24075 559.5
+389.14676 980.5
+391.21786 3539.9
+391.72183 1856.9
+393.13696 562.1
+397.82526 706.9
+416.26141 2377.9
+416.72488 696.6
+427.56519 661.5
+440.75177 1457.1
+441.25327 692.6
+464.48965 693.1
+476.27090 11624.8
+476.77237 7056.4
+477.27203 2308.6
+477.77328 989.2
+482.96121 726.4
+486.57675 28374.9
+486.91132 20003.6
+487.24475 12826.3
+487.57901 8676.0
+504.24060 521.8
+524.21558 1452.3
+530.25665 6500.2
+530.59167 3355.8
+530.75854 903.7
+530.92401 2072.4
+531.25854 2240.0
+532.45514 1458.6
+532.50177 496.8
+533.78290 7259.3
+534.28424 2898.8
+534.78680 941.0
+545.30255 7697.5
+546.30756 1854.6
+547.30353 866.5
+599.30432 7505.3
+599.80652 4062.3
+600.30652 2641.1
+600.80597 1653.5
+603.94946 1333.4
+616.93060 610.3
+624.26807 669.7
+630.42816 651.1
+631.25250 1060.0
+632.23358 1034.9
+642.28131 1913.0
+643.27850 940.0
+680.83521 5167.1
+681.33319 1831.5
+681.83856 2510.5
+682.36340 12493.9
+683.36261 4345.2
+684.36603 857.1
+706.80188 1527.1
+707.30701 1645.2
+729.36182 36074.8
+729.86292 25311.3
+730.36407 20402.9
+730.86542 11786.6
+731.35962 952.5
+763.33972 902.3
+763.84442 953.9
+764.32471 657.5
+772.08710 606.3
+781.42926 7473.5
+782.43182 3415.1
+783.43628 1146.6
+794.88220 13837.2
+795.38336 9591.3
+795.88361 7635.7
+796.38513 6882.3
+827.36609 2004.9
+827.87610 684.2
+828.87714 1232.5
+848.35303 584.0
+858.07092 698.8
+877.31793 7043.9
+878.32318 2723.4
+879.31866 1693.2
+880.32117 1135.9
+880.50171 1390.4
+881.48907 779.5
+913.42310 656.4
+914.91510 885.4
+947.42151 686.1
+948.35864 3674.7
+949.36487 1351.8
+950.35876 2080.7
+951.36279 1256.8
+990.89838 607.6
+1047.42603 4008.1
+1048.42773 2501.1
+1049.42578 1848.0
+1050.41833 1489.4
+1057.25647 771.6
+1146.49463 2441.9
+1147.50012 948.6
+1148.49353 1507.8
+1198.01794 3071.9
+1228.12183 677.1
+1305.89441 505.6
+1316.07227 601.7
+1456.95654 680.7
+1605.66382 552.5
+1632.34277 566.5
+1652.64124 582.9
+1858.48999 696.0
+1876.39612 823.4
+1878.11243 741.8
+1878.22437 718.3
+1878.85217 1489.6
+1879.30322 6982.7
+1879.56677 17074.8
+1881.01184 776.1
+1881.44202 1019.1
+1902.94971 541.4
+1906.94702 6195.8
+1918.87219 695.3
+1930.63843 854.6
+S	2181	2181	1879.99824127
+Z	3	5636.719
+Z	2	3758.149
+532.48944 2187.7
+539.89722 712.4
+541.89227 677.3
+550.48438 603.3
+550.65912 567.1
+573.13031 603.0
+630.42737 980.8
+632.62866 823.9
+637.63983 636.6
+676.63947 986.5
+754.68323 614.3
+795.63055 969.8
+989.88751 645.5
+1027.85693 610.3
+1057.24060 937.8
+1198.09680 3227.6
+1275.73145 705.7
+1380.38281 611.9
+1399.64978 677.8
+1466.19751 602.6
+1879.16211 821.7
+1879.53271 20223.1
+1879.76367 1328.4
+1883.69922 758.5
+1907.11853 7555.7
+1930.68396 940.4
+S	2182	2182	616.230407933
+Z	3	1845.416
+Z	2	1230.613
+166.35060 32221.7
+174.96683 41721.1
+177.13701 37822.1
+180.83601 43619.2
+188.23277 50151.9
+188.25508 93317.5
+188.27298 109166.1
+188.28053 114964.7
+188.29457 121275.3
+188.30681 120199.4
+188.32224 76950.3
+188.33412 59018.6
+199.18918 77171.8
+199.27467 64123.9
+199.28697 190608.3
+199.29970 56488.2
+199.38454 86047.7
+199.42439 39302.0
+201.85776 38275.8
+205.76216 43411.3
+212.10272 180446.1
+225.74506 35995.5
+233.12788 97462.9
+238.69916 44078.8
+240.09731 149014.1
+259.81979 38751.6
+278.10776 37883.6
+280.18921 49907.3
+303.17581 69304.1
+329.92825 40939.5
+341.68439 665318.1
+342.18594 346090.1
+342.28232 52241.0
+342.68777 98952.7
+354.44519 41196.3
+371.13739 396747.8
+372.12192 283200.3
+389.14807 104056.5
+391.21841 467466.3
+391.71979 205536.1
+392.22018 63995.3
+416.26089 415483.7
+417.26538 85657.1
+419.80014 46343.0
+420.31494 38669.7
+427.55594 44394.6
+439.66193 47216.8
+440.75418 105671.8
+441.25378 139206.3
+450.34433 42496.7
+457.41559 37008.6
+474.68372 126508.9
+475.18271 106365.8
+476.27072 1145357.8
+476.77188 1114595.4
+477.27335 308535.4
+480.90427 51777.9
+486.57663 2491853.0
+486.91107 3289077.0
+487.24490 2396220.3
+487.57916 974792.6
+487.91174 121924.1
+488.88116 41469.7
+507.18823 125213.8
+520.22614 38194.7
+524.21454 118818.4
+524.71771 141825.2
+530.25665 508325.3
+530.59082 645785.6
+530.92474 545879.4
+531.25830 214865.8
+531.59155 53149.6
+532.47516 101316.4
+533.78357 736585.8
+534.28522 586294.5
+534.78595 225530.2
+537.25928 39137.1
+545.30212 779082.3
+546.30603 328601.1
+547.31024 52035.7
+548.19196 37825.2
+549.17633 53575.7
+573.75330 66441.9
+587.64282 34534.1
+599.30371 702640.9
+599.80560 782291.6
+600.30579 496865.5
+600.80597 191609.9
+630.41998 62439.8
+631.25519 156577.0
+632.23364 70936.3
+642.27869 137316.0
+642.78125 180598.5
+643.28448 64544.4
+680.83710 456790.6
+681.33746 613555.9
+681.83850 493217.6
+682.36279 1518421.1
+683.36481 780376.1
+684.36816 196679.3
+706.79999 193980.9
+707.30383 295563.6
+707.80298 286922.0
+708.30164 80655.2
+721.35114 48733.1
+729.36224 3141229.8
+729.86310 4432619.5
+730.36414 3357618.0
+730.86560 1133451.4
+731.14258 44356.7
+731.36688 161300.7
+762.29242 50673.5
+763.33319 93444.3
+763.83759 76167.3
+764.34570 54540.5
+781.42932 782769.4
+781.95789 40102.9
+782.43256 531349.8
+783.43719 145835.5
+785.88245 64757.1
+786.87781 72703.6
+794.88214 1113879.0
+795.38324 1727784.9
+795.88422 1583236.5
+796.38464 695965.1
+796.88568 149167.9
+801.35559 38470.3
+827.37000 100641.0
+827.86932 161650.0
+828.37158 182656.5
+828.87146 74368.2
+848.14117 39781.8
+859.91010 71045.5
+877.31970 620958.3
+878.32318 523241.8
+879.32214 242972.4
+880.31970 54399.4
+880.49719 132928.0
+881.49841 101883.3
+883.84357 37858.4
+914.92236 74834.7
+915.41656 63140.2
+915.91010 51442.6
+944.85431 35498.3
+947.42072 65583.0
+948.35779 513110.4
+949.36060 460590.3
+950.35663 293039.2
+951.36176 54067.0
+951.54236 62685.2
+952.52277 58067.1
+1021.17950 40105.8
+1047.42615 476540.4
+1048.42566 389712.3
+1049.43127 319537.1
+1050.43225 96194.1
+1057.26196 52815.8
+1132.69922 46720.3
+1146.49121 233670.5
+1147.49060 253820.0
+1148.49658 155016.2
+1149.49072 56268.3
+1198.06458 201940.9
+1230.13550 38813.2
+1339.12305 40310.8
+1489.61670 40058.0
+1563.03308 34243.5
+1581.90320 45985.8
+1739.74878 41428.1
+1777.08850 44560.0
+1877.29358 48145.9
+1878.77173 49572.7
+1879.17041 140785.3
+1879.56604 1242048.3
+1879.97058 134007.2
+1880.24634 63498.7
+1881.85120 68656.0
+1906.67712 39862.3
+1907.03491 501779.8
+1918.87769 52488.7
+1930.66846 82134.1
+S	2183	2183	789.3736446
+Z	4	3153.46328
+218.89384 1918.2
+286.91321 2086.9
+286.96768 2110.5
+320.84576 1781.6
+341.29526 2415.4
+350.28592 2403.2
+358.37006 1996.2
+396.66547 2858.5
+427.55774 2418.3
+433.33765 1819.3
+466.23859 2611.1
+473.28110 3367.7
+477.59143 2479.2
+482.67706 2627.4
+487.18878 2281.4
+516.31958 2049.5
+532.49701 6256.3
+544.31915 4655.6
+549.18317 2192.3
+573.85901 2123.6
+599.08716 2345.4
+615.35376 3992.9
+625.32312 2134.9
+630.43018 2593.8
+648.61517 2392.7
+655.37085 1854.4
+676.62903 3711.7
+696.06763 3025.4
+704.84430 2092.7
+713.33466 2652.4
+722.24237 2130.7
+728.09045 4492.1
+728.33740 6713.6
+730.83661 3733.8
+731.15155 2455.5
+732.34113 4542.1
+732.59198 6239.8
+732.84125 6015.3
+734.34534 3453.0
+735.08551 3894.8
+735.33490 6303.9
+735.57861 4129.9
+748.84027 2662.5
+751.59662 3084.0
+752.34912 3258.2
+752.85229 6726.8
+755.34912 3612.8
+755.60132 6063.8
+755.84772 7003.6
+759.85028 7772.8
+760.10272 24306.9
+760.35199 16937.2
+760.59668 5491.3
+763.79706 2380.7
+765.55200 2587.6
+767.82648 4942.5
+767.95789 3290.7
+768.03900 3167.8
+768.16241 3637.6
+768.68347 1998.7
+768.87750 2403.5
+769.01581 3367.5
+769.10327 2438.4
+769.36041 4377.0
+770.14563 2855.8
+770.86090 2996.6
+771.20245 2447.2
+771.59302 3942.2
+771.70624 2675.1
+771.84491 5988.7
+772.06213 2822.3
+772.08405 2603.5
+772.55548 3434.4
+772.62793 5042.5
+772.79840 2781.9
+773.86340 3590.6
+783.21381 2230.1
+819.90436 3061.7
+839.06873 2325.4
+841.06293 3778.4
+841.41095 2632.6
+841.72742 2440.5
+842.71692 2756.7
+871.39575 9629.2
+871.73083 13546.4
+872.06293 6387.9
+874.42145 3722.8
+879.40442 2847.0
+897.73578 3187.9
+898.05518 3207.6
+899.33594 2918.9
+903.40167 4406.1
+903.73688 12022.8
+903.84882 2971.2
+904.06952 11875.0
+904.39832 6725.0
+904.61035 2838.2
+909.41071 36787.2
+909.74445 47551.6
+910.08008 24953.0
+910.41296 11680.6
+912.08075 3031.3
+912.76019 3099.0
+913.51831 7816.1
+914.51746 5787.5
+917.75073 5486.7
+918.07465 2641.3
+918.41071 3530.7
+927.17108 2735.0
+927.42871 3090.4
+935.76617 3601.9
+936.10309 4764.6
+936.43524 3206.2
+936.77881 5360.6
+937.09363 2759.1
+941.41992 2893.1
+945.10797 6617.8
+945.40955 3864.6
+947.10052 9751.5
+947.44043 10096.5
+947.77618 6053.7
+950.77216 5579.7
+951.10529 11672.0
+951.43970 10692.3
+951.77917 4411.4
+961.39856 2226.9
+964.77582 3854.1
+970.10797 4633.1
+970.44690 11390.7
+970.77789 11295.4
+971.87677 2655.6
+972.31543 2345.7
+974.10583 3541.5
+974.45392 11773.6
+974.78223 6103.3
+976.11554 33795.8
+976.44958 57653.9
+976.78394 33885.8
+977.12036 12451.2
+978.12390 6559.1
+978.45349 4825.1
+979.78363 5655.8
+980.10773 13567.4
+980.43994 7801.7
+980.77875 3055.6
+983.79065 8359.1
+984.12891 12222.8
+984.45825 7053.0
+984.78217 2657.3
+997.11835 4187.2
+997.46515 3590.1
+997.79193 2619.8
+998.46619 3073.5
+1003.12817 3191.7
+1003.46411 5736.7
+1007.45001 6820.6
+1007.78259 4034.4
+1008.45154 2225.8
+1011.47028 4025.4
+1012.79767 10696.4
+1013.13074 21407.4
+1013.46515 18911.5
+1013.79657 7886.2
+1046.14771 4636.0
+1046.48633 14268.8
+1046.81360 8616.6
+1073.70691 4005.2
+1074.06580 2355.6
+1074.37976 3434.6
+1074.73364 2649.7
+1085.00122 3098.3
+1096.53992 5972.0
+1097.54663 3182.3
+1111.72900 2415.8
+1146.50037 4317.5
+1153.54163 2920.1
+1198.11047 11779.4
+1220.93591 2368.5
+1378.89246 2270.5
+1525.43579 2633.3
+1757.42871 2637.1
+1777.13770 2955.2
+1872.49561 2671.4
+1876.33984 4504.8
+1878.42908 2263.1
+1878.77905 4687.2
+1879.49841 64071.8
+1879.76770 7234.1
+1880.11975 5217.8
+1903.77295 2190.5
+1907.07410 25628.5
+1930.68201 3384.2
+S	2185	2185	1879.9768246
+Z	3	5636.655
+Z	2	3758.106
+519.35669 742.8
+529.42792 657.0
+532.49445 1770.3
+570.34576 642.0
+630.40277 851.2
+676.61395 1075.6
+760.67157 670.8
+767.30182 690.3
+795.62952 947.6
+862.75037 739.9
+975.80042 616.0
+1187.88025 652.9
+1198.10742 3243.2
+1255.06262 570.6
+1444.05420 593.0
+1501.32678 687.5
+1777.07825 760.6
+1870.01465 720.3
+1879.52551 16419.2
+1880.07349 3254.3
+1880.32654 1663.9
+1880.60571 1606.6
+1907.07874 7186.1
+1930.57825 902.7
+S	2186	2186	616.229991267
+Z	2	1230.612
+Z	3	1845.415
+157.02557 54904.4
+157.59792 71122.5
+165.75804 50811.5
+165.76434 56844.5
+169.48872 91707.5
+171.50650 67849.9
+174.75717 54658.0
+187.24663 64982.3
+188.22350 62197.8
+188.23576 82193.0
+188.24963 63335.3
+188.25630 75983.6
+188.26698 94064.0
+188.29025 81897.0
+188.30232 82735.2
+188.31676 90701.1
+188.33105 103352.5
+188.37881 66109.3
+194.76093 57393.0
+198.90088 90844.6
+199.21521 61557.0
+199.25244 130788.5
+199.27609 189402.8
+199.28909 133652.1
+199.30414 97174.2
+199.31422 99166.9
+199.40187 69901.5
+199.42050 62749.4
+212.10245 135347.6
+233.12764 100441.2
+238.69653 75665.4
+240.09644 177658.0
+241.08177 82878.1
+271.65384 79079.6
+290.38828 58859.3
+300.41638 73240.5
+303.17694 130412.0
+341.68396 906411.9
+342.18588 345681.4
+342.68845 71011.0
+354.48682 65134.4
+371.13736 551916.4
+372.12201 353143.0
+373.12592 70838.5
+389.14761 135379.0
+391.21866 695405.9
+391.71991 237166.9
+416.26059 381692.9
+417.26575 95802.9
+439.16208 80910.1
+440.75363 241700.0
+441.25317 113455.4
+444.92862 67035.4
+469.17496 108758.7
+474.68259 230121.7
+475.18228 133014.8
+476.27066 1835112.1
+476.77173 925365.6
+477.27225 206288.5
+486.57642 4655334.0
+486.91086 4815339.5
+487.24469 2402768.5
+487.57883 522435.2
+507.18997 159272.6
+524.21539 165214.5
+524.71735 156715.6
+530.25732 794500.1
+530.59039 921879.5
+530.92450 607388.5
+531.26245 143751.5
+532.47693 173111.6
+533.78351 1032330.1
+534.28491 750970.5
+534.78522 233030.8
+545.30219 1112674.8
+546.30542 243226.6
+549.13953 91183.8
+587.23297 76915.3
+599.13165 64597.9
+599.30383 1249774.6
+599.80530 1059464.6
+600.30408 370904.4
+600.80945 120775.4
+630.38336 91795.8
+631.25299 209978.2
+632.23309 164517.1
+637.27759 65854.2
+638.22974 84261.8
+642.27972 121907.5
+642.78156 250693.1
+643.28113 138114.9
+676.61273 93061.9
+680.83521 764256.6
+681.33826 666821.8
+681.83844 382218.4
+682.36188 1816055.3
+683.36383 707960.3
+684.37042 124673.4
+706.80084 343307.6
+707.30188 295645.0
+707.80194 181839.5
+720.85681 87035.8
+729.36200 5214886.5
+729.86292 5658816.0
+730.36389 2979338.8
+730.86298 698537.7
+731.09650 120210.3
+763.27142 78430.2
+763.33539 125049.5
+763.84796 87940.6
+780.23944 64729.4
+781.42975 1068384.0
+782.43280 570819.9
+783.43939 173345.6
+785.90479 67665.4
+786.38318 111952.8
+786.86902 76088.0
+794.88214 1799571.9
+795.38293 2521855.3
+795.59863 115509.2
+795.88373 1552377.1
+796.38342 502865.2
+800.36432 72169.6
+827.37140 212658.8
+827.87372 344565.2
+828.37280 161179.9
+877.31995 985804.2
+878.32385 586480.6
+879.31641 172539.5
+880.49762 145307.2
+881.50525 115969.8
+905.51831 68668.0
+915.92480 112324.4
+948.35724 829122.3
+949.36163 497158.1
+950.35480 223896.1
+995.56415 63961.5
+1011.98718 78024.3
+1017.11511 70598.7
+1047.42529 755269.9
+1048.42773 504805.7
+1049.42786 286152.7
+1063.93054 74979.2
+1079.34290 76136.2
+1146.49158 402540.5
+1147.49341 309885.5
+1148.49280 71889.0
+1167.46570 74206.2
+1187.90320 76964.2
+1198.06006 327057.5
+1248.52673 68338.0
+1333.66199 86181.9
+1525.37024 122731.8
+1666.94177 72131.5
+1672.82300 65531.1
+1876.11108 63468.9
+1878.64258 80333.6
+1878.94006 203245.8
+1879.47607 2092008.0
+1880.05872 183324.5
+1889.36597 72612.4
+1907.10535 792797.4
+1930.58374 107768.7
+S	2187	2187	1907.48124127
+Z	3	5719.168
+Z	2	3813.115
+526.52551 552.2
+532.45508 2150.7
+620.03278 551.3
+630.37469 785.1
+795.60565 1112.5
+818.24847 668.5
+842.80627 730.5
+869.42438 598.6
+884.76324 633.8
+1013.08630 662.0
+1075.08948 684.3
+1187.98877 724.5
+1198.01453 3452.7
+1493.56519 739.6
+1525.34863 785.8
+1776.89429 724.4
+1822.67554 613.5
+1856.23547 661.5
+1876.14099 839.2
+1878.00598 767.8
+1878.77930 946.8
+1879.05664 880.0
+1879.52136 19349.3
+1881.06665 1132.9
+1907.10205 7019.4
+1918.86169 654.8
+S	2189	2189	803.6168586
+Z	5	4013.04517
+220.87955 579.3
+233.16513 2056.6
+247.65282 548.9
+252.09425 587.2
+261.16000 882.3
+269.39191 611.2
+300.69907 660.4
+308.91171 635.9
+309.18268 617.4
+310.01096 727.4
+332.20062 749.0
+337.18637 764.4
+346.48410 687.8
+408.61789 573.4
+438.15939 619.4
+461.23804 1871.5
+479.25406 554.1
+506.27780 826.2
+520.01245 603.5
+524.99451 584.2
+527.21191 842.4
+532.49921 1649.5
+544.27405 695.8
+545.21906 1177.4
+559.31909 3115.1
+562.28302 1058.0
+577.96704 748.2
+583.29242 1152.3
+583.79865 1114.4
+589.31860 789.1
+591.80499 9907.9
+592.30682 5801.8
+592.80731 2066.6
+605.81049 637.2
+616.31238 999.0
+616.64624 1030.7
+616.97711 904.2
+629.98956 628.4
+630.35486 4739.9
+631.35266 1724.2
+638.27521 597.4
+659.30438 755.5
+668.60315 844.1
+668.84613 709.6
+676.63861 760.0
+677.31177 1609.5
+690.81097 705.1
+699.34918 1234.8
+700.85620 1053.4
+701.34894 1051.7
+708.37280 845.4
+711.56299 1022.8
+717.88049 780.4
+721.88000 2902.5
+722.13074 7779.5
+722.37897 7703.0
+722.63184 4620.9
+723.12933 737.1
+723.84680 697.2
+724.10352 717.1
+733.38440 3419.1
+733.57257 3399.4
+733.77301 2590.8
+733.97290 4299.3
+734.17633 2403.5
+734.37762 3010.3
+737.17554 1101.6
+737.37695 2686.7
+737.56842 985.5
+737.77423 1978.6
+739.63763 2388.6
+739.88910 4554.6
+740.13873 4503.9
+740.39026 3932.9
+740.64136 1317.8
+743.43945 10897.3
+744.44257 4694.8
+745.44775 995.2
+747.78589 859.4
+747.97882 981.1
+748.18323 1057.4
+748.38507 5236.5
+748.88824 2938.7
+749.39026 1419.1
+751.38422 908.6
+751.58313 1288.1
+751.78375 1310.5
+751.98492 1070.5
+755.39063 1111.2
+755.72906 1222.8
+756.06006 978.9
+756.39349 1154.9
+756.59137 1082.6
+763.37512 869.5
+768.78223 908.1
+770.49249 708.3
+770.90918 8089.3
+771.15936 11981.1
+771.41034 10552.8
+771.65961 6700.9
+771.91138 3427.8
+772.15674 1122.5
+772.41425 897.9
+778.79944 714.0
+780.40930 862.5
+780.91260 1020.5
+781.16302 1818.4
+781.40985 2094.3
+781.65887 1279.0
+781.85449 833.1
+782.39990 3125.5
+782.60077 2006.9
+782.80170 2328.3
+782.99609 1323.3
+783.38977 1028.3
+784.40082 918.4
+785.16498 8388.5
+785.41522 19286.7
+785.66541 15421.9
+785.80402 5112.3
+785.91663 8050.7
+786.00385 7564.1
+786.16724 4223.1
+786.40967 914.5
+787.37042 758.0
+795.60638 1184.5
+812.92841 925.0
+813.17334 2603.8
+813.42468 4581.5
+813.68115 2178.0
+817.42871 1713.4
+817.68341 2170.8
+817.93158 1458.4
+826.08154 678.4
+830.68530 1914.5
+830.93298 1531.1
+831.18292 1481.7
+831.43274 960.4
+834.93604 1168.5
+835.44061 1705.3
+835.69092 969.1
+837.08948 763.7
+842.43445 1019.2
+844.36658 943.1
+845.93549 2213.6
+846.18634 5054.9
+846.43585 6448.3
+846.68860 4766.7
+846.93707 3405.7
+847.18872 1684.0
+848.40833 5557.2
+849.41254 1819.6
+851.96185 802.6
+860.77979 894.6
+862.39203 1631.7
+863.35010 613.8
+863.69531 2681.5
+863.94733 3527.2
+864.19348 3197.3
+864.44202 825.3
+864.68475 1352.5
+865.21173 641.3
+866.69397 1286.0
+866.94495 4745.3
+867.19513 3086.1
+867.44647 2299.5
+867.70789 906.5
+867.95044 687.8
+870.43103 729.5
+871.19818 6909.3
+871.44806 13823.0
+871.69916 14105.2
+871.94904 10543.3
+872.20068 5944.8
+872.44409 1307.2
+872.68091 775.2
+873.47034 851.7
+874.47723 4556.5
+875.48016 2188.6
+884.67969 661.2
+888.95520 3537.6
+889.20697 6174.9
+889.45709 6903.0
+889.70947 3881.7
+889.96014 2905.8
+890.20850 1311.1
+891.46320 784.0
+894.69885 1493.0
+894.95831 1141.1
+895.22125 845.9
+895.69922 870.9
+898.95959 1868.0
+899.20471 4456.8
+899.45660 4074.8
+899.70612 4658.7
+899.95587 2853.9
+900.20685 995.2
+902.45166 1268.2
+903.46014 3883.2
+903.71021 5067.7
+903.96027 7253.8
+904.21088 4725.3
+904.46069 1999.8
+904.71631 1215.4
+904.95483 1108.0
+912.46533 989.2
+912.71246 1905.4
+912.96069 1486.0
+913.19550 1071.3
+913.46942 992.8
+914.79468 927.5
+916.71289 5029.6
+916.96448 8551.6
+917.21606 10093.3
+917.46533 7788.8
+917.71680 5242.0
+917.96851 2880.4
+918.21631 974.9
+921.21570 12646.8
+921.46838 26779.0
+921.71875 30596.0
+921.97003 18313.9
+922.21912 12831.2
+922.46967 5847.9
+922.72534 1653.7
+923.97778 1040.7
+924.48456 813.9
+928.46307 886.4
+928.80859 1093.8
+930.46759 812.9
+930.74408 600.7
+931.45026 815.7
+934.13422 2058.8
+934.46796 2737.5
+934.79163 2668.9
+934.97577 2407.6
+935.22009 1376.8
+935.46753 1256.1
+935.71838 1006.8
+937.12720 925.9
+937.45331 947.8
+938.97620 7028.2
+939.22650 14622.9
+939.47717 16396.0
+939.72784 9980.7
+939.97913 6135.6
+940.23010 3310.0
+940.47845 1486.9
+943.48383 1189.2
+947.47900 5756.1
+948.48145 2751.3
+949.49603 1296.3
+951.10895 758.1
+956.17090 914.0
+956.48859 1001.8
+956.83704 1745.5
+962.16907 4439.5
+962.50299 10844.8
+962.83728 10992.6
+963.17139 6115.7
+963.50421 2297.0
+963.84088 1351.1
+964.79260 935.0
+965.13806 968.5
+978.52637 2295.5
+979.02826 1886.9
+979.52423 1120.6
+980.17615 887.7
+981.47046 1185.9
+981.97644 1508.7
+982.98145 980.6
+985.84369 2440.9
+986.18286 4240.1
+986.51263 2409.7
+986.85297 2084.7
+987.18518 1698.1
+987.51678 735.3
+995.51807 965.4
+1022.20398 961.3
+1022.87921 1054.4
+1027.53943 4001.6
+1027.87537 7029.9
+1028.21094 8130.0
+1028.54321 4058.3
+1028.87878 2433.7
+1029.20996 1658.8
+1041.21582 865.7
+1042.17725 891.0
+1046.55371 6344.1
+1046.88489 13186.9
+1047.21802 10595.6
+1047.55481 7367.1
+1047.88684 4288.4
+1048.21973 1439.8
+1051.55872 1477.4
+1052.22937 1028.7
+1052.88367 894.5
+1058.51404 1167.5
+1060.56116 4435.3
+1061.56995 2126.4
+1062.56689 1082.7
+1070.56348 2686.1
+1070.89783 2519.8
+1083.90210 1094.2
+1084.22632 1902.0
+1089.23572 773.9
+1089.56458 921.3
+1089.91003 919.0
+1095.52734 956.7
+1096.03015 1554.2
+1096.54163 1291.8
+1113.25427 861.6
+1113.61304 867.9
+1127.90796 1382.3
+1131.05212 1337.1
+1131.62549 1851.2
+1132.05750 1402.3
+1132.61267 1714.3
+1145.56873 712.4
+1151.09546 839.1
+1161.60596 767.8
+1161.92029 1151.3
+1181.57178 910.2
+1182.59485 1017.3
+1183.59131 919.3
+1198.11267 3242.7
+1223.12781 664.5
+1251.12915 1111.3
+1251.63281 932.1
+1525.46692 1039.4
+1735.96838 590.7
+1870.21057 745.8
+1875.25549 1079.5
+1879.53821 19963.8
+1880.43787 708.7
+1880.96802 760.6
+1906.63147 917.7
+1907.06812 6914.3
+1930.67883 960.0
+S	2190	2190	1004.2687246
+Z	4	4013.0436
+271.50125 1089.8
+274.44821 1384.6
+316.91196 1088.1
+337.31009 1258.3
+350.27872 1242.3
+354.26508 1065.7
+372.97040 1253.0
+427.54178 1403.3
+437.28738 1473.3
+455.42743 1067.2
+473.25729 1218.6
+487.89105 1206.0
+515.20935 1121.9
+530.87274 1208.0
+532.51086 2616.6
+570.52856 1140.5
+597.90088 1258.1
+620.09436 1118.8
+642.95551 1322.2
+667.43414 1365.4
+672.77478 1234.5
+676.63202 1707.0
+779.70074 1119.4
+799.06989 1185.9
+828.41357 1415.6
+833.96747 1257.1
+962.15991 1340.3
+962.50714 3221.4
+962.83990 1775.6
+963.17102 2246.5
+980.23346 1705.1
+981.99176 1748.4
+982.51379 1844.5
+986.24896 7157.9
+986.50500 9292.1
+986.75397 8266.9
+987.00513 7303.6
+1020.84979 1252.4
+1028.21411 2120.4
+1046.54492 2344.6
+1046.88647 6130.6
+1047.22083 3190.3
+1083.91187 1690.4
+1084.88196 1304.8
+1089.90125 1972.5
+1127.91260 2410.8
+1150.93872 1210.1
+1182.06885 1577.6
+1185.25024 1402.5
+1198.14355 5970.2
+1228.28235 2796.9
+1228.62158 1567.2
+1525.40210 1316.8
+1667.02319 1321.5
+1750.40271 1236.6
+1777.05933 1406.7
+1870.23938 1263.6
+1878.66248 1615.5
+1879.51501 37855.0
+1880.83252 1477.7
+1891.62000 1389.3
+1906.77686 2317.2
+1907.05798 13652.7
+1918.85352 1491.0
+S	2191	2191	1005.0220746
+Z	4	4016.057
+268.19785 637.2
+271.51166 674.4
+291.72443 623.2
+311.73676 590.3
+317.73859 664.2
+324.14365 556.0
+330.03131 623.8
+366.97519 637.2
+395.21835 630.9
+410.58743 529.7
+450.19739 718.5
+461.23761 1327.1
+482.64929 622.5
+532.50586 1860.1
+538.11975 692.1
+544.27374 840.4
+559.32050 1195.3
+562.29205 952.2
+574.46832 624.0
+583.29321 899.6
+591.80353 5459.6
+592.30347 2735.3
+630.35394 3083.1
+659.30414 1345.5
+673.94421 602.2
+676.64209 1392.9
+677.31311 2654.0
+678.31372 796.3
+695.27405 574.5
+731.10522 852.3
+735.40509 829.6
+743.43951 3785.4
+744.44501 1485.5
+781.92053 688.2
+787.36664 1908.5
+788.35773 644.4
+790.93451 1061.3
+791.43835 1381.5
+795.59589 834.7
+798.42438 769.2
+805.36865 3824.2
+806.37567 1281.7
+844.38745 2393.6
+852.47314 623.4
+858.04547 737.4
+862.39337 3348.0
+863.39685 1501.0
+866.45081 1648.4
+866.95178 2881.9
+867.44934 1444.4
+867.97327 952.6
+871.20361 794.9
+874.47906 2257.8
+876.97809 857.3
+877.47668 800.8
+890.79016 2190.9
+891.12366 3822.5
+891.45837 3223.3
+897.13165 1791.2
+897.46368 1758.3
+899.20374 1159.8
+899.44617 894.9
+899.72321 886.3
+903.46161 1333.3
+903.70972 1866.4
+903.95752 2511.3
+904.20538 965.5
+904.46094 1590.8
+912.72052 695.2
+916.71277 1416.8
+916.96680 2950.9
+917.21973 2322.6
+917.46472 2944.1
+917.71844 746.2
+917.96722 1119.5
+921.21722 5492.0
+921.46808 8871.0
+921.71881 12600.8
+921.96899 9187.3
+922.22021 5052.1
+922.46832 2725.5
+923.96521 2019.8
+924.46796 1955.3
+927.01508 652.0
+934.46698 878.5
+934.79901 1073.5
+938.97900 2477.0
+939.22241 4666.8
+939.47778 3654.1
+939.72852 2804.3
+939.98096 2341.1
+945.48773 2867.7
+947.48822 764.5
+949.97101 1001.2
+950.25153 1105.5
+956.83136 2167.0
+957.16614 1667.1
+962.16858 16281.3
+962.50293 28592.3
+962.83759 24005.1
+963.17169 17126.3
+963.50476 6387.7
+963.83594 1057.3
+967.50000 841.6
+967.99579 991.7
+972.99188 880.8
+977.51367 1098.9
+977.74701 2044.0
+978.00128 1954.9
+978.25940 830.1
+978.50763 910.3
+978.76300 603.0
+979.03223 885.8
+981.47406 2042.0
+981.75311 6038.7
+982.00342 11740.4
+982.25238 16003.0
+982.50323 12989.4
+982.75269 8830.1
+983.00555 4545.2
+983.25500 2478.5
+985.84900 3407.9
+986.25153 11599.2
+986.50604 12477.1
+986.75513 6559.8
+987.00427 2585.7
+1021.86884 951.5
+1022.20813 848.8
+1027.54224 8908.3
+1027.87634 14518.5
+1028.21155 11427.2
+1028.54370 8871.4
+1028.87805 3704.0
+1037.49438 1314.4
+1040.48889 1386.6
+1040.87708 1476.1
+1041.21521 2410.7
+1041.55151 1726.1
+1041.88184 1042.8
+1046.55298 13362.3
+1046.88379 23985.4
+1047.00464 1386.4
+1047.21777 23224.0
+1047.55249 13959.5
+1047.88428 7043.7
+1048.21765 2780.2
+1048.55469 1093.1
+1051.22021 1251.4
+1051.55688 3218.0
+1051.88599 2243.8
+1058.51074 3483.0
+1059.52161 2028.7
+1065.22119 723.0
+1067.52649 976.2
+1070.22656 2447.6
+1070.56177 4455.4
+1070.89709 2956.6
+1071.23145 2269.9
+1083.56177 5675.5
+1083.89514 7006.5
+1084.22791 6322.5
+1084.56348 5171.0
+1084.88879 1911.0
+1089.23755 4662.3
+1089.57007 9920.2
+1089.90234 6675.6
+1090.23938 5863.8
+1090.56982 2603.9
+1090.91541 1205.9
+1092.55579 1238.4
+1095.53455 2776.1
+1096.03674 2174.6
+1096.52673 1903.4
+1097.02673 1388.4
+1100.57031 836.6
+1105.21606 1225.8
+1107.57373 1957.9
+1107.89648 1225.2
+1108.24817 997.2
+1108.57104 915.6
+1110.49280 688.9
+1112.91479 1720.4
+1113.25562 1249.2
+1113.58911 1594.5
+1113.92017 1056.4
+1122.23682 1412.9
+1127.57910 6698.8
+1127.91138 10255.8
+1128.24719 10026.6
+1128.57935 8415.1
+1128.90991 4472.7
+1129.24048 1590.2
+1129.57373 1230.1
+1131.05249 3037.8
+1131.55237 2668.0
+1132.05249 1796.0
+1151.25488 1766.2
+1151.59192 2363.8
+1151.93066 1494.2
+1152.25684 1723.8
+1155.59363 1943.7
+1155.91992 1650.1
+1156.25830 1977.6
+1156.59009 1171.3
+1157.31897 801.5
+1161.26074 6745.5
+1161.59448 16264.2
+1161.92883 13738.5
+1162.26257 7496.2
+1162.59998 5044.8
+1162.93481 2205.0
+1181.57520 4184.8
+1182.07361 6658.0
+1182.59521 6098.1
+1183.07666 3085.7
+1183.60510 2641.7
+1184.60815 1273.2
+1184.94421 1800.2
+1185.27454 3169.0
+1185.60669 3253.2
+1185.93787 2597.1
+1193.24402 753.4
+1198.13232 3088.1
+1198.60681 1657.5
+1198.94067 1962.2
+1199.27344 1736.8
+1199.61047 1387.1
+1199.92834 877.0
+1204.27405 3185.0
+1204.60535 5214.4
+1204.94104 5562.9
+1205.27771 3462.0
+1205.62073 1727.5
+1205.95007 1233.0
+1221.95422 980.7
+1222.28381 2141.9
+1222.61548 2433.1
+1222.95105 2446.5
+1223.28564 1736.1
+1227.95227 5453.8
+1228.28674 12955.3
+1228.62195 14953.1
+1228.95374 11053.1
+1229.29028 4111.6
+1229.62012 3082.9
+1236.62512 879.3
+1238.10962 2081.3
+1238.61646 2301.3
+1239.11560 2320.3
+1239.61389 1052.6
+1248.64661 991.3
+1251.13586 894.9
+1251.63379 2544.7
+1251.96301 3781.7
+1252.30469 2736.7
+1252.63879 3578.9
+1252.96704 1170.8
+1254.62964 1113.8
+1294.13879 966.7
+1295.11133 772.9
+1297.62573 2148.0
+1334.84973 671.8
+1373.15210 850.5
+1380.70215 4992.6
+1381.20593 4791.9
+1381.70703 4892.6
+1382.21155 2270.0
+1382.70764 833.9
+1396.68726 1147.7
+1397.70764 856.1
+1416.22729 1128.9
+1416.71985 2183.3
+1417.21765 2054.2
+1417.71533 1194.8
+1495.76917 1654.5
+1496.78235 1455.7
+1866.99707 712.3
+1872.72534 644.2
+1872.95386 734.4
+1879.23230 1559.7
+1879.54529 19675.0
+1879.87732 1439.6
+1907.09985 7475.1
+1930.54834 990.3
+S	2193	2193	516.5450296
+Z	4	2062.14882
+148.86891 572.3
+157.59863 601.5
+161.74741 613.1
+175.11902 4122.0
+179.07820 609.9
+185.11581 4671.5
+188.28404 2234.2
+188.29703 2337.1
+188.30672 1772.4
+194.99588 556.7
+198.90134 867.7
+199.19748 639.4
+199.27658 1292.4
+199.28546 845.0
+199.29556 2434.1
+199.31760 709.7
+199.45949 559.8
+200.89056 757.3
+217.01811 590.1
+231.89369 600.6
+233.16473 4046.4
+233.56648 594.7
+234.16597 650.7
+241.65771 2047.5
+242.15910 696.7
+244.89812 587.0
+246.12810 1252.5
+254.16188 869.3
+254.84059 552.8
+261.24670 570.2
+272.17148 7249.6
+273.91592 621.0
+274.89398 615.5
+282.67731 702.5
+284.18878 766.7
+309.19293 1375.3
+314.68701 3018.3
+321.67310 3373.5
+322.17535 1205.0
+327.20267 4791.1
+327.70020 708.4
+333.20148 1750.5
+336.20779 5374.8
+336.70905 2298.7
+341.20145 2288.0
+344.89212 556.9
+348.69308 488.3
+348.82281 675.2
+350.18204 1183.6
+350.20529 19541.9
+350.70712 7760.9
+351.21442 9022.6
+352.21750 2034.1
+368.47046 915.6
+368.85611 1101.4
+369.19421 1028.1
+369.22437 261360.4
+369.59409 1490.8
+369.84302 685.8
+369.84985 605.9
+369.97839 1136.0
+370.22839 48510.7
+370.71698 2503.3
+371.23065 5528.5
+381.34589 761.7
+396.21307 6182.3
+396.71387 2551.3
+413.73038 1418.7
+416.22537 630.6
+427.23083 832.3
+427.53049 814.3
+427.72089 6358.8
+428.22006 2277.8
+428.25116 2741.9
+428.72055 689.4
+429.25522 741.2
+441.71915 3981.2
+442.22095 1381.3
+442.72067 747.1
+445.24420 8001.8
+446.24756 2215.1
+449.24561 885.7
+452.74930 1093.7
+455.24783 37486.6
+455.58212 34613.8
+455.91595 13477.2
+456.25034 5258.6
+456.58279 1483.9
+468.59903 893.7
+473.94193 1768.3
+474.27368 2891.6
+474.60370 1033.6
+474.94897 690.6
+479.94571 3211.6
+480.27930 2148.0
+480.61218 1503.8
+480.94110 823.7
+482.30777 37140.8
+482.63788 917.7
+483.31128 9222.4
+484.25912 7110.1
+484.31409 1809.0
+484.59277 3354.9
+484.76599 1703.5
+484.92560 2529.1
+485.26190 1239.4
+488.75723 5130.3
+489.00876 4894.0
+489.25867 2921.6
+491.27298 1531.2
+491.60590 2331.2
+491.93781 862.5
+497.27655 3732.6
+497.60925 2427.5
+497.94672 1208.5
+498.25644 1430.5
+498.65955 624.7
+498.75845 1136.5
+499.28680 7550.7
+500.28818 1259.3
+501.23834 1297.7
+518.61572 1311.2
+524.30267 835.6
+525.63965 1766.5
+525.97614 953.8
+526.30713 1680.9
+527.61243 14304.4
+527.94696 12084.0
+528.28064 7862.7
+528.61499 2509.3
+528.94952 795.6
+532.48669 2029.2
+534.97076 39753.8
+535.30493 42120.9
+535.63922 21539.8
+535.97369 7149.9
+536.30872 2257.1
+541.33398 2702.2
+541.62073 583.2
+541.77631 1250.7
+542.27045 726.8
+549.97430 1720.0
+550.30103 1199.4
+550.63959 1563.7
+551.54028 570.9
+555.97577 17540.4
+556.30981 16292.8
+556.64386 9104.9
+556.97729 4724.3
+557.30981 1380.8
+558.74939 1593.1
+559.25067 772.3
+561.24323 597.8
+565.30695 48253.5
+565.64130 51536.2
+565.97516 27776.9
+566.30890 10110.2
+566.64386 2198.7
+576.04510 564.6
+577.30115 1079.9
+580.34247 1173.0
+586.32172 778.1
+595.31781 1152.6
+608.85675 3445.6
+609.35852 1213.0
+610.35266 902.9
+612.37073 30825.8
+613.37341 11272.7
+614.37549 2353.1
+615.29382 1267.1
+618.99048 933.0
+619.32648 1361.3
+628.36517 1706.4
+633.83838 889.2
+634.34326 739.3
+642.34253 2076.0
+642.69360 699.5
+644.33417 538.7
+646.87250 679.2
+651.33984 5777.3
+651.67493 5383.6
+652.00842 2569.2
+652.34619 1171.3
+659.31268 1530.1
+660.30945 779.6
+665.37811 906.5
+673.35175 1123.1
+674.36462 1190.0
+675.38617 1562.5
+675.88239 977.9
+676.39087 620.9
+676.63348 1528.8
+681.39215 3061.6
+682.36621 73170.4
+682.42859 1460.6
+682.86725 57542.3
+682.92572 1495.8
+683.36914 29109.9
+683.86871 10430.5
+684.36517 2562.7
+699.40198 28436.9
+700.40601 11640.0
+701.40863 2390.4
+701.89459 1226.7
+702.38666 1141.0
+709.89423 2174.3
+710.30884 1309.0
+710.39447 4054.4
+710.90002 17886.5
+711.40143 13726.5
+711.90302 6640.8
+712.40222 2017.0
+719.41254 6293.0
+719.91412 5380.1
+720.41675 2553.1
+722.39648 964.6
+725.88312 5728.9
+726.38654 5515.8
+726.88940 2192.1
+727.39276 895.3
+736.40674 2131.5
+736.90442 3807.2
+737.40039 1854.0
+739.42523 4464.9
+740.42786 1690.3
+743.77783 738.9
+745.41101 84698.2
+745.91180 77145.3
+746.41351 36162.8
+746.91577 10087.1
+747.42023 3047.2
+755.39545 6261.7
+755.89703 6554.8
+756.33197 998.2
+756.40076 2522.6
+756.89655 1049.6
+773.35681 18494.5
+774.35840 6140.3
+775.35864 1285.2
+781.91064 5316.1
+782.40631 8343.3
+782.90491 6875.0
+783.40582 3568.6
+789.75592 712.9
+790.91559 168956.3
+791.41626 164434.3
+791.91687 87258.4
+792.41833 33759.6
+792.58118 1089.8
+792.84131 731.5
+792.91852 9848.5
+793.27728 1010.5
+793.42267 2597.5
+795.60730 1083.3
+811.94318 1741.5
+812.43567 1266.5
+838.94617 926.8
+839.44421 979.6
+847.45721 24277.1
+847.95844 23965.0
+848.46051 13866.7
+848.95984 5580.3
+849.46021 1850.3
+854.43512 2418.6
+855.43402 1304.6
+882.42633 2387.5
+883.44135 857.7
+904.42773 612.1
+920.41870 1488.9
+921.42279 1204.7
+995.50879 1375.6
+996.51563 1096.7
+1007.50916 633.0
+1081.61255 633.0
+1188.28247 979.3
+1198.08398 3412.6
+1361.84985 587.9
+1520.29272 582.6
+1860.00708 786.3
+1873.08496 754.1
+1878.45813 1170.5
+1879.51453 20029.6
+1880.55212 861.3
+1907.08020 7509.7
+1930.52039 943.7
+1998.89746 683.5
+S	2194	2194	517.2980746
+Z	4	2065.161
+133.11137 972.0
+133.72932 683.6
+141.85066 584.5
+142.00206 637.6
+142.91417 546.6
+165.76660 606.6
+175.10333 625.4
+175.11858 3813.7
+177.18893 547.3
+185.11577 4308.7
+185.61766 1114.8
+188.24693 1074.9
+188.28268 2041.2
+188.29738 1920.2
+188.33948 662.4
+188.66956 582.7
+190.93890 628.4
+193.99471 597.3
+194.92528 512.2
+199.18787 946.5
+199.19341 869.0
+199.27258 2075.3
+199.28444 2246.9
+199.29295 1281.9
+199.36974 932.2
+199.38257 682.4
+233.16510 4062.1
+235.90833 888.7
+241.65747 993.5
+246.12807 1082.6
+272.17130 7615.6
+273.17471 1244.4
+280.18356 786.2
+284.10275 607.6
+285.26694 605.6
+288.82556 533.3
+305.67957 813.5
+309.18982 918.1
+315.19055 859.6
+321.67426 2373.6
+322.17496 964.2
+327.20233 3747.7
+327.70456 1444.4
+333.20172 1247.1
+336.20798 4142.8
+336.71078 1379.1
+341.20078 2074.9
+341.70084 815.7
+350.20544 18213.7
+350.28723 867.0
+350.70670 6751.3
+351.21426 9610.3
+352.21744 2056.0
+353.89871 646.6
+361.70132 1040.8
+363.40063 605.7
+368.47025 839.1
+368.67520 583.7
+368.85376 1062.5
+369.22440 259782.2
+369.59607 995.7
+369.84210 778.3
+369.98291 1119.7
+370.22858 45437.4
+370.71729 3032.8
+371.23068 5232.4
+372.23016 731.3
+381.36069 857.8
+392.22629 703.7
+396.21307 5389.4
+396.71561 2992.8
+397.21890 761.7
+427.23364 2053.7
+427.54416 973.3
+427.72021 5303.4
+428.22113 2134.2
+428.25031 1241.5
+438.74637 573.3
+441.71884 3895.0
+442.22012 1741.9
+443.18494 593.8
+445.24411 19708.3
+446.24686 6351.9
+450.93137 683.6
+451.71405 652.7
+452.75681 1057.1
+455.24765 35974.3
+455.58215 32131.5
+455.91605 16234.3
+456.25009 5034.2
+456.58585 1200.5
+460.71356 1131.6
+461.28433 893.9
+468.26349 1016.2
+473.94177 2730.4
+474.27185 2437.1
+474.60501 1684.7
+479.94495 5375.0
+480.27985 2717.2
+480.61053 1617.0
+482.30780 35503.7
+482.65683 675.3
+483.31113 9704.4
+484.25989 8709.6
+484.31110 2099.8
+484.59381 4108.6
+484.76248 1161.0
+484.92789 1924.3
+485.23810 789.9
+488.75763 5290.0
+489.00821 5411.9
+489.25964 4724.8
+489.50940 1203.1
+491.27365 2052.9
+491.60736 2217.5
+496.78644 570.7
+497.27524 4973.6
+497.61145 2721.6
+498.25919 2259.5
+498.76096 856.4
+499.28674 9305.5
+500.23740 724.5
+500.29041 1324.9
+501.23746 872.4
+518.07623 517.8
+518.28021 1095.9
+525.64001 1123.0
+526.30829 1311.3
+527.61230 13877.5
+527.94733 10876.6
+528.28149 6260.1
+528.61426 1673.0
+532.44879 1385.2
+532.62402 654.3
+534.97095 45748.1
+535.30511 40191.6
+535.63934 18003.4
+535.97375 7726.5
+536.30780 2643.6
+536.64319 737.0
+541.33380 2331.6
+549.96899 937.6
+550.30841 1345.5
+550.63916 1332.2
+555.97559 16471.0
+556.30957 18853.8
+556.64380 10195.5
+556.97760 4647.4
+557.31641 720.9
+558.74951 2140.0
+559.25201 1826.0
+559.30237 1259.6
+559.75299 599.3
+565.30695 48032.4
+565.64124 48181.8
+565.97510 26834.5
+566.30933 9913.7
+566.64246 4235.7
+568.78265 638.1
+577.29675 1151.2
+577.80182 1154.3
+595.34167 791.1
+597.66187 934.5
+608.85480 2931.8
+609.35724 1655.9
+612.37091 32735.0
+613.37323 11086.8
+614.37506 1784.4
+615.29346 985.0
+615.37610 657.2
+615.78979 638.9
+618.99042 2824.3
+619.32556 2292.6
+619.65369 796.4
+628.36475 2265.5
+629.37427 865.7
+634.84015 705.3
+642.34027 1984.9
+646.87042 924.7
+647.36884 726.1
+651.34100 4774.1
+651.67578 4906.5
+652.00934 2007.0
+652.34351 1051.2
+659.31500 2080.5
+665.37958 991.4
+666.38257 813.5
+669.85754 1059.1
+673.35950 916.2
+675.38226 1511.5
+675.88013 2140.9
+676.63422 721.4
+681.39319 2758.8
+682.36646 74513.0
+682.86755 59201.5
+683.36902 26975.4
+683.86871 8170.2
+684.36353 1332.8
+686.61859 620.9
+688.38275 1077.7
+699.40222 27355.2
+700.40546 10596.6
+701.41034 2341.5
+702.38885 1147.7
+709.89362 3123.7
+710.39301 2689.3
+710.90002 15916.8
+711.40112 13726.2
+711.90326 5468.6
+712.40399 1699.1
+719.41388 7252.3
+719.91522 5893.6
+720.41522 2521.3
+722.39551 1332.4
+725.88330 5482.2
+726.38495 6095.2
+726.88977 2736.8
+731.13141 691.3
+736.40472 2108.4
+736.90576 2308.8
+737.40326 1821.3
+737.91028 851.3
+739.42456 3798.4
+740.42383 1034.9
+743.68170 518.1
+745.41107 86053.6
+745.91193 78828.8
+746.41394 33878.3
+746.91656 11059.1
+747.41809 3062.7
+755.39703 6256.9
+755.89838 6319.4
+756.33221 1380.4
+756.40088 3295.9
+757.34296 1017.1
+773.35699 16262.7
+774.35938 5163.5
+781.91162 6100.5
+782.40588 9961.0
+782.90442 6052.5
+783.40784 3320.2
+783.90253 1687.3
+788.98059 766.7
+790.91571 173655.5
+791.41626 152761.3
+791.91693 79414.3
+792.08502 694.4
+792.41821 32693.8
+792.57855 1052.7
+792.91913 9293.6
+793.28009 798.6
+793.42480 3009.2
+793.92480 837.8
+795.60242 1292.1
+811.75592 662.6
+811.93726 1865.6
+812.44073 2125.2
+838.95361 1591.5
+839.45660 757.0
+847.45697 23218.7
+847.95837 26755.1
+848.45898 14111.6
+848.95862 5526.8
+849.45300 844.5
+854.43524 2687.2
+855.43469 1682.6
+882.42706 2476.1
+883.43304 887.6
+903.46210 715.3
+920.42456 1490.3
+940.35254 649.2
+950.36816 617.3
+995.50763 1323.9
+996.52277 1064.1
+1146.76221 569.6
+1198.00647 2886.4
+1297.93445 801.1
+1377.70410 601.5
+1525.43909 739.5
+1583.08521 618.4
+1718.06934 677.4
+1766.87354 617.7
+1860.05359 729.9
+1870.33667 1079.8
+1878.34802 983.3
+1879.08447 2648.8
+1879.49707 19402.5
+1879.87256 2624.0
+1881.75000 673.1
+1907.08582 7753.5
+1930.60449 724.1
+S	2195	2195	616.2378246
+Z	2	1230.628
+Z	3	1845.438
+158.71347 539.3
+158.71843 575.9
+159.08287 607.7
+166.88431 616.2
+188.24886 792.1
+188.25854 585.2
+188.26537 995.6
+188.27824 1376.0
+188.28783 1144.0
+188.29576 1174.5
+188.30293 1037.2
+188.31183 599.6
+189.69313 647.2
+195.24152 574.2
+198.90448 928.0
+199.18901 877.6
+199.25139 561.7
+199.27132 1284.1
+199.28720 2718.1
+199.30429 1127.3
+199.37236 665.4
+199.38495 995.0
+199.62996 582.9
+202.09447 538.0
+212.10323 1755.2
+212.55186 511.8
+233.12868 826.3
+233.98729 647.4
+240.09691 1263.8
+241.08000 891.8
+245.56879 596.4
+255.67703 614.9
+258.10934 705.2
+283.06299 539.1
+283.20047 635.0
+304.82156 527.0
+309.35153 594.6
+310.55121 578.2
+341.68478 6330.4
+342.18588 2871.5
+342.27332 648.8
+363.72369 575.1
+367.69202 568.5
+368.36349 613.4
+371.13782 4497.3
+372.12234 3038.7
+373.12527 821.7
+389.14755 1136.2
+390.00955 657.6
+391.07346 610.6
+391.21918 4894.9
+391.72025 2561.1
+415.11813 560.1
+416.26056 3843.7
+417.26538 1060.9
+434.20428 581.1
+440.75375 1812.2
+441.25583 802.8
+474.68295 1063.4
+475.18582 1886.1
+475.68451 643.7
+476.27112 14450.9
+476.77261 10586.0
+477.27420 2889.4
+486.57690 28626.6
+486.91119 41984.5
+487.24506 23265.7
+487.57855 6262.8
+507.18661 1453.3
+524.22046 1293.7
+524.71790 1457.4
+530.25610 5084.8
+530.59137 8408.6
+530.75677 695.1
+530.92468 6304.1
+531.25842 3475.9
+532.47778 2183.5
+533.67889 609.7
+533.78430 8019.1
+534.28558 6034.4
+534.78613 2338.8
+545.30316 8375.7
+546.30750 3092.4
+549.16083 695.1
+599.30481 7787.9
+599.80609 9367.2
+600.30591 4151.2
+631.25299 1424.1
+632.22900 1080.5
+633.23492 935.4
+642.28052 1763.3
+642.77881 1485.8
+643.27991 1381.3
+676.65155 1306.1
+680.83575 3960.1
+681.33746 6470.8
+681.83868 3148.8
+682.36267 13213.9
+683.36420 8257.6
+684.37280 1534.6
+706.80072 2746.1
+707.30182 3895.7
+707.80127 2552.0
+720.86444 780.0
+721.35577 716.3
+729.36218 35044.9
+729.86298 50937.8
+730.36407 32870.0
+730.86591 9276.8
+763.34833 641.1
+763.84674 2005.4
+781.34467 675.7
+781.43005 8205.5
+782.43237 5881.2
+783.43109 1391.5
+786.88025 867.4
+794.88318 11261.1
+795.38312 20188.3
+795.62122 883.4
+795.88470 15399.2
+796.38556 5119.4
+801.35919 702.0
+827.36908 1659.5
+827.87238 2539.3
+828.37091 1535.8
+858.39117 636.5
+877.31866 7758.1
+878.32495 5862.1
+879.32208 2169.2
+880.49719 2013.6
+881.50769 797.0
+915.42206 1126.5
+947.42767 850.4
+948.36389 5781.6
+949.36127 4997.4
+950.35547 1354.2
+952.54059 692.9
+1022.98962 677.7
+1047.42542 4930.7
+1048.42749 4173.9
+1049.43054 2502.2
+1058.16980 572.4
+1067.56494 852.8
+1146.49731 2131.0
+1147.49951 2985.1
+1197.59534 634.7
+1198.07300 3752.4
+1429.74133 572.0
+1525.40161 643.3
+1536.98145 636.1
+1628.45752 626.7
+1694.50867 696.1
+1809.73413 651.2
+1860.05054 633.2
+1868.99695 614.3
+1876.11511 665.6
+1878.41980 713.8
+1878.80884 711.9
+1879.10901 3677.9
+1879.57324 19630.1
+1880.04297 3277.1
+1880.42627 1062.2
+1907.11243 7660.0
+1918.80347 666.6
+1930.62561 924.8
+S	2197	2197	1879.95440793
+Z	3	5636.588
+Z	2	3758.061
+532.50531 1677.5
+549.13885 619.4
+549.16376 614.2
+630.38995 872.1
+635.53217 779.3
+670.72839 620.2
+731.09302 983.1
+858.04034 750.7
+1010.51465 643.6
+1057.28259 976.6
+1198.13269 2761.9
+1215.19165 526.3
+1470.32227 559.2
+1484.26208 577.4
+1687.27185 614.6
+1870.19128 684.8
+1879.30334 6614.4
+1879.57166 17536.8
+1880.45483 848.1
+1880.76477 960.8
+1907.04883 7858.6
+1930.52014 735.0
+S	2198	2198	516.5374021
+Z	4	2062.11831
+131.74820 49271.3
+132.82964 52938.9
+140.63667 56074.0
+154.29382 56795.7
+165.76750 71097.2
+166.10750 50643.4
+188.20198 49580.3
+188.21678 59630.9
+188.22670 71043.7
+188.25188 62643.5
+188.26352 87532.8
+188.27383 57977.0
+188.29094 67819.5
+188.30681 60793.1
+188.31738 53951.9
+188.33212 56286.9
+188.34273 57641.4
+188.35002 46719.9
+188.37718 51135.4
+196.21875 55000.3
+198.90080 88655.5
+199.07289 56367.4
+199.18697 90763.0
+199.25352 67032.6
+199.28433 224070.6
+199.31009 133185.9
+199.38341 82800.8
+199.40884 59493.4
+219.89258 49498.5
+243.43156 65818.6
+248.12523 56052.2
+308.90497 52652.6
+342.69507 60110.0
+350.20480 231542.0
+350.28711 77853.2
+350.70819 99680.2
+351.21313 108791.9
+369.22342 3057902.5
+370.22781 540300.4
+422.74722 56538.1
+427.71964 122925.1
+455.24713 583132.9
+455.58142 264902.3
+455.91833 88940.5
+479.94409 58152.5
+481.25815 53313.8
+482.30667 376285.6
+482.67294 69296.9
+483.31088 105254.6
+492.34912 49902.8
+499.28677 68456.4
+527.61267 71095.5
+528.62115 53974.3
+532.48981 187821.3
+534.96869 358764.8
+535.30328 246881.7
+535.63892 145143.6
+555.97559 103898.8
+556.30725 175623.8
+556.64099 102270.6
+564.44910 56063.2
+565.30676 409670.4
+565.64001 406349.1
+565.97369 138737.1
+566.30896 118390.0
+578.23187 53352.0
+602.82813 60851.2
+612.37048 387327.8
+613.37207 92890.3
+626.79767 54897.2
+676.64728 92438.4
+682.36481 931333.6
+682.86591 413567.5
+683.36499 209494.8
+683.87067 102381.2
+699.40112 307804.2
+700.40619 68574.6
+710.89581 182770.1
+711.40167 133909.4
+745.40991 942869.1
+745.91113 657554.7
+746.41382 251490.1
+781.91248 91470.0
+782.40454 111970.5
+782.89886 55446.3
+790.91425 2037552.0
+791.41547 1580580.9
+791.91730 739754.1
+792.41626 187231.2
+796.97748 74552.7
+817.71368 50103.6
+847.45551 202469.3
+847.96143 240045.8
+848.45197 133087.6
+949.26422 70046.0
+1040.44458 48337.4
+1057.25916 73026.2
+1156.43665 61386.8
+1188.22339 63188.5
+1198.09912 296160.3
+1217.58850 51446.9
+1369.79871 57173.9
+1675.01489 55432.5
+1702.13965 59097.4
+1780.30090 67279.3
+1798.24524 51935.5
+1873.03711 70964.5
+1878.00977 84057.6
+1878.42505 109023.6
+1878.89307 116435.9
+1879.17053 101931.6
+1879.54749 1886013.0
+1879.82349 123103.3
+1880.22546 116681.2
+1880.65930 147141.8
+1881.05359 68868.7
+1907.08875 667750.3
+1907.53271 58852.2
+1918.77026 91894.5
+1930.73901 76613.2
+S	2199	2199	1907.46440793
+Z	3	5719.118
+Z	2	3813.081
+532.49371 2176.4
+550.60889 844.9
+576.93817 550.7
+620.72546 775.3
+676.65631 1272.3
+731.14374 760.5
+744.10657 747.8
+781.35510 650.5
+781.84424 624.7
+795.59790 691.9
+853.93872 577.0
+1004.49554 614.0
+1057.27747 786.5
+1155.31018 671.9
+1198.10754 3363.7
+1352.82300 577.9
+1454.90039 663.7
+1671.29407 612.4
+1776.90027 650.4
+1825.99243 700.3
+1878.32178 610.3
+1878.68567 1259.8
+1879.09583 1294.3
+1879.58594 19473.6
+1880.06018 1339.9
+1880.47815 811.3
+1880.69580 932.8
+1907.07849 7314.3
+1930.65515 1147.1
+S	2201	2201	516.5377671
+Z	4	2062.11977
+138.07689 570.6
+140.62309 754.0
+141.85052 629.4
+157.61917 728.5
+157.62860 602.1
+157.63181 622.6
+165.76419 596.8
+172.24701 619.2
+175.11867 2783.1
+183.14726 757.8
+185.11568 3623.8
+188.25099 626.5
+188.26587 939.8
+188.28288 737.9
+188.29637 916.9
+188.30774 769.5
+188.32323 644.7
+188.33647 533.4
+188.35242 501.8
+188.36009 547.6
+188.37389 671.6
+191.61940 573.0
+191.62155 584.3
+198.90425 889.1
+199.17680 502.4
+199.18517 755.9
+199.22749 1009.9
+199.25937 1273.7
+199.28307 1619.6
+199.30386 1102.5
+199.31569 1054.3
+199.32663 897.3
+199.34962 826.9
+199.40140 707.8
+209.69150 611.6
+213.70316 602.8
+221.44347 593.0
+226.29639 582.5
+228.10928 605.6
+238.70064 854.7
+241.65829 1262.3
+252.06195 640.0
+255.31337 765.7
+272.17148 6372.7
+273.17493 573.7
+281.47482 604.1
+291.68445 1170.4
+295.30130 505.3
+314.68665 2636.5
+315.18771 885.7
+321.67285 1887.9
+327.20291 4147.5
+327.70465 854.7
+333.20126 1384.5
+336.20786 2690.7
+336.70926 1480.4
+341.20105 1399.5
+350.18246 789.0
+350.20496 14533.7
+350.70682 5097.1
+351.21402 8524.0
+352.19977 706.7
+352.21564 875.4
+368.47504 800.0
+369.09741 725.7
+369.22418 217934.4
+369.59482 947.3
+369.97626 1031.1
+370.22824 39401.9
+370.71790 2363.4
+371.23117 5090.1
+396.21341 2518.8
+396.71481 975.1
+425.30725 670.9
+427.58734 627.1
+427.71985 4798.3
+428.22079 2429.5
+428.25168 1141.1
+428.71939 724.1
+436.76544 522.5
+440.25986 561.8
+441.71750 2720.6
+442.21854 1354.5
+445.24283 2643.6
+446.24731 2243.3
+455.24759 28725.9
+455.58200 26310.9
+455.91589 12001.3
+456.24973 4799.8
+468.26459 745.5
+473.93973 2181.6
+474.27475 1773.4
+474.60416 735.5
+479.94415 1608.1
+480.27884 1290.8
+480.61267 753.5
+482.30771 29709.7
+483.31143 8178.9
+484.25916 4622.2
+484.31046 662.8
+484.59308 3172.3
+484.76511 794.9
+484.92691 1269.5
+485.26483 871.6
+491.27203 1202.6
+491.60794 693.0
+491.94522 817.8
+494.27841 1043.2
+497.27597 3636.1
+497.60907 2975.7
+497.94473 2702.7
+498.26163 1694.2
+499.28604 6519.1
+500.29025 2055.3
+506.72235 554.5
+511.95493 642.7
+525.63959 1095.5
+527.61230 8390.7
+527.94684 9446.0
+528.28101 5247.4
+529.30225 888.6
+532.47668 1811.5
+534.97083 30432.5
+535.30469 30675.7
+535.63904 18253.0
+535.97351 8707.2
+536.30798 3074.6
+536.64362 805.9
+538.57477 595.1
+541.33264 1826.6
+549.97345 2057.6
+550.30426 1621.6
+550.63959 1126.3
+555.97552 12300.4
+556.30951 13400.5
+556.64349 10863.1
+556.97559 3670.5
+557.31073 1474.3
+565.30652 34950.8
+565.64087 39550.8
+565.97510 22855.6
+566.31012 9407.6
+566.64197 2205.0
+566.96893 649.2
+580.84540 743.0
+608.85431 1539.7
+609.35266 1161.6
+609.86426 948.7
+612.37067 26672.3
+613.37280 8804.7
+614.37433 1619.4
+628.36560 1945.9
+632.29681 601.9
+634.33643 923.1
+642.33997 1319.7
+646.86401 807.1
+665.38049 908.6
+673.34064 837.3
+675.88031 1328.6
+676.65662 894.5
+681.39105 2202.4
+682.36603 52809.6
+682.86725 45118.0
+683.36877 22629.0
+683.86829 8436.1
+684.37030 1861.2
+684.86713 910.3
+688.37671 928.9
+699.40204 22430.1
+700.40625 9105.9
+701.40985 2008.8
+701.89581 733.1
+709.89343 2648.9
+710.39709 2974.6
+710.89935 12385.5
+711.40247 11446.2
+711.90149 5567.9
+712.40729 1542.7
+719.41467 4705.6
+719.91595 5814.5
+720.41516 2248.2
+720.91754 865.8
+722.39655 1256.1
+723.39600 1032.4
+725.88470 4322.2
+726.38483 3493.0
+726.88818 1733.2
+733.64331 606.9
+736.40326 1296.7
+736.90540 2029.7
+737.40369 1490.5
+739.42291 3217.0
+740.42957 1227.7
+745.41083 57109.5
+745.91180 61948.6
+746.41357 35084.5
+746.91687 8712.9
+747.41907 2156.4
+755.39612 5464.9
+755.89941 4512.8
+756.39825 3047.6
+756.90259 1671.3
+773.38782 597.9
+781.90979 4354.5
+782.40686 8014.1
+782.90552 6407.7
+783.40790 3048.4
+783.90424 1363.6
+790.24371 756.5
+790.91534 123682.0
+791.41614 131916.1
+791.91693 75979.2
+792.41864 31457.1
+792.91901 11027.8
+793.42017 2989.1
+795.60858 961.3
+802.95221 576.8
+811.93207 792.7
+812.43860 915.0
+838.44916 683.4
+838.94464 1472.3
+839.45789 667.3
+847.45679 16013.6
+847.95825 19136.1
+848.45935 12979.7
+848.96112 4523.3
+849.45581 1844.5
+854.42841 1255.7
+855.43292 1294.3
+882.42413 1473.2
+883.43152 729.1
+924.26868 576.6
+955.52527 666.5
+995.51526 1094.0
+996.50861 806.8
+1017.82562 638.4
+1152.30701 637.3
+1164.55286 589.3
+1193.91357 620.6
+1198.06287 3388.1
+1199.53333 603.7
+1317.15393 615.1
+1525.54382 763.7
+1572.20789 639.1
+1634.09497 642.2
+1680.29712 649.7
+1757.20251 573.5
+1870.82849 732.9
+1876.11584 743.4
+1878.82898 1648.5
+1879.28577 2655.3
+1879.58118 19897.1
+1880.30579 1383.1
+1880.94653 965.9
+1907.06494 7693.2
+1930.78638 1014.8
+1973.61340 764.2
+S	2202	2202	1880.0048246
+Z	3	5636.739
+Z	2	3758.162
+532.48907 1900.3
+549.18964 962.5
+575.35114 612.4
+612.77411 585.7
+630.45477 788.7
+654.42603 720.9
+676.62494 1080.1
+707.00323 675.4
+721.12048 664.9
+782.67474 604.5
+965.11829 613.6
+1020.82977 669.0
+1071.01270 595.7
+1139.15198 665.0
+1173.29797 614.8
+1198.08789 3151.2
+1525.53943 783.9
+1538.65149 597.0
+1639.98914 661.3
+1870.18262 994.4
+1876.04114 632.2
+1878.69324 649.4
+1879.50720 19724.8
+1879.79614 2299.8
+1880.22595 607.0
+1880.74670 872.0
+1882.22937 669.0
+1907.09412 7444.1
+1930.74524 798.1
+S	2203	2203	1907.44524127
+Z	2	3813.043
+Z	3	5719.06
+532.52881 1388.8
+540.46552 605.1
+557.09015 702.9
+573.59705 695.4
+630.38080 755.2
+644.18414 678.5
+653.52869 737.3
+676.64886 946.8
+677.42511 569.2
+690.38867 622.2
+725.67786 785.6
+731.10126 849.4
+768.62097 606.7
+788.05579 573.9
+795.61639 1228.9
+910.41614 606.9
+934.13196 654.3
+981.00964 666.2
+1020.85114 886.9
+1057.27563 894.2
+1198.18555 3569.2
+1525.35974 697.3
+1790.22400 702.6
+1877.54407 742.4
+1877.74536 676.2
+1878.13708 1144.2
+1878.67737 678.8
+1879.06677 1115.3
+1879.19531 1591.3
+1879.55847 19819.0
+1880.10962 1457.0
+1880.96277 805.7
+1885.32800 609.1
+1906.66479 650.5
+1907.05103 7238.0
+1930.54651 1154.2
+1948.67480 684.7
+S	2205	2205	488.2463546
+Z	4	1948.95412
+121.77515 9461.2
+121.78712 38450.2
+122.18928 8627.2
+133.12978 12673.9
+136.21790 8807.4
+165.76556 9252.1
+169.49159 10393.4
+175.08609 9375.7
+177.90236 8915.2
+182.61665 9843.6
+182.77870 9570.4
+184.48784 9401.1
+188.07318 9848.3
+188.19582 9448.1
+188.23340 9948.7
+188.26096 20570.1
+188.27815 26665.0
+188.29175 32908.6
+188.30147 26001.9
+188.31453 20030.0
+190.61632 7464.5
+194.93904 8283.1
+198.89804 10161.2
+199.17232 10381.9
+199.18242 12718.1
+199.19548 11790.8
+199.27074 20579.9
+199.28125 45973.5
+199.29364 19429.5
+199.29945 16276.6
+199.35913 10630.4
+199.38039 12812.7
+199.39101 8602.9
+199.40244 10698.4
+204.58734 9152.2
+210.35205 8789.2
+216.06487 12636.5
+217.09718 29119.3
+223.61734 8519.1
+233.09152 53986.7
+233.57054 9714.0
+234.12340 130306.3
+249.15936 12681.3
+261.08670 113637.2
+262.09094 15944.4
+262.11835 11841.3
+268.14032 17198.0
+277.14523 229089.9
+277.28964 8685.5
+277.64658 49264.7
+278.11307 204728.2
+279.11725 26062.8
+280.17789 11430.3
+284.41388 9776.9
+301.12851 14001.3
+312.17773 11651.7
+314.69852 11090.6
+317.16583 7848.2
+322.83423 17830.7
+323.16803 13275.0
+333.68680 16305.3
+338.90912 8932.2
+360.52954 27238.9
+360.86340 15108.1
+370.96313 9942.1
+371.40628 8578.6
+373.18527 37850.6
+373.68741 16130.2
+374.14508 27718.8
+375.12991 47519.9
+376.16107 43250.2
+392.15533 32548.0
+396.20395 11302.4
+399.20990 27642.4
+406.81497 8957.8
+409.55264 22674.8
+409.88501 13904.1
+414.21210 10914.9
+415.21890 21376.8
+415.73181 55769.4
+416.23169 36376.6
+416.73193 11790.0
+427.53506 9474.9
+429.72803 86403.8
+430.22992 46270.7
+430.73215 9762.5
+438.56085 50565.3
+438.71307 17552.2
+438.89651 35778.4
+446.72165 9030.8
+450.89243 28265.8
+451.22778 15869.2
+456.23071 94841.1
+457.23486 22121.0
+458.90442 10839.8
+464.90924 67856.2
+465.24402 45329.7
+465.57916 21507.1
+466.67444 8658.6
+468.22549 44156.2
+468.47342 38730.2
+470.47043 17058.0
+470.71872 31050.3
+470.91306 769891.4
+470.96454 19565.0
+471.24713 541318.0
+471.58139 238634.0
+471.91513 59588.4
+472.47879 179184.5
+472.72916 167570.8
+472.97977 112395.1
+473.23135 29327.2
+473.48288 11198.6
+474.72803 46836.2
+474.97504 150767.9
+475.22571 123809.5
+475.47473 53702.2
+475.72476 14852.6
+477.17487 19295.9
+478.58844 9613.0
+481.15390 9269.6
+494.19943 12532.3
+503.26312 41240.6
+503.76697 13764.1
+511.22836 39188.1
+513.93085 26795.0
+514.26355 24311.2
+514.59729 12653.1
+519.93512 235328.5
+520.27039 173912.3
+520.60480 70978.6
+520.93634 20825.3
+521.20129 11357.3
+522.19684 41101.5
+523.19971 11493.6
+532.46564 12670.0
+532.50104 17907.8
+532.53754 16767.6
+535.27246 25936.3
+537.76807 9573.0
+538.27283 16310.2
+539.22339 74777.7
+540.23083 17115.6
+540.29077 28565.1
+540.79657 12134.0
+543.73499 11481.1
+545.63788 9089.3
+546.59930 58021.1
+546.93481 32627.4
+547.26917 20699.6
+547.59003 10521.8
+551.76898 14824.2
+551.94397 17150.9
+552.27423 46950.6
+552.60986 27437.2
+552.94232 16502.6
+553.07739 11085.7
+553.28259 579000.1
+554.28607 161463.2
+555.28717 22802.2
+557.95081 52300.3
+558.28680 36931.5
+558.61761 31388.6
+578.61005 37188.1
+578.94257 37079.0
+579.27722 16976.4
+582.30164 24546.5
+584.28009 13825.2
+584.61377 61814.3
+584.94623 80290.6
+585.28290 23365.6
+586.27734 15938.5
+590.29047 21577.3
+590.62286 38619.2
+593.94849 16205.2
+595.96295 31624.9
+596.29974 29772.3
+596.62708 19715.8
+599.61993 27282.1
+599.95544 18900.7
+602.23389 11142.8
+603.63055 10826.4
+613.82306 56870.9
+614.32501 35506.6
+614.82166 15132.5
+625.26935 12246.9
+642.29364 12111.6
+657.33972 110721.7
+657.84100 87000.5
+658.34241 41387.1
+662.33185 22883.8
+662.83093 10507.6
+666.36682 58245.2
+667.36517 23855.6
+676.32941 9330.0
+676.62280 16212.9
+684.84277 10975.2
+685.33972 13937.4
+690.82501 18268.1
+696.86139 99235.3
+697.36230 76767.7
+697.86292 33032.0
+698.36945 15264.8
+698.83466 28893.7
+699.33173 20559.5
+699.83344 10018.7
+705.29803 12582.5
+705.86603 1139729.6
+706.36743 806113.0
+706.86841 371173.5
+707.36896 85829.0
+707.86853 13349.2
+741.85785 10410.5
+745.36353 27838.0
+745.88129 10461.0
+779.40021 56921.2
+779.90350 54967.3
+780.39972 20529.5
+784.39343 29539.7
+784.89441 25170.0
+793.60089 9856.5
+795.57831 13793.2
+829.42987 32949.9
+858.44849 56279.1
+859.45184 29604.3
+860.46375 9827.5
+861.44843 9996.6
+866.61371 11130.7
+955.01453 9660.7
+1005.51459 22637.7
+1011.96393 8821.0
+1068.50916 9263.1
+1120.32776 9621.2
+1132.67175 12166.2
+1198.12048 39782.3
+1198.23523 17963.4
+1257.83594 12120.6
+1502.37769 9660.6
+1634.33533 8408.1
+1651.06018 9854.9
+1663.82703 8885.9
+1776.84192 10620.7
+1809.48730 9202.1
+1870.34399 9883.4
+1878.83801 19706.5
+1879.05676 12545.8
+1879.50366 295072.0
+1879.77161 35739.6
+1879.91431 16889.5
+1880.21301 19309.2
+1881.20435 10718.7
+1906.27698 9376.3
+1907.06335 111486.8
+1918.82129 13249.6
+1930.57397 15971.9
+S	2206	2206	783.9860606
+Z	5	3914.89118
+212.88498 11888.6
+223.95515 10777.2
+225.39828 9809.0
+228.71991 10668.2
+253.83607 9961.3
+271.65640 12284.9
+273.65662 11127.2
+308.89468 10892.3
+325.06119 11836.4
+344.23697 10186.7
+350.29135 15939.4
+366.17786 11189.0
+427.52472 11369.5
+436.46872 11561.6
+438.96381 10764.7
+444.16937 11227.7
+532.47620 15454.3
+532.51550 13978.7
+664.91638 11453.0
+676.62335 20988.4
+693.11719 11500.0
+709.32562 17496.5
+738.54626 80601.2
+738.74597 143879.7
+738.94617 160707.0
+739.14716 107608.0
+739.34717 47315.5
+739.54651 24699.8
+747.26971 13849.1
+795.59467 16157.3
+862.14063 12958.9
+877.40051 16052.0
+882.40997 18426.5
+886.16229 75451.1
+886.41315 265866.3
+886.66425 293430.8
+886.91510 132077.3
+887.16443 61996.7
+887.41431 55056.8
+922.92999 262571.8
+923.18085 437946.2
+923.43109 456707.3
+923.68109 388540.5
+923.93158 241271.6
+924.18091 73555.1
+924.43262 50764.8
+924.68341 28927.6
+981.12585 12197.6
+981.45343 20219.8
+1149.19922 11115.4
+1184.08350 10976.6
+1198.07117 56313.2
+1254.68909 12374.6
+1263.93127 12330.4
+1309.49854 10385.9
+1488.06409 10964.5
+1517.10498 11106.7
+1625.02979 12224.5
+1627.46057 10970.8
+1666.97827 13405.8
+1756.95618 11579.3
+1763.26611 11831.1
+1870.51379 13844.1
+1872.26929 13037.6
+1878.34473 14628.2
+1878.88281 16720.6
+1879.49280 342018.5
+1879.77478 31250.3
+1880.11194 23813.4
+1880.70483 17401.9
+1883.05859 11366.6
+1907.10510 134035.3
+1918.86011 12503.4
+1930.56323 17230.3
+S	2207	2207	516.5416121
+Z	4	2062.13515
+133.27162 701.2
+136.40981 576.2
+159.89009 575.4
+165.76613 736.3
+169.29303 546.1
+175.11896 3977.7
+182.77986 702.2
+185.11568 4478.8
+185.72673 575.0
+186.22888 567.3
+188.26007 806.9
+188.27150 1111.9
+188.28545 902.7
+188.29778 1274.9
+188.30818 995.9
+188.31772 872.7
+191.13960 637.5
+192.90076 637.7
+199.19095 701.1
+199.19786 750.9
+199.25209 619.1
+199.26688 1070.4
+199.28593 1959.2
+199.38843 621.3
+209.32336 621.8
+241.65807 1046.5
+272.17139 6637.4
+276.88995 579.8
+291.68283 876.9
+295.11560 578.4
+306.40970 553.6
+306.67160 605.7
+308.89719 631.2
+314.68668 1403.4
+321.67322 2601.9
+327.20288 3423.9
+327.70465 1926.8
+333.20264 1931.4
+334.20718 676.3
+336.20746 3694.3
+336.70804 1448.4
+341.19989 1490.4
+348.20264 629.4
+350.20520 16004.3
+350.28137 764.2
+350.70679 6039.4
+351.21405 9838.8
+352.21725 1666.9
+361.70197 866.9
+362.20639 597.6
+368.47342 808.3
+368.85507 823.3
+369.22421 247554.7
+369.59540 1345.4
+369.84106 820.4
+369.97574 1342.9
+370.22827 42828.7
+370.71756 2803.2
+371.23077 5257.9
+372.23166 797.9
+396.21292 4885.7
+396.71408 1987.2
+427.53537 904.6
+427.72021 6338.0
+428.22180 2713.4
+428.25058 1321.6
+428.72208 851.0
+429.22586 583.2
+429.24353 592.1
+430.09601 576.8
+441.71707 3474.9
+442.22006 2036.1
+445.24384 1138.0
+446.38071 557.1
+452.22971 712.0
+452.75238 1620.3
+455.24768 32834.6
+455.58182 27410.1
+455.91577 13583.6
+456.24960 5944.7
+456.58337 1357.8
+460.34372 546.7
+461.28525 1004.2
+468.59222 607.7
+473.94226 2050.5
+474.27243 1622.3
+474.60330 743.5
+479.94434 2682.4
+480.27789 1745.0
+480.61496 1352.7
+482.30765 35120.6
+482.64911 840.2
+483.31146 9055.0
+484.25970 5026.8
+484.31665 977.3
+484.59171 4944.1
+484.76355 1391.9
+484.92679 1374.8
+485.25897 1651.8
+491.27081 1797.1
+491.60709 2434.7
+491.94284 703.9
+492.27481 667.2
+494.27432 910.9
+497.27557 4106.9
+497.60919 4686.0
+497.94452 1094.7
+498.25836 2955.8
+498.76270 1739.2
+499.28690 7889.9
+500.28912 1961.6
+505.19870 514.4
+518.27911 899.5
+525.63806 1428.3
+525.97388 782.2
+526.30713 1285.3
+527.61237 13470.1
+527.94714 11706.4
+528.28107 6560.8
+528.61713 2389.6
+531.28448 532.0
+532.41266 628.8
+532.46356 1451.1
+534.97070 33065.9
+535.30475 35027.8
+535.63934 21328.3
+535.97357 8311.9
+536.30847 2480.0
+536.64362 1149.0
+541.33337 2141.9
+542.27533 854.7
+546.46777 607.6
+549.14270 594.0
+549.97302 2080.5
+550.30609 1172.6
+550.63715 1523.1
+555.97516 15641.8
+556.30945 17318.9
+556.64343 8809.8
+556.97961 3883.6
+557.31274 936.3
+559.63409 1117.9
+565.30676 40489.3
+565.64117 37776.3
+565.97498 28021.7
+566.30902 7378.4
+566.64197 3104.3
+595.34137 1122.3
+608.85345 2014.7
+609.35681 1684.0
+612.37048 27184.6
+613.37292 10450.4
+614.37512 1692.1
+628.36322 1920.8
+629.37531 740.3
+642.33807 1721.2
+665.38007 888.4
+669.86621 776.5
+673.36047 969.2
+673.86304 1450.2
+675.38702 1513.3
+675.88202 1029.1
+676.59180 1348.1
+681.39032 2356.7
+682.36639 63928.8
+682.86755 49885.3
+683.36896 25338.8
+683.86810 10436.9
+684.36517 1654.3
+699.40222 24323.3
+700.40607 9680.9
+701.41278 2198.9
+702.38788 951.9
+709.89368 2670.6
+710.39490 2007.0
+710.90051 15049.4
+711.40222 11479.7
+711.90308 5210.2
+712.40704 1826.3
+719.41388 5210.1
+719.91510 6023.0
+720.41760 2141.9
+722.40247 1050.2
+725.88391 4355.0
+726.38550 4075.7
+726.88538 1687.6
+731.11884 769.9
+736.40710 1891.1
+736.90204 1994.1
+737.40405 2032.8
+737.90533 783.3
+739.42444 3616.9
+740.42828 1216.5
+745.41095 74802.1
+745.91174 68250.3
+746.41376 32842.5
+746.91620 11313.8
+747.42102 2208.3
+755.39728 5956.8
+755.89923 7066.1
+756.40271 2246.4
+756.90375 1155.5
+777.41840 1004.4
+781.90948 3419.3
+782.40582 9272.2
+782.90637 5822.1
+783.40759 3326.6
+783.90552 965.8
+788.56610 727.7
+789.74585 661.3
+790.91553 146031.9
+791.41632 143885.7
+791.91693 81258.4
+792.41833 35646.0
+792.58179 895.0
+792.68335 653.2
+792.91821 9872.7
+793.41559 2004.8
+795.59686 821.4
+811.93542 1004.6
+812.43793 1701.2
+839.45294 853.8
+847.45648 22588.8
+847.95868 21782.5
+848.45917 12830.2
+848.96112 4882.3
+849.46674 1366.6
+854.43347 2697.8
+855.43604 977.7
+882.42651 1138.2
+995.51129 1143.1
+996.50745 1593.0
+1185.53259 579.2
+1188.10181 655.4
+1198.04053 3695.4
+1261.19055 575.3
+1470.61426 589.4
+1525.39941 874.7
+1681.15637 583.5
+1711.54822 699.9
+1878.61987 699.4
+1878.99280 1288.4
+1879.40393 20740.9
+1879.78601 1369.1
+1880.18896 717.4
+1906.65796 616.3
+1907.06201 7548.3
+1930.56482 1145.4
+S	2209	2209	488.2421121
+Z	4	1948.93715
+121.78930 146849.3
+132.04237 38628.8
+133.11124 46558.7
+137.12444 40799.6
+137.29597 39037.0
+138.36298 34963.4
+141.17551 37609.4
+141.22766 34315.9
+141.85049 44846.4
+149.76541 37202.2
+157.61353 40231.4
+158.51549 42294.8
+162.65662 40186.3
+165.77019 37369.9
+173.51117 31808.8
+177.15898 39912.1
+182.78850 37859.1
+187.94206 33950.1
+188.20345 41198.4
+188.22963 33632.7
+188.26108 80480.8
+188.27136 103253.5
+188.28387 120357.8
+188.30070 128371.5
+188.31450 79500.1
+188.33131 52653.8
+188.38428 38768.8
+188.43343 30030.3
+188.48074 30439.0
+197.70480 43337.3
+198.90445 45479.6
+199.18558 59340.1
+199.20451 49934.0
+199.25322 62317.8
+199.26736 54757.8
+199.28386 130563.0
+199.29460 92328.3
+199.30115 73555.5
+199.37938 66655.4
+213.24228 34695.9
+214.91733 36219.8
+216.07121 35300.0
+222.62582 39469.7
+234.12352 131088.2
+251.53429 41511.4
+261.08630 146732.1
+276.56509 40066.9
+277.14517 257778.7
+277.64832 45180.5
+278.11304 230563.5
+279.11624 45973.7
+285.63583 32272.3
+347.17886 40017.1
+375.12921 68915.0
+376.15985 48874.9
+378.28629 35084.3
+381.37531 55299.7
+391.87479 35225.9
+392.15411 44879.5
+415.73477 55275.6
+427.56372 47741.3
+429.72714 142388.5
+438.56259 55068.5
+448.21878 36996.5
+456.22891 117851.0
+464.90869 54075.7
+465.24326 54105.0
+465.31476 34634.2
+470.91254 819535.4
+471.24670 662163.7
+471.58063 302621.6
+472.47754 82064.4
+472.73059 128431.5
+474.97485 165828.0
+475.22443 312281.7
+475.47617 132779.1
+475.72107 72761.5
+477.17230 65502.4
+503.26239 45853.6
+510.37311 39881.7
+511.22629 44477.4
+513.93091 55859.6
+519.93457 216540.7
+520.26837 237087.8
+520.60345 62600.3
+522.19446 63692.1
+532.43665 107969.9
+532.49689 35709.3
+539.22449 75850.5
+540.36816 37025.0
+546.60089 57508.2
+546.93280 41222.7
+552.27417 122180.5
+553.28192 645898.6
+554.28442 211296.3
+557.95184 82166.6
+558.28479 63857.6
+579.46649 34077.9
+584.61316 51242.1
+584.94861 56436.0
+590.29242 47706.2
+590.61743 55252.1
+595.95178 41274.7
+599.61523 52037.6
+600.27301 46372.8
+630.43561 54095.8
+631.21692 36101.8
+657.33667 95723.3
+657.84106 70233.5
+658.34753 44381.6
+675.45343 33161.9
+676.60394 51837.1
+680.45569 37704.9
+696.86450 74684.4
+697.36096 67785.3
+698.83716 51186.6
+705.86505 1389492.9
+706.36682 1050919.1
+706.86816 480876.8
+707.37225 141038.5
+731.15314 43369.5
+742.87256 39068.0
+779.40112 74442.2
+779.90106 72792.5
+785.40472 45507.6
+795.60571 71896.0
+806.03363 38809.0
+828.41595 54652.6
+859.45331 42369.0
+875.25537 40668.3
+889.85510 39659.2
+1009.27332 34279.5
+1057.20166 63633.7
+1146.24841 41787.1
+1197.98315 167918.8
+1198.17139 32216.9
+1199.68359 40133.3
+1252.67310 36256.0
+1398.39001 31521.5
+1398.51416 32184.7
+1403.28943 38388.8
+1409.78333 49380.7
+1492.42114 35602.4
+1525.49365 54752.9
+1590.21143 38435.0
+1766.31311 40883.8
+1772.89771 39118.3
+1873.53577 38492.5
+1878.51050 37136.5
+1879.42395 1323078.8
+1907.06543 465025.7
+1907.68982 45421.1
+1918.88464 66796.3
+1944.17139 34725.3
+1964.35632 42152.0
+S	2210	2210	783.9790426
+Z	5	3914.85609
+207.88539 6225.6
+210.05965 5385.9
+220.69597 6139.4
+238.94250 7227.9
+240.88239 6172.4
+262.13281 6219.1
+262.88739 6587.0
+271.20450 7168.5
+329.22128 15010.5
+330.22549 6781.3
+332.45197 6863.4
+342.27692 9660.9
+345.21442 6757.2
+350.27725 8767.3
+355.71753 16492.3
+356.21725 8713.4
+361.34406 6285.4
+374.24289 21771.0
+384.23117 18192.7
+428.25674 6595.3
+433.76044 11138.5
+502.97903 6533.0
+507.17389 7693.4
+510.47702 6892.6
+512.22705 5983.1
+512.24701 6415.0
+514.31097 12749.3
+516.28400 6609.5
+532.42859 25183.1
+547.67578 6169.3
+552.96704 11916.2
+558.97101 7785.7
+605.23822 6696.8
+641.69861 8873.8
+647.38232 11506.2
+669.12231 11981.8
+676.61304 15539.5
+694.72742 6484.8
+701.01996 9525.7
+701.35229 7339.3
+702.12830 8114.1
+704.32288 7923.1
+705.73083 17018.6
+706.12952 10469.3
+706.34088 6812.9
+709.13348 67340.5
+709.33215 109284.7
+709.53278 139842.3
+709.73370 81467.3
+709.93445 60323.6
+710.13531 26056.8
+710.33917 18109.7
+710.42932 43443.6
+711.43335 26196.0
+715.91370 35262.6
+716.41528 28780.4
+731.74963 12324.5
+731.94281 23744.1
+734.94507 28863.1
+735.14331 33686.9
+735.34467 48652.6
+735.54474 31423.9
+735.74475 36492.7
+735.94696 23333.0
+736.33636 9680.6
+736.59827 12793.6
+738.54584 382215.3
+738.61218 6564.3
+738.74603 834073.6
+738.94672 868407.4
+739.14685 614632.4
+739.34753 384670.4
+739.54773 157599.0
+739.74902 67073.0
+739.94897 39216.8
+743.38184 11264.1
+743.71613 21291.8
+744.05304 9257.9
+744.38550 8268.7
+747.89990 49805.1
+748.40009 47192.7
+748.90149 24234.7
+749.38550 8899.3
+760.07666 6181.4
+761.10803 8340.1
+761.36798 8574.6
+764.35052 7639.2
+767.45044 66582.9
+768.45575 24114.4
+769.45355 7927.2
+772.84857 7666.6
+783.46698 7116.4
+795.59052 10908.6
+807.09143 7949.0
+815.38177 21391.8
+831.46857 7260.5
+831.89972 9132.9
+835.64258 19507.4
+835.89160 38751.8
+836.14166 44680.6
+836.39160 44285.5
+836.64044 16493.0
+837.94934 35152.1
+838.44983 34685.2
+838.95660 14669.9
+840.13922 10290.4
+840.39404 18779.7
+840.64569 24186.4
+841.14471 10896.6
+846.89032 9666.2
+852.89917 9028.6
+853.14355 9717.0
+853.39435 14563.2
+853.63788 11363.2
+855.68420 10666.2
+856.01923 8412.8
+857.65045 24646.9
+857.89551 20843.2
+858.04700 9488.7
+858.14990 16345.4
+858.39740 9188.1
+861.90289 33974.2
+862.15100 89971.6
+862.40070 92922.3
+862.65271 51846.5
+862.90179 29619.5
+864.08490 8366.7
+864.14996 8023.3
+864.42566 11700.3
+865.08777 10569.0
+866.52051 65803.9
+867.52032 27697.0
+868.52197 7535.6
+877.16034 32476.8
+877.40704 47448.6
+877.66058 69179.8
+877.91284 34513.0
+878.16412 27053.9
+878.40594 15409.6
+879.33295 7615.9
+881.52399 6881.6
+881.65924 33232.5
+881.91003 49670.5
+882.16260 56039.8
+882.41492 45016.1
+882.66199 25049.0
+882.91565 20893.5
+883.16919 8547.0
+883.70172 10328.3
+883.88141 9053.7
+886.16406 558378.3
+886.41412 1243629.3
+886.66486 1235231.6
+886.91443 946905.0
+887.16583 536769.9
+887.41522 182746.6
+887.66565 64414.5
+887.79895 9810.3
+887.91559 25776.7
+895.46350 14444.6
+895.95837 17727.6
+900.68079 8837.1
+904.04468 13540.3
+904.37701 27040.9
+904.70532 25865.1
+905.04120 14148.9
+908.11200 10899.8
+908.42676 13587.7
+911.35126 7724.0
+912.41766 9610.9
+914.17761 27386.4
+914.42786 45971.7
+914.67725 42053.7
+914.92456 25240.2
+918.43073 33358.6
+918.67957 96313.3
+918.92847 105362.7
+919.17761 87372.1
+919.42841 69199.4
+919.67780 29502.0
+919.94025 13082.3
+920.23840 9194.9
+920.48993 14108.5
+920.77460 8337.2
+921.11237 8351.1
+921.71808 11955.1
+922.21912 10865.5
+922.93091 1257603.8
+923.18127 2379154.0
+923.43127 2640404.0
+923.68060 2107997.3
+923.93060 1187193.8
+924.18127 559549.2
+924.43317 248729.4
+924.68512 106849.8
+924.94861 11685.0
+925.85297 11288.8
+926.12201 6870.9
+926.40424 13992.0
+926.65045 14058.3
+926.77228 35186.2
+927.10474 68472.1
+927.43774 55276.5
+927.77069 34851.3
+928.10162 9834.1
+928.44519 12356.8
+929.51013 8420.1
+934.88538 8164.5
+935.38202 9102.0
+936.39758 13965.8
+941.72498 12559.0
+942.06964 9903.7
+943.07373 11969.7
+951.45007 20299.6
+951.69543 18671.3
+968.99780 16537.8
+969.49524 14174.9
+970.00629 11764.6
+979.59711 16559.7
+980.61560 11267.4
+981.12445 50708.2
+981.45599 99289.0
+981.79346 110654.4
+982.12531 63191.2
+982.45551 24250.6
+982.79218 15210.3
+984.26233 8437.6
+1007.91394 14459.5
+1008.41437 23105.5
+1014.14551 34633.9
+1014.48053 53846.8
+1014.81293 53397.0
+1015.14948 48311.1
+1015.47845 15898.7
+1020.75665 9202.5
+1021.00897 8057.6
+1050.52295 15884.1
+1051.02209 18307.7
+1051.53931 13738.9
+1053.47595 9706.5
+1057.49609 30169.6
+1057.83032 35655.6
+1058.16138 27042.3
+1086.17041 29804.3
+1086.50500 59826.0
+1086.84106 56604.3
+1087.17529 46365.3
+1087.50244 20150.8
+1087.84167 14356.4
+1094.93225 7531.0
+1114.17395 10427.1
+1114.85083 9103.2
+1119.85010 38621.5
+1120.18774 48296.6
+1120.52515 72057.5
+1120.85767 48217.3
+1121.19080 38892.2
+1121.50720 9132.6
+1130.44336 11947.3
+1142.84741 9955.9
+1143.18945 14765.3
+1143.53162 18202.3
+1143.86536 13558.0
+1148.86536 64557.8
+1149.19934 90416.1
+1149.52991 126056.5
+1149.86731 86279.6
+1150.20361 43026.7
+1150.52747 14490.1
+1181.21667 17695.3
+1181.54883 44899.8
+1181.88647 32953.9
+1182.21777 26855.5
+1182.55420 12607.1
+1197.95276 35284.9
+1282.03467 9882.9
+1282.52368 14872.4
+1283.01892 9017.0
+1283.50427 12243.6
+1288.53125 7681.2
+1339.06445 13363.0
+1339.56042 12100.9
+1405.01526 7637.3
+1405.64087 7203.5
+1489.28687 6843.2
+1718.09949 9311.0
+1795.77649 6871.9
+1805.96460 7415.9
+1878.99731 6620.2
+1879.46228 224864.4
+1880.17078 8542.2
+1907.03308 83155.2
+1911.29883 6366.2
+S	2211	2211	1879.7988246
+Z	2	3757.75
+Z	3	5636.121
+532.42480 1075.4
+676.61731 926.3
+795.61139 1127.4
+858.07874 653.9
+906.96948 589.0
+1036.06946 619.1
+1188.19971 799.1
+1197.94495 3044.4
+1198.07642 842.8
+1317.65942 629.5
+1317.80884 579.7
+1493.55481 696.4
+1550.00256 612.3
+1679.37183 618.9
+1874.87610 772.3
+1877.58728 740.9
+1878.22986 883.2
+1879.46289 19889.2
+1879.75281 3829.2
+1880.38000 992.7
+1907.04077 7204.0
+1930.64661 1102.3
+S	2213	2213	488.2422646
+Z	4	1948.93776
+121.78045 747.2
+121.78710 2421.3
+121.96925 544.1
+131.55321 562.5
+132.94127 592.9
+134.63028 547.3
+135.44559 560.8
+136.07489 1306.9
+137.76128 555.6
+141.10162 550.6
+141.85147 656.8
+145.21706 566.9
+152.50606 644.1
+161.12079 560.3
+165.76534 907.3
+167.04572 648.6
+172.07545 3123.7
+175.08594 1639.4
+175.11894 1591.6
+177.51018 583.5
+178.60608 573.7
+180.44359 542.5
+183.92824 706.4
+188.20383 649.6
+188.25533 1105.5
+188.26950 1790.2
+188.27815 1923.5
+188.29013 1871.8
+188.30305 1734.0
+188.33768 943.1
+195.03966 796.2
+198.90338 811.8
+199.16254 548.4
+199.20894 833.4
+199.23515 1096.3
+199.25142 1001.5
+199.26631 1685.9
+199.28065 2721.8
+199.29185 1254.9
+199.37939 1021.6
+201.49692 583.9
+212.06598 955.1
+213.00867 741.0
+216.06551 1789.1
+217.09705 6374.9
+218.10016 1095.1
+219.07674 947.8
+229.09303 892.5
+233.09203 9773.8
+234.09569 1172.5
+234.12364 20874.2
+235.12698 2723.8
+249.15965 2301.8
+250.11871 918.4
+251.14915 663.4
+252.20065 600.9
+260.10294 1767.9
+261.08691 17491.3
+262.09064 2686.0
+262.11917 2024.7
+268.14035 4329.7
+268.64154 1239.9
+273.13736 651.4
+277.13135 1625.7
+277.14569 40431.8
+277.64728 11642.1
+278.11353 31098.3
+278.14789 1476.0
+279.11713 4377.8
+280.11893 1092.3
+280.18927 620.3
+291.65417 1181.0
+297.12378 1291.5
+301.12903 4022.7
+304.13605 555.2
+308.91150 659.9
+312.17795 4046.7
+314.15002 613.0
+316.83185 1660.7
+322.83478 5282.2
+323.16956 3273.1
+333.68759 3563.2
+334.13977 635.9
+342.10965 994.7
+347.13663 681.8
+353.72672 561.9
+354.52533 1143.0
+354.85858 983.1
+358.10611 681.4
+359.13550 2589.2
+359.18777 1629.3
+360.53030 5171.7
+360.86389 3510.8
+361.19925 836.2
+363.12531 597.1
+364.18439 879.4
+367.20529 2224.8
+373.18683 11995.9
+373.68872 5954.7
+374.14529 3692.8
+374.19107 1104.5
+375.13013 8385.9
+376.13364 1636.3
+376.16156 6773.8
+377.16354 1085.7
+380.16251 745.8
+381.19812 717.0
+381.37213 627.4
+384.38885 528.6
+386.14981 647.4
+392.15619 5761.1
+393.15927 1171.0
+396.20300 2841.9
+397.20950 1036.2
+399.20969 7498.3
+400.21289 1835.1
+403.83121 571.4
+409.55164 2535.1
+409.88684 3066.9
+410.21362 979.8
+410.45206 944.7
+414.21216 2410.5
+415.21948 3619.0
+415.73187 16875.0
+416.23312 9935.4
+416.73364 3215.5
+417.25296 604.6
+420.72397 3156.4
+421.22586 1215.7
+422.53561 616.2
+423.70618 720.3
+429.72855 20810.2
+430.23019 14574.7
+430.73196 4561.2
+431.23355 1048.8
+432.55890 2488.5
+432.72406 1170.6
+432.89053 893.0
+433.22733 1523.5
+434.37640 571.6
+436.88040 975.9
+438.22089 1601.3
+438.56284 9428.3
+438.89636 6466.1
+438.96469 1341.4
+439.23306 2235.7
+439.56290 1681.2
+445.24170 1227.9
+445.54523 911.3
+446.72241 1940.1
+447.22299 2298.4
+448.21005 640.4
+450.89178 4334.3
+451.22739 1915.2
+451.45923 678.9
+451.56052 1043.3
+456.23087 21888.1
+457.23450 5101.7
+458.23715 968.1
+458.90540 906.3
+459.16309 1063.5
+460.15045 1793.9
+463.72000 2396.4
+463.97079 1102.0
+464.21973 1158.2
+464.91013 13919.8
+464.96805 1189.4
+465.24335 9945.7
+465.57922 5282.7
+465.91150 1076.7
+467.97659 11465.3
+468.22617 13268.7
+468.47638 11183.8
+468.72568 6306.7
+468.97650 1670.3
+470.47433 2140.5
+470.72269 4600.4
+470.91357 90696.8
+470.97134 4141.4
+471.24753 71175.4
+471.58170 26018.6
+471.91629 6296.4
+472.24948 854.4
+472.47916 10519.8
+472.72968 8517.0
+472.98065 2371.9
+486.97903 597.0
+494.20334 2575.4
+495.20389 766.4
+503.26242 4878.4
+503.76407 3937.4
+504.18405 946.9
+504.27057 1073.8
+504.77441 738.0
+505.17175 1015.4
+511.22980 5601.7
+512.23230 2137.6
+513.05542 591.2
+513.93262 4959.8
+514.26556 3421.1
+514.60022 2246.9
+519.93591 24506.6
+520.27069 27752.2
+520.60480 13467.0
+520.93915 4814.1
+521.21490 912.9
+522.19684 5465.4
+523.19885 1202.1
+523.59418 727.2
+523.93115 801.7
+529.26154 788.0
+529.73956 1168.9
+530.23120 766.1
+532.26794 1078.4
+532.47540 1997.4
+532.59747 644.0
+535.27289 8367.3
+536.27789 2357.9
+537.77502 904.9
+538.27411 2359.4
+538.60876 819.5
+538.95032 658.6
+539.22406 11296.7
+540.22852 3469.6
+540.29144 6607.8
+540.59717 2591.7
+540.79114 5139.3
+540.92920 1751.3
+541.28345 2258.5
+543.74036 2082.9
+544.23621 1090.6
+546.29309 858.7
+546.60022 7965.3
+546.78583 1213.8
+546.93396 8088.8
+547.26758 3516.0
+547.60339 1514.4
+551.94873 1737.3
+552.27539 4756.1
+552.60938 5401.8
+552.74902 1155.1
+552.94263 2186.3
+553.28339 134964.8
+554.28613 41147.3
+555.28827 8159.1
+556.29578 906.6
+557.20569 1027.4
+557.95081 6904.8
+558.28412 6018.5
+558.61707 4160.5
+558.95502 1866.6
+560.28204 1345.1
+560.78943 842.3
+561.28687 972.2
+569.94629 861.7
+573.27484 756.1
+577.26642 1078.2
+577.78113 825.4
+578.60980 5918.2
+578.94415 5948.9
+579.27582 3631.5
+582.30267 8594.0
+583.30676 3354.9
+584.28461 2371.9
+584.61401 12146.6
+584.94855 10768.0
+585.28302 6168.9
+585.61499 1927.1
+586.28052 2542.0
+586.78314 1797.2
+587.28845 1201.4
+589.96606 1054.4
+590.28906 5591.3
+590.62305 3870.5
+590.95746 1166.6
+591.77380 803.9
+592.61316 673.4
+593.61731 1644.3
+593.94855 1367.9
+594.28577 1266.6
+594.61798 1036.6
+594.79498 1717.8
+595.29742 1294.3
+595.79669 834.5
+595.96472 3545.4
+596.29901 4496.8
+596.63379 1616.4
+596.96582 885.2
+597.62012 919.6
+597.95313 820.0
+599.29187 879.7
+599.62073 2534.0
+599.95624 4759.7
+600.28436 3627.9
+600.78351 1560.0
+601.27625 911.9
+602.22797 760.8
+603.28693 954.8
+603.62805 1359.3
+603.95929 869.9
+604.81854 649.3
+608.78955 1310.2
+609.29352 1140.8
+611.27319 2237.4
+611.76910 1478.0
+613.82385 11640.7
+614.32581 9451.6
+614.82697 3979.2
+615.32813 640.5
+616.26031 1332.4
+624.77435 1450.3
+625.26849 2313.8
+625.76703 1398.9
+630.43097 719.7
+633.29578 994.0
+633.78363 1009.2
+634.28333 1268.7
+642.29791 1967.7
+642.79803 1885.2
+646.36743 777.4
+648.33502 3446.4
+648.83612 4043.9
+649.33850 1327.7
+657.34021 28435.0
+657.84155 23550.5
+658.34265 7994.0
+658.84296 3091.1
+662.33252 4790.1
+662.83429 4067.5
+663.33606 2303.3
+665.33649 792.4
+666.36816 12757.7
+667.36945 5070.8
+667.81372 2425.0
+668.31439 2167.3
+668.81488 1580.3
+671.23688 988.0
+674.36469 1268.5
+676.32306 1127.4
+676.63928 1025.6
+676.82550 904.2
+681.32117 1122.9
+681.81506 1954.2
+682.31616 1438.7
+684.83966 2943.9
+685.33990 1849.5
+685.84363 1088.8
+686.94861 667.1
+687.85577 2377.5
+688.27026 780.4
+688.35907 2431.8
+690.32507 3097.0
+690.82471 2278.3
+691.32715 1008.8
+696.86176 15816.0
+697.36279 14916.1
+697.86487 7484.7
+698.36737 2035.5
+698.83478 4423.8
+699.33594 3267.0
+699.83966 2171.3
+705.29846 846.9
+705.86682 190324.4
+706.36774 168884.1
+706.43707 1559.1
+706.86865 81936.0
+707.37012 23806.0
+707.87134 6474.1
+708.36267 1163.2
+723.30853 773.6
+729.37427 2207.9
+731.14783 700.3
+745.36584 8959.2
+746.36975 4566.0
+761.39575 3549.7
+762.39734 2170.2
+767.36511 763.2
+767.85156 622.1
+770.40027 1015.0
+770.89771 902.2
+771.38477 770.6
+775.88098 1090.5
+776.37451 728.6
+779.40094 10838.4
+779.90222 12191.6
+780.40289 6290.0
+780.90613 1896.5
+781.40674 733.3
+784.39288 6619.4
+784.89429 7575.5
+785.39575 4323.8
+785.90161 1583.9
+795.60950 1161.1
+828.40710 1047.6
+829.43018 8396.4
+830.43066 4331.2
+831.43591 1002.1
+836.32098 890.0
+836.92285 719.6
+840.43347 1043.4
+841.90729 1055.0
+846.78412 624.1
+853.34900 1389.6
+854.36841 881.9
+855.25671 616.6
+858.44958 14406.0
+859.45184 8870.8
+860.45752 2317.4
+870.38708 952.6
+892.44019 1119.8
+923.40308 811.9
+966.49292 2294.1
+967.49573 777.9
+972.42041 1707.3
+973.42651 1606.6
+989.44788 803.2
+1005.51898 2436.4
+1006.51746 1347.7
+1007.52948 689.8
+1066.50146 597.9
+1068.74866 584.3
+1085.51794 1129.1
+1086.46082 1339.3
+1087.46375 1741.9
+1102.52917 788.0
+1131.48523 1111.7
+1132.49146 648.5
+1188.27966 842.8
+1198.06592 3375.0
+1199.55115 1126.3
+1249.50134 571.7
+1667.10840 679.5
+1718.67578 1346.6
+1871.08899 689.4
+1874.21436 990.8
+1876.15808 608.6
+1878.14624 1211.1
+1879.06018 1477.2
+1879.53638 19184.2
+1880.06860 1404.9
+1880.24695 1234.4
+1880.98145 970.6
+1907.05823 7347.7
+1918.94421 649.9
+S	2214	2214	783.9798346
+Z	5	3914.86005
+248.39342 6768.2
+264.93573 7740.2
+275.38773 7636.7
+291.41415 7522.6
+295.21884 8928.5
+306.35147 7025.0
+316.98419 7122.4
+327.66449 9026.5
+329.22296 23232.6
+343.66574 6972.8
+351.45624 8457.8
+368.35242 7460.3
+374.24326 16635.4
+377.16891 8128.2
+398.73654 8359.6
+427.56219 8213.5
+465.92905 8210.3
+493.26428 9735.2
+498.05792 7890.1
+526.25989 7243.2
+532.44257 27249.1
+562.05957 7537.4
+611.76984 7574.6
+630.15784 8221.0
+630.44830 11205.4
+663.46704 8817.3
+676.68146 12967.9
+701.01453 9494.3
+702.12897 7856.7
+709.12933 21426.9
+709.33191 43331.7
+709.53235 67485.2
+709.73407 31247.1
+710.13580 24010.9
+715.91614 19426.4
+716.41260 11285.0
+731.16992 7744.7
+733.14423 7639.5
+733.31921 10155.8
+735.14496 20372.7
+735.34448 34998.9
+735.54016 15371.9
+735.94537 16460.6
+736.58966 9036.3
+738.54504 225651.2
+738.74561 540780.9
+738.94635 575205.8
+739.14697 440969.2
+739.34729 250053.5
+739.54712 107505.0
+739.74872 52508.3
+739.94397 11480.3
+743.72626 10297.1
+762.77344 8571.4
+763.16840 11965.4
+765.92773 8108.3
+767.44757 18886.4
+814.31213 10895.6
+815.93378 8164.9
+835.64026 12926.9
+835.89270 17775.4
+836.13934 16177.6
+836.64233 13523.9
+837.95142 11063.9
+838.44897 13767.6
+840.39270 14481.0
+840.64856 12304.0
+853.14917 9443.3
+853.39966 10345.8
+857.89288 11795.9
+861.89648 15964.8
+862.14984 30918.4
+862.40100 56453.6
+862.65808 19133.9
+862.90057 15695.8
+866.51904 26020.4
+867.51483 16182.6
+877.41119 24777.9
+877.65851 32717.3
+877.90216 14869.4
+878.16028 14185.9
+878.64661 7592.0
+881.65619 16436.5
+881.91412 29216.6
+882.15839 22993.6
+882.41364 27062.2
+882.65668 23125.5
+882.91052 19585.5
+886.16339 349590.9
+886.41388 745072.3
+886.66437 753318.2
+886.91455 524129.1
+887.16559 320313.1
+887.41479 140006.3
+887.66864 37049.2
+887.92407 14975.6
+900.10883 12448.5
+913.92468 9899.9
+914.42328 13583.9
+914.67145 15999.0
+914.93201 12539.6
+918.42786 30304.2
+918.67700 45374.7
+918.92798 47533.5
+919.18152 42973.3
+919.42352 28527.1
+919.67352 13286.2
+919.92242 11331.2
+922.92999 711833.9
+923.18073 1505464.6
+923.28448 9793.0
+923.43115 1577394.4
+923.68066 1301819.4
+923.93085 671167.1
+924.18188 322014.2
+924.43231 113635.0
+924.68011 43925.0
+924.92072 8117.9
+926.15546 10401.7
+926.77472 16345.1
+927.10608 26900.7
+927.43042 13261.5
+927.77234 15664.6
+940.87695 12066.8
+969.48322 8822.9
+981.12378 15521.3
+981.45551 37416.5
+981.79279 27971.5
+982.12317 24836.0
+995.01935 8685.4
+1007.91833 16112.3
+1014.14349 17121.2
+1014.48407 27235.0
+1014.81427 27599.4
+1015.14575 15164.0
+1015.47449 10095.9
+1053.99805 9935.5
+1057.50964 12313.1
+1057.82458 11487.3
+1086.50098 27534.8
+1087.16870 12249.1
+1120.51843 28797.2
+1120.85828 18301.5
+1148.86682 25645.1
+1149.19641 40082.8
+1149.53357 55696.5
+1149.86475 46934.4
+1150.20520 22024.8
+1181.54663 15037.4
+1181.88293 32364.1
+1182.21826 11368.2
+1188.30640 10805.9
+1197.99146 44684.3
+1428.70691 8402.1
+1529.95154 8243.3
+1555.85986 9761.1
+1667.11853 8561.1
+1718.38818 14384.9
+1873.87634 11058.3
+1877.57825 8752.5
+1877.94678 9211.8
+1879.15173 31958.9
+1879.64709 239525.4
+1880.16821 30425.7
+1881.13843 7431.7
+1881.30640 7128.0
+1907.10681 88777.8
+1916.02905 10446.1
+1930.78003 10117.6
+1943.60767 8449.0
+1958.73071 8213.9
+S	2215	2215	488.9940746
+Z	4	1951.945
+121.78818 7298.9
+125.02959 1813.1
+137.79803 2150.9
+157.60513 2851.0
+165.76735 2427.0
+171.40860 2104.7
+172.07541 9820.3
+175.08714 4476.7
+175.11917 5558.2
+182.78574 2153.1
+188.26698 3885.6
+188.27602 3976.1
+188.28624 3270.6
+188.29880 2554.2
+188.31226 2253.5
+191.08066 3092.3
+195.03984 2452.0
+198.90086 2670.0
+199.18935 3194.4
+199.24731 2199.9
+199.26842 4249.1
+199.28676 5854.1
+199.29568 4861.0
+199.30646 4650.5
+199.36649 2329.8
+199.38445 2621.2
+200.10930 3228.7
+205.09473 2402.6
+212.06638 6032.4
+216.06601 8175.6
+216.11079 2258.9
+217.09723 18461.4
+218.10066 2571.2
+219.07616 5652.2
+229.09390 4251.4
+233.09203 39736.6
+234.09604 5182.1
+234.12364 89316.6
+235.12672 11525.2
+245.12860 3517.1
+249.15984 12036.0
+250.11798 5462.6
+251.15039 2630.5
+253.13622 2315.8
+260.10291 8135.6
+261.08694 70025.0
+262.09030 8166.0
+262.11838 9969.8
+268.14056 19739.9
+268.64200 3259.9
+277.12958 9037.6
+277.14566 177600.8
+277.64716 46698.6
+278.11349 132277.3
+278.14789 7070.3
+279.11707 17788.0
+280.18619 2877.1
+291.65466 4533.9
+292.15710 2270.5
+297.12045 2387.9
+299.52243 2251.6
+301.12933 12859.2
+308.90399 2647.3
+312.17770 15152.3
+314.11401 3541.0
+314.56693 1788.1
+316.83154 7003.1
+320.02832 2044.9
+322.83456 20130.0
+323.16959 11663.8
+323.68884 2982.2
+332.15891 2696.4
+333.68814 10217.0
+334.18918 2703.0
+341.12231 2815.6
+342.10773 6820.0
+346.39142 1987.8
+354.52515 4494.1
+359.13495 6134.5
+359.18579 4988.1
+360.52908 20880.1
+360.86493 9048.3
+364.18198 4495.3
+367.20764 4279.6
+373.18683 36023.9
+373.68799 18171.6
+374.14639 12534.7
+374.18973 5439.1
+375.13013 31610.5
+376.13306 5683.6
+376.16135 28364.4
+377.16382 4736.7
+379.17194 3318.5
+380.16040 3246.7
+381.19995 3245.8
+381.36346 2653.5
+390.20193 2900.5
+392.15643 22328.5
+393.15793 4267.7
+396.20273 11366.8
+399.20908 27778.4
+400.21255 3125.3
+406.21530 2019.9
+409.55255 17774.8
+409.88730 6854.0
+410.22025 3349.1
+410.45197 3467.5
+414.21320 9966.6
+415.21964 10990.0
+415.73236 61035.3
+416.23312 29862.4
+416.73389 8289.7
+420.72415 15248.5
+421.22781 5664.2
+429.72876 83615.9
+429.95651 2408.5
+430.23016 50124.8
+430.73242 14946.7
+431.23630 4127.8
+432.55853 8149.7
+432.72699 5719.6
+432.89432 3541.7
+433.22546 3593.7
+438.22006 5221.5
+438.56302 34191.5
+438.71368 4406.2
+438.89731 17034.1
+439.23251 11281.4
+439.54675 4782.2
+439.87418 3439.7
+440.38385 1966.1
+443.95932 5499.2
+445.22281 3114.5
+445.24161 3763.8
+445.54214 2513.4
+446.72043 6904.6
+447.22412 6731.6
+447.72803 2786.0
+448.21841 2696.7
+448.46698 2203.3
+450.89288 18500.9
+451.22684 8616.2
+451.56161 4529.4
+456.23083 79459.9
+457.23428 13317.4
+458.23651 3498.3
+458.90536 7679.7
+459.16595 3254.8
+459.24033 5253.4
+460.15222 5439.2
+463.72083 6882.8
+463.97278 3491.6
+464.22375 4599.8
+464.91006 53426.9
+465.24438 33617.5
+465.57861 14808.1
+465.91364 4537.9
+467.97672 36353.0
+468.22607 47685.0
+468.47656 38065.8
+468.72604 17079.0
+468.97604 5945.3
+470.23105 2824.1
+470.47299 10879.8
+470.72180 11694.8
+470.91364 346345.6
+470.96942 15714.3
+471.24756 251429.1
+471.44180 2488.5
+471.58182 87273.2
+471.78040 2361.4
+471.91589 18457.3
+472.24652 3075.0
+472.47916 50952.9
+472.72958 26861.3
+472.98129 6297.4
+490.16873 2406.0
+494.20297 10560.1
+494.25842 6201.7
+499.30197 2784.9
+503.26257 21753.2
+503.76395 11831.3
+504.26776 6617.6
+505.17099 2433.9
+508.25369 2533.6
+511.22903 26239.8
+512.23334 7820.4
+513.93317 21009.5
+514.26782 13174.5
+514.60077 7167.0
+514.93628 3442.8
+519.93616 137644.6
+520.27057 105794.3
+520.60461 55184.6
+520.93896 17503.6
+521.21240 3527.2
+521.27484 2931.3
+522.19727 19007.8
+523.20032 3547.9
+523.26257 4917.2
+523.59534 4189.4
+523.93512 2962.7
+529.73761 3208.4
+530.23645 2925.5
+531.94110 2207.0
+532.37225 1899.8
+532.45374 4656.6
+532.49902 2697.2
+535.27295 27673.6
+536.27728 7384.7
+537.77295 5979.2
+538.24512 1823.5
+538.27753 5519.5
+539.22412 47003.4
+540.22772 13390.2
+540.29028 29680.0
+540.59668 7316.8
+540.79211 19689.6
+540.93011 6817.3
+541.28992 6524.9
+543.23810 4324.6
+543.73523 5451.6
+544.23773 6006.1
+544.74469 4302.6
+546.29260 5560.6
+546.60046 28786.4
+546.79065 3626.8
+546.93353 27819.5
+547.26642 11888.0
+547.59924 2951.7
+549.16138 2304.5
+551.77472 4161.6
+551.94611 7644.1
+552.27600 25650.3
+552.61188 14680.7
+552.74329 3010.0
+552.94348 8633.3
+553.28333 495689.4
+554.28619 141409.1
+554.66461 2678.8
+555.28857 23966.2
+556.29163 3028.7
+557.94995 35380.3
+558.28442 29465.7
+558.61859 12326.6
+558.95422 5296.9
+559.28839 3193.4
+560.28320 8802.6
+560.75909 3512.6
+561.28632 4193.9
+561.61975 3104.1
+570.28717 2318.4
+572.93646 3057.0
+577.77258 2172.7
+578.61029 30391.1
+578.94336 25492.2
+579.27759 10544.4
+579.61389 3600.8
+582.30237 29603.1
+583.30774 10411.6
+584.28455 8764.7
+584.61438 46893.0
+584.94806 40561.6
+585.28265 20894.4
+585.61694 6580.1
+586.27930 8568.3
+586.78186 6160.1
+587.28625 3752.6
+590.28906 20505.6
+590.62329 12690.7
+590.95691 8571.4
+591.77460 4443.7
+592.30890 2183.2
+593.61603 5810.9
+593.94983 6234.8
+594.27917 4060.8
+594.79224 3949.8
+595.29559 5812.9
+595.96417 18723.7
+596.29919 15998.8
+596.62939 6917.5
+597.61719 3967.8
+597.95441 3952.4
+599.29504 2658.0
+599.62140 14604.4
+599.78839 3632.8
+599.95502 10034.0
+600.28473 10408.5
+600.61249 2857.3
+600.77899 7332.6
+601.27777 3185.6
+602.22394 2406.3
+603.28595 3244.6
+603.62756 5251.5
+608.78979 6575.6
+609.29401 3411.0
+611.26874 4963.4
+611.77283 5208.8
+613.82330 36923.1
+614.32587 28954.4
+614.82794 10037.5
+615.32996 3905.3
+616.26495 3589.8
+617.30048 3411.0
+618.81335 2856.5
+625.27063 5365.0
+625.77142 4284.3
+628.28766 2901.0
+633.78265 6394.8
+634.28784 3672.6
+634.77924 3808.9
+642.29279 8639.7
+642.79578 6037.7
+648.33661 11933.8
+648.83881 10345.4
+649.34125 4016.1
+657.34039 120956.5
+657.84167 75876.3
+658.34302 37637.0
+658.84747 8984.3
+662.33258 23789.9
+662.83386 16818.7
+663.33282 6665.5
+666.36768 45185.5
+667.37024 14545.2
+667.81323 9675.0
+668.31567 12165.7
+668.37585 2589.2
+673.31091 2555.5
+674.36353 4451.4
+676.33276 2844.5
+676.66699 2450.8
+676.82562 2934.8
+681.32098 3928.9
+681.81415 10623.9
+682.31317 6777.9
+684.84003 10885.3
+685.34106 9405.1
+685.84052 3328.8
+687.85687 6395.3
+688.35852 5407.3
+689.82727 3221.1
+690.32697 13339.6
+690.82361 10142.2
+691.32190 2346.0
+696.86200 63363.1
+697.36334 52695.6
+697.86462 25322.3
+698.36664 6201.9
+698.83722 18370.1
+699.33868 14453.6
+699.84058 5810.4
+703.87781 3229.2
+704.38818 2688.7
+704.54321 2540.2
+704.88623 2743.9
+705.29352 5909.1
+705.86707 777043.3
+706.36792 646153.9
+706.86877 279754.8
+707.36987 81856.3
+707.87329 20068.1
+707.99670 2378.4
+723.30255 2721.7
+729.36884 5463.9
+730.37756 2877.4
+733.38751 2288.5
+743.38617 5451.9
+745.36633 32395.6
+746.36847 13933.0
+747.37109 3226.3
+760.12860 2342.3
+761.39679 10127.5
+762.40015 8961.6
+763.40283 3603.4
+767.87604 2244.9
+770.39819 3911.6
+770.89899 3050.4
+775.39392 2822.9
+775.87512 4113.0
+776.36768 4896.7
+779.40070 50728.1
+779.90186 45561.8
+780.40375 19494.6
+780.90778 5844.4
+784.39355 35911.3
+784.89532 29939.8
+785.39624 8802.6
+785.89655 4108.7
+828.41003 3121.6
+829.43097 35243.6
+830.42987 10706.0
+832.90198 3036.4
+836.32227 2911.2
+840.43500 3196.7
+841.41040 3479.9
+841.91675 4311.2
+853.34589 6091.6
+854.36243 2587.0
+858.45013 61765.0
+859.45367 30502.4
+860.45477 10297.2
+870.37372 3523.5
+892.43842 4749.3
+966.48883 6196.5
+967.50391 2887.7
+968.44623 3378.5
+972.42517 7323.5
+973.43890 3471.3
+989.44836 2437.9
+1005.51886 10463.8
+1006.52734 5140.7
+1085.51013 3685.9
+1086.46350 6936.8
+1087.46497 5764.4
+1102.53125 2834.0
+1121.67200 2677.0
+1131.49341 3578.8
+1132.48999 4044.4
+1140.50867 2295.1
+1198.00488 8178.0
+1199.54346 4883.1
+1200.54675 2787.7
+1258.41907 2037.0
+1293.35657 1733.1
+1455.19324 1924.4
+1717.96960 4191.1
+1766.63354 2158.8
+1767.62415 2516.3
+1877.89355 2806.1
+1878.80090 3694.5
+1879.01819 3090.0
+1879.58728 60175.6
+1880.21521 4603.1
+1880.56055 3542.8
+1880.88538 2352.1
+1881.32275 3259.9
+1905.78931 2489.8
+1907.08582 24419.2
+1907.38525 4188.3
+1930.61963 2969.1
+S	2217	2217	488.2517271
+Z	4	1948.97561
+120.67345 8780.5
+121.78738 37902.8
+127.59673 9789.2
+136.07526 18762.9
+162.98424 8412.0
+165.76614 11768.3
+168.48087 7782.8
+171.22034 7996.2
+175.12016 8641.0
+177.84297 7666.8
+188.24861 20736.8
+188.27631 32947.6
+188.28484 30954.0
+188.29802 29047.1
+188.31505 22928.1
+188.33072 14480.6
+192.61438 7906.6
+195.03810 8108.5
+198.90431 13050.4
+199.00774 8604.8
+199.18733 8488.3
+199.19711 9629.3
+199.23799 10040.0
+199.26198 15227.0
+199.27397 35536.1
+199.28532 18720.2
+199.29309 18727.7
+199.30835 12243.1
+199.36971 16930.6
+199.46336 8740.5
+216.06607 12618.4
+217.09689 31529.9
+233.09181 54632.9
+234.12346 146504.3
+260.10223 12654.0
+261.08676 110256.9
+261.49246 7788.7
+262.09125 18198.5
+262.11807 14734.7
+267.40179 8167.9
+268.14081 19863.5
+268.64133 12888.6
+277.14529 248953.3
+277.64694 47807.4
+278.11319 238078.2
+278.35324 7902.3
+279.11694 31007.6
+285.26639 11352.7
+297.32449 8313.4
+309.55740 8786.8
+312.17767 14541.1
+322.83383 19145.8
+323.16818 18742.6
+324.68307 7282.8
+339.31122 8107.9
+350.28378 11295.2
+360.52969 37496.1
+360.86255 19676.8
+369.68167 30016.4
+370.18393 14056.5
+373.18622 38345.6
+373.68918 15494.1
+374.14597 30919.3
+375.12924 54399.2
+376.16083 39886.6
+377.16611 10696.8
+378.99063 9856.3
+392.15546 42189.8
+399.21051 24550.5
+409.55402 11704.8
+415.22046 20362.9
+415.73199 50542.1
+416.23160 26034.7
+417.23389 10772.7
+418.96381 13031.6
+420.71609 10624.7
+429.72861 114518.0
+430.22867 33602.8
+438.56238 48514.9
+438.89697 43238.5
+439.22852 17015.5
+447.22559 11629.3
+448.52573 8597.0
+450.89120 23059.9
+452.02655 8468.8
+456.23096 108069.3
+457.23474 17878.6
+464.91010 59180.7
+465.24484 64090.7
+465.57748 17939.6
+467.97287 22568.4
+468.22321 41178.4
+468.47409 38900.8
+468.73062 15323.8
+470.47223 15177.5
+470.72256 28537.7
+470.91312 785108.6
+470.97220 26263.0
+471.24731 553867.9
+471.58176 202290.1
+471.91486 36075.0
+472.47876 177425.4
+472.72955 172149.9
+472.98044 90548.4
+473.23145 36623.4
+473.47992 14096.6
+474.72617 30480.7
+474.97595 138940.0
+475.22562 83570.0
+475.47586 49044.1
+475.72977 10312.5
+477.17734 18653.7
+482.96167 8793.3
+494.19919 18524.3
+499.32828 9465.8
+503.26321 37920.6
+503.76172 16509.5
+505.17560 15409.9
+511.22949 43424.8
+513.93085 27537.5
+514.26654 35112.7
+519.93536 231930.1
+520.27008 211248.1
+520.60486 55833.7
+520.93958 17698.9
+522.19696 38025.1
+523.20923 12125.4
+532.48541 28066.1
+535.27307 25687.9
+537.77051 13371.8
+538.77936 9231.2
+539.22430 64543.9
+540.22467 24557.9
+540.28986 37648.1
+540.79279 26430.6
+540.93103 11916.2
+541.58661 8478.0
+546.60022 33547.3
+546.93427 44429.2
+547.26666 14148.5
+551.77240 19240.3
+552.27661 63737.0
+552.60876 29665.2
+552.94202 13826.6
+553.28278 593650.6
+554.28595 155441.5
+555.28876 21427.4
+557.95007 76139.1
+558.28546 41002.6
+558.61938 14189.1
+560.28406 11679.2
+578.60944 41713.7
+578.94275 42108.6
+579.27545 15188.4
+582.30499 19914.1
+584.28235 20158.9
+584.61438 67462.0
+584.94690 58592.1
+585.28149 27970.7
+585.61475 17845.9
+590.28882 51920.7
+590.62128 30947.9
+590.95306 12057.0
+591.28937 9373.8
+593.61639 13207.3
+594.29675 8517.2
+595.29736 11377.8
+595.96417 27036.8
+596.29736 47192.3
+596.63641 14952.0
+599.62024 28450.3
+599.95160 23539.1
+602.23621 9120.7
+603.63110 10448.9
+603.96454 7823.4
+613.82404 46211.1
+614.32465 28983.6
+614.82025 10510.9
+625.26062 16016.5
+625.76288 10614.3
+642.29242 15910.4
+657.33990 97927.3
+657.83966 82834.2
+658.34375 36456.7
+662.33319 18025.1
+664.21960 12140.8
+666.36859 46875.5
+667.36584 25481.1
+673.06378 9587.7
+676.70313 16776.9
+684.84082 16785.4
+685.33508 9363.7
+689.20221 7762.9
+690.32397 15081.6
+690.83093 15170.0
+696.86115 68479.1
+697.36255 58508.3
+697.86359 27900.3
+698.83740 34762.3
+699.34131 18513.7
+699.84283 12770.3
+705.86639 1140370.4
+706.30365 8815.7
+706.36774 797590.9
+706.86847 352404.7
+707.37036 83107.8
+707.87610 16159.9
+729.36401 9678.5
+731.14160 13108.7
+745.36505 27056.9
+746.37329 11553.1
+756.36182 20552.8
+773.48688 9580.9
+779.40125 66943.0
+779.90027 50534.1
+780.40344 20831.8
+784.39575 47966.2
+784.89172 25221.1
+796.16071 9108.6
+829.42926 29216.7
+830.43427 14219.0
+837.36682 8732.5
+853.34119 14517.3
+858.45245 57577.0
+859.45349 23325.5
+980.82068 8742.8
+1005.52502 13872.9
+1131.47778 13233.7
+1140.47314 14515.6
+1195.14539 9648.5
+1195.43628 9282.3
+1198.08008 46753.1
+1508.92688 8326.0
+1530.53870 8952.7
+1716.83496 17336.3
+1765.43945 10134.8
+1877.71509 11966.9
+1878.47607 24203.9
+1878.80127 19066.0
+1879.17542 24954.4
+1879.29199 27971.9
+1879.71460 263420.6
+1880.41809 34434.0
+1880.85046 18551.1
+1881.24939 14384.3
+1881.74475 13730.3
+1906.48962 15027.6
+1907.06775 112574.0
+1907.42395 9506.8
+S	2218	2218	783.9944226
+Z	5	3914.93299
+213.90674 522.8
+215.56738 555.5
+222.52486 596.6
+224.22195 543.4
+255.06503 556.2
+264.67554 632.1
+271.39355 587.1
+271.51840 617.4
+271.98376 636.7
+282.23386 674.6
+306.19461 666.4
+315.46814 579.5
+317.69070 711.8
+323.30026 688.5
+342.27563 731.3
+350.28024 897.8
+377.31329 618.2
+393.51242 648.6
+427.54285 868.4
+451.94650 648.0
+461.24487 1024.3
+472.27737 721.0
+532.44598 1945.4
+561.94550 575.6
+626.24304 620.3
+634.10223 640.5
+635.32745 885.5
+647.17151 646.9
+648.48029 559.1
+674.30365 842.8
+676.64783 1240.5
+691.66473 1075.7
+691.99493 2357.2
+692.32593 1343.6
+705.32806 605.6
+706.97632 728.6
+709.13196 1870.8
+709.33118 3232.2
+709.53400 2689.6
+709.93317 1163.0
+711.73322 644.6
+715.91309 928.1
+716.41351 1112.2
+729.88916 652.0
+733.95007 689.9
+734.94489 907.9
+735.14514 1584.3
+735.54004 1152.7
+735.94391 957.9
+736.33655 672.4
+738.54553 15776.9
+738.74567 33425.9
+738.94659 22286.1
+739.14709 15051.3
+739.34796 7958.9
+739.54633 2665.2
+746.88959 1169.4
+747.38922 907.8
+747.89917 2296.6
+748.39520 2032.8
+761.39081 829.3
+761.82697 1007.8
+762.37244 1333.3
+763.36932 1028.2
+763.86475 802.4
+763.95514 1032.9
+765.29657 837.5
+765.39661 1308.5
+766.15381 1537.8
+766.62561 1397.4
+795.30682 685.4
+795.59436 1348.9
+796.07550 658.5
+805.50232 690.4
+809.57391 861.9
+810.48590 766.4
+811.46912 1105.9
+814.04523 986.6
+814.27130 580.5
+814.57813 671.6
+815.77502 747.3
+820.35583 689.9
+821.90161 897.5
+822.74487 871.4
+826.33795 747.9
+835.66937 698.6
+836.30621 858.2
+837.94916 832.3
+838.48621 630.4
+856.45453 2229.9
+857.63843 942.8
+861.59222 715.2
+861.89960 2228.1
+862.15253 2538.6
+862.39923 2202.9
+866.51416 1217.7
+867.52319 931.8
+877.15625 977.1
+877.41058 3489.9
+877.66150 1202.9
+881.64990 992.5
+881.91083 1585.9
+882.16254 2663.6
+882.40491 1309.0
+882.66376 1142.9
+886.16290 24145.6
+886.41333 45960.5
+886.66443 37482.5
+886.91339 18814.4
+887.16614 10037.8
+887.41681 3271.0
+894.39508 771.0
+895.86066 779.5
+896.11041 811.1
+904.38953 780.0
+916.44373 701.4
+918.42780 2052.2
+918.67816 3518.1
+918.92804 2694.3
+919.17944 3184.4
+919.42249 799.5
+919.67554 889.6
+922.92993 54253.0
+923.18073 98931.1
+923.43091 78664.4
+923.68079 44570.4
+923.93066 20479.9
+924.18231 9596.2
+924.43713 2207.1
+927.10315 1518.6
+927.43347 1083.3
+940.37030 843.2
+948.47919 815.2
+951.46832 1041.1
+981.11841 1458.9
+981.46265 1091.9
+981.78986 1438.4
+1008.39832 823.7
+1014.47986 1250.5
+1018.01093 1329.1
+1018.51569 1166.2
+1019.00684 1163.1
+1059.05176 769.6
+1078.63379 722.8
+1086.50720 775.7
+1119.86133 1367.9
+1120.17639 1199.7
+1149.19348 2163.2
+1149.53467 1585.4
+1149.87146 848.5
+1181.21790 827.4
+1181.88635 1271.6
+1197.99402 3358.8
+1525.40881 884.0
+1745.04517 765.5
+1774.01965 662.3
+1878.64111 915.2
+1879.06458 2374.6
+1879.55872 19703.1
+1880.04761 1946.0
+1880.45007 934.9
+1907.04248 7496.6
+1918.91492 826.0
+1930.59155 1161.5
+S	2219	2219	489.0030746
+Z	4	1951.981
+120.74544 565.9
+121.78682 2227.1
+121.79652 669.7
+123.71855 643.1
+125.02222 510.5
+128.99675 535.4
+137.29242 566.3
+138.65848 601.4
+140.25377 567.3
+168.82054 619.9
+169.49599 764.3
+170.41432 553.2
+170.63759 493.5
+171.63741 687.9
+172.07541 3025.3
+175.08659 1326.6
+175.11909 1957.4
+188.01787 570.6
+188.25520 914.2
+188.26474 1181.2
+188.27190 942.8
+188.28445 1148.6
+188.29680 1145.4
+188.30472 1185.5
+188.31181 896.4
+188.32434 559.9
+190.63014 568.3
+191.11821 1363.5
+192.24312 535.5
+195.03960 1003.2
+199.19197 738.2
+199.27296 1532.3
+199.28137 1023.2
+199.29034 1645.9
+199.29404 1735.6
+199.31400 939.2
+199.38651 976.7
+200.10844 775.5
+212.06694 1890.0
+216.06618 2176.6
+217.09729 6460.5
+219.07648 915.7
+219.11316 871.0
+229.09294 1110.4
+233.09215 11328.3
+234.09581 1539.5
+234.12372 25410.3
+235.12703 2996.0
+238.70021 672.5
+239.37077 594.9
+249.15993 3377.2
+250.11874 1159.5
+260.10306 2182.1
+261.08704 21674.4
+261.10669 590.6
+262.09048 2944.5
+262.11859 3271.0
+266.76733 581.0
+268.14035 5835.2
+268.64243 2016.0
+273.13495 1447.9
+277.14572 53354.2
+277.64722 14596.2
+278.11365 35820.8
+278.13351 661.4
+278.14914 2246.7
+279.11725 4887.9
+280.19067 806.2
+291.65573 1776.7
+297.12274 667.8
+301.12943 4511.2
+302.13202 949.9
+308.90720 720.2
+312.17789 4285.6
+314.14874 877.4
+316.83304 1346.0
+317.16565 747.1
+320.15939 1200.6
+322.83487 5825.0
+323.16855 2949.7
+323.50458 1078.3
+333.68814 1741.6
+334.19138 614.3
+341.12573 856.8
+342.10892 2186.9
+346.14020 926.8
+354.52557 1641.1
+358.10239 1268.5
+359.13443 2629.8
+359.18741 1050.3
+360.53021 4594.4
+360.67902 911.5
+360.86411 2941.0
+361.19699 755.5
+364.18271 1211.7
+364.63327 635.5
+365.18976 729.3
+367.20685 1082.4
+369.68188 18269.8
+370.18359 8528.3
+370.68518 1965.0
+371.18680 648.6
+373.18686 14347.1
+373.68832 7026.7
+374.14557 3779.8
+374.18997 1266.9
+375.13000 10240.0
+376.13458 1483.0
+376.16171 8734.4
+377.16589 1406.6
+379.17160 989.8
+381.20038 1294.7
+381.36444 594.4
+392.15640 6855.8
+393.15945 1079.5
+393.22418 4429.8
+394.22906 1205.5
+396.20309 3269.2
+397.20667 748.5
+399.20917 8523.0
+400.21320 1114.7
+403.54910 1191.0
+404.15552 673.1
+406.72803 873.4
+409.55157 3697.1
+409.88669 3264.2
+410.20242 1049.5
+410.45230 1367.0
+411.16489 1131.9
+414.21304 3727.3
+415.21884 4132.5
+415.73196 19557.5
+416.23370 9037.6
+416.73508 3474.5
+417.17514 720.3
+419.19736 4739.6
+419.69952 2692.5
+420.19977 711.4
+420.72360 4531.3
+421.22556 2057.2
+421.71033 798.4
+423.70761 817.6
+427.55307 969.8
+429.72861 31684.2
+430.23032 17575.5
+430.73215 6314.8
+432.55936 1758.8
+432.72406 1288.9
+432.89462 1734.4
+433.22839 834.4
+434.46347 926.8
+436.20892 817.8
+436.54987 782.4
+438.22086 1273.6
+438.56299 6850.2
+438.71262 1725.3
+438.89737 6854.4
+439.23193 2109.3
+440.21121 697.8
+443.21634 6787.5
+443.71768 3910.2
+444.20737 1015.1
+445.24377 1840.5
+445.54678 1716.3
+446.72296 1920.6
+447.22739 1050.6
+448.46884 1150.2
+450.89075 2577.1
+450.95557 778.1
+451.22751 3333.0
+451.55832 1107.5
+456.23087 25992.4
+457.23422 4575.9
+458.90704 1582.0
+460.14987 1477.2
+461.15170 825.2
+463.71985 1317.9
+463.97235 1791.9
+464.91037 13256.7
+465.24454 10874.9
+465.57864 5447.8
+465.91171 1418.7
+467.97632 10899.6
+468.22617 17199.5
+468.47604 8443.1
+468.72687 5942.7
+468.97745 1591.3
+469.73022 4011.3
+470.22891 1660.6
+470.47382 3580.8
+470.72211 3692.9
+470.91373 90579.8
+470.97327 3555.8
+471.24768 57509.7
+471.44305 631.9
+471.58203 17863.6
+471.91660 3013.3
+472.47864 5522.0
+472.72906 3687.3
+472.98083 777.8
+494.20181 3290.6
+494.25735 1133.3
+495.20975 1008.2
+503.26321 7141.4
+503.76477 3736.9
+504.26630 1603.0
+505.16782 1157.5
+510.68900 755.6
+511.22928 7395.0
+512.23334 1529.8
+513.93182 5320.6
+514.26660 3641.0
+514.60150 2175.2
+517.26068 1109.6
+519.93628 38213.4
+520.27075 33443.1
+520.60492 15153.4
+520.73615 566.2
+520.93866 5228.7
+521.20978 1178.6
+521.27478 1176.0
+521.92059 740.8
+522.19678 6345.5
+523.20135 1991.9
+523.26282 1632.2
+523.93317 1241.3
+527.30353 856.3
+529.73859 1837.4
+530.23920 1041.4
+531.93622 1089.7
+532.46716 2057.5
+535.27271 10140.9
+536.27661 2447.8
+536.69879 592.1
+537.77301 1490.2
+538.27325 2695.5
+539.22491 13655.2
+540.22858 3619.1
+540.29071 16014.5
+540.59503 1909.7
+540.79089 6603.4
+540.83917 563.4
+540.85132 502.2
+540.93140 2756.2
+541.29065 3897.9
+541.79736 603.2
+543.23956 881.0
+543.73621 1924.9
+544.23730 2162.5
+546.29688 1655.6
+546.38153 612.7
+546.60095 6919.4
+546.78790 1901.8
+546.93463 7300.3
+547.26782 3253.9
+547.60272 1900.7
+549.16254 743.7
+551.77405 1403.4
+551.94733 2207.7
+552.27582 6407.2
+552.60974 5341.7
+552.94507 2982.9
+553.28351 164144.9
+553.96503 760.1
+554.28638 44250.1
+554.66718 896.3
+555.28882 7780.4
+556.29333 933.4
+557.95093 11863.3
+558.28497 9924.9
+558.61719 3587.3
+558.95844 866.5
+560.28339 1541.6
+560.76636 1191.5
+560.78497 1284.4
+561.61328 1354.8
+564.24615 1117.0
+564.30029 678.3
+565.83282 624.1
+573.27057 856.1
+574.22229 904.4
+577.27856 1320.5
+578.61023 6778.4
+578.94427 6309.4
+579.27905 3026.8
+582.30219 9662.7
+583.25806 1005.3
+583.30872 3562.8
+584.28394 3406.3
+584.61444 13570.3
+584.94836 12920.8
+585.28314 5637.5
+585.61505 2027.0
+585.78741 576.3
+586.28125 3744.8
+586.78363 1409.9
+587.28363 916.1
+589.96204 1456.0
+590.28986 4778.6
+590.62439 4937.0
+590.95685 2439.3
+591.61798 843.0
+591.78052 859.0
+592.28168 1682.3
+593.61816 1071.4
+593.95349 1808.8
+594.28351 1691.9
+594.79376 1870.3
+595.29712 1644.4
+595.96423 5200.1
+596.29871 4196.4
+596.63153 1815.2
+596.96906 2014.4
+597.61804 1418.6
+597.95209 807.0
+599.29370 1468.7
+599.62219 4028.7
+599.78674 1032.7
+599.95380 4078.9
+600.28436 3028.6
+600.78113 2216.8
+601.28223 752.1
+602.22083 880.5
+603.29126 1683.9
+603.62592 1425.2
+605.31818 822.2
+608.79028 1726.8
+609.29364 1028.8
+609.78406 671.9
+611.27350 1862.0
+611.77118 1794.5
+612.27887 983.8
+613.82428 11974.7
+614.32550 9366.9
+614.82629 3922.1
+616.26276 958.5
+617.30023 778.6
+618.80530 795.6
+624.77869 1160.6
+625.27191 2087.9
+625.77417 1637.4
+626.26807 879.6
+628.30286 726.5
+633.29266 1171.3
+633.78149 2570.9
+634.28772 1192.3
+642.29675 2634.8
+642.79761 3209.9
+643.29437 926.6
+648.33661 3504.5
+648.83533 4039.8
+649.33276 1100.6
+655.31952 3645.1
+656.32306 1427.5
+657.34027 31585.3
+657.84155 26783.7
+658.34253 11061.3
+658.84851 2221.5
+662.33179 5607.4
+662.83490 5348.4
+663.33575 2555.3
+666.36804 16563.2
+667.37000 5111.2
+667.81311 4003.4
+668.31659 2274.2
+668.37408 1068.0
+669.31866 793.7
+674.36823 1658.7
+676.33051 1258.5
+676.66425 1131.2
+676.82758 1138.7
+677.33948 665.3
+681.31555 1372.4
+681.81232 2603.6
+682.31354 2372.7
+684.83911 2705.3
+685.34283 2431.4
+685.84161 1434.5
+687.85712 2698.2
+688.35541 1706.4
+689.83710 1188.6
+690.32587 3938.3
+690.82587 2219.3
+691.32166 1065.2
+696.86200 20973.4
+697.36316 17274.4
+697.86462 7457.3
+698.37085 2340.2
+698.83643 6384.8
+699.33765 3985.8
+699.83972 1816.4
+703.88373 1145.6
+704.89337 1089.6
+705.29614 1113.6
+705.86694 238887.9
+706.36792 198470.8
+706.86853 82247.0
+707.37006 27951.8
+707.87085 4852.1
+708.37439 999.3
+711.41119 581.0
+723.30780 801.7
+729.36987 2299.0
+738.35651 1175.6
+739.36456 666.3
+743.39838 863.2
+745.36621 11639.9
+746.36841 4365.8
+747.36945 1239.0
+756.36682 10939.2
+757.37048 5699.4
+758.35907 740.6
+761.39697 3960.7
+762.39862 2206.3
+770.39581 886.8
+770.89209 1217.0
+775.38092 1121.7
+775.87659 1428.1
+776.37415 1432.2
+779.40082 14887.5
+779.90186 13626.8
+780.40417 7630.7
+780.90070 1209.2
+784.39441 9275.5
+784.89441 8180.7
+785.39374 3738.5
+785.89984 1105.3
+788.55878 685.2
+808.34430 800.8
+813.84448 734.5
+819.39325 897.3
+828.41241 780.0
+829.43127 8442.9
+830.43353 3570.6
+832.90521 1005.7
+836.32501 1449.0
+837.38184 1497.9
+838.38708 910.4
+841.91455 1049.3
+853.35126 1717.3
+858.45007 19671.5
+859.45270 11300.6
+860.45874 2703.7
+870.37512 1389.7
+892.43298 1685.1
+935.86206 621.9
+949.41138 698.6
+966.49097 2273.7
+972.42450 2747.7
+973.42255 1439.7
+989.44537 857.2
+1005.52002 3271.5
+1006.52728 1656.8
+1057.27576 631.5
+1068.46008 807.6
+1085.50586 1102.8
+1086.45837 2013.1
+1087.45227 1167.5
+1099.58716 763.9
+1119.55518 773.9
+1131.48926 1549.7
+1132.46387 563.5
+1198.03784 3427.8
+1199.54333 1008.0
+1200.55237 881.0
+1236.59973 917.1
+1249.55542 695.8
+1408.27100 619.1
+1520.01587 660.3
+1659.12378 617.4
+1664.48975 569.9
+1872.07495 578.3
+1876.72668 678.9
+1877.99805 809.0
+1878.30835 1051.4
+1879.17004 2745.9
+1879.60461 19081.8
+1880.05261 2784.0
+1880.90625 865.3
+1881.74316 916.1
+1907.04724 7668.7
+1930.61011 1016.8
+S	2221	2221	488.2428446
+Z	4	1948.94008
+120.83852 591.1
+121.78732 2252.2
+128.72667 679.3
+130.02551 655.8
+136.07568 808.0
+139.13696 588.1
+154.54770 532.0
+161.00160 531.2
+165.38905 784.3
+167.04485 657.4
+170.74361 554.5
+172.07541 1960.0
+175.08647 1351.8
+175.11844 2095.7
+183.90637 559.0
+186.31528 567.3
+188.17615 615.2
+188.21803 852.6
+188.24095 732.9
+188.26106 1005.5
+188.28026 1081.2
+188.30540 801.2
+188.31944 656.5
+188.32814 621.5
+188.33887 648.9
+191.08136 848.6
+191.11763 5630.8
+192.12070 889.1
+195.04034 714.4
+198.90340 927.7
+199.20879 715.2
+199.21628 524.1
+199.25978 855.6
+199.27184 659.2
+199.28180 1602.2
+199.29492 1190.5
+199.30496 1894.6
+199.34850 639.9
+199.37927 867.0
+199.40549 763.3
+199.42679 757.8
+203.99776 664.9
+204.89081 594.1
+212.06680 957.3
+216.06410 1012.2
+217.09717 4765.7
+219.07683 885.0
+219.11290 2476.4
+229.09157 1143.6
+233.09174 7146.1
+234.09425 844.7
+234.12355 16741.1
+235.12749 2531.5
+246.15564 3063.5
+248.03326 598.7
+249.15915 1710.1
+249.82024 573.0
+250.11839 1071.6
+251.15005 738.3
+251.97406 631.5
+260.10260 2080.9
+261.08682 15220.7
+262.09042 1373.4
+262.11856 1601.6
+268.14014 3616.9
+268.64169 1068.8
+277.14557 33705.5
+277.64697 9809.6
+278.11343 24482.3
+278.14850 1498.1
+279.11691 3881.0
+280.11655 675.3
+291.65256 573.7
+301.12927 2456.6
+312.17703 3013.1
+314.11469 665.1
+316.83176 1068.5
+317.16586 575.6
+319.83923 559.0
+320.16010 1629.5
+322.83493 5265.8
+323.16968 2346.7
+333.68762 2121.7
+346.13989 3186.5
+354.52481 1164.1
+358.14780 755.8
+359.13574 2125.5
+359.19009 1531.9
+360.52921 4239.8
+360.67703 1278.3
+360.86371 2227.1
+361.17822 791.3
+364.18054 618.4
+367.20850 1036.2
+369.68167 63184.5
+370.18326 29325.3
+370.68466 7571.0
+371.18784 1372.4
+373.18646 9099.8
+373.68808 3662.1
+374.14542 2991.0
+374.19009 979.5
+375.13022 6720.3
+376.16138 4925.7
+377.16327 925.5
+379.17654 895.4
+386.21945 593.4
+392.15604 4390.0
+393.22421 12534.1
+394.22754 2600.3
+396.20245 2669.5
+399.20844 4862.2
+400.21140 686.6
+403.54868 708.9
+409.55234 2778.2
+409.88544 1981.4
+410.21017 768.2
+410.45209 1013.7
+414.21246 2156.0
+415.21899 3435.2
+415.73224 9557.5
+416.23352 6369.6
+416.73520 1282.3
+417.17566 3417.9
+418.18008 1119.4
+419.19763 13793.3
+419.69882 7829.5
+420.20023 2247.1
+420.72269 3827.8
+421.22607 1870.6
+429.72852 19294.5
+430.22998 10073.6
+430.73114 3982.2
+432.55817 1591.3
+432.89240 1464.0
+434.21188 942.5
+434.46326 857.7
+435.18539 1345.5
+436.87827 655.3
+438.17557 653.1
+438.22025 1104.8
+438.56247 8065.7
+438.71613 968.4
+438.89682 5111.1
+438.96417 899.0
+439.23138 2074.7
+439.54248 1587.9
+439.87463 1168.2
+443.21564 16095.6
+443.71722 10780.9
+443.95773 753.4
+444.21881 3220.1
+444.71826 1012.2
+445.54285 797.9
+446.71967 2335.2
+447.22684 1120.6
+450.89233 1998.1
+451.22644 2306.9
+451.56244 1440.1
+452.21515 671.4
+456.23090 17273.8
+457.23599 3569.4
+458.90622 1017.3
+459.23837 1209.0
+460.14902 746.5
+463.96945 1225.4
+464.26407 614.1
+464.91040 8303.7
+465.24442 7875.0
+465.57867 2957.6
+467.97659 7531.4
+468.22589 12564.2
+468.47659 8835.6
+468.72525 3581.8
+468.97778 1295.6
+469.72845 8662.7
+470.23105 4838.6
+470.47314 2765.2
+470.72379 3228.6
+470.91330 76920.9
+470.97098 1802.2
+471.24728 59144.6
+471.58148 21232.7
+471.91550 3310.3
+472.47891 9844.0
+472.72986 10320.5
+472.98001 2717.8
+486.87451 602.6
+494.20084 2281.8
+494.25491 1383.6
+494.75931 845.6
+503.26245 4817.6
+503.76367 2733.1
+505.17404 925.2
+511.22964 4594.3
+512.23279 1226.6
+513.93146 3472.3
+514.26746 3231.7
+514.59760 1451.6
+519.93616 23622.5
+520.27063 18631.9
+520.60394 10463.5
+520.93842 3314.1
+522.19745 3935.1
+523.20062 1154.9
+523.26410 749.5
+523.59772 892.5
+529.73535 817.3
+531.27991 855.7
+532.48999 2220.2
+534.73102 658.3
+535.27332 7349.2
+536.27698 1852.1
+538.27179 1789.7
+539.22418 10407.9
+540.22778 2428.3
+540.29144 21770.7
+540.59387 1839.5
+540.79095 3773.1
+541.29425 6815.3
+542.30060 889.9
+543.74060 2183.8
+544.23627 961.3
+546.26251 925.8
+546.59998 6218.3
+546.78821 771.0
+546.93390 6742.4
+547.26776 3984.7
+547.60132 1121.4
+547.94196 705.6
+549.17175 679.7
+551.75671 719.1
+552.27747 3950.5
+552.60895 3460.1
+552.94299 1884.6
+553.28308 113025.4
+553.96552 871.3
+554.28601 28978.6
+555.28638 4745.8
+557.95135 5731.2
+558.28455 5172.3
+558.61865 2504.5
+560.28296 1410.5
+564.24170 2885.0
+564.29230 792.9
+565.24890 1607.8
+566.24805 549.9
+572.61060 902.1
+573.26636 672.7
+578.60986 4231.4
+578.94324 3962.8
+579.28046 1495.7
+582.25446 2046.4
+582.30310 7137.1
+583.30664 2328.2
+584.28107 1575.2
+584.61414 10711.3
+584.94800 9306.3
+585.28235 4888.4
+585.61566 1696.4
+586.28076 1905.4
+586.77911 1722.9
+589.95197 589.1
+590.28998 3347.6
+590.62335 4369.9
+590.95740 2295.1
+591.27679 684.4
+593.27765 990.9
+593.61713 1518.1
+593.94745 1300.1
+594.27911 1036.8
+594.79407 1314.5
+595.29871 1505.8
+595.96411 3938.1
+596.29797 2938.0
+596.63538 1599.0
+596.96179 786.6
+597.94916 845.3
+599.62152 1943.6
+599.95581 2412.8
+600.27734 2475.4
+600.77649 1666.5
+601.27130 923.9
+603.29199 1105.8
+603.62512 846.4
+603.96277 920.1
+605.13617 551.2
+608.79071 1317.2
+611.26630 705.4
+613.82404 10237.5
+614.32532 6235.6
+614.82593 2404.5
+619.78644 894.0
+624.76654 664.7
+625.26636 2028.3
+625.77051 798.7
+628.29004 887.4
+628.79706 719.8
+633.28473 928.6
+633.78156 1115.9
+634.28571 1117.7
+637.83386 631.4
+642.29352 1454.8
+642.79498 1932.8
+643.27124 589.1
+648.33392 2631.4
+648.83545 2457.3
+655.31897 10944.9
+655.94110 624.3
+656.32172 4024.7
+657.33990 22224.3
+657.84045 16631.4
+658.34332 7159.4
+658.84131 1918.5
+662.33136 5257.9
+662.83197 2832.4
+663.33575 1222.0
+666.36707 9923.7
+667.36975 3160.2
+667.81055 1843.1
+668.31372 1443.7
+673.31226 627.2
+676.32550 894.7
+676.67328 805.1
+676.82623 1075.9
+681.80975 2184.9
+682.31573 1739.5
+684.84357 2941.4
+685.34143 2184.9
+685.84863 841.6
+687.85156 1566.1
+688.36151 1078.8
+690.32245 2638.2
+690.82233 2054.1
+690.98010 579.0
+691.33002 1048.3
+695.31720 1321.1
+696.86121 14494.8
+697.36243 13198.6
+697.86365 4258.8
+698.36658 1496.5
+698.83459 3693.2
+699.33844 3734.7
+699.83380 1326.5
+704.88440 938.9
+705.29840 1189.5
+705.39282 589.4
+705.86633 165728.0
+706.36737 129764.9
+706.86871 58151.2
+707.37048 14777.9
+707.87018 3641.9
+708.36664 1202.9
+711.31165 1388.5
+711.39069 642.8
+712.30707 991.3
+729.35754 1652.5
+731.14154 649.0
+738.35620 3576.6
+739.35828 2085.2
+745.36578 7061.4
+746.36780 3275.1
+753.22119 715.9
+756.36670 29375.4
+757.36859 16040.9
+758.37158 4934.9
+761.39740 3227.9
+762.39606 1494.1
+766.35144 1100.9
+767.35852 937.4
+767.88123 698.8
+770.39319 695.2
+770.89801 1105.1
+775.87323 893.3
+776.87610 950.3
+779.40088 10118.5
+779.90076 9069.0
+780.40417 4440.2
+780.90448 822.3
+782.34564 1988.2
+783.34894 888.0
+784.39331 6285.9
+784.89362 5014.7
+785.39575 3075.6
+801.36584 849.7
+819.39789 775.1
+827.90277 741.7
+829.43079 6540.2
+830.43115 2516.4
+837.38519 5577.8
+838.38940 2720.0
+858.44971 11488.9
+859.45087 6846.5
+860.45551 2377.2
+885.43707 665.2
+886.42755 942.2
+892.43634 950.8
+966.48138 1412.7
+972.42688 1594.6
+973.43158 908.7
+989.46051 829.5
+1005.52161 1987.9
+1006.53931 995.0
+1011.36298 636.7
+1071.78748 596.3
+1085.51721 797.5
+1086.45886 1065.4
+1087.46423 889.6
+1119.56519 1132.7
+1188.09070 780.8
+1198.09058 3177.5
+1199.54297 787.2
+1228.60596 655.9
+1306.25171 813.9
+1667.11572 772.6
+1775.65649 737.7
+1871.68665 587.5
+1879.18298 4223.1
+1879.63623 18425.0
+1880.05957 4471.4
+1880.56921 607.5
+1881.76514 778.9
+1906.71619 975.4
+1906.99817 7067.6
+1909.91492 782.2
+1943.36633 605.1
+S	2222	2222	1879.9378246
+Z	2	3758.028
+Z	3	5636.538
+532.44867 2013.0
+561.43683 647.5
+601.75800 588.9
+676.62598 772.6
+698.12787 675.6
+795.60535 1041.2
+796.98309 666.3
+818.14734 685.6
+919.81006 634.9
+1198.00085 3601.0
+1421.96021 606.1
+1531.51587 733.8
+1627.13135 610.8
+1752.92993 597.4
+1777.01880 673.5
+1778.73389 681.1
+1870.11682 930.6
+1876.29419 815.9
+1878.41980 812.8
+1878.93164 1388.5
+1879.18652 3422.0
+1879.49658 19549.4
+1879.82007 3158.8
+1907.06360 7440.7
+1907.46228 776.2
+S	2223	2223	516.5381346
+Z	4	2062.12124
+132.47067 552.6
+147.56143 572.5
+165.76746 658.6
+184.02025 617.9
+185.11465 1071.2
+188.25900 862.4
+188.26671 995.9
+188.27943 1067.7
+188.28763 1200.1
+188.29353 1204.4
+188.30382 877.6
+188.30711 923.0
+188.31702 783.1
+189.70976 556.2
+194.46935 592.3
+198.90286 696.8
+199.17302 698.1
+199.25192 1208.0
+199.27028 1696.0
+199.27846 816.7
+199.28712 2019.8
+199.30261 1562.7
+199.31694 1009.2
+199.36757 687.0
+199.38522 800.0
+207.90468 625.9
+218.60707 538.5
+234.56598 539.5
+240.41306 585.8
+244.09348 642.4
+249.14532 616.5
+250.02660 513.4
+255.28439 600.6
+271.31439 549.7
+271.67761 626.8
+272.17245 1001.0
+273.33163 549.3
+324.85507 522.6
+341.20175 583.8
+350.20566 2024.6
+350.70645 935.9
+351.21292 957.5
+369.22366 39414.1
+370.22787 6687.0
+390.78073 549.2
+396.21259 720.8
+427.53085 821.5
+427.71582 573.6
+435.27045 960.0
+435.73834 610.0
+447.22379 561.8
+455.24707 5145.9
+455.58182 4674.8
+455.91394 1882.3
+482.30750 5549.9
+483.31293 1297.7
+484.25662 1596.9
+484.59073 951.8
+497.27249 710.6
+499.28491 1947.0
+517.51147 616.6
+522.00836 527.5
+527.61139 1510.6
+527.94525 901.8
+532.42090 2429.8
+534.97003 4940.9
+535.17871 635.5
+535.30396 4422.9
+535.63977 906.4
+555.97333 2706.2
+556.30505 1533.7
+556.64063 1180.6
+565.30682 5216.0
+565.64069 5524.0
+565.97455 2285.4
+612.36963 4304.4
+613.37402 1256.5
+637.87738 1062.7
+651.12463 600.8
+676.62201 1410.3
+682.36420 10300.8
+682.86609 8540.1
+683.37061 3299.0
+699.40234 3015.8
+700.39655 1127.6
+710.89954 1858.8
+711.40375 1843.0
+725.88342 1140.5
+726.38336 1019.3
+736.39240 708.9
+736.90625 845.1
+745.40985 9918.4
+745.91052 10160.4
+746.41241 4191.1
+755.39050 1073.4
+781.90753 1072.8
+782.40887 1981.9
+790.91406 22536.5
+791.41547 24034.3
+791.91565 9223.9
+792.41730 1089.1
+847.45618 3434.8
+847.95569 2670.7
+848.45880 1707.0
+898.61267 624.9
+910.07855 564.6
+925.30475 666.7
+967.96490 492.1
+979.64679 685.7
+1018.53717 650.0
+1021.07837 536.5
+1021.12329 542.4
+1044.00269 566.5
+1097.58875 615.2
+1110.83813 564.0
+1147.33533 647.4
+1151.49744 572.0
+1197.93506 3473.5
+1525.43103 881.3
+1777.06885 687.9
+1808.54297 618.8
+1808.73132 565.9
+1854.60681 618.9
+1876.22803 758.2
+1878.96008 1693.4
+1879.21387 2692.9
+1879.48975 20002.7
+1880.03308 1530.5
+1880.70801 972.7
+1905.43494 627.8
+1907.06042 7103.5
+1907.36230 770.5
+1930.52881 933.9
+S	2225	2225	1879.9358246
+Z	2	3758.024
+Z	3	5636.532
+532.47351 2041.7
+533.39630 589.5
+533.95770 680.7
+544.02448 624.7
+596.73511 647.6
+630.40088 1047.1
+665.64661 579.8
+676.65338 826.3
+691.06604 578.9
+698.66821 559.0
+731.11084 677.6
+744.16223 675.0
+815.09796 819.1
+868.33887 892.3
+906.11334 635.1
+990.92859 551.3
+995.00543 717.4
+1139.86914 546.5
+1198.06580 3208.6
+1355.29102 646.0
+1359.11694 580.5
+1583.44946 605.1
+1710.21716 633.0
+1878.13635 1169.9
+1879.29272 4010.9
+1879.57385 18320.1
+1881.37463 620.0
+1907.09644 7209.7
+1908.66138 642.9
+1918.82764 913.7
+1930.56750 1028.1
+S	2226	2226	487.9923246
+Z	4	1947.938
+121.78792 2362.1
+125.04121 615.5
+125.91206 584.4
+126.65473 606.2
+127.55113 518.7
+128.87129 513.4
+132.96291 619.8
+140.33246 527.2
+147.96443 703.6
+152.55406 492.4
+165.76668 888.6
+171.18649 558.2
+171.51686 618.7
+173.78387 669.4
+175.11873 2009.9
+181.21309 519.5
+181.60831 593.8
+188.21634 632.1
+188.23552 526.6
+188.27084 2289.2
+188.28810 2325.8
+188.29622 2198.1
+188.33130 787.0
+188.42682 611.8
+188.80409 546.8
+188.95551 537.3
+191.11751 13055.5
+192.12173 715.9
+196.59248 588.2
+198.23743 639.7
+198.90230 833.4
+199.07216 1032.7
+199.17955 577.2
+199.20355 817.2
+199.22633 666.1
+199.26817 843.8
+199.27652 985.6
+199.28316 1304.5
+199.29419 1719.5
+199.32513 1056.3
+199.39410 561.5
+199.39729 571.9
+199.41728 542.0
+199.42261 565.3
+206.47943 585.2
+219.11224 7282.7
+220.11646 744.8
+234.12395 2250.7
+240.09492 843.7
+246.15549 6916.3
+251.79503 539.4
+261.08685 1064.3
+277.14474 2576.7
+277.64703 806.7
+278.11304 2674.5
+286.66315 629.2
+292.68243 570.7
+320.15985 6495.9
+321.16324 1145.2
+322.83588 673.9
+325.86182 541.1
+342.27185 686.7
+344.40475 612.9
+346.13907 8147.4
+347.14316 1451.7
+348.99249 615.9
+359.23944 2209.8
+360.52673 612.2
+360.67572 5813.1
+361.17715 1060.3
+369.31348 790.1
+369.68124 145388.7
+370.05243 1196.2
+370.18262 56022.8
+370.30530 604.9
+370.43588 793.1
+370.68408 9034.7
+375.13004 764.9
+378.68600 3225.1
+379.18771 807.0
+393.22342 27771.4
+394.22705 4799.5
+399.21033 986.3
+415.72998 1361.6
+417.17615 8063.7
+419.19705 37451.8
+419.69846 16801.8
+420.19940 3310.5
+421.75827 605.3
+427.54318 1119.7
+429.72977 1173.2
+430.22873 1224.3
+433.24744 599.1
+435.18668 3784.0
+443.21487 43871.4
+443.71658 19094.3
+444.21747 4525.7
+450.89047 784.0
+452.21957 3361.5
+452.71906 1139.3
+455.21631 977.2
+455.71625 740.0
+456.23447 1028.7
+456.72293 1117.1
+457.20966 743.0
+459.49918 619.5
+463.80109 609.9
+464.91205 1214.8
+466.45981 596.7
+469.72818 25426.7
+470.23056 10132.2
+470.26990 2730.1
+470.46875 1303.1
+470.73392 2372.7
+470.91293 11032.4
+471.24750 7844.1
+471.58072 2161.0
+471.91565 783.1
+472.47739 2108.1
+472.72736 1734.9
+472.97284 739.8
+474.97818 928.3
+519.93738 2245.7
+520.26935 1824.8
+532.43408 1925.0
+536.24841 692.2
+539.21997 859.6
+540.29114 33973.6
+541.29468 9266.2
+542.29541 864.5
+544.26190 592.0
+544.82672 726.2
+545.25165 807.3
+549.15375 939.0
+553.28229 9380.6
+554.28754 1911.5
+564.24353 8894.9
+565.24640 2161.5
+569.96741 1237.0
+570.30194 1415.9
+578.60925 1034.5
+582.25415 4499.0
+583.25726 1122.6
+584.60754 670.1
+584.94586 1045.1
+593.27948 1392.2
+593.78253 671.5
+594.27960 919.0
+598.81116 2342.5
+599.31049 2310.6
+604.30920 612.6
+627.36456 641.4
+630.40460 709.6
+655.31775 24246.3
+656.32129 7464.8
+657.33844 1962.6
+657.83978 952.7
+658.34045 1144.7
+666.36652 1188.6
+668.98096 637.6
+676.65295 1265.3
+680.33752 1177.7
+681.36066 710.1
+695.31146 2785.7
+696.86145 1632.6
+697.35132 884.7
+705.86603 16668.0
+706.36749 12139.5
+706.86920 4248.3
+707.37451 1244.3
+708.64258 565.4
+711.31226 3460.0
+711.37970 881.0
+712.31116 1248.6
+729.32336 2562.0
+731.12360 805.2
+738.35522 10754.7
+739.36005 3357.0
+740.36346 922.9
+756.36530 78317.6
+757.36859 27409.8
+758.36896 4459.7
+766.34961 3026.5
+767.35522 1880.9
+769.70575 655.2
+779.40045 914.7
+781.87933 669.4
+782.34918 4861.4
+783.35321 2073.2
+800.36066 1980.0
+801.36938 930.4
+829.42938 866.0
+837.38605 10862.9
+838.38855 4445.5
+839.38806 1182.9
+885.42004 1424.0
+886.42755 932.9
+1140.28857 840.5
+1197.97156 3796.6
+1248.49121 777.6
+1471.81897 599.4
+1712.51147 650.3
+1715.13159 611.0
+1777.00244 804.0
+1792.05872 629.6
+1835.18982 578.7
+1845.53491 654.9
+1870.08386 855.8
+1878.42065 1075.2
+1878.68066 942.5
+1878.93091 979.1
+1879.31042 3583.6
+1879.56494 19233.6
+1880.19751 1679.4
+1889.97522 717.5
+1907.05750 7659.1
+1930.58545 1076.8
+S	2227	2227	516.5388671
+Z	4	2062.12417
+131.35719 1451.4
+132.88194 1419.8
+138.14723 1624.4
+149.36113 1577.0
+151.18373 1643.5
+157.60248 1421.9
+163.58109 1614.0
+169.49765 1641.1
+178.67906 1527.4
+180.04735 1910.2
+180.56116 1442.4
+185.11519 3274.6
+187.19583 1649.5
+188.25868 2161.3
+188.26906 2563.4
+188.27603 2512.9
+188.27946 2319.9
+188.29343 2777.1
+188.30077 2721.5
+188.30927 2023.2
+191.28580 1406.3
+192.38989 1422.9
+198.90561 2297.4
+199.17903 1915.4
+199.19164 1986.6
+199.25986 3451.9
+199.27585 4394.1
+199.28952 6338.7
+199.29782 1891.0
+199.30742 2518.5
+199.37308 3362.6
+211.56937 1503.7
+231.30443 1602.1
+232.84338 1647.3
+233.57735 1609.8
+245.48479 1510.9
+272.17123 6748.7
+272.42572 1840.8
+280.18375 1683.3
+308.90970 1999.4
+320.00974 1408.1
+327.20358 2775.7
+336.20801 3518.8
+336.70984 2266.8
+341.19916 3851.3
+342.27179 2000.7
+350.20462 17745.9
+350.70639 6214.2
+351.21332 4960.1
+352.05942 1719.5
+353.49429 1823.3
+366.83978 1504.7
+367.08456 1479.2
+369.22360 216706.7
+370.20340 2090.0
+370.22754 36720.6
+370.71832 1778.4
+371.22763 1923.2
+390.04532 1387.3
+396.21399 2867.9
+424.69214 1638.0
+427.55246 2380.6
+427.72021 4031.6
+441.71683 2982.6
+448.17987 1546.4
+450.10849 1394.8
+452.75467 1936.7
+455.24707 32334.8
+455.58151 28046.0
+455.91507 7268.3
+456.25201 1526.7
+482.30670 30766.2
+483.31155 3827.1
+484.25833 2897.3
+484.59088 5073.4
+497.27875 1971.8
+497.61102 5000.2
+498.25848 2932.8
+498.29419 1513.2
+499.28552 8699.5
+500.28650 2292.2
+500.39600 1342.4
+527.61115 4607.2
+527.94983 2675.4
+528.27209 2240.7
+532.44342 4652.4
+534.96979 21552.8
+535.30402 29478.1
+535.63837 12182.3
+535.97040 4142.0
+555.97443 8437.6
+556.30817 12510.9
+556.64240 5565.3
+556.98041 2576.2
+558.75110 1992.1
+565.30640 26781.9
+565.64020 28231.9
+565.97479 19297.4
+566.30817 3780.4
+573.98706 3210.4
+593.30042 1545.6
+612.36334 22976.8
+612.66144 18583.0
+612.99554 9400.9
+613.37225 8621.9
+622.02155 1607.7
+629.42279 2161.8
+634.82605 1589.2
+642.42267 1866.6
+665.36780 1771.8
+676.62689 2335.1
+682.36542 59866.9
+682.86658 51545.3
+683.05054 1534.1
+683.36823 21332.5
+683.86469 4941.3
+686.88477 1724.3
+699.40131 19255.9
+700.40454 7858.9
+702.54071 1599.2
+710.90021 10276.9
+711.39984 13273.6
+711.89886 2067.8
+712.40411 1976.4
+719.41547 2744.1
+719.90912 2519.5
+725.88379 5028.4
+726.38098 4186.6
+726.88318 2902.3
+731.14075 1750.7
+736.90399 3265.1
+737.40790 2060.5
+739.42261 2142.7
+745.40991 55203.1
+745.91119 57989.6
+746.41333 25519.8
+746.91443 6064.7
+755.39557 2636.2
+755.89514 4127.0
+781.91260 5445.1
+782.40747 7194.0
+782.90558 5602.5
+790.91418 117882.5
+791.41534 123653.6
+791.91632 59654.1
+792.41711 19590.6
+793.76782 1672.2
+799.87683 1645.2
+811.94025 2077.1
+847.45642 15733.2
+847.95819 16780.4
+848.45648 9534.1
+848.95959 2562.5
+854.42401 2792.8
+868.36188 1414.4
+887.34912 1615.7
+1045.22241 2581.5
+1170.83142 1419.3
+1187.54187 2189.9
+1188.10156 2022.8
+1197.99438 8299.3
+1310.43311 1467.5
+1474.70764 1752.4
+1525.44604 2420.0
+1639.93591 1510.0
+1837.42126 1683.0
+1870.28284 2154.5
+1877.84741 2394.0
+1878.91321 3820.0
+1879.51099 52131.7
+1879.96082 2843.3
+1880.38782 2248.4
+1906.39685 1956.7
+1907.05042 20276.3
+1918.81897 1760.0
+1930.66638 2316.3
+S	2229	2229	1879.8968246
+Z	2	3757.946
+Z	3	5636.415
+513.85803 555.8
+532.41992 1889.8
+611.16779 712.3
+613.49359 656.7
+676.63843 1095.0
+715.34094 740.9
+731.16724 651.2
+795.61279 926.8
+902.28259 765.0
+1047.87109 608.3
+1057.24719 893.2
+1197.93176 2945.2
+1525.50525 814.6
+1542.56372 657.0
+1860.07666 811.4
+1876.05859 848.1
+1878.26904 830.1
+1879.04431 758.2
+1879.54187 19908.4
+1884.63696 690.2
+1907.03308 6773.8
+1930.67419 804.0
+S	2230	2230	1907.44240793
+Z	2	3813.037
+Z	3	5719.052
+532.42175 1276.9
+549.15344 840.8
+626.50378 702.3
+630.40454 1114.8
+676.64142 813.5
+795.61755 1061.5
+832.62616 756.5
+895.14862 641.5
+1057.25146 859.3
+1126.53259 642.4
+1140.39233 577.1
+1188.19324 846.9
+1197.96216 2969.5
+1486.84631 664.2
+1525.41516 903.8
+1702.72839 691.2
+1734.23108 667.0
+1818.62061 690.5
+1878.01843 636.8
+1878.19165 862.1
+1878.53870 860.9
+1878.84644 741.3
+1879.16846 1690.6
+1879.55078 19647.5
+1879.92798 1544.1
+1880.24023 929.0
+1880.94336 826.3
+1907.11853 7384.1
+1907.41357 823.6
+1930.59473 995.5
+S	2231	2231	1198.37940793
+Z	3	3591.863
+Z	2	2394.911
+350.28427 966.6
+427.55609 750.6
+431.77896 571.0
+436.71329 715.3
+452.66641 576.5
+456.51038 550.6
+496.47659 584.9
+499.14310 627.3
+526.22095 567.4
+532.46796 2118.1
+549.17267 824.9
+578.14209 629.2
+613.35986 601.9
+676.63580 1049.9
+729.26233 581.8
+795.59949 725.1
+1035.65540 730.3
+1057.24390 836.3
+1073.29773 667.5
+1075.90393 614.0
+1140.46509 814.9
+1149.37854 598.6
+1168.82422 625.9
+1169.12927 604.0
+1198.04138 2959.8
+1271.99817 724.0
+1365.30786 672.9
+1525.48022 965.1
+1730.63184 618.9
+1872.98730 776.6
+1878.99219 1624.8
+1879.51941 19492.2
+1880.05225 1622.1
+1907.08655 7346.5
+1930.67480 925.7
+1948.03516 612.8
+S	2233	2233	1879.92099127
+Z	3	5636.488
+Z	2	3757.994
+517.67389 617.6
+532.50043 1759.9
+532.53516 807.5
+676.65637 1049.2
+699.58722 641.4
+731.15961 830.0
+759.39838 616.1
+795.61121 813.2
+811.35736 647.3
+815.28015 599.0
+843.03802 671.5
+843.40833 624.2
+858.09912 1013.9
+891.43713 616.0
+967.85388 733.7
+1011.96576 745.8
+1019.73822 831.2
+1198.11279 3217.9
+1729.64648 646.7
+1878.86755 1171.0
+1879.58435 19413.7
+1879.86414 3799.8
+1907.09875 7542.9
+1930.72607 1220.6
+S	2234	2234	656.3390971
+Z	4	2621.32509
+171.63704 6695.6
+191.80048 5923.4
+198.29411 5493.6
+199.18739 10404.9
+199.22797 8286.7
+199.24867 6617.5
+199.26910 7227.4
+199.27499 6864.5
+199.28598 33266.4
+199.30458 8810.9
+199.38464 11122.5
+201.67255 7031.4
+213.87285 6054.8
+225.33447 5487.9
+228.99963 6165.5
+233.58528 7310.9
+236.69862 5918.2
+240.82687 5864.8
+245.06070 6178.4
+254.16939 6061.5
+255.74611 6488.6
+264.33582 6053.6
+266.52298 6345.6
+280.19510 9139.8
+310.56686 5465.7
+315.48209 5987.3
+330.92795 6714.9
+389.45129 6213.4
+427.56705 9525.8
+471.22662 7122.4
+478.30646 6355.3
+482.68063 9038.3
+492.15048 5933.7
+531.99774 6487.8
+532.47668 19643.4
+592.55688 7055.2
+627.81708 18451.1
+628.06561 13562.1
+628.31873 13228.5
+628.56305 14921.2
+630.43909 7926.1
+635.19940 6123.4
+641.20984 6485.9
+666.18738 6364.7
+676.64575 10754.4
+685.72009 5931.9
+718.99805 5995.0
+729.86115 8184.9
+730.35938 8995.5
+731.16010 8963.1
+782.65271 6268.8
+795.61707 9471.6
+804.40466 10429.3
+804.73853 11672.1
+805.07263 11491.1
+837.08765 14584.6
+837.74445 10938.4
+848.12579 5948.5
+885.88092 8419.5
+938.85114 6160.0
+1057.23962 8318.0
+1061.99597 7019.5
+1073.04309 7437.3
+1197.91187 7279.0
+1198.06726 34386.3
+1440.31860 6476.0
+1509.55127 6454.8
+1636.81604 6814.0
+1754.78540 6466.5
+1776.94348 6856.3
+1874.00415 7880.6
+1878.47864 19107.6
+1879.09448 11644.7
+1879.29553 12798.5
+1879.54761 203908.6
+1880.03040 9906.6
+1880.53870 15368.1
+1881.91504 8606.8
+1907.04395 75378.8
+1912.71692 6082.6
+1930.67456 11799.1
+1932.00513 7378.6
+S	2235	2235	470.4991021
+Z	4	1877.96511
+121.77823 558.2
+121.78764 2224.3
+130.85211 575.1
+165.76585 747.3
+172.85004 579.4
+190.86366 638.8
+198.80655 560.3
+198.90279 695.1
+199.17865 969.3
+199.21489 795.4
+199.26706 1421.6
+199.27702 2629.1
+199.28683 1045.9
+199.36391 529.9
+199.37401 778.1
+201.12302 21018.1
+202.12674 2009.2
+205.42258 653.5
+224.56931 614.5
+229.11810 2850.9
+230.98454 654.3
+246.77954 584.1
+255.28651 802.5
+266.14920 1485.3
+270.42682 562.1
+271.46075 891.2
+280.19879 1097.8
+308.88751 847.2
+310.83984 721.4
+322.72537 565.6
+336.65384 779.5
+349.86642 6273.2
+350.20065 3128.9
+350.26270 853.3
+350.53287 1135.9
+350.97336 606.1
+387.56116 3496.3
+387.89508 2077.8
+388.23160 675.7
+407.19632 882.8
+410.24014 4326.4
+410.74237 1915.8
+436.98947 686.5
+437.23737 1547.1
+438.54822 550.7
+441.48975 1006.7
+450.98770 1437.4
+451.48315 704.3
+456.98444 1498.0
+457.23700 893.6
+469.56018 590.6
+474.76077 889.6
+476.74985 784.4
+478.93021 682.5
+515.78961 754.1
+516.79266 780.4
+516.94092 17770.3
+517.27478 14402.9
+517.60864 10888.5
+517.94250 2708.3
+524.29535 53959.3
+524.79688 26587.8
+525.29755 11040.6
+525.79694 3011.1
+532.49591 2059.4
+544.61951 3813.6
+544.95502 3337.0
+545.29004 2817.7
+545.62225 1264.2
+549.11902 692.0
+549.25409 689.6
+549.58240 889.1
+549.94049 1204.4
+550.27295 572.7
+550.62305 198890.9
+550.95728 169217.8
+551.29077 96380.1
+551.38495 889.9
+551.41138 644.9
+551.62457 36914.1
+551.85779 659.1
+551.95831 9797.2
+552.33105 1190.4
+562.32965 725.7
+562.81982 1858.1
+563.32214 1831.0
+571.95270 1662.2
+572.28241 990.1
+572.33502 810.6
+573.18231 590.4
+573.25537 602.0
+577.65350 654.4
+577.95868 6986.2
+578.29211 4840.9
+578.62500 2752.7
+578.95825 1087.3
+580.83685 17695.1
+581.33807 12035.6
+581.84106 3010.4
+582.33911 1405.4
+585.64441 1483.4
+585.97626 1583.9
+586.31403 901.0
+587.21014 4018.2
+588.31580 1252.0
+588.65234 1294.7
+591.64435 1402.6
+591.97546 1377.5
+592.62482 865.8
+592.95453 999.6
+603.27728 1208.9
+605.22089 2071.8
+616.56262 567.4
+630.38226 771.8
+637.37964 3271.3
+637.87970 1741.6
+638.38770 793.7
+645.36871 970.7
+653.34625 778.4
+676.64740 1108.3
+682.28632 2822.5
+690.79083 714.5
+700.29480 15971.7
+701.29797 4988.3
+702.29517 901.0
+717.39484 5743.1
+717.89667 5094.5
+718.30371 2706.9
+718.39709 2316.2
+718.89838 742.3
+761.38434 4514.0
+761.88495 3685.6
+762.39001 2177.4
+762.88690 1308.0
+795.36865 963.0
+802.41803 856.1
+813.37939 4821.1
+814.38037 1631.9
+815.37311 725.7
+831.38635 833.2
+919.49066 1776.1
+920.49384 969.7
+923.92188 552.6
+992.05804 575.6
+1099.12671 578.4
+1197.97424 702.3
+1198.11316 3161.3
+1380.49536 735.0
+1470.49390 581.5
+1775.26648 594.7
+1870.22681 879.6
+1876.00195 608.1
+1877.84717 928.2
+1878.77271 896.9
+1879.25989 2259.6
+1879.55261 20240.7
+S	2237	2237	531.721991267
+Z	2	1061.596
+Z	3	1591.891
+142.75267 4174.1
+158.31508 4334.2
+160.58821 3801.5
+163.64972 3990.4
+172.07104 9675.5
+188.24242 4488.6
+188.25861 9993.2
+188.27628 13446.6
+188.29121 15168.6
+188.31018 11801.3
+188.32149 9247.6
+188.35191 3314.4
+195.50797 3560.8
+195.90025 3638.4
+198.49086 3811.5
+198.90273 5574.9
+199.19159 4510.1
+199.25084 4298.4
+199.26308 6555.5
+199.28253 10389.1
+199.28888 11589.8
+199.29915 14483.6
+199.32109 6377.8
+199.38646 5199.8
+205.08182 3761.5
+211.45168 4127.5
+213.56770 3524.4
+228.87741 4476.4
+260.19675 11726.8
+263.14551 3259.7
+271.52075 4268.7
+280.18756 4199.1
+282.20908 4527.6
+283.00366 4990.9
+284.12781 4559.6
+285.15442 11061.5
+285.23251 4197.4
+292.64120 14010.3
+299.02972 4219.5
+299.43799 3955.4
+348.81409 5110.8
+350.26898 4085.0
+365.45926 3863.1
+371.22971 7164.3
+387.20114 29844.6
+388.24509 4466.1
+388.26364 4102.9
+389.23892 16583.9
+404.22842 6986.9
+414.20895 5049.3
+415.19583 14549.9
+432.22089 9727.5
+433.28833 4012.0
+443.78854 3375.5
+445.76865 19765.6
+446.27029 6263.4
+483.89148 4106.9
+485.27859 3999.3
+486.24875 62350.0
+486.58249 57888.2
+486.91525 30192.6
+487.25220 13186.1
+491.65704 3913.3
+502.32086 34358.3
+513.78265 68707.3
+514.28320 36834.1
+514.78577 10946.9
+516.36438 3888.6
+532.51056 15057.9
+543.25568 6026.0
+549.16156 4654.2
+560.28442 5587.0
+574.91901 4239.3
+598.81073 14265.5
+599.31323 16787.6
+599.80988 5389.2
+623.36005 4092.4
+630.37921 64498.4
+631.38342 23809.7
+656.33533 11900.5
+660.27588 43042.7
+661.27765 14228.9
+673.36389 12294.7
+676.63092 8231.3
+680.84857 8881.9
+728.86981 57091.6
+729.37122 58832.6
+729.87189 23352.9
+761.01605 4586.8
+777.44843 129965.6
+778.45227 51526.8
+779.44751 5567.3
+785.37866 11109.3
+786.38763 5429.3
+795.60272 5244.2
+810.23785 4278.3
+832.81525 4453.7
+890.53088 28919.8
+891.53876 15509.6
+898.46149 11561.4
+899.46216 5093.0
+915.49335 8699.1
+916.48218 6490.7
+970.72083 5027.2
+1041.94580 4449.8
+1057.26099 4465.8
+1198.13623 24586.1
+1286.94934 3779.2
+1291.82288 4316.5
+1776.91150 4568.0
+1870.32092 5711.6
+1876.11255 4881.9
+1877.58105 6365.2
+1879.08972 8604.5
+1879.53394 123442.3
+1879.83301 21650.6
+1880.04285 15141.4
+1880.52393 6622.8
+1881.40503 6332.4
+1882.02722 4153.6
+1907.01929 51472.3
+1930.61255 6935.7
+S	2238	2238	532.222991267
+Z	2	1062.598
+Z	3	1593.394
+135.13156 648.2
+138.61440 592.0
+155.04408 744.0
+163.19699 650.9
+165.76854 621.4
+172.07143 10565.2
+172.68523 542.9
+188.18080 520.5
+188.24554 784.3
+188.29366 2490.3
+188.30960 1903.5
+188.35625 488.9
+198.90295 737.0
+199.17859 836.2
+199.27769 3325.9
+199.29114 874.8
+199.30298 1034.5
+199.37196 1040.6
+220.44252 744.5
+233.16415 1722.0
+233.81125 630.2
+234.78671 671.2
+240.13396 5608.8
+241.13782 899.0
+242.18657 1367.6
+257.16071 3525.0
+260.19650 16946.1
+261.20026 1386.7
+267.14459 3418.0
+268.12900 2739.5
+271.51492 675.5
+271.67334 637.5
+284.12851 732.3
+285.15521 10695.2
+286.15918 744.4
+291.43832 512.5
+292.64194 1980.1
+308.91098 597.3
+319.13800 1038.7
+342.18222 1554.9
+362.31088 644.9
+362.87534 676.0
+367.34039 586.4
+369.22217 707.3
+370.51849 702.4
+371.22839 9225.4
+372.23123 1203.4
+381.37024 897.3
+386.21652 1636.2
+387.20209 28638.1
+388.20535 4919.5
+389.23880 18540.4
+390.24188 2734.0
+404.22864 7335.9
+405.23322 892.3
+414.21228 1641.2
+415.19675 17755.6
+416.20047 1885.2
+432.22342 9241.7
+433.22769 1628.8
+437.25003 749.9
+442.89728 628.6
+445.24310 593.0
+445.76993 19338.9
+446.27173 7941.2
+446.77347 1137.3
+453.21475 674.3
+460.70020 923.0
+461.19849 998.5
+485.27249 4568.4
+485.77454 2339.8
+486.24982 8667.4
+486.58258 10701.4
+486.91766 6787.4
+487.25284 3640.4
+487.58765 1172.5
+498.23386 2737.5
+499.18359 1131.6
+501.24344 970.0
+502.32208 35485.8
+502.79242 1594.3
+503.32520 8515.5
+505.26785 981.2
+510.22934 1150.7
+512.88611 671.0
+513.78296 82439.9
+514.28448 41616.0
+514.78632 9360.6
+521.22614 594.8
+532.47559 1649.4
+542.19861 559.6
+543.25464 3858.9
+544.25616 1094.2
+551.33167 758.5
+560.28101 4913.4
+561.28522 807.2
+591.92627 627.9
+598.81287 2278.5
+599.31305 2291.0
+599.81696 1436.5
+611.31720 1163.8
+612.37042 6349.8
+613.34967 4124.4
+614.35498 1236.3
+628.70795 712.1
+630.38037 79970.6
+631.38361 22505.4
+631.99249 858.3
+632.05823 607.5
+632.38574 2515.2
+639.30969 1398.5
+656.33838 9813.4
+657.34247 3446.0
+660.27600 6029.6
+661.27643 2743.2
+662.27136 1026.5
+663.26581 639.4
+673.36511 11205.7
+674.36859 3430.9
+676.57269 652.1
+676.61401 942.1
+680.33942 971.6
+680.84436 938.9
+681.34723 1561.5
+685.24457 650.6
+728.87177 6280.1
+729.37097 8566.2
+729.87158 5988.4
+730.37866 2369.3
+731.14801 908.9
+731.37738 668.7
+759.43530 986.6
+767.37170 1410.1
+768.35419 1016.9
+777.44885 134925.2
+778.45172 48140.4
+778.57056 850.9
+779.45337 7210.4
+784.39600 3482.0
+785.38074 15138.7
+786.38495 5579.6
+787.41888 858.5
+795.60596 976.9
+802.40747 10357.9
+803.41089 3253.5
+858.08350 810.1
+880.45526 1072.8
+890.53265 34432.5
+891.53583 13986.2
+892.53833 2187.7
+896.57660 764.2
+897.47400 941.8
+898.46466 17200.1
+899.46814 6481.9
+915.49066 10816.2
+916.49469 4137.7
+917.49530 777.7
+954.16418 673.2
+984.51373 525.5
+1018.54675 702.2
+1119.37366 597.5
+1123.79797 540.1
+1148.94519 694.4
+1198.06934 2985.0
+1276.73291 563.9
+1297.55212 554.5
+1367.32068 744.0
+1453.71497 655.2
+1470.66284 667.1
+1525.46045 678.0
+1584.20654 577.0
+1621.76685 630.3
+1667.25098 651.7
+1776.92944 1296.6
+1876.58557 744.1
+1879.46631 18629.8
+1879.70630 5352.7
+1880.41895 670.7
+1906.95313 5987.3
+1918.81299 755.8
+1930.65283 987.1
+S	2239	2239	516.5382546
+Z	4	2062.12172
+135.37852 1220.0
+144.67670 1356.8
+165.76639 1914.0
+171.49358 1192.0
+171.63051 1474.8
+185.11403 1673.0
+188.26851 2127.7
+188.27473 2059.7
+188.28276 2745.1
+188.29367 2828.6
+188.30713 2067.7
+188.32182 1625.6
+196.34494 1277.7
+198.90176 2504.1
+199.18767 2010.0
+199.26651 2184.3
+199.28281 5676.7
+199.29631 2805.7
+199.38025 1773.6
+201.12318 4048.4
+226.01451 1452.0
+254.92952 1240.0
+255.28886 1937.3
+263.99036 1195.0
+272.17191 1986.0
+275.77817 1456.0
+280.18130 1821.0
+328.44995 1250.5
+342.27130 1638.3
+344.14386 1808.3
+348.71017 1573.7
+350.20370 3864.6
+350.70688 2234.1
+351.21310 1629.0
+351.36053 1254.2
+369.22342 58890.1
+370.22760 12940.0
+381.35583 1555.9
+417.04755 1192.0
+427.54028 1871.6
+455.24881 3951.8
+455.58124 9417.9
+455.91599 2017.9
+482.30637 6914.3
+483.31137 2202.8
+484.59479 2515.3
+499.28580 2747.2
+530.27289 1636.0
+532.48987 4238.1
+534.97205 2109.0
+535.30359 6891.7
+535.63916 3248.5
+536.29163 6401.4
+536.62469 6283.7
+536.95557 3644.3
+539.72583 1275.1
+541.63635 1221.0
+555.97357 1973.6
+556.30872 4201.6
+558.74194 1281.8
+559.25165 2790.7
+565.30658 4419.7
+565.64026 9914.9
+565.97449 6516.0
+566.30939 4305.3
+573.98523 4756.2
+574.32062 6287.3
+606.32153 1929.6
+606.65552 2655.2
+612.32770 56913.5
+612.66132 54870.9
+612.99579 25598.1
+613.33398 7590.5
+614.32855 1403.8
+619.99872 1577.4
+630.40686 1832.5
+655.34753 1779.2
+661.31799 1736.2
+676.63782 1967.3
+682.36572 11914.8
+682.86597 16989.3
+683.36896 8055.3
+699.40094 4301.6
+700.40173 2778.5
+710.89923 2897.7
+711.39679 2735.1
+737.59479 1654.7
+745.41071 8468.4
+745.91040 19021.6
+746.41156 11284.1
+754.98975 1261.7
+760.91858 1786.1
+781.93304 2295.1
+790.91382 22094.1
+791.41547 41413.7
+791.91571 24220.6
+792.41705 6014.2
+795.59784 2037.4
+847.45667 1995.5
+847.95624 4781.0
+848.46100 3957.8
+1020.83307 1765.6
+1198.09619 7000.5
+1288.77185 1433.9
+1479.70776 1364.8
+1525.41528 1822.2
+1715.33105 1286.2
+1718.00635 1516.7
+1776.87146 1988.2
+1859.96082 1348.3
+1870.38428 2605.0
+1874.94324 1620.2
+1878.51843 3288.7
+1879.14648 2655.5
+1879.54431 46264.1
+1879.93140 2316.0
+1880.37012 1628.2
+1880.60229 2098.8
+1906.96497 16898.5
+1918.85901 2074.2
+1930.59778 1997.3
+S	2241	2241	1879.97140793
+Z	2	3758.095
+Z	3	5636.639
+532.48694 1544.8
+550.58972 591.1
+571.49457 576.6
+630.49719 700.0
+668.68408 611.7
+676.64581 955.6
+680.13763 703.0
+731.10193 735.5
+731.14972 674.9
+788.72412 596.8
+795.59906 729.2
+891.31067 880.0
+950.85779 625.7
+956.61316 816.1
+972.92755 618.2
+1013.26544 640.9
+1198.09167 3652.1
+1873.29993 790.1
+1878.36365 1479.1
+1878.85291 1466.8
+1879.55164 19296.9
+1879.86450 3474.6
+1880.36353 1178.9
+1880.72400 809.5
+1907.11145 7239.7
+1918.84375 777.5
+1930.67737 1390.1
+S	2242	2242	610.5436871
+Z	4	2438.14345
+157.10750 557.1
+162.07152 509.4
+162.49670 562.4
+165.76207 841.6
+171.64151 806.7
+173.79980 565.2
+180.19882 525.1
+182.59470 562.2
+188.15970 559.7
+188.17531 570.6
+188.21271 847.8
+188.23119 557.2
+188.23865 552.6
+188.24730 552.7
+188.25706 672.9
+188.27238 904.2
+188.27788 1019.8
+188.28828 855.6
+188.29262 848.6
+188.30542 814.5
+188.31662 599.2
+188.33693 473.0
+188.35471 632.2
+188.41116 572.9
+199.20000 753.3
+199.28267 1828.8
+199.28883 564.2
+199.29878 1915.0
+199.31583 1468.7
+199.34195 683.5
+199.38028 821.9
+199.41643 781.9
+201.12271 2301.9
+204.71413 674.3
+210.68613 594.9
+227.16177 561.3
+239.77464 530.3
+268.53976 643.5
+299.52267 889.9
+299.81952 596.4
+308.89282 789.2
+341.68439 2543.1
+342.18420 701.5
+350.28870 814.7
+350.48886 577.3
+352.36038 567.9
+371.13809 1984.4
+372.03259 627.2
+372.93951 545.4
+381.34979 833.6
+391.21805 1371.0
+392.03674 564.6
+411.83856 660.2
+416.26169 1880.8
+424.88962 575.1
+440.71545 595.3
+454.32730 595.9
+462.22946 1126.7
+465.02878 598.0
+476.27078 3178.0
+496.34164 631.6
+506.98541 570.0
+507.19061 755.4
+532.48102 1805.7
+537.52075 612.3
+545.30286 4980.5
+546.30518 1234.5
+549.14746 561.1
+566.82892 722.0
+575.33649 654.7
+575.76538 819.8
+586.53082 796.0
+586.78119 775.0
+590.78253 7634.1
+591.03217 8022.0
+591.28247 6491.2
+591.35553 2481.6
+591.53302 2051.5
+591.61823 707.9
+593.58173 588.6
+595.03461 836.5
+595.28619 1773.3
+595.78912 771.5
+602.60229 563.6
+631.25085 1006.2
+632.98108 2189.2
+633.31720 2182.1
+645.65649 692.2
+647.63452 649.8
+647.93329 571.9
+649.65295 583.5
+669.32941 626.7
+676.64893 842.3
+677.31628 773.7
+682.36121 11142.5
+683.35931 2162.3
+689.46301 584.3
+696.98987 987.7
+697.32416 1115.6
+703.60223 600.2
+703.67584 940.3
+704.00525 1979.8
+704.33594 930.9
+706.80206 1652.8
+717.33978 4277.7
+717.67493 4288.4
+718.01038 3454.7
+721.00244 3186.7
+721.33752 3229.6
+721.67059 1100.1
+723.01813 653.9
+723.35272 1222.3
+729.36218 4090.4
+729.70868 552.6
+729.86139 2689.6
+730.35913 1676.1
+731.67395 1734.6
+732.00885 2217.5
+732.33746 655.8
+735.71588 992.2
+736.07001 670.0
+737.35059 12073.4
+737.68488 12232.5
+738.01874 9439.5
+738.35352 2867.0
+763.33075 811.8
+767.02759 1846.9
+767.35999 2506.0
+767.69147 2197.9
+773.02832 1956.0
+773.36206 1704.7
+773.69690 1953.4
+781.42926 6400.8
+782.43268 1861.2
+789.75745 680.5
+794.88354 3872.3
+795.38116 2343.5
+795.59711 766.8
+795.88647 1219.9
+797.41486 835.2
+797.91986 697.9
+798.41858 702.9
+799.39020 975.8
+799.88501 797.5
+825.84668 628.6
+877.32007 4324.3
+878.32166 1040.1
+880.48810 999.3
+948.35638 3509.0
+949.35840 1039.1
+1021.13550 633.8
+1045.47156 763.9
+1045.99072 1248.9
+1047.42773 3012.4
+1048.43677 1890.6
+1057.24243 743.1
+1132.86536 679.7
+1146.47681 1724.9
+1147.50281 1300.5
+1191.95129 614.9
+1198.06946 3027.3
+1331.14673 698.8
+1525.36243 1170.4
+1536.15930 573.8
+1537.53918 612.7
+1554.29785 558.8
+1692.04016 595.8
+1820.63452 562.8
+1870.24365 862.5
+1878.01501 755.6
+1878.42419 1059.4
+1879.08325 1766.3
+1879.30176 1284.4
+1879.55237 20084.1
+1880.01697 1517.9
+1880.71741 1272.4
+1881.17407 679.2
+1903.52393 637.0
+1907.09521 7549.9
+1930.54565 1231.6
+S	2243	2243	1907.36699127
+Z	3	5718.826
+Z	2	3812.886
+532.47479 1831.1
+532.55267 611.8
+551.02881 574.6
+587.44965 775.3
+676.64832 870.0
+730.61145 779.4
+795.61310 759.3
+862.67139 627.5
+880.30078 593.0
+957.95441 564.9
+969.55341 684.4
+1013.06165 731.1
+1036.82166 659.7
+1140.05713 728.8
+1148.18640 640.1
+1167.64307 690.9
+1198.06274 3113.7
+1273.35547 567.5
+1525.44116 829.1
+1548.54688 691.5
+1787.30945 670.7
+1870.47144 845.0
+1878.40955 1044.7
+1878.90869 1601.4
+1879.55762 19912.2
+1880.20605 846.4
+1880.74097 834.5
+1882.23926 769.7
+1907.05737 8122.1
+1955.28882 720.3
+1959.24561 653.0
+S	2245	2245	1879.98399127
+Z	3	5636.677
+Z	2	3758.12
+532.48761 1970.6
+542.70148 635.1
+549.20813 642.8
+567.96045 554.7
+627.28491 650.0
+640.25885 659.5
+644.88019 657.6
+676.66479 1067.5
+795.60992 955.4
+858.12457 729.3
+903.83063 677.8
+995.01385 674.5
+1037.94763 715.0
+1044.82275 614.9
+1051.41504 579.7
+1057.28674 923.2
+1169.62573 575.7
+1198.09058 3740.0
+1373.23389 693.5
+1493.63928 589.5
+1496.25916 759.8
+1525.54358 1065.2
+1663.31226 658.0
+1763.69397 717.8
+1839.39429 629.8
+1878.61462 1122.4
+1879.21790 1729.4
+1879.60901 19631.3
+1880.00293 1866.0
+1907.07178 7419.2
+1917.07654 574.4
+1930.79138 1097.7
+1983.27930 656.2
+S	2246	2246	872.1758296
+Z	4	3484.67202
+237.25325 2413.4
+239.69510 2066.3
+242.08948 2211.6
+271.68484 2550.8
+284.19772 2417.3
+305.06421 2315.6
+308.90363 2795.0
+374.29294 1944.6
+381.35617 2704.9
+389.24963 3723.1
+444.99911 2806.3
+469.80597 2414.2
+480.26929 30427.6
+480.77118 18734.3
+481.26544 2372.4
+490.29691 12913.5
+491.30121 4324.7
+517.77759 2169.2
+520.26331 3369.0
+532.49091 6787.3
+545.79022 3876.7
+561.33417 16466.1
+562.33630 5148.5
+583.27533 4003.6
+629.31482 2291.4
+641.80396 11843.5
+642.31140 4217.2
+642.80548 4318.2
+654.30878 3923.5
+655.30701 3079.7
+664.30151 3501.6
+664.70734 2290.5
+667.65143 4995.6
+668.31763 4785.1
+668.81085 6406.4
+669.31421 2901.1
+669.81360 2898.2
+673.65729 19141.5
+673.99127 17970.9
+674.32684 13917.2
+676.63885 3000.0
+677.32428 42654.2
+677.82538 31438.5
+678.32635 11866.6
+692.37433 23308.6
+693.37427 7179.4
+700.33936 14241.4
+711.35754 3484.2
+711.94763 2484.1
+712.01996 5081.9
+719.86902 5612.7
+720.37140 5407.9
+722.24011 2228.4
+724.86029 6259.4
+725.35303 12519.8
+725.85486 10782.4
+726.35986 3468.1
+727.29797 5340.4
+733.86566 82420.7
+734.36646 76169.2
+734.86841 37387.8
+735.36566 6735.5
+763.41144 27733.6
+764.41418 10880.7
+787.03461 4098.8
+787.36835 6290.8
+787.70740 5198.6
+793.03961 14544.3
+793.37628 10090.2
+793.70685 7099.8
+795.61755 3952.4
+807.68048 2805.3
+818.40302 2625.1
+823.87329 2298.6
+830.41925 2242.3
+831.38086 4301.4
+836.32538 2767.7
+836.71655 16352.5
+837.05188 28545.2
+837.38702 16573.3
+837.71979 8362.7
+838.04419 2567.9
+842.71991 8482.9
+843.05811 9429.4
+843.39105 9805.5
+843.71680 4535.4
+846.92426 4343.4
+847.42273 5798.3
+848.42212 2475.0
+908.08954 4717.7
+911.37909 4956.5
+913.38837 2301.8
+926.43909 5973.9
+929.45300 3271.8
+930.44965 3579.3
+931.78271 5376.3
+932.10657 5756.6
+932.44391 8606.8
+932.77673 5178.6
+935.45599 3689.0
+941.52582 2873.5
+959.53180 73633.3
+960.53467 37869.1
+961.53375 11557.0
+962.45325 2380.6
+962.52588 2381.1
+970.10150 3388.9
+975.78577 9539.7
+976.13727 4134.6
+976.46338 4386.0
+991.96002 2873.2
+992.47729 8302.0
+992.97388 3870.5
+999.13348 5985.0
+999.46735 13402.8
+999.80151 14671.9
+1000.13721 8448.1
+1000.47009 5254.6
+1000.97729 13693.2
+1001.47980 13390.9
+1001.97638 9920.3
+1002.48883 6238.0
+1009.98273 194366.3
+1010.48401 241580.1
+1010.98529 154398.3
+1011.48523 78697.2
+1011.98737 25970.9
+1012.48425 4603.5
+1021.37885 2551.5
+1032.81567 7907.2
+1033.14868 10531.7
+1033.48730 12305.5
+1033.81726 10066.4
+1034.16492 2466.8
+1039.51721 7656.4
+1040.52209 4894.6
+1043.41821 3607.4
+1057.23828 3091.9
+1060.43481 5846.5
+1060.82715 6225.3
+1061.14978 3300.9
+1061.48413 4030.6
+1066.52527 16435.2
+1066.84607 4587.9
+1067.02734 18050.6
+1067.16919 4365.7
+1067.52466 18003.0
+1068.02515 7361.4
+1076.03271 2919.9
+1090.57397 5068.3
+1102.04016 15564.5
+1102.54565 19965.8
+1103.04883 15524.0
+1103.54761 5117.1
+1105.19666 2408.0
+1127.54956 4429.0
+1148.03577 4598.0
+1148.55640 3671.8
+1152.59216 2442.9
+1166.56641 3836.2
+1167.06738 3964.8
+1189.05371 12601.4
+1189.55286 20979.1
+1190.05225 18770.4
+1190.55701 9301.0
+1198.12170 6874.0
+1198.55835 13294.0
+1199.06482 9836.7
+1199.57019 5949.3
+1204.00549 2646.6
+1224.10291 2729.1
+1240.64404 3054.1
+1242.57349 2620.8
+1255.57007 3151.7
+1256.56836 3343.4
+1263.57910 46953.5
+1264.07996 66537.9
+1264.58276 53122.2
+1265.08252 25693.5
+1265.58862 6855.6
+1270.91040 2511.3
+1292.67212 4183.7
+1293.67273 2659.7
+1327.57971 2850.6
+1353.63794 4617.7
+1354.64795 6887.3
+1398.14954 3145.6
+1466.72681 17257.8
+1467.72290 14626.2
+1468.73328 7040.2
+1770.12634 2338.6
+1875.23499 3349.5
+1876.29480 3401.1
+1878.69092 4280.8
+1879.17273 7110.1
+1879.54175 73597.6
+1879.92517 5711.6
+1880.40564 4662.3
+1907.07581 26204.0
+1907.49170 2962.7
+1930.57483 3200.0
+S	2247	2247	872.1755746
+Z	4	3484.671
+231.45341 4069.7
+244.14116 3409.3
+247.38084 3746.9
+254.77708 3828.6
+263.16470 4072.8
+270.93558 4026.6
+285.51941 3827.5
+309.34100 3447.1
+342.28430 5112.2
+350.26440 4369.3
+365.76440 3662.8
+374.33255 3996.2
+416.67133 4391.1
+427.55838 4723.2
+431.75256 3563.9
+460.08878 3497.2
+480.26944 19478.9
+480.77176 6405.4
+482.67120 5622.1
+490.29364 8957.8
+500.72369 3539.1
+532.45190 11619.6
+533.79987 4190.9
+561.32996 12078.4
+562.33142 4437.5
+599.94958 3295.3
+621.21552 4216.8
+641.80261 6457.8
+642.31018 4388.8
+666.43622 3941.0
+670.27124 3820.7
+673.65857 12767.2
+673.98987 14169.4
+674.32861 9073.3
+677.32080 19709.6
+677.82373 15380.7
+692.37396 11937.1
+693.14380 3951.0
+703.22754 4476.8
+710.10913 3899.6
+725.35413 8271.0
+725.83972 3861.8
+726.36066 4197.0
+733.86493 48857.3
+734.36719 40354.5
+734.52716 3795.8
+734.87079 15874.0
+743.82111 3936.5
+763.41309 17088.3
+764.40985 5719.6
+787.01971 3997.6
+787.36444 5253.5
+793.03662 6165.8
+793.37689 8348.0
+795.61304 4604.9
+836.71741 9814.7
+837.04810 15447.1
+837.38190 12611.3
+837.71674 9773.4
+843.06042 5375.6
+847.80872 3685.3
+853.25983 3757.6
+911.36816 4965.1
+929.41498 5455.9
+932.10840 5509.4
+932.45123 5876.1
+934.52625 4475.0
+944.92444 5315.0
+953.80432 4060.2
+959.53192 41376.6
+960.53345 24638.9
+961.51379 5036.4
+975.77924 4668.2
+999.13794 11207.7
+999.47308 11058.6
+999.79834 9640.5
+1000.97565 9621.3
+1001.47595 13725.7
+1001.97913 6594.6
+1009.98199 124643.5
+1010.48431 121359.9
+1010.98419 84794.6
+1011.48431 34338.4
+1011.98828 10241.0
+1032.81787 6036.7
+1033.15161 12635.6
+1033.47876 8544.8
+1033.82361 5025.2
+1039.52051 5160.4
+1060.82690 3897.9
+1066.53406 10012.6
+1066.83228 5516.4
+1067.02734 6634.3
+1067.52795 9387.4
+1102.03564 6282.3
+1102.54187 7560.2
+1103.04382 9408.6
+1103.54346 5801.0
+1140.20984 5450.5
+1189.04138 9537.8
+1189.55225 17137.7
+1190.04956 10978.0
+1198.00513 19440.9
+1198.56116 10658.8
+1199.05432 4981.3
+1263.57971 24447.0
+1264.07935 46693.7
+1264.58301 27717.1
+1265.07983 17017.1
+1353.68420 3996.6
+1368.67419 4185.5
+1393.55884 4012.7
+1466.71814 14007.2
+1467.71509 9989.0
+1713.71033 3878.3
+1761.26953 3636.1
+1775.24194 4648.8
+1878.45923 3734.2
+1878.79333 5755.6
+1879.53699 124442.7
+1880.04614 9022.2
+1907.06641 46300.8
+1930.70288 5022.8
+S	2249	2249	872.1761346
+Z	4	3484.67324
+271.66772 680.3
+284.42294 610.9
+315.28787 558.5
+332.97632 719.4
+347.72208 665.7
+399.15182 575.8
+427.52811 638.3
+480.26675 1027.4
+532.48663 1687.6
+557.62927 691.6
+573.57874 646.3
+611.10046 568.5
+626.14343 621.2
+630.37811 788.8
+641.79443 782.5
+642.22601 623.8
+673.65497 1106.3
+673.98816 857.5
+676.63202 1431.8
+692.37463 826.9
+711.80585 602.2
+733.86212 2630.5
+734.37384 757.2
+746.14758 616.9
+746.19189 535.7
+763.41577 1134.3
+795.61121 1044.3
+810.37488 676.7
+812.40442 883.4
+837.05170 1019.9
+849.85535 991.4
+853.95959 743.6
+890.87146 660.5
+916.37268 647.5
+941.83026 694.7
+947.69568 711.8
+959.53149 1861.3
+971.49353 635.5
+974.88275 596.6
+999.15271 901.0
+999.47260 962.3
+1009.98169 9904.7
+1010.48499 4484.8
+1020.82898 845.0
+1024.70508 707.1
+1032.82104 790.0
+1057.22998 667.5
+1066.52588 1043.3
+1102.03748 1452.0
+1189.04663 1030.7
+1198.07703 3627.3
+1263.58032 2205.7
+1264.09302 1298.0
+1510.61548 575.6
+1525.33899 872.5
+1593.05310 579.5
+1671.75525 607.1
+1753.82288 650.6
+1766.17981 795.5
+1776.94946 965.5
+1830.79297 652.8
+1870.34863 1065.8
+1879.51343 19844.4
+1880.22986 881.8
+1880.47314 827.9
+1907.11243 7632.3
+1918.22742 648.5
+1930.53467 841.7
+1969.51880 550.7
+S	2250	2250	872.9285746
+Z	4	3487.683
+233.59084 2067.9
+262.47977 2563.5
+267.54324 2243.9
+282.83005 2209.0
+308.92093 2890.9
+350.28241 2740.1
+389.25049 4673.5
+427.57101 2936.1
+475.14594 2530.5
+480.26956 15322.3
+480.76901 6052.8
+490.29858 7380.5
+508.34238 2371.3
+532.47217 6956.4
+549.19098 3381.2
+553.32593 2631.8
+561.33398 9055.4
+566.00305 2157.1
+567.38593 2445.5
+584.89886 2168.0
+629.49640 2381.1
+630.45532 2919.9
+641.80267 4057.7
+642.31042 3282.9
+658.87549 2566.1
+662.79443 2441.2
+673.65729 9527.4
+673.99121 6938.4
+676.63025 2653.4
+677.32410 20209.0
+677.82397 13161.9
+678.33234 3247.6
+692.37299 13459.1
+693.37598 3372.1
+700.33557 4500.4
+720.35468 3783.1
+725.35541 5936.2
+725.85706 4586.7
+726.35657 2739.3
+730.79926 2486.1
+731.16925 3308.3
+733.86560 34435.6
+734.36639 27193.6
+734.86957 15001.5
+763.41406 11795.0
+764.41089 7277.7
+765.41479 2688.5
+787.03546 3830.1
+787.35919 4124.3
+787.70410 3758.1
+793.37323 8492.5
+793.70264 4607.7
+795.59790 2820.2
+836.71326 7925.3
+837.05212 12910.5
+837.38684 8345.2
+837.71594 3746.3
+843.05664 5512.7
+926.43103 3839.8
+931.77661 3019.5
+932.10413 5498.7
+959.53143 34954.8
+960.53473 11717.0
+961.52759 5428.4
+975.79230 3095.0
+976.12469 3200.8
+976.45471 3292.6
+993.53021 2615.7
+999.47076 7230.9
+999.79919 6752.4
+1000.14093 5125.1
+1000.98041 7352.9
+1001.47827 6815.9
+1001.98584 4715.7
+1009.98285 74297.4
+1010.48407 80806.9
+1010.98456 54003.3
+1011.48456 22230.8
+1011.98492 9124.1
+1027.80640 3257.8
+1033.15222 4540.5
+1033.49414 4041.9
+1060.83643 2779.1
+1066.53027 7083.8
+1066.82666 3158.8
+1067.02820 5574.8
+1067.51904 5259.2
+1081.04407 2571.1
+1102.04053 5069.1
+1102.53784 5683.8
+1127.56238 2927.6
+1189.05762 5203.1
+1189.55676 13440.7
+1190.05054 5546.9
+1198.05078 11357.0
+1198.55591 6714.5
+1199.05139 4056.1
+1241.88550 3007.1
+1263.57666 22566.1
+1264.07947 31527.6
+1264.58069 26700.3
+1265.08362 12469.1
+1265.58691 4018.1
+1353.62537 3684.3
+1398.15723 3437.6
+1459.08472 2463.1
+1466.72656 7201.8
+1467.72375 6444.9
+1799.47791 2361.9
+1879.50989 69586.9
+1879.79272 18213.9
+1880.08521 5157.0
+1907.05713 28160.8
+1930.73206 3680.9
+S	2251	2251	1879.90040793
+Z	2	3757.953
+Z	3	5636.426
+532.47888 2285.8
+617.40820 642.0
+617.99011 785.9
+630.37323 823.4
+676.63739 680.6
+795.59265 708.8
+975.89972 717.9
+988.36078 583.7
+1019.65198 684.4
+1198.07056 3509.7
+1492.19092 616.9
+1612.43066 698.9
+1678.85034 585.9
+1779.89270 607.9
+1876.84973 763.4
+1878.51794 1044.2
+1878.78931 1205.1
+1879.20947 1941.3
+1879.54077 19773.6
+1879.88708 1906.8
+1880.29553 1130.0
+1880.60181 1067.6
+1904.29077 839.7
+1907.08557 7332.8
+S	2253	2253	872.1771721
+Z	4	3484.67739
+233.57320 550.0
+234.63754 610.7
+237.63780 600.0
+238.70546 702.3
+420.83078 652.3
+427.50925 898.9
+454.42068 649.4
+466.82187 599.4
+475.28336 604.8
+480.27005 1739.3
+490.29373 894.3
+521.01538 629.3
+531.98688 564.7
+532.49237 2185.1
+588.81219 639.1
+607.70905 603.0
+630.39392 724.5
+645.39801 567.1
+676.64484 1196.3
+677.32483 1917.0
+692.37219 1827.4
+693.37439 672.9
+707.23383 676.4
+731.06927 596.7
+733.86505 4787.3
+734.36627 3262.5
+738.93066 616.4
+763.41333 2284.3
+779.40265 712.3
+793.03613 1664.0
+793.38092 974.3
+800.64014 591.2
+825.39264 891.4
+836.71570 954.1
+837.05194 1601.8
+837.38629 1067.5
+854.05743 1106.4
+906.89471 604.7
+911.66528 725.5
+917.89874 713.6
+921.46814 748.9
+932.10046 1155.8
+959.53253 4787.6
+960.53278 1863.0
+980.45819 653.8
+999.47217 959.9
+999.80414 1442.3
+1000.32312 642.2
+1009.98230 8599.6
+1010.48413 9405.8
+1010.98181 5309.4
+1011.47760 864.5
+1013.37384 769.7
+1021.14166 827.6
+1024.69617 855.8
+1033.14966 1357.1
+1059.07666 848.8
+1066.51245 1259.0
+1067.02991 1255.8
+1180.92993 691.4
+1189.54431 1043.3
+1198.09277 4148.4
+1198.56128 1177.1
+1263.57971 3091.1
+1264.08069 5043.4
+1264.57605 3352.6
+1397.34973 663.3
+1466.69080 955.5
+1467.73743 989.3
+1593.74451 746.9
+1874.01587 670.0
+1878.83142 1249.2
+1879.55762 17166.1
+1879.82495 4172.6
+1880.37134 1397.0
+1881.09436 784.2
+1907.10730 7362.1
+1907.54553 1047.3
+S	2254	2254	1879.95340793
+Z	3	5636.585
+Z	2	3758.059
+532.45160 2130.2
+676.65930 794.1
+695.94110 595.6
+906.06482 660.6
+1005.79749 650.3
+1198.00977 3240.8
+1206.91406 599.3
+1208.35583 664.5
+1330.00000 744.2
+1346.42224 768.9
+1466.70142 719.5
+1666.69958 584.6
+1871.25574 714.2
+1877.01343 636.0
+1878.82642 1043.9
+1879.57458 19939.1
+1879.95911 689.8
+1880.26819 865.0
+1880.65369 816.8
+1907.04700 6994.6
+1930.53955 875.3
+S	2255	2255	680.3571046
+Z	4	2717.39712
+186.17448 565.9
+188.24197 700.6
+188.26711 1023.0
+188.27525 1065.8
+188.28113 1169.0
+188.29918 1247.0
+188.31461 598.0
+198.90552 809.9
+199.19183 1155.6
+199.26826 1115.9
+199.28160 563.8
+199.29002 3034.9
+199.30533 891.4
+199.30981 916.5
+199.38908 903.9
+213.99863 645.2
+234.50644 727.7
+242.01237 645.7
+246.15404 640.9
+255.30716 609.5
+350.27991 716.3
+370.78372 569.6
+418.75275 641.2
+424.96167 577.3
+438.26740 1191.5
+446.74884 663.4
+456.28235 1582.9
+487.92389 728.2
+530.95081 730.1
+532.45026 2038.9
+562.43890 604.2
+573.80444 2944.1
+574.30280 914.5
+580.15015 625.7
+585.28546 3300.0
+589.48358 629.1
+597.28223 662.0
+613.66669 921.9
+639.47034 565.5
+640.58490 1187.7
+646.97321 856.7
+649.33154 634.1
+650.56543 1769.6
+650.66565 628.8
+650.82019 763.2
+651.76526 690.0
+656.92566 821.8
+657.32239 1723.3
+661.85931 1246.3
+662.39484 578.9
+676.65515 948.2
+688.21783 700.2
+710.77386 781.4
+712.04724 932.9
+712.68860 1586.0
+720.46259 758.2
+722.53625 823.8
+729.36029 1016.8
+731.17596 933.4
+732.35284 1926.6
+745.57684 584.5
+746.41632 1390.2
+746.91455 1621.5
+749.03912 1227.0
+749.37085 1625.0
+754.71167 8828.9
+755.04639 10896.6
+755.38293 3967.6
+759.12756 705.9
+762.42352 688.7
+764.24548 635.4
+765.89386 1199.4
+768.73059 1023.2
+769.36993 916.6
+782.06158 1181.2
+782.40021 754.4
+787.73608 4750.3
+788.06915 5621.8
+788.40302 3465.3
+789.30957 606.8
+789.92822 1536.6
+790.43237 1580.1
+795.61383 872.2
+815.41595 1313.0
+815.94635 607.4
+820.75763 3192.1
+821.09180 4005.2
+821.43103 2081.6
+825.40680 3171.6
+825.90594 2378.0
+826.41046 1366.6
+846.48047 1051.5
+847.63000 900.8
+853.77759 1923.3
+854.11597 3855.3
+854.44562 2568.7
+861.39362 1149.5
+903.99036 3055.7
+904.48224 2729.9
+904.98584 1325.4
+947.31158 652.4
+992.95209 636.7
+1020.79559 706.6
+1054.50256 837.1
+1063.93079 619.5
+1131.56958 1156.0
+1132.06213 1067.7
+1198.00647 3623.4
+1403.78503 684.3
+1590.05505 613.5
+1784.62146 584.5
+1878.60510 736.1
+1879.00916 2123.8
+1879.22864 2377.8
+1879.55786 19723.5
+1879.91003 2708.2
+1880.38916 770.6
+1907.04504 7527.0
+1930.71118 932.8
+S	2257	2257	680.3608271
+Z	4	2717.41201
+188.24059 8306.4
+188.26942 22327.9
+188.28229 24831.8
+188.29362 26217.4
+188.30266 25893.2
+188.32527 14770.6
+191.08482 7683.7
+198.90334 15840.4
+199.23793 8583.5
+199.26450 14945.5
+199.27827 29009.2
+199.29262 21425.5
+200.35016 8331.9
+209.26422 8397.2
+223.84935 8214.2
+225.40172 9543.3
+230.87964 8828.5
+233.83571 10244.0
+256.40634 9938.0
+269.54285 9961.9
+305.44321 8936.1
+352.18350 7999.2
+386.70529 8519.8
+433.95795 8585.9
+456.28152 9771.4
+458.99109 11257.4
+482.62546 11578.0
+505.60410 9982.2
+532.41058 27555.5
+548.09216 9432.3
+549.11609 13564.3
+582.30676 8610.1
+585.28357 16534.0
+612.50085 9092.6
+676.66425 19527.6
+735.90973 9565.8
+754.71405 21213.5
+755.04730 25349.2
+755.38110 29155.6
+755.71155 18270.6
+758.10522 10845.2
+787.73590 12054.3
+788.40686 18770.6
+795.60901 12626.5
+812.56073 9634.3
+821.09991 15591.2
+821.41742 11883.4
+825.41473 16077.7
+861.38550 10531.0
+931.20563 9211.9
+964.00757 10375.2
+1011.84583 11653.0
+1062.00146 9311.7
+1197.91174 45828.5
+1199.53479 10658.5
+1481.80542 9241.7
+1525.32996 12760.0
+1572.92932 9906.5
+1785.26062 9109.5
+1878.08875 14135.2
+1878.67139 10744.6
+1879.08972 30724.0
+1879.59790 273410.8
+1880.19312 24254.3
+1880.48865 13692.6
+1881.14954 10362.9
+1881.56897 10171.8
+1907.05127 105226.9
+S	2258	2258	681.1135746
+Z	4	2720.423
+182.77440 718.7
+188.24826 789.8
+188.25931 1089.1
+188.27235 1832.2
+188.28740 2633.7
+188.31349 1744.7
+188.32449 1075.9
+198.90120 757.2
+199.18474 615.6
+199.21680 616.1
+199.24890 902.9
+199.27216 1991.3
+199.28371 968.4
+199.29643 1206.6
+199.31209 828.8
+199.37047 927.7
+240.13400 4638.5
+241.13760 652.1
+244.06027 611.6
+255.21626 580.6
+258.14435 1459.1
+272.32922 616.4
+293.14743 2132.7
+294.17932 1390.6
+295.22626 654.3
+308.88705 849.4
+311.20837 1422.5
+312.19022 747.8
+329.21863 2280.3
+339.20276 3462.5
+357.21359 6451.9
+357.27133 530.3
+363.26810 622.7
+366.68204 2458.6
+367.18170 1167.7
+373.20792 9522.3
+374.21249 1818.9
+381.34497 761.7
+387.58093 655.8
+410.27509 1197.8
+411.26401 765.3
+427.21890 2990.6
+428.28650 1934.5
+429.29080 1014.5
+438.27054 10041.0
+439.27448 2067.3
+449.25873 602.6
+456.28088 12064.1
+457.28461 2804.7
+466.19177 642.8
+486.23178 815.7
+487.23105 684.1
+495.73087 796.8
+500.72025 690.4
+516.78864 5162.3
+517.29065 1969.1
+517.78802 719.2
+519.92236 744.8
+525.79431 1658.5
+526.29449 1006.8
+532.44061 2082.1
+545.28436 1103.7
+546.15625 598.1
+549.13043 872.2
+567.32257 1013.7
+571.65033 773.6
+580.31714 966.1
+585.28680 30197.2
+586.28967 9132.7
+587.29175 2146.2
+595.30536 938.5
+608.32880 1115.0
+610.00024 2001.2
+610.33179 2031.4
+610.62354 1379.4
+612.64008 1032.9
+613.31879 1293.9
+613.67114 4997.6
+614.00482 4050.0
+614.34241 2608.6
+619.67316 2117.5
+620.00732 2486.8
+621.87207 1378.5
+622.37354 1107.7
+623.77094 720.0
+636.08075 964.2
+636.33472 2483.6
+636.58105 3136.8
+636.83685 1071.1
+637.85748 760.6
+640.58765 6453.2
+640.83838 9532.5
+641.08862 10764.8
+641.34009 3825.1
+641.58734 1694.2
+645.97272 787.2
+646.97711 2820.5
+647.30634 1525.4
+650.35767 804.0
+650.56738 889.3
+650.81921 778.6
+650.98535 1431.9
+651.01428 1761.2
+651.31635 1080.0
+651.34991 1225.6
+655.84119 915.6
+656.08252 1077.6
+656.68469 5914.5
+657.01953 6923.3
+657.35565 3267.3
+657.68872 1741.6
+659.35303 1165.7
+660.34009 1186.4
+660.58704 1021.6
+660.84387 1755.3
+661.86566 2207.5
+662.36938 1620.3
+666.96521 611.0
+676.63281 789.0
+701.37244 3911.5
+701.87103 3465.9
+702.37274 1707.4
+705.70593 1710.9
+706.04205 2250.8
+706.37579 962.2
+711.71277 3301.6
+712.04596 6378.8
+712.37982 4298.5
+712.71545 1573.1
+724.86578 697.9
+732.35535 20455.9
+733.35791 7597.7
+734.36127 1995.2
+737.06873 702.5
+743.36926 977.2
+743.61792 1362.1
+743.70264 1246.5
+748.70984 5425.8
+749.04169 14482.9
+749.37457 11498.0
+749.45093 998.6
+749.70831 8617.6
+750.04047 3056.6
+750.37872 1666.9
+750.90485 2813.4
+751.40784 2624.5
+754.71313 58265.5
+755.04761 78008.8
+755.38190 59222.7
+755.71582 25557.0
+756.05078 8084.0
+756.39038 1703.0
+756.89703 1577.0
+757.38922 2193.8
+757.88495 1277.7
+765.89288 8505.9
+766.39362 7642.3
+766.89801 2724.5
+767.40222 1013.2
+768.86835 7520.8
+769.37073 6210.9
+769.87274 2852.7
+776.39545 2155.9
+776.72784 1324.5
+781.73114 3817.7
+782.06494 7144.3
+782.39734 8829.5
+782.73315 7533.7
+783.06335 2701.1
+787.73608 39417.5
+788.07031 54998.4
+788.40491 39579.8
+788.73895 18524.4
+789.07233 5949.3
+789.40637 2358.5
+793.45917 1103.3
+800.43903 2100.2
+800.94025 3285.5
+801.44183 845.6
+811.45239 984.2
+814.76105 1576.4
+815.08887 5719.1
+815.42230 8769.8
+815.75189 3641.8
+815.92847 5517.8
+816.08636 2071.6
+816.43481 3189.6
+816.89478 3981.1
+817.39532 2521.0
+817.90277 1728.8
+820.75891 25118.0
+821.09314 44277.9
+821.42743 34452.1
+821.76117 15504.4
+822.09656 5880.9
+825.41077 22211.8
+825.91254 23468.2
+826.41406 13398.9
+826.91443 4262.3
+827.41504 1264.7
+830.42487 1186.7
+830.92224 2305.7
+831.41467 734.7
+835.04785 757.6
+839.42706 4037.0
+839.92432 3968.8
+840.43500 1959.8
+843.37366 1235.2
+847.77832 1300.5
+848.10693 2714.3
+848.43994 3584.8
+848.77356 2785.6
+850.48065 1271.4
+853.78278 18307.0
+854.11548 32833.3
+854.44977 24034.9
+854.78406 13004.5
+855.11737 4818.2
+855.44989 1632.6
+861.39746 13954.4
+862.40033 6427.8
+863.40234 2112.9
+864.96088 4264.1
+865.46112 4493.5
+865.96344 1999.4
+866.47455 1032.7
+874.94635 2727.2
+875.44855 2204.0
+875.94464 1150.9
+876.45331 1222.4
+888.96338 1649.0
+889.46790 1714.5
+889.96216 922.8
+903.98077 1451.3
+914.49249 992.6
+914.99329 1837.4
+915.97913 798.0
+916.44946 1191.4
+916.93982 989.2
+918.45929 3909.4
+918.96167 2933.6
+919.46191 2447.4
+919.96600 916.3
+928.44348 2435.2
+928.95581 2713.0
+929.44556 921.3
+930.48676 1017.4
+933.50336 1456.1
+934.49792 1027.4
+938.49792 3080.6
+938.99139 2797.2
+939.49988 2888.4
+945.46600 3764.3
+945.96863 5127.4
+946.46594 1933.9
+951.51947 1536.7
+952.51355 947.6
+956.94501 1034.9
+969.52631 858.3
+972.42438 829.5
+975.97302 3550.8
+976.47522 4703.7
+976.97430 1614.9
+977.47736 1064.9
+985.02289 1183.8
+988.03229 872.1
+988.53308 1178.5
+989.45361 2173.0
+989.57434 558.2
+993.52716 2644.2
+994.03217 5038.8
+994.53125 4008.0
+995.50818 1393.2
+996.00598 895.9
+1018.61285 603.2
+1032.50085 1215.9
+1033.02319 1343.3
+1045.48120 1343.1
+1045.97961 847.5
+1046.49072 857.4
+1050.58899 789.6
+1053.99634 5193.2
+1054.49915 7792.4
+1055.00037 4632.2
+1055.49622 2616.2
+1059.52625 793.0
+1067.06885 1777.2
+1067.56482 1498.2
+1068.06738 1191.6
+1103.54382 1278.9
+1104.02771 2808.8
+1104.53503 2128.9
+1105.02661 1869.4
+1123.05933 1714.3
+1123.55310 1543.4
+1124.06641 979.8
+1124.56567 788.4
+1131.56738 9850.6
+1132.06604 11868.2
+1132.56934 8317.7
+1133.06824 3137.7
+1133.56165 1230.5
+1151.05408 668.3
+1158.09888 1074.1
+1163.03625 768.6
+1181.59778 1244.1
+1197.97412 3287.1
+1208.11865 672.5
+1218.53162 1842.4
+1219.52942 1568.0
+1382.59314 846.1
+1494.67517 1324.7
+1495.68140 1068.9
+1525.35156 813.5
+1529.59998 652.5
+1582.43884 628.8
+1604.87964 808.8
+1708.74072 592.8
+1773.78943 660.1
+1785.25171 656.2
+1878.80896 580.8
+1878.93066 578.2
+1879.12244 1152.8
+1879.52002 20457.0
+1880.08826 1182.7
+1884.35608 601.5
+1907.05481 7491.3
+1930.49622 1172.0
+1945.76465 786.5
+S	2259	2259	516.5411846
+Z	4	2062.13344
+148.65205 581.1
+159.06548 604.9
+165.76831 755.2
+175.11832 2195.7
+183.11159 714.2
+185.11557 2460.7
+188.24538 508.3
+188.25838 779.6
+188.26868 778.4
+188.27864 1136.5
+188.29082 1285.0
+188.29918 1218.2
+188.31050 728.9
+188.33150 618.1
+192.70927 542.1
+198.90585 1167.5
+199.19086 986.2
+199.20471 609.6
+199.22578 607.4
+199.25867 832.3
+199.27193 862.9
+199.27881 710.9
+199.28868 2548.0
+199.30444 1096.8
+199.38670 1163.3
+201.12349 2056.0
+236.33733 555.4
+237.08224 594.1
+249.29300 550.6
+255.28998 697.6
+271.65039 582.3
+272.17130 3756.3
+273.17542 679.0
+321.67273 865.5
+325.64297 636.4
+327.70667 781.0
+336.20758 1370.9
+341.20139 1204.4
+341.70190 799.6
+344.14108 680.6
+345.40875 658.4
+350.20480 6921.7
+350.70612 3342.9
+351.21341 4563.8
+352.21759 949.9
+369.22388 118702.5
+370.22769 26223.9
+370.71729 777.5
+371.22989 2729.6
+391.84637 531.8
+396.21078 1003.8
+427.54715 835.3
+427.71957 1279.9
+437.23969 601.9
+437.57254 713.4
+441.71490 719.9
+442.21985 945.5
+455.24750 7423.7
+455.58160 11592.2
+455.91541 6264.0
+456.24936 3034.9
+474.27588 688.9
+482.30722 14122.8
+482.65704 581.7
+482.92969 984.0
+483.31091 4087.8
+484.25858 1963.8
+484.30826 714.9
+484.58865 957.8
+485.26340 580.7
+497.27469 2146.4
+497.60971 1092.7
+497.94180 610.2
+499.28403 2417.8
+500.28870 1203.5
+506.61417 714.0
+512.51691 572.5
+527.61090 2754.4
+527.94598 3887.5
+528.28046 2857.6
+532.47723 1893.2
+534.96997 9436.1
+535.30444 13409.6
+535.63867 8362.5
+535.97302 3972.8
+536.28864 1884.5
+536.62396 2120.0
+544.57599 631.1
+545.04022 623.8
+549.15857 604.1
+555.97382 4671.2
+556.30859 7121.8
+556.64331 6150.2
+556.97791 3507.1
+565.30627 13625.6
+565.64044 21524.1
+565.97455 16220.5
+566.30853 6081.8
+566.63934 1756.7
+574.31866 1133.2
+574.64984 728.8
+586.32043 818.9
+592.96320 663.0
+606.32465 846.8
+606.65875 1202.7
+606.99463 641.1
+612.33112 11364.7
+612.66211 15244.9
+612.99561 11469.9
+613.33185 6230.9
+613.66345 1520.8
+673.35522 757.5
+675.88086 866.4
+676.63861 1250.3
+682.36487 17547.1
+682.86658 21965.8
+683.36774 12821.3
+683.86652 4487.2
+687.37585 676.8
+699.40118 6260.2
+700.40466 4245.0
+701.40820 1674.5
+710.38293 760.0
+710.82117 567.3
+710.89856 5227.6
+711.40149 4432.1
+711.90302 2493.4
+712.40369 738.4
+719.41479 2132.8
+719.91571 3622.9
+720.41260 1884.6
+725.88550 1323.4
+726.38208 1679.0
+727.39661 653.2
+736.89758 761.0
+739.43121 1273.1
+740.41919 629.9
+745.41040 24291.8
+745.91101 32887.2
+746.41278 19146.9
+746.91376 6290.7
+747.41711 1616.8
+755.39612 2469.6
+755.89703 2442.6
+756.39807 1566.6
+756.90320 737.4
+758.79877 576.5
+760.42584 968.9
+782.40625 3010.2
+782.90497 2677.4
+783.40759 1467.7
+790.91449 53138.1
+791.41541 76939.4
+791.91650 51144.2
+792.41772 21488.9
+792.91815 6054.1
+793.41711 1055.7
+795.60767 871.8
+802.57373 728.8
+812.93237 902.1
+847.45575 5768.5
+847.95770 11936.1
+848.45905 8271.6
+848.95868 3212.5
+874.25427 555.8
+893.26776 652.1
+1057.68469 749.6
+1184.62207 704.9
+1188.15588 663.6
+1197.04907 697.3
+1198.06104 3477.1
+1270.50977 652.4
+1501.47009 734.0
+1525.41687 720.1
+1635.89063 668.2
+1755.19702 640.1
+1776.83179 649.9
+1777.52380 587.3
+1875.02612 667.7
+1876.23145 634.0
+1877.99353 729.2
+1878.52661 1000.1
+1879.17981 1392.0
+1879.53894 20056.2
+1879.88684 1065.3
+1881.13635 971.1
+1906.48291 783.4
+1907.00757 7439.4
+1930.55798 710.1
+S	2261	2261	680.3693721
+Z	4	2717.44619
+177.72246 659.1
+188.20876 596.4
+188.26424 1943.4
+188.28731 2298.2
+188.30209 2018.0
+188.32877 697.6
+188.36697 758.5
+198.90068 913.2
+199.18968 812.6
+199.19826 868.4
+199.20837 571.7
+199.27277 910.3
+199.28003 1032.7
+199.28868 2316.3
+199.29691 1682.0
+199.33182 521.1
+199.38649 682.3
+199.39265 606.6
+213.47055 616.4
+214.53215 599.0
+221.22139 549.0
+266.96286 757.7
+271.49930 732.9
+300.56641 597.2
+323.52789 718.5
+342.29611 715.2
+355.88266 580.8
+373.20795 916.1
+426.99576 630.4
+438.26935 1151.3
+456.28165 1011.0
+456.57578 597.2
+482.68683 782.5
+511.39841 585.8
+532.42688 1674.1
+543.10590 595.3
+573.80713 930.4
+585.28601 4252.5
+603.32336 933.5
+614.00330 1271.9
+614.30310 640.2
+615.35211 652.6
+627.01276 600.0
+631.84711 2654.3
+632.35144 1001.1
+640.58630 933.0
+640.85400 2378.6
+641.09418 946.1
+641.35016 902.2
+649.85620 2463.4
+650.35840 901.6
+652.85504 874.9
+653.71594 749.1
+656.24939 754.7
+656.67560 753.2
+658.37579 856.9
+661.68677 858.2
+661.86243 11562.5
+662.36304 4098.5
+662.53741 763.1
+662.86481 1076.2
+663.02258 991.9
+663.15070 1009.3
+665.07269 651.9
+712.04517 1079.9
+712.69037 1391.4
+713.35626 648.7
+731.16284 833.9
+732.35529 2499.2
+733.58362 894.7
+742.43671 741.8
+746.41803 2170.1
+748.71094 681.5
+749.03809 2308.2
+749.37213 951.7
+754.57312 680.7
+754.71448 8958.9
+755.04736 12186.7
+755.38177 5266.4
+755.71796 788.6
+761.98364 685.6
+765.32117 738.6
+765.62134 1091.4
+766.38678 1043.1
+768.87830 853.0
+773.37274 839.7
+781.73975 668.0
+782.06494 1228.8
+782.25299 697.2
+782.39362 1443.0
+787.73730 5577.6
+788.07056 8483.6
+788.40411 2858.4
+789.92755 2040.4
+790.43280 1666.3
+795.61108 1241.9
+802.92151 698.2
+810.49579 811.1
+815.08301 987.3
+815.42194 1637.9
+816.89740 1809.1
+820.75677 4029.6
+821.09485 4831.3
+821.42712 2497.4
+825.40942 2852.7
+825.91449 2330.4
+846.46875 927.1
+846.97424 1262.9
+848.10211 983.3
+851.91138 1170.0
+852.40558 1170.1
+852.72791 1139.7
+853.77991 3465.1
+854.10992 2848.7
+854.45282 1779.4
+861.39661 1428.5
+903.98602 3797.8
+904.48499 2625.0
+904.98260 1034.0
+910.20123 756.6
+1014.89490 769.7
+1057.27637 942.6
+1110.60278 770.9
+1131.56213 1289.9
+1132.05933 963.0
+1197.95117 3314.8
+1290.97461 604.3
+1375.31348 609.7
+1850.54688 830.4
+1878.14941 753.7
+1878.72461 1016.8
+1879.16821 2675.0
+1879.60071 19426.6
+1880.19507 2315.8
+1880.65552 671.7
+1881.03589 945.2
+1881.61047 799.4
+1907.05273 7490.1
+1918.87146 691.7
+1920.84387 685.9
+1930.73608 891.2
+S	2262	2262	516.5477171
+Z	4	2062.15957
+134.39424 589.3
+139.02660 624.0
+139.50694 557.0
+153.64276 539.5
+165.76566 650.1
+175.11830 881.7
+182.76926 538.2
+182.78200 839.1
+185.11522 1224.9
+188.28943 2266.7
+188.29967 2061.4
+188.31668 1533.1
+196.40327 626.0
+198.90318 1097.1
+199.18973 745.5
+199.19730 618.8
+199.26468 1397.5
+199.28041 1189.7
+199.28850 1958.5
+199.30473 918.2
+199.32341 699.8
+199.36203 645.6
+199.38716 827.2
+201.12280 835.2
+217.62744 531.7
+240.22717 610.4
+243.84895 641.0
+261.09824 637.3
+268.79987 600.6
+272.17102 2404.5
+281.22562 611.1
+291.08115 530.5
+294.17081 527.5
+308.89908 743.2
+319.17242 1004.0
+321.67215 1221.9
+323.19864 614.5
+324.47601 528.2
+341.20163 735.8
+350.20441 5037.2
+350.70609 1998.6
+351.21426 2233.2
+369.22385 81753.9
+370.22775 15047.2
+370.30911 563.1
+371.23022 1690.9
+374.23978 1850.7
+375.23749 501.8
+390.58450 661.8
+394.22806 1195.4
+395.50381 548.7
+400.84607 542.8
+401.14749 630.4
+403.58713 630.8
+409.24545 842.9
+427.53964 659.9
+427.71884 956.6
+448.22351 810.8
+450.58347 626.5
+455.24750 7886.6
+455.58139 9089.3
+455.91544 2827.7
+466.24072 1597.9
+474.27252 1318.4
+480.27832 619.0
+482.30713 10555.9
+482.53925 646.4
+483.31082 2484.6
+484.26178 1177.8
+484.59036 1048.3
+487.32208 6034.2
+488.32642 1351.8
+497.25687 2876.0
+497.61011 1661.4
+497.76959 3026.1
+497.94229 972.6
+498.28009 734.1
+499.28754 2391.2
+501.23703 2417.2
+501.73849 1280.4
+506.43347 741.2
+523.80920 623.6
+525.24603 820.2
+527.61157 1368.4
+527.94611 1781.5
+528.27820 698.2
+532.47931 1963.4
+534.97021 7501.7
+535.30438 8275.2
+535.63855 4946.5
+535.97437 1405.9
+536.62439 965.5
+549.14886 597.4
+550.30011 901.4
+555.97522 4827.6
+556.30939 6311.2
+556.64197 2790.2
+558.74927 5513.0
+559.25195 3907.0
+559.74921 1101.4
+565.30615 11183.3
+565.64050 12421.5
+565.97418 7697.8
+566.30804 2264.5
+573.98297 845.9
+574.31799 1126.6
+603.77991 767.8
+604.29254 859.6
+606.31982 1146.9
+608.84827 791.0
+609.35193 698.1
+612.33264 9170.3
+612.66168 7884.9
+612.99646 2843.7
+613.37164 1990.5
+615.29272 1234.3
+615.78876 689.9
+616.29706 741.8
+633.16937 607.6
+638.32495 1039.6
+655.86633 635.1
+664.39832 562.9
+666.38208 550.9
+673.40015 931.3
+676.64343 1007.5
+682.36469 14934.5
+682.86603 13605.6
+683.36731 5195.1
+683.86847 1674.8
+694.26331 648.6
+699.40198 5806.3
+700.40405 1833.4
+701.40656 916.3
+710.89819 4066.2
+711.40100 3786.3
+711.90192 1490.0
+719.41357 2606.7
+719.91370 2501.9
+725.88422 1554.1
+726.38159 1377.5
+726.88867 693.1
+739.42413 796.4
+745.41022 21129.8
+745.91125 21253.9
+746.41406 9907.3
+746.91541 3528.5
+755.39392 2224.7
+755.89777 1397.2
+756.39728 655.9
+774.62439 600.5
+781.91119 1290.7
+782.40375 1718.2
+782.90771 1915.6
+783.40479 1007.9
+785.86279 544.4
+787.43915 915.6
+790.91473 48201.1
+791.41565 50822.5
+791.91656 27040.4
+792.41718 9390.5
+792.91797 1488.4
+806.89203 652.3
+847.45642 5513.3
+847.95697 7608.1
+848.45959 4657.5
+848.95947 1326.1
+854.42926 732.6
+1057.24963 924.4
+1059.49744 1112.9
+1130.81848 601.3
+1187.91101 831.8
+1190.59656 579.4
+1198.07178 3297.2
+1342.36206 606.4
+1525.42102 856.6
+1620.79968 653.0
+1870.20190 1072.9
+1877.66919 927.4
+1879.53284 20142.5
+1879.83606 2568.2
+1881.14832 623.8
+1906.99939 7107.1
+1941.54053 658.8
+1955.95471 677.2
+1983.57593 640.3
+1987.24841 653.6
+S	2263	2263	681.1223246
+Z	4	2720.458
+187.53271 564.8
+188.19893 745.6
+188.24849 624.3
+188.26994 1134.2
+188.28110 1382.6
+188.28752 1554.9
+188.30400 1242.9
+188.31158 1334.3
+188.32516 776.8
+198.90303 1144.9
+199.18544 732.6
+199.19258 711.0
+199.25368 744.1
+199.26787 1377.2
+199.29033 3122.3
+199.32144 1043.4
+199.38895 1018.2
+217.47647 586.9
+233.58328 574.1
+238.70377 724.4
+245.59015 643.8
+277.08347 682.8
+277.74359 633.4
+280.20056 665.9
+295.53683 584.9
+332.99924 625.9
+357.20984 902.1
+373.20743 650.1
+375.04837 570.6
+381.28989 720.5
+410.11938 589.3
+427.56262 823.6
+428.23517 670.3
+438.27084 816.0
+456.28165 1414.0
+482.68201 762.3
+486.91830 620.7
+487.33646 835.3
+512.91748 671.9
+523.84082 560.5
+532.50311 1812.4
+540.81335 1014.8
+585.28644 3431.4
+585.80487 1951.4
+586.05573 1274.1
+586.55878 790.5
+622.84235 1037.8
+623.34033 680.4
+626.89673 843.4
+630.43195 867.2
+631.84570 3508.3
+632.34937 1766.9
+636.33240 981.3
+640.58899 1439.4
+640.85150 2299.9
+641.35413 2972.1
+649.05621 1208.6
+649.35748 987.1
+649.85864 2196.3
+650.36127 1526.8
+653.35266 842.9
+654.72974 1061.6
+655.05646 1329.0
+656.68378 1017.1
+657.32513 840.0
+658.36469 1018.0
+661.86292 16223.3
+662.36395 11521.7
+662.86353 3739.6
+663.36340 745.5
+664.33746 801.6
+676.64362 1220.7
+680.32141 704.7
+704.70044 551.9
+708.97217 708.1
+712.69141 784.1
+713.02844 760.9
+714.88800 648.6
+718.89532 986.7
+718.97998 751.2
+719.63550 623.4
+724.62091 814.9
+725.44806 922.3
+727.46051 855.6
+729.16229 977.9
+729.60266 695.8
+729.72571 860.0
+732.35199 1892.2
+732.96545 689.5
+733.80139 690.6
+734.62585 613.7
+735.62640 893.7
+736.43640 672.4
+743.26215 768.9
+744.37006 727.6
+744.64569 867.8
+746.41376 2099.5
+746.92065 1127.5
+747.41492 1798.6
+748.71832 862.8
+749.03827 1985.2
+749.37299 1286.4
+753.11536 655.7
+754.71332 11366.8
+755.04633 9036.3
+755.37952 4326.1
+762.76917 876.9
+764.97034 779.3
+768.87299 1072.2
+783.12897 1092.7
+786.99908 1002.3
+787.73419 7680.8
+788.07031 7002.9
+788.40515 1651.1
+789.92816 2778.5
+790.43243 2255.5
+790.92871 998.7
+792.18842 827.1
+795.60663 900.1
+800.45325 924.9
+815.08099 1198.7
+815.42108 805.0
+815.73755 800.6
+820.75818 7071.6
+821.09198 4720.4
+821.42511 1848.6
+825.09100 805.4
+825.41284 3427.8
+825.91223 2867.3
+830.77917 830.5
+834.44751 689.8
+839.42590 1028.5
+851.91870 1685.1
+852.42023 2149.6
+852.73187 849.0
+852.91663 1421.4
+853.78046 4729.5
+854.11432 5435.1
+854.46198 904.7
+861.39838 1214.7
+903.98364 3750.8
+904.49084 4281.1
+904.98779 2287.5
+905.48474 945.5
+951.62097 745.1
+1054.00830 909.2
+1057.25903 1210.4
+1103.51746 832.6
+1131.56995 1343.1
+1191.09851 698.2
+1198.12524 2958.8
+1324.52344 756.2
+1525.02417 707.7
+1657.72803 823.0
+1771.60706 659.5
+1776.91174 947.0
+1876.18506 760.2
+1877.37769 740.9
+1879.14905 961.5
+1879.53967 20337.9
+1880.06592 727.8
+1907.05103 7702.7
+1910.04456 735.1
+S	2265	2265	1880.03440793
+Z	3	5636.828
+Z	2	3758.221
+530.47784 706.6
+532.50079 1554.5
+534.35962 649.3
+534.84497 577.7
+606.30701 640.2
+630.44110 728.5
+631.68225 677.0
+642.83209 648.5
+676.63672 971.5
+798.18683 650.2
+861.59070 643.5
+1198.12463 3455.4
+1222.96460 677.8
+1234.37988 703.4
+1561.50720 635.0
+1672.01208 689.9
+1712.24512 862.8
+1776.83008 757.6
+1861.21069 598.4
+1870.40930 1164.8
+1879.53674 19490.6
+1880.02869 1331.9
+1907.09131 7257.9
+1907.49072 792.5
+1982.51538 673.0
+S	2266	2266	1907.48840793
+Z	3	5719.19
+Z	2	3813.129
+519.31934 603.6
+532.50214 2033.0
+543.65936 680.5
+739.36542 572.5
+796.89294 718.8
+806.18701 633.6
+817.43219 562.6
+858.04578 707.2
+1117.75269 589.7
+1163.34033 657.9
+1179.60974 567.5
+1188.12781 1014.2
+1198.12561 3340.6
+1333.23547 690.1
+1401.10254 622.1
+1407.93408 639.7
+1525.35852 683.6
+1592.86279 582.7
+1624.39294 590.2
+1776.95569 694.7
+1831.34705 672.6
+1878.23682 555.6
+1878.49658 840.5
+1879.01184 1102.7
+1879.58862 19975.9
+1881.53528 729.8
+1907.05774 7270.9
+1930.55029 825.8
+1998.22144 654.6
+S	2267	2267	1198.47499127
+Z	2	2395.102
+Z	3	3592.15
+337.37375 621.9
+342.42508 556.0
+347.41907 581.7
+350.28552 629.1
+381.38773 982.9
+387.32248 804.0
+398.10553 541.7
+419.32837 565.4
+425.82452 822.1
+437.00555 738.2
+521.33978 571.0
+532.52997 2128.0
+541.26489 628.6
+543.35187 635.9
+581.37830 558.5
+600.14063 681.3
+673.26141 613.4
+676.63654 975.6
+730.14691 672.1
+795.60413 695.8
+809.78839 672.9
+874.96259 545.2
+888.55084 612.4
+926.51923 612.8
+951.54742 1076.5
+1008.64111 597.3
+1085.08704 646.1
+1092.17224 683.1
+1198.18958 3276.0
+1370.04175 579.9
+1481.11316 602.4
+1492.22351 693.9
+1785.32495 735.7
+1870.44446 956.1
+1879.52441 20012.5
+1879.79456 2677.4
+1907.09717 6881.8
+1993.84375 615.1
+S	2269	2269	1880.0238246
+Z	2	3758.2
+Z	3	5636.796
+532.51727 1968.6
+676.66510 1028.3
+748.56268 660.6
+879.05908 582.4
+883.82312 620.7
+1198.16199 3139.1
+1235.63123 782.8
+1335.87256 588.0
+1407.97192 717.8
+1557.97192 619.9
+1870.26880 1326.9
+1876.70764 606.1
+1879.20825 3267.7
+1879.57898 19459.8
+1879.92273 2691.7
+1881.75781 1016.0
+1882.43616 714.2
+1907.09509 7403.4
+S	2270	2270	1907.48899127
+Z	2	3813.13
+Z	3	5719.192
+520.23480 739.6
+532.53064 2251.3
+549.15057 819.1
+630.40649 724.3
+670.54919 585.2
+676.63910 784.4
+767.90759 648.5
+795.60364 883.1
+826.05243 675.2
+904.27612 529.0
+906.66809 594.6
+918.61700 618.7
+968.33350 646.7
+1019.64960 771.4
+1187.41528 700.7
+1198.18579 3548.8
+1360.23840 596.7
+1410.87000 628.4
+1729.05493 608.8
+1737.51538 609.2
+1777.00623 844.6
+1816.12280 625.0
+1868.70544 609.2
+1870.16162 757.3
+1877.62195 584.7
+1879.53882 20151.1
+1890.91479 661.3
+1907.08069 7663.8
+1930.60291 1149.0
+S	2271	2271	516.5374021
+Z	4	2062.11831
+130.36357 535.7
+132.68187 536.9
+142.34468 671.5
+143.37109 671.1
+146.83313 525.6
+146.92693 629.8
+165.77045 833.1
+169.51476 676.2
+175.11847 1407.1
+177.93979 530.8
+181.28297 594.2
+181.71405 523.7
+185.11549 1458.1
+188.23894 588.5
+188.25835 780.2
+188.26692 598.4
+188.27321 751.5
+188.28186 1153.8
+188.29175 1303.5
+188.29871 828.3
+188.30798 978.5
+188.31969 735.7
+188.39401 679.0
+198.90561 770.5
+199.20964 1003.5
+199.27126 1035.2
+199.28690 911.8
+199.29648 2272.8
+199.30608 1713.4
+199.33157 731.7
+199.34897 572.9
+199.39459 1104.0
+199.40501 842.9
+199.42703 594.0
+201.12340 1536.1
+204.37309 564.8
+205.00705 542.3
+224.82558 482.7
+226.11638 581.0
+234.25401 631.1
+251.71922 605.7
+269.85416 577.9
+271.62445 740.1
+272.17096 2332.0
+285.08606 604.7
+314.77805 499.6
+318.84439 511.3
+322.17361 596.1
+322.77820 550.8
+324.97562 635.9
+327.20203 1158.8
+335.79755 534.7
+336.20676 1667.6
+336.71002 677.4
+341.19882 858.5
+342.28143 595.7
+350.20486 6098.8
+350.70654 2806.7
+351.21469 3173.3
+352.21347 885.2
+369.22385 95775.7
+370.22787 19185.6
+370.71747 1258.8
+371.22977 2323.3
+372.97665 579.3
+389.37845 516.6
+396.21365 1305.8
+427.55786 717.4
+428.22058 1213.8
+441.71661 1118.2
+442.21909 725.7
+455.24692 8910.1
+455.58130 9350.3
+455.91458 5245.9
+456.24896 1357.3
+461.13602 535.8
+466.24353 845.9
+479.94452 1087.3
+480.28244 1018.9
+482.30695 10306.9
+483.31067 3991.6
+484.25992 2412.3
+484.59247 2283.9
+490.01056 610.1
+497.27792 1327.0
+497.94473 749.0
+498.25662 981.8
+499.28601 3061.6
+500.29050 714.4
+511.71179 535.5
+527.61316 976.4
+527.94666 3258.8
+528.27869 2112.3
+528.61981 686.0
+532.50775 2283.8
+534.97021 7455.6
+535.30408 12582.7
+535.63940 7228.0
+535.97321 2576.1
+536.28510 1387.5
+536.62225 746.3
+536.96124 975.8
+550.30432 857.1
+550.64142 847.6
+552.78528 535.1
+555.97528 3952.8
+556.30872 5604.3
+556.64294 4725.7
+556.97729 1900.1
+558.74945 1833.3
+565.30603 8609.2
+565.64056 15132.1
+565.97510 10688.5
+566.30927 5035.3
+574.31732 862.6
+574.64722 597.6
+586.81982 942.3
+606.66010 858.8
+606.99323 899.6
+608.85443 821.9
+612.33209 12031.1
+612.66180 12551.4
+612.99597 8089.6
+613.35883 3620.0
+614.37476 952.3
+642.33533 670.0
+648.34320 549.2
+669.86047 3196.9
+677.85016 4431.0
+678.34418 859.0
+682.36499 17290.3
+682.86688 20736.2
+683.36853 11591.1
+683.86859 3811.0
+699.40216 7150.4
+700.40338 4284.3
+702.38708 637.3
+710.89880 4524.2
+711.40088 2966.2
+711.90173 3169.3
+712.40594 879.5
+719.40863 1164.6
+719.91516 2151.7
+720.41467 748.2
+725.88599 1605.5
+726.38483 2601.7
+731.17139 799.4
+736.40564 1003.1
+737.40796 762.1
+739.42072 1099.0
+744.73596 616.8
+745.41028 20117.0
+745.91107 24916.9
+746.41296 15178.1
+746.91492 4234.3
+747.41272 1012.1
+755.39679 1074.8
+755.89984 1991.7
+756.40143 1991.8
+760.91858 849.0
+781.90961 1503.2
+782.40601 2595.9
+782.90350 3045.4
+783.40131 1485.4
+786.58612 534.3
+790.91431 39481.0
+791.41553 53423.3
+791.91656 35888.6
+792.41779 14757.7
+792.91760 2284.2
+793.41565 763.2
+795.61517 929.6
+847.45532 6275.2
+847.95789 6669.7
+848.45850 6750.3
+848.96185 2330.9
+869.02808 540.0
+940.26611 622.9
+1057.22351 736.9
+1198.13916 3494.8
+1317.84778 596.1
+1492.29956 708.7
+1524.14075 604.4
+1671.33203 576.8
+1695.86230 630.2
+1837.12878 633.8
+1870.25439 933.0
+1877.46338 702.5
+1878.90112 1765.9
+1879.50867 18786.2
+1879.77515 4209.3
+1880.15381 1452.2
+1907.03601 7282.8
+1907.29639 1051.4
+1913.97864 545.7
+1921.45911 671.9
+1930.68262 1301.8
+S	2273	2273	668.3423246
+Z	2	1334.669
+177.79819 593.4
+182.78503 715.2
+188.22710 516.4
+188.23331 570.3
+188.25920 1819.9
+188.28059 2046.1
+188.28897 1885.6
+188.30244 1947.0
+188.31900 1439.3
+188.33836 543.3
+195.63853 525.9
+195.77525 667.5
+198.90575 739.5
+199.19380 728.8
+199.29231 2677.6
+199.32263 817.0
+199.36838 567.1
+199.39001 844.9
+202.73880 628.1
+208.18607 705.3
+218.48622 567.3
+235.10765 1569.7
+265.47617 562.3
+272.13492 3406.4
+272.28311 569.5
+280.18793 589.2
+289.16168 17524.4
+290.16556 997.2
+303.13278 612.5
+308.90564 758.1
+313.78738 642.5
+316.11349 8279.8
+348.33035 647.5
+350.18549 652.0
+353.98941 703.8
+366.78741 576.2
+367.20184 624.5
+377.14517 787.7
+381.36990 610.2
+385.21790 1705.3
+402.24524 32977.2
+403.24924 4165.1
+415.10822 679.8
+417.17603 692.5
+425.66385 538.8
+435.18649 6688.5
+436.19168 1051.6
+442.48148 583.1
+462.42404 550.8
+462.68927 731.3
+463.18137 5019.3
+464.18347 911.3
+476.27493 648.9
+482.67487 715.5
+488.20752 677.6
+498.30200 1479.3
+500.94458 603.4
+504.60641 596.6
+515.32886 53646.6
+516.33179 12721.8
+517.33374 1133.1
+527.90332 630.5
+530.92230 714.1
+531.29688 885.9
+532.20050 943.9
+532.54193 1387.8
+542.18695 1186.4
+549.16925 719.3
+550.36414 773.7
+558.78033 2659.0
+559.20947 1477.9
+559.27362 5740.8
+559.77484 2094.5
+560.19635 4239.6
+561.19995 1365.0
+561.28485 852.0
+567.78723 3783.1
+568.28961 1364.7
+571.20679 636.7
+577.22437 8132.9
+578.22626 1190.1
+581.31512 728.3
+588.31232 1299.5
+589.22693 773.9
+599.19910 657.2
+599.28845 581.0
+603.21814 730.7
+606.25378 668.6
+609.62915 762.4
+616.23529 2201.3
+617.21771 6695.3
+618.22125 1897.8
+620.24615 1732.3
+630.42004 823.3
+634.24701 3719.9
+635.25946 716.8
+636.80164 1100.8
+637.79968 914.5
+641.30414 775.8
+641.79700 1491.9
+643.98749 832.9
+644.30835 726.2
+645.31451 1537.8
+649.81519 4900.4
+650.30927 8529.7
+650.80823 4786.3
+651.30725 4502.5
+676.63965 952.3
+698.81042 855.8
+701.40808 16681.8
+702.41010 6722.9
+703.41339 1523.8
+708.60980 691.7
+716.30554 849.0
+717.30920 810.6
+717.89960 788.7
+725.34784 886.2
+729.36035 1261.8
+729.86395 956.0
+740.86926 705.9
+742.03937 1289.2
+742.37610 1483.0
+758.42914 37942.9
+759.43213 15491.2
+760.43140 2639.5
+762.69031 598.5
+762.72650 558.6
+763.38220 813.4
+773.86249 996.8
+775.30688 1285.6
+775.72095 1221.3
+782.90363 886.6
+785.28955 2018.8
+792.32745 998.8
+795.73706 2642.0
+796.07196 4201.8
+796.40387 2761.9
+796.74365 1176.7
+801.07635 1612.3
+801.40887 1144.8
+802.31525 4305.8
+803.29675 11223.0
+804.30206 4696.6
+805.31342 1526.9
+806.41125 3747.3
+806.74799 6953.2
+807.08032 4629.7
+807.41602 2230.9
+807.75049 1611.0
+811.98553 788.3
+815.35248 607.3
+819.73560 1052.7
+820.06982 1844.5
+820.32440 8811.3
+820.40436 1296.6
+821.33057 3003.8
+829.75439 784.1
+833.92883 842.9
+835.42926 1377.0
+835.76013 2050.2
+836.09094 1930.6
+836.42377 1696.4
+855.44501 2928.5
+856.44342 1632.1
+872.47156 27268.6
+873.47540 12201.6
+874.47778 2928.5
+882.91101 3611.1
+883.41028 2041.7
+898.37427 1731.7
+899.37762 1073.0
+914.41687 719.2
+915.39606 3345.5
+916.38135 8248.7
+917.38654 3815.7
+925.57550 656.0
+932.98706 1308.2
+933.40857 6891.8
+934.41229 3248.7
+935.41565 1077.9
+936.44672 1459.3
+936.94482 875.2
+967.47815 657.3
+1002.52136 2409.4
+1003.52075 1643.6
+1011.46063 1167.0
+1019.54022 7480.4
+1019.68103 758.5
+1020.54584 4064.8
+1020.85901 679.5
+1021.54449 886.6
+1028.48547 2469.1
+1029.46631 7092.6
+1030.47058 3224.6
+1031.47253 742.3
+1046.49353 7811.8
+1047.49658 3724.8
+1048.48853 1336.8
+1117.54114 5092.9
+1118.54248 2883.4
+1119.53894 1018.8
+1134.56750 15359.5
+1135.57056 9826.4
+1136.57349 2362.8
+1143.50378 1552.7
+1144.51147 1242.9
+1160.53406 2637.1
+1161.53210 909.4
+1188.31836 762.9
+1198.20911 3214.0
+1397.47339 677.2
+1402.68835 668.8
+1660.69580 629.5
+1723.49292 664.3
+1771.92908 640.3
+1826.30078 660.0
+1870.26624 595.8
+1879.52258 20320.0
+1907.04517 6961.8
+1930.60425 916.2
+S	2274	2274	668.8423246
+Z	2	1335.669
+188.23965 676.4
+188.25703 1333.4
+188.27319 1411.8
+188.28493 1901.0
+188.29324 1814.6
+188.31296 1326.5
+188.32532 1291.1
+199.18391 899.5
+199.20622 661.6
+199.27431 1504.1
+199.28471 2630.7
+199.29337 708.9
+199.31410 753.3
+199.38338 672.2
+235.10695 2813.1
+236.84508 585.1
+255.10834 814.2
+262.32867 641.0
+271.92776 692.1
+272.13519 6177.4
+273.19894 556.8
+289.16177 26801.4
+290.16562 2166.4
+298.10394 1404.2
+303.13281 731.3
+308.02838 609.2
+308.03940 504.9
+316.11374 12690.9
+317.11633 1627.2
+328.04309 702.4
+331.84860 559.5
+349.70889 686.1
+350.48795 597.0
+359.13339 853.5
+367.21002 1032.6
+377.14508 1870.9
+385.21942 3204.7
+402.24536 56112.9
+403.24942 8137.0
+417.17557 780.6
+418.15714 904.3
+427.54776 867.3
+434.16736 1116.7
+435.18695 11020.3
+436.19077 1548.4
+436.74268 814.4
+445.17239 1151.6
+448.18719 979.3
+463.18185 6118.0
+464.18747 1103.8
+488.20972 1003.3
+497.32108 1016.9
+498.30185 2163.8
+498.56793 675.9
+505.22205 836.5
+513.25476 664.7
+514.19147 1393.2
+515.32922 91962.2
+516.33234 24046.8
+517.33496 2054.4
+525.23737 614.0
+531.29053 719.6
+532.20264 2221.9
+532.49115 1929.5
+540.85718 584.3
+542.18622 1775.7
+542.87964 625.8
+550.26367 807.9
+551.28802 803.1
+558.78204 5074.0
+559.21326 2546.9
+559.27460 6786.3
+559.77576 2598.1
+560.19757 7213.1
+561.20129 1798.7
+567.78625 5445.3
+568.28851 3178.3
+571.21606 1269.8
+577.22467 13111.5
+578.22644 3452.4
+584.70331 694.9
+585.78058 995.8
+586.28198 1438.2
+588.31476 1434.1
+590.22418 660.9
+594.26971 651.8
+600.29761 799.0
+616.23578 5171.3
+617.21735 13011.5
+618.22040 3292.7
+619.22040 899.9
+620.24561 2024.0
+630.41370 952.0
+632.30658 1273.4
+634.24622 5515.5
+635.24786 1906.6
+636.30603 1118.5
+636.80060 1346.2
+637.30310 2166.3
+638.05341 754.1
+638.22058 1952.7
+638.31030 1236.4
+641.30090 1864.9
+641.79510 3045.5
+642.29706 1826.6
+643.98737 899.5
+644.31006 665.7
+645.31592 2323.4
+645.81921 1304.3
+646.31995 750.1
+649.81604 7248.4
+650.30914 16650.4
+650.80756 11415.6
+651.30841 5049.9
+651.80151 754.1
+676.63300 904.5
+693.00696 959.5
+693.35229 935.0
+701.40808 28541.9
+702.41205 11387.8
+703.41437 1779.5
+712.84296 965.1
+713.72003 788.3
+714.06091 806.6
+714.35620 844.4
+716.29962 1221.3
+717.31226 978.8
+729.36176 1025.6
+729.85938 778.2
+731.27594 802.2
+732.25635 933.7
+733.33026 1673.2
+741.40344 1556.2
+742.03961 1245.6
+742.36664 1273.8
+743.73804 719.2
+758.42987 61003.6
+759.43262 24022.6
+760.43677 3710.8
+763.06226 708.9
+768.40784 1312.7
+768.74506 1098.2
+775.30353 2398.9
+775.71906 2040.9
+776.05542 2394.7
+776.38849 1565.8
+785.28595 3661.3
+786.29181 1813.7
+792.32965 2117.1
+795.07037 823.2
+795.73615 1794.7
+796.07318 1608.3
+796.40839 1862.2
+797.28516 677.3
+798.77985 708.0
+800.41345 752.4
+800.73975 2352.3
+801.07239 3157.0
+801.40814 1444.0
+802.31537 7450.1
+803.29791 19804.2
+804.30200 7829.1
+805.30615 1471.4
+806.41296 5902.6
+806.74768 9330.1
+807.08234 7273.7
+807.41888 2210.8
+807.73376 952.8
+810.93549 735.8
+811.43579 826.7
+819.39795 940.5
+819.73596 2044.0
+820.32495 14287.1
+820.73804 739.8
+821.32727 6144.5
+822.33325 1050.7
+824.74750 1161.1
+825.08496 821.1
+825.41315 917.5
+829.74969 855.1
+830.07617 1047.3
+830.75140 929.6
+835.42548 1772.8
+835.76007 2573.5
+836.09668 1904.3
+836.43414 987.3
+837.44019 1407.7
+838.75366 681.6
+839.09265 1046.1
+846.41071 889.4
+852.94104 908.7
+853.44348 905.3
+855.44745 4305.1
+856.45313 1792.3
+867.41803 654.2
+872.47217 46426.6
+873.47491 21133.0
+873.87787 750.8
+874.47675 4104.3
+888.39386 1313.0
+889.50934 712.7
+898.37811 3451.9
+899.37146 1473.1
+905.41266 1221.2
+915.39832 5750.0
+916.38159 14587.3
+917.38654 6655.8
+927.93262 1569.2
+928.43170 1061.6
+932.98834 1158.0
+933.40918 13899.4
+934.41290 6520.6
+935.41626 926.1
+936.43756 1526.7
+936.94531 1824.5
+947.25659 771.0
+984.50494 1200.6
+1002.51581 4308.2
+1003.51965 2476.4
+1011.45807 2246.4
+1019.54211 14812.2
+1020.54431 8338.5
+1021.54919 1862.9
+1028.48010 5386.5
+1029.46753 12574.1
+1030.46838 5519.0
+1046.49329 14675.9
+1047.49670 6326.5
+1048.50330 1716.1
+1057.93091 715.4
+1079.32886 650.8
+1116.56409 1397.7
+1117.54211 10051.3
+1118.54517 5465.6
+1119.54846 1131.9
+1126.48657 1318.0
+1134.56738 25597.0
+1135.57068 14885.7
+1136.57312 4669.1
+1142.52368 1089.8
+1143.51001 4171.3
+1144.50879 876.9
+1158.28101 720.9
+1160.53516 5215.2
+1161.53748 1767.4
+1196.79846 678.2
+1198.08655 3240.0
+1509.47852 718.1
+1682.67676 707.5
+1876.18091 743.3
+1878.74487 1005.0
+1879.15405 1884.7
+1879.51038 19640.5
+1879.88123 1939.3
+1906.85901 6835.8
+1907.32324 761.1
+1930.63135 884.3
+S	2275	2275	669.3438246
+Z	2	1336.672
+188.25456 713.9
+188.26471 706.1
+188.27051 954.4
+188.27898 1042.8
+188.28949 1254.9
+188.29803 1303.4
+188.30750 751.5
+188.31299 684.9
+188.31917 768.2
+188.32536 567.4
+188.36835 654.5
+198.90573 780.9
+199.18979 1179.1
+199.27025 979.4
+199.28732 2668.9
+199.29680 1485.0
+199.32980 500.4
+199.38559 954.7
+206.42255 514.0
+216.11653 802.5
+235.10707 1847.5
+243.30684 672.0
+255.10594 750.4
+269.10117 693.2
+271.15121 875.0
+271.47244 708.2
+272.13477 4323.7
+289.16159 24464.4
+290.16452 1314.1
+298.10214 895.0
+305.46671 583.7
+316.11362 13947.6
+317.11731 1432.7
+326.95340 687.8
+333.14417 564.4
+342.29120 621.8
+345.15781 808.1
+350.59219 662.7
+355.00729 727.6
+359.13489 703.5
+365.57477 588.2
+367.20734 1265.1
+377.14612 1379.0
+385.22031 2755.9
+402.24518 47728.4
+403.24844 5198.3
+404.24869 688.9
+418.16098 1388.1
+427.56833 911.6
+434.16638 1076.7
+435.18704 8554.8
+436.19061 1948.6
+448.18015 731.4
+463.18204 5435.6
+469.07657 615.4
+488.21103 966.1
+498.30261 2056.6
+510.27261 1380.7
+514.18756 897.0
+515.32898 80477.3
+516.33209 15251.8
+517.33197 990.1
+531.29474 831.7
+532.20117 2131.4
+532.49231 1455.4
+542.18823 1711.3
+548.28882 682.9
+550.26611 940.7
+557.21826 593.1
+558.78198 3907.2
+559.21106 2468.5
+559.27429 6691.9
+559.77356 2635.6
+560.19751 5925.2
+560.27844 744.3
+561.20087 1284.3
+561.28516 725.4
+567.78741 6458.8
+568.28992 2452.8
+577.22430 12461.5
+578.22870 2300.5
+585.78064 881.9
+588.31097 1243.3
+597.76959 591.7
+599.20343 1624.5
+600.29382 687.4
+602.24377 672.4
+603.21857 1294.7
+616.23553 3797.3
+617.21741 12088.8
+618.22131 3222.0
+620.24725 1764.7
+623.80200 955.7
+630.43817 855.9
+631.22363 709.1
+632.30670 837.1
+634.24567 4526.2
+636.80121 1363.2
+637.30206 2417.9
+638.06122 1243.9
+638.21704 1652.9
+638.31158 1873.3
+638.56006 1048.1
+641.30231 1215.5
+641.79694 2185.9
+642.29840 1294.6
+643.64996 1402.0
+645.31744 3045.2
+645.81720 1314.2
+648.27899 1203.6
+649.81677 7230.3
+650.30927 15506.6
+650.80511 11036.3
+651.30316 4370.6
+676.63086 924.6
+684.58966 708.3
+686.78900 797.3
+693.01294 2073.9
+701.40802 25887.1
+702.41046 7709.4
+714.04547 673.5
+714.25116 824.8
+715.31360 939.8
+716.30212 1025.3
+717.54700 713.9
+717.63007 824.6
+725.68726 1120.4
+729.36169 846.7
+729.85779 1462.9
+730.35138 885.2
+732.26019 852.5
+741.40265 678.7
+742.03351 2487.7
+742.37024 2024.2
+742.70740 1115.8
+756.21674 658.5
+756.65198 802.8
+757.28430 1017.1
+758.42963 54030.4
+759.43262 18361.5
+760.43164 2302.1
+762.76062 581.4
+768.41058 993.6
+768.75153 923.8
+775.30237 3189.6
+775.71997 4463.8
+776.05432 3024.7
+776.39008 1597.5
+781.42920 652.2
+785.28717 3397.0
+786.30072 1487.7
+792.32623 1626.1
+795.60327 1005.4
+796.07178 1611.4
+796.40521 2623.5
+796.74109 1539.0
+797.07574 1896.2
+800.74152 2876.9
+801.07098 2149.4
+801.40546 1105.4
+802.31567 6403.3
+803.29791 18799.4
+804.30255 6114.5
+805.31470 807.7
+806.41559 4921.7
+806.74847 7408.1
+807.08038 3068.4
+807.41382 1863.6
+809.96130 742.4
+812.01526 560.6
+819.39868 3232.5
+819.73584 2661.0
+820.06793 1538.1
+820.32404 14708.0
+821.32855 4999.4
+825.40851 1034.7
+828.40002 580.4
+829.38721 794.9
+835.42383 1714.5
+835.76746 1624.2
+836.09113 1638.4
+837.43335 971.4
+844.23718 727.6
+846.40967 1672.9
+852.93762 972.0
+855.44482 3803.7
+856.45142 1430.0
+857.29224 770.3
+872.47198 37130.1
+873.47559 15148.8
+874.48083 1704.9
+876.15356 656.4
+880.36578 816.3
+898.37115 2972.6
+905.41382 767.8
+915.40027 5966.1
+916.38190 13415.5
+917.38574 4438.1
+926.36865 769.9
+927.43329 2368.5
+927.93335 1172.1
+928.43652 1306.3
+932.49786 900.4
+932.98663 685.9
+933.40900 12436.4
+934.40924 4465.6
+936.43658 3258.4
+936.94659 2698.1
+937.44531 1358.8
+984.50543 1095.2
+1002.51459 3823.5
+1003.52118 1798.3
+1011.45819 1736.3
+1018.50818 829.6
+1019.54175 14127.6
+1020.54150 5567.1
+1021.53815 1330.6
+1028.48071 5141.7
+1029.46594 10821.3
+1030.46899 5212.7
+1031.46082 931.3
+1046.49146 13746.9
+1047.49402 5801.6
+1048.49805 1415.9
+1109.88672 615.7
+1116.55005 1013.9
+1117.54077 8672.7
+1118.54456 3640.0
+1134.56653 24145.3
+1135.57117 10649.4
+1136.57715 1882.0
+1142.52844 1407.8
+1143.51245 3338.9
+1160.53430 4863.5
+1161.53284 2194.0
+1198.09680 3559.4
+1236.68958 620.3
+1274.58960 925.5
+1384.26135 681.8
+1489.65649 954.1
+1817.12134 668.3
+1870.25269 788.5
+1877.76013 853.0
+1878.91577 1043.2
+1879.51025 19838.0
+1879.78918 2901.6
+1880.09973 1440.4
+1880.59851 867.3
+1906.55408 2015.3
+1906.81470 5917.0
+1907.09949 2217.1
+1930.72119 1163.4
+S	2277	2277	1879.90099127
+Z	3	5636.428
+Z	2	3757.954
+532.53748 1667.5
+549.20892 775.3
+601.36487 613.9
+676.64545 879.8
+795.61169 1067.5
+896.69574 669.8
+1198.20032 3665.9
+1215.69678 625.8
+1220.79688 706.1
+1336.54260 642.8
+1877.30383 1209.1
+1878.94092 1648.7
+1879.55615 19393.4
+1879.83521 3804.6
+1880.24292 1145.0
+1882.12561 1023.4
+1906.89990 6136.9
+1908.43530 645.0
+1930.79895 1088.0
+S	2278	2278	516.5378896
+Z	4	2062.12026
+130.65991 1302.1
+136.41431 1561.2
+150.51643 1387.3
+156.36652 1490.6
+156.75311 1610.1
+163.49413 1884.5
+165.76915 2998.3
+175.11894 3927.7
+185.11551 4572.3
+185.76494 1435.0
+188.18311 1721.0
+188.21046 1632.3
+188.25218 2069.7
+188.26352 1834.6
+188.27449 1856.8
+188.29959 2867.7
+188.31024 2133.0
+188.32153 2419.7
+188.34901 1854.9
+188.35727 1357.4
+194.19926 1943.1
+198.90562 2479.0
+199.12756 1601.3
+199.20634 1707.3
+199.22615 1988.3
+199.26262 3039.2
+199.26857 3696.7
+199.28267 3178.1
+199.29178 4361.4
+199.30269 3726.6
+199.38060 1627.7
+199.40260 2081.3
+201.12318 2372.7
+204.70880 1436.4
+217.36592 1552.0
+226.74690 1769.1
+241.65639 1878.1
+255.30824 1505.0
+272.17139 8571.7
+285.18164 1454.9
+308.91965 1957.4
+322.17401 1950.5
+327.20325 4325.0
+333.20508 1509.7
+336.20630 4775.7
+341.19781 1584.9
+344.67654 1651.5
+347.19519 1742.7
+350.20477 19851.0
+350.70688 6231.7
+351.21420 6962.5
+352.21750 2518.4
+361.29086 1654.8
+369.22388 262640.2
+370.22797 48255.2
+370.71521 2052.4
+371.23074 4699.3
+376.68863 1494.7
+393.07361 1472.7
+427.71957 4892.9
+428.21973 2218.7
+437.90988 1847.9
+438.13190 1432.4
+441.71637 1843.4
+455.24713 32655.6
+455.58130 31555.3
+455.91516 14466.7
+456.25021 2319.9
+474.27179 2274.1
+482.08926 1515.3
+482.30713 35728.3
+482.88885 1621.9
+483.31073 9581.4
+484.25723 5749.2
+484.59146 4264.0
+484.92563 2780.5
+497.27502 6626.6
+497.61072 3105.1
+497.94809 1990.9
+498.75787 3188.6
+499.28561 10562.4
+527.61188 8156.9
+527.94678 7327.8
+528.28094 2602.0
+532.51355 4421.5
+533.46344 1705.3
+534.97070 29402.2
+535.30457 34629.8
+535.63867 19916.6
+535.97278 4175.2
+536.28650 3201.3
+536.62543 2019.1
+555.97516 14701.7
+556.30890 17330.5
+556.64349 10623.4
+556.97925 2265.9
+558.75299 1678.1
+565.30652 36419.9
+565.64075 39518.4
+565.97479 25704.7
+566.30890 10369.6
+573.18262 1607.1
+573.98474 3605.6
+574.31860 1770.5
+606.65857 3870.3
+608.85559 2669.8
+609.35486 2346.8
+612.33710 30862.9
+612.66235 29822.4
+612.99652 18916.9
+613.36871 10041.2
+614.37360 2584.9
+626.57196 1465.0
+628.37433 1892.3
+670.06470 1917.7
+674.90631 1835.0
+676.63300 3662.0
+682.36560 61156.4
+682.86670 59585.0
+683.36847 26702.4
+683.86694 6784.5
+699.40161 26294.2
+700.40662 9441.0
+701.40265 1953.5
+709.89185 2524.8
+710.89899 13105.1
+711.40118 12938.3
+711.89966 5915.0
+719.41095 4462.4
+719.91199 7115.4
+720.41351 3367.1
+725.88068 6374.0
+726.38159 7204.2
+726.89050 2169.1
+736.40411 2772.7
+736.90662 3774.0
+737.41235 2552.0
+745.41040 62154.6
+745.91174 74701.3
+746.41382 34083.9
+746.91321 7387.3
+755.39624 3506.3
+755.89691 4634.5
+756.39294 1990.1
+769.82764 1514.3
+773.69214 1585.6
+781.91400 4485.1
+782.40741 9836.5
+782.90631 5864.4
+783.41034 4805.8
+790.91492 128892.0
+791.41565 156859.7
+791.91650 88366.1
+792.41760 30097.7
+792.91870 3414.2
+795.61407 2720.5
+821.34967 1469.4
+847.45612 15285.8
+847.95721 17233.9
+848.46002 11016.1
+848.95929 5263.0
+864.38269 1667.7
+883.43390 1683.5
+905.90509 1488.4
+966.65155 1757.7
+995.51044 1810.7
+1010.96246 1537.3
+1021.18158 1572.0
+1057.22729 2242.7
+1080.29114 1815.1
+1116.06860 1954.2
+1181.59448 1423.6
+1198.15210 8173.8
+1198.38037 1414.3
+1239.58765 1831.0
+1311.00342 1534.8
+1588.08069 1748.4
+1735.32874 1651.6
+1878.41272 2227.1
+1879.10950 5471.3
+1879.51501 53318.9
+1879.81494 6357.7
+1880.86267 1858.5
+1902.47205 1574.8
+1907.07446 18080.3
+1918.86853 2041.7
+1929.26294 1610.6
+1930.67188 2783.4
+S	2279	2279	1907.37799127
+Z	3	5718.859
+Z	2	3812.908
+532.56030 1938.0
+577.35205 645.5
+609.09741 633.4
+630.47754 803.6
+676.65417 915.0
+689.52679 624.5
+756.10565 667.5
+795.61804 756.2
+858.11163 757.0
+1198.24805 3545.5
+1485.62061 616.9
+1870.27148 700.8
+1878.80896 1147.7
+1879.07520 1611.7
+1879.57483 19854.6
+1879.93201 716.8
+1880.10193 1240.9
+1880.29004 987.3
+1906.36890 722.2
+1907.06995 7436.2
+1918.88440 759.2
+1930.53674 679.2
+S	2281	2281	1879.99999127
+Z	2	3758.152
+Z	3	5636.725
+515.59418 676.6
+532.53491 2281.6
+549.15643 995.4
+630.40686 618.7
+632.33398 606.5
+676.64838 1224.5
+795.63422 823.8
+835.72620 682.8
+960.37250 645.9
+1187.85486 738.8
+1198.19678 3256.8
+1276.74414 607.8
+1295.12622 680.6
+1525.40247 1239.7
+1667.01831 579.3
+1819.76355 730.2
+1872.94910 816.8
+1878.62219 893.4
+1879.56323 19685.1
+1880.50220 1471.7
+1906.60974 714.7
+1907.14331 6747.9
+1930.60474 1064.0
+S	2282	2282	785.478407933
+Z	2	1569.109
+Z	3	2353.16
+222.27736 754.3
+223.19785 641.0
+240.13432 1942.3
+244.10896 1022.8
+249.15744 1086.9
+258.94672 612.8
+259.16724 642.2
+268.12891 1865.0
+274.18729 2550.5
+275.51953 538.2
+288.20276 2595.4
+289.86133 664.8
+294.14566 840.7
+308.92499 736.0
+311.17203 1379.7
+314.30060 694.3
+315.14539 2879.4
+339.16626 2685.2
+350.29889 910.6
+351.16748 1035.6
+357.17603 1280.2
+368.19302 5787.5
+369.19135 2146.7
+381.15814 715.9
+386.18402 2213.0
+386.19791 1951.2
+387.20706 750.3
+387.27151 2386.8
+396.18744 19580.7
+397.19095 2780.8
+403.22794 1230.3
+409.18637 1260.5
+414.19684 1970.1
+418.46332 659.7
+427.19748 1860.7
+440.23080 1329.7
+443.20767 1006.5
+444.18942 1121.1
+453.20844 1125.5
+465.20688 1015.4
+466.31171 1470.1
+467.29605 2581.4
+471.23618 947.4
+480.22272 1672.8
+483.19879 2622.4
+484.32364 138737.5
+485.06973 691.4
+485.23273 1885.6
+485.32663 35108.4
+486.32916 4003.6
+498.23367 4889.3
+501.20859 1527.0
+524.24597 1337.4
+525.24457 827.0
+532.54193 1627.1
+536.23627 1018.0
+537.24451 1539.4
+542.27069 885.6
+549.19159 780.1
+554.27094 10930.9
+555.24677 1750.8
+555.28076 1669.9
+569.27057 3155.3
+570.27631 1025.3
+572.27997 8295.0
+573.28571 1765.5
+577.81769 2253.3
+578.31775 1003.9
+578.82654 901.3
+579.39343 730.7
+582.26636 36020.5
+583.26910 11905.0
+584.27124 2525.2
+586.06171 1060.8
+597.40735 23531.7
+598.41016 7761.4
+599.41553 1569.8
+600.27673 13987.3
+601.28052 3766.9
+606.32983 2153.1
+606.83789 1058.2
+608.27710 867.1
+615.25476 1059.4
+616.27344 609.2
+625.30249 1169.6
+626.28967 2995.5
+630.45856 950.6
+632.84241 1164.9
+633.33832 1172.8
+639.32654 668.9
+641.84772 10043.1
+642.35040 8053.3
+642.84784 1110.4
+643.31921 7535.0
+644.32025 2525.2
+653.30280 26098.8
+654.30701 9720.0
+655.31055 1889.0
+669.26508 986.0
+671.31342 19167.7
+672.31714 5542.7
+673.32013 985.5
+676.61890 1563.4
+691.38086 2702.7
+691.88367 959.4
+700.34192 1017.2
+701.87543 869.0
+702.56720 667.9
+707.87354 1179.1
+710.32544 7872.9
+710.88007 2314.6
+711.33820 2526.0
+711.36841 2272.9
+711.44983 34064.4
+712.45428 11897.7
+713.45752 2961.3
+714.46643 750.4
+717.37756 1016.1
+719.00189 846.3
+723.01428 823.6
+723.30585 1294.8
+728.32831 2821.7
+728.68677 1431.1
+729.33606 1622.3
+747.39368 773.9
+757.89288 1517.6
+758.30731 740.5
+758.39014 1707.8
+761.77466 1004.8
+762.56781 730.3
+763.52020 865.6
+763.61737 947.5
+766.39972 2278.4
+766.89740 3017.6
+795.63611 1105.4
+799.37036 1664.3
+807.59741 852.5
+810.76514 650.0
+815.93079 2001.3
+816.43793 1660.6
+816.94000 877.1
+819.41028 787.1
+821.34180 773.6
+824.81812 924.1
+828.33563 1257.0
+833.48352 660.1
+834.80145 843.4
+839.05090 647.4
+839.36542 4706.1
+840.37225 2286.2
+840.49304 17819.6
+841.49615 6621.7
+842.49817 1668.7
+847.91364 2591.0
+848.41302 2993.9
+848.91095 1672.3
+850.22681 828.7
+856.91431 687.6
+857.37811 4800.6
+858.38434 1949.1
+859.38147 897.8
+873.45270 3554.1
+873.95313 1799.7
+874.45630 1179.5
+879.50409 2178.4
+880.48712 3318.5
+881.48401 1519.4
+886.37128 662.3
+894.67047 785.0
+895.68115 629.7
+897.51434 136515.4
+898.51672 66499.8
+899.51929 18528.3
+900.51764 3589.5
+904.93463 1804.7
+905.43750 1665.3
+905.93170 967.9
+936.38879 1442.5
+937.37842 981.2
+937.97797 1515.1
+938.47919 1402.6
+938.96552 1189.2
+950.54272 1952.7
+951.52533 4760.2
+952.52362 1822.8
+953.40192 2055.4
+953.95703 2482.8
+954.04987 675.8
+954.40222 4177.0
+954.97095 1228.4
+955.40515 1615.3
+961.95355 5344.6
+962.45819 3994.0
+962.96075 2135.9
+963.46228 1361.8
+968.55078 133734.0
+969.55328 71487.4
+970.13934 1037.0
+970.55646 21178.6
+971.42035 4215.7
+971.55829 4415.8
+971.74890 797.5
+972.42944 2685.8
+973.48602 3207.4
+973.99420 3457.7
+974.49054 1904.7
+977.46484 893.2
+1011.18109 762.4
+1026.97949 2033.0
+1027.47681 1348.9
+1027.98608 1151.6
+1030.49829 1743.6
+1031.00000 1930.7
+1033.49146 1344.8
+1035.48962 8776.7
+1035.99084 8615.9
+1036.49377 7524.7
+1036.99487 2141.2
+1039.01001 6797.0
+1039.51221 8758.1
+1040.01392 4929.7
+1040.52319 1161.2
+1048.48413 2185.7
+1049.47083 4493.4
+1050.46692 2207.9
+1056.51147 1236.1
+1057.21851 919.4
+1066.49341 50074.3
+1067.49207 35322.8
+1068.49097 11929.4
+1069.48755 2397.8
+1083.52466 940.6
+1084.50391 37239.6
+1085.50671 20827.9
+1086.50842 5211.4
+1087.50073 967.7
+1092.02991 2373.2
+1092.53235 4056.0
+1093.03113 2619.1
+1093.53198 1062.1
+1094.47083 733.3
+1106.78625 720.5
+1108.57690 1525.6
+1109.58105 1000.9
+1122.06006 726.2
+1122.51904 648.1
+1154.63049 22924.8
+1155.63318 15380.8
+1156.63586 4857.2
+1157.63635 847.1
+1181.55591 912.8
+1187.88684 897.2
+1193.65149 1117.1
+1195.61951 853.2
+1198.21533 3350.5
+1211.65076 36303.7
+1212.65466 24819.8
+1213.65662 7914.5
+1214.66272 2971.6
+1253.63696 771.1
+1276.62842 846.5
+1282.68823 10895.2
+1283.68750 7008.5
+1284.69202 3279.1
+1285.67737 973.3
+1294.64099 2202.6
+1295.64551 1426.3
+1358.69238 1098.8
+1375.69678 3180.6
+1376.68933 4057.9
+1377.69519 2286.7
+1393.71033 15750.8
+1394.71155 10587.2
+1395.71265 3553.6
+1684.22449 803.5
+1747.85901 693.6
+1800.32422 662.7
+1863.71338 742.5
+1879.11975 2037.1
+1879.48438 19996.7
+1879.83887 1740.2
+1880.28113 843.2
+1881.20569 688.9
+1884.14038 669.1
+1896.91675 799.1
+1907.13794 7534.3
+S	2283	2283	786.1465746
+Z	3	2355.165
+Z	2	1570.445
+205.11790 7083.0
+206.63039 6955.1
+228.17426 7297.2
+230.04771 6117.0
+233.59079 8045.3
+240.13330 12597.8
+243.40796 6426.8
+246.10083 6593.1
+248.69937 7507.8
+249.15840 14289.3
+251.48961 6825.6
+268.13025 13088.2
+271.48535 9013.1
+274.18701 15235.9
+288.20313 19783.9
+315.14514 13833.2
+339.16452 20333.7
+367.31323 7131.4
+368.19156 41939.3
+369.19092 8989.8
+386.18402 13169.1
+386.20303 10959.9
+387.27423 9423.4
+396.18735 141957.4
+397.19058 22004.4
+403.23190 17228.3
+414.19839 8255.3
+427.19547 9644.2
+427.56918 8419.2
+440.30087 6391.8
+453.20514 6670.4
+460.32651 7315.4
+466.31339 11910.2
+467.29849 19508.2
+471.23331 9727.7
+483.20184 9262.4
+484.32315 1025278.9
+485.23483 16293.7
+485.32629 252007.0
+486.32922 44495.5
+497.45932 6981.4
+498.23618 31088.3
+501.20535 8201.8
+532.53760 15145.4
+537.24487 16005.1
+554.27130 78758.6
+555.24860 9269.9
+555.27954 14504.3
+558.76294 6823.0
+569.27448 18155.6
+570.27087 7986.2
+572.28040 52837.9
+573.28113 16954.5
+582.26599 256800.3
+583.26837 76690.3
+584.26892 7512.8
+597.40680 145029.2
+597.48889 6349.8
+598.41040 54789.0
+600.27527 119178.7
+601.27930 29884.2
+606.32764 24945.7
+606.83319 10995.7
+608.27319 11585.8
+611.67554 6296.5
+620.43951 6305.1
+626.28711 14695.1
+641.84729 83526.3
+642.35156 26841.1
+642.85004 17357.2
+643.31970 42207.4
+644.31854 12398.4
+653.30353 177779.8
+654.30615 60468.9
+655.30878 12367.7
+666.07269 8262.0
+671.31335 133104.1
+672.31787 39737.1
+676.63892 10257.0
+691.38153 17603.8
+691.87958 12518.8
+710.32526 36668.1
+710.88318 13838.9
+711.32959 19749.2
+711.44995 198517.1
+712.45221 80672.5
+713.45233 18209.1
+720.35297 14232.6
+723.30762 16389.2
+728.32800 16431.8
+728.36700 21252.4
+728.69025 44183.6
+729.02783 23012.9
+766.40387 34794.8
+766.90070 48322.7
+767.40930 20161.4
+795.64417 14923.9
+799.37299 9583.4
+815.94214 20468.8
+816.44092 19980.6
+816.94226 14137.6
+819.39844 10976.8
+833.50525 6842.1
+839.37012 33975.4
+840.37140 14048.3
+840.49219 101784.8
+841.49304 54596.5
+842.50171 12995.6
+847.91174 35772.4
+848.41431 24289.9
+857.38007 32716.6
+858.38934 11534.0
+873.44604 19076.2
+873.95422 21186.7
+874.45367 10341.2
+879.50031 12717.2
+880.48535 30258.1
+881.48767 13699.4
+897.51398 824383.3
+898.51666 398043.8
+898.91809 8815.7
+899.51862 103119.6
+900.52771 13522.2
+904.93408 24909.9
+905.43274 20449.0
+905.93628 13300.9
+909.35394 8244.1
+936.38501 10965.5
+937.96448 12126.2
+938.46478 11541.2
+938.97681 10504.5
+950.54333 9785.9
+951.51526 14298.8
+953.40320 20401.0
+953.95691 21636.9
+954.40424 29720.2
+955.40143 11113.6
+961.95691 45509.1
+962.45575 36163.7
+962.96228 25148.8
+963.46674 10087.9
+968.55054 801386.9
+969.55359 440473.6
+970.55573 125749.1
+971.42334 28590.8
+971.56494 21491.9
+972.42926 9899.1
+973.48352 26990.7
+973.98889 29850.6
+974.49548 15312.2
+1026.97839 10754.3
+1027.47144 17193.3
+1027.99609 9073.4
+1030.48938 21264.6
+1030.99768 15586.4
+1033.48352 9503.7
+1033.97974 8849.4
+1035.48962 102712.2
+1035.99097 100750.3
+1036.49121 63219.4
+1036.99756 21646.4
+1039.01099 85970.7
+1039.51379 75082.9
+1040.01489 37574.2
+1040.51025 11520.6
+1048.47620 15488.5
+1049.46960 20270.0
+1050.47009 11945.9
+1056.51965 12106.8
+1066.49316 368714.0
+1067.49158 240840.6
+1068.49072 88224.9
+1069.48669 18104.5
+1080.67505 8848.9
+1084.50452 300790.4
+1085.50720 138983.4
+1086.51038 50683.3
+1087.49780 8951.6
+1089.86646 7658.5
+1092.02905 40238.3
+1092.53125 35103.8
+1093.03076 26626.2
+1093.54907 9772.2
+1109.57703 9113.2
+1154.62964 126086.6
+1155.63159 79974.9
+1156.62708 31162.7
+1198.21167 36067.2
+1211.65051 216692.6
+1212.65381 159377.8
+1213.65662 55140.2
+1214.68103 10425.4
+1282.68835 61733.5
+1283.68970 40556.3
+1284.70129 16976.2
+1294.63831 11767.7
+1375.69812 26926.8
+1376.69397 27328.5
+1377.68884 16887.7
+1393.71069 110632.3
+1394.71338 83993.6
+1395.71509 32710.7
+1751.21069 6712.6
+1822.73792 6375.4
+1871.85974 6864.0
+1878.47290 12944.3
+1878.84729 12691.0
+1879.13635 14013.1
+1879.53503 219024.3
+1879.91614 14459.3
+1880.55566 10862.2
+1907.06409 82248.2
+1930.71680 11965.1
+1943.21777 7212.3
+1960.35986 8567.5
+1961.06165 7600.4
+S	2285	2285	1879.9518246
+Z	3	5636.58
+Z	2	3758.056
+532.43817 1925.6
+549.12958 688.4
+558.68219 605.1
+579.14532 606.0
+630.38007 947.2
+676.65094 709.4
+678.16687 636.3
+689.62085 672.5
+782.35919 579.3
+782.55719 569.0
+795.62213 1031.3
+806.29828 643.1
+1057.28357 841.8
+1181.48230 716.2
+1197.98389 3117.3
+1220.40686 689.2
+1766.80566 749.5
+1780.23657 577.0
+1803.90417 671.4
+1879.57715 19839.5
+1879.86621 2707.9
+1881.85632 1042.7
+1906.85034 652.4
+1907.18481 7639.2
+1907.53003 1112.7
+1918.84277 835.1
+1930.53223 1373.5
+S	2287	2287	528.7998521
+Z	4	2111.16811
+135.19382 607.3
+137.24983 733.0
+148.00946 567.1
+164.03268 563.2
+164.45235 657.1
+169.50177 718.1
+187.14384 5357.5
+188.25841 795.1
+188.26576 825.6
+188.27612 1106.1
+188.28650 1194.8
+188.29584 1188.9
+188.30397 812.8
+188.31285 921.4
+197.70477 866.5
+198.90813 923.8
+199.17455 655.2
+199.19164 811.6
+199.27274 1528.0
+199.28954 2660.0
+199.31306 1328.1
+199.33301 589.7
+199.36186 616.4
+199.38690 985.8
+203.96564 563.2
+211.80952 578.1
+214.52084 587.1
+215.04315 765.8
+215.13831 1804.9
+221.25951 660.5
+225.11479 715.1
+231.63489 515.1
+233.16449 10698.0
+234.16731 1903.9
+241.46710 627.6
+261.15933 2072.9
+269.18597 1335.9
+270.30609 725.8
+271.49857 607.6
+290.16891 698.2
+296.87338 730.8
+314.20712 3221.9
+317.71265 557.9
+318.11020 542.2
+319.40021 540.5
+322.95734 519.7
+331.88968 531.8
+333.29379 713.7
+342.29105 929.6
+342.57352 605.6
+347.68478 2733.7
+350.27875 675.8
+361.68216 2175.2
+362.20697 2475.7
+376.20755 1614.4
+396.55920 612.5
+410.48267 612.3
+427.56161 623.2
+429.28601 881.7
+431.48398 647.8
+435.21680 3047.7
+435.71783 1201.4
+447.29440 731.0
+456.23184 851.8
+457.28067 3170.8
+458.28116 837.8
+459.00708 2865.0
+459.25815 6166.3
+459.50812 3573.0
+459.76004 1353.7
+475.29184 983.0
+487.27859 1722.7
+487.52881 2378.8
+487.77939 1994.4
+488.02948 999.7
+488.28085 1674.0
+489.94949 1773.6
+490.28555 3453.4
+490.62186 1461.1
+491.75845 2189.8
+492.25946 1873.1
+502.77347 3701.4
+503.02426 5901.6
+503.27386 5083.2
+503.52390 1896.2
+507.27072 967.2
+507.93979 825.3
+508.27609 836.9
+508.45959 930.2
+513.27814 52331.4
+513.61212 62083.4
+513.94647 33505.8
+514.28076 12615.6
+514.61646 1828.4
+515.78400 578.7
+524.85754 564.2
+532.50287 1844.0
+540.29639 971.4
+540.95709 713.3
+546.30023 10681.4
+546.63513 13625.5
+546.96912 7833.6
+547.30133 2867.2
+547.63409 925.7
+556.34698 3851.1
+557.35547 1859.5
+559.62524 580.3
+563.80786 11102.1
+564.30963 7738.8
+564.80957 2784.3
+574.35858 3738.8
+575.35834 1158.3
+584.32520 1263.2
+585.00488 618.7
+601.36548 4137.2
+602.36853 1641.8
+602.86548 1762.7
+603.36713 912.8
+612.34064 633.6
+612.81824 709.7
+617.67767 17944.8
+618.01166 23251.2
+618.34662 13354.7
+618.67944 5946.7
+619.01355 1435.1
+620.84949 878.8
+626.98358 1332.6
+627.31488 3594.9
+627.65082 801.3
+630.38922 588.8
+645.38721 558.3
+651.89368 2182.5
+652.39752 5805.1
+652.90015 2684.3
+653.40192 1046.2
+670.03497 943.5
+670.36523 2137.9
+670.69629 1176.0
+676.62347 1167.2
+677.37006 1234.5
+677.87347 1055.4
+709.92938 616.1
+714.44867 2366.2
+715.45721 1178.8
+720.88623 2265.3
+721.38800 1636.4
+721.88690 702.4
+722.35754 1399.3
+722.43817 605.5
+723.35724 1001.6
+731.16608 741.5
+732.91162 939.4
+769.41357 37721.9
+769.91479 48374.6
+770.41644 30305.2
+770.91858 9959.3
+771.41968 2547.4
+818.94727 8050.6
+819.44855 8652.4
+819.94922 5280.3
+820.44946 2932.5
+854.47516 1345.4
+855.47443 925.5
+861.52313 1010.7
+986.11188 559.8
+1050.86926 666.4
+1057.21423 898.0
+1198.12451 3328.2
+1258.52039 680.5
+1259.36255 618.3
+1260.39685 568.2
+1375.16724 546.8
+1382.49475 625.6
+1440.17383 673.4
+1497.43250 622.0
+1525.48145 1043.4
+1620.90076 582.3
+1790.67664 609.3
+1870.28357 694.8
+1872.92505 802.1
+1877.58899 658.9
+1879.00940 1249.9
+1879.49609 20383.5
+1880.00244 1262.8
+1880.65173 763.6
+1907.08838 6994.7
+1909.34546 642.3
+1918.89026 788.1
+1930.65417 1079.6
+S	2289	2289	488.4972696
+Z	4	1949.95778
+121.78239 1295.2
+121.78958 4741.6
+153.70792 1069.3
+156.56985 1341.1
+157.60031 1477.3
+161.29414 1309.0
+175.11880 3987.2
+177.11203 2464.8
+188.24583 1328.1
+188.26396 2709.9
+188.27896 3764.4
+188.29002 4501.5
+188.30673 3420.1
+188.32094 2629.2
+190.30040 1351.8
+199.23720 1357.2
+199.26410 1700.6
+199.28358 4241.0
+199.29544 4757.8
+199.31488 2248.8
+199.32906 1820.9
+199.36810 1469.6
+199.39738 1139.3
+199.41426 1417.1
+212.06563 1981.1
+212.81877 1146.7
+212.83723 1172.3
+218.62419 1311.4
+219.33678 1067.7
+230.07722 4201.8
+233.09195 2542.4
+234.12425 4520.5
+260.22934 1103.9
+268.14020 1662.5
+268.27121 1081.5
+271.17596 2819.2
+271.80795 1264.3
+277.14532 23228.4
+277.64722 4394.0
+279.09674 4431.0
+283.17422 2501.1
+301.16763 1126.4
+312.17838 2263.3
+322.83450 4589.8
+327.20200 3665.0
+332.12305 3078.5
+349.15335 1470.8
+358.25629 1210.5
+359.23975 7666.5
+360.53046 3352.7
+360.86334 1246.4
+371.22681 4199.4
+373.18582 3866.4
+375.13000 3784.0
+376.11237 2128.4
+377.14578 5136.8
+381.35086 1363.7
+393.14011 7778.6
+393.84500 1247.3
+396.19806 1185.9
+399.20892 3005.1
+409.54904 1578.6
+409.88617 2219.1
+415.25323 4098.5
+415.73117 5510.2
+416.23550 2700.6
+427.53836 1557.9
+429.72913 6490.7
+430.22940 4266.8
+430.73383 1665.5
+432.55762 1977.3
+438.56213 7168.0
+438.89661 3153.3
+443.26450 3277.2
+443.76996 1621.6
+451.22070 2756.8
+451.55258 2488.2
+453.24579 1846.5
+456.23032 10186.3
+457.23438 1992.8
+459.28070 2828.9
+464.91003 5442.9
+465.24527 5166.9
+465.27844 3182.1
+465.57983 1567.1
+468.22247 2116.0
+468.47003 1823.1
+470.27133 20866.3
+470.91321 49462.4
+470.96561 1820.0
+471.24759 41679.2
+471.58173 12215.7
+471.91577 2915.0
+472.47830 10047.2
+472.72885 5924.9
+472.97974 4868.7
+474.97519 8848.0
+475.22488 8141.2
+475.47400 4629.8
+477.17807 1215.4
+482.92480 1345.6
+503.26465 2618.0
+503.30563 2653.0
+503.76376 1693.9
+512.21228 2093.7
+513.93195 3328.0
+514.93573 1474.2
+519.93616 15664.9
+520.27051 10478.8
+520.60461 5566.1
+532.51129 3781.0
+532.74664 1441.9
+535.27179 4045.1
+540.20825 4682.9
+540.29181 3917.9
+540.78491 2344.9
+543.73816 1421.3
+546.59863 2198.5
+546.93390 1772.6
+547.33282 3282.6
+552.27533 1511.8
+552.61359 1672.3
+553.28302 56127.1
+554.28619 14326.5
+558.28857 1496.9
+577.33887 1365.6
+578.61285 1660.1
+580.45502 1229.5
+582.29889 3085.6
+583.30060 1193.2
+584.61096 3947.0
+584.94733 3609.6
+590.24329 1070.0
+590.28857 4932.6
+590.61792 2425.4
+590.95673 2024.6
+591.35968 2431.4
+595.78497 1940.6
+596.29102 6325.1
+596.62476 4270.5
+596.96204 2222.9
+599.30554 1343.1
+600.28326 2437.5
+603.80292 1153.5
+609.28162 1858.5
+613.82306 4626.2
+614.32544 2636.1
+614.83160 1572.1
+621.36835 3084.7
+630.39093 1665.2
+635.38220 2007.6
+642.78778 3253.6
+654.30072 1315.3
+657.34039 13657.0
+657.84161 7647.1
+658.34119 2479.8
+662.33923 1910.1
+662.83069 2392.0
+665.39276 6242.5
+666.36951 5210.7
+667.37299 2039.6
+676.62140 2394.5
+680.21423 1107.3
+685.33032 1881.0
+685.82941 1544.7
+690.32379 1310.2
+690.81195 2685.7
+696.86230 7879.9
+697.36285 6695.9
+699.33020 4564.2
+699.82843 4649.0
+705.86627 61345.5
+706.36755 52708.6
+706.86938 21511.4
+707.37000 3653.5
+709.42126 4777.4
+724.61145 1220.7
+726.27484 1418.2
+729.37677 1364.0
+731.11188 1754.9
+745.36121 2608.3
+753.44733 5358.4
+754.45618 3002.8
+770.89801 1633.3
+776.36554 1898.1
+779.40009 9888.5
+779.90253 8135.4
+780.40179 2780.6
+780.91705 2162.1
+784.39392 1769.7
+795.63013 2179.6
+797.47638 3605.2
+798.47449 1342.7
+827.20740 1282.4
+829.42944 2931.5
+841.49915 1281.0
+842.51416 1310.2
+858.44812 3766.1
+859.45239 3053.3
+871.35992 1383.5
+939.06830 1048.4
+941.92279 1352.8
+965.07648 1386.7
+1021.13031 1797.6
+1103.66394 1403.1
+1154.24512 1130.5
+1198.14600 5800.0
+1246.03760 1352.6
+1347.49573 1289.0
+1440.84192 1190.9
+1467.03357 1306.1
+1525.38464 1597.3
+1662.73242 1342.6
+1716.61292 1377.5
+1877.08337 1449.5
+1878.94153 2526.1
+1879.49207 39226.6
+1879.76416 5082.8
+1880.01770 3730.2
+1881.00171 1467.0
+1881.20251 1360.3
+1907.06787 15288.3
+1930.55493 2254.4
+S	2290	2290	528.8091296
+Z	4	2111.20522
+144.08011 640.0
+146.92297 593.1
+150.49657 542.2
+155.33711 547.9
+160.01456 770.2
+165.76721 976.2
+167.38756 589.6
+177.43010 540.1
+185.54430 588.7
+187.14380 2893.6
+187.82246 609.3
+188.20102 624.0
+188.22537 572.4
+188.25049 981.0
+188.27881 2097.4
+188.29268 2309.2
+188.31255 1437.0
+198.90701 967.4
+199.17622 649.8
+199.27596 1723.3
+199.28862 1515.8
+199.29871 1688.4
+199.31024 2037.4
+215.13887 1295.2
+233.16447 7896.7
+233.57324 563.1
+234.16760 1259.7
+248.60083 598.9
+257.09464 1246.2
+261.15826 1390.7
+262.16171 603.8
+262.17316 597.0
+269.18448 785.4
+274.12170 3117.8
+294.64963 649.8
+299.53299 996.6
+302.74109 534.9
+313.50620 600.1
+314.20715 1970.7
+325.03055 676.0
+341.26059 639.2
+347.68509 931.6
+352.85272 647.8
+361.68048 1607.8
+362.20660 1918.3
+373.18945 1892.1
+376.20673 1244.4
+392.16214 718.1
+421.21680 832.1
+427.54160 674.5
+429.28152 771.4
+435.21442 2022.2
+435.71793 1177.2
+436.21951 658.5
+442.17819 590.8
+456.22391 846.2
+457.28030 2738.7
+458.28665 1007.6
+459.00809 4871.6
+459.25867 3862.0
+459.75858 1469.4
+460.43338 639.4
+475.28369 727.1
+477.76016 639.1
+482.66278 825.1
+487.27979 1584.7
+487.52963 1401.5
+487.78195 1090.6
+488.02792 721.1
+488.28107 1862.9
+488.60959 2219.7
+488.94366 1332.0
+489.95007 2293.5
+490.28088 1749.3
+490.62201 696.1
+491.22595 525.5
+491.75592 1633.2
+492.25934 901.3
+502.77228 2918.0
+503.02249 4102.3
+503.27408 2614.7
+503.52039 1243.2
+507.60657 974.1
+512.29584 608.0
+513.27789 39759.8
+513.61200 35213.2
+513.94611 14786.8
+514.28094 8201.3
+514.61169 856.2
+532.50342 1899.4
+545.82056 3424.5
+546.29791 9625.3
+546.63495 8450.4
+546.82355 2830.7
+546.97015 5422.7
+547.29980 1647.4
+549.16205 866.7
+556.34784 3661.8
+563.80725 7960.5
+564.30951 4705.7
+564.80884 1587.5
+567.02661 631.0
+574.35779 2382.0
+575.35626 714.7
+583.99292 767.2
+584.32935 860.4
+601.36523 2796.0
+602.36371 4362.0
+602.86377 8090.6
+603.36377 4992.5
+603.86639 788.3
+617.67755 18419.3
+618.01190 16448.7
+618.34589 7629.5
+618.68146 3107.2
+619.00909 773.0
+625.96759 622.9
+651.89655 15107.5
+652.39783 41737.1
+652.89880 23902.5
+653.40088 9055.1
+653.90692 967.4
+670.02356 746.1
+670.36310 1185.9
+676.62042 950.3
+714.44708 1483.9
+715.45691 903.0
+717.54114 652.2
+718.48145 679.2
+721.38495 1129.8
+722.35284 781.8
+732.41510 4752.9
+732.91449 2624.7
+769.41333 28464.0
+769.91437 27513.7
+770.41687 14452.7
+770.91724 6984.1
+782.82983 903.9
+795.62189 1262.3
+799.23688 584.7
+818.94879 5121.2
+819.44855 3883.7
+819.94849 3166.7
+820.45532 1424.2
+854.47833 1138.3
+861.51306 1078.1
+863.99091 552.6
+1020.81354 663.8
+1068.48645 531.5
+1083.20190 630.3
+1188.29163 871.6
+1198.12427 3625.1
+1204.52966 702.0
+1242.91614 589.4
+1433.55225 621.9
+1525.44824 1226.7
+1602.16187 660.2
+1766.76587 828.1
+1877.68555 657.2
+1878.69543 863.1
+1879.47852 20621.3
+1879.99377 941.5
+1881.31091 886.7
+1907.12000 7872.7
+1918.85876 741.6
+1929.96204 652.0
+1930.61340 1012.4
+S	2291	2291	487.7218246
+Z	3	1459.89
+Z	2	973.596
+120.48588 649.3
+120.82076 707.2
+121.78917 2468.9
+124.91453 551.1
+146.51212 522.9
+147.71237 533.4
+162.07744 583.6
+171.64363 675.9
+175.11899 1813.1
+181.97760 609.5
+188.26407 963.6
+188.27235 1099.2
+188.28531 1393.7
+188.29524 1368.5
+188.30882 829.3
+188.35458 679.5
+199.19571 1250.3
+199.20688 614.7
+199.27330 1105.7
+199.29384 2785.4
+199.30388 923.2
+199.32129 895.4
+199.39185 905.5
+211.09792 712.0
+212.06609 1130.5
+230.07693 2412.5
+233.57097 641.6
+234.12343 2012.2
+257.05994 608.8
+268.14032 1391.0
+270.51328 507.7
+271.17477 1061.7
+271.63669 619.9
+277.14536 9817.2
+277.64682 2129.2
+279.09805 1701.6
+301.46136 581.9
+308.87686 687.5
+312.17673 1065.5
+322.83496 1615.8
+323.17065 954.2
+325.45517 561.6
+332.12292 1116.5
+353.03464 588.4
+359.23953 5427.6
+373.18558 2133.7
+373.68790 892.8
+375.12955 1535.7
+376.11600 794.1
+377.14377 1266.6
+381.33716 671.1
+392.23590 695.3
+393.13986 3593.5
+396.20270 1166.4
+399.20901 1798.0
+409.54959 897.4
+409.88687 1348.0
+414.21213 814.4
+415.21890 685.9
+415.73196 3442.6
+416.23166 1363.6
+418.76456 562.2
+429.72784 3365.3
+430.22983 1903.1
+438.56189 2576.7
+438.89618 2300.3
+446.72345 589.7
+451.22141 1031.4
+451.55386 1432.3
+453.24573 930.2
+456.23148 5258.6
+457.23935 846.0
+464.90903 1824.5
+465.24463 1887.0
+465.57974 1010.6
+465.73373 930.8
+468.22684 854.8
+468.47580 765.5
+468.72415 1544.2
+470.27124 11145.6
+470.91333 15843.6
+471.24789 18587.8
+471.58154 7204.6
+471.91595 2592.4
+472.48013 1975.8
+472.72946 2972.5
+472.97937 2121.7
+474.97302 1182.4
+475.22437 1530.1
+484.29745 655.1
+512.21271 1196.7
+513.93201 1029.9
+514.26514 1303.6
+514.60120 997.6
+519.93597 4967.1
+520.27008 5505.7
+520.60162 2169.8
+532.51019 1781.9
+535.27081 1592.8
+540.20618 1466.7
+540.28894 2344.9
+540.78845 977.5
+541.20819 926.4
+541.28754 744.1
+543.65802 537.8
+546.93073 850.9
+552.73279 573.5
+553.28284 30238.8
+554.28595 10163.7
+555.28729 929.2
+561.25372 927.5
+561.75806 871.5
+573.08295 673.6
+582.30249 2244.7
+583.30884 718.2
+584.61829 791.8
+584.94684 1611.8
+590.62500 1796.7
+590.95111 870.1
+591.28632 1239.5
+595.28259 996.0
+596.29150 890.6
+596.62488 1333.4
+600.27856 1156.7
+600.77411 604.5
+613.82483 2358.9
+614.32404 1395.4
+642.78967 1300.6
+643.28955 1281.3
+648.34076 657.5
+657.33990 4786.7
+657.84180 5321.9
+658.34357 2909.7
+662.32587 1004.7
+662.83496 1578.5
+666.36603 2883.6
+667.36932 1243.4
+675.82532 669.6
+676.64056 876.3
+685.82568 748.6
+688.35858 804.2
+693.71649 571.6
+696.86151 3548.2
+697.36511 2343.2
+697.86310 1479.5
+699.32928 2013.7
+699.83563 1713.7
+700.33594 769.3
+705.86639 21045.1
+706.36761 30857.1
+706.86865 13657.4
+707.37122 2711.9
+729.37042 759.3
+745.36664 1646.6
+757.45398 684.3
+770.39758 685.5
+779.39948 2533.0
+779.90210 6375.2
+780.40234 3001.3
+780.90344 955.7
+783.18250 587.3
+784.89294 801.8
+791.85114 586.2
+795.62366 1017.7
+804.71344 643.5
+823.19812 605.4
+829.43182 2194.8
+830.42621 923.1
+858.44891 2416.5
+859.45209 1286.2
+863.76855 609.3
+924.70483 565.0
+967.09698 612.0
+1006.52051 874.0
+1019.67114 828.4
+1043.93103 589.2
+1145.04114 590.8
+1161.88989 603.8
+1168.74609 656.2
+1171.50073 667.3
+1198.14307 3298.2
+1435.91394 684.5
+1525.33264 957.5
+1633.17651 670.6
+1648.85376 622.7
+1860.10596 749.8
+1870.42688 871.9
+1872.54541 708.5
+1877.72083 610.1
+1878.35803 1000.3
+1878.81934 756.6
+1879.54810 19407.0
+1880.32800 680.2
+1881.27234 742.9
+1907.07300 7245.2
+1939.29834 597.2
+S	2293	2293	1879.95124127
+Z	2	3758.055
+Z	3	5636.578
+532.48877 2096.7
+546.45245 742.6
+676.64441 878.7
+720.68591 572.3
+795.63416 1044.0
+930.49377 638.4
+1079.39844 713.5
+1087.38074 647.5
+1198.10010 3030.6
+1239.64355 581.6
+1244.00012 633.3
+1525.49829 711.3
+1628.80396 623.9
+1878.11279 755.1
+1879.08447 1423.5
+1879.53796 19788.0
+1879.99744 911.8
+1880.21167 927.7
+1880.51306 1196.7
+1881.46094 645.7
+1881.68372 663.9
+1907.10547 7485.4
+1930.69727 896.8
+S	2294	2294	702.3265246
+Z	4	2805.2748
+184.72314 2845.5
+188.23477 4156.8
+188.27376 11405.0
+188.29871 8925.4
+188.30914 8069.0
+188.32033 5949.0
+188.33521 3029.0
+188.36276 3265.3
+188.38530 2849.1
+197.71042 3084.1
+199.16754 4340.1
+199.19176 5002.6
+199.25244 3972.2
+199.27943 8573.7
+199.29045 8029.0
+199.30220 9492.8
+199.33604 3008.6
+199.37825 3828.7
+209.23445 2894.6
+220.45796 2960.4
+221.23439 3329.5
+236.61380 3288.0
+237.56116 3532.2
+249.39520 2764.6
+250.44437 3391.6
+251.40012 3283.8
+258.11014 4440.1
+267.13449 2946.9
+282.39008 3647.4
+297.03513 4388.7
+307.55508 3326.5
+362.54456 3220.0
+414.86911 3153.7
+415.89630 4016.6
+427.55548 3576.0
+455.67371 3307.0
+478.27826 5515.3
+513.05908 3442.7
+532.50940 8224.9
+541.78839 3345.2
+547.25488 4015.5
+579.32391 12181.2
+633.55029 3877.2
+633.79309 4678.3
+636.32959 6580.2
+637.79846 13169.5
+638.04877 20568.0
+638.29913 24645.9
+638.55011 10325.5
+641.29480 2864.7
+642.25989 7753.3
+650.64935 5618.8
+650.97888 5742.7
+662.30365 6129.6
+662.80255 7206.0
+663.04169 3485.9
+666.55542 34876.6
+666.80548 43435.6
+667.05701 34438.2
+667.30878 17753.6
+675.25977 4209.2
+676.64581 3878.7
+682.36530 5820.3
+684.71393 3224.8
+725.83105 3424.7
+735.79187 3989.8
+736.42542 4000.2
+743.37610 3705.7
+795.62671 5399.1
+804.91351 3787.6
+818.05566 6131.6
+844.05548 6526.9
+844.39124 18933.2
+844.72455 16097.2
+845.06085 8730.1
+850.06238 80994.6
+850.39655 141740.2
+850.73059 109516.1
+851.06512 52689.6
+851.39801 17262.2
+879.38440 4002.8
+879.90656 4017.1
+882.40088 5582.7
+882.73096 8651.8
+883.07031 9182.8
+883.40643 6554.6
+886.81329 3491.3
+888.40460 80683.2
+888.73840 115276.8
+889.07251 90041.6
+889.40808 43203.1
+889.74054 22107.7
+903.89563 3687.7
+905.02118 4479.6
+912.74725 7662.2
+960.92975 7280.0
+961.42377 7477.6
+961.92639 5204.0
+985.93127 3851.7
+986.43176 4331.4
+1010.96600 6678.2
+1015.21393 3554.8
+1040.45276 3587.3
+1043.45813 5286.1
+1057.21423 3452.9
+1066.99951 4487.7
+1067.49084 6823.3
+1169.04944 4250.3
+1188.31946 3579.3
+1198.14063 16401.6
+1223.46155 3564.8
+1256.76331 3815.2
+1525.49463 3647.7
+1725.59619 3659.8
+1781.44373 3243.0
+1828.38782 3251.1
+1845.16626 3900.2
+1878.58105 4315.5
+1878.91016 5998.0
+1879.51587 98425.3
+1880.08008 4870.6
+1880.48572 5680.9
+1881.69653 4516.1
+1907.06311 37810.2
+1939.42932 3767.9
+S	2295	2295	488.4893671
+Z	4	1949.92617
+121.79075 2175.0
+124.11026 587.3
+131.33588 526.1
+133.78979 592.0
+134.70143 582.9
+138.91701 676.5
+148.68088 549.1
+169.65172 513.7
+175.11826 1435.1
+188.26569 844.8
+188.27251 951.4
+188.28929 1446.5
+188.29880 883.5
+188.30557 995.1
+188.31259 744.0
+188.49080 663.1
+189.10236 623.0
+198.80836 716.3
+198.90569 951.8
+199.18347 1148.3
+199.25462 772.4
+199.26341 1023.4
+199.28201 3364.7
+199.29929 958.3
+199.35353 742.2
+199.37999 1183.5
+204.96161 619.5
+205.79970 598.9
+230.07700 2303.2
+234.12372 1177.1
+244.88536 565.5
+245.36745 617.6
+256.24152 582.8
+257.84882 651.6
+261.31534 636.2
+271.17627 1321.7
+272.16971 743.9
+277.14511 7628.3
+277.64725 1380.6
+283.17487 1239.1
+294.08362 614.6
+299.85004 592.0
+301.12665 777.9
+310.39432 612.8
+312.17712 986.5
+319.76343 554.4
+322.83276 1106.9
+327.20404 925.1
+349.15036 808.4
+359.23969 5645.5
+360.53036 1210.3
+373.18604 1274.5
+374.85242 610.5
+375.12997 1501.5
+376.11331 1033.2
+377.14441 1523.6
+393.13959 3512.4
+394.14612 1032.6
+399.20950 1089.5
+409.55225 729.8
+415.21710 1282.5
+415.25348 1017.1
+415.73346 1481.2
+427.54019 882.6
+429.72855 2924.8
+430.23160 1497.1
+438.56268 2748.1
+438.89673 1491.3
+443.25983 926.4
+446.54785 752.0
+447.22083 722.9
+451.21826 1846.2
+451.55344 828.8
+453.25095 786.2
+456.22983 4283.6
+459.27710 950.1
+460.29086 623.3
+464.90997 2686.3
+465.24374 2416.2
+465.28018 1111.3
+466.95721 582.2
+468.72464 956.0
+470.27106 10235.2
+470.91312 20211.4
+471.24774 14770.3
+471.58170 4979.4
+472.47876 3467.3
+472.72891 2592.0
+472.98218 1357.2
+474.97409 4097.9
+475.22473 4224.8
+475.47635 1140.4
+482.65414 740.4
+503.26151 1548.9
+513.92926 1795.4
+519.93579 6784.8
+520.26886 3587.8
+520.60162 1172.9
+532.48376 1884.2
+535.27386 1928.6
+540.20728 1866.6
+540.28674 1257.9
+540.79156 1123.1
+541.21033 855.7
+547.33276 1098.6
+548.75757 658.2
+549.14215 790.3
+552.25549 601.3
+553.28284 20667.1
+554.28607 5036.7
+555.28821 703.0
+577.34534 712.1
+581.66254 583.3
+583.30658 775.7
+584.61475 1226.1
+584.94696 1395.1
+590.28973 1536.4
+590.62219 1732.5
+590.77936 1961.0
+590.95471 1327.6
+591.28363 1507.0
+591.35529 718.9
+593.28369 1823.1
+593.77753 1150.6
+595.78839 778.3
+596.28796 1514.6
+596.62695 1779.5
+596.96362 847.8
+605.04974 527.9
+609.28174 1156.6
+613.82330 1574.6
+614.32544 1048.9
+617.79358 892.0
+621.37305 998.9
+630.35968 696.4
+647.31940 1335.7
+647.82367 1046.8
+657.33887 4612.2
+657.84033 4498.6
+665.39581 1184.5
+666.36615 1518.1
+667.38867 660.7
+675.83368 2026.0
+676.33417 1008.9
+676.63812 961.4
+685.33466 1008.2
+696.86224 3270.2
+697.36359 2072.4
+697.86365 851.8
+699.32715 1220.4
+699.83252 1119.9
+705.86566 23056.3
+706.36719 16412.4
+706.86829 6966.5
+707.36896 2065.9
+709.41925 1495.5
+745.36786 921.4
+753.45056 1899.5
+776.18951 598.3
+779.40118 3928.0
+779.90137 3333.3
+780.40454 1035.2
+795.61548 954.7
+797.47266 1478.1
+813.97852 586.1
+855.51746 979.0
+858.44641 1579.8
+953.96539 616.7
+1033.60852 605.8
+1198.08105 3017.5
+1350.69263 576.1
+1474.94910 760.0
+1792.34485 653.0
+1879.04468 1915.2
+1879.52539 20037.5
+1879.99243 1570.5
+1880.47021 887.6
+1881.27197 686.2
+1907.09790 7498.8
+1930.55969 918.2
+S	2297	2297	516.5476546
+Z	4	2062.15932
+133.12663 1054.8
+133.87956 837.7
+134.80309 561.6
+146.91956 823.0
+157.40544 668.8
+157.63539 567.0
+165.76875 786.5
+175.11871 1247.5
+180.70151 597.0
+185.11586 2212.9
+188.23334 539.9
+188.26566 1831.3
+188.28659 1944.4
+188.30055 2056.0
+188.31645 1367.0
+188.35808 633.5
+189.70325 544.5
+199.19550 997.7
+199.26151 716.1
+199.29398 2543.0
+199.38176 689.3
+199.39221 1051.2
+201.12338 1252.0
+214.51126 587.7
+221.72166 566.8
+231.33372 559.0
+272.17142 2669.0
+274.12213 825.0
+280.17557 641.5
+295.16290 759.1
+299.53516 949.5
+321.69788 564.7
+327.20285 920.0
+330.06665 567.3
+330.40170 583.5
+333.20374 763.1
+336.20886 1824.6
+336.71085 1033.9
+341.20026 831.6
+350.20514 7958.7
+350.28043 800.3
+350.70709 3612.8
+351.21426 3987.7
+369.22437 99958.5
+370.22849 20527.3
+370.71777 1407.3
+371.22989 2174.1
+396.21298 1210.0
+407.49356 635.0
+414.23462 781.2
+427.53876 641.9
+427.71976 785.6
+428.22137 1722.9
+437.23529 667.3
+441.71930 1595.2
+442.22070 729.1
+455.24756 10878.7
+455.58206 12108.6
+455.91534 5500.3
+456.24915 935.7
+473.28281 515.9
+473.30289 518.6
+473.93961 825.3
+474.60196 951.8
+479.94235 767.7
+480.27893 728.4
+482.30798 12128.4
+482.65561 675.0
+483.31155 4316.6
+484.26096 1908.2
+484.59256 2211.3
+484.92831 1401.0
+485.26285 1033.6
+491.93900 901.7
+492.23315 601.9
+492.80209 591.0
+497.27396 1951.4
+497.61142 1518.0
+497.94501 1288.5
+498.25549 838.8
+498.75909 715.2
+499.28815 3433.4
+501.23685 1033.9
+525.97400 867.8
+527.61316 2519.9
+527.94696 2602.8
+528.28107 2476.5
+532.50415 2234.8
+534.97076 9759.3
+535.30554 12173.8
+535.63922 7797.0
+535.97498 1984.8
+536.31445 1355.0
+536.62274 2205.2
+547.27911 575.7
+550.31158 824.8
+555.97571 4035.7
+556.30988 5722.2
+556.64484 2985.7
+556.97772 1119.7
+558.75079 2871.4
+559.25507 1100.6
+559.64301 693.0
+565.30719 10383.5
+565.64160 13891.8
+565.97559 9805.1
+566.30994 5346.1
+566.64490 1533.9
+569.13263 581.8
+574.32355 795.9
+574.65509 1060.0
+598.02374 5886.2
+598.35809 5627.8
+598.69312 1219.3
+612.33685 11724.0
+612.66278 11245.7
+612.99725 7160.2
+613.36914 4242.3
+614.38080 822.1
+651.36578 1598.5
+651.70154 2946.7
+652.03473 917.7
+664.75214 703.1
+665.54614 607.5
+668.85217 2824.1
+669.18622 602.3
+669.35382 1996.8
+669.86188 3431.3
+676.62531 991.1
+676.84338 1688.2
+677.34485 1340.8
+677.85016 3537.9
+681.39532 712.1
+682.36609 19451.6
+682.86829 25096.9
+683.36871 12320.9
+683.87067 3481.5
+694.31317 703.9
+699.40247 7777.9
+700.40472 3951.8
+701.40900 718.2
+710.39191 743.9
+710.89996 5776.9
+711.40192 4624.3
+711.90216 1780.7
+719.41223 2174.7
+719.91907 1665.3
+720.42114 1076.5
+725.88336 1613.9
+726.38501 2481.5
+731.10986 651.8
+735.55188 611.1
+739.42279 1414.6
+745.41138 22043.0
+745.91284 27592.1
+746.41327 14317.7
+746.91840 4857.5
+747.41870 767.9
+755.39734 1288.0
+755.89941 1622.8
+756.39978 1023.0
+760.91724 848.3
+781.91132 1634.7
+782.40796 3318.1
+782.90570 2886.2
+783.40247 1546.0
+790.91608 45893.2
+791.41669 59127.8
+791.91785 37481.7
+792.41949 13360.1
+792.92206 3795.2
+795.62225 1167.6
+804.43201 767.2
+838.41290 702.8
+847.45752 5906.8
+847.95844 8235.6
+848.45984 5880.2
+848.96252 1997.4
+854.44037 825.3
+913.34265 632.5
+985.58325 735.1
+1039.43616 576.6
+1044.18103 590.2
+1149.34924 601.9
+1188.21106 1100.5
+1195.98096 555.5
+1198.12451 3310.9
+1268.21863 630.2
+1487.49902 653.4
+1525.38306 762.6
+1756.94739 734.3
+1770.98486 594.8
+1877.78613 808.1
+1878.27576 796.8
+1878.73328 1633.5
+1879.49207 20238.7
+1879.79517 1576.8
+1880.24414 802.9
+1881.21411 1017.9
+1907.05286 6985.0
+1930.53821 986.0
+S	2298	2298	555.3340321
+Z	4	2217.30483
+141.30742 577.8
+141.84663 780.5
+144.30005 623.6
+146.92430 519.7
+165.76659 722.1
+171.63733 503.3
+175.11769 641.7
+188.10600 658.3
+188.19864 833.0
+188.24248 667.0
+188.26234 1650.3
+188.28455 2252.8
+188.29865 1801.6
+188.30920 1584.6
+188.32883 1196.5
+188.35239 688.6
+192.45975 561.1
+198.90758 916.2
+199.20273 639.6
+199.26503 1723.0
+199.27599 1812.3
+199.28987 538.3
+199.30110 1649.2
+199.30763 1446.4
+199.39749 780.0
+201.12274 750.9
+215.13370 523.6
+218.36501 704.6
+234.12627 572.2
+241.71800 559.4
+252.15218 604.2
+255.29265 551.7
+266.21902 597.1
+272.15161 736.3
+272.17102 1252.3
+272.23764 780.8
+272.59686 608.3
+280.18567 550.9
+288.20355 783.3
+299.13477 990.6
+302.55670 675.5
+303.17737 2676.8
+306.54736 603.1
+308.90524 668.2
+311.13358 1085.6
+312.31046 601.1
+333.77927 554.0
+350.20609 1235.2
+355.68237 1193.8
+366.19415 553.7
+369.22449 14596.5
+370.22870 1641.8
+374.52814 9763.8
+374.86197 5372.6
+375.19604 1946.5
+381.37344 646.9
+384.22327 1469.0
+395.23465 678.6
+398.07745 614.2
+407.55063 1572.0
+409.27771 716.2
+412.21555 829.8
+423.20053 968.9
+427.54968 650.4
+428.78543 648.1
+432.22009 5235.2
+433.22253 1331.4
+433.77887 672.6
+437.84503 672.5
+451.19324 2243.5
+469.20313 1494.7
+470.20587 1001.3
+473.12589 622.4
+476.24588 1360.7
+477.25162 647.1
+478.32120 1352.0
+478.82028 1168.5
+480.31964 1169.4
+482.30701 741.8
+482.67062 588.1
+483.31241 828.6
+483.81427 696.6
+485.32809 906.4
+485.82822 1094.1
+490.31970 1928.0
+492.31708 6562.3
+492.81897 2939.4
+498.32813 2252.9
+499.32559 2305.7
+499.74841 942.8
+499.82614 1274.2
+500.24893 957.3
+500.75284 722.8
+501.03363 567.6
+505.91318 3146.9
+506.24463 2033.1
+506.58771 1068.2
+512.76093 1836.0
+517.75549 750.3
+523.30450 691.0
+526.35907 686.2
+526.80255 6749.7
+527.05255 7621.0
+527.30347 3611.9
+527.55786 1414.1
+532.49548 2085.8
+534.86200 9339.1
+535.28387 1138.1
+535.36395 4051.7
+535.80151 1788.9
+535.86487 1152.7
+536.30212 2812.7
+539.85522 2983.7
+540.35706 1662.5
+540.95807 793.9
+541.36816 1493.7
+552.77448 589.9
+553.92249 571.8
+554.08459 534.3
+561.29102 1374.1
+561.78815 828.5
+568.27710 1027.6
+572.28027 927.2
+585.33392 3361.6
+585.83606 4521.7
+586.28070 992.8
+586.33783 1926.2
+586.84039 756.4
+600.59460 559.4
+603.82739 1015.2
+604.32990 1384.6
+606.64166 1514.1
+609.96838 1042.5
+610.82147 4745.6
+611.32495 2692.1
+611.82684 1235.5
+612.40503 5898.2
+612.83429 1841.2
+613.33429 2008.7
+613.40979 1044.5
+613.83887 1604.2
+614.32513 590.6
+615.97260 4165.8
+616.30829 3728.7
+616.64209 872.7
+616.97034 989.3
+621.35767 752.2
+628.35590 697.0
+630.41333 958.5
+638.85645 912.0
+650.70209 914.5
+658.38306 1523.0
+659.38983 930.4
+662.67914 3066.8
+662.98389 1231.4
+663.01617 1211.9
+663.31549 827.2
+663.68719 1228.9
+664.36920 677.9
+664.86475 947.3
+665.37024 745.5
+667.36182 931.9
+669.03986 4461.4
+669.37280 4224.7
+669.71356 7055.8
+670.05035 4523.3
+670.38568 3288.1
+676.63263 988.2
+677.86084 856.6
+678.35596 563.9
+682.83984 1841.5
+683.35248 756.1
+683.44275 1010.2
+692.34399 1027.3
+693.33673 854.1
+699.40015 1318.4
+700.41095 702.4
+702.06763 5814.6
+702.40277 6448.0
+702.73767 2840.7
+703.07074 788.7
+710.35730 10093.5
+711.35992 2969.2
+712.36224 926.4
+717.88629 1107.9
+718.37836 1060.0
+731.13202 830.6
+745.40802 852.7
+745.91449 947.2
+746.42993 575.1
+750.80676 634.4
+758.36713 4095.5
+758.87170 2766.1
+759.36932 1903.9
+761.41010 584.5
+769.50659 685.2
+778.80298 634.6
+784.51135 831.6
+795.62323 1146.3
+803.84552 652.1
+804.94983 4029.9
+805.44916 3180.6
+805.95581 1085.5
+866.91248 3865.5
+867.41815 2465.3
+867.91669 2561.2
+870.54236 790.1
+882.57111 672.6
+883.56067 2290.0
+884.55609 2639.8
+905.15790 608.1
+923.45313 2378.7
+923.95813 2243.6
+983.63013 2617.8
+984.62665 859.4
+997.64331 2420.6
+998.63934 1118.0
+1096.70972 1515.4
+1097.71484 1466.8
+1131.54810 560.1
+1187.47180 632.0
+1188.13220 885.2
+1198.11218 3211.9
+1206.85071 559.4
+1458.95056 628.0
+1525.43567 929.1
+1579.12024 690.6
+1705.89014 623.7
+1877.05969 854.6
+1879.51099 20026.2
+1879.79639 2717.0
+1907.05103 7233.6
+1930.64087 1166.6
+S	2299	2299	702.3361696
+Z	4	2805.31338
+182.77087 530.7
+188.25395 748.8
+188.26280 708.7
+188.27467 937.2
+188.28206 940.8
+188.29353 1460.7
+188.30287 937.4
+188.31314 593.1
+188.32196 892.2
+188.33479 749.2
+189.17322 522.2
+190.43201 660.1
+196.58186 482.5
+197.68616 677.7
+198.90646 939.9
+199.18893 705.9
+199.23471 631.1
+199.25586 569.5
+199.28387 2572.4
+199.29584 912.1
+199.30383 1047.5
+199.31805 621.3
+199.33553 645.1
+200.86778 533.1
+205.00081 601.6
+217.12164 541.4
+219.48393 641.1
+233.56503 611.4
+237.79263 588.3
+238.36719 667.0
+238.69058 596.5
+239.65213 582.9
+248.08755 593.1
+254.96912 619.9
+258.10825 1471.7
+264.41360 605.6
+268.20248 537.0
+286.59802 615.2
+303.17725 821.2
+341.68484 2590.0
+345.43381 578.4
+381.19241 536.4
+391.21976 1016.9
+416.26172 2123.5
+417.27081 493.7
+420.28305 643.9
+429.20929 669.0
+461.07019 577.0
+476.27087 2434.4
+478.27478 2327.6
+482.33038 904.9
+493.26630 519.5
+507.18994 5580.0
+508.19073 1522.9
+532.56000 2367.8
+539.25061 648.8
+545.30304 5432.7
+547.28680 2080.3
+547.78809 1343.2
+561.29523 996.8
+565.72589 677.5
+574.72784 1314.9
+575.72961 1108.4
+578.22882 1689.6
+579.32465 3784.4
+580.29895 858.9
+583.08746 623.2
+583.34332 713.6
+586.31781 704.6
+595.41644 2004.8
+596.51025 650.5
+596.81152 765.5
+599.79779 935.2
+610.24609 1890.5
+610.75110 698.8
+619.68579 670.9
+621.17035 647.8
+622.24561 672.6
+626.39929 1054.3
+629.36389 708.5
+633.29633 1371.0
+633.54291 985.1
+633.79626 1272.2
+634.04150 946.7
+636.33105 1190.9
+636.66260 1041.2
+637.79834 8874.2
+638.04962 10870.8
+638.29968 5778.0
+638.55249 1392.2
+640.94995 1438.5
+642.26520 11342.9
+643.27063 3260.7
+644.27448 949.4
+657.80408 1045.4
+658.06287 761.1
+658.30151 1050.8
+662.04913 1010.7
+662.30115 2357.3
+662.55438 2097.0
+662.80084 712.4
+666.55493 16109.0
+666.80646 15904.9
+667.05676 10777.5
+667.30682 2833.6
+674.30005 827.3
+676.63190 980.5
+682.36243 10798.1
+683.16962 661.5
+683.20734 585.5
+683.36383 4101.3
+683.98462 644.7
+717.86591 679.4
+724.29358 806.1
+731.07977 819.7
+731.14899 833.0
+736.09485 803.4
+742.39044 4710.7
+742.89050 3414.2
+743.38879 1695.8
+774.70410 877.6
+777.84424 944.7
+779.69806 2273.0
+780.02942 1280.2
+780.63843 680.7
+781.43146 8402.7
+782.43481 2313.1
+784.78351 749.7
+786.36493 815.0
+808.90894 981.3
+809.40869 1358.2
+814.31628 604.0
+817.71680 2212.8
+818.04816 2168.9
+818.37677 1849.0
+838.43591 714.3
+843.37183 1128.8
+844.05743 4130.8
+844.39191 6141.5
+844.72638 4063.9
+845.05939 1690.8
+846.39447 1229.7
+850.06342 57006.0
+850.39703 59367.0
+850.73102 38231.8
+851.06567 9045.2
+857.41394 2349.9
+857.96283 658.4
+879.39032 2016.9
+880.50201 1921.8
+881.50897 959.3
+882.40051 2556.3
+882.73267 5179.2
+883.06641 3889.9
+883.38812 2040.7
+883.71637 776.7
+887.05560 1041.5
+888.40546 53635.9
+888.73914 45977.4
+889.07312 36431.5
+889.40875 10508.4
+899.40790 788.8
+902.38110 3049.1
+903.39758 1215.7
+903.90515 1199.5
+904.40375 1128.3
+912.08356 1820.8
+912.41779 1381.0
+912.75970 899.6
+915.41040 1478.8
+915.74481 1000.8
+916.08038 1072.3
+925.40845 1398.0
+925.89935 1212.1
+951.53491 1086.5
+960.92133 4710.4
+961.42657 1766.7
+961.92725 965.4
+962.94495 1101.5
+963.44598 1700.5
+974.93512 848.9
+985.44000 2437.3
+985.93616 1420.3
+1009.55573 1194.7
+1010.46118 1636.7
+1010.95538 2637.6
+1035.93787 927.8
+1043.44324 909.1
+1066.56177 916.9
+1066.99756 1820.2
+1067.49902 2528.8
+1093.48108 1321.1
+1141.03381 1140.7
+1148.45349 2252.8
+1149.45032 1169.6
+1169.04846 1369.6
+1169.53894 1102.4
+1170.02686 646.5
+1177.43689 717.4
+1193.57861 703.3
+1198.24939 3117.1
+1219.48755 1580.6
+1220.48950 1079.0
+1318.56079 1316.7
+1319.55017 947.6
+1320.56274 723.6
+1320.88403 675.3
+1325.55383 699.0
+1330.10913 662.6
+1418.63013 904.4
+1420.59070 809.1
+1525.32410 853.4
+1571.13330 654.2
+1640.70178 623.9
+1640.86804 587.3
+1814.94202 712.7
+1878.91797 1053.7
+1879.52490 20013.7
+1879.82764 825.5
+1880.15247 1082.3
+1906.86975 1041.9
+1907.14722 7276.3
+1907.59229 854.1
+1918.94421 773.1
+1930.48901 663.5
+S	2301	2301	705.3509996
+Z	4	2817.3727
+182.00052 591.0
+187.02971 540.7
+188.27969 1967.0
+188.29546 1907.3
+188.30727 1422.9
+196.55714 703.6
+198.90814 993.2
+199.19267 832.9
+199.28973 3017.2
+199.31268 1203.4
+199.38809 1112.8
+216.20811 543.0
+240.05009 666.5
+245.64584 578.7
+251.69261 589.0
+253.29895 679.2
+253.38637 723.0
+258.21799 610.3
+268.05774 599.2
+270.56650 585.8
+298.09732 613.2
+299.54245 820.1
+316.41943 590.2
+332.23563 796.6
+341.54474 666.0
+400.26306 690.5
+489.25848 1045.2
+515.29010 714.5
+532.52350 1713.3
+582.29230 12393.3
+582.79443 4855.4
+586.06049 1426.1
+608.27496 1545.3
+631.32916 775.1
+638.83533 9618.0
+639.33569 4226.0
+641.27625 1056.1
+656.27533 740.3
+667.81079 1023.1
+676.05676 781.7
+676.64655 1265.7
+682.36432 706.0
+686.37311 1395.2
+713.79004 690.0
+724.77118 605.5
+727.37592 1440.9
+731.01276 647.2
+731.35913 1078.6
+731.63629 688.5
+732.80933 687.1
+737.69983 1210.0
+742.10175 612.9
+754.02930 960.8
+767.79590 666.4
+768.91095 4765.8
+769.41162 1918.4
+771.35046 2689.5
+774.37335 805.2
+774.70941 891.6
+787.73901 611.2
+795.61584 862.6
+802.55884 596.7
+804.06311 944.4
+812.15643 583.5
+813.21307 621.9
+819.43719 2478.7
+819.93115 1537.0
+827.89252 2070.0
+841.73669 1783.6
+842.06494 1481.3
+844.08527 925.5
+844.42126 1237.9
+844.74792 1197.7
+847.73700 2311.8
+848.07806 1007.2
+851.72821 1126.7
+882.11041 1109.4
+884.58838 717.0
+890.08264 1479.7
+890.41370 1234.5
+1091.39966 609.1
+1182.36292 670.7
+1187.99841 750.0
+1198.17200 2923.4
+1264.52808 784.4
+1354.37256 683.5
+1525.43396 715.3
+1634.15430 725.9
+1664.78796 716.3
+1876.52039 900.0
+1877.70630 726.8
+1878.10535 776.5
+1878.70605 816.6
+1878.97192 815.7
+1879.53162 19753.4
+1879.97180 779.4
+1880.14819 782.3
+1907.04749 7785.2
+1930.60645 1008.7
+S	2302	2302	516.5425271
+Z	4	2062.13881
+137.73776 564.9
+142.20566 636.6
+142.44180 579.9
+150.88133 711.9
+153.49493 636.0
+175.11870 1584.6
+185.11583 1468.8
+188.22656 590.4
+188.24519 686.1
+188.25594 740.9
+188.27016 899.6
+188.28160 867.3
+188.29333 846.4
+188.31306 693.4
+188.32634 575.1
+188.35268 789.2
+195.52272 574.5
+198.90369 1239.6
+199.27966 2293.0
+199.30865 1466.5
+199.31972 975.0
+199.37831 1188.7
+199.40747 927.7
+213.34235 510.0
+244.38972 631.4
+258.03964 593.1
+272.17181 2622.8
+282.28864 689.3
+307.31036 596.6
+308.56683 536.4
+319.17181 1608.2
+320.94257 614.5
+321.67352 839.5
+327.20395 975.1
+333.20166 692.7
+336.20602 1052.5
+337.24359 549.4
+341.19797 772.5
+350.20520 7718.4
+350.70660 2208.4
+351.21423 3627.2
+369.22424 95895.2
+370.22852 16495.4
+370.71768 1087.2
+371.23093 1230.9
+390.17911 701.8
+390.24210 532.1
+396.21503 1053.2
+400.53134 558.4
+409.24506 980.7
+419.70673 656.4
+420.01544 592.3
+425.84573 673.9
+427.72073 1414.7
+428.73221 666.8
+437.57086 644.0
+441.71957 1297.9
+442.22586 1027.2
+455.24750 9104.1
+455.58182 9036.0
+455.91531 4887.7
+456.25055 1591.9
+466.24579 841.5
+473.94125 1200.4
+474.60257 823.1
+479.94382 995.0
+482.30765 12977.4
+482.65814 584.4
+483.31033 3341.8
+484.25931 2699.5
+484.59290 2208.1
+491.27164 861.1
+496.88681 668.4
+497.27451 1642.2
+497.61041 1392.0
+498.26474 691.5
+499.28854 3772.6
+501.23804 2427.0
+501.74005 1228.9
+509.70624 728.8
+527.61285 3092.5
+527.94647 2669.3
+528.28326 1190.8
+532.54321 1704.1
+534.97083 12109.7
+535.30505 14086.1
+535.63953 6728.1
+535.97198 1268.1
+536.51996 597.5
+536.62598 1096.1
+538.78735 627.5
+549.74615 1295.5
+549.97296 987.8
+555.97571 5976.7
+556.31006 5121.3
+556.64288 3432.7
+556.97156 887.5
+558.75134 5633.4
+559.25299 2491.4
+559.63629 836.1
+565.30707 14823.1
+565.64136 16484.4
+565.97534 8537.8
+566.30945 3624.9
+566.64642 1379.3
+567.98499 565.4
+573.99207 871.7
+583.92200 761.9
+598.02209 3126.3
+598.35858 3171.4
+598.69611 655.7
+603.78864 1013.8
+608.85333 793.2
+612.36383 10356.9
+612.66315 9973.1
+612.99750 4504.5
+613.36859 2857.0
+615.29437 1019.1
+617.81085 649.0
+630.40082 690.0
+636.87878 667.9
+647.30035 654.9
+650.35815 1067.9
+651.36243 1171.5
+651.70135 1909.9
+668.85608 2848.9
+669.35394 2536.6
+669.85693 1642.7
+676.64838 1081.0
+676.84265 952.3
+677.84778 1439.0
+682.36536 23561.0
+682.42462 1062.9
+682.86829 21212.4
+683.37006 9352.9
+683.87207 2568.7
+685.79852 761.4
+699.40204 9011.1
+700.40588 3901.1
+701.39545 640.5
+710.39349 1448.3
+710.90131 4679.0
+711.40350 3914.2
+711.90472 2434.0
+712.40869 1201.2
+719.41229 2785.3
+719.91150 2940.5
+725.88605 2225.2
+726.38672 1785.1
+726.88782 770.4
+736.41559 799.1
+736.90082 1022.8
+739.42560 1033.5
+745.41113 24916.9
+745.91248 25279.1
+746.41309 9259.7
+746.91626 3411.9
+755.39221 1123.8
+755.90155 1828.8
+773.90997 625.3
+781.91125 1351.1
+782.40814 2367.5
+782.91144 2089.3
+783.39948 1104.8
+788.41803 603.1
+790.91553 52717.3
+791.41681 54822.5
+791.91772 29450.7
+792.41895 11103.4
+792.91632 1661.0
+795.61005 875.7
+847.45837 7436.5
+847.95953 7074.0
+848.45953 4526.4
+848.96271 1028.7
+854.43433 873.6
+1017.85669 656.9
+1021.11078 732.4
+1033.99304 580.1
+1045.92749 677.1
+1057.26563 760.5
+1079.39063 599.4
+1109.49219 590.5
+1109.88025 678.0
+1198.21655 3500.2
+1215.31470 605.5
+1215.39709 522.9
+1491.79089 583.8
+1525.40784 800.3
+1715.33582 668.6
+1870.18628 1011.7
+1877.21704 733.0
+1878.06360 870.2
+1878.98938 1372.2
+1879.56860 19978.5
+1880.15466 1633.9
+1881.06384 1021.3
+1881.95654 805.6
+1907.03442 7308.6
+1918.86890 671.4
+1930.61523 927.0
+S	2303	2303	1880.0138246
+Z	2	3758.18
+Z	3	5636.766
+532.54767 1974.8
+549.13959 948.5
+699.27771 610.3
+731.11414 1221.9
+744.57227 766.3
+795.63763 1107.8
+888.76941 638.7
+910.48627 741.3
+1057.25232 833.1
+1091.99939 734.0
+1198.22900 3758.7
+1236.90491 693.8
+1726.38586 624.8
+1740.83582 662.0
+1777.06738 757.1
+1870.08765 921.9
+1876.85059 842.3
+1878.54407 976.9
+1878.92114 1284.2
+1879.14868 1083.1
+1879.59692 16608.9
+1880.28320 2269.9
+1907.05701 7372.6
+1926.49719 617.0
+S	2305	2305	965.4872921
+Z	4	3857.91787
+257.24503 566.1
+275.70190 597.8
+326.17102 1041.7
+334.88843 641.0
+346.87546 637.4
+367.06723 758.4
+381.40012 665.6
+397.93204 655.2
+439.25113 1160.7
+442.21594 633.1
+445.14700 584.2
+447.80475 620.7
+456.69519 588.2
+461.23462 818.7
+482.87411 585.1
+488.58893 637.1
+489.46408 741.5
+495.82993 654.1
+532.58905 1709.3
+544.27710 656.0
+549.20728 635.1
+559.31830 1718.7
+591.80524 4572.1
+592.30493 3376.0
+598.14124 690.1
+630.35577 1749.2
+659.29840 1058.3
+676.64099 1050.6
+677.31226 1430.6
+691.05219 638.7
+710.40448 1074.1
+743.43878 1981.0
+744.43787 989.5
+748.88293 763.2
+761.56885 723.7
+770.34412 716.2
+781.36407 1119.2
+787.36115 3141.3
+788.05200 997.4
+805.37323 3563.9
+806.37079 1602.1
+813.82397 622.8
+826.41858 746.8
+828.35938 790.1
+837.47668 576.5
+840.25623 695.2
+844.38379 2950.7
+845.38812 2036.9
+850.67255 722.4
+862.39600 3906.1
+863.38806 1320.2
+866.44775 1161.8
+866.94928 1067.1
+869.09607 2523.2
+869.43304 1393.7
+874.47931 1725.9
+882.50641 594.5
+888.80927 642.1
+888.86169 526.3
+891.18933 700.3
+892.19092 854.2
+894.37524 840.1
+895.69171 849.0
+895.94031 4094.0
+896.18695 5855.5
+896.44055 3200.9
+896.69684 1556.4
+900.18884 1341.6
+900.44061 2914.3
+900.69397 2690.5
+900.94434 3893.6
+923.97314 1155.2
+924.46259 1206.2
+928.46875 1918.3
+928.80176 2096.0
+929.13495 1226.6
+934.13440 16697.3
+934.46930 30861.2
+934.80255 28958.6
+935.13776 15223.6
+935.47162 5319.7
+935.80316 1829.8
+942.90143 588.3
+981.98083 1101.3
+999.50977 4830.4
+999.84271 8426.9
+1000.17731 5664.8
+1000.51141 3572.2
+1001.15454 863.8
+1008.17212 857.7
+1013.49255 894.8
+1013.85034 1016.6
+1018.51575 8393.1
+1018.85071 16732.3
+1019.18219 14771.0
+1019.51752 11209.6
+1019.84467 2386.2
+1020.18945 757.0
+1036.98596 1049.0
+1037.49207 2000.6
+1040.50037 1617.5
+1041.50330 990.8
+1045.99963 3986.0
+1046.50427 5077.0
+1046.99585 3365.7
+1047.48633 1210.4
+1050.19958 843.2
+1055.19702 1999.1
+1055.53394 6000.3
+1055.86365 7225.1
+1056.19739 6781.6
+1056.53101 3753.7
+1056.86060 1381.0
+1057.22632 751.4
+1058.51721 2494.8
+1059.51563 1752.6
+1061.19946 1381.2
+1061.33496 1022.1
+1061.53247 3873.6
+1061.86694 5250.9
+1062.20483 2128.9
+1062.53528 1175.2
+1086.52063 1279.9
+1087.02637 1408.4
+1088.20386 1178.1
+1088.55969 774.4
+1095.52832 3983.5
+1096.03406 5712.5
+1096.53455 5105.0
+1097.03723 2619.7
+1097.54614 894.9
+1099.54688 1722.1
+1099.87952 4388.6
+1100.21411 3996.9
+1100.54761 1692.5
+1100.87402 878.8
+1122.53577 753.0
+1123.03406 1283.8
+1127.24146 655.3
+1127.89648 2354.0
+1131.05200 3233.3
+1131.55298 5439.5
+1132.05371 3532.6
+1132.55469 1988.6
+1133.22583 3224.7
+1133.56213 5777.9
+1133.89673 7326.7
+1134.23083 4248.2
+1134.56873 1338.0
+1144.23926 776.6
+1156.55103 948.6
+1166.64709 959.3
+1170.57288 889.6
+1170.90222 1459.6
+1173.05554 1277.5
+1176.24390 725.6
+1176.57056 1954.3
+1176.90723 1677.4
+1177.24084 1039.8
+1177.58362 826.2
+1181.57385 5711.8
+1182.07861 9768.9
+1182.58325 7268.6
+1183.07874 4037.6
+1183.60437 2401.5
+1184.61621 879.3
+1194.25916 926.7
+1194.59839 969.3
+1198.31299 2956.5
+1200.25366 1625.0
+1200.58557 3433.4
+1200.91736 1182.3
+1238.12012 2617.0
+1238.61975 3553.5
+1239.12122 3312.2
+1239.62305 1380.0
+1255.62720 740.6
+1293.61230 1011.1
+1294.63623 2072.1
+1297.63037 1172.1
+1298.62573 980.8
+1302.63538 2542.6
+1303.13989 4406.6
+1303.64160 3973.7
+1304.13977 1883.4
+1304.64978 680.4
+1339.16589 1756.1
+1339.65479 824.1
+1352.18298 795.3
+1383.66516 800.1
+1384.65430 849.7
+1391.68140 991.8
+1392.18542 2005.1
+1392.67822 1755.5
+1393.19092 2410.1
+1393.66370 959.3
+1396.67896 960.7
+1400.69897 10691.8
+1401.20032 22452.2
+1401.70068 19552.0
+1402.20251 11776.0
+1402.70789 3510.6
+1403.21741 1087.6
+1498.75537 1562.4
+1499.26514 2335.1
+1499.75427 2480.1
+1500.26501 2091.5
+1525.58386 896.0
+1527.27905 1752.7
+1527.76892 2240.6
+1528.26965 1842.2
+1528.77283 1925.3
+1604.30054 716.5
+1618.80237 2060.8
+1620.77600 889.6
+1777.14233 754.4
+1870.19653 753.8
+1879.26074 2314.6
+1879.53284 19436.5
+1907.08411 7210.3
+1907.33728 1327.6
+1930.82300 998.7
+S	2306	2306	965.4870746
+Z	4	3857.917
+260.65866 615.9
+283.95404 565.6
+292.34860 624.6
+308.90051 797.3
+345.34961 595.7
+356.20432 621.8
+370.53833 710.0
+379.37076 587.9
+384.75528 657.8
+411.84631 626.8
+414.92908 705.4
+443.23337 835.1
+445.26917 601.8
+457.66669 872.3
+515.80096 631.3
+516.36414 636.0
+532.55920 2006.1
+535.94672 688.5
+562.29230 814.6
+591.80774 1344.0
+626.87903 607.4
+650.65643 612.0
+680.48181 527.4
+731.12659 667.7
+781.07758 920.0
+787.36786 751.1
+795.61664 865.7
+862.39008 990.8
+863.39703 873.1
+895.68256 980.9
+895.93970 730.0
+896.43719 570.6
+900.44629 782.7
+928.46039 1384.6
+929.86902 745.4
+934.13397 6722.1
+934.46765 6449.5
+934.79932 4496.3
+935.13464 2954.4
+935.46503 1321.9
+943.08105 677.7
+943.69330 750.8
+948.13104 1223.9
+948.38318 921.1
+999.50586 1789.2
+999.84222 1918.6
+1000.51880 949.3
+1013.01318 705.8
+1018.51563 5122.5
+1018.85126 5423.8
+1019.18591 2811.9
+1019.52490 1939.3
+1019.86145 1258.9
+1041.49170 705.5
+1045.99658 1111.0
+1055.53369 1206.3
+1055.86487 1571.4
+1056.20630 1201.4
+1061.19971 1356.3
+1061.52820 1889.0
+1095.53345 2229.9
+1096.04517 1708.6
+1099.54578 1124.9
+1099.87439 1814.5
+1100.22217 770.6
+1129.78247 667.2
+1131.05078 2125.4
+1131.56226 1102.9
+1133.22571 1381.5
+1133.56104 2107.8
+1134.21594 693.8
+1134.56787 708.0
+1166.65466 1516.4
+1167.66138 1318.0
+1181.57385 1601.1
+1182.07349 1704.2
+1182.58643 1076.6
+1198.24976 3294.9
+1200.22632 736.7
+1209.33997 751.8
+1238.12585 1012.6
+1238.60938 1124.5
+1302.64355 1569.3
+1385.88953 625.8
+1400.69177 4271.6
+1401.20007 4737.7
+1401.70081 1752.1
+1402.19775 1255.1
+1494.21619 771.5
+1499.22729 819.1
+1553.35388 618.0
+1874.61865 741.6
+1877.63879 762.7
+1878.99377 1266.2
+1879.49780 19971.5
+1880.01074 1271.0
+1882.50610 661.8
+1907.11145 7154.5
+1907.50586 763.5
+S	2307	2307	966.4915746
+Z	4	3861.935
+271.46625 700.2
+308.14340 589.4
+308.88336 689.0
+315.76620 570.6
+326.17093 1951.3
+337.18774 690.9
+357.20203 855.0
+417.16238 919.5
+427.55463 687.4
+434.24960 642.4
+436.26132 588.1
+439.25351 1386.9
+440.13519 606.3
+443.22791 663.8
+447.73672 601.9
+461.23953 1896.4
+477.16312 561.2
+506.27148 823.8
+522.29291 1929.1
+532.57690 1730.0
+544.27673 1472.7
+550.14453 633.0
+559.32074 2341.0
+560.32367 719.3
+561.29657 769.4
+577.95532 836.5
+580.26843 779.5
+583.28973 937.6
+585.43964 649.7
+591.80518 5914.7
+592.30695 5204.8
+592.80524 2194.0
+593.33124 917.7
+596.23083 1080.5
+611.33319 1549.9
+630.35712 3104.2
+637.33539 653.3
+659.30328 1915.4
+676.64465 1262.0
+677.31396 3126.7
+678.31451 1365.7
+692.39557 855.0
+695.30817 812.1
+699.34924 822.4
+710.40161 1731.2
+711.41174 864.4
+743.44061 5299.3
+744.44312 2408.2
+748.38776 1029.0
+748.88910 924.8
+769.34760 911.9
+770.33044 714.7
+781.37189 1118.4
+787.36169 4715.0
+788.35815 1303.8
+788.40210 737.8
+789.05731 1056.3
+792.15582 898.7
+795.62140 1030.4
+798.39807 601.2
+799.38934 805.2
+805.37036 5221.4
+806.37811 2711.3
+807.37036 1064.8
+826.41650 1327.8
+826.74506 748.2
+827.35669 1052.2
+828.34460 603.3
+833.10358 666.7
+844.38251 4550.8
+845.38586 2549.4
+846.16534 1208.0
+850.66351 1166.8
+850.92834 728.0
+856.24554 799.5
+862.39380 6431.5
+863.39185 3039.2
+864.09387 908.3
+864.40039 917.6
+864.48651 758.4
+866.44312 2129.0
+866.95325 2558.8
+867.44397 1098.7
+868.76233 1308.5
+869.09387 2012.1
+869.18298 621.8
+869.43091 2159.0
+869.76727 1384.9
+873.92023 807.0
+874.48138 3264.6
+875.48169 2003.1
+876.48871 652.7
+878.43219 690.2
+882.67761 1143.5
+887.42834 635.3
+891.43103 1292.4
+891.68622 1229.7
+891.93445 2128.2
+892.18671 1857.8
+892.44019 849.7
+895.69397 1568.4
+895.93988 5889.1
+896.19092 7144.0
+896.44037 6123.3
+896.69189 4242.2
+896.93970 3129.3
+900.19061 2157.7
+900.44391 6057.3
+900.69336 6319.3
+900.94220 6342.8
+901.19678 2343.3
+901.44122 1575.9
+923.96143 1326.6
+924.47064 1930.4
+924.96832 2387.1
+925.47467 846.1
+928.13635 1079.2
+928.46191 3016.1
+928.80121 3847.6
+929.13110 3639.3
+929.46387 3492.5
+934.13501 21843.9
+934.46948 46488.9
+934.80286 48990.0
+935.13733 38144.8
+935.47095 21087.4
+935.80536 8069.9
+936.14087 2593.1
+936.45990 949.3
+943.58514 792.8
+945.98529 772.4
+981.97852 1004.6
+982.48370 978.1
+993.83173 686.7
+999.50787 7088.1
+999.84399 17516.7
+1000.17664 16865.4
+1000.51123 8882.3
+1000.84503 5686.3
+1001.17633 1875.3
+1001.85187 708.0
+1011.54163 785.0
+1012.85266 953.1
+1013.18024 1987.0
+1013.50220 954.3
+1018.51575 14947.1
+1018.85028 28776.4
+1019.18408 30215.7
+1019.51898 21135.0
+1019.85138 12713.2
+1020.18579 4924.0
+1023.49286 773.8
+1030.47192 754.6
+1034.49231 714.9
+1036.99609 1310.0
+1037.48730 2174.8
+1037.98975 2229.7
+1038.49146 1339.5
+1038.98157 1097.1
+1040.50269 2826.4
+1041.50281 2374.7
+1042.52661 856.4
+1045.99768 6925.1
+1046.49890 7117.2
+1047.00122 4947.9
+1047.50146 2620.9
+1050.18811 1165.8
+1055.20044 2337.4
+1055.52881 7418.0
+1055.86377 12773.1
+1056.19653 13874.1
+1056.52966 9424.0
+1056.86230 4614.0
+1057.21313 2068.7
+1058.51294 5392.7
+1059.51428 2815.0
+1060.52612 1195.9
+1061.19727 3103.5
+1061.53503 6556.5
+1061.86731 5115.0
+1062.20337 6267.8
+1062.53979 3092.9
+1062.86816 1043.0
+1077.51746 966.2
+1078.15491 629.4
+1086.52600 1038.3
+1087.52454 1258.8
+1088.19666 1058.7
+1088.53601 1791.2
+1094.55054 763.0
+1095.53162 8353.3
+1096.03357 8586.8
+1096.53638 9684.6
+1097.03674 5159.3
+1097.53271 2123.8
+1099.54102 3548.9
+1099.87805 5571.0
+1100.21094 7541.1
+1100.54700 6158.2
+1100.88159 3497.6
+1101.21826 1057.9
+1110.03113 850.3
+1122.54468 2203.4
+1127.55212 1375.9
+1127.88184 1846.0
+1128.22693 2881.9
+1128.55701 2157.6
+1131.05371 6685.2
+1131.55383 8103.9
+1132.05676 7853.0
+1132.55579 4355.7
+1133.05408 1565.0
+1133.22815 5577.5
+1133.56042 9528.7
+1133.89539 11601.6
+1134.22864 9290.4
+1134.56287 4549.8
+1134.89563 2510.2
+1156.53821 930.0
+1164.56323 1197.8
+1165.57007 1199.9
+1170.56433 1331.9
+1170.90332 1615.8
+1171.23743 1995.1
+1171.57422 1736.9
+1172.56738 949.3
+1173.09399 1293.1
+1173.56750 2566.0
+1174.07336 2038.6
+1174.56555 1502.0
+1176.23999 1033.5
+1176.57227 1225.2
+1176.90845 2824.5
+1177.24585 1384.1
+1177.56799 1663.7
+1177.89587 829.4
+1181.57336 8617.8
+1182.07690 11216.5
+1182.58142 12977.9
+1183.07751 7355.7
+1183.59668 5857.3
+1184.60266 2002.3
+1194.58325 887.4
+1194.90698 1218.2
+1195.56006 1107.3
+1198.28931 3358.7
+1199.92371 1703.9
+1200.25964 2352.6
+1200.58716 4938.6
+1200.91333 3050.0
+1201.25427 2478.3
+1212.58789 910.9
+1230.10217 868.1
+1238.11853 3592.3
+1238.62036 6948.2
+1239.12158 5187.6
+1239.62048 3642.4
+1240.11169 1389.8
+1293.63733 1492.9
+1294.13416 1698.1
+1294.63281 2385.4
+1295.14075 1297.6
+1295.63977 2037.0
+1297.63049 1844.8
+1302.63831 3762.5
+1303.13892 6569.8
+1303.63953 8571.9
+1304.14331 5269.4
+1304.64441 3170.4
+1305.14221 1235.4
+1328.66528 1410.4
+1329.67102 835.4
+1339.15857 1276.5
+1339.66260 1563.3
+1352.67639 1130.4
+1353.17041 1799.7
+1383.68030 1391.2
+1388.00049 721.7
+1391.69678 1386.6
+1392.18994 3345.9
+1392.68884 3853.7
+1393.18933 2891.8
+1393.69104 1868.3
+1394.20337 867.3
+1396.71313 1461.3
+1397.70825 1451.3
+1400.69873 17728.0
+1401.20154 29718.0
+1401.70093 33408.0
+1402.20325 22841.2
+1402.70447 15902.4
+1403.20715 4114.4
+1403.70105 1401.5
+1404.70081 868.9
+1424.66321 840.2
+1451.72363 887.1
+1495.77441 1759.7
+1496.76758 2612.6
+1497.76416 1552.4
+1498.76233 2697.9
+1499.25537 2813.9
+1499.76428 4387.2
+1500.25708 2896.4
+1500.76721 2501.7
+1511.86792 757.2
+1527.27258 1210.0
+1527.76941 2914.7
+1528.26868 4264.9
+1528.78015 2338.3
+1529.28247 1356.8
+1618.78955 2082.6
+1619.78699 3147.1
+1620.79602 1159.0
+1621.78210 909.0
+1879.00256 2037.8
+1879.54602 19937.8
+1880.11182 1699.4
+1907.03650 7424.2
+1918.91907 873.1
+1930.63892 772.6
+S	2309	2309	965.4836296
+Z	4	3857.90322
+266.59042 496.1
+282.00024 592.4
+308.90369 738.6
+345.24124 664.5
+367.53214 652.9
+439.25516 873.3
+447.37106 670.6
+461.23883 1215.5
+485.18173 637.0
+493.14868 685.1
+532.57806 2001.2
+549.14911 697.3
+591.80505 2087.4
+592.30499 1312.2
+630.35962 1552.6
+659.30542 680.3
+672.75165 680.8
+676.65320 892.7
+677.31433 941.3
+743.43726 2142.3
+744.43976 802.0
+759.33533 697.9
+764.29279 652.5
+777.40088 581.7
+787.36041 3276.9
+787.59448 626.8
+805.37213 2583.7
+806.37756 1081.8
+841.79810 726.9
+844.38623 2290.9
+845.38623 965.3
+862.39294 2803.5
+866.44629 1144.9
+868.99182 700.2
+874.48303 1794.3
+895.93842 3201.7
+896.19464 3365.1
+896.43304 1589.9
+896.68823 1603.0
+900.18878 1712.2
+900.44287 1467.7
+900.69342 2174.8
+900.93402 1354.5
+901.19330 2136.4
+923.95813 797.6
+924.46680 1373.6
+928.46362 1189.6
+928.80078 2193.4
+929.12811 1294.8
+929.46014 1382.9
+934.13470 12874.5
+934.46924 19293.6
+934.80280 17924.5
+935.13647 12156.8
+935.47107 8599.3
+935.80652 2561.7
+936.96844 852.8
+981.03040 753.4
+999.50537 2515.7
+999.84229 5283.9
+1000.17169 3268.9
+1000.50952 4548.3
+1000.84808 1683.3
+1001.17981 1037.7
+1018.51349 8716.6
+1018.85095 13625.7
+1019.18420 8877.7
+1019.51947 6697.3
+1019.85040 5040.7
+1037.01196 748.6
+1040.49878 1599.2
+1045.99158 2849.2
+1046.49988 2712.1
+1046.99719 2075.5
+1047.50940 1141.1
+1055.19629 1562.4
+1055.52722 4790.0
+1055.86426 4731.8
+1056.19495 4336.0
+1056.52808 3599.8
+1056.86499 1514.6
+1057.25134 896.2
+1058.51501 2397.1
+1059.51587 1128.6
+1061.19543 1095.9
+1061.53662 2768.9
+1061.86365 1592.1
+1062.20923 1581.6
+1087.01038 776.5
+1087.51440 811.5
+1095.53186 4376.8
+1096.03430 4169.5
+1096.53381 3247.2
+1097.03333 1541.9
+1099.87561 3711.7
+1100.21301 2775.5
+1100.54871 2317.7
+1100.87842 1710.2
+1101.22681 701.0
+1122.54370 1421.9
+1131.04810 2142.0
+1131.55054 4320.5
+1132.05066 2994.4
+1132.55286 1392.4
+1133.21692 2173.9
+1133.55981 4592.5
+1133.89709 5442.2
+1134.22571 2210.2
+1134.55579 2044.8
+1170.57007 783.1
+1170.89636 1386.9
+1173.06506 747.6
+1176.57141 1695.9
+1176.90540 941.1
+1181.57373 4901.2
+1182.07654 6991.3
+1182.58386 4934.0
+1183.07947 2310.1
+1183.59375 2697.6
+1184.60449 797.6
+1188.25134 1251.1
+1198.29272 3610.7
+1199.91833 860.7
+1200.25232 2149.0
+1200.59302 1225.6
+1238.11096 1668.0
+1238.62109 2385.5
+1239.61255 1076.1
+1259.00244 834.7
+1293.61462 857.9
+1297.61853 888.2
+1302.64099 1208.7
+1303.13940 3165.7
+1303.64014 3122.3
+1304.15430 1069.4
+1339.16284 1119.8
+1339.64368 1256.8
+1392.69580 1409.6
+1393.18713 1385.4
+1393.71362 1205.5
+1400.69824 8256.3
+1401.19958 11737.0
+1401.70117 11577.2
+1402.20447 7344.5
+1402.70508 4849.9
+1403.20313 1945.5
+1489.61560 871.8
+1499.25525 1544.2
+1499.76270 1529.6
+1500.25635 1087.9
+1527.26672 929.9
+1528.28296 1006.6
+1529.77222 743.3
+1618.80042 1409.1
+1619.81409 1057.0
+1770.08862 619.0
+1877.36536 765.0
+1878.49133 880.4
+1879.55884 20253.0
+1880.63538 910.7
+1886.44885 652.3
+1907.11951 7846.6
+1930.60791 895.0
+S	2310	2310	966.4863246
+Z	4	3861.914
+255.28349 14570.0
+256.58926 17096.6
+271.44498 17597.3
+271.59946 12588.3
+277.40152 12701.7
+278.02747 13435.8
+308.88785 17046.5
+318.49316 14458.4
+326.16602 13491.7
+329.56827 13447.5
+350.89401 13351.1
+407.37802 16931.6
+407.96457 12723.1
+475.35422 17179.3
+532.56824 41354.3
+549.13794 15551.5
+559.31305 20775.6
+582.20374 15242.1
+591.80261 32966.1
+630.36206 26731.6
+676.64539 22684.0
+696.72638 15853.7
+743.43842 26418.8
+787.35992 37521.0
+805.36987 50575.1
+844.38379 26312.5
+845.36938 18202.8
+862.39233 37048.5
+863.39185 25758.9
+866.42975 17412.5
+867.43347 13014.9
+869.09955 15529.3
+873.92200 14418.0
+874.48572 21703.0
+896.19543 37875.9
+896.44592 25914.4
+900.44836 27529.7
+900.69287 38178.2
+900.94196 17445.6
+901.20233 15120.4
+923.97052 15212.3
+928.79620 20340.4
+934.13348 203116.1
+934.46814 306199.4
+934.80298 204687.4
+935.13849 107105.4
+935.47150 55885.9
+937.11426 15692.9
+999.50964 50769.2
+999.84143 82735.9
+1000.17810 72100.3
+1000.51288 37300.4
+1018.51477 128355.7
+1018.84979 247529.6
+1019.18311 168163.3
+1019.51660 59985.5
+1019.65881 18274.6
+1019.85486 30787.7
+1020.17749 24345.4
+1045.99304 40390.4
+1046.50098 54330.7
+1047.00635 33221.1
+1055.20911 31334.6
+1055.52710 74639.4
+1055.86218 87932.6
+1056.19312 67527.2
+1056.52808 42904.8
+1057.24634 19913.0
+1058.51453 26564.3
+1059.53101 17899.2
+1061.20105 26779.0
+1061.53699 36889.0
+1061.86804 27049.7
+1062.19934 35195.9
+1095.53064 62145.9
+1096.03345 77045.7
+1096.53198 33246.6
+1099.54041 23137.9
+1099.87671 41424.0
+1100.20410 30243.2
+1100.54272 51618.4
+1131.05725 28763.0
+1131.54895 28826.6
+1132.04944 26368.5
+1132.55396 22439.6
+1133.22717 56350.3
+1133.55566 74178.1
+1133.89526 54838.1
+1134.23242 58438.1
+1134.56689 31548.9
+1176.89465 19111.5
+1181.56714 88934.4
+1182.07544 62750.9
+1182.58252 66621.0
+1183.07324 19272.0
+1198.26880 73818.1
+1200.59509 28415.5
+1200.91858 21404.0
+1238.12695 24072.0
+1238.61658 32754.4
+1239.11707 20459.3
+1302.63904 28736.0
+1303.14148 51819.9
+1303.64734 40817.9
+1392.21143 16091.8
+1393.20203 17300.3
+1400.69922 137407.2
+1401.20203 219007.4
+1401.70007 182248.7
+1402.20679 74453.1
+1402.72290 26194.1
+1499.25964 27566.8
+1527.24951 26883.0
+1527.77917 21414.6
+1632.38452 18685.2
+1876.75659 24494.4
+1877.18115 16393.6
+1878.69128 33576.0
+1879.18298 56613.6
+1879.55457 440636.6
+1879.91846 50881.7
+1880.18616 27089.6
+1880.45410 23932.0
+1880.84167 24838.2
+1881.92285 21403.6
+1906.87939 30978.2
+1907.14136 167781.5
+1930.55005 21185.4
+S	2311	2311	1879.9908246
+Z	2	3758.134
+Z	3	5636.697
+511.39935 731.7
+532.57764 1543.1
+583.12378 614.2
+630.41858 715.6
+665.16663 606.6
+676.65356 1174.4
+682.94519 674.0
+702.42761 665.9
+795.63702 1021.5
+990.97021 604.4
+1019.67145 651.1
+1057.27576 795.4
+1111.35559 744.7
+1197.71545 585.2
+1198.28833 3431.5
+1755.33960 680.8
+1879.15491 1796.5
+1879.58264 19649.8
+1879.99133 1172.0
+1880.31653 700.6
+1906.85901 806.2
+1907.14636 7000.2
+1907.43787 869.6
+S	2313	2313	1879.94024127
+Z	3	5636.545
+Z	2	3758.033
+532.58521 1947.3
+549.15778 616.3
+555.52307 567.3
+630.40283 691.8
+676.65393 1253.3
+748.29742 604.2
+938.64978 522.1
+1027.82324 756.5
+1188.30786 838.6
+1198.30725 3586.0
+1525.41345 836.0
+1621.31555 753.1
+1877.96045 661.8
+1878.96594 1587.5
+1879.28833 2253.6
+1879.57227 19645.0
+1880.19153 1156.0
+1907.05933 7208.9
+1918.90100 779.3
+1930.61401 1432.1
+S	2314	2314	1907.47840793
+Z	3	5719.16
+Z	2	3813.109
+515.82111 800.8
+532.59387 1788.1
+576.30737 575.5
+676.64337 1244.0
+683.93750 628.7
+731.12726 794.3
+955.11969 698.2
+1057.26172 1068.2
+1175.56799 622.4
+1198.33716 3857.6
+1486.52966 711.8
+1525.39966 942.3
+1610.16260 819.0
+1628.22046 581.6
+1876.79187 733.0
+1878.41833 1276.4
+1878.93762 1365.6
+1879.19775 1749.0
+1879.56152 19943.1
+1879.97925 1890.3
+1880.71716 1207.9
+1907.04272 7525.3
+1930.60925 874.6
+S	2315	2315	965.7324696
+Z	4	3858.89858
+271.10226 671.2
+293.78906 545.3
+300.50397 564.3
+302.81332 646.3
+308.18082 543.5
+311.37045 611.7
+318.64685 558.1
+325.13840 568.9
+341.85654 592.6
+412.02267 626.6
+426.37552 545.2
+427.56369 956.2
+488.93863 639.1
+532.55084 1858.1
+538.00806 721.9
+578.40356 685.0
+581.79187 656.7
+591.80743 1925.9
+621.37952 543.0
+646.65320 797.5
+661.13568 759.8
+676.64630 862.3
+678.29138 1168.5
+787.35419 1169.3
+795.63525 887.8
+804.40381 725.0
+805.37067 1133.8
+822.21851 609.7
+824.19916 637.8
+842.96155 591.1
+862.39264 1084.1
+869.41473 612.3
+874.47888 784.0
+895.68182 835.7
+895.93469 1003.8
+905.51111 606.3
+934.13287 4496.6
+934.46814 7663.5
+934.80310 5295.8
+935.13922 2730.3
+935.46973 642.8
+999.50806 837.5
+999.84473 1835.2
+1000.17065 1146.1
+1018.51709 2817.4
+1018.85022 5535.1
+1019.18036 3729.6
+1019.51788 2203.9
+1019.85516 848.0
+1043.53027 740.1
+1045.99866 1269.5
+1046.50122 1701.7
+1055.52881 1518.3
+1055.86707 1900.4
+1056.19312 1502.0
+1056.52844 831.0
+1058.50330 846.5
+1061.19153 920.1
+1061.87292 1285.2
+1079.75146 644.0
+1095.52588 1702.1
+1096.03430 1200.4
+1096.53735 889.2
+1099.54810 848.3
+1099.87720 1367.1
+1100.20862 1228.8
+1127.57141 738.9
+1131.05078 2120.9
+1131.55994 1539.5
+1132.05627 779.9
+1133.21606 1165.7
+1133.56006 1579.0
+1133.90259 1337.8
+1134.21448 765.6
+1138.86145 1001.7
+1181.56799 2006.4
+1182.08118 2208.7
+1182.57483 2039.0
+1198.22876 3279.0
+1237.48340 638.2
+1238.13354 887.4
+1238.63025 946.9
+1239.12646 945.5
+1298.32275 684.8
+1302.64575 766.6
+1303.63770 1229.3
+1392.68420 796.8
+1400.69910 3243.3
+1401.19641 5207.9
+1401.69885 4652.9
+1402.19495 2071.1
+1525.47754 861.9
+1527.74097 697.6
+1679.63281 720.1
+1808.39941 568.1
+1870.35730 796.3
+1876.24683 705.5
+1876.57434 640.1
+1877.26355 804.4
+1879.55481 19549.2
+1879.84570 2414.8
+1880.27246 999.5
+1906.74561 903.4
+1907.09009 7584.4
+1907.93298 660.7
+1930.61780 744.0
+S	2317	2317	965.4992546
+Z	4	3857.96572
+265.41672 652.3
+271.60501 953.1
+314.64502 725.7
+365.79706 618.4
+369.20074 622.4
+373.09052 622.4
+381.36270 719.3
+412.15811 566.2
+427.54788 901.7
+490.94891 603.4
+495.79245 569.7
+513.45941 728.7
+532.57062 1917.2
+549.16486 696.3
+591.80383 1044.3
+600.19940 600.6
+676.62183 1238.0
+728.37439 687.5
+743.44720 705.7
+756.13849 564.9
+759.65228 585.8
+765.31500 713.1
+781.00244 744.6
+781.06238 623.6
+795.64514 1082.8
+797.91028 799.6
+839.32513 677.5
+844.38470 917.2
+862.39288 1045.8
+869.09601 984.6
+874.46155 701.6
+890.00659 689.5
+894.25763 712.5
+895.93909 1653.4
+900.44104 1543.5
+906.85217 747.8
+934.13452 5257.0
+934.46826 7679.8
+934.80560 4779.3
+935.13892 2290.4
+954.93823 660.7
+997.16486 884.6
+999.50928 1521.0
+999.83685 1751.2
+1000.18298 856.2
+1018.52051 3617.6
+1018.85040 6992.5
+1019.17859 3404.9
+1019.50970 920.9
+1046.00085 844.5
+1055.86194 1774.9
+1056.19922 1726.8
+1057.20972 872.9
+1061.86414 930.5
+1095.52771 1153.1
+1096.03308 1187.3
+1096.53320 1284.1
+1100.21191 1570.2
+1128.59326 700.9
+1131.04993 1527.9
+1131.54248 1217.3
+1133.22961 783.7
+1133.55322 2938.4
+1133.89221 1248.9
+1138.51416 894.2
+1140.30798 649.7
+1181.57581 1192.4
+1182.08032 1023.0
+1182.58496 1324.0
+1188.16064 1003.7
+1198.27710 3267.8
+1238.10742 807.7
+1238.59888 1176.1
+1276.53772 692.0
+1302.64111 1123.5
+1400.69849 3708.0
+1401.20068 4790.2
+1401.70251 2752.0
+1525.43250 1159.8
+1718.24780 2057.4
+1873.71155 895.9
+1879.47351 21185.0
+1888.08325 728.8
+1906.77942 841.8
+1907.12061 7544.2
+1930.65088 829.3
+S	2318	2318	635.6047846
+Z	4	2538.38784
+174.78178 593.6
+184.10023 627.4
+188.01706 591.0
+188.25430 1376.9
+188.26511 1695.4
+188.27663 1787.2
+188.28653 1586.0
+188.30449 1658.8
+188.32878 747.5
+188.36008 728.6
+198.90973 930.2
+199.18552 971.5
+199.27023 1221.6
+199.28442 2706.9
+199.30229 979.1
+199.34850 669.4
+210.48520 748.9
+243.54611 634.2
+265.40622 712.6
+271.92331 689.0
+340.59399 679.7
+356.10245 571.8
+374.38638 807.0
+443.97601 602.8
+452.13538 703.4
+466.34512 553.9
+532.60150 2055.5
+566.83954 611.2
+665.92365 798.9
+676.65277 1184.2
+677.68805 676.6
+762.42554 603.6
+795.62598 887.7
+818.93750 649.2
+907.61694 691.4
+907.88965 707.4
+912.03339 656.5
+937.42279 631.4
+944.45770 650.2
+1021.22534 649.9
+1043.09424 618.7
+1057.26221 866.1
+1059.54517 724.6
+1069.03796 651.5
+1084.95544 643.0
+1175.15991 752.9
+1198.34644 3450.9
+1233.46521 569.4
+1334.45544 631.8
+1525.50366 842.3
+1572.40833 684.8
+1675.52832 569.2
+1719.26917 1071.3
+1877.54126 726.0
+1878.26904 887.0
+1878.78784 744.7
+1879.29248 1953.6
+1879.56763 19765.7
+1880.36169 1252.2
+1880.90088 932.9
+1883.67175 631.1
+1907.00317 7239.3
+1930.72693 826.0
+S	2319	2319	966.5048246
+Z	4	3861.988
+270.28915 615.3
+310.06369 536.5
+316.43961 569.4
+317.37219 596.6
+381.37097 819.3
+383.92773 567.6
+427.56146 955.2
+532.58447 1980.7
+532.62354 753.5
+573.57831 769.6
+591.80707 1642.5
+630.35223 725.9
+676.66718 1500.3
+677.49200 623.3
+743.43768 1125.8
+764.45410 897.2
+781.08002 1146.6
+781.40826 930.3
+787.36053 1954.6
+801.32904 617.0
+805.37280 1678.8
+844.38409 1092.6
+845.39960 718.1
+850.67163 1080.8
+862.39709 1439.9
+866.45520 855.0
+866.88470 713.4
+874.48926 903.8
+891.69324 849.4
+891.93896 664.8
+895.94025 767.7
+896.19257 1518.3
+896.42920 1572.6
+896.68341 797.8
+900.19208 2143.4
+900.44281 2518.7
+900.69006 3445.3
+901.20160 774.9
+917.89124 620.4
+922.24323 741.8
+923.96515 985.1
+925.30774 611.7
+928.79224 801.7
+934.13409 9737.9
+934.46820 11459.7
+934.80273 11449.4
+935.13831 5392.0
+935.47736 1552.5
+999.51373 1267.9
+999.84155 2572.0
+1000.17877 2361.4
+1000.51086 1520.4
+1018.51520 8059.7
+1018.84918 8436.9
+1019.18439 8741.6
+1019.51831 4592.2
+1019.84686 689.7
+1036.99109 929.2
+1040.50793 769.6
+1041.48840 671.4
+1045.99377 1220.5
+1046.49768 1611.7
+1047.00085 856.1
+1055.52771 3322.8
+1055.86462 3266.9
+1056.19983 3201.6
+1056.53284 1928.6
+1057.28735 1143.3
+1058.51697 1164.1
+1059.51855 1116.5
+1061.53198 1779.0
+1061.87317 1747.3
+1062.20349 879.6
+1088.15833 594.2
+1094.53333 1012.2
+1095.53137 2175.1
+1096.03064 2575.4
+1096.53723 2110.0
+1099.54260 1211.8
+1099.87598 4185.9
+1100.20789 3505.7
+1100.53845 1276.8
+1113.60986 663.6
+1114.24622 696.3
+1127.56616 1394.3
+1127.89429 804.7
+1131.05078 2007.7
+1131.54443 1437.3
+1132.04456 1517.2
+1133.22534 2432.4
+1133.56067 2840.7
+1133.89307 2918.1
+1134.22986 3227.0
+1134.56372 1021.3
+1138.53308 4509.5
+1138.86414 6850.7
+1139.19946 4168.2
+1139.53015 2783.3
+1139.86621 1400.8
+1140.19751 979.7
+1157.71497 766.5
+1165.24060 850.2
+1170.56421 880.4
+1171.86731 973.6
+1173.08032 876.7
+1181.57056 2375.7
+1182.07910 2450.6
+1182.58801 2963.2
+1183.06946 842.9
+1183.60352 1076.9
+1194.23767 763.8
+1194.56775 792.0
+1198.19202 672.6
+1198.30676 2877.4
+1200.91370 849.2
+1230.46533 654.4
+1238.10791 1355.2
+1238.61023 1876.1
+1254.07922 817.8
+1302.63892 1621.6
+1303.14380 1806.8
+1303.63916 1721.0
+1339.15234 796.8
+1391.70020 976.1
+1392.18494 1281.1
+1392.69226 874.6
+1400.69775 5238.6
+1401.19849 8848.2
+1401.70471 5545.7
+1402.19910 3129.0
+1402.70850 1003.6
+1458.81104 865.8
+1495.74683 830.9
+1499.27466 953.9
+1527.77417 1660.3
+1528.26331 1387.6
+1648.60583 658.3
+1763.93738 669.3
+1798.71338 604.7
+1874.99390 813.8
+1878.35718 887.5
+1878.78979 1378.4
+1879.08545 1649.1
+1879.61694 20094.3
+1880.17529 1789.5
+1880.37463 1265.5
+1880.81470 719.4
+1881.01050 702.9
+1883.47375 743.3
+1907.07922 7156.8
+1930.68262 986.9
+S	2321	2321	1880.0828246
+Z	2	3758.318
+Z	3	5636.973
+511.37735 639.9
+532.55273 1796.6
+538.70483 621.0
+726.27344 578.4
+731.21185 590.0
+795.62000 820.4
+823.44604 648.2
+1025.15930 657.8
+1140.14990 802.8
+1154.59814 679.1
+1198.23486 3473.2
+1216.75305 584.6
+1403.68225 851.2
+1525.61938 1015.6
+1570.20056 615.8
+1717.73438 1448.2
+1752.51794 899.0
+1875.28760 772.5
+1877.39661 733.7
+1878.85010 1253.7
+1879.30542 3770.0
+1879.62488 18715.3
+1879.93506 3925.2
+1905.29333 692.4
+1907.11914 7505.0
+1907.58313 764.8
+1918.94043 867.6
+S	2322	2322	516.5392321
+Z	4	2062.12563
+130.03357 13266.9
+132.33461 9163.7
+134.06503 9873.3
+138.73880 9425.4
+141.85005 10408.8
+144.93509 8946.2
+171.06226 9419.8
+171.63838 11324.9
+185.62492 8757.1
+188.15524 12375.9
+188.21175 14747.8
+188.25665 13851.5
+188.26265 13992.5
+188.30418 11571.9
+188.36829 8938.0
+188.38339 10278.4
+198.91272 12551.2
+199.22520 15379.5
+199.25932 13390.1
+199.28053 31029.8
+199.28903 29507.2
+199.31705 21157.4
+199.37721 10826.6
+199.38719 17183.7
+199.94301 10646.3
+213.10703 9543.9
+232.95653 11581.2
+233.58504 8384.3
+238.70506 9922.8
+286.49893 8839.1
+295.10617 11461.5
+297.36124 9973.2
+320.94089 10175.6
+341.44739 11048.9
+342.28842 9628.0
+369.22354 170288.1
+370.22818 21089.5
+400.40192 9012.1
+455.57968 13228.8
+460.65738 9013.2
+482.30917 14745.9
+484.94003 9703.1
+532.53772 33302.1
+565.63849 11640.3
+565.97107 12185.4
+608.77417 9551.4
+612.37213 22778.6
+612.65735 14012.5
+630.45697 13152.7
+682.36395 39571.7
+682.86200 24091.6
+717.02905 9227.7
+745.40869 31297.9
+745.90997 40499.4
+746.41394 21829.6
+790.91638 70836.6
+791.41602 49501.7
+791.91736 17933.1
+792.41693 12906.6
+795.65076 15378.4
+822.13165 9071.6
+876.69714 10950.4
+1019.86383 9735.7
+1198.20508 57382.3
+1214.65381 9506.7
+1313.87537 9938.3
+1329.62830 11046.5
+1523.81531 10552.6
+1531.28857 12681.2
+1667.10938 11292.8
+1717.43030 24224.7
+1805.80737 10352.3
+1809.77832 8443.3
+1827.70227 9971.6
+1872.99780 23458.5
+1879.10315 35491.0
+1879.49719 164023.3
+1879.76233 229239.8
+1880.07007 108925.2
+1881.17566 16759.6
+1907.05603 121445.1
+1965.35229 12261.5
+S	2323	2323	1907.4778246
+Z	3	5719.158
+Z	2	3813.108
+525.77191 625.6
+532.53693 1414.5
+532.57849 923.5
+575.59637 658.0
+630.47705 730.1
+676.62933 968.8
+731.20416 630.4
+795.63428 1081.0
+796.49823 617.2
+1084.89539 596.4
+1198.20313 3262.6
+1343.29065 756.6
+1407.02295 617.1
+1672.64050 618.9
+1716.60242 895.3
+1751.31274 1285.5
+1877.61365 690.0
+1879.12598 1382.3
+1879.63086 15614.7
+1879.88330 6212.7
+1880.10645 2951.9
+1880.36768 2443.8
+1880.62781 1044.0
+1880.81726 661.5
+1881.35999 809.4
+1907.05359 7496.3
+1930.79089 873.0
+S	2325	2325	616.392407933
+Z	2	1230.937
+Z	3	1845.902
+157.61160 743.0
+165.76924 789.6
+167.99861 600.8
+183.37437 603.2
+188.19833 654.4
+188.26903 1819.3
+188.28516 1989.8
+188.30043 1928.3
+188.30922 1681.4
+188.36609 564.2
+188.44019 659.3
+198.90915 1007.9
+199.23822 590.1
+199.25287 871.4
+199.27315 1270.4
+199.29243 2694.0
+199.31363 875.8
+199.38977 624.2
+214.52689 636.8
+228.11392 863.5
+245.01654 620.9
+252.99580 666.7
+256.10770 704.3
+260.26144 531.6
+280.28598 570.4
+288.20215 5298.7
+299.48557 505.4
+315.61813 587.0
+323.53299 577.4
+334.11475 2100.1
+341.19431 1705.3
+350.16837 531.5
+350.28729 744.8
+359.23938 24302.3
+360.24274 2970.8
+371.13632 860.6
+372.12024 760.7
+381.37772 880.8
+390.72736 1157.1
+405.87149 579.0
+415.27643 991.3
+424.99011 589.4
+427.56784 653.1
+434.29904 819.7
+440.26791 680.9
+447.72900 595.3
+459.78485 666.6
+471.19958 1139.2
+475.77887 3529.7
+476.28244 1271.6
+479.08594 579.1
+481.18158 3392.4
+485.27838 4080.5
+485.77979 1649.9
+486.24921 13989.1
+486.58286 6899.0
+486.91766 3987.3
+488.28156 34225.4
+489.28415 6070.6
+499.19193 1273.1
+503.28229 779.1
+506.78174 2800.6
+507.28305 1626.2
+525.28058 838.1
+529.93011 2444.0
+530.26233 1896.4
+530.58722 720.5
+532.55524 2022.7
+533.29187 3920.0
+533.79437 1303.6
+544.31995 2763.0
+545.32593 701.8
+549.18927 725.0
+558.28796 648.1
+562.30481 859.3
+566.27051 2222.4
+567.27185 1058.2
+576.25403 1608.6
+584.28040 3050.4
+585.28754 983.0
+588.81073 2493.8
+589.30658 711.1
+594.26526 6573.6
+595.26935 1911.3
+597.81506 8461.3
+598.31641 4698.9
+598.81244 2403.6
+599.31299 2086.2
+599.81696 1016.6
+601.19952 616.2
+601.36499 13692.9
+601.65466 626.6
+602.36816 4634.3
+603.95355 747.0
+630.43689 757.2
+642.77271 685.0
+652.89404 710.7
+654.32623 1571.5
+655.20465 606.2
+676.63965 650.4
+680.34363 2058.6
+680.84613 820.6
+681.37811 3530.9
+682.38361 1121.8
+689.34180 1066.7
+706.80060 1795.6
+707.34814 8420.3
+708.35236 2595.1
+714.44952 9191.4
+715.45056 2641.8
+725.35956 10371.3
+726.36176 2683.6
+728.87048 13136.4
+729.37079 10549.5
+729.87250 6062.3
+730.37738 1737.6
+732.37274 635.5
+743.37445 1980.5
+780.44977 1352.4
+781.45593 851.5
+794.39172 5909.8
+794.89301 4027.3
+795.39001 2868.8
+795.63086 828.3
+795.88580 1187.0
+818.38153 1608.0
+827.35992 939.2
+836.39258 8803.0
+837.39899 2780.3
+854.40198 4867.4
+855.40698 2921.4
+858.08893 724.2
+861.51929 1511.3
+862.52582 1158.3
+872.42114 757.3
+877.32086 2688.0
+878.31317 845.9
+887.50464 683.3
+907.42755 1736.3
+908.44928 704.8
+922.88489 577.9
+925.43970 1674.6
+926.44434 1474.1
+948.35248 1838.5
+969.55005 2395.8
+970.53540 3270.5
+971.54333 1504.6
+1012.56262 894.5
+1020.52039 931.1
+1021.51685 800.8
+1030.56543 1690.6
+1031.56421 1063.4
+1038.52429 1711.2
+1039.52979 807.5
+1047.42749 1664.6
+1146.49268 1351.5
+1147.49231 611.2
+1198.24609 3723.4
+1222.12927 554.3
+1549.95374 681.2
+1777.19568 905.3
+1878.56860 956.1
+1879.66614 15394.9
+1880.21765 4001.4
+1880.54004 2816.9
+1880.89026 871.7
+1881.24829 757.8
+1906.72485 747.7
+1907.09949 7650.6
+1930.69250 923.4
+S	2326	2326	516.5459471
+Z	4	2062.15249
+135.64124 2165.7
+175.47466 2018.1
+185.11588 7488.3
+188.23434 2999.8
+188.26498 4908.1
+188.27655 7741.7
+188.28555 8194.0
+188.29529 7978.5
+188.31403 6104.9
+188.33443 2448.5
+188.35826 1955.4
+198.90746 2610.8
+198.96039 2397.9
+199.17445 2720.0
+199.19392 2662.0
+199.20448 2191.7
+199.21486 1895.0
+199.27263 4447.8
+199.29099 3289.3
+199.30084 7428.9
+199.31320 3426.9
+199.39792 3192.3
+199.41626 1987.7
+201.12312 4585.8
+215.20056 1816.2
+233.17532 2146.7
+235.90279 2414.0
+241.65765 2853.7
+246.12534 2598.3
+249.30817 2076.1
+251.21605 2036.3
+253.80540 1939.8
+255.28809 2330.1
+258.16006 4268.3
+272.17114 16163.0
+273.17874 2517.6
+286.15506 4403.1
+318.50507 2082.9
+321.67249 5705.3
+327.20181 11023.0
+336.20746 9467.5
+336.70901 5434.0
+341.20044 6661.0
+341.70236 2860.7
+350.20499 54326.5
+350.70627 15916.0
+351.21347 21060.4
+352.19788 2258.7
+352.21790 3134.1
+368.85565 2885.9
+369.22394 554786.8
+369.59338 3568.3
+369.73822 2225.6
+369.88879 2180.0
+370.22812 97368.9
+370.71622 8041.5
+371.23047 10346.5
+381.27579 1927.1
+384.25787 2976.5
+396.21341 6977.8
+396.71576 3327.2
+399.23849 8841.6
+400.24130 6852.2
+426.98026 2690.3
+427.72122 8379.0
+428.21945 3652.8
+441.71793 5704.5
+442.22098 3242.8
+455.24707 80333.3
+455.58154 62943.4
+455.91595 31360.7
+456.24985 10611.9
+459.76907 2497.5
+463.01163 1842.2
+473.93970 4901.3
+474.27533 7120.2
+479.94495 6174.6
+480.28107 3971.3
+480.61865 2347.5
+481.11591 1997.5
+482.30737 80327.3
+483.31067 18524.2
+484.25742 20040.8
+484.31079 3866.7
+484.59207 14949.4
+484.76868 2366.8
+484.92487 6746.4
+491.27499 4112.5
+491.60709 4456.2
+497.27527 21322.1
+497.60837 5707.6
+497.94348 4519.8
+498.25958 4941.1
+498.76178 2748.4
+499.28610 24888.9
+499.97055 2341.0
+500.29041 3856.1
+525.63574 3887.7
+525.97235 2993.5
+526.31323 2071.3
+527.61188 23614.7
+527.94604 22796.8
+528.27905 12773.9
+528.61420 4269.8
+528.96533 3753.9
+529.30652 3059.9
+532.55554 5468.4
+534.97028 84599.2
+535.30432 68522.8
+535.63879 42994.4
+535.97272 15642.7
+536.28754 3291.7
+536.62451 6506.2
+541.33752 2766.8
+548.35205 2643.5
+550.30365 4600.9
+555.97522 31172.1
+556.30914 34664.5
+556.64307 16563.2
+556.97461 5537.9
+557.31512 2770.1
+559.30292 3544.5
+565.30664 93208.4
+565.64069 81644.7
+565.97522 44427.4
+566.30902 20673.1
+566.64233 5230.9
+567.81909 2091.2
+573.98505 6674.1
+574.31946 8641.5
+580.34412 4065.5
+586.31854 3548.1
+598.87640 6221.2
+599.37769 3940.4
+599.87628 4004.4
+606.66168 3364.7
+606.99286 2483.6
+608.85400 4346.8
+612.36420 73212.8
+612.66156 63132.6
+612.99628 30398.2
+613.37134 18811.5
+613.66376 5937.3
+630.41040 3291.4
+633.83789 2721.8
+655.41791 7572.1
+655.50073 2636.7
+655.91974 9088.6
+665.05725 2464.8
+673.86609 2409.1
+675.37805 3642.7
+676.67145 2177.7
+676.71539 1859.0
+681.39368 6073.6
+682.36578 160877.5
+682.86749 137953.9
+683.36841 63166.1
+683.86755 23157.3
+684.36627 4684.3
+698.93231 2984.4
+699.40112 53850.9
+700.40503 20265.5
+701.40985 3256.1
+709.88843 4710.6
+710.39807 2211.7
+710.89972 33964.3
+711.40082 22469.9
+711.90344 7780.9
+712.40302 3163.2
+719.41028 12446.0
+719.91583 11128.7
+720.41571 4922.7
+725.88245 15912.1
+726.38464 15034.9
+726.88605 7159.0
+736.40717 5455.6
+736.90564 6088.1
+737.41028 4312.2
+737.90527 2511.8
+739.42560 7046.5
+740.43085 3134.8
+745.41046 164169.2
+745.91119 143608.8
+746.41364 62131.5
+746.91571 17870.4
+747.41736 3922.6
+755.39520 11108.9
+755.89636 8179.2
+760.91925 2600.9
+781.77740 2264.0
+781.90869 12738.3
+782.40503 15150.7
+782.90564 12755.3
+783.40363 7091.4
+790.91492 330550.4
+791.41583 318724.9
+791.91687 165465.8
+792.41772 62806.9
+792.91833 14777.5
+793.41901 3040.4
+794.73700 2038.6
+798.18091 2360.4
+847.45679 54350.7
+847.95764 47176.3
+848.45929 25841.3
+848.95978 12713.4
+849.47552 2484.0
+882.42676 3120.6
+975.37262 2098.0
+995.51678 3266.6
+1083.42139 2361.0
+1088.03723 2110.3
+1169.60742 2698.0
+1198.24109 9827.0
+1198.36621 2311.7
+1346.14978 2126.2
+1442.76843 2166.3
+1443.52173 2145.7
+1479.82190 2163.7
+1573.58557 2131.3
+1623.56165 2234.4
+1719.69299 2174.9
+1870.39941 3642.1
+1878.80725 3023.9
+1879.37769 16456.5
+1879.61902 69689.9
+1880.62427 2578.4
+1882.68298 3141.3
+1883.35791 2084.1
+1907.09167 27218.9
+1907.33667 3438.5
+1930.61597 4116.4
+S	2327	2327	638.2958246
+Z	3	1911.612
+Z	2	1274.744
+170.60368 11889.4
+188.25754 15213.9
+188.26160 16245.8
+188.27151 26680.6
+188.28017 24753.2
+188.28976 26460.6
+188.30124 23466.8
+188.31169 18593.8
+188.31767 18409.0
+193.79774 11851.1
+198.90976 15179.0
+199.14372 96954.2
+199.19562 18950.5
+199.21796 12094.1
+199.25243 12788.9
+199.27927 26345.1
+199.29375 54099.8
+199.31332 28668.9
+199.37671 17507.7
+199.39163 22932.6
+200.14534 14081.2
+210.78857 16256.4
+226.07120 13025.9
+227.13870 161375.3
+234.81244 13106.6
+244.49054 12793.9
+253.21185 13894.2
+255.29008 16392.3
+260.61053 14886.3
+262.13892 50380.5
+272.16003 90737.8
+315.16278 10990.0
+315.16785 10623.9
+323.50156 12710.1
+324.90433 14992.3
+333.17639 121171.7
+342.27203 15491.4
+364.41553 11928.5
+366.79269 11525.6
+412.19504 17285.6
+412.25519 16376.6
+435.66812 12941.9
+440.24985 68018.0
+446.25998 76560.7
+447.26282 18476.3
+479.25821 25428.9
+494.39584 14790.6
+497.27029 44506.2
+502.17761 14977.1
+502.76227 3801370.8
+503.26358 2102381.0
+503.35620 28767.3
+503.76495 588106.3
+503.95807 22381.3
+504.26596 64224.6
+532.54279 32482.9
+556.65430 12715.1
+559.30383 1556033.0
+559.80548 948217.7
+560.01056 13036.6
+560.30707 257153.1
+560.81183 17467.0
+571.00458 14792.3
+573.09686 13835.6
+573.73334 14078.6
+592.64984 13515.2
+593.32758 242524.1
+594.33026 62687.2
+630.40173 17139.8
+657.75098 13560.3
+672.34680 16912.0
+676.63647 19787.9
+683.35052 89336.3
+684.35297 22190.2
+699.19934 11785.7
+726.90259 13940.2
+731.12531 18375.9
+777.62640 17243.8
+779.40784 130024.7
+780.40863 51764.8
+795.63269 19874.9
+830.41949 50195.0
+831.42542 16820.9
+836.42889 485136.8
+837.43256 226122.5
+838.43451 54577.9
+856.77808 14565.9
+858.41107 53511.2
+859.41766 18887.6
+907.46552 194457.6
+908.46973 119299.2
+909.46710 38554.5
+925.48169 18583.0
+943.50427 113588.1
+944.50885 41491.1
+961.91370 13520.0
+1004.51794 3300460.3
+1005.52118 1738126.9
+1006.17517 20393.1
+1006.52350 486760.7
+1007.53040 54176.8
+1009.41736 15676.2
+1014.54004 51560.8
+1015.54059 38518.8
+1030.00464 13714.0
+1030.63306 14921.6
+1117.60303 101878.7
+1118.60217 55858.3
+1129.56628 45094.1
+1198.21338 64090.8
+1220.10925 12696.3
+1308.36902 14895.3
+1450.09778 13640.9
+1525.42749 22290.1
+1627.46960 14569.3
+1876.27405 16891.5
+1878.74927 22358.0
+1878.97559 27710.3
+1879.43164 254712.5
+1879.64819 286827.9
+1880.07947 121795.8
+1881.48669 19830.6
+1901.75476 12672.2
+1907.14185 163994.4
+S	2329	2329	1880.01140793
+Z	3	5636.759
+Z	2	3758.175
+532.52594 1979.5
+548.22717 599.6
+572.20837 603.2
+618.83966 615.3
+667.49432 670.9
+676.65955 961.9
+783.15375 638.6
+795.63470 710.7
+1021.25012 648.4
+1198.17871 3312.3
+1243.93872 651.1
+1409.86121 626.7
+1410.25903 673.4
+1525.54651 705.9
+1776.80884 863.9
+1877.83923 969.5
+1878.74438 872.4
+1879.16809 1784.6
+1879.58740 19427.2
+1879.97375 2215.0
+1880.40161 1298.3
+1880.75610 851.7
+1881.37622 713.7
+1907.14136 7191.2
+1919.00549 940.6
+S	2330	2330	516.5410646
+Z	4	2062.13296
+132.50845 568.0
+135.12547 571.6
+135.60855 563.7
+137.29460 542.5
+143.99550 582.2
+148.89389 538.4
+155.46732 594.0
+169.49866 774.8
+175.11871 1854.8
+178.59843 600.3
+182.78885 853.9
+185.11557 2227.8
+199.20268 781.3
+199.23988 574.2
+199.26065 615.9
+199.27185 1247.1
+199.28577 2765.9
+199.30016 1193.2
+199.39789 676.1
+201.12346 1612.4
+201.23401 503.6
+203.97432 498.3
+212.03391 699.4
+213.24544 619.5
+224.52705 551.8
+225.06168 597.2
+235.84930 657.6
+249.15936 2098.3
+254.78436 497.9
+258.15997 1550.8
+263.95673 752.3
+271.21509 593.4
+272.17169 3281.6
+277.14603 568.0
+277.18912 589.8
+286.15512 1881.6
+288.87823 682.6
+306.68610 710.2
+308.90829 868.7
+313.79599 562.6
+314.68695 1263.7
+327.20215 2005.9
+327.70480 940.1
+333.20444 819.7
+336.20764 1669.2
+336.70898 1224.5
+341.20047 1327.9
+344.14523 630.5
+350.20535 10238.7
+350.27634 911.4
+350.70654 4527.7
+351.21365 4925.0
+368.85947 717.1
+369.22430 127384.5
+369.34225 565.9
+369.35840 550.7
+369.59473 585.7
+370.22827 25371.3
+370.71750 1510.9
+371.23114 2703.7
+381.36887 762.9
+396.21387 1823.5
+396.71451 1389.2
+399.23889 5659.1
+400.24130 1924.6
+401.24319 1099.0
+427.72150 2038.7
+428.22235 1674.4
+441.71686 1284.0
+442.21902 1127.5
+444.22043 581.9
+455.24777 18222.1
+455.58191 16731.4
+455.91660 7323.3
+456.24908 3220.5
+459.27933 760.8
+470.91278 2019.7
+471.24844 1475.1
+474.27335 1130.0
+477.54572 607.9
+477.62048 538.5
+478.27411 668.6
+478.65924 624.1
+479.94495 915.3
+480.27585 1105.5
+482.30792 17534.6
+483.31116 5107.7
+484.25836 4615.0
+484.31668 955.5
+484.59158 3191.3
+484.69714 603.1
+484.92410 1183.0
+485.26370 830.1
+488.21667 552.3
+493.60062 697.8
+497.27704 2956.6
+497.60843 1156.5
+497.94620 984.9
+498.26169 857.9
+499.28650 5935.6
+500.28979 1318.1
+511.84048 720.9
+525.64258 720.4
+527.61249 5255.4
+527.94702 4848.5
+528.28143 3000.2
+528.61487 1007.4
+528.96826 808.9
+532.49493 1724.6
+534.97113 14241.9
+535.30493 19129.0
+535.63947 10687.2
+535.97437 4731.1
+536.31555 951.3
+536.62286 1454.9
+537.89093 705.5
+541.33331 811.1
+545.80371 665.3
+553.28326 3289.1
+554.29126 896.4
+555.97571 7652.6
+556.30975 8189.6
+556.64502 3600.2
+556.97797 1978.2
+557.31592 1088.6
+559.37567 613.2
+560.96356 687.2
+565.30713 18485.9
+565.64142 23571.3
+565.97540 14742.7
+566.30939 7487.4
+566.64337 1840.8
+573.99011 1222.0
+574.31903 1259.3
+577.53271 559.6
+580.83984 928.2
+584.94800 855.7
+590.62506 1079.3
+595.96796 1307.2
+596.30035 1161.6
+596.63593 787.8
+601.86615 742.8
+606.66425 663.6
+607.32202 568.7
+608.85754 987.7
+609.35596 838.0
+612.36676 14455.3
+612.66309 11491.7
+612.99652 9920.0
+613.37006 6652.0
+613.66492 1473.4
+614.37708 1484.5
+622.65027 4782.8
+622.98340 3503.1
+623.31598 1081.7
+630.42731 836.9
+642.33875 1243.5
+650.67120 750.4
+652.31354 639.9
+655.66443 622.8
+657.33752 1377.9
+658.12323 654.9
+661.29144 626.4
+675.38489 824.9
+681.39594 1071.1
+682.36621 33360.9
+682.86798 33411.0
+683.36932 17217.7
+683.86981 6822.0
+684.08282 726.6
+684.36768 1224.1
+684.90100 657.5
+696.85956 1102.7
+699.40247 12492.3
+700.40442 3800.9
+701.40363 936.8
+701.90094 756.3
+705.06433 607.3
+705.86700 6900.0
+706.36804 6415.2
+706.86810 3846.8
+707.37439 1020.4
+710.89996 5895.7
+711.40179 7297.6
+711.90314 2766.3
+712.39850 1070.1
+719.41589 3146.4
+719.91608 2100.5
+720.41803 1076.7
+725.88391 3576.1
+726.38507 4206.8
+726.88678 1594.1
+727.39075 1238.1
+728.33789 648.3
+729.35376 668.5
+736.40289 1034.5
+736.89606 1744.6
+737.40845 1374.5
+737.89709 907.6
+739.42389 1878.0
+740.43024 814.7
+745.41089 34648.3
+745.91205 32817.2
+746.41394 18134.1
+746.91467 6759.5
+747.41718 1808.7
+755.40015 1567.1
+755.89838 2033.0
+756.39996 1106.6
+760.42535 748.3
+779.40277 2174.2
+780.39679 776.9
+781.90991 1306.5
+782.40710 4267.9
+782.90686 3429.9
+783.40784 2405.0
+790.05084 581.8
+790.91565 61527.3
+791.41663 73955.4
+791.91724 46004.1
+792.41888 21146.0
+792.91974 6761.8
+793.41913 1456.6
+795.62946 982.3
+810.83057 776.3
+839.11646 793.9
+847.45648 7901.1
+847.95856 9985.0
+848.45959 6862.5
+848.96033 3439.5
+855.43066 671.3
+872.01593 643.6
+876.12628 776.0
+882.43079 917.1
+1020.56036 633.9
+1031.78076 650.4
+1057.30493 654.8
+1188.33496 745.6
+1198.10522 3561.2
+1375.15979 636.3
+1381.06738 692.6
+1685.37842 718.5
+1776.84558 733.4
+1834.42944 753.2
+1870.27734 593.5
+1876.81616 663.0
+1878.76904 1150.0
+1879.35522 7347.6
+1879.62256 17354.8
+1881.87317 894.6
+1896.64954 697.3
+1907.04565 7514.7
+1930.68799 810.8
+1931.94495 772.6
+1980.33887 768.8
+S	2331	2331	470.5020921
+Z	4	1877.97707
+115.66118 505.5
+117.04559 518.8
+121.78889 2178.5
+130.94937 737.5
+133.13474 1103.7
+139.16022 687.1
+153.40752 631.3
+157.21198 756.1
+173.32661 564.2
+177.00211 557.7
+183.11249 1288.0
+198.90968 1515.9
+199.19374 677.9
+199.28229 2031.0
+199.29335 2411.6
+199.31218 807.4
+199.39020 855.1
+199.41684 550.3
+199.45596 558.7
+201.12309 18838.7
+202.12714 1198.7
+211.77579 585.8
+211.82730 623.7
+217.08249 617.9
+229.11829 1473.2
+233.58763 536.5
+233.74786 659.6
+266.15002 1875.1
+271.19763 539.9
+271.54361 690.7
+271.68433 566.7
+281.43457 633.0
+284.16150 1996.7
+287.48691 607.6
+312.15479 939.1
+317.43524 592.5
+319.37027 557.4
+330.16516 890.7
+336.65042 665.3
+348.11023 632.7
+350.28082 802.5
+357.58768 710.1
+371.22903 956.1
+385.89597 590.1
+387.89600 1008.1
+404.25052 1001.1
+423.08945 543.9
+425.59021 632.2
+430.24097 1001.4
+436.99179 728.9
+437.24097 2040.2
+439.59253 701.1
+441.74200 988.6
+441.78497 598.6
+441.99127 771.4
+443.48322 7422.9
+443.73318 8541.9
+443.98322 6743.3
+444.23242 2000.2
+447.98547 30378.8
+448.23663 30630.2
+448.48645 13184.4
+448.73773 4470.0
+448.98877 1071.3
+452.49118 694.8
+452.73792 927.4
+452.98776 772.5
+454.72961 803.7
+456.98715 1365.0
+457.23865 1364.0
+457.48901 1081.8
+478.59872 656.3
+479.77396 1216.2
+480.49911 662.7
+487.92999 682.5
+488.77744 8232.8
+489.27884 3121.5
+489.78146 1167.8
+493.26343 2703.0
+493.59662 1771.4
+493.93307 1665.9
+494.25739 680.7
+499.50479 620.8
+502.61340 657.1
+515.29071 1269.0
+516.94141 17155.1
+517.27557 13827.7
+517.60968 5656.8
+517.94281 2747.0
+518.27649 776.6
+520.94086 2385.0
+521.27942 1331.8
+524.29578 17243.9
+524.79706 10523.6
+525.29749 3768.1
+526.94476 26466.9
+527.27924 24125.8
+527.61243 11181.4
+527.94580 4553.8
+528.28027 950.8
+532.53375 2171.5
+544.62018 3860.4
+544.95496 3532.8
+545.31647 6812.0
+545.82104 4352.2
+546.31799 1738.0
+549.24579 1038.7
+549.58813 615.1
+549.95050 600.3
+550.62360 146336.2
+550.95795 133736.8
+551.29138 75557.4
+551.62537 29307.4
+551.95978 5989.0
+552.32581 818.5
+568.61310 1331.5
+571.65948 642.1
+571.95367 992.6
+572.29169 1708.5
+572.62665 717.5
+577.96472 1068.6
+580.83759 13020.1
+581.33875 7321.5
+581.46869 558.6
+581.83978 3156.9
+582.34381 720.0
+583.56940 712.0
+585.64227 1580.8
+585.97681 1199.2
+586.31201 1079.2
+587.21240 4585.1
+587.33081 715.8
+588.21637 993.6
+591.64447 1428.1
+591.98224 1884.3
+592.28595 1290.6
+592.62616 1652.6
+592.96246 826.3
+601.85950 850.3
+605.21893 834.6
+631.35254 1610.4
+637.38202 1953.7
+637.88202 915.2
+669.01654 725.0
+672.87549 670.5
+675.37720 1761.6
+676.38794 687.2
+676.62634 765.7
+681.87598 1976.1
+682.29163 921.3
+682.37909 1420.8
+682.88013 1043.0
+686.57581 708.8
+700.29565 8353.7
+701.30090 2578.7
+717.39441 2859.9
+717.89673 3032.8
+719.40240 1579.5
+731.13568 920.3
+752.87885 1208.1
+763.43408 1084.2
+795.63281 1341.6
+813.38531 758.9
+841.26215 613.7
+1057.22290 926.3
+1063.33740 561.0
+1108.48401 641.5
+1176.85278 666.8
+1198.19519 3257.0
+1450.08337 708.7
+1525.44958 867.1
+1568.55420 628.9
+1676.94312 652.8
+1776.77808 886.8
+1878.47375 801.1
+1879.49268 20285.7
+1879.78516 2266.9
+1880.46167 1058.9
+1881.33728 878.5
+S	2333	2333	1879.98299127
+Z	3	5636.674
+Z	2	3758.118
+532.51428 1971.4
+551.51031 630.9
+630.41705 816.8
+663.67725 738.4
+676.66852 891.8
+709.19696 630.4
+750.32959 639.7
+795.63269 895.4
+800.71210 657.5
+931.35657 638.2
+994.97614 643.5
+1097.51086 617.1
+1198.13586 2870.3
+1374.27942 600.1
+1504.34216 684.6
+1752.14575 648.1
+1752.27588 633.8
+1866.55542 758.8
+1878.50037 945.2
+1879.00549 824.8
+1879.36377 3662.4
+1879.62854 19159.1
+1880.27124 1439.2
+1880.91479 601.9
+1882.56470 614.2
+1883.05286 645.3
+1907.04260 7340.3
+1921.19861 668.6
+1930.63245 830.4
+1939.87048 667.3
+S	2334	2334	516.5421021
+Z	4	2062.13711
+133.13492 1013.0
+136.07523 787.6
+157.30028 595.9
+157.60672 619.8
+165.76828 918.4
+169.49371 752.3
+173.58900 518.9
+175.11900 884.9
+182.78659 655.4
+185.11603 1512.8
+195.03964 1058.5
+196.91200 634.0
+199.22630 519.6
+199.26166 706.0
+199.28102 1541.3
+199.29156 2540.8
+199.31212 750.0
+199.38953 691.2
+201.12376 1210.3
+206.28763 602.3
+212.06599 1536.4
+229.09337 1538.8
+233.58287 632.4
+241.65781 709.4
+249.15950 16327.5
+249.88657 583.4
+250.16348 2037.5
+257.33594 602.2
+266.28183 554.1
+268.14035 967.9
+272.17166 2698.9
+277.14584 8398.0
+277.64780 1586.3
+278.11304 1253.2
+278.15161 482.4
+278.15622 479.1
+279.03979 595.8
+280.09158 620.4
+280.19226 845.1
+296.04419 626.8
+321.67355 710.3
+326.15607 499.0
+327.20197 1827.6
+336.20724 1932.1
+341.12088 831.7
+341.19907 1449.8
+350.20514 8031.6
+350.70624 2929.7
+351.21359 3295.5
+358.15015 864.4
+359.13422 1098.3
+369.22421 92166.8
+370.22842 17071.1
+370.71884 1571.8
+371.23032 2719.8
+373.18594 1608.2
+373.68506 742.9
+376.16141 8346.6
+376.73254 731.9
+377.16476 1386.1
+391.19937 1288.4
+396.21536 1109.9
+399.20898 1366.8
+415.25269 1223.0
+415.73074 1579.0
+416.23190 751.5
+420.72482 841.5
+427.71698 1311.2
+429.72806 2910.5
+430.23047 1442.1
+441.71533 992.1
+442.22415 821.0
+455.24774 10063.3
+455.58203 11859.1
+455.91577 6781.2
+456.23810 4273.4
+456.58527 998.4
+459.27963 1421.3
+460.22119 952.5
+464.90839 1691.7
+465.24463 1725.1
+465.27893 1325.7
+470.91333 15819.2
+471.24783 15040.5
+471.58194 7257.7
+471.91681 3205.2
+473.94287 876.3
+474.00473 561.3
+475.33136 619.1
+477.24521 1467.3
+478.95963 630.4
+479.47861 1377.1
+479.72501 1015.6
+479.94470 1599.8
+480.28055 1203.3
+482.30798 11940.4
+483.31137 3265.7
+483.74792 3500.8
+484.25897 1590.1
+484.59335 1810.3
+487.29056 1388.5
+487.79376 698.8
+487.98779 771.2
+488.21786 2321.0
+488.49017 1282.0
+488.58630 1320.0
+488.91962 866.4
+489.21805 961.8
+491.27051 850.7
+492.21695 552.9
+496.49713 1687.9
+497.27603 1950.7
+497.60971 1841.2
+498.25803 1036.7
+498.76535 607.9
+499.28665 3707.2
+500.29114 1060.2
+500.74881 3736.7
+500.99872 3143.2
+501.25201 2970.2
+509.98676 564.9
+525.63483 873.3
+527.61273 4189.8
+527.94684 2719.7
+528.28137 1930.6
+528.61621 769.4
+532.53540 1731.6
+534.97089 12066.2
+535.30499 12948.8
+535.63879 7238.2
+535.97467 3390.0
+536.62579 993.2
+539.22931 933.2
+540.28918 882.6
+540.78955 908.5
+547.33130 1341.0
+549.16400 838.1
+549.97137 1000.9
+553.28326 28135.2
+554.28619 7889.1
+555.28912 1782.7
+555.97559 5296.7
+556.30994 5987.0
+556.64471 2809.7
+556.97803 1505.0
+558.28595 926.3
+565.08240 752.1
+565.30664 16675.5
+565.64105 15782.9
+565.97498 11684.0
+566.30902 4403.2
+566.64325 2968.6
+578.61200 1077.2
+578.94550 2231.3
+579.27863 1253.7
+582.29840 1036.6
+584.28442 2177.2
+584.61365 4997.2
+584.94916 4759.5
+585.28320 3331.6
+585.61670 822.3
+589.96039 1582.1
+590.28973 7965.4
+590.62494 6694.7
+590.95496 3250.0
+591.35529 934.3
+594.79889 776.6
+595.29565 1202.9
+595.79047 715.3
+595.96393 8033.0
+596.29828 9778.6
+596.63220 3010.8
+596.96802 1578.3
+603.81024 1062.1
+604.68304 748.2
+606.31927 598.4
+608.79218 1472.0
+609.29211 906.0
+612.36688 11197.6
+612.66260 10120.1
+612.99664 4253.0
+613.37115 4315.9
+613.82349 2354.4
+614.32452 2208.8
+617.30133 869.0
+617.80579 1025.2
+618.25580 1367.2
+620.15417 540.7
+620.37817 774.0
+621.36823 918.6
+622.64606 1372.7
+622.98328 1666.5
+635.28009 1537.6
+636.28473 919.5
+638.96808 685.9
+639.30255 757.6
+639.63928 666.5
+644.64703 1761.9
+644.98077 1460.3
+645.31610 740.6
+648.83179 1323.3
+650.31879 3337.4
+650.65338 3563.1
+650.98700 3392.6
+651.32385 1379.7
+652.30579 4155.0
+653.31012 1522.4
+653.97760 1659.0
+654.31427 2040.4
+657.34064 6705.0
+657.84155 5934.0
+658.34192 2991.2
+662.32764 971.3
+662.83636 798.6
+666.36743 2317.1
+667.36835 711.9
+674.36816 704.4
+676.65527 984.2
+681.39410 1060.8
+682.36609 22753.6
+682.42957 972.4
+682.86829 24627.4
+683.36810 11421.9
+683.86810 3416.2
+684.84363 742.2
+687.85712 1250.9
+688.37006 1102.1
+690.83246 900.7
+696.86151 7412.5
+697.36377 4492.9
+697.86530 2540.8
+698.83868 2037.1
+699.40161 8349.5
+700.40656 3055.0
+701.40662 727.1
+705.86633 59287.2
+706.36768 59870.0
+706.86902 30177.5
+707.37115 9813.8
+707.87335 3724.1
+709.41681 1805.7
+710.38196 866.0
+710.90045 3825.6
+711.40149 4090.5
+711.90234 2632.6
+712.40186 1094.7
+719.41406 1449.9
+719.91217 1031.8
+725.88239 3263.9
+726.38446 2106.4
+726.44971 708.2
+726.89294 1244.6
+736.39392 653.1
+736.90668 1418.4
+739.42896 1188.5
+745.41010 26151.8
+745.91205 25964.8
+746.41309 14555.8
+746.91150 4158.7
+747.41632 825.2
+753.44800 2195.4
+755.37677 1387.7
+755.89398 1379.5
+770.39893 2491.6
+770.89490 1715.0
+771.39722 1177.9
+779.40082 14881.7
+779.90161 15039.5
+780.40387 9606.7
+780.90479 2894.3
+781.40570 953.6
+781.91028 2216.7
+782.40796 3228.2
+782.90790 1924.2
+783.41199 981.2
+790.91534 46742.3
+791.41614 50561.8
+791.91760 29399.8
+792.21771 575.8
+792.41907 12719.3
+792.91833 4351.9
+795.64081 821.2
+797.47571 2478.2
+814.50067 746.7
+827.90259 810.1
+829.42871 1971.5
+836.42499 1028.3
+836.92480 2358.9
+837.42780 1454.2
+841.40814 1247.3
+841.49982 1913.7
+842.40656 730.5
+844.79584 562.1
+847.45715 6642.6
+847.95770 8628.7
+848.46014 3938.3
+848.95959 2683.9
+858.44696 1819.9
+858.53394 830.3
+859.45386 1171.9
+966.48364 909.1
+969.86444 658.5
+995.50696 864.1
+1024.54919 590.3
+1198.19043 3033.1
+1369.48608 761.4
+1400.09241 569.5
+1498.47107 611.6
+1808.21045 622.8
+1878.55896 1089.6
+1879.05103 2030.8
+1879.26611 1238.8
+1879.57825 19448.0
+1880.13147 1918.9
+1880.57312 1122.9
+1881.21729 599.8
+1882.03784 697.6
+1904.82825 628.4
+1906.96716 7536.5
+1930.70435 937.1
+1931.98840 674.1
+1970.54407 767.2
+1987.12231 716.6
+S	2335	2335	470.5031596
+Z	4	1877.98134
+116.66685 525.8
+121.78921 2262.9
+133.13356 1162.6
+138.67436 514.1
+143.38078 661.4
+148.04347 563.7
+152.34656 562.3
+172.62532 574.9
+195.98010 634.2
+198.91229 1202.5
+199.20024 561.6
+199.20905 851.1
+199.23059 837.7
+199.25102 750.1
+199.28041 1186.4
+199.28854 1448.8
+199.29996 2152.4
+199.31613 700.6
+199.33072 661.9
+199.39630 689.0
+207.92049 602.9
+272.14014 687.3
+285.16183 678.7
+299.54907 806.6
+302.06326 537.3
+308.88281 592.1
+329.42358 540.2
+347.42361 581.2
+371.22949 1027.3
+372.97699 623.4
+378.98596 612.1
+381.34418 705.5
+404.24335 583.4
+408.30588 655.2
+410.56079 560.8
+415.25262 993.5
+417.21930 1104.0
+426.24667 1241.5
+439.06940 556.8
+443.48334 761.4
+445.48483 551.2
+448.00543 3390.9
+448.25833 5697.2
+448.50778 2396.8
+448.75931 1666.1
+451.27704 2523.5
+451.63101 706.4
+452.71899 623.2
+476.75192 563.9
+494.97699 621.6
+503.30612 805.4
+508.61893 914.2
+508.95343 1019.3
+516.94006 1185.3
+517.27472 664.3
+524.29456 1470.1
+524.79260 709.5
+527.27936 986.3
+527.59412 508.0
+527.61688 508.2
+532.52948 1801.7
+532.62708 546.7
+539.28204 1811.9
+539.77966 1406.4
+546.31403 1673.9
+546.64893 843.1
+550.62286 9011.7
+550.95740 8901.4
+551.29126 4154.4
+551.62482 1809.6
+551.95844 822.9
+553.28296 1156.3
+571.27393 867.0
+571.81824 610.2
+574.04437 635.6
+591.51025 638.0
+595.82379 2030.5
+596.32312 1676.1
+600.33051 604.8
+618.87170 584.1
+621.01837 1480.8
+621.35706 853.9
+624.33209 2524.7
+624.83533 2476.0
+625.33960 828.4
+631.34906 1982.2
+675.37659 2020.0
+676.38263 735.8
+676.62421 1293.0
+695.99091 591.2
+719.40472 1721.3
+720.40924 817.5
+734.36792 901.8
+756.60846 673.7
+763.43042 1306.0
+764.43457 629.2
+795.64801 1050.5
+858.02881 648.0
+911.51019 663.0
+943.20221 633.1
+1020.80542 691.6
+1026.65332 597.5
+1057.23645 872.2
+1074.20068 723.5
+1078.73132 704.6
+1188.02881 719.3
+1198.18982 2980.1
+1340.72852 617.6
+1525.37622 946.2
+1556.50159 750.8
+1711.44922 656.9
+1770.85486 596.9
+1877.60120 676.8
+1878.67432 722.2
+1879.48718 20464.9
+1880.58423 666.4
+S	2337	2337	516.5222646
+Z	4	2062.05776
+135.32413 644.9
+136.07506 1344.2
+141.81461 571.0
+151.23024 621.7
+153.39906 519.0
+160.49623 594.8
+165.29025 687.4
+166.80916 594.5
+167.74704 522.6
+173.33818 552.1
+175.11867 1296.2
+178.68706 578.9
+178.84540 571.2
+185.11598 1125.8
+188.19504 631.9
+188.24388 775.6
+188.26163 1596.5
+188.29105 2487.3
+188.30109 1885.4
+188.32925 744.1
+189.31120 571.0
+195.04008 1307.2
+198.85205 570.9
+198.91051 794.5
+199.23586 779.3
+199.28296 2628.7
+199.29437 1543.0
+199.30247 1265.4
+199.30841 1362.5
+199.38344 773.0
+199.38622 760.4
+201.12337 958.7
+207.89421 594.3
+212.06616 2671.1
+227.18359 552.8
+229.09302 2144.6
+234.12312 1942.5
+241.65869 627.7
+246.13075 706.0
+246.60091 685.8
+249.15967 22606.2
+250.16257 3351.0
+255.30499 626.9
+268.13974 662.2
+272.17209 2536.6
+277.14590 9577.3
+277.64633 1947.1
+278.11432 875.1
+301.32767 564.0
+319.91510 547.4
+327.20111 1982.9
+336.20700 1205.1
+336.71136 790.8
+341.12610 954.9
+341.19949 1040.9
+350.20529 7468.6
+350.28314 662.7
+350.70840 2086.3
+351.21494 2173.6
+358.26920 698.9
+359.13409 1907.6
+369.22424 81981.3
+370.22842 15063.5
+371.22934 3279.4
+373.18661 1690.0
+375.17441 735.1
+376.16113 10625.6
+377.16522 2462.0
+384.75314 582.4
+391.19653 1821.7
+396.21411 1098.6
+399.20972 922.0
+409.55093 611.5
+415.25308 1727.7
+415.73123 1651.6
+416.23315 1585.5
+427.71799 946.4
+428.22241 1031.3
+429.72855 2925.4
+430.22855 1021.9
+441.71631 652.0
+442.21539 834.7
+443.22284 676.7
+448.25009 956.7
+455.24780 7594.0
+455.58224 10145.4
+455.91608 4079.2
+456.23282 5349.9
+459.28098 1565.7
+460.21997 1214.1
+464.90878 2548.8
+465.24448 3171.4
+465.27975 1257.9
+470.91330 19250.1
+471.24774 19277.6
+471.58221 6568.6
+471.91589 1748.3
+472.24628 709.9
+473.93576 939.6
+474.27386 1066.6
+477.17712 796.5
+477.24207 1344.0
+479.47845 1595.5
+479.73300 1501.8
+479.98071 1567.2
+480.27979 926.7
+482.30756 11573.5
+483.31241 2797.3
+483.74899 4372.8
+484.25433 1744.0
+484.59415 1420.1
+484.93155 688.4
+487.29428 1548.3
+487.99380 1681.6
+488.21555 3033.2
+488.49234 1607.2
+488.58752 2559.9
+488.74097 1019.6
+488.91898 1617.7
+489.25549 818.8
+490.73611 740.4
+496.24756 1914.3
+496.49475 2271.7
+496.75439 1026.4
+496.99908 941.0
+497.27411 971.4
+497.61169 1835.0
+497.93594 913.5
+498.25708 1430.7
+499.28644 4365.4
+500.28613 770.8
+500.74875 3609.3
+501.00089 4442.4
+501.25281 2905.4
+501.50012 924.6
+501.74942 607.0
+522.39221 585.7
+527.61377 1719.9
+527.94574 3498.3
+528.27881 1520.3
+528.61090 985.4
+532.56219 2011.3
+534.97009 9385.1
+535.30438 11884.5
+535.63959 4958.5
+535.97437 2447.5
+536.31079 1289.8
+536.61877 1090.1
+540.28931 1806.6
+540.78699 1342.0
+547.33228 1107.3
+549.17474 889.5
+553.28339 33851.6
+554.28644 10849.1
+555.28784 1970.1
+555.97400 4160.1
+556.30963 3661.3
+556.64380 1946.7
+556.97894 1532.9
+557.95612 702.3
+558.28278 675.8
+564.91180 643.6
+565.30719 14003.9
+565.64136 14079.6
+565.97540 10221.9
+566.30957 3325.9
+566.64435 970.9
+569.95166 772.2
+570.28735 809.3
+572.27173 953.8
+574.33191 651.7
+574.65070 769.4
+578.61084 2292.8
+578.94183 1534.6
+579.27789 1163.0
+582.30328 1494.9
+584.28540 2665.3
+584.61420 5354.6
+584.94940 6421.6
+585.28259 3481.5
+585.61731 1771.9
+586.80280 725.4
+589.96106 1566.7
+590.28967 6806.0
+590.62451 7451.2
+590.95752 3089.5
+591.29352 1300.0
+591.36371 743.5
+594.79663 1953.7
+595.29413 1012.4
+595.32648 1327.9
+595.96405 12159.4
+596.29816 11517.9
+596.63354 6489.3
+596.96460 2247.0
+603.30780 728.8
+607.28833 1507.7
+608.28790 1011.1
+608.79218 2225.2
+609.29401 1709.6
+609.79565 677.9
+612.36737 9096.1
+612.66187 5858.1
+612.99908 3378.2
+613.33875 2075.2
+613.37292 2907.8
+613.82233 3080.6
+613.98999 590.3
+614.32513 3542.0
+614.82593 1335.2
+616.85364 3492.8
+617.30347 1571.2
+617.35315 2446.9
+617.80688 1959.9
+617.85785 1348.7
+618.25452 1501.3
+621.36664 1085.4
+621.66022 976.7
+630.42743 820.1
+635.28162 2454.7
+635.37854 886.0
+639.30573 1242.1
+644.31067 828.9
+644.64667 1963.1
+644.97766 1172.3
+645.31122 1322.9
+648.30792 903.1
+650.31866 5775.2
+650.65161 6716.5
+650.98633 4394.2
+651.32373 1932.1
+652.30872 5033.2
+652.37311 3983.1
+652.87177 2674.9
+653.30872 1882.1
+653.37408 1022.0
+653.98132 1212.1
+654.30963 2010.0
+654.64661 800.6
+657.34033 6559.7
+657.84192 7244.3
+658.34290 3406.5
+662.33142 1870.7
+662.83337 2312.8
+665.39758 1359.2
+666.36841 2423.7
+667.36890 1066.8
+676.65283 1073.2
+682.36652 22968.1
+682.86725 19308.4
+683.36975 12496.7
+683.86755 3889.5
+684.36493 1045.4
+687.85272 764.9
+688.36334 1335.6
+689.82489 1666.7
+690.31970 900.5
+690.82843 1432.1
+691.36908 628.6
+696.43512 622.8
+696.86072 7766.3
+697.36298 9511.6
+697.86353 3172.5
+698.36664 890.9
+698.83997 1640.1
+699.33630 1751.2
+699.40271 7698.3
+700.40582 2989.5
+705.86652 74974.6
+706.36774 73547.2
+706.86890 36578.2
+707.36963 12816.5
+707.86920 3078.9
+708.37115 1205.0
+709.38342 1365.3
+709.43085 1223.1
+709.89655 2382.7
+710.38947 1485.1
+710.89917 4748.4
+711.40039 3521.6
+711.90466 1716.0
+719.40967 1995.6
+719.91272 1491.0
+720.41492 990.3
+725.88129 1836.4
+726.38599 3071.7
+726.43964 1316.3
+736.90771 1472.3
+737.40100 948.7
+739.42664 1238.2
+741.37500 770.6
+741.88409 735.4
+745.40979 22642.9
+745.91193 19425.3
+746.41168 12455.3
+746.90387 3254.6
+747.39655 1878.9
+753.44830 2463.1
+755.36835 1589.8
+755.88422 1173.6
+756.38861 765.0
+770.39484 3162.9
+770.47638 1045.3
+770.89337 1888.5
+771.39563 992.2
+779.40076 18722.2
+779.90204 18832.0
+780.40308 10079.2
+780.90143 2949.1
+781.39758 841.0
+781.91125 1201.9
+782.40649 2281.3
+782.90521 947.6
+783.40619 1073.1
+790.91528 41132.0
+791.41614 46803.6
+791.91748 25962.4
+792.41907 12326.9
+792.91956 3747.0
+793.41486 978.9
+795.64240 1213.8
+797.47260 2464.2
+798.38318 621.7
+828.92004 707.3
+829.43085 2114.8
+830.43707 1541.2
+836.42261 2296.8
+836.92310 3229.2
+837.43103 1772.5
+837.91943 953.4
+841.40991 783.7
+841.49713 936.6
+841.91772 1495.2
+844.97852 645.3
+847.45667 6435.9
+847.95850 5652.8
+848.45911 4739.6
+848.96307 2116.8
+858.45001 2875.4
+859.45587 2147.7
+892.43018 883.6
+900.97021 682.4
+927.66211 616.3
+966.49402 1301.1
+1018.68829 665.7
+1090.22925 684.4
+1125.20642 766.6
+1198.25378 3531.8
+1457.58960 673.1
+1867.42542 680.6
+1870.09094 650.2
+1870.78247 803.8
+1876.19580 664.7
+1877.12537 854.7
+1877.79224 829.7
+1879.07568 2555.7
+1879.24927 3396.6
+1879.56104 20001.9
+1879.82751 3244.3
+1880.75842 950.3
+1881.90625 878.8
+1907.07336 7813.8
+1930.68457 1273.9
+1935.52979 617.8
+S	2338	2338	599.792407933
+Z	2	1197.737
+Z	3	1796.102
+156.89316 615.2
+163.97574 614.6
+169.83588 530.7
+171.63936 729.4
+175.30190 671.2
+177.56343 614.4
+184.55551 627.9
+188.23994 713.1
+188.27112 2044.3
+188.28090 2128.7
+188.28922 2114.4
+188.30090 1793.9
+188.30925 1481.8
+188.31897 1104.8
+188.35188 588.5
+198.91064 995.4
+199.16435 900.2
+199.19543 619.6
+199.26112 1291.1
+199.27495 1440.3
+199.29431 2715.3
+199.39470 844.0
+220.03957 615.7
+220.09470 626.7
+235.35406 561.9
+251.10266 1905.8
+252.00636 583.3
+265.82999 495.6
+274.26981 504.8
+308.91251 658.9
+331.14737 561.4
+333.24606 609.1
+337.51080 583.1
+339.73624 663.5
+341.08511 587.0
+342.28574 614.0
+345.84348 606.4
+350.28455 723.3
+369.22333 1855.8
+371.22943 731.2
+381.36533 504.2
+401.18634 728.4
+404.23376 842.9
+408.22446 1916.9
+431.52982 675.5
+448.25854 728.8
+459.27554 1459.9
+459.77435 916.6
+469.28122 738.6
+488.28461 848.7
+492.28439 804.2
+492.91547 966.8
+495.94226 603.9
+506.33411 743.7
+509.56415 535.8
+524.02618 1496.0
+532.48053 670.0
+532.52454 1831.1
+536.31049 732.4
+544.34424 4010.2
+545.31769 1791.8
+546.20435 556.0
+549.25702 634.9
+553.28217 927.9
+553.68024 600.6
+555.93463 960.1
+561.28571 755.1
+564.79803 827.9
+565.04572 1385.2
+567.32849 1941.4
+569.27734 1175.2
+569.61108 1033.7
+569.96832 891.8
+582.95941 690.7
+583.34351 1547.4
+583.96002 646.9
+584.79883 816.5
+585.04144 680.9
+585.27289 684.2
+615.37476 728.0
+621.93250 603.0
+633.00031 2376.4
+633.32849 1876.6
+633.77209 763.2
+635.72400 649.4
+641.38336 961.3
+654.38153 2244.7
+655.71533 741.9
+657.33734 833.8
+670.69159 5727.1
+670.79877 929.8
+671.02673 3548.1
+671.35724 1018.7
+672.87054 1081.8
+673.34552 2003.8
+673.84937 1662.5
+676.66913 1183.0
+682.36688 5232.9
+682.86926 3626.1
+683.36499 1233.5
+698.37488 2957.0
+698.70984 2066.5
+702.03503 709.6
+704.37476 21840.9
+704.70886 20770.0
+705.04193 5960.2
+705.37799 1688.4
+706.36774 1563.3
+706.86810 3683.5
+707.36877 1081.5
+718.07025 649.9
+725.88293 4803.1
+726.38354 2592.0
+726.88837 878.1
+734.36206 1044.1
+738.87262 853.9
+766.40881 1218.0
+766.90790 868.2
+773.40509 1124.2
+780.40271 1228.2
+782.42511 7555.4
+782.92194 4044.5
+783.42859 2305.5
+784.87347 952.4
+785.48706 4315.8
+795.64014 921.1
+839.94324 1924.4
+840.23737 792.2
+840.43994 1319.0
+840.93494 955.1
+898.56573 1204.1
+913.51410 1020.6
+923.55756 1072.6
+1001.57465 758.9
+1005.87952 671.5
+1057.29712 775.3
+1073.75635 611.0
+1135.26648 603.1
+1160.63916 622.2
+1178.62390 703.4
+1198.17126 3037.6
+1295.40332 619.5
+1373.00366 671.2
+1567.43567 581.5
+1705.03467 779.7
+1729.41089 778.3
+1756.92236 589.9
+1806.17432 678.7
+1872.12964 606.6
+1877.85046 639.3
+1878.19141 904.0
+1878.86621 616.0
+1879.26782 2731.6
+1879.61206 19581.8
+1879.94128 2452.8
+1880.24878 593.9
+1881.01001 774.6
+1881.40088 1152.5
+1882.57568 714.7
+1907.06506 7563.5
+1930.68774 638.4
+1930.79980 651.6
+S	2339	2339	518.2468246
+Z	2	1034.646
+Z	3	1551.465
+134.93581 2306.7
+137.28647 2772.7
+141.74542 2482.3
+147.80032 2070.0
+185.11603 3547.3
+186.75575 1827.5
+187.47055 1797.8
+188.26105 4138.9
+188.27184 4577.0
+188.28596 5142.5
+188.29465 4176.3
+188.30573 3855.6
+188.32100 2153.3
+199.01082 2355.6
+199.20433 2192.2
+199.28120 5114.9
+199.30063 9272.4
+199.32181 4603.7
+199.36034 2719.9
+199.37917 3009.0
+199.40021 3704.2
+199.42871 1932.3
+212.06706 3837.0
+229.06245 2908.0
+234.12257 2644.9
+235.62286 2581.0
+246.09119 3050.0
+249.15950 37150.9
+250.16270 4792.8
+271.86545 2206.1
+272.17117 8575.0
+277.14709 14174.5
+277.64645 3180.8
+289.97211 1933.9
+317.12643 5495.2
+321.67172 3716.9
+327.20212 7561.9
+336.20822 8595.3
+336.70819 2907.2
+336.95578 2224.2
+341.20120 4132.4
+350.20520 37570.5
+350.28302 3026.9
+350.70737 9654.0
+351.21350 5191.1
+369.22406 348628.2
+370.22830 59722.4
+370.71719 4717.1
+371.23105 9123.5
+373.18533 2722.0
+376.16068 16975.1
+377.16568 3661.0
+384.25687 2281.6
+391.19638 3176.6
+399.20993 2522.2
+403.97372 2097.8
+413.72903 2197.5
+427.53085 2755.6
+429.72943 3832.7
+430.22809 2566.4
+441.71725 3539.5
+442.22058 2785.3
+443.21121 2562.5
+448.24963 6381.2
+449.25989 2957.7
+455.24765 60755.1
+455.58188 48803.8
+455.91534 23763.5
+456.24380 8652.2
+464.91022 5932.5
+465.24551 4480.3
+465.58231 3159.0
+470.91345 37823.9
+471.24747 30454.1
+471.58014 10744.2
+471.91425 5495.1
+473.94101 2431.8
+482.30765 40480.1
+483.31015 11100.4
+483.74951 7372.5
+484.25970 9107.8
+484.59286 13486.7
+484.92636 3704.4
+488.21597 6834.3
+488.92126 6411.1
+491.60895 4540.1
+491.94406 3157.0
+494.51532 2534.4
+496.50189 3618.9
+497.27536 12925.7
+497.60986 9967.5
+497.93958 3997.7
+498.25699 3654.6
+498.28290 2707.8
+499.05737 3432.1
+499.28711 15761.7
+500.29074 3137.0
+500.74957 6335.8
+501.00055 10750.1
+501.25269 5194.4
+501.50256 4546.7
+503.24695 2232.1
+525.97443 3351.6
+527.61176 14498.0
+527.94653 11125.0
+528.27979 7338.4
+528.61353 2636.0
+532.54639 7197.9
+534.97058 47686.7
+535.30469 51755.9
+535.63916 33334.0
+535.97321 9373.6
+549.13898 3079.6
+550.30499 5024.1
+553.28296 49433.5
+554.28680 11463.5
+555.28583 2168.8
+555.97589 25399.4
+556.30927 27091.5
+556.64362 13230.9
+556.97791 8220.8
+557.31628 2605.6
+558.28259 2306.2
+559.97034 2553.5
+565.30621 48276.3
+565.64099 61039.3
+565.97516 30137.5
+566.30975 17065.2
+573.98529 4747.7
+574.41943 2578.5
+579.28394 3053.1
+584.28644 4116.9
+584.61481 10265.7
+584.94794 8244.7
+585.28107 8886.7
+589.96234 5897.0
+590.29083 18677.6
+590.62280 15084.0
+590.95807 7903.5
+594.79480 4170.6
+595.32098 8915.2
+595.96393 25119.8
+596.29858 27053.5
+596.63269 16351.8
+596.96320 4452.0
+597.97974 2401.1
+598.31860 4239.0
+599.04150 2005.5
+599.37427 3075.3
+599.70697 3942.2
+608.79321 3418.1
+608.85748 2991.9
+609.29407 3985.0
+609.35339 3290.5
+612.36700 41049.8
+612.66315 30329.6
+612.99518 15290.8
+613.37073 14161.6
+613.82574 4977.7
+616.85199 32412.1
+617.35382 22141.7
+617.80804 3123.7
+617.85724 5759.2
+621.66284 10863.7
+621.99835 8742.3
+626.32257 3811.0
+626.82507 3061.5
+635.28503 3458.5
+642.32825 2275.2
+644.97858 5276.8
+650.31970 9723.4
+650.65283 12312.4
+650.98779 6276.7
+651.31836 3511.0
+652.30945 5319.9
+652.37299 21894.0
+652.87299 13370.7
+653.30878 3583.2
+653.37311 7641.8
+657.33942 12782.3
+657.84155 10578.8
+658.33923 3594.1
+662.33862 3064.5
+662.84174 2648.9
+665.03833 1977.9
+666.36566 2793.1
+668.24426 2185.9
+676.64044 4293.2
+682.36633 109642.8
+682.86798 106482.3
+683.36914 54271.3
+683.87091 17457.8
+687.84875 2272.7
+696.86023 9456.5
+697.36023 11181.3
+697.86298 5082.6
+699.33118 2540.7
+699.40204 31277.3
+700.40533 15577.1
+705.86652 123978.4
+706.36792 117152.4
+706.86926 45931.8
+707.36975 19216.9
+708.42230 2052.6
+709.39038 15248.4
+709.89502 14222.3
+710.39655 7088.5
+710.90027 18694.6
+711.40198 14383.5
+711.90326 8920.0
+712.40704 3996.4
+719.41315 5255.8
+719.91638 6407.1
+725.88580 13090.2
+726.38580 6904.7
+726.88733 4673.9
+732.75372 2063.9
+736.41040 2995.0
+736.90283 6419.4
+738.34277 2268.9
+739.42517 3847.7
+740.42487 2549.6
+745.41095 104195.7
+745.91229 102451.4
+746.41370 47430.2
+746.91583 13776.2
+747.40143 2837.1
+755.37433 3210.1
+756.37848 3245.3
+770.39252 3162.8
+770.89880 5116.3
+779.40033 31984.3
+779.90143 35900.1
+780.40320 13278.0
+780.90363 5239.0
+781.90863 6883.0
+782.40747 11643.5
+782.90454 9029.9
+783.41064 2788.0
+790.91547 202647.4
+791.41650 221132.6
+791.91730 114831.5
+792.41858 49757.9
+792.91534 11865.4
+793.27917 2240.7
+793.40491 2678.0
+795.64075 3592.0
+836.43152 3361.9
+836.92834 2669.0
+841.42615 2607.5
+841.50610 2574.4
+841.91791 2685.3
+847.45703 28484.1
+847.95917 28360.7
+848.45905 18954.7
+848.96228 8775.9
+854.43054 2784.4
+858.44812 4681.2
+894.22040 2146.3
+1057.27258 2947.1
+1117.02136 2240.3
+1198.22546 11840.5
+1347.61279 2467.5
+1362.80786 2125.6
+1383.95959 2142.0
+1420.26233 2502.7
+1482.80359 2105.0
+1489.81470 2199.0
+1499.48279 2220.2
+1525.36646 2393.4
+1603.34204 2168.3
+1776.82312 2963.8
+1785.30005 2456.1
+1863.45691 1851.3
+1870.49512 2864.7
+1878.10144 2547.1
+1878.81519 4383.2
+1879.02295 3743.1
+1879.55579 66470.5
+1879.84607 8415.5
+1880.10889 2845.3
+1880.32788 4728.7
+1880.89978 3318.5
+1882.18750 3325.5
+1907.05701 25853.1
+1918.95618 3124.7
+1930.51819 4070.5
+S	2341	2341	1879.9725746
+Z	2	3758.097
+Z	3	5636.643
+520.71234 798.3
+532.52319 1652.2
+549.11963 753.2
+676.64886 705.0
+731.06873 725.7
+795.63837 873.3
+819.33246 546.1
+853.45172 592.8
+854.97980 646.3
+1057.99829 696.6
+1198.16760 3456.1
+1489.77271 847.4
+1588.83142 627.7
+1873.05713 699.4
+1878.83679 937.4
+1879.22656 2065.9
+1879.55139 19724.2
+1879.88562 2974.8
+1881.18823 1049.6
+1888.16956 663.6
+1907.03076 7791.6
+1907.38513 615.4
+1907.51843 702.8
+1930.47742 1112.0
+S	2342	2342	615.9344246
+Z	5	3074.633
+160.56917 1130.3
+167.83347 1013.8
+171.63933 961.8
+173.22321 992.4
+173.66982 955.6
+178.86514 983.2
+188.25162 1783.0
+188.26382 3139.1
+188.27213 2944.2
+188.28488 3501.1
+188.29308 3341.4
+188.30519 3223.7
+188.31210 2839.7
+188.33194 1379.3
+188.39922 1114.6
+191.00117 1036.6
+198.91539 1730.9
+199.18770 1525.2
+199.20558 1061.6
+199.22523 1306.6
+199.27344 2586.3
+199.28697 3980.9
+199.30167 2383.7
+199.31474 1931.0
+199.32625 1706.9
+199.35527 1085.8
+199.40047 1267.0
+204.64407 1109.0
+287.12695 1085.4
+295.80460 1038.3
+302.37451 1014.2
+305.07953 1104.5
+310.21207 2930.8
+323.71561 1249.8
+338.20792 3406.9
+355.23306 1336.2
+359.23758 2516.4
+397.20596 2406.4
+408.30026 1299.7
+409.28140 2777.1
+436.29059 16080.1
+437.28268 7143.2
+438.27451 1710.2
+454.30072 5098.9
+455.30588 1469.9
+459.90298 1477.5
+460.23761 1391.2
+466.71600 1090.2
+469.63882 1081.3
+488.28253 3748.0
+489.28436 1692.5
+493.58191 2443.6
+494.24966 2019.1
+496.29187 1055.8
+532.53973 3913.2
+545.31506 1028.6
+547.93665 1670.1
+551.35229 3492.0
+560.98279 3466.6
+561.31421 1153.2
+581.29260 1728.0
+582.04279 1405.2
+582.29907 9495.7
+582.80121 8903.3
+583.30499 4899.6
+586.04431 1840.8
+587.66608 1212.7
+594.79895 2618.5
+595.05060 1661.0
+595.29877 1596.7
+595.55151 1777.2
+599.05261 2771.6
+599.30243 7209.2
+599.55182 9044.2
+599.80139 5242.7
+600.04163 1190.4
+600.27258 931.6
+601.36591 3396.1
+601.51965 1170.4
+601.72412 2752.3
+602.94727 2289.9
+603.28058 1270.4
+639.81134 5762.3
+640.31378 5442.6
+640.81671 3079.0
+646.42700 8969.4
+647.33142 2219.9
+647.42926 5120.1
+647.58612 1532.9
+647.82507 1452.6
+648.43958 1450.7
+651.58667 2855.4
+651.83569 7819.5
+652.08685 11601.1
+652.33636 9033.1
+652.58868 3128.5
+656.08746 20495.5
+656.33789 46319.8
+656.58905 57174.2
+656.83972 32284.1
+657.09021 17185.7
+657.34125 7058.8
+664.43854 4027.5
+665.44519 3251.5
+676.00726 2155.8
+676.61078 2145.1
+676.85223 1794.1
+677.09821 1326.0
+680.84973 1940.8
+681.10632 5373.3
+681.35779 3941.3
+681.60706 2690.3
+681.86151 1936.1
+686.00171 1451.2
+689.34784 7729.5
+689.84912 9390.9
+690.34894 5279.8
+699.83746 1567.9
+699.92108 1513.7
+708.03564 2420.9
+708.91248 1897.3
+713.70374 5324.6
+714.03949 4310.8
+714.37378 2390.2
+717.45538 1287.7
+729.87549 1421.8
+730.37677 2358.1
+730.87799 1958.3
+731.09631 1316.2
+736.71246 4264.2
+737.04547 3430.4
+737.38287 2596.8
+739.87219 7658.4
+740.37213 11808.2
+740.87500 6223.5
+741.38214 3041.4
+742.38177 6707.3
+742.71613 8023.6
+743.04999 12496.8
+743.38593 8269.7
+743.71875 3223.3
+757.35455 2877.5
+757.85071 1881.0
+769.04919 2174.5
+769.38428 1944.0
+774.72192 5976.6
+775.05511 6786.2
+775.38885 14492.1
+775.72375 8740.7
+776.05573 5771.0
+779.88318 1591.3
+780.72266 11898.1
+781.05768 35786.4
+781.39264 34834.7
+781.72626 21380.7
+782.06128 8163.7
+782.39301 3007.5
+792.72809 2785.9
+793.06250 2315.5
+793.39447 2208.5
+795.65491 1935.7
+798.40057 6050.3
+798.73285 10297.0
+799.06671 16093.1
+799.40533 8884.1
+799.73712 4349.9
+800.07141 1642.3
+804.40314 10597.1
+804.73651 25971.0
+805.07141 29440.3
+805.40417 22491.5
+805.74030 9143.9
+806.07324 2965.7
+807.87299 27372.4
+808.37506 17505.7
+808.87219 3556.1
+821.90619 1996.9
+831.97729 1293.4
+842.42603 1424.2
+842.76154 1963.0
+843.10352 2019.8
+857.99030 1231.5
+869.12152 1417.9
+874.45435 1890.1
+874.78223 6083.1
+875.11597 5410.6
+875.45288 5643.4
+875.78540 2193.3
+876.05444 1165.3
+921.20862 1353.3
+949.46484 2316.6
+949.96277 1956.6
+980.54816 1223.3
+987.21436 1220.5
+1057.23560 1534.2
+1198.21191 5734.5
+1222.60986 1193.7
+1301.39282 1289.1
+1431.62329 1065.3
+1525.37390 1901.8
+1599.40710 1282.9
+1674.16443 1214.0
+1776.95007 1881.1
+1782.88611 1444.4
+1858.19409 1182.2
+1870.23755 1680.3
+1878.29407 1691.5
+1879.51111 37203.8
+1879.79602 4530.8
+1881.41333 1949.3
+1891.56128 1246.4
+1907.05322 13338.3
+1918.88501 1367.5
+1930.49097 1997.8
+S	2343	2343	769.6662471
+Z	4	3074.63369
+230.36073 5086.2
+270.93460 5164.3
+271.58673 6984.4
+288.16916 4739.0
+291.49734 4952.3
+310.21277 14280.9
+324.14459 6732.1
+337.22342 14234.5
+338.20651 18830.4
+341.19205 18462.2
+350.28979 7112.5
+409.28583 5604.4
+427.53717 6657.7
+436.29086 31358.9
+437.27682 19365.6
+446.85126 5493.2
+456.21796 6643.3
+482.64447 4643.0
+482.65610 4643.6
+484.40024 5234.8
+489.25787 14628.5
+489.76282 6828.4
+507.35873 4733.8
+507.38226 5170.3
+507.68469 5083.4
+532.50415 13234.6
+549.14197 5143.4
+549.16888 5237.9
+573.29193 23023.6
+580.45013 5889.1
+582.29999 80414.2
+582.80054 47311.9
+583.30328 11512.2
+585.81158 10673.5
+586.05560 15685.8
+586.31177 11315.2
+586.55981 10181.2
+613.21112 6357.9
+620.19977 5256.1
+630.39130 5963.9
+632.97998 8846.6
+633.31531 8041.8
+642.32263 25135.9
+651.83850 9503.5
+656.08734 46507.7
+656.33783 59158.9
+656.58990 40427.3
+656.84058 11725.8
+676.63922 9331.1
+681.10608 8878.3
+689.12689 7031.3
+689.33832 8991.4
+691.74945 5482.2
+721.63092 7106.7
+723.37842 16162.0
+725.41675 14869.5
+728.63336 12772.4
+728.87317 12365.4
+730.73334 13669.1
+731.08221 12784.6
+732.87909 8755.4
+733.13678 16686.0
+733.39154 11879.6
+733.57349 7071.3
+733.65405 6827.8
+734.33990 8004.9
+736.57776 6046.6
+739.72601 31583.5
+740.06165 27814.0
+740.39685 13490.4
+740.73291 6061.2
+741.38727 63891.0
+742.38574 31385.1
+742.71881 23025.6
+743.05273 12637.6
+743.39331 8550.5
+751.71741 7507.8
+793.89197 7357.4
+795.63995 11709.9
+796.46393 6270.0
+800.07336 5900.9
+804.40625 11700.4
+804.74634 9631.1
+805.07568 11463.8
+805.76935 11097.9
+806.43884 9911.9
+822.44824 7065.3
+832.48755 18662.6
+833.49152 11565.4
+840.45721 35849.9
+841.46112 15292.7
+843.07898 6692.8
+868.44489 47235.4
+868.77948 62893.9
+869.11328 42340.6
+869.44531 27263.0
+874.44910 545090.8
+874.78296 712527.1
+875.11707 539872.7
+875.45056 266597.7
+875.61542 7739.6
+875.78394 61503.3
+876.12378 13251.8
+895.71484 4967.0
+902.13025 6458.2
+902.46204 9626.4
+906.15179 22923.1
+906.48340 57779.9
+906.81604 35866.7
+907.15399 20798.6
+907.47363 61094.4
+907.80627 82642.0
+908.13977 52799.9
+908.47406 33202.9
+908.81689 13795.2
+939.15710 11217.9
+939.50317 16562.6
+939.83398 13589.7
+939.95996 13688.2
+940.17566 12263.1
+940.45020 18721.5
+940.97174 16236.4
+945.16626 102343.5
+945.49951 159648.4
+945.83514 125162.6
+946.16882 59972.1
+946.50415 19969.1
+947.51770 75413.0
+948.02112 81903.4
+948.52032 39105.6
+948.96625 106959.8
+949.46533 78436.2
+949.96558 55655.7
+950.46985 21348.4
+964.32404 5901.6
+971.16992 9054.4
+971.53210 6112.2
+977.15692 5407.6
+978.53558 5687.0
+1013.01630 13126.4
+1013.51471 12590.8
+1014.59747 13706.3
+1020.86810 10327.9
+1032.60950 24081.4
+1033.61108 14793.1
+1040.55530 7007.9
+1050.56262 6308.7
+1141.07861 10711.7
+1141.58398 24532.7
+1142.08240 15079.5
+1160.71863 7504.9
+1198.11743 28370.8
+1302.11914 5335.8
+1328.13452 6228.2
+1458.74963 14085.4
+1459.74304 11640.8
+1525.36340 7965.8
+1694.43811 5868.3
+1876.15625 7596.8
+1879.23877 22992.5
+1879.55518 157602.4
+1880.08643 11276.8
+1880.27136 6060.5
+1904.89233 7570.4
+1907.10718 64081.3
+1930.51074 9692.5
+S	2345	2345	1724.2568246
+Z	3	5169.495
+Z	2	3446.666
+464.76602 3828.7
+465.70184 4114.1
+478.89835 3376.6
+532.50031 11250.8
+585.26331 4308.0
+603.27478 4208.3
+629.26062 6063.6
+630.42090 4697.1
+635.15045 3400.5
+664.33044 20472.5
+676.62384 4840.3
+681.09235 3607.5
+684.34247 4715.2
+718.30597 5846.2
+731.14093 5055.6
+746.34930 5625.0
+775.36243 12858.9
+780.74518 4413.0
+793.37427 24388.5
+794.37213 6461.4
+795.64630 5443.7
+813.38153 12742.6
+817.39032 5295.2
+831.39301 15123.0
+848.29602 3572.5
+892.44281 13083.4
+894.43665 5657.1
+912.44629 10399.2
+913.43280 6327.2
+930.46039 13486.1
+931.46509 7627.6
+974.43561 3714.1
+1005.52490 8970.5
+1041.49646 8105.5
+1057.20020 4152.0
+1059.49902 16836.8
+1060.50903 7523.9
+1097.50940 4181.6
+1115.49988 4875.0
+1132.52075 5954.4
+1170.61035 4878.1
+1188.01575 5531.6
+1190.53406 5828.9
+1198.11914 20978.3
+1260.63953 9652.9
+1261.63123 11930.4
+1262.62903 8502.5
+1278.63953 62023.8
+1279.64050 36844.1
+1280.65076 15382.6
+1301.55566 8694.1
+1319.58215 11411.2
+1320.56213 7254.9
+1393.65747 5082.3
+1438.08716 4738.6
+1461.69153 8144.9
+1494.71082 5887.6
+1541.67761 8616.4
+1558.70789 57231.3
+1559.70911 41078.1
+1560.70752 21060.1
+1561.72803 7188.1
+1576.71973 98031.7
+1577.72461 61530.4
+1578.72266 30415.3
+1579.50635 4109.3
+1579.72021 8205.8
+1589.79346 9621.5
+1590.78979 6236.1
+1594.73413 32258.3
+1595.73022 20599.7
+1596.73572 8703.4
+1607.79919 78062.1
+1608.80017 56152.3
+1609.80652 20838.5
+1610.78979 6510.4
+1615.82300 4917.0
+1631.82080 9149.7
+1632.80359 6403.2
+1678.81519 5585.8
+1686.81433 11616.0
+1687.79236 33989.4
+1688.79358 22893.2
+1800.69543 4965.0
+1878.98669 4593.8
+1879.49548 110785.5
+1879.76245 19283.0
+1879.97168 10465.2
+1907.15637 42822.5
+1930.60815 6046.5
+1940.49487 3947.8
+S	2346	2346	1879.9318246
+Z	2	3758.016
+Z	3	5636.52
+532.47827 1547.3
+533.30450 723.0
+558.50226 719.9
+630.38611 894.7
+676.63550 1307.2
+696.22534 548.4
+795.64948 860.9
+875.96271 629.0
+877.65771 628.4
+1057.23474 900.9
+1079.42834 690.7
+1089.20117 653.0
+1110.74292 619.0
+1138.82874 678.0
+1198.06360 3269.3
+1236.47485 594.6
+1269.66296 561.2
+1837.83179 668.0
+1876.10095 698.0
+1878.56628 831.3
+1879.09558 1713.5
+1879.52283 20298.8
+1879.98059 1245.0
+1880.27148 634.7
+1880.55310 1141.0
+1883.10144 770.3
+1907.09607 7201.6
+S	2347	2347	1293.3798246
+Z	4	5169.488
+381.32172 603.9
+381.38818 695.2
+397.27496 614.0
+401.44571 627.5
+482.77878 711.7
+532.50934 2109.6
+622.34100 806.8
+635.95190 574.0
+676.64124 1288.0
+795.63635 849.7
+980.66919 820.5
+1057.25513 759.4
+1198.13647 3074.5
+1223.08069 616.9
+1367.74927 675.9
+1792.24023 638.6
+1870.57739 703.4
+1878.61743 708.3
+1879.53210 19444.7
+1880.15625 663.6
+1881.92065 746.3
+1907.05286 7234.4
+1907.33911 893.9
+1930.73303 834.4
+S	2349	2349	769.6680171
+Z	4	3074.64077
+200.91161 563.7
+201.13770 590.7
+201.72923 652.2
+207.59554 564.0
+211.81139 496.2
+214.85480 522.9
+255.80916 700.2
+271.40247 905.3
+276.66891 604.4
+277.44037 611.2
+278.93991 582.7
+284.57422 634.2
+295.39078 573.5
+315.17871 608.7
+315.45700 597.8
+341.94379 639.9
+342.30652 658.2
+350.28821 741.3
+407.73578 603.8
+482.69794 871.7
+517.62866 676.7
+522.30420 688.6
+532.51544 2090.7
+535.84369 559.6
+564.24518 713.4
+566.74756 670.1
+582.29688 1496.5
+585.80609 1347.7
+586.05927 1894.3
+586.30829 1362.8
+623.05145 622.9
+644.26416 651.1
+645.64508 604.9
+656.08826 1329.3
+676.62183 1437.4
+707.64777 734.9
+741.39252 812.3
+744.30609 634.5
+750.92407 698.2
+781.09656 703.5
+795.64960 768.5
+816.04279 627.8
+832.86786 777.6
+838.28107 699.3
+858.13080 684.5
+874.44806 12155.2
+874.78290 12028.6
+875.11707 3724.7
+875.45410 1065.4
+875.63995 715.7
+878.10950 729.5
+879.00555 765.7
+901.07269 854.2
+906.48712 776.1
+906.85193 704.9
+907.47522 1411.8
+907.81635 1136.4
+936.97876 801.7
+945.16455 1228.9
+945.49475 1399.3
+947.51874 1236.4
+948.01831 1334.2
+948.95850 1764.2
+949.46289 1000.2
+967.30896 709.2
+986.11884 623.9
+997.92664 821.9
+1110.83240 864.7
+1116.56604 618.3
+1123.96484 625.9
+1198.15210 2934.5
+1659.86292 726.1
+1719.96643 615.9
+1870.48328 891.5
+1877.80823 808.5
+1879.48877 19864.7
+1879.77087 1801.4
+1906.81091 1362.2
+1907.10205 7096.3
+1907.42175 1085.5
+1930.74414 991.2
+S	2350	2350	615.9353406
+Z	5	3074.63758
+165.76834 688.1
+172.26088 502.5
+179.15343 536.3
+187.98468 752.5
+188.24236 930.5
+188.25305 1185.3
+188.26266 1410.8
+188.27806 1573.4
+188.28580 1408.9
+188.29970 1186.8
+188.30508 1206.4
+188.31303 1101.1
+188.32088 1061.1
+188.33301 707.4
+198.91302 872.2
+199.18700 600.8
+199.24510 596.1
+199.28383 1644.4
+199.29953 2034.0
+199.31065 2035.1
+199.32552 654.1
+199.40845 589.8
+201.12332 689.2
+218.72101 639.8
+233.58282 775.3
+243.59860 593.2
+267.64856 594.7
+271.59775 801.8
+271.91180 617.3
+272.59027 484.3
+273.04556 586.9
+288.20108 872.4
+302.91028 625.1
+308.91495 640.3
+310.21106 977.4
+335.35623 566.3
+337.22241 622.0
+338.20810 1080.5
+351.41931 583.2
+359.23901 3495.3
+359.97406 534.1
+371.03131 601.2
+397.20566 851.7
+409.28326 951.3
+436.29074 5310.7
+437.27713 2371.0
+438.27579 661.6
+454.30286 1407.7
+473.21024 1174.1
+482.84265 621.4
+487.09286 606.7
+488.28146 4647.4
+493.91284 830.6
+499.19458 711.1
+501.20792 4893.9
+530.75555 4851.3
+531.25781 2247.2
+532.50360 2210.5
+551.34753 810.9
+554.98438 737.1
+581.29120 814.3
+582.29944 3866.3
+582.80237 2294.3
+583.29987 1229.4
+590.92212 666.9
+593.35376 484.4
+594.55737 642.4
+594.80206 978.5
+596.20538 596.4
+597.81360 1271.3
+598.32117 977.1
+598.66309 701.9
+599.05573 852.1
+599.30151 1120.6
+599.55377 1789.6
+599.80243 892.3
+601.36566 4509.4
+601.84424 537.2
+602.94629 1470.8
+603.28705 930.2
+603.61359 875.9
+622.62854 750.9
+622.83099 700.8
+630.43378 1142.0
+630.90527 602.5
+639.81409 2635.5
+640.31323 2054.1
+640.81653 993.6
+646.42627 3135.1
+647.43005 1158.5
+651.58405 2329.7
+651.83600 4024.1
+652.08679 4433.3
+652.33667 2894.2
+652.58673 1256.2
+656.08655 8551.4
+656.33752 16176.3
+656.58868 11662.0
+656.84003 6964.2
+657.09204 3383.4
+664.43481 1044.2
+676.01422 697.0
+676.65131 748.8
+677.10242 615.1
+680.85193 1769.5
+681.10114 904.1
+681.35876 875.6
+681.61005 1293.1
+689.34778 2891.5
+689.84943 3314.8
+690.35242 1254.4
+699.82800 885.6
+701.58203 683.8
+713.36920 664.8
+714.45093 1524.0
+724.98248 686.5
+727.37744 1276.6
+729.87756 1110.8
+730.37616 830.5
+730.86993 806.1
+736.71240 632.3
+739.86957 2923.0
+740.37146 2891.0
+740.87360 1477.1
+742.38251 3523.7
+742.71613 3777.6
+743.04871 2390.9
+743.38745 1786.6
+757.34845 702.2
+757.85559 665.8
+769.38593 738.4
+774.71979 2234.4
+775.05615 2599.8
+775.38788 1511.4
+775.72595 1549.4
+780.72321 5877.8
+781.05847 9677.8
+781.39276 8346.7
+781.72443 4521.3
+782.05286 1798.7
+790.44977 888.5
+792.39441 1113.3
+792.47894 876.3
+793.05963 889.4
+793.40601 1187.6
+795.64398 767.1
+798.39917 2682.5
+798.73358 3761.4
+799.06915 3777.6
+799.40717 2322.8
+799.73279 793.7
+800.35327 1855.9
+801.35138 849.4
+804.40240 6893.4
+804.73553 7359.2
+805.07147 9817.3
+805.40613 5219.9
+805.73730 1468.8
+807.87347 7373.3
+808.37506 5516.2
+808.87524 2619.6
+809.36560 653.8
+842.76367 1041.6
+856.41406 1106.1
+861.51288 1267.3
+874.78259 2252.2
+875.11926 923.4
+875.45215 1759.0
+875.80487 619.7
+947.42273 4517.7
+948.42358 1700.7
+949.47046 1027.1
+985.45520 1974.7
+1008.52545 726.7
+1060.50879 822.2
+1198.12537 3799.8
+1298.07996 569.4
+1519.72534 692.6
+1525.49109 924.2
+1555.44019 607.9
+1624.29541 801.0
+1776.97827 826.3
+1877.91711 846.6
+1878.59802 1197.4
+1879.52759 18451.2
+1906.73657 825.4
+1907.05115 7207.6
+1930.70117 1263.8
+S	2351	2351	1292.6306621
+Z	4	5166.49135
+350.28052 834.4
+352.37585 548.0
+354.46005 714.9
+367.30209 602.4
+367.54666 625.6
+381.37308 786.5
+409.06525 747.0
+414.82278 635.2
+460.97656 677.4
+472.44131 588.6
+532.51288 2261.9
+535.37469 617.2
+549.17664 1104.4
+601.26312 660.6
+660.53802 610.5
+687.83337 685.5
+712.56830 585.4
+746.52625 608.8
+766.33618 675.6
+780.60968 620.5
+795.64301 854.5
+893.48755 650.6
+927.00940 797.2
+934.28998 820.4
+1057.23669 843.9
+1110.93091 701.1
+1198.14648 3292.9
+1225.82397 596.6
+1301.38086 702.8
+1525.46570 907.9
+1869.12463 610.5
+1870.94568 626.6
+1876.26819 786.2
+1878.18604 1012.7
+1878.58765 937.6
+1878.87964 994.1
+1879.19128 2105.1
+1879.52954 19761.8
+1879.86804 2493.4
+1880.12830 658.8
+1907.04456 7190.7
+1998.22095 717.5
+S	2353	2353	1879.91624127
+Z	3	5636.473
+Z	2	3757.985
+532.49316 2276.6
+632.84979 689.8
+662.33441 583.0
+676.65625 1015.2
+762.78870 776.4
+788.05743 638.3
+795.65674 987.1
+904.73279 553.2
+1198.10425 3281.3
+1322.89539 678.7
+1382.11841 580.0
+1615.49243 673.6
+1870.40820 957.2
+1878.09448 1082.6
+1878.99121 885.3
+1879.59302 19938.3
+1880.27893 1298.3
+1881.12744 944.6
+1881.56409 714.2
+1907.06970 7137.0
+1930.72180 916.2
+1952.71460 651.5
+1993.62793 704.1
+S	2354	2354	1907.50740793
+Z	2	3813.167
+Z	3	5719.247
+532.49359 2056.7
+565.93427 566.6
+661.67896 669.8
+670.50476 597.8
+676.65753 890.5
+795.66656 688.9
+965.09637 610.9
+1098.44629 553.0
+1194.02625 577.3
+1197.97400 612.1
+1198.10181 3238.3
+1219.97510 639.4
+1275.30945 619.6
+1276.03320 603.0
+1296.14709 589.1
+1465.36157 575.2
+1471.55176 656.9
+1481.15759 628.8
+1525.48645 716.9
+1590.56458 740.2
+1667.17346 692.0
+1739.18481 649.7
+1838.85168 632.9
+1864.23804 658.0
+1875.56995 563.5
+1876.14612 978.4
+1878.68689 1349.1
+1879.10547 1972.8
+1879.55298 19550.0
+1879.97815 1862.3
+1881.45850 631.8
+1882.04895 919.9
+1907.04980 7589.4
+1930.70801 1041.1
+S	2355	2355	1198.61224127
+Z	2	2395.377
+Z	3	3592.561
+337.20636 598.5
+342.27652 611.5
+350.27942 995.6
+381.36911 767.6
+427.55231 881.2
+532.48462 1928.8
+575.34100 570.0
+623.06366 606.4
+632.34399 585.0
+651.30792 615.9
+656.52911 848.9
+676.62140 908.6
+789.55725 653.0
+795.64825 769.2
+842.65558 593.5
+858.06030 724.8
+1019.67596 815.4
+1146.02991 781.9
+1198.08044 3116.4
+1273.68567 672.4
+1525.43933 834.8
+1587.38208 635.8
+1722.82458 2904.5
+1723.83533 2285.0
+1724.83081 885.7
+1798.00940 667.8
+1878.86853 1177.9
+1879.52783 19216.1
+1879.79968 4170.8
+1880.19824 1006.4
+1884.10388 600.1
+1888.06946 768.3
+1907.04968 7069.6
+S	2357	2357	1725.2568246
+Z	3	5172.495
+Z	2	3448.666
+473.83334 3601.6
+518.23029 5632.9
+532.48822 10192.5
+550.47443 3385.7
+561.17523 3371.6
+591.67230 3410.7
+601.29688 3766.5
+603.28461 4070.0
+629.26141 5795.9
+658.65778 3513.3
+659.20166 3072.9
+664.33130 15163.3
+676.64063 6046.3
+700.29364 6047.4
+718.30334 6529.9
+775.36359 14371.7
+776.36987 5402.5
+793.37573 24754.4
+794.37836 8435.2
+797.41663 4273.5
+804.03479 3647.4
+813.38190 14007.6
+814.36981 4261.3
+815.41364 5165.3
+831.39215 15797.7
+832.39734 6198.3
+858.10352 3841.0
+861.80322 3936.1
+861.91663 4941.9
+862.42206 5360.6
+892.44037 16748.5
+912.45129 9451.9
+913.43689 7329.1
+914.48108 3487.2
+930.45801 16651.5
+931.44952 6605.6
+976.97900 3099.8
+1005.53070 7081.2
+1041.49084 9299.9
+1042.50623 4049.6
+1059.50269 16577.7
+1060.48889 6700.4
+1118.60010 4136.3
+1132.53711 7166.9
+1133.53516 4745.6
+1172.52734 6659.0
+1190.54102 12506.3
+1191.54395 5122.4
+1198.09375 16348.0
+1220.50378 3867.7
+1232.27710 4606.8
+1260.62146 7224.4
+1261.62354 15427.1
+1278.64319 59340.2
+1279.64539 32569.4
+1280.64246 18217.8
+1281.65466 4921.8
+1301.57837 10548.8
+1302.59253 5253.9
+1319.58667 10640.4
+1320.58215 7155.9
+1338.94824 3546.5
+1393.66882 4367.2
+1394.63879 4784.0
+1447.67224 4716.4
+1457.72864 4036.9
+1461.69519 7375.5
+1485.62964 4073.3
+1494.73486 5918.8
+1541.69946 4213.5
+1558.71240 44213.5
+1559.71008 44721.4
+1560.70825 21361.3
+1561.70862 5977.0
+1562.75757 3760.5
+1576.71960 102247.1
+1577.72449 61528.1
+1578.72803 28428.0
+1579.73718 12131.3
+1589.78857 8369.8
+1590.78760 5950.0
+1594.73059 35035.2
+1595.73242 25064.3
+1596.72571 10807.6
+1607.80066 71970.3
+1608.80505 53670.5
+1609.80859 21408.5
+1610.80676 9069.0
+1620.45081 3422.1
+1631.81689 9500.1
+1686.81116 14412.6
+1687.79541 36391.1
+1688.79553 25401.0
+1689.78906 15051.0
+1704.81189 6027.8
+1815.29346 3353.7
+1878.74927 10709.6
+1879.09741 7067.4
+1879.53784 108496.5
+1879.97571 6054.2
+1880.32446 7007.2
+1880.59326 4181.7
+1880.83459 4482.6
+1906.97302 38967.7
+1930.62769 5178.9
+S	2358	2358	1292.6317621
+Z	4	5166.49575
+416.29956 703.6
+532.48737 1550.1
+606.81696 595.4
+630.46808 660.3
+676.63611 903.1
+765.16779 600.6
+776.47571 749.7
+784.74469 626.8
+795.65076 1127.6
+848.81604 581.1
+899.24243 634.6
+935.39899 598.2
+969.62750 722.4
+980.40363 629.4
+1035.17749 633.2
+1037.94299 747.2
+1057.24158 960.1
+1187.95154 972.3
+1198.08752 3474.3
+1265.70496 558.7
+1417.72986 623.3
+1424.56763 632.2
+1540.56384 878.5
+1875.16211 600.2
+1878.99524 1576.8
+1879.53223 19857.5
+1880.06653 1292.4
+1880.36475 1059.5
+1881.27649 630.2
+1906.96155 6855.7
+1907.23755 1840.5
+S	2359	2359	1293.6340746
+Z	4	5170.505
+355.67331 625.3
+360.67361 699.8
+360.90497 593.0
+364.04218 567.0
+366.09775 667.1
+380.63794 705.7
+389.19553 524.5
+417.47192 661.9
+429.05597 574.3
+439.22269 700.8
+475.68335 629.1
+532.50354 2183.9
+594.29681 605.2
+676.63824 974.6
+692.71783 607.7
+709.96692 630.1
+729.01129 597.8
+731.11816 702.3
+780.26318 608.9
+789.00366 804.0
+907.27020 613.0
+959.36621 632.9
+1011.45746 682.5
+1070.68408 609.8
+1079.40552 835.2
+1198.13086 3712.1
+1264.56335 659.2
+1272.78064 867.3
+1412.91028 733.9
+1778.48181 736.7
+1877.56226 716.8
+1878.11511 926.2
+1879.03418 2153.7
+1879.53235 19617.3
+1880.03003 2117.2
+1883.49280 654.6
+1883.68958 697.5
+1907.12561 6930.7
+1930.55310 810.0
+S	2361	2361	863.0438246
+Z	2	1724.072
+230.03078 1214.8
+238.75951 992.7
+240.13591 972.3
+243.54210 984.9
+246.12741 2797.3
+246.57318 838.7
+248.84470 850.6
+249.13603 960.3
+253.48016 930.9
+255.29929 1262.5
+258.14560 5220.7
+259.14908 1223.7
+266.26645 752.8
+266.27057 759.8
+268.09384 1715.5
+271.75119 1289.0
+274.12259 1472.4
+276.06396 2414.8
+276.15616 3436.5
+279.16913 1031.5
+281.45892 936.1
+284.16089 1343.2
+286.10422 4029.1
+294.14484 1679.6
+298.14005 3427.2
+305.84619 958.6
+312.15717 3755.1
+350.28806 1003.1
+351.16870 1242.9
+353.18204 1746.0
+359.10397 2277.4
+363.16745 1558.2
+367.09576 1046.5
+369.17831 3362.7
+370.18076 1600.3
+371.13873 1591.0
+372.12384 1986.2
+377.11353 5930.9
+380.22037 1042.3
+381.17648 2562.2
+381.37250 1216.0
+386.24005 8983.1
+387.20563 17639.0
+387.24445 1363.4
+388.20920 3747.5
+389.14966 11566.2
+389.18680 2910.7
+399.18826 3685.3
+404.25079 24595.9
+405.25430 5433.1
+406.25494 1510.3
+409.17044 2913.5
+409.25000 1102.9
+411.22485 2820.3
+427.18335 6038.9
+427.56262 1371.6
+428.17810 1123.9
+444.21060 1551.2
+445.19250 7431.1
+446.19543 1199.1
+450.20084 1052.6
+453.18777 960.6
+462.22150 1395.5
+472.18622 5212.2
+476.25275 1613.6
+477.23740 2037.2
+479.17902 1235.9
+485.20441 1251.6
+486.27533 3715.7
+489.20224 3779.9
+490.19598 5162.3
+491.19891 2197.0
+494.26312 5421.8
+495.26358 1519.6
+496.20486 4499.6
+497.18893 2015.5
+497.27020 2010.5
+500.18152 2534.8
+500.21841 6751.7
+501.22192 2338.6
+502.23331 10363.6
+503.23865 3109.4
+504.17877 1928.9
+505.17819 1372.4
+512.27490 2551.8
+513.25500 3079.9
+514.21313 1226.4
+515.28284 11673.8
+516.28656 3777.4
+517.28888 1213.6
+518.22827 16787.9
+519.23242 5181.2
+522.25641 3215.8
+524.31012 1355.6
+532.49579 2606.6
+533.29352 20008.2
+534.29614 6808.6
+536.23669 1719.4
+540.26892 1845.8
+555.36786 1009.7
+558.25220 1989.0
+559.21777 1509.4
+569.20642 3416.5
+570.18005 1572.7
+575.27966 2536.7
+582.27472 2705.6
+583.28918 1422.0
+585.27057 10739.9
+585.81024 1462.2
+586.27167 4093.9
+587.21423 9673.7
+587.32776 1303.6
+588.22150 2916.7
+591.27759 2241.0
+592.25836 1456.6
+597.30530 1215.3
+601.30066 4801.8
+602.28101 3716.8
+603.28119 13447.1
+604.28192 5455.6
+605.22473 11055.3
+605.28552 1553.8
+606.22778 3197.9
+607.34851 1365.2
+609.28870 8722.5
+610.25970 2723.6
+610.30347 2066.5
+611.24945 4727.5
+611.32684 1119.0
+612.24915 2898.1
+612.33075 1191.1
+613.27319 1332.5
+615.31830 5656.7
+616.32190 2686.7
+617.29272 6116.5
+618.28558 1852.8
+621.33826 1296.3
+627.30212 3024.8
+628.31134 1996.5
+629.26062 19921.3
+630.26508 7539.8
+630.82117 1761.1
+631.31134 4735.2
+631.81720 2238.3
+632.31006 1037.0
+635.33862 2195.9
+639.82538 86007.3
+640.32678 54851.6
+640.82684 27734.6
+641.26715 1647.6
+641.32825 10335.8
+641.82788 3726.8
+646.32330 8633.1
+647.27039 11685.8
+647.32574 2694.6
+648.27460 4167.3
+649.27490 1652.1
+654.29199 1385.5
+655.26416 1343.4
+664.33392 104269.6
+665.33679 37924.5
+666.33435 12396.8
+667.33582 2493.4
+671.34216 2568.1
+672.30878 2251.4
+673.28247 3550.6
+676.63385 1293.5
+681.35083 1260.2
+682.28772 8300.1
+683.26459 2318.2
+684.34155 6750.2
+685.34448 2436.6
+688.33539 3011.4
+688.83459 2328.3
+689.33289 1293.1
+690.30945 3085.5
+692.29797 1230.1
+695.35480 2090.4
+697.33911 36080.7
+697.84094 26500.5
+698.34351 11828.6
+698.84064 4406.6
+699.35663 1937.5
+699.83673 1167.4
+700.29773 39588.6
+701.30444 11010.3
+702.34430 9067.3
+703.35272 3381.6
+704.30261 949.6
+704.36377 2238.1
+704.88257 1095.9
+708.37146 1250.3
+712.33496 1598.1
+714.38269 1903.4
+715.37073 1898.9
+716.36420 9946.8
+717.36957 3401.3
+718.30829 39702.1
+719.31116 12414.9
+720.31616 4269.9
+722.37628 2560.3
+723.37506 1360.1
+725.84857 1127.3
+726.35284 1607.9
+727.38568 1416.3
+728.32959 12416.2
+729.33136 6051.7
+729.85132 2539.7
+730.34888 5772.6
+730.85760 1505.2
+731.34314 1582.6
+734.40906 1296.2
+738.85822 13087.5
+739.35992 9021.2
+739.86078 5474.8
+740.34668 1458.4
+740.85663 1553.6
+742.39276 1155.9
+746.33942 18508.2
+747.34222 9491.4
+747.86340 133629.3
+748.36493 96099.0
+748.86542 45452.4
+749.36609 21417.5
+749.86633 7064.6
+752.85602 2925.1
+753.35199 2029.6
+757.35712 11872.7
+758.36151 3502.0
+759.36060 1826.6
+764.35303 4443.4
+769.20386 1134.1
+769.36224 1608.7
+770.40985 2442.5
+771.37140 1828.2
+772.35791 2540.4
+775.36609 97551.1
+776.37006 39351.7
+777.36835 14581.3
+778.37085 3258.6
+779.85315 1761.3
+781.07556 1412.3
+781.36938 1946.0
+786.36469 3040.7
+786.88586 1511.9
+787.36749 2201.8
+788.85602 1632.8
+791.00012 1803.3
+793.37695 267134.6
+794.37964 112518.4
+794.53027 1123.1
+795.37500 38573.9
+795.65656 1543.1
+795.76208 1514.7
+795.90125 11986.6
+796.37256 10272.2
+797.42310 5256.1
+798.42151 2391.7
+799.36652 8022.5
+800.36053 2613.3
+802.98816 999.2
+803.39691 4503.4
+804.40485 133517.7
+804.90613 102175.3
+805.40674 59678.2
+805.90759 22903.7
+806.40833 6882.1
+806.90973 1478.9
+807.41266 2208.8
+807.90039 1269.8
+809.39557 1944.8
+809.89264 1369.6
+813.38153 37611.3
+814.38397 15819.8
+815.40448 8332.2
+816.41913 3263.4
+816.91400 5626.9
+817.37726 4381.6
+818.38159 1432.0
+819.32697 1422.0
+822.40173 1495.7
+822.90393 1491.7
+823.40674 1678.4
+831.39185 26487.6
+831.89618 1829.5
+832.39319 13059.9
+833.39612 4540.3
+856.80981 1023.6
+861.92065 3700.3
+862.41986 1891.4
+862.91266 1260.1
+863.42316 2096.4
+863.92157 8233.6
+864.42151 7743.2
+869.18378 1104.6
+869.49896 1464.5
+871.64288 1350.0
+873.23749 1369.1
+874.43390 8980.6
+875.44543 4400.5
+877.43933 3648.3
+878.44373 2235.6
+885.44110 2249.1
+886.43494 2164.8
+891.05756 1370.5
+891.92920 963.8
+891.97491 1008.9
+892.44501 275732.1
+893.44806 117268.5
+893.83661 1121.1
+894.44702 48630.1
+895.44928 13289.0
+896.44794 2808.4
+897.44281 1072.5
+901.14557 1224.4
+902.47742 3434.1
+903.47870 1254.3
+912.45087 29600.1
+913.45215 14833.0
+914.44922 5170.9
+915.46021 1379.6
+916.51276 1143.8
+926.46667 1881.0
+928.40759 2920.1
+929.41156 1999.4
+930.46075 58656.0
+931.46368 25584.2
+932.46472 8139.4
+933.46716 2992.3
+942.42249 2357.6
+944.47321 2930.7
+946.41949 4544.2
+946.96313 1157.2
+954.50146 4387.4
+960.43750 3511.5
+961.43909 1813.5
+962.43848 3016.7
+968.51495 1157.1
+969.50739 1702.8
+972.50812 11191.8
+973.51056 5123.8
+974.51843 1699.8
+987.51959 20818.4
+988.52112 10387.2
+989.52380 4211.2
+990.43604 3663.2
+990.51715 3668.9
+992.43433 1423.5
+996.14362 1496.9
+1002.13190 1541.4
+1003.49866 1597.5
+1004.51855 2064.0
+1004.92963 1399.6
+1005.52905 319972.5
+1005.66943 1497.1
+1005.71680 1171.3
+1006.53198 172531.6
+1007.19330 1645.9
+1007.53278 73007.4
+1008.20892 1745.9
+1008.53448 20935.0
+1009.53174 4458.3
+1023.47974 3385.2
+1031.49841 2056.8
+1041.49304 17583.9
+1042.49463 10045.7
+1043.49817 4629.3
+1057.23218 1390.5
+1059.50354 44215.7
+1060.50696 22506.9
+1061.50598 8331.2
+1062.51416 1674.7
+1073.46741 3447.4
+1074.45300 1660.1
+1091.47314 7040.7
+1092.47595 3061.7
+1097.50488 1333.6
+1100.60022 7990.3
+1101.60583 4378.0
+1102.61023 2258.3
+1114.52454 4322.2
+1115.52344 3775.8
+1116.51428 1869.9
+1118.61292 140851.7
+1119.61584 81814.4
+1120.61597 34107.4
+1121.61792 12470.6
+1122.60583 2604.2
+1132.53955 10804.6
+1133.53882 4904.8
+1134.54224 3157.1
+1150.55652 2773.7
+1152.52991 1304.5
+1170.61670 3026.4
+1171.60962 2171.7
+1172.53564 8113.4
+1173.53027 4067.8
+1174.54346 2840.5
+1190.54504 21195.9
+1191.54700 11384.9
+1192.54138 5056.7
+1193.54834 1937.9
+1198.10486 4635.8
+1204.56091 1837.7
+1206.50269 2446.6
+1219.57263 1658.7
+1228.60791 1173.3
+1229.56152 4113.7
+1247.56616 10148.4
+1248.56677 6947.4
+1249.56848 2281.8
+1260.63354 7361.3
+1261.62354 15776.7
+1262.62317 10034.6
+1263.62061 4301.9
+1264.61646 1570.0
+1265.57996 1746.3
+1266.56970 1349.7
+1278.64380 146620.5
+1279.64697 94404.9
+1280.64697 47526.5
+1281.64722 14605.2
+1282.64514 5168.4
+1286.94421 1020.3
+1301.57629 10847.2
+1302.57703 7589.7
+1303.57910 3657.4
+1319.58655 39587.1
+1320.58960 24739.3
+1321.59302 10600.5
+1322.58557 3681.1
+1330.60107 4337.8
+1331.60327 4609.5
+1348.61340 9497.7
+1349.61743 6889.8
+1350.62170 3699.1
+1366.63379 3216.5
+1367.63147 1996.3
+1368.63635 1214.7
+1375.66162 9423.8
+1376.65869 8590.4
+1377.65869 6868.9
+1378.66589 2008.5
+1389.18140 1376.9
+1393.67175 114726.8
+1394.67371 82653.0
+1395.67529 42951.4
+1396.67456 17607.1
+1397.67468 4709.5
+1429.68884 1246.1
+1447.68323 8270.8
+1448.68176 6418.7
+1449.67810 3332.2
+1450.70544 1565.5
+1461.69604 3978.0
+1462.70557 2025.4
+1463.70776 1292.3
+1466.68713 1264.2
+1476.70679 5833.9
+1477.71167 4483.6
+1478.71289 2382.4
+1479.69409 1726.9
+1494.71960 73619.3
+1495.72192 53351.0
+1496.72363 27470.5
+1497.72437 12040.2
+1498.72327 4601.6
+1525.50659 1417.6
+1540.70667 1448.9
+1541.69983 1730.1
+1558.71350 18339.1
+1559.71521 14033.6
+1560.71338 10027.6
+1561.70300 3611.0
+1562.70618 1317.1
+1576.72388 82505.9
+1577.72717 57078.2
+1578.72778 30674.4
+1579.73071 13252.7
+1580.72961 5318.3
+1594.73633 27756.0
+1595.74011 18752.1
+1596.74280 8497.6
+1597.74231 3673.8
+1598.76184 2320.6
+1876.20508 1138.1
+1878.13770 1477.0
+1878.46033 1670.6
+1879.51440 30541.0
+1879.90747 2607.0
+1880.56213 1698.9
+1880.94946 1578.3
+1907.11475 11623.5
+1930.69287 1968.9
+S	2362	2362	575.649407933
+Z	3	1723.673
+Z	2	1149.451
+145.26602 966.7
+145.37837 1094.6
+146.32207 867.6
+155.98145 984.5
+156.43013 1074.7
+158.43440 1032.4
+163.27858 2618.6
+163.32967 1860.9
+163.38141 1826.2
+166.20293 1034.7
+169.12595 946.8
+182.79239 1142.8
+188.01459 917.4
+188.25555 2402.8
+188.27156 3009.6
+188.28223 3551.9
+188.29485 3255.7
+188.30623 2681.4
+198.91354 1378.0
+199.19829 1750.4
+199.21500 1477.2
+199.26912 869.2
+199.27664 1338.3
+199.29726 3952.3
+199.30862 2107.5
+199.39218 1298.4
+201.12505 13041.0
+210.17241 1136.4
+217.35329 1013.3
+228.36549 995.0
+229.12016 13379.0
+230.12402 1223.5
+233.58687 1418.2
+261.40604 915.8
+266.15256 1263.2
+280.45279 991.5
+299.81137 881.7
+330.16837 3708.2
+358.84229 1233.4
+381.38379 1551.4
+391.28625 3284.4
+397.19592 1014.6
+404.25381 2214.2
+408.00620 906.9
+412.97833 948.4
+446.72815 2640.9
+462.37683 1056.8
+492.91122 9208.1
+493.24460 5605.2
+493.57755 2909.8
+497.27646 1311.4
+498.91705 4255.1
+499.24802 4484.6
+499.58081 1484.7
+500.22641 1262.4
+502.03790 991.6
+503.27188 2197.0
+503.77216 1852.8
+513.87646 946.5
+515.28601 4910.0
+518.23157 2557.6
+532.47845 3315.8
+548.68164 1284.2
+556.25366 3002.2
+560.28577 2030.5
+560.61719 2669.4
+562.95007 1529.8
+563.27966 6700.9
+563.61157 4073.6
+563.94427 1974.6
+567.51117 1903.3
+568.58075 1698.2
+568.80011 1320.8
+568.89496 2665.1
+568.94891 423562.4
+569.01025 6065.6
+569.28314 471397.3
+569.33514 5468.9
+569.61633 291595.5
+569.66077 6066.1
+569.95032 151006.4
+570.00525 1500.7
+570.28436 51428.9
+570.39484 2010.8
+570.44373 1307.2
+570.51526 1090.1
+570.61920 17846.5
+570.72882 2396.5
+570.96051 4814.0
+571.07019 1362.3
+571.29865 2764.9
+571.63330 1442.3
+572.51874 2354.2
+572.56403 1909.6
+572.78186 3235.1
+572.84784 1881.8
+572.90009 1459.4
+572.99500 1986.0
+573.03717 2464.2
+573.07849 1802.1
+573.12805 4253.4
+573.21381 1290.4
+573.23474 1475.3
+573.28186 3691.8
+573.33911 1898.0
+573.37286 3124.6
+573.42621 1657.0
+573.44031 1582.2
+573.49176 17067.0
+573.53857 1976.0
+573.57507 2999.4
+573.60986 3833.2
+573.63696 1894.1
+573.69092 4391.8
+573.75537 9653.3
+573.82037 17398.3
+573.88354 5294.7
+573.92975 4436.3
+574.01050 5946.6
+574.04205 4927.6
+574.08771 10137.3
+574.14923 10859.7
+574.23297 18837.0
+574.32806 2766.3
+574.36011 4642.9
+574.41962 8137.0
+574.46918 6754.2
+574.56598 17729.7
+574.62579 1717.1
+574.72656 7854.5
+574.77216 7323.3
+574.81049 9396.6
+574.85547 5947.3
+574.89728 18859.6
+574.95270 3530570.5
+575.03540 17153.3
+575.06940 8947.8
+575.10815 7240.3
+575.14630 8964.1
+575.21393 10374.7
+575.28412 3497479.5
+575.40125 5240.3
+575.44110 7845.8
+575.47791 3840.8
+575.51807 9239.3
+575.61578 2261583.0
+575.67987 25869.9
+575.73492 3650.5
+575.77185 6009.2
+575.83112 1774.2
+575.84619 2940.4
+575.88831 4505.6
+575.94897 1067697.5
+576.01147 26996.6
+576.15552 11379.8
+576.20441 5556.2
+576.28308 390849.5
+576.34491 19124.7
+576.42114 21505.8
+576.48370 11048.8
+576.55682 6213.0
+576.61639 111835.7
+576.67328 10102.7
+576.75293 19678.3
+576.81750 8099.5
+576.87579 4348.1
+576.88837 4203.7
+576.94781 26208.6
+577.00513 5365.2
+577.08459 12141.9
+577.15546 3947.7
+577.21313 3223.9
+577.27740 4695.8
+577.34363 3525.0
+577.41974 3954.3
+577.46375 2974.8
+577.54169 2497.4
+577.57318 1544.2
+577.60309 1509.9
+577.68036 1965.5
+577.72766 1901.1
+577.79572 2159.1
+577.87659 1909.3
+578.01465 1451.9
+578.06537 1716.6
+578.13220 1551.5
+578.40015 1542.6
+578.97339 2463.0
+579.30188 3558.0
+579.64526 2239.0
+580.99646 5352.8
+581.33411 4526.2
+581.66785 3497.6
+582.00763 1541.8
+585.27368 1451.7
+587.22595 1453.8
+603.28296 5225.5
+604.28284 1026.8
+609.29279 1644.6
+611.25500 1797.5
+617.29419 1466.8
+629.26227 5882.7
+630.26379 1799.1
+631.31464 2961.8
+635.12347 956.5
+639.16290 953.8
+639.82849 63261.9
+640.32947 32934.9
+640.83112 14147.9
+641.32843 3646.5
+641.83093 1567.2
+646.32178 2189.4
+647.27356 2200.9
+664.33716 29631.9
+665.34088 7053.6
+666.33435 2480.6
+676.65442 1485.0
+679.12897 1020.4
+682.29065 3230.9
+684.34106 2980.4
+688.34430 2166.8
+688.83466 1419.9
+697.34253 251995.1
+697.84406 171152.0
+698.34436 78529.8
+698.84534 29152.6
+699.34576 9309.2
+699.84839 1343.3
+700.30151 11646.5
+701.30737 3718.1
+702.35077 3309.0
+705.04639 2501.6
+705.38300 2396.6
+705.70978 1984.6
+725.85352 3098.9
+726.35187 2040.6
+728.33362 3457.5
+730.34558 1269.1
+734.14935 1208.5
+738.86218 25642.1
+739.04926 2692.9
+739.36298 15619.5
+739.53949 2365.4
+739.86218 8581.2
+740.02618 1244.5
+740.36627 2066.4
+744.26483 1526.1
+745.15771 1591.1
+745.40479 2001.6
+745.46808 1949.3
+745.69995 10407.4
+745.78693 1361.6
+745.84125 2473.0
+746.01056 3115.0
+746.09717 5053.3
+746.19519 7286.8
+746.33850 9048.2
+746.45679 1855.7
+746.52246 2837.1
+746.60309 4192.5
+746.68463 3636.8
+746.80292 8100.7
+747.02026 2349.9
+747.08466 2713.5
+747.13953 4831.2
+747.18817 2368.3
+747.30469 5317.6
+747.35760 3030.7
+747.48102 3663.4
+747.53271 3769.2
+747.57684 1902.0
+747.64716 4554.7
+747.71362 7390.1
+747.77826 31513.6
+747.86652 2053084.6
+747.95465 13224.9
+748.04297 4573.6
+748.08234 2423.5
+748.13690 3268.0
+748.21289 5242.6
+748.36700 1516770.5
+748.48157 4710.4
+748.54315 5116.2
+748.59747 4898.5
+748.64398 2151.0
+748.71338 5299.2
+748.75739 3495.2
+748.86731 851391.3
+748.94678 9874.1
+749.02490 1976.0
+749.05469 1245.8
+749.10071 4675.0
+749.21094 3021.3
+749.27039 2680.2
+749.36761 347004.4
+749.63586 5612.7
+749.72290 3637.8
+749.76611 2699.9
+749.86835 108190.6
+750.04608 11500.1
+750.14099 5128.5
+750.23193 2696.2
+750.36847 28622.8
+750.44489 1909.3
+750.54822 8117.1
+750.64331 2276.8
+750.72040 3063.7
+750.79974 1914.9
+750.86780 8299.7
+750.93896 1807.7
+751.04449 4197.1
+751.21606 1878.4
+751.36798 2048.5
+751.53503 2595.3
+751.87457 995.1
+752.85944 15264.2
+753.35999 10454.3
+753.85822 4838.7
+754.36127 1898.7
+756.84271 3302.3
+757.86414 1721.3
+764.35693 1467.6
+775.37128 19715.4
+776.37268 8135.3
+777.37213 3121.1
+779.86597 4655.1
+780.36395 2614.0
+788.37994 2459.3
+788.87109 2719.5
+789.37384 2018.1
+793.38062 66786.0
+794.38354 19356.1
+795.37543 10021.9
+796.38135 3599.4
+797.36908 1407.0
+800.39557 15755.0
+800.89679 12693.6
+801.40118 4627.1
+801.90997 1737.3
+804.40820 1209.2
+809.40161 19986.5
+809.90381 16950.4
+810.35986 9828.8
+810.42688 5329.5
+810.86804 9573.8
+811.37128 5145.5
+813.38599 26739.3
+814.38684 10629.9
+815.38940 2723.8
+831.39380 4812.4
+832.39771 1357.1
+841.41760 2974.3
+853.41742 1767.9
+859.42920 3428.4
+861.92285 15004.6
+862.42615 16664.5
+862.92639 8455.4
+863.42377 4400.7
+863.92224 1355.0
+874.44220 4078.6
+892.44940 79404.3
+893.45239 33304.3
+894.45105 12446.3
+895.45483 2990.3
+912.45367 9424.1
+913.46222 3646.7
+931.30261 1136.4
+954.51532 1129.4
+970.67188 1065.0
+972.51483 1794.8
+987.52148 3600.8
+988.53210 1243.1
+990.45050 1108.4
+990.49207 1065.0
+1005.53412 57618.3
+1006.53802 26811.3
+1007.53973 8935.9
+1008.54584 2274.9
+1041.49805 6780.8
+1042.49792 2960.9
+1059.50427 1021.8
+1091.48120 6756.3
+1092.48169 2921.8
+1118.61890 18631.9
+1119.62146 9983.4
+1120.61816 3416.4
+1121.62549 1179.8
+1132.54761 1919.7
+1140.12280 1028.9
+1188.00281 1174.7
+1198.06787 6237.1
+1219.58350 1327.2
+1247.57764 1477.7
+1248.59741 1153.9
+1278.65356 5627.0
+1279.65112 3102.9
+1301.58875 1245.8
+1313.05676 1084.2
+1330.60754 2084.4
+1331.60217 2606.6
+1348.61890 9626.8
+1349.61731 4596.3
+1366.64478 3053.9
+1489.70459 1342.1
+1667.09265 1049.1
+1760.82190 1012.1
+1776.93994 1299.8
+1821.32385 921.8
+1852.29260 1073.3
+1879.04346 1831.9
+1879.31946 2896.8
+1879.57397 33481.7
+1880.40283 1032.0
+1907.11133 13112.8
+1930.67920 1468.5
+S	2363	2363	861.850407933
+Z	2	1721.853
+Z	3	2582.276
+238.90364 63273.5
+244.61571 51986.2
+244.62503 52903.2
+249.20660 65693.0
+276.15469 77750.0
+280.19003 73385.2
+312.15558 88211.0
+324.76883 64043.3
+325.38678 60212.4
+325.49573 68506.9
+347.09558 71003.3
+350.29474 79527.5
+381.36526 67626.5
+386.23978 137363.9
+387.20557 266329.0
+389.14777 122294.5
+404.24887 438620.4
+411.21515 70649.5
+445.19135 102933.1
+493.20679 60385.5
+500.21704 91973.0
+502.22940 135638.6
+515.28052 234039.8
+518.22693 210429.3
+532.45215 252652.4
+533.29230 274732.0
+534.90808 77123.0
+549.16901 65972.7
+566.01709 60859.1
+569.26306 68689.5
+575.26440 180837.7
+585.26965 144416.9
+587.21027 165792.8
+592.65857 82282.4
+601.30011 87825.7
+603.27625 162261.3
+605.22046 283826.5
+609.28552 114041.0
+610.26318 72608.1
+611.25244 84951.3
+615.31793 86144.8
+629.25787 174036.8
+630.42053 81861.3
+639.82391 977010.4
+640.32617 682179.4
+640.82538 224272.4
+646.32538 98586.9
+647.18451 71387.5
+647.26868 163505.7
+664.33228 1537063.1
+665.33417 273936.2
+673.28015 109652.9
+676.66309 102947.4
+682.28870 102013.6
+682.88361 71871.5
+697.33704 512093.1
+697.84088 286740.3
+698.34320 120344.7
+700.29706 426115.4
+702.34711 126674.3
+716.36029 143040.0
+718.30774 443432.9
+719.31232 109111.4
+730.35205 73067.6
+731.12762 75431.7
+738.85944 211579.6
+739.35651 140589.6
+739.85992 80547.9
+746.34119 96906.0
+747.86096 1543533.5
+748.36237 985808.4
+748.86176 357429.0
+757.35321 94029.0
+775.36304 842582.6
+776.36877 232450.1
+793.37469 3007922.8
+794.37848 1037496.6
+795.36194 154137.0
+795.41406 143553.4
+795.65137 84340.0
+795.90222 209668.5
+796.90393 66756.1
+797.42853 75098.2
+804.40240 1503796.8
+804.90472 958931.3
+805.40790 417315.4
+805.90594 160507.2
+813.37939 564979.4
+814.38892 141873.9
+815.44598 68195.4
+816.91174 99203.4
+831.39117 624736.4
+832.39417 262405.5
+839.89752 78249.6
+843.90680 127571.4
+844.40460 189283.2
+887.24847 75911.9
+892.44244 1669740.9
+893.44458 741753.9
+894.44836 302351.3
+912.44861 251543.7
+913.45099 78547.3
+930.45349 334025.9
+931.46136 85706.1
+987.51379 139295.9
+1005.52747 2857783.3
+1006.52905 1380511.6
+1007.53040 335869.0
+1041.49304 136140.6
+1057.28113 122612.1
+1059.49988 218681.5
+1118.61157 1025838.3
+1119.61536 664316.1
+1120.61768 168419.3
+1132.53345 83814.9
+1188.01074 73965.3
+1190.54199 121317.4
+1198.00476 353439.5
+1206.83240 60741.2
+1278.64001 799584.3
+1279.64075 389782.4
+1280.63635 200785.4
+1319.58545 182872.9
+1375.66211 79677.4
+1376.64526 107004.6
+1393.67102 527295.4
+1394.66748 419161.4
+1395.67029 166262.2
+1494.72021 318111.9
+1495.71863 211226.3
+1558.70703 113798.5
+1559.67468 71080.9
+1576.72290 320939.5
+1577.73059 192159.6
+1578.72510 152138.4
+1595.73474 109715.2
+1860.10779 63353.4
+1878.81738 218224.2
+1879.60754 1970551.0
+1879.87952 250248.7
+1880.38660 176739.4
+1881.43555 81116.1
+1907.10559 777585.4
+1930.66077 128236.2
+1956.99207 72101.5
+1987.20032 73931.0
+S	2365	2365	1879.9338246
+Z	3	5636.526
+Z	2	3758.02
+514.70435 599.5
+532.46191 1801.5
+603.53424 737.5
+637.25580 605.6
+640.20923 693.0
+676.64978 1002.7
+731.14032 838.5
+795.64404 816.5
+822.82751 608.9
+857.55164 690.1
+1188.10352 907.4
+1198.03320 3367.1
+1525.47705 681.0
+1564.94507 733.4
+1744.09973 584.2
+1777.04724 832.3
+1797.55518 567.2
+1879.00134 1248.4
+1879.56689 19926.8
+1880.20825 1068.1
+1883.56384 741.5
+1907.10815 7244.3
+S	2366	2366	1293.1288246
+Z	4	5168.484
+360.38046 619.2
+366.87119 610.1
+385.39789 561.7
+413.14050 531.5
+427.58368 778.2
+433.30267 585.7
+482.69998 903.5
+498.96185 698.3
+523.85901 762.3
+532.44104 1673.1
+633.76727 799.0
+662.77161 649.8
+728.32971 585.3
+781.34985 732.9
+795.65125 826.9
+817.83936 706.4
+858.12878 764.6
+926.34875 616.7
+1019.72662 891.4
+1119.76685 720.8
+1197.98340 3324.1
+1200.63342 639.9
+1252.48047 730.7
+1363.37756 628.3
+1598.89343 705.1
+1679.02637 635.1
+1722.83301 749.5
+1723.32654 1170.9
+1870.28821 998.1
+1878.01184 655.9
+1878.30212 687.6
+1878.83081 810.7
+1879.46277 18830.5
+1880.84448 761.7
+1907.09937 7410.8
+1907.42456 750.4
+1973.67419 629.0
+S	2367	2367	1293.8808246
+Z	4	5171.492
+363.15097 616.9
+375.91293 713.5
+412.38785 578.4
+452.96805 748.1
+459.81818 684.1
+460.64774 625.4
+462.72739 617.4
+497.75583 617.6
+532.44037 1820.3
+563.34064 622.1
+572.78015 633.3
+593.91321 648.7
+617.58734 650.6
+655.81940 667.9
+676.66010 974.9
+685.52490 634.4
+795.65540 1109.9
+909.44360 694.2
+955.11121 600.1
+1057.27441 745.3
+1059.90674 563.9
+1188.21362 1048.8
+1197.99170 3764.1
+1226.96130 789.9
+1427.25562 813.0
+1441.57239 642.4
+1459.01758 681.6
+1508.49304 656.9
+1681.81042 613.4
+1708.07617 774.5
+1722.81921 795.3
+1723.34204 1115.7
+1723.83228 2131.2
+1724.31055 1747.9
+1724.82349 2110.9
+1777.04211 1006.7
+1875.00903 773.3
+1877.85754 870.0
+1879.28271 2678.7
+1879.57825 19684.0
+1879.88000 2245.2
+1881.75903 682.8
+1907.11035 6730.3
+1907.39600 1281.9
+1930.60706 1036.9
+1943.70813 707.1
+1984.80090 752.3
+S	2369	2369	1879.9885746
+Z	2	3758.129
+Z	3	5636.691
+532.45264 1967.6
+534.54193 527.1
+676.65198 951.0
+781.17908 695.2
+795.65814 1105.0
+875.21747 592.5
+926.53009 779.2
+1007.28802 652.9
+1035.48047 683.8
+1057.25122 934.7
+1172.32324 682.2
+1198.00671 3457.3
+1776.90002 688.1
+1877.14343 728.4
+1877.74158 655.5
+1878.52808 1724.7
+1879.11609 2676.9
+1879.30249 3892.0
+1879.56311 18383.3
+1880.26978 2096.4
+1907.04675 7450.1
+S	2370	2370	576.0888246
+Z	2	1150.33
+Z	3	1724.991
+145.32826 51574.5
+152.39351 63166.9
+156.06300 56675.3
+160.38899 50849.6
+163.47838 76171.4
+168.63885 68857.5
+175.72818 56028.3
+175.74371 60453.6
+180.51509 61607.3
+183.11261 361125.3
+186.36234 73140.1
+188.24760 142189.4
+188.26787 123360.9
+188.28371 147241.3
+188.29402 140116.1
+188.30608 150982.9
+188.31902 117229.9
+198.91510 84876.1
+199.26181 56080.3
+199.28252 218003.5
+199.28920 208709.0
+199.30838 61909.6
+199.32281 73591.9
+199.38043 85794.9
+199.38866 73110.7
+201.12325 3606437.3
+202.12646 259729.5
+211.10773 125194.3
+220.70119 58681.7
+229.11806 572585.9
+240.13510 91226.1
+258.14594 146200.3
+266.14975 489152.4
+267.15353 72694.5
+276.15570 84153.7
+284.16010 307769.9
+294.14502 84818.7
+308.90616 64548.2
+312.15451 311612.8
+330.16544 375127.8
+332.66949 325765.4
+333.17276 75033.8
+334.49960 53219.3
+350.28400 74152.9
+386.23962 96750.6
+388.18570 564643.6
+388.68777 233628.9
+389.18695 66191.2
+397.19128 359311.3
+397.69174 112065.0
+404.24954 480931.6
+409.17273 161819.9
+427.18198 139058.5
+427.54797 66535.0
+446.72540 953942.9
+447.22717 382424.6
+447.72507 169005.9
+456.72824 188435.0
+482.66107 63505.7
+483.54922 71840.6
+486.90512 114003.8
+487.23386 92452.1
+489.03995 53798.8
+492.90631 2247368.5
+493.24112 1508838.6
+493.57413 704442.6
+493.90897 246638.0
+494.24875 65050.7
+498.91028 356180.8
+499.24469 413682.8
+499.57581 131907.5
+499.91165 86919.7
+503.26691 317649.6
+503.76764 160621.2
+504.27054 81162.1
+515.28241 126344.6
+518.22815 97535.9
+521.24939 160124.7
+528.55780 55310.2
+530.60107 1707181.9
+530.93536 1061034.9
+531.26776 498189.6
+531.60229 200592.8
+532.40094 96109.9
+532.44385 147239.5
+533.29272 499819.3
+534.29449 124651.2
+536.60425 304474.6
+536.93878 301197.2
+537.26984 152971.6
+539.93146 86360.9
+540.58069 229064.1
+540.91333 199763.3
+541.57959 71245.6
+548.27295 76567.5
+548.59747 74736.4
+548.93616 101911.2
+549.15826 54894.3
+549.26709 75873.8
+556.93616 312333.2
+557.26508 1310504.0
+557.59930 1044647.6
+557.93262 664384.4
+558.26624 276403.2
+558.59943 97466.5
+559.80981 431945.7
+560.31061 297104.0
+560.80731 70067.9
+563.96936 60340.2
+587.20868 92561.9
+595.64453 60460.0
+612.52942 51892.3
+629.26050 137953.2
+630.41968 71860.8
+638.50366 61376.6
+639.82434 1945597.4
+640.32587 1307429.6
+640.82635 524053.0
+641.32660 222314.9
+646.32330 101431.7
+664.33289 1102293.9
+665.33710 412869.1
+665.49048 67778.9
+666.33252 126166.7
+668.91736 59516.9
+676.65228 113192.8
+682.28564 432317.7
+683.30493 80131.1
+683.41559 61079.3
+688.33026 69017.0
+688.83234 91924.2
+697.33771 7692357.5
+697.83911 5287538.0
+698.33966 2643888.8
+698.83929 919744.4
+699.33887 226773.7
+700.29669 643976.8
+701.30115 252328.8
+729.84753 73106.6
+738.85724 1301355.8
+739.35858 817090.3
+739.85895 409951.0
+740.36060 228165.8
+743.84534 76175.1
+745.33636 59928.2
+745.70770 179940.5
+746.20538 131500.1
+746.25562 79134.9
+746.70459 89920.2
+746.80066 188306.5
+747.29742 125206.7
+747.86212 42198344.0
+747.95587 169944.1
+748.36261 32350912.0
+748.86261 17018200.0
+748.94098 204255.0
+749.29449 74795.9
+749.36346 6377663.5
+749.45099 135106.8
+749.86224 1957096.3
+749.95313 69189.1
+750.02399 179095.2
+750.36249 346591.4
+750.52686 123188.5
+750.85608 71192.2
+751.03625 88548.1
+752.85248 472702.0
+753.35388 394921.3
+753.85956 211547.5
+754.36108 103738.5
+770.85455 227167.4
+771.34985 168919.5
+771.84698 98024.3
+775.36383 395509.1
+776.37152 89332.7
+779.86005 424712.0
+780.35901 309106.3
+780.85779 209517.9
+781.35846 126563.9
+788.37366 189795.7
+788.86884 245851.6
+789.36707 298916.4
+789.86621 128699.1
+793.37451 1685808.1
+794.37750 615045.8
+795.36963 957547.6
+795.65283 123066.7
+796.37122 426235.3
+796.86755 69700.0
+797.36682 84413.6
+800.38971 1241709.8
+800.89227 940758.1
+801.39539 464255.8
+801.90070 191061.8
+809.39490 539041.6
+809.89771 375029.2
+810.36316 1627563.5
+810.86768 1069515.8
+811.36816 612613.1
+811.87085 208777.1
+812.37524 68581.8
+813.38080 1463335.6
+814.38287 662012.1
+815.38550 127581.3
+816.37695 63669.1
+832.38910 69473.1
+892.44244 780356.1
+893.44611 319766.4
+894.43951 508205.8
+895.43872 234684.8
+912.45038 559089.9
+913.45618 230825.7
+1005.53448 75219.4
+1018.63281 62967.1
+1023.48688 188609.1
+1024.47998 117743.3
+1041.49011 324887.2
+1042.50049 187309.0
+1086.68628 55480.5
+1161.42395 60388.5
+1175.37134 58701.9
+1188.28687 93015.2
+1197.56921 60396.0
+1197.89429 292186.5
+1198.03894 151399.2
+1204.69666 61253.4
+1213.78479 71355.9
+1301.58142 135601.0
+1302.58044 85657.2
+1525.44775 78712.1
+1598.35559 56083.9
+1755.43860 60017.0
+1870.31885 95650.1
+1878.45007 109971.1
+1879.11865 118749.5
+1879.55847 1984117.3
+1879.83984 176637.9
+1880.69519 112309.1
+1907.07471 735549.1
+1907.41663 67436.5
+1909.20593 64635.8
+1930.62598 90587.8
+S	2371	2371	1292.6284646
+Z	4	5166.48256
+350.30347 787.7
+427.54178 789.1
+448.33521 619.1
+532.47241 1664.8
+534.01178 685.1
+549.14307 1014.8
+557.75281 671.0
+605.19897 634.8
+630.40179 976.6
+676.64612 1234.1
+731.11670 681.0
+732.14429 654.8
+795.66260 1164.4
+849.30078 607.7
+862.30127 691.4
+1198.05579 3227.8
+1379.83264 643.7
+1633.03601 673.7
+1722.91650 685.0
+1723.28687 884.3
+1723.82422 1779.4
+1878.42981 1256.8
+1878.91833 1130.6
+1879.55469 19945.5
+1879.83057 2476.8
+1880.71655 934.7
+1881.51807 746.8
+1907.18201 7637.6
+1907.49597 800.5
+1930.57910 975.8
+S	2373	2373	863.460241267
+Z	3	2587.105
+Z	2	1725.073
+240.13486 1014.1
+246.12733 1491.4
+253.62177 549.1
+255.11426 705.2
+258.14548 3601.4
+259.15057 689.9
+261.04782 567.6
+269.18634 988.1
+274.12296 943.0
+276.06461 1169.7
+276.15616 4033.6
+277.06998 910.1
+284.15979 922.3
+286.10361 2079.7
+294.14337 759.9
+296.19659 778.6
+298.13977 2004.9
+302.93021 604.0
+307.53122 630.0
+312.15573 2919.4
+313.16034 856.3
+330.16672 2541.4
+342.20261 839.5
+343.97736 686.0
+350.29791 611.9
+351.16623 916.9
+359.10275 1430.9
+359.62070 621.8
+360.10034 591.8
+362.47507 610.2
+365.01199 707.4
+367.75952 762.8
+369.17740 1855.7
+370.18234 774.7
+371.19247 1019.1
+372.12433 853.0
+377.11316 2949.9
+378.11215 723.5
+381.17688 2278.1
+386.24014 4851.8
+387.20578 10598.9
+387.24332 1109.2
+388.20880 1888.1
+389.14905 7112.6
+389.18723 2336.4
+390.14902 1609.9
+397.23950 696.9
+399.18683 2273.8
+404.25043 17423.0
+405.25369 3993.2
+407.22720 859.8
+409.17191 2048.0
+410.16534 560.1
+411.22287 1581.6
+420.93088 686.6
+425.23816 1024.5
+427.18124 4756.1
+428.18793 894.7
+437.53143 579.0
+444.21002 1353.4
+445.19321 4227.4
+446.19397 728.6
+448.31036 594.4
+449.23712 657.7
+455.67999 604.1
+458.27853 907.3
+460.39957 762.6
+462.22064 1044.6
+462.43256 641.4
+467.24951 1050.1
+469.25229 657.5
+472.18665 2681.3
+473.19012 831.7
+474.12576 1234.5
+474.23602 739.3
+476.24933 956.8
+477.23370 1403.4
+478.19397 1228.2
+482.20895 975.0
+486.27393 1712.5
+489.20029 2095.1
+490.19772 3783.0
+491.19861 1023.1
+492.14380 782.2
+494.26123 3361.1
+495.23904 1359.1
+496.20135 1948.6
+497.18130 796.3
+497.20920 1000.2
+500.18188 923.8
+500.21756 3277.8
+502.23334 6549.8
+503.23904 2148.4
+504.17734 1854.6
+512.27191 1469.7
+513.25616 1836.8
+515.28125 8401.3
+516.28595 1890.2
+518.22772 7740.8
+519.23267 2457.2
+520.00360 590.4
+522.25641 2470.4
+524.30981 1046.0
+532.43079 1364.3
+533.29333 14331.4
+534.29694 4084.5
+536.24005 1039.0
+539.28296 680.3
+549.15973 812.2
+558.25006 1376.1
+559.21960 1124.6
+559.80951 809.7
+569.20276 2589.2
+575.28119 1812.5
+581.30060 808.6
+582.27509 1976.6
+585.27032 6233.6
+586.27850 1861.7
+587.21332 7976.8
+588.22400 1291.6
+591.27673 1247.4
+593.26093 672.7
+599.31976 650.2
+601.30048 3142.1
+602.28314 2070.8
+603.27972 9230.0
+604.28339 3105.9
+605.22382 6621.4
+606.22632 2125.8
+607.34015 805.9
+609.28809 7093.5
+610.30225 1938.3
+611.24664 2231.3
+612.24945 1077.4
+615.31696 2261.9
+617.28595 2577.2
+627.29895 2356.7
+628.31512 901.9
+629.25946 8971.4
+630.26434 2773.0
+630.41388 789.4
+630.82251 947.8
+631.31329 2991.2
+631.81628 1334.5
+639.82471 43861.2
+640.32642 29060.8
+640.82642 13186.3
+641.32709 3620.8
+641.83301 696.4
+646.32465 4792.5
+647.27081 5764.4
+647.32440 1027.6
+648.27222 1957.2
+656.26697 789.5
+664.33313 57379.2
+665.33594 21005.1
+666.33411 5889.4
+667.33246 1608.7
+671.33942 1214.5
+672.30542 1795.6
+673.27856 2243.1
+674.28735 1188.4
+676.64056 759.0
+682.28693 4172.6
+684.33789 3699.5
+688.33710 1389.4
+690.31403 947.4
+697.33807 19659.6
+697.83984 14518.5
+698.34479 5872.7
+698.83777 2903.9
+699.34937 894.0
+700.29724 17358.5
+701.30573 5019.1
+702.34460 4714.3
+703.35260 1712.2
+714.38568 909.7
+716.36438 4425.2
+717.37170 1662.2
+718.30713 18538.2
+718.37201 787.0
+719.31073 6580.3
+720.30945 1442.6
+722.37421 1181.5
+726.35248 1042.1
+727.36713 938.1
+728.33057 3581.3
+729.33160 1883.7
+729.84753 1070.1
+730.34998 3317.3
+731.35486 1381.9
+732.93494 600.8
+738.85754 7870.6
+739.36053 5408.5
+739.85797 3240.0
+740.35181 955.2
+746.33826 7208.8
+747.34058 1991.1
+747.86261 55202.1
+748.36389 41596.2
+748.86426 21198.1
+749.36536 7497.1
+749.86475 2350.3
+752.84607 739.1
+757.35663 4092.1
+758.25403 760.1
+758.35651 1154.6
+764.35132 1709.3
+770.40906 719.1
+775.36536 38964.2
+776.36902 17799.5
+777.36536 5414.5
+778.36755 1131.0
+781.07776 1231.7
+786.36200 1076.4
+787.37970 1092.7
+793.37622 121708.1
+794.37891 51940.2
+795.37457 15647.7
+795.66229 967.7
+795.89996 8028.5
+796.37408 3625.6
+796.90356 1292.5
+797.42303 2492.5
+798.42719 898.3
+799.36798 2976.2
+803.19482 662.2
+803.39703 2253.4
+804.40393 57897.7
+804.90552 42566.9
+805.40540 23051.7
+805.90747 8115.6
+806.40741 3113.0
+807.40967 672.9
+809.40686 990.5
+813.38123 20383.1
+814.38385 7326.9
+815.41467 4030.0
+816.35681 775.1
+816.91559 2460.6
+817.37738 2913.0
+819.37927 751.2
+821.44366 942.5
+822.26929 885.2
+822.40344 1469.2
+822.89496 736.1
+830.90063 908.3
+831.39124 25741.9
+831.90973 1059.4
+832.39484 10342.9
+833.39362 3574.6
+835.40228 926.1
+835.90027 709.4
+839.91150 810.9
+841.41156 3529.0
+842.41180 2184.3
+874.43268 2951.8
+875.44733 1065.9
+877.42676 873.7
+885.45062 1226.3
+886.45465 800.1
+892.44397 80709.3
+893.44739 40940.7
+894.44617 17285.6
+895.44849 5228.8
+896.45190 898.7
+912.44891 10603.3
+913.45111 4694.3
+914.44775 1427.4
+915.45721 765.5
+924.41968 703.5
+926.46289 973.5
+928.39880 667.0
+930.45972 13299.1
+931.46136 6593.1
+932.46863 1635.8
+933.35126 638.8
+933.44006 1011.0
+936.06531 897.7
+936.53632 691.2
+938.36334 751.6
+942.42078 919.8
+944.46490 1295.3
+946.41492 2026.8
+955.50110 746.6
+956.23175 662.1
+960.43726 1432.7
+962.43091 1623.6
+972.49939 2248.7
+973.51703 915.1
+987.51611 7618.9
+988.52106 4991.0
+989.52502 1925.3
+990.42859 951.6
+990.51636 982.7
+1002.76575 667.8
+1005.52820 117237.3
+1006.53101 69569.9
+1007.53156 26997.0
+1008.53210 9024.6
+1009.54120 1644.6
+1019.73590 892.0
+1023.48248 1020.1
+1031.53333 666.2
+1041.49402 5498.6
+1042.49475 3024.6
+1043.50122 924.6
+1059.50122 10386.1
+1060.50562 4754.8
+1061.50220 2251.6
+1074.47217 725.3
+1091.48108 1001.9
+1100.60840 2055.9
+1101.60291 2016.6
+1102.57849 673.9
+1118.61133 43688.9
+1119.61548 30500.3
+1120.61572 11810.2
+1121.61560 4006.6
+1122.61707 882.7
+1132.54053 2386.3
+1133.53918 1304.1
+1150.87073 642.7
+1172.52893 1655.1
+1173.53699 1030.5
+1190.54370 5161.6
+1191.53784 2547.8
+1192.54712 1323.1
+1197.96948 2758.2
+1247.56958 1333.1
+1257.73950 664.7
+1260.62610 1781.8
+1261.61841 3138.8
+1262.62097 2222.3
+1263.62366 805.7
+1278.64172 33636.1
+1279.64563 25678.8
+1280.64551 12410.3
+1281.64233 5401.1
+1282.65137 1152.1
+1283.88977 676.0
+1301.57568 2020.5
+1302.57813 1599.0
+1303.57556 744.0
+1319.58179 5528.2
+1320.58911 4590.0
+1321.59009 2169.3
+1348.61304 2935.5
+1349.61389 2275.4
+1350.61096 915.3
+1351.61804 1192.7
+1375.66626 2178.6
+1376.65405 1679.6
+1393.67053 22409.8
+1394.67163 20329.7
+1395.67102 10860.5
+1396.67346 4611.4
+1397.67041 1523.4
+1447.66907 1047.2
+1448.63745 1180.6
+1462.67920 889.6
+1476.71851 1215.4
+1477.70288 959.1
+1478.71387 815.1
+1494.71692 11928.6
+1495.72083 11206.3
+1496.72205 6829.1
+1497.72339 2910.0
+1498.72839 1258.7
+1525.43811 901.5
+1558.71533 5502.3
+1559.71045 4414.3
+1560.70740 1869.0
+1561.70300 912.6
+1576.72119 14340.7
+1577.72375 12975.1
+1578.72632 6603.4
+1579.72827 3125.5
+1594.73279 4402.2
+1595.73804 4047.1
+1596.74280 1896.9
+1597.75708 1137.8
+1642.99231 926.8
+1776.89978 758.2
+1870.34766 708.9
+1879.00879 948.9
+1879.53418 20053.2
+1879.79822 3246.3
+1880.03577 782.1
+1907.10132 6967.9
+1915.64026 894.4
+S	2374	2374	575.983407933
+Z	3	1724.675
+Z	2	1150.119
+149.31693 56881.8
+155.07140 64160.7
+156.24094 64945.0
+165.45149 74053.7
+165.76749 87331.3
+167.11229 62801.7
+173.75793 69112.4
+183.11337 90292.8
+188.25703 158250.4
+188.27664 220317.3
+188.28972 220338.6
+188.31277 212828.5
+188.33301 90218.3
+198.91618 85545.5
+199.22340 77702.7
+199.26363 116712.1
+199.28458 121673.6
+199.29428 224161.2
+199.30663 108945.3
+199.32759 127100.9
+199.34351 86392.9
+199.39339 66847.3
+199.42612 60785.2
+201.12323 1415720.3
+202.12651 123650.2
+224.54039 69759.9
+229.11775 180992.3
+263.22845 64997.7
+266.14993 227462.4
+271.62292 77337.8
+280.50336 72505.1
+284.16025 175062.8
+308.90372 86738.1
+312.15509 119480.7
+330.16458 89792.1
+388.18564 221865.9
+397.19147 152843.3
+404.25061 220853.9
+446.72604 277491.7
+447.72830 70886.9
+482.50494 75693.4
+489.34869 67098.8
+492.90665 678740.9
+493.23984 549265.3
+493.57315 298906.4
+496.47037 60817.2
+498.90768 127913.4
+503.26492 109353.3
+529.18945 64352.1
+530.60034 584944.4
+530.93463 282213.6
+531.26733 184696.6
+532.45453 245595.2
+533.29077 93970.0
+536.93713 90953.0
+557.26447 299563.3
+557.59967 365682.2
+557.93683 91150.5
+558.26538 93809.2
+559.80811 117220.2
+561.22430 72671.9
+562.93933 3167084.0
+563.27295 2473175.5
+563.60681 1074162.6
+563.94092 180894.1
+606.42078 69706.9
+613.87561 76639.8
+639.82373 471283.1
+640.32446 362679.9
+640.82581 208678.8
+664.33276 253495.4
+676.63922 97517.6
+697.33752 2524677.5
+697.83844 2090992.4
+698.33954 811391.4
+698.84119 238959.2
+700.29547 184403.9
+701.29352 84710.1
+717.33051 72462.0
+738.85681 628668.8
+739.35693 273371.8
+739.85345 129618.9
+747.86157 14670193.0
+748.36224 11213922.0
+748.86279 6048139.5
+749.36285 1777912.5
+749.86890 119291.5
+752.85400 182219.0
+753.35571 195883.4
+771.34467 81202.7
+775.36316 108306.9
+779.85925 135601.6
+780.36090 132793.6
+793.37408 389615.3
+794.37402 132489.5
+795.36188 111981.9
+795.65460 113796.6
+800.39203 464769.6
+800.89301 364304.8
+801.39398 184669.2
+809.39270 98925.9
+809.90051 196192.0
+810.36169 434659.8
+810.86646 327994.6
+811.36829 254022.1
+811.86627 115224.5
+813.37878 396079.1
+814.37878 169116.4
+833.39618 71666.4
+892.44501 100850.9
+912.44604 179504.1
+913.46246 116921.3
+914.44891 67771.9
+978.90875 63534.0
+990.67969 63147.7
+1041.49158 138068.7
+1057.98889 68593.6
+1079.44031 73941.3
+1100.46045 74567.9
+1132.27087 73747.5
+1198.01624 369598.1
+1254.58411 67808.3
+1640.22839 69864.3
+1879.15112 176769.6
+1879.54138 2256148.8
+1879.98438 137135.5
+1880.30701 120771.2
+1907.07458 822140.8
+1930.62231 110122.2
+S	2375	2375	575.438991267
+Z	2	1149.03
+Z	3	1723.042
+161.28590 48683.8
+168.49524 53426.2
+171.63704 88400.9
+176.37045 52161.8
+177.06998 49293.3
+183.11212 131357.5
+188.25475 56136.8
+188.27202 136556.7
+188.28079 122555.0
+188.29218 95977.9
+188.30367 94957.2
+188.31288 70761.8
+193.32506 46330.6
+198.91838 78607.8
+199.19235 61357.4
+199.20813 46874.5
+199.28877 154614.4
+199.29919 167382.6
+199.30544 127603.3
+199.32034 117061.8
+199.33423 46932.4
+201.12318 1321432.5
+202.12595 137012.6
+229.11800 213212.8
+232.35670 51705.3
+240.13376 52182.5
+242.41167 60082.8
+266.14932 207065.7
+284.16022 133599.9
+306.77383 56768.3
+312.15540 123808.7
+330.16483 79647.6
+332.66946 97736.5
+367.75082 59137.1
+388.18634 186201.4
+388.68811 78440.8
+397.19138 220174.1
+397.69315 75804.6
+404.24954 221806.5
+427.52567 62273.5
+446.72498 347617.5
+481.78461 49736.2
+492.90604 906290.4
+493.24121 595707.9
+493.57495 285198.8
+493.90289 61476.1
+498.90897 158407.3
+499.24487 82482.7
+503.26740 105600.6
+515.20117 46949.1
+528.88239 57248.0
+530.60052 586503.4
+530.93414 413099.6
+531.26990 224109.9
+532.47693 182543.3
+533.28955 163314.4
+536.60474 61170.8
+536.94031 68412.7
+540.57709 143624.6
+540.91382 77795.9
+548.93640 60763.2
+549.13580 63374.1
+556.93707 126777.8
+557.26556 508498.5
+557.59845 483256.0
+557.92981 280639.5
+559.80670 135553.2
+560.31030 154502.9
+562.93970 1286116.5
+563.27362 817697.6
+563.61121 171832.7
+599.17810 58324.0
+637.54303 53588.9
+639.82355 764376.3
+640.32544 545105.1
+640.82581 262036.0
+664.33221 410408.5
+665.33282 110261.0
+676.65637 105209.0
+682.28113 62598.0
+697.33759 2999315.0
+697.83923 2039197.3
+698.33966 935067.3
+698.84106 265782.8
+700.29565 224954.5
+701.29822 82626.3
+738.85718 543552.4
+739.35846 317736.0
+739.85828 156162.0
+745.71600 70709.7
+746.79901 69541.7
+747.29407 76339.4
+747.86176 16765517.0
+748.36237 12088874.0
+748.86279 6279650.5
+749.36334 1512132.4
+750.02875 88458.4
+750.46429 48901.5
+750.51855 65786.9
+752.85162 246679.8
+753.35529 222041.1
+753.85321 85768.8
+770.85944 83589.4
+775.36737 104421.4
+779.85834 196989.4
+780.36230 95293.3
+782.42407 61157.4
+788.37408 77807.1
+788.87469 105973.8
+789.36700 135001.0
+793.37433 567311.8
+794.37439 155457.1
+795.37061 236079.7
+795.66718 97666.6
+796.36188 72793.6
+797.36322 64232.2
+800.39111 414972.2
+800.89105 475449.7
+801.39722 148970.6
+809.39435 257836.0
+809.89075 101291.0
+810.36401 459121.1
+810.86865 386222.7
+811.36847 199256.1
+813.37970 540541.8
+814.38043 233856.3
+815.38623 77392.4
+848.15656 58660.6
+892.44434 337120.7
+893.44952 104400.8
+894.44391 128429.5
+895.44849 102956.2
+912.45154 244184.7
+972.57092 48424.7
+972.64691 46817.6
+973.27728 54396.9
+1023.32574 57017.2
+1041.49182 124853.6
+1122.77002 53563.5
+1133.00146 53488.5
+1188.31055 53708.3
+1198.07104 287182.7
+1244.96484 54499.6
+1372.60718 48381.6
+1770.43250 52240.7
+1877.74841 62819.3
+1879.07141 181299.9
+1879.26819 171929.9
+1879.57703 1765774.1
+1880.13245 171125.8
+1880.58167 83628.2
+1907.04639 640638.4
+1907.34265 54274.3
+1918.95569 83275.6
+1930.55029 88328.9
+S	2377	2377	1879.94540793
+Z	2	3758.043
+Z	3	5636.561
+526.89557 600.2
+532.45850 2154.2
+638.91583 681.9
+676.66119 805.3
+695.64685 621.1
+810.76373 641.1
+1198.02783 3717.1
+1477.68225 714.0
+1605.89722 766.4
+1652.23621 689.4
+1870.22119 577.2
+1878.27649 835.0
+1878.63196 1090.5
+1879.11414 2079.1
+1879.59998 18463.6
+1880.02075 1937.9
+1880.19812 1469.6
+1880.50281 831.5
+1898.59387 663.8
+1906.63232 1046.4
+1907.02979 7302.3
+1930.68445 961.9
+1942.18506 632.1
+S	2378	2378	516.5410021
+Z	4	2062.13271
+131.97369 886.0
+182.78758 954.6
+183.22198 956.4
+185.48734 937.2
+188.21709 1243.9
+188.23764 880.4
+188.24983 1993.5
+188.26512 3085.5
+188.27736 3808.6
+188.28963 3428.1
+188.30247 3663.7
+188.31844 2355.0
+198.91801 1126.4
+199.19041 1381.3
+199.20389 1380.1
+199.28717 1906.6
+199.30206 3587.9
+199.31282 2474.9
+199.39954 1258.1
+201.82985 910.0
+244.92714 1053.9
+248.06270 963.4
+250.33937 1160.9
+250.61557 912.9
+260.35590 912.6
+271.55795 949.8
+272.17102 1832.3
+278.71182 990.4
+286.15390 1325.4
+297.01569 1208.9
+313.00266 1041.5
+319.17194 2489.0
+323.45334 1009.1
+334.03186 1045.7
+336.20764 1347.0
+336.70581 986.6
+350.20493 2970.4
+351.21252 2401.9
+355.55060 967.2
+369.22379 56403.5
+370.22842 6115.0
+383.19714 5036.8
+399.23822 5610.4
+409.24588 2202.8
+419.70340 1438.0
+427.71872 1463.3
+429.24701 14030.0
+429.74823 7488.1
+432.99594 928.4
+438.25211 8533.9
+438.75287 5920.7
+439.73950 3096.2
+440.24118 1202.1
+451.22913 7826.7
+452.23169 1894.9
+455.24713 6864.7
+455.58102 6278.4
+455.91846 1541.1
+458.07776 945.2
+466.23978 2431.1
+474.60544 1284.3
+482.30725 7889.4
+483.31284 1633.2
+484.25613 1843.8
+490.26248 6974.3
+490.76273 3908.6
+496.19864 1137.4
+497.26913 1670.4
+499.28482 1946.8
+501.23602 5739.9
+501.73767 2059.7
+527.61267 2000.0
+527.94629 1433.2
+532.47296 3381.6
+534.96960 5654.8
+535.30371 4296.0
+535.63562 2170.8
+537.79932 4453.6
+538.29962 2838.4
+538.86432 1170.9
+545.52271 998.2
+546.80585 4306.0
+547.30664 2819.1
+549.74170 1558.1
+553.30511 1332.2
+555.97327 1540.8
+556.31177 3444.3
+558.75024 9443.3
+559.25110 3580.4
+559.75250 2234.1
+560.25281 1205.4
+564.31091 3937.8
+565.30670 7073.8
+565.64105 7182.4
+565.97424 4981.5
+603.78485 1365.3
+612.36371 6716.4
+612.66205 3336.6
+612.99402 2450.7
+613.37524 1733.3
+615.29089 1374.1
+615.78943 1162.7
+661.97632 953.4
+662.60699 1043.4
+665.36060 7104.8
+666.36395 3492.2
+668.33417 14922.8
+669.33789 5043.1
+682.36554 17591.8
+682.55304 852.1
+682.86743 13357.7
+683.37091 6327.9
+694.31427 1045.0
+699.40192 5290.5
+710.89862 1614.8
+711.40070 2375.8
+725.87939 2334.4
+726.38782 2116.0
+745.40997 17120.8
+745.91125 16621.1
+746.41205 5967.5
+761.42615 941.7
+781.90955 2108.1
+782.40918 2541.0
+790.91486 33390.3
+791.41595 28311.0
+791.91693 11431.8
+792.42126 1944.3
+795.66748 1262.1
+847.45715 5288.8
+847.95844 5218.4
+848.46436 1386.5
+882.43909 1080.2
+898.97620 1086.2
+1020.93121 1005.9
+1059.49707 1241.6
+1198.05481 5483.9
+1247.39807 1216.8
+1356.12524 1042.8
+1505.82288 1068.2
+1776.94641 1299.3
+1802.68237 1252.4
+1870.22327 1555.9
+1877.66174 1547.5
+1878.80908 1148.3
+1879.16882 3591.8
+1879.50525 33087.9
+1879.88269 3027.7
+1880.34460 1746.9
+1882.16455 1107.2
+1906.98267 12509.0
+1930.55640 1886.3
+S	2379	2379	548.5318471
+Z	4	2190.09609
+154.98831 8272.2
+156.59218 8123.2
+158.23216 7634.6
+159.97333 8943.2
+163.34518 7899.2
+168.50256 8583.6
+169.49222 7429.0
+175.01952 8340.7
+175.82854 6899.3
+176.37810 7827.7
+188.26241 12598.1
+188.27065 14963.6
+188.27895 13199.5
+188.29240 16084.2
+188.30450 9700.4
+188.31754 8471.0
+188.32629 9523.0
+191.59737 7122.3
+194.04492 7684.1
+199.25696 16129.8
+199.28488 12771.7
+199.29697 37532.3
+199.32127 21053.2
+214.51839 9199.5
+221.36635 8151.6
+223.51888 7279.3
+239.35088 8763.1
+277.14456 47700.7
+287.49774 8473.2
+292.95767 8416.5
+303.35544 8869.1
+320.90753 9672.4
+331.44012 8485.7
+338.53961 9564.2
+339.55814 8827.3
+340.71463 8398.5
+341.50000 9080.9
+359.17023 17629.0
+364.44662 8493.7
+367.68411 26788.9
+376.68881 23945.5
+381.36230 10002.5
+381.68060 13007.8
+387.20184 15072.5
+409.65942 8787.1
+416.23535 11135.5
+416.70334 9689.8
+421.71088 9002.0
+427.54678 9577.8
+429.72760 16767.7
+436.75790 8108.2
+456.22696 17760.0
+470.91284 235822.0
+471.24701 174533.1
+471.58112 66974.5
+471.91492 18207.2
+482.32608 7634.2
+483.73395 23130.1
+483.98416 22753.9
+487.98956 43166.4
+488.24149 35825.2
+488.49335 20743.4
+488.74609 10395.5
+499.77292 8492.0
+501.24384 12661.5
+503.27255 7867.8
+513.93066 9520.1
+519.26385 9787.4
+519.93512 95390.8
+520.26996 61703.1
+520.60468 36923.6
+520.93738 13950.9
+531.60040 10332.8
+532.45074 27731.2
+535.01361 37351.2
+535.25781 15840.3
+535.51245 27980.8
+535.75958 17708.0
+539.61139 8732.1
+595.96301 26103.0
+596.30237 16380.9
+610.30811 8660.2
+613.81860 14863.0
+614.32843 10551.3
+615.28650 168007.8
+616.26489 59186.5
+617.27515 13061.0
+630.40930 9281.8
+633.29730 263507.0
+634.30060 87256.3
+635.30359 12852.7
+639.30652 12659.6
+639.64355 8592.3
+644.97913 13291.3
+645.30133 11840.6
+650.31866 36304.6
+650.65509 13845.8
+650.98596 10227.8
+657.34119 40495.0
+657.84259 31574.6
+658.33612 11144.6
+660.49200 10069.7
+676.63373 17889.0
+696.86023 71238.0
+697.36316 60469.2
+697.86389 16234.5
+705.86566 1045757.3
+706.36707 776619.1
+706.86816 349286.4
+707.36969 110765.1
+707.87378 18670.1
+719.40955 8932.1
+762.35352 18899.6
+762.86298 11823.7
+763.33441 44556.5
+764.34326 23037.6
+775.38782 9969.6
+779.39355 11404.1
+780.36682 24324.7
+795.66357 13731.4
+810.39819 15776.1
+810.90460 16933.1
+819.91040 11895.2
+858.45227 16500.1
+1001.22766 9308.2
+1021.17291 8409.5
+1033.47705 9364.6
+1057.22717 14553.1
+1182.58765 9697.2
+1188.02405 13314.7
+1195.77966 9561.1
+1198.00647 51104.3
+1374.45178 10807.3
+1476.07239 8373.3
+1525.39648 11165.8
+1635.02576 9970.5
+1694.73315 9113.2
+1870.40955 8644.6
+1878.58960 9280.5
+1879.51538 281046.5
+1880.37524 15786.6
+1906.99719 112788.5
+1930.59717 9368.0
+S	2381	2381	548.5369121
+Z	4	2190.11635
+146.08871 575.6
+146.63651 581.7
+154.69246 648.8
+156.05797 651.1
+158.13457 707.9
+165.76544 760.2
+169.39133 822.4
+180.84630 683.2
+188.21469 614.7
+188.25381 1337.4
+188.28773 2620.1
+188.30135 2356.6
+188.31694 1550.3
+188.37140 714.8
+189.19514 707.4
+195.77869 664.4
+197.12828 1244.7
+198.18173 733.9
+199.19957 863.4
+199.21030 1015.2
+199.28360 1098.7
+199.29578 2963.2
+199.30878 1801.4
+199.33293 782.8
+199.39389 1093.3
+200.50986 813.5
+218.54454 694.2
+236.58987 670.9
+265.35178 673.4
+270.49634 816.7
+277.14572 13011.7
+277.64761 3759.6
+278.11383 2461.1
+286.96121 671.3
+288.94708 708.5
+291.79520 657.9
+294.89606 613.2
+295.76395 746.3
+298.01202 692.6
+307.82144 723.5
+314.11310 2578.0
+348.83871 990.6
+350.29016 1022.2
+350.65723 2245.0
+351.16049 1391.0
+359.17114 4534.5
+359.65753 1277.1
+359.67697 1965.5
+360.16135 1160.0
+360.18985 934.1
+367.68408 5667.9
+368.17148 1364.3
+368.19116 1866.0
+368.67563 1208.0
+369.18063 989.2
+375.13040 1239.0
+376.16052 1124.0
+376.68961 3207.2
+377.19202 2362.9
+381.35626 845.6
+381.68268 2922.6
+382.18475 1323.3
+387.20319 2815.2
+388.18973 1294.0
+390.68616 1332.3
+391.97961 664.3
+405.21216 1366.1
+415.73141 3190.8
+416.23297 2697.0
+429.72787 2371.9
+430.23038 3185.0
+456.23074 4552.7
+457.21729 1605.2
+460.35382 716.5
+464.91171 2842.1
+465.24414 4089.9
+465.57910 2378.2
+470.91360 35098.3
+471.24771 51121.1
+471.58182 31629.9
+471.91638 10559.0
+472.25134 1736.4
+477.17502 1025.0
+479.48328 1810.6
+479.72839 4070.8
+479.97925 3032.4
+480.23059 2698.0
+483.75525 1039.1
+483.98523 5510.8
+484.23358 5574.3
+484.48602 1856.6
+487.99200 4213.0
+488.24133 9123.9
+488.49170 7814.2
+488.74338 4111.8
+488.99469 2550.8
+489.76794 829.1
+491.56174 857.2
+501.24542 3049.6
+503.26672 1026.7
+503.76416 1265.7
+513.93427 1983.4
+514.26624 1501.0
+514.59717 1059.3
+518.28888 775.2
+519.25458 3022.6
+519.93573 13324.9
+520.27075 20533.5
+520.60492 14922.0
+520.93951 6471.2
+521.27362 1202.7
+525.26654 1578.7
+525.60382 2385.2
+525.93604 3382.5
+529.00702 932.7
+529.25922 1663.5
+530.76196 1652.8
+531.01208 1351.7
+531.25433 2220.4
+531.50519 1984.8
+531.60675 1308.2
+532.48785 2275.8
+553.28473 2946.0
+554.28912 2296.8
+558.29236 871.4
+571.24792 890.8
+581.23608 777.7
+582.30402 2224.1
+583.30750 1036.9
+584.61633 1787.5
+584.95007 2565.1
+585.28473 3057.2
+585.71112 937.0
+586.25409 1098.2
+590.29108 1632.0
+590.62439 3682.9
+590.95856 4317.7
+591.29132 988.7
+595.96283 1929.4
+596.29810 3868.6
+596.63470 4297.4
+596.96710 839.0
+598.26166 1254.6
+599.24323 5096.5
+600.24841 2978.0
+613.82452 2028.4
+614.32684 2922.4
+614.82721 2435.7
+615.28766 39646.0
+616.26019 11295.0
+616.30280 10611.5
+617.26746 7006.7
+617.31287 2082.2
+618.27332 2417.4
+633.29803 57737.0
+634.30084 30371.6
+635.30414 8272.4
+635.96442 695.6
+638.97021 2965.7
+639.30188 4946.4
+639.63739 4618.5
+639.97150 2083.1
+644.64630 2321.2
+644.97662 1354.4
+645.31378 2652.3
+645.65381 904.0
+648.33612 1218.5
+650.31982 1819.9
+650.65356 5529.4
+650.98785 5934.3
+651.32043 1951.5
+651.65704 913.7
+652.31384 723.1
+657.34027 8485.8
+657.84113 13550.2
+658.34393 7015.7
+658.84430 2294.8
+662.33081 1045.1
+662.83429 1686.8
+663.33649 920.8
+666.36847 2205.4
+667.37213 1486.9
+676.63007 1069.8
+687.85449 2312.4
+688.35028 1756.2
+688.85657 1216.9
+689.36200 865.6
+696.86169 17150.9
+697.36310 26471.2
+697.86450 15027.6
+698.36597 5968.2
+698.86914 1718.6
+704.88153 894.1
+705.86700 185574.1
+706.36798 264946.1
+706.86859 164907.3
+707.36969 60590.9
+707.87067 15204.4
+708.37048 2887.0
+718.31921 856.1
+725.35919 1037.5
+725.68793 1080.9
+726.38647 790.0
+737.33655 1052.3
+745.37164 2134.4
+745.84985 1860.8
+746.33588 2509.5
+747.32562 1080.2
+753.86200 2512.4
+754.36096 3468.0
+754.77014 873.5
+754.85919 1483.6
+755.36060 970.4
+761.68372 804.8
+762.35767 6287.7
+762.86243 2977.1
+763.33423 9061.4
+763.86823 2589.5
+764.33978 6108.3
+765.34430 2271.8
+779.40234 1632.5
+779.90063 3641.8
+780.36432 2154.5
+780.40448 2232.5
+781.36847 1623.1
+782.78052 697.4
+793.88159 943.4
+794.36920 933.6
+795.68384 1074.3
+802.39301 2104.7
+802.89606 1647.4
+810.40326 1134.4
+810.90448 2010.8
+811.40613 2750.9
+811.90338 1442.1
+819.41138 1352.0
+819.91046 3171.8
+820.41724 1757.7
+829.43250 2840.4
+830.43152 1271.8
+831.45410 1022.9
+836.41803 798.3
+836.92432 1114.4
+837.42786 1215.4
+858.45001 5644.3
+859.45386 5074.9
+860.45404 2290.5
+946.46863 655.1
+966.49152 964.7
+1014.23187 732.1
+1057.95996 800.0
+1197.94421 788.0
+1198.08838 4153.4
+1286.14258 746.1
+1417.76257 847.1
+1470.77588 827.5
+1525.44080 782.2
+1860.07568 868.6
+1865.68750 862.7
+1870.13330 866.2
+1875.81372 899.6
+1878.34314 1187.5
+1878.87024 2539.6
+1879.49902 22998.2
+1879.77820 3557.9
+1880.01672 3125.6
+1880.59814 1247.5
+1883.11340 741.4
+1907.10498 9084.6
+1918.91321 995.7
+1930.57983 1267.5
+S	2382	2382	549.2900746
+Z	4	2193.129
+146.90982 36163.3
+147.58704 30208.3
+157.59039 42936.2
+158.22139 26697.0
+161.36647 26857.9
+165.76579 52116.1
+165.96364 30033.3
+169.47998 44900.8
+185.21756 34958.7
+188.21362 29555.8
+188.24606 54627.1
+188.27443 104230.8
+188.28670 118951.5
+188.31796 78425.6
+188.33852 28866.7
+188.38141 31395.8
+188.97552 34834.8
+198.91614 37156.4
+199.19713 42638.8
+199.22469 36833.1
+199.28610 58187.1
+199.29614 139056.6
+199.31224 40088.8
+199.32751 33880.9
+199.39546 33812.7
+212.12396 29358.8
+214.87148 29771.3
+221.99260 36081.5
+223.05188 28336.5
+230.67944 29158.1
+255.27119 36253.1
+271.61603 39652.6
+277.14493 114984.2
+280.16272 40928.5
+308.87726 42382.4
+331.25031 30983.9
+358.07376 31331.8
+359.16934 41571.1
+367.68427 81001.3
+369.43915 30192.6
+369.96558 26496.0
+376.68976 44056.1
+404.33521 34862.4
+465.58347 33141.3
+470.91296 525305.8
+471.24713 321326.9
+471.58072 193195.9
+472.98334 36204.1
+481.25430 27960.7
+482.62024 45996.5
+483.98633 66946.8
+488.24231 97782.6
+513.93256 51690.6
+519.93494 202856.4
+520.27045 198297.7
+520.60400 83056.2
+532.50311 95491.6
+535.26282 81392.4
+535.50629 81647.1
+535.76251 112229.4
+546.88525 28376.1
+549.10840 39557.6
+581.74506 41582.1
+584.85077 47693.5
+585.74420 39061.6
+590.29218 56294.0
+595.96552 46992.8
+615.28717 439695.0
+616.26050 112440.4
+616.30573 71307.9
+617.26691 63629.2
+633.29730 616783.2
+634.30212 183915.8
+639.30389 43836.1
+639.63379 60853.9
+650.32373 74700.4
+650.65594 67320.6
+657.34113 65685.8
+657.84344 57983.2
+662.51550 39415.5
+676.08533 35399.2
+676.65662 61394.4
+696.86261 260624.5
+697.36017 126657.0
+697.86383 73983.6
+698.36761 29861.0
+705.86603 2523895.3
+706.36749 1768568.6
+706.86853 855988.1
+707.36823 238500.8
+707.87408 42512.4
+745.84637 49361.4
+749.81970 29884.2
+762.35767 47888.6
+763.33472 77943.6
+779.40680 45945.6
+779.90649 37406.5
+780.35767 38479.5
+782.67310 37769.6
+795.65479 57976.9
+806.75989 28909.6
+939.74127 29792.8
+1029.07983 33223.4
+1057.28442 43417.7
+1126.45679 29327.5
+1154.87292 29954.1
+1198.12024 160426.8
+1368.90405 34937.8
+1487.73584 34913.1
+1525.30872 45377.0
+1580.59094 29552.8
+1878.68628 60877.0
+1879.17200 110451.0
+1879.59802 1035370.4
+1880.03333 88342.7
+1880.75024 50737.9
+1881.88843 43749.3
+1907.09473 385264.4
+1930.47534 41669.6
+1993.29431 37105.8
+1997.31628 34849.2
+S	2383	2383	516.5460071
+Z	4	2062.15273
+134.30144 882.9
+137.12723 1031.7
+157.60480 1389.7
+163.57536 1037.3
+165.76372 1564.1
+178.04517 959.0
+180.34372 1135.2
+187.82822 983.7
+188.25935 2196.8
+188.27837 1890.3
+188.29056 2571.9
+188.30064 1630.1
+188.30585 1903.6
+188.32835 1233.6
+189.97403 1080.8
+191.12039 946.0
+197.69890 1101.2
+198.91724 2154.4
+199.20316 1745.4
+199.24609 1530.8
+199.26166 1412.2
+199.27167 2167.6
+199.28453 2936.9
+199.30055 2902.4
+199.40143 1117.6
+213.33714 1024.3
+220.20718 982.0
+249.57678 1059.4
+255.29286 1061.0
+272.17111 1779.4
+284.91190 1064.0
+302.81070 1103.4
+336.20496 1695.8
+342.27289 1315.1
+350.08453 1140.4
+350.20508 5907.0
+350.70660 1731.9
+351.21130 2289.3
+367.57404 1095.6
+369.22391 79060.0
+370.22836 13398.3
+381.36005 1178.3
+383.19812 2298.8
+383.69873 2575.0
+398.58679 1019.2
+399.23941 1321.3
+408.43759 1159.5
+409.24548 1101.7
+429.24640 9287.9
+429.74832 7830.8
+430.25049 3189.3
+438.25211 5736.4
+438.75415 4914.7
+439.73987 1527.6
+440.24127 1547.1
+451.23007 7196.5
+452.23175 2223.7
+455.24744 12574.7
+455.58197 9282.2
+455.91476 3789.2
+466.24185 1733.4
+468.59549 1342.0
+481.25912 1589.3
+482.30743 8303.6
+483.31445 2544.8
+484.25809 2620.8
+490.26215 2954.2
+490.76288 3199.0
+497.60678 1405.3
+499.28665 4292.8
+501.23492 1317.0
+501.73749 1769.3
+502.25015 1113.4
+503.26984 1109.9
+522.91040 1054.3
+527.61157 2157.1
+527.94458 1375.9
+532.57874 3448.9
+534.18842 1049.7
+534.96997 8364.8
+535.30359 5059.6
+535.63977 2624.0
+537.79834 4175.9
+538.30066 3586.6
+538.80243 1389.6
+546.80536 3240.1
+547.30524 2463.8
+547.80927 1228.5
+548.20441 1063.8
+555.97339 3283.2
+556.30896 1610.0
+556.64178 2195.9
+558.75073 4471.9
+559.25128 4852.4
+564.31128 2863.1
+565.30603 11007.5
+565.64148 8766.6
+565.97766 3862.6
+566.31006 1977.4
+589.71588 1010.3
+590.30023 1144.0
+612.36700 10084.6
+612.66168 4354.6
+613.37018 2809.6
+615.29358 1495.6
+630.41278 1438.1
+635.65015 915.9
+665.36102 5128.8
+666.36530 3775.6
+668.33484 12405.5
+669.33844 6673.9
+676.58472 1400.4
+676.63605 1676.1
+682.36548 24521.5
+682.86743 16021.5
+683.36688 4851.9
+683.86572 1792.0
+699.40033 6656.7
+706.36792 2891.9
+710.89478 3022.7
+711.40204 3172.8
+711.90405 1319.1
+725.88397 3218.8
+726.39423 1466.0
+743.96912 1074.0
+745.41083 23191.1
+745.91229 19577.6
+746.41284 7445.0
+753.59576 1077.4
+755.39917 1804.5
+755.88464 1266.2
+767.85681 1219.7
+779.89966 1290.2
+782.40906 1747.7
+782.92548 1288.0
+783.38696 1050.6
+790.91516 44822.2
+791.41626 36697.2
+791.91669 17606.2
+792.41876 5518.6
+795.66388 1843.5
+847.45782 6190.7
+847.95844 6295.4
+848.45569 3049.3
+848.96777 1283.2
+878.46869 1203.5
+961.26044 1125.8
+1057.24182 1376.0
+1073.64258 1078.9
+1077.57935 1017.6
+1177.74316 1043.4
+1177.87659 1082.1
+1187.96033 1474.8
+1198.29456 5823.4
+1303.81812 1139.0
+1348.92090 1097.0
+1499.79553 1143.0
+1870.25696 1268.1
+1879.53040 31974.6
+1880.30139 1725.2
+1894.01770 1025.6
+1907.07056 13223.3
+1930.62720 1949.1
+1977.03064 1082.9
+S	2385	2385	548.5281246
+Z	4	2190.0812
+140.75563 43322.6
+142.64352 41172.9
+143.49895 46546.9
+146.10344 43789.9
+154.09782 55167.9
+157.58006 47191.0
+162.93205 42243.5
+165.65648 44546.5
+181.62062 38811.2
+181.62332 38605.0
+185.17517 42431.6
+188.24991 95640.9
+188.26120 120341.8
+188.27670 176111.9
+188.29681 174046.4
+188.31825 104397.2
+188.33394 53866.0
+188.34171 37971.7
+188.36823 40452.1
+198.07982 42801.8
+198.46935 43184.5
+199.20131 77086.9
+199.22209 59887.4
+199.24002 75684.7
+199.26936 64866.6
+199.29768 196846.1
+199.30717 119018.7
+199.32124 80277.8
+199.33293 52330.4
+199.34875 47890.2
+199.36812 45312.1
+199.39233 64858.6
+199.41869 45595.3
+205.32990 42429.5
+207.17841 53162.8
+211.50693 48578.5
+227.66261 37457.0
+240.90294 46260.7
+250.95514 52480.6
+264.61719 50206.7
+267.83472 42240.1
+268.89407 43853.8
+271.61920 52453.3
+277.14490 70790.2
+285.56268 51028.5
+350.28394 63241.1
+405.62024 52896.2
+425.68423 48501.4
+450.47034 43909.5
+470.91348 477348.4
+471.24695 439688.5
+482.87006 61717.4
+483.98517 60442.2
+488.24103 76791.2
+498.72968 47619.0
+519.93536 144238.0
+520.27100 72970.6
+521.05670 49616.8
+532.56421 111379.3
+532.64954 70433.4
+535.50708 82995.6
+585.70148 51354.5
+615.28668 350840.3
+616.25891 86823.5
+629.66644 57579.7
+633.29730 588240.4
+634.30096 201577.5
+650.32288 85693.6
+657.33606 80683.6
+657.85156 71767.1
+676.63922 88659.9
+696.86072 206003.5
+697.35852 137272.4
+697.86353 58034.9
+704.65210 60354.2
+705.86566 1961791.8
+706.36743 1582999.5
+706.86841 788405.9
+707.36835 191188.6
+712.22668 49165.6
+729.41785 46743.6
+731.13879 51996.8
+762.35815 58548.8
+763.32556 86860.7
+779.92633 49468.2
+795.64832 72334.1
+810.12036 54117.1
+993.16364 47915.1
+1065.97961 47287.6
+1198.27539 203470.3
+1198.40320 116629.2
+1198.51257 70225.7
+1525.42944 72679.0
+1588.39392 50254.8
+1718.13574 49796.9
+1776.93079 69849.7
+1785.28113 62108.6
+1870.42004 68746.9
+1876.21021 71026.7
+1877.58081 55810.3
+1879.12000 208910.3
+1879.52820 1596475.3
+1879.94543 223877.6
+1880.76563 70398.3
+1907.08484 618149.1
+S	2386	2386	696.3509396
+Z	4	2781.37246
+188.25322 51364.6
+188.27101 67387.5
+188.28610 77367.8
+188.30286 68370.3
+188.31773 43444.0
+188.33904 20681.5
+198.91345 34011.7
+199.26701 44560.3
+199.28378 29528.6
+199.29503 83850.3
+199.31467 28026.0
+199.38942 29918.4
+202.94557 20721.7
+206.29991 20775.8
+207.67680 20582.0
+214.51776 27075.4
+238.13083 21221.3
+259.38324 28020.1
+267.23654 24013.8
+312.74142 23139.6
+324.39056 21848.1
+353.07697 28288.6
+373.31934 23646.9
+427.54752 25599.9
+444.51114 26814.9
+464.31564 22334.5
+482.66467 23840.6
+509.70584 20796.0
+522.78564 29124.2
+532.57227 73467.9
+571.29059 31017.1
+595.08728 25069.5
+601.29724 29331.6
+603.64215 30174.8
+603.97815 68446.5
+604.31201 32660.1
+604.65125 22828.8
+630.41785 24497.5
+635.99487 909467.6
+636.32953 917676.3
+636.66449 567530.6
+636.99756 171354.4
+654.80048 23859.3
+665.00745 40217.2
+665.33826 66500.2
+665.67242 42264.2
+676.64044 36147.2
+718.44769 19995.1
+731.13403 29998.4
+734.38007 30119.0
+795.64813 39035.7
+838.41101 37465.5
+840.38867 85751.2
+844.41290 64811.1
+844.74713 68749.1
+845.07367 48893.0
+856.43658 173680.8
+856.75336 45435.8
+856.93976 173523.8
+857.08038 24692.2
+857.43634 76163.3
+858.39569 104895.0
+859.40497 66027.1
+863.38232 22034.4
+875.02008 23914.5
+876.40930 83835.4
+877.41260 42971.8
+904.96259 261075.8
+905.46588 248703.2
+905.96997 104250.6
+906.47040 48359.9
+952.57471 23820.1
+953.49023 182479.3
+953.99072 169728.8
+954.49243 126066.3
+954.99695 40582.2
+997.50519 30138.8
+1198.28662 120674.0
+1227.25586 25724.2
+1242.36389 23321.5
+1536.81006 24324.3
+1583.00488 22891.4
+1635.61914 24288.5
+1781.95410 30289.0
+1878.41309 44599.7
+1878.81799 37307.7
+1879.13806 73137.2
+1879.54761 712705.3
+1879.98523 67836.1
+1880.31238 45658.8
+1880.67188 39889.1
+1881.77930 27070.7
+1882.38342 25701.6
+1884.84717 21066.5
+1907.11975 245655.2
+1930.61060 34426.1
+S	2387	2387	549.2803246
+Z	4	2193.09
+143.72531 606.6
+154.64215 528.1
+157.60547 586.2
+159.20613 566.0
+161.59341 570.6
+165.56317 568.4
+169.50143 599.8
+169.80196 561.5
+177.75847 543.8
+179.94502 547.7
+180.21625 659.9
+188.25450 639.5
+188.26175 617.1
+188.27303 972.7
+188.27975 1041.2
+188.29092 1063.9
+188.29500 1073.3
+188.30443 848.6
+195.49225 513.5
+196.14368 745.0
+196.93689 586.6
+197.12868 1140.6
+197.60625 573.1
+197.69653 793.2
+198.92070 888.7
+199.19760 783.8
+199.24609 935.0
+199.25836 844.8
+199.28548 995.1
+199.29767 2556.5
+199.30980 1079.3
+199.32106 840.0
+199.39217 828.5
+212.06499 695.0
+224.14049 890.3
+228.23962 526.3
+233.37355 638.4
+234.12405 1884.0
+238.19133 633.0
+242.15051 776.6
+255.14635 677.2
+255.28641 900.6
+255.43466 617.5
+268.14032 1188.1
+277.14572 16798.4
+277.64731 4991.7
+278.11392 2257.6
+280.87225 577.2
+294.19919 591.9
+299.51706 557.1
+308.14828 1175.2
+308.88718 622.9
+314.11411 3289.4
+325.21881 539.2
+350.16452 765.0
+350.65784 3393.0
+351.16104 1968.6
+351.66040 877.4
+359.17145 5760.5
+359.65942 2942.9
+359.67957 1399.6
+360.16202 1929.4
+360.18964 1928.2
+361.71024 529.6
+365.42178 572.9
+367.68481 8926.5
+368.17191 3086.9
+368.19220 1857.3
+368.67596 2168.2
+369.17548 908.3
+373.18488 2339.2
+373.68747 1902.6
+375.13107 2070.3
+376.13193 618.7
+376.16135 1555.0
+376.68936 4738.9
+377.19153 3206.9
+379.17365 1037.1
+381.68188 4512.1
+382.18494 1695.8
+384.67953 597.3
+387.20291 4636.7
+388.18997 2039.9
+389.18915 804.6
+390.68716 1531.8
+392.15573 811.5
+399.21106 1464.7
+405.21268 2223.2
+415.73239 5515.5
+416.23386 3514.7
+416.73462 1250.8
+420.72641 635.3
+421.22327 960.0
+427.53995 699.7
+429.72842 6364.2
+430.23044 4292.1
+430.73257 1425.4
+438.56540 1510.8
+438.89545 1264.5
+445.24350 683.2
+456.23132 6152.5
+457.23038 1923.5
+464.91003 2410.2
+465.24606 3146.5
+465.57886 1789.8
+465.91406 758.1
+470.28687 516.5
+470.91388 60107.0
+471.24802 66862.9
+471.58203 33693.5
+471.78104 695.8
+471.91653 13444.5
+472.24908 1790.3
+474.97565 841.8
+477.17587 1710.4
+479.23010 1613.6
+479.47882 3673.2
+479.72943 5471.1
+479.97925 4874.7
+480.23038 2262.8
+482.63220 723.7
+483.48770 1134.8
+483.73077 5016.1
+483.98578 10220.0
+484.23267 6539.6
+484.48737 4700.2
+484.73108 930.6
+487.99100 8941.1
+488.24185 11108.8
+488.49222 11458.7
+488.74298 4481.5
+488.99576 1522.0
+489.26810 812.2
+489.76379 967.3
+491.56699 1051.7
+501.24576 4093.1
+502.24792 1376.7
+503.26160 1473.2
+503.57538 940.6
+503.76312 1183.6
+509.32315 585.0
+513.93335 2023.3
+514.26855 3639.4
+514.60132 1604.9
+519.25562 3385.0
+519.59332 945.1
+519.93628 24394.8
+520.27087 28435.5
+520.60504 18127.8
+520.93945 6932.2
+521.27515 1987.4
+525.26971 2202.4
+525.60083 3083.2
+525.93604 3387.6
+526.26526 973.5
+526.62097 2616.1
+528.50983 692.0
+528.75909 1821.4
+529.00940 1015.6
+529.25928 1958.2
+530.51648 746.9
+530.76013 2194.1
+531.01019 2799.0
+531.25696 3261.5
+531.50684 1509.1
+532.57910 1868.9
+535.27124 648.9
+548.27667 688.6
+549.14612 705.3
+553.28235 6283.0
+553.67657 570.8
+554.28662 2654.5
+555.28546 829.3
+557.95197 815.9
+558.28894 753.8
+558.61646 725.6
+578.94379 1079.0
+579.27728 1018.9
+582.30353 3525.3
+583.30737 1984.6
+584.28259 978.0
+584.61432 2535.7
+584.95007 2963.4
+585.28363 2718.2
+588.27393 1203.3
+589.96356 746.8
+590.28973 3797.6
+590.62463 7439.9
+590.95837 4424.1
+595.96497 4278.8
+596.29932 5543.9
+596.63342 3171.8
+596.96948 1004.6
+598.25977 2381.6
+599.24353 8743.5
+600.24957 3570.3
+601.24677 722.6
+605.31024 685.5
+613.82367 5127.1
+614.32611 5932.3
+615.28802 59558.9
+616.26099 15355.2
+616.30341 12734.1
+617.26886 8882.2
+617.31537 2131.9
+618.27594 2221.0
+633.29822 84825.8
+633.56775 584.6
+634.30115 38852.0
+634.67957 976.0
+635.30353 9932.2
+636.30737 995.7
+638.96838 4646.2
+639.30206 6856.3
+639.63745 5541.9
+639.97107 1669.7
+640.30701 768.7
+644.64642 1907.5
+644.97839 4803.6
+645.31055 3291.4
+645.64813 1240.8
+648.33551 1538.3
+648.83887 1222.7
+650.31775 3979.9
+650.65332 8261.1
+650.98749 8914.1
+651.32043 3224.9
+651.65808 2022.0
+654.30768 689.9
+657.34070 17427.6
+657.84161 16506.4
+658.34296 8308.1
+658.84528 3988.1
+661.33502 796.3
+662.33276 3913.5
+662.83447 3953.3
+663.33508 2101.6
+666.36658 3852.5
+667.37396 1961.6
+675.34204 686.7
+676.65039 1100.9
+687.85938 2132.5
+688.35712 2937.0
+688.86029 1623.9
+692.33942 1217.1
+696.58527 665.7
+696.86182 28417.1
+697.36346 32093.8
+697.86481 19473.7
+698.27509 663.0
+698.36615 7223.2
+698.87463 1005.9
+703.88202 1479.5
+704.23535 764.6
+704.37744 1582.2
+704.51221 930.5
+704.74023 640.9
+704.88629 2376.1
+705.21210 655.3
+705.38013 1967.8
+705.86749 308172.3
+706.36816 371116.3
+706.79688 760.0
+706.86865 213151.5
+707.36957 77128.6
+707.51892 788.8
+707.62073 506.2
+707.66321 933.5
+707.86987 19494.0
+708.01239 1056.1
+708.12146 723.4
+708.36804 4280.1
+708.50616 739.6
+708.86902 1185.0
+710.35706 1711.5
+718.31812 826.3
+719.68542 1379.3
+725.35809 1510.7
+725.69427 1086.4
+727.35852 667.8
+728.34222 785.7
+736.84222 1148.0
+737.35095 701.2
+737.83533 602.3
+745.37122 3957.4
+745.85126 2456.2
+746.32281 2863.7
+747.31390 1635.9
+753.86255 2864.0
+754.36261 5633.6
+754.86371 2594.5
+755.36035 1148.5
+762.35718 7516.3
+762.86597 3092.5
+763.33258 12743.5
+763.86945 1969.7
+764.33960 8445.2
+765.34357 2192.5
+770.39130 789.0
+779.40045 4595.8
+779.90314 6437.6
+780.36322 4419.1
+780.91040 1414.9
+781.36932 3426.2
+782.38141 696.4
+793.38623 1351.8
+795.67883 744.1
+801.89246 2745.6
+802.39001 3373.0
+802.89490 1712.4
+803.39117 852.3
+810.40570 2478.9
+810.90363 5645.9
+811.40375 3040.2
+811.90350 1867.1
+819.40863 3008.9
+819.90912 3441.8
+820.41614 2465.3
+820.91211 1359.8
+821.41608 787.5
+829.43274 3975.3
+830.43036 2275.0
+831.45331 1452.9
+836.42389 859.2
+836.92426 1788.4
+837.42456 1102.0
+841.44318 1002.5
+858.44989 9009.8
+859.45465 5631.8
+860.45428 1590.7
+966.49316 1681.2
+967.50134 1238.2
+1044.44470 613.1
+1198.29187 3353.9
+1209.55603 641.6
+1567.18799 630.4
+1680.03943 569.5
+1684.81213 756.1
+1776.84534 728.1
+1878.44519 881.8
+1879.23865 2541.1
+1879.56006 19768.2
+1879.91357 1989.8
+1880.08069 1345.9
+1880.67688 963.2
+1881.43689 857.1
+1907.08582 7678.4
+1930.60229 648.8
+S	2389	2389	548.5339821
+Z	4	2190.10463
+141.05005 598.3
+141.57881 504.2
+143.92804 524.4
+144.16545 540.6
+150.01534 629.3
+152.15358 493.3
+158.27454 495.4
+161.71582 690.0
+165.24451 576.6
+173.91273 665.5
+174.39346 494.7
+180.12042 571.1
+181.73289 536.4
+188.22395 723.4
+188.26207 1600.2
+188.28067 2017.9
+188.28923 1893.9
+188.29759 1944.9
+188.31499 1562.2
+188.38742 481.7
+188.46631 554.9
+197.12848 1425.1
+198.91473 925.8
+199.01222 654.0
+199.20277 974.3
+199.27739 907.5
+199.30370 2572.7
+199.40286 885.0
+199.70844 650.8
+202.74815 621.9
+224.84515 572.9
+243.49106 620.1
+275.96924 544.1
+277.14569 6982.8
+277.64737 2872.3
+278.11395 1193.7
+278.14865 726.5
+314.11438 1893.0
+342.23401 851.1
+350.28534 915.8
+350.65805 1100.2
+351.16138 1382.5
+359.17160 3702.3
+359.67621 1960.7
+360.18463 1049.9
+361.40491 615.2
+367.68469 3807.4
+368.17090 1282.7
+368.19073 1595.5
+375.13077 959.1
+376.15659 796.1
+376.69003 2563.6
+377.19196 2410.6
+380.83084 675.2
+380.96838 574.1
+381.68265 2121.7
+382.18323 1306.5
+382.68555 678.7
+387.20319 2042.6
+387.58310 618.5
+388.18564 1128.8
+390.68893 1082.7
+391.18948 759.3
+399.20499 860.5
+405.21457 890.2
+415.73096 1814.7
+416.23172 1662.8
+429.72888 2417.0
+430.22952 3318.2
+433.91815 594.7
+437.29709 498.4
+438.56009 689.0
+438.89685 1381.8
+439.23141 818.7
+456.23062 3122.6
+457.23035 1099.2
+458.21463 739.7
+464.90921 2636.3
+465.24362 3313.7
+465.57971 1479.6
+469.24496 556.8
+470.91357 27278.7
+471.24771 37602.8
+471.58200 23445.9
+471.91608 7961.4
+472.24936 2443.9
+477.17871 732.9
+479.47800 2266.7
+479.72992 3550.4
+479.97885 3256.6
+480.23099 1458.0
+480.48184 874.2
+483.73032 1577.9
+483.98724 4394.1
+484.23157 2578.1
+484.48605 2946.3
+484.75961 767.7
+487.99066 4956.1
+488.24207 7530.9
+488.49277 6239.0
+488.74356 4671.2
+488.99228 772.1
+492.24936 603.2
+501.24341 2937.4
+502.24811 967.2
+513.93011 1516.2
+514.26733 1511.5
+514.60059 979.0
+519.25763 1717.4
+519.93622 11694.8
+520.27081 15975.6
+520.60486 11073.7
+520.93896 4732.0
+521.27332 2124.4
+521.60388 597.9
+525.26434 730.4
+525.60138 1214.8
+525.93701 812.9
+526.15521 693.7
+528.75623 1294.4
+529.01569 698.3
+529.25763 981.4
+531.01318 2268.2
+531.25635 1106.2
+531.31799 1038.7
+531.50806 1619.2
+531.60425 725.9
+532.59644 2005.3
+533.01990 889.9
+553.28510 2066.6
+554.28784 2059.5
+555.29395 727.9
+571.25165 668.4
+582.30371 1559.1
+583.30560 997.8
+584.61230 1096.0
+584.94897 1663.8
+585.28271 1480.8
+585.61652 671.7
+590.28967 2661.2
+590.62433 3174.1
+590.95654 2471.1
+591.29230 1497.0
+595.96503 1991.5
+596.29956 2396.2
+596.63342 2761.2
+596.97052 1276.0
+598.25940 801.9
+599.24231 3367.4
+600.24841 1346.6
+613.82037 1795.1
+614.32562 2764.8
+614.82587 1695.2
+615.28772 30731.6
+616.25952 7518.6
+616.30237 8406.1
+617.26617 5292.7
+617.31061 2013.6
+618.26855 1410.3
+624.48035 675.3
+633.29810 44951.0
+634.30109 22613.0
+635.30481 7087.1
+636.30743 965.5
+638.96753 1128.3
+639.30219 3911.3
+639.63751 3019.6
+639.96906 1844.7
+644.97961 1138.7
+645.30988 1403.7
+650.31989 1750.2
+650.65417 4186.4
+650.98761 6771.1
+651.32037 2501.6
+651.65234 1100.2
+657.34058 5821.3
+657.84106 8739.6
+658.34344 5541.4
+658.84351 2038.3
+662.83301 1467.0
+663.33771 694.3
+666.36597 2355.0
+668.37927 732.5
+676.64990 1275.2
+677.28400 591.0
+687.85510 692.1
+688.35724 1359.2
+688.85529 1496.1
+696.86157 13013.3
+697.36298 17365.0
+697.86469 13357.3
+698.36755 5855.4
+698.87073 1220.1
+704.37946 748.9
+704.88593 737.1
+705.37897 807.2
+705.86688 137889.0
+706.36798 193447.7
+706.86871 132233.2
+707.37018 53219.4
+707.87195 13270.7
+708.37109 2403.7
+708.87122 660.6
+731.02136 699.9
+745.36713 2040.5
+746.31219 1737.0
+747.32489 982.2
+753.86469 1411.6
+754.35919 1316.1
+754.86420 1780.7
+755.36383 1146.4
+762.35541 3318.0
+762.86633 1075.6
+763.33307 5584.6
+763.87073 2101.4
+764.33893 3486.4
+765.34595 2212.4
+779.40057 1967.1
+779.90240 2839.0
+780.40717 2333.4
+781.36591 1181.9
+795.65479 814.9
+801.90063 799.0
+802.40118 1105.4
+802.88660 1271.0
+810.40167 1099.6
+810.89917 1864.6
+811.40381 2130.0
+811.91351 740.1
+819.90955 1648.2
+820.40564 987.8
+829.42963 1888.1
+830.43164 1081.7
+831.48254 687.0
+837.42053 827.2
+838.32135 578.0
+858.44971 4294.9
+859.45313 4118.1
+860.45776 1411.5
+1198.33472 3672.6
+1450.21338 633.8
+1550.66882 671.7
+1583.63623 678.6
+1646.25476 612.8
+1650.47949 617.7
+1776.92700 1077.2
+1877.07178 661.5
+1877.91235 654.7
+1878.73694 1082.3
+1878.96570 893.2
+1879.27612 1895.3
+1879.56458 19763.4
+1880.15637 1056.9
+1880.63794 695.8
+1882.05615 721.0
+1907.07349 7655.1
+1930.46265 861.1
+S	2390	2390	696.3577146
+Z	4	2781.39956
+187.87286 9327.2
+188.23076 10748.7
+188.25620 23685.0
+188.27286 28493.5
+188.28989 26854.3
+188.29787 30793.4
+188.31714 20430.0
+188.33620 10888.6
+188.34697 9660.6
+199.20786 17194.1
+199.22392 13161.0
+199.28905 24803.5
+199.30444 41523.9
+199.32025 20969.8
+199.37944 11362.3
+213.24837 9348.9
+228.19080 9165.8
+228.55247 9953.6
+255.15013 10554.9
+262.00204 10058.6
+292.84720 10502.6
+300.37476 10603.4
+302.03934 9532.6
+319.23187 13214.1
+357.09189 9942.2
+387.70581 23220.7
+427.53714 11686.2
+429.70255 14880.4
+511.18768 11047.8
+513.49866 9413.9
+518.87744 11103.8
+522.28894 26333.6
+522.79260 17096.0
+532.56946 32410.4
+549.14490 12566.5
+550.60089 9774.3
+551.30939 9751.1
+571.29895 11617.0
+596.32605 18268.2
+601.29401 24374.6
+603.64288 55370.6
+603.97833 82657.1
+604.31152 34080.8
+605.29095 12133.9
+630.32306 20437.9
+630.39532 12452.6
+635.99536 743562.8
+636.32941 787989.4
+636.66370 398311.9
+636.99744 178447.0
+637.33710 30823.0
+652.84393 18621.7
+653.34979 13455.5
+661.10712 10750.1
+661.34485 15381.2
+664.94904 9050.1
+665.00732 76870.6
+665.34186 53578.7
+665.67377 45998.2
+676.65350 15118.1
+680.59900 10998.3
+680.85358 10895.5
+696.01917 11354.3
+706.09796 11837.7
+718.68207 11784.2
+727.70020 19453.7
+734.37799 20759.5
+768.91437 11853.3
+771.36902 18585.5
+774.40167 21123.9
+795.65179 15268.8
+801.38953 15026.9
+802.06573 15979.4
+808.40710 18988.7
+813.40045 14025.4
+814.06689 12511.7
+822.37122 13597.6
+828.07129 12295.9
+832.72272 13137.6
+838.74408 13786.9
+840.38678 93388.4
+841.39404 29861.9
+844.41364 54960.3
+844.74792 40369.9
+845.07758 39593.2
+845.42865 11932.1
+850.75018 14586.4
+851.89240 13325.1
+856.43726 126724.6
+856.75323 32580.7
+856.93854 170954.2
+857.08954 20459.2
+857.43994 63517.6
+857.94159 18560.6
+858.39673 79571.0
+859.39764 41507.9
+876.40961 96006.3
+877.41217 32454.8
+904.96313 198059.6
+905.46515 222323.1
+905.96588 107200.7
+906.46497 49172.5
+953.48999 201820.1
+953.99152 188745.4
+954.49176 96039.4
+954.98938 32904.8
+997.00562 24525.4
+997.50775 18846.9
+1011.74548 10522.9
+1020.84045 10744.2
+1022.51166 15955.8
+1023.00452 19579.2
+1041.53882 11549.3
+1059.11035 13278.9
+1132.60327 12052.3
+1198.28064 57330.0
+1318.55688 11643.9
+1520.75537 11792.6
+1776.90662 12592.5
+1863.97107 10174.8
+1870.26941 13518.7
+1877.92664 17539.6
+1879.27283 39810.0
+1879.57275 327900.9
+1882.67444 12949.8
+1907.13000 113714.5
+S	2391	2391	697.1100746
+Z	4	2784.409
+181.24269 2140.0
+187.14398 5126.0
+188.25938 2593.4
+188.27393 3744.4
+188.28268 3511.4
+188.29266 3917.9
+188.30798 3305.5
+198.91327 2557.0
+199.20114 2867.9
+199.21773 2492.0
+199.25397 2531.1
+199.27092 2396.9
+199.28537 4562.6
+199.29988 7143.1
+199.31619 3384.9
+199.32675 3391.7
+199.39539 3099.6
+209.32367 1952.9
+215.13878 2705.4
+233.92064 2201.4
+289.72244 2472.4
+298.11816 3114.0
+341.15817 2877.2
+344.18164 9580.0
+351.67590 2216.2
+359.17160 3498.0
+364.18402 2522.8
+364.47073 2443.3
+377.18045 3559.9
+387.70395 27644.0
+388.20584 12213.8
+388.70432 2710.7
+399.18213 2152.5
+407.18796 2343.9
+411.69333 3028.0
+420.69736 8810.2
+421.20056 4525.2
+421.74963 2909.7
+427.51193 3436.7
+429.70306 19784.4
+430.20416 7589.8
+437.23853 11754.9
+437.73898 6043.5
+441.09262 2761.0
+441.22223 5225.0
+452.19336 4461.0
+458.05374 2344.8
+460.21796 4787.8
+469.22470 3604.8
+470.20215 10190.2
+473.23398 2447.7
+478.22977 10091.8
+478.73145 4860.3
+481.25122 2278.3
+482.61789 3056.3
+485.23947 2600.1
+486.24820 2329.2
+486.77167 7538.7
+487.27396 3337.4
+487.73410 3789.9
+488.21799 2543.8
+489.91934 2968.1
+512.25421 2802.9
+515.22626 2581.3
+517.26025 5377.2
+517.74445 4628.7
+522.29022 35386.6
+522.79132 17122.1
+523.29401 3858.0
+526.75519 6983.0
+530.26141 8034.7
+531.26312 3809.6
+532.62103 7421.2
+535.75970 8286.1
+536.25946 4217.2
+538.81775 1971.3
+539.22162 3712.9
+540.28674 6158.4
+544.77234 2639.3
+545.27283 2710.8
+545.86957 2194.2
+571.29327 16443.0
+571.62885 22515.8
+571.96228 15919.9
+572.29712 4744.2
+583.28833 11550.5
+584.28772 6670.7
+595.82300 18275.6
+596.32489 13587.8
+596.82947 4070.2
+601.29785 24481.6
+602.30109 9958.6
+603.64502 60613.7
+603.97943 98484.3
+604.31360 51635.4
+604.64722 18048.2
+604.98383 5427.9
+622.79590 2521.7
+626.25409 4761.8
+630.32233 10942.6
+630.65393 11878.9
+630.99109 5924.6
+631.32751 2932.6
+633.80994 3490.4
+634.30347 3441.9
+634.64160 3865.6
+634.94116 2656.5
+635.15485 2446.4
+635.49097 3303.7
+635.99652 725269.8
+636.33008 876452.4
+636.66418 534838.5
+636.83557 3285.8
+636.99805 213135.9
+637.17297 4557.8
+637.33270 56921.1
+637.39368 2546.7
+637.45813 2372.4
+637.66815 17306.6
+638.02295 4250.1
+638.36713 3033.9
+644.26837 4244.3
+648.80536 3073.0
+652.84613 22231.0
+653.34625 18532.8
+653.84619 4027.8
+654.30127 1950.9
+659.00427 8869.1
+659.33789 13525.6
+659.66956 7733.8
+661.34540 37336.4
+661.84680 22282.3
+662.27527 3257.2
+662.35114 2949.0
+665.00604 51841.7
+665.34131 62891.4
+665.67480 39648.3
+666.00793 10167.1
+666.32080 10347.2
+667.33435 2567.9
+670.31793 4024.4
+672.94238 2685.1
+674.07794 3011.3
+676.66907 4230.0
+677.31262 3789.8
+679.85400 2291.5
+715.69299 3739.5
+716.02460 4352.7
+727.70105 9130.3
+728.03467 11601.6
+728.36835 8103.8
+734.37830 20245.4
+734.87976 11630.1
+735.38226 7664.1
+736.32458 3360.9
+739.37872 7907.9
+739.70721 10818.5
+740.04156 4373.6
+745.71204 4056.7
+749.82947 2414.6
+751.70972 5896.6
+752.04950 5210.7
+753.35553 12217.5
+754.36029 6334.3
+757.35406 6284.8
+758.35602 3249.8
+766.43738 2519.0
+771.36688 17323.9
+772.37280 7140.9
+774.40015 60333.6
+775.40350 24821.3
+776.40076 6445.5
+778.85889 3621.1
+789.37555 11769.4
+790.38074 3512.2
+795.64496 3262.6
+801.39612 12435.6
+801.73425 18094.9
+802.06738 12611.3
+802.40448 6600.7
+804.37097 3163.1
+807.40576 5788.3
+807.73444 5766.0
+807.90991 12859.2
+808.06665 4349.4
+808.41052 14450.8
+808.91693 6502.2
+813.40973 8764.7
+813.73761 10583.5
+814.07623 11261.3
+814.41522 4037.4
+822.37726 21661.8
+823.37756 9446.2
+824.39160 3519.0
+838.41168 9071.5
+838.74298 22343.7
+839.07623 23004.8
+839.40723 9598.8
+839.73627 2732.4
+840.38824 78870.7
+841.39111 38858.6
+842.39661 9360.7
+844.41229 25616.5
+844.74579 41929.4
+845.08179 37079.1
+845.41547 10149.2
+845.74652 7859.9
+846.09204 2853.1
+847.92059 5417.7
+848.42352 7179.8
+848.91815 3608.6
+850.41071 6342.8
+850.74994 14968.9
+851.08533 8959.8
+851.41608 5618.2
+856.43750 171389.8
+856.75488 24756.3
+856.93951 185798.3
+857.09009 27271.0
+857.44061 100009.4
+857.94244 40577.5
+858.39856 93738.6
+859.40161 50457.4
+860.40552 11225.3
+863.40692 4895.4
+866.43732 3404.4
+866.94250 3989.4
+869.90161 3972.2
+870.41211 5695.9
+873.46735 8996.0
+874.47113 6715.2
+875.46912 2986.1
+876.40942 80565.7
+877.41168 37897.4
+878.41473 10267.4
+893.59241 2194.1
+896.46515 3706.6
+896.96039 5455.1
+897.45471 3438.3
+904.96381 224349.3
+905.46564 253852.2
+905.96698 149572.4
+906.46808 50720.6
+906.96942 16413.0
+907.48370 3308.2
+934.44623 8875.5
+935.45215 4539.1
+936.46204 2871.7
+937.43481 4238.4
+953.49078 158400.5
+953.99194 193855.2
+954.49329 115999.1
+954.99475 51759.5
+955.42450 4198.8
+955.50616 9054.8
+955.99335 3968.5
+956.44812 3590.5
+973.47296 3944.6
+997.00623 22165.7
+997.50848 23083.9
+998.01147 14068.9
+998.50452 5916.2
+1002.00507 5798.7
+1002.50116 7858.3
+1003.00690 3608.6
+1020.80328 2450.4
+1022.51050 19262.2
+1023.01575 31600.3
+1023.51703 16425.7
+1024.01941 6501.4
+1024.52087 3507.1
+1027.72803 2640.4
+1033.51111 10667.1
+1034.51624 6819.8
+1035.53015 6030.2
+1040.52307 9656.0
+1041.02747 9586.5
+1041.52661 10191.7
+1073.55054 4553.5
+1088.53613 3111.8
+1091.03650 3945.2
+1091.54736 7271.8
+1092.05225 4960.4
+1127.07275 2912.1
+1132.58691 8230.3
+1133.58582 6821.6
+1144.55896 7370.3
+1145.56104 11309.2
+1146.56433 4577.7
+1198.38770 11421.0
+1525.28638 4054.6
+1878.69604 2297.7
+1879.36633 16240.9
+1879.60217 65422.0
+1880.02197 10510.5
+1880.30933 6724.3
+1880.84351 3628.5
+1907.07593 27038.3
+1930.43286 3768.1
+S	2393	2393	696.3516096
+Z	4	2781.37514
+182.78973 682.6
+184.81863 574.5
+188.27457 2064.4
+188.29875 2371.6
+188.81612 607.7
+196.60559 715.6
+198.91330 843.8
+199.20142 631.1
+199.23048 560.4
+199.29259 1459.0
+199.29739 1644.5
+199.30475 1694.1
+199.31238 1952.1
+199.40924 621.4
+226.08250 1333.4
+227.06587 1543.0
+230.85455 516.6
+231.15120 601.8
+233.58354 893.5
+235.28870 599.1
+244.09274 2598.2
+280.53403 626.6
+284.08981 701.3
+301.11398 2252.3
+310.13818 702.8
+322.18686 6589.3
+350.28085 919.4
+356.64935 576.0
+367.16104 782.6
+380.90540 702.4
+381.14035 2714.1
+398.16663 652.6
+429.87247 632.0
+435.27066 4157.7
+465.41245 770.2
+478.19479 850.0
+485.87082 756.7
+488.04343 726.1
+495.22498 785.4
+495.74646 1171.1
+496.24619 874.6
+515.92657 664.8
+532.56207 1625.4
+535.26941 1003.6
+538.25220 1289.3
+544.22937 648.0
+544.27319 70011.8
+544.77472 30128.2
+545.27612 6927.9
+545.77301 883.2
+549.18213 808.2
+550.29736 6990.3
+551.30450 1077.4
+563.77838 1384.0
+572.78369 47848.1
+573.28522 17600.4
+573.78607 3647.2
+574.28833 991.4
+575.20758 1755.6
+585.80908 1708.9
+586.05682 2861.5
+586.30054 1297.4
+591.27484 770.9
+599.70013 756.6
+610.24512 1848.5
+626.01666 1093.9
+626.35669 2054.5
+627.80609 1391.3
+628.30707 1285.3
+635.99463 9451.2
+636.32965 9071.1
+636.66351 2483.5
+636.81348 4188.0
+636.99683 1167.9
+637.31091 1007.3
+661.34521 5694.6
+665.32404 12036.1
+666.32666 3053.6
+666.39496 678.0
+667.80078 2292.7
+668.29651 3250.8
+668.79742 1253.8
+670.03693 688.1
+673.03058 1872.3
+676.31604 6030.3
+676.61664 1148.7
+676.80841 35870.4
+677.30994 17375.9
+677.40668 743.5
+677.81116 4195.4
+678.41608 757.4
+703.36108 586.7
+723.32837 1915.6
+727.44891 815.7
+730.96149 744.7
+731.15295 707.2
+734.01648 879.9
+739.03265 1041.3
+742.30353 600.5
+744.84412 834.5
+754.97290 876.2
+755.74127 866.8
+770.99188 691.3
+778.40796 7577.7
+779.41125 2422.7
+782.28571 797.8
+787.36633 656.5
+790.24719 727.1
+792.87048 646.0
+795.64563 1193.1
+802.28467 702.2
+807.89142 645.5
+838.35944 2897.7
+840.46594 957.6
+844.41919 914.5
+856.43256 1098.9
+862.06488 593.6
+893.43335 3378.1
+894.43488 1731.1
+897.44153 1646.5
+898.45984 1134.8
+898.58850 932.3
+903.45441 946.5
+904.96277 1590.8
+905.46979 813.0
+918.31195 728.0
+928.07318 679.3
+953.37952 1882.6
+953.49036 1138.0
+953.98987 1419.0
+954.49414 1321.0
+990.48645 15764.4
+991.48981 6041.3
+992.26251 748.3
+992.49152 1662.9
+1031.42627 1490.7
+1048.45227 1303.0
+1049.45154 872.5
+1066.46948 4119.9
+1067.47253 1146.4
+1087.54138 16581.7
+1088.54407 5669.3
+1089.54333 981.7
+1126.55249 1089.5
+1144.56079 56952.0
+1145.56360 23994.6
+1146.56506 3928.9
+1147.56177 957.5
+1158.55701 652.8
+1188.25317 802.0
+1195.51660 1024.6
+1198.25842 3414.4
+1213.53223 2967.2
+1214.04053 722.5
+1214.53711 924.4
+1319.03345 696.4
+1525.47571 1067.7
+1604.97302 599.1
+1870.07581 894.6
+1876.56226 852.4
+1876.80017 725.5
+1879.01782 1894.5
+1879.48389 19778.4
+1879.96448 2245.2
+1882.19336 668.6
+1897.08643 664.4
+1907.05701 7801.3
+1930.67310 874.4
+1984.26147 824.0
+S	2394	2394	548.5289796
+Z	4	2190.08462
+167.90456 3201.0
+169.49051 3383.3
+171.63512 3831.8
+178.63985 2665.3
+187.70952 2887.4
+188.19231 2866.7
+188.22780 3344.5
+188.25197 6456.0
+188.29074 12845.7
+188.30081 10973.1
+188.31253 10539.5
+188.32741 5170.0
+197.69443 3416.3
+198.91501 4391.8
+199.23276 3423.6
+199.28391 8410.3
+199.29196 9251.0
+199.30023 9852.5
+199.30943 5659.0
+199.31743 5049.1
+199.38957 5328.0
+200.85139 3734.4
+244.61438 2978.9
+252.69815 3038.8
+254.69138 3307.6
+256.17007 3582.4
+277.14539 12435.8
+319.03467 3040.8
+345.05933 3226.3
+350.66592 2925.7
+359.16992 6768.1
+367.68298 11262.6
+376.68845 5712.3
+381.67853 5226.8
+387.20349 4053.8
+396.89227 3057.3
+403.25412 3233.3
+429.72797 5181.8
+454.59341 3448.5
+456.23053 4276.2
+464.90985 4958.5
+470.91278 72413.6
+471.24741 54020.5
+471.58188 21949.1
+471.91809 5266.9
+473.60800 3693.6
+479.72571 4864.2
+479.97812 7058.6
+482.91779 3757.6
+483.98642 8124.3
+487.99051 5708.5
+488.24179 10480.6
+488.49057 6037.7
+501.23914 3537.4
+519.93610 17960.2
+520.26971 24995.2
+520.60443 8594.2
+520.94153 6094.0
+531.31610 6829.8
+531.60791 5248.0
+532.46906 9127.9
+535.26678 9824.6
+535.50885 10584.8
+535.76337 8504.6
+584.61078 5334.2
+590.29071 5567.9
+590.62317 4647.8
+595.96564 5330.3
+596.30438 5626.0
+599.24481 5487.4
+615.28674 47786.8
+616.26337 18064.8
+617.26343 6840.6
+633.29761 79672.4
+634.30164 21514.9
+639.30249 6473.7
+639.63855 5915.1
+650.31763 9537.6
+650.65259 8528.4
+650.98395 8651.0
+657.33984 11635.0
+657.83832 9707.6
+676.65167 5345.0
+689.02869 3437.5
+695.37799 3534.3
+696.85962 24465.1
+697.36237 28533.1
+697.86389 8210.9
+705.86603 322641.2
+706.36743 275407.2
+706.86853 108406.0
+707.37158 22731.3
+707.86279 5685.2
+725.69531 4374.1
+762.35687 7573.0
+763.33380 12182.3
+764.34680 5670.4
+779.89740 3787.0
+780.37213 4553.6
+795.64789 3850.6
+810.39520 4031.9
+810.88739 4153.3
+844.04797 3713.6
+858.12061 3415.7
+966.31824 3011.3
+1198.06580 15052.3
+1402.27539 4382.1
+1626.55505 3850.8
+1761.37878 3078.7
+1828.93835 2962.2
+1878.82971 6799.8
+1879.56677 107596.6
+1880.21680 6904.3
+1881.81421 4025.4
+1907.03015 40503.7
+1918.89441 4481.0
+1973.54932 3251.0
+S	2395	2395	697.1038246
+Z	4	2784.384
+183.49297 34468.5
+187.69968 38601.2
+188.25502 36026.0
+188.27316 52873.1
+188.28218 56515.8
+188.29198 74315.6
+188.30215 57753.3
+188.31305 41481.8
+188.31831 33027.1
+199.19640 62240.6
+199.27496 74700.1
+199.29488 175127.1
+199.31461 40808.2
+199.39220 60189.6
+211.03584 31443.0
+235.82986 36131.7
+244.44812 31750.0
+255.29164 43100.7
+264.25537 33242.5
+280.18893 39986.6
+281.99884 33565.2
+306.06870 36190.3
+318.35577 37922.9
+350.28378 42003.9
+385.46655 40365.4
+395.96744 36118.3
+402.45190 46945.0
+427.56018 39887.9
+465.00153 40176.2
+472.05334 41644.7
+482.89557 45560.4
+484.21469 36359.4
+522.28064 44520.2
+532.49060 118639.7
+544.77374 61084.1
+548.95471 35026.0
+549.16577 45283.3
+583.59296 42407.0
+606.70227 42910.6
+609.10419 42983.8
+635.99481 418470.1
+636.32971 515511.3
+636.66437 357523.3
+636.99792 161538.3
+649.91443 36884.1
+661.84741 58455.5
+665.01093 66183.5
+676.65741 79745.6
+718.27246 44233.2
+746.56616 39599.6
+779.81500 43576.9
+840.39746 46017.0
+844.75513 61565.6
+856.43365 70940.1
+856.93756 171548.5
+857.45526 51042.3
+858.40271 61125.4
+876.40582 69277.7
+877.41235 49079.1
+904.96063 159586.9
+905.46161 210453.5
+905.97601 83583.1
+953.49457 87803.2
+953.99011 123881.0
+954.49420 85659.3
+954.99725 70998.8
+1145.56567 54348.4
+1198.09460 196724.2
+1379.56104 36756.3
+1846.13684 45940.9
+1879.27710 168344.0
+1879.58789 1231174.8
+1880.58655 66152.5
+1883.24780 44061.3
+1893.58704 40965.5
+1907.08594 445363.4
+1930.61609 69960.0
+S	2397	2397	696.3526471
+Z	4	2781.37929
+188.23315 652.0
+188.24445 950.2
+188.26274 1022.1
+188.28426 885.2
+188.28949 785.5
+188.31049 859.8
+188.32864 542.4
+188.34180 809.9
+188.35345 541.5
+188.36240 633.3
+198.91513 1038.8
+199.21315 790.8
+199.26221 571.0
+199.27687 1076.4
+199.28955 1369.4
+199.30275 1487.6
+199.31407 1313.4
+199.33481 746.7
+207.75508 660.7
+207.94312 582.2
+226.08217 2377.5
+227.06590 2687.8
+237.08760 556.3
+237.41660 707.6
+238.69981 642.0
+244.09286 3804.8
+244.25613 663.5
+249.75458 585.6
+256.16486 571.2
+259.76074 614.1
+266.07755 955.0
+275.80438 578.1
+284.08911 749.3
+292.13123 655.9
+295.10220 752.6
+301.11392 3350.3
+310.13968 1069.3
+322.18729 10253.2
+323.18961 807.7
+339.14438 741.8
+342.22937 635.1
+351.41714 711.5
+364.11627 831.9
+373.19592 654.5
+379.14636 654.1
+381.14011 2212.4
+381.33893 613.4
+408.86447 690.0
+427.52731 810.8
+427.68240 648.7
+435.27097 4683.9
+436.21494 668.7
+436.27347 775.7
+440.90872 655.2
+460.18088 792.9
+478.19223 1898.9
+479.11243 712.3
+489.25046 629.1
+489.57397 712.0
+495.21405 883.1
+495.74908 2184.3
+496.24741 1031.8
+499.05270 669.3
+502.31720 633.8
+532.46631 1882.3
+535.26648 1212.0
+538.24890 1614.7
+539.02716 594.2
+544.27350 90914.8
+544.77478 47398.5
+545.27625 11610.5
+545.62769 845.3
+545.77911 1379.0
+549.12537 874.9
+550.29742 8820.8
+551.30072 1423.1
+555.36353 1570.2
+564.27893 855.3
+572.78394 52897.8
+573.28558 25926.2
+573.78741 6185.6
+575.20630 2729.6
+580.30939 957.9
+585.80908 3814.9
+586.05914 3999.0
+586.30927 3849.1
+586.55939 1310.8
+588.29724 1084.7
+588.90582 691.7
+592.23669 748.6
+610.24377 2444.0
+611.30579 765.7
+612.15643 698.5
+626.40179 1394.0
+627.80988 1486.9
+628.30219 1513.8
+630.38159 724.7
+635.99524 6509.9
+636.32971 7444.1
+636.66376 4466.4
+636.81335 4496.5
+636.99628 1680.6
+637.31525 1806.4
+638.83295 979.5
+640.99902 656.1
+641.80243 1516.8
+646.73773 643.0
+650.08154 545.8
+653.27936 864.4
+661.34515 2221.3
+665.32355 19430.6
+666.32727 4877.7
+667.19025 596.6
+667.80347 2216.9
+668.29779 4683.7
+668.79736 1721.0
+669.29889 791.6
+673.03387 2504.5
+673.36987 2087.0
+673.69897 1441.4
+674.93427 766.3
+676.31628 7410.7
+676.37646 1379.2
+676.64844 828.9
+676.80878 43738.3
+677.30975 25883.2
+677.81110 7378.7
+678.31134 1731.0
+696.68365 685.3
+698.85773 792.3
+713.18427 797.5
+722.44550 619.1
+723.32947 2387.6
+724.23846 684.3
+727.37872 934.5
+728.84784 785.4
+731.66840 718.1
+737.87323 809.2
+744.04529 722.7
+744.76129 861.7
+746.87115 694.8
+747.87823 897.3
+751.06006 869.1
+751.27625 775.5
+751.40179 818.4
+754.24017 648.1
+754.44312 1211.1
+755.76416 1297.6
+766.70172 630.3
+770.67188 725.9
+771.30579 1140.8
+778.40717 10244.0
+779.40948 3654.9
+782.23895 683.2
+783.61511 697.3
+784.16138 734.5
+786.09119 929.1
+795.64612 818.1
+800.20929 700.4
+803.32269 1164.7
+811.67365 775.8
+836.51086 681.2
+838.35718 3022.8
+839.36279 853.4
+839.93567 1088.1
+850.75964 715.9
+863.41577 871.1
+878.32593 678.5
+893.43604 4162.1
+894.43970 1981.0
+894.71838 606.4
+895.41345 677.8
+896.98560 845.4
+897.44012 4291.8
+898.44196 1210.8
+903.44720 1078.5
+904.96893 1046.5
+953.38116 2213.3
+953.98853 2174.6
+954.48865 1331.8
+972.47528 776.9
+990.48706 21370.0
+991.49146 10830.9
+992.49396 2314.1
+1031.42493 1159.0
+1048.45483 1938.7
+1049.45654 1696.7
+1057.27722 799.4
+1066.46667 4259.4
+1067.47412 1948.5
+1087.54065 19662.6
+1088.54382 9654.9
+1089.54858 1794.8
+1090.55945 787.4
+1126.54431 1413.9
+1127.55322 870.0
+1144.56104 70609.9
+1145.56360 34768.6
+1146.56494 8154.5
+1147.56067 949.6
+1178.51074 870.6
+1188.29602 1017.5
+1195.52649 1275.7
+1196.51733 1630.7
+1198.04578 3102.1
+1213.53320 3018.0
+1214.54614 1116.6
+1426.61487 622.2
+1459.87744 659.5
+1491.40967 671.8
+1504.28699 685.0
+1860.05066 769.9
+1879.27283 3840.3
+1879.58167 18725.1
+1879.94800 2664.1
+1880.69165 982.6
+1907.04309 7614.7
+1918.91846 733.7
+1966.49878 556.7
+1966.65894 566.8
+S	2398	2398	1879.97140793
+Z	2	3758.095
+Z	3	5636.639
+516.18195 611.2
+532.49335 1945.7
+562.75433 686.1
+595.81531 673.4
+676.65540 1120.0
+731.09827 796.6
+795.65570 963.1
+877.17596 671.8
+1004.66040 588.8
+1057.25391 814.2
+1183.48511 708.6
+1198.10034 2998.8
+1300.12878 720.3
+1403.39587 615.6
+1414.10437 586.0
+1525.32532 745.2
+1554.54578 762.9
+1777.34497 692.5
+1856.79163 619.9
+1878.55908 1138.0
+1879.30261 4464.8
+1879.56055 18732.4
+1881.10999 820.3
+1883.13330 630.8
+1883.39111 712.9
+1907.03320 7240.4
+1915.82251 720.6
+1930.54065 703.2
+S	2399	2399	697.1065746
+Z	4	2784.395
+186.67180 687.6
+188.26479 572.7
+188.27492 1100.0
+188.29027 1116.0
+188.29817 767.1
+188.30286 740.9
+188.31218 803.0
+188.32043 903.8
+198.81813 608.2
+198.91765 781.9
+199.18922 757.0
+199.20193 610.3
+199.20892 724.6
+199.28650 1663.5
+199.29974 1707.7
+199.30702 1956.4
+199.33167 855.0
+226.08142 1252.1
+227.06630 1015.9
+243.99217 605.0
+244.09236 2034.2
+257.62445 690.7
+258.70435 639.2
+259.94186 601.4
+266.07764 893.4
+271.47324 695.6
+284.20029 607.4
+301.11465 1800.2
+310.97720 607.1
+314.81866 619.5
+322.18692 4747.8
+352.69516 734.4
+381.13907 1196.5
+383.48935 771.0
+427.55655 838.3
+435.27094 2211.7
+453.11331 580.3
+482.84076 556.1
+532.48004 1762.1
+535.76910 827.0
+544.27307 31973.8
+544.77423 33800.3
+545.27563 11013.0
+545.77826 1617.8
+550.29523 4235.1
+551.30103 2246.3
+555.36145 707.2
+564.70856 623.8
+572.78363 22251.7
+573.28491 23679.9
+573.78687 6610.2
+574.28839 1327.3
+585.80750 1041.2
+586.05701 1704.8
+586.31244 1356.7
+586.56097 919.7
+595.26398 764.0
+597.20996 791.1
+610.24493 1029.9
+616.31836 610.5
+626.39990 1423.6
+628.30420 1158.3
+635.99695 1249.1
+636.65912 866.1
+636.81433 1739.0
+637.81836 1312.4
+642.30896 796.9
+661.34528 4830.8
+665.32379 7579.0
+666.32520 3065.8
+667.33606 823.0
+667.80078 1181.5
+668.29816 1548.5
+668.79810 1253.7
+673.02924 1548.1
+673.36725 2720.8
+673.69965 1780.8
+676.31567 2701.6
+676.67206 935.8
+676.80878 16245.4
+677.30914 22122.6
+677.81030 8381.3
+678.31598 1533.6
+723.32904 1532.1
+725.46906 1112.9
+751.89288 1605.9
+752.40167 743.5
+764.46576 829.5
+764.67322 681.1
+769.62390 707.8
+770.71570 749.6
+778.40833 5338.6
+779.41071 2309.8
+790.86438 664.4
+793.51080 714.4
+795.66516 854.0
+818.88605 748.4
+838.35382 1530.9
+839.94055 1152.2
+849.59735 750.2
+853.31879 560.0
+869.16522 668.3
+893.43945 1768.9
+894.43628 1751.0
+896.97437 1069.5
+897.44305 1880.4
+905.45300 725.9
+922.49316 879.5
+925.51746 638.1
+953.37915 1286.9
+953.99597 2853.7
+954.38269 744.5
+954.49152 2210.7
+954.98700 782.0
+975.72028 609.0
+990.48773 6129.1
+991.48969 6511.0
+992.50061 1701.4
+1019.66968 709.4
+1029.67041 625.9
+1048.43884 781.5
+1049.45239 976.2
+1066.46167 2413.9
+1067.46533 1563.5
+1082.44885 646.4
+1087.54053 9241.9
+1088.54224 8926.8
+1089.54785 2057.5
+1144.56030 34308.3
+1145.56311 27135.7
+1146.56287 8190.5
+1147.56274 1197.8
+1196.52747 1518.7
+1198.06738 3115.3
+1213.53247 1417.9
+1214.53845 932.2
+1519.32837 645.7
+1525.46387 788.8
+1676.49463 721.7
+1876.59302 696.0
+1878.13489 785.8
+1878.29248 712.1
+1878.87573 1893.6
+1879.37073 3990.7
+1879.64209 18574.4
+1880.43982 2248.4
+1881.62537 694.6
+1904.14758 679.7
+1907.04468 7215.7
+1923.57288 633.7
+1930.65186 1328.1
+1999.88391 644.0
+S	2401	2401	1880.07340793
+Z	2	3758.299
+Z	3	5636.945
+529.03882 669.7
+532.50293 1915.3
+657.96967 684.1
+676.65051 1402.1
+763.62750 631.1
+811.03796 750.5
+846.22308 644.0
+959.03992 661.2
+1198.11841 3343.8
+1363.53198 739.0
+1525.32214 792.3
+1572.87915 681.7
+1696.37720 659.6
+1877.76807 857.5
+1878.64429 782.0
+1879.29663 2060.0
+1879.56042 20207.7
+1883.67078 687.8
+1905.71436 714.0
+1906.92017 7416.8
+1907.30371 668.0
+1930.46008 1207.1
+1955.96533 660.1
+S	2402	2402	1907.38940793
+Z	3	5718.893
+Z	2	3812.931
+532.52869 1570.0
+595.02039 636.8
+599.06061 613.4
+746.63550 723.7
+789.86865 647.0
+795.66821 1364.2
+997.12598 634.2
+1112.97681 745.6
+1142.86755 609.3
+1190.69836 578.4
+1198.19226 3571.5
+1666.34521 654.8
+1705.49658 702.3
+1743.92383 667.8
+1876.41443 909.1
+1878.07507 835.1
+1878.68555 721.0
+1878.92334 1390.7
+1879.62048 18134.9
+1880.39087 1624.3
+1881.32703 696.7
+1881.80200 829.8
+1882.82007 782.8
+1907.06104 6802.4
+1912.94910 659.4
+1973.87476 765.9
+S	2403	2403	1765.9312246
+Z	5	8824.617
+508.03363 582.9
+532.47791 2007.7
+539.40936 714.6
+608.70679 615.3
+630.40851 948.8
+640.45624 735.1
+644.15027 613.2
+662.51959 699.2
+665.66046 682.0
+671.48792 627.0
+676.62256 801.8
+757.61273 673.4
+795.65320 1117.5
+804.83002 657.0
+856.98315 653.6
+1019.69073 766.8
+1059.41638 678.6
+1076.79346 531.5
+1187.72607 795.1
+1198.07385 3391.9
+1238.72681 623.4
+1282.35779 580.2
+1286.70642 665.4
+1425.23193 647.4
+1470.77466 882.7
+1525.40796 1122.7
+1544.10547 622.3
+1657.23438 623.3
+1838.21387 984.0
+1838.45386 1686.3
+1838.71387 4506.6
+1838.96191 2675.6
+1839.20911 2522.4
+1877.98303 817.7
+1878.48218 985.2
+1878.79138 699.6
+1879.37341 9063.2
+1879.65100 16028.1
+1882.37207 1102.9
+1907.06262 7303.5
+1930.61023 1077.8
+1961.35449 1065.9
+1999.29248 765.6
+S	2405	2405	983.9818246
+Z	3	2948.67
+Z	2	1966.116
+266.31161 580.1
+272.59515 570.4
+289.16718 645.4
+337.72333 557.9
+342.14108 751.2
+375.23413 1988.5
+377.18549 706.9
+381.37811 870.5
+383.83685 639.4
+389.95651 688.9
+427.56873 709.8
+436.59869 595.5
+438.18924 635.2
+455.22818 837.4
+473.23676 1435.6
+482.67947 679.4
+521.23859 698.3
+527.83911 615.1
+532.51221 1866.0
+538.25897 2101.9
+541.29407 773.3
+549.17529 706.6
+556.27032 2859.2
+574.27478 1007.1
+587.31323 25685.6
+588.31427 2638.4
+606.32410 1167.8
+624.33252 780.2
+630.43805 743.1
+633.33704 1237.5
+634.31903 1050.1
+651.34485 5629.1
+652.31915 1238.3
+659.38110 609.9
+669.35516 19837.6
+670.35950 3533.6
+676.65820 869.7
+687.36572 5812.4
+688.37610 885.6
+693.43011 752.5
+700.39740 19491.9
+701.39917 2545.9
+795.66766 983.8
+813.48071 3061.5
+898.99957 635.1
+904.11865 588.2
+926.55853 1946.3
+934.57153 848.3
+964.56281 846.9
+1032.66077 691.5
+1052.82568 783.1
+1065.13147 673.8
+1135.60120 1293.7
+1153.62244 1052.7
+1198.14209 3438.7
+1225.56995 662.6
+1248.69202 5992.7
+1249.69324 1974.5
+1266.69971 5018.7
+1267.69836 2112.0
+1279.73303 82712.3
+1280.73657 28124.3
+1281.74170 2970.6
+1343.73511 693.3
+1344.75891 750.0
+1361.77563 10677.2
+1362.77808 4733.5
+1379.78564 10071.6
+1380.79053 3325.6
+1392.81763 4799.6
+1393.81885 1133.3
+1470.61743 931.5
+1471.65710 1135.1
+1493.86719 4298.9
+1494.86780 2097.3
+1606.94409 783.4
+1791.97986 1162.8
+1878.04297 810.8
+1878.89001 849.8
+1879.09363 1846.4
+1879.58899 18685.5
+1880.05798 890.7
+1880.28223 1784.4
+1881.12073 1302.2
+1907.07153 7277.7
+1930.72412 942.7
+S	2406	2406	849.8308246
+Z	3	2546.217
+Z	2	1697.814
+236.06395 1190.7
+237.19577 1190.0
+247.18657 1095.9
+250.17252 973.2
+310.68466 1104.5
+329.87421 1226.9
+330.57724 984.4
+360.06830 1034.4
+371.49341 1104.3
+381.35583 1195.0
+409.71948 1178.5
+482.66638 1717.2
+483.21786 1171.5
+532.48187 3253.0
+549.15802 1559.6
+581.55878 1060.0
+586.56140 1236.9
+587.21277 2257.1
+605.22028 4257.5
+609.28888 1956.4
+621.28723 1357.3
+627.29364 2261.6
+690.30786 1319.8
+700.29657 10662.4
+715.54565 1194.2
+718.30554 23415.0
+728.32227 1202.8
+736.24762 1292.6
+757.03156 1396.7
+765.36487 2405.9
+794.04950 1630.8
+794.39813 1316.9
+795.65674 1636.2
+807.25232 1485.9
+811.93372 1857.4
+812.44250 1867.0
+813.30011 1225.5
+813.37885 1268.5
+829.73035 1137.6
+830.00415 1239.0
+831.38861 5808.9
+831.47314 1649.9
+831.92017 1792.1
+832.26703 1690.3
+858.06299 1605.3
+896.97266 1177.2
+927.63824 1270.3
+945.14362 1220.5
+978.99463 2116.6
+979.50104 2452.7
+979.99951 2598.7
+986.41034 1200.5
+1002.20990 1643.5
+1002.45685 2183.4
+1012.21570 1374.8
+1021.90558 1355.1
+1057.23767 2135.6
+1121.56702 4092.9
+1122.57141 1475.4
+1134.03748 4921.0
+1134.53259 7353.7
+1135.03564 4452.7
+1198.06799 6400.8
+1716.29077 1304.3
+1852.74023 1044.5
+1870.10217 1574.0
+1878.50183 1297.6
+1878.74731 2244.3
+1879.22192 6269.5
+1879.52881 35972.5
+1880.31116 1500.3
+1881.92078 1675.8
+1907.04846 13387.9
+1930.63013 1810.2
+S	2407	2407	1879.9748246
+Z	2	3758.102
+Z	3	5636.649
+532.50427 1773.2
+549.22467 650.4
+569.46997 548.6
+586.15735 612.4
+640.92566 600.5
+676.65552 956.5
+751.38446 619.7
+795.67395 910.5
+806.20282 586.9
+855.74811 681.0
+919.19421 651.7
+1057.28101 767.2
+1066.53308 603.0
+1198.12854 2969.8
+1678.86743 732.4
+1836.64331 627.6
+1877.13916 616.6
+1877.86548 764.1
+1879.12268 2689.3
+1879.56506 19646.1
+1879.99902 2583.9
+1907.09363 7013.7
+1930.77576 886.7
+1977.47290 688.9
+S	2409	2409	1879.96199127
+Z	3	5636.611
+Z	2	3758.076
+521.71118 761.2
+532.49072 2300.9
+535.83478 609.8
+558.84167 675.9
+676.62616 982.6
+685.84918 496.1
+694.88147 691.5
+751.95007 693.6
+767.07190 646.6
+788.14325 630.6
+795.66150 827.7
+1057.22412 850.6
+1151.24023 629.1
+1198.10291 3479.8
+1267.23303 624.7
+1437.40234 668.8
+1641.04089 644.3
+1871.38989 702.8
+1878.74854 1014.7
+1879.15308 1851.6
+1879.51587 19719.6
+1879.85559 2584.1
+1880.21790 1054.4
+1880.47449 901.6
+1907.05908 7547.5
+1930.77026 912.1
+1988.66772 582.7
+S	2410	2410	609.3448346
+Z	4	2433.34804
+165.13106 649.8
+184.30606 562.1
+188.11430 567.9
+188.27594 2037.6
+188.29515 1911.7
+188.30623 1823.2
+188.32877 779.4
+198.91573 830.7
+199.20064 898.3
+199.21689 639.3
+199.29224 1935.2
+199.29999 2673.8
+199.31322 1760.7
+199.34859 717.4
+199.39957 854.9
+199.40984 664.8
+232.11017 717.1
+240.06929 921.1
+253.60713 655.4
+254.16107 1017.1
+255.30499 607.5
+257.09546 5968.2
+258.09784 701.6
+271.38318 605.3
+271.42712 551.6
+274.12192 10014.4
+275.12625 1306.2
+276.11966 736.5
+280.20084 650.9
+281.12415 1609.4
+282.18106 2202.9
+299.13483 3619.4
+305.28485 544.1
+310.17581 1108.2
+347.20328 3028.9
+350.31128 668.8
+355.68234 6516.4
+356.18350 2986.0
+356.68481 1062.2
+362.52048 591.7
+364.72528 689.9
+373.19009 9259.7
+374.19327 1961.3
+374.52789 6277.8
+374.86240 5447.2
+375.19687 3321.5
+378.61053 562.5
+382.68036 566.9
+384.19617 590.7
+384.22351 4712.4
+385.22723 1080.3
+394.20792 834.4
+395.19351 1884.2
+407.88428 710.9
+408.19366 757.7
+409.29999 556.2
+412.21887 8165.4
+413.22220 2433.5
+429.75427 1067.2
+430.24918 816.7
+440.47528 610.5
+443.75208 1379.2
+444.25433 1420.6
+444.44974 547.4
+456.79480 649.3
+458.27997 1236.0
+469.24594 2166.1
+469.74524 1300.7
+470.24695 1275.3
+470.80148 2772.9
+471.30478 1505.4
+476.24588 3663.1
+477.24939 1686.8
+481.10464 685.5
+485.27005 1641.7
+485.77313 1242.0
+486.27771 3889.2
+486.79758 1497.4
+487.28046 1547.1
+494.27536 2014.8
+494.77655 1450.2
+496.30780 673.6
+500.29428 1337.2
+500.79288 1043.1
+503.75732 1846.9
+504.25507 1344.1
+504.42212 580.9
+504.76312 819.1
+509.74759 643.3
+511.28235 1032.1
+512.76105 2818.3
+513.26324 1947.8
+513.76294 1126.6
+514.31171 1418.7
+517.75372 3757.4
+518.25629 2211.5
+518.75446 798.1
+520.33521 1721.3
+520.83533 1164.8
+527.81512 856.2
+528.91705 612.7
+532.46216 2351.4
+536.81805 1258.3
+537.32007 2352.6
+537.81702 737.7
+541.81195 6165.4
+542.31329 6964.6
+542.81317 4275.1
+543.28613 978.8
+543.80121 1897.1
+544.26776 763.4
+544.30774 1184.8
+544.81152 624.0
+550.81689 7342.0
+550.94080 661.4
+551.31812 6337.7
+551.81970 3527.6
+552.28174 4890.6
+552.78375 8380.1
+553.28094 3989.8
+553.78644 960.4
+555.84814 651.3
+556.21002 631.7
+561.28735 116336.0
+561.78876 110994.4
+562.29004 52771.0
+562.44934 584.1
+562.79132 14599.5
+563.29498 3465.9
+575.35516 712.9
+580.82147 1058.1
+581.07074 2161.2
+581.32068 2220.7
+581.57104 1970.5
+584.35327 1268.7
+584.85901 864.1
+585.36163 1114.5
+586.35242 914.2
+586.85913 1600.1
+587.35419 1374.3
+591.34088 1091.4
+593.36133 1591.8
+621.32410 706.8
+630.43884 979.8
+642.89594 2896.5
+643.39600 1270.1
+643.90155 1294.1
+644.36450 1985.6
+644.68817 1062.4
+645.02582 957.5
+646.32880 829.9
+647.88550 779.1
+650.02917 12849.8
+650.36328 26263.8
+650.69702 20243.8
+651.03253 8459.7
+651.36456 2708.2
+651.70044 739.4
+656.89429 4090.4
+657.39429 9486.4
+657.89606 3974.0
+658.39667 1700.5
+667.36786 1782.0
+667.86554 1875.3
+676.40784 849.0
+676.63831 1218.4
+676.90997 1291.9
+677.22375 741.6
+682.05493 1041.9
+682.38483 1443.6
+687.72388 13240.3
+688.05829 24608.8
+688.39307 21300.3
+688.72632 14595.1
+689.05920 4153.4
+689.39484 1468.2
+693.34583 993.6
+699.43518 638.3
+710.35675 47423.4
+710.43201 1523.0
+711.36005 27035.3
+711.43268 1339.1
+712.36273 6640.9
+713.36646 1976.8
+715.07831 4223.1
+715.40826 5738.0
+715.74335 3605.3
+717.88739 4438.5
+718.38843 5389.9
+718.89056 2765.3
+719.39142 1412.8
+720.74701 40118.0
+721.08087 95137.4
+721.41455 91558.9
+721.74860 49930.8
+722.08356 18031.4
+722.41681 4661.7
+722.74133 914.6
+725.94269 978.2
+726.94415 1850.6
+728.44299 3276.7
+729.44531 1540.7
+750.85883 2848.0
+758.92645 4448.7
+759.42871 6644.2
+759.92786 4797.0
+760.42676 1572.1
+769.08850 833.4
+769.42932 772.5
+774.08862 2986.5
+774.42487 9461.1
+774.75745 10223.0
+775.09259 4724.3
+775.41980 3388.9
+775.75494 908.7
+795.65271 853.6
+799.50763 713.5
+801.38025 9619.7
+801.88208 3761.7
+809.50677 1092.6
+810.50317 989.5
+823.44312 3210.6
+824.44684 1665.2
+825.44708 869.3
+827.51257 7344.6
+828.51593 5953.1
+829.52014 2543.1
+839.46033 631.1
+841.52917 1653.6
+842.52905 1305.7
+875.21686 718.5
+875.44904 588.1
+886.49695 2020.7
+887.49890 1906.2
+900.41034 707.4
+937.48236 3427.6
+938.48676 2451.5
+940.59674 9434.5
+941.59882 8087.1
+942.60370 3278.1
+943.60651 1015.0
+974.54944 811.7
+975.04553 1991.0
+975.54266 1795.4
+988.53680 1233.5
+994.04456 626.2
+999.57794 2017.8
+1000.57562 1188.8
+1001.58435 1120.9
+1024.51538 1460.7
+1025.51770 1758.7
+1039.66443 13478.8
+1040.66821 12749.8
+1041.67126 5767.8
+1042.67163 1576.4
+1057.24072 896.0
+1082.62170 1504.3
+1083.61682 1758.1
+1100.62744 3692.2
+1101.63123 3431.0
+1102.63013 2004.3
+1119.41199 654.1
+1121.56885 16880.9
+1122.57104 15769.8
+1123.57361 8200.9
+1124.57385 2387.7
+1161.30542 638.2
+1198.03381 3884.5
+1199.70471 1828.0
+1200.69202 2144.6
+1201.69678 784.6
+1213.71045 2593.6
+1214.71472 3461.5
+1215.72424 1679.6
+1216.72156 793.6
+1222.02295 723.6
+1238.72412 830.3
+1256.50476 843.8
+1288.93433 613.7
+1312.77075 1671.5
+1313.77417 1856.0
+1314.79041 1261.9
+1452.88660 697.3
+1471.61328 880.4
+1525.51538 915.5
+1870.16040 758.1
+1878.34595 865.3
+1879.52539 21341.5
+1880.52771 827.0
+1880.78125 889.5
+1882.32251 756.0
+1907.11841 7967.2
+1926.20142 773.1
+1930.70886 1120.4
+S	2411	2411	739.135991267
+Z	3	2214.133
+Z	2	1476.424
+199.21025 697.4
+199.25757 656.1
+199.26869 834.2
+199.28511 1269.2
+199.30014 1936.1
+199.31604 933.4
+199.32645 1081.3
+199.35147 680.4
+199.37721 805.9
+199.40863 598.6
+210.40703 556.5
+211.62100 569.2
+213.09874 599.5
+223.69328 640.5
+226.43224 720.8
+235.14484 7545.4
+236.14729 1064.3
+238.38933 693.3
+241.20703 787.1
+258.85815 834.8
+273.15894 880.5
+273.23306 732.9
+273.99106 645.7
+299.17636 993.6
+302.15005 1449.0
+303.17789 1766.9
+307.14444 1410.4
+312.15750 1054.4
+321.19904 902.1
+323.86768 548.9
+344.19882 2036.7
+349.19208 1376.7
+356.19864 1770.1
+357.20367 817.4
+373.22412 14513.9
+374.22784 3630.1
+378.16675 16303.8
+379.17078 3909.2
+383.20325 791.3
+387.27292 1541.4
+390.21036 25413.3
+391.21478 3858.8
+393.24796 709.7
+401.21939 9830.2
+402.22391 2558.5
+406.21561 1151.1
+411.22284 1248.5
+427.23395 1587.4
+427.56155 610.6
+428.73056 10373.3
+429.23779 2306.7
+429.73291 1487.3
+430.20685 2154.0
+445.24533 1205.1
+446.23413 815.0
+447.23181 68736.1
+448.23523 15053.7
+449.23785 2664.8
+461.20044 1054.6
+463.25562 3081.4
+464.26160 903.2
+467.22583 1607.0
+469.28369 888.2
+470.20038 597.5
+470.22708 608.0
+475.21915 1444.0
+475.27225 5708.7
+476.27448 1686.2
+477.21426 720.5
+478.26440 704.1
+484.25732 1529.9
+488.25458 4029.3
+488.75482 1260.8
+491.25052 4540.6
+497.25983 6023.4
+497.76181 3013.7
+498.26147 1051.8
+503.26590 6289.0
+504.27002 3095.1
+516.31482 2555.2
+517.31439 681.2
+520.29248 11707.3
+521.29633 4991.8
+528.28754 1508.4
+529.27032 1180.0
+530.27643 5323.8
+531.28076 1786.9
+532.53400 1597.7
+540.31976 3063.0
+541.32214 758.5
+546.30023 60090.1
+547.30255 17759.5
+548.28613 29580.1
+549.29065 10793.8
+550.29407 1491.5
+553.27686 1176.6
+558.33142 3505.0
+559.33374 1127.7
+574.14832 604.1
+574.28748 4499.1
+575.28577 1576.8
+585.81128 1760.9
+586.05792 1043.9
+586.30634 1996.3
+586.55841 707.9
+587.30096 1156.5
+592.29755 5363.9
+593.29993 1766.2
+597.34021 4282.2
+598.34351 1524.6
+606.33356 1209.9
+613.31195 1317.5
+615.35260 1790.1
+617.32318 820.8
+617.79047 728.3
+620.05334 644.4
+621.34100 1676.9
+624.84137 18258.4
+625.34253 15822.7
+625.84314 7797.5
+626.34180 2701.9
+629.33044 1671.6
+631.32452 20144.4
+632.32831 8421.3
+633.33331 1394.3
+633.84650 48822.6
+634.34790 37539.2
+634.84918 14082.1
+635.35040 4087.8
+635.85150 819.9
+644.34570 1010.2
+644.99988 2097.5
+645.32910 2395.2
+645.66846 1194.5
+649.33496 14609.2
+650.33911 4478.6
+651.33978 1884.7
+653.35065 3915.5
+653.85303 3731.6
+654.36108 2177.3
+662.35822 4933.0
+662.86151 3258.6
+663.35327 3086.0
+670.33545 2874.4
+670.83832 2091.9
+671.34216 1046.9
+674.32202 1011.5
+676.67047 1174.0
+679.34406 14717.9
+679.84497 9622.0
+680.34833 4520.1
+680.84467 1092.4
+681.33435 772.7
+682.84656 1844.6
+683.34552 1811.8
+689.13300 695.6
+689.33411 1748.2
+689.54364 818.1
+689.73822 1533.1
+691.35364 3042.4
+692.32886 1706.6
+694.02271 919.2
+694.67896 848.7
+695.88049 741.3
+696.31177 696.8
+699.38879 2332.1
+699.68817 2871.8
+700.02411 1239.8
+700.35315 752.4
+700.38763 981.0
+700.69110 1109.8
+701.01477 934.5
+701.35742 781.3
+702.37897 4238.1
+703.38446 3479.9
+704.38550 2232.3
+705.69147 1084.3
+706.02661 1341.2
+709.36365 108074.6
+710.36700 42585.6
+711.36969 10562.3
+711.74567 730.5
+712.37384 2240.1
+713.37012 840.6
+731.13306 1004.0
+735.89209 4361.2
+736.39337 4711.6
+736.90253 1888.1
+737.39447 1038.4
+738.71234 1481.3
+739.05084 2454.9
+739.38165 1256.6
+739.71802 1715.4
+741.09088 801.9
+744.40582 5366.1
+745.41180 3365.6
+746.81567 575.6
+755.77405 694.5
+756.37799 2298.3
+756.88062 2518.8
+757.38483 1289.0
+757.53394 1320.7
+757.88306 740.1
+759.40002 5954.3
+760.40479 4479.5
+761.40637 2079.9
+762.41968 26975.1
+763.42291 11290.6
+763.79303 920.4
+764.42712 3223.1
+766.39191 3234.6
+767.38544 1421.5
+768.76892 743.8
+771.62396 783.3
+773.39093 694.6
+775.82861 771.9
+778.41528 1355.7
+781.25177 830.3
+783.13025 1033.1
+784.14429 807.2
+787.23682 770.8
+788.39502 835.9
+788.91565 1078.9
+789.41608 1750.6
+794.70422 790.1
+795.65643 1486.4
+796.17804 915.7
+801.64728 660.8
+802.92389 886.0
+803.42310 854.9
+803.44531 785.5
+804.44025 1475.7
+805.42249 883.4
+811.42206 74420.6
+811.92297 67075.8
+812.42474 33190.0
+812.92584 13529.8
+813.42584 3036.5
+813.87256 772.2
+817.04004 667.4
+820.45953 2552.3
+821.47070 1864.4
+822.44830 85531.7
+823.45105 38959.9
+824.45300 10584.1
+825.46350 1874.6
+828.43463 716.6
+838.44519 1386.2
+839.44403 2834.0
+839.93610 1232.7
+840.45105 776.7
+841.84650 706.1
+849.41498 1175.3
+852.94019 6891.0
+853.44263 6239.8
+853.93982 2826.5
+854.44824 858.5
+856.45349 68929.4
+857.45612 30924.0
+858.46063 8075.7
+859.46851 4105.4
+860.48077 1788.8
+860.63397 979.2
+860.95471 1286.5
+861.45099 1811.0
+861.94568 100635.7
+862.44672 103779.0
+862.94788 57457.6
+863.44965 22684.3
+863.95111 5696.1
+864.28149 758.8
+864.45129 1979.1
+867.43683 3403.3
+867.58057 690.9
+868.44019 1510.0
+877.48419 4338.0
+878.48883 2548.7
+879.47253 3320.7
+880.47430 2158.7
+881.46454 1360.5
+889.14880 667.7
+889.47235 1417.6
+893.11237 802.5
+897.49023 1602.6
+898.48047 1168.5
+901.00586 637.0
+905.48462 7117.5
+906.48743 3925.3
+907.47302 20245.6
+908.47583 10924.3
+909.48065 8013.5
+909.98273 4687.5
+910.48315 4003.9
+911.48389 2439.6
+911.98718 2793.2
+912.48511 1303.4
+918.48816 40651.7
+918.98901 41657.9
+919.49127 23932.8
+919.99194 9092.3
+920.49475 3481.4
+923.49597 216621.8
+924.49835 114820.7
+924.97546 1277.8
+925.49359 46621.6
+925.98926 778.3
+926.48907 17998.7
+927.49261 5287.2
+928.49109 1218.9
+933.74591 680.5
+933.81812 623.5
+934.50739 1075.3
+940.49353 1090.7
+958.48657 3869.1
+958.98761 1186.2
+959.48578 1764.9
+962.51215 957.9
+963.96643 854.8
+966.05219 802.7
+966.99634 22117.5
+967.49683 22332.7
+967.99683 12915.6
+968.49567 6867.1
+969.00104 2193.6
+969.48267 900.5
+974.93378 754.7
+975.38031 798.3
+975.48218 1774.9
+976.00067 204901.0
+976.36682 1115.2
+976.50165 236125.7
+977.00311 136408.2
+977.50470 59499.2
+978.00665 19248.5
+978.50464 4504.7
+979.01361 1466.4
+979.53943 1182.2
+979.75446 805.3
+980.12927 788.1
+980.52289 2771.0
+981.54358 1343.3
+988.55334 796.3
+991.49860 1157.9
+993.51288 12215.9
+994.51660 6135.6
+995.51355 2091.3
+996.55829 3102.5
+997.55792 2220.5
+998.57617 929.4
+1006.54114 27274.9
+1007.54333 16742.1
+1008.54565 6476.3
+1009.54590 1512.5
+1020.01196 865.0
+1024.55164 76732.0
+1025.55469 44960.8
+1026.55762 14512.6
+1027.56128 3262.8
+1034.53943 1488.9
+1035.52991 1137.8
+1044.02881 1072.1
+1048.52856 3241.9
+1049.02991 4376.4
+1049.52930 3641.6
+1049.78284 739.6
+1050.03625 1006.4
+1050.53064 1259.7
+1051.03186 1205.1
+1051.51807 1290.2
+1052.55298 22697.3
+1053.55566 16222.6
+1054.55725 6495.8
+1055.55591 1204.9
+1057.53198 24742.6
+1058.03369 28791.7
+1058.53467 18219.4
+1059.03674 8301.7
+1059.53650 4377.6
+1062.52539 1615.9
+1063.01929 1913.7
+1063.56384 16329.7
+1064.56628 11599.2
+1065.56604 3908.6
+1067.56140 1972.5
+1068.72546 781.6
+1070.56396 216776.2
+1071.56628 129460.0
+1072.37915 779.1
+1072.56946 41891.5
+1073.57190 10168.4
+1074.57214 1830.1
+1077.53833 1478.2
+1081.57300 56013.5
+1082.57629 33184.4
+1083.57910 10782.8
+1084.58545 2675.9
+1095.54871 5531.3
+1096.55078 3636.5
+1097.55505 1228.9
+1104.54663 2339.8
+1105.54089 1326.3
+1122.56067 1214.7
+1150.59729 3419.9
+1151.61035 3533.4
+1152.62488 2431.3
+1162.37769 666.1
+1168.60657 7080.2
+1169.63013 16122.2
+1170.63416 10686.3
+1171.63818 3649.1
+1172.64331 995.7
+1198.19177 3546.1
+1202.61047 1228.5
+1220.61841 5654.5
+1221.62109 4164.4
+1222.64197 1145.2
+1266.68494 7238.2
+1267.69019 5546.5
+1268.68677 1425.3
+1278.65247 4003.4
+1279.66321 1585.9
+1280.65588 1452.7
+1296.66443 10785.5
+1297.66565 7805.1
+1298.66895 2967.5
+1323.71082 3693.1
+1324.71240 2306.6
+1337.31274 764.7
+1357.68054 8280.8
+1358.68176 5531.9
+1359.69006 3286.9
+1535.77466 645.1
+1564.72437 721.6
+1777.06116 749.7
+1877.75354 837.5
+1878.14014 1004.4
+1879.34460 2398.9
+1879.62390 19976.1
+1881.12500 691.3
+1881.44067 654.0
+1907.07422 7277.0
+1930.65894 920.4
+S	2413	2413	1879.99440793
+Z	3	5636.708
+Z	2	3758.141
+532.56018 1917.5
+630.42786 882.0
+731.14862 835.6
+957.38928 610.7
+1057.19958 707.6
+1188.27515 746.2
+1198.25720 3444.8
+1392.12366 604.7
+1681.59949 624.2
+1878.35718 844.7
+1878.82446 2038.8
+1879.45837 18167.5
+1879.72864 5656.2
+1880.15173 1101.7
+1880.46521 1224.7
+1891.92200 657.6
+1907.04578 7460.4
+1912.51611 633.8
+1996.95996 685.4
+S	2414	2414	1907.43140793
+Z	2	3813.015
+Z	3	5719.019
+532.60590 2185.0
+676.66290 1285.2
+729.21008 528.6
+731.14587 779.3
+754.56812 620.5
+781.36298 576.0
+795.65997 808.1
+1004.00897 571.5
+1057.26123 599.8
+1198.35242 3368.4
+1431.15967 600.7
+1877.62317 785.7
+1878.80615 1321.7
+1879.17444 965.7
+1879.60657 19637.3
+1880.41492 1557.4
+1881.63159 799.6
+1907.05420 7207.2
+1907.45544 579.5
+1930.67664 1148.9
+S	2415	2415	609.3415996
+Z	4	2433.3351
+155.88947 619.3
+165.75937 530.1
+165.76517 556.6
+176.27829 511.8
+188.25060 600.6
+188.26170 733.0
+188.27159 1192.6
+188.29146 1219.6
+188.30177 1278.3
+188.30865 952.6
+188.31750 718.5
+188.32945 604.5
+188.37183 524.6
+191.39644 713.0
+191.77118 612.1
+198.91811 598.3
+199.18468 751.1
+199.20967 820.7
+199.26208 642.0
+199.28008 1480.1
+199.29282 890.9
+199.30067 734.9
+199.30850 2373.1
+199.36284 596.2
+199.40660 1017.3
+205.07605 590.0
+205.50771 570.0
+211.48842 511.3
+230.56300 567.7
+235.60568 508.9
+238.70546 574.1
+248.75742 651.0
+250.97964 545.2
+254.03389 564.5
+257.09525 1106.9
+271.46350 565.4
+271.62247 725.4
+271.77832 581.0
+274.12180 3869.1
+286.44043 572.6
+310.17502 2587.4
+333.17603 1247.3
+347.20316 917.0
+350.29166 675.1
+355.68182 2679.0
+359.23889 1706.2
+369.22549 1313.8
+373.18997 4022.7
+374.52728 2743.5
+374.86304 1329.8
+381.27295 573.9
+381.37201 598.3
+384.22299 654.5
+385.29535 534.4
+402.71396 762.2
+412.21765 2309.3
+417.28458 513.2
+439.72128 1255.7
+442.29477 2663.8
+443.75204 1007.0
+446.26025 2347.7
+453.71991 3264.4
+454.21860 1836.4
+458.27911 954.9
+459.25894 1547.1
+469.24643 745.0
+470.80246 1378.1
+482.66519 672.9
+485.26791 978.5
+486.29395 1814.0
+488.28052 1689.5
+494.27753 847.1
+500.29272 880.1
+501.25336 960.9
+502.54144 611.9
+503.75421 1101.0
+510.07971 605.7
+510.26047 2542.3
+510.76102 1962.9
+517.75250 903.1
+530.93652 660.3
+532.57520 1261.2
+534.27911 500.6
+536.81958 1453.4
+537.95721 573.4
+541.81073 3044.9
+542.31317 859.2
+543.27887 734.6
+549.15997 860.0
+550.81635 5887.6
+551.31897 3148.7
+551.81903 903.9
+552.28333 2280.7
+552.78290 1265.5
+553.29108 579.4
+559.34247 3809.2
+559.81616 664.6
+561.28687 59488.0
+561.78821 27303.3
+562.29041 5471.3
+567.28491 1456.7
+579.81610 3148.1
+580.06769 6176.0
+580.31842 2601.7
+580.56915 2638.5
+580.81915 1988.3
+583.34979 705.4
+587.32428 1102.9
+587.57031 1537.0
+587.81757 1450.2
+588.07361 945.6
+591.35718 2448.5
+592.07831 1018.4
+592.32556 1186.4
+593.05316 636.5
+593.35944 1784.4
+612.00592 601.9
+632.80109 1872.8
+633.30658 672.2
+642.89374 1370.8
+644.03516 751.6
+644.36011 1163.6
+650.02924 10625.3
+650.36267 9256.8
+650.69489 3195.8
+651.38739 579.2
+656.89404 3102.1
+657.39325 1742.5
+667.36847 948.2
+667.86456 1027.0
+669.33112 2046.3
+669.39362 880.5
+669.73413 720.4
+672.68433 908.1
+673.00964 736.5
+673.30487 1633.2
+676.63208 1094.6
+682.36578 1837.1
+682.86609 1423.6
+687.72345 10894.5
+688.05756 11170.6
+688.39136 3289.2
+689.34589 1516.9
+690.38116 2084.6
+710.35547 11628.0
+710.42316 1032.8
+711.36011 3053.2
+714.73688 1284.9
+715.07214 1859.4
+715.40662 1338.8
+717.88757 3083.3
+718.39160 1592.8
+720.74591 42638.0
+721.07990 40583.6
+721.41418 16047.2
+721.74707 3174.1
+722.08185 709.3
+722.83069 629.5
+725.89313 1003.8
+725.93683 1226.0
+726.39301 643.4
+728.44965 1196.4
+733.01788 921.6
+733.35712 1564.4
+733.69055 1217.5
+737.38739 653.5
+737.88074 700.6
+740.40417 2280.4
+740.73920 2686.8
+741.07355 1030.3
+745.88794 1114.1
+746.07739 3613.4
+746.41296 4690.4
+746.74445 3949.1
+747.07910 1094.7
+748.71692 5870.5
+749.05231 7722.9
+749.38574 3704.4
+749.71893 1148.2
+749.91077 867.5
+750.91742 1421.3
+758.92578 31074.0
+759.42755 19119.6
+759.92706 4426.5
+760.43353 848.5
+772.75507 3384.5
+773.08881 4231.0
+773.42267 3192.6
+773.76227 859.1
+774.09131 2266.5
+774.42859 2598.7
+774.75189 734.4
+781.40106 688.5
+781.90405 817.5
+783.08868 1740.1
+783.41760 1917.4
+783.76221 1247.4
+788.75049 707.7
+789.09857 922.9
+789.44122 847.6
+793.85529 653.8
+795.66602 941.8
+797.37225 998.1
+804.42749 5122.8
+805.42786 2231.4
+807.35767 1460.7
+808.38885 642.6
+823.43671 1043.9
+827.51196 3164.6
+838.40070 1014.7
+838.91272 1043.6
+839.41608 1103.7
+840.45752 1434.7
+886.49200 1278.6
+900.49500 1000.0
+903.45490 772.8
+903.68494 752.6
+906.42749 3726.4
+907.43359 1292.9
+917.51117 3415.1
+918.51666 869.1
+937.47772 943.7
+940.59662 3266.4
+941.60175 1118.4
+975.02856 893.5
+975.52869 655.1
+1039.66211 3860.5
+1040.66760 2235.8
+1057.23877 967.5
+1100.61987 1622.1
+1113.46692 594.2
+1121.56897 5660.2
+1122.56897 2288.9
+1188.32397 787.1
+1198.28845 3076.1
+1209.56970 639.6
+1213.71033 1717.5
+1214.71191 691.9
+1303.69885 626.6
+1312.78479 1194.1
+1348.19104 546.3
+1525.45178 1020.0
+1876.03406 554.0
+1876.26990 664.3
+1877.70703 791.8
+1878.30188 864.6
+1878.82056 1266.1
+1879.10571 1977.8
+1879.51550 20175.5
+1879.91589 2204.0
+1881.23401 1104.1
+1907.12451 7111.2
+1930.65784 1136.5
+1955.46265 744.3
+S	2417	2417	1190.5392321
+Z	4	4758.12563
+326.42975 657.5
+342.29596 667.8
+350.27628 695.0
+368.27875 576.6
+389.18182 1611.5
+482.68799 764.3
+483.79623 579.6
+488.24832 799.5
+490.26636 746.6
+532.55823 1870.7
+548.39172 578.2
+561.52649 719.1
+573.30078 1056.3
+614.74200 2802.4
+615.24225 1988.2
+615.74457 951.3
+623.74982 1852.9
+624.24786 885.2
+630.44611 932.9
+656.17474 769.8
+676.65375 1182.8
+738.69037 666.5
+741.28607 608.9
+795.67096 855.0
+802.41339 852.4
+821.68555 661.0
+838.28180 781.8
+839.28204 669.4
+875.13934 641.3
+881.26312 637.6
+903.33313 831.2
+976.45947 759.4
+976.78162 926.0
+977.11591 1034.0
+1009.47742 1162.0
+1009.80878 1611.3
+1011.48114 675.0
+1011.97028 1042.6
+1013.38727 909.9
+1016.32751 1565.2
+1017.32794 1018.7
+1018.32922 924.9
+1031.40271 906.5
+1034.32703 1352.0
+1035.34619 920.7
+1040.82129 870.1
+1041.13428 619.7
+1046.48962 1689.7
+1046.81836 1139.8
+1052.15686 725.4
+1052.81848 1018.4
+1053.48071 639.1
+1064.22046 908.5
+1064.45374 864.2
+1068.47607 1518.4
+1068.72449 2031.0
+1068.97644 1217.5
+1069.23779 912.4
+1084.51709 1339.0
+1085.00623 1687.8
+1085.49304 1223.9
+1086.00830 907.2
+1091.50879 715.1
+1097.37366 918.5
+1098.37573 1597.0
+1105.82471 1402.7
+1106.16699 1196.9
+1106.51746 2103.3
+1106.84692 1766.9
+1107.18933 848.2
+1108.99023 1127.4
+1109.24072 1186.7
+1109.75293 802.8
+1109.99878 890.5
+1115.38940 2365.4
+1116.39209 2690.9
+1117.38843 2532.9
+1118.38171 996.5
+1119.48254 1075.3
+1123.99878 1955.1
+1129.00000 922.6
+1132.51721 1061.1
+1132.86133 2597.8
+1132.99927 3406.7
+1133.17444 5137.1
+1133.27234 3441.0
+1133.51990 7336.4
+1133.75842 5066.8
+1133.84814 5150.9
+1133.99646 4291.5
+1134.17871 2058.1
+1134.26672 1884.4
+1134.51270 1513.0
+1134.86279 1184.9
+1137.25378 2408.1
+1137.49939 10163.3
+1137.75061 17239.1
+1138.00146 15944.1
+1138.25085 9285.7
+1138.52576 14212.1
+1138.86438 35314.4
+1139.00366 2035.3
+1139.19861 45416.3
+1139.53284 39942.1
+1139.86768 26939.5
+1140.20105 14536.6
+1140.53552 7222.7
+1140.86963 1892.1
+1146.43640 1189.9
+1153.02722 1413.0
+1153.52466 2128.1
+1154.03638 2268.5
+1154.52734 1276.5
+1160.53259 764.3
+1162.27209 2822.3
+1162.52148 3162.7
+1162.77051 3165.2
+1163.01843 2586.9
+1163.27344 2585.9
+1163.51758 1318.1
+1163.75989 831.7
+1164.00867 883.1
+1166.21484 1432.2
+1166.55554 1720.0
+1166.88440 1237.7
+1167.21448 952.8
+1167.86780 658.7
+1198.24084 3515.3
+1226.01050 660.2
+1228.47009 2901.9
+1229.48181 2759.5
+1230.47400 1468.1
+1231.47974 784.6
+1232.45447 818.5
+1236.09009 897.7
+1243.25439 2202.9
+1243.57996 2348.1
+1243.91797 3870.1
+1244.25452 3330.7
+1244.58752 2033.3
+1246.48267 1111.1
+1247.50415 1514.8
+1263.07275 2179.9
+1263.57336 3575.3
+1264.07568 2811.6
+1264.57959 1898.9
+1267.25940 908.0
+1267.58484 851.7
+1267.92566 1405.5
+1280.58984 883.1
+1280.93994 1799.1
+1281.25439 1426.4
+1281.60352 944.6
+1285.94348 1928.0
+1286.26929 7093.0
+1286.60425 9253.2
+1286.93860 8364.3
+1287.27039 3530.7
+1287.61584 3333.9
+1287.94189 900.6
+1298.59070 992.4
+1306.59094 2500.2
+1307.09790 2629.5
+1307.59229 4176.6
+1308.10315 1931.7
+1308.59875 1309.0
+1310.52405 2110.8
+1311.52002 1923.5
+1312.51953 941.4
+1313.51965 738.1
+1327.54712 5485.8
+1328.54150 9396.3
+1329.54211 5975.8
+1330.54016 2833.2
+1331.54053 1494.7
+1345.56030 5127.4
+1346.56177 4234.1
+1347.55127 3205.5
+1348.56848 1127.6
+1355.10156 1049.5
+1355.61328 2039.7
+1356.09900 1375.1
+1356.61328 1039.7
+1357.08789 772.1
+1363.60852 5368.9
+1364.11792 8532.8
+1364.61633 10344.5
+1365.11951 6800.1
+1365.61670 4024.2
+1366.12085 1353.1
+1384.26782 1016.5
+1384.60352 3150.8
+1384.94043 2085.0
+1385.27283 1922.1
+1385.62292 1193.0
+1386.25513 638.4
+1389.95239 1734.1
+1390.27881 6776.5
+1390.61475 11894.0
+1390.94739 13085.8
+1391.28113 9899.2
+1391.61450 6534.1
+1391.94775 3165.3
+1392.27661 1091.7
+1393.68677 622.6
+1400.66406 754.5
+1411.67700 815.6
+1412.14758 1390.7
+1414.64355 884.7
+1417.97058 763.0
+1418.29199 2578.8
+1418.62231 3123.5
+1418.96106 2849.3
+1419.28772 2741.7
+1419.62195 1059.1
+1420.15894 2943.0
+1420.65869 5354.4
+1421.15955 6082.6
+1421.65552 3664.6
+1422.17285 2086.4
+1422.65710 927.0
+1423.63525 3880.8
+1423.96204 10542.3
+1424.29602 18917.9
+1424.63062 18020.6
+1424.96692 13078.1
+1425.29871 9757.4
+1425.63184 6250.3
+1425.96094 2489.6
+1426.30896 986.2
+1446.66687 1164.1
+1446.98108 1177.9
+1447.30908 999.3
+1447.67639 1370.1
+1455.16199 1594.1
+1455.66272 2395.1
+1456.16418 2468.5
+1456.66541 1528.0
+1463.67297 9376.2
+1464.17249 23627.3
+1464.67358 24593.3
+1465.17590 17186.6
+1465.67419 8733.1
+1466.18213 4419.9
+1466.66907 1993.2
+1472.66846 1174.8
+1473.97888 881.4
+1477.98303 757.8
+1478.32202 2234.0
+1478.65393 4637.9
+1478.98804 4713.3
+1479.31177 3063.4
+1479.64929 2862.2
+1480.68933 740.7
+1492.31348 958.3
+1497.33508 1275.4
+1497.65430 5027.2
+1497.98938 4651.9
+1498.32532 4826.2
+1498.66150 2149.4
+1498.98877 1691.1
+1499.32104 1261.0
+1504.69666 887.8
+1504.99023 1357.7
+1505.21631 2450.8
+1505.70227 1431.7
+1506.18469 821.1
+1510.33252 1902.8
+1510.66943 2286.5
+1510.99683 4818.2
+1511.32776 5534.2
+1511.66321 3421.3
+1511.99341 3487.3
+1512.31042 2195.3
+1513.20178 4316.9
+1513.70557 9884.4
+1514.20923 11953.6
+1514.70862 10028.6
+1515.20740 5274.2
+1515.71179 2796.4
+1515.99829 4054.4
+1516.33203 15860.7
+1516.66528 29864.0
+1516.99915 31735.1
+1517.33240 25847.0
+1517.66577 22786.4
+1518.00146 10199.2
+1518.32727 4941.4
+1518.66394 2843.1
+1518.99585 826.1
+1525.49731 1074.0
+1561.68494 1085.7
+1568.73267 1582.5
+1569.22314 2627.5
+1569.72742 4121.7
+1570.22852 3911.6
+1570.73291 1135.9
+1571.23596 1456.3
+1577.22620 1281.7
+1577.73230 3564.9
+1578.23547 4401.8
+1578.73657 2560.5
+1579.22595 1897.7
+1579.74695 1071.9
+1635.23621 868.4
+1644.22595 895.3
+1645.26843 1005.5
+1652.25745 772.6
+1658.76392 1507.9
+1659.26184 3026.7
+1659.76550 3251.8
+1660.27356 2702.2
+1660.75537 1552.0
+1690.29724 1338.8
+1690.74951 845.9
+1693.81213 715.9
+1698.26440 1152.5
+1698.78027 5887.1
+1699.28760 9583.9
+1699.78369 9506.3
+1700.28333 7129.2
+1700.78015 4715.4
+1701.28394 1523.0
+1707.29236 24731.6
+1707.79358 72442.3
+1708.29370 94569.0
+1708.79553 78709.2
+1709.29565 53302.8
+1709.79736 30399.6
+1710.29968 12368.8
+1710.79688 4963.8
+1711.30615 1194.8
+1757.32324 1836.1
+1757.82214 3067.4
+1758.34009 2103.1
+1758.82922 1203.9
+1759.30566 990.7
+1808.35718 869.8
+1808.84741 1143.9
+1864.81921 746.2
+1865.86084 1108.5
+1870.35034 847.8
+1873.22729 742.5
+1879.07458 1113.6
+1879.23157 1387.5
+1879.57312 19628.3
+1879.94507 1804.3
+1880.40808 652.4
+1880.66638 647.5
+1880.80115 756.9
+1881.49792 875.4
+1906.66479 888.5
+1907.06897 7166.0
+1918.88257 863.6
+1930.74084 1198.0
+S	2418	2418	1879.91024127
+Z	3	5636.455
+Z	2	3757.973
+530.38538 605.7
+532.51215 1480.9
+574.08795 679.1
+713.90155 682.9
+731.16565 753.4
+759.75238 824.7
+867.05786 680.5
+1057.26257 921.9
+1198.14563 3258.5
+1198.26599 959.1
+1271.94263 717.0
+1348.28931 747.7
+1573.28821 652.7
+1706.51721 596.0
+1776.89429 825.1
+1778.51013 741.5
+1840.93872 610.9
+1873.03577 707.2
+1876.60645 717.1
+1878.33740 1085.3
+1879.01746 1343.4
+1879.31628 1562.9
+1879.57117 19568.7
+1880.82556 945.9
+1882.22803 668.3
+1906.68335 995.9
+1906.99402 7327.5
+S	2419	2419	1190.7915746
+Z	4	4759.135
+339.67197 12327.1
+411.24768 10995.7
+427.53076 10465.8
+482.66077 15412.2
+521.27557 12429.2
+522.18652 10948.4
+532.55280 33787.2
+549.13971 11048.6
+557.09558 13245.6
+577.65509 12801.8
+630.40613 14143.5
+676.64691 21188.3
+691.45557 14347.8
+720.85767 12211.4
+795.66394 22393.5
+918.90283 12003.1
+1048.43506 12862.9
+1188.22339 15203.5
+1198.23425 59966.4
+1525.40417 18979.4
+1873.62610 12531.6
+1877.21533 14271.4
+1878.39893 17480.5
+1879.55994 405095.3
+1880.80957 19493.9
+1882.26819 17912.0
+1883.78101 17579.9
+1907.04089 146706.7
+1907.84094 18739.7
+1918.82715 14072.0
+1930.58301 20138.9
+S	2421	2421	607.5374526
+Z	5	3032.64814
+169.48601 15136.5
+179.54732 11506.8
+182.77753 13448.5
+188.18951 16711.1
+188.25632 31461.9
+188.28021 43114.4
+188.29185 41511.6
+188.30608 34816.1
+188.33498 11350.5
+199.21463 17556.1
+199.26031 19715.8
+199.28984 18123.0
+199.30315 39888.2
+199.31410 38393.0
+199.32849 15168.5
+199.33926 16237.4
+199.35852 20462.5
+208.74641 11912.3
+218.26427 13036.2
+273.70206 11481.9
+278.38467 11572.2
+280.16562 15083.8
+284.81732 12333.2
+292.82239 12389.3
+296.65326 15123.2
+299.94083 11851.9
+342.25397 14252.8
+375.36166 13192.8
+427.53476 14303.4
+433.86133 10907.0
+463.62152 14028.0
+484.23114 11294.3
+485.21494 39762.8
+495.33258 12612.2
+502.54660 18446.7
+512.29211 47413.1
+512.77997 58791.5
+532.50800 43607.8
+549.14435 17219.0
+559.80939 23756.0
+564.04962 11892.6
+570.30103 30070.1
+580.29333 20414.4
+582.77966 12437.4
+587.31769 27173.7
+587.56866 84492.7
+587.82092 57502.7
+588.07513 22145.7
+592.07660 48266.6
+630.26447 17057.3
+630.39160 19870.3
+669.33557 76104.6
+669.39514 35829.5
+669.72729 54357.7
+670.06299 20599.4
+670.33606 28599.3
+676.64728 25057.1
+707.73584 22254.8
+708.07349 29980.0
+708.40002 24241.4
+728.30060 16758.3
+728.55939 16976.2
+731.10822 25131.7
+734.69812 13392.0
+740.19373 15904.8
+740.41089 32200.2
+741.57104 13779.9
+746.07697 93381.2
+746.41162 176057.8
+746.74585 103532.7
+747.07794 28005.3
+754.80450 14972.6
+770.07141 12994.6
+780.09583 14363.0
+782.07141 16151.4
+782.76306 17522.6
+783.08984 44684.4
+783.42499 28175.1
+783.75513 38888.9
+788.76074 25052.5
+789.09375 39113.4
+793.34729 12190.2
+795.87488 15436.8
+796.37701 15876.9
+797.73938 13769.7
+798.07849 14554.1
+808.89569 14113.2
+813.44153 17049.2
+858.01971 14367.5
+898.71484 12114.8
+1005.53125 22883.6
+1024.54895 49133.4
+1057.24438 17119.7
+1140.22131 12809.9
+1198.13306 61817.4
+1628.71973 14502.4
+1870.34253 11408.4
+1870.84399 11141.8
+1877.89429 17558.4
+1878.70532 23602.6
+1879.07715 40266.9
+1879.28479 58466.8
+1879.54883 410720.7
+1880.03442 33925.4
+1880.52478 15816.6
+1906.56738 13316.3
+1906.97827 152842.5
+1907.47400 12207.2
+1918.95251 17036.6
+1930.54248 23353.7
+1948.47192 11816.1
+S	2422	2422	533.0439921
+Z	4	2128.14467
+145.69482 664.7
+187.91397 562.0
+188.19249 596.1
+188.25754 1247.3
+188.27065 1885.8
+188.28236 1642.4
+188.29720 1850.2
+188.33264 500.8
+198.91690 888.8
+199.19077 818.3
+199.20743 1025.1
+199.22235 674.0
+199.28941 2081.0
+199.30467 1849.1
+199.32069 1852.3
+199.39342 661.4
+199.40123 556.1
+199.41989 629.2
+206.17143 695.3
+210.05911 561.7
+215.96420 610.2
+233.59114 644.0
+244.16562 1933.7
+253.38170 544.7
+259.33722 567.8
+261.45447 552.8
+285.14465 601.3
+286.14020 1770.7
+308.61713 627.8
+310.21204 631.3
+311.18304 1197.7
+317.85654 608.0
+336.72537 600.6
+341.19281 1571.3
+359.20337 61261.1
+360.20709 9547.1
+375.20572 9986.2
+376.20947 690.6
+395.20099 950.5
+401.83557 615.0
+472.28500 1898.6
+473.29282 580.8
+480.58179 688.8
+487.21747 1955.2
+489.24243 730.9
+490.24249 710.4
+490.27924 1334.3
+515.24658 1469.1
+518.61279 813.7
+518.94196 816.2
+532.51636 2332.0
+547.28467 574.6
+549.18842 592.6
+552.94879 7185.5
+553.28326 6176.7
+553.61780 2688.6
+553.95325 1403.4
+559.26666 1371.4
+559.77185 740.1
+561.28375 2053.4
+562.31128 1491.0
+562.64240 3965.4
+562.97705 1850.9
+581.31213 897.1
+581.64752 1647.3
+590.64355 14803.7
+590.97778 19041.7
+591.31573 15729.0
+591.65228 14587.6
+591.98657 8585.8
+592.32263 1684.8
+609.32684 843.1
+609.66577 758.0
+610.28918 1547.2
+610.79071 1260.0
+614.99792 16015.7
+615.33258 19013.7
+615.66632 11052.1
+615.99908 3540.7
+629.93903 569.8
+630.44037 738.9
+644.31909 1716.6
+644.81799 1495.0
+645.30096 1387.5
+647.33508 4808.5
+647.66913 4702.0
+648.00378 6277.4
+648.33844 2491.0
+652.46674 784.3
+653.34015 130225.5
+653.67444 181866.2
+654.00800 101363.6
+654.34241 44675.0
+654.49982 715.6
+654.67688 8800.5
+654.89105 677.9
+655.12268 1386.3
+655.45386 1261.1
+659.82697 1189.3
+661.32275 725.7
+671.38147 1800.4
+673.29779 6169.4
+674.30048 1250.5
+676.31085 4663.4
+676.59619 987.2
+677.30322 690.7
+694.85394 934.1
+708.34692 3071.6
+708.84857 2720.0
+722.39648 1338.2
+729.37170 940.0
+730.37903 889.5
+733.86328 1040.8
+734.35797 1398.6
+734.86169 914.0
+743.86719 1453.6
+744.36682 1237.8
+744.86505 739.4
+760.68567 583.2
+761.87042 818.4
+781.01392 604.2
+781.97040 578.7
+786.91846 1440.8
+789.39502 772.7
+793.40082 6370.8
+793.90369 6140.7
+794.40424 2411.0
+794.90430 616.4
+795.66272 941.4
+800.40967 1312.9
+800.91217 1881.6
+804.33765 1113.1
+819.90643 717.6
+820.41718 1583.4
+820.91284 789.5
+823.01520 566.9
+828.91956 64239.9
+829.42096 65154.6
+829.92200 32076.6
+830.42377 10500.8
+830.92432 1893.1
+841.49426 869.6
+885.46429 2186.3
+885.96039 2081.8
+886.46252 2140.4
+1057.16113 984.2
+1140.18665 621.1
+1143.55078 704.8
+1197.28040 599.8
+1198.15344 3408.7
+1358.02698 642.4
+1460.16321 640.5
+1597.10791 624.8
+1777.68872 745.9
+1821.26318 581.4
+1860.05115 693.4
+1868.93164 599.7
+1879.39868 21353.6
+1907.04968 7194.6
+1908.79004 686.6
+S	2423	2423	759.1696046
+Z	4	3032.64712
+198.92039 8844.7
+199.19803 5655.6
+199.22784 6799.3
+199.26785 14305.6
+199.28571 10853.7
+199.29486 19173.4
+199.30238 11214.4
+199.31335 10053.3
+199.34477 6934.7
+199.39790 6685.4
+199.40990 5903.5
+199.41710 5018.2
+205.04997 5304.9
+235.18391 5939.9
+271.59647 5963.4
+271.89279 6625.6
+275.75903 6730.3
+276.30276 7496.4
+280.18015 6057.6
+286.92416 7279.8
+298.12106 5787.6
+302.12732 6083.7
+304.34570 6784.0
+312.18079 8080.0
+320.13455 7524.5
+341.91385 5823.9
+345.45447 5526.6
+350.28491 7476.7
+409.37479 6088.0
+425.25970 12296.0
+434.36615 5913.7
+436.74808 5424.9
+442.96304 5254.9
+443.21896 6243.7
+449.64911 7379.7
+450.98892 5980.6
+503.77460 18432.5
+512.29248 32321.1
+512.77893 102403.2
+513.27844 39708.6
+513.78326 17994.1
+513.93652 5843.6
+532.49805 13357.4
+532.53174 8926.0
+552.50818 5900.2
+557.80420 7177.1
+586.05878 10015.9
+586.23431 5684.1
+586.31299 8043.5
+590.30219 6675.1
+598.29651 8921.9
+599.63971 71015.9
+599.97369 70612.8
+600.30774 40216.0
+623.66895 7751.1
+625.37549 16403.8
+632.66187 66570.9
+632.99725 55813.8
+633.33313 39952.9
+633.66376 12093.8
+634.34595 6069.9
+644.29626 6211.1
+656.27026 9427.9
+661.02661 13404.2
+669.33154 8536.6
+669.39459 13039.7
+669.72595 9071.0
+670.06421 6453.8
+670.36395 11107.4
+670.69287 15044.1
+671.02625 14048.4
+676.59174 10643.4
+678.76886 5769.0
+706.33881 6337.2
+712.40942 36795.7
+713.41321 15292.1
+721.29480 6637.3
+731.10730 5917.8
+743.93066 12174.4
+774.38226 8815.4
+795.66687 7725.5
+795.88324 6683.4
+802.49243 8348.3
+806.99268 7801.0
+807.23511 7246.8
+811.60046 8349.1
+812.76709 8150.4
+830.41791 22036.2
+830.93042 25168.0
+831.43158 14795.3
+846.25641 6785.8
+851.41528 6624.3
+851.45563 6558.7
+856.45209 21651.6
+857.45447 32176.0
+864.45593 8070.8
+869.48828 10122.6
+870.48267 10605.0
+878.99506 7233.1
+885.45575 6710.6
+889.68793 7469.8
+898.95807 29977.7
+899.16650 8512.8
+899.45288 32587.0
+899.95990 15446.5
+901.49719 7789.9
+901.99377 9549.9
+912.42175 8854.9
+925.53638 11900.7
+926.04395 9566.5
+927.49628 19255.5
+928.50378 11464.7
+936.50055 9802.7
+936.84332 11971.4
+942.17676 10539.4
+942.51013 21425.7
+942.84039 8257.0
+943.50940 9983.5
+948.48987 35800.7
+948.98914 42197.4
+949.49188 17615.4
+949.98157 11928.2
+953.83759 6957.6
+954.20355 6722.3
+996.53094 14440.3
+997.03308 8320.8
+1005.03149 114271.4
+1005.53290 129203.4
+1006.03491 66749.4
+1006.53986 35200.6
+1007.03442 12011.7
+1007.53448 9190.0
+1024.55103 150191.6
+1025.55530 84829.0
+1026.55530 25671.3
+1027.43994 18248.8
+1028.44714 9561.5
+1057.17041 11061.6
+1084.46411 10061.1
+1138.64941 7262.2
+1156.93347 7922.0
+1183.53430 10241.2
+1184.61011 6535.5
+1187.35400 6390.1
+1187.99915 7893.8
+1198.11731 29217.3
+1296.63086 11105.0
+1361.50635 5886.9
+1487.30139 7523.5
+1525.40186 6559.4
+1716.52991 16343.2
+1872.13672 9046.0
+1879.40588 203779.6
+1892.30615 6954.1
+1907.06470 73333.7
+1982.35767 6746.3
+S	2425	2425	1879.8358246
+Z	3	5636.232
+Z	2	3757.824
+532.50885 1697.5
+549.18951 632.1
+549.75555 671.1
+676.64929 844.9
+676.69745 670.9
+755.39886 597.2
+759.73578 686.8
+795.65015 973.6
+893.96973 660.9
+942.00629 603.0
+1033.33398 554.3
+1079.38208 595.5
+1188.00671 723.8
+1198.13269 3116.2
+1263.43127 793.9
+1432.64478 684.7
+1525.49182 739.8
+1543.19922 580.3
+1719.19250 965.8
+1730.71338 1179.9
+1731.73132 919.5
+1841.77734 1675.5
+1874.79419 1288.1
+1876.91235 681.7
+1879.56445 18802.2
+1907.03992 6945.6
+1907.32129 1384.8
+1974.18042 595.3
+S	2426	2426	1907.41440793
+Z	3	5718.968
+Z	2	3812.981
+517.54749 794.6
+525.82196 599.2
+532.46967 2194.2
+536.45160 551.6
+549.17914 1092.8
+572.14917 548.8
+630.43353 738.6
+672.14990 588.2
+682.26373 692.6
+695.19019 596.2
+715.16321 558.9
+795.67279 954.3
+854.49060 642.2
+887.86841 609.7
+1198.05005 3516.9
+1618.35059 630.1
+1719.20068 1026.9
+1878.47021 1276.1
+1878.78406 1866.1
+1879.27771 5252.8
+1879.73999 18059.8
+1880.22095 3808.3
+1880.71301 3329.3
+1906.72351 992.4
+1907.06104 7523.4
+1918.85254 756.4
+1930.69250 711.1
+S	2427	2427	1198.5278246
+Z	2	2395.208
+Z	3	3592.308
+403.45886 526.5
+427.56387 658.6
+430.25296 684.4
+445.04681 696.8
+457.04855 669.3
+532.48529 1831.2
+550.97211 678.4
+559.29193 643.0
+570.15631 574.6
+589.00287 602.9
+624.65637 629.6
+628.10553 613.9
+676.66284 1218.5
+715.79449 678.3
+726.31268 676.0
+822.09180 715.1
+834.38464 693.4
+839.33282 602.2
+849.14911 697.0
+927.47662 1574.8
+939.09503 714.6
+1022.81610 595.9
+1057.28735 844.3
+1109.88501 768.7
+1140.30261 686.4
+1164.92969 634.6
+1179.60071 607.1
+1198.09229 3297.0
+1333.30664 646.3
+1384.53296 622.3
+1467.72363 664.8
+1536.37048 549.0
+1560.25159 681.5
+1750.94226 643.9
+1860.06873 711.9
+1870.95337 724.7
+1874.16309 1222.1
+1876.52380 648.8
+1878.51196 729.3
+1879.14429 1848.1
+1879.60974 19740.9
+1880.09949 1334.3
+1880.80554 1003.4
+1907.02832 7205.0
+1930.70581 1308.8
+1986.06274 575.8
+S	2429	2429	1880.04440793
+Z	3	5636.858
+Z	2	3758.241
+532.47778 1704.5
+550.40259 600.2
+589.68890 689.3
+646.96252 569.6
+676.67633 893.2
+731.15338 1006.0
+795.66144 1281.4
+820.35699 658.9
+844.97888 717.5
+1019.64319 668.1
+1156.40564 780.8
+1198.06775 3366.0
+1525.54065 679.6
+1716.94080 1575.3
+1751.83740 920.0
+1760.87805 712.1
+1872.28735 652.3
+1877.56445 795.4
+1879.22607 3264.3
+1879.37939 3185.3
+1879.62402 18760.2
+1880.05029 2687.3
+1880.48901 978.6
+1880.96899 894.6
+1881.44360 813.1
+1881.59705 792.3
+1881.85266 796.6
+1907.11157 7473.6
+1930.67700 1077.2
+S	2430	2430	607.7278246
+Z	5	3033.6
+165.43242 585.0
+167.06035 714.4
+169.45390 598.7
+181.39771 535.4
+182.80769 593.9
+188.20480 695.7
+188.21458 507.4
+188.24283 824.9
+188.25441 574.1
+188.28307 606.7
+188.29050 761.1
+188.30626 527.1
+188.31436 799.0
+188.33446 673.2
+188.37314 606.2
+188.39412 702.4
+188.49733 551.9
+188.63626 504.6
+195.32870 543.1
+198.91594 945.5
+199.17560 792.7
+199.19484 604.9
+199.23880 618.1
+199.27402 997.8
+199.29402 1518.3
+199.30568 1250.7
+199.31419 1600.1
+199.32370 1339.5
+199.33510 1131.8
+199.41129 919.9
+209.10301 805.7
+214.52583 605.9
+216.11432 600.1
+251.14981 930.3
+252.36627 634.2
+255.30324 713.2
+267.00479 610.3
+298.10214 876.9
+309.95978 553.1
+312.17755 2806.1
+313.19162 953.7
+315.12976 896.6
+320.13522 2260.0
+335.17102 731.4
+338.14413 1465.1
+356.70944 860.3
+356.83646 601.3
+357.21210 761.9
+369.22366 832.6
+381.37946 625.4
+382.17252 1374.6
+385.74170 632.8
+386.23654 668.1
+400.17896 554.4
+401.17426 656.4
+425.26157 3910.6
+426.26544 1377.7
+430.15891 1116.2
+435.27118 753.0
+435.77057 1037.0
+443.24661 643.9
+456.65814 595.6
+456.70956 838.3
+458.59396 770.5
+458.89771 566.7
+463.77805 663.8
+464.25729 734.1
+479.22430 1335.0
+482.67136 617.8
+485.21332 11035.2
+486.21759 3641.8
+491.81183 721.9
+492.78787 952.1
+493.28699 1976.8
+494.28976 891.7
+499.31189 649.6
+500.76385 2970.8
+501.26715 1472.7
+502.29547 1825.0
+502.54724 4234.1
+502.79712 4048.7
+503.05063 1033.6
+503.77347 2756.1
+504.27527 2456.9
+504.77509 886.3
+509.25067 863.4
+512.29297 17271.0
+512.77899 23379.5
+513.27704 10531.5
+513.31201 1582.0
+513.78223 6124.3
+514.27887 1958.6
+531.05304 1203.2
+531.30298 2102.6
+531.55530 2440.2
+531.80408 1786.3
+532.47821 2135.4
+534.31635 812.6
+534.99103 658.7
+541.79712 879.4
+543.23022 823.2
+545.40588 533.6
+549.32312 754.7
+550.29797 3044.1
+550.79932 2181.7
+551.29987 1648.1
+553.27399 1215.1
+555.55841 1207.9
+556.27490 757.9
+559.80927 2899.7
+560.06006 4105.1
+560.31073 3250.9
+560.56183 2772.8
+560.81012 857.1
+569.32123 5899.1
+569.82288 4143.8
+570.30090 9530.5
+571.30554 4847.0
+572.31006 1462.3
+573.30676 797.4
+579.66827 2191.3
+579.81537 902.4
+580.00073 2447.4
+580.06427 910.9
+580.28662 6162.1
+580.34094 1552.6
+580.67084 1230.1
+581.29004 2512.5
+583.07184 1039.5
+583.32019 1416.0
+583.56531 1645.2
+583.81732 1441.5
+587.32117 6759.0
+587.56964 14315.1
+587.81989 17528.6
+588.06940 16519.6
+588.32037 9640.3
+588.57019 3513.1
+591.82465 1911.2
+592.07184 2258.6
+592.32416 1169.0
+592.57660 845.5
+598.29797 1563.5
+599.28955 684.6
+623.32336 781.2
+625.37769 2427.6
+632.66125 3162.0
+632.99530 2230.4
+633.33087 2826.1
+633.66559 1105.5
+638.10590 761.7
+641.34009 1036.8
+650.38477 1696.4
+650.72034 2015.4
+651.05280 760.0
+651.32764 1052.6
+661.86188 854.6
+662.35718 1009.3
+662.85071 986.0
+663.39063 792.4
+665.02081 562.1
+669.33362 19119.8
+669.39276 8670.8
+669.72644 13340.3
+670.05994 8547.4
+670.33545 8872.7
+670.39349 6575.5
+670.69989 2296.9
+670.87024 1102.2
+671.02948 2060.1
+671.33600 2165.4
+671.37323 1516.5
+671.87848 943.8
+676.66132 1144.5
+687.38910 1694.7
+687.88861 1833.8
+701.72040 807.6
+702.06085 906.1
+702.40100 1487.7
+702.87665 988.3
+706.38416 829.0
+707.73499 8410.6
+708.06866 14524.7
+708.40247 9987.1
+708.73633 7794.1
+709.06757 2339.5
+712.40881 4734.6
+713.41187 2236.8
+714.44830 662.3
+722.04895 1017.0
+740.07336 2115.2
+740.40692 5607.6
+740.74188 3851.4
+741.07379 1983.0
+743.92450 923.0
+744.42969 1014.4
+744.71643 905.0
+745.05225 1586.3
+745.27429 656.0
+745.39093 2581.4
+745.72394 1315.7
+746.07660 20052.4
+746.41095 24529.0
+746.74530 23387.4
+747.07904 13868.5
+747.41370 5914.9
+747.74066 795.5
+751.06097 876.7
+751.39459 1028.3
+768.39923 888.9
+768.73468 1732.1
+769.07050 2087.9
+769.40448 2238.4
+770.39026 603.4
+773.42773 998.8
+774.38068 697.8
+777.08777 1404.8
+777.41943 1571.3
+777.75238 1623.4
+778.08673 1134.2
+778.43097 755.1
+782.75751 2029.2
+783.09045 9486.4
+783.42181 9740.3
+783.75928 6363.1
+784.09106 6418.3
+784.41864 1458.6
+788.76294 5797.6
+789.09747 7449.7
+789.43097 7936.5
+789.76807 3394.5
+790.09985 1835.0
+792.07379 1623.1
+792.41302 867.0
+793.24554 562.0
+795.65497 1327.8
+795.76477 820.8
+797.39746 3283.8
+797.74603 5244.1
+798.08142 4716.6
+798.41760 4184.0
+798.75140 1847.8
+800.76587 933.1
+800.96820 1002.1
+801.09454 2505.3
+801.43115 3035.1
+801.76440 978.4
+803.41473 1389.3
+803.74805 1853.2
+804.08600 1303.4
+807.44165 1403.9
+812.44409 1922.8
+812.77673 4883.1
+813.11273 3151.5
+813.44348 2630.4
+813.77130 1159.9
+826.53650 1091.6
+830.42560 1041.4
+830.92676 3076.0
+831.43176 2532.8
+831.93042 1080.8
+835.44739 947.8
+839.49005 801.4
+851.13452 739.8
+853.96265 1345.9
+864.45508 1131.2
+864.79401 996.6
+869.00482 1489.2
+869.49432 1789.6
+870.00201 1472.3
+871.49390 667.9
+912.41522 989.2
+925.53802 1068.1
+926.54602 659.3
+927.49841 1355.5
+928.50958 930.4
+935.61780 626.9
+948.98712 1400.6
+982.61285 2362.9
+983.62183 1293.2
+987.12488 594.1
+996.52020 1334.6
+997.52057 1730.0
+1004.07996 786.8
+1005.02899 3619.4
+1005.53375 7458.2
+1006.03375 4801.7
+1006.53864 3537.3
+1007.03461 1117.6
+1021.00928 758.8
+1024.55212 15275.2
+1025.55420 10754.2
+1026.55493 4503.8
+1027.44714 1570.7
+1027.55957 1309.4
+1028.43872 1109.7
+1084.46631 1885.6
+1085.47327 1763.5
+1097.64685 1648.7
+1118.62976 601.8
+1137.63782 1033.3
+1138.63904 979.9
+1198.07202 3391.5
+1212.67126 1469.0
+1213.67566 2064.9
+1214.67639 763.7
+1355.60107 609.8
+1764.79321 640.6
+1768.11145 701.7
+1797.51453 605.1
+1871.71497 1171.3
+1876.93933 727.4
+1877.70642 675.3
+1877.93494 1023.6
+1879.10327 2506.9
+1879.60181 19687.6
+1880.09424 2720.4
+1880.59644 868.7
+1880.87390 928.3
+1881.30103 726.0
+1882.30054 653.5
+1907.06873 6890.1
+1930.61548 1009.7
+S	2431	2431	1907.4775746
+Z	2	3813.107
+Z	3	5719.158
+532.45447 1728.9
+549.12518 818.5
+581.23901 557.7
+658.23413 568.3
+795.67511 1078.6
+818.08997 708.9
+900.84210 612.3
+1057.24463 649.8
+1079.33728 695.9
+1105.84192 643.1
+1198.02087 3159.2
+1438.00244 607.1
+1590.62732 692.2
+1641.05225 684.3
+1694.50000 652.5
+1857.30334 894.9
+1878.71899 1134.7
+1879.56299 18418.5
+1879.82910 4820.8
+1880.26770 2234.9
+1906.69031 1508.3
+1907.05225 6986.1
+1907.42273 1482.5
+1918.90771 768.6
+1930.51611 1161.7
+1965.81616 760.2
+S	2433	2433	1880.09324127
+Z	2	3758.339
+Z	3	5637.004
+507.26721 760.5
+526.65216 516.4
+532.43726 1761.1
+577.51135 661.8
+706.48071 730.4
+764.66718 679.3
+795.67010 1007.9
+823.77661 607.5
+976.30756 697.4
+1014.26233 616.3
+1057.32983 767.9
+1102.15491 648.5
+1197.96765 3467.4
+1377.16443 588.3
+1630.36865 737.4
+1811.27466 625.9
+1862.78455 631.2
+1877.08997 786.1
+1877.45154 726.8
+1878.51294 928.6
+1879.40015 5543.8
+1879.64795 17381.7
+1881.94287 1011.4
+1907.04761 7474.4
+1907.39307 630.7
+1917.76050 688.0
+1930.60852 821.1
+S	2434	2434	1907.4648246
+Z	3	5719.119
+Z	2	3813.082
+532.43805 1848.2
+581.79742 822.5
+674.05774 663.9
+689.40253 688.3
+721.45587 600.4
+731.10565 673.2
+735.27411 777.6
+776.86774 649.8
+954.59314 663.9
+1057.30884 643.1
+1197.97034 3321.2
+1351.06580 648.2
+1877.94983 720.2
+1878.42737 805.0
+1879.36511 6680.0
+1879.65442 17639.1
+1880.19617 2418.1
+1880.53821 2083.2
+1880.87769 688.4
+1907.09985 7351.4
+1930.54822 883.9
+S	2435	2435	607.5265886
+Z	5	3032.59382
+155.01137 3194.8
+165.76363 5285.2
+172.41913 4196.5
+173.51201 3769.8
+182.78087 4483.3
+188.25931 5167.1
+188.26863 4098.8
+188.28232 7649.3
+188.29260 7342.4
+188.30499 4430.7
+188.31276 3433.3
+188.34662 3344.1
+191.18561 3390.3
+198.92032 4380.5
+199.20131 7265.8
+199.28067 7633.3
+199.30043 20830.6
+199.32166 5818.0
+199.39804 6962.6
+203.71693 3209.7
+214.56789 3583.4
+230.63939 3166.4
+236.14430 3665.0
+255.28906 4939.2
+261.96863 3480.6
+262.99036 3654.9
+287.39847 3366.4
+323.71167 4359.4
+335.17130 3620.3
+335.83453 3385.0
+342.27206 3362.1
+359.23819 10002.3
+360.59912 3222.6
+381.35562 4560.2
+381.47665 3330.5
+398.16168 3274.8
+422.72733 3125.3
+425.26019 4934.5
+426.64597 3966.5
+433.36133 2960.8
+470.99585 3677.6
+475.78763 6509.7
+485.21335 17999.2
+486.21179 5552.0
+488.28189 4473.8
+502.29471 16089.7
+502.54300 5741.9
+503.77451 6124.6
+512.29321 26744.1
+512.77869 31582.5
+513.27679 8699.2
+532.45184 7764.1
+559.80811 5864.2
+560.06085 5330.6
+560.31030 4221.1
+569.32019 9423.5
+569.82349 9260.0
+570.30212 14589.9
+570.79791 3764.3
+571.30444 6321.5
+580.28723 10954.4
+587.31812 7828.8
+587.56885 20504.4
+587.81854 15324.3
+588.06976 9946.4
+588.32428 4737.6
+590.27039 3485.2
+591.82471 8984.5
+592.07867 7602.4
+598.29596 5821.2
+625.29681 3380.9
+632.65656 5212.5
+632.99634 4672.9
+633.32404 5240.0
+655.53625 3195.5
+661.03467 3571.9
+664.38831 4004.8
+669.33246 27839.0
+669.39160 24554.0
+669.72614 13766.8
+670.06097 13280.9
+670.33716 11506.9
+670.69153 5644.7
+676.62109 5720.3
+707.73303 21606.3
+708.07025 16300.7
+708.40369 11465.1
+709.34149 3545.0
+712.40863 6050.1
+740.73645 6141.6
+742.05493 5105.2
+746.07556 43688.3
+746.41064 39292.0
+746.74567 30502.0
+747.41199 7540.7
+755.14990 3870.2
+771.30127 3997.2
+783.09119 11649.2
+783.42346 12469.6
+783.75598 4546.9
+788.76428 7462.9
+789.09918 10958.4
+789.43500 10231.0
+795.68207 5559.3
+797.75128 6162.6
+798.07861 4878.3
+812.77509 6015.9
+826.40479 3810.3
+830.42291 5807.9
+858.04059 3650.2
+893.27057 3115.9
+926.02478 4178.5
+1005.03485 7490.3
+1018.10614 3854.4
+1019.85712 3553.9
+1024.55298 21251.2
+1025.55518 7930.0
+1032.95728 4062.7
+1129.42615 3714.8
+1188.25928 4227.6
+1198.00635 20720.2
+1394.78748 3534.7
+1805.66455 4826.7
+1843.11707 5127.6
+1876.09814 4293.1
+1878.96667 7568.9
+1879.49121 116801.2
+1879.75415 16954.0
+1883.60718 4696.8
+1907.04358 44716.1
+1930.59570 4421.9
+S	2437	2437	954.003991267
+Z	2	1906.16
+Z	3	2858.737
+255.30264 1623.5
+261.16028 6059.9
+267.24258 3942.7
+284.19754 5911.2
+285.20078 3875.8
+286.20078 1950.7
+289.15509 17676.6
+290.15924 4158.0
+295.23895 3285.4
+306.18225 1741.7
+307.18408 1239.3
+309.19263 3492.9
+313.19528 2001.0
+316.15277 2454.9
+317.22327 8303.5
+326.13614 1636.7
+326.17233 1884.8
+330.19281 1711.7
+333.20392 1977.3
+334.17651 18638.6
+335.18106 5858.8
+340.25955 1783.0
+344.14584 13322.3
+345.15161 2202.9
+345.21799 3390.5
+346.22269 1735.8
+348.20319 7827.9
+351.21466 9290.1
+352.13394 2190.5
+352.19861 9337.6
+352.25854 4381.2
+366.17224 1480.1
+369.22498 42032.3
+369.28622 6557.1
+370.22913 6511.5
+370.29028 1975.0
+372.19180 7877.8
+373.19501 1890.7
+374.24646 2262.9
+386.15515 2537.1
+391.23770 46779.5
+392.22183 3261.0
+392.24442 8490.4
+393.22983 4423.7
+397.28131 18687.6
+398.28540 5902.0
+402.23914 68216.0
+403.24307 18757.2
+404.24542 3684.2
+408.32236 12317.5
+409.32480 3791.9
+412.21158 2912.2
+413.16733 5292.5
+414.17184 1412.2
+415.23935 2133.6
+419.26566 34891.3
+419.40570 1548.4
+420.19693 4313.5
+420.26910 13339.3
+421.19589 1486.2
+421.27234 1699.2
+426.27951 2587.4
+431.17795 5840.5
+433.29370 2567.0
+435.23541 4176.5
+435.29626 2500.5
+437.22159 2709.7
+439.21701 2015.3
+441.19818 1344.2
+447.26038 42986.5
+448.26419 12715.4
+449.26666 3132.5
+457.22784 5182.0
+457.28146 6221.8
+458.28201 2209.6
+458.30005 2560.2
+459.16696 1463.1
+461.28815 5941.0
+462.28894 2046.8
+465.21707 3007.5
+465.34299 5246.7
+466.34946 2649.4
+475.25525 4318.3
+476.25745 3154.1
+481.22897 1962.3
+482.30856 10057.4
+482.37112 8156.8
+483.29431 2457.5
+483.37650 1883.9
+484.30414 1585.6
+485.27634 25013.2
+486.27939 9238.0
+487.32800 18661.5
+488.33224 5683.2
+489.33298 1554.7
+493.19202 2304.7
+498.25610 2840.5
+499.24240 2957.2
+500.32529 2357.1
+502.30133 3655.0
+504.32172 33568.2
+505.28577 2584.3
+505.32550 9114.1
+506.29276 1237.5
+508.28055 2015.4
+510.36508 17558.3
+511.36862 7374.4
+515.32294 90374.6
+516.26764 3515.6
+516.32574 34300.1
+517.32782 7121.2
+518.30811 3156.1
+520.32593 3304.8
+526.24982 5172.5
+528.32178 11333.8
+529.32458 3700.3
+530.30811 2692.4
+531.31024 1696.2
+532.34955 54925.0
+532.43671 4249.3
+533.27948 23091.7
+533.35303 20139.8
+534.28241 9688.9
+534.35590 4879.7
+535.27698 1416.1
+537.41339 1350.6
+539.36249 4831.0
+542.33459 4808.2
+544.26178 14306.7
+545.26709 3298.2
+548.31909 11407.9
+548.38013 1727.9
+549.26984 2090.5
+549.32153 2190.1
+550.30432 5531.4
+551.30487 3480.1
+560.34430 94630.7
+561.34741 36883.5
+562.35138 9718.5
+570.35938 4319.4
+571.38843 2566.2
+576.31366 2579.3
+577.30054 36390.1
+577.80206 28166.7
+578.30127 39964.0
+578.80188 2066.9
+579.30438 11476.2
+580.29858 1609.4
+588.33838 2991.2
+589.34363 3323.2
+594.28760 1936.8
+596.38037 2768.2
+598.35974 34327.2
+599.36401 14430.8
+600.36633 2867.9
+600.41339 4403.8
+601.41608 3848.7
+612.32593 2395.7
+613.41107 4143.4
+615.38550 3454.5
+617.40698 11788.1
+618.28931 3580.4
+618.40033 7025.4
+619.37476 2243.9
+623.30304 4580.4
+628.40704 46318.9
+629.41058 17816.8
+630.41565 4539.6
+633.84216 2520.7
+636.29596 2358.3
+638.83618 7001.9
+639.33704 8831.1
+639.84265 2420.5
+640.32709 1881.6
+641.31390 4943.8
+641.40631 14430.1
+642.34235 9073.4
+642.40985 5507.2
+643.38281 3667.0
+644.36499 1422.0
+645.33875 2054.4
+645.43317 35159.5
+646.36359 43568.7
+646.43719 15208.2
+647.36737 21396.4
+647.44135 3351.2
+648.36786 5577.4
+649.36890 2513.3
+655.41876 20629.8
+656.42291 7497.5
+661.40332 8042.9
+662.41083 1819.9
+663.38849 27663.2
+664.39142 12563.0
+665.37958 4874.9
+672.28558 1787.3
+673.42865 63310.4
+673.86603 4979.9
+674.37256 6198.7
+674.43256 25816.3
+675.43512 6829.8
+676.43457 1825.6
+682.36896 54668.5
+682.87085 39176.1
+683.37122 16086.6
+683.87299 5583.9
+691.38501 86919.2
+692.38733 39698.6
+693.38885 9363.6
+699.36090 66041.4
+700.36389 26081.4
+701.36194 6441.4
+702.36450 1209.0
+702.42493 3121.6
+711.44525 17214.6
+712.44678 6796.2
+716.88617 2608.1
+717.37885 1519.6
+718.39862 2650.4
+719.37671 2355.9
+725.88519 28368.9
+726.38599 17785.0
+726.88843 9107.5
+727.38275 1784.7
+728.47583 2399.9
+729.47705 1504.2
+730.49091 10440.9
+730.88165 2432.9
+731.38287 2741.2
+731.48755 5441.4
+732.49115 1867.4
+736.38770 5764.1
+737.38556 2261.3
+748.43475 1671.3
+752.39398 1559.3
+753.41974 1663.4
+754.39709 8781.8
+755.40131 3202.8
+758.42072 3928.4
+759.44952 20103.6
+760.45251 10206.8
+761.45001 2876.4
+763.39795 1455.1
+773.42206 20651.3
+773.92334 14549.1
+774.42426 7564.3
+776.47162 31365.5
+777.47601 10937.6
+778.37457 2936.4
+778.47736 2557.1
+781.08234 3150.6
+782.42737 58376.5
+782.92889 49346.1
+783.42975 23811.6
+783.92963 10872.7
+784.43140 2859.7
+785.37787 7442.5
+786.37683 2367.6
+786.45831 31265.6
+787.46490 15337.1
+788.47345 4746.3
+791.42157 2382.4
+795.67987 2651.8
+804.46960 70235.8
+805.47229 30544.7
+806.47375 11525.5
+807.47461 1744.3
+812.43994 5371.7
+813.45264 1632.8
+822.47754 8056.2
+823.48590 3563.2
+830.93591 2306.0
+831.42908 3727.1
+839.94128 17038.8
+840.44250 17160.2
+840.94427 7829.6
+841.44775 3676.5
+845.45862 2623.9
+846.42950 56096.1
+847.43323 27454.1
+848.42737 7261.6
+851.98419 1205.2
+852.03302 1437.1
+863.46448 18600.5
+864.46625 7094.2
+865.49414 1689.6
+866.49847 1707.9
+868.41516 7397.6
+869.41730 4062.2
+873.44739 14166.6
+874.44751 6669.4
+882.43555 6290.7
+883.43488 2154.0
+885.43488 2410.7
+886.42487 6902.5
+887.46124 4047.0
+887.98059 3867.6
+888.47968 3795.6
+889.51825 6415.8
+890.51373 3338.1
+891.45819 74193.8
+892.46069 35253.4
+893.46411 10916.8
+894.47736 1836.7
+896.48370 48171.1
+896.98444 44397.6
+897.48431 24018.9
+897.98517 10304.1
+898.49615 2636.4
+899.49384 1406.3
+900.15527 1746.1
+900.56824 2797.8
+901.09753 1753.4
+901.47772 1831.9
+901.57001 1658.7
+902.00824 1976.1
+903.45123 540474.9
+904.45319 286235.4
+904.87018 2228.8
+905.45422 106625.3
+906.33289 3960.1
+906.45483 29488.5
+907.45270 5153.8
+909.00269 1819.0
+914.53210 2191.9
+914.98053 3341.1
+915.53583 2276.2
+922.51117 2202.3
+925.52759 3273.7
+957.02386 1731.9
+968.51599 2989.3
+976.54767 9635.3
+977.54980 4022.5
+977.65143 2088.4
+977.78986 1395.3
+986.53217 14521.0
+987.53131 7596.6
+988.53168 3549.3
+995.51343 20819.1
+996.51819 11670.2
+997.51770 3162.7
+997.99622 1797.1
+998.52850 1822.5
+1004.54218 77989.3
+1005.54553 37219.5
+1006.54785 13622.4
+1007.55768 2582.7
+1016.53473 213535.4
+1017.53772 131564.6
+1018.21448 1272.4
+1018.53967 51527.2
+1019.53833 11928.4
+1020.53021 2577.4
+1021.47247 1455.9
+1026.51941 1311.2
+1027.51831 1853.5
+1043.53552 2509.4
+1052.36658 1469.5
+1061.56592 14007.5
+1062.57202 7624.6
+1063.57751 3306.4
+1069.54236 1471.1
+1079.35913 1527.7
+1082.54761 6974.7
+1083.54761 5673.1
+1092.58240 1603.0
+1094.54871 1737.7
+1118.56543 2974.9
+1119.57275 2363.2
+1125.06653 1727.1
+1136.57703 5873.8
+1137.57971 3346.9
+1151.57349 2440.3
+1153.59412 228876.8
+1154.59705 149917.5
+1155.59888 59604.8
+1156.60046 20293.7
+1157.60437 3425.4
+1163.25879 2055.9
+1178.62390 2425.3
+1180.63208 3805.9
+1190.61487 2550.9
+1191.62939 2433.6
+1195.63000 10667.7
+1196.63440 7361.6
+1197.65063 2837.4
+1197.97668 6513.4
+1201.57678 1842.9
+1208.63037 21661.5
+1209.63342 13962.4
+1210.63379 3984.8
+1211.65015 1740.0
+1247.64221 1647.9
+1265.65796 5661.6
+1266.67615 28700.1
+1267.68103 20948.2
+1268.68579 9988.3
+1269.68689 3003.1
+1272.71375 2958.6
+1310.66223 3334.0
+1311.64832 3109.5
+1334.68982 2437.8
+1335.66687 2838.6
+1345.72363 3422.9
+1346.72070 5505.4
+1347.72095 4053.0
+1348.70483 1806.4
+1363.73108 272788.0
+1364.73438 217770.4
+1365.73547 102492.9
+1366.73511 36553.7
+1367.74243 10475.0
+1368.74512 2221.4
+1369.08789 2412.5
+1397.67297 1818.9
+1407.69397 2157.3
+1408.66028 2930.9
+1409.64978 2104.7
+1410.65076 1751.0
+1420.74756 1842.7
+1423.74866 4540.7
+1424.74365 3746.5
+1425.67908 15360.8
+1426.68738 14487.4
+1427.68982 6206.0
+1428.69250 1830.1
+1432.75745 6377.0
+1433.75317 5028.5
+1434.74426 3445.5
+1447.76038 10505.9
+1448.76343 10183.0
+1449.77380 3437.5
+1450.76257 71821.7
+1451.76648 63753.2
+1452.76770 31553.4
+1453.76721 11547.9
+1454.76709 3420.1
+1493.74512 2487.5
+1510.77393 14179.6
+1511.77368 13422.6
+1512.77844 5768.9
+1513.77661 3515.8
+1520.75818 7397.1
+1521.75696 7701.3
+1522.74316 4544.1
+1538.76782 83453.4
+1539.77161 73412.3
+1540.77258 36019.3
+1541.77295 13408.0
+1542.78760 4188.6
+1563.84656 4662.9
+1564.84985 3950.0
+1565.86597 2272.4
+1589.72131 1397.9
+1635.83228 2306.1
+1636.81812 2003.9
+1637.82361 1630.6
+1678.87695 4799.8
+1679.87671 4534.8
+1687.60193 1476.9
+1878.34070 2102.5
+1878.64148 2252.3
+1878.84058 2788.5
+1879.22961 8727.6
+1879.56042 39564.5
+1879.88025 5872.1
+1880.22546 1626.6
+1880.74744 2936.0
+1907.06799 15503.1
+1918.85535 1430.7
+1930.79260 1563.2
+S	2438	2438	680.3608271
+Z	4	2717.41201
+182.78838 3512.8
+186.72728 3631.4
+188.19128 2888.0
+188.23129 4103.3
+188.24850 3352.2
+188.26083 2953.3
+188.26843 3369.0
+188.28522 3211.7
+188.31509 3199.6
+188.35141 2322.3
+188.35603 2507.8
+193.99873 3483.1
+198.92200 4085.5
+199.20709 6146.0
+199.24323 3768.5
+199.30423 13172.5
+199.31964 2855.7
+199.33215 3715.0
+199.33762 2818.3
+199.35260 5219.7
+199.38522 3159.0
+199.40207 6660.8
+216.59512 2681.7
+226.73424 2622.7
+233.66254 3061.9
+240.13397 5892.4
+246.29898 2650.2
+255.06207 2808.0
+263.47409 2802.8
+272.05414 3514.1
+280.19025 3341.7
+281.00275 2694.6
+329.21985 2985.1
+342.28391 3880.1
+343.81787 2744.2
+357.21155 13872.9
+370.86453 2681.3
+373.20694 3876.9
+427.21799 12803.6
+427.55487 5264.1
+438.27081 21404.5
+439.27246 6623.9
+444.25253 5927.4
+444.75540 5047.8
+456.28143 39389.9
+457.28442 10349.0
+477.01056 2835.7
+512.91333 6286.0
+513.24738 5275.7
+516.78802 10892.4
+517.29120 5214.4
+525.79443 20064.4
+526.29449 12149.3
+526.79633 5139.8
+532.48145 9111.3
+534.80035 13745.3
+535.30286 8357.8
+541.80609 3097.3
+550.60919 20364.7
+550.94421 24513.3
+551.27887 13536.9
+551.61237 7367.8
+582.33661 12335.5
+582.58392 3093.9
+582.83771 5061.8
+583.96613 4414.3
+585.29443 7490.7
+586.24634 2949.7
+591.34149 30357.0
+591.84277 10124.0
+592.34448 6366.6
+595.30023 4182.0
+613.31592 5609.9
+614.32269 3613.8
+623.33887 4608.9
+629.82202 13725.5
+630.32690 9583.0
+636.09064 3396.4
+636.34137 5346.7
+640.58887 5209.1
+640.84052 11737.3
+641.08887 10682.2
+641.33801 6197.6
+650.99500 3082.5
+658.10852 3968.1
+663.86743 4120.5
+687.33075 2815.1
+706.36499 3203.4
+712.38660 4303.9
+726.40106 10142.7
+727.40314 4495.5
+731.14026 2912.3
+748.71320 12206.8
+749.04376 25147.6
+749.37762 12669.7
+749.70782 10558.5
+750.03607 2870.1
+754.71375 100655.9
+755.04816 166860.1
+755.38208 111754.0
+755.71588 52634.4
+756.05066 12311.5
+760.36084 4789.3
+761.36890 5256.1
+768.86902 178885.0
+769.37048 174670.2
+769.87207 68206.9
+770.37396 20029.2
+770.87506 3289.4
+779.28674 3233.8
+781.72614 5293.2
+782.06189 8924.6
+782.39557 9518.2
+787.73657 53507.7
+788.07001 86392.7
+788.40509 67063.9
+788.73901 36355.6
+789.06836 8150.7
+795.68005 7784.7
+807.91919 3869.1
+815.08533 8400.2
+815.41888 5336.9
+815.76166 3611.1
+816.09570 3199.4
+816.89789 4639.9
+820.18427 2959.8
+820.75903 38492.8
+821.09229 51800.9
+821.42700 37734.5
+821.76166 20149.8
+822.09973 4740.9
+825.41138 169548.0
+825.51849 3015.3
+825.91241 173655.9
+826.41437 93842.2
+826.91388 28440.0
+853.78186 19524.0
+854.11572 27171.8
+854.45093 25336.7
+854.78552 10990.8
+861.06580 5017.9
+874.94476 7948.9
+875.44891 7105.8
+875.95135 4428.9
+881.99121 3019.1
+916.98126 3500.8
+918.96088 8458.9
+924.53235 4979.3
+951.50903 9016.2
+952.52069 4435.4
+966.83466 3368.1
+969.52563 6000.0
+970.51508 4499.7
+971.51715 2983.6
+975.96716 6242.2
+976.48346 4706.2
+976.98083 4687.0
+1016.42371 3122.6
+1019.69482 4179.5
+1050.58521 7114.8
+1051.58765 6234.5
+1068.01184 7796.4
+1068.58960 14922.3
+1069.58899 9923.0
+1131.57117 6877.1
+1132.06885 9383.9
+1132.57336 3827.3
+1174.67371 3091.7
+1198.07129 15735.9
+1245.57690 3894.7
+1246.59949 3926.9
+1258.21191 3145.5
+1310.82080 3735.5
+1486.02148 2781.1
+1525.46106 3406.1
+1776.75854 4120.9
+1808.24146 3348.7
+1870.30237 4333.8
+1878.16199 4866.4
+1878.82056 4791.6
+1879.39246 32436.9
+1879.66760 82818.4
+1880.45947 7603.5
+1880.90173 4687.3
+1906.03552 3214.5
+1907.05176 35093.2
+1907.45923 3812.2
+S	2439	2439	1879.96340793
+Z	2	3758.079
+Z	3	5636.615
+532.50403 1532.6
+676.60931 887.7
+731.14209 742.9
+737.71442 623.0
+795.67822 1060.6
+804.62738 634.6
+1057.21826 815.0
+1069.60022 672.0
+1123.78247 670.7
+1140.45154 630.5
+1153.45422 719.4
+1188.15332 1287.5
+1198.12305 2710.3
+1205.04480 656.5
+1628.45154 784.3
+1724.17456 593.0
+1870.14758 1000.1
+1878.17883 766.6
+1878.68909 795.8
+1879.49719 19277.8
+1880.39026 694.0
+1907.05518 7553.6
+1918.93115 1000.1
+1930.69287 1339.9
+S	2441	2441	1879.94040793
+Z	2	3758.033
+Z	3	5636.546
+518.96051 673.5
+532.49561 2040.8
+549.14362 655.9
+553.04791 670.2
+573.76373 634.9
+649.96289 699.5
+669.73438 708.7
+676.64587 942.7
+701.86731 715.0
+714.48053 635.6
+767.34796 586.1
+795.68127 856.0
+932.57623 707.9
+1057.25403 834.6
+1198.11035 3454.0
+1876.38489 770.5
+1878.31152 1307.2
+1879.01147 1069.1
+1879.55835 19821.5
+1880.10522 897.3
+1880.82422 864.7
+1907.06409 7522.5
+1930.55713 839.2
+S	2442	2442	954.000241267
+Z	3	2858.725
+Z	2	1906.153
+271.45145 20032.6
+271.60654 21989.7
+298.13849 25084.3
+298.83621 15894.7
+309.19113 46475.6
+316.15021 30570.1
+326.13547 26511.1
+326.17166 23922.9
+334.17572 30722.1
+342.27167 20275.4
+344.14536 173890.8
+345.14703 17916.1
+348.20291 91518.0
+351.21368 93088.1
+352.19836 100711.7
+369.22424 686008.9
+370.22806 106929.2
+391.23737 79773.7
+392.22681 47777.3
+393.23123 19458.5
+395.18649 20077.6
+397.27954 37903.7
+398.28415 21274.9
+401.96344 14839.9
+402.23859 79349.9
+403.24173 67865.4
+408.32169 19815.7
+411.22168 14808.6
+412.20544 21997.8
+413.16574 64993.2
+417.22293 28200.4
+419.26410 48142.8
+420.26913 32398.9
+424.19455 15209.0
+429.23340 32078.6
+431.17709 68118.8
+433.29520 18968.2
+435.23663 43633.6
+441.19958 25813.1
+447.25940 68101.3
+448.26459 50741.2
+457.22858 65091.2
+461.28644 71464.5
+462.29324 21554.8
+464.58792 14554.2
+479.26453 18891.4
+482.30768 116197.6
+483.31171 24920.4
+485.27444 23858.2
+486.28079 23549.5
+487.32593 19815.1
+488.33527 38319.6
+490.31625 18908.9
+493.19183 18459.9
+499.23727 51628.6
+504.32269 21352.1
+505.32318 51073.5
+508.23636 17369.0
+510.36404 21882.1
+511.36737 32572.4
+515.32214 99502.2
+516.26685 42004.2
+516.32495 100699.7
+517.32831 36905.5
+518.30786 38327.3
+520.32257 39755.8
+526.25098 63787.6
+530.30835 40869.4
+531.30963 19446.4
+532.34875 72990.7
+532.47748 43128.2
+533.35126 73853.2
+534.28198 17172.1
+534.35510 32933.4
+544.26068 168723.3
+545.26379 40210.5
+548.31873 141751.1
+549.15735 17491.7
+549.32166 25995.5
+553.89752 15302.1
+560.34393 131612.7
+561.34662 130647.3
+562.34772 48465.2
+572.71735 15888.4
+576.31256 31738.4
+577.29950 418304.7
+577.80176 287017.6
+578.30231 148927.7
+578.80292 24084.8
+579.30139 44279.5
+580.30096 18229.7
+598.35748 32281.7
+599.36285 41474.5
+600.36078 27562.7
+612.32544 26920.5
+616.39600 16533.2
+618.29120 37693.7
+623.30316 68219.3
+628.40631 30564.3
+629.41187 50768.0
+630.41772 29239.4
+634.34485 20730.6
+636.29834 26029.1
+638.83270 101702.3
+639.33502 82891.1
+641.31415 87881.8
+642.34119 112976.9
+643.34790 26465.0
+643.38757 46407.3
+645.33521 25357.2
+645.43390 33731.8
+646.43506 49005.4
+647.36523 74609.6
+647.44238 25652.6
+648.36511 36076.2
+657.42072 27392.5
+661.40161 99579.7
+662.40314 32793.6
+663.34216 53831.8
+664.38159 38797.6
+665.37408 43633.2
+673.36273 61114.3
+673.42792 43817.0
+673.86237 52273.4
+674.36768 26587.2
+674.43091 84626.9
+675.43079 50110.2
+676.60809 15583.2
+682.36786 710902.5
+682.86951 466524.6
+683.37109 185419.5
+683.87384 63147.7
+691.38141 48812.0
+692.38715 111166.6
+693.38733 70713.4
+699.35986 774737.5
+700.36383 253519.3
+701.36414 60950.1
+711.45154 18913.4
+716.87488 38065.9
+717.37885 28983.2
+718.38239 24849.5
+725.88397 315076.9
+726.38525 249771.8
+726.88641 83452.6
+727.38666 28765.5
+730.87640 46558.4
+731.37604 34940.6
+736.38477 61615.2
+737.38690 24128.3
+748.43585 18697.7
+754.39557 81468.1
+755.39484 19230.3
+758.42603 19839.9
+761.44452 22004.2
+770.86786 14996.8
+773.42126 222847.2
+773.92279 222021.2
+774.42133 90286.4
+774.92694 26114.7
+776.43140 114366.8
+777.43988 40078.9
+782.42621 696795.8
+782.92786 524140.7
+783.42871 178768.7
+783.92786 57162.8
+784.43738 16017.2
+785.37823 46982.6
+786.37744 18488.6
+786.43683 20327.6
+787.45996 31027.0
+788.46429 44285.9
+791.42523 17648.7
+804.42560 39076.1
+805.46887 82281.8
+806.47522 38571.1
+812.44403 31111.8
+830.93237 39619.4
+831.93634 26089.3
+839.94006 261249.0
+840.44208 175397.8
+840.93933 67495.4
+841.44769 35196.2
+845.45398 29750.8
+846.42828 538444.4
+847.43158 235245.7
+848.43042 73865.7
+856.41913 28213.6
+863.46246 176961.6
+864.46509 73394.5
+865.50012 21160.1
+866.65350 16369.6
+868.41223 35866.1
+873.44763 140742.8
+874.44763 68553.4
+882.43506 38807.6
+886.41968 35691.8
+887.47876 77634.8
+887.97607 78570.2
+888.48932 16721.4
+889.51471 63670.8
+890.51447 20279.7
+891.45685 768709.8
+892.46008 349086.3
+893.46283 85896.0
+894.46094 22527.0
+896.48193 587552.8
+896.98309 477239.4
+897.48468 257360.0
+897.98810 98657.3
+898.50739 22040.7
+899.48126 19980.1
+900.49304 18173.6
+900.57800 20520.6
+901.47797 21481.0
+902.04858 25572.0
+902.48071 22664.3
+903.44958 5084010.5
+904.45178 2586384.0
+904.86310 29920.5
+905.35248 18465.6
+905.45270 930339.3
+906.45319 190374.4
+907.45288 35383.6
+908.48688 21985.8
+908.99628 35908.3
+914.47028 21111.5
+920.01324 15699.0
+926.51996 16398.8
+967.52533 20725.5
+976.54419 93208.3
+977.54437 31968.3
+986.53174 127916.0
+987.52936 80620.7
+988.52612 19963.5
+995.51093 176830.1
+996.51385 104885.6
+997.51605 25437.5
+998.52075 19309.6
+999.52881 22406.7
+1004.54053 715986.6
+1005.54388 379602.9
+1006.54663 122876.7
+1007.55066 23907.7
+1016.53339 2032592.8
+1017.53625 1138299.5
+1018.24536 15618.5
+1018.53857 415763.9
+1019.54102 101657.5
+1020.54199 27243.2
+1026.53113 19212.7
+1043.55432 38519.8
+1057.20898 19699.1
+1061.56299 139565.0
+1062.56763 83253.1
+1063.57153 26575.4
+1082.54578 79282.6
+1083.54810 57155.7
+1084.54980 25983.3
+1135.58911 23663.7
+1136.56653 46153.5
+1153.59241 2007352.8
+1154.59570 1245942.6
+1155.59680 510968.1
+1156.59778 141927.1
+1157.60754 36604.2
+1177.61658 20539.8
+1178.61621 26001.8
+1180.64148 47855.5
+1181.63147 21225.7
+1195.62964 110886.9
+1196.62781 86298.0
+1197.64014 28324.9
+1198.06519 75436.5
+1208.62793 219652.2
+1209.62842 127904.7
+1210.64160 36396.5
+1265.64380 42034.1
+1266.67456 219113.6
+1267.68188 151896.4
+1268.67957 83805.7
+1273.70642 18699.7
+1286.32495 16569.9
+1294.48828 15580.9
+1310.65027 48041.2
+1311.64771 17753.4
+1334.67188 18275.6
+1346.70874 35363.0
+1347.72583 20939.7
+1363.72888 2157976.0
+1364.73267 1557743.4
+1365.73486 716088.1
+1366.73560 253805.9
+1367.73718 52065.5
+1368.74219 24550.2
+1408.65710 38807.0
+1423.73425 36956.8
+1424.75061 41944.1
+1425.67883 117169.9
+1426.68359 103103.3
+1427.68628 46953.5
+1430.80225 17175.2
+1432.74634 23392.4
+1433.74121 22599.2
+1447.75952 97203.6
+1448.76428 55317.8
+1449.77539 32188.2
+1450.76245 525059.7
+1451.76428 397943.3
+1452.76514 196344.1
+1453.76135 64430.4
+1510.77063 121795.9
+1511.77405 105470.1
+1512.77380 58953.7
+1520.76440 91401.5
+1521.75293 87097.0
+1522.75183 61771.9
+1525.38672 22192.7
+1538.76660 791841.3
+1539.77075 593474.3
+1540.77051 271151.7
+1541.77209 107517.5
+1542.78198 18879.1
+1563.81543 33239.7
+1584.15308 16413.3
+1635.83350 26326.8
+1661.86963 20685.8
+1678.85583 34887.8
+1679.87097 24063.4
+1836.75586 17255.6
+1869.61011 16962.3
+1870.08118 18207.0
+1878.72937 34903.4
+1879.47351 462083.3
+1879.73474 77519.0
+1880.19751 18578.7
+1881.19861 20672.3
+1907.05396 179903.4
+1930.60620 27610.2
+S	2443	2443	1907.46324127
+Z	3	5719.114
+Z	2	3813.079
+520.16461 527.2
+532.50110 2137.4
+573.10992 628.4
+630.39978 821.1
+676.63348 1550.6
+757.37402 872.1
+776.42676 1026.5
+781.89484 616.5
+785.38104 1126.4
+786.35663 673.0
+791.41785 941.0
+795.68970 1076.8
+846.43335 944.4
+869.41400 695.3
+873.45276 1117.3
+882.42499 1570.2
+891.45502 4120.9
+892.45911 826.1
+903.44977 2188.0
+904.49139 1307.4
+967.52203 1041.4
+976.54498 953.7
+986.54010 1386.6
+995.51239 2969.1
+996.51563 1180.2
+1004.53918 6100.3
+1005.54004 1823.6
+1016.53558 2385.0
+1061.55603 1185.6
+1082.54077 4031.0
+1083.54614 1694.8
+1104.62048 1839.4
+1153.59094 3101.0
+1154.56970 838.2
+1167.63037 1547.7
+1168.62219 1413.6
+1177.62244 889.7
+1178.62097 1001.8
+1188.04065 676.3
+1195.62500 5650.3
+1196.62903 2990.9
+1197.64307 984.6
+1198.11902 3292.4
+1208.62598 2309.6
+1209.62732 1202.1
+1247.61743 940.3
+1265.64978 1273.2
+1266.66577 1517.9
+1325.45935 646.8
+1334.67102 2538.8
+1363.72705 7832.1
+1364.73523 3158.7
+1365.74329 1170.0
+1395.73926 937.2
+1397.69177 870.0
+1408.65369 1236.7
+1414.72437 766.6
+1419.74695 717.4
+1420.75146 809.4
+1423.73474 1900.7
+1425.67480 4688.4
+1426.69067 2165.5
+1427.67786 1207.9
+1432.74792 2417.5
+1433.74036 2194.4
+1447.75049 2420.0
+1448.75366 1575.6
+1450.76001 5180.3
+1451.76221 2762.6
+1472.83813 4297.5
+1473.83972 3105.7
+1474.84277 1041.2
+1492.77002 981.7
+1503.82764 1354.2
+1510.76563 3566.7
+1511.77563 2332.7
+1512.78137 658.6
+1520.74451 1815.0
+1521.74829 2811.9
+1522.74402 1284.4
+1530.80420 745.2
+1533.83496 3923.0
+1534.83276 2632.3
+1535.84937 1143.5
+1538.76428 8899.6
+1539.76160 4274.0
+1540.77283 2117.8
+1545.83240 10499.7
+1546.82922 11601.2
+1547.82910 4000.4
+1557.26013 728.7
+1563.84155 139185.7
+1564.84595 79015.6
+1565.84753 31041.3
+1567.09375 702.6
+1635.82397 911.5
+1654.04114 617.9
+1660.88232 728.3
+1661.84619 4176.9
+1662.84998 2361.1
+1663.83472 1122.1
+1678.87048 4175.4
+1679.87097 2241.1
+1680.83936 865.9
+1700.94263 2701.9
+1701.92761 1140.2
+1731.94202 1020.4
+1732.87146 1068.2
+1733.87134 1568.8
+1734.88440 831.2
+1750.89258 2889.9
+1751.88818 1211.5
+1761.94348 1330.2
+1773.94128 6453.1
+1774.93982 5641.9
+1775.94373 3468.7
+1791.95203 64511.5
+1792.95630 41904.2
+1793.95605 18015.0
+1794.96924 1183.0
+1797.94263 1009.1
+1798.95288 2211.8
+1799.97632 1233.1
+1800.95764 824.4
+1815.97070 9041.6
+1816.97693 6005.0
+1817.96265 3076.6
+1827.94189 1562.9
+1828.94446 4028.9
+1829.94275 3227.0
+1830.91345 1386.2
+1844.99060 695.7
+1845.95728 2833.9
+1846.94641 6441.6
+1847.95276 4270.4
+1848.96155 2182.0
+1855.91443 950.2
+1859.91821 1220.7
+1860.97205 833.6
+1861.95947 1018.3
+1862.97620 960.8
+1870.96387 2069.2
+1871.94299 8337.5
+1872.94116 9669.4
+1873.94031 4426.7
+1874.92810 1417.4
+1876.96655 3928.2
+1877.97815 3469.2
+1878.77319 702.0
+1879.22302 1833.3
+1879.52063 19546.1
+1880.07947 1681.6
+1906.71106 757.5
+1907.06494 7536.7
+1930.58801 1035.1
+S	2445	2445	476.3008246
+Z	2	950.586
+121.78522 5627.1
+126.34444 1223.7
+135.06534 1535.6
+136.07541 7910.1
+138.14630 1526.3
+141.43980 1759.0
+152.40193 1398.4
+158.80620 1338.6
+159.27162 1373.4
+160.46400 1539.8
+188.20218 1382.6
+188.22247 1351.2
+188.26149 3941.3
+188.27139 4463.4
+188.27904 4784.1
+188.29652 5518.8
+188.31371 3565.2
+188.34227 1899.0
+193.09744 18217.8
+198.91887 2093.0
+199.18091 5961.4
+199.28458 3165.2
+199.29803 3273.3
+199.30659 5876.4
+199.33543 2709.2
+200.18518 2027.2
+201.98769 1308.1
+221.09227 48450.5
+222.09573 10649.6
+227.17607 4340.3
+239.17639 3073.6
+239.87029 1314.2
+260.14301 5579.8
+261.16010 14100.8
+262.16309 2090.1
+271.58572 1523.0
+278.15359 31046.9
+279.15741 5591.7
+284.19760 7314.3
+289.15497 58343.0
+290.15839 11599.6
+295.23880 2912.1
+306.18137 4852.7
+328.22311 5986.6
+334.17651 70918.1
+335.18005 13559.8
+336.18039 2105.3
+340.26059 7283.9
+341.74710 2315.6
+342.29007 1463.7
+343.23285 2235.9
+344.14526 2485.0
+352.21674 1725.4
+352.26041 2420.2
+358.21582 3659.1
+365.15421 5020.5
+365.74863 13883.2
+366.25040 9608.4
+366.75299 2777.8
+367.72302 1309.9
+369.22491 39077.4
+369.28674 4040.8
+370.22992 5765.3
+373.22720 2799.8
+391.23752 155950.8
+391.75153 1269.5
+392.24091 33651.7
+393.23022 6375.8
+395.30258 4155.6
+397.28085 14892.9
+398.28479 4554.1
+402.23895 33115.6
+403.24380 7893.9
+408.32227 3195.2
+419.26553 104279.0
+420.26904 29356.3
+421.27402 4552.9
+425.34674 4213.2
+438.30780 4416.0
+439.31107 2619.0
+441.30792 7748.3
+442.31299 3301.2
+443.30493 3876.1
+447.26035 72111.6
+448.26410 19830.6
+449.26804 1994.7
+451.78912 2888.0
+475.79016 8479.9
+476.29263 11187.6
+476.79352 9481.5
+477.29300 4621.3
+478.23956 1848.6
+482.30682 2204.8
+482.36847 2892.8
+483.30063 1660.0
+484.25650 3452.9
+484.59076 1722.5
+485.27222 1734.5
+487.32986 5397.5
+489.31619 1481.4
+500.32480 2425.8
+503.72876 1814.4
+504.26520 4868.1
+504.32147 532855.3
+504.59454 3220.5
+504.92029 3376.4
+505.32428 146801.0
+506.32153 25234.4
+506.84366 1355.0
+507.32144 8135.7
+510.36465 18445.0
+511.36774 5805.0
+513.59412 10502.9
+513.92841 6524.3
+514.26282 3169.7
+514.59595 2101.5
+515.32263 35123.2
+516.32556 8735.1
+517.32629 2203.9
+528.32129 11249.7
+532.34943 55096.3
+532.44470 4870.1
+533.35223 16587.2
+534.35516 2581.8
+539.36115 3422.5
+539.76233 1270.9
+540.36951 1648.0
+542.33356 2694.0
+548.38239 2018.5
+551.39197 4851.6
+552.39789 1727.6
+554.29321 4807.2
+554.39111 7373.5
+554.62469 4309.0
+554.95758 1689.4
+555.29547 1642.9
+555.39502 2948.6
+556.39130 2058.2
+557.39087 1800.3
+558.76044 1355.5
+560.29468 14914.0
+560.34412 131734.7
+560.63037 14006.5
+560.96417 7256.1
+561.29712 1847.4
+561.34741 43651.0
+562.35065 8143.1
+564.44537 1534.3
+569.40234 16362.5
+570.40466 4645.9
+578.29919 4559.9
+584.38422 9395.0
+585.38605 1885.9
+591.32043 10560.1
+592.32703 3793.3
+596.38281 5265.6
+597.38654 2006.6
+598.36017 7543.6
+599.28546 2235.3
+599.39374 3052.1
+599.78888 2119.1
+613.41138 6875.6
+615.70966 1484.4
+615.78247 3446.8
+616.07623 3608.1
+616.61078 4609.1
+617.40533 1125541.9
+617.47717 4807.8
+617.50494 1925.6
+617.53070 1281.4
+617.58685 2002.3
+617.62701 2108.3
+617.67432 3001.4
+617.95135 2280.4
+618.20331 6905.5
+618.40784 397056.4
+618.73511 2934.4
+618.98315 1662.1
+619.03302 5118.8
+619.19843 1607.4
+619.27576 1658.4
+619.40704 103569.1
+620.04358 2144.9
+620.40674 25859.7
+621.40936 2259.0
+623.39209 2065.6
+624.81073 1381.4
+628.40637 15499.4
+629.41284 5780.4
+633.83405 2119.5
+641.40564 24005.0
+641.84113 3504.9
+642.34094 5739.0
+642.40790 7539.1
+642.84180 1410.1
+645.43347 21171.0
+646.36359 10333.2
+646.43719 7116.4
+647.36377 4542.3
+655.41772 6903.5
+655.83057 4324.0
+656.33386 2288.1
+656.40594 1447.9
+656.43420 1587.6
+663.38953 4028.5
+667.84058 11258.4
+668.34180 7378.7
+668.84210 2752.1
+673.42847 94149.8
+674.43213 41581.6
+675.43512 9184.7
+676.63470 2169.3
+682.37054 6629.2
+682.48535 10600.5
+682.87225 5331.8
+683.37378 1752.4
+683.48901 4707.7
+691.38495 39674.0
+692.38989 13483.6
+693.38348 2987.0
+699.84869 1879.1
+704.33936 7754.9
+704.84210 3978.2
+711.44397 6613.6
+712.44751 2594.6
+713.34515 38458.4
+713.84711 28056.6
+714.34802 13301.0
+714.84991 4168.9
+725.88446 14814.9
+726.38531 10444.7
+726.88782 2873.0
+728.29462 1521.7
+728.40222 3644.2
+728.46741 4445.5
+729.46625 5239.2
+730.37036 2671.4
+730.48950 1042456.8
+730.58752 3317.1
+731.49255 422262.9
+732.49237 122863.6
+732.58569 4999.4
+732.68109 1455.4
+733.49249 28776.5
+734.49377 4228.7
+739.50800 5514.6
+740.46509 1568.0
+740.50903 1738.5
+759.44824 14918.1
+760.44928 5455.5
+769.49304 2258.5
+769.88690 3581.9
+776.47290 24468.7
+777.47736 9922.8
+777.98169 2188.5
+778.47546 2521.4
+785.17548 3805.4
+785.84961 1637.2
+786.36566 3905.8
+786.45679 12926.6
+786.72235 2008.1
+787.32715 2529.2
+787.37390 4779.8
+787.51050 1112089.8
+787.61951 3700.4
+787.90204 2787.8
+788.10547 1989.6
+788.51318 460363.9
+788.65668 6096.0
+789.43182 3283.0
+789.51392 156868.7
+789.65265 1790.6
+789.69659 2148.2
+789.85474 4608.0
+790.51514 37502.2
+791.51770 5779.1
+795.66693 2981.8
+797.49542 8020.8
+798.49695 2422.4
+804.46863 128717.0
+805.47168 67249.1
+806.47345 21861.8
+807.47418 3879.7
+820.46362 2635.4
+826.44965 1983.1
+868.62695 1548.4
+877.27008 1584.7
+919.60358 1640.5
+953.88269 2627.0
+954.37994 1819.6
+1011.03516 1239.8
+1020.88898 1508.1
+1021.00964 1506.6
+1034.85547 1633.5
+1057.23267 1861.3
+1198.00244 7060.4
+1206.23132 1536.3
+1525.49585 1904.2
+1868.17273 1635.4
+1875.37219 1393.1
+1877.81433 1742.9
+1879.24854 4928.4
+1879.53284 47605.8
+1880.16162 2950.1
+1886.85840 1745.7
+1907.05042 17894.1
+1907.32751 1293.4
+S	2446	2446	476.8013246
+Z	2	951.587
+120.65293 3317.0
+120.66298 4382.4
+121.78558 16864.3
+132.74110 4397.4
+133.05220 7694.3
+135.83392 3542.4
+136.07544 54929.8
+138.77036 4481.3
+141.85362 4100.0
+142.31364 4103.4
+146.18221 3517.9
+149.19060 3885.6
+152.67276 3950.0
+176.07103 6133.5
+177.32574 4175.1
+178.42502 3737.8
+180.34517 3936.4
+188.20897 3941.2
+188.25577 9405.5
+188.28049 16562.7
+188.30743 12422.4
+188.32648 6884.0
+193.09729 101475.5
+194.10114 9644.3
+198.91800 5042.0
+199.18030 27382.5
+199.28024 8212.0
+199.29463 12625.2
+199.30721 15029.3
+199.32277 11044.6
+204.06543 8154.9
+209.70454 3805.4
+210.05220 3751.9
+210.43820 4964.6
+212.24947 4100.2
+221.09221 246132.8
+222.09549 35196.9
+224.07332 10476.6
+227.17525 16476.7
+230.29704 3471.3
+230.82454 3294.5
+239.17436 8115.2
+252.06880 12090.6
+255.28618 4851.8
+260.14252 18641.2
+261.15997 46925.3
+271.49316 4747.9
+278.15332 167763.5
+279.15720 19333.6
+280.14908 5994.0
+282.80881 3632.7
+284.19675 23701.6
+285.20160 4937.0
+289.15469 263279.9
+290.15814 50354.9
+291.16055 4086.5
+295.23813 7323.8
+303.64624 5497.3
+306.18143 17934.6
+307.18811 4471.5
+313.19296 8174.1
+328.22342 22725.0
+334.17624 250370.0
+335.17984 53361.2
+340.25864 14760.8
+341.74667 13339.2
+343.23520 9415.9
+345.21848 4082.3
+350.28906 7548.3
+356.19766 4073.4
+362.17200 6337.0
+363.49957 3889.4
+365.15289 27225.0
+365.74808 69417.1
+366.25018 28642.6
+366.75058 6620.7
+369.22449 113249.3
+370.22787 15123.7
+370.34177 3455.2
+373.22757 4486.4
+377.74884 3796.5
+391.23721 502384.3
+392.24048 89597.4
+393.22995 17922.6
+397.28156 22875.0
+398.28772 4999.9
+402.23853 68721.9
+403.24246 15124.4
+419.01831 4527.9
+419.26517 226379.0
+420.26880 55698.9
+421.27322 6214.9
+427.53699 4458.4
+438.30792 17896.6
+441.30682 23824.7
+442.31042 7749.0
+447.25983 230272.5
+448.26340 57356.5
+449.26837 6985.2
+451.79211 10520.8
+456.31836 23708.7
+479.22867 5175.2
+483.25662 6176.4
+502.76614 3899.1
+503.21994 4016.6
+504.26465 14631.3
+504.32101 1017698.8
+504.59521 15827.8
+504.92319 8475.9
+505.32401 272338.5
+506.31757 40246.8
+507.03940 3530.0
+507.32172 8676.5
+510.36441 29085.9
+511.36646 8532.1
+513.59460 17140.7
+513.92645 19010.0
+514.26221 5497.9
+514.59705 6221.2
+515.32239 55236.7
+516.32513 21815.3
+519.09418 3522.0
+521.95325 7339.1
+528.32019 10221.1
+532.34888 102353.4
+532.44702 11067.5
+532.48358 3767.5
+533.35242 37047.7
+542.33087 5978.8
+549.14050 5964.6
+551.39105 13588.9
+554.29169 10096.1
+554.39069 14174.2
+554.62402 9550.3
+555.39160 6384.6
+560.29413 38013.0
+560.34357 240237.8
+560.62988 41450.5
+560.96198 24792.0
+561.29718 8586.1
+561.34662 74373.3
+562.35211 13634.9
+569.40118 49350.0
+570.40570 17647.8
+584.38440 13032.8
+585.39087 4714.8
+591.32019 43412.8
+592.32312 14171.6
+596.39172 4724.5
+598.35388 6706.8
+599.37598 5148.1
+615.77844 6252.1
+616.08069 5950.0
+616.61261 9050.7
+617.32941 6107.7
+617.40497 2090920.1
+618.20270 10460.0
+618.40747 766721.8
+618.73169 4326.8
+619.03687 9914.0
+619.40704 182590.6
+620.40637 44393.0
+621.41046 4854.7
+628.40735 27218.3
+629.40747 8802.0
+630.40393 4411.9
+641.40527 28266.0
+641.84357 9036.7
+642.34241 5630.9
+642.40619 10134.7
+645.43286 40405.7
+646.36267 10019.0
+646.43756 13311.1
+647.34247 4103.0
+655.41986 10914.5
+655.83344 8268.1
+656.32922 8933.7
+662.89795 3906.2
+663.38391 4764.1
+667.83875 16639.6
+668.34320 16274.7
+668.84381 6640.9
+673.42773 156921.3
+674.43115 56431.8
+675.43219 7882.7
+676.65283 6787.4
+678.63214 3874.8
+682.37378 6932.6
+682.48560 25888.4
+683.49103 11718.4
+691.38422 77095.7
+692.38831 27840.7
+704.33789 11109.0
+704.40747 10611.4
+704.83936 9910.0
+711.44293 11686.1
+712.44586 4623.0
+713.34503 72791.7
+713.84644 55707.4
+714.34790 27298.7
+714.85736 4929.7
+725.88519 15538.1
+726.38959 12868.6
+727.98358 3869.6
+728.39984 5425.1
+728.46954 6090.2
+729.47003 8320.0
+730.48901 1659053.9
+731.11157 5452.3
+731.49213 699106.6
+732.49200 195833.6
+732.59778 7213.3
+733.49097 48706.5
+734.49829 7409.8
+738.05530 3630.9
+739.50714 10429.4
+759.44965 18427.7
+760.45294 7197.5
+769.88855 9279.1
+776.47406 31932.3
+777.47253 12620.0
+778.47351 5371.3
+782.33978 5587.9
+785.62500 5239.9
+786.34314 5356.8
+786.45831 25703.0
+787.51013 1633772.0
+788.51282 734780.1
+788.65710 7577.8
+789.24304 3847.3
+789.40009 4621.8
+789.42389 5966.0
+789.51343 230163.2
+789.86414 5332.4
+790.51459 52498.4
+791.51025 13350.9
+794.25769 4224.7
+795.66895 6125.2
+797.49304 12943.8
+804.46808 196041.0
+805.47089 80329.0
+806.47046 28160.0
+807.47437 4303.2
+820.47217 5267.6
+827.16327 4488.5
+956.34149 3924.8
+960.08417 3959.8
+968.46814 3884.1
+1198.00012 21351.7
+1210.56177 3733.6
+1312.25403 4892.0
+1444.60632 4115.2
+1525.89209 3645.8
+1799.74158 5018.1
+1870.23950 7097.8
+1878.43433 6516.0
+1878.95056 9977.3
+1879.57178 128624.4
+1880.24365 4645.6
+1880.68616 6136.2
+1881.12354 5230.7
+1906.50903 4941.3
+1907.10522 51242.8
+1918.91528 5331.8
+S	2447	2447	477.3018246
+Z	2	952.588
+120.80196 65564.5
+121.00028 63501.6
+121.78094 68776.9
+121.78668 293161.5
+134.60886 57522.5
+136.07516 393664.3
+140.90076 58452.4
+144.92300 59181.2
+146.92020 89863.0
+148.07475 92793.6
+161.95952 60445.4
+164.54541 58970.6
+164.59467 55810.9
+165.35811 56350.6
+175.41106 58553.8
+182.71922 56435.4
+188.25829 101331.8
+188.27431 129371.6
+188.28268 117703.6
+188.29318 109954.2
+188.30150 112830.3
+188.31947 65259.7
+189.82437 69771.1
+192.56195 72928.3
+193.09705 428900.7
+194.70026 64692.8
+198.91910 87624.9
+199.17912 117213.5
+199.20824 106025.5
+199.23521 63196.8
+199.26573 79034.5
+199.28857 103666.3
+199.29547 106484.2
+199.30652 293717.3
+199.32372 129314.6
+199.38513 92837.0
+199.40419 83433.4
+199.42197 94827.1
+206.08179 57003.7
+221.09193 948889.4
+222.09497 89380.9
+227.13884 60523.7
+228.39383 58375.1
+255.28899 72282.9
+261.15976 193049.5
+265.83191 52861.5
+276.95920 58012.1
+278.15295 769510.6
+286.62701 72789.5
+289.15424 1144754.8
+289.99579 65353.8
+290.15714 152845.5
+316.57776 57909.4
+325.02841 60395.8
+334.17563 1080891.5
+335.17993 113643.9
+339.74951 61335.6
+346.60898 65599.0
+347.29712 59064.9
+348.64621 67095.2
+350.29337 71896.6
+365.15488 98207.5
+365.74777 301440.4
+366.24878 83050.9
+378.07440 67644.1
+381.36032 88601.7
+391.23651 2065582.3
+392.23978 329148.4
+397.27963 72129.8
+402.23752 129999.6
+417.30392 54912.0
+419.26431 900861.3
+420.26880 191771.6
+420.92105 55343.6
+441.30823 113466.0
+447.25986 1085318.8
+448.26257 240865.7
+456.31464 182336.5
+482.65677 66946.2
+504.32040 4091761.5
+505.32388 874837.4
+506.32559 127066.5
+515.32300 183307.6
+532.34857 458517.2
+532.46191 186003.8
+533.35114 162143.3
+560.34332 970244.1
+561.34613 241942.3
+569.39917 122991.9
+582.35614 78173.3
+585.33569 60135.4
+591.32098 95170.6
+592.32819 65738.9
+617.40417 6911808.5
+618.40704 2166187.3
+619.40802 544113.9
+620.40234 89996.1
+630.40576 76651.9
+645.43512 105523.4
+655.40985 84326.6
+673.42792 752430.8
+674.43176 209647.6
+676.65576 92331.1
+684.19318 75587.0
+691.38190 213915.4
+695.90582 65666.6
+727.00397 63211.2
+730.48816 5127360.5
+731.49115 1933551.6
+732.49030 444399.4
+733.48993 64216.2
+741.16199 69525.0
+757.08484 71077.6
+760.09125 59434.5
+776.47583 101184.0
+786.45746 83605.3
+787.50940 3326945.8
+788.51288 1470402.6
+789.51532 266119.4
+795.67609 90909.9
+804.46735 873857.2
+805.47064 256064.3
+820.44104 65911.6
+858.05103 58003.2
+941.50793 58621.3
+948.75671 67003.6
+954.85938 96888.9
+1021.17395 63434.9
+1042.94690 62704.7
+1106.62634 76745.1
+1126.25525 74735.3
+1198.02979 355123.8
+1300.66565 70074.0
+1525.41455 95846.6
+1567.65686 65951.5
+1607.58374 71375.5
+1685.67969 65668.3
+1692.65723 59936.9
+1776.97546 83841.0
+1785.36060 61072.3
+1876.10754 77976.6
+1876.88013 89342.4
+1878.23474 90994.9
+1878.65845 65868.3
+1879.31995 455059.2
+1879.58362 2048242.1
+1881.04651 92681.5
+1883.24792 67201.2
+1889.05457 58581.2
+1907.10571 813096.1
+S	2449	2449	1431.4975746
+Z	4	5721.959
+390.87418 2221.1
+427.55280 3613.6
+429.38260 2797.8
+482.66507 3048.8
+496.71759 2197.1
+510.27686 2599.1
+532.52631 7044.9
+611.27576 2819.0
+676.65686 3879.7
+770.32611 2314.6
+783.49261 2396.6
+795.57166 2408.9
+795.68811 4387.4
+809.94501 2859.9
+953.88190 3038.2
+953.99292 4582.5
+954.49353 5789.3
+954.99426 4242.8
+955.49988 3029.6
+1019.72034 2892.9
+1158.19934 2633.9
+1198.18176 13373.5
+1429.77710 2950.3
+1485.74426 2363.5
+1590.28015 2525.8
+1726.50391 2363.9
+1747.41931 2819.4
+1777.01440 3911.5
+1870.27954 3231.3
+1876.49414 3020.4
+1879.19287 9220.1
+1879.57190 79259.9
+1879.91760 9567.8
+1880.22375 4127.7
+1881.92310 2525.0
+1882.98572 2588.5
+1907.01807 57574.4
+1907.48303 57103.1
+1907.98193 129445.5
+1908.48218 95208.2
+1908.98535 83897.7
+1909.48462 19287.1
+1909.98291 12961.2
+1911.02161 4308.4
+1918.86853 3112.7
+1930.63318 3814.3
+S	2450	2450	1907.46524127
+Z	3	5719.12
+Z	2	3813.083
+532.44104 2264.5
+532.46802 3350.2
+549.17035 1826.8
+576.01300 1627.5
+630.42950 2277.1
+676.64685 3133.0
+784.45447 2212.7
+785.36700 2461.1
+795.68170 2701.4
+891.45471 5517.4
+995.51617 4369.8
+1004.53857 7839.6
+1006.40741 1632.7
+1057.26282 2515.9
+1082.54150 4410.2
+1134.32568 1922.6
+1153.59277 3512.8
+1186.82385 1814.3
+1194.27832 2186.1
+1195.62720 7530.8
+1196.63794 4289.7
+1198.04138 8363.9
+1208.62268 2395.8
+1334.67249 2978.3
+1335.62598 1764.7
+1355.24390 2156.1
+1363.73108 8078.5
+1364.73352 3724.4
+1408.65015 3179.0
+1425.67444 5325.0
+1426.66565 3666.3
+1430.72229 1949.4
+1432.74475 2662.8
+1447.77576 2546.1
+1450.76013 6812.0
+1451.75464 3074.1
+1472.83337 6026.7
+1473.83081 3778.8
+1492.68152 2108.1
+1493.73169 2177.9
+1503.84863 2540.9
+1510.76489 5541.3
+1511.77527 3151.2
+1520.74512 4842.9
+1521.74451 3528.5
+1525.47217 2196.5
+1533.82227 3306.4
+1534.85474 3450.5
+1538.75928 10368.3
+1539.79004 5653.9
+1545.83582 15308.9
+1546.82922 12130.0
+1547.84167 3167.3
+1563.84241 175758.4
+1564.84656 113078.2
+1565.84644 28166.5
+1661.83923 5061.7
+1662.86157 3949.9
+1678.87317 5746.1
+1700.93579 3372.4
+1751.87134 2263.0
+1773.94727 6203.5
+1774.93701 7675.2
+1791.95142 76070.1
+1792.95496 60873.2
+1793.95959 22287.1
+1798.96643 3249.7
+1799.97217 3333.5
+1815.96423 11885.9
+1816.97449 9816.2
+1817.99756 2880.0
+1827.96289 3644.2
+1828.94275 5662.6
+1829.91736 5036.3
+1846.94238 11433.6
+1847.95129 4844.2
+1848.95789 1944.3
+1860.02576 2330.1
+1870.94177 2711.3
+1871.94434 13961.6
+1872.93494 11885.6
+1873.93994 5977.5
+1874.91675 3085.2
+1876.95911 3840.0
+1877.96130 5157.3
+1879.26660 9692.2
+1879.56152 57426.5
+1879.89490 9774.1
+1880.88550 3683.8
+1881.96350 1863.0
+1882.11499 1981.4
+1907.05762 22061.1
+1907.46667 1815.3
+1916.36792 2049.5
+1930.69519 2996.8
+S	2451	2451	953.997991267
+Z	3	2858.719
+Z	2	1906.148
+270.45395 2327.0
+277.19943 2383.1
+279.17328 2647.5
+280.16724 3565.8
+297.69379 2251.0
+298.13934 4374.5
+298.17697 3279.7
+309.19244 7434.2
+316.10153 2225.6
+316.15030 4870.9
+320.20593 3522.9
+326.17215 3721.9
+333.20337 5378.7
+344.14563 29095.2
+345.14874 3993.1
+345.80145 2535.4
+348.20319 20820.4
+349.20615 4240.7
+351.21414 26796.8
+352.19901 20800.9
+353.20081 4340.4
+369.22470 66223.2
+370.22864 10382.8
+386.15671 6153.9
+389.19882 2587.9
+391.23694 9492.2
+392.22815 14170.6
+393.23056 3636.8
+395.19360 4030.0
+397.28159 2925.3
+402.24042 12789.3
+412.20438 4741.9
+413.16626 13504.4
+414.16898 4661.4
+417.22684 4008.4
+419.26532 5186.3
+429.23389 6568.9
+431.17691 12450.0
+433.29358 4542.7
+435.23569 6498.5
+436.23929 2629.7
+439.21811 4067.8
+441.20001 3254.9
+447.26044 10886.2
+448.26840 3682.2
+457.22867 10442.1
+461.28748 10903.4
+462.28998 5285.3
+473.72711 2403.3
+482.30887 19763.3
+485.27472 3557.7
+493.19305 5690.9
+498.25623 4278.0
+499.23929 6951.5
+504.01468 2353.3
+504.31833 5812.6
+508.24683 2462.0
+508.28000 5432.0
+509.22571 2844.7
+511.36584 2834.0
+515.32300 20357.0
+516.26678 8888.3
+516.32635 11927.9
+518.30792 9231.9
+519.31104 3026.8
+520.32617 4417.5
+526.25128 13122.7
+530.30865 10003.8
+531.31183 3151.6
+532.35016 13209.0
+532.47296 6952.4
+533.28064 4375.7
+533.35333 4594.0
+544.26141 31288.0
+545.26788 8438.9
+548.31866 25507.6
+549.32031 6824.8
+560.34479 21148.7
+561.09613 3019.7
+561.34772 8812.8
+576.30981 5271.9
+577.29993 79168.2
+577.80200 64899.2
+578.30200 32039.5
+578.80029 9923.6
+579.30511 5150.5
+582.27795 2864.0
+598.35828 8674.3
+599.36310 4522.0
+608.35126 3135.9
+612.32391 3850.6
+618.28888 5958.5
+623.30377 14154.5
+625.30536 5065.7
+628.40723 10487.4
+629.40948 4992.8
+630.36938 2353.7
+633.40802 2901.8
+633.83960 3839.7
+636.29645 4790.3
+638.83423 20721.1
+639.33600 20032.4
+639.83899 5670.5
+641.31647 10358.9
+641.40607 3356.8
+642.34198 22732.1
+643.34869 7177.9
+643.39056 8195.7
+644.35278 3151.2
+644.39569 4069.1
+645.43445 8667.1
+646.36139 8055.8
+646.43384 3357.3
+647.36694 8005.1
+648.37384 4622.5
+651.91394 2642.4
+655.42181 3408.1
+661.40448 18534.4
+662.40668 7977.5
+663.35370 11389.5
+664.36609 4589.0
+665.37836 7848.6
+666.38348 5544.1
+672.29559 3571.4
+673.36163 9314.7
+673.42828 21058.0
+673.86359 7535.9
+674.36798 3248.0
+674.43256 8334.0
+675.93518 2606.9
+676.64978 4265.4
+682.36841 135714.3
+682.87030 100853.6
+683.37115 46533.1
+683.87305 14924.6
+684.37659 3587.6
+691.38446 26560.3
+692.38983 12987.9
+693.38959 3141.5
+699.36066 153872.8
+700.36414 59236.4
+701.36438 16581.9
+702.36987 5226.4
+707.37329 4152.8
+711.44269 5585.0
+716.87585 5529.8
+717.38446 5810.6
+717.88055 4028.0
+718.42218 5101.3
+722.39978 4560.5
+725.88501 66856.3
+726.38660 65488.8
+726.88782 26453.5
+727.38702 7975.5
+730.87750 8805.6
+731.37775 5635.0
+731.48792 2855.7
+731.88263 4458.6
+736.38904 12505.2
+737.39081 5044.2
+748.05225 2563.9
+748.43677 3994.2
+752.41016 3418.7
+754.39838 21153.4
+755.40405 8188.5
+757.37970 3572.7
+758.42688 6752.4
+759.45514 6011.7
+767.40479 2680.6
+773.42297 40171.1
+773.92395 37742.7
+774.42407 23911.8
+774.92511 9814.7
+776.43719 24946.0
+777.44360 11050.9
+778.37103 6208.1
+778.45093 2253.0
+782.27631 2249.0
+782.31482 2526.4
+782.42706 201607.6
+782.92859 168120.5
+783.42938 89853.1
+783.93042 35946.3
+784.43225 10698.8
+785.37677 13948.7
+786.37372 4776.2
+786.45428 9663.7
+787.46088 7078.3
+795.67120 4018.3
+804.46838 40689.1
+805.47229 22326.0
+806.47876 6795.7
+812.44342 9212.1
+822.48041 3463.6
+827.80243 2302.0
+827.85516 2339.9
+828.41901 3338.2
+830.93848 6221.8
+831.43518 7102.6
+831.93488 5421.5
+838.39984 2663.6
+839.94049 63026.6
+840.44275 54241.5
+840.94165 26119.7
+841.44702 8852.1
+845.45404 5619.8
+846.42920 120225.3
+847.43286 66098.1
+848.43439 21110.6
+849.43384 7889.6
+856.42615 3950.8
+861.52606 3787.4
+863.46155 47965.1
+864.46637 22295.3
+865.49841 3485.0
+868.41736 16791.4
+869.42023 8491.5
+870.43182 3950.1
+873.44836 31456.0
+874.44543 18550.5
+875.43671 5931.8
+878.97644 3503.2
+882.42841 13232.8
+883.42493 6305.2
+885.44073 5961.1
+886.42456 14251.4
+887.47900 15556.3
+887.89862 2420.1
+887.97931 14085.7
+888.47009 6619.0
+888.97845 3338.5
+889.51746 14471.6
+890.51929 7631.7
+891.45764 193693.0
+892.46075 101320.2
+893.46375 28719.5
+894.46533 4102.1
+896.48303 150536.9
+896.98456 147765.4
+897.48505 84412.4
+897.98657 31738.3
+898.49231 11123.9
+898.98212 5119.1
+899.99927 2782.4
+900.58838 4874.0
+901.47449 3485.0
+901.96344 4891.9
+902.04468 3416.5
+903.45081 1172785.6
+904.45282 659774.7
+904.86322 7961.0
+905.45367 272722.7
+906.30408 8141.4
+906.45410 80200.0
+907.31152 3229.1
+907.45483 19268.8
+908.45166 2745.5
+908.50372 4805.0
+908.99133 11556.4
+909.50269 4547.8
+914.49005 5124.3
+922.90997 2397.6
+928.47534 2828.3
+967.52307 3262.5
+969.50995 3494.0
+970.53156 2556.1
+976.54816 29059.0
+977.55225 13582.0
+978.55493 2732.7
+986.53107 35902.6
+987.53198 21781.5
+988.53717 7540.0
+991.53595 5253.2
+995.51349 53843.0
+996.51599 34611.2
+997.51880 12945.6
+998.52942 8104.9
+999.50555 5540.6
+1000.51752 4923.1
+1004.54150 265923.0
+1005.54468 141310.5
+1006.54755 45119.3
+1007.54437 11501.5
+1009.42236 3072.8
+1013.12750 3844.5
+1016.53436 518129.3
+1017.53723 331892.3
+1018.53876 130344.0
+1019.53992 38513.9
+1019.96954 2936.7
+1020.54755 8012.8
+1026.52234 3223.2
+1061.56238 38125.7
+1062.56921 23094.0
+1063.57471 7869.2
+1082.54517 24948.0
+1083.55164 16097.6
+1084.54834 4727.3
+1093.53394 3003.2
+1118.55554 11509.6
+1119.55981 5969.2
+1135.57886 5510.3
+1136.56885 12223.1
+1137.57593 8483.1
+1140.94519 2536.0
+1150.44116 2732.1
+1153.59363 576819.8
+1154.59656 406970.1
+1155.59692 186290.7
+1156.59802 58222.7
+1157.59814 13406.6
+1158.76746 2744.7
+1177.61047 4387.1
+1178.60901 3955.4
+1180.63818 11575.4
+1181.63745 7607.1
+1190.60840 4577.2
+1192.60400 3408.8
+1195.62915 28479.7
+1196.63379 19230.1
+1197.64038 7604.7
+1198.05701 12282.4
+1208.63000 60212.9
+1209.63367 41206.2
+1210.63672 19056.2
+1211.64563 4289.1
+1219.64233 4288.5
+1265.65222 14880.4
+1266.67737 79945.7
+1267.68103 62807.7
+1268.68481 26282.8
+1269.68494 9981.6
+1272.71753 8974.9
+1273.73291 8096.3
+1276.65344 3561.6
+1283.67371 2971.8
+1310.65308 10449.8
+1311.66199 8756.8
+1334.67712 9427.0
+1335.67993 11173.5
+1345.72009 15339.7
+1346.71997 14256.2
+1347.71680 10883.3
+1348.70886 5573.4
+1358.43665 3402.3
+1359.41260 3798.2
+1361.10840 3782.0
+1363.73022 800060.6
+1364.73328 681546.2
+1365.73438 324304.4
+1366.73669 113507.7
+1367.73938 33438.8
+1368.74060 8261.0
+1369.08557 3980.0
+1397.67126 6131.3
+1408.65076 8909.0
+1409.66101 8166.3
+1420.75244 9032.3
+1421.76636 5861.8
+1422.74487 3552.7
+1423.74243 13891.0
+1424.74866 11740.3
+1425.67944 51661.3
+1426.68530 43341.4
+1427.68750 20026.3
+1428.68567 10384.8
+1432.75671 14864.7
+1433.75098 19057.8
+1434.75085 8497.1
+1435.75671 4259.4
+1447.75708 29487.6
+1448.76062 22784.1
+1449.76233 8555.6
+1450.76233 225067.0
+1451.76563 198580.8
+1452.76733 98630.9
+1453.76831 32715.3
+1454.77551 8023.0
+1455.78198 3387.7
+1510.77405 43826.2
+1511.77600 34745.0
+1512.77954 19540.2
+1513.77747 9939.9
+1520.75488 17571.3
+1521.75525 25114.0
+1522.75122 18306.5
+1523.74512 5947.5
+1524.76929 2886.4
+1538.76758 309930.0
+1539.77039 259757.2
+1540.77197 142859.0
+1541.77478 50619.6
+1542.77075 16736.9
+1543.80029 3335.4
+1563.85034 14867.6
+1564.85339 16030.7
+1565.84290 6360.0
+1566.87476 3104.4
+1635.81873 8603.4
+1636.81982 9251.3
+1637.84265 3086.9
+1678.87402 18576.4
+1679.87708 15607.5
+1680.88770 8156.6
+1733.84509 4509.2
+1734.87781 3410.4
+1751.90588 3987.4
+1752.86719 3421.6
+1766.96594 2773.7
+1829.79468 2594.6
+1878.80359 3900.7
+1879.06555 4369.5
+1879.55579 79309.8
+1880.21631 6047.6
+1880.62366 3384.1
+1881.09753 3742.8
+1907.04285 28361.2
+1907.91724 2956.3
+1930.54089 4281.3
+S	2453	2453	476.3013246
+Z	2	950.587
+120.66182 1686.5
+121.78507 5082.5
+122.04675 1316.7
+129.71889 1239.5
+136.07553 8461.2
+141.64777 1092.9
+144.82838 1244.4
+147.87656 1383.4
+176.82993 1181.7
+176.94641 1351.1
+182.78207 1197.7
+188.24696 1615.0
+188.26196 3381.8
+188.28212 5459.9
+188.30508 3863.3
+188.32198 2421.6
+188.33484 1500.1
+188.36000 1241.5
+193.09755 17229.8
+194.10069 1987.5
+198.91811 1974.5
+199.17986 4586.7
+199.21280 1307.5
+199.21982 1784.2
+199.28304 2848.4
+199.29036 3251.7
+199.29745 3301.9
+199.31076 3431.2
+199.31955 4126.2
+199.41641 2261.5
+221.09244 45037.0
+222.09572 6145.8
+227.17569 3683.4
+233.57530 1148.3
+239.17558 3137.5
+249.16046 2041.8
+255.28964 1413.8
+260.14267 5860.4
+261.16037 11535.8
+262.16357 2710.5
+267.24292 1527.2
+271.75000 1430.3
+278.15366 28516.2
+279.15784 4547.2
+284.19730 6044.4
+289.15506 54172.2
+290.15839 11474.5
+295.23959 2529.9
+301.16879 1235.5
+306.18188 4278.8
+313.19394 1470.5
+328.22385 4536.3
+334.17661 67175.7
+335.18039 15947.2
+336.18155 1741.9
+340.25958 5283.3
+341.74728 2093.0
+342.53793 1314.8
+343.23544 2136.9
+350.28198 1929.0
+351.21597 1751.2
+358.21561 2424.5
+362.17328 2319.1
+365.15314 3511.7
+365.74890 15939.5
+366.25027 7082.9
+366.75275 2163.4
+369.22482 44133.3
+369.28589 3799.0
+370.22894 7981.2
+373.22751 3270.1
+391.23767 143848.7
+392.24088 33531.1
+393.23090 8099.5
+394.23483 1334.6
+395.30136 2551.4
+397.28159 12847.5
+398.28430 3522.5
+402.23932 26169.3
+403.24277 6460.6
+408.32306 2916.4
+419.26572 91652.7
+420.26938 20538.1
+421.27332 3313.6
+425.34976 3650.5
+427.52878 1211.3
+429.24582 1431.7
+435.29855 2233.6
+438.30823 3650.9
+441.30728 6699.2
+442.30988 1804.4
+443.30396 1695.6
+447.26047 71753.2
+448.26428 18115.8
+449.26761 1732.9
+451.78668 1571.3
+475.79138 3758.4
+476.29147 6086.8
+477.29440 4094.9
+477.79010 1536.3
+478.23557 1895.0
+482.37018 2291.8
+483.25668 1809.0
+483.58783 1622.4
+484.25577 2313.8
+485.28006 1901.0
+487.32730 2281.2
+497.20459 1243.0
+500.32697 2753.1
+503.12921 2408.6
+503.72876 1678.0
+504.12430 2332.1
+504.26596 5075.1
+504.32159 456917.3
+504.36453 1887.8
+504.59720 6208.7
+505.32462 124315.3
+505.51935 2393.5
+506.32059 19856.3
+507.32034 6908.9
+508.38528 1279.4
+510.36530 17149.7
+511.36737 5125.2
+513.59375 11416.5
+513.92804 8045.0
+514.26379 4166.9
+514.59875 1474.5
+515.32281 29040.7
+516.32617 7545.7
+521.95160 1747.8
+527.78265 1294.0
+528.32184 8076.4
+529.32562 1498.2
+532.34924 47125.0
+532.46313 4696.3
+533.28058 2858.2
+533.35187 12180.0
+534.35834 1875.0
+539.36078 2396.6
+544.26447 2034.8
+548.38171 1614.4
+551.39301 4190.0
+554.29169 4971.2
+554.39209 6141.7
+554.62689 3239.3
+555.29230 1689.2
+560.29559 17410.4
+560.34430 118760.2
+560.63037 15599.2
+560.96381 7550.8
+561.30072 2693.1
+561.34790 36909.1
+562.35004 5945.5
+569.40179 13634.9
+570.40527 5535.8
+578.30438 2454.1
+579.30145 2262.9
+584.38495 7772.3
+585.38818 1619.2
+591.32184 8818.5
+592.32385 2628.5
+596.38361 5150.6
+597.01178 1831.2
+598.35773 5369.5
+599.39130 3192.1
+610.32056 1454.5
+610.83252 1989.8
+611.41486 1732.7
+613.40936 4689.4
+614.41016 1233.6
+615.78656 5995.9
+616.06531 1744.6
+616.60419 3895.9
+616.77435 1477.2
+617.31915 2632.4
+617.40558 956269.7
+617.47693 4300.9
+618.13641 1411.4
+618.20697 5786.0
+618.35126 1648.8
+618.40802 334723.5
+618.85083 1972.0
+619.03302 6156.4
+619.40753 84111.3
+619.55383 2087.9
+619.86505 1403.2
+620.03296 2411.1
+620.11182 1682.9
+620.40686 17022.9
+621.40704 2319.1
+628.40680 14824.5
+629.40875 5684.9
+630.40662 1602.3
+632.84027 1445.8
+633.33020 2937.0
+641.40552 17667.9
+641.83929 6770.8
+642.33801 4108.5
+642.40845 6136.5
+642.84247 1768.1
+643.40747 1705.8
+645.43390 17939.7
+646.36224 6706.9
+646.43707 6319.5
+647.09741 1182.4
+647.36591 2662.7
+655.41937 5832.3
+655.83240 4210.1
+656.33472 4172.4
+663.39178 3334.4
+664.47852 1655.0
+667.84076 11840.7
+668.33948 7715.9
+668.84161 2666.2
+672.61462 1223.0
+673.42859 92980.8
+674.43231 36153.5
+675.43323 8730.6
+676.63782 2303.4
+682.37030 5475.8
+682.48688 8079.8
+682.87030 6840.0
+683.37079 2542.1
+683.48932 3744.9
+685.06311 1234.3
+685.28308 1348.3
+691.38531 34186.4
+692.38739 14610.0
+693.39166 2914.8
+704.34058 6068.4
+704.84180 4585.5
+711.44299 6354.5
+712.46515 1994.6
+713.34540 42900.3
+713.84705 29654.9
+714.34784 12716.4
+714.84955 4886.8
+725.88458 14722.1
+726.38660 14272.3
+726.88452 3885.7
+728.40900 4865.2
+728.47186 2032.7
+728.63489 1491.7
+728.77258 1521.3
+729.45013 2394.8
+729.79370 1418.7
+730.48969 878000.3
+731.10229 1850.0
+731.15906 1616.9
+731.18280 1538.6
+731.49268 346361.8
+732.20850 2011.5
+732.34540 2095.9
+732.49316 100286.5
+732.58148 5660.1
+733.49329 24105.4
+733.59460 2005.7
+734.49768 4983.6
+739.50269 4113.1
+740.50793 1857.4
+752.21454 1345.6
+759.44910 11964.5
+760.45313 4629.1
+769.88721 2710.3
+770.38684 2975.0
+770.89423 2392.3
+776.47461 20219.5
+777.47882 8118.9
+778.47772 2689.8
+785.18073 4427.5
+785.43182 1554.4
+785.57458 1765.7
+786.18573 2775.0
+786.35956 3307.7
+786.45935 15265.1
+787.40723 4040.8
+787.51080 899513.0
+788.51343 389933.4
+788.67255 5588.8
+788.87512 1706.3
+789.41266 1596.8
+789.51410 114549.4
+789.84650 5970.4
+790.51471 30930.6
+790.86365 2206.8
+791.51312 3717.1
+797.49652 6196.0
+798.50098 3193.3
+804.46881 110243.9
+805.47192 56343.1
+806.47327 15235.2
+807.47290 3782.9
+808.47168 1646.6
+820.45038 1388.5
+822.47681 1921.9
+835.20740 1473.0
+840.30719 1253.9
+882.41724 1597.2
+895.09009 1288.2
+954.05078 1252.5
+954.83246 1339.2
+969.47321 1897.2
+1018.34900 1354.7
+1057.28906 2018.2
+1079.20276 1274.4
+1079.36108 1337.5
+1188.14355 1886.5
+1198.03650 7679.4
+1300.80347 1384.1
+1335.98816 1578.8
+1644.19482 1378.6
+1705.65039 1491.2
+1878.96924 1468.3
+1879.24451 6442.7
+1879.57141 36928.5
+1880.03992 5568.1
+1907.06531 16522.7
+S	2454	2454	476.8023246
+Z	2	951.589
+120.66410 32416.2
+121.07597 31926.9
+121.78496 121334.8
+123.62534 37164.8
+123.94471 31951.4
+125.33839 37572.3
+131.44490 29952.1
+136.07536 374408.0
+141.31660 37825.0
+149.05045 41219.3
+167.15996 35014.6
+171.11348 32913.6
+182.78821 43344.8
+183.78159 33901.9
+188.24930 63163.2
+188.26736 81653.4
+188.28537 120019.2
+188.29915 104138.8
+188.31442 66371.3
+188.33182 42761.8
+193.09720 520157.7
+198.91827 55434.9
+199.18094 74722.8
+199.21637 69921.4
+199.30414 106814.5
+199.31454 139133.4
+199.32529 80653.7
+199.41212 60775.1
+217.83380 29976.1
+221.09206 1187357.5
+222.09499 77796.6
+222.10631 33397.5
+224.07439 45119.7
+227.17526 73588.5
+238.69830 42131.9
+239.17545 35526.4
+252.06744 54115.9
+253.88759 31609.5
+260.14313 125447.4
+261.15976 183390.5
+271.59485 36914.7
+278.15317 751819.8
+279.15649 65524.8
+284.19662 99144.3
+289.15442 1210528.3
+290.15811 152829.0
+306.18063 98967.9
+307.28970 30469.0
+328.22226 65855.7
+334.17596 1119577.3
+335.17953 131166.3
+335.62143 35787.0
+337.19247 34082.7
+340.25766 36944.2
+341.74710 62417.0
+342.24942 40153.8
+349.94281 34811.7
+365.15210 87994.0
+365.74820 352600.8
+366.25000 133084.1
+369.19788 32014.7
+369.22433 34579.1
+373.22748 42043.2
+391.23694 2109912.0
+392.24072 351545.3
+397.28070 117813.4
+402.23792 192235.1
+403.24249 55338.8
+419.26468 984033.3
+420.26791 188910.5
+427.56024 48707.4
+441.30725 72928.2
+447.25943 1077597.5
+448.26334 213918.4
+456.31760 125026.6
+457.15543 31222.6
+458.77353 34495.0
+488.34570 33261.6
+491.90567 34279.9
+504.32068 4081838.5
+505.32373 892852.3
+506.32474 117874.3
+510.36502 79022.0
+515.32227 265874.0
+516.32513 72020.0
+532.34833 502926.0
+532.48016 96109.9
+532.53839 46907.0
+532.67249 29483.4
+533.35205 145036.1
+549.17053 37459.6
+551.39258 55759.7
+554.25708 33177.5
+554.39050 81733.1
+560.34332 972269.4
+561.34613 272085.6
+562.35370 39344.0
+569.40088 192211.9
+570.40503 59455.5
+586.86139 32926.0
+591.31970 172795.5
+592.31696 42182.9
+617.40454 7637629.0
+618.40692 2224302.0
+619.40643 430152.6
+628.41290 80049.5
+629.18774 35167.4
+630.42926 44503.6
+641.40454 86598.4
+645.43134 156064.3
+646.43335 65266.6
+659.19299 33556.6
+673.42780 638292.8
+674.43188 219719.4
+676.64673 55784.8
+682.48425 124158.9
+691.38336 245081.3
+692.38635 83591.4
+698.75781 35498.5
+704.40649 46079.7
+711.44714 37211.0
+730.48846 5323507.0
+731.14185 39003.6
+731.49133 1986855.6
+732.49042 438607.2
+759.44934 50886.3
+776.47192 180910.8
+780.81500 34849.8
+782.87848 36514.0
+786.45563 117842.6
+787.50964 4076139.8
+788.51300 1613626.8
+789.51373 469427.3
+790.50537 80629.0
+804.46857 738060.8
+805.47064 206325.3
+806.47729 41960.8
+851.87225 37267.9
+953.85999 74929.9
+954.35864 50338.8
+954.89709 40192.0
+1057.21655 41315.3
+1057.25806 43463.3
+1079.37988 40979.0
+1106.93579 34230.9
+1188.14087 47271.1
+1197.87793 32117.4
+1198.07434 166099.1
+1583.19763 47016.5
+1653.42041 33002.9
+1688.76917 32858.9
+1878.11304 43254.7
+1878.50696 56508.9
+1878.95325 70482.7
+1879.55688 1088232.5
+1880.22437 54003.3
+1906.61145 38613.2
+1907.05310 388728.4
+S	2455	2455	636.4938246
+Z	3	1906.206
+Z	2	1271.14
+165.76378 54349.0
+169.49698 54704.8
+175.71222 44449.2
+183.11317 86693.4
+188.25850 58212.5
+188.26674 78073.0
+188.27960 78267.9
+188.29640 77692.9
+188.31023 67753.9
+188.31842 49087.1
+199.23642 59176.2
+199.29044 154030.2
+199.30518 144097.2
+199.30745 142415.2
+199.34941 59758.4
+201.12335 1713417.3
+202.12712 217389.4
+203.51030 48392.9
+204.98169 55295.8
+214.51807 54908.9
+225.98782 44233.1
+229.11845 400592.3
+232.51813 46334.9
+245.41188 47670.2
+265.30811 45090.4
+265.78790 51615.0
+269.18729 134176.8
+272.17203 74312.1
+275.83069 43907.8
+278.72830 43787.4
+298.14114 89710.3
+309.10834 61960.6
+312.52182 50905.4
+316.14935 103922.1
+326.13467 154618.3
+344.14502 2375631.3
+345.14902 304697.0
+348.20297 90422.7
+350.27585 55123.0
+351.21399 133843.8
+369.22421 3080229.5
+370.19547 73635.8
+370.22849 462203.0
+386.15625 71834.8
+411.22635 74091.4
+412.20825 90403.9
+413.16739 280743.8
+414.17386 72350.3
+423.71939 135874.9
+429.23404 430765.1
+431.17648 195308.0
+432.18155 55000.1
+435.23450 81272.3
+439.22064 56164.3
+457.22870 1064158.6
+458.23111 188187.4
+461.28522 96667.0
+480.02689 43988.7
+480.66168 49817.7
+481.22949 66516.7
+482.30780 728285.9
+483.31076 137670.7
+497.25269 47334.0
+498.25369 94452.2
+499.23788 160210.2
+508.76886 82623.0
+509.27255 66040.3
+516.26465 217789.7
+518.31244 55282.8
+526.25055 367458.8
+527.25409 96152.7
+531.28833 67021.6
+532.47919 174132.6
+536.37781 46928.7
+544.26074 1439638.0
+545.26465 343753.8
+548.31763 207847.7
+549.32391 79558.1
+554.29150 178491.6
+560.29620 171272.4
+560.63129 65120.3
+560.96521 75827.0
+577.29999 1050146.3
+577.80164 646314.4
+578.30066 187359.3
+595.81213 70976.4
+596.31921 101028.7
+601.31909 85569.1
+601.65692 61077.6
+604.81775 246017.3
+605.31750 138212.3
+610.32843 53299.0
+624.51703 53866.6
+665.37067 90719.0
+673.36194 136928.9
+673.87054 119117.4
+674.36591 77794.5
+676.64905 95075.0
+682.36804 4945556.0
+682.86981 3774302.3
+683.37042 1857037.1
+683.56268 47014.1
+683.87067 439265.6
+684.36841 82970.9
+699.35980 760695.5
+700.36505 239110.6
+701.35199 57870.1
+704.34058 245954.0
+704.84247 64969.5
+706.16376 61187.3
+713.34430 586285.1
+713.84705 383088.7
+714.34583 175970.3
+715.87720 106792.5
+716.88013 288665.2
+717.38263 190790.0
+717.88123 80084.9
+718.38287 61612.5
+723.82013 84362.5
+724.37720 193454.9
+724.88660 191430.3
+725.38409 76233.9
+725.88422 10699286.0
+726.38538 7729805.0
+726.88635 3545377.0
+727.38770 1251919.1
+727.89075 256500.9
+728.39301 58312.8
+748.37592 69950.2
+751.88153 59391.0
+755.89026 105340.6
+756.39105 114954.0
+760.88068 500661.0
+761.38379 291232.3
+761.88550 203701.7
+769.88733 1804242.1
+770.38818 1740021.3
+770.88910 761255.5
+771.39215 345855.4
+773.42175 286205.3
+773.92218 258619.4
+774.42511 125378.1
+776.43048 129497.6
+777.42908 90469.7
+781.82513 55422.0
+782.42590 3368848.3
+782.92767 2813712.3
+783.42877 1403307.9
+783.92877 655772.0
+784.42932 134008.8
+795.67950 63769.7
+818.40845 70654.4
+818.91364 59344.4
+830.93500 956549.2
+831.43542 1034599.4
+831.93677 539242.1
+832.43225 200188.0
+837.37500 95186.9
+837.88019 57938.7
+838.66565 83791.2
+839.93964 19499628.0
+840.44055 17604570.0
+840.94171 9251978.0
+841.21637 113715.5
+841.44250 3531875.3
+841.72455 87801.3
+841.94464 1011875.1
+842.44598 243884.4
+843.01520 80312.3
+846.42847 304910.9
+847.42969 151122.2
+891.45337 113914.1
+901.47070 199564.3
+901.97614 221298.2
+903.45032 1026017.6
+904.45258 534557.0
+905.45294 145017.6
+934.66199 62316.9
+953.88031 96238.2
+954.45007 54675.1
+995.51215 307131.3
+996.51776 160285.6
+1004.54230 77287.7
+1016.53455 407132.6
+1017.53821 185819.9
+1018.53949 75604.4
+1043.56897 62806.9
+1061.55798 138961.0
+1062.56018 56878.3
+1079.38879 56657.0
+1082.54358 332548.2
+1083.54822 233667.3
+1084.53967 72505.1
+1153.57874 126952.1
+1154.58997 78522.9
+1192.16028 50878.2
+1195.63147 80787.6
+1198.07263 263537.7
+1208.63586 116823.4
+1265.65674 73675.2
+1310.66003 121207.9
+1311.65479 87703.3
+1525.42371 72728.9
+1557.53101 53763.2
+1562.73755 67732.0
+1741.10999 50741.8
+1744.69141 45445.4
+1876.22339 60820.3
+1878.97668 73340.7
+1879.55225 1554324.0
+1880.12109 104335.0
+1907.03528 581780.3
+1930.61548 85222.2
+S	2457	2457	1431.7475746
+Z	4	5722.959
+397.45993 537.9
+399.35342 604.9
+406.25833 629.2
+427.53882 736.9
+430.16278 581.7
+491.71820 579.6
+498.16324 562.6
+512.35864 573.3
+532.44482 1467.8
+630.40393 776.9
+631.86902 692.2
+634.13025 629.1
+676.63043 877.6
+701.18665 582.1
+795.68115 1309.2
+953.99854 1506.6
+954.37103 1300.0
+954.49579 2984.6
+954.99854 2965.8
+955.49774 1900.1
+1019.73657 828.9
+1188.18738 655.1
+1197.99805 3665.7
+1226.83508 586.0
+1272.64758 817.9
+1347.84497 672.9
+1489.75708 706.7
+1503.67542 550.7
+1590.21619 730.1
+1590.66760 1388.9
+1870.44812 696.1
+1878.93652 1107.8
+1879.51721 19549.6
+1880.12732 1331.7
+1906.93286 7577.5
+1907.16956 1977.1
+1907.47900 14659.4
+1907.98181 42671.0
+1908.48291 34895.5
+1908.98328 41221.8
+1909.48291 10986.2
+1909.98621 9159.6
+1910.46497 966.1
+1910.98425 1618.7
+1911.97571 738.0
+1992.39209 708.2
+S	2458	2458	1908.40599127
+Z	3	5721.943
+Z	2	3814.964
+532.45313 1740.3
+583.25494 666.8
+625.31219 842.1
+630.38947 839.9
+661.40576 1588.6
+676.64038 785.4
+699.35779 1457.5
+757.37860 1984.3
+774.94727 522.1
+776.43481 973.8
+785.37439 2680.0
+786.37122 850.6
+791.32343 580.1
+846.42804 1827.8
+855.52344 658.5
+857.42584 822.3
+863.46118 1140.1
+864.45349 855.8
+865.48584 1291.1
+873.44513 2256.3
+874.43951 1286.9
+875.42010 819.3
+882.42999 1692.8
+883.42377 973.9
+886.43152 945.4
+889.51868 1435.0
+891.45612 5686.3
+892.45856 2086.7
+903.44440 3053.1
+904.47046 1253.6
+922.51324 908.6
+923.49561 645.5
+949.66180 616.0
+953.83527 840.3
+954.38037 612.0
+967.52301 1353.9
+968.52734 974.1
+976.55304 1963.4
+986.52930 2336.2
+987.52905 1728.7
+988.52515 645.6
+991.53979 1237.5
+992.53046 961.3
+995.51129 3583.8
+996.51526 2161.8
+1004.53894 7744.1
+1005.54218 4089.0
+1006.54944 769.3
+1016.53394 2629.8
+1017.53204 1454.8
+1020.57068 675.0
+1061.55847 2044.1
+1065.53528 974.7
+1082.54224 5340.0
+1083.54651 2555.5
+1097.80664 750.0
+1104.62488 2282.8
+1105.61804 1296.6
+1136.56702 820.7
+1153.59265 3847.1
+1154.59302 2483.2
+1167.62708 1744.0
+1168.63489 1419.5
+1169.64063 812.5
+1177.61975 946.4
+1178.63159 1019.6
+1181.62354 654.5
+1195.62659 9395.0
+1196.62952 5118.0
+1197.63794 1034.9
+1198.01416 3189.1
+1200.07214 690.9
+1208.63708 2042.0
+1209.63403 1574.1
+1247.64063 931.5
+1248.64441 924.1
+1265.64270 2321.3
+1266.66138 2317.9
+1267.67712 824.5
+1282.67908 1449.1
+1293.63647 773.8
+1310.65137 1182.5
+1311.66760 1636.2
+1334.66833 3173.1
+1335.67761 2196.4
+1345.73816 636.3
+1346.73413 981.9
+1363.72876 11116.9
+1364.73376 6514.5
+1365.73926 1951.5
+1396.75269 830.9
+1397.68652 1149.2
+1398.69751 1220.9
+1407.64392 1158.2
+1407.79492 1031.7
+1408.64880 2736.9
+1409.65771 2179.7
+1410.63171 1062.4
+1414.72168 1183.2
+1423.74072 2685.6
+1424.73145 1909.0
+1425.67578 6776.9
+1426.68262 4614.4
+1427.68762 1874.4
+1430.75586 1299.0
+1432.75513 3252.6
+1433.74817 3201.8
+1434.74805 1465.5
+1447.75867 4020.7
+1448.75916 3016.4
+1449.75342 806.8
+1450.75989 9050.0
+1451.76477 5573.3
+1452.76550 1502.3
+1472.83569 8038.7
+1473.83813 5121.2
+1474.84070 2665.1
+1492.76624 1092.2
+1493.75574 2536.1
+1494.75049 1137.5
+1503.82837 2988.1
+1504.83875 1963.4
+1510.76978 6850.4
+1511.77490 4782.7
+1512.77759 1092.2
+1519.84180 854.4
+1520.75134 2936.1
+1521.73914 4193.7
+1522.75085 3044.2
+1525.36914 915.2
+1528.79797 987.2
+1529.78003 863.7
+1533.83093 4455.5
+1534.83911 3939.8
+1535.83960 1225.8
+1538.76538 12272.1
+1539.76941 8509.9
+1540.76746 4353.0
+1545.83362 15127.9
+1546.83228 16698.4
+1547.82751 7973.0
+1548.83044 2629.0
+1557.30432 924.7
+1560.62939 987.6
+1563.84216 196854.1
+1564.84619 151754.3
+1565.84692 62630.3
+1566.84900 13036.4
+1568.08557 792.4
+1570.43518 822.2
+1571.47180 638.9
+1635.83337 859.2
+1636.83264 1284.4
+1644.82507 766.2
+1660.87183 979.6
+1661.84680 5249.9
+1662.85120 4559.9
+1663.83826 1099.0
+1678.87292 6124.8
+1679.87402 4676.0
+1680.87000 1776.4
+1700.94739 2225.9
+1701.95215 2319.0
+1731.93689 1325.7
+1732.89063 1133.4
+1733.86646 1729.2
+1734.87036 924.2
+1750.88013 4481.9
+1751.88525 2614.8
+1752.89380 1376.5
+1761.95227 1815.4
+1762.97498 1348.6
+1773.94385 9381.0
+1774.94458 9495.0
+1775.94360 4985.5
+1776.94580 887.1
+1791.95251 79332.4
+1792.95654 71095.7
+1793.95715 34609.2
+1794.96338 8989.1
+1797.95728 2787.1
+1798.95105 4294.6
+1799.94922 2697.7
+1800.94153 1091.1
+1810.92505 968.2
+1811.93030 899.2
+1815.97021 14063.8
+1816.97290 10811.0
+1817.97266 5266.3
+1818.96741 1100.1
+1827.95398 4157.0
+1828.94397 4312.7
+1829.93359 5927.2
+1830.93518 3572.2
+1831.94360 1059.8
+1844.98718 849.0
+1845.97131 3213.8
+1846.95288 10217.5
+1847.95154 7813.7
+1848.94800 3671.1
+1854.92432 1063.3
+1855.92688 1447.7
+1856.91260 942.9
+1859.95752 1880.3
+1860.96521 2268.1
+1861.97620 1281.0
+1863.01294 1083.9
+1863.98779 842.1
+1870.29626 1200.2
+1870.95435 2080.4
+1871.94128 14526.5
+1872.93860 15058.0
+1873.94080 7690.1
+1874.94080 2494.2
+1876.96118 5216.6
+1877.42712 895.2
+1877.97058 4312.0
+1878.96460 3079.3
+1879.17383 2552.7
+1879.54004 19907.4
+1879.89685 2702.9
+1907.05908 7560.6
+S	2459	2459	1907.49224127
+Z	3	5719.201
+Z	2	3813.137
+532.45782 10641.8
+603.80530 2848.0
+611.56067 2530.5
+619.53088 2985.6
+665.15131 2547.7
+713.45093 2754.6
+760.27075 2789.5
+801.22021 3430.2
+930.70251 3440.9
+954.35016 3503.8
+954.88104 4620.1
+995.51117 3458.9
+1004.54297 5856.5
+1057.25513 3220.1
+1087.27966 2946.9
+1153.60144 4226.2
+1195.62231 5082.6
+1196.64453 4918.7
+1198.02222 16752.6
+1236.42920 3025.5
+1325.84290 3365.9
+1363.72412 5853.4
+1364.73401 4779.3
+1408.64746 3194.4
+1421.36462 3477.7
+1423.50439 2818.8
+1425.68518 4518.0
+1447.75964 2980.5
+1450.73523 4447.8
+1472.84058 4606.6
+1496.07813 3431.6
+1510.76477 4375.7
+1538.76111 8316.6
+1539.76550 5174.3
+1545.83313 12260.2
+1546.82690 8231.9
+1563.84302 142385.8
+1564.84717 102344.3
+1565.84937 21903.4
+1661.83557 4643.8
+1773.95288 6064.3
+1774.93347 7077.3
+1775.93958 3248.6
+1791.95276 56006.1
+1792.95471 47494.1
+1793.95898 18430.8
+1798.94800 3186.0
+1810.40759 3187.6
+1815.96472 13085.1
+1816.95630 9044.8
+1829.94568 2787.1
+1846.94373 6734.8
+1847.97717 5432.1
+1871.95667 9807.4
+1872.93982 9837.1
+1873.92786 6505.8
+1876.94922 3152.4
+1877.96887 5074.2
+1878.68726 4408.8
+1879.25757 10619.3
+1879.53796 88686.3
+1880.11890 3103.2
+1883.86597 3536.1
+1898.51367 3561.0
+1907.05078 34026.0
+1907.43091 4002.4
+1918.22363 2813.4
+1930.62305 3634.6
+S	2461	2461	951.5958246
+Z	1	950.588
+289.15448 87653.0
+302.43948 62906.6
+308.88873 70426.8
+342.26166 71286.2
+372.07004 59738.3
+391.23767 144400.0
+397.28342 78934.4
+402.23843 255641.2
+419.26840 91511.8
+435.66290 54838.7
+447.25897 226212.4
+460.31152 66519.9
+470.59164 56437.8
+485.27454 112747.5
+487.32495 80609.9
+504.32153 83158.0
+510.36203 74414.8
+515.32233 289014.0
+516.32263 132411.4
+532.34967 147540.6
+532.47943 186974.1
+539.54608 68187.7
+539.73651 62247.5
+560.34198 313415.3
+598.35779 73084.2
+601.94348 66201.2
+628.40668 96922.3
+630.38336 96106.4
+645.43628 125017.1
+646.36621 151599.0
+663.38843 101904.8
+673.37006 80633.5
+673.42535 176836.1
+676.65601 95653.3
+691.38269 322866.2
+716.63928 73286.2
+724.80231 77504.4
+731.09631 80510.0
+754.55402 62624.9
+782.32117 72560.8
+800.45605 73651.3
+804.46576 151096.0
+860.64325 70700.4
+887.34052 77560.6
+953.87817 153487.2
+954.39319 78736.7
+980.31238 68048.5
+1198.07532 287274.8
+1222.46387 78257.9
+1379.07300 69508.8
+1525.36938 108936.4
+1633.29297 59922.4
+1754.28186 67900.6
+1878.10449 105980.4
+1878.37573 104392.6
+1879.17651 264987.9
+1879.59106 2006860.1
+1880.01978 224216.7
+1881.33643 70538.9
+1907.04102 710753.8
+1918.88831 80191.4
+1930.55981 106080.0
+S	2462	2462	952.5988246
+Z	1	951.591
+270.87762 10837.2
+271.82333 11475.4
+294.01031 10248.4
+308.89676 10561.6
+313.27963 13963.1
+352.13904 10684.6
+375.10474 9975.3
+391.23685 12284.9
+430.98785 10691.7
+447.25793 20007.5
+479.40302 10861.6
+504.31732 14000.7
+513.35144 9885.5
+515.32172 27436.9
+527.06897 10541.6
+532.34906 23459.9
+532.47900 26393.1
+560.34595 23950.0
+572.78406 11961.6
+612.14532 10465.0
+630.78790 12031.3
+645.42944 14633.7
+646.36591 18335.0
+670.66724 11838.1
+673.36243 11282.4
+676.64740 23326.8
+691.37885 14254.3
+749.65271 14745.1
+782.38074 10348.9
+851.55011 10594.6
+912.79999 10830.5
+1025.49036 10229.2
+1057.24695 13781.8
+1140.45007 14541.9
+1198.06909 49433.9
+1365.15820 12891.0
+1787.88257 11491.5
+1876.15710 20891.5
+1877.88940 18864.3
+1879.13037 24779.4
+1879.55432 349290.9
+1879.87146 19380.3
+1880.00415 22479.3
+1881.23853 20896.2
+1907.05823 128449.8
+1930.53589 19545.6
+S	2463	2463	953.828991267
+Z	3	2858.212
+Z	2	1905.81
+255.28966 94706.9
+307.64441 66901.8
+322.06827 67265.6
+344.14429 96865.3
+369.22345 665310.3
+381.22452 78908.5
+391.23599 297900.1
+402.23801 202812.5
+403.24103 120424.3
+405.82254 81233.4
+419.26392 135196.2
+427.54495 99655.8
+441.42667 81910.9
+447.26019 200274.5
+448.26035 86534.1
+461.28525 107733.4
+482.83145 89012.8
+485.27383 96847.9
+504.32065 123027.9
+509.66037 77848.7
+515.32190 388697.1
+516.32440 185290.2
+532.34796 251635.2
+532.48071 280425.7
+533.27856 114863.3
+533.35358 179361.3
+560.34290 458452.6
+561.34454 231824.7
+577.29761 438923.6
+577.80365 113140.9
+578.29913 153167.1
+586.43152 90580.1
+590.91046 87765.9
+598.35876 129998.5
+628.40369 167871.7
+629.40637 120603.2
+630.40594 151725.8
+636.86237 96994.0
+645.42682 149975.7
+646.35968 169140.9
+646.43652 155185.9
+647.36212 132139.8
+673.43054 281750.6
+674.42993 142556.4
+676.65424 133616.8
+682.36700 634085.8
+682.86920 344211.5
+691.38300 376810.2
+692.38489 287380.6
+699.35938 603677.6
+700.36456 179558.6
+725.88385 267875.0
+726.38568 181659.7
+736.29669 131328.1
+757.92969 81060.0
+773.41644 183049.3
+773.91980 156717.7
+776.43384 96417.4
+782.42438 483907.3
+782.92609 421097.7
+790.98853 82516.3
+795.66736 156848.9
+804.46674 167362.9
+805.47021 112746.3
+839.93420 150849.1
+846.42920 388678.1
+863.46155 130653.4
+873.44165 134170.5
+891.45453 671821.9
+892.45862 251157.2
+895.45343 87367.3
+896.47925 707111.9
+896.98480 504183.5
+897.48193 151862.2
+903.44836 4214809.5
+904.45056 1541457.5
+905.45300 296012.8
+932.56274 79117.3
+949.25482 72754.9
+953.87415 80569.6
+954.36774 133923.6
+976.55072 105517.5
+986.53363 139773.5
+995.51245 125532.2
+1004.53979 631262.7
+1005.54175 348290.1
+1006.54279 83872.1
+1016.53271 1779572.8
+1017.53589 682502.7
+1018.54083 120650.6
+1020.80518 99705.9
+1061.55469 118232.6
+1153.59180 1567787.1
+1154.59302 894669.6
+1155.59180 204025.4
+1167.64807 85571.9
+1174.71313 90172.7
+1198.07092 376720.8
+1208.63013 264733.2
+1209.62646 104296.2
+1266.67297 144056.2
+1290.37634 106415.3
+1363.72717 2123131.5
+1364.73145 1124377.5
+1365.73035 409241.5
+1426.68713 104774.0
+1447.74902 128600.4
+1450.76428 495412.3
+1451.76563 337395.6
+1455.19519 74345.1
+1525.41870 134659.5
+1538.76367 716181.6
+1539.76868 509434.8
+1540.78015 236982.9
+1877.41003 133269.5
+1879.17468 228195.8
+1879.31091 325014.8
+1879.57800 2472945.0
+1880.02515 346608.2
+1881.76819 81202.6
+1893.95947 96110.4
+1907.04114 938281.9
+1930.59875 152738.3
+S	2465	2465	1431.7485746
+Z	4	5722.963
+381.36566 705.7
+385.83145 663.8
+399.67270 771.0
+401.84082 576.6
+426.89468 633.3
+427.54608 1082.2
+447.45856 646.7
+470.16156 664.8
+500.49426 693.6
+527.51819 694.7
+532.47772 2173.4
+549.16101 773.4
+594.38458 619.0
+630.41437 1029.7
+676.65332 973.9
+715.93384 752.8
+788.82208 682.8
+795.66974 1131.6
+803.16302 852.3
+873.46820 694.5
+923.97223 673.1
+929.88434 791.1
+953.99310 4473.0
+954.49835 3860.8
+954.99304 1101.2
+983.66937 606.2
+1018.68762 589.7
+1019.72388 799.5
+1198.06372 3334.7
+1285.76672 767.9
+1299.62451 694.3
+1389.54443 601.3
+1485.26245 608.4
+1563.25269 654.1
+1566.37085 717.2
+1606.79724 698.1
+1871.56982 622.7
+1873.72327 728.9
+1878.66992 893.2
+1879.07141 1049.0
+1879.56335 19366.9
+1880.08875 1318.0
+1880.44092 973.0
+1881.28455 916.6
+1906.97717 25992.4
+1907.48157 22820.9
+1907.98083 12699.3
+1908.48730 768.2
+1908.97205 2148.0
+1924.84729 606.1
+1930.60986 1191.2
+1941.28577 764.0
+S	2466	2466	1907.4568246
+Z	3	5719.095
+Z	2	3813.066
+532.48633 1648.1
+549.14923 856.1
+634.06012 578.4
+640.71753 747.2
+676.64453 1296.1
+678.88696 669.0
+699.35565 809.8
+729.07825 628.3
+785.37482 2334.9
+795.68188 1149.1
+873.44946 794.3
+889.52020 857.2
+891.45514 2568.9
+892.44672 941.4
+903.44727 1340.2
+927.97040 596.8
+967.52045 954.0
+976.53815 843.3
+986.52234 1210.3
+991.53815 802.3
+995.51190 2040.4
+996.50543 917.8
+1004.54059 4986.1
+1005.53217 1567.7
+1016.52997 1568.7
+1070.92444 622.1
+1082.53882 2069.6
+1083.54602 870.8
+1104.62109 1043.7
+1142.69751 613.6
+1153.58911 2649.2
+1154.58704 821.4
+1167.61853 1106.4
+1188.00708 1127.7
+1195.62952 4826.6
+1196.62573 1743.6
+1198.08850 3117.9
+1208.62329 1419.1
+1265.66113 1164.2
+1282.67139 1039.3
+1300.23206 696.1
+1334.66772 2154.6
+1335.65515 1014.0
+1363.72937 6110.4
+1364.73633 2545.1
+1408.65540 1522.0
+1409.65771 878.4
+1423.73633 1647.9
+1425.67224 4649.7
+1426.68677 1988.1
+1432.75354 2032.2
+1433.75232 867.9
+1434.71313 844.0
+1447.75684 2181.5
+1448.75610 958.1
+1450.75635 3855.9
+1451.76062 2711.0
+1472.83630 4117.4
+1473.83618 1952.4
+1503.85266 1025.0
+1504.81604 866.4
+1510.77185 4254.8
+1511.77063 1762.3
+1520.76184 1844.2
+1521.74756 2771.7
+1522.74963 761.7
+1525.39099 967.4
+1533.83594 3289.3
+1534.82813 1210.1
+1538.76746 7390.9
+1539.76465 3070.6
+1545.82983 10465.9
+1546.82874 7140.3
+1547.83191 2864.1
+1557.30786 759.5
+1563.84180 112638.6
+1564.84607 65857.5
+1565.84851 12143.6
+1570.39697 697.9
+1660.85071 828.4
+1661.84399 2196.4
+1662.84558 2470.3
+1678.87244 2906.1
+1679.87183 1946.0
+1700.94580 1676.1
+1701.91479 889.0
+1750.88745 1929.4
+1751.89648 1288.7
+1773.94287 5392.5
+1774.94153 4692.9
+1775.93274 1846.6
+1791.95166 47289.1
+1792.95593 31312.3
+1793.95728 10997.1
+1797.96387 1071.3
+1798.95398 1666.0
+1811.92236 914.9
+1815.96655 6683.6
+1816.97815 5108.2
+1817.96533 1541.9
+1827.95129 2574.6
+1828.94043 2114.5
+1829.92407 2548.1
+1830.92139 954.6
+1844.90613 746.3
+1845.96448 1951.8
+1846.94739 5258.5
+1847.95337 2848.6
+1859.94580 1852.4
+1860.98132 1099.4
+1870.94983 1087.1
+1871.94116 6813.7
+1872.93921 6090.7
+1873.94226 3498.0
+1874.96375 771.9
+1876.96228 3295.7
+1878.00500 2021.6
+1879.05286 1663.0
+1879.55078 19527.8
+1880.03931 2199.0
+1881.18188 1204.9
+1881.80957 763.1
+1907.01477 7403.3
+1924.02991 748.1
+1930.57788 989.4
+S	2467	2467	1431.2455746
+Z	4	5720.951
+410.24246 946.0
+448.31137 1050.9
+460.23053 1104.0
+464.97891 1110.9
+472.77521 996.7
+514.48834 982.5
+514.51227 879.4
+532.47772 2683.3
+584.18402 1133.1
+631.50647 1071.2
+676.68268 1657.2
+795.68030 1418.9
+944.69482 1136.9
+952.55884 953.0
+954.50183 1204.0
+984.92615 1153.6
+1198.06628 5526.1
+1279.81860 1022.6
+1589.99219 1411.5
+1624.01318 1333.7
+1879.22571 8272.5
+1879.65564 30351.2
+1880.10095 6454.2
+1880.60022 2445.2
+1881.18298 1445.1
+1906.91235 4488.7
+1907.12939 6280.8
+1907.48303 17931.9
+1907.97913 17758.6
+1908.47949 4197.9
+1908.98596 2353.9
+1930.55103 1475.5
+1982.88953 1042.4
+S	2469	2469	1879.95224127
+Z	3	5636.581
+Z	2	3758.057
+511.51898 564.4
+532.43335 2145.7
+578.70483 615.6
+590.10901 708.2
+622.71570 645.1
+643.87854 743.5
+676.64764 834.7
+683.95624 574.5
+713.29810 638.6
+731.14465 804.0
+756.14203 797.1
+794.32281 658.5
+795.67719 906.1
+935.63550 662.9
+959.90363 812.9
+1064.77368 647.5
+1144.77002 763.5
+1173.23157 637.8
+1197.97046 3489.8
+1732.71265 587.6
+1756.03186 618.0
+1763.59631 599.5
+1783.25452 713.4
+1785.20947 735.8
+1860.02905 836.4
+1877.34155 725.9
+1877.69531 641.7
+1878.42273 879.9
+1878.81482 998.4
+1879.05151 1942.3
+1879.55371 19537.4
+1880.05981 1659.2
+1880.74646 629.3
+1881.74768 1166.3
+1882.26636 681.7
+1904.24329 653.0
+1906.82117 877.9
+1907.12854 7237.4
+1915.88708 626.0
+1930.65979 854.4
+S	2470	2470	680.3574696
+Z	4	2717.39858
+185.91817 491.2
+188.23161 1058.6
+188.25037 1050.2
+188.26154 1299.4
+188.29391 1680.7
+188.30664 1267.4
+188.31905 786.1
+188.33987 1245.8
+199.28700 1086.7
+199.29842 855.0
+199.30821 2254.5
+199.31886 1780.5
+199.41589 861.3
+202.10857 581.2
+209.20413 584.0
+254.78857 599.7
+255.30617 702.1
+260.89450 611.5
+283.52356 702.2
+302.85052 607.7
+330.95352 642.8
+335.82565 526.2
+357.21228 936.9
+363.18408 646.8
+405.73328 574.6
+426.20346 649.1
+427.21936 1197.8
+427.57281 703.5
+438.27112 2041.7
+444.25095 913.6
+456.28015 2891.8
+482.68802 804.0
+492.38339 690.1
+512.91510 1264.4
+513.24768 996.3
+516.78815 1395.4
+525.79059 1078.7
+532.42383 2084.0
+541.20605 604.8
+549.21277 662.0
+550.60803 3307.3
+550.80481 743.1
+550.94183 957.3
+568.81445 618.7
+574.61517 703.8
+582.33795 1256.6
+586.05768 1919.4
+591.34235 1568.0
+591.84064 856.0
+620.95807 1098.3
+621.29645 1543.2
+623.33569 665.0
+629.82245 1693.3
+654.39032 585.5
+660.99530 1123.8
+668.62579 705.2
+679.19800 646.1
+683.75476 642.4
+702.72076 822.6
+704.79712 629.4
+709.41693 640.1
+712.94604 763.2
+713.22552 859.0
+713.40930 701.1
+718.22162 916.5
+721.71027 695.8
+729.53558 760.9
+730.17914 617.0
+740.41241 717.3
+741.87872 767.1
+744.90955 618.3
+745.39886 887.7
+745.72107 612.7
+746.06543 824.1
+748.71313 1323.2
+749.04437 2030.2
+749.37665 1373.9
+754.71228 15112.8
+755.04688 16147.8
+755.38123 6455.7
+768.86804 21367.7
+769.36951 14863.4
+769.87311 2962.9
+781.73492 1004.8
+782.05951 950.5
+783.08990 905.6
+783.43158 1066.4
+783.76404 1258.7
+787.73621 7410.2
+788.06964 10478.8
+788.40363 4027.2
+801.36700 980.8
+820.74512 3057.6
+820.81036 1876.9
+821.07892 3594.7
+821.14520 1937.1
+821.47308 1180.2
+821.79321 679.7
+822.73602 737.4
+825.41071 17409.0
+825.91193 12243.8
+826.41333 2569.4
+853.78625 1653.5
+854.11023 2561.2
+854.45111 1011.8
+874.39923 3153.1
+874.89923 4399.6
+875.39874 2259.1
+875.90173 1043.8
+881.42902 1339.5
+881.92969 1008.9
+901.97675 892.8
+902.47961 843.7
+930.94153 1214.1
+931.43555 1049.0
+931.94183 763.7
+977.90094 695.8
+1000.51538 710.3
+1005.94061 716.4
+1041.51978 872.3
+1068.58533 1709.6
+1132.07971 915.8
+1150.08350 669.6
+1197.95300 3235.2
+1308.42200 681.0
+1338.27344 614.9
+1338.88538 630.9
+1495.15283 712.2
+1521.71240 597.4
+1537.44116 671.4
+1650.35962 755.8
+1663.78723 651.1
+1879.10486 2323.4
+1879.53040 19698.5
+1879.93494 1685.9
+1907.10205 7117.3
+1918.91003 895.3
+1930.73499 963.4
+S	2471	2471	1431.7455746
+Z	4	5722.951
+418.17892 1360.6
+419.93268 1506.7
+482.85968 1241.6
+532.38904 4124.4
+546.67688 1561.1
+549.19366 2036.2
+566.72668 1534.9
+579.53833 1619.9
+610.42084 1328.8
+637.57233 1444.6
+649.70599 1774.3
+676.65869 2726.9
+795.67279 2095.3
+869.03162 1504.9
+875.48834 1474.7
+943.93164 1488.2
+955.38385 1685.7
+974.77094 1460.6
+1057.26855 1975.8
+1147.20935 1416.8
+1189.27417 1503.3
+1197.86951 7726.9
+1263.04846 1410.8
+1370.77502 1270.3
+1691.28333 1401.3
+1807.25781 1528.6
+1878.54395 2027.1
+1878.79065 2100.7
+1879.58447 44748.3
+1906.86584 4484.3
+1907.13318 16212.9
+1907.50488 1986.5
+1907.98364 11177.6
+1908.48694 15039.3
+1908.98608 16646.4
+1909.48853 4168.7
+1909.97021 3051.1
+1918.88635 1876.7
+1930.75098 2706.8
+1940.96411 1566.6
+S	2473	2473	955.5485746
+Z	2	1909.249
+Z	3	2863.371
+265.07800 70360.3
+271.45715 70308.8
+280.18402 64347.7
+298.42410 62184.0
+308.89798 78033.9
+309.95648 70181.0
+317.98068 68432.4
+340.21277 75453.8
+344.14438 145681.2
+356.99527 66233.4
+367.32742 81140.8
+369.22412 900957.4
+381.35394 143727.1
+390.93781 60718.8
+396.52368 79614.7
+423.00443 84332.3
+423.70886 75002.8
+431.17664 112121.7
+440.54715 76109.7
+482.30725 128325.6
+482.64905 89227.7
+482.85608 73758.7
+493.88559 80927.3
+499.23672 84039.0
+532.40967 197787.3
+548.31897 127268.0
+551.35602 77292.5
+552.65686 68011.7
+577.30011 498448.2
+577.80115 266316.1
+578.30341 132469.4
+623.30139 76717.8
+630.40454 88302.5
+638.83398 91217.6
+641.31445 84894.5
+662.50629 78362.4
+665.37396 136277.6
+673.36261 73866.5
+673.86517 68391.8
+676.64172 119119.5
+682.36786 1015702.6
+682.86810 579661.9
+683.37036 187663.0
+683.86609 153101.7
+699.35840 670720.5
+700.36450 276683.7
+707.87494 70712.3
+725.88373 390347.6
+726.38562 368242.6
+726.89313 103894.8
+731.11487 121275.7
+736.39136 108790.7
+754.39734 121539.3
+773.42072 326334.8
+773.91528 194886.1
+774.42871 122961.1
+776.42981 141677.6
+782.42529 857381.5
+782.85590 79004.4
+782.92944 828030.6
+783.42987 301858.6
+783.92487 110665.0
+795.69196 142060.1
+814.43500 69219.9
+817.59253 70681.6
+819.29449 73794.1
+839.93939 268663.8
+840.43420 177800.2
+846.42676 424460.1
+847.42877 194767.5
+863.45929 148018.7
+871.55475 71833.0
+873.45190 112324.5
+881.37500 85136.3
+891.45496 786382.3
+892.45862 314604.9
+896.48083 986782.4
+896.98297 711822.5
+897.48322 219836.0
+903.44904 4546571.5
+904.45129 2052926.4
+905.45264 744561.5
+906.45471 126075.8
+908.99078 99173.7
+936.47162 134248.9
+955.36597 120701.9
+986.53235 181518.6
+987.53204 94535.0
+995.51135 185904.1
+1004.54144 958948.3
+1005.54248 327191.3
+1006.55566 108441.0
+1016.53339 1618702.1
+1017.53650 983878.8
+1018.53741 291659.3
+1019.54651 82461.0
+1057.23254 105295.4
+1061.56421 136849.9
+1095.63818 79922.6
+1124.36377 76974.0
+1153.59290 1992951.3
+1154.59546 963226.2
+1155.59119 395021.4
+1195.62305 165560.8
+1197.92175 329258.3
+1208.62817 236525.8
+1209.63367 140878.9
+1225.10107 79577.7
+1266.66931 227679.6
+1267.66650 116391.6
+1363.72864 2100451.5
+1364.73157 1470241.9
+1365.73474 691547.7
+1366.73560 155274.5
+1426.70068 156201.2
+1447.75391 179394.6
+1450.76196 468558.8
+1451.76318 312373.4
+1452.75854 191588.9
+1510.75879 136501.3
+1521.73206 90728.7
+1525.40601 114206.2
+1538.76379 965242.8
+1539.77136 705550.9
+1540.77014 304006.5
+1541.75854 104305.5
+1667.14917 90051.9
+1878.43823 172890.1
+1878.72278 180559.8
+1878.98230 126375.5
+1879.54810 2298316.0
+1880.10510 118679.8
+1880.36450 128883.5
+1907.04028 820868.5
+S	2474	2474	637.700407933
+Z	3	1909.826
+Z	2	1273.553
+177.55435 542.4
+183.11316 1731.9
+198.92470 955.0
+199.19391 757.8
+199.20676 999.7
+199.24875 659.4
+199.28851 2298.6
+199.30408 1882.5
+199.31236 1138.8
+199.99478 605.1
+201.12360 36359.0
+202.12695 4874.6
+229.11850 7602.3
+230.12238 1048.2
+238.89333 579.6
+241.22478 706.6
+246.12355 646.3
+255.85245 731.4
+258.66327 613.9
+265.32697 624.8
+269.18661 1420.2
+272.06567 603.6
+272.16833 1255.5
+284.88202 552.9
+288.12482 679.8
+290.14529 624.0
+295.40689 644.1
+316.15054 1375.0
+317.92679 562.3
+326.13501 2967.5
+333.20093 625.7
+342.25723 604.9
+344.14554 44876.3
+345.14957 8085.8
+346.15137 1248.2
+348.20404 1662.0
+349.20303 776.7
+350.18457 753.1
+350.28668 866.6
+351.21408 1888.1
+365.12994 840.5
+369.22473 60024.3
+370.19595 1219.2
+370.22861 14878.6
+371.23044 1850.5
+386.15671 892.2
+399.12817 704.5
+411.22357 785.3
+412.20911 1352.5
+412.36899 599.7
+413.16702 5271.6
+414.16916 1158.1
+423.71915 1966.0
+424.22110 1160.6
+427.53305 1027.9
+429.23474 7290.7
+430.23798 1967.1
+431.17725 6197.6
+432.18011 1393.3
+435.23581 1399.2
+457.22946 19780.1
+458.23251 5874.2
+459.23560 1109.0
+461.28604 1596.8
+462.28723 872.9
+481.23267 911.1
+482.30875 14678.2
+482.84909 722.9
+483.31198 4637.9
+493.70752 680.4
+498.25583 1721.0
+499.23965 2339.0
+500.24115 813.3
+508.77078 3247.3
+509.27209 2768.8
+515.19745 690.4
+516.26703 3941.5
+517.26849 1094.9
+518.30817 976.9
+526.25085 7164.8
+527.25433 3253.6
+531.28442 1784.0
+531.78033 914.4
+532.28979 947.9
+532.43622 1675.0
+535.23218 710.1
+544.26147 26459.5
+545.26434 10223.6
+546.26794 1428.7
+548.31879 4519.2
+549.32202 1601.2
+554.29187 2581.1
+554.62683 3278.0
+554.96161 1646.1
+555.29663 1053.0
+560.29639 2084.6
+560.62756 3195.1
+560.96509 1385.5
+576.78961 782.3
+577.30035 13174.1
+577.80219 13176.6
+578.30157 5848.7
+578.80365 2260.9
+579.31067 800.1
+590.81726 1289.3
+591.31927 773.2
+595.81183 1005.0
+596.31763 1626.7
+596.81293 861.8
+601.32153 1172.4
+601.65192 1700.9
+601.98499 1769.1
+602.32343 794.1
+604.81891 3911.7
+605.31842 3807.5
+605.81891 1279.5
+615.09570 713.0
+639.32587 760.6
+656.34753 605.1
+657.81000 887.2
+659.07684 688.9
+661.39984 897.4
+665.38037 1028.7
+673.36334 2472.5
+673.86395 3179.9
+674.36670 2359.8
+674.86639 895.1
+676.66541 1293.5
+682.36884 72239.1
+682.87018 89414.2
+683.37115 52572.5
+683.74176 651.3
+683.87177 25390.0
+684.27905 722.1
+684.37311 7755.8
+684.86859 1977.4
+696.33960 821.4
+699.36084 12614.1
+699.84924 742.7
+700.36353 6016.3
+701.36444 2531.8
+704.34094 3494.2
+704.62842 695.8
+704.84229 2545.3
+705.34375 2493.4
+705.84412 907.0
+712.33759 735.3
+713.34540 7364.3
+713.84741 8822.1
+714.34814 7171.6
+714.85028 4079.4
+715.87933 861.3
+716.87994 4413.7
+717.38171 4968.0
+717.88568 2687.4
+718.37970 2373.0
+722.40686 873.3
+724.31995 697.1
+724.38300 2741.9
+724.88599 4154.8
+725.38452 2847.7
+725.88483 138696.8
+726.31671 1290.2
+726.38611 173053.6
+726.88684 120477.4
+727.38770 54219.6
+727.88818 17086.1
+727.96802 896.7
+728.38855 4175.2
+728.47095 932.2
+728.89362 1086.8
+728.96240 870.8
+752.40912 1368.4
+754.40942 717.9
+755.40375 819.0
+755.89374 2403.9
+756.38983 2552.8
+756.89050 2431.4
+759.47540 631.0
+760.88245 6763.0
+761.38385 7296.9
+761.88477 4769.7
+762.38361 2996.2
+769.88770 26110.5
+770.38879 36873.1
+770.88971 29079.5
+771.39056 14240.8
+771.89264 4324.2
+773.42267 3464.1
+773.92395 4793.6
+774.42444 5648.4
+774.92523 1828.3
+776.43176 2922.3
+777.43079 2168.9
+780.25861 687.0
+781.31226 715.7
+782.42694 45338.0
+782.92847 61948.1
+783.42926 44853.7
+783.92920 21311.5
+784.43182 8588.8
+784.93378 2406.4
+795.68445 1229.4
+818.91748 856.9
+819.40729 758.5
+830.93542 14789.0
+831.43646 20016.2
+831.93719 18002.3
+832.43604 8619.8
+832.93567 3278.4
+837.36676 1067.0
+837.86401 1551.0
+838.36023 898.7
+838.66302 1628.3
+839.16644 1622.4
+839.52808 680.9
+839.58142 696.5
+839.66937 1734.5
+839.94043 245082.1
+840.44135 360433.0
+840.57831 983.0
+840.94208 284709.0
+841.20087 1757.1
+841.44269 143971.1
+841.71881 1964.2
+841.94379 52981.1
+842.21942 1657.0
+842.30408 1217.2
+842.44318 16228.9
+842.73138 1351.8
+842.94220 2486.0
+843.02692 1721.7
+843.51837 1461.3
+846.42816 4750.2
+847.42981 3535.2
+848.42981 1197.3
+891.44806 1274.4
+892.46844 1092.2
+901.47241 1176.9
+901.97668 3949.7
+902.47601 2212.4
+902.98779 1253.3
+903.44952 15703.7
+904.45337 13643.6
+905.45648 6053.0
+906.45886 1602.1
+953.92450 914.3
+954.37042 823.7
+995.51276 4389.0
+996.51172 3810.0
+997.51379 1767.4
+998.51416 998.0
+1004.52771 919.2
+1016.53461 5778.1
+1017.53754 5093.3
+1018.53540 2761.5
+1019.53809 1033.8
+1061.56531 2223.6
+1062.57312 1310.6
+1082.54553 5021.7
+1083.54626 5222.9
+1084.54590 2288.3
+1153.59619 1969.9
+1154.59473 1720.3
+1188.03442 863.0
+1196.63977 1189.3
+1197.81372 767.2
+1197.96655 2852.9
+1208.62891 2418.6
+1209.63257 2025.2
+1210.64783 1321.7
+1265.65344 1301.4
+1266.65027 1151.8
+1310.65161 2375.7
+1311.66040 2027.8
+1312.66028 1556.8
+1367.78870 779.3
+1539.81543 609.1
+1790.72302 655.2
+1870.22742 837.8
+1877.88489 808.5
+1878.33093 866.2
+1878.54761 882.4
+1879.15808 1683.5
+1879.33618 2868.8
+1879.61169 19909.6
+1880.07141 1116.2
+1880.84985 1251.8
+1907.06409 7524.7
+1932.03491 938.4
+S	2475	2475	455.133241267
+Z	2	908.419
+Z	3	1362.124
+115.02792 723.5
+120.64938 668.4
+120.66221 598.0
+121.78556 2533.0
+132.60098 538.6
+140.67734 623.4
+142.42070 589.5
+146.39468 479.6
+146.39644 478.9
+152.32898 574.6
+154.00603 689.0
+165.76289 644.3
+168.13264 551.0
+169.48993 637.6
+171.03528 641.8
+185.29317 607.4
+186.73448 639.2
+188.67532 594.9
+198.92322 887.0
+199.20518 954.0
+199.26248 680.2
+199.26767 542.2
+199.29985 2323.7
+199.31798 878.5
+199.33185 696.8
+199.35132 517.2
+199.40015 669.8
+207.17245 712.6
+222.67598 631.1
+225.91074 625.4
+233.56578 606.4
+267.78714 623.7
+271.87399 610.6
+280.17636 618.0
+289.02618 755.4
+350.29501 762.2
+358.29413 614.6
+369.22452 922.4
+425.34564 647.0
+427.24133 880.0
+427.53888 561.1
+435.24329 3367.4
+435.77087 4245.1
+436.14651 1010.2
+436.27057 1603.3
+450.73743 633.8
+458.02777 598.1
+482.65891 700.3
+532.47034 1862.3
+570.67975 609.3
+613.34027 1282.5
+630.40302 655.7
+655.59741 541.0
+670.27765 609.1
+676.62946 1173.4
+711.40076 596.9
+795.68414 962.7
+807.66724 592.9
+832.93396 759.2
+840.79602 732.1
+922.08319 627.0
+995.88983 608.7
+1010.24097 619.7
+1017.19818 554.8
+1057.24268 828.7
+1188.11572 782.0
+1198.05164 3174.0
+1414.37634 696.5
+1494.90503 609.5
+1503.38623 747.2
+S	2477	2477	1879.98940793
+Z	2	3758.131
+Z	3	5636.693
+531.80695 706.6
+532.48560 1702.8
+549.17462 877.8
+602.12354 551.9
+627.10815 621.2
+630.40967 641.5
+649.04333 572.8
+676.61804 826.7
+800.72382 568.9
+832.36176 690.6
+840.93481 690.0
+858.06238 684.3
+1002.65179 759.7
+1112.49915 615.3
+1197.95239 919.2
+1198.08215 3010.2
+1488.27954 659.5
+1805.81372 765.3
+1870.27893 865.3
+1878.37915 1171.3
+1878.74353 599.9
+1879.50134 18158.7
+1880.23669 1160.0
+1880.53894 1400.3
+1907.04626 7655.0
+1966.95874 704.3
+S	2478	2478	1907.51599127
+Z	3	5719.273
+Z	2	3813.184
+532.48090 1738.3
+549.17596 855.1
+601.01666 615.4
+651.45886 595.4
+676.19757 637.3
+676.66241 1002.3
+696.72400 605.7
+699.36731 748.1
+785.37750 792.5
+795.67511 971.6
+891.45947 1494.7
+892.46362 606.9
+904.49036 663.5
+920.85248 565.5
+956.66266 676.7
+995.51251 1270.0
+1004.53949 2284.5
+1005.54633 920.8
+1082.54980 1340.0
+1104.62476 781.5
+1153.58057 1594.6
+1195.62231 2311.6
+1196.62402 1003.4
+1198.07434 3073.9
+1203.98914 619.3
+1363.73267 3047.4
+1364.73779 1653.1
+1408.64783 914.4
+1423.75024 825.4
+1425.66992 1456.3
+1426.69543 1402.5
+1447.74731 1136.5
+1448.77100 1241.6
+1450.75854 2369.5
+1451.76013 1805.3
+1472.83667 2318.9
+1473.83154 1550.1
+1489.76636 681.7
+1510.77222 2253.8
+1520.76550 747.5
+1521.72986 859.4
+1522.73718 1185.5
+1533.83447 1205.9
+1538.76306 3312.1
+1539.77832 2359.9
+1545.83179 4708.2
+1546.82898 5081.0
+1547.82788 1561.8
+1563.84180 61494.0
+1564.84607 38496.6
+1565.84705 7630.2
+1615.87561 605.8
+1661.85645 1516.8
+1662.83191 1164.3
+1678.85498 1644.9
+1679.85095 943.6
+1700.96838 888.3
+1751.88306 902.3
+1773.93433 2706.9
+1774.95532 1726.1
+1775.94812 2031.5
+1791.95166 23755.6
+1792.95532 19616.8
+1793.95422 7026.9
+1797.93530 865.6
+1798.93689 1108.7
+1815.97095 4059.6
+1816.97241 3093.7
+1827.94397 1080.5
+1828.93811 2223.1
+1829.92676 980.0
+1830.93469 878.2
+1846.94470 2922.4
+1847.94617 1627.8
+1852.26074 708.7
+1854.02368 674.4
+1870.36316 1307.2
+1870.94812 1013.5
+1871.95264 3678.7
+1872.93652 3863.6
+1873.94556 2763.8
+1877.97144 1421.0
+1878.63257 843.4
+1879.59204 19233.8
+1879.89880 3983.0
+1907.04065 6958.7
+1930.66113 1121.9
+S	2479	2479	1198.4188246
+Z	3	3591.981
+Z	2	2394.99
+320.40726 660.7
+354.30533 576.2
+381.34952 705.4
+395.34296 620.5
+420.77487 657.2
+426.88013 612.9
+429.38947 622.7
+475.18033 605.9
+532.43103 2333.9
+560.50452 622.4
+569.52441 593.2
+624.84216 591.8
+627.65234 680.9
+676.68188 1050.6
+757.98145 647.8
+795.68060 976.6
+807.15802 708.9
+953.99274 1236.6
+997.25232 609.8
+1019.72473 638.5
+1087.55261 604.5
+1094.59961 1266.2
+1095.09668 1569.4
+1095.60327 1081.5
+1178.64734 836.6
+1197.96411 3031.7
+1225.82104 718.8
+1359.70581 947.3
+1360.18994 769.8
+1380.10718 597.8
+1414.37769 819.9
+1446.63123 720.5
+1525.39380 594.7
+1646.89404 640.8
+1759.77258 582.6
+1848.00464 652.3
+1878.66028 820.3
+1879.14075 2706.4
+1879.63550 18782.6
+1880.29492 2359.5
+1881.18872 1308.5
+1907.05566 7332.8
+S	2481	2481	1880.0368246
+Z	3	5636.835
+Z	2	3758.226
+508.32407 606.4
+509.51581 630.6
+509.74307 636.5
+521.64734 583.4
+532.52594 1986.4
+654.24323 617.2
+704.56268 520.3
+762.76044 622.5
+771.73773 584.6
+790.66949 629.4
+795.67633 1063.4
+1057.23914 692.1
+1156.14709 591.3
+1188.33350 698.1
+1198.17139 2942.3
+1235.66553 609.1
+1354.73157 647.9
+1481.84460 673.2
+1525.47070 937.7
+1716.73389 655.6
+1776.95996 798.3
+1879.52661 19621.6
+1879.81506 3242.1
+1880.14819 916.5
+1907.05151 7711.4
+S	2482	2482	1907.4618246
+Z	3	5719.11
+Z	2	3813.076
+517.18378 3197.9
+532.49890 9956.9
+542.56250 4239.8
+549.16010 3985.6
+573.79742 3964.0
+587.10052 3478.1
+595.71234 3634.2
+676.62469 6874.8
+681.43732 4002.6
+795.68518 4652.7
+858.75818 3445.8
+880.34674 3433.0
+914.83881 3718.2
+952.73602 3266.6
+962.43842 4239.6
+1057.22534 4778.6
+1085.68286 4141.6
+1123.37988 3916.8
+1198.11096 19706.4
+1363.71838 4296.0
+1481.00366 3588.5
+1525.41284 4982.8
+1538.78845 5612.6
+1563.84302 59114.5
+1564.84680 48436.0
+1565.83374 9548.7
+1698.47278 3705.3
+1733.45776 4254.0
+1791.95264 22958.1
+1792.95471 25526.8
+1793.94604 9125.5
+1870.30969 4790.9
+1872.95654 5347.7
+1873.94360 4156.9
+1879.15515 7367.8
+1879.49084 114625.9
+1879.89648 8731.2
+1880.18738 7707.1
+1906.63354 3786.0
+1907.03345 40110.9
+1930.59863 7235.5
+S	2483	2483	1198.46124127
+Z	2	2395.075
+Z	3	3592.108
+330.95050 557.9
+332.78665 543.4
+344.85580 625.6
+344.91754 616.7
+355.94885 673.4
+359.37357 699.9
+373.68091 575.9
+427.56995 611.1
+482.32300 677.3
+518.55774 597.1
+531.72803 647.8
+532.46881 1827.9
+678.24854 628.6
+795.70380 885.8
+799.02332 642.2
+804.24945 548.6
+844.22772 753.0
+862.72870 721.3
+954.49316 1595.6
+954.99677 1384.7
+963.21783 608.7
+1057.54443 692.8
+1094.60535 923.6
+1095.11072 895.2
+1167.64124 650.9
+1177.61426 886.0
+1198.04639 3021.6
+1206.97803 736.6
+1228.18640 560.9
+1359.67786 803.0
+1360.18494 1143.3
+1360.68530 1038.4
+1406.62305 560.8
+1525.50586 810.8
+1548.52368 789.4
+1625.98438 693.7
+1680.89026 751.5
+1778.72412 609.6
+1799.85022 668.7
+1870.10352 1026.8
+1878.61023 1020.9
+1878.99536 2054.5
+1879.45813 7142.9
+1879.70898 16183.9
+1880.17566 4110.0
+1880.92786 891.7
+1907.05164 7695.7
+1930.68018 1313.9
+S	2485	2485	648.0901971
+Z	4	2588.32949
+177.39590 1702.2
+182.09639 1839.8
+185.12897 4578.3
+188.24756 2275.6
+188.26860 5717.6
+188.27859 5404.1
+188.29095 6391.5
+188.31712 4336.4
+188.41653 1509.6
+199.12305 1866.5
+199.22414 3635.6
+199.23395 2115.2
+199.29112 2487.1
+199.29979 6451.4
+199.31067 6159.4
+199.32144 1902.6
+199.33028 3078.9
+213.12352 6797.1
+216.35963 1934.7
+233.16516 2860.0
+254.16045 3165.4
+258.14557 2688.4
+261.66083 2786.5
+262.16412 2915.1
+270.61581 2005.0
+271.44733 3350.7
+271.60519 3506.4
+272.17172 68304.8
+273.17624 7407.8
+279.44806 2137.7
+295.71292 1959.4
+297.43338 1977.6
+329.18182 2988.6
+335.19510 26122.0
+335.69739 12894.3
+341.18417 2234.3
+369.17844 2879.1
+373.14563 1784.5
+373.20996 10931.7
+379.21194 2525.4
+391.21771 2577.7
+391.52948 1835.5
+392.70963 2518.3
+398.21176 1972.3
+399.20566 2185.6
+409.23080 95690.4
+410.23425 19935.6
+411.23727 2854.8
+421.21942 49515.6
+421.72040 20763.4
+422.22171 5009.9
+427.52112 1787.0
+427.54630 2237.3
+431.43399 1995.1
+440.21756 2394.4
+452.22385 2125.6
+456.21085 2776.7
+466.57599 2283.2
+473.24796 4211.9
+478.73355 5685.4
+479.23019 2551.8
+482.65891 2134.5
+487.24533 12522.4
+487.74680 4691.6
+499.25391 6204.7
+499.58765 5836.3
+499.91824 3113.2
+509.23779 5163.2
+513.75555 1891.8
+522.31433 58774.8
+522.76312 21672.7
+523.26508 14845.5
+523.31799 16748.6
+523.76697 4830.0
+524.31897 3019.2
+527.24524 6983.5
+528.24042 2334.1
+532.46960 6266.3
+535.27692 4851.3
+535.77747 3586.4
+536.27802 2475.6
+536.77930 5591.8
+537.28119 5008.3
+543.77942 3880.8
+544.28552 3022.9
+545.25488 3787.1
+553.28705 2148.7
+558.28241 17754.9
+558.78394 11406.6
+559.28577 5429.7
+559.78131 2346.4
+561.28076 1962.3
+561.52789 3629.3
+565.78656 10892.4
+566.03479 8419.2
+566.28894 5901.6
+566.53491 3997.4
+568.64087 2538.3
+570.26410 4605.2
+572.29767 4544.4
+572.79834 3884.1
+573.58569 2278.4
+573.63257 4632.2
+573.96069 6632.2
+574.09497 2408.1
+574.29156 4442.8
+579.04486 2685.9
+579.29529 7372.2
+580.88879 2294.9
+583.29645 2586.9
+583.54553 17213.4
+583.79602 27069.3
+584.04700 17192.9
+584.29974 6756.8
+584.54694 3326.5
+585.98840 2298.2
+586.00659 2184.7
+589.04529 2077.7
+596.29889 11627.5
+596.80060 6965.2
+597.30194 3837.5
+597.79224 2119.0
+599.55609 2430.3
+600.05084 2857.8
+601.81909 5039.4
+602.31982 7384.2
+602.81866 3165.4
+603.31195 2198.9
+603.81055 14348.8
+604.05988 22977.0
+604.31097 12994.9
+604.56042 7696.5
+607.81659 12525.1
+608.31311 85658.8
+608.56335 100697.5
+608.81421 83491.6
+609.06512 34148.1
+609.31409 17633.3
+609.56366 3171.9
+609.81256 2543.0
+615.81409 17889.4
+616.31537 9226.4
+616.81573 5520.0
+617.82086 3949.3
+618.32239 5730.3
+618.82391 2030.7
+619.65131 4358.0
+625.31897 23567.2
+625.65448 23306.1
+625.98718 17923.2
+626.07220 7921.2
+626.32159 14247.2
+626.57349 9779.2
+630.40448 2014.3
+631.81683 13326.3
+632.31769 9285.0
+632.82489 2835.9
+655.31342 2235.2
+668.36273 2266.2
+669.38287 33459.1
+670.38550 15010.2
+671.38336 2681.0
+676.35712 2314.7
+679.84558 14292.1
+680.34717 11122.4
+680.85309 3174.0
+681.35217 5882.9
+681.85364 5035.4
+682.02142 16619.0
+682.35596 26969.7
+682.68976 15981.7
+683.02490 5659.7
+683.35883 2685.3
+686.85284 15657.7
+687.35461 13539.4
+687.85199 4333.0
+688.36133 7106.5
+688.86383 5575.3
+689.36646 2530.3
+697.35065 3348.9
+710.35400 8831.1
+710.85522 10068.5
+711.35962 4295.3
+711.84955 2314.8
+713.69867 3226.5
+715.82507 1887.1
+719.03516 10425.0
+719.36530 12706.4
+719.70319 11648.0
+720.03546 2898.7
+720.36249 4226.2
+720.69019 5501.7
+725.03644 14187.0
+725.37085 17455.5
+725.70569 9724.3
+726.03809 4839.8
+726.37067 3371.8
+729.39105 3093.4
+731.08136 2109.5
+738.39221 2697.8
+738.90265 2746.3
+739.36346 2806.8
+739.86316 2510.4
+745.87317 15906.3
+746.37463 11466.1
+746.87604 7422.2
+747.37543 3832.5
+748.04669 4597.2
+748.37628 32577.6
+748.71161 11046.5
+748.87799 18377.9
+749.04474 6492.2
+749.38409 5519.0
+749.88159 3083.8
+754.04700 87261.0
+754.38104 130322.7
+754.71521 84420.6
+755.04938 37848.1
+755.38397 12103.1
+755.71637 3125.4
+760.38544 15972.2
+760.88715 16603.4
+761.39081 8674.9
+764.05896 4595.1
+764.72437 2145.6
+766.05499 3947.0
+766.38287 3140.5
+767.38257 3702.7
+771.72278 24474.3
+772.05658 30254.2
+772.39014 22666.5
+772.72498 13684.3
+773.05273 18216.7
+773.38538 26647.1
+773.71997 14610.0
+774.04932 5771.4
+774.38751 6670.3
+777.72595 129675.0
+778.05981 185258.5
+778.39398 132136.0
+778.72821 61929.0
+779.06219 20345.6
+779.38922 4066.2
+779.72827 3656.1
+780.87457 2423.5
+784.41034 9653.6
+785.41290 6054.2
+795.40753 13620.3
+795.69348 2522.6
+795.90894 13507.1
+796.36365 7012.3
+796.42786 3618.1
+796.87085 3682.7
+797.37891 4109.4
+801.90320 4099.5
+804.74872 4349.2
+804.92041 4918.1
+805.08032 15930.2
+805.41760 19494.8
+805.74652 3851.2
+806.08081 3116.1
+810.74811 64803.1
+811.08252 99888.4
+811.41669 84615.9
+811.75128 35019.5
+812.08661 15249.0
+812.42578 3389.0
+816.92535 11244.8
+817.42987 12105.3
+817.93225 4386.3
+831.89563 16346.9
+832.39478 14386.1
+832.89819 9152.1
+833.39581 2744.4
+834.75879 2302.1
+835.09265 3097.1
+836.42902 4345.6
+841.43152 47332.4
+842.43488 20999.2
+843.43335 7452.7
+852.41553 5249.8
+859.94995 4016.7
+860.43884 6852.7
+860.93719 6371.4
+861.43579 2374.4
+866.56140 2309.3
+868.94995 8721.7
+869.44910 10092.1
+869.95752 3816.7
+870.40448 3129.9
+871.41083 2172.5
+873.42224 3202.8
+874.44177 59662.3
+874.94312 53544.6
+875.44507 27945.8
+875.94519 11890.3
+876.44659 3596.3
+881.43243 14857.7
+881.93353 21488.2
+882.43390 13367.8
+882.93817 6674.2
+886.95343 3233.2
+887.44800 4537.9
+891.91656 2455.7
+902.43835 2310.7
+902.94861 5454.4
+903.45270 8003.0
+905.43060 6434.6
+905.93500 5080.2
+906.43256 4206.8
+926.45361 3245.8
+926.95020 4469.6
+935.49042 2267.0
+937.47900 14851.6
+937.97705 19736.4
+938.48315 10466.7
+942.96613 2301.6
+951.46472 7150.4
+951.96417 6670.1
+952.46661 7200.0
+954.96552 8077.3
+955.47076 7079.8
+955.97125 3495.7
+956.45880 58786.3
+957.46161 36246.5
+958.46552 10123.9
+960.46606 95669.5
+960.96735 98624.4
+961.46899 58076.2
+961.96838 29283.7
+962.47235 17382.7
+962.97754 6556.2
+963.47559 5917.5
+972.99377 10079.5
+973.49463 20687.8
+973.99707 11345.8
+974.49738 7592.9
+975.00659 2362.8
+980.48004 4472.9
+981.47797 4217.0
+994.98505 7709.3
+995.48865 15030.6
+995.98773 8723.9
+996.47803 3350.0
+1011.51178 4789.0
+1012.01251 7399.3
+1012.50769 3435.0
+1013.01367 2795.9
+1016.48218 4276.5
+1020.00140 4266.3
+1020.50421 5447.4
+1020.85211 2799.1
+1021.00287 3541.9
+1021.50531 4049.4
+1022.00812 3481.3
+1023.03369 4907.8
+1023.53656 2913.7
+1025.49951 2880.2
+1026.00208 3879.4
+1030.50183 12481.4
+1031.00391 19658.2
+1031.50635 10912.1
+1032.00720 6558.4
+1033.99963 37585.6
+1034.50195 54798.6
+1035.00317 24929.9
+1035.50122 13716.2
+1035.99597 2610.9
+1057.22607 3161.8
+1069.54297 21178.9
+1070.54785 15794.0
+1071.55273 4577.1
+1076.54700 2992.6
+1080.03467 6850.4
+1080.53918 8897.6
+1081.03894 5985.7
+1081.53491 6387.4
+1082.03894 2801.6
+1082.54956 2910.3
+1087.52087 2779.3
+1090.54089 20368.6
+1091.04529 27220.7
+1091.54260 14989.7
+1092.04688 8124.2
+1093.56250 14295.3
+1094.56458 8673.8
+1188.14539 2520.8
+1198.04724 10363.0
+1206.31750 2211.0
+1216.60986 12653.3
+1217.61108 12488.3
+1218.61694 5054.5
+1230.60486 3806.5
+1271.22058 2637.3
+1287.64734 6707.3
+1288.65698 6324.6
+1441.61292 2163.4
+1469.21655 2132.5
+1728.44434 2159.2
+1878.73926 4683.9
+1879.52625 61102.6
+1880.32666 4667.5
+1907.01282 22329.5
+1907.29285 2994.6
+1963.97339 2051.0
+S	2486	2486	648.8435746
+Z	4	2591.343
+165.29082 628.6
+165.76398 606.7
+185.12857 2230.5
+187.78917 624.7
+188.20779 769.5
+188.22409 562.1
+188.24739 717.6
+188.26118 1438.9
+188.27472 1842.0
+188.28604 1860.5
+188.29440 2073.4
+188.30296 1721.8
+188.31299 1665.4
+188.32281 1020.4
+188.33600 533.6
+188.36583 594.3
+188.49112 571.0
+198.92422 913.0
+199.21344 690.9
+199.28461 1482.6
+199.30243 2894.5
+199.31343 1140.0
+199.33432 655.4
+199.34636 758.9
+199.40164 604.9
+205.12064 1067.8
+209.05090 613.3
+213.12378 3201.1
+233.16498 1312.9
+238.22786 554.1
+255.14568 1205.6
+258.14584 2343.4
+258.18839 663.5
+260.59430 602.3
+261.66278 1039.3
+271.12723 630.9
+271.90424 684.6
+272.17191 26419.6
+273.17542 3029.4
+280.18051 599.5
+284.05438 662.7
+311.17209 847.3
+329.18369 1698.2
+331.18845 861.9
+335.19550 11837.3
+335.69656 4306.8
+341.05170 629.1
+356.18259 1523.6
+365.19025 705.9
+369.18008 1003.2
+373.21024 3478.4
+381.35596 749.5
+387.18964 805.9
+391.22162 1267.5
+398.20435 895.3
+400.60437 547.6
+409.23090 40742.9
+410.23456 7975.4
+411.23694 769.4
+412.21710 752.4
+414.72891 1412.1
+416.21390 1157.2
+421.21976 21854.2
+421.72113 8337.8
+422.22290 2729.0
+422.72452 809.1
+437.71808 556.3
+440.21121 661.5
+447.22308 827.7
+456.20892 1740.1
+478.23969 838.6
+478.73123 1827.2
+479.22833 1200.0
+487.24588 5341.7
+487.74765 3134.8
+499.25262 2658.9
+499.58698 3757.1
+499.91891 1248.3
+508.76764 1045.6
+509.23975 1658.2
+509.26517 1756.4
+511.33340 653.6
+513.76306 672.7
+517.26526 1574.6
+522.31451 25818.1
+522.76343 8230.1
+523.26575 5503.7
+523.31714 6809.4
+523.76379 1652.5
+524.31976 942.7
+526.26971 762.0
+527.24683 2972.1
+532.48193 2405.8
+535.27515 3007.9
+535.77789 1825.4
+536.77985 2743.6
+537.28284 1966.8
+544.20721 734.1
+544.28009 980.4
+545.60809 637.3
+547.36304 636.2
+549.14966 943.2
+549.27271 958.5
+552.78241 1730.2
+558.28259 8170.1
+558.78394 5476.7
+559.28632 2298.6
+561.28369 1060.2
+561.53510 2394.5
+565.78625 3464.0
+566.03735 5272.2
+566.28979 2720.7
+566.53827 1765.9
+567.96350 682.3
+570.26923 2179.5
+571.27240 698.9
+572.29858 3058.0
+572.80139 1568.2
+573.63702 2258.5
+573.96368 1625.4
+574.29266 1615.2
+579.04254 1427.2
+579.29346 1843.2
+579.62976 1013.8
+580.04510 764.7
+582.30328 1042.3
+582.80908 1350.2
+583.54596 7267.7
+583.79626 10896.4
+584.04712 8278.7
+584.29785 3579.5
+584.54199 838.1
+587.30310 792.0
+595.03082 706.3
+595.28363 737.0
+596.29865 5213.4
+596.80231 3920.9
+597.29840 1084.9
+599.30402 1061.9
+599.55743 1117.3
+601.81842 3195.2
+602.31757 3027.5
+602.81824 1240.6
+603.81189 6526.2
+604.06128 10409.9
+604.31189 5460.0
+604.56244 3139.6
+604.81342 966.5
+607.81622 4728.5
+608.31342 33396.3
+608.56348 37418.6
+608.81384 32868.3
+609.06494 16342.7
+609.31354 8289.5
+609.56470 2389.6
+609.80939 2088.0
+615.81506 7581.0
+616.31622 5309.2
+616.81836 1843.9
+617.82263 2343.3
+618.32184 1543.5
+618.82263 1150.0
+619.31897 1582.0
+619.65198 940.3
+621.58130 776.0
+622.06952 909.5
+622.80884 1284.3
+623.31769 934.8
+625.31989 10321.8
+625.65363 11144.2
+625.99030 3614.5
+626.07086 1950.4
+626.32001 6822.9
+626.57263 2052.1
+631.81720 3834.6
+632.31750 2411.1
+652.84216 786.2
+656.56561 633.7
+658.34601 739.2
+658.99481 823.5
+667.85510 740.5
+669.38306 14354.8
+669.62335 670.2
+670.38629 5933.6
+671.39020 1118.5
+672.85266 807.3
+674.86780 1020.5
+676.64899 1151.3
+678.35608 811.1
+679.84705 7632.8
+680.34778 5483.1
+680.84674 2534.4
+681.35175 5253.2
+681.85291 3618.8
+682.02173 7876.0
+682.35559 13527.8
+682.69031 7568.1
+683.02515 3741.5
+686.37866 943.9
+686.85065 5790.6
+687.35413 5273.5
+687.85583 2090.6
+688.35950 3435.1
+688.86188 2765.0
+689.36462 873.0
+697.34906 1890.4
+701.85480 817.9
+704.11670 736.9
+710.35596 4477.6
+710.85754 3173.2
+711.35571 1904.2
+716.34003 832.0
+719.03259 5254.0
+719.36566 6873.9
+719.70056 4567.0
+720.03577 1069.9
+720.36536 1905.4
+720.70349 961.5
+723.32648 815.1
+725.03754 5704.8
+725.37085 8419.3
+725.70404 5984.8
+726.03925 3384.6
+729.36932 722.8
+732.38403 622.6
+733.36597 792.5
+734.21106 644.7
+736.37103 804.0
+737.89752 2126.1
+738.40039 1694.2
+739.36768 1744.5
+739.87543 900.1
+745.87384 7457.0
+746.37598 5696.3
+746.87531 2415.3
+748.04364 5556.6
+748.37628 13993.1
+748.70929 4563.3
+748.87769 6237.6
+749.04407 2212.9
+749.37756 3728.8
+754.04724 38969.1
+754.38116 53342.7
+754.71472 40050.2
+755.04956 17952.9
+755.38312 5642.6
+755.71698 1191.0
+760.38513 8196.1
+760.88763 5204.6
+761.38922 3876.6
+761.88782 932.6
+763.71674 1387.8
+764.05243 2001.9
+764.38885 1277.1
+766.38519 1382.5
+768.88745 1121.1
+771.72363 7969.6
+772.05609 13055.1
+772.39099 9794.6
+772.72351 5451.1
+773.05188 8472.1
+773.38556 10220.1
+773.71783 7447.2
+774.05432 3063.6
+774.38440 3261.5
+774.88220 1062.5
+777.72601 59063.1
+778.05969 78832.4
+778.39404 57944.1
+778.72845 28317.1
+779.06274 9479.3
+779.39929 2896.2
+780.00861 646.9
+783.01959 699.7
+784.41064 4637.2
+785.41644 2164.0
+788.66315 738.4
+795.40790 6965.3
+795.68988 934.1
+795.90717 4384.2
+796.36798 2905.8
+796.42963 1905.1
+796.87677 2375.3
+797.37659 1419.3
+801.89563 1340.6
+804.20245 648.4
+804.74640 4150.1
+804.91925 4598.8
+805.07941 5444.1
+805.41498 9383.2
+805.74615 2868.5
+805.91949 1672.6
+806.07556 1779.5
+810.74829 35359.8
+811.08252 45478.4
+811.41711 27927.0
+811.75195 15939.3
+812.08496 5920.7
+812.41888 1468.6
+814.06958 655.1
+815.41583 1010.9
+816.92859 4850.1
+817.43066 4279.2
+817.93542 2042.1
+818.45813 663.6
+824.42688 1109.4
+824.91150 914.6
+827.28271 809.5
+827.35944 1153.3
+831.89807 4437.6
+832.39813 6301.2
+832.89764 3044.9
+833.39252 863.5
+834.76318 1232.8
+836.42334 1919.1
+837.42456 724.5
+837.90955 1007.5
+841.43103 19241.2
+842.43396 10196.1
+843.44031 2304.1
+844.44391 749.9
+852.42065 2709.5
+853.42157 1417.6
+856.41199 978.5
+859.94342 1505.8
+860.43860 2775.9
+860.93964 2463.3
+861.43799 1127.5
+863.56744 689.6
+865.43915 942.0
+868.94592 3245.7
+869.44983 4092.6
+869.95911 2686.0
+870.40906 1879.7
+872.43384 1027.9
+873.43060 968.2
+874.44147 23488.8
+874.94281 24990.0
+875.44531 12788.4
+875.94617 5907.0
+876.44379 1651.5
+881.43005 6964.8
+881.93097 8953.9
+882.43500 4995.4
+882.93463 2012.9
+886.94641 1225.8
+887.45215 1174.2
+891.92889 1092.4
+902.94733 1182.7
+903.45087 2435.2
+903.95343 1207.5
+904.46558 762.1
+905.42969 3626.4
+905.93335 2581.3
+906.42786 1944.9
+906.93665 845.6
+910.28088 687.3
+916.95288 1025.5
+917.45038 885.8
+918.43280 782.0
+926.45386 2847.7
+926.95526 1692.2
+927.45959 1902.3
+927.94849 739.1
+928.46698 1016.6
+928.96991 1494.3
+935.50195 1609.4
+937.47723 7684.3
+937.97693 7399.3
+938.48663 4581.9
+938.98065 1743.3
+942.46545 722.9
+943.46692 1014.6
+946.45313 1265.3
+951.46594 3332.7
+951.95782 1998.6
+952.46570 2587.9
+952.96362 976.0
+953.46503 1053.4
+954.96716 2053.2
+955.46448 2748.7
+955.96997 1090.8
+956.45874 25371.9
+957.46057 13316.6
+958.46680 4441.7
+960.46619 38425.3
+960.96661 43857.0
+961.46857 26645.1
+961.97101 12960.3
+962.47205 7483.9
+962.97559 3293.3
+963.46576 880.7
+963.98724 932.5
+964.55969 653.3
+969.34918 619.3
+972.99506 5757.4
+973.49194 7172.9
+973.99591 4183.1
+974.49207 2822.9
+979.94855 671.3
+980.47980 2686.1
+980.98816 947.7
+981.48804 2275.0
+982.48480 972.0
+994.98401 3946.4
+995.48706 6371.1
+995.98926 2109.8
+996.47961 1031.2
+1011.50812 2306.2
+1012.01294 3179.0
+1012.51068 1302.4
+1013.00739 1345.5
+1016.49316 2087.0
+1017.01276 1477.1
+1017.49561 1134.7
+1019.99445 1304.4
+1020.50519 3092.0
+1021.00256 1198.4
+1021.50525 1816.4
+1022.53235 1335.6
+1023.03796 2247.7
+1023.53070 1680.2
+1025.49829 2005.1
+1030.50134 7381.0
+1031.00391 7442.3
+1031.50732 4770.5
+1032.00684 2484.4
+1033.52271 1362.7
+1034.00024 19869.4
+1034.50098 22450.9
+1035.00342 13999.4
+1035.50549 6757.9
+1036.00513 2075.5
+1044.52844 1243.8
+1069.54358 9903.9
+1070.54553 6229.4
+1071.55029 2518.2
+1072.55969 1244.0
+1076.54492 996.4
+1080.03845 3104.0
+1080.53748 3574.8
+1081.03650 2459.9
+1081.53442 1801.8
+1082.04114 844.9
+1087.51440 977.9
+1088.52283 1180.3
+1090.54053 8275.0
+1091.04370 12862.7
+1091.54468 7634.1
+1092.04907 3204.6
+1092.54407 1172.1
+1093.56458 6939.5
+1094.56689 4537.9
+1095.56616 1591.6
+1104.55505 1423.8
+1115.55566 1004.2
+1198.07239 3441.0
+1216.60950 5793.0
+1217.61401 6394.5
+1218.61401 1441.3
+1230.62524 988.1
+1287.64771 2708.0
+1288.65125 3068.7
+1289.66077 914.4
+1358.67993 1386.6
+1359.69348 972.8
+1491.08679 839.9
+1491.71948 832.5
+1608.71533 675.1
+1653.11755 648.7
+1654.63440 674.8
+1667.92749 604.5
+1870.52991 623.9
+1877.45679 862.3
+1877.75647 679.1
+1878.01404 782.4
+1878.67712 1569.4
+1879.56995 19530.3
+1879.85339 2881.2
+1880.44092 1864.1
+1880.82349 898.8
+1881.09558 1179.9
+1907.00208 6891.1
+1907.40076 1330.3
+S	2487	2487	518.6745986
+Z	5	2588.33387
+132.95334 628.7
+133.11708 955.8
+134.16377 514.9
+134.45387 557.3
+134.93372 564.1
+144.80040 513.8
+146.91100 989.4
+149.64134 540.7
+157.59085 579.3
+165.76414 644.2
+170.62259 582.5
+185.12880 2505.0
+188.25912 799.6
+188.26740 1017.8
+188.28104 1518.8
+188.29298 1377.1
+188.30609 969.7
+188.31577 1301.5
+190.54056 618.9
+194.02565 524.7
+198.92383 998.0
+199.20813 781.4
+199.27011 669.8
+199.28494 1329.9
+199.30472 2330.5
+199.31436 2064.2
+199.32037 1385.1
+199.36388 905.9
+199.38095 608.0
+199.40335 1043.6
+199.50003 582.0
+205.12030 614.4
+213.12389 2384.9
+229.37563 569.3
+233.55901 529.2
+244.85318 642.0
+248.93399 568.4
+254.79456 626.3
+258.14484 1054.4
+272.17142 4787.7
+273.65961 627.5
+273.96991 585.1
+281.05136 1159.6
+286.83191 549.1
+307.51672 689.2
+308.87723 536.4
+323.55133 672.3
+323.56784 607.8
+335.19501 6768.1
+335.69724 1402.3
+381.33130 605.2
+392.70752 861.6
+396.62170 507.8
+409.23074 9064.6
+410.23425 1548.2
+417.04083 601.2
+421.21921 8387.3
+421.72012 4375.4
+422.21725 855.2
+427.51550 719.6
+447.20065 555.5
+469.24283 1101.3
+478.73157 1484.8
+479.23474 1116.0
+482.62497 614.7
+483.24997 3986.0
+483.45065 3455.0
+483.65207 3285.1
+483.85019 2941.0
+486.85178 15525.5
+487.05222 16863.0
+487.25256 16051.0
+487.45300 7042.3
+487.65372 2104.4
+487.74948 995.1
+499.25479 670.3
+505.43921 570.0
+516.25854 637.1
+532.46533 2326.9
+536.77991 1822.3
+536.94836 991.4
+537.28088 1422.6
+537.77881 772.0
+539.52686 1431.4
+539.77612 1057.8
+540.03027 1316.9
+544.02783 1123.3
+544.28217 1456.7
+544.53009 1812.3
+561.28400 2118.0
+561.53290 3406.6
+561.78571 1664.8
+565.78638 27324.8
+566.03705 38024.8
+566.28784 27120.3
+566.53809 9082.8
+566.78857 4273.8
+570.25238 679.9
+572.29828 2018.4
+572.80084 2156.6
+573.97589 598.9
+574.29480 660.4
+575.04517 677.8
+575.29065 917.6
+579.04419 4091.8
+579.29413 8114.6
+579.54474 5691.2
+579.79236 2074.6
+583.54578 89122.8
+583.79657 113445.0
+584.04688 73839.7
+584.29749 40808.4
+584.54846 11201.3
+584.80188 2915.6
+585.05286 925.4
+595.29181 829.4
+603.81018 9425.4
+604.06091 15240.2
+604.31110 11875.6
+604.56024 5032.9
+604.81323 1862.3
+606.72546 836.7
+606.96454 1217.4
+607.52997 1051.1
+607.77600 858.4
+607.81689 1468.7
+608.31274 187568.6
+608.47107 637.7
+608.48785 790.3
+608.56305 241788.6
+608.65741 772.1
+608.81317 181387.0
+609.06384 91176.8
+609.31427 32807.5
+609.56537 11202.3
+609.81537 4761.1
+609.86353 866.3
+610.06708 819.5
+610.15955 703.5
+610.41443 806.1
+625.31720 3053.5
+625.65295 5776.1
+625.98743 2865.6
+626.07129 6392.0
+626.32184 9006.3
+626.57300 4568.8
+626.82269 2788.6
+627.07294 1883.2
+630.37250 789.1
+631.81946 850.5
+644.32556 2916.0
+644.82892 2124.0
+648.99829 5321.8
+649.33270 7693.6
+649.66614 4435.9
+649.99817 956.0
+669.38470 1956.4
+670.38757 909.6
+676.64856 938.9
+679.84546 4015.9
+680.34747 2845.3
+680.84833 1249.3
+681.34851 1386.2
+681.85461 819.3
+682.02216 4012.6
+682.35376 4780.4
+682.68976 2948.4
+683.02582 1472.1
+687.66858 851.8
+688.00653 1178.9
+705.88000 974.9
+710.35767 1012.8
+719.03406 1029.4
+719.94946 544.3
+720.36023 2501.8
+720.69470 3725.4
+721.02863 2602.7
+721.36115 826.9
+723.00311 584.1
+725.03912 1639.5
+725.36877 2421.3
+725.70520 2747.2
+726.03253 901.3
+745.87445 3489.3
+746.37604 3060.7
+746.87421 1108.9
+748.37524 1333.4
+754.04675 10872.4
+754.38037 15122.9
+754.71429 7311.6
+755.04993 4167.1
+777.72437 2900.6
+778.05951 2774.2
+778.39325 1920.7
+786.40942 671.3
+795.40631 4351.8
+795.68396 1259.2
+795.90887 4242.0
+796.36823 1401.5
+796.42603 869.8
+796.87225 941.7
+831.89667 4152.9
+832.39807 3509.0
+832.89545 1919.7
+841.43146 1120.9
+881.43079 6178.4
+881.93372 6698.6
+882.43420 3808.0
+882.92798 769.1
+905.42627 1868.9
+905.92828 1664.6
+936.48724 554.5
+954.96356 3578.7
+955.46576 3444.8
+955.96783 2106.9
+956.45862 833.9
+1011.50977 823.8
+1012.00964 1278.9
+1057.32971 800.2
+1198.03687 2985.2
+1314.17419 621.6
+1525.35278 840.3
+1701.52832 612.2
+1708.13623 784.9
+1737.66235 581.5
+1763.79993 747.0
+1875.68372 689.3
+1876.26208 798.9
+1878.12756 867.1
+1878.92859 760.6
+1879.30786 3643.6
+1879.56726 19767.0
+1906.97144 7324.9
+1930.48206 909.1
+S	2489	2489	1879.94699127
+Z	2	3758.046
+Z	3	5636.566
+532.53033 1973.0
+581.41565 756.5
+611.62012 613.1
+631.68561 613.1
+676.62622 770.5
+676.67358 948.8
+690.78778 726.3
+727.80176 632.7
+731.08972 874.9
+790.72107 635.1
+795.68427 1146.7
+886.30774 617.0
+1057.41748 620.8
+1100.24219 639.3
+1198.18298 3025.8
+1411.35425 652.5
+1485.85010 713.5
+1533.72913 762.0
+1628.40381 591.0
+1667.08936 760.4
+1772.66931 713.5
+1781.41138 901.1
+1870.35938 1219.4
+1877.21545 680.8
+1878.46472 686.7
+1878.84937 703.0
+1879.62280 18622.0
+1880.70374 835.0
+1907.09338 7168.1
+1930.53540 1170.4
+S	2490	2490	648.0803096
+Z	4	2588.28994
+169.15044 625.6
+171.64246 701.3
+183.29199 572.5
+185.12846 900.9
+185.29503 575.5
+188.22679 553.5
+188.24321 623.6
+188.25406 758.2
+188.27696 865.6
+188.29768 614.4
+188.31876 796.6
+188.33302 618.4
+188.36472 644.2
+197.69057 735.8
+198.99445 754.6
+199.20682 804.8
+199.27194 711.5
+199.28596 833.0
+199.30638 2126.0
+199.32570 668.9
+199.33415 740.5
+199.34477 764.3
+199.40645 789.4
+202.64694 556.7
+213.12317 800.6
+213.93962 592.2
+218.10649 593.7
+219.98189 648.9
+220.61694 677.2
+231.11632 570.1
+254.44246 591.5
+258.14337 832.0
+272.17154 9044.9
+273.17551 1343.4
+280.01276 581.7
+283.47894 578.9
+308.88736 906.7
+335.19550 3202.6
+335.69589 957.6
+341.97174 641.8
+350.28830 770.4
+356.67331 597.5
+360.35382 607.3
+369.17194 776.4
+373.20880 1666.1
+384.14542 698.0
+391.22333 667.0
+409.23038 13352.1
+410.23404 2657.6
+421.21921 7649.8
+421.72037 3583.1
+487.24423 1252.0
+487.74564 712.1
+499.25064 930.3
+522.31372 9627.9
+522.76013 1962.9
+523.26483 1259.1
+523.31689 2466.4
+529.91370 730.9
+532.51758 1801.7
+535.27563 711.9
+535.77509 976.9
+541.39893 581.5
+558.28156 1128.3
+565.78650 1344.1
+566.03589 994.9
+570.26074 740.7
+572.94482 709.8
+573.62854 1020.5
+574.29529 1132.5
+579.28967 1012.0
+583.54529 2411.7
+583.79626 3530.0
+584.04736 2560.8
+584.29633 1876.5
+596.29529 859.0
+597.80011 689.0
+601.81458 1149.3
+602.31732 1352.4
+603.81165 1221.7
+604.06122 3405.2
+604.31018 1938.8
+604.56219 1750.3
+607.81781 1177.4
+608.31213 9836.9
+608.56250 16661.7
+608.81305 12732.0
+609.06470 4963.2
+609.31409 3277.5
+615.81360 3630.2
+616.31317 1557.5
+616.81555 872.5
+617.81140 641.7
+619.32294 757.9
+625.31750 3110.4
+625.65338 3391.4
+625.98254 1690.1
+626.07587 1225.5
+626.32019 2298.7
+631.81384 1559.9
+632.31866 684.3
+662.63373 657.9
+669.38257 3543.9
+670.38324 1562.1
+676.60730 754.2
+679.84424 2313.8
+680.34772 2374.4
+682.02118 1859.5
+682.35504 3464.8
+682.68970 2842.9
+683.03503 730.0
+686.84772 2074.8
+687.34888 1191.2
+688.35773 1321.7
+688.86060 636.5
+706.17700 645.6
+710.34375 869.0
+710.85828 1313.0
+719.03217 1714.2
+719.36566 2662.5
+719.70728 819.3
+725.03375 1390.6
+725.37122 2456.8
+725.70245 2005.2
+739.36139 1230.7
+745.87054 1605.2
+746.37408 2447.2
+746.87384 892.8
+748.37616 2924.2
+748.70752 966.8
+748.87781 1945.6
+749.04803 771.1
+749.37567 1188.2
+754.04572 12078.4
+754.38013 16066.4
+754.71393 11852.9
+755.04901 5499.8
+755.38391 2012.6
+760.38287 2695.1
+760.88861 2352.3
+761.38898 1387.9
+762.26666 686.4
+764.39874 713.0
+766.04987 839.0
+766.40179 595.0
+771.72205 1836.9
+772.05530 5230.6
+772.38721 3623.0
+772.72131 1712.1
+773.05035 3170.3
+773.38470 3595.2
+773.71851 2313.7
+774.04657 1188.9
+777.72510 19350.3
+778.05853 30392.1
+778.39209 19196.3
+778.72729 7003.4
+778.92499 1077.9
+779.06171 2949.1
+784.41553 1194.6
+795.40350 1758.2
+795.68719 1354.7
+795.90790 1545.8
+796.41888 1233.4
+804.92822 1048.0
+805.07770 2638.1
+805.41235 2374.1
+810.74756 10903.9
+811.08118 16109.6
+811.41553 11004.0
+811.75012 5450.8
+812.08148 1653.9
+816.92401 1099.8
+817.42719 1359.3
+818.42419 714.3
+824.77960 844.8
+825.95441 704.0
+831.89972 1928.7
+832.39844 1985.0
+832.90399 1003.6
+841.42963 4957.7
+842.43231 3018.9
+843.43799 857.0
+860.43182 772.8
+860.94232 1079.4
+868.95197 985.1
+874.44019 7610.6
+874.94208 8819.3
+875.44318 4794.1
+875.93646 1125.1
+881.42938 2138.5
+881.92859 1610.3
+882.43610 871.1
+882.93347 1151.6
+885.96783 679.4
+888.97095 1928.2
+889.47174 1119.3
+902.94244 859.5
+903.45325 1269.5
+906.43048 907.8
+937.47144 2173.6
+937.97614 2244.7
+938.49121 1290.2
+951.45465 1156.9
+951.96002 1574.7
+955.46954 1231.0
+956.45764 7178.7
+957.46045 3245.9
+958.45648 1128.8
+960.46594 12568.0
+960.96582 13184.6
+961.46741 8341.4
+961.96838 5030.9
+962.46796 2069.2
+973.49524 1952.8
+973.99341 2014.1
+974.50208 1032.6
+980.47418 723.3
+994.97540 1421.8
+995.48895 1059.4
+995.98755 916.0
+1012.00690 944.6
+1019.97968 912.1
+1020.49823 837.9
+1030.50183 1930.8
+1031.00330 2421.9
+1031.50586 1268.9
+1033.99707 6265.8
+1034.50171 8032.0
+1034.99890 4455.3
+1035.50476 1900.3
+1058.69043 664.9
+1069.54565 1839.8
+1070.54053 1549.0
+1080.53894 2078.8
+1082.56116 911.5
+1090.54358 2711.8
+1091.04321 3780.4
+1091.54004 3010.1
+1092.04211 865.4
+1093.56506 2021.8
+1094.56824 1123.3
+1140.07605 669.3
+1185.34741 664.4
+1198.15894 3435.5
+1216.61011 1812.4
+1270.42810 765.8
+1287.63989 1045.6
+1359.66907 783.7
+1748.47119 707.5
+1870.63647 730.7
+1876.15967 655.2
+1878.54761 663.4
+1878.91675 714.2
+1879.52734 17205.6
+1879.75757 6242.1
+1880.13452 1196.0
+1880.33630 1330.8
+1882.33838 704.7
+1895.72986 742.2
+1907.10449 7124.0
+1930.52014 675.7
+S	2491	2491	1907.41724127
+Z	3	5718.976
+Z	2	3812.987
+532.51221 1737.7
+543.25519 603.7
+547.80878 596.1
+635.55652 680.2
+676.65717 957.2
+688.21783 598.4
+708.55481 628.6
+795.68500 812.4
+863.84021 623.1
+891.46051 1457.9
+995.51422 954.6
+996.49988 795.6
+1004.54236 2624.2
+1005.54999 665.2
+1016.54004 922.0
+1057.29211 1314.8
+1061.55676 661.1
+1082.54626 1410.9
+1119.19641 718.8
+1134.13611 604.9
+1153.58081 894.7
+1184.42639 632.4
+1195.61890 2319.6
+1196.62244 965.7
+1198.14197 3382.0
+1321.18054 573.4
+1334.68652 777.4
+1363.72913 3326.5
+1364.73340 1249.7
+1408.66589 1171.6
+1424.71521 817.0
+1425.67700 2702.7
+1426.68347 836.7
+1432.73792 1287.4
+1450.76123 2195.9
+1451.75842 1287.8
+1469.66956 712.7
+1472.82983 1802.4
+1473.85474 1136.2
+1490.16077 601.6
+1510.76611 2697.5
+1511.78101 1252.4
+1520.76099 963.7
+1521.74207 1124.9
+1522.75195 692.5
+1533.82886 1543.4
+1538.76404 3352.4
+1539.76978 3311.7
+1544.77466 536.7
+1545.83447 3527.0
+1546.82568 4169.1
+1547.83386 1921.5
+1552.47754 620.9
+1563.84229 61909.4
+1564.84619 39178.9
+1565.84448 6036.8
+1661.84119 2004.9
+1662.87671 979.8
+1678.88098 1711.4
+1679.86633 1243.6
+1700.93469 758.9
+1732.89258 739.2
+1733.85706 826.2
+1750.87573 886.9
+1751.92566 666.8
+1773.93823 2230.6
+1774.94238 2551.9
+1775.92517 1444.8
+1791.95276 24237.7
+1792.95679 20391.3
+1793.95142 5543.7
+1799.93164 833.4
+1815.96960 3506.3
+1816.97021 2952.8
+1817.96912 962.4
+1828.94568 1685.5
+1829.93970 1242.5
+1845.99475 980.9
+1846.94153 2401.2
+1847.95642 1917.1
+1848.95654 896.8
+1860.92529 803.3
+1871.94250 4100.0
+1872.94800 4365.1
+1873.92419 2064.3
+1876.98376 2053.9
+1877.98328 1135.0
+1878.37158 1259.6
+1878.77234 1072.4
+1879.21777 3007.4
+1879.58496 19301.9
+1879.95007 2310.4
+1880.34436 1111.0
+1880.77563 1435.2
+1881.14661 874.3
+1881.58301 684.5
+1881.79114 610.2
+1907.04297 7159.4
+1930.55090 824.0
+S	2493	2493	648.0867171
+Z	4	2588.31557
+171.63960 3829.4
+188.24287 3518.4
+188.25293 5599.1
+188.27905 9669.8
+188.29266 11181.1
+188.32881 3920.6
+188.34813 3070.9
+195.72289 2905.6
+198.91940 4333.1
+199.19931 3459.5
+199.21750 3498.6
+199.23640 3127.8
+199.25706 2691.9
+199.27110 4955.4
+199.29640 8013.1
+199.30612 6042.2
+199.31592 6631.4
+199.38153 4398.3
+199.41551 3409.5
+199.41803 3317.6
+208.16615 3087.3
+228.01588 3057.0
+255.50186 3057.9
+272.17111 21416.4
+279.68350 3199.6
+283.34616 2984.5
+324.49350 3391.6
+327.19034 2740.9
+332.92761 3485.5
+335.19434 5732.2
+350.84320 3090.0
+377.48123 2740.1
+409.23044 33301.8
+410.23300 4568.5
+421.21896 16409.9
+421.72003 5915.4
+433.34250 3500.2
+478.73230 3404.0
+485.95615 2833.0
+487.24463 3729.1
+507.58878 2875.5
+522.31421 22392.8
+523.31189 4228.3
+525.83984 2924.3
+529.16608 3429.0
+532.53674 9926.4
+558.78186 3313.8
+564.48358 3326.7
+565.53809 4401.8
+566.03894 9895.1
+583.79810 10303.7
+596.22565 3075.6
+602.08508 3514.1
+603.81323 8527.0
+604.06061 4398.7
+606.64587 3002.4
+608.31219 35229.1
+608.56213 40254.7
+608.81073 19579.3
+609.06104 6464.7
+609.30829 4144.1
+615.81049 5858.2
+617.81543 3358.5
+621.69012 3601.3
+625.31793 5168.5
+625.65540 12523.8
+626.06580 4007.2
+626.31726 9235.2
+630.38293 2959.5
+631.81274 4849.4
+669.38129 12320.5
+676.65546 4818.0
+680.34558 5516.3
+681.85138 3529.8
+682.02094 7226.3
+682.35400 8909.9
+682.68994 3636.9
+686.85223 4820.8
+690.42145 3300.2
+710.35120 3733.2
+710.85919 3447.9
+725.03876 9111.8
+739.34003 2513.3
+739.36542 2817.1
+745.87659 4192.2
+748.37622 8571.7
+748.87317 3782.5
+753.39374 5191.8
+754.04626 33324.2
+754.38086 36641.6
+754.71552 24935.2
+755.05151 10272.1
+771.71881 5916.2
+772.05579 11681.4
+772.39050 7737.9
+773.05658 6313.2
+773.39294 5160.2
+773.72058 6794.4
+777.72498 49889.7
+778.05890 62309.0
+778.39264 33640.5
+778.72833 15105.4
+778.93494 4917.8
+779.06494 5059.2
+795.40985 6202.2
+804.74731 5227.8
+805.08270 3824.1
+805.41229 5911.5
+810.74792 28892.3
+811.08112 34376.5
+811.41675 23815.2
+811.75275 14502.5
+817.43353 5273.6
+831.89056 4568.7
+841.42853 14683.3
+842.42273 3777.2
+852.42517 3853.7
+853.03656 3425.0
+874.43878 18450.5
+874.94122 22806.6
+875.44446 9003.3
+881.43146 4129.1
+881.92786 4540.8
+888.97119 6760.4
+889.47998 5985.9
+889.97803 4166.9
+956.45532 13422.4
+957.44659 5715.3
+957.95923 3411.6
+960.46509 32253.5
+960.96436 34491.7
+961.46655 18054.2
+961.97229 8428.1
+962.47064 4286.1
+973.00061 4456.5
+1030.49670 4994.2
+1031.00574 4433.1
+1031.51306 5119.0
+1033.99792 17568.1
+1034.49915 15423.0
+1035.00146 11600.5
+1069.54565 4107.2
+1090.53809 5671.0
+1091.05005 7366.7
+1091.55078 5483.4
+1092.00549 3042.2
+1093.55225 5611.1
+1131.05835 4110.4
+1131.29980 3247.9
+1184.94458 3197.4
+1198.18872 16538.9
+1264.48608 3556.5
+1525.20972 3140.6
+1667.67688 3722.4
+1759.64319 3206.7
+1805.72180 3775.5
+1876.87024 3324.3
+1878.26782 5137.4
+1878.80481 5378.9
+1879.14600 5136.2
+1879.57971 94968.1
+1880.84497 4205.0
+1882.24731 4093.1
+1907.06177 37679.7
+1918.87708 3637.9
+1930.49890 4253.7
+S	2494	2494	648.8393246
+Z	4	2591.326
+165.75447 582.2
+169.48013 877.7
+174.61438 533.1
+181.05193 596.4
+181.74927 522.1
+187.91541 975.7
+188.22475 889.9
+188.24042 790.2
+188.26178 1143.3
+188.27748 1521.1
+188.29410 1345.2
+188.30408 1364.7
+188.31961 1226.9
+188.32428 1168.8
+188.33859 633.3
+188.34871 1111.9
+198.92377 723.7
+199.21698 925.8
+199.25856 856.3
+199.29715 1425.8
+199.30608 664.5
+199.31516 2391.1
+199.32445 1249.0
+199.33430 883.5
+199.37791 710.4
+199.41241 835.1
+199.42139 707.9
+206.94426 537.3
+271.60910 729.1
+272.17178 2271.8
+278.31903 684.0
+319.06909 600.4
+335.19556 875.1
+337.24283 602.2
+344.55151 667.5
+360.05197 592.8
+386.74976 602.2
+405.91812 618.5
+409.23013 3430.9
+410.23245 695.8
+421.21924 1061.3
+421.72079 968.4
+430.87210 606.5
+458.88327 556.4
+470.83765 627.7
+484.00772 617.5
+522.31396 2176.4
+532.54401 1715.2
+555.91937 576.2
+560.44354 636.5
+573.96857 722.5
+574.07043 668.5
+584.04871 1048.7
+589.22845 754.4
+604.05981 736.8
+604.56055 1007.8
+608.31177 2685.3
+608.56354 3121.5
+608.81213 2816.2
+609.05713 1332.1
+615.81512 811.8
+625.32233 1130.1
+626.32269 1134.5
+633.52789 641.3
+669.38123 1019.5
+682.01434 691.8
+726.07288 684.5
+748.70032 694.5
+754.04340 3457.2
+754.38031 4249.5
+754.71326 3068.3
+755.04205 1268.0
+755.38037 1092.5
+773.06299 801.2
+773.71411 663.3
+777.72504 4932.8
+778.05847 6644.9
+778.39429 4016.0
+778.72852 1296.6
+779.05914 777.5
+795.68445 723.7
+810.74561 2247.0
+811.08167 3920.8
+811.42072 1800.7
+811.75079 1004.3
+812.41376 877.8
+841.03021 663.1
+841.42792 1576.6
+868.95026 715.5
+874.43823 2267.8
+874.94177 1299.9
+875.43201 883.4
+887.99261 846.9
+954.31427 758.3
+956.45667 1869.7
+960.46118 4082.5
+960.96735 3361.2
+961.47162 3461.3
+961.96552 921.8
+1019.69299 996.2
+1033.99792 1682.0
+1034.49939 1053.3
+1057.19006 683.6
+1091.54187 812.9
+1091.81104 650.7
+1140.30237 752.9
+1172.77246 835.4
+1198.21838 3845.7
+1288.33179 668.4
+1341.38831 641.5
+1492.13928 692.8
+1525.30896 757.3
+1561.75366 735.9
+1665.39783 711.7
+1688.84912 678.3
+1780.29382 680.5
+1854.12622 658.9
+1877.26038 706.4
+1879.35986 6315.9
+1879.65515 17376.2
+1880.01453 4935.7
+1880.67651 1090.6
+1881.02039 674.8
+1907.05505 7175.4
+1946.08752 631.2
+1995.79236 744.2
+S	2495	2495	1431.5095746
+Z	4	5722.007
+380.47968 596.7
+400.55450 551.5
+403.23392 732.5
+427.50223 617.8
+432.41663 523.5
+432.43814 596.0
+452.73370 701.4
+453.86401 612.4
+455.60025 680.9
+470.58133 619.1
+486.45236 605.3
+532.52362 2427.6
+553.95685 614.3
+559.63263 660.9
+597.07666 636.7
+666.84070 660.9
+676.64001 1046.9
+686.70679 599.1
+954.86633 746.2
+1140.30310 653.6
+1198.17224 3403.2
+1497.30762 542.6
+1525.27612 700.9
+1879.22705 1009.2
+1879.54126 20013.4
+1879.88806 798.4
+1906.98596 11195.8
+1907.48572 8331.0
+1907.98157 11506.8
+1908.48877 4893.6
+1908.99060 3547.0
+1918.90808 718.7
+1930.39941 1079.9
+S	2497	2497	1879.98299127
+Z	3	5636.674
+Z	2	3758.118
+532.59454 1652.9
+632.01080 646.0
+667.43475 734.3
+676.63531 950.2
+782.55969 671.0
+795.67932 905.7
+805.71442 609.0
+810.86725 548.8
+811.30505 705.8
+1057.24426 842.3
+1198.33398 2743.6
+1201.03601 709.0
+1389.55273 865.2
+1777.34509 735.7
+1844.38586 721.8
+1869.91504 997.3
+1879.24084 909.2
+1879.52869 19858.0
+1880.19849 1222.0
+1880.59412 708.0
+1880.84900 819.1
+1907.10413 7377.6
+1930.43591 988.2
+S	2498	2498	1907.50499127
+Z	3	5719.24
+Z	2	3813.162
+532.56769 1810.7
+568.89465 543.8
+609.72247 610.2
+630.33325 1252.5
+676.63025 990.7
+731.03119 769.7
+762.46039 575.6
+780.70367 592.8
+788.54742 687.4
+795.67554 826.8
+891.46332 945.4
+895.55328 601.1
+939.79907 773.0
+974.35876 675.2
+1004.53247 1110.2
+1195.62805 1043.4
+1196.60754 724.7
+1198.27124 3220.1
+1363.73132 1296.7
+1364.71887 953.3
+1425.67896 854.1
+1472.86169 1180.2
+1498.85449 650.5
+1510.77209 912.2
+1519.83472 638.9
+1533.84497 1142.3
+1538.76660 1602.2
+1539.77759 828.2
+1545.83008 2270.2
+1546.82446 2311.5
+1563.84167 31698.0
+1564.84717 21417.0
+1565.84485 3118.3
+1637.10095 636.5
+1661.83130 633.9
+1662.81714 764.2
+1773.91907 1126.2
+1774.94849 1389.4
+1775.89685 806.1
+1791.95032 13469.8
+1792.95691 11651.6
+1793.96045 3353.3
+1815.96655 1890.6
+1816.97656 1710.0
+1827.91821 1231.6
+1829.92896 908.6
+1845.97388 795.2
+1846.94800 1691.5
+1847.97290 1083.7
+1869.96362 767.9
+1871.94470 2496.7
+1872.95007 1575.6
+1873.93469 1037.1
+1876.92188 1190.7
+1878.39136 1248.6
+1878.78162 1625.5
+1879.11414 1505.8
+1879.50854 19140.2
+1879.91882 1882.5
+1880.29626 1578.7
+1906.80310 698.2
+1907.09814 7473.4
+S	2499	2499	648.0815296
+Z	4	2588.29482
+167.51447 588.3
+173.62654 528.2
+183.80875 598.6
+187.40453 729.3
+187.85873 647.2
+188.26479 1031.6
+188.27428 882.1
+188.28183 952.2
+188.29097 933.6
+188.30377 938.3
+188.31482 946.8
+198.92264 727.6
+199.21927 734.8
+199.23143 903.0
+199.27159 812.3
+199.29973 2029.7
+199.30998 1975.6
+199.31938 1226.7
+199.32884 1342.3
+199.42902 781.2
+203.24324 670.3
+259.88724 587.0
+260.32755 561.5
+262.91043 586.6
+265.60004 589.3
+280.17590 565.0
+282.34644 658.4
+289.71719 667.7
+290.97284 607.4
+308.88651 779.3
+327.14600 547.5
+340.50519 544.6
+381.34027 815.1
+388.23502 662.7
+410.90851 638.2
+416.96997 716.9
+439.08978 616.7
+482.22202 760.3
+482.86499 605.9
+492.55557 624.2
+494.93250 656.9
+498.34494 580.0
+525.12286 715.3
+529.07794 642.7
+532.56506 1883.0
+549.13184 802.4
+591.57971 566.5
+635.66785 699.3
+636.06305 667.0
+646.55432 651.2
+676.64789 1110.5
+754.05042 759.2
+795.68018 1021.2
+832.48248 935.7
+832.98938 983.8
+858.00592 630.2
+1002.36188 651.7
+1093.83142 641.9
+1106.44092 641.4
+1198.26245 3482.0
+1206.08411 642.8
+1298.82666 634.2
+1341.80261 822.2
+1374.65503 672.0
+1403.87708 635.8
+1682.68970 708.9
+1849.81519 634.7
+1877.40649 884.7
+1878.98706 702.5
+1879.25342 2629.9
+1879.56787 19272.0
+1879.89355 2940.6
+1880.34875 906.3
+1907.09192 7704.6
+1930.50378 945.5
+S	2501	2501	953.829991267
+Z	2	1905.812
+Z	3	2858.215
+298.14050 1000.2
+309.19287 1629.5
+311.11517 637.1
+316.15051 1439.0
+333.20367 1220.7
+344.14581 7673.0
+345.15002 1294.6
+348.20337 3550.5
+349.84653 653.3
+351.21475 5992.1
+352.19849 4269.8
+353.20245 924.9
+369.22488 22133.8
+370.22916 3319.1
+386.15753 1207.1
+392.23096 2988.4
+397.54373 693.3
+398.55124 557.3
+412.20743 1143.2
+413.16763 3595.8
+414.17163 1114.6
+416.26199 2690.2
+417.22626 973.6
+424.69785 539.5
+427.51849 803.8
+431.17831 3553.4
+433.29471 820.9
+435.23639 1451.8
+439.21567 704.4
+457.22900 2755.5
+461.28650 3806.5
+463.23038 848.4
+477.08377 696.0
+482.30914 4955.3
+483.31241 1226.1
+493.19247 1042.8
+498.25897 995.4
+499.24142 2100.8
+507.19168 4184.9
+508.19357 1019.3
+508.27277 811.7
+509.22021 908.7
+510.21857 666.3
+516.26660 1539.5
+518.30914 2054.6
+520.32971 837.3
+526.25183 3022.5
+527.29565 867.4
+530.30817 2244.9
+531.30933 776.0
+532.58569 1795.9
+543.21289 1476.2
+544.21631 868.3
+544.26154 7480.8
+545.26447 1700.0
+545.30249 3174.7
+548.31995 5381.2
+549.12317 843.2
+549.31927 1938.5
+550.32886 667.2
+554.28546 876.8
+555.83008 620.5
+576.31732 1157.4
+577.30035 19890.3
+577.80194 12893.5
+578.22943 1304.5
+578.30359 6127.6
+578.80353 1314.7
+594.28833 659.6
+599.30884 693.7
+605.29907 661.8
+605.33545 878.0
+612.32129 1159.2
+618.28772 1261.5
+623.30383 2385.1
+624.31500 911.8
+630.26007 634.3
+633.84424 1244.0
+634.34070 834.6
+638.22418 839.0
+638.83362 4713.2
+639.33716 2510.6
+639.84015 1828.3
+641.31818 2094.1
+642.34192 4217.3
+643.34674 1610.9
+643.39423 2160.2
+644.39832 717.1
+645.34021 1303.0
+661.40198 4515.4
+662.40546 1698.2
+663.34668 2228.4
+664.34967 808.6
+665.37842 2421.2
+666.37866 987.7
+673.36542 1885.1
+673.86365 1789.3
+674.36292 890.2
+674.66022 863.9
+676.62640 940.6
+682.36682 43281.8
+682.87018 26968.9
+683.36963 15120.8
+683.87219 3397.3
+684.36963 2795.6
+688.26514 2639.8
+689.27838 654.5
+699.36084 33072.6
+700.36438 12818.8
+701.36279 3425.8
+702.36133 883.0
+706.27783 3850.0
+707.28162 1258.7
+716.87817 1005.7
+717.38531 1234.6
+717.88196 1239.9
+718.39172 804.5
+722.39734 1009.2
+725.88489 14068.6
+726.38568 13122.2
+726.88733 6651.8
+727.39099 1498.6
+729.36383 6713.5
+729.86682 8243.4
+730.36755 3894.4
+730.87103 1369.9
+731.37500 1215.9
+735.33618 719.6
+736.38538 2950.4
+748.44006 1087.4
+750.92963 658.0
+754.39801 4541.2
+755.40631 1569.8
+756.39917 786.6
+758.42474 1395.9
+771.85974 689.9
+773.42188 9721.9
+773.92426 10774.8
+774.42407 5704.6
+774.92169 1762.9
+776.43121 5676.2
+777.43463 2914.9
+778.39246 1348.1
+781.43213 15687.9
+782.42853 44301.1
+782.92902 32897.5
+783.43060 17407.8
+783.92865 5437.1
+784.43317 2779.8
+785.37616 2376.9
+787.37939 820.3
+787.43036 759.4
+791.42511 1223.8
+794.88599 1384.3
+795.37878 766.6
+795.67798 1051.6
+795.88751 1334.1
+804.42010 1043.2
+812.44415 1640.6
+813.44049 948.6
+819.30042 964.8
+830.93402 2082.4
+831.43671 2351.9
+832.43909 1108.8
+837.31628 2221.1
+838.32294 1062.7
+839.94025 11579.7
+840.44171 10854.6
+840.94196 4575.0
+841.44171 2003.2
+845.45856 943.9
+846.42920 23908.9
+847.43262 12822.9
+848.43170 4450.5
+849.42377 856.5
+863.46289 8663.2
+864.46777 4283.4
+865.49896 887.8
+868.41418 2459.3
+869.42664 984.3
+870.41760 873.5
+873.44757 6507.7
+874.44531 3368.3
+875.45392 1298.3
+880.50104 5812.1
+881.50458 3042.2
+882.41815 1646.6
+883.42529 710.2
+883.51044 839.5
+885.43658 1483.8
+886.42206 2031.7
+887.47797 2962.3
+887.98126 4067.8
+888.48438 1793.0
+889.51508 3054.4
+890.05206 758.5
+890.51904 1728.7
+891.45776 38702.2
+892.46069 19474.1
+892.97052 840.9
+893.46362 5841.5
+894.47131 1272.9
+896.48273 29909.7
+896.98431 31055.7
+897.37921 788.3
+897.48541 20593.3
+897.98480 6530.8
+898.48602 2664.7
+901.46674 993.1
+901.58258 749.1
+901.96503 897.0
+902.04858 985.8
+902.46484 803.1
+903.45068 253072.2
+904.45276 137048.6
+904.86627 1457.5
+905.45374 53436.0
+905.85565 834.1
+906.32556 742.3
+906.45502 15543.1
+907.45911 2653.1
+908.50507 1512.3
+908.99695 1729.6
+909.49622 791.9
+914.47711 825.7
+917.50580 789.1
+918.83185 712.7
+920.48059 1427.8
+920.98309 920.5
+924.98535 751.8
+976.54535 4949.5
+977.54919 2846.3
+978.55145 914.0
+986.53052 7202.4
+987.52991 3480.2
+988.54401 934.2
+995.51312 8830.8
+996.51648 6518.9
+997.52185 1608.5
+998.53204 1173.2
+999.51825 1126.0
+1000.51611 922.8
+1004.54144 48580.3
+1005.36810 1639.4
+1005.54431 24205.1
+1006.37305 1635.7
+1006.54626 7549.6
+1007.55115 1815.6
+1016.53448 99394.1
+1017.53699 62771.3
+1018.53925 24996.5
+1019.53699 6698.2
+1020.54388 2527.8
+1023.38306 3406.7
+1024.38708 2136.0
+1025.37683 1628.6
+1061.56201 7031.8
+1062.56665 4375.9
+1063.57361 1663.8
+1066.56323 8634.2
+1067.56799 6816.7
+1068.57007 2140.9
+1082.54761 4612.6
+1083.54834 3158.1
+1084.53894 1713.3
+1103.91394 765.3
+1118.54651 1198.3
+1122.44873 2467.2
+1123.44287 1566.6
+1135.58643 823.1
+1136.56763 1597.3
+1137.57788 1114.6
+1153.59351 100984.3
+1154.59656 69562.5
+1155.59814 32042.7
+1156.59753 9863.5
+1157.60339 1996.8
+1177.61584 877.6
+1180.64063 1459.6
+1181.63989 1008.0
+1188.34143 867.7
+1190.62903 907.3
+1195.62878 5944.1
+1196.63306 4752.6
+1197.60742 4415.7
+1198.31824 2857.5
+1198.60938 3183.6
+1199.60608 2396.4
+1208.63171 13009.4
+1209.63416 7673.2
+1210.63245 3827.4
+1211.64429 1049.4
+1222.51501 814.2
+1265.65027 2514.1
+1266.67505 12682.9
+1267.67847 9050.3
+1268.68164 3749.9
+1310.64954 1387.4
+1311.65747 1734.9
+1334.68677 833.1
+1345.72778 926.9
+1346.71936 1746.9
+1347.71716 1266.8
+1358.41760 653.8
+1358.56458 1894.2
+1359.57178 2661.3
+1360.32910 722.9
+1360.65698 1172.2
+1361.64905 1126.7
+1363.72949 121537.3
+1364.73279 96206.1
+1365.73425 46667.3
+1366.37061 723.1
+1366.73462 15737.5
+1367.73645 5289.0
+1368.73328 974.1
+1369.05896 790.8
+1397.69885 1002.7
+1408.65796 1380.4
+1409.65161 1022.4
+1423.74097 3023.7
+1424.73767 1767.1
+1425.67627 6938.6
+1426.68506 4696.3
+1427.69324 2806.8
+1432.76685 1913.8
+1433.75830 2314.1
+1447.75354 5094.1
+1448.76099 4619.6
+1449.76135 2239.7
+1450.76221 32264.4
+1451.76428 26613.9
+1452.76697 13900.4
+1453.77124 4707.9
+1454.77197 1558.8
+1457.72461 2362.5
+1458.71411 2304.3
+1487.61646 2003.1
+1488.62903 2283.4
+1489.60718 1681.5
+1494.80591 734.0
+1510.77136 6275.0
+1511.77393 6060.7
+1512.77100 2891.4
+1513.77576 1114.5
+1520.76331 2751.5
+1521.75439 4356.6
+1522.75073 2859.9
+1523.76782 1371.0
+1538.76697 55478.0
+1539.76978 43446.6
+1540.77295 22816.2
+1541.77222 9640.9
+1542.76233 1454.4
+1563.85376 2031.9
+1564.81335 878.1
+1565.86108 1102.8
+1601.68982 1298.0
+1635.81885 2159.5
+1636.81067 1259.3
+1678.87390 1788.4
+1679.87366 1534.5
+1728.74817 1232.7
+1729.75537 1644.7
+1730.76782 859.5
+1733.88757 1085.6
+1777.12427 692.0
+1813.90344 697.5
+1875.67896 770.0
+1878.55017 1268.0
+1878.99890 916.0
+1879.49512 19495.7
+1880.43909 1654.2
+1882.26709 626.1
+1907.04614 7535.6
+S	2502	2502	956.1545746
+Z	3	2865.189
+Z	2	1910.461
+250.88916 672.8
+255.27730 707.1
+260.51767 571.4
+286.21921 608.9
+298.14154 949.2
+308.88470 681.7
+309.19312 2435.9
+316.15176 1590.8
+326.13632 859.1
+326.17172 1128.2
+333.20419 2917.0
+344.14600 7951.0
+345.14993 1286.0
+348.16769 814.7
+348.20425 4952.0
+349.20734 665.1
+351.21548 7108.5
+352.19916 4015.9
+369.22519 19689.6
+370.22885 2544.0
+381.33862 877.3
+384.21408 830.5
+386.15823 1941.6
+392.23026 4428.1
+393.23419 993.7
+395.19540 934.8
+398.79550 621.1
+407.24551 825.0
+411.22336 1119.1
+412.21133 1779.1
+413.16754 3656.1
+413.53607 651.6
+416.26294 2850.7
+417.22495 819.4
+427.52310 765.4
+429.23621 1546.5
+431.17789 4609.4
+433.29349 1055.5
+435.23645 2679.9
+436.23752 802.8
+439.21567 762.0
+457.23053 3646.8
+458.23563 1154.9
+461.28741 5443.7
+462.29373 1040.1
+479.26285 994.3
+482.30957 6969.9
+483.31360 1487.9
+490.31525 734.7
+493.19373 1066.8
+498.25546 1285.9
+499.24081 2180.2
+507.19260 4630.1
+508.19717 874.5
+508.24072 752.2
+508.27841 882.3
+510.22260 755.5
+516.26843 2793.9
+518.31049 2725.4
+519.30865 853.6
+520.32410 1781.7
+526.25122 3515.2
+527.23279 656.6
+527.26154 759.0
+527.29590 917.9
+530.30927 3109.7
+532.52533 2097.9
+543.21088 1175.0
+543.55682 650.4
+544.26276 9212.4
+545.26654 2407.6
+545.30591 4054.1
+546.30701 874.4
+548.32001 6112.7
+549.12244 690.2
+549.32050 2216.3
+554.28174 844.4
+558.30341 873.9
+576.31390 1780.8
+577.30090 25015.2
+577.80292 17728.2
+578.22870 1334.2
+578.30444 7088.9
+578.80463 2930.9
+579.29388 692.5
+582.78900 988.3
+586.05701 1090.6
+586.31122 1097.6
+594.29236 737.3
+599.78284 622.8
+605.33771 707.1
+607.29083 652.3
+612.32233 982.6
+618.28735 1839.0
+623.30383 3907.9
+624.30750 1588.3
+630.37720 677.6
+633.40985 1095.0
+633.84326 1728.3
+634.84387 789.3
+635.35229 833.7
+636.30304 1533.4
+638.83429 5974.8
+639.33972 4662.8
+639.83728 2865.9
+641.31512 4068.5
+642.34259 5998.1
+643.34460 1939.7
+643.39227 2435.2
+644.39673 900.8
+649.36975 830.5
+661.40430 6953.8
+662.40698 3298.2
+663.34546 3105.9
+664.34937 1886.6
+665.38037 2683.0
+672.29694 875.7
+673.30853 652.5
+673.36542 2731.8
+673.86841 1777.8
+674.36499 1285.6
+676.59973 827.2
+682.36835 59652.9
+682.87128 33350.2
+683.37122 21550.3
+683.87207 5644.7
+684.37103 2569.3
+687.94666 646.8
+688.26837 1954.6
+699.36163 42726.7
+700.36511 15675.6
+701.36310 4101.1
+706.27838 3557.6
+707.27881 2219.1
+716.87976 2870.8
+717.37982 1758.2
+718.39154 2019.4
+719.42456 813.4
+722.40344 1156.8
+725.88611 21680.4
+726.38757 17531.6
+726.88824 9750.6
+727.38824 2651.5
+729.36542 7528.1
+729.86578 7691.6
+730.36768 4542.7
+730.87390 1747.9
+731.37970 2026.9
+736.38971 4356.7
+737.39227 1290.0
+748.43927 800.6
+749.43933 863.8
+752.41132 1548.8
+754.39899 5942.0
+755.40411 2054.7
+758.37537 703.5
+758.42847 1821.7
+759.42743 1111.7
+760.35803 1488.0
+773.42310 14869.6
+773.92499 13074.2
+774.42432 4464.4
+774.92474 2616.1
+775.42828 754.8
+776.43207 5959.1
+777.43567 2896.2
+778.37726 1318.1
+779.37714 1589.7
+780.74744 2031.3
+781.08069 1751.9
+781.43500 14590.6
+782.42902 61319.9
+782.92987 47515.1
+783.43109 22773.2
+783.57330 691.6
+783.93030 8233.0
+784.43561 2895.1
+784.94086 617.0
+785.37793 5327.2
+786.37170 1805.1
+786.42273 1123.5
+788.36664 808.8
+791.42566 1006.4
+794.89014 1509.7
+795.38989 1007.1
+804.42413 1754.1
+805.43433 1265.2
+812.44269 2683.0
+813.45020 1398.6
+820.13086 1016.1
+822.43414 790.3
+830.93695 1874.6
+831.43079 2111.0
+831.93542 1906.7
+832.42584 690.0
+837.31708 1963.4
+839.94196 15473.9
+840.44293 14996.8
+840.94440 6503.7
+841.44519 3424.2
+841.94995 1119.5
+845.45483 1997.4
+846.43024 33967.8
+847.43408 16219.1
+848.43463 5536.9
+849.44037 1633.4
+851.47394 642.1
+854.40863 703.5
+854.93408 694.0
+855.43909 1517.1
+856.41290 1009.9
+858.40277 694.7
+861.42828 921.1
+861.53168 702.0
+861.83521 649.4
+863.46436 10240.5
+864.46692 6089.0
+865.51117 1357.5
+866.50311 1090.2
+868.41510 3936.8
+869.41626 2311.6
+870.60114 860.1
+871.51404 1232.7
+873.44873 9655.2
+874.45038 5396.9
+875.45300 2020.4
+876.45825 878.2
+878.96429 913.8
+880.50134 6516.6
+881.50531 2977.4
+882.43201 3784.4
+882.62744 720.4
+883.42914 2038.7
+884.71973 766.7
+885.04059 1069.3
+885.43842 1602.2
+886.42603 4434.2
+887.47528 3818.7
+887.97937 6497.9
+888.48303 2084.3
+888.98041 974.9
+889.51984 4688.9
+890.51813 1486.1
+891.45850 55645.9
+892.46204 26673.9
+892.87463 643.8
+893.46344 7545.6
+894.46124 950.2
+896.48401 43393.0
+896.98553 43470.2
+897.48615 20871.2
+897.98706 7866.5
+898.49377 1942.4
+898.98260 1341.1
+900.57648 1016.5
+901.97656 1227.4
+902.47754 1375.7
+903.17456 1594.1
+903.45215 331398.5
+904.45422 180968.3
+904.87396 1678.6
+905.45514 71050.0
+905.88928 923.9
+906.34052 2406.5
+906.45715 18957.6
+907.45880 4662.3
+908.49811 3645.6
+908.99896 2996.6
+910.80908 628.4
+914.36249 789.4
+914.48712 1359.7
+914.98859 873.3
+915.49500 1180.8
+917.51001 1149.1
+919.98785 1474.7
+920.48151 1514.1
+925.52472 847.2
+953.99774 4893.5
+954.49805 6335.4
+954.99762 3089.2
+964.46381 993.6
+967.52496 790.8
+968.52740 1049.8
+970.94324 868.0
+976.54761 8681.7
+977.55249 5021.8
+978.56140 1362.8
+982.10004 779.4
+983.84210 747.8
+986.53204 9658.3
+987.53369 6221.1
+988.53717 2370.7
+992.73248 757.5
+993.81769 888.3
+995.39081 882.2
+995.51489 14641.0
+996.51685 9314.5
+997.51776 3060.7
+998.53009 1219.7
+999.51038 2056.9
+1002.89679 804.9
+1003.86847 769.0
+1004.54248 73789.5
+1005.37134 1316.6
+1005.54584 37384.3
+1006.37244 1442.1
+1006.54822 10705.1
+1007.54791 2544.4
+1008.16675 917.3
+1008.83655 785.2
+1015.83783 841.1
+1016.53558 142430.4
+1017.40869 898.9
+1017.53839 85765.8
+1018.54065 34052.9
+1019.54303 10806.0
+1019.94177 1014.9
+1020.54919 2486.1
+1023.38013 5002.0
+1024.38538 3063.9
+1025.39453 1188.9
+1026.50867 1236.5
+1026.72095 722.4
+1028.00513 722.9
+1028.48352 755.1
+1032.13391 1061.8
+1043.55774 1655.9
+1043.89355 793.8
+1044.18958 912.3
+1054.54163 763.2
+1059.25720 721.6
+1061.56372 10076.2
+1062.57007 8276.1
+1063.57471 3036.8
+1066.56665 11314.0
+1067.57129 7853.7
+1068.56482 2697.5
+1082.54639 7021.2
+1083.04297 782.3
+1083.55371 3575.2
+1084.22144 817.9
+1084.54797 2767.9
+1095.05994 836.1
+1104.46802 1155.3
+1104.60193 1357.3
+1118.55835 3512.2
+1119.56775 2812.2
+1120.55664 1236.3
+1122.44958 3586.5
+1123.45544 2056.2
+1124.45337 1099.7
+1135.58887 1215.0
+1136.57373 3251.9
+1137.57104 2299.6
+1149.64880 670.5
+1153.59485 168200.3
+1154.59790 117759.8
+1155.59863 52163.2
+1156.59863 16699.2
+1157.59619 3633.6
+1158.56445 1016.8
+1167.63147 966.6
+1177.61694 1624.6
+1178.62866 1139.6
+1180.64624 3445.6
+1181.63867 2437.3
+1190.62122 2721.4
+1191.61755 1460.3
+1195.62891 8755.8
+1196.63477 5152.6
+1197.60828 7925.9
+1198.16882 3352.8
+1198.61047 4812.1
+1199.60608 1993.1
+1208.63269 19101.9
+1209.63574 12576.7
+1210.63452 5009.9
+1221.51318 956.8
+1248.63330 855.7
+1265.65503 5786.8
+1266.67798 25456.7
+1267.68103 18229.8
+1268.68311 9378.6
+1269.68225 2512.8
+1272.72388 2662.5
+1273.72900 2540.5
+1276.67017 1082.2
+1277.65295 1237.7
+1282.67053 944.4
+1294.65820 947.3
+1303.71301 957.9
+1310.66260 2868.0
+1311.65649 2113.2
+1312.65588 1245.8
+1320.73560 985.3
+1334.67725 3354.6
+1335.68164 2570.2
+1336.68066 1056.5
+1339.09106 735.7
+1345.72852 2794.5
+1346.71765 5086.4
+1347.71570 3314.4
+1358.57117 3258.6
+1359.57910 2389.1
+1359.74768 1120.1
+1360.66711 2010.5
+1361.10278 1304.3
+1361.65857 2030.1
+1362.07703 1000.3
+1362.67639 1347.9
+1363.73157 236014.2
+1364.73425 198506.8
+1365.73560 96190.8
+1366.73828 35564.2
+1367.36597 1146.5
+1367.73694 9079.0
+1368.74731 2183.8
+1369.07483 1249.2
+1369.77405 746.9
+1397.67212 1591.0
+1398.68005 1141.7
+1407.66064 863.6
+1408.67017 2323.8
+1409.65503 2530.8
+1410.65649 1282.6
+1420.76343 2671.3
+1421.76782 1391.4
+1423.75183 3824.5
+1424.75610 2782.1
+1425.67834 13890.8
+1426.68457 11668.7
+1427.68921 6047.4
+1428.69128 2496.3
+1432.76050 4353.8
+1433.75098 4465.4
+1434.75757 2945.0
+1435.75989 1879.4
+1447.76221 9718.3
+1448.76086 7382.6
+1449.76758 3199.9
+1450.76392 65698.2
+1451.76624 56365.4
+1452.76843 30196.8
+1453.76941 10501.4
+1454.77319 2662.3
+1457.72034 5734.9
+1458.73022 5334.6
+1459.73120 1820.0
+1460.72620 1277.2
+1487.62012 3838.2
+1488.62781 2674.0
+1492.75464 1546.7
+1493.76794 1661.3
+1510.77612 12707.0
+1511.77563 11117.7
+1512.77698 5254.4
+1513.78015 2497.3
+1520.75696 5111.4
+1521.75354 6544.8
+1522.75647 4015.7
+1523.76050 2319.8
+1538.76904 89613.6
+1539.77185 73083.3
+1540.77319 34863.5
+1541.77747 13703.0
+1542.78455 4094.9
+1543.80347 848.9
+1563.84619 5144.5
+1564.84644 5120.3
+1565.84851 1850.9
+1566.81628 1173.1
+1600.70447 1625.8
+1601.70422 2559.5
+1602.70776 819.7
+1635.82935 2731.4
+1636.82605 3370.4
+1637.81421 1637.4
+1678.87817 4363.5
+1679.87988 4389.9
+1680.88684 2736.3
+1728.76501 2225.0
+1729.75220 1389.4
+1730.76379 1515.9
+1750.88611 1136.1
+1751.89490 1198.4
+1878.65637 957.2
+1879.09241 1943.9
+1879.47717 18429.2
+1879.87793 2717.5
+1880.35815 1431.7
+1907.04602 7610.6
+1930.50500 877.8
+1978.30249 739.2
+S	2503	2503	953.2148246
+Z	3	2856.369
+Z	2	1904.582
+289.49402 597.6
+298.66867 568.1
+342.24933 632.1
+358.85648 744.5
+364.71240 610.7
+369.22397 754.6
+383.13187 717.7
+398.22946 709.1
+414.16449 616.3
+425.86142 616.0
+482.62469 733.4
+505.22351 628.3
+532.55731 1745.5
+617.93726 711.7
+676.63086 832.1
+760.36774 646.7
+783.42535 1110.7
+795.68219 1046.7
+834.22363 617.0
+835.30511 619.7
+892.46405 1364.7
+896.48773 703.7
+896.98059 2210.0
+897.48218 2834.2
+897.97345 1012.8
+903.44879 13165.4
+904.45203 11257.4
+905.45227 3908.0
+924.63123 623.2
+945.25775 634.1
+987.53680 889.1
+1004.53876 3967.5
+1005.54291 3854.4
+1006.54187 1709.5
+1016.53137 3566.2
+1017.53705 5212.8
+1018.53552 1862.0
+1153.59338 3915.8
+1154.59070 5451.1
+1155.59497 3122.9
+1198.24548 2901.8
+1266.66809 829.4
+1267.66406 1001.2
+1277.66150 665.6
+1363.72876 4105.9
+1364.73047 12014.6
+1365.73108 9081.6
+1366.72546 1174.4
+1434.51379 832.3
+1450.20410 606.0
+1451.75549 2313.9
+1452.76099 2303.9
+1511.78174 861.4
+1521.75452 858.7
+1523.81665 826.0
+1538.75684 1970.6
+1539.76892 4679.9
+1540.76904 4932.0
+1541.77600 1410.3
+1619.27100 829.1
+1621.17090 628.8
+1834.50281 552.3
+1837.17944 651.3
+1876.21814 872.2
+1878.49841 599.1
+1878.76611 1291.1
+1879.06982 2081.4
+1879.50049 19573.0
+1879.79700 2841.4
+1879.94177 2250.1
+1907.04700 7280.6
+1930.47424 730.5
+S	2505	2505	1879.99924127
+Z	2	3758.151
+Z	3	5636.722
+522.96204 588.2
+532.51343 1698.6
+719.08905 558.2
+759.82721 656.8
+795.70068 779.0
+1198.14966 3443.4
+1376.62183 605.7
+1525.47888 1259.3
+1696.54724 696.4
+1733.00183 715.3
+1741.27307 655.1
+1869.96033 657.3
+1878.98767 3612.1
+1879.55713 18972.3
+1879.84741 3177.3
+1880.21741 1976.4
+1880.69275 1104.7
+1881.18140 902.0
+1906.93701 7314.2
+1918.94397 1260.1
+1931.35217 633.7
+1981.97144 723.8
+S	2506	2506	1907.44099127
+Z	2	3813.034
+Z	3	5719.048
+532.51288 2077.2
+542.25452 587.8
+581.24493 676.9
+611.50598 699.7
+642.23682 627.7
+676.66095 876.6
+732.76617 685.7
+795.68365 812.3
+977.54169 623.5
+1020.82513 771.4
+1095.52539 770.6
+1131.05957 685.7
+1187.93762 951.5
+1198.14099 3257.4
+1279.36340 706.5
+1466.79761 673.6
+1563.85046 2254.0
+1564.84888 1181.0
+1776.94702 825.1
+1812.96631 639.6
+1878.77588 690.5
+1879.59241 19899.5
+1880.11609 676.7
+1907.06873 7321.3
+1918.92041 683.6
+S	2507	2507	1198.65499127
+Z	3	3592.69
+Z	2	2395.462
+319.77097 615.1
+324.95514 655.6
+327.29865 511.4
+336.06528 651.4
+381.38452 891.1
+389.95294 676.2
+405.43903 637.4
+427.56821 629.0
+432.21445 676.1
+449.78992 661.7
+482.67880 653.0
+506.87350 650.1
+513.82483 606.0
+532.52448 1935.3
+599.23120 582.1
+676.65295 996.2
+743.16400 671.2
+745.44550 891.4
+795.68738 955.6
+857.13678 680.6
+900.98071 668.2
+953.99286 1143.3
+954.49445 1413.8
+1019.70605 723.3
+1048.44714 881.5
+1065.47729 2409.8
+1066.47668 971.8
+1067.48071 735.8
+1178.56116 1501.1
+1179.54712 1854.6
+1180.55688 1471.0
+1198.17578 3156.3
+1290.01221 845.0
+1330.49670 667.0
+1404.82800 600.0
+1408.08569 713.2
+1489.58447 737.5
+1525.50562 1091.6
+1629.10693 669.6
+1680.85889 1966.2
+1681.85498 1907.0
+1682.86853 1473.8
+1683.84924 749.0
+1791.06836 686.9
+1870.17725 798.3
+1878.76868 854.3
+1879.16272 2933.2
+1879.58203 19478.0
+1879.87585 2239.8
+1880.19153 1065.3
+1880.43762 1624.9
+1882.10986 824.4
+1907.14111 7206.4
+1930.72070 1282.8
+S	2509	2509	1879.96799127
+Z	3	5636.629
+Z	2	3758.088
+532.47302 2062.7
+557.04962 605.0
+558.69910 893.2
+601.32434 625.5
+630.40173 747.5
+676.65131 1070.2
+684.54895 619.1
+725.18878 702.3
+731.11725 799.6
+795.69110 993.7
+871.83710 707.5
+952.93628 607.9
+978.97217 738.4
+1100.12561 616.3
+1198.05176 3223.8
+1214.81714 733.8
+1280.10986 719.6
+1411.05200 662.2
+1422.69055 606.8
+1525.38831 913.6
+1820.08191 741.6
+1876.28833 822.8
+1877.78027 785.1
+1878.28076 929.0
+1878.93445 1238.4
+1879.31177 2861.3
+1879.56262 19352.4
+1880.22791 1302.4
+1907.04431 7240.1
+1907.36670 730.7
+1918.93982 971.6
+1930.57593 1095.3
+S	2510	2510	1191.2918246
+Z	4	4761.136
+330.97348 603.7
+332.98868 678.6
+342.29742 779.1
+389.18195 3886.2
+390.18713 932.1
+460.25574 759.6
+482.86044 720.4
+488.24863 2724.5
+532.54730 2010.3
+544.22559 846.7
+549.19507 831.6
+580.59253 641.6
+586.55237 807.0
+596.67975 695.2
+622.20190 3499.8
+623.20886 717.9
+630.06696 581.0
+630.10187 573.2
+639.01251 695.0
+639.68011 613.0
+670.35620 1687.9
+676.63470 720.9
+687.29486 938.0
+688.36554 717.3
+759.26190 4399.2
+760.26361 1610.9
+765.76947 689.2
+794.83722 775.5
+795.68610 1368.5
+802.40643 915.4
+830.29871 5311.5
+831.29865 2153.0
+832.30414 1176.5
+851.36426 1835.4
+851.86731 1541.5
+901.33649 4638.2
+902.33856 2299.5
+908.40576 1001.7
+970.34961 795.5
+973.25592 652.7
+988.36865 12476.4
+989.36981 5589.3
+990.36530 3506.4
+991.37238 776.2
+1053.81348 608.4
+1055.46887 661.5
+1058.95129 683.5
+1064.98901 1930.0
+1065.48645 3213.8
+1065.98145 1503.5
+1066.48120 1053.0
+1070.41235 690.2
+1079.36353 607.7
+1087.43530 14338.7
+1087.98376 974.5
+1088.43970 7787.7
+1089.43689 4630.0
+1090.42834 1749.3
+1091.81128 779.4
+1100.99475 1280.0
+1108.46667 973.9
+1108.74231 688.5
+1109.24231 1253.4
+1112.49890 2370.8
+1112.74731 1677.9
+1113.49255 1188.1
+1114.48804 928.6
+1115.76282 675.2
+1116.75562 819.7
+1117.00525 1500.8
+1117.75696 700.7
+1118.23401 752.9
+1121.26135 1314.9
+1121.49023 831.0
+1122.48706 1104.8
+1123.24731 1392.5
+1123.74756 2377.6
+1123.99634 1401.4
+1124.50208 1245.9
+1125.47595 697.5
+1125.75574 1388.9
+1126.25476 1107.3
+1126.74829 1746.9
+1126.98682 1244.7
+1128.74011 901.1
+1128.98987 1299.9
+1129.24268 2017.2
+1129.49072 2318.0
+1129.74377 1475.2
+1129.99231 840.2
+1132.22717 1014.1
+1133.00012 4421.4
+1133.24829 5109.9
+1133.49731 5550.9
+1133.74890 2780.1
+1133.99377 3282.2
+1134.24182 2041.2
+1134.49341 1876.0
+1136.26501 862.5
+1136.50452 1703.7
+1136.74915 1488.9
+1136.99915 1167.6
+1137.25635 4952.5
+1137.50232 10696.1
+1137.75073 15047.6
+1138.00171 16652.7
+1138.25110 8086.1
+1138.50061 5275.3
+1138.75159 3721.1
+1139.00281 1031.2
+1139.26318 814.8
+1139.53149 1138.8
+1139.88599 792.8
+1140.26477 1221.6
+1140.50830 2868.1
+1140.76343 4202.8
+1141.01208 3189.1
+1141.26758 2954.5
+1141.51257 2261.3
+1141.76746 1773.2
+1142.51331 1244.2
+1146.49402 860.8
+1150.25366 933.2
+1151.26343 739.8
+1152.51428 1212.6
+1153.00293 844.9
+1153.51160 1031.7
+1153.77161 1829.4
+1154.01440 794.4
+1154.51978 1211.0
+1154.77881 967.1
+1155.27405 1015.0
+1155.52954 856.8
+1156.76831 740.9
+1157.00024 1461.9
+1157.26917 1497.1
+1157.51013 1841.1
+1157.76208 2733.7
+1158.01355 2340.1
+1158.25879 1709.0
+1158.50757 1510.2
+1158.78247 1348.4
+1159.02136 1639.9
+1159.46570 651.7
+1161.51575 3171.7
+1161.76880 5034.7
+1162.01782 4673.3
+1162.27100 3123.1
+1162.52234 3373.5
+1162.76648 2946.7
+1163.02087 1418.9
+1163.26721 1126.2
+1163.51257 1038.9
+1165.52319 1875.5
+1165.77100 4896.3
+1166.02368 3705.2
+1166.27124 4823.4
+1166.51990 3315.6
+1166.77307 2441.5
+1167.01660 1212.8
+1167.25488 1596.9
+1193.21704 655.1
+1198.22278 3040.9
+1204.81482 649.3
+1246.58569 943.1
+1253.56335 1042.1
+1258.56018 851.0
+1276.54980 760.8
+1281.54749 1249.7
+1282.55908 841.1
+1282.89246 739.6
+1287.54468 915.9
+1290.90125 994.4
+1291.24341 1611.2
+1305.57251 919.0
+1313.55762 988.8
+1313.90173 984.0
+1314.56079 1911.4
+1314.91638 1532.1
+1317.55188 710.7
+1319.90295 1921.8
+1320.24255 3619.3
+1320.58435 2160.9
+1320.91052 2765.8
+1324.92737 985.1
+1325.25623 879.3
+1326.22351 767.6
+1339.56714 1016.0
+1341.57385 819.0
+1342.58154 1230.6
+1342.90808 893.1
+1343.24670 874.6
+1344.09204 1060.9
+1346.58582 1252.8
+1347.91162 1124.3
+1348.24609 699.1
+1348.58325 1257.7
+1348.92249 876.9
+1352.26489 1420.3
+1352.59961 2489.9
+1352.92651 1115.1
+1353.25427 1713.9
+1353.92346 2074.2
+1354.23999 1010.2
+1354.57910 1628.2
+1355.59497 1033.3
+1356.92981 716.2
+1357.59900 1199.3
+1357.93298 2739.6
+1358.26355 4260.4
+1358.59180 3297.0
+1358.92810 1720.8
+1359.26196 1474.8
+1359.57141 774.1
+1368.24036 716.4
+1372.58606 4806.6
+1372.92480 890.7
+1373.21399 753.5
+1373.59106 3842.3
+1374.58679 2768.9
+1375.59998 1981.8
+1378.28198 966.4
+1378.59460 730.1
+1379.90942 787.0
+1381.29138 1479.7
+1381.93298 1114.2
+1384.61743 812.9
+1384.94800 1054.0
+1385.26794 1590.7
+1385.60852 1542.5
+1385.95752 1146.6
+1386.26477 1085.0
+1386.59802 1152.4
+1386.93494 865.1
+1387.27905 2248.6
+1387.60840 2247.5
+1387.94775 1025.4
+1389.94629 2220.4
+1390.28442 3282.1
+1390.61877 3993.0
+1390.94714 2964.9
+1391.28809 1848.9
+1391.61389 2117.2
+1392.26794 743.2
+1393.65540 902.2
+1395.63464 1088.3
+1395.95972 1907.4
+1396.28369 1221.5
+1396.61121 1424.5
+1396.94116 979.0
+1400.94177 740.0
+1404.27954 766.7
+1405.93909 684.3
+1406.60608 767.7
+1407.24866 859.6
+1407.94592 1086.2
+1409.96973 953.2
+1410.29480 890.9
+1412.29260 1033.4
+1412.95422 1619.9
+1413.29260 1651.6
+1413.62231 1796.4
+1413.95239 1383.2
+1414.63074 1402.1
+1415.23596 881.3
+1415.63940 1136.2
+1415.98962 882.1
+1417.62561 1409.5
+1418.26892 867.3
+1418.62805 2868.3
+1418.96558 3886.7
+1419.29346 4094.6
+1419.63220 4777.8
+1419.97034 1970.7
+1420.63904 1248.5
+1420.96570 971.9
+1423.64136 1026.6
+1423.95862 2898.9
+1424.29980 5738.8
+1424.63171 8134.8
+1424.96826 10092.1
+1425.30139 8095.2
+1425.63354 4508.7
+1425.97070 2648.3
+1426.30542 1369.9
+1426.64368 1161.3
+1429.64197 899.1
+1433.63782 909.6
+1439.64917 911.8
+1439.99072 1427.7
+1440.64429 1406.6
+1445.97888 983.3
+1446.31982 1743.7
+1446.63757 790.8
+1449.62354 1080.3
+1450.19763 695.8
+1451.65283 1206.8
+1451.99304 2210.2
+1452.30725 1614.9
+1452.64893 941.6
+1457.65320 2631.0
+1457.98621 3609.9
+1458.32446 4195.9
+1458.64868 1743.4
+1458.99438 1945.4
+1459.31958 929.2
+1459.65894 1463.9
+1462.27002 682.7
+1464.17236 945.3
+1464.66846 1627.9
+1474.31689 1007.8
+1474.64148 988.6
+1476.97974 1767.0
+1477.31763 994.7
+1477.67395 1189.5
+1478.31616 1328.0
+1478.99524 1265.5
+1479.31775 939.5
+1479.65137 1056.9
+1482.32239 1791.0
+1482.66040 2568.4
+1482.99463 3866.3
+1483.33142 2005.7
+1483.65759 2521.6
+1484.31763 1235.7
+1484.65527 797.9
+1485.68530 751.5
+1488.65735 1279.4
+1489.00378 1253.4
+1489.33435 879.1
+1489.69409 831.9
+1490.02722 857.5
+1494.67529 2027.9
+1495.02637 1656.4
+1495.33337 1511.7
+1495.66504 1618.9
+1497.65320 1451.7
+1499.33777 1281.3
+1500.64941 1032.9
+1501.66028 1005.4
+1505.98083 986.8
+1506.31567 854.1
+1508.66943 833.6
+1510.32190 1710.6
+1510.66345 2943.5
+1510.99573 3910.9
+1511.32703 3176.7
+1511.67297 2536.7
+1511.99646 2501.9
+1512.28882 1566.6
+1514.68835 1135.5
+1515.99609 3954.5
+1516.33289 11219.3
+1516.66418 18418.9
+1517.00061 14321.7
+1517.33191 13058.9
+1517.67041 8438.8
+1517.99768 5230.5
+1518.32178 1640.4
+1518.68494 1128.7
+1520.70520 2304.8
+1521.05017 1194.7
+1521.20386 1601.2
+1523.68323 792.9
+1525.51904 908.7
+1529.01379 731.1
+1529.69556 1065.5
+1530.06628 684.9
+1530.21423 1171.1
+1538.67102 1041.8
+1543.67432 1210.7
+1549.32971 1052.0
+1549.69348 2364.5
+1550.02002 1649.2
+1550.35498 1454.6
+1550.68774 1758.5
+1587.66931 1323.6
+1588.16711 701.7
+1588.68738 941.0
+1590.71106 792.2
+1593.71936 976.5
+1677.26953 981.8
+1683.73877 801.4
+1685.26111 1699.2
+1685.78406 1966.7
+1686.25342 1434.1
+1686.77307 972.6
+1694.76587 1215.6
+1701.70251 1646.7
+1702.71667 1427.7
+1703.70813 1086.9
+1708.27368 1444.3
+1708.80408 1479.9
+1757.81165 862.8
+1776.90747 688.0
+1814.76428 757.3
+1829.78711 1170.1
+1877.98767 1119.9
+1879.18225 1118.3
+1879.50757 19869.5
+1907.09277 7306.8
+1930.74512 1102.2
+S	2511	2511	1907.50624127
+Z	2	3813.165
+Z	3	5719.243
+532.51416 1787.7
+533.47119 557.4
+606.08075 591.1
+613.01532 571.4
+658.82214 635.1
+676.66534 1253.5
+676.87128 639.5
+710.01184 663.8
+731.14587 910.8
+823.89270 688.2
+974.76318 653.8
+981.92828 671.6
+1004.53589 836.2
+1082.55432 678.4
+1116.63733 675.0
+1198.15808 2998.2
+1205.66150 637.3
+1268.08948 601.6
+1363.70398 955.4
+1425.68030 1110.6
+1450.75757 1486.7
+1472.82190 885.5
+1510.77405 902.3
+1533.85364 822.5
+1538.75916 1361.1
+1545.82959 2383.1
+1546.83667 2054.4
+1563.84180 27886.5
+1564.84741 18145.7
+1565.84131 2686.8
+1661.84387 789.1
+1774.95911 862.0
+1775.92456 789.3
+1776.88672 609.6
+1791.95386 11436.5
+1792.95618 10669.1
+1793.95740 2979.8
+1798.94128 635.3
+1815.98547 1034.3
+1816.98169 1078.4
+1845.95740 829.8
+1846.94104 1439.3
+1847.97913 1199.9
+1860.04065 876.8
+1860.54749 624.4
+1871.94116 1186.4
+1872.93542 1835.1
+1877.51025 777.7
+1878.01929 666.6
+1878.51135 740.5
+1878.74451 938.7
+1879.09106 1730.0
+1879.58301 19430.7
+1880.09021 1085.2
+1880.39771 679.4
+1880.58997 718.6
+1880.75134 650.7
+1881.17175 909.5
+1881.84436 826.0
+1907.04663 7345.9
+1927.91919 751.1
+1930.65784 1056.5
+S	2513	2513	1190.5455796
+Z	4	4758.15102
+336.09683 8690.7
+369.40109 8914.3
+376.09888 8997.7
+376.27707 9929.6
+386.18192 9641.2
+427.58951 10331.5
+455.37692 8943.8
+459.76486 9087.7
+532.51538 26052.0
+551.20648 9832.4
+555.45001 9107.8
+563.87219 12862.4
+630.47583 11720.0
+644.19922 9298.8
+644.65503 9016.5
+676.65594 11860.4
+686.95618 12432.7
+731.20264 13128.4
+782.10419 12487.9
+795.68915 16377.4
+955.95807 9916.6
+1060.69519 9210.6
+1137.51343 12035.4
+1198.14844 53338.9
+1247.35437 9376.0
+1360.24744 10283.3
+1404.11377 10304.3
+1425.00159 10671.9
+1453.22302 9114.0
+1511.81152 9357.0
+1516.67627 10587.9
+1681.08252 10727.9
+1719.80896 9880.6
+1749.81641 10428.1
+1761.67639 9865.1
+1787.91748 9651.9
+1842.48035 8439.8
+1878.57495 14782.4
+1879.28699 32321.5
+1879.57446 298118.3
+1880.27490 12281.4
+1902.16040 11213.6
+1907.05005 116455.4
+1930.78967 13378.5
+1943.76794 10363.9
+S	2514	2514	1879.97640793
+Z	2	3758.105
+Z	3	5636.654
+516.59705 612.1
+518.51001 676.0
+532.47748 1820.7
+579.11084 605.9
+630.43042 822.2
+639.35040 627.1
+676.66187 666.7
+750.33160 638.5
+771.29047 607.7
+795.69257 1018.8
+962.75934 764.7
+977.83948 732.3
+1019.66669 786.8
+1198.06189 2995.4
+1284.65442 623.8
+1501.54993 575.7
+1648.75745 687.5
+1876.09802 673.0
+1878.58691 960.6
+1879.31189 4461.0
+1879.58643 18376.8
+1895.01953 655.1
+1907.06860 7568.2
+1907.36829 808.6
+1907.52686 844.7
+1930.68140 1323.5
+S	2515	2515	1191.7983246
+Z	4	4763.162
+352.89325 593.1
+353.75610 821.5
+380.70731 728.2
+389.18225 5028.8
+390.18491 805.3
+454.61627 630.6
+473.35529 753.2
+476.09872 732.2
+483.56836 675.4
+488.25082 2354.5
+489.25430 734.0
+494.68726 1053.4
+497.32916 593.7
+513.88910 518.9
+532.46765 1993.9
+549.19171 852.9
+556.06018 643.8
+579.46381 628.8
+622.20117 3643.0
+623.20667 1004.6
+670.35547 1908.3
+676.66089 1277.8
+682.78143 610.1
+686.79730 1394.0
+759.26117 5353.0
+760.26624 2005.1
+761.25708 1028.9
+763.40332 588.4
+790.92401 621.8
+794.33447 1069.5
+802.41040 975.9
+830.29907 6158.9
+831.30511 3137.5
+832.29651 957.1
+842.26288 937.7
+851.36200 2638.4
+852.36542 1040.7
+876.25024 646.4
+877.32190 714.8
+901.33569 5629.2
+902.33966 2635.7
+906.32001 671.7
+908.40857 1108.6
+964.44891 1118.7
+964.96472 899.8
+970.35266 720.0
+988.36700 16525.4
+989.36951 8547.0
+990.37097 3493.2
+991.38306 1154.0
+1007.95569 881.9
+1021.20410 708.1
+1036.47388 868.8
+1036.97656 1056.7
+1037.46155 723.1
+1040.39661 926.2
+1041.13879 567.2
+1048.17908 710.9
+1057.27246 786.6
+1063.98120 750.7
+1064.46448 684.4
+1064.98987 3361.5
+1065.48669 2461.7
+1065.98340 2261.8
+1066.48926 948.4
+1068.72314 892.6
+1071.44580 797.7
+1083.49548 828.1
+1087.43530 16484.0
+1088.43713 8307.9
+1089.43750 4583.6
+1090.42725 1087.9
+1093.98767 983.0
+1100.98914 905.5
+1104.73535 676.0
+1104.98608 827.9
+1108.24451 1598.1
+1108.74646 1207.6
+1109.47229 867.0
+1111.98645 826.3
+1112.24207 1457.4
+1112.49536 2469.2
+1112.75330 998.0
+1112.98914 818.9
+1113.23926 1193.1
+1113.50305 763.6
+1114.21411 950.8
+1115.49854 871.3
+1115.77966 1043.3
+1116.22754 611.5
+1116.75391 1866.5
+1117.00171 930.5
+1117.50049 1470.5
+1118.50415 1051.8
+1118.74463 1106.8
+1119.24048 896.3
+1119.75916 747.2
+1120.52368 713.0
+1121.51013 1513.6
+1121.99219 1009.5
+1122.22827 778.4
+1122.73669 786.1
+1122.99451 1082.8
+1123.23828 1450.2
+1123.49377 2303.4
+1123.99536 1474.2
+1124.47839 1288.3
+1124.73804 1362.1
+1124.99426 1699.9
+1125.76331 1468.0
+1126.01538 1454.2
+1126.50647 2012.3
+1126.98108 899.0
+1127.48682 803.6
+1128.73938 1789.7
+1128.99194 1620.9
+1129.24597 1744.3
+1129.49243 2137.1
+1129.74390 1456.7
+1129.99512 793.6
+1132.75195 1854.5
+1132.99780 4177.3
+1133.24902 4559.0
+1133.49756 5745.0
+1133.74927 5959.2
+1134.00122 2013.6
+1134.25757 1117.3
+1134.50452 1211.0
+1136.26062 1886.0
+1136.50171 1168.3
+1136.75647 2220.2
+1137.02271 919.2
+1137.25330 5057.3
+1137.50061 12561.3
+1137.75208 15649.4
+1138.00317 15835.2
+1138.25061 9439.3
+1138.50110 6613.0
+1138.75317 2728.0
+1139.00208 1638.3
+1140.26453 1109.7
+1140.52173 2894.1
+1140.75830 2976.7
+1141.01404 2885.0
+1141.26514 4399.9
+1141.50940 1803.6
+1141.75720 1423.7
+1148.50659 1040.1
+1148.99487 894.6
+1149.49475 879.0
+1150.26965 1300.6
+1151.25940 1055.9
+1151.51526 1568.6
+1152.26099 1044.6
+1153.25732 1383.9
+1153.51575 874.7
+1153.77893 1376.4
+1154.00684 1811.4
+1154.25818 1239.5
+1154.51831 1352.9
+1154.77332 1235.0
+1155.02441 1951.7
+1155.26758 1775.9
+1155.53186 1675.6
+1156.76965 872.4
+1157.01648 1655.2
+1157.26990 1812.3
+1157.51538 2946.6
+1157.76379 3179.4
+1158.01929 3754.1
+1158.26294 2910.1
+1158.51892 3082.0
+1158.76990 1691.5
+1159.02258 1667.9
+1161.26563 3159.2
+1161.51941 3049.8
+1161.76941 4019.2
+1162.02051 5576.4
+1162.26660 6179.9
+1162.52417 2942.1
+1162.76733 4086.3
+1163.01843 2071.4
+1163.25854 1844.2
+1163.53613 1073.7
+1164.53467 894.8
+1164.76758 1246.3
+1165.52185 2165.6
+1165.77185 5448.4
+1166.02356 4753.7
+1166.27222 5792.3
+1166.51978 4859.4
+1166.76758 3199.0
+1167.03149 1669.9
+1167.27136 1025.7
+1169.02368 738.6
+1188.29333 987.4
+1198.05115 3366.4
+1237.51892 707.6
+1246.58765 1218.9
+1249.52759 812.1
+1249.87012 929.1
+1273.55957 997.2
+1281.20435 1011.5
+1282.24500 935.4
+1285.56018 1572.7
+1288.55933 930.7
+1290.91016 1831.5
+1291.23450 1953.9
+1291.56689 1593.7
+1291.90857 1323.4
+1308.90088 894.1
+1310.25659 1027.4
+1310.57520 1074.2
+1313.92090 1627.2
+1314.23523 1943.7
+1314.57251 1187.7
+1314.90527 1663.1
+1316.23975 1112.6
+1319.20862 954.2
+1319.58142 1647.1
+1319.91321 2302.6
+1320.24951 2591.5
+1320.58154 2081.4
+1320.90918 1667.9
+1321.26086 1641.3
+1321.62268 804.7
+1323.89575 686.6
+1324.55872 1502.6
+1325.23535 1104.3
+1325.57422 817.4
+1329.56360 875.1
+1339.58521 748.2
+1341.58032 828.6
+1342.10059 751.0
+1343.60022 1244.1
+1345.24829 804.3
+1346.58093 1646.5
+1346.91260 1802.7
+1347.58862 1322.0
+1347.91138 1607.0
+1348.25281 1231.8
+1348.58582 1525.1
+1348.92041 1316.5
+1351.57532 756.6
+1351.92151 1301.5
+1352.24841 2622.8
+1352.59692 2064.2
+1352.93152 2755.1
+1353.25598 1141.6
+1353.59424 2289.0
+1353.93701 1564.1
+1354.23706 1540.8
+1354.58203 1761.1
+1355.57056 834.6
+1357.26208 1026.4
+1357.59216 1911.6
+1357.94043 4453.1
+1358.26233 3905.2
+1358.59741 5397.3
+1358.94373 2805.1
+1359.26416 1821.9
+1364.60535 856.4
+1366.27161 725.2
+1368.61792 1171.1
+1369.60303 1002.2
+1370.66809 740.9
+1372.28125 818.7
+1372.58582 6410.5
+1373.58423 4916.1
+1374.58716 2943.9
+1375.59778 1716.1
+1376.59827 1181.4
+1379.26575 1007.7
+1380.93286 1132.5
+1381.28052 1302.3
+1381.60022 2023.9
+1381.94092 1740.3
+1384.61060 1643.9
+1384.91833 989.3
+1385.60400 1167.2
+1386.60596 1655.9
+1386.94519 1158.4
+1387.27185 1725.5
+1387.95337 808.2
+1388.93262 895.8
+1389.60999 1113.6
+1389.95093 1474.4
+1390.28955 2664.7
+1390.61719 4002.8
+1390.95215 3482.2
+1391.28284 2644.1
+1391.61462 2003.8
+1391.95227 1877.3
+1392.28027 1057.9
+1393.65137 961.2
+1395.63489 1491.9
+1395.95911 1459.5
+1396.28711 2331.0
+1396.60730 892.1
+1396.95325 780.6
+1397.25427 703.0
+1401.25122 676.8
+1402.26843 1082.2
+1403.94641 1168.0
+1406.58850 775.8
+1407.29675 1579.1
+1407.62939 2443.2
+1407.93933 1353.7
+1409.97021 1165.8
+1410.29468 1950.4
+1410.95850 1138.5
+1411.96155 1011.6
+1412.27539 1365.5
+1412.62451 2204.1
+1412.95862 1269.3
+1413.29089 2206.4
+1413.62134 2638.7
+1413.95984 1630.1
+1414.29004 1145.7
+1414.62183 1012.6
+1414.95850 1025.9
+1415.29016 1164.2
+1415.63647 1974.2
+1418.29199 2015.9
+1418.63037 4688.7
+1418.96582 6775.5
+1419.29492 5617.7
+1419.63184 4402.6
+1419.96533 2308.7
+1420.29883 1764.7
+1420.62915 972.2
+1423.20789 719.0
+1423.62317 2020.8
+1423.96033 2676.9
+1424.29712 5391.2
+1424.63477 9688.7
+1424.96692 10571.8
+1425.30151 8000.4
+1425.63831 5719.7
+1425.97363 2647.6
+1432.23486 680.2
+1433.64648 1118.5
+1439.27832 1183.4
+1439.62634 1027.5
+1440.30835 1447.8
+1440.62549 930.0
+1440.98254 1053.5
+1442.67151 910.1
+1445.30017 929.4
+1445.65796 1684.2
+1445.99915 1162.0
+1446.64050 910.6
+1450.25891 947.9
+1451.29138 1067.0
+1451.64941 2580.2
+1451.99390 1781.6
+1452.32397 3832.3
+1452.65808 2274.5
+1452.98865 1751.4
+1456.65173 1110.2
+1457.30298 1167.4
+1457.65967 3988.4
+1458.00110 3213.4
+1458.32617 4379.9
+1458.65723 3134.4
+1458.98901 1637.4
+1463.66711 1079.3
+1464.67737 1521.1
+1465.14941 1257.8
+1467.99207 978.3
+1471.66052 1081.7
+1476.67542 889.7
+1477.33936 1117.7
+1477.67249 1302.8
+1478.00671 883.0
+1478.31567 1750.1
+1478.64307 1588.6
+1479.65503 1372.3
+1481.98376 1343.9
+1482.32458 1830.8
+1482.66052 3442.5
+1482.99805 3517.2
+1483.32422 2985.0
+1483.66699 1544.6
+1483.99255 1101.9
+1488.99976 1163.5
+1489.32800 839.4
+1489.66968 1140.2
+1489.98987 1494.5
+1490.67920 1042.6
+1494.65759 1935.8
+1495.00793 2714.4
+1495.34766 1400.3
+1495.65442 1211.5
+1496.00110 1149.3
+1500.30676 1245.7
+1500.67847 1997.7
+1501.36169 1207.7
+1501.64526 1043.8
+1504.99731 953.2
+1506.31299 800.1
+1510.33252 2118.8
+1510.66443 2921.9
+1510.99646 4383.9
+1511.32813 2835.2
+1511.67053 3708.1
+1511.99219 1905.0
+1512.29248 1509.3
+1512.66553 1273.5
+1515.99390 3649.0
+1516.33252 13130.1
+1516.66553 15192.5
+1517.00049 12915.6
+1517.33142 11963.1
+1517.66760 5670.7
+1518.01221 4203.9
+1518.66956 1236.4
+1520.69470 2365.2
+1521.24341 1540.8
+1521.72485 1553.7
+1529.71509 1436.3
+1544.02478 910.4
+1544.34644 1257.3
+1548.68652 857.2
+1549.02075 1346.5
+1549.35217 1864.4
+1549.69226 1896.7
+1550.03809 1746.8
+1554.71228 886.3
+1578.23474 996.8
+1586.71228 1055.6
+1587.66418 1114.7
+1668.75464 956.0
+1676.26233 871.6
+1676.76685 1004.1
+1677.25732 1610.0
+1684.24854 1015.0
+1685.26807 1805.6
+1685.77881 1544.4
+1686.27380 1553.8
+1686.78467 1079.1
+1693.80273 908.3
+1694.30457 1298.8
+1694.76831 1614.3
+1695.29773 857.4
+1701.71741 2219.8
+1702.71265 1799.0
+1703.70166 1242.2
+1707.77478 1123.0
+1708.30432 1984.9
+1708.79150 887.8
+1757.25366 859.9
+1830.29626 825.5
+1879.08020 1016.1
+1879.59558 19216.9
+1880.77576 801.9
+1907.05994 7636.4
+S	2517	2517	1880.06199127
+Z	3	5636.911
+Z	2	3758.276
+532.45868 2032.0
+596.10699 798.5
+628.15137 573.2
+630.46808 755.7
+637.90729 685.4
+676.63757 1030.4
+760.28900 582.9
+778.45245 697.2
+781.44641 592.6
+790.04919 593.7
+816.22626 605.9
+884.26270 662.3
+928.87018 658.0
+937.86273 664.7
+1057.25354 778.3
+1188.38074 642.4
+1198.01880 3734.9
+1341.47815 728.5
+1391.74792 753.0
+1397.00049 665.1
+1655.95691 669.1
+1667.25415 646.7
+1877.25061 598.0
+1878.21924 767.1
+1878.86462 692.1
+1879.23071 1291.9
+1879.53430 19821.2
+1907.09106 7252.4
+1907.49438 919.0
+1908.03699 802.8
+1912.19434 631.4
+1930.75073 1147.0
+S	2518	2518	1907.51699127
+Z	3	5719.276
+Z	2	3813.186
+532.45801 1688.8
+560.60919 657.6
+598.36591 728.9
+630.44135 799.4
+671.02045 575.1
+676.64270 1014.1
+690.83203 641.6
+698.08850 613.1
+731.17023 696.5
+751.55457 545.4
+781.64117 683.8
+795.68756 798.3
+901.15515 577.2
+986.10834 635.5
+1051.86719 607.5
+1057.25891 806.5
+1116.96436 625.9
+1136.89465 580.6
+1160.36401 625.8
+1164.83899 663.2
+1188.37683 847.4
+1196.63098 871.0
+1198.02258 3023.6
+1327.32141 598.7
+1425.68799 798.0
+1426.68665 698.3
+1433.77295 768.7
+1450.78638 1071.2
+1473.83960 938.3
+1521.74841 687.0
+1538.75818 1573.5
+1545.83960 1710.3
+1546.83154 1838.3
+1563.84253 24520.5
+1564.84680 18873.5
+1565.84155 2150.7
+1773.93945 1068.8
+1791.95398 9662.2
+1792.95630 9637.5
+1793.95813 2868.7
+1815.97998 1741.1
+1816.97205 1440.0
+1829.92944 644.9
+1846.95154 1638.5
+1870.23120 666.9
+1871.93860 1729.3
+1872.95581 1691.2
+1877.32410 755.5
+1879.19421 1645.9
+1879.54370 20172.7
+1880.02808 1663.0
+1880.90613 856.5
+1883.83325 831.3
+1906.73718 2025.2
+1907.02087 6690.9
+1909.95984 750.1
+S	2519	2519	1198.49699127
+Z	3	3592.216
+Z	2	2395.146
+340.08798 650.9
+411.44162 604.8
+427.54025 650.5
+482.65469 987.5
+503.48703 711.9
+532.47784 1547.3
+555.96759 648.7
+630.39832 883.6
+676.65906 964.3
+794.04480 622.3
+795.71014 857.9
+805.87811 598.6
+923.61572 681.5
+931.93140 652.1
+993.44885 660.0
+1039.90308 708.9
+1067.19434 575.1
+1070.68945 581.5
+1082.55334 681.3
+1130.64697 760.0
+1173.04114 761.7
+1198.07581 2946.2
+1525.39001 818.1
+1626.13843 606.9
+1860.05481 729.7
+1870.28821 834.6
+1877.94250 667.8
+1878.29749 583.8
+1878.54395 970.0
+1879.22583 1556.3
+1879.58179 20088.7
+1879.92847 1663.9
+1880.23511 1117.4
+1880.60364 1253.1
+1883.25769 806.1
+1907.00269 7117.8
+S	2521	2521	680.3672346
+Z	4	2717.43764
+185.10306 590.8
+188.26363 1271.6
+188.27809 2056.2
+188.28841 1785.8
+188.30371 1435.5
+188.31265 1641.8
+188.36467 577.8
+188.39410 595.7
+190.70161 509.0
+198.92570 991.6
+199.22092 1252.4
+199.25742 602.4
+199.30275 579.2
+199.31830 2920.7
+199.41719 1460.6
+243.07549 582.1
+244.19313 595.9
+247.04001 575.8
+273.36551 612.2
+321.84995 717.9
+324.41675 743.0
+347.84476 633.6
+367.62460 738.6
+368.22659 787.2
+369.62732 589.0
+381.33902 988.8
+415.25790 595.9
+470.26157 624.5
+480.80103 711.2
+482.63235 679.1
+519.16260 673.6
+525.15613 613.7
+532.42639 615.9
+532.48285 1237.5
+535.89081 682.2
+581.51538 585.6
+585.99457 786.1
+589.05688 572.9
+630.38275 674.5
+638.12109 610.2
+658.56586 610.4
+676.65363 970.8
+701.29272 675.1
+704.71802 618.7
+745.74268 919.3
+768.86188 864.4
+795.69611 747.0
+795.90771 721.8
+821.12811 934.4
+821.46057 1677.1
+821.78967 976.7
+970.69098 616.2
+1057.25415 581.4
+1130.48132 652.2
+1198.02942 2842.7
+1221.60950 916.5
+1229.14929 815.1
+1236.40002 818.1
+1313.08594 643.6
+1525.34204 846.2
+1551.88611 686.9
+1682.39551 713.1
+1698.43152 695.4
+1870.17383 846.5
+1877.75134 690.5
+1878.18274 969.7
+1878.59045 870.8
+1879.18225 990.4
+1879.57556 20022.6
+1879.82080 2337.9
+1881.08850 1044.6
+1906.60352 1352.5
+1906.94238 6575.7
+1907.29626 1341.8
+1930.50671 1547.8
+1993.91724 740.1
+S	2522	2522	597.787407933
+Z	2	1193.727
+Z	3	1790.087
+161.70309 1735.4
+162.00958 1920.0
+165.76561 2590.4
+173.43463 1652.2
+174.55638 1725.6
+188.20979 2440.1
+188.24471 1876.5
+188.28973 1914.4
+188.29948 1946.4
+188.30981 2237.9
+188.31575 2198.1
+188.38771 1668.7
+188.44417 1550.5
+198.43599 1839.4
+199.20863 2362.3
+199.22688 2097.9
+199.24144 1969.5
+199.27478 2309.0
+199.30652 5782.8
+199.31825 4699.3
+199.32527 3006.6
+199.33656 3488.3
+199.35910 1845.2
+199.38104 1716.6
+214.52100 1846.9
+217.04167 1725.7
+225.73726 1960.5
+233.58104 2575.8
+239.14694 2184.2
+247.02275 2000.3
+253.19119 2608.0
+286.15427 1633.8
+331.26956 1519.6
+348.80496 1845.0
+355.17484 1874.3
+367.58798 1752.6
+371.03262 1628.5
+371.22510 2795.3
+390.79865 2054.9
+399.25983 1906.2
+401.96317 1702.0
+403.16391 1821.5
+411.28424 2041.8
+427.55627 2145.2
+447.71387 2464.6
+459.27646 2312.0
+459.55569 2707.1
+460.70544 2043.4
+466.15009 1737.6
+482.67419 2166.0
+498.96246 2573.5
+527.03687 1711.9
+530.93201 14225.9
+531.26300 3514.3
+532.48218 6595.9
+533.98480 1703.9
+536.93414 8190.5
+547.33441 3653.0
+554.60889 4463.3
+577.26428 12787.0
+577.76154 2637.0
+585.73364 2485.7
+633.80426 11424.6
+676.67389 2030.2
+679.41156 1968.1
+689.32184 3972.4
+697.83478 11356.9
+702.97455 1963.9
+748.35834 35012.8
+748.85895 5816.2
+768.75726 2057.3
+780.96655 1554.1
+795.69769 3685.8
+795.89612 5426.9
+804.89984 47061.4
+805.40302 8621.3
+840.41791 6753.7
+841.49786 3392.1
+858.06781 2517.9
+885.52838 2753.2
+929.55688 2420.2
+973.58441 3003.0
+1017.60754 3181.1
+1021.20538 2033.9
+1079.41016 1742.3
+1198.08118 10858.2
+1334.21326 1936.3
+1634.62622 2227.6
+1870.12805 2697.1
+1872.97583 2490.3
+1873.61865 1741.5
+1876.08472 2530.6
+1878.09778 2589.9
+1879.33435 20946.6
+1879.60596 54198.3
+1880.56653 2136.0
+1907.04175 22448.4
+1930.64526 3599.2
+S	2523	2523	1879.94440793
+Z	2	3758.041
+Z	3	5636.558
+532.47833 2101.5
+549.19678 834.5
+630.44910 856.0
+651.77716 673.7
+676.63220 942.6
+708.68115 643.3
+753.91174 695.4
+778.60114 611.5
+786.33984 703.9
+795.69202 838.7
+826.01978 753.3
+1001.90265 784.9
+1010.28296 686.0
+1057.22217 810.6
+1057.54443 656.7
+1059.88770 584.4
+1198.07397 3156.8
+1301.55078 622.0
+1876.02808 734.4
+1878.97900 1402.9
+1879.52075 19713.4
+1880.09192 1757.9
+1882.54102 936.3
+1906.80273 801.9
+1907.08240 7301.6
+1930.72754 1150.2
+S	2525	2525	680.3634521
+Z	4	2717.42251
+182.95476 517.3
+183.14172 533.9
+188.21440 548.6
+188.23404 558.2
+188.24161 510.9
+188.25499 777.4
+188.27196 981.3
+188.28377 676.1
+188.29938 878.6
+188.30737 900.4
+188.33311 640.9
+188.34464 743.9
+188.35417 567.1
+199.30820 2493.9
+199.32033 1131.9
+199.39182 843.4
+199.40622 1260.2
+214.95926 626.9
+217.52295 588.7
+225.08478 614.0
+298.45474 633.7
+305.84564 601.0
+307.78802 703.4
+317.55139 647.7
+320.64615 621.6
+322.53384 718.3
+390.27829 592.6
+405.58838 567.9
+420.26938 626.4
+423.42648 727.2
+456.27710 915.4
+478.56619 612.5
+493.28940 690.8
+508.73077 744.6
+525.79279 794.9
+526.29486 725.3
+532.47839 1832.9
+559.59247 645.2
+568.47180 585.8
+630.40527 752.4
+633.78149 808.8
+656.37323 604.6
+662.38892 707.8
+665.97357 751.3
+674.49738 725.9
+676.63812 1201.1
+713.18433 651.2
+742.88403 603.6
+754.71448 5158.5
+755.04785 3275.4
+768.86786 4654.0
+769.37024 2365.1
+769.87836 677.0
+783.34705 669.2
+783.43054 893.1
+787.73920 1276.7
+788.06708 1592.8
+788.41296 587.0
+795.70154 1037.6
+802.02704 611.9
+821.13019 3075.1
+821.47070 1252.1
+825.41364 5002.4
+825.91125 3133.8
+847.93732 639.3
+869.50995 672.5
+905.24445 782.3
+906.93579 927.7
+940.82910 710.9
+1057.24316 945.8
+1086.29700 602.9
+1182.86877 773.4
+1198.06555 3695.2
+1352.49854 770.7
+1724.98975 708.9
+1776.88171 841.5
+1778.41040 629.8
+1870.35645 677.2
+1870.87341 633.9
+1878.66553 813.2
+1879.02185 1481.0
+1879.52979 19565.2
+1879.80872 2144.4
+1880.00732 1636.2
+1880.42859 1302.2
+1888.86328 705.5
+1907.09546 7313.8
+1907.34387 1084.1
+1909.62183 647.8
+1930.58533 796.7
+1991.74255 628.4
+S	2526	2526	1879.9858246
+Z	3	5636.682
+Z	2	3758.124
+507.46832 719.6
+532.52063 2321.2
+537.49048 660.7
+549.18909 818.4
+550.91425 708.4
+558.98505 712.1
+630.44861 755.5
+676.63361 817.7
+676.67981 635.6
+768.62158 705.7
+795.70551 1183.4
+864.62653 721.1
+954.33875 701.6
+954.82532 680.1
+990.15051 680.4
+1019.67523 770.7
+1140.01941 553.1
+1198.16516 3231.5
+1228.02136 590.5
+1337.30200 657.2
+1398.67725 718.1
+1525.51050 789.7
+1534.44812 649.9
+1879.51184 18874.1
+1879.77686 3869.3
+1880.05200 1021.5
+1907.11108 7182.2
+S	2527	2527	681.1170746
+Z	4	2720.437
+175.09288 14284.7
+188.25713 13612.7
+188.26375 16489.7
+188.27518 25540.9
+188.29019 26505.1
+188.29956 22475.8
+188.30522 25493.5
+188.31616 20524.9
+189.40422 14928.6
+198.92592 18314.3
+199.22870 20084.0
+199.23692 23869.3
+199.27647 27347.8
+199.29807 50612.7
+199.31142 32528.2
+199.33293 24845.2
+199.41162 22749.8
+214.78180 14864.8
+220.03140 14343.3
+220.55544 11629.0
+220.56340 12871.7
+222.68257 14022.1
+226.21347 13062.1
+226.65402 14707.2
+273.17920 17792.1
+274.12802 14407.4
+301.38742 14075.2
+315.51089 12806.3
+336.64374 14400.4
+357.21057 18698.2
+381.35547 19802.5
+403.06198 15762.8
+412.70166 14514.3
+414.95090 14304.8
+427.52124 17016.7
+438.27130 33728.5
+446.61642 14787.8
+456.28082 63631.7
+456.59134 19066.1
+457.28967 16492.3
+482.37048 13650.1
+482.66214 23557.2
+513.24225 15989.0
+516.78998 28510.9
+525.79840 27090.3
+526.29303 15597.6
+532.49530 15678.1
+532.52734 40754.8
+534.79602 33016.3
+540.74231 17543.4
+549.16180 20050.7
+550.61041 50382.4
+550.94464 21706.9
+559.86011 14865.3
+582.34113 24329.4
+582.83820 25029.4
+583.98102 13793.2
+589.29089 26154.6
+590.29999 17479.4
+591.34106 46636.4
+591.84027 35234.1
+629.05151 15727.8
+633.78699 14779.4
+634.27869 24406.5
+660.32819 59179.7
+661.32837 18514.0
+722.89246 15728.7
+726.34326 27803.0
+726.39893 15539.0
+731.03314 21803.4
+749.03204 22772.2
+749.37616 33300.0
+749.70807 18189.8
+754.71295 142094.7
+755.04852 236385.4
+755.38312 178763.4
+755.71716 64994.3
+756.04675 27945.5
+768.86975 323399.4
+769.37061 240107.0
+769.87061 140625.5
+770.37555 33397.0
+773.41498 21478.0
+777.18402 15559.0
+782.50714 15080.5
+784.18878 17886.3
+787.73846 70647.6
+788.07056 64555.3
+788.40704 70865.3
+788.74243 37304.6
+795.69299 28788.3
+802.59467 13756.1
+817.41235 15610.7
+820.76129 41808.3
+821.09253 77508.8
+821.42480 52381.9
+825.41095 257541.9
+825.91217 282938.0
+826.41345 154121.1
+826.91132 46942.6
+853.78046 25882.0
+854.11102 39866.5
+854.44226 30224.9
+854.77832 29241.5
+858.06000 15613.9
+871.01086 21517.5
+875.29272 15984.1
+880.30096 15707.6
+901.98480 14932.4
+924.52087 15252.9
+951.49127 19205.3
+1050.57813 21332.6
+1057.24792 22073.0
+1098.38940 19113.1
+1117.17126 20472.5
+1187.83618 22772.8
+1198.18335 73789.0
+1206.84436 14511.8
+1271.81873 16929.6
+1525.42627 20666.5
+1577.89148 13332.6
+1870.35461 25167.5
+1873.11047 22024.1
+1878.90039 29230.3
+1879.51111 459666.7
+1879.75781 72797.7
+1880.07617 54359.3
+1907.05774 172806.7
+1930.60779 24631.9
+S	2529	2529	680.3624146
+Z	4	2717.41836
+184.38426 537.9
+187.78192 565.4
+188.24007 635.9
+188.25398 1569.7
+188.27235 1694.5
+188.28096 1728.8
+188.28987 1938.9
+188.29929 1611.3
+188.32732 1266.1
+188.37828 632.9
+192.88420 635.8
+198.93095 734.0
+199.19649 766.4
+199.21384 770.1
+199.27043 698.4
+199.27815 906.9
+199.29626 1320.8
+199.31229 2348.0
+199.39581 694.7
+210.82001 559.9
+214.52489 673.3
+255.30199 776.5
+271.75824 553.2
+285.26651 706.3
+289.73752 583.1
+299.90033 630.0
+317.05496 605.1
+318.86688 539.8
+327.19995 746.4
+381.07840 631.9
+381.37259 634.3
+390.62885 609.3
+427.21994 714.8
+436.46445 872.8
+438.27008 1232.7
+456.28137 2382.6
+476.24213 647.8
+516.78784 1000.7
+517.28882 902.9
+525.79401 1078.3
+526.29651 667.4
+532.51727 1783.8
+534.80334 738.3
+540.74042 672.5
+549.17627 1000.9
+550.61102 984.3
+550.94226 1393.8
+551.27643 1166.8
+589.29401 1900.7
+591.34131 922.0
+613.31403 792.5
+623.81396 705.5
+625.27679 775.8
+633.77759 2181.8
+646.03339 590.4
+660.32849 2903.2
+676.60333 852.7
+719.61090 710.0
+725.84387 1601.1
+726.34155 874.5
+731.15558 719.2
+734.37354 618.0
+754.71533 4325.1
+755.04797 7709.9
+755.38037 5637.1
+755.71619 2060.1
+768.86920 8215.9
+769.37115 10252.2
+769.87085 4579.7
+773.41626 1131.8
+782.02448 749.5
+783.33307 739.2
+783.43481 902.8
+783.76123 881.6
+783.86249 668.5
+784.09003 786.5
+787.73688 2742.3
+788.06879 3964.4
+788.40448 2809.4
+788.74432 1400.2
+795.71838 987.9
+814.17279 627.0
+821.41272 1592.4
+821.48730 874.9
+825.41229 8773.5
+825.91248 9121.4
+826.41498 3693.5
+854.45160 1129.3
+874.94775 602.0
+875.40466 1273.9
+906.93079 1056.4
+918.67108 612.5
+935.62689 714.4
+944.05054 651.3
+951.25989 714.3
+953.87042 631.8
+959.49530 914.0
+1069.60266 877.6
+1090.64136 831.7
+1172.53955 623.9
+1198.16394 3637.9
+1254.08447 692.7
+1262.99719 587.1
+1421.66492 629.3
+1480.60156 814.7
+1491.01831 591.5
+1555.12854 743.3
+1716.61816 1483.8
+1879.40820 21234.7
+1907.12671 7347.1
+1907.78040 770.1
+1918.92456 837.1
+S	2530	2530	946.465991267
+Z	2	1891.084
+Z	3	2836.123
+253.66928 655.7
+266.50143 566.1
+342.28027 612.1
+367.47202 558.3
+381.36615 767.6
+387.04453 604.5
+482.45569 769.9
+482.67136 723.5
+532.54596 2305.7
+549.16260 704.3
+565.70673 685.9
+585.58514 636.7
+634.75317 594.0
+676.62250 750.1
+829.35284 502.6
+866.96173 603.3
+922.31360 719.4
+974.00342 597.7
+1015.89716 744.9
+1057.21411 1128.2
+1101.35986 560.7
+1198.21631 3359.4
+1247.07239 716.5
+1280.14868 591.4
+1353.94446 584.4
+1663.19580 759.0
+1686.16406 709.1
+1718.49890 718.1
+1879.47571 20707.9
+1880.15894 961.6
+1907.05664 7605.5
+1918.92480 756.5
+1930.65454 917.1
+S	2531	2531	947.240407933
+Z	2	1892.633
+Z	3	2838.446
+264.32574 592.4
+266.90906 578.5
+308.90744 582.5
+350.28305 791.3
+365.55258 534.0
+392.91382 623.7
+397.52512 671.5
+482.66403 648.3
+532.49957 2092.5
+555.28687 1644.0
+558.70905 701.4
+600.33929 654.1
+629.68878 668.5
+630.38019 613.1
+648.36688 917.7
+676.64813 880.4
+681.86853 636.7
+708.55438 663.7
+716.54614 603.8
+730.15338 675.1
+731.14612 641.4
+777.84308 552.8
+795.70319 825.9
+835.30737 727.3
+867.80841 700.3
+871.10284 675.9
+976.59229 830.0
+1031.40015 609.1
+1057.25610 1067.0
+1173.48523 652.9
+1198.11963 3520.2
+1206.68567 4111.3
+1207.68298 3614.0
+1208.68726 1582.7
+1490.16162 614.5
+1501.38550 594.3
+1525.44678 764.2
+1533.05493 601.5
+1544.07715 660.6
+1656.45569 729.8
+1703.74072 830.7
+1719.28674 1868.2
+1778.90796 766.8
+1876.08643 733.8
+1878.46191 951.9
+1879.55713 19036.0
+1906.60889 706.0
+1907.04932 7327.8
+1930.62317 755.0
+1950.09119 642.2
+1998.65198 861.7
+S	2533	2533	611.797407933
+Z	2	1221.747
+Z	3	1832.117
+174.49736 3285.1
+187.94821 2650.5
+188.04227 3481.2
+188.20256 3612.7
+188.25365 5581.3
+188.28348 11136.5
+188.30766 9415.2
+188.32034 6122.7
+188.33009 5453.2
+198.92953 3856.4
+199.18022 19548.0
+199.19589 3407.2
+199.24460 3646.4
+199.26692 4729.0
+199.28979 7912.6
+199.30679 5221.7
+199.31464 6601.3
+199.32697 9110.0
+199.33904 3912.8
+199.36159 3080.9
+199.38364 3538.0
+199.39281 2746.5
+199.42502 3559.9
+215.13812 3056.2
+219.01709 2880.5
+227.17572 11733.9
+228.58438 2876.3
+281.22299 4108.6
+309.86435 3134.7
+314.24405 3661.2
+326.24359 15255.7
+327.24844 2879.2
+350.29446 3380.1
+363.20206 12242.9
+364.20569 5138.7
+381.34125 4053.4
+381.98599 2822.3
+395.17056 3751.2
+411.33087 4147.5
+431.27200 2950.8
+433.77039 79061.9
+439.32721 8578.4
+444.28104 10233.5
+448.77539 128341.4
+449.27719 92379.9
+449.77817 27679.8
+465.01178 3421.0
+465.78665 7163.7
+466.28683 6047.2
+466.78683 4055.9
+471.54321 2850.4
+484.35046 3318.4
+491.45862 2736.3
+492.24127 3625.9
+512.82239 19034.3
+513.32349 18288.6
+513.82495 5131.4
+514.81628 3685.8
+532.49402 11961.0
+533.98322 4548.5
+534.31476 11283.7
+534.64691 4546.9
+540.37775 4634.0
+549.12958 3742.6
+556.33954 11037.3
+556.83771 8044.8
+568.36908 29171.5
+569.37225 11034.3
+571.35413 3530.5
+573.32245 7928.2
+629.87067 11931.2
+630.37036 14004.1
+630.87140 7345.0
+631.38342 6308.7
+637.38544 4437.3
+676.35089 3331.7
+676.67706 5958.0
+685.38928 3845.6
+685.88696 5116.9
+686.40826 22253.8
+687.41187 17449.3
+688.40649 4251.3
+694.39441 38917.1
+694.89569 75529.4
+695.39655 30830.9
+695.89258 5717.5
+705.40302 3089.3
+715.43750 12100.8
+716.43939 5510.9
+731.09613 3702.7
+750.93585 63961.8
+751.43774 138654.0
+751.93860 50864.2
+752.43982 20992.2
+769.47150 5259.4
+781.28192 3416.0
+799.49072 7026.5
+800.46954 145410.0
+800.97113 385997.0
+801.47302 197904.3
+801.97424 68719.4
+802.47186 23353.7
+803.47473 13199.9
+857.01288 3522.1
+857.51245 14127.1
+858.01849 11658.3
+866.53290 48756.2
+896.54309 53864.8
+897.54572 45728.1
+898.55133 8273.5
+930.56500 43515.4
+931.56726 44980.1
+932.57129 10489.1
+942.64349 3342.6
+950.47607 2918.8
+953.98291 2968.2
+979.61267 3661.8
+1057.30725 3849.1
+1109.98193 3309.4
+1154.34167 2918.4
+1198.10889 18171.3
+1211.71179 3355.5
+1221.74561 3347.4
+1272.87537 3112.2
+1362.68665 3004.0
+1425.70789 3173.8
+1469.85388 2948.7
+1525.35474 6365.2
+1528.05347 3176.6
+1667.17334 3459.6
+1744.30042 2998.2
+1832.59937 3248.9
+1878.04358 4408.5
+1878.76941 5730.4
+1879.18042 14340.1
+1879.34497 19432.8
+1879.62891 96697.2
+1880.19116 8135.5
+1880.64917 7816.6
+1881.57776 6149.5
+1894.32959 2985.7
+1903.14600 3441.4
+1906.83142 6980.6
+1907.11841 34620.6
+1907.81177 3038.3
+1943.65991 3078.8
+S	2534	2534	680.3587521
+Z	4	2717.40371
+175.47125 577.8
+182.78490 567.5
+188.23018 646.4
+188.24391 734.6
+188.25926 661.6
+188.27293 609.2
+188.28503 580.4
+188.29076 635.2
+188.31235 639.3
+188.34177 653.6
+188.35703 676.9
+198.92644 908.3
+199.24086 805.7
+199.29454 817.2
+199.31125 1165.1
+199.32082 1891.2
+199.33028 1124.3
+199.33847 1320.1
+199.41844 913.1
+199.43805 630.1
+199.52376 681.7
+211.30933 651.2
+211.70168 615.3
+216.55421 622.5
+219.78748 640.1
+219.99881 607.6
+226.25053 597.6
+240.35283 516.0
+255.29553 697.9
+262.00140 604.9
+265.79559 502.9
+313.61621 563.8
+326.37735 523.7
+328.51846 605.6
+360.29968 608.0
+369.52936 644.3
+384.84836 610.6
+393.01743 576.9
+467.08310 651.9
+482.67004 754.0
+521.06470 627.4
+522.86774 643.7
+524.83636 652.5
+532.23792 796.8
+532.48541 1841.4
+550.60785 808.7
+585.81073 785.2
+589.29211 2109.2
+599.85266 653.4
+600.29175 717.4
+620.08478 625.0
+633.77930 2575.9
+658.85431 901.8
+660.33051 3146.5
+662.06720 735.9
+676.37427 769.6
+676.66827 1229.2
+706.20551 727.7
+706.45642 648.1
+725.83612 1255.1
+731.71594 828.4
+754.71417 4969.7
+755.05048 2411.1
+768.87000 4343.4
+769.36926 2201.4
+782.87921 761.1
+783.42889 1160.3
+787.73761 2033.4
+788.07141 953.5
+788.41370 1087.4
+795.69769 1375.3
+818.87439 1206.9
+820.79279 1825.1
+821.13208 2994.5
+821.46454 1759.6
+821.79388 1382.5
+825.41180 3995.7
+825.90741 2857.9
+849.15857 558.3
+1019.62158 680.7
+1113.31189 671.5
+1178.65149 770.8
+1198.08899 3194.3
+1306.20203 627.1
+1405.54602 678.8
+1487.29211 636.1
+1501.73389 729.7
+1525.46533 1039.4
+1718.05505 1120.8
+1766.76453 781.4
+1856.71118 707.5
+1878.37476 773.6
+1878.71777 1511.3
+1879.08142 2715.0
+1879.58826 17734.4
+1880.09180 1571.5
+1906.80005 1113.4
+1907.10217 7056.4
+1930.61816 1262.5
+1964.36475 675.0
+S	2535	2535	1880.0145746
+Z	2	3758.181
+Z	3	5636.769
+532.47333 1487.0
+532.52631 1051.5
+566.74170 641.3
+630.39166 922.1
+676.66333 1160.5
+682.67407 586.5
+690.87244 598.0
+698.14471 569.7
+699.96692 578.7
+710.78656 622.5
+716.21356 671.4
+786.17548 635.5
+795.70361 1453.6
+877.04755 610.7
+929.16766 708.5
+967.84021 659.2
+1000.96844 604.9
+1198.05457 2969.1
+1198.21521 880.2
+1243.63806 562.5
+1694.33008 698.1
+1717.12024 1214.6
+1843.21436 757.6
+1878.13562 772.2
+1878.57458 1294.1
+1879.59790 19222.9
+1880.09851 1319.7
+1880.89807 713.8
+1884.71606 708.9
+1907.12659 7350.4
+S	2537	2537	1880.03840793
+Z	2	3758.229
+Z	3	5636.84
+522.43591 727.5
+532.50598 2186.6
+543.20984 766.2
+1198.12671 3541.5
+1341.85754 726.5
+1552.03967 642.9
+1686.97107 882.2
+1773.87732 695.6
+1871.32129 824.4
+1874.03235 874.4
+1878.37012 978.8
+1878.97864 1737.7
+1879.23242 2022.7
+1879.55090 10940.9
+1879.78735 12438.1
+1880.75085 786.7
+1907.04028 7930.0
+1919.28088 677.6
+1930.50684 1122.5
+S	2538	2538	611.797407933
+Z	3	1832.117
+Z	2	1221.747
+169.38341 746.5
+169.49811 942.1
+171.64041 700.4
+179.75580 755.5
+188.17380 900.9
+188.26482 1951.5
+188.28529 2965.6
+188.30164 2648.2
+195.83635 700.8
+195.95459 726.3
+199.18036 1719.5
+199.28293 769.5
+199.30205 1993.9
+199.31421 2870.9
+199.32631 2596.6
+199.34810 714.7
+199.40025 1220.9
+199.42519 802.0
+203.60455 668.2
+212.77014 879.1
+220.87379 752.7
+220.94095 726.4
+222.06210 991.0
+223.06136 779.2
+227.64709 766.1
+233.57787 750.4
+240.05501 691.5
+308.90732 748.5
+326.24286 1216.9
+329.46863 695.6
+332.34479 828.0
+350.19849 679.2
+350.29276 840.5
+363.20331 1073.8
+417.27280 742.8
+419.94574 727.5
+441.64264 905.2
+444.27939 1150.2
+448.77505 14704.3
+449.27737 4260.3
+452.47089 763.3
+465.78607 838.7
+498.46213 812.8
+512.82306 1954.4
+532.48895 2548.2
+549.15289 1282.9
+566.30811 1018.2
+568.36841 3199.7
+574.80981 2744.8
+575.31342 1991.8
+575.81885 1134.5
+580.55206 791.0
+594.25989 882.5
+600.23407 762.9
+625.58887 849.0
+627.65338 799.4
+629.87720 1937.4
+630.41180 986.1
+636.76135 863.1
+686.40778 1502.5
+687.41748 1086.2
+694.39288 6672.5
+694.89667 2487.9
+750.93506 11464.4
+751.43817 7916.3
+751.93652 2036.4
+791.97803 939.6
+795.71545 1462.3
+800.46985 31246.5
+800.97070 18447.2
+801.47357 5475.2
+802.47205 2058.5
+814.96198 893.2
+857.01385 1121.9
+896.54462 6323.0
+897.54730 1796.8
+929.32684 900.9
+930.56598 5718.3
+931.56860 1423.6
+1019.66327 950.0
+1076.68542 731.8
+1198.08569 4738.6
+1214.51855 811.3
+1429.07166 855.1
+1487.21790 876.3
+1530.36707 747.8
+1539.48352 881.2
+1667.07227 1136.8
+1714.37134 773.3
+1857.89868 701.4
+1870.97241 1763.1
+1877.97449 1377.9
+1878.64526 1533.8
+1879.41833 10636.3
+1879.64124 21110.5
+1880.29736 3439.2
+1880.68604 1101.8
+1881.77148 1064.7
+1907.08899 9965.3
+1918.92065 1115.7
+1930.63538 1379.2
+1983.97827 1000.8
+1991.32996 749.5
+S	2539	2539	612.299991267
+Z	3	1833.625
+Z	2	1222.752
+157.74483 1206.6
+166.18788 1784.1
+168.24968 1188.0
+184.65770 1244.1
+185.03531 1417.1
+186.54337 1194.4
+188.15498 1117.9
+188.24974 1938.6
+188.26158 1558.8
+188.27382 2233.6
+188.28030 2035.8
+188.29298 2832.9
+188.30296 1647.6
+188.31712 1676.8
+198.92899 2283.7
+199.18011 2442.6
+199.21385 1933.4
+199.23969 1457.3
+199.29169 2827.0
+199.31143 5590.3
+199.33127 2396.1
+199.34109 1858.0
+199.38889 1146.4
+201.56163 1189.8
+217.30252 965.5
+233.58467 1519.7
+235.53926 1199.5
+240.06430 1303.4
+242.00290 1271.8
+252.23517 1146.0
+260.79767 1363.3
+280.19705 1221.8
+295.85284 1107.4
+322.12430 1268.8
+322.75204 1144.7
+350.27661 1349.2
+381.37708 2290.0
+391.13000 1159.3
+406.42792 1353.6
+433.76904 4342.8
+442.48331 1172.4
+448.77554 11118.4
+449.27640 9479.8
+449.77539 1739.3
+496.10815 1172.4
+513.32269 2016.0
+532.48938 3626.0
+568.37335 2143.7
+574.80658 3310.9
+575.31378 3845.4
+575.81586 2321.6
+676.67261 1954.0
+694.39099 3129.3
+694.89667 4522.3
+695.39636 2417.5
+731.15424 1507.5
+750.93549 4819.7
+751.43695 12024.4
+751.93640 4905.0
+752.44086 2537.6
+782.90027 1404.4
+795.70880 1798.3
+800.46802 7878.4
+800.97125 36257.6
+801.47211 12896.5
+801.97388 2602.2
+802.47198 2329.7
+866.53925 2903.9
+894.74554 1273.9
+896.54297 3735.5
+897.55054 4248.3
+930.56995 3731.3
+931.56519 3923.9
+954.91772 1163.7
+1021.99628 1250.5
+1057.27673 1514.7
+1198.09570 6496.2
+1207.03284 1302.4
+1258.19250 1388.2
+1371.11462 1326.1
+1433.87317 1551.3
+1448.57373 1332.0
+1777.30164 1601.2
+1839.59680 1802.9
+1860.11816 1277.0
+1878.20496 1931.4
+1878.48450 2300.1
+1878.90881 3036.6
+1879.24731 8492.3
+1879.61414 37226.5
+1879.97217 9054.5
+1880.28931 2437.7
+1880.73328 2558.5
+1881.06580 2401.7
+1881.99280 1567.3
+1906.68884 1559.3
+1907.03577 14792.1
+1907.39160 2225.8
+1930.69299 1876.5
+S	2541	2541	1880.0558246
+Z	2	3758.264
+Z	3	5636.892
+511.11841 667.1
+511.14389 749.7
+532.54333 1481.6
+630.41254 878.7
+676.61322 765.0
+697.83923 676.2
+745.96899 667.0
+795.71545 1398.8
+825.95648 649.0
+899.74091 560.2
+934.65021 554.9
+938.08740 549.3
+958.54077 741.7
+1012.62042 723.8
+1170.45325 730.9
+1198.21533 3105.5
+1210.73865 732.2
+1347.07446 603.4
+1488.75659 698.3
+1606.98621 717.7
+1870.30359 622.0
+1878.60413 772.3
+1878.82837 744.5
+1879.55261 16614.6
+1880.56140 865.0
+1882.12817 618.3
+1884.66431 572.4
+1906.92078 7122.4
+1930.60876 977.8
+S	2542	2542	1907.46899127
+Z	3	5719.132
+Z	2	3813.09
+530.21338 635.1
+532.52936 1518.6
+566.93536 622.0
+575.34540 637.3
+611.88647 592.9
+675.30005 648.4
+675.55029 622.2
+676.65851 1104.7
+703.43726 683.1
+795.71967 1080.7
+917.92645 608.2
+1057.26953 817.9
+1188.36584 619.7
+1198.18494 3107.2
+1265.11560 654.9
+1363.74170 965.6
+1425.67456 770.1
+1525.58679 741.1
+1528.74744 715.0
+1538.75513 764.2
+1547.79993 964.1
+1563.84241 15818.1
+1564.84558 10871.5
+1565.86011 1768.2
+1785.22949 734.5
+1791.95520 5594.1
+1792.95557 6100.7
+1793.97180 1469.6
+1815.96985 854.9
+1847.97400 868.0
+1860.09009 782.1
+1872.95569 1188.1
+1876.06506 871.0
+1878.15833 849.7
+1879.28430 4594.7
+1879.57495 18867.2
+1906.93701 7142.3
+1918.91602 723.8
+1930.84692 1527.1
+S	2543	2543	1198.5388246
+Z	3	3592.341
+Z	2	2395.23
+342.32791 639.7
+373.23172 628.3
+412.62268 708.6
+428.55856 617.3
+435.69275 698.4
+474.28909 669.9
+528.42548 847.0
+532.52429 2078.6
+630.42926 760.1
+676.62427 842.5
+720.88062 792.9
+730.01746 585.9
+731.14209 665.6
+761.16992 619.0
+795.70905 991.9
+848.01001 702.5
+854.86212 634.2
+888.69287 611.2
+923.77716 672.5
+1057.21802 883.4
+1198.17395 3668.4
+1216.30591 596.4
+1251.50159 618.2
+1569.61804 644.2
+1870.11084 994.9
+1879.48059 19757.6
+1879.78101 1929.2
+1882.15125 744.3
+1906.70276 1574.1
+1906.98315 6604.9
+1907.55847 909.2
+1930.66248 1056.1
+S	2545	2545	1879.9728246
+Z	2	3758.098
+Z	3	5636.643
+510.17688 604.7
+532.54999 1598.9
+549.14807 849.9
+610.98096 619.1
+614.86664 660.5
+676.64905 945.9
+721.66766 696.8
+771.88611 598.7
+776.65503 702.0
+795.71014 990.6
+829.00238 631.1
+840.25610 638.3
+1198.22217 3700.0
+1274.32910 640.5
+1870.38171 727.6
+1877.80493 558.7
+1878.70251 800.7
+1879.19238 1845.8
+1879.57361 19405.5
+1879.94275 1632.4
+1880.53455 709.7
+1881.47461 683.5
+1907.09045 7241.9
+S	2546	2546	1001.7508421
+Z	4	4002.97207
+279.37927 542.2
+299.51724 544.1
+321.52408 567.9
+331.73218 529.6
+341.44577 711.0
+350.13583 659.5
+438.27106 1748.7
+439.27631 883.1
+448.38647 578.5
+456.28146 2249.1
+475.31622 683.3
+527.16547 583.7
+532.55042 2120.2
+630.45074 683.9
+651.54572 555.8
+652.74554 608.1
+676.65155 1092.9
+686.20557 590.7
+720.40466 621.7
+795.70361 1003.1
+887.92853 2996.8
+888.18372 4572.7
+888.43268 5836.2
+888.68195 4956.3
+888.93243 1462.6
+907.46826 2065.3
+907.96625 4191.8
+908.46521 3864.9
+908.96973 1425.7
+909.46869 922.1
+912.70013 1770.1
+912.94733 977.3
+913.20233 2148.5
+913.45093 3091.2
+913.70258 1769.2
+942.44830 859.4
+961.97565 780.7
+962.22607 1249.4
+962.47968 1329.4
+962.73993 1446.0
+962.98395 1959.1
+963.24603 778.2
+979.80853 753.3
+1057.26794 808.9
+1079.47681 986.2
+1080.51672 2325.6
+1080.86304 970.5
+1081.18359 668.3
+1136.05798 673.6
+1144.69385 766.9
+1151.56042 846.9
+1151.88538 1456.3
+1172.51135 665.5
+1177.56213 1167.4
+1177.89819 2865.9
+1178.23315 5152.2
+1178.56458 3377.7
+1178.90027 3814.0
+1179.22852 1281.3
+1182.89490 660.3
+1182.94104 680.8
+1183.23694 16312.3
+1183.57019 37287.2
+1183.90479 62294.9
+1184.23914 84712.4
+1184.57312 71883.0
+1184.90796 30904.8
+1185.24207 9345.7
+1185.57458 1644.5
+1198.22620 3186.6
+1212.57556 1408.0
+1213.08472 861.5
+1216.26123 6127.2
+1216.59412 11236.1
+1216.92700 16908.1
+1217.26233 25225.1
+1217.59521 22324.3
+1217.92834 8975.6
+1218.26404 3624.5
+1219.39661 649.7
+1249.28027 3979.6
+1249.61597 6974.8
+1249.95068 8688.0
+1250.28552 20132.0
+1250.61780 17885.8
+1250.95020 7206.3
+1251.28809 2680.9
+1272.61365 866.3
+1273.11621 1066.8
+1273.60535 1655.9
+1274.11035 1414.5
+1282.63171 989.4
+1282.97217 1549.2
+1283.30188 2785.5
+1283.64343 2082.8
+1283.97412 1483.5
+1427.18811 687.0
+1469.14124 615.0
+1469.74072 655.7
+1525.44507 740.7
+1677.80884 646.2
+1735.77417 1515.4
+1800.03967 702.7
+1873.05151 766.8
+1877.41370 721.6
+1879.58826 20016.8
+1881.89856 669.9
+1907.08911 7339.6
+S	2547	2547	802.0046246
+Z	5	4004.984
+220.19798 541.0
+220.32521 621.1
+240.13451 1818.3
+247.99898 643.6
+254.16832 543.3
+256.75394 615.5
+258.14551 782.4
+271.41324 565.5
+276.23291 643.0
+290.70337 520.7
+294.18039 995.3
+296.63324 652.8
+315.75876 634.5
+324.61368 592.2
+329.21863 1122.3
+334.31491 635.2
+339.20218 2336.0
+342.25455 740.9
+342.42532 700.5
+346.29907 674.7
+346.50623 719.5
+357.21353 3774.1
+358.21774 835.6
+359.37631 576.8
+410.27716 1357.8
+411.26364 904.1
+423.00354 566.5
+427.21823 3726.4
+427.52249 1000.4
+428.22403 1108.9
+428.28598 2047.6
+428.69791 666.2
+438.27072 7942.0
+439.27539 2412.6
+451.00793 727.1
+454.82748 556.4
+456.28152 12613.9
+457.28482 3624.7
+516.79108 2010.1
+517.29047 1761.3
+530.28400 651.4
+531.14227 597.8
+532.52637 2061.2
+552.44672 602.1
+571.52991 617.2
+578.66650 556.8
+582.33679 1198.0
+586.05951 794.5
+586.55603 911.7
+595.30927 1131.6
+604.18396 577.2
+605.31366 3164.3
+605.64709 5508.5
+605.98071 3836.0
+606.31610 2349.3
+613.32013 1121.4
+614.31592 664.2
+627.70673 582.9
+630.36938 905.3
+636.37720 668.8
+659.82166 713.0
+676.01031 1789.1
+676.34009 2828.8
+676.67468 2814.8
+677.00720 768.9
+683.92633 815.3
+697.26367 635.7
+706.33374 1092.3
+706.58276 968.1
+706.83722 1161.2
+710.54462 989.3
+710.75085 1579.4
+710.94183 1246.9
+720.02472 755.4
+725.02710 3890.4
+725.36353 4102.4
+725.69659 3977.6
+726.03064 1804.7
+726.40228 1770.3
+727.38348 632.8
+730.75958 1172.5
+730.95697 986.0
+731.08929 1391.9
+734.60498 1438.3
+734.85449 2922.0
+735.10504 1737.9
+735.35541 2311.8
+735.60663 1317.2
+745.44733 578.4
+759.87512 1327.0
+762.03918 1217.6
+762.70276 1418.5
+768.04340 1806.7
+768.37775 3317.7
+768.71198 4502.6
+769.04865 1863.6
+769.78815 2370.4
+769.98749 6257.2
+770.18744 12763.2
+770.38885 15090.5
+770.58820 11458.8
+770.78931 6668.3
+770.98846 3796.4
+781.36707 969.7
+782.34814 856.7
+795.69739 960.5
+804.45416 669.0
+843.42072 880.5
+848.74463 2861.2
+849.08093 2555.7
+849.41168 4540.0
+849.75281 2213.0
+850.07605 935.9
+864.16711 1361.1
+864.44086 990.9
+878.94135 677.8
+879.17462 762.3
+879.98138 674.2
+882.41504 885.6
+883.17871 2180.7
+883.42975 7485.8
+883.67700 11297.3
+883.92780 15653.6
+884.17950 11577.2
+884.42804 5238.9
+884.67987 2291.3
+885.37811 1075.3
+885.63647 1265.9
+885.88007 1385.8
+886.13672 1039.4
+887.09003 3920.4
+887.41949 11347.8
+887.68439 51283.2
+887.93176 143476.5
+888.09113 8698.1
+888.18262 213298.3
+888.31195 1277.4
+888.43201 182616.2
+888.68268 121263.3
+888.80121 949.6
+888.93262 62898.1
+889.18488 24328.3
+889.43176 7958.0
+889.56488 1127.1
+889.68811 2377.6
+889.81659 951.3
+890.23071 680.0
+890.33337 997.8
+890.47742 1233.5
+890.74158 1493.2
+891.00262 1456.7
+891.25793 825.5
+907.46252 2950.6
+907.96442 4775.2
+908.19391 3643.3
+908.44684 4759.9
+908.69574 3879.3
+908.93933 2260.3
+909.19366 3067.7
+909.68555 1336.7
+912.44861 16531.5
+912.69788 58722.4
+912.94855 83448.9
+913.19897 84005.5
+913.44965 54109.8
+913.70007 28456.3
+913.95093 13481.3
+914.20044 4185.8
+914.45782 1156.8
+915.89508 776.6
+918.46295 695.4
+932.96362 1282.1
+933.20465 873.9
+933.50946 909.8
+935.77002 1035.0
+936.09985 3379.1
+936.43457 3387.7
+936.77081 1158.1
+937.10175 1145.6
+937.21368 6583.2
+937.46484 24275.6
+937.71588 33613.1
+937.96576 31580.7
+938.21704 26515.7
+938.46698 13284.3
+938.71887 5512.6
+938.96783 3651.7
+941.43915 13303.2
+941.77277 24750.2
+942.10687 32051.9
+942.44177 22468.8
+942.77496 10627.5
+943.11169 4489.3
+943.43988 1712.4
+945.16888 858.9
+951.50916 1053.4
+961.97577 1370.6
+962.23175 6712.7
+962.48163 8586.0
+962.73230 10766.2
+962.98566 6672.1
+963.23700 4460.5
+963.48071 1748.3
+963.72443 851.3
+965.45966 762.4
+973.45953 1415.4
+973.79089 3828.2
+974.13263 3329.9
+974.46338 1918.2
+974.79236 1354.1
+979.13354 10904.9
+979.46802 27748.1
+979.80225 31337.4
+980.13617 23385.2
+980.47144 10325.9
+980.80493 5555.5
+981.12903 884.2
+1005.50476 1549.2
+1012.48724 1563.2
+1012.82635 3425.0
+1013.16327 3369.6
+1013.50275 4600.6
+1013.81073 1224.7
+1014.00452 4967.1
+1014.50720 5405.3
+1015.00922 2272.5
+1035.82617 1024.9
+1036.16797 936.0
+1041.15991 1443.3
+1041.50195 5191.9
+1041.83435 6055.0
+1042.17188 4098.1
+1042.50696 1872.9
+1050.58057 904.7
+1056.47925 718.9
+1063.51880 681.8
+1079.51563 1949.7
+1079.84534 3964.1
+1080.17517 6744.8
+1080.51416 5320.5
+1080.84802 3128.5
+1081.17151 1183.6
+1087.04370 844.9
+1087.54041 2373.6
+1088.03760 2883.1
+1088.53870 1251.2
+1103.63025 1558.3
+1112.20593 1054.9
+1117.20422 1258.6
+1117.53918 2540.4
+1117.87109 5886.2
+1118.20923 6497.5
+1118.53845 2877.6
+1118.87085 1108.8
+1119.22925 880.9
+1151.22595 1801.0
+1151.55542 3288.0
+1151.88977 1632.3
+1152.06067 910.8
+1152.23010 1429.9
+1152.56409 2296.3
+1154.89417 1542.3
+1165.10498 662.9
+1178.23022 1491.7
+1183.23792 4957.9
+1183.57178 13754.6
+1183.90613 18961.9
+1184.24158 15851.6
+1184.57422 12856.6
+1184.90869 5329.0
+1185.24695 3027.8
+1185.57654 1973.8
+1187.97791 711.6
+1198.17249 3097.2
+1216.60242 1189.0
+1216.92065 1154.5
+1217.25708 1359.8
+1221.84033 827.6
+1376.65198 1068.1
+1474.66943 731.1
+1525.31799 696.2
+1737.77283 654.2
+1877.40637 731.2
+1877.89185 964.9
+1878.96460 2356.6
+1879.50830 18779.8
+1879.97339 2876.3
+1907.05151 7611.8
+1930.53357 1129.6
+1980.85681 651.7
+S	2549	2549	1879.98599127
+Z	3	5636.683
+Z	2	3758.124
+532.54199 1487.1
+549.15112 896.1
+562.08807 601.9
+565.92157 661.4
+676.63379 1027.3
+682.00208 544.6
+764.57831 877.4
+795.70923 851.4
+808.67426 627.0
+817.76508 592.4
+848.05078 563.2
+882.43768 644.3
+971.94934 710.4
+1198.20947 3308.1
+1214.03613 604.5
+1873.01331 751.8
+1877.31836 923.7
+1878.68701 1441.0
+1879.03247 2059.9
+1879.52661 20099.5
+1879.80676 2293.0
+1880.02588 1758.9
+1881.93640 682.5
+1907.05322 7185.9
+1919.01685 796.3
+1930.58252 864.4
+S	2550	2550	801.6009906
+Z	5	4002.96583
+240.13376 2239.1
+240.91252 696.4
+254.21814 700.3
+258.14609 1417.7
+259.55045 645.0
+262.97336 585.1
+271.41092 719.3
+271.56909 850.7
+280.16687 656.4
+294.18213 1900.1
+297.60437 713.7
+302.83984 575.5
+308.88522 678.3
+311.20874 817.0
+312.19211 814.1
+322.21866 603.1
+329.21863 2625.9
+339.20291 3504.0
+350.29309 613.7
+357.21335 5970.0
+358.14972 623.1
+370.27673 630.3
+379.28586 643.2
+381.33899 890.5
+393.25119 1289.3
+410.27475 1555.8
+411.26083 1667.1
+427.21893 3785.3
+428.22205 1156.8
+428.28647 2862.5
+429.29083 1042.2
+438.27127 12030.0
+439.27652 2354.9
+440.28067 802.8
+451.06378 598.9
+456.28204 18107.4
+457.28510 5068.2
+458.28207 788.1
+458.38467 708.3
+467.25580 744.9
+516.78894 2905.6
+517.29248 2146.3
+532.55145 2098.4
+547.51178 584.0
+582.83612 961.1
+584.62579 857.6
+586.06122 924.8
+592.79034 1199.8
+593.29248 969.0
+595.14154 603.8
+595.30872 2184.0
+596.31036 907.8
+605.31281 5730.6
+605.64667 7652.6
+605.98053 6247.0
+606.31470 2091.9
+613.31818 1727.5
+615.04175 584.0
+630.36902 932.5
+637.06061 866.4
+637.55579 608.3
+676.00696 3384.4
+676.34100 5273.5
+676.67554 3230.2
+677.01025 1644.7
+702.09283 833.8
+706.33081 1025.6
+706.58209 2326.2
+706.83667 2192.3
+707.08234 1420.8
+707.33655 1009.4
+707.54572 1045.3
+708.38818 889.6
+710.54895 1300.6
+710.74664 2035.5
+710.95349 1620.0
+721.17871 598.3
+725.02979 3561.8
+725.36359 6767.9
+725.69690 6141.7
+726.03040 1738.9
+726.40118 1677.6
+727.14825 954.9
+727.41052 1207.5
+730.36176 1298.2
+730.56189 648.3
+730.86285 733.3
+734.60461 2722.9
+734.85419 3727.1
+735.10736 4940.5
+735.35791 2331.7
+735.60712 1591.0
+736.43768 624.4
+759.61554 860.6
+762.37354 1794.2
+762.70709 1417.0
+763.04639 939.3
+763.38055 967.1
+767.47797 837.0
+768.04498 2004.3
+768.37909 5313.7
+768.71216 4702.4
+769.04712 2004.3
+769.40662 803.6
+769.78687 3241.4
+769.98853 13333.4
+770.18860 18391.9
+770.38892 18756.1
+770.58990 15091.5
+770.78955 6339.6
+770.99030 4269.6
+771.19641 2803.8
+773.39215 1176.8
+781.62207 810.4
+797.42163 802.0
+821.41351 783.6
+824.37054 706.8
+833.52667 892.0
+834.00696 720.3
+838.66919 896.2
+842.73425 732.1
+843.40491 752.6
+848.74420 3522.5
+849.07886 6220.3
+849.41144 6361.8
+849.74750 3344.2
+850.07703 1711.1
+863.66901 1800.5
+863.91681 946.3
+864.15887 1121.5
+878.92090 976.9
+879.17804 1028.3
+879.42505 1228.5
+879.67334 1690.3
+881.74225 1602.6
+882.41193 1340.7
+883.17853 2158.1
+883.42902 10257.8
+883.67938 16724.3
+883.92987 15506.1
+884.17975 7411.2
+884.42938 7441.7
+884.68073 2239.8
+885.36804 1572.8
+885.62817 683.2
+886.16510 905.5
+886.80988 882.1
+887.08600 8507.0
+887.24426 975.5
+887.30597 788.4
+887.41998 12402.7
+887.68433 78537.2
+887.93274 204420.8
+888.09033 10071.2
+888.18329 270272.3
+888.31158 1529.1
+888.43237 231792.2
+888.68353 153248.5
+888.93359 78825.7
+889.18451 33283.9
+889.31409 1131.9
+889.43256 10753.7
+889.56451 1385.5
+889.68530 6618.8
+889.80615 1227.1
+889.92963 1843.0
+890.05176 878.6
+890.23022 1068.2
+890.39838 925.6
+890.74506 1253.7
+891.01355 1201.0
+891.25836 1177.3
+898.94708 1112.8
+904.44623 779.5
+907.46600 6724.5
+907.96661 7810.0
+908.19672 4585.8
+908.44666 6972.7
+908.69666 6373.0
+908.94098 4069.9
+909.19489 2469.7
+910.09253 682.6
+910.25732 733.1
+910.46906 949.6
+911.52277 908.2
+912.44897 30000.2
+912.69891 85607.8
+912.94946 117055.8
+913.19952 98896.5
+913.44977 66343.5
+913.70044 38970.1
+913.95123 14634.2
+914.20129 3898.5
+914.45795 1270.8
+933.51190 1274.1
+934.50806 1974.3
+935.42572 682.4
+935.76508 2539.5
+936.10071 3939.8
+936.43549 3717.9
+936.76990 2287.1
+937.21460 12726.1
+937.46576 36446.2
+937.71667 48793.3
+937.96625 46030.5
+938.21747 33779.4
+938.46753 19056.6
+938.71893 7905.1
+938.97046 2856.6
+939.21252 1085.3
+941.43958 19770.9
+941.77374 37315.3
+942.10797 38299.4
+942.44257 25442.4
+942.77582 14333.6
+943.11139 5066.9
+943.44415 2645.8
+951.51251 1182.8
+952.51257 910.9
+958.46606 1051.5
+959.59595 887.1
+961.98053 4011.8
+962.23187 12180.3
+962.48309 17427.5
+962.73407 18484.0
+962.98529 14008.6
+963.23547 7330.7
+963.48560 2593.1
+963.73511 796.8
+973.46082 2448.4
+973.79517 4033.9
+974.12579 3647.0
+974.45837 2499.1
+974.79645 966.3
+979.13428 18390.2
+979.46875 34171.5
+979.80273 38114.7
+980.13696 25514.8
+980.47205 14474.5
+980.80450 5866.1
+981.13855 1919.9
+985.50452 1158.1
+1004.49500 1400.5
+1005.49481 1243.1
+1012.15814 1640.4
+1012.49323 5076.3
+1012.82489 3478.3
+1013.16235 2929.8
+1013.50287 7736.9
+1013.83746 1670.6
+1014.00708 9289.0
+1014.50708 5998.8
+1015.01215 2882.9
+1036.16724 909.2
+1039.70203 771.7
+1041.16943 2787.9
+1041.50415 5240.7
+1041.83704 6171.7
+1042.17310 4206.8
+1042.50879 2630.6
+1042.83984 992.5
+1050.58289 1973.2
+1051.58130 1211.7
+1073.83423 1313.2
+1074.50220 1878.0
+1074.84131 1235.5
+1079.51196 2983.7
+1079.84265 6980.8
+1080.17944 9473.6
+1080.51343 6555.4
+1080.84546 3320.1
+1081.18164 1526.2
+1087.03394 2091.0
+1087.54041 4241.3
+1088.04321 2338.4
+1088.54358 1115.8
+1111.87268 1650.2
+1112.19995 1079.8
+1117.20667 2650.3
+1117.53967 7342.9
+1117.87317 7253.8
+1118.20630 7061.2
+1118.54309 5194.6
+1118.87378 1571.8
+1119.21069 1074.7
+1119.51965 946.5
+1149.22717 631.3
+1149.28003 612.7
+1149.55176 781.7
+1150.88684 1394.8
+1151.22632 3196.6
+1151.55664 5169.9
+1151.88672 2726.6
+1152.05823 1272.2
+1152.22510 2133.4
+1152.56909 2106.8
+1154.54749 1718.4
+1154.88062 2049.1
+1155.21350 977.1
+1155.54443 1518.7
+1177.90393 1217.8
+1178.23010 2116.9
+1178.57153 1236.7
+1183.24060 8614.9
+1183.57288 20334.0
+1183.90710 26972.6
+1184.24072 22955.7
+1184.57507 18382.9
+1184.91028 7364.8
+1185.23779 3007.1
+1185.57483 3538.7
+1186.59973 1144.3
+1198.22656 3286.6
+1216.60132 1083.9
+1216.92834 1843.0
+1217.26819 941.1
+1412.11108 692.5
+1503.88879 705.5
+1525.35876 1295.7
+1735.79736 1011.4
+1777.04858 834.6
+1835.86157 825.1
+1870.19604 710.0
+1879.16638 2218.3
+1879.52063 19626.3
+1879.81226 2420.7
+1880.24170 731.2
+1880.82263 815.6
+1907.10327 7119.2
+S	2551	2551	1002.2510746
+Z	4	4004.973
+273.85873 558.5
+284.92673 764.8
+311.20764 690.0
+329.21741 1310.6
+339.20340 2555.9
+350.29172 820.5
+352.44217 658.7
+357.21268 2643.7
+393.24728 992.4
+410.27530 1722.8
+411.26041 1444.1
+427.21634 1389.5
+428.28754 2853.7
+436.02090 673.3
+438.27106 10037.1
+439.27414 2487.8
+456.28159 11002.1
+457.28378 2382.4
+468.19751 721.3
+526.27484 619.4
+532.55640 1970.5
+574.90588 590.2
+586.13062 572.6
+605.64728 2101.7
+605.98315 712.4
+630.39215 658.6
+659.38324 610.7
+676.65369 1500.0
+725.35950 1079.7
+749.45795 987.3
+784.84314 697.1
+794.91754 1639.1
+795.42621 739.2
+840.50586 669.3
+843.78638 740.0
+848.74207 769.7
+849.07861 1224.7
+849.41315 821.1
+849.74213 1169.4
+883.42651 1458.9
+883.67914 2448.5
+887.68250 7955.4
+887.93176 16104.8
+888.18195 26055.6
+888.43256 15232.6
+888.68408 11466.0
+888.93378 6005.4
+889.18567 2245.2
+889.42865 1188.8
+900.45477 724.5
+907.46497 16725.9
+907.96710 21058.4
+908.46820 12530.8
+908.97272 4296.4
+909.47284 1776.2
+912.44586 3182.6
+912.69751 8917.0
+912.94983 11073.4
+913.19891 8008.7
+913.45190 4424.0
+913.70129 3481.3
+913.95703 1702.8
+937.97168 901.4
+941.43719 1516.1
+941.77808 3962.5
+942.10730 3217.6
+942.44983 1642.0
+942.77454 1484.7
+943.91736 644.5
+958.47595 1036.0
+961.98120 4529.6
+962.23328 6338.6
+962.48212 11516.6
+962.73425 7214.6
+962.98438 3679.1
+963.22943 1436.5
+963.48254 936.5
+969.04865 690.3
+970.26019 647.6
+973.69281 632.7
+979.13885 1894.3
+979.46881 3360.1
+979.80139 3227.5
+980.13910 2096.3
+980.47412 995.5
+1014.00983 762.9
+1041.17126 1107.5
+1041.49829 2730.4
+1041.83679 1988.6
+1042.17371 1414.2
+1074.51221 1256.3
+1079.51379 3826.5
+1079.84521 7717.7
+1080.17896 8441.0
+1080.51428 7036.3
+1080.85229 3443.1
+1081.18896 1364.9
+1087.04065 1753.2
+1087.54077 1601.3
+1088.03967 1499.0
+1088.54919 981.1
+1103.57678 846.1
+1104.56494 827.9
+1117.54846 2324.0
+1117.87305 2331.3
+1118.20764 2291.5
+1118.54224 1310.7
+1118.88904 713.5
+1141.20813 1500.1
+1141.54541 1181.3
+1145.21155 790.5
+1145.54907 982.9
+1148.53564 1043.4
+1150.89160 1784.5
+1151.22717 4587.4
+1151.56140 3199.4
+1151.89026 3238.2
+1152.06824 1144.4
+1152.22998 2494.3
+1152.56104 1272.1
+1154.55408 915.1
+1165.01453 815.1
+1166.08142 727.6
+1177.23950 5063.0
+1177.57043 16382.5
+1177.90247 21128.9
+1178.23474 20161.8
+1178.56873 15158.0
+1178.90625 10158.9
+1179.24170 5200.7
+1179.58020 1491.7
+1179.91284 1136.3
+1180.26428 864.0
+1180.33240 812.6
+1180.44250 1299.8
+1181.10681 1068.7
+1181.44055 1626.6
+1181.77856 1473.6
+1182.09851 1412.9
+1182.54199 1611.4
+1182.85938 1430.4
+1183.24048 154341.5
+1183.57373 329809.9
+1183.90674 365580.0
+1184.24023 282265.2
+1184.57422 164615.6
+1184.90918 79043.0
+1185.11475 1027.6
+1185.24512 34415.0
+1185.58167 12823.7
+1185.93445 2805.1
+1186.05310 1629.9
+1186.30176 1513.2
+1186.37476 1567.5
+1186.60596 1221.9
+1186.71753 1303.8
+1187.06335 1118.2
+1187.91028 1624.7
+1188.02087 613.7
+1188.24097 2054.6
+1188.57861 1024.2
+1198.25220 3625.8
+1210.26147 1348.5
+1210.58972 3900.5
+1210.91846 5166.3
+1211.25745 4241.6
+1211.59180 2943.1
+1211.92493 1193.6
+1212.13562 614.0
+1212.23816 690.0
+1216.26160 39817.6
+1216.59473 91287.0
+1216.92847 106248.6
+1217.26270 84526.9
+1217.59631 53176.1
+1217.93201 23018.8
+1218.26672 9091.5
+1218.60559 3235.0
+1243.61609 1772.1
+1243.94617 3072.7
+1244.27515 2294.5
+1244.61548 1504.2
+1244.93323 921.3
+1245.28711 969.9
+1249.28333 28941.5
+1249.61780 69041.7
+1249.95142 83407.2
+1250.28552 68523.5
+1250.62012 41734.5
+1250.95435 19318.0
+1251.28650 8574.8
+1251.62000 3284.9
+1272.60901 5962.8
+1273.11133 7856.3
+1273.60974 8213.3
+1274.11414 5455.4
+1274.61560 2474.4
+1276.95837 753.0
+1280.13562 1194.8
+1282.30542 5111.3
+1282.64160 12727.1
+1282.97437 16892.5
+1283.30798 10883.9
+1283.64417 9130.0
+1283.97852 3369.4
+1284.31335 1565.6
+1330.61987 1939.2
+1331.12622 1663.2
+1331.62366 1028.7
+1404.15747 1248.1
+1411.65295 1693.1
+1412.16016 2814.9
+1412.65918 2949.7
+1413.15332 1455.6
+1413.66650 866.5
+1468.20630 1566.6
+1468.69873 2354.1
+1469.20483 2637.8
+1469.70898 1024.2
+1470.19641 800.1
+1518.72742 1006.4
+1561.25659 1171.1
+1561.75171 2913.1
+1562.26208 2611.9
+1562.76086 1865.5
+1563.25110 943.4
+1615.77063 947.8
+1616.26880 735.3
+1734.78308 5005.3
+1735.78931 6293.2
+1736.79675 3588.0
+1737.79126 1128.7
+1833.85669 1214.8
+1834.87842 1068.9
+1835.20959 805.2
+1878.65283 1729.1
+1879.08447 1367.0
+1879.27966 1092.7
+1879.58276 19635.0
+1879.97180 1394.2
+1880.12561 1083.9
+1880.54944 1211.5
+1880.82666 1002.5
+1907.11267 7442.8
+1930.55139 1073.7
+S	2553	2553	1001.7696396
+Z	4	4003.04726
+271.13080 681.4
+273.41299 598.4
+292.61395 602.5
+311.20853 1134.7
+329.21906 1309.1
+339.20340 3091.0
+357.21359 4448.9
+358.21783 680.8
+370.02487 644.4
+393.25110 1005.4
+399.30869 649.1
+410.27737 2333.5
+411.26169 1782.1
+427.21936 2016.0
+428.28888 2665.2
+438.27155 12064.6
+439.27573 3237.6
+456.28214 12261.9
+457.28494 2506.4
+532.54419 2414.7
+549.17651 748.9
+568.89899 657.0
+605.31744 1196.8
+605.65271 1217.2
+613.32684 700.8
+674.34607 805.4
+676.65521 1227.5
+726.40082 704.9
+767.46661 1050.1
+768.46643 688.6
+770.59961 672.6
+794.41870 1495.2
+794.92072 2172.3
+849.07745 1796.8
+849.41327 1393.8
+863.40314 630.7
+883.68457 1670.2
+883.92780 2395.2
+887.42822 712.7
+887.68262 7969.4
+887.93201 20197.1
+888.18286 21331.0
+888.43292 21696.9
+888.68500 9222.7
+888.93384 5403.2
+889.18359 2178.5
+898.45764 1270.3
+898.96252 1687.4
+899.45905 1213.7
+907.46558 22436.4
+907.96783 25345.8
+908.46881 12559.7
+908.96790 6437.7
+909.47644 1765.6
+912.44684 4762.4
+912.69958 9028.8
+912.94940 10673.2
+913.20007 9061.1
+913.45111 4715.0
+913.70239 2879.6
+930.54968 814.9
+937.47009 1959.0
+937.71741 1508.3
+937.96704 1385.8
+938.22467 1187.3
+941.44464 4061.2
+941.77362 4208.4
+942.11072 3559.4
+942.44495 1747.5
+954.37823 951.2
+958.48016 1058.7
+961.98212 5315.3
+962.23322 10325.2
+962.48376 11146.8
+962.73560 10227.0
+962.98718 6269.8
+963.23682 2602.8
+975.98779 770.7
+977.19440 941.4
+979.13367 2156.5
+979.47241 4186.4
+979.80176 3816.3
+980.13287 1300.7
+980.47473 1270.4
+1013.49725 869.0
+1014.51361 986.6
+1036.52478 641.1
+1041.16626 1423.7
+1041.50610 2705.3
+1041.84424 2698.4
+1042.17017 1954.7
+1057.27209 955.2
+1073.84253 1482.2
+1079.51147 4883.0
+1079.84460 10410.0
+1080.18042 9187.4
+1080.51453 8470.8
+1080.84851 3328.9
+1081.18494 1237.5
+1087.03699 2523.8
+1087.54004 2419.2
+1088.04065 1956.1
+1088.54419 856.9
+1117.20679 1784.4
+1117.53638 4786.4
+1117.87231 2855.9
+1118.21594 1736.0
+1118.53857 1912.2
+1119.52087 875.7
+1140.52112 1073.1
+1140.87866 2027.6
+1141.21790 1659.0
+1142.39917 803.1
+1145.91235 683.3
+1150.88477 1837.3
+1151.22498 5412.0
+1151.56042 7049.5
+1151.89697 4474.4
+1152.22107 2871.5
+1152.56470 1758.3
+1154.55420 1074.1
+1154.87622 771.8
+1169.55981 907.5
+1171.88855 1062.7
+1172.22278 1797.3
+1172.55750 2178.3
+1173.22522 760.0
+1177.23682 7159.6
+1177.56836 17474.6
+1177.90186 29462.3
+1178.23608 28265.0
+1178.56848 17274.6
+1178.90649 9560.2
+1179.24402 5774.2
+1179.57788 2168.8
+1179.91687 1451.5
+1180.05640 1274.4
+1180.37756 1335.6
+1181.08130 631.6
+1181.43042 1335.1
+1181.77283 1277.2
+1182.09558 1533.5
+1182.41455 817.7
+1182.55591 1992.7
+1182.83789 767.4
+1182.86890 796.9
+1183.24194 187984.1
+1183.57507 385381.0
+1183.90747 413360.0
+1184.24072 333965.1
+1184.57483 190911.4
+1184.90955 79699.4
+1185.24463 36539.3
+1185.42493 903.1
+1185.58105 13170.1
+1185.92529 3158.3
+1186.02466 1604.2
+1186.33630 820.4
+1186.61133 1234.1
+1187.11182 1056.3
+1187.56689 1213.5
+1187.77600 1392.8
+1187.91406 1351.5
+1188.08630 1118.2
+1188.23450 1521.5
+1188.44019 703.4
+1188.58875 1327.2
+1188.91846 862.4
+1189.23950 861.4
+1198.21973 3521.2
+1201.48596 806.5
+1210.26416 1812.5
+1210.59167 6263.0
+1210.92102 6014.4
+1211.25916 5186.0
+1211.58984 2667.2
+1211.92358 2167.0
+1212.26855 1288.4
+1214.36389 824.7
+1216.26257 48806.2
+1216.59570 110630.0
+1216.92883 121142.4
+1217.26343 92977.9
+1217.59680 55775.9
+1217.93262 25614.7
+1218.26636 11002.6
+1218.59900 3741.8
+1218.95703 1153.4
+1243.62085 1727.3
+1243.94873 3987.5
+1244.28406 3373.9
+1244.60950 3472.8
+1245.28308 1321.9
+1249.28467 37715.6
+1249.61877 82339.1
+1249.95203 97131.2
+1250.28625 78772.0
+1250.62036 47467.6
+1250.95422 22287.1
+1251.28955 8539.1
+1251.62695 3090.7
+1251.96631 1100.7
+1272.60986 5352.7
+1273.11328 10598.8
+1273.60974 9815.2
+1274.11255 5836.2
+1274.61938 2312.5
+1275.11340 870.1
+1280.13733 2095.6
+1280.62805 1090.3
+1281.15112 823.9
+1282.30627 5059.2
+1282.64099 14828.3
+1282.97583 18830.3
+1283.30750 15107.5
+1283.64673 7454.2
+1283.97571 4463.2
+1284.31067 2617.7
+1284.65015 1012.8
+1296.12756 952.0
+1296.63147 1027.6
+1313.68762 1046.0
+1330.11865 1309.8
+1330.61877 2777.4
+1331.13098 3243.6
+1331.63684 801.0
+1332.11279 792.1
+1375.64355 1377.3
+1377.62073 914.8
+1411.64807 1764.5
+1412.15405 2651.6
+1412.65564 3292.7
+1413.17651 1687.2
+1457.54102 732.0
+1468.19922 1832.5
+1468.70313 2336.4
+1469.20447 2985.3
+1469.69910 2063.0
+1470.19592 1562.0
+1522.68408 844.6
+1561.24976 2209.2
+1561.75317 3067.0
+1562.24158 2651.1
+1562.76074 3355.8
+1616.27490 1550.1
+1616.76855 1009.5
+1617.25354 1191.5
+1617.81494 959.9
+1619.27039 919.7
+1734.78210 7218.0
+1735.78979 7589.0
+1736.79236 4997.0
+1737.79395 1321.8
+1814.95068 782.5
+1833.88025 1304.6
+1834.86084 1457.2
+1875.34888 770.9
+1878.32996 920.8
+1878.76758 1075.4
+1879.15820 2641.0
+1879.57471 19505.6
+1880.02771 2098.0
+1880.36609 856.0
+1880.81323 792.0
+1883.09961 774.5
+1907.06360 6676.3
+1930.69678 1023.7
+1931.24255 699.7
+S	2554	2554	801.6181406
+Z	5	4003.05158
+237.30333 645.0
+240.13364 1803.8
+243.35088 798.2
+250.38321 719.8
+251.24080 662.0
+258.14532 1512.3
+258.95291 634.8
+271.60602 605.8
+272.75211 658.8
+294.18118 1133.5
+329.21783 1447.6
+339.20316 2438.6
+340.20868 649.9
+343.59653 721.6
+349.63684 611.3
+350.27075 756.0
+351.86865 633.3
+357.21378 4982.3
+358.92542 601.4
+367.19217 623.2
+385.99249 556.7
+393.25055 1437.7
+411.01089 768.2
+427.21976 3667.6
+427.58057 725.5
+428.22214 1106.2
+428.28683 1937.8
+438.27130 9889.6
+439.27411 1881.0
+456.28177 14087.8
+457.28555 2901.5
+496.24536 936.9
+516.78986 2867.4
+517.28760 1368.1
+527.31525 642.9
+528.92816 727.6
+532.52631 1900.5
+569.20410 536.1
+586.06158 844.4
+586.56213 683.6
+593.79889 700.3
+595.30786 1369.5
+605.31165 6210.0
+605.64789 6250.0
+605.98041 3541.7
+606.31525 1357.0
+613.31866 1917.0
+672.79541 640.0
+676.00543 2989.8
+676.33795 2311.2
+676.61359 1155.9
+676.67554 2789.0
+677.01093 1219.0
+692.81171 596.9
+706.32941 1437.9
+706.58459 2567.5
+706.83264 1645.5
+707.08136 1130.5
+707.14252 1009.0
+707.33307 1345.6
+707.55176 848.4
+708.39410 1101.2
+710.35559 664.8
+710.55701 951.1
+725.02972 3579.1
+725.36322 4972.7
+725.69769 3094.1
+726.03528 1280.5
+726.39948 1289.8
+727.40607 937.2
+730.15521 747.8
+730.34924 745.6
+730.55847 1877.8
+730.76703 1254.6
+734.60352 2250.4
+734.85236 4853.2
+735.10358 1665.3
+735.35712 2546.4
+735.60718 945.7
+759.87329 1342.7
+762.37695 996.9
+768.04016 2478.6
+768.37793 4242.9
+768.71191 3205.5
+769.05072 1180.3
+769.78961 4488.2
+769.98761 13802.9
+770.18829 15949.3
+770.38879 12037.1
+770.46777 697.4
+770.59052 7101.4
+770.78912 3145.0
+771.19232 1333.7
+783.49536 829.2
+788.38782 647.8
+795.72205 1044.7
+821.41278 871.8
+825.47046 676.9
+827.48834 815.0
+843.07440 1014.0
+848.74133 3215.8
+849.07642 6383.9
+849.41357 4805.4
+849.74902 2647.1
+858.12793 713.1
+861.31976 641.4
+864.14911 1028.0
+878.92639 765.0
+879.41272 1447.0
+879.67621 808.4
+879.91827 720.8
+881.74475 1104.9
+882.08447 1335.7
+883.17645 3710.8
+883.42877 8868.3
+883.67896 15020.6
+883.92792 11616.2
+884.17853 7403.7
+884.42584 4482.5
+884.67914 2205.3
+884.92859 989.3
+885.15686 1086.9
+885.40723 909.3
+885.88263 778.0
+886.80450 1251.5
+887.08679 6870.4
+887.41956 10117.3
+887.68304 85191.5
+887.93213 194273.7
+888.09131 8213.6
+888.18262 212026.8
+888.31274 1232.5
+888.43207 168898.8
+888.68311 96342.9
+888.93292 47954.7
+889.18372 21779.3
+889.31183 925.2
+889.42950 6129.4
+889.55750 1411.1
+889.68604 3473.2
+889.80768 1129.8
+889.92615 1479.6
+890.72113 992.9
+890.98120 903.5
+891.23016 761.6
+907.46582 4997.6
+907.96570 4575.0
+908.19427 3909.3
+908.44757 3559.6
+908.69537 5447.0
+908.94501 2644.3
+909.19757 1985.5
+909.72601 613.1
+912.44775 32774.3
+912.69849 76311.3
+912.94897 87000.8
+913.05188 853.3
+913.19922 73159.0
+913.45013 39449.7
+913.70099 26079.3
+913.95160 9663.3
+914.20532 4461.6
+914.45636 1844.6
+915.35809 655.6
+931.35498 826.9
+932.96228 1903.0
+933.50690 1526.9
+934.50317 1201.3
+935.44415 1042.8
+935.76135 1791.3
+936.09900 3246.3
+936.43268 3516.3
+936.76453 1435.1
+937.21545 14083.1
+937.46478 34659.4
+937.71613 32615.4
+937.96558 33435.7
+938.21704 19790.9
+938.46692 10871.5
+938.71814 3289.3
+938.96558 1908.2
+941.43933 18098.2
+941.77325 30883.7
+942.10760 30719.7
+942.44244 20902.0
+942.77539 9520.1
+943.11243 4265.3
+961.98108 5634.8
+962.23096 8073.0
+962.48230 11852.4
+962.73236 10990.8
+962.98401 7467.8
+963.23474 3558.5
+963.48541 1130.0
+963.73730 1153.2
+973.46057 1587.3
+973.79327 3048.5
+974.13031 3070.9
+974.45990 1265.5
+974.78876 1013.9
+979.13446 16548.4
+979.46857 37143.3
+979.80286 34125.0
+980.13672 18490.4
+980.47125 7698.5
+980.80597 3720.6
+986.24823 1112.8
+986.51044 702.8
+1004.49493 1465.7
+1006.48627 880.3
+1007.15253 891.0
+1012.16089 1877.8
+1012.49445 3913.0
+1012.82556 4003.2
+1013.16339 2732.2
+1013.50000 5905.4
+1014.00623 6588.0
+1014.51129 4037.2
+1015.01080 1601.1
+1038.98267 663.4
+1041.16553 1813.7
+1041.50171 5788.9
+1041.83691 5276.3
+1042.17102 3082.9
+1042.50806 1457.2
+1043.17590 804.6
+1045.87280 638.6
+1050.57788 1428.3
+1051.58813 963.5
+1057.20447 803.7
+1079.50842 2415.7
+1079.84546 5995.3
+1080.17944 6713.5
+1080.51196 2938.0
+1080.85144 1899.3
+1081.19238 1297.1
+1087.03796 2432.1
+1087.53967 3634.4
+1088.03955 1447.6
+1111.54016 1534.8
+1111.87170 1367.9
+1117.19824 2243.8
+1117.53711 7064.2
+1117.87305 6149.5
+1118.20630 5085.4
+1118.53992 3376.8
+1118.88342 885.9
+1140.48230 731.7
+1145.22791 851.0
+1151.22314 3126.6
+1151.56042 3690.6
+1151.89319 2776.0
+1152.05493 1364.7
+1152.21265 1438.6
+1152.56604 1026.3
+1154.54858 1147.2
+1154.87207 1174.3
+1155.22363 1165.8
+1155.54871 897.4
+1178.25134 1343.4
+1178.56445 1204.9
+1183.23938 8028.5
+1183.57190 18082.8
+1183.90637 21858.6
+1184.24072 15981.4
+1184.57483 11486.6
+1184.91040 4134.3
+1185.24634 1548.1
+1185.57129 1536.6
+1186.58789 776.5
+1188.33008 1052.4
+1198.18298 3787.6
+1216.59924 1129.3
+1216.92163 1157.4
+1474.89648 630.1
+1525.55481 1165.8
+1735.80310 806.3
+1879.06934 2460.3
+1879.47046 19796.5
+1879.89771 2142.2
+1907.02246 7032.7
+1907.29700 1842.9
+1918.93323 746.8
+1930.73633 809.9
+S	2555	2555	1003.0200746
+Z	4	4008.049
+268.95096 675.3
+309.56958 563.5
+311.20959 1175.8
+329.21848 1304.1
+329.72055 647.4
+339.20465 2625.8
+340.20581 640.4
+357.21512 2502.7
+410.27756 1953.6
+411.26318 1561.2
+427.22098 2505.4
+428.28864 3296.4
+438.27225 13476.1
+439.27634 2814.9
+456.28293 13578.6
+457.28632 2789.2
+460.31378 654.8
+470.27484 671.4
+532.55463 1779.8
+576.55811 654.4
+605.31897 811.3
+606.31427 795.7
+630.37958 751.1
+630.42499 602.2
+644.10999 653.9
+654.94226 898.0
+656.48785 621.5
+674.35480 778.6
+676.66571 1009.5
+677.33301 649.3
+704.47278 561.2
+725.36597 738.7
+749.45721 1378.1
+783.76465 600.9
+788.39471 662.8
+794.42255 1715.9
+794.92371 2103.9
+795.42798 1186.8
+816.20831 612.9
+821.42334 981.9
+847.08136 588.0
+848.74603 2467.7
+849.07874 2925.2
+849.41272 2228.5
+849.75458 947.7
+883.18140 1629.1
+883.42957 1159.3
+883.67981 1099.6
+883.92712 1888.2
+884.44116 629.0
+887.08557 1051.9
+887.41925 1568.7
+887.68512 10761.3
+887.93402 30439.8
+888.08795 1081.7
+888.18518 33267.7
+888.43536 20508.4
+888.68677 14264.1
+888.93591 4154.4
+889.18396 3429.0
+898.46356 984.3
+898.96283 2354.0
+899.46246 1950.6
+899.96143 727.6
+907.46857 28207.0
+907.96924 27910.2
+908.19873 920.1
+908.47192 16742.6
+908.69830 1233.7
+908.97137 6684.9
+909.47540 2361.2
+909.99896 616.2
+912.45062 7566.5
+912.70142 15454.7
+912.95117 16057.4
+913.20258 12926.7
+913.45361 6613.7
+913.70331 2805.9
+913.94611 1284.4
+937.21899 1611.7
+937.46881 5018.6
+937.71863 8028.3
+937.97028 6392.1
+938.21973 3084.9
+938.47546 2363.3
+941.44159 3061.5
+941.77667 7831.7
+942.11194 7450.1
+942.44556 4682.5
+942.77539 1819.2
+949.67914 673.5
+953.98157 636.1
+958.22717 764.9
+958.47876 1759.7
+961.98431 12115.0
+962.23499 26453.4
+962.48602 33788.4
+962.73694 33793.0
+962.87085 899.1
+962.98792 20262.3
+963.23907 10559.2
+963.48816 4934.0
+963.74170 1421.7
+964.73706 635.7
+974.12732 790.0
+979.46216 1010.0
+985.75122 836.6
+1002.50580 835.0
+1013.51007 838.3
+1014.01086 1714.8
+1014.52362 726.8
+1037.86414 641.8
+1041.16821 2672.1
+1041.50598 4389.6
+1041.84241 4096.5
+1042.17725 3522.4
+1042.50647 1546.5
+1042.82471 732.2
+1074.17810 978.2
+1079.51392 8223.6
+1079.84839 13287.8
+1080.18298 15465.4
+1080.51624 11741.3
+1080.85266 5901.2
+1081.18616 2287.9
+1087.04309 3332.5
+1087.54480 3386.1
+1088.04565 2269.0
+1088.55530 904.3
+1103.56934 1128.1
+1111.87439 825.2
+1117.20667 2352.2
+1117.54187 5780.1
+1117.87903 4528.2
+1118.21484 4741.9
+1118.54553 2126.4
+1118.87805 1144.9
+1135.19446 913.7
+1135.89160 711.1
+1140.53589 809.2
+1140.87476 1475.6
+1141.21143 2216.0
+1141.88123 1537.3
+1142.57361 707.5
+1145.55652 1710.2
+1146.20825 849.5
+1150.89587 4158.9
+1151.22742 6938.0
+1151.56250 6698.2
+1151.89551 7831.5
+1152.05933 1185.2
+1152.22412 3638.3
+1152.55920 2494.1
+1154.56311 940.9
+1154.89246 1426.2
+1155.21375 742.8
+1166.38403 804.8
+1171.56250 1291.8
+1171.90479 2079.6
+1172.22534 2576.7
+1172.87427 981.6
+1174.59375 884.3
+1177.23804 10437.6
+1177.40625 897.7
+1177.57275 23054.7
+1177.90674 36364.0
+1178.23901 30265.8
+1178.57336 18663.5
+1178.90430 8646.0
+1179.24658 4609.4
+1179.63196 2669.6
+1179.94666 3011.2
+1180.35681 1795.3
+1180.71729 1171.6
+1181.09082 2071.0
+1181.44006 3467.9
+1181.76941 4128.4
+1182.10449 2858.1
+1182.44849 1892.4
+1182.55518 1500.4
+1182.64331 1693.1
+1182.80164 1569.4
+1182.95581 848.9
+1183.24622 342713.8
+1183.57861 708257.8
+1183.90967 753427.0
+1184.24194 566226.8
+1184.57581 319694.1
+1184.91028 147652.3
+1185.24597 55742.0
+1185.58081 25127.2
+1185.71045 4881.1
+1185.93018 5677.4
+1186.05090 5045.7
+1186.18604 914.3
+1186.39587 3928.5
+1186.60608 1111.4
+1186.74622 2585.4
+1187.11572 2186.5
+1187.48853 2169.7
+1187.90356 4687.2
+1188.24048 4698.3
+1188.41968 747.4
+1188.57166 3672.1
+1188.92676 2172.8
+1189.26868 1012.5
+1190.77783 1042.9
+1191.01270 651.2
+1191.10608 646.1
+1198.24182 3122.8
+1201.51001 632.4
+1206.46082 660.6
+1210.25891 1388.8
+1210.59363 6935.8
+1210.92285 9033.5
+1211.25793 6222.0
+1211.59106 4990.2
+1211.92505 2370.1
+1212.13257 1061.7
+1212.46118 1500.7
+1212.79358 1138.3
+1213.99670 961.2
+1214.36511 1100.8
+1214.71008 987.9
+1215.05225 1159.3
+1215.41174 759.0
+1216.26514 103560.9
+1216.59814 204483.7
+1216.93164 236194.9
+1217.26550 181477.5
+1217.59863 109563.7
+1217.93359 53601.8
+1218.26782 23320.1
+1218.60083 9759.9
+1218.92688 2285.5
+1219.14075 1592.2
+1219.86194 1118.7
+1220.72778 728.4
+1221.11707 1240.9
+1221.44312 1459.2
+1221.75671 1329.0
+1232.09692 735.5
+1243.27380 1041.6
+1243.61658 3025.9
+1243.94800 4995.5
+1244.28540 3858.0
+1244.62219 2583.7
+1246.10632 875.6
+1247.66394 1218.7
+1249.28735 79420.0
+1249.62085 182894.0
+1249.95459 214286.2
+1250.28796 167014.0
+1250.62244 106245.3
+1250.95691 46348.2
+1251.29114 20983.0
+1251.63000 6112.3
+1251.96118 1454.3
+1252.25317 730.8
+1252.35974 668.0
+1254.14124 878.1
+1254.95801 1897.8
+1255.30078 1222.0
+1264.60657 1681.5
+1265.09326 1065.9
+1272.61279 7781.9
+1273.11584 11462.0
+1273.61560 10442.9
+1274.11743 4471.0
+1274.61597 2454.5
+1277.29700 884.9
+1280.13916 5224.5
+1280.63892 7771.9
+1281.14233 4109.0
+1281.64014 3145.3
+1282.14197 1330.7
+1282.30835 16686.0
+1282.64343 35489.6
+1282.97791 40675.0
+1283.31079 35410.1
+1283.64539 21399.5
+1283.97974 12208.8
+1284.30994 4462.3
+1284.64783 1718.0
+1295.62720 1191.9
+1296.13586 2083.4
+1296.62402 990.3
+1313.67468 2074.2
+1314.01318 911.2
+1314.35071 1676.4
+1314.66956 1238.3
+1329.66345 1090.4
+1330.11182 811.7
+1330.62573 2541.8
+1331.12170 2194.9
+1331.64209 1019.2
+1375.66199 1148.2
+1379.21973 798.6
+1403.64392 1267.6
+1411.66040 3013.6
+1412.15942 5522.1
+1412.66370 4726.0
+1413.17688 1768.3
+1413.65735 982.1
+1460.19983 1320.2
+1468.19824 2661.0
+1468.70557 4522.1
+1469.20496 4294.1
+1469.71143 3171.1
+1470.20117 1298.1
+1507.75427 709.5
+1518.74121 1583.9
+1522.72449 987.2
+1552.72510 1235.7
+1561.24780 2379.7
+1561.75220 5379.3
+1562.25623 4375.2
+1562.75928 3097.4
+1563.26404 1714.4
+1563.78760 895.5
+1615.76245 1050.9
+1616.27014 1444.2
+1616.77820 1167.2
+1618.81543 676.8
+1619.28809 1298.1
+1619.78088 1080.2
+1673.26245 821.0
+1694.57922 667.6
+1734.78833 10064.3
+1735.79370 9747.9
+1736.79944 4892.1
+1737.80200 1668.7
+1775.37402 1003.5
+1813.91370 1876.9
+1814.92737 1091.0
+1815.94019 998.1
+1833.85730 1893.8
+1834.86560 2239.1
+1878.42126 756.6
+1878.69360 1043.7
+1879.58936 18708.0
+1880.60266 1081.8
+1907.12842 7422.4
+1930.54456 1090.0
+S	2557	2557	1879.9678246
+Z	2	3758.088
+Z	3	5636.628
+511.23932 610.7
+532.60236 1909.7
+549.20001 607.2
+549.23273 509.8
+606.26367 593.1
+646.49982 648.6
+676.65430 853.3
+884.26654 635.1
+964.48486 630.1
+1057.26465 770.8
+1198.35278 3262.7
+1591.62561 558.0
+1603.75989 627.9
+1876.13159 837.7
+1876.80090 643.6
+1878.68115 1164.1
+1878.89380 843.0
+1879.28870 2608.6
+1879.58435 19602.5
+1879.96033 2202.3
+1880.48035 1290.5
+1907.05298 7544.2
+1930.73413 900.9
+S	2558	2558	801.8016246
+Z	5	4003.969
+217.50601 615.1
+219.40506 689.0
+222.32977 574.7
+238.70360 705.6
+240.13417 2028.3
+248.69353 598.2
+249.31769 734.9
+258.14435 1288.3
+294.18216 1955.3
+301.20956 619.0
+311.20856 1424.8
+329.21869 2013.7
+339.20364 3551.1
+342.30515 633.6
+342.68420 584.8
+357.21344 5780.7
+357.74030 584.1
+358.21832 957.0
+381.38736 739.9
+393.24954 1703.1
+410.27643 972.5
+411.25970 2158.0
+427.21863 4609.3
+428.22305 1254.9
+428.28665 2931.3
+438.27148 12556.6
+439.27518 2979.6
+456.28162 19318.3
+457.28561 4042.4
+458.28824 1111.7
+467.25381 649.5
+493.04111 598.0
+496.24048 1462.6
+514.25439 779.4
+516.78809 2402.1
+517.29028 1484.9
+532.54907 1012.6
+532.58191 1594.6
+561.26440 1127.7
+573.32819 625.2
+578.56342 662.8
+582.33368 753.7
+592.78766 1493.7
+593.04156 609.6
+595.30920 1508.5
+605.31250 8074.6
+605.64709 7832.1
+605.98090 5783.5
+606.31616 1910.0
+613.32227 1363.4
+617.22437 641.0
+618.36530 843.1
+625.11365 754.0
+630.46124 805.7
+633.23212 530.2
+640.32227 979.3
+676.00629 2661.5
+676.33887 3903.6
+676.62103 947.0
+676.67719 1994.9
+688.31677 851.5
+706.32550 768.9
+706.58710 2076.5
+706.83240 2027.7
+707.08691 1281.5
+707.14343 1455.5
+707.34308 1488.1
+708.39423 1391.3
+710.54376 868.3
+710.74847 1908.0
+710.94885 1084.3
+725.02887 3864.4
+725.36304 6132.5
+725.69623 4673.9
+726.03064 2379.5
+726.40344 2671.7
+727.39923 1246.1
+730.36255 1762.5
+730.75983 1120.9
+731.17401 949.9
+734.59650 1683.8
+734.85309 2561.1
+735.10553 5475.9
+735.35413 2312.7
+735.60742 983.6
+759.87531 1050.6
+760.12439 843.8
+762.04254 1128.7
+762.37592 1131.4
+762.70325 828.4
+766.38013 948.9
+767.47144 858.7
+768.04132 3459.0
+768.37878 4851.0
+768.71228 4652.0
+769.05096 2590.0
+769.78784 7754.8
+769.98810 17556.7
+770.18835 19963.8
+770.39001 18328.6
+770.58984 14596.7
+770.78918 8829.3
+770.99146 3226.9
+771.19379 1297.7
+795.71704 1381.7
+825.47815 831.6
+835.96130 854.9
+837.74872 729.9
+838.40112 884.6
+839.46210 724.8
+843.73389 1180.9
+848.74219 4929.4
+849.07806 8817.8
+849.41193 7000.9
+849.74713 3525.0
+850.08386 1588.6
+850.42590 965.0
+852.44727 735.0
+863.42218 1148.8
+863.91541 1222.2
+864.17505 1175.8
+864.43396 1004.6
+878.93292 1194.5
+879.67670 966.8
+881.41681 1422.1
+881.74487 2310.2
+882.42310 983.9
+883.17926 3283.4
+883.42859 12840.8
+883.67902 13551.9
+883.92963 15379.5
+884.18054 8213.1
+884.42529 5097.5
+884.67432 2255.0
+885.14105 1491.2
+885.39240 1436.7
+885.63788 1818.0
+885.87793 1047.0
+886.13318 1262.1
+886.73486 549.1
+886.80872 1560.3
+887.08466 8201.9
+887.42029 13795.3
+887.68402 108607.0
+887.93262 245987.7
+888.09113 11636.1
+888.18304 290594.9
+888.30969 1732.4
+888.43237 238839.8
+888.68341 140415.5
+888.80011 998.2
+888.93317 76144.4
+889.18488 31783.1
+889.30646 1146.1
+889.43176 12013.4
+889.56738 1239.3
+889.68066 3921.4
+889.80591 1596.8
+890.26117 1026.4
+890.48566 1965.9
+890.73975 2153.8
+890.99042 1859.6
+891.23987 905.9
+892.18005 985.8
+896.16058 661.5
+898.40576 1376.4
+898.97192 829.0
+907.46448 6146.6
+907.96906 8072.4
+908.19647 4163.4
+908.44800 6124.0
+908.69397 5243.2
+908.94519 2599.5
+909.19873 1665.0
+909.46527 913.9
+910.54846 853.2
+911.75653 843.5
+912.44843 38374.8
+912.69873 95808.0
+912.94904 120023.6
+913.05072 1192.0
+913.19946 99746.0
+913.44989 64502.9
+913.70074 34360.7
+913.95129 17018.3
+914.20367 5281.2
+914.46136 1364.4
+915.86993 775.4
+928.63922 745.8
+933.21783 1051.9
+933.51215 1888.5
+934.50940 1529.3
+935.76489 2060.0
+936.09979 3321.6
+936.43573 3604.3
+936.76532 2168.5
+937.21509 19745.9
+937.46564 44135.6
+937.71625 57375.8
+937.96625 48543.4
+938.21729 30290.4
+938.46765 17760.9
+938.71893 9360.9
+938.97040 3402.6
+939.22321 1386.5
+941.43958 23876.4
+941.77380 41766.9
+942.10785 37196.1
+942.44232 23961.9
+942.77643 13585.3
+943.10968 5837.8
+943.44543 1262.4
+951.51093 1439.4
+959.97693 825.5
+961.98419 5198.3
+962.23181 13620.4
+962.48218 19745.9
+962.73407 19269.2
+962.98541 13189.7
+963.23743 7001.0
+963.48773 2268.6
+963.74481 1225.9
+973.46442 2543.4
+973.79340 3946.6
+974.12598 4483.2
+974.45807 1509.9
+974.78577 948.2
+975.14209 742.2
+979.13403 22019.2
+979.46875 42282.8
+979.80273 42906.5
+980.13647 24447.3
+980.47168 13872.2
+980.80664 4182.2
+981.14362 2317.1
+986.00378 1084.6
+986.24829 1267.3
+1004.49469 1928.4
+1004.98669 891.5
+1005.50006 1223.0
+1006.50134 1094.7
+1007.16290 1126.8
+1012.15466 2647.9
+1012.49072 4488.2
+1012.82471 4988.1
+1013.16077 3755.5
+1013.50183 9162.0
+1013.83759 901.7
+1014.00604 8271.1
+1014.50537 5759.9
+1015.00848 2053.6
+1017.47626 716.7
+1041.17151 4144.8
+1041.50159 6252.3
+1041.83667 6270.6
+1042.16931 3622.2
+1042.50928 2925.4
+1042.83521 1201.2
+1050.57678 1680.8
+1051.58069 993.3
+1074.16821 1216.8
+1074.50391 808.4
+1079.51355 4337.3
+1079.84387 7633.0
+1080.17810 9655.6
+1080.51367 7373.0
+1080.84705 3526.6
+1081.17725 2268.4
+1087.03992 2048.1
+1087.53931 4697.4
+1088.04102 3125.2
+1088.54675 1441.5
+1089.02185 947.2
+1111.86523 1202.2
+1117.20557 4154.3
+1117.53943 6621.8
+1117.87219 7748.3
+1118.20618 7301.7
+1118.54541 2984.9
+1143.53906 785.6
+1150.88574 1626.5
+1151.22278 3081.9
+1151.55798 4924.5
+1151.89575 2159.8
+1152.06311 1916.5
+1152.23047 2181.7
+1152.56140 2058.0
+1154.55237 1144.1
+1154.87512 1833.8
+1155.22437 1673.3
+1155.56396 853.1
+1163.65466 915.1
+1164.66077 782.3
+1178.23096 962.4
+1178.56030 1259.2
+1178.91699 705.1
+1183.23755 10920.6
+1183.57251 24811.0
+1183.90625 29033.0
+1184.24084 22390.9
+1184.57471 14454.8
+1184.91101 7467.1
+1185.24219 2715.6
+1185.57410 2967.7
+1198.30664 2983.7
+1216.59644 2151.3
+1216.92847 1497.6
+1217.26123 2556.1
+1217.59167 822.7
+1217.91833 932.0
+1375.63647 1232.6
+1394.98376 722.4
+1525.54932 822.4
+1734.82935 750.6
+1735.76465 1113.6
+1736.78613 712.1
+1756.87634 792.2
+1879.54016 19638.5
+1880.06799 790.3
+1907.10327 7099.9
+1930.79333 781.1
+S	2559	2559	1002.2515746
+Z	4	4004.975
+300.18579 79938.3
+350.28299 104761.2
+438.26862 208841.9
+456.28125 200142.4
+467.38492 63260.0
+482.80844 74741.3
+506.49435 71876.9
+532.58954 167035.8
+540.41034 70330.1
+542.31079 67714.4
+549.21680 73393.1
+630.48560 108479.7
+676.64209 104502.4
+723.49554 65742.0
+731.21106 80788.7
+768.34650 75335.4
+792.43231 71262.6
+795.73108 95458.3
+824.16748 78756.4
+887.68250 209969.4
+887.92694 267246.9
+888.18158 161243.1
+888.42749 166448.4
+888.69135 102178.6
+907.46466 192211.1
+907.96722 219840.1
+908.46906 143483.9
+912.69928 129363.4
+912.94891 200159.3
+913.19586 136614.4
+952.80682 74161.2
+961.98029 143195.0
+962.22748 255098.4
+962.48407 247229.0
+962.98975 119073.9
+1000.46277 76297.9
+1020.80933 82361.1
+1023.13000 72930.7
+1024.18469 68751.0
+1079.83740 96755.5
+1080.18616 98071.0
+1080.49622 82780.0
+1177.56787 152428.6
+1177.90393 216565.1
+1178.22510 152564.7
+1178.55347 112002.2
+1178.88440 170085.1
+1183.23718 2819999.3
+1183.57056 6408917.0
+1183.90503 6103947.0
+1184.23975 3577636.3
+1184.57410 2023695.6
+1184.90955 678678.6
+1185.24878 227709.8
+1198.32288 367424.3
+1216.26147 809440.9
+1216.59338 1589109.8
+1216.92761 1666046.4
+1217.26233 1183283.1
+1217.59644 540721.7
+1217.93591 162147.0
+1249.28271 599509.1
+1249.61719 1209335.1
+1249.95239 1290045.3
+1250.28491 913026.7
+1250.61816 301977.2
+1250.95435 250685.0
+1272.62744 91771.2
+1273.12292 98868.3
+1282.30579 111586.1
+1282.63867 268365.4
+1282.96570 180814.0
+1283.30249 91907.4
+1343.21924 69832.7
+1468.48975 76536.2
+1525.59167 82906.4
+1840.87109 72075.5
+1863.06836 65395.9
+1878.16821 113632.5
+1879.54761 2173308.3
+1879.96802 109976.2
+1880.31519 89572.2
+1907.06287 861187.8
+1918.93127 89883.6
+1930.82605 100798.6
+1940.93250 75317.2
+S	2561	2561	801.6022106
+Z	5	4002.97193
+212.31081 55910.9
+214.77911 54736.2
+215.92485 62206.0
+240.13373 108686.5
+247.04228 68174.2
+269.61194 65434.8
+271.45947 64220.0
+271.92203 82232.1
+287.28445 70829.5
+323.81949 76448.3
+329.21860 132345.4
+332.63187 68678.4
+339.20267 149715.2
+341.87595 66021.8
+350.07028 69262.0
+357.21283 268844.3
+364.85306 81402.9
+410.27634 91801.5
+412.88177 67089.7
+421.71692 69712.2
+427.21664 199362.7
+427.57642 74982.7
+428.28378 144069.8
+438.27020 491892.9
+456.28131 754278.3
+457.28546 148346.8
+475.89774 74027.3
+511.50833 70994.7
+516.78723 199647.9
+517.29279 93283.2
+526.29144 102968.8
+530.37341 62033.2
+532.60217 179724.7
+576.77869 65593.8
+605.30988 538146.4
+605.64618 244570.7
+605.98041 193777.4
+606.31732 95867.0
+613.31622 122005.8
+676.00879 171503.9
+676.33673 144887.0
+676.66882 107875.3
+706.58209 87011.9
+706.82776 160617.6
+710.54388 139792.4
+725.02930 298747.3
+725.36340 343269.3
+725.69440 112492.1
+726.01526 73326.6
+726.96600 69433.0
+727.38330 64469.5
+730.15533 128323.1
+730.55975 148573.0
+734.59924 217884.8
+734.85425 208552.8
+735.09998 113678.9
+735.35626 162795.5
+768.03973 244487.5
+768.37726 326549.7
+769.78668 499072.2
+769.98706 927477.6
+770.18713 750128.7
+770.38965 588560.4
+770.58765 322451.9
+770.79681 103158.8
+848.74475 229934.9
+849.07581 211001.2
+849.41943 152184.9
+849.74408 143410.0
+863.67169 109230.7
+879.19305 95964.5
+883.18176 260170.1
+883.42633 865708.3
+883.67609 1058646.5
+883.92725 958814.2
+884.17731 279956.3
+884.42957 192926.1
+887.08801 517189.1
+887.41675 769960.8
+887.68109 7593459.5
+887.93054 14790115.0
+888.18121 13315183.0
+888.43103 9899564.0
+888.68250 5256092.5
+888.93195 2071786.4
+889.18396 817082.6
+889.32568 99853.0
+889.41882 153392.7
+889.68445 87836.1
+889.83966 69470.5
+890.47217 105378.4
+907.46643 167296.6
+907.96765 264886.8
+908.19513 213310.8
+908.44171 202872.6
+908.69373 445275.2
+908.94263 136669.6
+912.44720 2813224.5
+912.69733 5104802.5
+912.94775 5791834.0
+913.19855 3895301.5
+913.44940 2079073.9
+913.70068 803652.6
+913.94775 371502.3
+914.20343 89209.5
+915.31787 89194.9
+933.52344 85457.9
+936.10126 201150.4
+936.43140 138594.8
+937.21484 930611.6
+937.46436 2190628.5
+937.71576 1859564.5
+937.96503 1407025.6
+938.21649 856191.4
+938.46625 368197.5
+938.72052 87365.7
+941.43823 1525964.6
+941.77307 2032886.1
+942.10657 1881026.3
+942.44092 958796.1
+942.77643 439903.5
+943.11774 161562.6
+961.97821 286202.0
+962.23138 458209.2
+962.48236 942825.4
+962.73285 561026.0
+962.98413 371165.4
+963.23535 147169.4
+973.47058 102111.9
+973.81030 89506.6
+974.12964 181890.0
+979.13354 1366654.6
+979.46680 2030525.8
+979.80133 1573414.3
+980.13495 1037347.6
+980.46930 556353.7
+980.80481 261002.9
+985.50696 87947.4
+986.23895 83297.8
+1004.48187 122763.6
+1012.15320 218954.8
+1012.49622 162271.0
+1012.82025 212698.3
+1013.16626 193559.0
+1013.49835 188380.4
+1014.01208 247722.7
+1014.49933 158980.0
+1041.16870 152460.0
+1041.49878 375221.2
+1041.83301 281836.8
+1042.16760 186997.8
+1042.49744 107188.0
+1057.27991 107551.5
+1079.51257 195908.0
+1079.84473 425913.1
+1080.17871 379918.1
+1080.51794 225638.4
+1087.03137 125264.0
+1087.54163 138954.5
+1117.20935 115463.2
+1117.54248 319973.8
+1117.87683 340477.2
+1118.20227 249058.5
+1118.54590 145988.9
+1148.22253 108585.3
+1151.55823 195845.8
+1151.88672 182405.9
+1182.57312 86261.6
+1183.23657 568753.4
+1183.57019 1276452.5
+1183.90674 1304581.8
+1184.24036 901896.9
+1184.57214 536305.0
+1184.90039 155516.1
+1198.34521 387161.2
+1216.91797 113200.9
+1525.52490 117887.6
+1564.31213 65639.6
+1587.40759 69174.4
+1777.35889 124164.9
+1878.64783 101134.5
+1879.18921 385833.6
+1879.61414 2131370.8
+1880.04370 270277.9
+1880.69238 127277.3
+1905.78528 75609.4
+1906.99121 796955.4
+1930.77087 104729.2
+S	2562	2562	1001.7503521
+Z	4	4002.97011
+301.45691 58226.0
+316.85440 72354.4
+350.25800 80732.1
+411.59219 86962.9
+482.86658 62638.2
+532.60632 214642.2
+581.07050 62666.4
+598.26129 63913.3
+634.14105 65309.3
+676.62695 106103.2
+731.18341 82140.4
+795.71857 85628.0
+803.31152 68388.4
+875.64362 65984.8
+887.92950 106328.4
+1026.62488 68414.7
+1060.74170 69013.3
+1183.23621 798993.8
+1183.57080 1661314.5
+1183.90527 1554697.0
+1184.24097 1018978.2
+1184.57104 380006.3
+1184.90552 142892.8
+1198.36316 322318.1
+1216.26270 348030.5
+1216.58997 403674.6
+1216.92603 473074.3
+1217.26367 237658.6
+1217.59924 208977.6
+1217.94409 72722.0
+1246.67554 75068.6
+1249.28430 146833.8
+1249.61755 423214.9
+1249.95740 178834.8
+1250.28503 206948.1
+1250.63464 89383.4
+1321.33777 64623.2
+1407.11072 64656.0
+1777.29749 90537.6
+1791.23181 59972.5
+1869.82349 68127.5
+1879.17188 325971.2
+1879.49426 1991818.8
+1879.82678 351294.8
+1906.18274 78595.2
+1906.93250 758789.9
+1942.93066 73583.6
+S	2563	2563	1002.7523246
+Z	4	4006.978
+269.20172 7535.6
+280.20535 7384.9
+311.20779 21071.0
+312.19400 7598.9
+329.21970 12071.8
+339.20270 29098.8
+342.29602 11305.3
+357.21371 58346.3
+365.25360 9041.4
+366.09848 7303.6
+393.24881 20776.5
+410.27438 22228.7
+411.26462 21864.3
+427.21997 20590.9
+428.28717 48559.4
+429.28802 10837.3
+438.27130 162104.0
+439.27374 35529.7
+456.28162 180387.9
+457.28543 36398.4
+532.58783 27279.1
+534.72510 7431.1
+588.60321 7724.3
+598.27814 6556.4
+598.30847 6168.4
+605.31537 14782.6
+605.64545 12194.7
+605.98169 17593.3
+671.59723 6977.6
+674.35303 11552.0
+676.63312 13076.2
+678.08740 7164.6
+749.45374 12671.4
+763.03345 7156.5
+767.46655 15297.1
+794.41260 16175.9
+794.92114 21098.2
+795.70801 11549.6
+807.12677 7652.7
+818.84375 7698.3
+848.75055 9214.1
+849.41199 18512.9
+883.19287 9228.5
+883.43207 14766.0
+883.68237 17895.3
+883.93213 11223.9
+887.07935 10917.0
+887.68256 134384.3
+887.93152 265564.8
+888.18274 299027.1
+888.43365 227641.7
+888.68408 107534.6
+888.93561 34592.5
+898.95264 14405.9
+907.46637 253036.3
+907.96710 267838.5
+908.19324 13871.7
+908.46851 155143.6
+908.96814 61675.2
+909.46594 14077.4
+910.10486 7407.5
+912.44879 74656.5
+912.69958 157126.5
+912.95020 140357.4
+913.20001 130935.5
+913.44989 70432.4
+913.70697 17460.7
+937.21710 8659.3
+937.46820 31341.8
+937.71692 25878.6
+941.43939 31238.5
+941.77527 53860.8
+942.10852 32604.7
+942.44543 29989.5
+942.77356 8283.7
+950.33051 8763.1
+954.00189 16808.5
+954.49542 24251.2
+958.46863 13108.0
+961.98199 84787.7
+962.23248 171272.6
+962.48383 201474.9
+962.73553 145691.8
+962.98566 65381.7
+963.24103 27151.0
+963.48181 10824.7
+979.13879 19993.5
+979.46881 66490.5
+979.80219 44182.4
+980.13818 32635.3
+980.46655 14149.7
+1013.49756 9073.6
+1041.16882 16343.9
+1041.49780 18180.2
+1041.83728 33258.8
+1042.17285 18987.7
+1042.50684 10530.8
+1047.50293 8377.5
+1057.22937 8753.5
+1079.51392 62494.3
+1079.84460 114377.5
+1080.18115 128875.7
+1080.51233 68300.5
+1080.84399 23780.8
+1081.17700 12723.7
+1087.04089 27135.6
+1087.54028 30868.7
+1088.04309 15639.6
+1088.53015 11908.3
+1104.54492 10222.2
+1111.54443 9003.7
+1117.21167 21223.3
+1117.54150 44874.7
+1117.87268 32309.1
+1118.20630 31753.8
+1123.14709 7864.3
+1140.51611 9895.0
+1140.88684 19190.7
+1141.20471 9878.7
+1141.55151 13672.5
+1142.20850 8952.3
+1145.55371 12160.7
+1150.89209 30323.6
+1151.22339 53953.1
+1151.55835 57274.4
+1151.89441 39805.4
+1152.22437 24679.1
+1152.55444 12887.5
+1154.55273 14948.6
+1155.54663 10358.7
+1171.55688 10107.2
+1171.88843 11588.4
+1172.22681 30897.3
+1172.55920 21877.0
+1177.23279 85347.9
+1177.57117 253811.5
+1177.90308 287496.6
+1178.23682 236353.5
+1178.57080 183890.9
+1178.90820 59824.7
+1179.26074 43510.5
+1179.62964 36937.1
+1179.99524 35220.8
+1180.33960 30340.3
+1180.68359 20408.8
+1181.00415 12127.4
+1181.47278 12703.1
+1181.77576 16921.7
+1182.13611 18268.9
+1182.49585 15105.5
+1183.24231 2686089.5
+1183.57507 5230548.5
+1183.90735 5215358.5
+1184.24048 3657931.5
+1184.57434 2014991.0
+1184.90942 937819.0
+1185.24512 315554.9
+1185.41089 15589.3
+1185.57971 112977.8
+1185.70532 27889.6
+1185.93652 22803.2
+1186.01038 20088.0
+1186.18530 9833.3
+1186.27356 9770.0
+1186.36426 12876.9
+1186.55005 8063.5
+1186.60071 8441.1
+1186.82532 11808.6
+1187.14600 22383.4
+1187.26440 7161.9
+1187.50989 34471.2
+1187.85498 39170.6
+1188.19751 31474.9
+1188.54272 17747.8
+1188.87390 13533.7
+1189.50500 7311.3
+1198.31104 32516.5
+1210.26733 16712.0
+1210.58850 56791.1
+1210.92273 54190.9
+1211.25879 66244.0
+1211.59521 46458.0
+1211.93726 19112.1
+1212.26355 14494.4
+1213.21228 9299.1
+1213.44788 7842.8
+1216.26196 769977.7
+1216.59570 1391963.6
+1216.92883 1509217.4
+1217.26343 1063295.4
+1217.59656 576832.6
+1217.93201 290257.3
+1218.26672 103292.8
+1218.60693 28354.3
+1218.93237 12289.4
+1219.48560 9217.5
+1221.06982 10403.8
+1243.60925 24983.2
+1243.94751 37827.3
+1244.27942 39665.8
+1244.61658 23350.1
+1244.96106 12456.3
+1245.64246 8523.5
+1249.28503 508037.8
+1249.61853 1107759.0
+1249.95239 1221564.6
+1250.28662 856095.2
+1250.62109 498859.3
+1250.95459 204939.0
+1251.28894 81592.2
+1251.62207 35676.2
+1264.11230 10210.0
+1272.61267 64341.0
+1273.11462 114900.0
+1273.61328 95752.7
+1274.11548 48043.3
+1274.61340 16634.8
+1282.30652 101843.2
+1282.64148 217863.6
+1282.97729 195204.8
+1283.30847 131277.3
+1283.64465 79098.2
+1283.97717 43136.1
+1284.31482 21026.8
+1330.62659 34098.2
+1331.12524 14587.2
+1411.65601 12577.5
+1412.15796 34677.2
+1412.65454 27397.5
+1413.16345 10132.3
+1468.19897 15584.9
+1468.70459 27051.2
+1469.20605 19443.5
+1469.70557 25406.2
+1525.53088 12646.9
+1561.25098 15595.2
+1561.74805 30415.8
+1562.25537 34578.7
+1562.75403 19296.4
+1616.26306 17243.8
+1619.25647 8260.4
+1676.34119 8370.4
+1715.78601 8358.1
+1734.78467 85615.3
+1735.79016 88025.5
+1736.78442 37730.5
+1833.85791 10984.0
+1834.85046 13814.7
+1878.90527 12685.2
+1879.06409 12445.7
+1879.49902 233262.1
+1879.76843 24644.4
+1879.94775 22683.6
+1906.73584 8187.5
+1907.01111 86425.8
+1930.79419 15119.4
+S	2565	2565	801.6007466
+Z	5	4002.96461
+218.34320 1825.7
+234.19597 1870.0
+240.13544 5126.9
+254.74200 1954.3
+299.81851 1996.0
+305.49878 1985.8
+311.20865 3022.8
+312.21140 1905.7
+329.21948 6794.2
+339.20343 10712.6
+357.21460 17928.3
+358.21902 2519.8
+407.26724 2511.0
+410.27707 5204.2
+411.26251 4740.7
+427.21948 9947.2
+427.56766 2533.9
+428.28757 8351.9
+438.27182 37728.7
+439.27600 8603.9
+456.28241 54935.8
+457.28571 15318.6
+476.26349 2063.3
+482.68002 1627.7
+494.77203 2367.9
+496.24280 2705.5
+516.79156 6575.1
+517.29315 3533.0
+525.40973 1794.9
+526.80225 2398.2
+530.89282 1914.7
+532.55499 6057.6
+567.06543 1653.4
+582.33002 2133.4
+583.29883 2830.2
+586.05896 3275.8
+592.78552 3205.0
+593.29547 3059.6
+595.31378 3654.1
+595.52393 1635.5
+605.31299 22722.1
+605.64758 23894.8
+605.98163 16096.9
+606.31641 8297.6
+613.32098 5061.1
+630.43878 2408.3
+636.36829 2208.5
+637.05933 3009.0
+640.32080 11274.4
+641.32483 3701.3
+651.34619 2409.4
+676.00739 12744.7
+676.34082 14972.3
+676.67676 6774.5
+677.00897 2663.2
+688.32709 2347.2
+705.88092 3020.8
+706.33862 5276.2
+706.58429 13742.4
+706.83716 11588.5
+707.08221 4203.8
+707.13843 2118.5
+707.34241 7537.5
+707.58057 3043.6
+710.54987 6878.1
+710.75006 10293.8
+710.94739 7709.7
+711.14526 2379.9
+725.03296 15999.7
+725.36426 20789.9
+725.69885 11239.0
+726.03320 3850.9
+726.40295 9993.2
+727.39844 2890.2
+730.16748 2997.1
+730.36298 8843.1
+730.56488 11488.7
+730.76160 7738.0
+730.96033 5670.8
+734.60309 7248.4
+734.85461 18534.1
+735.10608 19682.8
+735.35657 9880.7
+735.60577 5438.9
+736.88702 2144.6
+749.08643 2350.0
+755.41132 13389.3
+755.91315 10750.3
+756.41223 3569.0
+756.90802 3331.0
+759.37335 2804.8
+759.62073 6559.3
+760.12115 2975.2
+762.03851 2987.9
+762.37872 4571.5
+762.71124 4043.5
+766.58954 3382.1
+766.78540 3507.2
+767.35400 2257.7
+768.04303 17392.1
+768.37897 16296.4
+768.46368 2702.4
+768.71436 11334.0
+769.05194 5282.5
+769.36298 7253.7
+769.78876 34768.9
+769.98938 85365.0
+770.18964 101608.4
+770.39136 88834.0
+770.59039 59938.2
+770.79224 25848.4
+770.99237 13075.8
+795.71246 3185.9
+820.92834 3103.2
+821.41559 3098.5
+825.47968 3036.0
+834.14832 2507.2
+837.40625 2229.6
+838.40576 4056.5
+843.40155 2480.0
+848.74585 18205.9
+849.07965 29042.8
+849.41272 19111.6
+849.74817 13879.0
+850.08289 5400.8
+859.17389 2777.6
+863.66858 8723.2
+863.92151 9955.9
+864.16840 4801.9
+864.43866 3953.2
+874.92603 2090.8
+876.78265 2345.7
+877.66577 2670.1
+878.92169 2947.1
+879.16895 2941.1
+879.42755 5174.3
+879.92188 3389.9
+881.40271 4676.6
+881.74542 5099.0
+882.07141 3253.1
+882.41809 3487.6
+883.18213 17532.3
+883.43024 54500.6
+883.68127 77211.0
+883.93024 63475.2
+884.17999 48168.4
+884.42816 18638.7
+884.67950 11705.3
+884.95685 3663.6
+885.13367 4250.1
+885.29407 2912.1
+885.39331 6461.2
+885.54327 3489.5
+885.77631 2879.8
+885.85706 3150.1
+886.10938 4856.6
+886.29358 3490.2
+886.43707 3066.6
+886.55023 7593.9
+886.79419 7953.4
+887.09192 36083.0
+887.42224 59587.0
+887.55292 3336.2
+887.68616 710337.7
+887.93451 1478979.3
+888.18408 1565323.3
+888.30518 6278.3
+888.43298 1201748.6
+888.68396 660615.7
+888.80127 4288.7
+888.93402 336183.3
+889.06506 4091.1
+889.18500 134697.7
+889.32611 9140.9
+889.43048 32641.5
+889.57361 8825.6
+889.68719 12850.9
+889.81952 6013.8
+889.94666 6332.4
+890.08563 4940.6
+890.25159 6200.2
+890.34564 3901.4
+890.43213 2908.5
+890.51215 2373.6
+890.60608 3286.8
+890.73785 3749.2
+890.85138 3829.1
+890.98877 5374.0
+891.09576 3946.9
+891.24127 6621.3
+891.33020 2560.8
+891.49921 4156.1
+892.22308 2206.6
+893.42822 4558.0
+893.68781 3607.2
+893.94110 3029.4
+898.40717 18104.9
+898.95270 4074.1
+899.40820 6146.5
+900.05780 2526.9
+900.41223 2497.5
+907.46692 29902.8
+907.96936 26862.7
+908.19604 22548.1
+908.44952 23986.8
+908.69617 23858.3
+908.94464 14738.5
+909.19714 10438.3
+909.53729 2694.3
+910.04370 3115.3
+910.53949 3343.8
+911.51630 2941.6
+911.76202 3150.5
+912.44995 284169.3
+912.70020 617756.0
+912.95020 707369.6
+913.20038 537841.7
+913.45081 314421.5
+913.70142 150325.0
+913.95215 73930.9
+914.19946 19583.0
+914.44800 9315.8
+914.69513 2621.5
+915.88232 3652.9
+932.96545 6042.4
+933.20789 5503.1
+933.44171 3666.5
+933.52472 4649.0
+933.71381 7418.1
+934.51123 3448.4
+935.43884 3894.2
+935.76910 16549.8
+936.10138 18229.3
+936.43335 16801.1
+936.77124 6513.4
+937.21625 147134.0
+937.46667 290639.9
+937.71741 368910.9
+937.82062 2115.3
+937.96722 261706.7
+938.21826 177900.6
+938.46906 96398.2
+938.72040 25479.0
+938.97156 12851.0
+939.23883 4629.5
+941.44006 103624.4
+941.77484 180916.1
+941.96906 4341.9
+942.10925 168352.6
+942.44293 111813.8
+942.77698 50777.5
+943.10870 14255.8
+943.44781 6815.4
+951.51569 4385.1
+958.47668 4325.5
+961.98297 38692.3
+962.23315 110719.8
+962.48413 122861.1
+962.73480 102573.4
+962.98553 66829.7
+963.23596 27772.1
+963.48676 15318.4
+963.73462 3257.9
+963.97614 3837.1
+973.13702 2938.9
+973.45953 10611.6
+973.79633 15430.5
+974.13232 11478.4
+974.46295 5676.9
+974.80414 4456.4
+979.13538 107137.6
+979.47015 200196.8
+979.80383 175543.4
+980.13794 109740.0
+980.47296 50376.3
+980.80859 18060.3
+981.14154 6589.0
+985.50934 4911.4
+985.75391 5132.1
+986.00781 5381.6
+1001.74988 5724.6
+1002.00726 5638.0
+1002.50806 3642.6
+1004.49945 5980.0
+1005.49347 6246.7
+1006.50220 3367.4
+1007.46552 2280.2
+1012.16058 9296.8
+1012.49243 20838.8
+1012.82758 21011.3
+1013.16223 13578.3
+1013.50214 28168.4
+1014.00824 29613.0
+1014.50745 20112.7
+1015.01221 13193.1
+1015.51257 7648.1
+1016.01141 6040.2
+1036.15869 3025.5
+1036.61084 2817.6
+1041.17017 17745.9
+1041.50281 28535.9
+1041.83887 25891.5
+1042.17371 18614.8
+1042.50037 10136.7
+1042.84241 3969.5
+1050.58508 7153.4
+1051.58618 3338.9
+1068.59363 3043.9
+1073.84070 4170.9
+1074.18542 4655.5
+1074.50415 2505.1
+1079.51111 17685.2
+1079.84534 37549.8
+1080.02954 2887.2
+1080.18091 37024.8
+1080.51477 26057.3
+1080.85120 12813.9
+1081.17908 7342.5
+1083.36365 2255.4
+1087.03894 12590.5
+1087.53979 15206.7
+1088.04236 12412.1
+1088.54370 13992.2
+1089.04395 13525.3
+1089.54846 8099.0
+1111.87183 3477.7
+1112.20752 4231.0
+1117.20898 10279.8
+1117.54089 38327.0
+1117.87402 28778.4
+1118.21155 24375.7
+1118.54370 11879.0
+1118.88538 5148.7
+1119.58411 2475.7
+1122.47571 5444.7
+1142.54675 2886.9
+1143.05225 5246.5
+1145.55713 2770.7
+1150.88733 7608.9
+1151.22070 9888.3
+1151.55884 22583.6
+1151.89221 12741.4
+1152.06580 9942.7
+1152.22876 6091.4
+1152.56055 8841.3
+1153.06689 3393.6
+1154.20764 3821.2
+1154.55286 8150.5
+1154.88269 8445.8
+1155.22290 4139.0
+1155.56030 4023.9
+1160.83484 2283.1
+1163.66150 3155.8
+1167.55762 2999.9
+1169.58411 2583.6
+1177.56738 8142.3
+1177.90076 8962.5
+1178.23596 7130.6
+1178.57874 3113.8
+1182.65405 3114.5
+1183.24060 67844.7
+1183.57483 137776.0
+1183.90833 148786.6
+1184.24243 115146.8
+1184.57520 70244.0
+1184.91162 29657.2
+1185.24707 13326.0
+1185.57458 12993.5
+1186.57153 3785.8
+1190.19861 2255.1
+1198.24316 10169.5
+1207.57129 3385.4
+1216.26440 5820.9
+1216.59277 10514.8
+1216.93311 14758.1
+1217.26233 9510.4
+1217.59998 6854.0
+1217.93457 5105.6
+1246.59460 2328.1
+1254.66479 2406.7
+1273.11865 2672.8
+1330.64124 2681.5
+1331.12451 2588.8
+1375.64331 5325.3
+1376.64514 3503.8
+1443.68140 2453.3
+1734.79114 3887.0
+1735.80176 3303.7
+1736.78369 3274.6
+1870.91528 2723.2
+1878.65845 3179.2
+1878.90906 2009.6
+1879.58948 58307.2
+1880.49438 2665.4
+1881.10291 2453.7
+1907.05286 23418.5
+1927.09460 2151.9
+1930.69031 2595.9
+S	2566	2566	1002.0005746
+Z	4	4003.971
+282.31989 73991.1
+283.56445 52805.0
+308.91461 85462.5
+357.34933 58828.6
+358.31052 82996.7
+399.12344 67833.2
+474.17160 67366.3
+532.56476 203985.3
+532.89667 70218.4
+549.17676 79026.6
+573.94897 67828.1
+579.86914 62386.6
+584.15088 63652.7
+638.19006 72077.6
+648.96796 58164.1
+659.33325 59595.0
+676.65155 91932.7
+748.33612 66363.4
+754.71277 84357.6
+795.71521 122280.8
+932.77423 69376.4
+962.49792 95547.5
+997.36566 67466.2
+1019.69012 85264.2
+1057.36902 68877.8
+1093.24475 59026.5
+1183.23901 925350.4
+1183.57056 1636202.3
+1183.90527 1317103.0
+1184.23987 872684.3
+1184.57068 467683.4
+1198.26868 329193.6
+1214.60217 85442.3
+1216.25830 251944.9
+1216.59412 395242.3
+1216.92896 367389.7
+1217.25061 243760.6
+1217.59619 163550.5
+1249.29041 135716.7
+1249.61682 242657.4
+1249.95239 365266.8
+1250.28662 203481.5
+1393.52551 64221.4
+1584.54272 68596.5
+1687.81848 69316.9
+1761.87036 69666.7
+1777.21545 95263.8
+1879.23401 197787.2
+1879.56653 1997548.1
+1879.82788 249707.5
+1880.28076 102678.0
+1907.05725 793550.1
+1930.67175 83937.2
+S	2567	2567	1879.96724127
+Z	2	3758.087
+Z	3	5636.626
+518.17523 566.3
+532.52856 1921.0
+615.40912 642.4
+673.20496 660.7
+676.66064 1148.3
+751.81793 576.9
+892.28302 653.2
+924.24475 633.7
+1084.38892 590.5
+1122.67700 668.6
+1127.95740 696.7
+1198.18286 3758.5
+1381.61646 591.9
+1438.13879 693.9
+1625.72559 570.3
+1694.50757 642.7
+1763.44556 615.1
+1878.71558 1568.8
+1879.17126 2025.9
+1879.58752 19925.1
+1880.01819 1483.5
+1880.40686 1415.7
+1907.05176 7883.8
+1930.74268 847.3
+S	2569	2569	1879.96299127
+Z	3	5636.614
+Z	2	3758.078
+510.76709 618.9
+532.57874 2181.8
+549.17316 835.7
+552.69562 615.6
+573.21301 698.5
+630.34528 625.3
+630.42841 758.3
+642.14276 629.5
+656.08582 649.5
+676.62958 1186.8
+749.03516 680.8
+802.13141 589.9
+847.70795 680.1
+907.91913 733.7
+1057.23230 1142.5
+1198.30103 3283.9
+1478.74573 780.9
+1878.17810 932.3
+1878.81396 815.6
+1879.15027 1563.9
+1879.50818 19759.7
+1879.87903 1080.0
+1880.82214 799.2
+1907.14429 7792.4
+1967.39563 609.6
+S	2570	2570	802.0020246
+Z	5	4004.971
+212.61241 630.5
+240.13460 1124.6
+241.13739 710.0
+258.14520 742.6
+259.82312 634.0
+271.58267 774.2
+289.54123 615.4
+290.97226 598.0
+294.18292 1072.0
+311.20740 921.0
+312.07806 570.0
+315.00406 674.0
+329.21869 2366.9
+339.20276 2999.6
+350.29001 927.7
+351.91943 668.3
+357.21378 5417.3
+358.21732 720.5
+367.08734 729.7
+368.81140 676.4
+379.20959 897.1
+384.80042 647.9
+385.63071 628.9
+393.25049 1270.3
+394.10342 613.6
+399.69522 593.8
+410.27676 1931.7
+411.26251 1551.4
+411.69791 730.5
+427.21991 4447.6
+428.28790 3199.6
+438.27133 11137.6
+439.27356 2802.4
+446.46747 555.0
+452.65164 591.1
+456.28186 15044.2
+457.28531 5519.8
+482.68066 672.4
+516.79065 2843.8
+517.29114 2154.7
+517.78949 629.3
+532.58795 1918.6
+533.45160 599.1
+560.32184 673.2
+571.21039 647.3
+582.32867 794.4
+583.29944 1817.3
+585.80591 812.8
+592.78815 1313.0
+595.30817 1911.3
+596.31244 1221.1
+605.31232 4679.3
+605.64673 6703.2
+605.98175 3781.0
+606.31134 1873.4
+606.65393 719.3
+613.31696 1572.9
+614.32507 1509.0
+637.30286 1015.2
+640.32043 5412.8
+641.32385 1350.0
+676.00562 2718.6
+676.34009 5054.0
+676.62268 1272.2
+676.67828 2886.6
+677.00793 1774.8
+702.31555 804.1
+706.35498 1528.7
+706.57867 1571.8
+706.83978 1256.6
+707.08789 1216.3
+707.14105 1066.9
+707.34076 1270.5
+707.53882 1148.3
+708.39917 976.2
+710.54877 1261.0
+710.94958 1605.6
+711.34595 884.2
+716.90167 586.7
+717.05566 726.6
+725.03015 3570.9
+725.36304 6126.0
+725.69647 4851.3
+726.02948 2354.7
+726.40283 1783.9
+726.95294 1004.0
+727.40466 1504.7
+730.36548 727.7
+730.57452 1093.6
+730.76294 977.7
+730.87891 833.8
+730.96307 1131.3
+734.60260 1806.1
+734.85327 3886.8
+735.10419 4246.8
+735.35614 2194.1
+735.59900 1174.9
+746.40479 932.8
+755.40796 3838.8
+755.91119 3148.1
+759.86139 690.4
+762.37494 1807.7
+763.04974 692.3
+766.78400 821.6
+766.98297 910.6
+767.48096 766.2
+768.04376 1982.7
+768.37878 5659.0
+768.71240 3072.8
+769.04657 3017.7
+769.36334 3077.6
+769.78516 3861.3
+769.98816 7638.5
+770.18817 14132.6
+770.39050 14424.2
+770.58972 12229.0
+770.79034 7852.4
+770.99042 3302.2
+771.19696 1250.7
+771.39386 750.9
+827.87164 723.5
+833.08081 709.6
+838.65643 1170.2
+848.74420 2992.1
+849.07806 6300.4
+849.41205 5307.0
+849.74585 3257.9
+863.67206 1098.0
+864.17627 1050.7
+877.40735 1082.5
+879.17157 1332.6
+879.42694 1819.3
+879.92871 1216.2
+881.41156 1244.2
+881.75281 1389.8
+882.08148 2029.7
+882.75873 860.2
+883.17676 1905.4
+883.26776 954.7
+883.43005 9437.2
+883.67981 15173.8
+883.92859 15529.5
+884.17950 11907.6
+884.42926 6061.1
+884.68121 2067.9
+884.93127 1623.1
+885.13306 1308.1
+885.38983 1130.2
+885.53387 676.1
+885.63782 1513.4
+885.88995 1055.4
+886.80780 1394.4
+887.08759 5267.8
+887.30969 1102.6
+887.42188 12683.6
+887.68451 67423.7
+887.93286 186456.7
+888.09174 9317.7
+888.18317 249345.5
+888.43262 212282.1
+888.68347 141072.0
+888.80817 1567.7
+888.93317 62732.8
+889.18396 28065.1
+889.31287 1307.1
+889.43201 10214.9
+889.56268 1742.5
+889.68445 2255.3
+889.81360 1411.1
+890.48047 1047.3
+890.73572 1515.6
+890.99500 1875.9
+891.25439 1170.0
+891.50391 900.5
+898.40552 6438.6
+898.96008 823.7
+899.40631 1488.1
+901.10510 676.5
+907.46277 4668.1
+907.96765 5563.1
+908.19489 3206.0
+908.45044 6109.1
+908.69366 7022.0
+908.94495 4524.4
+909.19171 2112.1
+909.44733 1169.9
+909.82690 667.2
+910.41742 827.5
+912.44843 27791.1
+912.69916 75455.8
+912.94928 107975.1
+913.04761 787.0
+913.19946 99734.1
+913.44989 58184.4
+913.70062 34377.8
+913.95093 12924.3
+914.20294 4547.0
+914.44891 1771.4
+933.44489 887.3
+933.51740 1365.7
+934.50012 954.7
+935.76947 2335.4
+936.09930 3787.3
+936.43573 4020.7
+936.76904 3490.0
+937.09875 1243.5
+937.21564 10700.4
+937.46582 32651.2
+937.71637 48643.5
+937.96655 40818.1
+938.21729 29775.0
+938.46808 14989.3
+938.72144 5896.5
+938.96881 3516.8
+939.21222 1316.6
+939.47076 1059.9
+941.43939 17542.8
+941.77344 36162.3
+942.10815 38877.0
+942.44244 25075.5
+942.77643 11983.3
+943.11127 5097.3
+943.44635 1456.0
+951.52222 1352.9
+961.97992 2744.1
+962.23108 9265.6
+962.48303 15298.0
+962.73456 12936.1
+962.98505 11882.0
+963.23523 6564.7
+963.48846 1756.0
+963.73401 1347.7
+963.98273 818.9
+973.46265 1792.7
+973.79742 3609.1
+974.12842 3299.9
+974.45880 2345.4
+974.80176 1767.8
+979.13409 18078.5
+979.46863 33918.7
+979.80304 41011.8
+980.13708 26676.6
+980.47119 15746.2
+980.80542 6672.1
+981.14258 1864.4
+982.68713 834.2
+1004.48840 1487.9
+1005.49615 1863.5
+1012.16418 1553.3
+1012.49030 3481.8
+1012.82379 5360.7
+1013.15985 2938.4
+1013.50153 7067.4
+1014.00659 7081.9
+1014.50830 4794.7
+1015.00946 4560.4
+1015.50714 1996.4
+1035.83716 1011.2
+1036.61658 2182.7
+1041.16431 1962.4
+1041.50049 5625.5
+1041.83643 7399.4
+1042.17163 5731.3
+1042.50452 4511.5
+1042.83521 1042.3
+1050.58044 1657.9
+1051.59082 1040.4
+1074.18005 833.8
+1079.51624 3266.9
+1079.84436 6267.4
+1080.17712 8075.3
+1080.51575 4359.4
+1080.84033 2950.3
+1081.17578 1389.8
+1087.03882 2489.5
+1087.53723 3850.2
+1088.04102 2688.9
+1088.54272 3538.8
+1089.04785 3013.9
+1089.54736 1026.1
+1104.56836 925.8
+1111.53015 1812.1
+1112.19629 1018.9
+1112.54199 896.4
+1117.20618 2830.9
+1117.53772 6886.3
+1117.87573 7323.0
+1118.20581 4114.3
+1118.54492 4516.7
+1118.88123 1778.4
+1140.22046 961.0
+1150.89185 1106.2
+1151.22656 3613.3
+1151.55725 4999.3
+1151.89417 2742.0
+1152.05981 1923.3
+1152.22815 3109.7
+1152.56580 2160.5
+1154.54968 1778.0
+1154.88110 1355.8
+1155.21265 1499.4
+1177.89868 1554.2
+1178.24658 1472.0
+1183.23779 5651.7
+1183.57239 19623.7
+1183.90674 23934.8
+1184.24097 20696.1
+1184.57288 14937.6
+1184.91235 6517.6
+1185.24548 3116.9
+1185.57092 1961.9
+1198.31799 3328.0
+1200.61731 729.1
+1216.59766 1251.4
+1216.94434 1202.0
+1217.26379 1310.8
+1217.60083 999.9
+1217.94507 747.1
+1375.61108 818.4
+1525.49573 967.1
+1717.86548 624.2
+1734.79236 1473.0
+1735.78699 941.3
+1869.96985 795.7
+1877.94348 700.9
+1878.57397 585.3
+1879.16003 2673.5
+1879.50439 18685.9
+1879.77698 3562.5
+1879.95313 2710.2
+1880.28918 1239.0
+1907.12439 7163.4
+S	2571	2571	1907.47799127
+Z	3	5719.159
+Z	2	3813.108
+532.54565 1384.7
+532.58960 700.4
+549.17706 667.7
+586.66083 668.0
+630.44067 733.9
+634.28021 649.3
+676.66779 1097.0
+832.59009 571.0
+845.64685 643.9
+921.21954 634.9
+940.58942 692.9
+967.56812 680.2
+1188.11792 970.5
+1198.23340 3353.7
+1518.44617 654.6
+1525.44568 867.6
+1563.84485 8876.1
+1564.84802 6865.8
+1717.31946 775.4
+1777.01233 714.8
+1791.95532 3614.7
+1792.94775 3926.6
+1793.97375 1233.0
+1877.02051 829.7
+1878.56909 1673.3
+1879.26062 3454.3
+1879.60645 18400.0
+1879.91455 3863.9
+1907.05688 7482.2
+S	2573	2573	1879.9488246
+Z	2	3758.05
+Z	3	5636.571
+519.54413 588.9
+532.57611 1815.2
+542.38489 596.1
+557.98462 601.0
+614.54150 709.4
+640.94257 631.5
+672.65729 616.4
+676.66101 1357.8
+731.21136 950.7
+751.23114 586.1
+795.72076 1124.6
+949.69647 653.2
+1019.74963 578.4
+1188.19531 892.1
+1198.28601 3170.4
+1301.80139 759.7
+1501.29102 661.8
+1525.61218 758.9
+1554.05249 609.5
+1588.94031 699.9
+1879.24780 1706.1
+1879.58838 19865.8
+1879.91516 1456.5
+1880.07642 1093.3
+1881.55371 759.0
+1906.74817 690.7
+1906.89832 1163.7
+1907.17432 6682.8
+1907.75000 793.4
+1930.80066 1080.9
+1932.83960 677.4
+S	2574	2574	801.8026246
+Z	5	4003.974
+210.54276 4676.6
+214.52881 5740.1
+216.03853 4832.0
+224.89024 4821.7
+225.20717 6779.1
+231.11853 4686.5
+240.13435 7424.1
+244.36908 5090.0
+245.08565 4624.8
+249.16063 7281.8
+251.62825 5441.7
+253.65005 5006.1
+280.12900 8405.1
+280.19858 5699.9
+328.48621 5057.4
+339.20258 9064.2
+350.29379 7109.6
+357.21207 10093.9
+363.17346 10647.3
+385.20197 5194.1
+388.02054 6126.5
+390.23596 9329.7
+393.21323 10411.5
+408.19495 67300.0
+409.19690 6975.8
+411.25427 7097.2
+424.22241 11680.5
+427.21918 9466.3
+427.57031 8611.8
+433.95752 5359.4
+438.26971 30643.0
+439.27026 6272.4
+454.71249 5498.2
+456.28079 43167.8
+461.65811 4576.5
+462.23834 7641.9
+474.31522 5024.5
+476.25705 9329.6
+493.28308 29648.8
+505.28461 7666.0
+511.60568 5794.1
+521.27795 63666.1
+522.28271 16160.3
+531.58484 5090.2
+532.60919 15683.1
+537.30579 31252.5
+555.26312 30481.2
+556.19458 5810.2
+556.27515 36942.9
+557.28174 7648.3
+575.31995 20652.2
+576.32379 8538.9
+592.34772 34724.2
+594.51355 5211.1
+605.31390 11594.1
+605.64514 28945.4
+605.98114 9908.1
+623.32373 31533.6
+624.32574 15547.2
+640.35187 85313.3
+641.35583 24458.8
+668.34650 231683.7
+669.34930 66179.0
+670.34491 8883.6
+672.58630 5042.7
+676.00989 6922.3
+676.51453 5578.0
+707.07874 6476.2
+710.74841 7086.5
+725.02380 12721.8
+725.36017 10514.9
+730.15326 7836.5
+730.35608 8097.8
+730.55914 6665.0
+734.60132 5817.8
+734.85913 9699.3
+735.34869 7660.8
+736.09607 5207.7
+765.36108 9712.9
+768.37292 10093.2
+768.70752 7706.3
+769.78735 15568.5
+769.98804 43909.5
+770.18744 29310.4
+770.38678 31027.7
+770.58801 9336.8
+770.78973 10169.5
+782.39081 15435.5
+783.37494 18148.8
+795.71454 7994.0
+849.07288 15712.1
+883.17957 14234.4
+883.42792 34221.3
+883.67670 56390.9
+883.92700 33343.7
+884.17572 23374.7
+884.42194 11182.2
+884.67621 8618.4
+887.08948 18013.7
+887.41528 30706.9
+887.68121 296644.3
+887.92993 722306.7
+888.18018 688225.3
+888.43024 490093.0
+888.68158 293173.9
+888.93140 134685.5
+889.18396 27777.9
+907.46155 14298.1
+907.96771 11526.9
+908.19073 14016.4
+908.45056 8935.3
+908.69104 12941.9
+912.44641 115037.6
+912.69684 271003.4
+912.94696 260057.3
+913.19812 219973.6
+913.44818 95464.6
+913.69910 53860.3
+913.94867 25053.7
+914.18036 6587.1
+932.95648 8658.3
+936.09900 8043.4
+936.42725 7832.1
+936.74951 8843.7
+937.21301 34139.7
+937.46515 73633.4
+937.71466 113114.2
+937.96600 93438.0
+938.21661 32165.8
+938.46765 24477.3
+941.43854 64784.5
+941.77155 91786.8
+942.10638 107249.8
+942.43988 50086.2
+942.77411 18895.2
+959.07800 5251.1
+961.98297 6818.3
+962.23065 23352.5
+962.48236 41505.0
+962.73370 36177.7
+962.97766 16279.6
+973.46539 8293.3
+973.79791 10061.1
+974.13245 10911.9
+974.46436 7945.2
+974.78680 7317.1
+979.13202 44176.8
+979.46802 106723.5
+979.80090 96865.3
+980.13611 75077.9
+980.46741 23290.1
+980.80383 11088.6
+989.72253 7047.2
+1012.48724 8233.5
+1012.82538 10921.9
+1013.16705 8718.5
+1013.50189 10952.9
+1014.51099 7398.6
+1015.01080 8115.5
+1021.20239 5633.2
+1041.50513 15941.6
+1041.83374 17931.3
+1042.17029 8300.0
+1079.84143 17209.2
+1080.18005 11306.4
+1080.51526 7792.8
+1117.54126 16204.6
+1117.87366 15298.4
+1118.20532 12244.7
+1118.54175 10866.8
+1151.21375 11220.0
+1151.55725 11322.4
+1151.88977 10687.5
+1183.23767 25499.1
+1183.57202 64232.4
+1183.90308 55947.9
+1184.23962 54985.3
+1184.57703 20550.9
+1184.90369 12751.6
+1198.36365 27671.9
+1216.59668 8916.6
+1237.63416 6408.5
+1359.41809 6353.1
+1370.10168 6144.9
+1525.48718 9833.9
+1754.13098 5845.1
+1776.87292 6627.0
+1837.34656 5847.3
+1860.05212 7712.5
+1870.21240 11835.5
+1877.83435 7047.2
+1878.67236 7848.3
+1879.11584 10267.0
+1879.64282 168438.0
+1880.26636 12726.2
+1880.60583 6875.2
+1880.89685 6790.4
+1907.13000 63161.2
+1930.68860 7624.5
+S	2575	2575	1002.2505746
+Z	4	4004.971
+318.51886 1456.5
+339.20193 1678.1
+356.74463 1297.4
+357.21228 2888.2
+365.89120 1417.1
+410.27310 1920.1
+422.92166 1270.3
+427.59680 1623.9
+438.26984 9246.4
+439.27496 2317.7
+450.85257 1498.4
+456.28107 6834.7
+483.23517 1301.5
+487.77094 1113.0
+487.79083 1199.8
+529.90479 1314.8
+532.56628 4573.7
+540.24744 1515.7
+542.58051 1405.6
+605.30267 1560.0
+630.46960 1865.0
+676.65558 2297.7
+693.52271 1493.4
+753.16168 1201.6
+753.59308 1580.7
+779.70587 1662.1
+790.42377 1262.4
+795.70032 1694.9
+839.47687 1708.6
+845.29578 1353.7
+858.50873 1128.3
+858.54779 1099.5
+887.67914 12695.0
+887.93085 18517.4
+888.18115 16789.7
+888.43030 14074.6
+888.68103 6762.3
+888.92462 1512.4
+905.78125 1487.5
+907.46375 15540.2
+907.96637 14114.6
+908.46539 9038.5
+912.44592 3764.8
+912.69733 8171.1
+912.95044 8717.5
+913.19836 6256.0
+913.70258 1448.7
+941.44000 2337.4
+941.77307 4203.8
+942.10175 3513.0
+951.57990 1450.2
+956.31946 1638.2
+961.98071 3545.5
+962.22821 7801.8
+962.47754 7864.8
+962.73132 5146.8
+962.97467 1587.1
+979.11298 1534.1
+979.47131 5094.5
+979.79980 2267.3
+1044.56531 1533.4
+1057.25061 1487.5
+1079.39124 1687.9
+1079.51782 3372.5
+1079.84265 6722.6
+1080.17419 6687.2
+1080.51001 3804.8
+1087.03931 1910.1
+1087.54236 2521.9
+1117.53442 1642.7
+1117.87244 1949.3
+1150.88391 1762.5
+1151.22229 3715.4
+1151.55774 5480.7
+1151.89648 2571.3
+1177.23340 5789.6
+1177.56775 17721.5
+1177.89868 17130.7
+1178.23352 17439.8
+1178.56189 7255.9
+1178.90417 2695.3
+1179.24719 1964.0
+1179.59509 2151.3
+1180.29016 1591.9
+1183.23730 161977.4
+1183.57056 300537.8
+1183.90381 311526.3
+1184.23804 206597.2
+1184.57190 105309.6
+1184.90710 31953.4
+1185.24878 6190.1
+1185.58960 1604.9
+1187.99255 1483.5
+1188.23242 3243.3
+1188.55823 1866.3
+1198.27148 6991.4
+1210.59180 4326.1
+1210.91785 5461.5
+1211.25696 4172.8
+1216.26074 38702.7
+1216.59326 89384.6
+1216.92554 84900.5
+1217.26038 65191.9
+1217.59363 28286.3
+1217.92627 10376.5
+1243.95068 2507.1
+1244.26843 2607.8
+1249.28308 28804.2
+1249.61597 64055.2
+1249.94971 66673.2
+1250.28333 52421.9
+1250.61694 25233.7
+1250.95483 5870.5
+1272.60974 6862.5
+1273.10681 6032.5
+1273.61792 5018.3
+1274.12048 2294.7
+1282.30823 7429.3
+1282.63977 13115.4
+1282.97144 11442.0
+1283.30713 9709.4
+1283.63831 5754.1
+1330.61951 1787.7
+1412.15381 2403.9
+1412.65576 2099.7
+1469.19836 2876.9
+1561.16931 1219.7
+1561.73291 2442.0
+1562.26599 2602.8
+1662.90405 1574.3
+1734.78418 4278.8
+1735.79443 3547.9
+1736.76953 2070.3
+1870.24792 1665.4
+1872.96558 2068.1
+1879.03113 2282.6
+1879.57922 39360.5
+1879.82666 6200.4
+1880.19312 3113.3
+1880.53381 2671.2
+1880.91919 1719.0
+1907.07373 15386.4
+1907.38611 2088.2
+1930.74622 1273.7
+S	2577	2577	1466.10840793
+Z	3	4395.05
+Z	2	2930.369
+403.03064 42603.1
+409.65054 43565.9
+494.93884 50546.6
+532.55023 147793.1
+549.18317 47917.2
+558.55896 48785.8
+578.61981 40117.3
+616.47699 39237.0
+676.66205 63581.6
+704.24835 46184.2
+750.82129 39131.2
+795.71771 55397.3
+799.71820 55582.0
+813.38348 52367.8
+1019.73566 48673.4
+1021.50848 111112.7
+1047.58118 54625.2
+1054.27991 47040.2
+1059.49548 50635.4
+1076.13904 48705.4
+1115.61853 47610.5
+1115.75244 40536.5
+1198.23145 228414.2
+1350.66089 142507.9
+1351.66614 122134.1
+1352.66724 57693.7
+1416.43250 54085.9
+1430.22498 41524.2
+1525.51831 69848.6
+1630.69409 52949.6
+1878.70215 65644.0
+1878.99609 47795.2
+1879.19397 73696.8
+1879.26990 74647.1
+1879.59705 1423026.8
+1880.40930 66380.4
+1882.43079 46655.7
+1907.13245 504575.8
+1930.75635 64577.4
+S	2578	2578	1879.99440793
+Z	3	5636.708
+Z	2	3758.141
+523.58624 642.5
+532.57465 1820.4
+549.18109 704.3
+559.37970 607.7
+596.74536 532.1
+651.42737 599.0
+676.64600 963.5
+705.50403 652.6
+731.15912 680.8
+795.70996 1207.1
+818.99481 786.4
+858.09717 892.5
+1057.24915 848.3
+1087.54871 637.9
+1096.29163 791.0
+1188.31226 737.5
+1198.14966 743.1
+1198.28174 3148.9
+1370.31323 682.5
+1476.81494 672.1
+1546.07886 771.7
+1685.56177 690.7
+1809.30615 681.4
+1877.99634 691.7
+1878.50220 848.4
+1879.05713 1423.0
+1879.53516 19925.6
+1880.00269 1226.9
+1880.51013 772.7
+1906.74414 878.5
+1907.15894 7036.5
+1918.87878 703.4
+1930.72192 665.8
+S	2579	2579	1467.1128246
+Z	2	2932.378
+Z	3	4398.063
+400.93628 605.6
+423.19257 906.9
+425.23862 960.1
+427.18106 1381.9
+441.19678 793.4
+445.18594 2339.9
+450.20114 1089.3
+453.23425 868.7
+455.28851 808.7
+462.19562 550.9
+467.25027 1771.1
+470.24185 711.7
+472.18689 2344.0
+474.24036 1398.7
+476.25146 1475.7
+477.23392 831.4
+478.19147 1438.7
+479.17731 1468.0
+479.29016 899.0
+480.16400 606.7
+484.22162 1857.3
+485.20978 1383.1
+486.27454 4131.9
+487.15057 680.4
+487.27466 879.3
+489.20193 784.6
+490.19577 2345.0
+491.19742 946.4
+494.26154 2416.7
+495.24548 1635.0
+496.20407 2163.5
+497.18716 3257.8
+500.18045 1741.4
+500.21503 1022.8
+502.23291 9552.2
+503.23547 2002.4
+504.17627 1201.0
+506.30069 1341.0
+507.27588 704.5
+508.23962 1038.0
+510.29129 1525.5
+512.27722 1194.0
+513.25635 1258.7
+516.24615 830.0
+518.22748 22093.5
+519.23145 6126.3
+520.23328 933.4
+522.25549 3506.4
+523.25848 949.9
+524.30975 2693.2
+532.49634 618.2
+532.54382 1907.7
+536.23853 25305.0
+537.24133 6252.9
+538.21704 1710.0
+540.23657 1031.3
+540.27484 1113.6
+546.24738 728.6
+554.22913 1269.5
+556.22534 933.0
+556.27661 905.9
+556.64282 613.6
+558.25293 2399.2
+558.28943 650.4
+564.26093 980.7
+565.78326 655.5
+567.25647 1723.8
+568.27039 928.6
+569.20288 2192.3
+570.18298 1384.4
+570.28833 896.7
+571.25708 1221.4
+572.23212 997.2
+575.28595 1336.6
+582.27704 1936.5
+583.29187 1899.9
+584.27124 939.8
+585.27032 12263.0
+586.27429 3269.4
+587.21326 5401.7
+587.32117 1486.3
+588.18811 2328.4
+589.26379 939.7
+591.27802 2370.2
+592.25580 1635.3
+593.33136 1450.5
+596.27789 760.1
+597.30670 1893.0
+599.28253 1586.3
+601.30157 7190.6
+603.27997 10381.9
+604.28308 3566.9
+605.22272 4128.7
+607.23840 883.7
+607.34344 1913.0
+609.28851 5453.2
+610.26855 6939.5
+610.37622 817.1
+611.27435 2160.9
+613.26569 2293.2
+614.27075 819.8
+615.31708 6756.8
+616.32098 1533.3
+617.26575 2822.6
+617.32697 946.2
+618.27765 825.9
+621.32568 917.3
+625.24689 1684.4
+627.29865 1643.5
+629.30573 685.7
+631.27417 1377.8
+635.30652 43385.7
+636.30908 13876.0
+637.30884 3076.7
+637.38934 1166.6
+639.33887 1297.0
+647.28571 1100.7
+653.31128 975.5
+653.35767 1220.0
+654.29211 1531.5
+655.26978 933.7
+657.32324 2013.6
+665.25818 1389.9
+665.31012 1369.5
+666.32751 1528.6
+668.29004 990.3
+669.25775 931.3
+671.33636 2810.9
+672.31519 3103.6
+673.27612 2208.3
+673.32141 861.2
+674.28003 1172.1
+676.64996 854.6
+680.34528 1461.2
+681.34833 1605.2
+682.28607 7487.2
+683.26208 2079.9
+683.30261 977.6
+683.39685 721.0
+684.26990 1129.3
+684.33777 9498.0
+685.25116 701.4
+685.34302 2474.6
+686.29279 1467.6
+687.26465 919.4
+690.31659 1053.5
+695.36346 1783.3
+696.30072 846.8
+698.24597 1078.9
+698.35413 8738.1
+699.35919 2863.9
+700.29700 24700.4
+701.27496 5959.6
+702.28833 3366.0
+702.34583 9248.6
+703.28308 1172.2
+703.35071 2400.3
+704.29596 1405.9
+704.36285 2122.0
+705.26642 994.2
+705.37140 1056.2
+706.41119 1487.3
+708.36255 1093.0
+710.29895 625.8
+711.32019 1058.2
+712.33545 2611.3
+714.30743 1071.2
+714.38403 1668.3
+715.32605 854.5
+716.25854 2103.5
+716.36395 8743.8
+717.36951 3562.5
+718.30695 18279.6
+719.31201 6221.4
+720.30969 1883.3
+722.37366 3259.8
+723.37531 949.2
+724.40277 884.1
+726.35431 1370.1
+730.34412 5844.7
+731.35010 2102.5
+732.36646 858.2
+738.33221 1975.7
+740.38770 1196.4
+744.36145 757.5
+746.35986 2124.2
+747.36188 999.1
+748.39099 28701.9
+749.39404 11824.6
+750.39526 3267.1
+752.42297 1124.0
+754.33765 1193.4
+756.31744 1408.0
+757.33435 803.0
+762.31836 1005.7
+764.35577 879.1
+766.43958 1437.7
+767.37390 992.8
+768.36322 824.1
+770.40863 1706.0
+771.37524 1014.2
+772.35388 2066.2
+779.40686 902.7
+781.35791 2191.9
+784.39905 1332.2
+785.38434 1717.9
+786.36853 3058.5
+787.36932 1804.3
+787.44086 1212.1
+794.42828 795.6
+795.37109 7512.7
+795.71704 1070.1
+796.37482 3363.2
+797.42035 9329.5
+798.42529 3375.9
+799.36731 7968.7
+800.36737 2500.0
+801.37427 687.9
+802.33368 1038.7
+803.39209 2899.3
+804.37927 886.5
+811.32965 1532.4
+813.38116 32560.5
+814.37769 15710.4
+815.42249 12189.2
+816.42798 3667.2
+817.37634 6753.8
+818.38098 1815.8
+819.39636 715.4
+821.44080 1633.2
+823.43085 693.0
+825.41602 951.3
+827.39459 960.1
+828.40186 968.8
+829.33826 4187.2
+829.74841 650.3
+830.33704 1485.2
+831.39136 37536.4
+832.39447 13386.6
+833.39423 4361.3
+834.37903 1129.7
+835.45111 1014.8
+837.40314 1061.9
+839.45258 1339.2
+843.41693 1078.6
+845.35614 987.0
+847.35400 2325.0
+847.90326 635.1
+848.35034 696.9
+851.39404 694.2
+857.38800 1384.4
+858.38788 696.3
+861.38214 1909.7
+861.47467 12055.0
+862.47852 5601.5
+867.42719 843.6
+869.40985 2119.2
+875.40411 2641.6
+883.38904 717.3
+884.44971 1345.0
+885.43701 1957.3
+886.44171 1354.7
+894.43774 4614.5
+895.43500 2826.6
+896.44049 850.3
+898.44208 696.0
+900.42102 1025.5
+901.39502 1367.3
+902.46472 1855.9
+910.39783 2257.7
+912.44946 22421.5
+913.43994 15128.0
+914.43988 6692.6
+914.91736 1780.4
+915.41718 2677.1
+915.93201 1345.1
+916.42944 1132.3
+917.43701 762.5
+924.41669 1984.2
+925.42395 1107.7
+926.46613 3893.1
+927.46808 2086.3
+928.40863 6204.4
+929.41315 2638.2
+930.45801 24081.9
+931.46057 10452.2
+932.46454 3791.4
+942.42249 6966.8
+943.42566 3414.7
+944.46985 4374.6
+945.46533 2274.9
+946.41949 7107.4
+947.42230 2913.7
+948.40753 821.0
+950.48120 1328.7
+951.48846 1142.2
+953.99268 1582.7
+954.49933 1620.5
+955.00024 871.1
+960.43542 7366.7
+961.43475 3325.1
+962.43677 4122.8
+963.44128 1172.0
+968.49292 2229.7
+969.48541 1119.3
+978.38904 1195.6
+979.40369 871.1
+984.46918 654.8
+990.43298 1045.1
+996.48303 1307.3
+997.46246 1202.8
+1003.49738 4590.5
+1004.47937 11010.9
+1005.48303 5484.5
+1006.47827 2382.4
+1013.50116 1388.5
+1014.48340 2815.0
+1015.48254 1167.6
+1021.50488 92018.3
+1022.50812 47899.2
+1023.50769 17924.2
+1024.50916 5889.3
+1025.50171 1141.1
+1026.53540 947.0
+1031.51306 1611.8
+1032.51111 912.1
+1041.49219 22592.2
+1042.49243 13514.0
+1043.49304 5183.1
+1044.48669 1250.5
+1055.44531 958.2
+1057.50684 1357.2
+1059.50366 30247.2
+1060.50720 14853.2
+1061.50659 5345.5
+1062.51355 1314.8
+1073.46265 3376.2
+1074.46606 1450.9
+1075.52759 1569.6
+1077.45862 2957.9
+1078.45728 864.9
+1089.43079 1130.7
+1091.47925 4610.0
+1092.47974 2866.2
+1093.47864 1700.7
+1107.41833 972.6
+1108.43372 842.9
+1118.52563 1448.3
+1119.51282 1782.1
+1136.53186 14932.0
+1137.53467 8193.0
+1138.53308 3919.1
+1146.50769 964.5
+1154.52014 2217.8
+1155.52332 1415.2
+1156.52625 901.1
+1162.56738 998.1
+1163.55627 771.5
+1172.53284 10667.1
+1173.53271 6099.4
+1174.52759 2468.0
+1186.54944 1005.5
+1188.46252 1205.4
+1190.54333 13932.5
+1191.54578 8522.9
+1192.54504 3881.3
+1193.54297 1713.1
+1194.54248 747.5
+1198.21277 3440.5
+1202.49231 2008.5
+1203.51172 1551.1
+1204.56653 1283.4
+1206.49609 2448.8
+1207.49731 1359.5
+1219.56787 1305.2
+1220.49585 1556.6
+1221.51453 1264.8
+1237.57971 15537.0
+1238.58435 9346.5
+1239.58179 3826.3
+1240.57581 924.6
+1259.65247 1154.2
+1273.59668 847.4
+1283.55945 1929.5
+1284.55444 1427.1
+1301.57471 8961.2
+1302.57813 6442.4
+1303.57800 2372.7
+1304.57043 917.6
+1306.63928 916.7
+1319.58545 15285.0
+1320.58789 11334.6
+1321.58923 4447.4
+1322.58887 2055.3
+1332.65405 5810.7
+1333.65869 4580.0
+1334.66357 2214.5
+1335.65234 1521.7
+1336.67102 1170.0
+1345.43286 850.3
+1350.66370 97159.3
+1351.66626 62676.7
+1352.66724 32619.8
+1353.66858 10283.1
+1354.67029 3678.9
+1356.65674 1066.2
+1357.66748 1563.5
+1358.68005 855.0
+1360.65283 1008.0
+1374.68445 8004.2
+1375.68665 5783.5
+1376.68738 2161.2
+1377.70300 726.1
+1386.64551 1038.1
+1403.65088 1153.7
+1404.65051 2165.4
+1405.67517 974.9
+1406.65649 1036.9
+1412.69421 811.7
+1421.66296 5547.1
+1422.66602 3374.8
+1423.67212 1321.0
+1429.66943 3466.5
+1430.65820 9920.9
+1431.65796 7010.8
+1432.65808 2459.8
+1433.65857 1277.1
+1461.29480 631.4
+1548.61426 678.4
+1616.85986 775.6
+1828.83997 1288.9
+1829.84583 2026.8
+1830.83386 1086.6
+1878.70374 734.4
+1879.56018 19334.1
+1879.83899 1883.6
+1880.04089 1393.3
+1880.48206 699.6
+1907.06641 6303.1
+1907.57117 851.7
+1907.98901 2101.8
+1983.43774 1072.6
+1984.47815 1170.6
+1984.98169 842.8
+S	2581	2581	1879.96740793
+Z	3	5636.627
+Z	2	3758.087
+532.50055 2194.2
+630.42102 837.7
+676.64069 904.3
+732.16974 651.1
+767.73523 611.1
+795.74298 849.0
+797.60333 629.5
+808.39478 578.3
+817.60858 613.6
+873.74207 654.0
+946.14374 602.0
+1192.75122 607.3
+1198.12000 3364.7
+1406.79102 652.2
+1790.65540 599.6
+1795.54016 606.3
+1853.40759 859.2
+1879.10022 1253.3
+1879.52063 18756.8
+1907.05310 7551.4
+S	2582	2582	1469.1993246
+Z	2	2936.383
+441.12381 8011.9
+450.17358 6663.2
+464.70380 8663.9
+472.18198 16366.1
+478.66306 10258.1
+482.68240 10093.0
+484.22287 10822.5
+485.20724 8876.6
+486.27481 31216.9
+489.20206 10640.7
+490.19785 13293.8
+494.25876 13444.0
+496.20300 11978.8
+502.23282 56153.7
+513.25470 11672.0
+518.22656 139561.0
+519.22986 30706.3
+522.25311 19988.4
+524.30994 14968.0
+525.28882 11387.4
+532.50397 17932.6
+536.23755 186711.8
+537.24286 36549.0
+538.21704 12389.1
+549.18610 10392.9
+554.22650 14257.6
+556.22485 12138.7
+558.25110 15280.9
+559.98907 7226.1
+567.25897 15780.6
+569.20026 11861.5
+572.23676 10344.6
+582.27655 11838.9
+585.26825 84225.3
+586.27380 15842.6
+587.21320 31723.3
+588.18988 13339.3
+598.81641 8199.2
+599.25598 9443.8
+600.23138 8830.6
+601.30151 50389.5
+603.28033 83573.0
+604.28119 17158.8
+605.22375 32120.6
+607.34412 20600.5
+609.28882 36543.4
+610.26672 27667.7
+611.27631 9529.8
+613.26660 9782.5
+615.31622 40132.2
+617.27197 13903.5
+621.32379 13634.8
+627.29901 12384.3
+635.30573 294585.6
+636.30817 76169.8
+637.30920 23695.4
+639.34467 10307.8
+651.29706 8042.5
+654.29602 10109.0
+665.30457 12811.6
+671.33197 15891.7
+672.30847 14240.2
+673.27985 14942.3
+676.64819 12874.1
+682.28552 38589.6
+683.26239 14310.7
+684.33728 69459.3
+685.34650 10599.9
+690.30670 9409.7
+698.35156 54383.3
+699.35516 24885.0
+700.29645 155571.3
+701.27277 36203.4
+701.29974 31746.0
+702.27887 15141.0
+702.34564 61599.1
+703.35284 18279.9
+705.27509 13090.1
+706.41034 11324.4
+712.33337 12322.8
+716.36395 67891.2
+717.36523 27634.9
+718.30646 122127.7
+719.30933 36874.4
+720.32007 12930.8
+722.37012 19191.4
+730.34332 35101.9
+738.33173 18142.3
+744.35449 9206.6
+748.39001 196579.9
+749.39240 69037.5
+750.39392 17786.2
+752.42517 9467.2
+756.31494 9131.9
+770.41199 14985.1
+771.40186 16120.4
+772.35425 19533.8
+779.40448 12530.7
+781.35699 11294.5
+786.37622 17068.0
+793.46167 9459.0
+795.37115 54267.0
+795.73065 14060.0
+796.35522 21715.8
+797.41980 71013.8
+798.42297 25686.2
+799.36609 64343.5
+800.36896 18167.0
+803.38965 16867.1
+809.38434 8195.5
+810.37939 8505.1
+813.38000 242792.4
+814.37250 102561.8
+815.42548 86974.8
+816.35565 13983.7
+816.43341 36356.4
+817.37567 57197.7
+818.37927 20526.2
+821.43994 13875.2
+829.33905 34069.6
+831.39063 303441.7
+832.39374 113008.9
+833.39630 31825.9
+843.39709 10371.1
+845.37207 11225.5
+847.33893 11806.1
+848.34375 10362.4
+861.38214 24876.1
+861.47418 70623.3
+862.47455 22602.4
+869.41241 17245.1
+875.39404 24117.7
+884.43890 8348.4
+885.43787 19924.5
+886.43274 17581.1
+894.43573 35319.7
+895.42621 13991.0
+902.45929 23413.4
+910.39526 14119.2
+912.44836 211413.5
+913.43829 115865.9
+914.43732 49975.6
+915.44031 12089.5
+924.41052 19514.2
+926.46613 27073.6
+928.40594 44777.6
+929.40210 14504.1
+930.45764 236076.2
+931.45966 95666.4
+932.46643 20010.1
+933.46136 11396.8
+942.42426 59471.2
+943.41907 14686.0
+944.42657 33960.6
+944.46844 34680.9
+945.48224 16725.6
+946.41772 52252.3
+947.41833 17403.4
+950.48138 17810.0
+951.47626 10173.3
+960.43024 67054.4
+961.44183 16684.8
+962.43311 25422.4
+968.48077 16611.8
+978.39484 12739.3
+997.47668 11427.5
+1003.49774 27726.9
+1004.47913 87821.1
+1005.48169 42936.6
+1006.48730 22645.0
+1014.48077 12649.1
+1015.47681 10545.4
+1021.50427 696263.6
+1022.00702 8292.6
+1022.50665 332077.6
+1023.50684 105535.6
+1024.50842 26070.1
+1031.50952 16088.5
+1032.49194 8029.5
+1041.49170 198901.2
+1042.49023 110915.9
+1043.48840 43284.1
+1057.50415 13453.8
+1059.50244 257257.4
+1060.50598 119190.5
+1061.50732 42765.6
+1062.51599 11487.5
+1073.45642 32278.0
+1074.46814 15936.5
+1075.52148 18213.8
+1077.45398 14959.8
+1089.42603 11569.9
+1091.47290 38447.6
+1092.47351 13847.2
+1093.46741 11827.2
+1113.69348 9400.0
+1136.53210 97308.3
+1137.53088 54779.2
+1138.53308 17095.9
+1154.51050 20845.0
+1172.53259 86130.3
+1173.53467 51310.2
+1174.53467 16759.4
+1190.54248 124543.8
+1191.54675 39781.8
+1192.55029 24738.3
+1198.12402 37063.0
+1198.26819 7451.1
+1202.49744 13829.9
+1203.50354 12266.6
+1206.49377 19481.1
+1207.50769 10114.2
+1221.01758 8430.5
+1237.57874 127169.0
+1238.58484 64053.3
+1239.58411 23785.2
+1283.57251 17526.4
+1284.54871 13177.0
+1301.57666 78310.6
+1302.57495 48954.1
+1303.57703 9731.9
+1304.59973 11852.0
+1319.58569 104339.6
+1320.58411 50572.2
+1321.57947 18611.3
+1332.65442 32483.7
+1333.65344 24666.8
+1334.66858 16187.7
+1350.66357 813140.5
+1351.66541 451779.9
+1352.66748 200970.3
+1353.66248 70095.7
+1357.65454 13325.3
+1358.66089 12466.0
+1374.67700 72002.7
+1375.68323 38942.3
+1376.68042 12887.7
+1386.63538 9316.2
+1403.65466 14057.7
+1404.66699 19886.6
+1412.62427 11570.1
+1421.66248 43197.1
+1422.65674 23600.4
+1429.66675 25977.9
+1430.65894 90414.4
+1431.65674 69943.7
+1432.65405 29602.4
+1433.65710 13148.9
+1447.67651 72488.5
+1448.66785 101685.0
+1449.66516 22725.7
+1547.54285 8483.8
+1717.94910 9141.9
+1878.44958 17198.4
+1879.10413 28576.1
+1879.56604 249772.8
+1880.03198 13914.1
+1880.70898 24079.9
+1881.05933 13344.4
+1881.87500 9484.0
+1883.61987 9116.4
+1907.05042 91211.3
+1918.84644 9870.0
+S	2583	2583	1907.48940793
+Z	2	3813.131
+Z	3	5719.193
+532.53601 1617.3
+532.56744 767.1
+544.93774 667.9
+549.15863 839.4
+580.74475 628.4
+639.16193 590.6
+655.27112 563.4
+676.65778 978.1
+731.11475 694.3
+795.70892 1067.0
+814.27979 609.9
+867.49957 642.1
+891.47888 649.8
+1082.58032 678.5
+1190.28845 754.2
+1198.19922 3321.9
+1545.81946 638.8
+1563.84070 5954.1
+1564.84387 3583.0
+1565.84973 767.5
+1776.94751 780.1
+1789.52771 744.1
+1791.95300 1967.3
+1792.94641 2020.6
+1793.93506 676.1
+1870.22192 951.6
+1877.77771 735.5
+1878.68738 1064.5
+1878.83752 840.0
+1879.58777 19449.8
+1881.22729 629.9
+1907.04346 7520.1
+1918.86829 964.7
+1930.62842 985.2
+S	2585	2585	1469.1258246
+Z	2	2936.404
+Z	3	4404.102
+421.29337 956.6
+425.23883 1498.7
+427.18033 1919.1
+441.19836 1927.5
+441.26355 1024.4
+443.25323 1289.8
+445.17764 3665.2
+450.19952 1568.0
+454.17606 1621.8
+458.27765 1280.8
+467.24881 1672.6
+469.24960 1486.1
+470.24533 1638.8
+472.18610 5347.0
+476.25107 1944.0
+477.23203 1458.3
+478.19455 1484.7
+479.17685 2933.0
+484.22049 2213.3
+485.20724 1969.9
+486.27426 8672.5
+487.15033 1391.1
+487.27823 1187.0
+489.20166 3604.2
+490.19589 4916.6
+491.19980 1900.2
+494.26013 4956.7
+495.24347 1931.6
+496.20560 2344.0
+497.18643 3857.9
+499.23633 1221.8
+500.17996 1890.4
+500.21664 1406.6
+502.23288 15000.5
+503.23611 3584.7
+504.17932 2119.8
+504.24628 2099.6
+506.29474 2159.2
+510.29788 1629.9
+512.27222 2046.0
+513.25513 2181.3
+516.24921 1533.7
+518.22797 36662.5
+519.23187 8110.8
+520.31152 1176.2
+522.25708 7201.4
+524.30890 4072.5
+526.25293 2041.0
+532.50739 3245.5
+536.23883 48304.1
+537.24219 10697.2
+538.21625 3622.9
+540.23810 2395.9
+540.27466 1393.6
+548.31970 1054.3
+554.22803 1653.8
+554.75122 837.8
+556.22217 1431.0
+557.24060 1171.8
+558.25299 4614.4
+559.22418 907.0
+559.25885 1630.8
+563.37219 1105.1
+567.25861 2553.6
+568.26654 2684.2
+569.20557 2341.8
+570.18390 2125.2
+570.28015 1700.9
+572.23462 1842.6
+574.23419 1134.5
+575.28497 2054.9
+582.27771 1856.2
+583.29004 3878.2
+585.27039 20728.1
+586.27417 6913.0
+587.21277 11691.9
+587.31915 2393.2
+588.18951 3404.6
+588.27197 1459.7
+589.26337 2681.8
+591.28113 3523.0
+592.25623 2706.6
+593.32867 1474.6
+597.30591 2897.0
+598.28729 1904.4
+599.27777 2742.3
+599.35474 1730.4
+600.22864 1570.7
+600.28534 1007.3
+601.21490 1077.7
+601.30267 13516.0
+603.28131 22815.2
+604.28278 5886.5
+605.22412 7897.5
+605.29315 1173.9
+606.22858 1770.3
+607.23596 1596.9
+607.34479 3221.2
+609.28790 8718.0
+610.26880 12002.4
+611.27100 2644.0
+613.26715 5569.8
+615.31720 12058.1
+616.32117 3168.2
+617.26947 4233.5
+617.32983 1117.2
+621.32831 1933.9
+625.24951 2547.1
+625.35803 1919.3
+626.26587 1064.3
+626.34027 1471.7
+627.30005 1952.6
+630.40076 1391.1
+631.27429 2313.4
+635.30743 79107.6
+636.31042 23257.6
+637.31012 4477.5
+637.39093 1663.0
+639.33997 3005.0
+647.28052 1200.9
+653.35828 2171.9
+654.29578 2764.0
+654.37225 1072.1
+655.26837 2837.6
+655.35809 997.8
+655.40356 1154.8
+656.32886 1429.1
+657.31543 1200.6
+658.32361 1179.6
+659.26788 1642.7
+665.25555 1924.8
+665.31207 3279.2
+666.32898 2987.8
+668.27686 1278.7
+669.25458 1429.2
+671.33728 6415.6
+672.31140 5427.1
+673.28479 2789.2
+674.34106 1268.1
+676.63733 1506.8
+680.34357 1496.5
+681.34747 3968.6
+682.28668 11847.6
+683.26227 4054.6
+684.27295 1929.4
+684.33893 19237.9
+685.34552 4817.4
+686.28424 1671.2
+686.35236 2021.9
+688.10876 1282.0
+690.30853 1756.1
+690.36542 1114.6
+695.35980 1920.6
+696.36609 1171.6
+698.35388 13664.4
+699.35931 5939.5
+700.29736 40026.1
+701.27716 10932.6
+702.27869 3838.5
+702.34766 17872.6
+703.35089 5614.2
+704.29065 1279.2
+704.36035 4191.2
+705.27216 1858.9
+705.37720 1065.2
+706.41504 2585.7
+708.36694 1334.5
+711.31982 1407.9
+712.33539 5225.3
+713.31799 1401.8
+714.31122 2337.7
+714.38348 4156.7
+715.32983 1528.7
+716.25494 3989.5
+716.36340 16778.3
+717.36774 5557.2
+718.30823 35563.1
+719.31152 9945.4
+720.31519 4165.8
+722.37439 5026.0
+723.37854 2364.8
+724.42603 1986.0
+726.34521 2402.8
+728.37299 1110.9
+730.34467 11364.0
+731.34528 3142.7
+733.24097 1829.4
+734.41101 2606.1
+738.33264 4432.2
+740.37177 1975.8
+744.34497 1765.1
+746.35681 3928.3
+748.39130 57469.3
+749.39478 20674.1
+750.39691 4842.8
+752.41821 2789.6
+753.36206 1202.6
+754.34528 2393.7
+755.34814 1358.5
+756.32739 2206.9
+757.31158 1120.1
+762.31641 1445.9
+767.38147 1204.4
+768.36737 1605.1
+769.35681 1544.3
+770.40881 4912.1
+771.40662 2231.7
+772.35437 4605.3
+773.35870 1268.7
+779.41333 2413.6
+781.35339 5192.8
+782.35889 1556.4
+784.39471 2361.1
+785.38794 3772.9
+786.37213 4508.5
+787.37140 2573.4
+787.44568 2046.9
+795.37067 15221.1
+795.71362 1602.2
+796.36713 4260.5
+797.42133 16393.4
+798.30414 1764.6
+798.42407 7105.3
+799.36676 16326.2
+800.37048 5654.2
+801.39056 1253.9
+802.33087 1820.0
+803.39014 4917.4
+804.38446 1948.2
+810.38739 2153.0
+811.33197 3384.9
+812.35065 1883.0
+813.38165 66422.7
+814.37195 27719.7
+815.42419 20213.1
+816.43011 5880.0
+817.37793 13513.3
+818.38306 4599.6
+819.38422 2403.3
+821.44623 3318.8
+822.44635 1756.3
+825.41901 1772.4
+827.39795 2379.2
+828.36517 982.7
+829.33984 8182.3
+830.34711 2465.0
+831.39209 76068.6
+832.39471 25369.0
+833.39178 7464.3
+834.39337 1994.3
+835.45557 2557.9
+837.39966 2029.7
+839.45483 2794.3
+843.42010 3372.2
+845.35840 2364.1
+847.34644 4191.7
+848.34534 1246.5
+849.34979 2461.8
+855.41943 1032.1
+859.40161 1192.5
+861.38403 2926.6
+861.47552 21705.4
+862.38885 1562.9
+862.47913 9832.1
+867.42432 1976.9
+868.32947 979.3
+869.41449 3907.0
+870.40985 1603.3
+875.39777 5229.5
+883.39099 1374.3
+884.46539 1575.0
+885.43811 4056.5
+886.44153 3214.5
+894.44147 9307.0
+895.43188 3717.1
+896.43707 1294.7
+899.41400 1656.1
+899.44904 1502.7
+900.41589 1582.0
+901.39648 2748.1
+902.46478 4455.4
+903.45923 1465.9
+910.39972 3499.9
+911.39429 1171.0
+912.45044 45627.9
+913.44080 27384.3
+914.44031 11639.9
+914.92352 6561.8
+915.42004 7044.0
+915.92371 2983.5
+916.44415 3088.2
+917.41907 1732.6
+923.48480 1383.8
+924.41467 4920.0
+925.41486 1543.4
+926.46863 7579.1
+927.47144 2572.6
+928.41229 11415.2
+929.41156 5118.0
+930.45813 49183.5
+931.46118 20011.2
+932.46375 6258.6
+933.41754 1842.3
+942.42468 12002.7
+943.42816 5979.0
+944.47437 9604.8
+945.47498 3785.5
+946.42084 11874.7
+947.42053 5222.1
+948.41400 1682.5
+950.48273 4349.2
+951.48621 2470.8
+953.99677 3235.6
+954.50739 1831.2
+954.99878 2068.8
+958.44678 2823.5
+959.46362 1670.7
+960.43488 12779.2
+961.43787 5534.0
+962.43640 7210.5
+963.43701 3062.2
+968.49457 3731.3
+974.46814 1454.1
+976.37073 1408.4
+978.39575 3690.1
+979.39288 1330.2
+990.42371 2879.5
+996.47186 1912.6
+997.45844 2564.8
+998.40796 1873.1
+1003.49695 8104.5
+1004.48212 21250.9
+1005.48175 11729.6
+1006.47949 3592.7
+1013.50201 2340.5
+1014.48291 4399.6
+1015.48334 3660.6
+1021.50580 171250.5
+1022.50891 79781.4
+1023.50861 27546.4
+1024.50732 7603.6
+1025.49255 1692.0
+1026.52405 1194.3
+1031.50732 5061.1
+1032.49902 1685.8
+1041.49329 46887.4
+1042.49329 22054.4
+1043.49084 10516.5
+1044.48743 2163.6
+1055.44348 1480.4
+1057.25684 1844.9
+1057.51282 2321.9
+1059.50391 60017.9
+1060.50818 26031.1
+1061.50610 8724.7
+1062.50183 2413.0
+1071.43018 1627.8
+1073.46472 6070.2
+1074.47009 4332.8
+1075.53601 2305.6
+1076.53699 1465.0
+1077.46045 4965.8
+1078.45886 1478.2
+1081.51880 1654.4
+1089.43457 1906.8
+1091.47729 11429.0
+1092.48071 4603.4
+1093.47583 1914.1
+1099.54504 1315.1
+1103.51196 1933.1
+1107.42505 2466.7
+1118.52490 2433.5
+1119.51257 3546.0
+1120.52515 1166.5
+1136.53406 26288.7
+1137.53577 12789.5
+1138.53540 5975.9
+1139.55151 1277.0
+1145.50879 1287.0
+1154.52441 3269.4
+1155.52307 2221.0
+1166.45740 1254.3
+1172.53296 20232.2
+1173.53564 11953.6
+1174.53723 3615.6
+1177.61755 1102.6
+1184.49731 1418.5
+1186.54431 1912.4
+1188.47656 2264.8
+1190.54419 26528.2
+1191.54724 13373.3
+1192.54077 4181.3
+1193.55359 1950.2
+1198.13501 5390.3
+1202.50183 3727.1
+1203.50220 1623.1
+1204.57947 2030.4
+1206.49548 5041.5
+1207.49817 2063.9
+1219.56519 1871.5
+1220.49927 3529.9
+1221.50427 1613.2
+1237.58020 30140.3
+1238.58301 13928.5
+1239.58276 5537.2
+1240.58887 1385.9
+1281.66101 1506.2
+1282.13184 2738.3
+1282.63354 1212.5
+1283.55750 5151.5
+1284.56323 1830.9
+1301.57849 18083.0
+1302.57996 9982.7
+1303.58008 4010.8
+1306.63538 1221.6
+1319.58606 18492.6
+1320.59216 11217.3
+1321.58948 4646.1
+1322.59924 1401.0
+1332.65613 9584.2
+1333.66040 7673.7
+1334.65735 3506.8
+1335.66492 3418.6
+1336.01758 1351.5
+1350.66492 182117.5
+1351.66724 108403.6
+1352.66858 44529.5
+1353.66895 12784.9
+1354.66687 3538.9
+1355.92627 1324.8
+1356.65942 1968.6
+1357.66748 2632.0
+1360.67566 1612.0
+1374.68579 13206.5
+1375.69006 9869.1
+1376.68616 3173.0
+1386.66077 3376.3
+1387.66785 1572.9
+1403.65649 2267.1
+1404.66125 3869.1
+1405.67004 2496.8
+1421.66809 8701.2
+1422.67419 6365.4
+1425.99939 1259.7
+1428.66443 1136.4
+1429.67261 7814.9
+1430.65833 20782.5
+1431.65979 11794.2
+1432.66003 6228.2
+1433.65051 1829.9
+1434.69507 1122.4
+1467.56421 1832.1
+1471.76965 1004.5
+1489.88867 1045.9
+1819.86768 990.9
+1828.83594 5117.5
+1829.84729 5411.5
+1830.84668 3164.8
+1833.57373 1050.7
+1870.11719 1077.4
+1872.85303 1539.2
+1876.11047 1444.0
+1878.86731 1239.1
+1879.53845 29834.1
+1879.80054 4754.4
+1880.20166 1947.8
+1881.46899 1214.7
+1907.02380 12693.6
+1907.98438 3286.8
+1909.01282 1856.9
+1916.32141 982.8
+S	2586	2586	1002.0021221
+Z	4	4003.97719
+285.70609 29533.5
+293.08810 27710.7
+296.37158 26605.5
+301.52005 27273.5
+302.38562 26651.5
+308.86911 25786.4
+311.96317 25890.7
+342.56277 29749.0
+357.60300 28392.9
+372.52231 28751.5
+377.33713 30936.5
+381.32559 35713.8
+409.74124 30760.0
+451.69238 25557.8
+455.40762 30093.8
+488.76038 27745.8
+532.51984 102458.8
+543.45953 25311.2
+615.93536 29009.2
+690.00989 31346.0
+701.24860 33751.5
+731.06012 40004.9
+733.77313 30465.0
+1083.74133 28358.7
+1085.83545 28241.7
+1183.56982 113397.6
+1183.90112 267251.6
+1184.23596 210499.1
+1184.56519 112620.1
+1184.90857 69936.7
+1198.16162 152056.9
+1216.92468 92258.6
+1217.26379 48969.5
+1249.94531 58652.9
+1250.28320 78117.7
+1250.61414 45350.8
+1259.20374 26927.9
+1395.02576 31581.0
+1420.12256 35109.9
+1420.55212 29216.0
+1546.59534 25386.9
+1706.13745 35864.1
+1753.67395 28404.8
+1827.82874 32141.3
+1878.11365 37968.1
+1878.86292 74753.6
+1879.22375 174911.5
+1879.52783 854356.1
+1879.84863 168777.6
+1880.22864 43870.7
+1887.98267 28788.7
+1906.55200 28667.4
+1907.05884 340234.1
+1907.48108 30841.2
+1930.45776 41014.1
+1964.92957 36302.9
+S	2587	2587	801.8041146
+Z	5	4003.98145
+212.74635 562.6
+223.98167 540.5
+233.56790 643.0
+247.73106 614.9
+271.97897 676.4
+272.03592 541.9
+280.17627 1040.5
+280.49484 734.6
+296.82986 660.0
+342.99484 633.3
+357.21521 626.4
+384.89548 572.1
+408.19534 2680.0
+427.53271 862.8
+438.27103 752.0
+456.28159 1355.7
+457.27762 558.7
+482.42227 724.2
+482.64557 685.1
+493.28537 2465.2
+509.40866 639.7
+516.79126 865.8
+521.27875 3022.0
+532.51440 1512.2
+533.23047 1626.6
+533.91376 663.0
+537.30774 1273.1
+555.26343 1616.9
+555.35760 1806.5
+555.64771 605.6
+556.27448 2788.0
+569.56757 681.8
+575.31573 772.5
+581.30457 667.0
+586.05878 2752.5
+586.55621 1215.8
+592.34998 1667.5
+606.17322 618.0
+623.32550 2015.9
+626.39569 2874.2
+627.40125 914.1
+630.39221 993.8
+640.35217 3439.9
+641.35419 1106.5
+646.31549 824.9
+668.34698 11932.9
+669.35419 2113.7
+707.07855 729.7
+719.36871 677.9
+725.46503 1492.4
+731.10754 794.0
+733.24384 728.0
+735.11475 591.7
+743.39850 1771.8
+743.89771 2274.3
+745.64410 632.2
+765.37817 883.6
+767.18549 696.8
+767.38873 1931.7
+770.38580 1284.1
+770.58875 2130.1
+770.78833 2531.5
+770.98810 2294.1
+771.18811 886.5
+780.40912 698.3
+783.37170 1497.0
+795.70551 950.2
+825.91528 1165.1
+834.83636 752.8
+849.73175 838.0
+853.56097 1188.2
+854.56042 1010.3
+872.58850 865.9
+875.95496 841.4
+883.68048 901.1
+883.92407 3078.0
+884.17548 8451.4
+884.42590 11248.0
+884.67633 11038.5
+884.92822 5349.8
+885.17865 1836.5
+887.74597 2025.0
+887.92615 5999.7
+888.17670 11788.4
+888.42737 26851.5
+888.67853 32182.5
+888.92871 34997.7
+889.17932 22551.9
+889.42780 6456.8
+890.21533 882.9
+905.57837 639.3
+908.69806 641.5
+908.94385 2813.6
+909.19342 4468.6
+909.44086 3916.3
+909.69250 1817.4
+909.93280 889.7
+912.69574 2310.1
+912.94464 3988.3
+913.19391 10663.1
+913.44543 12307.7
+913.69525 11553.4
+913.94629 10480.5
+914.19812 2375.0
+925.97003 736.6
+931.50232 1068.2
+932.00024 1474.3
+932.50226 1331.3
+933.70740 1352.2
+933.95752 2333.5
+934.20874 2284.4
+934.45514 957.0
+936.43622 1275.0
+937.09601 1600.9
+937.70874 1569.4
+937.96295 3306.4
+938.21204 3771.9
+938.46295 6655.4
+938.71436 6603.2
+938.96667 2183.0
+941.76660 1710.7
+942.10095 4136.8
+942.43530 5668.4
+942.76941 7218.4
+943.10754 4199.9
+943.43488 1471.0
+958.72534 1150.6
+962.20612 805.5
+962.97986 1789.5
+963.23425 1396.0
+963.48120 1870.2
+968.59149 1086.9
+974.46356 1451.6
+974.79950 2026.3
+979.45941 981.9
+979.79346 3499.8
+980.13013 5749.0
+980.46454 7475.0
+980.79456 3763.4
+981.13226 2552.7
+1002.47430 743.7
+1014.50421 1037.8
+1032.78027 656.9
+1051.98547 648.2
+1055.45203 943.5
+1057.25903 689.7
+1080.51648 1076.2
+1152.53833 896.4
+1178.89575 1513.5
+1184.23523 1642.9
+1184.56677 2434.1
+1184.89917 2859.9
+1185.22925 2257.3
+1185.55359 919.6
+1198.16895 3086.5
+1209.84290 608.9
+1301.09521 658.4
+1307.57275 642.1
+1328.95691 646.2
+1450.60291 654.5
+1513.10718 723.2
+1729.03552 739.6
+1870.47449 876.1
+1878.01538 923.5
+1878.34851 921.2
+1879.59741 18581.1
+1880.47314 701.7
+1880.80493 1031.4
+1881.21472 1192.2
+1882.20691 618.0
+1907.05640 7308.6
+1930.53687 1346.8
+S	2589	2589	1907.48899127
+Z	2	3813.13
+Z	3	5719.192
+532.52814 2223.5
+613.13293 656.0
+622.17529 642.6
+630.46198 776.9
+676.66296 1280.6
+731.17578 762.2
+745.96753 608.9
+784.72516 603.2
+795.71588 917.1
+1014.91132 620.0
+1057.27991 698.6
+1103.83972 679.0
+1198.18628 3349.2
+1272.19299 697.7
+1545.83545 868.2
+1563.84167 10911.7
+1564.84583 7881.9
+1613.31921 668.7
+1791.95325 4942.4
+1792.95459 4325.6
+1816.95654 689.9
+1871.96851 840.3
+1877.47559 703.6
+1878.97705 1205.9
+1879.60474 19788.4
+1880.13245 1611.2
+1880.67993 711.6
+1881.88623 671.0
+1907.16882 7285.8
+1918.91309 803.2
+1929.96619 636.2
+1930.72876 792.0
+S	2590	2590	1879.5898246
+Z	2	3757.332
+Z	3	5635.494
+524.57410 604.5
+532.51984 1575.6
+632.38208 547.6
+670.59009 551.2
+672.52637 584.2
+676.65247 949.4
+732.24817 663.9
+782.74017 761.7
+795.71588 1067.7
+1057.26245 891.9
+1198.16724 3202.3
+1238.28064 730.2
+1525.41479 808.8
+1776.94507 605.1
+1859.58582 612.1
+1870.35938 773.9
+1878.11426 798.0
+1878.72729 741.5
+1879.12708 1056.9
+1879.55737 19656.7
+1907.12158 7166.3
+1918.94128 808.5
+1930.62878 893.1
+S	2591	2591	1198.57040793
+Z	2	2395.293
+Z	3	3592.436
+343.03738 774.4
+354.00378 545.9
+368.64053 553.1
+391.34662 617.1
+444.06277 583.9
+485.13925 646.1
+532.53394 1680.8
+546.67108 651.5
+570.08685 661.8
+614.22156 616.6
+630.45459 760.1
+795.73840 993.1
+951.51898 892.4
+1003.09723 710.9
+1057.23413 652.2
+1062.55066 11910.1
+1063.05054 7419.8
+1063.55396 2850.1
+1064.05115 732.5
+1198.19165 3444.4
+1320.56909 823.4
+1375.84106 715.5
+1399.90112 675.0
+1465.68872 23922.1
+1466.69360 10555.0
+1467.69031 4080.0
+1468.68042 895.8
+1471.28821 721.7
+1525.52173 897.5
+1776.91882 866.6
+1876.03223 830.7
+1878.37512 665.4
+1878.53992 621.0
+1879.20227 2690.3
+1879.53149 19539.4
+1879.91797 2987.9
+1907.15894 7013.3
+1907.56287 774.1
+1930.71643 971.9
+S	2593	2593	888.4413246
+Z	4	3549.734
+253.52887 591.5
+268.78369 788.0
+271.44376 639.4
+332.63718 649.0
+350.29214 720.3
+352.06738 675.2
+398.93079 562.0
+398.95490 629.1
+427.21704 782.0
+479.37231 558.6
+526.27521 557.0
+532.56512 1354.3
+537.02679 601.3
+549.18604 765.9
+579.58130 646.2
+651.29639 590.2
+682.75226 538.9
+693.90179 701.3
+753.07996 658.5
+776.79926 679.3
+782.73395 678.7
+816.53436 600.0
+863.77197 659.9
+867.66046 688.0
+868.57117 956.7
+928.49530 848.3
+941.77344 872.9
+958.47351 773.0
+972.70593 664.0
+976.40106 614.4
+979.46039 917.7
+999.40887 851.1
+1014.49146 862.4
+1041.82593 956.0
+1057.27844 1022.8
+1088.03845 944.7
+1118.19495 797.2
+1185.56763 1054.9
+1198.25366 3775.0
+1201.04858 682.6
+1246.50635 698.9
+1538.74048 743.8
+1736.76355 677.9
+1879.18884 2712.2
+1879.58203 19300.7
+1879.91785 2484.5
+1880.46997 686.1
+1907.12793 7463.9
+S	2594	2594	798.6088246
+Z	5	3988.005
+252.11484 1403.7
+255.07159 1686.5
+260.89191 1417.7
+263.26810 1466.0
+267.96140 1419.1
+275.44080 1368.7
+275.63980 1576.6
+308.08069 1466.5
+308.92264 1634.8
+326.40018 1758.7
+342.29999 1853.7
+366.72873 1364.1
+370.43808 1321.7
+380.97839 1453.8
+388.97797 1562.2
+389.08307 1480.0
+394.09964 1511.9
+462.97363 1392.2
+464.53586 1490.8
+470.19717 1576.9
+512.27783 1838.0
+532.53668 5512.6
+549.19745 2326.6
+552.58466 1527.7
+557.30402 1710.0
+603.12964 1454.0
+608.46576 1416.7
+635.24591 2060.9
+653.97614 1717.4
+670.46918 1412.6
+676.64752 2220.8
+688.88354 2126.1
+691.32825 1850.0
+694.67786 1796.3
+736.44214 1410.8
+750.97363 1712.1
+766.58032 2841.0
+766.78046 3443.1
+795.73846 2239.2
+879.15839 1817.8
+881.74774 2555.4
+883.42310 23662.0
+883.67456 35482.1
+883.92590 24638.6
+884.17627 18260.7
+884.42554 5451.5
+908.19092 7967.2
+908.43982 15806.7
+908.69360 13054.5
+908.94104 5752.3
+920.53436 2135.8
+921.52698 2502.3
+933.21100 4010.5
+933.45111 2496.8
+935.76373 3520.2
+936.09949 5880.7
+936.43195 4507.8
+957.97430 1944.0
+958.22455 2140.6
+973.45502 4181.6
+973.79218 5854.0
+974.13129 2107.6
+974.98706 1907.6
+1034.56189 3539.4
+1035.56885 6272.8
+1111.88684 1760.2
+1177.89612 4101.6
+1188.14819 2919.2
+1198.20459 8163.6
+1233.77332 1405.6
+1530.77197 1510.0
+1616.70386 1422.3
+1719.58362 1498.8
+1755.10864 1890.6
+1777.01489 1576.2
+1858.20093 1392.7
+1876.06079 1778.4
+1877.28650 1492.2
+1877.49353 1572.4
+1879.54651 44075.1
+1879.77942 11207.5
+1881.54443 1960.8
+1907.14404 17503.8
+1930.77258 2831.3
+S	2595	2595	696.2635746
+Z	2	1390.679
+Z	3	2085.516
+186.20718 593.9
+186.93330 672.7
+188.25359 774.9
+188.26283 713.3
+188.27109 1134.4
+188.28017 1271.4
+188.28955 1225.9
+188.30209 1140.5
+188.31393 801.9
+191.34422 626.8
+198.79961 593.4
+199.22260 1107.0
+199.29924 1152.3
+199.32077 2932.4
+199.34035 955.6
+199.41873 877.2
+205.91617 686.4
+207.72931 535.7
+211.12042 1073.0
+212.10321 1801.9
+216.62897 633.2
+222.08722 1873.8
+223.07277 1411.9
+223.78325 624.1
+226.11871 3626.8
+228.95261 541.3
+237.23518 538.4
+238.69821 587.9
+239.11414 6825.2
+240.09822 10063.0
+240.11742 1008.4
+241.10135 746.8
+249.67384 1815.5
+255.02528 590.3
+278.18329 779.2
+288.20264 1388.1
+289.48199 617.1
+297.15646 2130.7
+302.11560 888.2
+308.16006 1307.5
+313.70068 757.2
+315.16724 1134.5
+325.18747 10663.2
+326.19193 1452.4
+332.12708 1754.7
+342.20258 3374.7
+350.28671 912.8
+352.19833 7572.5
+353.18253 40707.5
+354.18628 7900.4
+355.18573 831.0
+356.23013 718.3
+363.23712 2209.5
+370.20929 1462.3
+376.48105 676.2
+396.22409 1110.3
+397.19263 605.8
+397.22397 535.6
+401.28775 1448.0
+402.70413 762.1
+406.78580 608.3
+408.18933 1025.5
+414.23462 4247.4
+418.77118 2288.5
+421.24515 1502.3
+426.19894 2235.1
+427.28500 26279.9
+427.78653 12379.2
+428.28824 4281.9
+437.28812 3346.0
+438.27194 9593.7
+439.27545 2477.7
+444.20966 1714.2
+447.15219 2360.1
+448.15295 794.4
+448.25452 1008.4
+465.28241 14608.9
+466.26651 18700.7
+467.26953 4535.0
+471.25565 662.3
+473.32498 565.3
+483.29752 871.7
+484.79706 2988.6
+485.27478 3912.4
+486.27399 1160.2
+491.10425 581.5
+498.33987 32055.3
+499.34375 8890.4
+500.34854 1267.0
+507.25430 1091.4
+511.31323 1759.6
+511.81854 1032.2
+520.31708 14239.9
+520.81763 6389.4
+521.32086 2634.7
+525.26569 1591.4
+532.52081 2126.6
+537.35022 1177.5
+538.33319 1518.6
+542.29175 1875.1
+543.27325 1116.1
+555.36163 109750.6
+556.36469 37345.8
+557.23926 2696.5
+557.36743 7048.3
+562.19672 2519.6
+563.28204 3150.2
+564.29175 831.1
+574.40948 560.3
+575.25024 5684.9
+575.83234 4869.7
+576.25220 1771.1
+576.33539 3870.8
+576.83832 1490.6
+580.30896 55095.2
+581.27917 4624.6
+581.31854 12670.4
+582.28302 1478.6
+582.32422 2412.3
+584.83801 15655.5
+585.33929 9567.0
+585.83868 3827.5
+586.05682 893.2
+586.34308 1303.5
+596.30475 1665.2
+609.36871 949.4
+609.66425 1554.5
+609.99646 1067.0
+614.31329 2940.8
+626.39825 167120.3
+627.21472 977.6
+627.40131 65334.9
+628.06653 796.8
+628.40320 15310.1
+629.40662 2148.0
+633.23358 4059.4
+634.23969 1644.6
+647.01300 1414.2
+650.35785 40969.4
+650.85919 33608.9
+651.35992 16200.9
+651.86121 4795.9
+652.36548 1950.1
+656.30280 988.9
+662.31152 1806.9
+663.31311 738.3
+666.32764 1142.4
+668.70154 985.7
+671.34290 1141.9
+674.31732 2157.9
+675.35889 714.9
+676.64471 1128.6
+703.34247 988.1
+706.35217 813.6
+706.85138 1412.2
+710.14410 928.2
+711.34784 9436.4
+711.84894 10269.5
+712.35120 5535.8
+712.85199 2468.4
+720.35370 12958.6
+720.85114 19234.6
+721.35077 14446.0
+721.85016 5390.4
+722.34979 2347.0
+725.46735 69609.1
+726.47028 29842.6
+727.47247 8230.9
+728.47241 1179.7
+729.35400 1050.7
+731.13092 722.4
+733.86951 862.3
+734.40192 1556.0
+734.88812 2407.2
+735.38843 1589.6
+735.88928 1437.0
+738.39740 1234.9
+739.79022 845.0
+740.58099 713.4
+741.87341 2453.5
+742.37457 1738.1
+743.39819 97590.0
+743.89917 87931.8
+744.40033 47482.4
+744.90137 19827.8
+745.39325 5894.4
+745.89789 1385.3
+746.35852 1416.6
+747.36237 2014.3
+747.86157 1641.4
+748.26123 5448.8
+749.26636 1175.0
+749.35992 1394.1
+750.26666 755.3
+752.97491 1090.7
+753.47351 786.4
+754.63361 767.8
+755.87244 8598.5
+756.36877 15412.4
+756.86774 11532.8
+757.36749 5676.8
+757.86731 1541.2
+761.33154 3636.7
+762.33380 1592.8
+763.32733 860.1
+764.87073 1164.2
+766.38867 18487.2
+766.62750 802.3
+767.37036 12901.7
+768.37659 6193.6
+768.50781 685.9
+769.37250 1606.7
+781.38751 628.3
+784.38043 1104.4
+784.87689 5262.2
+785.37415 4631.4
+785.87610 2094.2
+786.37598 1276.8
+791.90582 4607.9
+792.40424 6179.4
+792.90753 4892.2
+793.41205 1996.2
+793.88135 810.7
+794.28265 964.1
+798.51709 893.3
+799.01556 884.0
+800.91174 206570.0
+801.32489 930.3
+801.41254 215867.3
+801.91290 124181.1
+802.09961 930.5
+802.41461 50623.3
+802.91486 16263.6
+803.41986 3643.6
+803.82025 1263.7
+803.92059 1072.5
+816.91364 797.0
+827.97119 771.5
+842.38574 3287.4
+843.38550 1012.1
+848.44922 964.9
+848.94562 1731.4
+849.44794 840.6
+853.56219 14401.1
+854.56543 6534.9
+855.56696 2364.6
+857.45343 72356.4
+857.95428 77550.5
+858.34497 2351.8
+858.45575 46428.0
+858.95624 19354.1
+859.35175 1004.8
+859.45483 7882.8
+859.95923 2210.1
+860.39648 4767.8
+861.39569 2731.3
+862.39905 870.8
+865.50616 1155.7
+876.35614 9822.3
+877.35809 4995.7
+878.36969 1003.4
+880.40039 824.1
+897.42926 17262.7
+898.42957 9063.1
+899.42773 4285.1
+900.42468 1361.3
+904.99072 1367.3
+905.49799 1604.4
+906.49146 997.1
+913.99536 67249.8
+914.49652 82757.4
+914.99768 53405.1
+915.49847 25730.8
+915.99963 7646.7
+916.49725 2022.7
+916.97546 760.6
+931.43439 4209.8
+932.44525 2091.1
+936.98773 863.8
+945.99579 1223.7
+946.50000 977.8
+947.44617 1111.1
+949.44141 815.3
+958.40240 760.0
+968.58807 9020.3
+969.58838 5081.2
+970.01147 1209.8
+970.59076 2341.7
+974.42346 872.5
+975.42633 5187.5
+976.42767 2803.7
+977.42798 1108.5
+979.04913 1050.5
+988.45734 805.2
+989.44434 1676.5
+990.45203 989.3
+994.55731 951.9
+1009.44647 1553.0
+1010.43610 1178.0
+1011.45612 757.0
+1026.47156 24839.2
+1027.47266 16963.9
+1028.47339 6996.8
+1029.47302 2068.5
+1034.54761 820.3
+1039.62512 6859.1
+1040.62927 5015.9
+1041.62354 1627.6
+1046.46594 3528.7
+1047.46448 2080.9
+1048.46240 1061.7
+1055.90405 659.1
+1070.50635 977.2
+1080.47327 1100.0
+1081.48633 1098.2
+1088.51501 1379.7
+1097.50854 15241.6
+1098.50757 10947.0
+1099.50635 4939.8
+1100.50977 2231.4
+1102.51440 1444.3
+1103.80701 667.3
+1160.54211 898.2
+1168.66895 3264.3
+1169.67664 3626.1
+1170.70581 746.3
+1188.24402 801.6
+1195.50671 2046.8
+1196.51526 1566.3
+1198.16638 3591.9
+1201.58899 1065.3
+1212.53564 34014.2
+1213.53650 28201.1
+1214.53674 13203.1
+1215.53748 4412.7
+1216.52942 1264.0
+1229.56079 1632.7
+1230.54871 2583.8
+1231.53369 865.0
+1272.61072 919.1
+1324.61536 1326.4
+1325.62292 921.0
+1340.63208 9296.0
+1341.62512 12285.6
+1342.62219 7015.4
+1343.61646 2807.0
+1344.63989 993.7
+1426.71924 681.0
+1427.69312 1069.0
+1428.76086 645.3
+1440.68774 3311.7
+1441.68030 2683.9
+1442.69482 1266.9
+1471.17212 624.0
+1511.71790 888.6
+1525.42590 775.4
+1568.70813 1099.7
+1877.97961 714.0
+1878.63416 619.2
+1878.80884 620.6
+1879.07190 1517.8
+1879.53992 19578.2
+1879.92688 1876.2
+1880.23938 871.9
+1880.83911 764.9
+1881.07080 846.9
+1907.09546 7387.5
+1930.62476 959.0
+S	2597	2597	1879.96324127
+Z	2	3758.079
+Z	3	5636.614
+532.53058 2012.4
+536.11395 555.6
+573.19507 571.7
+600.65723 621.7
+630.43848 744.7
+637.50562 559.0
+676.63934 787.4
+795.71173 727.0
+858.09729 650.0
+872.75854 600.3
+967.73474 634.1
+1019.72229 693.1
+1057.24792 746.8
+1178.16284 608.5
+1198.18604 3109.7
+1343.29285 685.1
+1351.50916 626.8
+1494.44678 560.0
+1667.15759 695.2
+1870.29932 1021.4
+1870.58057 624.5
+1876.10791 681.6
+1878.71558 1083.9
+1879.26465 2134.7
+1879.54163 20044.0
+1880.41675 1114.5
+1907.14893 7468.6
+1925.10522 586.8
+1930.69238 900.8
+S	2598	2598	801.7972186
+Z	5	4003.94697
+230.01907 549.6
+239.93475 516.0
+240.13461 1579.4
+255.32121 779.5
+255.99756 636.8
+257.55396 607.5
+308.88293 565.9
+322.85281 700.8
+329.21768 1318.8
+339.20285 1995.1
+357.21371 4045.1
+358.21606 941.2
+363.57178 551.3
+410.27866 779.0
+411.26373 999.0
+427.21860 3016.0
+427.58939 897.6
+428.28641 1671.7
+438.27051 7205.1
+439.27402 1374.8
+456.28140 11121.8
+457.28455 2308.7
+482.81067 569.0
+496.24249 681.8
+516.78760 1582.3
+517.29456 1647.9
+532.55347 1800.6
+549.21515 894.1
+569.98560 587.9
+582.83716 850.2
+595.30707 1057.1
+605.63898 2574.0
+605.97375 5048.0
+606.30817 1902.3
+606.64441 1259.6
+625.18713 560.3
+630.47253 748.4
+633.12653 580.5
+638.05475 632.8
+639.12244 600.6
+662.08508 673.1
+676.33502 1984.2
+676.66705 2153.1
+677.00385 1300.4
+677.67108 625.9
+706.82794 1769.3
+707.07697 1369.3
+707.32684 1229.9
+710.74109 2291.7
+710.94318 1828.7
+725.35474 1833.9
+725.69128 4516.7
+726.02356 2720.4
+726.37775 2503.5
+727.39850 676.2
+730.35797 759.7
+730.55670 1118.1
+730.75006 1367.1
+730.95703 825.4
+731.15259 900.2
+734.84857 1277.7
+735.09821 2986.0
+735.34930 3208.3
+735.60638 805.5
+749.30029 673.1
+760.11078 886.5
+763.36993 780.4
+767.46313 708.7
+768.36804 2097.6
+768.70477 3620.4
+769.03931 2615.9
+769.37421 946.9
+769.98645 2394.0
+770.18384 10491.4
+770.38403 13976.6
+770.58575 9757.5
+770.78558 5454.2
+770.98486 5458.8
+771.18750 954.0
+776.31244 735.4
+781.61700 960.1
+781.87421 718.9
+825.46741 775.0
+849.06683 1524.1
+849.40515 3762.3
+849.73828 3410.1
+850.07520 1344.2
+863.92059 787.8
+864.16919 823.2
+864.40918 1169.9
+879.42163 1642.0
+880.17133 825.7
+882.41138 1130.0
+883.42426 2864.0
+883.67438 7495.1
+883.92316 11965.0
+884.17328 11537.6
+884.42456 7263.0
+884.67358 5018.7
+884.92511 1372.5
+886.81024 611.5
+886.85809 621.6
+887.04779 1164.5
+887.41138 5082.4
+887.74548 9680.1
+887.92731 53690.3
+888.08789 7967.6
+888.17743 136166.8
+888.42761 177201.4
+888.67816 142654.0
+888.92853 80587.3
+889.17847 36371.6
+889.42871 17658.8
+889.67828 5202.1
+889.93066 3017.1
+890.18262 1319.5
+907.95514 2416.6
+908.45258 5382.0
+908.69257 5889.4
+908.94531 4707.5
+909.19275 3461.4
+909.44928 2023.5
+909.70483 1167.9
+912.69415 21130.0
+912.94397 56732.6
+913.19464 70842.4
+913.44495 59892.4
+913.69543 35558.0
+913.94586 16737.5
+914.19556 7353.9
+914.44757 2347.6
+914.69745 1187.7
+933.50934 1020.9
+933.70264 905.2
+936.09271 2141.3
+936.42670 3832.7
+936.75787 1797.7
+937.09308 1113.1
+937.46265 6785.3
+937.71124 16296.0
+937.96185 23296.4
+938.21210 24831.3
+938.46246 12131.5
+938.71362 6542.2
+938.96747 3423.5
+941.76813 13936.6
+942.10034 23495.0
+942.43512 24529.8
+942.76965 15643.9
+943.10468 7318.9
+943.43695 2386.7
+943.77673 798.0
+944.10724 751.3
+962.22510 3127.1
+962.47815 6203.4
+962.72797 12230.6
+962.97986 7144.0
+963.22949 4466.7
+963.47485 1545.6
+963.73083 817.9
+973.78693 1076.7
+974.12988 2153.3
+974.45483 3003.8
+979.46100 12814.5
+979.79626 25033.8
+980.13000 25916.5
+980.46387 17447.7
+980.79956 10179.6
+981.13574 3604.6
+981.46265 882.6
+981.73920 665.8
+986.25714 928.5
+1002.14215 2555.5
+1002.47949 3219.7
+1002.81213 3285.8
+1003.14777 2083.9
+1003.79639 712.3
+1004.49207 721.3
+1005.48401 752.8
+1012.47913 1157.2
+1012.82495 1462.5
+1013.15234 3554.8
+1013.48914 2468.8
+1013.81696 1099.0
+1013.99524 4290.2
+1014.50104 3713.8
+1014.99988 3550.4
+1015.50098 1954.4
+1041.49011 1593.9
+1041.83008 3750.7
+1042.15991 4582.0
+1042.49780 3029.3
+1042.82910 848.1
+1043.50061 871.3
+1050.57605 838.0
+1068.59167 1007.9
+1072.80444 667.4
+1074.50232 1041.2
+1079.83875 2052.6
+1080.17041 4427.9
+1080.50513 3974.3
+1080.83508 3148.6
+1081.18091 1574.3
+1087.53296 1496.2
+1088.03003 2762.2
+1088.53223 1291.6
+1089.04395 1009.3
+1111.51099 838.8
+1111.86597 810.9
+1112.19409 830.0
+1115.85718 1078.1
+1116.19312 4155.6
+1116.52600 4622.5
+1116.86389 3925.3
+1117.19165 1985.8
+1117.52649 2804.3
+1117.86584 3771.3
+1118.19885 5827.9
+1118.53601 3365.5
+1118.87244 1760.5
+1144.06274 832.4
+1145.87488 690.5
+1148.87024 1198.3
+1149.21289 1586.7
+1151.55310 935.7
+1151.88171 2336.1
+1152.22156 1403.1
+1152.54590 2027.6
+1153.05957 908.0
+1154.87268 1085.7
+1155.21936 1485.8
+1155.55200 860.8
+1178.22693 1418.3
+1183.56714 4882.3
+1183.89954 16384.8
+1184.23413 14268.3
+1184.56860 13127.5
+1184.90479 8712.2
+1185.23828 4038.6
+1185.56226 3699.6
+1185.93738 634.0
+1186.56921 996.0
+1188.34033 1045.7
+1198.24072 3077.8
+1216.93372 1183.3
+1217.26184 1396.9
+1217.59326 1026.1
+1217.92737 1789.6
+1299.63171 769.2
+1368.13098 1345.7
+1434.78735 689.6
+1489.86145 624.1
+1529.21912 631.0
+1737.72803 618.2
+1878.22412 945.1
+1878.91003 1894.7
+1879.23706 3543.1
+1879.54968 19028.2
+1879.85852 3844.8
+1880.87671 987.9
+1882.70203 719.9
+1907.12305 7124.4
+S	2599	2599	1001.9945546
+Z	4	4003.94692
+271.43710 833.0
+276.94299 598.3
+291.86206 697.9
+302.85754 619.3
+306.87314 600.2
+320.30008 563.8
+357.21286 1396.4
+375.87711 664.4
+383.46823 562.9
+386.16589 655.4
+410.27783 741.1
+438.27081 4239.7
+456.28076 3093.5
+457.28558 1054.7
+480.65936 569.3
+532.54382 1798.8
+549.16595 870.6
+572.35852 708.3
+616.22803 612.5
+630.42505 964.6
+638.22522 759.0
+676.63916 828.5
+683.48218 619.6
+723.81183 655.6
+731.14435 875.0
+744.03094 620.7
+791.37988 687.7
+795.73425 1097.3
+888.17590 3712.5
+888.42706 6691.4
+888.67816 6569.4
+888.92700 5455.9
+889.17584 2526.0
+889.42816 1345.0
+889.69159 745.0
+899.45801 920.3
+907.95502 2131.0
+908.45551 5178.0
+908.95746 4120.4
+909.46167 1752.6
+909.95917 891.7
+912.94263 1035.7
+913.19501 1940.7
+913.44849 4804.9
+913.69342 2341.2
+913.93994 1485.7
+914.19415 1569.7
+917.14813 663.8
+942.09644 684.8
+942.42328 1341.4
+962.48987 1045.4
+962.72601 3820.8
+962.97656 3268.8
+963.23096 3113.9
+963.48749 1273.5
+963.72510 927.8
+980.13281 1377.5
+982.72461 713.2
+989.64972 705.1
+1019.69440 766.3
+1043.16565 725.6
+1080.17065 1020.6
+1080.50623 2773.4
+1080.83752 2417.8
+1081.17517 1448.8
+1116.53064 1776.6
+1116.86426 2576.8
+1117.19592 1111.3
+1144.51392 632.9
+1149.87720 992.0
+1151.88525 2007.5
+1152.22266 765.6
+1173.22632 803.8
+1177.89954 3558.0
+1178.22925 9483.9
+1178.56409 9375.1
+1178.89844 8666.4
+1179.23083 3941.1
+1179.56226 2424.0
+1183.56519 8383.5
+1183.89929 53299.6
+1184.23364 113397.9
+1184.56787 126551.2
+1184.90137 96344.4
+1185.23535 47623.8
+1185.56946 20772.1
+1185.90747 8326.6
+1186.23877 908.8
+1188.89258 831.2
+1198.21533 3454.3
+1210.90625 726.3
+1211.24988 2180.3
+1211.59009 3600.4
+1211.91345 1277.5
+1212.25061 1007.1
+1216.59033 2666.9
+1216.92065 16569.9
+1217.25635 32435.8
+1217.59009 40475.9
+1217.92297 30519.7
+1218.25806 17361.6
+1218.59119 5602.6
+1218.92590 2430.0
+1238.33911 724.0
+1243.94324 768.0
+1244.28003 1165.3
+1244.59778 1231.8
+1244.94116 1695.8
+1249.61951 1176.3
+1249.94263 11814.3
+1250.27844 27138.7
+1250.61218 33454.9
+1250.94580 23858.6
+1251.28052 14968.3
+1251.61450 6028.8
+1251.95020 2281.5
+1273.60156 1392.1
+1274.10205 2406.6
+1274.59424 1964.7
+1282.95850 1373.5
+1283.29895 4871.8
+1283.63464 5823.5
+1283.96838 5878.8
+1284.31006 2852.3
+1284.63098 840.8
+1344.95996 611.5
+1349.73901 636.3
+1443.11084 663.4
+1469.69153 983.0
+1470.20105 1084.8
+1576.80554 708.8
+1616.31165 661.2
+1674.27954 2619.4
+1674.77637 2539.7
+1675.27734 1811.2
+1734.77441 781.4
+1735.79175 1499.2
+1736.79614 1554.7
+1878.75574 799.8
+1878.94360 1086.7
+1879.25964 2791.9
+1879.53723 19565.3
+1880.07336 1589.4
+1907.08679 7613.0
+1930.67383 957.9
+S	2601	2601	1002.0042596
+Z	4	4003.98574
+276.93033 536.3
+317.74384 642.0
+320.49780 618.7
+342.30075 648.2
+347.86520 585.2
+438.26953 1090.5
+456.28235 1010.3
+489.26718 551.1
+501.83224 626.4
+532.59186 1777.9
+542.76685 549.9
+676.67609 862.1
+689.60956 611.6
+690.80743 638.8
+768.45453 658.1
+795.72998 789.0
+797.08911 619.4
+837.05347 668.8
+851.82202 682.7
+879.09747 638.9
+882.23651 685.6
+888.17725 1254.8
+888.41656 891.4
+888.68304 1710.6
+888.92749 1783.1
+889.17590 1261.5
+907.95245 1231.6
+908.44977 1157.0
+908.95734 1419.8
+913.44989 784.3
+913.69330 891.7
+940.37634 582.2
+962.23175 892.5
+962.48169 664.7
+963.23206 1483.5
+963.47559 1259.7
+1116.35217 636.2
+1177.56580 1326.3
+1177.88599 1119.6
+1178.22437 2173.4
+1178.56091 2072.7
+1178.90051 2699.2
+1179.22705 1518.3
+1179.56763 1530.5
+1183.22839 922.7
+1183.56384 18771.4
+1183.89819 28625.8
+1184.23328 25017.7
+1184.56726 31270.3
+1184.90161 37407.1
+1185.23608 23109.6
+1185.56702 6742.4
+1185.89575 855.3
+1198.31982 3037.0
+1211.90247 709.2
+1212.26978 696.6
+1216.58972 6348.6
+1216.92126 8514.6
+1217.25647 6703.4
+1217.58972 8873.2
+1217.92346 11638.6
+1218.25769 7966.4
+1218.58618 3001.4
+1249.60669 5174.0
+1249.94275 8843.5
+1250.27881 7021.1
+1250.61157 8134.0
+1250.94604 10206.4
+1251.28101 7283.3
+1251.61292 3010.5
+1275.13708 741.2
+1282.63538 835.0
+1283.30066 1506.0
+1283.63867 2039.5
+1283.97473 2364.7
+1284.30994 1686.9
+1361.80017 732.4
+1574.43005 724.5
+1665.07239 662.2
+1674.77478 967.3
+1675.28979 953.2
+1735.78906 1078.8
+1776.95288 798.9
+1878.37341 941.4
+1878.85889 784.5
+1879.19360 2777.6
+1879.61694 18683.2
+1880.04724 2908.4
+1880.32788 1227.5
+1881.02954 1016.4
+1907.02905 7392.1
+1930.74792 1236.5
+S	2602	2602	801.8049706
+Z	5	4003.98573
+213.20364 65611.6
+220.95059 59367.9
+223.58794 60173.5
+236.21803 63767.6
+246.37776 56131.1
+250.80161 47825.8
+254.91861 66486.6
+275.52179 60382.5
+286.04883 64886.6
+293.62204 61102.3
+308.92896 71195.9
+323.97839 61295.2
+342.30035 66221.8
+350.27917 71629.9
+352.45895 72910.9
+394.84659 69781.2
+464.68677 61622.6
+482.70139 86541.3
+489.99802 72081.3
+495.75031 62097.0
+496.62402 54946.5
+504.35852 61297.0
+519.33331 62581.7
+532.54901 162760.5
+630.46045 84842.7
+656.00555 65299.8
+676.62994 63406.4
+777.72461 76040.2
+782.57001 75764.9
+888.16602 65362.1
+943.14673 66423.9
+953.84540 84963.2
+971.26080 68226.6
+1034.49170 61077.5
+1057.15210 77726.3
+1057.35730 89992.8
+1198.22620 317228.7
+1264.16907 67437.6
+1315.13086 73090.7
+1421.70837 87283.7
+1459.94263 67526.4
+1536.21350 66418.4
+1870.12671 67295.2
+1870.43994 69987.1
+1878.78210 84739.7
+1879.52271 1800878.8
+1879.79333 655307.0
+1880.13391 184220.6
+1880.39734 83342.2
+1907.05591 728462.7
+1918.90210 80184.6
+1992.55566 62748.1
+S	2603	2603	1003.0063246
+Z	4	4007.994
+282.63998 610.4
+285.06503 563.0
+288.31653 671.9
+305.84869 640.9
+328.56479 746.7
+339.20303 769.1
+357.21225 1561.7
+393.24854 819.7
+411.26151 1312.9
+413.22729 600.0
+428.28793 1372.2
+438.27087 6494.6
+439.27411 1862.3
+456.28110 5436.3
+457.28464 2175.4
+508.52893 669.5
+532.55206 2369.1
+549.16431 990.4
+552.01923 528.4
+592.19977 657.2
+662.85474 636.6
+676.63800 955.8
+689.80548 632.9
+696.12836 606.6
+731.15112 994.7
+733.92755 655.9
+804.74609 686.7
+835.89850 549.6
+850.05402 710.6
+884.66711 863.0
+887.91833 1072.0
+888.17712 4555.7
+888.42639 9416.8
+888.67810 11703.4
+888.92761 7786.3
+889.17822 4286.7
+889.42902 1067.2
+907.95636 4670.7
+908.45703 8300.2
+908.95917 6869.7
+909.46222 3676.2
+909.95886 1200.1
+912.93951 2009.3
+913.19348 6514.6
+913.44550 4377.2
+913.69678 3872.4
+913.94470 3206.8
+937.95917 1594.8
+938.21228 979.2
+938.45819 1158.6
+942.09637 889.2
+942.43372 2438.4
+962.22119 1217.1
+962.47424 2906.6
+962.72742 5094.9
+962.97803 8000.7
+963.22833 5617.3
+963.47626 3229.2
+963.73407 1467.1
+973.32397 707.9
+979.43066 586.9
+979.78320 1016.7
+980.12585 1523.8
+980.46564 1140.9
+982.24103 741.2
+982.73126 936.8
+1042.50159 1172.3
+1063.04907 688.9
+1080.17334 2916.9
+1080.50537 4647.1
+1080.84058 4162.7
+1081.17139 1782.8
+1088.04163 966.3
+1106.07263 620.6
+1111.17468 680.6
+1115.85950 852.6
+1116.18921 1960.6
+1116.52405 4130.4
+1116.85986 4368.3
+1117.19128 3219.6
+1117.52747 2424.3
+1117.86145 1071.9
+1118.20679 1947.3
+1118.52502 993.0
+1132.11011 671.1
+1149.53992 1303.3
+1149.87659 868.9
+1150.22205 1006.8
+1151.54688 2304.5
+1151.88257 1479.4
+1152.21423 1692.7
+1152.56287 1458.2
+1172.24390 603.3
+1172.55212 1202.8
+1177.56128 1958.2
+1177.89661 5871.8
+1178.22949 14572.0
+1178.56531 16628.6
+1178.89941 11359.2
+1179.22913 7244.3
+1179.56506 2491.8
+1179.88013 1094.5
+1180.26733 1221.1
+1181.77551 702.4
+1182.10681 901.6
+1182.53613 1242.9
+1182.88245 889.9
+1183.20422 1283.1
+1183.56567 26253.1
+1183.90027 110436.8
+1184.23438 192535.7
+1184.56812 202493.1
+1184.90173 143253.5
+1185.23560 73361.0
+1185.57031 33705.4
+1185.90686 8772.6
+1186.24341 1927.8
+1186.52930 818.4
+1186.69336 917.1
+1187.00940 727.2
+1187.35913 736.4
+1187.51196 971.7
+1187.77161 1068.0
+1188.43738 941.4
+1188.58569 1504.6
+1188.90674 1576.5
+1198.23853 3456.3
+1210.92224 2952.8
+1211.25562 3562.7
+1211.58948 3534.8
+1211.91846 3651.7
+1212.26050 3109.8
+1212.58069 1363.4
+1216.58716 7604.2
+1216.92188 30422.9
+1217.25635 55827.1
+1217.58972 63461.6
+1217.92310 49385.2
+1218.25891 24897.9
+1218.59180 11522.7
+1218.92554 4780.2
+1219.25830 1090.4
+1243.94128 1287.1
+1244.26892 1457.3
+1244.61060 2535.0
+1244.94849 1200.5
+1245.27173 1368.2
+1249.60876 6190.6
+1249.94434 21068.2
+1250.27808 48072.0
+1250.61243 52144.7
+1250.94592 37579.1
+1251.27942 20240.5
+1251.61426 9962.2
+1251.95166 3631.3
+1273.11414 1388.0
+1273.60315 3044.4
+1274.10107 3677.8
+1274.60559 1826.7
+1282.63159 842.2
+1282.96338 4041.4
+1283.30103 8476.7
+1283.63489 9755.2
+1283.97046 8303.5
+1284.30249 5012.7
+1284.62964 972.9
+1284.96997 991.8
+1412.15735 896.1
+1470.69531 802.8
+1562.74548 1831.9
+1563.27417 758.6
+1617.78748 1139.3
+1667.31372 739.9
+1673.25830 844.9
+1673.78796 3041.6
+1674.28662 4505.6
+1674.78076 5700.2
+1675.28345 2893.0
+1675.78516 1317.1
+1676.27283 1016.5
+1720.59021 882.8
+1723.81787 1212.7
+1724.27173 863.3
+1734.78992 1765.3
+1735.78259 2829.1
+1736.79150 1355.3
+1737.77466 1196.6
+1773.85828 1090.1
+1876.15320 659.6
+1878.31262 772.9
+1878.68103 1148.0
+1878.98584 1626.2
+1879.13953 1709.8
+1879.54443 19583.5
+1880.13538 1782.3
+1880.47180 994.5
+1881.24939 923.1
+1883.78528 611.6
+1907.03418 6860.1
+1907.80103 790.9
+1930.65833 730.3
+S	2605	2605	801.8003926
+Z	5	4003.96284
+225.68340 2945.7
+235.47940 2911.0
+238.70087 3079.1
+250.84877 3188.9
+255.30267 3863.0
+255.96295 2898.1
+292.54205 3113.6
+300.26178 2826.0
+308.63803 2978.5
+308.90280 3510.5
+310.50098 3367.8
+352.10568 3313.2
+356.56845 3582.2
+360.88385 2803.4
+373.41391 2961.8
+374.75513 3679.1
+379.09723 2889.3
+381.46616 3139.4
+382.14819 2667.3
+395.52408 3461.1
+409.70630 3005.3
+438.27097 4373.3
+456.28003 6157.5
+510.00491 3533.3
+532.51068 9828.2
+549.15875 3752.6
+600.30707 2961.1
+605.97467 6014.7
+645.26306 2991.7
+676.65344 5949.1
+678.45990 3296.4
+722.77655 3050.7
+770.18213 8946.7
+795.73553 6072.4
+839.46857 2949.0
+849.40625 6134.5
+849.73029 4129.4
+883.40649 3946.9
+883.67426 11452.3
+883.92114 11118.4
+884.17834 4808.9
+887.74786 5916.1
+887.92560 66110.2
+888.17529 120972.3
+888.42627 114388.7
+888.67688 75852.6
+888.92700 35164.8
+889.17944 20503.1
+889.42377 9518.1
+899.81769 3402.8
+908.68896 7332.1
+912.69263 29868.8
+912.94366 38014.9
+913.19257 38757.2
+913.44220 29257.7
+913.69519 19614.2
+914.20276 6565.2
+931.47540 4180.1
+937.09326 3419.1
+937.46411 10015.2
+937.71143 16442.5
+937.96014 10437.2
+938.20795 7876.5
+938.45697 5055.1
+941.77094 9671.5
+942.09875 20545.3
+942.43726 16388.3
+942.77435 6970.2
+952.03046 3250.7
+962.72180 5013.8
+979.46338 12830.3
+979.79449 11198.7
+980.12714 14890.0
+980.45990 11624.6
+980.79663 4333.8
+1057.26660 4520.7
+1079.84558 3122.6
+1080.48804 4587.3
+1116.18787 4903.3
+1117.86755 3832.5
+1118.21191 4242.6
+1178.22839 4897.3
+1183.57007 4658.8
+1183.90295 14261.2
+1184.22607 11645.8
+1184.56360 9651.9
+1184.89868 6338.4
+1198.15027 14391.3
+1278.10388 3384.0
+1425.63513 3706.4
+1525.43201 4343.4
+1742.17322 3143.7
+1772.00745 3571.6
+1776.96008 3555.8
+1805.81128 3319.8
+1875.48059 3025.0
+1878.48596 5176.4
+1879.09399 4552.8
+1879.56519 97089.6
+1880.11365 5676.6
+1907.06299 37491.0
+S	2606	2606	1001.9980946
+Z	4	4003.96108
+283.12469 668.0
+292.30777 656.6
+308.91931 584.4
+333.42429 621.0
+339.20157 1840.5
+357.21277 2527.3
+380.15732 646.6
+381.37872 796.1
+393.25082 718.9
+410.27548 1502.2
+411.26205 1052.9
+421.61429 580.7
+427.56604 901.2
+428.28650 1244.8
+438.27075 6220.0
+439.27496 1555.3
+441.52115 620.5
+456.28110 6466.1
+457.28580 1685.9
+482.68338 730.0
+516.80151 702.1
+523.75079 651.1
+532.51678 1766.2
+595.23737 604.2
+598.32153 672.0
+676.66132 1025.1
+767.46259 804.7
+787.32281 665.6
+795.72943 1113.1
+806.89081 1194.1
+807.39063 921.9
+883.92371 1616.1
+884.18024 764.5
+887.92609 2695.1
+888.17737 7550.2
+888.42645 15549.9
+888.67719 13402.2
+888.92926 7054.7
+889.17755 3334.9
+889.42645 2736.9
+889.66687 923.1
+898.94806 859.1
+899.44458 891.8
+899.94855 843.2
+907.95593 7359.2
+908.45734 10903.1
+908.95972 8990.6
+909.45978 4095.6
+909.96045 1394.6
+912.94641 4155.7
+913.19556 7140.9
+913.44525 6292.7
+913.69568 4768.6
+913.94977 1904.8
+914.18707 1023.2
+937.96820 929.3
+942.10046 1322.3
+942.43243 1728.7
+942.76984 1129.7
+943.09760 796.1
+962.22394 2137.8
+962.47662 7345.2
+962.72778 7079.8
+962.97894 6898.1
+963.23352 4044.6
+963.48157 3130.9
+963.73297 1800.7
+979.79901 1431.3
+980.12561 2134.9
+980.45593 804.5
+988.71796 619.3
+1019.67358 753.3
+1041.82751 1465.0
+1042.16748 953.1
+1042.50159 814.6
+1043.16663 630.5
+1057.28149 671.2
+1080.17334 3709.6
+1080.50549 4636.6
+1080.83887 2839.1
+1081.17139 1900.2
+1081.51172 1334.7
+1088.03369 1533.5
+1088.54211 831.6
+1115.86670 1388.6
+1116.18823 2620.2
+1116.52393 5065.4
+1116.85596 4648.2
+1117.19446 2963.0
+1117.52502 2276.6
+1117.72485 708.2
+1117.86755 1563.3
+1118.20349 1856.5
+1118.53870 2083.4
+1118.84717 1067.8
+1119.20093 1089.1
+1141.52686 711.0
+1148.88110 905.8
+1149.54480 1941.0
+1149.86340 1202.7
+1150.21838 975.7
+1151.54883 2857.4
+1151.88391 1312.4
+1152.21338 1511.9
+1152.55261 1050.7
+1152.88892 722.1
+1153.54126 877.6
+1155.57861 969.2
+1172.22925 852.8
+1172.56067 931.8
+1172.89795 894.5
+1173.23450 758.7
+1177.55945 3869.8
+1177.89636 12360.9
+1178.23047 19319.0
+1178.56409 20834.0
+1178.89685 13936.9
+1179.23376 7998.7
+1179.56970 3552.1
+1179.90833 1780.7
+1180.05530 608.2
+1180.24377 1647.2
+1180.56543 866.6
+1182.10803 983.4
+1182.42969 885.0
+1182.55823 962.6
+1182.87500 931.8
+1183.09937 883.0
+1183.56580 50700.1
+1183.89978 155201.5
+1184.23389 206040.9
+1184.56763 197720.1
+1184.90125 125427.2
+1185.23511 64817.1
+1185.41406 973.7
+1185.56946 30949.3
+1185.90259 11516.1
+1186.04382 641.4
+1186.23560 3207.4
+1186.55542 1548.7
+1188.21729 757.4
+1188.55859 1274.7
+1188.88855 1453.9
+1189.06287 1072.4
+1198.15356 2976.9
+1210.58484 1312.6
+1210.91846 2001.4
+1211.25342 4715.6
+1211.58203 5130.5
+1211.91675 3711.6
+1212.24878 2009.3
+1212.56702 1402.2
+1216.58826 15473.8
+1216.92041 41496.5
+1217.25562 64210.2
+1217.58899 65945.6
+1217.92261 43579.7
+1218.25708 25211.0
+1218.59155 9622.9
+1218.92712 3631.5
+1219.86902 639.9
+1243.93872 2763.6
+1244.27209 2616.7
+1244.61096 2520.2
+1244.94385 2539.7
+1245.26038 1096.0
+1249.60974 9946.9
+1249.94336 32972.2
+1250.27795 50390.9
+1250.61157 50954.4
+1250.94556 35450.0
+1251.27881 21929.5
+1251.61365 10157.0
+1251.94653 3995.3
+1252.27686 1651.6
+1268.61719 1955.8
+1273.09021 2069.8
+1273.59973 3900.9
+1274.10889 5715.1
+1274.60950 3121.4
+1275.11536 1383.5
+1282.63708 1304.8
+1282.96484 5949.7
+1283.29932 11255.8
+1283.63379 11957.8
+1283.96814 7929.1
+1284.30298 5976.4
+1284.63953 3329.5
+1331.10132 792.5
+1413.14966 1119.9
+1413.64783 1169.1
+1460.70508 807.5
+1461.18457 949.1
+1470.70447 820.1
+1562.22571 767.0
+1562.72937 1448.5
+1563.23108 1190.5
+1565.47778 697.7
+1616.27979 1069.8
+1616.76709 1141.8
+1617.26477 881.5
+1619.77856 889.9
+1673.28967 1506.1
+1673.78162 5765.3
+1674.28247 8189.9
+1674.78455 7870.0
+1675.28625 4831.2
+1675.79285 2896.2
+1676.30505 1068.0
+1723.29919 911.1
+1723.81726 1451.3
+1724.31677 1210.5
+1734.77673 3168.4
+1735.78503 3396.1
+1736.78589 2559.4
+1737.82690 878.4
+1772.86157 947.3
+1773.84473 989.1
+1835.92163 703.4
+1878.61365 1339.0
+1878.99084 1108.9
+1879.61353 17852.5
+1879.93665 4434.1
+1880.22888 2349.5
+1880.51611 1746.6
+1881.31128 1213.7
+1907.16187 7942.4
+1941.30933 763.8
+S	2607	2607	1880.02040793
+Z	2	3758.193
+Z	3	5636.786
+532.50806 1858.9
+554.82147 577.6
+676.64600 1406.8
+687.33240 665.5
+795.73248 775.1
+1021.21735 735.1
+1062.73035 650.6
+1198.13000 3389.7
+1200.44031 615.9
+1363.07397 545.8
+1396.83264 644.8
+1512.25671 641.7
+1633.89307 776.7
+1673.65332 727.3
+1728.73315 585.3
+1860.03320 779.2
+1877.68506 1014.8
+1878.82178 768.5
+1879.54626 19716.0
+1880.21619 1057.2
+1907.08655 7581.2
+1930.74939 1105.0
+S	2609	2609	1002.0010846
+Z	4	4003.97304
+269.86636 675.1
+285.70984 610.2
+311.20914 1407.0
+336.25452 691.2
+339.20273 2835.4
+339.66153 644.0
+351.56567 631.9
+357.21338 2670.7
+366.83768 541.3
+366.85120 577.2
+410.27759 1901.9
+411.26337 1783.5
+427.21811 1670.2
+428.22220 793.9
+428.28723 2181.9
+438.27087 11153.2
+439.27582 2001.8
+456.28125 10648.9
+457.28464 1773.4
+531.97650 639.2
+532.52356 1430.4
+536.84088 713.1
+605.64233 907.3
+605.96893 1030.9
+628.71167 597.8
+668.04755 797.4
+675.32196 689.3
+676.35687 595.8
+676.60223 737.2
+676.65869 1489.9
+725.35229 777.1
+726.39435 627.0
+782.03857 626.8
+795.40466 895.2
+795.74445 1144.4
+806.39313 1541.0
+806.90564 737.6
+849.40594 999.3
+883.67017 1012.3
+887.75482 751.2
+887.92676 8459.9
+888.07428 896.6
+888.17688 17030.7
+888.42712 19237.7
+888.67792 17242.2
+888.92957 7946.6
+889.17828 3810.1
+889.41620 1080.1
+898.95056 2176.9
+899.44922 2196.3
+899.95648 1282.5
+907.95587 16682.2
+908.45758 17648.7
+908.95953 11710.6
+909.45966 5761.4
+912.69257 3789.0
+912.94421 7892.3
+913.19513 9631.5
+913.44434 7106.3
+913.69348 4522.6
+913.94501 1553.9
+936.09613 949.0
+937.71320 1008.2
+937.95807 897.0
+941.76587 1326.1
+942.10144 2653.9
+942.43506 2600.2
+942.76727 1475.8
+943.10156 904.2
+959.46283 1152.7
+960.06219 803.0
+962.22748 5059.4
+962.47717 13094.5
+962.72620 9955.7
+962.97955 10169.8
+963.22760 6571.0
+963.48334 1980.6
+963.73035 1981.9
+972.86609 714.2
+975.42212 733.6
+976.54681 667.6
+979.45111 846.8
+979.79645 2319.5
+980.13397 1724.8
+980.47003 1179.1
+1003.99280 629.9
+1008.68829 635.6
+1014.99078 1073.8
+1041.84045 1101.8
+1042.16882 1842.3
+1057.28345 641.8
+1073.85718 743.0
+1079.83704 3116.9
+1080.17285 6024.7
+1080.50732 5976.0
+1080.84058 4802.8
+1081.17908 2266.9
+1086.94678 766.2
+1087.53052 2210.9
+1088.03284 3318.9
+1088.53943 1731.8
+1110.50793 957.8
+1111.87158 729.3
+1115.86108 3387.8
+1116.19067 7470.6
+1116.52588 8291.9
+1116.85925 6585.4
+1117.19580 3013.0
+1117.53345 2944.7
+1117.87036 2414.9
+1118.20044 2484.7
+1118.53210 2888.4
+1136.19202 974.3
+1141.21899 1404.0
+1141.53918 2186.8
+1141.87830 1138.2
+1145.55212 899.8
+1145.87085 1162.1
+1148.87634 883.8
+1149.21326 2651.8
+1149.54724 2295.2
+1149.87988 2883.9
+1150.21741 2077.0
+1150.90613 814.4
+1151.22327 1670.0
+1151.55652 2771.3
+1151.88062 2147.7
+1152.21582 1968.2
+1152.56030 1763.3
+1155.21814 1146.2
+1155.55005 970.9
+1171.88794 1337.8
+1172.04626 793.6
+1172.19604 1174.0
+1172.55029 2554.9
+1172.89648 943.5
+1177.56213 10128.0
+1177.89661 26051.6
+1178.22974 32261.5
+1178.56421 26778.0
+1178.89978 18444.7
+1179.23499 11010.0
+1179.57886 4892.4
+1179.91260 2730.0
+1180.25146 2222.1
+1180.38196 943.7
+1180.58948 1007.5
+1180.91821 743.8
+1181.00732 627.6
+1181.78015 1267.6
+1182.11646 1700.3
+1182.46094 965.7
+1182.56018 2145.6
+1182.88831 1873.1
+1183.05042 1156.1
+1183.10974 1210.2
+1183.56665 139247.0
+1183.90063 299771.5
+1184.23413 332496.7
+1184.56750 252621.5
+1184.90112 149498.2
+1185.23572 70277.7
+1185.56873 32144.8
+1185.90515 10893.6
+1186.03491 1307.1
+1186.23645 2593.0
+1186.36182 1631.3
+1186.56140 2694.7
+1186.70044 1141.6
+1187.13354 782.1
+1187.79260 1161.2
+1187.90979 1574.2
+1188.23083 2319.2
+1188.57019 1924.3
+1188.89319 1803.2
+1189.62659 689.9
+1198.16504 3378.1
+1202.86462 864.5
+1210.59009 2191.3
+1210.91565 6988.4
+1211.25281 8440.2
+1211.58398 5155.5
+1211.91846 3473.9
+1212.25879 1973.0
+1212.59387 696.4
+1215.92407 704.6
+1216.24670 1015.2
+1216.58813 39484.5
+1216.92126 90062.6
+1217.25549 106195.5
+1217.58887 81796.2
+1217.92285 54007.3
+1218.25830 24529.8
+1218.59106 10737.5
+1218.92700 4461.8
+1219.17322 723.2
+1221.46606 640.7
+1221.77258 940.2
+1222.12854 592.0
+1243.61438 1441.6
+1243.94202 4185.7
+1244.27356 3470.8
+1244.60535 3684.3
+1244.94153 3102.9
+1249.60974 33605.5
+1249.94336 71128.4
+1250.27734 85323.7
+1250.61133 67211.2
+1250.94531 43385.0
+1251.27942 23402.6
+1251.61609 7382.8
+1251.94910 4686.5
+1252.27441 1710.0
+1267.94092 1481.4
+1268.28833 1570.8
+1268.61304 1897.1
+1273.10107 2927.8
+1273.60266 6743.0
+1274.09766 5936.6
+1274.60156 3442.2
+1275.10632 1946.1
+1276.96680 921.8
+1277.30371 1433.4
+1282.63110 8112.9
+1282.96582 15638.4
+1283.30066 17229.2
+1283.63611 14934.6
+1283.96973 9956.2
+1284.30322 4962.1
+1284.63464 2426.2
+1313.99451 858.8
+1314.32397 1428.8
+1330.61304 1346.9
+1331.11902 1182.4
+1331.63416 1368.7
+1367.60364 1006.9
+1403.63940 784.2
+1404.13086 1132.3
+1412.14673 982.3
+1412.63892 1932.8
+1413.14844 1520.0
+1413.65112 1461.7
+1460.67114 1044.5
+1467.09644 702.2
+1468.68518 922.4
+1469.19080 3050.3
+1469.69482 2516.8
+1470.20715 1241.3
+1470.70081 794.7
+1495.73987 1028.3
+1553.23621 948.3
+1562.24170 1899.1
+1562.74622 2006.7
+1563.24817 1540.7
+1563.75708 1015.2
+1615.76221 1202.9
+1616.27869 2397.1
+1616.76672 2436.2
+1617.27747 1821.9
+1617.76514 1380.7
+1625.25574 1124.0
+1665.25403 1243.1
+1665.75781 1024.2
+1673.28345 7081.0
+1673.78259 14313.4
+1674.28223 14490.0
+1674.78723 11017.2
+1675.28308 5753.0
+1675.78259 2630.6
+1676.29553 980.8
+1722.80383 1353.0
+1723.31982 3318.5
+1723.81689 2834.5
+1724.32813 1506.3
+1724.83179 1557.5
+1734.78430 4804.1
+1735.78711 5357.5
+1736.78845 3633.1
+1738.75977 847.1
+1772.85791 1433.1
+1773.36450 1938.3
+1773.85815 1309.3
+1774.85205 853.5
+1775.34814 719.5
+1814.90051 948.0
+1834.85999 888.5
+1877.69849 799.5
+1879.57190 19367.4
+1880.49792 961.4
+1907.14880 6534.6
+S	2610	2610	801.8027106
+Z	5	4003.97443
+227.98474 1531.1
+231.64595 1618.8
+240.13448 5789.7
+249.08733 1919.7
+255.29887 2492.1
+258.14481 3281.7
+271.56635 2731.3
+280.19217 2408.2
+292.73181 1901.3
+294.18158 2159.8
+329.21924 7484.4
+339.16132 2226.6
+339.20316 9760.7
+339.88721 1868.0
+357.21411 22787.0
+358.21713 3752.0
+371.88736 1783.8
+392.39883 2426.8
+393.24881 4360.3
+410.27667 6463.4
+411.26083 7096.6
+427.21994 13696.1
+428.22272 3272.9
+428.28595 9514.1
+429.28961 3135.7
+438.27142 45777.9
+439.27432 7171.3
+440.27701 2525.7
+450.50424 1851.4
+456.28201 64070.2
+457.28580 14473.5
+476.25568 2216.8
+482.67795 2438.0
+516.78998 9676.5
+517.29279 5687.0
+525.79608 3254.2
+530.60590 2385.3
+532.53906 6264.0
+546.30420 2154.8
+573.32813 2238.9
+585.80817 3043.2
+586.05658 2264.3
+586.30872 2485.3
+591.34631 2612.5
+591.84552 2078.8
+593.28253 2450.0
+593.77838 2186.8
+595.30780 4911.2
+602.83545 2016.7
+605.64063 19378.7
+605.97461 19764.9
+606.30914 11357.4
+606.64258 6995.5
+613.31995 5142.7
+634.23950 1860.3
+637.30621 2774.7
+638.83649 2505.4
+650.23975 3377.6
+666.06158 3212.0
+676.33490 15279.4
+676.67120 8278.9
+677.00055 6181.6
+677.34009 4137.1
+688.31482 2346.6
+704.40948 2109.9
+706.57770 4429.7
+706.82715 9726.5
+707.07831 8859.2
+707.32996 4915.5
+707.74768 2401.5
+708.39313 3095.9
+710.74133 4636.2
+710.94617 6042.2
+711.14215 7373.0
+711.54645 2398.0
+725.35858 13858.0
+725.69196 24503.0
+726.02545 13828.1
+726.38025 9131.1
+727.15814 3004.5
+727.40607 3833.0
+730.35583 6326.9
+730.55975 10807.9
+730.76141 8727.8
+730.95935 4654.3
+731.15045 2060.3
+731.36340 4678.1
+734.84985 14351.1
+735.09906 19789.2
+735.34991 16931.4
+735.60144 11102.5
+735.85052 3188.5
+749.45404 5266.0
+751.95996 2135.1
+758.46747 2451.0
+759.62000 2271.1
+759.86609 4127.1
+760.44122 4007.1
+762.36548 2346.8
+762.69690 3034.2
+763.33014 2205.7
+765.06073 2392.6
+766.57599 4518.9
+766.97968 5677.6
+767.37775 3150.7
+767.45856 4399.8
+768.36993 13220.8
+768.70575 18481.4
+769.03735 13931.4
+769.37738 3992.5
+769.70270 3618.5
+769.98541 48937.3
+770.18536 95988.4
+770.38605 124964.9
+770.58655 101919.5
+770.78662 67240.0
+770.98718 33229.5
+771.18762 10922.9
+771.39185 4570.4
+771.59070 2194.2
+795.72711 3611.5
+813.50354 2341.8
+830.36273 2019.1
+834.69257 2587.0
+838.65912 2795.5
+838.91492 3165.5
+839.15283 2944.1
+839.40222 2386.7
+844.08484 2229.9
+849.07288 14663.9
+849.40759 24118.1
+849.74170 17995.9
+850.07611 10911.5
+850.40930 2693.7
+859.41010 2666.3
+863.91351 3146.6
+864.16638 6333.0
+864.42139 6386.8
+864.66547 2415.9
+879.16766 4000.7
+879.42139 6668.0
+879.67346 5296.0
+879.92529 4964.3
+881.02441 2775.1
+881.74713 4228.2
+882.07892 8463.3
+882.40338 4550.2
+883.42749 29471.1
+883.67590 66058.5
+883.92609 78909.0
+884.17700 61322.0
+884.42621 33458.7
+884.67712 23604.4
+884.93121 11540.1
+885.15973 5940.8
+885.30646 3036.5
+885.39832 9482.2
+885.57733 4018.3
+885.64380 7874.9
+885.82281 4441.3
+885.88672 5873.1
+886.09766 3324.7
+886.79889 6490.6
+887.06140 8781.5
+887.31506 6917.0
+887.41541 41613.8
+887.75189 63503.4
+887.93048 682135.6
+888.09247 60435.7
+888.18030 1395467.1
+888.42889 1567853.8
+888.67871 1134970.6
+888.80511 8167.4
+888.92865 683658.8
+889.02264 7197.4
+889.17944 290646.8
+889.42902 133494.0
+889.54132 7768.6
+889.67865 44937.1
+889.80334 10046.3
+889.92981 10878.1
+890.05389 7001.7
+890.19714 4503.7
+890.31390 3514.4
+890.64594 2666.4
+890.73602 4257.4
+890.98102 8164.1
+891.06097 3694.4
+891.22662 10122.8
+891.30682 4400.9
+891.47321 7803.9
+891.56885 3980.5
+891.63239 3230.9
+891.73523 4009.4
+892.17737 2662.3
+895.43146 5410.0
+898.95068 5028.3
+899.44586 3003.7
+899.95923 3888.4
+900.06396 2187.5
+907.95953 21504.7
+908.19305 10638.2
+908.44946 33085.5
+908.69214 40479.6
+908.94690 29703.8
+909.19348 15220.8
+909.44635 8007.3
+909.69489 5080.3
+909.95032 4009.0
+911.53217 2229.0
+912.43146 5965.1
+912.69568 279874.3
+912.94574 612138.5
+913.19580 671082.3
+913.44586 506193.3
+913.69641 293478.6
+913.94684 138259.2
+914.19824 55266.2
+914.44928 28543.8
+914.61835 3583.4
+914.70593 7527.6
+914.96356 2610.8
+915.76526 3172.0
+916.11322 4428.6
+916.35443 3304.7
+917.09650 3006.2
+924.48676 2069.0
+932.95551 4342.9
+933.20673 5883.3
+933.45917 7120.9
+933.50806 6389.3
+933.71106 4330.6
+933.96100 3640.2
+934.20270 2363.0
+934.51160 4501.4
+934.67999 2003.8
+934.95123 3017.7
+935.50269 2556.7
+935.76080 3571.8
+936.09393 17744.2
+936.43048 19920.8
+936.75842 13056.2
+937.09418 7718.6
+937.46136 149846.1
+937.71252 288788.4
+937.96228 362584.3
+938.21326 272831.0
+938.46313 180871.5
+938.71442 80241.8
+938.96478 37457.3
+939.21558 10915.5
+939.72705 3108.0
+940.97626 2568.3
+941.76837 106286.5
+942.10193 190523.4
+942.43671 147547.5
+942.77148 93419.5
+943.10474 41750.4
+943.43762 14805.7
+943.78058 4454.8
+950.96759 2593.8
+951.45581 4333.9
+951.50647 3335.8
+952.20905 2683.4
+952.49603 3786.3
+959.44965 3272.7
+962.22858 46868.7
+962.47882 112605.9
+962.72949 128149.8
+962.98004 115935.9
+963.23029 59692.5
+963.48016 30593.5
+963.72955 6337.5
+963.98602 7727.8
+964.25220 2471.6
+973.46124 8035.7
+973.79260 15089.6
+974.12561 18706.8
+974.45563 11355.7
+974.78827 8816.9
+975.12836 3259.4
+979.46277 111201.0
+979.79779 190143.9
+980.13116 167190.7
+980.46570 100734.7
+980.80072 52469.7
+981.13409 21486.9
+981.47241 5999.0
+985.74072 3964.7
+986.00610 7187.7
+986.24249 6535.1
+990.00238 2241.8
+1002.00024 4689.6
+1002.25317 3602.9
+1004.50079 4345.9
+1004.99902 3759.4
+1005.49280 7323.0
+1005.98547 3301.5
+1006.81506 3090.6
+1012.48138 12171.4
+1012.81848 21895.4
+1013.15320 16736.8
+1013.48724 6374.7
+1013.81989 4801.8
+1013.99622 22465.5
+1014.49927 24392.5
+1015.00293 11973.2
+1015.50031 4412.2
+1020.82709 2439.1
+1023.61798 2774.1
+1035.27332 2695.4
+1041.49365 14962.7
+1041.83142 25336.9
+1042.16418 25523.7
+1042.49805 14688.6
+1042.84106 6051.7
+1050.58264 7827.2
+1051.58167 3747.9
+1068.59473 4917.1
+1074.18054 3666.8
+1074.50549 7000.2
+1074.84058 3414.3
+1075.17053 3735.7
+1075.49744 3282.6
+1077.84912 3280.2
+1078.18359 3784.1
+1078.52563 3418.4
+1079.04321 4560.2
+1079.84009 18698.7
+1080.17395 27678.6
+1080.50867 26384.9
+1080.84131 21263.5
+1081.17493 10860.5
+1081.51416 3127.8
+1087.53198 11900.5
+1088.03467 14234.7
+1088.53723 6689.8
+1110.51941 5810.8
+1110.85535 4382.1
+1111.19824 4147.9
+1112.19568 5724.2
+1112.51965 2616.4
+1112.88123 3188.1
+1115.85889 15702.0
+1116.19250 35194.2
+1116.52673 40971.2
+1116.86206 31924.2
+1117.19482 14627.2
+1117.53235 17310.2
+1117.87036 22897.8
+1118.20251 18608.3
+1118.53821 23522.6
+1118.87012 6142.8
+1119.18970 2750.3
+1119.53723 2290.5
+1122.46667 3412.3
+1143.55945 3979.1
+1148.88562 6336.1
+1149.21167 15236.0
+1149.55078 11325.2
+1149.87866 7861.7
+1150.20740 3482.3
+1150.54773 3692.8
+1151.21289 6502.4
+1151.55249 12251.5
+1151.88660 8341.6
+1152.05579 5934.3
+1152.21973 7192.9
+1152.55591 12708.5
+1152.86914 3088.4
+1153.05884 3729.0
+1154.53137 2629.9
+1154.87488 6282.2
+1155.20984 4066.8
+1155.55200 3786.5
+1155.88794 3549.9
+1163.67529 3072.4
+1171.54761 3402.7
+1177.57336 3653.8
+1177.89319 6835.8
+1178.22986 6028.9
+1178.56848 5818.3
+1178.89355 5657.3
+1181.65710 2255.4
+1181.88550 3064.0
+1182.23401 2742.2
+1182.58655 4536.2
+1182.89136 3309.1
+1183.07556 3147.3
+1183.56787 69003.6
+1183.90137 137462.0
+1184.23584 149004.9
+1184.57080 103054.8
+1184.90564 81080.8
+1185.23987 27078.5
+1185.56201 15810.0
+1185.90686 5650.1
+1186.55273 5722.9
+1187.55847 2659.6
+1190.54822 2316.7
+1198.20337 10622.7
+1205.95129 1948.0
+1216.58813 5211.1
+1216.92212 11220.9
+1217.25891 13770.6
+1217.59766 10414.5
+1217.92004 6197.9
+1225.16650 2411.3
+1229.54871 3180.8
+1230.07373 2602.2
+1273.58862 2640.5
+1310.59509 6075.4
+1311.09070 8996.1
+1311.58411 3826.6
+1312.08276 3762.9
+1367.13184 6447.8
+1367.62683 8826.5
+1368.13171 6393.6
+1368.63159 2671.4
+1375.64441 6201.7
+1518.18799 2423.7
+1734.79993 4885.5
+1735.76880 4491.7
+1736.79382 2568.2
+1766.64954 2117.8
+1874.63196 2096.1
+1878.45679 2029.7
+1878.75476 2559.3
+1879.23096 7475.8
+1879.61218 58174.5
+1880.02991 6604.9
+1880.69617 4039.3
+1881.08386 2555.4
+1883.48291 3034.6
+1907.03247 22720.4
+1907.36560 2130.5
+1907.49951 2138.2
+1918.87488 2428.8
+1923.62915 2114.7
+1930.69958 3045.3
+1993.49609 2184.5
+S	2611	2611	1003.0023246
+Z	4	4007.978
+269.38980 732.9
+271.91434 601.3
+294.18182 765.5
+312.19489 685.8
+329.21884 1746.4
+339.20245 3572.4
+342.27728 773.1
+357.21371 5106.3
+393.25018 1635.4
+406.98935 622.7
+410.27664 2866.9
+411.26135 2421.1
+427.21680 1617.9
+428.28732 3933.7
+429.29120 1114.0
+430.52710 640.1
+438.27115 14096.0
+439.27380 3990.9
+456.28149 16717.1
+457.28503 3922.0
+480.75388 584.9
+500.87582 585.3
+501.79053 609.9
+524.06964 766.8
+532.54846 1701.0
+557.61084 683.1
+564.08801 639.2
+605.64111 782.8
+605.97815 1031.1
+606.30798 1265.1
+666.09644 704.8
+676.65393 947.7
+689.45758 577.3
+689.73517 711.8
+725.03894 648.6
+725.69373 905.0
+794.90930 1446.7
+795.41376 866.3
+795.90674 1134.5
+806.39203 2452.6
+806.89392 2407.5
+822.39740 679.1
+849.07367 839.1
+849.40796 1780.9
+849.74921 762.1
+858.06158 735.7
+883.42175 1221.9
+883.68048 842.9
+883.92328 1657.5
+884.17584 2455.0
+884.42780 963.4
+887.75110 1237.4
+887.92847 10317.4
+888.09027 1057.6
+888.17773 23747.6
+888.42828 27038.6
+888.67932 19058.4
+888.93011 8237.0
+889.18085 5161.4
+889.42267 1575.0
+898.95099 2395.2
+899.45105 2454.1
+899.94989 1773.9
+907.95764 18817.3
+908.45880 21915.8
+908.96021 14618.7
+909.46106 4817.3
+909.97144 1534.7
+912.69574 5038.3
+912.94617 13344.5
+913.19562 13566.0
+913.44623 7835.1
+913.69855 6564.2
+913.94507 3494.1
+914.19226 844.5
+937.71979 990.3
+938.20667 1424.3
+941.76825 1863.7
+942.09949 3029.0
+942.43842 3903.7
+942.77167 1566.5
+943.11462 941.4
+958.22406 842.3
+959.45581 1475.3
+960.56720 811.2
+962.22748 6900.6
+962.47894 18948.1
+962.72925 19157.9
+962.98126 15692.3
+963.23242 10636.8
+963.48169 6309.1
+963.73615 3175.9
+964.50262 643.5
+970.96991 690.8
+971.85120 1056.8
+973.78918 967.4
+975.17731 811.5
+975.73761 868.5
+979.46375 2130.2
+979.79456 2227.5
+980.13123 2354.9
+980.46484 1628.3
+1014.49213 919.6
+1038.89417 719.0
+1041.82959 1707.4
+1042.16382 1479.8
+1042.49988 1721.2
+1042.81982 1168.4
+1048.68286 728.1
+1060.87415 712.4
+1079.84241 3439.4
+1080.17236 9294.1
+1080.50830 9272.9
+1080.83997 4775.0
+1081.17883 2048.1
+1081.50732 1011.9
+1087.53284 1578.3
+1088.03271 2539.3
+1088.53174 2508.9
+1089.03455 831.0
+1115.85852 5911.1
+1116.19373 9746.5
+1116.52844 11308.6
+1116.86096 10340.9
+1117.19543 3151.5
+1117.52979 2360.3
+1117.86621 5512.0
+1118.20325 3655.9
+1118.53687 3618.5
+1140.87488 796.0
+1141.21191 1924.8
+1141.54150 1294.3
+1143.54065 1233.5
+1146.21497 1281.4
+1148.88696 1842.8
+1149.21570 4410.4
+1149.54980 4380.9
+1149.88513 2750.7
+1150.22302 1642.5
+1150.55139 1485.3
+1151.22131 2262.5
+1151.55066 3872.2
+1151.88721 4758.3
+1152.22131 3850.8
+1152.55969 2447.5
+1152.88318 743.9
+1154.89746 772.4
+1155.20911 1356.0
+1168.55017 1033.5
+1171.55139 1141.7
+1171.89258 1807.6
+1172.21948 2615.0
+1172.55273 2488.8
+1172.88892 2080.8
+1177.56396 13795.7
+1177.89758 33608.6
+1178.23145 43240.2
+1178.56616 36242.2
+1178.90002 23207.3
+1179.23169 11613.3
+1179.55383 4421.6
+1179.69104 911.5
+1179.90991 2558.0
+1180.24280 1429.4
+1180.56458 895.6
+1181.76123 1687.5
+1181.85718 813.7
+1182.10217 1857.7
+1182.24072 2191.5
+1182.43103 1397.5
+1182.58093 2208.5
+1182.93579 1946.5
+1183.10669 2318.2
+1183.22485 1743.1
+1183.27405 1434.6
+1183.56921 202698.6
+1183.90247 408915.5
+1184.23547 453900.8
+1184.56885 337783.8
+1184.90247 191288.5
+1185.23645 100666.2
+1185.57019 41738.4
+1185.90637 13148.3
+1186.04028 2161.9
+1186.25232 4352.3
+1186.36816 2013.9
+1186.55518 3734.3
+1186.70569 1518.1
+1187.52539 1572.1
+1187.94519 1356.8
+1188.24219 2651.3
+1188.57336 2981.5
+1188.89319 2263.7
+1189.30078 939.9
+1191.10730 1128.3
+1198.23193 3422.1
+1204.91101 1167.5
+1205.23145 818.6
+1205.58386 766.6
+1205.91504 979.1
+1208.58313 1207.2
+1210.58704 4524.2
+1210.91980 8894.7
+1211.25354 12235.5
+1211.58667 10633.9
+1211.92285 5407.0
+1212.25366 3263.7
+1212.43616 841.1
+1212.60278 753.9
+1212.75903 878.2
+1215.35999 908.0
+1215.58179 956.7
+1216.59009 60658.2
+1216.92285 127317.2
+1217.25720 145565.1
+1217.59045 115505.9
+1217.92444 66914.5
+1218.25952 31214.3
+1218.59131 13594.4
+1218.92578 4521.8
+1219.24902 980.1
+1220.20313 815.8
+1221.50378 708.8
+1221.78040 905.5
+1226.57361 790.9
+1241.59814 1003.5
+1243.60144 1855.5
+1243.94128 4809.2
+1244.27515 7063.1
+1244.60852 4874.4
+1244.94421 4487.2
+1245.27197 1937.5
+1249.61133 51087.8
+1249.94556 110859.7
+1250.27917 117629.4
+1250.61316 97858.6
+1250.94714 58319.6
+1251.28186 30765.2
+1251.61633 11007.8
+1251.95239 4515.8
+1252.29065 1535.3
+1265.09070 956.2
+1265.59412 971.7
+1267.61304 1542.5
+1267.94580 2756.7
+1268.28076 3179.3
+1268.61816 2692.9
+1268.94324 1407.2
+1273.10327 6975.7
+1273.60144 9182.4
+1274.10498 7325.1
+1274.60242 4225.5
+1275.10498 2234.3
+1276.97424 767.0
+1282.63403 9719.4
+1282.96765 17709.1
+1283.30200 24541.9
+1283.63696 23059.1
+1283.96960 10720.4
+1284.30554 4897.1
+1284.63660 3937.6
+1295.64771 785.2
+1296.11694 936.0
+1297.13196 983.6
+1311.59875 1046.2
+1314.65466 1315.9
+1322.62512 1036.9
+1330.61133 1361.5
+1331.10815 1461.5
+1331.61462 1324.7
+1332.11377 915.3
+1367.62903 1601.4
+1368.11914 1358.2
+1368.61560 946.8
+1375.62976 1063.4
+1376.63342 842.0
+1404.13940 1365.5
+1412.15564 2036.8
+1412.65039 3495.8
+1413.15015 3295.1
+1413.65564 1229.9
+1460.18604 1176.2
+1460.69092 1709.8
+1468.70728 1749.8
+1469.18701 2685.0
+1469.70264 3482.9
+1470.20911 1382.5
+1470.67468 881.5
+1494.73010 846.3
+1495.24329 1033.8
+1518.20313 1238.3
+1518.70239 1612.4
+1523.70020 853.3
+1552.72632 912.8
+1553.23462 1199.1
+1561.75256 1674.2
+1562.24280 3613.0
+1562.74390 3729.3
+1563.25061 2484.9
+1615.76636 1135.3
+1616.27161 2845.2
+1616.78003 2711.5
+1617.27161 2210.7
+1617.78320 1947.2
+1622.70569 817.2
+1665.79248 1897.8
+1666.80237 804.9
+1673.28467 8488.3
+1673.78235 18803.3
+1674.28528 21582.9
+1674.78833 16519.9
+1675.28796 7482.4
+1675.79358 3394.3
+1676.28735 1659.6
+1676.76794 823.8
+1722.82446 1605.9
+1723.32629 3435.2
+1723.81628 4155.6
+1724.33411 3034.3
+1724.80957 2044.9
+1734.78247 6787.9
+1735.79199 7949.5
+1736.78760 4365.0
+1737.77307 1324.5
+1772.39172 1031.3
+1772.86182 2390.4
+1773.36694 2501.2
+1773.85706 2135.3
+1774.32056 1075.3
+1777.05310 1232.2
+1833.86243 1510.9
+1834.85315 1583.7
+1835.84253 1106.1
+1876.59729 714.7
+1878.81213 1295.2
+1879.12769 1521.9
+1879.54236 20144.3
+1879.97717 1288.7
+1880.28381 1137.5
+1907.11511 7840.5
+1930.64319 876.6
+1932.90918 897.0
+S	2613	2613	801.8130266
+Z	5	4004.02601
+211.70853 2293.3
+215.28398 2057.7
+217.61307 2351.3
+233.58763 2646.5
+240.13438 9764.8
+258.14618 3209.6
+261.49155 2584.7
+280.20068 4347.5
+284.31943 2659.3
+294.18121 7242.9
+297.04166 3234.7
+311.20789 5155.7
+312.19022 3588.7
+314.76462 2277.8
+329.21918 11649.7
+339.20285 16046.2
+357.21362 31366.6
+358.21909 4648.3
+369.69745 2207.2
+376.50089 2195.6
+381.38495 3493.0
+393.25046 6848.2
+410.27667 9695.3
+411.26196 9539.6
+427.21869 24576.1
+427.57547 3257.3
+428.28635 16635.1
+438.27145 57515.4
+439.27396 14325.1
+456.28186 93464.6
+457.28497 23483.6
+467.26016 4649.3
+476.26401 3372.0
+482.69354 2617.2
+494.77765 4058.0
+514.24805 3006.6
+516.78912 14395.7
+517.29010 9154.8
+523.35974 2488.5
+525.79517 3070.5
+532.54449 7731.3
+549.18573 3636.6
+560.33142 3011.0
+567.30908 3652.8
+582.33740 6765.8
+586.05957 4888.0
+593.27802 6164.4
+593.78235 4538.4
+595.30737 8128.9
+596.31262 3720.6
+598.31134 2398.6
+599.96686 3030.6
+605.63965 33440.4
+605.97412 27128.6
+606.30914 17612.8
+606.64410 3492.7
+613.31665 9044.6
+618.36206 2720.0
+637.05469 3042.8
+666.31323 3451.1
+676.33429 13957.3
+676.66785 17991.6
+677.00287 13977.5
+677.33472 4193.0
+688.32446 3082.5
+706.57928 5656.7
+706.82892 10819.8
+707.07880 15214.5
+707.33710 11721.5
+707.56592 2701.2
+708.38501 4060.3
+709.38757 3542.2
+710.75085 5364.6
+710.94208 3282.7
+725.35736 25012.0
+725.69067 22216.8
+726.02606 22535.8
+726.39618 12456.6
+727.40887 6566.9
+730.35065 4042.6
+730.57208 6270.6
+730.75537 4637.0
+731.09674 3060.2
+731.36688 3764.5
+734.84973 11589.0
+735.09918 27919.9
+735.35095 18083.0
+735.59918 12628.6
+735.85010 7223.1
+742.65833 2427.4
+749.45984 4330.0
+758.35596 2742.1
+759.62286 2351.6
+759.86841 2592.3
+760.12152 4152.7
+762.36847 3572.4
+762.69855 3310.1
+763.04181 4967.2
+766.58923 3595.4
+766.97504 4651.0
+767.17468 3394.2
+767.46960 3311.5
+768.36743 15456.5
+768.47363 3423.7
+768.70483 18402.1
+769.03961 18336.6
+769.37335 3995.3
+769.71179 3600.2
+769.98480 44628.4
+770.18469 98218.4
+770.38605 107116.7
+770.58527 85897.5
+770.78705 55200.3
+770.98737 21781.8
+771.18390 13023.1
+771.39075 3907.9
+825.47107 3238.0
+832.84717 2564.5
+833.41083 3042.7
+838.90820 3613.5
+843.40460 3034.3
+843.73700 3322.8
+847.83032 3027.9
+849.07208 21505.2
+849.40472 26353.1
+849.74121 21317.3
+850.07281 12158.8
+850.41675 4657.1
+857.81732 2516.0
+859.41193 3806.1
+859.65948 3994.5
+864.17566 3870.3
+864.40918 4573.0
+877.17316 2766.9
+877.42792 2662.7
+879.16711 7132.7
+879.41614 9071.2
+879.66937 7860.7
+880.13751 2494.1
+881.74536 8309.0
+882.07489 14116.1
+882.41132 9837.6
+883.42468 24116.1
+883.67548 64878.1
+883.92426 79994.9
+884.17578 72623.6
+884.42572 46333.7
+884.67633 17415.6
+884.93005 14165.5
+885.16559 9282.3
+885.39392 7421.3
+885.65649 7767.4
+885.92920 2953.5
+886.79028 6443.1
+887.03522 5998.7
+887.28650 5427.6
+887.41394 47783.8
+887.75195 59414.5
+887.92871 654979.1
+888.08734 66536.1
+888.17877 1236262.3
+888.31268 7523.3
+888.42798 1346198.9
+888.67822 931093.1
+888.80908 4128.0
+888.92841 527852.7
+889.17926 225669.8
+889.31586 6158.4
+889.42773 94451.2
+889.56793 9602.7
+889.67950 31593.6
+889.81738 7695.2
+889.93359 10041.5
+890.08038 4869.6
+890.48987 6319.6
+890.95667 7343.9
+891.22156 7977.1
+891.46796 4706.8
+904.43567 3413.9
+907.95642 27458.3
+908.19232 8719.2
+908.45081 36893.5
+908.69214 24116.7
+908.94440 32737.3
+909.19232 14692.9
+909.45355 9080.7
+910.29083 4841.1
+911.51129 3913.1
+911.95709 3546.6
+912.43402 3888.2
+912.69464 234064.2
+912.94470 544033.9
+913.19501 561767.0
+913.44531 431469.7
+913.69598 241009.7
+913.94623 103930.6
+914.19843 40480.6
+914.44305 16670.7
+914.69598 6443.7
+915.85822 5522.8
+916.09894 3890.1
+933.20270 6230.0
+933.50989 12695.1
+933.71240 6824.1
+934.51245 6115.2
+935.76587 8116.5
+936.09686 19506.9
+936.42816 19449.0
+936.76495 17463.8
+937.09503 10002.0
+937.46222 100137.8
+937.71149 204034.1
+937.96136 238702.9
+938.21271 193144.5
+938.46313 123074.1
+938.71387 63361.5
+938.96368 15737.0
+939.22186 6009.3
+941.76758 138564.0
+942.10126 205059.3
+942.43579 177312.4
+942.77008 91820.8
+943.10406 37570.6
+943.43811 14711.7
+943.78101 4141.3
+951.51758 4792.6
+962.22839 44035.5
+962.47797 90344.7
+962.72876 91626.6
+962.97900 67333.6
+963.22955 45529.0
+963.47888 19498.6
+963.72821 9443.8
+973.46088 5546.8
+973.79053 22048.1
+974.12390 26303.9
+974.45752 16913.6
+974.79053 7002.9
+975.13507 4045.2
+979.46210 130083.8
+979.79694 194225.4
+980.13019 172320.6
+980.46478 106884.3
+980.79907 44991.5
+981.13226 15619.8
+981.47662 3347.6
+981.81586 4819.1
+985.47675 5141.0
+985.99615 3717.1
+1002.23541 5747.5
+1002.81689 4472.6
+1003.01117 3566.3
+1004.49457 6198.0
+1004.97906 3699.3
+1005.49591 8738.4
+1006.51813 3535.2
+1007.48285 3402.4
+1010.77277 4232.4
+1012.48602 9582.0
+1012.81793 19093.3
+1013.15662 18768.9
+1013.48602 10858.8
+1013.82147 6230.7
+1013.99591 27739.3
+1014.49884 35392.1
+1014.99988 20363.5
+1015.50073 9029.9
+1023.63849 3223.0
+1036.48425 6450.0
+1041.49451 18948.3
+1041.82947 28307.9
+1042.16467 25783.4
+1042.50134 20577.2
+1042.83765 10140.5
+1050.58240 10536.5
+1051.57739 4672.7
+1057.22424 4489.5
+1068.59399 5558.0
+1074.16296 3204.9
+1074.50391 8279.8
+1074.84265 4007.2
+1077.84180 5357.1
+1078.18921 5152.8
+1078.52515 3601.7
+1079.51147 3001.1
+1079.84009 22837.6
+1080.17310 36318.7
+1080.50671 31681.4
+1080.84131 21930.7
+1081.17712 11928.2
+1081.50586 4176.8
+1087.53210 13803.6
+1088.03540 21203.6
+1088.53259 15077.4
+1089.02258 3588.4
+1106.18274 2614.1
+1110.18701 4545.9
+1110.52466 8196.3
+1111.86328 5685.1
+1112.19958 6275.7
+1112.51709 5011.9
+1115.85913 23964.7
+1116.19250 39267.8
+1116.52686 37452.7
+1116.85913 25019.8
+1117.19604 13710.8
+1117.53198 22792.8
+1117.86670 36835.1
+1118.20081 40491.0
+1118.53638 19618.4
+1118.87537 11901.8
+1119.20532 4055.4
+1119.52698 4325.5
+1143.54773 8220.2
+1143.86768 3720.8
+1145.52332 4371.3
+1146.55029 2499.0
+1148.87903 9567.2
+1149.21582 13339.3
+1149.55164 18958.5
+1149.88489 13503.4
+1150.22046 7175.6
+1151.21387 6165.0
+1151.54907 12231.0
+1151.88318 14144.9
+1152.05640 4074.3
+1152.21680 14752.4
+1152.55713 15375.4
+1153.05420 5364.3
+1153.56458 4193.1
+1154.54333 4573.7
+1154.88110 10276.1
+1155.21619 7898.5
+1155.55273 6376.5
+1171.53662 5119.3
+1172.05774 3884.8
+1177.89771 6865.3
+1178.23560 10259.1
+1178.56763 9710.7
+1178.89905 4588.2
+1181.67444 3855.4
+1182.23157 5760.2
+1182.56726 6227.1
+1183.56653 63259.1
+1183.90076 139018.5
+1184.23584 128764.0
+1184.56970 95016.6
+1184.90332 61612.6
+1185.23975 28044.5
+1185.56006 21372.2
+1186.55774 9351.6
+1198.22351 12008.9
+1216.58838 3580.1
+1216.92542 9580.4
+1217.25684 13763.5
+1217.58887 6611.3
+1217.92627 7050.6
+1229.05383 5818.6
+1229.55017 6170.9
+1273.09924 3308.2
+1273.61169 4722.8
+1310.57947 11236.0
+1311.08838 14588.3
+1311.59424 10963.6
+1312.08533 4723.4
+1312.61060 3421.8
+1339.05090 2771.6
+1358.61487 3444.4
+1367.13171 3474.5
+1367.62390 10861.2
+1368.13733 5877.2
+1376.64221 4373.2
+1611.80627 3647.7
+1735.81445 3984.1
+1878.44324 3154.6
+1879.19592 9055.4
+1879.51941 75092.0
+1879.86841 12222.6
+1907.17603 28230.4
+S	2614	2614	1002.0134746
+Z	4	4004.0226
+268.77066 619.9
+294.18384 848.0
+329.21884 1191.9
+334.14050 728.3
+339.20343 3831.5
+339.38770 675.9
+340.20657 940.9
+342.31210 819.4
+357.21317 4451.0
+365.25244 870.9
+381.39691 738.6
+393.25070 1220.7
+410.27707 3054.8
+411.26401 1495.7
+427.22015 1808.3
+428.28662 2139.1
+438.27127 13104.5
+439.27408 3213.2
+456.28189 13081.2
+457.28485 2528.0
+532.56476 1783.9
+532.90839 654.4
+561.60815 636.3
+584.03320 591.4
+605.63171 712.0
+606.31177 922.2
+630.46759 845.0
+676.65167 1051.7
+699.66864 585.2
+710.73553 714.4
+718.83276 658.7
+725.68842 940.9
+726.37872 744.5
+727.89331 610.6
+749.45203 1020.7
+783.66510 616.0
+794.91125 1555.6
+795.41309 1448.6
+795.72870 1020.4
+806.39148 2311.5
+806.89740 1519.1
+835.79565 636.4
+849.07208 1102.1
+849.40485 1008.8
+882.97858 761.6
+883.67291 1541.3
+883.92456 2173.5
+884.17688 1460.4
+884.68109 1240.5
+887.39056 662.9
+887.92822 9470.2
+888.17786 18899.7
+888.42822 22475.7
+888.67938 16784.1
+888.92920 11570.1
+889.17731 3901.9
+889.42725 2319.7
+889.67432 1043.1
+891.45142 842.8
+898.95270 1873.1
+899.45508 2066.7
+899.95294 2087.0
+907.95740 16613.6
+908.45868 20480.2
+908.69342 1431.2
+908.96002 11599.8
+909.45984 4291.7
+909.95856 1496.5
+912.69653 4744.5
+912.94604 9547.1
+913.19629 10193.0
+913.44556 9187.1
+913.69678 4825.3
+913.95038 2415.4
+926.87109 1040.4
+937.71588 1238.9
+937.96637 1071.6
+938.21667 1458.0
+938.45697 1249.0
+941.76630 2093.2
+942.10791 2889.5
+942.43823 3019.1
+942.76575 1252.4
+943.11414 856.5
+957.98407 665.9
+959.46051 758.0
+960.45557 785.1
+962.22974 5412.0
+962.47882 16832.5
+962.72852 18253.7
+962.98041 11342.2
+963.23273 9228.7
+963.48450 4437.0
+963.73315 1037.6
+974.43134 925.3
+979.46887 1379.1
+979.79724 2948.6
+980.12488 1092.2
+980.46179 2303.2
+1013.98199 701.7
+1014.50378 1169.3
+1019.69733 862.3
+1041.49158 1377.7
+1041.82471 1931.8
+1042.16821 1862.0
+1057.25317 755.1
+1077.86401 962.2
+1079.84106 4420.9
+1080.17163 8790.7
+1080.50867 8644.4
+1080.84436 4215.1
+1081.18188 2591.6
+1081.51062 1257.8
+1087.52795 1864.3
+1088.03186 2697.5
+1088.53784 2320.8
+1103.56396 1065.8
+1110.82312 1090.9
+1115.86145 5093.2
+1116.19324 10226.9
+1116.52393 8447.5
+1116.86047 6855.1
+1117.19458 2721.5
+1117.53076 3195.5
+1117.86401 3630.9
+1118.20142 3127.6
+1118.53699 2332.9
+1118.87354 813.1
+1119.21228 863.9
+1134.88525 805.5
+1140.34460 826.4
+1141.19910 1320.2
+1141.53564 1256.9
+1143.54797 1011.0
+1145.54626 1027.7
+1148.88220 1484.0
+1149.21777 3281.6
+1149.54797 2560.8
+1149.88416 2900.1
+1150.22314 1144.0
+1151.21167 1601.3
+1151.55493 3930.1
+1151.88635 2940.3
+1152.21985 1959.0
+1152.54980 1739.0
+1155.20776 1156.5
+1163.62195 717.9
+1172.23340 2429.6
+1172.55115 1536.4
+1172.89587 1529.2
+1173.56836 797.5
+1174.23035 831.4
+1177.56409 15341.6
+1177.89795 30723.4
+1178.23120 33942.3
+1178.56519 26270.9
+1178.89917 18743.8
+1179.23438 9888.3
+1179.58130 5782.7
+1179.91760 2832.0
+1180.07788 905.1
+1180.25134 2685.3
+1180.57593 854.6
+1180.73242 970.2
+1181.78455 1464.2
+1182.11353 1435.7
+1182.24231 1947.1
+1182.44031 908.5
+1182.56458 2702.0
+1182.94189 1927.7
+1183.10522 1741.6
+1183.28442 1332.0
+1183.56836 167390.7
+1183.90210 356029.3
+1184.23523 382661.8
+1184.56873 290737.0
+1184.90234 165367.5
+1185.23621 80937.9
+1185.56970 34922.2
+1185.90649 10977.2
+1186.23950 3948.5
+1186.36755 1758.1
+1186.55823 2399.9
+1186.66980 1269.3
+1188.22327 2927.8
+1188.41382 951.5
+1188.55811 2296.4
+1188.88452 1692.7
+1198.24939 3292.0
+1205.58057 804.4
+1210.58728 3450.0
+1210.91736 7714.8
+1211.25146 8854.6
+1211.58655 10018.8
+1211.92224 5035.7
+1212.25146 3163.2
+1212.58862 1056.5
+1212.76953 900.7
+1213.10510 842.2
+1216.58997 50166.7
+1216.92273 112132.2
+1217.25708 122069.1
+1217.59058 93571.8
+1217.92395 59643.2
+1218.25989 26177.2
+1218.59241 10157.6
+1218.92932 3468.1
+1219.47327 805.1
+1221.77014 754.2
+1243.61072 1522.3
+1243.94104 4395.3
+1244.27637 4549.3
+1244.60840 4969.5
+1244.94580 3162.6
+1245.28101 2677.4
+1245.60999 917.0
+1247.96411 997.9
+1248.59888 665.2
+1249.61121 43063.4
+1249.94482 92006.9
+1250.27893 109905.4
+1250.61267 83547.3
+1250.94714 47853.3
+1251.28149 22052.6
+1251.61475 11437.2
+1251.94653 3773.6
+1252.26563 1213.6
+1252.59668 1403.5
+1262.60596 919.0
+1265.10718 1078.2
+1267.61304 1206.6
+1267.94421 1800.0
+1268.28345 3116.8
+1268.62549 1333.1
+1273.10217 5302.7
+1273.60254 6364.4
+1274.10437 7381.7
+1274.60535 4084.7
+1275.10693 1975.2
+1277.29419 1308.5
+1282.63562 8945.5
+1282.96814 20637.7
+1283.30212 18528.9
+1283.63708 18268.1
+1283.97034 9972.7
+1284.30481 5277.9
+1284.64026 2023.7
+1284.97571 1167.4
+1296.62341 891.6
+1311.07703 1183.4
+1312.10559 912.9
+1314.34741 909.8
+1314.65698 872.2
+1330.61194 968.6
+1331.11450 1542.9
+1331.61096 1283.4
+1332.12793 1599.6
+1368.13330 953.8
+1376.64587 952.2
+1404.18225 847.9
+1412.15662 1538.1
+1412.65173 2979.7
+1413.14880 2286.0
+1413.66272 1718.1
+1414.14624 998.3
+1461.19348 1045.6
+1468.68591 1647.4
+1469.18848 3515.9
+1469.69324 2057.9
+1470.19324 1705.5
+1495.24731 937.0
+1561.74268 1420.9
+1562.24109 2585.3
+1562.74548 2344.6
+1563.25183 2505.5
+1563.74304 1003.7
+1615.78625 885.6
+1616.27368 2547.1
+1616.77710 3410.2
+1617.26831 3173.1
+1627.75464 747.9
+1665.29248 1281.5
+1665.77417 1132.6
+1666.76062 844.2
+1673.28186 7773.3
+1673.78406 16677.6
+1674.28491 18702.8
+1674.78723 13101.8
+1675.29102 7063.8
+1675.79651 3441.8
+1676.80591 1349.0
+1715.40149 701.3
+1722.81213 1763.6
+1723.31226 3446.2
+1723.82275 3559.0
+1724.32764 2234.5
+1724.82300 2093.8
+1734.78491 6045.8
+1735.78967 7128.1
+1736.78638 3889.4
+1737.78467 1348.4
+1772.85706 2468.0
+1773.34888 1948.2
+1773.85168 1980.1
+1774.34192 1166.7
+1776.36780 791.4
+1833.87964 1102.6
+1834.83984 948.9
+1860.10376 887.1
+1878.45154 1357.8
+1879.04163 1610.7
+1879.55981 20304.4
+1880.05994 1511.7
+1880.45764 903.0
+1880.72534 1163.7
+1907.09766 7230.2
+1930.78613 806.0
+S	2615	2615	1003.0145746
+Z	4	4008.027
+271.60507 624.6
+283.08472 555.8
+294.18091 898.8
+311.20865 1451.5
+312.19122 681.0
+319.16040 878.5
+320.21274 656.8
+326.91315 600.0
+329.21811 1738.1
+339.20224 2975.6
+340.20279 724.9
+357.21365 3776.4
+363.59738 633.1
+365.25601 927.4
+393.24875 1281.9
+399.27402 660.1
+410.27689 2433.6
+411.26059 2602.6
+427.21866 1686.1
+427.55444 831.6
+428.28796 4021.6
+429.29227 1000.6
+438.27136 15619.8
+439.27435 3505.8
+440.14539 731.5
+456.28168 16003.1
+457.28421 3720.2
+471.29468 624.3
+483.17929 660.8
+502.27356 670.0
+532.53558 1766.4
+605.97095 1985.0
+606.30365 913.6
+618.51129 668.0
+676.64563 1120.1
+725.35358 1336.9
+725.69043 761.0
+726.40436 811.2
+730.87061 619.8
+749.46014 946.8
+765.14227 608.9
+786.32281 628.3
+786.41827 697.1
+795.41113 1572.6
+795.72510 1089.3
+806.39240 1061.4
+806.89691 1464.5
+807.39282 985.7
+822.39691 1000.2
+849.07159 1496.6
+849.40204 1921.0
+849.73688 1350.1
+850.06750 1013.6
+871.91821 789.8
+883.67529 1359.4
+883.92816 2829.2
+884.17188 1133.5
+884.42645 2319.2
+887.75201 1579.3
+887.92749 9161.0
+888.17761 26450.6
+888.42804 29123.5
+888.67834 21156.2
+888.92957 12937.0
+889.18018 5647.5
+889.41235 1029.4
+898.94952 2733.2
+899.45477 2574.6
+899.95624 1571.0
+900.46021 850.9
+901.04840 632.7
+907.95697 19727.6
+908.45856 23255.5
+908.68579 1450.9
+908.96039 14794.8
+909.46039 5458.5
+909.96057 2421.6
+912.69348 5773.0
+912.94373 10419.2
+913.19482 12891.3
+913.44629 9775.9
+913.69794 6821.8
+913.94897 3061.2
+914.19562 1099.4
+937.95917 1707.3
+938.45282 917.6
+941.77081 3100.4
+942.10187 4320.6
+942.43634 3385.3
+942.77124 3450.2
+943.10297 1561.1
+949.18616 615.8
+951.24469 863.0
+958.22461 768.9
+959.45129 1744.5
+962.22766 6863.0
+962.47827 17993.0
+962.72955 17720.5
+962.98047 13695.5
+963.23120 8663.0
+963.48199 4355.0
+963.73492 1869.2
+969.88232 898.7
+974.41803 719.3
+978.21185 829.2
+979.80090 2868.0
+980.12958 2324.6
+1014.00049 1012.9
+1041.49402 1762.0
+1041.82935 2089.2
+1042.16418 2298.7
+1042.49475 1128.8
+1074.17419 1013.7
+1074.49646 1275.8
+1074.83691 1195.5
+1079.03809 768.0
+1079.84070 3942.8
+1080.17419 5945.1
+1080.50940 8515.1
+1080.84302 4989.3
+1081.17493 2668.9
+1081.51111 2245.3
+1087.53210 1956.1
+1088.03357 3906.4
+1088.53271 1713.7
+1115.86060 3840.5
+1116.19263 10902.6
+1116.52710 13505.2
+1116.86011 6787.9
+1117.19592 5017.5
+1117.53748 2776.3
+1117.86670 4093.1
+1118.20264 3610.9
+1118.53711 2639.4
+1135.88416 800.4
+1140.85852 718.3
+1141.21375 1784.5
+1141.54053 1128.3
+1141.87598 1749.0
+1142.19702 813.9
+1143.86096 743.3
+1145.55115 1071.6
+1146.54846 885.2
+1148.87866 1864.1
+1149.21301 3431.9
+1149.55505 4362.1
+1149.88647 2113.8
+1150.22815 1449.0
+1151.21387 2159.1
+1151.55066 4360.8
+1151.88586 5055.4
+1152.04797 755.2
+1152.22083 2951.7
+1152.55457 3571.6
+1154.88501 965.1
+1171.54517 1562.5
+1171.89368 1422.0
+1172.22778 1442.3
+1172.55518 2528.2
+1172.89783 1341.9
+1177.56226 13839.9
+1177.89795 35624.8
+1178.23145 44693.7
+1178.56555 32005.6
+1178.89929 22132.4
+1179.23132 10485.3
+1179.55103 4028.6
+1179.68347 949.2
+1179.96802 2093.8
+1180.08899 991.8
+1180.29114 1883.6
+1180.42627 1124.7
+1180.72571 1720.9
+1181.07581 1378.0
+1181.41968 1868.9
+1181.75635 2759.4
+1182.09485 2528.0
+1182.28198 975.0
+1182.43762 2014.8
+1182.57544 3353.8
+1182.77051 1072.4
+1182.89380 1162.4
+1182.93384 1122.0
+1183.10425 2231.1
+1183.23682 1142.3
+1183.28101 1379.2
+1183.56860 199040.9
+1183.90210 402445.4
+1184.23511 452489.4
+1184.56860 317756.2
+1184.90210 196254.1
+1185.23621 91619.5
+1185.56934 39878.2
+1185.90747 12076.5
+1186.24475 4327.6
+1186.37109 3216.0
+1186.55103 2499.2
+1186.72046 2404.5
+1187.06006 2333.5
+1187.40454 1872.0
+1187.50940 1079.6
+1187.73962 1816.8
+1187.87195 1362.7
+1188.20850 3329.5
+1188.53467 3136.8
+1188.65015 650.2
+1188.87366 2333.2
+1189.20972 1226.7
+1191.08289 1033.9
+1198.20142 3211.3
+1208.61719 769.2
+1210.59229 3212.3
+1210.92053 8765.0
+1211.25415 10468.2
+1211.58594 9980.6
+1211.92126 4630.7
+1212.25305 3570.3
+1212.45581 1079.6
+1212.58228 1258.7
+1212.79602 1034.6
+1213.52502 685.2
+1215.04016 1038.3
+1215.27563 1046.2
+1215.90747 1128.6
+1216.58960 58575.7
+1216.92236 123655.0
+1217.25696 139284.3
+1217.59021 114010.6
+1217.92383 60916.5
+1218.25879 31771.3
+1218.59338 13534.6
+1218.92896 5385.0
+1219.26147 2427.3
+1219.49585 1282.5
+1220.19275 714.1
+1233.02820 702.1
+1243.60962 2500.9
+1243.94031 3828.1
+1244.27563 7182.8
+1244.61169 5167.7
+1244.94299 3845.6
+1245.27332 2503.5
+1245.61755 1114.1
+1249.61169 43546.6
+1249.94482 107324.4
+1250.27869 121428.8
+1250.61243 94264.9
+1250.94678 54976.4
+1251.28198 27816.4
+1251.61499 11406.2
+1251.94568 3640.8
+1254.93176 863.3
+1264.09680 869.7
+1264.60266 1282.5
+1267.94641 1790.2
+1268.27869 2696.3
+1268.61975 2519.5
+1268.94580 1321.9
+1273.10266 5657.7
+1273.60266 7858.5
+1274.10791 8521.9
+1274.60754 4460.5
+1275.10632 1880.9
+1276.95959 1144.1
+1277.29126 1113.5
+1282.63452 9753.9
+1282.96814 19823.8
+1283.30225 26741.6
+1283.63721 19796.5
+1283.96851 11672.0
+1284.30798 6787.3
+1284.63708 3113.2
+1284.97681 1186.3
+1295.60925 1155.4
+1296.10876 1812.6
+1296.62585 1083.9
+1311.08972 1073.1
+1311.61267 896.5
+1314.32703 1042.8
+1319.14343 780.1
+1330.61316 1186.8
+1331.11096 2304.0
+1331.61133 2334.8
+1345.66516 869.5
+1364.66321 797.8
+1367.10583 754.4
+1368.13928 777.5
+1404.16687 1015.7
+1412.15125 1902.6
+1412.65063 3658.7
+1413.14429 2600.9
+1413.65234 1478.4
+1460.19543 1338.4
+1460.67847 2612.1
+1461.19458 1561.5
+1461.67468 1088.0
+1468.70764 1081.5
+1469.18665 3382.2
+1469.69226 2622.6
+1470.19788 2775.1
+1495.73621 950.5
+1518.20105 1152.4
+1518.69836 1090.2
+1551.74695 769.5
+1553.24158 1743.3
+1553.73755 1154.3
+1561.73889 1713.2
+1562.23547 2843.7
+1562.74146 3965.8
+1563.25269 1999.1
+1563.73950 1654.6
+1611.80566 703.0
+1615.76599 2668.3
+1616.26782 3868.5
+1616.76575 3354.6
+1617.27771 2504.7
+1617.76001 1781.3
+1618.30530 1094.9
+1619.75830 1248.8
+1665.28137 1477.8
+1666.29688 1284.3
+1666.82104 980.8
+1673.28662 8500.6
+1673.78210 19275.0
+1674.28577 17434.0
+1674.78699 14539.7
+1675.28613 8726.6
+1675.78943 4056.1
+1676.28259 1586.9
+1694.84863 637.2
+1715.33386 1022.2
+1722.81628 1806.9
+1723.31604 3416.1
+1723.81836 4831.1
+1724.32202 2438.1
+1724.83020 1428.3
+1734.78564 8543.8
+1735.78369 8288.4
+1736.79773 4336.7
+1737.80579 1799.2
+1772.35327 1334.4
+1772.87073 2184.3
+1773.34863 1964.2
+1773.85254 2925.0
+1774.36414 952.1
+1774.86438 800.0
+1833.85815 1165.6
+1834.84644 2071.0
+1835.87305 1006.5
+1860.09973 753.7
+1870.19751 865.8
+1878.72351 1178.5
+1879.53906 18941.5
+1879.82739 3165.5
+1880.32080 965.9
+1883.59058 743.4
+1907.08923 7418.4
+1933.93835 814.7
+S	2617	2617	1001.9993146
+Z	4	4003.96596
+308.92502 768.1
+332.70428 563.7
+339.20285 2377.4
+357.21289 2999.1
+393.24719 1010.9
+410.27634 2307.7
+411.25989 1366.4
+411.82587 606.1
+427.21945 1414.1
+428.28705 1983.7
+438.27054 10975.7
+438.75873 663.0
+439.27286 2187.7
+456.28134 9587.9
+457.16751 720.2
+457.28284 1911.9
+482.73441 657.8
+485.06052 611.8
+496.73489 587.5
+532.42120 967.2
+532.53131 909.7
+595.30371 796.7
+597.48248 634.6
+605.64008 1447.5
+605.97577 865.4
+623.64514 696.4
+625.89221 705.7
+629.21057 622.3
+676.66168 1070.1
+678.78754 721.8
+709.58472 805.9
+714.40448 722.7
+726.39911 646.1
+731.18994 871.7
+743.39417 720.1
+794.90985 937.0
+795.41748 954.8
+795.72693 964.4
+806.89233 1348.7
+883.67236 1413.4
+883.92090 1586.1
+884.16821 899.1
+884.41785 1127.7
+884.67834 989.5
+887.41431 1015.0
+887.92639 9361.5
+888.17627 16327.4
+888.42688 20821.4
+888.67828 16983.3
+888.92841 7708.4
+889.17999 3001.0
+889.42853 810.8
+898.95319 2070.3
+899.45135 1810.8
+899.95184 1332.4
+900.44983 827.1
+907.95581 15602.8
+908.45795 17694.9
+908.69086 987.8
+908.96063 11580.4
+909.46069 3953.8
+909.96564 1069.0
+912.69275 4130.6
+912.94427 7751.1
+913.19476 11399.4
+913.44568 9285.2
+913.69745 3953.2
+913.94397 2928.6
+923.88446 672.7
+937.95526 1234.0
+938.71906 784.4
+941.76483 1475.0
+942.09888 2686.6
+942.43579 2021.3
+942.76978 1707.1
+953.82489 603.9
+957.96448 832.1
+962.22845 4459.4
+962.47803 8702.6
+962.72827 13132.1
+962.97852 10886.5
+963.23260 4696.9
+963.47919 3444.2
+963.72821 2147.1
+964.52264 667.7
+965.36908 704.4
+967.58362 651.8
+977.15735 1078.0
+979.46344 1553.9
+979.79584 1696.4
+980.13342 3020.5
+980.47345 1470.5
+980.79767 1271.0
+1015.01392 1210.5
+1041.49805 848.0
+1041.82849 1614.9
+1042.16565 2050.9
+1042.50171 912.9
+1057.24988 846.6
+1062.49341 758.0
+1079.84167 3137.4
+1080.17102 7069.8
+1080.50964 6207.5
+1080.83923 5320.3
+1081.17468 1094.2
+1081.50415 1514.6
+1083.52551 697.9
+1087.53381 1970.0
+1088.03564 1988.0
+1088.52222 1285.1
+1115.85669 2293.7
+1116.19409 6992.4
+1116.52454 8754.5
+1116.85913 5506.9
+1117.19360 3805.4
+1117.53198 3445.2
+1117.86938 2507.3
+1118.20020 3388.6
+1118.52783 1597.9
+1141.19995 772.0
+1141.55029 1068.4
+1141.88110 1066.2
+1142.57410 656.3
+1148.87976 874.5
+1149.21606 2187.1
+1149.54785 2623.8
+1149.88123 1661.6
+1150.21790 887.1
+1151.55273 4232.5
+1151.88538 3477.5
+1152.21765 3428.3
+1152.55762 1454.5
+1152.87793 709.1
+1155.20386 965.4
+1171.87708 911.2
+1172.05054 1207.4
+1172.21765 872.8
+1172.55542 1212.9
+1172.87720 830.7
+1177.56177 10429.3
+1177.89539 27762.9
+1178.23022 32542.2
+1178.56409 28415.5
+1178.89856 19197.4
+1179.23547 11269.8
+1179.57825 5171.7
+1179.90918 1921.5
+1180.03149 888.3
+1180.26453 1509.1
+1180.36316 1347.7
+1180.70349 1027.7
+1181.04163 1192.2
+1181.40063 804.9
+1181.77710 1292.0
+1182.07874 1298.5
+1182.22400 1441.3
+1182.44019 1334.5
+1182.57568 2497.0
+1182.82385 1058.4
+1183.04773 1515.2
+1183.19995 1837.4
+1183.56665 142616.3
+1183.90076 305812.8
+1184.23413 323167.1
+1184.56775 244628.6
+1184.90125 147261.2
+1185.23535 65669.8
+1185.56897 27374.3
+1185.90564 9481.6
+1186.24268 2491.4
+1186.37085 1761.3
+1186.55200 1598.6
+1186.71960 1349.0
+1187.07825 1206.5
+1187.43872 893.5
+1187.53540 713.1
+1187.77014 1503.2
+1187.86731 870.1
+1188.13196 915.6
+1188.22815 2080.1
+1188.44678 863.6
+1188.55237 2091.8
+1188.90234 1541.4
+1189.23340 1627.0
+1189.59375 892.1
+1197.94092 2083.6
+1198.13184 1502.2
+1210.58777 2016.4
+1210.91870 5897.2
+1211.25354 8104.2
+1211.58716 7755.8
+1211.92139 4546.5
+1212.25598 3111.8
+1212.58533 1500.4
+1216.58813 45495.6
+1216.92139 87626.6
+1217.25562 102582.9
+1217.58936 84274.5
+1217.92334 48933.9
+1218.25769 24215.8
+1218.59290 8915.2
+1218.92554 2561.1
+1219.26318 2199.1
+1243.61511 1225.2
+1243.93652 4839.1
+1244.27417 4152.9
+1244.60815 5072.4
+1244.94385 2856.3
+1245.27966 1290.3
+1245.61230 1377.0
+1249.60962 34488.2
+1249.94421 72342.9
+1250.27771 85233.4
+1250.61145 65381.9
+1250.94604 43363.5
+1251.27991 20360.0
+1251.61499 9166.7
+1251.95117 2471.3
+1252.28210 1287.2
+1262.26892 809.8
+1265.08838 999.1
+1267.64819 744.5
+1267.94360 981.8
+1268.28076 1894.4
+1268.61182 1911.3
+1268.95313 1694.9
+1273.10132 5030.7
+1273.60168 6374.1
+1274.10852 5592.5
+1274.60266 2707.8
+1275.10596 1795.1
+1277.28906 1240.8
+1277.63171 1021.6
+1282.63098 6523.9
+1282.96582 13060.6
+1283.30017 17351.6
+1283.63733 12336.8
+1283.97192 8100.7
+1284.30579 3784.1
+1284.63733 2477.2
+1284.97192 1331.2
+1296.12219 1148.9
+1330.60913 1088.0
+1331.11841 1521.6
+1331.62048 957.8
+1367.60815 1086.5
+1404.15430 937.6
+1412.14172 1151.5
+1412.64526 1675.5
+1413.14771 1811.7
+1414.15295 830.0
+1460.66345 1543.8
+1461.17322 1145.9
+1468.69775 1335.2
+1469.18933 2031.9
+1469.69214 1823.7
+1470.18970 1246.0
+1518.17310 698.0
+1518.72156 1092.3
+1525.53491 791.5
+1562.23816 2091.5
+1562.74231 2676.8
+1563.22681 1272.4
+1612.77502 1226.5
+1615.76062 1478.8
+1616.27454 2113.2
+1616.76624 2716.8
+1617.27136 2236.6
+1617.78162 916.3
+1634.73840 639.5
+1666.80652 735.9
+1673.28357 6857.6
+1673.78088 13433.5
+1674.28503 15090.6
+1674.78589 9761.1
+1675.28882 5395.6
+1675.78918 3018.1
+1676.26501 908.8
+1676.78247 854.6
+1722.81348 2001.9
+1723.31458 3432.6
+1723.82104 2952.5
+1724.33582 1492.6
+1724.82422 2295.4
+1725.31873 776.5
+1734.78394 5489.8
+1735.78918 5784.9
+1736.79309 3127.0
+1737.79785 1747.7
+1772.83411 1102.3
+1773.35938 1697.6
+1773.84814 1356.7
+1833.87097 1070.2
+1834.85205 1021.9
+1878.75684 1249.8
+1879.23352 3083.8
+1879.57678 19572.5
+1879.93347 2538.5
+1880.16553 1639.4
+1880.44373 1715.2
+1883.87744 765.4
+1906.87671 854.7
+1907.13049 7340.8
+1930.73047 1191.0
+S	2618	2618	801.8010626
+Z	5	4003.96619
+211.34631 596.6
+211.37274 549.4
+211.97224 535.8
+212.91595 574.6
+213.39728 569.6
+218.24611 498.6
+221.60513 644.0
+225.05878 554.1
+230.96959 572.2
+240.13467 2208.5
+247.64221 590.9
+255.29938 681.3
+258.14554 1801.3
+258.66544 577.2
+271.56259 581.8
+294.18158 1599.2
+310.09988 590.7
+311.20859 977.1
+319.16010 916.4
+329.21820 1651.3
+339.20230 3524.9
+340.20474 904.0
+342.28009 784.0
+357.21350 7402.5
+358.21832 995.9
+359.32507 599.9
+381.37155 622.9
+393.24927 1110.0
+410.27615 2024.7
+411.26328 1505.8
+415.01413 652.2
+427.21863 4714.7
+428.22186 809.7
+428.28748 2617.3
+429.29575 756.0
+438.27127 13175.9
+439.27567 3125.6
+456.28177 19530.4
+457.28458 4731.7
+467.25085 687.7
+482.82309 662.7
+496.24091 961.6
+514.25299 1041.3
+516.78754 2245.2
+517.29443 982.8
+525.79596 1120.0
+532.53290 1707.4
+582.34033 753.2
+586.06659 1009.0
+586.31036 881.8
+591.34167 751.4
+593.28094 1364.3
+595.30731 2101.7
+599.62659 686.0
+605.64105 6634.4
+605.97437 8483.5
+606.30756 3961.9
+606.64478 1557.8
+613.32092 1568.0
+618.28448 696.4
+620.98419 680.0
+623.79968 1192.6
+630.42834 711.9
+636.36578 780.3
+666.80078 739.4
+676.33289 2847.1
+676.66730 2916.7
+677.00269 2157.2
+677.33728 1257.9
+699.80115 587.6
+706.57739 1773.9
+706.83051 2947.8
+707.08020 2881.8
+707.33130 1966.2
+707.56903 792.8
+708.39630 1069.2
+710.93958 1062.8
+711.34583 1088.3
+725.35809 3651.4
+725.69183 7064.3
+726.02673 3171.7
+726.39301 3587.4
+727.38092 866.7
+730.56165 1033.7
+730.75598 1935.8
+730.96411 1197.0
+734.85004 1770.3
+735.10138 3456.7
+735.34991 5810.1
+735.60040 2086.2
+735.84985 1703.1
+736.10461 1009.3
+749.45782 870.1
+754.11554 741.6
+760.11938 887.9
+762.70135 1208.2
+763.03778 1908.7
+765.31445 713.5
+766.58972 877.8
+766.99359 739.4
+768.37311 2994.5
+768.70453 3425.5
+769.03864 3252.8
+769.37933 1386.9
+769.98621 6411.0
+770.18481 17048.3
+770.38513 22987.5
+770.58624 18827.7
+770.78662 12370.4
+770.98694 8434.4
+771.18732 3505.7
+771.38544 1703.2
+795.72327 857.4
+825.44293 738.5
+838.39899 1072.3
+843.73022 1141.2
+849.07404 3264.4
+849.40454 6233.7
+849.74219 4916.5
+850.07214 3937.7
+863.91437 1839.3
+864.17413 863.2
+879.17181 1109.5
+879.41632 1544.9
+879.67529 1697.9
+879.92670 1594.5
+880.17096 852.5
+881.73621 1522.6
+882.07782 1364.8
+883.42596 5248.3
+883.67505 11601.9
+883.92487 20396.3
+884.17517 14839.1
+884.42542 10544.3
+884.67633 6173.4
+884.92651 3167.1
+885.63226 2154.7
+885.88019 1869.2
+886.14557 965.4
+886.32867 819.9
+886.54944 1033.1
+886.80646 963.2
+887.41290 7194.6
+887.74854 14430.8
+887.92877 107063.7
+888.09344 12116.3
+888.17865 241581.4
+888.42816 301520.2
+888.54364 1699.9
+888.67847 230586.0
+888.92902 144828.5
+889.17920 76014.3
+889.42908 29642.8
+889.68005 11966.3
+889.80432 1646.2
+889.92963 4955.6
+890.05365 1594.4
+890.17798 1258.9
+890.29425 1061.2
+890.47357 1734.3
+890.98773 1739.2
+891.23602 1997.1
+891.48901 1419.1
+891.73578 770.7
+898.95038 1074.3
+899.80804 967.6
+900.46191 733.6
+904.17743 1197.8
+904.45099 773.2
+907.95514 5422.5
+908.18726 2032.8
+908.44952 7571.3
+908.69275 7640.8
+908.94757 6867.3
+909.19366 4665.6
+909.44958 2232.9
+909.69366 1526.2
+909.78400 631.0
+912.69458 41318.7
+912.94464 102867.3
+913.19525 116202.7
+913.44531 104200.1
+913.69617 69740.8
+913.94659 32322.5
+914.19739 13425.9
+914.44861 5072.9
+914.69995 2054.2
+914.94446 940.9
+925.92981 669.4
+926.45496 700.1
+932.94421 679.3
+933.21686 922.1
+933.51331 1818.4
+933.71893 962.5
+933.96362 1293.6
+934.51068 2003.0
+935.76642 1362.5
+936.09583 3756.4
+936.42590 6066.5
+936.76453 4811.9
+937.09100 2516.1
+937.46313 16131.4
+937.71155 43443.0
+937.96167 54160.2
+938.21289 46490.6
+938.46289 28300.7
+938.71460 15726.1
+938.96588 6486.8
+939.21454 3340.8
+939.46704 1776.3
+941.76770 22233.4
+942.10138 36370.3
+942.43555 37901.2
+942.77026 25747.7
+943.10394 14490.4
+943.43555 5473.6
+943.77643 1675.0
+951.51813 1353.7
+962.22919 4975.6
+962.47845 14690.3
+962.72803 17360.3
+962.98016 17470.5
+963.23035 11133.4
+963.48065 5220.3
+963.73419 2090.8
+963.99396 875.7
+973.46539 1196.6
+973.78937 4206.8
+974.12476 6530.1
+974.45721 4573.4
+974.79089 2568.5
+975.11670 870.9
+979.46149 21516.1
+979.79633 41485.0
+980.13068 42215.4
+980.46490 29613.2
+980.79907 14222.2
+981.13428 5016.7
+981.46326 2026.8
+981.81439 837.2
+986.00244 1194.1
+996.81720 1075.2
+997.87531 971.1
+1002.14374 3583.7
+1002.48059 5084.6
+1002.81464 5827.9
+1003.14606 2550.0
+1003.48010 2503.4
+1004.49579 1252.4
+1005.00763 1094.7
+1005.50006 2424.1
+1005.97858 900.9
+1007.47479 946.5
+1012.48639 1700.3
+1012.81738 5112.6
+1013.15289 3816.2
+1013.48914 4128.4
+1013.81323 1030.9
+1013.99805 4830.4
+1014.49933 7956.2
+1014.99994 5621.3
+1015.50366 2735.0
+1016.48022 966.9
+1036.15320 1355.8
+1036.49792 976.6
+1041.49536 3656.6
+1041.82666 6156.5
+1042.16504 5486.1
+1042.49719 3994.1
+1042.83191 2396.7
+1043.16748 1357.9
+1043.51379 840.3
+1050.58179 1690.3
+1051.56152 1220.2
+1057.29480 960.8
+1058.39050 697.1
+1074.16333 2228.9
+1074.50549 1207.3
+1078.52368 978.7
+1079.51599 927.6
+1079.83533 2361.2
+1080.17249 6504.0
+1080.50757 8709.1
+1080.83875 4985.0
+1081.16809 2290.6
+1081.50684 1269.5
+1081.85144 873.8
+1087.53137 2545.5
+1088.03320 3992.0
+1088.53357 2900.2
+1089.03271 1021.2
+1110.51416 933.5
+1110.87256 1046.1
+1111.18689 1120.1
+1111.52905 1726.0
+1111.85413 1140.9
+1112.19836 1109.8
+1112.53845 1591.7
+1112.87817 1322.1
+1115.85339 3486.8
+1116.19153 7684.3
+1116.52502 10635.2
+1116.85938 8188.9
+1117.19299 4592.0
+1117.53662 4071.9
+1117.86572 5341.2
+1118.20251 8219.3
+1118.53613 5716.7
+1118.87268 2770.1
+1119.20728 1221.0
+1119.55054 1403.2
+1123.46448 820.0
+1148.88159 884.8
+1149.21521 3148.2
+1149.54822 4712.8
+1149.87329 1775.7
+1150.21423 1064.6
+1151.22498 1406.3
+1151.54944 2715.7
+1151.88293 3518.3
+1152.05017 1277.8
+1152.21680 2614.7
+1152.55225 2633.3
+1153.05725 1068.8
+1154.57495 717.0
+1155.20715 938.9
+1155.54871 1593.0
+1155.87134 956.7
+1177.58423 765.9
+1177.89941 1321.0
+1178.23401 2154.4
+1178.56348 2061.8
+1178.89844 1095.4
+1181.68738 822.2
+1183.56750 12398.1
+1183.90076 24830.6
+1184.23523 27159.5
+1184.56946 24395.5
+1184.90430 15829.1
+1185.24072 7614.2
+1185.56213 4882.7
+1186.55725 1841.3
+1198.18518 3266.5
+1216.59460 899.7
+1216.92615 1931.5
+1217.25867 2145.4
+1217.59143 2252.8
+1217.92493 1312.5
+1229.56543 1155.4
+1230.49841 728.3
+1273.06140 732.2
+1310.58655 904.9
+1311.08582 2514.8
+1311.58472 2410.2
+1312.08362 912.0
+1358.59521 758.2
+1365.63867 1154.5
+1367.62903 1903.3
+1368.12976 1676.0
+1368.63928 1008.3
+1575.30261 633.2
+1776.81934 888.6
+1878.45215 1065.4
+1879.09851 2755.9
+1879.20386 2737.0
+1879.62585 18441.6
+1880.15698 2536.8
+1880.78125 1493.9
+1881.24878 1059.3
+1882.14148 757.3
+1906.79016 732.6
+1907.11743 7441.7
+1930.66724 714.2
+S	2619	2619	1003.0005746
+Z	4	4007.971
+271.59064 1540.9
+272.97015 1192.5
+300.12103 1223.4
+311.20746 2704.8
+329.21893 3560.8
+333.77951 1465.4
+339.20258 8451.5
+340.20609 1430.6
+348.29315 1315.5
+357.21371 8890.4
+358.21725 1628.7
+372.99347 1342.2
+386.48190 1149.3
+393.25085 2416.3
+410.27658 4485.2
+411.26199 4729.5
+427.21756 5205.6
+428.28561 6687.6
+438.27109 31398.2
+439.27527 6372.0
+456.28186 30419.3
+457.28537 7208.6
+527.30139 1553.3
+532.53210 3436.4
+579.52216 1339.7
+591.24042 1335.1
+605.63995 2339.9
+605.97192 4674.3
+675.77802 1262.3
+676.64392 2158.8
+682.15222 1436.3
+682.49854 1241.0
+725.36658 1519.4
+749.45746 2699.8
+771.33380 1334.5
+794.91022 3034.8
+795.41016 2291.5
+795.72858 1698.6
+806.40082 1387.9
+806.89740 3290.9
+849.06860 1831.0
+849.40570 2888.6
+849.74054 2503.1
+850.06610 1742.6
+883.66730 1919.0
+883.92426 4346.1
+884.17786 2341.1
+884.42828 2370.0
+887.74652 2424.5
+887.92737 22216.6
+888.17792 53105.9
+888.42853 51058.1
+888.67938 36165.1
+888.92981 21047.6
+889.17682 8876.1
+889.42303 3443.7
+898.95587 3849.8
+899.44995 3939.2
+899.94879 2198.3
+900.45911 2104.3
+907.95703 34792.7
+908.45856 46819.1
+908.69629 3616.6
+908.96051 24531.6
+909.46069 9826.2
+909.96533 3748.3
+912.69482 10265.0
+912.94482 25499.7
+913.19647 24897.0
+913.44623 22175.3
+913.69800 7685.5
+913.95087 3086.2
+914.19366 2932.1
+925.67145 1290.2
+937.95331 1940.8
+941.77057 8434.4
+942.10468 7081.0
+942.43683 6061.0
+942.76587 2963.9
+943.09796 3171.3
+959.44354 2359.2
+960.47327 2073.2
+962.22986 13007.4
+962.47870 31429.7
+962.72925 33173.1
+962.97876 19729.9
+963.22968 13075.6
+963.48492 8543.4
+963.71881 2116.4
+974.46722 1456.8
+979.01111 1463.3
+979.47491 1944.1
+979.79913 7065.2
+980.13525 6165.5
+980.47064 3069.6
+1014.00800 2097.0
+1041.83850 3233.5
+1042.16467 4671.5
+1042.50134 2519.9
+1057.25684 1970.0
+1074.16821 1912.9
+1074.50610 4036.2
+1079.84155 9205.3
+1080.17334 17705.2
+1080.50647 16733.5
+1080.84070 12760.4
+1081.18066 5918.1
+1081.50244 4203.6
+1082.51440 1970.5
+1087.53845 4417.9
+1088.03101 7300.4
+1088.53076 3807.4
+1103.56018 1963.6
+1115.85938 10212.0
+1116.19202 20433.6
+1116.52698 20673.1
+1116.86340 16736.6
+1117.19739 6121.7
+1117.52905 5935.3
+1117.86682 6822.3
+1118.20056 6877.9
+1118.54089 5612.6
+1141.19958 5303.4
+1141.53711 3632.7
+1141.88330 2083.3
+1145.21448 1675.8
+1145.55554 2349.4
+1148.87927 2991.9
+1149.21753 8432.4
+1149.55127 11001.8
+1149.88928 6405.1
+1150.21399 2172.6
+1151.22083 3925.2
+1151.55286 8579.6
+1151.88501 9463.6
+1152.21838 6749.3
+1152.55652 5112.9
+1152.88354 2035.6
+1155.22461 2151.9
+1171.55945 2821.7
+1171.88672 2849.0
+1172.23206 3692.1
+1172.55554 4494.5
+1177.56360 29134.2
+1177.89807 69133.7
+1178.23157 84955.5
+1178.56494 70536.8
+1178.89954 40812.9
+1179.23157 24185.9
+1179.55225 5674.0
+1179.86963 3167.3
+1180.69714 1476.6
+1181.47400 2702.2
+1181.79504 3775.4
+1181.95020 1617.7
+1182.12451 2701.9
+1182.24536 2182.3
+1182.45374 1986.0
+1182.57056 6994.7
+1182.87415 2558.9
+1182.93066 1515.8
+1183.05151 4403.6
+1183.21204 3422.4
+1183.27856 3098.5
+1183.56885 414602.8
+1183.75037 4135.5
+1183.90222 810171.3
+1184.23547 858114.6
+1184.56897 625323.4
+1184.90259 361944.1
+1185.23694 152660.1
+1185.57043 64104.3
+1185.71179 2114.6
+1185.90649 19619.9
+1186.03503 3646.9
+1186.24268 6682.7
+1186.36328 4671.8
+1186.54517 4644.7
+1186.69141 3628.4
+1187.00842 2688.7
+1187.49585 2895.5
+1187.81067 1751.7
+1188.33643 2102.3
+1189.32617 1813.2
+1198.18677 7337.9
+1210.58728 9413.3
+1210.91968 18831.2
+1211.25244 23004.4
+1211.58704 19228.7
+1211.92383 14209.7
+1212.25452 5161.4
+1212.57178 1452.9
+1212.90881 1888.0
+1216.59009 127201.2
+1216.92297 249687.4
+1217.25732 297032.4
+1217.59070 215241.7
+1217.92456 116734.5
+1218.25989 57939.9
+1218.59326 23857.2
+1218.92883 8400.7
+1219.12512 1354.2
+1219.25830 2291.0
+1219.46204 1773.5
+1220.64539 1627.3
+1229.55200 1354.2
+1243.60645 4093.8
+1243.94360 11609.1
+1244.27319 13942.4
+1244.61047 10768.3
+1244.94385 6881.5
+1245.26685 4803.4
+1245.60950 2370.8
+1247.07153 1826.9
+1247.62988 1477.4
+1247.97302 1804.8
+1249.61169 108396.6
+1249.94568 209338.4
+1250.27942 239648.2
+1250.61304 175129.3
+1250.94666 96300.0
+1251.28186 48286.6
+1251.61755 19033.6
+1251.94971 10746.1
+1252.27173 3289.9
+1252.56812 1872.3
+1265.12622 2282.3
+1267.61499 3889.7
+1267.94861 4604.5
+1268.28345 4344.0
+1268.61963 3625.6
+1268.94458 2102.3
+1273.10413 10129.2
+1273.60181 18146.0
+1274.10779 16367.8
+1274.60803 9177.4
+1275.11450 3383.9
+1277.65442 2367.7
+1281.62158 2447.5
+1282.63525 18483.0
+1282.96777 35988.4
+1283.30298 43000.2
+1283.63843 31306.9
+1283.97083 20554.6
+1284.30627 11892.1
+1284.64453 3243.8
+1295.60681 2086.6
+1296.11511 1877.9
+1311.08899 2088.4
+1313.99329 1819.9
+1330.61914 3487.3
+1331.12231 4400.3
+1331.61499 3190.5
+1368.10327 1917.9
+1375.65173 2234.0
+1412.13940 2477.6
+1412.65527 5175.4
+1413.13879 4278.4
+1413.65698 3496.7
+1414.15869 2093.0
+1460.69141 3050.7
+1461.18457 2057.8
+1461.69641 2106.8
+1468.69690 2603.8
+1469.19312 4514.9
+1469.69128 4982.8
+1470.19727 3724.1
+1470.69080 2282.4
+1495.24500 2188.4
+1503.54150 1486.6
+1518.72253 1997.4
+1523.70288 1757.6
+1552.23755 2475.1
+1552.75208 1799.6
+1553.74243 2419.4
+1561.74951 3264.0
+1562.23877 7048.6
+1562.74207 6680.7
+1563.22839 5328.8
+1563.77332 1873.1
+1611.77795 1794.0
+1615.77478 3913.6
+1616.27075 5396.3
+1616.77747 5924.3
+1617.27197 5023.1
+1617.80029 2811.1
+1625.22998 1495.8
+1625.76233 1934.2
+1643.74695 1391.9
+1665.30298 2504.1
+1666.29395 4054.0
+1666.78003 2480.3
+1667.29395 2912.7
+1673.28516 19246.0
+1673.78381 36993.8
+1674.28430 37058.9
+1674.78650 26763.3
+1675.28870 13022.2
+1675.79187 7431.7
+1676.30066 4553.9
+1716.41553 1436.0
+1722.80420 4063.1
+1723.31921 6991.8
+1723.81531 9021.8
+1724.32007 4796.9
+1724.80859 2713.3
+1734.78406 13477.6
+1735.79419 13958.4
+1736.78809 7524.8
+1737.78406 2489.0
+1772.32983 2107.1
+1772.86060 5568.2
+1773.33545 4470.9
+1773.85571 2923.4
+1774.36670 2369.9
+1775.31299 1455.8
+1833.85925 2908.3
+1834.86255 3430.9
+1870.07739 1896.1
+1877.99780 1693.6
+1879.07678 3824.0
+1879.54846 40731.4
+1880.02612 3510.1
+1880.69263 1732.6
+1907.08960 15415.4
+1930.55188 1815.3
+S	2621	2621	801.7974626
+Z	5	4003.94819
+218.22311 45068.2
+218.22990 44117.7
+235.44087 56412.8
+249.26041 53023.8
+257.67300 56546.8
+289.58344 51522.8
+326.55981 58386.9
+453.43933 51769.5
+532.49646 180451.4
+555.43494 56993.0
+574.07770 64671.3
+623.12341 73032.1
+630.44696 62228.6
+631.18091 58606.2
+662.04132 52854.6
+676.64661 65317.9
+743.20569 65751.5
+784.25867 55069.2
+795.75433 99250.3
+842.12811 61553.6
+861.52655 58274.7
+887.92706 316661.2
+888.17535 614804.3
+888.42755 624911.9
+888.67535 274564.2
+888.92767 236125.8
+889.18463 98514.9
+912.94073 190894.6
+913.19183 181752.5
+913.44958 215558.7
+913.69281 79122.1
+914.19751 82614.5
+937.71625 81500.9
+937.95490 82732.2
+980.11511 94888.8
+1057.26245 68326.0
+1130.50269 48534.1
+1198.11609 265471.7
+1219.84509 59505.5
+1221.09534 55758.4
+1260.01257 59809.2
+1431.34680 64062.4
+1574.32532 63390.6
+1825.44360 65360.9
+1876.18420 91754.8
+1876.80066 65796.9
+1878.53699 51628.4
+1878.82825 110515.2
+1879.11230 87599.3
+1879.54346 1740530.0
+1880.35486 58007.9
+1880.73999 67782.4
+1882.39050 88375.9
+1906.66394 78209.3
+1907.05383 620707.6
+1930.70703 99989.4
+S	2622	2622	1879.95499127
+Z	3	5636.59
+Z	2	3758.062
+517.48816 741.9
+532.48151 2007.8
+583.03174 693.8
+676.65137 1023.8
+696.74921 660.3
+731.16882 863.5
+762.87280 606.2
+795.73584 1323.7
+956.20654 662.1
+1021.18994 686.4
+1039.41553 671.7
+1057.26807 926.6
+1160.83984 666.1
+1166.36670 786.1
+1198.07397 3567.2
+1198.57568 610.0
+1285.56921 666.3
+1430.67200 741.9
+1489.76038 614.5
+1607.23340 733.7
+1879.20972 1896.6
+1879.55042 20026.5
+1879.91003 2040.3
+1881.02551 655.3
+1906.98389 7054.3
+1907.24951 1623.0
+1930.70679 1590.2
+S	2623	2623	1001.9933946
+Z	4	4003.94228
+282.75165 817.4
+295.18134 999.1
+302.60583 957.9
+329.21558 1362.3
+339.20120 2714.5
+342.30048 1091.6
+357.21356 3357.8
+393.24957 1246.2
+410.27393 1547.1
+411.26016 1827.9
+427.22119 1048.6
+428.28476 2994.2
+438.27054 10720.4
+439.27356 2201.7
+456.28061 9634.7
+457.28348 2364.3
+479.65982 815.7
+532.49481 2537.6
+606.31305 2139.8
+611.10034 965.3
+630.45630 1072.3
+670.69067 932.5
+718.49591 955.6
+755.43115 923.4
+795.73242 1821.5
+845.27118 810.2
+884.17188 2505.9
+887.92456 4771.6
+888.17639 13297.0
+888.42603 23756.2
+888.67761 17618.8
+888.92749 9049.8
+889.17841 2518.4
+907.95618 11592.4
+908.45654 17238.5
+908.95667 9121.3
+909.46033 4015.6
+912.69226 2722.7
+912.94440 6947.3
+913.19501 10575.9
+913.44452 6945.0
+913.69702 5723.5
+913.93658 1856.2
+937.89899 763.1
+937.94958 782.9
+942.10071 2557.9
+942.43774 3764.9
+942.77789 1826.1
+953.81232 899.5
+959.45892 823.1
+962.22937 1200.3
+962.47601 9950.9
+962.72766 10728.1
+962.97821 12040.1
+963.22913 7404.9
+979.79724 2770.3
+980.12671 3219.2
+980.46881 1548.6
+980.79340 953.5
+1018.56830 1006.2
+1042.16162 1750.7
+1080.16992 6050.3
+1080.50708 8616.6
+1080.84216 3611.4
+1081.18079 2885.5
+1081.50903 1381.8
+1088.03613 2138.0
+1088.53076 2664.0
+1101.43872 1054.9
+1115.85999 1137.5
+1116.19202 5844.1
+1116.52417 7933.1
+1116.85840 7252.2
+1117.19519 3173.1
+1117.87024 2545.3
+1118.19556 2640.5
+1118.53394 1924.8
+1140.28186 1179.6
+1141.53516 1806.9
+1148.88318 1346.2
+1149.20642 1742.4
+1149.54688 1986.1
+1149.87634 1641.8
+1150.23035 1161.3
+1151.54883 4440.9
+1151.88098 3606.6
+1152.21582 2316.1
+1152.54529 2086.4
+1172.23523 1916.5
+1172.54956 1592.9
+1177.56409 6565.2
+1177.89429 19552.0
+1178.22925 32037.8
+1178.56335 33880.8
+1178.89807 16174.2
+1179.23096 8960.8
+1179.56921 3430.5
+1179.91187 2289.2
+1180.23889 1294.3
+1182.12073 1186.3
+1182.44885 1676.7
+1182.55896 2584.5
+1183.08215 2822.6
+1183.56531 75885.6
+1183.90027 241618.3
+1184.23401 351141.8
+1184.56726 297016.4
+1184.90125 152187.0
+1185.23621 59625.0
+1185.57043 17660.8
+1185.90710 6672.8
+1186.22986 2187.8
+1186.35986 2249.7
+1186.55481 2168.7
+1186.69763 1139.0
+1188.12085 963.7
+1188.58484 1223.9
+1188.88416 1838.4
+1198.10474 5489.7
+1210.57227 1361.0
+1210.92004 5602.9
+1211.25354 7393.7
+1211.58606 7691.2
+1211.92249 3428.3
+1212.25854 1349.5
+1215.59204 1161.8
+1216.58813 22304.1
+1216.92163 72726.1
+1217.25562 104535.5
+1217.58923 92225.7
+1217.92285 52955.8
+1218.25671 17930.1
+1218.59058 6026.1
+1218.91858 3227.8
+1219.25378 1607.8
+1243.94092 2843.9
+1244.27417 5712.5
+1244.60583 3883.3
+1244.94324 2655.9
+1249.60803 16693.0
+1249.94446 61483.4
+1250.27771 99419.4
+1250.61206 81991.5
+1250.94604 46562.7
+1251.27917 20546.3
+1251.61279 5788.5
+1251.95679 2268.8
+1254.95166 995.1
+1267.94104 1315.7
+1273.09827 1898.2
+1273.60229 5600.5
+1274.10315 5985.3
+1274.60498 2904.8
+1275.09900 1823.7
+1282.63818 2310.9
+1282.96790 10053.2
+1283.30103 17219.1
+1283.63477 15639.6
+1283.97180 7802.3
+1284.31104 2813.6
+1285.00342 978.0
+1296.12231 1391.0
+1296.63513 1449.2
+1331.11462 1287.3
+1331.61218 2165.2
+1375.67639 1150.1
+1412.65894 1292.5
+1413.15869 2689.2
+1413.65100 1724.6
+1469.20435 1228.6
+1469.68481 2246.3
+1522.70471 1107.6
+1562.23853 1687.3
+1562.74426 1894.5
+1563.26331 1153.1
+1616.27185 2086.8
+1616.77576 1577.4
+1617.25232 1564.8
+1673.28503 3560.5
+1673.78003 10348.0
+1674.28381 11616.6
+1674.78674 9142.3
+1675.28015 4994.3
+1675.79810 1825.1
+1723.32532 2165.5
+1723.81335 2135.3
+1724.33020 2205.5
+1724.82703 1020.8
+1734.78125 3657.9
+1735.78613 4959.1
+1736.77405 3189.9
+1737.83032 1109.0
+1773.34045 2586.7
+1773.84924 2300.6
+1870.14209 942.4
+1879.51904 27502.5
+1906.93213 10554.1
+S	2625	2625	1282.80640793
+Z	3	3845.144
+Z	2	2563.765
+342.23294 47877.7
+343.20563 45733.1
+350.27884 63558.3
+373.20813 482210.4
+393.24954 64663.1
+410.27655 104025.7
+411.26035 125951.3
+427.21863 655510.2
+428.22238 134274.2
+428.28635 124224.6
+436.46988 56421.7
+438.27094 696737.1
+439.18271 83637.7
+439.27417 129335.2
+456.28137 552922.1
+457.28552 95362.2
+463.20749 46112.5
+482.66666 72101.4
+488.23761 107613.5
+512.84320 51827.9
+522.50275 50754.6
+525.30048 113154.4
+526.28711 105424.3
+526.75269 640928.1
+527.00397 682799.8
+527.25427 439303.3
+527.50763 189009.5
+527.75470 57495.4
+532.50751 164614.7
+547.51984 73775.2
+547.77325 63188.0
+551.34869 80365.4
+551.77197 51803.8
+552.37097 47741.2
+567.27686 121007.8
+575.75226 46675.9
+577.29553 74419.3
+585.28680 2813612.5
+586.29010 803978.1
+587.28979 141114.3
+595.30701 213409.4
+596.31622 51401.0
+606.35333 61873.3
+613.31616 141906.3
+614.31647 59515.0
+624.37128 155265.8
+630.42725 74802.4
+638.38336 46137.4
+650.38953 72733.6
+654.37146 46115.0
+668.39813 97298.4
+676.64984 63838.6
+708.39301 233831.9
+714.34460 191975.0
+715.34924 81187.3
+726.40106 206695.7
+727.40515 80256.8
+731.44580 121784.3
+732.35541 1951437.9
+733.35834 847551.0
+734.35852 174523.0
+737.44904 68071.0
+749.45508 512863.3
+750.45654 221658.8
+767.46643 327870.0
+768.47217 121873.1
+792.27283 50939.5
+795.74939 55860.0
+811.45685 72137.2
+825.47583 74435.2
+843.38373 123434.7
+844.40161 62169.7
+852.43451 128385.0
+853.43872 95144.8
+861.39819 629658.1
+862.40149 258490.6
+864.47888 78081.5
+867.46960 65199.5
+871.45795 135251.1
+882.49115 309120.3
+883.49335 131017.2
+889.46143 151606.2
+890.47095 99591.3
+924.53687 64068.6
+933.51093 86680.0
+951.51221 319589.6
+952.52295 117759.4
+965.52844 255646.1
+966.52661 85178.1
+969.52576 293222.4
+970.52802 123496.7
+971.44971 63152.9
+972.42871 257518.4
+973.43243 166341.9
+983.54675 57135.2
+986.48041 65275.7
+989.10889 57834.1
+989.45612 310237.8
+990.45715 105003.5
+991.46478 56744.9
+1004.49475 227040.3
+1005.49866 172098.3
+1009.38641 114969.1
+1010.39008 75807.6
+1015.56238 60673.2
+1032.57104 362738.5
+1033.57593 232162.1
+1036.95532 46555.8
+1044.99219 452461.6
+1045.49146 576540.0
+1045.99011 416141.2
+1046.49414 229231.0
+1046.98779 66189.1
+1050.58179 1048063.8
+1051.58618 664974.6
+1052.58911 174997.3
+1053.99585 3699926.3
+1054.49768 3944198.5
+1054.99890 2156735.8
+1055.49951 941305.9
+1056.00244 319200.0
+1056.50427 64949.9
+1057.25195 71848.1
+1064.59875 337055.8
+1065.60229 167824.0
+1066.59631 74021.9
+1067.57690 78109.9
+1068.59399 722317.3
+1069.59497 512381.1
+1070.60205 133273.9
+1074.33521 47322.9
+1082.60571 189999.2
+1083.61108 93083.0
+1086.46582 124116.7
+1087.47485 78966.5
+1094.52625 98450.4
+1095.01501 162382.3
+1095.51990 158735.1
+1103.50269 2247966.5
+1104.03088 1790988.5
+1104.50684 1196892.0
+1105.03503 442521.1
+1105.50024 416789.8
+1106.50403 84791.9
+1119.64258 51917.8
+1122.47327 208776.8
+1123.47571 101377.3
+1128.58667 165976.8
+1129.59302 75514.2
+1144.61475 60022.0
+1145.65503 338316.1
+1146.66199 161618.0
+1153.06580 84850.0
+1153.57361 164288.2
+1163.66565 1344752.0
+1164.66870 777689.9
+1165.66956 325711.3
+1181.67725 1038345.8
+1182.67896 623958.6
+1183.68201 219736.6
+1198.13110 236138.5
+1201.50281 200209.2
+1202.54736 72787.4
+1218.52576 4915278.0
+1219.52869 2914465.0
+1220.53088 1114840.9
+1221.53699 309796.6
+1227.66187 147895.2
+1228.65771 99788.5
+1235.49194 66396.0
+1236.48853 51725.2
+1245.68372 61952.1
+1255.10486 87943.7
+1281.54456 74878.5
+1308.71118 80055.9
+1309.72681 86476.9
+1326.72961 560178.9
+1327.73303 372052.9
+1328.73743 115949.4
+1344.74255 434069.5
+1345.74353 355638.6
+1346.76379 124785.0
+1358.61462 90463.9
+1363.59717 84123.3
+1364.57397 164327.9
+1365.55579 75974.6
+1366.56482 74315.0
+1375.63660 171321.4
+1376.17212 52260.1
+1376.64136 142272.1
+1377.64063 65975.3
+1381.58948 6061416.0
+1382.59204 4675506.0
+1383.59460 2066683.4
+1384.59863 643200.2
+1385.59033 144483.9
+1441.75647 86801.8
+1442.74255 164624.4
+1445.68921 56172.7
+1459.76807 570032.5
+1460.77222 466319.8
+1461.77966 122240.6
+1462.77600 62721.9
+1476.65515 87664.3
+1477.65479 112179.0
+1478.64441 96150.3
+1494.67444 6137578.0
+1495.67700 4860057.0
+1496.67908 2303944.8
+1497.68250 718168.6
+1498.67615 179181.0
+1504.70703 107445.0
+1505.68787 168183.4
+1506.68982 150352.1
+1522.70337 289108.4
+1523.70789 252858.0
+1524.70789 150840.3
+1525.46130 76180.9
+1556.79675 68694.7
+1573.80554 137056.9
+1574.79602 193899.2
+1593.74011 824847.3
+1594.74426 785959.1
+1595.74597 315183.4
+1596.75049 121819.1
+1621.77307 102473.6
+1622.77722 97641.5
+1662.78918 65570.7
+1663.79321 97112.7
+1667.17151 51825.4
+1680.77417 1810624.4
+1681.77600 1801209.9
+1682.78088 857714.1
+1683.76160 284400.0
+1684.86365 85229.4
+1685.86353 96271.1
+1701.85925 233498.1
+1702.87219 252848.2
+1703.86401 123082.2
+1716.74658 66049.9
+1717.75488 68682.0
+1718.78735 69197.3
+1720.78491 56905.8
+1721.84546 92483.3
+1734.78601 604708.2
+1735.79016 594327.1
+1736.79468 340644.8
+1737.77441 94276.7
+1777.79553 85277.2
+1778.78210 129168.2
+1779.77820 122820.3
+1795.79749 2299651.3
+1796.80212 2207172.3
+1797.80408 1230236.8
+1798.80750 450549.9
+1799.82971 127577.3
+1812.89697 379085.4
+1813.89844 448681.8
+1814.89465 267779.5
+1815.90381 72700.3
+1830.91040 1054536.8
+1831.91272 1017681.3
+1832.91711 495177.8
+1833.89075 165843.4
+1835.80920 59441.5
+1878.26086 80712.4
+1878.90576 143534.6
+1879.29688 70364.4
+1879.55835 1504059.1
+1880.00256 100255.9
+1880.75989 71054.8
+1907.04053 575742.1
+1908.88086 406119.0
+1909.89221 361978.8
+1910.89307 239198.3
+1911.89709 98116.9
+1918.96143 75347.8
+1930.66760 76701.8
+1933.92822 56692.9
+1941.97168 64612.0
+1942.94641 184775.7
+1943.95959 189955.6
+1959.96753 771597.3
+1960.97632 897179.4
+1961.98572 603216.3
+1962.98694 214562.5
+1968.22314 57608.7
+1977.97803 1838003.3
+1978.98315 1869401.1
+1979.98560 1238283.6
+1980.98499 418247.5
+1982.02002 103148.0
+S	2626	2626	1538.9646246
+Z	5	7689.784
+427.52875 5656.9
+514.31250 4227.2
+521.60120 4013.6
+532.50073 14064.7
+549.14752 5570.9
+676.63934 8458.7
+712.76825 4552.0
+731.11072 4716.0
+795.72784 8091.8
+872.45514 4423.7
+955.36420 4979.5
+1057.24902 4940.5
+1067.93616 4569.1
+1097.16675 4374.9
+1198.12073 20316.0
+1224.48657 4783.3
+1277.25305 4055.4
+1501.01331 4788.0
+1529.36841 4535.4
+1709.14807 7419.0
+1709.50391 13840.8
+1709.84583 9387.6
+1710.19128 5016.2
+1876.08435 6477.4
+1878.49561 4773.7
+1879.53467 140567.3
+1907.08374 46944.3
+S	2627	2627	1283.3068246
+Z	3	3846.645
+Z	2	2564.766
+373.20752 207149.5
+383.42340 13684.8
+393.24960 29909.4
+409.20941 27584.7
+410.27716 42391.7
+411.25900 43300.9
+424.42563 14815.1
+427.21814 294565.0
+428.22208 51611.2
+428.28638 84847.9
+429.29202 19322.2
+438.27057 253954.8
+439.18073 24577.9
+439.27338 64010.1
+449.63968 13822.6
+456.28140 180030.8
+457.28403 35872.5
+460.64444 16190.3
+473.27042 17099.7
+478.23358 17303.0
+488.23230 35513.7
+514.24744 20894.1
+521.31427 16275.5
+525.30292 35895.6
+526.28656 40959.4
+526.75317 266806.2
+527.00397 313893.7
+527.25470 181676.9
+527.50562 81224.5
+527.75873 23895.3
+531.28436 18034.6
+532.51074 50532.6
+533.31348 21165.2
+547.52350 33284.1
+547.77277 31910.7
+548.02228 21252.9
+551.32806 19820.3
+551.35248 26085.3
+551.52386 16223.2
+567.28064 47745.3
+568.27710 27400.6
+569.34503 19621.1
+574.82849 13512.2
+577.29700 52681.5
+585.28699 1204274.1
+586.29034 312057.1
+587.29443 42860.5
+595.30804 103172.8
+596.30688 18653.4
+613.31769 78715.7
+614.32233 24681.2
+624.36884 80180.1
+625.37817 19449.8
+636.36707 18487.8
+638.38269 26936.4
+650.38782 49618.2
+651.38977 23792.1
+668.39838 23707.6
+708.39130 66227.4
+709.39343 33304.4
+713.39453 16083.7
+714.34473 83727.2
+715.35168 31649.2
+726.40442 89135.8
+727.40363 52610.1
+731.44617 34615.9
+732.35553 822731.1
+733.35803 316486.1
+734.36102 85394.4
+735.35767 21456.0
+737.45441 30059.2
+749.45526 219612.7
+750.45947 74173.9
+751.46338 23191.6
+767.46545 145150.4
+768.46735 59468.2
+769.47211 17123.5
+793.43823 24226.7
+797.31543 25485.6
+807.46039 22540.1
+811.45953 38820.5
+812.46161 20425.6
+825.47101 38343.8
+834.43207 37430.6
+843.38824 68355.0
+844.39087 34345.1
+846.45673 23956.8
+852.43549 45249.2
+853.44202 24413.2
+854.44727 17051.5
+861.39807 269759.8
+862.40192 110408.4
+863.40924 27249.6
+864.48053 57910.7
+871.45251 53138.5
+882.49207 112326.2
+883.49841 37934.3
+889.46893 59454.0
+890.46472 27578.9
+910.51886 16471.3
+911.53052 18255.0
+924.54004 37577.7
+933.50372 43555.4
+934.50232 25345.5
+947.51190 23812.7
+951.51392 104069.1
+952.52112 71189.5
+965.52588 95052.6
+966.52625 44712.6
+969.52594 125536.9
+970.52771 59854.3
+971.44843 45826.7
+972.43011 104667.2
+973.42883 48016.9
+983.52881 21311.7
+986.48071 26982.8
+988.53943 27090.3
+989.45679 119797.4
+990.45978 55193.4
+991.45203 20679.8
+1004.49463 134844.4
+1005.49847 84211.1
+1009.38824 65988.2
+1010.39777 29542.6
+1014.56189 23025.7
+1015.55530 18761.9
+1022.60828 15589.3
+1032.57239 157094.0
+1033.57336 102504.9
+1034.57263 34722.1
+1036.98206 18205.5
+1040.59253 21225.7
+1044.99255 194643.2
+1045.48962 261055.7
+1045.99304 204683.3
+1046.49231 94323.9
+1046.99622 42510.2
+1050.58240 400908.2
+1051.58545 248576.2
+1052.58533 66155.3
+1053.99622 1435986.1
+1054.49792 1531129.4
+1054.99890 863263.6
+1055.50073 394928.3
+1056.00317 140186.2
+1056.50220 32650.9
+1064.59558 122983.8
+1065.59741 60552.9
+1066.60754 19936.5
+1068.59241 322966.5
+1069.59631 168687.9
+1070.59717 40068.7
+1072.40955 20991.7
+1082.60510 70776.5
+1083.60925 36540.9
+1086.46606 58111.5
+1087.47253 32288.2
+1087.59827 25410.3
+1094.51282 47279.4
+1095.02539 73996.1
+1095.52649 76960.0
+1096.02832 25990.9
+1103.50024 868226.0
+1104.03186 662218.1
+1104.50781 499175.7
+1105.03552 184465.5
+1105.49976 181225.7
+1106.50122 44127.9
+1118.53577 25794.2
+1122.47400 75747.9
+1123.47205 50954.4
+1124.48425 25996.5
+1128.58618 63161.7
+1129.58740 23896.6
+1145.65723 102298.5
+1146.66467 44747.0
+1147.67285 27679.1
+1153.07007 61797.4
+1153.56812 41067.7
+1153.67725 20689.6
+1154.03186 19817.0
+1163.66614 614426.6
+1164.66956 354402.2
+1165.67090 134155.1
+1166.68359 28357.0
+1181.67700 431781.8
+1182.67981 248660.5
+1183.68176 89964.1
+1184.69751 28701.8
+1186.67419 17934.1
+1194.45898 15577.5
+1198.14514 80850.0
+1200.50940 34004.2
+1201.50867 74431.0
+1202.50806 55154.6
+1203.09485 27219.5
+1203.54578 20991.3
+1208.59058 16421.4
+1218.52588 2011601.4
+1219.52869 1308397.0
+1220.53113 478144.5
+1221.53528 153280.4
+1222.53613 25414.5
+1227.66858 55893.6
+1228.66589 32226.6
+1229.59863 21134.8
+1230.44629 14173.7
+1230.56189 19054.4
+1235.50281 38686.5
+1236.50562 20795.1
+1245.68579 25771.6
+1246.60498 23976.7
+1308.71094 41372.7
+1326.73120 252388.0
+1327.73474 177273.1
+1328.74097 64921.2
+1344.74158 196104.1
+1345.74805 134246.6
+1346.75415 50367.4
+1347.71729 18874.7
+1357.64685 23654.6
+1358.62708 34180.3
+1363.56934 41544.1
+1364.57300 98728.4
+1365.56616 46095.7
+1366.57178 33810.0
+1375.63586 88398.3
+1376.63647 63594.9
+1381.58972 2608890.3
+1382.59216 1971412.5
+1383.59509 820865.3
+1384.59839 294778.7
+1385.59644 75769.2
+1386.58960 22800.2
+1441.75146 51084.3
+1442.77136 37361.6
+1459.76794 248542.5
+1460.77014 175703.2
+1461.77759 76578.6
+1474.70447 20202.5
+1475.71204 19585.9
+1476.65259 26914.6
+1477.65662 81060.8
+1478.66406 40146.1
+1493.68115 24927.0
+1494.67493 2423640.5
+1495.67712 2010591.9
+1496.67944 920333.9
+1497.68103 341104.1
+1498.67932 84071.5
+1504.69958 46833.7
+1505.69031 68659.0
+1506.69836 48482.2
+1507.68005 26324.3
+1522.70337 134095.4
+1523.70313 113090.6
+1524.71289 41102.2
+1525.46252 19794.3
+1555.80054 33526.9
+1573.81213 93513.7
+1574.81274 68923.4
+1575.82288 19011.7
+1593.74146 341785.9
+1594.74573 289301.1
+1595.74805 152361.6
+1596.74744 75885.4
+1597.75061 25429.6
+1621.77405 49919.1
+1623.78271 19098.3
+1662.75854 25415.0
+1663.76038 43801.9
+1664.76355 28814.2
+1680.77405 800488.9
+1681.77649 711459.9
+1682.78027 409332.9
+1683.76721 90705.5
+1684.88013 28609.6
+1685.85156 37664.1
+1701.87195 106835.8
+1702.87439 109411.4
+1703.88196 42425.2
+1704.85181 29443.8
+1716.77332 22934.7
+1717.78564 34634.6
+1720.84644 24556.5
+1734.78345 253784.0
+1735.78650 235611.8
+1736.78833 128416.5
+1737.78979 66070.5
+1758.64722 14886.5
+1777.79858 25298.2
+1778.77795 59317.6
+1779.74622 18662.0
+1780.78271 22363.2
+1795.79858 942639.4
+1796.80249 915556.4
+1797.80371 528802.4
+1798.81299 189334.9
+1799.81873 64302.1
+1812.90015 109181.4
+1813.89368 158032.2
+1814.89734 114203.3
+1815.89453 50377.4
+1816.89697 21687.4
+1830.90942 396872.8
+1831.91174 422997.8
+1832.91089 197371.1
+1833.91931 67010.8
+1834.86816 36200.4
+1835.85608 36068.0
+1878.29688 21042.4
+1878.88171 24546.5
+1879.52795 457523.0
+1879.88440 48902.8
+1880.54565 27235.9
+1880.79614 33764.2
+1907.06372 176444.7
+1908.88391 166210.4
+1909.88074 156896.4
+1910.88696 84681.9
+1911.88440 51764.5
+1930.62756 25027.2
+1933.93481 23458.0
+1941.96680 26039.2
+1942.95569 56417.6
+1943.95984 61378.1
+1944.96875 34420.0
+1959.96912 281032.1
+1960.97729 385594.2
+1961.97742 238365.3
+1962.98645 108813.0
+1963.95776 44304.2
+1977.97913 802934.5
+1978.98291 843778.3
+1979.98596 446983.7
+1980.98572 162665.5
+1981.97412 57568.3
+S	2629	2629	1282.8058246
+Z	2	2563.764
+Z	3	3845.142
+344.31439 627.3
+352.25763 675.9
+373.20950 7287.8
+373.55524 590.3
+408.23279 741.0
+409.20996 1083.4
+410.27512 1003.0
+411.26495 967.0
+427.22018 8620.8
+428.22314 1946.0
+428.28683 1151.0
+438.27213 6655.5
+439.18448 644.5
+439.27637 1502.5
+444.61670 587.9
+456.28354 4429.4
+456.46655 684.6
+457.28549 1641.9
+463.24725 593.5
+463.26920 597.3
+479.75027 660.5
+502.74658 780.4
+508.28040 1025.3
+515.25824 813.1
+522.25140 1662.1
+522.50305 2291.9
+522.75159 1489.9
+523.00348 1130.0
+525.30475 1460.4
+526.75464 38314.1
+527.00494 42221.5
+527.25513 26102.9
+527.50641 11130.9
+527.75739 3665.5
+528.13702 537.8
+532.49652 2049.2
+547.52350 5969.1
+547.77386 6995.7
+548.02423 3758.3
+548.27484 1583.6
+548.52747 651.6
+551.32190 648.3
+551.35602 599.2
+551.52271 2140.6
+551.77216 2644.8
+552.02258 1682.8
+567.27997 1829.8
+568.28131 730.1
+577.30267 1478.0
+585.28931 35930.0
+586.29187 11921.7
+587.29498 3546.6
+595.31244 2681.0
+596.31232 972.4
+604.29071 648.8
+613.31927 1431.9
+624.37018 1761.7
+634.25739 1021.8
+650.39325 1496.5
+654.35944 669.9
+667.45306 631.4
+676.37030 662.8
+676.62555 1087.3
+684.36102 732.8
+708.39105 2140.5
+709.39807 709.7
+714.34839 2629.1
+715.35309 1396.3
+726.40533 3059.7
+731.44666 1079.8
+732.35846 31324.3
+733.36157 13536.3
+734.36334 3803.1
+737.45807 1211.5
+738.45819 887.0
+749.45898 5042.5
+750.45984 2787.8
+751.46271 1120.7
+767.46753 5589.6
+768.47229 2180.8
+795.73639 915.7
+807.46521 843.2
+811.46588 951.3
+843.39362 3169.8
+844.40515 1099.1
+845.39099 673.5
+846.32751 941.0
+852.43958 1671.8
+853.44312 1865.9
+854.44843 718.4
+861.40143 11402.4
+862.40533 5786.9
+863.40991 1711.2
+864.48419 2324.4
+865.49194 966.0
+867.45972 928.9
+871.45770 1675.1
+872.46509 1339.2
+882.49548 9425.4
+883.49890 3590.4
+884.49835 791.5
+889.47028 3126.9
+890.46783 1150.3
+893.36407 1008.5
+910.38489 1165.5
+910.52325 1120.7
+924.54437 1646.7
+933.50269 1405.9
+934.52332 804.5
+947.51227 941.3
+951.51660 4957.1
+952.52008 2973.9
+965.52875 3194.7
+966.53369 1967.5
+967.54279 1077.9
+969.52728 6519.2
+970.52783 4072.4
+971.45526 1983.6
+972.43329 6377.8
+972.53876 852.8
+973.43744 3405.4
+979.22357 700.8
+983.54034 1496.7
+986.48511 1135.3
+988.53748 1162.5
+989.46362 7652.9
+990.46613 4496.0
+991.46381 1791.3
+1004.49658 7297.4
+1005.50348 4020.4
+1006.51257 1321.8
+1009.39795 4347.4
+1010.39984 2608.2
+1011.41003 1050.1
+1014.56921 770.1
+1023.61975 919.3
+1029.53589 834.6
+1032.57764 7175.7
+1033.57837 3671.2
+1034.57739 1158.5
+1044.99634 8143.0
+1045.49500 10099.5
+1045.99475 7889.5
+1046.49622 3086.6
+1047.00635 1420.5
+1050.58630 26275.1
+1051.59009 15489.6
+1052.59106 4949.5
+1053.99976 81139.9
+1054.50146 90689.5
+1055.00244 55484.7
+1055.50452 24498.4
+1056.00671 9823.6
+1056.50391 1519.1
+1064.60071 6729.1
+1065.60596 4080.0
+1066.60803 1031.8
+1068.59656 33238.6
+1069.47034 782.1
+1069.59888 17020.9
+1070.60144 6028.4
+1071.60437 1334.2
+1072.41675 2029.8
+1073.42212 977.1
+1079.47400 739.5
+1082.61487 4218.8
+1083.61719 3152.1
+1086.47327 4884.1
+1087.48047 3294.7
+1087.61121 1850.6
+1088.47742 1370.0
+1088.61194 981.2
+1094.52673 1836.7
+1095.02893 3671.9
+1095.53125 2615.1
+1096.03650 1448.2
+1103.50562 72582.1
+1104.03552 50814.1
+1104.51013 42856.7
+1105.03833 15958.3
+1105.50708 14777.6
+1106.02966 1144.1
+1106.51257 4360.7
+1107.51697 1217.4
+1118.54114 1105.4
+1119.54871 1336.1
+1122.47449 6109.9
+1123.47595 2848.4
+1128.59583 3765.4
+1129.59802 2012.0
+1130.59766 1053.1
+1144.56738 1200.6
+1145.06653 862.0
+1145.65747 5696.1
+1146.67944 2720.2
+1147.69604 1168.8
+1153.06897 6221.9
+1153.24475 786.7
+1153.57117 6509.0
+1154.07117 3784.0
+1154.60437 940.4
+1154.68555 1246.2
+1163.67004 41269.8
+1164.67310 25641.3
+1165.67480 9727.1
+1166.67664 2230.2
+1181.68115 45428.9
+1182.68433 28255.3
+1183.68726 10179.6
+1184.68896 2871.5
+1185.69470 894.0
+1198.10889 3182.0
+1200.50916 2919.3
+1201.50635 6162.9
+1202.53271 4519.3
+1203.10571 2634.3
+1203.58752 2704.2
+1208.57568 1596.6
+1209.08582 1672.5
+1214.54138 703.2
+1218.52979 137106.8
+1219.53271 87704.4
+1220.53516 33544.5
+1221.53723 10122.0
+1222.54260 1854.0
+1227.66394 2030.0
+1228.67468 1662.6
+1235.47314 968.2
+1236.47778 768.2
+1281.63623 1618.2
+1282.12341 2697.0
+1282.63123 3314.4
+1283.14148 2598.0
+1283.65564 1790.1
+1302.17834 620.8
+1308.57874 3171.7
+1308.71777 3049.2
+1309.59851 1594.8
+1309.72559 2084.0
+1310.57800 1315.1
+1310.71948 866.1
+1316.72876 867.2
+1326.73413 26565.4
+1327.73755 20761.0
+1328.74023 8119.7
+1329.74280 2456.6
+1340.59595 1003.5
+1341.61584 1028.2
+1343.74072 706.4
+1344.74463 43790.1
+1345.74792 31027.5
+1346.75134 13570.1
+1347.75940 3011.3
+1348.57458 2347.4
+1349.57446 1719.4
+1357.64392 1699.6
+1358.62341 2534.8
+1359.62048 1783.8
+1363.58313 3549.1
+1364.57898 6417.5
+1365.57642 3535.0
+1366.58508 1962.3
+1367.57568 946.9
+1375.64368 6837.7
+1376.12622 1007.7
+1376.64343 4012.0
+1377.15149 938.1
+1377.63647 2151.8
+1381.59363 224834.2
+1382.59595 161728.6
+1383.59924 70321.0
+1384.29443 796.2
+1384.60144 21117.0
+1385.29968 996.8
+1385.60315 5071.5
+1386.59424 786.7
+1387.05737 1268.8
+1404.08325 715.1
+1423.61194 1657.9
+1424.62000 1639.0
+1432.55811 649.4
+1441.76282 4266.3
+1442.76465 2366.5
+1443.78113 1128.3
+1459.77258 35105.4
+1460.77563 26872.4
+1461.77783 11232.3
+1462.78064 3011.1
+1474.72095 1559.9
+1475.69568 1117.4
+1476.66052 2427.4
+1477.65698 5981.0
+1478.65991 4357.3
+1479.66162 1912.5
+1487.67358 1672.5
+1488.66040 1976.4
+1489.62866 1012.1
+1491.64978 816.3
+1492.67090 1036.9
+1494.67859 205188.5
+1495.68091 167636.0
+1496.68384 77218.2
+1497.68787 25696.4
+1498.68884 7559.1
+1499.68579 1761.9
+1500.80750 1239.0
+1504.69958 2926.8
+1505.69226 6067.0
+1506.69482 4382.6
+1507.70483 1505.3
+1522.70984 10119.9
+1523.71179 8564.6
+1524.71252 3763.2
+1525.71838 1693.8
+1526.71680 827.9
+1534.78015 997.0
+1537.69128 842.9
+1555.80847 2037.2
+1556.80615 2583.5
+1557.81323 1573.1
+1573.81677 9909.3
+1574.81860 9298.5
+1575.82410 3560.1
+1593.74731 31785.5
+1594.74927 28951.6
+1595.75403 14334.3
+1596.75916 5383.1
+1597.75037 1057.7
+1604.74438 1123.8
+1621.77502 2951.7
+1622.77673 2179.4
+1623.75098 1226.8
+1632.81238 1078.8
+1633.83655 747.0
+1662.77039 3077.6
+1663.77271 4659.3
+1664.76086 3418.8
+1667.16602 784.6
+1680.77905 103913.9
+1681.78162 90724.2
+1682.78540 44686.9
+1683.77551 14743.1
+1684.75195 2962.4
+1684.89050 3496.8
+1685.87903 4000.4
+1701.87634 18853.1
+1702.87524 15521.3
+1703.87488 8266.9
+1704.88098 2694.8
+1716.77759 3362.6
+1717.77698 5426.2
+1718.77234 3218.0
+1719.76990 1572.0
+1720.84229 1406.2
+1721.85156 1730.6
+1734.78894 35707.3
+1735.79382 35373.0
+1736.79797 16325.6
+1737.80078 7740.4
+1738.79846 1853.7
+1739.75598 758.7
+1761.85864 1480.8
+1762.84460 1833.1
+1763.77869 1184.8
+1777.78674 2330.2
+1778.78271 6953.1
+1779.78296 5173.1
+1780.79309 1882.4
+1794.89465 834.8
+1795.80420 106531.2
+1796.80725 104651.6
+1797.80994 55795.7
+1798.81238 18622.5
+1799.81335 6641.4
+1800.80847 3078.9
+1812.90686 13265.0
+1813.90247 16664.6
+1814.90100 11899.6
+1815.90149 5130.2
+1816.90784 1926.2
+1830.91541 70710.6
+1831.91797 67839.2
+1832.91968 36252.4
+1833.92798 11285.2
+1834.87097 4470.4
+1835.85754 2937.6
+1836.87720 846.5
+1844.89758 1052.5
+1845.72131 821.7
+1860.92249 1271.3
+1861.89783 1338.4
+1878.82080 1376.6
+1879.15381 2439.9
+1879.50391 19943.2
+1879.82593 1533.6
+1880.90686 921.3
+1882.37146 817.2
+1882.98901 777.2
+1891.86169 880.1
+1892.90063 1073.2
+1907.04993 7434.1
+1908.88794 20201.5
+1909.89124 18914.8
+1910.89575 11894.5
+1911.89990 4185.5
+1912.90686 1874.5
+1916.97192 827.6
+1919.70935 807.4
+1924.96667 1003.6
+1930.62451 1057.1
+1932.93030 1685.5
+1933.92200 1752.6
+1934.96997 1320.3
+1935.93530 1020.1
+1941.95630 3663.1
+1942.95703 7322.8
+1943.96228 6920.8
+1944.97693 3435.1
+1945.96069 1553.5
+1949.97144 1346.2
+1959.97339 34977.0
+1960.97949 44500.8
+1961.98474 30900.3
+1962.98511 14895.7
+1964.00195 3870.9
+1965.00732 1382.0
+1969.68262 952.0
+1973.40137 786.5
+1974.40369 781.9
+1977.98315 145683.5
+1978.98596 143745.4
+1979.98877 83300.1
+1980.99072 34349.7
+1981.99609 11068.5
+1982.58911 929.2
+1983.00146 2997.2
+1983.55139 909.7
+1991.96143 1103.6
+1992.91711 1235.3
+1993.91199 978.2
+1994.92542 864.7
+S	2630	2630	1538.7638246
+Z	5	7688.78
+418.60040 564.8
+482.66577 776.9
+532.54486 1874.2
+552.29547 650.9
+630.41479 744.4
+676.64221 978.2
+683.49475 811.5
+783.63763 629.9
+795.74506 1293.2
+1021.19336 644.1
+1042.17004 654.5
+1057.25293 644.9
+1072.21838 676.6
+1137.55078 603.5
+1198.21570 3537.0
+1463.70642 653.2
+1489.76172 658.3
+1557.02515 552.7
+1769.15027 741.0
+1797.65662 735.2
+1813.80298 630.4
+1831.84033 655.4
+1878.14844 809.0
+1879.19470 3076.2
+1879.52942 19640.4
+1879.86658 2715.0
+1880.20044 927.7
+1880.64514 811.7
+1880.81299 689.0
+1907.06714 7400.9
+1918.92065 723.2
+1930.62012 1170.2
+S	2631	2631	1283.30699127
+Z	2	2564.766
+Z	3	3846.646
+348.42038 1142.9
+350.29333 1563.9
+361.28342 1044.0
+373.20929 13192.3
+380.50650 1117.7
+391.20172 1075.6
+391.40915 1173.1
+392.06241 1093.4
+393.25000 1360.5
+408.22253 1397.1
+410.27911 1949.5
+411.26367 2540.1
+427.22018 17264.5
+428.22461 4273.5
+428.28745 3603.1
+438.27228 12399.1
+439.18021 1633.0
+439.27722 2856.0
+456.28232 8313.6
+457.28561 2341.9
+482.69833 1175.2
+488.23785 1527.8
+497.35449 1016.4
+519.00061 1184.8
+522.25098 2153.7
+522.50330 4186.2
+522.74988 1880.4
+525.30322 2639.4
+526.28589 2588.4
+526.75464 74682.5
+527.00482 79656.8
+527.25531 46579.8
+527.50641 19224.1
+527.75787 6266.6
+532.53284 3343.5
+547.52435 11284.6
+547.77380 12623.2
+548.02539 6571.5
+548.27539 2921.8
+549.20654 1449.7
+551.31781 1530.2
+551.52258 4203.0
+551.77258 5083.1
+552.02240 2675.5
+552.36407 1110.2
+558.51251 1075.1
+567.28119 3242.4
+577.30115 3030.5
+585.28943 68430.8
+586.29224 23930.4
+587.29395 4717.5
+595.31158 4393.4
+596.30981 2358.0
+604.29510 1227.9
+613.31836 3135.0
+624.37543 3367.0
+625.37726 1595.8
+634.25433 1879.7
+638.38440 1127.1
+641.43744 1221.8
+650.38892 2825.6
+654.38678 1050.2
+668.39825 1442.7
+676.64532 2284.2
+690.38147 1308.2
+694.38153 1495.9
+708.39453 4877.9
+709.39948 1834.6
+712.39081 1200.1
+714.34705 5441.9
+715.34656 1906.2
+726.40466 6842.9
+727.41339 3206.5
+731.18335 1436.2
+731.44495 1586.4
+732.35828 59001.8
+733.36139 26123.1
+734.36475 9087.8
+735.36932 1659.5
+737.45227 1899.7
+749.45892 7801.0
+750.46130 5860.0
+751.46283 1463.3
+767.46863 11304.8
+768.47388 4446.8
+769.46979 1705.5
+780.27698 1114.2
+782.37036 1723.7
+793.45563 1682.0
+795.74054 1945.4
+797.31543 1913.2
+807.45868 1399.5
+811.45862 1907.7
+812.45447 1191.5
+825.47748 2470.1
+826.48413 1381.3
+834.42773 1448.8
+835.43896 1545.9
+843.39240 6503.8
+844.40234 2334.1
+852.43750 2793.9
+854.45422 1318.5
+861.40179 22142.5
+862.40527 10648.4
+863.40247 2447.3
+864.48236 4270.8
+865.34137 1000.6
+865.47467 2000.8
+866.45636 2033.6
+871.45728 3129.2
+882.49646 16519.1
+883.50055 5203.0
+884.50464 1752.2
+889.46405 5815.5
+890.46887 2484.1
+893.36365 1375.6
+900.51514 1230.3
+910.52802 1367.8
+924.54224 2737.3
+925.54846 1910.1
+933.51031 3966.1
+934.52393 1567.3
+940.68512 1355.0
+947.50970 1701.0
+951.51660 9425.6
+952.51947 5015.3
+953.52063 1766.9
+957.39923 1325.9
+965.53259 7602.8
+966.53418 4398.3
+967.53955 1751.8
+969.52881 11045.4
+970.53070 6779.2
+971.46075 3349.0
+972.43408 13269.2
+973.43567 6194.8
+974.44580 1895.9
+981.56573 1393.9
+983.54120 4433.0
+984.54486 1732.2
+986.48999 2419.3
+987.49072 1800.8
+988.54181 2651.0
+989.46136 15362.7
+990.46454 6404.8
+991.46313 2927.0
+1004.49646 12535.3
+1005.49780 6168.2
+1006.50360 2774.4
+1009.39398 7540.1
+1010.40405 3509.2
+1014.57050 1343.5
+1015.56097 1688.4
+1030.50281 1542.0
+1032.57605 17287.2
+1033.57898 8864.3
+1034.58484 3511.5
+1044.99512 14481.3
+1045.49341 20694.9
+1045.99365 14283.5
+1046.49878 7361.2
+1047.00232 3831.7
+1050.58655 52351.1
+1050.92969 1019.6
+1050.98901 995.4
+1051.58984 30055.2
+1052.59082 10176.0
+1053.60229 1568.6
+1053.99988 175527.0
+1054.50171 191619.7
+1055.00244 113210.4
+1055.50391 44516.8
+1056.00708 17824.6
+1056.50708 4362.6
+1057.01392 1622.9
+1064.60071 11329.0
+1065.60474 6076.3
+1066.61255 2358.3
+1068.46021 2045.6
+1068.59631 66062.3
+1069.59961 35525.8
+1070.60315 10851.9
+1071.59058 1629.9
+1072.42346 4219.9
+1073.42993 2641.4
+1078.49011 2002.7
+1082.61218 8238.5
+1083.61475 3759.4
+1084.63232 1305.2
+1086.47485 11332.1
+1087.48096 6808.3
+1087.60681 4192.5
+1094.52441 4007.1
+1095.03027 6708.8
+1095.52991 6633.9
+1096.02490 2317.1
+1096.50867 1847.6
+1097.48047 1164.3
+1101.53491 1244.4
+1103.50732 150263.2
+1104.03577 102380.4
+1104.50964 84901.1
+1105.03833 26634.2
+1105.38586 1211.8
+1105.50708 27118.0
+1106.51331 7109.4
+1107.52148 1872.8
+1110.59619 1680.8
+1118.54688 2576.2
+1119.57166 2424.5
+1122.47986 11042.1
+1123.47729 5873.7
+1124.47498 1738.7
+1127.65283 1792.1
+1128.59192 6986.0
+1129.59583 5461.0
+1130.59375 1741.7
+1144.06836 1623.0
+1144.55444 2971.9
+1145.06226 1566.7
+1145.65906 12352.1
+1146.56470 2403.8
+1146.67554 6372.6
+1147.68115 2442.0
+1153.06592 14983.3
+1153.57263 15205.8
+1154.07117 10462.4
+1154.56946 3547.4
+1154.69507 1156.1
+1155.07764 1752.2
+1163.66992 86284.3
+1164.67297 52142.1
+1165.67639 18693.9
+1166.67737 4055.5
+1181.68091 90436.1
+1182.68408 50571.3
+1183.68774 19195.3
+1184.69128 4930.2
+1185.68604 1350.1
+1198.19360 5927.8
+1199.58545 2273.0
+1200.07312 1941.1
+1200.51343 4824.7
+1201.50732 12353.7
+1202.52576 7907.0
+1203.10779 6092.3
+1203.56360 2574.9
+1204.10254 2270.6
+1208.59106 2145.6
+1209.09375 3978.8
+1209.66650 1649.8
+1210.65454 1446.0
+1216.36011 1151.7
+1218.52979 271342.2
+1219.53284 167917.8
+1220.53601 58739.0
+1220.71704 2107.6
+1221.53967 17380.1
+1222.54358 4710.1
+1223.55115 1150.8
+1227.67395 3781.5
+1228.67249 2997.0
+1229.62000 974.2
+1281.63818 4314.4
+1282.13892 10990.3
+1282.64099 12256.1
+1283.14282 11760.9
+1283.64697 6487.3
+1284.14807 3872.4
+1308.57532 5269.1
+1308.72839 4383.7
+1309.57935 4593.5
+1309.72278 4542.3
+1310.57886 1295.1
+1316.75562 2353.7
+1326.73523 58432.9
+1327.73755 41176.1
+1328.74133 15937.7
+1329.73889 3403.4
+1340.59021 1892.2
+1344.74463 88203.6
+1345.74841 58955.8
+1346.75269 23434.3
+1347.75488 6876.0
+1348.57068 5074.9
+1348.73877 2167.7
+1349.56812 3127.8
+1357.63403 4197.4
+1358.62024 5802.1
+1359.61487 3559.7
+1363.58752 5349.5
+1364.57654 11324.0
+1365.57605 6791.4
+1366.57397 4513.3
+1367.56921 1672.3
+1375.64099 11865.4
+1376.64111 8261.4
+1377.13855 1639.4
+1377.64307 3109.2
+1379.92883 1792.9
+1381.59399 425784.3
+1382.59607 306836.6
+1383.59961 130653.0
+1384.26526 2317.5
+1384.60339 37842.2
+1385.60632 8876.2
+1386.12378 1468.0
+1387.08057 1724.3
+1423.61426 4658.4
+1424.61340 3555.2
+1441.75867 6560.3
+1442.76965 7057.5
+1443.77222 2452.5
+1450.62683 1237.2
+1459.77197 67992.6
+1460.77588 49622.9
+1461.77783 18588.9
+1462.77930 5698.4
+1470.64563 1109.2
+1475.70850 2484.6
+1476.66772 6622.9
+1477.65942 11382.8
+1478.65991 6823.6
+1479.65747 2963.5
+1486.68738 1317.1
+1487.68359 4550.5
+1488.65540 4475.1
+1489.65564 2480.1
+1490.60864 1845.4
+1494.67859 408097.1
+1494.92773 1412.7
+1495.68115 313792.7
+1496.68494 136883.1
+1497.68884 41953.8
+1498.68823 11353.8
+1499.68835 3447.1
+1500.80322 2504.6
+1501.77734 1801.4
+1504.69983 7456.3
+1505.69214 11809.7
+1506.69385 6923.3
+1507.69006 3548.1
+1522.70959 20223.9
+1523.71228 14879.5
+1524.71704 5120.3
+1525.71521 1597.1
+1538.83081 1235.4
+1555.81238 4183.0
+1556.80823 4505.2
+1557.80127 2134.7
+1573.81567 20337.1
+1574.81738 16063.1
+1575.82141 7416.0
+1593.74695 63900.4
+1594.74976 56441.1
+1595.75256 25115.1
+1596.76123 8731.4
+1597.76379 3203.9
+1604.76221 2928.3
+1614.73792 1282.9
+1621.77979 6833.2
+1622.79114 3847.4
+1623.79895 3028.8
+1627.22168 1318.4
+1662.76282 5519.9
+1663.75635 8221.9
+1664.75488 4795.4
+1665.75793 2455.9
+1666.85376 2214.8
+1667.80566 2101.1
+1680.77905 196068.4
+1681.78162 169316.0
+1682.78613 82357.9
+1683.77344 25562.3
+1684.86780 7670.6
+1685.86450 6074.6
+1701.87415 32212.1
+1702.87842 30097.2
+1703.88086 13788.3
+1704.88684 5151.4
+1705.84192 1238.8
+1716.77441 7596.8
+1717.77258 11133.8
+1718.77539 6647.6
+1719.77405 2015.7
+1720.86584 2858.5
+1721.86670 4251.8
+1734.78870 73046.3
+1735.79346 68505.0
+1736.79700 33744.0
+1737.80225 12350.3
+1738.80029 3983.1
+1744.82312 2080.2
+1761.86853 2322.1
+1762.84753 3279.0
+1763.83569 1186.4
+1777.79248 4828.9
+1778.77551 12589.9
+1779.78784 8427.5
+1780.78296 4076.6
+1781.76904 1760.1
+1794.89917 2509.1
+1795.80505 215550.1
+1796.80713 186533.8
+1797.80981 93261.3
+1798.81372 36562.6
+1799.81763 9573.5
+1812.90601 22636.7
+1813.90186 29668.0
+1814.90540 20621.4
+1815.90210 9413.1
+1816.88318 3225.7
+1830.91528 134156.2
+1831.91821 122757.6
+1832.92114 61803.0
+1833.92859 20367.8
+1834.88806 7793.4
+1835.86072 4385.6
+1836.76465 1227.6
+1843.87061 1279.1
+1860.90930 1845.7
+1861.91125 2364.9
+1873.09192 1105.2
+1878.94568 2201.9
+1879.21741 2282.1
+1879.55334 34889.1
+1879.94739 2244.4
+1890.86792 1382.8
+1891.87268 2221.4
+1892.89380 1564.8
+1907.10144 12105.3
+1908.89026 37837.3
+1909.89307 35694.8
+1910.89246 21770.3
+1911.89880 8867.2
+1912.90991 3298.9
+1913.87439 1517.3
+1915.96057 1465.6
+1925.98279 1420.6
+1932.91553 3217.6
+1933.94336 3830.5
+1934.94470 1934.5
+1941.96130 6175.8
+1942.96057 15057.5
+1943.97070 12765.7
+1944.98218 4945.2
+1945.97485 2697.0
+1949.96558 2191.1
+1959.97388 69702.9
+1960.97998 89580.5
+1961.98499 53257.7
+1962.98682 26421.4
+1963.99207 8104.7
+1964.98145 1886.1
+1969.70178 1820.7
+1974.42822 2052.7
+1977.98364 277472.0
+1978.98633 289106.3
+1979.99048 147473.9
+1980.99353 59678.7
+1981.99866 17917.8
+1982.99207 4732.1
+1988.30029 1583.1
+1991.93677 1458.6
+1992.92651 3733.2
+1993.90125 1757.0
+1995.96021 1485.9
+S	2633	2633	1282.81099127
+Z	2	2563.774
+Z	3	3845.158
+373.20773 410293.7
+382.78894 78753.9
+427.21817 525292.3
+428.22348 164546.6
+436.46683 94457.7
+438.27094 597126.1
+439.27362 147866.1
+451.80319 100398.6
+456.28159 417059.6
+459.91199 91579.8
+490.90002 84795.7
+521.30280 83183.8
+525.29645 103247.3
+526.28619 135511.0
+526.75281 585728.3
+527.00378 699188.1
+527.25555 376492.0
+527.50372 156117.4
+532.56787 209090.8
+567.27698 163695.8
+573.36115 81776.9
+585.28613 3021387.5
+586.28912 703052.3
+587.28766 93989.8
+595.30878 212255.1
+595.50226 97683.6
+613.32019 187922.6
+624.37122 162473.0
+629.79083 104603.3
+630.45148 86034.0
+650.39020 106009.5
+676.63611 137686.4
+700.15887 77747.0
+708.39868 126884.8
+712.38702 103159.3
+714.34296 159731.8
+726.39813 189691.7
+727.40680 128441.1
+732.35480 2087701.5
+732.45941 125458.5
+733.35931 650818.9
+734.35968 217486.0
+737.45007 106801.0
+749.45520 514842.3
+750.45642 154651.1
+767.46356 302463.1
+768.46442 187347.1
+795.72357 120755.4
+825.47498 104225.6
+843.39441 139712.8
+858.10742 108381.7
+861.39783 596382.1
+862.39496 227298.8
+864.47589 103913.2
+871.44910 122908.9
+882.48840 228613.1
+889.45923 148995.3
+900.50873 92834.3
+915.51025 104806.4
+924.52557 129086.1
+933.51239 110753.6
+951.51044 282887.8
+952.51093 166244.3
+965.52893 261564.5
+966.52820 119323.6
+969.51935 298815.2
+970.52869 149193.8
+971.48584 90672.1
+972.42944 312629.8
+989.45856 388662.7
+990.46143 140949.1
+1004.49457 386162.5
+1005.49878 140517.9
+1010.42255 77482.5
+1021.96014 71185.3
+1031.38831 79214.3
+1032.57043 391288.8
+1033.57764 183395.9
+1044.98889 435840.3
+1045.48962 575910.2
+1045.98547 372360.3
+1046.49792 149574.6
+1046.99634 94085.7
+1050.58289 1050620.8
+1051.58618 665382.2
+1052.58850 165484.5
+1053.99475 3891354.5
+1054.49695 3678423.8
+1054.99805 2251015.3
+1055.49915 701605.8
+1056.00305 325935.3
+1057.22791 115262.6
+1064.59656 266042.0
+1065.59399 99360.3
+1068.59131 848480.0
+1069.59802 328029.6
+1070.59729 157818.8
+1082.59961 142058.2
+1086.46814 134919.5
+1095.02820 210684.0
+1103.49658 2312453.5
+1104.03088 1699911.5
+1104.50500 1229654.0
+1105.03418 343222.2
+1105.50378 411801.6
+1122.47595 146409.4
+1145.65112 226688.9
+1146.66711 127403.9
+1153.06543 177000.5
+1153.56311 179938.5
+1163.66479 1516130.6
+1164.66736 910319.8
+1165.66296 290278.1
+1181.67749 1073323.3
+1182.67871 593553.3
+1183.68982 231055.2
+1194.49670 85167.1
+1198.27026 421059.9
+1201.50037 179072.2
+1202.50598 109853.4
+1203.09497 89208.2
+1203.47021 104690.8
+1218.52478 5028570.5
+1219.52783 3136532.5
+1220.53003 1245422.8
+1221.52917 279489.8
+1227.65881 122169.0
+1228.68042 113435.1
+1281.44312 134427.1
+1282.52087 231480.5
+1308.70959 87110.6
+1326.72668 616613.2
+1327.73279 433885.8
+1328.74341 143236.5
+1344.73706 484394.3
+1345.74500 352851.9
+1363.58142 146108.4
+1364.56543 234521.2
+1365.55017 109663.9
+1375.64539 238036.7
+1381.58813 6501899.5
+1382.59094 4761879.0
+1383.59424 1809017.5
+1384.59680 564657.3
+1385.61621 100487.2
+1441.74353 155273.7
+1442.76782 179481.5
+1459.76819 647035.8
+1460.76941 517932.4
+1461.76538 132657.1
+1477.64758 194869.7
+1494.67273 6529203.0
+1495.67615 4985896.0
+1496.67834 2249312.8
+1497.68127 651710.8
+1498.66272 104026.5
+1503.68384 85234.9
+1505.67639 203718.3
+1506.68176 116266.2
+1522.70288 291216.2
+1523.70752 217244.2
+1524.70471 116765.9
+1573.83179 163198.7
+1574.79504 137147.3
+1593.74084 872554.5
+1594.74731 903493.7
+1595.74292 411538.5
+1596.74695 114947.5
+1680.77222 2134977.0
+1681.77393 1774964.9
+1682.77783 808592.5
+1683.76355 160494.5
+1685.72864 92111.0
+1701.87219 318728.8
+1702.87402 163806.7
+1709.02258 90532.1
+1716.76709 87245.2
+1734.78357 619485.3
+1735.78003 626243.6
+1736.78479 339005.9
+1737.78784 126065.9
+1776.74500 89905.2
+1777.68469 84252.4
+1778.76709 134414.5
+1795.79187 2380123.8
+1796.79980 2088910.9
+1797.80164 1077826.3
+1798.81116 491621.3
+1799.79663 137208.2
+1812.89282 307497.3
+1813.90857 281032.8
+1814.88281 257042.8
+1830.90552 1060694.6
+1831.90576 890865.4
+1832.91760 451497.9
+1833.92505 182058.6
+1870.43958 156789.1
+1878.41113 80039.5
+1879.22595 360503.2
+1879.52307 2615753.5
+1880.16760 115360.3
+1880.61389 131439.7
+1881.63391 83219.5
+1882.12317 88148.3
+1907.07593 926396.5
+1908.89404 378246.3
+1909.88379 421149.3
+1910.88391 303563.1
+1941.98376 117997.4
+1942.96729 161118.5
+1943.94629 170436.5
+1959.95972 882261.1
+1960.97034 1027694.2
+1961.97888 576470.4
+1962.97876 152597.8
+1977.97559 1996457.6
+1978.97974 2132647.3
+1979.98022 1236838.8
+1980.98230 357382.3
+S	2634	2634	1538.9708246
+Z	5	7689.815
+426.46289 2188.2
+450.81079 2262.5
+532.58069 6485.4
+600.61285 3058.5
+676.63489 6255.1
+711.08606 2370.3
+726.76965 2140.5
+754.81537 2574.1
+795.73541 3807.2
+797.94849 2242.0
+800.96515 2426.6
+869.49347 2228.1
+942.74335 2298.6
+1056.60864 2278.7
+1057.23584 2586.9
+1071.17810 2383.2
+1079.36841 2506.5
+1154.83606 2650.7
+1198.30139 12696.1
+1281.50696 5289.0
+1282.46887 2386.5
+1302.71155 2829.4
+1360.61938 2759.3
+1509.68494 2467.9
+1577.00867 2953.1
+1709.49524 5148.4
+1709.82190 3729.4
+1757.30579 2428.5
+1841.53162 2298.5
+1860.04797 2864.5
+1867.24011 2135.7
+1870.49548 4323.6
+1877.36621 2402.3
+1878.13782 2889.8
+1878.35400 4501.0
+1878.70813 3653.6
+1879.51538 75332.2
+1880.64783 2838.6
+1892.81860 2440.3
+1906.85889 3603.6
+1907.10876 26767.3
+S	2635	2635	1538.3704246
+Z	5	7686.813
+427.57315 751.1
+532.54968 2099.1
+534.83057 731.8
+540.21765 731.9
+561.01410 689.1
+586.22516 735.1
+676.63934 1383.8
+731.15918 1028.3
+783.12634 1188.7
+795.74811 1267.6
+1103.41138 867.5
+1140.30737 725.8
+1160.30896 751.1
+1188.15649 818.8
+1198.22864 4198.3
+1226.42627 674.8
+1281.45752 1082.7
+1282.07495 896.7
+1283.00403 925.0
+1490.31543 711.8
+1525.54541 765.8
+1587.44385 926.5
+1777.00916 824.4
+1875.65125 690.9
+1877.51416 921.2
+1877.88037 872.3
+1879.10010 1528.8
+1879.53748 22681.7
+1880.95093 723.2
+1881.06018 723.9
+1882.24695 768.7
+1907.07239 8083.2
+1918.92236 811.5
+1930.69641 1067.5
+1933.56653 866.6
+S	2637	2637	1282.80640793
+Z	3	3845.144
+Z	2	2563.765
+353.42355 96325.7
+361.21683 93952.8
+373.20908 287568.1
+427.21814 315991.5
+432.22238 101257.0
+438.27017 377914.2
+456.28104 256469.8
+526.75281 405249.9
+527.00409 444258.5
+527.25549 244066.5
+532.52960 188247.3
+532.58057 92211.4
+538.64709 96540.8
+585.28625 1675855.0
+586.29059 371233.5
+595.30902 161581.1
+624.36951 156593.6
+669.86365 90022.6
+676.62335 88047.4
+681.44830 114757.9
+726.40479 142390.4
+732.35425 1296735.8
+733.35974 477522.5
+734.36481 117703.2
+749.45392 268967.9
+767.46631 150791.9
+795.73773 123023.4
+861.39539 407526.8
+862.40442 120573.2
+864.48077 106630.8
+882.48914 192551.5
+897.54260 87327.2
+951.51111 209506.7
+965.52557 114835.0
+969.52625 201573.2
+970.54596 99121.3
+973.43701 96029.1
+978.70367 91791.4
+989.45612 151096.2
+990.46051 120427.9
+1004.48743 208748.9
+1009.38623 118136.6
+1032.56763 260666.5
+1033.56238 137022.7
+1044.98999 238992.1
+1045.49146 243507.5
+1045.99194 250733.0
+1050.58533 641404.6
+1051.58752 427868.6
+1052.58398 113347.1
+1053.99561 2306251.0
+1054.49634 2547465.0
+1054.99792 1505642.3
+1055.50159 471456.3
+1064.58411 141369.1
+1065.59888 119738.5
+1068.59009 558514.9
+1069.59167 269404.7
+1103.49902 1171280.1
+1104.03015 1182592.3
+1104.51184 713520.9
+1105.03455 276436.8
+1140.44946 99914.5
+1163.66479 900111.6
+1164.67004 507103.4
+1165.67493 180694.2
+1181.67297 649840.1
+1182.68091 436751.1
+1183.71118 118559.6
+1198.19080 414197.8
+1218.52454 3173746.0
+1219.52710 1911913.9
+1220.52686 670084.9
+1227.63721 119607.4
+1259.31445 91941.1
+1281.93469 110050.9
+1287.22595 141397.2
+1290.32043 119841.4
+1326.72974 442128.1
+1327.73206 225000.7
+1344.73987 233708.7
+1345.73352 166828.3
+1364.58838 102732.9
+1379.61060 100966.5
+1381.58777 4350891.5
+1382.59167 2809587.8
+1383.59521 948626.4
+1384.59692 232464.0
+1459.77197 364344.0
+1460.76904 212055.6
+1461.75427 133292.4
+1477.65051 136852.8
+1494.67273 3793535.8
+1495.67664 2759456.8
+1496.67944 1283676.4
+1497.69531 336094.9
+1522.70520 150285.7
+1523.69971 154130.4
+1593.74084 577296.8
+1594.73743 470525.7
+1595.73962 142930.7
+1680.77014 1450549.5
+1681.77625 914739.8
+1682.77942 388286.5
+1701.87244 181705.6
+1702.84387 127281.5
+1734.78162 401500.0
+1735.78992 336528.8
+1736.79346 173504.6
+1795.79333 1389706.6
+1796.80078 1447208.8
+1797.80359 612494.3
+1812.90857 280935.9
+1813.88733 131723.7
+1814.89893 156665.4
+1830.90771 700295.8
+1831.91162 663560.4
+1832.91431 282557.5
+1862.00916 116702.4
+1877.61804 126429.8
+1878.57666 180650.4
+1879.01099 216466.9
+1879.58862 2532732.0
+1879.90417 773842.9
+1880.24109 240382.2
+1883.36353 107030.1
+1907.13379 1112531.6
+1908.89001 245028.8
+1909.88037 232884.2
+1910.87744 138918.6
+1943.98950 123294.1
+1959.97314 405127.6
+1960.97510 575295.6
+1961.98010 200646.8
+1962.98816 119566.2
+1977.97656 1182970.8
+1978.97913 1231314.9
+1979.98303 616856.7
+1980.98499 144829.2
+S	2638	2638	1538.7646246
+Z	5	7688.784
+480.66623 2582.9
+532.50714 7162.4
+549.18567 3943.9
+630.44269 3425.2
+795.74536 5393.1
+964.82019 2907.0
+989.01978 3058.1
+1198.13818 13486.3
+1282.00781 3659.7
+1770.56580 2601.5
+1832.36072 2669.0
+1875.77881 2709.3
+1878.11743 4461.5
+1878.91077 3341.0
+1879.57288 82285.7
+1881.00342 3205.3
+1881.39832 3561.5
+1907.11670 29601.2
+1930.69141 3042.3
+1995.09741 3029.7
+S	2639	2639	1283.30699127
+Z	2	2564.766
+Z	3	3846.646
+342.29663 60805.1
+356.52676 43952.8
+373.20740 293695.1
+408.75015 42687.0
+411.26465 69790.7
+424.26199 44110.6
+427.21814 377632.7
+428.21982 59806.2
+428.28568 72446.0
+433.10526 46032.0
+438.26978 330639.3
+439.27301 65461.2
+456.28082 259186.8
+457.28433 53980.4
+525.30017 52448.4
+526.75214 303750.4
+527.00366 299034.0
+527.25421 214946.4
+527.50427 72871.9
+529.21918 43903.7
+532.50946 148645.5
+547.77203 59269.5
+549.18091 78283.2
+567.27893 55829.4
+577.29236 51931.3
+585.28656 1555092.5
+586.28992 444954.1
+587.28912 54870.6
+613.31927 96282.0
+624.36749 94507.9
+630.45343 73632.4
+676.64966 73975.5
+701.08722 45844.1
+708.38721 51579.6
+714.34314 93265.7
+726.39960 82032.8
+731.17279 49911.0
+732.35486 1051520.8
+733.35699 383869.3
+749.45428 251771.8
+750.45013 61452.0
+767.46698 183459.8
+768.46448 77381.1
+793.45691 43399.5
+807.44092 45168.0
+825.46075 58604.6
+843.38770 86255.1
+852.43451 50039.6
+854.89899 42072.2
+861.39612 333053.8
+862.39807 105906.1
+864.48962 74480.5
+871.44861 63414.2
+882.48584 176774.4
+883.49054 52217.9
+889.46796 89377.9
+924.11713 56572.4
+933.50269 74437.8
+940.61206 41899.9
+951.50909 177071.0
+952.51752 100350.6
+965.52264 90227.1
+967.51282 50273.5
+969.52356 93600.3
+970.52307 83200.7
+972.42700 139557.6
+973.43372 77728.2
+989.45770 159668.0
+990.45966 83476.5
+1004.49011 137039.2
+1005.49481 79324.4
+1009.39374 57676.1
+1032.57092 212309.8
+1033.56653 82137.2
+1044.99023 292968.9
+1045.49011 318541.9
+1045.98865 190824.0
+1046.49329 186404.7
+1050.15161 49013.4
+1050.58044 560026.8
+1051.46216 57479.5
+1051.58789 310848.4
+1053.99512 1853386.8
+1054.49719 2081651.9
+1054.99841 1104015.4
+1055.49915 550681.4
+1056.00610 170144.5
+1057.25952 59032.2
+1064.59094 154885.4
+1065.61145 92616.5
+1068.59204 555944.8
+1069.59558 266354.0
+1082.61182 66155.6
+1094.52673 63772.5
+1095.02283 93601.6
+1095.52759 96422.9
+1103.49585 1024803.9
+1104.03101 953106.4
+1104.51233 591888.0
+1105.03870 197906.3
+1105.50342 176464.1
+1122.46643 75796.9
+1128.03906 47878.8
+1128.58960 60037.8
+1145.65723 91415.5
+1153.05872 63920.4
+1153.56299 78169.3
+1163.66602 816847.6
+1164.66614 507184.3
+1165.67273 145599.0
+1181.67737 575928.0
+1182.68005 319585.6
+1183.68237 91009.7
+1198.13721 253715.2
+1201.49841 75251.2
+1202.58899 81815.2
+1218.52478 2573064.0
+1219.52734 1534330.6
+1220.53125 525876.1
+1221.53711 98052.5
+1227.65674 59236.8
+1255.11987 51854.5
+1281.49353 71881.3
+1281.97949 112674.8
+1282.50244 57959.7
+1308.45984 54753.0
+1326.73181 325908.4
+1327.72986 215092.0
+1328.74500 80660.5
+1344.73657 258625.7
+1345.74475 174452.0
+1364.58142 96038.4
+1365.60046 61523.5
+1375.62573 110738.0
+1376.62451 50495.1
+1381.58838 3334201.8
+1382.59070 2316173.8
+1383.59424 967310.1
+1384.60095 298937.9
+1423.57703 67862.6
+1459.77112 315681.6
+1460.76270 202659.7
+1461.77551 107304.7
+1477.64673 88569.7
+1494.67297 3134954.8
+1495.67529 2399684.0
+1496.67639 1098502.3
+1497.67993 352828.7
+1498.67090 98289.7
+1504.69202 49149.0
+1505.70764 82421.8
+1522.70081 98694.4
+1523.69897 156053.5
+1525.51672 52386.8
+1573.81604 104785.0
+1593.74048 457118.6
+1594.74597 371287.1
+1595.74487 158079.0
+1621.79492 57866.7
+1680.77246 1078590.1
+1681.77405 1038971.8
+1682.78198 417209.1
+1683.75940 106359.8
+1701.85669 107750.4
+1702.87109 155659.4
+1734.78174 317830.8
+1735.77722 259170.5
+1736.78833 163661.2
+1750.24878 42422.8
+1778.78198 76837.8
+1780.79175 49516.9
+1795.79663 1215868.0
+1796.80164 1043581.4
+1797.80115 507855.8
+1798.79395 187830.6
+1812.88977 122314.5
+1813.89746 186420.9
+1814.87683 118213.7
+1830.90649 598196.9
+1831.90918 454332.5
+1832.91235 276270.2
+1833.85950 87521.6
+1878.61572 98048.7
+1879.29395 269457.4
+1879.55786 1379117.6
+1880.46899 53243.4
+1880.68799 55868.9
+1907.11157 502860.6
+1908.88147 150456.2
+1909.88647 219788.9
+1910.87158 105537.2
+1911.89856 53604.0
+1930.72131 56282.1
+1942.92285 101077.9
+1943.98792 58993.7
+1953.45776 50521.0
+1959.96497 386339.3
+1960.97107 494733.8
+1961.97424 314054.0
+1962.98999 136052.3
+1969.10620 52499.8
+1977.97571 1153141.0
+1978.98108 1161059.8
+1979.98071 547118.2
+1980.99182 243823.7
+1981.95752 61375.2
+S	2641	2641	1282.81240793
+Z	3	3845.162
+Z	2	2563.777
+365.92331 103659.9
+373.20731 337507.4
+381.42142 108172.1
+404.05334 94013.5
+427.21802 665009.8
+428.22202 148991.3
+431.01907 89761.5
+438.27109 585411.2
+444.44870 87578.3
+456.28088 312571.6
+488.23257 110013.9
+507.43457 85206.9
+511.90234 105041.5
+526.75287 541524.3
+527.00299 563440.1
+527.25323 313126.8
+527.50366 202197.1
+532.54596 244514.9
+549.22791 109092.2
+567.27875 132891.2
+569.36896 97992.1
+585.28625 2575379.3
+586.28918 620895.1
+587.28870 142361.2
+595.30707 292540.6
+630.49115 109316.3
+643.31299 131325.3
+676.65570 166281.5
+692.51031 101708.7
+714.34558 129934.1
+726.39935 145553.8
+732.35516 1743419.8
+733.35858 773986.9
+734.36023 146445.7
+749.45532 514871.3
+750.45941 189994.6
+767.46564 253017.5
+795.75244 174683.5
+797.30853 126052.4
+843.38715 125291.0
+861.39581 494016.5
+862.40167 265850.2
+864.47662 136150.0
+880.60620 96928.0
+882.49066 151313.6
+889.46454 226857.6
+951.51526 313935.9
+965.52307 210642.8
+966.51678 140605.0
+969.53394 188241.6
+970.51691 133990.1
+972.42487 210689.0
+989.45148 209480.2
+990.45447 151264.6
+1004.48682 273260.2
+1010.39429 137265.7
+1023.59412 113122.1
+1032.56824 391679.7
+1033.57605 197282.5
+1044.98694 466039.9
+1045.48669 509314.1
+1045.99231 478375.7
+1046.50073 131606.6
+1050.58203 1133363.6
+1051.58398 537629.9
+1053.99426 3488877.8
+1054.49670 3831757.0
+1054.99841 2246795.3
+1055.50073 730000.3
+1055.99866 275513.3
+1064.59521 366766.3
+1068.58972 697404.9
+1069.59045 358247.6
+1070.59631 130845.9
+1082.60901 151534.8
+1103.49622 1989722.8
+1104.02869 1551930.4
+1104.50208 1250646.0
+1105.03455 408556.8
+1105.49841 254904.0
+1145.65552 237435.4
+1153.54492 158743.5
+1163.66589 1214552.8
+1164.66443 957263.7
+1165.67261 156410.3
+1181.67786 987218.7
+1182.67676 670508.6
+1183.68555 190355.6
+1198.22131 535576.9
+1201.50537 113238.7
+1218.52417 4576956.0
+1219.52734 2886605.5
+1220.53125 1022067.1
+1221.53821 186725.3
+1227.66309 159495.7
+1282.04443 112927.7
+1282.50940 202482.0
+1319.14026 98294.4
+1326.73291 510725.6
+1327.72742 398156.4
+1328.74207 124322.6
+1344.73242 431583.5
+1345.74121 266277.8
+1363.55579 128877.6
+1375.62573 204230.1
+1381.58862 5801870.5
+1382.59155 4230509.5
+1383.59473 1681466.5
+1384.59937 392071.4
+1441.74658 130720.6
+1459.76575 564655.8
+1460.77002 463928.3
+1477.65088 166012.5
+1478.65442 171711.8
+1494.67297 5679111.5
+1495.67639 4681766.5
+1496.67847 1662933.9
+1497.68921 547594.8
+1505.66357 142614.5
+1506.63892 156689.9
+1522.69727 280271.6
+1523.71680 272491.5
+1524.71619 163378.9
+1525.63013 111557.4
+1555.81726 136819.4
+1573.80212 254688.7
+1574.79736 138961.4
+1593.74280 770663.1
+1594.73987 633682.5
+1662.75623 122255.9
+1680.77258 1762743.1
+1681.77429 1661628.0
+1682.78601 757071.4
+1683.76855 189954.0
+1701.86523 414331.6
+1702.88354 199450.6
+1709.33618 102289.9
+1709.67517 122969.7
+1734.78210 535674.5
+1735.78906 435341.8
+1736.78162 231882.3
+1737.80078 136138.0
+1776.89929 97491.4
+1795.79822 2014829.9
+1796.80261 1759225.6
+1797.80127 994373.8
+1798.80554 394717.0
+1812.88123 218641.8
+1813.89209 398304.8
+1814.88086 202585.5
+1830.90833 1073373.9
+1831.90698 1029429.0
+1832.91797 460167.8
+1834.88672 119150.3
+1879.27844 950819.4
+1879.56506 2918007.5
+1880.30688 110751.1
+1881.68835 145604.5
+1881.92627 87281.2
+1907.10059 1138572.9
+1908.88806 358038.1
+1909.89209 330840.3
+1910.85852 149136.9
+1918.91516 108873.2
+1933.00854 105946.6
+1942.96741 170587.1
+1943.93933 123565.9
+1959.95752 736736.0
+1960.96875 826950.3
+1961.98950 577385.9
+1962.98499 215304.6
+1977.97473 1715950.8
+1978.97900 1916045.6
+1979.98169 939060.4
+1980.98340 334092.1
+S	2642	2642	1538.7736246
+Z	5	7688.829
+427.57788 761.3
+490.81506 565.7
+532.58044 1958.2
+549.19867 961.6
+557.44012 685.0
+559.80255 595.7
+612.14398 689.0
+694.24487 587.0
+755.06885 638.7
+756.46722 641.7
+762.06244 608.1
+780.82977 624.1
+795.74268 1276.1
+917.02209 651.7
+1032.88477 629.7
+1046.66382 597.3
+1057.18787 1008.6
+1080.37488 620.9
+1198.30249 3165.1
+1281.53491 1271.8
+1282.48425 1923.3
+1306.90173 816.5
+1370.35815 604.4
+1525.52991 872.2
+1526.12085 712.5
+1626.38367 665.0
+1717.05591 1590.1
+1872.38403 602.7
+1872.66260 775.9
+1879.43665 20793.0
+1886.52710 607.9
+1907.09180 7523.3
+1918.93201 765.4
+1930.72192 833.9
+S	2643	2643	1539.3746246
+Z	5	7691.834
+466.36508 703.7
+532.57819 1960.0
+605.62592 576.3
+606.52777 554.4
+676.62299 1018.7
+775.27960 576.7
+782.17932 692.4
+795.74445 860.3
+828.76678 590.6
+834.15717 732.6
+999.06091 589.5
+1023.74152 603.9
+1030.98401 670.0
+1057.22046 902.6
+1198.29895 3110.2
+1281.49060 793.5
+1348.13013 767.0
+1525.51941 899.1
+1536.53186 634.4
+1541.05811 663.8
+1586.20264 619.2
+1718.71875 1571.9
+1879.23999 2139.4
+1879.49536 20313.0
+1879.87903 1546.9
+1907.03735 7440.9
+1907.29736 1076.6
+1997.53247 795.2
+S	2645	2645	841.666407933
+Z	3	2521.724
+Z	2	1681.485
+266.48657 14776.9
+271.57877 19156.2
+301.49231 14506.9
+307.83994 13867.1
+327.65186 13354.4
+333.17535 33828.6
+369.25034 15760.7
+403.81421 13870.0
+420.20728 95788.5
+428.77390 15860.5
+436.47250 13396.4
+455.66302 17322.9
+464.89313 14738.2
+468.20703 18409.5
+471.22037 17343.0
+504.22736 16789.6
+507.23920 249463.1
+508.24356 36699.2
+529.17969 15585.4
+532.56519 42460.2
+543.85217 15263.9
+549.15472 19993.9
+558.25153 43415.9
+567.32129 14951.3
+572.99744 14692.8
+576.25421 26074.7
+581.29279 52585.3
+594.27130 741555.9
+595.27393 160564.4
+596.27686 20101.5
+599.30243 46410.9
+617.31396 31465.1
+678.84491 17916.9
+689.34778 27323.3
+707.35474 360234.1
+708.35864 79247.9
+710.32837 16994.9
+722.31482 17104.2
+728.34229 55239.1
+729.35413 18875.5
+731.11304 17395.1
+731.84735 33706.0
+732.34961 20910.4
+740.85315 38202.5
+741.35577 26205.3
+741.52679 18860.0
+746.35608 42243.3
+767.06311 16607.1
+774.34338 21739.3
+795.75403 27191.4
+800.17700 13679.9
+806.42401 151354.7
+807.42676 59187.4
+813.89600 29486.4
+814.40289 18192.3
+822.90259 72106.8
+823.40106 69060.0
+823.91583 23030.3
+825.19543 16677.1
+846.09180 16635.7
+857.38922 52203.1
+875.41290 18731.4
+887.43005 19198.6
+897.41699 15252.1
+903.44489 26147.4
+905.56354 14020.4
+918.46234 18082.4
+930.28143 14892.4
+935.46796 208463.9
+936.46545 79952.0
+938.44208 23684.7
+939.44952 19414.2
+956.45526 184324.2
+957.45990 82104.2
+974.46545 130761.4
+975.47040 66586.5
+995.84546 13381.4
+1019.31262 16167.1
+1064.50867 329159.8
+1065.51123 123488.8
+1066.51111 37962.5
+1069.53955 229363.9
+1070.54272 85444.7
+1071.54834 30612.2
+1087.54834 185349.0
+1088.55005 116141.0
+1089.54932 23008.7
+1153.57104 13794.0
+1156.57190 71621.1
+1157.57227 49005.1
+1174.57971 93109.5
+1175.58655 46578.5
+1177.59241 84077.3
+1178.59082 44626.3
+1198.27075 79075.7
+1243.60815 43699.0
+1244.59021 23651.9
+1261.63501 17914.8
+1278.65613 45785.0
+1279.64038 22833.4
+1282.49426 18106.5
+1330.62842 32103.5
+1393.66199 31612.5
+1394.67969 24757.0
+1480.68469 48218.5
+1481.70300 28332.9
+1516.69592 18632.6
+1534.70850 41279.3
+1535.70801 23578.6
+1719.03967 35223.9
+1868.37976 16752.9
+1874.51599 18873.9
+1878.33215 23054.4
+1878.88391 29730.6
+1879.40869 149392.3
+1879.66296 417858.0
+1880.05652 98813.9
+1880.53479 54332.1
+1882.43445 18335.7
+1907.04431 167379.1
+1988.80237 17416.1
+S	2646	2646	842.168991267
+Z	3	2523.232
+Z	2	1682.49
+220.92331 574.1
+227.19884 596.0
+228.99397 517.3
+249.85359 599.2
+260.31021 694.1
+261.80258 714.1
+291.48294 578.7
+303.05453 684.8
+318.05185 681.5
+333.17639 5171.9
+368.92554 588.3
+369.22415 2978.6
+385.17114 1251.7
+402.20059 738.7
+403.18195 960.5
+420.10672 600.8
+420.20847 11512.3
+421.21176 1652.0
+451.18234 2324.7
+454.19467 895.4
+468.20700 3397.6
+469.19489 897.2
+471.22195 1351.5
+482.67194 729.7
+486.21869 2960.2
+489.22772 1063.0
+489.80338 749.7
+503.75287 644.5
+504.22845 3221.0
+507.23962 30384.0
+508.24313 4864.1
+526.59760 635.4
+532.57538 2263.5
+536.26874 802.0
+541.22351 2148.4
+558.25043 6136.3
+559.25232 819.3
+564.26477 1044.6
+576.25989 5111.1
+577.28851 1463.8
+577.79767 1705.1
+578.30164 885.7
+581.29187 8560.6
+581.76190 661.7
+582.29358 1626.9
+590.68182 603.1
+594.27167 104567.0
+595.27448 20859.4
+596.27783 2055.1
+599.30212 7966.6
+600.30658 1249.2
+617.31274 6132.8
+618.31689 1533.7
+624.71045 627.0
+630.42578 964.0
+630.81647 890.5
+632.21545 759.8
+633.48218 822.7
+644.90753 854.4
+663.34137 1141.1
+674.12500 637.0
+676.70270 704.3
+682.36823 2256.5
+682.87201 1911.3
+683.37292 1176.3
+689.34460 2463.4
+690.34985 864.3
+699.35968 1019.2
+707.35547 49110.9
+708.35883 12833.8
+709.35986 846.5
+710.33258 1940.6
+722.84497 1690.0
+725.88098 870.9
+728.34467 8545.6
+729.34930 2005.2
+731.84790 6702.2
+732.34814 4849.3
+732.85138 1562.7
+733.30957 625.8
+736.39392 722.2
+740.85480 4160.3
+741.35193 2251.0
+746.35535 6232.2
+747.35492 1349.0
+754.39111 745.0
+756.34241 1628.4
+774.35321 1558.9
+776.43103 1935.9
+777.42706 782.5
+782.42285 2047.8
+782.92737 2243.1
+783.42596 1512.7
+788.40894 844.0
+795.73505 1082.1
+806.42365 25234.8
+807.42688 7341.0
+808.43402 804.3
+813.89709 4562.5
+814.39624 3430.3
+822.89905 10309.9
+823.40192 6622.7
+849.06201 666.4
+857.38483 6724.7
+858.39105 2116.5
+869.42603 2053.4
+875.39630 4287.9
+876.39545 952.7
+878.45294 842.2
+887.43188 4206.9
+888.44391 1820.1
+900.42993 631.1
+903.44879 8866.1
+904.45227 4357.9
+905.44995 1572.8
+917.45715 2102.8
+929.46875 715.6
+935.46655 29388.9
+936.46790 9737.9
+938.44281 4043.1
+939.44861 1399.9
+946.45905 840.9
+956.45514 28102.3
+957.45886 10286.0
+958.45654 1375.5
+974.46643 17450.3
+975.46783 6704.9
+997.57635 652.6
+1016.52905 3287.0
+1017.53290 1932.8
+1018.54260 1070.6
+1025.47546 907.0
+1042.53186 925.1
+1043.47656 1282.8
+1046.49438 3167.2
+1047.50073 1528.0
+1051.52649 4705.5
+1052.52197 1228.1
+1059.56470 965.2
+1064.50830 41760.0
+1065.51123 18536.7
+1066.51038 2835.9
+1069.53894 31899.4
+1070.54187 14188.8
+1071.55225 1026.4
+1079.87329 678.2
+1087.54956 30451.6
+1088.55298 11829.5
+1089.55664 2027.9
+1115.62634 642.2
+1120.53259 793.9
+1130.50659 1600.7
+1138.56335 2406.9
+1139.55884 1267.0
+1153.59338 1975.0
+1154.59338 1304.3
+1155.60913 752.5
+1156.57117 10586.0
+1157.57263 5216.6
+1158.58923 827.5
+1159.57617 822.6
+1174.58057 13019.3
+1175.58484 5882.7
+1176.58484 963.0
+1177.59204 13256.3
+1178.59619 6197.1
+1179.60352 1056.9
+1198.29163 3736.3
+1225.58813 1561.5
+1226.58130 1326.5
+1243.60352 6215.9
+1244.60742 3044.5
+1261.61902 3280.3
+1262.61731 1302.0
+1278.63770 4939.6
+1279.63940 3086.3
+1280.69885 813.5
+1282.03540 1046.3
+1310.65894 1409.4
+1311.66846 920.9
+1312.61951 2554.1
+1313.64014 1033.3
+1330.63342 4651.6
+1331.64258 2101.5
+1348.64673 1849.8
+1364.32605 668.1
+1375.66357 765.6
+1387.65356 1153.1
+1393.66931 3809.1
+1394.66492 2515.5
+1462.67920 1809.9
+1463.67297 874.4
+1480.69568 8585.4
+1481.69702 4595.6
+1482.71826 1320.3
+1516.69299 1210.3
+1517.71265 1153.0
+1534.70886 5515.7
+1535.70911 2900.9
+1554.83081 747.2
+1718.25000 2019.3
+1878.19128 1033.8
+1879.27527 4166.6
+1879.46790 2309.3
+1879.71936 17342.0
+1880.25537 3555.1
+1880.77698 774.5
+1881.36670 860.6
+1881.81311 779.1
+1903.72937 840.0
+1906.98010 7265.9
+1907.47278 817.5
+1909.43555 742.9
+1930.64966 803.0
+1964.93567 690.9
+S	2647	2647	636.8828246
+Z	3	1907.373
+Z	2	1271.918
+165.76047 57648.1
+188.25075 44718.4
+188.26497 98619.7
+188.27454 103266.7
+188.28220 101865.1
+188.29176 84976.8
+188.29918 94133.1
+188.30775 90160.5
+188.32439 88334.6
+197.79298 45485.3
+199.21185 61048.5
+199.22499 70168.8
+199.31001 217856.9
+199.32143 93584.8
+199.40729 56310.8
+199.41005 58874.4
+201.12292 174408.5
+218.18365 48038.8
+230.02551 52780.4
+233.59628 49471.2
+255.31953 66168.8
+272.09760 56014.5
+295.53616 57972.7
+297.37329 60756.6
+341.50620 54761.6
+344.14444 269144.0
+345.26151 67696.1
+369.22382 380869.2
+381.39722 65179.1
+427.58585 74375.0
+429.23093 74060.4
+448.49637 50718.9
+448.56812 63434.4
+457.22818 148363.0
+482.30463 97588.4
+532.57684 168920.7
+541.87787 50725.6
+544.25977 211535.3
+656.65295 51975.4
+676.66864 65536.2
+682.36676 600716.5
+682.86792 471763.1
+683.36627 146479.5
+725.88300 1077746.5
+726.38391 1032321.6
+726.88422 362389.2
+727.38617 163707.0
+769.88391 222947.6
+770.38580 156818.3
+782.42346 363787.9
+782.92963 297368.6
+783.42657 89082.1
+830.93243 91736.0
+831.43005 52956.6
+831.93750 68394.6
+838.49225 55558.6
+839.93805 2144698.3
+840.43939 1913265.8
+840.93994 1006311.1
+841.44281 414324.8
+887.44611 56892.5
+916.82117 52107.2
+1001.24048 62036.9
+1140.33081 88232.1
+1198.28674 305233.5
+1206.40710 55341.5
+1282.50366 88772.1
+1718.04077 103248.5
+1730.51880 49705.3
+1734.29688 50687.0
+1766.67322 67839.6
+1873.51099 134910.6
+1876.40039 50745.6
+1878.29895 73128.4
+1878.93103 173229.6
+1879.61072 1538697.6
+1879.88367 241814.0
+1880.24609 263715.3
+1880.69409 69664.0
+1907.04675 582233.9
+1930.78918 94814.9
+S	2649	2649	1282.80899127
+Z	3	3845.152
+Z	2	2563.77
+372.96362 1165.6
+373.20850 10780.7
+393.25204 1478.0
+402.35834 977.8
+410.27744 1844.6
+411.26526 1066.2
+427.21967 14487.5
+427.56076 1286.0
+428.22336 3881.3
+428.28891 2089.1
+429.28946 1282.6
+438.27182 10485.6
+439.17892 1220.2
+439.27664 2381.4
+456.28278 8083.2
+457.28790 2009.8
+502.74466 1183.6
+513.82697 1055.2
+522.25037 2360.8
+522.50140 2941.0
+522.74646 1791.1
+525.30249 1753.9
+526.28571 2270.9
+526.75378 54786.0
+527.00433 58944.5
+527.25470 35345.1
+527.50586 14369.8
+527.75751 4748.7
+528.00720 1253.4
+532.58875 3027.4
+547.52313 8911.1
+547.77374 9641.5
+548.02411 5616.8
+548.27295 2304.7
+551.34717 1892.0
+551.52362 3216.8
+551.77399 3888.6
+552.02246 2083.4
+567.27936 2999.7
+567.32684 1154.0
+568.28180 1049.9
+568.63165 938.3
+577.29987 2238.2
+585.28851 68480.2
+586.29144 20950.5
+587.29242 5538.3
+595.30951 5241.1
+596.31445 1991.3
+604.55359 1252.2
+604.80981 1182.7
+613.31793 2316.2
+614.32599 1430.5
+624.37280 4039.6
+625.37964 1305.3
+630.42865 1365.6
+634.24835 1499.8
+641.93689 1059.9
+650.38733 3402.1
+654.36340 1285.4
+668.39990 1076.5
+669.40826 1464.7
+676.66095 1922.7
+690.38733 1279.9
+698.40961 1418.3
+708.39606 3901.8
+712.39038 1757.9
+714.35052 4356.2
+715.35083 2582.6
+715.94800 1113.6
+726.40350 5553.7
+727.40637 1895.8
+731.44958 1653.4
+732.35669 51945.8
+733.36053 26031.1
+734.36243 6791.6
+735.36566 2173.1
+737.45453 1208.0
+749.45740 8792.4
+750.46069 4497.6
+753.38251 1268.2
+766.42657 1388.9
+767.46655 6868.6
+768.47101 3392.4
+769.45966 1706.6
+793.45746 1461.0
+811.45917 1449.8
+825.47211 2853.4
+833.67023 1120.6
+843.39258 4952.3
+844.39734 3155.9
+846.32379 1532.4
+852.44122 1859.5
+853.44934 1796.3
+861.40015 16819.5
+862.40247 8276.4
+863.40381 2370.0
+864.49139 2646.1
+866.45288 1867.3
+871.45258 3823.9
+872.46387 1229.0
+882.49530 13895.0
+883.49628 5396.2
+889.46979 5094.5
+890.46887 2013.9
+893.37988 1279.1
+900.53308 1128.8
+910.39301 1241.4
+924.54938 1965.4
+934.51001 1716.5
+951.51691 6961.3
+952.51581 4697.0
+953.52094 1361.6
+965.52795 5981.3
+966.53467 3883.3
+969.52625 9892.1
+970.53009 5650.8
+971.45325 3247.9
+972.43274 8233.4
+973.43903 5964.3
+983.54352 2887.3
+986.47418 1599.9
+988.53552 2159.8
+989.46130 12509.4
+990.46368 5484.3
+991.46344 1656.9
+1004.49615 9681.2
+1005.49988 6048.5
+1009.39484 4744.1
+1010.39746 2316.6
+1021.21429 1526.5
+1023.59985 1774.2
+1032.57397 10868.7
+1033.57434 5501.5
+1044.99365 12725.0
+1045.49304 13252.5
+1045.99451 13432.3
+1046.50244 3386.6
+1046.99341 1933.7
+1050.58496 42902.9
+1051.58813 19682.9
+1052.58960 6382.3
+1053.59717 1984.0
+1053.99817 138968.6
+1054.50049 138032.0
+1055.00146 68246.6
+1055.50208 31369.0
+1056.00403 12109.1
+1056.51099 3749.2
+1064.60071 10132.0
+1065.60291 5895.7
+1066.59924 1963.0
+1068.59473 47657.1
+1069.59839 25763.7
+1070.60168 8133.6
+1072.41870 3593.1
+1073.42542 1858.5
+1080.19299 1126.5
+1082.60999 5310.3
+1083.61499 2404.5
+1084.60938 1189.2
+1086.48120 8178.4
+1087.48315 3055.2
+1087.60706 1755.9
+1088.47656 2169.3
+1094.52295 4820.2
+1095.02527 5458.7
+1095.53503 2487.9
+1096.02612 3100.4
+1103.50403 113045.1
+1104.03381 64887.9
+1104.50830 61176.2
+1105.03870 16231.2
+1105.50732 19554.5
+1106.51135 5223.0
+1118.53931 2023.2
+1122.47571 8155.3
+1123.47778 4574.1
+1128.58984 5600.5
+1129.59778 3084.8
+1144.55627 2104.1
+1145.65723 8129.1
+1146.67651 3116.8
+1147.69495 1495.7
+1153.06702 7766.8
+1153.56958 9562.2
+1154.07031 4385.2
+1154.57068 1992.6
+1163.66833 61080.1
+1164.67090 35584.7
+1165.67786 11314.1
+1166.68103 2810.4
+1181.68005 75557.0
+1182.68201 42611.7
+1183.68628 13755.0
+1184.68652 2461.1
+1198.31836 5795.9
+1199.60229 1208.9
+1200.51221 2658.4
+1201.50525 8777.4
+1202.54675 6390.1
+1203.10242 5086.3
+1203.57410 1948.7
+1208.58435 3238.0
+1209.08118 2936.0
+1209.57605 2050.8
+1218.52820 220390.6
+1219.53088 128605.8
+1220.53503 45440.0
+1221.53857 14424.8
+1222.53186 3295.9
+1227.66138 4717.3
+1228.66760 2999.1
+1229.60437 2105.7
+1282.02295 1454.4
+1282.16382 1047.1
+1308.57776 4253.7
+1308.71863 4874.1
+1309.72278 3525.0
+1316.75720 1578.9
+1326.73242 42778.9
+1327.73596 27844.6
+1328.74133 11132.4
+1329.74231 3445.8
+1331.54175 1513.0
+1341.59253 1372.4
+1344.74316 68162.5
+1345.74646 42250.4
+1345.91638 1044.3
+1346.75195 16242.8
+1347.74902 2918.9
+1348.55920 2938.7
+1349.56494 1949.3
+1357.62378 3162.6
+1358.61987 3129.1
+1359.61694 1713.6
+1363.57727 5521.9
+1364.57373 8973.6
+1365.57532 3434.8
+1366.57385 3003.3
+1367.59216 1190.3
+1375.64392 7722.1
+1376.64233 5430.6
+1377.65259 2584.7
+1381.59192 328662.2
+1382.59424 230029.6
+1383.59753 92356.6
+1384.25134 1381.0
+1384.60181 26838.7
+1385.60645 7941.7
+1387.05945 2215.3
+1423.60303 3027.9
+1424.61279 2011.5
+1441.76001 6082.4
+1442.76172 3366.2
+1443.76819 2649.6
+1453.55713 1327.2
+1459.77075 55131.8
+1460.77393 36427.8
+1461.77917 15423.3
+1462.77478 4057.8
+1474.70813 2407.7
+1475.72595 1707.5
+1476.65771 4025.3
+1477.65588 7951.8
+1478.66345 7025.5
+1479.65527 2212.9
+1487.67395 3554.8
+1488.64221 3226.1
+1489.64697 3214.5
+1494.67676 317755.4
+1495.67957 239223.9
+1496.68274 113827.1
+1497.68347 38993.7
+1498.68945 9633.7
+1499.69226 1968.7
+1500.78894 1607.6
+1501.76965 1595.0
+1504.21179 1214.6
+1504.69800 5506.2
+1505.68542 8121.4
+1506.69299 4843.0
+1507.69165 2702.2
+1522.71021 15205.1
+1523.70825 11948.7
+1524.71252 5535.6
+1525.48669 1453.6
+1555.79968 3682.7
+1556.80493 3796.8
+1557.80396 1457.5
+1573.81055 15799.3
+1574.81702 11226.2
+1575.82690 5067.8
+1593.74487 48380.9
+1594.74817 42756.5
+1595.75195 19414.0
+1596.75403 7862.0
+1597.74072 3123.5
+1603.77576 1496.1
+1604.75989 1920.4
+1621.77869 2946.2
+1622.77441 2111.8
+1623.75281 1807.0
+1662.76587 3509.0
+1663.76379 6413.6
+1664.76343 3739.5
+1666.82935 1767.9
+1674.49548 1438.5
+1680.77734 145701.5
+1681.77954 125887.4
+1682.78381 67188.1
+1683.77490 18723.7
+1684.88342 5781.6
+1685.86487 4199.8
+1686.87671 2369.6
+1701.87427 24677.6
+1702.87280 23137.4
+1703.87732 8964.9
+1704.88342 2831.2
+1716.77209 6224.8
+1717.77136 6259.8
+1718.76965 4319.6
+1719.76111 1412.0
+1720.85742 1759.9
+1721.86584 3136.2
+1734.78662 51929.2
+1735.79138 45076.1
+1736.79297 27334.5
+1737.79810 10031.3
+1738.78625 3064.3
+1762.83997 2045.2
+1763.83521 1319.0
+1777.78357 4358.4
+1778.77844 6799.9
+1779.78052 8902.4
+1780.80798 2049.8
+1794.89624 2169.0
+1795.80176 163029.0
+1796.80554 145579.5
+1797.80786 70452.1
+1798.81335 28994.3
+1799.81421 10158.2
+1800.81177 2085.0
+1812.90491 14759.8
+1813.90027 23544.7
+1814.89868 14176.2
+1815.90442 6526.0
+1816.90686 1611.6
+1830.91272 109746.4
+1831.91577 95977.6
+1832.91809 48050.8
+1833.92651 14801.3
+1834.87585 7688.2
+1835.89172 2783.8
+1836.87463 1896.8
+1861.89673 1952.7
+1862.90637 1738.9
+1872.08545 1588.3
+1878.92725 3278.1
+1879.21313 2666.6
+1879.59985 33018.9
+1880.20483 2365.7
+1880.93042 2010.2
+1881.62170 1518.1
+1891.86682 1268.0
+1892.90906 1202.0
+1907.05811 12584.2
+1908.88599 26613.1
+1909.88867 25855.5
+1910.88977 15917.5
+1911.88562 7763.3
+1912.90906 1443.8
+1918.93945 1163.6
+1930.68811 2324.2
+1932.93799 2282.9
+1933.93335 2746.4
+1941.97949 4276.9
+1942.95923 10795.8
+1943.96704 7405.3
+1944.96606 3015.4
+1950.96484 1338.0
+1959.96985 54086.8
+1960.98022 63146.4
+1961.98193 38421.0
+1962.98242 18839.3
+1963.98816 6494.0
+1964.97913 2885.4
+1968.73511 1484.3
+1969.72266 2289.2
+1977.98096 220215.4
+1978.98389 219904.1
+1979.98755 112727.0
+1980.99048 46774.6
+1981.99548 16432.9
+1982.99731 4063.2
+1992.94775 1631.0
+S	2650	2650	1538.7686246
+Z	5	7688.804
+412.86960 725.2
+427.52875 638.4
+427.57126 841.3
+432.10538 612.4
+442.69727 598.2
+504.31998 664.0
+532.58618 2266.8
+558.60687 626.1
+584.03363 595.7
+586.90460 597.5
+594.77869 576.5
+648.93744 555.3
+676.68347 865.4
+696.04486 693.0
+757.42456 582.1
+766.05011 623.5
+795.74512 1086.8
+1019.70233 756.6
+1020.82751 691.2
+1079.69128 730.6
+1168.84070 688.0
+1187.85791 671.5
+1198.30774 3432.1
+1282.47400 800.0
+1334.83826 708.6
+1644.31714 631.6
+1716.10559 741.0
+1734.11682 640.8
+1800.52576 772.5
+1846.25574 673.5
+1871.36731 1102.0
+1873.14783 814.3
+1878.79297 762.7
+1879.35901 4685.9
+1879.66125 18757.8
+1880.49365 1292.9
+1906.83264 1291.9
+1907.15076 7488.7
+S	2651	2651	1539.3694246
+Z	5	7691.808
+414.26614 4323.0
+436.46951 4489.9
+491.99173 4744.9
+492.14252 4392.3
+532.56915 14708.9
+566.82983 4153.2
+585.28680 7664.9
+630.95520 4453.8
+638.11780 4576.3
+640.82617 10848.5
+641.07410 8388.2
+676.66553 5095.3
+676.84155 5829.6
+732.36151 5591.7
+741.40613 4130.3
+795.73010 7987.8
+1029.96033 4556.8
+1053.99023 9422.7
+1054.50647 8880.8
+1187.85950 6320.2
+1198.27698 25867.1
+1218.52173 9524.1
+1237.08777 4496.4
+1273.62256 6433.0
+1281.63293 415402.3
+1282.13354 631202.5
+1282.48206 9683.3
+1282.63574 516733.3
+1283.13623 278780.6
+1283.63892 115867.5
+1284.13977 40619.1
+1284.63428 18562.3
+1287.02698 5168.2
+1321.58118 4721.3
+1381.59106 10191.0
+1382.59509 11175.2
+1383.58838 4909.7
+1494.66870 10920.5
+1495.68323 7673.3
+1678.51892 6497.2
+1694.77087 5472.7
+1699.31372 3960.0
+1700.36731 5542.5
+1701.47583 10821.4
+1701.74670 16433.0
+1702.06726 17435.9
+1702.38867 15061.7
+1702.69141 13718.6
+1703.03650 16472.4
+1703.34473 10870.4
+1703.65906 6827.0
+1704.02222 7219.5
+1705.17407 9042.5
+1705.49744 12267.6
+1705.82263 13461.0
+1706.15308 10680.6
+1706.49023 6885.5
+1706.80261 6722.7
+1708.24890 5351.2
+1708.50928 616080.0
+1708.84485 1749651.0
+1709.17725 2560217.8
+1709.50879 2571354.8
+1709.84082 1954811.9
+1710.17603 1225903.0
+1710.51111 642556.4
+1710.84448 288434.3
+1711.18005 127717.9
+1711.52051 47161.3
+1711.86621 17400.4
+1712.22778 9520.3
+1712.54248 11878.6
+1712.87854 14703.1
+1713.20544 18534.5
+1713.52478 12722.1
+1713.84021 10551.0
+1714.18604 7058.3
+1715.36279 8604.5
+1715.69812 11950.6
+1716.03674 13337.0
+1716.37097 17535.2
+1716.68481 22768.2
+1716.99646 25929.2
+1717.31921 18116.6
+1717.62732 11691.7
+1718.43933 7585.0
+1740.67517 5051.2
+1795.82031 4623.3
+1839.23999 8271.3
+1878.60693 7907.3
+1878.98657 8587.8
+1879.52759 63662.5
+1879.74963 101937.3
+1880.24231 30500.8
+1880.59229 14243.5
+1881.52625 6114.9
+1907.17175 52808.8
+1930.57141 6511.6
+S	2653	2653	636.846657933
+Z	6	3815.033
+169.48495 666.3
+188.24268 874.6
+188.25838 1500.1
+188.27878 1719.2
+188.28653 1751.1
+188.29358 1741.1
+188.31522 1568.8
+188.33209 914.7
+194.89194 651.7
+198.93542 832.8
+199.21355 1156.3
+199.22055 580.2
+199.31166 2417.9
+199.41061 1026.8
+201.12364 24766.9
+201.95552 592.8
+202.12646 2767.4
+229.11841 5557.5
+238.69798 614.7
+242.52759 752.0
+251.15030 702.3
+252.45753 583.8
+269.18597 1043.2
+272.17236 791.2
+292.29230 626.8
+294.01108 587.6
+316.15128 1565.1
+319.54279 692.6
+326.13495 2608.4
+334.59467 602.0
+344.14563 35149.5
+345.14938 5465.1
+346.15158 1190.0
+351.21426 1997.3
+369.22485 52160.4
+370.19598 1234.2
+370.22845 8442.3
+371.23172 887.0
+393.88849 640.3
+401.60410 543.1
+402.26743 657.4
+408.66937 734.4
+412.20676 1369.5
+413.16711 3271.5
+423.71890 2370.7
+424.22098 1465.6
+429.23462 7212.8
+430.23764 1148.5
+431.17770 2426.3
+435.23282 1010.1
+457.22977 22535.4
+458.23273 5043.1
+482.30872 14406.4
+482.65063 703.5
+483.31232 3404.3
+493.35907 649.7
+498.25394 1112.1
+499.24011 1977.1
+503.18057 589.0
+508.77057 3507.2
+509.27188 1486.9
+516.26550 4141.1
+517.26495 890.1
+526.25116 7091.3
+527.25433 1688.7
+531.28339 2404.7
+531.78900 722.2
+532.62463 2131.9
+544.26154 30912.9
+545.26434 8210.1
+546.26721 1371.8
+548.31952 4648.3
+549.32214 1630.9
+554.29547 2444.1
+554.62512 1590.9
+555.29926 967.3
+560.29663 3990.9
+560.62946 3726.4
+560.96484 1913.8
+577.30066 19155.4
+577.80164 11639.7
+578.30304 5253.3
+578.80371 1867.3
+580.51276 659.4
+590.82159 1140.8
+591.31860 812.4
+594.87677 607.1
+595.81140 1273.6
+596.31622 1569.1
+597.98920 1033.1
+598.32611 940.0
+601.31885 1359.4
+601.65125 1090.5
+604.81891 5949.5
+605.31866 4520.1
+605.82135 1759.6
+630.39349 667.8
+636.33447 1099.9
+636.66614 954.9
+642.33429 766.6
+658.69000 990.2
+661.40308 1157.1
+663.34375 2284.4
+665.38043 1027.5
+666.38507 833.3
+668.34735 1003.1
+673.36450 2252.0
+673.86481 2030.3
+674.36298 1210.1
+677.13416 694.1
+682.36884 125474.4
+682.87048 100734.4
+683.37134 50198.8
+683.87183 17829.0
+684.29156 591.4
+684.37286 4349.2
+684.87671 1631.3
+692.05609 625.8
+699.36090 21399.8
+700.36511 7407.3
+701.36407 1136.5
+704.33917 4254.3
+704.84070 2892.1
+705.34039 1928.5
+707.74585 621.0
+713.34534 16054.7
+713.84680 11632.8
+714.34930 4314.7
+714.84711 1987.1
+716.87885 6284.1
+717.38141 3637.1
+717.88116 2610.2
+718.38745 832.8
+722.39917 961.3
+723.81482 926.4
+724.31116 1005.4
+724.38281 5501.4
+724.88177 6857.1
+725.38074 3229.2
+725.88501 231948.0
+725.97852 700.9
+726.31366 1018.9
+726.38605 192869.9
+726.58496 736.2
+726.88708 100694.3
+727.38788 38874.1
+727.88916 13339.4
+727.96265 902.6
+728.38617 3075.2
+731.08997 641.9
+748.43933 653.1
+752.41486 1110.4
+753.41687 824.8
+754.39911 1588.0
+755.88947 3590.3
+756.39124 3312.0
+756.89569 1697.3
+757.39294 746.6
+758.41986 853.2
+760.88141 11108.1
+761.38330 9487.6
+761.88464 4779.4
+762.39026 1903.2
+769.88782 84373.4
+770.38898 61729.3
+770.89001 30180.2
+771.39136 11289.2
+771.89337 3714.8
+773.42181 7206.1
+773.92474 6512.6
+774.42828 3382.9
+774.92310 1507.3
+776.42950 7371.4
+777.43439 2381.7
+781.28217 694.2
+782.25562 689.7
+782.42688 91183.8
+782.92853 82925.6
+783.42926 46884.1
+783.93005 18316.3
+784.43158 5169.1
+784.93140 1411.3
+785.39905 1207.5
+794.43884 1090.2
+795.73157 1103.3
+798.34650 549.9
+809.42560 666.7
+818.41663 1880.7
+818.91528 2238.9
+830.93591 22553.2
+831.43573 23133.0
+831.93719 13641.7
+832.43713 6283.3
+832.93964 2161.2
+833.44965 1885.4
+837.07507 767.6
+837.36688 1977.8
+837.80005 1795.0
+837.88324 1162.7
+838.29730 1547.2
+838.39777 869.7
+838.42792 840.7
+838.66266 2555.0
+838.77808 877.9
+839.17279 2706.3
+839.26080 744.2
+839.49500 778.8
+839.62640 1544.5
+839.68842 2110.4
+839.75861 1369.4
+839.78290 1136.4
+839.84229 2335.0
+839.94055 547093.6
+840.04840 2807.1
+840.11920 1875.2
+840.19348 1451.1
+840.22949 1372.0
+840.29785 1813.6
+840.44110 525624.9
+840.56165 2492.2
+840.61475 1287.0
+840.69159 1794.3
+840.76978 865.6
+840.80072 972.1
+840.94189 317814.4
+841.20837 3529.3
+841.44250 128342.9
+841.55371 796.2
+841.71118 3220.1
+841.82513 746.8
+841.94342 44798.5
+842.06396 1635.9
+842.10779 1853.5
+842.20581 2279.7
+842.44421 13846.7
+842.51819 1226.7
+842.59882 1670.7
+842.68298 1049.5
+842.75604 943.6
+842.95221 2401.4
+843.10022 1055.7
+843.33942 771.8
+843.61023 792.6
+843.85938 926.4
+846.42798 12011.8
+847.04565 722.6
+847.43097 6690.1
+848.43079 2847.6
+868.41290 919.1
+869.41876 790.5
+881.11273 586.7
+882.43561 1825.4
+883.43011 930.2
+891.45551 3264.9
+892.46198 1694.8
+901.47552 3790.6
+901.97705 4200.8
+902.47974 2436.4
+902.98621 1024.5
+903.44995 61063.7
+904.45294 30509.4
+905.45361 11585.3
+906.44824 1599.0
+907.44934 760.7
+953.98474 817.2
+954.49365 823.4
+969.45972 1298.2
+974.48065 739.4
+980.51996 2249.6
+981.52643 971.2
+991.53125 805.9
+995.51270 8532.5
+996.51495 4776.7
+997.51599 1423.1
+1004.53790 1814.5
+1016.53406 26683.7
+1017.53674 14380.1
+1018.53717 5364.5
+1019.53931 2117.4
+1021.14288 747.1
+1037.53589 1080.6
+1054.54211 1145.9
+1055.57996 816.3
+1061.56128 5085.3
+1062.56641 2976.0
+1082.54517 10126.7
+1083.54834 5958.3
+1084.54871 2788.1
+1153.59290 13458.3
+1154.59631 9005.4
+1155.60217 3143.3
+1195.62769 1944.0
+1196.64136 1489.3
+1198.39417 3454.3
+1208.62964 6622.1
+1209.63550 3649.0
+1210.64136 1053.0
+1265.64954 3555.3
+1266.66846 3227.9
+1267.67371 1695.2
+1282.00403 1837.2
+1282.52527 1007.1
+1282.65137 734.6
+1310.65613 7652.9
+1311.66077 5946.4
+1312.66345 2051.4
+1328.60901 642.0
+1363.72388 1522.3
+1364.72559 1278.3
+1425.67297 1408.0
+1426.68970 1507.5
+1427.69873 868.5
+1489.64734 663.6
+1539.78027 1006.3
+1777.61694 1053.0
+1810.55811 694.1
+1878.16870 865.8
+1878.76880 1203.0
+1879.15881 3582.1
+1879.55090 18589.7
+1879.93750 3791.8
+1880.65076 921.2
+1880.94507 916.8
+1907.06616 7550.2
+1930.57849 1043.0
+S	2654	2654	855.2758246
+Z	2	1708.704
+Z	3	2562.552
+231.43044 566.3
+231.48033 566.1
+255.31041 847.3
+280.20508 734.3
+346.71811 615.3
+380.68643 648.4
+386.21957 753.1
+387.67310 537.4
+390.50745 601.2
+447.91888 600.8
+471.56079 637.3
+532.55322 1710.3
+546.41071 646.0
+549.19946 690.1
+575.01666 589.4
+604.16913 603.5
+623.17456 596.9
+676.63043 971.3
+711.36340 610.6
+802.57965 568.4
+953.89368 743.2
+1057.23438 722.6
+1072.77600 627.7
+1104.40527 592.7
+1198.23230 3394.9
+1262.15625 712.0
+1281.95569 1224.3
+1283.01843 725.6
+1455.12280 684.1
+1635.43774 849.6
+1761.43933 584.1
+1777.40637 859.9
+1779.88611 617.5
+1878.11462 794.3
+1878.69385 875.4
+1878.92126 545.0
+1879.50000 19312.6
+1879.75623 1901.2
+1881.28235 886.4
+1906.89844 1438.3
+1907.17834 7010.0
+1918.89893 851.3
+S	2655	2655	855.778991267
+Z	3	2564.062
+Z	2	1709.71
+226.37082 3213.6
+233.57545 4471.6
+238.69849 4054.6
+240.13484 14176.0
+255.94315 2921.8
+258.14462 14426.2
+266.76465 3317.9
+271.58572 3151.2
+294.18155 15922.2
+311.20789 16887.1
+312.19095 5613.2
+315.28922 4179.0
+329.21902 17201.8
+337.18723 6071.2
+339.20282 43754.0
+340.20667 7602.6
+355.19839 8910.1
+357.21362 77702.7
+358.21835 12228.6
+360.15714 4546.5
+365.25427 7332.0
+373.20822 169994.9
+374.21155 27232.2
+383.26611 5312.0
+389.42975 3524.2
+393.24927 14725.1
+410.27676 23656.5
+411.26151 20389.6
+427.21909 25652.9
+428.28650 31966.4
+429.29062 5291.6
+438.27124 152121.9
+439.18292 14888.5
+439.27475 33309.7
+440.27893 4305.1
+456.28183 285978.7
+457.28488 62843.3
+458.28958 9499.4
+487.18094 11716.9
+488.23459 17716.3
+495.23239 4029.1
+517.30035 3594.8
+532.57770 9330.6
+547.35132 3237.8
+549.16187 3531.0
+552.25330 17649.1
+552.75482 9014.9
+567.27722 17878.2
+582.33832 6481.9
+585.28760 513462.6
+586.29041 156533.3
+587.29327 38496.3
+591.34381 4637.4
+591.84296 5028.1
+595.30756 7834.1
+609.76703 26230.0
+610.26880 18686.3
+610.76648 7285.4
+613.32129 10608.3
+623.33759 5235.8
+634.24921 17351.0
+635.24927 4715.5
+636.37451 5062.8
+650.23926 14244.8
+654.38184 10357.3
+663.86761 6702.7
+664.36780 4905.2
+672.87305 22200.0
+673.37360 17549.2
+673.87189 4772.9
+676.69287 3862.6
+682.78973 4999.0
+691.29883 78334.1
+691.80035 56185.4
+692.30151 25421.2
+692.80511 6644.5
+708.38763 6821.2
+714.34644 15045.7
+715.35107 9192.4
+726.40314 25085.0
+727.40729 7583.6
+732.35638 335781.7
+733.35907 126582.6
+734.36224 37870.3
+739.33398 5590.5
+739.81458 3964.9
+746.27466 3424.4
+747.84180 87916.5
+748.34332 67195.2
+748.84351 34864.3
+749.34528 11019.0
+749.45526 22047.7
+750.45923 11231.0
+763.32751 9550.0
+767.46631 56275.6
+768.47272 23139.9
+769.47339 6073.7
+788.42889 3722.6
+794.52869 4192.7
+795.74567 5721.1
+796.40112 9623.3
+796.72302 11687.8
+797.06818 8761.4
+797.31720 15643.9
+797.36047 14196.7
+797.87567 14442.7
+798.17999 3232.1
+798.30457 5087.7
+798.37769 4317.9
+799.82727 4708.1
+800.03833 4944.2
+802.06897 69671.8
+802.40363 91994.8
+802.73767 65817.6
+803.07153 36737.9
+803.40973 15123.7
+806.86896 4165.2
+811.45972 4039.1
+817.21545 4566.6
+826.48090 4193.5
+828.40808 4978.9
+830.21332 5753.4
+857.09180 3173.6
+871.45490 4631.6
+874.51300 5115.8
+881.42126 4574.2
+881.92529 11526.1
+882.49121 21428.7
+883.49872 6904.6
+889.46600 21908.5
+890.47144 9463.8
+893.37683 4938.5
+898.40369 66978.7
+898.90546 67333.4
+899.40662 30589.2
+899.90607 15850.3
+900.40558 5462.1
+906.95508 19239.2
+907.45673 15638.5
+907.95581 12151.8
+910.40356 13945.2
+910.95801 12863.8
+911.40802 6637.8
+915.96039 138759.5
+916.46161 149939.0
+916.96362 73679.4
+917.46362 32781.2
+917.95569 8667.8
+921.29810 3609.8
+924.54102 9542.7
+925.54126 5899.2
+930.96472 5017.4
+931.45459 8965.0
+931.96045 7204.8
+934.50201 5325.1
+935.39777 4995.7
+939.95471 10158.9
+940.46252 15056.7
+940.96136 8324.5
+949.42773 5719.6
+951.50958 4519.8
+954.94934 11081.5
+955.44958 11230.1
+955.95801 9837.3
+969.52454 11311.6
+970.52600 9578.4
+971.98267 10751.8
+972.41705 4490.8
+972.49371 6660.4
+973.43518 3775.7
+975.49738 15142.3
+975.99884 13288.3
+976.51147 8702.1
+977.00122 3965.9
+980.48938 49236.0
+980.98956 70594.4
+981.49115 38006.9
+981.99152 16094.5
+988.54156 5847.2
+989.49579 283902.9
+989.99615 322726.2
+990.49860 178949.6
+990.99823 82799.0
+991.50580 19892.9
+992.00537 9591.0
+993.28619 2971.7
+1004.49548 28545.8
+1005.49438 14869.5
+1005.97400 11989.7
+1006.47034 7613.6
+1007.60510 3477.9
+1009.39697 12166.0
+1011.40698 3640.3
+1023.60541 8504.3
+1025.93164 4353.7
+1036.48035 9337.9
+1036.97888 8569.3
+1037.48132 6537.0
+1038.03552 6544.2
+1038.52881 12641.5
+1039.02380 6038.2
+1039.53894 4998.6
+1044.99292 63237.2
+1045.48962 123760.6
+1045.98999 122914.6
+1046.48975 69224.0
+1046.99084 31898.9
+1047.48657 7110.3
+1047.98572 3405.0
+1050.39966 7607.9
+1050.58276 33965.6
+1050.77649 3992.6
+1050.89587 7926.6
+1051.00085 4687.2
+1051.24915 6986.7
+1051.38745 6488.4
+1051.57971 22627.5
+1052.00439 5292.3
+1052.23706 7284.5
+1052.59338 9994.5
+1052.72900 9315.1
+1053.23950 6495.4
+1053.84485 9273.8
+1053.99780 1779060.3
+1054.19958 4730.8
+1054.24792 8807.1
+1054.33508 10212.0
+1054.49902 2025053.1
+1054.70471 8359.1
+1054.99951 1293580.3
+1055.50073 558529.6
+1055.77466 10568.9
+1056.00330 211800.8
+1056.27808 10478.1
+1056.50598 64636.3
+1056.77576 8371.3
+1057.00916 20017.4
+1057.28064 10465.9
+1057.50500 13006.0
+1057.62317 6783.9
+1057.76501 7131.6
+1057.99890 7902.9
+1058.12500 10133.3
+1058.27283 3609.0
+1059.14819 4050.9
+1060.08936 3649.1
+1064.45142 6340.0
+1068.59399 67724.6
+1069.59656 39043.3
+1070.59973 13158.0
+1071.59644 4487.8
+1072.41968 16573.7
+1073.43152 7270.5
+1086.54346 8215.7
+1087.02515 7448.4
+1087.55176 6757.0
+1094.52576 16888.9
+1095.02136 50185.8
+1095.53027 101444.7
+1096.03223 81595.9
+1096.53894 49616.6
+1097.03552 20529.4
+1097.54065 5673.2
+1103.53101 619056.8
+1104.03235 782716.0
+1104.53430 483429.5
+1105.03577 228166.8
+1105.53894 79091.2
+1106.04114 19310.4
+1106.54919 4286.5
+1118.53381 7915.6
+1119.55347 7739.5
+1122.47729 12706.3
+1123.47729 10042.1
+1130.55029 5762.4
+1144.05981 16612.8
+1144.55933 35074.1
+1145.05945 30054.1
+1145.55994 16578.2
+1146.05566 7088.4
+1153.06531 365501.1
+1153.56677 445376.3
+1154.06799 302123.1
+1154.57031 143229.1
+1155.07214 53702.6
+1155.57715 19566.5
+1163.66650 34857.0
+1164.66760 21475.0
+1165.67065 6876.2
+1181.67822 94034.5
+1182.67896 62961.6
+1183.68420 24762.0
+1186.67358 7009.0
+1194.57190 4576.7
+1195.08813 3700.0
+1198.29028 18046.5
+1199.57019 7997.4
+1200.07520 12891.3
+1200.59009 8872.8
+1201.07666 10728.2
+1201.50037 8909.5
+1202.59937 55466.1
+1203.10022 77014.3
+1203.60168 47834.2
+1204.10291 21774.8
+1204.59167 7543.3
+1208.58203 145413.0
+1209.08325 189003.5
+1209.58313 126579.7
+1210.08679 75537.4
+1210.58643 24009.2
+1211.09302 8974.1
+1211.50586 8009.4
+1212.52271 6467.3
+1218.52832 113347.6
+1219.52905 70413.9
+1220.52844 24262.3
+1229.57629 7757.0
+1230.57031 5356.0
+1235.48389 14356.0
+1236.48572 6760.9
+1246.59595 42646.7
+1247.59570 25056.8
+1248.60132 8580.5
+1281.62622 6017.7
+1282.13782 9749.3
+1326.73035 21660.1
+1327.73657 16687.9
+1328.73792 6274.0
+1344.74097 85843.7
+1345.74829 54616.9
+1346.75317 24370.5
+1347.76404 6632.8
+1348.56555 9767.5
+1349.57520 8950.4
+1350.57446 4699.1
+1357.63342 4950.0
+1358.62012 10071.1
+1359.62036 7712.5
+1364.57642 11836.8
+1365.57568 6086.2
+1375.63818 94232.1
+1376.64282 66355.6
+1377.64209 26419.6
+1378.65576 9014.5
+1381.59204 86683.3
+1382.59460 64890.4
+1383.59143 23637.5
+1384.59155 11386.2
+1385.61694 3344.1
+1459.76831 23343.1
+1460.76965 20269.8
+1461.76672 5538.6
+1474.70862 37143.6
+1475.70959 29645.3
+1476.72180 10607.0
+1477.74072 5531.3
+1478.65784 3863.7
+1494.67651 36115.4
+1495.68274 26348.9
+1496.68726 15415.1
+1497.68176 4686.4
+1504.70386 6895.1
+1505.69177 16010.4
+1506.69958 7441.4
+1507.69629 4970.4
+1522.70837 67154.5
+1523.71094 57324.6
+1524.71643 31815.2
+1525.40979 4127.9
+1525.70959 13224.3
+1556.77991 4668.7
+1573.80847 11823.5
+1574.80334 12043.6
+1575.80713 4560.8
+1593.77368 6479.8
+1621.77393 29854.4
+1622.77649 30681.5
+1623.77893 15404.9
+1680.77271 7070.4
+1681.77832 6021.7
+1701.51807 3810.8
+1717.77710 5630.6
+1720.86792 8492.6
+1721.84839 13292.3
+1722.86316 7430.0
+1734.78198 34463.4
+1735.78809 42963.6
+1736.79797 19896.6
+1737.77112 6433.4
+1738.77625 4615.5
+1830.92432 11754.7
+1831.91003 13719.6
+1832.89905 4837.2
+1833.85010 16066.2
+1834.85693 12498.4
+1835.86389 9177.7
+1842.53442 3671.0
+1877.30225 4184.4
+1878.69678 6086.9
+1879.65454 104010.3
+1880.02649 6580.5
+1880.20874 7522.2
+1880.32471 5563.8
+1880.64465 7252.4
+1907.10693 36984.1
+1918.91882 3774.8
+1932.91052 7542.8
+1933.92224 5460.9
+1960.88049 20035.6
+1961.86816 15808.2
+1962.87634 8138.2
+1963.88477 6077.0
+1977.98157 15185.0
+1978.99146 18600.7
+1979.98474 8251.6
+1980.96899 5023.0
+S	2657	2657	1282.8078246
+Z	3	3845.148
+Z	2	2563.768
+350.28201 5025.3
+372.25391 4488.7
+373.20834 61207.6
+382.73611 4026.9
+391.19858 5148.3
+393.25040 5931.9
+408.22699 5407.4
+409.20789 10979.9
+410.27594 10262.2
+411.26108 10579.3
+426.96509 5120.9
+427.21945 69684.1
+428.22260 13310.4
+428.28555 17475.9
+438.27112 68417.7
+439.18033 7096.3
+439.27502 13277.1
+456.28201 47263.3
+457.28461 8030.2
+469.97629 6096.0
+493.63651 5115.3
+509.28363 4827.3
+514.24670 7445.0
+522.25110 6844.8
+522.49628 6350.5
+525.30188 9900.9
+526.28760 8864.1
+526.75336 127180.8
+527.00409 149865.0
+527.25476 92544.6
+527.50513 33031.9
+527.75983 8276.2
+532.55798 14404.8
+547.52332 13419.6
+547.77301 23124.4
+548.02325 10922.2
+551.32452 3832.7
+551.35132 5121.2
+551.51868 5593.9
+551.77222 7564.7
+552.01959 7381.1
+567.28046 17647.6
+569.35571 4415.8
+577.29840 11884.3
+585.28754 316344.7
+586.29102 80951.4
+587.29272 15726.6
+595.30762 24542.0
+599.24677 6088.6
+606.36084 6787.0
+613.31726 13606.5
+614.32068 6836.0
+624.37189 16656.4
+634.24750 6794.4
+650.38751 11967.6
+651.38513 5663.2
+668.39502 10108.5
+676.64734 7100.6
+694.37830 6998.2
+708.39154 18627.2
+709.39771 11590.0
+714.34735 16909.1
+725.38019 5659.3
+726.40265 19012.0
+727.40631 9204.9
+731.44733 8123.0
+732.35608 226092.0
+733.35962 95851.4
+734.35944 14310.9
+735.36731 8020.3
+737.45526 7496.3
+749.45654 47882.2
+750.45831 21692.7
+751.46399 5835.4
+753.37268 6226.8
+765.41516 5505.3
+767.46655 42680.5
+768.47144 9864.6
+786.06665 4838.7
+797.31110 6445.2
+811.46198 6247.3
+825.46985 9183.0
+826.47162 7065.1
+834.42975 6834.0
+843.38989 21899.1
+844.39331 10803.1
+852.43707 12355.2
+853.44104 6615.8
+861.39905 70719.9
+862.40192 32247.8
+863.40393 6626.3
+864.48328 16047.4
+865.48297 6696.1
+867.80090 4903.9
+870.45038 7741.5
+871.45551 14432.9
+872.46216 11347.9
+881.01587 5167.2
+882.49103 28406.2
+883.48993 11431.4
+889.46796 14097.1
+890.47083 10085.3
+906.53033 5754.1
+910.39172 5475.4
+924.54559 9310.1
+933.50348 15543.1
+951.51624 32789.1
+952.51691 18678.9
+965.52905 27510.3
+966.53369 13624.9
+969.52545 28537.9
+970.52802 20890.4
+971.51184 8920.7
+972.43433 38137.6
+973.43164 23080.2
+983.52875 11067.6
+986.48358 9607.4
+987.48059 7416.4
+988.53516 5680.4
+989.46240 40066.3
+990.46301 22616.7
+1004.49426 39688.5
+1005.49768 21506.7
+1009.39136 24615.6
+1010.39600 14735.6
+1013.49170 6877.1
+1014.56549 5630.0
+1015.55688 8061.7
+1023.61194 6836.0
+1031.26013 4800.6
+1032.57214 45299.0
+1033.57458 35386.0
+1034.57874 10876.9
+1035.92932 4743.8
+1036.48193 7865.3
+1040.59216 7786.1
+1044.99280 52864.7
+1045.49097 68191.2
+1045.99170 52438.9
+1046.49585 32956.4
+1047.00024 7453.3
+1050.58423 151686.4
+1051.58630 79982.0
+1052.59009 27552.3
+1053.57703 4991.5
+1053.99695 445525.4
+1054.49890 506522.6
+1055.00000 325052.7
+1055.50122 129801.5
+1055.78503 6074.3
+1056.00427 42410.7
+1056.50293 19127.9
+1057.25842 5845.8
+1064.60046 44335.1
+1065.60559 25582.1
+1068.59448 129581.4
+1069.59656 74420.6
+1070.60205 26350.4
+1072.42700 8433.7
+1082.60657 23258.3
+1083.61658 12629.8
+1086.47412 24566.1
+1087.47693 14595.2
+1087.61108 10494.6
+1094.53333 7146.7
+1095.02173 26818.5
+1095.52173 21104.7
+1096.03601 7530.8
+1103.50171 354527.4
+1104.03259 261418.0
+1104.50916 211700.3
+1105.03638 77723.4
+1105.50391 78251.0
+1106.04211 6082.8
+1106.50867 14721.9
+1107.48987 8137.0
+1118.55310 5366.8
+1119.58716 5810.7
+1122.48206 29330.2
+1123.47534 15445.7
+1128.58142 16897.3
+1129.58862 12282.1
+1144.56262 7202.0
+1145.65356 35685.1
+1146.66687 16873.2
+1153.06689 17938.2
+1153.56909 27191.7
+1154.07019 18815.8
+1154.57776 13937.3
+1163.66785 224697.4
+1164.66980 135660.7
+1165.67236 46426.9
+1166.66858 12520.0
+1181.67798 196405.8
+1182.68030 123775.2
+1183.68640 48954.5
+1184.68677 15073.0
+1198.24756 23562.0
+1201.50635 28520.0
+1202.53284 21247.3
+1203.09998 12659.4
+1203.54749 8186.4
+1208.57141 7100.7
+1209.07666 15518.7
+1209.67358 6465.9
+1214.57239 5294.7
+1218.52673 777980.8
+1219.53003 502987.8
+1220.53369 204911.1
+1220.73743 6461.6
+1221.53760 59538.6
+1222.18274 5481.1
+1222.53613 9211.2
+1227.66357 18297.4
+1228.66138 16483.3
+1235.48486 8456.4
+1236.49878 7650.7
+1245.67224 7738.3
+1246.60034 8967.5
+1282.05115 10854.7
+1308.57666 11236.8
+1308.70337 8384.6
+1309.57397 5535.4
+1309.70630 8060.1
+1324.61890 7053.2
+1326.73230 101166.1
+1327.73486 80485.6
+1328.73511 35361.4
+1329.74231 12116.4
+1344.74268 128597.8
+1345.74548 105575.9
+1346.74902 47649.8
+1347.75098 12868.0
+1348.57300 8406.0
+1349.57288 9942.4
+1357.63721 8440.7
+1358.60925 11319.9
+1359.61865 7417.6
+1363.58398 14648.0
+1364.57397 26927.1
+1365.56873 14293.1
+1375.63940 27480.5
+1376.19922 5537.0
+1376.64307 20827.4
+1377.65784 8261.1
+1381.59045 1002460.2
+1382.59314 786672.8
+1383.59619 351448.5
+1384.26563 5503.1
+1384.59949 106381.5
+1385.60413 22097.2
+1387.02148 7342.0
+1423.60242 6331.8
+1424.62244 8519.4
+1441.76099 20215.3
+1442.76221 12961.7
+1459.76917 125528.0
+1460.77368 110892.7
+1461.77319 50376.7
+1462.77844 12983.1
+1474.68494 7034.2
+1476.65625 15328.0
+1477.65222 31623.3
+1478.65894 21418.7
+1479.65686 10656.7
+1480.59119 5106.7
+1487.66345 10290.3
+1488.63879 10783.3
+1489.63135 8839.9
+1490.67383 6460.7
+1492.59106 4892.1
+1493.60681 5736.7
+1494.67566 1008920.3
+1495.67798 841287.7
+1496.68103 393976.4
+1497.68420 131886.1
+1498.68799 36567.2
+1499.69397 9357.4
+1500.77661 6009.6
+1504.68982 15182.1
+1505.69153 32270.6
+1506.69592 17279.6
+1507.72498 6453.4
+1522.70959 45272.6
+1523.71240 34191.1
+1524.71289 19790.1
+1555.80493 9903.6
+1556.79688 10613.5
+1557.83289 8781.6
+1573.81177 34033.8
+1574.81531 27978.9
+1575.83203 13234.3
+1593.74280 150255.5
+1594.74646 138803.5
+1595.74634 65091.3
+1596.75500 22273.8
+1597.75989 7149.1
+1621.77759 17195.9
+1622.77747 8157.5
+1623.78455 7989.0
+1650.66077 6840.4
+1662.77039 8346.9
+1663.76233 20088.9
+1666.81445 7324.8
+1667.23438 7008.0
+1680.77563 348045.0
+1681.77759 323903.8
+1682.78284 172567.1
+1683.77295 55815.1
+1684.77246 12072.9
+1685.87573 10820.2
+1701.86829 60222.8
+1702.87146 59789.2
+1703.88171 27881.8
+1704.88794 9610.8
+1716.77527 7188.0
+1717.77051 13289.8
+1721.84814 8938.1
+1734.78394 113695.0
+1735.78943 106025.3
+1736.79077 53608.0
+1737.79871 19151.3
+1777.77515 10358.0
+1778.77783 22840.9
+1779.79175 15738.7
+1780.74829 8012.6
+1795.79858 402303.4
+1796.80420 395468.3
+1797.80701 225016.3
+1798.81079 77765.0
+1799.80115 16438.9
+1812.89893 45657.1
+1813.18176 5415.7
+1813.89832 63286.6
+1814.89990 40791.9
+1815.89453 18659.4
+1816.90344 6769.2
+1830.91235 227840.0
+1831.91406 225672.3
+1832.91614 123369.4
+1833.92737 47610.4
+1834.87158 18082.4
+1835.85962 7336.7
+1878.04614 10022.8
+1878.93787 19385.3
+1879.55054 143509.0
+1879.84265 20712.5
+1880.14185 16840.8
+1891.84558 5507.4
+1907.05249 57399.6
+1908.88489 67066.6
+1909.88696 69570.5
+1910.89612 50489.2
+1911.88818 16496.2
+1930.73596 7602.0
+1941.95410 15567.6
+1942.95837 29140.1
+1943.96936 19534.6
+1944.97900 12950.9
+1959.97144 130188.3
+1960.97839 160380.8
+1961.98120 111099.5
+1962.98083 55509.4
+1963.98181 17984.5
+1977.97974 409217.2
+1978.98352 462899.5
+1979.98499 287971.2
+1980.98926 108516.2
+1981.99243 31083.7
+1982.97644 7760.0
+S	2658	2658	1538.7676246
+Z	5	7688.799
+440.51923 993.0
+446.31055 1055.1
+482.66476 1205.8
+532.52887 3081.1
+573.08832 1087.1
+642.61902 1211.6
+676.00208 1114.7
+731.14429 1349.5
+775.81683 1121.1
+795.74786 2171.7
+866.15607 1189.4
+1050.56030 1010.9
+1198.18250 4764.4
+1210.61780 973.1
+1218.39539 1077.1
+1281.50549 2167.9
+1281.98596 4450.6
+1283.00305 1606.6
+1385.47192 1177.0
+1497.48438 1078.9
+1525.44336 1365.2
+1534.66272 1123.6
+1654.49219 1027.8
+1760.88428 1063.6
+1804.30579 1054.9
+1852.08423 1003.2
+1877.69250 1520.5
+1878.17981 1148.0
+1879.10132 3512.1
+1879.34912 10212.4
+1879.60876 30196.0
+1880.42358 1994.9
+1881.20215 1311.4
+1882.49841 1018.0
+1907.04761 12499.3
+1930.67175 1438.1
+S	2659	2659	1539.3694246
+Z	5	7691.808
+454.76825 540.4
+475.15005 625.9
+532.53259 1639.5
+583.13794 660.9
+630.44861 1169.4
+676.64557 997.8
+781.98895 664.5
+786.75183 655.7
+875.23389 873.1
+907.80255 572.8
+953.90491 838.3
+960.29199 560.3
+984.55054 630.2
+1001.97107 763.7
+1188.26526 789.2
+1198.19519 2843.1
+1283.05042 832.7
+1525.53882 749.2
+1870.11194 571.2
+1877.09570 731.0
+1878.37830 746.0
+1878.98022 2384.4
+1879.55017 18684.0
+1880.07703 2658.2
+1880.39478 766.3
+1881.90698 988.5
+1907.14368 6548.3
+1930.72083 1043.6
+S	2661	2661	1538.7872246
+Z	5	7688.897
+532.55444 1870.9
+549.08038 692.9
+564.69153 653.2
+617.02539 651.4
+618.51050 632.1
+630.33118 570.1
+782.57501 744.7
+782.79388 676.4
+795.74194 939.7
+882.78876 617.3
+966.33563 578.0
+994.44257 675.6
+995.24988 656.0
+1065.58557 648.5
+1198.24390 3167.4
+1281.04639 738.9
+1281.42175 1082.2
+1281.96399 666.9
+1282.07336 1450.9
+1282.44397 1990.9
+1282.98865 919.3
+1413.10950 721.6
+1459.30505 632.8
+1514.57788 654.5
+1525.23718 826.3
+1875.12292 583.9
+1879.53223 19810.0
+1879.81482 2617.2
+1880.21948 1089.8
+1881.89966 991.9
+1907.10925 7762.6
+1930.39563 719.0
+S	2662	2662	1126.08840793
+Z	2	2250.329
+Z	3	3374.99
+296.15781 9613.3
+335.50964 5203.2
+347.91351 7535.2
+353.21887 6738.5
+355.17630 7142.7
+371.19095 30769.8
+373.28003 9935.2
+396.26349 6857.2
+397.20700 14823.5
+397.92624 5717.4
+404.69217 6457.9
+414.17044 8393.9
+424.25580 12328.8
+425.20212 173543.2
+426.20767 17967.2
+434.75867 6459.0
+440.21082 9703.7
+442.22775 11517.1
+442.26556 16324.4
+460.31140 70528.1
+461.31635 9914.3
+482.65698 7204.2
+492.28021 193842.2
+493.28400 42522.9
+506.26022 14800.3
+510.29028 63084.0
+511.29703 10041.8
+514.19958 6915.7
+520.27527 196267.7
+521.27771 34630.4
+529.26965 5738.2
+531.34662 19035.6
+532.55817 13094.3
+537.33862 9269.9
+538.28540 227639.5
+539.28973 43720.7
+553.29523 8589.2
+555.34406 8806.9
+567.31378 12763.4
+570.36133 10061.4
+577.29608 114934.2
+578.30066 21746.6
+588.37000 116705.9
+589.37146 24052.6
+595.30670 422662.3
+596.31049 97518.9
+597.31165 7571.6
+605.06750 6218.0
+630.40820 7690.1
+631.63708 6565.0
+634.93237 6091.5
+648.33411 35037.3
+666.34412 198573.7
+667.34723 39537.0
+676.65228 13784.4
+683.43750 10339.2
+701.45380 138510.4
+702.45789 38515.5
+707.37054 7210.9
+717.35535 26256.8
+718.35724 9426.0
+735.36591 177567.0
+736.36853 46529.0
+753.37653 40902.8
+754.37866 13539.3
+795.74915 10545.1
+812.49005 13544.2
+813.50726 6708.0
+820.45355 21893.6
+826.02307 6203.4
+830.48376 32992.1
+848.45007 80895.3
+848.84662 6674.8
+849.45197 28152.6
+901.53204 31607.8
+961.53662 18644.7
+979.53949 9811.0
+1089.63123 19240.8
+1090.62781 11643.3
+1095.63965 5939.9
+1107.63782 176498.4
+1108.64087 56943.8
+1188.28589 6392.8
+1198.25061 33785.2
+1281.47217 7086.2
+1281.56104 7222.8
+1282.01208 24739.6
+1282.55579 8594.2
+1282.99683 13384.4
+1465.47864 7173.5
+1525.44666 8094.8
+1575.24084 6011.1
+1708.39331 7728.7
+1777.06702 12585.4
+1876.36169 6271.8
+1876.99084 7604.0
+1877.66626 6959.9
+1878.64868 11705.8
+1878.93945 11186.5
+1879.31201 17420.3
+1879.56201 191649.3
+1880.50598 10400.9
+1880.82764 7157.3
+1907.16638 77437.7
+1930.61060 9968.0
+S	2663	2663	1282.82699127
+Z	3	3845.206
+Z	2	2563.806
+342.26419 74037.9
+350.28488 94768.7
+358.03726 78623.8
+360.65509 83048.6
+373.20731 97589.3
+385.56522 79161.8
+427.21762 252191.8
+436.46066 73034.2
+438.27063 244004.8
+452.95810 80102.9
+456.27899 123297.6
+470.74768 81718.6
+525.30060 87659.0
+526.75159 296138.9
+527.00470 262352.0
+527.25262 89051.5
+532.54633 231821.4
+585.28577 1180489.3
+586.29010 237448.7
+595.30237 93236.4
+600.90851 69052.2
+613.31445 96806.3
+627.53796 88359.5
+676.65869 84815.9
+708.39191 101068.2
+726.39478 93612.8
+732.35364 708869.6
+733.35571 318392.3
+749.45227 171346.1
+750.45532 96010.2
+767.46118 113809.0
+795.74213 149980.6
+861.39539 180325.0
+862.39502 123368.9
+882.49768 140501.4
+883.48706 84938.7
+946.16858 74384.8
+954.43451 83243.8
+980.31122 75143.5
+989.46210 110947.8
+1005.50085 89526.1
+1019.25342 76681.7
+1032.57153 138629.1
+1036.48401 88768.9
+1039.15308 84258.8
+1044.98706 181282.6
+1045.48596 171636.5
+1045.98853 134665.5
+1050.58203 378655.4
+1051.58557 246748.7
+1053.99512 1036133.4
+1054.49609 1627871.5
+1054.99854 626457.3
+1055.49695 275950.7
+1057.27832 98929.3
+1065.60388 120685.2
+1068.58789 260958.1
+1069.59497 187234.2
+1083.35168 91389.4
+1103.49915 829755.6
+1104.02954 687138.6
+1104.49731 428002.5
+1163.66504 601363.5
+1164.66467 331494.5
+1165.67065 73610.4
+1168.17908 83530.8
+1181.67224 500002.7
+1182.67627 174068.9
+1198.22632 419230.5
+1218.52478 2094310.5
+1219.52808 1107944.4
+1220.53003 388715.8
+1281.51880 124026.8
+1281.95581 120222.1
+1302.60242 91072.0
+1326.72888 319303.8
+1327.73608 173455.8
+1344.74524 187249.3
+1381.58618 2598192.8
+1382.59070 1713819.8
+1383.59399 738690.3
+1384.59790 121327.5
+1453.09399 90392.9
+1459.77698 182028.4
+1460.77332 147541.9
+1494.67297 2673534.0
+1495.67432 1891644.3
+1496.67273 683592.0
+1497.67883 193804.9
+1523.70032 98738.0
+1593.73596 258498.1
+1594.74158 303804.8
+1680.77039 910479.3
+1681.77148 689885.1
+1682.78699 289023.7
+1701.84106 92216.4
+1702.84717 101283.8
+1704.32715 83153.1
+1734.78601 221479.6
+1735.78638 167026.3
+1736.79138 120816.1
+1795.79944 1001140.8
+1796.79224 711593.1
+1797.80469 374073.0
+1812.90820 115580.2
+1813.89783 117645.0
+1814.88672 74377.2
+1830.90894 485736.4
+1831.91223 350741.2
+1832.88342 125290.1
+1877.79407 83826.3
+1878.40710 94628.6
+1878.53760 92829.1
+1878.96265 149182.1
+1879.27832 490784.4
+1879.57935 2252986.8
+1879.94885 326870.8
+1880.47449 210357.0
+1907.08728 877201.2
+1908.88831 215177.9
+1909.87292 114900.1
+1930.55139 126343.3
+1941.85046 103311.9
+1959.96851 348645.0
+1960.98816 381427.1
+1961.95471 132261.6
+1977.97375 1052143.1
+1978.98108 833653.1
+1979.99658 452300.5
+S	2665	2665	1282.80340793
+Z	3	3845.135
+Z	2	2563.759
+350.28226 714.7
+373.20880 6342.3
+392.88950 730.4
+410.27771 1535.0
+411.26315 1179.4
+427.21964 9617.9
+427.51990 798.8
+428.22348 2313.5
+428.28879 1102.1
+432.00897 709.0
+438.02234 647.3
+438.27179 7385.1
+439.27664 1789.9
+452.25214 884.1
+456.28223 4641.1
+457.28714 730.1
+488.23892 903.1
+490.39383 644.1
+508.27448 680.8
+514.24976 910.6
+522.25250 1342.1
+522.50372 1552.3
+522.74933 1174.4
+525.30542 2080.5
+526.28503 1297.8
+526.75366 30816.6
+527.00421 34452.2
+527.25470 20924.0
+527.50543 8771.6
+527.75806 2947.4
+529.31805 565.1
+532.52557 1837.6
+547.52209 4744.0
+547.77405 5278.8
+548.02380 2863.4
+548.27582 1185.7
+548.52838 860.2
+551.52130 1964.9
+551.77319 2095.6
+552.02142 1078.9
+560.75165 614.6
+567.28076 1613.6
+569.33948 565.0
+577.30060 1052.7
+585.28845 35212.9
+586.29102 11724.1
+587.29010 2372.9
+595.31018 2511.9
+596.31573 987.3
+604.26337 839.9
+613.32007 1665.8
+614.32587 1084.6
+624.37354 2428.5
+634.24854 792.0
+650.38647 1240.1
+685.81122 613.9
+708.39233 1764.5
+712.39563 732.3
+714.34644 2880.5
+715.35309 900.7
+726.40497 3150.9
+731.44226 840.5
+732.35712 28566.5
+733.36035 10980.3
+734.36011 3358.1
+735.36646 1088.7
+737.46057 1007.9
+749.45648 5517.4
+750.46100 2146.1
+767.46802 3785.2
+768.46826 2311.5
+793.43781 735.4
+795.75385 1189.7
+797.30731 1048.8
+798.31830 983.6
+811.45703 975.6
+825.46942 1676.9
+834.43134 664.3
+843.38916 2625.4
+844.38977 1221.1
+852.43799 1070.6
+853.43176 1103.5
+861.39972 11200.9
+861.90088 735.4
+862.40576 5036.2
+863.40332 1627.2
+864.48303 1224.3
+865.48944 948.9
+866.44910 946.0
+871.45294 1129.6
+882.49432 7023.4
+883.50183 3087.1
+884.50629 994.5
+889.46936 3000.9
+890.47174 1668.4
+895.85876 598.2
+900.52759 670.9
+910.39984 764.8
+924.54510 1232.4
+933.50885 1612.0
+934.50159 1198.9
+951.51349 4967.9
+952.51715 2474.7
+965.52802 3573.1
+966.52960 1618.6
+967.54083 853.5
+969.52643 5253.7
+970.53613 2538.8
+971.51190 1328.8
+972.43524 4848.8
+973.43665 2984.9
+974.43585 834.6
+983.53607 1039.0
+986.48346 1139.9
+988.52667 985.4
+989.45978 5933.8
+990.46271 3532.8
+1004.49731 6234.0
+1005.49774 3975.7
+1006.50580 890.4
+1009.39331 3650.6
+1010.39740 1891.2
+1011.41058 789.4
+1020.81195 666.7
+1023.61609 772.4
+1032.57593 6508.6
+1033.58057 3531.2
+1034.57849 1248.9
+1040.59790 779.1
+1044.99426 6283.0
+1045.49231 9292.3
+1045.99475 7968.5
+1046.50049 3092.1
+1046.99060 1637.5
+1050.58508 21609.4
+1051.58875 12878.1
+1052.58948 3980.1
+1053.59753 1253.3
+1053.99829 66620.5
+1054.50012 69840.6
+1055.00134 44686.7
+1055.50269 17518.3
+1056.00439 6869.0
+1056.50537 1612.6
+1057.23657 1034.6
+1064.59961 5784.4
+1065.60486 3071.6
+1066.60876 1484.6
+1068.59509 25942.6
+1069.59814 12827.7
+1070.60168 3932.0
+1071.59717 1057.7
+1072.42920 2038.9
+1073.43921 800.3
+1082.60645 2783.8
+1083.62109 1629.6
+1084.60864 712.2
+1086.46936 3666.1
+1087.47266 1560.1
+1087.60925 1149.7
+1088.48853 982.1
+1094.52002 1509.6
+1095.02515 2945.2
+1095.52966 2252.7
+1096.02979 1682.2
+1103.50427 61007.0
+1104.03418 39343.2
+1104.50574 33251.8
+1105.03870 10901.0
+1105.50720 12549.3
+1106.51379 2815.4
+1118.54211 1383.3
+1119.55542 942.7
+1122.47424 4792.9
+1123.46985 2071.5
+1124.48169 1221.2
+1128.58826 2656.5
+1129.60034 1757.6
+1142.77405 880.2
+1145.04883 918.3
+1145.65454 4242.7
+1146.56543 862.9
+1146.66907 2020.4
+1153.06812 4497.2
+1153.56982 5875.7
+1154.06714 3557.4
+1154.57251 1438.5
+1155.06653 1101.3
+1163.66882 32371.3
+1164.67175 20326.0
+1165.67334 7737.4
+1166.68469 1684.6
+1181.67944 35679.9
+1182.68201 22570.1
+1183.68311 7992.6
+1184.69092 1454.8
+1198.01965 858.2
+1198.16968 3182.8
+1200.50879 968.9
+1201.50806 4804.6
+1202.54370 3691.0
+1203.09521 1965.3
+1203.58167 1249.5
+1208.58801 1506.5
+1209.08337 2117.7
+1209.57886 1413.7
+1211.56616 575.6
+1218.52820 122294.0
+1219.36584 653.4
+1219.53101 74294.6
+1220.53406 29486.3
+1221.53613 8711.1
+1222.54102 1902.4
+1225.39734 705.7
+1227.66614 2113.6
+1228.66589 1428.6
+1229.66357 845.0
+1235.49658 988.5
+1237.05676 648.2
+1260.92249 575.8
+1265.43201 638.9
+1281.55066 823.6
+1282.01392 850.2
+1282.58203 708.5
+1308.58020 1647.0
+1308.71606 2394.3
+1309.59607 1438.8
+1309.72058 1417.2
+1310.56592 784.8
+1310.72144 1029.0
+1320.61963 734.7
+1326.73230 21495.0
+1327.73438 16560.8
+1328.74182 5777.4
+1329.74744 2028.5
+1340.61829 865.8
+1341.61389 785.9
+1344.74231 36666.2
+1345.74683 24052.4
+1346.74927 9119.8
+1347.74658 2661.9
+1348.56250 1738.2
+1349.57935 1386.7
+1357.62305 1021.1
+1358.61951 2121.0
+1359.61658 1790.3
+1363.57629 2526.2
+1364.57361 4622.2
+1365.56604 3077.4
+1366.57458 2124.4
+1367.59827 685.4
+1375.63989 4449.8
+1376.17114 918.4
+1376.63855 3440.4
+1377.64917 954.0
+1381.59119 182569.7
+1382.59387 132450.1
+1383.59753 56273.3
+1384.27979 942.6
+1384.60217 16779.9
+1385.60828 4542.1
+1387.05005 869.2
+1423.59106 1322.1
+1424.62109 1010.2
+1441.76025 3071.6
+1442.76843 2060.9
+1459.77026 27024.5
+1460.77417 19905.1
+1461.77332 8213.3
+1462.78076 2975.4
+1469.66394 772.2
+1474.74084 877.3
+1476.65881 1981.6
+1477.65198 4510.1
+1478.65479 4087.1
+1479.66125 1548.6
+1486.69434 1115.9
+1487.66943 2221.4
+1488.66443 1598.3
+1494.67651 177282.8
+1495.67896 139521.9
+1496.68213 63905.4
+1497.68567 23556.0
+1498.68445 6635.2
+1499.70728 1550.4
+1504.69409 3903.7
+1505.68750 5113.1
+1506.68933 3057.7
+1507.69019 1432.7
+1522.70740 9359.8
+1523.70642 7376.7
+1524.71606 3152.7
+1536.66931 837.3
+1555.81287 1737.8
+1556.80408 2432.1
+1557.80884 1162.0
+1573.81165 8349.4
+1574.81458 5823.8
+1575.82446 3061.0
+1593.74536 28057.1
+1594.74817 24891.6
+1595.75085 12975.0
+1596.75269 4868.8
+1597.76672 1592.3
+1603.75366 901.9
+1604.72534 1024.5
+1621.78198 2533.1
+1622.78174 1813.3
+1626.43115 684.1
+1646.77551 727.7
+1662.77063 3237.0
+1663.75964 3799.8
+1664.75818 3656.9
+1665.72742 890.3
+1667.18005 739.5
+1668.80823 876.3
+1680.77673 85309.0
+1681.77930 74653.0
+1682.78320 38247.6
+1683.77356 11615.2
+1684.87695 3146.5
+1685.87134 2902.8
+1686.81470 1205.1
+1687.98621 735.3
+1701.87354 14490.6
+1702.87195 12170.1
+1703.87805 7176.3
+1704.87646 2381.2
+1716.77600 3037.5
+1717.75903 3775.6
+1718.77307 2838.8
+1719.77332 1461.5
+1720.85156 1379.3
+1721.85046 1769.2
+1734.78784 30440.1
+1735.79126 31635.5
+1736.79431 14197.3
+1737.79553 4735.6
+1738.79626 1482.9
+1745.75537 737.8
+1758.42566 720.3
+1761.84583 862.8
+1762.84619 961.6
+1777.78186 2687.6
+1778.78003 5728.4
+1779.78357 3823.6
+1780.78101 1897.0
+1794.88245 1086.6
+1795.80151 85936.8
+1796.80493 81678.9
+1797.80615 43339.9
+1798.81091 15354.5
+1799.81079 4591.5
+1800.80981 1580.0
+1812.90515 8986.8
+1813.89807 12804.4
+1814.90076 9229.8
+1815.89917 3518.5
+1816.90881 1655.5
+1830.91199 57855.2
+1831.91479 49228.5
+1832.91797 27764.5
+1833.92139 8180.4
+1834.86902 3128.7
+1835.84937 2079.6
+1836.88257 894.3
+1843.86951 753.9
+1860.90942 1012.0
+1861.87573 1302.7
+1870.25525 1154.3
+1878.56580 1026.9
+1879.17188 1073.3
+1879.53638 20187.0
+1879.88879 921.9
+1880.52234 957.5
+1882.39355 879.4
+1907.05603 7733.4
+1908.88733 16029.7
+1909.88953 16452.4
+1910.89136 8824.7
+1911.89587 3597.7
+1912.86670 1058.7
+1925.94812 907.5
+1930.56604 980.8
+1932.95972 929.7
+1933.94165 1617.0
+1934.93860 1200.2
+1941.94971 2717.8
+1942.96021 6642.0
+1943.95911 5362.3
+1944.95825 2918.7
+1950.01978 960.2
+1959.96985 28527.1
+1960.97986 33833.2
+1961.98254 21437.2
+1962.98535 10170.2
+1963.98621 3889.2
+1977.98059 113376.6
+1978.66260 836.4
+1978.98364 112453.3
+1979.98730 61882.3
+1980.98877 24095.8
+1981.99304 8439.6
+1982.99072 2233.6
+1991.93445 955.1
+S	2666	2666	1538.7620246
+Z	5	7688.771
+448.79263 604.2
+506.22379 635.9
+512.48657 592.6
+532.51202 1714.0
+548.17828 625.2
+549.10040 620.2
+651.60712 591.3
+676.65326 1018.5
+709.09320 636.6
+773.24377 573.1
+795.75922 969.7
+918.66187 682.2
+1147.54602 717.9
+1188.27722 663.3
+1198.15063 3243.9
+1204.28650 734.9
+1254.08093 609.1
+1264.82068 652.0
+1281.48804 1322.4
+1282.00488 1010.7
+1354.67212 649.0
+1525.27124 936.0
+1553.40662 833.6
+1776.99976 851.7
+1819.91821 599.9
+1875.75806 778.1
+1879.15222 2546.5
+1879.56165 19776.8
+1879.96448 2216.1
+1880.46716 1035.2
+1881.12598 795.8
+1907.12292 6871.7
+S	2669	2669	809.6143246
+Z	4	3234.426
+210.77917 14902.6
+216.19633 13543.7
+216.99873 14167.9
+219.03091 13319.2
+219.40045 12975.3
+234.25632 13775.0
+276.15521 19008.8
+280.92429 14152.0
+291.58475 14025.1
+313.63217 14800.9
+324.64218 14107.1
+350.28940 22347.2
+359.13602 15196.8
+407.19537 139842.0
+482.84225 17848.3
+495.76480 16914.0
+518.22614 181240.3
+519.22900 36978.6
+526.46906 14589.6
+532.51404 60183.0
+536.23694 559882.4
+537.24060 116847.1
+569.77679 14246.6
+573.70288 16531.6
+598.45654 18529.8
+635.30493 435564.3
+636.30859 94127.5
+642.18274 22657.0
+660.97369 15508.4
+676.66138 25969.4
+686.28528 76022.6
+686.78302 38983.2
+687.27985 23386.3
+695.29095 290209.8
+695.79205 193246.2
+696.29156 66894.3
+703.83051 81450.6
+704.32947 37082.0
+704.83508 23001.1
+731.13043 17856.9
+731.85046 18804.1
+748.38971 206942.5
+749.39343 54491.7
+752.81067 16698.0
+753.73694 13897.2
+791.33582 76257.4
+791.83484 74070.7
+792.33252 56380.2
+800.67322 14636.5
+852.29596 39918.0
+854.33942 22429.2
+861.47412 80796.4
+862.48041 32037.4
+870.29468 56166.0
+883.67041 24695.0
+916.88440 15588.7
+917.97412 15122.1
+951.39105 19343.6
+965.37415 101875.6
+966.37122 34704.1
+967.40955 22259.1
+983.38678 186185.4
+984.38806 69866.4
+985.38446 18089.3
+1057.26575 22625.1
+1064.44336 117607.0
+1065.44165 79633.4
+1066.43591 21632.5
+1082.45435 365361.8
+1083.45837 137093.5
+1084.45544 59534.4
+1168.18494 17400.4
+1173.49670 92502.9
+1174.50659 70481.0
+1175.49915 29662.7
+1193.48889 27895.4
+1198.15222 87587.7
+1211.49878 95820.0
+1212.49512 50064.6
+1213.49670 27850.2
+1281.95081 17557.9
+1282.52539 17662.3
+1288.52405 154899.0
+1289.52673 97319.3
+1290.53271 54036.4
+1324.52710 22763.5
+1342.54187 47389.6
+1343.53149 25215.1
+1389.57922 107159.5
+1390.57568 60519.5
+1391.57178 36341.1
+1408.66968 46284.1
+1453.55981 17600.3
+1471.58838 65137.3
+1472.57544 38238.1
+1473.59546 24466.8
+1776.98547 16233.1
+1791.25562 20131.6
+1862.48462 16493.8
+1877.35364 20264.8
+1877.57935 17547.1
+1878.76990 24561.2
+1879.23279 53318.4
+1879.58557 477952.5
+1879.94446 45174.0
+1880.23511 21148.1
+1880.49622 16902.0
+1883.79211 16711.7
+1907.10022 183777.1
+1930.66431 25589.9
+1956.50854 17849.3
+S	2670	2670	810.1145746
+Z	4	3236.427
+256.02118 6118.3
+276.15311 12806.0
+276.22134 7012.7
+283.60831 5863.7
+313.07977 5571.6
+330.16666 15536.0
+341.42844 5563.7
+375.91080 6665.8
+407.19519 119570.4
+408.19827 12429.8
+422.50067 6809.1
+427.18323 7674.6
+428.89215 6485.1
+441.96005 5076.3
+445.19168 9599.7
+488.23779 6917.5
+488.66479 6096.3
+518.22656 160356.9
+519.23047 27807.9
+529.11151 8416.3
+532.47491 13289.3
+532.53149 11075.5
+536.23724 493335.8
+537.24042 116347.5
+538.23413 19791.5
+549.15179 9538.8
+600.29730 9289.2
+617.16498 5795.8
+617.29993 8339.5
+634.38214 6434.3
+635.30554 352692.6
+636.30872 113250.5
+637.30652 14563.7
+642.18781 7190.8
+662.11896 6289.1
+676.65674 8880.0
+677.77344 17932.9
+678.27594 22535.5
+686.28638 65392.5
+686.78699 46471.9
+687.28656 14252.9
+695.29059 270684.0
+695.79248 172265.2
+696.29236 101396.8
+696.79083 28721.8
+703.83008 68876.8
+704.33099 31751.8
+704.83270 15895.9
+731.84033 12292.4
+732.34265 12916.8
+739.20526 16134.1
+742.82361 8199.8
+743.31232 6968.9
+746.76239 7018.9
+747.82861 12043.5
+748.38989 197796.6
+749.39240 72336.9
+750.38770 9627.8
+752.33667 7239.3
+752.81366 6714.5
+754.34308 7739.6
+755.27563 18515.7
+756.82520 7470.7
+757.22070 29836.6
+772.35358 7437.0
+791.33563 59485.6
+791.83344 80061.7
+792.33398 47436.1
+792.83325 16085.0
+795.74402 8227.1
+833.88306 5953.5
+834.28217 12647.0
+839.44580 7895.6
+852.29211 37052.7
+853.30109 8739.5
+854.34595 22062.8
+858.04523 7119.2
+858.92059 7260.1
+861.47284 92779.6
+862.47510 39008.0
+863.48517 11225.9
+868.35168 7864.1
+870.30402 47289.7
+871.30786 21896.8
+871.42120 14736.9
+947.37305 8676.2
+948.36237 12764.8
+955.40210 8018.6
+965.37823 58058.7
+966.37152 26715.1
+967.36670 8920.3
+967.44012 13858.0
+983.38672 151006.6
+984.39246 59003.3
+985.38696 24812.4
+986.37665 9849.3
+1014.98999 6651.8
+1029.18127 6177.2
+1038.88708 5981.3
+1046.43408 16437.1
+1047.42188 13906.5
+1054.46289 14496.4
+1064.44360 117210.5
+1065.44519 58801.3
+1066.44165 28533.6
+1082.45435 266587.8
+1083.45728 128337.0
+1084.45984 58414.2
+1085.45483 14916.4
+1173.50049 86843.5
+1174.50183 53636.0
+1175.49915 30062.4
+1176.49927 9383.7
+1188.16028 7073.2
+1193.48938 31517.3
+1194.48560 24905.8
+1195.47607 8271.0
+1198.09912 26076.9
+1198.23840 10352.1
+1211.50208 77379.8
+1212.50061 34180.5
+1213.49255 15685.6
+1288.52869 131762.3
+1289.52893 73749.6
+1290.53076 35883.3
+1291.54138 10938.4
+1324.51770 10157.8
+1342.53479 31114.5
+1343.54297 21886.0
+1344.53992 10959.1
+1389.57471 88418.3
+1390.57532 56535.9
+1391.57300 34505.0
+1408.66626 50515.4
+1409.67249 29972.5
+1410.69348 7865.8
+1453.56189 18989.2
+1454.57996 10084.4
+1471.58386 67332.1
+1472.58228 31542.5
+1473.58020 17371.2
+1474.58362 10894.3
+1607.92004 7357.7
+1759.60144 6329.6
+1879.23975 10240.5
+1879.57166 199745.7
+1879.91235 14450.4
+1903.78540 7188.8
+1907.06677 77948.9
+1918.92078 8034.8
+1930.59875 9512.5
+S	2671	2671	855.2808246
+Z	3	2562.567
+Z	2	1708.714
+230.47250 14037.3
+231.03925 13380.8
+232.06671 13280.9
+232.76929 17024.2
+234.45668 15413.5
+235.09325 18753.5
+235.54674 16348.1
+240.13318 32699.3
+242.81206 15283.8
+246.07018 16295.4
+253.96664 19646.8
+258.14484 31163.7
+271.43741 18672.0
+271.59259 18365.6
+294.18140 50264.6
+311.20703 41706.6
+312.19012 16500.5
+329.21689 44049.5
+339.20303 105326.5
+342.26965 22220.2
+350.28964 19237.5
+355.19803 25491.6
+357.21274 192183.5
+358.21844 22794.2
+373.20740 495958.9
+374.21078 55747.5
+393.24933 28525.6
+405.17856 16390.7
+410.27515 55279.9
+411.26013 56633.3
+421.70654 14170.3
+427.21893 87403.2
+427.53729 26525.9
+428.28534 96645.5
+438.27045 413359.9
+439.18198 35388.2
+439.27441 90188.9
+456.28094 607667.1
+457.28488 146549.0
+482.64771 21999.3
+487.17859 38608.1
+488.23520 50529.6
+516.79486 35341.8
+529.93457 16493.2
+532.52063 53478.7
+539.22296 17055.5
+552.25323 20148.7
+562.61670 17425.8
+567.27643 42258.8
+585.28632 1247388.1
+586.28979 356240.6
+587.29077 65081.1
+609.76654 33138.9
+610.26349 31695.8
+610.76355 23239.5
+613.31836 23986.8
+630.40363 22344.4
+634.24762 47763.0
+646.37695 15093.2
+650.23822 31174.0
+671.91376 15466.6
+676.18134 17683.2
+676.65497 21534.9
+676.70776 17172.5
+691.29761 146650.0
+691.79913 101045.7
+692.30151 54156.3
+692.79523 22568.2
+714.34540 50447.8
+725.96704 16086.3
+726.39990 46518.5
+729.40723 16833.2
+732.35474 720590.5
+733.35858 292178.6
+734.35754 60528.8
+739.32928 19705.2
+747.83984 135923.7
+748.34180 86937.3
+748.84375 52866.5
+749.45581 50985.2
+750.46289 22245.9
+767.46381 82836.7
+768.46173 35115.6
+796.38812 24135.8
+797.05255 20962.3
+797.33759 24301.3
+798.31757 23157.5
+802.07007 71901.9
+802.40283 60785.3
+802.73730 43437.0
+803.06567 28645.4
+858.06653 19009.7
+881.42914 18013.5
+881.91614 27072.9
+882.48584 27475.3
+889.46503 68607.0
+890.46606 33631.3
+897.94727 19776.5
+898.40161 64407.7
+898.90149 55150.7
+906.94421 28142.7
+907.45166 32246.9
+907.94672 26997.8
+910.96600 21994.8
+911.40070 14953.5
+912.71631 17082.0
+915.95734 136931.7
+916.46069 118549.4
+916.96045 75655.5
+924.53625 25177.9
+939.95801 31366.6
+943.45270 18095.8
+950.87482 16760.0
+951.51624 23423.9
+954.94629 24968.6
+967.98700 17885.4
+969.52063 23816.6
+971.98358 35133.9
+980.49042 55656.0
+980.98914 72744.7
+981.49036 60167.4
+981.97406 20848.7
+989.49500 276742.3
+989.99384 275948.7
+990.50122 143638.7
+990.99725 65635.4
+996.63055 16990.5
+1004.49170 100702.9
+1005.50140 35345.7
+1009.37152 23463.0
+1032.59558 19573.1
+1036.47815 24297.5
+1036.98059 25351.5
+1044.99219 133172.3
+1045.48596 289257.5
+1045.98816 270139.1
+1046.48853 152397.2
+1046.99231 55401.6
+1047.49976 18876.3
+1050.57983 75587.7
+1051.58728 45695.4
+1052.23975 20638.4
+1052.58105 29634.3
+1053.99536 2969193.5
+1054.49683 3512344.5
+1054.99817 2031584.0
+1055.49866 967709.8
+1056.00269 256391.8
+1056.29797 19918.1
+1056.50708 77451.0
+1057.58899 19470.4
+1058.10046 16776.0
+1064.46033 31321.2
+1068.59277 118011.3
+1069.59412 78666.2
+1072.43250 21155.7
+1087.60046 26926.6
+1094.52515 33430.9
+1095.02576 75699.4
+1095.52429 113082.3
+1096.02356 87177.9
+1096.54138 33038.3
+1103.52966 989598.3
+1104.03040 1415793.9
+1104.53296 757423.4
+1105.03467 327552.5
+1105.53528 101949.1
+1118.53674 35101.4
+1122.46936 22379.6
+1144.06714 26953.3
+1144.56201 84173.5
+1145.06091 58299.8
+1145.56189 44179.4
+1153.06482 425546.1
+1153.56543 606193.6
+1154.06641 357548.4
+1154.56860 169071.5
+1155.07825 69066.6
+1163.66138 67590.1
+1164.67224 65929.5
+1181.67786 161128.9
+1182.68127 108063.7
+1183.68665 43879.4
+1197.21204 17783.4
+1198.16687 101686.2
+1201.47974 29255.4
+1202.59558 73588.6
+1203.09692 86841.3
+1203.59863 60499.1
+1204.10400 25649.1
+1208.57971 122268.8
+1209.08118 145414.8
+1209.58008 117284.6
+1210.07678 67226.0
+1211.51819 23669.6
+1218.52539 246398.0
+1219.52771 139457.6
+1220.52954 53551.5
+1221.55273 22095.9
+1235.48743 22912.4
+1246.59473 95983.7
+1247.59277 56832.1
+1248.59705 21729.5
+1282.46899 17223.9
+1282.96509 19718.1
+1326.72327 45307.9
+1327.72705 33169.6
+1344.73755 111349.8
+1345.74731 73419.2
+1357.62146 22441.9
+1358.61560 33356.2
+1375.63440 170298.0
+1376.63696 126838.8
+1377.64209 55438.9
+1381.58740 176150.0
+1382.59216 154416.9
+1383.59473 54251.2
+1459.78027 22161.8
+1461.75085 18533.0
+1474.70337 66918.1
+1475.71423 41484.4
+1494.67664 92866.6
+1495.67896 70479.2
+1496.68005 33470.5
+1505.68994 40666.8
+1506.68579 35253.9
+1522.70630 144984.9
+1523.70410 117321.7
+1524.71045 52823.4
+1525.74951 23515.9
+1574.76965 22582.3
+1621.76697 40753.2
+1681.77625 22344.9
+1720.84253 27271.2
+1721.83496 34260.7
+1734.78284 71322.2
+1735.77161 67664.5
+1736.79565 37702.3
+1830.89868 30349.1
+1833.83630 22706.2
+1876.15454 17510.0
+1878.96338 31302.2
+1879.30444 176276.0
+1879.58167 473573.5
+1907.09155 192601.3
+1930.60730 27207.3
+1960.85657 31516.9
+1961.88452 41752.9
+1962.88208 25259.8
+1977.97473 23814.0
+S	2673	2673	1282.81040793
+Z	3	3845.156
+Z	2	2563.773
+354.91049 82178.4
+358.99878 100290.0
+361.23450 105203.8
+373.20798 112460.4
+379.19183 85347.9
+381.41107 84483.7
+408.99734 101784.6
+495.84119 79407.9
+526.74902 120446.2
+527.00525 115133.6
+532.55103 292419.5
+578.23126 97827.0
+585.28558 563482.2
+586.29321 137426.4
+707.86157 96079.7
+731.19403 107508.7
+732.35413 416634.3
+733.35608 123509.5
+734.31647 92826.9
+749.45624 122894.1
+795.74780 184857.7
+861.39868 125632.4
+955.47681 108384.7
+957.48914 95878.4
+959.50690 93724.4
+1045.49402 161663.7
+1045.99561 206981.5
+1050.57654 223068.5
+1051.58496 127403.0
+1053.99390 685418.2
+1054.49451 1039614.3
+1055.00049 276072.1
+1055.49585 182807.5
+1068.59387 184170.8
+1069.58594 125000.0
+1103.49438 536677.5
+1104.02600 274905.5
+1104.50891 211026.3
+1135.37903 102939.7
+1163.67029 371446.1
+1164.66663 263335.0
+1181.67310 298855.2
+1188.05518 111786.5
+1198.23169 427624.0
+1218.52454 1204650.0
+1219.52307 603414.3
+1220.52917 253949.0
+1281.52271 343230.2
+1283.01599 108967.4
+1308.75476 146903.3
+1326.73157 189882.5
+1344.75281 121446.8
+1381.58667 1655749.1
+1382.59253 1035215.4
+1383.58655 356188.3
+1459.77393 241022.5
+1468.61475 103285.2
+1494.67346 1523046.4
+1495.67712 954557.4
+1496.68347 407157.7
+1525.58411 147739.2
+1560.46448 100096.7
+1578.59119 89618.6
+1593.74988 162987.0
+1594.74536 122043.3
+1680.76904 452507.7
+1681.77930 408563.3
+1682.78345 274312.5
+1795.79504 652806.8
+1796.79382 504351.3
+1797.79932 219686.5
+1830.91138 276746.9
+1831.90430 198293.0
+1850.20386 104837.1
+1879.55823 2943619.3
+1880.32690 116427.6
+1907.01123 1133224.3
+1930.79175 113493.8
+1959.94678 248647.0
+1960.96436 130447.1
+1962.04382 102178.3
+1977.96777 580492.8
+1978.98010 436059.8
+1979.97644 206288.5
+S	2674	2674	1538.5696246
+Z	5	7687.809
+427.54950 2027.7
+503.66885 1504.0
+513.99139 1496.6
+532.59021 4073.8
+637.72882 1624.2
+673.94965 1464.8
+676.65582 2480.6
+795.75616 2043.0
+829.17664 1712.8
+889.14825 1639.2
+1188.00525 1859.2
+1198.31616 7693.9
+1281.50989 2520.9
+1281.94836 1777.9
+1282.46362 3100.2
+1525.45471 2265.4
+1667.16858 1910.2
+1817.24890 1688.2
+1860.13147 1799.6
+1878.96790 3714.9
+1879.57593 45495.2
+1880.05188 2720.6
+1880.13184 2550.8
+1882.18762 1562.5
+1907.07092 18127.9
+1930.62976 3159.8
+S	2675	2675	1539.1718246
+Z	5	7690.82
+421.37839 642.4
+487.58090 833.8
+532.59637 2203.3
+532.63257 594.5
+582.85529 687.3
+630.43536 670.9
+662.29889 589.4
+676.64569 901.7
+705.72095 732.8
+731.15302 782.4
+795.76349 898.7
+1021.18195 696.1
+1070.34692 781.4
+1115.58728 674.9
+1198.33923 3255.1
+1215.33972 803.6
+1276.71082 664.2
+1282.02100 709.0
+1485.90308 689.5
+1624.47327 747.9
+1879.22632 1525.4
+1879.56592 18228.1
+1879.98303 2893.3
+1880.14233 1024.1
+1880.50940 1156.9
+1907.10181 7772.4
+1930.63525 905.8
+S	2677	2677	1538.7838246
+Z	5	7688.88
+532.63977 1754.8
+622.91956 729.7
+630.42737 852.6
+676.67230 688.4
+730.87256 557.7
+741.80280 693.5
+765.27319 632.3
+795.75476 1020.9
+1032.20569 632.8
+1049.56531 717.4
+1059.88269 657.2
+1198.43958 3145.3
+1281.50317 1911.8
+1282.49744 1479.1
+1283.03540 1152.2
+1525.43896 670.3
+1647.84802 762.9
+1709.19043 1769.8
+1709.50903 3179.9
+1709.82727 2186.2
+1710.20483 824.9
+1756.35913 639.9
+1877.32837 592.0
+1878.95508 1423.9
+1879.59863 18430.4
+1880.21948 1268.0
+1907.14917 6784.4
+1909.10999 600.7
+1930.60632 735.7
+1938.10107 684.8
+S	2678	2678	1282.81924127
+Z	3	3845.182
+Z	2	2563.791
+349.33981 20218.7
+373.20697 121566.3
+409.21198 20748.5
+410.27371 23651.1
+411.26157 25858.5
+416.45779 23617.2
+427.21777 146485.1
+427.54840 25648.3
+438.27078 114899.1
+439.27335 25822.8
+439.30954 21040.6
+449.06363 23500.5
+456.28024 96868.8
+462.98761 23274.1
+526.75256 135265.6
+527.00299 146377.9
+527.25513 80213.4
+527.50671 30247.9
+527.76154 23718.5
+532.64917 55840.2
+551.96063 21448.3
+567.27997 25465.3
+585.28625 599439.5
+586.28845 157101.5
+595.30823 48554.7
+598.66663 22275.7
+613.31665 33516.0
+624.36572 22709.9
+630.41925 28376.6
+676.61707 31953.8
+715.34540 21855.8
+726.40076 52195.7
+732.35529 405367.9
+733.35760 155330.1
+734.35907 26524.7
+749.45551 106388.7
+750.46399 38220.2
+767.46759 63194.4
+781.97339 21405.4
+795.76538 32506.4
+840.75574 20544.6
+843.39020 36688.5
+845.89398 20996.8
+849.52411 22460.4
+857.13379 21821.3
+860.65100 21814.0
+861.39630 123069.2
+862.40173 29536.8
+864.47632 34150.6
+882.51123 35390.2
+883.48895 29951.3
+889.17358 32755.8
+889.46674 27871.0
+924.54395 26268.5
+951.50775 52701.4
+965.53308 52213.4
+966.54773 30873.2
+969.52856 66433.0
+972.43414 52234.5
+977.73688 22091.4
+989.46289 43361.1
+990.46844 31823.7
+1004.49146 47122.3
+1005.48926 44667.3
+1032.56909 53642.8
+1033.57434 41721.3
+1044.98584 77111.7
+1045.48438 138797.1
+1045.98730 79225.9
+1046.48657 37652.8
+1050.58203 242352.6
+1051.58350 100366.1
+1053.99500 821959.2
+1054.49731 916355.6
+1054.99854 484050.0
+1055.50073 192626.5
+1056.00818 46076.3
+1057.17041 25487.4
+1064.59888 66111.1
+1065.60339 33776.8
+1068.59277 190588.8
+1069.59680 115795.9
+1070.58716 34609.4
+1082.60815 34547.3
+1095.01465 46966.9
+1103.49805 422462.9
+1104.03162 366723.7
+1104.50305 249318.7
+1105.03052 94078.2
+1105.50220 58330.6
+1122.45728 35463.8
+1127.00989 23237.7
+1128.58557 26781.8
+1145.64331 35377.4
+1146.67627 25481.9
+1163.66565 317261.3
+1164.66919 174409.6
+1165.67395 63508.1
+1181.67688 247964.6
+1182.68115 149531.8
+1198.45264 95142.2
+1201.50330 29910.4
+1202.55542 29181.1
+1218.52539 1113418.9
+1219.52734 580553.6
+1220.53271 236567.6
+1221.53528 54383.5
+1227.66260 44816.9
+1247.25916 27822.8
+1247.60229 28353.9
+1266.63049 25891.9
+1281.96167 44697.7
+1283.00122 34775.5
+1290.44690 23860.8
+1326.72632 133083.7
+1327.73389 98982.1
+1328.71167 31108.8
+1344.74597 91238.0
+1345.75269 66008.7
+1346.71387 32830.5
+1348.88525 24469.8
+1363.36719 24360.9
+1364.54297 30941.4
+1375.61609 47169.6
+1378.28845 22707.6
+1381.58911 1346211.9
+1382.59094 1006783.6
+1383.59668 379514.2
+1384.58850 93252.2
+1385.61328 26556.0
+1387.56628 21692.5
+1417.53943 25332.1
+1420.08899 25708.1
+1441.76257 37268.0
+1459.77295 131180.8
+1460.77661 81433.2
+1461.78845 34299.7
+1463.74817 24223.3
+1464.61816 23026.5
+1470.62341 27421.5
+1474.27478 23860.9
+1477.66626 51827.2
+1480.39014 20465.1
+1483.44397 22212.3
+1494.67383 1252446.4
+1495.67761 1023437.4
+1496.68201 433343.3
+1497.68237 111653.5
+1498.65698 36826.5
+1504.67114 35734.1
+1522.72107 61410.2
+1523.69836 65917.1
+1524.67810 28903.2
+1531.54614 26395.2
+1533.02332 26028.0
+1538.48022 26308.7
+1539.54565 27027.4
+1553.92944 21339.1
+1555.76282 31160.8
+1557.25269 27121.2
+1562.91870 31466.3
+1573.84180 29573.4
+1574.79736 33862.0
+1582.64185 24588.2
+1593.73572 192014.5
+1594.74976 170585.8
+1595.73584 63481.9
+1596.74377 35963.2
+1604.83801 20915.7
+1610.13550 24556.7
+1622.73132 37171.0
+1660.54700 26618.4
+1662.79565 27199.6
+1663.79272 30593.3
+1680.77124 426307.3
+1681.77258 304777.0
+1682.77979 191018.0
+1683.75879 58174.7
+1684.89392 29245.1
+1701.86670 46620.6
+1702.86670 51907.7
+1734.78308 132041.7
+1735.77698 123618.0
+1736.77527 68070.2
+1795.79749 458233.8
+1796.80139 499002.9
+1797.79883 239421.5
+1798.81616 57307.2
+1799.83289 44351.7
+1812.86584 64436.0
+1813.89063 76509.9
+1814.91272 48850.8
+1830.90796 206012.3
+1831.91614 208962.1
+1832.91174 92876.9
+1878.40942 37603.7
+1878.93884 43641.0
+1879.49756 615503.8
+1879.99561 85338.1
+1907.11072 231244.8
+1908.87268 70232.0
+1909.89246 105275.3
+1910.89111 45571.1
+1918.82971 25853.3
+1943.93420 44304.7
+1959.96106 143256.8
+1960.97595 201217.0
+1961.97717 129544.1
+1962.96277 41271.5
+1977.98010 405743.3
+1978.97986 380938.1
+1979.98206 220806.8
+1980.97913 83389.0
+S	2679	2679	1539.3882246
+Z	5	7691.902
+478.34357 637.8
+514.34375 573.1
+525.39185 536.7
+532.57001 1650.2
+648.52844 599.3
+713.52795 625.0
+731.57184 604.2
+771.57422 590.0
+795.76697 981.3
+906.64691 649.7
+985.57355 579.1
+1180.28589 686.4
+1198.27661 3375.8
+1206.94263 794.4
+1225.54443 623.1
+1251.01038 618.0
+1281.63184 3579.2
+1282.13171 8083.6
+1282.63611 8498.0
+1282.98596 1003.9
+1283.13574 6212.4
+1283.40466 607.5
+1283.63452 2627.1
+1399.94202 602.6
+1526.39893 678.0
+1579.59253 667.0
+1708.50269 6032.3
+1708.84167 27737.1
+1709.17383 52299.3
+1709.50671 66575.3
+1709.84070 58132.5
+1710.17627 36552.9
+1710.51038 19825.4
+1710.84680 6235.8
+1711.17236 3573.4
+1711.53247 1002.9
+1759.28613 695.4
+1878.90198 1265.5
+1879.57825 19271.3
+1879.82544 3470.4
+1880.26123 1280.6
+1881.08472 690.5
+1881.93323 699.1
+1906.92395 1279.2
+1907.17847 7171.6
+1930.68091 856.6
+S	2681	2681	1282.8158246
+Z	2	2563.784
+Z	3	3845.172
+340.99655 78574.8
+348.18365 77661.5
+357.41931 95507.8
+370.44678 111324.3
+373.20724 195344.3
+410.96973 76864.0
+427.21725 276597.8
+438.26978 187024.5
+450.68832 81299.5
+456.28061 143934.3
+478.47736 92543.0
+482.68854 81529.3
+514.67175 88452.6
+514.91705 87171.9
+525.35333 82811.4
+526.75195 262857.2
+527.00311 252752.0
+527.25110 157801.1
+532.59113 204190.7
+553.98309 82620.3
+573.58630 76216.0
+585.28625 1278825.6
+586.28912 318417.1
+613.47363 82393.3
+630.43207 92481.2
+668.62396 77618.6
+676.64935 147579.8
+678.27661 85678.0
+707.18903 77624.2
+731.13367 86913.7
+732.35406 916023.3
+733.36090 331504.3
+737.45178 96510.1
+749.45532 158561.6
+767.46234 126969.9
+795.75873 147394.8
+843.38171 107769.2
+846.82385 71597.1
+861.39868 273122.9
+882.49213 99051.3
+892.80591 97691.1
+951.51501 109027.4
+968.64990 93964.3
+972.43066 115175.9
+985.35638 81012.0
+1008.90112 90205.5
+1019.69617 89388.3
+1032.57141 163016.6
+1044.98792 189547.8
+1045.49219 282716.4
+1045.99377 177044.6
+1050.58093 386130.6
+1051.58655 314248.6
+1053.99524 1594010.1
+1054.49646 1576611.0
+1054.99756 938633.1
+1055.49939 204698.1
+1055.98950 99446.5
+1064.60266 130848.4
+1065.58777 112643.6
+1068.59021 360452.8
+1069.58765 175689.7
+1103.49890 971293.3
+1104.02930 748232.8
+1104.50623 445896.7
+1105.03162 188801.5
+1105.50830 127231.8
+1107.92932 86446.8
+1145.64502 129004.1
+1163.66431 584072.2
+1164.66479 324147.1
+1165.66467 127957.0
+1181.67566 557098.4
+1182.68420 311650.8
+1198.32251 356179.5
+1218.52527 2292962.0
+1219.52551 1313897.6
+1220.53271 408170.3
+1227.65991 92352.1
+1251.70850 82645.2
+1281.37219 127209.1
+1281.97461 202102.3
+1282.38562 80154.9
+1282.52881 213789.8
+1283.04785 173527.8
+1326.73071 237865.2
+1344.73328 231672.4
+1345.74646 109257.2
+1381.58728 3242708.8
+1382.58997 1804852.3
+1383.59363 655186.6
+1384.58264 133084.1
+1459.77258 226529.6
+1460.77551 180541.0
+1461.80566 110190.1
+1494.67346 2936546.8
+1495.67419 2082351.3
+1496.67786 764069.2
+1497.68066 176127.0
+1522.68579 184058.1
+1593.73779 348999.3
+1594.74280 383331.4
+1595.75049 88195.9
+1680.77100 971236.6
+1681.77478 841321.1
+1682.78296 310881.5
+1734.78076 298983.8
+1735.79016 226027.5
+1736.80872 116310.1
+1795.79407 958413.8
+1796.79834 791856.5
+1797.79834 441296.8
+1798.77161 153017.0
+1813.89209 212305.5
+1814.88330 147525.7
+1830.90344 594880.1
+1831.90759 388070.1
+1832.92090 212353.8
+1872.92407 132660.8
+1876.16394 90594.0
+1877.74365 106560.0
+1878.59924 99337.9
+1879.18982 323032.0
+1879.55859 2618573.8
+1879.95032 333296.6
+1880.53125 100385.4
+1907.12048 988428.3
+1908.85217 194264.4
+1909.86853 146706.0
+1919.00037 107533.3
+1930.67615 119402.5
+1959.98206 416363.1
+1960.98169 369054.0
+1961.95410 278975.3
+1977.97754 1093418.8
+1978.97644 866004.7
+1979.96936 397163.2
+1980.96619 152132.1
+S	2682	2682	1538.9770246
+Z	5	7689.846
+447.94366 636.2
+482.79504 711.5
+492.61389 682.8
+517.31824 905.6
+532.57434 1941.6
+546.86377 642.3
+597.69409 658.9
+630.42505 839.7
+662.05261 602.6
+749.39795 611.5
+778.35455 576.8
+795.74854 1112.4
+896.32111 612.8
+903.11627 727.5
+1057.25830 973.8
+1198.28235 3228.2
+1235.86365 692.5
+1253.00476 755.8
+1281.47168 1315.2
+1282.13318 2455.6
+1282.63159 2903.1
+1283.13660 1643.9
+1283.63062 1019.9
+1292.10486 645.4
+1525.45752 848.6
+1529.46716 733.3
+1667.16309 638.6
+1708.49683 2122.2
+1708.84265 11188.5
+1709.17615 23244.7
+1709.50854 41218.7
+1709.84131 41366.3
+1710.17834 28172.8
+1710.51184 13324.6
+1710.84912 5774.6
+1711.16577 1045.2
+1779.68311 656.2
+1844.25208 604.2
+1848.66516 619.1
+1875.32275 670.2
+1875.63159 572.1
+1876.83545 960.7
+1878.20508 910.0
+1878.98889 1345.2
+1879.31030 1987.1
+1879.56750 19906.9
+1880.21692 793.3
+1880.93140 1001.9
+1907.12280 7339.5
+1914.09790 863.0
+S	2683	2683	1538.3778246
+Z	5	7686.85
+411.70001 797.3
+532.53979 1964.3
+549.18323 716.9
+549.20532 636.6
+573.55267 717.8
+624.05029 644.0
+630.43085 898.8
+676.64960 1389.9
+715.64801 592.8
+731.15491 937.1
+795.75494 927.4
+797.22589 646.3
+858.10303 747.2
+949.71014 644.2
+979.57892 599.4
+1164.14453 672.3
+1188.21851 661.9
+1198.21008 3771.5
+1281.46045 743.5
+1281.97717 984.6
+1350.03650 647.9
+1525.46240 1034.7
+1568.42871 643.3
+1709.51782 881.9
+1799.46326 672.9
+1850.16248 595.1
+1870.28662 766.8
+1877.44080 646.5
+1877.59229 667.5
+1878.37183 977.8
+1878.96155 876.4
+1879.56934 19353.2
+1880.21582 1210.6
+1881.74841 951.1
+1906.83435 1544.5
+1907.13879 7203.8
+1918.92932 755.5
+1930.66394 1188.2
+S	2685	2685	1282.81740793
+Z	2	2563.787
+Z	3	3845.177
+350.29010 93477.1
+350.65289 74031.1
+350.66318 75328.9
+427.55103 132721.5
+512.63116 85044.0
+532.53137 187639.3
+630.41711 110352.9
+718.92828 90687.5
+745.33502 86413.7
+831.70526 86366.7
+879.48047 73329.1
+1057.23376 111089.6
+1092.57922 101382.2
+1198.18323 366721.5
+1213.43127 86632.7
+1281.98254 95010.6
+1282.33618 116596.9
+1283.00623 89226.8
+1667.27917 87803.1
+1681.92932 90523.3
+1870.27466 85249.4
+1878.32898 98889.0
+1879.29663 624368.1
+1879.53430 2500686.0
+1880.82788 90595.2
+1907.09766 1039991.2
+1930.63989 149332.1
+S	2686	2686	1282.3168246
+Z	2	2562.786
+Z	3	3843.675
+360.50107 63459.5
+414.28836 51885.0
+454.29504 63515.9
+532.54712 162527.1
+549.15063 67020.5
+585.28790 153372.5
+732.35510 122948.0
+744.85754 72649.5
+795.75336 72319.3
+877.71521 70387.6
+918.81244 63882.7
+1053.99377 170458.5
+1054.49231 174656.3
+1103.48767 126430.8
+1154.83887 64454.7
+1188.28833 93857.1
+1198.22058 294965.9
+1218.52405 374658.6
+1219.51794 187672.6
+1234.71973 66698.4
+1281.97290 86214.6
+1282.49670 86486.5
+1282.98621 81636.1
+1381.58618 426969.8
+1382.59229 272039.5
+1383.60486 80085.6
+1419.82825 60282.3
+1494.67224 335147.8
+1495.66748 253588.7
+1496.64392 72065.2
+1525.44336 77696.1
+1593.10315 66090.5
+1680.76172 131513.0
+1681.77710 92055.2
+1795.80200 188235.4
+1796.81384 102111.1
+1878.93225 153568.6
+1879.43225 731650.5
+1879.65454 1435325.9
+1880.60217 101551.4
+1880.85376 98449.0
+1906.77148 81318.1
+1907.10815 677744.3
+1930.59570 100941.9
+1977.95288 109087.2
+1978.95605 105255.9
+1979.92175 92844.4
+S	2687	2687	1538.7782246
+Z	5	7688.852
+439.69464 567.6
+452.54944 636.5
+482.67950 699.5
+532.50165 2254.0
+610.96021 621.1
+630.44159 902.0
+662.76929 706.1
+669.89459 604.0
+676.63580 1002.8
+722.21631 703.4
+795.75653 1152.8
+861.32129 627.1
+1018.39514 635.5
+1032.07666 640.7
+1047.07996 726.0
+1080.62805 764.1
+1084.35461 767.3
+1092.75159 708.9
+1166.43140 566.3
+1198.11755 3292.7
+1221.58740 696.3
+1281.93530 758.3
+1282.07751 774.1
+1282.54736 933.2
+1283.13696 1062.3
+1474.12195 655.5
+1708.83752 3649.9
+1709.17493 8746.5
+1709.50952 15146.0
+1709.84253 17434.8
+1710.17712 16737.1
+1710.51184 10070.7
+1710.84729 3696.2
+1870.34436 1036.1
+1876.74890 624.5
+1878.51563 1365.4
+1879.23792 3223.1
+1879.52954 19139.7
+1880.50159 1320.8
+1907.13916 7723.5
+S	2689	2689	1282.80940793
+Z	3	3845.153
+Z	2	2563.771
+350.28427 42290.4
+350.31769 42580.5
+381.38074 57356.8
+392.09000 50483.8
+405.88580 48553.9
+406.40872 40549.9
+435.32095 38247.5
+438.26410 64545.4
+456.27710 73746.2
+474.38428 49438.2
+476.18594 43791.3
+482.68011 58585.3
+484.60193 43069.3
+526.75293 72174.7
+527.00134 58206.3
+527.25098 44146.7
+532.51654 119735.0
+532.55707 65589.2
+535.86255 38990.1
+585.28625 345515.3
+630.43738 51690.0
+664.08966 40128.4
+676.63934 95052.7
+713.12531 43231.7
+731.15613 52754.8
+731.43671 39761.1
+732.35632 203269.2
+734.36304 42877.3
+749.45490 61708.1
+795.75592 63360.3
+861.39935 57323.1
+954.38129 46101.8
+954.88495 38324.8
+989.47485 39907.2
+1044.99475 66643.0
+1045.49536 62391.2
+1045.97717 51816.3
+1050.57593 74722.6
+1053.99316 339473.7
+1054.49500 471242.2
+1054.99475 179934.6
+1057.23511 55352.2
+1068.58899 102859.1
+1103.49951 225997.9
+1104.02515 189107.4
+1104.52173 111168.0
+1163.66382 233579.1
+1164.67017 124553.1
+1181.67395 118873.6
+1188.31543 48522.8
+1198.15479 196541.3
+1198.29114 59840.0
+1218.52368 524443.8
+1219.52954 308479.1
+1220.53369 110787.1
+1254.20728 49670.2
+1281.99622 56065.5
+1282.53125 93719.5
+1283.02527 46962.4
+1381.58679 735575.3
+1382.59216 532429.5
+1383.59338 129605.7
+1395.29517 42039.0
+1459.76843 76570.6
+1494.67334 660159.5
+1495.67896 498128.6
+1496.67908 196498.1
+1499.85168 41224.4
+1522.69775 61201.8
+1593.73083 74285.8
+1594.74146 72467.9
+1680.77039 274792.1
+1681.77637 133647.8
+1682.77283 51536.6
+1734.81372 49210.5
+1735.80273 69277.6
+1795.79163 287787.4
+1796.79932 268221.7
+1797.78247 68773.3
+1813.88623 63946.3
+1830.90881 116921.0
+1831.89856 86385.3
+1878.70166 37141.0
+1878.91174 47529.3
+1879.53870 1364335.1
+1879.86584 56027.1
+1880.16675 82091.5
+1881.19141 46052.5
+1907.12012 442005.7
+1909.87219 72185.3
+1959.92639 93358.7
+1960.97644 128262.2
+1977.96533 296234.7
+1978.97803 187322.4
+1979.98718 103655.9
+1980.96436 66440.8
+S	2690	2690	1538.7700246
+Z	5	7688.811
+420.31281 687.2
+447.17258 547.4
+532.49054 2212.9
+583.25763 709.1
+630.45154 764.3
+633.34888 637.0
+663.14600 671.6
+676.65820 935.2
+728.50970 723.6
+731.17365 765.8
+732.30969 698.1
+795.74908 875.5
+965.63483 641.2
+995.98248 689.4
+1018.58124 740.1
+1109.99927 588.5
+1157.14832 646.4
+1198.10571 2935.1
+1275.07983 710.8
+1282.40198 777.2
+1289.50708 643.4
+1358.81604 590.8
+1534.01563 734.9
+1542.56189 755.3
+1548.03992 587.7
+1708.49988 893.9
+1708.82935 2560.6
+1709.17773 5392.9
+1709.50940 8625.1
+1709.84436 12087.0
+1710.17603 10591.6
+1710.51099 6386.0
+1710.84229 2910.7
+1870.34875 719.4
+1875.91235 801.0
+1878.46057 745.0
+1878.84583 1257.0
+1879.31018 3061.9
+1879.57788 18908.7
+1880.06445 1066.5
+1880.26746 740.1
+1880.52100 1189.9
+1881.12036 1341.9
+1906.67688 884.5
+1907.02783 7008.8
+1907.35742 1216.5
+1911.14319 596.5
+1930.72021 1236.1
+S	2691	2691	1879.94424127
+Z	3	5636.557
+Z	2	3758.041
+532.51373 1534.3
+616.94165 647.7
+620.78986 615.6
+630.39154 851.7
+676.65411 790.5
+973.53339 618.7
+1019.65143 591.7
+1021.15533 781.1
+1116.58838 579.6
+1198.14795 3372.0
+1241.36914 610.8
+1262.07288 659.4
+1281.92981 541.3
+1282.03015 784.7
+1311.40930 742.1
+1428.83484 639.1
+1776.96619 715.7
+1870.53137 729.4
+1879.22546 3798.2
+1879.54114 19076.9
+1906.77539 989.2
+1907.04553 7304.0
+1930.59277 910.2
+1958.02075 656.6
+S	2693	2693	1282.81424127
+Z	2	2563.781
+Z	3	3845.167
+342.27704 2608.0
+372.81512 2001.3
+373.20776 23471.0
+393.25067 2976.1
+409.21149 3563.6
+410.27667 2472.9
+411.25980 4542.0
+427.21872 31061.2
+427.54553 3533.6
+428.22119 8653.1
+428.28683 6431.8
+438.27106 33061.7
+439.27432 4868.5
+442.21356 2068.7
+451.16476 2002.9
+456.28177 23707.4
+457.28189 3132.4
+488.23718 4390.8
+508.27280 5454.6
+514.24878 3923.6
+525.30737 3468.2
+526.28485 3684.5
+526.75354 31207.6
+527.00354 36957.8
+527.25500 21498.9
+527.50574 8926.7
+527.75745 2675.4
+530.26501 2477.0
+532.44647 6260.6
+547.52197 3559.5
+547.77179 3780.6
+549.16229 3354.6
+551.34369 2811.3
+567.27704 7707.8
+569.32941 1814.0
+569.35992 2117.7
+577.29895 4147.6
+585.28705 143054.1
+586.28992 38195.9
+587.29346 7488.3
+595.30652 10062.4
+606.35156 2511.8
+613.31519 7076.2
+624.37030 9926.4
+626.74200 2230.5
+630.41333 3003.3
+634.25024 2555.4
+636.36975 2971.0
+650.38550 2954.2
+654.38623 2543.1
+668.40265 4425.5
+690.38708 2607.8
+694.36523 2703.9
+708.39429 10458.5
+709.38580 2442.0
+712.38812 4406.4
+714.34802 8704.3
+715.35175 3126.5
+726.40479 13066.1
+727.40741 6579.4
+732.35565 96477.6
+733.35931 33696.1
+734.35870 10330.6
+735.36957 4631.0
+737.45172 4008.2
+749.45740 23445.8
+750.46014 7756.2
+767.46704 15257.7
+768.47052 5639.7
+795.75610 2862.1
+811.44861 3480.3
+825.46680 4656.7
+831.25372 2188.8
+843.38818 9873.0
+844.39294 3296.0
+852.43323 5992.7
+861.39850 29416.8
+862.40100 11005.7
+863.40198 4012.8
+864.47791 5731.3
+866.45740 4293.1
+871.45477 6111.9
+882.49274 11105.5
+883.49084 4344.1
+889.46674 8428.7
+890.46820 4051.0
+891.45239 3897.5
+892.46466 2939.6
+924.54846 3403.9
+933.50995 5627.2
+934.50317 3521.0
+947.52234 3736.5
+951.51666 12893.9
+952.51672 7660.3
+953.50043 2702.0
+956.56934 2362.8
+965.52844 12140.1
+966.52661 4579.9
+969.52667 13883.0
+970.44580 2056.9
+970.52911 6702.6
+972.43097 13549.7
+973.43622 6136.5
+983.54120 6173.7
+989.45758 14711.4
+990.45898 7467.3
+1004.48480 13455.3
+1004.57001 3100.1
+1005.49164 5654.8
+1006.49738 2400.9
+1009.39081 6873.1
+1010.39532 5232.1
+1015.55316 3114.0
+1028.44055 2453.4
+1032.57288 18514.7
+1033.57605 10435.0
+1034.57947 3383.5
+1044.99255 23667.8
+1045.49146 29552.6
+1045.98853 22716.4
+1046.49146 10217.9
+1050.58398 52681.9
+1051.58508 27801.2
+1052.58582 8518.5
+1053.99597 172757.3
+1054.49805 187937.7
+1054.99951 114914.1
+1055.50134 49632.3
+1056.00208 14875.8
+1056.50916 4024.5
+1064.59937 12794.3
+1065.60498 10142.1
+1066.60876 3842.8
+1068.59290 39714.0
+1069.59546 18291.6
+1070.59399 5965.3
+1072.40125 2394.5
+1082.60986 7564.9
+1083.61597 3127.5
+1086.47339 8881.8
+1087.47546 3480.5
+1094.52332 5894.6
+1095.02771 7219.1
+1095.52661 6423.0
+1096.02686 3788.7
+1103.50024 112398.4
+1104.03247 85889.3
+1104.50220 63782.3
+1105.03540 23198.8
+1105.50549 22215.4
+1106.01636 2664.1
+1106.51501 4002.1
+1122.46997 8160.9
+1123.46509 5110.4
+1128.58203 5246.5
+1129.58301 3351.8
+1145.65344 13088.4
+1146.66907 6658.2
+1147.67139 2640.9
+1153.06104 6187.0
+1153.56506 4190.1
+1154.05859 3512.5
+1163.66687 67997.3
+1164.66907 37922.1
+1165.67297 13599.7
+1166.68005 3386.2
+1181.67822 46813.8
+1182.68225 32393.8
+1183.68018 7923.6
+1197.99536 10815.9
+1201.50464 9022.6
+1202.51624 6489.0
+1203.54468 3927.1
+1218.52637 237804.3
+1219.52893 146020.3
+1220.53247 58397.0
+1221.53589 16670.8
+1227.66223 7028.7
+1228.67590 4529.0
+1234.72144 2468.1
+1245.65540 2766.8
+1246.59460 4837.3
+1281.49475 3258.1
+1282.01355 3993.2
+1282.47534 2992.5
+1283.02417 2875.8
+1308.70007 5102.9
+1326.72986 28995.7
+1327.73621 20139.4
+1328.73657 8061.6
+1344.74219 24379.8
+1345.74658 14500.8
+1346.74976 3975.0
+1359.63440 3198.9
+1363.57239 5921.5
+1364.57300 9059.9
+1365.55408 4847.9
+1375.63013 9858.0
+1376.64563 5566.4
+1381.58984 310489.6
+1382.59277 229927.5
+1383.59570 97711.4
+1384.27039 2643.4
+1384.59766 28761.4
+1385.60291 6024.4
+1387.05188 3332.3
+1441.76135 4834.2
+1442.77039 4001.6
+1459.76685 31004.1
+1460.77246 19761.7
+1461.77673 7744.4
+1474.70850 2886.4
+1476.66260 5056.8
+1477.66003 8359.6
+1478.65149 5536.0
+1479.65027 2668.3
+1487.67297 2534.1
+1488.63892 3334.5
+1494.67505 305627.8
+1495.67761 250281.8
+1496.68030 115076.5
+1497.68201 34970.5
+1498.68262 9427.8
+1501.74780 2549.7
+1504.68652 5949.4
+1505.69238 8104.8
+1506.68311 5761.0
+1522.70532 15250.3
+1523.71094 13255.8
+1524.71118 7303.7
+1555.78711 2807.1
+1573.81824 10188.2
+1574.81543 6460.6
+1575.80664 3146.3
+1593.74219 41736.4
+1594.74622 41380.0
+1595.74609 19587.9
+1596.76489 6741.9
+1621.78650 4808.3
+1622.78137 4791.8
+1662.76428 4076.3
+1663.77454 4739.4
+1664.79150 3702.6
+1680.77271 97211.2
+1681.77698 85472.2
+1682.78040 42035.7
+1683.76245 9666.5
+1684.88037 4496.5
+1685.85950 3095.3
+1701.86938 16327.4
+1702.87439 11395.3
+1703.87219 5474.4
+1704.87854 3137.2
+1717.76062 3903.5
+1721.84656 3294.0
+1734.78259 28344.6
+1735.78613 27082.1
+1736.78552 18430.2
+1737.78906 5822.1
+1777.80029 2997.7
+1778.77600 9006.6
+1779.77441 5949.1
+1780.79675 4147.7
+1794.86951 3698.0
+1795.79871 113072.8
+1796.80273 104268.7
+1797.80347 60327.8
+1798.81030 22777.0
+1799.80615 6264.2
+1806.39978 2147.8
+1812.90454 11416.0
+1813.89746 21403.7
+1814.89368 15289.2
+1815.90271 5317.9
+1816.86865 3312.4
+1830.91016 48092.9
+1831.91272 55096.6
+1832.91882 23345.8
+1833.91675 9069.8
+1834.86572 5583.7
+1835.86108 4347.0
+1873.10120 2390.3
+1877.45496 3269.7
+1879.50354 69062.2
+1879.80139 5507.1
+1906.24902 3155.7
+1906.87158 15747.6
+1907.16479 13083.9
+1908.88013 20668.8
+1909.88574 19895.9
+1910.88696 10486.1
+1911.90698 4520.9
+1924.94116 3101.6
+1933.93872 2873.0
+1942.00195 3387.3
+1942.96753 6624.1
+1943.93250 6709.7
+1944.95557 3421.3
+1959.96851 34930.4
+1960.97485 47666.6
+1961.97913 29768.9
+1962.97803 14674.4
+1963.97522 3344.5
+1977.97888 98437.3
+1978.98047 106577.9
+1979.98486 49597.1
+1980.98523 21647.5
+1981.98340 5221.1
+S	2694	2694	1538.7758246
+Z	5	7688.84
+427.54193 783.3
+454.16837 588.2
+482.65375 778.3
+487.86987 642.3
+532.46704 2387.9
+540.70569 590.8
+545.42792 737.7
+548.45129 825.3
+642.20032 605.6
+676.63678 1162.4
+692.35284 618.8
+795.74719 786.7
+831.87061 699.8
+954.89923 690.2
+1188.95544 629.5
+1198.04700 3252.7
+1198.80920 603.6
+1281.45642 715.2
+1282.52795 763.6
+1282.96094 676.3
+1337.42480 933.9
+1412.57947 645.4
+1422.85034 617.6
+1489.76245 557.8
+1533.28210 738.3
+1551.15942 663.0
+1667.19580 786.8
+1775.26660 646.7
+1877.23132 592.0
+1878.24683 1054.1
+1878.54285 769.0
+1878.77905 1131.6
+1879.04578 1808.8
+1879.22681 2385.5
+1879.52856 19294.0
+1880.02905 2701.0
+1907.06030 7422.0
+1930.60718 1139.7
+S	2695	2695	1283.3148246
+Z	3	3846.669
+Z	2	2564.782
+349.74506 510.3
+373.20786 8690.4
+381.37662 716.7
+384.70679 688.9
+393.25027 919.6
+397.36877 604.4
+409.20834 1704.5
+410.27509 1738.6
+411.26035 1553.0
+412.10312 620.6
+427.21878 10866.4
+428.22330 2269.3
+428.28696 2735.3
+438.27121 10528.3
+439.18134 931.3
+439.27362 2132.6
+441.50842 601.0
+456.28192 7677.0
+457.28677 1786.9
+488.23453 1277.0
+507.29828 862.9
+508.27689 1179.4
+514.25018 1456.0
+515.41052 777.1
+519.32654 672.5
+525.30377 1101.8
+526.28424 1618.5
+526.75281 13296.1
+527.00366 15374.4
+527.25427 9545.3
+527.50354 3783.1
+527.75787 1254.1
+530.26526 1210.0
+532.50195 1809.6
+547.52289 1802.7
+547.77295 1863.2
+548.02032 1385.0
+549.18677 716.5
+551.35388 1038.3
+567.27844 2242.3
+577.29675 1361.4
+585.28766 45340.9
+586.29065 13566.5
+587.29315 2099.8
+588.28424 865.1
+595.30743 3099.1
+596.30939 1324.7
+606.36255 761.5
+607.85309 631.5
+613.31940 2844.5
+614.31079 727.7
+624.37018 2339.6
+636.36890 1341.0
+640.32605 732.0
+648.37756 658.7
+650.38336 1943.7
+651.38605 914.6
+654.38287 703.0
+668.40057 1456.9
+676.62311 1467.5
+690.38812 774.0
+694.37909 1376.3
+699.41705 735.1
+708.39240 3105.9
+709.39752 1413.6
+712.38165 829.0
+714.34467 2505.4
+715.35181 1997.5
+726.40369 3712.1
+727.40723 1521.4
+731.14447 640.0
+731.44702 1633.1
+732.35583 31849.9
+733.35870 13881.7
+734.36310 2999.0
+735.36353 1093.6
+737.45367 1073.7
+740.40820 1257.2
+749.45569 7681.0
+750.45819 2686.1
+753.37872 973.0
+767.46735 5464.1
+768.47107 2359.8
+795.75385 761.8
+796.22455 618.3
+797.31195 760.2
+811.45941 1322.5
+825.47388 1411.7
+843.39160 1777.1
+844.39020 959.7
+852.43414 1661.1
+853.44446 1229.0
+861.39905 9969.5
+862.40173 5572.2
+863.40894 1328.2
+864.47955 2797.9
+865.48767 1352.9
+867.31940 674.5
+871.45142 2134.8
+872.46063 1627.3
+873.45367 702.6
+882.49353 4865.7
+883.49353 1501.3
+889.46704 2833.0
+890.46527 1052.2
+891.45630 4115.2
+892.46631 1375.4
+893.46686 845.0
+924.54529 1479.0
+933.49524 1368.2
+934.50818 1022.9
+940.52307 1187.8
+948.52325 778.9
+951.51538 5555.9
+952.51758 2259.4
+953.51361 851.9
+953.99426 918.9
+954.49628 989.9
+965.52637 3756.3
+966.52710 2253.4
+969.52448 4708.4
+970.52240 2013.1
+971.45703 1144.2
+972.43079 4646.7
+973.43524 2866.5
+976.54346 933.6
+983.53772 1716.9
+988.54456 1576.4
+989.46082 4768.7
+990.45990 2720.0
+991.46161 1112.7
+1004.47784 3397.9
+1004.55560 3388.4
+1005.48352 2317.0
+1009.39130 2524.8
+1010.38873 1503.4
+1023.61420 1158.3
+1029.55103 642.6
+1032.57422 7052.9
+1033.57617 3370.1
+1034.57068 1366.7
+1044.99451 7352.0
+1045.48999 9959.7
+1045.99182 7656.0
+1046.49390 4779.8
+1046.99353 2015.5
+1050.58337 17850.3
+1051.58667 9868.5
+1052.59033 4101.1
+1053.99658 62883.5
+1054.49817 63986.2
+1054.99976 40862.8
+1055.50061 17056.8
+1055.99963 6523.9
+1056.50549 1572.2
+1057.20898 936.3
+1061.55969 922.9
+1064.59644 5134.2
+1065.60461 3368.1
+1066.61108 855.2
+1068.59277 14254.5
+1069.59631 9256.2
+1070.59851 2214.2
+1072.41272 1150.5
+1082.60864 2791.5
+1083.60449 1767.7
+1084.80884 677.9
+1086.46558 2054.9
+1087.47522 1601.6
+1087.60205 871.5
+1093.72681 748.7
+1094.52490 2206.3
+1095.02258 3092.6
+1095.52295 2784.4
+1096.02344 1432.3
+1096.51941 779.7
+1100.54797 594.2
+1103.50073 41517.6
+1104.03198 29052.6
+1104.50598 24292.0
+1105.03516 8504.4
+1105.50684 7961.2
+1106.51086 2996.8
+1116.15637 677.0
+1118.53674 909.7
+1122.47852 2940.4
+1123.47974 1873.2
+1128.59143 2558.8
+1129.58777 1064.8
+1145.01807 792.4
+1145.65381 4908.1
+1146.56018 936.3
+1146.67273 2474.1
+1151.37830 826.7
+1153.06775 2724.7
+1153.57361 3008.5
+1154.06970 1967.2
+1154.69800 605.2
+1163.66650 24220.4
+1164.66870 15511.5
+1165.67114 5420.3
+1166.66931 1515.6
+1181.67908 22715.8
+1182.67993 14481.3
+1183.68628 4513.2
+1184.67749 1308.8
+1187.67236 1050.7
+1190.17419 799.1
+1198.11902 3072.8
+1200.59656 903.7
+1201.50830 2912.9
+1202.52271 2281.6
+1203.09753 1919.1
+1203.55017 913.1
+1206.56604 699.6
+1209.08459 2504.2
+1209.68262 1084.0
+1214.09888 1192.8
+1218.52625 92978.3
+1219.52893 62428.8
+1220.53198 23041.4
+1221.53784 7198.5
+1222.53564 1369.9
+1226.61975 811.1
+1227.65552 2439.2
+1228.67590 1480.2
+1235.47498 891.9
+1235.69849 735.2
+1243.25085 703.5
+1246.59875 1703.4
+1246.75928 684.0
+1249.13940 849.0
+1249.63367 1097.1
+1308.68689 1173.2
+1309.71887 1142.1
+1326.72974 11100.3
+1327.73254 9581.6
+1328.73474 3556.4
+1329.75269 934.1
+1344.74097 13302.5
+1345.74402 9642.7
+1346.74634 3712.3
+1347.75903 1306.6
+1348.57385 1431.0
+1357.60547 958.7
+1358.62109 867.0
+1359.60254 1000.7
+1363.58008 1447.1
+1364.57458 2984.4
+1365.56238 2474.4
+1375.63525 3207.1
+1376.22717 836.3
+1376.63928 2528.0
+1377.63757 1673.8
+1381.58936 116645.4
+1382.59216 91311.0
+1383.59534 39356.2
+1384.59802 12368.2
+1385.58447 2165.2
+1387.04724 1256.9
+1441.76599 1848.4
+1442.76575 1566.7
+1459.76978 13244.5
+1460.77051 10456.6
+1461.77209 4972.3
+1476.65771 1719.9
+1477.64929 2771.9
+1478.65405 2030.1
+1479.65869 1221.7
+1488.65295 1012.1
+1489.63403 948.9
+1494.67407 114465.2
+1495.67688 97635.6
+1496.67957 46372.8
+1497.68250 14384.7
+1498.67700 3637.8
+1504.68237 2299.6
+1505.68530 2975.0
+1506.68506 2325.6
+1507.68835 790.2
+1522.70471 5230.6
+1523.70557 4457.8
+1524.70837 1653.9
+1556.79810 1690.4
+1573.81177 4226.1
+1574.80847 3520.7
+1575.82190 2268.7
+1576.69775 1018.8
+1593.74304 15766.3
+1594.74414 15553.4
+1595.74658 7721.2
+1596.75354 2207.5
+1597.74634 925.1
+1604.76147 1353.3
+1621.76477 1580.3
+1622.76721 1392.6
+1650.68530 674.7
+1662.74988 855.5
+1663.75537 2023.2
+1664.75793 1262.1
+1680.77405 39757.5
+1681.77698 36692.8
+1682.78040 17210.4
+1683.76453 5822.9
+1684.87671 2335.6
+1685.85803 1851.8
+1701.86487 6198.4
+1702.87109 6217.8
+1703.87756 2860.2
+1717.78430 1124.5
+1718.76453 945.3
+1719.70361 829.6
+1720.84705 1245.4
+1721.88086 840.3
+1722.85461 1046.6
+1734.78271 11509.8
+1735.78870 12894.8
+1736.78931 5830.9
+1737.79919 2414.1
+1778.77112 3065.4
+1779.78308 1709.7
+1780.80762 895.5
+1794.87976 869.1
+1795.79736 44275.3
+1796.80225 42945.5
+1797.80322 24482.4
+1798.81213 8907.0
+1799.81299 2452.1
+1812.89966 5391.8
+1813.90002 7743.2
+1814.89807 5396.6
+1815.90649 2743.1
+1830.91052 23266.9
+1831.90881 22129.1
+1832.91370 12538.4
+1833.91748 4528.9
+1834.84863 2137.5
+1835.85522 965.0
+1870.19775 664.2
+1878.69092 820.3
+1879.48865 20344.9
+1879.78809 2629.1
+1880.36670 1256.7
+1907.10596 7122.4
+1908.88159 7047.8
+1909.88538 8426.2
+1910.89453 4596.5
+1911.87268 1467.2
+1918.92957 730.1
+1932.95984 800.0
+1933.98682 898.0
+1941.93738 1555.1
+1942.95959 3409.5
+1943.94800 2760.6
+1944.97998 1111.1
+1959.96790 13698.3
+1960.97534 18842.3
+1961.98108 10501.1
+1962.98352 5808.5
+1963.97852 1504.5
+1977.97778 45700.9
+1978.98096 48170.0
+1979.98401 27476.9
+1980.98950 11693.7
+1981.98828 3875.0
+S	2697	2697	1879.95640793
+Z	3	5636.594
+Z	2	3758.065
+532.47174 1796.1
+618.05939 624.5
+630.46674 640.3
+676.68933 748.0
+795.74017 1092.3
+970.18665 685.9
+1057.30823 718.3
+1090.94702 686.7
+1144.91406 593.8
+1198.04895 3504.5
+1477.65894 786.7
+1525.59607 849.4
+1556.11804 726.6
+1662.02734 685.1
+1869.99060 758.7
+1870.28821 825.8
+1878.19910 839.4
+1878.65662 810.6
+1879.40491 5530.5
+1879.64392 18181.8
+1880.72217 743.5
+1881.14417 743.9
+1881.39539 809.5
+1907.11060 7513.6
+1930.79529 1018.7
+1984.26367 659.1
+S	2698	2698	1907.50940793
+Z	3	5719.253
+Z	2	3813.171
+532.48376 2144.8
+570.68579 711.8
+676.64301 889.4
+781.18463 583.1
+795.75806 1066.6
+798.01129 712.8
+809.82111 595.9
+954.99408 614.4
+1006.49445 581.4
+1017.94830 691.6
+1020.83215 742.3
+1187.88123 990.2
+1189.60376 698.3
+1198.08484 3554.2
+1373.76843 714.2
+1378.59314 621.0
+1563.83459 2058.3
+1564.84692 1000.5
+1776.99084 989.2
+1871.80872 855.1
+1873.00928 908.0
+1879.00500 1122.9
+1879.54492 20155.7
+1880.10327 1448.8
+1907.14844 7556.0
+S	2699	2699	861.365241267
+Z	3	2580.82
+Z	2	1720.883
+228.37799 791.1
+241.37030 831.2
+253.11337 824.6
+254.33673 842.9
+263.80685 978.1
+267.28247 804.1
+267.35870 829.5
+280.19919 895.0
+289.49939 792.6
+297.35172 701.2
+309.85153 864.1
+350.28864 1100.5
+357.21271 1738.0
+381.38339 827.3
+391.77109 828.4
+391.82602 815.2
+427.57254 887.0
+438.27097 1274.5
+439.26376 758.9
+447.37827 829.0
+456.28055 2500.6
+532.51941 2463.2
+539.20599 927.1
+541.74762 783.6
+543.62213 800.5
+569.28766 887.8
+585.27997 1293.7
+586.05585 1069.7
+601.32910 1010.2
+630.44617 1099.5
+652.29376 1219.1
+676.66522 1378.1
+731.16815 853.0
+795.74713 1310.5
+843.37842 2711.7
+849.57831 800.4
+850.86450 876.4
+907.83087 971.0
+933.33563 935.9
+934.42194 1507.7
+935.41217 953.8
+953.42450 1020.9
+1000.74030 870.8
+1063.62695 833.7
+1068.59326 1168.2
+1070.84009 2467.5
+1071.18274 1417.1
+1084.11377 786.8
+1181.68884 1354.3
+1198.16309 4027.9
+1205.19495 965.0
+1221.83569 1124.9
+1247.59070 1257.2
+1264.60156 9256.3
+1265.60803 3965.1
+1344.73706 2486.2
+1363.67126 5065.6
+1364.66797 1882.5
+1422.63940 820.5
+1525.49963 1132.2
+1870.37817 944.3
+1877.15784 1231.7
+1878.39404 1204.7
+1878.58545 1442.9
+1879.18018 1139.2
+1879.31531 1778.8
+1879.58887 25454.3
+1880.82495 1271.6
+1896.45129 818.7
+1906.79077 1539.9
+1907.09399 9066.1
+1907.75757 779.7
+1912.83862 894.2
+1930.73694 1195.7
+S	2701	2701	1879.9398246
+Z	2	3758.032
+Z	3	5636.544
+532.49640 682.2
+532.53827 1633.8
+549.16870 820.9
+655.08435 667.5
+676.65271 908.0
+1017.46466 679.3
+1026.70044 716.9
+1057.26196 830.3
+1126.87646 627.9
+1198.20642 3038.7
+1279.37195 869.6
+1430.56262 669.6
+1450.84106 704.2
+1788.33582 783.5
+1878.83459 1042.1
+1879.20068 1441.6
+1879.55518 19790.3
+1879.92749 1682.2
+1907.05200 7151.4
+1927.84729 595.1
+S	2702	2702	1907.5028246
+Z	3	5719.233
+Z	2	3813.158
+532.54401 1923.2
+549.10706 812.5
+630.34857 998.6
+654.99243 648.4
+676.66083 783.9
+678.61584 682.7
+1056.20642 655.0
+1188.13171 714.3
+1196.63831 1185.1
+1198.21594 3226.3
+1363.71680 1289.8
+1425.68567 1233.1
+1450.75525 910.2
+1472.81360 1010.7
+1511.80981 710.4
+1533.85315 813.3
+1538.75562 1576.9
+1539.78687 1340.9
+1545.82458 1348.0
+1546.81812 1977.5
+1563.84082 24541.8
+1564.84644 18775.9
+1565.84460 1751.5
+1679.84766 804.2
+1773.93274 815.1
+1791.94666 10782.3
+1792.95154 8940.0
+1793.95654 3223.4
+1815.96985 1316.6
+1816.95361 827.5
+1830.90247 755.3
+1846.94897 1758.6
+1847.95996 1361.0
+1870.32520 898.5
+1871.94250 1523.3
+1872.92029 1365.8
+1878.49695 961.9
+1879.09436 1435.7
+1879.59143 19899.2
+1880.11841 1396.0
+1880.74670 883.7
+1907.12695 7698.4
+1930.41553 869.9
+1931.71191 761.4
+S	2703	2703	1198.60699127
+Z	3	3592.546
+Z	2	2395.366
+328.16385 735.8
+350.27979 671.2
+375.63184 614.8
+427.56491 835.3
+470.88702 679.2
+485.22879 576.2
+486.27441 625.7
+491.40793 775.0
+517.33228 739.6
+532.51581 1917.7
+558.42206 622.6
+566.60437 586.6
+573.55334 801.1
+607.32031 722.7
+630.44055 1022.2
+676.63861 845.9
+715.17096 598.5
+742.44482 645.2
+795.75629 1181.2
+836.41315 688.0
+846.37701 639.8
+1054.73035 691.2
+1109.04041 753.8
+1117.35706 678.4
+1171.61060 720.7
+1188.15784 745.0
+1198.15369 3472.9
+1305.40833 691.9
+1376.36011 757.1
+1421.20154 653.5
+1478.28796 689.0
+1525.49854 803.8
+1613.28699 651.6
+1625.58057 703.1
+1825.33899 688.9
+1870.42053 856.7
+1879.16809 1845.9
+1879.53772 19702.8
+1879.92566 1046.1
+1899.01807 727.1
+1907.05872 7837.1
+1930.70667 937.8
+S	2705	2705	1273.5588246
+Z	2	2545.27
+Z	3	3817.401
+350.28470 641.2
+387.95425 690.8
+399.80115 540.4
+399.82468 524.8
+438.26923 1063.0
+487.66434 727.9
+522.24939 908.2
+522.49567 738.7
+532.48553 963.6
+532.51965 1362.2
+585.28748 2463.5
+676.64587 990.3
+732.35529 1442.7
+738.32385 711.8
+795.73804 1181.2
+890.51691 661.0
+953.98224 708.3
+954.50165 934.0
+954.98914 1674.2
+955.49890 710.7
+1036.49377 1065.4
+1044.98938 6204.2
+1045.49146 5174.7
+1045.99109 4038.1
+1050.58386 1956.4
+1051.58997 1089.8
+1068.59277 1258.8
+1094.52380 2276.5
+1095.02429 3038.5
+1095.52490 909.2
+1160.18005 567.6
+1163.66565 2865.4
+1164.66650 1290.3
+1181.67834 2384.4
+1182.66846 884.2
+1198.09070 2762.0
+1198.20618 1938.1
+1200.51428 8050.8
+1201.51526 3769.5
+1202.52319 961.6
+1327.69287 883.2
+1346.56433 631.6
+1360.72620 645.5
+1363.57568 11442.2
+1364.57849 6208.6
+1365.57703 1372.0
+1392.65112 652.6
+1476.65637 9359.3
+1477.66602 6976.0
+1478.66003 1644.0
+1575.72998 1280.4
+1589.87207 702.4
+1592.10132 757.2
+1662.76013 3342.2
+1663.73840 2158.2
+1664.76697 1048.3
+1707.19397 817.4
+1716.75757 1047.7
+1777.78906 4625.4
+1778.78052 2906.1
+1779.79578 1452.0
+1812.89172 1449.0
+1813.89636 1029.8
+1870.40613 1091.9
+1876.07458 903.7
+1879.21655 1757.4
+1879.54919 20108.3
+1879.81824 1623.3
+1884.30127 749.6
+1891.03357 635.3
+1906.92468 4376.2
+1907.15015 3707.2
+1907.97522 7397.0
+1908.97827 3667.0
+1913.75354 628.4
+1930.72107 648.9
+1959.96204 3465.8
+1960.96375 2117.5
+1961.97424 1245.9
+S	2706	2706	1430.7529771
+Z	4	5718.98061
+408.31235 726.5
+420.32272 608.4
+482.04111 640.5
+532.53345 2101.2
+630.47559 892.8
+676.66132 838.3
+712.53284 537.9
+795.75549 820.0
+799.74615 659.6
+834.19586 618.7
+835.46564 573.5
+858.17902 533.9
+907.44659 653.5
+915.60492 637.4
+982.01630 762.8
+1012.60895 728.2
+1013.72729 649.3
+1014.47241 797.4
+1019.68848 703.2
+1057.28369 771.3
+1108.53149 709.5
+1109.30542 626.7
+1198.18860 3348.7
+1879.31177 1436.8
+1879.59204 20002.6
+1907.11243 7304.0
+1907.97180 2280.4
+1908.49524 1950.0
+1908.99219 2619.2
+1909.50500 1194.7
+1930.77637 905.2
+1942.16943 703.6
+1982.31274 704.7
+S	2707	2707	848.4692246
+Z	4	3389.8456
+230.81540 554.4
+233.32086 650.8
+239.03857 636.6
+271.92667 889.5
+285.68353 532.6
+310.10919 605.3
+331.15118 557.5
+336.95300 553.3
+352.71854 570.1
+381.34558 690.0
+389.46396 599.1
+390.19745 2769.5
+412.19727 1024.5
+425.36591 643.2
+427.52225 680.3
+439.85172 711.1
+503.28018 995.6
+532.51337 1748.7
+540.07501 655.7
+549.13141 757.5
+565.31476 676.5
+574.32025 5176.8
+574.82159 2637.7
+575.32416 846.0
+577.27533 11035.4
+578.27777 1909.4
+585.28680 1242.5
+589.62915 567.2
+597.26483 563.2
+609.28491 603.7
+616.36414 1920.8
+630.38251 967.4
+665.33850 3011.7
+676.65082 1198.3
+683.34888 7111.9
+684.34839 1706.1
+690.35840 944.4
+701.45813 633.3
+715.37775 891.9
+765.37323 1144.0
+779.42493 1102.6
+781.08466 974.2
+781.42645 921.6
+795.76001 882.3
+822.58649 793.9
+842.64764 653.1
+886.93152 771.0
+919.48486 1233.9
+919.81995 4204.2
+920.15771 1711.5
+920.48834 1388.1
+922.39545 742.8
+937.49609 2681.4
+963.18500 2826.8
+963.51813 2889.8
+963.85266 2754.3
+964.18427 1864.0
+974.50061 2197.0
+975.00305 681.7
+1000.87952 2002.0
+1001.21539 5321.5
+1001.54645 4051.1
+1001.88409 2516.7
+1024.03613 5745.0
+1024.53760 6530.4
+1025.04138 3772.3
+1025.54590 1194.2
+1044.98901 5593.2
+1045.48926 2751.5
+1094.53406 1265.9
+1105.57324 662.8
+1121.56006 1853.2
+1122.09546 11386.3
+1122.59790 14251.4
+1123.10120 9507.8
+1123.60571 2826.0
+1144.04553 794.2
+1144.55444 794.3
+1147.62830 1876.3
+1181.06921 807.6
+1198.15198 3060.2
+1212.98169 771.7
+1227.16199 952.3
+1285.66895 675.1
+1297.18896 1888.4
+1297.68286 1201.9
+1298.69360 912.4
+1419.11499 703.5
+1438.22192 628.6
+1525.36182 1007.0
+1735.81287 643.0
+1870.35449 780.5
+1878.88599 1236.1
+1879.04944 1295.6
+1879.54993 20464.0
+1879.93750 887.1
+1880.21570 1258.1
+1882.73254 773.6
+1907.16809 7155.4
+1930.54822 1039.7
+S	2709	2709	1273.5588246
+Z	3	3817.401
+Z	2	2545.27
+350.27875 903.6
+352.58853 585.3
+381.36389 584.0
+444.09412 546.2
+448.51636 718.4
+450.87616 632.8
+470.09137 700.2
+482.64005 621.6
+532.49725 1638.4
+549.16064 920.5
+585.29742 710.7
+648.91882 702.1
+653.99371 640.9
+676.60822 903.9
+715.72968 594.4
+781.90466 642.8
+781.96106 590.4
+794.46594 603.4
+795.74182 969.6
+797.31519 644.9
+814.29718 568.0
+858.44452 750.0
+908.99554 711.1
+953.87286 835.1
+1044.97974 1186.3
+1045.49036 1288.6
+1095.04443 713.5
+1096.43774 705.0
+1198.10999 3425.2
+1198.31165 619.3
+1201.51831 924.2
+1363.57300 2142.0
+1364.58984 789.3
+1365.56238 1059.6
+1410.41943 830.2
+1454.37207 660.5
+1458.98596 645.9
+1476.67468 1649.0
+1477.65894 1547.3
+1525.44238 669.5
+1777.83716 893.8
+1794.49084 790.7
+1862.43372 656.1
+1876.03625 670.6
+1877.02563 717.4
+1879.48779 19255.3
+1879.97180 1607.1
+1906.67603 634.4
+1907.04480 7244.8
+1907.34509 1030.7
+1930.61267 936.9
+1960.93225 1051.3
+S	2710	2710	794.9298246
+Z	2	1588.012
+Z	3	2381.514
+214.54210 723.5
+216.24084 727.6
+225.00880 590.0
+241.70786 520.6
+253.51537 530.4
+255.30461 679.4
+259.94705 565.7
+261.28079 653.7
+278.41245 604.0
+284.19766 630.8
+289.15466 1448.9
+297.13049 648.5
+330.23804 1158.6
+334.17529 1998.3
+382.35999 675.7
+402.23718 2405.7
+406.37439 578.2
+419.26416 2995.4
+447.25888 6466.6
+448.42459 661.3
+482.38852 719.3
+488.27545 613.9
+508.13321 530.4
+510.36438 1168.4
+515.32263 5847.3
+527.76459 713.1
+532.34796 9545.3
+532.53790 1913.9
+541.33246 712.1
+548.07172 796.0
+560.34271 24422.3
+564.89081 606.6
+569.31384 659.9
+585.28003 1165.1
+585.80371 906.7
+586.05786 1199.8
+586.30945 995.5
+605.11206 680.0
+628.40497 4312.0
+637.31854 583.3
+640.34949 1205.5
+645.43225 6248.5
+653.32031 869.4
+655.41711 1820.3
+657.80829 745.7
+668.35815 10739.4
+668.85980 6458.5
+669.36035 2845.7
+673.42670 22777.5
+676.65417 1238.6
+690.82074 638.8
+691.43872 1166.1
+721.83533 828.0
+724.89868 4260.7
+725.39954 2623.6
+725.90417 835.0
+730.83826 1739.0
+731.34003 1383.8
+751.53082 741.6
+760.42010 6453.1
+760.92053 4321.4
+761.41766 1712.3
+761.92804 980.6
+763.87799 797.2
+765.34198 673.5
+770.07758 945.8
+770.40820 976.6
+770.73315 1366.4
+771.06390 1080.1
+771.39789 1121.5
+771.86707 798.0
+773.69946 639.4
+774.20721 909.0
+775.37683 735.8
+776.48956 222441.8
+777.49243 9457.7
+777.61804 1345.6
+778.77826 1610.2
+806.72504 815.1
+843.40289 1350.7
+843.73779 1573.2
+848.54065 787.0
+848.93091 615.8
+849.41370 1144.6
+852.47888 5769.3
+852.98145 4948.0
+853.48230 2610.8
+853.98413 859.3
+854.44934 848.1
+858.42670 725.7
+858.92346 965.5
+887.09949 2189.5
+887.43451 2232.6
+888.81946 971.7
+906.46191 1265.1
+906.96973 752.2
+914.96326 3049.5
+915.46094 1994.2
+916.50800 3272.9
+917.00964 4256.6
+917.50818 1574.4
+919.73175 1299.6
+919.97760 1055.6
+922.19299 764.3
+931.09955 1125.9
+943.98755 1074.6
+944.23572 1200.6
+944.74213 1006.0
+949.78278 1398.3
+950.11981 1225.5
+972.59766 637.1
+973.12366 968.1
+973.46234 2242.0
+973.79712 3371.8
+974.13129 1072.4
+988.13519 969.5
+988.47668 915.1
+988.68475 734.7
+998.03809 3652.0
+998.54303 3398.0
+999.04169 1917.8
+1019.69623 731.5
+1054.29834 773.0
+1055.55286 6517.1
+1056.05261 5598.8
+1056.55652 5032.7
+1063.37378 857.2
+1120.07227 4711.3
+1120.57520 6616.8
+1121.07568 5378.0
+1121.58154 1326.7
+1147.07947 940.1
+1153.44092 715.0
+1155.58850 3968.4
+1156.09058 3460.7
+1156.59448 2716.6
+1157.10559 1358.0
+1191.10913 1437.6
+1191.61060 1385.9
+1192.12476 1199.9
+1198.20032 3563.1
+1208.58337 1054.5
+1209.08228 2631.0
+1209.58289 1789.4
+1210.08569 883.7
+1229.00757 667.4
+1274.60547 825.6
+1445.22229 682.7
+1870.33069 1128.3
+1876.14502 730.8
+1877.56042 993.8
+1878.73914 1086.0
+1879.18518 2520.8
+1879.55164 19782.2
+1879.91602 2306.1
+1880.32471 1526.5
+1882.47192 672.3
+1907.05103 7378.5
+1930.76294 1029.6
+S	2711	2711	1430.7511471
+Z	4	5718.97329
+391.62747 586.4
+408.75626 623.9
+523.09033 649.4
+532.51874 2341.8
+575.27802 770.5
+676.64880 925.3
+686.60022 650.8
+716.53082 636.0
+733.11884 636.0
+795.75024 709.6
+816.27502 774.9
+892.41766 605.0
+1009.36987 581.2
+1057.24951 813.5
+1083.92676 592.0
+1143.20911 599.3
+1173.75562 603.5
+1198.16028 3531.2
+1265.36255 812.8
+1347.11841 742.4
+1366.35559 752.4
+1489.68494 566.3
+1525.53101 820.2
+1763.49146 651.8
+1870.51270 697.6
+1878.49426 979.3
+1878.70508 666.2
+1878.87158 904.8
+1879.54919 19435.0
+1880.25049 1006.4
+1907.05615 6107.6
+1907.49036 5527.9
+1907.98669 10235.7
+1908.48206 5782.2
+1909.00354 2347.6
+1930.71948 966.4
+S	2713	2713	1273.56024127
+Z	2	2545.273
+Z	3	3817.405
+393.85840 490.6
+397.40607 587.1
+419.88174 534.8
+437.40866 557.1
+482.65778 643.3
+531.89288 611.3
+532.45441 2075.3
+549.24414 691.9
+553.81537 614.1
+556.24182 555.7
+578.42480 641.3
+585.28497 1653.4
+586.28870 773.2
+602.86206 677.6
+604.57751 672.0
+620.49866 663.1
+676.63379 1160.3
+724.73077 565.0
+770.04541 751.2
+772.05988 719.7
+790.83997 607.6
+795.74945 805.1
+803.26526 807.6
+865.99677 636.7
+866.24603 590.1
+908.97430 682.2
+953.99323 4258.6
+954.49493 10392.5
+954.99561 9950.8
+955.49805 4598.9
+959.79578 568.7
+1006.51508 636.8
+1044.99060 2431.0
+1045.48792 3346.3
+1045.99463 1943.3
+1050.58215 1408.4
+1068.57983 863.5
+1094.52954 1001.9
+1095.02600 1111.5
+1133.70520 680.4
+1163.66223 2027.6
+1181.67285 870.4
+1198.01086 3340.1
+1200.51453 4584.5
+1201.51721 2773.0
+1363.57813 7308.4
+1364.58545 3261.2
+1364.89197 676.2
+1476.66028 5356.0
+1477.66028 3167.4
+1478.66455 1056.3
+1490.08350 718.6
+1525.45984 791.7
+1529.87585 738.7
+1543.85938 594.2
+1575.70764 837.8
+1662.74133 1234.9
+1663.77368 1086.3
+1776.88611 686.9
+1777.78857 1527.5
+1778.78772 1347.4
+1779.77124 735.9
+1812.87488 938.7
+1813.91223 807.9
+1879.12463 2974.7
+1879.51050 19227.5
+1879.90063 3227.2
+1880.86047 1007.4
+1906.97522 20791.6
+1907.98071 23935.1
+1908.45227 944.9
+1908.98547 12232.8
+1909.97241 2729.1
+1959.97791 1170.5
+1960.97144 1971.3
+1991.50537 617.8
+S	2714	2714	1880.04599127
+Z	2	3758.244
+Z	3	5636.863
+518.99841 655.6
+532.51257 2051.5
+630.41528 713.5
+757.05463 537.7
+831.88470 576.4
+856.55560 780.4
+882.59290 586.1
+953.88641 1408.8
+954.37311 1035.9
+954.87146 620.6
+1018.80658 700.3
+1025.51160 598.4
+1053.58765 662.7
+1198.14221 3435.6
+1320.55933 741.6
+1330.25208 678.5
+1525.45959 1004.6
+1573.26025 581.1
+1655.70483 645.3
+1776.95667 751.8
+1870.40442 912.3
+1877.90027 931.3
+1878.19189 588.7
+1878.94116 755.1
+1879.18604 1629.9
+1879.57727 17862.6
+1880.04822 1502.0
+1880.17310 2085.2
+1880.44360 845.9
+1907.12500 7101.6
+1918.93201 952.3
+1930.66663 955.2
+S	2715	2715	1430.7582271
+Z	4	5719.00161
+381.28854 536.5
+468.91504 611.9
+475.35471 591.7
+487.49142 598.9
+532.52325 2123.1
+537.23737 688.5
+549.15100 789.1
+565.08502 661.8
+575.82727 596.0
+676.66528 1237.7
+718.35950 636.3
+731.10931 817.2
+795.75928 1197.1
+802.75867 637.2
+816.41028 609.1
+922.75854 716.7
+954.38165 842.1
+1009.75366 664.4
+1057.25720 870.1
+1198.16870 3436.6
+1244.00623 759.8
+1282.92859 697.0
+1304.89172 596.1
+1449.61157 565.3
+1489.66479 778.1
+1582.61646 681.0
+1593.99365 708.6
+1675.51318 648.7
+1703.23987 716.3
+1832.64526 557.1
+1876.19995 966.2
+1878.32935 1449.8
+1878.90991 1565.0
+1879.30127 3494.2
+1879.57275 19056.5
+1880.84436 1172.8
+1907.16907 7026.4
+S	2717	2717	1907.4998246
+Z	2	3813.152
+Z	3	5719.224
+532.57898 2243.6
+592.90839 607.3
+676.65222 1162.9
+688.70349 644.6
+718.00659 774.1
+731.13422 831.7
+740.50275 634.8
+795.75580 887.5
+879.74609 727.2
+994.93829 704.4
+1006.39862 566.7
+1195.64319 638.4
+1198.28796 3387.0
+1346.67737 655.3
+1423.95129 674.3
+1539.91174 574.4
+1563.83813 9278.5
+1564.84387 7797.3
+1565.83618 1290.8
+1629.39233 609.1
+1773.91028 793.7
+1776.90210 800.5
+1791.94849 3432.1
+1792.94897 3738.8
+1793.94885 1897.5
+1878.24622 821.6
+1879.00049 1284.6
+1879.57324 19746.8
+1879.88257 2521.5
+1881.47241 903.2
+1881.71802 813.5
+1907.15479 7106.8
+1907.59717 806.5
+1930.65295 891.6
+1934.36548 717.1
+1968.08032 569.7
+S	2718	2718	1198.6438246
+Z	3	3592.656
+Z	2	2395.44
+342.30603 863.2
+350.30054 737.7
+386.78525 594.5
+400.69287 526.6
+412.73322 579.5
+432.33029 662.3
+435.77313 761.1
+498.79184 728.3
+520.94568 645.9
+532.58636 1880.4
+542.08582 623.4
+549.19556 736.4
+583.06250 651.4
+630.45593 1036.5
+636.93884 657.1
+637.14575 668.2
+676.64136 1087.4
+712.36328 622.3
+717.52625 648.2
+729.12646 595.1
+795.74994 1087.4
+923.71448 571.1
+954.49451 671.7
+1066.41150 592.0
+1198.30725 3215.8
+1267.33252 593.2
+1401.85889 581.2
+1525.53162 687.3
+1567.85815 875.4
+1746.67725 632.5
+1878.94080 1160.6
+1879.53040 19778.5
+1889.14136 749.6
+1907.14185 7088.9
+S	2719	2719	724.7828246
+Z	2	1447.718
+Z	3	2171.073
+188.25154 634.9
+188.25792 684.7
+188.26801 938.6
+188.28201 1267.1
+188.28912 948.4
+188.29854 1292.4
+188.31108 1088.2
+193.92886 639.7
+197.12234 547.6
+198.45007 591.2
+198.48331 504.6
+199.29433 1625.0
+199.32208 1825.9
+199.33127 1065.1
+199.34131 1512.1
+199.35674 577.3
+199.41936 561.1
+199.44138 628.9
+200.76395 580.8
+215.13777 739.0
+231.11191 1282.7
+234.12427 723.6
+238.64825 598.3
+242.08116 8706.2
+243.08481 1718.8
+247.30264 629.0
+259.10751 17351.8
+260.11102 2387.7
+262.11346 534.2
+271.41687 668.2
+276.13397 34873.8
+277.13736 5129.3
+279.17032 3700.7
+307.43982 632.5
+314.14972 7318.6
+325.18652 2182.9
+326.17682 1418.1
+330.47913 608.5
+331.23294 1599.9
+332.16013 4540.2
+342.29739 629.7
+342.47241 627.1
+344.19690 2319.3
+353.18341 1372.8
+354.18097 1477.2
+355.19614 718.3
+359.17072 3215.7
+371.20499 1601.6
+372.19156 2476.6
+376.18671 2154.6
+377.18106 2207.8
+381.38931 629.1
+389.21768 27400.9
+390.22113 6629.5
+411.16528 1527.0
+427.23349 1164.7
+428.19644 954.3
+429.17780 1562.3
+429.21112 1066.0
+432.28091 7802.2
+433.28305 1010.1
+437.25339 632.1
+444.25986 922.4
+445.24411 12533.3
+446.20282 1024.7
+446.24857 1992.2
+454.24393 879.0
+455.22821 9187.8
+456.23102 3005.3
+462.27057 4138.4
+463.25424 98212.0
+464.25757 10491.3
+472.25443 37513.8
+473.25610 10699.3
+474.24338 2294.7
+478.29355 6622.2
+478.79459 2646.1
+482.43466 706.6
+490.26498 48670.4
+491.26819 12662.9
+492.27066 1615.4
+514.26453 879.2
+528.82025 1528.3
+529.31567 1160.9
+530.23834 3876.7
+532.58832 2141.0
+533.80688 858.9
+542.26276 1110.9
+545.36487 6010.5
+546.36859 2257.4
+546.85596 692.4
+547.26550 1664.8
+548.24756 2467.2
+558.23358 10433.7
+559.24054 1192.5
+572.79944 653.2
+575.00574 688.8
+575.26031 12612.7
+576.24109 5401.9
+576.35376 21678.2
+576.85522 18409.4
+577.24542 1187.8
+577.29767 1906.2
+577.35760 5344.6
+577.85999 949.1
+578.01550 607.5
+584.31921 1362.9
+584.82208 1664.1
+593.27014 11158.4
+594.27594 1244.2
+604.67493 651.0
+610.32324 3078.2
+619.61591 661.7
+631.87451 1525.9
+632.37158 1201.3
+638.82904 562.1
+640.38239 5213.2
+640.88513 4521.6
+641.38983 1595.8
+641.89307 817.4
+644.43304 6057.4
+645.43445 2927.4
+649.38556 1241.4
+649.90497 681.8
+657.38611 809.2
+661.32916 723.8
+668.37360 1397.0
+671.31842 869.0
+682.41394 739.6
+686.38470 2280.2
+686.85992 607.2
+687.39001 1311.3
+689.32825 7587.0
+690.33276 1621.4
+696.39807 13379.1
+696.90082 12004.1
+697.40167 5787.0
+697.90167 1931.7
+699.35663 845.8
+700.91058 1257.3
+701.79413 698.0
+704.91156 4202.6
+705.40533 16718.4
+705.90582 16103.5
+706.40546 5562.0
+706.58575 618.9
+706.91357 938.7
+707.33997 1018.7
+755.60632 796.6
+759.46002 9262.3
+760.46088 4206.9
+761.47632 963.6
+773.52258 615.2
+782.02460 772.2
+783.24664 757.2
+783.40497 1320.9
+795.76208 972.7
+801.41235 1516.4
+809.47571 2300.0
+846.42877 784.7
+858.52625 4121.5
+859.53125 2537.6
+860.53674 803.7
+882.47418 1956.6
+897.46796 1106.2
+897.97412 1609.1
+900.48987 1977.5
+903.44867 5187.7
+914.52667 857.2
+919.85107 1198.0
+920.19019 1609.1
+920.51874 1701.7
+920.85693 1673.1
+924.56244 667.9
+952.45386 1320.4
+952.99280 968.7
+953.46069 881.7
+954.03418 969.2
+954.50830 861.5
+955.58057 273653.0
+956.58319 168633.9
+957.13434 1365.5
+957.58594 50339.8
+958.13214 1164.7
+958.58990 11125.9
+958.72546 966.1
+959.58447 975.8
+961.48749 1224.0
+961.99194 2008.8
+962.49335 3079.5
+995.55341 1218.5
+996.55963 1486.6
+1006.58588 766.5
+1012.60455 770.0
+1013.55847 2636.2
+1014.56818 1798.3
+1016.53271 2567.7
+1039.63513 749.8
+1056.62769 105216.9
+1057.63013 71510.2
+1058.63391 22417.5
+1059.63452 4868.4
+1082.54724 939.7
+1096.60474 835.7
+1115.61780 966.7
+1143.68494 608.6
+1151.70203 21409.7
+1152.70398 16063.1
+1153.70947 5740.6
+1154.71838 1003.0
+1167.63708 2649.0
+1168.64453 1517.7
+1169.71143 142043.8
+1170.71399 105603.5
+1171.71606 34908.0
+1172.71924 9662.5
+1173.54907 707.1
+1173.73730 871.4
+1177.99158 742.7
+1185.64575 1668.5
+1186.65393 1648.2
+1198.32520 3121.5
+1202.20825 665.7
+1254.70935 900.2
+1258.78918 672.4
+1280.72290 3125.3
+1281.73181 2850.5
+1282.72925 1348.3
+1298.73401 7665.7
+1299.73535 5267.9
+1300.73730 2195.0
+1422.82349 771.3
+1577.42090 809.4
+1712.97107 690.1
+1787.51233 810.3
+1868.16321 702.8
+1875.54199 622.3
+1878.67236 753.0
+1879.56616 19522.7
+1879.83386 1481.3
+1880.16626 802.2
+1880.44910 1061.9
+1907.12524 7437.6
+1918.36938 669.0
+1930.75134 907.8
+S	2721	2721	765.4100221
+Z	4	3057.60879
+200.34373 598.9
+204.20511 559.5
+214.72427 625.9
+220.31998 631.1
+238.20029 542.1
+245.24060 576.5
+271.55847 617.1
+276.34512 507.7
+310.21191 6587.2
+311.21457 812.7
+327.12735 587.0
+338.20706 10524.6
+339.21045 1875.3
+341.19232 1057.8
+343.70175 546.7
+396.52496 678.1
+397.20801 1000.8
+401.93506 659.2
+409.28052 8164.9
+410.28400 1908.2
+427.58975 755.8
+437.27502 21944.5
+438.27863 4906.1
+439.28195 1386.2
+491.12213 612.0
+522.26758 553.9
+532.61981 1819.8
+543.33282 589.0
+568.29865 904.9
+582.30029 5122.4
+582.80121 3205.2
+584.67682 571.5
+594.81598 3176.4
+595.31879 1432.2
+595.81793 1182.2
+597.32190 767.7
+627.29852 699.4
+627.65497 812.1
+632.97552 1726.2
+633.31439 2363.8
+633.64417 2567.0
+642.32031 1043.7
+651.58929 838.5
+651.83832 1683.3
+652.34082 831.0
+656.08881 8111.2
+656.33826 14716.2
+656.58899 13668.7
+656.83984 6142.0
+657.08942 3546.2
+675.67859 1517.5
+676.01001 1572.8
+676.34656 1443.0
+680.85364 3036.1
+681.10547 5592.2
+681.35614 6375.5
+681.60699 3796.8
+681.85840 1000.8
+709.37555 1558.5
+719.24225 637.9
+720.34747 677.6
+725.41870 2337.5
+726.42059 1144.4
+730.37396 1062.2
+741.38586 2266.7
+742.38800 2412.1
+742.71387 2238.8
+743.03845 1066.5
+743.38623 852.3
+780.72198 826.6
+788.79193 639.2
+795.75104 794.7
+804.40448 2082.2
+804.73688 3716.2
+805.07129 3090.8
+805.40808 1531.2
+805.73138 838.0
+832.09265 1598.1
+832.41522 956.4
+836.41925 1397.6
+840.45392 910.0
+842.10425 987.1
+842.43201 1850.8
+842.76837 1325.5
+843.42773 846.0
+868.44531 9470.2
+868.77985 21916.9
+869.11407 17262.1
+869.44763 10256.9
+869.78107 3370.9
+871.68274 854.0
+872.04407 1933.7
+872.27106 698.8
+872.38062 1954.8
+872.72400 807.4
+872.85223 870.1
+873.07776 1038.9
+873.42865 1520.6
+873.76813 1319.2
+874.44946 213913.8
+874.64441 1039.4
+874.78302 400505.0
+874.97827 1187.9
+875.11615 351345.6
+875.22949 1283.1
+875.44983 192320.6
+875.68616 1275.2
+875.78406 80889.7
+876.11920 31574.4
+876.45685 8917.6
+876.79327 2657.9
+877.04675 1326.8
+877.16986 1502.1
+877.38330 1321.2
+877.52356 2471.2
+877.64606 878.1
+877.85602 1545.3
+878.16443 746.0
+878.22437 798.7
+891.44220 728.2
+891.95032 1182.9
+901.79193 930.5
+907.47180 4830.3
+907.80408 10143.6
+908.13849 10168.9
+908.47406 4705.2
+908.80945 1504.4
+923.45538 722.4
+940.35254 744.2
+940.97717 1796.4
+941.48157 2652.4
+941.98248 1623.3
+945.49323 1130.4
+946.17328 818.0
+948.96295 4553.7
+949.46521 4577.5
+949.96387 3851.3
+950.46375 980.6
+971.02997 605.3
+990.50873 1036.8
+991.01111 1450.8
+991.51312 849.3
+1004.86993 1051.6
+1005.20795 951.8
+1014.01941 780.9
+1106.68652 2520.6
+1107.68701 1268.6
+1141.08081 2765.1
+1141.57751 4256.1
+1142.08362 4018.7
+1142.56995 777.3
+1177.49878 536.4
+1177.57117 587.1
+1191.62585 636.3
+1198.37537 3918.8
+1282.41565 716.2
+1458.72998 1520.9
+1525.58862 891.2
+1876.52832 775.8
+1878.86243 942.0
+1879.31580 4797.4
+1879.60181 19039.3
+1881.54468 825.2
+1907.05151 7115.5
+1930.80872 789.1
+1931.74268 628.6
+1982.63037 738.9
+S	2722	2722	766.1633246
+Z	4	3060.622
+204.99786 633.9
+233.59120 691.8
+254.77118 647.3
+274.62073 588.1
+278.43921 637.8
+279.99036 559.8
+288.90164 592.7
+310.21210 9722.2
+311.21628 1568.9
+338.20721 14222.6
+339.20972 2372.1
+341.19370 1463.8
+342.07098 560.5
+348.72095 678.6
+381.38766 845.8
+397.20734 887.6
+404.32242 644.5
+405.86963 669.9
+408.53610 906.6
+409.28070 10768.6
+409.51355 745.4
+410.28461 1644.1
+430.03867 683.6
+437.27518 28944.9
+438.27811 6794.5
+439.28473 667.3
+465.00024 682.4
+482.69891 710.6
+529.77856 643.5
+532.59436 2187.8
+539.03528 588.1
+553.28552 622.0
+581.64258 724.7
+582.29901 6275.5
+582.80280 2997.7
+583.30298 1277.1
+585.27075 772.4
+586.30731 815.2
+594.81622 1883.6
+602.81995 751.0
+627.30939 979.1
+632.97809 2844.5
+633.31244 5421.9
+633.64679 2438.1
+642.31317 1563.1
+651.58533 1291.8
+651.83655 990.2
+652.08630 952.6
+656.08801 14455.2
+656.33826 18826.1
+656.58929 15468.6
+656.84003 9111.6
+657.09009 2953.6
+657.34412 1297.9
+676.01697 1684.6
+676.34747 1545.7
+676.59955 865.8
+676.66150 912.5
+680.85474 4934.3
+681.10492 8323.5
+681.35718 8767.7
+681.60742 3711.0
+681.85834 1260.1
+683.57922 726.4
+692.36041 696.9
+705.17767 657.9
+709.37714 1181.8
+709.62762 717.3
+709.87463 1011.7
+716.04187 734.9
+725.41888 3897.5
+726.42114 1125.2
+730.37714 2575.4
+737.40637 614.4
+738.07141 720.9
+738.96216 725.7
+739.65076 665.3
+740.37500 685.9
+741.38794 2374.1
+741.75916 821.0
+742.38403 2805.2
+742.45538 635.5
+742.71716 5331.5
+743.04858 1617.7
+753.78131 706.6
+768.34485 639.3
+781.39886 794.1
+795.78278 1250.4
+799.06653 697.9
+804.40204 4617.4
+804.73853 3884.8
+805.07031 3494.2
+805.40515 2626.9
+825.74396 914.8
+826.08728 1252.0
+832.08783 1746.2
+833.04877 590.4
+833.09955 613.1
+840.45166 1149.6
+842.10150 1611.6
+842.43176 2352.3
+842.76654 1181.9
+843.10333 750.0
+858.13727 745.8
+862.77673 965.5
+863.30042 889.5
+863.45166 1016.6
+868.44611 19746.9
+868.77936 24378.3
+869.11462 19935.8
+869.44861 10943.0
+869.78186 5053.8
+871.25580 876.8
+871.71930 2092.9
+872.04919 3498.3
+872.19525 982.6
+872.38599 2536.4
+872.52490 1490.9
+872.70471 963.5
+872.85394 955.3
+873.10107 1378.9
+873.22723 1087.6
+873.43207 2709.8
+873.53809 1129.6
+873.75775 2088.1
+873.86810 859.6
+874.45013 331903.3
+874.62811 1187.1
+874.78314 528068.1
+874.98230 1354.6
+875.11633 410608.4
+875.32184 790.3
+875.44989 218990.4
+875.78387 86070.6
+876.11646 28150.7
+876.44879 6831.5
+876.68744 1390.5
+876.94025 1103.2
+877.05585 1475.3
+877.19769 2316.7
+877.32239 897.5
+877.53174 3939.9
+877.86188 3277.6
+878.04462 879.5
+878.19543 1580.1
+891.45587 762.1
+891.94720 996.4
+892.44061 837.0
+907.47101 7685.0
+907.80432 13879.9
+908.13953 9953.7
+908.47357 6264.2
+908.80829 3244.3
+940.98083 2405.9
+941.47791 2986.5
+941.98242 1816.0
+945.17285 1139.0
+945.50568 1515.7
+945.84381 745.3
+946.16681 961.9
+948.96454 5868.6
+949.46271 7987.0
+949.96863 5164.4
+950.46741 1914.4
+977.51068 1445.5
+990.51355 1856.4
+991.02179 1422.7
+1004.87195 1233.9
+1005.54633 949.8
+1021.99261 599.5
+1083.08093 727.1
+1106.68250 1314.4
+1141.08118 2847.7
+1141.57983 5480.9
+1142.08105 4014.1
+1142.56970 880.1
+1198.32922 3013.3
+1238.60413 838.3
+1244.19727 666.8
+1277.10095 690.6
+1458.73682 1464.0
+1488.50232 615.0
+1506.49365 708.7
+1525.52295 998.5
+1649.86096 654.4
+1760.80933 687.7
+1878.11243 743.8
+1878.44519 772.8
+1879.10681 1137.2
+1879.57410 19813.0
+1880.03198 1814.7
+1880.88074 715.7
+1881.11450 844.4
+1881.70764 713.5
+1907.04492 7646.3
+1930.77869 994.0
+S	2723	2723	724.788991267
+Z	3	2171.092
+Z	2	1447.73
+188.27449 5010.8
+188.28291 4428.0
+188.29205 6632.5
+188.30499 5073.6
+198.94402 4487.8
+199.22754 4658.4
+199.24092 3460.7
+199.28046 2911.5
+199.29546 3337.0
+199.31731 5559.7
+199.32687 8448.7
+199.33917 5481.1
+199.35677 4779.5
+214.53223 3223.2
+242.08018 12124.1
+243.08131 3497.2
+259.10706 27729.0
+276.13348 91716.3
+277.13788 9788.6
+280.20380 3845.5
+294.93039 2756.5
+298.83630 2910.3
+299.58197 3976.5
+331.23468 3560.9
+332.15970 3195.9
+339.72537 3804.5
+367.33176 3615.1
+372.19180 3100.0
+377.18155 3512.1
+389.21683 52703.0
+390.22134 7507.1
+392.32599 2932.8
+432.27951 13032.8
+445.24316 10056.1
+453.74521 2531.3
+455.22656 9900.1
+462.27078 6025.7
+463.25339 95120.0
+472.25409 69255.5
+473.25623 16370.5
+478.29297 6695.9
+478.78940 4158.3
+490.26456 89992.5
+491.26712 19430.1
+511.09622 2977.1
+530.80859 4328.2
+531.30853 6120.8
+531.81165 3193.2
+532.59113 8639.9
+545.36450 9813.5
+553.84521 5915.3
+554.34131 3654.1
+555.36322 3002.9
+558.23242 8515.2
+575.25714 12163.7
+576.24615 8407.4
+576.35284 32715.6
+576.85596 20169.9
+577.35687 6044.3
+593.26843 10498.0
+636.98859 5236.3
+639.22284 3846.3
+640.38263 5489.2
+644.43091 6449.1
+645.43732 4134.6
+673.88007 3585.2
+676.67096 6143.2
+682.59644 3425.5
+689.32471 6672.7
+695.32837 4165.2
+696.39844 16716.6
+696.89764 15275.4
+697.40662 5624.9
+697.90442 4211.7
+698.85535 3559.9
+704.91650 9214.0
+705.40485 43420.0
+705.90594 29489.2
+706.40289 11340.9
+725.95789 3395.3
+746.92487 3668.3
+759.45947 13306.9
+760.46185 5787.7
+795.76599 4344.3
+822.22418 3976.7
+854.79901 3367.6
+859.52917 3131.5
+865.95935 2938.2
+896.96857 5104.8
+897.46716 4909.4
+897.97906 5213.4
+900.48279 4283.8
+919.85742 4682.2
+920.18677 16067.4
+920.52081 13989.4
+920.84882 5817.3
+955.57959 469555.5
+956.58270 233475.4
+957.58484 67482.0
+958.58557 13337.4
+961.49615 6214.8
+961.99316 9089.9
+962.49841 5181.2
+1013.55682 6693.5
+1019.67065 3571.7
+1031.83289 3558.9
+1056.62732 188708.9
+1057.63000 104231.7
+1058.63110 29031.3
+1059.62915 4194.4
+1060.60522 5721.2
+1061.08252 3709.9
+1106.68201 6473.9
+1151.70117 33482.1
+1152.70801 22129.9
+1153.71387 8620.2
+1169.71082 248716.8
+1170.71362 153018.9
+1171.71484 53390.1
+1172.71423 9709.0
+1185.65515 5286.2
+1188.27307 4256.4
+1198.14221 3913.4
+1198.31372 14371.1
+1215.05835 3892.1
+1280.70544 4106.3
+1281.74158 3923.1
+1298.73511 12167.2
+1299.73413 10456.9
+1300.74548 4062.6
+1731.24463 3005.5
+1777.23743 3678.4
+1779.23230 2770.2
+1878.24414 3112.9
+1878.79956 5311.6
+1879.27063 15862.8
+1879.61487 91954.6
+1879.98145 14998.6
+1880.96106 5891.7
+1907.03711 33920.7
+1918.93665 4130.3
+1930.73364 5119.2
+1939.93884 3185.2
+S	2725	2725	765.4126446
+Z	4	3057.61928
+201.67297 588.2
+214.98114 639.8
+218.29811 594.0
+233.59639 774.7
+236.70309 567.0
+238.69783 856.2
+250.01846 611.5
+262.35837 697.5
+267.32816 651.9
+271.41006 803.8
+271.55954 686.1
+310.21210 3173.3
+338.20697 8089.3
+339.21085 1616.7
+350.29404 960.9
+381.39755 714.0
+397.20663 751.7
+409.28012 6318.1
+410.28540 1519.5
+417.51605 575.1
+437.27499 14038.8
+438.27921 3604.4
+449.32843 746.9
+468.80225 683.0
+485.44028 736.6
+491.38651 650.0
+503.91312 682.5
+516.27100 619.2
+531.94183 727.5
+532.57361 1753.0
+549.20557 1124.0
+561.55432 674.7
+574.61072 574.0
+582.29956 3241.4
+582.80145 3153.1
+586.05652 775.5
+586.30756 957.5
+586.56567 742.0
+632.98047 1471.9
+633.31989 1873.3
+633.64600 965.5
+651.83569 1423.4
+652.08234 865.3
+656.08789 3043.5
+656.33759 11184.7
+656.58905 8421.8
+656.84137 4417.3
+657.09070 2867.1
+657.34137 1432.4
+676.61768 975.0
+679.63757 626.2
+680.85077 1191.7
+681.10596 6570.9
+681.35730 2998.9
+681.60602 2373.4
+686.25952 676.5
+687.67438 641.9
+725.41803 946.6
+741.38794 1222.1
+742.39026 1620.8
+742.72186 3109.9
+743.04773 1382.3
+743.38293 1834.2
+789.40961 605.4
+795.09125 608.6
+797.82465 765.4
+799.95184 782.7
+804.73523 3048.8
+805.06982 2662.6
+805.40137 1082.4
+806.81964 1023.7
+822.39868 764.0
+826.07281 849.1
+829.09595 699.7
+832.42944 953.0
+840.44794 750.0
+841.46875 844.0
+842.42596 1240.9
+868.44513 6038.0
+868.78015 14752.5
+869.11487 11879.6
+869.44806 6654.2
+869.78339 1657.4
+870.67883 818.2
+872.13556 760.1
+872.46350 698.6
+873.44275 941.8
+873.77277 979.8
+874.44934 121970.6
+874.78320 293485.1
+875.11676 235797.6
+875.45044 129247.7
+875.78461 63536.4
+876.11963 27115.5
+876.45593 5606.1
+876.78857 1204.9
+877.45538 1000.5
+877.62646 740.5
+877.87280 1148.8
+907.47040 2710.6
+907.80573 8249.7
+908.13629 6296.9
+908.47418 4411.8
+908.81781 1750.1
+937.41150 669.7
+941.47180 1062.0
+941.98175 1225.2
+948.96136 2823.4
+949.46436 5287.6
+949.96582 2633.4
+950.46619 1017.8
+954.39575 903.5
+966.35016 708.5
+991.51636 672.2
+1034.50403 689.5
+1057.22437 720.0
+1113.56775 792.2
+1139.89587 682.0
+1141.08069 1749.8
+1141.57690 1632.4
+1142.08386 1996.7
+1143.07959 681.3
+1174.59338 838.7
+1188.37598 838.0
+1198.28833 2745.8
+1525.55103 941.7
+1879.09729 2757.2
+1879.50232 18321.1
+1879.79688 2127.4
+1879.92493 2977.7
+1881.21448 764.8
+1907.13000 7389.3
+1930.80835 727.8
+S	2726	2726	766.1655746
+Z	4	3060.631
+200.88167 4789.2
+205.28575 5048.0
+208.54845 5096.8
+214.55066 5037.3
+214.97137 5150.5
+222.22643 6392.0
+271.39929 5202.4
+271.64316 6116.2
+301.22971 5582.6
+308.93124 6024.3
+323.16153 5993.8
+351.88113 6099.0
+360.55731 6134.6
+369.78232 5423.4
+437.29254 5624.3
+482.39554 5525.5
+482.70880 8791.5
+497.42502 5555.6
+532.59570 15586.3
+553.56195 5665.6
+564.23669 6223.0
+639.90515 6174.4
+644.27893 5576.0
+676.69086 5860.8
+731.19971 5881.0
+751.03027 5824.2
+795.77069 8606.2
+870.91675 5640.6
+874.44739 19832.8
+874.78442 28018.7
+875.11945 33095.3
+875.45087 20374.8
+875.78143 10005.5
+915.15247 5874.3
+1023.29852 6838.7
+1023.46942 6396.7
+1057.39465 6032.7
+1096.45850 6307.8
+1123.30261 5495.6
+1168.25879 5747.0
+1194.57080 6524.3
+1198.33154 33312.8
+1227.80042 7263.2
+1249.08728 7037.6
+1269.83643 6148.7
+1467.98718 6792.9
+1766.45544 6817.9
+1878.77820 8000.8
+1879.22925 33029.6
+1879.68616 163373.4
+1880.38049 21969.7
+1881.07385 7729.2
+1899.56274 5982.2
+1907.10803 69875.9
+1907.37366 10205.6
+1918.99341 5860.5
+1976.31348 6374.6
+S	2727	2727	1879.9835746
+Z	2	3758.119
+Z	3	5636.676
+510.02805 594.7
+532.59308 1672.9
+534.82062 657.7
+549.14758 740.6
+557.17993 588.5
+567.62946 590.4
+577.07153 656.3
+953.86560 695.5
+1019.63983 739.8
+1057.24304 704.9
+1169.00366 643.1
+1198.31812 2908.6
+1239.61816 700.6
+1461.78711 749.1
+1756.54846 670.3
+1876.27234 806.1
+1878.28320 585.4
+1878.89575 678.0
+1879.53467 19577.6
+1879.76331 3310.2
+1880.58496 705.7
+1880.86194 639.3
+1882.86975 637.0
+1907.09399 7883.6
+1930.58704 932.8
+1939.98218 608.3
+1968.05579 602.6
+S	2729	2729	1061.5388246
+Z	2	2121.23
+Z	3	3181.341
+280.19928 715.1
+282.18149 586.0
+283.63745 566.8
+300.15433 1194.5
+305.16080 3292.1
+306.16461 825.5
+308.91754 777.1
+309.19125 964.1
+310.17569 2656.4
+313.68555 613.3
+320.10403 620.7
+322.18686 3700.4
+322.21185 1090.2
+324.19016 779.6
+327.20270 6866.0
+328.20593 894.7
+330.38489 648.1
+337.15063 1192.7
+342.20364 1202.0
+343.15778 925.7
+353.21854 1061.9
+354.20187 1874.2
+361.18417 913.1
+367.23380 2458.7
+368.21576 1589.4
+370.25192 657.0
+373.20847 1390.5
+381.21170 2981.7
+382.21347 681.4
+383.15857 879.2
+385.24420 2093.7
+395.22794 1405.1
+395.26517 6406.8
+396.26672 1052.0
+397.17142 825.2
+398.24048 1378.9
+399.22427 1295.3
+400.18347 971.4
+400.23425 1337.6
+401.22247 938.7
+402.20255 1380.1
+403.16837 688.8
+409.20801 2293.9
+410.21512 654.6
+413.23883 1958.6
+418.24426 7693.3
+419.20517 1192.9
+419.24612 2346.9
+422.48544 662.2
+423.22238 874.8
+423.25909 2097.6
+424.21783 710.8
+429.24994 2001.1
+435.27066 11855.5
+436.27408 2586.8
+440.28729 2200.6
+441.28647 676.5
+442.23013 1161.7
+443.26779 929.3
+450.23483 3938.3
+451.22375 1061.2
+466.30182 2953.4
+467.27316 1477.6
+468.24524 4867.6
+468.28522 748.0
+478.22873 5744.4
+479.21426 4375.8
+480.21643 855.0
+481.29868 1142.6
+482.26105 1339.2
+485.26959 1026.9
+489.26807 855.2
+492.24545 1265.5
+492.28180 1125.3
+494.29703 1631.5
+495.25571 4038.4
+496.23941 20536.6
+497.24228 5456.2
+504.36679 692.7
+506.33783 850.9
+508.31683 653.7
+508.34506 654.4
+510.25424 1692.4
+510.29733 699.4
+512.27069 704.6
+512.30634 1698.0
+513.26599 17642.1
+513.31757 2130.2
+514.27325 4239.2
+518.29669 1350.3
+526.32275 2247.8
+527.28436 1402.6
+530.34430 4548.6
+531.32819 11127.5
+532.28809 1852.6
+532.33258 2766.8
+532.55286 1810.0
+536.30383 711.1
+538.28546 1088.4
+542.33112 1415.9
+547.68701 988.6
+548.13013 1075.4
+548.30487 1504.7
+548.35437 317981.3
+548.66620 706.8
+548.68896 682.6
+549.02686 1754.3
+549.35718 102360.9
+549.71655 1507.7
+550.35992 16510.0
+551.36285 1263.3
+555.31323 2432.8
+558.33990 2888.8
+560.30829 2262.2
+563.31775 8808.5
+564.29492 1852.3
+564.33020 1472.4
+570.31915 689.1
+580.34430 1140.6
+581.32813 15847.2
+582.33173 5402.2
+583.33289 912.7
+584.41895 557.9
+585.28625 4413.8
+588.19086 577.2
+591.31219 5842.3
+592.32123 950.0
+597.30286 1011.1
+598.35315 4070.9
+599.35565 1040.6
+607.38104 1120.7
+608.33887 5741.9
+609.32214 25699.6
+610.32556 8497.1
+611.32928 1122.8
+615.31128 1511.1
+621.34595 626.4
+623.33820 862.5
+626.34930 18776.1
+627.35370 6245.7
+628.34143 1465.8
+641.36670 1117.0
+645.37048 8291.9
+646.35034 7389.7
+647.35602 3016.4
+660.33148 982.7
+663.38086 16226.5
+664.38440 5624.9
+665.38794 1137.1
+676.40259 1741.3
+683.39691 759.3
+694.41266 5804.4
+695.41858 1082.6
+702.38196 1021.8
+704.39526 3267.1
+717.39337 3916.4
+718.39227 1209.4
+721.42212 1676.2
+722.40698 18564.9
+723.31738 645.5
+723.41058 6946.1
+724.41156 1013.7
+728.39648 2154.3
+730.88928 841.6
+732.35547 2984.3
+733.36029 941.2
+734.41785 5300.7
+735.42120 1858.8
+739.43213 8139.2
+740.44080 1773.2
+755.41406 1008.6
+756.39337 2862.5
+773.41895 2977.7
+780.42297 824.1
+782.66254 635.0
+795.76563 1341.4
+830.47760 3371.3
+831.47290 1196.8
+841.47821 1481.5
+847.50208 7273.6
+848.50342 3636.6
+849.50793 865.3
+857.48663 1351.4
+858.49854 703.1
+861.39972 1185.6
+868.49072 1232.7
+869.47571 4950.2
+870.47614 2777.0
+886.50336 3663.6
+887.50745 2021.5
+909.49921 705.6
+910.16620 1189.8
+917.58472 653.8
+918.85651 698.1
+930.49292 716.8
+939.43909 663.1
+946.57104 7908.5
+947.57672 4925.6
+948.57379 999.2
+953.53479 906.9
+953.84796 1208.4
+956.55463 1134.5
+960.81158 625.8
+969.36835 609.1
+983.54840 648.5
+994.84772 571.7
+998.63318 1186.8
+1000.58093 1085.8
+1001.56567 2600.6
+1002.57428 1418.2
+1007.57172 804.0
+1007.91071 657.7
+1008.55090 2016.6
+1009.55573 826.1
+1014.61243 2689.8
+1015.60596 1290.6
+1016.04779 836.6
+1016.62402 2011.5
+1017.06927 1087.1
+1017.57300 2023.9
+1018.04071 772.9
+1018.58783 2377.7
+1018.85938 879.7
+1019.60046 1559.1
+1021.65936 877.1
+1024.48694 705.5
+1024.58289 1135.4
+1025.57690 19816.7
+1026.56628 21170.3
+1027.56543 10838.0
+1027.75208 730.0
+1028.07080 893.7
+1028.16248 725.8
+1028.57007 4155.4
+1028.97107 1121.2
+1029.99866 1093.5
+1033.75659 1105.7
+1034.29517 699.3
+1040.02466 1340.7
+1041.82251 914.7
+1042.60376 10644.9
+1043.58655 257489.4
+1044.58948 103460.9
+1045.34631 1174.4
+1045.59155 14216.6
+1046.34460 932.2
+1047.17078 1347.3
+1076.85168 642.8
+1086.65967 607.6
+1127.25964 1081.0
+1169.61243 1414.4
+1169.94312 1784.9
+1170.27246 2258.4
+1170.60205 1833.8
+1170.94788 895.7
+1198.24036 3309.4
+1212.96497 961.4
+1213.29517 1860.9
+1216.93799 737.6
+1218.54541 2554.9
+1218.96387 4938.4
+1219.29846 7315.8
+1219.63000 5424.7
+1219.96936 2860.3
+1220.30298 1435.5
+1267.57910 969.4
+1289.67200 1167.0
+1289.99963 1476.9
+1290.32483 1380.5
+1314.19385 709.8
+1314.71362 1176.7
+1358.67700 3428.2
+1359.17542 9418.2
+1359.67603 10626.4
+1360.18005 9193.9
+1360.67749 3095.3
+1361.18054 1345.0
+1365.02112 1141.4
+1365.35876 1047.9
+1365.66602 894.9
+1372.74402 910.0
+1381.60022 1924.6
+1382.57996 1623.1
+1383.59290 1164.6
+1394.18030 827.0
+1408.71277 1603.4
+1409.21716 1618.9
+1409.71973 1159.6
+1410.20972 902.5
+1429.77808 916.6
+1430.28625 930.5
+1459.23608 955.0
+1467.73486 916.7
+1468.25012 1580.7
+1525.51526 819.0
+1540.76624 886.9
+1541.77063 2040.5
+1647.27502 1033.2
+1689.40881 788.5
+1697.33630 738.4
+1861.19702 635.2
+1876.41504 747.0
+1878.86841 1447.8
+1879.51636 18777.1
+1880.12683 1847.8
+1907.06274 7138.3
+1930.69299 995.2
+1937.96436 736.4
+S	2730	2730	765.4127671
+Z	4	3057.61977
+203.20285 563.7
+221.99603 576.0
+222.68536 612.2
+244.18575 690.5
+245.11609 531.5
+308.91443 516.1
+310.21338 1094.3
+326.36880 640.3
+334.10278 617.2
+338.20706 2652.7
+341.75952 647.3
+358.81812 672.6
+361.94150 571.6
+381.36557 730.2
+409.28140 1780.8
+413.49881 570.1
+426.73370 641.4
+426.75235 501.9
+427.56906 787.3
+437.27499 3887.9
+438.27908 686.0
+458.11273 691.2
+520.24030 1028.8
+532.55511 2027.3
+536.24072 1341.2
+585.80450 1880.0
+586.05554 1608.9
+586.30322 894.6
+605.32892 680.5
+615.31226 1291.0
+633.32147 3366.7
+635.30652 1236.9
+649.28259 626.7
+656.08795 3617.9
+656.33734 3697.5
+656.58990 1981.5
+656.83514 762.6
+676.64813 1035.0
+681.10400 2178.5
+683.35144 879.0
+706.15967 687.7
+712.90332 638.4
+714.22089 620.8
+728.53766 675.2
+732.18732 748.8
+733.23779 714.3
+734.13544 710.9
+741.69324 2000.2
+743.05115 690.0
+745.21545 730.3
+746.18250 637.2
+746.55853 1366.0
+748.39862 1077.8
+765.14777 777.0
+782.00726 645.6
+788.66730 633.9
+795.77356 1162.7
+797.29584 629.3
+798.59314 838.6
+798.79517 722.1
+804.40051 1085.8
+806.76459 629.8
+810.00720 753.2
+813.96692 848.2
+821.40155 758.3
+825.40094 770.8
+826.39856 745.5
+829.28186 671.4
+834.73450 784.3
+868.44373 3176.2
+868.77747 4989.8
+869.11151 3487.4
+869.44714 1309.0
+874.44781 76257.0
+874.78204 106146.9
+875.11597 71949.2
+875.44965 24758.0
+875.78674 2043.4
+876.14740 1047.3
+878.29169 732.1
+888.32098 680.7
+891.43457 912.3
+891.54156 903.2
+906.59515 665.9
+907.47528 1553.1
+907.80542 2985.2
+908.13849 793.4
+908.47504 862.6
+920.44214 802.1
+948.97137 1484.1
+949.46759 1254.7
+949.96185 857.6
+972.44525 858.7
+990.45062 898.7
+1057.25854 889.0
+1069.94324 783.1
+1140.33459 831.9
+1198.24414 3465.1
+1343.97937 602.8
+1667.20374 723.6
+1717.80176 718.1
+1870.13977 1040.7
+1878.53418 622.1
+1879.55786 19825.2
+1880.52649 792.7
+1882.10583 558.7
+1893.51538 607.7
+1907.02795 6782.9
+1918.85779 989.6
+S	2731	2731	1879.97199127
+Z	3	5636.641
+Z	2	3758.096
+532.52576 2136.1
+548.14557 621.3
+549.18799 667.7
+568.34644 641.4
+630.45422 887.7
+676.63538 922.8
+688.08282 598.8
+721.90997 553.0
+966.53949 806.5
+1019.66632 777.0
+1094.13696 623.8
+1198.16980 3266.8
+1270.28491 690.7
+1525.50024 720.3
+1776.95728 1021.7
+1807.44995 604.5
+1812.37048 702.3
+1872.84058 604.9
+1878.70203 785.8
+1879.51807 18834.9
+1879.97534 1388.3
+1881.22253 731.9
+1881.52405 662.0
+1907.11475 7218.4
+1918.87012 941.6
+1981.90930 645.1
+S	2733	2733	734.849241267
+Z	3	2201.272
+Z	2	1467.851
+193.83383 523.3
+199.23943 1051.3
+199.30086 749.9
+199.31075 1538.9
+199.32571 1806.6
+199.33638 2088.6
+199.35072 639.2
+199.43427 1171.6
+201.35718 616.5
+203.17082 599.3
+204.87039 526.9
+213.26727 572.0
+217.13350 697.6
+220.76833 754.5
+224.32205 529.6
+224.32863 567.1
+233.16498 1661.4
+248.56082 578.9
+254.14807 965.9
+262.15436 2118.3
+271.39978 566.2
+273.63956 560.8
+280.18210 650.3
+290.33533 658.7
+300.15457 2611.5
+301.22757 933.4
+304.17633 659.5
+305.16037 16556.1
+306.16479 1059.9
+306.80920 644.0
+307.75323 725.3
+314.76904 568.0
+319.45340 512.3
+322.18710 3686.3
+328.52139 595.8
+329.22308 1527.1
+330.35300 810.2
+334.13992 2683.5
+350.27997 895.1
+367.23376 1987.8
+368.22046 1145.4
+374.24399 1130.0
+374.85376 692.6
+385.24448 2476.8
+395.23111 576.6
+399.02386 564.3
+400.23251 1645.5
+401.21713 1261.9
+402.20096 3033.0
+406.11679 557.9
+407.19547 1697.5
+413.23904 4705.1
+418.24393 11539.2
+419.24133 1766.0
+427.52344 670.8
+427.53430 681.1
+435.27042 4783.8
+447.22284 3332.6
+482.64755 707.0
+487.28815 701.8
+499.29739 698.1
+506.18661 662.2
+512.04669 515.9
+513.31757 2369.7
+514.30145 3248.4
+515.28271 1966.8
+516.29523 671.9
+518.22626 2080.4
+530.34363 4511.3
+531.32721 15152.2
+532.30603 2872.3
+532.33594 2347.5
+532.50696 1612.4
+533.31744 809.6
+536.23724 6903.3
+537.24152 1093.1
+546.99725 2215.2
+547.14624 978.4
+547.20984 705.6
+547.25330 789.7
+547.68500 1863.6
+548.12744 1194.9
+548.25769 1190.3
+548.27631 940.8
+548.29877 2085.8
+548.35382 496364.8
+549.02307 2901.3
+549.35657 93440.2
+549.46265 1063.5
+549.56824 854.4
+549.71570 2978.2
+550.35956 1688.3
+553.98010 1006.9
+558.33960 953.4
+560.30573 4069.1
+610.28564 1171.4
+619.28833 1426.0
+635.30566 5362.6
+636.30872 818.4
+645.64447 552.3
+646.35358 3915.8
+655.39081 4428.0
+660.95874 590.6
+676.63123 931.6
+676.72943 757.3
+687.31927 646.5
+688.42206 773.9
+692.39478 1384.7
+699.37610 1230.0
+700.29498 1299.3
+709.35968 1339.0
+709.91125 668.3
+712.85614 716.2
+714.83716 1637.3
+715.34320 1468.4
+715.82056 973.1
+716.28503 644.6
+716.40656 6089.5
+717.38989 18045.9
+718.39386 4411.7
+739.16791 668.6
+748.38879 1451.7
+761.25543 759.8
+763.28326 940.5
+772.57849 648.8
+777.66620 584.3
+781.67761 656.5
+812.38977 976.2
+813.37201 1788.7
+814.39276 730.9
+831.39075 4045.1
+832.40192 1037.7
+861.47186 2311.5
+862.46216 709.7
+881.45361 912.2
+882.46588 807.4
+911.44989 1249.3
+912.45074 2639.8
+913.45575 959.6
+923.49585 1007.5
+930.45929 9328.7
+931.45685 1857.3
+1021.50726 2436.4
+1022.50665 961.9
+1059.49866 2838.6
+1061.51099 872.5
+1067.21765 625.6
+1070.55054 1078.1
+1136.52930 3220.4
+1137.53638 1109.8
+1198.13647 3457.6
+1202.51123 736.0
+1236.56958 880.3
+1237.57532 3099.0
+1239.58179 742.2
+1319.57788 2701.5
+1342.58496 643.5
+1776.96619 934.4
+1879.51392 18647.5
+1879.79773 4507.4
+1880.22278 957.8
+1907.05408 7530.7
+1918.95105 961.8
+S	2734	2734	735.852407933
+Z	2	1469.857
+Z	3	2204.282
+198.85567 606.2
+198.94801 761.6
+199.23700 507.5
+199.24489 687.8
+199.27512 621.6
+199.29517 915.5
+199.31444 884.1
+199.32434 2488.0
+199.34749 1006.2
+199.42171 898.1
+224.63097 669.3
+230.50180 556.0
+233.16527 1244.3
+236.81387 679.0
+242.18457 612.7
+256.21506 606.3
+262.15417 1516.4
+300.15460 2632.9
+300.68454 558.3
+301.22833 681.4
+305.16034 12630.4
+306.16391 1534.6
+316.41077 588.8
+322.18701 2701.2
+329.22189 1089.9
+334.13925 1665.4
+342.20090 731.4
+342.26266 674.1
+367.23438 789.0
+368.21793 682.3
+368.56671 548.2
+374.24316 826.7
+381.34909 845.0
+385.24377 1612.9
+401.22003 1126.1
+402.20224 1079.1
+407.19559 4516.4
+413.23880 3547.9
+418.24438 7864.1
+419.23276 1336.1
+427.52924 953.0
+435.27170 2799.5
+445.18854 1011.3
+447.22238 2661.2
+464.34366 745.4
+467.73868 741.2
+487.10632 866.5
+490.22644 1042.3
+513.31519 1430.7
+514.29974 2852.4
+515.28571 1284.3
+518.22595 3712.5
+519.23010 948.4
+526.45837 548.1
+530.34619 2742.8
+531.32684 9233.0
+532.30542 1372.7
+532.33508 2207.0
+532.48248 2154.0
+536.23700 14055.4
+537.24042 4107.5
+541.07532 681.3
+541.47192 608.7
+546.29718 1444.3
+546.99915 1917.8
+547.69025 1482.0
+548.35382 393949.8
+548.40717 1444.1
+549.02319 2516.1
+549.13837 884.3
+549.35651 103522.9
+549.47064 1284.7
+549.55646 1202.1
+549.71472 2378.5
+550.35913 4246.1
+560.30664 3971.9
+584.81665 828.5
+586.05579 830.3
+587.20941 812.5
+601.36438 621.6
+603.30768 3133.7
+604.30579 919.6
+607.16156 688.7
+610.28729 1276.6
+610.78687 674.5
+619.29163 2570.3
+619.79443 3202.9
+620.29272 1860.5
+635.30493 9251.2
+636.30768 3682.3
+637.30658 819.2
+646.35468 3597.2
+647.35284 1277.8
+655.39215 2820.0
+656.39667 1412.0
+663.37994 1210.0
+682.28748 623.6
+685.84943 1095.4
+699.37775 1082.2
+699.53650 1052.4
+699.87762 732.8
+700.29657 2342.2
+700.37976 897.9
+709.35883 2718.6
+715.34009 2614.9
+715.83429 3064.7
+716.29889 2217.2
+716.40106 4942.3
+716.79596 1039.2
+717.29376 845.2
+717.39020 14445.7
+718.30481 1510.1
+718.39575 4656.5
+748.38934 3363.4
+749.38599 1018.5
+755.13477 730.8
+769.55322 820.4
+794.03674 897.5
+795.60333 942.8
+795.78058 1118.1
+798.93237 2713.7
+799.43408 3337.6
+802.24725 694.0
+813.38318 2732.1
+814.38293 1567.2
+817.45062 1014.4
+822.44635 1147.8
+831.38922 7047.8
+831.84747 794.8
+832.39368 3665.6
+854.20258 716.3
+855.47247 906.7
+855.97601 1617.2
+861.47290 2898.7
+862.47552 1103.2
+863.47119 975.9
+911.44946 1463.2
+912.44946 4900.1
+913.44867 2263.1
+914.44763 797.4
+923.49438 2446.6
+925.48407 849.3
+925.98645 848.8
+929.45825 1091.3
+930.45746 16174.2
+931.46057 5997.2
+932.45868 1585.5
+982.00256 656.6
+1019.64740 640.9
+1021.50427 3464.6
+1022.50922 2085.1
+1041.48938 1081.1
+1042.48425 816.9
+1057.26599 1048.3
+1059.49890 4920.0
+1060.50220 2695.4
+1070.56030 2391.2
+1136.53088 5363.9
+1137.53748 3514.0
+1138.53149 1450.8
+1145.96741 788.7
+1146.89001 836.1
+1190.53625 2026.6
+1191.53394 858.4
+1198.08472 3495.5
+1219.35364 620.4
+1237.57715 5771.6
+1238.57629 3563.3
+1239.58105 1505.5
+1278.72681 642.9
+1302.51038 730.5
+1319.58301 3005.0
+1320.58655 2510.0
+1526.79041 649.4
+1637.08105 575.7
+1870.28516 866.5
+1878.37146 781.8
+1878.88367 969.8
+1879.30933 4264.2
+1879.58569 19056.5
+1880.27686 1168.7
+1880.78711 674.9
+1881.70117 762.5
+1882.50281 614.2
+1907.09204 7392.0
+1930.54797 1122.4
+S	2735	2735	724.7955746
+Z	3	2171.112
+Z	2	1447.743
+188.25502 934.1
+188.27406 1367.0
+188.28299 1184.5
+188.28960 1229.1
+188.29765 1255.3
+188.30774 949.2
+188.31647 862.6
+199.22128 730.2
+199.27536 961.5
+199.29750 886.8
+199.31781 2111.2
+199.33354 1788.8
+199.34309 1502.9
+199.35934 804.2
+199.43065 1013.4
+199.73256 633.7
+208.66667 750.2
+209.93990 788.3
+247.25925 766.5
+259.10754 1229.1
+260.84280 672.3
+271.57864 926.0
+276.13358 5220.6
+279.16992 1520.1
+299.53955 1071.4
+308.87781 723.7
+314.15012 2191.8
+332.16098 1197.2
+347.16043 739.3
+367.23209 1051.4
+376.18512 982.2
+389.21671 3968.3
+390.21887 1065.4
+395.26273 2260.1
+396.23672 803.8
+423.25800 1907.7
+427.51620 996.3
+429.17526 974.8
+440.21829 774.8
+445.24341 2817.0
+446.37082 778.2
+449.22177 868.0
+463.25339 46278.2
+472.25400 5074.1
+473.25223 1595.1
+478.22046 1059.6
+490.26447 7416.8
+491.26563 1594.9
+496.24103 965.5
+522.28461 833.6
+532.51611 2629.5
+536.34119 1226.1
+545.36578 915.1
+548.24762 1089.3
+558.23315 4504.6
+563.31787 7194.2
+566.62506 782.6
+575.25842 5598.5
+576.24414 2864.4
+576.35327 2460.5
+576.84827 1039.2
+581.32513 1283.7
+591.31250 8450.1
+592.31818 2283.4
+593.26892 5369.4
+602.88184 765.6
+605.32904 912.2
+609.32202 11900.8
+610.32391 4657.0
+623.51196 934.4
+628.45062 743.5
+651.35699 883.7
+661.65161 946.2
+676.40088 4809.7
+676.64209 1104.5
+677.37323 1064.6
+677.41986 967.4
+686.41901 760.2
+689.32788 2250.6
+694.41138 7542.8
+695.41412 2898.2
+696.39252 1150.6
+696.89368 1482.6
+701.01123 654.2
+703.18781 1039.4
+704.27448 833.7
+704.39612 10314.6
+704.91754 1366.7
+705.40204 5482.9
+705.59369 939.9
+705.90173 2784.6
+706.35834 2580.5
+707.34027 1805.6
+707.58429 1035.7
+739.24561 760.5
+740.40039 792.0
+759.44373 1025.4
+774.88757 1022.9
+775.65674 772.5
+779.00702 975.4
+800.26593 832.0
+806.46130 916.5
+808.29041 824.2
+856.41840 2167.1
+866.49072 873.7
+879.38464 842.9
+899.93707 2572.5
+900.43030 1210.1
+955.57916 36613.7
+956.58124 19932.9
+957.58368 4584.2
+981.96887 1551.0
+982.46326 919.9
+1018.00745 908.3
+1056.62683 16186.7
+1057.62964 8218.2
+1058.62781 2246.7
+1063.96985 856.5
+1139.26257 775.3
+1151.69312 2670.1
+1152.73242 1028.3
+1169.71021 17848.3
+1170.71326 11915.0
+1171.71558 3559.4
+1198.15222 3761.7
+1298.74988 1398.1
+1468.01599 853.4
+1545.48413 841.8
+1563.00757 798.0
+1777.03040 1170.3
+1878.61768 972.3
+1878.95923 1997.0
+1879.55188 23903.3
+1880.15906 2093.7
+1907.11829 8755.7
+1930.48364 1414.2
+1955.22974 780.1
+S	2737	2737	1879.9958246
+Z	3	5636.712
+Z	2	3758.144
+532.53290 2290.7
+551.79010 573.6
+676.64471 1060.1
+733.95703 564.5
+795.77679 1021.8
+872.15619 680.4
+879.39612 594.8
+1198.19556 3046.0
+1199.59949 559.0
+1318.97888 710.8
+1474.54602 675.7
+1586.40356 615.3
+1842.90808 724.0
+1878.37561 825.9
+1878.85938 1498.9
+1879.53772 19760.8
+1880.21313 797.9
+1880.63940 1137.3
+1881.50110 577.1
+1882.48242 669.3
+1907.09656 7533.2
+S	2738	2738	998.0030746
+Z	4	3987.981
+262.69138 542.3
+271.41617 593.8
+315.41513 551.0
+323.03186 636.8
+338.79050 743.5
+339.24356 593.9
+398.94293 725.8
+427.55515 660.7
+438.27026 1129.1
+456.28156 1019.7
+468.64172 628.0
+470.25900 732.8
+473.78445 608.3
+504.24521 749.3
+520.27155 825.9
+526.90778 696.3
+532.54541 2061.9
+630.42975 774.3
+635.28375 3088.5
+658.64063 736.3
+676.64435 977.6
+795.78351 1012.4
+883.67273 2378.2
+883.93091 1320.7
+908.94415 683.7
+937.52124 671.5
+937.78961 675.5
+945.98901 1217.5
+954.51337 590.4
+957.97534 2045.7
+958.22192 1019.9
+975.63379 657.5
+1119.30713 610.0
+1171.88452 895.5
+1172.22034 1841.7
+1172.56287 1122.3
+1175.87732 2269.0
+1176.21289 5018.1
+1176.54626 3802.0
+1176.88171 3029.5
+1177.22253 1090.1
+1177.55981 17434.8
+1177.89417 27994.9
+1178.22925 25280.5
+1178.56360 12788.4
+1178.90186 2680.3
+1198.22546 3525.9
+1208.88794 1032.4
+1209.56177 1045.3
+1209.91138 1228.1
+1210.58142 7436.8
+1210.91748 9729.8
+1211.24976 8302.9
+1211.58752 4908.1
+1242.26465 1375.4
+1242.58716 911.8
+1242.93445 1064.6
+1243.60352 4773.3
+1243.94067 9316.7
+1244.27283 8128.3
+1244.61011 4927.3
+1244.93652 1703.0
+1246.74805 657.0
+1276.96399 2240.7
+1277.29175 2108.5
+1277.62646 1267.0
+1295.60999 716.5
+1358.71179 17395.1
+1359.71704 10513.2
+1360.72192 3597.0
+1395.27319 612.8
+1457.79785 1073.7
+1458.79492 891.1
+1643.96497 620.8
+1664.76624 921.3
+1870.24524 574.4
+1878.55554 886.2
+1879.06665 2070.6
+1879.55237 19876.4
+1879.83459 1033.0
+1880.05823 1408.3
+1907.08350 6882.7
+1930.66528 849.8
+1975.85583 747.5
+S	2739	2739	1272.74699127
+Z	2	2543.646
+Z	3	3814.966
+350.28458 776.1
+372.90881 551.4
+427.56985 1091.4
+447.60873 546.6
+448.63382 662.5
+482.68198 561.5
+532.48145 1921.7
+549.19501 928.6
+570.02814 702.2
+593.54529 690.2
+621.63898 604.8
+650.40698 667.5
+672.34711 620.3
+676.66150 674.0
+750.05786 628.6
+815.84552 545.6
+818.68591 674.9
+887.52673 643.9
+1009.63861 652.5
+1057.27112 821.2
+1134.62915 636.2
+1198.07849 2918.7
+1201.50708 702.7
+1313.00391 620.4
+1358.30786 645.2
+1477.63562 1504.3
+1525.49915 689.0
+1616.16577 616.2
+1877.71167 716.7
+1877.99146 765.8
+1878.90283 1298.0
+1879.15613 1707.8
+1879.59619 17584.9
+1880.05408 2387.8
+1880.55078 1134.8
+1882.00732 677.0
+1906.53381 885.9
+1907.06152 7338.9
+1930.72522 1089.1
+S	2741	2741	1880.01440793
+Z	3	5636.768
+Z	2	3758.181
+509.10416 634.0
+532.52100 1688.0
+533.44537 551.3
+538.44720 618.7
+550.97095 599.8
+572.22467 645.0
+676.66302 1115.7
+831.61243 608.7
+856.07568 545.2
+856.77319 589.2
+858.08459 781.3
+1041.00781 665.8
+1057.28650 666.8
+1082.94275 655.5
+1168.72388 721.3
+1188.22485 1044.1
+1198.16125 3324.4
+1206.05530 592.4
+1645.58826 666.0
+1875.72461 606.8
+1878.21472 969.6
+1879.18115 1615.1
+1879.34302 1445.8
+1879.60327 19271.8
+1880.03687 1858.4
+1880.60352 774.7
+1881.00720 653.9
+1907.12183 7557.8
+1930.67358 1213.8
+S	2742	2742	997.7498246
+Z	4	3986.968
+279.65826 643.5
+314.11920 569.7
+334.08865 589.7
+346.57535 560.2
+346.69046 549.5
+359.47537 511.7
+372.83670 629.0
+452.30981 643.0
+532.53833 1829.1
+549.17896 774.6
+557.16486 739.7
+630.42963 920.6
+676.64862 1120.9
+796.93695 618.7
+857.43018 614.1
+961.05377 707.2
+974.79730 640.6
+1057.26086 720.0
+1074.90283 599.7
+1079.32068 636.2
+1087.19922 636.9
+1174.71521 586.6
+1177.56165 1067.0
+1177.89368 1920.7
+1178.23438 2328.9
+1178.56274 1140.2
+1198.21045 3187.7
+1211.61475 747.9
+1243.91968 788.2
+1358.71289 2761.6
+1359.71240 1832.6
+1525.49463 946.9
+1649.91907 678.9
+1776.99341 802.0
+1877.59961 759.7
+1877.86597 660.8
+1879.55676 20429.7
+1880.46387 646.3
+1881.95435 720.6
+1906.72961 659.0
+1907.10095 7320.4
+1907.44556 1086.0
+1930.67249 916.0
+S	2743	2743	1012.2550521
+Z	4	4044.98891
+308.92450 761.6
+320.14758 569.5
+344.09052 682.6
+392.53647 691.0
+415.54449 760.4
+449.50925 595.6
+475.97870 688.0
+477.10785 617.9
+482.75964 589.4
+491.73334 554.0
+532.28632 837.4
+532.52313 1838.4
+547.22241 702.9
+611.37164 654.0
+622.31738 685.7
+676.65356 861.2
+692.41266 555.4
+717.43182 703.9
+795.77856 1207.7
+807.26917 568.5
+928.46271 778.8
+953.48004 666.0
+953.99323 887.7
+1020.81134 708.5
+1028.51685 816.0
+1057.17651 730.3
+1057.28601 762.2
+1143.54285 1365.6
+1166.94946 606.9
+1193.89966 1018.1
+1197.23865 4034.5
+1197.57446 5184.6
+1197.90796 5519.7
+1198.20605 3609.7
+1198.57849 1374.3
+1198.90210 1150.6
+1230.26404 1247.1
+1230.59949 2764.0
+1230.93689 1130.9
+1231.26709 1028.6
+1253.05981 1190.2
+1253.55676 1597.9
+1263.29138 1735.1
+1263.60339 1876.8
+1263.96448 1372.3
+1264.29297 1258.5
+1383.05310 677.7
+1525.49329 670.0
+1530.04150 704.3
+1616.92798 693.6
+1870.27002 802.7
+1878.49060 587.7
+1879.57666 18774.6
+1880.25159 1026.6
+1880.69116 1007.6
+1907.07654 7119.6
+1907.42273 767.4
+1930.67371 669.0
+S	2745	2745	1880.0168246
+Z	3	5636.775
+Z	2	3758.186
+506.46014 722.2
+524.20160 571.6
+532.52576 2155.5
+580.83563 610.9
+595.40186 646.0
+676.63611 865.4
+681.99579 634.8
+688.95367 549.5
+795.78485 963.3
+905.76489 610.8
+1032.01074 652.0
+1171.73169 699.2
+1198.17285 3106.1
+1259.19739 599.2
+1344.80615 649.7
+1489.67542 683.1
+1497.17688 646.9
+1671.99939 679.4
+1776.38391 722.9
+1878.39551 1515.7
+1878.93188 1272.4
+1879.18030 2297.0
+1879.53503 19892.5
+1879.86047 2426.6
+1880.48303 1159.9
+1907.05469 7696.5
+1918.93896 880.1
+1930.62830 863.1
+S	2746	2746	1012.7563246
+Z	4	4046.994
+270.84576 727.8
+271.82983 643.9
+341.36185 555.9
+342.29150 843.9
+362.62875 508.1
+381.37717 789.3
+415.99734 574.3
+438.26926 803.4
+442.73346 610.6
+444.27747 609.3
+447.14383 584.2
+456.27985 887.8
+490.66971 637.4
+494.73413 600.5
+517.69214 614.2
+532.51331 1569.8
+533.28961 715.0
+549.18988 794.5
+549.26886 594.3
+588.89819 724.9
+750.71802 637.0
+755.77106 588.1
+764.35699 607.3
+788.89307 1593.0
+789.38953 1040.5
+795.56616 601.6
+795.77631 1043.5
+816.43811 6507.2
+817.44415 3425.1
+858.11658 634.1
+880.43896 811.7
+881.92773 728.9
+898.67090 699.1
+922.95465 874.7
+928.47131 2494.8
+928.96869 1261.5
+955.99237 652.3
+969.73279 832.9
+969.97931 1020.3
+972.97247 866.1
+977.47003 4311.6
+978.47546 2633.6
+992.40991 670.5
+994.00299 904.7
+995.48279 2872.6
+998.72101 585.1
+1028.51807 4795.2
+1029.51892 2224.3
+1030.52747 1031.3
+1140.93457 720.0
+1143.54529 6604.4
+1144.54846 2952.8
+1145.53564 865.3
+1189.55957 952.0
+1191.55334 627.5
+1193.23792 3730.3
+1193.57007 10222.2
+1193.90344 10141.1
+1194.23511 7275.3
+1194.56470 4004.2
+1194.90479 1817.1
+1195.22864 1064.1
+1196.57263 827.3
+1196.90479 1547.1
+1197.23657 14024.8
+1197.57300 16237.1
+1197.90540 13633.9
+1198.24585 7535.2
+1198.57483 1542.0
+1207.56360 1631.1
+1208.58459 721.1
+1226.59558 3733.4
+1226.92700 5986.7
+1227.25610 2971.1
+1227.60413 769.0
+1227.92102 986.2
+1230.25867 6387.3
+1230.59607 6060.6
+1230.92847 5881.0
+1231.26306 2314.0
+1259.61548 3416.1
+1259.94592 5089.9
+1260.28076 2738.5
+1260.61084 1312.1
+1263.28088 3441.9
+1263.61560 6208.1
+1263.95300 4783.0
+1264.28540 2983.8
+1271.65747 1514.1
+1272.64014 849.8
+1292.95825 1018.9
+1293.29639 1050.5
+1296.31433 1131.5
+1296.64575 845.4
+1296.98730 1479.7
+1358.66943 3587.2
+1359.67053 2776.7
+1360.66956 762.3
+1505.74634 1345.1
+1506.73657 1209.3
+1776.90100 821.0
+1777.49463 671.7
+1824.93237 705.4
+1870.29797 883.5
+1879.54138 18474.8
+1879.81824 3708.1
+1880.20374 1815.0
+1880.71460 760.5
+1881.20679 918.9
+1907.11658 7573.6
+1907.74048 717.6
+S	2747	2747	894.7024396
+Z	4	3574.77846
+268.91321 661.5
+325.58264 617.1
+350.29709 716.9
+441.00790 554.9
+470.29852 552.2
+482.63538 576.2
+532.49500 2180.1
+548.25360 568.9
+556.65137 582.4
+572.10986 688.2
+581.27435 566.8
+587.01880 665.9
+630.41998 554.8
+630.44916 614.1
+658.82263 618.7
+669.32935 731.2
+676.66547 1049.1
+731.76691 705.7
+736.40686 763.3
+779.46851 1118.1
+795.78998 1154.8
+875.52832 810.9
+903.95679 641.1
+995.79968 603.3
+996.79358 694.9
+1008.51996 964.0
+1040.50134 4427.5
+1040.83582 7560.4
+1041.17090 5168.2
+1041.50793 1248.6
+1057.26367 979.2
+1073.52661 1466.0
+1073.86084 2684.7
+1074.19702 1003.1
+1106.54822 1122.1
+1106.88049 2585.8
+1107.20581 1750.0
+1188.12134 689.7
+1198.10754 3523.0
+1250.57202 623.1
+1276.66150 604.4
+1408.57532 592.6
+1423.95007 660.6
+1447.14551 673.1
+1525.46802 697.1
+1878.63232 829.8
+1878.97522 818.9
+1879.59326 19344.0
+1880.26843 787.3
+1880.56958 739.1
+1883.86670 630.6
+1907.13977 7444.3
+1930.66577 799.4
+S	2749	2749	894.7034171
+Z	4	3574.78237
+238.69579 726.3
+256.52603 642.8
+332.93396 577.1
+339.20197 722.5
+342.28671 617.1
+419.18527 925.4
+438.27066 1917.3
+445.42197 609.0
+456.28024 1998.1
+482.68451 764.9
+482.69504 747.1
+532.50684 1421.9
+545.82642 608.7
+567.31232 788.5
+574.40680 664.1
+591.61462 671.0
+603.06964 642.1
+630.43475 827.2
+650.42511 1369.8
+669.33240 1399.1
+676.65503 874.1
+686.85559 636.9
+693.36279 952.6
+693.86456 1319.4
+731.16022 667.6
+757.14825 620.8
+779.46527 2400.8
+780.46313 1275.8
+780.88409 970.6
+781.12335 1196.9
+781.38141 1289.3
+795.77899 1023.7
+805.90283 1344.1
+809.23157 745.7
+819.97534 942.9
+855.18030 2640.4
+855.43073 3420.5
+855.68176 1261.7
+858.09564 776.5
+872.14581 786.1
+874.93445 1471.3
+878.41187 752.1
+997.48651 810.5
+1008.51379 2390.7
+1009.50934 1087.5
+1034.82385 3282.5
+1035.15955 3331.4
+1035.49890 4302.4
+1035.82996 1917.2
+1040.50171 24407.8
+1040.83533 41770.3
+1041.16980 32887.0
+1041.50500 19749.9
+1041.83936 6352.9
+1042.18286 1202.1
+1057.25745 659.6
+1067.85803 947.4
+1068.17737 1298.9
+1068.84729 925.3
+1073.52441 9754.6
+1073.85864 15245.8
+1074.19360 12100.6
+1074.52478 7836.2
+1074.85876 2986.4
+1095.43298 714.9
+1100.86523 922.3
+1101.21716 941.7
+1106.54724 8238.5
+1106.88086 12043.1
+1107.21509 11410.3
+1107.55042 6814.1
+1107.88464 3041.1
+1137.54980 2332.7
+1138.54431 839.7
+1139.57263 2672.3
+1139.90588 2810.3
+1140.24097 2139.1
+1140.57056 1482.0
+1197.51404 736.2
+1198.12097 3105.3
+1248.57861 1114.7
+1254.59937 1100.1
+1255.08423 859.5
+1265.61060 907.1
+1266.61816 736.1
+1289.85876 767.3
+1360.60791 699.5
+1376.35657 778.9
+1379.67542 714.5
+1406.58472 638.0
+1525.50696 791.8
+1776.89246 706.1
+1870.15295 673.7
+1878.86816 1025.4
+1879.58997 19795.4
+1880.29529 956.5
+1880.49890 803.1
+1893.15210 611.6
+1906.82690 887.1
+1907.12744 7326.8
+1930.69397 995.2
+1977.87634 633.1
+S	2750	2750	1012.2560896
+Z	4	4044.99306
+271.53735 685.2
+285.21771 534.1
+290.00735 729.2
+324.79559 627.2
+344.58847 593.2
+357.21365 699.1
+368.43936 594.5
+377.31885 547.1
+381.35248 761.4
+438.27026 1761.5
+441.69586 822.3
+456.27960 1330.1
+461.18295 1010.4
+479.71274 630.3
+482.35849 736.9
+484.54446 624.2
+532.51355 1956.1
+546.35986 551.9
+619.64117 853.8
+630.39337 1023.9
+676.54297 642.9
+676.64966 746.8
+686.50317 565.5
+702.71490 631.5
+731.10510 774.3
+781.46552 806.2
+783.93622 553.7
+811.46045 714.8
+898.43530 1729.6
+898.69037 1080.9
+920.26459 615.0
+928.46777 4869.2
+928.96869 4504.3
+929.46490 2107.9
+972.73230 1443.3
+972.98438 1868.4
+973.23987 1282.3
+993.05463 661.9
+1015.35504 604.9
+1019.64325 940.2
+1034.99780 770.5
+1039.13599 671.3
+1057.25464 776.9
+1093.83948 1407.3
+1109.49280 616.6
+1124.52722 629.8
+1157.59595 665.3
+1191.91016 1646.7
+1192.25012 766.6
+1192.57605 1077.1
+1192.91370 866.8
+1193.24622 1430.8
+1193.57349 2664.9
+1193.90430 3650.6
+1194.23425 2692.4
+1194.55896 1896.3
+1196.90210 1862.6
+1197.23975 24254.2
+1197.57336 39984.1
+1197.90686 43107.0
+1198.24133 28920.3
+1198.57458 11853.6
+1198.91077 2253.2
+1224.59705 1274.7
+1224.91357 958.2
+1226.58887 1564.3
+1226.91968 1561.7
+1227.25220 1219.6
+1230.25964 7559.3
+1230.59509 15873.3
+1230.92871 14306.4
+1231.26489 8485.5
+1231.59583 4645.7
+1247.66248 613.9
+1253.04614 1177.6
+1253.54321 1009.8
+1259.61047 1294.4
+1259.94922 2828.7
+1260.27991 1080.5
+1260.62134 946.9
+1262.95447 850.8
+1263.28247 7693.2
+1263.61743 14188.7
+1263.95264 14238.7
+1264.28516 8830.3
+1264.62268 5211.8
+1294.12463 862.8
+1296.31982 1198.4
+1296.63599 2046.4
+1296.97644 2246.2
+1297.30396 1124.3
+1297.63757 1408.9
+1525.37683 1007.4
+1716.29688 673.9
+1734.77380 833.6
+1735.77490 1313.4
+1736.79956 816.8
+1749.83228 775.1
+1775.55823 674.1
+1854.96301 803.1
+1870.25696 753.2
+1877.22595 758.3
+1878.55334 669.4
+1879.21960 3794.6
+1879.54211 18202.2
+1881.53455 863.5
+1907.12085 7329.1
+S	2751	2751	1879.9908246
+Z	3	5636.697
+Z	2	3758.134
+516.80231 591.0
+532.52209 1906.9
+535.52094 580.0
+549.18622 759.3
+555.66711 605.8
+577.11310 650.8
+603.73273 615.6
+630.44647 977.9
+676.64398 1275.1
+727.01984 638.3
+731.16669 654.3
+761.58655 703.7
+800.22852 658.2
+868.31348 587.8
+921.10614 603.0
+928.99738 750.6
+1079.40576 736.2
+1113.28357 617.7
+1188.03125 824.4
+1198.16138 3003.7
+1221.90173 548.9
+1391.11487 638.6
+1530.58142 629.5
+1574.45752 717.8
+1776.93591 641.5
+1878.99146 1485.3
+1879.53906 19585.3
+1880.06616 1381.4
+1880.33142 904.3
+1902.72241 646.9
+1907.09497 7275.4
+1907.35217 990.3
+1930.72119 1257.6
+S	2753	2753	1879.8375746
+Z	2	3757.827
+Z	3	5636.238
+532.55139 1862.9
+577.53320 618.9
+630.40527 793.8
+671.36859 817.7
+676.62549 666.6
+699.03546 590.0
+731.12311 722.1
+749.21356 582.4
+793.45038 631.0
+795.79303 856.5
+805.43347 648.8
+927.39423 592.1
+992.76740 699.4
+1057.20520 553.7
+1198.23755 3161.3
+1244.33496 611.4
+1348.93140 572.0
+1525.41479 837.1
+1556.51526 608.1
+1639.04395 720.0
+1664.38403 658.2
+1718.08862 1737.6
+1873.69946 837.5
+1879.47632 19789.6
+1879.73425 2606.6
+1883.75488 699.5
+1907.05603 7377.2
+S	2754	2754	1012.7555746
+Z	4	4046.991
+324.81546 558.4
+326.94025 593.6
+350.28998 571.2
+354.12476 563.2
+390.62393 611.5
+394.42603 592.5
+419.23663 548.2
+427.58716 1398.5
+448.26688 616.2
+456.27686 637.5
+532.52844 2042.8
+576.10895 573.5
+581.95483 579.9
+626.50836 651.8
+628.36182 603.1
+630.47607 720.2
+676.63318 1081.5
+759.04175 610.4
+795.77228 904.7
+807.75842 666.1
+994.43506 678.7
+1057.23022 1132.3
+1125.77441 659.9
+1197.23853 3802.5
+1197.57251 7109.4
+1197.90576 5593.3
+1198.25037 3090.9
+1198.57214 1926.6
+1198.90881 843.1
+1230.26331 885.4
+1230.60620 1839.6
+1230.93567 2942.7
+1231.26233 1739.1
+1262.56055 677.8
+1263.28882 1421.5
+1263.62195 2167.5
+1263.94604 2302.6
+1264.30078 810.5
+1296.97302 878.7
+1525.54004 862.8
+1559.86035 625.3
+1874.76575 1131.3
+1874.96228 611.7
+1879.51782 19758.6
+1879.78955 2659.7
+1906.06689 528.7
+1906.22119 555.1
+1907.13281 7244.3
+1919.04065 848.7
+1930.76440 776.6
+S	2755	2755	894.9512196
+Z	4	3575.77358
+251.73206 597.8
+280.20502 595.9
+281.18137 574.9
+287.15634 623.7
+306.58307 510.0
+307.96246 754.2
+310.21219 3946.1
+345.53412 605.8
+350.29901 637.9
+351.20197 1550.1
+362.84946 621.9
+371.18793 1020.4
+381.28595 3551.4
+393.24872 1048.7
+395.30228 673.5
+398.16641 901.9
+409.28000 6957.4
+410.28320 1013.4
+421.18463 1329.3
+421.24384 1338.1
+423.29138 879.0
+438.26709 754.8
+442.61499 595.9
+487.03854 573.9
+487.84149 687.3
+494.36829 2500.3
+498.26974 3313.6
+500.21332 1245.4
+520.31036 2155.7
+522.36322 10456.0
+523.36475 2485.7
+527.22369 769.7
+528.20654 2164.9
+532.21729 770.8
+532.50073 2180.1
+534.32391 1714.0
+537.33905 636.6
+538.31787 1084.5
+539.39343 783.7
+545.23523 1876.3
+549.18933 618.0
+552.33752 1148.4
+564.30176 1020.7
+569.32635 729.1
+573.07983 747.3
+583.34375 2274.7
+589.86755 780.4
+595.27039 604.8
+605.39594 712.6
+612.31458 1614.5
+612.68628 609.4
+633.39398 2822.5
+634.40369 841.7
+647.28174 2656.2
+648.28577 856.8
+649.35327 1047.5
+650.42114 8911.9
+651.39575 2934.4
+651.44391 1078.6
+652.40503 872.9
+657.26593 2119.9
+663.37152 1369.5
+669.33270 9868.1
+670.33728 2907.6
+675.27661 1396.0
+676.66650 1133.1
+677.49872 652.3
+680.39954 1122.0
+681.73065 673.1
+682.41229 923.4
+692.30109 1850.1
+714.28015 791.8
+716.09644 605.4
+738.39905 1702.1
+761.45422 2506.1
+762.43640 3754.2
+763.44122 1407.9
+764.48859 3096.8
+765.48407 653.3
+767.33240 3251.4
+779.46375 25920.7
+780.37524 902.3
+780.46765 10625.7
+781.47229 1902.1
+793.48010 1317.1
+794.47980 888.9
+795.76459 769.9
+797.34296 640.1
+798.37317 2644.9
+799.37219 1034.0
+808.36108 1404.7
+816.40558 1433.6
+826.38495 834.2
+858.10400 654.5
+859.40686 2213.2
+860.39880 1030.0
+863.17297 655.0
+864.55121 4491.8
+865.55481 1535.9
+870.19055 757.3
+874.53864 1185.5
+875.51947 5788.6
+876.52191 2143.8
+876.98041 724.7
+877.41760 6344.8
+878.40131 5651.5
+879.40881 1147.2
+880.54041 617.3
+908.71533 627.8
+989.60175 1370.5
+1008.51160 23127.3
+1009.51532 11965.8
+1010.51764 3378.4
+1035.17285 833.0
+1035.50513 892.3
+1040.49951 2280.5
+1040.83508 5422.6
+1041.16980 5837.9
+1041.50781 2921.5
+1041.82751 720.5
+1057.28430 737.5
+1067.53040 610.2
+1073.52197 981.5
+1073.85876 2066.2
+1074.19385 1018.6
+1074.52368 784.2
+1092.97168 795.5
+1100.72839 575.6
+1106.54529 628.9
+1106.88367 1598.4
+1107.21484 1321.9
+1107.54102 766.2
+1118.64539 1741.0
+1119.54968 2124.9
+1120.54480 1828.0
+1137.55273 15468.7
+1138.55664 9053.4
+1139.55591 2908.2
+1180.15601 627.5
+1189.57971 841.0
+1190.57800 663.0
+1198.12012 3250.0
+1247.59973 1147.6
+1248.58752 9584.2
+1249.58887 5585.9
+1250.59766 1906.4
+1258.07898 549.9
+1265.61255 11118.5
+1266.61597 7564.1
+1267.61926 2486.7
+1289.72290 824.1
+1343.65125 787.0
+1378.69556 10124.7
+1379.70044 8518.7
+1380.69897 2655.0
+1436.77368 2223.8
+1437.78357 1515.0
+1460.74426 889.5
+1477.76746 6547.5
+1478.76416 4170.9
+1479.77161 2063.4
+1576.84155 1226.7
+1583.83960 3430.1
+1584.83484 2269.6
+1585.82068 895.7
+1719.20630 1356.6
+1877.71948 899.5
+1878.93115 816.3
+1879.30334 2507.9
+1879.61938 19947.5
+1879.88550 2034.2
+1880.24341 1005.9
+1881.47473 1193.4
+1906.81274 853.1
+1907.15601 7755.8
+1930.72632 733.6
+1998.05603 697.6
+S	2757	2757	1012.2596921
+Z	4	4045.00747
+274.48041 682.8
+287.91815 617.3
+314.65909 830.6
+328.13623 669.3
+334.48471 697.2
+350.27890 626.7
+396.81531 724.6
+398.47284 573.6
+427.55090 769.1
+430.16440 578.1
+438.26981 1117.9
+440.58539 548.8
+456.28180 1521.9
+461.18384 2094.2
+481.42560 595.1
+532.51422 1971.3
+546.27417 637.7
+549.15778 602.3
+568.29633 553.8
+574.26752 1212.0
+670.64429 643.3
+676.66638 857.6
+676.80676 636.3
+686.84174 584.4
+795.77838 1302.2
+898.42969 745.9
+898.93927 1003.9
+928.46570 3603.4
+928.97101 1495.5
+929.46558 1458.7
+945.56940 1259.7
+946.58203 908.9
+966.57550 1213.3
+970.77405 805.3
+972.47876 1249.2
+972.73395 2474.2
+985.76776 774.4
+989.75842 710.4
+1035.52112 846.9
+1038.04834 696.3
+1093.87109 676.8
+1094.17322 874.9
+1108.53918 802.7
+1108.95850 603.8
+1191.89832 1105.0
+1192.23181 1475.1
+1193.24695 1254.0
+1193.57397 2327.9
+1193.90430 2366.9
+1194.22656 3418.4
+1194.57092 1724.3
+1194.90015 2661.3
+1195.23169 1178.2
+1195.57715 772.1
+1196.22729 787.5
+1196.56079 980.2
+1196.90637 2972.8
+1197.23926 18499.0
+1197.57312 27494.1
+1197.90674 29005.4
+1198.11743 2676.3
+1198.24683 12943.7
+1198.57361 4447.0
+1228.60266 856.8
+1230.26184 5331.9
+1230.59583 11883.7
+1230.92773 8617.5
+1231.26465 6604.9
+1231.59937 1302.0
+1241.47803 625.0
+1260.26758 1305.7
+1260.61694 860.3
+1260.91833 727.5
+1263.28381 6668.1
+1263.61816 10089.8
+1263.95117 9405.1
+1264.28247 7100.3
+1264.61597 2401.2
+1296.63562 935.5
+1296.98279 2549.8
+1297.31799 1638.0
+1438.44202 626.1
+1489.02112 601.8
+1717.66003 1680.3
+1734.72290 729.1
+1738.71960 646.3
+1788.29675 688.7
+1863.95178 603.4
+1873.12878 920.0
+1878.27625 1016.0
+1878.55652 1161.3
+1879.06409 2367.3
+1879.61707 18317.1
+1879.91418 3436.0
+1880.14819 2537.7
+1880.72131 1116.4
+1881.02771 970.2
+1881.17615 1008.0
+1907.04797 7285.2
+S	2758	2758	1880.02740793
+Z	3	5636.807
+Z	2	3758.207
+532.51459 1557.0
+532.58820 646.2
+588.49164 536.2
+676.68018 812.9
+794.97095 585.7
+795.72321 507.5
+795.77679 874.7
+913.96680 727.4
+934.63171 640.6
+968.25262 653.1
+1012.11493 642.7
+1025.92944 665.7
+1041.98669 603.6
+1198.14795 2967.5
+1207.05969 796.3
+1344.59265 582.5
+1475.14063 688.4
+1476.35645 882.7
+1872.35730 585.6
+1878.38025 704.5
+1878.77417 777.7
+1879.28674 2517.8
+1879.63904 19806.0
+1879.98779 2222.9
+1880.25525 898.0
+1880.94189 627.9
+1883.16504 784.7
+1907.05994 6989.9
+1930.38562 902.7
+S	2759	2759	812.6291971
+Z	4	3246.48549
+213.64865 534.9
+219.13881 591.8
+220.35353 533.0
+227.96944 597.2
+228.75888 587.8
+235.14362 825.6
+241.23964 639.8
+271.96127 599.4
+325.36847 633.4
+328.65253 594.8
+359.78256 642.2
+368.68311 643.5
+371.45871 550.4
+384.90512 559.3
+403.13486 616.7
+439.70151 555.8
+448.46201 599.9
+456.28134 1075.6
+532.51550 1889.4
+536.23865 1843.1
+549.13806 808.9
+585.81104 2118.6
+586.05902 1764.3
+586.30914 807.9
+601.76965 892.6
+635.30493 1325.3
+660.31604 2105.4
+678.42285 683.2
+686.28558 615.3
+690.00568 791.9
+690.34473 1247.9
+690.67737 764.6
+693.21008 609.8
+695.79364 2145.3
+710.34918 837.3
+721.39020 1149.0
+722.34790 690.8
+722.39087 666.7
+725.07922 1273.7
+725.33875 1016.1
+725.83722 2482.6
+726.34283 1112.9
+735.50226 894.0
+739.36615 1208.1
+742.33502 1968.4
+742.58759 3536.3
+742.83606 1772.3
+746.83832 5043.2
+747.08820 6566.1
+747.34106 3007.9
+747.59918 824.4
+752.03387 802.6
+754.12665 780.5
+754.70929 622.3
+759.72406 803.9
+761.35303 2920.2
+761.86249 1417.6
+765.36487 1001.2
+767.11871 862.4
+769.60425 690.4
+770.03149 707.6
+771.23383 744.8
+774.21521 797.8
+777.36493 620.2
+780.31335 753.6
+781.06317 804.8
+782.38489 734.5
+785.44141 744.1
+785.77423 1128.2
+786.15784 744.5
+786.38501 1109.0
+787.41309 793.6
+787.80646 733.9
+789.14569 664.7
+789.38641 903.0
+790.16235 1130.3
+792.76776 634.6
+793.24670 728.1
+794.24268 697.0
+794.71564 708.6
+800.27502 640.6
+821.59723 658.5
+843.66687 625.0
+846.98907 695.7
+852.72986 1010.6
+853.07990 1315.0
+853.42340 1548.9
+853.60443 681.9
+853.92786 1155.8
+864.43726 761.6
+877.43427 1041.4
+882.66748 644.9
+888.22736 886.8
+890.40472 779.5
+894.42059 1117.0
+894.67889 1523.9
+894.90393 819.9
+895.74957 776.8
+896.07959 2195.8
+896.42584 849.1
+898.18195 3500.0
+898.43066 4672.7
+898.68286 6021.1
+898.93225 3708.0
+899.18329 1770.4
+899.43958 869.5
+902.23700 651.8
+910.72394 630.8
+913.24640 644.1
+917.14917 767.6
+923.19446 1130.5
+923.44269 946.1
+923.70428 1469.3
+934.09332 1753.5
+934.42084 2440.1
+934.74933 848.8
+937.01154 706.0
+946.93103 1598.0
+947.43140 1774.0
+953.44891 1878.7
+953.95953 763.8
+956.09393 833.6
+966.43713 15786.4
+966.77301 18653.3
+967.10596 10083.0
+967.43591 2308.5
+989.44128 1979.8
+989.78564 1701.2
+990.11688 924.8
+995.44800 58344.3
+995.78204 75302.5
+996.11530 41093.4
+996.44922 15850.7
+996.77441 2328.0
+1003.47485 2577.2
+1003.97388 2813.0
+1004.47046 1735.2
+1004.96777 1237.9
+1019.66321 849.0
+1028.47705 1387.0
+1048.94897 722.9
+1057.32373 883.2
+1082.44714 1357.9
+1117.03101 2012.8
+1117.54297 2434.0
+1118.53845 839.1
+1168.84741 712.2
+1198.15930 3568.4
+1349.03430 730.2
+1580.73413 606.2
+1879.67273 19871.1
+1881.44446 1015.4
+1883.24902 728.9
+1906.70264 1541.5
+1906.97327 6975.5
+1918.93933 997.4
+1930.56177 1088.2
+S	2761	2761	1880.0618246
+Z	3	5636.91
+Z	2	3758.276
+532.51892 2227.1
+676.65076 966.5
+690.85925 829.4
+731.11676 710.8
+795.78168 793.1
+800.59314 670.6
+843.34326 595.8
+853.27533 710.0
+1090.58374 592.6
+1198.15576 3614.4
+1282.76111 677.5
+1374.60486 548.4
+1525.38745 920.7
+1592.03650 664.4
+1671.39197 626.6
+1777.39893 709.2
+1815.04785 760.9
+1877.15454 724.6
+1878.44690 708.5
+1879.07520 889.1
+1879.59595 17056.4
+1879.92517 4388.3
+1880.21838 1907.8
+1880.70056 1113.8
+1907.07129 7542.1
+1930.54016 1013.1
+1974.84680 798.6
+S	2762	2762	869.6995746
+Z	4	3474.767
+232.07179 590.2
+234.61615 610.0
+244.86589 626.0
+262.04092 600.1
+270.22165 575.0
+273.37967 564.4
+274.86783 553.0
+275.77783 728.0
+285.64917 584.6
+289.96390 670.8
+299.54675 932.8
+322.51096 614.1
+350.26141 747.0
+381.38321 721.8
+532.52588 1909.9
+547.02411 651.1
+571.26306 735.2
+576.32428 687.4
+577.27509 564.0
+617.88428 619.7
+626.39380 716.2
+630.43817 771.6
+653.95618 640.6
+654.28711 745.2
+657.64709 552.1
+676.60968 797.9
+693.85883 1001.6
+698.37024 2146.5
+699.37024 901.3
+708.82501 1128.5
+717.82776 702.2
+730.03052 734.0
+742.89410 5736.1
+743.39648 4294.3
+743.89087 1519.6
+756.17969 627.4
+760.33008 1035.3
+774.37146 1586.5
+774.87592 1066.4
+795.78491 757.3
+800.40717 10093.2
+800.90881 8253.8
+801.41016 2827.3
+806.88397 1289.4
+807.38403 1763.9
+813.26154 637.7
+815.88977 1983.6
+816.38892 1704.9
+824.89795 962.9
+835.21191 619.2
+840.67719 787.5
+845.23871 615.6
+853.43799 1871.2
+856.95020 1163.7
+873.74249 798.1
+913.49469 2819.4
+913.99152 3057.8
+914.50012 963.4
+916.41968 732.0
+920.79858 800.7
+927.75232 941.0
+929.96338 700.0
+937.97827 1876.5
+938.47607 1092.6
+964.01422 7653.3
+964.51483 5963.3
+965.01880 2746.5
+965.51880 749.4
+1015.52740 1732.9
+1035.19849 1041.3
+1049.06702 1244.7
+1078.21399 1384.5
+1078.55579 1640.4
+1078.87158 827.1
+1083.11499 676.2
+1198.17896 3306.6
+1302.68677 709.1
+1416.63501 1307.0
+1467.71545 874.1
+1484.31396 1020.6
+1644.60474 646.5
+1860.13342 966.0
+1877.06226 628.3
+1877.98303 758.4
+1878.70923 825.8
+1879.05737 3025.4
+1879.58215 18239.6
+1880.10266 3133.4
+1880.48071 1576.6
+1880.98486 591.5
+1906.35693 648.7
+1906.95740 7359.4
+1912.74536 711.4
+1930.72363 724.8
+S	2763	2763	1907.5398246
+Z	2	3813.232
+Z	3	5719.344
+532.52820 2556.2
+549.16693 775.3
+621.27472 622.3
+630.40857 913.4
+674.31763 579.3
+676.64209 1002.0
+826.33167 608.2
+841.53986 536.0
+858.06268 603.8
+948.06274 604.2
+1155.51514 695.7
+1198.17651 3145.1
+1215.22131 588.9
+1315.87952 697.3
+1411.14307 652.2
+1525.42261 746.7
+1870.32019 951.9
+1878.21936 1063.0
+1879.54688 20122.8
+1879.98743 871.0
+1880.39941 689.1
+1880.85498 772.2
+1906.75781 1205.9
+1907.13123 7460.7
+1930.59314 724.5
+S	2765	2765	1880.0298246
+Z	3	5636.814
+Z	2	3758.212
+513.51764 699.9
+532.50452 2267.1
+630.43890 736.8
+731.16113 882.7
+795.77454 1168.4
+820.61786 597.9
+979.79834 681.0
+987.18988 649.3
+1057.23181 760.0
+1085.84619 733.2
+1198.12170 3492.9
+1250.86804 670.9
+1876.12341 712.3
+1879.24426 2800.3
+1879.52087 19607.5
+1880.56812 600.5
+1907.11792 7659.1
+1930.67603 1001.3
+1984.76855 600.1
+S	2766	2766	1907.4958246
+Z	3	5719.212
+Z	2	3813.144
+532.49988 2085.7
+538.45294 582.6
+569.32629 632.8
+622.30029 634.8
+630.43274 700.5
+644.62250 626.6
+660.22644 571.2
+676.62482 1113.2
+686.91614 685.9
+795.77246 968.8
+809.78430 596.2
+926.52692 682.3
+1023.07654 619.9
+1174.82361 706.6
+1180.17761 748.8
+1198.11951 3250.4
+1301.44543 585.0
+1432.49329 630.1
+1525.44214 957.7
+1878.95142 1054.3
+1879.08582 1231.2
+1879.50110 19082.1
+1879.93213 2333.5
+1907.09436 7253.9
+1930.64941 1135.1
+S	2767	2767	659.832407933
+Z	3	1976.222
+Z	2	1317.817
+171.11246 3838.2
+188.26889 1104.2
+188.27563 1149.6
+188.29230 1443.4
+188.29741 1424.0
+188.31152 1113.3
+188.32510 676.3
+199.23428 1019.0
+199.28267 752.0
+199.30624 1102.2
+199.31897 2207.3
+199.33202 2091.8
+199.34399 1317.9
+199.42993 1174.7
+199.44250 811.1
+211.17986 5540.4
+226.72185 689.7
+231.72617 646.4
+239.17485 17007.2
+253.19072 1674.6
+256.08029 696.8
+263.13828 41199.6
+264.14236 917.8
+268.59167 756.0
+276.10059 4295.0
+280.17957 697.1
+284.19617 23401.7
+298.21188 3390.0
+299.42654 936.1
+318.50754 755.9
+342.26849 724.2
+352.25858 3426.1
+360.36160 760.3
+364.72202 589.5
+364.73981 668.3
+368.45273 695.1
+369.28482 48316.9
+376.22192 3187.3
+376.73480 709.2
+382.63678 670.1
+397.27966 90854.9
+398.28543 1468.8
+415.19263 2339.6
+427.54199 787.8
+451.81766 608.9
+482.65634 941.7
+489.30856 858.1
+494.33173 2720.8
+532.54321 2385.4
+534.90149 824.0
+594.32373 2086.0
+606.26068 2175.1
+611.35004 1859.5
+622.10547 820.0
+626.26074 978.2
+630.40271 781.5
+637.78564 934.1
+638.91492 3289.8
+639.24847 1563.7
+639.57922 1517.1
+641.39545 730.3
+676.42432 593.9
+676.65283 1195.3
+702.79962 1270.8
+707.30896 2616.8
+731.81061 1040.0
+764.21307 625.5
+764.65204 765.4
+765.32660 1649.8
+765.82391 2254.0
+766.32227 1445.0
+776.29858 1095.2
+776.79919 4340.7
+777.30048 7849.8
+777.79907 5780.0
+778.29669 2436.4
+778.79211 1195.8
+795.78552 809.4
+800.34161 1503.4
+800.84009 2611.1
+801.34143 5878.4
+801.84100 3749.9
+802.33386 1119.5
+835.37067 1403.2
+839.12396 715.3
+846.34320 3434.2
+846.84485 5918.1
+847.34540 4723.2
+847.84540 2512.8
+869.33771 4079.3
+869.83850 11121.0
+870.33844 8600.7
+870.83997 2929.9
+871.33057 1613.0
+871.49170 716.8
+981.36304 706.1
+1140.17896 772.1
+1198.22192 3723.2
+1213.99243 723.4
+1449.42261 707.3
+1602.62708 826.5
+1648.70898 833.9
+1687.56030 782.5
+1694.79822 722.4
+1750.14136 676.1
+1762.60486 730.0
+1772.59607 735.4
+1878.04407 996.2
+1879.58289 21550.6
+1879.85181 2993.4
+1879.94177 2400.1
+1880.20239 1383.3
+1907.14905 8519.7
+1930.58997 1088.6
+S	2769	2769	659.836407933
+Z	2	1317.825
+Z	3	1976.234
+171.11212 31671.9
+178.84081 5606.7
+188.24005 5899.8
+188.25182 8559.8
+188.26764 18780.4
+188.28464 17727.5
+188.29385 14953.0
+188.30602 14820.2
+188.31926 13385.1
+198.94820 8097.9
+199.17976 10848.8
+199.23758 6527.6
+199.25096 9429.8
+199.29782 6454.6
+199.31396 8933.3
+199.32576 15805.6
+199.33583 11119.9
+199.34987 14395.8
+203.82619 5679.6
+206.84354 6220.3
+209.52437 5452.3
+211.17999 33754.4
+213.48958 5526.8
+222.24654 4870.9
+239.17487 122137.1
+246.13303 5179.8
+257.05554 4543.1
+259.89111 6469.0
+263.13834 289809.0
+264.14197 18508.4
+271.54742 8800.0
+273.31168 5142.5
+284.19623 187564.9
+285.20007 9107.0
+290.41617 5252.5
+298.21124 17268.1
+330.58167 5110.9
+346.76923 5166.0
+352.25903 11834.2
+361.09180 6820.4
+365.71289 5413.0
+369.28497 306360.7
+370.20724 7257.8
+370.28784 35224.2
+376.22232 18332.4
+394.66446 4970.1
+397.27994 574508.1
+398.28293 51011.7
+428.21445 5668.6
+437.35056 5819.5
+483.29245 14340.4
+494.33234 11473.8
+518.91754 5302.2
+532.51532 19624.3
+545.56909 5087.2
+549.14539 7180.2
+584.80847 10104.3
+594.32397 34319.4
+595.32391 8157.1
+606.26044 54818.4
+607.26440 8588.9
+607.65540 5804.9
+611.34814 28849.5
+641.40381 8418.5
+676.65729 13135.7
+680.56384 6497.2
+695.37341 14675.7
+707.30859 72045.9
+708.31354 15332.8
+712.39691 21415.3
+713.40179 9037.6
+731.11017 6370.0
+788.52502 5879.2
+795.78296 10837.6
+835.36798 30819.0
+836.37042 9143.8
+954.78033 6405.5
+956.34070 5200.7
+1004.51910 7257.9
+1054.20105 6165.9
+1057.27454 8141.1
+1075.03333 5476.2
+1152.89209 5795.9
+1169.60010 7826.7
+1187.96985 6263.1
+1198.15063 30910.7
+1207.18713 5381.6
+1327.98889 6329.0
+1418.78613 5456.0
+1446.33179 7156.6
+1475.29187 7353.9
+1877.61499 7545.6
+1877.88892 6032.6
+1879.12939 8314.1
+1879.27344 13612.0
+1879.57727 180239.1
+1880.01074 8084.1
+1880.31885 7860.4
+1881.68164 5388.0
+1881.85559 5043.8
+1907.12769 64948.5
+1918.91492 7920.7
+1984.77209 5428.9
+S	2770	2770	660.8395746
+Z	3	1979.244
+Z	2	1319.831
+171.11259 28390.9
+173.58488 2083.2
+177.21735 2007.7
+179.64493 2334.9
+183.58716 2131.4
+185.12828 5686.4
+188.22096 2344.7
+188.24603 3466.8
+188.26114 4321.8
+188.28430 2911.0
+188.29613 2070.1
+188.30989 2101.1
+188.32310 2548.5
+188.33855 2033.1
+188.36475 2988.0
+188.39844 2670.0
+188.45010 2142.8
+198.94432 3365.8
+199.18051 7803.4
+199.23180 2976.7
+199.25806 2636.7
+199.26805 2571.2
+199.29459 1845.7
+199.30539 2939.0
+199.32806 10640.8
+199.33577 3558.4
+199.34747 2789.1
+199.35661 4543.9
+199.42773 2679.1
+208.08446 2305.7
+211.18024 29831.1
+212.18401 3545.6
+213.16003 4349.2
+217.59662 2490.4
+220.15981 2364.8
+222.85214 2760.0
+225.19539 4280.9
+229.65285 2344.1
+239.17522 99166.6
+240.17859 13203.1
+240.84346 2342.3
+253.19048 7436.4
+263.13879 246574.1
+264.14243 26876.6
+266.18762 2361.3
+271.52884 2422.6
+271.56970 2771.1
+272.81360 2246.1
+272.94986 2271.0
+284.19662 166381.5
+285.20020 18229.9
+298.21210 21959.9
+314.28922 2548.6
+326.24463 4178.4
+350.29480 3152.7
+352.25888 22250.1
+354.55817 2293.7
+369.28540 262777.3
+370.28903 42243.4
+376.22281 15304.9
+380.63568 2191.6
+381.24939 2833.1
+383.34900 2754.9
+393.80356 2526.3
+396.87152 2775.0
+397.28043 553099.3
+398.28372 82127.6
+410.82477 2247.1
+413.65765 2510.3
+427.52939 3690.6
+466.26352 3093.7
+478.44104 2632.8
+482.64304 2833.5
+483.29108 11443.9
+489.30533 7639.6
+494.33252 13691.0
+495.33453 4193.1
+532.55310 7085.2
+546.25519 2492.8
+594.32306 31795.0
+595.32721 8608.2
+606.26154 31111.4
+607.26147 12000.4
+608.90796 3144.1
+611.34991 21206.1
+612.34814 5045.8
+641.32599 2665.9
+641.38934 3234.0
+672.88690 2380.0
+676.63110 4498.0
+694.38257 3792.9
+695.37109 11661.9
+707.30914 45406.2
+708.31226 17265.6
+709.30804 5482.8
+712.39850 11782.6
+713.40338 4112.7
+731.09119 3299.9
+741.44495 2526.9
+754.78046 2520.0
+802.84460 2869.9
+835.36566 15724.1
+836.36646 7969.3
+861.96521 2780.8
+925.73828 2745.4
+949.45825 3402.4
+1004.52087 8384.5
+1021.14636 2598.4
+1041.89636 2400.9
+1055.50452 4409.6
+1057.57068 2290.7
+1140.46826 2658.0
+1149.60583 2467.1
+1168.60632 5134.1
+1169.60144 4072.8
+1198.24109 13241.6
+1220.02710 2511.0
+1499.41260 2718.0
+1525.32935 3650.1
+1878.69958 5575.1
+1878.95166 3172.8
+1879.53552 70561.3
+1880.13794 5245.4
+1880.42505 5033.7
+1907.13245 29868.0
+1930.52527 3950.2
+S	2771	2771	1880.0338246
+Z	3	5636.826
+Z	2	3758.22
+532.53186 1826.7
+628.91852 772.3
+676.65015 855.2
+712.11237 690.8
+725.64124 601.4
+739.95221 669.3
+774.67505 600.8
+775.55621 617.5
+795.77686 1191.0
+865.42004 541.8
+894.79364 749.3
+994.31030 685.2
+1028.61047 595.6
+1057.29565 576.0
+1123.79407 684.9
+1142.12036 705.6
+1198.18604 3619.8
+1232.72864 613.2
+1263.78186 608.0
+1351.58130 691.5
+1474.42639 649.2
+1837.43091 569.8
+1877.91150 1007.1
+1878.76074 1146.7
+1879.29663 2545.4
+1879.57898 19748.3
+1880.29761 961.7
+1880.52612 707.8
+1880.74414 548.6
+1881.23914 912.8
+1882.43091 607.7
+1907.08765 7323.7
+1918.88379 841.2
+1959.49329 673.4
+S	2773	2773	1879.9868246
+Z	3	5636.685
+Z	2	3758.126
+529.44482 686.2
+532.51398 2036.3
+653.43140 562.6
+672.95679 572.0
+676.62024 1019.8
+731.12140 880.1
+795.77600 921.7
+867.43982 704.4
+868.16333 781.6
+882.57520 592.2
+900.30872 564.7
+963.42072 683.7
+981.85339 537.8
+1061.16907 716.8
+1198.14343 3378.5
+1236.98462 613.2
+1256.66284 611.9
+1267.85449 624.2
+1285.13599 666.9
+1469.74231 623.5
+1541.20691 698.4
+1715.04553 717.4
+1870.17468 936.7
+1876.58533 663.2
+1878.34546 748.4
+1878.83105 1017.3
+1879.47754 19916.5
+1879.75024 1933.4
+1879.88245 859.7
+1880.13049 1436.4
+1880.84900 756.8
+1881.45251 631.0
+1881.62463 686.3
+1906.80127 802.2
+1907.09534 7212.1
+S	2774	2774	997.2447371
+Z	4	3984.94765
+266.94626 523.1
+280.15375 552.4
+280.16180 532.7
+308.36801 743.2
+329.84274 761.8
+350.27991 746.9
+395.53464 657.3
+427.51434 711.7
+444.41986 754.9
+456.28204 1125.6
+529.53235 645.5
+532.49689 2070.2
+559.80200 599.9
+595.28241 1428.9
+607.84552 610.5
+630.36743 817.5
+676.66144 755.4
+772.98041 602.4
+782.90320 921.1
+783.42596 662.2
+795.76740 1522.5
+838.43048 665.2
+871.25421 649.5
+883.17407 818.4
+883.42572 1112.0
+898.33490 624.4
+926.43243 599.3
+957.48523 870.3
+957.72321 839.1
+957.98010 902.4
+971.97131 669.8
+1030.29102 607.2
+1057.28613 789.7
+1073.51416 635.9
+1140.39795 609.2
+1171.55920 763.1
+1171.90173 1329.9
+1172.58862 651.4
+1177.23096 13023.5
+1177.56616 24825.5
+1177.90027 24188.0
+1178.23315 12508.7
+1178.56677 5829.8
+1178.90210 1052.3
+1188.20935 833.3
+1198.10681 2954.2
+1205.26379 1005.5
+1210.24963 2359.1
+1210.58838 7693.8
+1210.92200 6846.7
+1211.25427 4818.1
+1211.59241 1750.5
+1243.27527 3759.1
+1243.60999 4616.5
+1243.94788 5699.2
+1244.28247 6267.8
+1244.63147 1341.4
+1244.97400 699.3
+1276.63110 769.7
+1276.96387 1638.5
+1327.96936 664.9
+1360.13367 644.2
+1396.75122 856.7
+1399.69556 5274.4
+1400.69885 4397.3
+1401.69922 1577.9
+1427.49719 627.9
+1497.90942 717.2
+1755.86023 1277.0
+1770.69067 692.2
+1870.30359 935.9
+1875.44312 779.1
+1876.12170 678.0
+1879.06384 733.1
+1879.21924 721.1
+1879.58313 19977.0
+1879.98254 1059.9
+1880.09143 917.2
+1890.97363 667.7
+1907.04858 7637.1
+1930.47510 920.1
+S	2775	2775	1907.54599127
+Z	3	5719.363
+Z	2	3813.244
+532.54480 1852.4
+548.82031 657.0
+627.57428 633.3
+649.22205 607.0
+676.66168 1254.1
+739.09271 586.5
+757.83685 657.2
+795.77240 878.3
+849.12817 764.4
+961.07416 677.8
+1057.26624 935.3
+1140.44946 743.2
+1188.25891 886.4
+1198.21692 3121.8
+1251.16187 602.7
+1489.73010 765.5
+1525.37024 712.0
+1525.48682 598.7
+1560.83020 648.6
+1821.11145 680.0
+1860.04492 867.6
+1878.35815 732.5
+1879.16260 1873.2
+1879.58398 19573.3
+1880.04907 1705.2
+1880.44495 781.8
+1881.63123 612.5
+1905.98767 774.5
+1907.11865 7416.5
+1930.54785 1070.5
+S	2777	2777	1880.05140793
+Z	2	3758.255
+Z	3	5636.879
+532.55127 2037.4
+561.95972 665.1
+576.04828 646.0
+630.37939 656.5
+657.49359 645.2
+671.42059 705.0
+676.64008 1055.0
+739.07495 646.2
+795.78870 1058.7
+836.14563 623.1
+898.31683 619.6
+901.49670 610.8
+947.17499 647.7
+1057.23743 799.9
+1072.96362 665.8
+1079.41699 678.9
+1198.23486 3555.0
+1210.99744 732.9
+1486.93555 709.0
+1525.32446 719.0
+1875.96301 669.5
+1878.60974 840.7
+1878.90710 1116.0
+1879.52820 19435.1
+1882.40564 670.9
+1907.13586 7230.7
+1930.52380 931.9
+1981.83691 649.3
+1982.89099 615.9
+S	2778	2778	997.5026721
+Z	4	3985.97939
+276.41647 648.5
+289.52643 607.7
+359.02646 646.0
+381.32227 721.9
+427.50186 665.6
+430.21298 591.8
+434.49649 636.0
+466.23868 1003.0
+482.68372 584.9
+516.28296 1034.8
+524.91315 553.1
+532.49335 1749.9
+595.28149 6229.0
+596.28278 1104.4
+622.45190 615.4
+676.63873 1195.8
+680.70789 783.1
+732.33490 535.3
+737.23999 706.9
+747.32184 739.2
+749.65991 604.8
+749.85687 736.6
+763.59357 597.8
+778.40643 703.6
+795.78564 861.5
+859.47266 1055.0
+863.46625 2385.6
+877.48053 4157.5
+878.48181 1588.0
+878.97021 691.1
+904.86102 675.8
+945.48944 852.2
+970.97028 1439.7
+971.46490 1072.0
+976.23755 646.1
+1030.49890 804.3
+1057.22717 1140.1
+1113.78210 590.7
+1131.50122 1311.8
+1139.57910 1637.4
+1140.56738 1129.9
+1171.89551 808.9
+1177.22852 5697.9
+1177.56482 8112.5
+1177.90137 6487.9
+1178.23364 3388.0
+1178.57056 875.4
+1188.31824 873.6
+1198.11255 3321.3
+1210.25452 1545.1
+1210.59009 1922.7
+1210.91504 1833.2
+1211.26501 961.7
+1243.27148 1688.0
+1243.60364 1381.1
+1243.94421 1669.7
+1244.30249 807.9
+1326.46716 705.6
+1382.68311 1045.7
+1398.42200 698.9
+1399.69653 26584.9
+1400.69958 17719.3
+1401.49597 592.2
+1401.70142 4195.8
+1418.90137 592.0
+1480.68298 812.5
+1528.74109 3991.1
+1529.73938 3228.2
+1641.82520 2479.2
+1642.83423 1925.4
+1755.87329 3746.8
+1756.87415 2942.2
+1757.86353 777.9
+1878.35022 946.5
+1878.88647 823.7
+1879.52112 19374.4
+1879.76135 3330.6
+1880.44531 1267.9
+1881.32800 1226.7
+1907.15125 7481.8
+1930.42480 1296.8
+1967.84692 613.5
+1978.39233 689.7
+1978.62610 546.5
+1993.23962 723.1
+S	2779	2779	1064.5113996
+Z	4	4254.0143
+295.06412 588.2
+309.43393 647.5
+339.14673 743.7
+341.24091 544.3
+342.27527 721.5
+350.28668 723.4
+379.92294 586.0
+432.77353 667.3
+502.00327 576.2
+532.45734 1852.9
+572.43054 523.6
+642.87366 576.0
+644.88818 661.3
+647.17963 602.1
+676.68939 643.1
+698.21143 581.0
+698.79327 656.6
+731.11383 664.0
+735.27435 595.6
+735.34143 564.6
+795.78729 1065.6
+859.94415 610.8
+943.23419 701.1
+944.39032 641.5
+991.55969 707.3
+996.91187 640.2
+996.99713 728.1
+997.48956 1223.7
+997.74457 1370.3
+997.98877 853.7
+1002.00024 1061.1
+1020.97595 655.8
+1021.52612 656.0
+1033.46118 817.2
+1043.57080 623.3
+1086.17102 604.9
+1126.47742 957.6
+1127.00146 1327.0
+1127.48706 1491.5
+1127.99792 947.2
+1140.53162 1036.2
+1183.23047 1140.0
+1183.57556 3859.4
+1183.90210 4475.1
+1184.23718 4434.6
+1184.57556 1885.6
+1198.02271 3491.9
+1199.01721 1162.1
+1199.51672 1111.1
+1216.25220 1449.1
+1216.59668 3742.8
+1216.92603 2412.5
+1217.25854 3164.4
+1217.56934 699.7
+1249.27771 2939.1
+1249.61353 4485.1
+1249.94751 5523.8
+1250.28149 3166.2
+1250.61780 1773.2
+1273.72095 717.0
+1282.97937 713.4
+1438.16150 715.2
+1525.42932 744.5
+1720.76392 658.6
+1860.06995 785.0
+1879.66174 16974.1
+1880.09790 4165.1
+1881.09094 1157.9
+1892.17297 707.9
+1907.08496 7467.8
+1930.61926 872.8
+S	2781	2781	1880.00440793
+Z	3	5636.738
+Z	2	3758.161
+517.68066 664.2
+532.47784 1926.2
+546.11902 723.7
+549.13428 1583.6
+630.38086 670.8
+737.52716 594.8
+795.77716 1266.0
+991.09137 713.8
+1111.03101 679.3
+1198.06250 3209.4
+1307.57544 768.0
+1496.68286 785.2
+1703.60315 767.7
+1878.73694 1369.5
+1879.04041 1152.8
+1879.23584 921.9
+1879.59546 19631.9
+1880.21887 1191.6
+1881.03906 807.8
+1883.32715 732.2
+1907.05591 7531.4
+1930.51526 934.6
+S	2782	2782	997.9158246
+Z	2	1993.984
+Z	3	2990.472
+264.40250 856.7
+287.55670 574.9
+292.56827 621.5
+301.16098 566.6
+310.73151 590.9
+336.41833 629.5
+342.26254 665.5
+353.15549 1542.4
+354.65323 657.5
+366.39032 702.8
+406.81665 592.1
+428.69992 642.3
+455.94055 627.8
+457.92139 569.5
+466.24033 1721.5
+479.32434 534.9
+516.28876 1650.9
+532.53827 1820.7
+567.28546 954.6
+577.27008 1670.2
+578.25018 1036.3
+583.75690 735.6
+595.28137 9302.1
+596.28320 1908.5
+624.04395 593.4
+630.37665 1047.1
+644.24042 606.2
+663.35071 1003.2
+676.66638 1023.1
+718.51923 658.2
+776.43384 1216.0
+779.69104 670.1
+824.97211 577.0
+863.46765 4314.7
+864.47156 1617.2
+877.48260 1865.1
+878.47882 831.9
+878.92432 603.2
+907.91772 630.0
+945.48987 729.8
+947.45300 760.7
+966.25317 798.9
+970.96674 2248.6
+971.47125 4054.7
+971.97577 877.1
+973.75458 946.1
+979.97870 1127.5
+1011.70288 608.1
+1057.27441 911.6
+1114.37439 615.0
+1118.53455 643.0
+1131.49622 961.0
+1139.58118 2796.2
+1140.59265 813.3
+1152.41235 618.5
+1175.88245 1286.8
+1176.21777 1998.9
+1176.54700 1614.1
+1177.23083 2428.2
+1177.56580 3490.7
+1177.89697 4040.9
+1178.23340 2082.6
+1198.20093 2681.1
+1209.58081 767.4
+1210.25159 1203.6
+1210.58801 1587.0
+1211.27319 865.3
+1242.24695 986.8
+1242.59351 757.6
+1243.27087 1021.9
+1243.59644 1352.0
+1244.27771 898.7
+1381.68726 690.6
+1382.67615 1753.5
+1399.69739 42598.6
+1400.69946 27383.0
+1401.69910 6214.2
+1446.46289 632.1
+1478.68530 1295.9
+1528.73840 6507.0
+1529.74011 4438.0
+1530.74097 857.3
+1551.52881 673.1
+1641.82983 3027.6
+1642.82776 2782.3
+1738.84436 937.1
+1755.86694 6135.1
+1756.86792 4909.1
+1757.86011 761.9
+1762.77209 699.8
+1878.42712 1201.0
+1878.92700 1311.6
+1879.08203 1335.3
+1879.59802 18806.1
+1880.05396 1421.5
+1880.21399 1361.3
+1880.43884 789.4
+1880.80322 742.0
+1906.76794 1249.7
+1907.07739 7063.6
+1918.91895 822.4
+S	2783	2783	1013.0053246
+Z	4	4047.99
+267.66919 571.1
+286.30103 629.3
+298.74606 688.3
+313.18350 557.8
+314.96729 615.7
+323.05841 600.8
+350.27914 859.1
+364.80899 577.7
+442.31149 689.4
+446.11411 674.2
+456.27878 917.0
+482.60156 612.7
+532.51721 1772.6
+549.11102 680.3
+616.80835 660.1
+676.64917 877.2
+692.97327 615.9
+713.41577 630.9
+763.15582 627.5
+795.77905 951.2
+923.46527 726.1
+928.95654 1053.4
+929.45660 1207.8
+972.72882 1139.8
+972.98334 1603.1
+973.08795 552.8
+973.23474 923.2
+1019.66461 768.2
+1035.49927 643.0
+1183.23621 1282.1
+1183.56921 3095.2
+1183.90149 2957.3
+1184.24365 2084.4
+1188.04333 853.1
+1192.22974 942.6
+1192.61694 690.2
+1193.57898 841.2
+1193.90454 1471.5
+1194.23267 3147.1
+1194.57190 945.4
+1194.90222 1456.9
+1195.23828 1163.8
+1195.57336 1816.3
+1195.89392 1309.7
+1197.22803 909.6
+1197.56799 8438.5
+1197.90186 16004.4
+1198.23950 15797.6
+1198.56946 10228.7
+1198.90466 5381.8
+1216.59192 2168.7
+1216.92285 1224.2
+1217.59741 685.3
+1226.89343 777.8
+1228.59253 993.7
+1228.93140 690.3
+1230.58728 2662.8
+1230.92346 6543.3
+1231.25989 7132.3
+1231.59009 4185.5
+1231.93396 2470.4
+1249.27917 1295.0
+1249.60889 1500.4
+1249.95227 1995.9
+1250.27905 1124.6
+1262.26733 809.1
+1263.60730 3004.1
+1263.94604 4772.7
+1264.28076 6141.1
+1264.61365 4486.7
+1264.94678 2033.6
+1296.63721 873.4
+1296.98730 1066.8
+1297.30847 1972.8
+1297.64758 1449.2
+1443.13684 718.9
+1639.34253 668.6
+1777.24414 1088.2
+1879.05334 1665.4
+1879.57202 19746.7
+1880.04553 1711.1
+1880.39343 914.2
+1880.70630 614.9
+1906.81543 709.6
+1907.05371 7454.6
+1930.44275 825.7
+S	2785	2785	1879.95540793
+Z	2	3758.063
+Z	3	5636.591
+532.51300 1640.7
+536.28137 651.8
+576.37836 568.5
+612.97095 645.4
+676.66443 831.0
+774.43024 661.2
+795.77722 744.9
+877.07880 578.5
+1019.80347 639.2
+1057.29590 851.9
+1057.63049 772.1
+1088.22412 673.9
+1135.11145 697.5
+1170.80591 792.9
+1198.13818 3445.2
+1198.29028 827.3
+1540.19189 679.1
+1653.11951 665.4
+1876.08801 652.3
+1876.48083 1005.9
+1877.24719 739.0
+1877.70325 669.4
+1879.60205 19819.4
+1880.22522 1238.7
+1907.07422 6944.2
+1907.33020 965.8
+1909.94934 578.1
+1918.57214 721.5
+1930.64661 803.3
+S	2786	2786	1061.9460921
+Z	4	4243.75307
+280.17172 1013.6
+316.95282 625.1
+317.05923 543.9
+321.18051 528.5
+335.42160 572.9
+344.82248 607.3
+367.70593 644.6
+418.36218 639.2
+529.75348 643.3
+532.52234 1651.1
+566.97626 650.7
+642.57434 685.0
+676.66425 941.7
+795.79694 1086.8
+797.22827 654.5
+898.59845 597.5
+1028.25671 645.8
+1068.80334 714.8
+1126.48730 862.8
+1198.15918 3634.4
+1247.32568 643.7
+1477.14722 684.9
+1508.85168 627.8
+1525.36133 722.1
+1670.76013 767.2
+1877.89990 836.1
+1878.58276 1659.3
+1878.92883 1128.7
+1879.23035 3232.2
+1879.59253 19305.1
+1879.96155 3102.5
+1880.55762 1020.8
+1880.93750 804.9
+1881.58655 1288.9
+1907.07507 7432.0
+S	2787	2787	1907.43924127
+Z	2	3813.031
+Z	3	5719.042
+524.25189 619.5
+532.53931 1878.3
+536.48187 531.4
+551.82318 614.6
+608.50684 604.6
+663.52631 565.2
+676.64063 1434.2
+690.11633 626.5
+714.62323 546.4
+734.57800 720.3
+795.79004 838.6
+969.71393 685.6
+1004.31110 600.5
+1017.17249 706.9
+1128.98499 542.7
+1189.15906 615.5
+1198.20959 3496.2
+1351.01270 729.6
+1373.03442 550.5
+1419.20605 685.9
+1445.09631 697.6
+1503.65991 640.8
+1525.21899 1021.5
+1527.84973 679.4
+1537.65771 601.9
+1879.04602 1860.5
+1879.56091 18661.5
+1879.83203 3395.1
+1880.11462 1735.8
+1881.88379 868.3
+1907.13806 7458.3
+S	2789	2789	1879.93840793
+Z	3	5636.54
+Z	2	3758.029
+516.38086 601.3
+532.49689 1949.3
+586.00891 721.7
+633.49347 688.1
+676.67804 832.1
+831.05286 634.7
+891.09351 678.5
+1140.32214 844.0
+1198.10461 3861.7
+1316.71167 567.9
+1367.83191 656.3
+1557.63440 653.0
+1878.61975 1233.0
+1879.24854 4091.5
+1879.63977 18004.1
+1880.00317 3421.6
+1880.57507 1323.2
+1881.04028 843.3
+1907.04749 7569.2
+1930.49182 985.8
+S	2790	2790	1012.5026121
+Z	4	4045.97915
+271.55646 729.8
+276.28296 707.0
+293.06747 745.6
+323.27747 535.1
+331.40097 580.0
+341.33432 809.7
+342.23285 641.8
+388.21732 585.4
+405.89413 554.8
+407.47357 608.0
+413.67667 580.7
+422.73416 486.6
+427.49719 829.2
+438.27228 1151.6
+453.05127 646.9
+456.28192 988.0
+468.81491 749.7
+482.59714 667.3
+532.51666 1846.2
+549.09241 643.2
+565.31720 687.9
+597.92853 609.9
+631.67578 642.9
+676.65057 926.7
+766.75549 645.9
+772.58154 705.2
+775.28790 779.9
+795.79413 897.0
+816.51788 647.5
+857.94922 762.4
+862.83838 617.0
+898.67236 1466.1
+914.93164 644.2
+923.19952 738.7
+928.95844 3066.3
+929.46173 1838.3
+971.18298 658.1
+972.97974 1579.4
+973.22766 1116.3
+973.48138 922.4
+973.73499 1151.0
+989.62952 669.5
+1091.57251 1045.3
+1109.00903 776.6
+1143.60974 742.7
+1147.00110 683.4
+1183.23535 3315.5
+1183.57385 3795.6
+1183.90283 3587.0
+1184.23828 2294.4
+1184.57947 736.7
+1188.12817 819.4
+1192.22827 1108.8
+1192.56433 751.5
+1193.56006 1518.0
+1193.89990 2542.0
+1194.23108 2928.7
+1194.56372 2982.5
+1194.89722 1602.7
+1195.23926 2139.6
+1195.57947 2695.2
+1195.90259 2856.6
+1196.57947 921.6
+1196.90002 1478.8
+1197.23645 920.6
+1197.56653 18623.8
+1197.90149 30799.9
+1198.23694 26511.3
+1198.56873 18399.9
+1198.90454 6066.6
+1199.23853 1315.1
+1216.24780 1275.3
+1216.59497 1857.3
+1216.92041 1975.4
+1217.26367 1578.7
+1217.57495 733.3
+1227.27429 883.4
+1227.58484 941.6
+1227.91333 885.0
+1228.24805 988.1
+1228.59607 1289.0
+1228.93152 995.5
+1230.59155 6443.9
+1230.92554 9743.2
+1231.25684 9647.5
+1231.59082 7747.4
+1231.92493 3065.1
+1234.26257 714.2
+1249.28076 2722.7
+1249.61816 3766.3
+1249.95032 4149.7
+1250.27795 2942.2
+1259.95117 1097.0
+1260.27783 1873.8
+1260.61304 873.1
+1261.27185 1030.3
+1263.60986 4395.9
+1263.94580 8670.8
+1264.27942 8970.0
+1264.61597 7874.8
+1264.95142 2886.3
+1276.30420 668.7
+1296.61365 837.9
+1296.96948 1945.8
+1297.30457 3480.5
+1297.63074 1671.6
+1525.23083 776.3
+1694.77539 1478.5
+1695.28711 771.2
+1749.44031 656.1
+1781.99243 621.0
+1826.60742 594.4
+1876.30029 705.8
+1877.77917 837.2
+1878.58582 981.6
+1878.92188 1048.7
+1879.21777 3114.6
+1879.56604 19817.6
+1879.90051 3222.3
+1880.47058 825.3
+1907.10132 6937.1
+S	2791	2791	1907.54940793
+Z	3	5719.373
+Z	2	3813.251
+532.52075 2215.9
+549.07288 1031.0
+632.68060 655.6
+676.64563 748.3
+687.92938 686.9
+738.87048 624.9
+749.16058 709.8
+795.79517 1206.5
+828.90247 563.0
+843.92310 675.8
+870.72443 857.3
+887.02802 627.8
+1198.16577 3109.5
+1464.70056 750.6
+1728.02539 622.5
+1776.98718 1094.2
+1870.25647 968.4
+1872.92163 849.9
+1878.64026 1332.2
+1878.92212 621.8
+1879.24133 2919.5
+1879.55615 19608.6
+1879.88831 2359.6
+1880.46265 1196.7
+1880.68213 893.4
+1907.08655 7588.3
+1930.33923 890.2
+S	2793	2793	1879.9405746
+Z	2	3758.033
+Z	3	5636.547
+532.54486 1869.0
+630.41345 1143.3
+639.09943 672.2
+676.64203 1070.1
+731.11859 808.7
+795.77972 1092.8
+847.43689 737.3
+969.02081 600.3
+1057.25610 638.2
+1179.41443 582.7
+1195.68396 753.1
+1198.21472 3762.7
+1201.56592 636.4
+1260.36719 608.7
+1328.19910 666.5
+1387.68738 625.5
+1525.42468 816.2
+1826.76135 907.6
+1870.15393 911.4
+1878.48083 988.5
+1879.55884 19638.2
+1879.84424 1193.0
+1880.26050 659.1
+1907.03955 7968.4
+1923.00708 654.3
+S	2794	2794	1907.51699127
+Z	3	5719.276
+Z	2	3813.186
+532.55072 1805.0
+549.08008 630.4
+676.64600 917.6
+731.01971 773.7
+879.26282 689.3
+946.92633 700.9
+991.56165 643.2
+1019.29559 635.0
+1019.65186 707.2
+1030.65088 725.0
+1079.41736 720.9
+1198.22961 3432.4
+1293.36218 636.9
+1311.02100 558.0
+1525.19177 899.4
+1535.13379 608.0
+1710.83923 721.1
+1772.09424 625.1
+1870.21082 921.0
+1878.74548 1092.8
+1879.12622 1895.3
+1879.23071 2096.2
+1879.53845 19568.3
+1879.97717 1471.5
+1880.36108 1065.3
+1881.21692 883.4
+1886.83850 792.7
+1907.03491 7301.4
+1918.95203 798.0
+1930.32971 1412.5
+S	2795	2795	1198.60524127
+Z	2	2395.363
+Z	3	3592.54
+319.07974 671.0
+449.96811 701.0
+505.59152 648.6
+523.60248 638.9
+532.52332 1965.3
+549.10370 884.5
+619.68219 792.9
+630.34442 852.8
+651.36475 1319.4
+664.32458 672.2
+676.64020 1168.9
+779.47388 1141.4
+781.26160 737.2
+857.96216 640.2
+873.53876 670.0
+876.91736 662.0
+893.50909 1212.4
+905.58435 616.2
+1006.58679 3981.7
+1007.59259 3083.2
+1008.59515 871.1
+1020.79797 734.9
+1024.96484 656.6
+1057.24561 987.2
+1065.02197 548.4
+1065.05713 531.9
+1069.42371 1709.9
+1070.41748 1118.3
+1083.05029 716.2
+1107.63660 1835.4
+1108.63855 1434.1
+1121.05457 1062.5
+1130.05481 845.4
+1158.61694 609.1
+1169.57336 1067.5
+1170.07397 871.8
+1178.57397 2065.1
+1179.06201 816.7
+1198.16895 3559.4
+1310.61743 686.3
+1321.77039 3484.8
+1322.77771 3142.9
+1323.78113 1918.8
+1384.61414 1713.2
+1385.61023 1146.7
+1415.10376 684.5
+1436.80371 1867.8
+1437.79932 2486.0
+1438.80005 790.8
+1525.25769 1072.4
+1610.89136 781.3
+1611.87927 881.7
+1636.27942 664.6
+1638.79626 745.9
+1698.88818 1056.9
+1710.62268 664.3
+1785.91321 1098.0
+1797.26465 674.7
+1878.79456 1425.4
+1879.54688 19813.0
+1879.83142 1323.5
+1879.99121 771.8
+1880.23743 1870.9
+1907.14185 7436.7
+1930.40625 1196.0
+1971.99719 2044.1
+1973.03333 1247.4
+1988.72107 611.7
+1992.06519 564.1
+S	2797	2797	598.2928246
+Z	2	1194.738
+Z	3	1791.603
+150.43822 548.9
+151.41408 591.5
+153.30725 545.8
+157.21841 565.8
+160.27605 521.2
+165.75868 788.5
+175.45158 496.5
+177.11139 774.0
+178.30200 577.7
+182.15543 504.9
+182.78426 591.9
+184.62424 522.2
+186.75388 537.7
+188.22258 454.4
+188.23265 869.9
+188.25081 567.1
+188.28310 921.2
+188.29428 815.1
+188.30180 875.8
+188.31564 740.9
+188.37668 521.5
+193.17487 479.3
+197.70090 754.4
+198.94659 869.6
+199.23972 765.3
+199.26305 1146.0
+199.31256 1351.4
+199.32599 1036.0
+199.33792 2298.1
+199.35892 1323.8
+199.43610 604.1
+199.70258 560.5
+210.02461 1976.3
+217.13445 522.9
+221.13821 855.2
+226.62833 566.7
+271.56897 894.1
+274.48471 533.2
+280.18738 685.7
+284.87900 555.6
+287.29587 593.6
+308.90454 755.5
+333.80875 539.0
+336.29092 574.6
+371.22577 1174.7
+372.11990 683.5
+387.06686 2309.3
+403.04730 1821.4
+415.25311 1365.1
+427.55057 956.6
+431.33636 757.1
+459.27844 1023.7
+480.81888 548.1
+482.65735 717.7
+505.52206 529.7
+528.09857 574.7
+532.55377 1893.1
+534.25653 599.9
+537.08484 1022.3
+545.33215 767.6
+547.32825 723.8
+549.16107 726.0
+553.84918 910.3
+554.11194 1014.7
+567.34894 636.1
+568.92627 519.5
+575.85571 1063.8
+576.36041 686.2
+580.08984 2590.8
+630.41626 679.5
+635.38135 1511.3
+652.40784 1669.9
+676.64050 896.6
+679.40979 1912.0
+696.43488 3344.2
+697.44250 814.6
+710.45264 734.3
+711.44348 656.0
+713.73724 1046.7
+740.46295 2770.8
+754.47937 1565.5
+767.45605 645.5
+779.03308 664.7
+782.32434 570.8
+782.47113 569.5
+788.96808 909.6
+798.50342 2986.3
+799.50720 1477.2
+811.47925 537.7
+825.50378 1299.5
+826.50903 689.2
+842.53088 3837.5
+843.53400 1175.5
+869.52899 1084.2
+886.55377 2993.9
+887.56311 1634.4
+913.55713 686.4
+930.57959 3838.6
+931.58392 1217.7
+938.93744 566.2
+974.60815 3223.1
+975.61133 1248.7
+1018.63593 2340.0
+1019.64636 780.3
+1057.25513 986.8
+1062.68298 573.2
+1111.42322 726.9
+1198.24353 3010.6
+1525.46289 715.5
+1667.14807 706.1
+1839.27405 728.2
+1879.21069 1586.6
+1879.55249 19577.9
+1879.90942 1426.6
+1906.99731 7391.1
+1930.60791 765.4
+S	2798	2798	1880.06624127
+Z	3	5636.923
+Z	2	3758.285
+532.54736 1605.3
+643.17371 626.3
+731.10895 836.3
+783.04663 698.1
+795.78015 860.8
+858.04279 698.9
+937.26031 594.6
+1030.60925 580.4
+1198.22974 3396.2
+1374.89941 637.2
+1525.37830 864.4
+1839.21094 720.2
+1879.55347 20010.2
+1883.86511 719.9
+1907.04419 7893.0
+1918.94946 955.5
+1930.55737 1156.7
+S	2799	2799	598.7955746
+Z	2	1195.743
+Z	3	1793.112
+156.91701 504.0
+157.60675 587.0
+169.49751 884.6
+170.73866 551.6
+171.82280 544.6
+177.11113 785.5
+178.05241 991.6
+179.97755 533.7
+180.46809 614.0
+188.24742 581.2
+188.25760 777.2
+188.28044 1618.1
+188.29459 1730.2
+188.30646 1328.0
+188.32304 920.1
+188.53246 541.4
+198.95038 808.9
+199.23216 671.6
+199.23767 625.1
+199.28928 691.3
+199.30757 1380.2
+199.32793 1561.5
+199.33673 2308.1
+199.42625 745.2
+199.43475 833.8
+200.85789 511.4
+210.02499 8201.4
+214.07751 541.0
+214.51956 661.3
+241.09541 499.6
+249.09431 512.3
+275.24078 668.5
+294.46478 621.3
+308.21146 547.7
+308.90784 665.6
+322.02634 568.2
+343.07733 1189.4
+350.25287 629.3
+353.21399 747.8
+355.09479 1269.2
+371.22940 821.7
+381.36877 653.3
+387.06723 6284.9
+403.04733 5308.5
+427.55521 957.1
+432.66553 522.6
+484.18124 1481.4
+498.29965 560.2
+498.89368 563.6
+503.29932 719.9
+532.56500 2067.4
+536.10242 916.9
+537.08270 1594.1
+543.33124 747.9
+549.17157 942.9
+553.03284 632.7
+553.84534 707.7
+554.11035 3431.8
+563.06201 1206.1
+575.85681 1272.8
+576.35822 667.0
+580.08887 7076.1
+581.07202 2721.3
+605.55182 603.7
+619.17157 647.6
+619.22058 620.7
+635.38293 1589.2
+652.41058 991.1
+671.63318 578.6
+676.64069 1129.6
+679.40698 1194.5
+690.83063 669.6
+696.43774 1929.1
+714.45056 1538.6
+723.43304 664.1
+740.46216 1309.4
+754.48065 996.9
+784.48138 1257.0
+798.50793 1881.5
+842.34802 656.3
+842.53033 1903.6
+843.51288 673.5
+861.51068 1560.2
+868.69080 577.9
+869.53406 633.7
+886.55530 2249.5
+890.24902 655.4
+930.58453 2519.3
+974.61108 2149.6
+975.61127 724.9
+1018.63135 914.4
+1019.63861 778.8
+1111.08960 605.7
+1128.56726 533.9
+1176.55737 616.7
+1188.15002 778.0
+1189.01318 723.8
+1198.26331 3116.1
+1258.30811 670.1
+1260.10974 622.6
+1288.00195 643.1
+1322.90771 648.3
+1525.46143 903.8
+1606.33618 622.3
+1618.14319 639.1
+1674.60718 595.1
+1701.01160 689.8
+1876.76147 767.2
+1877.70581 819.2
+1878.40173 748.5
+1878.78772 720.1
+1879.07886 1344.7
+1879.53357 20145.8
+1880.60632 692.4
+1895.35620 635.4
+1906.93225 6604.5
+1907.36145 842.3
+S	2801	2801	1880.01940793
+Z	3	5636.783
+Z	2	3758.191
+532.54858 1838.6
+573.59424 737.4
+676.66040 1060.9
+776.97247 582.0
+878.84906 667.9
+1006.75751 601.4
+1198.22632 3144.8
+1438.00806 711.4
+1525.45947 1073.0
+1776.95679 833.1
+1831.83386 640.8
+1878.67407 1319.6
+1879.58801 19689.2
+1880.49146 1755.7
+1881.15320 1077.2
+1907.05725 7365.2
+1930.65808 911.3
+S	2802	2802	1907.46440793
+Z	3	5719.118
+Z	2	3813.081
+532.53979 2205.6
+676.65851 1001.2
+714.16150 574.6
+731.06311 652.3
+795.78540 886.5
+841.50439 796.8
+931.24591 576.3
+953.64844 690.1
+1021.42261 588.8
+1198.20789 3247.9
+1208.21521 783.1
+1216.04956 624.7
+1540.58386 669.6
+1549.95813 637.4
+1725.30029 684.3
+1820.60950 737.0
+1878.55273 1009.7
+1878.87769 1413.2
+1879.18384 3045.8
+1879.57336 19467.6
+1879.96887 3280.9
+1880.28979 1971.7
+1881.42957 729.7
+1907.06458 8273.3
+1930.46252 865.4
+S	2803	2803	1198.58199127
+Z	3	3592.471
+Z	2	2395.316
+315.07983 761.2
+320.37674 535.0
+337.13474 575.4
+340.37662 581.9
+347.74973 724.9
+367.67371 590.6
+381.36829 777.5
+427.55515 867.8
+427.99536 646.1
+428.78204 695.5
+437.18430 607.2
+444.22388 532.3
+475.97372 586.9
+482.81201 738.4
+486.71436 651.3
+488.45166 648.5
+508.47086 599.6
+532.57721 1636.0
+549.16669 744.6
+630.41620 920.8
+676.64673 1128.0
+735.76300 745.7
+789.54840 566.5
+795.77692 1004.9
+984.48022 658.2
+1006.58862 684.9
+1050.48633 579.7
+1057.24902 776.7
+1187.94849 815.3
+1198.28613 3140.0
+1437.76831 841.5
+1525.46704 812.1
+1614.79211 614.1
+1694.54346 634.8
+1716.37061 664.5
+1754.06958 667.2
+1776.88513 768.2
+1829.19434 591.3
+1870.21045 798.0
+1878.08606 794.9
+1879.56445 19769.6
+1879.91028 2434.8
+1880.34680 825.0
+1882.50769 650.0
+1906.70496 652.3
+1907.03796 7139.2
+1918.93274 935.7
+1930.66907 938.1
+1972.00305 811.1
+S	2805	2805	1879.97899127
+Z	2	3758.11
+Z	3	5636.662
+509.04721 611.0
+532.56628 1940.0
+549.12018 808.0
+630.37085 696.7
+641.81964 553.6
+671.25726 581.8
+676.65417 1100.1
+695.44897 656.3
+699.90741 555.9
+731.07654 836.5
+790.29779 565.0
+795.79773 982.7
+904.64612 671.3
+1189.78027 567.1
+1198.25867 3448.7
+1313.01343 677.8
+1525.34326 1048.1
+1559.29541 636.5
+1877.40161 753.5
+1878.09766 700.6
+1878.56360 934.4
+1879.17883 1671.7
+1879.59229 19787.4
+1880.05774 1496.9
+1880.62207 824.6
+1907.06909 7309.4
+1930.48816 990.7
+S	2806	2806	1907.4658246
+Z	2	3813.084
+Z	3	5719.122
+532.55786 1726.7
+628.30438 593.1
+630.41699 765.4
+632.68768 646.3
+652.65503 597.6
+676.67523 986.6
+795.79926 1119.0
+1075.82056 623.6
+1102.98804 679.0
+1198.24805 3277.0
+1448.79797 628.9
+1525.44739 822.4
+1646.12781 584.3
+1667.16772 703.6
+1733.35242 677.2
+1800.10046 686.4
+1877.29773 799.9
+1878.28320 707.9
+1878.63025 710.6
+1878.87805 734.3
+1879.30005 2262.2
+1879.64246 19532.3
+1880.01550 1856.7
+1880.39063 1016.0
+1880.85083 801.8
+1907.08484 6977.5
+1930.60535 793.2
+S	2807	2807	997.4968121
+Z	4	3985.95595
+271.56650 807.5
+271.87396 670.3
+285.69733 646.8
+287.30981 545.3
+302.11920 537.5
+382.04962 634.8
+438.27020 2243.0
+439.61093 621.7
+456.28049 1974.9
+471.64828 633.8
+487.47247 723.5
+532.54309 1625.0
+538.01715 785.2
+546.64850 721.4
+622.38660 671.4
+630.35712 644.6
+669.66583 656.5
+676.66553 755.7
+795.78680 1047.3
+883.67328 925.1
+883.93158 793.8
+952.03033 637.0
+957.72369 1148.0
+957.97223 1352.0
+958.22546 1870.3
+958.47418 2277.4
+958.72607 1423.7
+960.79114 650.9
+974.11865 874.8
+978.48193 657.9
+1021.44659 580.0
+1041.21826 643.9
+1066.79846 637.7
+1074.50488 879.7
+1078.53479 1406.2
+1160.29028 634.9
+1171.89771 2473.5
+1172.21899 1020.9
+1172.55969 2476.4
+1172.88818 1483.2
+1176.21924 1737.0
+1176.55334 2409.1
+1176.88721 1154.0
+1177.21802 1753.6
+1177.56018 25205.7
+1177.89417 44909.0
+1178.22864 41154.1
+1178.56250 28414.5
+1178.89771 14950.6
+1179.23413 3763.9
+1198.21667 3286.8
+1209.91516 1176.6
+1210.58203 8022.0
+1210.91650 16292.7
+1211.25220 13793.0
+1211.58411 10436.6
+1211.91907 6050.5
+1212.25439 1696.2
+1242.27002 944.5
+1242.60913 759.4
+1243.60632 6052.9
+1243.94031 13199.7
+1244.27271 13195.4
+1244.60864 9333.2
+1244.94324 2793.2
+1245.26917 1171.3
+1262.67358 548.4
+1276.95972 2597.2
+1277.30090 3098.8
+1277.62915 2084.4
+1277.97205 793.8
+1321.60620 703.0
+1553.72437 722.9
+1664.79260 1149.1
+1665.25317 1370.1
+1878.93066 1100.5
+1879.20837 1064.9
+1879.61096 19951.9
+1880.02002 1291.5
+1880.28381 1077.4
+1881.03992 863.2
+1881.79065 725.3
+1906.69568 629.2
+1907.05481 7464.0
+1918.94629 840.0
+S	2809	2809	1879.99999127
+Z	2	3758.152
+Z	3	5636.725
+532.54749 1668.4
+546.15613 614.1
+561.05542 623.1
+566.11292 892.6
+590.69104 558.0
+595.57666 662.0
+630.40619 714.8
+676.64868 1218.1
+836.08527 612.7
+1057.26953 1079.8
+1111.45422 558.0
+1198.22302 3077.7
+1304.21985 608.4
+1760.82117 602.2
+1854.48413 700.3
+1879.17773 2770.4
+1879.55920 19777.4
+1879.93604 3002.2
+1881.69141 826.5
+1907.07349 7290.1
+1930.58875 967.0
+1967.99756 667.7
+S	2810	2810	997.9948246
+Z	4	3987.948
+267.63422 641.3
+271.53201 857.4
+314.32071 664.6
+361.26486 613.0
+361.87534 660.0
+377.67596 581.0
+381.35431 930.8
+438.27148 936.0
+443.57199 636.8
+488.87146 653.6
+532.52856 1975.9
+537.53625 593.3
+601.80774 628.5
+630.39911 1024.6
+640.95380 702.3
+654.17084 711.5
+676.65613 1018.4
+705.39801 678.6
+731.11188 703.9
+786.60248 645.0
+795.79779 979.4
+806.95837 641.8
+883.67291 814.3
+945.49200 887.1
+945.99640 1490.0
+946.50098 590.5
+952.49115 2656.8
+953.49652 1588.3
+953.71625 627.5
+957.97064 1164.5
+968.01788 706.6
+972.46887 691.9
+978.45801 794.2
+979.46948 1036.4
+1114.05566 781.9
+1154.28516 685.9
+1171.56616 720.6
+1171.88538 1797.5
+1172.20850 742.8
+1175.88000 1907.2
+1176.21167 2036.1
+1176.54871 2507.3
+1176.88586 1595.9
+1177.22070 1068.1
+1177.56067 18601.0
+1177.89563 25297.0
+1178.22986 23446.4
+1178.56360 11807.5
+1178.90137 3440.5
+1198.18201 3603.3
+1204.90759 813.8
+1206.63232 904.0
+1207.13745 1995.5
+1208.59473 613.9
+1208.90845 766.4
+1209.23132 901.4
+1209.57446 783.0
+1210.58142 6458.8
+1210.91833 9294.6
+1211.25232 8446.3
+1211.58850 5255.6
+1211.92566 1141.5
+1213.43933 732.3
+1243.60132 4284.3
+1243.94116 10303.7
+1244.27283 7322.1
+1244.60596 3554.4
+1244.93787 1479.9
+1276.95496 1674.0
+1277.27600 1212.2
+1321.64221 691.2
+1399.71021 1213.3
+1525.40698 1042.8
+1667.09180 764.0
+1722.87549 646.0
+1842.66077 647.2
+1873.28821 814.4
+1876.62939 803.9
+1878.78662 949.0
+1879.57434 19517.1
+1879.82104 2986.4
+1880.29980 1043.8
+1881.56067 681.6
+1882.23621 660.5
+1902.84082 756.2
+1907.02771 7322.3
+1968.21716 643.3
+1968.41650 596.4
+S	2811	2811	1907.46899127
+Z	3	5719.132
+Z	2	3813.09
+532.54602 1992.6
+549.15662 832.8
+599.87750 701.7
+633.45776 570.1
+676.64679 1005.7
+726.96729 690.8
+759.47687 531.6
+764.10901 744.0
+781.53656 673.5
+795.78625 788.2
+846.16290 683.4
+1019.63916 764.0
+1198.22253 3380.0
+1280.26135 685.5
+1453.02686 640.4
+1474.16248 582.4
+1525.41760 838.8
+1546.37097 697.6
+1550.46301 616.3
+1594.40320 696.4
+1597.64453 817.9
+1676.85486 718.7
+1876.76196 698.1
+1878.99878 1435.9
+1879.53979 19794.5
+1880.08069 2005.8
+1880.37061 1081.0
+1907.08569 7607.2
+1916.09216 717.8
+1918.93579 730.1
+1930.60840 1306.3
+S	2813	2813	1879.94440793
+Z	2	3758.041
+Z	3	5636.558
+512.68024 686.2
+532.54028 1696.5
+549.12793 1076.2
+586.41919 681.7
+596.80060 597.7
+695.19104 706.4
+727.90253 651.6
+795.78723 1036.9
+1011.50287 624.7
+1019.68384 724.2
+1103.98901 649.7
+1198.21240 3209.0
+1242.18750 619.3
+1525.34521 787.8
+1550.18921 618.5
+1776.89771 828.1
+1870.24548 906.1
+1879.55530 19507.7
+1879.83398 3570.5
+1881.98486 901.9
+1907.07373 6997.3
+1907.34485 1269.0
+1963.59998 641.2
+S	2814	2814	997.7476671
+Z	4	3986.95937
+271.39224 586.8
+280.18793 1023.1
+294.75067 662.4
+294.94833 722.2
+296.30316 656.8
+318.77658 594.0
+342.27963 849.7
+358.03696 660.2
+439.45831 649.3
+519.39771 646.8
+532.54639 1986.0
+617.61768 617.0
+630.41986 1235.5
+669.94287 768.6
+676.65143 1023.9
+723.37720 542.3
+729.61914 605.3
+795.79553 783.7
+843.92139 560.7
+858.06024 700.2
+1019.65375 747.6
+1042.39990 681.4
+1057.23889 752.8
+1108.93298 602.8
+1177.55945 2268.2
+1177.89331 4695.4
+1178.22485 3055.2
+1178.56018 2338.0
+1178.90308 787.6
+1184.60510 536.4
+1198.22327 2637.2
+1203.26221 581.1
+1210.58716 960.8
+1210.92993 1098.4
+1211.25244 1665.2
+1235.63171 782.8
+1243.93787 1046.7
+1244.27209 1031.2
+1244.60352 817.5
+1405.10168 750.2
+1430.58984 625.2
+1460.71790 667.0
+1687.97095 794.8
+1802.78491 573.1
+1807.80359 729.5
+1877.54187 581.4
+1878.17676 1211.1
+1878.74329 1672.8
+1879.17566 2865.8
+1879.56641 18553.3
+1879.96570 2104.9
+1880.36389 1588.8
+1880.78674 908.1
+1881.06714 858.4
+1907.03882 7671.7
+1930.61121 892.9
+S	2815	2815	1907.53299127
+Z	2	3813.218
+Z	3	5719.324
+518.06543 629.4
+532.51483 1743.1
+533.36273 576.8
+544.85089 625.4
+620.09839 787.2
+640.66571 585.5
+646.96588 746.5
+648.53711 554.3
+676.66412 773.0
+729.19733 616.7
+731.12268 820.1
+744.45770 545.9
+880.86029 654.1
+881.91113 837.1
+890.93079 738.1
+898.99335 639.8
+899.35120 550.9
+920.82074 592.6
+1021.37213 587.4
+1057.28284 747.9
+1188.25488 890.5
+1198.14929 3114.0
+1232.81335 649.1
+1331.55298 606.0
+1810.11707 634.3
+1870.21826 897.2
+1876.15332 848.4
+1878.23730 712.6
+1878.54553 1242.0
+1879.03748 1720.4
+1879.59912 19903.0
+1880.09192 1822.6
+1881.09387 741.8
+1907.05115 7811.1
+1930.34399 688.5
+S	2817	2817	1880.00640793
+Z	2	3758.165
+Z	3	5636.744
+532.56378 1813.4
+549.15491 817.9
+631.31421 665.6
+676.66156 792.7
+795.79584 1222.9
+851.86749 580.2
+1198.26489 3125.1
+1302.51538 636.0
+1722.77405 769.3
+1798.82117 610.1
+1870.07813 570.1
+1876.46826 862.0
+1878.04028 791.1
+1879.11914 1175.0
+1879.21252 1230.3
+1879.65698 15724.0
+1881.14807 756.9
+1907.05505 7659.0
+1930.60559 995.6
+1974.21509 635.4
+1978.46619 775.6
+S	2818	2818	705.4445746
+Z	2	1409.041
+Z	3	2113.059
+188.23691 970.9
+188.25740 1542.8
+188.27859 1721.5
+188.29047 1528.9
+188.29652 1637.7
+188.31477 1438.2
+188.44495 672.9
+198.95013 782.9
+199.24672 984.3
+199.33679 2507.9
+199.34628 1521.0
+199.42615 681.3
+202.23532 688.8
+207.50465 529.7
+220.14404 589.0
+226.15454 507.8
+234.52484 559.2
+234.98605 612.5
+237.35252 578.5
+242.15030 1478.6
+252.22108 566.5
+254.14980 1168.4
+258.37457 572.9
+271.56879 649.0
+282.14505 1428.9
+284.83151 581.8
+290.97147 559.2
+299.17004 1083.7
+308.91580 640.6
+314.15411 580.5
+315.44025 580.8
+329.40042 648.5
+337.16339 616.2
+342.28653 745.0
+360.32648 685.1
+382.20966 738.6
+400.84238 666.6
+410.20297 12127.6
+411.20642 2634.7
+417.26035 826.9
+427.02332 509.9
+427.56165 891.2
+428.21335 971.9
+472.29437 578.5
+510.18610 627.7
+510.74011 2639.0
+511.23849 2145.9
+512.24719 865.7
+513.61133 3219.4
+513.94733 3302.8
+514.27722 1979.7
+517.27417 748.9
+518.30682 1517.9
+519.30426 681.6
+528.78479 1301.6
+529.27930 1634.9
+532.54633 1709.6
+532.57544 907.4
+533.82416 597.2
+537.78845 2989.5
+538.29071 3678.3
+547.29675 828.1
+556.60791 718.4
+556.79211 700.5
+557.26996 14961.4
+558.27521 3996.7
+565.78363 3989.0
+566.28320 2497.5
+566.78650 1423.8
+575.28339 857.3
+588.78864 22316.5
+589.29053 18972.5
+589.79065 8895.4
+590.29236 1000.4
+593.29669 1267.6
+593.62958 1703.5
+593.95795 1110.5
+598.96674 3201.5
+599.30145 6613.5
+599.63501 3654.2
+599.97125 1310.3
+605.31061 1077.9
+608.28687 708.8
+623.28241 1219.8
+626.32642 1092.8
+630.32526 1361.4
+630.83319 931.5
+637.66559 956.0
+639.31781 7816.4
+639.82031 7124.5
+640.30762 7861.0
+641.31348 3110.5
+642.31970 946.5
+642.66882 953.8
+643.00208 1647.6
+643.33905 1054.8
+650.86353 608.7
+655.83771 717.1
+658.31818 6130.3
+659.32690 1410.3
+662.32312 35883.2
+662.82428 37957.4
+663.32526 19277.3
+663.82703 4629.4
+665.37518 1887.2
+671.68134 1598.8
+676.66211 1236.2
+677.34149 749.6
+681.37512 3226.7
+682.38245 788.7
+684.85229 712.0
+686.86627 2465.3
+687.00287 2385.5
+687.33636 5759.2
+687.67346 5621.9
+687.86847 1213.1
+688.00732 2389.7
+688.34094 902.7
+689.55627 741.6
+718.86609 3165.1
+719.36670 3027.6
+719.86774 1672.4
+735.58191 771.5
+737.39294 2385.9
+737.89130 3837.1
+738.39026 2437.4
+739.41211 2677.8
+740.42169 1371.5
+747.36517 576.0
+753.39203 9837.5
+754.39362 4179.7
+755.39734 1233.6
+760.92023 1186.9
+761.41504 2223.6
+761.92078 913.6
+763.22327 751.9
+767.72369 1161.2
+768.06396 883.9
+768.38245 946.4
+769.38904 42410.1
+769.88434 44790.7
+770.38348 17450.3
+770.42413 24802.5
+770.86829 3102.7
+770.92371 15389.3
+771.41809 4170.1
+771.92249 1282.4
+772.40662 1561.8
+789.40869 1164.2
+810.92255 1949.8
+811.42596 4436.7
+811.92548 2735.2
+833.91754 5707.2
+834.41882 11599.1
+834.92078 6256.2
+835.41779 2014.8
+842.92285 42618.2
+843.42358 65516.3
+843.92407 43713.1
+844.42499 13210.6
+844.92780 2710.8
+858.44958 1420.6
+898.44043 2851.5
+898.94269 3713.4
+899.44525 3041.6
+899.94672 767.1
+900.47186 2093.8
+900.96808 2264.4
+901.47064 2354.2
+901.96741 762.0
+902.47919 1552.4
+906.95343 10050.9
+907.45355 19282.6
+907.95398 13789.8
+908.45465 4051.4
+908.95642 799.1
+918.46967 2293.1
+919.46216 1736.6
+923.41644 930.8
+936.48059 729.1
+949.47662 1332.7
+957.47711 1617.5
+957.99469 1897.8
+958.47009 1224.6
+963.98877 889.7
+964.49530 952.1
+989.29431 798.8
+992.50488 798.7
+1016.50409 823.1
+1020.46893 11379.6
+1021.47357 8222.1
+1022.47827 2502.7
+1074.56995 1531.5
+1075.57214 1757.6
+1076.56250 988.1
+1113.53333 1069.7
+1114.53809 948.5
+1130.56384 4066.0
+1131.56494 2680.3
+1132.57349 1095.3
+1188.00854 863.1
+1198.22363 3069.7
+1264.78406 846.3
+1375.49780 684.6
+1878.63733 1151.4
+1879.16162 1185.4
+1879.59216 20188.5
+1880.54602 861.9
+1907.05164 7658.3
+1910.25562 636.6
+1930.70825 1119.3
+S	2819	2819	1076.99624127
+Z	2	2152.145
+Z	3	3227.713
+291.40781 627.5
+294.54007 674.1
+299.03259 528.8
+301.19125 575.8
+305.11975 715.5
+338.47519 665.9
+348.41534 629.0
+350.28265 660.9
+354.43719 638.1
+367.41980 612.3
+370.59528 610.2
+477.42908 779.3
+532.56195 1563.0
+549.12042 948.7
+572.69873 677.9
+630.36243 1006.7
+663.23871 545.2
+673.75952 678.8
+676.64917 690.4
+731.82709 617.9
+784.18671 825.7
+795.79181 1122.5
+952.41290 619.3
+969.55743 731.2
+1004.55060 1160.3
+1058.79517 709.9
+1179.11597 699.1
+1183.60254 3663.6
+1184.59790 1364.0
+1185.59851 737.5
+1187.94714 754.7
+1198.25586 3175.4
+1222.91675 805.4
+1262.23706 589.0
+1296.71582 621.8
+1297.70752 824.4
+1312.54492 547.1
+1317.87451 786.2
+1377.67444 581.3
+1424.75635 1398.2
+1454.19971 623.0
+1494.51111 652.7
+1517.46167 632.8
+1525.31091 1109.3
+1870.34998 774.4
+1879.05701 1638.5
+1879.55774 19347.8
+1879.83508 1740.4
+1880.06311 1292.0
+1880.38623 1101.1
+1881.89905 716.5
+1907.05945 7030.1
+1907.96570 898.3
+S	2821	2821	1880.06440793
+Z	3	5636.918
+Z	2	3758.281
+529.49548 546.8
+532.55310 1437.5
+549.13751 1034.3
+556.66443 562.4
+630.39166 826.7
+664.42822 674.1
+676.64691 1078.3
+731.09723 903.3
+744.43158 580.3
+774.97278 582.3
+789.33398 621.5
+795.79523 1014.8
+800.01416 718.2
+989.77594 713.8
+1198.24158 2862.8
+1489.76660 648.0
+1525.39331 927.1
+1776.84229 837.2
+1783.30493 788.3
+1877.86780 814.8
+1878.21191 831.5
+1879.02258 1864.1
+1879.24756 1214.6
+1879.55750 20078.7
+1880.10669 1461.3
+1880.81128 807.0
+1906.60669 737.0
+1907.09570 7290.5
+S	2822	2822	618.729407933
+Z	2	1235.611
+Z	3	1852.913
+162.84656 593.1
+164.44469 571.3
+165.75841 968.0
+173.44362 573.2
+188.23978 636.7
+188.26059 1416.7
+188.28430 1289.3
+188.29225 1493.0
+188.30115 1286.8
+188.31163 1498.7
+188.33444 1213.4
+188.34518 903.3
+192.19490 569.6
+198.95100 928.9
+199.23776 1103.1
+199.31114 944.2
+199.33688 3181.6
+199.35373 733.9
+199.43367 916.9
+238.08040 561.1
+254.77245 728.6
+261.94809 733.7
+262.77167 665.0
+262.79144 598.4
+271.39978 616.6
+274.48883 592.1
+291.10455 723.8
+330.15765 645.5
+350.27277 755.7
+387.23874 602.9
+388.08963 595.4
+390.24890 607.8
+427.53967 1053.2
+436.23059 1418.0
+468.22690 1909.8
+468.73053 936.9
+477.23309 9066.0
+477.73499 3222.5
+478.23483 1158.3
+480.11035 628.3
+482.64786 688.3
+486.57477 911.8
+495.40155 566.9
+501.46228 535.5
+508.51624 621.2
+532.54742 1814.2
+549.14734 1055.7
+557.10974 609.0
+558.38519 642.3
+564.12823 605.3
+573.29907 1687.3
+582.30054 2277.1
+582.80286 2726.6
+590.25439 1105.6
+654.83191 565.0
+676.66791 533.6
+676.69806 602.9
+689.32239 3298.7
+690.32245 1065.2
+697.36633 647.9
+729.35986 791.5
+729.86218 848.8
+780.17804 702.9
+795.79828 787.4
+899.45721 4166.4
+900.46252 1993.4
+953.46161 3492.0
+954.46350 1677.4
+1010.12225 585.2
+1108.60742 670.4
+1198.22534 3281.3
+1358.02673 641.6
+1392.33545 675.9
+1578.51587 627.4
+1585.06445 624.5
+1643.16162 618.4
+1681.24133 627.0
+1709.37390 592.2
+1870.70691 597.2
+1878.36816 863.6
+1879.00098 2354.6
+1879.35461 5561.4
+1879.60315 17854.4
+1880.66797 1242.3
+1885.10327 707.5
+1904.96582 632.4
+1907.00806 7063.5
+1997.58960 805.0
+S	2823	2823	1198.70799127
+Z	3	3592.849
+Z	2	2395.568
+331.45215 547.5
+361.18491 586.1
+386.06964 619.3
+386.14801 730.6
+405.16589 596.8
+429.25842 577.2
+451.51511 641.3
+468.00378 561.2
+496.32135 574.2
+496.33682 614.2
+532.51215 1722.5
+573.65094 619.5
+626.12390 651.2
+630.39899 823.7
+651.71515 691.6
+676.63300 900.6
+729.44122 602.6
+795.79486 1139.9
+945.18146 722.2
+1001.61481 569.8
+1137.13684 633.2
+1192.81836 725.4
+1198.14575 3320.2
+1202.49951 728.6
+1245.72571 630.8
+1335.93896 519.0
+1777.05408 843.0
+1809.43396 683.3
+1860.07727 655.0
+1878.14197 962.3
+1879.52539 18695.8
+1880.00696 1884.4
+1880.52905 711.1
+1880.90210 735.8
+1881.22449 1030.7
+1907.05188 7499.0
+S	2825	2825	1879.95499127
+Z	2	3758.062
+Z	3	5636.59
+512.92926 600.6
+517.08618 577.4
+532.51147 2064.4
+568.22205 710.6
+676.54443 766.0
+676.62207 862.2
+692.49567 756.6
+768.78955 807.5
+1057.23340 768.7
+1198.14417 3119.2
+1600.20129 693.3
+1824.49988 714.4
+1875.98840 564.7
+1876.47705 676.1
+1878.85693 856.0
+1879.05945 1066.6
+1879.49133 19980.1
+1879.91907 1612.9
+1880.18372 789.4
+1880.39380 688.6
+1880.68164 873.6
+1907.04504 7246.5
+1918.92456 686.7
+S	2826	2826	1198.55299127
+Z	2	2395.258
+Z	3	3592.384
+326.50754 560.6
+405.03424 571.4
+427.51642 656.3
+484.18262 2567.5
+532.52319 1989.2
+558.78271 697.2
+569.44037 558.0
+574.04572 608.9
+589.17383 561.2
+597.26678 1776.4
+602.40540 673.4
+641.97046 666.6
+676.64618 1364.8
+710.33337 650.0
+795.79791 807.0
+822.84094 657.1
+839.38824 1545.4
+882.91266 726.2
+910.42944 2027.9
+1006.58826 1568.9
+1007.60022 1313.8
+1013.74884 736.7
+1020.79938 847.6
+1069.60693 951.8
+1178.05359 776.5
+1198.16479 3252.0
+1261.72717 643.3
+1321.76880 1264.1
+1322.77979 1025.4
+1384.57288 733.8
+1392.45972 765.3
+1401.32532 747.9
+1436.79993 1387.3
+1497.42395 628.8
+1870.31177 786.7
+1878.97546 1899.6
+1879.20105 738.5
+1879.55164 19634.5
+1880.13879 1634.6
+1880.87756 752.6
+1907.02612 8011.0
+1930.53052 843.3
+S	2827	2827	547.752991267
+Z	2	1093.658
+Z	3	1639.984
+140.51093 565.0
+140.69612 515.6
+141.88069 575.4
+151.23514 540.1
+157.59807 701.8
+160.32762 654.7
+160.89384 584.7
+165.76018 835.6
+171.64729 508.8
+182.77737 817.9
+188.25471 646.4
+188.26559 915.2
+188.27335 577.8
+188.28268 906.5
+188.28796 1124.8
+188.30049 830.4
+188.30798 1227.7
+188.31522 898.3
+188.33403 626.4
+196.08136 604.2
+196.98827 639.7
+198.94972 681.1
+199.24181 1447.8
+199.32240 814.7
+199.33923 3333.6
+199.35812 805.9
+199.43782 1005.1
+214.33589 593.5
+221.12720 903.6
+229.89247 629.7
+237.57930 568.1
+255.28600 777.6
+265.06223 551.5
+271.57895 760.3
+308.01559 677.1
+308.89502 976.1
+326.69116 601.4
+336.46799 566.1
+350.29581 747.8
+353.21664 771.3
+367.40350 712.3
+415.25278 1233.5
+427.53500 779.5
+435.27979 653.2
+453.99536 626.6
+459.27914 1324.1
+480.87537 610.4
+484.79300 675.7
+503.26288 1360.4
+503.30527 2956.2
+520.29016 1926.8
+532.49377 2084.3
+549.14703 949.6
+582.29224 1538.9
+610.77600 595.4
+630.39703 1062.7
+638.83386 2862.0
+639.33508 1219.7
+676.65289 1144.3
+684.91077 693.2
+695.37573 4584.2
+695.87585 3609.3
+696.37848 1426.1
+722.00891 590.6
+795.79327 1116.5
+876.23364 601.9
+888.51355 690.0
+933.92865 661.3
+1005.09137 591.7
+1057.27258 886.3
+1140.47949 617.9
+1198.10461 3416.8
+1229.48962 601.0
+1403.20288 628.9
+1709.24304 603.0
+1830.99695 620.4
+1870.44519 866.6
+1878.60205 748.0
+1878.94568 1244.7
+1879.57642 20160.3
+1880.54956 1063.7
+1906.42419 579.5
+1907.13574 7249.5
+1918.97705 642.2
+1945.81433 562.2
+S	2829	2829	1879.96699127
+Z	3	5636.626
+Z	2	3758.086
+510.82010 559.6
+532.57153 1856.7
+549.12390 784.4
+676.64514 831.1
+729.88635 641.6
+781.61285 611.4
+795.79218 886.9
+881.01764 675.1
+955.86200 628.7
+1013.90228 638.4
+1019.66656 672.8
+1057.25342 649.6
+1145.00146 633.1
+1198.27576 3663.9
+1525.29968 941.1
+1742.00269 655.0
+1878.60400 1029.7
+1879.07007 2202.9
+1879.55286 19312.8
+1879.83838 1660.5
+1880.05957 2551.1
+1881.34937 937.8
+1891.52625 611.0
+1907.05457 7566.2
+1918.93005 771.4
+1930.47852 767.9
+1993.43396 733.1
+S	2830	2830	1907.47099127
+Z	3	5719.138
+Z	2	3813.094
+532.50592 2126.5
+560.78302 586.1
+565.17023 628.0
+566.51538 596.2
+586.08350 650.2
+676.64453 800.1
+779.63470 544.9
+795.80884 958.3
+880.30164 592.9
+914.37878 653.5
+998.52777 585.8
+1057.26025 829.8
+1070.31555 657.3
+1118.39941 685.1
+1137.77332 717.0
+1163.60718 774.1
+1198.13538 3090.8
+1212.88745 604.0
+1363.56091 653.6
+1525.47607 910.1
+1552.18909 700.2
+1684.21936 687.2
+1715.99121 634.3
+1776.94983 906.6
+1874.89856 673.1
+1876.20605 1092.5
+1879.05469 1465.0
+1879.53906 19254.6
+1880.02820 1282.9
+1881.34155 638.7
+1897.46777 728.8
+1907.12427 7666.9
+1930.64819 910.8
+S	2831	2831	599.7378246
+Z	2	1197.628
+Z	3	1795.938
+165.75801 624.4
+175.11905 1298.4
+180.35408 563.8
+188.25642 930.2
+188.26714 1054.8
+188.27742 1234.2
+188.29047 1177.0
+188.30264 1156.7
+188.31561 1071.3
+188.32678 723.1
+189.73604 556.4
+198.95065 1086.5
+199.24242 756.4
+199.26637 918.7
+199.30043 1468.6
+199.32033 792.4
+199.33917 2003.6
+199.35786 1563.8
+199.43611 792.7
+199.45164 724.2
+211.65631 604.9
+223.06783 517.5
+237.86427 562.8
+269.18872 622.5
+271.17694 944.0
+271.55545 852.2
+273.09714 787.6
+283.16617 664.3
+285.13306 727.3
+288.20175 2321.6
+291.10809 2273.9
+309.11877 25175.2
+310.12259 2830.0
+314.17047 797.1
+319.10342 3806.3
+324.20160 1105.5
+331.20679 566.1
+337.11346 62310.5
+337.34253 647.7
+338.11752 8435.0
+342.21222 1069.5
+348.43201 636.7
+350.27826 866.5
+359.23920 17284.4
+360.24213 2691.1
+400.56155 698.7
+409.52670 649.6
+428.14792 516.8
+434.67102 566.2
+438.00732 567.8
+456.18686 7346.7
+457.19022 1383.6
+466.17062 3113.2
+470.27240 2120.2
+473.93423 587.0
+482.40063 580.9
+484.18134 72453.0
+485.18445 16262.6
+486.18799 1831.6
+488.28122 28545.5
+489.28479 6006.6
+499.79153 4539.6
+500.29233 2647.0
+504.78244 647.8
+517.79144 2295.3
+518.29327 1305.2
+521.15723 693.2
+525.95862 567.9
+532.52399 1956.3
+535.30896 3388.4
+535.81006 1471.9
+540.30328 1744.7
+540.80072 1414.9
+549.11298 740.6
+556.63245 689.3
+562.63159 1847.6
+569.26971 4551.8
+570.27332 773.2
+579.25421 836.5
+581.30371 722.1
+581.80280 864.3
+583.35596 794.7
+584.33759 1606.7
+615.60223 541.4
+632.04492 597.6
+641.94849 546.1
+647.66174 674.0
+652.33459 776.8
+676.65826 1302.8
+696.43445 1045.3
+710.34906 11646.5
+711.35278 3396.5
+714.44885 79284.0
+715.45166 28301.7
+716.45667 4260.8
+731.06494 843.4
+794.92102 1404.9
+795.79297 1137.0
+839.39087 8228.5
+840.39404 3279.3
+841.39526 880.1
+843.47168 943.1
+861.51648 66907.1
+862.52020 27585.0
+863.52100 6746.5
+902.82214 608.0
+910.42877 6951.6
+911.43201 2663.4
+1016.53168 541.7
+1023.51947 762.3
+1024.49060 607.9
+1144.11646 620.2
+1188.26038 914.6
+1190.29333 636.6
+1198.17615 3597.1
+1215.82629 603.8
+1219.86609 586.8
+1223.62610 576.5
+1229.52026 568.6
+1244.77295 679.1
+1332.13831 633.0
+1525.31775 761.3
+1620.10852 643.5
+1776.93677 743.3
+1855.78772 561.5
+1872.76306 799.3
+1876.21509 584.4
+1878.69971 1205.1
+1878.91138 1530.0
+1879.22986 3750.4
+1879.57629 19296.1
+1879.91992 4001.2
+1880.25769 1486.5
+1880.53955 835.7
+1902.74292 569.7
+1907.04248 7204.7
+S	2833	2833	1880.0228246
+Z	2	3758.198
+Z	3	5636.793
+532.54431 1756.1
+676.64319 929.6
+697.42139 624.9
+722.02704 645.1
+782.25574 707.3
+793.02234 622.7
+793.16418 591.6
+795.81519 877.3
+847.53992 643.5
+970.21271 577.7
+1168.51453 623.0
+1188.16052 784.4
+1198.21265 2909.7
+1232.34277 727.9
+1379.53064 627.8
+1767.21252 598.5
+1856.13184 562.8
+1870.25549 920.6
+1878.22241 847.7
+1879.13037 1730.6
+1879.53552 19727.8
+1884.40369 540.3
+1893.65479 613.7
+1906.60693 751.2
+1907.01965 6962.6
+1930.53467 899.9
+1944.41211 854.7
+S	2834	2834	1907.4608246
+Z	2	3813.074
+Z	3	5719.107
+518.82776 684.5
+532.55713 1718.9
+549.15704 869.5
+676.66162 935.5
+731.10260 804.3
+780.87207 656.6
+795.80286 899.1
+1057.27686 906.5
+1198.24756 3242.7
+1223.73669 582.4
+1748.16418 565.9
+1776.96887 754.3
+1878.09888 1113.8
+1878.89197 1206.2
+1879.32312 2222.7
+1879.59729 19739.9
+1880.26196 1251.0
+1881.16650 733.7
+1881.54724 876.0
+1906.99976 6998.7
+1930.63879 991.9
+S	2835	2835	575.1215746
+Z	3	1722.09
+Z	2	1148.395
+151.97772 553.2
+173.90366 524.9
+188.25728 1174.7
+188.27386 1294.5
+188.28842 1204.0
+188.30008 1402.7
+188.31029 1042.9
+188.32632 709.3
+196.27524 594.2
+197.34021 603.8
+198.95169 770.8
+199.24699 659.6
+199.25826 540.8
+199.31357 1446.1
+199.32875 1538.8
+199.34445 2127.6
+199.35364 803.1
+199.42807 686.1
+199.44176 1024.8
+202.04346 579.2
+203.05128 561.8
+217.42633 600.3
+255.28882 667.2
+268.49899 641.1
+280.30722 503.3
+298.69244 559.9
+344.99069 534.7
+381.35278 743.6
+396.72354 578.3
+412.19577 1044.4
+412.69720 1266.9
+427.54486 627.3
+429.76816 550.6
+437.46841 538.9
+466.82443 607.4
+471.78311 538.5
+471.93930 667.1
+476.72302 31074.2
+476.97897 961.6
+477.22452 16066.0
+477.72443 2885.8
+485.72821 67774.4
+486.22958 38488.1
+486.72998 6308.4
+500.39194 604.8
+525.71228 2858.6
+526.21246 1221.3
+532.57971 1992.3
+535.22955 523.5
+562.93884 1419.0
+637.14471 640.9
+676.64337 1378.3
+697.33679 1999.7
+697.83392 1158.8
+726.33063 1313.7
+744.38501 717.3
+747.86017 11824.8
+748.36108 7100.6
+795.80182 900.6
+824.33783 951.1
+929.42584 606.1
+941.24634 584.6
+1057.27893 840.9
+1131.23047 598.0
+1198.29480 3228.5
+1776.94043 829.1
+1870.31665 558.4
+1877.03870 636.5
+1877.37854 931.9
+1877.94910 662.5
+1878.16711 754.3
+1878.34729 536.8
+1879.30078 1330.9
+1879.55261 19998.4
+1880.16614 787.9
+1881.70435 627.0
+1882.01147 745.9
+1906.99438 7453.6
+1930.58594 953.5
+S	2837	2837	1880.04499127
+Z	2	3758.242
+Z	3	5636.86
+524.00555 640.5
+532.61023 2088.9
+545.68610 617.5
+630.36804 1119.7
+644.63239 645.5
+654.44049 741.8
+763.28888 682.9
+781.02155 817.0
+795.80072 1052.2
+816.63647 578.8
+863.47833 662.0
+1042.78650 730.0
+1187.70007 758.5
+1198.37183 3367.7
+1347.93567 613.3
+1379.23767 695.5
+1488.19824 819.4
+1777.59692 858.1
+1778.69678 607.5
+1797.26404 561.4
+1878.87964 1178.8
+1879.03662 670.5
+1879.25916 809.1
+1879.57715 19868.3
+1880.26807 1226.2
+1880.99817 780.8
+1907.05237 7590.2
+1930.47339 913.0
+1931.90588 600.7
+1933.55347 546.1
+S	2838	2838	812.886407933
+Z	2	1623.925
+Z	3	2435.384
+210.55983 553.3
+222.46658 566.5
+235.40714 579.4
+239.08119 795.0
+247.72743 606.8
+249.46388 578.1
+253.12912 3249.8
+254.11186 811.6
+256.10849 691.7
+258.16034 1673.1
+259.28696 651.2
+271.14014 2327.7
+271.96185 520.3
+273.13391 4904.5
+283.11880 2369.7
+284.10266 19509.8
+285.10666 1890.9
+299.57324 801.5
+300.19131 17971.4
+301.12906 39688.8
+301.19562 1644.6
+302.13287 3254.6
+343.83994 691.8
+350.29257 714.8
+355.17770 935.5
+364.98871 641.4
+372.20245 3087.9
+382.18747 4268.0
+383.17148 4860.4
+397.18475 886.3
+399.23334 851.8
+399.35220 983.7
+400.19720 158492.3
+401.04272 921.6
+401.20047 26561.5
+411.95331 629.3
+413.27515 16542.1
+414.21140 1672.1
+414.27805 2012.3
+427.98605 666.2
+434.12802 681.0
+443.94852 595.3
+465.91763 681.0
+468.26086 2967.9
+485.28644 7858.6
+486.28958 1647.1
+495.26901 1784.9
+496.25391 29255.3
+497.25681 6337.6
+512.34290 3436.6
+513.28064 148569.3
+514.28351 31281.4
+514.50555 835.9
+523.81628 696.6
+532.57153 1771.3
+545.92108 707.5
+556.80377 658.2
+566.31006 632.1
+574.31903 1163.9
+593.31146 757.2
+610.33240 2596.8
+630.40485 712.9
+664.34320 4319.2
+665.34637 1614.8
+676.67932 1062.8
+681.37018 11591.9
+682.37457 3004.6
+721.91290 797.1
+777.42944 8557.4
+778.43140 5637.5
+794.45453 6366.1
+795.45648 1644.5
+795.78009 865.4
+895.18365 677.4
+902.97113 587.0
+1046.06848 747.0
+1057.27502 757.5
+1147.64087 2331.4
+1167.10510 730.7
+1198.27930 2930.8
+1343.75476 2935.5
+1525.40894 689.8
+1602.51221 645.4
+1870.09937 754.2
+1878.31213 824.5
+1878.74731 1774.2
+1879.20764 4092.8
+1879.63611 18861.3
+1880.04626 3155.7
+1880.20166 2263.4
+1880.49292 1635.2
+1880.89636 1091.3
+1881.48975 1096.7
+1907.10791 7275.5
+1945.29736 659.6
+S	2839	2839	1907.36340793
+Z	2	3812.879
+Z	3	5718.815
+517.93781 637.9
+532.59937 1747.0
+549.16974 743.9
+560.52380 640.0
+582.17535 614.5
+630.42694 738.6
+676.66498 1214.8
+702.83691 537.3
+737.24384 621.7
+795.77325 1094.8
+889.22485 637.4
+980.44708 548.5
+1198.34155 3171.7
+1198.45422 659.9
+1313.15369 708.1
+1603.08582 607.2
+1605.47913 647.8
+1631.53186 716.9
+1653.65173 740.2
+1876.10925 707.9
+1877.72961 722.7
+1878.62463 652.7
+1878.88708 806.5
+1879.17065 816.0
+1879.60730 19873.3
+1880.47314 1083.4
+1907.15735 7138.2
+1910.45593 667.3
+1930.61902 941.3
+1939.44531 644.4
+S	2841	2841	1879.9968246
+Z	2	3758.146
+Z	3	5636.715
+532.57587 1843.1
+549.14069 738.6
+588.55743 587.6
+597.56195 612.4
+636.22400 602.6
+651.84760 670.2
+652.78467 644.1
+669.00140 738.1
+676.64874 1564.7
+731.65137 645.5
+782.27655 626.7
+795.80444 1148.1
+881.30859 717.8
+922.44019 796.5
+992.14532 651.2
+1003.51758 605.2
+1006.54858 612.0
+1057.25305 1029.4
+1085.60486 592.7
+1147.82092 691.9
+1198.29248 3178.2
+1360.56104 578.9
+1525.36584 794.9
+1745.23022 672.4
+1860.05701 765.6
+1876.13416 706.1
+1879.55164 19965.9
+1879.98376 674.6
+1880.12415 776.1
+1883.76721 739.7
+1907.09534 7386.6
+1930.55334 1061.8
+S	2842	2842	1907.50840793
+Z	2	3813.169
+Z	3	5719.25
+528.19226 659.4
+532.55365 2132.5
+659.46631 655.6
+676.66016 904.1
+756.65015 569.8
+836.27307 610.3
+845.12402 709.4
+1043.04541 639.8
+1057.27612 806.5
+1187.93665 722.8
+1198.24121 3403.9
+1525.37463 549.5
+1525.48315 565.9
+1537.83105 638.9
+1776.90674 709.2
+1878.85010 1762.7
+1879.59644 19741.8
+1880.33484 1640.1
+1907.12146 7423.3
+1930.42383 993.8
+1940.44116 624.7
+S	2843	2843	797.829407933
+Z	3	2390.213
+Z	2	1593.811
+207.75363 540.7
+219.78229 555.0
+234.94095 526.2
+245.36732 589.8
+247.29076 637.0
+262.77750 620.2
+269.89856 651.9
+276.01761 575.0
+285.15414 784.1
+289.64252 667.3
+290.26715 591.5
+310.17630 661.8
+343.20834 6520.7
+350.28812 756.4
+372.09262 691.2
+385.25705 739.3
+398.23856 764.4
+400.22998 1449.3
+416.72696 798.7
+444.25574 15403.2
+445.25989 1141.0
+497.67346 570.3
+501.54434 597.2
+512.25281 987.5
+532.52411 1078.1
+532.56488 1246.3
+549.17731 810.9
+554.81030 607.4
+556.02356 533.1
+573.31299 1118.2
+591.32257 7145.8
+592.32861 1301.6
+616.48645 717.8
+617.75751 559.9
+630.43884 709.2
+674.84247 2083.1
+675.33496 1060.5
+676.64923 744.4
+686.39545 705.8
+696.35687 1379.6
+704.40863 3514.1
+720.34473 3193.9
+720.84698 1858.9
+726.33221 1054.7
+729.41974 1263.9
+760.93085 648.3
+761.37402 904.9
+779.39844 1112.0
+779.88898 1341.8
+780.39178 1184.8
+780.68719 631.5
+782.45807 618.9
+795.79352 915.3
+818.76056 671.6
+820.56592 618.8
+833.44843 3407.2
+834.45007 1374.1
+873.39148 1506.7
+878.48969 745.6
+887.63025 718.6
+890.40668 1011.3
+910.89185 707.8
+931.95984 666.0
+949.41779 666.8
+964.48773 2935.6
+965.49805 1055.5
+986.46240 1918.1
+987.46893 928.2
+1002.98846 1821.2
+1003.49054 4845.0
+1004.49670 1391.8
+1015.99146 654.3
+1025.50195 736.4
+1050.52197 1652.3
+1051.02014 1300.6
+1057.54077 849.9
+1058.53113 851.1
+1059.52722 2866.2
+1060.02795 4186.0
+1060.53186 1747.3
+1065.53760 5323.3
+1066.54431 1702.9
+1087.81799 671.3
+1132.55273 1232.6
+1133.53564 4584.8
+1134.53748 2066.4
+1140.53101 1413.3
+1150.56018 11294.8
+1151.56458 6299.7
+1152.56445 879.6
+1178.55603 873.6
+1196.57922 5101.6
+1197.57727 2476.6
+1198.26331 3258.4
+1216.57666 1234.7
+1233.59448 2144.1
+1234.59155 2142.0
+1235.61267 797.9
+1251.60974 7151.2
+1252.61169 3869.6
+1253.62610 998.5
+1255.62341 740.3
+1309.67151 980.6
+1349.67883 856.1
+1366.68542 4950.0
+1367.68762 2774.4
+1524.52808 717.8
+1611.87756 749.5
+1776.95972 894.4
+1877.06067 940.0
+1879.29504 3100.6
+1879.56824 19195.4
+1881.01587 1286.1
+1881.95850 953.6
+1906.01697 672.9
+1907.10059 7139.4
+1930.70593 1077.1
+1948.35010 716.2
+S	2845	2845	1879.89440793
+Z	2	3757.941
+Z	3	5636.408
+532.53534 600.1
+532.57831 1585.9
+532.61548 701.2
+635.15643 621.5
+637.78906 729.3
+676.69000 761.5
+683.34619 591.5
+731.09583 740.0
+795.80640 993.4
+867.08557 757.0
+883.58405 637.7
+1140.34009 706.3
+1162.04675 581.4
+1198.29651 3458.8
+1345.88293 711.5
+1545.72839 674.7
+1590.03015 617.6
+1658.85950 661.3
+1759.93750 597.1
+1879.38647 7623.9
+1879.67065 17209.9
+1881.05798 1351.2
+1881.50867 618.0
+1907.12329 7323.2
+1930.56238 932.6
+S	2846	2846	893.854991267
+Z	2	1785.862
+Z	3	2678.29
+247.96648 618.0
+280.18692 774.6
+284.85345 687.9
+304.31570 721.5
+377.08133 612.1
+419.24658 910.9
+426.19394 657.4
+427.55481 749.1
+436.46799 664.3
+505.21384 668.9
+532.55206 2765.5
+541.22559 1679.3
+542.21277 1009.3
+550.22345 1014.5
+560.63611 615.7
+576.29254 630.1
+646.21472 747.2
+655.29077 935.9
+722.31525 1299.7
+731.13922 684.9
+736.85193 711.9
+745.35114 740.6
+776.42926 755.5
+869.45490 1465.8
+875.91364 1255.5
+880.54498 717.9
+983.49756 2230.6
+984.49683 1152.1
+994.43018 944.4
+1045.07117 817.9
+1045.53784 591.3
+1057.26282 908.8
+1114.53271 2368.6
+1115.54199 1403.5
+1181.07751 1185.3
+1189.57373 1788.4
+1190.07935 1267.6
+1198.23389 3459.9
+1227.62378 2152.1
+1343.65405 824.6
+1599.84985 783.7
+1870.41223 863.9
+1876.24817 806.0
+1878.41040 1480.3
+1878.71094 694.5
+1879.18213 2965.9
+1879.55017 21167.4
+1879.89905 3054.7
+1880.61646 693.4
+1907.04175 8204.4
+1909.84692 917.0
+1918.99609 855.2
+1927.81287 677.2
+1930.62988 1086.4
+S	2847	2847	894.5428246
+Z	3	2680.353
+Z	2	1787.238
+255.16385 813.8
+258.40009 706.8
+268.83905 693.4
+301.18628 1377.9
+307.69699 620.9
+309.11783 599.9
+368.65176 624.3
+403.34024 669.6
+419.18942 876.9
+419.24292 2427.3
+426.19751 1267.8
+427.18851 610.4
+432.07800 688.2
+525.75671 649.7
+532.54688 1819.3
+534.90631 578.0
+541.22479 3314.4
+542.20593 3513.4
+567.55774 669.7
+570.30347 1398.4
+570.80707 756.5
+572.34125 1465.6
+573.34033 765.9
+582.30536 4734.5
+583.30365 835.1
+618.73108 661.9
+651.27063 852.4
+654.30798 961.3
+655.29370 2527.5
+673.38721 3112.7
+676.60638 1372.4
+686.98059 628.4
+695.38696 1273.0
+716.89502 731.6
+722.31537 1393.5
+727.33838 1040.9
+731.15289 702.1
+745.34912 857.6
+768.91028 943.4
+769.40198 977.5
+782.42340 3186.1
+783.42212 847.1
+786.33368 1477.8
+786.47388 1884.6
+795.78284 860.1
+854.40149 709.0
+869.45074 4291.0
+869.76910 751.5
+870.45520 1368.2
+871.66486 709.9
+874.42358 1315.2
+874.93439 854.0
+875.43048 987.0
+875.91705 2188.7
+876.41174 1847.7
+879.47565 749.3
+900.05383 617.0
+946.94043 905.2
+967.47791 1329.6
+983.49561 8244.9
+984.49683 2882.3
+987.40363 2278.0
+988.41174 1087.2
+993.45538 633.8
+994.41064 1191.0
+1003.48206 816.4
+1021.20209 692.6
+1044.55554 858.6
+1052.03833 768.9
+1054.51074 1119.3
+1057.18372 975.5
+1079.47437 566.3
+1096.02454 1148.8
+1097.50854 804.9
+1114.53564 7558.6
+1115.53564 4007.5
+1116.53540 740.6
+1118.53003 940.1
+1126.66992 734.2
+1133.61121 863.6
+1139.60168 2671.0
+1140.59827 1204.7
+1145.49963 643.3
+1149.11572 653.0
+1152.06555 1583.0
+1152.57080 794.1
+1169.51233 1084.6
+1170.51294 731.4
+1180.57471 1718.7
+1181.07629 2214.9
+1181.59082 1084.6
+1186.54993 884.4
+1189.57764 5136.9
+1190.08069 3255.8
+1190.58411 2740.8
+1191.43713 668.5
+1196.51331 962.5
+1198.22229 3141.7
+1227.62170 5192.6
+1228.62146 2578.1
+1342.64734 2861.4
+1343.65906 1311.8
+1360.58447 961.7
+1365.72583 1163.4
+1367.62207 755.3
+1457.67639 1145.3
+1458.67114 1558.7
+1463.67297 870.4
+1479.64929 674.8
+1542.08765 652.1
+1595.70581 599.8
+1825.82324 673.2
+1879.42212 21003.8
+1906.86633 823.3
+1907.13672 7202.1
+1918.98840 741.7
+1930.67651 1122.6
+S	2849	2849	1879.8318246
+Z	2	3757.816
+Z	3	5636.22
+532.57458 1627.0
+595.22961 654.4
+626.21625 654.3
+676.63812 1246.8
+731.15454 715.8
+895.31445 611.3
+917.28101 625.8
+926.90082 582.5
+1057.24182 921.9
+1173.28369 657.3
+1198.28870 3407.6
+1438.41980 604.1
+1447.19543 665.8
+1602.39197 831.5
+1674.87732 582.6
+1719.42566 1332.7
+1873.56543 710.0
+1879.53577 20473.2
+1906.77441 1145.6
+1907.10620 7525.4
+1907.48828 760.7
+1907.77917 546.9
+1933.68787 627.8
+S	2850	2850	1907.50899127
+Z	3	5719.252
+Z	2	3813.17
+518.06378 597.0
+532.52039 1532.9
+532.57031 630.3
+543.01654 707.1
+549.13031 687.7
+639.94794 649.2
+646.54773 731.8
+676.64941 872.0
+701.74304 643.5
+712.42670 624.4
+769.74487 604.5
+831.09235 595.9
+842.48010 546.1
+1019.67255 623.4
+1023.20093 612.5
+1057.33423 633.4
+1188.34509 699.9
+1198.17188 2857.8
+1222.91113 676.9
+1525.37183 819.7
+1872.45618 809.9
+1879.01746 962.6
+1879.54736 18233.9
+1880.12073 931.1
+1880.26233 1118.6
+1907.09265 7226.3
+1928.37329 626.4
+1930.54565 956.7
+S	2851	2851	615.822407933
+Z	3	1844.192
+Z	2	1229.797
+171.42683 664.9
+187.42603 658.2
+188.25186 616.7
+188.26382 861.1
+188.27405 1082.9
+188.28398 1206.1
+188.29495 1475.9
+188.30550 1111.6
+188.31453 878.1
+188.41939 699.0
+198.95119 975.3
+199.17612 626.8
+199.28519 518.0
+199.29536 538.4
+199.31688 1886.3
+199.33234 1719.2
+199.34726 2426.9
+199.36836 617.1
+199.44508 930.6
+199.46579 564.2
+208.31396 525.8
+234.61485 582.9
+272.82516 533.6
+286.04111 608.0
+297.54657 548.0
+301.24075 555.2
+346.08502 556.0
+346.76843 597.4
+348.59637 540.9
+367.33356 564.6
+381.35217 790.8
+387.22314 5475.5
+390.64606 607.7
+394.30685 1263.1
+412.29083 2438.5
+412.31964 1492.0
+415.25192 675.6
+430.33127 1917.9
+442.74545 734.3
+445.46320 571.5
+448.33994 793.9
+464.05002 582.8
+467.63577 594.8
+475.40213 651.5
+486.33716 588.8
+532.51111 2113.7
+547.22760 753.4
+547.76080 673.0
+559.35925 1435.4
+561.22571 7315.9
+561.36993 6523.2
+561.72711 4968.1
+562.22522 743.8
+579.38135 15512.5
+580.38611 1342.2
+592.80627 1381.2
+597.31403 578.1
+597.39154 13055.3
+597.80487 945.4
+598.39410 1120.5
+601.81281 2686.8
+630.39026 861.2
+654.25250 886.4
+676.63995 1160.2
+723.04895 705.4
+727.18622 1657.0
+736.28113 624.9
+755.63470 537.7
+795.79395 1174.8
+812.28009 1371.7
+840.27179 9212.7
+841.27484 2719.3
+983.05212 618.4
+1008.35876 1549.8
+1037.45886 1042.5
+1079.43774 660.7
+1121.45142 1648.1
+1122.45337 879.8
+1198.14307 3132.0
+1525.39697 692.6
+1576.33875 596.6
+1617.68835 534.5
+1641.24561 567.0
+1877.54846 783.6
+1879.60254 16098.8
+1880.26953 2170.2
+1880.51453 990.5
+1880.80505 856.9
+1881.53027 954.5
+1892.08752 649.9
+1907.07983 6206.3
+1907.45850 909.5
+1997.25769 589.3
+S	2853	2853	1880.10599127
+Z	3	5637.043
+Z	2	3758.364
+532.51184 1517.2
+549.09021 1045.5
+603.48218 726.1
+676.66022 1132.4
+749.22528 582.3
+790.48407 661.4
+795.77588 849.0
+886.59680 718.4
+914.56537 688.2
+992.72247 715.3
+1101.41577 686.3
+1140.33691 575.7
+1185.47375 781.0
+1198.15039 2864.7
+1717.71680 1302.4
+1766.37048 609.2
+1872.38416 1061.3
+1879.18555 3521.2
+1879.57874 18453.8
+1879.95166 2781.4
+1880.25757 1545.7
+1881.38000 760.1
+1886.36487 802.7
+1907.04541 7780.2
+1918.91138 963.4
+1930.35413 985.2
+1943.29712 605.3
+S	2854	2854	1907.62940793
+Z	3	5719.613
+Z	2	3813.411
+532.51611 1657.6
+536.89465 616.7
+549.13605 1026.4
+614.41852 643.5
+623.14716 664.4
+626.76160 634.4
+651.38446 600.0
+676.68860 1425.3
+677.92834 591.3
+795.80310 853.9
+840.22894 606.1
+858.00635 658.8
+980.40961 634.0
+1046.84277 613.5
+1198.16003 3198.4
+1301.50793 660.1
+1324.54346 636.3
+1344.28918 705.8
+1716.85840 1394.8
+1744.42688 622.2
+1859.73950 641.8
+1871.54126 909.9
+1875.85083 668.5
+1877.07764 589.8
+1877.93054 900.4
+1878.67419 1449.5
+1879.28271 2888.0
+1879.66223 19404.2
+1880.07104 2569.2
+1880.60168 671.9
+1880.92798 1254.2
+1907.04846 7467.7
+S	2855	2855	591.781407933
+Z	3	1772.069
+Z	2	1181.715
+165.75725 1135.0
+182.78227 828.2
+183.41359 698.1
+188.24994 1266.7
+188.26436 1154.5
+188.27167 1249.0
+188.28444 2096.0
+188.30232 1873.2
+188.31548 1062.2
+199.24873 902.5
+199.31264 1643.5
+199.34550 3198.8
+199.35741 1844.8
+199.44287 1113.0
+199.45514 1099.6
+200.87686 857.0
+207.11230 1714.1
+210.76851 761.3
+216.51085 1050.8
+223.25075 761.3
+223.67561 739.1
+227.73808 724.5
+231.67027 966.1
+241.13448 752.5
+254.78242 778.4
+262.73083 796.0
+273.07083 798.4
+281.45453 776.9
+289.39325 779.4
+318.42938 777.2
+350.27832 1063.0
+353.09924 764.0
+367.33469 799.4
+381.35599 1044.9
+397.24045 949.7
+427.54337 1062.3
+449.23819 1361.4
+451.92545 803.7
+466.23865 1467.2
+473.28186 1522.4
+501.23636 15127.6
+501.73822 11315.5
+502.23788 3251.8
+532.54260 2279.7
+535.79816 810.3
+546.20380 798.2
+547.32831 1693.7
+558.75006 3477.0
+559.25000 3219.5
+592.64673 829.1
+608.78357 896.7
+615.29248 2906.5
+615.79004 2645.9
+630.40332 1043.2
+631.96033 870.5
+638.32904 4099.9
+638.66388 3504.5
+638.99829 2759.4
+671.84021 2792.8
+672.01074 14420.0
+672.34418 15073.2
+672.67969 11350.7
+672.84961 1137.5
+673.01276 3872.4
+676.66003 1700.1
+695.02234 806.2
+703.70380 2162.1
+704.03394 1068.0
+704.37415 2084.6
+709.70587 32539.1
+710.04028 45707.8
+710.30945 3019.1
+710.37433 28438.5
+710.70801 9975.4
+711.04108 3022.6
+711.31415 1126.7
+714.52551 760.0
+732.71539 2392.7
+733.04822 3595.5
+733.38281 2241.4
+736.05304 898.2
+738.71674 11444.2
+739.05060 18726.2
+739.38367 8369.1
+739.71814 3636.8
+742.04150 3815.4
+742.37842 5350.0
+742.71271 3132.6
+751.58496 777.9
+772.36621 934.3
+795.79846 1321.4
+856.41614 853.8
+865.76398 926.9
+996.53009 741.3
+1019.53912 1005.4
+1036.07520 916.6
+1047.49219 991.8
+1055.00806 919.6
+1057.25122 1066.8
+1095.58838 819.3
+1198.21741 4527.1
+1222.02319 954.6
+1561.09998 903.9
+1795.01965 832.6
+1860.13147 981.5
+1870.97839 1066.5
+1876.35132 1076.6
+1879.59277 26305.8
+1879.90137 3684.4
+1880.62341 1339.8
+1881.76416 876.2
+1906.54077 955.1
+1907.05298 10143.4
+1930.55786 1660.4
+S	2857	2857	1880.01324127
+Z	3	5636.764
+Z	2	3758.179
+513.43030 659.7
+532.49438 1832.3
+549.11737 843.8
+550.11584 669.6
+620.14514 582.5
+630.37659 870.0
+661.20508 580.0
+662.88348 779.6
+667.63019 681.7
+670.27087 569.7
+676.70825 840.9
+731.06592 881.3
+750.52075 692.7
+756.28204 721.0
+795.80164 792.5
+897.01135 622.8
+918.08484 570.9
+989.94391 562.8
+1152.35693 584.4
+1198.11072 3256.6
+1387.65979 680.6
+1474.83862 634.8
+1778.05212 643.3
+1859.08813 736.3
+1870.29346 707.1
+1875.61450 610.9
+1878.65771 783.2
+1878.96179 1263.3
+1879.37024 4594.8
+1879.70044 17605.4
+1880.04541 2701.1
+1880.59583 1449.1
+1880.90613 1448.2
+1882.22290 661.7
+1907.06165 7308.5
+1930.49585 1246.3
+S	2858	2858	1907.48340793
+Z	2	3813.119
+Z	3	5719.175
+532.49402 1397.0
+532.52179 708.6
+543.95526 643.2
+566.61298 660.8
+676.62964 1492.1
+740.19574 834.0
+784.16553 652.2
+827.94580 671.9
+1004.37909 634.4
+1026.32458 569.2
+1049.72839 666.4
+1065.83105 652.0
+1085.46887 618.1
+1143.51807 639.2
+1198.11157 3411.6
+1422.78662 666.7
+1555.02661 642.7
+1874.93079 674.5
+1877.63708 726.6
+1878.67358 1005.9
+1879.14880 1352.4
+1879.50977 19636.9
+1880.02112 1086.0
+1885.77417 603.5
+1906.75244 583.1
+1907.05225 7565.7
+1930.57056 689.1
+S	2859	2859	591.777241267
+Z	3	1772.056
+Z	2	1181.707
+151.78995 573.1
+161.37660 587.1
+164.75903 657.2
+165.14633 499.8
+167.61229 528.1
+170.26929 539.1
+171.64255 604.7
+188.26671 1042.8
+188.28082 1574.9
+188.29196 1385.2
+188.29959 1358.0
+188.30887 1227.2
+188.31877 765.8
+199.25186 650.2
+199.28119 825.4
+199.29710 694.1
+199.31505 1393.5
+199.32635 774.5
+199.33604 1003.9
+199.35069 1444.7
+199.36070 1614.7
+199.38591 551.4
+199.39609 622.6
+199.40843 623.8
+199.45097 689.2
+203.11835 546.0
+233.55322 535.8
+256.72263 638.2
+302.19806 501.6
+308.70145 516.1
+338.70538 582.6
+342.25232 770.4
+347.46899 686.1
+348.78897 902.4
+375.91510 611.4
+402.24561 977.1
+459.79828 608.5
+466.23712 758.2
+468.18643 836.7
+473.28156 4371.9
+474.28812 897.1
+501.23697 6135.1
+501.73883 2530.7
+502.23532 1082.5
+511.08478 630.4
+532.44940 2472.3
+535.29950 724.7
+549.12091 955.4
+555.54254 516.7
+558.75116 934.3
+561.28601 877.5
+568.37097 1171.9
+571.28381 620.2
+586.20526 624.2
+612.87646 571.9
+615.28894 793.6
+618.06702 686.4
+630.36328 956.7
+638.33173 1041.2
+638.66132 1189.0
+671.73993 678.3
+672.01086 3946.8
+672.34363 2970.5
+672.67950 3015.6
+681.36432 623.3
+697.40796 724.5
+701.39423 1708.1
+704.04010 1026.0
+709.70599 9142.7
+710.04071 9569.6
+710.31146 745.3
+710.37494 7941.2
+710.71057 3189.0
+718.36078 560.0
+731.07135 907.3
+738.71582 3176.2
+739.05115 4992.5
+739.38361 2957.1
+739.71851 800.4
+742.38098 956.9
+742.71722 1074.7
+782.55542 510.3
+861.52203 746.6
+877.28668 602.7
+898.76202 618.9
+909.58582 659.9
+998.55127 926.8
+1057.41016 649.6
+1069.59399 2385.3
+1070.58923 1492.7
+1085.51868 583.7
+1121.60046 525.4
+1198.00476 3217.6
+1539.77527 535.9
+1539.89502 530.8
+1544.29675 573.2
+1874.12402 599.7
+1876.34729 571.1
+1876.65186 555.9
+1879.24524 1767.2
+1879.42542 7064.7
+1879.68945 17435.5
+1880.32410 1140.6
+1880.62939 825.5
+1881.02295 947.7
+1907.10376 7682.2
+1930.48987 1382.1
+1995.16357 600.6
+S	2861	2861	1880.01340793
+Z	2	3758.179
+Z	3	5636.765
+532.47253 1834.2
+559.62915 736.8
+567.81696 664.8
+575.13934 575.6
+583.67780 598.7
+589.40735 685.4
+603.42902 586.1
+676.64996 1150.4
+791.52808 543.0
+791.57178 614.9
+795.82062 1035.8
+864.37677 641.4
+1057.26599 811.3
+1128.03125 687.4
+1198.05383 3436.3
+1235.62158 764.1
+1494.97485 656.8
+1879.00439 1120.3
+1879.56030 19948.8
+1880.10852 1183.0
+1883.55811 716.5
+1883.76367 766.6
+1906.81433 832.6
+1907.09973 7015.6
+1918.92529 762.5
+1930.33508 832.6
+S	2862	2862	998.0023246
+Z	4	3987.978
+277.08694 524.5
+342.25223 837.3
+350.28149 586.6
+350.29907 1074.7
+381.33310 758.8
+427.51385 679.3
+428.04886 624.5
+438.27176 1225.5
+439.60687 626.4
+456.28116 1855.9
+503.63705 662.5
+532.35046 663.1
+532.47974 2248.0
+541.99725 654.0
+549.11584 781.8
+566.77869 594.5
+570.10504 627.8
+634.10400 557.4
+640.97534 629.7
+662.35974 1471.2
+676.64722 1174.3
+693.96252 677.2
+763.38269 775.0
+792.25824 618.9
+795.80823 983.2
+831.28815 583.4
+836.23865 755.3
+858.10376 722.5
+883.41382 899.4
+883.67578 1754.0
+887.37140 753.8
+895.48285 733.1
+908.20050 769.8
+908.69257 852.6
+921.82996 596.5
+945.96387 750.1
+954.99146 685.9
+957.30994 714.5
+957.48126 705.0
+957.73370 770.2
+958.23700 1286.9
+978.05505 784.6
+1057.26050 936.0
+1074.17725 865.3
+1171.55652 1689.8
+1171.89990 1639.3
+1172.23425 1279.3
+1176.55090 976.9
+1176.88879 3553.2
+1177.23206 19456.7
+1177.56580 30826.5
+1177.89954 33960.7
+1178.23474 20565.5
+1178.56628 11261.4
+1178.89697 1939.0
+1198.07776 3185.7
+1209.58435 966.4
+1210.25244 4362.3
+1210.58997 9398.6
+1210.92236 8748.6
+1211.25610 6466.4
+1211.58643 4257.6
+1211.92065 988.7
+1214.38562 823.9
+1243.27686 4460.0
+1243.61121 8633.7
+1243.94482 9008.1
+1244.27881 4971.1
+1244.61145 4109.4
+1276.63513 1707.7
+1276.96863 1344.1
+1277.29285 1697.6
+1277.63989 760.7
+1327.58093 681.0
+1352.38196 787.9
+1376.85083 645.0
+1437.94348 610.6
+1525.30225 965.9
+1634.19641 849.5
+1776.96667 657.5
+1832.95435 666.2
+1878.80725 834.4
+1879.55518 19731.9
+1880.07642 783.7
+1880.31641 1009.9
+1907.13782 6754.9
+1918.87732 865.3
+1930.45349 1152.6
+S	2863	2863	997.5018246
+Z	4	3985.976
+271.36581 1737.6
+277.65247 1685.5
+342.16846 1986.1
+381.33337 2084.9
+427.51169 2633.4
+444.17731 2174.1
+454.94574 2108.1
+472.80426 2040.4
+511.27661 1725.2
+530.76849 1957.1
+532.49969 4789.3
+590.31140 1791.5
+630.36194 2972.4
+670.23456 2095.7
+779.10883 2033.9
+795.81317 3043.6
+881.00830 2326.9
+945.49054 2099.9
+1019.64801 3016.5
+1057.38306 2032.5
+1176.54944 3021.0
+1176.89026 5781.4
+1177.23352 21615.6
+1177.56750 41776.1
+1177.90015 43946.3
+1178.23181 18755.0
+1178.56714 7822.9
+1198.10632 9947.6
+1201.42957 2227.8
+1210.25757 4828.9
+1210.59216 9823.1
+1210.92615 14743.0
+1211.26123 5304.3
+1211.57190 3578.9
+1243.28223 3813.4
+1243.61670 5830.7
+1243.94873 8081.9
+1244.28186 6332.8
+1244.61902 5559.2
+1276.31250 2125.2
+1276.64111 3859.5
+1522.98450 1934.8
+1525.30737 2672.9
+1878.74060 3012.3
+1879.62305 49099.5
+1879.89551 19578.2
+1880.66113 3687.5
+1881.00232 3238.5
+1881.97290 2010.2
+1907.11108 23102.5
+1984.18274 1887.4
+S	2865	2865	1879.96640793
+Z	2	3758.085
+Z	3	5636.624
+532.54175 1917.4
+597.24213 699.2
+611.50873 607.6
+630.32013 763.7
+676.65979 676.5
+787.45636 656.8
+795.81854 1075.2
+827.83600 664.6
+857.98755 635.4
+925.88104 705.1
+1198.21350 3187.5
+1667.04639 679.9
+1877.03552 627.1
+1878.93164 770.7
+1879.57251 19239.9
+1882.11450 733.9
+1907.14294 6958.3
+1930.45898 1373.7
+S	2866	2866	997.2655496
+Z	4	3985.0309
+397.38049 656.9
+409.86459 672.8
+455.94382 622.6
+532.51227 1958.6
+550.86536 525.1
+556.53369 649.8
+584.85425 647.3
+622.51257 617.2
+634.50000 610.1
+642.24408 724.4
+676.67694 985.4
+781.99615 675.4
+808.69690 750.5
+869.83508 582.5
+987.18451 630.2
+1198.14221 3385.6
+1432.40295 629.5
+1489.65161 721.5
+1525.33337 968.4
+1528.10425 593.7
+1674.99988 699.0
+1870.19141 1000.4
+1876.06006 1124.7
+1878.36658 639.3
+1878.66394 1063.1
+1879.29907 3215.3
+1879.63831 19148.4
+1879.94995 2460.6
+1880.62854 1376.4
+1882.03235 751.4
+1906.79395 815.8
+1907.11780 7172.9
+1921.20166 662.2
+1930.54810 1174.6
+S	2867	2867	759.880407933
+Z	2	1517.913
+Z	3	2276.366
+197.99542 611.7
+198.95168 656.2
+199.26819 676.3
+199.29102 697.6
+199.31482 646.3
+199.32239 652.2
+199.33366 1900.5
+199.34512 1927.5
+199.36147 1107.8
+199.39970 563.4
+199.41060 567.3
+201.46864 581.5
+208.72681 658.6
+228.64771 720.4
+232.67802 670.1
+271.51682 779.4
+342.24792 723.5
+381.33197 701.8
+389.27124 638.1
+413.46320 886.8
+427.51468 837.0
+467.39267 569.9
+479.76407 583.3
+503.80005 799.2
+532.54242 1818.7
+599.31836 1177.9
+674.44629 1000.5
+676.65259 887.4
+711.12604 696.7
+719.70087 815.6
+741.38086 996.6
+741.94067 794.0
+746.10724 603.6
+786.37677 739.6
+789.46881 1546.4
+795.80768 890.7
+902.54895 1510.0
+903.54669 722.6
+937.36810 1177.8
+986.50110 1128.1
+1049.62927 1905.7
+1050.63635 1350.6
+1057.25574 1151.0
+1075.11304 739.6
+1079.04333 1274.4
+1079.42236 581.3
+1079.54749 1918.1
+1080.04932 1483.4
+1177.67346 1199.8
+1198.21350 3638.4
+1271.58484 804.6
+1290.76892 1095.3
+1291.74915 780.1
+1310.67554 653.0
+1335.72559 690.2
+1599.65381 606.2
+1639.23853 614.3
+1660.75269 600.8
+1845.78870 621.9
+1876.11108 901.1
+1878.66907 1034.6
+1878.88831 1133.6
+1879.24170 1624.8
+1879.57813 19368.0
+1879.94434 2059.8
+1880.44897 1406.8
+1881.89697 676.6
+1883.24524 832.0
+1907.05933 7363.2
+1930.46143 685.5
+S	2869	2869	1879.96740793
+Z	3	5636.627
+Z	2	3758.087
+505.34824 607.9
+527.39160 678.8
+532.55969 1951.2
+549.12042 664.8
+568.51947 619.1
+607.18988 605.5
+630.36969 888.2
+676.65448 1443.6
+748.37195 574.4
+795.80695 667.4
+820.76776 583.7
+1021.09937 680.8
+1030.03516 602.8
+1055.08044 603.7
+1057.27490 874.6
+1105.13342 617.9
+1116.28369 646.5
+1151.49084 701.9
+1198.25159 3359.6
+1336.16370 578.0
+1374.76575 607.2
+1406.63257 699.2
+1460.59802 727.0
+1470.91919 743.6
+1686.30005 624.4
+1709.34802 642.5
+1878.63489 842.1
+1879.22681 3990.0
+1879.57727 19011.9
+1879.92639 3706.7
+1880.47595 1067.1
+1881.15259 665.9
+1884.65234 744.0
+1907.05249 7290.0
+1918.62097 614.1
+1918.88574 827.0
+1930.46741 728.1
+S	2870	2870	997.2520621
+Z	4	3984.97695
+277.22339 579.9
+307.67596 691.0
+343.80264 637.1
+344.02240 702.9
+345.05493 654.0
+368.77499 532.6
+386.42108 593.4
+431.41830 652.7
+456.27972 881.1
+459.48956 660.0
+465.01834 607.7
+466.50870 651.4
+488.15466 720.4
+532.54828 1780.9
+549.17639 869.4
+562.11273 689.5
+573.05103 626.8
+599.16418 596.2
+624.87683 575.7
+630.70563 618.9
+642.33575 632.6
+662.35760 1595.6
+667.11505 630.9
+676.65735 686.4
+773.00177 659.3
+795.81036 1002.5
+883.42804 1509.9
+883.67090 1557.1
+905.29498 670.4
+908.44220 1202.6
+1056.28857 587.8
+1142.16321 642.3
+1172.23816 780.3
+1172.55615 1087.9
+1176.55237 2003.4
+1176.88892 3093.3
+1177.23181 17016.9
+1177.56616 28491.3
+1177.90039 26467.0
+1178.23547 17156.6
+1178.56897 7522.7
+1178.90894 2821.8
+1188.31140 760.1
+1198.22815 3427.7
+1210.25464 3274.2
+1210.59009 7678.1
+1210.92102 7222.4
+1211.25586 5117.4
+1211.58826 1513.0
+1211.92957 808.0
+1243.27527 2155.5
+1243.61475 6018.1
+1243.94543 4985.6
+1244.27759 3366.6
+1244.60962 3599.4
+1264.10242 749.3
+1277.28650 789.2
+1303.39636 653.1
+1316.61487 687.5
+1609.65979 682.9
+1676.29651 636.1
+1805.71106 748.0
+1870.36548 744.3
+1870.50391 721.8
+1876.09460 777.5
+1876.71301 798.5
+1879.03687 898.0
+1879.31018 2921.0
+1879.58203 19299.2
+1879.87024 3893.2
+1880.13721 757.1
+1880.52649 818.5
+1881.89600 701.6
+1882.06055 978.0
+1907.01685 7554.7
+1918.92346 887.5
+1930.67175 901.6
+S	2871	2871	1141.07424127
+Z	3	3419.947
+Z	2	2280.301
+340.95285 611.2
+492.17575 756.7
+531.66418 599.4
+532.53394 1496.3
+539.31805 1051.7
+540.25897 844.0
+546.27332 601.8
+549.11853 803.0
+596.32214 767.8
+628.36475 5312.6
+646.03906 607.3
+651.37048 989.3
+741.44232 900.7
+774.84076 611.6
+777.42853 2240.0
+779.46069 1002.2
+794.45441 2471.6
+795.80481 879.6
+822.41382 847.5
+854.61334 769.4
+893.50470 1818.8
+921.48566 865.9
+934.51282 1580.7
+935.49432 1478.6
+938.51105 1764.1
+952.52527 4125.1
+955.37366 1226.0
+991.18439 895.0
+1006.59015 3784.5
+1007.59326 1587.6
+1023.59888 757.1
+1033.57922 1438.9
+1034.56555 5284.1
+1035.57483 713.0
+1051.59192 20262.1
+1052.59387 3508.2
+1062.14075 583.3
+1069.46484 755.7
+1070.03613 1277.4
+1070.54590 1690.0
+1071.03809 1085.2
+1079.04309 753.1
+1079.53906 1449.8
+1105.59094 889.9
+1107.64026 1725.5
+1108.63892 994.3
+1117.99097 858.9
+1121.04089 861.7
+1130.85828 595.1
+1140.42712 679.2
+1188.04224 1072.2
+1198.19690 2863.4
+1208.70129 1238.6
+1270.55518 1207.3
+1271.56226 824.9
+1303.75488 1087.5
+1304.77197 988.8
+1321.76648 3832.7
+1322.77075 1843.8
+1406.82764 779.1
+1436.79797 2952.5
+1437.79468 1563.4
+1452.85400 631.4
+1484.34753 606.5
+1486.27478 1516.1
+1487.27039 1272.8
+1525.29004 733.6
+1611.90186 731.7
+1776.91504 850.3
+1784.91748 950.8
+1878.74963 975.1
+1879.25720 2082.9
+1879.57385 19753.1
+1879.89526 1584.7
+1880.35291 1191.5
+1907.05103 7838.7
+1920.91602 1916.0
+1921.91370 2928.3
+1930.49341 1044.4
+S	2873	2873	1879.97940793
+Z	3	5636.663
+Z	2	3758.111
+507.35562 753.7
+525.37274 707.8
+529.75891 620.2
+532.54675 1829.9
+549.09973 783.5
+558.06299 562.6
+561.58435 575.3
+587.42963 625.1
+602.93225 782.5
+676.63123 1231.9
+683.84796 541.8
+719.56805 609.3
+859.05536 687.7
+880.87494 718.1
+881.98798 640.0
+958.53638 583.2
+965.46063 616.1
+976.42963 687.8
+1026.35168 664.5
+1057.22961 924.0
+1198.22253 3734.6
+1235.44153 747.1
+1314.97388 571.6
+1580.10559 660.5
+1713.46289 621.5
+1776.90527 649.7
+1812.15100 733.6
+1878.74158 1011.3
+1879.12537 2191.5
+1879.51147 19874.3
+1879.89807 1698.6
+1891.89771 812.0
+1906.84814 5652.5
+1907.13794 3993.1
+1930.34521 1029.3
+S	2874	2874	997.2537721
+Z	4	3984.98379
+265.09613 566.0
+276.58325 614.6
+356.99048 555.4
+427.51978 767.8
+454.76141 564.1
+482.31943 628.7
+500.08157 645.5
+516.86957 828.3
+532.54602 1620.9
+549.11719 962.6
+609.28485 746.7
+625.37616 603.4
+646.29114 623.8
+676.54346 573.3
+676.63751 1067.6
+712.71301 622.3
+781.65857 680.5
+795.81543 937.5
+808.18481 594.7
+810.39612 593.5
+817.59314 605.5
+889.83319 677.1
+973.88348 634.5
+1068.91064 626.4
+1177.56641 1084.5
+1177.89014 1962.7
+1178.23071 1854.9
+1198.21741 3229.5
+1212.39001 648.3
+1513.76392 620.4
+1525.32959 770.0
+1525.76733 771.9
+1533.35388 615.4
+1584.39526 643.2
+1860.15759 624.2
+1870.45459 879.4
+1879.15405 3385.6
+1879.52747 18898.5
+1879.90955 3668.6
+1907.12305 7587.7
+1918.93494 597.5
+1930.48389 828.6
+1986.79688 615.6
+S	2875	2875	1141.0698246
+Z	3	3419.934
+Z	2	2280.292
+320.86740 701.2
+350.29865 643.3
+372.65750 559.0
+400.19522 2188.7
+422.24216 956.7
+426.23206 906.6
+440.24976 1816.0
+441.18335 806.8
+480.10339 727.8
+482.65143 681.5
+505.71863 747.0
+511.32013 837.8
+513.28241 1642.7
+521.30957 1547.5
+532.53845 2057.4
+539.31799 6961.3
+540.25464 3526.3
+577.73657 632.8
+602.07062 782.1
+628.36481 20722.4
+629.36877 3263.8
+630.41119 839.0
+636.30426 768.6
+639.32556 1316.0
+640.30084 751.9
+651.36981 707.2
+652.40814 973.0
+653.33606 3761.2
+664.34583 2574.9
+671.35168 1288.6
+676.65912 916.2
+681.36798 1470.5
+683.38611 1174.1
+741.45050 4671.6
+742.45007 1483.7
+751.47144 1802.2
+752.40997 1835.7
+753.38989 2798.2
+754.38519 874.7
+770.42004 3981.5
+777.42950 10214.1
+778.42999 2493.5
+794.45441 8672.2
+795.46222 2274.9
+795.82147 903.3
+822.41541 2364.7
+839.43951 3358.9
+840.44299 1005.2
+846.44189 702.8
+864.46509 2639.5
+865.46582 1111.4
+881.48804 2719.3
+882.49133 990.5
+917.48523 1450.5
+921.48352 1787.4
+922.47668 1126.3
+934.51501 5364.3
+935.49652 7762.3
+936.50317 2214.1
+938.50726 6026.8
+939.50446 2243.2
+943.09003 581.2
+952.52325 14374.7
+953.52563 5684.3
+1006.59198 2442.6
+1007.58710 965.8
+1008.59998 692.9
+1016.55798 1275.5
+1023.59784 2524.8
+1024.58838 1057.4
+1026.58044 688.5
+1033.58069 6225.0
+1034.56567 19918.7
+1035.56848 7605.4
+1051.59119 74200.8
+1052.59473 30603.9
+1065.55542 828.5
+1070.52551 873.6
+1105.59766 2447.2
+1107.63208 1515.4
+1108.63599 757.0
+1122.63220 1127.7
+1133.24414 643.3
+1188.03088 831.5
+1198.19885 2870.0
+1198.33813 849.1
+1209.68555 947.6
+1321.76343 2523.2
+1322.77161 1199.9
+1436.79785 1710.6
+1437.79785 1163.4
+1525.43518 1010.8
+1554.04590 709.4
+1586.00134 750.8
+1613.93372 684.6
+1776.96143 770.2
+1784.95105 712.6
+1854.77136 754.2
+1877.97461 958.7
+1878.83069 993.8
+1879.58740 18707.9
+1880.00684 2318.2
+1880.54834 1223.0
+1882.19275 606.3
+1907.13806 6907.1
+1918.98914 720.3
+1920.91724 1752.6
+1921.90710 1406.0
+1922.95508 849.0
+1923.95154 706.8
+1930.52649 863.7
+1944.50708 671.8
+1972.34399 680.7
+S	2877	2877	1879.9598246
+Z	3	5636.604
+Z	2	3758.072
+532.55200 1751.1
+587.82001 589.8
+597.03003 672.4
+598.87769 609.8
+676.62524 1007.9
+697.99420 621.8
+795.81812 730.1
+858.11774 733.3
+923.86487 671.6
+1021.19977 802.3
+1033.71350 605.3
+1057.22815 845.5
+1198.23730 3130.3
+1223.54846 944.7
+1276.28442 659.9
+1448.21021 688.1
+1482.97168 662.7
+1525.52380 899.7
+1612.59265 651.3
+1731.98840 614.0
+1879.50183 19264.6
+1879.76892 3284.5
+1907.07263 7434.1
+1930.74255 1073.9
+1978.30432 590.7
+S	2878	2878	1887.39999127
+Z	2	3772.952
+Z	3	5658.925
+532.54065 2056.5
+549.11194 676.5
+597.33789 825.4
+630.34900 910.2
+631.32556 1931.7
+649.33380 1126.3
+676.66260 893.1
+726.40295 826.8
+734.42230 861.9
+739.39545 1150.2
+744.40594 12634.5
+745.40955 6877.6
+746.41650 921.5
+762.41711 10579.8
+763.42004 6583.4
+764.41553 865.7
+773.29401 570.3
+779.98010 652.6
+795.80096 934.3
+800.64001 600.8
+907.45978 980.2
+924.56226 802.7
+925.47809 2402.2
+926.48029 2160.5
+941.41595 827.1
+942.97089 836.0
+943.49042 165761.3
+944.49304 140501.0
+945.34454 652.4
+945.49567 29702.5
+946.01855 1105.5
+946.50647 1715.5
+1188.05896 943.4
+1198.21460 2696.6
+1424.05017 588.5
+1688.45447 618.8
+1700.43945 608.5
+1777.06152 735.3
+1870.82727 705.1
+1878.83044 955.8
+1879.13440 1716.3
+1879.58435 19775.7
+1880.01648 1834.9
+1880.49097 590.7
+1881.38623 630.4
+1907.06409 7416.1
+1930.43079 880.1
+S	2879	2879	1886.39540793
+Z	2	3770.943
+Z	3	5655.911
+527.04175 710.9
+532.53271 1927.0
+588.37543 656.9
+630.36981 858.2
+676.63794 1250.1
+689.44781 722.6
+731.08301 856.7
+781.93787 606.0
+795.80933 1140.0
+943.49884 1160.1
+1110.70093 570.7
+1198.19336 2971.3
+1332.34668 659.1
+1354.12903 703.6
+1354.40540 777.5
+1525.33521 740.6
+1687.15564 711.8
+1753.06799 737.4
+1878.58398 641.1
+1878.85791 1149.1
+1879.20276 2499.4
+1879.53955 19554.5
+1879.94458 2448.7
+1880.28003 1109.7
+1882.90662 726.5
+1906.81165 745.8
+1906.89514 852.4
+1907.19336 7058.7
+1907.53528 689.9
+1977.11389 689.0
+1977.49329 815.6
+1992.04126 694.7
+S	2881	2881	945.431407933
+Z	2	1889.015
+Z	3	2833.019
+271.10492 99448.0
+273.69461 84236.4
+280.16623 93623.8
+283.12289 78628.8
+287.34180 86567.4
+295.16580 146982.8
+299.17447 143152.4
+307.14493 237502.4
+321.19687 214844.0
+328.20337 113877.1
+330.89523 73555.7
+333.15820 114508.4
+337.18756 117966.5
+344.19681 989339.4
+345.19781 162723.6
+350.30273 88022.3
+356.19629 257011.1
+365.34311 77402.5
+373.22287 1195390.6
+374.22537 293448.0
+383.20663 110639.2
+384.07086 78186.5
+390.17859 93638.0
+398.24503 95835.4
+401.21790 1664123.3
+402.22092 397908.8
+406.21317 166556.0
+412.03558 79195.2
+421.07639 73822.9
+427.23398 615510.6
+439.23419 513191.8
+440.23935 83638.3
+441.28540 217114.9
+445.24405 266287.8
+446.24490 146512.6
+455.26761 91482.3
+461.25305 79354.7
+464.25443 102075.3
+465.41660 78907.9
+466.24890 96399.7
+467.22836 485617.4
+468.23325 151484.3
+469.27939 445868.5
+470.28635 132199.2
+475.26990 659910.0
+476.27063 156374.4
+479.22751 111172.1
+482.63422 85625.3
+484.25488 1027303.3
+485.25836 280814.6
+486.30728 138791.4
+486.52750 88770.5
+491.26843 185780.6
+498.26819 149445.7
+502.26355 204346.2
+503.26428 1349672.6
+504.26907 338097.0
+507.25888 169143.8
+509.27161 164249.3
+514.30133 578665.3
+515.30566 110323.3
+520.29071 1739304.9
+521.26251 83593.9
+521.29645 434187.8
+522.29785 94781.5
+525.27112 410480.5
+526.27393 175553.8
+530.27515 610769.8
+530.33289 238499.0
+531.27924 179690.8
+532.55963 232011.8
+540.31714 905991.4
+541.32043 222517.2
+543.28070 1295678.1
+544.28339 359043.9
+548.28583 4934888.5
+549.12323 105227.5
+549.28925 1491849.6
+550.29541 241827.2
+552.31750 226215.3
+558.32898 894508.4
+559.33331 189207.9
+566.29443 245176.8
+569.34363 421743.8
+570.35321 132310.3
+579.32806 266175.2
+580.30829 250866.5
+581.32135 106298.0
+586.30188 675119.5
+587.30133 312817.5
+588.35181 120960.2
+597.33881 5438866.0
+598.34198 1830466.9
+599.34332 244967.2
+600.31702 191223.7
+603.32727 260984.8
+604.30347 161045.7
+605.30896 141859.9
+613.31146 431794.7
+614.31976 154442.3
+615.34979 1347825.4
+616.35089 758551.3
+617.35187 290021.3
+620.34082 324788.4
+621.33954 573906.7
+622.34021 88335.5
+631.32288 5884647.0
+632.32605 1911350.1
+633.33081 307775.2
+645.34143 191737.8
+649.33350 3092598.5
+650.33710 721812.6
+661.36658 146990.4
+663.35327 205832.8
+664.35223 128683.8
+665.37213 85609.2
+670.63422 88584.4
+671.38916 534724.1
+672.39465 240226.3
+676.64691 160822.3
+689.40558 166280.3
+690.39935 238575.0
+698.40387 185057.2
+699.38617 1648431.0
+700.38696 1166937.5
+701.38715 335178.3
+716.41235 1778230.8
+717.39362 533999.8
+718.39117 563835.3
+719.39471 178444.8
+721.39166 395598.8
+722.39380 193274.3
+726.39728 2439483.0
+727.40051 984428.8
+728.40369 224013.2
+734.42291 2716983.5
+735.42603 1072212.8
+736.43073 211993.3
+739.40240 2450792.8
+740.40436 945977.6
+741.41016 145516.3
+742.27136 173761.1
+743.35657 127467.2
+744.40710 30669296.0
+745.41028 12117664.0
+746.19873 89349.9
+746.41345 2148640.5
+746.55737 156837.1
+760.39685 284221.1
+761.40515 154911.9
+762.41724 11977487.0
+763.42047 4324437.5
+764.42273 579911.9
+778.41394 119326.5
+781.92163 112394.2
+795.37689 76811.0
+795.82245 128047.3
+809.28589 80650.0
+862.45374 152737.5
+880.46777 115750.7
+897.48492 338960.6
+898.48376 113170.1
+899.53571 73540.0
+907.47076 2389573.0
+908.47351 1334755.3
+909.47247 234802.3
+925.48096 4317414.5
+926.48334 1713302.3
+927.48334 210362.0
+1008.40149 97502.9
+1057.27344 116360.7
+1198.25110 423786.7
+1224.19006 77785.2
+1502.75366 95099.3
+1572.95251 79103.8
+1753.67517 100204.1
+1759.65771 85948.3
+1876.21326 102319.4
+1878.95459 110820.2
+1879.21790 165600.4
+1879.56531 2555709.3
+1879.86804 135298.1
+1883.88062 88142.0
+1907.14307 909357.9
+1921.69763 88519.5
+1930.51184 146138.1
+S	2882	2882	942.3965746
+Z	3	2823.915
+Z	2	1882.945
+251.54240 65198.9
+314.33374 61041.7
+350.29364 86475.1
+359.97971 63677.6
+380.27527 55511.4
+393.29953 73285.4
+409.49423 54143.3
+453.68652 62158.6
+485.60757 101123.5
+496.66898 54504.7
+499.28076 59054.0
+520.28821 75516.2
+530.86993 63550.9
+532.54150 205275.5
+548.28595 116145.7
+580.60474 62771.5
+597.33966 206185.6
+598.87903 62521.6
+631.32391 207687.3
+676.65051 80708.5
+699.38599 71905.5
+700.04315 68130.0
+726.39862 112134.5
+734.42944 112531.0
+744.40717 954864.7
+762.41577 253378.6
+795.10706 67030.5
+795.81897 107513.2
+885.95050 74020.8
+907.46667 111079.5
+925.48187 118971.3
+928.74042 66691.8
+983.36493 74256.6
+1001.71356 60418.0
+1099.46411 80794.2
+1112.02063 63295.1
+1198.21326 330691.8
+1207.25232 65808.6
+1263.04431 66968.2
+1311.15857 75761.3
+1314.55957 73022.4
+1525.28320 78511.7
+1776.99426 76113.0
+1877.20056 90022.2
+1878.56042 76200.8
+1878.85632 100114.3
+1879.27454 112779.8
+1879.55957 1988656.5
+1880.20837 120173.6
+1906.71753 88701.0
+1907.12256 730884.4
+S	2883	2883	940.8625746
+Z	2	1879.877
+Z	3	2819.313
+247.31721 917.3
+255.27176 1094.0
+257.54724 884.2
+282.00659 995.5
+292.98050 932.2
+316.12830 1092.3
+427.50986 1283.7
+431.68491 955.7
+443.77734 1044.4
+501.93115 1141.4
+532.54425 3374.4
+572.15875 1002.5
+621.24792 939.6
+625.70093 987.7
+676.66113 1668.4
+731.07312 1055.2
+748.31775 1257.0
+795.81738 1512.4
+1198.21423 5151.1
+1363.29407 1062.9
+1642.24695 1044.9
+1694.56702 1196.3
+1705.81812 984.3
+1776.85364 1196.6
+1871.15466 1140.2
+1878.17957 1618.9
+1878.56873 1906.7
+1879.10168 2040.1
+1879.33984 7008.2
+1879.59937 29938.1
+1880.10950 2817.1
+1880.38867 931.1
+1880.76660 1222.1
+1881.11243 2380.2
+1905.22998 1352.1
+1906.81421 1348.7
+1907.06433 10842.0
+1907.51746 1576.4
+1930.41980 1540.6
+1960.54163 1100.7
+S	2885	2885	1879.94899127
+Z	3	5636.572
+Z	2	3758.05
+532.60620 1572.0
+549.13196 944.6
+551.60950 672.2
+630.38617 731.8
+676.64819 751.9
+731.09393 832.0
+1028.96570 626.7
+1064.82056 723.0
+1130.81726 807.7
+1140.44995 616.2
+1188.27161 911.5
+1198.36108 3182.2
+1241.99109 638.3
+1488.80054 729.2
+1525.34973 1011.9
+1720.39807 756.4
+1776.90063 783.5
+1878.07458 729.7
+1878.61353 1191.5
+1879.54541 17817.1
+1879.83374 4902.4
+1880.08130 1114.4
+1880.50806 913.0
+1907.12207 7345.0
+1930.53162 1011.5
+S	2886	2886	1907.50940793
+Z	2	3813.171
+Z	3	5719.253
+532.57941 1643.9
+540.60284 621.3
+577.39337 671.1
+630.41840 920.2
+676.62610 985.4
+676.65784 868.0
+684.76746 593.5
+755.10321 635.8
+792.86371 687.9
+795.82935 1306.0
+809.03082 772.7
+849.25922 704.6
+961.06061 608.8
+980.44482 727.1
+1003.50946 749.2
+1019.64453 727.6
+1032.46094 623.8
+1061.41370 681.4
+1198.29517 3206.2
+1297.59070 606.6
+1356.20520 652.9
+1635.22742 765.1
+1644.54089 950.5
+1854.39514 841.3
+1877.56226 1058.4
+1878.04553 628.5
+1878.99622 2539.3
+1879.23547 978.5
+1879.59656 18018.8
+1880.41150 1843.7
+1881.45911 727.7
+1882.65027 679.4
+1907.05334 7051.9
+1918.91785 927.8
+1930.66418 997.7
+S	2887	2887	940.9358246
+Z	2	1879.856
+257.50479 682.6
+284.44650 621.7
+284.66223 578.9
+289.13998 546.9
+327.59222 652.7
+342.26700 791.3
+350.27328 617.6
+366.23279 576.8
+368.04813 568.6
+370.14221 763.0
+409.56732 660.2
+427.53247 753.2
+436.59949 653.3
+482.64703 938.2
+513.76324 840.8
+532.60541 1913.1
+572.20044 568.0
+652.42242 490.3
+652.44495 494.7
+676.67267 837.0
+722.25940 703.0
+727.56750 632.6
+731.09320 719.4
+765.67175 645.8
+795.83350 694.9
+883.54041 868.0
+948.90356 648.4
+1057.30054 1086.7
+1111.17603 688.9
+1198.35522 3000.9
+1610.26392 666.4
+1734.58728 926.7
+1809.79907 665.9
+1830.58679 666.8
+1838.86292 709.0
+1878.44629 627.0
+1879.01904 1824.7
+1879.60938 19131.1
+1880.11206 1448.0
+1880.21362 1539.0
+1882.18127 1066.3
+1907.06726 6861.8
+1907.36646 773.6
+1918.94287 1104.0
+S	2889	2889	1887.40640793
+Z	3	5658.944
+Z	2	3772.965
+532.58026 1839.7
+549.14618 1097.4
+631.32501 1013.5
+676.65015 1178.4
+742.37787 582.2
+744.40656 4525.7
+745.41382 738.4
+762.41559 4312.9
+795.81848 1108.2
+925.47992 1206.9
+943.49078 70277.9
+944.49402 18420.3
+1049.36072 760.2
+1057.26746 736.1
+1188.28223 777.8
+1198.29431 3035.7
+1277.48010 586.0
+1638.09558 669.4
+1870.40991 950.1
+1870.76807 687.1
+1879.27258 3371.1
+1879.56494 19794.3
+1880.14417 945.1
+1880.40027 625.7
+1906.97632 6727.4
+1918.91711 788.7
+1930.55603 1397.5
+S	2890	2890	1886.40199127
+Z	2	3770.956
+Z	3	5655.931
+532.59790 2154.3
+588.12848 517.3
+612.78754 669.7
+649.35950 645.7
+676.64874 1013.4
+731.11102 851.4
+744.40668 1721.5
+762.41937 911.7
+792.78748 672.2
+795.80682 1159.2
+943.49005 21916.9
+1029.55786 635.6
+1057.26575 850.2
+1198.33545 2976.9
+1525.37988 921.5
+1593.74622 632.4
+1776.90369 660.6
+1870.21338 811.8
+1879.02026 952.3
+1879.56018 20052.4
+1880.16492 1043.7
+1881.96130 727.5
+1883.64478 788.6
+1906.89709 6530.1
+1907.67212 675.4
+1919.67529 708.6
+1930.57751 934.1
+S	2891	2891	1888.40840793
+Z	2	3774.969
+Z	3	5661.95
+532.58142 3484.6
+549.18402 1580.9
+597.33813 1568.6
+621.94543 1323.0
+630.42950 1305.7
+631.32086 3073.4
+649.33160 2448.2
+676.64203 1532.1
+726.39612 1587.3
+739.39587 1499.6
+744.40637 18972.2
+745.40973 8536.4
+746.41583 1564.1
+762.41681 16148.2
+763.41974 7469.8
+795.83228 2264.5
+871.41339 1325.4
+925.47656 3361.0
+926.48541 2291.1
+940.44104 2215.6
+941.96887 1417.0
+943.49036 273536.1
+944.49310 175695.5
+945.49548 30266.0
+946.01880 2023.1
+946.56610 1561.1
+1126.87476 1268.2
+1198.29614 5713.3
+1205.07837 1248.3
+1316.29456 1299.5
+1663.88623 1179.1
+1750.27686 1159.0
+1877.76990 1061.6
+1879.15088 3614.7
+1879.56079 35583.3
+1879.95947 3870.1
+1881.96130 1228.1
+1894.66357 1315.1
+1906.92822 13063.9
+1918.97815 1790.5
+S	2893	2893	1888.0058246
+Z	1	1886.998
+507.64328 789.6
+532.58612 1391.5
+567.34241 686.7
+578.39355 685.6
+597.33691 1397.0
+598.33386 813.7
+631.32294 1735.2
+632.32513 1695.5
+649.33466 1478.9
+650.33807 982.7
+676.64252 1069.4
+699.38452 954.9
+700.38770 844.6
+716.41241 818.4
+722.23145 723.5
+726.39746 1191.3
+727.40070 765.1
+734.42242 1325.3
+744.30212 896.4
+744.40613 14524.8
+745.41003 9837.4
+746.40967 1902.4
+762.41626 12506.2
+763.42035 7500.8
+764.42377 1122.5
+786.60443 544.9
+907.45801 944.8
+925.47656 2439.8
+926.48254 1717.8
+940.43188 1088.6
+941.97272 948.8
+942.98914 1043.5
+943.49115 211798.8
+944.49335 155928.7
+945.00641 1189.9
+945.49628 38216.5
+946.02057 976.7
+946.50806 3330.3
+964.87476 601.2
+1039.83484 654.5
+1057.25415 749.1
+1198.30310 2933.9
+1237.52869 643.9
+1307.07361 766.0
+1489.80176 740.4
+1741.39075 690.8
+1776.94043 781.7
+1870.88367 837.4
+1878.98535 1133.3
+1879.53992 19931.9
+1880.39795 732.9
+1907.02063 6764.7
+1930.59412 1285.1
+S	2894	2894	1887.0018246
+Z	1	1885.994
+531.79065 525.5
+532.56226 1725.7
+553.75012 750.2
+609.83344 771.8
+635.71722 667.2
+676.63800 1238.3
+709.24756 578.6
+744.33478 930.3
+762.34082 722.4
+795.81342 958.3
+894.42383 734.0
+943.34290 740.4
+943.49048 7170.2
+1033.59485 580.7
+1198.26807 3096.5
+1525.46411 997.7
+1870.20874 682.9
+1879.11780 1859.0
+1879.53381 19600.6
+1879.94031 1579.3
+1881.23535 703.3
+1907.06555 7239.9
+S	2895	2895	1889.0088246
+Z	1	1888.001
+532.55975 5299.7
+597.33435 2200.0
+611.79681 1447.1
+618.18652 2050.3
+626.52399 1682.2
+629.55756 1496.7
+630.40637 2356.4
+631.31622 5279.8
+637.03082 1666.0
+744.30505 3098.0
+744.40643 22840.8
+745.40961 8159.4
+762.41705 16647.6
+763.42407 7149.4
+795.81232 2416.3
+858.06201 1846.7
+925.47614 3686.2
+926.48059 1912.2
+943.49078 322122.0
+944.49310 158557.6
+945.49487 20892.4
+1030.58142 1850.6
+1198.25061 9270.4
+1330.47083 1725.3
+1525.41992 3007.8
+1711.12207 1817.0
+1872.76318 2212.9
+1876.73059 2255.7
+1878.85669 2496.5
+1879.23206 3055.4
+1879.54370 54055.2
+1879.91150 2127.9
+1880.37109 2030.5
+1881.28906 1686.9
+1907.02649 19217.6
+1930.60535 3105.4
+S	2897	2897	1879.97840793
+Z	3	5636.66
+Z	2	3758.109
+532.55731 1414.4
+536.69189 677.8
+549.14520 763.9
+610.96814 713.0
+630.37952 605.6
+665.59167 605.8
+744.33801 697.5
+762.33240 607.7
+784.02155 569.7
+857.92773 799.0
+944.38989 725.0
+1019.62933 611.4
+1187.87439 613.1
+1198.24622 3210.4
+1366.38257 630.6
+1544.71411 624.5
+1787.64343 626.2
+1870.19531 842.0
+1878.83948 1054.0
+1879.26709 4954.2
+1879.60327 18834.3
+1879.99048 4702.4
+1880.43799 838.9
+1882.03394 1058.2
+1907.07605 7757.8
+1918.86035 986.2
+1930.52893 967.3
+S	2898	2898	945.429407933
+Z	2	1889.011
+Z	3	2833.013
+261.84204 16048.5
+271.10892 43077.5
+285.15961 22155.7
+295.16464 70720.9
+299.17551 80621.5
+302.15045 25468.3
+307.14417 77871.6
+315.50146 18715.3
+316.20193 43208.0
+321.19629 82865.4
+327.16998 36841.8
+327.25061 16975.1
+328.20175 55567.6
+333.15695 23159.7
+337.18820 49160.2
+342.28314 20104.8
+344.19696 336742.4
+345.20004 51634.5
+349.19055 41804.4
+352.16403 15774.3
+356.19702 113721.6
+360.15848 18331.3
+362.20779 20349.6
+368.16086 42697.4
+370.36353 15058.2
+373.22311 524794.9
+374.22772 71497.1
+376.20200 17881.5
+377.87405 14053.7
+378.18350 27666.9
+379.55994 14867.5
+383.20590 31598.6
+390.18149 24814.6
+393.24799 34230.8
+398.24274 41879.7
+401.21811 606576.8
+402.22198 137040.5
+406.21347 76222.0
+416.25662 20542.7
+418.24445 32372.9
+419.23209 26133.8
+427.23370 206156.3
+428.23712 44151.6
+433.24747 22201.2
+439.23401 179030.7
+440.23724 45711.9
+441.28607 82699.8
+442.28653 21327.5
+445.24393 106387.7
+446.24512 64681.0
+447.24515 20168.1
+449.21747 16508.5
+453.21347 19236.2
+455.26489 47909.5
+456.26282 18813.9
+462.26907 32162.9
+462.59027 13401.0
+464.27014 21914.9
+466.24304 29442.8
+467.22879 225779.4
+468.23233 52639.3
+469.28058 177775.9
+470.28430 63731.3
+471.26535 19024.1
+474.26517 13484.3
+475.26999 241072.8
+476.27466 75477.2
+477.21524 30571.3
+477.27563 15858.9
+479.23035 40487.2
+481.28046 42715.9
+484.25504 342768.8
+485.25769 94468.8
+486.30634 45927.6
+487.23395 29045.9
+491.26584 55339.2
+498.27151 56824.8
+499.27600 18122.2
+502.26035 57043.7
+503.26465 494025.1
+504.26852 169812.2
+505.26364 23582.4
+507.25955 48088.0
+509.27603 51340.9
+512.32056 23485.2
+513.32233 16793.8
+514.30157 177497.1
+515.30469 52678.5
+520.29114 597520.5
+521.29590 173647.5
+522.30157 22627.7
+525.26978 252373.2
+526.27411 76212.8
+527.27997 22066.7
+530.27515 272601.9
+530.33392 59995.6
+531.27838 73560.1
+531.33716 25707.2
+532.55542 39516.7
+538.30383 28644.1
+540.31726 351897.1
+541.32025 112432.4
+543.28070 432940.5
+544.28406 86690.3
+545.31464 20020.1
+548.28607 1612266.5
+549.28943 436086.0
+550.29346 69076.7
+552.31738 110914.4
+553.32092 58184.7
+558.33044 289007.3
+559.33105 80636.0
+563.32428 51592.5
+564.27924 31452.2
+566.29547 56934.0
+567.29462 20158.9
+569.34491 160711.3
+570.35284 48655.4
+571.32581 20022.6
+576.31281 33442.5
+579.32874 130638.9
+580.30579 67507.9
+581.31097 26106.0
+582.53284 14124.5
+586.30170 263583.7
+587.30115 128471.2
+587.35657 40773.2
+588.30255 19631.6
+588.35565 52935.0
+597.33899 1991166.9
+598.34235 666952.2
+599.34601 101478.1
+600.31885 37879.1
+602.33508 48746.3
+603.32855 118124.2
+604.30579 69341.8
+605.30969 35870.3
+613.31323 220999.4
+614.32227 64276.4
+615.34912 421286.9
+616.35052 308387.6
+617.35223 77025.8
+620.34235 112709.1
+621.34009 204916.3
+622.34277 36539.5
+631.32318 2030021.8
+632.32599 719576.0
+633.32977 144487.0
+643.35852 16932.0
+645.33966 72918.4
+646.33673 26160.0
+649.33356 933122.0
+650.33643 240221.7
+651.33478 31701.4
+661.37085 71596.6
+662.37274 21379.8
+663.34851 77444.7
+664.35040 19786.9
+671.39172 195421.4
+672.39288 65902.0
+673.36072 28026.1
+675.34650 24348.1
+676.66394 20554.5
+689.39838 26724.1
+690.40308 69314.3
+691.40179 22032.5
+698.40247 30144.2
+699.38593 682061.7
+700.38684 447805.6
+701.38892 100153.0
+705.39233 22333.4
+711.35193 27963.0
+716.41357 624227.3
+717.39252 236546.5
+718.39075 233766.6
+719.39734 56469.9
+721.39221 277840.8
+722.39557 131404.2
+726.39709 807267.2
+727.40210 377588.2
+728.40430 66456.5
+729.40686 18925.8
+731.15167 15654.2
+734.42303 954152.3
+735.42725 328724.8
+736.42969 52664.3
+739.40240 768011.9
+740.40613 286885.6
+741.41327 50938.3
+742.27063 58082.3
+742.64362 33374.7
+743.35071 42677.3
+743.69360 25870.2
+744.26282 21558.0
+744.30975 34332.2
+744.40735 10212321.0
+745.41034 3859517.0
+746.17078 20031.6
+746.41309 777019.6
+746.55237 79693.9
+747.41333 57082.4
+747.55414 29148.0
+749.36426 27468.4
+750.37463 18267.8
+760.20416 20815.5
+760.40222 122538.6
+761.40436 44302.1
+762.31714 23042.8
+762.41748 3726778.8
+763.42090 1162474.8
+764.42310 199259.5
+764.63293 24709.6
+765.43329 24013.3
+778.41272 62601.1
+779.40906 28989.3
+780.42719 40972.4
+795.82709 24679.8
+796.42456 25149.5
+858.05841 23676.7
+862.44965 70533.3
+863.45123 52102.3
+864.44312 21379.4
+879.47528 35626.6
+880.45923 36519.9
+881.45618 45495.3
+889.45691 28631.0
+890.46143 21391.4
+897.48615 97880.2
+898.49084 63792.9
+907.47083 1013903.1
+908.47369 449112.2
+909.47577 105061.6
+925.48065 179667.7
+943.39386 18302.5
+1070.89111 21312.9
+1198.23767 76877.5
+1488.33240 16405.3
+1489.72729 19732.9
+1525.49561 16942.3
+1879.11804 45681.8
+1879.29285 69798.7
+1879.56458 486300.2
+1880.02954 21112.5
+1890.21606 15627.4
+1907.02356 195640.0
+S	2899	2899	942.402407933
+Z	2	1882.957
+Z	3	2823.932
+255.27777 61796.4
+280.17828 63496.3
+344.19736 152923.9
+373.22266 164875.7
+401.21753 209638.5
+402.85861 55619.7
+427.54080 59628.7
+439.23132 86438.5
+467.23480 84008.7
+469.27859 95098.0
+475.26819 107757.7
+478.76068 56528.3
+484.25516 95616.6
+503.26465 143017.9
+515.64502 61020.5
+520.28931 176447.5
+525.26715 66200.1
+530.27850 103919.7
+532.56866 170334.5
+540.31757 128955.8
+548.28552 618484.5
+549.16010 61090.6
+558.32904 108182.8
+564.41577 72079.6
+586.30133 76937.9
+595.18030 65144.3
+596.71552 63827.4
+597.33875 733093.7
+613.30841 83227.0
+615.34753 146433.6
+620.33850 71104.6
+630.40387 60526.4
+631.32233 689411.6
+644.05066 57692.0
+649.33435 275992.0
+664.95679 68558.4
+676.64508 84758.5
+683.57397 73149.6
+699.38617 313491.2
+716.41614 254860.4
+717.39771 156773.2
+726.39557 366294.4
+734.42169 405372.1
+739.40021 273235.6
+744.32050 62093.7
+744.40613 3741522.8
+745.31525 93078.1
+762.41681 1070952.5
+907.46826 308173.9
+925.48016 526710.8
+936.03760 60263.0
+1045.82019 60040.8
+1057.25806 83520.4
+1110.99756 61067.3
+1116.11353 58094.6
+1198.27124 317879.4
+1318.01245 61518.0
+1662.34644 58068.4
+1870.23645 95553.9
+1877.34937 90492.4
+1878.44226 78363.4
+1878.92371 168726.7
+1879.21558 150762.9
+1879.54041 1860847.4
+1879.82385 125627.9
+1880.15527 229959.3
+1880.63794 64124.9
+1880.81482 55554.3
+1907.05969 723580.3
+1930.62537 110638.0
+S	2901	2901	1879.94499127
+Z	2	3758.042
+Z	3	5636.56
+512.22546 575.0
+532.55402 1808.5
+606.85645 579.5
+610.64966 542.5
+613.86737 709.2
+614.59613 603.1
+621.33838 718.8
+671.50781 554.5
+676.41333 533.2
+676.66284 844.2
+679.08899 573.6
+680.17352 531.7
+683.90497 568.0
+691.04535 570.6
+727.31256 832.2
+782.52344 740.0
+790.17957 702.7
+795.83081 1033.8
+910.88934 677.8
+1001.17389 734.3
+1027.00793 610.3
+1143.54492 620.0
+1198.24524 3350.8
+1284.97437 616.6
+1311.96655 873.1
+1490.05957 733.4
+1543.15857 703.7
+1870.13013 710.5
+1878.57471 704.2
+1878.98523 960.8
+1879.13977 815.4
+1879.61292 19579.5
+1880.19141 1175.5
+1880.65442 986.9
+1904.16577 857.3
+1907.06238 7600.7
+1930.67444 995.1
+S	2902	2902	940.869407933
+Z	2	1879.891
+Z	3	2819.333
+248.97015 624.4
+255.31145 720.0
+259.87408 530.7
+261.78943 572.0
+276.89252 572.7
+282.31458 551.7
+344.36346 617.1
+359.96744 565.1
+367.05777 673.7
+384.12045 592.9
+417.32520 590.7
+532.56738 2101.4
+549.18591 668.2
+550.53046 601.1
+575.40863 653.0
+579.26556 624.5
+617.98157 697.0
+640.48993 596.6
+676.66010 893.0
+676.71326 720.9
+684.11456 648.2
+808.00928 668.5
+814.98523 605.1
+956.41821 552.8
+1045.03955 714.8
+1057.26636 843.4
+1109.41089 609.1
+1134.21277 618.9
+1178.03333 621.8
+1198.26648 3456.6
+1525.51257 858.5
+1602.78064 678.7
+1641.08057 583.4
+1667.21594 623.4
+1867.41541 713.4
+1870.14685 805.8
+1877.19202 598.1
+1877.86560 929.5
+1878.47180 1105.4
+1878.86646 1276.3
+1879.59314 18869.1
+1879.84644 4126.5
+1880.31458 1299.6
+1881.31409 1263.0
+1897.58130 671.0
+1907.11707 7279.2
+1907.47717 787.9
+1930.72888 843.9
+S	2903	2903	945.435407933
+Z	2	1889.023
+Z	3	2833.031
+252.46413 12988.1
+257.12997 21114.7
+271.10760 93961.4
+271.18085 26228.1
+273.15936 27801.7
+274.66809 12213.2
+279.14987 27109.8
+285.16003 48800.9
+289.19177 24297.7
+295.16525 76163.5
+298.18948 12897.2
+299.17590 143469.9
+300.17981 21272.3
+302.14966 31701.5
+302.56934 13427.6
+305.16852 15348.8
+307.14395 90187.5
+308.14734 23254.1
+309.19299 29452.4
+316.20184 79894.4
+317.18689 20025.6
+321.19662 106870.1
+322.20026 26966.6
+323.17603 15099.7
+327.17059 57929.7
+328.20255 101723.7
+329.20523 22558.6
+329.65302 10847.4
+330.14420 14189.2
+330.18417 12083.1
+333.15982 35344.9
+337.18829 39342.3
+341.89142 10866.3
+342.31537 10948.4
+344.19717 362222.8
+345.20068 69346.5
+349.19055 29714.5
+350.29266 15200.0
+356.19708 134969.8
+357.20215 29500.2
+362.20831 32926.4
+365.25732 19562.2
+368.16113 56187.0
+369.16245 17365.3
+373.22351 693156.3
+374.22723 133465.1
+376.20294 14623.3
+378.18176 33774.8
+382.20630 11804.9
+383.20859 51472.0
+384.18958 11593.9
+384.21048 14629.6
+385.18756 13565.4
+390.18057 49010.1
+391.18594 15489.9
+393.25064 55614.4
+396.19565 11710.9
+398.24466 92253.6
+401.21851 725030.3
+402.22205 164578.0
+403.22424 12967.7
+404.19571 22097.0
+405.24881 40815.3
+406.21249 71168.1
+407.21814 20793.9
+408.19467 12529.4
+411.20193 27807.8
+411.24042 27854.9
+416.25613 32380.3
+418.24689 52719.7
+419.23123 26340.5
+421.22025 14462.6
+423.85791 11796.5
+427.23425 305963.9
+428.23743 74442.4
+432.11111 11993.8
+432.22766 26219.0
+432.26178 12966.5
+433.24689 37840.6
+435.20230 29033.0
+439.23434 277222.7
+440.23792 74191.4
+441.28650 160197.0
+442.28903 61121.2
+445.24490 140201.4
+446.24545 69910.9
+447.24857 22762.8
+450.27103 25630.5
+451.27097 23294.6
+453.21381 16662.4
+454.25580 17623.7
+455.26508 83394.7
+456.26483 36522.1
+457.24673 23230.2
+461.21921 25460.6
+462.27252 18188.7
+463.27615 26053.8
+464.25275 43894.2
+466.24524 46664.4
+467.22922 264090.1
+468.23282 57426.4
+469.28107 298734.7
+470.28476 98845.7
+471.26413 26062.3
+473.27191 12183.8
+475.27036 352326.4
+476.27359 125370.7
+477.21384 39857.1
+477.27350 20930.8
+479.22922 45364.3
+479.26416 28609.5
+481.24362 32059.8
+481.28171 48623.9
+482.28616 15951.9
+484.25531 395016.8
+485.25864 105275.0
+486.25650 17322.3
+486.30710 68315.3
+487.23401 36409.0
+488.23434 14983.6
+489.24908 20513.0
+491.26520 81016.3
+492.26846 22721.2
+496.29123 25095.5
+497.28119 10615.1
+497.29263 11181.2
+498.27039 87293.5
+499.27512 29547.3
+502.26254 91360.7
+503.26514 670325.0
+504.26880 217307.4
+505.26907 34319.1
+505.48053 12198.8
+507.26083 68749.3
+508.26407 17726.1
+509.27554 59607.7
+510.27847 11755.8
+512.32239 62798.7
+513.32825 21059.4
+514.30219 208740.0
+515.30634 53253.0
+519.25934 20881.1
+520.29150 734413.6
+521.29633 209595.4
+522.29858 31136.8
+525.27069 296563.8
+526.27380 101406.9
+527.27594 17187.3
+530.27588 308791.9
+530.33386 81028.8
+531.28070 99911.5
+531.34448 11868.1
+532.57111 36800.0
+538.30054 23568.9
+540.31769 441358.6
+541.32147 125010.0
+542.32635 15902.1
+543.28101 435282.5
+544.28448 83944.4
+545.30939 23411.7
+548.28656 1740388.3
+549.22351 14857.7
+549.28961 516776.3
+549.65814 11484.2
+550.29169 103340.1
+551.28040 12682.5
+552.31744 176030.7
+553.31879 68572.5
+554.31818 13446.6
+558.33063 310750.7
+559.33392 109862.3
+560.28064 16543.6
+562.29932 13792.7
+563.32361 49905.6
+564.28168 59718.4
+565.29022 26739.1
+566.29846 78288.0
+567.30591 27652.0
+569.34467 230020.3
+570.35120 69757.7
+571.32434 34033.6
+572.74438 12763.3
+576.31622 26286.6
+577.31573 24543.4
+579.32910 181395.6
+580.30444 85364.2
+580.34418 46153.9
+581.31366 38799.0
+585.31665 29526.3
+586.30200 394001.2
+587.30359 194667.6
+587.35565 44782.6
+588.30322 38508.4
+588.35565 77412.8
+589.35797 31036.7
+597.33942 2289663.8
+598.09619 16405.2
+598.34265 816115.2
+599.34583 156637.9
+600.31866 62537.9
+601.32227 30418.6
+602.33447 73501.8
+603.32971 161920.5
+604.30640 75048.5
+604.35065 26898.8
+605.30872 50729.8
+606.32678 12198.1
+613.31299 306111.2
+613.60736 13687.1
+614.27350 10820.4
+614.31909 85921.1
+615.34985 463095.1
+616.35114 328864.2
+617.35272 101391.9
+618.35217 32855.0
+619.32642 18081.1
+620.34308 143689.0
+621.34113 185130.3
+622.34326 72318.4
+630.48846 15544.5
+631.32385 2391670.3
+632.32672 862841.3
+633.33032 187554.5
+634.33453 25345.6
+641.30829 47199.1
+642.31488 19909.6
+643.36060 23592.5
+644.71594 11376.8
+645.33948 91059.6
+646.34595 38952.4
+647.35370 42356.4
+649.33429 1004953.1
+650.33759 276066.8
+651.34003 53641.7
+652.33710 14273.1
+654.33167 15570.6
+661.37067 84688.3
+662.37299 36632.5
+663.35065 65986.2
+664.35571 21079.9
+665.92944 11799.1
+666.33124 21892.0
+671.39142 247795.8
+672.39429 97661.6
+673.35962 30330.8
+675.35022 25364.9
+677.36792 33613.2
+681.37994 14971.5
+687.38367 25798.6
+689.40247 80329.9
+690.40021 88925.5
+691.40118 22419.2
+698.40399 63423.0
+699.38635 873943.0
+700.38757 551070.1
+701.38885 165722.2
+702.38922 31992.4
+703.38611 33926.0
+705.39990 19516.2
+710.37476 15515.8
+711.35077 37639.9
+712.35614 16324.4
+716.41364 803931.6
+717.40179 248540.3
+718.39142 246900.2
+718.45148 24848.5
+719.39636 77336.9
+720.39258 14135.0
+721.39270 384819.1
+722.39606 160737.1
+723.40143 30216.4
+726.39758 1089209.3
+727.40161 475288.6
+728.40314 109297.5
+729.40448 16527.6
+732.39398 12619.0
+734.42365 1012519.8
+735.42761 377096.0
+736.43036 95546.2
+737.25659 13113.9
+739.40277 897449.4
+740.40680 320168.6
+741.41064 65948.0
+742.26080 52507.9
+742.63855 16542.4
+743.35767 59892.3
+744.23761 13577.4
+744.26044 29264.3
+744.30920 44819.0
+744.40778 10715071.0
+744.51160 31872.1
+745.10760 17879.6
+745.41071 4316359.5
+746.18634 18190.0
+746.41345 908284.9
+746.48383 23599.1
+746.56378 51571.0
+747.26233 11979.9
+747.41614 128587.4
+747.56934 23966.2
+749.36615 70490.2
+750.37018 31478.8
+760.40149 148167.1
+761.32764 16902.6
+761.40576 70763.4
+762.41809 3936154.5
+763.42108 1396871.1
+764.42401 273944.8
+765.42700 34243.1
+778.41290 67673.4
+779.41095 36650.9
+780.42584 53223.7
+781.42462 19183.7
+794.38971 22629.3
+795.39508 18685.5
+795.83618 19807.8
+796.42493 36997.4
+797.42505 25707.7
+812.40094 21488.0
+862.45111 72828.4
+863.44983 48344.5
+864.45264 22689.8
+879.47565 49004.3
+880.46417 48884.4
+881.45593 59754.2
+882.45441 15643.4
+889.46582 48466.0
+890.46088 35329.7
+891.46582 17131.2
+897.48694 108023.9
+898.49335 53641.9
+907.47144 1090089.8
+908.47461 498917.0
+909.47711 120998.6
+910.48315 23632.6
+917.20306 18725.8
+1005.86572 12777.6
+1198.28027 63097.2
+1245.41614 13761.5
+1247.28967 13181.5
+1290.41711 14122.5
+1394.77954 12750.0
+1434.96326 12725.2
+1860.93958 12613.1
+1870.27502 15675.0
+1876.19763 20790.1
+1878.79114 13943.9
+1879.15686 19341.4
+1879.58362 381944.7
+1880.05225 18070.7
+1880.41687 15484.6
+1881.06519 15795.7
+1907.11536 143949.1
+1986.98083 11268.8
+S	2905	2905	1879.9938246
+Z	3	5636.706
+Z	2	3758.14
+532.55890 1950.8
+551.83081 602.6
+588.03320 563.5
+597.02704 547.0
+668.61383 582.5
+676.65723 1291.9
+752.87512 644.1
+778.75836 659.2
+795.82953 1004.6
+800.30591 640.5
+860.07642 660.9
+866.21069 593.6
+1120.35242 608.8
+1188.22229 908.4
+1198.25037 3161.3
+1525.44360 766.3
+1537.82874 744.7
+1878.47876 772.7
+1879.22986 1959.1
+1879.57910 19285.7
+1879.96472 1405.7
+1880.54529 634.1
+1907.16077 6819.7
+1930.98193 599.6
+S	2906	2906	1887.4818246
+Z	2	3772.948
+524.00800 523.2
+532.58044 1735.5
+536.30182 584.1
+565.64874 596.6
+630.43195 826.2
+676.66394 1435.4
+708.29816 632.8
+744.40594 4827.6
+762.41632 2556.9
+901.96393 641.8
+925.46161 661.0
+935.01062 633.4
+943.49005 65616.1
+944.49316 9029.3
+947.85071 555.8
+980.15454 718.4
+1057.29272 793.8
+1184.84436 709.0
+1198.29932 3365.4
+1859.98450 821.8
+1870.15540 811.1
+1876.20789 864.2
+1878.04370 1195.4
+1878.58630 712.6
+1878.87964 1153.6
+1879.29602 1686.4
+1879.59961 19642.9
+1879.99463 1336.2
+1880.30334 1472.7
+1880.59656 1010.1
+1907.08215 7278.8
+1930.66553 1035.1
+S	2907	2907	1886.4803246
+Z	2	3770.945
+532.56561 1704.2
+663.32312 581.8
+676.63086 865.5
+755.58716 685.3
+786.25366 583.3
+795.83002 1047.6
+876.90240 542.9
+948.79724 608.4
+952.07159 606.8
+1091.86975 568.4
+1102.83154 687.5
+1176.93689 714.1
+1188.31409 722.7
+1198.27258 3641.6
+1222.30176 561.6
+1525.40735 709.1
+1729.96484 575.7
+1869.98376 644.4
+1879.53967 20066.5
+1879.82202 2331.6
+1881.12341 742.7
+1903.97876 623.3
+1906.50598 670.7
+1907.08411 7355.0
+1908.61768 670.1
+1930.57336 1334.9
+S	2909	2909	721.2828246
+Z	3	2160.573
+Z	2	1440.718
+185.07921 1164.8
+186.78998 1303.3
+187.65659 1309.1
+188.19609 1152.9
+188.23904 1668.4
+188.25166 2305.4
+188.26851 3959.2
+188.28751 3702.1
+188.29782 4020.8
+188.30928 3531.5
+188.34070 1101.7
+188.35223 1120.6
+188.37170 1223.2
+191.87131 1140.0
+198.95534 1462.3
+199.25539 1643.0
+199.26648 1443.1
+199.31662 1259.5
+199.33038 1899.0
+199.33873 4237.2
+199.35220 3866.9
+199.36343 3961.9
+199.38109 1782.8
+199.39836 1823.5
+201.83405 1357.9
+212.05664 1191.1
+217.13701 18725.9
+218.14090 2009.5
+233.16492 2731.6
+243.74445 1161.9
+245.13205 13552.0
+246.13383 1856.8
+249.15988 30747.1
+250.16327 5046.1
+251.15047 8539.8
+267.11624 9122.5
+269.16101 23216.8
+270.16400 2592.6
+277.10394 1415.9
+277.15491 6588.8
+281.50555 1344.5
+285.13452 6955.4
+285.19922 5383.4
+286.00903 1148.1
+287.17606 3338.3
+292.90149 1171.5
+295.11090 5043.2
+296.89050 1435.4
+313.19412 4591.4
+335.17877 18380.3
+336.18094 3306.9
+345.21802 2431.1
+347.17813 2376.6
+351.20615 2428.6
+363.17383 38199.9
+364.17743 8474.0
+373.15732 2083.7
+379.20157 5685.8
+380.20383 1509.3
+381.16846 3838.4
+383.47449 1429.0
+390.18750 4116.8
+390.23865 8802.6
+399.17767 5456.2
+408.19516 120018.3
+409.19882 24596.2
+410.18747 3826.0
+416.22934 21912.0
+417.23151 3765.8
+424.22305 12246.4
+425.22610 3350.3
+427.55075 1875.8
+428.17767 1585.9
+436.19003 3613.7
+445.28134 4066.5
+449.20734 1285.9
+460.26068 2539.8
+460.71664 9181.4
+461.21481 2820.1
+462.23865 5463.1
+476.25742 8545.2
+492.28464 4377.5
+493.24295 2684.6
+493.28412 44347.5
+494.28741 12184.9
+495.23175 1989.7
+495.28162 1686.3
+505.20596 2068.7
+505.28247 3654.1
+506.28830 1682.6
+509.31229 2872.9
+510.24127 6783.4
+511.24545 2121.4
+512.25873 2083.8
+513.24548 8160.8
+517.76288 1541.1
+521.27881 47777.7
+522.28192 12226.0
+523.28650 1949.2
+524.73145 2083.5
+527.26880 7138.0
+528.22021 2249.0
+528.27429 1693.7
+530.27191 106266.0
+531.27490 27852.5
+532.27856 4590.5
+532.50360 4265.4
+533.24261 2518.1
+533.74243 2154.6
+537.30713 13623.9
+538.26709 2816.4
+538.30920 4024.3
+542.24530 1750.2
+547.32764 1444.4
+549.16577 1720.9
+553.80908 1334.7
+555.26331 16701.8
+556.26666 5662.5
+557.25842 1429.1
+558.42200 1527.5
+567.76410 1751.9
+575.27124 1304.0
+575.32361 9358.6
+576.28381 2301.2
+576.31989 3287.9
+581.27271 2818.3
+581.77124 3003.7
+583.26740 1510.8
+589.78430 7817.5
+590.27557 8726.0
+590.77991 5484.2
+591.27722 1605.1
+592.34930 10950.7
+593.35193 2979.9
+595.33173 4993.8
+598.78979 140986.8
+599.29132 100780.7
+599.79297 31228.5
+600.29559 7205.3
+618.29352 5032.0
+622.29590 1457.6
+623.32428 16578.1
+624.28046 2029.9
+624.33148 4102.1
+632.29858 1321.8
+634.32813 2231.4
+637.78406 2870.2
+638.26740 1606.7
+640.35223 24558.4
+641.30408 30850.8
+641.34851 9322.9
+641.80927 1769.6
+642.26825 11541.8
+642.30719 12252.2
+643.27002 3958.8
+644.28436 1311.7
+646.79480 7290.8
+647.29327 5786.4
+650.28040 2770.2
+650.33893 2366.6
+652.27863 6292.2
+655.30505 25859.5
+655.80548 23842.3
+656.30713 8774.0
+656.80768 3060.1
+659.31439 74378.0
+660.31653 25668.2
+660.78931 1361.0
+661.32062 5921.0
+664.31018 15131.1
+664.81238 11064.8
+665.30859 4636.8
+665.80890 1726.0
+667.31189 4292.1
+668.34698 62042.6
+669.34918 22772.7
+669.80554 5947.2
+670.34558 4678.3
+674.34222 3834.7
+676.61664 1815.9
+679.43408 1518.9
+680.81604 1294.6
+689.33008 4168.0
+689.37762 1557.8
+689.83118 8298.3
+690.32965 3595.1
+690.83276 2617.4
+694.31970 2490.5
+694.82648 4512.6
+695.32880 2374.9
+697.63849 1794.3
+697.85089 3075.0
+698.34192 13354.4
+698.84375 9683.9
+699.34210 5015.4
+699.84283 2122.1
+713.32465 1602.9
+737.32324 2087.1
+737.37506 2661.8
+738.31989 1970.7
+739.36426 1514.8
+744.31006 1696.9
+745.29791 1430.8
+745.33575 1666.4
+747.33551 2700.9
+754.37903 1417.4
+755.34747 10212.8
+756.32977 14296.5
+757.33618 6086.7
+761.33893 1838.5
+764.35999 2336.9
+765.36298 26283.0
+766.36749 12579.2
+767.36395 3900.5
+771.37952 1482.6
+773.35736 249074.2
+774.36041 98615.6
+775.36340 24949.0
+776.36664 6014.8
+781.31415 2696.5
+782.38892 12911.2
+783.39215 4249.2
+785.40179 1575.7
+789.33069 14986.3
+790.33466 5839.8
+791.33917 2311.3
+791.57886 2017.0
+795.81427 2588.6
+829.41296 1356.4
+866.41504 2766.9
+876.39203 3596.8
+885.38171 1890.8
+886.38281 2035.1
+892.21680 1715.8
+893.42413 2436.6
+894.40625 37301.1
+895.40979 16445.5
+896.40942 4771.2
+902.41553 23991.6
+903.40137 23811.2
+904.40259 11636.3
+905.41052 2452.3
+911.43524 21030.5
+912.43866 11155.2
+913.43842 5214.9
+917.46857 2961.4
+918.98370 2678.3
+919.45599 1532.2
+920.42572 528293.4
+921.42828 285876.2
+921.89178 2532.5
+922.43091 87815.1
+922.87238 2321.9
+923.43213 19946.5
+924.42529 2003.0
+928.41986 2445.9
+931.39771 2842.5
+943.40857 3493.1
+991.42126 1876.4
+992.40326 2028.7
+998.47260 2246.4
+1008.44641 7745.3
+1009.45044 5274.1
+1015.50421 4950.5
+1016.48859 8960.8
+1017.48376 3905.9
+1018.48859 2107.6
+1025.47412 6360.6
+1026.47571 2105.9
+1027.47290 2290.2
+1028.48499 1903.4
+1033.50952 207759.7
+1034.51306 120260.8
+1035.51624 39270.9
+1036.52014 8735.2
+1065.47852 8932.8
+1066.48132 5000.7
+1067.48560 1895.9
+1121.94446 1358.4
+1137.49683 1964.8
+1138.49976 3974.6
+1140.51147 1417.8
+1155.52173 13157.1
+1156.52295 6886.2
+1157.52917 2954.7
+1172.54749 10957.0
+1173.54980 9219.2
+1174.54980 2929.8
+1178.56592 8680.8
+1179.55481 11157.6
+1180.55200 8611.1
+1181.55383 2987.8
+1196.57263 242313.7
+1197.57556 178264.0
+1198.12158 7856.5
+1198.57886 69999.6
+1199.58203 15201.4
+1200.59009 3759.3
+1200.97876 1657.9
+1201.59570 1704.6
+1260.70789 1401.3
+1288.00500 1407.0
+1327.60352 4990.4
+1328.61365 2795.6
+1338.58582 3853.8
+1339.58105 2471.1
+1525.45068 1706.0
+1809.53040 1413.5
+1870.31421 2169.1
+1878.44604 1493.8
+1878.76599 1990.3
+1879.17810 8610.0
+1879.46985 39908.7
+1880.19043 1990.1
+1880.38049 1879.7
+1907.05334 14700.5
+1918.85413 2238.2
+1930.61255 1835.1
+S	2910	2910	721.783407933
+Z	3	2162.075
+Z	2	1441.719
+186.93454 559.4
+187.77036 662.3
+188.18864 654.7
+188.24136 580.8
+188.25481 1075.6
+188.27046 1907.3
+188.29506 1997.7
+188.30824 2183.1
+188.33372 766.6
+188.73006 589.8
+195.51402 516.1
+197.14143 670.6
+198.95776 869.1
+199.25481 774.0
+199.33607 2488.5
+199.34586 1524.3
+199.35242 1362.1
+199.36357 562.1
+199.37880 884.3
+199.43347 579.8
+215.98323 545.8
+217.13702 10198.4
+222.09515 857.9
+229.15981 628.1
+230.89279 738.6
+231.63499 607.8
+233.16483 1029.2
+243.03354 578.9
+245.13222 6786.0
+246.13647 1320.3
+249.15997 16550.8
+249.50220 609.9
+250.16351 2611.9
+251.15077 3388.5
+262.34183 525.9
+267.11627 4044.2
+269.16089 8697.2
+270.16513 1255.0
+277.15527 2784.8
+278.68033 542.3
+285.13507 3748.8
+285.19968 1406.7
+287.17526 2317.4
+295.11084 1902.0
+299.53760 1059.9
+313.19455 1510.0
+319.18527 653.4
+322.44980 588.4
+335.17908 11198.0
+336.18228 1459.9
+345.21664 1431.0
+347.17542 1134.9
+350.28214 740.6
+351.20554 939.6
+353.27475 681.2
+357.42279 741.6
+363.17401 21018.3
+364.17703 3937.8
+364.84171 641.0
+373.15982 985.6
+374.24353 919.8
+375.15891 676.8
+379.20230 3164.6
+380.20535 1407.8
+381.16714 2362.9
+381.19754 717.0
+390.18515 1646.0
+390.23932 5477.3
+391.24396 1112.0
+399.17786 4543.1
+399.32205 778.3
+408.19540 60527.3
+409.19870 13432.3
+410.18738 2092.2
+412.31186 600.6
+416.22958 10321.2
+417.23358 2414.8
+424.22293 5568.9
+425.22485 1284.9
+432.48795 586.1
+436.19095 2323.3
+445.28107 1420.2
+451.71790 802.6
+460.26028 1286.0
+460.71664 4281.7
+461.08142 565.5
+461.21732 2520.7
+462.23907 2376.6
+463.24252 1008.3
+476.25702 4588.1
+477.26083 1647.0
+478.20602 915.9
+492.28632 1805.6
+493.24219 858.4
+493.28445 20753.5
+494.28723 6002.3
+495.23566 1593.7
+495.29514 1147.3
+496.23294 625.1
+499.71948 616.5
+504.24744 634.8
+505.20114 1179.8
+505.28519 2405.4
+509.31091 1260.2
+510.24255 3371.9
+510.31039 825.7
+512.26208 1161.5
+513.24341 3505.1
+514.25409 1184.5
+517.26007 1382.2
+521.23572 960.2
+521.27911 24298.2
+522.28210 8382.2
+523.28192 1708.6
+527.26819 3368.2
+528.22015 2468.3
+528.27356 2127.6
+530.27209 53122.3
+531.27551 15570.7
+532.27942 2750.1
+532.51154 1803.4
+533.24615 2077.6
+533.74536 826.7
+537.30768 6543.9
+538.26636 1291.2
+538.30969 1920.9
+547.33313 769.9
+555.26337 7506.9
+556.26630 2895.8
+557.26959 723.5
+560.72449 633.0
+567.27167 1083.4
+567.78064 623.5
+575.32281 4037.6
+576.27942 1365.2
+576.32654 1757.3
+576.77942 1090.6
+581.27063 2022.0
+581.53333 693.7
+581.76074 955.1
+582.26184 960.8
+583.26056 1426.1
+589.78357 4192.5
+590.27618 5193.1
+590.77850 3910.8
+591.27637 1294.8
+591.77661 652.9
+592.34875 5856.4
+593.35168 2703.2
+595.33038 1797.9
+598.78998 79498.8
+599.29144 52573.8
+599.79333 18070.0
+600.29535 4949.6
+618.29590 2282.3
+619.29431 1077.1
+620.34534 834.6
+623.32538 7659.8
+624.32758 3579.8
+629.79370 754.7
+630.29907 693.8
+632.30908 1109.3
+632.79102 1305.0
+633.29297 1637.2
+633.79730 758.3
+637.78363 828.9
+638.28241 1058.8
+639.83044 810.1
+640.35223 13668.6
+641.30420 17169.3
+641.35382 4692.3
+641.80646 893.4
+642.28156 5658.7
+642.30426 6026.9
+643.27142 1919.5
+646.30011 954.4
+646.79211 5121.6
+647.29474 2153.9
+647.79553 1541.8
+650.27698 1453.3
+652.27802 3642.7
+653.28119 1110.2
+655.30499 16983.4
+655.80585 15167.6
+656.30713 6518.2
+656.80750 2276.5
+659.31451 38207.3
+660.31781 14132.3
+661.32025 2609.2
+662.32086 776.5
+664.31024 9832.8
+664.81232 6867.2
+665.31030 2097.9
+666.53528 693.1
+667.30841 2042.6
+668.34784 33404.3
+669.34814 13209.5
+669.80176 2398.9
+670.34351 3137.2
+671.34869 904.7
+674.34167 1198.2
+674.84052 1103.6
+681.86395 1054.6
+689.33282 2153.2
+689.83411 3190.8
+690.33191 2350.9
+690.68146 789.8
+690.84094 1264.9
+691.33734 736.5
+694.32837 1085.2
+694.82092 3309.5
+695.32819 1329.2
+697.84930 2375.0
+698.34235 7331.4
+698.84528 4871.1
+699.34344 1581.9
+726.74756 643.6
+737.32813 1559.2
+737.37701 1761.6
+738.32050 994.6
+739.41510 621.0
+744.32428 664.4
+745.30939 896.8
+747.33875 1409.9
+753.82684 889.5
+755.34772 5872.3
+756.32959 8235.5
+757.33197 3832.1
+762.31799 637.2
+763.36993 893.2
+764.35779 629.5
+764.41925 741.7
+765.36328 15591.0
+766.36688 5580.1
+767.36688 2489.4
+768.08832 897.8
+773.35754 136885.5
+774.36060 54895.4
+775.36359 14016.9
+776.36707 3184.8
+781.31354 1589.6
+782.39124 8406.1
+783.32068 649.3
+783.39539 3533.1
+784.39502 1096.2
+786.37341 629.2
+789.33105 8337.0
+790.33588 3754.3
+791.34296 794.7
+794.15216 712.0
+795.82281 1164.0
+808.35852 707.5
+820.72607 833.9
+821.05817 1072.4
+835.19763 705.5
+846.42847 1016.2
+866.41180 2025.8
+867.40918 804.0
+876.39337 1260.3
+884.72266 796.8
+885.39355 1398.3
+893.42578 2301.1
+894.40735 21780.2
+895.41125 10407.8
+896.41260 3119.1
+902.41589 12895.2
+903.40466 11354.7
+904.40350 6150.9
+905.39850 2099.3
+906.41547 738.5
+911.43427 13585.6
+912.43958 8137.5
+913.43793 2269.9
+914.44403 983.3
+917.47607 1150.2
+918.96729 844.5
+920.42590 286943.9
+921.42853 156587.6
+921.88007 1441.5
+922.43115 45273.8
+923.43121 8300.1
+924.43640 1397.1
+931.39484 930.5
+932.40576 714.0
+943.41229 1778.0
+991.42371 1533.9
+1008.44836 4168.3
+1009.45264 2952.5
+1010.45624 1344.2
+1011.44574 882.4
+1015.50049 3670.9
+1016.49036 4925.4
+1017.49738 2311.6
+1018.49457 778.2
+1025.47742 4601.4
+1026.48206 2183.5
+1027.47803 1142.5
+1033.50964 116358.0
+1034.51306 68902.9
+1035.51599 22364.2
+1036.51672 5156.2
+1037.53638 1296.6
+1038.46729 753.9
+1065.48096 4029.9
+1066.48352 2960.2
+1067.49792 753.8
+1081.99976 673.5
+1137.50708 985.0
+1138.49646 1623.5
+1139.50208 1463.6
+1146.51184 795.5
+1155.51892 6780.9
+1156.52185 5131.6
+1157.51758 1580.5
+1160.62109 681.1
+1162.54980 834.0
+1172.54248 9759.9
+1173.54700 5692.9
+1174.54187 2333.1
+1178.56079 4160.1
+1179.55225 7896.5
+1180.55432 4170.2
+1196.57263 147546.3
+1197.57593 104515.2
+1198.12854 3320.6
+1198.57910 39412.0
+1198.78162 892.0
+1199.58154 12413.4
+1199.78564 688.5
+1200.58276 2372.3
+1327.61292 3224.6
+1328.61963 2897.0
+1329.62756 737.4
+1338.59082 2129.7
+1339.58838 1226.3
+1410.39624 698.3
+1483.35413 650.3
+1621.62549 830.9
+1760.14990 680.4
+1782.27563 663.9
+1878.17249 1099.3
+1878.54907 1117.0
+1879.23376 3154.2
+1879.59094 19313.8
+1879.98108 2802.1
+1881.03564 870.8
+1886.81323 614.9
+1887.27197 675.3
+1907.04724 7586.2
+1930.60205 936.8
+S	2911	2911	722.283407933
+Z	3	2163.575
+Z	2	1442.719
+188.25739 9431.0
+188.26683 8974.7
+188.27498 12929.9
+188.29503 15462.8
+188.31332 10605.1
+188.31989 8890.6
+194.96416 7829.8
+198.92639 6903.4
+198.95895 9448.2
+199.29404 8050.6
+199.31335 17033.0
+199.31636 16992.5
+199.34059 13330.8
+199.35228 20538.6
+199.36237 29916.5
+212.30408 7912.8
+216.01372 7232.7
+217.13641 35676.2
+217.92320 8461.6
+245.13138 25836.5
+249.15923 50956.3
+251.15002 12204.9
+263.35278 7017.9
+267.11447 8510.2
+269.03058 7899.5
+269.16068 45083.0
+271.36768 12113.7
+271.52563 10411.5
+277.15396 18938.7
+280.17432 11023.0
+313.19409 13674.1
+329.06238 8610.3
+335.17853 26427.8
+350.27985 9514.3
+363.17334 77078.6
+364.17834 20779.9
+378.43921 8010.2
+390.23770 18742.1
+408.19449 276946.5
+409.19720 67389.1
+416.22916 40250.0
+417.23297 12110.6
+445.27783 13011.6
+476.25311 13535.3
+493.28308 97467.1
+494.28583 31141.5
+504.24695 9678.6
+513.24371 16350.1
+520.23578 7645.9
+521.27808 117925.9
+522.28125 25438.4
+530.19238 8777.6
+530.27106 226221.4
+531.27478 63992.6
+532.48724 24291.8
+537.30658 24301.4
+549.13477 11386.8
+555.26379 35907.8
+556.26495 11979.3
+562.06335 7083.8
+589.77777 11600.0
+590.27942 19880.7
+592.34857 30084.1
+593.35486 10409.0
+598.78888 415360.9
+599.29041 249938.3
+599.79144 85009.2
+623.32507 34873.4
+624.32428 11691.8
+640.35040 53931.9
+641.30566 40059.5
+641.35065 21353.9
+646.79059 29715.5
+647.28809 17357.2
+655.30408 75039.6
+655.80249 34915.3
+655.90497 8204.3
+656.30652 16684.8
+659.31360 145549.2
+660.31793 58062.2
+664.30896 38733.1
+664.80994 33681.2
+668.34680 160456.3
+669.34631 61405.9
+670.35443 12446.0
+674.33728 12537.0
+674.84143 12093.8
+676.65002 14137.1
+689.83069 13189.3
+692.99866 9097.5
+698.34308 37966.0
+698.83850 31596.4
+703.33313 55033.7
+703.83264 55021.5
+704.33057 22974.9
+738.36475 8744.1
+744.33917 9917.4
+755.35114 13040.6
+756.32373 9647.6
+762.33337 12147.9
+765.36157 56461.1
+766.36816 27294.5
+773.35693 497011.7
+774.35938 184433.0
+775.36316 45435.9
+782.15106 11957.3
+782.39032 33419.3
+789.33093 13157.6
+866.40088 9455.9
+893.41852 9330.5
+894.40393 95235.4
+895.40887 51440.7
+896.41815 11568.4
+902.41125 33897.3
+903.40063 25563.5
+904.39703 12990.2
+911.43280 52975.6
+912.43817 25604.8
+918.98199 9506.0
+920.42450 958449.6
+921.42786 491888.3
+922.42932 115902.4
+923.43799 18503.3
+943.22266 9688.2
+943.42181 16053.2
+1008.45496 20556.2
+1011.78143 8427.5
+1025.47791 13811.1
+1033.50916 350283.1
+1034.51184 192060.8
+1035.51379 67522.2
+1057.27991 13411.6
+1127.88306 9525.7
+1155.51892 27349.9
+1156.52930 11282.6
+1172.54846 20484.8
+1173.55200 14410.7
+1178.55908 10934.3
+1179.54688 21674.2
+1196.57178 432182.1
+1197.57568 282529.7
+1198.08545 48084.7
+1198.57617 106126.6
+1458.79797 9246.1
+1525.36365 12201.4
+1694.60559 9164.7
+1731.70398 8863.2
+1877.65649 10333.1
+1879.30505 39904.5
+1879.58069 254935.6
+1902.71594 9879.8
+1907.04614 102553.3
+S	2913	2913	683.6340196
+Z	4	2730.50478
+188.25500 1666.4
+188.27119 2563.1
+188.28229 2231.6
+188.28929 2198.9
+188.30011 2194.5
+193.70990 639.2
+196.12839 842.3
+198.95622 1120.7
+199.15915 834.6
+199.27432 997.9
+199.30661 1132.7
+199.32063 1479.9
+199.34262 2152.8
+199.35429 2627.9
+199.37827 1143.2
+199.44092 918.6
+228.94838 665.9
+228.95552 896.3
+233.12653 820.5
+234.99484 737.5
+237.37112 866.6
+242.15024 1221.8
+243.89438 808.3
+245.21985 603.7
+245.22456 599.2
+280.83188 839.8
+313.22110 681.3
+324.94531 890.6
+330.84995 647.9
+342.26062 1176.1
+350.27902 1085.3
+350.48526 809.1
+389.68707 634.7
+416.22418 1127.3
+427.52496 1236.5
+431.14282 792.0
+431.24438 1710.8
+431.58102 1133.7
+445.76828 718.1
+474.60065 8151.9
+474.93475 9025.3
+475.26865 3401.9
+476.34665 642.7
+477.18103 747.8
+482.63126 928.8
+498.19998 777.9
+498.61673 947.1
+499.27066 9989.2
+499.77109 6896.2
+500.27420 2790.8
+507.18845 2438.6
+513.31335 1494.8
+513.81293 1604.4
+520.96857 1748.5
+521.30481 1948.1
+521.63611 843.9
+529.23175 1054.2
+530.30426 804.2
+532.52203 2382.9
+549.12677 1009.9
+561.05219 809.7
+563.29974 7638.2
+563.80066 4837.6
+564.30402 1690.9
+569.22284 703.9
+572.65918 1197.8
+572.98718 2435.4
+573.32532 1705.0
+577.83411 3275.6
+578.33728 2450.4
+578.99451 2940.3
+598.81586 3659.7
+599.31805 3260.9
+599.81635 841.4
+602.98730 1183.1
+603.31830 809.5
+605.84186 1946.1
+606.34375 1426.0
+611.33630 1034.1
+616.35468 3161.3
+616.69073 2482.2
+617.02301 2710.8
+619.25055 2597.4
+619.75494 1099.3
+619.84106 30654.7
+620.25085 1086.7
+620.34253 31869.4
+620.84387 13767.2
+621.34576 1826.2
+627.35266 3954.8
+627.85510 2915.0
+628.34991 1672.2
+630.37994 1119.5
+641.36273 4116.8
+641.86401 3195.4
+642.36462 1162.4
+646.36359 14650.3
+646.86584 7679.4
+647.36792 2423.1
+647.87189 1500.9
+653.58527 4061.6
+653.83490 4655.5
+654.08545 4433.0
+654.33771 2227.7
+655.35944 42299.1
+655.86102 36506.6
+656.36206 17315.3
+656.74286 727.8
+656.86127 3181.6
+660.27478 7023.0
+661.27728 1688.2
+662.87518 1043.9
+663.36560 1522.3
+676.67407 1228.7
+683.52478 970.0
+702.89252 1523.2
+711.39716 58716.8
+711.89868 66331.2
+712.39984 33964.3
+712.90094 6260.1
+738.41809 1344.8
+738.57135 914.5
+745.34564 1092.4
+745.43335 5089.7
+745.93219 5338.7
+746.43304 2132.5
+746.91541 41971.9
+747.41663 43657.9
+747.91852 22844.9
+748.42059 5616.0
+763.75116 705.8
+771.04779 1256.8
+771.36365 4520.1
+772.36621 2191.1
+780.94983 4323.8
+781.45233 3464.8
+782.45801 1299.9
+795.82745 1431.0
+803.45776 15255.1
+803.95880 16383.4
+804.46167 11609.6
+804.96313 3087.5
+838.46576 6296.9
+838.96545 7259.7
+839.46954 3629.0
+858.97278 2467.0
+859.47461 3447.9
+859.96649 1711.5
+867.48621 8114.6
+867.98865 9592.1
+868.49188 6591.7
+868.98975 1253.1
+884.45001 19357.2
+885.45227 11935.5
+886.45343 2829.7
+903.98499 3831.9
+904.48907 3684.5
+904.98260 2032.6
+910.56714 788.5
+920.39008 2577.8
+924.53082 1797.8
+925.03210 992.4
+943.41309 1364.1
+979.92255 725.7
+986.01715 1168.2
+997.53064 2473.4
+998.53357 1602.6
+999.53601 1286.9
+1008.79163 822.7
+1057.30139 886.9
+1125.58923 5795.1
+1126.59216 4475.1
+1127.60388 1077.8
+1166.45544 1785.6
+1178.62842 1584.3
+1179.63416 1613.5
+1188.08643 982.0
+1196.61755 1191.8
+1198.17505 3470.1
+1237.49902 1692.6
+1238.49438 1127.0
+1309.70251 2096.6
+1310.71851 1808.1
+1525.33154 1240.3
+1876.21399 841.3
+1878.51880 1155.0
+1879.00012 1534.3
+1879.62659 22766.0
+1879.90112 4962.3
+1907.05286 9001.3
+1918.87061 896.6
+1930.48779 929.9
+S	2914	2914	686.780991267
+Z	3	2057.068
+Z	2	1371.714
+182.63493 597.8
+188.23868 676.9
+188.25845 1256.2
+188.28281 2068.2
+188.29967 1993.4
+188.31242 1304.9
+188.33154 629.5
+198.95819 997.3
+199.30420 619.3
+199.32188 1281.8
+199.33147 1863.0
+199.34993 1604.1
+199.36722 1014.6
+199.42558 590.8
+199.44878 754.0
+199.49582 608.4
+206.15678 685.4
+222.68135 552.6
+228.47713 737.3
+233.57576 695.4
+241.30307 676.2
+242.14934 1042.3
+249.15955 3062.9
+272.87894 633.0
+277.15543 1583.8
+279.43054 569.8
+288.20203 1252.5
+309.43826 622.6
+309.47916 666.6
+312.71680 565.6
+321.94397 603.5
+335.17856 1197.1
+349.13223 635.2
+350.28275 717.8
+358.35974 588.8
+359.16193 655.1
+359.23978 5703.3
+363.17346 3486.5
+383.61606 688.8
+388.92587 613.5
+390.23846 2329.9
+404.28625 570.3
+407.10190 662.6
+408.19473 20088.7
+418.22897 680.5
+427.53604 616.3
+436.18683 717.2
+442.23407 2751.3
+442.72784 1322.5
+445.28067 953.0
+446.21402 809.5
+474.36319 632.2
+474.60052 7789.9
+474.93451 9382.8
+475.26950 5767.2
+475.60345 2453.7
+476.25653 1136.0
+488.28174 7117.9
+489.28278 1147.3
+493.28320 13277.6
+498.61447 1626.1
+499.26953 8366.5
+499.77118 9582.1
+500.27344 2676.0
+513.03943 659.5
+521.27802 19039.6
+532.51208 1941.6
+555.26648 676.0
+556.94080 609.1
+563.29950 6741.2
+563.79980 5890.8
+564.30542 2670.3
+572.99048 2595.5
+573.32330 921.0
+578.66602 962.9
+578.99390 2507.4
+579.32751 1480.1
+580.12494 780.4
+598.81873 2529.8
+599.31805 4369.8
+599.81708 1282.0
+601.36627 2844.9
+605.84357 2335.7
+606.34644 2180.2
+608.52917 743.7
+610.83588 1180.3
+611.01361 1072.5
+616.35638 2919.1
+616.68964 5311.3
+617.02313 3579.4
+617.35870 907.1
+619.84088 32860.9
+620.34247 41619.6
+620.84387 17631.0
+621.34576 5077.5
+621.84473 843.3
+627.35046 2365.1
+627.85266 2265.9
+628.35516 1050.7
+630.36414 792.6
+637.20209 1565.9
+641.36292 3316.7
+641.86377 4813.5
+642.36829 2064.4
+646.35425 1759.4
+646.84766 1169.8
+647.35358 1403.3
+655.35944 51614.0
+655.86102 60819.1
+656.36237 30111.1
+656.86340 9749.2
+657.36572 2262.6
+668.34515 3844.5
+668.53485 676.1
+676.62659 720.0
+707.34558 791.8
+711.39728 69302.5
+711.89862 98670.2
+712.39966 49503.1
+712.90118 15466.3
+713.40448 3937.0
+713.91547 1039.6
+714.44733 625.8
+722.29785 1194.6
+743.09119 699.9
+746.91553 42886.3
+747.41675 58032.0
+747.91840 30842.6
+748.41974 11805.3
+748.92352 2317.7
+750.29053 5818.7
+751.29218 1677.1
+751.44702 874.1
+771.36469 3406.3
+772.37012 1734.6
+795.81885 890.1
+803.45789 12043.3
+803.95923 19858.6
+804.45947 10953.0
+804.96344 4995.2
+850.33398 656.9
+858.97235 2090.8
+859.47571 3572.6
+863.37268 3959.0
+864.37836 1544.4
+867.48657 10960.5
+867.98743 14144.8
+868.48877 10192.6
+868.99261 4247.1
+884.44922 12884.0
+885.45355 9207.2
+886.45526 2544.9
+924.04199 924.0
+924.52539 1949.4
+925.03107 951.3
+992.41943 3567.7
+993.42639 1108.2
+997.53375 2762.3
+998.53772 2718.2
+1054.97327 605.6
+1057.23181 1025.2
+1125.58813 2728.7
+1126.59106 4147.7
+1127.59021 1839.0
+1140.52502 775.8
+1178.63147 2624.6
+1179.63342 1240.8
+1196.61780 1019.3
+1197.62134 1343.2
+1198.14246 3140.1
+1198.61658 747.1
+1209.15991 624.7
+1291.72632 608.5
+1309.71228 2070.1
+1310.72083 1806.2
+1311.71423 875.9
+1525.46252 814.4
+1745.08362 647.5
+1776.97998 950.9
+1877.72327 637.9
+1878.14539 950.2
+1878.86707 807.6
+1879.50232 19898.9
+1880.16003 1059.7
+1880.34241 1014.5
+1907.05908 7185.6
+1981.71704 770.6
+S	2915	2915	684.3863246
+Z	4	2733.514
+179.42558 735.0
+182.79210 717.7
+185.77995 550.7
+188.25282 789.7
+188.26669 1077.5
+188.27696 1216.5
+188.28520 1188.7
+188.29510 927.7
+188.30200 962.2
+188.31732 965.8
+198.95985 775.5
+199.25154 583.3
+199.26108 869.8
+199.30435 851.7
+199.35007 1920.0
+199.35944 1209.5
+199.36797 1052.9
+199.37689 914.7
+199.44589 590.6
+211.05652 504.1
+215.63982 685.6
+215.80968 575.2
+226.15701 564.8
+242.15079 1015.8
+244.16583 1212.0
+249.17789 581.2
+274.51749 581.9
+283.57968 615.4
+294.41766 626.9
+306.12473 614.2
+308.11230 654.8
+342.29941 562.6
+366.89105 658.8
+375.64111 718.5
+393.09634 573.8
+415.31815 725.6
+417.49738 559.9
+431.24545 1792.3
+442.72910 1022.1
+443.23047 1512.4
+458.56586 597.8
+464.26718 1090.0
+467.25452 576.6
+474.60040 12141.9
+474.93491 12283.4
+475.26892 5394.0
+475.60773 1004.6
+482.68033 796.4
+488.28235 1178.3
+498.28168 1375.3
+498.61105 1200.0
+499.27029 12347.1
+499.77200 9656.1
+500.27399 2702.9
+513.31305 1004.5
+515.92450 734.8
+520.96893 1474.0
+521.30432 1158.7
+532.49646 1888.9
+549.30432 699.5
+563.29889 10334.5
+563.80072 6858.0
+564.30023 2386.8
+572.65704 2134.9
+572.98975 4110.5
+573.32550 1997.8
+573.66095 1157.6
+577.83478 1645.1
+578.33307 1158.2
+578.66138 3294.9
+578.99487 3051.6
+579.32758 1624.5
+585.32294 762.9
+598.81879 4278.3
+599.31830 4029.4
+599.81897 2124.4
+601.36340 851.3
+602.99280 769.4
+605.84521 2924.6
+606.34558 3033.3
+606.84595 1671.7
+610.69543 553.6
+610.83490 2042.9
+611.01318 869.8
+611.34149 868.8
+611.83252 1237.5
+614.38678 1239.9
+616.35522 3180.6
+616.68835 4399.4
+617.02448 2626.8
+617.35583 1273.4
+619.25037 1514.8
+619.75397 1493.6
+619.84106 45846.3
+620.34253 41402.4
+620.84430 15105.2
+621.34540 3945.4
+627.35242 4088.5
+627.85315 3613.5
+628.35358 1730.7
+641.36218 5313.0
+641.86304 4514.3
+642.36127 1844.0
+646.36285 5824.4
+646.86707 2933.1
+647.37054 1454.8
+653.58875 1757.3
+653.83533 2259.9
+654.08594 3564.8
+654.33649 967.7
+654.59991 664.7
+655.35962 49527.5
+655.86115 42402.2
+656.36237 19858.3
+656.86389 6098.7
+660.27527 3518.1
+662.86877 1687.5
+663.36957 1360.5
+702.88934 1166.2
+710.40387 868.1
+711.39758 79590.5
+711.89874 81369.6
+712.39984 39678.8
+712.90082 10316.6
+713.40491 1607.3
+716.08575 570.4
+731.17352 720.3
+738.41388 922.1
+742.77783 713.0
+745.43219 3453.1
+745.93445 2169.2
+746.91565 50032.8
+747.41730 60089.5
+747.91827 26706.6
+748.41962 8602.6
+748.92236 1577.6
+750.29285 821.4
+751.44720 1102.3
+766.40259 631.4
+771.36505 5749.0
+772.36774 3037.9
+773.36346 1070.4
+780.94989 1781.8
+781.44897 1536.5
+781.94305 758.5
+795.82166 808.8
+803.45764 20774.4
+803.95923 26334.8
+804.46149 10799.5
+804.96228 5272.0
+838.46332 3826.7
+838.96210 2450.6
+839.47516 1502.5
+839.95459 717.5
+858.97589 3773.2
+859.47675 4038.3
+859.97675 3013.5
+867.48730 12805.8
+867.98828 13662.5
+868.48853 8678.4
+868.99341 2724.2
+884.44922 22864.2
+885.45300 13641.1
+886.45398 3012.4
+887.45599 1099.4
+903.98193 2196.2
+904.48334 2168.3
+904.99316 1034.0
+920.39172 2058.6
+924.03400 1261.5
+924.53217 2394.5
+925.02600 1636.1
+968.79675 634.2
+979.54413 803.6
+986.53186 797.8
+987.56073 721.8
+988.56256 712.1
+997.53467 3907.9
+998.53564 2361.1
+999.55554 890.6
+1125.59155 7395.2
+1126.59460 5166.1
+1127.59644 2388.4
+1166.46179 1235.7
+1167.46667 665.8
+1178.62708 2067.0
+1179.62598 1583.5
+1180.61316 777.4
+1188.01111 713.1
+1196.62341 1539.2
+1197.62268 1280.7
+1198.11475 3161.1
+1238.49390 763.6
+1284.62048 635.1
+1309.71204 2016.0
+1310.71741 1940.6
+1311.72620 1261.7
+1573.96265 663.0
+1626.43823 788.0
+1666.13452 666.4
+1870.26514 794.3
+1879.13464 2303.6
+1879.55286 20095.0
+1879.95544 2300.0
+1880.72534 810.7
+1882.18823 1030.0
+1907.06116 7832.1
+1930.72998 1009.9
+S	2917	2917	686.778991267
+Z	2	1371.71
+Z	3	2057.062
+187.42648 619.8
+188.22923 658.9
+188.26511 541.4
+188.29095 784.4
+188.33228 748.3
+188.34660 904.4
+197.87131 565.6
+199.10674 618.3
+199.24442 959.5
+199.27188 985.1
+199.32074 1302.6
+199.34332 2425.9
+199.36299 966.6
+200.51324 592.8
+221.69911 658.3
+231.42432 643.2
+249.15985 2863.9
+253.16281 592.9
+267.55957 578.1
+271.85446 623.5
+277.15503 1377.4
+294.24304 575.5
+308.90356 829.7
+330.79169 780.9
+334.95914 753.1
+335.17896 800.8
+350.28152 703.8
+359.23944 2275.7
+363.17337 3146.6
+371.21265 836.2
+374.92755 585.3
+390.23767 2786.4
+397.08954 588.3
+408.19452 21506.0
+437.93097 560.3
+442.23184 2244.0
+445.28027 799.9
+474.59921 3763.3
+474.93454 5104.5
+475.26944 3718.1
+475.60580 1166.1
+476.25607 852.8
+488.28152 2883.4
+493.28311 14588.0
+498.61234 832.6
+499.27042 4150.5
+499.77066 4041.1
+500.27206 1492.8
+521.27820 20386.0
+532.54126 2231.0
+538.99811 567.3
+555.80029 754.7
+563.30005 2747.1
+563.80115 4111.1
+564.30060 2032.2
+571.99493 592.9
+572.66461 573.6
+572.99158 1575.0
+573.31958 1310.6
+578.65753 1356.5
+578.99420 2627.5
+579.32813 1271.4
+598.81726 1794.5
+599.32025 1550.5
+599.82086 914.0
+601.36591 1341.3
+606.34650 1262.9
+615.89191 576.3
+616.68951 3294.6
+617.02295 3227.5
+617.35443 874.6
+619.84125 18706.5
+620.34241 22004.6
+620.84381 12393.9
+621.34460 3348.1
+627.85284 1876.9
+630.40662 751.5
+634.59698 616.3
+634.75330 713.2
+641.36127 1614.6
+641.86450 2779.9
+642.36383 1488.8
+647.33728 900.2
+655.35980 29576.9
+655.86084 37935.3
+656.36212 20691.9
+656.86487 6707.9
+660.11420 702.8
+668.34790 3522.9
+674.18713 710.9
+676.65662 854.2
+711.39728 37637.9
+711.89862 54768.8
+712.40021 33996.3
+712.90143 10758.8
+713.40253 2644.8
+719.82001 692.9
+726.80145 597.2
+739.91071 770.2
+740.41248 662.4
+746.91571 21122.4
+747.41711 34914.0
+747.91852 18730.3
+748.41913 7417.2
+748.92572 1911.1
+750.28888 1247.2
+751.34064 599.0
+767.80353 668.8
+771.36145 1722.6
+772.36359 834.2
+795.83618 1004.4
+803.45911 7280.4
+803.95947 12181.9
+804.29724 566.0
+804.46112 9167.0
+804.96167 2546.8
+831.82263 655.4
+858.97791 753.6
+859.47107 1351.2
+859.97003 779.8
+863.36664 1461.0
+867.48663 5973.6
+867.98706 10478.3
+868.48944 6597.6
+868.99152 2467.9
+884.44977 7696.7
+885.45300 5926.1
+886.45715 2143.5
+924.04474 743.9
+924.53119 1033.1
+992.41632 1220.2
+997.53247 1766.2
+998.53717 1592.6
+1103.18616 571.5
+1125.59094 2244.2
+1126.60168 1411.4
+1127.59070 1155.7
+1129.62378 663.3
+1146.65125 1161.6
+1178.62830 981.7
+1179.63843 637.6
+1180.64111 684.1
+1187.95715 743.4
+1198.21143 3057.3
+1309.71741 909.8
+1310.72168 1340.8
+1311.69751 800.5
+1315.72559 637.1
+1667.21692 668.6
+1876.15320 1205.7
+1878.87769 2403.6
+1879.29822 3232.7
+1879.56287 19561.1
+1880.24243 2474.4
+1882.11841 679.6
+1882.28101 616.8
+1882.80811 773.5
+1907.06787 7767.1
+1930.59265 1301.3
+S	2918	2918	1880.02299127
+Z	2	3758.198
+Z	3	5636.794
+532.53589 1877.6
+549.14789 968.3
+575.09302 702.9
+630.39246 872.1
+676.66797 950.2
+701.73932 604.5
+707.46411 641.7
+745.30695 625.9
+760.85693 527.1
+760.90131 571.4
+781.61292 570.3
+782.16718 961.5
+782.90295 588.8
+795.83087 937.7
+808.32935 590.0
+1057.27698 880.7
+1109.50928 657.7
+1160.76062 797.5
+1198.19617 3178.9
+1268.80591 577.8
+1426.91211 709.7
+1453.38403 636.5
+1876.20508 722.0
+1878.83386 1361.0
+1879.14844 1844.7
+1879.58997 18616.6
+1880.05396 2111.0
+1880.44153 1163.7
+1881.93811 647.2
+1907.08521 7015.6
+1919.09094 665.3
+1930.56335 1115.6
+S	2919	2919	687.782407933
+Z	2	1373.717
+Z	3	2060.072
+175.69484 567.9
+177.11197 1292.2
+182.78864 651.5
+184.17354 593.9
+188.26717 851.6
+188.27995 1350.6
+188.28738 1103.0
+188.29790 1076.9
+188.30807 833.9
+188.32660 781.7
+188.37848 743.5
+191.17871 644.1
+195.55107 643.2
+196.67386 752.9
+198.96219 752.4
+199.23853 1016.0
+199.24881 801.0
+199.33614 1714.8
+199.34726 2598.4
+199.35773 1995.6
+199.43376 746.2
+199.44485 1081.6
+199.45657 965.1
+204.50412 765.9
+217.13643 2654.5
+218.79958 585.1
+221.13863 979.7
+222.08693 606.6
+227.18341 571.8
+228.92603 695.9
+230.91223 662.9
+245.13152 3141.2
+249.15941 9917.5
+252.08444 637.5
+255.16946 735.8
+255.68091 877.7
+271.70242 581.6
+277.15399 4414.9
+290.64014 757.9
+309.18896 1351.2
+313.19278 1366.7
+326.21521 909.7
+327.20016 923.8
+334.50781 649.4
+335.17703 1696.8
+345.21756 956.3
+350.28494 746.6
+353.21652 1482.9
+359.23996 1685.9
+363.17331 8787.2
+364.17694 1165.3
+369.48938 742.6
+370.24149 879.2
+371.22726 1187.6
+372.45120 683.0
+383.46884 749.6
+390.23831 5323.7
+397.24380 1607.8
+408.19434 55819.2
+409.19760 6978.1
+415.25226 1258.4
+427.55215 954.2
+432.28061 817.2
+436.19083 1487.0
+441.26758 1512.1
+442.23294 9665.3
+443.23685 1266.8
+445.27954 3224.7
+459.27982 1855.0
+476.25641 2779.4
+476.30588 886.6
+477.25311 845.8
+485.29532 1524.0
+488.28281 1198.3
+493.28296 39040.9
+494.28546 4820.4
+503.30487 2828.3
+520.32910 1030.7
+521.27765 63800.6
+522.28113 7902.5
+529.31818 870.5
+532.54095 1839.6
+547.33020 1801.1
+564.35901 1966.4
+573.34161 767.0
+591.35547 2651.1
+601.36823 1124.9
+608.38239 2290.3
+623.18561 663.2
+623.33099 1039.7
+633.38940 709.5
+635.38324 3035.4
+640.34973 2477.3
+640.57306 685.4
+641.36475 891.3
+641.89819 2563.2
+642.40619 1741.5
+652.40839 3619.6
+653.40717 991.5
+656.36816 1027.1
+656.86597 1326.9
+663.91058 3082.6
+664.41382 2782.1
+668.34686 8729.2
+669.35260 1768.6
+672.02759 807.4
+676.65186 1381.4
+711.88812 871.9
+712.89777 1380.9
+713.40167 1116.2
+714.16046 667.5
+717.65784 897.5
+723.43494 4709.7
+724.43652 1469.3
+728.15204 894.2
+731.14063 778.2
+740.46191 6958.9
+741.46307 1936.6
+747.79022 709.6
+748.42072 1484.6
+750.28638 1303.3
+754.47736 1213.5
+767.46112 3609.5
+768.47064 1270.6
+780.49115 1173.4
+781.47015 1074.4
+784.48901 9552.2
+785.49158 3412.8
+798.50446 2497.2
+801.89423 761.9
+811.48901 2992.5
+812.49536 910.0
+824.52124 1742.0
+825.50525 1386.3
+827.16797 682.4
+828.51367 8668.3
+829.51556 2692.6
+842.52917 3260.7
+843.53345 1625.8
+868.54742 2044.5
+869.52979 1403.9
+872.54150 5698.3
+873.55267 2153.7
+886.55573 6742.6
+887.56128 2535.7
+913.55762 1903.9
+916.56525 2669.0
+917.57788 926.5
+930.09009 784.4
+930.58130 8374.7
+931.58588 2659.7
+932.59656 756.9
+957.57739 2144.2
+974.60876 8277.4
+975.61127 4201.1
+978.00195 682.5
+993.42004 1017.2
+1001.61102 1450.9
+1018.63513 10043.7
+1019.63953 4421.0
+1045.62659 1139.5
+1057.26526 989.6
+1062.65894 8553.9
+1063.66687 4379.7
+1064.66492 1094.0
+1089.65454 1473.3
+1106.68823 7595.2
+1107.69617 2943.0
+1108.69299 843.2
+1150.71130 5002.7
+1151.71826 2621.0
+1194.74097 3905.5
+1195.74707 2243.5
+1198.21216 4089.9
+1221.98071 731.4
+1238.76086 1376.9
+1238.96265 829.7
+1290.09973 692.6
+1393.41760 718.9
+1499.81934 860.4
+1879.04578 1633.2
+1879.28101 1775.6
+1879.57166 22203.0
+1880.15588 1311.7
+1881.94470 887.1
+1907.07422 7978.1
+1930.64209 1287.0
+S	2921	2921	683.6366446
+Z	4	2730.51528
+175.25240 607.5
+188.13072 657.6
+188.24767 889.6
+188.26161 1444.2
+188.27576 1893.4
+188.28586 2071.0
+188.29611 1916.9
+188.31024 1337.6
+188.33803 635.5
+188.38388 721.4
+198.96230 676.4
+199.24608 1323.3
+199.25816 550.3
+199.32443 1166.2
+199.34450 2301.5
+199.35393 1441.5
+199.36279 523.8
+199.37642 634.5
+199.44266 935.6
+207.52315 497.5
+209.18008 622.8
+218.11757 642.7
+242.15013 1103.3
+242.84906 648.1
+276.04620 552.2
+369.66418 672.8
+406.03751 611.3
+413.15491 687.2
+416.22552 1134.3
+417.22467 719.3
+431.24231 1233.3
+431.58044 1931.1
+442.72815 1036.8
+444.58838 704.6
+452.12817 607.4
+456.22040 554.1
+462.43018 640.5
+464.26691 854.6
+474.60089 11884.7
+474.93518 10370.3
+475.26889 5044.8
+475.60464 1931.9
+482.66452 679.4
+497.29794 596.4
+498.27823 731.2
+498.61551 1256.2
+499.27045 13244.4
+499.77188 11057.8
+500.27307 4155.4
+500.35599 763.7
+507.19040 2024.4
+513.31317 1704.2
+513.81635 862.4
+520.97058 1763.8
+521.30237 1655.7
+529.23236 1406.2
+529.30823 883.3
+532.54211 1903.8
+537.75061 587.4
+549.17102 709.4
+559.31213 1185.7
+563.29950 7933.0
+563.80115 7632.0
+564.30176 2535.3
+564.80396 1199.6
+572.65881 1686.3
+572.99011 1922.5
+577.83478 4114.2
+578.33557 2052.6
+578.66101 3325.7
+578.99365 3775.7
+579.33051 2088.8
+597.34094 974.0
+598.81805 4563.7
+599.31946 4563.3
+599.81952 1369.6
+600.30664 996.3
+601.36493 933.7
+602.99249 1022.4
+605.25488 749.3
+605.84485 3757.2
+606.34363 3108.0
+606.84363 1226.0
+610.83350 1097.3
+611.01300 712.1
+611.33325 1031.5
+611.68878 752.0
+614.38885 884.3
+616.35516 3663.2
+616.68915 6886.5
+617.02466 4967.2
+617.35785 2055.2
+617.69604 874.1
+619.25360 1671.9
+619.75452 1074.2
+619.84143 41602.8
+620.25397 751.6
+620.34290 39998.8
+620.84424 19900.3
+621.34656 5360.0
+621.84723 831.0
+627.35370 3032.1
+627.85297 3730.3
+628.34967 1428.9
+628.86365 816.7
+632.47919 712.8
+641.36218 5067.0
+641.86401 5339.9
+642.36176 2073.9
+642.86865 725.7
+646.36383 12509.6
+646.86584 8489.6
+647.36902 2395.9
+653.58551 3480.2
+653.83514 5503.1
+654.08594 3032.1
+654.33740 2219.4
+654.58746 1121.6
+655.35974 49417.4
+655.86163 51157.0
+656.36292 23993.7
+656.86346 6727.7
+657.36487 1880.6
+660.27612 5763.1
+661.27856 2211.3
+662.87335 1901.6
+663.37109 2509.9
+676.65918 1103.1
+683.86060 892.5
+695.89447 729.2
+696.39795 1469.2
+711.39801 86561.5
+711.89923 84972.2
+712.40027 49691.8
+712.90198 17777.2
+713.40210 2903.7
+733.35223 1038.4
+734.01874 1217.6
+737.91455 769.8
+738.41119 863.6
+739.91107 1196.0
+745.43365 4389.9
+745.93512 4423.5
+746.43530 1702.8
+746.91595 49739.6
+747.41736 62726.1
+747.91901 33978.3
+748.42035 11028.5
+748.92072 2793.6
+751.44489 1035.4
+763.33820 1001.9
+771.36700 5906.8
+772.37067 3008.1
+780.95239 3132.4
+781.44824 2317.2
+795.84723 1278.0
+803.45850 18667.1
+803.95941 26081.8
+804.46082 12838.4
+804.96161 5453.5
+805.46863 1575.8
+838.46442 7293.4
+838.96558 5491.6
+839.46783 2845.3
+839.97034 1221.1
+858.97559 4608.6
+859.47424 3904.8
+859.97864 2196.9
+860.47687 1284.0
+864.50214 667.3
+866.44354 717.1
+867.48773 12654.4
+867.98865 15647.2
+868.49036 8961.2
+868.99384 4134.9
+884.44995 23830.7
+885.45337 15913.6
+886.45422 5362.6
+887.45953 1145.0
+892.99957 631.8
+903.98389 3247.6
+904.48700 3933.0
+904.98798 2065.8
+912.45422 770.9
+920.39063 2857.4
+921.38531 1166.7
+924.02698 1008.3
+924.52563 1765.4
+925.02838 1390.7
+925.53571 759.5
+974.75671 735.1
+986.01373 1040.0
+986.53455 1023.9
+996.84021 685.8
+997.53290 4850.2
+998.53717 3488.2
+999.53259 1097.8
+1034.04138 854.6
+1057.28528 739.7
+1125.59082 8429.4
+1126.59180 5848.8
+1127.59741 2796.5
+1166.45886 1773.5
+1178.63831 2285.0
+1179.63184 1468.9
+1196.63013 1931.8
+1197.63989 1356.0
+1198.21204 3528.9
+1198.62573 675.6
+1237.49280 1229.1
+1309.71130 2153.1
+1310.71582 1375.5
+1311.70886 916.6
+1322.15796 605.2
+1667.26892 649.5
+1710.62964 627.8
+1776.91406 798.7
+1791.87451 710.5
+1870.21924 609.0
+1878.39429 730.4
+1878.91028 885.6
+1879.59033 19919.7
+1879.87061 2790.4
+1880.66272 751.3
+1907.04980 7265.1
+1907.39905 605.0
+1930.62561 1324.5
+S	2922	2922	684.3898246
+Z	4	2733.528
+179.34923 615.7
+181.35243 507.7
+188.00198 605.5
+188.10851 600.9
+188.24133 708.2
+188.27074 1667.4
+188.29111 1768.2
+188.30046 1499.7
+188.30719 1417.5
+188.32045 1348.2
+188.33485 902.8
+188.38768 531.8
+188.42212 512.6
+191.52199 563.0
+194.17439 627.3
+199.24352 578.5
+199.25336 730.5
+199.28946 846.1
+199.33864 990.9
+199.35269 2754.7
+199.36391 1331.6
+199.37634 656.7
+199.38795 796.5
+199.45074 1190.7
+219.29266 524.8
+242.14983 993.1
+243.17331 565.8
+244.16661 1308.5
+246.10048 538.4
+251.59828 557.3
+260.13177 759.1
+280.18719 769.0
+294.04428 597.8
+320.17001 698.0
+349.43747 634.8
+379.16818 661.0
+382.99976 679.1
+416.22357 1768.2
+431.24554 2507.0
+431.57974 2278.8
+442.72775 1346.7
+449.30124 620.8
+464.26862 2121.7
+464.60095 1435.9
+474.60071 13182.4
+474.93509 8947.4
+475.26926 3792.9
+475.60788 1226.5
+482.66483 659.5
+498.27719 1318.3
+498.61673 1199.0
+499.27029 13861.1
+499.77234 7930.7
+500.27368 1656.5
+507.18976 4079.5
+513.31366 3354.5
+513.81421 1756.8
+516.31384 829.7
+520.96985 2792.5
+521.30438 2130.6
+521.63623 1040.0
+529.23627 2181.7
+529.30756 1268.1
+530.75153 692.2
+532.53625 1566.6
+549.16547 737.6
+549.29932 1044.2
+559.31305 1206.7
+563.29944 10227.3
+563.80133 6876.4
+564.30273 2090.9
+572.65570 2269.9
+572.98920 1360.7
+573.07953 625.5
+573.32349 957.8
+573.65930 1046.0
+577.83508 4826.7
+578.33624 3354.5
+578.65820 1884.9
+578.84058 1437.9
+578.99475 1442.0
+579.32928 980.0
+579.66278 1109.5
+583.72900 1232.8
+598.81848 4573.1
+599.32013 2063.4
+599.81909 1037.4
+600.31262 2067.9
+601.31805 1468.5
+602.98993 796.3
+603.32758 1223.8
+603.66193 758.0
+605.84406 3844.5
+606.34497 2688.6
+610.83691 1868.7
+611.33441 1295.7
+614.38336 987.5
+616.35535 4458.6
+616.68854 4607.3
+617.02350 2316.9
+617.35706 1312.1
+619.25201 2803.8
+619.75171 2159.1
+619.84131 43928.2
+620.25342 1090.3
+620.34290 31542.5
+620.84448 13589.4
+621.34644 3166.1
+626.09857 650.5
+627.35303 3465.8
+627.85297 3389.9
+628.34119 1353.1
+630.41626 1236.7
+638.35803 832.3
+641.36285 5735.7
+641.86420 3025.5
+642.36450 1849.6
+646.36340 17632.5
+646.86664 9635.0
+647.36725 3657.4
+653.58411 5397.6
+653.83557 8070.3
+654.08636 4276.6
+654.33691 2722.7
+654.58563 1148.8
+655.35968 50017.4
+655.86121 35326.8
+656.36267 16241.5
+656.86383 4798.6
+660.27618 9727.7
+661.27783 2424.9
+662.87103 1932.1
+663.37213 1363.0
+676.64447 1060.4
+676.81378 658.9
+696.40259 1159.3
+700.65912 793.4
+702.89447 758.1
+709.47308 611.7
+711.39746 80366.6
+711.89886 70218.8
+712.40045 28303.8
+712.90143 7553.0
+713.40302 1141.8
+739.39911 1191.6
+745.43121 8426.8
+745.93512 7334.2
+746.43994 2573.1
+746.91553 57834.8
+747.41705 48627.9
+747.91870 20026.7
+748.42096 5716.9
+751.44104 972.4
+752.44427 664.9
+763.33594 2486.4
+764.34418 1249.1
+771.36499 4478.0
+772.37109 1464.2
+773.37677 863.6
+780.95172 4731.8
+781.45093 5040.3
+781.95605 1322.9
+782.44635 808.7
+786.84058 780.6
+787.35364 651.3
+795.82324 1046.9
+803.45728 21214.0
+803.95905 21534.6
+804.46039 9658.8
+804.95923 2696.5
+835.28418 634.4
+838.46490 9929.6
+838.96503 10949.1
+839.46832 4435.7
+839.97253 1571.3
+851.37762 1286.0
+851.88379 1018.5
+858.48169 756.1
+858.97504 4321.4
+859.47595 3460.5
+859.97998 2080.7
+867.48682 14101.1
+867.98871 13467.1
+868.49078 5317.6
+868.99347 2184.1
+869.48633 886.5
+884.44965 21991.3
+885.45331 10775.1
+886.45380 3079.0
+903.98499 4255.2
+904.48602 4638.2
+904.98358 3442.0
+905.48627 934.9
+920.39178 3833.7
+921.39032 1876.9
+922.38617 1010.4
+924.03070 2219.4
+924.52521 1873.1
+925.01691 758.3
+985.51886 1233.3
+986.02429 1632.0
+997.53546 4344.9
+998.53613 2056.4
+1019.66309 750.8
+1034.04053 985.1
+1034.54431 2230.1
+1051.43323 854.5
+1058.24377 606.2
+1068.58325 837.8
+1095.22815 578.9
+1125.58984 7334.0
+1126.59241 4673.1
+1127.59070 901.5
+1140.37659 666.0
+1166.46045 2041.4
+1167.45044 899.3
+1173.98633 700.2
+1178.62878 2933.2
+1196.30139 639.6
+1196.61584 1099.6
+1197.64246 1198.1
+1198.19739 3198.1
+1237.49963 1528.7
+1238.49146 2104.3
+1238.66711 756.7
+1244.43640 719.3
+1309.71741 2560.5
+1310.72046 1728.5
+1336.57166 985.2
+1344.27307 711.2
+1463.61194 652.3
+1496.32532 735.2
+1776.98950 844.2
+1876.22009 1063.9
+1877.39917 726.4
+1878.63440 1378.4
+1879.12085 964.6
+1879.54663 20154.0
+1879.91772 1056.3
+1882.80835 660.6
+1907.07251 7326.0
+1907.79602 588.4
+1918.90662 857.7
+1944.23511 661.2
+S	2923	2923	686.3525746
+Z	2	1370.857
+Z	3	2055.783
+188.26366 538.4
+188.27315 999.0
+188.28563 1250.7
+188.30016 1295.7
+188.31177 954.2
+193.99525 593.0
+198.99608 507.0
+199.24211 772.2
+199.32684 925.0
+199.33621 888.5
+199.34006 828.6
+199.34790 933.1
+199.35689 2058.2
+199.37560 1362.8
+199.43933 760.0
+199.45552 800.3
+211.71019 653.3
+233.57130 705.4
+266.07614 614.7
+268.18454 666.0
+270.83295 579.2
+272.42844 584.2
+280.45859 736.0
+285.64185 554.1
+318.03586 668.8
+337.53546 802.5
+342.26581 773.4
+350.28836 675.5
+350.64185 550.1
+352.46747 614.2
+361.89990 846.0
+375.47556 760.7
+386.25748 600.0
+398.46432 614.5
+408.19458 4083.0
+427.54031 973.6
+430.20258 702.9
+445.24576 640.5
+450.99048 570.6
+464.33725 598.8
+474.59964 3538.2
+474.93442 2141.0
+493.28174 2647.6
+499.26984 2539.8
+499.77081 2366.5
+500.27475 1174.2
+514.92743 629.7
+521.27832 2704.7
+532.48846 1563.4
+533.26031 681.2
+563.29950 2455.1
+563.79816 1735.9
+564.30133 679.4
+572.99524 743.3
+598.81256 1217.1
+605.83429 776.2
+616.34821 1105.7
+616.68793 1269.3
+619.84052 12085.1
+620.34259 10164.3
+620.84302 3451.9
+621.34698 852.3
+626.19293 675.9
+630.40533 691.2
+633.37982 731.0
+641.35950 1012.8
+641.86511 1112.4
+654.01807 782.4
+655.35919 17797.4
+655.86060 14349.0
+656.36255 5925.8
+656.86554 878.7
+666.10486 784.1
+676.68030 869.4
+711.39728 26502.2
+711.89838 20470.5
+712.40051 8671.9
+712.89972 2309.2
+746.91486 16125.7
+747.41705 13782.9
+747.91602 5414.8
+748.41943 2392.6
+771.37146 962.2
+795.81445 762.8
+803.45752 5392.7
+803.95880 4250.2
+804.45648 2821.2
+804.96820 1166.2
+859.46716 922.7
+867.48621 3018.2
+867.98962 4190.6
+868.49011 1711.4
+868.99280 1113.4
+874.61218 590.1
+884.44720 3347.2
+885.45422 2507.9
+886.45288 822.9
+989.42432 654.0
+997.53082 786.2
+1019.65845 782.6
+1125.59119 1391.4
+1141.10901 677.2
+1175.71826 567.3
+1198.08948 2967.9
+1269.83459 707.4
+1305.60352 619.4
+1360.55969 608.4
+1368.47791 622.7
+1455.50696 668.5
+1494.60754 612.3
+1640.96643 555.4
+1642.10352 603.7
+1877.64368 770.1
+1879.00720 1503.4
+1879.35474 3776.6
+1879.62927 18911.8
+1880.28723 1076.6
+1880.45459 1156.8
+1881.69324 539.1
+1907.08240 7094.6
+1918.93262 723.3
+S	2925	2925	1880.04640793
+Z	2	3758.245
+Z	3	5636.864
+532.46545 1370.7
+535.59088 614.7
+574.03363 686.3
+676.63226 1116.2
+716.41437 723.9
+795.84113 1039.1
+975.48358 679.0
+1181.21814 685.9
+1198.04504 3459.4
+1220.59509 587.0
+1294.26929 675.4
+1413.74854 655.2
+1583.95886 780.4
+1878.82654 1378.4
+1879.16760 1482.0
+1879.51819 19471.9
+1879.87537 1509.5
+1880.18347 1225.7
+1880.57141 858.0
+1907.03528 7683.9
+1930.60876 1000.1
+S	2926	2926	1907.51640793
+Z	3	5719.274
+Z	2	3813.185
+532.50232 1636.7
+604.76111 620.5
+676.64545 1358.9
+725.70331 596.7
+795.83203 826.9
+855.46997 642.0
+858.06360 636.5
+878.63403 560.8
+982.84619 581.5
+1140.51208 642.7
+1198.12268 3498.9
+1433.42505 611.8
+1807.50513 725.0
+1878.49072 1028.5
+1879.13647 1582.6
+1879.54077 19413.9
+1879.96204 1959.4
+1880.69873 959.1
+1881.09253 662.3
+1907.12622 6516.1
+1930.60498 886.1
+1931.99817 897.2
+S	2927	2927	470.6878246
+Z	2	939.528
+Z	3	1408.788
+120.84624 589.3
+121.78025 1840.8
+130.54436 625.9
+141.43898 526.1
+141.71010 550.4
+146.38611 528.3
+149.03644 557.0
+152.63339 508.5
+182.57068 647.7
+184.14325 663.5
+187.09363 512.1
+198.96085 1080.1
+199.24080 818.6
+199.32556 1495.9
+199.33864 3226.1
+199.40663 623.9
+199.43706 958.4
+214.52454 557.4
+218.70570 707.8
+246.81293 576.2
+247.81621 536.0
+253.40736 659.5
+263.96967 573.7
+271.32904 540.0
+271.63104 511.9
+299.41946 591.0
+350.27939 721.0
+360.29391 537.4
+366.19757 541.7
+376.21524 628.1
+395.71719 880.1
+396.21594 714.1
+427.57120 652.8
+439.56149 535.8
+448.28799 600.3
+452.25659 1364.4
+453.26920 1146.9
+476.76553 831.0
+500.67148 731.2
+516.59241 568.5
+532.51422 2102.9
+539.38361 526.8
+560.83252 573.7
+630.10724 686.5
+651.71423 567.8
+676.64722 1037.5
+731.17194 614.8
+790.42242 2355.3
+795.83710 1202.3
+826.44128 868.0
+854.69061 585.6
+968.83575 599.3
+1019.74597 631.5
+1021.61371 639.9
+1057.25916 1060.0
+1093.12109 616.7
+1188.28381 660.8
+1198.15173 3323.7
+1323.06165 688.7
+1455.89795 575.8
+1460.59937 629.1
+1474.08447 591.1
+1525.50659 866.0
+1584.46680 572.5
+1662.23315 654.0
+1680.47058 637.1
+1742.46741 632.8
+1745.33716 616.7
+1793.03882 692.5
+1811.57593 580.4
+1818.22119 621.7
+1870.17468 640.7
+1879.13269 1350.7
+1879.55090 20233.5
+1879.99390 932.4
+1880.22961 872.7
+1882.95520 758.7
+1883.83752 621.1
+1884.32385 705.0
+S	2929	2929	856.2058246
+Z	4	3420.792
+226.76225 3462.0
+226.91245 3659.1
+227.49390 4051.4
+233.54755 3727.3
+246.41576 3527.5
+254.77028 3439.2
+262.88080 3715.3
+263.25555 3977.6
+271.54547 4675.7
+286.61951 4058.1
+293.69540 3843.0
+296.15073 3578.8
+301.23560 3459.8
+302.53937 3326.9
+308.46729 3231.0
+319.57794 3991.8
+329.24329 3367.9
+357.78775 4002.4
+361.44553 3406.9
+361.45923 4046.9
+363.58688 5026.3
+384.65225 3405.6
+459.16907 3639.0
+484.34204 4462.8
+499.38889 3590.8
+526.85901 4299.2
+532.52386 10945.1
+561.55310 4195.6
+573.33636 4224.0
+639.27338 5384.5
+661.23022 4520.7
+676.63806 5953.0
+718.85297 4388.5
+731.04547 3929.9
+731.08990 3782.1
+777.74988 17000.9
+778.07751 5543.7
+791.35834 3591.2
+795.84241 6994.5
+836.45227 6316.9
+843.09155 4052.6
+970.00677 7208.5
+988.83344 3612.2
+1013.01434 4351.3
+1020.81726 4419.2
+1072.53833 23248.1
+1073.54211 10583.3
+1121.57727 9162.5
+1122.57324 4622.2
+1174.63525 7624.6
+1186.96228 4140.7
+1188.21326 5629.5
+1198.16980 21273.9
+1273.10840 4686.8
+1412.08789 4645.6
+1518.65833 4468.1
+1519.29333 3718.2
+1625.28406 4038.9
+1626.13733 4191.2
+1870.37366 7011.7
+1876.02710 4726.9
+1878.63562 5362.1
+1879.21509 16711.5
+1879.52979 130223.4
+1880.15833 6304.0
+1881.00415 6504.2
+1907.04456 48320.3
+1999.51184 4096.9
+S	2930	2930	955.4768246
+Z	4	3817.876
+270.62000 725.2
+308.87173 667.7
+343.10455 690.1
+350.27914 803.3
+388.69382 620.6
+439.72922 580.8
+454.78952 637.2
+490.19995 657.0
+493.54776 606.3
+532.48987 1645.7
+591.53766 565.4
+603.57666 591.0
+624.02875 672.4
+630.35541 744.9
+641.27014 1768.1
+676.64227 997.0
+754.34985 755.9
+772.36316 713.2
+802.42102 653.9
+805.40100 690.5
+824.58759 536.2
+896.46417 593.1
+935.44373 686.5
+1016.52429 714.5
+1053.19629 713.8
+1053.53479 1127.5
+1053.85828 1158.8
+1054.17712 812.4
+1062.73523 618.5
+1077.05261 1468.0
+1077.20813 1108.5
+1077.54114 1297.6
+1114.56665 672.1
+1119.56104 933.8
+1119.89636 2126.9
+1120.23010 2348.1
+1120.57666 894.4
+1132.55591 755.9
+1184.09766 2316.5
+1184.59680 3671.6
+1185.09412 1690.0
+1198.10010 3087.4
+1240.63733 1095.1
+1241.63062 873.5
+1244.84973 662.2
+1488.54285 681.5
+1580.56653 618.2
+1597.30444 869.5
+1616.35364 609.3
+1739.51477 662.6
+1771.79370 766.4
+1776.94995 649.1
+1878.70007 1665.5
+1879.01672 1522.6
+1879.53540 19874.9
+1879.94885 2059.3
+1880.39185 1600.2
+1907.05347 7426.4
+1930.45142 1386.1
+S	2931	2931	856.7075746
+Z	4	3422.799
+238.49860 623.4
+242.68861 625.9
+247.55722 557.0
+265.58490 624.5
+268.98752 585.6
+271.53433 846.6
+280.16440 709.4
+300.58224 666.8
+359.08685 603.8
+375.22751 632.8
+379.24014 521.5
+397.60471 677.2
+430.96777 615.2
+431.88718 637.1
+456.24976 1414.7
+474.25986 1750.7
+485.98325 709.4
+486.50882 686.9
+527.76489 1217.0
+532.52307 1997.8
+536.77332 5979.3
+537.27441 4374.8
+537.78082 732.1
+549.19934 621.6
+561.28705 951.8
+561.79114 640.9
+573.08728 691.0
+573.32886 2017.3
+585.29736 647.1
+593.31720 851.0
+595.77362 638.6
+646.67950 758.4
+676.66766 1161.5
+678.36597 901.6
+685.84857 2852.7
+686.34790 2607.1
+686.85297 886.3
+690.40875 553.4
+690.83771 662.3
+732.35602 782.3
+732.89435 1296.3
+733.39685 1493.0
+739.71997 1799.1
+740.05414 1105.9
+740.38641 1494.1
+741.90094 3545.3
+742.40332 2880.0
+742.90149 1179.9
+746.06097 705.4
+771.74603 1999.5
+772.07489 2429.3
+772.41229 1822.6
+772.74091 1051.3
+777.41431 10148.0
+777.74829 17005.1
+778.08234 11850.5
+778.41724 6963.1
+778.74908 3654.9
+781.97742 598.7
+783.41516 1832.9
+783.74847 2375.1
+784.09070 2127.3
+786.92749 812.3
+792.33160 729.5
+804.38098 694.0
+813.40625 1373.1
+836.44885 3935.0
+837.45825 1430.0
+838.43243 741.2
+874.42065 931.5
+898.45319 708.1
+904.44525 742.3
+905.81329 822.2
+912.95178 1246.8
+913.45490 1724.7
+913.95258 1356.2
+960.48523 881.5
+960.99341 3171.8
+961.48810 4034.4
+961.99060 2101.8
+962.49481 1226.9
+963.30682 859.9
+969.49738 8300.8
+969.99878 12601.9
+970.50031 7402.6
+971.00037 3573.5
+998.08008 727.1
+1016.53046 719.0
+1017.04370 851.2
+1017.55206 1179.6
+1025.54883 1826.6
+1026.05005 1816.3
+1026.18823 1781.4
+1026.52246 2328.7
+1026.86731 1110.7
+1027.05823 936.3
+1027.18274 862.8
+1053.99866 2295.2
+1054.53223 1246.5
+1054.98010 693.3
+1056.57996 737.3
+1057.30225 922.8
+1063.55261 2038.0
+1063.88525 5591.2
+1064.22107 4563.9
+1064.55664 3045.4
+1064.89246 1447.3
+1067.54980 1014.3
+1068.06079 2070.0
+1068.56262 738.8
+1072.53955 25755.1
+1073.54333 16762.6
+1074.54834 4395.7
+1075.56116 786.8
+1101.07263 895.4
+1104.03223 1389.7
+1109.07507 3427.1
+1109.58093 4018.9
+1110.07739 3079.8
+1110.57422 1895.6
+1112.58972 1230.6
+1118.06714 2098.6
+1118.58228 2192.6
+1119.08472 2862.2
+1121.56714 6225.0
+1122.56934 2177.8
+1166.12402 1185.5
+1166.61182 2208.6
+1167.13562 957.9
+1167.63074 622.6
+1174.62109 3569.0
+1175.12463 6518.8
+1175.62476 6451.5
+1176.12378 3377.1
+1198.16870 3287.0
+1209.16321 664.7
+1286.68811 943.2
+1370.67407 2058.9
+1371.68347 1351.2
+1413.63037 649.5
+1481.61719 627.7
+1482.79565 1608.4
+1483.80750 1065.4
+1525.53418 676.4
+1610.54736 725.3
+1745.97339 702.3
+1845.24048 669.7
+1870.37720 1028.8
+1877.75073 659.4
+1878.21802 1049.5
+1879.01501 1017.2
+1879.61426 19898.9
+1880.65002 671.8
+1880.99524 1207.9
+1882.11731 699.5
+1898.20581 649.3
+1907.05151 7350.2
+1907.44336 773.5
+1911.60071 671.5
+1930.77368 928.9
+S	2933	2933	1879.99299127
+Z	3	5636.704
+Z	2	3758.138
+516.07397 609.4
+532.48859 1879.4
+549.15100 872.4
+592.37476 714.0
+630.40338 785.0
+647.68140 598.3
+676.49304 574.9
+676.63654 1108.9
+749.12982 647.4
+795.85059 871.6
+804.30249 672.8
+936.64063 743.4
+1019.71814 658.2
+1030.74744 608.2
+1140.22180 670.8
+1198.09082 3403.9
+1468.86804 680.2
+1878.77637 1244.8
+1879.52551 19844.8
+1880.27087 942.5
+1881.97876 867.6
+1883.18909 622.6
+1907.13281 7445.4
+1907.62256 759.1
+1930.59973 1035.1
+1971.48022 681.5
+S	2934	2934	855.9526846
+Z	4	3419.77944
+226.47580 621.0
+231.86685 542.5
+265.57474 592.5
+267.12778 683.3
+271.52481 613.7
+286.38318 559.8
+293.43268 608.3
+346.78891 699.4
+420.40640 556.7
+467.68033 650.5
+474.25961 1198.7
+482.66321 657.4
+532.49902 541.2
+532.54132 1905.2
+536.77258 2466.8
+549.16345 653.5
+554.32751 664.0
+561.28589 942.3
+561.82922 741.6
+573.32953 895.4
+585.29541 1047.0
+630.42426 742.3
+678.36829 776.2
+685.84515 1381.0
+686.34790 1044.4
+687.50537 589.5
+741.90155 1517.6
+742.39648 1435.7
+746.05182 734.5
+771.73492 1072.5
+772.07288 722.7
+772.74005 793.4
+777.41309 4172.1
+777.74792 4453.2
+778.08258 4437.1
+778.41882 1739.4
+784.08459 981.8
+795.84717 1107.0
+836.44855 3471.5
+837.45374 1735.2
+838.44965 673.7
+858.06409 665.3
+904.42194 598.3
+912.95789 1122.1
+960.49408 797.0
+960.98950 1354.3
+961.99756 784.7
+969.49628 4060.5
+969.99866 4962.0
+970.50067 2417.1
+1019.65533 803.2
+1025.55212 662.2
+1026.04553 1046.5
+1026.53003 1063.9
+1053.99451 1189.7
+1054.48804 2128.3
+1054.90845 892.4
+1055.49829 768.4
+1063.55286 1358.3
+1063.88684 1860.3
+1064.21875 1917.5
+1064.55029 974.5
+1067.53857 1066.3
+1068.05457 882.2
+1072.53955 11106.2
+1073.54285 6083.5
+1074.54736 1683.7
+1104.02917 801.4
+1109.57849 2323.2
+1110.07349 879.7
+1110.66003 656.1
+1118.08862 906.5
+1121.56531 5558.8
+1122.57642 1226.0
+1174.62085 869.4
+1175.11914 2550.5
+1175.62915 2297.5
+1176.12268 775.2
+1198.21069 3376.2
+1364.70642 657.6
+1370.69116 828.8
+1831.74536 598.3
+1870.27917 718.6
+1878.86584 1820.4
+1879.14380 1575.2
+1879.59900 19257.7
+1880.06006 1511.3
+1880.36572 1898.8
+1907.05530 7738.0
+1965.21423 713.8
+S	2935	2935	856.7055746
+Z	4	3422.791
+226.68146 604.0
+230.21033 604.8
+245.87965 508.5
+266.55130 586.0
+271.20087 572.5
+271.36145 697.3
+278.55368 557.6
+280.19012 649.1
+285.37723 602.0
+313.83691 586.0
+315.19595 573.2
+375.13266 654.0
+402.19418 585.3
+436.46866 658.9
+456.24704 1996.7
+459.10837 636.8
+474.25909 1622.7
+482.65564 603.9
+484.17279 633.1
+502.70923 765.5
+532.53320 1581.5
+536.77301 6498.9
+537.27448 2821.9
+561.28760 1053.7
+566.90210 567.0
+573.32880 2770.4
+609.11328 651.3
+616.89868 626.0
+630.41711 711.4
+638.01935 617.5
+676.64636 1378.5
+677.34082 768.3
+685.30463 656.3
+685.84705 3911.2
+686.34888 2213.8
+686.84808 813.1
+688.35632 2033.4
+710.35437 1395.3
+712.37115 808.9
+732.89282 1136.5
+739.71753 1722.4
+740.04987 950.1
+741.90002 2557.9
+742.40051 2904.5
+742.90521 1369.4
+746.38660 689.6
+761.90588 597.5
+771.41223 1470.3
+771.74713 1652.0
+772.07709 2037.0
+777.41473 9438.7
+777.74817 12731.1
+778.08154 10973.3
+778.41803 4254.0
+778.75085 1421.6
+782.76318 761.1
+783.41620 941.7
+783.75256 1347.7
+784.08386 1072.3
+784.42041 1150.8
+813.41211 1558.7
+813.91339 846.6
+836.44812 3630.4
+837.45490 2059.1
+838.94031 1111.1
+840.40460 1052.6
+904.94690 847.3
+912.95343 1220.0
+913.45648 1755.8
+913.95941 972.3
+951.98035 792.8
+960.49060 1804.0
+960.99200 3312.9
+961.48505 2886.9
+961.98724 1901.4
+969.49670 10238.7
+969.99908 11017.2
+970.49951 5959.1
+970.99384 1982.9
+975.48730 1283.6
+980.40295 721.8
+1016.55438 1180.9
+1025.55005 1470.1
+1025.85938 1259.6
+1026.04626 1918.0
+1026.19250 797.7
+1026.53113 847.8
+1026.85156 1460.4
+1045.39185 726.1
+1046.03357 587.8
+1053.99268 1775.7
+1054.49194 1315.2
+1054.93372 797.5
+1054.98975 916.9
+1055.23535 620.3
+1055.54224 695.0
+1057.25696 741.2
+1063.54712 2823.3
+1063.88269 3320.7
+1064.22217 3059.2
+1064.55115 3243.0
+1064.89148 1267.6
+1067.55750 1540.4
+1068.05859 2078.3
+1068.57141 860.6
+1072.53918 23850.9
+1073.54224 14610.7
+1074.54602 3092.1
+1103.52295 1297.2
+1104.04419 1011.3
+1109.07813 3306.1
+1109.57849 4835.7
+1110.07910 4374.3
+1110.58325 773.5
+1118.08276 1176.9
+1118.58618 2883.4
+1119.08325 1568.5
+1121.56824 10216.6
+1122.57129 3752.4
+1165.60986 851.1
+1166.10974 2105.8
+1166.62402 1414.0
+1167.12524 776.7
+1174.62073 3799.2
+1175.12366 6995.9
+1175.62598 3511.2
+1176.12366 2019.0
+1183.73010 741.7
+1185.61536 968.1
+1198.18884 3096.6
+1370.67590 1717.2
+1371.66394 967.7
+1482.78906 1469.9
+1483.78943 1215.6
+1580.66028 618.8
+1597.87439 624.2
+1876.24402 657.6
+1878.25989 781.5
+1879.17200 1728.4
+1879.54553 20097.6
+1879.87537 2099.6
+1907.04700 7545.9
+1930.62183 893.1
+S	2937	2937	855.9614121
+Z	4	3419.81435
+229.86394 594.8
+233.58086 579.3
+240.50822 543.5
+247.74274 532.5
+248.51601 590.8
+319.18509 610.3
+326.29916 594.4
+384.45621 610.7
+395.24588 536.8
+411.26468 731.1
+420.92798 657.5
+427.55368 754.4
+454.22412 705.3
+456.28256 1211.1
+474.26123 1255.5
+489.95618 529.9
+532.53827 2550.0
+534.97736 610.9
+536.77301 2591.7
+537.27142 859.8
+552.01923 569.8
+560.80347 612.2
+561.28809 1192.4
+568.09753 673.9
+573.32886 1327.2
+579.35901 717.4
+585.28577 1138.1
+613.78870 626.3
+670.35468 641.2
+676.61993 859.7
+681.90704 644.1
+685.84650 1133.0
+688.36334 837.5
+710.36243 994.4
+726.07758 689.7
+739.71027 670.8
+740.05945 1553.0
+741.89923 2668.5
+742.40491 955.6
+762.88281 718.8
+768.87659 682.3
+771.59772 644.4
+772.07422 1896.0
+775.35870 742.3
+777.41370 6297.2
+777.74982 7057.3
+778.08221 4273.1
+782.42889 1214.2
+782.75659 903.7
+783.75732 768.3
+829.25433 961.1
+830.74634 927.9
+836.44946 7563.9
+837.45258 3301.6
+858.05780 636.1
+882.16107 639.8
+903.38733 709.4
+913.45520 916.3
+940.02075 663.3
+960.98743 1181.7
+969.49908 2712.8
+970.00171 3951.9
+970.50409 1363.4
+990.85205 628.0
+1011.45770 702.9
+1026.19324 887.3
+1041.89160 712.4
+1053.99500 4963.9
+1054.48999 3867.6
+1055.00415 1783.6
+1057.21277 742.2
+1063.87646 1026.8
+1064.22119 1534.9
+1064.55798 930.3
+1067.59143 630.4
+1068.05603 934.0
+1072.54114 9720.0
+1073.54004 4696.2
+1103.52551 1202.0
+1104.03674 2024.3
+1104.53955 1071.8
+1109.07056 1700.9
+1109.57166 2164.0
+1110.07520 1445.7
+1118.08679 1256.1
+1118.57227 964.1
+1121.56763 5755.0
+1124.18188 763.8
+1166.10046 1142.9
+1174.61865 2102.3
+1175.11963 2897.6
+1175.61633 816.6
+1176.12048 725.2
+1177.39954 771.6
+1188.02747 755.1
+1198.20325 3610.6
+1353.51794 705.8
+1667.20483 718.7
+1670.73450 813.7
+1773.58850 648.4
+1777.45740 963.6
+1820.11841 663.1
+1878.45471 952.7
+1879.48730 19499.4
+1879.77808 1295.2
+1880.88281 815.1
+1881.23792 739.8
+1907.11511 7377.6
+1930.66516 855.9
+S	2938	2938	849.6294926
+Z	5	4243.10834
+253.25478 635.3
+271.83994 582.4
+277.32245 683.0
+294.80774 574.9
+308.90030 635.4
+329.38263 583.7
+341.28207 677.7
+343.16425 1015.3
+359.98990 572.7
+361.17502 709.2
+362.06888 633.6
+393.09546 599.6
+424.23062 590.1
+431.56238 669.6
+456.24817 5873.0
+457.25061 1274.7
+474.26004 3243.5
+484.20605 1467.8
+485.01968 593.1
+502.21536 912.0
+532.52722 1911.4
+561.28760 3970.2
+561.78979 2138.5
+562.29095 909.7
+570.94690 717.7
+573.32806 2497.4
+593.29681 734.5
+597.28577 2000.1
+598.29242 807.6
+610.82300 922.7
+615.29388 1225.8
+630.40826 723.3
+646.23730 637.7
+676.63794 895.9
+680.42755 734.0
+696.35376 2850.6
+710.35706 4062.2
+711.35760 1692.9
+711.85706 3212.4
+712.10803 2672.1
+712.36090 3823.2
+712.60913 1263.4
+714.36395 3669.3
+729.85712 983.1
+731.12708 742.9
+741.34515 1360.2
+795.84534 1073.8
+796.14746 893.1
+800.40527 7479.4
+800.65582 10387.7
+800.90753 9520.2
+801.15735 6683.7
+801.40894 3442.0
+804.61090 968.2
+806.45837 950.4
+807.61646 1755.6
+807.81812 3671.5
+808.01794 4381.2
+808.21930 4144.0
+808.41827 1493.7
+808.61688 1299.8
+814.96198 3989.8
+818.15588 698.6
+822.16071 1853.7
+822.41162 2259.0
+822.66559 3408.6
+822.91296 2194.0
+823.74872 666.8
+829.36865 617.9
+870.94104 854.7
+878.92224 933.4
+879.43152 878.0
+883.67523 928.2
+883.93298 1154.1
+895.63922 942.4
+898.45593 874.8
+907.94794 1426.4
+908.19867 1870.5
+908.45898 935.1
+908.69421 952.0
+913.12750 595.9
+918.58783 610.1
+923.47302 1475.2
+923.73035 1574.4
+923.97260 2070.3
+924.22522 1787.7
+924.47424 1775.5
+931.72217 719.7
+931.97675 925.3
+936.21863 2362.8
+936.46954 4506.0
+936.72064 3998.1
+936.97064 2644.1
+937.21997 1139.5
+940.42688 871.2
+948.80817 16998.8
+949.14233 27662.7
+949.47607 20598.1
+949.81042 10525.5
+950.14465 2977.5
+950.47638 917.2
+956.48254 796.3
+956.97565 927.8
+958.44159 969.6
+960.23987 2425.3
+960.48950 6333.7
+960.74023 5170.9
+960.99005 2947.9
+961.24524 2355.7
+961.73096 782.7
+972.48895 3697.0
+972.82135 6880.7
+973.15649 4440.7
+973.49451 1678.2
+973.81952 991.7
+984.54132 944.5
+985.25549 1024.4
+996.15692 759.4
+1001.49866 9241.5
+1001.83191 17057.7
+1002.16656 14972.8
+1002.50140 8288.5
+1002.83661 3428.8
+1004.24219 1290.6
+1004.49744 1978.0
+1004.75281 1339.2
+1009.46704 656.8
+1009.77380 1286.5
+1010.01538 898.8
+1027.45435 1049.3
+1028.45996 1004.2
+1029.43921 615.6
+1034.52039 1226.8
+1034.85669 3361.0
+1035.18860 2986.0
+1036.18274 729.6
+1045.46497 1770.1
+1052.51306 738.0
+1061.21594 887.3
+1066.87231 11516.0
+1067.20532 17646.4
+1067.53967 15241.2
+1067.87488 9271.8
+1068.20898 4003.7
+1095.88184 2501.4
+1096.21875 2126.6
+1096.55066 3454.6
+1096.88025 1912.5
+1105.54626 704.1
+1121.56763 27483.1
+1122.56934 16608.7
+1123.57104 5278.6
+1124.57495 999.7
+1133.23926 829.2
+1149.10718 637.4
+1172.22375 796.2
+1177.23816 1615.3
+1177.56982 3009.9
+1177.90894 3557.2
+1178.24329 2867.3
+1198.17908 3511.1
+1210.92236 836.7
+1287.20313 654.6
+1354.47339 620.9
+1458.22119 611.6
+1525.39795 789.0
+1870.10107 831.4
+1878.66992 1096.8
+1878.97009 814.3
+1879.52917 18888.8
+1880.00134 570.9
+1881.50562 932.1
+1907.04578 7275.2
+S	2939	2939	1879.98224127
+Z	2	3758.117
+Z	3	5636.671
+532.55792 1950.3
+630.38196 935.5
+676.63916 662.6
+731.10938 591.3
+822.20795 624.3
+936.35547 603.0
+1064.13977 708.7
+1137.27820 595.3
+1154.63074 606.1
+1198.24768 3093.2
+1474.93848 639.4
+1525.38513 806.7
+1607.16675 661.5
+1797.55200 753.1
+1877.21997 928.1
+1878.34155 1040.0
+1879.10242 1268.1
+1879.54224 19902.4
+1879.95862 913.8
+1880.36206 842.9
+1880.71411 736.3
+1881.09082 944.3
+1907.03955 7214.0
+1930.52026 1121.3
+S	2941	2941	1880.01424127
+Z	2	3758.181
+Z	3	5636.767
+519.05902 638.9
+532.55328 1761.2
+676.62469 710.5
+778.30334 659.8
+795.82916 916.1
+965.75757 631.8
+1076.84802 685.9
+1195.05505 702.2
+1198.23230 3029.6
+1463.15979 660.6
+1486.63879 608.6
+1667.17566 772.0
+1723.46570 688.7
+1777.25745 814.8
+1856.72412 843.4
+1874.83325 665.9
+1878.80811 832.6
+1879.53369 18722.1
+1879.80212 4579.3
+1880.02209 1324.9
+1881.25854 733.2
+1907.04590 7586.2
+1918.87061 705.6
+1930.53625 1058.4
+1936.97278 747.0
+S	2942	2942	1907.46840793
+Z	2	3813.089
+Z	3	5719.13
+522.63464 629.9
+532.53955 2120.1
+549.17706 1001.0
+577.52728 704.0
+584.02808 652.2
+627.84515 641.7
+636.59918 578.8
+676.67950 868.0
+795.84137 772.0
+812.73590 654.1
+835.60181 659.8
+876.24353 550.6
+1197.81616 638.3
+1198.20874 3290.7
+1265.08203 577.4
+1283.99756 635.7
+1362.15442 567.2
+1416.72668 692.0
+1525.47827 1215.2
+1667.07349 661.2
+1713.07910 609.3
+1715.52930 658.6
+1770.21802 721.2
+1876.74731 1054.7
+1879.28748 5557.4
+1879.63818 18065.0
+1879.98376 4001.6
+1880.58044 1790.0
+1880.83484 1487.7
+1907.05652 7611.6
+1930.66431 1108.1
+S	2943	2943	606.734407933
+Z	2	1211.621
+Z	3	1816.928
+155.04366 666.9
+155.61151 586.1
+158.00243 548.7
+164.52765 616.8
+165.75452 745.2
+167.50195 572.9
+167.97804 606.8
+177.94185 608.9
+179.66223 519.6
+188.23792 713.9
+188.25880 948.4
+188.26862 868.9
+188.27969 1013.1
+188.28838 1014.9
+188.29893 1343.2
+188.30977 996.0
+188.32909 838.5
+192.32780 602.8
+195.15292 556.4
+198.96460 903.0
+199.26476 902.3
+199.30713 729.5
+199.33324 1781.7
+199.34256 1452.7
+199.35197 1176.1
+199.36256 1705.8
+199.37108 1515.4
+201.53745 529.4
+214.11797 881.5
+228.45129 572.0
+261.08978 1864.2
+265.81497 620.3
+271.53543 734.2
+299.25525 573.6
+308.90848 765.2
+325.15121 763.8
+327.18683 789.4
+342.17630 2893.3
+350.28296 658.5
+379.19714 2637.6
+381.37015 689.3
+396.22263 2856.3
+397.20758 890.7
+412.29047 1638.1
+419.25171 753.3
+423.23923 636.1
+424.21973 1916.9
+427.55310 676.3
+441.24457 2703.5
+491.25241 1970.7
+511.14478 584.9
+516.31195 806.4
+529.63623 2646.9
+529.97101 2680.3
+532.53088 2007.6
+539.82111 2596.7
+540.32257 1270.0
+559.35919 1340.1
+562.30170 1540.6
+564.93079 612.9
+573.65137 1645.4
+573.99152 1980.0
+574.32349 1027.6
+583.32111 704.5
+583.79968 1153.0
+584.30475 1168.4
+588.79510 1827.5
+589.35352 3319.8
+589.85468 1988.7
+592.23987 780.1
+592.31445 3310.7
+592.81696 2660.2
+603.39453 612.5
+630.42969 625.8
+643.92780 2170.1
+644.13434 962.7
+644.32990 1988.2
+644.52747 930.8
+644.87726 658.7
+645.70752 585.8
+653.36603 1265.9
+653.87683 6257.5
+654.37878 4689.8
+654.87946 1012.1
+663.54126 1028.4
+663.74097 1423.6
+663.93958 2902.8
+664.14124 600.0
+671.37762 1221.5
+676.62439 946.8
+680.38965 924.9
+680.89594 989.6
+689.39423 38736.0
+689.89600 27659.1
+690.39703 6954.6
+696.15454 1053.7
+696.35345 2488.1
+696.55597 3041.5
+696.75787 1831.4
+696.95093 1579.5
+698.74377 616.4
+718.30219 1028.8
+719.30902 987.7
+723.37164 1425.3
+723.86859 1243.3
+731.05725 576.3
+738.92804 20644.0
+739.42981 17050.1
+739.93237 4994.3
+748.57520 589.2
+782.09076 646.5
+793.95355 1291.4
+794.44556 4201.2
+794.94720 3120.6
+795.85370 991.3
+802.95770 23423.3
+803.45923 18914.3
+803.95953 6278.1
+831.39050 1477.8
+832.40100 1037.8
+850.49744 621.4
+851.45203 693.0
+856.94934 1449.3
+857.45300 1304.8
+859.97876 5378.0
+860.48096 5537.4
+860.98004 1891.8
+865.95807 1003.4
+930.45685 5211.8
+931.45941 2982.9
+1059.49622 1786.0
+1060.50537 1379.1
+1066.50854 827.7
+1143.07080 597.7
+1198.18298 3278.1
+1217.84790 634.9
+1269.66541 689.0
+1515.20728 612.6
+1659.22827 583.0
+1677.76050 603.2
+1694.97095 623.1
+1879.00586 1394.1
+1879.49939 19575.5
+1879.80688 1179.1
+1879.97498 1601.6
+1880.69141 862.3
+1906.77979 715.8
+1907.06470 7496.4
+1930.64233 980.0
+S	2945	2945	853.3428246
+Z	2	1704.838
+Z	3	2556.753
+225.12961 13109.5
+231.00470 13945.0
+248.14362 14091.2
+253.08226 15075.4
+267.93564 16171.1
+271.38705 19502.6
+288.58063 15230.8
+308.91595 17740.8
+336.71762 21775.2
+344.14218 16623.2
+345.76099 14352.5
+350.28790 20569.9
+352.54758 16067.0
+356.37552 15720.2
+371.65878 16790.1
+397.96350 15422.2
+400.58496 16427.7
+422.67490 16232.9
+427.56113 19973.6
+436.40054 20598.6
+483.83691 16250.0
+489.62561 16810.8
+524.72974 18457.0
+528.45465 17557.8
+532.55182 53109.3
+532.82385 15836.7
+577.27173 15796.0
+630.29749 16201.7
+630.44110 20923.6
+633.71185 16719.8
+655.37421 21412.7
+672.64893 16449.3
+676.67029 26624.0
+699.29596 23011.9
+763.23199 17020.4
+776.69653 15744.4
+793.37360 33087.7
+795.85248 33476.2
+864.25305 23846.0
+918.96661 17105.9
+977.23370 17303.6
+1005.52667 23159.2
+1007.05542 16547.6
+1011.40387 17000.1
+1095.58130 19942.5
+1124.33167 16061.4
+1177.30750 16941.4
+1182.42017 18081.8
+1188.06226 17276.7
+1198.23572 90357.8
+1204.10950 27342.9
+1273.01013 21767.4
+1479.77771 17349.5
+1490.69666 14140.8
+1770.15808 16798.9
+1793.48047 15136.4
+1816.78894 17670.8
+1860.17969 16812.3
+1870.15540 17207.1
+1878.73987 20446.9
+1878.96094 20737.1
+1879.33459 39397.1
+1879.61707 522947.6
+1881.38403 22276.1
+1881.69702 17362.8
+1881.98315 17895.3
+1906.12964 17883.7
+1907.09131 182662.4
+1930.67725 21151.5
+1954.87695 16736.6
+S	2946	2946	852.835407933
+Z	2	1703.823
+Z	3	2555.231
+239.13911 993.1
+239.23671 638.6
+240.88670 532.6
+241.59027 586.3
+247.02634 552.9
+271.53766 583.4
+284.16052 715.6
+303.21329 613.4
+305.31094 569.0
+308.91000 732.6
+313.47366 738.0
+320.09064 876.6
+332.10767 727.2
+332.15994 608.8
+342.28302 677.0
+350.17142 1170.0
+366.95230 572.3
+368.18152 1953.6
+372.21069 642.4
+381.36987 812.8
+386.24069 1131.6
+398.98544 590.7
+404.25015 4014.0
+405.25180 595.9
+406.35635 700.4
+426.24026 615.3
+426.73459 569.5
+427.18304 870.1
+427.55710 774.9
+445.19266 2248.1
+457.23596 745.6
+465.19861 2271.5
+482.67404 806.2
+483.20746 2180.5
+484.20364 1428.7
+484.27390 1017.5
+489.20135 831.0
+492.61133 708.8
+500.33469 721.2
+502.21436 1815.7
+502.69263 736.2
+515.28198 1270.8
+518.22742 2544.2
+525.69562 592.6
+528.25323 943.4
+532.53638 1763.9
+533.29077 2062.4
+546.25800 1229.6
+550.19360 954.3
+552.22858 2869.1
+558.22235 3347.1
+559.23102 680.8
+568.20642 2954.0
+569.20789 793.1
+586.21704 17082.2
+587.22131 4246.7
+594.42767 707.4
+597.28186 2626.0
+598.26202 586.1
+611.25592 695.4
+611.31592 1438.9
+611.81714 929.7
+615.29773 1562.9
+621.77783 574.0
+629.26056 1605.1
+630.32074 1647.4
+630.42596 726.2
+630.82190 749.4
+631.80762 596.2
+643.26782 1430.4
+646.31616 959.3
+647.27478 1414.8
+661.28735 1306.9
+664.33282 12554.2
+665.30365 2863.8
+666.31079 988.2
+668.82709 1333.4
+669.33484 1129.1
+671.30646 4825.9
+672.30975 1372.8
+676.66113 711.8
+676.96649 730.8
+679.34363 611.8
+681.29126 2899.9
+684.09027 599.7
+686.29993 659.7
+690.36206 647.8
+696.35626 3579.7
+697.36237 1478.4
+697.94745 620.4
+699.30103 22399.1
+700.30383 6496.6
+702.34271 1237.8
+711.85828 4094.2
+712.10992 6168.1
+712.35974 5799.4
+712.60876 2467.1
+714.36670 4848.2
+715.37244 1885.8
+716.37976 700.4
+719.35120 4545.5
+719.85510 2963.6
+720.35370 1293.5
+728.31934 1395.8
+729.62085 909.9
+729.85828 799.4
+730.12170 824.4
+731.37964 650.0
+738.35602 1267.3
+746.33893 1970.3
+748.36090 743.4
+751.38422 822.2
+751.62720 1000.0
+757.35791 1033.7
+766.89209 1870.2
+767.39221 1825.9
+774.36847 1641.8
+775.36578 9443.9
+775.89258 12987.7
+776.39978 8347.3
+776.89526 2563.2
+792.59387 754.8
+793.37573 25993.1
+794.37769 10526.7
+794.90045 2416.0
+795.36487 862.9
+795.41437 1213.6
+795.87256 864.3
+796.40924 1462.7
+796.90515 738.5
+800.40558 11060.7
+800.65686 20558.4
+800.90735 16515.1
+801.15833 10244.2
+801.41010 5721.9
+801.66437 1417.3
+801.92194 1156.8
+808.02075 2618.7
+808.22046 4175.8
+808.41907 4151.9
+808.62097 4697.6
+808.81598 1030.2
+809.02563 875.4
+812.38416 14290.9
+813.38745 5479.4
+814.38324 734.7
+814.96545 1306.0
+822.16278 3041.6
+822.41388 5086.5
+822.66541 3436.5
+822.91376 2357.2
+823.17059 1300.9
+824.89294 3236.4
+825.39447 2438.9
+825.89368 1793.9
+828.42279 1121.8
+830.42120 2789.0
+830.92041 1716.5
+831.38544 3358.6
+832.39142 1711.9
+834.40057 1380.2
+834.89856 1401.7
+874.42694 870.4
+878.92706 1346.6
+879.43146 1322.3
+883.18005 1290.6
+883.43085 2768.3
+883.68268 3984.3
+883.93439 1988.6
+892.44336 26016.5
+893.44678 10367.9
+894.44244 1593.2
+907.94800 2327.3
+908.19922 5871.8
+908.44940 5110.7
+908.70062 3686.7
+908.95715 1945.4
+911.45331 7454.9
+912.45624 2910.8
+924.22589 1153.6
+924.47260 831.5
+930.45880 4200.7
+931.46350 2799.0
+931.71716 1019.4
+931.96436 1540.9
+932.22314 2368.6
+932.46667 1702.5
+936.21844 4996.8
+936.46991 10002.3
+936.71954 12174.1
+936.96948 10045.2
+937.22296 5610.7
+937.46350 2508.4
+943.48993 824.3
+948.80920 19148.5
+949.14325 36224.5
+949.47754 32360.0
+949.81158 19615.1
+950.14709 7197.1
+950.48035 1624.2
+950.80756 763.4
+956.98639 1109.4
+958.13275 676.0
+960.74146 2375.3
+960.99170 2800.9
+961.24036 4452.6
+961.50037 1295.6
+961.74622 954.0
+972.48883 3385.2
+972.82172 8264.5
+973.15631 6065.8
+973.49030 3593.0
+973.82983 1724.4
+974.16772 969.1
+975.73743 1856.9
+987.50586 1070.1
+999.74426 1095.2
+999.99091 1666.6
+1001.49829 11460.6
+1001.83350 20423.8
+1002.16718 14150.3
+1002.50250 7712.7
+1002.83575 5386.4
+1003.16864 2784.8
+1004.00610 2111.8
+1004.24725 4708.8
+1004.49811 2925.3
+1004.75098 3737.0
+1004.99945 1679.8
+1005.25623 1144.8
+1005.52747 25154.8
+1006.53107 11796.2
+1007.53314 1467.1
+1009.45703 814.6
+1010.01971 793.7
+1010.48413 585.2
+1017.53717 754.6
+1027.46289 2349.1
+1028.45447 990.0
+1034.51868 2147.5
+1034.85229 3135.1
+1035.19519 2688.0
+1035.52490 2312.3
+1040.49341 2692.6
+1041.49756 2195.8
+1043.54431 2813.1
+1044.54541 1690.5
+1045.46753 2112.9
+1046.47070 1305.3
+1057.27686 771.1
+1066.87219 10969.3
+1067.20605 23380.7
+1067.54016 22097.8
+1067.87476 14598.5
+1068.20898 8110.1
+1068.54236 2616.2
+1095.87964 2812.6
+1096.22034 3946.9
+1096.55127 4775.7
+1096.88611 3892.4
+1097.21924 1045.0
+1118.61011 9342.7
+1119.61450 5371.2
+1122.56384 943.0
+1123.56152 1493.7
+1124.58203 1911.5
+1133.81226 708.8
+1139.22424 1392.4
+1140.54236 793.2
+1156.62183 1070.0
+1177.23669 1190.0
+1177.57764 3800.9
+1177.91333 3894.1
+1178.24036 3784.0
+1178.57581 1585.8
+1198.19580 3336.2
+1203.60059 1092.7
+1221.61987 8768.4
+1222.62341 6328.8
+1223.62439 1103.2
+1241.56482 1031.4
+1253.44421 650.8
+1259.63049 1378.6
+1261.61609 876.5
+1291.58215 942.9
+1315.94202 692.4
+1318.65063 1061.7
+1319.62073 685.5
+1336.64697 9216.0
+1337.65002 5720.5
+1338.63782 1631.2
+1419.66260 692.9
+1437.69604 10478.6
+1438.69617 7852.8
+1439.69873 2097.3
+1444.93884 599.4
+1514.47461 667.5
+1539.69971 805.3
+1557.72083 4683.2
+1558.72253 3743.1
+1575.73059 1722.4
+1576.73254 1204.3
+1642.19629 678.4
+1658.41064 591.7
+1751.97437 676.3
+1877.76855 764.9
+1878.52380 939.2
+1878.85608 1438.6
+1879.19543 4171.6
+1879.57947 18717.9
+1879.97827 3473.2
+1881.40576 801.6
+1907.05347 7897.1
+1930.68030 976.4
+S	2947	2947	853.843407933
+Z	3	2558.255
+Z	2	1705.839
+230.90912 646.9
+239.13913 2396.6
+249.10986 668.6
+253.46606 589.7
+257.05884 732.3
+258.14505 1907.7
+267.13327 1368.1
+276.15610 1957.4
+287.91821 647.3
+295.61069 611.9
+304.13425 759.8
+304.16599 1119.1
+312.15515 1030.4
+320.09122 2752.2
+330.16617 671.5
+350.17078 2319.8
+350.28461 723.5
+368.18188 5406.2
+370.14502 1041.3
+386.23898 3205.7
+387.17502 886.8
+389.18674 1285.1
+390.12775 619.1
+403.17029 782.5
+404.25012 9425.2
+405.08060 665.4
+405.25369 1576.3
+415.16772 1032.7
+425.23785 1036.0
+427.18341 1736.4
+433.17630 1761.6
+445.19284 4477.7
+465.19830 4218.2
+465.43573 628.0
+483.20706 6159.2
+484.20450 735.4
+489.20050 1290.1
+493.27786 825.0
+500.21719 1161.7
+515.28192 4050.3
+517.19745 845.2
+518.22711 3742.1
+524.23389 865.2
+528.24548 1949.7
+530.19006 999.7
+532.57397 1635.9
+533.29248 6543.8
+534.21863 1491.7
+534.29602 1543.8
+540.20795 842.7
+541.19427 1113.8
+546.25970 3711.1
+548.20349 910.5
+549.19708 665.5
+550.19574 1210.6
+552.22784 5679.6
+553.23206 1899.6
+558.22217 8292.8
+559.22668 2365.6
+564.91132 603.4
+568.20624 6807.3
+569.21057 2091.0
+571.30249 603.5
+586.21680 38064.7
+587.22021 12701.4
+588.22028 2037.6
+611.24823 1061.9
+611.31384 4167.0
+611.81525 1809.5
+617.29352 1438.5
+619.29633 707.5
+621.32507 777.8
+622.32117 1077.2
+623.32220 1087.3
+629.25861 2821.7
+630.32227 3097.8
+630.45563 786.4
+630.82623 1413.0
+631.32050 1052.3
+643.27295 1714.0
+645.32544 1191.2
+646.32129 2687.1
+647.27032 2662.5
+648.26971 958.9
+653.29327 1870.9
+655.31171 1060.5
+661.28687 1525.4
+664.33258 31835.5
+665.30066 4563.4
+665.34875 4675.0
+666.30981 2376.6
+666.83472 940.4
+667.32715 1678.2
+668.58557 696.5
+668.82501 3540.3
+669.33002 2729.5
+671.30658 12631.6
+672.31049 4299.6
+673.31213 888.5
+676.66809 905.8
+681.29053 6595.6
+682.29340 2049.5
+687.30511 1176.2
+688.31586 594.6
+699.30096 57193.0
+700.30402 17824.4
+700.82831 575.7
+701.30548 4437.8
+702.34589 2714.8
+703.35840 986.3
+705.97394 660.1
+710.35248 986.6
+719.35107 9232.6
+719.85223 6534.0
+720.35321 3419.3
+720.84308 776.9
+721.38214 912.8
+723.37592 1911.8
+723.87073 1511.8
+724.37927 1064.4
+724.87769 725.1
+728.32983 2209.8
+731.17834 789.0
+738.35846 2746.4
+738.86285 1180.6
+739.36060 1220.6
+744.33954 632.4
+746.33856 4856.3
+747.34296 1238.3
+756.35779 1461.6
+757.35211 2877.2
+758.36548 926.8
+764.34320 1045.9
+766.88660 4901.5
+767.39490 2094.9
+767.89063 1032.3
+768.39557 704.4
+771.90479 1116.0
+774.36890 1564.7
+775.36517 17902.2
+775.89343 27074.1
+776.33899 3145.6
+776.40369 11531.6
+776.89575 9407.4
+777.40887 2026.4
+779.91211 1596.1
+780.41742 2646.3
+780.91919 2251.5
+781.40356 913.2
+782.09027 939.4
+785.89752 1718.4
+786.40814 1041.2
+793.37543 64117.8
+794.37793 26370.1
+794.90021 5889.7
+795.37225 6148.9
+795.89874 2030.4
+796.37598 1527.6
+800.38275 877.1
+805.37445 1464.8
+807.42590 961.3
+810.00342 705.1
+812.38538 36959.0
+813.38611 14869.9
+814.38940 4213.5
+815.42767 2269.7
+815.93329 3312.2
+816.42993 3273.1
+816.94122 847.8
+821.40527 910.5
+824.89343 6843.0
+825.39484 4910.0
+825.89417 3088.1
+826.39557 1076.5
+828.40533 672.0
+830.42010 5269.5
+830.92053 3717.8
+831.01709 686.3
+831.38293 6268.1
+832.39063 2567.5
+834.40570 2676.8
+834.90295 1978.2
+836.45819 1791.9
+845.87756 616.9
+874.43365 3326.0
+875.43207 1148.1
+876.80176 895.0
+892.44330 66712.9
+893.44641 29050.7
+894.44592 9098.3
+895.26666 722.2
+895.45111 2414.5
+911.45313 18894.9
+912.45502 7911.5
+913.46124 2048.8
+916.46222 791.4
+917.96918 784.6
+923.44696 3575.7
+924.44751 2522.5
+925.44196 952.8
+930.45874 5873.5
+931.46075 2628.7
+932.45587 1244.8
+935.40637 704.4
+949.48309 731.8
+966.50842 1269.1
+976.47101 757.3
+987.51794 3075.5
+988.52362 1850.5
+994.48102 2771.5
+995.48553 2276.2
+996.48859 801.8
+1002.49707 883.2
+1005.52753 58792.9
+1006.53052 29416.2
+1007.53143 9368.6
+1008.53400 1955.7
+1020.81018 757.0
+1022.47711 884.8
+1025.53088 863.6
+1030.50818 831.1
+1031.02612 1373.0
+1031.52893 1476.9
+1040.49414 6616.9
+1041.49841 2987.2
+1043.54553 4173.8
+1044.54236 2415.5
+1045.53967 760.2
+1075.51501 1013.0
+1095.05029 1369.9
+1095.55505 1168.4
+1100.59460 1164.5
+1108.57214 1042.7
+1118.61145 18936.0
+1119.61438 11145.4
+1120.61609 3961.7
+1121.62036 971.9
+1156.63123 1228.0
+1168.06763 948.9
+1168.58533 1158.7
+1169.08093 1972.4
+1169.60388 1032.5
+1170.09460 846.6
+1171.53638 2060.9
+1172.53162 894.8
+1198.28369 3453.1
+1203.60583 2332.6
+1204.09912 3857.5
+1204.60425 5886.7
+1205.10657 3444.8
+1205.59387 1121.0
+1221.61975 19758.9
+1221.85962 912.6
+1222.62305 11122.7
+1223.62292 5211.9
+1224.63269 963.1
+1259.63367 2006.3
+1260.64026 2356.4
+1261.62744 1006.4
+1300.56763 1179.5
+1318.64172 1460.4
+1319.63989 1243.2
+1332.67432 797.9
+1336.64832 16444.5
+1337.65088 10729.4
+1338.65552 5098.4
+1339.64697 1621.7
+1374.67297 1168.8
+1419.68530 2155.5
+1420.68542 934.6
+1421.68188 919.0
+1437.69543 21931.8
+1438.69678 14422.1
+1439.69775 8109.0
+1440.69263 3330.2
+1446.72424 775.2
+1519.65161 649.5
+1539.71606 2429.1
+1540.72009 1775.5
+1557.71716 9040.5
+1558.71594 6575.8
+1559.71802 2919.4
+1560.71289 957.0
+1575.72449 3499.2
+1576.73169 2586.8
+1632.68860 649.5
+1664.84741 695.6
+1777.06860 991.1
+1876.28772 908.7
+1878.31128 720.0
+1879.35706 2663.9
+1879.60791 19906.6
+1907.07031 7075.8
+1918.93738 791.5
+1954.58984 741.5
+S	2949	2949	1879.99340793
+Z	2	3758.139
+Z	3	5636.705
+532.51306 1708.4
+676.62445 1076.7
+682.99091 689.9
+691.39270 732.4
+760.84668 665.5
+776.70239 684.0
+778.43536 644.3
+795.83691 934.9
+1022.38434 639.8
+1057.22437 751.2
+1115.10413 573.4
+1198.14673 3499.1
+1275.51819 644.5
+1327.50537 648.5
+1766.40625 655.6
+1776.99377 939.3
+1878.98621 1896.7
+1879.48083 19492.0
+1879.73547 3218.1
+1879.95691 1923.0
+1880.98889 728.1
+1907.05127 7723.1
+1930.46936 867.6
+1998.01575 744.3
+S	2950	2950	708.1010746
+Z	4	2828.373
+183.09459 621.1
+186.45917 525.1
+188.24103 946.8
+188.28682 2214.5
+188.30272 1634.1
+188.32031 1104.7
+188.50467 525.6
+189.77350 529.9
+198.96387 747.2
+199.27010 741.8
+199.29628 774.7
+199.32994 865.0
+199.33815 1954.2
+199.34912 1616.5
+199.36269 1459.9
+199.45131 826.4
+199.45963 620.2
+205.65941 701.9
+225.91656 608.3
+237.01849 652.8
+237.19005 607.6
+237.61986 648.0
+258.86469 621.9
+267.25629 661.1
+317.01062 612.6
+337.14609 610.7
+350.26804 739.6
+351.46994 544.6
+361.48590 626.4
+374.32202 566.6
+382.90146 594.0
+392.36435 606.5
+427.55432 909.0
+442.87988 655.6
+478.39847 576.6
+481.24301 2024.2
+482.67184 813.9
+487.79266 567.8
+532.53632 1952.9
+543.28052 2162.4
+549.16882 767.7
+550.79846 1161.4
+551.29956 1455.1
+560.17096 676.0
+568.75458 658.6
+607.33868 3011.3
+607.83960 2186.0
+608.33954 1270.5
+611.04962 676.9
+616.34583 829.5
+617.33868 1801.6
+620.53473 725.7
+633.22754 701.2
+673.34827 700.9
+673.51184 803.5
+673.68475 1128.3
+682.36340 680.0
+693.14020 576.4
+703.72504 659.4
+709.59039 640.1
+734.60193 592.0
+739.07123 537.4
+763.83142 755.1
+795.73743 728.6
+796.42163 2726.0
+797.42358 1089.3
+870.48083 2745.5
+871.48047 1210.5
+886.09546 2238.1
+886.44012 1189.8
+887.99109 618.7
+909.17719 670.8
+909.36328 837.5
+943.49286 1196.8
+959.68933 696.0
+1017.54828 1571.1
+1028.31970 629.9
+1093.50745 679.7
+1100.58984 854.5
+1119.61499 933.7
+1198.20630 2975.1
+1224.10144 560.1
+1457.79590 757.7
+1489.06274 710.2
+1667.15735 747.9
+1748.03357 606.1
+1777.07813 900.7
+1822.57483 639.7
+1870.13025 898.8
+1878.07593 594.1
+1879.54553 19460.1
+1879.85071 2945.0
+1882.15063 825.9
+1906.97656 7066.1
+1918.85315 914.9
+1930.63684 1099.6
+S	2951	2951	852.1978246
+Z	3	2553.318
+Z	2	1702.548
+226.97824 1293.1
+234.90198 1427.9
+239.13832 1470.5
+240.28770 1394.9
+251.94574 1193.6
+258.14487 1714.6
+277.31464 1231.3
+281.18896 1183.8
+286.49896 1330.3
+294.68628 1234.5
+320.09186 1584.4
+350.17184 1833.9
+350.19312 1105.6
+358.30164 1382.4
+364.75644 1325.4
+368.18414 2208.9
+386.23883 2175.7
+404.24954 6420.1
+427.17950 1514.2
+445.19385 2760.5
+451.93222 1299.4
+463.33871 1665.6
+465.20004 1897.4
+483.20743 4844.7
+483.83612 1293.8
+502.27130 1506.5
+503.87292 1419.1
+515.28174 2819.6
+518.22571 3621.0
+524.21851 1242.7
+532.50488 3742.4
+533.28973 4583.4
+549.13354 2369.3
+552.22900 3419.4
+554.17139 1732.0
+558.22198 5696.4
+559.23059 1180.1
+568.20654 5646.7
+573.65509 1354.4
+583.19336 1463.9
+586.21637 24139.4
+587.21906 5844.3
+596.78925 1460.0
+611.30963 2144.7
+619.34766 1233.2
+629.25732 2665.5
+630.32373 1882.5
+640.84882 1379.7
+655.30859 1402.4
+664.33252 20697.1
+665.34686 4071.8
+668.82324 2637.9
+669.33020 1512.3
+671.30573 6783.7
+672.31073 2361.9
+681.28790 4475.1
+699.30096 33175.2
+700.30286 9942.2
+701.30774 1720.7
+702.35028 1827.4
+719.35052 7276.7
+719.85211 4359.0
+728.33362 1850.7
+731.09332 1620.2
+741.59210 1347.8
+746.33429 1617.2
+756.35150 1695.3
+766.88892 3119.3
+767.90442 1629.1
+775.36420 12398.0
+775.89270 16676.9
+776.40356 7096.9
+776.89642 3972.0
+793.37500 38960.6
+794.37738 15655.2
+794.89807 1957.6
+795.36163 2570.2
+795.85437 1723.1
+795.91187 1189.3
+800.91681 1439.6
+812.38373 18313.5
+813.38629 8194.1
+824.89728 5298.8
+825.39478 3796.4
+827.49817 1292.3
+830.41571 2803.7
+830.91681 2607.2
+831.38159 2103.0
+832.37982 2263.7
+874.43188 2056.4
+890.61322 1358.9
+892.44263 42161.8
+893.44495 15414.0
+894.44397 4892.6
+911.45380 9698.8
+912.45294 5004.4
+930.45605 4150.7
+931.46912 2026.6
+949.48138 2518.7
+960.73724 1480.5
+967.37347 1310.9
+987.52063 1882.5
+1005.52686 39100.6
+1006.52936 17153.7
+1007.53918 4600.5
+1019.66431 1640.9
+1040.49951 3873.0
+1041.50647 2198.0
+1043.54199 3199.3
+1057.24121 2225.3
+1067.54785 2712.5
+1099.67859 1480.3
+1118.60901 10214.0
+1119.61353 8200.1
+1187.99133 1765.0
+1198.13232 7668.3
+1221.62012 13152.8
+1222.62415 7694.4
+1223.62793 2526.3
+1336.64661 10259.6
+1337.64709 7193.0
+1338.65417 2439.0
+1419.69751 1389.9
+1437.69336 15227.6
+1438.69641 9672.5
+1439.70471 3517.2
+1539.69556 2394.9
+1557.70789 4727.2
+1558.71057 5055.7
+1563.27600 1315.4
+1600.15149 1483.6
+1644.72644 1485.2
+1760.59717 1627.8
+1875.70435 1526.7
+1878.04395 1521.3
+1879.16406 4181.3
+1879.51477 41962.0
+1879.83960 4884.6
+1906.76001 2082.6
+1906.99744 15363.6
+1918.91223 1579.4
+1930.54883 2720.9
+S	2953	2953	1879.9458246
+Z	3	5636.562
+Z	2	3758.044
+528.53894 621.9
+532.54120 2031.5
+567.15649 606.7
+651.34509 592.9
+676.59680 785.6
+854.77197 654.5
+858.08203 1126.7
+1006.55933 762.9
+1057.17969 1112.8
+1070.52002 607.8
+1198.21057 3500.1
+1525.49341 863.8
+1667.21753 634.7
+1710.90332 639.4
+1872.04614 1101.4
+1879.13684 808.8
+1879.42004 21502.4
+1879.71204 729.5
+1882.18274 728.7
+1907.13623 7425.5
+1930.62256 962.2
+S	2954	2954	1907.38140793
+Z	3	5718.869
+Z	2	3812.915
+532.50177 2115.1
+587.68683 567.1
+630.45154 1028.6
+676.62408 919.0
+681.32568 707.6
+731.17706 789.2
+756.25073 736.6
+795.84979 1108.4
+808.54572 688.4
+988.14618 613.9
+989.35016 587.1
+1057.21704 965.9
+1187.76892 689.3
+1198.12207 3466.5
+1718.56860 1093.6
+1828.64270 647.4
+1874.00244 1001.2
+1879.13635 825.3
+1879.49036 20348.8
+1907.06702 7232.4
+1920.63354 577.9
+1930.73779 1085.4
+S	2955	2955	828.850407933
+Z	2	1655.853
+Z	3	2483.276
+232.85944 629.1
+240.19699 577.8
+252.01813 532.5
+255.29700 684.2
+287.43768 599.7
+302.89066 606.4
+303.86826 579.3
+313.22278 1318.2
+314.14786 1011.7
+341.21716 882.2
+350.27994 891.8
+368.82272 620.6
+381.37170 639.7
+417.24689 990.3
+445.24268 2771.7
+447.22031 1377.7
+473.90018 599.3
+475.29257 948.7
+494.76819 580.7
+499.37158 588.0
+530.40540 755.5
+532.48578 1645.8
+534.29108 23312.7
+535.29291 1196.9
+540.26471 1093.0
+586.32703 669.7
+598.30206 936.5
+604.33978 1134.8
+608.28564 4889.6
+623.30371 1074.5
+626.29523 5311.8
+673.07373 603.1
+676.65613 1039.9
+694.34076 680.6
+699.36682 1042.5
+703.40594 2009.2
+705.74152 768.3
+711.38477 1818.9
+712.06470 6107.2
+712.40100 5745.4
+712.73535 2026.8
+721.36945 4844.4
+739.37988 21144.1
+740.38849 1607.7
+749.75354 1505.7
+750.09436 1220.6
+755.91205 1142.3
+792.40448 1026.2
+794.48065 1180.2
+802.04657 875.9
+806.48450 696.4
+808.47455 732.9
+810.42023 2046.1
+812.44781 1147.1
+816.49084 1153.6
+897.50616 2973.1
+898.00427 1452.7
+932.51642 789.5
+933.02838 3042.1
+933.52161 2540.6
+934.03278 989.1
+945.54065 1798.9
+968.54999 970.5
+1016.57257 2244.8
+1017.56989 903.8
+1058.58716 1875.7
+1059.07935 1193.9
+1067.09631 4592.7
+1067.59375 32136.5
+1068.09473 26470.9
+1068.59497 14066.5
+1069.09583 4177.7
+1080.29932 694.1
+1110.41260 612.8
+1117.61609 2097.9
+1185.22876 686.5
+1187.81628 886.7
+1188.65601 1191.9
+1198.08862 3097.5
+1485.55127 739.2
+1564.90393 869.3
+1719.36499 1040.1
+1840.28906 613.3
+1876.72058 745.9
+1878.94995 1692.0
+1879.15869 1041.8
+1879.58691 19337.3
+1879.99756 951.7
+1880.22156 1871.3
+1880.74231 988.5
+1897.31531 667.3
+1907.06372 7458.8
+1930.65808 888.6
+S	2957	2957	1879.97940793
+Z	2	3758.111
+Z	3	5636.663
+532.54376 1742.0
+581.26086 579.5
+650.98193 620.8
+676.69354 788.1
+731.61621 702.3
+776.78949 632.7
+795.82416 925.6
+855.24982 694.4
+858.49774 643.6
+864.72961 676.7
+1020.83655 586.1
+1044.44446 581.6
+1082.20996 785.9
+1187.97095 669.6
+1198.21716 3421.3
+1403.15955 678.9
+1435.31506 618.7
+1489.63367 709.8
+1495.70715 603.9
+1525.57947 1186.9
+1562.38501 659.3
+1587.11719 587.4
+1588.39429 776.5
+1718.46667 1613.7
+1874.23254 730.6
+1877.93835 647.3
+1878.52148 928.2
+1878.72363 1481.9
+1879.12341 2554.9
+1879.68091 17905.5
+1880.27222 1588.4
+1880.60120 1687.5
+1881.43823 803.9
+1907.11401 7430.5
+1907.51514 615.2
+1907.64661 550.2
+1916.43921 609.3
+1930.82056 1136.0
+S	2958	2958	1907.56940793
+Z	3	5719.433
+Z	2	3813.291
+532.57050 1735.9
+549.17261 894.6
+705.13947 793.6
+795.83533 1040.7
+904.32166 669.6
+1002.45947 626.7
+1188.08789 763.0
+1198.27344 3537.7
+1378.51111 624.0
+1407.98608 612.0
+1488.73633 741.1
+1667.36377 645.8
+1717.57703 1293.3
+1812.26233 727.2
+1873.15222 1001.4
+1877.55200 1045.9
+1878.01477 846.4
+1878.89294 1259.4
+1879.28699 1934.2
+1879.67188 18560.5
+1880.21570 1938.4
+1880.47192 1223.8
+1881.36914 1062.7
+1907.10303 7132.6
+1930.66943 1030.0
+S	2959	2959	1198.6298246
+Z	2	2395.412
+Z	3	3592.614
+316.20456 586.6
+326.75732 577.7
+327.14151 617.7
+347.32150 615.8
+381.33737 609.0
+415.35587 687.6
+473.50082 639.8
+498.36487 671.2
+532.52570 2132.2
+535.79578 661.8
+545.21967 950.5
+552.55920 683.5
+676.67230 811.0
+679.42065 714.9
+681.08746 641.5
+697.96832 671.9
+702.65442 687.3
+713.39722 643.6
+741.56873 644.9
+782.65814 704.8
+1057.30273 870.3
+1198.16870 3149.1
+1454.44043 664.3
+1525.36560 916.8
+1609.27014 601.4
+1751.29187 684.5
+1877.41272 683.4
+1878.75781 904.7
+1879.61353 17893.3
+1879.88525 3829.4
+1880.13257 2012.3
+1880.46045 1356.9
+1907.12305 6151.0
+S	2961	2961	1880.05499127
+Z	2	3758.262
+Z	3	5636.89
+532.50726 1693.1
+534.74689 608.1
+581.18713 562.1
+598.88525 615.3
+624.99988 807.5
+630.38971 783.7
+639.59302 671.1
+640.53125 579.2
+643.15924 710.7
+676.66394 755.3
+756.40460 592.4
+795.86206 1182.9
+799.68689 634.2
+1198.13257 3164.6
+1379.06360 638.5
+1520.43079 642.8
+1525.36072 727.7
+1666.95557 587.3
+1870.96509 1123.3
+1871.24158 820.4
+1879.01294 1794.9
+1879.58887 19080.7
+1879.89319 2694.3
+1880.12439 1624.4
+1907.04614 7406.5
+S	2962	2962	1907.45440793
+Z	3	5719.088
+Z	2	3813.061
+532.52637 1708.5
+572.83246 737.9
+630.39404 831.0
+641.00214 735.1
+676.68896 744.4
+717.68280 697.6
+742.81750 577.4
+793.38342 623.4
+795.83234 732.9
+911.95129 691.0
+1040.37183 623.2
+1047.09644 652.6
+1068.38696 710.0
+1158.83044 639.6
+1198.06006 649.0
+1198.18457 2850.5
+1205.49768 692.3
+1510.48328 609.5
+1777.31580 811.3
+1879.31140 6002.5
+1879.67444 17548.1
+1880.07446 4468.0
+1880.38293 2869.7
+1880.73120 1536.7
+1882.07813 663.1
+1907.12720 7477.5
+S	2963	2963	1198.63440793
+Z	2	2395.421
+Z	3	3592.628
+326.00870 597.6
+333.32486 599.8
+347.91895 610.9
+349.34991 604.1
+371.64877 594.1
+389.13306 706.6
+484.01532 663.7
+502.96234 697.9
+532.53436 2205.7
+549.19122 779.2
+676.65405 1124.4
+742.20270 774.5
+795.87207 950.2
+858.10425 950.0
+1010.79852 650.0
+1145.29236 672.5
+1161.69910 684.5
+1198.18982 3455.8
+1243.02368 668.7
+1278.68640 656.4
+1337.01782 660.9
+1465.19519 706.9
+1550.29956 747.2
+1590.69043 624.7
+1739.73096 626.5
+1777.05237 888.4
+1870.26819 877.4
+1873.22388 712.4
+1878.67310 981.6
+1879.02417 2007.1
+1879.58667 19643.6
+1880.15918 1564.4
+1880.53870 571.2
+1880.81482 701.9
+1906.85815 994.8
+1907.10693 7234.0
+1907.68176 813.3
+1930.72546 775.1
+S	2965	2965	1880.0778246
+Z	2	3758.308
+Z	3	5636.958
+532.54010 1788.9
+541.69562 561.9
+630.42175 888.0
+676.65588 928.3
+676.72998 701.4
+731.13989 790.0
+754.72076 670.9
+795.83466 847.0
+1159.75159 683.3
+1198.20593 3452.2
+1525.47253 1014.0
+1776.84399 700.5
+1854.49878 660.5
+1872.88086 722.3
+1878.55103 1399.4
+1879.14771 2408.2
+1879.55127 19717.0
+1879.94519 2477.5
+1880.57153 1532.0
+1884.34082 654.2
+1907.05298 7706.2
+1930.63416 1241.7
+S	2966	2966	1907.50624127
+Z	3	5719.243
+Z	2	3813.165
+532.55182 1960.9
+633.10327 604.6
+676.66656 979.0
+686.51349 605.9
+977.02496 547.1
+1198.23755 3356.9
+1240.56494 577.2
+1385.58911 642.6
+1879.08484 3840.3
+1879.29968 5145.6
+1879.60339 18258.0
+1879.88245 4438.6
+1880.68872 789.7
+1881.11475 879.9
+1881.58594 865.7
+1907.03992 7100.8
+1973.55054 563.2
+S	2967	2967	869.9643421
+Z	4	3475.82607
+227.38503 597.3
+233.56892 808.2
+236.06772 654.3
+241.36978 546.5
+254.48524 593.7
+255.56433 616.8
+268.75409 516.9
+287.64984 610.5
+329.19690 704.8
+347.05948 623.1
+347.28799 667.3
+402.83469 595.4
+403.04034 554.0
+427.53253 831.3
+428.17606 639.2
+432.66309 590.6
+455.96017 598.5
+480.93878 589.8
+482.65030 543.3
+482.68735 675.2
+507.36020 564.6
+532.53137 1785.0
+549.14880 743.8
+556.00513 626.7
+560.45160 723.9
+580.16479 656.5
+630.38416 930.1
+632.76746 563.1
+676.64465 867.5
+751.20148 595.7
+795.85168 642.8
+850.47211 4945.9
+851.47870 3197.3
+852.48810 740.8
+861.11115 581.4
+956.81293 650.6
+957.96289 734.5
+978.87128 761.8
+979.99567 1245.2
+980.49969 1067.0
+1013.40649 562.8
+1019.67480 795.9
+1057.25964 760.4
+1118.06165 652.7
+1198.19177 3151.9
+1227.34338 773.8
+1251.00220 585.2
+1525.39368 849.2
+1763.47534 575.3
+1772.27466 698.1
+1878.06531 854.1
+1878.78223 937.8
+1879.55981 18691.8
+1879.82947 3678.1
+1880.03210 1789.8
+1880.30237 1176.1
+1906.98132 7019.7
+1930.51819 810.4
+1939.19983 674.9
+S	2969	2969	1879.9678246
+Z	3	5636.628
+Z	2	3758.088
+532.51678 2029.9
+549.17877 698.4
+621.82739 577.8
+630.43530 1049.9
+635.33844 696.4
+676.65820 993.1
+690.79413 707.9
+747.29370 556.6
+795.83850 1169.7
+799.11877 650.9
+810.39282 607.1
+814.47528 552.6
+823.75592 697.6
+852.20251 555.8
+864.60876 618.8
+983.47290 622.4
+1057.25977 732.8
+1198.15686 3595.1
+1525.51892 787.7
+1776.89758 767.4
+1860.09241 749.6
+1878.54285 1570.7
+1879.17078 1402.8
+1879.58508 19536.6
+1880.07874 1621.8
+1880.62976 1729.5
+1882.07166 729.1
+1907.05310 7407.7
+1930.68127 940.1
+1984.05591 894.2
+S	2970	2970	730.374241267
+Z	2	1458.901
+Z	3	2187.847
+190.11873 562.3
+198.96199 806.7
+199.24792 713.6
+199.26247 731.1
+199.30362 1047.6
+199.31725 623.4
+199.32941 1587.0
+199.35233 1472.5
+199.36475 1463.7
+199.38249 1215.1
+199.40973 655.2
+214.92924 591.1
+227.34073 638.0
+234.21364 640.8
+245.62561 633.0
+248.69550 615.7
+269.38705 579.6
+281.70764 688.5
+303.16476 875.3
+317.50580 666.2
+347.29712 576.0
+350.27274 883.8
+361.97421 627.4
+374.14932 581.9
+377.97406 805.6
+427.57336 752.7
+465.99136 625.0
+466.72174 559.7
+470.73651 886.3
+475.72729 2567.2
+476.23239 909.6
+482.68600 708.7
+484.73218 2470.0
+484.84103 681.7
+513.30225 1957.6
+532.54004 1476.2
+539.25732 2100.0
+564.03387 685.9
+604.67798 654.6
+617.40820 641.5
+640.22614 602.7
+653.35999 629.5
+660.69104 997.1
+663.92468 721.3
+666.69543 636.4
+676.66888 1187.6
+683.75049 644.4
+685.70123 736.5
+689.54285 700.6
+696.56390 914.7
+706.36755 567.2
+708.54535 760.0
+770.08105 810.0
+795.84235 1572.2
+828.91956 1098.1
+837.42578 2127.3
+837.92572 2308.4
+838.43005 1579.2
+848.58746 704.8
+916.50940 732.3
+925.47797 792.8
+933.48730 4124.5
+933.98877 3020.7
+934.49725 1773.7
+942.49109 6570.6
+942.99310 5530.0
+943.49628 3360.7
+968.45496 2025.8
+969.45837 775.0
+981.52234 848.0
+990.02924 6242.4
+990.52954 6459.3
+991.02783 2550.5
+999.03467 9376.8
+999.53558 11174.9
+1000.03619 4552.5
+1010.02307 690.6
+1018.53674 6284.0
+1019.03949 4260.4
+1019.54517 2212.6
+1020.03540 846.6
+1027.54346 7796.1
+1028.04688 7878.5
+1028.54944 4299.9
+1029.05493 1207.7
+1079.41479 665.3
+1198.20569 3167.4
+1216.72900 597.5
+1218.68506 4772.0
+1219.68689 2779.8
+1406.52905 628.3
+1792.97461 558.5
+1878.60706 1021.7
+1879.09302 1912.8
+1879.34814 2112.7
+1879.62000 19921.2
+1880.17114 1392.4
+1880.63684 1150.6
+1883.11633 725.3
+1906.56055 1198.7
+1907.03125 7523.4
+1907.32385 835.6
+1930.72253 741.8
+S	2971	2971	1907.3885746
+Z	2	3812.929
+Z	3	5718.891
+532.58167 1686.5
+611.34381 621.0
+676.64117 1252.4
+679.54993 576.6
+731.16357 680.1
+734.38983 619.5
+795.84814 871.5
+866.82410 703.7
+901.78033 657.6
+909.13989 539.8
+983.26141 669.2
+1081.02246 641.5
+1198.30078 3220.7
+1355.61145 686.1
+1483.09705 710.7
+1589.39270 677.1
+1737.83704 645.3
+1803.38940 702.8
+1872.42334 693.2
+1876.16943 825.0
+1879.55017 19372.0
+1880.18420 873.1
+1907.12000 7376.2
+S	2973	2973	1907.56540793
+Z	3	5719.421
+Z	2	3813.283
+516.06976 679.4
+532.51691 1770.2
+617.37585 613.7
+630.43958 773.1
+658.96039 595.0
+676.63055 918.1
+676.74310 574.4
+745.96582 657.3
+795.85895 811.9
+799.25482 609.3
+857.02002 637.4
+972.16028 662.1
+1086.40015 669.8
+1198.15222 3244.2
+1198.38599 746.8
+1378.82690 711.1
+1521.22375 689.2
+1525.50391 927.3
+1878.39087 812.2
+1878.79773 1255.5
+1879.09814 2178.7
+1879.44031 7289.9
+1879.66541 16365.1
+1880.32288 1249.3
+1880.57898 801.7
+1880.97339 1182.4
+1882.35608 672.5
+1907.11914 7386.6
+1930.67493 1565.1
+S	2974	2974	635.793407933
+Z	2	1269.739
+Z	3	1904.105
+163.83142 554.5
+167.98190 525.3
+168.37198 609.0
+174.88846 632.6
+188.17851 550.4
+188.24104 767.4
+188.25122 907.7
+188.28888 2142.7
+188.31094 1493.0
+188.32285 1315.2
+188.34471 547.7
+190.05043 2123.2
+192.51537 645.2
+193.94177 483.3
+198.96564 877.1
+199.26485 719.7
+199.32858 1576.4
+199.34084 1552.6
+199.35121 1697.7
+199.36243 1975.9
+199.45970 794.3
+210.07314 587.2
+219.43565 622.9
+247.19649 660.1
+255.30582 717.4
+280.19583 634.5
+322.28445 891.0
+336.47339 644.0
+380.00833 556.6
+419.23825 811.9
+420.24039 636.1
+446.32645 1114.2
+461.64410 569.1
+474.33661 617.4
+513.36499 46759.6
+514.36835 13236.4
+532.52478 1872.9
+542.28387 716.4
+549.19043 693.1
+567.28632 662.7
+605.21375 637.2
+631.33093 624.6
+660.15869 765.1
+660.57306 562.6
+676.65497 1171.0
+682.35992 990.8
+689.32593 643.5
+725.88574 2173.0
+771.91278 850.5
+795.00702 690.9
+795.85516 863.8
+803.53534 598.9
+828.40155 1626.4
+830.39893 786.6
+839.94000 2274.0
+851.26978 623.0
+899.43671 1123.8
+950.85144 576.6
+956.06152 626.7
+977.87305 595.2
+1126.41907 572.7
+1136.61060 644.4
+1163.35486 703.7
+1198.17688 2861.2
+1267.10315 686.5
+1301.73450 672.8
+1556.51404 628.2
+1557.12671 667.5
+1577.14893 627.8
+1609.78235 721.0
+1750.64758 700.9
+1860.07861 789.4
+1870.32886 992.8
+1877.60120 739.8
+1877.89136 1366.0
+1878.71729 970.1
+1879.30481 1995.6
+1879.57336 19225.9
+1879.98853 887.9
+1880.07410 912.8
+1880.46240 1231.6
+1906.43225 841.4
+1907.08496 7287.5
+1930.69702 954.1
+S	2975	2975	726.141991267
+Z	3	2175.151
+Z	2	1450.436
+188.26064 766.1
+188.27261 1274.9
+188.28419 1402.4
+188.29514 1413.4
+188.30782 689.9
+188.31351 600.3
+188.32323 704.5
+188.41551 663.8
+199.29153 765.3
+199.31921 1650.9
+199.35382 2398.3
+199.36824 714.5
+199.45236 841.9
+216.75609 688.5
+239.13867 1733.6
+251.53519 632.8
+260.52145 662.6
+271.39648 694.3
+271.55447 574.9
+273.06247 611.3
+286.21307 622.2
+293.58038 669.2
+303.86108 596.8
+320.37384 589.8
+339.73627 586.1
+342.29022 734.4
+350.29709 979.0
+368.18243 793.0
+369.53983 616.4
+407.19473 5151.1
+427.55719 677.1
+462.09308 602.0
+465.19348 925.4
+469.72400 1005.6
+476.73441 3067.3
+477.23477 1037.6
+513.30231 1065.4
+515.30609 890.1
+515.80853 759.6
+518.22607 3351.7
+519.23126 1138.7
+525.25934 945.4
+532.49207 1730.3
+536.23730 17879.6
+537.24042 3683.7
+538.23810 685.7
+586.21808 2879.7
+587.22687 857.5
+600.83972 1082.0
+601.34222 664.9
+635.30505 12463.4
+636.30817 3792.0
+638.31555 726.2
+661.02679 1871.9
+661.36163 2653.7
+661.69690 935.4
+676.67389 809.1
+684.05121 788.5
+686.85706 586.4
+687.31915 629.6
+692.04700 659.6
+699.29974 6947.0
+700.30231 2057.3
+705.83258 2416.5
+706.33997 1408.7
+706.83459 1489.3
+731.15314 910.9
+748.39160 4354.5
+749.38782 1176.2
+768.77893 632.0
+782.41766 1375.6
+782.91498 1771.2
+794.37787 814.1
+810.38428 921.2
+810.88239 738.2
+812.38470 10757.3
+813.38696 4125.4
+814.38947 1250.0
+829.42627 1323.6
+829.93182 1507.9
+830.43396 736.0
+831.42407 1902.1
+831.92914 1487.4
+861.47290 3102.9
+862.47272 1736.7
+894.43457 1219.2
+895.97815 693.6
+896.48047 845.0
+911.45227 14310.2
+912.45551 6405.2
+913.45276 1713.9
+916.53833 939.2
+934.49371 5031.7
+934.99652 6398.3
+935.49237 2311.5
+936.49249 2750.3
+936.99091 1601.4
+937.50128 912.1
+952.46106 3959.7
+953.46124 1739.5
+956.45551 672.4
+964.48724 2221.2
+991.03381 3952.6
+991.53827 3676.3
+992.03790 1886.4
+993.03503 4482.8
+993.53522 4107.3
+994.03491 1567.9
+1002.49585 779.2
+1018.54272 803.5
+1019.54578 3816.6
+1020.04529 2248.3
+1020.54968 1415.5
+1021.05121 755.0
+1021.54321 3897.9
+1022.04419 3708.8
+1022.55145 1368.6
+1029.60754 720.3
+1040.49524 4014.7
+1041.50159 2053.1
+1057.28442 1196.5
+1079.51282 2991.0
+1080.51880 1820.3
+1081.50244 1379.7
+1171.52783 1247.6
+1172.53467 1049.7
+1173.53577 680.9
+1180.55847 6627.0
+1181.55615 3993.8
+1182.56665 1484.9
+1198.09644 3330.0
+1200.68335 1328.8
+1218.69287 2031.1
+1219.68494 1099.9
+1300.57520 2151.3
+1301.58923 1385.7
+1302.57654 655.3
+1354.99719 626.8
+1496.11731 687.8
+1525.49475 629.5
+1870.28870 1032.2
+1875.80334 716.6
+1877.68262 1025.1
+1878.08032 578.7
+1878.16162 588.8
+1878.93286 658.1
+1879.61426 19946.4
+1880.15649 743.3
+1880.31384 639.3
+1881.58154 786.2
+1907.14075 7258.1
+S	2977	2977	1879.9568246
+Z	3	5636.595
+Z	2	3758.066
+507.07913 711.5
+524.77570 647.2
+532.54877 2047.9
+572.19110 576.8
+600.14557 693.9
+630.47858 707.1
+664.53363 735.1
+676.65649 863.0
+691.09979 682.7
+731.19824 707.8
+795.84192 961.1
+854.01819 683.7
+937.63531 584.4
+1020.81323 694.6
+1021.37573 637.8
+1198.22546 3332.3
+1421.58374 641.4
+1421.71521 530.0
+1525.54907 899.9
+1765.95923 734.5
+1870.15796 743.9
+1879.01038 600.7
+1879.25574 1199.5
+1879.58606 19596.0
+1892.59570 666.1
+1907.11475 7159.4
+1927.02649 656.9
+S	2978	2978	691.8585746
+Z	3	2072.301
+Z	2	1381.869
+180.76274 483.7
+181.66830 597.1
+185.85486 718.5
+188.20726 851.2
+188.22775 712.4
+188.23701 559.5
+188.28383 677.6
+188.29085 1001.5
+188.30876 651.5
+188.32310 709.9
+188.39621 578.5
+198.96262 709.8
+199.06126 705.3
+199.17975 1888.1
+199.27994 690.3
+199.30884 759.0
+199.32265 740.6
+199.33728 1121.1
+199.34778 1799.9
+199.37442 1485.8
+199.44646 815.3
+211.18040 1499.8
+214.04877 606.0
+221.09189 6469.2
+222.09579 758.8
+227.17487 1472.9
+227.60022 560.3
+230.09225 612.6
+235.14981 600.1
+235.65320 638.2
+239.17509 2690.0
+249.16000 1227.2
+261.15942 2767.5
+262.16260 788.4
+267.24298 2037.6
+268.24347 881.5
+275.21976 690.7
+280.19098 717.6
+284.19672 8738.4
+289.15433 17915.0
+290.15726 3004.2
+292.69254 631.9
+293.16782 611.5
+295.23697 2117.9
+305.16885 615.2
+306.17908 1886.9
+334.17572 29309.3
+335.17892 4378.6
+340.26263 619.2
+345.21576 1458.5
+358.26883 1982.1
+362.16864 1427.6
+364.22635 602.5
+369.28516 4256.5
+369.63239 560.0
+370.28879 789.0
+373.79019 651.6
+377.33191 610.0
+390.24182 830.3
+397.28052 20435.3
+398.28418 3884.7
+402.23828 25814.6
+403.24176 8012.7
+419.26468 50212.7
+420.26828 11038.4
+421.65952 556.7
+427.24747 594.1
+429.24884 870.5
+447.25949 100639.0
+448.26273 22365.4
+457.24738 1282.5
+458.30243 1696.2
+475.25421 3809.8
+476.25433 932.5
+487.32666 5587.5
+488.33069 2431.8
+510.36414 1869.1
+511.36957 673.9
+515.32178 47339.1
+516.32495 15644.1
+519.80048 1063.2
+526.03784 665.9
+532.34827 109231.2
+532.54590 2350.8
+533.35150 31787.2
+542.33289 6608.6
+543.33655 1604.1
+556.64166 604.0
+559.64978 1255.9
+560.29688 1293.9
+560.34296 213810.2
+561.03485 820.7
+561.34595 53378.5
+561.80133 649.0
+583.82245 741.0
+628.40381 4484.8
+629.40771 1717.8
+630.42743 1122.2
+645.43158 6203.9
+646.43555 2708.3
+649.34985 1602.5
+649.84607 857.3
+655.25348 734.4
+655.41644 2806.1
+656.42365 1127.0
+673.42755 18853.2
+674.42981 5998.1
+676.35364 4765.2
+676.64502 1351.8
+677.35797 1131.9
+680.92328 586.7
+777.40302 3454.7
+778.41473 784.2
+795.84863 1078.2
+812.42377 746.3
+857.45367 1069.6
+908.43774 857.9
+925.50116 1015.2
+950.49976 782.4
+950.99396 1068.2
+957.42218 777.6
+959.78632 672.5
+1006.59106 682.2
+1198.21863 3279.3
+1344.50732 653.1
+1576.13403 624.7
+1590.76196 578.8
+1758.64612 807.8
+1814.13379 688.6
+1878.78638 870.0
+1879.05981 2060.9
+1879.54883 20322.1
+1879.99939 1639.9
+1907.09656 7000.0
+1930.63965 1163.9
+S	2979	2979	1907.5538246
+Z	3	5719.386
+Z	2	3813.26
+532.53217 1335.2
+548.52948 726.5
+549.19775 695.2
+631.45978 626.8
+676.66528 915.3
+693.35870 686.4
+795.83960 857.1
+945.21350 623.2
+1198.19543 3130.5
+1220.60718 702.6
+1558.53137 842.2
+1575.91443 774.6
+1721.58789 630.5
+1877.54651 929.2
+1878.66296 847.9
+1879.29016 2604.5
+1879.59521 19761.7
+1879.95190 2730.0
+1880.51050 1658.7
+1907.11169 7239.8
+1907.79126 776.6
+1930.75574 864.0
+S	2981	2981	1879.96899127
+Z	3	5636.632
+Z	2	3758.09
+532.55267 2184.2
+549.19629 643.6
+573.11127 614.2
+627.52698 592.7
+633.22162 681.0
+656.40063 678.4
+676.65173 978.9
+703.70624 694.5
+742.32245 620.9
+782.50739 643.8
+795.84058 1217.6
+811.10834 612.2
+983.42786 577.5
+1198.23987 3464.0
+1404.90540 607.1
+1525.55396 756.9
+1665.21533 628.9
+1860.06042 689.3
+1870.32288 947.9
+1878.01245 961.1
+1878.43872 860.1
+1879.10266 2494.2
+1879.57397 19738.1
+1880.01575 2192.8
+1880.34985 653.0
+1880.68848 928.1
+1881.14929 1168.2
+1907.04016 7585.8
+1909.12549 643.7
+1930.78406 903.1
+S	2982	2982	1907.54324127
+Z	3	5719.354
+Z	2	3813.239
+520.58771 668.9
+527.96783 714.0
+532.54449 1911.1
+542.54150 788.3
+548.22430 604.5
+548.40070 591.5
+549.24115 833.2
+573.07672 609.0
+614.84314 671.6
+630.50519 728.9
+666.81165 537.4
+676.66266 907.7
+705.24799 653.2
+781.48492 568.6
+795.84387 1351.6
+798.49731 628.8
+812.93744 644.4
+817.97418 576.0
+897.94574 663.1
+910.76996 643.0
+964.60187 586.6
+980.27301 750.4
+1022.85938 637.1
+1050.55786 628.9
+1188.34802 874.0
+1198.21350 3113.0
+1239.84631 664.1
+1245.47949 573.3
+1272.82751 633.9
+1762.82642 584.2
+1763.54346 684.6
+1776.95532 653.7
+1878.50708 958.1
+1879.07117 2072.2
+1879.33215 2952.9
+1879.60925 19285.7
+1880.13318 2146.1
+1880.71741 1255.8
+1881.41211 753.2
+1882.18726 803.4
+1907.04724 7593.3
+1930.92297 1309.1
+S	2983	2983	1198.62940793
+Z	2	2395.411
+Z	3	3592.613
+342.30521 745.2
+350.26239 748.1
+379.81738 631.4
+381.39328 678.6
+482.70551 1038.6
+483.21747 688.4
+532.54822 1917.8
+573.09119 683.7
+604.50092 614.8
+630.46881 829.6
+652.30469 568.8
+676.65680 845.9
+677.65027 621.7
+731.19818 857.0
+795.82904 1029.0
+797.38324 613.7
+1057.28601 634.8
+1198.22742 2861.7
+1210.91345 750.0
+1236.15515 686.6
+1285.49011 672.6
+1323.28577 619.3
+1525.58337 738.0
+1534.74585 661.3
+1587.59412 659.6
+1669.69287 678.6
+1776.94690 667.2
+1878.70740 759.2
+1879.12756 1476.6
+1879.32446 2043.2
+1879.60498 19316.4
+1880.01965 625.8
+1907.03088 6445.0
+1907.30530 1698.3
+S	2985	2985	1880.06699127
+Z	3	5636.926
+Z	2	3758.286
+532.55847 2280.1
+534.70221 614.3
+546.99866 627.0
+582.46014 597.9
+643.71826 632.5
+676.65649 910.7
+682.22894 666.1
+724.62885 740.9
+758.96869 687.9
+763.35144 636.0
+795.85455 1498.4
+810.13373 634.0
+827.94391 712.7
+890.80341 549.0
+891.06342 604.4
+1165.40466 603.1
+1169.67493 526.4
+1183.25635 663.3
+1198.24304 3891.5
+1494.12585 610.9
+1849.61243 635.0
+1877.18958 883.7
+1878.75549 809.8
+1879.57214 19556.2
+1879.83826 2897.8
+1880.30347 823.8
+1905.24219 778.3
+1906.91541 6508.3
+1907.14307 1515.4
+1907.35388 747.5
+1930.79663 819.9
+1984.81323 696.0
+S	2986	2986	1907.45024127
+Z	2	3813.053
+Z	3	5719.075
+528.46216 641.3
+532.28143 910.2
+532.50092 553.1
+532.53656 1681.5
+543.42798 671.4
+610.31061 620.5
+676.64642 1020.4
+795.86420 1175.3
+801.10144 775.3
+887.42371 721.7
+937.20190 639.6
+1036.50659 665.8
+1041.34326 624.8
+1198.20007 3266.0
+1198.33118 629.0
+1257.97388 713.5
+1400.17908 557.9
+1562.05762 806.7
+1652.46069 709.5
+1872.84937 699.7
+1878.96008 2062.2
+1879.55908 18883.1
+1880.14368 1461.2
+1880.37317 972.4
+1906.99573 7576.2
+S	2987	2987	1094.0828246
+Z	2	2186.15
+312.88211 620.9
+317.89215 547.2
+325.45819 577.2
+377.16684 603.0
+381.35425 809.5
+419.78281 552.8
+420.83032 556.0
+425.93152 569.5
+427.53888 799.5
+440.96591 617.1
+444.04727 650.8
+450.59235 606.8
+456.49585 629.7
+467.63641 751.1
+513.30402 703.4
+516.24896 799.3
+532.55505 1751.6
+541.76050 630.0
+574.03601 636.1
+590.25360 657.7
+591.75403 587.4
+689.76703 596.7
+699.41541 1716.4
+723.45111 647.9
+748.90710 665.5
+779.69781 619.1
+779.76929 536.5
+869.48444 1476.5
+869.98138 665.0
+879.92493 713.1
+885.48065 1364.5
+926.99158 915.8
+927.16394 901.5
+942.48376 908.3
+950.44568 2016.2
+951.43073 2444.8
+968.45697 4772.1
+969.46057 2120.1
+981.51538 771.6
+983.56342 832.2
+984.89679 650.9
+988.83960 1301.4
+989.17871 1170.7
+989.51837 1145.5
+999.53760 799.0
+1019.65118 681.5
+1021.15771 650.6
+1027.54297 724.4
+1038.60693 577.4
+1040.06592 1277.1
+1040.56299 1219.7
+1067.56470 827.6
+1104.96313 614.7
+1139.09058 1205.1
+1139.59583 902.8
+1197.10510 1014.1
+1198.24768 3325.4
+1201.65161 1748.9
+1205.12134 4070.6
+1205.61914 5030.1
+1206.12073 3366.1
+1212.42761 639.8
+1215.88855 588.3
+1216.00146 530.4
+1218.68359 8251.0
+1219.68665 4697.2
+1220.70557 1547.6
+1221.21912 691.1
+1232.12817 812.8
+1240.63733 5179.3
+1241.13989 5711.9
+1241.63733 3353.8
+1242.14783 2545.8
+1297.68042 901.4
+1298.17236 943.1
+1304.67358 867.9
+1317.18140 911.5
+1325.68823 6612.7
+1326.19360 8313.4
+1326.69360 5286.8
+1327.19153 1646.1
+1381.19849 1226.0
+1381.70459 1829.6
+1382.20398 1558.2
+1382.70752 1254.9
+1389.73547 769.9
+1390.24976 807.1
+1418.78687 668.8
+1466.83032 961.3
+1467.87390 891.4
+1501.86975 626.8
+1536.25256 636.6
+1630.88147 1474.2
+1656.81653 961.7
+1673.85522 775.1
+1778.23584 703.2
+1792.69849 595.5
+1859.91760 739.6
+1878.40051 653.8
+1878.81812 901.8
+1879.31750 5968.9
+1879.60388 17962.6
+1879.96997 4132.4
+1884.77588 579.5
+1907.05786 7349.6
+1930.64355 1136.6
+1966.14075 637.7
+S	2989	2989	1879.95499127
+Z	2	3758.062
+Z	3	5636.59
+532.53790 972.5
+532.57959 1645.8
+676.64209 961.5
+718.62048 634.3
+942.29877 633.3
+1198.16406 836.7
+1198.28577 3021.4
+1445.09412 716.8
+1454.38110 616.9
+1525.49951 823.8
+1688.98083 690.4
+1878.33752 572.0
+1879.30298 2725.1
+1879.54199 19666.9
+1880.00537 1598.5
+1881.05103 808.6
+1883.11743 620.4
+1906.61511 646.3
+1907.13550 7209.6
+1907.61816 760.0
+S	2990	2990	1907.50099127
+Z	2	3813.154
+Z	3	5719.228
+532.52374 2041.6
+616.45929 581.9
+630.47052 892.1
+717.47546 548.4
+731.19690 667.3
+772.35327 628.0
+780.75134 631.5
+795.86383 919.2
+809.83978 599.9
+847.71069 560.4
+923.41858 726.3
+1057.23474 831.8
+1171.75061 659.6
+1198.17493 3525.2
+1465.15125 633.0
+1499.97937 617.4
+1525.57068 707.3
+1538.75549 661.2
+1578.07739 858.0
+1854.50879 687.0
+1870.28467 694.6
+1872.72156 584.8
+1877.27209 790.1
+1879.02930 2164.7
+1879.50110 20020.8
+1879.77820 1181.8
+1879.98853 1906.8
+1904.21130 674.1
+1907.10486 7024.3
+1930.81702 725.6
+S	2991	2991	693.781407933
+Z	2	1385.715
+Z	3	2078.069
+183.31958 772.3
+188.10460 739.5
+188.26118 999.1
+188.27097 1552.2
+188.27785 1604.5
+188.28574 1252.6
+188.29623 1284.6
+188.30246 1345.9
+188.31258 1563.2
+189.78085 819.1
+190.69968 823.8
+191.40602 800.1
+191.45428 766.8
+193.09743 4000.7
+194.53012 811.1
+198.96423 1309.4
+199.18068 8287.1
+199.21709 923.2
+199.26172 1056.4
+199.30650 810.8
+199.31915 1193.3
+199.32613 1628.3
+199.33656 2072.2
+199.34315 2537.1
+199.36119 2428.2
+199.46106 834.9
+200.10638 841.6
+200.18489 1244.0
+204.13985 1591.7
+211.18071 12540.9
+212.18427 1708.5
+219.08992 797.0
+221.09227 34950.7
+222.09555 4464.3
+222.90099 905.1
+227.17551 6091.7
+228.17853 1044.8
+239.17552 16491.5
+240.17877 2517.3
+245.18599 2153.4
+249.15987 9073.3
+250.16310 1564.8
+255.67564 757.7
+259.14389 2346.7
+261.14175 888.5
+261.15985 26945.1
+262.16345 5240.4
+265.72791 827.5
+267.05804 768.4
+267.24323 17535.9
+267.69955 787.5
+268.24640 4127.4
+271.84634 989.2
+277.09085 888.0
+277.15524 5732.4
+278.15811 1485.8
+284.19708 43323.9
+285.20074 7182.2
+289.15488 92682.9
+290.15833 22432.6
+291.16135 2096.5
+295.23825 18625.9
+296.24188 3408.8
+306.18137 7775.5
+307.18530 1771.9
+308.92014 852.5
+313.96030 915.5
+316.16507 1935.8
+317.22263 8112.1
+318.22568 1643.2
+328.32086 840.2
+334.17636 149024.8
+335.17996 33338.1
+336.18262 4027.8
+340.25967 2400.7
+341.26486 761.5
+344.15927 998.9
+345.21756 10470.8
+346.22046 3048.7
+352.25992 2720.8
+358.27017 6356.5
+359.27328 1611.0
+362.17105 9828.8
+363.17505 2476.8
+367.96884 857.1
+369.28632 22579.1
+369.96371 926.8
+370.28967 7035.8
+372.22693 1019.9
+374.24335 5180.3
+382.12042 799.8
+390.23886 3087.7
+397.28101 80890.1
+398.00699 917.7
+398.28458 21712.8
+399.28571 2403.2
+401.25604 1122.0
+402.23880 167931.4
+403.09930 1088.0
+403.24234 51329.2
+403.83984 837.5
+404.24493 8394.8
+413.01083 871.3
+418.81595 1097.4
+419.26532 245997.8
+419.71164 1586.9
+420.26862 73538.7
+421.27161 10602.9
+425.27502 1580.3
+429.24957 12093.5
+430.25253 3417.7
+446.26089 1173.6
+446.36722 1024.7
+446.43921 1547.6
+447.26004 410103.8
+447.30521 1983.2
+447.66095 802.3
+447.75430 2450.7
+448.08621 1534.6
+448.26309 133400.8
+448.75723 1154.2
+449.26593 21826.0
+450.26868 1537.4
+457.24402 4062.4
+458.24976 2309.3
+458.30075 13191.0
+459.30530 4963.8
+471.35455 4234.4
+472.36093 1359.4
+475.25473 21272.8
+476.25858 6927.4
+482.37009 2451.4
+482.69003 1336.7
+483.37750 1123.8
+487.32791 37619.5
+488.33090 14397.9
+489.33484 2358.3
+508.68265 906.3
+510.36456 11942.1
+511.36990 4992.0
+514.20740 911.2
+514.33801 4054.1
+515.32245 231918.1
+515.36554 1839.4
+515.93414 1669.1
+516.32550 90425.0
+516.73541 771.8
+517.32867 17343.1
+518.33069 1672.4
+530.62256 1095.5
+531.05121 1311.4
+531.19080 964.7
+531.28058 1332.0
+531.70905 2179.5
+532.29456 1751.6
+532.34875 457363.7
+532.55328 2805.6
+532.99066 2983.1
+533.35181 181105.4
+533.42603 2160.8
+533.51642 1686.1
+533.65106 1870.2
+534.35498 32160.6
+535.35870 3042.0
+535.48944 848.2
+542.33325 28661.1
+543.33649 12671.8
+544.34119 2337.5
+548.35608 1855.0
+554.61310 1206.2
+555.35852 1427.3
+556.35284 913.2
+558.70343 1084.0
+558.94037 3449.0
+559.03546 1057.0
+559.08759 2071.0
+559.14471 898.8
+559.18628 2419.5
+559.31207 1137.4
+559.64954 3696.2
+559.94293 1390.0
+560.05353 900.3
+560.07025 1191.0
+560.24261 2134.6
+560.26129 2328.8
+560.34332 884212.4
+560.65228 1845.8
+560.81396 1535.1
+561.03693 5243.6
+561.28412 2393.9
+561.34619 386015.5
+561.49060 2750.9
+561.60712 2154.5
+561.66406 1953.6
+561.74908 4285.0
+562.34924 85585.2
+562.50385 1360.9
+562.61487 760.2
+562.64191 1146.5
+562.75574 1707.6
+563.35278 7246.8
+571.38635 1902.8
+578.35272 2046.4
+588.33911 1318.8
+594.72449 905.6
+600.41180 2369.2
+624.95996 798.3
+626.39526 2457.5
+627.39746 1560.3
+627.90985 979.3
+628.40619 27331.0
+629.40942 15079.0
+630.41260 3382.8
+638.82385 1286.9
+645.43280 49308.1
+646.43597 22336.4
+647.43646 4690.2
+655.41699 20960.0
+656.42120 11642.5
+657.42303 2314.2
+659.85773 1144.9
+676.63257 1408.3
+679.14392 888.0
+694.44635 2813.5
+710.26898 951.2
+718.74847 1006.9
+719.53680 1056.7
+720.84137 2670.2
+721.34912 2551.4
+721.84540 1131.4
+726.70740 891.5
+731.16821 974.4
+734.41748 1936.4
+744.86023 1009.0
+756.86938 2415.2
+767.94135 1017.8
+778.37421 1037.1
+785.36743 1121.6
+795.84558 1612.5
+800.91150 2893.5
+801.41486 2150.8
+801.91071 2322.5
+802.41718 1278.9
+819.84113 890.2
+830.96320 1023.3
+847.50415 6203.8
+866.67169 997.1
+1057.33960 819.5
+1060.62341 1311.9
+1083.39868 853.5
+1198.24597 4488.2
+1209.55798 1064.6
+1233.14355 903.2
+1483.82947 919.8
+1525.52063 1091.4
+1696.15906 939.4
+1756.42139 895.8
+1763.62964 1018.9
+1776.92627 1152.1
+1877.55322 1005.7
+1878.78076 1669.0
+1879.11755 1995.3
+1879.50122 13871.0
+1879.66748 20386.9
+1880.07617 5350.2
+1880.52002 1920.2
+1880.74695 984.9
+1907.16040 10759.7
+1918.92920 1064.2
+1930.71631 1451.1
+S	2993	2993	1907.51540793
+Z	2	3813.183
+Z	3	5719.271
+520.92975 688.9
+526.55835 612.6
+532.56183 1906.0
+549.14996 766.9
+574.23083 539.2
+629.86237 678.4
+630.40076 1046.8
+676.60297 781.6
+676.64941 1077.0
+705.10840 701.0
+729.34235 695.7
+795.87207 1094.6
+797.19000 682.4
+804.77448 618.2
+827.89044 614.3
+942.29095 620.6
+1019.72302 707.9
+1057.25867 701.9
+1198.25073 3258.8
+1250.60608 750.1
+1366.80249 765.9
+1667.17029 640.8
+1685.50867 641.7
+1790.49084 804.6
+1878.73108 795.7
+1879.27417 3441.6
+1879.55847 18837.3
+1880.14441 622.8
+1880.32813 709.1
+1881.52319 730.1
+1907.09021 7060.1
+1918.98157 665.5
+S	2994	2994	609.3001571
+Z	4	2433.16933
+157.27853 545.0
+158.32407 555.7
+165.75471 1041.9
+169.50069 613.5
+179.24310 583.8
+181.82545 508.2
+182.78882 602.7
+188.00909 651.5
+188.18814 503.8
+188.22687 773.3
+188.24123 1273.6
+188.25073 1144.5
+188.26282 1382.5
+188.27094 1438.2
+188.29185 1574.2
+188.30533 1743.5
+188.31784 998.5
+188.33995 832.1
+197.70645 705.9
+198.96559 977.8
+199.25868 877.3
+199.33994 1318.6
+199.35612 2846.6
+199.45419 1235.4
+199.68646 578.8
+200.64622 518.8
+203.36427 636.7
+204.33350 565.6
+205.60144 543.5
+205.81984 514.7
+211.10788 1924.1
+211.45357 625.5
+228.13403 1495.4
+229.28773 549.4
+234.15823 540.3
+236.55370 588.3
+243.40945 607.4
+263.36453 599.4
+267.14413 589.0
+280.18582 529.4
+287.14722 961.2
+298.18295 574.4
+329.18250 836.1
+337.67078 770.8
+342.28598 866.0
+351.16586 1584.6
+352.17270 505.0
+355.64301 596.8
+355.78238 524.2
+360.28992 559.8
+372.46887 562.9
+377.33667 645.9
+381.37195 641.7
+422.24069 899.3
+423.09009 574.8
+425.65662 511.2
+427.56302 825.5
+429.73291 863.6
+436.22943 2785.8
+440.24844 905.0
+450.23541 1422.9
+467.26071 1330.0
+468.24136 917.3
+482.67902 711.7
+484.75455 1642.4
+485.24753 2682.2
+486.25067 752.4
+493.76105 3798.5
+494.26205 2210.6
+494.76340 1161.2
+494.91302 3661.0
+495.24707 3488.5
+495.58380 831.3
+501.24988 711.5
+512.99872 699.6
+527.24060 986.6
+527.74969 804.2
+532.57190 2283.9
+533.25360 1277.1
+533.57953 799.2
+535.75629 1087.3
+536.26300 724.5
+543.26178 2188.8
+543.51208 3228.8
+547.76385 22475.6
+548.01471 23109.4
+548.26483 16213.7
+548.51630 7475.3
+548.76666 2117.8
+551.27417 2205.2
+551.77917 933.6
+552.51337 1230.3
+572.02747 985.8
+572.51569 737.0
+573.28668 1950.9
+574.28845 837.6
+576.27454 8278.0
+576.52509 10530.1
+576.77606 7461.9
+577.02576 2514.1
+577.28082 717.6
+582.27881 3675.9
+582.61121 1788.5
+582.94037 1193.7
+583.03253 1489.0
+583.28339 3773.6
+583.53326 1672.8
+583.77783 516.8
+589.03375 1102.0
+589.28827 2008.0
+589.53247 3634.8
+589.78174 1615.7
+591.35437 1151.6
+591.52753 1092.2
+593.53882 3383.8
+593.78998 5545.2
+594.04022 4079.2
+594.29279 2066.7
+594.54462 712.8
+595.78741 4261.0
+596.03540 2863.6
+622.06860 757.2
+623.27765 760.7
+631.30206 1710.5
+631.63525 2087.8
+631.97162 968.5
+644.30450 2094.9
+644.63666 2365.5
+644.97180 1912.4
+645.29956 807.7
+650.30737 27155.9
+650.64172 30596.3
+650.97534 18656.6
+651.31036 7725.4
+651.64130 2533.4
+661.31598 664.6
+673.33606 2065.6
+673.83704 1780.8
+674.33636 3883.6
+675.33972 1033.2
+676.64703 1071.7
+683.33008 9460.2
+683.66394 7920.7
+683.99927 6752.2
+684.33411 1669.8
+696.67096 1257.8
+696.98944 645.8
+702.33826 22151.4
+702.67169 21974.8
+703.00604 12800.5
+703.34137 4846.0
+703.67401 2260.6
+707.32104 632.9
+711.33307 770.2
+711.66614 1176.2
+715.33191 1334.7
+715.82611 1195.6
+724.34717 2173.3
+724.68457 725.1
+730.01685 16766.1
+730.35083 20936.1
+730.68542 11398.0
+731.01868 7430.5
+731.34973 1401.6
+735.34161 808.7
+736.02002 47649.5
+736.35406 62982.9
+736.68805 35843.2
+737.02216 15264.4
+737.35602 6445.7
+737.69073 1397.4
+739.34735 931.5
+745.37347 3263.1
+746.37384 938.1
+757.01624 718.5
+762.02979 1429.6
+762.35895 2403.0
+762.69153 2474.4
+763.02441 1510.0
+763.35376 875.5
+767.82080 636.1
+768.03070 17198.9
+768.36432 22193.4
+768.69781 24094.5
+769.03003 10954.7
+769.36420 4384.7
+769.69897 876.7
+770.85413 1074.8
+771.34247 1234.0
+771.68347 1901.1
+772.01984 1810.0
+772.35645 994.0
+774.03406 9482.4
+774.36847 14207.0
+774.70306 8374.5
+775.03625 2980.1
+775.37006 2128.6
+779.36273 1022.5
+795.85382 888.3
+799.37555 1066.8
+799.88147 931.7
+824.45331 663.0
+857.48138 779.1
+872.91400 1937.6
+873.41742 2926.4
+873.91010 1793.6
+875.50757 552.8
+883.41016 790.5
+886.79602 717.1
+926.09149 642.9
+933.45520 1002.8
+946.94330 963.6
+974.95618 3880.5
+975.45770 5001.9
+975.95844 3687.7
+976.46344 1639.7
+1057.24292 762.1
+1148.08154 622.7
+1183.16504 652.7
+1198.27991 3214.5
+1256.96570 585.8
+1438.37195 620.0
+1525.45667 966.0
+1653.21472 610.0
+1755.96863 620.7
+1870.39026 724.7
+1874.69690 581.8
+1876.87012 910.9
+1877.77942 773.7
+1878.43787 1100.2
+1878.69153 696.8
+1879.17041 1760.5
+1879.55127 19371.9
+1879.96204 1934.3
+1880.17529 805.6
+1880.53772 841.8
+1882.25525 744.8
+1906.57056 740.8
+1907.09229 7474.6
+1907.36328 758.8
+1930.66943 894.6
+S	2995	2995	1198.6128246
+Z	2	2395.378
+Z	3	3592.563
+355.16452 647.9
+359.99146 605.7
+404.55737 753.3
+411.13733 718.4
+416.30765 628.6
+457.66800 611.3
+532.56750 2025.0
+630.38751 834.5
+634.64813 569.0
+676.65411 1090.8
+693.20221 740.4
+858.04437 727.8
+941.84906 647.5
+1011.62805 633.9
+1188.16174 1196.1
+1190.67908 679.9
+1198.26709 3015.0
+1235.52673 853.1
+1439.59729 894.2
+1588.96460 683.1
+1816.49609 768.0
+1827.65100 717.7
+1857.57581 655.1
+1879.15344 2647.2
+1879.58557 19144.2
+1880.05334 1904.4
+1880.95911 675.1
+1906.82922 772.9
+1907.10498 6972.1
+1930.55225 756.9
+S	2997	2997	691.857407933
+Z	2	1381.867
+Z	3	2072.297
+183.20581 7154.4
+188.22243 8281.6
+188.23271 7089.7
+188.24818 6725.7
+188.25919 9190.8
+188.26257 9131.7
+188.27698 7514.2
+188.29134 8185.7
+188.30066 6414.4
+188.30927 7783.4
+188.32314 4833.0
+188.33534 6900.6
+188.33978 6864.8
+188.36928 6421.5
+191.63225 6020.9
+193.09648 9004.5
+193.20966 5838.1
+198.96664 8655.8
+199.18050 12260.8
+199.25647 9453.5
+199.26720 7776.2
+199.33926 9625.9
+199.34937 21591.2
+199.36600 8334.1
+199.44704 14555.1
+211.18005 14460.1
+221.09193 33548.6
+221.34088 5711.4
+225.48837 6164.5
+227.17607 11410.9
+232.71504 5497.2
+238.85486 6595.5
+239.17525 26034.6
+243.44867 5897.4
+245.49088 6676.6
+249.16025 10688.3
+261.15982 21798.1
+267.24222 15501.4
+284.19659 66523.0
+289.15439 118120.9
+295.23700 19654.2
+299.08792 6265.3
+306.18127 9791.4
+308.94363 8366.4
+317.22141 6976.6
+325.99783 6594.3
+334.17572 243729.2
+335.17883 13941.9
+344.20682 6558.5
+345.21689 9579.1
+353.18152 16366.0
+353.97678 7009.8
+358.26819 14797.3
+358.70715 5625.6
+362.16898 14606.1
+369.28549 42251.6
+377.26373 5837.4
+381.54303 7286.3
+390.23944 11595.8
+397.28030 173456.1
+398.28748 9144.5
+402.23807 216859.5
+403.23947 18037.5
+419.26443 431534.4
+420.26794 29681.4
+429.25046 8358.2
+438.27118 8321.9
+441.71335 6627.3
+447.25925 822675.1
+448.26205 60541.0
+458.29950 11712.7
+466.26282 12077.9
+466.92667 6156.5
+475.25360 34631.1
+475.70374 6815.1
+487.32703 50276.6
+488.33051 6430.0
+498.33957 26592.7
+510.36813 14481.2
+515.32166 395054.3
+516.32379 44105.0
+518.21954 5815.7
+532.34808 999218.2
+532.55042 18714.3
+533.35095 99520.2
+542.33124 58244.1
+549.22491 6527.4
+555.36017 67778.9
+556.36377 26049.7
+560.28564 9424.6
+560.34277 1939637.6
+560.39789 6947.1
+561.34613 162990.9
+561.74377 9955.0
+608.22705 6796.8
+611.04962 6028.9
+611.07886 5504.9
+626.39691 89400.5
+627.39935 45173.6
+628.40417 41792.0
+630.49200 8413.0
+645.43164 71064.1
+646.43414 12165.7
+650.35553 7331.9
+650.85699 14852.3
+651.35632 9315.4
+655.41473 16946.1
+668.94208 6835.4
+671.81042 19652.4
+672.02100 7351.1
+673.30646 7710.0
+673.42725 177546.1
+674.42981 22987.7
+676.64587 7895.0
+690.80524 6212.2
+707.27979 6404.0
+720.84210 115892.4
+721.34570 124415.7
+721.84674 85083.1
+722.34589 36038.0
+722.84637 8946.5
+731.48804 7435.8
+743.89673 14229.9
+744.40033 16482.1
+744.89832 7447.9
+756.36224 122203.5
+756.86353 175095.8
+757.36536 86854.0
+757.86621 37076.4
+758.36090 8217.3
+767.37500 9242.0
+768.37390 14729.1
+770.91589 6170.8
+784.87415 43615.2
+785.37390 70068.2
+785.87628 48643.3
+786.37360 19903.0
+795.85944 9981.0
+800.91064 57998.2
+801.41089 129966.2
+801.91119 84428.6
+802.41473 33505.2
+802.91449 9683.4
+857.45392 10258.6
+857.95361 12402.4
+858.15704 7453.4
+858.46063 9319.5
+858.96033 9544.6
+908.48254 7228.6
+940.20801 6066.7
+946.96826 8148.3
+983.35699 8644.0
+997.96765 6439.7
+1008.91071 7062.9
+1057.25378 10658.9
+1198.22583 33128.3
+1235.74658 7707.5
+1268.46021 6810.7
+1342.61951 16076.0
+1343.61792 10082.0
+1398.75818 7461.5
+1525.61426 7242.6
+1540.18420 6096.4
+1544.71155 6235.1
+1722.98572 7229.3
+1878.72412 17555.8
+1879.13745 21653.4
+1879.55652 195893.4
+1879.83069 30217.2
+1880.65161 12444.5
+1882.14075 7817.5
+1907.07483 73864.6
+1930.84778 9945.6
+S	2998	2998	1880.03840793
+Z	2	3758.229
+Z	3	5636.84
+532.50110 2082.7
+609.98969 635.6
+630.45660 827.8
+676.62439 801.6
+677.08752 615.4
+779.45380 625.7
+802.83276 589.2
+821.48462 657.1
+1002.38397 584.5
+1110.83704 705.0
+1198.12158 3351.2
+1499.10217 637.8
+1600.80920 705.2
+1603.57581 626.8
+1621.45789 662.0
+1625.05432 715.1
+1761.59216 647.8
+1793.01636 616.0
+1876.11121 683.9
+1876.89185 712.2
+1879.07495 1095.1
+1879.51074 19059.5
+1879.91052 1494.4
+1881.43542 698.3
+1907.12939 7132.7
+1930.75903 1113.0
+S	2999	2999	1907.55140793
+Z	3	5719.379
+Z	2	3813.255
+532.54254 2098.6
+549.19287 784.6
+573.59686 672.1
+630.45691 798.2
+676.66949 810.7
+747.69806 890.9
+781.98090 633.1
+795.86719 1108.8
+832.45453 716.6
+858.10150 564.7
+1019.70020 832.9
+1198.21240 3274.5
+1203.23438 669.1
+1321.67932 707.3
+1525.51599 700.7
+1544.11804 580.7
+1742.93506 722.4
+1777.01416 680.6
+1813.97046 681.3
+1831.52954 609.6
+1876.94043 859.0
+1878.53467 615.1
+1879.16589 2142.1
+1879.59924 18676.9
+1880.10559 2370.5
+1880.62231 904.5
+1881.52661 778.7
+1882.08948 735.4
+1907.11292 7327.0
+1930.71362 903.1
+1945.30786 655.6
+S	3001	3001	732.847991267
+Z	2	1463.848
+Z	3	2195.269
+193.20563 577.8
+197.25641 583.6
+198.00908 636.8
+198.96902 895.4
+199.24850 742.6
+199.26053 752.5
+199.32965 787.1
+199.34584 2160.5
+199.35542 1618.9
+199.36880 1033.7
+199.43408 550.0
+199.44380 742.8
+200.90253 755.5
+203.05713 545.7
+225.79361 667.3
+231.50156 551.9
+234.92952 531.3
+244.66057 646.8
+272.17856 794.1
+294.20422 594.1
+300.17072 1026.4
+303.16528 1354.7
+342.31122 711.8
+357.15527 5071.0
+375.16492 3315.3
+395.29703 623.6
+413.25351 1914.9
+417.16483 710.0
+444.22256 886.2
+453.21127 676.5
+460.25348 2064.5
+462.73889 827.7
+463.23938 997.5
+467.72937 1332.8
+468.21640 1113.4
+470.23831 8621.0
+476.73297 2370.5
+477.23575 1194.3
+482.70654 727.6
+488.24890 24883.4
+495.77365 1114.3
+501.48615 552.7
+513.29938 3490.5
+514.30341 1244.3
+516.74701 1593.3
+517.24780 963.3
+525.26007 2650.3
+525.76111 1776.1
+532.52979 2341.8
+535.28802 997.4
+544.34839 1738.3
+548.73889 629.2
+556.31274 1443.7
+557.30267 912.5
+565.31122 9536.6
+572.31268 753.4
+573.33765 5212.2
+576.97778 647.7
+583.32196 20122.8
+592.96442 1387.7
+593.29523 1033.5
+601.33246 60002.8
+602.29785 2627.0
+602.80237 1201.1
+611.82910 1564.6
+612.32477 5335.1
+612.82507 3503.8
+613.32593 1753.0
+620.83673 66236.6
+621.33789 45970.1
+621.65082 706.0
+621.83942 13802.1
+622.34167 3353.8
+630.99426 1123.1
+634.18250 637.4
+665.34424 598.8
+668.34924 871.9
+668.68481 1291.3
+676.67761 618.9
+677.38000 1707.9
+677.88092 1739.1
+678.39856 1308.1
+681.35773 771.6
+681.69543 929.6
+687.36078 2642.8
+687.69574 2567.2
+688.02911 1185.2
+696.40411 2466.2
+712.38110 818.6
+712.83966 885.4
+714.41583 4665.9
+771.97113 585.8
+795.86493 1016.9
+829.93231 740.0
+831.40710 1015.6
+831.90723 2156.4
+832.41882 801.9
+839.37555 2170.7
+840.41821 7302.2
+840.91827 7673.7
+841.42041 1992.5
+921.62115 605.9
+934.44666 3218.2
+935.43695 3807.3
+936.41644 1933.4
+936.50372 1263.7
+936.97638 4530.6
+937.48096 2498.4
+944.96320 1215.1
+945.48578 14632.2
+945.98663 17757.6
+946.48608 7652.0
+946.98798 2483.5
+952.46063 32378.6
+953.46454 14075.0
+954.46777 2941.7
+964.92950 775.8
+980.87421 616.6
+989.54071 2944.6
+990.54126 1890.8
+993.02472 1723.0
+993.51740 4120.4
+994.01495 4005.2
+994.51227 846.1
+995.01544 767.8
+1000.02380 639.2
+1002.02563 19880.1
+1002.52753 21530.4
+1003.03040 9124.2
+1003.53162 3021.1
+1004.03729 658.5
+1021.53119 1099.5
+1022.02783 3057.1
+1022.52618 2396.5
+1030.53699 12483.6
+1031.03735 12128.6
+1031.53870 6501.1
+1032.03870 2338.9
+1143.61487 6641.3
+1144.61865 4836.0
+1145.63171 1151.9
+1163.06982 851.2
+1198.17883 3576.1
+1200.53027 737.7
+1240.66699 4169.6
+1241.67065 2525.7
+1670.15186 612.5
+1705.67896 581.2
+1723.53516 602.4
+1756.26306 602.4
+1870.40747 893.3
+1876.11450 786.9
+1877.16138 601.6
+1877.80042 847.3
+1879.37817 3912.4
+1879.61597 19299.9
+1880.35376 899.9
+1881.37781 682.5
+1907.11218 7627.0
+S	3002	3002	691.8585746
+Z	2	1381.869
+Z	3	2072.301
+188.21423 1933.8
+188.23465 2323.5
+188.29346 2787.3
+188.30762 2402.2
+188.31752 2212.5
+188.33913 2620.9
+188.37019 1805.0
+189.56558 1902.1
+195.06259 1867.0
+198.32574 2217.1
+198.96605 3564.2
+199.25826 3228.4
+199.33878 2306.5
+199.35735 6673.4
+199.38245 3075.1
+199.45621 2806.9
+199.46086 3130.5
+220.29002 2095.7
+221.09209 4923.3
+223.58363 2084.4
+229.87302 2254.9
+239.17058 1861.4
+240.09763 3746.9
+249.67282 4035.9
+252.02457 1862.8
+256.38751 1846.0
+261.16022 2790.7
+278.18579 2400.4
+280.21204 2578.3
+284.19601 5868.8
+289.15381 10196.5
+308.93243 2345.5
+325.18713 6172.4
+334.17560 19273.0
+342.30933 2072.2
+353.18109 28298.9
+354.18503 4972.8
+355.18939 2058.9
+368.40652 2226.7
+369.28494 3000.7
+381.56781 2633.1
+397.27957 16639.3
+398.21542 2156.9
+402.23776 14209.4
+419.26419 37636.6
+421.35870 1865.2
+427.58875 2186.3
+438.27075 10472.8
+439.27301 2724.5
+447.25906 75776.6
+466.26501 36639.4
+467.26834 6477.7
+487.32663 5076.8
+498.33850 45714.6
+499.34140 14290.9
+507.25552 2094.2
+511.30881 2036.1
+515.32141 34443.4
+520.31781 2229.5
+520.82129 3521.1
+532.34741 94620.5
+532.51630 6430.6
+542.33582 4882.2
+555.35944 116716.0
+556.36267 41210.2
+557.36365 8094.5
+560.34241 182589.1
+575.24860 4673.9
+581.28949 10810.1
+582.29645 2811.1
+584.49121 2290.1
+584.83514 5234.5
+585.34027 4114.6
+585.83850 4112.8
+610.00000 2657.0
+626.39642 123611.6
+627.39978 52267.6
+628.40192 13403.7
+630.47302 2271.2
+633.23480 2302.7
+645.42944 3896.7
+650.35693 17607.5
+650.85828 20179.3
+651.35864 8904.8
+651.86212 2439.9
+662.30170 3416.3
+671.31006 20429.8
+671.81110 19686.2
+672.30988 6526.1
+672.81909 2224.2
+673.42633 21673.6
+676.66174 3158.3
+706.84863 5098.6
+707.34460 5732.2
+712.33612 2278.2
+720.84320 72572.1
+721.34442 68934.4
+721.84570 30489.9
+722.34515 11100.3
+722.84204 3124.7
+725.46497 5220.7
+743.39728 15914.5
+743.89746 12263.0
+744.39917 11010.1
+744.80969 2274.6
+744.89905 3866.4
+745.40302 2418.6
+746.22992 2826.1
+747.36206 4198.3
+756.36176 85774.0
+756.86273 93806.6
+757.36389 37137.2
+757.86566 17907.4
+758.36249 4057.4
+767.36957 17335.8
+768.36609 6055.7
+771.36530 2169.8
+776.43390 2007.6
+784.87347 31970.5
+785.37439 39691.4
+785.79388 2064.8
+785.87439 25239.2
+786.38293 6088.0
+795.85785 3814.9
+800.90936 108570.4
+801.41052 134597.8
+801.91138 84532.0
+802.41290 31032.7
+802.91376 11971.4
+821.61517 2014.2
+857.05450 2008.6
+857.45306 9627.3
+857.95215 20550.3
+858.45343 11823.3
+858.96533 4909.0
+876.35309 9000.9
+877.36053 5945.6
+890.55212 2229.4
+898.41119 6384.2
+898.82990 1997.0
+899.41632 3539.0
+913.99225 4806.6
+914.49524 4212.2
+915.50494 2467.6
+919.75946 2216.1
+946.48358 2513.3
+946.98438 2602.6
+947.48596 4049.3
+1019.64325 2524.9
+1027.45374 3507.4
+1028.46313 2313.3
+1057.28235 2977.7
+1071.31543 1880.6
+1092.08459 2070.8
+1098.48999 3806.3
+1099.50378 3084.8
+1188.29456 2876.9
+1198.15649 9995.4
+1213.51733 5917.0
+1214.51770 4400.2
+1228.62964 3578.3
+1341.61230 16618.0
+1342.61450 14796.7
+1343.62256 7756.8
+1352.71362 2180.8
+1374.39807 2087.3
+1441.67090 3284.1
+1776.90149 3404.9
+1877.70532 1903.8
+1877.86243 2089.1
+1878.65393 2652.3
+1879.25854 10027.1
+1879.60095 62953.6
+1880.39014 3040.4
+1881.06677 3116.5
+1907.05127 24251.3
+1907.57471 3199.7
+1930.80066 4182.1
+1941.47900 2175.3
+S	3003	3003	1879.92740793
+Z	3	5636.507
+Z	2	3758.007
+532.64630 1451.6
+591.96069 593.0
+596.51288 617.3
+624.73914 605.0
+630.38464 1024.6
+647.69568 620.1
+667.91266 648.2
+676.64069 988.8
+713.41498 614.4
+890.47687 639.2
+955.74585 602.2
+1198.44836 3506.6
+1530.06348 831.3
+1860.06091 858.0
+1878.38586 2042.0
+1879.14368 3457.2
+1879.55884 18756.4
+1879.98169 3226.3
+1880.34338 1342.0
+1880.73206 1154.6
+1907.05481 7515.9
+1930.52100 954.4
+1983.43652 610.3
+S	3005	3005	1040.0851296
+Z	4	4156.30922
+286.84729 588.7
+290.40836 658.7
+327.44135 626.4
+381.39636 687.4
+384.55145 614.5
+473.63828 605.4
+477.07449 563.4
+487.57431 673.4
+532.65326 2273.6
+555.28772 5645.7
+556.29053 1196.9
+586.52551 819.7
+644.76935 575.4
+668.37665 825.0
+676.64111 1361.6
+710.54810 583.1
+813.68842 631.0
+843.60925 625.7
+853.55829 1715.6
+976.54651 655.7
+978.53363 1009.0
+979.20435 708.3
+1021.24139 668.5
+1021.67163 682.0
+1085.95740 972.8
+1163.97839 1790.9
+1164.31067 1995.5
+1164.64441 2066.5
+1195.67419 1287.4
+1196.00452 1420.8
+1198.46338 3623.4
+1201.35339 1013.3
+1201.67334 6667.0
+1202.00793 8818.4
+1202.34143 7370.5
+1202.67004 1117.9
+1206.68518 1461.0
+1207.68970 1065.0
+1225.51978 637.3
+1253.94238 692.4
+1276.00354 593.3
+1296.03955 2288.1
+1296.37646 3181.7
+1296.71460 2445.2
+1297.05225 803.4
+1299.88196 593.6
+1475.79810 1079.2
+1476.81104 2331.2
+1477.32129 1277.6
+1535.61804 682.7
+1776.88879 866.8
+1870.34863 867.9
+1879.03174 2397.7
+1879.55554 19543.6
+1879.81934 1591.7
+1880.03918 2131.6
+1883.29065 744.1
+1906.95703 7467.0
+1908.05933 714.9
+1930.80298 941.5
+S	3006	3006	1041.0880746
+Z	4	4160.321
+342.26746 554.6
+343.20724 714.0
+350.28110 831.4
+360.27850 603.9
+375.85638 651.4
+532.53613 1768.3
+555.28729 8461.2
+556.29156 1689.9
+630.40131 595.5
+630.43823 510.6
+655.60266 617.9
+668.36920 1612.5
+676.63495 881.9
+781.46472 738.1
+795.86499 1028.6
+853.54602 823.1
+870.34155 666.8
+978.53461 1171.3
+978.87854 851.9
+1014.01758 682.5
+1086.40515 738.4
+1130.26257 666.4
+1140.30420 604.8
+1163.63599 2116.2
+1163.97925 2277.9
+1164.32092 1401.7
+1164.64453 1109.2
+1164.99182 1038.2
+1188.03137 954.9
+1189.96411 685.6
+1195.65930 1033.9
+1195.99438 1608.3
+1196.32458 1767.2
+1198.20154 3569.8
+1201.33984 5482.4
+1201.67065 9727.9
+1202.00708 7807.8
+1202.33777 6413.3
+1202.67029 4159.7
+1203.00452 2384.4
+1206.68311 2344.2
+1207.67725 879.2
+1226.54211 712.9
+1247.28052 761.8
+1284.99292 649.7
+1295.71301 1543.6
+1296.04285 1172.0
+1296.37000 2824.6
+1296.71960 2004.2
+1320.89038 629.4
+1475.79810 1919.5
+1476.30493 3245.9
+1476.80725 1875.8
+1477.31750 1264.2
+1481.45337 668.8
+1725.36963 721.2
+1876.17969 976.3
+1878.63281 881.9
+1879.54041 20222.1
+1879.84229 1517.8
+1880.00769 1102.6
+1907.05200 7550.8
+1930.65112 745.9
+S	3007	3007	1040.0863246
+Z	4	4156.314
+279.17371 703.1
+304.87732 669.6
+308.93753 683.3
+339.40543 580.8
+350.28143 931.0
+365.03171 575.0
+372.73959 667.2
+389.20294 640.8
+414.23291 552.1
+421.70428 642.1
+458.00778 627.3
+482.71292 798.8
+495.50577 588.2
+502.11191 557.8
+527.73999 515.2
+527.77197 642.0
+532.53278 1951.2
+549.21283 773.3
+573.09747 667.7
+576.73724 633.8
+603.49835 618.8
+630.47485 822.5
+676.63153 852.3
+684.29041 568.1
+750.52643 579.6
+795.87097 1046.8
+853.55902 2341.4
+854.56427 1514.3
+936.20020 520.6
+984.42712 752.7
+1019.66895 660.1
+1198.19458 3269.3
+1272.02673 672.2
+1276.97339 716.0
+1776.96997 898.4
+1778.95398 706.0
+1870.17358 971.2
+1879.01624 1257.5
+1879.59851 16151.0
+1880.15588 2502.2
+1880.89783 1284.9
+1907.06262 7535.1
+1930.80859 852.7
+S	3010	3010	1086.24640793
+Z	2	2170.645
+Z	3	3255.464
+318.38483 635.0
+323.16370 602.4
+348.16818 1381.2
+389.12268 745.6
+389.19580 860.7
+393.28690 920.7
+421.27994 1735.4
+427.57068 676.2
+430.40390 578.6
+431.66556 584.5
+434.21515 696.2
+435.19812 1716.6
+452.22357 776.7
+468.26141 977.7
+482.69501 742.9
+495.29062 851.9
+496.27539 8058.7
+497.27786 2637.9
+498.20163 958.9
+503.23978 963.8
+504.22031 1741.0
+506.37265 838.4
+513.30310 33224.1
+514.30646 8316.8
+515.31238 1725.9
+521.24902 964.2
+522.22913 1570.2
+532.53143 1801.2
+534.36530 3714.1
+535.36884 1037.3
+539.26312 1167.7
+545.92682 848.9
+588.27802 3660.4
+591.38757 2020.0
+594.79346 678.6
+609.33490 794.8
+610.33636 1390.9
+612.25043 1936.1
+630.44885 718.1
+646.30762 1134.3
+676.61121 903.1
+677.76788 604.7
+678.39630 4592.3
+679.40125 1613.8
+680.31207 984.3
+689.31274 1320.0
+690.29620 2390.0
+706.38849 11834.1
+707.32745 5604.0
+707.39374 4852.8
+708.30145 2090.0
+712.34424 761.8
+716.33252 968.8
+723.43988 18014.9
+724.44373 6030.1
+725.33594 16054.8
+725.44617 1720.4
+726.33954 4847.8
+727.33783 1669.8
+740.92664 787.4
+749.52582 558.8
+769.43506 936.5
+772.87976 832.9
+778.48773 1033.5
+784.43146 744.7
+795.86371 868.6
+798.37689 748.6
+803.35059 1084.6
+804.34320 2109.4
+819.48193 1642.1
+820.46490 1962.8
+820.92157 1961.5
+821.37091 10713.4
+822.35266 23804.5
+823.35626 11053.0
+824.36719 2988.6
+825.40192 1473.6
+829.42999 2730.7
+829.93060 4233.5
+830.43036 1547.7
+835.38385 799.4
+835.50787 1525.4
+836.50922 1624.0
+839.37994 13622.7
+840.38312 5839.2
+841.39313 1505.4
+847.41864 1120.2
+853.39801 2746.7
+854.39630 956.2
+869.44720 1077.7
+869.94543 1026.0
+870.51245 1576.6
+877.47314 897.9
+877.95160 3367.5
+878.45331 3747.7
+878.95135 1650.1
+879.45935 1089.9
+888.53540 3234.4
+889.43634 974.5
+889.54541 1769.5
+890.47449 1316.1
+891.45264 1794.0
+892.44897 1325.0
+899.41821 2277.7
+900.41974 1347.7
+906.45905 3506.2
+907.44067 7692.3
+908.44476 4174.6
+909.45013 1083.5
+911.99615 1536.4
+912.49390 723.4
+916.44324 7772.5
+916.52979 14595.3
+916.99091 769.7
+917.42786 11810.8
+917.53308 8318.6
+917.98572 867.2
+918.42975 6401.7
+918.53210 2598.4
+919.43829 1724.2
+919.54895 907.4
+920.49738 2914.6
+921.00092 2657.4
+921.49896 1819.7
+924.46796 13083.4
+925.47644 6958.1
+925.98804 7632.2
+926.48541 8850.1
+926.98743 4122.9
+927.48816 2096.6
+932.40906 782.2
+932.56549 934.2
+932.99628 770.8
+933.56726 1446.3
+933.95880 661.2
+934.44641 66251.5
+934.99780 36109.4
+935.44098 163243.6
+935.99829 6849.2
+936.44141 82490.8
+936.92450 877.0
+937.44287 23112.9
+938.44824 5737.8
+939.46442 792.0
+950.53674 1560.0
+950.93719 1033.3
+951.53009 707.1
+951.93909 839.7
+952.46375 235474.1
+953.46594 120390.5
+953.99481 1830.9
+954.46851 36574.5
+955.00250 1104.9
+955.46973 7547.7
+955.58728 938.4
+963.01007 2580.1
+963.50818 3845.6
+964.00793 2475.4
+964.51398 1179.0
+965.00665 649.2
+967.56134 11130.1
+968.57062 4354.9
+969.03687 1421.3
+969.58209 1195.9
+972.00854 1045.9
+972.51160 1384.8
+973.02032 1227.6
+973.52472 2443.0
+974.02356 2197.4
+974.51947 1303.4
+975.02802 813.6
+977.04218 4975.1
+977.54163 4628.1
+978.04663 2360.3
+982.03241 5742.4
+982.52930 13602.0
+983.02972 12339.7
+983.52789 5482.3
+984.03510 2306.3
+984.53485 744.2
+991.03821 51972.6
+991.53882 62364.5
+992.04071 32453.9
+992.54138 14852.5
+993.04437 3751.6
+993.55054 808.4
+998.04803 988.2
+1001.61420 2691.1
+1002.02539 818.6
+1002.59973 2084.9
+1003.02679 995.5
+1003.60822 698.5
+1005.55499 2101.9
+1006.05865 2284.6
+1006.55658 2101.6
+1007.55426 2317.0
+1008.55560 1346.3
+1010.54413 2737.2
+1011.04315 5634.5
+1011.54047 6431.6
+1012.04236 2949.3
+1012.53967 1046.5
+1014.47906 1451.7
+1015.47540 895.0
+1019.54865 26625.0
+1020.04962 31784.6
+1020.55389 18309.1
+1021.05530 9244.4
+1021.54779 1843.1
+1024.58215 19826.1
+1025.58423 11956.8
+1026.58838 4727.7
+1027.59009 1086.6
+1029.19177 785.3
+1029.61218 22887.8
+1030.61597 15200.8
+1031.50342 3417.8
+1031.62024 5203.9
+1032.49280 6202.5
+1032.62671 884.7
+1033.49207 4070.1
+1049.51526 15019.0
+1050.51685 9044.8
+1051.52527 3164.2
+1052.52454 794.5
+1055.38428 898.7
+1059.55103 1642.3
+1060.04980 2288.2
+1077.34155 657.4
+1104.60278 2542.5
+1105.61145 1285.9
+1121.63342 12675.3
+1122.63855 8128.8
+1123.64490 2953.8
+1140.20264 807.2
+1143.62830 703.3
+1146.56995 1967.1
+1147.57300 1105.7
+1162.61511 720.9
+1185.58948 1607.3
+1186.56946 3373.7
+1187.57031 1909.6
+1198.18958 3228.4
+1200.67407 8419.5
+1201.66223 99983.0
+1202.66492 70820.5
+1203.66699 25476.0
+1204.66724 7900.1
+1205.66467 2289.8
+1214.19165 2055.2
+1215.19055 1117.4
+1215.71924 878.3
+1216.47314 1529.7
+1216.72510 795.9
+1217.46399 1300.0
+1218.32532 1094.4
+1218.49060 2313.1
+1218.68689 401454.6
+1219.50012 702.5
+1219.68909 283225.5
+1220.69177 112999.7
+1220.90454 2496.3
+1221.22595 602.9
+1221.69568 30571.5
+1221.90710 2056.9
+1222.34253 782.7
+1222.69104 6944.8
+1223.20923 1668.4
+1223.69507 1321.0
+1225.23267 774.0
+1256.73962 1207.7
+1257.76111 997.5
+1275.68372 1335.7
+1276.69604 1122.1
+1292.45203 612.4
+1300.63342 736.7
+1301.64636 1308.3
+1313.76843 673.8
+1314.74878 3959.9
+1315.74744 2703.3
+1331.77100 16771.5
+1332.77869 12626.2
+1333.77991 5623.3
+1334.78076 965.0
+1414.64624 921.8
+1429.69727 3837.3
+1430.68726 14352.6
+1431.68896 12027.2
+1432.69214 4729.8
+1433.70386 1240.8
+1445.81763 6443.0
+1446.81799 5589.4
+1447.71313 26809.3
+1448.71436 23502.6
+1449.71826 8836.8
+1450.71655 3465.4
+1486.83630 874.1
+1525.49744 722.1
+1544.75549 1250.2
+1623.79150 1296.6
+1624.78528 1527.5
+1631.89722 3019.3
+1632.89307 2453.7
+1633.89429 1017.8
+1639.83264 4464.8
+1640.82507 27923.5
+1641.82751 23613.8
+1642.82617 12376.4
+1643.83154 3187.3
+1644.82532 1615.8
+1657.84692 44807.2
+1658.85083 39483.3
+1659.85498 20097.3
+1660.85425 8672.3
+1661.86865 1932.3
+1667.10742 696.2
+1714.93457 636.4
+1718.94006 734.2
+1719.93127 1046.4
+1725.15356 683.1
+1805.96619 2000.4
+1806.94897 2147.7
+1807.97021 791.8
+1850.95447 4635.2
+1851.96313 4703.8
+1852.97205 2874.4
+1853.95850 1336.3
+1867.97595 2010.9
+1868.98071 2066.9
+1869.95984 1060.9
+1879.46436 19482.4
+1879.69580 898.3
+1880.17505 812.3
+1880.62976 737.0
+1888.94409 585.2
+1907.06689 7290.6
+1907.87012 622.0
+1920.91980 892.8
+1930.71887 725.5
+S	3011	3011	557.7723246
+Z	4	2227.058
+146.99586 1857.7
+149.09253 1873.2
+165.75322 2792.1
+188.23668 2148.7
+188.25562 2707.9
+188.26263 2023.2
+188.27190 3384.7
+188.28006 3343.9
+188.29213 2202.0
+188.29967 3852.1
+188.30865 2809.1
+188.31822 2416.8
+199.21608 2072.2
+199.34039 5080.8
+199.34872 7552.2
+199.35789 5206.4
+199.44698 2329.6
+241.59491 2099.0
+290.19675 1951.0
+299.70135 1862.3
+303.16446 4369.1
+308.89371 1889.9
+316.79633 2630.9
+340.65814 3313.0
+349.17258 2521.9
+350.28760 2578.4
+354.16641 3597.5
+355.15735 3095.7
+356.16058 2155.4
+363.16907 3889.6
+376.27530 1998.2
+381.36151 2601.1
+386.39441 1773.1
+389.01703 1835.4
+389.16946 2498.3
+392.96164 1928.9
+407.51721 1876.0
+411.18713 13256.0
+411.67551 7446.7
+411.70047 2281.6
+420.19269 8892.5
+420.69315 3546.0
+424.87283 8548.4
+425.20850 3206.7
+425.53952 23811.0
+425.87448 16743.3
+426.20581 14114.3
+426.53845 9794.7
+435.14966 1775.2
+445.21487 2082.6
+453.73102 5457.0
+454.21918 5037.1
+454.72302 2561.7
+458.72760 3289.0
+459.21368 2328.8
+459.70447 5487.9
+461.68198 1826.1
+462.73679 16803.6
+463.23624 6427.7
+467.72894 25983.4
+468.21899 20628.0
+468.72275 10268.8
+469.22400 3323.8
+472.72974 2923.4
+476.73392 21770.5
+477.23569 11841.7
+494.23178 2322.2
+511.94806 1949.2
+513.30115 2586.4
+516.74701 3911.6
+517.24298 3028.6
+520.01147 2340.0
+525.18805 2207.1
+525.25226 5684.5
+525.82806 1910.6
+529.27179 10535.0
+529.77313 7961.1
+530.27203 7987.4
+530.77179 3693.0
+532.53052 7326.6
+540.00671 3670.7
+540.25049 4287.6
+543.26715 7941.8
+543.50531 3009.7
+543.76599 7099.2
+544.01227 9935.7
+544.25964 8768.8
+544.51007 5201.7
+550.75891 2318.4
+571.77820 8038.6
+572.27899 4644.9
+572.77911 4470.5
+580.67841 1854.4
+581.26215 2333.4
+581.76733 2086.4
+588.27808 8903.8
+588.78357 3074.7
+589.27972 17080.5
+589.78247 8686.6
+590.27942 3695.2
+614.80334 1986.4
+628.29211 9888.1
+628.79236 4518.5
+629.29272 29876.9
+629.79492 19857.4
+630.29236 16497.0
+630.39532 2199.7
+630.79175 8435.6
+631.29370 4294.7
+636.30597 4670.5
+636.80603 27667.0
+637.30719 15718.0
+637.80621 79087.5
+638.30804 45693.9
+638.80682 34323.4
+639.30487 19967.9
+639.80438 8188.6
+666.94336 2205.4
+685.83453 3494.4
+686.83887 3817.0
+694.34991 4282.9
+695.35596 2256.0
+702.14716 1975.6
+706.39233 5155.0
+725.33105 2457.8
+726.33728 2800.9
+728.33771 2015.8
+750.36823 3225.8
+750.87268 2373.0
+751.37268 9652.8
+751.87140 7983.9
+752.36823 7030.6
+752.86823 4042.4
+795.86877 2913.9
+821.36700 3131.9
+822.34741 8241.4
+823.36102 3229.2
+839.37677 16822.0
+840.37543 5143.3
+844.40967 3105.9
+874.58960 2310.6
+876.39612 2081.2
+935.43719 4092.9
+952.46112 9828.6
+953.46924 6480.4
+972.44958 3353.2
+1085.78857 1965.4
+1198.19434 10787.2
+1216.69128 1901.6
+1288.56531 2059.8
+1462.17212 2140.5
+1504.06995 1960.7
+1511.41614 2072.4
+1525.41797 3079.2
+1527.95215 2711.4
+1542.01978 2086.5
+1644.32031 2373.2
+1799.95117 2058.4
+1856.57666 1782.8
+1870.16321 2374.2
+1876.18347 3089.8
+1876.78369 1933.8
+1879.55664 57129.7
+1882.88062 1985.2
+1907.07385 23945.8
+1918.97327 3089.7
+1930.59753 2781.1
+1996.16614 2238.1
+S	3013	3013	1879.99024127
+Z	2	3758.133
+Z	3	5636.695
+532.49469 1788.2
+606.84601 641.6
+630.42139 803.7
+658.92273 539.2
+676.67310 708.0
+778.30420 587.4
+795.85345 1284.4
+867.69470 722.3
+893.59900 578.8
+935.38129 583.1
+1015.13470 719.6
+1184.59570 862.4
+1188.08887 832.7
+1198.10486 2939.9
+1248.92017 579.7
+1255.69763 573.9
+1297.05029 653.7
+1298.39233 618.6
+1327.60034 713.3
+1876.09485 820.5
+1877.66492 621.9
+1877.98376 708.9
+1878.32788 1111.8
+1879.02380 908.5
+1879.28870 2822.4
+1879.62219 18646.3
+1879.96130 2718.7
+1880.27271 1107.4
+1880.68213 752.3
+1880.99097 735.9
+1905.78198 599.6
+1906.86536 869.6
+1907.16785 7499.1
+1930.64233 870.1
+S	3014	3014	557.7725746
+Z	4	2227.059
+157.60541 616.0
+177.99219 728.6
+182.78487 549.1
+188.16360 601.0
+188.19576 582.0
+188.21278 864.0
+188.23866 614.8
+188.25903 763.6
+188.26720 1060.6
+188.29877 714.4
+188.30597 750.1
+188.33322 736.3
+188.36575 764.8
+198.96878 939.0
+199.24844 1011.6
+199.34767 1885.3
+199.35265 2208.2
+199.35881 1414.5
+199.36992 996.3
+199.44572 502.2
+199.45103 724.2
+199.46745 647.9
+200.13931 767.0
+230.41675 501.9
+233.68484 590.2
+238.68756 606.0
+255.29646 603.5
+269.94507 563.5
+286.14075 742.0
+303.16562 2644.8
+316.97272 668.3
+319.27539 564.6
+330.41394 612.7
+339.58704 605.4
+340.16934 1136.5
+340.66135 2768.1
+342.27692 815.8
+345.15964 1549.6
+347.18094 796.1
+349.17426 1783.4
+354.16705 3200.0
+354.65628 1752.3
+363.17206 1928.7
+363.67163 1042.8
+363.96329 592.8
+370.07227 595.5
+382.67609 605.9
+395.86990 1351.4
+396.20538 674.7
+396.53787 677.3
+396.87024 1249.5
+397.68192 934.2
+402.18353 1257.4
+411.18756 8266.0
+411.67599 4057.0
+411.70074 1139.9
+412.18018 1741.2
+419.86374 2604.5
+420.19308 8037.6
+420.53018 2669.8
+420.69330 2695.3
+421.19815 1393.1
+424.20282 805.0
+424.87436 4511.0
+425.20743 3424.2
+425.54022 19418.3
+425.87479 13466.9
+426.20676 12275.2
+426.53998 4398.4
+426.87250 2366.4
+427.20343 777.6
+438.44971 701.8
+445.21832 863.6
+445.70898 1724.8
+450.21069 824.0
+453.73273 3553.5
+454.22147 3366.8
+454.72464 1905.5
+458.72388 2610.0
+459.21616 4581.4
+459.70615 3939.1
+460.20773 1597.0
+462.73737 9743.8
+463.23737 4969.1
+463.73941 1903.0
+467.72934 15350.8
+468.22058 14921.1
+468.72180 8172.1
+469.22287 1987.0
+472.72922 3186.4
+473.23242 1899.2
+473.72528 1342.1
+474.22940 1725.8
+476.73468 16613.7
+477.23553 6910.4
+477.73666 1503.9
+480.74527 927.8
+486.72656 1903.8
+487.23068 1141.5
+487.72714 714.6
+494.23593 1287.1
+494.74109 1462.4
+496.25647 1884.0
+505.30023 718.6
+505.74777 735.5
+507.74255 820.5
+508.23300 849.3
+508.73428 674.0
+512.23920 834.5
+513.30322 2766.1
+516.25543 1602.2
+516.75043 1908.7
+519.75500 1426.4
+520.00555 1028.5
+520.25714 1506.5
+523.75403 748.8
+525.24396 3685.1
+525.76318 1575.3
+527.22791 1162.5
+529.27155 12495.3
+529.77356 8641.7
+530.27051 9343.2
+530.51318 979.4
+530.77100 5345.3
+531.27002 2408.0
+532.45038 1829.9
+539.00629 1271.6
+539.25769 2163.8
+539.50580 1914.8
+539.75470 2677.2
+540.00555 2016.1
+540.25287 2803.9
+540.50104 761.6
+540.75763 1135.7
+541.01447 607.1
+541.76239 834.2
+542.27039 1972.3
+542.77179 910.9
+543.26904 3273.7
+543.51239 1789.6
+543.76062 1394.5
+544.00824 1684.0
+571.77997 5562.7
+572.28131 4024.7
+572.78033 3521.4
+573.27954 1645.4
+580.76233 969.1
+581.76709 1120.4
+588.27942 4243.8
+588.78143 1873.0
+589.28076 11270.8
+589.78125 5540.3
+590.27875 5988.6
+590.78021 2411.8
+591.27875 785.7
+592.26691 626.9
+593.29315 1480.4
+593.80396 603.1
+598.30261 540.6
+599.81360 1192.2
+627.79614 1049.0
+628.29248 6702.4
+628.79382 5383.0
+629.29333 22674.7
+629.79468 14985.7
+630.29321 13460.5
+630.79321 7784.6
+631.29126 3130.6
+636.30725 2437.7
+636.80579 18534.6
+637.30780 11294.5
+637.80634 49989.1
+638.30786 29308.3
+638.80640 25282.5
+639.30579 11240.1
+639.80499 3769.4
+639.93512 702.4
+640.30322 941.8
+671.34100 953.4
+671.68109 667.1
+676.67474 1040.1
+684.84460 719.5
+685.83887 2001.1
+686.34082 1217.1
+686.83643 1943.8
+687.32922 973.9
+692.99500 856.2
+693.35498 905.6
+693.85272 1635.4
+694.34882 3461.4
+694.85168 2120.3
+695.34631 1403.4
+695.84662 1251.2
+706.39532 3371.9
+707.38898 1677.5
+711.32373 1505.6
+715.02692 1649.4
+715.35468 1517.7
+715.85388 742.5
+716.36090 800.6
+725.33453 2631.4
+726.34015 1248.6
+731.33771 856.6
+736.02740 714.2
+736.68701 925.4
+737.01855 1987.8
+737.35242 1349.7
+737.68994 760.6
+742.85822 1048.7
+743.35040 919.7
+743.85162 878.0
+750.36707 2864.6
+750.86853 1332.7
+751.36951 7929.8
+751.87268 6512.0
+752.36969 5380.7
+752.86871 2792.4
+753.36365 1155.6
+762.31458 1805.0
+766.38501 807.4
+779.35590 1215.3
+781.35858 847.6
+795.87280 919.6
+821.36682 2623.0
+822.35016 6520.9
+823.35229 2569.3
+824.35229 824.6
+839.37823 13213.1
+840.38165 6152.3
+841.37762 1680.6
+845.41052 714.2
+847.83337 648.0
+848.87756 1447.2
+849.38843 1021.7
+857.39252 710.5
+877.38879 619.4
+884.85809 590.9
+934.45587 1753.3
+935.43756 3224.4
+936.43842 1172.2
+947.14331 567.8
+952.46143 8018.3
+953.46320 4194.8
+953.94946 1436.4
+954.45264 1669.8
+954.93835 1005.5
+972.44708 2765.4
+973.45001 1639.0
+974.44922 1302.5
+975.44464 644.8
+1010.49139 922.1
+1010.98688 1094.6
+1011.97327 738.0
+1057.31287 650.2
+1085.54736 1514.9
+1128.52563 628.3
+1198.00757 3521.4
+1251.87561 713.4
+1326.34668 612.5
+1404.46655 733.4
+1667.14063 768.0
+1810.41797 555.4
+1878.57642 1152.8
+1878.92651 1216.3
+1879.24438 2555.4
+1879.62646 19506.2
+1879.99072 2103.0
+1880.26672 1548.1
+1880.67273 1339.6
+1880.98254 794.9
+1881.28284 1021.4
+1907.13525 7923.5
+1918.98926 739.5
+1930.64709 1258.3
+1960.76917 593.6
+1989.99146 612.4
+S	3015	3015	1907.47724127
+Z	3	5719.156
+Z	2	3813.107
+532.46289 1576.8
+617.16443 657.8
+630.39728 861.7
+708.38403 696.1
+1198.03345 2930.1
+1525.35437 776.5
+1873.81482 615.5
+1878.75562 1349.9
+1879.07092 2534.2
+1879.51624 19096.6
+1879.93701 1890.3
+1880.32495 1329.2
+1880.63025 1102.6
+1907.11621 7362.6
+1930.58081 877.8
+S	3017	3017	1880.00640793
+Z	2	3758.165
+Z	3	5636.744
+532.48810 2084.2
+650.12616 702.1
+676.63544 724.2
+795.85822 1163.4
+1198.09338 3527.4
+1260.34058 914.0
+1332.48999 630.5
+1384.56018 625.7
+1763.57153 727.5
+1866.00012 721.3
+1878.43213 685.5
+1879.43274 9569.0
+1879.66821 15329.8
+1880.33032 2809.8
+1880.62781 2000.5
+1907.12134 7148.4
+1930.51257 1044.1
+S	3018	3018	1907.56740793
+Z	2	3813.287
+Z	3	5719.427
+532.51355 2028.4
+607.64728 788.1
+630.42108 934.9
+649.81866 628.4
+676.66425 1234.6
+677.96332 723.1
+795.85107 948.3
+1198.14856 3357.0
+1278.76965 602.0
+1525.41675 780.3
+1546.86389 570.1
+1840.94788 663.1
+1848.53113 730.0
+1870.30627 1248.8
+1878.02783 551.1
+1878.87695 1358.7
+1879.60339 19817.1
+1879.90381 2951.6
+1880.31604 1543.3
+1880.70081 873.2
+1881.06116 849.7
+1881.88660 983.3
+1907.09912 7866.9
+1990.68945 630.4
+S	3019	3019	1198.4548246
+Z	2	2395.062
+Z	3	3592.089
+345.84897 632.5
+353.92651 618.3
+355.57666 709.6
+426.57559 693.2
+447.91028 583.7
+455.20630 1262.6
+464.01471 598.3
+483.19681 2421.4
+485.27664 784.4
+501.54660 650.4
+514.32697 652.4
+532.53174 2588.8
+535.90558 636.4
+538.24298 597.3
+549.12140 625.8
+568.28479 1955.2
+596.28125 3427.1
+597.28479 1721.2
+644.15436 669.5
+676.66876 733.4
+681.36938 866.4
+709.37653 691.8
+762.66614 601.6
+768.45911 690.9
+794.59753 600.2
+795.86829 964.9
+838.40320 791.4
+866.30475 612.7
+886.89771 594.1
+927.18036 575.9
+994.57410 1616.1
+995.56866 752.3
+1008.58600 1283.4
+1009.59308 676.8
+1019.64508 673.0
+1057.28369 769.0
+1107.65369 4919.4
+1108.65833 2611.4
+1109.65894 998.5
+1198.18555 2929.2
+1402.95190 591.3
+1479.04846 605.8
+1860.81458 621.6
+1878.36755 1098.4
+1878.62939 1218.4
+1878.95068 1235.5
+1879.16846 947.4
+1879.62024 19720.5
+1880.02954 1427.8
+1880.29333 1409.0
+1880.59766 974.9
+1881.00537 1473.1
+1906.85571 1366.2
+1907.15405 6996.6
+1930.45386 854.3
+S	3021	3021	672.8469721
+Z	4	2687.35659
+182.76683 618.6
+183.76508 584.0
+188.21382 636.9
+188.22614 865.6
+188.25359 990.4
+188.26427 1425.1
+188.27959 1942.1
+188.29150 2153.9
+188.30312 1888.0
+198.96878 873.9
+199.26552 992.6
+199.33148 1380.8
+199.34543 1287.4
+199.36398 1875.1
+199.37790 863.5
+212.06581 608.2
+223.98074 592.3
+233.42941 685.9
+255.28476 570.7
+255.29150 507.1
+277.14539 4420.4
+278.11310 1404.5
+317.75598 541.7
+330.52112 622.9
+342.27444 705.7
+373.18503 945.3
+375.13086 2079.1
+376.16089 1265.3
+382.27661 697.0
+385.18713 1700.6
+391.19516 1071.8
+392.15576 1218.5
+397.22028 720.3
+410.40024 635.4
+414.21725 735.6
+415.73077 2433.2
+417.19083 746.1
+429.72903 1869.4
+437.74313 751.4
+443.69571 859.9
+445.24457 708.8
+451.74213 1483.9
+452.24487 1267.0
+456.23004 3748.2
+470.91336 14947.8
+471.24762 11359.4
+471.58176 3806.1
+477.17386 1323.7
+482.67783 599.1
+483.74985 2049.1
+484.25143 1093.5
+494.20468 1080.4
+498.27072 2894.4
+499.27533 717.2
+503.66422 660.3
+505.24072 1893.9
+506.23355 674.9
+508.26834 917.9
+519.93738 3777.7
+520.27008 3262.6
+520.60657 1622.4
+521.35071 735.7
+532.54346 1636.3
+539.22467 959.6
+540.26733 2922.4
+540.76758 1925.6
+543.27277 2113.2
+543.77405 909.4
+553.28333 53993.4
+554.28613 13463.3
+555.28589 2164.9
+557.27155 5207.0
+557.77002 3188.2
+565.78412 25553.8
+566.28510 16907.3
+566.78802 4635.5
+567.28302 1265.0
+578.17145 633.5
+578.60742 1211.2
+578.94177 1270.1
+582.30255 4926.9
+583.30597 1649.8
+584.61658 1574.3
+588.79706 961.7
+590.62073 1653.4
+590.95398 954.5
+595.96509 2943.5
+596.30127 2473.6
+602.65796 643.9
+607.28918 849.7
+608.29187 6360.9
+608.79529 4801.6
+609.29602 3644.2
+613.82190 2175.1
+614.33173 1366.4
+614.63599 1178.6
+614.97565 1501.8
+615.05835 936.7
+615.30591 1365.1
+616.31775 912.2
+616.80829 7197.6
+617.30841 5293.8
+617.80768 2244.7
+618.81238 1156.0
+619.06177 1242.8
+619.56689 715.4
+623.32281 1081.2
+625.32013 5430.5
+625.82367 2417.0
+626.32806 12169.9
+627.33038 4117.2
+628.33704 881.6
+630.31616 1187.9
+630.40686 933.1
+630.80670 5400.1
+631.30670 4651.8
+631.80798 1980.0
+634.41736 1170.9
+638.46924 671.4
+638.97437 1124.2
+639.31836 91163.9
+639.81964 65723.8
+640.32117 24133.2
+640.82184 7389.3
+641.32269 1584.0
+643.07642 700.4
+644.64178 1714.4
+644.98004 3027.6
+645.31018 1364.5
+648.36249 1396.5
+648.83240 996.6
+650.31903 3794.5
+650.65387 2608.3
+650.98456 1019.9
+652.31110 1156.5
+657.34027 5065.2
+657.83801 1510.0
+676.67029 852.0
+687.86316 740.8
+688.35730 1385.1
+696.86176 6802.8
+697.36298 6776.7
+697.86591 1780.4
+703.36786 765.6
+703.88458 799.1
+704.38440 611.2
+704.83185 563.5
+704.88348 966.4
+705.86682 174985.0
+706.36780 139107.2
+706.69043 827.0
+706.86902 59214.2
+707.37152 14025.8
+707.87720 2521.2
+708.82892 688.1
+711.41754 961.6
+712.35327 766.8
+719.34918 777.1
+721.40173 5959.4
+722.40698 1336.1
+731.13165 928.4
+739.41254 33295.3
+740.41553 13493.7
+741.42053 2927.6
+745.36597 6117.2
+746.36603 2733.4
+757.04230 784.4
+761.39423 716.0
+763.04901 669.0
+763.34668 1865.3
+770.40125 1021.9
+770.89746 931.3
+775.21832 688.9
+779.40088 24677.8
+779.90179 20558.0
+780.40424 10912.7
+780.90515 3672.6
+781.41071 1174.9
+794.92590 648.0
+795.86340 1273.5
+802.40155 658.5
+824.74213 988.3
+825.07819 1294.2
+825.41742 728.2
+827.90796 2982.3
+828.41052 3463.6
+828.91455 1440.1
+829.43127 7645.0
+830.42841 2879.5
+831.43231 1154.5
+836.42212 17368.0
+836.92371 17595.2
+837.42566 8881.1
+837.93024 2248.3
+858.45020 9377.3
+859.45300 5330.3
+860.44897 1549.1
+876.42822 1234.0
+876.93256 1153.7
+884.46478 4592.6
+884.93018 15774.1
+885.42871 13784.7
+885.93219 7740.3
+886.43091 2759.7
+893.44415 18649.6
+893.94379 18696.7
+894.44617 10048.1
+894.94531 4030.7
+898.92322 794.4
+902.47601 10492.2
+903.47949 5392.4
+903.61566 657.6
+904.48212 1296.4
+913.42322 981.0
+919.50177 1419.5
+921.45093 2013.9
+921.95447 1449.1
+922.46167 870.0
+929.97699 785.3
+966.49542 3643.8
+966.96100 2172.7
+967.49774 2547.9
+975.99023 1058.9
+980.46692 761.9
+994.47089 2065.4
+994.97180 1772.7
+995.47241 1265.8
+998.50049 1149.2
+1002.98401 3991.6
+1003.48633 5051.7
+1003.98810 3162.3
+1004.48480 930.9
+1011.49774 2857.7
+1012.00098 4409.0
+1012.49976 3083.1
+1016.51923 4459.2
+1017.51935 2367.4
+1034.25342 652.8
+1043.01538 636.3
+1051.01904 1141.3
+1051.51965 1760.3
+1057.29846 783.3
+1059.52869 2040.9
+1060.02979 2309.3
+1060.52600 1161.0
+1068.04932 1268.6
+1068.54199 2510.7
+1069.04529 1395.1
+1069.55981 897.4
+1079.51001 1076.8
+1112.55212 2387.0
+1113.53589 6691.1
+1114.53394 3815.5
+1115.54236 1207.1
+1116.31824 664.2
+1130.56116 23370.9
+1131.56567 14529.2
+1132.56580 5633.4
+1133.55994 924.8
+1188.30237 1187.3
+1188.53394 660.2
+1198.21411 3661.1
+1237.60718 918.9
+1260.60388 2647.2
+1261.60278 2035.3
+1262.61902 1054.1
+1277.62964 3329.7
+1278.64001 2112.2
+1471.39319 732.2
+1525.41943 837.9
+1555.39221 702.9
+1709.56738 641.4
+1776.95801 838.5
+1823.45813 674.4
+1878.89587 1537.6
+1879.26013 1183.0
+1879.60571 19899.7
+1879.96741 1524.7
+1880.32959 720.8
+1881.31287 858.3
+1887.25684 644.4
+1907.09814 7161.3
+1930.62024 897.5
+S	3022	3022	557.7763246
+Z	4	2227.074
+142.56435 497.7
+145.78749 581.8
+147.58817 494.0
+151.09700 583.7
+165.75899 706.7
+188.22893 536.1
+188.25584 623.8
+188.27213 631.3
+188.27753 600.2
+188.28900 925.7
+188.30098 740.4
+188.30760 642.5
+188.32272 678.4
+188.33842 742.8
+188.36023 596.1
+197.68828 626.0
+198.96201 998.3
+199.26294 868.0
+199.27573 673.6
+199.33720 1180.3
+199.34697 1458.5
+199.36125 2342.5
+199.37354 1390.6
+199.39142 813.2
+199.43556 681.4
+199.46928 701.3
+219.16039 561.0
+223.47371 685.8
+223.79384 526.8
+251.72809 630.9
+252.74257 640.2
+271.68515 609.8
+273.89008 525.4
+293.40103 497.2
+299.06656 576.6
+303.16599 834.6
+310.41779 640.1
+317.70850 600.3
+324.58679 619.5
+336.47299 577.3
+340.65997 954.5
+340.99838 560.9
+342.25827 819.9
+345.16122 620.3
+352.83997 554.4
+354.16617 1623.0
+354.65555 1264.3
+356.46991 613.6
+397.19870 716.3
+411.18753 4424.2
+411.67706 2097.1
+419.19980 630.5
+419.86578 647.1
+420.19119 3377.5
+420.53314 865.9
+420.69266 744.0
+421.40668 741.5
+424.87436 2501.5
+425.54019 9116.8
+425.87427 7032.1
+426.20673 3446.7
+426.53906 1539.7
+427.52567 807.1
+442.17316 571.9
+446.21887 675.5
+447.84854 689.7
+453.73251 1809.2
+454.22232 2180.1
+454.71887 952.7
+458.72559 942.6
+459.21255 1720.6
+459.70407 1493.3
+460.21021 955.2
+462.73648 5587.1
+463.23828 2522.2
+463.74176 795.7
+467.72858 6631.3
+468.21933 7635.9
+468.72253 4288.1
+469.22388 1063.8
+472.72870 717.4
+476.73477 7569.8
+477.23645 2863.5
+485.22610 649.9
+496.25366 1055.2
+507.74744 746.5
+513.30334 1528.1
+516.74658 757.0
+517.24609 820.2
+519.75348 861.4
+520.50024 692.4
+524.26105 895.6
+525.23853 1627.3
+529.27045 4479.4
+529.77380 2494.3
+530.27142 3195.3
+530.77209 770.5
+532.50842 2101.8
+539.49994 633.2
+540.00470 804.2
+542.76569 888.1
+543.26880 2145.6
+543.51154 1117.1
+543.76892 1973.7
+544.00897 3053.2
+544.25916 1760.0
+544.51038 2335.2
+545.00360 641.4
+571.77850 3327.2
+572.28394 1376.4
+572.78278 1039.7
+580.76544 775.6
+588.27936 2293.3
+588.78442 1567.0
+589.27960 4382.2
+589.78094 2878.8
+590.28107 2005.5
+628.29340 2884.1
+628.79462 2415.0
+629.29297 9335.5
+629.79370 7499.5
+630.29340 6541.6
+630.38379 1341.4
+630.79156 2876.1
+631.29053 1260.2
+636.30682 1685.6
+636.80518 8040.1
+637.30634 5328.7
+637.80615 25236.3
+638.30750 13323.0
+638.80621 12569.2
+639.30646 4853.9
+639.80463 1515.7
+651.64789 618.7
+676.65027 1269.1
+685.83765 1380.8
+686.33734 1157.0
+693.35040 622.2
+694.34552 1867.6
+694.85004 1138.7
+706.39355 1983.1
+715.35834 668.7
+725.33038 1769.5
+737.01587 676.4
+737.35406 1023.5
+743.35663 637.9
+750.37085 975.0
+750.86731 883.3
+751.36786 3062.0
+751.87054 2826.7
+752.36932 2838.5
+752.86963 1076.7
+779.35681 690.4
+795.84552 1060.3
+822.34546 2190.4
+823.35248 1106.8
+839.37793 5544.5
+840.37830 2132.8
+844.42084 782.4
+859.22131 591.5
+913.75793 613.9
+934.45068 1112.0
+935.43701 1028.3
+936.45380 1008.0
+952.46155 3776.8
+953.46118 1689.5
+953.93756 660.0
+972.44763 977.8
+1011.47937 1060.4
+1057.26685 876.4
+1080.57129 665.1
+1192.31885 601.5
+1192.83875 569.6
+1198.13599 3339.0
+1281.72607 658.7
+1877.86487 650.3
+1878.18921 663.0
+1879.25513 2651.9
+1879.55994 19372.5
+1879.88330 3004.0
+1906.75085 550.0
+1907.04785 7303.8
+1907.35291 592.6
+1918.96997 947.0
+1930.53528 923.5
+S	3023	3023	1880.00024127
+Z	2	3758.153
+Z	3	5636.725
+532.55133 2439.3
+549.14911 649.2
+626.70203 847.3
+630.39636 851.1
+676.65637 881.3
+742.92816 643.9
+754.02216 609.4
+795.85291 1190.3
+827.80426 600.7
+835.09503 765.7
+940.83209 669.1
+1057.27417 834.4
+1198.23547 3335.0
+1283.84680 715.6
+1377.19336 663.2
+1525.40417 1078.9
+1633.99512 723.7
+1860.04578 795.8
+1870.13733 844.4
+1870.49695 723.5
+1875.72290 611.2
+1878.82104 1117.0
+1879.58130 19601.8
+1879.83459 2038.3
+1882.88708 617.4
+1907.01892 7366.4
+1930.56128 1109.5
+S	3025	3025	672.8456896
+Z	4	2687.35146
+182.78278 1905.0
+188.18538 1533.9
+188.18770 1540.6
+188.26390 4126.6
+188.27460 5573.9
+188.29544 6531.3
+188.31854 3804.0
+188.42064 1713.5
+194.13615 2200.3
+195.04939 1917.2
+195.57652 2042.4
+197.69841 1912.4
+198.96252 3544.3
+199.26091 2242.2
+199.27348 1965.5
+199.30978 2331.0
+199.33667 2463.1
+199.35100 6858.1
+199.35919 5047.0
+199.36801 5140.1
+199.45187 2363.4
+199.45430 2312.9
+199.46648 2430.8
+218.53171 2146.3
+249.15938 2566.8
+256.35611 1752.3
+267.44098 2027.0
+270.31805 2051.5
+271.75800 1768.1
+277.14594 25507.5
+277.64819 6348.0
+278.11435 5705.8
+284.13986 3776.9
+285.47479 2279.7
+312.17816 2719.6
+314.14941 2771.7
+326.59665 1659.9
+331.14020 3833.3
+371.56650 1662.6
+373.18781 6705.3
+373.68921 2872.7
+375.12936 10467.9
+376.16348 5634.4
+381.19766 1826.5
+385.18723 7672.2
+386.18970 2673.7
+390.82312 2187.6
+391.19928 3616.1
+392.15659 6112.8
+396.20334 2349.9
+397.22150 3625.3
+399.20966 2837.0
+414.21353 3300.5
+415.73135 7414.0
+416.23312 4561.3
+416.73645 2061.6
+417.25293 3773.9
+429.72943 5083.9
+430.23254 3890.9
+437.74478 2362.4
+438.24466 3114.4
+445.24460 2792.3
+446.25143 2854.7
+451.74158 8106.8
+452.24286 3947.8
+456.23163 14701.7
+457.23447 3045.3
+470.27298 3523.1
+470.91373 64437.6
+471.24817 52768.0
+471.58292 24991.3
+471.91272 5459.7
+472.24683 2254.1
+477.17673 6760.7
+480.25854 2896.4
+483.74887 14504.3
+484.25009 6487.7
+485.24927 3340.6
+486.24948 2302.4
+488.21509 5647.1
+489.27051 2445.4
+494.20374 3744.8
+495.23257 1946.0
+498.26974 14156.6
+499.27667 6404.1
+503.76697 2164.8
+505.23923 7115.2
+508.27307 8214.0
+508.76480 3112.6
+519.93604 13922.5
+520.27234 12356.8
+520.60602 3593.9
+525.27899 4538.8
+531.75464 3776.3
+532.26221 2627.0
+532.56305 5907.6
+535.27710 3392.8
+536.24017 2176.1
+539.22491 4979.9
+540.26746 16083.4
+540.76886 9990.0
+543.27301 8177.7
+543.77509 6710.7
+553.28363 252434.5
+554.28638 71674.6
+555.28680 12054.6
+556.77905 3111.1
+557.27087 22598.3
+557.77277 14689.7
+558.27740 6803.2
+564.29291 2559.9
+565.78430 109806.3
+566.28589 74079.9
+566.78809 21941.9
+567.28796 6094.3
+578.60919 9186.1
+578.94617 8095.2
+579.27954 2944.0
+582.30304 23051.1
+583.30701 5804.0
+584.61554 2461.2
+584.95013 2403.4
+588.79468 5678.5
+589.96558 2126.5
+590.28143 4899.2
+590.62164 4255.3
+590.95782 4523.8
+595.96527 9692.5
+596.29852 13051.6
+596.63574 3832.4
+596.96564 3403.7
+607.28711 5883.0
+608.29071 23985.8
+608.32550 9641.4
+608.79657 22865.5
+609.29572 17175.5
+613.82452 13982.7
+614.32745 8319.8
+614.63660 3635.6
+614.80127 3446.6
+614.97070 2565.4
+616.27142 1770.7
+616.31927 3163.2
+616.80792 31813.4
+617.30872 28627.6
+617.81244 9256.8
+618.31671 2683.3
+618.81146 5483.5
+619.05994 4943.0
+619.31586 2274.5
+623.56958 3038.9
+625.32129 21504.5
+625.82330 14940.9
+626.32892 62025.8
+626.83258 2412.0
+627.33154 20511.0
+628.73444 1880.4
+630.31482 8865.4
+630.80511 30377.8
+631.30585 16505.3
+631.80823 6561.4
+632.30859 4140.4
+633.29895 3803.6
+635.28113 2730.2
+637.61230 2262.7
+638.36212 2434.7
+639.31885 389404.5
+639.82013 308909.6
+640.17255 2695.0
+640.32147 130367.5
+640.82306 37057.6
+641.03033 2684.0
+641.32379 7513.7
+641.52454 2479.1
+643.06940 2755.5
+644.64313 6686.5
+644.98004 7367.6
+645.31110 2684.4
+648.30981 2983.1
+648.36237 4867.5
+648.83698 5617.6
+650.31848 8949.2
+650.65344 11884.1
+650.98651 6976.1
+652.30884 6266.3
+676.64789 2717.2
+687.85608 7354.7
+688.36279 4392.0
+688.86328 2429.6
+696.86230 28263.8
+697.36237 21678.6
+697.86407 10816.9
+698.36414 4177.7
+701.01563 3616.9
+703.03436 2761.6
+703.36121 2970.3
+703.88348 3504.8
+704.11487 2228.4
+705.86743 777482.9
+706.36823 639189.0
+706.44818 2154.2
+706.86884 294743.8
+707.02209 4791.4
+707.37036 92874.1
+707.87408 19576.4
+708.02795 2768.6
+708.52606 2325.6
+711.42694 4095.8
+712.36414 2796.4
+712.69672 4112.6
+713.02417 4628.0
+719.35321 3187.4
+719.68329 4060.9
+721.40247 30973.1
+722.40955 9920.6
+723.37891 3006.3
+725.02802 3665.1
+725.35846 4688.4
+727.35809 3030.7
+731.11676 2533.7
+739.41278 156226.4
+740.41620 59567.1
+741.41925 15783.2
+742.42273 3795.4
+745.36578 26654.2
+746.37006 13113.4
+747.37341 3866.3
+751.93463 2280.4
+761.39728 6719.9
+762.38092 3788.7
+763.34155 12109.7
+764.34436 3830.6
+770.39807 7338.2
+770.89417 5248.7
+779.40137 110675.4
+779.90240 101288.7
+780.40466 45215.1
+780.90582 15068.5
+795.84296 3014.0
+819.39587 2870.4
+819.89380 2456.9
+825.74353 2316.1
+827.90936 18798.2
+828.41284 16270.2
+828.91357 7009.3
+829.43091 45746.9
+830.43225 17452.1
+831.44061 6125.0
+836.42212 72481.3
+836.92401 77333.0
+837.42511 39715.9
+837.92725 16081.8
+838.42853 2647.8
+840.44556 3338.1
+841.46625 2636.5
+858.45081 44644.9
+859.45306 24454.3
+860.45758 6294.4
+871.44928 2164.9
+874.47754 3180.7
+875.92505 4016.4
+876.42603 11988.1
+876.91699 4969.5
+877.42609 2797.1
+884.46674 21116.7
+884.93091 78213.4
+885.42896 72193.1
+885.93414 39004.9
+886.42737 10871.1
+886.93109 3875.5
+893.44464 92691.1
+893.94513 82623.9
+894.44659 51572.0
+894.94775 18275.5
+895.44537 6679.1
+899.43176 3425.0
+902.47638 47139.5
+903.47925 26682.6
+904.48615 8620.8
+912.94629 5387.0
+913.44067 5136.9
+913.93390 3769.6
+919.49091 3024.6
+920.51086 2967.7
+921.45435 8237.8
+921.95520 5514.3
+922.45941 3570.0
+932.44867 2312.3
+957.95337 5566.1
+958.44916 4197.0
+966.49341 22385.2
+966.96606 11492.0
+967.49603 11810.6
+968.49890 5649.4
+974.97363 3140.3
+975.47156 6464.9
+975.98169 2817.6
+994.47388 8429.7
+994.97394 10181.2
+995.47565 9502.1
+998.51050 5005.6
+999.50031 3095.3
+1002.98401 19740.8
+1003.48639 25487.7
+1003.98834 12731.3
+1004.49432 3410.4
+1005.50641 2888.2
+1011.49780 13919.2
+1011.99963 21469.3
+1012.50024 12411.5
+1013.00714 3625.6
+1015.53925 2744.1
+1016.51984 21131.1
+1017.52527 16394.2
+1018.53357 5942.7
+1020.82916 1804.6
+1051.01819 5862.9
+1051.51904 5744.7
+1052.02917 3643.5
+1057.25659 2148.1
+1059.52466 9174.4
+1060.03027 9451.8
+1060.53149 5016.3
+1068.04199 7582.8
+1068.54321 13421.3
+1069.04431 10216.2
+1069.54504 2450.1
+1086.45435 3199.0
+1089.75122 2387.1
+1112.55261 13126.6
+1113.53674 37559.8
+1114.54041 23493.7
+1115.54480 8936.6
+1130.56213 111379.2
+1131.56543 71814.2
+1132.56970 24015.7
+1133.56250 6848.8
+1161.92932 2655.3
+1198.26196 9305.4
+1236.61816 4293.1
+1237.61389 3100.8
+1253.07593 2129.1
+1259.60339 1974.5
+1260.60681 12416.9
+1261.60706 7545.4
+1262.61426 3753.2
+1277.62915 16026.9
+1278.63220 11691.5
+1279.63501 5999.6
+1346.74414 1916.5
+1877.60229 2892.8
+1878.00647 3800.4
+1878.36230 2843.4
+1879.56116 58424.6
+1881.10168 2097.2
+1881.48096 3476.4
+1907.05396 22710.9
+1919.04211 1910.0
+1930.56787 2825.9
+S	3026	3026	673.5980746
+Z	4	2690.361
+181.70740 25822.4
+182.62328 27578.6
+182.77919 34959.7
+183.05391 24872.4
+188.26129 64082.0
+188.27029 61921.6
+188.29233 61953.7
+188.30078 52838.7
+188.30888 46460.1
+188.32539 37470.8
+188.33656 30224.1
+188.35484 25196.9
+188.39046 28638.5
+188.39755 25142.5
+194.00858 27056.1
+198.96561 53842.6
+199.25677 40067.9
+199.35510 120936.5
+199.36292 24528.1
+199.37268 28444.0
+214.50494 24308.4
+218.29805 21391.9
+255.28627 24660.2
+265.82013 26209.8
+271.37497 33881.3
+277.14734 31722.0
+287.00458 23425.0
+288.39746 26294.4
+310.47516 24974.0
+321.78110 24188.6
+334.36615 21701.7
+342.26389 28041.8
+367.08344 27626.9
+396.93912 24120.4
+409.36353 23875.5
+470.91379 137923.0
+471.24780 167008.8
+471.58167 64025.7
+482.64896 34834.1
+490.05353 24050.7
+519.93817 27163.7
+520.26849 61758.3
+523.78912 22823.1
+532.55505 92185.8
+540.26233 28891.5
+553.28284 504233.4
+554.28540 115298.9
+565.78339 241495.8
+566.28442 151790.3
+582.30133 31565.0
+595.96277 98178.8
+596.57550 31615.0
+600.17358 29333.4
+608.79041 48868.3
+614.55621 27880.6
+616.80762 97204.2
+617.31091 83558.3
+625.32001 58556.5
+625.82251 46289.3
+626.32587 121681.7
+630.39355 40040.0
+630.80768 62236.5
+631.31244 44876.4
+639.31757 1055537.4
+639.81982 775128.9
+640.32111 329303.8
+640.82251 81509.9
+657.34296 51996.6
+657.83868 33427.6
+671.53485 28526.4
+676.65546 39284.1
+696.86316 38950.3
+697.87982 30551.6
+705.86603 2316731.3
+706.36719 1811749.9
+706.86823 830748.2
+707.36969 210971.2
+707.87622 41128.2
+721.39337 35118.4
+731.11005 36704.9
+739.41144 262233.9
+740.41376 108903.1
+745.36548 43209.3
+779.39960 218775.5
+779.90094 215827.9
+780.40448 88627.3
+795.84753 37971.1
+804.64093 27220.2
+827.90894 33659.0
+828.41522 30625.0
+829.42542 49881.6
+836.41943 180698.0
+836.92297 163784.3
+837.42712 64296.0
+837.91833 45885.7
+858.04169 27438.8
+858.45355 68297.7
+859.44757 33709.0
+884.46503 34534.3
+884.93225 104259.5
+885.42944 156785.5
+885.92975 46710.5
+893.44440 155000.0
+893.94397 138440.2
+894.44427 98137.6
+894.96246 29181.5
+902.47687 117023.9
+903.48291 47469.1
+966.96112 48024.7
+1002.97992 54694.6
+1003.49023 48498.6
+1003.99152 34526.2
+1011.50305 50153.9
+1012.00372 41714.7
+1016.52130 36222.0
+1024.19666 30151.1
+1045.99182 27458.1
+1057.28979 27822.1
+1060.53796 32331.4
+1085.46631 30707.5
+1086.44653 38976.8
+1113.52930 50281.9
+1114.53809 47100.8
+1130.56189 259855.5
+1131.56555 183855.5
+1132.55872 53963.6
+1198.24158 140613.4
+1277.63342 31507.9
+1278.64844 32062.9
+1612.80249 26691.7
+1777.47546 32138.8
+1834.04517 26846.0
+1878.20813 30392.4
+1878.56042 24281.8
+1879.26990 107665.9
+1879.56079 823385.8
+1880.85107 31222.5
+1907.05042 302143.7
+1909.25757 27172.0
+S	3027	3027	1086.2498246
+Z	2	2170.652
+Z	3	3255.474
+291.44580 15150.2
+308.90366 26220.7
+316.42636 16112.6
+346.76678 15128.0
+350.28561 21177.3
+384.19495 15421.6
+397.81204 20001.8
+475.15945 16050.0
+495.29111 15888.6
+496.27582 71888.7
+513.30249 306416.8
+514.30530 68164.0
+515.31146 17311.4
+522.63721 14775.4
+532.57007 41921.8
+534.36438 33892.4
+549.16718 22974.8
+573.07349 17778.5
+588.27515 35487.9
+591.38159 20845.6
+604.14685 16983.7
+626.98004 17123.9
+665.15088 17635.1
+676.65112 34022.5
+678.39288 20273.8
+681.37823 14429.3
+690.29633 30381.5
+706.38373 60748.4
+707.32605 39434.0
+707.39380 27696.5
+723.43890 206594.1
+724.44080 60689.5
+725.33636 122084.7
+726.33411 31665.9
+795.85675 21598.3
+820.45972 19184.9
+821.36957 77709.1
+822.35229 190890.7
+823.35443 77858.5
+829.42877 25742.9
+829.93121 28512.4
+839.37915 113291.2
+840.37982 50507.4
+877.94952 42591.1
+878.45111 23397.6
+892.47180 22343.4
+906.45355 31390.2
+907.43646 47549.9
+908.44684 24185.1
+916.44525 64888.2
+916.53021 122710.9
+917.42609 74390.3
+917.52930 48750.6
+918.42731 53473.4
+921.00494 29732.8
+924.35004 16724.4
+924.46497 105628.3
+925.46667 55518.9
+925.98828 100461.1
+926.48584 55639.3
+926.98651 49002.3
+927.62488 16539.7
+934.44543 623132.2
+934.99738 368500.8
+935.43866 1535977.8
+935.99634 73948.8
+936.43964 764581.6
+937.44226 190098.0
+938.45062 30901.9
+950.53595 23186.6
+952.46240 2594044.0
+953.46521 1205432.0
+954.46777 315798.1
+955.46832 40813.7
+963.01392 22858.6
+963.51282 22824.7
+967.55975 101080.7
+968.56342 44625.8
+971.99231 25456.4
+977.54333 44293.9
+978.04108 36067.2
+982.03223 63641.3
+982.23004 16090.6
+982.52942 136411.9
+983.02771 115360.3
+983.53119 60030.4
+991.03748 563693.2
+991.53864 649629.8
+992.03870 329898.6
+992.54095 123008.6
+993.04767 29574.4
+1002.53851 25393.2
+1005.55762 21669.8
+1006.06085 18372.7
+1011.03516 59371.1
+1011.54218 36889.2
+1012.03821 25446.1
+1019.54810 285300.0
+1020.04987 278854.9
+1020.55322 140553.8
+1021.05603 60932.5
+1024.58093 167243.1
+1025.58533 78738.5
+1029.61353 173469.3
+1030.61462 120307.3
+1031.49988 36109.2
+1031.62012 42669.8
+1032.49695 41703.3
+1033.49072 23225.0
+1049.51501 155640.2
+1050.51257 79690.3
+1051.52209 26408.1
+1057.86340 18242.4
+1059.55298 49762.5
+1060.05310 23872.1
+1093.05383 17247.6
+1104.60229 22979.1
+1111.73914 17525.8
+1121.63440 122073.8
+1122.63550 64899.8
+1135.44397 16721.2
+1187.55493 16718.8
+1198.26880 79379.2
+1200.67212 66016.7
+1201.66138 903278.3
+1202.66394 586479.8
+1203.66663 209838.4
+1204.66003 42629.0
+1218.68579 3889993.0
+1219.68848 2615676.0
+1220.69202 923985.7
+1221.69263 197566.8
+1222.70544 30698.0
+1235.56409 19565.7
+1314.73425 32783.3
+1315.75525 22309.2
+1331.76904 175806.6
+1332.77856 105121.5
+1333.78748 48487.5
+1349.07422 20113.6
+1430.68835 150134.8
+1431.68335 90255.4
+1432.69336 42766.9
+1445.81091 57468.4
+1446.81470 47162.2
+1447.71240 257010.0
+1448.71155 190339.8
+1449.71509 72515.3
+1450.68921 24224.3
+1623.78784 24068.9
+1632.91785 23697.6
+1639.83789 51573.3
+1640.82666 241309.0
+1641.82617 204245.8
+1642.82300 84987.5
+1643.82739 40369.0
+1657.84583 378930.5
+1658.84973 396945.0
+1659.85181 162971.4
+1660.86047 52033.7
+1719.92859 25274.2
+1805.92529 20528.6
+1807.01807 22616.7
+1850.95703 45675.1
+1851.96375 54474.0
+1853.96875 20439.6
+1868.97900 28959.1
+1869.97205 18982.4
+1877.94104 23089.0
+1878.48254 28151.4
+1879.08081 42516.0
+1879.58362 526583.6
+1880.08582 47459.6
+1880.40442 23721.8
+1880.72498 26987.6
+1881.24243 25158.0
+1907.08838 193250.2
+1930.60254 18926.8
+1933.74402 19496.3
+S	3029	3029	672.8486196
+Z	4	2687.36318
+183.88091 657.9
+188.20854 772.0
+188.23936 520.4
+188.26677 1868.6
+188.27199 1870.2
+188.29216 2148.9
+188.30920 1544.8
+188.38719 687.5
+196.96867 614.9
+198.96761 914.3
+199.06541 763.4
+199.24947 893.3
+199.27010 689.7
+199.34756 2294.4
+199.35730 1656.3
+199.36835 1044.1
+199.38728 972.1
+199.44434 730.4
+218.59821 591.0
+221.10013 589.7
+223.88522 532.3
+230.75021 636.0
+232.49266 745.7
+233.57425 693.0
+235.79909 617.0
+239.08096 600.8
+272.02274 582.9
+277.14523 2987.7
+281.75992 717.8
+294.89948 563.6
+298.84930 613.4
+308.90033 639.2
+314.14981 640.8
+316.40274 603.3
+317.40112 628.4
+359.10297 597.2
+371.42551 613.1
+375.13107 1169.5
+376.15939 1034.0
+386.75317 735.6
+413.31689 683.3
+415.72974 1029.1
+429.72638 1576.8
+437.70685 616.5
+451.74268 1672.1
+453.18213 616.6
+456.23276 1427.2
+470.91354 8279.8
+471.24799 6062.9
+471.58105 2528.5
+477.17581 682.7
+483.74753 1465.5
+498.26993 1445.6
+519.93579 2390.2
+520.27051 1737.8
+520.60242 1243.4
+524.72528 770.2
+532.55267 1942.8
+534.99823 663.7
+540.26794 1592.5
+543.27240 1241.3
+543.77252 773.6
+553.28296 27662.1
+554.28571 7603.7
+556.77130 783.8
+557.27020 2126.2
+557.77234 1242.1
+562.00952 691.3
+565.78375 16436.1
+566.28558 8059.4
+566.78607 2427.3
+578.61310 763.9
+578.94183 1213.6
+582.30103 2179.1
+590.28674 966.7
+595.96680 1233.4
+596.29968 1166.9
+608.29211 3473.5
+608.79547 2965.2
+609.29370 2115.5
+613.82507 1064.1
+614.97327 939.3
+616.31897 851.2
+616.80688 6185.3
+617.30957 4106.3
+617.81158 1270.4
+625.31982 2821.7
+625.82446 2347.7
+626.32709 5998.8
+627.33246 2007.5
+630.42291 941.1
+630.80670 3772.3
+631.30817 2735.3
+631.79944 800.2
+639.31805 52651.4
+639.81934 40424.5
+640.32074 14247.5
+640.82178 4353.3
+641.31641 1057.9
+644.64441 1849.1
+644.98181 811.4
+645.31494 931.4
+648.36090 1249.1
+650.31750 816.8
+650.65240 1552.5
+657.33984 3203.0
+657.84027 2369.0
+676.68933 1034.3
+688.35144 1009.2
+696.86011 3417.0
+697.36292 2801.6
+697.86530 1256.2
+705.86621 109221.6
+706.36737 88277.2
+706.86871 39821.5
+707.37115 8835.0
+707.87018 1587.2
+708.36066 850.0
+721.40228 2508.4
+722.41028 931.9
+725.35516 975.8
+739.41254 17808.2
+740.41583 6949.6
+741.41589 1911.3
+745.36853 2966.0
+746.36584 1667.8
+763.34027 736.9
+770.39557 874.2
+779.40118 12282.5
+779.90094 10092.1
+780.40649 5497.7
+780.90308 1318.2
+795.85706 1004.4
+810.59369 700.6
+827.90887 2058.3
+828.41119 1353.5
+829.43201 3449.2
+830.42615 1473.3
+836.42096 10180.4
+836.92419 9672.5
+837.42328 5639.5
+837.92896 1784.9
+858.45001 5585.7
+859.45178 2865.2
+860.45178 944.5
+876.92352 796.1
+884.46234 2103.7
+884.93091 7944.6
+885.42743 7347.0
+885.93231 3861.8
+886.42395 860.7
+893.44330 9957.5
+893.94293 8768.1
+894.44379 5149.7
+894.94733 2126.7
+902.47528 5622.7
+903.47864 3674.6
+904.47815 809.7
+912.94434 851.7
+919.49878 807.3
+921.46564 1073.4
+921.96832 660.5
+961.08527 796.0
+966.49219 1788.6
+966.95770 1257.5
+967.48822 2005.1
+975.47614 1054.7
+992.10431 722.9
+994.47070 1247.7
+994.96667 1225.7
+1002.98395 2202.8
+1003.48584 3599.0
+1003.98846 1925.9
+1011.49951 1561.6
+1011.99658 1866.7
+1012.49005 1107.0
+1016.51947 2537.7
+1017.51282 1455.9
+1021.74438 666.1
+1034.42676 705.6
+1051.51868 728.1
+1057.33093 830.7
+1060.01904 1451.8
+1068.54163 1692.9
+1085.40967 734.9
+1113.53308 3229.3
+1114.53870 2020.3
+1115.54602 1045.6
+1130.56201 12514.7
+1131.56409 8604.6
+1132.57031 2922.5
+1140.12842 753.7
+1187.90857 660.7
+1198.22644 3701.1
+1260.59509 1478.6
+1277.62476 2025.3
+1278.63562 1278.6
+1376.14258 623.5
+1525.41064 829.3
+1613.10437 717.7
+1877.11304 996.2
+1879.08667 2365.3
+1879.65625 19501.6
+1880.32629 2027.6
+1880.97290 1016.5
+1881.26794 729.1
+1907.12415 7159.3
+1930.64844 899.5
+S	3030	3030	673.6005746
+Z	4	2690.371
+175.35243 536.9
+178.49623 609.7
+178.50237 519.8
+181.09541 565.5
+182.78539 627.9
+184.81026 541.7
+188.21149 618.4
+188.23241 751.5
+188.24052 603.9
+188.25647 902.4
+188.26784 593.1
+188.27386 488.3
+188.28481 820.0
+188.29402 742.0
+188.31042 566.8
+188.36018 717.8
+191.00075 572.9
+199.16298 755.3
+199.25581 951.4
+199.35501 1944.0
+199.36079 2299.9
+199.38071 946.2
+199.45709 790.2
+210.16499 573.6
+214.51999 569.2
+215.81944 621.8
+219.58098 552.8
+220.74561 713.8
+234.12332 750.5
+235.27257 560.9
+243.09851 578.9
+245.02197 705.6
+252.38425 525.6
+255.79077 757.1
+271.51016 1104.6
+272.17517 623.3
+277.14551 5539.3
+277.61087 610.8
+277.64828 1507.4
+278.11255 1396.8
+280.18579 632.7
+280.96097 693.6
+328.93582 642.6
+338.31830 733.9
+357.54129 577.4
+362.72189 666.4
+375.13254 1957.0
+376.16049 1035.2
+381.36633 811.0
+385.18628 786.8
+387.42923 661.0
+391.61136 666.6
+392.15628 1098.5
+415.73022 2150.6
+416.23645 834.2
+422.15753 633.9
+427.55432 734.3
+429.73019 1690.1
+430.23074 1310.5
+431.98471 585.5
+432.72433 678.4
+445.24506 946.9
+445.96881 627.6
+451.74216 1403.3
+456.23166 3263.5
+469.00476 700.9
+470.91321 15423.8
+471.24750 12129.0
+471.58133 5123.4
+483.74829 1126.0
+494.20502 924.3
+498.27295 2331.9
+499.27878 1005.6
+505.23575 1452.9
+508.27625 957.6
+508.76559 1113.9
+511.22964 877.0
+519.93585 4946.0
+520.27130 3200.9
+520.60449 1597.0
+532.57855 1634.8
+539.22406 1088.8
+540.26538 2025.3
+540.77264 1293.3
+543.27484 2325.2
+543.77319 1691.1
+552.04736 713.7
+553.28320 51778.2
+554.28589 13261.4
+555.28632 2307.3
+556.78174 1469.5
+557.27087 3771.0
+557.77234 3154.0
+557.94604 878.8
+558.27917 1004.2
+564.77777 580.4
+565.78394 27139.8
+566.28534 19138.7
+566.78760 6223.4
+567.28888 980.2
+578.94263 2187.6
+582.30145 4389.0
+583.30347 945.3
+584.95306 740.2
+588.79578 720.4
+590.28851 1699.9
+590.96185 833.8
+595.96387 2950.3
+596.29956 2912.8
+596.63361 2174.0
+607.28564 1245.9
+608.29242 6677.2
+608.79724 5394.2
+609.29596 2759.3
+613.82538 2059.5
+614.32727 1500.7
+614.56372 761.9
+614.64337 750.3
+614.79779 950.2
+614.97186 1090.2
+615.05237 1021.8
+616.31299 991.2
+616.80652 6529.3
+617.30963 8163.8
+617.81012 3598.4
+618.31641 803.1
+619.06073 1782.7
+619.31207 774.8
+623.32404 733.9
+625.32001 4525.6
+625.82318 3249.3
+626.32831 11260.9
+627.33105 3687.6
+630.31189 1636.1
+630.41467 765.8
+630.80518 7012.2
+631.30615 4927.1
+631.80786 2507.6
+639.31818 97084.1
+639.81946 73631.5
+640.32086 26884.8
+640.82214 6650.8
+641.31848 1632.4
+644.64160 3066.5
+644.97302 1916.6
+647.58032 621.1
+648.36163 1251.2
+648.83527 900.0
+650.31580 1725.8
+650.65289 4070.2
+650.98004 930.9
+657.33911 6098.1
+657.84241 2898.4
+676.65771 823.0
+687.85632 1480.9
+688.35809 1385.0
+696.86237 6678.3
+697.36188 5141.2
+697.86615 1718.0
+698.36487 1147.9
+704.37299 780.2
+704.87970 873.8
+705.86670 194756.0
+706.36768 159219.1
+706.68854 988.1
+706.86829 74125.8
+707.01569 1836.8
+707.36957 20034.9
+707.78571 666.2
+707.86865 4486.1
+708.37262 937.4
+718.99823 912.8
+719.35480 1663.6
+719.64417 600.2
+721.40265 4559.3
+722.41089 1241.8
+725.03088 877.5
+735.82648 602.2
+739.41223 29282.8
+740.41479 11699.3
+741.41760 3322.6
+745.36523 6142.0
+746.36896 2787.2
+761.39368 789.2
+762.39148 715.8
+763.35730 846.9
+779.40057 25230.1
+779.90186 20460.3
+780.40326 11766.8
+780.90442 2509.7
+795.85645 1402.9
+797.46655 614.4
+819.40619 786.5
+824.75372 765.6
+825.41656 927.9
+827.90668 2478.2
+828.40961 3681.0
+828.90967 1398.5
+829.42987 7491.9
+830.43079 2570.3
+830.75330 1094.3
+831.43298 690.1
+836.42169 17214.3
+836.92407 18001.2
+837.42511 8727.9
+837.92761 3066.4
+838.42767 1084.6
+838.53864 611.8
+858.44861 10114.7
+859.45331 4874.2
+860.45770 1725.8
+876.42639 1526.4
+884.46594 4581.8
+884.93085 13397.1
+885.42749 12280.6
+885.93445 8695.3
+886.43347 2367.8
+893.44360 18601.3
+893.94446 18233.6
+894.44550 9511.8
+894.94727 3961.9
+902.47552 8729.1
+903.48022 5506.5
+904.47498 1661.3
+913.43713 796.0
+921.45374 1547.2
+921.95886 2025.3
+929.96783 797.0
+958.92499 1074.3
+966.49530 3314.4
+966.95660 1454.2
+967.49640 2332.2
+967.96375 821.7
+968.50317 1295.4
+974.97803 992.1
+975.98468 863.4
+981.96313 628.9
+985.95209 646.5
+994.47485 1560.1
+994.97327 2740.9
+995.47070 1561.3
+995.97968 1203.2
+999.50061 1382.1
+1002.98242 4050.4
+1003.48596 6691.1
+1003.98358 2925.0
+1011.49744 3461.4
+1011.99957 4169.8
+1012.49091 1779.2
+1016.51794 4958.2
+1017.51843 2209.2
+1018.53284 903.7
+1051.00073 990.8
+1051.52393 1313.9
+1052.00720 877.0
+1059.52295 1817.2
+1060.02307 2216.3
+1060.52576 1287.7
+1068.03833 2402.2
+1068.54236 2580.4
+1069.04456 1276.5
+1082.95435 712.1
+1112.54602 3201.8
+1113.53931 7132.2
+1114.53955 3567.2
+1115.52905 1105.2
+1130.56152 24660.0
+1131.56458 16477.6
+1132.56873 4822.7
+1133.56287 1006.7
+1151.94055 613.6
+1156.59155 635.1
+1172.77747 691.6
+1198.29456 2571.7
+1233.60718 794.6
+1243.57581 687.2
+1260.60120 2853.7
+1261.61719 1818.8
+1277.62720 4146.4
+1278.63403 3275.1
+1279.63110 991.1
+1485.80383 892.6
+1874.12024 664.1
+1878.12573 1491.2
+1878.93713 1324.3
+1879.23254 692.5
+1879.59814 19447.2
+1880.41199 1433.3
+1881.82898 996.2
+1907.05200 7336.4
+S	3031	3031	1880.01199127
+Z	3	5636.761
+Z	2	3758.176
+532.56024 1847.8
+567.08575 693.2
+583.56744 660.8
+641.14557 651.3
+676.64880 1118.7
+690.53546 544.8
+690.58008 636.9
+795.86560 684.5
+931.28479 616.7
+1020.80420 608.0
+1198.25061 3208.9
+1300.84424 735.8
+1503.27612 642.9
+1521.43005 696.7
+1524.36096 698.2
+1525.39539 672.5
+1879.22852 2094.9
+1879.57556 19919.1
+1879.92297 1417.5
+1907.06519 7557.9
+1918.97888 637.7
+1930.57153 1059.6
+S	3033	3033	672.8438596
+Z	4	2687.34414
+182.78070 831.2
+188.10786 738.1
+188.23595 884.1
+188.28432 2646.8
+188.31313 2016.7
+188.33804 852.1
+198.96408 1600.9
+199.15604 917.8
+199.25769 985.4
+199.29535 781.0
+199.31351 1031.6
+199.32642 1115.7
+199.34526 2215.3
+199.35712 2949.4
+199.37134 769.4
+199.37973 1117.0
+199.41322 744.0
+199.45335 1169.9
+205.54330 763.7
+228.20911 761.5
+241.87192 765.2
+247.04263 928.6
+271.35153 1064.9
+271.50806 1265.0
+277.14551 7357.1
+277.64725 1642.2
+278.11288 2628.1
+331.13953 1008.4
+332.16132 992.9
+365.77744 831.3
+373.18503 1547.6
+375.12943 3107.2
+376.16086 1533.1
+385.18588 1809.8
+391.19501 1213.2
+392.15683 1611.0
+410.09021 1010.6
+415.73276 1906.3
+416.22992 1442.4
+416.73547 745.2
+418.74768 857.5
+429.72879 2364.3
+430.22745 1563.3
+437.74423 2022.3
+445.24527 1197.6
+451.74249 2709.5
+456.23126 3724.7
+470.91342 16379.9
+471.24756 16745.6
+471.58160 4710.8
+471.91663 1612.2
+477.17700 1255.9
+477.24762 835.4
+480.13431 776.6
+480.26108 1215.4
+483.74789 3653.7
+495.22272 786.4
+498.26971 4502.4
+503.68484 803.7
+505.23935 2053.0
+508.27399 1186.5
+511.23138 1251.2
+513.05573 854.0
+519.93567 3620.7
+520.27057 4231.0
+520.60236 1946.2
+525.28094 1082.9
+531.75867 1028.7
+532.60309 2703.0
+539.22253 1733.3
+540.26868 4753.2
+540.76855 2895.1
+543.27374 2451.4
+543.77087 1447.1
+546.93768 958.6
+549.14941 859.4
+553.28320 71736.1
+554.28632 18235.6
+555.28864 4154.3
+556.77911 1508.4
+557.26996 7134.9
+557.76855 3150.2
+557.95404 1626.6
+565.78394 39056.6
+566.28552 21485.6
+566.78717 6209.8
+567.28912 1903.4
+578.60541 2168.2
+578.94116 2023.0
+579.28253 1413.2
+582.30188 6590.1
+582.57361 760.2
+583.30573 2078.6
+590.24866 868.6
+590.28705 1353.3
+595.96411 3680.7
+596.30005 2579.2
+607.28632 1115.7
+608.29230 7828.8
+608.79590 7816.4
+609.29626 3455.4
+609.80194 1077.0
+613.82104 4119.8
+614.32709 1978.8
+616.31250 962.5
+616.80756 11555.4
+617.30841 9404.2
+617.81006 3598.0
+618.81512 1182.4
+619.05920 1775.3
+623.06738 1278.4
+625.31989 6204.4
+625.82025 3546.1
+626.08795 824.6
+626.32782 15592.9
+627.33191 5013.8
+630.31134 2193.5
+630.80524 7365.5
+631.30634 6755.0
+631.42145 829.0
+631.80579 2604.5
+639.31818 125706.7
+639.81934 87908.3
+640.32080 33794.3
+640.82153 9403.8
+641.32166 1169.2
+643.32465 1434.1
+643.82690 1171.2
+644.07233 1032.8
+644.64209 2552.0
+644.97858 2940.6
+645.31335 1042.0
+648.36359 2296.8
+648.83704 1653.5
+650.31897 3774.9
+650.65204 3939.0
+650.98639 1394.5
+652.30823 1359.9
+657.33960 7942.7
+657.83722 2782.7
+676.70129 1575.4
+685.82867 862.1
+687.86298 1364.2
+688.35852 1834.1
+696.86121 8393.4
+697.36212 6929.5
+697.86206 1948.9
+701.02124 1271.9
+701.33679 1027.8
+704.22491 993.4
+705.86664 246565.2
+706.36755 187057.2
+706.86853 74470.3
+707.02008 1046.1
+707.37012 25503.9
+707.87445 4854.6
+719.35425 1157.6
+719.68658 999.5
+721.40118 7500.0
+722.40704 1690.8
+725.02838 1157.2
+731.12769 992.5
+739.41241 41056.0
+740.41528 17095.5
+741.41998 4800.4
+745.36530 7603.9
+746.36932 3719.0
+763.34778 2070.8
+770.39661 1944.1
+779.40021 33544.5
+779.90161 30890.1
+780.40363 12677.4
+780.90112 3548.0
+795.85413 1740.7
+819.40002 1415.6
+824.75055 1540.4
+825.07678 2066.3
+825.41571 1449.9
+827.90985 3811.6
+828.41138 4057.6
+828.91168 1953.5
+829.42926 10345.5
+830.42609 4633.2
+831.43042 1173.5
+836.42157 21874.9
+836.92371 24291.2
+837.42468 9923.2
+837.92480 4914.1
+838.43115 950.5
+840.44299 1208.0
+858.44928 13274.7
+859.45197 6294.8
+860.45251 2089.9
+874.47968 1177.3
+876.42249 2141.4
+884.46466 6881.4
+884.93079 19586.2
+885.42859 17848.4
+885.93372 10059.9
+886.42767 2356.1
+890.02905 874.6
+893.44293 22919.7
+893.94464 23358.5
+894.44641 10087.0
+894.94684 4371.3
+902.47577 12523.7
+903.47931 5799.0
+904.48083 1862.2
+912.94769 942.6
+913.43530 1550.6
+921.45074 2289.2
+921.95288 1914.7
+930.47198 1020.6
+966.49231 6338.6
+966.96399 2977.4
+967.49518 2650.0
+974.97504 1084.2
+975.47089 1894.5
+994.46979 3266.2
+994.96918 3025.3
+998.50946 1138.6
+999.50000 1690.7
+1000.49084 850.1
+1002.98163 7161.3
+1003.48596 7312.8
+1003.98895 5139.3
+1004.47870 1724.4
+1010.02478 965.6
+1011.49707 4900.0
+1011.99854 5080.2
+1012.50189 2876.1
+1016.51923 5059.3
+1017.52350 4274.8
+1018.53778 1541.3
+1019.70819 874.3
+1051.52258 1048.2
+1059.53247 1976.4
+1060.02661 3492.0
+1060.53125 1484.1
+1068.03882 1913.8
+1068.53894 3839.5
+1069.03821 1672.4
+1104.41187 843.6
+1112.55298 3800.8
+1113.53625 9875.3
+1114.54211 6563.1
+1115.54016 1675.0
+1130.56140 31248.1
+1131.56409 21144.8
+1132.56653 5596.8
+1133.56750 1549.1
+1140.35803 1248.1
+1188.11731 1043.8
+1198.35461 3968.3
+1221.97498 872.2
+1260.59937 3966.7
+1261.60632 1968.7
+1262.65125 1293.6
+1277.62891 4506.6
+1278.63489 3502.6
+1441.48792 850.7
+1502.21497 983.6
+1777.16089 1099.9
+1876.40540 1074.9
+1878.87341 991.2
+1879.30603 5390.6
+1879.69897 24950.8
+1880.05774 5296.5
+1880.58496 1468.6
+1880.97961 1859.0
+1907.06128 9507.9
+1930.61475 1405.0
+S	3034	3034	673.5960746
+Z	4	2690.353
+187.20380 638.6
+188.17862 504.8
+188.22086 536.5
+188.23010 493.4
+188.24344 703.0
+188.25426 790.3
+188.27141 772.9
+188.28416 826.5
+188.30774 781.6
+188.32381 865.5
+188.36183 568.8
+188.37671 582.4
+198.96690 788.1
+199.24947 596.0
+199.25514 734.8
+199.28093 562.4
+199.32518 782.8
+199.33702 781.2
+199.34744 1267.8
+199.35400 2192.9
+199.37849 1138.7
+199.39763 996.9
+199.45107 833.1
+204.22955 598.9
+207.76730 703.5
+213.06960 606.8
+222.33209 556.0
+222.66597 529.0
+243.56561 616.0
+255.28764 689.0
+268.20981 664.7
+276.04575 595.3
+277.14478 1785.6
+290.36780 750.1
+315.91467 706.1
+326.64572 587.8
+392.15601 660.1
+402.74408 690.2
+429.72766 742.7
+437.68130 634.9
+451.74243 871.3
+452.24097 758.3
+468.85574 572.9
+470.91296 5636.7
+471.24811 5229.9
+471.58279 1610.7
+471.91931 1023.1
+498.26715 1548.9
+505.23904 694.5
+519.93475 1440.3
+520.27032 1516.7
+520.60510 689.6
+532.60388 1659.5
+539.50543 611.3
+543.27594 866.4
+543.77454 804.2
+551.64789 678.9
+553.28290 18664.5
+554.28436 4290.4
+557.77118 901.7
+565.78394 10064.4
+566.28485 5082.2
+566.78772 1482.4
+567.28821 708.0
+595.96362 2027.7
+596.29779 1491.2
+608.29224 2276.6
+608.79602 1283.8
+616.80811 4372.1
+617.30835 2880.4
+617.81360 1036.4
+625.32068 2765.1
+625.82294 1492.1
+626.32800 4089.4
+627.32965 1535.3
+627.84381 658.9
+630.80353 1611.0
+631.30353 1716.3
+639.31787 36815.2
+639.81927 26736.2
+640.32068 10392.6
+640.82104 2982.2
+644.64374 1345.7
+650.31604 1204.3
+650.98462 1059.2
+657.34039 1461.8
+657.84283 2053.3
+676.66327 888.0
+690.98328 615.0
+696.86145 2418.7
+697.36035 2422.2
+705.86615 81524.3
+706.36737 65301.7
+706.86835 24564.5
+707.36896 7439.6
+739.41217 9669.6
+740.41479 4326.1
+741.41809 790.9
+745.36646 1405.2
+779.40015 9744.5
+779.90039 6472.1
+780.40283 4095.3
+780.91113 841.2
+795.86450 828.0
+827.91071 1366.9
+828.91699 717.0
+829.43201 1733.8
+836.42151 7030.6
+836.92401 6669.4
+837.42554 2618.2
+837.93079 972.0
+858.45020 2253.3
+859.44916 1164.1
+884.93201 4485.5
+885.42908 4423.0
+885.92725 1931.2
+886.42352 886.1
+893.44543 6446.3
+893.94287 6286.1
+894.44366 3447.6
+894.94531 1293.1
+899.44641 693.6
+902.47498 3642.8
+903.47687 2263.0
+918.33319 811.5
+966.48254 869.5
+967.49536 1119.3
+1002.98395 1910.8
+1003.48706 1788.6
+1003.97876 1109.1
+1010.80090 631.3
+1011.49744 1505.1
+1012.00555 2171.0
+1012.49652 945.8
+1016.52509 920.5
+1051.02747 806.1
+1057.27563 1067.0
+1060.03540 811.0
+1069.72766 662.5
+1113.54382 1513.3
+1114.53577 1391.4
+1130.56201 7945.0
+1131.56702 5196.2
+1132.56763 2128.1
+1198.35596 2972.3
+1277.63440 992.1
+1278.64807 1054.3
+1374.08875 691.3
+1427.49011 728.3
+1530.50024 567.0
+1674.17944 661.8
+1806.62866 621.6
+1823.49915 634.2
+1867.76941 621.1
+1869.93640 1056.4
+1877.06055 810.2
+1877.97449 735.0
+1878.93970 820.1
+1879.57898 18996.4
+1879.81897 3009.4
+1881.75488 802.8
+1907.10559 7463.3
+1930.55688 921.1
+S	3035	3035	1879.99624127
+Z	2	3758.145
+Z	3	5636.713
+532.60675 2202.2
+551.36511 608.3
+568.99719 639.9
+630.44855 877.7
+661.16260 710.1
+663.93738 541.2
+664.64832 667.7
+676.68018 1380.5
+682.93555 693.9
+795.85052 713.6
+1019.69867 746.9
+1057.31543 765.7
+1107.47388 965.5
+1180.02380 615.1
+1198.35486 3074.7
+1283.61169 733.9
+1438.67383 642.6
+1443.34644 636.5
+1489.64819 637.8
+1525.50562 1063.2
+1583.12378 821.7
+1588.11633 570.7
+1877.82031 1060.0
+1879.28149 2221.2
+1879.64832 19933.4
+1879.99158 2072.5
+1881.43359 1135.6
+1907.04785 7482.1
+1930.74268 1030.9
+S	3037	3037	672.8560671
+Z	4	2687.39297
+186.62077 580.4
+188.20320 630.9
+188.25700 1463.9
+188.27078 1904.4
+188.28392 1926.9
+188.29845 1702.3
+188.31697 1299.3
+188.33374 542.9
+188.35637 579.0
+197.38440 601.9
+198.96677 798.9
+199.21292 674.3
+199.32570 1139.8
+199.33611 713.2
+199.35312 1599.2
+199.36195 840.9
+199.37468 1370.2
+199.39235 851.2
+199.47400 899.7
+210.73625 712.6
+212.06633 695.7
+249.15958 860.9
+272.17615 888.0
+277.14618 6155.7
+277.64725 1471.8
+278.11414 2079.6
+284.14111 884.1
+299.57077 837.0
+306.62637 630.4
+314.14908 690.5
+321.97562 617.1
+331.14133 907.0
+332.16196 1154.7
+333.68652 916.0
+339.05838 740.7
+373.18707 1172.9
+375.13013 4070.3
+376.16132 1702.7
+377.77777 766.3
+385.18680 2193.2
+391.19647 845.6
+392.15771 1477.8
+396.20499 1326.2
+399.21078 1004.5
+401.41525 585.3
+415.73291 2747.5
+416.23514 762.1
+417.25012 1016.9
+429.72867 1918.3
+430.23349 704.2
+445.24484 1097.0
+451.74216 2998.4
+452.24600 1118.7
+452.74551 584.9
+456.23090 4671.3
+457.24103 1116.0
+464.18195 865.6
+466.73282 1213.6
+470.91446 16448.3
+471.24835 18062.5
+471.58258 7682.8
+471.91711 1138.5
+477.17761 2646.0
+478.18091 811.8
+478.73297 633.2
+479.24783 578.9
+480.26196 1074.1
+481.22363 627.2
+483.74933 4754.0
+484.25092 3190.8
+484.74802 772.3
+488.21417 1931.4
+489.26749 875.0
+494.20453 1166.3
+498.27136 5779.8
+499.27466 1323.2
+505.23972 3531.4
+506.23880 846.4
+508.27209 1845.1
+508.76627 1088.3
+511.23462 773.6
+513.86761 686.3
+515.29926 821.8
+517.22748 673.2
+519.93677 5545.1
+520.27136 5088.4
+520.60559 3001.8
+525.27948 1817.4
+531.75427 1572.7
+532.25928 1161.4
+532.56409 1848.6
+532.75464 904.7
+535.27136 1506.1
+538.24286 597.5
+539.22437 2016.2
+540.26837 4729.4
+540.76849 2962.3
+541.29016 714.8
+543.23138 515.0
+543.27509 2659.7
+543.77563 1870.8
+553.28418 83697.2
+554.28711 23560.5
+555.28955 3913.4
+556.78033 1000.2
+557.27136 8275.7
+557.77271 5218.9
+558.27466 1952.4
+561.28510 804.7
+563.28680 716.0
+564.29376 847.2
+565.78485 34864.5
+566.28638 23915.0
+566.78821 8753.9
+567.28943 1832.5
+578.61230 1522.4
+578.94373 2068.3
+579.28033 1165.6
+582.30371 7143.6
+583.30566 3235.0
+584.61719 896.5
+584.94916 927.9
+588.79395 1491.4
+589.80005 868.1
+590.28687 1930.5
+590.62439 1071.2
+590.95746 1464.5
+595.96558 3977.3
+596.30066 4182.2
+596.63489 2842.9
+607.29150 1303.4
+608.29236 8622.2
+608.79614 7343.3
+609.29559 5107.9
+613.82507 2393.4
+614.32825 2354.8
+614.63873 1347.7
+615.06006 1498.2
+615.30774 811.9
+616.32977 1544.3
+616.80780 9020.5
+617.30969 9532.3
+617.81171 3292.3
+618.30591 1141.5
+618.80933 1067.3
+619.06134 1212.9
+619.31104 835.0
+623.56750 1873.0
+624.31482 848.3
+625.32178 6096.7
+625.82361 5672.9
+626.27826 622.0
+626.32965 20343.5
+627.33289 6367.8
+628.33301 975.9
+630.31671 2651.8
+630.80585 6704.0
+631.30719 6563.4
+631.80811 2211.1
+633.30298 1271.0
+638.97278 964.2
+639.31934 113947.2
+639.82074 101574.4
+640.32202 41934.9
+640.66412 903.6
+640.82367 12559.9
+641.32574 2715.9
+641.83038 790.9
+643.32843 1830.1
+643.57092 918.5
+644.64581 2913.5
+644.97601 2505.4
+645.31311 1762.3
+645.98553 878.8
+648.30273 1135.6
+648.36652 2515.6
+648.83826 1822.1
+650.32153 2553.5
+650.65588 2736.7
+650.98950 2596.0
+652.31293 1434.5
+676.63354 954.8
+687.85718 1407.0
+688.28625 763.6
+688.36041 1769.2
+691.68060 649.8
+696.86285 8054.0
+697.36346 7777.8
+697.86731 2891.9
+698.36743 1099.4
+703.37231 917.7
+703.70190 1356.9
+704.38562 1097.1
+705.38251 1263.5
+705.86804 240922.9
+706.36877 210337.0
+706.86987 98197.5
+707.01385 855.2
+707.18005 703.1
+707.37177 30884.4
+707.67383 716.6
+707.87256 8644.4
+708.36438 1878.7
+711.41687 953.4
+712.36804 1189.4
+712.69531 1915.9
+713.03088 1435.4
+713.36768 891.6
+715.76624 831.5
+719.35162 1510.5
+719.68555 1026.6
+721.40363 9979.9
+722.41205 2663.1
+724.69910 796.7
+725.02448 1208.4
+725.35919 1656.3
+726.15118 837.7
+727.35834 921.7
+729.38080 706.8
+731.03308 842.8
+735.34375 909.2
+737.28198 807.7
+739.41351 45850.9
+740.41675 22223.9
+741.41968 4475.4
+742.19543 705.8
+742.42212 849.6
+745.36786 9644.4
+746.36987 4247.8
+747.37921 1130.5
+761.39447 2134.7
+762.39825 1053.4
+763.34070 3439.5
+764.34412 2013.3
+770.39825 1840.3
+770.46948 576.6
+770.89636 2003.8
+779.40179 36749.4
+779.90302 34666.1
+780.40552 19989.2
+780.90723 5669.3
+781.41107 1610.6
+785.19867 765.7
+819.06830 1112.8
+819.40723 1278.6
+824.74500 1068.9
+825.07373 1066.0
+825.41382 773.4
+827.91028 5960.9
+828.41345 5692.9
+828.91266 3125.5
+829.43250 13932.4
+830.43213 5781.7
+831.42963 1194.5
+836.42303 24997.7
+836.92462 27448.6
+837.42596 14014.4
+837.92664 5090.3
+838.43176 1092.6
+840.44006 1393.1
+856.32562 614.4
+858.03888 762.0
+858.45105 13491.0
+859.45453 8948.3
+860.45734 1621.8
+861.47772 725.5
+874.93427 726.5
+876.42279 2189.3
+876.92407 2092.6
+877.43018 844.9
+884.46875 6839.9
+884.93182 22435.2
+885.42841 20442.2
+885.93494 11588.1
+886.43134 3839.5
+886.93488 1185.7
+893.44550 30623.0
+893.94611 27794.8
+894.44751 17095.2
+894.94843 5743.7
+895.45026 1306.2
+895.83459 725.6
+898.92908 788.6
+899.91974 731.5
+902.47748 15041.8
+903.48224 8780.2
+904.48468 2387.5
+913.44800 1896.4
+919.50708 1063.2
+920.51563 812.8
+921.45496 1999.4
+921.95532 2654.1
+922.45941 1889.1
+922.95056 755.6
+932.46039 902.3
+958.45123 811.9
+966.49530 7187.4
+966.96210 3094.5
+967.49878 4294.4
+968.50568 1378.7
+974.97168 1523.3
+975.47913 1899.6
+975.97540 1079.4
+994.47589 3291.4
+994.97577 3663.8
+995.47784 2293.0
+995.96863 814.5
+998.51508 1268.7
+999.50031 1491.2
+1000.48907 825.4
+1002.98468 6364.5
+1003.48730 7768.5
+1003.99030 4602.6
+1004.48853 1064.0
+1005.52533 1098.5
+1011.49957 5341.2
+1012.00049 6099.7
+1012.49750 3715.5
+1012.99506 1888.6
+1016.52032 6902.6
+1017.52411 4211.5
+1018.52625 1191.9
+1050.53113 779.2
+1051.01941 1243.7
+1051.51501 1698.8
+1059.52588 2311.7
+1060.02722 2277.4
+1060.53296 1892.4
+1068.03760 2086.4
+1068.54529 3431.8
+1069.04004 2657.8
+1069.54529 1647.4
+1079.49817 807.0
+1096.56519 766.6
+1112.55225 4512.4
+1113.53857 11817.6
+1114.54004 7222.6
+1115.53394 2662.8
+1130.56348 33822.9
+1131.56653 24601.2
+1132.56836 9318.2
+1133.57666 2912.0
+1134.57886 1207.4
+1145.79797 741.1
+1172.99792 827.1
+1198.26855 2997.3
+1232.05273 745.2
+1236.62427 881.2
+1260.61035 4156.1
+1261.60144 2856.9
+1262.61255 1804.5
+1277.63354 6034.3
+1278.63293 4098.1
+1279.63489 1579.1
+1344.51135 616.3
+1525.40527 682.0
+1639.33667 638.4
+1876.21692 598.7
+1877.70789 606.9
+1878.83276 1708.1
+1879.21631 1065.4
+1879.51636 19660.4
+1879.86755 1056.3
+1880.20630 1940.9
+1907.06665 7459.9
+1930.58752 730.7
+S	3038	3038	673.8575746
+Z	4	2691.399
+188.24019 746.5
+188.26314 1464.7
+188.28188 1717.0
+188.29239 1552.7
+188.30399 1798.2
+188.32860 1006.5
+188.34009 725.3
+188.38660 670.0
+188.68927 634.9
+194.67010 601.6
+198.96663 893.8
+199.06903 584.0
+199.25160 627.3
+199.33682 597.5
+199.35867 2683.2
+199.36844 1581.9
+200.36899 602.7
+203.70779 533.2
+222.13132 737.3
+233.59180 730.8
+250.12852 615.1
+277.14557 4508.9
+277.64627 652.6
+278.11386 1123.0
+373.18713 784.7
+375.13022 1863.3
+376.16110 1233.5
+385.18674 1007.0
+392.15784 1018.2
+392.86020 730.5
+415.73129 1510.2
+416.23138 1018.5
+420.78403 559.6
+429.72971 1505.3
+437.73959 734.1
+451.74194 2031.5
+452.24585 762.4
+456.23175 2808.6
+470.91376 12003.9
+471.24777 11309.2
+471.58243 4561.8
+471.91525 922.3
+477.17694 1104.1
+481.67368 659.8
+483.74826 1497.7
+498.27179 2635.0
+505.23996 1732.3
+513.19885 712.7
+519.93628 4775.7
+520.27112 2899.4
+520.60779 1083.8
+520.94385 735.4
+532.51709 1660.4
+540.26825 2274.9
+540.77081 1564.8
+543.27435 1311.4
+543.77826 951.3
+551.78497 918.3
+552.27167 762.5
+553.28369 41299.3
+554.28625 11309.0
+555.28802 1908.4
+556.78003 784.3
+557.27167 2473.5
+557.77502 1877.8
+565.78442 25225.6
+566.28625 15767.0
+566.78784 4944.8
+567.28687 1147.9
+578.60699 1390.2
+578.94360 1648.5
+582.30231 3464.1
+583.30920 922.7
+584.61334 1318.7
+590.28900 1774.1
+590.62628 1515.3
+590.95807 828.2
+595.96381 2522.4
+596.29950 3442.8
+596.63470 1695.8
+607.28656 819.3
+608.29297 5207.1
+608.79596 3961.3
+609.29535 2053.8
+609.79932 969.4
+613.82062 1472.4
+614.32355 803.4
+614.56030 879.4
+614.96924 807.2
+615.05255 917.7
+615.30591 1137.0
+616.80853 9108.2
+617.30902 6042.4
+617.81213 1667.8
+618.80463 995.2
+619.06641 1089.7
+623.07025 605.0
+624.31024 1013.4
+625.32196 4810.1
+625.82275 3069.6
+626.32849 9912.5
+627.33246 3421.0
+630.31195 1254.0
+630.45874 596.9
+630.80682 5214.6
+631.30737 3781.5
+631.81085 1449.4
+635.47894 689.4
+638.97894 1193.6
+639.31879 91374.3
+639.82013 63211.7
+640.32172 25335.9
+640.82294 6871.0
+641.32574 1212.1
+641.64618 684.4
+644.64459 2144.9
+644.98022 1863.9
+645.31317 1305.9
+648.36108 1181.6
+649.32947 883.6
+650.31989 2569.9
+650.65472 2585.5
+650.98718 930.4
+652.55109 1120.8
+657.33984 5746.3
+657.84155 3190.9
+658.34253 1080.1
+696.86023 4708.4
+697.36273 4887.9
+697.86713 2121.3
+701.00800 873.7
+705.86725 189554.3
+706.36816 150322.9
+706.68237 929.6
+706.86920 64409.7
+707.37122 20823.1
+707.87207 5251.0
+718.36908 1025.1
+721.40228 3114.7
+722.15912 696.3
+722.41443 910.8
+728.04413 728.1
+739.41266 25152.0
+740.41577 11893.9
+741.41809 2430.2
+745.36743 4422.9
+746.37103 1701.0
+770.89935 925.6
+779.40137 21039.6
+779.90210 20329.4
+780.40442 8607.3
+780.90814 2542.2
+781.40643 1332.2
+782.02521 730.4
+795.85236 802.0
+817.43738 857.2
+825.09332 874.4
+825.39374 637.9
+827.90723 3508.8
+828.41217 3315.6
+828.91913 1378.4
+829.42975 5206.2
+830.44440 1444.7
+830.77026 712.2
+836.42242 16118.5
+836.92456 14972.5
+837.42560 8627.0
+837.92712 3079.2
+858.45044 7714.3
+859.45361 4324.7
+860.45404 1467.3
+876.43103 1103.4
+876.93536 816.8
+884.46747 3272.2
+884.93079 11404.1
+885.42853 10722.2
+885.93396 5230.0
+886.42499 1464.2
+893.44385 17050.4
+893.94550 15155.5
+894.44690 9175.2
+894.94611 1866.2
+895.44800 1015.9
+902.47626 8587.1
+903.47821 4588.5
+904.48016 1540.5
+912.10297 740.7
+912.94922 839.2
+921.45306 1171.3
+921.95593 1548.0
+922.45569 1110.2
+966.49152 2631.4
+966.96344 2508.1
+967.49664 1382.0
+975.47601 1088.8
+975.99927 856.3
+994.47961 1546.1
+994.96338 1422.9
+1002.98633 5013.0
+1003.48584 4934.4
+1003.99023 2699.9
+1011.49457 2732.9
+1012.00012 5221.0
+1012.50262 2687.6
+1012.99408 871.1
+1016.51770 3187.7
+1017.52283 1782.9
+1051.01843 1248.8
+1052.01672 818.8
+1059.53918 1660.4
+1060.02844 2178.5
+1060.52979 1595.0
+1068.03992 1507.6
+1068.54590 2540.8
+1069.04419 946.5
+1069.54614 827.1
+1079.59839 772.8
+1112.54883 1758.6
+1113.53613 6171.0
+1114.53967 4084.1
+1115.54089 1030.6
+1130.56250 21007.2
+1131.56567 12518.2
+1132.56836 4743.7
+1133.56262 1047.4
+1198.15112 3173.8
+1260.60217 1601.3
+1261.60229 2129.6
+1262.60364 864.5
+1277.63318 3327.1
+1278.63110 2279.6
+1279.63379 843.1
+1360.82544 655.7
+1504.32776 671.4
+1525.52222 844.4
+1630.10010 567.8
+1735.65051 657.5
+1763.18091 588.2
+1877.64978 880.4
+1878.67529 812.6
+1878.97021 1231.2
+1879.58911 19795.4
+1879.87195 2534.2
+1880.17773 948.0
+1880.50183 1135.5
+1884.03369 747.3
+1907.10388 7377.4
+1930.72998 881.7
+S	3039	3039	865.936991267
+Z	2	1730.026
+Z	3	2594.536
+227.71454 572.6
+255.21574 600.1
+268.05087 566.9
+280.17712 909.9
+281.15604 678.3
+290.40137 646.3
+299.22308 593.9
+308.89441 718.6
+372.50006 577.7
+381.12448 543.4
+381.35126 839.9
+383.65778 637.1
+386.33777 556.1
+394.30963 1744.0
+412.31985 1309.9
+420.64209 587.9
+430.33084 4605.3
+431.33514 1079.7
+451.14917 571.5
+467.19232 686.8
+475.38736 1904.8
+482.64572 823.1
+515.18884 625.1
+532.55444 1988.4
+558.42426 764.7
+561.37378 1490.2
+561.60205 617.4
+562.37640 779.2
+563.59607 700.3
+569.58020 637.3
+576.43555 14969.0
+577.44067 4073.8
+579.38220 916.0
+597.39081 1453.4
+598.38928 724.4
+601.63110 689.7
+621.49280 4744.9
+622.49512 2156.5
+668.88470 667.5
+679.89771 664.8
+680.42798 2083.0
+681.42932 1209.1
+698.43909 27590.8
+699.44281 7694.7
+725.48132 690.2
+743.49695 7855.8
+744.49872 3635.1
+795.87396 1024.0
+806.03674 609.7
+838.72870 681.0
+847.49072 2300.9
+916.25629 617.9
+1057.29358 783.4
+1198.23694 3273.5
+1294.98767 633.2
+1663.89441 579.2
+1805.97815 862.0
+1878.87415 1140.8
+1879.12878 1190.6
+1879.58594 19568.8
+1880.06531 961.5
+1880.32495 1460.1
+1907.10779 6411.6
+1918.93140 799.5
+1930.57874 1109.2
+1993.03064 754.6
+S	3041	3041	1880.0098246
+Z	2	3758.172
+Z	3	5636.754
+532.54669 1691.4
+535.75629 675.9
+549.16986 582.8
+618.26013 651.8
+630.43011 1036.5
+676.64447 1106.9
+721.45245 552.9
+731.15894 718.4
+750.67096 613.6
+795.86566 969.7
+809.74841 707.5
+817.66101 605.0
+953.37402 927.1
+1057.26050 991.2
+1063.84827 655.3
+1184.57593 787.2
+1198.22668 3485.0
+1293.91333 615.3
+1332.67566 1111.1
+1657.78772 597.5
+1860.10144 718.7
+1870.14380 824.4
+1879.10815 1321.3
+1879.54126 20441.4
+1879.99182 1363.2
+1881.13184 779.5
+1907.05151 7463.6
+1907.41846 808.4
+1926.71692 660.7
+1930.67847 834.8
+S	3042	3042	1907.50799127
+Z	2	3813.168
+Z	3	5719.249
+532.59882 1865.5
+585.34937 643.3
+588.38281 664.6
+618.12976 578.4
+676.66437 1091.0
+677.52222 675.7
+795.87183 1004.0
+962.77936 582.2
+984.79364 701.9
+1019.66571 797.9
+1198.33826 3573.2
+1367.43250 602.0
+1433.13904 630.3
+1776.90234 812.5
+1879.07422 858.2
+1879.60217 19821.2
+1880.60010 805.1
+1907.00867 7014.0
+1930.45020 965.3
+S	3043	3043	557.5232421
+Z	4	2226.06167
+151.57948 540.3
+155.46860 637.3
+169.49658 697.9
+174.71242 565.8
+179.73668 544.3
+184.89539 520.1
+188.25380 614.4
+188.26593 1037.8
+188.27435 972.5
+188.28415 1097.3
+188.29726 1408.9
+188.31087 1249.8
+188.33015 713.0
+199.17189 625.4
+199.27301 606.6
+199.33571 1180.1
+199.35071 1591.8
+199.36044 2438.5
+199.37347 1110.3
+199.45007 860.5
+199.45920 1187.6
+220.72391 557.0
+233.57938 670.5
+292.91330 573.9
+310.31534 519.6
+321.73392 593.7
+326.52972 706.1
+332.71503 546.4
+354.15771 620.2
+381.36429 765.9
+421.19141 911.7
+425.47058 586.4
+425.53961 1713.8
+425.87369 1207.8
+426.20874 1002.0
+427.55295 721.5
+449.67218 686.6
+453.73666 627.2
+467.72934 1557.2
+468.22260 2198.1
+476.73679 2673.0
+477.23688 1028.3
+482.67120 679.8
+532.57623 1567.5
+535.84668 563.4
+538.11127 659.1
+543.26599 1225.8
+544.25409 709.0
+549.16357 850.5
+589.28101 1560.5
+629.29205 2244.2
+630.28986 1166.3
+636.80310 1082.0
+637.30939 1172.3
+637.80798 5353.4
+638.30725 3418.9
+638.80450 2680.3
+639.30969 1600.6
+639.80444 1066.9
+676.63428 673.8
+680.56219 651.3
+685.52948 572.4
+705.86322 650.9
+751.36877 719.5
+751.87170 1118.5
+795.87006 1107.0
+805.31677 553.6
+839.38263 1013.9
+874.77203 570.1
+952.45782 1475.0
+1119.35693 626.4
+1139.14929 571.4
+1198.30029 3405.0
+1250.39319 577.2
+1362.33337 651.0
+1533.57019 678.1
+1753.42297 553.7
+1776.87317 1151.4
+1800.50427 606.5
+1857.02795 583.6
+1870.31995 656.0
+1878.01587 702.2
+1879.61877 15857.8
+1880.14575 2481.8
+1880.52087 1505.3
+1881.05225 788.2
+1882.61646 842.0
+1907.05383 6896.5
+1918.92517 667.9
+1919.82654 675.3
+1930.62537 1173.1
+S	3045	3045	1879.9968246
+Z	2	3758.146
+Z	3	5636.715
+519.15161 560.8
+532.55554 1899.3
+539.10461 629.6
+549.18243 819.6
+572.03900 801.2
+572.63428 735.7
+591.09161 518.5
+614.73981 547.8
+676.66980 668.3
+731.14038 694.2
+785.03540 663.1
+795.85992 1053.9
+797.39838 681.0
+813.82507 516.7
+816.54730 717.5
+1019.71552 662.1
+1057.29529 930.1
+1165.17419 707.9
+1198.23682 3229.7
+1236.05310 578.2
+1424.72400 628.4
+1494.14685 657.9
+1525.48193 872.8
+1566.35852 670.5
+1582.19861 605.4
+1723.73291 618.0
+1776.83289 906.4
+1859.08887 675.0
+1875.97937 730.7
+1876.35278 600.4
+1878.13379 982.2
+1878.51306 1045.0
+1879.04114 1173.0
+1879.30688 2856.0
+1879.60510 19535.6
+1880.73364 1159.4
+1881.02673 759.6
+1907.08972 7414.8
+1930.66833 1088.0
+S	3046	3046	1332.85440793
+Z	2	2663.861
+Z	3	3995.288
+385.15622 823.2
+427.51740 726.1
+452.77536 615.3
+453.54813 593.9
+471.29260 4636.7
+472.29236 811.3
+508.02502 779.0
+508.27518 603.7
+523.25012 1613.6
+525.21149 5802.4
+525.52881 686.3
+525.77661 624.9
+526.21613 1604.0
+532.58594 1722.7
+532.62543 840.2
+543.22314 4245.9
+544.22601 881.4
+561.23322 1151.2
+567.31689 1409.9
+571.78918 680.3
+572.04437 612.9
+572.33972 17071.2
+573.34271 4648.1
+574.34131 888.6
+586.26642 833.7
+614.25922 12211.9
+615.26428 2953.8
+616.30786 664.2
+626.29968 878.2
+630.37085 731.6
+632.27039 5941.8
+633.27350 1447.2
+636.33624 2350.0
+637.35950 1181.5
+673.38751 34175.9
+674.39069 10676.9
+675.39130 2499.8
+676.39734 660.9
+676.66956 1167.2
+686.31757 1012.1
+699.35461 765.7
+700.33514 870.2
+709.33997 841.5
+715.30981 1698.2
+717.35577 1025.8
+727.34442 7539.5
+728.34729 2319.5
+733.32709 901.4
+745.35492 11394.1
+746.35828 4842.8
+747.35480 1040.5
+768.46558 2672.4
+769.47284 1000.4
+786.47162 32054.3
+787.47388 13153.8
+788.47791 3519.5
+794.58563 905.0
+795.86218 1029.7
+799.40460 745.2
+800.40826 990.0
+810.38019 4142.0
+811.38031 1440.6
+828.38934 6614.6
+829.39349 2819.4
+844.75897 703.6
+846.36151 8806.0
+847.36029 3343.4
+848.37311 1576.1
+864.35883 937.6
+868.42255 1223.5
+881.54840 1395.6
+899.55579 24768.8
+900.55774 13311.1
+901.56079 4229.8
+933.37262 951.3
+941.42395 5517.2
+942.42468 1797.6
+951.38885 741.8
+959.43237 12317.3
+960.43701 4611.4
+961.43207 1996.7
+977.44312 6805.7
+978.44409 2004.4
+979.44727 1378.7
+1012.63977 13890.1
+1013.64313 7009.2
+1014.64343 1973.9
+1028.44873 1316.8
+1043.05530 1146.2
+1046.46155 4122.0
+1047.47009 2309.3
+1064.47510 2721.6
+1065.48828 1221.2
+1078.58191 688.2
+1109.66028 1429.2
+1126.68225 36492.4
+1127.68591 22464.0
+1128.68762 7604.4
+1129.68750 2025.9
+1161.49072 1609.4
+1179.50684 3526.3
+1180.50537 1912.7
+1181.50854 1156.1
+1197.71851 41931.5
+1198.32068 3575.9
+1198.72168 27502.7
+1199.72498 9965.3
+1200.72913 2922.4
+1202.09607 1331.6
+1202.61096 987.0
+1210.61548 1269.8
+1211.11121 2196.6
+1211.61670 1729.6
+1268.75562 35684.6
+1269.75879 25482.6
+1270.75952 9658.5
+1271.76428 2237.5
+1275.52563 1326.7
+1276.51709 1098.4
+1286.56030 751.8
+1292.14343 1456.8
+1292.64844 1153.5
+1293.54224 2994.9
+1294.54041 1957.2
+1295.55383 850.1
+1296.63733 1388.2
+1297.15381 1038.8
+1300.64990 1223.8
+1301.15881 1310.7
+1301.66382 921.9
+1304.66052 1746.2
+1305.15466 4730.3
+1305.65283 4318.2
+1306.15173 3365.9
+1306.65308 1545.9
+1358.78577 652.6
+1369.80627 7167.3
+1370.80615 5376.3
+1371.81177 1675.2
+1376.58289 4486.6
+1377.58008 2624.4
+1378.59131 2017.9
+1394.59229 3463.4
+1395.59326 2891.6
+1396.59814 1222.2
+1404.60034 923.4
+1429.60730 3065.3
+1430.60278 2424.3
+1431.59180 1690.3
+1447.61816 5051.2
+1448.62256 4763.6
+1449.61914 1963.9
+1465.62561 4937.7
+1465.82971 2424.7
+1466.63513 3240.3
+1466.83386 3404.6
+1467.62439 1742.0
+1467.82214 1575.6
+1468.83142 1064.1
+1483.84644 19964.0
+1484.85059 14183.1
+1485.85132 8249.2
+1486.85767 3120.4
+1500.65613 1606.1
+1501.61780 1489.4
+1518.65796 4222.4
+1519.65405 4179.0
+1520.65381 2450.0
+1521.64673 1128.2
+1536.66626 6282.6
+1537.67358 3071.9
+1538.66711 1570.6
+1580.86145 2157.7
+1581.86157 3662.2
+1582.84888 2776.5
+1583.84460 879.1
+1598.87390 24291.8
+1599.87683 20674.2
+1600.87756 10440.2
+1601.88379 2573.5
+1615.67017 906.6
+1632.69836 1521.4
+1633.70007 1164.4
+1650.70837 2482.4
+1651.72656 3107.7
+1652.71362 1197.3
+1667.89404 4852.1
+1668.89209 11730.6
+1669.89087 7525.3
+1670.88513 3453.4
+1671.89795 1088.2
+1685.90454 66523.3
+1686.90820 61902.6
+1687.91125 28835.7
+1688.91321 11328.7
+1689.91785 3286.8
+1712.33093 689.5
+1727.75195 1343.1
+1728.76196 1941.9
+1730.74524 1098.0
+1745.78516 7369.1
+1746.78711 6550.6
+1747.78320 5299.7
+1748.77295 2281.8
+1763.79199 6847.7
+1764.79297 6176.7
+1765.79614 3692.0
+1766.79175 1008.9
+1798.92542 2562.5
+1799.93225 5181.5
+1800.92102 3426.8
+1801.94434 2322.2
+1802.93262 1052.3
+1816.94458 28127.8
+1817.94653 24873.1
+1818.94934 15449.1
+1819.94836 6412.6
+1840.86060 1432.9
+1841.83850 2693.8
+1842.84583 1797.9
+1843.83899 1689.4
+1858.86182 6453.7
+1859.86548 8112.7
+1860.85693 5748.5
+1861.85706 2378.6
+1876.03040 862.9
+1876.87817 9708.8
+1877.87366 7526.7
+1878.86316 5402.6
+1879.28943 2238.9
+1879.61023 19607.5
+1880.00635 1647.0
+1880.84668 869.2
+1881.97253 768.0
+1883.95386 1875.5
+1884.97253 751.1
+1899.98145 7167.2
+1900.97412 15397.7
+1901.97388 11266.0
+1902.97827 6078.1
+1903.98340 2290.5
+1906.92236 1702.4
+1907.21204 6626.6
+1917.99060 64999.3
+1918.99329 71211.3
+1919.99719 43013.7
+1920.99915 16766.6
+1921.99890 6029.7
+1923.01514 1455.9
+1930.52478 863.5
+1953.88696 894.0
+1954.93359 1315.5
+1955.90845 1174.7
+1956.92957 1803.8
+1957.95044 913.0
+1971.94348 5640.8
+1972.94336 8397.5
+1973.94580 5668.5
+1974.94141 2461.6
+1975.92114 1001.3
+1989.95483 12249.0
+1990.95935 10267.3
+1991.96399 7114.2
+1992.96021 2546.4
+1993.97925 948.3
+S	3047	3047	1088.65124127
+Z	2	2175.455
+Z	3	3262.678
+305.61237 19854.5
+308.90933 24465.2
+345.56238 20745.6
+353.30710 24749.5
+427.56250 20669.8
+442.09894 23035.7
+450.21915 22525.6
+455.49536 27612.9
+513.30133 54582.7
+514.30603 29974.2
+515.93439 22933.8
+532.58496 45595.5
+558.20361 18434.3
+630.42297 29727.9
+676.67590 26307.5
+684.10577 25747.9
+723.43726 42744.2
+728.38275 20227.1
+744.15741 22404.0
+749.89642 25422.1
+764.72363 23669.3
+795.86255 27083.2
+822.34674 32462.4
+839.37891 31730.3
+858.07751 29104.4
+881.63403 24235.5
+934.44568 118044.5
+934.99780 72978.4
+935.43793 340352.5
+936.43988 221097.7
+937.44135 77569.9
+952.46228 589537.2
+953.46509 393701.9
+954.46869 143202.6
+983.02966 31314.4
+984.02240 31610.1
+991.03687 84994.3
+991.53558 147121.0
+992.04022 63921.4
+992.54230 40252.4
+1019.54559 62831.5
+1020.05328 112948.2
+1020.55579 48410.0
+1021.07196 26489.7
+1029.60706 28079.9
+1030.61047 25731.9
+1049.51477 37290.6
+1050.51489 32050.8
+1057.31165 32699.5
+1068.55701 47193.9
+1069.07031 33627.0
+1069.54675 25351.2
+1122.60315 21545.0
+1198.31104 113748.7
+1201.65686 142405.7
+1202.66003 134829.0
+1203.67041 53284.9
+1204.64844 26941.8
+1218.68616 795105.4
+1219.68896 745776.3
+1220.69141 336164.3
+1221.70349 93578.2
+1331.78247 42688.3
+1397.80188 20988.1
+1408.70154 32356.7
+1431.69373 26395.4
+1447.70398 42632.3
+1448.72168 67696.6
+1617.01392 30077.0
+1640.82104 34078.6
+1641.80591 37598.9
+1657.84314 68892.9
+1658.84729 107032.5
+1659.84326 53499.3
+1769.56921 24172.0
+1776.88672 25292.3
+1870.03687 21050.1
+1872.99634 30209.3
+1878.25220 30758.6
+1878.76184 53633.2
+1879.04834 78197.2
+1879.25366 50759.5
+1879.65063 662945.6
+1880.05969 64296.9
+1880.62781 31715.0
+1880.95398 22091.3
+1907.13806 251523.2
+1930.63757 34322.9
+S	3049	3049	1332.84899127
+Z	2	2663.85
+Z	3	3995.272
+357.23917 671.3
+360.31152 656.5
+360.68967 599.8
+369.21878 621.1
+423.04251 613.6
+427.53992 935.0
+454.16809 638.4
+455.23083 578.8
+461.49469 615.2
+471.29178 2119.7
+475.64383 664.5
+482.64914 722.7
+504.76813 574.4
+525.21112 2529.3
+532.58752 1888.8
+543.22327 2078.7
+572.33881 7120.9
+573.34210 1728.3
+614.25848 4551.4
+615.26135 1318.5
+632.27008 2361.3
+636.33826 1034.9
+638.55249 547.5
+673.38654 13506.5
+674.38953 5095.0
+675.97119 627.6
+676.65082 1031.8
+709.32666 678.4
+717.35529 756.9
+727.34290 2664.0
+728.34326 1140.4
+745.35254 4855.3
+746.35638 2202.4
+786.47076 14723.6
+787.47333 5992.9
+788.47064 1199.2
+795.85101 843.8
+810.37854 1839.3
+828.38684 4316.5
+829.38519 892.4
+846.35840 4734.2
+847.35773 1666.6
+899.55475 10943.3
+900.55798 5679.0
+901.55835 948.0
+941.42474 2330.8
+942.42279 1234.6
+959.42932 4357.0
+960.43250 2149.0
+977.43988 2518.8
+978.43890 1122.9
+1012.64270 5278.7
+1013.64301 3672.5
+1014.64856 1043.6
+1046.45752 1729.5
+1047.48047 1050.9
+1064.47522 1572.0
+1065.46692 995.3
+1126.68042 14462.9
+1127.68481 10085.2
+1128.68372 3281.4
+1129.70447 701.1
+1143.69348 1016.7
+1179.50940 1589.2
+1181.49951 1038.0
+1188.09827 761.4
+1197.71753 17654.4
+1198.31348 3201.3
+1198.72131 13206.5
+1199.72253 5192.3
+1200.72888 1142.4
+1210.61023 832.6
+1211.10254 1565.3
+1268.75610 14521.3
+1269.75757 10712.7
+1270.75708 3621.5
+1272.49512 649.4
+1278.66272 656.2
+1293.54163 1187.9
+1294.53235 1751.8
+1296.63367 676.8
+1301.65588 898.7
+1304.64185 873.1
+1305.16516 2454.3
+1305.64624 2463.1
+1306.16113 1645.4
+1369.80200 3363.3
+1370.81921 1592.4
+1376.58459 1516.3
+1377.57605 1195.4
+1394.59204 1153.2
+1429.59070 925.4
+1430.60803 880.8
+1431.59387 766.2
+1447.62073 2339.8
+1448.62048 2073.1
+1461.29578 724.2
+1465.62231 2241.6
+1466.62463 1595.1
+1466.83484 1539.3
+1473.55249 1254.4
+1483.84766 7906.9
+1484.84509 6161.5
+1485.84741 3454.6
+1486.85828 1010.9
+1500.60413 598.8
+1501.64368 999.1
+1518.66321 2365.9
+1519.64880 1730.8
+1520.64148 912.0
+1521.64844 801.6
+1536.66760 2199.2
+1537.67590 2004.8
+1538.66797 1197.6
+1576.29736 828.9
+1581.85010 986.7
+1582.85547 1075.0
+1598.87085 11134.8
+1599.87695 9639.0
+1600.87622 4281.5
+1601.87732 1335.9
+1633.69385 1078.7
+1650.70947 1049.5
+1651.70972 1615.5
+1652.74878 874.6
+1667.88696 1784.0
+1668.88757 4006.1
+1669.88330 3394.2
+1670.90356 1399.6
+1685.90149 28435.2
+1686.90613 30052.6
+1687.90833 13205.8
+1688.91309 4037.9
+1689.88831 1116.3
+1707.54517 714.9
+1745.78333 3120.5
+1746.78052 3303.7
+1747.77881 2155.9
+1748.76465 959.1
+1763.78040 3369.2
+1764.78955 2483.5
+1765.79797 1825.7
+1776.94385 721.8
+1798.89575 875.4
+1799.92346 1453.9
+1800.92737 1237.8
+1816.94385 11179.4
+1817.94275 12477.6
+1818.94824 7228.2
+1819.94409 2874.7
+1841.83057 1178.0
+1842.84167 1805.0
+1858.85144 2028.6
+1859.85876 3635.6
+1860.85291 2167.9
+1861.85327 1621.2
+1870.17712 939.6
+1876.22095 739.7
+1876.87524 3564.9
+1877.88037 4308.1
+1879.13928 2434.2
+1879.56653 19149.5
+1879.85291 2541.4
+1880.03711 2039.0
+1882.92688 851.8
+1899.97913 2728.8
+1900.97473 6401.8
+1901.97559 5247.8
+1902.96155 2457.3
+1903.97754 710.4
+1907.15491 7183.4
+1911.08911 872.4
+1917.98840 28354.8
+1918.99182 33697.5
+1919.99316 17407.0
+1920.99353 7669.6
+1922.00928 1917.0
+1922.47815 696.4
+1930.60852 1218.0
+1954.90515 1263.1
+1955.89026 1204.8
+1956.91626 992.0
+1971.94604 2377.3
+1972.93848 4001.1
+1973.93713 2840.6
+1974.94031 1054.5
+1989.94971 4938.4
+1990.95947 6050.5
+1991.95264 2920.7
+1992.96692 2135.1
+1993.43835 773.1
+S	3050	3050	1907.51940793
+Z	2	3813.191
+Z	3	5719.283
+532.57605 1528.9
+676.60284 1051.7
+731.11053 712.5
+762.29761 586.4
+795.85748 876.1
+858.02258 791.0
+1002.84119 675.5
+1056.89221 600.2
+1057.18542 1086.0
+1198.28418 3557.9
+1433.99036 712.3
+1645.73730 595.9
+1816.42078 628.2
+1871.00330 738.8
+1877.13281 752.3
+1879.43640 21123.1
+1907.10864 7149.9
+1930.56201 1131.4
+S	3051	3051	1088.98099127
+Z	3	3263.668
+Z	2	2176.114
+305.80899 1536.2
+322.93698 1667.2
+332.49139 1646.8
+350.29037 2121.2
+350.36636 1620.3
+423.46448 1794.9
+427.50940 2046.0
+437.82452 1791.9
+456.85742 1690.5
+496.27530 7098.4
+513.30261 35712.1
+514.30499 7327.6
+521.06470 1924.4
+532.59460 5568.2
+534.36456 3273.2
+549.10742 2298.1
+600.29065 1715.6
+614.31226 2044.9
+676.62164 2586.7
+694.67267 1562.3
+706.38043 5038.1
+707.32318 3404.8
+707.38452 2711.3
+723.43976 19500.1
+724.44147 6409.0
+725.33386 10423.2
+726.33826 5525.0
+795.86084 2562.0
+820.92737 2198.5
+821.36737 6690.4
+822.35260 15265.8
+823.35315 7150.0
+824.37622 2358.6
+829.42249 2568.5
+829.93018 3865.3
+830.40997 1770.3
+839.37866 12402.7
+840.38055 6728.4
+841.37164 1948.9
+877.76892 1451.1
+878.94690 1897.0
+907.44257 3903.6
+916.43988 3524.9
+916.52863 12199.0
+917.42151 8894.1
+917.53387 6074.4
+918.42310 4570.1
+924.46454 7070.6
+925.47699 4961.1
+925.98602 7000.8
+926.48022 9214.6
+926.99475 3378.2
+934.44464 51730.1
+934.50842 21344.4
+934.99561 38939.4
+935.43848 165940.7
+936.00049 6029.8
+936.43994 83736.2
+937.44299 24428.4
+938.44556 3930.8
+952.46277 300785.8
+953.46582 148310.8
+953.98724 2121.3
+954.46838 48821.5
+955.46857 9440.6
+963.52277 2670.1
+964.52051 2210.0
+967.56354 11120.2
+968.56671 6285.0
+972.01013 2331.8
+973.02484 1903.1
+973.52643 2071.5
+974.01190 2701.8
+977.03467 3037.4
+977.54352 2805.0
+978.04065 2933.1
+982.02924 5046.4
+982.52832 16527.5
+983.02783 14663.6
+983.53107 6552.8
+984.03137 3499.4
+991.03772 61060.0
+991.53857 76284.1
+992.04028 40889.1
+992.54138 17069.2
+993.04474 7599.7
+1007.55389 2688.8
+1010.55231 2959.5
+1011.03955 8929.5
+1011.53998 8913.6
+1012.03973 3150.0
+1019.54785 37188.0
+1020.04974 42645.0
+1020.55261 26013.9
+1021.05109 10810.1
+1021.53955 2489.6
+1024.57898 11626.9
+1025.59021 6299.8
+1026.59253 2685.1
+1029.61218 16044.6
+1030.61340 9128.6
+1031.50854 2317.3
+1031.62402 4188.5
+1032.48962 6055.3
+1033.48669 3603.5
+1049.51501 12726.7
+1050.51721 10055.5
+1051.52002 3141.6
+1059.55237 5621.2
+1060.04822 5222.0
+1060.78577 1826.5
+1068.05640 17859.4
+1068.55750 17425.1
+1069.06335 9305.5
+1121.63574 9695.4
+1122.64209 5829.9
+1123.64148 2723.7
+1186.55383 3188.1
+1198.33350 8862.8
+1200.67175 8882.7
+1201.66174 81790.9
+1202.66431 57179.3
+1203.66357 21498.2
+1204.65637 6043.2
+1218.68616 405046.8
+1219.68896 307725.2
+1220.69226 115696.9
+1221.69592 29074.6
+1222.70105 7276.1
+1223.18970 2146.9
+1294.23438 1546.3
+1314.73889 4018.9
+1315.76196 3421.7
+1331.77271 16847.1
+1332.77539 12615.1
+1333.78162 5794.5
+1387.65125 1935.9
+1430.68970 11330.9
+1431.69348 11644.6
+1432.69214 2869.0
+1445.81421 7764.9
+1446.81836 7649.8
+1447.71167 23797.3
+1448.71655 22829.8
+1449.71667 8139.0
+1450.71521 1938.7
+1631.89038 2813.3
+1632.89746 3337.5
+1639.82678 2199.0
+1640.82190 25320.1
+1641.82605 21411.4
+1642.82263 9830.8
+1643.82764 2718.8
+1657.84790 37015.5
+1658.85010 38575.5
+1659.85535 16483.3
+1660.86169 6045.6
+1717.06274 2750.7
+1850.94861 4878.8
+1851.96094 4571.8
+1852.98328 2221.2
+1860.01160 1929.3
+1879.22852 10715.1
+1879.49683 54358.1
+1907.10840 20695.8
+1930.44971 2901.6
+S	3053	3053	1879.8938246
+Z	3	5636.406
+Z	2	3757.94
+532.57855 2078.3
+676.65503 843.7
+683.03070 570.9
+701.88007 535.0
+764.46619 515.7
+1031.02417 644.1
+1095.33960 718.6
+1198.29492 3577.8
+1587.30896 655.4
+1809.58862 619.6
+1878.12024 649.5
+1879.59265 20058.4
+1880.07959 1401.5
+1907.06213 7226.7
+1930.54456 1189.7
+1947.68506 649.7
+S	3054	3054	1907.57040793
+Z	3	5719.436
+Z	2	3813.293
+532.57410 1967.3
+572.62585 712.3
+605.42932 535.4
+630.36725 962.1
+643.65155 608.1
+649.12677 749.6
+660.26892 546.3
+676.64264 532.0
+676.69141 565.4
+698.28339 569.0
+714.97504 626.9
+764.43323 601.5
+795.87317 912.4
+805.59180 545.1
+910.98456 756.7
+949.28094 640.1
+984.30225 580.5
+1035.50903 622.1
+1091.87463 608.6
+1172.17175 579.3
+1186.36243 629.6
+1198.28394 3072.2
+1274.18506 680.6
+1346.94299 564.9
+1525.26294 781.4
+1633.23962 743.2
+1871.56628 1046.2
+1874.51416 631.3
+1874.60107 632.5
+1879.18677 1615.0
+1879.49744 6654.5
+1879.70093 17144.1
+1880.22827 2941.7
+1880.66687 1427.8
+1907.11475 7004.0
+1907.37744 1093.3
+1930.52209 965.5
+1982.11206 594.8
+S	3055	3055	557.5230571
+Z	4	2226.06093
+145.30208 576.9
+158.57121 533.7
+182.78442 641.6
+188.25612 652.1
+188.26425 613.1
+188.27318 1312.9
+188.28453 1446.1
+188.29652 1102.9
+188.30835 1155.3
+189.97139 554.3
+190.31779 779.5
+198.96523 1317.0
+199.21989 647.1
+199.26909 1105.3
+199.35559 1547.6
+199.36711 2645.2
+199.38358 1333.4
+199.45297 997.3
+199.46535 965.4
+211.07080 618.3
+211.79077 549.4
+214.51688 758.4
+229.41811 635.1
+247.43015 747.3
+253.06065 560.7
+292.15442 658.4
+296.75446 533.2
+312.94153 550.9
+328.45074 657.5
+358.73160 582.0
+360.77197 681.1
+365.06186 648.4
+386.56238 492.3
+401.02963 663.9
+404.30481 570.0
+425.53818 2063.9
+425.87286 963.8
+434.47461 628.6
+462.73489 903.2
+467.72873 1258.7
+468.21738 1282.2
+482.66461 699.9
+532.55267 2100.0
+533.32544 662.2
+543.27197 994.0
+571.77625 971.7
+575.53619 581.8
+624.92767 620.2
+629.29346 1018.8
+629.79730 735.1
+630.29083 1389.0
+630.41656 861.9
+630.78772 734.3
+636.80707 1152.3
+637.30731 729.0
+637.80566 3903.3
+638.30719 2379.5
+638.80664 2399.1
+639.30469 1579.2
+676.66949 1012.2
+690.82275 604.2
+694.33978 704.7
+724.44983 726.2
+731.12408 832.5
+751.86328 813.3
+795.84937 772.3
+840.26489 586.4
+927.99030 662.2
+1154.41956 576.6
+1198.24072 3305.5
+1343.48962 610.7
+1423.92969 617.8
+1525.42822 762.8
+1718.29614 955.6
+1766.97046 617.3
+1786.04370 663.2
+1873.77869 1379.6
+1878.98340 2582.0
+1879.28052 3294.2
+1879.62061 19173.6
+1880.01709 2205.2
+1880.25989 3212.3
+1880.67029 810.7
+1881.29370 1164.0
+1906.86694 1307.1
+1907.12268 7024.4
+1907.62134 608.3
+1930.59631 846.0
+1981.30127 628.8
+1997.16577 992.0
+S	3057	3057	1880.08524127
+Z	3	5636.98
+Z	2	3758.323
+532.61511 2141.0
+576.36902 610.9
+619.48645 608.9
+630.42163 887.2
+676.68640 825.7
+821.42981 631.0
+863.38422 557.3
+1057.30701 810.6
+1198.37976 3268.4
+1225.66296 671.2
+1293.53967 676.6
+1299.90039 628.5
+1409.17102 709.1
+1553.08167 642.1
+1561.08447 808.7
+1658.73560 749.8
+1829.65918 561.5
+1872.11938 1078.6
+1877.40393 824.9
+1878.46265 956.5
+1878.80237 1009.1
+1879.07202 1127.3
+1879.15710 1105.6
+1879.65356 19359.0
+1880.25903 1210.1
+1880.54688 1543.3
+1880.84656 934.4
+1881.32239 620.3
+1881.89661 977.6
+1907.04565 7518.8
+1918.93762 667.7
+1930.60364 875.0
+1977.70081 645.2
+S	3058	3058	723.8318246
+Z	2	1445.816
+Z	3	2168.22
+188.25737 5054.5
+188.27148 5314.4
+188.28590 6580.2
+188.29314 5979.2
+188.30559 5922.7
+188.32243 4962.5
+192.88799 2310.9
+198.96739 2998.6
+199.26346 2642.5
+199.34613 3367.7
+199.36066 9523.3
+199.37486 2781.1
+199.38673 2493.0
+199.44655 1856.4
+201.68967 2066.4
+212.99666 2294.2
+228.33893 1986.8
+239.21165 2232.8
+271.35657 2876.7
+272.14151 2232.7
+281.29260 2090.3
+285.06042 2200.5
+350.29474 2930.0
+367.73297 2739.0
+395.49225 2150.8
+436.46854 2445.9
+443.39154 2114.5
+451.87332 2067.6
+482.66412 2258.1
+484.73370 2166.2
+513.30042 11719.0
+532.45831 6233.8
+574.66974 2238.7
+661.69727 2585.4
+676.70416 3053.3
+680.70099 5039.7
+692.39825 2304.0
+695.39142 3688.4
+706.35504 2669.9
+756.62830 2517.7
+771.22913 2519.4
+795.86536 3057.4
+811.33905 2312.8
+829.93079 7480.1
+830.43329 12248.1
+844.10852 2432.0
+933.52496 6181.3
+934.49445 3804.1
+934.99713 17252.9
+935.49683 37354.8
+935.99512 2973.0
+952.46808 5209.4
+953.46613 7911.3
+991.03235 4222.2
+991.53772 30156.5
+992.03973 88131.1
+992.54462 11488.9
+1012.03589 4373.1
+1019.55420 2883.4
+1019.68201 2854.6
+1020.04688 21256.4
+1020.55103 61568.7
+1021.05054 9813.8
+1121.63525 2754.8
+1143.65051 4980.9
+1198.02759 11479.5
+1201.66016 3294.3
+1202.66150 3406.8
+1218.68323 15706.2
+1219.68872 25014.0
+1220.69287 14375.6
+1256.75806 3707.4
+1329.63147 2188.8
+1357.71631 2135.0
+1416.77539 2781.5
+1765.01318 2159.7
+1815.13110 2330.1
+1875.18799 2051.4
+1877.43286 2274.9
+1877.70691 2611.0
+1878.80835 4640.6
+1879.35669 24073.0
+1879.72168 61508.7
+1880.09277 22072.9
+1880.46863 7945.8
+1880.83057 3462.8
+1880.93225 3535.5
+1881.61047 3202.0
+1881.98840 2797.1
+1907.13074 25470.5
+1913.23022 2362.6
+1930.56213 2972.4
+S	3059	3059	724.332991267
+Z	3	2169.724
+Z	2	1446.818
+188.25868 966.8
+188.27672 1117.8
+188.28596 1072.7
+188.29811 1191.0
+188.30321 1103.3
+188.31506 853.1
+197.54980 578.0
+199.26471 814.5
+199.27248 771.0
+199.32878 704.6
+199.35359 1698.3
+199.36388 1992.6
+199.45262 657.9
+199.46184 1102.0
+303.16528 1455.1
+350.28641 725.4
+367.40033 732.0
+370.23926 621.2
+387.79941 561.5
+427.54501 953.1
+430.95923 730.7
+467.72937 1193.0
+468.22171 1280.7
+476.73438 5460.0
+477.23685 841.2
+482.64685 760.0
+496.27521 909.4
+513.30188 8350.6
+514.30969 1417.5
+531.66815 693.2
+532.60144 1725.7
+534.36432 1333.3
+538.82220 728.1
+539.18549 613.2
+591.38397 838.8
+627.77716 695.5
+661.02222 1168.7
+667.81586 1054.4
+676.70331 814.2
+679.39758 589.2
+680.36078 1031.4
+695.38776 2186.0
+706.35602 1966.3
+764.06250 675.7
+781.03827 753.5
+795.10217 889.3
+795.86176 899.4
+829.42603 4483.7
+829.92981 2314.1
+915.54242 689.9
+916.53748 1335.5
+921.43707 1055.1
+933.51965 3225.6
+934.49335 12377.6
+934.99609 6302.6
+952.46002 3897.9
+982.52979 1132.2
+983.02942 797.9
+991.03644 20898.8
+991.53839 14539.5
+1019.54694 16618.5
+1020.04797 12720.2
+1029.60376 1375.5
+1121.62878 877.3
+1143.65015 2506.4
+1144.65894 1503.2
+1198.34216 3490.6
+1218.68530 8624.4
+1219.69312 3505.3
+1256.74438 1149.9
+1257.74194 1745.1
+1352.40808 777.8
+1795.10156 749.7
+1877.12207 902.9
+1877.72766 898.6
+1878.49316 1354.1
+1878.91833 937.6
+1879.36951 4409.1
+1879.70776 18366.8
+1880.08984 4105.6
+1880.49854 1046.2
+1880.88892 1033.3
+1881.36377 1303.5
+1907.08276 7071.4
+1930.54956 934.2
+1994.30249 644.7
+S	3061	3061	1880.0378246
+Z	3	5636.838
+Z	2	3758.228
+532.54742 2230.9
+549.14313 1075.5
+570.34448 617.9
+574.05463 593.7
+610.75684 725.7
+630.39532 993.1
+644.44489 675.5
+679.24109 693.9
+826.21198 555.4
+943.72003 774.6
+949.78577 824.6
+1001.36957 603.1
+1057.28772 818.9
+1198.22534 2847.1
+1238.46765 655.2
+1325.24072 668.4
+1525.43140 721.3
+1785.57410 618.5
+1874.11816 860.0
+1875.93518 600.3
+1876.32080 838.5
+1877.03430 771.5
+1877.53967 882.7
+1879.07654 658.5
+1879.25159 1831.1
+1879.58765 19719.0
+1879.90735 2035.9
+1881.59729 822.5
+1907.04443 7156.2
+1930.56531 941.7
+S	3062	3062	723.8308246
+Z	3	2168.217
+Z	2	1445.814
+188.23422 585.4
+188.25763 1639.3
+188.26999 1830.5
+188.28632 1993.6
+188.30118 1955.9
+188.31372 1546.6
+188.32927 906.3
+196.06673 528.5
+197.91740 608.1
+198.96666 914.5
+199.24825 580.8
+199.33286 938.0
+199.34782 1177.1
+199.36049 2160.6
+199.37311 1312.0
+199.47314 608.7
+223.19176 623.5
+225.50063 629.5
+229.58722 562.3
+233.56886 735.3
+238.45918 575.5
+254.41727 573.8
+260.05801 641.6
+264.01636 658.1
+270.97711 749.0
+272.14032 608.9
+278.67947 617.7
+280.17584 686.6
+290.98740 592.2
+303.16580 5268.5
+303.85110 549.2
+311.79517 580.4
+320.36050 564.9
+324.22525 624.7
+344.84976 651.8
+376.46851 672.5
+386.95145 606.4
+404.02209 603.4
+412.21335 666.9
+427.53427 757.5
+454.72601 947.6
+462.73785 2848.1
+463.23758 1996.6
+467.73035 2553.1
+467.81161 591.0
+468.21976 4860.5
+468.72150 4148.7
+476.73474 25900.6
+477.23575 14843.1
+477.73801 4318.7
+496.26596 1203.7
+513.30176 8655.3
+514.30579 3768.9
+515.31323 1467.6
+515.80719 1580.7
+525.26141 2518.4
+525.76422 1665.4
+532.53296 1808.1
+580.65015 669.9
+585.64063 904.9
+600.84186 835.1
+602.29395 1844.3
+602.79376 928.0
+609.84747 3626.8
+610.34637 2320.3
+610.84351 741.7
+651.99078 1169.2
+661.02673 2866.2
+661.36102 4145.6
+661.69495 2650.2
+662.02716 1532.2
+667.81470 1128.8
+668.31348 841.8
+676.66498 1058.9
+680.03387 4185.2
+680.36914 5713.8
+680.70325 3532.3
+681.03680 969.2
+706.38800 2315.3
+707.39264 1357.8
+707.78937 771.0
+763.17792 632.8
+819.42010 648.3
+820.91748 1273.6
+821.42419 1263.3
+821.91937 811.2
+829.42682 15231.7
+829.92847 19260.8
+830.43048 9291.1
+830.92938 3778.7
+831.41516 866.2
+839.37927 2654.7
+840.38440 831.1
+841.89734 1480.1
+842.40485 802.7
+851.25665 652.5
+886.41150 970.1
+916.52966 5394.0
+917.53668 3435.4
+921.01007 801.5
+925.49890 775.4
+925.98590 2007.5
+926.48468 3076.0
+926.99725 1244.5
+933.51654 1955.7
+934.49414 36013.9
+934.99561 46357.9
+935.49573 28135.7
+936.00024 10001.8
+936.49780 3203.2
+952.46185 18416.9
+953.46533 10838.6
+954.46899 2844.7
+955.45825 723.7
+982.53094 3174.0
+983.02399 2951.5
+983.52887 2416.6
+984.02631 1397.9
+991.03699 53937.9
+991.53772 74496.0
+992.03851 46115.6
+992.53967 22604.5
+993.04077 6944.1
+993.53992 1642.7
+1011.03296 1697.8
+1011.53839 3214.9
+1012.03790 1619.3
+1012.53076 811.1
+1019.54688 48704.5
+1019.68951 708.3
+1020.04779 61710.5
+1020.54987 43473.7
+1021.05127 19441.5
+1021.55292 5762.9
+1022.06323 1262.3
+1029.61194 3135.2
+1030.61389 2391.1
+1031.62415 1082.8
+1053.26257 616.0
+1086.63416 1540.2
+1087.63660 1567.0
+1121.63306 2527.6
+1122.64331 2256.9
+1123.62292 794.5
+1144.65771 2773.0
+1145.66333 1146.7
+1169.93689 632.4
+1198.18689 3626.2
+1201.66528 1881.3
+1202.66199 1015.9
+1218.68542 45621.2
+1219.68823 34343.1
+1220.69116 13678.5
+1221.69519 3358.4
+1256.73926 841.6
+1257.74585 2020.5
+1258.74243 873.2
+1306.45850 650.9
+1525.36499 838.3
+1538.08533 590.7
+1543.32312 699.1
+1667.17395 713.5
+1716.95959 600.0
+1771.35266 615.7
+1879.59644 19147.4
+1880.40076 728.0
+1880.75977 1122.1
+1906.23657 668.8
+1907.01868 7103.1
+1907.61707 656.4
+1930.57642 914.9
+S	3063	3063	724.3328246
+Z	2	1446.818
+Z	3	2169.723
+188.25568 3818.1
+188.26515 6021.2
+188.27484 6106.0
+188.28279 5915.5
+188.29559 8676.7
+188.30949 6992.6
+198.96507 7790.0
+199.26071 4438.9
+199.27518 5624.9
+199.28700 5065.8
+199.31693 4825.6
+199.33090 4621.7
+199.34526 12681.7
+199.35902 12869.0
+199.37357 11980.4
+199.45659 5600.7
+202.52451 4352.5
+214.51497 5469.9
+241.64674 4590.2
+264.73364 4770.4
+271.49103 4795.5
+271.51425 4995.1
+295.38699 4262.1
+303.16592 10472.9
+333.69519 4382.6
+382.82141 4440.7
+410.86914 4165.2
+417.86234 4295.8
+427.53891 8390.8
+455.73364 4169.7
+467.73068 8442.9
+468.21701 8110.7
+468.72058 6059.9
+473.11890 4218.2
+476.73322 39629.3
+477.23553 21819.1
+512.93787 4166.6
+513.30103 23492.8
+514.29950 5140.3
+525.76520 6298.0
+532.54126 12654.4
+589.12726 4991.2
+610.34369 6721.5
+630.39575 5357.6
+647.31311 4289.4
+661.02704 10626.8
+661.35999 8861.6
+671.56134 4649.9
+676.64941 6286.1
+680.04187 8618.6
+680.37207 8144.4
+731.11133 6146.3
+795.85791 7284.7
+829.42487 35197.9
+829.92865 26513.6
+830.42426 9539.7
+839.37958 7084.3
+907.74609 4393.1
+916.52740 13144.9
+925.98505 8197.7
+934.49347 83365.1
+934.99615 82754.5
+935.49585 34948.1
+936.00024 7505.0
+952.45966 34522.4
+953.46198 15389.0
+980.87054 4274.3
+983.03748 8698.7
+983.51959 6434.8
+991.03680 133410.4
+991.53748 126455.4
+992.03949 64679.0
+992.54297 13169.8
+1011.53937 11633.7
+1019.54718 133536.2
+1020.04749 112571.3
+1020.54901 64614.5
+1021.05573 16816.1
+1029.61230 7561.9
+1057.25867 6610.4
+1125.66272 4882.8
+1143.66077 9882.7
+1158.25061 4659.0
+1198.20886 22392.0
+1218.68433 88087.4
+1219.68787 36875.2
+1220.69092 6926.9
+1402.25012 4108.0
+1433.00598 4987.7
+1525.40405 6452.1
+1657.32458 4733.1
+1685.40381 4239.3
+1785.25684 4958.8
+1833.78357 5258.4
+1875.98853 5421.4
+1876.33936 4732.2
+1877.58887 6144.5
+1877.98792 5509.4
+1878.18262 5635.6
+1879.11719 16285.7
+1879.55310 141446.5
+1879.98291 11369.2
+1881.27136 5230.6
+1907.07031 56698.9
+1930.60144 4993.5
+S	3065	3065	1879.95640793
+Z	3	5636.594
+Z	2	3758.065
+532.52692 1929.4
+581.30231 569.9
+591.60840 609.0
+603.02863 595.7
+624.66809 630.1
+630.39783 843.3
+676.64984 970.9
+782.63983 616.6
+795.85962 1233.2
+809.79163 613.3
+1017.32745 659.1
+1198.17529 3124.6
+1525.38879 883.1
+1652.01575 757.3
+1878.56335 1318.8
+1879.56299 19543.3
+1879.83801 2993.7
+1880.61768 921.8
+1881.19019 666.9
+1907.10693 7644.6
+1930.56738 865.2
+1974.20300 668.4
+S	3066	3066	1907.5318246
+Z	3	5719.32
+Z	2	3813.216
+528.33148 607.4
+532.53540 1879.1
+557.23840 585.5
+573.56500 729.7
+586.97876 589.6
+676.67828 1052.4
+676.84766 647.7
+712.35040 682.8
+782.54346 744.8
+924.40570 619.4
+951.96100 605.0
+1079.42810 705.4
+1125.24023 731.7
+1198.19800 3269.9
+1588.36780 608.3
+1879.09314 2445.9
+1879.35742 4826.6
+1879.63818 18529.3
+1880.52454 1712.9
+1881.17932 937.3
+1907.07532 7433.7
+1930.45154 885.0
+S	3067	3067	1198.6378246
+Z	2	2395.428
+Z	3	3592.638
+318.00223 653.7
+337.49881 666.4
+342.24850 584.0
+350.29517 663.3
+379.23465 588.1
+396.96487 752.9
+427.51041 894.5
+482.69644 712.4
+499.69199 586.4
+522.10425 612.7
+532.52722 1490.9
+541.11548 732.6
+580.28906 593.9
+630.36041 728.8
+660.03693 641.2
+676.63605 949.7
+776.71271 648.1
+795.85339 944.8
+1093.18079 559.2
+1155.00439 685.3
+1198.18103 3417.5
+1248.97754 718.5
+1505.55420 697.3
+1870.26880 1009.4
+1878.43799 859.7
+1879.52673 19573.7
+1879.78699 3024.6
+1880.42578 708.7
+1882.54858 723.6
+1907.12939 7300.8
+1930.47363 1280.2
+S	3069	3069	554.587407933
+Z	2	1107.327
+Z	3	1660.487
+140.74290 508.0
+142.14055 539.5
+143.41234 559.1
+158.37804 573.8
+159.43431 548.9
+169.71883 669.7
+171.64796 873.3
+173.72536 539.4
+174.58438 579.3
+178.05301 11355.4
+188.24112 786.5
+188.25505 1112.8
+188.26721 1690.8
+188.28293 2031.8
+188.29532 1830.2
+188.30939 1713.0
+188.33554 757.4
+188.40970 528.3
+188.43015 705.2
+198.96832 892.2
+199.25456 649.6
+199.27686 878.2
+199.33362 920.0
+199.35185 1366.7
+199.36382 1901.0
+199.37389 1737.9
+199.39203 998.8
+199.47108 736.0
+204.49883 527.1
+204.91522 611.6
+211.85890 622.7
+214.51579 665.2
+232.54041 514.7
+254.45372 587.3
+271.37698 674.4
+271.68805 653.8
+275.78979 579.5
+289.03305 597.4
+296.74069 551.1
+323.17197 625.5
+331.28815 575.1
+342.26910 683.7
+350.07071 507.7
+357.09332 677.5
+358.04736 640.7
+358.57294 946.0
+361.13913 2468.7
+372.41748 535.3
+381.35815 842.2
+387.22079 584.0
+388.77597 615.1
+411.18576 1130.4
+419.54977 1858.7
+419.88596 1555.2
+428.73044 708.3
+463.23090 1128.9
+467.72882 2498.0
+468.21973 1315.2
+468.72470 1145.7
+472.59933 636.6
+482.65985 1138.0
+503.18488 731.0
+509.14148 769.7
+510.13861 636.1
+526.16669 7535.3
+527.17004 1352.0
+532.28149 855.7
+532.48895 2098.3
+535.06909 1326.1
+536.15088 10889.1
+537.13391 28562.7
+538.13818 7855.9
+539.51636 1512.9
+539.76648 1245.6
+540.01300 951.3
+540.26563 790.4
+559.29980 517.4
+566.44629 755.2
+576.26520 557.8
+580.29297 1496.5
+596.37396 609.3
+609.26025 610.0
+620.30713 1085.6
+621.33557 514.1
+628.82050 13522.8
+629.32227 8323.8
+629.82336 2493.8
+630.32056 1130.2
+658.43915 568.3
+676.68060 900.6
+685.36084 1601.4
+685.86237 970.9
+716.37439 823.3
+724.34271 628.2
+725.67828 698.9
+726.01477 696.0
+731.02527 1017.7
+731.35699 1225.9
+731.69250 1077.1
+734.41589 1253.1
+742.38806 1375.4
+742.88458 1787.5
+743.38226 820.0
+795.86896 980.4
+815.21460 688.8
+828.03925 541.8
+833.09106 527.6
+836.33759 647.4
+839.37073 769.4
+899.90179 598.8
+1080.40210 542.4
+1157.81262 589.7
+1188.13367 666.0
+1198.09790 2993.6
+1321.26233 738.7
+1430.15247 611.6
+1581.05676 588.2
+1601.09204 750.2
+1726.78552 713.0
+1767.49292 619.1
+1829.53149 619.2
+1876.02368 669.7
+1878.66797 1104.2
+1879.01318 1267.3
+1879.74951 15244.1
+1880.20129 4270.0
+1880.64697 1743.6
+1881.02478 678.8
+1881.82800 950.6
+1907.16052 7477.0
+1907.46460 985.5
+1917.84192 706.7
+1930.59058 877.9
+1983.99500 630.0
+S	3070	3070	724.340241267
+Z	3	2169.745
+Z	2	1446.833
+188.22206 2646.9
+188.23935 3027.0
+188.25713 4750.8
+188.26840 6703.4
+188.28056 7251.5
+188.28984 7239.0
+188.30902 6818.0
+188.31894 4958.5
+188.32895 2569.4
+188.35396 2383.5
+188.38455 2309.3
+188.39058 2080.7
+198.96848 3574.5
+199.20247 2168.2
+199.26428 5389.2
+199.34554 3078.0
+199.36156 11043.2
+199.37852 3044.7
+199.46040 3750.6
+211.11264 2800.5
+232.55913 2391.8
+239.11926 2874.9
+239.93825 2962.4
+251.59467 2708.7
+252.97673 2801.9
+271.44489 2943.4
+294.61902 2754.6
+303.16571 7895.5
+316.90213 2370.6
+342.25735 2871.5
+342.27252 2589.6
+380.80966 2607.4
+403.82996 2847.1
+462.73572 4794.1
+467.72922 2984.2
+468.21848 4084.4
+476.73499 26902.1
+477.23581 17604.0
+477.73642 3610.1
+479.33539 2974.4
+504.78723 2234.0
+504.80771 2252.6
+513.30157 14100.3
+514.30328 4609.9
+532.52850 7562.6
+544.72974 3033.2
+549.15222 3307.8
+609.84497 3343.1
+661.03107 3898.8
+661.36365 11255.1
+661.69678 5634.1
+676.64258 5352.4
+680.03052 7073.0
+680.37604 3531.8
+680.70337 4235.4
+795.86780 3463.3
+801.29321 2580.5
+829.42554 28074.4
+829.92902 22575.8
+830.42798 10773.9
+903.80481 2593.8
+916.52960 6342.0
+917.53510 4368.2
+925.97034 3857.5
+926.47675 2932.2
+933.52087 8795.8
+934.49445 52503.2
+934.99603 57419.1
+935.49493 33589.8
+935.99799 6264.1
+951.42511 5464.8
+952.46478 23627.8
+953.47339 10044.8
+990.52905 2716.6
+991.03693 108881.4
+991.53778 92794.2
+992.03888 59436.2
+992.54083 13068.4
+1010.54480 2878.0
+1011.04089 5162.4
+1011.54089 5244.0
+1019.54712 77205.0
+1020.04828 88389.1
+1020.55121 49016.9
+1021.05640 10489.8
+1029.61096 7473.8
+1030.61768 5065.5
+1035.52551 2908.2
+1057.27539 2721.8
+1086.64355 4855.5
+1087.63904 4164.7
+1121.63904 4990.7
+1122.62549 3633.3
+1123.61877 3196.0
+1144.64856 4886.9
+1198.18018 12544.9
+1198.43713 3269.0
+1218.68604 63689.7
+1219.68896 28865.5
+1220.68604 8274.3
+1256.73206 3664.8
+1294.17065 2744.6
+1319.21130 3048.9
+1427.44141 2787.8
+1525.40833 3255.1
+1631.02393 2738.3
+1631.34302 2969.8
+1708.82935 3275.6
+1719.47803 3012.7
+1776.82690 3388.1
+1878.24316 2650.3
+1879.55469 82197.7
+1881.07739 4066.5
+1881.33264 2887.4
+1882.09827 2786.7
+1907.13684 29010.2
+1918.93262 2966.2
+1929.13086 2753.6
+1930.60364 4512.1
+S	3071	3071	723.8378246
+Z	3	2168.238
+Z	2	1445.828
+187.55521 655.0
+188.25145 765.8
+188.26193 1063.5
+188.27292 938.4
+188.28149 1328.8
+188.29562 1240.1
+188.30342 965.8
+188.30859 902.2
+198.97050 971.3
+199.27423 643.8
+199.31319 788.3
+199.32445 605.5
+199.33878 1581.0
+199.34892 1674.5
+199.35913 1600.1
+199.36996 1145.2
+199.44461 989.9
+215.51071 498.3
+217.37505 547.6
+257.66254 636.1
+263.53329 550.7
+294.14432 592.4
+308.89499 653.8
+342.26208 795.4
+352.85324 609.5
+368.54895 621.6
+386.89954 652.4
+392.21350 1146.8
+404.70401 596.9
+408.18420 615.3
+422.98315 752.7
+445.78909 622.7
+465.56836 647.1
+481.04315 862.4
+482.64304 807.4
+498.25281 651.8
+513.30231 3240.6
+532.53369 1944.6
+534.35925 758.4
+540.19989 649.6
+591.38568 681.6
+622.40271 649.3
+630.39917 739.1
+676.63495 566.3
+689.33295 809.8
+689.53748 913.8
+704.90424 846.4
+730.06024 669.6
+771.91949 698.9
+775.43201 1610.4
+775.94208 1428.0
+784.32019 600.8
+795.87762 799.6
+803.78320 670.2
+829.43195 1461.6
+866.86804 676.7
+896.98297 1603.5
+897.47803 677.8
+920.42377 1104.3
+933.51581 2213.2
+934.49445 1684.5
+951.42749 1165.0
+952.38068 709.0
+991.03699 4417.6
+1019.54614 3295.9
+1019.66583 580.9
+1029.61108 901.6
+1042.04797 691.8
+1075.03687 658.7
+1143.66028 1648.6
+1198.04639 892.1
+1198.19666 3574.3
+1218.68164 2667.8
+1237.55737 733.5
+1256.73083 723.8
+1313.76758 690.0
+1314.64099 661.1
+1386.94446 565.1
+1525.37378 1001.9
+1544.43225 602.9
+1625.19043 665.1
+1870.26306 1192.1
+1879.09937 1893.9
+1879.56885 16858.2
+1880.12354 1410.5
+1907.13599 7494.7
+S	3073	3073	1880.0168246
+Z	2	3758.186
+Z	3	5636.775
+532.54602 1641.0
+588.40875 554.9
+630.35095 806.3
+728.06879 584.0
+731.04858 760.2
+739.13580 641.0
+1187.61255 734.9
+1198.22107 3035.3
+1404.04163 643.9
+1750.58643 655.3
+1752.31384 622.6
+1766.42249 697.4
+1781.06470 650.6
+1877.16492 779.8
+1878.13940 945.8
+1878.67285 971.1
+1879.07544 1750.0
+1879.38110 5419.3
+1879.61194 17874.1
+1880.13525 2053.9
+1881.10400 775.7
+1907.05457 7285.0
+1918.92615 789.4
+S	3074	3074	1907.4538246
+Z	3	5719.338
+532.52136 1296.9
+645.67877 585.4
+676.65967 845.3
+678.73901 576.9
+682.43091 623.0
+795.87732 884.3
+849.75220 614.3
+934.75995 655.7
+985.24817 598.0
+1125.56824 596.3
+1131.90100 635.6
+1181.72485 699.7
+1198.17432 3121.8
+1295.12061 664.6
+1319.88379 750.7
+1525.43750 1056.3
+1563.58862 647.5
+1662.80530 719.8
+1870.25110 1064.6
+1877.11975 745.6
+1877.54138 792.3
+1878.46179 980.1
+1878.62866 1399.2
+1879.31006 2328.1
+1879.58289 19401.1
+1880.54810 1060.5
+1880.77930 982.1
+1881.61987 745.1
+1907.09937 7492.4
+1918.98865 841.1
+1930.61462 898.9
+1981.96790 625.6
+S	3075	3075	1198.55740793
+Z	3	3592.397
+Z	2	2395.267
+390.57867 680.3
+427.57263 698.0
+481.36353 622.9
+482.69202 805.4
+513.22089 686.0
+519.68884 620.4
+532.53986 2167.8
+547.02979 761.2
+580.13971 653.7
+620.73749 592.5
+629.99609 690.6
+630.44092 915.6
+676.67792 914.0
+795.88837 805.3
+858.10565 768.2
+960.81146 612.3
+987.92029 584.2
+997.16089 647.0
+1002.20313 701.8
+1012.93665 659.8
+1057.30969 820.3
+1111.63989 725.1
+1198.20789 3493.0
+1274.23779 649.5
+1306.13940 742.5
+1336.20959 652.0
+1492.56140 678.6
+1525.54871 888.5
+1708.85242 810.2
+1764.97131 640.5
+1870.20105 730.7
+1873.13892 720.1
+1879.15161 1806.2
+1879.35413 1628.2
+1879.62903 19650.3
+1880.11279 1874.4
+1907.03906 7415.9
+1947.29248 577.7
+S	3077	3077	1879.98840793
+Z	2	3758.129
+Z	3	5636.69
+528.19684 602.5
+532.51636 981.3
+532.54572 1166.9
+573.44220 672.7
+576.29669 603.8
+616.91974 658.9
+676.63171 927.7
+795.88275 1458.1
+1137.06470 643.8
+1198.19788 3122.1
+1322.81506 632.4
+1485.70740 810.9
+1529.28979 595.2
+1548.89624 699.0
+1765.10547 722.6
+1828.21106 764.6
+1864.09753 621.9
+1870.33740 960.4
+1877.84277 660.3
+1878.25610 777.2
+1879.05591 1160.5
+1879.52405 19786.1
+1879.75757 1152.1
+1879.98645 1260.5
+1880.44885 754.4
+1882.13416 665.9
+1904.67249 663.7
+1906.70374 1734.0
+1906.99951 6512.3
+1907.27759 1573.5
+1930.61646 1111.3
+S	3078	3078	1907.5358246
+Z	3	5719.332
+Z	2	3813.224
+532.54956 1761.0
+539.66937 600.1
+584.47662 724.2
+586.67462 564.7
+676.64966 868.4
+795.88232 1222.5
+810.02704 588.3
+870.84387 708.9
+1019.70923 1007.7
+1044.79651 540.9
+1057.28711 632.2
+1065.16333 705.8
+1081.61621 551.2
+1186.68311 554.3
+1194.00610 593.3
+1198.22546 3066.1
+1223.16028 737.9
+1284.79736 693.3
+1293.17883 652.1
+1300.77698 702.3
+1638.67578 585.1
+1860.12842 620.4
+1870.25342 768.1
+1876.20337 808.4
+1878.80176 1329.0
+1879.56702 19416.5
+1880.28796 1030.6
+1906.96155 7153.3
+1930.78491 844.4
+1944.23767 733.5
+S	3079	3079	1198.67424127
+Z	2	2395.501
+Z	3	3592.747
+427.54376 665.1
+487.13245 576.7
+532.48932 1699.8
+550.76648 557.4
+566.99579 599.0
+623.15338 719.6
+676.64984 865.0
+795.88159 740.0
+837.71143 712.0
+946.60626 552.7
+1057.28259 867.7
+1171.25769 647.0
+1174.20227 584.2
+1198.09399 3018.1
+1198.24121 714.1
+1474.41882 607.1
+1763.67859 712.8
+1776.91040 701.1
+1870.28198 636.4
+1872.88062 1026.2
+1878.05029 903.2
+1878.92676 1658.7
+1879.58008 19625.4
+1879.83630 2127.4
+1880.16663 1737.1
+1881.12878 1167.4
+1906.48108 586.7
+1906.95068 7099.3
+1930.59204 945.8
+S	3081	3081	1880.0048246
+Z	2	3758.162
+Z	3	5636.739
+521.19086 678.7
+532.49335 1484.1
+542.86621 579.3
+560.48041 777.6
+676.65289 1151.3
+754.39471 609.5
+795.88599 1038.7
+861.31848 638.0
+863.72803 598.8
+965.72748 678.2
+1198.10754 3108.9
+1207.32666 661.9
+1225.82422 689.1
+1525.36963 860.4
+1713.47119 689.2
+1849.24695 658.6
+1878.93787 779.7
+1879.20764 1805.4
+1879.55261 20079.0
+1879.91406 2011.5
+1882.06116 721.7
+1907.06042 7081.8
+1917.03784 861.2
+1930.52673 665.7
+S	3082	3082	718.780241267
+Z	2	1435.713
+Z	3	2153.065
+188.17580 723.1
+188.21034 778.1
+188.24794 641.5
+188.27365 1300.9
+188.29008 763.8
+189.58524 595.8
+198.97136 690.9
+199.23373 530.0
+199.24126 601.5
+199.26212 527.8
+199.27028 777.6
+199.30368 621.9
+199.33937 1119.3
+199.35258 1324.7
+199.36214 1844.7
+199.38271 1095.3
+199.40219 732.3
+199.45926 862.4
+221.94168 584.3
+225.43692 582.5
+227.16515 547.0
+238.68945 673.4
+245.26671 568.8
+246.15540 920.3
+255.29892 678.5
+258.95966 553.7
+262.51474 565.1
+280.18661 653.0
+284.68759 651.4
+299.54892 832.6
+304.75827 713.6
+325.94202 563.2
+342.29764 640.8
+344.04437 589.9
+361.18201 2379.3
+405.20743 796.8
+412.96762 655.7
+415.18213 1600.8
+418.36212 606.5
+434.64038 585.1
+476.73367 2103.0
+477.23456 1154.5
+495.29059 917.4
+508.25058 3370.7
+510.25409 1173.3
+528.26489 5024.2
+532.52826 2423.6
+611.29919 2395.9
+611.80011 785.0
+627.33362 6608.1
+628.34009 924.5
+630.42139 861.7
+647.29816 3009.6
+647.63306 2604.1
+647.97040 1007.1
+661.02789 3717.8
+661.35999 2698.2
+661.69537 2310.7
+676.64148 688.5
+680.03943 675.5
+680.36829 1036.5
+694.33038 3616.1
+695.33148 933.2
+700.85162 659.2
+774.69293 661.2
+779.80627 599.8
+795.88245 837.3
+804.74402 598.1
+809.35565 12778.9
+810.35840 4194.5
+819.52600 542.1
+829.42285 1830.8
+829.92834 1319.0
+840.64313 662.0
+883.46796 633.6
+908.42493 9880.3
+909.42706 2829.6
+925.48212 1247.1
+925.99316 1727.1
+926.48730 1335.5
+928.43903 3201.0
+929.43451 1456.5
+934.49731 5024.0
+934.99493 6482.1
+935.49976 2344.2
+952.46954 924.0
+954.05530 690.4
+970.44757 962.7
+970.94366 2409.4
+975.27936 656.5
+982.02649 1755.1
+982.53107 2574.5
+983.03314 1007.9
+991.51813 827.6
+1010.54254 2282.4
+1011.04523 2861.2
+1011.55127 1291.7
+1019.68860 656.1
+1021.51056 4169.0
+1022.50702 1801.6
+1057.26099 866.4
+1075.51111 2714.0
+1150.56494 1326.0
+1198.18286 2962.2
+1200.66870 4228.0
+1201.67151 1718.6
+1202.70215 854.3
+1221.57153 845.7
+1395.88623 667.9
+1440.33325 637.5
+1493.67163 601.8
+1503.00793 734.9
+1870.13074 648.2
+1870.68604 670.7
+1878.20239 922.6
+1878.62524 1482.9
+1878.98950 1480.8
+1879.54834 17480.3
+1880.00745 2042.8
+1880.39978 1038.9
+1880.75720 1046.1
+1907.09985 7545.6
+S	3083	3083	1907.4528246
+Z	2	3813.058
+Z	3	5719.083
+532.49896 1970.1
+546.40204 711.3
+557.37903 616.1
+607.34149 606.6
+609.79474 666.6
+665.34448 560.1
+676.65796 1124.6
+722.44360 598.8
+795.89001 1165.1
+838.50238 620.5
+971.34485 598.7
+1057.27869 857.9
+1102.58618 776.2
+1184.38806 648.4
+1198.11462 3742.1
+1469.38269 618.4
+1525.50269 844.7
+1556.51807 634.9
+1752.47339 594.7
+1857.79333 604.0
+1876.24182 922.5
+1878.27417 792.8
+1878.66748 1379.0
+1879.16064 3420.9
+1879.58716 19685.1
+1879.98718 2972.6
+1880.47461 1335.8
+1880.87561 1175.9
+1907.15210 7370.3
+1930.71228 1231.2
+S	3085	3085	1880.03324127
+Z	2	3758.219
+Z	3	5636.824
+532.49500 1370.9
+549.19849 555.1
+549.91089 626.4
+602.67987 545.0
+623.58411 627.8
+648.21094 645.6
+731.17145 961.0
+772.55328 628.3
+784.49524 637.7
+795.89502 852.5
+865.36438 745.7
+1187.81665 644.5
+1198.10461 3407.8
+1205.48352 582.4
+1205.53735 567.5
+1229.21106 784.5
+1257.65625 691.3
+1275.55505 615.8
+1562.42261 675.1
+1879.54224 19931.6
+1879.91528 1083.1
+1907.09253 7336.3
+1930.74670 763.9
+1935.30237 827.4
+1991.94226 650.2
+S	3086	3086	1907.5838246
+Z	3	5719.476
+Z	2	3813.32
+532.44562 1607.4
+629.12781 627.6
+647.10248 622.5
+676.64801 755.1
+683.86115 631.5
+731.17157 814.8
+740.59735 543.0
+782.59998 651.8
+795.89056 863.3
+833.50604 580.1
+911.17859 602.3
+1013.96332 619.1
+1110.51074 672.3
+1197.98743 3071.5
+1203.61487 595.1
+1306.60217 602.7
+1489.75903 768.5
+1667.06873 607.0
+1870.32532 735.1
+1879.00354 1505.3
+1879.54651 19426.8
+1880.09509 1521.3
+1882.94189 765.4
+1907.18030 7619.6
+1967.23779 590.0
+S	3087	3087	1198.50999127
+Z	3	3592.255
+Z	2	2395.172
+328.71060 616.6
+407.46109 557.4
+412.94034 677.3
+419.48395 624.8
+427.55353 796.2
+441.21796 638.4
+479.13046 705.0
+482.69342 720.7
+505.43814 618.2
+531.73608 695.3
+532.46655 2144.6
+553.81604 573.5
+556.83929 609.9
+572.65308 594.2
+590.78021 589.6
+664.79926 624.7
+676.65009 1269.7
+795.89771 992.4
+857.80676 778.6
+885.45923 640.1
+1100.16858 645.8
+1198.04553 3330.0
+1247.79004 714.8
+1248.21350 706.3
+1318.79822 653.5
+1431.41821 666.6
+1711.02954 657.8
+1750.89465 596.7
+1878.42566 637.5
+1878.85571 980.4
+1879.07117 1098.8
+1879.56555 18769.5
+1879.84277 4054.9
+1880.17798 1172.1
+1880.29297 1400.1
+1881.51868 613.3
+1907.16199 7278.9
+1919.05688 928.0
+S	3089	3089	694.6058221
+Z	4	2774.39199
+184.10664 629.6
+188.27240 1596.3
+188.28189 1825.0
+188.29607 2118.4
+195.16930 643.5
+197.74733 629.6
+198.97487 1274.0
+199.25752 884.6
+199.31206 666.4
+199.33534 809.0
+199.34370 578.4
+199.35649 2862.1
+199.36734 989.5
+199.39424 705.9
+199.45456 1069.7
+199.95389 736.4
+204.11925 574.9
+233.57033 749.4
+249.15932 1528.8
+271.35226 629.6
+277.14590 2248.9
+284.13968 1963.1
+291.14105 651.7
+294.46344 552.4
+301.23413 596.6
+342.28625 643.7
+344.68704 722.9
+351.90115 719.2
+376.16019 1018.8
+395.93036 580.1
+396.85504 618.3
+397.22348 1956.6
+407.43118 645.3
+409.18655 640.7
+427.55301 625.9
+436.46719 667.5
+437.18332 1025.9
+456.23083 880.0
+470.91367 6158.5
+471.24844 5383.5
+471.58060 1515.0
+472.21750 803.0
+483.74976 894.3
+486.24197 609.3
+493.94617 747.8
+505.24023 1446.3
+511.23102 622.4
+515.26086 3900.0
+515.76129 1753.1
+516.25751 977.5
+519.93939 1712.5
+520.27002 1246.9
+520.60638 905.3
+522.26880 811.8
+525.28088 4349.3
+526.28546 1531.0
+532.45294 1890.9
+539.22345 1134.2
+549.16656 743.2
+549.28168 3043.1
+553.28339 22702.0
+554.28571 5562.3
+555.28809 1121.4
+557.77490 972.5
+557.95563 673.9
+566.78375 1331.4
+567.29242 3396.9
+568.29980 761.7
+574.80316 766.3
+575.29596 646.7
+580.27936 1051.8
+582.30365 946.7
+585.30310 3050.4
+586.30743 1691.4
+588.79486 23174.8
+589.29596 17351.4
+589.79773 7760.5
+590.29755 1624.2
+590.62292 1249.0
+595.63544 821.9
+595.96399 2727.6
+596.29913 4003.5
+596.63281 2691.0
+607.28931 986.4
+608.28400 1025.1
+621.62903 574.4
+624.31671 1336.5
+635.28180 1974.4
+636.28894 902.7
+638.36444 5027.9
+638.81915 2192.4
+639.07117 2594.5
+639.32190 3459.2
+639.36566 1884.0
+639.57159 1033.4
+643.07410 10625.4
+643.32483 16453.1
+643.57538 10629.2
+643.82593 5920.4
+644.07532 1690.8
+644.98108 935.3
+645.30975 779.7
+647.07550 759.3
+647.33008 16730.3
+647.58112 33503.3
+647.83160 22602.1
+648.08228 12683.1
+648.33167 4007.7
+648.58575 840.0
+648.84393 666.9
+649.32977 689.1
+650.31830 7629.8
+650.65283 9526.3
+650.98761 5274.0
+651.32263 2843.6
+652.30707 2786.5
+653.31287 847.0
+657.33636 2488.6
+657.84094 2834.6
+663.67957 762.4
+664.82281 1137.7
+665.32251 1031.0
+666.36749 3484.3
+667.37146 1057.9
+669.34320 747.5
+669.73535 705.3
+673.82861 5827.4
+674.32983 4105.7
+674.82861 2819.6
+675.32642 1116.9
+676.62341 720.1
+676.67108 1179.5
+677.33667 4295.1
+678.34906 1514.5
+705.86658 16590.3
+706.36810 18931.1
+706.86926 6520.9
+707.37158 3176.5
+707.87518 1215.1
+713.36115 3216.2
+714.36707 1649.7
+719.35229 981.5
+724.69861 2205.7
+725.02960 3746.2
+725.36224 4392.9
+725.69855 1921.5
+726.03198 897.6
+730.69934 3929.5
+731.03461 5143.3
+731.36530 1984.4
+731.70331 1128.3
+739.30438 643.6
+745.36328 1522.9
+746.86304 1273.2
+747.37244 1093.0
+755.38031 1520.8
+755.88245 1140.1
+756.87854 754.1
+763.36133 706.8
+768.39789 927.1
+768.72900 3722.7
+769.06238 2221.0
+769.40387 1285.0
+779.40179 12468.6
+779.90271 15516.6
+780.40344 6505.9
+780.90070 1463.7
+790.42273 3316.5
+790.82251 669.5
+791.42792 1792.7
+792.43243 895.5
+795.90015 963.5
+801.42657 3368.1
+802.43073 1270.2
+808.43091 2275.0
+809.43994 778.2
+819.29041 718.4
+826.44147 2386.4
+827.45068 1019.8
+829.42755 4072.4
+830.41949 1123.4
+830.75592 2071.3
+831.08447 1567.9
+836.42181 9904.1
+836.92456 12440.0
+837.42438 5479.9
+837.92633 2181.9
+857.09576 3324.3
+857.43201 7737.7
+857.76599 5864.1
+858.09656 3318.5
+858.44946 2625.2
+859.44769 1097.9
+862.77136 29814.2
+863.10559 55663.3
+863.44012 46881.3
+863.77374 23204.7
+864.10925 8547.0
+864.44489 2665.9
+864.77618 989.6
+884.93042 6284.7
+885.43207 6186.5
+885.93439 3918.6
+886.43280 919.0
+886.93164 753.0
+893.44348 23362.5
+893.94458 26372.8
+894.44611 14149.5
+894.94611 4350.6
+895.44525 985.6
+915.46759 775.3
+916.48248 698.6
+961.46234 959.6
+966.49591 1709.1
+966.96136 2269.4
+967.47943 1071.2
+974.97437 2829.0
+975.47705 4807.3
+975.98352 2815.8
+976.47876 1370.9
+980.44757 1473.8
+980.96191 951.6
+1012.48883 1945.7
+1013.50104 886.8
+1017.53473 948.0
+1018.03204 1179.4
+1019.57520 719.3
+1028.40137 611.6
+1029.51538 2902.6
+1030.52173 1773.1
+1031.51880 2586.6
+1032.01758 2451.4
+1032.51746 1433.0
+1036.83008 683.2
+1037.99451 687.1
+1046.50146 941.3
+1057.25159 837.5
+1096.04675 756.8
+1111.56738 744.1
+1124.69653 597.1
+1176.58313 1550.2
+1177.58789 1527.0
+1198.00916 3521.1
+1198.17725 610.8
+1217.58728 1780.7
+1218.58972 1287.6
+1389.21875 554.1
+1436.25317 664.9
+1781.54089 716.2
+1879.21741 3553.8
+1879.52649 19357.3
+1879.84790 3859.7
+1880.10352 668.6
+1883.53760 676.5
+1892.90320 672.6
+1907.16101 7563.5
+1930.58093 1000.2
+S	3090	3090	695.3580746
+Z	4	2777.401
+187.01457 555.0
+188.22600 609.6
+188.25043 1064.5
+188.26677 642.4
+188.30760 548.6
+188.33498 676.8
+188.35027 498.3
+188.35960 637.8
+188.38023 615.2
+193.00072 515.3
+198.97607 681.0
+199.26324 1072.4
+199.27342 636.0
+199.34007 584.7
+199.36159 2571.6
+199.37636 658.3
+199.39514 846.9
+199.46005 1033.9
+212.05135 666.1
+235.10640 579.6
+238.69064 821.7
+246.67148 510.0
+249.16071 1281.6
+250.99393 558.6
+251.93108 593.8
+268.17139 590.1
+271.51663 721.4
+275.43246 599.6
+277.14539 1469.4
+284.13834 1431.7
+303.63452 594.8
+373.10797 641.7
+376.16290 1136.0
+414.60669 613.6
+427.55099 1173.0
+437.17883 752.9
+450.97015 713.2
+470.91226 3058.8
+471.24728 3154.0
+471.58221 2114.5
+471.91229 623.7
+472.21597 956.1
+482.67010 977.0
+505.23956 1743.1
+515.25909 2444.9
+515.76245 1272.4
+516.26117 663.8
+519.94019 698.7
+520.26904 865.5
+525.28259 1787.0
+526.28333 944.9
+532.45129 2004.2
+549.16779 703.7
+549.28265 1556.9
+553.28284 13574.9
+554.28711 3631.8
+566.63562 584.2
+566.78851 891.5
+567.29016 1607.5
+574.79553 1274.2
+580.28217 868.9
+585.30231 2407.0
+586.30194 1306.3
+588.79437 17545.4
+589.29584 12722.9
+589.79773 4398.8
+590.29639 2045.8
+595.96564 2329.4
+596.29871 3308.3
+596.63007 985.7
+600.79523 696.6
+607.28400 987.3
+609.80603 784.9
+624.31378 1506.2
+625.31659 806.2
+635.28186 1802.1
+638.36536 3762.8
+638.82025 1032.9
+639.07349 1633.0
+639.32745 1500.9
+639.36304 1479.7
+643.07361 7156.0
+643.32477 11500.5
+643.57507 12361.0
+643.82697 4644.5
+644.07678 2584.8
+644.31934 745.7
+644.63263 709.0
+645.31110 865.7
+647.07544 710.8
+647.33038 17214.5
+647.58081 30870.1
+647.83154 22951.9
+648.08179 11757.6
+648.33148 3431.8
+648.58008 832.4
+650.31812 5369.5
+650.65259 8159.5
+650.98682 5714.6
+651.32196 2741.0
+652.31049 3150.0
+653.30829 1403.7
+657.34314 1173.4
+657.84015 927.5
+664.82391 925.8
+665.31714 807.9
+665.81085 653.7
+666.36621 2464.9
+669.33508 817.4
+673.82855 4949.1
+674.32916 4536.2
+674.82751 1771.2
+675.45251 664.0
+675.83508 806.2
+676.62976 622.2
+676.67224 680.1
+676.99493 649.8
+677.33734 3489.8
+678.34381 1013.6
+694.95892 577.2
+705.86664 12705.2
+706.36749 11555.1
+706.86951 5072.1
+707.37146 1982.1
+713.35956 2403.6
+719.36310 933.1
+724.69482 1961.8
+725.03168 2960.5
+725.36279 3088.5
+725.69910 2632.7
+730.69873 4427.7
+731.03314 3473.8
+731.13727 1055.2
+731.36713 2702.9
+731.70392 1806.5
+740.27075 705.1
+745.37000 938.5
+755.38019 1209.2
+755.87683 1162.5
+764.33984 669.0
+768.39368 1512.5
+768.72778 3821.8
+769.06177 1900.6
+769.40033 1263.2
+779.40106 9180.7
+779.90295 8888.7
+780.40503 5251.9
+780.90393 1465.5
+790.42273 1917.6
+791.42560 1023.1
+801.42609 1774.0
+802.43213 1375.2
+808.43439 991.1
+826.44885 2796.8
+829.43152 2533.2
+830.41803 761.8
+830.75214 852.5
+831.08752 928.2
+836.42194 8132.4
+836.92261 7982.0
+837.42511 4267.3
+837.92334 1838.1
+851.44061 726.4
+857.09509 2733.5
+857.43066 4943.0
+857.76257 4148.6
+858.10187 1430.7
+858.44836 1076.0
+862.77155 21652.3
+863.10559 48604.7
+863.44031 33258.1
+863.77466 19201.5
+864.10870 9722.3
+864.44287 1416.8
+884.93103 3218.2
+885.43207 3121.4
+885.93103 1256.7
+893.44348 14496.9
+893.94470 20393.1
+894.44604 10429.2
+894.94739 3106.6
+954.47437 883.3
+966.50177 1309.1
+966.96527 1443.3
+967.50537 808.2
+974.97015 1845.7
+975.47742 2920.9
+975.97711 1415.3
+981.43896 902.6
+1029.51074 2231.6
+1030.52600 1296.3
+1031.51306 1430.5
+1032.02759 866.7
+1032.52087 816.8
+1057.22815 1075.8
+1176.58362 928.9
+1198.00928 3433.2
+1208.52234 698.4
+1525.42651 931.5
+1530.92261 720.3
+1667.24121 580.1
+1713.19336 716.7
+1750.57971 658.9
+1794.27173 655.4
+1877.13391 718.1
+1878.91101 1437.7
+1879.12976 1692.0
+1879.52124 19195.3
+1879.79016 2678.3
+1879.94092 1618.9
+1880.17883 1141.6
+1906.65784 1017.6
+1907.16272 7337.1
+1919.19543 676.4
+1930.64636 825.0
+S	3091	3091	1880.02540793
+Z	2	3758.203
+Z	3	5636.801
+512.33112 614.2
+516.31445 600.8
+532.47992 1651.6
+630.32324 859.5
+676.66577 1195.4
+740.09924 610.5
+795.87805 1098.8
+796.22369 601.1
+900.40991 606.5
+991.12054 701.3
+1067.96667 596.9
+1160.97998 595.4
+1198.07654 3284.6
+1257.35193 676.1
+1391.91821 592.7
+1442.44031 678.2
+1497.30615 612.8
+1786.22839 662.5
+1790.83081 586.0
+1878.50671 797.9
+1878.85046 979.0
+1879.59094 20098.9
+1879.89819 1081.2
+1880.68555 823.3
+1888.23999 697.0
+1907.10657 7655.3
+1930.38660 1019.7
+1970.60645 669.9
+1983.07629 795.2
+S	3093	3093	694.6034421
+Z	4	2774.38247
+188.24995 945.7
+188.25610 933.6
+188.26942 1456.1
+188.28288 1887.6
+188.29689 2037.9
+188.30548 1619.1
+188.32500 1027.3
+188.34161 657.6
+192.79733 694.0
+198.06847 588.2
+198.97572 781.5
+199.26003 1319.1
+199.26807 910.3
+199.34746 1055.5
+199.35883 2991.7
+199.36830 1169.5
+199.45671 1079.7
+199.46671 901.5
+237.96986 541.7
+249.15990 1939.3
+255.28966 608.1
+255.58936 541.6
+256.14462 872.6
+257.14914 572.0
+268.76193 672.2
+277.14566 2762.7
+278.11374 1322.8
+279.73297 569.2
+284.13925 3788.9
+294.01501 573.0
+311.96005 634.2
+342.27094 782.5
+361.10059 616.8
+376.16071 1359.9
+381.35730 760.6
+397.22330 3039.5
+398.22934 948.4
+409.18903 670.0
+426.25558 568.9
+427.54178 806.0
+437.18353 881.1
+444.22281 696.6
+456.23157 1627.9
+470.91330 8003.8
+471.24756 6500.0
+471.58151 2914.1
+472.21802 1291.8
+477.24338 1402.4
+483.74814 1510.5
+484.24622 1372.2
+488.21426 792.8
+505.23883 2349.6
+511.22903 914.3
+515.26025 5963.1
+515.76166 2631.6
+516.25970 1072.5
+519.93835 1320.0
+520.27185 1984.5
+522.26898 2005.8
+525.28143 6008.6
+526.28589 2231.0
+532.51227 2231.3
+535.26624 611.1
+539.22577 1779.9
+549.15771 693.0
+549.28162 5141.0
+550.25281 984.0
+553.28333 35265.8
+554.28583 9565.6
+555.28711 1135.6
+558.62671 703.3
+567.29041 4705.9
+568.29602 1305.9
+574.79694 1169.1
+580.27942 1178.3
+580.78137 1311.1
+581.28467 848.5
+583.30206 961.9
+585.30304 3855.9
+586.30695 1727.6
+588.79443 35347.8
+589.29596 23124.6
+589.79718 10066.8
+590.29724 2751.7
+590.62329 1904.3
+590.96173 1257.9
+595.96307 3386.3
+596.29834 5033.0
+596.63464 2240.0
+596.75610 639.5
+596.96655 852.4
+600.29175 1380.6
+600.79633 846.3
+607.28662 898.6
+609.30621 708.8
+613.82501 950.0
+618.25421 816.1
+621.33252 610.6
+624.31573 2573.0
+625.31232 832.8
+635.28137 3190.0
+636.28992 982.0
+638.36536 8858.8
+638.57141 956.2
+638.81982 3786.3
+639.07001 4480.6
+639.36621 4161.7
+639.57233 1425.6
+643.07416 13586.8
+643.32489 25576.0
+643.57507 17338.5
+643.82629 7242.7
+644.07825 2334.2
+644.64417 1868.2
+644.97705 1975.0
+645.30957 1226.3
+645.64099 1023.3
+647.33044 27085.4
+647.58093 50285.7
+647.83154 36198.4
+648.08203 16420.9
+648.33295 9323.1
+648.58429 2268.2
+650.31903 8521.7
+650.65289 13423.5
+650.98645 7151.2
+651.32214 3685.2
+652.30798 4939.3
+653.31024 1693.6
+657.34125 3645.5
+657.84100 1912.2
+659.22864 598.4
+662.81799 745.3
+663.67651 815.2
+664.82245 2435.2
+665.32281 1956.1
+665.81732 833.2
+666.36755 5326.5
+667.36694 1973.8
+668.44263 794.7
+668.83997 1363.0
+673.82916 7958.9
+674.32965 6853.6
+674.82977 2608.1
+676.66205 2162.2
+676.99670 2295.3
+677.33807 5666.0
+705.86670 32059.8
+706.36761 31065.2
+706.86957 14877.7
+707.37115 3555.0
+707.87195 1078.3
+713.36029 5733.7
+714.36469 2736.7
+719.35114 1068.8
+719.68018 1083.4
+720.01642 804.3
+724.69592 3809.5
+725.03003 6196.4
+725.36035 5425.3
+725.69946 1947.9
+730.70007 6324.4
+731.03339 8220.5
+731.36713 4798.8
+731.70245 1532.4
+741.69373 838.5
+745.36548 1652.3
+746.37073 1327.1
+746.86523 2189.6
+747.36810 1231.4
+752.38055 705.5
+755.37909 1325.7
+755.88708 1542.1
+763.05164 1025.8
+763.33655 1271.4
+768.39478 3716.6
+768.72919 5871.0
+769.06525 4083.3
+769.39404 1356.7
+770.40723 876.9
+770.89648 848.2
+771.39734 745.8
+779.40082 22029.2
+779.90198 20592.5
+780.40393 10242.8
+780.90515 3746.7
+781.39703 1194.7
+782.44702 700.9
+790.42438 6277.5
+791.42456 2436.9
+795.89441 1121.9
+801.42767 5393.3
+802.43011 3112.7
+808.43536 3951.4
+809.44104 1327.0
+825.41217 904.6
+826.44891 3690.3
+827.45483 1720.2
+827.90839 1566.3
+828.41217 1096.1
+828.91602 1008.9
+829.43054 5678.9
+830.42938 3761.8
+830.75720 2113.9
+831.08942 1131.3
+836.42200 17812.7
+836.92328 16161.3
+837.42413 8319.0
+837.92670 4555.3
+851.76434 932.9
+857.09564 8377.4
+857.43158 11458.0
+857.76355 8324.2
+858.09906 5487.8
+858.44482 3329.7
+859.45038 1159.4
+862.77148 46358.5
+863.10559 78063.9
+863.43982 68121.2
+863.77393 30832.4
+864.10785 12740.9
+864.44025 5476.9
+864.77240 1374.5
+876.41272 828.2
+884.93011 9566.6
+885.21582 592.8
+885.43158 9175.3
+885.93237 4939.4
+886.43182 2368.5
+893.44391 33741.7
+893.94373 38904.3
+894.44580 23959.4
+894.94922 8564.6
+895.45032 2804.1
+911.47113 720.7
+915.46790 948.4
+952.95563 800.8
+953.47943 1153.8
+954.48993 1332.8
+958.44952 717.3
+960.97308 1734.4
+961.47540 2001.7
+966.49597 2574.3
+966.96368 2072.8
+967.47754 1922.8
+974.97302 6558.3
+975.47778 7697.8
+975.97668 4754.6
+976.48077 1442.6
+980.44952 975.6
+980.96149 1417.6
+989.50128 1376.3
+1008.88873 744.7
+1012.48444 2008.4
+1013.48395 2098.8
+1017.50885 698.5
+1018.51654 990.4
+1029.51245 4837.3
+1030.51660 3536.9
+1031.51929 2886.7
+1032.01660 3328.5
+1032.52051 2433.9
+1033.01978 1206.9
+1055.01697 797.4
+1060.50903 1299.3
+1086.48254 669.6
+1096.54187 811.2
+1152.60425 1058.8
+1176.57788 2259.7
+1177.58081 767.3
+1178.60095 1028.6
+1198.14734 3297.8
+1200.55542 906.9
+1208.69165 733.7
+1217.59253 2594.9
+1218.59937 2338.6
+1400.62292 652.8
+1525.43542 920.1
+1638.53406 597.1
+1839.15295 616.1
+1876.89868 993.0
+1879.18176 3129.5
+1879.56543 19253.1
+1879.88538 3320.6
+1882.10303 884.2
+1907.09790 7455.8
+1930.59399 725.5
+S	3094	3094	695.3550746
+Z	4	2777.389
+188.18018 3893.2
+188.22041 4946.7
+188.25914 3452.6
+188.26695 3078.4
+188.29245 5589.1
+188.30804 5188.1
+188.32150 3309.2
+188.34616 4336.3
+197.35684 3663.0
+199.25735 4144.5
+199.29167 4450.2
+199.32677 4453.0
+199.34682 13635.2
+199.39853 4118.3
+199.40956 5287.2
+199.46886 3222.0
+199.47130 3045.3
+204.55530 3886.0
+217.97961 3909.2
+220.24277 3302.4
+249.15961 6260.6
+254.63477 4027.3
+271.83173 4212.8
+277.14511 9640.2
+277.17804 3313.8
+284.13950 10465.0
+383.45047 3366.8
+397.22357 7880.5
+411.92218 4193.8
+413.62524 3944.3
+456.22913 4817.5
+470.91293 27267.4
+471.24783 22219.4
+471.58051 14731.0
+472.21548 4256.9
+490.34558 4478.8
+505.23459 9066.0
+511.22931 4797.8
+515.26117 17725.5
+515.76196 9890.7
+519.93665 9052.4
+520.27466 6016.6
+520.60449 6948.2
+525.28064 19628.8
+526.28387 5329.5
+532.51532 8816.5
+549.15179 4485.9
+549.27960 14999.2
+550.25842 4387.8
+553.28308 113372.4
+554.28632 21656.3
+555.28314 4697.3
+567.29156 15207.2
+568.29358 5485.3
+574.79529 7238.0
+575.29852 7002.4
+580.27991 5293.6
+585.30292 18756.7
+588.79437 143012.7
+589.29584 93396.5
+589.79840 35763.7
+590.29663 8694.2
+595.96326 16710.0
+596.29895 21024.5
+596.63013 4722.0
+600.79578 4211.8
+613.10852 3767.7
+624.31140 8113.8
+625.31348 4916.0
+635.27844 8913.8
+636.28809 5331.0
+638.36426 26562.4
+638.82349 6119.1
+639.06750 15738.4
+639.33289 9187.0
+639.35522 8892.5
+639.56732 7237.4
+642.82629 5270.6
+643.07458 86671.7
+643.32501 117120.7
+643.57513 74253.1
+643.82654 36120.2
+644.07892 13029.1
+644.65173 5067.5
+644.97864 5568.6
+647.33063 156722.0
+647.58093 175926.0
+647.83179 144046.2
+648.08228 70314.8
+648.33057 19137.2
+648.58093 8238.0
+650.31940 48850.6
+650.65344 42881.4
+650.98621 32437.2
+651.32281 15543.3
+652.30676 23123.2
+653.31354 6580.5
+656.81635 4105.8
+657.34064 12418.7
+657.84290 7974.1
+664.82434 9787.9
+665.32568 7027.7
+666.36682 16306.6
+669.33698 4277.4
+670.07373 4826.8
+673.82935 32327.6
+674.32874 31839.0
+674.83307 11970.4
+676.33600 4277.4
+676.66040 8317.0
+677.33789 18704.0
+678.34723 8640.4
+705.86676 85643.6
+706.36786 84323.1
+706.86847 38583.1
+707.36926 8828.1
+713.36053 14483.2
+724.69525 18634.8
+725.02972 21949.6
+725.36322 26580.3
+725.69855 13467.8
+730.69977 22887.5
+731.03680 27834.7
+731.36951 15672.0
+755.38049 12777.3
+755.88226 6928.8
+768.39386 24396.5
+768.72937 32813.9
+769.06250 18868.4
+777.40503 3818.6
+779.40076 66926.2
+779.90167 62576.0
+780.40454 32788.4
+780.90417 12255.6
+790.42413 12851.0
+801.42981 14344.7
+802.43323 6997.8
+808.43475 14079.7
+809.43884 6297.7
+815.42572 4074.6
+826.45135 12955.3
+829.42944 19915.3
+830.75562 5991.2
+831.08917 6421.3
+836.42163 60576.9
+836.92480 55508.3
+837.42499 28767.8
+837.92212 12016.0
+857.09668 24949.9
+857.43042 37418.9
+857.76550 25047.8
+858.09668 14459.2
+858.44312 12691.7
+859.45251 5117.3
+862.77167 208126.6
+863.10596 312062.0
+863.44019 244746.5
+863.77411 111311.8
+864.10980 46708.0
+864.44336 10220.8
+884.93170 30334.7
+885.42975 32403.5
+885.93097 9722.5
+886.42401 6647.0
+893.44360 132029.2
+893.94434 119567.3
+894.44489 74662.1
+894.94714 25150.9
+895.45068 6751.2
+907.57813 4041.2
+944.45135 4831.0
+951.67834 4508.1
+953.47620 4229.7
+966.50244 6816.0
+966.96716 7483.5
+974.97748 19300.7
+975.47675 21397.8
+975.98065 20468.2
+989.51355 8207.4
+1012.49524 5302.5
+1013.48700 4512.6
+1019.64807 4921.0
+1022.44269 3944.9
+1029.51831 14960.9
+1030.51819 7567.0
+1031.51099 8359.9
+1032.01697 11405.3
+1032.51636 7939.4
+1048.45068 4285.0
+1103.56836 4374.5
+1160.56470 4480.1
+1176.57117 5698.4
+1177.58704 5205.2
+1198.15161 20750.0
+1200.58093 4613.7
+1217.58948 7140.9
+1383.63550 3926.3
+1500.39807 4588.9
+1525.42822 5330.2
+1710.34753 4520.6
+1816.66260 3960.5
+1876.80371 6813.1
+1878.61169 4035.8
+1878.94934 8376.6
+1879.30066 16794.3
+1879.57800 115367.6
+1880.22644 5550.0
+1880.51025 4418.7
+1907.17957 45963.1
+1919.01318 4939.2
+S	3095	3095	1907.57824127
+Z	2	3813.309
+Z	3	5719.459
+532.44269 1738.9
+545.38153 717.4
+554.01483 618.1
+555.71832 637.4
+573.74744 597.4
+590.68701 627.5
+676.65808 883.8
+694.81482 586.6
+714.78101 628.6
+766.58032 686.5
+793.63617 734.9
+795.89075 1058.4
+1023.05389 677.2
+1026.14575 643.4
+1043.77905 693.2
+1079.19031 760.7
+1090.94592 633.2
+1172.02979 582.2
+1172.99146 830.6
+1184.79846 631.9
+1197.98499 3609.8
+1304.10083 701.3
+1311.28650 605.3
+1420.35266 604.6
+1446.60950 822.7
+1452.85193 578.6
+1757.88586 622.6
+1758.08472 611.8
+1878.23462 940.4
+1878.58899 1061.4
+1878.93298 1663.9
+1879.57312 19357.3
+1879.95740 1331.4
+1880.21570 1259.4
+1880.54846 1388.1
+1880.88208 730.9
+1881.36694 679.2
+1882.42102 833.1
+1907.03662 7028.6
+1919.12598 638.7
+1928.41675 729.9
+1930.72107 1072.7
+1934.30701 742.9
+S	3097	3097	1880.00624127
+Z	3	5636.743
+Z	2	3758.165
+532.50012 2090.1
+574.97003 661.6
+670.39032 555.9
+676.66254 1071.3
+795.89471 1250.4
+823.00458 575.3
+1057.28003 777.0
+1107.34033 612.7
+1180.91968 560.9
+1198.11829 2979.8
+1364.43127 623.5
+1379.63367 653.0
+1386.03699 599.1
+1875.52881 760.6
+1877.82288 1058.8
+1879.60437 19626.7
+1879.89294 2310.2
+1880.83411 791.9
+1881.31934 755.8
+1882.36682 606.7
+1907.10901 6794.3
+1930.67542 915.9
+S	3098	3098	1907.5498246
+Z	2	3813.252
+Z	3	5719.374
+527.87354 606.7
+532.49426 1502.7
+538.71130 612.2
+581.71631 640.5
+588.52850 598.9
+734.33057 583.2
+790.63708 657.1
+795.89642 1162.5
+970.21899 601.4
+998.74536 556.5
+1019.67511 1034.4
+1105.01770 654.7
+1198.11108 3087.0
+1252.87036 690.1
+1525.47754 929.9
+1667.09595 714.4
+1879.48865 9900.3
+1879.69910 13258.2
+1880.06335 6912.0
+1880.74573 906.1
+1907.04248 7616.9
+1907.35938 663.7
+1910.67029 712.4
+1930.65076 1004.7
+S	3099	3099	1198.46399127
+Z	3	3592.117
+Z	2	2395.08
+342.29941 657.3
+399.76038 656.5
+412.99506 655.1
+461.82239 647.4
+489.67673 600.6
+498.64810 662.7
+502.85416 612.9
+532.49121 1789.3
+543.63123 564.8
+552.48907 588.7
+596.33856 566.3
+630.45459 784.2
+668.12567 577.7
+688.41943 618.6
+696.50488 639.2
+794.24829 548.7
+795.90973 863.0
+797.42468 647.3
+815.54907 702.3
+874.27539 612.5
+973.70111 621.4
+1065.50781 567.5
+1092.28418 715.1
+1198.10535 3217.2
+1583.55566 622.9
+1711.84448 592.3
+1878.52466 877.0
+1879.42944 8382.6
+1879.70227 16163.9
+1880.59045 2194.8
+1880.93237 1211.9
+1907.05640 7196.2
+1918.92493 651.8
+1930.75671 960.2
+1944.32397 654.0
+S	3101	3101	694.6047846
+Z	4	2774.38784
+188.21991 2791.1
+188.26181 7583.9
+188.28218 10439.4
+188.29207 10200.7
+188.33223 3904.8
+194.42593 2766.7
+194.52838 2994.7
+197.07458 2923.1
+198.97415 2735.3
+199.34924 15875.5
+199.35841 8429.8
+199.36671 6069.1
+199.37553 6239.3
+199.44658 5616.4
+199.45740 4556.6
+199.46419 3869.6
+207.78755 3107.0
+219.32895 3058.1
+225.98286 2706.7
+233.56180 3615.2
+235.39563 3083.3
+241.83464 3028.3
+249.15970 4146.2
+264.82697 3474.5
+271.52777 3750.2
+277.14532 7049.3
+280.17422 3752.3
+284.13898 7736.3
+313.28091 3527.1
+324.56708 3444.3
+338.20435 2987.6
+373.63226 3306.8
+376.16101 3747.4
+391.18896 3705.6
+397.22403 5301.7
+417.86337 3834.0
+436.20007 5256.9
+442.60013 3319.5
+470.91376 19200.4
+471.24762 17003.2
+482.64038 3669.3
+483.75003 5215.0
+488.21667 5326.4
+490.61554 3321.5
+505.23965 6694.9
+509.53757 3434.1
+515.26196 16365.8
+515.76355 11327.8
+516.26300 3464.2
+519.93567 7715.8
+520.26825 10818.6
+522.27155 4517.7
+525.28162 13834.5
+532.44873 9550.0
+539.22144 6244.7
+549.28076 14639.4
+553.28308 83194.5
+554.28528 25358.6
+555.29517 3949.7
+556.70239 3055.7
+566.28461 4971.2
+567.29010 14483.8
+575.29443 3378.4
+585.30188 8427.9
+586.31140 3823.1
+588.79419 100670.5
+589.29529 71943.6
+589.79657 26010.7
+590.30261 4341.3
+591.78406 5436.8
+595.96490 14397.3
+596.29883 14646.9
+596.63391 6103.4
+600.29553 3449.3
+600.79376 6764.3
+624.31769 7532.7
+635.27753 8456.0
+638.36542 18892.9
+638.82288 5425.2
+639.06940 11175.2
+639.32257 4544.1
+639.36700 6386.6
+642.82800 6135.1
+643.07397 50001.8
+643.32471 74545.2
+643.57465 55705.8
+643.82733 25292.0
+644.07574 21534.0
+644.64008 5618.2
+644.97150 8111.6
+647.33020 102848.6
+647.58093 143295.2
+647.83167 99643.6
+648.08258 42540.9
+648.33209 17568.3
+648.58063 6053.6
+650.31909 27706.0
+650.65259 37933.1
+650.98798 14808.2
+651.32019 8132.0
+652.30829 14262.9
+653.30737 4529.4
+657.33777 5294.1
+657.83459 4689.2
+662.94208 3260.6
+664.82452 6889.6
+665.32025 5128.8
+665.82129 4661.2
+666.36353 11364.7
+673.82770 23683.0
+674.32971 17829.5
+674.82922 9754.0
+676.66638 7086.8
+676.99371 4225.8
+677.33740 16136.5
+679.03699 3052.3
+705.86676 73732.4
+706.36835 54847.0
+706.86951 28570.3
+707.36938 10035.0
+713.35950 12513.9
+714.36786 4597.9
+716.96637 3132.7
+724.69659 15058.6
+725.02728 18385.2
+725.36200 13244.7
+725.69800 7654.7
+730.70129 19450.6
+731.03357 19253.3
+731.36646 14996.8
+731.70013 7738.8
+743.91064 3277.7
+745.36389 6398.1
+746.86420 3979.3
+747.87946 3743.5
+755.87341 5249.7
+759.00378 3253.6
+768.39648 16826.6
+768.72937 15916.8
+769.06219 14537.3
+769.39978 8352.0
+779.40021 55043.5
+779.90161 47636.7
+780.40546 18471.0
+780.90710 8068.4
+781.41901 4108.2
+789.64111 3817.8
+790.41968 11651.9
+791.42548 5089.0
+795.90198 4843.1
+801.42950 15191.5
+802.42914 7517.7
+808.43414 10206.6
+809.44421 3902.7
+826.44897 6721.6
+829.43079 12403.3
+830.42627 4210.5
+836.42194 36747.9
+836.92377 38639.2
+837.42450 22267.5
+837.92639 8544.2
+857.09772 16857.9
+857.43115 23939.6
+857.76483 19352.0
+858.09937 9428.3
+858.43573 8217.7
+859.46509 4592.3
+862.77124 152943.0
+863.10535 233545.3
+863.44019 161042.9
+863.77325 71423.5
+864.10858 30251.2
+864.44348 12152.7
+884.93011 25247.6
+885.43268 20857.3
+885.93549 9635.7
+893.44312 94077.1
+893.94452 89529.4
+894.44562 51854.6
+894.94568 18646.5
+965.61890 3234.3
+973.32977 3313.3
+974.97498 17989.4
+975.47772 17647.6
+975.98663 5609.2
+976.49335 3526.5
+981.96613 3614.7
+1012.48383 4235.5
+1029.51282 11374.7
+1030.51086 5801.7
+1031.51099 8015.1
+1032.02051 5675.3
+1032.51892 4797.9
+1054.99792 3237.9
+1152.08813 3216.9
+1176.56836 4865.4
+1188.08960 3566.5
+1198.01611 16609.9
+1217.59131 4750.6
+1218.58118 5147.5
+1309.89734 2972.2
+1419.43774 3869.7
+1479.90332 3138.2
+1525.37842 4134.5
+1605.01917 4330.8
+1870.13782 4295.9
+1879.02502 4333.7
+1879.62122 104807.5
+1880.27356 4215.3
+1907.05750 38271.3
+1907.79480 4293.0
+1930.54614 5188.2
+S	3102	3102	695.3565746
+Z	4	2777.395
+188.07909 2217.3
+188.25072 2139.4
+188.26747 7249.0
+188.27757 7369.7
+188.28720 7453.4
+188.29752 7130.0
+188.30672 7099.2
+188.38718 2550.7
+198.42421 2359.0
+199.14706 2039.9
+199.34451 3508.9
+199.35133 4131.6
+199.36037 9132.0
+199.37361 4429.8
+199.45789 4048.3
+200.10870 2086.9
+216.91492 2011.9
+233.56972 2913.2
+249.15927 6703.5
+249.79587 2424.5
+263.98920 2067.3
+277.14481 6148.1
+284.13928 7767.1
+290.59253 2748.6
+307.04553 2194.3
+308.46896 2131.1
+311.47018 2093.2
+315.27206 2473.3
+338.66537 2432.8
+368.78857 2740.9
+370.47046 2251.7
+376.16150 3731.9
+381.77554 2047.4
+397.22137 6629.1
+406.40570 2444.7
+420.02835 2135.6
+436.19949 2719.7
+444.22610 2954.7
+469.73584 2347.4
+470.91302 23186.3
+471.24753 16711.6
+471.58167 5061.4
+483.74774 2782.0
+505.24042 7185.7
+511.22629 3490.9
+515.26019 12640.5
+515.76062 7632.3
+516.64203 2323.3
+519.93634 4061.2
+520.27112 3509.9
+522.27362 3016.9
+525.28082 13812.7
+526.28296 4864.6
+532.45453 6880.5
+539.22296 4243.7
+540.28967 4429.3
+549.28143 9222.5
+553.28302 73591.9
+554.28619 20757.2
+566.28217 4808.4
+567.29010 13171.6
+574.79639 7101.4
+575.30072 3320.3
+580.28040 3387.0
+585.30157 10042.1
+585.40131 2282.7
+588.79413 93727.8
+589.29535 57784.5
+589.79663 22245.2
+590.29572 7633.3
+595.96301 18689.1
+596.29852 16155.8
+596.63269 3033.4
+596.96820 2886.9
+607.28351 3539.1
+624.31213 6275.8
+630.39905 3016.6
+635.27960 7656.6
+636.28619 2879.9
+636.59180 2890.1
+638.36450 18775.7
+638.64258 2457.0
+638.81799 9813.9
+639.06842 8008.0
+639.32465 6669.1
+639.36023 6254.3
+643.07404 48511.2
+643.32410 61860.0
+643.57526 62069.5
+643.82648 27373.2
+644.07605 5455.3
+644.31628 2977.7
+644.64294 8726.8
+644.97760 6128.8
+645.05511 2605.8
+647.33008 85986.9
+647.58051 127698.4
+647.83136 93109.3
+648.08191 46618.8
+648.33069 8740.5
+648.58148 6491.3
+650.31903 31641.9
+650.65192 29385.6
+650.98639 17793.8
+651.31927 8469.6
+651.65460 4341.9
+652.30774 18971.3
+653.31567 3916.6
+657.34161 5292.1
+657.83936 3581.4
+664.82611 5595.4
+665.32611 7774.6
+666.36523 10646.5
+669.34283 2766.1
+673.82880 28200.7
+674.32892 16051.9
+674.82935 7993.8
+675.32520 2887.2
+676.66034 7126.5
+676.99658 4327.3
+677.33917 14251.2
+705.86597 68397.7
+706.36743 56621.5
+706.86890 23720.2
+707.36987 5534.2
+713.36157 13664.8
+714.36377 5170.0
+719.35022 4742.9
+724.69580 6550.2
+725.02930 23060.1
+725.36243 14658.9
+725.69299 4237.2
+730.69781 13121.3
+731.03467 18319.2
+731.36731 12149.2
+731.70349 3992.7
+746.86511 4126.6
+747.36133 4176.0
+748.62994 2517.3
+755.37219 2994.9
+755.88074 5110.8
+768.39404 11284.2
+768.72729 14742.7
+769.06232 10406.3
+770.40179 3681.5
+779.40045 50143.2
+779.90173 48110.6
+780.40454 20427.5
+780.90540 8190.8
+790.42328 12530.4
+791.42609 4528.5
+801.42828 10348.6
+802.42816 4369.4
+808.43359 9290.8
+809.44397 3616.7
+826.44745 9294.9
+827.44189 4919.1
+827.91522 4115.5
+828.41229 4004.9
+828.90320 2840.3
+829.42883 10751.2
+830.42426 6696.8
+830.75470 4213.0
+831.08807 6002.7
+836.42023 44714.0
+836.92340 38793.8
+837.42438 21993.9
+837.92938 8373.7
+857.09833 17333.0
+857.42908 29297.9
+857.76440 18182.8
+858.09595 9508.4
+858.45038 5026.3
+859.44965 3271.2
+862.77118 131097.3
+863.10504 212311.1
+863.43970 159131.7
+863.77368 78576.4
+864.10693 35056.1
+864.44202 7198.1
+873.06128 2631.0
+884.93005 18032.4
+885.43219 19136.2
+885.93451 8307.3
+893.44257 85042.2
+893.94397 90020.7
+894.44550 42481.5
+894.94684 17908.5
+895.44727 4343.3
+954.64899 2357.5
+960.97357 5028.4
+966.49841 4946.7
+966.96625 5611.8
+967.46680 3202.4
+974.97424 13794.9
+975.47595 17994.2
+975.98187 11221.1
+980.47308 2540.5
+988.90192 2502.2
+989.50378 3936.0
+1012.49249 3633.2
+1029.51233 10726.8
+1030.51489 6329.8
+1031.52161 5865.4
+1032.52344 4941.5
+1131.48962 2655.8
+1161.79626 2203.7
+1176.57788 4969.5
+1177.58777 4417.9
+1198.02112 11287.4
+1199.63196 2258.3
+1217.59546 5031.2
+1218.60266 4823.3
+1494.56555 2395.0
+1517.78125 2685.1
+1629.81885 2576.1
+1875.43335 2931.6
+1878.74731 3224.6
+1879.22961 13253.7
+1879.58569 73342.3
+1879.90454 12631.0
+1880.96533 3622.9
+1907.05457 27653.3
+1993.39575 2713.8
+S	3103	3103	559.0813471
+Z	4	2232.29409
+143.20563 594.3
+168.08220 540.7
+171.63870 696.8
+181.61948 579.7
+183.14978 878.6
+186.70929 575.7
+188.22791 688.0
+188.25095 825.3
+188.26036 1129.3
+188.27231 1205.3
+188.27959 1267.7
+188.29028 1510.8
+188.30595 1157.5
+188.31758 1112.0
+188.33223 759.9
+194.10097 510.1
+194.89091 559.6
+198.97664 871.4
+199.18059 17650.1
+199.31749 638.4
+199.33519 866.0
+199.34354 1333.9
+199.35823 2579.0
+199.43469 957.2
+199.45732 908.1
+200.18367 1863.9
+209.12869 3130.6
+226.15517 18783.3
+227.13925 1052.4
+227.15865 2001.1
+227.17549 7528.1
+233.58243 527.3
+244.16568 73115.4
+245.16927 9391.9
+250.29295 574.3
+254.14937 1014.6
+257.09546 1177.4
+267.24335 1101.8
+269.09421 625.2
+274.12204 2937.9
+280.17517 712.6
+295.23788 1900.4
+317.07739 559.7
+317.46054 611.6
+324.10205 593.0
+340.25952 3780.6
+341.00674 551.1
+345.15936 5607.6
+346.16162 1402.9
+350.28207 690.1
+367.34351 546.8
+387.20508 2416.5
+388.20819 592.6
+404.95984 590.4
+413.87347 697.0
+425.23950 15517.4
+426.24295 3879.6
+430.24652 918.6
+438.30817 752.8
+449.71167 660.7
+454.26590 773.4
+458.24234 2621.5
+464.40738 594.0
+468.78772 585.8
+479.03506 523.0
+500.29004 3224.4
+502.28638 4857.2
+502.53705 5558.0
+502.78812 4323.4
+503.03760 2966.2
+508.19180 548.5
+512.70111 567.8
+516.96600 1307.2
+517.29999 2212.2
+517.63599 1722.1
+526.30017 1038.3
+530.55084 681.1
+531.05536 850.3
+531.81116 3300.9
+532.30927 1604.5
+532.44592 1969.2
+532.79712 7042.3
+533.29840 3892.3
+533.80322 1922.1
+535.32263 3840.9
+536.32587 747.3
+560.78729 640.0
+571.32562 3411.4
+578.34192 2458.6
+578.67548 3199.8
+579.01306 1610.4
+579.99591 683.0
+582.65240 1282.9
+582.98553 2113.0
+586.30042 703.1
+587.82159 1690.4
+588.32666 37010.7
+588.66083 34934.7
+588.81970 1501.9
+588.99500 16557.4
+589.32922 7179.6
+589.66125 1814.2
+592.34369 712.3
+596.82697 4857.5
+597.32831 3590.2
+597.66125 637.1
+605.34607 1288.7
+605.81519 1089.8
+606.31854 761.4
+623.28894 695.2
+625.37622 726.2
+625.70953 1269.0
+626.01941 2453.7
+626.35699 2872.6
+626.68921 996.0
+630.39355 1156.2
+631.68500 20345.7
+632.01959 21670.7
+632.35394 13278.6
+632.68640 4992.8
+633.02032 1381.8
+640.32104 933.5
+649.41351 610.0
+652.03979 862.0
+652.37128 1404.4
+653.36920 18036.6
+653.86981 14631.9
+654.37476 7252.1
+654.87708 3942.9
+655.38342 924.1
+656.41968 1180.1
+657.71375 2352.1
+658.04181 10301.5
+658.37494 15501.1
+658.70953 9092.4
+659.04413 2725.4
+659.37799 967.7
+660.82489 625.0
+661.90784 1347.9
+662.36487 3479.1
+662.86499 2674.9
+663.15570 1061.2
+663.35925 732.0
+663.47461 583.3
+663.64056 952.4
+663.71649 219031.6
+664.05042 252901.5
+664.38428 155216.2
+664.61694 1164.0
+664.71808 75913.0
+664.94641 1376.4
+665.05164 25710.5
+665.21478 904.7
+665.28076 872.3
+665.38580 8271.6
+665.72107 3014.6
+665.87280 960.8
+666.41803 4075.3
+668.39673 9161.0
+668.80731 983.9
+669.37921 149781.5
+669.71313 180358.0
+670.04718 111745.9
+670.29535 958.6
+670.38043 47487.0
+670.62341 1308.1
+670.71533 17177.7
+670.88702 998.4
+670.95447 720.5
+671.04987 5826.1
+671.37958 1498.0
+671.55768 715.6
+676.66205 1221.4
+684.41132 8784.8
+685.41492 2995.8
+695.70929 648.8
+701.39679 788.9
+707.07465 8967.8
+707.40778 13474.7
+707.74213 7131.3
+708.07477 3123.5
+708.41724 871.0
+709.91083 15812.6
+710.41302 11529.1
+710.91559 5075.4
+711.41528 2117.0
+718.40436 2798.3
+718.90729 7389.7
+719.40765 5842.6
+719.91113 2208.2
+737.41541 1283.0
+742.94604 650.8
+745.42944 31280.6
+745.93085 24844.1
+746.43188 12029.9
+746.93365 4449.4
+747.43622 1044.7
+753.40552 1682.8
+763.20959 656.6
+774.94647 5417.0
+775.44751 4920.7
+775.94867 1669.1
+780.46265 4945.0
+781.46582 1160.5
+782.95789 1059.1
+783.45508 1614.3
+795.90100 1140.8
+797.49640 4092.1
+798.49866 1763.8
+816.44000 1708.9
+816.93347 4324.6
+817.43268 4032.3
+817.93292 2164.3
+824.97766 1368.5
+825.44476 61299.1
+825.94598 57212.3
+826.44659 28254.6
+826.94720 11673.9
+827.44641 2543.7
+831.49084 3666.4
+831.99274 3400.4
+832.49359 1690.7
+836.44421 849.7
+867.00867 11242.1
+867.50989 10728.0
+868.01190 4394.5
+868.51324 1166.0
+872.97687 1229.6
+873.47675 4247.6
+873.97455 4314.6
+874.47852 2413.4
+874.96045 832.6
+881.51691 892.4
+881.98627 163435.8
+882.48755 158409.1
+882.98889 92022.0
+883.36652 1297.3
+883.48932 36448.4
+883.86273 1118.5
+883.99060 10851.6
+884.48950 2645.1
+925.55109 2133.1
+926.55688 930.6
+927.52588 4114.9
+928.53088 2203.6
+930.33417 622.6
+937.52478 1834.9
+938.52795 12561.5
+939.02875 10802.9
+939.53223 7131.6
+940.02997 3000.8
+940.53772 1448.4
+947.02521 910.3
+947.52869 1710.8
+995.56116 868.3
+1028.08911 559.0
+1057.28406 793.0
+1064.58374 2217.6
+1065.59033 1590.8
+1066.61658 767.3
+1097.55481 3983.8
+1098.55420 2680.4
+1099.54810 1134.3
+1155.47791 633.7
+1192.64075 1033.5
+1193.64709 1012.2
+1198.00208 3192.1
+1210.63904 6085.6
+1211.64270 5337.4
+1212.64819 2152.6
+1225.64563 2025.7
+1226.65466 1462.2
+1305.72339 2034.0
+1306.72583 1345.7
+1323.71460 1044.8
+1338.73523 3242.5
+1339.73718 2910.1
+1340.76709 1009.4
+1418.79407 988.1
+1436.80188 757.7
+1437.84253 643.3
+1489.84827 911.2
+1611.08240 666.2
+1878.09961 868.4
+1879.06860 1722.9
+1879.60071 19906.0
+1880.12268 1169.3
+1880.36035 1160.2
+1882.44373 645.2
+1907.05774 7973.8
+1930.54846 1116.6
+1993.14587 664.9
+S	3105	3105	559.0862296
+Z	4	2232.31362
+143.30927 534.3
+168.10181 714.2
+170.08829 663.0
+173.41029 666.3
+174.79425 581.1
+175.35767 546.6
+188.20419 616.2
+188.24596 986.5
+188.26469 1695.9
+188.27451 1917.5
+188.28485 2023.5
+188.29543 1830.5
+188.30472 1752.2
+188.32291 1121.9
+199.18060 13835.0
+199.25243 773.6
+199.27127 965.2
+199.30959 699.6
+199.33185 819.3
+199.35097 2351.7
+199.36134 1763.4
+199.36929 1280.1
+199.37865 1251.3
+199.44672 805.2
+200.18431 1275.1
+209.12888 2384.4
+213.90401 628.2
+226.15512 14472.8
+227.13966 1300.8
+227.15852 1824.1
+227.17561 5064.9
+238.69258 680.7
+244.16562 57276.8
+245.16924 5904.0
+273.96848 637.3
+274.12219 2192.9
+277.25266 619.6
+295.23758 1694.8
+312.85568 587.1
+340.25934 3051.3
+341.18362 1008.2
+342.28113 566.7
+345.15939 3759.8
+348.41061 740.4
+351.61795 591.0
+378.45886 740.3
+387.20673 2693.8
+388.20810 786.6
+415.20105 868.0
+425.23929 12719.1
+426.24130 2113.8
+430.24799 848.7
+458.24359 2771.6
+492.76016 673.2
+500.28928 2044.2
+502.28595 4522.5
+502.53607 3372.2
+502.78662 2142.8
+503.04010 983.5
+516.96558 2064.2
+517.30060 1203.4
+526.30359 854.5
+531.80988 1707.5
+532.31158 710.6
+532.44086 2146.9
+532.79730 6334.5
+533.29852 3846.7
+533.80194 1600.8
+535.32471 1901.8
+536.33051 970.5
+571.32788 3298.6
+572.33173 1102.6
+578.33984 1572.4
+578.67578 1291.1
+579.36255 577.5
+582.65503 920.2
+582.98505 1267.9
+586.35547 834.8
+587.81897 1313.9
+588.32684 26174.9
+588.66052 28995.8
+588.99463 17200.1
+589.32935 5216.6
+589.66357 2609.2
+596.82782 2715.3
+597.33044 2142.7
+605.34406 1196.8
+625.37518 762.4
+625.71198 698.4
+626.01959 1760.2
+626.35388 2541.5
+631.68475 12772.7
+632.01959 11217.5
+632.35260 8178.7
+632.68610 3502.9
+633.01874 925.6
+639.39148 827.7
+652.86896 612.1
+653.36890 15108.9
+653.87006 10991.6
+654.37305 5306.6
+654.72198 921.8
+654.87604 2312.8
+655.38361 994.0
+657.72406 748.6
+658.04175 7372.5
+658.37549 7028.5
+658.70972 4697.2
+659.04272 1266.7
+661.91022 1159.0
+662.36554 2823.1
+662.86542 1623.2
+663.65625 888.3
+663.71594 103974.2
+664.05005 111779.8
+664.38409 67257.2
+664.71814 31510.6
+665.05194 11012.8
+665.38757 2324.2
+665.52954 706.2
+665.86420 834.5
+666.41754 2577.2
+667.42462 1094.8
+668.39783 7054.5
+669.37885 83292.8
+669.71289 94045.9
+670.04749 56179.0
+670.38049 28038.4
+670.71539 9096.3
+671.05066 2955.1
+671.22498 645.7
+671.55115 822.5
+671.87683 520.2
+676.65234 1260.5
+684.41113 5549.2
+685.41144 2195.2
+699.39325 699.8
+707.07428 6817.4
+707.40784 7729.5
+707.74219 5475.1
+708.07452 2896.9
+709.91083 11480.6
+710.41309 10412.5
+710.91467 3857.5
+718.40216 1810.2
+718.90674 4966.2
+719.40680 4195.0
+719.90778 1197.3
+736.92450 1076.7
+745.42889 25882.7
+745.93073 19897.7
+746.43140 9899.0
+746.93604 3331.0
+747.43317 763.5
+774.94647 5426.6
+775.45172 2964.4
+775.94977 2087.5
+780.46027 2582.5
+781.46210 1182.3
+795.89716 1070.6
+797.49713 2925.1
+798.49817 1203.2
+816.43628 1273.9
+816.93188 2862.5
+817.43329 4379.9
+817.93457 1904.1
+822.94708 705.0
+824.98615 646.8
+825.44434 45558.6
+825.94598 42375.9
+826.44672 24509.1
+826.94788 8256.8
+827.44635 2233.2
+831.49054 3006.7
+831.99036 2371.7
+832.49054 1793.5
+836.44165 1377.8
+863.74536 661.7
+867.00818 6436.8
+867.51141 6498.1
+868.01270 3173.4
+868.51428 928.6
+872.98199 1006.2
+873.47754 2969.3
+873.97723 2299.8
+874.38513 681.2
+874.48645 1627.1
+879.21924 713.6
+879.71631 754.8
+880.60944 795.7
+880.68835 804.2
+881.98602 119719.0
+882.48755 124197.5
+882.98859 69775.1
+883.48938 28297.0
+883.99084 8750.7
+884.49146 2256.5
+884.78094 1169.3
+884.99615 984.6
+885.28278 938.3
+888.01215 697.6
+925.55481 1832.6
+927.52631 2081.4
+937.52258 1549.5
+938.52899 8714.6
+939.02814 10226.9
+939.53119 6302.2
+940.03284 1774.9
+940.53235 849.7
+1057.25928 873.6
+1064.58972 1409.7
+1065.59766 1000.1
+1097.55457 2921.5
+1098.55640 1979.4
+1099.56592 784.3
+1125.70166 666.5
+1192.64160 1243.6
+1192.92590 591.3
+1197.97925 3347.2
+1210.63867 4380.4
+1211.63538 2854.9
+1212.63342 1474.6
+1225.64258 1173.0
+1305.72754 1269.1
+1306.73755 1140.6
+1338.73059 2752.3
+1339.73059 2875.8
+1340.75818 667.3
+1419.47192 694.0
+1419.79053 655.8
+1489.82764 754.7
+1645.36072 623.1
+1664.29224 671.9
+1877.99194 599.6
+1879.03967 1643.2
+1879.55701 20390.4
+1879.86816 1515.0
+1880.04431 1535.0
+1880.29773 598.3
+1906.85791 945.0
+1907.10327 7147.6
+1907.78650 630.5
+1930.58142 1219.5
+S	3106	3106	694.6100946
+Z	4	2774.40908
+183.23627 667.2
+188.26585 1668.9
+188.28389 2138.2
+188.29716 2055.6
+188.36726 563.3
+198.14810 547.3
+198.97626 801.3
+199.26920 778.3
+199.27849 666.0
+199.33131 640.1
+199.34329 999.4
+199.35413 2026.3
+199.36517 1102.9
+199.37503 1572.5
+199.38719 1189.0
+199.44165 861.0
+199.45313 768.9
+199.46307 679.4
+199.48524 562.3
+208.59111 655.1
+225.28702 697.2
+227.24347 692.1
+237.92032 585.6
+239.22530 557.4
+243.25601 603.1
+251.62595 567.4
+255.60966 610.6
+277.14468 985.2
+282.12769 544.0
+284.18698 557.6
+290.39175 560.9
+300.14163 540.7
+303.79544 603.1
+308.88361 647.1
+321.60730 551.7
+359.75644 717.9
+390.85031 601.7
+403.48303 612.2
+437.57312 613.5
+457.21124 570.0
+470.91077 1287.4
+471.24817 923.6
+482.62823 916.1
+492.15167 628.9
+515.76154 830.1
+525.28284 754.7
+530.45239 737.6
+531.05389 603.5
+532.43719 1749.7
+549.27557 1063.9
+553.28265 4789.6
+554.28687 1443.5
+555.91876 571.7
+588.79419 4965.8
+589.29602 3467.8
+589.79956 1436.6
+595.96790 1635.9
+638.35925 820.7
+639.05933 626.2
+639.37134 855.6
+643.07495 2504.5
+643.32397 3094.4
+643.57697 2970.3
+643.82654 1181.6
+647.32892 5835.3
+647.58112 10220.2
+647.83173 4704.8
+648.08167 3454.9
+648.33154 1523.6
+650.31635 1522.3
+650.64996 1784.1
+650.99109 1160.0
+665.30682 950.6
+668.84790 691.3
+673.83130 1767.6
+674.33020 907.2
+676.66736 1099.5
+677.00983 683.1
+705.86639 5294.6
+706.36646 4316.3
+706.86804 1337.0
+725.03882 692.9
+730.70245 1032.4
+731.03717 883.3
+768.72455 1000.1
+779.39923 3081.9
+779.90143 2258.9
+780.39850 1387.7
+790.42572 900.1
+795.89246 797.8
+813.93164 691.1
+824.98389 619.6
+836.41858 2182.9
+836.92401 2675.9
+837.42456 938.3
+857.09991 1469.6
+857.42743 1741.4
+857.76855 1746.9
+862.77167 12262.2
+863.10583 13311.0
+863.44000 9575.5
+863.77496 6060.0
+864.10938 1510.0
+884.91669 1395.4
+885.42084 996.2
+885.93817 960.3
+893.44116 6257.2
+893.94330 6017.7
+894.44635 2315.5
+894.94342 1008.8
+900.63788 637.1
+945.48932 1208.0
+974.95544 692.4
+1004.82440 699.4
+1021.09796 774.8
+1029.49463 655.7
+1118.45361 649.2
+1188.04065 675.9
+1197.97314 3291.4
+1205.98438 719.1
+1367.82141 600.6
+1519.93213 610.7
+1525.31262 620.8
+1565.43420 607.9
+1567.91870 646.7
+1668.40405 622.9
+1879.00916 1565.0
+1879.28381 2503.9
+1879.61230 19346.7
+1880.15649 1111.4
+1907.11023 7007.3
+1907.51697 693.1
+1930.50366 1111.6
+1995.11023 635.4
+S	3107	3107	559.8375746
+Z	4	2235.319
+141.85162 673.2
+168.95026 609.0
+170.39807 693.6
+171.60378 570.2
+183.21458 541.1
+186.43605 534.0
+188.26015 827.6
+188.26701 805.8
+188.27385 1055.2
+188.29004 1184.5
+188.30045 902.9
+188.32021 570.7
+191.68805 703.0
+193.02693 548.0
+198.97554 811.5
+199.18053 12567.3
+199.31799 618.1
+199.33463 663.7
+199.35860 2907.2
+199.37743 860.2
+199.45836 1036.0
+200.18404 1232.9
+200.69408 628.4
+209.12773 1097.3
+214.51720 567.4
+219.85558 599.3
+222.45532 529.3
+223.52168 535.8
+226.15506 12239.4
+227.13811 1039.1
+227.15823 1813.5
+227.17542 5950.3
+239.24042 614.6
+244.16550 53702.4
+245.16904 5986.4
+248.76553 558.1
+248.90974 551.1
+269.22318 714.5
+274.12262 1896.3
+278.00281 655.2
+280.40894 539.9
+283.87332 637.6
+295.23749 1393.0
+308.89838 609.7
+312.35605 551.9
+317.15298 680.4
+340.25891 2623.2
+345.15894 3108.9
+356.27313 563.3
+365.56934 550.6
+387.20624 1926.4
+409.09729 680.1
+420.28427 591.9
+425.23926 8921.6
+426.12900 662.2
+426.24133 1093.2
+426.45947 580.1
+426.54373 952.5
+427.53687 744.7
+430.24786 829.5
+438.31268 789.6
+458.24362 1516.8
+500.28958 2309.7
+502.28687 3356.6
+502.53674 4306.9
+502.78787 2721.3
+503.03842 1381.7
+516.96826 1597.2
+517.29932 948.1
+530.48785 548.9
+530.80743 838.0
+531.06000 895.1
+531.81110 1478.3
+532.30573 1101.2
+532.45795 2093.9
+532.79620 3979.7
+533.29742 2860.6
+533.79736 941.3
+535.28448 943.7
+535.32184 1338.7
+544.82013 578.7
+546.27380 558.6
+556.23505 624.1
+571.32666 2306.8
+578.67621 596.6
+582.65308 671.5
+582.98218 1124.5
+586.22742 522.3
+586.35065 643.6
+587.82013 2078.9
+588.32654 32999.0
+588.66052 29553.7
+588.81592 1171.6
+588.99487 18836.1
+589.32813 7682.3
+589.66199 1818.3
+591.34204 1252.4
+596.82587 4546.3
+597.32867 2677.0
+600.17773 619.5
+605.34637 780.4
+623.29187 564.1
+625.71271 774.2
+626.01709 2777.8
+626.35016 1978.2
+626.68927 1784.9
+630.40509 738.9
+631.49561 593.5
+631.68530 13680.9
+632.01935 13725.7
+632.35315 6940.6
+632.68927 2874.6
+653.36884 13065.0
+653.87000 10059.3
+654.37311 5111.1
+654.71155 726.3
+654.87653 2615.3
+655.05682 916.2
+655.37512 871.7
+657.71606 755.9
+658.04144 7121.6
+658.37433 8062.3
+658.70776 3881.5
+659.04572 2093.8
+661.96844 582.0
+662.36676 1927.9
+662.86633 1695.2
+663.37830 744.4
+663.71582 94815.4
+664.05017 111344.5
+664.38403 70426.6
+664.71802 40209.8
+665.05127 13791.3
+665.38593 4225.4
+666.41711 1981.9
+668.39691 4599.2
+669.37891 90429.5
+669.71289 96003.7
+670.04700 67503.2
+670.38055 33550.2
+670.71490 11432.2
+671.04877 3321.6
+671.37781 1260.1
+676.63275 775.5
+684.41168 5635.3
+685.41473 1837.7
+707.07471 7097.6
+707.40790 7747.5
+707.74170 6833.0
+708.07599 2147.9
+708.41364 945.7
+709.91071 11574.0
+710.41278 9507.0
+710.91528 2861.3
+711.41638 1269.5
+718.40460 1298.6
+718.90851 5337.8
+719.40704 3636.5
+719.90253 1429.9
+731.11285 662.1
+745.42902 17945.0
+745.93054 17085.2
+746.43268 7877.7
+746.93225 3315.9
+769.50671 622.4
+774.94781 3452.4
+775.44861 2829.6
+775.94672 967.3
+780.46375 2209.0
+781.45337 1092.2
+782.95905 875.8
+795.88708 1205.4
+797.49597 2441.0
+798.49377 1807.5
+816.93134 3554.9
+817.43433 1833.9
+817.94061 1190.3
+825.44427 42493.0
+825.94537 37589.9
+826.44672 19242.8
+826.94769 6862.7
+827.44788 2370.4
+831.48767 2684.4
+831.98889 1829.0
+867.00830 4912.8
+867.51074 4572.3
+868.01135 2832.9
+873.47443 2759.8
+873.98132 2116.3
+874.47064 1699.2
+879.20190 738.2
+881.98584 113615.3
+882.48724 113457.3
+882.98846 60581.1
+883.48956 23770.9
+883.98956 7372.8
+884.49048 1952.4
+920.16431 586.8
+925.55261 1479.4
+927.52844 2030.5
+937.51642 874.0
+938.52753 7695.7
+939.02930 6429.7
+939.52960 3735.0
+940.03741 1130.0
+995.57007 675.8
+1019.62097 654.2
+1057.23767 1143.3
+1064.59241 957.8
+1065.59644 689.9
+1097.55420 1757.2
+1098.55444 1661.0
+1123.24805 568.8
+1168.47607 572.2
+1188.02295 748.8
+1198.02148 3018.8
+1208.17175 699.1
+1210.64148 3963.7
+1211.63501 1748.8
+1212.63635 1338.4
+1241.93091 655.2
+1262.63892 643.7
+1305.72131 991.9
+1338.73230 1730.1
+1339.73413 1342.8
+1418.82861 678.3
+1436.78687 640.4
+1489.68103 618.0
+1557.95837 576.4
+1692.15210 655.0
+1694.68188 682.6
+1776.97351 720.9
+1870.23291 715.7
+1870.43213 573.4
+1876.76990 955.8
+1877.38940 646.9
+1878.90100 831.7
+1879.51428 19351.5
+1879.77051 3302.3
+1880.32971 648.5
+1907.06775 7561.5
+S	3109	3109	559.0829346
+Z	4	2232.30044
+146.91765 742.3
+151.96533 543.9
+152.01285 684.9
+157.59796 575.7
+157.70889 565.5
+158.97934 607.2
+165.75693 702.8
+188.24768 1358.9
+188.25476 1339.5
+188.27135 1832.4
+188.28232 2040.7
+188.29901 2050.3
+188.31134 1582.4
+188.31891 1360.8
+188.38162 546.0
+188.38853 581.6
+188.73857 529.7
+199.18045 14621.3
+199.26273 766.4
+199.27695 805.8
+199.28868 779.9
+199.30038 695.9
+199.32774 1181.3
+199.34538 1204.6
+199.35847 1986.7
+199.37506 2054.3
+199.43327 795.8
+199.45555 658.7
+199.47493 764.0
+200.18405 1714.3
+200.82864 552.7
+209.12805 1942.3
+210.24097 554.7
+213.26755 561.9
+221.87984 539.4
+226.15498 15040.7
+227.13974 994.1
+227.15901 1105.0
+227.17570 5252.7
+243.08130 653.6
+244.16556 56053.4
+245.16911 6790.6
+254.15042 905.0
+254.94191 552.5
+257.09634 974.1
+265.73499 739.3
+274.12219 2021.1
+274.49313 592.6
+283.92880 592.9
+295.23886 1389.9
+308.89056 696.2
+339.24115 770.3
+340.25909 2873.4
+341.17850 568.3
+341.66071 569.1
+342.25937 669.8
+345.15909 4050.4
+349.52649 542.7
+358.58624 568.5
+371.88297 625.3
+382.06766 639.9
+387.20624 2394.0
+398.05054 765.3
+415.19986 846.4
+425.23920 10830.4
+426.24258 2898.7
+427.53378 673.0
+431.25125 794.0
+439.30984 713.1
+458.24246 2798.6
+472.25577 572.5
+472.29492 732.7
+473.59827 609.2
+499.55737 569.4
+500.28870 2642.7
+501.29041 665.3
+502.28546 3888.5
+502.53726 4293.8
+502.78772 2535.6
+516.96527 1637.4
+517.30261 813.7
+531.81073 1724.0
+532.31262 770.1
+532.46362 1664.2
+532.79761 6662.7
+533.29901 3649.8
+533.79980 1526.7
+535.32404 2503.4
+549.14148 756.8
+571.32684 3780.3
+578.67743 919.2
+582.24902 663.3
+582.65765 1338.6
+583.32196 983.4
+585.84509 982.4
+587.82269 1384.9
+588.32672 29199.9
+588.66052 26748.3
+588.81470 1432.1
+588.99469 17386.8
+589.32861 5852.3
+589.66290 2379.6
+596.82623 3656.9
+597.32947 2379.2
+597.83057 1157.5
+605.81750 1072.7
+620.34924 769.8
+626.01990 1684.2
+626.35535 2079.5
+626.68994 1210.5
+630.39105 1108.6
+631.68494 11403.9
+632.01941 12681.8
+632.35266 7693.0
+632.68555 2961.3
+633.02460 1201.8
+637.91150 613.9
+640.79089 587.0
+653.36871 15991.4
+653.86981 9451.3
+654.37415 6357.9
+654.87762 2379.8
+657.71210 2091.0
+658.04108 7881.8
+658.37549 9504.9
+658.70880 4905.2
+659.04193 1291.2
+662.24432 1200.0
+662.36615 2554.5
+662.86743 1875.4
+663.15912 764.2
+663.36975 966.0
+663.71594 100067.1
+664.05011 111005.1
+664.38403 63777.6
+664.71814 31974.5
+665.05182 10905.7
+665.38684 2754.1
+665.52612 600.6
+665.85120 936.4
+666.19043 724.1
+666.41785 2424.3
+667.42230 920.0
+667.87952 1012.0
+668.39691 7543.4
+669.37903 87133.1
+669.71295 101415.6
+669.86664 1149.1
+670.04730 58617.1
+670.38025 26598.7
+670.71558 8918.2
+671.04877 2843.6
+671.21704 869.4
+671.54980 830.8
+676.63867 879.6
+684.41071 6221.7
+685.41431 2563.2
+704.02112 690.0
+707.07385 8368.2
+707.40924 7709.7
+707.74353 4977.3
+708.07733 2708.0
+709.91187 12143.4
+710.41235 9255.2
+710.91223 4523.4
+711.41394 896.6
+718.40747 1079.0
+718.90704 5388.8
+719.40802 3706.4
+719.90912 1936.9
+737.42303 1312.0
+745.42950 24711.3
+745.93079 20432.1
+746.43256 9217.1
+746.93304 2510.7
+753.40369 1073.6
+774.94635 4959.2
+775.44714 3637.9
+775.94879 2482.1
+780.45972 2706.9
+781.46350 1486.2
+795.87927 1082.0
+797.49658 3060.3
+798.49921 854.8
+816.93414 3414.2
+817.43787 3218.3
+817.93317 1555.5
+825.44446 44257.5
+825.94604 44098.5
+826.44647 22554.7
+826.94684 7905.6
+827.44635 2349.6
+827.96832 718.6
+831.48651 2104.7
+831.99274 2946.5
+836.44476 1085.4
+867.00793 8208.7
+867.51147 6057.0
+868.01416 3342.6
+868.50885 1448.0
+872.98462 1103.6
+873.47723 3273.6
+873.97803 3419.7
+874.46924 1795.7
+879.71735 1181.7
+881.98615 119654.2
+882.48749 118363.4
+882.98865 70543.6
+883.48975 30082.7
+883.99048 8915.7
+884.48749 1277.6
+884.75281 1214.1
+885.27325 980.0
+925.55298 1203.9
+926.54492 1004.5
+927.52802 2355.1
+928.52435 1235.7
+929.55084 627.3
+938.52863 8487.2
+939.02954 8637.7
+939.52985 5943.3
+940.02863 2223.3
+940.52899 1061.9
+971.97626 551.2
+1036.55359 572.8
+1049.86182 683.1
+1064.59290 1194.9
+1065.59106 1356.8
+1097.55457 3187.5
+1098.55420 1622.5
+1099.56116 853.6
+1186.58191 601.7
+1198.03210 3166.7
+1210.64087 5261.1
+1211.64160 3077.4
+1212.64185 1901.4
+1213.64746 818.6
+1225.65186 1276.6
+1226.65076 955.0
+1305.73193 1368.9
+1306.72351 969.0
+1323.72852 796.1
+1324.66345 695.3
+1338.72998 2410.3
+1339.73083 1068.2
+1379.01721 598.0
+1590.13257 724.4
+1839.05933 834.2
+1852.92188 589.2
+1870.18958 882.7
+1876.25110 934.6
+1878.43408 783.8
+1878.68152 880.6
+1879.12061 1884.3
+1879.53809 19840.2
+1879.90979 2247.3
+1880.58289 995.2
+1881.63928 707.2
+1902.51831 646.3
+1907.13208 7209.2
+1930.51917 985.1
+S	3110	3110	559.8348246
+Z	4	2235.308
+145.69832 560.6
+147.51399 629.7
+152.66039 664.4
+157.59096 599.4
+159.55807 555.0
+161.86224 628.3
+169.13919 593.9
+180.29964 571.2
+180.43155 538.8
+188.22025 624.6
+188.25638 1392.5
+188.27455 1990.9
+188.28224 1964.1
+188.28807 1944.3
+188.29922 1781.5
+188.30901 1709.9
+188.33374 709.5
+192.23425 612.8
+198.97026 985.2
+199.18059 11078.3
+199.27402 780.2
+199.34631 1263.6
+199.35559 1529.7
+199.37177 2268.0
+199.41679 910.8
+199.46889 919.5
+200.18384 1699.1
+203.78906 598.0
+209.12843 1895.1
+226.15492 11459.4
+227.15793 1069.1
+227.17572 4580.1
+236.27530 677.9
+238.69005 793.9
+244.16548 45928.9
+245.16901 5553.6
+255.26933 805.8
+271.96021 631.0
+274.12186 1287.5
+291.27078 505.9
+295.23859 837.0
+340.25995 2781.8
+345.15918 1958.2
+350.29068 899.6
+360.05380 618.5
+372.94571 576.2
+387.20541 1416.8
+403.77728 607.2
+425.23886 7036.7
+426.24390 1165.8
+427.50702 1071.9
+430.24481 933.6
+438.30521 627.0
+458.24149 1078.2
+500.28909 2476.1
+501.29254 980.9
+502.28635 3387.6
+502.53665 3254.0
+502.78717 2503.0
+509.93777 576.9
+516.04938 622.8
+516.96887 1325.3
+517.30206 1154.7
+526.30457 644.2
+531.80603 1165.9
+532.30908 698.1
+532.47632 2209.5
+532.79626 4109.3
+533.30023 2882.0
+533.80090 1361.5
+535.32312 1109.2
+571.32666 2747.6
+572.33276 770.8
+578.67474 1145.1
+582.32758 646.9
+582.65216 804.8
+585.83167 566.4
+586.35376 631.9
+587.81848 1184.9
+588.32648 27446.1
+588.66040 26626.6
+588.81055 626.1
+588.99451 16821.1
+589.32959 6795.2
+589.66248 1923.9
+596.82648 3852.8
+597.32886 3124.8
+605.35052 570.1
+626.02057 2602.2
+626.35797 1481.5
+631.68445 10165.6
+632.01910 12418.0
+632.35272 6497.5
+632.68542 3073.1
+633.02100 1229.0
+653.36884 12031.1
+653.87000 8533.5
+654.37445 4086.2
+654.87341 2085.7
+655.37592 875.9
+657.71545 1041.4
+658.04193 6486.1
+658.37512 8201.7
+658.70850 3845.6
+659.04199 1508.1
+662.36536 2528.0
+662.86591 2107.7
+663.71588 93135.2
+664.04999 107056.8
+664.38397 75188.4
+664.71783 31198.1
+664.96564 508.9
+665.05225 13315.6
+665.38568 2774.9
+665.53259 775.8
+666.41711 1907.8
+668.39819 4747.4
+669.37878 77099.0
+669.71289 96113.3
+670.04718 63073.5
+670.38043 29836.4
+670.71515 10542.1
+671.04742 2368.9
+671.38770 685.6
+676.66248 1455.8
+684.29590 600.3
+684.40948 5445.5
+685.41547 2066.3
+699.39771 940.1
+707.07336 5643.8
+707.40747 6727.4
+707.74231 6007.0
+708.07489 2178.3
+708.41125 1587.8
+709.91064 9889.4
+710.41260 7741.3
+710.91290 2299.7
+711.41388 963.4
+718.40411 1333.6
+718.90570 5504.6
+719.40692 3903.4
+719.91040 1613.8
+736.91193 810.2
+737.41113 617.5
+745.42914 18644.8
+745.93054 15364.2
+746.43060 6444.2
+746.93585 1944.6
+774.94641 3195.1
+775.44696 1842.3
+775.94287 847.0
+777.19318 728.0
+780.46411 2291.0
+781.46503 1225.8
+797.49615 2105.0
+798.49176 1057.5
+816.93121 1243.2
+817.43439 2006.0
+825.44415 38572.9
+825.94562 30921.4
+826.44666 17270.1
+826.94708 6395.1
+827.45190 1752.9
+831.48975 1891.8
+831.99048 2125.6
+855.18066 629.0
+867.00836 4850.8
+867.51141 4475.8
+868.01276 1653.7
+869.50226 647.6
+873.47540 2982.1
+873.97742 2353.7
+874.47424 1189.4
+881.98602 92768.2
+882.48718 99069.2
+882.98853 56165.0
+883.48914 20957.3
+883.99036 6082.6
+884.48663 1458.0
+925.55554 1020.2
+926.55127 787.6
+927.52545 1520.8
+928.52435 684.4
+938.52826 6945.2
+939.02911 6198.9
+939.53302 3204.7
+940.03326 1560.0
+983.08893 616.6
+1010.90674 658.3
+1064.58838 888.5
+1097.55640 1290.1
+1198.05725 3660.0
+1210.63977 2881.9
+1211.64099 1876.1
+1212.63135 676.0
+1225.65552 881.8
+1266.96533 556.5
+1297.52136 654.3
+1338.72717 1171.0
+1355.19250 595.7
+1409.89453 666.2
+1435.27173 653.7
+1547.61108 924.5
+1667.07996 700.1
+1870.23853 654.5
+1872.92224 737.1
+1877.32458 626.6
+1878.34961 1040.3
+1879.59192 20096.9
+1879.97070 926.1
+1891.30920 706.1
+1907.10156 7574.6
+1919.03906 881.0
+1959.03931 713.1
+1983.48096 647.4
+S	3111	3111	694.6060671
+Z	4	2774.39297
+184.05696 623.2
+188.24513 604.5
+188.26393 811.1
+188.27252 1178.2
+188.28009 948.2
+188.28568 1086.7
+188.29521 1216.8
+188.30519 1068.3
+188.31912 918.2
+198.97363 918.5
+199.24986 766.1
+199.33080 613.8
+199.33752 669.4
+199.34645 1272.8
+199.36256 2014.7
+199.38116 763.4
+199.39644 587.2
+199.45891 665.4
+202.35323 563.5
+237.49629 618.9
+254.40657 762.1
+257.02255 694.9
+265.56848 555.6
+271.63965 675.5
+280.18915 645.5
+299.51913 867.6
+315.50046 635.7
+315.51550 619.1
+337.64874 675.3
+350.27924 635.9
+355.09711 663.2
+395.05499 587.0
+500.65253 643.8
+532.48383 1607.5
+542.40643 673.8
+551.45270 620.9
+558.44434 731.7
+630.42407 755.8
+647.58203 1037.0
+655.22174 602.5
+676.35754 634.6
+731.14429 771.4
+776.10266 631.3
+781.08942 759.0
+795.89038 955.3
+863.10120 873.5
+1019.70709 1138.4
+1028.36365 738.5
+1044.85254 710.0
+1057.27649 742.0
+1198.07532 3043.5
+1206.99622 620.7
+1218.92871 643.0
+1461.94678 651.6
+1878.83643 947.1
+1879.59863 20417.7
+1880.40723 810.1
+1882.27844 560.4
+1882.41846 618.1
+1907.05640 7674.5
+1918.61182 621.0
+1930.67029 980.3
+1991.96851 733.5
+S	3113	3113	1880.05940793
+Z	2	3758.271
+Z	3	5636.903
+515.56628 727.0
+532.54199 1374.6
+549.11084 964.8
+549.16962 701.4
+561.00555 587.6
+731.05981 860.3
+783.73816 678.7
+865.40289 630.0
+1020.93695 702.6
+1057.29578 1023.3
+1106.92920 814.2
+1129.91150 651.2
+1198.20105 2744.9
+1310.06653 719.0
+1438.55859 650.0
+1456.17651 718.7
+1675.23938 641.0
+1878.35583 779.7
+1879.04065 2181.1
+1879.62842 18795.6
+1879.93945 1936.3
+1880.19861 1647.9
+1880.40344 775.4
+1880.90820 917.3
+1907.09058 7572.0
+1907.37134 1000.3
+1929.68848 621.1
+1930.42224 1104.8
+1972.52002 641.4
+S	3114	3114	1907.4988246
+Z	2	3813.15
+Z	3	5719.221
+525.85876 569.8
+532.51910 1908.1
+549.10657 741.9
+550.94244 570.4
+567.99329 585.4
+610.82300 607.9
+676.64368 950.4
+795.87372 1149.9
+957.78650 606.5
+977.72021 623.7
+1019.67773 1010.4
+1050.24670 722.3
+1057.26135 866.0
+1154.67554 581.3
+1198.16211 3237.4
+1350.98389 687.9
+1525.28955 1053.6
+1587.45044 665.9
+1630.44238 763.6
+1776.87305 839.8
+1876.15881 743.5
+1878.37769 1045.3
+1878.73315 1272.0
+1879.07068 1630.9
+1879.54358 19607.0
+1879.97461 1573.9
+1880.33960 1208.6
+1880.70508 1058.5
+1881.14307 767.3
+1907.09888 7485.6
+S	3115	3115	730.833407933
+Z	3	2189.225
+Z	2	1459.819
+190.08237 611.0
+198.97557 760.7
+199.25728 880.7
+199.35602 2599.7
+199.36597 1140.7
+199.45189 640.8
+208.99002 676.6
+213.01031 521.4
+214.49211 596.7
+219.48190 637.6
+232.13959 822.6
+232.24666 555.5
+255.10571 554.1
+260.39645 602.4
+260.75629 562.6
+280.15369 650.6
+304.09570 743.4
+305.94980 618.5
+308.86841 630.9
+319.17136 1280.8
+379.02100 613.9
+379.20834 7350.1
+380.21054 1055.9
+382.75320 715.8
+405.33768 634.9
+408.58987 616.3
+414.24991 720.0
+432.25613 2354.0
+478.27542 13102.1
+479.28067 2415.0
+497.27032 694.8
+507.25449 1658.8
+513.30292 923.5
+524.28363 2021.9
+525.26245 1939.5
+531.32214 2404.0
+532.50696 2032.4
+542.29169 1384.2
+549.09271 818.0
+577.34393 6842.6
+578.34930 1624.5
+600.28265 626.6
+609.84674 1518.8
+610.34686 1492.4
+613.84766 1484.6
+630.39258 2710.4
+637.36963 1028.1
+638.34717 2358.7
+676.64124 810.4
+690.42834 4097.5
+691.43048 1241.4
+712.01361 782.7
+712.38763 756.3
+731.04657 923.0
+770.39990 942.7
+779.85541 1362.2
+795.89905 740.2
+803.99091 758.5
+805.45441 11961.3
+806.45776 4628.2
+825.31134 617.4
+828.94849 565.2
+829.39404 2359.8
+829.89441 1482.6
+830.13434 782.7
+866.46906 1199.5
+869.46533 764.8
+869.92029 777.3
+878.92401 2799.7
+879.42664 2213.4
+879.93170 1273.4
+883.49103 659.8
+916.53760 846.4
+918.53784 17170.7
+919.54132 6317.3
+920.54230 1632.0
+925.24597 716.8
+926.46130 946.8
+935.46637 3478.3
+935.83020 636.1
+935.97089 1830.4
+936.48059 913.0
+947.50677 758.5
+963.97687 2505.5
+964.49451 2408.5
+965.53064 2327.7
+966.52399 820.9
+967.42352 4614.7
+968.42114 1942.6
+980.40338 627.7
+982.55310 2870.1
+999.01752 839.2
+1019.70392 754.8
+1029.61462 1042.6
+1030.60974 1024.0
+1031.62000 5324.2
+1032.62061 2034.0
+1056.25134 694.0
+1057.23694 785.0
+1064.61206 1114.5
+1081.62390 1988.5
+1082.63391 1617.8
+1086.62988 844.8
+1118.65125 1651.3
+1142.31616 689.6
+1198.14038 3474.5
+1207.02783 663.9
+1211.68579 983.0
+1228.70288 1317.7
+1360.60205 643.7
+1481.53918 697.0
+1776.87463 1268.9
+1870.47949 742.6
+1875.93054 1145.9
+1879.07861 1986.1
+1879.53748 19899.9
+1879.91992 1734.4
+1880.94177 682.8
+1907.11011 7427.6
+1909.82214 717.7
+1930.40222 938.6
+1959.58704 752.1
+S	3117	3117	1880.0068246
+Z	2	3758.166
+Z	3	5636.745
+532.51593 2130.3
+549.15161 552.9
+553.43781 549.9
+559.68127 626.6
+569.22449 607.8
+572.60352 772.1
+619.77698 659.0
+630.41370 684.4
+632.92169 539.6
+638.52130 698.9
+669.63324 649.4
+676.59613 602.2
+676.67096 1171.9
+795.88391 1168.1
+929.89539 644.5
+974.50049 537.6
+1156.49036 637.1
+1188.22314 639.1
+1198.15930 3023.8
+1450.55115 628.4
+1646.61719 668.9
+1697.64001 749.0
+1864.59668 648.4
+1876.19287 768.8
+1879.32397 4817.3
+1879.63440 19208.9
+1879.94458 3586.0
+1881.54138 747.3
+1907.00635 6961.7
+1907.28552 962.5
+1918.90576 760.8
+1930.57971 845.4
+S	3118	3118	1907.5568246
+Z	3	5719.395
+Z	2	3813.266
+532.51331 2092.1
+541.52136 617.0
+630.44684 713.0
+676.66138 1020.5
+714.89435 698.6
+1012.88977 571.7
+1057.27783 668.3
+1117.21057 602.5
+1159.03540 572.3
+1198.15051 3195.5
+1386.59094 667.4
+1525.50281 985.7
+1557.87610 665.3
+1589.85620 836.5
+1652.38318 598.4
+1695.75903 808.2
+1870.32520 750.3
+1876.14563 760.6
+1878.16858 1473.5
+1878.60022 1221.1
+1879.29187 3308.9
+1879.58362 19920.7
+1880.37842 958.1
+1880.56946 1033.9
+1881.09814 1063.1
+1907.08276 7547.8
+1930.69507 955.5
+S	3119	3119	1198.59999127
+Z	2	2395.352
+Z	3	3592.525
+317.34058 724.1
+350.27872 755.7
+365.01678 579.3
+365.80832 656.7
+532.49158 1904.5
+581.42841 602.9
+630.39136 885.2
+676.65918 1065.5
+795.87964 973.4
+797.41174 760.1
+798.82465 638.6
+934.25977 613.1
+1019.66333 906.8
+1059.43884 627.2
+1198.09717 3647.2
+1302.26978 725.4
+1302.88721 604.2
+1431.88928 648.1
+1525.39893 700.4
+1676.83228 853.7
+1687.19385 607.9
+1808.52881 603.5
+1870.36218 1111.8
+1878.37146 721.9
+1878.83765 868.0
+1879.17554 2013.0
+1879.57422 19891.5
+1879.99609 1501.8
+1880.41321 986.2
+1880.82568 953.2
+1907.04858 7351.4
+1919.03003 867.0
+S	3121	3121	1879.94340793
+Z	2	3758.039
+Z	3	5636.555
+532.56860 1759.5
+572.74329 751.9
+573.59387 816.8
+676.63940 756.8
+693.13971 602.0
+923.58667 625.2
+950.75708 768.5
+1057.23572 765.8
+1109.35779 723.4
+1136.29065 594.8
+1195.36304 647.8
+1198.15942 724.5
+1198.27136 2873.5
+1328.35303 598.2
+1456.57959 579.8
+1460.45667 601.3
+1652.34253 694.1
+1877.79541 879.5
+1878.58997 952.7
+1879.08252 2839.4
+1879.54553 19262.9
+1879.98462 2783.5
+1880.58386 990.2
+1907.10303 7419.5
+1930.60022 1032.8
+S	3122	3122	1907.50599127
+Z	2	3813.164
+Z	3	5719.243
+532.54224 1723.6
+540.98859 593.0
+630.38190 825.7
+646.01501 601.0
+676.63348 875.0
+775.37573 602.4
+795.88843 883.7
+899.12439 577.1
+973.44739 621.3
+1057.22949 749.8
+1140.18127 781.6
+1198.21936 2833.9
+1438.60645 602.7
+1525.34375 660.3
+1575.73169 609.7
+1612.24646 593.9
+1622.83191 622.7
+1671.83459 796.1
+1777.01563 800.2
+1878.69678 835.0
+1879.50439 19289.6
+1879.77893 3386.6
+1882.10413 561.2
+1907.11572 7457.9
+1998.77747 734.9
+S	3123	3123	1198.54499127
+Z	3	3592.36
+Z	2	2395.242
+350.28476 728.3
+409.15643 563.6
+442.61368 560.6
+461.39594 713.9
+532.52307 1998.7
+540.38092 656.8
+629.19879 621.4
+676.68408 1288.6
+737.84467 600.9
+850.34698 616.6
+960.69635 662.6
+1021.17834 804.1
+1100.91797 569.5
+1197.99084 748.0
+1198.17419 3131.1
+1384.73059 707.4
+1525.48779 759.6
+1646.02625 682.1
+1800.20654 699.6
+1802.91235 677.5
+1877.11194 815.5
+1878.88794 1724.5
+1879.36938 3295.9
+1879.64026 19099.4
+1880.45349 1471.0
+1880.91272 579.7
+1907.08569 7376.7
+1930.62671 1003.3
+S	3125	3125	848.378407933
+Z	2	1694.909
+Z	3	2541.86
+225.40625 622.4
+232.94160 503.7
+234.96181 549.5
+234.96642 539.0
+235.52919 625.0
+238.68697 612.8
+268.28412 551.7
+280.18225 764.6
+286.54752 574.6
+295.09341 542.8
+343.16422 1245.9
+363.46094 608.0
+394.29468 658.3
+405.02533 621.9
+456.24789 4460.2
+464.93628 660.7
+474.25809 2216.4
+479.97800 697.7
+532.53223 1698.2
+549.15729 809.5
+559.94873 601.5
+561.28955 2032.5
+561.78809 1041.1
+573.32385 1143.6
+630.41669 756.1
+668.06213 636.7
+676.61139 691.4
+676.66516 1117.2
+680.55389 686.5
+710.35620 2821.4
+711.36011 747.7
+731.13202 876.3
+776.69934 1507.3
+795.90503 1255.3
+809.72681 2436.9
+816.06927 816.1
+825.82495 776.8
+829.40778 639.9
+882.69806 783.0
+944.29480 808.6
+948.28619 649.7
+1115.60291 694.3
+1121.56689 19633.7
+1122.57043 10209.5
+1123.57178 3777.3
+1173.57092 887.8
+1198.19104 3580.3
+1200.57947 710.0
+1223.07813 1263.9
+1223.58020 977.5
+1361.21826 798.6
+1499.89160 608.8
+1560.42468 826.8
+1625.43115 778.0
+1877.82544 646.7
+1878.57751 1461.5
+1878.85803 1000.5
+1879.59778 18646.6
+1880.03418 2872.7
+1880.88953 796.8
+1882.14111 766.1
+1907.11340 7218.4
+S	3126	3126	808.1988246
+Z	4	3228.764
+233.55038 664.2
+235.74765 617.6
+238.68867 562.0
+249.59689 566.9
+258.21072 632.6
+282.33215 662.8
+317.32809 571.2
+326.98761 603.7
+329.21582 595.6
+364.37457 631.6
+382.98300 555.3
+401.41483 692.7
+427.50623 795.2
+437.71536 638.8
+493.75534 648.3
+498.71475 586.6
+532.48511 2263.0
+533.41559 548.4
+544.31378 685.2
+576.26343 635.6
+585.34210 907.9
+630.34448 727.8
+676.64868 951.8
+678.93787 733.4
+698.40887 584.9
+731.06274 748.7
+731.52765 617.9
+777.40485 797.2
+857.97058 761.2
+872.04773 819.2
+900.98254 650.4
+909.63715 638.2
+996.18793 1104.2
+1026.11377 755.0
+1035.49646 612.9
+1041.59436 641.8
+1198.08459 3510.9
+1441.49756 622.4
+1519.63000 624.4
+1874.58179 722.2
+1876.14758 1030.1
+1878.77698 1266.0
+1879.19055 1287.5
+1879.56152 18970.1
+1880.19495 1183.7
+1880.53601 1073.4
+1881.83838 990.0
+1906.82349 1004.0
+1907.11243 7297.5
+1907.42432 1413.7
+1930.42029 910.6
+S	3127	3127	1907.56740793
+Z	3	5719.427
+Z	2	3813.287
+532.52332 1912.4
+549.14227 1007.5
+572.98920 576.4
+630.38184 773.7
+676.65564 1151.3
+680.26764 526.0
+682.25122 619.9
+720.91614 566.0
+732.11084 617.1
+781.18195 669.9
+795.86810 942.3
+837.16364 573.9
+842.92926 615.5
+892.58441 653.1
+950.36511 653.2
+972.47833 558.8
+1019.69189 748.9
+1032.62610 649.7
+1057.27161 1037.3
+1058.44556 669.1
+1198.16809 3576.0
+1233.17615 637.7
+1237.51892 676.0
+1301.35767 650.5
+1321.92419 653.5
+1466.43152 717.1
+1664.09082 642.0
+1774.37622 820.7
+1795.95032 646.4
+1829.98523 655.4
+1870.47717 788.6
+1876.02515 712.3
+1879.03284 1656.3
+1879.59192 19346.6
+1880.07678 1210.4
+1880.61841 675.4
+1882.40686 709.3
+1906.81116 952.2
+1907.09741 7373.0
+1930.53333 819.9
+S	3129	3129	1880.01899127
+Z	3	5636.782
+Z	2	3758.19
+524.36804 627.9
+532.51154 2140.5
+580.55463 705.3
+588.40906 545.6
+605.19263 599.9
+635.18115 617.8
+676.67487 915.3
+746.35638 684.8
+785.89496 741.1
+857.76532 631.3
+1020.97626 668.3
+1188.29236 1014.3
+1198.14294 3297.9
+1672.98389 694.6
+1860.11658 727.0
+1873.00879 788.3
+1877.12183 725.6
+1878.66040 1609.6
+1879.19226 2809.8
+1879.61316 19125.3
+1880.03088 2668.5
+1880.62146 1602.9
+1881.61450 925.9
+1907.07703 7286.2
+1930.53967 652.1
+S	3130	3130	1907.5558246
+Z	3	5719.392
+Z	2	3813.264
+532.51996 1814.1
+533.48035 651.3
+558.31891 638.0
+758.32281 618.8
+778.16040 677.0
+795.88293 1189.3
+830.87457 582.0
+915.99121 732.7
+1198.16052 3409.7
+1295.39453 590.8
+1452.41858 639.4
+1875.43054 545.5
+1879.02625 1870.1
+1879.61694 19376.2
+1879.89075 3131.0
+1880.20105 1452.5
+1881.26917 807.4
+1907.12451 7185.6
+1910.37073 666.4
+1919.05103 721.2
+1930.53223 860.7
+S	3131	3131	1198.59940793
+Z	2	2395.351
+Z	3	3592.523
+326.05698 594.8
+332.81210 602.4
+342.28162 634.5
+347.38620 698.1
+350.28827 787.0
+427.54941 877.1
+471.89056 654.6
+506.37079 757.0
+532.54950 1584.7
+573.08771 850.2
+573.56018 646.1
+676.69177 751.2
+747.56769 693.4
+795.86676 897.0
+823.64758 587.7
+903.37939 677.6
+915.42444 587.2
+1018.52521 777.3
+1058.21118 731.1
+1198.23022 3147.5
+1489.53931 731.3
+1875.76697 716.7
+1876.21899 940.0
+1877.53845 813.4
+1878.72742 1365.4
+1879.39709 4007.4
+1879.67615 18817.4
+1880.61487 1624.5
+1880.88562 1532.3
+1881.25146 710.4
+1881.75659 851.4
+1907.09558 7662.6
+1918.98779 811.4
+1930.64197 1021.3
+S	3133	3133	1879.9828246
+Z	2	3758.118
+Z	3	5636.673
+532.53333 1734.5
+549.19543 954.8
+630.45441 841.4
+652.38287 624.9
+676.66248 1051.0
+678.43890 558.1
+715.80823 600.6
+726.84039 665.9
+795.89587 1378.4
+924.39728 928.3
+981.33453 614.4
+1020.80450 627.6
+1066.93298 627.0
+1171.45459 726.9
+1198.19434 3205.6
+1295.51404 659.4
+1392.22290 683.8
+1556.52026 634.5
+1759.81616 650.7
+1876.05322 812.8
+1878.58276 622.4
+1878.72766 861.9
+1879.14648 942.3
+1879.60620 20017.1
+1880.65894 993.0
+1907.07288 7255.8
+1918.98596 772.4
+1930.72681 1048.6
+S	3134	3134	1515.2810746
+Z	4	6057.093
+427.57544 785.6
+450.16739 603.4
+482.69705 728.6
+532.56519 2206.7
+538.95947 570.8
+549.19781 1264.5
+583.43011 569.4
+660.66022 721.9
+676.65631 1176.8
+711.76489 638.5
+731.18713 689.8
+735.84937 542.1
+761.94318 726.8
+795.87390 1181.9
+888.39081 657.4
+913.61121 665.9
+1107.20837 727.7
+1116.23389 658.6
+1188.24658 789.5
+1198.26355 2874.4
+1229.61292 670.4
+1235.73633 601.7
+1272.63098 758.9
+1273.15076 975.6
+1354.02283 612.0
+1525.50562 734.7
+1755.90918 2591.8
+1756.40796 2585.4
+1756.90649 1619.0
+1757.41821 1749.7
+1870.21411 772.0
+1876.60706 737.2
+1877.35376 811.9
+1878.26086 752.6
+1878.96484 1299.0
+1879.59021 20020.1
+1880.15576 1283.2
+1880.36499 1252.6
+1881.83337 873.2
+1882.57520 682.6
+1882.78491 678.3
+1887.75366 693.2
+1907.09424 7309.4
+1930.71704 911.2
+S	3135	3135	1514.7808246
+Z	4	6055.092
+412.07996 655.3
+446.78033 585.1
+490.81760 612.8
+526.08026 716.9
+532.51630 1837.3
+623.19708 637.0
+628.11523 603.3
+696.75372 590.3
+716.72021 659.7
+722.71704 558.2
+823.69751 702.5
+854.54364 579.0
+938.66907 713.0
+977.44574 541.5
+990.42743 590.5
+1019.67529 831.8
+1057.28333 656.8
+1198.16003 2928.5
+1436.02600 565.1
+1665.14917 728.8
+1697.92737 683.2
+1763.54895 751.1
+1870.26624 633.1
+1879.60828 19102.2
+1907.05298 7454.0
+1925.61340 756.6
+1935.40930 613.1
+1979.49500 539.5
+S	3137	3137	1879.9748246
+Z	3	5636.649
+Z	2	3758.102
+532.50354 1612.6
+549.18970 808.2
+569.15179 689.9
+667.66925 666.2
+731.16974 766.7
+767.22156 704.3
+903.15845 741.6
+1021.22345 743.0
+1198.11938 3196.8
+1421.57849 830.9
+1425.63293 609.2
+1477.03381 642.4
+1525.53723 661.3
+1620.38843 700.6
+1744.00879 715.7
+1777.35779 673.7
+1878.37012 810.0
+1879.18042 982.6
+1879.45520 9338.4
+1879.70959 15026.5
+1880.79846 1401.6
+1881.44226 662.5
+1882.26050 646.5
+1907.00037 7294.7
+1918.94214 932.0
+1930.76807 934.2
+S	3138	3138	1907.44940793
+Z	2	3813.051
+Z	3	5719.073
+519.30731 623.4
+532.49146 1775.6
+532.52618 832.1
+549.19666 764.1
+630.46161 695.5
+654.56299 605.6
+676.61304 600.7
+762.79224 726.2
+778.72113 616.6
+795.88812 751.8
+930.45398 624.4
+1057.30371 848.8
+1064.92126 751.4
+1139.93481 772.3
+1198.09448 3185.1
+1263.78711 660.3
+1275.69263 593.7
+1318.66968 562.0
+1331.57776 624.6
+1376.58398 626.6
+1394.93567 547.8
+1525.53687 759.0
+1877.55615 726.0
+1879.00256 905.2
+1879.60010 19440.8
+1879.88281 3072.2
+1880.19409 1228.0
+1880.70776 950.3
+1881.92737 699.5
+1907.11206 7229.5
+1918.93103 1187.5
+S	3139	3139	1198.5478246
+Z	2	2395.248
+Z	3	3592.368
+382.74850 654.3
+425.52530 540.7
+482.63431 733.8
+532.47363 1716.7
+547.32013 777.0
+549.16498 1054.9
+563.39240 663.7
+676.67126 1070.9
+794.69397 682.6
+795.86829 1048.4
+844.97919 700.7
+858.08014 998.8
+1013.59631 719.5
+1057.29834 955.8
+1141.39966 632.8
+1198.05371 3361.4
+1525.44995 777.2
+1875.37122 726.4
+1878.99414 563.9
+1879.16504 642.8
+1879.37866 3052.6
+1879.62488 20035.2
+1880.80029 995.8
+1906.82825 1317.5
+1907.10876 7279.0
+1930.66040 926.6
+S	3141	3141	1879.98540793
+Z	3	5636.681
+Z	2	3758.123
+508.85257 529.2
+526.78784 656.9
+532.53729 1669.2
+610.72906 761.2
+610.77325 520.4
+687.34589 574.8
+723.66785 595.8
+795.88068 832.6
+1057.27356 1319.5
+1082.25537 653.5
+1159.76355 670.5
+1198.20361 3665.4
+1212.98181 632.5
+1253.10767 604.2
+1355.62903 689.7
+1381.67993 831.8
+1579.46680 704.5
+1657.65247 613.7
+1667.11987 669.3
+1675.01550 641.2
+1677.57007 710.6
+1870.49878 795.9
+1878.42651 761.3
+1878.84619 1597.3
+1879.23499 4007.0
+1879.60071 19006.7
+1879.96594 3804.7
+1880.40430 1942.3
+1907.14160 7714.2
+1930.84399 1014.9
+S	3142	3142	1907.52024127
+Z	2	3813.193
+Z	3	5719.285
+532.53857 2170.7
+567.23853 775.1
+571.40619 677.9
+584.31958 665.4
+602.12085 676.4
+676.64801 780.8
+678.30463 620.5
+717.07306 671.3
+759.93262 638.0
+849.65356 659.4
+1187.91040 653.0
+1198.20862 3137.3
+1710.58728 612.8
+1751.31287 759.2
+1831.98267 754.9
+1878.70557 1112.0
+1879.00256 2124.8
+1879.56287 19673.1
+1880.13855 1802.8
+1883.45825 887.4
+1907.08057 7309.0
+1908.22266 682.7
+1930.71619 835.1
+S	3143	3143	910.0045046
+Z	4	3635.98672
+280.16870 641.2
+308.89685 542.1
+309.93112 719.3
+311.44495 689.0
+425.18011 614.7
+427.52701 782.0
+439.12442 577.5
+502.80496 848.7
+532.52295 1604.3
+586.36084 564.3
+588.84595 1074.2
+617.35614 986.8
+617.85608 1258.0
+672.87927 899.6
+676.65198 1035.1
+676.70215 714.3
+681.38232 1430.5
+684.80872 584.6
+731.10400 801.9
+745.90704 2167.6
+746.40930 1450.5
+753.89246 846.2
+768.00525 672.7
+776.98877 736.7
+795.44220 6255.7
+795.87170 740.8
+795.94177 4160.0
+796.44434 1973.8
+802.86871 587.0
+810.43030 1746.1
+821.95459 1154.9
+822.45532 1506.7
+830.95886 7073.7
+831.45929 6892.6
+831.96179 2639.5
+851.95795 1002.2
+852.45624 1075.4
+855.71082 564.4
+857.47510 1545.3
+857.97766 1324.1
+865.85388 617.9
+866.47650 9187.4
+866.97925 7110.8
+867.51147 5815.9
+867.98541 1215.0
+868.53101 1471.8
+892.99005 1806.4
+893.49347 2371.4
+893.98761 1158.0
+944.52014 870.1
+953.01733 1703.7
+953.51740 897.2
+958.53748 1985.0
+959.03699 1607.1
+979.53705 1055.5
+988.53705 1644.1
+989.03876 1795.2
+989.53375 1021.4
+1009.06165 3487.5
+1009.56274 3566.7
+1010.06372 2617.9
+1015.05286 897.3
+1015.56567 994.9
+1024.05701 1357.1
+1024.55786 849.8
+1025.05676 1337.3
+1066.10535 1161.0
+1066.60547 676.5
+1074.08508 953.0
+1096.93262 624.1
+1198.16968 3261.7
+1202.13623 827.1
+1230.64197 900.1
+1231.15857 784.0
+1304.62842 4349.2
+1305.62988 1849.3
+1316.70337 799.1
+1720.86511 650.3
+1777.06360 733.0
+1878.87427 827.7
+1879.56104 19454.0
+1880.77905 936.7
+1881.06458 698.0
+1897.66882 645.6
+1907.14063 7509.9
+1907.43823 1556.6
+1925.48279 644.3
+1930.53040 868.6
+S	3145	3145	1879.98540793
+Z	2	3758.123
+Z	3	5636.681
+532.54993 1980.4
+546.80530 699.6
+599.05359 597.6
+630.39661 981.0
+659.53174 802.8
+660.18744 620.1
+673.43127 634.5
+676.64423 1015.7
+744.68408 560.6
+801.31738 719.4
+805.71191 653.7
+841.26685 672.0
+1027.09265 640.1
+1140.33594 716.1
+1142.10132 665.0
+1198.22363 3725.4
+1876.80066 755.4
+1878.44189 675.7
+1878.63123 871.1
+1879.54004 19761.3
+1879.85657 2084.0
+1880.47668 1156.3
+1907.13281 7170.5
+1930.57568 1021.6
+S	3146	3146	1907.5938246
+Z	3	5719.506
+Z	2	3813.34
+532.57544 1609.0
+673.03583 599.5
+676.66528 950.4
+696.21179 544.5
+798.70862 609.9
+810.71869 657.0
+858.12311 739.4
+892.14392 689.6
+913.81604 814.5
+933.79132 639.9
+1143.53955 601.6
+1198.29443 2913.9
+1212.82910 655.4
+1392.03076 660.3
+1467.93103 673.9
+1525.43115 874.5
+1546.08643 618.2
+1771.02612 651.9
+1776.90588 910.8
+1877.66968 1016.2
+1878.82336 895.2
+1879.11755 1089.1
+1879.29773 1156.3
+1879.60010 19952.4
+1881.16418 1041.9
+1907.03967 7186.4
+1930.62598 821.4
+S	3147	3147	1198.6298246
+Z	2	2395.412
+Z	3	3592.614
+365.43262 616.5
+365.56076 570.4
+370.18756 709.7
+384.96445 591.2
+438.18759 611.9
+457.57504 573.1
+462.74142 565.3
+465.55673 672.5
+482.68948 1039.9
+489.58975 632.4
+532.50818 2210.0
+539.74609 603.1
+540.30316 755.5
+549.18872 648.2
+603.58612 653.8
+630.44653 803.7
+676.64868 770.1
+711.00940 779.3
+714.08002 769.3
+795.87189 1000.8
+844.09955 667.9
+923.65155 580.2
+958.03265 557.9
+1057.25061 625.7
+1057.29883 543.5
+1198.13464 2672.2
+1482.32483 611.2
+1525.50098 883.7
+1709.60754 593.2
+1754.57971 616.6
+1821.64856 703.1
+1878.21729 1028.3
+1879.13892 3261.7
+1879.56140 18831.8
+1879.97485 3342.9
+1880.44446 1428.4
+1907.09705 7358.0
+1907.52209 814.2
+1919.03223 1193.2
+S	3149	3149	860.3588246
+Z	2	1718.87
+Z	3	2577.801
+238.06677 2769.6
+243.71811 2580.7
+244.95345 3300.0
+259.20126 2620.9
+264.39160 2969.9
+286.95529 3458.6
+302.45172 2849.8
+322.18433 5038.4
+346.48935 3751.6
+354.43997 2921.9
+402.17816 7076.1
+421.36826 2871.0
+435.27142 7481.7
+450.16452 3178.6
+476.26361 9430.9
+482.67303 4196.9
+483.13522 3406.4
+508.32703 3151.3
+532.55194 9349.2
+548.35339 26373.4
+549.35437 5995.0
+557.17932 3098.3
+563.74689 4023.9
+566.31726 2933.5
+575.33661 3791.4
+579.29639 3868.0
+630.44354 4196.8
+659.35254 29181.1
+659.85382 17255.8
+663.37891 12677.3
+676.60223 3986.4
+694.87122 7137.5
+695.37238 6281.5
+723.59918 2756.3
+734.41718 27191.2
+735.42273 8661.9
+756.27869 4512.5
+760.32672 4895.4
+795.86853 4072.5
+803.39893 3492.3
+816.86615 9756.0
+817.36438 4900.6
+823.73718 3138.3
+847.50183 23490.3
+848.50977 4933.6
+866.30157 3582.5
+875.31384 2931.7
+895.88574 4628.2
+946.56757 7044.2
+947.49792 7217.9
+948.52948 2789.6
+985.45319 4287.4
+1002.95685 5902.5
+1003.44788 4911.9
+1052.47681 8451.3
+1052.97766 7960.4
+1053.48413 4071.8
+1057.18201 4835.8
+1060.62244 4112.3
+1061.61975 3379.3
+1117.99744 9102.5
+1118.50757 3469.1
+1148.96045 3098.9
+1167.53735 9520.9
+1168.03870 11550.8
+1168.53796 10736.9
+1171.52734 6675.7
+1188.28223 3586.3
+1198.22034 15467.2
+1203.06091 5149.1
+1203.56287 6589.8
+1204.06091 5583.7
+1220.65161 5623.1
+1222.66553 3360.3
+1284.62805 5216.5
+1313.41003 2923.1
+1317.69653 104437.9
+1318.70020 62470.1
+1319.69763 16558.3
+1388.74548 8534.3
+1389.74243 3892.3
+1397.69861 5052.5
+1406.55737 4135.4
+1481.10571 2935.6
+1519.63696 4522.6
+1611.02100 3123.7
+1795.72253 3809.3
+1857.54639 3315.4
+1879.42334 101954.5
+1907.09827 35231.9
+1909.64783 3257.1
+1918.87915 3590.1
+1930.72107 5884.2
+S	3150	3150	1879.95040793
+Z	3	5636.576
+Z	2	3758.053
+532.55396 1926.8
+623.38245 570.7
+676.60834 966.5
+686.84515 540.1
+694.63593 562.7
+795.86407 850.9
+978.18524 666.7
+1057.20728 764.6
+1198.24219 3831.4
+1230.70276 718.9
+1231.24622 546.7
+1460.58374 645.6
+1491.78247 960.1
+1674.35022 708.4
+1684.52307 600.3
+1717.48254 1466.5
+1832.73254 625.6
+1872.77319 792.3
+1879.45325 20506.7
+1907.09045 7445.6
+1930.73730 839.7
+S	3151	3151	861.360407933
+Z	2	1720.873
+Z	3	2580.806
+237.97003 562.4
+243.28732 561.9
+243.38170 604.9
+247.21411 574.8
+255.37701 630.6
+259.13834 557.6
+264.04816 646.4
+271.49805 727.1
+278.26044 679.0
+279.87247 663.3
+280.20837 575.6
+289.09674 1125.2
+308.93723 636.8
+311.17068 2373.6
+322.18713 4063.8
+331.14322 4099.2
+345.22446 854.0
+372.13257 888.1
+374.18536 2230.2
+402.18024 4376.1
+403.18463 855.4
+413.09317 583.5
+435.27075 11092.4
+436.27466 2011.3
+449.21655 630.6
+471.20126 2536.3
+476.26447 4775.1
+498.34335 631.2
+532.53375 2174.9
+541.72772 568.7
+548.35413 26147.3
+549.35638 8977.1
+550.36249 1230.3
+567.25793 690.3
+568.24670 587.9
+575.33319 1979.2
+576.32898 618.2
+585.30511 527.3
+595.29132 673.2
+638.47064 666.6
+659.26752 1581.3
+659.35144 23768.1
+659.85315 18800.8
+660.35394 7153.5
+660.85504 1873.2
+663.38135 12426.2
+664.38507 4436.1
+665.26843 1801.4
+665.38171 856.9
+670.53296 624.7
+674.40125 1441.9
+676.64911 836.9
+685.24121 713.9
+694.86993 7131.5
+695.37323 4480.4
+695.87531 1226.4
+703.77893 1920.8
+731.18677 704.9
+734.41870 28401.8
+735.42072 10854.8
+736.42322 2261.1
+742.26715 1873.3
+756.28021 4797.0
+757.27954 1015.9
+758.27747 691.9
+759.50623 597.7
+760.32581 3592.5
+760.82446 2726.2
+761.32147 1102.0
+765.87390 960.3
+770.34766 1303.2
+773.30450 812.8
+774.88574 4528.9
+775.38757 3072.6
+775.88110 997.9
+789.42694 3307.5
+795.87189 948.4
+803.39417 2616.5
+803.90039 1154.3
+805.42676 1362.8
+805.93018 1111.1
+808.62262 763.5
+814.61285 865.8
+816.86426 4439.9
+817.36707 3723.6
+817.86621 1588.2
+825.07697 616.4
+827.35822 1090.0
+830.47119 732.8
+842.42114 886.6
+847.50208 23818.5
+848.50500 6341.1
+849.50800 680.3
+946.57019 7163.2
+947.55768 4878.7
+948.53906 1655.4
+949.51660 694.8
+968.43024 3234.5
+969.43561 1301.6
+985.45703 5017.5
+986.46375 3146.8
+1002.94086 2064.9
+1003.44946 3219.6
+1003.94720 2128.7
+1011.70178 793.5
+1039.46838 1548.3
+1040.47302 729.6
+1052.48169 6233.1
+1052.98242 6448.9
+1053.48401 4692.2
+1053.98279 1350.9
+1056.49829 3342.2
+1057.49353 1616.4
+1060.61609 6698.9
+1061.62170 4007.5
+1062.62305 1247.0
+1083.95313 639.1
+1118.00342 1519.6
+1118.50281 2967.0
+1118.99182 1913.5
+1119.50305 1136.4
+1129.64954 598.0
+1153.51575 981.5
+1167.53589 4338.7
+1168.03503 5415.9
+1168.53442 4473.0
+1169.03955 2231.1
+1171.52356 6038.4
+1172.52124 3066.9
+1173.52075 1740.9
+1188.30676 887.7
+1198.19678 3793.8
+1203.04773 2745.7
+1203.55249 2669.8
+1204.04761 2142.4
+1204.55615 1261.5
+1220.64209 2853.1
+1221.64807 1775.8
+1240.99377 587.8
+1267.58130 1728.4
+1284.60364 4834.1
+1285.60974 2255.9
+1286.61133 988.9
+1293.46570 1253.8
+1294.46594 840.2
+1300.65417 1003.6
+1317.69604 86665.6
+1318.69885 63478.6
+1319.70020 26818.4
+1320.70032 7715.5
+1321.69702 1470.9
+1388.73523 8092.8
+1389.73779 7165.2
+1390.73901 2723.2
+1397.69373 4275.8
+1398.68567 2690.1
+1399.70947 1063.7
+1406.54712 1852.2
+1407.57507 874.2
+1519.64014 1911.6
+1520.65149 794.2
+1521.63806 958.3
+1544.75928 2372.0
+1545.76208 1848.8
+1546.75659 1008.9
+1579.02612 638.8
+1702.05408 601.9
+1703.75146 946.0
+1717.06067 648.8
+1718.95728 1173.4
+1747.91345 650.4
+1872.31946 788.7
+1879.10364 1200.6
+1879.56592 19750.4
+1880.02856 807.6
+1880.38904 894.6
+1880.76038 614.5
+1907.09485 6822.1
+1930.75659 1055.6
+1932.01050 647.9
+S	3153	3153	1880.0038246
+Z	3	5636.736
+Z	2	3758.16
+524.52747 782.3
+529.91016 583.3
+532.58752 2365.0
+536.68207 885.0
+623.37555 682.7
+676.68445 1097.2
+696.58673 590.8
+722.06885 591.5
+731.18329 683.1
+795.86774 903.1
+862.98248 606.2
+954.29248 630.4
+1198.31262 3487.1
+1199.90588 617.4
+1278.95996 734.1
+1473.66553 783.5
+1488.90601 651.3
+1489.72217 645.4
+1552.58167 638.3
+1718.90930 1594.3
+1876.56018 730.6
+1878.33923 727.5
+1878.68994 1024.9
+1878.98291 2115.7
+1879.23633 3106.3
+1879.62830 18322.8
+1880.03162 1833.2
+1880.26331 2475.9
+1880.66992 942.5
+1907.08423 6608.2
+1923.84570 701.1
+1930.77295 1028.6
+1939.93311 630.7
+S	3154	3154	1311.3098246
+Z	4	5241.208
+473.39642 773.2
+521.30341 635.4
+532.55280 1939.0
+588.28259 651.7
+602.30524 716.8
+610.41199 589.2
+676.71338 725.8
+683.92468 593.0
+690.87433 632.1
+711.80493 536.4
+795.87097 979.2
+804.73358 657.2
+917.28210 631.3
+1033.36084 635.3
+1049.15405 622.3
+1126.52197 1725.3
+1198.23816 3347.0
+1235.62683 719.5
+1312.03528 754.6
+1443.60950 717.2
+1452.64160 1238.3
+1453.10767 852.8
+1454.82666 681.5
+1665.05994 640.0
+1709.66821 728.5
+1718.08740 1269.2
+1765.77856 1192.3
+1873.32117 1146.3
+1877.67456 984.7
+1878.10510 726.2
+1878.62329 1251.5
+1879.77490 18232.6
+1880.05933 4661.2
+1880.51221 1554.5
+1880.89929 1449.9
+1882.56824 605.5
+1906.81079 1670.6
+1907.06604 6834.8
+S	3155	3155	861.164241267
+Z	3	2580.217
+Z	2	1720.481
+276.96225 45022.3
+283.56055 38670.1
+285.39169 40188.7
+285.85202 43787.9
+322.18677 83947.2
+331.14401 85941.2
+335.02676 36757.5
+370.37784 40733.5
+374.18332 59486.8
+374.48474 39309.4
+381.39392 42185.0
+402.18033 85950.0
+427.58118 65390.6
+435.27026 251431.3
+437.69131 41248.3
+477.63324 38393.4
+522.00116 37357.8
+532.56787 117481.6
+542.89758 42205.8
+548.35352 402121.3
+549.35632 173338.3
+552.18579 36016.8
+555.63281 41500.0
+557.28503 51030.1
+659.35242 352984.9
+659.85358 370030.7
+660.35217 76176.8
+663.38141 198882.6
+664.38049 111001.8
+676.69672 70714.1
+694.87549 92030.3
+734.41779 593914.0
+735.41962 218475.5
+756.27252 84090.0
+774.87628 71297.7
+775.88623 47459.2
+795.88184 70598.4
+803.38452 45720.2
+847.50140 670083.6
+848.50201 250829.2
+946.57104 126907.6
+947.56268 67857.9
+948.56842 58181.9
+963.72131 48074.4
+968.43011 70061.9
+980.24292 45335.7
+985.45654 128881.4
+1001.49530 45866.0
+1056.50549 47065.6
+1060.61438 171012.4
+1061.61194 97593.4
+1064.43274 36830.4
+1168.03625 44425.7
+1171.51453 143470.5
+1172.52478 53152.4
+1198.27161 222956.9
+1220.64624 63267.8
+1284.59680 156682.4
+1285.61951 55268.4
+1313.14014 52543.0
+1317.69556 1978187.3
+1318.70007 1322623.4
+1319.69922 604178.3
+1320.70837 187994.0
+1380.68323 44917.0
+1388.73730 125212.7
+1389.74060 144261.4
+1390.73596 50035.5
+1397.69666 54214.9
+1398.69568 58051.9
+1544.76208 73062.3
+1717.73376 86954.5
+1752.51404 48469.0
+1822.98792 44069.0
+1865.31372 48070.0
+1873.38281 56196.6
+1874.73071 47635.7
+1877.70105 52275.7
+1879.67993 1302454.8
+1880.22168 46535.1
+1907.10205 464387.1
+1907.38562 69822.1
+1930.72510 88805.1
+1975.08069 44493.3
+S	3157	3157	1880.1478246
+Z	2	3758.448
+Z	3	5637.168
+532.55127 1867.9
+576.26416 629.5
+605.13379 565.2
+676.67749 774.5
+697.97937 632.3
+722.43878 562.6
+731.21790 756.7
+795.87097 756.1
+832.49371 837.6
+858.19574 581.2
+900.26929 577.0
+940.84644 615.7
+941.98688 601.2
+1072.88501 633.9
+1198.22778 3293.2
+1554.76367 616.9
+1716.40625 1354.9
+1877.70886 1022.1
+1878.29675 999.1
+1878.74109 1121.2
+1879.03650 1225.1
+1879.20447 1342.2
+1879.64429 18925.3
+1880.12109 1680.3
+1907.04370 7186.0
+1907.33472 1158.9
+1919.04578 832.8
+S	3158	3158	1907.50940793
+Z	2	3813.171
+Z	3	5719.253
+519.98566 578.0
+526.74976 760.1
+532.55841 2331.5
+533.10675 674.7
+609.26440 590.9
+634.43024 624.6
+676.65607 917.2
+744.86194 629.7
+795.87000 729.7
+801.63318 649.6
+904.34253 576.7
+1187.95630 742.4
+1189.63367 674.9
+1198.24524 3047.2
+1237.20618 801.6
+1362.05383 665.8
+1754.62439 942.2
+1878.54004 817.0
+1879.25195 1858.6
+1879.60522 19819.2
+1879.91968 1628.4
+1881.96863 842.0
+1907.13965 7247.1
+1930.79492 1331.7
+S	3159	3159	1198.6898246
+Z	3	3592.794
+Z	2	2395.532
+332.97955 727.9
+430.59802 590.6
+482.69940 694.2
+519.17096 680.6
+529.45532 541.3
+532.51672 1944.1
+630.45221 894.0
+676.67102 619.5
+741.93146 643.8
+747.29028 533.0
+794.01593 816.9
+957.92737 692.9
+1057.27539 1054.4
+1125.07654 672.0
+1198.15576 2903.1
+1361.46741 585.1
+1425.01782 680.9
+1428.40283 805.4
+1678.74829 691.4
+1870.78625 1140.5
+1877.99658 1427.6
+1878.42676 850.1
+1878.90088 1017.7
+1879.12781 930.7
+1879.62830 17376.5
+1879.91150 5054.5
+1880.21899 2118.0
+1880.37964 1058.9
+1880.58496 976.8
+1881.19617 974.3
+1907.11719 7637.3
+1907.40955 721.4
+1930.74487 1296.0
+S	3161	3161	1880.07340793
+Z	3	5636.945
+Z	2	3758.299
+512.40991 635.5
+532.51062 1804.0
+549.17828 891.1
+641.93719 709.4
+650.46198 652.9
+656.61273 621.9
+676.66071 950.3
+684.11932 590.7
+709.08484 636.1
+795.87811 849.2
+799.67590 596.7
+1019.71796 697.1
+1133.00476 681.2
+1198.14575 3040.4
+1404.55310 757.3
+1537.13306 718.2
+1870.28577 813.0
+1876.15637 586.5
+1878.47742 842.5
+1879.61267 18924.0
+1881.32544 726.7
+1907.15295 7245.5
+1907.49744 801.8
+1930.66125 1009.4
+S	3162	3162	1907.47799127
+Z	3	5719.159
+Z	2	3813.108
+532.48859 1742.5
+563.37976 550.9
+630.50854 694.7
+676.65814 1180.3
+703.69098 776.7
+731.23260 760.8
+767.88409 615.0
+795.86584 923.5
+818.86768 688.0
+839.09528 583.9
+894.40015 614.2
+952.26599 635.8
+1126.98499 596.7
+1176.02124 657.8
+1198.09119 3260.9
+1313.48254 594.3
+1433.88074 706.1
+1525.67285 640.8
+1551.10657 579.5
+1657.31641 749.7
+1878.93555 1283.6
+1879.60315 19004.0
+1880.32874 1340.2
+1906.60437 619.4
+1907.16528 6819.7
+1919.08984 755.5
+1930.90588 1007.8
+S	3163	3163	862.175991267
+Z	2	1722.504
+Z	3	2583.253
+238.34142 593.2
+240.13448 1273.8
+257.98547 649.0
+258.09070 1525.1
+266.14935 1060.3
+283.17645 2728.4
+289.09659 4168.3
+296.64914 657.4
+299.79684 664.3
+303.14761 983.1
+311.17130 8515.3
+312.17755 1517.8
+322.18726 17616.5
+323.19073 1934.1
+331.14331 10856.1
+332.14868 958.6
+350.29321 813.0
+353.35458 560.9
+357.15912 3808.1
+358.16617 773.0
+372.13339 5061.9
+374.18524 9383.8
+375.18945 1545.4
+382.44800 594.3
+392.86551 695.8
+400.23300 1806.1
+402.18042 16816.7
+403.18393 1922.0
+408.22086 819.8
+408.78723 564.6
+413.24033 1089.2
+418.24567 1505.4
+422.84613 591.8
+430.79965 657.2
+435.27115 38106.5
+436.27441 8555.6
+437.27756 923.9
+443.20688 1680.5
+453.19296 766.4
+454.17410 1421.0
+468.27740 954.7
+470.65424 650.4
+471.20154 8784.9
+472.20343 1448.7
+497.21658 1045.2
+498.60831 700.4
+499.23285 1637.6
+525.21063 1720.3
+526.32513 1803.5
+531.32977 1682.3
+532.44427 2001.5
+539.26294 2081.6
+542.23755 2632.4
+543.24231 871.4
+546.18353 780.4
+548.35468 109693.5
+549.35773 33869.1
+550.36005 6107.6
+552.18329 871.6
+560.30652 1156.7
+567.25745 3292.6
+568.25452 842.4
+579.96381 593.6
+581.36725 700.0
+584.28485 3900.8
+596.26172 592.1
+611.25983 2065.5
+611.33185 737.9
+631.26941 1737.0
+638.29694 2017.6
+639.29913 985.4
+641.25470 929.7
+643.19769 1760.9
+644.59045 660.7
+650.84045 1667.8
+651.34430 1247.5
+651.84698 769.3
+655.32147 2666.6
+657.36743 711.6
+659.26434 4431.5
+659.35211 75990.2
+659.85352 53478.7
+660.25006 1198.9
+660.35449 21720.9
+660.85510 5916.7
+661.35748 902.0
+663.38153 44686.6
+664.38452 16693.1
+665.27167 4981.0
+665.38568 3153.1
+666.26611 801.1
+673.31879 821.1
+673.39069 807.3
+676.63593 803.4
+677.24677 561.2
+685.24377 2653.2
+686.26031 703.7
+694.87054 24847.5
+695.37219 16410.6
+695.87360 6817.9
+696.37573 1238.2
+697.36676 953.9
+698.14252 686.0
+700.05701 633.1
+702.26984 1448.4
+728.28607 2952.5
+729.28961 770.1
+732.30719 978.6
+734.41895 92752.4
+735.42139 37431.4
+736.33508 627.5
+736.42389 8232.8
+737.42889 1110.0
+738.26886 765.6
+742.26495 5651.1
+743.26758 1824.2
+745.42145 752.7
+756.28021 17520.2
+757.28247 5244.1
+758.28058 2267.6
+759.29028 3013.3
+764.33881 3563.0
+765.34326 1124.0
+765.88068 2468.9
+766.38019 2433.8
+768.42358 782.1
+770.34955 4593.9
+771.35681 1141.5
+773.30658 3358.6
+774.31085 1028.7
+774.88580 15586.9
+775.38715 8979.4
+775.88757 3831.5
+776.38965 1200.9
+803.39606 6457.2
+803.89941 4542.3
+804.40082 2007.8
+804.90302 851.8
+805.43091 3348.7
+805.93127 2731.4
+815.35126 1349.6
+816.34674 727.1
+819.83618 642.4
+827.35394 6056.1
+828.35785 1695.7
+829.36108 743.0
+829.49109 2431.1
+830.47449 5105.6
+831.47803 2928.8
+832.47650 865.6
+837.33258 1860.1
+837.42615 1616.8
+837.93402 1913.2
+838.43225 785.4
+842.42401 1149.4
+847.50311 18477.5
+848.37830 681.3
+848.50848 1805.8
+870.27228 773.0
+872.37555 2195.7
+873.37329 1173.8
+877.42609 714.2
+878.42981 790.8
+894.44586 1139.3
+926.38611 911.3
+940.43732 1157.0
+941.44452 1219.7
+943.41125 1201.4
+946.57141 25612.3
+947.57477 13545.4
+948.57550 3443.2
+949.57349 1601.7
+950.42609 804.2
+957.46649 1237.4
+967.44330 1214.3
+968.33057 560.8
+968.43286 13842.1
+969.43549 7146.5
+970.43170 2247.6
+985.45856 18275.9
+986.46240 8932.4
+987.45709 2909.6
+988.45544 1288.3
+996.52240 1005.3
+1038.48352 1139.0
+1039.46936 4604.8
+1040.48438 1628.7
+1043.58264 825.1
+1056.49438 9982.4
+1057.24292 1008.7
+1057.49829 4777.2
+1058.49927 1590.2
+1060.61414 27758.2
+1061.61658 15914.5
+1062.62061 5202.9
+1063.62268 1631.0
+1114.51111 767.6
+1136.49585 746.3
+1144.63135 742.4
+1153.51111 3115.5
+1154.49805 3189.9
+1155.50415 1557.6
+1171.52368 22355.4
+1172.52551 11006.7
+1173.52478 5158.7
+1174.52246 1264.2
+1197.99084 3399.9
+1203.63403 959.1
+1204.61389 1019.0
+1220.64502 11865.9
+1221.64697 7596.4
+1222.65247 2544.5
+1227.58105 837.7
+1250.94360 777.2
+1266.59973 3815.7
+1267.58594 5380.6
+1268.58508 2620.4
+1269.60352 1280.2
+1284.60681 17846.3
+1285.60779 9330.8
+1286.61145 4811.6
+1287.62329 1112.9
+1299.69080 1858.9
+1300.67493 3757.3
+1301.67297 1781.8
+1311.57507 837.5
+1312.63977 1221.3
+1313.67700 1023.2
+1315.21448 842.6
+1316.21741 803.3
+1317.69678 301069.6
+1317.91101 1329.8
+1318.69922 208783.5
+1319.70032 87902.1
+1320.18921 1825.9
+1320.70178 27019.3
+1321.70496 7096.4
+1322.73352 2578.1
+1370.73767 702.6
+1379.68640 1970.2
+1380.66931 2153.5
+1381.67676 1251.4
+1388.73450 31218.3
+1389.73682 22835.7
+1390.73804 10032.1
+1391.74194 3699.6
+1397.69092 13687.5
+1398.69104 8793.2
+1399.69275 2794.3
+1400.69995 1438.1
+1526.75342 1606.2
+1527.73950 1848.2
+1528.74121 1044.5
+1544.75659 9061.9
+1545.76257 6720.1
+1546.76465 3339.0
+1554.82373 794.4
+1870.19348 1026.6
+1877.97192 985.7
+1878.34729 864.0
+1879.02734 1941.0
+1879.53589 19597.9
+1879.99011 2265.7
+1907.12268 7137.8
+1930.70496 1083.1
+1931.44312 664.8
+1993.42456 941.2
+S	3165	3165	1879.99424127
+Z	2	3758.141
+Z	3	5636.707
+532.48706 1742.1
+676.65503 1100.7
+707.10724 724.2
+731.13251 746.1
+750.53198 646.6
+795.86652 1240.3
+808.96155 691.1
+878.85022 811.6
+977.88379 641.5
+1009.02014 703.1
+1053.55615 677.9
+1198.08545 3157.9
+1210.55872 568.7
+1382.82239 631.6
+1407.52771 572.9
+1684.20288 793.9
+1764.43750 696.6
+1876.13525 692.8
+1876.94006 807.1
+1877.75220 785.5
+1878.64917 655.9
+1879.58716 19764.0
+1879.85632 2605.0
+1880.46558 837.8
+1881.19177 806.5
+1881.39404 808.4
+1906.61523 782.0
+1907.16418 7546.1
+1930.64441 972.1
+S	3166	3166	1907.54440793
+Z	3	5719.358
+Z	2	3813.241
+532.51013 1860.0
+622.86774 581.8
+652.33606 915.1
+675.29065 720.3
+676.66516 888.8
+795.87469 1172.4
+842.31238 567.4
+978.60669 641.9
+1198.14197 2664.7
+1701.15308 660.8
+1776.97144 665.0
+1841.76379 614.7
+1872.78076 564.6
+1877.18774 633.6
+1879.19299 2292.1
+1879.66711 17015.5
+1880.43103 1341.0
+1882.00061 732.6
+1907.13647 7315.0
+1909.38013 717.1
+1930.71973 899.9
+S	3167	3167	404.2408246
+Z	1	403.233
+102.46050 695.0
+105.91527 630.4
+114.34484 555.8
+121.06418 10967.0
+121.77102 518.5
+121.78028 2016.0
+128.28096 547.2
+133.08525 832.2
+135.07968 852.0
+141.26431 603.3
+149.09581 682.3
+165.09045 5869.5
+165.75824 600.8
+165.76978 624.2
+171.64803 651.6
+174.13899 569.6
+174.26125 516.3
+174.78015 569.8
+177.11147 823.9
+182.79312 779.9
+191.10585 1210.2
+193.12267 672.6
+197.70906 593.9
+198.97157 834.6
+199.24550 607.1
+199.29414 560.7
+199.30443 666.9
+199.33257 1490.5
+199.34436 2455.5
+199.35498 1387.5
+199.36790 805.1
+199.38991 752.4
+199.44139 735.3
+206.78972 700.5
+209.11694 6343.4
+210.02492 965.7
+235.13196 793.4
+238.68915 651.6
+257.65750 562.7
+263.56598 596.6
+282.79263 537.8
+283.18619 734.4
+296.03693 735.2
+299.18457 661.6
+315.17972 4719.1
+321.98703 580.1
+350.29956 868.3
+359.20602 4454.9
+381.37665 868.6
+384.21616 559.5
+395.94400 523.8
+417.74017 653.1
+427.57062 701.8
+431.05911 664.5
+442.85855 628.9
+452.46753 577.6
+482.68729 922.8
+532.52869 1722.9
+549.18311 827.1
+561.59546 551.0
+575.78308 575.6
+630.43854 749.5
+676.66547 698.0
+679.61078 504.9
+731.17432 587.7
+776.01501 530.9
+784.06134 596.6
+795.88098 951.1
+886.90649 599.3
+1019.92377 597.8
+1140.52271 724.8
+1188.89771 578.5
+1198.18176 3087.9
+1485.96838 661.2
+1525.48376 746.6
+S	3169	3169	1880.07624127
+Z	2	3758.305
+Z	3	5636.953
+532.41156 678.8
+532.52710 1644.4
+561.69733 655.6
+630.46265 859.7
+982.23651 701.5
+1008.64636 595.2
+1188.32544 952.5
+1198.13269 2555.0
+1320.33911 626.4
+1362.95300 622.8
+1385.65674 629.7
+1557.83350 601.9
+1709.59570 725.5
+1757.07422 616.5
+1776.95544 683.7
+1879.35376 8281.8
+1879.62988 16491.5
+1906.79346 651.0
+1907.16516 7338.7
+1907.52722 763.7
+S	3170	3170	1907.55740793
+Z	2	3813.267
+Z	3	5719.397
+532.49530 1983.8
+549.21167 685.0
+675.70551 644.7
+676.65009 1270.1
+725.13538 729.2
+748.56915 739.5
+758.19611 667.9
+766.03467 549.8
+795.87836 1060.6
+978.13245 574.8
+1057.63281 677.1
+1150.45056 672.6
+1198.10852 2661.7
+1525.58435 662.0
+1606.02026 638.3
+1710.14111 646.9
+1860.11572 707.8
+1877.93152 755.7
+1878.54651 1217.7
+1879.26868 2599.8
+1879.57202 20163.2
+1880.06604 1499.3
+1881.15820 786.7
+1907.08862 6823.5
+1930.74683 958.3
+S	3171	3171	1198.62699127
+Z	3	3592.606
+Z	2	2395.406
+344.58008 696.1
+369.82257 683.5
+417.64825 631.8
+436.46851 569.7
+532.52179 2066.6
+630.41827 710.1
+640.39514 663.6
+653.77515 701.0
+676.65924 1060.6
+780.87482 690.8
+991.56628 674.8
+1007.99133 628.6
+1019.66278 761.6
+1057.27783 720.9
+1170.86963 611.0
+1188.20813 642.2
+1198.15808 3317.9
+1221.61755 644.9
+1337.87854 616.4
+1346.79968 593.6
+1517.29797 695.9
+1591.93933 874.8
+1703.57373 862.3
+1777.45142 1014.3
+1778.23694 577.5
+1878.42395 623.9
+1878.81116 1055.9
+1879.08008 1377.8
+1879.60156 20296.9
+1880.22388 1615.8
+1881.87427 727.3
+1906.95007 7029.2
+1907.22656 1404.7
+1918.94824 744.9
+1930.63232 1065.4
+S	3173	3173	1880.0388246
+Z	3	5636.841
+Z	2	3758.23
+532.51331 2130.6
+538.19330 667.9
+549.17200 866.0
+592.37665 730.3
+613.56836 667.6
+630.43005 608.3
+667.89276 631.2
+676.65631 915.2
+731.13953 753.3
+764.94757 570.4
+795.86377 1237.7
+805.43695 669.3
+1057.27405 827.5
+1077.10999 720.2
+1111.53589 781.2
+1198.15515 3039.5
+1222.03577 611.0
+1467.07715 768.2
+1656.82166 607.6
+1874.85913 653.5
+1878.41650 801.7
+1879.20959 2701.4
+1879.57605 19442.8
+1879.91406 2465.3
+1880.76404 1101.2
+1881.13953 1284.7
+1897.12927 621.7
+1906.67273 734.1
+1906.99268 7136.7
+1994.08752 541.7
+S	3174	3174	1907.43724127
+Z	2	3813.027
+Z	3	5719.036
+532.51086 1110.1
+532.54230 656.3
+549.18622 997.1
+602.09607 678.4
+795.86450 1001.2
+858.08203 672.3
+1057.24988 875.7
+1198.14868 3450.8
+1424.81482 677.3
+1455.35693 618.8
+1525.49426 659.9
+1565.89624 547.2
+1728.80774 672.6
+1787.05090 665.7
+1878.30811 1394.6
+1878.62744 1068.3
+1878.83264 1433.0
+1879.25745 5151.2
+1879.55298 17994.0
+1879.88794 5329.5
+1880.29602 755.4
+1880.81519 715.8
+1881.19434 636.1
+1883.14026 824.1
+1907.05640 7421.3
+1930.73120 723.0
+S	3175	3175	736.399991267
+Z	2	1470.952
+Z	3	2205.925
+191.87564 499.3
+199.26814 840.8
+199.33153 1268.7
+199.34175 1183.9
+199.35789 1974.2
+199.36705 1446.5
+199.46135 971.8
+233.58560 918.5
+235.12376 642.7
+244.89764 608.6
+252.01582 629.7
+264.73987 606.2
+271.33002 980.9
+271.79617 829.8
+281.12830 2583.9
+292.11176 608.1
+301.01547 681.2
+308.91638 765.9
+309.12323 2338.4
+329.84000 586.5
+342.28693 1253.3
+347.19244 1236.7
+350.29291 744.0
+373.22537 1832.0
+390.20978 1698.2
+401.21927 1208.6
+408.96463 812.7
+431.75208 644.1
+442.62988 749.2
+447.23004 16385.7
+448.23254 2235.4
+448.40488 663.3
+477.24936 2451.9
+505.24399 4481.2
+506.25153 726.7
+520.29553 996.0
+525.12927 575.7
+532.53345 1979.9
+536.23865 2460.9
+537.24597 1121.3
+539.31647 3066.1
+540.31610 1509.9
+546.29779 16195.1
+547.30060 2943.3
+548.28296 1921.1
+548.35553 1121.8
+549.17792 944.7
+549.35480 828.9
+557.36688 642.6
+572.28015 1259.4
+603.31995 4862.5
+604.32660 983.0
+613.38898 820.4
+619.79156 720.0
+624.29779 769.5
+624.83667 834.7
+628.36487 9190.1
+629.36847 3606.6
+630.36407 883.5
+630.44000 883.0
+631.25671 4352.7
+631.32434 1398.2
+631.75610 2528.2
+632.25635 1110.4
+632.83826 1858.7
+633.33722 1143.4
+633.84344 1834.5
+634.34814 867.5
+635.30524 1403.4
+636.30701 1157.4
+640.25885 1475.0
+640.76038 698.6
+650.27405 740.8
+652.31165 1714.6
+661.35278 1298.3
+667.79614 957.4
+668.32391 702.2
+675.08942 877.2
+675.59088 1384.4
+675.83160 1356.4
+676.65198 1403.3
+689.31842 738.3
+689.79480 22645.6
+690.29590 14040.5
+690.79669 5881.8
+691.29480 1170.4
+699.19446 2520.3
+700.19263 1293.3
+704.20270 726.5
+707.34595 10140.1
+708.34723 3286.4
+709.36267 3376.0
+712.32056 1069.5
+716.40558 2771.6
+717.40289 971.7
+718.30438 834.2
+731.67810 801.8
+786.23730 724.2
+789.84656 1485.8
+812.28107 1822.9
+813.27875 1402.3
+817.45062 5188.6
+818.45007 2768.0
+820.42767 1449.7
+822.44647 1677.0
+823.44214 1030.0
+824.85919 1629.5
+828.42255 1976.5
+828.75702 3159.0
+829.09094 3287.8
+829.43274 1138.5
+829.74487 943.5
+831.39801 1432.7
+832.73761 746.0
+840.27209 11142.9
+841.27576 5583.4
+842.28107 915.7
+848.43475 1194.0
+872.44135 935.0
+879.47449 815.1
+905.44958 1512.0
+905.79285 1166.1
+906.11945 2078.8
+906.45447 2353.0
+906.78741 1027.9
+908.31268 628.5
+910.88879 867.3
+921.47882 3845.1
+922.47992 1940.3
+923.50104 2605.5
+930.45526 1654.6
+931.46210 1878.6
+939.39746 1713.0
+939.89276 1114.1
+946.51819 1059.2
+964.52032 5600.9
+965.52155 2498.2
+966.52295 1191.5
+974.91510 1599.6
+975.42242 1206.6
+1004.52100 2240.7
+1005.53247 804.9
+1006.53693 1015.7
+1019.19617 686.5
+1021.49274 885.9
+1022.53571 4964.1
+1023.53949 2055.8
+1024.53503 1182.4
+1059.48840 786.6
+1060.51624 704.9
+1068.54504 2189.4
+1069.56262 1314.2
+1070.56018 3555.4
+1071.56421 1243.4
+1121.44922 5034.0
+1122.45593 2702.1
+1123.44580 738.2
+1140.37488 798.9
+1160.64026 4257.9
+1161.64368 1737.6
+1198.18872 3412.1
+1238.58374 872.9
+1261.50623 1205.6
+1279.51038 1716.6
+1280.52478 1067.3
+1373.39319 625.3
+1525.49023 820.6
+1552.62964 633.4
+1712.43420 604.6
+1769.20959 662.1
+1785.53833 604.2
+1878.18457 1156.5
+1878.56042 712.3
+1879.13452 2401.5
+1879.57251 19673.0
+1879.93823 1804.2
+1880.01343 1810.6
+1880.69727 821.4
+1881.02808 1318.4
+1881.91052 651.5
+1907.12683 7482.7
+1930.69714 872.2
+1943.24756 745.6
+S	3177	3177	1880.01940793
+Z	2	3758.191
+Z	3	5636.783
+507.36484 538.2
+532.54712 1966.3
+549.17816 651.6
+559.54181 653.6
+630.31091 588.7
+630.44159 945.4
+649.55530 555.1
+723.48108 590.4
+778.71320 590.4
+795.87506 1236.2
+917.13300 543.5
+1057.35486 717.2
+1152.56360 722.9
+1182.05481 611.4
+1198.22742 2827.3
+1512.17480 587.7
+1612.91626 582.3
+1668.10376 610.9
+1879.06262 673.8
+1879.45105 7112.3
+1879.73328 17102.8
+1880.12048 4637.3
+1880.61060 1621.8
+1907.16235 7413.7
+1918.98462 762.5
+S	3178	3178	1907.59024127
+Z	2	3813.333
+Z	3	5719.495
+523.42426 592.4
+532.53436 1713.8
+639.77826 667.9
+676.64545 1079.4
+690.84418 682.6
+725.15686 679.5
+1021.19342 657.8
+1073.96521 627.9
+1112.99194 632.3
+1167.18872 656.2
+1198.21082 3352.5
+1202.77600 555.0
+1462.63098 637.7
+1525.40625 849.0
+1641.03333 650.7
+1668.04639 713.1
+1776.99292 848.1
+1796.97766 639.6
+1878.84998 789.7
+1879.54688 19912.5
+1879.96887 1135.4
+1881.08948 867.6
+1907.15503 6984.8
+1930.62402 851.3
+1932.08630 1161.5
+1932.83130 634.4
+1990.86865 615.0
+S	3179	3179	446.1278246
+Z	1	445.12
+116.23591 527.9
+118.37826 770.8
+118.56017 515.9
+119.25218 544.6
+121.77500 610.0
+121.77798 628.4
+121.78241 2349.6
+126.01431 560.6
+134.64050 535.4
+136.12805 535.9
+143.23438 484.2
+145.46338 635.3
+146.92390 636.6
+158.41774 570.8
+159.28383 525.2
+165.27461 580.7
+168.29613 627.9
+198.65453 562.6
+199.04189 699.9
+199.25160 738.0
+199.25545 759.1
+199.28302 633.9
+199.32210 1171.4
+199.33875 1141.1
+199.34818 2599.8
+199.40959 827.0
+199.44693 980.9
+218.73029 710.4
+233.16753 681.1
+235.85431 656.0
+254.98180 535.1
+255.03117 559.1
+265.99234 771.8
+280.18338 549.9
+289.10513 715.2
+299.68469 620.7
+312.38983 524.8
+341.01730 12039.5
+342.01517 737.1
+350.30481 914.4
+352.59351 546.4
+359.02789 1396.6
+363.30777 561.3
+387.92188 607.5
+390.26355 653.7
+425.20154 595.6
+429.08777 49782.7
+430.08835 5477.8
+450.23035 708.1
+469.90646 932.8
+523.64099 568.9
+532.50122 2218.5
+542.32965 561.0
+676.64813 635.5
+725.67755 592.4
+732.99341 574.0
+781.16956 654.4
+795.87463 925.3
+871.39777 606.6
+1057.27295 1070.5
+1131.29065 748.1
+1196.79297 578.8
+1198.12134 3587.4
+1356.81934 767.7
+1587.84741 666.6
+1777.05994 925.2
+S	3181	3181	1880.12499127
+Z	3	5637.1
+Z	2	3758.402
+532.53241 2003.1
+553.30463 604.2
+613.21149 562.0
+629.08972 601.3
+688.06738 588.7
+795.86945 727.6
+812.98279 591.0
+852.45203 665.8
+886.31097 567.2
+1057.28186 812.5
+1140.33154 719.6
+1198.18823 3646.3
+1222.05566 680.5
+1249.13538 719.2
+1269.64478 721.9
+1274.39697 538.8
+1391.84241 776.8
+1489.63269 657.6
+1525.43066 1112.2
+1617.54614 604.4
+1667.07715 773.0
+1679.64819 798.2
+1814.66101 639.7
+1876.26624 795.3
+1878.28357 864.8
+1878.64771 1003.5
+1879.62683 18584.5
+1879.97156 3593.8
+1881.59241 733.8
+1883.50342 584.4
+1883.71082 539.1
+1907.19275 6964.0
+1907.48364 568.7
+1907.58069 551.8
+1919.05994 768.6
+1930.63135 1230.7
+S	3182	3182	1907.4868246
+Z	3	5719.185
+Z	2	3813.126
+532.48895 1930.1
+572.76794 750.5
+577.35876 643.8
+630.45557 900.8
+641.25348 693.0
+726.54291 567.1
+731.18152 709.0
+743.37372 626.4
+784.75739 650.1
+795.86841 797.0
+1198.08704 3190.1
+1229.00000 656.7
+1270.75415 717.4
+1320.39417 755.3
+1449.95471 654.1
+1853.70166 684.2
+1870.20349 795.7
+1878.45166 1119.9
+1879.23376 2827.1
+1879.61328 19373.1
+1880.01428 2528.1
+1880.35974 835.1
+1881.54980 1279.4
+1907.15637 7227.9
+S	3183	3183	421.2668246
+Z	1	420.259
+106.72433 526.5
+107.14014 606.6
+113.73608 627.8
+120.67023 579.7
+121.78073 2681.9
+121.78497 585.9
+126.63790 499.3
+128.37402 628.9
+129.42099 758.8
+131.70160 689.5
+132.86438 504.8
+134.56007 519.2
+137.42181 535.8
+144.16663 575.5
+145.99129 496.2
+146.74443 551.5
+153.75674 512.2
+155.12341 792.2
+185.63985 546.8
+191.13817 523.8
+197.71761 654.7
+198.96625 873.1
+199.24107 655.6
+199.25125 1093.7
+199.31880 1018.4
+199.33060 744.3
+199.33963 1521.3
+199.34924 2617.0
+199.36134 1318.7
+199.37241 1028.0
+199.44666 883.5
+199.46098 662.7
+199.55943 533.8
+207.11258 712.8
+210.02486 6953.4
+217.69000 550.0
+261.30801 656.9
+271.66479 617.3
+272.15933 631.3
+284.72226 551.3
+308.91504 510.1
+352.98291 598.7
+362.22070 967.5
+386.02200 706.4
+400.23181 1375.1
+401.23172 1523.4
+402.10403 1021.1
+403.04749 1123.5
+403.23190 23371.9
+404.03125 2641.7
+404.23541 4755.3
+469.90552 624.3
+476.78125 865.4
+490.29770 795.8
+524.81940 529.1
+532.50238 1898.7
+549.17645 911.3
+603.38062 2242.7
+604.38306 739.1
+623.53894 617.3
+676.66632 824.1
+687.71478 609.9
+691.05170 601.1
+717.57806 561.1
+731.14563 681.7
+798.89923 544.3
+844.35229 561.6
+862.25195 603.1
+888.25330 671.7
+931.99951 663.0
+969.96051 664.4
+1057.27856 817.7
+1159.06311 606.7
+1198.12000 3360.7
+1507.62451 534.8
+1552.04041 585.6
+1621.84851 520.0
+S	3185	3185	889.206407933
+Z	2	1776.565
+Z	3	2664.344
+231.38115 723.3
+262.86438 657.6
+264.01208 643.0
+278.83670 761.9
+280.19501 757.4
+301.18674 1036.7
+308.91449 793.1
+327.28027 639.4
+342.23782 7856.7
+343.24216 980.4
+381.60944 712.9
+421.28000 783.2
+428.00787 671.9
+446.47385 738.9
+457.61911 643.3
+460.84924 702.2
+465.03729 708.6
+471.29562 697.8
+482.68112 1048.3
+484.32040 680.5
+532.50488 2293.7
+549.17297 811.6
+552.37408 10218.4
+553.37610 2855.9
+554.38025 806.1
+572.33728 1718.0
+580.27582 636.5
+612.25134 3633.7
+613.25006 1544.7
+614.25830 1189.3
+616.70148 610.6
+630.43182 931.3
+673.38849 1758.5
+689.31305 1263.2
+690.29712 1042.7
+697.34070 3952.7
+698.34119 1521.1
+706.38983 1016.1
+707.32397 19285.6
+708.32587 4464.9
+709.30872 1597.4
+712.38074 712.6
+712.93750 712.8
+715.86377 1947.1
+716.36517 1270.9
+724.31213 954.1
+725.33472 130103.0
+726.33740 49009.9
+727.33978 11011.5
+728.33936 1589.9
+731.15356 665.3
+735.58795 755.1
+764.39246 2138.1
+764.89325 3055.3
+786.46930 2300.4
+795.86261 871.4
+796.49323 3362.2
+797.49988 827.7
+803.42438 789.2
+806.93597 894.1
+807.43341 1512.1
+811.92297 1300.5
+812.42096 3924.8
+812.92371 2027.9
+820.93097 26195.2
+821.43225 24935.4
+821.93378 13297.3
+822.40430 4484.8
+823.38818 2000.0
+843.26721 629.8
+851.90845 699.5
+853.52209 1667.6
+854.00970 865.5
+854.52454 1118.4
+859.81042 913.8
+865.49963 775.6
+868.24500 688.6
+868.96655 2010.2
+869.46313 1527.5
+916.52686 4586.2
+917.53418 2279.1
+918.53229 902.4
+938.93756 660.1
+950.56934 5663.6
+951.57166 3463.0
+952.56226 1216.1
+959.49817 1051.4
+976.46136 3448.9
+977.46698 1462.4
+978.46069 765.3
+1011.67157 770.6
+1019.75739 684.7
+1021.20819 797.3
+1047.62073 144188.7
+1048.62402 100906.2
+1049.38000 922.8
+1049.62756 34285.4
+1050.62903 7257.0
+1051.62329 1287.6
+1057.28882 1112.1
+1071.34583 694.7
+1114.89929 751.7
+1144.06042 1166.1
+1144.55823 915.4
+1160.70068 3474.0
+1161.70801 3585.0
+1172.57422 1805.7
+1173.06750 1635.1
+1181.57849 3472.3
+1182.07935 3760.2
+1182.57825 1375.0
+1188.32068 766.0
+1198.12463 3670.8
+1220.58130 18657.0
+1221.58411 13897.7
+1222.58984 5854.7
+1223.59131 1667.7
+1274.74084 1143.7
+1430.71838 27281.8
+1431.72070 23099.0
+1432.72510 10227.6
+1433.72131 3052.1
+1444.76379 650.3
+1645.94104 701.6
+1776.94714 729.2
+1808.64771 705.9
+1874.61853 647.8
+1878.44299 1044.3
+1878.86084 1668.5
+1879.61621 20287.6
+1879.91309 3896.7
+1880.27136 1736.4
+1881.96362 665.5
+1907.16516 7847.2
+1919.03638 761.4
+S	3186	3186	888.536241267
+Z	2	1775.225
+Z	3	2662.333
+251.60713 631.3
+296.46820 663.9
+308.89713 680.9
+308.90552 700.9
+327.32196 599.0
+332.96191 749.5
+342.23801 6856.1
+343.24106 1411.8
+350.28049 765.9
+381.37186 837.9
+461.89218 648.8
+480.25372 665.4
+483.63684 594.7
+523.16046 551.8
+532.52173 2107.9
+552.37415 8301.3
+553.37750 1927.6
+594.24426 700.7
+612.25024 4041.3
+613.25604 950.8
+656.27545 648.7
+676.66736 983.1
+680.31360 773.2
+689.31299 1653.1
+690.29614 1070.3
+697.33966 3551.6
+698.34241 1457.0
+706.39008 791.7
+707.32458 16133.2
+708.33154 4181.7
+709.30933 907.2
+710.31183 718.7
+715.86511 2142.1
+716.36536 1683.2
+716.86835 1015.8
+725.33502 108115.2
+726.33826 39497.3
+727.34186 8824.2
+728.34442 983.3
+764.38940 3376.5
+764.88922 1975.7
+765.39172 1384.0
+765.89417 763.2
+796.49628 2426.7
+797.01825 623.8
+797.49280 1198.6
+803.40515 809.1
+806.92651 1259.0
+807.43262 824.3
+807.95477 636.3
+811.94104 577.8
+812.42072 3075.6
+812.92383 2193.2
+813.42285 717.0
+820.93115 21154.4
+821.43274 19095.7
+821.93353 10301.9
+822.39417 4620.0
+823.38416 1717.0
+853.51587 1354.1
+862.85352 640.3
+863.99280 817.8
+868.47351 761.8
+868.96613 1116.3
+869.46722 1571.4
+916.52545 3763.0
+917.53253 2656.0
+950.57056 5259.6
+951.57068 2337.4
+951.85480 722.3
+952.57605 1024.6
+959.49902 754.8
+976.46344 2769.9
+977.46417 1301.2
+992.83716 667.9
+995.51111 623.6
+1042.93298 619.1
+1044.02698 786.3
+1047.62097 129397.3
+1048.62415 81421.3
+1049.38403 791.9
+1049.62805 27940.7
+1050.63074 5700.4
+1051.23584 737.9
+1160.70630 3200.2
+1161.71240 2423.8
+1198.16858 3376.4
+1203.57849 776.7
+1220.58191 15909.3
+1221.58594 11306.8
+1222.58765 4553.4
+1223.57019 792.0
+1274.75208 949.4
+1276.91370 670.3
+1295.61206 699.1
+1415.07104 611.7
+1430.71936 22655.6
+1431.72144 18859.7
+1432.72595 9037.6
+1433.72864 2946.8
+1525.45203 787.9
+1834.15601 550.7
+1876.30396 873.0
+1878.24255 718.9
+1878.67004 1071.9
+1878.95093 631.7
+1879.61133 19839.3
+1879.92102 2341.9
+1880.07385 2420.6
+1880.49866 924.7
+1907.05322 6999.6
+1919.00354 900.3
+S	3187	3187	1198.5655746
+Z	2	2395.283
+Z	3	3592.422
+318.91782 648.6
+331.75690 633.9
+342.27444 722.2
+350.28296 691.0
+385.94257 666.6
+417.36356 654.0
+476.51691 623.2
+489.90744 598.7
+491.18057 625.5
+532.52069 2022.4
+600.66266 665.7
+630.41754 668.1
+648.60651 617.6
+674.38428 576.9
+731.14050 685.4
+795.85260 1101.8
+897.31659 578.6
+1188.33276 906.8
+1198.15662 3060.2
+1252.21777 583.9
+1414.01074 737.7
+1525.43457 744.2
+1621.62573 730.1
+1668.46155 626.1
+1850.46619 639.7
+1875.59448 627.7
+1879.19519 1758.4
+1879.53857 19892.2
+1879.92615 1204.6
+1883.48486 727.7
+1907.05359 7781.4
+1930.62585 976.1
+S	3189	3189	1880.01699127
+Z	2	3758.186
+Z	3	5636.776
+506.70151 601.4
+532.50983 2150.4
+545.68182 664.5
+578.22260 574.7
+621.88342 551.6
+709.98517 943.5
+745.79578 608.0
+795.84442 1111.7
+820.64178 697.6
+858.07819 732.3
+888.51013 675.3
+977.90924 570.2
+994.55743 615.8
+1057.29297 1100.0
+1106.57349 648.0
+1159.08557 737.8
+1188.28662 682.4
+1198.13708 3644.9
+1245.78564 611.8
+1513.87781 640.2
+1525.45190 819.6
+1549.79370 883.2
+1879.11365 1067.0
+1879.35522 4014.6
+1879.60144 18713.7
+1881.01709 778.6
+1906.81836 595.3
+1907.09448 7451.5
+1918.97913 788.6
+S	3190	3190	888.5378246
+Z	2	1775.228
+Z	3	2662.338
+233.57188 1523.0
+239.85538 1034.0
+243.60609 1211.2
+270.25082 1187.6
+272.90521 1171.6
+280.17953 1084.4
+297.14636 1184.4
+303.63199 1244.1
+342.23840 16439.5
+343.24051 1911.6
+350.70728 1082.4
+394.51843 1218.4
+421.28055 1432.3
+422.78589 1026.6
+482.65097 1945.5
+498.20898 1698.6
+522.71521 1430.7
+526.09033 1180.2
+532.51953 3284.7
+549.15356 1833.5
+552.37421 20318.1
+553.20435 1134.1
+553.37769 4669.7
+554.66406 1236.6
+572.34369 1313.9
+586.32056 1077.3
+594.23907 1414.8
+612.25085 7653.4
+613.25519 2627.0
+614.25647 2403.9
+673.38660 2238.4
+676.68079 1359.5
+676.70081 1330.7
+679.33539 2118.4
+680.30884 1495.3
+689.31213 4581.3
+690.29242 4132.7
+697.33997 10036.0
+698.34302 4579.4
+706.39258 2321.0
+707.32379 37199.3
+707.39551 2627.6
+708.33179 9858.2
+709.30798 3053.4
+715.86487 4892.1
+716.36945 3955.6
+725.33502 260197.9
+726.33807 97032.8
+727.34161 22235.7
+728.34717 2743.8
+764.38953 7276.6
+764.89185 5565.4
+765.39343 2760.8
+786.47595 2587.5
+795.85339 2048.7
+796.49561 6598.3
+797.50165 2076.7
+798.42175 1581.6
+803.91467 1389.9
+804.37769 2219.8
+806.93463 3591.9
+807.42816 2632.4
+811.93414 1339.2
+812.41980 5437.9
+812.92249 5394.3
+813.41760 2395.0
+820.93158 51504.6
+821.43262 50734.3
+821.93451 25972.4
+822.39764 12665.4
+823.38672 3318.9
+853.51788 4693.5
+854.52032 1409.2
+860.95520 1313.9
+863.47821 1701.5
+863.81885 1654.6
+863.97760 1438.8
+868.96301 1651.4
+869.46674 1678.7
+869.64539 1800.3
+879.73041 1416.6
+916.52679 11421.4
+917.52997 4477.9
+927.21930 1656.4
+937.51953 1686.4
+950.56793 13085.4
+951.57446 7819.5
+952.57916 2452.3
+954.67169 1371.4
+976.46460 6715.8
+977.46771 2307.3
+1007.03564 1445.4
+1047.62122 311919.0
+1048.62427 192435.0
+1049.62817 63855.4
+1050.62952 12841.6
+1051.63586 1445.9
+1057.29834 1601.8
+1069.21570 1299.6
+1087.51477 1751.4
+1144.05774 1841.3
+1160.70642 7654.9
+1161.71228 4565.5
+1162.70813 1789.8
+1172.58789 1943.1
+1180.57825 2263.6
+1181.07214 3305.0
+1181.58069 6464.6
+1182.08948 1919.8
+1198.15808 6224.3
+1220.58240 41306.6
+1221.58508 26710.2
+1222.58704 11041.6
+1223.59021 3071.2
+1275.74695 2323.6
+1307.03662 1156.2
+1411.74207 1452.4
+1430.71948 60961.1
+1431.72192 52637.4
+1432.72559 20922.7
+1433.73352 6196.2
+1525.39026 1345.9
+1561.28394 1836.0
+1565.69031 1189.3
+1877.71655 1648.9
+1878.86938 1989.4
+1879.10083 2108.1
+1879.63318 33309.8
+1880.39624 2280.6
+1907.11182 13704.4
+1930.59680 2445.2
+S	3191	3191	889.208407933
+Z	2	1776.569
+Z	3	2664.35
+270.38568 716.4
+304.91855 655.9
+342.23825 7864.6
+343.24005 1435.8
+367.73590 652.0
+372.47299 862.6
+419.16687 646.5
+440.10114 632.0
+517.99353 605.7
+525.52966 654.0
+532.48334 1614.7
+549.18304 934.4
+552.37415 8273.9
+553.37671 2192.2
+594.24756 898.2
+595.22681 770.7
+612.25244 3530.8
+613.25311 942.4
+621.47351 608.7
+630.44226 816.5
+654.17621 634.2
+676.65619 1288.1
+689.31555 1708.3
+691.28833 750.6
+697.33948 4271.7
+698.33820 929.8
+706.39246 1172.0
+707.32458 17038.9
+708.33307 4808.5
+709.30493 1382.8
+709.33667 1193.7
+715.86267 2574.1
+716.36664 2179.3
+725.33496 118778.8
+726.33771 46757.6
+727.34143 9709.5
+728.34357 1688.8
+731.16766 736.0
+745.34949 809.7
+764.38922 2326.3
+764.89099 3052.2
+795.85968 1063.4
+796.49738 2038.5
+797.49353 919.6
+806.93964 981.1
+807.44299 1176.2
+811.91956 1220.0
+812.42200 2394.2
+812.92267 2423.1
+813.94135 747.0
+820.93127 22479.4
+821.43311 22953.0
+821.93475 9190.5
+822.39386 4747.5
+823.38995 1766.0
+853.51758 1699.2
+868.96753 1327.6
+869.46417 1553.7
+916.52814 4658.3
+917.52924 3045.2
+918.53064 816.1
+933.97424 888.1
+950.56561 4534.2
+951.57550 3040.6
+976.46179 2525.2
+977.46320 1023.6
+1006.78833 710.9
+1009.80957 694.2
+1029.61401 888.9
+1045.85144 728.3
+1047.62097 137896.9
+1048.62402 88446.3
+1049.39734 711.0
+1049.62732 30126.3
+1050.62866 6758.8
+1051.62402 1569.5
+1051.74341 835.7
+1074.60962 725.0
+1160.70581 3755.5
+1161.71130 3418.0
+1162.71143 833.1
+1181.58252 1424.3
+1198.08069 3167.6
+1220.58130 17349.6
+1221.58594 12474.1
+1222.58801 5431.2
+1223.58862 1285.2
+1274.75049 1074.5
+1275.76416 1078.1
+1276.73804 794.8
+1372.39368 719.1
+1430.71899 24192.4
+1431.72156 21989.9
+1432.72217 9707.1
+1433.72571 2850.5
+1711.48804 775.6
+1870.33167 754.3
+1876.10742 692.9
+1878.75793 934.5
+1879.59583 19442.3
+1880.25757 734.6
+1881.56470 896.7
+1906.73547 1036.6
+1907.03235 7017.2
+1907.34241 870.2
+S	3193	3193	1879.9608246
+Z	2	3758.074
+Z	3	5636.607
+532.48792 1312.3
+573.34143 663.3
+630.45148 724.3
+676.64655 888.8
+795.87634 1028.1
+803.87286 622.3
+820.84705 650.0
+825.97162 594.4
+831.04913 598.1
+860.49860 677.2
+1057.25879 823.3
+1159.92944 648.1
+1198.09314 3699.8
+1564.29907 653.5
+1601.31848 712.5
+1784.65906 646.6
+1830.17944 579.4
+1878.96411 852.2
+1879.27490 1479.0
+1879.55530 19731.3
+1880.22437 1403.2
+1880.70264 675.8
+1907.14014 6259.7
+1930.77795 845.6
+S	3194	3194	1907.45624127
+Z	3	5719.093
+Z	2	3813.065
+532.41290 625.8
+532.49988 2557.0
+630.42847 849.6
+676.65436 1162.3
+731.13721 838.3
+777.12439 599.6
+892.32355 613.6
+925.96606 721.4
+947.22906 691.2
+1045.56079 589.6
+1198.11780 3361.0
+1859.99451 644.9
+1877.44836 717.3
+1878.79712 1254.9
+1879.23328 3320.5
+1879.60205 18942.4
+1879.99524 2968.6
+1906.67480 733.4
+1907.06335 7480.3
+1930.61487 914.8
+S	3195	3195	1198.54199127
+Z	3	3592.351
+Z	2	2395.236
+333.97421 553.0
+353.88245 576.7
+381.34320 878.0
+427.14157 582.9
+470.60541 621.4
+519.61554 523.5
+532.50336 1419.2
+630.37769 1010.2
+654.02698 618.5
+666.97949 635.1
+676.65399 1080.9
+795.87347 869.3
+816.69165 608.5
+1020.80304 769.9
+1198.12695 3229.8
+1594.94568 754.5
+1876.15002 1269.7
+1878.32886 658.6
+1878.46521 658.3
+1879.59131 19721.5
+1879.82849 3023.6
+1880.91223 732.7
+1906.68408 711.2
+1907.08276 7203.2
+1907.83899 838.7
+1930.52637 906.1
+1992.23926 675.2
+S	3197	3197	1880.00324127
+Z	2	3758.159
+Z	3	5636.734
+532.49957 1952.5
+545.55029 662.5
+549.15485 778.2
+566.72656 679.3
+569.83179 610.1
+613.40564 717.7
+676.68793 1033.1
+693.06366 628.7
+775.41132 587.5
+795.88092 1035.2
+856.08875 707.2
+867.77594 634.4
+909.87354 675.1
+979.48102 610.9
+1057.32837 733.8
+1198.12280 3109.3
+1322.40894 605.6
+1514.93127 588.1
+1525.42395 697.6
+1553.82483 600.2
+1876.06360 767.8
+1878.50085 1084.3
+1878.95422 1125.1
+1879.65881 19281.3
+1879.95483 1785.4
+1880.29041 1252.3
+1880.77075 923.0
+1881.14844 740.4
+1907.10852 6996.1
+1930.58423 1016.9
+S	3198	3198	888.452491267
+Z	3	2662.334
+233.58057 752.5
+251.65657 563.4
+282.01404 647.3
+294.78830 615.4
+323.24326 628.0
+326.05554 657.6
+330.38855 583.4
+342.23828 7585.4
+343.24109 1705.2
+347.78952 618.7
+396.93860 595.4
+425.24057 588.5
+427.56906 633.1
+464.56195 584.8
+482.64655 583.9
+532.49890 2026.4
+535.15192 604.1
+552.37457 8840.3
+553.37732 1886.4
+572.33875 725.4
+582.93835 584.9
+583.39111 2048.1
+584.39539 1760.7
+612.25000 3296.3
+613.25531 780.2
+614.25610 641.5
+630.44666 898.3
+676.66162 928.3
+679.32855 751.6
+689.21448 616.2
+689.31323 1876.4
+690.29559 1392.6
+697.34015 2971.6
+698.34460 1568.9
+699.09344 622.3
+706.39594 1638.9
+707.32538 16571.2
+708.33282 3769.3
+709.30005 1184.2
+715.86542 1409.6
+716.36224 1013.5
+725.33521 112341.0
+726.33807 41608.9
+727.34064 9239.1
+728.35022 1090.7
+746.45587 2781.7
+747.46063 2257.6
+748.45654 1534.4
+764.39307 3032.9
+764.89319 2502.0
+765.39423 1622.8
+780.92578 587.6
+781.82080 576.5
+786.46899 1148.8
+796.49445 3018.2
+797.48975 1113.7
+805.34918 615.3
+806.93518 2210.8
+811.92993 1117.1
+812.42499 2817.9
+812.92029 3028.4
+820.93152 23354.0
+821.43347 21956.1
+821.93420 9979.0
+822.40247 4226.0
+822.95093 920.9
+823.39130 2311.4
+838.45215 1010.6
+842.24115 654.4
+853.51190 1265.5
+864.48816 687.4
+868.96173 1608.6
+869.97546 764.9
+872.66132 630.3
+916.52649 4917.6
+917.53217 1959.8
+918.53802 1303.6
+932.53259 1117.8
+933.53699 2192.0
+934.53778 1092.1
+940.98535 672.5
+950.56763 5043.7
+951.57166 3239.8
+952.58435 1001.9
+955.77167 693.8
+955.92303 583.9
+976.46045 2799.5
+1007.52893 705.2
+1024.53528 1610.9
+1025.53052 1393.5
+1029.61255 941.3
+1044.03455 692.2
+1046.61377 653.1
+1047.62134 132457.9
+1048.62488 81576.5
+1049.62842 28166.5
+1050.63391 5543.0
+1051.21130 742.6
+1057.27539 769.8
+1107.46277 665.8
+1140.34155 1021.1
+1160.70459 4102.4
+1161.70972 2260.0
+1162.71399 1337.6
+1180.57227 1493.8
+1181.07275 1197.8
+1181.58545 2495.2
+1182.09082 851.3
+1187.54150 647.8
+1188.59961 1210.2
+1198.11414 3574.3
+1220.58191 18644.9
+1221.58459 11760.0
+1222.58594 4738.6
+1223.59363 681.9
+1243.71033 607.8
+1243.79956 571.9
+1274.75427 1000.3
+1280.72278 937.4
+1413.69238 1108.8
+1430.71875 25512.2
+1431.72253 20987.5
+1432.72644 9418.1
+1433.72498 2779.6
+1489.75598 987.3
+1525.46936 1014.9
+1776.88635 817.1
+1873.02869 712.8
+1878.71704 841.4
+1879.13013 1032.4
+1879.60046 19695.8
+1880.08667 1141.4
+1880.53809 995.7
+1907.10828 7434.6
+1930.69714 884.4
+1946.14905 682.2
+S	3199	3199	1907.53940793
+Z	3	5719.343
+Z	2	3813.231
+532.50330 1916.0
+562.29144 652.3
+573.98285 698.2
+626.74957 814.7
+644.90460 619.8
+676.67126 1167.7
+676.96411 633.5
+747.27930 690.0
+840.15802 573.0
+846.34833 741.1
+1020.78119 737.2
+1122.96948 679.3
+1188.18323 1090.3
+1198.12012 2866.9
+1250.53723 600.8
+1370.27942 745.7
+1407.59241 606.5
+1602.90186 721.2
+1743.24915 727.7
+1875.73267 830.3
+1876.21191 767.4
+1879.62207 19315.8
+1879.88318 3087.4
+1880.13403 1597.6
+1880.76514 976.0
+1906.85547 1433.5
+1907.14783 7154.1
+1927.76941 623.2
+1930.73511 1024.9
+1942.96899 680.6
+S	3201	3201	1880.0195746
+Z	3	5636.784
+Z	2	3758.191
+532.49054 2243.8
+549.11517 1084.5
+597.61566 624.5
+601.57587 759.8
+630.36676 725.0
+795.86176 1067.3
+852.51599 741.8
+941.08801 628.2
+1011.59637 606.6
+1018.28052 594.2
+1130.39355 619.5
+1198.09790 3071.0
+1243.05652 588.8
+1258.04822 777.7
+1489.80981 672.5
+1658.20398 575.9
+1673.06189 823.3
+1787.55078 738.6
+1870.37354 890.7
+1878.08313 1027.0
+1878.94019 1713.0
+1879.23376 2206.7
+1879.59924 18488.9
+1879.99854 2142.2
+1880.30603 1649.1
+1881.13867 1190.7
+1907.10107 7818.9
+1930.46716 1221.4
+S	3202	3202	1907.50940793
+Z	3	5719.253
+Z	2	3813.171
+532.45605 1856.0
+549.18707 692.8
+628.31964 547.1
+676.66266 811.3
+686.15875 642.4
+699.67670 713.5
+713.09564 644.0
+819.03528 671.8
+859.12207 662.0
+974.08215 814.6
+1057.27698 715.4
+1145.52856 751.2
+1162.43982 641.4
+1197.90540 707.6
+1198.02380 3306.0
+1271.47742 645.5
+1348.38635 626.8
+1487.90894 643.3
+1510.07727 661.3
+1515.59827 600.3
+1525.46191 706.6
+1627.79517 562.8
+1728.88855 609.4
+1845.37939 694.4
+1873.16138 918.5
+1876.58557 722.8
+1877.07617 676.2
+1878.09875 820.9
+1878.35913 852.5
+1879.25195 5317.0
+1879.60815 18476.0
+1879.98962 5193.6
+1880.64160 870.6
+1881.04883 708.5
+1882.73206 553.2
+1907.08350 7139.5
+1907.32996 845.9
+S	3203	3203	723.1245746
+Z	4	2888.467
+188.25102 709.7
+188.26309 1074.5
+188.27628 1477.3
+188.29575 1099.8
+188.30519 1266.5
+188.31786 1174.5
+188.33800 669.6
+195.10593 694.6
+198.96867 1049.2
+199.25406 657.0
+199.25920 614.5
+199.34311 1106.0
+199.35832 2096.7
+199.41295 816.3
+199.45728 895.7
+205.29773 566.3
+210.78525 588.1
+215.19470 707.7
+264.19394 655.3
+271.31912 595.7
+272.80783 621.0
+277.32996 650.9
+310.45352 758.6
+335.65393 587.7
+341.47379 547.0
+389.67078 665.7
+413.68982 631.7
+415.22537 641.3
+435.21750 599.3
+471.24765 1498.4
+482.66663 898.4
+519.93994 735.6
+532.49213 1999.7
+533.78564 855.9
+549.16620 668.9
+549.28430 811.5
+553.28290 6375.8
+554.28479 2090.7
+556.77972 893.1
+567.28986 982.6
+595.96191 866.9
+630.31061 2335.7
+630.41888 713.2
+630.81470 2007.6
+631.31500 1094.2
+633.46484 676.6
+648.33276 814.7
+650.31647 2128.0
+650.65350 1534.5
+650.98889 1285.7
+659.57318 722.2
+662.36670 1562.6
+663.83246 5064.6
+664.08295 7219.4
+664.33423 7441.7
+664.58594 3121.0
+666.36951 785.1
+666.84534 834.1
+668.08978 6374.9
+668.33954 6973.2
+668.59027 5243.3
+668.84326 3058.2
+676.67218 1255.3
+680.37506 1525.7
+682.67365 833.9
+688.01276 5665.2
+688.34802 7883.0
+688.68134 7198.1
+689.01459 2373.0
+698.38177 779.2
+705.86578 31087.8
+706.36743 26516.0
+706.86884 11666.9
+707.37195 3207.5
+731.12781 940.7
+739.37360 1810.9
+768.39331 1133.1
+768.72375 2104.5
+769.06470 942.3
+770.39252 637.0
+779.07220 795.2
+779.40070 5005.6
+779.90161 4599.1
+780.39581 1652.0
+780.90894 709.8
+780.97321 758.8
+782.88580 625.9
+790.42554 1596.8
+791.43097 822.2
+795.86194 1100.5
+808.43121 2141.4
+826.44409 1943.3
+827.44843 765.7
+828.91156 786.8
+836.42047 3815.9
+836.92352 4616.3
+837.41943 1937.5
+857.10144 820.0
+857.42352 1210.3
+857.76324 1753.0
+858.09308 1057.8
+862.76984 3764.6
+863.10522 8014.1
+863.43939 4794.7
+863.77356 2570.8
+864.10004 1106.2
+884.92688 977.0
+885.42468 2049.3
+885.93268 1108.6
+886.42181 894.1
+893.44153 7008.2
+893.94379 8796.2
+894.44574 4062.3
+894.94794 1404.7
+896.45178 1069.5
+896.78290 1438.5
+897.11554 1137.8
+903.50464 1130.9
+933.99036 835.5
+951.43640 2401.5
+966.44641 1007.1
+966.94012 1048.1
+967.57190 565.9
+974.97223 2386.8
+975.47382 2945.1
+975.97821 1549.1
+976.48657 777.7
+1032.01831 1393.2
+1032.52063 1750.6
+1053.72119 678.9
+1112.55212 880.2
+1198.09094 3152.8
+1269.49219 649.9
+1312.75903 577.7
+1410.79016 885.9
+1525.44299 1098.1
+1561.44727 738.1
+1690.83984 646.3
+1715.43408 731.1
+1873.08191 611.4
+1878.64380 1347.7
+1879.02466 1906.2
+1879.64197 19806.2
+1880.26355 1874.6
+1880.62280 801.2
+1906.75378 1185.7
+1907.10095 7030.2
+1907.46411 1071.9
+1919.07312 789.3
+1935.68298 775.5
+1997.80420 646.2
+S	3205	3205	722.8748646
+Z	4	2887.46816
+185.36749 538.3
+188.21631 622.1
+188.24570 1047.1
+188.26247 1652.2
+188.27423 1882.8
+188.29099 2052.0
+188.31607 1469.1
+188.32828 1259.8
+188.36812 496.4
+190.05756 560.8
+198.96594 919.1
+199.25713 866.9
+199.33658 910.3
+199.34193 871.1
+199.35243 2902.3
+199.37549 960.2
+205.45621 641.1
+212.76747 655.0
+215.81691 629.3
+225.79820 598.6
+249.15976 1495.3
+267.26224 508.7
+277.14615 2160.5
+284.13989 742.6
+284.16135 2576.4
+301.12955 791.7
+312.17755 777.0
+314.14963 2089.5
+322.34439 612.9
+332.16168 1972.4
+365.34280 580.8
+367.17761 2154.8
+374.15799 596.8
+375.12939 950.3
+376.16376 1429.3
+381.33771 731.5
+397.22192 1392.6
+406.89664 539.1
+409.19412 920.4
+417.25076 3049.6
+429.72955 1096.3
+436.20026 870.0
+437.18558 887.7
+445.24472 3473.5
+446.24716 857.0
+452.25720 1804.5
+454.21027 850.0
+456.23181 2785.6
+470.31882 682.9
+470.91455 8438.0
+471.24854 4988.7
+471.58231 2759.7
+471.91785 1173.5
+477.17743 1308.9
+480.26111 1160.8
+482.63242 1343.9
+483.74933 5321.6
+484.25061 2168.5
+488.21457 1079.3
+493.25156 989.6
+494.19934 934.3
+503.28302 625.3
+505.24356 1851.1
+510.30588 1078.9
+513.30365 1731.3
+519.25555 1499.1
+519.93622 1990.1
+520.27173 3068.2
+520.60596 1158.4
+521.28729 1232.4
+522.27075 1083.8
+523.27679 864.3
+525.28162 1818.1
+532.46637 1513.2
+533.79144 2841.2
+534.29272 1914.7
+539.22589 1237.6
+540.22906 866.5
+540.28986 3180.3
+540.79211 2508.6
+548.26422 1825.0
+548.76398 1052.3
+549.28363 4897.9
+550.26337 3057.6
+551.26569 978.3
+551.79865 2964.3
+552.30432 989.9
+553.28418 87542.3
+554.28650 24140.3
+555.28833 5005.6
+556.77991 5652.8
+557.28192 3573.3
+557.78107 2266.1
+557.95135 1162.5
+558.28259 2136.4
+558.61615 983.8
+564.29205 2216.7
+565.29749 1156.6
+565.78851 879.0
+567.29187 5765.9
+568.29578 1937.5
+569.30573 966.4
+579.61084 722.5
+582.30322 16521.1
+583.30707 5491.8
+584.61334 988.0
+585.30377 3824.1
+585.81091 1439.1
+586.30756 1590.9
+588.79590 1275.6
+589.30157 1370.0
+590.28461 1119.8
+590.62543 1261.0
+590.96185 713.9
+595.96527 5365.5
+596.30042 6106.4
+596.63495 2246.9
+596.96918 896.6
+599.23297 676.7
+599.29047 1338.6
+599.78693 1062.9
+607.80115 1669.7
+608.32361 1104.8
+609.28680 1128.6
+609.32880 1073.5
+609.84418 1173.8
+613.82568 4130.0
+614.32599 3513.5
+614.82819 1982.9
+617.31323 761.3
+621.80145 3303.5
+622.30231 1701.6
+624.31458 1164.9
+630.31366 16829.8
+630.37909 672.0
+630.81525 12124.3
+631.31696 5814.6
+631.82281 1550.7
+633.29761 1731.3
+635.28168 1474.6
+638.36676 1869.9
+639.32251 2849.2
+639.82159 2211.4
+643.08282 1145.6
+643.32916 2098.3
+643.82959 691.7
+644.64514 2511.9
+644.97870 2052.0
+645.31104 2019.0
+645.64484 970.8
+647.73492 708.6
+647.83112 2724.5
+648.33514 5987.7
+648.83746 5750.4
+649.34125 2046.8
+650.31982 13200.2
+650.65430 13561.6
+650.98853 8315.2
+651.32202 3521.9
+652.30695 2704.3
+653.30560 1215.5
+655.56708 726.2
+656.83752 1151.9
+657.34149 6692.6
+657.84186 5049.6
+658.34583 2620.1
+658.84686 1313.4
+659.32959 3227.7
+659.58112 6317.9
+659.82971 6215.4
+660.08173 5227.4
+660.33081 4001.3
+662.36487 13110.6
+662.83386 2870.1
+663.37256 4146.8
+663.58435 1236.8
+663.83459 31935.2
+664.08490 44633.4
+664.33539 32919.9
+664.58588 20333.9
+664.83710 8773.1
+665.08447 2688.1
+665.84430 5212.4
+666.36957 23659.7
+666.84583 1360.7
+667.37213 8765.0
+668.09052 22123.3
+668.34088 37137.3
+668.59149 30358.0
+668.84235 15226.8
+669.09283 6567.7
+669.34192 2672.7
+672.32605 1010.5
+672.59534 3111.9
+672.84442 3621.2
+673.09711 3653.4
+673.34814 2022.0
+673.59045 726.6
+675.84961 1142.7
+676.34705 754.5
+676.66370 835.0
+677.33881 2181.8
+678.32043 1641.3
+680.37573 11374.6
+681.37915 4236.4
+681.84918 1202.9
+682.01324 1099.8
+682.33862 3192.9
+682.67377 5163.1
+683.00568 3228.8
+683.33899 1816.8
+685.85034 801.3
+687.85651 10861.0
+688.01428 45895.4
+688.34943 61853.9
+688.68280 35279.2
+688.86047 3846.0
+689.01764 15156.0
+689.35162 5958.6
+689.68225 1411.2
+696.86230 28306.1
+697.36340 26936.1
+697.86450 12396.6
+698.39825 3706.9
+699.32178 953.3
+699.39050 1467.3
+700.38239 592.5
+727.35461 1294.8
+730.70123 2498.0
+731.03333 3242.8
+731.36957 3596.6
+731.70282 1387.5
+732.04346 794.3
+739.37738 16254.1
+739.87939 16809.9
+740.38019 9219.1
+740.88068 3471.2
+741.37579 1365.9
+745.36713 16433.0
+746.37054 7941.9
+747.37311 1813.7
+751.37067 723.3
+752.36957 829.1
+753.45935 754.2
+755.37280 787.5
+755.87646 1066.0
+760.30518 1145.2
+761.39465 810.1
+762.35468 979.0
+762.72290 1230.3
+763.05212 1816.3
+763.34344 2234.2
+763.72180 1300.8
+764.34412 868.3
+764.71088 713.9
+768.39581 6897.9
+768.73029 9301.5
+769.06506 7573.6
+769.39862 4187.8
+769.73059 2682.5
+770.06500 987.3
+770.39960 2348.3
+770.74646 827.4
+773.39520 1358.4
+779.06799 2180.1
+779.40216 39967.6
+779.73779 3441.7
+779.90283 32148.2
+780.07202 1697.1
+780.40515 16122.9
+780.90491 5517.9
+781.40735 974.8
+790.42450 17586.4
+791.42865 6478.0
+792.42773 2230.2
+795.85492 1024.6
+808.43518 13019.5
+809.43951 6224.1
+810.44482 1403.3
+819.40234 841.8
+820.68817 808.9
+826.44592 14115.5
+827.45068 7078.6
+827.91095 3789.1
+828.40887 3415.1
+828.91302 2868.5
+829.43134 31522.5
+830.43176 14388.8
+830.75818 2317.1
+831.09601 2241.2
+831.43353 3365.7
+836.42261 34261.2
+836.92474 33633.5
+837.42639 18333.9
+837.92828 6164.2
+838.42767 1720.2
+840.43866 2350.9
+841.44635 1032.7
+851.75812 1814.1
+852.08832 1642.1
+857.09857 8629.3
+857.43286 12020.6
+857.76508 10024.1
+858.09869 5110.9
+858.45026 34417.0
+859.45410 19661.9
+860.45758 5535.4
+861.46625 1050.1
+862.77295 31899.7
+863.10675 48599.0
+863.44116 40172.3
+863.77502 22146.5
+864.10938 8249.5
+864.44202 3686.9
+864.78107 792.2
+876.42474 1741.2
+876.91644 872.0
+884.47095 1454.4
+884.93188 17052.1
+885.43103 17899.6
+885.93384 10183.2
+886.43134 3416.5
+886.93878 957.8
+890.78088 2865.9
+891.11469 4641.3
+891.44958 3761.5
+891.78455 1465.7
+892.11945 1715.8
+893.44501 64054.4
+893.94568 63405.8
+894.44653 34634.4
+894.77026 853.8
+894.94830 13594.0
+895.44995 3821.3
+895.95551 1338.4
+896.45605 9213.4
+896.78961 17566.9
+897.12280 12798.2
+897.45844 6652.4
+897.79388 3629.3
+898.11908 872.9
+899.43127 1362.3
+900.12390 865.8
+900.27051 700.9
+901.47430 688.8
+903.50769 7664.7
+904.51105 5073.7
+905.50946 1358.1
+916.52863 2232.6
+917.53839 1023.3
+919.79163 1194.2
+920.12262 833.0
+920.45947 1624.9
+921.51953 5981.6
+922.52118 3785.0
+923.80994 669.9
+925.46960 1209.6
+925.79706 2098.3
+926.12946 1428.2
+933.98486 1143.3
+934.47986 2399.6
+934.98657 985.2
+935.48401 826.9
+939.52905 7697.8
+940.53204 5756.1
+941.53400 1327.6
+951.43250 10016.2
+952.43433 5045.4
+953.42523 1579.7
+953.48328 857.1
+954.48969 799.9
+956.52161 782.4
+956.58051 604.8
+957.46179 1176.0
+958.46027 1255.5
+966.49353 21330.2
+966.96332 12071.9
+967.49915 13695.4
+967.96490 3971.5
+968.50085 3829.4
+969.50067 1202.7
+974.97620 24218.0
+975.47760 25616.1
+975.97852 15876.4
+976.47723 7446.4
+976.98248 2300.4
+980.46246 1649.1
+980.96802 2162.3
+981.45917 1278.1
+990.52264 3503.1
+991.02393 5099.2
+991.52466 1780.8
+994.48273 987.3
+994.97369 967.0
+998.51245 919.6
+1002.99677 1078.6
+1014.98981 984.1
+1019.03204 2216.6
+1019.54260 1910.3
+1020.04187 1655.8
+1020.53943 1167.8
+1023.00464 4601.4
+1023.50275 4466.3
+1024.00513 2326.1
+1024.50854 1138.1
+1029.51819 2499.5
+1029.59802 2386.2
+1030.52502 1646.4
+1030.59753 1273.9
+1031.51770 10755.3
+1032.01929 12387.3
+1032.52136 7453.8
+1033.02209 3302.8
+1033.51746 1561.1
+1066.56934 2375.1
+1067.58020 1286.5
+1079.48157 1221.8
+1079.58655 2705.4
+1080.58276 1990.4
+1084.57922 1254.7
+1086.64453 1341.4
+1087.52661 1216.5
+1088.03320 774.3
+1094.54114 773.9
+1095.54102 1594.5
+1096.05261 1007.6
+1096.54077 1244.2
+1100.54248 1005.6
+1102.59912 2208.8
+1111.55835 1902.8
+1112.06335 3867.2
+1112.55542 5284.0
+1113.55396 2631.6
+1114.55127 801.5
+1144.07446 765.4
+1150.58374 692.2
+1152.09119 845.5
+1159.59949 1060.6
+1168.59985 2168.9
+1169.10486 1711.9
+1176.58350 2675.3
+1177.58069 1737.5
+1198.04480 3584.7
+1198.19409 782.7
+1206.59021 1311.6
+1216.64917 1277.0
+1218.58594 794.5
+1219.59265 783.0
+1234.62146 845.6
+1236.61499 4560.3
+1237.61523 3832.5
+1238.62134 1174.6
+1239.60852 734.8
+1260.61523 840.2
+1294.66064 725.7
+1313.66064 1263.4
+1330.68201 3989.0
+1331.68530 2272.6
+1332.68042 1026.8
+1411.69861 748.8
+1417.65698 616.0
+1440.63708 686.8
+1460.70959 883.9
+1477.75806 1412.7
+1478.74951 1666.2
+1488.76904 722.8
+1525.36743 811.7
+1686.98120 671.7
+1769.07068 646.8
+1870.77930 796.8
+1877.53247 804.6
+1879.29395 1612.8
+1879.62402 19740.9
+1879.96716 1895.6
+1880.42517 876.0
+1880.87793 862.4
+1881.77563 1240.5
+1907.08435 6940.4
+1919.05627 703.7
+1930.51501 835.0
+S	3206	3206	723.6273246
+Z	4	2890.478
+188.21260 1155.2
+188.28444 1690.3
+188.29347 965.5
+188.31119 1794.0
+188.32407 1715.8
+188.33534 1505.6
+188.35727 1072.8
+195.67897 1450.5
+198.97050 1344.4
+199.24483 1386.9
+199.25642 1142.5
+199.26089 1427.8
+199.27818 1279.2
+199.31531 1150.2
+199.34222 3161.1
+199.35162 2918.1
+199.35904 2870.2
+199.37686 2617.5
+199.47484 2057.5
+204.10599 1129.6
+204.36159 1006.9
+226.74142 1247.2
+229.99655 1051.2
+238.11858 1625.8
+249.16029 3205.9
+254.53641 1180.5
+267.96347 1095.5
+277.14597 6183.1
+282.54355 1235.8
+284.13931 2856.1
+284.16031 4519.5
+295.81323 1143.1
+301.13297 1574.6
+310.93118 1260.7
+312.17749 2098.1
+314.14972 6132.5
+324.51117 1213.9
+332.16031 3977.2
+350.70267 1282.1
+360.92059 1323.6
+367.17603 4427.9
+375.13129 2213.7
+376.16278 2998.0
+391.19980 2685.7
+392.15488 1488.8
+397.22156 4217.9
+399.20828 1942.3
+404.23480 1375.1
+409.18085 1300.8
+415.73389 2437.8
+417.24872 6961.3
+427.23038 1849.7
+429.72916 2251.4
+430.23233 1900.8
+436.19934 1429.6
+437.18381 2726.9
+443.74478 1526.7
+445.24396 7367.6
+448.25125 1405.2
+452.11667 1218.8
+452.25610 2049.5
+454.20715 1960.1
+456.23172 6888.0
+470.27029 1867.7
+470.91394 18726.1
+471.24847 17551.5
+471.58218 7224.0
+471.91766 2468.1
+477.17444 2152.1
+483.74896 11271.1
+484.24985 8081.4
+484.75195 2133.1
+488.21625 2048.7
+498.26596 1844.7
+505.23990 5110.4
+510.30688 2161.8
+511.22916 2281.3
+519.25452 4339.2
+519.93695 2885.8
+520.27216 6801.6
+520.60388 1699.2
+521.28351 1793.0
+522.26953 4473.0
+523.26801 1947.5
+525.28290 4705.1
+532.48096 3823.2
+533.78882 4152.1
+534.29095 2056.3
+534.79889 1651.4
+536.26038 1358.8
+539.22449 3205.3
+540.22821 1696.2
+540.29108 5493.3
+540.79419 1803.0
+548.26697 3773.9
+548.77081 3414.8
+549.28217 10395.7
+550.26251 6975.4
+551.26599 1607.4
+551.79938 2869.4
+552.30212 1879.2
+553.28387 186978.1
+554.28619 50317.2
+555.28870 8689.7
+556.29816 1497.0
+556.77942 13038.4
+557.28094 9765.4
+557.78284 2149.2
+558.28168 1523.2
+558.61731 1911.0
+564.29254 4756.5
+565.77991 1798.9
+566.28662 2063.3
+567.29163 12728.1
+568.29944 3448.0
+571.80768 1245.1
+582.30298 35136.1
+583.30652 11384.2
+584.31030 1704.2
+584.94714 2087.9
+585.30505 7041.6
+586.30597 3715.9
+588.79572 5010.7
+589.29791 3187.7
+590.28931 3379.0
+590.62415 2877.0
+591.28381 1636.6
+595.96503 11953.6
+596.30066 7623.6
+596.63416 5113.4
+596.96619 2377.1
+599.24500 1899.3
+606.29852 1319.5
+607.28717 2887.1
+607.80054 3417.5
+608.32379 3123.2
+609.32751 1762.1
+610.46368 1270.3
+613.82465 12377.0
+614.32672 10283.7
+614.82764 2995.2
+616.27631 2271.4
+616.81921 1670.6
+617.28082 1309.0
+618.39752 1269.7
+621.80219 5141.4
+622.30341 3655.7
+622.80200 1540.8
+624.31409 2169.8
+630.31354 39068.3
+630.81451 29212.3
+631.31531 12226.3
+631.82013 3269.7
+633.30475 2896.7
+635.28027 3240.1
+638.36591 5334.6
+638.81116 1596.2
+638.96869 2878.6
+639.32153 5407.7
+639.82080 5340.2
+643.07306 2544.8
+643.57849 1761.3
+644.64612 4146.2
+644.97827 7364.7
+645.30731 2916.8
+647.32922 1834.3
+647.83148 7262.1
+648.33539 14145.6
+648.83643 9625.9
+649.33588 4164.2
+650.31927 21972.0
+650.65417 23227.8
+650.98798 14447.0
+651.32074 6129.8
+652.30725 7069.2
+653.30975 1992.1
+656.83362 1647.7
+657.34167 14227.4
+657.84125 11905.9
+658.34039 4014.4
+659.33032 4539.2
+659.58032 10839.0
+659.83112 19083.2
+660.07947 7573.7
+660.33124 4050.7
+660.57617 2042.2
+662.36572 26347.6
+662.63141 1225.4
+662.83459 5540.4
+663.37146 10169.1
+663.58746 4755.1
+663.65961 1551.9
+663.83423 70386.3
+664.08490 105400.9
+664.33539 77315.0
+664.58545 34422.1
+664.83722 16386.6
+665.08649 7559.9
+665.84253 10873.3
+666.36957 49459.4
+666.84656 2456.1
+667.37164 15968.1
+668.09033 39274.4
+668.34064 59518.0
+668.59131 48525.8
+668.84161 27519.2
+669.09296 12243.0
+669.34344 4360.9
+672.32977 2000.4
+672.58978 2229.3
+672.84357 3669.2
+673.09662 4690.1
+675.85120 2180.4
+676.66858 4407.0
+676.99908 2471.4
+677.33960 3655.7
+678.32410 3802.1
+680.37671 20562.3
+681.37738 8418.1
+681.85803 3286.7
+682.34070 11680.6
+682.67194 12919.0
+683.00714 8517.8
+683.34137 2445.1
+685.83417 1949.0
+687.85663 21767.5
+688.01398 83286.0
+688.34955 99700.4
+688.68274 57776.5
+688.85840 6305.7
+689.01642 27042.4
+689.35278 11645.0
+689.68549 1410.9
+695.34729 2039.0
+696.86194 68593.2
+697.36285 51535.2
+697.86395 24616.7
+698.34735 4902.9
+698.39954 6740.1
+698.86707 1775.9
+699.02979 1491.2
+699.38977 4509.6
+701.35535 1746.3
+702.13373 1491.6
+705.86700 53641.6
+706.36755 9207.8
+727.35681 2132.0
+731.03558 3613.6
+731.09363 1437.5
+731.36902 2057.2
+739.37769 16319.9
+739.87878 16722.6
+740.38184 7141.0
+740.88379 2637.2
+741.09448 1646.5
+741.37805 2690.5
+741.87708 1164.4
+745.36664 34517.2
+746.36920 16097.1
+747.37183 5527.0
+748.36542 1469.7
+755.38007 2792.3
+762.37152 1443.1
+762.72168 3035.6
+763.05249 4676.2
+763.34723 5117.3
+764.35291 1404.2
+768.39484 15295.9
+768.72992 18897.8
+769.06390 13205.0
+769.39569 5161.0
+769.73273 3890.4
+770.06879 1886.4
+770.39972 3232.5
+770.90173 3707.4
+771.40057 1580.1
+773.40076 1918.1
+779.06775 2481.9
+779.40173 79708.5
+779.74170 3807.6
+779.90277 66625.9
+780.40515 33250.7
+780.90436 10841.9
+781.40668 2964.9
+790.42493 34145.8
+791.42694 17173.0
+792.43066 5242.5
+795.86334 1548.7
+801.43024 2527.1
+802.43530 1521.2
+808.43451 27372.5
+809.44000 11676.1
+810.45044 2681.5
+820.68964 1950.7
+825.41492 1668.6
+826.44562 24085.1
+827.45081 12398.8
+827.90967 7718.5
+828.40802 6492.2
+828.91455 4246.9
+829.43097 61275.6
+830.43182 27265.6
+830.76074 2054.7
+831.08722 1921.5
+831.43304 5383.5
+836.42249 75168.1
+836.92426 66918.9
+837.42535 35481.7
+837.92828 13893.9
+838.43494 4777.4
+840.43805 4682.1
+841.45178 2923.0
+851.10028 1882.6
+851.42285 2622.4
+852.09503 1745.5
+852.43475 1448.2
+852.75696 1461.3
+856.75958 2523.6
+857.09827 18484.4
+857.43164 29707.1
+857.76526 20895.9
+858.09979 11173.6
+858.45044 69240.2
+859.45319 36017.4
+860.45404 10848.8
+861.45801 2138.5
+862.77216 62615.0
+863.10687 106621.3
+863.44080 74861.7
+863.77515 38660.3
+864.10974 15957.6
+864.44342 7403.2
+876.42615 2836.8
+876.92706 1476.0
+877.42261 1965.3
+884.46887 3329.6
+884.93134 40720.1
+885.43164 36082.9
+885.93341 19562.5
+886.43054 5290.1
+890.77771 7570.7
+891.11572 9842.7
+891.44885 6840.0
+891.78979 3444.4
+893.44464 137982.9
+893.94525 130742.6
+894.44629 77747.1
+894.94769 27332.6
+895.44916 8621.2
+895.94672 2236.7
+896.45483 24563.8
+896.78882 28858.0
+897.12323 28667.4
+897.45654 13762.7
+897.78766 4768.9
+898.12549 2368.5
+898.93024 2483.9
+899.42572 3252.4
+899.77557 1774.1
+899.93231 1707.3
+900.12146 3207.2
+903.50946 18822.0
+904.51068 10155.6
+905.51093 4079.7
+915.47607 1949.7
+920.14001 2471.5
+920.45618 2888.3
+921.51691 12680.8
+922.51929 7056.7
+923.52148 2395.4
+923.79071 1901.1
+925.47217 1429.2
+925.80103 2871.2
+926.13568 3173.0
+939.52838 17807.2
+940.53259 9457.3
+941.53766 3128.3
+951.43158 2872.2
+953.49426 2715.9
+955.50256 1755.6
+957.95349 2526.9
+958.45404 2400.8
+958.95117 1892.3
+962.06879 1288.8
+966.49390 37526.0
+966.96417 23620.1
+967.49457 19321.3
+967.96466 5822.7
+968.49908 7135.3
+974.97614 45172.0
+975.47772 57135.5
+975.97833 33858.2
+976.48108 13742.2
+976.98334 3358.9
+980.46356 4174.9
+980.95728 3966.3
+981.46704 2080.8
+993.97791 3360.4
+994.49377 2183.8
+998.51428 2658.3
+1003.00055 1684.5
+1003.50171 1980.2
+1005.50970 1493.5
+1015.49292 1625.3
+1023.00671 9675.1
+1023.50647 13028.6
+1024.00745 7286.8
+1024.50488 3211.5
+1029.51355 3556.7
+1030.52478 2890.0
+1031.51733 22765.1
+1032.02014 26843.7
+1032.52173 16673.3
+1033.02502 7898.0
+1033.52661 2131.1
+1045.27576 1314.9
+1051.51758 1504.7
+1060.04236 1328.7
+1066.57117 3471.4
+1067.57800 3409.9
+1074.68579 1439.2
+1079.59009 4182.6
+1080.58826 2508.3
+1084.58752 2282.6
+1085.59448 2109.2
+1087.01978 1658.8
+1087.54419 2512.1
+1088.03540 2100.7
+1089.86023 1314.8
+1095.53687 3848.6
+1096.05518 2861.0
+1096.54407 2898.4
+1099.54712 2555.7
+1100.55298 2380.5
+1102.59253 2464.7
+1103.05298 2019.3
+1104.04077 2109.5
+1111.55078 4412.1
+1112.06067 4408.4
+1112.55554 8367.2
+1113.55225 4449.5
+1114.57617 1479.6
+1119.56226 1534.8
+1144.08789 1630.7
+1150.58105 2031.6
+1152.08643 1509.0
+1152.59460 2762.9
+1159.56384 2219.7
+1168.60498 3217.5
+1169.10229 2198.9
+1169.61267 1497.9
+1176.58179 6310.6
+1177.58447 3760.8
+1198.07703 6294.9
+1201.40564 1417.8
+1206.59497 2522.3
+1207.59961 1760.2
+1218.61023 2425.6
+1219.60132 1608.2
+1236.61523 12249.2
+1237.62122 7303.2
+1238.62085 2722.4
+1239.61133 1825.1
+1260.62109 1519.7
+1313.66895 2480.4
+1330.68091 6762.7
+1331.67981 6141.6
+1332.68054 2343.0
+1477.76367 1983.7
+1478.74939 2678.3
+1525.36035 1641.7
+1528.74060 1181.8
+1534.40967 1538.8
+1777.79980 1221.9
+1877.06152 1652.3
+1877.90613 1706.2
+1878.29211 1232.4
+1878.85327 1500.2
+1879.21545 2385.4
+1879.61438 37583.4
+1879.95667 1554.2
+1880.38586 1534.3
+1907.10352 14395.8
+1930.53857 2017.7
+1958.28967 1459.1
+S	3207	3207	1879.8767571
+Z	4	7515.47573
+532.49683 1861.2
+630.93372 634.7
+664.57996 695.2
+676.64783 947.6
+731.07843 754.4
+749.86646 765.1
+795.25726 614.0
+795.86572 949.5
+846.72888 584.5
+1038.88782 703.6
+1176.08472 624.4
+1198.10645 3100.0
+1325.31201 697.8
+1489.78748 724.2
+1525.32019 947.7
+1536.35413 601.2
+1574.20618 621.8
+1709.24390 670.4
+1879.58496 19336.4
+1880.03345 762.7
+1880.19788 1059.7
+1883.85339 827.6
+1907.09204 6101.3
+1919.04517 784.8
+1930.48743 1060.4
+S	3209	3209	722.8743146
+Z	4	2887.46596
+185.56975 615.9
+188.24159 666.6
+188.25502 1111.9
+188.26306 1512.5
+188.27734 2089.6
+188.29478 2013.4
+188.30733 1225.4
+188.32065 1436.2
+188.34531 609.3
+189.93625 608.8
+190.13266 633.5
+198.97157 782.9
+199.25728 779.0
+199.32243 882.5
+199.33588 1218.6
+199.35602 2983.1
+199.38098 680.3
+199.45352 1106.2
+204.83443 621.3
+216.46277 554.9
+223.95908 610.3
+230.88264 695.1
+236.67172 585.3
+262.62671 667.2
+305.44995 626.7
+309.42053 658.1
+330.13275 713.2
+346.64249 528.9
+350.25864 638.1
+379.03775 604.4
+470.91580 977.8
+471.07980 657.3
+471.58206 1146.0
+475.85876 686.7
+520.27246 638.5
+532.50275 1593.5
+532.54449 1002.9
+549.27844 1194.1
+553.28210 7087.2
+554.28729 1921.5
+565.44299 617.4
+567.29205 976.0
+571.90289 772.5
+630.31909 2833.1
+630.81390 1917.7
+631.31476 1071.2
+643.32434 684.1
+650.65320 3219.0
+662.36420 1383.1
+663.36682 760.8
+663.83301 3865.0
+664.08405 8244.5
+664.33289 8253.9
+664.58325 3412.6
+664.83356 934.2
+665.84021 978.8
+666.83319 769.4
+668.08759 4441.7
+668.33936 7229.6
+668.58911 4496.2
+668.83984 3998.0
+676.63940 796.6
+680.37335 1675.9
+681.38293 938.7
+682.33600 1117.9
+683.00751 1286.5
+688.01312 6863.6
+688.34753 8759.9
+688.68298 4538.6
+689.01654 2485.7
+698.39301 842.5
+705.86536 34112.4
+706.36719 29920.6
+706.86835 12268.2
+707.36938 3272.9
+768.39563 2599.6
+769.06458 1429.9
+779.39752 3269.5
+779.89948 4775.2
+780.40625 2582.2
+790.42157 2902.4
+791.42432 899.5
+795.88019 1220.3
+808.10150 651.1
+808.43610 1281.3
+809.43445 694.0
+824.49347 846.9
+826.44189 1567.6
+828.39948 829.1
+836.41846 3554.6
+836.92053 3612.8
+837.42590 2462.9
+856.70935 670.2
+857.43170 1505.9
+857.76593 961.0
+857.97717 870.9
+858.10779 886.4
+858.45044 744.5
+862.77179 4619.7
+863.10425 9661.3
+863.43652 4982.5
+863.77435 2788.8
+884.92883 1163.5
+885.43176 1999.5
+886.42767 761.8
+891.44775 935.2
+891.77875 707.9
+893.44312 7506.5
+893.94366 9848.4
+894.44489 4487.2
+894.94666 1310.4
+896.44940 1154.2
+896.78833 2096.2
+897.11395 1371.1
+897.45990 707.8
+903.50800 1314.6
+924.28577 655.3
+933.40356 721.8
+939.52698 1233.9
+951.43750 1495.2
+967.46606 828.0
+974.97125 2355.5
+975.47449 2769.4
+975.97791 1928.7
+990.09351 711.0
+1023.50348 933.6
+1031.51025 908.2
+1032.02014 1878.6
+1032.51086 1089.8
+1033.01147 805.1
+1052.09290 579.3
+1112.06885 613.3
+1139.65686 632.4
+1198.12964 3028.1
+1217.79028 598.4
+1306.10913 651.2
+1327.66833 728.8
+1475.08643 582.5
+1586.59155 654.5
+1629.21899 657.0
+1717.54004 652.9
+1789.88635 805.5
+1872.97156 647.5
+1878.59338 915.3
+1878.95813 1202.8
+1879.53809 19455.2
+1906.94641 7092.0
+1930.42090 1043.8
+1968.15857 732.2
+S	3210	3210	723.6268246
+Z	4	2890.476
+188.22075 1121.6
+188.23146 982.8
+188.25742 1210.0
+188.28085 1807.3
+188.30069 1058.6
+188.31190 974.7
+188.31990 1033.7
+188.33792 1160.9
+188.35201 1233.3
+190.15005 1288.1
+199.06908 1598.3
+199.25529 1587.8
+199.32417 1660.3
+199.33621 2123.2
+199.35304 4746.2
+199.37683 1290.6
+199.40967 1240.7
+199.45213 1456.3
+222.99904 1177.5
+232.70560 1036.0
+245.01018 934.4
+249.15958 2977.9
+261.08673 1128.5
+277.14603 5623.3
+284.13882 2138.7
+284.16052 5839.8
+288.47360 903.3
+294.31879 1223.4
+301.13144 1370.4
+314.14960 7372.2
+332.16089 3383.5
+341.12564 1402.4
+367.17581 3803.9
+373.18936 1484.4
+375.13031 2576.6
+376.16101 3684.6
+377.38034 1119.8
+381.33075 1402.2
+392.15640 2064.0
+396.19919 1607.5
+397.22238 3209.8
+414.21399 1790.2
+415.73105 2203.6
+416.23166 1366.8
+417.24957 8351.8
+418.25360 1582.9
+429.72836 2362.9
+437.18311 3619.3
+445.24509 5229.8
+446.24725 2169.5
+452.25815 3037.1
+452.76175 1450.2
+456.23151 6088.6
+457.23465 1550.1
+470.26868 1371.1
+470.91428 18828.7
+471.24832 15698.7
+471.58307 6984.9
+477.17889 2491.8
+482.62363 1268.1
+483.74869 10726.3
+484.24969 5693.9
+485.20358 1076.7
+488.21286 1376.3
+489.26059 1269.0
+505.24121 3567.8
+510.30685 2203.2
+515.25830 1382.7
+519.25385 2189.4
+519.93671 8172.5
+520.27222 3678.2
+520.60413 2019.2
+522.26794 3223.5
+525.28027 4434.2
+526.28668 1498.7
+527.32629 977.4
+532.49213 2747.9
+533.79089 3095.2
+534.29016 3079.9
+534.79114 1315.6
+535.27167 1984.1
+536.25391 1697.8
+539.22412 4001.3
+540.29095 5874.4
+540.78979 2607.8
+548.26636 3483.9
+548.76910 3122.4
+549.11096 1461.7
+549.28247 8057.9
+550.26154 4789.4
+551.26654 2484.8
+551.79980 2483.7
+552.29938 2163.4
+553.28381 165518.4
+554.28613 42601.4
+555.28918 8202.7
+556.31256 1078.3
+556.78015 9870.0
+557.28143 8606.3
+557.77820 1364.6
+557.95190 2301.9
+558.62115 1786.5
+564.29205 4162.8
+565.77991 1166.2
+567.29236 12752.7
+568.29620 3836.2
+573.66016 1105.1
+582.30292 30155.0
+583.30676 10178.3
+584.61517 1578.9
+585.30438 7570.7
+586.30713 2591.3
+588.79462 4255.7
+589.30096 2149.1
+590.28625 2239.6
+590.62396 1950.5
+595.96588 9634.3
+596.29962 9917.2
+596.63318 3004.3
+599.99713 1645.7
+600.30750 991.1
+606.17261 1072.6
+607.28760 1714.8
+607.80243 3682.0
+608.31598 1879.4
+609.84503 1617.5
+613.82520 10737.8
+614.32587 8979.4
+614.82666 2762.5
+616.30176 2217.6
+621.79974 4219.9
+622.30188 3230.2
+622.80322 2516.4
+624.31238 2630.9
+625.31866 2156.5
+630.31323 33131.2
+630.81500 25716.7
+631.31726 10427.5
+631.81586 3118.7
+633.29950 3080.0
+635.28448 1763.7
+638.36481 4875.3
+638.97052 1734.7
+639.32428 3478.5
+639.81836 4615.6
+643.07178 1958.1
+643.32404 2078.7
+643.57568 1837.2
+644.64465 3853.5
+644.98022 3910.3
+645.31305 3294.7
+645.64502 1487.4
+647.83337 4844.0
+648.33575 12536.3
+648.83795 8854.4
+649.33551 4441.2
+650.31952 20973.2
+650.65448 24716.2
+650.98761 9833.9
+651.32196 5536.9
+652.30927 4610.3
+655.31964 1522.2
+656.83899 1559.2
+657.34149 13855.3
+657.84210 8704.8
+658.34229 2933.6
+659.33057 2102.9
+659.58002 10525.8
+659.82947 13977.8
+660.08087 7882.5
+660.32959 5578.5
+660.58118 2986.2
+662.36469 23953.6
+662.83472 6601.7
+663.37152 7315.1
+663.58636 2618.8
+663.83453 61066.2
+664.08478 87815.0
+664.33539 72523.0
+664.58606 39174.1
+664.83667 13144.3
+665.08508 3759.9
+665.84204 8043.3
+666.36969 43960.9
+666.85077 1951.0
+667.37134 16123.3
+668.08997 32992.0
+668.34064 56910.9
+668.59106 45798.2
+668.84174 25475.0
+669.09351 9855.3
+669.34039 4787.4
+672.84247 4014.6
+673.09399 3185.2
+673.34760 3194.7
+673.59082 1654.6
+674.36768 1378.1
+676.66718 3770.4
+676.99408 2428.6
+677.33624 4731.6
+678.31458 2768.7
+680.37677 20116.6
+681.37939 7022.0
+681.86267 1895.4
+682.33966 9620.5
+682.67371 11486.0
+683.00800 7966.1
+683.34998 1631.9
+687.85681 16218.8
+688.01416 82150.5
+688.34985 92908.1
+688.68274 56871.4
+688.85999 5646.2
+689.01703 27323.7
+689.35217 10981.8
+689.68787 1862.1
+690.00781 1261.3
+695.88898 1439.6
+696.86200 54087.2
+697.36346 42575.1
+697.86469 21401.7
+698.34265 2601.4
+698.39581 6889.2
+698.86877 2152.3
+699.03186 2161.8
+699.38892 2829.1
+699.87592 1526.3
+701.34760 1812.1
+703.90308 1291.0
+705.86633 6816.1
+706.16974 1116.3
+706.36566 2723.0
+727.35510 2195.5
+730.69714 2600.7
+731.02997 3447.5
+731.37134 3852.4
+739.37781 15459.1
+739.87921 17753.9
+740.37958 6864.3
+740.88226 2263.8
+741.38513 1758.7
+741.63196 1246.6
+741.70599 1457.5
+741.89392 1300.6
+743.58405 1409.1
+745.36682 33384.3
+746.36963 15015.4
+747.37244 3977.1
+753.16608 1641.8
+755.38055 2412.5
+755.88507 1840.1
+762.72003 1734.4
+763.05042 2455.7
+763.34460 5366.0
+764.35815 1545.1
+768.39551 13168.0
+768.72937 20072.6
+769.06445 12667.6
+769.39539 4827.3
+769.73706 1319.3
+770.07343 1894.3
+770.39941 4287.6
+770.89801 2206.6
+773.39471 2030.5
+779.06635 3939.2
+779.40167 76302.2
+779.73706 2697.1
+779.90277 62086.7
+780.06921 2298.0
+780.40497 31578.2
+780.90424 10919.5
+781.41412 1431.5
+782.63293 1408.0
+789.35870 1157.8
+790.42480 32959.4
+791.43030 12583.1
+792.43158 3714.3
+795.87476 2080.9
+801.43262 1979.0
+808.43488 25886.7
+809.43762 10453.2
+809.68195 1321.2
+810.44629 1702.8
+824.74353 1716.5
+825.41718 2154.2
+826.44556 23208.0
+827.45111 10346.4
+827.90839 6474.7
+828.41010 5906.6
+828.91278 3118.5
+829.43115 59391.9
+830.43256 25702.3
+830.75922 2035.8
+831.08643 2331.6
+831.43134 6277.9
+836.42273 61283.0
+836.92444 62088.6
+837.42529 32214.2
+837.92712 11190.9
+838.43347 2559.9
+840.44043 4660.3
+841.44629 3016.6
+851.09131 1703.1
+851.42065 2335.2
+851.76141 2569.0
+852.09161 1962.4
+856.76141 1855.9
+857.09766 17974.7
+857.43231 24745.5
+857.76526 18799.0
+858.10059 11794.8
+858.45013 66097.9
+859.45349 33080.4
+860.45563 11210.9
+861.46478 2056.7
+861.73657 1067.3
+862.77258 56147.6
+863.10675 87423.7
+863.44098 67867.4
+863.77478 38584.1
+864.10962 18603.0
+864.44275 6015.9
+864.78125 1266.4
+873.02673 1424.2
+876.41333 2726.4
+877.42578 1738.4
+877.76099 1342.0
+884.46936 3096.0
+884.93152 29422.3
+885.43146 35379.0
+885.93359 18578.5
+886.43237 4723.7
+886.50848 1080.1
+886.93463 2307.7
+890.78003 5504.2
+891.11450 6757.1
+891.44702 7382.1
+891.78192 3133.3
+892.10718 1084.2
+892.44855 1862.1
+893.44464 123092.9
+893.94525 119190.2
+894.44629 68180.6
+894.94812 25713.1
+895.44958 7537.8
+895.93988 1753.1
+896.45581 16524.7
+896.78937 28788.7
+897.12372 22266.2
+897.45892 9162.8
+897.79199 5202.0
+898.12579 2980.1
+898.93463 2179.9
+899.43207 2884.4
+899.78748 1704.0
+899.95258 2038.6
+900.44110 2061.5
+903.50964 16073.8
+904.50977 10340.1
+905.50482 2337.5
+908.44098 1423.7
+915.09943 1041.9
+915.47913 1779.1
+920.11444 1637.6
+921.51941 13418.8
+922.52179 6775.3
+923.44830 1376.0
+923.51038 1777.7
+925.46515 2168.2
+925.79962 2713.1
+926.47522 1241.7
+939.52948 16405.2
+940.53259 7222.5
+941.53882 2057.2
+951.42981 4475.8
+952.42804 1585.2
+953.49316 1474.9
+954.49860 1332.3
+957.95154 1922.4
+958.45715 3299.4
+966.49353 36561.1
+966.96472 26121.7
+967.49701 21095.9
+967.96625 5181.4
+968.49738 7809.5
+971.94769 1119.6
+974.97614 45891.8
+975.47784 45528.4
+975.97833 30515.3
+976.47986 8798.3
+976.98419 2351.8
+980.46161 3630.5
+980.95660 3656.4
+981.47009 1866.2
+991.02673 2341.3
+993.98322 1823.4
+994.47333 1448.0
+995.47723 1269.0
+999.50836 1393.7
+1002.98224 1994.6
+1011.31061 1120.2
+1012.52905 1225.7
+1015.00244 1715.7
+1018.04523 1277.6
+1019.53198 1800.4
+1023.00629 10128.9
+1023.50842 10086.2
+1024.00720 6907.5
+1024.51733 1571.0
+1029.51050 3201.8
+1030.51904 3488.5
+1031.51770 22647.3
+1032.01929 22002.3
+1032.52148 14611.3
+1033.02417 6232.2
+1033.53137 2738.1
+1038.04565 1136.8
+1057.29089 1396.5
+1059.51990 1480.1
+1066.57446 5630.0
+1067.57239 2443.8
+1079.57886 5846.5
+1080.58875 4273.4
+1082.54578 1373.1
+1084.58459 3549.2
+1085.60339 1542.2
+1087.03894 2233.2
+1087.54248 2573.0
+1094.02551 1585.4
+1095.54297 3310.8
+1096.04102 3843.7
+1096.54858 2358.4
+1099.55151 2501.1
+1100.56555 1906.2
+1102.59814 3941.0
+1104.04663 1474.1
+1111.55383 2896.9
+1112.05725 3387.0
+1112.55481 9183.5
+1113.55444 3907.2
+1114.54102 1526.1
+1152.09216 1624.0
+1152.59106 1700.0
+1160.08057 1775.0
+1168.61133 2169.1
+1169.10767 2054.1
+1169.59167 1578.8
+1176.58289 5516.1
+1177.58777 1776.7
+1198.09717 5482.7
+1206.59363 2415.2
+1233.60999 1392.1
+1234.60828 1503.5
+1236.61658 9127.5
+1237.61877 8047.7
+1238.62244 3669.6
+1277.64380 2104.9
+1294.66504 1632.9
+1295.65234 1273.0
+1313.65601 2566.2
+1330.67969 6097.8
+1331.68323 4876.1
+1332.67810 1979.2
+1458.98645 1497.6
+1477.74304 2728.5
+1478.74585 2842.4
+1479.75024 1410.4
+1494.15381 1042.3
+1523.11560 1196.6
+1525.31702 1288.1
+1755.41382 1197.1
+1762.06201 1159.3
+1878.28247 1492.6
+1878.89722 2580.9
+1879.61658 33002.5
+1879.92615 2900.5
+1880.32678 2363.7
+1881.02283 2058.5
+1907.10242 12253.8
+1930.37683 1574.9
+S	3211	3211	1880.0068246
+Z	3	5636.745
+Z	2	3758.166
+518.45581 567.8
+532.51410 2179.3
+642.83081 650.6
+682.24396 627.7
+721.18671 712.2
+764.85638 705.1
+795.87854 920.5
+906.81390 625.6
+915.28741 715.9
+1001.82684 568.3
+1021.96429 670.5
+1075.52124 564.8
+1115.58179 615.6
+1116.82373 660.4
+1187.70349 763.4
+1198.15076 3158.2
+1486.57361 677.0
+1489.71240 710.1
+1517.15295 630.5
+1646.37000 778.2
+1791.20361 711.8
+1870.39075 692.0
+1878.97998 789.6
+1879.61047 19265.7
+1879.88269 3176.4
+1880.20203 826.0
+1880.57800 871.6
+1881.35352 592.7
+1882.11682 778.0
+1904.79395 760.0
+1907.15552 7354.4
+S	3213	3213	1880.0048246
+Z	2	3758.162
+Z	3	5636.739
+520.63489 698.4
+532.48608 2011.8
+562.38971 564.4
+586.50189 647.2
+676.65863 901.8
+795.84937 914.2
+1002.53949 738.8
+1021.99475 747.3
+1039.23181 624.3
+1057.27417 821.9
+1070.05322 639.8
+1123.59766 642.0
+1198.08362 3037.1
+1198.21082 864.8
+1374.40039 727.5
+1879.05994 1583.3
+1879.58167 19937.6
+1880.17407 1284.0
+1880.57996 854.9
+1907.08984 7296.8
+1930.51514 725.0
+S	3214	3214	722.8734621
+Z	4	2887.46255
+188.14951 685.5
+188.22549 694.4
+188.24382 830.7
+188.28580 2124.9
+188.29648 1961.1
+188.31459 1354.1
+188.32439 1082.3
+188.33591 657.0
+198.96930 759.4
+199.24699 771.5
+199.26082 845.3
+199.34270 1386.3
+199.35753 2352.3
+199.36874 772.2
+199.37724 1039.8
+199.44098 871.1
+199.45596 1006.5
+232.91454 621.2
+240.25743 698.3
+242.52589 641.1
+249.15962 914.8
+277.14682 915.2
+284.16013 1596.9
+292.21426 706.0
+305.12424 658.2
+338.07983 746.5
+342.28381 672.5
+350.28403 815.1
+367.17584 860.7
+369.68689 622.8
+376.16104 1193.3
+392.15561 642.5
+397.22131 912.0
+417.81876 877.2
+427.56241 865.1
+436.20367 908.3
+439.56918 681.5
+442.73386 684.7
+447.40125 764.5
+452.25800 693.6
+452.76007 666.4
+456.23267 1036.9
+470.91370 5001.3
+471.24753 4505.0
+471.58191 1658.8
+471.91678 705.8
+476.21793 861.3
+483.74820 1374.3
+489.97049 599.9
+505.23831 1504.1
+510.30795 889.6
+513.30371 1653.1
+519.25317 911.3
+519.93585 1710.7
+520.27069 1237.5
+525.27856 775.0
+532.45898 1863.4
+533.08044 587.9
+533.78931 1432.2
+539.22290 946.3
+548.27429 778.5
+549.28168 1333.7
+550.26166 983.9
+551.79724 1092.9
+553.28314 26324.6
+554.28619 8171.2
+555.28760 1671.0
+556.77832 2118.0
+557.28094 2360.0
+558.28131 1532.3
+558.62579 608.4
+567.29181 3245.4
+579.11871 669.8
+582.29938 1620.2
+583.30908 738.1
+585.30139 1988.0
+586.31262 668.4
+588.79053 1034.4
+589.29224 1179.7
+590.28900 772.5
+590.62427 1261.1
+590.95520 799.0
+595.96350 1766.3
+596.29761 2803.4
+596.63312 1040.5
+599.78540 713.9
+609.84174 1300.4
+613.82532 1051.5
+621.80023 1772.7
+622.30664 1332.0
+630.02258 647.4
+630.31232 9620.7
+630.42975 685.9
+630.81390 7409.4
+631.31506 2659.7
+633.29254 890.4
+635.27576 688.3
+638.36316 1119.6
+639.32056 1644.3
+639.82147 1008.5
+643.07831 714.7
+643.31946 1058.8
+644.64532 1880.1
+644.97919 2120.3
+647.83215 994.7
+648.33112 1039.0
+648.83392 908.1
+650.31836 5474.0
+650.65332 6938.2
+650.98676 3935.1
+651.32562 1305.2
+652.30627 1766.8
+653.30994 755.7
+657.34369 2638.7
+657.83966 2939.3
+658.33899 1480.7
+659.32922 1005.6
+659.57916 2280.0
+659.82935 4570.3
+660.07880 1867.6
+660.32782 1508.1
+662.36609 5089.3
+663.37012 1378.0
+663.83344 16834.2
+664.08356 27226.0
+664.33423 28295.3
+664.58441 12151.0
+664.83569 3390.1
+665.08539 1235.3
+665.84021 1586.7
+666.37219 3571.3
+667.37048 1804.5
+668.08911 14579.6
+668.34003 24636.9
+668.59033 14496.6
+668.84143 7422.1
+669.08972 3652.2
+669.34509 1225.4
+673.09540 1764.5
+673.33746 694.4
+673.59021 770.9
+676.94446 572.4
+677.33533 887.5
+679.43896 2899.0
+680.37573 5597.2
+681.37860 2578.9
+682.33893 2519.1
+682.67487 3259.1
+683.00415 1917.6
+683.33411 1823.3
+687.85687 1048.8
+688.01337 19678.3
+688.34784 30183.4
+688.68225 17278.9
+689.01593 6595.2
+689.35071 2886.0
+696.86157 2588.9
+697.36255 5021.7
+697.86530 2823.3
+698.33746 1038.8
+698.39471 2095.2
+699.38983 918.5
+705.86609 118831.7
+706.36725 101884.0
+706.86859 37991.2
+707.37061 5559.8
+715.69061 680.4
+739.38031 2279.0
+739.87756 1673.7
+740.37762 1138.8
+745.36700 1902.1
+746.36530 1936.0
+754.88892 653.9
+763.05005 855.6
+763.33838 902.5
+764.37189 679.0
+768.39374 3150.3
+768.72864 3979.3
+769.06421 2720.8
+770.39795 757.8
+770.90302 1228.3
+779.40057 15004.2
+779.90094 18716.4
+780.40472 7591.3
+780.90509 2299.1
+790.42242 9360.8
+791.42987 3693.3
+792.42163 984.2
+795.86523 1043.4
+801.42780 859.9
+808.43317 6028.6
+809.43982 2505.4
+812.70886 738.2
+825.08344 1035.3
+826.44415 6262.3
+827.44458 2699.2
+827.91254 1387.6
+828.40503 2240.2
+828.91278 1904.3
+829.42969 4042.3
+830.43170 3166.2
+830.75677 1189.3
+831.43250 805.6
+836.42126 17501.0
+836.92310 16637.9
+837.42505 6921.4
+837.92957 2945.2
+838.34406 786.5
+838.42847 875.5
+851.75452 1312.3
+857.09680 4466.2
+857.43085 7596.7
+857.76373 7225.8
+858.09869 3706.9
+858.44904 3730.6
+859.45233 2946.1
+860.46173 914.5
+862.77087 14653.6
+863.10541 25322.0
+863.44019 19873.5
+863.77356 12022.1
+864.10858 4043.1
+864.43909 1527.0
+875.74500 624.6
+884.92889 6316.7
+885.43146 8964.4
+885.93188 3741.4
+886.43359 1550.3
+890.78113 1484.6
+891.11096 3029.9
+891.44788 2551.9
+891.78284 1042.6
+893.44330 31517.6
+893.94403 33331.6
+894.44525 18498.1
+894.77722 874.2
+894.94678 5517.7
+895.45087 2065.4
+896.45148 5008.5
+896.78723 7943.3
+897.12366 7101.6
+897.45679 4067.2
+897.78979 1291.2
+899.47192 895.4
+903.50806 3313.2
+903.75391 650.3
+904.50812 2921.5
+916.52252 2383.7
+920.13971 693.8
+921.51776 3352.8
+922.52087 1801.9
+923.51813 1024.4
+925.78839 806.9
+933.97217 1956.4
+934.47998 2451.2
+935.42456 736.5
+939.52777 4065.7
+940.53632 2472.7
+951.43018 11523.5
+952.42993 4507.4
+958.45410 838.7
+966.46106 3332.8
+966.96228 6226.8
+967.46045 3571.4
+967.96777 1489.0
+974.97504 8973.5
+975.47552 13166.1
+975.97858 8044.7
+976.47974 3786.3
+976.98663 1102.4
+979.10803 671.4
+980.95453 1319.6
+981.51135 659.9
+982.02301 892.6
+990.51984 3034.5
+991.02557 2276.2
+991.52631 1277.6
+1011.03784 882.3
+1019.03003 2296.8
+1019.53564 2464.9
+1019.68323 651.0
+1019.75439 612.6
+1020.04028 1867.1
+1022.99841 2221.7
+1023.50464 3128.8
+1024.00293 986.2
+1024.51965 922.5
+1029.60474 2875.9
+1030.50574 1065.5
+1030.62048 952.2
+1031.51685 4094.1
+1032.01794 7277.0
+1032.51721 4048.7
+1057.27771 843.5
+1059.52063 706.1
+1066.57019 1368.7
+1086.63647 1449.1
+1087.64502 881.8
+1112.04309 792.7
+1112.54968 1173.5
+1131.28320 647.7
+1152.57202 792.2
+1153.09705 647.3
+1168.60791 832.3
+1176.57312 1324.9
+1177.58496 849.2
+1198.02026 3403.8
+1330.67285 2108.1
+1331.67310 1449.7
+1411.72986 768.9
+1505.79431 701.8
+1525.45984 897.0
+1776.94836 713.6
+1879.59595 19812.0
+1879.88342 1917.0
+1882.85730 870.5
+1907.09216 6537.0
+1907.35376 847.7
+1930.68103 1613.2
+S	3215	3215	723.6258246
+Z	4	2890.472
+188.25238 699.9
+188.25951 858.6
+188.26640 809.3
+188.27623 1755.7
+188.28485 1167.6
+188.29358 1304.5
+188.30161 1151.0
+188.31018 1108.1
+188.39026 731.6
+188.40356 935.2
+199.30371 693.3
+199.33647 1220.9
+199.35095 3824.2
+199.36258 901.9
+199.44862 1712.4
+204.85921 730.2
+235.29398 764.9
+245.12619 746.7
+249.15977 2476.1
+277.14670 3501.6
+284.13919 2784.3
+284.16028 3633.0
+308.90396 894.0
+312.17874 1392.7
+314.15094 3445.7
+319.18857 808.4
+332.16180 2332.6
+335.59402 717.6
+342.27435 925.5
+356.32639 834.7
+367.17557 2327.2
+373.68619 896.9
+375.12955 1853.2
+376.16150 2026.3
+376.96066 709.9
+378.06192 829.7
+387.69583 821.8
+391.19797 1335.4
+392.15491 1487.4
+396.20557 933.5
+397.22296 2663.3
+415.73184 955.9
+417.24829 3955.2
+418.25085 1082.0
+433.73172 858.9
+436.19699 1516.8
+437.18149 1632.9
+445.24377 3676.1
+454.21069 1092.0
+456.23105 3385.8
+457.23331 953.3
+470.46823 841.5
+470.91373 11005.0
+471.24792 10775.2
+471.58197 4246.8
+471.91785 1067.8
+477.17764 1042.8
+483.74847 6456.5
+484.24936 3466.0
+484.75323 983.6
+493.25531 904.3
+494.20142 945.4
+505.23987 3464.9
+509.75137 838.9
+510.30820 1223.4
+511.23135 1387.3
+519.25543 1725.6
+519.93658 4385.6
+520.27008 2535.6
+520.60297 1301.0
+520.95264 741.2
+522.27081 1530.3
+525.27948 2665.4
+526.28442 829.9
+532.42957 2567.1
+533.78833 2183.5
+534.29083 1530.7
+534.48798 1132.7
+535.27094 1318.9
+539.22437 2246.6
+540.29102 4133.1
+540.79218 2136.5
+541.28973 1070.3
+548.26465 2439.6
+549.17554 803.5
+549.28101 6513.1
+550.26111 3772.7
+551.26489 1293.5
+551.80121 2688.7
+552.30530 1260.7
+553.28351 111644.9
+554.28619 30902.8
+555.28857 4972.5
+556.29340 939.1
+556.77930 8185.9
+557.28040 4125.7
+557.78174 1674.6
+557.94672 1415.2
+558.28619 1417.3
+564.29218 2372.1
+565.78015 1037.7
+567.29150 8171.9
+568.29718 2047.3
+571.18823 903.3
+578.61432 935.0
+578.94482 1667.1
+582.30237 18742.2
+583.30560 6667.8
+584.31232 1122.7
+584.94318 994.8
+585.30243 4765.5
+586.31165 1625.8
+588.79480 3141.2
+589.29791 1694.3
+590.28571 2434.1
+590.62421 1893.8
+595.96399 5022.8
+596.29968 7241.0
+596.63312 2333.2
+596.96686 1868.1
+599.25226 839.3
+599.99200 2757.9
+600.32819 3071.8
+607.28680 1927.5
+607.79962 1412.7
+613.82446 5344.0
+614.32587 6091.2
+614.82605 1790.9
+616.26501 1651.9
+616.31708 980.0
+616.80328 824.2
+621.79999 2917.2
+622.30200 3357.1
+624.31378 2116.9
+626.33112 1128.0
+630.31348 21623.1
+630.81403 20623.8
+631.31604 6746.3
+631.82001 2099.5
+633.29871 2570.4
+635.28064 1712.9
+638.36621 2297.2
+638.96716 1494.1
+639.31769 4038.1
+639.82153 3136.2
+640.32617 889.9
+643.06714 884.1
+643.32556 2135.9
+644.64178 3021.6
+644.97723 3133.3
+645.31232 2401.5
+645.64514 1186.5
+647.82965 4012.5
+648.33435 10999.5
+648.83362 5781.2
+649.34021 2183.3
+650.31940 14219.9
+650.65363 17566.0
+650.98779 9752.9
+651.32111 5025.6
+651.65631 1146.6
+652.30920 4724.6
+655.32739 1178.6
+657.34192 8667.3
+657.84064 5696.1
+658.34375 3536.5
+659.33051 3517.4
+659.58069 6570.1
+659.82837 10146.5
+660.07983 7205.1
+660.33008 4827.2
+662.36395 16729.4
+662.83490 4591.9
+662.98755 1390.0
+663.37006 6319.5
+663.58667 3075.8
+663.83337 44017.4
+664.08411 61577.7
+664.33466 50365.2
+664.58484 28712.0
+664.83722 10415.3
+665.08649 3462.7
+665.84344 4302.7
+666.36963 27280.0
+667.37085 12052.4
+668.08954 23388.1
+668.33997 39517.0
+668.59070 37117.2
+668.84192 20096.8
+669.09161 8068.2
+669.33948 2369.7
+669.60242 1005.7
+672.32495 1359.0
+672.59296 3427.0
+672.84100 2324.9
+673.08832 1778.3
+676.35364 2054.3
+677.33545 2185.0
+678.31848 1556.1
+679.43658 1235.5
+680.37579 15424.5
+681.37848 5735.9
+682.33777 6076.0
+682.67377 9066.0
+683.00684 4981.2
+683.34003 2129.8
+687.85645 12321.8
+688.01361 51309.0
+688.34912 74426.5
+688.68188 38011.4
+688.85828 5300.7
+689.01617 18169.2
+689.35327 3247.9
+689.68237 1530.0
+690.31995 924.6
+691.69415 802.2
+696.86127 43758.4
+697.36316 39187.2
+697.86346 16146.0
+698.34485 904.9
+698.39594 4239.4
+698.86084 1320.2
+699.38733 1783.0
+700.36182 978.1
+701.35614 914.1
+701.72046 1105.0
+702.21069 870.5
+703.60278 835.1
+705.86639 58480.7
+706.36694 9955.4
+730.69763 1666.1
+730.85773 1337.1
+731.03357 1854.2
+731.36652 1158.6
+739.37646 10148.8
+739.87958 10244.0
+740.37946 2949.3
+740.62683 1315.7
+740.88007 1496.6
+742.85461 1094.1
+745.36578 22249.1
+746.36920 8502.9
+747.37219 2563.9
+748.03308 1012.0
+755.37708 1502.4
+756.70776 1034.7
+757.05115 1349.9
+761.37616 1083.2
+762.36536 1318.8
+762.71191 1484.8
+763.05505 3136.3
+763.34247 3389.9
+764.35327 956.6
+768.39429 8122.1
+768.72968 11553.9
+769.06305 6898.2
+769.39233 4512.5
+769.93115 1333.1
+770.39948 3237.9
+770.71191 874.7
+770.89844 1429.2
+771.40802 1100.1
+773.40192 1418.6
+779.06714 1816.7
+779.40106 50853.2
+779.73419 1411.0
+779.90222 44406.9
+780.40338 17774.3
+780.90479 8164.6
+781.40558 1348.6
+790.42389 21848.5
+791.42737 8936.5
+792.42639 1690.2
+793.09521 1114.1
+795.88245 1093.2
+801.42712 1199.1
+802.44043 1216.1
+808.43481 16135.5
+809.43951 6353.0
+810.44550 2013.2
+826.44531 14840.2
+827.44946 6621.8
+827.91174 3519.5
+828.40582 5104.0
+828.91064 3530.2
+829.43005 33811.7
+830.43140 16784.2
+830.75745 2086.1
+831.09344 1873.6
+831.43073 3993.4
+836.42194 43836.5
+836.92395 44229.6
+837.42523 21802.4
+837.92694 8426.3
+838.42755 2922.6
+840.43829 3062.2
+841.45032 1430.8
+844.42371 996.5
+851.75854 3166.6
+852.09167 1851.3
+857.09735 12786.0
+857.43158 17923.9
+857.76453 13992.0
+858.10193 7446.3
+858.44983 44292.1
+859.45337 23395.1
+860.45831 7187.3
+861.45984 2077.3
+862.77203 38006.0
+863.10583 53816.3
+863.44037 53280.0
+863.77417 28714.0
+864.10986 11169.2
+864.44434 4831.3
+864.76697 1806.6
+876.42297 2185.4
+877.42822 1448.0
+884.47198 2441.8
+884.93030 19701.2
+885.43060 21280.0
+885.93347 12069.3
+886.42603 4039.8
+887.17780 932.4
+890.78131 4189.9
+891.11438 7531.8
+891.44977 5622.1
+891.78223 3649.7
+892.11609 1513.4
+893.44385 83229.4
+893.94434 84722.8
+894.44598 44198.6
+894.94745 16010.4
+895.44971 5699.7
+896.45447 13634.6
+896.78833 18040.4
+897.12323 17001.2
+897.45544 8312.4
+897.79694 2943.2
+898.92621 2061.6
+899.47650 3013.0
+899.97461 3514.8
+900.11377 1371.0
+903.50751 10594.0
+904.50879 6694.7
+905.50665 2190.0
+908.45630 1228.5
+914.78119 1029.9
+915.47424 1566.3
+916.53052 1142.4
+919.80273 1161.0
+921.51929 8473.9
+922.52307 4382.3
+923.51501 2183.5
+923.78033 1312.4
+925.46558 2175.9
+925.80127 1834.2
+926.13458 1708.5
+926.46649 1718.9
+934.98804 931.1
+939.52911 10637.7
+940.52856 5160.8
+941.53168 1539.7
+942.86163 776.5
+951.42651 2165.5
+952.42419 1440.5
+953.48755 1766.3
+954.00336 930.6
+955.49884 1176.2
+958.45105 1608.7
+966.49133 21105.7
+966.96405 14538.8
+967.49487 13247.3
+967.96613 3857.5
+968.49915 4397.5
+969.50146 1030.5
+974.97540 30841.2
+975.47705 32404.2
+975.97766 19394.1
+976.48108 7663.4
+976.98682 1910.2
+980.45966 2654.8
+980.96283 1808.7
+981.46771 2048.8
+1022.99762 3179.0
+1023.50385 6536.6
+1024.00513 3410.9
+1024.50769 2429.2
+1029.51697 4149.2
+1030.51746 2647.0
+1031.51538 15064.3
+1032.01819 18195.0
+1032.51990 9882.2
+1033.01868 4982.0
+1033.52429 1248.8
+1066.57520 2639.9
+1067.57849 2043.8
+1078.50330 874.7
+1079.58081 3486.4
+1080.58289 2612.8
+1084.58069 1640.5
+1085.59167 1744.4
+1087.03723 1680.4
+1087.53699 2666.8
+1088.04150 1766.3
+1093.48792 779.6
+1093.56091 875.3
+1094.55054 978.7
+1095.54016 1905.3
+1096.05359 1907.5
+1096.54834 1045.8
+1099.54602 1076.8
+1102.59521 3082.9
+1103.55579 975.9
+1103.60681 1064.1
+1110.30823 975.3
+1111.55237 1762.7
+1112.06165 3869.8
+1112.55371 6057.2
+1113.05615 1765.8
+1113.55676 3495.2
+1114.55115 1325.7
+1119.56152 1155.4
+1141.52905 866.6
+1150.59070 1478.9
+1151.08533 983.6
+1152.58838 1039.6
+1160.07874 1204.7
+1168.10583 1061.1
+1168.59338 1717.7
+1169.09521 1536.2
+1176.58154 3136.4
+1177.59338 2015.5
+1197.96082 4321.7
+1206.59204 2287.5
+1207.60986 1324.4
+1236.61548 5686.8
+1237.61426 5628.5
+1238.61853 1874.9
+1260.62146 922.5
+1288.58826 1147.5
+1313.65796 1861.8
+1314.65747 1643.2
+1330.67590 4329.4
+1331.68066 3843.2
+1332.68457 1653.8
+1477.74048 1599.8
+1525.42920 1095.0
+1876.16663 894.5
+1877.50745 1083.8
+1878.46790 1541.2
+1878.97656 2109.3
+1879.26563 2020.8
+1879.70374 22973.1
+1880.42053 2061.3
+1881.12073 930.0
+1881.72925 880.6
+1907.17126 9292.8
+S	3217	3217	722.8725446
+Z	4	2887.45888
+188.18051 665.3
+188.23112 656.5
+188.27556 1899.9
+188.28851 1729.2
+188.29791 1856.6
+188.30803 1518.2
+188.32047 1375.4
+188.34560 686.0
+198.97223 908.8
+199.26520 1072.3
+199.34625 1051.1
+199.36189 2408.6
+199.37981 1234.4
+228.14873 595.1
+242.24672 559.5
+268.05420 635.5
+280.18137 706.6
+308.90308 898.9
+338.54492 731.7
+341.79117 699.8
+352.67975 602.3
+427.54428 840.0
+431.80536 623.8
+438.76361 595.9
+444.39001 583.4
+447.65112 688.5
+532.45837 1975.3
+547.99579 634.6
+549.14978 834.1
+553.28345 1077.7
+626.29071 668.0
+635.89417 622.3
+648.73932 672.9
+663.83386 1702.1
+664.33411 996.6
+676.66425 792.7
+688.01776 1364.8
+688.35138 1289.1
+688.68121 640.8
+700.45355 611.4
+705.86542 6253.5
+706.36823 4683.0
+706.86975 2282.3
+707.36963 1070.9
+731.12457 689.3
+776.16382 615.2
+779.40808 1045.1
+779.89771 711.6
+780.38300 696.9
+784.06403 616.2
+795.88434 1031.3
+851.96027 701.1
+863.10864 1129.8
+863.43982 889.9
+893.44623 1813.4
+893.94727 1524.9
+896.58087 632.8
+1014.55487 647.7
+1032.01575 814.3
+1045.11255 658.3
+1084.54895 557.6
+1092.93457 682.9
+1188.12512 704.5
+1198.02490 3490.8
+1398.64050 593.9
+1513.64709 649.8
+1726.11243 710.1
+1877.97656 944.9
+1879.60339 19683.9
+1880.36853 873.4
+1880.52502 1059.1
+1907.09656 7194.5
+1907.33862 1210.5
+1930.58936 1213.8
+S	3218	3218	723.6250746
+Z	4	2890.469
+188.21364 861.4
+188.22853 587.3
+188.24638 846.6
+188.26900 925.5
+188.28398 718.4
+188.29634 813.5
+188.30772 1025.0
+188.31929 696.6
+188.33475 630.7
+188.34715 567.0
+188.35690 594.5
+198.97169 768.7
+199.24878 838.8
+199.32552 1023.8
+199.34753 2929.3
+199.37030 1176.3
+199.39934 698.8
+199.44576 795.7
+199.46962 721.3
+215.04546 656.8
+236.20909 692.5
+263.62000 668.3
+284.27368 582.1
+308.90591 710.0
+329.41028 652.0
+341.84323 589.1
+342.27780 880.6
+343.55188 661.8
+381.94067 624.2
+410.42630 874.6
+416.12167 604.8
+416.81778 609.2
+482.65729 822.5
+495.07541 607.2
+498.96759 641.4
+532.46521 1676.2
+533.78839 655.9
+553.28125 1234.6
+609.84296 1134.1
+663.83289 1408.5
+664.08167 2267.5
+664.33429 1338.8
+668.08795 2412.3
+668.34131 1313.5
+668.58813 1752.1
+668.84351 1549.2
+674.30322 638.8
+676.66895 1300.5
+680.37073 815.9
+686.44910 581.9
+688.01215 1988.3
+688.34692 2889.2
+688.68433 1267.8
+705.59692 868.6
+705.86542 7765.5
+706.36670 7408.5
+706.86957 3311.6
+707.36896 770.3
+731.12518 702.1
+779.40125 1765.7
+790.43231 745.7
+795.87256 663.2
+836.41986 1011.7
+836.92285 1300.9
+863.10101 1640.7
+863.43591 862.9
+893.44238 2408.4
+893.94562 2158.8
+916.91077 633.7
+933.97540 833.3
+934.47528 675.3
+951.42719 4111.1
+965.27881 706.5
+974.96265 960.8
+982.02545 759.1
+990.51111 1697.8
+991.01923 856.3
+1019.03650 1181.0
+1019.52777 904.8
+1029.61707 1047.6
+1068.75391 571.2
+1173.92493 623.5
+1178.93591 754.7
+1198.04004 3072.5
+1214.73914 714.2
+1429.06140 653.5
+1489.66577 564.2
+1525.45447 723.8
+1573.50256 639.6
+1776.94971 895.6
+1819.28271 621.0
+1878.98303 1644.7
+1879.60315 19654.3
+1879.89063 1704.3
+1880.19617 1918.9
+1880.57214 846.7
+1880.83728 992.6
+1907.21045 6571.9
+1930.59351 934.1
+S	3219	3219	1880.0988246
+Z	2	3758.35
+Z	3	5637.021
+532.44141 878.0
+532.47052 1776.2
+569.91309 664.2
+571.19745 637.9
+573.86823 587.9
+630.42712 1010.8
+676.66406 1055.1
+696.60791 593.1
+763.03369 611.5
+795.88507 960.3
+846.09430 565.0
+1028.68860 642.8
+1057.28528 1167.2
+1140.48352 715.9
+1188.20837 999.6
+1198.05017 2900.2
+1479.70886 627.1
+1599.70227 661.7
+1753.00427 634.9
+1876.11719 854.8
+1878.78455 761.8
+1879.09839 1185.6
+1879.59839 20186.0
+1880.08948 1594.7
+1880.39270 794.5
+1907.15955 7687.0
+1930.61401 997.0
+1993.39832 866.4
+S	3221	3221	1880.01740793
+Z	3	5636.777
+Z	2	3758.187
+532.51947 2003.9
+667.42444 630.1
+676.65497 871.6
+676.69952 678.4
+676.82336 692.8
+746.42957 661.2
+781.06787 683.2
+849.84265 685.4
+858.04083 660.1
+955.26874 682.7
+1019.70496 670.1
+1057.37085 743.0
+1188.33923 904.0
+1198.15784 2910.1
+1332.82397 611.8
+1397.21460 810.8
+1629.22778 713.7
+1872.82300 929.8
+1878.54395 678.0
+1879.00208 1212.4
+1879.48218 6315.3
+1879.71533 17454.5
+1880.09937 4622.1
+1880.39319 1940.0
+1880.73877 1307.5
+1881.13049 823.9
+1907.17004 7139.9
+1919.00879 1015.3
+1980.18726 707.5
+S	3222	3222	889.211991267
+Z	3	2664.361
+Z	2	1776.576
+233.31128 581.6
+254.83936 687.9
+255.29301 645.1
+259.14160 669.0
+281.77567 601.5
+290.08951 598.5
+301.18637 2944.9
+337.18607 1205.4
+342.23801 6197.7
+343.24316 1073.6
+351.19360 622.3
+471.29117 1411.1
+475.64389 581.4
+482.66434 1096.1
+512.56152 609.3
+526.26135 821.4
+531.51215 612.9
+532.52386 1909.2
+552.37433 7107.7
+553.37512 1490.0
+572.33832 2705.0
+573.34943 648.7
+612.25128 2727.7
+613.25677 1378.3
+614.25891 1355.4
+620.22083 685.3
+630.41486 835.1
+673.38745 4978.9
+676.67059 973.5
+689.31470 987.9
+689.39227 1946.5
+697.34161 2772.6
+701.86670 691.2
+707.32422 13153.1
+708.33063 3667.3
+709.31970 1125.8
+715.86066 1762.3
+716.36157 753.7
+725.33502 100019.2
+726.33807 37665.5
+727.34131 10763.6
+728.34698 1340.2
+745.35364 2693.8
+746.35339 1220.5
+764.38818 1956.5
+764.89282 2162.0
+765.39490 678.6
+771.83075 596.3
+786.46973 4500.7
+787.36060 701.1
+787.46777 1254.1
+795.86499 826.1
+796.49487 2697.0
+797.49738 1159.8
+803.90375 627.2
+806.92700 1234.6
+807.43152 1160.6
+811.92786 1153.7
+812.41974 1243.1
+812.91882 1429.5
+820.93158 18277.7
+821.43243 19390.5
+821.93408 9081.5
+822.40503 4131.7
+823.39343 1763.2
+836.46191 2844.2
+837.46747 1328.6
+843.46173 1324.7
+846.39197 761.2
+857.13654 742.0
+868.47937 692.0
+868.96350 1273.2
+869.45996 925.7
+916.52417 3469.9
+917.53119 1726.8
+918.53741 842.0
+938.94434 1039.7
+939.45093 958.1
+950.56415 3924.9
+951.57007 3308.6
+959.49762 2585.0
+959.99567 2004.9
+960.48273 656.7
+973.51935 5049.5
+974.52441 2604.0
+976.46381 2068.5
+977.44415 1418.7
+995.47845 1904.0
+1016.53699 1037.4
+1019.43695 938.4
+1020.46405 629.8
+1030.62842 775.4
+1036.97864 858.1
+1044.04321 1003.3
+1046.00134 1265.6
+1046.51880 856.1
+1046.99792 697.9
+1047.62097 113642.6
+1048.62427 76389.8
+1049.62769 28031.4
+1050.62366 5194.8
+1051.61096 855.9
+1052.06616 893.2
+1057.27734 657.8
+1064.48560 782.7
+1078.51904 1037.3
+1087.52502 1941.4
+1101.57214 2349.3
+1102.57837 1285.6
+1109.20374 625.7
+1126.67700 794.4
+1144.06860 1440.3
+1144.56226 1249.5
+1160.70337 2778.3
+1161.71692 2382.7
+1162.70605 919.2
+1172.57690 3495.6
+1173.08105 3977.1
+1181.58179 7611.5
+1182.08447 8573.1
+1182.58679 4041.8
+1198.17456 2862.3
+1199.55481 866.0
+1220.58228 15159.6
+1221.58484 10815.5
+1222.59119 4131.7
+1246.98987 745.5
+1248.64233 2656.9
+1249.64941 1495.6
+1274.74438 1092.9
+1313.63684 998.0
+1422.02075 707.7
+1425.71497 943.6
+1430.71826 20676.4
+1431.72107 16910.8
+1432.72241 7658.5
+1433.72461 2073.1
+1771.22766 728.3
+1877.81311 681.0
+1878.78784 861.4
+1879.18420 2494.3
+1879.62195 19503.9
+1880.04944 2331.9
+1880.68555 1399.0
+1882.07483 635.5
+1907.07080 7310.7
+1930.66040 1050.8
+S	3223	3223	736.739407933
+Z	3	2206.943
+Z	2	1471.631
+192.00941 683.6
+194.95375 531.1
+198.97104 1061.8
+199.26166 690.7
+199.31602 790.3
+199.33795 785.2
+199.35217 1816.3
+199.35959 1925.3
+199.36992 1926.0
+199.38504 617.8
+200.00729 591.1
+208.44031 662.2
+209.50987 515.5
+212.75473 614.2
+214.50671 662.4
+216.51509 523.4
+233.56468 751.1
+253.13785 749.9
+255.28287 713.1
+260.77557 716.2
+280.17322 604.1
+315.52045 619.4
+347.63242 593.7
+350.29929 744.1
+365.97891 714.2
+380.22711 666.4
+386.42249 668.3
+390.20880 870.3
+432.95978 699.0
+444.37115 624.1
+447.23065 2401.9
+465.17133 690.6
+468.36353 533.2
+503.27997 598.7
+513.17914 760.0
+532.48804 1909.1
+540.04401 750.2
+546.29828 1648.6
+584.45422 647.2
+585.80859 795.1
+586.05768 783.5
+586.30902 823.6
+621.42670 631.4
+633.84320 1405.7
+642.26508 633.4
+650.28052 1117.3
+650.60712 813.2
+650.94415 845.8
+667.59613 643.6
+674.29669 743.2
+676.65192 880.7
+686.14917 621.7
+689.53583 858.5
+708.21338 723.8
+709.36523 2241.1
+710.12317 775.0
+710.36133 1145.3
+749.95807 665.9
+750.71191 960.8
+756.02618 730.4
+776.53857 833.2
+779.84753 836.7
+781.22424 662.5
+789.34998 1068.5
+795.86951 1201.1
+821.94427 730.9
+822.44763 1122.1
+824.86011 934.9
+825.35980 953.0
+840.98523 657.5
+853.15460 715.4
+858.01660 836.4
+867.20441 768.4
+872.50012 666.1
+882.39038 676.8
+923.49048 3265.4
+924.49286 834.3
+926.03870 2070.9
+926.54163 3149.1
+927.40265 588.7
+939.39392 1079.9
+939.89880 1389.1
+940.40308 1022.1
+966.44818 767.9
+975.40900 1118.5
+981.93604 659.7
+1057.13269 593.6
+1070.55847 1593.2
+1071.56360 1037.7
+1140.50781 634.2
+1198.09692 2892.3
+1457.24756 610.3
+1505.31775 615.9
+1525.36926 821.8
+1624.64600 589.0
+1861.80371 619.2
+1863.91895 796.6
+1879.10120 2505.3
+1879.55737 18786.0
+1880.06494 2437.8
+1880.55042 866.8
+1881.28296 774.7
+1907.13025 7394.4
+1930.52686 1049.1
+S	3225	3225	1880.0698246
+Z	2	3758.292
+Z	3	5636.934
+532.50153 2039.8
+549.13397 770.7
+578.52881 567.0
+587.88403 605.4
+601.99377 717.8
+779.79956 624.5
+810.64038 829.3
+877.60901 554.2
+882.10449 564.5
+909.00482 629.9
+931.41925 595.8
+963.50739 643.6
+975.00293 720.9
+977.56451 667.3
+1057.31055 710.6
+1112.26721 566.3
+1154.30859 672.5
+1178.21008 615.0
+1198.11926 3396.5
+1208.56213 558.4
+1525.36414 827.5
+1574.36633 720.1
+1870.36804 888.9
+1877.37659 654.0
+1878.91821 1021.0
+1879.35242 2094.5
+1879.63757 19517.6
+1880.34143 1304.9
+1907.03369 6846.4
+1930.54236 913.4
+S	3226	3226	1907.48540793
+Z	2	3813.123
+Z	3	5719.181
+532.46515 2146.0
+564.62543 649.3
+605.64417 635.9
+618.49921 618.5
+630.42444 746.3
+665.78131 761.3
+676.64331 934.8
+684.82281 651.2
+697.40485 592.5
+725.42896 730.5
+731.12476 855.0
+783.05194 592.9
+795.86584 714.9
+854.36981 615.0
+1102.57556 692.3
+1188.11475 693.5
+1198.03528 3419.2
+1225.49548 599.8
+1371.53809 679.0
+1879.02332 1434.2
+1879.54102 18277.9
+1879.80383 4384.7
+1880.04956 2194.4
+1907.05957 7258.6
+1933.64685 695.3
+1935.95410 579.3
+S	3227	3227	1198.48399127
+Z	2	2395.12
+Z	3	3592.177
+327.47693 539.3
+338.45358 660.1
+342.29623 602.7
+343.40112 647.1
+350.27820 656.3
+427.57355 772.0
+432.96753 639.9
+437.11661 572.3
+461.80917 639.3
+532.47046 1869.7
+549.19183 1001.3
+630.44751 899.5
+635.77100 560.8
+645.18811 614.7
+676.67670 831.6
+684.97076 640.8
+700.46863 683.1
+795.87970 1297.3
+858.11945 627.6
+1003.50989 606.3
+1018.14789 686.8
+1057.29529 993.9
+1187.96960 680.6
+1198.04968 3517.6
+1323.61255 708.6
+1378.18787 574.1
+1378.27551 604.5
+1695.13611 766.7
+1878.62610 635.0
+1879.15381 914.0
+1879.62866 20046.4
+1880.16333 730.8
+1907.05029 7103.4
+1918.94763 857.6
+1930.71777 775.3
+S	3229	3229	1202.1135746
+Z	4	4804.423
+334.30045 629.6
+407.92767 651.9
+425.00195 704.4
+453.90436 609.0
+515.59265 713.4
+532.42780 1700.0
+536.17358 565.9
+571.19904 689.0
+613.55261 768.2
+630.44464 999.8
+657.07104 678.6
+676.65820 770.8
+681.85132 753.0
+701.03473 722.9
+795.88525 868.5
+850.59393 820.3
+858.10455 796.9
+981.84064 670.6
+1003.19379 571.9
+1045.59644 693.4
+1057.27197 937.1
+1065.69617 627.1
+1076.63770 648.8
+1141.91443 751.7
+1195.03052 642.4
+1197.95862 3133.0
+1207.41553 553.8
+1433.37073 825.1
+1681.90637 715.7
+1839.54517 714.2
+1870.27637 645.0
+1876.14734 893.4
+1877.15186 834.3
+1878.49817 1271.8
+1879.19141 1747.5
+1879.58887 18562.3
+1880.03906 2156.4
+1880.42212 1095.6
+1880.62341 1394.2
+1907.15088 7197.8
+1930.71875 765.2
+S	3230	3230	798.0496586
+Z	5	3985.20917
+265.15067 730.2
+302.65021 633.3
+305.61694 596.3
+325.76447 803.7
+339.86911 644.7
+345.27710 584.7
+360.21207 616.9
+394.31537 660.6
+428.78522 644.3
+457.17654 1442.2
+482.66437 771.8
+532.46716 1759.4
+559.49628 701.3
+570.25726 3264.8
+618.38678 1787.1
+618.88947 1969.5
+621.74268 604.3
+630.43970 832.4
+631.56769 619.4
+638.89557 560.6
+659.81683 545.3
+662.29785 848.0
+708.14862 598.3
+713.22308 612.5
+729.41669 753.4
+759.44250 748.5
+774.76941 701.7
+795.87152 818.6
+813.36194 742.4
+944.18042 709.0
+952.92181 761.5
+1059.52930 1377.5
+1060.02600 930.0
+1060.54443 1061.2
+1086.78491 597.4
+1198.05334 3173.2
+1211.83557 682.3
+1243.36499 726.3
+1298.74133 651.5
+1404.21155 609.0
+1467.20886 608.7
+1525.48889 862.5
+1777.04834 730.7
+1873.27795 711.9
+1878.07117 1192.0
+1879.08850 1927.9
+1879.59119 19978.6
+1880.07898 1602.9
+1907.06116 7159.5
+1930.66663 859.2
+S	3231	3231	1880.00540793
+Z	3	5636.741
+Z	2	3758.163
+506.69293 581.4
+532.48895 1994.4
+533.75848 653.5
+535.63019 563.5
+549.18372 790.5
+551.11005 618.8
+571.56036 665.0
+578.76215 596.4
+621.53320 597.9
+676.67926 1275.9
+686.05548 522.0
+714.98920 733.2
+753.39819 611.2
+795.88507 814.8
+832.57153 678.6
+1057.31396 819.2
+1198.09497 3531.6
+1219.38525 700.1
+1237.15222 748.3
+1446.80652 629.3
+1525.47534 1024.6
+1870.21887 567.2
+1878.50488 707.1
+1878.65137 563.3
+1879.64502 19815.5
+1880.08398 1441.9
+1880.32568 942.4
+1880.61230 1020.3
+1906.88428 1187.3
+1907.15295 6992.1
+1930.67786 760.1
+S	3233	3233	1880.10124127
+Z	2	3758.355
+Z	3	5637.028
+532.54150 2208.1
+549.18848 697.9
+675.84473 606.1
+676.66766 894.4
+747.06372 678.8
+795.86194 943.6
+960.35089 656.6
+991.38654 729.6
+1040.86584 603.7
+1096.40881 637.2
+1198.20764 3277.4
+1202.98560 584.8
+1297.95398 702.3
+1616.89697 632.5
+1679.89380 667.2
+1870.41797 828.6
+1876.12488 855.2
+1878.73767 1702.0
+1879.22046 596.8
+1879.60327 19605.8
+1880.02124 1016.1
+1880.43835 1346.5
+1881.20654 1029.4
+1906.80225 980.1
+1907.12207 7449.9
+1930.76721 858.5
+1953.87488 624.9
+S	3234	3234	475.592407933
+Z	2	949.337
+Z	3	1423.502
+121.16519 567.6
+121.78029 2294.4
+133.02950 714.1
+135.08008 1128.0
+138.19600 541.1
+139.10583 665.2
+142.26720 605.4
+151.36124 532.6
+154.86765 662.7
+157.56534 540.1
+165.75746 675.0
+171.64682 762.3
+174.57915 683.8
+177.06784 659.3
+182.07289 621.4
+185.87082 594.6
+188.22279 601.1
+188.25511 985.6
+188.28877 759.6
+188.31076 769.1
+188.33076 632.3
+188.34560 579.2
+188.34985 548.2
+191.10635 1714.8
+191.72824 675.9
+196.84270 572.4
+198.97095 853.8
+199.33084 828.8
+199.34253 1021.6
+199.35518 2284.6
+199.36354 1397.6
+199.37500 939.7
+199.38338 587.3
+199.39450 794.2
+199.39699 793.8
+199.44910 681.0
+199.49106 792.9
+209.11674 24065.4
+210.12047 1671.7
+211.05247 671.2
+227.62146 582.5
+229.84892 675.4
+243.98085 655.6
+265.93369 615.7
+265.98090 603.1
+270.34814 546.5
+271.33817 565.4
+271.64484 562.8
+291.31332 694.3
+297.73499 582.6
+307.66016 561.6
+308.93213 729.1
+350.29382 635.2
+377.19498 9651.0
+378.19775 923.7
+391.23502 830.9
+427.58221 632.6
+430.11105 539.1
+432.47305 752.0
+452.25156 493.1
+459.27695 1252.3
+465.75058 601.2
+482.64111 562.9
+504.31958 1883.6
+508.15131 725.0
+532.57062 1856.2
+617.40247 3441.6
+618.40741 831.9
+630.46606 720.5
+676.65918 943.3
+702.03082 599.6
+705.72668 735.8
+715.22705 642.0
+730.48840 1998.7
+731.48682 654.5
+787.50739 2035.2
+795.88049 919.8
+816.06750 540.8
+856.22461 828.0
+1057.28906 857.3
+1098.65442 593.6
+1188.19092 743.1
+1198.28003 3576.8
+1469.15991 746.3
+1489.68762 639.1
+1553.23535 621.5
+1646.38733 743.2
+1874.05261 650.1
+1876.17517 754.8
+1879.60632 20206.3
+1880.46423 712.3
+1907.14026 7411.7
+S	3235	3235	1907.52099127
+Z	2	3813.194
+Z	3	5719.288
+529.66107 612.2
+532.53351 2084.6
+573.57703 579.3
+599.04218 613.4
+630.45288 647.6
+632.39069 633.2
+672.62207 633.1
+676.63507 1044.2
+731.18549 772.6
+1189.45190 645.5
+1192.07422 691.4
+1198.19373 3223.6
+1226.78113 653.7
+1525.56885 1089.6
+1694.70581 675.9
+1727.81396 711.9
+1776.96655 877.6
+1870.31836 849.8
+1878.10413 806.6
+1878.40234 619.9
+1878.99390 708.5
+1879.55396 17176.1
+1879.82019 4842.1
+1880.39856 822.2
+1880.71094 661.6
+1882.39001 919.2
+1907.12866 7382.2
+1930.74487 1071.4
+S	3237	3237	1879.99440793
+Z	2	3758.141
+Z	3	5636.708
+532.52777 1570.4
+630.45618 717.6
+673.04449 712.8
+675.91449 624.4
+676.66406 1129.6
+772.48090 658.3
+791.09271 604.5
+795.88971 958.2
+837.52948 558.3
+910.54150 653.8
+1010.20087 643.9
+1057.26794 1028.5
+1111.06665 606.5
+1117.86267 551.9
+1145.25256 609.7
+1198.18811 3190.2
+1616.27283 574.6
+1631.64880 634.5
+1678.80798 703.5
+1776.97180 758.3
+1872.32080 662.0
+1878.60376 768.2
+1879.09204 1995.1
+1879.59131 19987.5
+1880.01941 1655.6
+1880.46533 684.4
+1881.60559 888.2
+1883.50671 832.3
+1907.10254 7305.3
+1974.99976 690.1
+S	3238	3238	1907.5088246
+Z	2	3813.17
+Z	3	5719.251
+532.50391 2008.1
+630.42682 815.4
+652.64569 681.3
+665.31848 556.0
+676.65253 970.5
+689.78760 588.1
+731.14203 756.4
+795.87805 1319.6
+891.36584 595.1
+915.94281 604.8
+972.68799 657.0
+1057.25952 996.7
+1198.13147 3536.6
+1525.46448 928.0
+1548.44067 637.7
+1763.61462 655.8
+1877.91956 718.4
+1878.76404 1337.2
+1879.13867 1550.2
+1879.57312 19971.3
+1881.79688 904.0
+1907.14502 6935.3
+1930.65491 1346.4
+S	3239	3239	615.822407933
+Z	2	1229.797
+Z	3	1844.192
+173.16763 583.3
+178.17441 626.4
+188.12808 517.1
+188.24924 573.0
+188.25858 805.5
+188.26715 810.0
+188.27739 1459.9
+188.29065 1231.2
+188.30011 1266.4
+188.31433 1031.4
+188.32242 842.1
+189.41724 654.8
+198.38058 509.4
+198.96896 886.6
+199.25211 621.7
+199.31972 736.0
+199.34767 2361.0
+199.35838 1868.4
+199.36610 1189.3
+199.44714 779.4
+212.63097 589.8
+240.75072 538.9
+271.33865 793.0
+278.23920 600.3
+299.13300 562.8
+342.27005 818.8
+350.27972 985.5
+366.81378 605.6
+392.29382 1409.6
+394.31012 7526.3
+395.31250 1997.4
+410.30429 3058.5
+412.32050 9140.8
+413.32425 2448.4
+428.31461 2767.3
+430.33047 10083.1
+431.33368 3078.0
+442.04660 641.5
+446.32556 13457.2
+447.32855 4098.0
+448.34131 8959.9
+449.34491 2539.7
+482.65228 890.4
+491.38159 641.2
+531.29120 680.7
+532.48639 1979.3
+559.35352 1039.1
+561.37042 23996.4
+562.37415 6991.2
+577.36475 3758.1
+578.37073 1279.6
+579.38129 29529.1
+580.38434 8440.9
+588.31512 818.1
+588.52795 564.0
+595.37555 8394.2
+596.37927 3363.2
+597.39178 32247.9
+598.39478 9964.8
+676.64703 931.4
+680.48395 570.2
+729.36218 867.1
+795.87054 1403.9
+985.89270 617.0
+1019.84241 569.4
+1019.96454 584.1
+1021.13312 582.1
+1057.25562 1085.0
+1084.54199 537.5
+1198.08533 2739.1
+1308.53479 628.1
+1365.65906 572.9
+1383.12842 537.7
+1525.41492 929.6
+1776.97302 797.7
+1878.27966 661.1
+1878.59106 911.1
+1879.55115 20392.1
+1879.84082 2705.2
+1880.56531 834.7
+1881.21912 777.2
+1907.04419 7614.6
+S	3241	3241	1880.04140793
+Z	2	3758.235
+Z	3	5636.849
+525.15643 610.4
+532.51691 1943.3
+536.60712 581.7
+548.74017 573.7
+633.70648 673.0
+645.08112 628.7
+676.67627 999.0
+732.93573 571.9
+735.04822 647.8
+789.89813 585.8
+795.86285 1247.5
+814.06940 716.7
+1108.85156 549.8
+1198.14758 3205.7
+1209.43372 712.5
+1388.78552 638.9
+1497.17322 747.1
+1499.84937 574.2
+1525.39868 784.8
+1666.96362 658.5
+1776.96313 886.6
+1878.49512 1159.0
+1878.77234 1114.5
+1879.35730 5476.6
+1879.62097 17751.7
+1879.90955 5290.6
+1880.73120 838.5
+1882.18042 766.7
+1893.88794 569.9
+1907.04614 7526.7
+1918.97229 769.1
+S	3242	3242	1907.5118246
+Z	3	5719.26
+Z	2	3813.176
+532.51270 1522.5
+676.59430 772.8
+782.06677 831.4
+790.33832 803.9
+795.88513 790.5
+1054.34973 689.8
+1123.90540 715.5
+1198.14661 3243.1
+1525.55298 813.7
+1574.46155 782.5
+1608.69885 750.8
+1878.30493 769.5
+1879.35535 5136.6
+1879.59839 17997.2
+1880.18262 1926.1
+1880.88379 977.2
+1907.03491 7567.8
+1918.99622 852.4
+1930.72937 1030.6
+S	3243	3243	1198.4588246
+Z	2	2395.07
+Z	3	3592.101
+344.49313 702.5
+370.10577 576.0
+481.47858 717.2
+532.51483 2078.8
+549.18982 789.7
+591.18231 582.3
+630.44330 658.9
+631.71204 573.7
+650.81445 550.6
+676.60840 974.6
+715.43524 585.6
+722.41193 657.8
+731.16687 730.3
+879.83002 649.8
+1024.12366 609.9
+1049.45581 599.3
+1051.38147 640.5
+1057.19434 921.8
+1198.14783 3448.9
+1221.92029 763.6
+1279.94348 922.4
+1521.67468 696.4
+1525.52039 759.4
+1542.84119 603.3
+1716.20398 871.0
+1871.68018 1051.0
+1879.44775 21113.7
+1903.77771 721.8
+1906.82349 557.0
+1907.10547 7151.2
+1907.40747 930.1
+1930.69604 1086.9
+S	3245	3245	1879.88324127
+Z	2	3757.919
+Z	3	5636.374
+532.50842 2282.6
+544.71295 607.6
+559.99072 614.0
+616.03479 643.8
+676.65607 993.5
+756.86121 653.6
+820.48297 726.0
+991.46924 699.8
+1007.77747 564.7
+1057.27429 844.4
+1198.14160 3297.6
+1294.01160 620.2
+1367.99268 586.1
+1486.90222 646.7
+1491.09729 619.3
+1525.50891 873.1
+1535.62219 675.8
+1567.76624 565.2
+1667.23474 738.5
+1879.06372 957.1
+1879.57446 19777.7
+1879.85852 2192.9
+1907.16101 7000.4
+1930.69055 993.9
+S	3246	3246	1907.54424127
+Z	2	3813.241
+Z	3	5719.357
+532.54993 2055.7
+549.23041 907.6
+578.90271 752.1
+604.02545 637.4
+630.50751 761.4
+632.81500 622.6
+676.66046 907.9
+823.89313 702.1
+1021.28192 794.2
+1122.19458 636.6
+1158.05066 621.0
+1198.23816 3339.4
+1265.34692 561.4
+1425.17358 608.2
+1516.75208 616.9
+1525.63330 692.7
+1580.39807 664.7
+1719.04712 869.7
+1758.82617 636.0
+1848.78503 619.5
+1878.84985 838.5
+1879.15747 843.3
+1879.69629 16701.0
+1880.14966 2779.6
+1880.47644 640.0
+1880.69019 1395.4
+1881.75928 641.4
+1906.75793 753.9
+1907.14758 7156.0
+1908.79626 660.2
+1918.96265 710.5
+1930.89526 948.5
+1997.98877 1031.9
+S	3247	3247	736.3118246
+Z	2	1470.776
+Z	3	2205.66
+194.75156 661.1
+198.97908 748.4
+199.25270 667.7
+199.35658 1582.0
+199.36601 2281.9
+199.38695 1003.7
+199.46544 699.3
+214.53459 504.5
+231.05780 654.6
+241.10577 558.9
+241.87526 614.2
+244.42657 559.9
+246.67757 616.2
+267.70520 717.4
+271.46979 734.1
+304.23608 597.8
+327.38382 646.8
+333.37445 548.7
+340.99500 555.0
+367.88333 640.6
+399.31934 662.9
+427.59229 1015.5
+447.23303 968.8
+474.61990 684.5
+482.27588 573.4
+521.28040 608.3
+526.44916 704.0
+532.53711 1806.9
+536.24060 1315.7
+542.24060 755.3
+584.33142 590.3
+600.23199 618.2
+604.40015 582.1
+622.56384 582.8
+676.66803 954.7
+692.79675 582.8
+702.67767 632.1
+709.36151 1853.9
+718.31329 669.5
+731.19067 831.9
+774.16687 712.3
+789.34735 766.1
+812.30103 626.2
+822.44531 811.6
+831.54541 669.4
+923.49072 1472.0
+924.03442 578.7
+939.89899 689.4
+974.90649 794.3
+1047.18250 697.6
+1061.79382 663.7
+1070.55261 1563.7
+1071.55908 868.0
+1198.00122 958.2
+1198.19043 2816.1
+1437.93945 749.9
+1491.96167 768.0
+1661.18396 854.9
+1718.41516 2164.8
+1727.49219 683.5
+1874.03394 1038.5
+1874.32874 663.9
+1878.02637 791.8
+1878.44604 683.3
+1878.87732 626.5
+1879.08997 1191.8
+1879.62244 18696.2
+1880.13794 1267.3
+1880.38867 843.4
+1881.19824 1208.3
+1907.06299 7616.9
+1930.87085 905.3
+1961.87622 594.0
+S	3249	3249	1880.15740793
+Z	2	3758.467
+Z	3	5637.197
+532.52142 1903.9
+534.91766 608.7
+603.52722 606.3
+620.31146 744.0
+642.63556 626.5
+676.66510 1117.4
+883.70734 579.8
+970.03119 654.5
+1042.84399 1057.1
+1057.26172 862.1
+1088.73230 775.3
+1188.10510 988.2
+1198.16980 3178.6
+1687.78760 752.8
+1716.91614 1575.8
+1751.58704 1196.0
+1878.20532 1230.0
+1878.63953 1937.8
+1879.59534 19720.0
+1880.51196 1868.6
+1881.01257 925.0
+1881.57874 824.7
+1903.03845 625.9
+1907.07532 7246.0
+1933.98938 574.6
+1995.57166 759.2
+S	3250	3250	1907.47799127
+Z	3	5719.159
+Z	2	3813.108
+532.50354 2216.3
+676.68756 1226.2
+710.61749 668.2
+782.20551 822.1
+795.89838 1184.7
+799.47809 611.3
+847.34546 582.3
+1198.12341 3567.9
+1258.63831 636.5
+1645.20764 816.6
+1651.76379 624.6
+1684.89026 609.1
+1716.68518 752.8
+1827.69336 656.7
+1878.37732 1070.6
+1878.98608 1426.4
+1879.15869 1666.6
+1879.65002 19474.6
+1879.89929 2111.9
+1880.14172 1626.9
+1880.85767 1070.4
+1881.58093 741.6
+1881.98914 711.1
+1907.10535 7194.3
+1907.36902 970.0
+1932.10986 786.9
+S	3251	3251	465.2928246
+Z	1	464.285
+119.96925 526.6
+120.67708 651.1
+121.77980 2461.0
+123.98441 537.3
+126.28067 570.9
+127.84583 518.4
+135.31413 607.5
+136.52423 645.2
+137.98293 516.8
+140.10913 713.5
+141.38251 527.5
+141.85147 701.1
+146.49780 606.3
+150.02386 647.5
+164.25574 593.6
+179.35590 530.2
+181.34982 517.3
+198.97408 957.8
+199.25804 1243.6
+199.33510 915.5
+199.35577 2647.0
+199.45386 1010.3
+215.03964 579.2
+246.09242 590.6
+249.38843 550.2
+274.68857 621.7
+275.44601 627.3
+278.20297 649.7
+296.49335 693.4
+303.65588 597.3
+324.66541 549.7
+349.76163 605.3
+368.89297 692.7
+386.67416 573.5
+427.60565 561.4
+434.76645 750.0
+445.11761 1905.0
+446.11996 1818.7
+447.11349 1077.1
+447.25769 23488.6
+448.26215 4106.3
+476.77219 726.1
+482.14343 696.4
+482.70374 671.8
+492.69696 608.9
+494.94568 562.3
+532.48474 1954.5
+549.20331 730.7
+606.50702 553.6
+725.22247 554.4
+725.26086 534.2
+731.19592 617.8
+795.89325 831.2
+830.08618 605.9
+935.52008 624.7
+939.58466 672.1
+1005.09503 622.0
+1079.39673 812.4
+1100.09790 620.4
+1185.11792 677.0
+1188.17920 1044.1
+1198.08484 3092.4
+1324.12793 699.9
+1489.89734 655.9
+1516.22668 642.6
+1766.05872 560.9
+1770.45056 667.9
+1859.51770 618.1
+S	3253	3253	1880.07940793
+Z	2	3758.311
+Z	3	5636.963
+513.48322 588.9
+532.50171 1620.4
+549.20502 727.1
+708.55939 662.7
+731.18408 812.1
+795.90649 760.9
+902.26709 706.9
+976.63019 842.7
+1037.54504 592.8
+1079.40808 573.5
+1198.12231 3031.1
+1217.25598 551.9
+1234.02808 626.5
+1244.54211 554.9
+1272.67590 646.9
+1516.31616 694.5
+1701.57227 700.8
+1702.91687 676.0
+1876.93298 737.5
+1878.24646 1336.7
+1878.83044 584.5
+1879.26245 2179.3
+1879.66699 19112.4
+1880.27344 954.1
+1881.15479 1582.7
+1906.86035 1441.3
+1907.14978 7495.5
+1918.95239 919.5
+1930.73682 1270.8
+S	3254	3254	1907.5348246
+Z	2	3813.222
+Z	3	5719.329
+532.48987 2020.4
+555.97644 714.4
+669.80017 622.7
+717.02667 636.5
+721.88086 665.4
+731.15942 722.7
+792.58875 674.8
+818.73499 636.2
+1010.43030 565.8
+1019.66058 993.0
+1021.19598 805.6
+1198.09412 3162.1
+1739.34448 620.6
+1806.03442 673.8
+1879.00244 1637.0
+1879.59216 18854.7
+1880.11597 1694.7
+1907.13879 7545.0
+1912.63989 736.0
+1930.72388 702.0
+S	3255	3255	1198.5035746
+Z	2	2395.159
+Z	3	3592.236
+397.07474 650.3
+407.85275 630.0
+427.55179 834.9
+451.10648 612.8
+482.66678 654.5
+489.49762 623.6
+512.10468 611.6
+525.45502 601.5
+532.44104 1951.8
+549.17035 736.5
+602.43384 535.9
+664.37164 611.4
+676.64124 1033.2
+702.24677 633.0
+716.11261 659.5
+795.88098 1051.5
+880.38763 693.6
+896.72913 583.7
+907.52350 594.7
+922.44574 650.2
+1135.89624 694.3
+1182.24060 605.7
+1184.66870 531.1
+1188.22180 819.1
+1197.98401 2922.8
+1198.35718 620.0
+1525.47046 810.6
+1719.64954 780.0
+1878.38489 1006.5
+1878.92798 1256.1
+1879.15442 1393.3
+1879.53821 19847.7
+1879.93835 1429.6
+1880.16443 1257.8
+1880.70068 954.3
+1897.26672 668.4
+1907.10376 6898.1
+1907.38782 1695.8
+S	3257	3257	1880.05499127
+Z	3	5636.89
+Z	2	3758.262
+532.45929 1529.9
+549.14594 1011.3
+557.10913 633.4
+630.39404 1208.3
+657.26587 703.1
+676.65137 1015.8
+690.28363 681.9
+730.38074 619.7
+795.88531 916.2
+846.65436 629.4
+850.14520 611.7
+1057.25293 839.0
+1109.97339 616.1
+1188.15735 928.3
+1198.03052 3295.1
+1229.06458 745.4
+1253.00903 565.1
+1255.82410 673.8
+1266.62390 659.2
+1489.51355 614.4
+1615.97485 657.8
+1620.68884 627.7
+1879.57483 19115.5
+1879.95776 2782.6
+1880.22729 924.8
+1880.55225 949.4
+1880.70776 1125.8
+1907.08789 7198.7
+1907.38977 1009.7
+S	3258	3258	1907.4998246
+Z	2	3813.152
+Z	3	5719.224
+531.05176 639.7
+532.46210 1823.5
+532.50775 819.5
+539.69867 589.5
+549.14038 968.8
+620.60834 627.8
+676.66113 1069.6
+756.55493 707.9
+795.06641 703.6
+795.89423 804.7
+858.00208 688.4
+893.59741 631.8
+1020.78827 741.9
+1057.29053 924.6
+1198.03625 3099.1
+1206.08765 612.4
+1346.72021 596.9
+1542.73816 693.6
+1684.16064 634.9
+1705.61597 837.3
+1876.31030 859.6
+1879.00562 1049.5
+1879.60474 19911.9
+1907.12170 7146.0
+1930.56482 1020.2
+1980.09717 736.7
+S	3259	3259	1198.39099127
+Z	2	2394.934
+Z	3	3591.898
+350.27905 1067.9
+420.11493 626.3
+427.56036 864.4
+440.36078 610.2
+482.67450 801.8
+532.47601 2256.2
+578.34857 664.9
+676.67596 813.0
+795.89056 1058.4
+823.62878 654.9
+852.34442 654.9
+898.84088 749.4
+969.45856 662.4
+1057.30957 602.0
+1159.44971 667.6
+1175.45544 1073.6
+1177.47864 1255.0
+1198.06714 3378.0
+1218.70044 919.7
+1394.07751 571.7
+1489.66956 639.2
+1525.48926 783.5
+1796.10645 630.2
+1865.34558 684.2
+1876.22168 825.4
+1878.58423 923.7
+1878.76245 1047.7
+1879.29114 2621.1
+1879.66125 18826.2
+1880.03479 2784.7
+1880.87195 1211.4
+1907.04590 7377.5
+1930.67139 750.0
+S	3261	3261	1880.04140793
+Z	2	3758.235
+Z	3	5636.849
+532.44952 1892.1
+532.49524 668.6
+567.03625 619.1
+567.99493 576.3
+630.46887 752.2
+669.64209 691.5
+676.66296 857.9
+689.92407 650.4
+731.18726 742.9
+828.43280 597.9
+868.72144 697.3
+1051.25671 631.3
+1057.25146 999.9
+1198.00549 2655.2
+1489.71777 775.3
+1514.47937 630.7
+1525.54907 850.9
+1812.95752 681.4
+1860.09082 849.8
+1879.22461 2084.9
+1879.59509 19760.7
+1879.95813 1961.5
+1880.82849 925.1
+1882.38757 824.6
+1906.81445 972.3
+1907.12512 7389.6
+1907.40149 768.1
+1930.77234 1360.5
+S	3262	3262	1907.44440793
+Z	3	5719.058
+Z	2	3813.041
+532.48297 2057.4
+676.63721 867.6
+680.86505 564.5
+881.25311 586.8
+910.52832 613.8
+1057.25378 730.2
+1164.18384 706.3
+1198.08154 3650.2
+1230.43201 636.6
+1238.85632 658.1
+1452.76575 862.1
+1562.14746 622.5
+1606.27942 821.2
+1870.33240 709.4
+1879.13489 2454.1
+1879.53186 19063.1
+1879.93164 2794.9
+1880.94702 1115.7
+1907.17102 6635.5
+1907.50500 1656.4
+1930.69116 971.6
+S	3263	3263	720.548981267
+Z	6	4317.24694
+188.23795 688.5
+188.25922 885.8
+188.26917 1173.3
+188.28635 1469.8
+188.30191 1398.6
+188.31226 1017.8
+188.32481 619.9
+188.33597 603.5
+188.43948 617.5
+196.49800 666.7
+197.14227 497.2
+198.02269 554.4
+199.26433 1191.3
+199.32495 718.6
+199.34448 1386.1
+199.36305 2722.9
+199.38042 641.2
+199.43344 628.2
+199.46095 861.9
+199.81940 524.1
+207.70163 635.7
+217.69728 522.8
+223.10330 588.8
+223.52119 603.4
+226.84236 640.3
+229.12137 580.2
+235.44975 627.3
+238.68198 750.4
+244.07880 512.5
+250.61197 629.2
+251.47594 591.4
+252.94614 544.5
+254.44281 542.7
+254.45256 505.5
+272.03561 550.7
+301.60422 597.3
+315.03833 515.2
+390.12799 578.7
+422.22745 786.9
+427.54916 867.2
+511.18765 624.0
+532.48285 1508.3
+555.11084 773.5
+630.41620 932.1
+676.65143 821.3
+795.89130 1101.5
+833.98895 804.1
+846.91376 641.6
+927.98187 1018.5
+928.48230 977.5
+928.97510 1212.9
+939.43506 1654.1
+940.43463 908.9
+984.52692 1884.7
+985.02740 1531.2
+985.52325 1158.0
+1013.52814 1812.7
+1014.03754 1111.5
+1029.60620 779.8
+1040.91223 646.1
+1183.63354 618.5
+1198.08350 2985.2
+1286.01660 677.1
+1325.28259 641.1
+1325.72644 637.3
+1468.70178 587.3
+1518.03687 688.3
+1525.41150 846.6
+1585.71497 615.7
+1694.83362 623.7
+1878.12402 740.1
+1878.87341 1426.9
+1879.61572 16907.5
+1880.00305 3382.2
+1880.35498 1829.8
+1880.67090 782.9
+1880.97449 887.8
+1881.40833 1092.7
+1906.85986 1353.7
+1907.12451 7064.6
+S	3265	3265	1879.99340793
+Z	3	5636.705
+Z	2	3758.139
+532.53693 1845.2
+630.35693 1006.0
+676.67566 1010.5
+795.88110 902.7
+1167.87451 599.9
+1198.19995 3245.4
+1241.68542 682.7
+1541.56250 673.7
+1776.98511 987.2
+1870.84326 648.0
+1878.09229 851.3
+1878.33423 932.5
+1878.99231 1104.1
+1879.35046 2648.0
+1879.60889 19647.2
+1880.21155 1174.2
+1880.60767 1121.5
+1907.18689 7636.3
+S	3266	3266	1907.5408246
+Z	2	3813.234
+Z	3	5719.347
+532.14771 582.7
+532.51111 1802.9
+630.41571 757.6
+663.13507 688.5
+676.68713 822.7
+795.87042 1281.6
+819.01605 660.7
+1063.07324 591.0
+1088.01404 683.8
+1198.14136 3422.4
+1489.75977 708.2
+1878.01367 1144.9
+1879.30115 5958.3
+1879.67432 18239.3
+1880.03149 4843.9
+1880.45679 1988.8
+1880.95483 1137.6
+1907.15820 7038.2
+1930.65222 790.2
+1968.18457 646.7
+S	3267	3267	1198.57240793
+Z	2	2395.297
+Z	3	3592.442
+325.58261 613.8
+342.30823 559.6
+345.05118 614.3
+356.95901 601.0
+368.35745 583.2
+391.02469 609.7
+392.18063 675.9
+427.57959 803.7
+445.95911 657.5
+465.02484 711.8
+528.93420 729.7
+532.51349 1611.3
+549.19781 749.2
+601.83459 709.9
+621.68658 632.3
+630.46100 827.2
+658.70502 595.0
+676.70624 915.9
+696.55585 664.6
+709.91278 581.4
+731.17926 809.4
+781.39862 627.4
+795.89203 858.6
+913.42932 606.0
+1019.68658 710.0
+1175.47144 744.5
+1198.15161 3318.8
+1228.14941 607.4
+1281.61072 672.1
+1301.09302 722.1
+1370.70544 585.0
+1378.55432 625.7
+1414.47778 657.9
+1529.06116 674.0
+1680.92358 539.2
+1849.31018 670.7
+1876.15662 712.5
+1876.84448 630.6
+1879.42041 6406.3
+1879.65613 17638.1
+1880.49023 1118.0
+1907.18579 7407.7
+1907.50073 947.2
+1916.51807 580.9
+1930.75195 1344.0
+S	3269	3269	1879.97840793
+Z	3	5636.66
+Z	2	3758.109
+532.50397 1929.1
+534.78687 585.0
+542.35913 658.4
+556.40796 568.2
+623.29016 675.1
+653.49213 683.0
+672.47754 595.9
+676.65198 989.0
+711.55646 584.7
+731.14105 822.2
+746.82837 673.7
+768.20251 623.5
+795.89728 989.7
+858.05219 670.2
+945.77722 607.1
+1057.25183 906.0
+1078.25671 693.7
+1198.12549 3393.0
+1248.32813 625.3
+1273.09949 680.1
+1414.10681 691.4
+1525.41870 854.1
+1803.03723 710.4
+1878.86926 675.3
+1879.56848 19566.3
+1879.84070 2035.8
+1880.29419 1051.8
+1906.89697 670.9
+1907.22229 6999.7
+1930.62122 850.2
+S	3270	3270	1907.57140793
+Z	2	3813.295
+Z	3	5719.439
+532.51740 1732.9
+549.26678 661.6
+579.37347 571.8
+676.66779 917.4
+707.60364 642.2
+795.88336 834.5
+825.05786 643.8
+1020.79358 850.8
+1140.41174 657.5
+1145.72473 673.0
+1198.16809 3127.6
+1463.30933 535.0
+1525.48511 694.8
+1557.90857 641.0
+1605.88843 755.3
+1846.91064 699.0
+1869.30334 670.4
+1878.62219 665.6
+1879.34119 4542.6
+1879.60645 19450.7
+1880.26868 768.3
+1882.43103 823.8
+1907.14880 7207.7
+1930.66711 1296.8
+1976.52368 600.7
+S	3271	3271	637.805407933
+Z	2	1273.763
+Z	3	1910.141
+165.49733 553.9
+169.79933 619.4
+177.90338 541.8
+188.25661 922.7
+188.26479 790.6
+188.27437 983.3
+188.28253 1302.4
+188.29393 980.6
+188.29976 828.2
+188.31039 783.5
+190.05042 3333.6
+193.72346 581.1
+194.27654 621.1
+199.26607 632.3
+199.33730 2020.5
+199.35600 1760.5
+199.36479 2660.2
+199.38580 701.4
+199.41049 625.2
+199.42378 632.3
+199.46239 807.2
+202.66443 539.9
+209.36307 600.3
+214.52002 604.7
+222.95648 589.2
+224.36641 573.6
+227.45531 656.7
+234.42978 584.9
+236.01173 544.1
+244.26300 608.8
+245.35966 697.3
+255.29971 871.8
+264.65155 557.4
+271.47330 701.4
+277.55991 658.1
+280.19043 1234.6
+310.60468 775.0
+326.96570 680.8
+342.28143 657.0
+344.13705 685.0
+349.07260 638.2
+358.01694 616.1
+362.28592 608.0
+369.22617 1008.2
+384.49106 624.3
+384.77606 605.2
+414.67133 636.4
+425.06717 602.6
+427.55951 812.1
+448.33871 1784.5
+449.34351 1139.3
+457.24146 627.6
+482.66833 746.2
+515.38037 61604.5
+516.38385 18977.0
+532.52197 2051.0
+553.06836 789.8
+661.66357 628.0
+676.64392 1422.4
+682.36542 806.7
+682.86798 826.2
+725.88062 2503.1
+726.38464 2693.2
+726.88684 1016.9
+731.15564 660.4
+782.42224 746.0
+795.88269 911.6
+839.93817 4168.1
+840.44171 5555.1
+840.94507 2664.9
+841.44287 1344.4
+877.48926 612.7
+994.82617 647.5
+1198.16284 3350.8
+1202.25427 674.9
+1301.37610 697.2
+1338.43115 672.8
+1694.81396 669.2
+1776.98535 826.5
+1839.69446 678.8
+1875.05701 685.2
+1878.89563 1420.6
+1879.56128 20061.9
+1879.82104 1619.1
+1880.21289 1281.9
+1880.97205 760.1
+1907.09888 7435.7
+1930.65637 818.5
+S	3273	3273	1907.48040793
+Z	3	5719.166
+Z	2	3813.113
+532.52380 1866.2
+630.45862 924.3
+666.49695 553.7
+676.67383 625.2
+781.38702 603.6
+781.59546 666.1
+795.89362 1033.4
+831.13989 754.1
+851.68951 748.9
+858.11981 742.6
+914.24365 630.1
+1086.68848 678.9
+1197.74951 621.1
+1198.17053 2902.2
+1217.52429 614.1
+1297.52319 639.2
+1478.88196 689.0
+1531.35474 682.1
+1722.96179 715.6
+1728.56714 664.0
+1876.51208 739.9
+1879.19604 1971.4
+1879.59961 17787.6
+1880.22693 869.8
+1880.60376 733.1
+1881.10901 797.8
+1906.86548 1472.0
+1907.19299 7379.7
+1907.52380 555.1
+1930.75549 1050.1
+S	3274	3274	1198.5068246
+Z	3	3592.245
+Z	2	2395.166
+316.22736 616.8
+319.37872 655.1
+319.97046 738.8
+350.28772 852.4
+362.71960 564.4
+421.00018 724.8
+532.51697 1533.6
+549.15771 869.2
+586.47363 585.4
+594.71924 669.6
+611.78247 655.9
+630.40900 815.7
+656.26685 637.5
+676.67017 1074.6
+676.71375 768.2
+689.66241 553.8
+694.63000 608.8
+727.25262 693.7
+746.00427 699.6
+775.31305 691.6
+790.16748 600.3
+795.88916 1095.8
+796.01465 676.0
+797.45953 819.6
+805.81146 606.8
+858.06152 649.5
+871.70850 611.9
+875.66382 729.7
+945.23376 635.7
+972.95691 648.4
+1009.60498 563.7
+1198.16235 3119.3
+1205.86877 661.6
+1222.19214 630.3
+1270.55554 639.5
+1279.73376 601.2
+1323.76746 694.9
+1629.54285 633.6
+1637.38818 614.0
+1876.10291 649.2
+1878.06409 959.1
+1878.28406 621.5
+1878.61755 1082.6
+1878.79053 853.8
+1879.10327 1755.6
+1879.62781 18630.5
+1880.66687 1228.4
+1881.05872 901.0
+1907.08447 7485.6
+1926.42603 752.1
+1930.61401 1414.9
+S	3275	3275	724.4598246
+Z	3	2170.104
+Z	2	1447.072
+188.26059 620.5
+188.26894 672.4
+188.27815 845.5
+188.28685 1035.8
+188.29678 1546.9
+188.31433 1065.2
+198.97131 949.1
+199.27240 529.4
+199.34300 1363.1
+199.36203 2018.5
+199.37076 1365.8
+199.38101 902.2
+199.44083 825.1
+199.46986 984.9
+203.93343 816.8
+220.73280 674.1
+232.02330 549.4
+233.59753 751.2
+239.13939 1503.6
+255.30870 669.0
+261.09116 583.4
+261.29187 601.8
+290.42642 552.8
+305.62027 618.4
+312.08627 632.8
+331.55173 567.6
+334.80042 586.5
+336.96686 628.9
+340.69464 665.7
+363.86032 658.4
+368.66760 709.7
+383.55850 573.7
+407.19400 2977.3
+490.86520 753.2
+518.22723 2043.0
+532.50659 1779.8
+536.23718 10154.4
+537.23865 1831.7
+560.33344 593.3
+565.41766 665.3
+586.21631 2278.3
+635.30499 6438.9
+636.31042 1755.9
+646.43903 581.6
+671.00867 733.0
+676.64587 1481.6
+680.53174 631.5
+699.29926 3821.3
+700.30267 1549.0
+705.83148 1855.9
+706.33197 1089.3
+745.56372 639.4
+748.39050 1790.5
+749.40222 826.4
+750.39227 744.8
+795.87750 971.2
+812.38513 7034.5
+813.38544 2875.6
+856.41278 648.9
+861.47095 1686.9
+862.47693 1306.7
+901.21124 645.0
+911.45166 7345.0
+912.45544 4722.3
+913.45233 1509.7
+964.48230 1566.4
+1040.49097 1797.5
+1041.50073 1613.1
+1079.50562 2968.4
+1080.49890 1157.3
+1124.91919 692.6
+1140.47815 666.4
+1180.55847 3568.4
+1181.55664 3338.0
+1198.13477 3542.2
+1301.59741 771.1
+1302.58313 734.8
+1408.07373 615.1
+1446.25342 712.2
+1776.90491 884.8
+1832.89856 645.8
+1879.20007 2609.2
+1879.54858 20184.2
+1879.86499 2074.2
+1880.22522 1130.5
+1882.18640 923.0
+1882.71777 636.3
+1883.77209 684.3
+1907.04529 7287.5
+1930.76135 921.2
+S	3277	3277	1879.99840793
+Z	2	3758.149
+Z	3	5636.72
+524.92828 739.6
+532.49341 1788.4
+602.44531 618.2
+650.41565 634.4
+676.66455 845.1
+707.44617 604.0
+731.15778 939.1
+795.88757 883.8
+922.12207 653.4
+1014.09387 673.7
+1078.44995 604.8
+1113.11279 696.3
+1198.10913 3133.1
+1239.04919 593.2
+1434.41870 661.2
+1525.49255 658.5
+1870.22278 1021.1
+1878.37708 1059.5
+1878.78503 666.9
+1879.60828 19357.4
+1906.73999 1204.7
+1907.11743 7147.5
+1907.45740 1071.5
+S	3278	3278	1907.5305746
+Z	2	3813.213
+Z	3	5719.317
+532.50195 2300.8
+549.18573 895.3
+569.15466 738.1
+583.74957 656.0
+597.32562 663.3
+676.64319 1178.8
+699.62061 637.0
+705.07727 642.3
+826.54700 575.6
+937.39655 621.4
+1020.99243 679.6
+1057.25085 697.5
+1095.40540 657.3
+1175.78210 647.8
+1198.12451 3463.9
+1488.08130 678.1
+1489.69458 922.3
+1745.47998 675.5
+1879.54846 20065.6
+1907.05713 7488.9
+1930.71680 1102.5
+S	3279	3279	1198.50440793
+Z	3	3592.238
+Z	2	2395.161
+328.00861 608.1
+329.28891 560.8
+360.13000 614.0
+360.40952 618.9
+384.02362 586.1
+384.21509 533.9
+397.89453 699.8
+419.64432 610.3
+461.41721 660.0
+464.37213 662.3
+467.51794 646.4
+507.34775 726.2
+532.50580 1809.5
+538.75287 607.9
+542.82172 569.5
+543.06000 657.8
+549.14606 650.5
+565.23193 708.3
+566.51422 714.3
+593.72827 641.1
+640.00116 594.4
+676.68787 991.5
+781.01721 638.8
+795.88983 1021.9
+804.24329 668.4
+1008.49597 711.0
+1010.44006 585.3
+1057.31641 848.0
+1184.53662 703.9
+1197.98169 652.1
+1198.13281 3255.8
+1318.02271 679.4
+1407.21423 625.5
+1525.26819 584.7
+1694.28955 679.9
+1776.83276 764.9
+1878.87793 893.1
+1879.17444 1417.4
+1879.66272 19336.7
+1880.13940 1132.7
+1880.53491 1458.1
+1880.87439 789.0
+1907.05200 7785.2
+1930.48621 1122.8
+S	3281	3281	1880.0748246
+Z	3	5636.949
+Z	2	3758.302
+528.51910 604.8
+532.52313 2009.1
+566.97400 583.2
+589.69556 655.1
+672.25555 590.6
+676.67969 1150.4
+795.89032 1035.2
+845.49585 576.0
+860.47955 557.7
+897.72852 671.0
+923.11853 573.2
+1039.73340 637.8
+1095.92041 714.3
+1198.16394 3371.0
+1206.09192 591.5
+1257.68384 694.3
+1314.02454 614.9
+1379.14673 675.6
+1870.35962 694.6
+1876.11389 697.2
+1878.52869 792.2
+1878.90381 976.8
+1879.23584 1502.5
+1879.64709 20356.4
+1880.08813 1238.9
+1880.40210 1042.4
+1880.77063 958.7
+1907.10449 7332.3
+1930.78198 1118.5
+1991.35913 785.1
+S	3282	3282	637.806241267
+Z	3	1910.143
+Z	2	1273.765
+165.75848 670.3
+186.03963 629.0
+188.24394 1239.5
+188.26337 1224.2
+188.27681 1594.6
+188.30174 1296.1
+188.31306 1473.7
+188.32689 1046.1
+188.33621 696.4
+188.82860 513.9
+190.05019 1060.9
+190.56511 603.6
+197.70711 587.1
+198.97116 889.9
+199.21892 587.4
+199.26486 1212.3
+199.32053 583.1
+199.35364 1330.9
+199.36398 2902.5
+199.37920 701.6
+199.44362 514.0
+199.45204 629.2
+199.46376 678.7
+201.12271 1612.0
+216.31450 578.6
+223.85257 577.9
+271.46274 987.7
+278.75058 563.6
+292.50778 554.0
+295.34595 538.9
+304.55743 637.9
+319.00012 554.3
+320.39813 603.7
+335.60831 548.2
+342.42169 635.8
+344.14572 1690.7
+356.09393 591.0
+369.22430 3137.7
+381.39346 595.1
+413.77292 582.8
+432.25421 580.8
+448.33578 954.5
+457.22894 1657.2
+479.73935 680.2
+482.23935 612.7
+485.52325 634.8
+507.80695 6180.9
+508.31308 841.5
+515.38037 36492.7
+516.38403 10385.3
+532.53076 2013.4
+544.25983 1797.5
+549.21466 686.9
+561.28662 1607.9
+561.78644 819.0
+577.30865 856.7
+597.28107 640.1
+621.39227 612.8
+630.46619 754.3
+655.62280 693.8
+657.86237 591.4
+669.87878 636.8
+672.83234 795.0
+673.08307 649.1
+677.54437 614.1
+682.36639 5035.6
+682.86829 4817.5
+683.36896 2209.4
+683.87451 694.1
+687.12354 805.8
+704.81207 585.8
+719.38165 775.7
+725.88239 9421.4
+726.38440 6952.2
+726.88489 3619.4
+727.38623 1264.4
+731.18365 791.6
+761.38824 759.8
+769.73071 775.8
+769.88690 3681.2
+770.07153 860.6
+770.38110 1121.3
+782.42603 2320.9
+782.92676 1939.2
+784.15430 976.1
+784.40607 1560.3
+784.65900 2144.1
+785.15643 868.7
+795.87549 969.6
+799.41113 745.2
+830.93750 852.3
+839.93768 16281.1
+840.43951 14715.2
+840.94141 7230.6
+841.44257 3011.6
+858.09814 710.2
+931.37891 661.9
+971.84564 709.0
+1019.67773 820.6
+1198.18469 2884.6
+1255.76062 621.9
+1275.93628 619.0
+1284.64856 688.7
+1358.72791 684.3
+1752.55139 651.0
+1833.27319 675.1
+1870.21912 783.5
+1878.25439 890.5
+1878.47131 886.3
+1878.76648 928.9
+1879.24500 2976.2
+1879.59265 19719.3
+1879.96655 2434.9
+1880.41553 816.4
+1880.88074 772.2
+1907.15906 6991.0
+1918.98010 823.6
+1930.73047 698.7
+1988.07190 665.7
+S	3283	3283	1198.59440793
+Z	2	2395.341
+Z	3	3592.508
+327.13199 620.7
+369.43509 755.2
+455.66406 624.0
+489.39438 822.6
+507.98141 638.5
+532.49683 1758.4
+577.42163 675.5
+596.49982 742.5
+608.13483 649.3
+617.26642 709.6
+676.70520 922.3
+731.21838 788.4
+795.88239 839.4
+1005.96442 614.2
+1100.37134 604.6
+1175.99255 658.8
+1198.10693 3142.2
+1269.41418 614.0
+1273.67151 619.4
+1311.58118 616.3
+1341.83179 660.6
+1422.41846 601.4
+1460.62244 623.5
+1525.36865 637.1
+1748.82898 579.9
+1878.18323 666.7
+1878.75830 880.8
+1879.45288 4751.6
+1879.71667 18284.8
+1880.64575 1060.9
+1880.91113 806.4
+1906.86841 932.0
+1907.15051 6775.2
+1975.08948 792.4
+S	3285	3285	1907.60124127
+Z	3	5719.528
+Z	2	3813.355
+516.57593 573.5
+532.50684 1711.1
+567.54694 671.0
+578.77197 625.3
+651.80078 621.9
+676.64886 675.3
+702.37347 684.7
+731.18506 1214.9
+789.51154 555.0
+790.70294 632.7
+795.88544 1051.2
+820.07892 726.0
+845.62372 588.2
+863.55701 652.3
+934.53821 588.8
+1057.26782 837.5
+1079.70898 669.8
+1178.69995 767.6
+1188.06274 712.3
+1198.13147 3319.4
+1275.60974 611.9
+1755.12280 659.8
+1878.93933 1437.6
+1879.58606 19295.1
+1880.16577 1819.4
+1880.60803 845.5
+1907.14893 7625.8
+1930.77405 1046.6
+S	3286	3286	629.7978246
+Z	2	1257.748
+Z	3	1886.118
+165.75729 537.3
+168.95876 648.8
+169.50031 604.4
+183.19347 760.2
+187.89632 563.4
+188.24222 802.5
+188.26208 1469.5
+188.28050 1670.3
+188.29430 1324.4
+188.30624 1147.2
+188.32051 1318.6
+188.34779 771.9
+188.40150 707.4
+190.45422 662.5
+198.97310 972.6
+199.26797 893.9
+199.34819 803.3
+199.36398 3308.1
+199.37572 1042.1
+199.46118 975.9
+213.50064 643.6
+242.03459 678.6
+308.91656 734.1
+316.99576 618.1
+321.81128 580.1
+350.30988 684.5
+350.39847 641.5
+364.22751 533.1
+383.43512 602.2
+390.27875 1263.1
+400.25714 1126.0
+408.28833 2357.0
+409.29410 624.3
+417.66608 561.7
+426.30014 2694.3
+427.30573 764.8
+443.59949 601.4
+460.30270 902.2
+515.28296 1816.6
+532.52026 1645.9
+557.33655 863.7
+559.26361 1134.9
+572.79175 1366.4
+573.29077 1289.1
+575.34912 11745.2
+576.35254 2698.1
+586.31738 7193.4
+587.32062 1324.6
+593.36029 29052.1
+594.36279 5947.6
+611.37073 24269.6
+612.37427 6711.7
+615.33624 1580.4
+615.83801 1202.2
+630.43719 982.3
+672.34827 5199.5
+673.35034 2252.0
+676.65399 690.2
+699.40222 1365.3
+739.68237 693.2
+743.38361 2139.4
+858.41644 2256.9
+859.41650 930.0
+959.27972 680.9
+974.42932 700.3
+1048.14807 625.0
+1057.26453 742.8
+1167.75781 767.8
+1182.14319 633.6
+1188.07214 1022.0
+1198.16528 3307.3
+1489.76392 641.3
+1525.47266 873.6
+1548.44861 770.1
+1641.50061 611.2
+1827.61084 621.0
+1878.73560 949.3
+1878.89990 655.3
+1879.59546 18165.2
+1879.93616 4321.0
+1880.31104 1489.3
+1880.68860 1078.4
+1881.08398 886.4
+1907.20959 7554.7
+1933.14929 709.1
+1956.84534 855.9
+S	3287	3287	1198.58124127
+Z	2	2395.315
+Z	3	3592.468
+326.74136 626.2
+330.63718 636.9
+350.29376 770.1
+353.59998 672.3
+363.29529 637.4
+532.44849 870.3
+532.48944 1256.9
+545.22809 710.2
+581.68677 704.6
+594.26288 618.3
+676.66266 1504.4
+731.08893 621.5
+884.77679 671.9
+926.88196 604.2
+982.42877 895.7
+1020.79858 868.4
+1045.13989 558.4
+1057.27979 754.3
+1066.56299 575.0
+1158.43237 997.8
+1175.45789 948.3
+1197.99329 2326.1
+1198.13196 1222.0
+1319.22046 616.6
+1338.44397 605.5
+1525.46338 882.3
+1686.51172 800.7
+1776.95801 714.1
+1875.94812 623.4
+1876.08691 595.7
+1877.84717 893.0
+1878.74561 1118.3
+1879.29956 2553.8
+1879.60229 19875.8
+1880.45923 1182.9
+1907.12573 7510.3
+1930.63220 878.8
+S	3289	3289	1879.97699127
+Z	3	5636.656
+Z	2	3758.106
+508.25482 599.0
+532.44006 2154.8
+533.25867 675.2
+630.46240 715.3
+676.63202 731.7
+679.56927 640.1
+795.87494 1078.1
+821.35315 624.4
+939.04749 606.4
+1128.81616 733.5
+1188.25098 668.1
+1197.97913 3109.8
+1437.00073 680.3
+1500.81189 742.1
+1525.56848 946.2
+1878.28333 994.8
+1878.70740 1626.0
+1879.15405 2878.6
+1879.53308 19020.3
+1879.92505 4138.5
+1880.39880 1138.5
+1907.14929 7127.6
+1930.76453 1283.6
+S	3290	3290	751.1468371
+Z	4	3000.55605
+198.97145 1010.5
+199.25551 955.3
+199.27747 671.6
+199.31702 696.3
+199.33472 990.8
+199.34340 1178.4
+199.36409 2060.2
+199.37440 1583.0
+199.46133 850.2
+199.47723 1018.5
+209.63002 657.6
+215.03188 597.8
+226.93456 571.6
+239.62257 536.2
+255.31032 652.1
+259.63647 527.5
+264.51480 572.2
+266.40198 604.8
+273.70090 585.8
+275.95071 652.5
+280.77130 566.3
+284.62149 536.4
+296.82181 601.0
+301.92542 655.3
+355.06079 762.1
+368.16110 718.1
+427.57440 718.0
+449.95520 615.5
+482.56772 797.7
+482.69125 727.2
+484.18289 552.1
+519.99542 609.5
+532.42657 1821.3
+573.57855 559.6
+630.44244 627.7
+640.38336 623.4
+650.40582 829.8
+676.64081 613.2
+690.83826 685.3
+705.85950 890.0
+706.36908 610.6
+743.92285 702.1
+773.73920 564.3
+795.88196 1237.3
+879.43060 608.5
+921.11725 718.4
+944.35449 647.7
+975.48419 658.4
+1018.51654 712.8
+1019.67224 923.6
+1026.55139 607.3
+1057.24561 649.7
+1127.14844 607.3
+1165.82068 637.0
+1178.85205 604.7
+1197.95374 3485.1
+1866.14563 725.0
+1878.86792 661.2
+1879.12280 918.4
+1879.59619 17940.2
+1879.84705 4014.4
+1880.05725 2967.3
+1880.63367 1076.5
+1907.18127 7900.1
+1930.70081 946.1
+S	3291	3291	758.9845966
+Z	5	3789.88386
+198.97530 890.9
+199.32845 1017.1
+199.34583 989.5
+199.35899 1278.9
+199.36899 1538.3
+199.38139 1347.8
+199.40941 959.3
+199.46782 674.6
+208.93701 555.4
+221.77151 740.8
+233.58430 580.7
+252.51451 637.2
+283.88669 585.2
+284.14053 857.6
+299.50284 1162.4
+342.29150 575.5
+346.81311 579.9
+349.28149 593.7
+350.30026 627.5
+431.72983 636.7
+471.24857 800.7
+482.66827 715.1
+508.37854 750.0
+525.28229 2171.1
+532.44415 1559.0
+533.93610 3008.0
+534.26953 2790.2
+534.60803 952.8
+547.39325 643.2
+553.28320 6776.6
+554.28516 1613.5
+576.62341 845.2
+576.95612 1161.6
+584.27948 856.1
+585.27374 610.1
+588.79590 799.0
+595.96857 699.5
+614.31732 5447.4
+614.64978 5383.4
+614.98529 3452.8
+615.31818 771.5
+632.88141 749.2
+643.07349 1518.4
+650.31989 2864.5
+650.65717 1940.5
+650.98657 1093.0
+651.32251 736.8
+652.28711 729.9
+666.36841 1172.5
+669.34143 1365.1
+676.68591 1072.9
+682.67352 1013.5
+685.82825 606.5
+688.01233 2640.1
+688.34497 2522.4
+688.68201 1370.0
+689.01331 1152.1
+705.86682 22407.4
+706.36829 17474.6
+706.86938 6801.7
+707.36554 1231.7
+719.68274 927.1
+724.69189 1502.1
+725.02698 2250.3
+725.36206 2274.3
+725.70160 1416.4
+725.84961 2978.7
+726.34814 3422.6
+726.84442 1424.3
+727.35187 1202.6
+729.85736 1738.2
+730.36383 1543.6
+730.69934 1428.8
+731.03387 2817.1
+731.14111 652.0
+731.37067 1526.0
+732.69586 1146.6
+733.02356 1101.4
+734.85327 5357.0
+735.35236 3408.5
+735.85327 2083.3
+739.01990 875.1
+750.48383 582.1
+779.40082 2856.8
+779.90070 2553.5
+780.40369 2191.5
+781.71118 778.5
+782.38715 1773.0
+782.89063 794.4
+791.39282 668.8
+792.90668 818.0
+793.72174 821.5
+794.05762 1355.1
+794.38904 1046.0
+795.89716 1256.6
+796.01404 739.0
+800.40057 1763.3
+800.90210 2155.2
+829.43335 1171.4
+836.42188 9138.0
+836.92242 9454.8
+837.42395 4484.8
+837.92682 948.7
+846.41718 2509.7
+846.91797 2424.7
+847.41724 1799.5
+847.91980 935.3
+855.42542 2915.5
+855.92303 2954.3
+856.42236 2034.9
+856.91937 930.5
+857.09558 2100.5
+857.42859 2579.2
+857.76160 1110.5
+858.10010 1157.5
+858.45721 994.7
+862.76837 1399.9
+863.10303 1779.3
+863.44318 1749.6
+864.42926 9761.6
+864.93134 9738.6
+865.43384 4324.6
+865.93750 1538.8
+868.13715 834.0
+879.19666 1586.0
+882.94159 678.6
+884.93042 3034.4
+885.43085 3287.7
+885.93652 1881.5
+893.44360 21475.4
+893.94403 22459.9
+894.44550 9821.8
+894.94788 5174.1
+895.43695 1234.1
+902.96313 1860.5
+903.46252 2790.9
+903.96204 2563.1
+904.44489 721.8
+907.44519 1024.1
+911.96027 1865.2
+912.45959 2852.2
+912.96039 2213.4
+913.46753 1379.8
+920.97003 6247.8
+921.47278 5985.9
+921.97845 3079.7
+966.46063 6228.8
+966.96429 6901.2
+967.46136 3369.9
+967.96234 1719.2
+974.97516 25553.4
+975.47614 25510.2
+975.97656 17144.6
+976.47827 6397.3
+976.97986 2049.0
+998.60626 747.1
+1015.49988 1588.9
+1016.49866 1585.1
+1023.00208 3085.1
+1023.50806 3464.8
+1024.00684 1980.7
+1028.99207 721.3
+1031.51611 9484.7
+1032.01880 10337.9
+1032.52136 5389.6
+1033.02112 1961.2
+1057.31543 791.1
+1087.03162 2174.7
+1087.53516 1667.0
+1088.03345 1081.8
+1095.54834 2923.7
+1096.04358 2548.4
+1096.55029 2422.7
+1097.03894 800.3
+1116.54468 1256.4
+1117.04602 1074.5
+1185.57715 1132.5
+1186.56335 990.2
+1188.34045 686.1
+1197.99390 3402.2
+1203.58093 2574.8
+1204.58984 1018.5
+1486.64026 600.9
+1639.79175 604.3
+1730.87292 675.2
+1870.32935 908.2
+1876.16248 785.5
+1878.43469 909.4
+1879.37256 2525.4
+1879.65881 19913.9
+1880.16455 566.0
+1880.27405 671.5
+1881.43958 776.7
+1906.85657 1150.3
+1907.14417 7081.7
+S	3293	3293	758.7871466
+Z	5	3788.89661
+198.97560 776.0
+199.24895 590.4
+199.32716 687.3
+199.34760 1686.3
+199.36354 1609.3
+199.37695 1469.8
+199.40419 671.6
+199.44510 679.7
+200.51335 746.4
+237.07388 586.6
+322.57602 582.1
+342.28619 903.6
+353.56693 707.1
+395.29492 570.2
+427.56332 758.7
+439.72525 596.6
+478.53494 576.2
+502.97775 562.8
+503.00427 559.8
+532.48157 1850.5
+541.65887 565.6
+541.66949 578.0
+607.24786 943.5
+629.62830 588.4
+630.42999 687.9
+633.10236 598.6
+676.67993 888.4
+740.27850 4019.1
+781.75952 565.6
+795.89221 905.8
+836.91193 664.2
+893.44629 950.8
+974.97278 1503.5
+975.47113 1543.6
+975.98566 1009.0
+1047.55334 576.3
+1051.84863 654.7
+1113.66846 602.4
+1181.00952 685.5
+1198.07190 3425.5
+1220.18286 674.5
+1336.43018 573.3
+1367.97913 737.4
+1445.22339 694.1
+1656.12268 943.6
+1707.04297 686.8
+1870.32922 925.7
+1870.51282 640.3
+1878.58350 972.4
+1878.95007 1736.1
+1879.64160 18894.2
+1879.93420 4248.7
+1880.36841 1781.3
+1882.41907 710.5
+1907.15283 7231.4
+1930.72009 865.9
+1943.84412 779.1
+S	3294	3294	948.2307596
+Z	4	3788.89174
+254.71234 524.8
+255.28938 731.6
+271.29218 709.6
+303.63931 618.2
+308.89725 790.9
+340.39294 619.0
+342.26443 681.1
+364.39676 696.2
+389.56165 617.9
+392.19800 828.5
+397.01572 638.7
+427.53488 685.1
+463.23718 824.3
+481.04373 549.6
+522.84399 706.5
+532.29114 626.2
+532.43085 2143.9
+552.27954 6152.8
+553.28510 1194.7
+580.48602 757.5
+592.12323 621.3
+616.93262 639.2
+630.39703 822.6
+675.38550 921.3
+676.66406 748.6
+676.75629 658.3
+693.96649 658.4
+731.11353 739.1
+746.42151 1711.3
+788.47247 1331.2
+795.89038 904.8
+850.99207 621.7
+859.50592 1168.3
+931.43658 671.5
+967.25476 638.4
+1019.67151 787.7
+1057.28308 950.9
+1080.19226 652.1
+1184.16992 719.4
+1197.96460 3172.9
+1525.40735 1016.4
+1669.27246 691.4
+1708.81348 591.3
+1824.92358 616.2
+1878.12146 584.8
+1878.47925 1122.2
+1878.72253 973.8
+1879.10388 2192.4
+1879.59509 18967.9
+1879.86755 3153.7
+1880.06299 2466.1
+1880.38416 1010.0
+1880.79053 1048.7
+1880.86804 1017.7
+1882.56580 599.1
+1907.08154 7455.4
+1919.05981 1049.3
+1930.55127 900.9
+S	3295	3295	751.1497671
+Z	4	3000.56777
+198.97565 755.7
+199.28836 726.0
+199.33336 817.8
+199.34331 1194.3
+199.35500 1239.8
+199.36482 2010.8
+199.38489 1088.7
+199.46367 1105.1
+205.32803 616.1
+210.11446 672.8
+238.68495 773.0
+257.88742 653.9
+265.72739 664.4
+280.19769 579.4
+281.37625 538.9
+301.95117 611.4
+308.06021 603.7
+318.67310 570.3
+342.28973 684.6
+347.54080 658.7
+386.54752 641.9
+421.98105 579.6
+482.69156 732.8
+503.01495 618.5
+532.45044 1930.4
+553.27777 712.4
+686.98517 587.2
+688.69507 892.9
+705.86511 3322.3
+706.36401 1831.3
+706.86633 790.1
+708.41309 2395.8
+718.93048 572.3
+781.82971 633.0
+795.89587 1031.2
+798.38605 630.6
+836.92511 1424.3
+850.04315 651.4
+863.10150 1650.7
+863.42920 1009.0
+893.43634 1392.8
+893.94714 1303.4
+915.87018 606.7
+925.46381 800.4
+925.80414 859.5
+926.13416 726.5
+926.46906 857.6
+975.47034 880.7
+976.48895 663.0
+1128.97961 737.4
+1198.00769 3241.0
+1235.65918 659.2
+1403.56750 828.5
+1489.77393 804.2
+1522.75732 775.3
+1525.53442 717.7
+1544.27905 733.7
+1776.97021 886.0
+1870.21033 696.5
+1878.27075 1069.6
+1879.04053 830.0
+1879.62341 18472.8
+1880.21216 1366.4
+1880.66492 969.9
+1906.97083 6763.1
+1918.99463 671.3
+1930.71301 922.5
+S	3297	3297	758.7836686
+Z	5	3788.87922
+198.97325 860.8
+199.26236 761.2
+199.29480 749.5
+199.32103 765.2
+199.33429 1067.1
+199.36052 2120.1
+199.38211 1740.3
+199.42508 514.2
+199.47125 614.8
+214.52238 834.1
+238.68417 650.1
+255.29608 634.8
+262.32190 723.1
+271.60925 625.9
+280.19116 802.4
+300.87698 715.4
+322.24103 604.2
+327.80746 520.8
+427.55911 1271.5
+482.03970 649.7
+482.67081 749.1
+496.57037 739.6
+525.28094 896.7
+532.46173 1651.1
+533.93622 1740.3
+534.27014 2453.6
+534.60352 1053.1
+549.17175 828.4
+553.28302 4488.9
+554.28546 1144.4
+576.61389 784.0
+576.94958 898.8
+602.28882 872.6
+614.31519 3783.7
+614.65125 2630.9
+614.98547 1870.1
+615.31512 1219.0
+630.42596 730.8
+643.32031 870.7
+644.71753 772.8
+647.95905 630.4
+650.32007 1785.0
+650.65155 1707.2
+650.98383 1353.1
+666.38202 642.4
+668.67340 1045.1
+669.00586 1091.1
+683.00897 750.5
+688.01483 2196.0
+688.34894 1458.6
+688.67847 1448.6
+705.86633 13058.2
+706.36731 10647.6
+706.86938 4789.2
+707.36713 1317.3
+725.02704 1808.1
+725.36182 1160.2
+725.84521 2201.0
+726.34644 895.4
+729.86188 1198.5
+730.36377 1187.9
+730.69647 1367.7
+731.03265 1706.7
+731.37360 1167.9
+734.85297 2046.0
+735.35077 3007.2
+735.85101 1068.6
+740.35901 758.3
+762.88159 702.9
+779.40326 1579.5
+779.89935 1949.6
+780.40656 834.2
+783.38000 606.2
+791.89368 1056.3
+793.71576 806.0
+794.05542 897.1
+795.88800 959.3
+800.39301 880.9
+800.89929 1193.7
+836.42157 6299.4
+836.92493 6068.8
+837.42419 2581.5
+846.42297 1274.0
+846.92090 2037.4
+847.41553 820.3
+855.92383 1789.7
+856.41736 1542.2
+857.10071 792.4
+857.42627 925.2
+857.76636 1720.9
+858.09485 737.4
+863.10004 840.9
+864.42877 6028.4
+864.92975 5274.8
+865.43170 2669.7
+865.93951 876.4
+884.92859 1440.3
+885.43231 2072.1
+893.44287 11746.9
+893.94397 13360.9
+894.44568 7238.7
+894.94806 3850.0
+895.44958 919.3
+902.96729 1220.4
+903.45624 1129.4
+903.95905 708.3
+911.96735 1128.6
+912.46771 2042.9
+912.97021 1640.8
+917.78156 573.7
+920.97369 2172.4
+921.47217 3688.3
+921.97058 2116.2
+966.45789 4172.5
+966.96509 5259.8
+967.46521 2201.4
+967.97845 734.9
+974.97498 15402.8
+975.47516 17375.5
+975.97791 11681.9
+976.47601 3891.1
+976.98242 863.4
+980.94824 824.1
+1015.48669 1048.7
+1022.99927 1684.1
+1023.50665 1818.7
+1023.99841 995.6
+1031.51550 5692.4
+1032.01831 5780.2
+1032.51782 4002.9
+1033.02356 1563.9
+1033.53442 788.0
+1079.49170 1054.6
+1087.53601 1258.2
+1095.54785 1868.6
+1096.04260 1454.6
+1096.54517 1472.7
+1116.53833 837.9
+1117.05188 1478.1
+1167.55750 872.7
+1198.03308 2929.9
+1203.56543 1380.9
+1204.59204 1035.5
+1525.45410 762.7
+1593.93201 704.4
+1596.81323 672.4
+1775.07910 644.3
+1870.20898 766.7
+1870.45630 769.6
+1877.67261 726.4
+1878.95239 2436.2
+1879.69861 18122.3
+1880.36279 2388.4
+1880.69666 802.2
+1881.54297 869.1
+1906.99341 6909.1
+1915.63416 665.9
+1919.00195 761.4
+1980.70642 632.0
+S	3298	3298	1880.02424127
+Z	3	5636.797
+Z	2	3758.201
+532.47534 2044.2
+573.09277 674.0
+645.57178 580.2
+676.69568 858.2
+731.11096 547.1
+780.33691 588.9
+795.88812 1093.2
+937.66101 671.8
+1181.05359 565.7
+1198.06287 3082.1
+1331.04895 666.6
+1525.46045 808.3
+1674.84790 638.9
+1777.91919 540.7
+1805.87146 601.7
+1878.93225 1732.0
+1879.29919 1866.9
+1879.68127 19725.6
+1880.06848 1816.1
+1880.49573 1662.3
+1881.54553 785.6
+1881.91772 888.8
+1906.50745 648.7
+1906.96887 7718.2
+1930.64099 924.3
+1965.55066 759.4
+S	3299	3299	897.234407933
+Z	2	1792.621
+Z	3	2688.428
+246.63885 551.9
+258.28018 625.3
+263.92389 684.5
+277.08514 2325.6
+280.20190 683.8
+303.90411 544.4
+308.15894 1039.6
+319.59958 691.4
+329.22610 919.9
+353.10867 617.2
+372.15872 2205.5
+372.19067 1650.9
+374.20993 883.5
+374.24329 1851.9
+381.38388 728.9
+390.16895 11908.4
+391.17310 1656.9
+408.19711 875.4
+457.28116 1421.6
+458.22934 1934.2
+473.23727 1493.4
+474.20523 950.0
+485.27551 4872.5
+486.27695 777.3
+487.32651 1522.8
+488.33200 773.8
+503.25378 2319.1
+504.18701 628.9
+505.33737 2857.8
+506.13632 609.5
+506.34012 840.0
+509.24234 2219.5
+510.25342 603.9
+513.90631 628.8
+519.22595 3722.6
+520.22760 1210.8
+521.27826 2266.5
+532.47656 1800.1
+537.23657 13647.5
+538.23993 3464.9
+539.23315 738.8
+547.60980 684.7
+549.19324 920.5
+558.29321 1498.9
+568.31256 1680.1
+586.32178 7507.4
+587.32245 3057.9
+598.35797 9870.4
+599.36096 3243.2
+603.32343 603.2
+604.31384 1668.9
+605.29681 4559.8
+606.30292 1796.2
+616.33942 4347.6
+617.34064 1592.9
+618.42206 3002.4
+622.32581 8399.1
+623.32965 2454.6
+628.11621 611.4
+630.45068 779.7
+632.31012 16405.8
+633.31378 5675.4
+634.36182 1293.4
+638.45660 556.5
+650.32013 38606.9
+651.32385 12044.0
+652.32556 3197.8
+654.38385 827.0
+671.37897 2301.2
+676.31567 540.6
+676.65234 745.6
+681.39929 2064.0
+688.95215 720.8
+699.40625 36825.1
+700.40906 16012.1
+701.41016 2943.7
+711.44354 837.3
+718.38147 5626.1
+719.38708 3282.8
+735.40991 15507.4
+736.41357 6584.2
+737.41388 1115.5
+738.66510 738.6
+745.39429 23952.0
+746.39709 9273.1
+747.40247 2373.4
+763.40417 136600.1
+764.40704 54711.7
+764.49139 679.5
+765.40784 12875.7
+779.70496 1042.2
+780.50946 769.5
+795.88416 827.2
+806.71906 773.2
+812.48956 2733.5
+813.49872 1170.2
+818.05444 2801.5
+818.39172 2040.7
+818.72833 1149.2
+830.50104 2124.1
+845.01941 603.6
+848.49481 1899.7
+849.50946 805.9
+858.12830 706.1
+858.47943 2452.9
+859.48083 1173.5
+875.41675 817.3
+876.48846 20485.6
+877.49176 7161.3
+878.48694 1624.9
+969.51636 664.6
+978.48676 644.7
+981.98370 1137.3
+982.47430 920.0
+982.97473 927.9
+1023.07965 579.8
+1039.48816 1763.7
+1039.98438 4045.1
+1040.48767 3449.5
+1040.99268 1995.9
+1113.02039 6291.2
+1113.52234 7590.0
+1114.02368 6495.6
+1114.52148 2580.1
+1115.02856 1439.8
+1115.51648 849.8
+1168.54089 1108.8
+1169.04346 1276.2
+1169.52917 1142.8
+1177.55188 1878.9
+1198.06628 3381.4
+1353.99780 677.1
+1565.45654 619.7
+1647.90686 703.6
+1877.71130 894.2
+1879.57971 18744.1
+1879.84778 2839.4
+1880.15222 1494.4
+1907.05859 7209.3
+1930.71509 1175.6
+S	3301	3301	803.1710746
+Z	4	3208.653
+227.93266 588.9
+228.27344 627.2
+245.87947 553.5
+248.51840 768.4
+262.65521 746.6
+264.03012 649.9
+272.17258 865.8
+312.82513 584.8
+318.96942 676.7
+350.19861 637.5
+350.24957 571.4
+360.15500 4676.7
+361.15759 868.5
+361.97714 732.5
+415.19302 1066.1
+419.23761 949.7
+431.26419 809.2
+450.28214 660.4
+459.25708 1161.9
+467.40152 597.3
+470.88605 678.6
+476.26129 1548.5
+508.25247 881.2
+526.25989 4710.2
+527.26276 1092.6
+532.49475 2240.2
+532.72382 584.8
+532.81415 830.7
+543.28760 12686.9
+544.29077 3012.2
+545.29871 682.7
+558.25604 827.9
+559.62329 2584.1
+559.95392 982.9
+560.29315 1037.3
+572.34351 3317.4
+573.35095 874.0
+600.30658 1644.1
+601.30884 885.3
+615.30048 2726.7
+615.79773 976.9
+616.32581 3163.1
+616.66211 3089.3
+616.99341 2979.0
+617.32916 1079.1
+624.30432 3013.3
+624.80695 1500.3
+630.41211 697.3
+646.84369 1099.2
+654.01691 1667.0
+654.35687 1112.8
+654.69446 791.0
+655.84668 3389.4
+656.33496 1413.4
+656.38318 1802.3
+657.37549 1327.7
+658.36212 531.0
+662.83508 950.2
+663.33289 1267.7
+671.84155 5678.7
+672.34308 4970.1
+672.84369 2740.2
+673.29779 567.9
+676.44928 2637.5
+677.45111 1371.1
+680.84747 11454.2
+681.34827 9910.9
+681.84790 3169.3
+682.34863 832.0
+687.31104 1003.8
+687.37146 1028.5
+690.89917 584.8
+694.36523 866.2
+703.04425 1082.3
+703.38031 1130.0
+703.71356 1312.5
+705.32349 4797.3
+706.32739 2104.0
+719.38031 1398.7
+719.87811 1439.6
+723.39948 30581.4
+723.90082 23784.2
+724.40137 12443.6
+724.90686 4019.0
+725.40375 1219.3
+728.38440 6044.1
+728.88452 7672.1
+729.38483 3904.0
+737.38989 31044.2
+737.89130 27612.0
+738.39209 11799.5
+738.89215 3033.7
+748.89789 820.9
+749.12415 978.8
+749.80511 566.5
+756.89807 2109.7
+757.39642 2218.0
+757.89966 710.4
+758.91791 10881.6
+759.41937 9178.2
+759.91895 4762.2
+760.41284 860.5
+763.07556 1586.7
+765.90027 9625.5
+766.40198 9559.1
+766.90234 4879.7
+767.39508 1170.9
+769.08032 3332.0
+769.41516 4752.5
+769.74554 5128.9
+770.08276 2268.6
+770.35962 1052.0
+770.41791 1063.1
+774.34167 1157.2
+780.35272 655.5
+787.41541 931.2
+795.88275 1015.9
+800.64929 744.0
+818.40649 4891.3
+819.41223 2158.2
+827.03290 992.6
+830.42444 1954.9
+831.37671 1134.1
+831.93335 749.8
+838.93262 21791.6
+839.43549 18381.9
+839.93524 11420.9
+840.43555 5503.8
+840.93738 1191.6
+845.92438 1364.9
+846.41248 1613.8
+846.91705 1346.7
+862.52008 718.4
+866.45288 1551.0
+867.44379 105725.9
+867.94507 106083.7
+868.44562 63413.8
+868.94653 27116.3
+869.44763 8684.0
+869.94702 2268.3
+870.44360 1006.6
+870.66046 810.0
+872.41943 972.0
+872.93085 1441.6
+873.43140 1580.0
+881.43329 5370.4
+881.93457 6407.6
+882.43689 5335.2
+882.94348 1912.6
+883.44397 861.1
+883.78870 674.7
+888.79364 2482.8
+889.12775 4243.2
+889.46283 4019.3
+889.79651 1416.9
+890.12659 1139.1
+897.44440 794.1
+902.43573 4972.1
+903.43719 2762.0
+923.98578 38415.3
+924.48657 41840.8
+924.98792 23650.5
+925.48730 9610.1
+925.98712 3296.6
+926.48071 1543.8
+931.48938 8893.8
+932.49548 6817.7
+933.49896 1777.3
+975.59735 697.1
+980.52612 9284.2
+981.03015 11065.7
+981.52893 7388.8
+982.03070 3637.7
+982.53693 816.3
+1002.55341 827.3
+1021.29724 628.4
+1054.06006 2533.9
+1054.56384 2426.8
+1055.06177 2240.9
+1057.28015 824.4
+1058.45410 786.9
+1100.54126 1432.7
+1114.62720 1304.4
+1153.60449 1540.7
+1186.59192 774.9
+1198.11011 3359.4
+1198.97363 629.8
+1210.62219 805.2
+1211.13538 900.9
+1211.64246 773.8
+1214.57922 786.3
+1232.59631 3328.6
+1233.60828 963.4
+1247.60034 1676.5
+1248.60779 1696.2
+1257.94897 662.8
+1310.68457 1225.9
+1345.67822 3393.7
+1346.67249 2352.4
+1360.68762 3031.2
+1361.68848 2290.1
+1362.69397 892.9
+1395.14978 657.1
+1423.06897 667.0
+1452.95679 655.1
+1777.06677 680.4
+1870.35828 951.9
+1877.64307 726.2
+1878.61877 1042.7
+1878.94409 1288.8
+1879.61108 20020.7
+1880.26685 1240.5
+1880.64233 1180.1
+1881.15247 855.1
+1907.15747 7199.2
+1907.65051 749.7
+1930.62256 1130.0
+S	3302	3302	758.9844246
+Z	5	3789.883
+199.23930 708.6
+199.27281 943.8
+199.32057 658.1
+199.33388 708.2
+199.34517 900.5
+199.35384 1212.6
+199.36411 1764.8
+199.37004 1579.1
+199.38055 1112.7
+199.38972 704.7
+199.95869 623.8
+200.02048 564.6
+208.73642 722.2
+230.05423 593.6
+249.13855 595.2
+252.28891 530.2
+254.76657 546.2
+273.62607 578.2
+295.90439 548.6
+306.50116 586.1
+338.29568 530.8
+339.67004 608.6
+350.86917 617.5
+356.01419 622.2
+398.69128 635.2
+435.82819 715.9
+471.94852 646.2
+482.65698 785.5
+483.23547 696.3
+491.17621 689.0
+532.51038 2075.5
+534.67645 702.2
+630.41394 577.6
+654.24481 559.8
+676.67975 1116.7
+708.74005 645.5
+710.74646 590.9
+711.02911 613.1
+728.18622 636.1
+731.11444 659.3
+795.87158 818.6
+825.97784 695.0
+1019.68103 763.9
+1110.45154 630.0
+1156.14441 972.8
+1174.54065 630.0
+1190.91553 741.0
+1198.13965 3317.3
+1207.15894 674.5
+1322.87585 651.2
+1482.90076 576.0
+1483.06213 658.4
+1525.41052 942.0
+1667.10010 730.6
+1732.94604 660.3
+1781.31494 727.5
+1879.09680 1065.3
+1879.65881 19537.6
+1880.15332 1335.3
+1880.55273 722.7
+1907.14685 7254.4
+1919.05823 827.2
+1921.16663 609.5
+1930.57544 762.8
+S	3303	3303	968.416991267
+Z	3	2901.976
+Z	2	1934.986
+270.84210 516.0
+272.55573 574.7
+308.89938 562.3
+323.19073 633.4
+345.55423 561.2
+381.37540 810.7
+460.78329 712.5
+510.66983 694.1
+522.63440 576.3
+532.50476 1983.8
+544.91229 653.7
+590.77997 686.9
+598.39777 603.1
+650.29401 564.9
+795.89337 940.0
+914.38806 598.6
+915.65839 630.4
+928.48871 668.1
+929.46802 1283.7
+929.80939 1157.1
+930.13837 1317.2
+1022.80377 624.7
+1198.12317 3279.5
+1337.66223 1163.2
+1338.16833 588.5
+1363.63672 611.1
+1385.70020 922.0
+1393.70093 2185.5
+1394.20227 3871.1
+1394.71045 2277.9
+1395.20801 1190.4
+1450.75903 566.4
+1637.83716 645.7
+1647.64661 630.5
+1658.13782 591.5
+1744.31091 655.9
+1823.55261 775.7
+1876.19177 1012.2
+1877.85681 1068.2
+1878.17896 929.9
+1879.10681 1253.1
+1879.34607 772.6
+1879.62988 19866.1
+1880.17188 784.7
+1881.29846 641.1
+1907.14233 7173.1
+1930.69360 754.3
+S	3305	3305	1880.05199127
+Z	3	5636.881
+Z	2	3758.256
+532.50006 1929.3
+533.80664 582.1
+559.19354 572.5
+630.39240 728.3
+676.66669 1437.5
+795.88214 825.5
+839.03107 768.1
+843.68146 713.3
+1000.80566 680.7
+1083.57471 617.1
+1198.11560 3688.6
+1239.06616 656.8
+1400.93945 622.1
+1487.12219 703.0
+1553.87744 648.2
+1579.13013 707.3
+1872.97229 719.6
+1876.05469 710.2
+1878.49951 930.3
+1879.01135 1325.0
+1879.12512 1392.6
+1879.60120 19928.1
+1880.06152 1066.2
+1880.32947 847.2
+1880.68860 1265.1
+1907.14795 7110.5
+1949.67261 706.5
+1978.98975 638.0
+S	3306	3306	894.9118246
+Z	2	1787.976
+Z	3	2681.46
+262.34161 591.1
+271.23120 687.8
+271.47647 798.9
+276.61368 633.6
+322.79660 543.0
+324.70554 675.0
+329.46350 651.5
+392.86789 556.6
+419.19022 712.5
+420.75876 615.7
+425.57104 592.1
+485.27042 678.7
+492.47971 670.2
+498.39676 583.2
+502.30264 645.3
+515.19043 643.4
+532.52197 1903.7
+586.31738 781.9
+605.29095 661.5
+650.31842 1948.5
+676.63647 839.7
+681.41125 688.2
+699.40448 1793.5
+735.40717 788.0
+745.39471 1259.2
+763.40369 5719.8
+764.41797 1638.4
+780.22913 604.7
+784.62653 613.2
+795.87811 1017.7
+876.48566 692.9
+909.86200 750.0
+1019.64600 796.1
+1039.48596 1165.8
+1039.98059 1032.4
+1113.02649 1647.3
+1113.52686 1704.3
+1114.02112 2075.0
+1198.15686 2944.7
+1340.90747 692.3
+1366.72522 662.5
+1472.02759 603.2
+1525.56348 905.9
+1870.21655 899.7
+1870.88354 752.5
+1878.75964 623.1
+1879.12866 1698.6
+1879.55615 19075.5
+1879.96045 2852.2
+1880.52686 825.3
+1907.05627 7029.6
+S	3307	3307	616.624241267
+Z	3	1846.597
+Z	2	1231.401
+160.08112 52406.6
+165.75607 51697.8
+167.41225 45495.6
+168.46837 52901.1
+175.31836 47555.7
+188.25697 56235.7
+188.26590 82288.8
+188.27628 89363.7
+188.28763 105253.9
+188.30832 80437.6
+198.97571 93793.6
+199.26996 74988.7
+199.31847 51566.8
+199.33501 112911.1
+199.33963 121816.1
+199.35028 108881.9
+199.36772 161245.2
+199.37923 71313.9
+216.08141 44688.0
+216.08920 40339.4
+238.04810 45357.2
+239.41805 58755.3
+262.18661 50170.9
+264.84229 50546.2
+271.48514 49915.8
+271.50339 58759.7
+280.21130 45424.3
+327.04034 56111.0
+336.44504 53376.3
+381.36581 49086.9
+381.39508 51295.2
+394.30969 1823575.0
+395.31305 959841.6
+412.32004 2811208.0
+413.32349 1000460.6
+427.55142 39491.7
+430.33063 3727568.3
+431.33411 1139217.0
+448.34088 3675229.0
+449.17209 51184.6
+449.34457 1083233.4
+483.53189 48573.9
+532.52631 169451.6
+561.37061 6893503.0
+562.37390 3081567.3
+578.29968 63612.2
+579.38104 10025414.0
+580.10443 68141.4
+580.38422 3637407.0
+581.37927 52818.1
+597.39148 12939607.0
+598.15845 74232.0
+598.39459 4004051.0
+599.17346 48237.2
+599.39508 76922.3
+607.48059 47112.0
+622.84839 56522.9
+630.15662 54465.0
+676.65070 96427.4
+812.24988 46521.1
+844.91309 55073.0
+854.49237 55037.1
+866.19379 75936.5
+870.24567 54089.5
+962.91425 56077.6
+981.44507 48874.6
+1103.26294 44859.5
+1198.18127 302367.2
+1211.76636 47857.0
+1409.10217 52769.5
+1563.84717 47957.4
+1565.74719 52978.3
+1753.63110 60464.7
+1774.43542 54444.9
+1870.27539 72449.4
+1876.09277 49438.2
+1878.22058 73648.1
+1879.57336 1634586.3
+1880.22839 68711.1
+1907.18860 638901.0
+1907.53528 58803.2
+1916.05640 58426.5
+1930.80798 94117.1
+1954.93774 59806.0
+S	3309	3309	1880.04199127
+Z	3	5636.851
+Z	2	3758.236
+532.51227 1881.8
+537.16528 694.9
+555.87787 628.6
+573.08990 777.9
+592.76556 591.7
+629.00714 704.2
+630.43890 633.2
+665.56421 582.2
+781.85907 703.7
+819.09601 664.2
+926.75153 671.4
+943.46478 685.9
+980.43463 553.9
+1188.25867 660.4
+1198.14478 3368.6
+1525.50842 919.5
+1527.51379 573.4
+1528.88184 716.3
+1619.21729 660.4
+1820.15552 658.6
+1832.43982 830.3
+1877.91431 765.6
+1879.02710 1420.5
+1879.65283 19484.0
+1907.14368 7321.2
+1930.71167 1159.4
+S	3310	3310	1907.64240793
+Z	3	5719.652
+Z	2	3813.437
+532.48700 1669.7
+545.65021 577.3
+630.47839 706.1
+645.15375 606.5
+647.92328 560.6
+670.93256 755.5
+676.67206 726.4
+1025.14990 694.0
+1161.42444 659.2
+1198.08728 3306.1
+1313.51978 610.0
+1468.40613 651.7
+1610.94641 697.6
+1853.46228 653.0
+1879.08606 1548.8
+1879.35327 2836.1
+1879.61230 19645.6
+1880.27222 1475.7
+1880.76074 649.3
+1880.95776 597.9
+1881.78931 856.2
+1907.17786 6873.5
+S	3311	3311	616.6215746
+Z	2	1231.395
+Z	3	1846.59
+165.75624 78740.3
+173.99643 55283.2
+188.26382 92611.4
+188.27698 117145.4
+188.28590 95487.6
+188.29515 98685.9
+188.30792 62674.3
+188.31551 81552.4
+188.32677 64155.5
+196.33263 59925.4
+198.97165 80670.5
+199.27010 126507.8
+199.32809 73063.4
+199.34311 175660.4
+199.35989 184326.2
+199.36794 206684.9
+199.38950 134352.8
+199.46547 78825.1
+200.59755 58366.6
+220.92268 62854.0
+227.12254 66060.3
+234.48756 52267.1
+261.19653 50910.1
+294.26538 61145.1
+315.41492 57809.7
+318.46735 62497.4
+330.60159 64724.7
+338.08496 70274.7
+350.29846 57876.9
+354.05878 53938.6
+372.17999 58574.4
+390.12393 55906.2
+394.30991 4645997.5
+395.31332 1831592.6
+412.32028 6186942.0
+413.32385 2237510.8
+430.33093 7334256.5
+431.33414 2391563.0
+448.34116 7368756.5
+449.34460 2114227.5
+449.42395 59307.0
+532.53516 210333.7
+561.37115 14061880.0
+562.37402 5976741.5
+562.78485 112856.0
+579.38147 19400634.0
+579.44116 81956.7
+580.11359 97443.5
+580.38452 6880983.5
+580.86835 95190.8
+595.84290 120711.0
+597.12781 69234.7
+597.39185 23522152.0
+598.15564 132198.2
+598.39471 7016574.5
+598.65448 70076.8
+598.94891 122204.8
+599.40295 82704.8
+625.77856 58540.3
+626.63092 57505.6
+674.80518 62390.6
+676.68762 123840.1
+795.88220 84675.4
+833.05347 79459.6
+905.65631 57992.4
+1027.64063 54124.1
+1079.43140 63654.7
+1104.29688 61887.3
+1198.19067 321713.9
+1489.71143 77331.0
+1647.49878 65984.1
+1699.71667 56988.2
+1860.20325 82055.1
+1879.34521 305248.6
+1879.66052 1953250.4
+1880.49329 76013.0
+1881.02930 54649.8
+1907.17358 737581.1
+1919.03052 74247.1
+1930.85706 128612.7
+S	3313	3313	1880.0748246
+Z	3	5636.949
+Z	2	3758.302
+531.22644 554.6
+532.51984 1500.4
+537.53296 775.9
+564.45203 688.5
+630.45416 1165.0
+795.88861 1287.1
+950.92834 651.4
+978.93951 704.4
+1198.16931 3169.5
+1437.68933 677.3
+1776.98633 819.8
+1878.26733 746.5
+1879.62073 20346.3
+1881.99951 780.1
+1906.74780 575.5
+1907.09106 7310.0
+1919.06726 821.6
+1930.75208 1066.0
+S	3314	3314	1233.22940793
+Z	2	2464.611
+Z	3	3696.413
+331.92599 10189.6
+341.64731 9375.7
+343.10403 8169.8
+350.30325 7095.5
+351.16855 8561.5
+361.12631 7712.4
+389.43121 9020.3
+394.30988 681721.8
+395.31320 263015.5
+396.11005 8549.9
+396.31699 31145.1
+404.03381 9582.4
+412.32013 515556.8
+413.32361 194127.6
+414.32684 25045.4
+424.24136 8010.5
+430.33084 381027.3
+431.33405 126793.8
+432.33792 22775.0
+448.34109 268853.4
+449.34460 90579.5
+450.34695 8914.2
+462.76294 8118.0
+475.91397 9823.5
+521.53845 8101.6
+532.53003 21995.5
+561.37073 600653.8
+562.37390 263252.3
+563.37720 39490.6
+564.36505 10920.7
+573.31024 7872.9
+579.38123 563175.9
+580.38446 261930.4
+581.38745 49372.7
+597.16876 8814.4
+597.39178 876708.5
+598.39496 403271.4
+599.39642 67417.5
+600.39911 9824.1
+615.40198 1308321.6
+616.19781 11088.5
+616.40509 591342.6
+617.40607 94164.2
+661.03302 8203.1
+662.80182 8922.0
+676.66766 15252.6
+795.90399 14099.4
+1019.65552 9107.0
+1021.45514 8266.5
+1044.72595 58597.0
+1045.73035 43849.4
+1046.73145 12195.7
+1062.73718 124344.9
+1063.74426 50246.2
+1064.73853 15127.4
+1104.77112 8019.0
+1107.80701 11054.2
+1193.77795 75240.9
+1194.77930 66444.7
+1195.77063 31093.4
+1198.06519 14326.5
+1198.18713 41316.4
+1211.78845 232406.7
+1212.79126 91370.7
+1226.59338 8809.5
+1525.62817 10866.3
+1538.49915 16205.7
+1538.99426 14559.6
+1878.53540 10568.9
+1878.97192 17241.3
+1879.60535 264952.3
+1879.93652 14251.1
+1880.12256 17997.0
+1880.53589 8090.8
+1881.52356 8618.1
+1882.11963 10211.6
+1906.85693 20026.9
+1907.14600 89649.1
+1919.06055 9337.1
+S	3315	3315	616.6248246
+Z	2	1231.402
+Z	3	1846.599
+164.70650 59219.7
+168.00862 61087.7
+172.10852 54409.3
+182.77922 67223.6
+185.53006 61762.6
+188.25662 78268.3
+188.26396 84285.3
+188.27621 76963.5
+188.28435 91110.4
+188.29008 75915.0
+188.29665 97157.2
+188.30136 96328.5
+188.31389 69712.3
+198.97359 125971.9
+199.24977 77713.3
+199.33798 176531.2
+199.34865 188112.1
+199.35736 127350.8
+199.39180 72341.5
+199.44717 66124.4
+201.42747 52193.7
+204.12466 49703.7
+225.12723 93213.0
+230.66389 63493.1
+234.33177 56841.8
+257.47873 53556.8
+271.33081 71677.5
+271.48984 58637.1
+301.95056 55200.2
+329.79535 52310.4
+358.82162 63385.0
+368.93033 52391.9
+368.94983 60448.7
+372.19449 54593.4
+385.67831 55888.2
+394.31036 8536550.0
+395.31366 3719589.0
+396.31744 112409.6
+412.32071 10497059.0
+413.32407 3954879.8
+414.32822 221145.1
+415.76358 57580.7
+425.59073 50909.4
+430.33139 13025745.0
+431.28149 85073.9
+431.33447 4428139.5
+432.33789 171228.4
+448.34152 11411908.0
+449.34525 3177661.5
+450.34888 97778.0
+532.52625 176620.3
+559.96167 69566.9
+560.67926 93552.8
+561.37152 24630560.0
+562.06635 110878.3
+562.37439 10314352.0
+562.73468 72188.1
+562.79303 95250.6
+563.06244 83637.1
+563.37518 498944.7
+577.89960 122931.8
+578.65735 155444.8
+579.38171 30985104.0
+580.11249 156934.9
+580.38477 11510555.0
+580.57330 62082.1
+580.60034 56082.2
+580.87329 188645.4
+581.08917 69734.2
+581.38678 855820.9
+582.04224 60738.7
+596.63318 122591.0
+596.88196 78695.3
+597.31989 101638.2
+597.39215 30443724.0
+598.15552 171293.0
+598.39508 6183988.0
+598.94965 125029.3
+676.67365 86873.5
+682.51331 61357.2
+795.89063 74701.5
+866.28186 61708.8
+1198.17261 338811.8
+1353.19104 61930.2
+1387.92468 62238.6
+1413.67749 60532.6
+1444.65247 61229.2
+1525.40186 64823.5
+1681.54382 55908.1
+1870.64783 63861.5
+1878.41943 69787.1
+1878.90015 82626.1
+1879.24182 155727.1
+1879.62512 1941339.9
+1880.03589 140054.7
+1880.71741 107425.1
+1881.68408 60331.3
+1905.66821 61938.9
+1907.05542 716795.0
+1909.69495 61130.6
+1919.10156 66448.7
+1930.61206 91990.7
+S	3317	3317	1230.8108246
+Z	1	1229.803
+331.11017 634.9
+339.90170 537.7
+345.28293 589.5
+348.09198 798.1
+350.27765 757.5
+391.58459 670.6
+394.30966 16849.7
+395.31229 1237.5
+412.26331 530.2
+412.31998 12753.7
+413.32422 1061.9
+423.88824 616.7
+427.93048 656.4
+430.33054 8077.2
+447.50037 687.0
+448.34076 6815.8
+453.93613 540.3
+532.52087 1615.9
+561.37061 15197.8
+562.37665 1098.5
+572.27142 597.6
+578.90961 800.8
+579.38104 14552.4
+580.38593 1141.4
+597.39172 19348.0
+598.39447 1254.2
+615.40179 28921.3
+616.40375 2788.2
+646.46326 667.8
+652.34991 688.2
+795.88159 1122.5
+834.00848 635.3
+907.34442 600.2
+948.94208 629.5
+1044.72729 1228.4
+1057.35474 793.1
+1058.69153 687.6
+1062.73340 1686.8
+1170.95874 629.0
+1193.76697 2134.0
+1198.16125 2938.1
+1211.78638 1226.8
+1296.69812 571.6
+1390.35706 692.7
+1648.79077 738.2
+1844.64856 668.3
+1870.35193 668.0
+1877.64856 720.6
+1878.51465 771.3
+1878.87122 903.0
+1879.30725 2326.3
+1879.72852 19214.2
+1880.02234 2598.8
+1880.21265 1593.7
+1880.47253 954.5
+1880.90479 1156.9
+1881.61658 812.8
+1907.06067 7484.1
+1907.68628 676.7
+1930.66809 837.6
+S	3318	3318	1231.8128246
+Z	1	1230.805
+394.30954 329164.6
+395.31305 96430.8
+412.32001 284210.1
+413.32321 76485.0
+430.33057 178452.2
+431.33356 53845.8
+432.33835 5625.0
+448.34100 135549.0
+449.34378 47298.8
+482.25143 5089.0
+532.53156 15006.5
+540.92346 5180.7
+561.37042 273183.6
+562.37384 111542.3
+563.37317 16686.2
+572.59705 5051.2
+575.64160 4740.6
+579.38098 271706.4
+580.38440 99853.5
+581.38562 12618.6
+597.39148 403952.5
+598.39453 151993.6
+599.39307 17101.2
+615.40173 544498.8
+616.40515 215966.7
+617.01239 4628.2
+617.40338 27046.5
+637.75037 4338.3
+652.72821 4327.2
+655.20288 5338.5
+676.66986 7105.7
+761.88721 5789.4
+795.90002 6284.0
+833.75592 4958.1
+880.38770 5492.6
+889.32410 4699.7
+908.46783 4688.7
+1018.44202 4324.0
+1019.63635 6946.2
+1044.72180 27763.7
+1045.72278 17080.7
+1062.73621 62031.4
+1063.73413 17409.3
+1193.77283 32022.0
+1194.78357 26193.4
+1195.77661 8788.1
+1198.17871 25226.8
+1211.78015 29163.1
+1213.67639 5294.3
+1227.14587 4758.3
+1337.18701 5721.2
+1441.81238 5171.2
+1525.41858 5534.2
+1537.08813 4957.7
+1773.21594 4260.7
+1776.95471 5276.7
+1869.95850 5574.7
+1879.07617 10503.4
+1879.60352 147815.3
+1880.09778 8686.0
+1880.86292 5644.1
+1904.62061 4639.7
+1907.05823 58293.7
+1930.62878 7617.7
+S	3319	3319	1232.8148246
+Z	1	1231.807
+325.68826 14835.5
+339.44321 15684.5
+342.30475 15038.3
+348.64117 16425.6
+350.27353 20006.5
+368.64233 18760.7
+374.87830 17083.8
+394.30972 1002485.2
+395.31323 268937.9
+412.32019 735230.9
+413.32346 193440.6
+430.33078 514957.4
+431.33411 148232.8
+448.34109 385937.0
+449.34381 102696.8
+532.52478 58016.9
+549.12689 19840.8
+561.37085 807745.0
+562.37372 287590.2
+563.36890 20053.6
+579.38110 788285.8
+580.38428 275135.8
+581.38367 35226.2
+597.39166 1270494.4
+598.39514 387244.8
+599.39526 56307.2
+602.41522 16645.0
+615.40210 1676149.5
+616.40521 599536.2
+617.40704 92163.4
+720.10718 18291.1
+784.68512 18329.8
+795.88336 29228.9
+864.72772 16127.5
+1044.72498 69457.6
+1045.73560 26449.8
+1056.82288 20266.9
+1057.20630 17202.4
+1062.73743 102768.5
+1063.73682 45208.4
+1114.22729 17971.6
+1150.14307 18312.5
+1193.77527 100099.2
+1194.77649 65837.6
+1195.77869 31375.5
+1198.18408 80914.3
+1211.78943 236496.8
+1212.79041 70209.6
+1347.22070 19514.7
+1462.99060 17954.1
+1498.48889 15566.0
+1525.43164 17510.2
+1536.97937 24035.7
+1537.49817 184278.2
+1537.99768 284261.6
+1538.50183 294355.5
+1539.00110 194583.7
+1539.50549 46553.1
+1572.16907 17700.8
+1749.62036 17982.5
+1754.66321 17977.2
+1844.18640 27072.3
+1845.19080 59832.2
+1846.18652 40600.3
+1878.44666 23282.7
+1878.91321 53139.1
+1879.44495 177086.4
+1879.65955 451187.0
+1880.33093 65948.6
+1880.69531 38446.3
+1881.08228 31456.2
+1907.02588 195197.2
+S	3321	3321	1231.2218246
+Z	2	2460.596
+Z	3	3690.39
+326.92722 22501.8
+350.27658 40062.9
+367.87674 25385.4
+394.30988 424094.6
+395.31314 113742.4
+412.32004 322910.3
+413.32391 66732.3
+427.56467 34566.1
+428.13367 24818.3
+430.33066 206836.6
+431.33362 38152.1
+448.34180 129192.6
+449.34286 39969.1
+532.52545 72904.5
+533.37872 26084.7
+543.02570 24330.0
+561.23535 26018.2
+561.37091 383434.7
+562.37537 126777.3
+579.38123 350986.9
+580.38501 120169.4
+597.39172 535622.1
+598.39532 203994.1
+607.62775 25915.8
+615.40192 753125.9
+616.40533 221065.0
+617.40863 34340.3
+676.66559 46612.4
+795.89941 38308.4
+969.89569 25150.4
+997.69464 25770.1
+1019.70917 42121.6
+1027.74988 34335.1
+1044.73108 60376.6
+1057.28088 39940.5
+1062.73938 46133.6
+1198.17078 156782.4
+1211.79138 79012.2
+1239.46448 32589.2
+1421.27344 26923.2
+1607.79932 29809.0
+1741.28357 32061.5
+1879.27917 122569.3
+1879.60632 827956.5
+1879.92957 121400.4
+1880.78503 30957.5
+1907.05225 320180.4
+1930.67517 44095.8
+S	3322	3322	1230.7218246
+Z	3	3688.89
+Z	2	2459.596
+334.20120 977.4
+345.16064 1060.3
+350.27789 1423.9
+352.93365 870.7
+352.96405 1025.9
+353.83420 787.1
+359.74271 992.5
+393.47815 1295.3
+394.31009 209663.8
+394.71866 1435.2
+395.31329 95460.6
+396.31674 18807.9
+397.31949 1778.1
+412.32043 159735.6
+413.32382 70370.7
+414.32742 12632.9
+420.30728 1097.2
+427.56827 1005.8
+430.33096 110484.3
+431.33420 51406.2
+432.33728 9637.5
+433.34103 1316.8
+444.76718 871.4
+448.34122 73885.3
+449.34457 36622.7
+450.34760 6371.6
+456.31427 996.4
+472.80609 1288.6
+493.39914 2100.1
+532.53357 2739.2
+549.18811 1562.6
+561.37115 162250.4
+562.37408 90460.5
+563.37573 19881.6
+564.37006 4524.6
+579.38153 142063.8
+580.10803 1022.2
+580.38464 81871.0
+581.38635 19045.2
+582.38116 6299.7
+596.88361 823.4
+597.39209 195508.7
+598.39532 110868.6
+598.96069 1163.3
+599.39630 29307.9
+600.39410 5795.9
+615.40234 259949.0
+615.61548 1099.4
+616.20215 863.5
+616.40521 135118.5
+617.40601 35525.0
+618.40411 7646.8
+630.44940 1170.2
+676.66815 1846.7
+731.16089 1250.1
+795.88422 1103.1
+918.79169 954.8
+941.67810 922.1
+1008.05560 1109.9
+1027.74292 980.9
+1044.72534 7546.6
+1045.72412 6075.2
+1046.73022 1869.0
+1062.73730 14152.4
+1063.73999 12130.5
+1064.74500 4637.8
+1065.74695 1057.2
+1090.80188 1367.7
+1159.59424 973.3
+1174.65381 969.4
+1188.02087 1185.3
+1193.77637 12424.1
+1194.78149 14051.3
+1195.78247 9337.8
+1196.78516 3801.5
+1198.19250 5520.8
+1243.34644 974.1
+1282.99023 940.8
+1405.97668 954.3
+1766.57349 1090.2
+1878.69287 2789.6
+1879.62415 29752.6
+1879.91077 4141.2
+1880.55249 3078.4
+1880.88367 1080.1
+1907.05627 11874.9
+1910.00452 970.8
+1916.27014 1039.4
+1930.72803 1583.8
+S	3323	3323	1231.72340793
+Z	2	2461.599
+Z	3	3691.895
+340.73688 8864.6
+350.27368 10001.3
+385.81451 10327.2
+394.30981 968559.8
+395.31317 334885.5
+396.31558 28209.8
+412.32022 768827.5
+413.32367 247199.9
+414.32813 23643.1
+427.53702 13938.1
+430.33072 497302.2
+431.33401 166995.3
+432.33725 17844.6
+448.34103 385541.8
+449.34500 120773.1
+450.35248 12715.9
+480.68341 11038.9
+500.10855 10973.6
+532.54919 32023.8
+544.80725 11434.9
+561.37085 820728.5
+562.37360 362913.6
+563.37549 54205.0
+579.38129 779037.0
+580.38440 322534.7
+581.38745 50675.0
+585.19727 9936.8
+597.39185 1228593.8
+598.39496 482515.6
+599.39490 68162.9
+601.64099 10698.6
+606.38416 11688.6
+615.40198 1699707.9
+616.40527 598889.8
+617.40625 95274.8
+676.66467 26385.1
+681.58582 11746.1
+708.80078 11805.4
+784.60468 10279.7
+839.88190 11102.9
+888.04956 11587.9
+1044.72351 67375.0
+1045.73071 35857.5
+1062.73596 138905.9
+1063.73779 50981.1
+1124.22180 13907.6
+1193.77625 105446.2
+1194.78162 79683.4
+1195.77747 24559.1
+1198.23193 51249.9
+1205.61108 10299.8
+1211.79126 77737.2
+1401.92810 11670.4
+1458.85681 9929.1
+1488.25171 10699.8
+1506.33264 11309.6
+1536.99536 28737.5
+1537.49487 99007.8
+1537.99805 152241.5
+1538.50098 185349.2
+1538.99976 130728.2
+1539.49866 69518.8
+1539.99878 29221.4
+1590.60974 10099.0
+1845.19714 31361.9
+1846.18884 25761.6
+1847.19971 15555.8
+1856.74841 13222.8
+1878.98938 16310.1
+1879.59753 338204.4
+1879.90137 35504.3
+1881.01746 11865.6
+1907.09290 123363.5
+1907.53271 16640.5
+S	3325	3325	1880.07199127
+Z	2	3758.296
+Z	3	5636.941
+512.62408 710.7
+525.26660 627.7
+532.51318 2221.2
+549.18903 644.7
+630.44055 829.3
+676.67468 1043.0
+732.46045 648.2
+795.88727 919.5
+799.05951 750.7
+858.73425 730.2
+873.53864 782.1
+924.66168 639.4
+1057.30237 798.9
+1085.89587 661.8
+1117.94873 647.3
+1158.75708 738.1
+1175.13818 691.1
+1187.96814 684.5
+1198.14551 3940.5
+1796.44727 732.4
+1879.31506 958.7
+1879.63525 20062.4
+1879.96497 1189.4
+1907.08398 7390.9
+1907.64478 680.4
+S	3326	3326	1907.50640793
+Z	3	5719.244
+Z	2	3813.165
+532.50323 2480.4
+594.50391 610.9
+622.51709 558.3
+630.46271 969.6
+676.68317 1094.0
+688.38214 566.8
+731.17462 835.2
+785.46521 693.4
+785.56140 620.8
+795.89227 1288.6
+826.27563 660.3
+1019.66876 646.6
+1157.24255 655.3
+1167.12585 597.4
+1198.12720 3258.3
+1232.60376 642.9
+1535.54932 710.7
+1599.41443 604.3
+1778.63696 662.9
+1876.13794 1008.1
+1878.75195 1291.1
+1879.64673 19836.0
+1880.59399 1076.6
+1907.10767 7378.6
+1926.38770 679.2
+1930.76538 875.6
+1944.46924 657.0
+S	3327	3327	1198.59840793
+Z	3	3592.52
+Z	2	2395.349
+350.28961 730.4
+381.45609 653.1
+385.54758 576.9
+419.94067 696.7
+425.24011 557.2
+426.82178 570.0
+435.97696 666.8
+438.18222 665.5
+478.35999 571.6
+482.68213 722.8
+525.77240 593.8
+532.49524 1964.4
+568.42596 597.9
+630.44446 751.7
+676.71368 877.1
+708.41290 560.0
+795.88977 903.6
+921.15155 693.1
+1023.44763 611.2
+1042.85229 645.7
+1057.28125 761.3
+1198.10901 3191.9
+1219.18982 651.2
+1241.47498 611.3
+1241.52722 627.2
+1256.34363 674.2
+1347.42505 748.1
+1394.93396 692.0
+1427.97778 580.7
+1434.66553 687.0
+1870.01306 650.6
+1876.33545 794.1
+1877.08850 824.4
+1878.88428 1272.9
+1879.15222 2358.1
+1879.64734 18502.4
+1880.12170 1114.3
+1880.42480 1694.7
+1907.10083 7421.5
+1930.74194 846.0
+S	3329	3329	1231.2288246
+Z	3	3690.411
+Z	2	2460.61
+392.98489 19891.8
+394.30975 634763.8
+395.31305 151088.3
+412.32013 521338.8
+413.32306 142251.5
+427.55655 25098.0
+430.33081 382344.6
+431.33350 99538.9
+435.12555 20960.1
+448.34152 252259.4
+449.34351 55290.9
+468.55597 18596.7
+482.67389 24095.5
+495.63467 17754.2
+532.49731 58775.0
+532.75836 20016.7
+561.37085 555590.9
+562.37372 196740.0
+579.38147 577424.0
+580.38464 178498.9
+597.39185 862920.8
+598.39478 244151.5
+599.39581 38797.8
+615.40216 1156096.6
+616.40601 347351.5
+617.41687 30624.9
+630.42621 33850.6
+638.63855 18891.6
+644.89398 19773.6
+646.38995 19225.8
+676.65729 27754.0
+736.41547 18463.6
+795.89972 37612.7
+808.29352 18226.4
+929.17383 19785.8
+1000.86475 18184.4
+1029.84009 20603.2
+1044.72986 55845.3
+1045.72913 31348.7
+1062.73425 71561.3
+1063.73438 40223.2
+1175.81641 19034.4
+1193.77881 63332.9
+1194.78320 54257.2
+1198.11938 105584.3
+1208.17798 19796.5
+1208.71423 20868.6
+1211.79016 100890.8
+1294.47449 21519.9
+1525.44763 26610.8
+1538.01074 41578.2
+1538.50220 62037.1
+1539.00244 50471.1
+1605.27185 20187.9
+1785.28906 22039.9
+1860.51929 19826.4
+1872.83984 22454.5
+1876.14539 24045.7
+1876.66248 23351.1
+1878.42798 33967.2
+1879.20520 47962.6
+1879.58032 632196.0
+1879.92029 50249.9
+1880.80115 21657.9
+1882.50964 32783.4
+1882.75415 25915.0
+1907.10327 228390.9
+1934.20190 18551.0
+S	3330	3330	1230.22740793
+Z	2	2458.607
+Z	3	3687.407
+337.69861 15662.2
+342.27454 23108.2
+349.99380 15268.7
+362.69662 15320.5
+394.30966 737186.0
+395.31323 146476.3
+412.31998 566244.2
+413.32364 131240.1
+422.95621 17390.1
+424.14618 15338.1
+424.26645 15217.9
+430.33060 400094.2
+431.33356 63418.8
+448.34097 301191.3
+449.34473 59333.4
+459.20984 16497.1
+464.96115 16293.9
+482.65945 22729.4
+509.90219 16101.2
+532.51556 41815.2
+558.91278 15909.1
+561.37061 644914.8
+562.17780 14388.9
+562.37469 176532.6
+579.38123 604585.3
+580.38422 168840.0
+597.39172 899749.6
+598.39551 255252.4
+615.40210 1154171.0
+616.40540 267512.1
+630.41095 20518.5
+670.29926 15256.1
+676.69580 31788.6
+707.05353 14188.3
+780.45795 15586.8
+884.55481 21216.1
+1009.80280 16600.9
+1044.72644 51712.6
+1045.73865 33497.6
+1062.73364 97692.6
+1063.73291 28894.0
+1123.80688 18772.2
+1193.77759 85414.8
+1194.78064 49053.2
+1198.14844 69908.9
+1211.78369 28563.9
+1525.44788 17260.0
+1863.86670 16769.5
+1879.39343 143238.0
+1879.68762 460932.8
+1880.50842 61702.9
+1907.11548 193827.0
+S	3331	3331	1232.2288246
+Z	3	3693.411
+Z	2	2462.61
+332.80554 23112.2
+334.85590 20122.7
+347.02200 20999.6
+350.29254 25423.3
+352.41339 20954.0
+381.36203 28371.9
+394.30978 1056844.9
+395.31299 341661.4
+404.51886 23115.6
+407.05124 26381.6
+412.32019 831149.7
+413.32355 244153.6
+414.32751 32241.4
+427.54825 30819.4
+430.33109 560423.6
+431.33289 162204.5
+431.62283 21768.4
+435.95154 22420.5
+438.62579 21048.3
+448.34116 475231.8
+449.34464 130798.7
+451.84534 22710.5
+475.37012 24914.8
+482.66635 31431.1
+486.60251 21560.5
+506.48776 25934.6
+532.51978 72460.6
+561.37079 904308.0
+562.37408 334695.6
+563.37286 40027.3
+579.38080 861066.6
+580.38409 297326.4
+581.38440 51834.5
+597.39185 1373278.3
+598.39514 487982.5
+599.39746 75743.5
+615.40210 2057370.5
+616.40515 703623.1
+617.40826 130974.2
+618.40503 26606.8
+630.39661 32923.3
+731.11469 29221.1
+751.13855 22587.5
+761.86780 23570.2
+795.89124 36537.3
+1019.64111 24308.4
+1044.72437 77814.3
+1045.74060 35103.4
+1062.73254 115744.9
+1063.74194 54803.1
+1064.72913 25019.8
+1193.77637 81009.0
+1194.77966 78460.4
+1195.78406 30065.6
+1198.16113 116612.9
+1211.78894 281812.5
+1212.78503 80962.7
+1229.71277 26423.3
+1300.71082 23944.6
+1305.89209 22621.2
+1536.98328 36503.2
+1537.49707 220485.8
+1538.00171 384750.1
+1538.50098 364531.3
+1538.99854 219140.7
+1539.50525 109128.7
+1669.59485 28985.8
+1714.94128 30442.5
+1776.90588 25771.5
+1831.16553 20023.6
+1844.20142 49172.1
+1845.18823 62170.5
+1846.19836 60883.6
+1847.18372 35932.4
+1877.85583 25338.3
+1878.19702 24343.3
+1878.44470 40372.6
+1878.99597 45022.5
+1879.42175 170932.5
+1879.68689 668289.2
+1880.38403 83166.8
+1881.41492 27123.2
+1907.13672 261466.9
+1930.62061 34303.1
+S	3333	3333	1230.7208246
+Z	2	2459.594
+Z	3	3688.887
+394.30951 843640.3
+395.31277 187601.5
+412.31992 617265.7
+413.32358 145998.8
+430.33054 416463.5
+431.33344 94245.3
+448.29324 14663.5
+448.34085 303643.0
+449.34506 81782.3
+460.98587 13240.9
+462.24359 16675.3
+471.68069 14812.5
+481.21988 12625.1
+482.68695 21352.4
+532.49255 29828.4
+536.11035 16535.8
+552.46887 13871.6
+561.37042 690783.1
+562.37354 199701.7
+566.73315 14217.3
+579.38098 654152.1
+579.48395 16936.5
+580.38477 209507.0
+597.39136 966836.2
+598.39478 269741.1
+599.39331 23899.1
+615.40167 1319129.9
+616.40497 345536.2
+617.40894 29711.6
+638.13660 14208.9
+657.32825 15230.8
+725.86731 17439.6
+731.17346 19265.8
+795.89941 22064.4
+856.04010 14783.2
+865.70862 14750.0
+962.75995 14931.9
+976.30756 15410.4
+1024.04626 15736.6
+1044.72253 60785.9
+1045.72437 31013.2
+1062.73669 106982.6
+1063.73572 23550.1
+1137.63550 15216.3
+1188.27185 20723.0
+1193.78040 69425.7
+1194.77783 57092.9
+1195.77197 24584.0
+1197.90027 28466.4
+1198.09180 52444.4
+1211.78186 42877.8
+1667.28235 20384.5
+1685.57275 15348.3
+1685.95190 18702.9
+1864.17529 16347.8
+1876.12866 17677.4
+1878.06238 18520.2
+1878.74158 42394.1
+1879.25854 49872.6
+1879.41602 44644.4
+1879.69019 460886.8
+1880.13269 33315.5
+1880.40784 16297.9
+1880.71863 21307.3
+1881.39783 23736.0
+1884.64917 15800.8
+1907.13269 173110.0
+1930.71118 22427.7
+S	3334	3334	1231.72240793
+Z	2	2461.597
+Z	3	3691.892
+337.56656 5868.3
+381.46716 5890.5
+393.48672 5668.5
+393.51633 7366.2
+394.31003 1001793.4
+395.31326 306575.0
+396.31689 40520.0
+405.09146 6807.5
+409.22559 5155.1
+411.88403 5790.6
+412.32031 735119.1
+413.32361 214281.8
+414.32739 32294.7
+430.33093 521670.7
+431.33401 138761.0
+432.33725 17122.3
+448.34116 381081.3
+449.34488 112076.4
+450.34818 15527.2
+480.04803 5525.3
+532.44659 16813.1
+539.24652 6246.4
+549.21356 8107.7
+561.37097 850121.8
+562.37415 309850.8
+563.37689 55947.3
+579.38135 831924.6
+580.38440 269917.5
+581.38568 56033.2
+582.37549 6470.6
+595.85089 7503.5
+597.39197 1181779.5
+598.15686 9605.5
+598.39514 371502.3
+599.39642 67291.2
+600.38428 15413.8
+610.84283 5220.1
+611.24493 6142.9
+613.78961 9267.4
+614.60345 8216.2
+615.40228 1616314.1
+615.68341 6974.1
+616.40533 507110.3
+617.01501 7250.9
+617.40680 97935.4
+618.40448 11681.0
+676.66443 6510.5
+799.52240 5959.8
+982.88947 6269.2
+1005.24213 6736.7
+1044.72534 62605.7
+1045.72827 43478.8
+1046.73108 9517.5
+1057.27197 9590.0
+1062.73694 91846.0
+1063.74097 39854.0
+1188.29919 7356.9
+1193.77625 97277.6
+1194.78015 65515.0
+1195.78113 19588.1
+1196.79114 10640.3
+1197.99695 33660.7
+1239.09790 5924.6
+1501.86829 6196.2
+1536.99609 173360.4
+1537.49854 451599.8
+1537.99915 482177.4
+1538.49963 385377.6
+1539.00122 273723.7
+1539.50256 150747.6
+1539.99988 64785.1
+1540.50354 34652.4
+1541.01282 10092.6
+1700.35986 6078.6
+1763.92822 6508.3
+1844.19263 46182.6
+1845.19873 66608.0
+1846.20044 44308.7
+1847.20081 26672.8
+1848.18567 11402.8
+1870.23865 6186.7
+1879.59290 180533.7
+1879.86523 41475.6
+1880.16223 11562.4
+1906.67554 7692.1
+1907.14087 67389.2
+1930.77612 9277.6
+S	3335	3335	1538.2548246
+Z	4	6148.988
+427.55493 844.6
+449.11264 699.5
+491.67197 604.6
+532.44812 1865.3
+550.28168 598.9
+630.41833 980.0
+676.67432 869.0
+724.71393 572.1
+795.89728 1033.0
+916.55878 590.5
+1056.46997 608.9
+1198.00146 3334.0
+1229.78833 699.9
+1230.80066 1160.8
+1417.44897 651.0
+1552.57153 594.7
+1699.29578 582.5
+1845.19836 908.8
+1846.19324 1660.8
+1860.21484 656.5
+1876.31567 654.4
+1878.48608 973.5
+1879.30212 3296.2
+1879.62610 19050.7
+1879.93555 4052.6
+1880.27234 774.7
+1880.67432 1404.9
+1906.84399 1149.7
+1907.12463 7214.9
+1930.61206 908.4
+S	3337	3337	1230.7208246
+Z	2	2459.594
+Z	3	3688.887
+326.68396 22270.3
+394.30957 1515775.3
+395.31299 402560.1
+396.31705 30229.6
+412.31998 1159923.3
+413.32330 309522.2
+422.31903 20495.6
+430.33051 821328.8
+431.33353 206558.6
+446.86267 17587.8
+448.34082 582713.4
+449.34445 131395.5
+532.49103 69639.9
+549.18622 24961.8
+561.37042 1286001.5
+562.37372 474029.5
+563.37689 34942.5
+571.32159 25162.3
+579.38080 1281799.3
+580.38409 398730.3
+581.38910 45649.4
+597.23431 25399.3
+597.39148 1879191.1
+598.39478 556105.3
+599.39764 61162.0
+615.40161 2493940.8
+616.40515 723242.2
+617.40387 99121.0
+676.66937 35500.1
+711.34137 20327.2
+780.29968 20603.6
+795.90576 27529.3
+858.10437 22978.2
+1024.88501 20619.7
+1044.72583 121797.9
+1045.72888 53167.9
+1062.73535 204826.1
+1063.74048 35334.9
+1064.75061 27926.0
+1164.32898 20593.1
+1193.77576 186638.6
+1194.77820 72999.1
+1195.77332 35127.0
+1198.09912 106905.6
+1211.78052 66409.6
+1224.29980 22558.1
+1525.49268 27216.8
+1526.70691 20431.4
+1537.50293 39030.8
+1537.99377 58091.4
+1538.49548 85816.0
+1539.00085 71470.7
+1539.50061 54490.3
+1718.77124 21328.5
+1761.76575 21797.4
+1870.41699 36898.2
+1877.37537 21452.6
+1879.33289 120118.8
+1879.62439 620549.5
+1879.94543 75813.1
+1880.31311 41055.1
+1907.14844 237760.6
+1907.45361 27196.9
+1919.11462 24360.4
+S	3338	3338	1880.02540793
+Z	3	5636.801
+Z	2	3758.203
+532.52173 1432.3
+622.78809 626.0
+640.62671 708.7
+676.65015 668.9
+758.37494 575.5
+783.12573 610.4
+795.90686 910.4
+917.03577 747.6
+1018.53888 686.2
+1198.16382 3296.5
+1384.15491 768.6
+1540.29089 679.4
+1578.65979 615.6
+1667.17224 601.2
+1671.95056 671.3
+1849.29028 668.6
+1870.37341 999.5
+1878.35425 895.9
+1878.75769 1060.4
+1879.57849 19037.5
+1879.84900 3495.6
+1880.14978 849.3
+1880.43652 1370.7
+1891.59631 645.3
+1906.89954 2324.6
+1907.13879 6388.3
+1930.74023 905.0
+1984.27527 823.1
+S	3339	3339	1231.72299127
+Z	3	3691.894
+Z	2	2461.598
+344.12241 41669.6
+350.28598 62852.6
+357.17200 42184.3
+370.65701 44864.3
+394.30930 859387.9
+395.31381 182562.2
+400.31024 51031.6
+412.31995 562994.3
+413.32346 190478.9
+427.54901 53752.6
+430.33109 456342.7
+431.33478 84257.8
+444.03836 51087.6
+448.34116 353157.3
+449.34341 73780.5
+482.65735 45817.4
+482.68494 39660.9
+523.24384 45484.3
+532.51202 126313.2
+555.27588 40723.0
+561.37018 678189.8
+562.37360 222787.1
+579.38147 626517.8
+580.38354 245802.8
+597.39160 981164.1
+598.39441 325870.1
+615.40161 1504086.1
+616.40430 526456.4
+617.40857 48197.5
+649.91589 42253.9
+666.99512 40449.1
+676.65918 76280.1
+693.71765 49448.8
+756.11951 43041.8
+779.60968 44532.3
+795.90179 92926.9
+802.10040 45027.1
+982.58856 42442.7
+1044.72058 52894.7
+1057.27612 63157.9
+1062.73303 54316.6
+1198.14587 226255.7
+1211.78870 168417.0
+1212.78992 61882.0
+1218.77856 42300.2
+1233.30493 49693.6
+1248.19629 42472.4
+1537.99719 148881.3
+1538.49707 256817.5
+1539.00952 74055.9
+1731.65466 46561.9
+1733.13306 46390.5
+1741.38770 44569.3
+1845.21350 48193.8
+1877.11536 41174.1
+1878.73816 60298.4
+1879.09607 93900.3
+1879.58618 1471848.3
+1880.71863 53288.5
+1907.07263 529714.7
+1907.34302 57548.4
+1930.59937 69354.2
+S	3341	3341	1230.71940793
+Z	2	2459.591
+Z	3	3688.883
+326.97415 32119.1
+330.24393 25633.6
+360.42786 29328.9
+391.41034 26963.3
+394.30957 1224166.4
+395.31332 263702.9
+412.32007 921184.1
+413.32336 167261.5
+427.56461 39274.3
+430.33072 641531.4
+431.33401 148913.3
+432.20657 26885.7
+443.49020 25119.6
+448.34079 437848.2
+449.34445 110278.4
+469.60724 27048.8
+492.18942 24838.3
+532.49524 101700.3
+533.60327 24648.6
+545.85980 23598.5
+549.18005 35682.9
+561.37012 992427.6
+562.37311 270820.3
+573.58423 29436.4
+579.38086 997775.6
+580.38391 268661.8
+597.39178 1336519.4
+598.39417 426652.3
+599.39392 33319.2
+615.40167 1959118.9
+616.40521 465776.4
+617.40387 37485.6
+630.43805 36271.4
+676.65454 42292.6
+684.91626 24310.4
+686.54675 30032.1
+768.38110 25829.3
+778.42004 25822.1
+882.96552 28602.1
+1008.87695 24724.4
+1019.75311 30577.3
+1044.72229 80960.8
+1062.73523 156359.6
+1063.73877 47051.9
+1113.35608 27793.1
+1188.25317 37055.3
+1193.78174 144404.6
+1194.77454 92764.0
+1198.10437 145629.1
+1211.79053 100045.2
+1354.55444 37078.3
+1358.01880 30716.3
+1479.13660 27116.8
+1489.93091 28057.8
+1691.33643 28282.4
+1876.97803 31291.1
+1877.75085 30530.1
+1878.77673 58065.4
+1879.12354 54305.0
+1879.57910 846886.9
+1879.83997 103813.8
+1880.02966 67977.1
+1880.38062 61300.9
+1907.04980 314612.4
+S	3342	3342	1880.09799127
+Z	3	5637.019
+Z	2	3758.348
+532.51483 1840.7
+538.20325 663.7
+540.40405 703.5
+549.14758 756.0
+676.67780 1218.7
+772.00494 686.5
+795.91223 1192.2
+830.89111 697.3
+961.03394 720.5
+1058.16370 661.9
+1101.69263 616.5
+1198.15100 3404.9
+1245.45483 684.9
+1525.38855 941.5
+1667.27515 688.0
+1859.85925 686.5
+1869.73633 784.6
+1877.72107 822.7
+1877.91833 589.7
+1878.55200 772.1
+1879.24268 1545.4
+1879.62549 19880.8
+1880.01184 2242.9
+1880.30750 1003.3
+1880.82483 858.8
+1881.38940 814.0
+1907.02356 7145.4
+1930.14954 653.4
+1930.58228 933.0
+1957.01318 618.9
+S	3343	3343	1231.72124127
+Z	2	2461.595
+Z	3	3691.888
+341.84619 7627.3
+342.81699 7601.8
+350.27939 9140.1
+363.38818 7106.8
+381.37961 9910.3
+381.61707 6622.8
+394.30960 722380.9
+395.31299 214435.5
+396.31650 20630.2
+412.32001 542429.0
+413.32346 162015.7
+414.32672 19323.0
+427.52896 8869.7
+427.56003 8239.9
+430.33051 389250.5
+431.33377 113904.8
+432.33636 11681.5
+437.37839 7395.6
+444.59985 7332.6
+448.34088 302025.6
+449.34439 71862.8
+480.00494 7733.1
+482.66776 10007.7
+532.49646 26604.1
+547.67792 8394.3
+561.37036 624175.4
+562.37384 217255.5
+563.37384 30624.8
+579.38098 579604.8
+580.38416 196248.6
+581.38361 27142.8
+597.39154 897946.9
+598.39496 290018.9
+599.39746 47254.9
+615.40167 1195351.4
+616.40503 417947.2
+617.02307 8881.3
+617.40735 68219.3
+676.66571 11875.7
+762.18182 8714.6
+795.90240 8760.9
+833.07922 10319.0
+914.55695 10320.3
+972.38464 7892.1
+1013.13654 8574.6
+1044.72498 53306.5
+1045.72424 30006.4
+1057.28772 15468.1
+1062.73706 73811.8
+1063.74036 33247.2
+1188.13599 10977.3
+1193.77441 75985.7
+1194.78125 55386.2
+1195.78528 25001.9
+1196.55713 8313.6
+1198.10461 46082.1
+1201.90393 8275.5
+1211.78796 70148.9
+1243.50964 8673.2
+1485.05322 8807.0
+1525.45947 10911.3
+1536.99841 63356.7
+1537.49817 196083.7
+1537.99805 257744.0
+1538.49841 195007.5
+1538.99854 148091.5
+1539.50000 88687.6
+1539.99036 28363.2
+1540.49915 12052.8
+1544.58582 9266.3
+1844.19812 26531.7
+1845.19299 45200.7
+1846.18835 40544.5
+1847.20251 15543.3
+1879.18152 21515.2
+1879.59680 257476.0
+1880.03369 19345.2
+1906.69092 8825.8
+1907.03467 96354.3
+1962.33826 8685.8
+S	3345	3345	1230.72140793
+Z	3	3688.889
+Z	2	2459.595
+350.28378 755.7
+376.30072 660.1
+381.37231 800.2
+388.60660 524.7
+393.36453 663.9
+394.31033 217033.6
+394.71820 1307.7
+395.31354 72626.5
+396.31699 13670.8
+397.32159 1050.6
+408.47595 566.5
+412.28970 1063.6
+412.32068 158963.0
+413.21326 710.0
+413.32394 53555.4
+414.32742 9628.4
+415.32629 840.7
+430.33127 107960.4
+431.33435 40693.3
+432.33780 5975.6
+436.47021 751.0
+448.34152 71673.8
+449.34525 23693.7
+450.34909 5271.9
+477.75513 797.1
+532.52997 1922.0
+561.37146 169498.5
+562.37433 75804.6
+563.37567 15462.3
+564.37134 3218.5
+579.38184 152920.8
+580.38495 67320.3
+581.38684 15503.0
+582.38336 2913.1
+596.62543 792.8
+597.39240 205707.8
+597.92462 684.2
+598.15466 888.9
+598.39539 84029.9
+598.95251 963.5
+599.39618 19354.6
+600.39636 4717.9
+604.87061 754.5
+613.78290 750.0
+613.92773 827.8
+614.61353 1018.8
+615.40259 252219.9
+616.20068 1150.9
+616.40558 104759.4
+616.73718 750.1
+617.03125 1024.3
+617.40613 25307.0
+618.40448 5759.2
+676.64026 1337.6
+731.15173 852.3
+795.89557 905.2
+839.51721 793.2
+849.41858 634.9
+851.83514 633.4
+865.46082 596.0
+888.50433 654.8
+940.28131 725.7
+1026.72131 757.0
+1044.72607 7114.1
+1045.73291 3568.3
+1046.73499 1499.6
+1057.23877 1052.8
+1062.73694 43443.4
+1063.74084 30861.0
+1064.74316 13512.5
+1065.74304 5207.7
+1066.75623 1213.8
+1107.79614 3018.0
+1108.79590 1851.6
+1193.77832 13855.1
+1194.78040 10798.0
+1195.78088 5478.5
+1196.78394 2259.6
+1198.17395 3229.4
+1385.96936 573.8
+1414.82227 646.7
+1777.36401 808.1
+1878.93347 1479.9
+1879.53308 19200.1
+1880.17102 1667.5
+1880.58105 626.5
+1907.04944 7168.6
+1907.44556 687.6
+1919.06384 749.4
+1930.67371 1013.6
+S	3346	3346	1231.7218246
+Z	3	3691.89
+Z	2	2461.596
+394.30951 840927.3
+395.31348 216898.8
+395.60278 26147.6
+412.32001 634059.2
+413.32376 171036.4
+427.52350 32874.2
+430.33054 405255.8
+431.33405 139016.2
+441.56097 25645.9
+448.34048 310566.2
+449.34415 75370.5
+454.68057 29714.8
+500.35486 29949.7
+531.92914 28030.6
+532.51282 105174.0
+549.14954 37332.1
+559.79413 27049.9
+561.37061 684228.6
+562.37476 217046.8
+579.38110 669953.5
+580.38422 205550.1
+597.39124 972539.6
+598.39557 308934.8
+599.40369 37509.9
+615.40228 1312026.0
+616.40460 427130.3
+617.40778 76885.6
+676.66364 56984.3
+746.14850 27317.9
+786.08820 28446.8
+920.77930 34143.1
+1044.72192 79332.4
+1045.72961 53844.8
+1057.28088 33872.7
+1062.74231 61119.1
+1187.92920 37737.2
+1193.77808 80425.9
+1194.78149 75057.1
+1198.14575 158651.6
+1211.78711 211436.9
+1314.20728 30762.2
+1456.62427 27980.1
+1525.42139 33294.6
+1537.49707 129780.1
+1537.99658 290420.7
+1538.50024 298483.8
+1539.00500 120436.3
+1539.49255 31284.8
+1550.52783 33781.8
+1593.83167 29935.1
+1609.30505 30637.0
+1653.99146 31521.1
+1667.34412 32084.8
+1699.45825 32330.3
+1845.21594 44787.6
+1877.86426 32420.8
+1878.69653 51226.0
+1879.10669 72053.0
+1879.61182 908920.4
+1879.90149 55578.7
+1880.14282 70269.2
+1880.64111 45749.2
+1881.09985 25805.6
+1881.35364 40879.2
+1883.54492 38064.8
+1907.14124 333923.3
+1930.59412 48551.0
+S	3347	3347	1845.4508246
+Z	4	7377.772
+532.51501 2111.3
+549.14191 871.5
+557.78436 673.8
+582.78900 694.4
+630.39276 749.8
+652.35535 642.2
+657.71240 630.8
+676.64667 811.6
+795.88416 891.4
+876.58575 601.7
+918.22601 743.2
+1198.15222 3711.5
+1229.79236 4073.7
+1230.79919 4392.3
+1357.85364 713.0
+1399.95581 626.0
+1629.90771 688.4
+1776.73389 698.1
+1778.89722 649.0
+1879.55090 19029.3
+1879.85291 2888.5
+1880.09290 2107.9
+1880.60718 725.0
+1880.84705 740.5
+1903.93188 584.8
+1907.14539 7451.6
+S	3349	3349	1230.7238246
+Z	3	3688.896
+Z	2	2459.6
+342.25873 48522.2
+394.30951 1393018.3
+395.31302 314777.9
+412.32010 1110157.1
+413.32291 246801.8
+427.52606 50284.0
+430.33041 800516.6
+431.33414 144903.5
+442.95145 33369.1
+445.70001 43983.1
+448.34088 533237.6
+449.34451 97320.8
+532.48242 102599.5
+561.37042 1247730.4
+562.37372 369967.9
+579.38086 1199874.0
+580.38434 306912.0
+597.39148 1883855.8
+598.39459 462272.7
+615.40155 2480451.3
+616.40503 692974.8
+652.75830 39387.7
+674.67291 33244.7
+676.63916 44219.9
+960.02246 33890.4
+984.87091 36950.8
+989.38104 38472.6
+1000.65912 36720.3
+1005.65411 39857.4
+1019.72009 37528.4
+1044.72693 120861.2
+1045.72144 54200.6
+1062.73767 188579.3
+1092.96423 36574.0
+1182.54077 41737.7
+1193.77502 150084.4
+1194.78564 92516.8
+1195.79895 40493.1
+1198.07434 198118.6
+1211.77917 151438.4
+1221.86658 40295.3
+1878.42065 44937.8
+1878.89465 73624.2
+1879.56323 1066651.8
+1879.83777 152710.2
+1880.12952 54425.3
+1880.57007 71710.3
+1881.18018 41539.3
+1907.14807 374796.5
+1907.58508 34742.9
+1930.51721 47645.3
+S	3350	3350	1231.72440793
+Z	2	2461.601
+Z	3	3691.898
+328.07620 26630.8
+340.27325 23808.7
+394.30984 2376223.8
+395.31320 718327.6
+396.31674 81790.1
+412.32019 1929326.4
+413.32364 532887.0
+414.32709 55259.7
+430.33066 1332186.9
+431.33420 388259.8
+432.33643 49341.2
+448.34097 995848.9
+449.34467 247671.2
+450.34729 29534.0
+493.39841 33851.7
+532.45190 77374.6
+561.37067 2231025.8
+562.37396 738663.1
+563.37421 88573.7
+564.36383 26018.0
+576.77271 32117.9
+578.59924 23323.1
+578.63123 22852.2
+579.38116 2049792.3
+580.38483 702240.6
+581.38507 97631.5
+597.39172 2964700.8
+598.39496 993914.9
+599.39575 152028.9
+615.40198 4254180.0
+616.40527 1471164.0
+617.01447 25132.5
+617.40735 254105.8
+630.37897 38165.1
+634.93457 26842.0
+651.11249 22836.0
+676.67688 38093.3
+731.09351 36091.2
+752.31940 25575.0
+782.94525 28051.0
+823.29077 28290.4
+823.47400 32166.1
+966.74408 25845.7
+1044.72766 189898.8
+1045.72583 79802.2
+1062.73694 214428.8
+1063.73682 94498.4
+1067.95825 27058.2
+1166.39148 25293.8
+1193.77551 305628.1
+1194.77905 200419.0
+1195.79187 45045.9
+1198.01038 141467.6
+1211.79236 138211.4
+1231.57385 31554.9
+1236.47888 28947.0
+1536.99829 680730.6
+1537.49792 1692463.9
+1537.99829 2057886.8
+1538.49976 1577337.0
+1539.00049 977908.5
+1539.50037 577566.1
+1540.00330 268513.4
+1540.50330 78383.3
+1607.35852 25930.7
+1667.33093 31083.7
+1844.19153 211987.5
+1845.19775 247874.6
+1846.19495 207486.1
+1847.20569 65334.1
+1848.17737 49592.3
+1849.20349 31631.8
+1870.02161 27375.4
+1872.59351 31795.8
+1877.95837 26472.4
+1878.89001 83528.8
+1879.34204 149837.5
+1879.62793 772689.1
+1880.40295 32606.3
+1880.94763 35452.5
+1881.62305 47040.3
+1907.10571 309661.6
+1919.09717 28489.1
+1930.51392 53564.8
+S	3351	3351	1538.2565746
+Z	4	6148.995
+418.53735 1216.9
+427.55405 1134.7
+479.77386 1236.9
+499.56467 1042.1
+531.71924 1106.0
+532.46753 2879.4
+535.86890 1057.8
+553.16168 1291.7
+593.64063 992.6
+597.38379 1292.0
+615.40118 5768.0
+616.40509 2256.7
+622.67828 1071.5
+676.65350 2469.7
+780.98987 1330.0
+795.89087 1475.4
+962.29565 1137.1
+1062.73645 1262.6
+1134.34241 1118.8
+1198.03687 5447.2
+1229.79675 112647.0
+1230.79980 107777.7
+1231.80103 51059.1
+1232.80261 15225.7
+1233.81750 2798.7
+1348.14331 1110.2
+1467.34375 1194.1
+1569.27820 1389.7
+1786.73706 1032.6
+1844.19019 171129.7
+1845.19214 177053.0
+1845.87939 3178.1
+1846.19495 101497.5
+1846.47778 1225.6
+1846.87573 1176.4
+1847.19849 40120.8
+1848.19849 13519.9
+1849.20129 2987.2
+1856.17627 976.0
+1878.71289 2693.0
+1879.27148 2526.4
+1879.58496 34233.6
+1879.96704 3349.1
+1880.27026 1590.2
+1880.47473 1791.7
+1907.10681 12329.3
+1999.15222 1590.4
+1999.67615 2375.4
+S	3353	3353	1230.7198246
+Z	3	3688.884
+Z	2	2459.592
+333.99094 1292.8
+348.50873 1560.7
+359.06805 1208.0
+393.47943 1914.8
+393.89893 2014.8
+394.27078 1873.3
+394.31009 445300.6
+394.71823 1721.4
+395.14340 2469.1
+395.31335 150119.1
+395.69876 1294.5
+396.31656 21386.0
+397.31702 1695.2
+412.32040 317099.6
+412.90314 1560.6
+413.32367 110558.0
+414.32706 17108.6
+430.33099 231168.9
+431.33417 75308.2
+432.33746 10925.2
+448.34113 149732.0
+449.34479 47933.8
+450.34863 6682.8
+464.80283 1497.0
+493.39798 3261.5
+532.48438 4052.8
+559.96063 1484.9
+561.37109 352863.3
+562.06573 2147.1
+562.37408 142258.7
+562.78503 2397.2
+563.37585 29310.0
+564.37018 5914.5
+579.38147 323724.5
+580.38458 121979.9
+580.60211 1339.2
+580.86877 1574.9
+581.38586 27046.5
+582.38251 4094.7
+597.39203 442830.2
+598.15533 1821.0
+598.39508 165370.6
+599.39581 36118.7
+600.39307 8007.7
+612.05981 1097.9
+614.60284 2239.8
+615.13123 1708.4
+615.40216 545478.2
+616.20020 2442.1
+616.40497 190525.4
+616.73358 1446.7
+617.02655 2502.3
+617.40674 42806.4
+618.40479 9493.6
+619.40771 1454.3
+624.03229 1149.8
+630.42706 1522.0
+633.49829 1234.3
+646.04065 1208.4
+676.70117 2630.0
+795.90302 1817.3
+808.88257 1257.0
+811.80603 1416.2
+839.52130 1883.2
+968.57135 1338.7
+1027.71289 1842.6
+1028.68384 1131.1
+1044.72461 12511.7
+1045.73181 5740.4
+1046.73364 1650.7
+1062.73669 46003.8
+1063.74109 24700.5
+1064.74353 8526.5
+1065.74512 2622.8
+1107.80664 3915.0
+1108.80640 1795.6
+1175.76074 1416.1
+1193.77759 31835.6
+1194.78198 22377.4
+1195.77942 8933.2
+1196.78577 4245.2
+1198.08398 7095.5
+1560.04492 1254.5
+1620.08752 1470.7
+1661.01343 1312.0
+1877.31921 1896.0
+1878.79993 3378.4
+1879.25659 6776.5
+1879.32813 6638.6
+1879.68140 39419.7
+1880.09033 6790.4
+1880.57031 3036.1
+1880.96228 2419.4
+1881.21021 2034.1
+1907.16162 15505.7
+1970.03320 1343.4
+S	3354	3354	1880.00399127
+Z	3	5636.737
+Z	2	3758.16
+532.47284 2285.2
+549.15698 795.4
+556.66449 579.5
+568.16138 574.2
+676.62067 1281.9
+731.12097 737.1
+780.85199 666.3
+795.89734 930.3
+803.38586 585.8
+901.54059 698.7
+938.60126 720.9
+943.44073 756.9
+948.66132 607.1
+1003.14105 677.7
+1019.67584 663.4
+1020.77704 714.5
+1057.21643 1033.5
+1184.66638 586.2
+1198.05688 3681.5
+1228.09924 573.5
+1431.04919 552.6
+1525.40076 1058.0
+1580.45874 630.4
+1716.84204 1286.7
+1749.10559 560.1
+1871.64917 758.7
+1879.22522 1878.4
+1879.48608 21337.2
+1907.10901 7688.9
+1908.48181 606.6
+1930.61389 891.8
+S	3355	3355	1231.72140793
+Z	3	3691.889
+Z	2	2461.595
+335.01379 15369.5
+345.76636 17905.2
+350.30365 23625.0
+355.51236 17157.3
+371.07455 18911.0
+378.02448 20236.3
+394.30948 750656.9
+395.31293 195592.1
+412.31979 579507.4
+413.32309 156878.5
+430.33047 404179.1
+431.33316 103022.2
+432.94156 16635.0
+445.52594 18900.1
+448.34106 265371.6
+449.34378 61376.9
+465.30655 15663.2
+473.85776 18538.7
+479.78333 15813.3
+482.67133 20327.0
+486.54742 18481.8
+514.43921 15482.8
+532.47882 48676.5
+549.16974 16996.7
+561.37036 668758.1
+562.37274 209383.7
+563.37128 32463.0
+579.38104 593201.5
+580.38428 218854.4
+580.43542 15112.9
+597.39130 916872.6
+598.39398 259128.1
+599.39838 32211.0
+600.87512 15813.0
+615.40143 1342297.1
+616.40509 425517.7
+617.40332 62297.7
+619.94415 16756.7
+630.42267 22838.9
+640.52783 19381.8
+657.94928 20587.7
+688.25830 16254.4
+795.89478 30769.4
+839.05273 15524.5
+1039.10803 18442.0
+1044.72742 66029.3
+1045.71167 29834.0
+1062.73206 73416.6
+1063.74377 38214.3
+1123.26624 15623.1
+1193.77368 76503.2
+1194.76660 42751.7
+1198.06726 88619.6
+1211.78711 163776.4
+1212.79395 23696.4
+1241.45813 17459.6
+1289.47668 19681.6
+1536.99756 53925.4
+1537.49646 203761.7
+1537.99719 308158.9
+1538.49976 303445.3
+1539.00513 146680.8
+1539.49109 75751.4
+1717.49353 31142.7
+1783.54175 17402.8
+1844.18665 29538.7
+1845.18457 78017.2
+1846.19556 69681.6
+1847.20020 21846.2
+1877.33521 16264.0
+1879.49890 535621.3
+1906.88538 18121.2
+1907.17236 205286.6
+S	3357	3357	1230.22899127
+Z	3	3687.412
+Z	2	2458.61
+330.09436 7110.3
+341.99478 8241.0
+350.28207 12930.6
+392.93753 7876.5
+394.30978 956779.8
+395.31308 295474.0
+396.31686 31976.5
+412.32013 736977.9
+413.32333 231988.1
+414.21729 7803.7
+414.32724 24544.6
+430.33069 518602.7
+431.33392 139478.3
+432.33734 18262.0
+448.34100 342974.0
+449.34439 98151.8
+532.49304 25373.4
+551.83270 7889.5
+561.37079 812296.9
+562.37390 308171.7
+563.37543 40026.0
+579.38110 742647.1
+580.38428 277550.0
+581.38477 26243.5
+596.62085 8015.2
+597.39185 1037185.8
+598.39490 384322.5
+599.39679 68280.8
+615.40234 1285426.6
+616.40515 451691.4
+617.01788 10383.6
+617.40558 76591.0
+619.09113 8183.9
+676.64905 13209.8
+745.94922 8277.9
+781.02075 7874.7
+1026.74170 8837.8
+1044.72583 58196.6
+1045.72961 27834.8
+1057.26245 12003.9
+1062.73621 65904.0
+1063.74072 38272.3
+1135.91089 9657.6
+1193.77686 73897.8
+1194.78247 56895.2
+1195.77625 27173.4
+1198.10364 43780.1
+1229.65796 9801.4
+1259.97473 9391.4
+1371.33398 9424.6
+1427.24207 8849.2
+1489.66052 9462.5
+1611.66870 8867.7
+1769.81445 8375.6
+1869.05127 7289.3
+1879.05688 8054.8
+1879.56189 263428.3
+1880.10132 7601.3
+1907.06030 95086.3
+1907.36682 13571.0
+1909.94592 7558.5
+1930.60986 13646.7
+1969.18054 8536.2
+1997.95801 11422.6
+S	3358	3358	1231.23040793
+Z	3	3690.416
+Z	2	2460.613
+332.03229 19462.3
+335.67587 18319.4
+378.50360 16596.4
+394.30963 1181336.3
+395.31308 321090.4
+396.31491 34851.9
+412.32013 873890.9
+413.32361 224813.2
+430.33069 611740.1
+431.33435 154696.4
+432.33826 21164.8
+448.25717 16059.5
+448.34100 408375.4
+449.34360 88271.2
+482.63782 22064.2
+512.82025 16435.1
+514.29773 16604.4
+532.46552 44458.2
+552.58771 15946.4
+561.37067 1006351.8
+562.37378 318577.2
+563.37842 31140.6
+579.38098 996833.6
+580.38428 328459.0
+581.38330 46592.3
+597.39148 1436822.0
+598.39484 440046.6
+599.39703 59352.1
+615.40204 1931537.9
+616.40497 585254.1
+617.40662 85440.0
+625.98010 15959.4
+676.63269 38733.2
+731.09540 24162.3
+795.90057 26023.7
+834.43201 18982.1
+1012.48840 15027.6
+1044.72485 96390.0
+1045.72656 34746.5
+1062.73743 167526.9
+1063.73694 49873.0
+1193.77905 136585.3
+1194.78064 69297.7
+1195.78528 20677.7
+1198.04602 82995.2
+1211.78516 60660.6
+1222.51575 17732.7
+1436.21570 18392.0
+1449.68127 17730.5
+1536.99475 66709.8
+1537.49512 202915.7
+1537.99756 279492.9
+1538.50000 281925.3
+1538.99939 209160.0
+1539.50244 93628.7
+1540.01770 29294.9
+1635.34705 20565.8
+1667.27502 19045.1
+1719.36353 35422.1
+1788.65686 19130.9
+1844.20862 26730.4
+1845.18933 50413.2
+1847.20325 34167.5
+1874.69348 19310.9
+1879.21533 67071.4
+1879.53577 526601.4
+1879.95544 65779.6
+1882.85950 24771.8
+1907.12366 198299.5
+1930.49182 22928.9
+1998.21692 28392.6
+S	3359	3359	1232.2298246
+Z	3	3693.414
+Z	2	2462.612
+350.30316 30357.9
+359.86584 25144.8
+365.56503 24764.5
+376.59073 26438.5
+380.73663 27078.8
+394.30957 1020613.9
+395.31268 320843.6
+396.31934 31301.2
+412.32007 817596.4
+413.32318 248690.4
+430.33060 556322.9
+431.33450 128745.7
+448.34055 405663.7
+449.34494 117031.2
+453.58923 24921.3
+454.24197 24656.6
+460.04306 27877.0
+532.48608 85743.1
+561.37073 904682.9
+562.37378 343078.8
+563.37787 60283.4
+563.95032 24331.7
+579.38092 932986.9
+580.38391 309934.4
+581.38995 31778.3
+597.39154 1367671.8
+598.39465 454265.3
+599.39722 69354.7
+602.86969 29707.0
+615.40179 1851232.4
+616.40491 629427.7
+617.40930 79765.6
+630.41516 30806.9
+795.89740 40289.0
+803.38275 30978.9
+824.62946 26847.9
+830.40210 24641.9
+988.52515 27103.0
+1044.72290 66101.8
+1045.71313 36631.3
+1057.26196 31782.8
+1062.74011 106856.8
+1063.73401 46740.8
+1064.73328 33127.5
+1193.77893 118283.6
+1194.77551 76363.4
+1198.08801 135825.1
+1211.78711 332475.1
+1212.78516 91848.2
+1229.67578 50440.6
+1472.09937 27621.9
+1525.44019 40253.3
+1536.98926 38235.4
+1537.50122 241289.1
+1537.99792 495511.3
+1538.49902 377237.8
+1538.99988 192796.0
+1539.49487 53380.5
+1613.91333 28480.6
+1718.18103 28501.2
+1719.44067 65804.0
+1845.20752 102387.8
+1846.21545 50225.6
+1847.19263 50758.1
+1874.94165 32757.3
+1878.17126 30529.9
+1878.89966 66937.2
+1879.55957 819244.0
+1879.89160 43549.7
+1880.20410 69566.7
+1907.14795 308085.4
+S	3361	3361	1230.72140793
+Z	2	2459.595
+Z	3	3688.889
+394.30978 486827.7
+395.31281 138365.0
+412.32025 360241.4
+413.32156 84937.3
+416.08386 37813.3
+427.54019 59923.1
+430.32993 256938.3
+441.58878 41123.8
+448.34210 169658.8
+532.50159 124648.6
+561.36993 409188.9
+562.37012 119215.3
+573.61877 42735.4
+579.38062 456699.7
+580.38287 63065.2
+597.39185 612388.4
+598.39496 170886.9
+615.40039 740260.9
+616.40417 214348.3
+617.35211 42856.1
+630.41077 71176.8
+640.54822 42414.8
+646.75092 39942.2
+676.68024 52321.0
+689.57208 44711.5
+731.12573 45633.3
+734.56427 53721.1
+808.53552 43656.2
+934.04218 37817.8
+973.06781 51981.4
+1044.72302 46201.8
+1096.78040 44300.2
+1128.69226 39314.8
+1188.31787 44112.5
+1198.11340 218805.6
+1659.59460 53295.0
+1719.07983 58238.0
+1772.16565 50447.3
+1878.13867 58796.5
+1879.25928 203446.9
+1879.72388 1186403.1
+1880.19006 187681.2
+1880.62439 81464.3
+1880.89441 49569.9
+1881.36987 84360.9
+1881.80261 59218.3
+1907.15112 447271.2
+1907.42200 103079.9
+1930.60339 63466.6
+1995.17139 45391.4
+S	3362	3362	1231.7228246
+Z	2	2461.598
+Z	3	3691.893
+350.29419 25869.1
+394.30969 622508.9
+395.31277 168935.1
+412.31989 532056.1
+413.32364 152207.9
+430.33063 359231.8
+431.33536 71346.1
+448.34052 228690.0
+449.34656 72639.3
+482.68002 24205.7
+507.66586 19213.9
+517.32965 20802.4
+532.48816 66246.6
+561.37054 551935.9
+562.37561 146412.9
+563.37860 24589.0
+579.38104 471797.8
+580.38324 179550.5
+581.38916 22761.2
+597.39154 830859.0
+598.39465 281832.2
+599.39722 37087.2
+615.40192 1126849.4
+616.40552 375131.6
+617.41132 39220.6
+650.20044 23194.3
+676.64990 22652.7
+745.46161 22958.7
+786.07190 23600.9
+794.78497 21107.6
+795.90363 49044.2
+825.46783 21082.4
+865.14862 20604.4
+895.83624 22535.7
+931.12512 21085.4
+1023.96118 20719.1
+1044.72144 48700.8
+1045.73206 31066.9
+1057.30151 26887.4
+1062.74048 71279.0
+1113.13818 20005.6
+1177.58154 24979.5
+1188.33362 27313.1
+1193.78088 51024.6
+1194.77405 24882.2
+1198.09802 98855.3
+1211.78967 136036.1
+1212.80005 30312.3
+1353.38013 21589.9
+1537.49146 75967.8
+1537.99854 163009.7
+1538.49915 227654.6
+1538.99890 104962.4
+1568.84631 22829.0
+1718.82520 33508.3
+1860.13098 24178.8
+1875.67322 25129.9
+1878.24658 22238.4
+1878.47156 25270.2
+1878.93335 38478.7
+1879.17627 48341.6
+1879.67102 556193.8
+1879.89636 183221.5
+1880.11597 99553.7
+1880.45532 45121.6
+1880.73071 21457.1
+1880.93359 28381.1
+1904.85486 21363.0
+1907.15063 257089.8
+1919.12622 27552.8
+1930.66406 26120.6
+1986.25269 23406.9
+S	3363	3363	1880.02040793
+Z	3	5636.786
+Z	2	3758.193
+532.55249 1926.0
+676.68787 1210.4
+695.59668 692.9
+755.93011 674.0
+795.89777 963.0
+854.22131 601.2
+1069.50610 825.3
+1083.83289 750.6
+1177.21741 682.5
+1198.23657 3144.7
+1229.64270 647.6
+1391.25159 696.5
+1525.47412 916.8
+1559.92102 637.1
+1717.92090 1235.9
+1763.71643 652.4
+1873.43958 1423.8
+1879.38464 2218.4
+1879.65918 19236.6
+1879.96777 2404.7
+1881.21277 731.6
+1881.52771 716.4
+1907.15857 7393.0
+1930.66321 1266.2
+S	3365	3365	1230.7258246
+Z	3	3688.902
+Z	2	2459.604
+328.88699 36825.9
+394.30948 458844.5
+395.31302 122314.4
+412.31964 327344.2
+413.32297 64717.7
+427.54681 52657.7
+430.33057 238914.7
+443.28900 33924.6
+448.34021 187395.9
+467.47870 36878.5
+477.04941 40489.0
+482.64230 34123.9
+532.48846 132262.5
+549.15118 57128.9
+561.37152 399904.8
+562.37555 125097.0
+577.57831 37879.5
+579.38086 346620.9
+580.38287 87423.0
+597.39209 597900.1
+598.39716 176863.6
+615.40210 894175.6
+616.40570 189987.3
+630.40186 53900.3
+676.66559 64829.6
+781.05005 37038.6
+795.91284 61889.8
+863.84607 36362.0
+938.42926 38686.6
+1019.76892 40825.2
+1022.70813 46596.1
+1103.40540 35589.6
+1198.09644 179612.6
+1208.56689 39822.3
+1211.78015 71432.4
+1259.34351 42365.6
+1285.52332 42209.8
+1533.57458 34578.7
+1537.00183 58787.6
+1537.49060 53982.9
+1655.54004 43300.1
+1697.86243 39021.6
+1717.00110 39086.7
+1751.64136 46219.1
+1872.42078 43539.3
+1877.68091 58104.6
+1878.63672 67316.0
+1878.86304 48116.5
+1879.19128 84104.0
+1879.59937 1116257.0
+1880.30029 61241.6
+1880.55701 72908.8
+1881.25330 51259.2
+1883.03040 43043.9
+1907.06140 392387.2
+1930.60425 56547.0
+S	3366	3366	1845.4585746
+Z	4	7377.803
+532.52185 2275.9
+549.76337 615.6
+574.04041 640.2
+585.76550 652.8
+594.48254 551.5
+632.58691 680.0
+647.90076 653.3
+676.66687 767.3
+678.02295 597.6
+683.42981 675.7
+687.87158 603.5
+780.77966 542.2
+790.47601 575.1
+795.90088 1443.3
+1020.78406 678.9
+1198.16541 3693.6
+1229.79333 6947.1
+1230.79944 4171.1
+1231.80273 964.0
+1716.31873 1129.1
+1859.68811 654.1
+1871.54089 1003.9
+1875.42529 640.7
+1878.13428 1032.3
+1879.59448 18383.8
+1879.89954 5234.7
+1880.97852 834.0
+1885.83862 834.6
+1907.03284 7314.3
+1907.34375 568.2
+S	3367	3367	1231.72640793
+Z	2	2461.605
+Z	3	3691.904
+341.14832 12627.0
+349.69092 13996.4
+365.74350 14908.1
+394.30954 1022502.3
+395.31296 304043.1
+395.89056 13931.3
+396.31757 41573.6
+412.32007 845302.2
+413.32333 190241.7
+414.32510 28774.0
+430.33051 542909.2
+431.33405 150052.9
+432.33875 20656.7
+448.34091 416050.8
+449.34387 107621.8
+482.68527 16975.5
+532.51538 39052.4
+561.37042 914008.7
+562.37360 289388.7
+563.37701 42752.8
+579.38086 857555.1
+580.38409 275128.3
+581.38373 37000.9
+586.43365 14406.1
+597.39154 1260939.9
+598.39484 406694.9
+599.39539 55722.9
+615.40173 1789582.6
+616.40491 563260.9
+617.02686 13553.2
+617.40509 93202.4
+630.43799 15238.8
+668.24438 12797.1
+676.69958 22444.5
+678.93079 11766.2
+731.15222 16009.5
+795.91309 18511.2
+804.34863 13695.4
+903.55035 15649.9
+1044.72888 75286.0
+1045.73401 51033.4
+1057.34363 19657.6
+1062.73718 121011.7
+1063.74268 38981.0
+1108.82263 13617.0
+1188.16028 20059.2
+1193.77649 120283.7
+1194.77759 69959.4
+1195.78101 19313.7
+1198.15173 75928.6
+1211.78601 109797.4
+1299.85266 15407.5
+1477.55408 15103.1
+1525.48718 20050.1
+1536.99695 232752.4
+1537.49707 486032.5
+1537.99878 591319.9
+1538.49829 587224.2
+1538.99902 324970.2
+1539.50195 156886.5
+1540.00049 78867.7
+1540.49341 18766.4
+1844.19824 59122.0
+1845.18799 101944.5
+1846.19385 71299.0
+1847.20093 23512.8
+1848.18542 13818.3
+1860.12158 14336.1
+1871.36560 28413.6
+1877.19592 17000.5
+1878.93811 35347.7
+1879.02808 35200.6
+1879.27551 50621.4
+1879.70801 400340.9
+1880.21521 52606.2
+1881.03113 14370.3
+1881.82849 19898.9
+1900.29456 15737.6
+1907.04578 152637.8
+1907.78687 15586.2
+1930.70007 19714.2
+S	3369	3369	1230.72399127
+Z	3	3688.897
+Z	2	2459.6
+341.44757 24537.0
+350.27945 27037.8
+352.11948 22528.9
+394.30966 621329.3
+395.31287 141585.2
+409.24445 21610.6
+412.31970 490230.4
+413.32474 90775.9
+430.33023 304078.0
+430.44797 25131.0
+431.33444 75470.7
+448.34094 193600.1
+449.34509 49500.4
+500.83926 25339.7
+532.48523 69446.8
+549.15820 23524.2
+561.37042 555034.4
+562.37518 156042.5
+579.38068 508995.6
+580.38525 144044.9
+582.46851 22693.8
+597.39142 763746.1
+598.39484 191543.3
+615.40198 1050997.6
+616.40576 271989.6
+649.91455 23113.5
+676.68365 44172.5
+732.18933 24853.1
+738.25128 24705.5
+767.52228 24415.2
+776.27423 23343.5
+795.91052 36093.1
+1019.68964 27332.3
+1044.72070 45837.6
+1062.73267 63972.4
+1193.78198 72267.9
+1194.77747 33709.6
+1198.08557 121029.4
+1211.79114 64181.6
+1231.66382 33449.8
+1485.90857 23916.3
+1525.46497 37562.1
+1534.36182 26248.5
+1593.82202 22056.9
+1676.46741 24852.8
+1715.49976 23728.2
+1803.38196 22908.6
+1878.05017 44513.7
+1878.89478 51678.8
+1879.29663 118984.8
+1879.66943 694178.6
+1880.02722 103159.6
+1880.51379 53010.4
+1880.84424 47013.5
+1907.05493 285564.5
+1930.66553 49725.6
+S	3370	3370	1231.7248246
+Z	3	3691.899
+Z	2	2461.602
+361.23199 865.7
+371.49695 800.3
+373.24567 822.4
+381.39941 851.2
+390.26242 879.8
+393.48151 1366.5
+394.31042 283336.5
+394.71896 1815.1
+395.14087 1877.0
+395.31363 89775.9
+396.31735 12733.3
+397.32007 1223.5
+411.43616 929.2
+412.32077 218104.3
+413.20486 1071.5
+413.32410 68899.5
+414.32739 10466.0
+430.33139 150311.0
+430.79831 936.7
+431.09976 829.7
+431.27887 958.3
+431.33453 47709.3
+432.33740 7109.5
+442.21188 855.6
+448.34164 102677.6
+449.34528 30903.6
+450.34808 5891.7
+493.39944 1542.1
+503.59940 900.1
+532.51508 2754.6
+547.54755 901.9
+559.96906 1156.7
+561.37170 239177.1
+562.06696 1600.3
+562.37451 94601.1
+562.78400 1292.4
+563.37634 18763.3
+564.37036 4599.8
+579.38196 217441.7
+580.38495 81623.1
+580.86005 1138.1
+581.38623 17302.8
+582.38129 3453.6
+595.84637 1695.9
+597.39258 299664.0
+597.62946 1308.7
+597.66620 780.7
+598.15540 1722.3
+598.39551 113496.2
+598.94183 1599.6
+599.39661 24096.5
+599.95905 907.1
+600.39233 5772.5
+601.39862 1002.5
+613.78827 2070.7
+614.60999 1837.5
+615.32397 1016.9
+615.40277 387244.5
+616.20233 2309.0
+616.40570 134872.7
+617.02582 2032.2
+617.40588 29324.5
+618.40503 5549.9
+619.41095 892.6
+636.00031 751.8
+713.84778 1036.5
+805.83179 941.0
+840.52545 867.7
+942.35571 817.6
+953.16138 809.2
+1026.71948 1341.6
+1028.73145 884.3
+1044.72522 8629.1
+1045.72815 4764.2
+1057.29321 1224.2
+1061.45215 846.5
+1062.73804 27816.0
+1063.74097 16746.3
+1064.74133 5319.5
+1107.79053 1599.3
+1108.79541 971.2
+1140.02600 1038.5
+1175.77551 1221.2
+1176.78613 1324.0
+1193.77869 20977.8
+1194.78149 14590.7
+1195.78162 5331.4
+1196.77686 1877.4
+1198.15088 4373.4
+1214.68237 829.9
+1256.29590 881.4
+1534.88733 1095.9
+1536.99768 79731.7
+1537.49878 162831.8
+1537.99927 187984.4
+1538.49951 166659.3
+1539.00049 107691.5
+1539.50171 56775.1
+1540.00134 28605.8
+1540.50500 10905.5
+1540.99670 4000.5
+1541.49976 1943.5
+1543.75220 938.7
+1543.90991 1035.6
+1545.50183 2670.5
+1546.01392 6075.5
+1546.51038 4545.5
+1547.01660 2524.1
+1844.19409 13002.3
+1845.20227 16121.2
+1846.19702 12685.8
+1847.20020 6627.5
+1848.21655 2779.7
+1870.58582 809.1
+1878.96521 2008.7
+1879.27112 4223.5
+1879.62488 25250.4
+1880.00977 4247.9
+1880.28162 2451.3
+1880.50122 1260.6
+1907.06665 9795.0
+1930.76917 1639.1
+S	3371	3371	1538.2568246
+Z	4	6148.996
+413.44336 682.6
+480.39014 656.1
+532.52582 1852.5
+543.69873 577.3
+553.62030 621.8
+597.39252 1437.5
+598.38971 679.9
+608.00525 643.5
+615.40234 4927.6
+616.40668 1694.1
+630.46741 733.3
+700.25342 584.0
+712.00775 601.8
+1062.72742 1395.0
+1065.05042 634.2
+1198.18884 3117.7
+1211.78784 897.4
+1212.79773 906.0
+1229.79700 131013.9
+1230.79968 115933.5
+1231.80151 59121.3
+1232.80225 19266.4
+1233.80176 4443.6
+1234.39331 906.5
+1234.81519 1151.9
+1273.49805 697.7
+1466.88135 759.1
+1525.54395 748.0
+1698.27686 721.7
+1776.84460 965.3
+1836.89941 848.5
+1841.05981 815.9
+1844.19043 114060.6
+1845.19189 145270.7
+1845.92261 1126.0
+1846.19446 100972.2
+1847.19690 44429.0
+1848.19458 17614.9
+1849.19543 3875.4
+1878.81958 1834.5
+1879.37793 2507.4
+1879.64709 19229.1
+1880.15149 990.8
+1880.48645 1645.6
+1881.02991 686.5
+1907.10864 7044.8
+1917.08582 643.2
+1919.02930 795.1
+1930.73499 875.0
+S	3373	3373	1230.72224127
+Z	3	3688.891
+Z	2	2459.597
+359.11011 19462.7
+364.35193 21985.3
+385.08298 23554.0
+394.30951 1189553.8
+395.31296 260828.0
+412.31992 860687.1
+413.32352 262508.8
+430.33066 606582.3
+431.33362 132091.0
+440.44724 22514.6
+448.34097 451974.1
+449.34412 114888.1
+464.02628 22215.5
+532.49908 62032.8
+546.19141 22170.9
+561.37018 1023567.9
+562.37427 278886.8
+579.38086 1057262.9
+580.38470 293846.4
+597.39148 1523664.0
+598.39435 374098.9
+599.39471 47728.6
+615.40167 1992398.6
+616.40540 539655.9
+617.40796 55226.0
+668.10132 25078.5
+676.66870 44356.3
+795.90106 30233.4
+820.79639 20998.1
+894.18384 31762.5
+908.19208 21186.6
+1003.58221 21154.0
+1019.74701 26342.9
+1044.72656 85065.5
+1045.73401 47144.7
+1057.30066 28290.5
+1062.73499 119394.0
+1063.73181 70143.2
+1092.79321 24104.0
+1193.77820 159988.4
+1194.77771 82598.5
+1195.77307 22991.8
+1198.10718 106408.1
+1211.78784 63250.1
+1236.29639 21933.1
+1290.96411 22769.7
+1667.27759 29147.0
+1779.67639 22483.5
+1870.26306 23454.1
+1874.20276 25434.5
+1879.06067 45936.1
+1879.60522 704176.4
+1880.16235 65098.2
+1900.27087 21097.6
+1907.18909 256556.3
+1930.56555 37260.8
+S	3374	3374	1231.72424127
+Z	2	2461.601
+Z	3	3691.897
+347.55670 26032.1
+350.28394 27137.8
+361.48578 27751.7
+377.01013 26688.5
+381.34540 31343.5
+394.30963 1050849.0
+395.31271 272802.3
+398.53152 30381.5
+412.31992 822166.8
+413.32324 189044.0
+430.33066 591265.0
+431.33401 168696.2
+448.34097 440277.3
+449.34451 100450.6
+463.22531 32126.2
+482.63354 36919.1
+532.51581 85564.5
+548.71722 29787.0
+549.13934 37574.4
+561.37018 872499.0
+562.37360 307012.4
+563.37042 48776.4
+579.38092 826459.1
+580.38507 231186.6
+581.38495 30932.9
+597.39166 1310679.3
+598.39490 424134.9
+599.40210 39529.5
+615.40173 1882682.8
+616.40436 576721.8
+617.40204 81588.0
+630.39410 37523.7
+657.44263 27016.2
+667.00397 29333.3
+676.65918 51855.2
+679.22479 29800.4
+739.52783 30628.3
+953.16437 31406.6
+1044.72327 104480.1
+1045.74548 31007.4
+1054.03760 29775.1
+1057.25586 32098.8
+1062.74109 82417.7
+1063.73547 44052.8
+1139.92358 34291.5
+1193.77686 115652.0
+1194.78064 57256.2
+1198.14941 139424.8
+1211.78748 266037.4
+1212.78857 74445.4
+1229.66711 37011.3
+1293.73193 29993.2
+1509.51453 31970.1
+1537.49963 209215.3
+1537.99731 391572.8
+1538.49695 366879.5
+1539.00061 203741.3
+1539.48608 33293.2
+1674.13245 34220.0
+1844.21082 33635.2
+1845.18604 65861.6
+1846.18347 74699.9
+1872.43445 29213.2
+1878.93469 41912.1
+1879.21594 146412.0
+1879.58215 925056.6
+1879.97815 110007.6
+1881.64771 29599.3
+1882.00745 37336.0
+1907.08875 341438.7
+1919.04517 40096.1
+1930.54578 35641.9
+S	3375	3375	1538.2540746
+Z	4	6148.985
+419.98471 693.4
+427.56622 832.1
+447.78098 538.0
+482.68430 763.7
+507.20486 704.6
+532.59668 1832.9
+548.27600 600.5
+557.68408 639.4
+561.37152 675.9
+597.39465 840.0
+614.11188 552.8
+615.40057 3735.5
+616.40063 1259.2
+655.59363 611.7
+663.80670 595.0
+676.66718 865.8
+706.26001 676.4
+716.45728 668.2
+795.89117 1115.5
+869.44769 711.2
+897.90588 589.8
+934.37030 587.1
+1057.28259 752.5
+1062.70557 596.9
+1063.73059 986.5
+1089.98828 676.3
+1110.44885 786.8
+1151.89026 707.8
+1198.32520 3239.9
+1211.79370 816.0
+1229.79590 97233.0
+1230.79871 96781.5
+1231.80029 44603.0
+1232.80139 13230.3
+1233.80542 2565.0
+1234.37842 803.6
+1385.45825 742.0
+1776.73535 965.8
+1844.18872 102718.0
+1845.19055 120850.1
+1846.19397 81953.3
+1847.19604 40827.1
+1848.19714 12837.9
+1849.20630 2688.7
+1878.29712 765.9
+1878.70020 1158.0
+1878.98340 2075.4
+1879.20715 1643.7
+1879.58740 19788.9
+1879.92871 1523.3
+1880.20044 1634.5
+1880.61780 943.6
+1881.25769 626.4
+1907.08167 7435.2
+1930.73010 977.5
+1933.30054 681.5
+S	3377	3377	1230.7248246
+Z	3	3688.899
+Z	2	2459.602
+342.25134 664.7
+358.91327 674.8
+389.18890 642.8
+393.89929 796.5
+394.31009 226248.0
+394.72089 1192.7
+395.14386 1128.1
+395.31329 80210.9
+396.31671 13151.9
+397.32031 1129.7
+400.13074 748.9
+407.82693 635.4
+411.43069 740.5
+411.65689 578.0
+411.88089 668.5
+412.28949 1117.4
+412.32040 161781.7
+413.21310 749.9
+413.32367 60174.4
+414.32678 9346.5
+430.33099 113409.4
+431.33408 41987.4
+432.33771 7094.1
+433.33743 1127.6
+448.34119 75058.7
+449.34451 24429.2
+450.34756 4823.5
+493.39816 1146.1
+524.60406 560.4
+532.54364 1806.3
+549.12073 882.4
+561.37103 180511.9
+562.06866 1215.1
+562.37384 75872.1
+563.37463 15633.2
+564.37073 3553.0
+579.38141 157427.4
+580.38446 64321.1
+580.86639 1048.3
+581.38550 14679.5
+582.38171 3970.4
+583.37933 753.1
+595.83923 1091.8
+597.39197 208391.2
+598.39496 83361.3
+598.94495 921.6
+599.39551 19744.7
+600.39398 3738.3
+601.39417 950.5
+607.23975 712.4
+613.78461 1121.0
+614.07172 903.5
+614.60693 1166.0
+615.40216 264432.4
+616.20044 1221.8
+616.40515 105149.7
+616.73798 676.5
+617.03009 1385.2
+617.40570 24315.5
+618.40289 5867.0
+619.40222 1128.2
+630.37830 718.7
+676.65363 752.6
+676.69940 621.5
+689.91321 649.8
+716.36188 587.3
+795.89032 1042.9
+847.97150 649.0
+882.28339 667.2
+1019.56244 636.6
+1019.72211 623.8
+1042.48315 626.7
+1044.72571 7631.3
+1045.72949 3959.2
+1046.73315 1808.3
+1057.65576 694.6
+1062.73608 47947.7
+1063.73999 30342.4
+1064.74219 14837.0
+1065.74353 5460.2
+1066.75378 1527.6
+1107.79724 3756.8
+1108.79370 1820.6
+1109.79993 804.3
+1175.76257 1183.1
+1176.78333 909.7
+1187.95227 731.7
+1193.77551 14352.3
+1194.78003 10480.2
+1195.77869 4737.5
+1196.78271 1683.6
+1198.21863 3200.2
+1229.97278 597.8
+1513.58057 684.1
+1525.34399 810.4
+1590.85193 593.6
+1603.97241 713.4
+1765.68994 712.5
+1776.72156 917.7
+1870.20410 1038.0
+1878.86255 919.3
+1879.26416 2348.4
+1879.55432 19937.5
+1880.34851 966.2
+1881.17883 714.2
+1883.01392 620.1
+1907.15845 7044.4
+1930.50427 943.3
+1998.74390 661.8
+S	3378	3378	1231.7258246
+Z	2	2461.604
+Z	3	3691.902
+325.89780 14428.5
+360.74939 18938.4
+394.30957 671682.9
+395.31284 154044.9
+396.31714 22463.3
+396.70102 16075.7
+412.31992 527503.6
+413.32330 133972.2
+427.56808 18472.0
+430.33054 388055.5
+431.33356 84206.9
+439.91229 17223.3
+445.24246 22159.9
+448.34103 250120.0
+449.34561 63639.4
+461.15863 18791.8
+532.56250 56640.4
+549.18219 22588.5
+561.36993 626806.7
+562.37354 170007.1
+563.37390 20901.3
+563.71014 17571.1
+579.38080 542619.6
+580.38422 174648.6
+597.39124 842399.4
+598.39459 263182.7
+599.39862 41882.7
+615.40155 1273798.8
+616.40533 383257.7
+617.40533 47789.0
+621.35846 21067.4
+625.82477 17371.2
+630.48706 17879.3
+676.66388 21435.3
+699.81183 17653.3
+795.89709 26440.0
+874.18182 19308.8
+1044.72766 54590.3
+1045.72278 39084.4
+1057.29199 23859.5
+1062.73694 59621.8
+1063.74744 28057.9
+1184.45972 20347.9
+1193.77551 45373.2
+1194.78015 58374.0
+1198.26172 98780.9
+1211.78601 132032.4
+1212.79199 32726.1
+1489.63062 21483.2
+1492.98523 17022.6
+1525.48547 22790.3
+1537.49780 155982.0
+1538.00073 264019.2
+1538.49792 223667.3
+1538.99976 140287.7
+1539.49390 21754.3
+1667.30200 19013.5
+1844.17786 22773.3
+1845.18726 38506.4
+1846.18909 36763.1
+1847.22168 27426.2
+1877.85425 23296.1
+1878.51392 29074.7
+1879.06873 41034.7
+1879.60303 542340.2
+1880.04614 55398.8
+1880.36719 29055.7
+1880.74817 28476.0
+1881.13757 25934.8
+1907.04517 216779.2
+1919.04504 18997.6
+1930.70337 35243.1
+S	3379	3379	1538.2573246
+Z	4	6148.998
+414.70221 925.1
+417.75327 864.7
+427.57065 1125.2
+451.59247 938.2
+482.63675 1093.7
+516.59039 1249.3
+520.15674 1154.0
+532.51984 2290.6
+616.40375 1397.8
+665.21509 977.7
+676.65588 1755.2
+717.98193 907.6
+795.89771 1958.8
+936.29419 973.3
+1019.65436 1628.8
+1088.68274 892.5
+1188.05896 1010.4
+1198.16052 5438.8
+1229.79639 71115.4
+1230.79919 64061.2
+1231.80115 32313.3
+1232.80310 7589.7
+1238.04907 971.6
+1242.92236 927.2
+1316.25269 865.6
+1344.89282 930.4
+1533.00171 1056.5
+1835.82983 1234.9
+1844.18958 149054.4
+1845.19238 153549.5
+1845.86963 2318.5
+1846.19458 65083.9
+1846.49194 1259.8
+1847.19617 27724.7
+1848.19373 8580.5
+1879.29614 1733.2
+1879.59375 32263.8
+1880.88000 1550.7
+1883.22888 1567.2
+1907.07031 11187.4
+1926.76428 1014.7
+1930.93127 1566.2
+1993.60095 1129.8
+S	3381	3381	1230.7198246
+Z	3	3688.884
+Z	2	2459.592
+377.49744 17655.3
+394.30951 1754442.3
+395.31281 449078.2
+396.31729 43359.6
+412.31989 1311858.1
+413.32306 381693.0
+414.32779 33712.3
+430.33038 971281.0
+431.33383 259289.4
+432.33905 38825.3
+448.34076 598959.8
+449.34418 150745.3
+450.34573 20057.7
+484.98520 19124.1
+532.52600 53633.4
+561.37018 1438856.8
+562.37354 485633.6
+563.37598 73279.8
+579.38080 1326811.3
+580.38391 384328.1
+581.38544 56595.9
+597.39124 1993281.5
+598.39441 642221.1
+599.39716 81796.8
+615.40143 2696311.8
+616.40460 791156.7
+617.40546 97963.9
+642.54669 16898.9
+651.57074 17839.2
+676.69427 39234.1
+731.18860 19743.4
+780.30475 16842.7
+795.90100 29850.0
+980.89984 19338.2
+1044.72266 131181.6
+1045.73328 61707.9
+1062.73682 169684.9
+1063.74060 51851.4
+1075.56470 18338.4
+1193.77515 197277.3
+1194.78113 116331.1
+1195.78247 27616.2
+1198.18018 103976.4
+1295.71411 18846.8
+1489.72644 20949.1
+1537.00317 38293.3
+1537.50305 121469.5
+1537.99817 236427.4
+1538.49792 184439.0
+1538.99939 144620.0
+1539.49695 73552.1
+1540.00134 48580.6
+1540.49072 24856.8
+1667.42175 22264.5
+1750.97485 18439.1
+1778.47607 17897.0
+1780.06885 17110.9
+1844.16833 28827.7
+1845.18164 20285.5
+1847.19751 19443.3
+1870.21118 21748.2
+1876.04675 30705.5
+1878.12732 18872.9
+1878.40039 29189.2
+1879.10327 41466.9
+1879.66309 546789.0
+1880.19946 48374.0
+1881.84705 22565.0
+1907.12622 209717.4
+1930.73376 22567.5
+S	3382	3382	1879.89799127
+Z	2	3757.948
+Z	3	5636.419
+514.43317 604.2
+532.53809 1584.2
+567.09528 692.9
+583.31165 669.2
+676.66382 878.8
+731.14667 879.8
+792.20618 662.0
+795.53888 674.9
+795.89087 945.1
+799.90405 796.7
+858.08215 744.4
+908.49493 651.0
+1019.64313 982.7
+1020.78375 816.9
+1081.98718 650.5
+1198.19922 3434.5
+1516.14172 777.8
+1610.58252 672.8
+1876.63464 848.3
+1877.31921 674.4
+1878.00732 983.0
+1878.47961 913.0
+1878.88770 1070.2
+1879.60913 19074.4
+1882.07275 709.4
+1907.10193 7776.0
+1991.66785 719.6
+S	3383	3383	1231.7208246
+Z	2	2461.594
+Z	3	3691.887
+327.07581 596.6
+342.28198 553.3
+350.28430 887.2
+378.79102 581.1
+380.93372 564.4
+394.31036 228120.8
+394.71881 1372.0
+395.17612 807.8
+395.31360 74322.6
+396.31705 11572.1
+397.32190 1050.9
+412.32074 166726.8
+413.32404 57129.2
+414.32739 9266.9
+415.33020 770.0
+421.07809 643.3
+429.38452 782.5
+429.86633 677.9
+430.33139 117138.7
+431.33459 38259.0
+432.33746 6176.8
+433.34393 1088.7
+439.36826 693.0
+448.34167 78969.6
+449.34491 25614.1
+450.34891 3444.0
+482.67426 876.7
+484.46341 544.9
+493.39954 1641.0
+497.28912 714.3
+532.52698 1796.4
+552.96710 585.2
+559.96143 1012.0
+560.67950 647.9
+561.37164 185146.0
+562.06622 1001.3
+562.37457 73850.1
+563.37427 14103.1
+564.37231 3551.7
+567.65820 629.0
+577.42224 673.8
+579.38196 166961.9
+580.11395 815.5
+580.38501 65255.3
+580.87140 1028.2
+581.38696 13988.4
+582.38550 2870.8
+583.39044 747.2
+596.64093 1044.8
+597.39258 231640.6
+597.76056 793.1
+598.15796 1127.5
+598.39557 85189.9
+598.94849 1506.2
+599.39624 19809.7
+600.39264 3327.6
+601.39539 776.2
+602.18658 573.5
+613.78320 1016.6
+614.59570 1277.8
+615.40271 304753.7
+616.20197 1755.6
+616.40570 107345.0
+617.02875 1107.2
+617.40643 24267.7
+617.73309 690.2
+618.29132 643.6
+618.40387 4724.7
+676.63928 874.0
+751.16742 591.6
+820.03064 645.4
+841.69989 666.8
+1044.72742 7325.5
+1045.72998 3283.6
+1046.73022 866.4
+1057.24060 811.9
+1062.73779 30310.8
+1063.74133 21972.6
+1064.74243 7685.8
+1065.74622 2518.4
+1089.77515 822.0
+1107.79395 1566.8
+1110.81006 538.9
+1175.77478 1540.2
+1193.77722 17392.0
+1194.78137 10470.6
+1195.78284 4845.1
+1196.77368 847.4
+1198.17578 3035.2
+1372.00232 605.1
+1420.11279 604.6
+1534.33752 1035.9
+1534.84119 1041.7
+1536.99756 77863.8
+1537.49829 159394.4
+1537.99841 181401.0
+1538.25818 1178.3
+1538.49890 152133.9
+1538.99988 93587.3
+1539.50122 55546.1
+1540.00244 24541.2
+1540.50195 9169.4
+1540.99646 4347.4
+1541.49719 1841.6
+1542.22205 877.7
+1542.97729 637.3
+1543.93420 901.6
+1545.49683 3476.8
+1546.00916 5290.1
+1546.51111 5018.4
+1547.01672 3774.3
+1547.51880 1816.8
+1688.34558 637.5
+1844.19312 21841.6
+1845.19580 22835.8
+1846.19751 19787.8
+1847.20276 9680.4
+1848.20142 3174.1
+1849.21082 1020.5
+1876.32788 1099.6
+1877.92383 896.4
+1878.73572 884.9
+1879.02185 1886.7
+1879.53345 19967.8
+1880.02271 1514.2
+1880.52795 857.2
+1881.19409 842.1
+1906.63562 876.6
+1907.07556 6907.0
+1930.70337 1094.0
+S	3385	3385	1230.72524127
+Z	3	3688.9
+Z	2	2459.603
+342.31870 1680.7
+350.29001 2685.0
+360.36310 1731.8
+360.36969 1683.3
+372.71075 1564.9
+376.04855 1787.6
+381.42181 1819.8
+394.31012 546736.8
+394.72107 3538.8
+395.14124 2667.8
+395.31332 179786.9
+396.31686 25641.0
+397.31995 2274.2
+403.83215 2055.6
+404.05380 1757.3
+411.43170 2376.9
+412.25357 2108.8
+412.32047 418669.0
+412.75974 2848.2
+413.32376 128144.3
+414.32681 17570.3
+415.32846 2113.7
+430.33109 286475.1
+431.33423 95825.6
+432.33774 15371.4
+448.34134 195754.3
+449.34494 60138.3
+450.34933 8301.4
+457.38162 1816.3
+482.25845 2026.8
+487.78030 2471.7
+508.04153 2037.8
+532.54376 5029.3
+549.16907 1690.7
+549.22943 1945.0
+559.96545 2111.1
+560.11786 1881.7
+561.37122 446422.6
+561.61224 1903.3
+562.06952 2428.5
+562.37415 175931.6
+562.78601 2956.9
+563.37335 33992.7
+564.37024 6895.2
+579.38159 400002.1
+580.11298 3024.0
+580.38477 150325.2
+581.38501 27521.4
+582.38452 6436.3
+583.39026 2141.5
+587.63068 2140.2
+595.78687 2032.4
+595.84570 2080.0
+597.39215 552320.9
+598.15692 2769.9
+598.39508 204141.5
+598.94421 3178.7
+599.39539 42750.9
+600.39221 6540.4
+613.78967 3063.5
+614.60321 2168.4
+615.12238 1973.6
+615.15045 2501.8
+615.40222 704274.4
+616.20819 3353.7
+616.40515 239349.6
+616.73639 2538.5
+617.02502 3731.3
+617.40509 49320.2
+618.40375 7538.2
+676.67480 2187.3
+695.50427 1866.2
+808.24445 1706.0
+841.63190 1734.0
+976.84686 1575.7
+998.13928 1836.7
+1026.71252 2281.1
+1044.72705 16217.6
+1045.73169 10860.2
+1046.74475 2008.5
+1048.55322 1629.6
+1062.73706 46294.6
+1063.74048 23163.2
+1064.74182 6949.9
+1073.70361 1820.4
+1089.78552 2362.0
+1100.92566 1719.1
+1107.78870 3170.5
+1163.07703 2045.7
+1175.77930 2840.0
+1176.78223 2088.1
+1193.77734 43169.5
+1194.78101 26558.8
+1195.78052 10571.0
+1196.78772 2753.6
+1198.21582 8900.7
+1402.86963 1849.0
+1525.48401 1726.1
+1525.60461 1658.3
+1609.65918 1702.3
+1879.03809 2186.8
+1879.27893 2669.5
+1879.63647 54098.2
+1879.99194 3670.3
+1881.81299 2085.2
+1907.11890 19088.2
+1919.05737 2405.5
+1930.86377 2892.1
+S	3386	3386	1231.72599127
+Z	2	2461.604
+Z	3	3691.903
+341.61337 21170.6
+350.28943 24401.2
+381.40677 27903.6
+394.30981 684954.4
+395.31235 166588.5
+412.32016 482992.2
+413.32303 108876.2
+427.59894 25327.2
+428.20905 23010.0
+430.33044 344881.5
+431.33466 79666.5
+448.34058 270366.0
+448.50116 26041.8
+449.34698 42478.3
+513.39368 23125.4
+519.97235 25099.4
+532.57971 75414.4
+549.22766 32635.0
+561.37091 426045.6
+562.37396 177006.0
+579.38104 501439.9
+580.38458 152329.9
+592.01685 21666.6
+597.39166 769172.6
+598.39520 226112.5
+599.39435 33572.8
+609.62659 24690.8
+612.85840 30329.0
+615.40198 1111083.1
+616.40503 307715.9
+617.40900 61147.5
+630.48755 38910.9
+652.08850 22032.9
+676.63751 29143.6
+795.87872 38554.9
+800.26300 25984.2
+1044.72937 57099.8
+1045.75623 27940.2
+1057.20618 23788.5
+1062.74683 42577.1
+1063.73621 34195.6
+1118.96924 24704.4
+1193.77979 55241.8
+1194.78027 61111.3
+1198.29883 116067.4
+1211.79016 130099.4
+1212.79224 31281.2
+1231.64038 34357.0
+1279.02051 28701.2
+1525.63696 28777.4
+1537.49792 94895.8
+1538.00452 190323.0
+1538.50061 194360.6
+1539.00293 76694.5
+1650.62756 25468.2
+1845.19067 32181.5
+1853.95264 22668.4
+1878.76855 41216.5
+1879.62378 678068.5
+1879.90857 185957.6
+1880.77161 30818.8
+1906.87476 75637.5
+1907.12817 256164.6
+1930.85205 25376.5
+S	3387	3387	1538.2578246
+Z	4	6149.0
+427.58606 815.0
+532.54047 2005.1
+661.15289 738.0
+676.66864 1126.8
+760.81268 739.0
+813.57526 549.1
+816.86847 598.0
+1057.28943 1016.4
+1064.45361 672.0
+1198.21216 3282.1
+1229.79834 14485.4
+1230.80164 11265.2
+1231.80139 5255.4
+1232.81384 690.9
+1248.50427 657.2
+1844.19189 15878.5
+1845.19263 23978.9
+1846.19666 18486.5
+1847.19714 6518.5
+1848.20825 1451.9
+1870.28357 1064.2
+1877.20789 825.6
+1878.27417 1116.0
+1878.55017 829.4
+1879.04834 676.4
+1879.15027 726.0
+1879.61670 20217.1
+1880.07617 555.1
+1880.49438 1273.0
+1880.68127 1116.6
+1880.95300 861.1
+1906.68396 895.9
+1907.10852 7276.0
+1907.56445 1001.8
+S	3389	3389	1879.96540793
+Z	2	3758.083
+Z	3	5636.621
+532.54883 1761.0
+537.25330 644.3
+591.36340 613.1
+676.65869 1167.0
+795.88593 1012.4
+1020.68457 603.6
+1056.83569 682.5
+1198.09937 884.0
+1198.22424 3161.8
+1548.62207 766.9
+1876.17834 698.0
+1878.99707 1068.9
+1879.14587 1104.7
+1879.60376 19445.6
+1879.96411 642.1
+1880.26563 766.2
+1880.48206 780.9
+1880.62830 962.6
+1907.09692 7342.7
+1917.26282 678.3
+1930.81580 989.0
+S	3390	3390	616.6218246
+Z	3	1846.59
+Z	2	1231.396
+188.22583 16382.5
+188.24902 13116.4
+188.27484 20950.3
+188.28461 14883.5
+188.29436 18087.3
+188.31096 21101.7
+188.32358 22942.0
+188.33551 17434.0
+188.37399 14192.7
+198.97572 28033.6
+199.30878 15866.4
+199.32671 21288.4
+199.34138 22231.7
+199.35316 37377.2
+199.36162 30408.1
+199.36864 39167.0
+199.38795 43655.7
+202.80585 13211.9
+218.19823 12322.4
+220.55923 17882.1
+229.36261 14842.4
+247.58011 15640.3
+272.01859 13429.6
+274.23889 15595.7
+304.42511 13557.5
+345.22476 12031.8
+345.54810 13813.2
+355.12286 13283.4
+376.62805 13436.2
+392.48279 17027.9
+394.30942 513227.1
+394.86191 13840.4
+395.31314 181495.1
+412.31979 750788.9
+413.32318 248690.1
+427.57294 23553.3
+430.33041 1007692.7
+431.33386 250638.4
+439.00742 13360.3
+448.34064 960420.8
+449.34433 255966.0
+503.60785 15711.5
+532.57062 40530.0
+548.76093 12975.9
+549.19183 18784.8
+551.60785 15283.5
+561.37030 1830529.1
+562.37323 787779.4
+579.38074 2510384.5
+580.38397 914703.8
+597.39117 3223943.8
+598.39423 1024895.5
+599.38971 24506.4
+630.44818 24261.4
+639.49445 14840.0
+650.24335 14325.6
+676.66016 20795.9
+795.89221 25417.2
+810.11987 14801.5
+820.13092 14239.4
+898.65692 12503.9
+903.82745 13580.5
+1021.20306 13768.9
+1063.38745 13705.3
+1187.44299 13777.6
+1198.28149 69523.7
+1198.41943 21613.2
+1300.76868 12539.7
+1320.56396 14744.2
+1521.10229 13496.7
+1634.13452 13107.4
+1877.07190 15880.8
+1878.17529 25535.3
+1878.47437 23160.3
+1878.92200 22875.7
+1879.59570 467654.8
+1879.86853 65901.0
+1880.18628 25403.9
+1880.68323 33249.6
+1881.00513 22106.1
+1901.01111 15871.9
+1907.08484 165092.8
+1986.92017 14749.9
+S	3391	3391	1907.4875746
+Z	2	3813.127
+Z	3	5719.188
+532.54785 1567.4
+573.09485 627.8
+676.65717 1278.5
+690.70795 567.7
+710.76526 640.3
+722.57227 619.1
+795.88293 752.2
+1079.06360 574.7
+1198.23657 2842.7
+1229.65125 706.5
+1525.45630 655.3
+1539.48645 693.9
+1650.07715 636.9
+1651.68689 608.0
+1697.98181 637.2
+1877.96057 787.4
+1878.17627 620.5
+1878.85266 964.8
+1879.14355 1652.5
+1879.58130 19167.7
+1879.96716 1833.8
+1880.18701 1374.3
+1881.19409 961.5
+1885.53723 659.7
+1907.14111 7772.1
+1930.67468 983.0
+S	3393	3393	1879.96199127
+Z	3	5636.611
+Z	2	3758.076
+532.07916 671.5
+532.55536 1678.8
+573.56647 604.7
+676.64825 1027.8
+680.13519 587.2
+681.30475 765.5
+714.31897 623.6
+795.88483 940.3
+798.98450 670.4
+915.94604 605.3
+939.19696 740.5
+940.23657 677.6
+1059.92139 666.0
+1061.55688 643.1
+1198.24109 3254.5
+1312.84082 603.9
+1388.58740 643.6
+1525.57568 938.2
+1691.10229 732.3
+1730.42676 661.5
+1760.83044 616.8
+1876.75732 732.9
+1878.72595 1019.9
+1879.08032 1112.8
+1879.54663 20304.1
+1879.87134 653.3
+1880.04041 1003.6
+1880.31348 1031.4
+1880.58838 1024.3
+1881.12573 742.2
+1907.11267 7278.1
+1930.76697 988.4
+S	3394	3394	1907.51224127
+Z	3	5719.261
+Z	2	3813.177
+515.27087 573.2
+532.55481 2072.5
+535.39227 608.0
+552.94208 601.5
+585.40497 613.3
+663.28857 593.8
+688.13214 520.1
+795.89404 871.2
+909.79761 726.9
+1188.10791 685.5
+1198.23682 3320.8
+1230.20007 600.0
+1501.24231 623.9
+1778.70508 669.1
+1785.82996 657.6
+1878.82642 929.8
+1879.61523 19097.1
+1879.91809 3728.6
+1880.41113 934.3
+1880.72498 975.6
+1881.08569 929.9
+1907.09509 7291.6
+1907.54480 819.3
+S	3395	3395	1198.7125746
+Z	3	3592.863
+Z	2	2395.577
+319.98087 650.1
+333.19919 627.3
+342.32172 633.3
+352.39328 633.5
+375.49420 625.7
+388.73840 600.7
+436.60400 625.3
+445.64764 603.3
+461.44522 878.7
+482.68793 573.1
+532.50696 1563.1
+549.20197 1007.5
+644.72925 578.0
+676.62244 629.9
+751.66760 703.2
+880.95270 639.2
+978.28162 594.5
+1008.51343 651.1
+1196.87085 625.4
+1198.12964 3348.4
+1261.08240 634.3
+1409.89502 710.9
+1525.52173 725.0
+1553.55396 585.1
+1874.64001 677.1
+1876.35400 975.4
+1878.67896 1460.6
+1879.36133 7037.9
+1879.66675 17725.1
+1880.00659 5181.2
+1880.35339 2372.6
+1881.25842 818.2
+1881.52148 834.9
+1884.71997 645.5
+1907.08691 7218.1
+1919.09509 758.6
+1930.75818 965.0
+S	3397	3397	1879.98999127
+Z	3	5636.695
+Z	2	3758.132
+532.51044 1656.0
+549.19427 844.5
+573.07007 579.8
+610.97076 759.4
+676.64618 1113.6
+795.89282 1083.3
+816.25317 669.2
+830.39655 660.3
+917.25635 651.0
+970.96790 565.9
+982.37061 788.4
+1169.17944 790.9
+1198.14087 3154.3
+1545.99988 617.2
+1776.97131 709.3
+1878.81689 730.4
+1879.55115 19353.5
+1880.21545 1153.0
+1907.18738 7291.6
+1919.13196 865.4
+1930.73145 875.9
+S	3398	3398	1907.55299127
+Z	3	5719.384
+Z	2	3813.258
+532.52124 2043.0
+545.30054 651.1
+661.69183 589.2
+676.63440 1062.3
+702.76447 697.8
+720.14355 644.1
+742.71802 658.5
+794.60822 678.0
+795.88916 838.3
+805.97449 549.3
+858.10376 752.0
+1019.63702 772.7
+1079.41931 697.9
+1198.16516 3249.9
+1201.03906 571.5
+1221.93542 635.5
+1525.49768 810.7
+1693.43677 615.6
+1855.27441 762.3
+1877.16833 760.7
+1878.31494 1048.8
+1879.06323 1855.2
+1879.52173 19880.4
+1879.97754 1063.1
+1880.45630 887.5
+1882.07190 763.5
+1882.31189 616.6
+1907.10449 7549.6
+1930.69604 814.3
+S	3399	3399	800.4602521
+Z	4	3197.80971
+218.67886 593.7
+222.78084 542.3
+224.90865 556.2
+226.25635 601.7
+226.79759 638.4
+243.94267 558.3
+243.95573 637.9
+308.91998 654.6
+344.93677 574.6
+379.05078 618.5
+395.05136 693.2
+427.72128 617.5
+493.44983 772.2
+532.46844 2212.6
+537.95062 600.9
+549.18951 777.4
+588.34790 586.3
+627.74591 681.4
+630.44336 919.9
+676.65442 932.9
+691.33167 1151.3
+749.11456 852.1
+749.45630 1831.7
+749.78339 905.8
+788.98322 630.7
+795.88934 1076.1
+860.85303 601.9
+879.10767 692.4
+884.95343 713.2
+947.45026 930.1
+952.44476 692.2
+1004.50458 783.6
+1019.66608 784.9
+1060.51917 1027.0
+1103.53906 961.5
+1105.76208 616.7
+1110.65833 907.1
+1113.61902 579.7
+1125.14111 687.2
+1188.05688 855.4
+1198.05408 3509.8
+1525.52954 921.5
+1646.13965 669.7
+1692.80835 707.9
+1872.86438 857.0
+1876.14392 952.2
+1878.50916 972.6
+1879.01343 1287.3
+1879.56128 19773.9
+1880.13977 1077.1
+1880.67383 931.5
+1907.11340 7411.5
+1907.41028 967.4
+1930.74036 982.1
+S	3401	3401	1880.03140793
+Z	3	5636.819
+Z	2	3758.215
+532.53918 1718.3
+627.49786 584.8
+648.72083 650.1
+676.64777 715.3
+795.89111 808.4
+897.38116 737.2
+905.48798 663.4
+1019.71313 782.4
+1057.23560 658.6
+1198.19739 3141.1
+1201.57324 761.7
+1687.13184 651.1
+1757.51453 616.7
+1868.92761 824.6
+1877.29382 703.1
+1879.22327 2933.0
+1879.60388 17536.6
+1880.02698 2062.5
+1880.20532 1416.7
+1881.94543 622.2
+1907.11377 7365.4
+1907.40125 781.9
+1930.84692 961.2
+S	3402	3402	637.8078246
+Z	3	1910.148
+Z	2	1273.768
+172.25060 553.9
+174.27644 516.7
+187.23212 602.5
+188.27768 2413.8
+188.29160 1886.7
+188.30440 2076.7
+190.05074 2052.8
+190.58920 515.4
+191.09874 547.7
+196.31474 501.1
+199.25806 603.0
+199.27716 930.4
+199.34413 1219.6
+199.35751 2282.9
+199.37625 1190.8
+199.45232 816.4
+199.45853 805.1
+213.98874 546.2
+214.51793 609.5
+219.05040 533.2
+244.00903 567.3
+254.20602 564.8
+268.82419 566.8
+268.83405 554.9
+296.01648 731.1
+296.60181 594.7
+333.90433 652.8
+334.32880 607.7
+334.66122 652.5
+342.27631 636.6
+350.28845 744.5
+393.09631 677.7
+407.89627 562.5
+411.74002 625.3
+427.55167 856.7
+434.81342 623.6
+436.46741 914.5
+448.34088 747.0
+451.93869 731.3
+470.24631 751.6
+473.29260 622.9
+482.66592 870.7
+499.63312 709.4
+511.21921 572.1
+515.38019 50607.9
+515.57880 520.9
+515.99670 656.8
+516.38367 14522.2
+531.04602 620.0
+532.48547 1991.1
+549.16577 746.1
+557.31854 571.8
+585.27283 598.4
+630.41309 796.8
+676.64368 909.7
+682.36383 902.9
+726.38501 653.2
+735.09424 767.5
+741.39709 546.4
+753.12439 670.1
+755.00763 683.5
+755.08948 590.9
+769.87860 673.8
+795.88818 751.1
+839.93365 2479.6
+840.44025 2515.6
+840.94257 893.6
+860.84546 855.6
+1021.12994 697.7
+1057.05774 722.2
+1159.39063 584.8
+1188.16577 623.8
+1198.08582 3353.2
+1351.01807 832.5
+1431.25879 672.3
+1561.79907 792.0
+1768.75439 643.1
+1776.92444 870.1
+1799.06335 784.1
+1815.93140 625.8
+1877.64978 743.6
+1878.41675 981.3
+1878.97729 1553.7
+1879.62598 17016.0
+1879.99011 4166.0
+1880.30762 2136.1
+1880.65088 1680.1
+1907.10449 7674.9
+1907.46655 670.6
+1919.00073 789.1
+1930.61523 1048.0
+S	3403	3403	613.810407933
+Z	3	1838.156
+Z	2	1225.773
+157.60280 616.6
+164.43210 540.1
+165.90671 677.1
+186.14615 519.2
+188.25238 653.1
+188.26053 994.3
+188.26575 629.7
+188.27534 1072.8
+188.28636 1746.5
+188.29955 911.0
+188.30768 657.3
+188.31827 648.5
+188.33330 764.9
+195.89392 591.8
+197.21806 577.8
+198.97330 643.5
+199.26459 902.8
+199.32378 1025.0
+199.34764 1300.4
+199.36273 2779.5
+199.38194 1578.5
+199.40181 764.7
+199.44507 861.5
+199.45959 850.2
+207.15321 549.4
+233.89229 783.9
+255.28941 762.6
+262.97934 798.9
+291.09738 582.9
+297.76578 569.5
+307.71674 571.8
+308.89856 823.4
+311.49094 533.5
+342.26950 833.1
+357.38251 510.8
+390.62357 587.9
+427.54257 669.2
+482.65549 770.9
+513.89301 530.0
+532.49829 1520.8
+540.88580 567.9
+549.15326 759.7
+596.21173 580.3
+675.56122 551.1
+676.64679 935.0
+688.83221 568.1
+772.23163 675.5
+795.88831 957.0
+952.26935 546.8
+1081.42908 566.2
+1153.28992 578.2
+1198.11816 3276.9
+1525.39746 1129.9
+1587.49634 627.8
+1758.11047 587.4
+1879.55249 19347.7
+1907.09338 7384.9
+1930.58655 1086.1
+1981.84119 613.9
+S	3405	3405	1880.01999127
+Z	2	3758.192
+Z	3	5636.785
+519.85962 631.7
+532.53265 1803.3
+534.43451 565.0
+558.78351 636.9
+562.18872 694.4
+630.48846 671.3
+648.49487 765.4
+676.65802 783.2
+795.88867 758.6
+959.41791 744.7
+1019.72223 651.8
+1198.19214 2961.6
+1230.84998 681.2
+1509.52063 686.7
+1809.32202 601.2
+1878.05029 707.9
+1879.56604 19420.9
+1879.83862 2659.2
+1880.01282 1605.3
+1907.12537 7638.1
+1988.51404 700.4
+S	3406	3406	1907.50224127
+Z	2	3813.157
+Z	3	5719.231
+532.53265 1860.2
+559.45197 623.1
+655.01086 601.8
+668.75317 576.0
+676.66132 1182.0
+743.39081 617.7
+795.89148 991.9
+953.71338 625.0
+1013.75067 534.5
+1103.35022 580.9
+1188.21497 709.2
+1198.18738 3090.8
+1424.56934 597.8
+1481.98889 670.6
+1525.58594 781.9
+1567.01721 746.0
+1870.39819 765.8
+1876.30273 751.6
+1878.83569 811.2
+1879.19104 1678.0
+1879.59973 19830.4
+1879.87732 1202.7
+1880.06641 867.4
+1880.27637 827.9
+1907.12769 7123.2
+1911.69275 693.2
+S	3407	3407	437.2068246
+Z	1	436.199
+113.60425 569.3
+120.61715 590.6
+121.77685 2292.4
+128.57115 693.1
+131.62592 553.8
+133.72749 528.3
+140.94212 602.7
+141.46645 579.1
+141.60950 581.7
+153.84117 648.9
+159.15900 569.7
+159.72337 566.4
+165.75182 928.9
+169.67273 606.5
+184.81354 614.2
+191.10497 652.6
+195.21808 568.2
+197.58101 568.6
+198.97543 766.0
+199.33592 1928.0
+199.34543 1640.0
+199.35843 2216.9
+199.38182 1036.4
+199.45721 848.3
+204.67253 591.7
+219.12212 646.5
+224.43816 550.7
+233.57944 736.6
+239.32423 636.7
+299.13394 504.2
+339.47690 610.8
+381.37070 827.0
+400.22211 7746.1
+401.22552 1596.9
+404.06329 707.5
+428.25089 540.4
+476.77237 864.7
+532.54614 1916.6
+539.90515 539.0
+630.42407 786.7
+676.66833 820.6
+709.48297 724.2
+715.94867 550.3
+731.14453 937.3
+739.60529 729.2
+783.54816 639.4
+795.89276 847.9
+1023.58905 730.3
+1143.71777 607.3
+1198.21985 3161.7
+1304.86157 730.1
+1448.54529 656.8
+1456.70544 576.1
+1659.52197 622.5
+1672.29871 633.5
+S	3409	3409	1879.98324127
+Z	2	3758.119
+Z	3	5636.674
+526.43854 541.8
+532.54755 1930.5
+549.11609 710.9
+595.68195 657.4
+608.86591 641.3
+675.39532 570.5
+731.21100 880.4
+734.09198 585.1
+795.87366 972.8
+858.14771 822.6
+923.22412 644.8
+1019.65680 646.3
+1044.95422 629.8
+1123.64282 632.4
+1198.22302 3810.2
+1224.20337 664.6
+1283.20691 636.8
+1460.15833 663.8
+1525.57971 713.7
+1649.01343 706.6
+1777.01196 919.7
+1876.80664 626.1
+1878.38257 736.3
+1879.07605 962.0
+1879.57617 19974.7
+1880.12915 737.7
+1880.82800 745.8
+1882.99792 743.2
+1907.09375 7856.2
+1930.78967 755.3
+1936.50720 579.2
+S	3410	3410	637.8048246
+Z	2	1273.762
+Z	3	1910.139
+165.83060 554.2
+178.13342 555.4
+181.24864 585.3
+188.17563 593.4
+188.22688 680.6
+188.23561 505.3
+188.25739 611.5
+188.27074 860.5
+188.29216 867.9
+188.30208 793.8
+188.32146 650.6
+188.39276 738.9
+189.61961 522.1
+189.62788 510.1
+190.05009 1160.1
+199.26393 763.8
+199.29388 549.4
+199.33673 1421.6
+199.35344 805.0
+199.36159 2265.2
+199.37677 1067.4
+199.45943 920.2
+222.61049 552.5
+369.22305 702.0
+381.38214 608.3
+438.88480 576.6
+465.48520 583.2
+482.67572 714.5
+504.69202 584.9
+515.31067 674.1
+515.37988 29786.7
+516.38403 8795.4
+532.51959 1474.3
+588.98157 679.6
+630.43237 557.5
+676.66425 801.5
+682.35870 697.0
+725.88226 1107.0
+726.37982 1209.5
+731.16815 970.0
+784.70990 568.1
+790.25128 655.1
+795.87598 1053.5
+839.93573 1203.2
+840.44080 2012.8
+840.94684 1273.7
+865.24316 716.3
+991.83026 718.5
+1076.58545 649.8
+1134.47205 629.7
+1198.16711 3137.3
+1399.62671 595.4
+1430.57874 714.7
+1489.81006 748.4
+1753.62805 689.4
+1877.22693 702.1
+1879.28052 2523.7
+1879.60767 19467.3
+1879.96741 2075.8
+1907.07629 7308.9
+1919.61206 647.4
+1930.73071 957.9
+S	3411	3411	1907.52240793
+Z	3	5719.292
+Z	2	3813.197
+532.53271 2121.0
+614.39685 646.1
+676.67010 1200.3
+688.84418 577.8
+690.08746 617.6
+700.16516 646.4
+782.50842 546.3
+795.87842 1108.2
+962.21832 725.4
+982.28888 680.5
+1039.81641 596.2
+1198.19568 3416.1
+1525.39014 739.4
+1560.56238 561.5
+1678.80859 721.0
+1876.79541 674.7
+1877.01672 983.3
+1877.96313 948.4
+1878.18311 682.0
+1878.97424 898.1
+1879.62708 19182.2
+1879.91345 2074.5
+1880.64331 724.2
+1881.02979 1113.5
+1881.62317 719.9
+1897.20142 673.6
+1907.08936 7192.6
+1930.56531 868.9
+S	3413	3413	1880.00624127
+Z	2	3758.165
+Z	3	5636.743
+510.91547 603.5
+527.63934 637.0
+532.54272 1586.9
+545.53174 787.4
+549.05969 601.8
+630.41656 682.7
+673.06281 631.4
+676.60083 605.6
+676.67462 717.9
+731.13074 1106.5
+912.26086 624.5
+928.93842 679.2
+1110.67529 625.6
+1198.20972 3338.8
+1455.48059 712.6
+1525.46887 668.2
+1750.19714 671.5
+1754.42932 621.1
+1878.74854 720.0
+1879.25781 5760.7
+1879.61267 18298.5
+1879.94885 4627.9
+1880.38599 1851.7
+1880.72107 989.8
+1881.01563 914.8
+1907.08936 7303.9
+S	3414	3414	1907.57840793
+Z	3	5719.46
+Z	2	3813.309
+532.51373 1791.4
+539.04431 610.4
+549.16644 749.7
+553.75513 620.2
+572.38513 535.7
+581.58917 607.7
+594.67761 629.1
+630.42523 793.0
+676.62622 899.6
+693.71564 802.7
+731.14166 796.1
+795.87372 1137.5
+1042.64783 690.8
+1198.03943 1106.7
+1198.14490 2831.2
+1200.38184 646.8
+1583.64673 766.2
+1763.66980 674.8
+1785.37561 816.5
+1876.21631 739.2
+1878.32227 1607.3
+1879.07593 984.5
+1879.57751 16610.1
+1880.03613 2911.0
+1880.32397 800.6
+1880.66357 1641.8
+1907.10803 6770.7
+1907.36877 1470.1
+1930.61951 928.8
+S	3415	3415	1198.6385746
+Z	2	2395.429
+Z	3	3592.641
+342.16159 721.8
+375.22333 634.2
+404.71988 607.4
+466.47894 819.3
+501.67288 621.8
+517.31006 577.3
+532.55524 1706.5
+532.59607 744.3
+537.45966 701.4
+540.46051 785.2
+573.07825 653.3
+676.65491 584.5
+702.64624 563.9
+702.66589 563.3
+795.88452 950.8
+1020.78247 684.6
+1065.80322 660.3
+1105.96179 708.8
+1198.24268 3392.5
+1235.03174 629.9
+1408.46741 562.8
+1482.54260 669.1
+1506.47742 743.4
+1525.46277 857.1
+1550.32324 637.6
+1564.95007 673.2
+1815.65601 847.6
+1878.25427 669.0
+1879.07129 1523.6
+1879.57800 18712.6
+1880.10657 1685.1
+1881.33398 722.6
+1907.04980 7165.7
+1930.68396 762.7
+1999.55493 602.2
+S	3417	3417	1880.05699127
+Z	2	3758.266
+Z	3	5636.896
+532.50592 2048.3
+549.18317 823.1
+555.30261 596.9
+630.43292 754.9
+676.23322 704.2
+676.68127 1146.2
+770.78931 608.4
+795.89685 972.8
+846.46930 591.7
+858.09625 840.0
+949.36725 540.6
+1096.57324 569.6
+1117.20862 648.7
+1155.10437 638.3
+1198.13391 3289.7
+1398.96301 604.8
+1473.06848 713.4
+1525.46533 1031.6
+1560.88293 682.6
+1794.57166 581.4
+1876.85278 992.3
+1878.70056 1871.1
+1879.24609 2576.9
+1879.63989 18977.2
+1880.03357 2383.2
+1880.58484 1786.9
+1880.96729 686.2
+1881.74500 727.0
+1907.10852 7803.3
+1930.67224 1017.2
+S	3418	3418	637.805407933
+Z	2	1273.763
+Z	3	1910.141
+186.87469 665.2
+188.20178 621.8
+188.25018 640.3
+188.27272 552.6
+188.28822 723.2
+188.30251 628.0
+188.31177 934.9
+188.37337 549.8
+190.05089 1017.8
+193.25822 571.8
+194.27075 617.0
+196.60440 674.6
+198.97211 1179.6
+199.26401 735.5
+199.35510 1383.6
+199.36363 2190.8
+199.37685 901.9
+199.38622 989.9
+199.46173 800.6
+230.71892 527.6
+239.37914 548.2
+254.04471 692.6
+261.01898 670.9
+276.15698 636.1
+287.21973 876.7
+289.08182 737.4
+292.23376 644.9
+310.10880 713.9
+332.06384 698.0
+366.83649 548.7
+366.85016 514.4
+377.41318 624.9
+427.52191 690.6
+428.36246 743.2
+482.62042 1039.9
+501.55328 667.4
+515.38007 26674.6
+516.38391 7598.2
+532.49420 1431.7
+568.45233 601.4
+630.36652 699.6
+649.45776 627.2
+682.36304 907.5
+726.38348 1066.7
+726.88110 986.2
+731.07623 760.0
+795.88074 860.9
+839.93457 2440.1
+840.43677 2539.3
+840.94586 1552.4
+898.74200 596.6
+1057.30554 737.5
+1079.78967 616.7
+1093.16077 596.0
+1198.10522 3241.0
+1272.35388 625.7
+1456.99902 607.4
+1488.26807 591.0
+1525.33447 847.0
+1628.22021 700.1
+1860.15442 689.6
+1878.79211 1226.3
+1879.22949 1608.8
+1879.63513 19540.8
+1879.91174 2217.3
+1880.02954 1183.7
+1880.40417 1232.3
+1907.14709 7642.2
+1930.48425 859.9
+S	3419	3419	1907.54099127
+Z	2	3813.234
+Z	3	5719.348
+532.50659 2065.8
+630.37946 737.6
+647.96301 650.1
+704.86884 588.8
+891.72083 666.0
+1057.30237 851.8
+1079.41614 660.9
+1148.10803 651.0
+1169.74097 663.6
+1197.97424 578.1
+1198.14392 3430.5
+1525.34363 902.5
+1876.04846 789.6
+1877.91333 808.6
+1878.64319 1063.8
+1879.64063 20029.2
+1880.62354 890.0
+1907.15930 7228.5
+1930.54688 786.4
+S	3421	3421	637.8048246
+Z	2	1273.762
+Z	3	1910.139
+165.75313 758.8
+171.63800 695.6
+186.83353 649.5
+188.23381 589.1
+188.27068 793.4
+188.29558 734.3
+188.31149 803.0
+188.32684 646.8
+188.36130 573.9
+188.37173 558.6
+188.39511 653.0
+190.05077 1746.5
+198.97098 688.5
+199.28308 959.2
+199.29741 611.9
+199.30994 701.0
+199.32713 821.4
+199.35391 2258.3
+199.36299 1018.2
+199.38080 1513.5
+199.45233 1010.9
+208.27751 514.0
+214.27312 576.0
+226.55618 562.8
+238.68553 817.5
+255.30914 932.3
+271.45013 865.5
+274.60245 807.6
+291.52869 659.2
+296.55075 645.6
+299.45023 680.6
+299.51996 853.8
+315.10483 746.1
+369.22443 906.2
+376.24884 631.5
+417.98218 770.1
+418.15512 617.9
+424.54449 634.3
+427.57449 654.5
+441.04077 651.8
+464.23090 643.2
+497.70804 569.6
+515.37970 36114.3
+516.38330 10220.4
+532.47192 2398.5
+545.25311 575.1
+549.19043 770.6
+567.99475 569.6
+622.27924 724.5
+623.85449 607.9
+630.45264 810.1
+676.67383 1058.5
+682.36829 2203.3
+682.87170 1328.9
+690.87561 634.8
+725.88062 2144.3
+726.38855 1613.5
+726.89124 839.9
+782.92657 1299.9
+784.65692 779.4
+795.88220 918.9
+839.93738 5900.4
+840.43951 5688.7
+840.94043 3650.6
+841.43860 1810.1
+1016.85126 548.0
+1035.59888 608.3
+1188.22168 732.1
+1198.05786 3161.7
+1571.68750 665.7
+1761.56567 726.4
+1870.14404 791.3
+1870.41089 845.3
+1877.86401 1178.4
+1878.47607 909.0
+1879.10864 2472.4
+1879.61255 19837.6
+1880.11145 2520.4
+1880.60413 935.0
+1881.38770 857.7
+1907.10095 7374.1
+1907.89246 1085.4
+1908.17712 635.6
+1909.11755 699.0
+1930.74365 920.5
+S	3422	3422	1907.52124127
+Z	2	3813.195
+Z	3	5719.288
+532.47565 1872.2
+551.23383 633.1
+582.40936 606.0
+630.41064 714.9
+667.81689 639.7
+676.66351 1302.7
+755.15973 708.9
+791.40778 629.8
+795.88629 731.4
+933.29260 691.3
+944.55225 640.4
+1023.13824 715.9
+1057.26868 860.6
+1083.00171 728.0
+1097.80725 772.9
+1136.44189 684.0
+1198.05786 3718.7
+1317.91223 635.1
+1690.73572 697.5
+1876.11755 777.6
+1877.45593 744.0
+1878.47107 825.4
+1878.92249 1524.3
+1879.59460 19583.9
+1880.29089 1182.2
+1907.04626 7585.1
+1919.09888 811.7
+S	3423	3423	759.7850106
+Z	5	3793.88593
+198.96721 990.1
+199.26140 795.5
+199.30511 882.3
+199.32941 939.6
+199.34773 874.5
+199.35916 2538.6
+199.38437 645.5
+199.45651 1171.6
+209.56119 610.9
+216.17632 756.5
+222.54712 564.0
+223.87543 619.9
+224.82735 567.6
+231.78909 556.2
+266.55417 615.8
+269.71872 676.1
+274.69568 589.0
+283.96667 589.6
+302.68665 563.6
+303.10025 544.0
+325.94611 559.6
+342.25116 803.9
+347.20557 692.4
+355.68140 1524.9
+394.50714 638.3
+427.52182 857.9
+442.35495 641.4
+476.24652 943.0
+481.16022 773.7
+507.18741 1015.2
+529.23340 1017.6
+532.50391 1942.6
+549.12549 934.6
+552.28595 1054.3
+561.28656 5024.2
+561.78711 2162.0
+562.29224 768.0
+569.81238 667.2
+590.56964 774.7
+596.52374 676.9
+610.35461 642.4
+610.82202 1593.2
+613.30536 1353.7
+619.24969 963.4
+619.35468 1167.7
+619.84888 670.8
+630.36926 867.5
+657.60962 1253.9
+658.11090 1137.7
+660.27448 3135.2
+661.27960 1022.3
+668.91089 659.5
+669.38306 720.7
+676.66205 914.0
+694.90308 708.6
+696.37091 777.3
+700.66339 972.4
+710.35516 11998.5
+711.35797 4226.3
+724.41193 748.1
+736.38391 844.2
+736.57599 1262.9
+736.77637 2843.3
+736.97534 1012.1
+737.06238 562.3
+740.01593 696.5
+740.35797 952.1
+780.19678 645.8
+787.04340 1363.4
+787.38879 1861.5
+795.86426 1080.7
+814.72388 3786.8
+815.05908 2683.8
+815.39252 2940.5
+815.72528 1238.8
+819.44458 723.3
+820.73712 777.2
+821.06439 1877.1
+821.40033 1290.5
+823.43219 903.8
+852.41840 2436.9
+852.75226 4088.4
+853.08734 2582.4
+853.42896 935.6
+858.42316 1772.2
+858.75427 1477.9
+891.44507 1035.1
+891.78070 2536.3
+892.11664 1480.1
+893.10248 633.4
+920.38141 1366.5
+1019.67114 693.4
+1028.83325 963.1
+1121.56738 7018.5
+1122.56323 3521.6
+1123.57800 1624.0
+1166.46167 1000.8
+1167.46045 1093.9
+1188.19080 976.7
+1198.12891 3128.0
+1237.49219 1180.4
+1237.69153 1208.3
+1238.47778 940.2
+1287.62683 1031.5
+1336.64856 1660.4
+1337.16687 3382.8
+1337.66077 2241.9
+1338.15723 1458.6
+1436.64954 909.9
+1525.31531 1057.2
+1648.74878 650.7
+1694.71790 742.3
+1878.51685 1527.3
+1879.00256 887.9
+1879.30579 2554.9
+1879.61658 19829.2
+1879.94910 2612.0
+1880.26953 921.9
+1880.44495 782.2
+1881.52722 723.6
+1907.09241 7441.6
+1960.84180 623.5
+S	3425	3425	1880.04499127
+Z	2	3758.242
+Z	3	5636.86
+532.53357 2078.1
+676.71210 930.2
+795.88879 974.9
+876.24066 561.6
+1151.49768 716.3
+1198.19836 3680.4
+1234.63953 628.8
+1287.69800 609.9
+1349.82227 632.2
+1449.26477 643.4
+1525.26099 791.0
+1878.70178 1065.7
+1879.29517 4188.1
+1879.72144 18775.8
+1880.14783 2229.8
+1880.56030 1443.5
+1880.86121 1335.0
+1906.82312 1197.7
+1907.11536 7230.1
+1907.46997 1345.2
+1930.31458 719.4
+S	3426	3426	1907.51940793
+Z	3	5719.283
+Z	2	3813.191
+519.10181 593.2
+532.49628 1910.1
+577.71539 768.7
+581.44055 565.8
+597.78973 648.0
+612.58966 672.0
+630.39294 918.2
+676.65076 1217.6
+705.02905 574.7
+713.22729 662.3
+795.87250 949.9
+1057.26514 695.5
+1061.24377 635.0
+1108.32556 609.2
+1198.11267 3412.0
+1326.23926 626.1
+1383.01050 759.4
+1432.88696 616.5
+1667.17236 720.3
+1777.05542 837.8
+1879.02917 1322.0
+1879.58142 19263.4
+1879.86633 3224.8
+1880.13794 1306.3
+1881.59729 724.5
+1907.05750 7314.9
+1930.56299 970.4
+S	3427	3427	637.803991267
+Z	2	1273.76
+Z	3	1910.137
+173.52881 667.1
+174.23201 560.4
+188.25546 529.7
+188.26189 834.2
+188.27362 1201.5
+188.28319 1089.1
+188.29381 1293.9
+188.30150 1124.5
+188.31421 805.4
+189.38942 620.2
+190.05019 1720.6
+198.96770 948.5
+199.28804 659.0
+199.34810 1340.7
+199.35899 1662.3
+199.36977 1994.3
+199.38406 1292.3
+199.55356 608.2
+201.12126 629.4
+206.47418 583.8
+208.58414 536.5
+210.80443 556.3
+211.50426 688.5
+226.85020 598.0
+240.64903 577.4
+271.32666 643.0
+280.18561 709.8
+303.60480 927.5
+323.91592 552.5
+327.69550 540.8
+331.23779 616.8
+340.63339 637.6
+350.28375 712.9
+357.84781 639.0
+395.88251 581.3
+423.18088 683.0
+472.60263 597.1
+482.63504 773.2
+489.69263 832.6
+497.64865 604.4
+515.37994 38499.9
+515.99658 578.1
+516.38342 10248.0
+532.49750 1239.0
+553.58691 877.6
+593.08624 582.3
+615.40344 889.2
+616.40607 751.3
+630.40698 875.4
+642.92529 606.0
+658.43793 607.7
+667.11932 559.9
+676.64471 1333.4
+682.36395 681.9
+682.86401 1060.8
+722.01215 641.4
+725.88086 1678.0
+726.38123 1833.3
+726.88831 771.1
+772.15613 659.0
+795.87158 1002.3
+839.93719 3951.3
+840.43872 4316.6
+840.94043 2876.7
+841.44299 812.6
+846.30206 588.1
+847.32672 646.5
+1015.69910 558.6
+1160.55054 830.7
+1198.10681 3112.7
+1488.28772 827.5
+1515.05090 579.0
+1586.26660 666.4
+1589.46204 765.3
+1688.89343 685.6
+1694.45630 680.1
+1708.75317 726.5
+1870.36621 925.3
+1878.79102 939.4
+1879.23389 2984.1
+1879.55688 19396.2
+1879.87720 2946.4
+1904.34277 817.8
+1907.06372 7465.6
+1930.61719 989.9
+S	3429	3429	1880.0568246
+Z	3	5636.895
+Z	2	3758.266
+532.50647 1771.4
+549.14496 1092.1
+564.81781 573.3
+645.05988 660.9
+676.65656 783.8
+731.12048 768.3
+735.11163 632.1
+795.87140 645.1
+842.49762 619.9
+879.06091 617.4
+1198.13708 3062.3
+1226.00183 683.9
+1265.34680 683.4
+1315.78918 613.2
+1710.28284 710.1
+1811.68787 685.7
+1877.81396 616.2
+1879.60547 18242.4
+1879.91492 3834.6
+1881.04846 861.2
+1901.21948 612.0
+1905.27954 660.6
+1907.13379 7378.9
+1919.05591 758.1
+1930.57813 1107.9
+S	3430	3430	759.5846946
+Z	5	3792.88435
+198.06953 556.1
+199.26294 576.6
+199.33931 893.8
+199.34169 882.1
+199.35432 1669.7
+199.36630 2295.6
+199.37677 958.4
+199.40022 780.0
+199.45273 728.9
+199.46306 872.6
+199.47450 1097.7
+204.60899 520.1
+210.63084 602.7
+221.74602 671.7
+233.57751 851.0
+249.13277 616.6
+249.28850 728.1
+271.31168 700.5
+326.28925 572.1
+340.22092 650.6
+347.20291 1541.3
+348.29544 584.5
+355.68185 2211.1
+356.18262 715.0
+381.36679 605.1
+384.22311 1082.3
+386.65869 644.3
+400.64639 731.9
+449.27286 606.9
+463.31839 723.8
+476.24396 1830.2
+482.65085 739.1
+504.26077 989.8
+507.18903 1941.0
+529.23553 1483.7
+532.50421 2073.5
+552.28412 854.2
+553.79565 713.1
+561.28638 7610.9
+561.78857 5092.0
+562.29041 1318.2
+590.32526 963.4
+590.56934 1363.8
+610.34692 1040.3
+610.81262 1426.2
+611.32458 1159.1
+613.30225 2570.3
+615.08044 696.5
+615.33350 1167.3
+619.25146 2273.4
+619.35406 1572.1
+619.75256 972.9
+619.85406 902.9
+624.42999 653.8
+630.41620 960.6
+639.85193 822.2
+657.86511 1055.0
+658.11481 873.2
+660.27374 5385.3
+661.27698 1469.3
+668.78351 753.3
+669.39191 909.1
+676.65698 950.5
+698.37579 751.3
+700.65906 1233.4
+701.00720 664.3
+710.35553 18461.8
+711.35864 7460.4
+712.36194 1223.5
+717.88568 1169.5
+718.38788 727.9
+719.37909 729.6
+736.37939 2434.9
+736.57721 2855.1
+736.77930 4506.4
+736.97986 3160.2
+737.18207 2087.3
+737.37958 767.4
+740.35315 1853.4
+740.68884 1167.5
+741.06500 1221.9
+778.04626 828.1
+787.04871 1365.7
+787.39020 2176.8
+787.71417 1892.2
+788.05139 992.4
+795.88318 770.3
+806.38324 1058.8
+814.72760 5175.5
+815.05920 6282.0
+815.39233 5908.3
+815.72577 2499.6
+816.06573 1539.7
+820.73322 2014.9
+821.06183 2755.2
+821.39716 966.3
+852.41876 4709.7
+852.75293 5280.2
+853.08795 3580.5
+853.42432 2469.2
+853.76044 1360.6
+858.42352 1650.6
+858.75464 2624.4
+859.09344 1889.2
+859.42126 1269.1
+872.54248 776.3
+891.44666 3371.2
+891.78015 3719.8
+892.11310 2574.8
+892.44867 2363.7
+907.89423 632.2
+920.38971 1891.9
+921.39960 801.3
+951.09607 624.7
+1024.36414 750.9
+1024.49695 817.6
+1029.19312 813.9
+1057.25647 767.2
+1057.72974 547.7
+1100.63647 823.0
+1121.56616 10387.3
+1122.56934 6865.3
+1123.57715 2388.7
+1166.45911 2233.5
+1167.45410 1855.1
+1168.46790 1033.3
+1188.06140 776.3
+1198.13184 3561.9
+1225.69299 758.4
+1237.49829 1983.8
+1237.69910 809.2
+1287.62598 1398.7
+1288.13696 1533.0
+1317.26733 678.0
+1336.65881 2678.8
+1337.16357 4020.2
+1337.66199 2195.7
+1338.15417 1095.9
+1338.66101 750.4
+1435.64880 912.0
+1436.64258 1046.2
+1636.34863 587.2
+1878.21973 1453.5
+1878.49817 1194.9
+1879.57996 19096.3
+1879.85474 5296.3
+1880.37964 1191.4
+1880.90002 1291.1
+1882.31506 658.7
+1907.13538 7287.6
+1919.06421 889.7
+1930.65027 721.8
+S	3431	3431	1907.5488246
+Z	3	5719.371
+Z	2	3813.25
+532.50726 2060.8
+541.13257 615.4
+662.49188 666.8
+676.66052 1021.0
+795.87915 849.1
+1052.15845 615.8
+1057.28467 824.2
+1161.55103 575.7
+1198.12488 2937.9
+1586.11792 678.6
+1706.22913 637.2
+1879.14001 2257.3
+1879.59167 19357.9
+1880.09119 1659.5
+1907.07983 7247.2
+1907.46521 742.0
+1907.64746 572.2
+1930.69067 935.9
+S	3433	3433	1880.02840793
+Z	3	5636.81
+Z	2	3758.209
+532.52509 1864.9
+597.77710 745.5
+630.48834 604.7
+676.65454 846.5
+681.47974 730.4
+795.87976 805.6
+817.22205 627.4
+930.79865 536.0
+930.85156 510.0
+1076.82983 658.3
+1079.44226 710.4
+1189.07678 668.3
+1198.16846 3202.6
+1348.17114 659.8
+1478.08276 861.9
+1525.60266 935.8
+1591.33984 810.0
+1876.05334 878.1
+1879.58386 19579.8
+1880.13855 879.9
+1906.82837 1060.9
+1907.11963 7234.6
+1930.82556 1007.7
+S	3434	3434	1907.56440793
+Z	2	3813.281
+Z	3	5719.418
+532.47363 1819.7
+574.53815 575.5
+616.58307 621.4
+637.04376 653.1
+650.36621 645.1
+676.69806 755.4
+680.57916 624.9
+686.55426 623.4
+759.36517 676.7
+781.24335 629.0
+795.87933 1328.2
+818.09265 681.4
+844.48035 566.7
+852.67633 594.5
+906.52234 570.1
+939.63123 662.5
+1057.33362 811.5
+1198.05762 3343.5
+1267.50964 587.0
+1336.32861 602.9
+1446.97913 848.3
+1596.32288 636.3
+1862.04138 614.7
+1878.19287 1144.3
+1878.40063 528.2
+1878.97485 777.9
+1879.40857 5098.0
+1879.68225 18821.7
+1880.39709 876.0
+1881.26929 939.4
+1907.06494 7446.2
+1930.84631 843.6
+S	3435	3435	512.788407933
+Z	3	1535.09
+Z	2	1023.729
+130.98820 642.6
+135.13664 508.9
+137.74525 557.9
+138.42807 535.5
+159.81824 600.3
+162.01851 594.5
+166.04735 625.7
+169.50288 590.5
+171.14873 1223.2
+173.38501 585.2
+175.36298 556.5
+177.11145 848.9
+182.18155 575.4
+188.25424 849.7
+188.26402 1149.5
+188.26993 875.5
+188.27863 968.3
+188.28719 1247.7
+188.29924 1216.2
+188.30791 1013.2
+188.31570 892.9
+199.12312 515.1
+199.26091 1041.6
+199.34462 1311.9
+199.35910 2977.5
+199.37962 946.0
+199.45883 1151.0
+212.59433 658.5
+216.17859 538.2
+216.69090 525.9
+224.24878 596.6
+233.58818 830.6
+239.14738 836.9
+252.62076 582.4
+253.15903 585.1
+275.34073 650.1
+280.19989 631.8
+283.17426 1286.5
+286.43649 633.1
+301.97623 536.7
+307.23889 1230.6
+314.96768 602.8
+321.62762 706.6
+323.23151 2875.7
+325.24768 44620.2
+327.19833 1798.7
+341.24246 47374.3
+362.15582 636.9
+423.68106 743.8
+479.41217 535.4
+482.63864 642.1
+532.48584 2114.2
+547.32861 569.9
+549.18567 792.4
+563.79663 650.5
+591.35614 1159.3
+630.44257 823.2
+635.38220 1956.5
+636.38934 947.2
+676.70715 948.3
+679.40790 1154.3
+680.41827 883.3
+714.10114 648.1
+740.82422 608.3
+759.65161 560.8
+793.12665 514.9
+820.52863 672.8
+839.65021 683.5
+925.38776 562.7
+956.92365 630.7
+1057.23804 599.0
+1057.33423 696.4
+1140.44800 619.8
+1188.32312 720.3
+1198.08643 3258.0
+1257.27051 534.5
+1525.50476 845.9
+1619.25928 659.6
+1875.53821 809.5
+1877.62952 563.9
+1877.93628 637.6
+1878.37012 970.8
+1878.87146 1025.7
+1879.14038 1223.0
+1879.68201 16163.5
+1880.44055 1233.0
+1880.74683 1015.0
+1906.86450 1677.7
+1907.15979 7205.2
+1907.78149 765.6
+1919.01233 637.7
+1930.72241 1065.5
+S	3437	3437	1880.02499127
+Z	3	5636.8
+Z	2	3758.202
+532.45673 1713.9
+583.14703 580.2
+598.35834 642.1
+620.21289 633.2
+630.44281 844.8
+664.57880 693.0
+676.64862 873.7
+689.02740 617.2
+801.69031 554.5
+803.77887 652.8
+1198.02368 3124.3
+1286.39526 761.6
+1320.90576 569.0
+1469.48315 618.0
+1555.34998 693.4
+1876.16321 687.6
+1876.63977 677.1
+1878.36987 869.1
+1879.54407 18679.5
+1880.23499 916.2
+1881.52258 689.7
+1907.03918 7387.0
+1919.05981 916.0
+1930.71375 1034.5
+S	3438	3438	759.5870746
+Z	5	3792.89625
+198.68114 583.6
+198.97305 784.4
+199.25557 962.2
+199.26775 668.9
+199.33264 914.2
+199.33952 535.1
+199.35423 2419.4
+199.36302 1470.8
+199.37590 1432.4
+199.45168 681.6
+203.79822 872.4
+209.66687 644.2
+227.67465 663.0
+235.57535 574.1
+272.11734 598.9
+308.91324 565.9
+308.92874 628.7
+334.52036 714.1
+341.77142 642.8
+355.70355 566.4
+357.05045 635.0
+381.39233 989.0
+388.72284 683.2
+393.58731 587.5
+427.57886 763.6
+449.94620 700.8
+455.15756 572.1
+462.21542 582.5
+463.27158 605.1
+515.14832 574.4
+532.41382 2152.4
+619.98859 837.3
+638.01605 614.1
+641.28351 615.3
+676.63617 789.4
+698.30743 572.3
+713.25262 627.5
+752.34265 638.0
+758.10645 692.9
+785.82025 687.4
+795.88220 993.7
+800.41583 636.0
+808.49603 597.4
+812.03424 670.3
+828.31189 722.3
+903.80328 808.3
+951.27777 593.2
+1019.67114 826.7
+1057.22961 646.2
+1197.92615 3277.6
+1331.64160 646.1
+1367.98425 707.5
+1488.29858 680.6
+1525.54553 671.2
+1528.60449 539.6
+1665.69910 743.0
+1715.33533 569.9
+1773.80151 749.8
+1777.22693 814.8
+1877.51404 753.6
+1878.00391 692.1
+1878.49133 788.2
+1878.94653 1495.9
+1879.54382 19076.3
+1879.82263 3090.3
+1880.10278 2145.2
+1880.51404 1170.9
+1881.07996 580.8
+1907.07349 6277.6
+1907.59778 1118.0
+1930.79834 738.5
+S	3439	3439	889.0518246
+Z	5	4440.22
+236.03824 556.0
+238.17670 603.3
+238.37941 686.4
+246.39899 715.2
+252.69699 601.6
+253.24034 584.6
+271.49304 683.5
+278.49283 619.8
+287.43225 534.7
+317.48096 681.3
+456.14218 720.0
+488.20154 649.7
+532.45624 2114.9
+549.18463 782.8
+664.00958 730.9
+676.67737 982.0
+721.36005 748.1
+765.97125 609.1
+802.95581 718.0
+815.19379 599.1
+858.10315 663.8
+971.95148 604.9
+1003.62543 529.7
+1057.29834 1057.2
+1084.00476 685.0
+1183.06665 755.8
+1198.02002 3518.1
+1203.07507 592.3
+1401.18652 706.5
+1663.26379 651.8
+1878.95959 2117.5
+1879.24719 1988.0
+1879.63062 18681.3
+1879.94983 1777.0
+1880.30542 1513.8
+1880.50024 2090.2
+1885.07678 760.0
+1907.03748 7586.3
+1930.70740 1302.0
+S	3441	3441	1880.02999127
+Z	2	3758.212
+Z	3	5636.815
+532.47687 2294.4
+549.16772 623.0
+551.06610 557.0
+594.12292 531.6
+605.86450 576.8
+729.44006 622.8
+861.33466 611.8
+877.33624 560.9
+893.83234 787.6
+1057.29126 819.5
+1198.06860 3329.9
+1341.87244 641.2
+1346.98169 718.3
+1770.81421 686.7
+1878.96741 889.8
+1879.28503 1419.3
+1879.61548 20117.8
+1879.96338 1231.1
+1880.38013 854.3
+1881.78113 614.7
+1881.91150 621.2
+1907.07361 7457.0
+S	3442	3442	1907.4168246
+Z	2	3812.986
+Z	3	5718.975
+532.45129 1792.6
+572.26563 626.5
+634.08026 550.6
+676.77484 601.9
+693.95972 658.2
+731.14581 815.0
+780.96552 596.7
+795.88599 1018.9
+997.36310 715.8
+1011.02783 713.6
+1057.21460 908.5
+1066.82019 695.6
+1198.01013 3560.3
+1242.08337 617.6
+1286.74097 680.9
+1363.70752 669.0
+1445.99536 633.3
+1875.30347 720.3
+1879.07251 1540.6
+1879.44824 10734.2
+1879.72241 13957.5
+1880.93005 1152.4
+1881.33313 731.4
+1907.14417 7265.8
+1930.66724 828.1
+S	3443	3443	512.788407933
+Z	3	1535.09
+Z	2	1023.729
+133.12051 857.5
+136.44679 598.3
+155.16661 561.1
+160.01721 665.8
+165.74736 891.9
+169.49669 762.0
+169.70720 582.6
+183.79500 550.4
+188.25063 616.5
+188.26628 826.0
+188.27739 1249.8
+188.29005 1342.0
+188.30280 1152.5
+188.31540 758.7
+188.33720 677.6
+195.15182 607.6
+198.97429 890.1
+199.34610 2516.9
+199.35641 1640.4
+199.36649 1567.3
+199.37753 1363.2
+199.45531 717.9
+199.47461 600.6
+214.09227 606.9
+214.51582 531.6
+233.57774 719.6
+267.82129 585.0
+276.23975 572.1
+280.18668 710.6
+283.17279 850.1
+308.90704 748.2
+323.23294 1615.0
+325.24771 19077.6
+327.20023 1386.6
+341.24234 18901.0
+371.22729 3049.4
+409.21326 562.3
+415.25134 2597.2
+451.73090 634.3
+459.27850 1937.4
+460.28030 743.3
+480.24649 588.2
+482.65512 616.4
+488.28760 885.6
+493.20554 572.1
+532.48047 1653.3
+547.32928 1770.0
+547.93793 597.8
+548.33392 702.0
+591.35583 1442.5
+592.36255 1131.7
+608.07159 522.5
+635.38440 875.5
+676.64838 1006.8
+692.02594 544.4
+710.83368 647.7
+731.12616 715.7
+755.44318 891.5
+762.56256 590.9
+795.88647 690.6
+799.46149 739.4
+833.63013 563.8
+845.49152 717.2
+885.32605 818.1
+912.98749 571.2
+916.66412 575.4
+920.07684 555.6
+929.61609 553.7
+967.52161 657.9
+1018.46259 603.5
+1057.25732 1135.9
+1110.43030 658.8
+1183.82068 604.9
+1198.07458 3150.1
+1221.69666 716.5
+1533.01794 696.4
+1549.54700 580.7
+1558.33240 647.0
+1673.91943 582.2
+1753.14612 634.7
+1879.25867 2165.5
+1879.55359 20201.1
+1882.42261 712.3
+1883.53186 651.6
+1905.93372 678.6
+1907.16113 7235.1
+1919.06030 761.7
+1930.64099 1427.4
+S	3445	3445	1880.0288246
+Z	2	3758.21
+Z	3	5636.811
+532.47070 2502.4
+554.94781 550.0
+582.23413 622.3
+594.91681 637.9
+619.40808 745.5
+690.86365 748.9
+731.14484 698.3
+795.87878 949.8
+869.23981 654.1
+968.59406 724.5
+982.21716 622.7
+1057.31958 984.6
+1198.05688 3392.8
+1249.00085 728.4
+1403.47180 595.3
+1525.49524 916.1
+1527.66064 650.5
+1763.68933 803.6
+1785.43152 750.1
+1876.64673 677.3
+1878.36621 972.2
+1878.78894 846.3
+1879.32300 1608.3
+1879.65698 19407.1
+1880.57727 1482.6
+1880.92566 977.3
+1907.12390 7463.8
+1930.65283 1049.6
+1990.28137 639.3
+S	3446	3446	637.8048246
+Z	2	1273.762
+Z	3	1910.139
+165.75298 756.7
+169.50175 624.3
+175.65273 600.8
+181.10756 560.3
+188.14014 763.1
+188.26672 537.1
+188.28027 823.2
+188.29736 765.9
+188.31540 746.3
+188.34465 553.2
+188.35260 869.1
+190.05037 2561.5
+192.09785 619.9
+192.40126 558.4
+199.25540 833.3
+199.28065 858.6
+199.31488 719.6
+199.35426 1783.3
+199.37750 1507.2
+199.39142 1188.7
+199.40457 570.5
+199.41756 694.9
+199.48808 783.0
+201.12234 1521.9
+206.89284 696.8
+241.19148 653.2
+255.17937 631.5
+265.69919 696.7
+275.36786 564.3
+292.81775 683.1
+344.14395 1375.7
+350.30853 577.9
+352.24207 783.0
+357.91660 733.9
+369.22372 2254.2
+396.74207 586.3
+419.44235 643.1
+444.64444 633.4
+457.22592 948.2
+480.36664 670.9
+482.28036 553.2
+482.30350 669.6
+515.37994 53863.2
+516.38354 15628.3
+526.24646 784.2
+532.46155 2021.5
+544.26227 1322.2
+561.75616 629.2
+585.87988 590.8
+604.80896 596.0
+624.73358 571.2
+630.43823 961.2
+676.62573 774.1
+682.36646 4515.2
+682.86865 3889.3
+683.36908 1022.7
+725.88318 7986.9
+726.38385 7371.4
+726.88562 3313.3
+727.38269 1120.5
+731.16321 717.1
+769.88293 1745.9
+770.38879 865.0
+770.59387 619.5
+771.55652 569.3
+782.42462 1607.9
+782.92493 1939.9
+783.43286 769.3
+795.88617 977.4
+822.41467 595.1
+830.92340 746.1
+839.93781 14603.0
+840.43793 13163.5
+840.93982 8061.0
+841.44208 2532.1
+841.94250 723.2
+1020.77948 655.4
+1065.20825 823.0
+1198.03577 3382.6
+1323.42493 846.7
+1498.85803 803.1
+1677.01636 631.2
+1808.99658 723.5
+1879.50085 19112.5
+1879.76489 2156.6
+1879.88940 886.3
+1880.69385 960.6
+1907.18799 7469.0
+1919.00854 1097.2
+1924.92297 672.3
+1930.69299 894.1
+S	3447	3447	1907.53440793
+Z	3	5719.328
+Z	2	3813.221
+532.48633 1912.8
+534.05487 614.1
+549.21326 813.4
+676.66174 1056.1
+791.73254 579.8
+795.88074 1347.2
+880.29712 750.9
+884.30774 609.4
+963.98077 574.3
+1014.55151 672.1
+1019.64789 1011.5
+1020.85339 607.5
+1198.09387 2722.5
+1218.12366 869.3
+1455.19739 627.6
+1727.41577 693.7
+1878.55615 739.5
+1878.90613 1472.9
+1879.28894 1516.1
+1879.60876 19979.6
+1879.94690 2550.1
+1880.28442 2072.5
+1907.10291 7368.3
+S	3449	3449	1880.0295746
+Z	2	3758.211
+Z	3	5636.814
+530.39526 637.9
+532.42334 1519.0
+646.60370 575.5
+647.43799 650.0
+669.64240 554.8
+676.69110 859.6
+767.68512 597.2
+795.88452 946.9
+1057.33020 1006.1
+1182.48413 626.7
+1197.94800 3713.4
+1734.04346 759.2
+1763.83789 630.6
+1860.08765 765.2
+1877.70959 608.1
+1877.95044 715.0
+1878.93054 1379.9
+1879.17529 1576.2
+1879.34790 1037.6
+1879.66748 19777.7
+1880.03967 1328.4
+1880.16211 1489.1
+1880.38818 1232.5
+1897.64856 688.7
+1907.14050 7051.4
+S	3450	3450	800.2079946
+Z	4	3196.80068
+220.30220 557.9
+224.22548 682.2
+235.33215 754.3
+252.70926 591.1
+255.05484 653.7
+256.07422 726.1
+261.92551 619.0
+271.32166 670.2
+276.39182 585.1
+339.06815 745.9
+367.31699 636.7
+379.68744 623.5
+402.87408 704.6
+532.42346 1652.7
+534.73981 796.3
+548.61011 676.6
+562.90631 608.3
+600.85541 626.5
+676.67194 1038.5
+676.80487 651.5
+691.33704 864.6
+703.62469 604.3
+726.12042 763.0
+739.24310 677.3
+749.12067 1161.2
+793.40808 628.7
+795.87769 1009.7
+820.98700 579.8
+857.02606 741.3
+947.45520 858.7
+952.46564 828.3
+1020.77338 830.1
+1051.50977 748.8
+1057.29126 935.1
+1060.52893 1006.2
+1119.66272 701.9
+1197.76953 638.1
+1197.95215 3389.6
+1233.59180 954.1
+1234.62000 698.8
+1249.03052 723.0
+1448.80408 676.4
+1525.39880 931.5
+1576.67114 744.5
+1777.28687 977.5
+1878.69165 1078.2
+1879.26855 2068.6
+1879.62415 19330.1
+1879.98938 1760.4
+1880.12500 1128.4
+1907.10730 7039.2
+S	3451	3451	1907.47940793
+Z	2	3813.111
+Z	3	5719.163
+532.47687 1797.7
+549.17249 872.6
+556.63361 582.1
+630.41760 824.3
+676.66034 850.4
+740.53656 586.3
+779.22430 651.6
+808.20673 613.5
+821.96716 593.8
+851.49951 621.3
+1057.28943 824.7
+1087.82935 907.1
+1198.06555 3265.0
+1250.71460 649.6
+1513.40417 645.2
+1803.32263 774.5
+1877.54773 777.8
+1877.91016 553.1
+1879.19739 1585.4
+1879.59631 20014.0
+1880.00000 1086.8
+1881.14575 640.1
+1904.52490 691.9
+1907.12012 7300.9
+1907.42346 1086.8
+1930.64612 858.3
+S	3453	3453	1880.09440793
+Z	3	5637.008
+Z	2	3758.341
+520.64880 582.7
+532.46033 1754.7
+532.55029 615.8
+549.17017 641.1
+553.02057 576.9
+618.36237 612.2
+621.97443 593.9
+676.64624 1094.0
+795.88177 845.4
+879.08539 624.8
+1025.47937 645.6
+1188.29321 975.5
+1198.03064 3367.9
+1405.42957 663.1
+1436.19275 683.1
+1501.44226 819.7
+1612.43298 615.4
+1782.50562 676.8
+1854.42944 645.3
+1868.70715 607.2
+1876.34363 1152.4
+1878.67566 1073.4
+1879.06030 1772.8
+1879.54919 19975.3
+1880.01160 880.9
+1880.41528 887.4
+1907.08105 7489.8
+1919.04895 1086.8
+1930.62842 1191.4
+S	3455	3455	1198.47440793
+Z	3	3592.148
+Z	2	2395.101
+332.87119 588.8
+342.25714 825.5
+349.97446 583.9
+350.29468 674.5
+359.60312 598.3
+367.22208 692.5
+383.13879 573.2
+404.69522 665.2
+427.52393 725.0
+471.32602 515.4
+482.29797 601.4
+532.45093 1806.2
+577.63745 814.1
+630.38031 579.5
+636.13721 720.2
+676.66650 1026.9
+685.18787 585.7
+731.08459 801.0
+795.88312 1232.4
+903.86255 532.9
+1021.11591 621.4
+1034.93054 581.5
+1198.00378 3408.1
+1239.58337 650.4
+1265.57739 726.5
+1407.78320 626.1
+1489.59375 874.4
+1797.16992 550.4
+1797.25598 554.3
+1830.83728 643.4
+1872.77515 800.9
+1874.72693 656.4
+1878.83923 1028.8
+1879.60107 20202.1
+1880.35071 878.0
+1906.83325 1275.8
+1907.12793 7047.0
+1907.68225 1116.0
+S	3457	3457	1879.99724127
+Z	2	3758.147
+Z	3	5636.716
+516.34052 740.2
+532.44794 1758.2
+569.88684 625.8
+585.09265 626.5
+676.65540 1027.8
+731.13263 883.0
+754.33167 713.9
+795.88574 1035.4
+845.43964 582.9
+1062.91809 850.6
+1072.71741 686.8
+1197.99658 3349.8
+1762.18005 715.8
+1777.01477 781.3
+1846.48792 609.5
+1878.83936 1135.6
+1879.58215 19746.3
+1879.86646 2295.8
+1880.25671 1847.5
+1881.18030 1145.6
+1881.53284 962.5
+1907.05554 7456.4
+1930.61621 1059.2
+1941.24512 673.8
+S	3458	3458	1907.56040793
+Z	2	3813.273
+Z	3	5719.406
+532.45374 2067.0
+550.54248 576.6
+561.33740 679.9
+585.90558 600.5
+663.67163 553.8
+673.11249 717.1
+718.68079 583.7
+730.52679 708.3
+781.08575 616.2
+795.88617 787.4
+809.96027 604.7
+828.51685 620.6
+830.74445 570.8
+1196.63892 601.3
+1198.02051 3440.4
+1484.90430 719.0
+1525.44336 850.1
+1860.12036 1010.2
+1870.51428 798.1
+1878.79114 613.2
+1879.44275 20642.0
+1906.78284 1078.9
+1907.09436 7511.0
+1907.55762 705.9
+1930.66858 968.2
+1967.69775 763.5
+1999.56787 643.8
+S	3459	3459	637.8048246
+Z	2	1273.762
+Z	3	1910.139
+167.21461 559.8
+168.50743 499.7
+182.76852 757.4
+188.24919 607.5
+188.25749 834.9
+188.27211 1078.1
+188.28423 1410.5
+188.29358 1185.8
+188.30212 1283.4
+188.31705 1020.0
+189.36420 564.6
+198.97501 1287.5
+199.23251 569.6
+199.27435 631.9
+199.33412 683.5
+199.34995 801.3
+199.35616 1201.7
+199.36040 1361.2
+199.37134 1949.5
+199.39285 1215.2
+199.45967 800.1
+200.78360 689.5
+204.11075 587.2
+205.15521 695.9
+210.69809 622.2
+214.47482 562.2
+214.49825 640.4
+226.51715 635.3
+232.33884 662.6
+286.39993 550.9
+288.20886 643.7
+290.65710 586.6
+322.67719 654.0
+333.92810 729.7
+342.50119 672.1
+346.01941 535.3
+350.30042 788.3
+353.79230 577.2
+381.33408 673.2
+383.79129 561.6
+408.36380 660.5
+453.30591 598.9
+454.90842 613.1
+462.94193 639.1
+482.62344 693.5
+508.72748 579.8
+515.38000 21351.6
+516.38342 3898.9
+532.44318 1579.2
+532.47998 760.5
+549.11627 1058.4
+564.50043 568.4
+630.35181 749.4
+645.89478 645.5
+665.70789 682.1
+676.62537 1092.6
+682.37292 743.9
+725.88904 981.2
+737.98450 567.7
+766.46613 609.9
+768.35779 679.5
+777.26349 628.9
+779.75171 761.2
+780.24646 731.1
+795.89404 942.7
+839.93854 2785.4
+840.44153 1411.6
+853.83472 744.7
+857.98181 716.3
+984.24475 603.4
+1019.63116 895.6
+1057.23315 877.7
+1088.09412 601.8
+1188.07422 809.0
+1197.99744 3401.8
+1495.59070 644.1
+1717.59204 887.5
+1853.57825 694.6
+1872.82849 1340.1
+1879.49805 19901.1
+1879.90735 1551.3
+1906.84399 694.7
+1907.13977 7410.0
+1930.46741 1194.1
+S	3461	3461	1879.94840793
+Z	2	3758.049
+Z	3	5636.57
+505.54016 562.0
+532.49591 2060.4
+561.25446 617.8
+603.44067 809.5
+641.13373 547.3
+642.31226 585.6
+676.64691 1139.4
+680.00073 540.6
+708.78973 562.1
+780.72198 667.2
+795.88739 998.1
+1052.92041 638.6
+1088.28174 611.3
+1089.15088 673.4
+1127.43103 687.6
+1198.10107 3401.8
+1453.22803 675.4
+1624.77368 732.5
+1625.92725 636.1
+1719.30591 1514.4
+1766.30566 737.7
+1874.79297 968.8
+1878.20618 995.0
+1878.91248 1506.3
+1879.14087 1244.0
+1879.56470 19832.7
+1879.85449 1028.2
+1879.99194 1799.0
+1880.21533 1103.0
+1880.87903 955.3
+1901.59937 763.9
+1907.06433 7377.4
+1930.63708 1265.3
+1989.19238 722.6
+S	3462	3462	1907.59440793
+Z	2	3813.341
+Z	3	5719.508
+532.48212 2088.3
+652.28845 730.4
+676.68475 1196.4
+795.90125 779.9
+1006.21606 860.9
+1164.94421 678.8
+1197.13867 698.7
+1198.08020 3531.1
+1239.01221 636.6
+1504.86316 695.7
+1718.92566 1336.1
+1730.26184 763.2
+1874.33228 767.9
+1877.96228 1132.2
+1878.37708 788.2
+1879.37512 3209.7
+1879.64380 18559.1
+1881.39954 647.0
+1898.76807 664.2
+1907.19226 7300.9
+1919.07800 1000.7
+1930.76050 945.3
+S	3463	3463	415.1838246
+Z	1	414.176
+104.18314 675.6
+108.12669 561.1
+113.22447 586.3
+113.47042 717.1
+120.67757 601.5
+121.77602 2217.8
+137.29770 740.1
+143.21829 524.8
+146.93002 651.4
+151.25081 623.9
+160.03871 590.5
+163.99222 592.5
+165.89793 612.0
+173.26979 612.8
+177.24297 497.7
+180.06514 1570.5
+182.79234 671.4
+190.44966 564.4
+197.36121 598.4
+198.18501 561.8
+199.25523 1702.4
+199.33337 744.8
+199.35356 3313.7
+199.37390 1220.5
+199.45131 1287.9
+204.28040 715.2
+205.21886 602.1
+232.38815 617.5
+238.83121 699.8
+279.09164 608.3
+285.06253 537.8
+312.12097 1198.2
+325.65634 1380.0
+326.96472 726.7
+334.75278 552.3
+372.15405 14335.9
+372.18362 546.0
+373.15778 2374.5
+394.08133 577.5
+395.07617 526.7
+397.13141 794.0
+422.93097 554.2
+426.11996 623.7
+464.98093 573.3
+482.67105 800.9
+509.47116 584.3
+515.05396 670.5
+518.22424 611.0
+530.49432 582.0
+532.50153 1738.1
+609.78406 543.0
+630.44611 625.3
+659.22815 530.1
+676.68207 1026.5
+725.76678 655.8
+751.53833 546.2
+767.14001 552.8
+795.86902 1133.5
+1012.45007 517.6
+1198.12085 3453.0
+1374.24097 638.9
+1414.15295 664.9
+1525.48608 796.6
+1635.92615 570.1
+1660.39929 590.6
+S	3465	3465	1880.06024127
+Z	3	5636.905
+Z	2	3758.273
+532.50024 1083.1
+573.59320 598.0
+676.73358 624.5
+701.51593 612.5
+761.58600 624.7
+795.88153 787.2
+868.17053 609.3
+875.78741 692.7
+981.88660 693.8
+1057.35889 623.9
+1089.19861 742.1
+1197.89441 739.7
+1198.11890 2085.0
+1198.26660 1803.1
+1340.43933 602.9
+1552.58093 631.1
+1675.94202 654.9
+1716.50049 936.7
+1854.98499 631.3
+1871.82581 1074.2
+1874.62341 761.4
+1876.78528 702.6
+1878.25208 1138.7
+1878.74731 1559.2
+1879.05005 1059.0
+1879.49268 6406.9
+1879.72656 16602.6
+1880.44775 1549.0
+1880.73975 1079.0
+1881.36694 630.1
+1882.69519 678.9
+1907.17261 7409.1
+S	3466	3466	1907.5898246
+Z	2	3813.332
+Z	3	5719.494
+532.48065 2028.5
+549.15424 654.6
+630.44293 829.4
+667.19287 682.1
+673.50940 726.0
+676.61554 735.4
+689.62787 799.5
+762.56885 604.4
+780.62238 550.7
+795.89063 1021.0
+860.39899 613.6
+1080.03186 617.8
+1198.07581 3081.6
+1520.32654 626.5
+1525.51440 659.9
+1873.88452 672.1
+1877.11975 857.3
+1878.39502 872.1
+1878.82166 1251.4
+1879.41516 5719.0
+1879.66016 17538.8
+1880.24658 2819.4
+1880.64368 1159.5
+1881.11279 1058.3
+1907.19714 7045.7
+1930.70740 890.5
+S	3467	3467	637.804991267
+Z	3	1910.14
+Z	2	1273.762
+170.26471 593.6
+188.25525 749.2
+188.26396 938.8
+188.27119 1018.4
+188.27815 1172.9
+188.28828 1539.8
+188.29749 955.4
+188.30533 1138.6
+190.04988 1065.9
+198.97334 619.1
+199.27026 566.9
+199.33672 1047.8
+199.34291 1373.6
+199.35274 1663.1
+199.36736 1887.7
+199.37726 696.4
+199.45953 469.6
+199.46657 671.3
+199.53670 591.5
+203.55861 558.7
+211.33969 570.3
+220.39784 590.2
+245.78423 538.8
+252.80292 601.2
+255.28903 857.3
+256.49841 627.3
+259.74399 527.3
+280.17975 866.9
+292.79944 538.2
+297.14587 613.8
+308.89639 633.2
+350.30197 768.9
+370.54596 592.0
+381.35907 712.4
+398.05594 662.6
+460.12927 656.6
+464.62445 682.6
+515.38000 18093.4
+516.38275 3920.0
+532.44678 1536.7
+543.62994 626.3
+549.14368 687.3
+557.68738 631.2
+595.56622 652.1
+625.86273 665.2
+630.40485 895.3
+643.32172 587.2
+649.90704 733.3
+676.68463 1319.8
+682.36176 780.2
+713.63007 609.1
+725.88031 1602.4
+726.38013 1668.4
+726.87054 852.8
+731.10986 832.2
+795.88507 955.4
+839.93555 2716.0
+840.44067 4402.6
+840.94232 2045.6
+841.44635 872.1
+865.97913 759.8
+1198.00024 3074.6
+1365.52869 690.1
+1525.41199 1028.9
+1641.88867 642.5
+1876.69043 764.7
+1878.59473 910.6
+1879.24927 1633.4
+1879.64771 19897.7
+1880.05444 1393.8
+1880.25134 1280.2
+1881.60339 743.8
+1906.78821 796.4
+1907.16406 7232.5
+1907.55347 1200.0
+1930.58679 1037.6
+S	3469	3469	1907.6058246
+Z	3	5719.542
+Z	2	3813.364
+532.48395 1664.1
+630.34271 1102.1
+652.27478 776.6
+670.61737 625.2
+676.64532 1264.2
+795.88177 1001.1
+867.96674 712.2
+888.64844 564.5
+970.99390 616.9
+1021.01111 851.3
+1198.07629 3225.7
+1489.68359 878.4
+1525.24231 940.7
+1583.14697 586.8
+1872.00525 694.1
+1875.31348 613.7
+1878.43408 633.7
+1879.56482 19477.4
+1880.38660 1155.5
+1881.26587 787.6
+1907.20911 6630.2
+1932.22705 967.0
+S	3470	3470	415.1838246
+Z	1	414.176
+102.18082 625.4
+104.15221 624.0
+117.79331 705.0
+121.77560 2491.7
+131.08902 517.5
+139.36063 546.0
+142.44768 682.6
+151.72656 671.0
+152.02731 545.8
+171.64839 847.1
+178.04178 542.9
+184.09314 687.5
+198.97356 959.6
+199.25705 1430.0
+199.35555 3757.7
+199.37173 910.0
+199.45430 1364.2
+203.50055 541.0
+214.72853 575.8
+214.93114 597.6
+219.90117 545.6
+223.07735 551.9
+233.57138 679.3
+259.22290 495.1
+260.23590 737.4
+266.41742 524.0
+268.08615 622.9
+271.70395 522.4
+308.89764 741.1
+313.65912 577.7
+325.65466 1660.0
+342.66989 553.8
+348.20486 643.5
+349.47574 690.8
+350.30139 769.5
+372.15479 5395.5
+373.15869 1029.3
+381.35477 635.8
+382.17862 616.6
+385.21127 677.5
+390.09174 681.5
+394.08075 900.4
+395.07877 604.8
+397.12738 891.1
+398.29309 583.3
+432.67041 506.9
+469.90628 593.1
+476.79938 906.1
+528.59753 797.2
+532.46692 1778.5
+548.81061 795.8
+602.56952 518.1
+630.38452 678.4
+644.72760 544.1
+666.93561 534.7
+676.66107 1073.2
+693.66431 575.3
+795.11707 641.7
+795.87256 776.8
+799.29504 667.3
+804.76294 609.5
+808.74823 507.7
+858.03192 619.2
+883.09540 629.8
+894.21387 551.1
+983.72943 636.2
+1057.28650 828.9
+1069.44849 698.7
+1078.79224 581.3
+1090.52380 656.4
+1129.08545 583.4
+1188.28540 687.8
+1198.04700 3245.2
+1430.34583 540.2
+1525.37988 724.5
+1644.48291 620.7
+S	3471	3471	1198.45040793
+Z	2	2395.053
+Z	3	3592.076
+328.61194 641.2
+381.34824 791.4
+407.40738 605.4
+413.51950 591.9
+427.53592 742.9
+465.35321 594.2
+482.64490 826.0
+510.52991 596.8
+532.45148 1909.8
+549.13995 784.8
+644.70245 594.7
+676.66064 1080.3
+731.10748 835.9
+795.89386 1412.1
+808.84680 557.3
+861.47870 602.9
+875.76147 583.4
+894.66357 542.1
+1131.82861 594.5
+1188.31689 821.2
+1198.00854 3081.9
+1206.91455 598.8
+1274.96777 682.7
+1334.11450 600.0
+1641.82410 558.3
+1772.34570 660.9
+1878.67859 1048.5
+1879.03455 691.8
+1879.59216 19941.7
+1880.51685 881.4
+1907.19922 6994.3
+S	3473	3473	1880.04740793
+Z	2	3758.247
+Z	3	5636.867
+532.45355 1553.0
+676.56940 601.5
+676.64063 980.3
+795.88867 1073.1
+857.08484 621.2
+1004.27496 653.0
+1010.43170 730.5
+1198.01062 3192.2
+1322.48779 707.6
+1340.90002 752.2
+1408.91174 673.7
+1502.50037 656.2
+1525.39001 650.2
+1553.97278 635.4
+1650.64697 717.9
+1730.35913 666.2
+1752.58862 810.1
+1768.16504 619.6
+1877.16919 749.4
+1877.81006 938.3
+1878.20007 715.8
+1879.08459 1211.2
+1879.53345 19218.3
+1880.02539 2238.6
+1881.23413 1206.4
+1882.31531 606.0
+1907.20190 7236.5
+1933.67798 667.8
+S	3474	3474	1907.5898246
+Z	3	5719.494
+Z	2	3813.332
+532.43433 1950.2
+549.18591 937.1
+593.53137 716.7
+676.66681 811.3
+676.69928 566.0
+780.98248 594.3
+795.88330 989.1
+803.51941 606.2
+1057.29504 856.0
+1144.25073 663.5
+1174.28149 617.3
+1197.96631 3550.2
+1879.34070 3735.2
+1879.61853 18594.0
+1907.16113 7261.2
+1930.67334 792.6
+1938.09912 800.7
+S	3475	3475	1198.3868246
+Z	3	3591.885
+Z	2	2394.926
+316.59665 677.6
+327.13135 636.4
+333.26526 669.4
+341.44125 569.5
+350.30072 526.6
+350.31638 647.5
+354.76419 523.4
+442.61554 675.9
+443.91882 535.3
+474.13934 554.9
+474.16858 534.0
+477.31055 702.2
+532.43597 2002.2
+549.18555 735.3
+604.31818 657.1
+676.68646 904.4
+709.08972 580.3
+712.37384 667.1
+752.58563 657.0
+758.89789 768.1
+781.55865 563.8
+795.87018 804.7
+858.09656 789.0
+983.84167 638.5
+994.01874 637.3
+1019.66296 660.9
+1057.30212 728.4
+1124.29944 652.4
+1197.97327 3229.1
+1207.83008 809.0
+1436.54895 637.8
+1513.23828 646.1
+1593.89136 628.1
+1641.08813 634.4
+1693.85217 644.5
+1695.69800 671.4
+1788.84290 610.8
+1878.72620 1011.2
+1879.10706 1897.5
+1879.43933 4383.0
+1879.64319 18168.3
+1880.23914 1468.5
+1880.44421 1271.1
+1880.80347 756.7
+1881.14294 961.0
+1907.16968 7292.0
+S	3477	3477	1880.01624127
+Z	2	3758.185
+Z	3	5636.773
+532.42157 2159.2
+557.02026 611.7
+558.75055 615.9
+663.36237 671.2
+676.65680 1119.2
+726.21869 640.7
+778.65308 564.6
+781.07001 717.6
+789.45490 584.8
+795.88129 926.4
+886.69513 657.5
+958.00964 638.6
+1007.24103 660.3
+1008.16534 634.1
+1119.98975 569.2
+1197.93835 3496.3
+1823.97339 642.0
+1834.81470 693.7
+1876.95813 662.5
+1878.94312 809.9
+1879.57983 20455.8
+1907.14697 7597.4
+1907.69141 588.0
+1907.78076 587.2
+1930.76953 953.6
+S	3478	3478	1907.4858246
+Z	3	5719.182
+Z	2	3813.124
+532.44574 1656.2
+548.39178 594.2
+676.64929 788.0
+731.16840 749.5
+734.22614 651.4
+795.88141 1420.1
+968.73047 689.7
+996.98444 598.7
+1057.26379 723.6
+1080.75000 648.3
+1102.60791 668.7
+1164.85901 663.2
+1197.99316 2927.9
+1569.46094 744.7
+1572.75134 645.7
+1582.20203 631.2
+1705.28479 606.9
+1868.33337 757.7
+1870.09009 596.8
+1877.45581 636.6
+1878.31311 762.1
+1878.92322 1581.8
+1879.57507 19163.0
+1879.84070 3516.7
+1880.17688 1890.0
+1907.06726 7035.0
+1930.72510 1161.2
+S	3479	3479	623.783241267
+Z	2	1245.719
+Z	3	1868.074
+162.85817 667.8
+167.38651 629.9
+173.93637 624.4
+182.79204 587.3
+185.74338 562.3
+188.23389 614.3
+188.26617 1034.7
+188.27826 1635.2
+188.29465 1674.4
+188.31468 1000.8
+194.44443 594.9
+195.05609 583.7
+198.97316 875.0
+199.24585 697.4
+199.29028 729.2
+199.31900 552.4
+199.34404 1914.0
+199.36220 1845.1
+199.37234 773.0
+199.38448 1153.2
+199.40923 698.6
+199.44038 1069.4
+199.48163 487.1
+199.48853 619.9
+207.86113 532.5
+218.98668 581.0
+219.05194 609.0
+238.68022 775.1
+241.82782 513.5
+249.18782 687.3
+255.30295 597.9
+286.23178 642.1
+289.02557 585.0
+296.50531 597.5
+348.59152 687.0
+349.71396 591.2
+391.70999 618.2
+417.16995 664.6
+427.56863 631.0
+432.18109 648.5
+482.67157 978.9
+512.94208 642.9
+515.99579 623.1
+517.12238 622.2
+532.41302 748.8
+532.45526 1696.0
+603.20831 688.4
+618.39490 545.5
+637.05878 676.7
+668.06476 650.0
+676.67133 1116.6
+736.60980 675.0
+746.44232 614.1
+824.37799 652.2
+1108.09253 713.9
+1140.16150 650.8
+1197.87927 1027.6
+1198.00940 2938.2
+1214.27808 654.8
+1359.84692 611.7
+1607.14539 680.2
+1729.17480 667.8
+1759.66357 668.1
+1870.20850 724.2
+1872.76758 888.3
+1877.52209 708.8
+1878.93018 710.6
+1879.08838 590.2
+1879.33911 2315.0
+1879.62646 19740.9
+1880.28320 955.7
+1881.70776 901.1
+1906.84045 1092.7
+1907.24866 7427.6
+1907.60193 990.6
+1930.66614 1005.0
+S	3481	3481	1880.01699127
+Z	3	5636.776
+Z	2	3758.186
+532.44269 1945.5
+549.18799 877.5
+621.75433 577.0
+630.44092 951.2
+671.21649 626.3
+673.13605 675.5
+676.65826 1188.9
+708.22211 705.7
+731.17102 915.8
+795.87994 1054.4
+810.11523 606.2
+875.95605 561.4
+974.51440 719.5
+1057.28687 1084.2
+1076.83057 663.9
+1133.46606 626.4
+1188.01367 726.8
+1197.98743 3056.5
+1870.22656 782.8
+1871.00867 649.4
+1879.31787 2222.1
+1879.58948 19803.3
+1880.11548 1268.3
+1907.12354 7289.0
+1930.78369 791.0
+S	3482	3482	1907.5708246
+Z	2	3813.294
+Z	3	5719.437
+522.61121 687.5
+532.48920 1750.8
+617.44604 647.8
+630.49445 766.6
+676.65735 1419.8
+731.21991 670.3
+732.22302 630.7
+795.89240 1024.1
+815.59076 698.2
+929.85358 576.0
+953.30402 793.3
+1012.45349 640.4
+1057.26770 824.2
+1069.85693 640.5
+1125.27942 652.9
+1134.65186 688.0
+1154.40405 622.6
+1198.09802 3097.5
+1525.64771 946.7
+1549.04248 819.6
+1573.43567 696.6
+1871.73743 638.0
+1876.15259 663.8
+1878.83240 1467.7
+1879.25488 1625.5
+1879.58838 19652.6
+1879.90796 1593.1
+1880.34668 1078.2
+1907.17712 7585.5
+1919.04114 739.8
+1930.89172 1309.9
+S	3483	3483	479.625407933
+Z	2	957.403
+Z	3	1435.601
+120.46835 690.3
+121.77602 2283.0
+126.47765 583.1
+130.03569 524.4
+133.12169 853.4
+138.98717 572.3
+141.85942 629.0
+148.91858 570.0
+156.20432 592.2
+165.75063 695.3
+168.68245 731.2
+188.25552 630.5
+188.26466 973.5
+188.27550 1338.6
+188.28647 1473.1
+188.29895 1201.4
+188.31375 750.1
+188.36064 680.1
+198.97098 774.0
+199.24362 604.3
+199.33061 788.8
+199.34052 1495.2
+199.36058 1057.7
+199.37024 1399.7
+199.38969 1088.8
+199.46938 673.4
+224.90454 584.9
+231.06909 533.8
+238.50285 568.0
+245.02502 554.7
+253.17041 553.5
+253.47644 651.7
+266.21143 777.7
+295.47757 602.8
+334.82458 654.7
+358.19989 1076.2
+365.36743 539.5
+368.96744 560.6
+394.17661 15964.5
+395.18024 3172.8
+427.53949 799.4
+436.19281 682.6
+456.97488 692.7
+459.23325 16292.7
+460.23550 5186.4
+461.22922 1510.4
+468.49396 544.1
+493.14200 581.9
+500.28369 547.6
+516.57452 711.6
+532.49084 2077.0
+549.15747 707.2
+638.82031 688.4
+676.68896 1108.5
+694.85956 601.9
+780.58490 584.9
+795.88031 1043.1
+859.55084 654.4
+1057.29761 873.1
+1100.60425 664.3
+1107.62219 588.8
+1140.31091 1090.0
+1198.09131 2979.6
+1319.26001 575.6
+1525.43250 1049.9
+1626.02673 648.7
+1669.36987 823.6
+1766.30347 597.4
+1795.50806 677.6
+1835.27747 841.6
+1860.04932 633.7
+1870.32373 871.3
+1878.26843 785.3
+1879.15698 2613.4
+1879.64014 18104.6
+1880.20166 1678.2
+1907.17578 7723.5
+1907.66040 857.2
+S	3485	3485	1880.00599127
+Z	2	3758.164
+Z	3	5636.743
+532.47998 1569.3
+630.46527 756.3
+676.66815 1024.8
+723.98334 590.0
+750.57556 588.2
+795.87146 899.8
+1103.30139 686.6
+1124.85840 815.0
+1136.99219 607.7
+1169.63501 674.7
+1198.07312 3654.9
+1220.95898 624.8
+1551.30359 593.7
+1857.55823 669.6
+1878.43835 1028.3
+1878.98767 1343.9
+1879.26709 1906.6
+1879.64148 17563.2
+1880.06750 2814.0
+1880.37305 2337.6
+1881.21387 678.6
+1882.04236 721.1
+1906.86877 928.1
+1907.14929 7377.5
+1930.73572 1117.9
+S	3486	3486	1907.58724127
+Z	3	5719.486
+Z	2	3813.327
+532.45953 1960.8
+676.68829 755.5
+738.75293 645.6
+795.88892 869.8
+816.42444 719.8
+860.78705 583.6
+906.07153 608.2
+1059.72998 611.9
+1198.02673 3336.2
+1218.41797 720.2
+1776.95898 777.3
+1878.38928 1178.3
+1879.15662 1712.6
+1879.66907 18539.0
+1880.21887 1606.5
+1882.02612 667.3
+1907.16443 7413.2
+1919.11743 892.1
+S	3487	3487	637.8048246
+Z	3	1910.139
+Z	2	1273.762
+165.75119 743.2
+175.17523 590.4
+181.55515 534.0
+188.26843 949.5
+188.28383 1266.1
+188.29413 1354.2
+188.30363 1082.7
+188.31497 684.3
+188.32036 611.0
+190.04886 811.8
+191.33559 579.2
+191.79639 712.2
+194.48097 535.4
+195.63809 660.3
+199.26282 785.7
+199.33853 1453.2
+199.35960 2313.5
+199.37901 1027.7
+199.39653 574.7
+199.45731 939.7
+215.14821 580.3
+221.61771 710.1
+233.57510 662.7
+241.26657 531.5
+271.52194 709.9
+287.26633 662.8
+292.59836 578.5
+326.47412 711.2
+330.95551 577.7
+332.51138 521.3
+340.95514 697.5
+344.14767 794.1
+366.85593 629.2
+372.87415 578.9
+379.02472 602.0
+460.02203 640.9
+480.72366 695.7
+482.71103 681.7
+498.89081 628.1
+515.37982 17997.2
+516.38373 3661.4
+532.43799 1991.7
+545.82855 609.8
+630.45166 712.8
+658.04706 592.0
+720.31146 569.9
+725.88074 1789.3
+748.14893 704.4
+783.30280 586.3
+795.89716 1154.7
+814.89453 604.5
+839.93512 2692.8
+840.43805 2839.8
+840.93481 1961.2
+841.44586 918.2
+849.32178 679.8
+938.76990 710.3
+976.99939 570.1
+1018.53772 720.6
+1099.96423 652.2
+1101.55737 807.3
+1188.25647 762.9
+1197.97534 3227.4
+1501.16113 610.5
+1525.51721 860.1
+1713.34375 978.8
+1793.89343 610.1
+1794.13025 565.9
+1876.10510 1068.4
+1878.02832 743.1
+1878.69897 1188.6
+1879.11865 1239.0
+1879.54285 19681.0
+1879.82922 2232.4
+1880.24146 1010.0
+1880.38782 1179.7
+1882.01062 666.0
+1907.13452 7537.7
+1930.68091 838.2
+S	3489	3489	1880.05140793
+Z	2	3758.255
+Z	3	5636.879
+532.46307 2392.8
+570.62000 622.3
+656.87158 647.2
+660.62750 604.9
+676.66180 854.8
+1057.28528 814.8
+1079.99780 540.7
+1080.08118 531.7
+1129.73633 595.6
+1198.02832 3203.2
+1258.41663 642.7
+1347.14026 596.2
+1411.78296 687.3
+1442.85083 591.5
+1525.37842 762.3
+1613.86047 742.4
+1748.72510 735.3
+1776.96362 791.5
+1791.39258 670.7
+1870.24390 904.8
+1876.05615 785.1
+1878.52893 1924.0
+1879.14465 2383.5
+1879.58679 19616.1
+1880.02588 1764.6
+1880.71472 1388.8
+1881.19336 714.3
+1907.23035 7286.9
+S	3490	3490	1907.56640793
+Z	3	5719.424
+Z	2	3813.285
+532.47559 2285.9
+549.15686 880.7
+652.28583 1017.1
+675.47351 535.6
+676.65845 855.9
+691.14380 623.6
+754.69153 611.7
+1026.89502 592.7
+1198.06409 3548.0
+1222.17407 758.6
+1409.21765 574.0
+1632.54089 698.5
+1860.02808 754.9
+1877.93787 1007.7
+1878.43201 1328.8
+1879.14917 1717.8
+1879.60364 17698.2
+1880.04504 3527.6
+1880.51392 790.9
+1881.21973 1082.9
+1907.19519 7434.5
+1930.60620 738.0
+1932.21667 839.3
+S	3491	3491	416.2608246
+Z	1	415.253
+102.67992 581.3
+103.10138 503.8
+106.45811 564.4
+106.88771 526.9
+106.96363 648.4
+112.10345 582.2
+114.22968 571.9
+114.87617 512.0
+116.90575 662.9
+117.79556 515.4
+120.96529 976.9
+121.77517 2166.9
+125.24577 687.6
+128.57788 898.3
+130.98601 542.5
+133.08546 1357.2
+146.92303 581.0
+155.27112 596.9
+158.13713 676.1
+160.00903 653.3
+165.74933 747.6
+177.11197 1367.0
+182.30212 616.4
+182.78485 695.7
+198.96956 990.9
+199.34656 1987.7
+199.35641 2040.5
+199.38647 729.7
+199.45282 864.3
+214.26167 594.7
+214.77242 639.3
+221.13950 820.1
+235.89220 618.7
+243.98532 616.7
+258.91223 571.8
+274.57861 593.2
+283.17395 741.4
+308.90637 606.2
+309.18869 702.0
+326.96271 601.8
+327.19992 3159.6
+340.63120 623.6
+342.27640 735.9
+344.15237 710.7
+349.39523 624.5
+350.28522 681.9
+371.22656 3565.5
+372.22723 637.9
+397.24283 862.4
+427.54602 1067.3
+437.83606 536.1
+451.64896 555.7
+476.77670 627.6
+512.39667 589.2
+532.50073 1838.2
+541.32074 532.3
+549.16504 986.7
+630.41669 711.5
+645.79651 818.3
+676.67114 724.7
+731.12634 702.8
+774.84784 721.9
+795.86658 971.5
+936.37335 661.6
+966.60913 548.9
+1025.73730 591.3
+1028.21753 654.5
+1057.31641 715.9
+1140.46826 629.3
+1198.12036 3195.1
+1414.85645 779.8
+1454.41589 677.2
+1525.42126 840.9
+1552.70081 670.1
+1648.51892 630.4
+S	3493	3493	1880.04240793
+Z	3	5636.852
+Z	2	3758.237
+514.27838 619.4
+532.46277 2357.7
+538.13831 638.5
+549.16003 869.2
+559.48145 531.2
+630.41760 785.3
+666.08679 788.3
+676.66602 850.6
+727.13593 669.2
+747.79993 654.6
+748.42126 612.9
+795.88831 854.5
+851.14020 666.2
+875.27344 577.9
+893.48737 737.6
+1019.57434 593.3
+1057.28845 891.4
+1101.36658 626.8
+1198.03638 3077.8
+1320.96069 611.3
+1435.89600 733.4
+1599.88733 649.8
+1756.94067 606.3
+1870.33923 620.5
+1878.31873 942.4
+1878.44470 995.9
+1878.84143 1776.8
+1879.15234 1172.8
+1879.60999 19779.8
+1880.08203 669.3
+1880.40674 1489.0
+1880.71362 733.3
+1883.36975 621.0
+1907.14258 7171.5
+1907.43274 866.7
+1930.61340 804.8
+S	3494	3494	1907.4898246
+Z	2	3813.132
+Z	3	5719.194
+517.02893 816.5
+532.48987 2053.9
+534.27441 643.7
+546.13519 668.0
+554.85638 587.8
+576.33588 574.3
+630.41357 598.8
+652.27576 1195.6
+676.66022 1317.7
+736.60486 621.8
+795.89020 741.5
+810.78241 570.5
+1019.67114 640.6
+1198.09937 3230.9
+1233.92212 612.0
+1247.82617 617.3
+1266.94922 607.1
+1648.67578 802.3
+1743.14270 703.7
+1870.34216 910.7
+1878.65759 841.1
+1879.58545 19409.6
+1880.46960 1119.3
+1907.12634 7360.2
+1930.60144 671.1
+1959.28955 809.3
+S	3495	3495	416.2608246
+Z	1	415.253
+101.75284 583.8
+109.72923 699.5
+113.61517 547.0
+114.58744 534.6
+114.75528 618.2
+117.41862 569.2
+121.77643 2212.5
+127.14597 491.3
+132.88522 509.7
+132.98161 543.6
+133.08524 1509.4
+133.12431 942.4
+134.66422 531.4
+136.38347 592.8
+142.64905 499.9
+147.58389 547.7
+149.94344 530.6
+165.78308 508.5
+170.32028 608.9
+177.11154 2018.1
+182.78363 491.7
+186.97925 558.9
+198.97191 657.5
+199.11272 626.9
+199.25673 893.7
+199.26849 658.0
+199.34355 1554.2
+199.35489 2931.3
+199.36728 1138.3
+199.45341 1144.8
+200.43394 535.6
+218.94276 931.9
+240.93452 550.3
+245.55066 766.2
+251.65868 570.1
+263.46194 575.5
+280.17606 762.0
+289.36121 661.0
+308.21497 542.8
+309.19028 777.4
+325.65451 1186.2
+327.20053 2903.8
+333.30585 597.0
+342.27298 537.6
+350.29205 589.0
+371.22583 2701.1
+373.03473 1056.9
+379.24951 594.0
+394.62332 711.0
+427.54193 737.9
+447.70151 697.7
+451.35840 677.0
+469.90503 633.8
+483.89105 584.0
+502.67477 531.1
+506.90280 659.0
+532.49377 1837.4
+532.53070 669.7
+549.15186 656.8
+553.22571 698.2
+558.67493 627.3
+610.75214 564.1
+676.65729 764.2
+765.32764 595.9
+768.13690 523.1
+781.32660 662.3
+795.88446 732.4
+806.32819 667.4
+843.48029 659.5
+972.04358 539.6
+1021.14484 716.1
+1024.20996 570.9
+1057.27295 708.6
+1188.09412 724.1
+1198.10486 3264.5
+1449.17834 586.5
+S	3497	3497	1880.00424127
+Z	2	3758.161
+Z	3	5636.737
+532.47217 1752.7
+549.17053 865.3
+550.07758 727.0
+630.42133 588.9
+676.67194 1112.4
+906.55615 833.9
+1012.27710 646.9
+1057.29980 769.8
+1198.05518 2680.5
+1414.44495 554.1
+1872.54932 712.6
+1875.53003 672.7
+1877.99207 931.2
+1878.68201 820.3
+1878.84497 1058.5
+1879.21362 1865.1
+1879.65393 17992.9
+1880.08606 1942.8
+1880.57703 1070.3
+1881.43518 806.7
+1907.18994 7291.4
+1918.99426 852.2
+1930.65588 1226.6
+S	3498	3498	1907.4675746
+Z	3	5719.128
+Z	2	3813.087
+525.88025 748.0
+532.49841 2158.1
+601.89044 608.7
+630.39325 599.4
+676.68201 1121.0
+795.86652 787.5
+1020.78607 682.1
+1047.99463 612.8
+1187.97253 873.6
+1198.10986 2941.8
+1260.48657 630.5
+1277.00464 620.1
+1333.85730 675.8
+1396.51257 581.1
+1465.58789 650.5
+1671.83362 710.1
+1819.11328 615.2
+1860.15735 774.5
+1878.06165 657.6
+1878.74072 760.4
+1879.27075 3437.4
+1879.65100 19133.9
+1879.99402 2953.9
+1881.63452 784.1
+1882.04028 851.9
+1906.82239 559.6
+1907.14404 7507.9
+1907.72095 757.6
+1930.55591 1228.0
+S	3499	3499	1198.53840793
+Z	2	2395.229
+Z	3	3592.34
+318.53326 559.2
+368.94629 692.8
+377.95859 684.3
+387.07401 613.8
+403.15164 660.7
+457.84711 616.6
+532.51093 2375.3
+540.05054 700.4
+640.01062 636.1
+676.65839 927.2
+750.96692 674.6
+889.00403 714.4
+913.80017 725.2
+941.72998 641.5
+1046.29578 652.4
+1046.37329 580.2
+1057.28418 822.3
+1083.36694 697.5
+1144.35889 686.4
+1198.13940 3678.4
+1289.40466 666.2
+1386.43030 825.4
+1401.70264 541.7
+1489.79724 747.7
+1525.48950 787.7
+1548.33057 680.0
+1628.45581 649.1
+1694.50745 781.4
+1875.28638 626.2
+1878.80225 792.0
+1878.90552 761.1
+1879.60364 19525.0
+1907.13928 6662.0
+S	3501	3501	1880.0135746
+Z	3	5636.766
+Z	2	3758.179
+532.50574 1568.8
+545.79095 639.5
+598.00226 656.9
+617.83765 592.8
+725.70654 681.2
+795.88446 902.0
+821.19305 641.9
+858.03009 664.0
+953.81763 666.8
+993.36902 740.8
+1188.81616 671.7
+1198.12744 3411.9
+1214.63477 629.9
+1425.54614 668.0
+1876.85388 837.5
+1877.62830 760.0
+1879.08643 1035.0
+1879.57886 20003.4
+1880.07971 776.9
+1880.74500 977.9
+1907.13623 7305.5
+1979.35889 644.9
+S	3502	3502	1907.59340793
+Z	3	5719.505
+Z	2	3813.339
+532.48511 2068.1
+548.20636 761.2
+553.14764 590.3
+573.08069 565.1
+622.06036 681.1
+630.41541 645.3
+676.66772 1108.0
+795.88251 947.7
+828.14191 773.4
+884.78082 553.5
+1143.83411 605.5
+1198.09058 2698.5
+1525.30261 1157.9
+1534.85303 642.5
+1776.90454 755.9
+1879.08789 2665.6
+1879.62842 19689.7
+1880.15161 2305.2
+1882.82385 622.9
+1906.79675 886.7
+1907.15356 7045.4
+1965.54504 653.2
+S	3503	3503	1198.55740793
+Z	3	3592.397
+Z	2	2395.267
+339.44775 546.6
+342.27344 785.5
+357.56693 679.6
+417.48499 591.9
+430.67627 641.9
+430.95987 646.7
+454.82843 652.7
+469.80350 631.9
+476.54449 667.6
+514.22815 607.7
+516.72418 700.3
+519.59985 707.4
+532.45300 1908.3
+654.35114 593.4
+661.68842 599.1
+728.46222 647.0
+753.00275 645.0
+754.50061 720.0
+896.64844 600.6
+986.71246 604.3
+1057.25623 906.5
+1153.49194 815.0
+1198.01123 3386.5
+1312.27527 701.6
+1448.88220 728.3
+1626.23340 660.4
+1776.95740 845.1
+1796.03650 727.2
+1870.09583 939.5
+1878.09192 706.9
+1878.73145 1404.6
+1879.55884 19397.3
+1879.84021 3047.5
+1880.36401 1736.1
+1880.94934 699.8
+1906.95557 2207.9
+1907.22424 7143.3
+1930.59717 976.5
+S	3505	3505	1880.1228246
+Z	2	3758.398
+Z	3	5637.093
+532.44055 2021.8
+532.89594 629.3
+549.20758 1067.6
+588.82245 739.2
+676.63782 915.4
+778.22217 604.2
+814.64526 612.4
+850.63422 644.4
+904.81708 614.7
+914.75134 722.5
+1057.25427 939.8
+1151.58789 562.3
+1188.10986 589.3
+1188.18689 657.0
+1197.98853 3147.1
+1206.55676 575.8
+1336.87000 808.5
+1355.83228 677.3
+1455.78784 619.4
+1471.53809 690.6
+1525.55347 759.0
+1667.47485 627.5
+1697.35229 689.8
+1770.17139 585.5
+1870.28186 676.6
+1879.54199 19273.7
+1879.75818 2912.0
+1880.11035 856.5
+1907.10986 7286.3
+1930.78638 816.4
+S	3506	3506	1907.56199127
+Z	2	3813.276
+Z	3	5719.411
+532.46094 1918.8
+549.21136 950.6
+569.16113 576.2
+625.59290 567.5
+657.55371 662.7
+676.65833 1547.3
+731.18921 824.0
+738.16168 626.6
+795.89246 994.6
+823.43311 586.1
+1057.28052 724.6
+1064.58533 642.7
+1198.03772 3419.0
+1222.16589 955.1
+1462.30298 774.1
+1489.73120 672.7
+1732.05811 738.3
+1870.22253 674.4
+1879.02112 998.4
+1879.59082 20412.9
+1879.90527 983.5
+1880.14514 1384.8
+1880.96423 642.1
+1907.12085 7037.7
+1907.40149 743.5
+1913.47327 605.2
+1932.26160 711.2
+S	3507	3507	419.5935746
+Z	2	837.339
+Z	3	1255.506
+112.10172 570.0
+121.77676 2275.6
+126.23031 593.6
+128.58655 886.6
+131.54390 543.5
+134.18854 553.6
+144.91119 569.6
+145.48164 508.2
+161.09531 1037.0
+165.81152 613.1
+176.79063 608.9
+177.15027 591.5
+180.89706 591.4
+191.10612 986.6
+191.83904 629.2
+198.97270 840.8
+199.07158 642.8
+199.26379 974.3
+199.34259 970.5
+199.35101 1547.7
+199.36174 2870.8
+199.37935 804.2
+199.44861 683.9
+199.45955 1026.8
+199.55762 608.4
+202.37483 571.3
+216.10146 1539.0
+227.08252 6458.2
+233.12790 963.2
+241.84662 542.3
+244.29312 499.7
+289.01105 487.4
+293.04977 520.9
+313.02411 1132.3
+318.15485 812.2
+323.15900 612.7
+327.15698 580.0
+342.30457 863.7
+348.26190 522.2
+352.31302 577.9
+357.83359 567.7
+383.19397 3639.5
+384.20044 640.2
+386.33453 589.3
+401.03439 869.8
+401.21994 1483.6
+427.58188 688.0
+446.18210 608.6
+490.29663 924.7
+532.47577 1859.4
+603.38000 1641.8
+630.46564 960.1
+635.36047 599.5
+642.47272 552.8
+656.50787 614.6
+676.63770 1003.7
+723.94507 529.4
+733.30060 616.6
+746.55585 550.4
+783.09937 551.9
+795.88446 1026.4
+818.78577 666.0
+956.75171 601.8
+1009.39471 656.0
+1019.62341 783.6
+1136.93762 546.6
+1198.05347 3856.2
+1268.23303 581.6
+1323.42712 577.9
+1344.39783 658.4
+1422.83435 623.8
+1479.19714 492.6
+1479.28564 532.2
+1525.54077 714.9
+S	3509	3509	1907.5708246
+Z	2	3813.294
+Z	3	5719.437
+532.45380 1960.3
+676.66309 1481.0
+780.20782 663.5
+795.87439 811.9
+936.99524 609.8
+1057.27844 1011.0
+1098.70801 717.9
+1198.01672 3284.5
+1460.46082 656.8
+1667.13538 527.0
+1667.26123 539.6
+1870.49426 835.6
+1876.95667 941.9
+1878.84045 790.0
+1879.28088 1936.2
+1879.60010 19737.7
+1880.33337 837.6
+1898.89526 679.9
+1907.02197 6869.9
+1930.60437 1227.2
+S	3510	3510	1198.47440793
+Z	3	3592.148
+Z	2	2395.101
+321.52969 661.3
+328.76804 593.3
+349.54639 598.3
+384.34457 699.5
+424.34671 576.4
+427.53690 749.5
+455.52615 613.5
+482.64673 950.8
+532.46423 1695.9
+551.68726 641.8
+570.54944 618.0
+612.55920 583.7
+629.97900 628.2
+630.40125 826.0
+676.68005 765.4
+795.89716 908.3
+804.03766 613.5
+946.22083 607.6
+1027.86121 628.7
+1029.78503 690.6
+1045.30908 631.7
+1047.58301 605.0
+1057.31055 1058.0
+1093.71863 758.6
+1134.65393 603.5
+1188.09265 907.7
+1193.68311 645.0
+1193.98511 576.0
+1198.04419 3399.5
+1198.81177 664.2
+1209.26611 733.1
+1256.58459 700.8
+1364.67627 648.0
+1878.16418 965.1
+1878.49841 994.4
+1878.76575 730.3
+1879.13330 1501.5
+1879.63342 18460.2
+1879.89661 2322.2
+1880.17200 1788.9
+1880.51855 1243.4
+1894.81799 661.3
+1907.06946 7428.7
+1926.12329 641.8
+1930.57935 993.3
+S	3511	3511	637.805241267
+Z	3	1910.14
+Z	2	1273.763
+188.25287 797.1
+188.26639 1174.2
+188.27390 1121.2
+188.28864 1352.3
+188.29930 1193.8
+188.33498 530.4
+190.05118 797.0
+198.97095 796.6
+199.26941 879.8
+199.27599 717.7
+199.34666 1168.3
+199.35535 1079.3
+199.36678 2410.3
+199.37625 1549.7
+199.38530 821.7
+199.39767 947.5
+199.43939 741.9
+199.46562 719.2
+201.12291 1432.1
+242.63872 687.8
+273.56494 668.6
+284.80762 598.3
+292.46552 583.6
+311.90152 686.8
+344.14493 2486.7
+368.92105 648.2
+369.22354 2484.7
+376.19897 583.4
+394.85553 664.8
+446.81604 596.6
+461.02145 679.8
+475.43280 520.4
+482.60886 553.7
+515.38019 33727.1
+516.38397 10358.3
+516.89349 726.7
+532.49689 2196.8
+544.26068 1615.7
+549.17651 1021.8
+605.30762 958.3
+605.85736 803.8
+624.32629 630.2
+628.62817 679.1
+641.31726 642.3
+676.66840 1014.9
+682.36719 4990.1
+682.86774 4281.0
+683.36896 1174.3
+689.43750 598.3
+725.88245 8859.5
+726.38379 7404.9
+726.88483 3861.1
+741.95435 753.7
+769.88617 1534.8
+770.38306 1528.2
+778.10480 654.8
+780.91266 736.3
+782.42169 2066.6
+782.92792 2533.2
+783.42261 811.2
+795.87573 841.1
+803.44171 1425.7
+831.93152 908.3
+839.93811 16574.0
+840.43976 17936.5
+840.93909 9301.4
+841.44208 3658.4
+841.95123 1065.2
+862.68457 651.8
+975.60248 652.5
+1057.40991 896.4
+1095.36511 585.7
+1198.11707 3086.6
+1347.06287 685.2
+1578.37036 668.2
+1775.32690 710.7
+1789.39465 582.2
+1869.75903 642.6
+1870.34692 801.8
+1878.76758 1198.8
+1879.34167 3233.9
+1879.60974 19255.4
+1882.05859 643.4
+1907.07861 7356.0
+1930.67981 1163.7
+1998.52405 626.9
+S	3513	3513	1879.96540793
+Z	3	5636.621
+Z	2	3758.083
+532.53992 1826.2
+546.15875 644.6
+549.15173 809.7
+565.33740 605.3
+580.18835 613.1
+584.33466 747.1
+675.05524 625.0
+676.66528 908.8
+731.13464 672.6
+795.86993 1095.8
+809.04181 596.1
+988.03314 657.8
+988.49017 783.6
+1026.44519 582.2
+1092.39648 594.4
+1170.89771 604.1
+1198.20215 3463.1
+1525.42139 953.0
+1647.24426 666.7
+1823.65515 819.7
+1878.86829 1671.3
+1879.17639 2100.9
+1879.61340 19363.9
+1880.07996 1643.4
+1880.36023 1054.9
+1881.11865 884.1
+1907.10608 7127.3
+1909.85425 674.3
+1930.63538 1020.8
+S	3514	3514	1907.46540793
+Z	2	3813.083
+Z	3	5719.121
+532.49640 2202.8
+556.91815 673.0
+567.29669 637.8
+630.41907 977.8
+642.93842 568.9
+676.59863 614.5
+708.74805 607.7
+714.96680 746.7
+731.13477 803.4
+760.75146 714.5
+787.37048 641.8
+858.07886 821.4
+959.10358 680.1
+959.88062 674.6
+1057.28516 827.4
+1198.10791 2821.6
+1437.99146 707.1
+1483.08862 680.8
+1527.28918 704.3
+1727.48535 688.2
+1876.16223 651.5
+1878.64502 1004.2
+1879.29236 3442.7
+1879.60547 19243.1
+1879.95886 3069.6
+1880.83569 725.1
+1881.07153 810.4
+1882.52771 1043.8
+1907.12268 7164.7
+1947.96265 603.8
+S	3515	3515	1198.54199127
+Z	3	3592.351
+Z	2	2395.236
+318.88855 717.5
+338.59140 672.6
+344.08475 703.7
+348.46277 582.2
+363.93259 555.6
+402.45895 542.1
+405.72110 721.9
+411.52362 576.9
+417.98059 562.1
+469.67899 826.9
+482.67880 657.4
+532.45544 2217.7
+541.16846 670.1
+630.44312 1020.8
+676.67859 866.3
+676.72748 635.8
+738.04785 686.6
+788.70929 667.7
+795.89362 1139.5
+803.99493 616.8
+885.15540 678.2
+1011.24371 715.5
+1030.37268 726.9
+1046.75977 728.1
+1067.55676 675.9
+1198.01917 3436.9
+1390.50342 559.7
+1712.23828 621.9
+1842.18909 645.7
+1876.30127 1106.0
+1879.64050 18345.5
+1880.25659 1260.0
+1881.74243 1015.8
+1882.80103 605.9
+1906.88245 1007.0
+1907.14441 7534.1
+1930.67651 942.5
+S	3517	3517	1880.0308246
+Z	3	5636.817
+Z	2	3758.214
+506.77905 600.6
+532.46979 1955.9
+630.44611 960.9
+676.67584 934.7
+782.90314 661.2
+795.89069 1518.1
+925.65558 662.5
+965.28125 573.7
+1017.42987 642.0
+1019.69562 776.0
+1031.21509 603.8
+1057.30164 880.2
+1186.36389 638.4
+1187.91113 790.3
+1198.04858 3174.4
+1564.20068 749.9
+1776.92639 772.5
+1879.12671 800.0
+1879.62219 20108.3
+1880.45422 943.9
+1907.23291 7152.0
+1930.71448 1165.8
+S	3518	3518	1907.60340793
+Z	2	3813.359
+Z	3	5719.535
+532.49506 1677.2
+549.15063 728.9
+564.12030 651.4
+582.51392 583.9
+587.75049 638.3
+663.87207 572.2
+676.72571 752.7
+690.87323 646.5
+795.89001 1033.3
+856.20557 599.8
+970.25995 645.3
+1020.81549 630.0
+1118.59314 602.2
+1172.40552 695.8
+1198.10120 3076.9
+1387.65039 659.2
+1467.05054 667.6
+1593.79602 658.2
+1630.21338 659.3
+1675.93872 564.5
+1870.22266 690.1
+1877.90515 720.8
+1879.14734 1270.4
+1879.62585 19304.5
+1880.16370 985.1
+1907.16724 7311.6
+1907.43665 1244.5
+1930.60486 869.5
+S	3519	3519	1233.24424127
+Z	3	3696.457
+Z	2	2464.641
+334.64630 16797.3
+350.30811 14393.3
+352.60065 11057.5
+373.55542 11916.5
+427.54767 14889.4
+430.99219 11636.3
+437.10852 12827.2
+450.56357 17680.3
+452.06070 13845.0
+466.83493 13465.6
+482.65182 12576.6
+532.49353 36724.7
+549.16077 13288.8
+561.37128 13920.0
+580.47076 12207.5
+615.40234 48025.8
+616.40393 32102.6
+621.65161 13899.1
+648.91229 12040.0
+662.49152 12925.1
+676.68848 18677.1
+729.75604 12616.3
+759.77942 13184.0
+858.90759 13643.0
+881.43182 27998.5
+976.10431 11764.8
+994.06512 15113.1
+1026.85327 174145.9
+1027.18811 363364.8
+1027.52185 383911.4
+1027.85608 312650.6
+1028.19116 168492.0
+1028.52344 55045.5
+1028.85193 24535.2
+1198.11035 61429.6
+1200.78528 13618.4
+1317.69812 63476.0
+1318.70227 68437.4
+1319.69788 27894.4
+1320.71643 20739.4
+1350.26013 12238.6
+1514.97009 13906.5
+1539.77686 1123507.9
+1540.27783 2230920.3
+1540.77856 2293179.3
+1541.07117 13522.9
+1541.28015 1462789.8
+1541.78149 746789.3
+1542.28186 287350.7
+1542.78857 120380.3
+1543.30798 27345.3
+1870.44543 18391.8
+1873.01367 15972.3
+1876.20801 16746.7
+1877.88782 19370.1
+1879.25391 58859.7
+1879.67542 399915.9
+1879.96021 45942.2
+1880.47241 26901.3
+1907.19653 157549.8
+1918.97351 15439.0
+S	3521	3521	1880.06599127
+Z	3	5636.923
+Z	2	3758.284
+532.41547 2054.9
+567.04364 537.7
+616.48334 637.9
+676.64960 1026.7
+809.96564 785.2
+1108.80847 588.9
+1109.05151 702.4
+1197.92932 3140.3
+1373.46497 729.6
+1538.88196 663.6
+1621.10938 722.6
+1667.31274 819.5
+1672.06384 701.6
+1869.47095 828.8
+1878.92480 1476.8
+1879.56116 19831.9
+1879.81567 1709.3
+1880.14319 1234.7
+1906.83337 877.3
+1907.21680 7368.9
+1911.27454 739.5
+1950.82251 613.1
+S	3522	3522	1907.57699127
+Z	3	5719.456
+Z	2	3813.306
+532.39844 1641.0
+535.60278 733.8
+676.66931 1276.8
+688.40906 659.4
+730.36682 691.6
+731.10742 740.5
+795.88391 1033.5
+877.52771 596.8
+884.84290 712.4
+948.79535 592.5
+950.80719 669.2
+1197.88550 3390.4
+1289.59241 711.8
+1396.76343 645.5
+1574.96863 564.4
+1667.07556 763.3
+1878.33997 1229.1
+1878.68518 866.9
+1879.13599 953.3
+1879.60522 19637.8
+1880.08020 1345.4
+1880.47595 1048.4
+1880.82397 754.7
+1881.19812 655.9
+1907.17810 7617.0
+1930.54712 921.0
+1979.56934 664.4
+S	3523	3523	503.725407933
+Z	2	1005.603
+Z	3	1507.901
+145.74100 586.0
+157.60829 551.4
+169.49873 656.0
+171.65100 666.1
+177.11209 872.0
+186.11522 529.8
+188.26015 930.3
+188.27820 1133.4
+188.28928 1187.2
+188.30081 1298.7
+188.31688 748.8
+189.29739 595.5
+192.07443 556.6
+197.70250 630.4
+198.97272 789.1
+199.27773 738.1
+199.31764 1047.2
+199.34024 1336.2
+199.35889 1709.6
+199.36996 897.1
+199.37856 1807.0
+199.39066 715.9
+199.45595 664.3
+199.47447 698.6
+200.21988 741.9
+207.76500 599.5
+212.89401 606.6
+224.42685 690.6
+224.76483 835.2
+225.83574 583.2
+236.03317 694.6
+241.34644 558.7
+250.82832 617.4
+271.35565 713.0
+271.49954 705.0
+271.81036 654.1
+280.19336 787.3
+281.05042 3832.4
+304.35638 647.5
+309.19058 594.5
+329.14413 538.8
+378.42422 499.5
+397.24304 1040.6
+415.25278 2260.0
+434.35889 625.1
+459.27838 3878.6
+485.29764 613.7
+498.54660 665.6
+521.16895 605.6
+532.44415 1780.3
+591.35895 1102.2
+630.43964 629.6
+676.64630 902.4
+706.15686 645.1
+795.88281 774.4
+838.96625 755.6
+964.21063 600.2
+1012.38477 560.8
+1039.85681 600.4
+1057.23401 851.3
+1107.30090 560.8
+1197.98987 3484.7
+1295.17065 620.0
+1320.25854 616.6
+1415.26526 665.6
+1448.21997 630.2
+1525.47021 921.5
+1589.48914 657.0
+1869.54333 649.4
+1879.00940 1295.8
+1879.18323 2564.9
+1879.54199 19825.3
+1879.90918 2197.7
+1907.21655 6898.0
+1930.66833 722.3
+S	3525	3525	1232.2420426
+Z	5	6156.17109
+351.95007 766.3
+415.04181 658.4
+427.53763 622.5
+468.33282 688.3
+532.43073 1817.1
+541.00500 637.7
+550.74847 750.5
+555.55017 739.3
+600.86908 585.2
+603.77948 695.5
+630.40472 856.9
+690.88055 777.9
+795.89886 921.4
+849.18524 579.4
+901.83960 563.1
+989.88983 785.2
+1026.75977 1400.7
+1027.12170 1516.4
+1027.39551 1375.7
+1027.76172 1157.4
+1028.08618 905.1
+1176.98401 677.6
+1197.96899 2757.5
+1206.20740 594.6
+1206.32361 592.8
+1495.39258 667.9
+1525.38147 744.9
+1876.15979 820.7
+1877.41699 819.3
+1878.14807 682.5
+1878.84180 983.0
+1879.60791 18948.6
+1880.07886 901.9
+1880.39563 758.0
+1881.68042 954.2
+1889.54016 730.8
+1889.71130 669.6
+1907.14746 6910.0
+1907.44470 1910.2
+1919.02844 815.9
+1930.57007 795.9
+S	3526	3526	1233.4434246
+Z	5	6162.178
+342.29611 26281.2
+350.32419 19130.7
+374.05258 18978.9
+381.38376 21115.1
+391.10077 21473.7
+392.83267 20040.6
+410.75134 21206.2
+418.89420 20048.6
+532.41058 57424.1
+569.25555 23158.6
+571.38287 19440.0
+655.61365 19011.0
+676.66058 35101.7
+726.95227 19348.5
+731.17163 23733.4
+795.88196 35441.1
+805.04962 18040.5
+806.12036 16531.2
+835.25159 18462.8
+845.74084 19635.8
+902.35919 20804.4
+953.24664 19313.8
+982.49548 18373.3
+996.39624 17847.5
+1002.42999 21137.8
+1026.74548 24974.9
+1026.83630 23449.1
+1027.06543 55966.2
+1027.19238 43243.8
+1027.41931 77130.0
+1027.73120 32104.8
+1027.85181 33017.3
+1118.52478 22674.3
+1197.91211 106136.5
+1438.06592 20924.4
+1539.78162 297747.3
+1540.27966 564090.9
+1540.78308 402407.9
+1541.09082 30189.9
+1541.28137 220827.6
+1541.78003 94495.6
+1542.33313 25057.9
+1560.47168 20908.1
+1644.97217 17912.4
+1647.78625 21463.3
+1659.63635 19740.0
+1777.25500 21344.3
+1876.39844 18793.6
+1877.48376 23841.2
+1878.65173 48266.0
+1878.98975 57213.2
+1879.59473 614504.3
+1880.19739 53073.6
+1880.51855 24825.1
+1881.63123 32535.3
+1907.26758 233033.6
+S	3527	3527	1540.8000746
+Z	4	6159.169
+417.11307 704.7
+457.46768 650.0
+527.48199 577.4
+532.43439 1999.5
+544.28668 3515.7
+544.53827 3884.9
+544.78729 1893.0
+545.03943 971.6
+548.35461 3609.9
+549.16705 857.8
+630.41895 1074.2
+671.08435 587.5
+676.65399 1287.6
+734.41534 1206.5
+745.78583 677.3
+780.91156 669.3
+795.90387 1073.1
+835.57404 661.5
+847.50287 797.5
+884.42322 1994.5
+885.41528 1859.3
+898.99292 664.9
+902.43500 23984.4
+903.43854 9280.1
+904.44135 2140.4
+908.48993 590.6
+916.91919 605.2
+950.62683 656.0
+952.77704 635.5
+1018.46777 603.0
+1026.75793 1194.8
+1027.09949 827.2
+1090.56201 746.6
+1107.71338 751.4
+1159.80676 613.1
+1188.36890 710.3
+1197.96851 3334.6
+1247.59216 905.5
+1248.60498 964.7
+1317.69568 9880.7
+1318.69714 6183.9
+1319.69897 2344.6
+1360.69043 1500.8
+1361.69080 1473.6
+1370.67212 678.1
+1388.73743 4322.3
+1389.73975 2329.8
+1473.76831 4644.0
+1474.76782 3882.8
+1475.76172 1073.4
+1476.67456 919.4
+1486.33887 659.9
+1525.47241 939.2
+1540.62463 815.7
+1541.18616 685.3
+1605.78479 10773.7
+1606.78821 8006.1
+1607.78992 3283.1
+1608.79089 838.7
+1629.80078 677.0
+1691.81506 769.3
+1718.87244 4409.3
+1719.88013 3561.4
+1720.86877 1676.6
+1761.84766 2491.7
+1762.84351 1605.3
+1831.94373 3164.2
+1832.95703 2974.1
+1833.96106 2250.0
+1878.82556 563.3
+1879.05786 839.8
+1879.58887 20133.0
+1880.13489 1131.8
+1907.12671 7206.1
+1919.04834 800.0
+1924.64697 666.9
+1979.02148 1851.5
+1980.00562 1884.8
+1981.02710 711.6
+S	3529	3529	1880.04840793
+Z	2	3758.249
+Z	3	5636.87
+532.42804 1895.3
+561.22247 742.8
+676.68237 1343.1
+687.71228 628.2
+724.46478 686.9
+731.12555 614.2
+733.66748 650.4
+795.88159 790.2
+820.41223 650.3
+858.47107 615.8
+883.41937 721.3
+1012.06189 674.0
+1027.08667 839.3
+1110.89063 847.7
+1192.46021 555.8
+1197.96106 3449.4
+1222.47156 679.5
+1340.77136 634.4
+1525.40344 763.3
+1533.97205 598.7
+1562.70349 622.5
+1730.73816 585.9
+1787.74280 588.3
+1874.32605 776.4
+1878.75085 1257.5
+1879.16711 3274.4
+1879.64429 18837.0
+1880.15198 2347.7
+1880.53979 1094.1
+1880.98096 934.6
+1881.14880 947.1
+1901.16077 676.0
+1907.07214 7343.3
+1930.60315 718.6
+S	3530	3530	504.3128246
+Z	1	503.305
+133.11693 1969.2
+133.20763 1089.6
+134.33325 916.2
+165.75148 1383.3
+177.11240 1264.2
+186.67267 955.1
+188.18321 954.1
+188.21901 1056.0
+188.25963 2445.8
+188.26897 2824.9
+188.29408 4137.8
+188.32442 1872.3
+194.84058 1154.0
+196.80539 920.5
+198.95839 1363.7
+198.97458 1736.0
+199.27254 1103.5
+199.33458 1763.2
+199.34473 2855.5
+199.35883 3337.1
+199.37030 2636.8
+199.45663 1246.4
+199.46913 1322.2
+199.51068 891.1
+212.34399 1132.4
+220.36728 1269.8
+221.13777 1158.6
+235.01408 966.1
+279.15552 1274.7
+280.27454 1279.3
+281.05051 4172.8
+283.86026 1090.8
+299.06046 982.5
+306.52234 1069.9
+325.19226 2799.5
+341.19409 1393.7
+342.28339 1268.6
+342.38251 1205.5
+350.29681 1596.6
+353.56250 1018.0
+371.22778 1549.3
+402.10504 1023.0
+415.25296 2972.9
+427.56042 1396.2
+459.27872 6709.9
+464.87677 1017.9
+482.31281 1037.3
+485.29440 1249.4
+485.98843 1000.5
+532.45697 3643.3
+547.33093 3026.3
+549.17657 1590.1
+583.17157 1046.8
+591.35767 4750.3
+592.35815 1632.9
+630.42511 1634.5
+635.38293 5761.8
+636.38861 2164.0
+640.57086 1041.7
+676.65619 1597.9
+679.41010 2895.1
+723.43909 2097.3
+724.44598 1350.5
+731.14081 1067.7
+744.49463 1050.2
+765.07269 941.7
+767.46362 2218.6
+795.88947 1329.4
+811.49115 2892.4
+861.24744 988.4
+1057.27295 1696.4
+1079.41162 1317.5
+1087.75830 1168.6
+1198.02722 4606.2
+1349.20020 921.0
+1392.39575 1024.0
+1534.64392 1114.9
+1539.60583 1926.4
+1651.18933 1104.4
+1712.62927 1034.0
+1876.25769 1440.0
+1877.48572 974.3
+1878.89160 2967.4
+1879.58618 33150.8
+1879.94971 1641.9
+1880.27124 2009.5
+1881.11707 1225.9
+1881.99609 1492.4
+1906.61292 1409.1
+1907.14160 13288.9
+1920.71143 941.6
+1930.68420 2391.7
+S	3531	3531	733.816407933
+Z	2	1465.785
+Z	3	2198.174
+199.25642 562.6
+199.32912 725.9
+199.33609 561.5
+199.35637 2356.0
+199.36601 1708.3
+199.37585 983.9
+199.45496 748.3
+206.67464 614.1
+208.57030 644.4
+214.49918 523.3
+229.89017 590.6
+255.30495 823.0
+277.98117 603.5
+280.19547 652.1
+301.15176 666.9
+308.91907 818.2
+328.76172 597.0
+346.37778 743.3
+403.21310 697.4
+419.22488 1569.9
+486.98212 711.1
+490.67770 608.1
+502.69089 759.2
+507.27661 2693.3
+523.27130 1337.3
+532.44025 1593.7
+536.23779 1797.7
+548.35431 1339.6
+567.29773 955.7
+586.31152 674.5
+589.26105 712.6
+595.32715 3497.6
+599.61206 607.0
+606.16241 724.2
+611.32257 2170.0
+619.29224 864.5
+630.44214 901.5
+635.30615 1593.0
+636.35675 711.4
+639.35193 1888.0
+676.67682 1262.2
+714.42261 15219.9
+715.42767 1674.3
+723.81854 800.7
+764.10010 632.0
+771.73785 645.2
+795.88531 949.8
+930.46167 1157.8
+1027.73254 859.6
+1134.04187 640.5
+1188.09424 696.1
+1197.98572 3417.2
+1255.69556 691.2
+1484.22119 653.3
+1489.65137 950.1
+1555.76990 762.5
+1744.37939 665.2
+1807.56274 794.2
+1874.75232 621.2
+1876.30029 854.4
+1878.81030 931.5
+1879.27893 2388.2
+1879.63757 19550.6
+1879.96680 2124.2
+1880.44897 1451.0
+1881.24597 702.8
+1907.06616 7051.2
+1930.71936 809.2
+S	3533	3533	728.872241267
+Z	3	2183.341
+Z	2	1455.897
+198.97168 1152.8
+199.25732 1055.3
+199.31490 662.7
+199.32729 1010.8
+199.35403 2057.0
+199.36015 2093.9
+199.37111 1119.4
+199.38593 660.1
+199.40343 616.4
+199.45337 962.4
+209.11711 2600.3
+220.49329 727.5
+221.13818 2643.5
+223.15305 839.1
+235.13254 2241.1
+252.44679 652.4
+255.15872 1005.8
+265.16394 3025.4
+267.17841 987.5
+278.94598 657.9
+279.15912 1515.3
+280.20306 725.8
+297.16971 698.4
+299.18503 3528.6
+299.48260 982.2
+309.19028 5510.9
+321.17795 924.4
+323.18448 891.6
+332.37024 625.4
+341.19437 1135.0
+342.29565 670.1
+343.21033 2622.9
+349.25400 818.8
+353.21652 7159.0
+354.22037 833.9
+359.20523 997.2
+363.25244 596.9
+382.84717 720.7
+385.22250 3732.7
+387.23737 2057.3
+397.24268 6569.0
+398.24637 1151.7
+403.23163 2561.3
+411.37057 631.2
+429.24765 5435.9
+430.24673 1040.8
+431.26614 1050.2
+441.26776 5484.6
+447.25775 3412.4
+459.28000 825.6
+463.46310 697.1
+473.27319 5848.7
+482.65323 853.9
+485.29507 4698.6
+491.28452 3942.2
+492.28448 833.4
+517.29865 5951.3
+518.30078 1483.4
+529.32263 3019.7
+530.45764 624.8
+532.41266 1896.1
+535.31097 3617.9
+561.32605 4270.2
+562.32965 1366.2
+571.19934 799.9
+573.34619 2137.1
+579.33588 4679.1
+580.33844 1308.9
+605.35052 5270.0
+606.35510 1562.6
+623.36200 12525.0
+624.36450 3292.9
+630.45209 734.2
+667.38861 13270.3
+668.39166 3855.4
+670.23242 688.5
+676.64624 1293.2
+693.40460 5550.8
+694.40668 1092.7
+710.42737 921.9
+711.41455 167743.8
+712.41901 10791.5
+713.43365 1345.2
+751.41077 629.5
+766.14600 624.6
+795.87964 1115.3
+1019.68188 730.5
+1019.79370 587.7
+1026.75952 838.6
+1027.07336 1999.2
+1027.44824 1280.1
+1027.73877 978.9
+1057.25403 797.5
+1195.44360 748.9
+1197.64160 688.2
+1197.91406 3043.2
+1208.76819 696.4
+1222.26685 755.2
+1285.70093 725.3
+1306.11084 739.1
+1332.56348 684.6
+1338.52808 825.7
+1348.89209 803.3
+1417.85205 668.5
+1435.70325 758.1
+1471.68799 691.8
+1525.52759 1022.0
+1540.13916 1403.2
+1542.15857 766.9
+1860.07104 854.9
+1878.07117 1550.0
+1878.52258 1343.4
+1879.03772 1330.6
+1879.58447 20335.6
+1880.15552 1459.2
+1881.15210 1506.4
+1882.10400 840.2
+1894.14880 941.2
+1907.13806 8069.4
+1930.72278 903.2
+S	3534	3534	1232.8462246
+Z	5	6159.192
+348.99973 596.6
+356.99622 556.6
+375.63803 640.8
+427.55292 770.7
+489.04749 599.1
+532.44617 2216.9
+572.55249 621.6
+582.27063 539.0
+676.67194 1358.7
+755.32092 574.1
+795.88757 954.6
+838.19391 658.8
+848.08923 804.9
+891.54419 605.6
+939.85077 709.0
+961.74969 610.3
+1027.09424 1344.0
+1028.11572 813.0
+1052.16370 682.8
+1132.06189 724.8
+1197.99084 3336.7
+1214.53955 649.8
+1232.82605 731.0
+1360.98730 707.5
+1362.84216 616.3
+1373.29651 715.7
+1424.03064 641.4
+1525.45557 803.6
+1539.77539 7878.8
+1540.27747 22499.8
+1540.78027 26736.9
+1541.28101 20758.3
+1541.78113 4633.7
+1542.27771 841.3
+1630.24341 771.7
+1667.31079 825.5
+1855.28638 652.4
+1856.42859 656.8
+1878.06873 846.6
+1878.96741 1406.8
+1879.29199 3485.3
+1879.60754 19044.6
+1879.95776 2455.4
+1880.19263 1310.6
+1880.45288 1308.4
+1882.01624 867.7
+1907.12671 7047.3
+1930.65381 1114.7
+S	3535	3535	711.845407933
+Z	3	2132.261
+Z	2	1421.843
+188.26294 573.2
+188.27164 820.7
+188.28204 1253.3
+188.29237 1362.6
+188.30035 978.6
+188.32285 820.7
+196.15045 603.0
+198.97583 646.6
+199.32196 842.1
+199.32480 846.4
+199.34468 966.3
+199.36028 1890.3
+199.37839 1561.4
+199.39491 999.2
+199.45218 732.9
+209.52246 649.2
+214.51712 656.3
+215.01724 563.0
+235.13303 1210.7
+239.95355 668.1
+265.38596 749.3
+267.30252 560.5
+275.43365 617.8
+278.28018 606.8
+290.45941 628.8
+299.18439 1149.7
+299.50729 818.9
+308.90332 714.6
+309.19034 861.2
+342.27466 927.9
+350.29987 682.6
+353.21655 1963.3
+381.36572 605.4
+387.23715 941.8
+397.24191 1931.6
+403.23029 1037.6
+428.80545 587.5
+429.24719 1628.0
+441.26697 1726.5
+447.25851 1033.6
+473.27371 1634.0
+482.66284 759.7
+485.29108 886.1
+489.56931 572.8
+491.28470 1201.2
+517.30054 2253.3
+521.76483 613.0
+532.45715 1670.7
+535.30835 1487.3
+548.62744 600.6
+561.32672 1659.7
+563.28076 744.1
+575.28308 581.8
+579.33820 2335.5
+605.35217 1496.0
+623.36304 4301.6
+624.36426 689.3
+641.36957 659.7
+642.75757 1188.4
+643.26453 907.5
+648.53314 609.0
+667.38824 6633.6
+668.39075 2049.4
+676.65436 1129.5
+693.39844 1795.8
+727.33405 628.9
+754.78821 626.0
+776.33734 771.0
+795.90021 1278.5
+823.64600 797.8
+1014.11658 717.7
+1019.64276 678.0
+1144.24292 596.3
+1176.42932 761.4
+1187.92700 997.3
+1198.01331 2783.7
+1587.53601 676.1
+1594.99121 778.0
+1653.51624 745.2
+1694.95923 658.7
+1740.08167 607.6
+1877.32166 790.0
+1878.03308 834.7
+1878.45874 1306.6
+1878.72351 1227.1
+1879.25586 2495.7
+1879.58386 19112.4
+1879.99731 2539.6
+1880.48206 1241.7
+1881.80286 978.3
+1907.14893 7732.0
+1930.59180 1114.1
+S	3537	3537	1232.8353046
+Z	5	6159.1374
+345.51376 560.3
+351.16724 556.0
+397.79974 558.7
+427.54373 1356.4
+473.09567 598.6
+473.11292 510.7
+482.30444 635.0
+532.45386 1667.5
+549.15179 884.3
+581.10242 895.3
+586.99774 572.7
+630.39764 1202.1
+676.43695 566.5
+676.66248 1054.0
+731.12256 682.1
+976.79669 662.9
+1027.10632 1051.5
+1027.74268 1378.2
+1131.23694 689.3
+1184.82898 691.8
+1198.01172 3199.3
+1293.91711 529.7
+1539.78198 2658.5
+1540.27783 6492.9
+1540.77954 7184.3
+1541.28308 5450.4
+1541.79407 1282.5
+1558.30139 711.2
+1776.96667 731.5
+1878.18884 1260.8
+1878.94299 1309.3
+1879.18018 1882.3
+1879.26440 1806.8
+1879.59741 20220.2
+1880.02832 1500.4
+1880.24854 1537.6
+1880.58752 1244.8
+1880.99243 594.5
+1884.64563 632.9
+1907.14990 7436.2
+1930.59631 956.2
+S	3538	3538	1233.4392246
+Z	5	6162.157
+347.68320 547.5
+348.60162 691.4
+350.29593 746.1
+352.49268 563.7
+373.04779 723.5
+377.47592 743.8
+383.44064 670.4
+394.30984 3536.7
+395.31415 1119.7
+412.32181 2299.2
+413.32608 1078.2
+423.32693 663.4
+430.33231 1560.5
+431.33286 918.3
+448.34171 1543.2
+497.03101 671.9
+515.06055 689.5
+519.26013 622.4
+525.74109 621.4
+532.46796 2115.8
+543.29175 1094.9
+545.40656 647.2
+548.35822 1154.4
+549.18079 720.6
+551.74768 609.5
+561.37189 2914.0
+562.12329 663.0
+562.38013 820.6
+579.38159 2783.2
+580.38580 841.4
+597.39221 4892.2
+598.39594 1591.4
+615.40265 40502.4
+616.40594 14995.0
+617.40668 3413.8
+630.42822 612.1
+659.35211 2963.4
+659.85388 2540.6
+660.35779 1016.2
+663.38129 1388.1
+664.38794 641.3
+672.83173 657.2
+676.25604 661.6
+681.85693 589.2
+691.83881 598.2
+694.87122 672.0
+734.41901 1843.5
+737.89362 1094.1
+795.87933 1217.2
+803.39587 991.9
+818.40698 927.4
+831.37762 1450.5
+845.91187 775.2
+847.50085 3395.3
+848.50195 1490.0
+860.45508 999.3
+872.92157 1058.1
+873.43799 667.5
+878.13824 690.5
+881.43372 2390.3
+881.93469 3705.5
+882.43494 2056.0
+882.93793 1166.5
+890.47626 669.2
+902.43597 2023.8
+903.44177 1476.3
+931.49146 1130.6
+944.44592 673.5
+1020.79657 686.8
+1021.52081 1151.7
+1026.85498 30615.9
+1027.18945 54781.8
+1027.39575 1097.1
+1027.52283 60397.3
+1027.85742 38337.1
+1028.01086 775.7
+1028.19031 23676.0
+1028.52356 11718.3
+1028.85925 4857.3
+1029.18860 1172.0
+1060.60925 1017.7
+1089.56824 1575.0
+1090.07043 1590.9
+1117.03992 1664.9
+1144.89600 813.7
+1165.08386 765.5
+1173.56836 786.6
+1174.07642 791.5
+1174.56885 1001.4
+1198.04419 3307.7
+1266.61230 713.7
+1267.10339 929.4
+1269.14807 1268.3
+1269.65430 984.1
+1317.69690 11925.0
+1318.69995 10027.9
+1319.70544 4341.6
+1320.70142 1360.0
+1322.64832 1434.9
+1323.15369 1593.4
+1323.64600 2173.1
+1324.17053 973.8
+1341.05334 633.2
+1360.69543 941.0
+1361.70593 784.3
+1379.19067 1889.4
+1379.68640 2886.8
+1380.18152 2154.2
+1380.68604 1809.8
+1388.75098 1491.5
+1389.72339 1323.6
+1452.72510 1806.8
+1453.22522 2662.0
+1453.72412 2301.0
+1454.23120 1739.5
+1454.72644 806.6
+1455.23083 678.4
+1473.77405 1615.5
+1474.76599 1692.7
+1514.81653 859.4
+1525.47852 974.8
+1530.78845 763.5
+1533.39587 889.8
+1533.88965 1618.1
+1534.38464 1355.6
+1534.61682 813.8
+1534.87537 1608.5
+1535.05078 1295.1
+1535.59375 889.1
+1536.60449 1373.6
+1537.10767 1617.1
+1537.60767 1484.3
+1538.13770 961.5
+1538.70300 1229.9
+1539.08875 1102.9
+1539.18982 985.5
+1539.77893 180202.6
+1540.27991 329552.8
+1540.77954 314736.7
+1541.27991 210581.7
+1541.78076 118081.0
+1542.28333 53725.7
+1542.78577 19937.0
+1543.29211 6449.3
+1543.94543 2183.1
+1544.47705 1309.0
+1544.96997 955.3
+1545.51563 1124.9
+1546.00708 1083.6
+1546.50708 746.8
+1546.70447 2101.4
+1546.94922 937.4
+1547.21021 2017.0
+1547.49316 569.9
+1567.99658 865.7
+1605.78564 3011.8
+1606.79077 2964.4
+1607.79395 1581.8
+1608.82251 656.4
+1761.86243 1603.8
+1762.86060 2390.6
+1763.86865 1677.5
+1878.91370 1912.9
+1879.41638 7331.8
+1879.66101 16919.3
+1879.88672 6643.2
+1880.34045 2958.4
+1880.73865 1259.0
+1886.95740 705.0
+1907.13428 7186.9
+1930.67468 1098.6
+1954.07129 711.0
+S	3539	3539	1232.41199127
+Z	2	2462.976
+Z	3	3693.961
+325.82037 714.7
+342.25824 579.8
+388.49689 606.7
+401.94794 566.5
+434.19196 611.6
+479.46979 516.7
+482.60159 734.0
+505.67813 600.8
+532.49640 1996.7
+597.70398 584.3
+666.57129 582.4
+676.64331 1041.4
+681.10498 544.1
+775.92975 758.9
+780.74786 669.4
+795.88245 926.9
+917.43097 578.0
+1021.93201 825.3
+1057.25098 776.0
+1079.49280 750.0
+1198.11340 3474.6
+1200.91528 680.4
+1253.11401 588.8
+1266.44543 649.4
+1539.78137 2592.2
+1540.27673 7968.6
+1540.77637 6353.1
+1541.27820 3156.5
+1658.50073 736.2
+1776.95081 719.3
+1822.90405 652.4
+1856.71790 727.3
+1870.36194 849.5
+1878.13770 787.7
+1879.55139 19921.6
+1879.82739 1665.3
+1879.94226 1476.5
+1907.20813 7237.9
+1930.59729 1159.0
+S	3541	3541	1880.03140793
+Z	2	3758.215
+Z	3	5636.819
+528.44696 648.8
+532.49225 1727.4
+676.62372 664.9
+795.89117 886.8
+830.27881 610.2
+881.28436 674.5
+965.38068 643.4
+1019.70245 746.2
+1040.25488 621.4
+1057.32715 1026.0
+1159.38721 599.9
+1188.29968 924.1
+1198.09497 3180.0
+1343.54065 607.7
+1593.47632 720.2
+1771.19885 601.7
+1878.93884 913.6
+1879.36292 2747.2
+1879.65527 19816.1
+1880.33728 903.5
+1880.97192 762.2
+1881.32678 673.3
+1907.17078 7581.5
+1930.48572 955.0
+S	3542	3542	1232.75440793
+Z	3	3694.988
+Z	2	2463.661
+345.00858 602.6
+350.29312 942.1
+381.35291 792.5
+387.46350 644.0
+407.73547 557.2
+446.26614 670.6
+472.61716 643.9
+482.65952 825.7
+504.75848 684.1
+511.09082 766.1
+515.84467 638.9
+532.48651 1905.7
+593.54352 546.9
+669.16479 641.9
+676.67621 837.6
+710.77362 725.8
+795.87939 1017.4
+930.96472 569.1
+1116.35266 667.3
+1198.08850 2711.0
+1316.04065 581.0
+1451.38318 596.9
+1539.77075 3038.8
+1540.28162 9150.8
+1540.77844 9524.4
+1541.28210 7779.8
+1541.78101 3139.6
+1667.11646 609.4
+1689.90894 694.6
+1733.50879 637.7
+1785.05615 629.4
+1870.27722 778.6
+1878.35266 1289.4
+1879.18054 950.6
+1879.33972 1746.1
+1879.62463 19807.7
+1880.94507 1569.4
+1906.77161 780.3
+1907.11707 7466.8
+1907.43909 1216.3
+1948.34802 679.4
+S	3543	3543	1233.44424127
+Z	2	2465.041
+Z	3	3697.057
+451.72873 13622.3
+463.59906 15228.2
+532.45654 40473.3
+564.90222 14896.4
+630.41840 18618.4
+676.67377 19528.3
+708.39209 14387.0
+728.71527 14482.4
+788.65558 16410.0
+790.63733 15210.7
+795.89081 25434.7
+996.56305 16467.5
+1022.43243 16486.4
+1063.22607 14090.9
+1188.33386 18457.0
+1198.01807 85945.7
+1262.51294 15079.5
+1525.42358 22817.5
+1539.78796 71928.2
+1540.27795 145992.6
+1540.78015 149857.9
+1541.28113 52698.4
+1541.78711 25144.8
+1542.32715 20074.7
+1635.86670 14487.6
+1875.52161 15619.8
+1878.61011 23285.8
+1878.80078 16249.2
+1879.03223 25679.2
+1879.29688 66707.8
+1879.64648 466427.9
+1879.98145 52354.7
+1880.39441 27804.7
+1882.62366 16396.1
+1907.16797 186667.1
+S	3545	3545	1880.01840793
+Z	2	3758.189
+Z	3	5636.78
+532.42145 1570.4
+582.83087 585.9
+676.66418 1101.5
+743.28351 591.2
+795.88953 1064.0
+810.32507 607.9
+1032.88928 588.1
+1197.94092 3146.5
+1218.97217 625.0
+1312.50757 631.3
+1489.72229 692.8
+1541.03040 676.0
+1562.05920 685.4
+1878.89307 1191.2
+1879.59558 19950.4
+1880.20288 1056.0
+1880.84460 751.1
+1902.16125 675.2
+1905.19385 731.5
+1907.09985 7093.2
+1907.35889 999.8
+1930.70190 1041.9
+1977.35889 779.6
+1995.08276 702.4
+S	3546	3546	637.808991267
+Z	3	1910.152
+Z	2	1273.77
+165.16736 579.4
+165.74840 999.2
+182.78857 657.9
+185.48184 573.1
+188.24913 955.5
+188.27408 1951.6
+188.29510 2009.1
+188.30545 1974.2
+188.34204 625.4
+190.05090 634.7
+191.87704 511.5
+192.85757 527.7
+197.28688 519.9
+198.97635 1045.1
+199.27435 976.6
+199.32668 658.4
+199.33891 1336.8
+199.36116 2262.8
+199.37244 1163.5
+199.45976 1074.7
+199.47020 623.3
+201.12263 706.7
+206.67628 559.4
+211.59286 535.5
+213.11565 762.9
+213.85480 550.8
+216.19107 557.2
+251.21458 607.1
+291.05508 681.0
+299.19006 695.9
+303.67984 596.0
+313.88870 546.4
+323.69479 639.3
+344.14523 743.8
+348.79303 517.1
+350.27997 789.2
+363.78464 611.5
+366.32190 614.7
+367.92145 592.6
+369.22485 1476.2
+381.36850 752.6
+466.82776 577.2
+482.66721 940.9
+512.89209 679.8
+515.38019 17457.3
+516.38348 5053.2
+532.43060 1560.6
+547.33502 1091.2
+549.16986 665.1
+574.26202 680.4
+620.36157 1116.4
+630.43726 647.8
+633.75018 652.7
+676.67169 1002.4
+682.36481 2190.9
+682.87067 2358.9
+699.31238 585.6
+725.88336 4938.6
+726.38586 2714.5
+726.88629 1794.9
+731.15723 819.8
+769.88007 758.5
+780.96716 764.7
+782.92511 1076.3
+783.42706 816.9
+795.88898 724.9
+839.93927 7290.8
+840.43903 7827.0
+840.94232 4422.6
+841.43793 2284.4
+905.31012 648.4
+941.68347 611.8
+946.25464 658.6
+976.20898 713.5
+1057.29346 814.4
+1188.30127 854.5
+1197.95496 3143.2
+1313.15833 598.3
+1434.04456 610.1
+1525.48035 854.8
+1696.57117 573.8
+1709.18628 662.0
+1873.14917 662.0
+1878.98718 2088.0
+1879.61401 19770.3
+1880.03052 1261.4
+1880.23853 1195.1
+1887.25525 679.3
+1907.04614 7299.1
+1907.68311 623.0
+1930.65906 1286.5
+S	3547	3547	503.7248246
+Z	3	1507.899
+Z	2	1005.602
+125.75594 608.7
+127.75684 639.0
+133.82755 592.3
+165.75130 848.9
+167.38019 605.1
+177.11160 1001.8
+183.55153 554.4
+184.30174 746.3
+188.24438 607.4
+188.26350 764.5
+188.27567 1246.9
+188.28404 1138.4
+188.29189 1276.8
+188.30330 1108.3
+188.31537 806.6
+188.34103 546.3
+193.63364 597.2
+198.97264 867.3
+199.26945 750.2
+199.28163 800.6
+199.34209 1077.6
+199.35210 1026.2
+199.36591 2193.7
+199.37939 1276.6
+199.40808 826.7
+199.47699 703.9
+200.69946 498.6
+214.52763 550.9
+216.40475 515.7
+263.06509 558.0
+272.50790 522.0
+281.05042 4057.7
+281.32956 666.6
+291.13202 609.1
+296.61447 685.5
+297.88116 576.3
+315.86731 610.4
+332.98370 546.7
+350.28796 1061.6
+392.70016 588.9
+399.51498 578.9
+414.29977 572.5
+415.25241 1270.9
+427.58304 946.7
+459.27878 2296.2
+460.28296 611.1
+484.01611 644.8
+498.65961 546.5
+514.53687 693.9
+532.44061 2021.9
+542.04034 746.5
+626.30444 833.9
+630.44464 773.1
+654.87787 533.6
+657.28412 676.1
+676.64252 572.9
+676.68414 976.1
+696.63208 709.8
+762.97217 586.9
+782.15027 608.4
+795.88702 1007.9
+813.95599 588.2
+1057.31189 744.1
+1079.52026 716.8
+1162.52661 538.0
+1197.99304 3448.6
+1280.11157 528.5
+1329.48901 595.5
+1515.07813 665.5
+1525.51660 701.7
+1538.39258 804.3
+1542.04138 646.7
+1582.88293 574.6
+1626.32117 528.2
+1718.98193 741.8
+1775.68872 619.2
+1870.28296 687.0
+1879.04907 1295.6
+1879.65833 19476.5
+1880.70605 613.5
+1881.62537 674.1
+1882.13196 753.8
+1907.09607 7342.8
+1930.73254 841.6
+S	3549	3549	1880.02140793
+Z	3	5636.789
+Z	2	3758.195
+532.46759 1518.3
+619.34564 680.8
+630.42291 721.3
+676.66632 796.6
+781.08295 636.4
+795.89563 1183.5
+1019.45026 557.4
+1034.71692 624.7
+1051.14111 623.4
+1057.28662 692.5
+1198.05432 3288.4
+1502.97034 645.5
+1870.26038 885.1
+1877.53320 716.0
+1878.98584 2324.8
+1879.60559 19494.6
+1880.20569 2128.6
+1881.17517 656.2
+1881.61719 696.0
+1883.40369 774.1
+1907.08350 7226.9
+1907.38342 935.9
+1930.67114 1058.0
+S	3550	3550	503.725991267
+Z	3	1507.903
+Z	2	1005.604
+130.97818 539.8
+134.31516 591.3
+143.85838 573.6
+143.86954 688.5
+144.60089 666.9
+158.29582 698.4
+165.74947 734.4
+171.37112 590.5
+177.11241 1156.7
+181.38972 598.0
+188.20622 556.2
+188.21144 519.6
+188.23357 804.8
+188.25595 667.8
+188.27205 570.1
+188.29828 726.6
+188.31209 924.3
+188.32413 661.3
+188.35429 753.7
+188.37328 571.0
+189.73924 544.4
+191.22919 722.5
+197.70262 584.0
+198.97481 915.7
+199.28928 719.2
+199.32971 843.2
+199.35092 1225.0
+199.36020 2045.3
+199.38405 1411.3
+199.38875 1424.8
+199.40450 564.9
+199.44839 688.0
+199.45909 1050.3
+199.48149 752.8
+218.61728 594.8
+221.08243 633.3
+221.13766 1177.4
+240.84454 609.1
+266.28485 550.7
+271.47870 801.9
+276.33591 600.9
+281.05035 4005.4
+283.17496 781.0
+292.22672 1887.4
+294.69150 578.6
+301.34659 573.5
+307.06274 553.6
+309.18939 998.1
+327.19855 881.3
+353.21503 788.6
+371.22726 769.6
+404.63519 625.3
+409.58365 785.4
+415.03714 944.7
+415.25317 3086.1
+459.27884 5157.1
+460.28290 712.1
+485.80423 628.7
+532.47632 1434.5
+533.46533 585.8
+583.69617 711.0
+613.80664 579.9
+674.32916 574.1
+693.74896 541.8
+702.25848 621.7
+707.08197 572.3
+731.11456 727.0
+795.88525 661.5
+797.05444 670.6
+837.79364 605.9
+858.04578 666.6
+897.65857 652.6
+1006.26135 660.8
+1021.12402 927.4
+1092.48401 592.4
+1149.27368 610.1
+1182.99536 598.7
+1187.91040 1051.1
+1198.06177 3104.7
+1312.71838 736.5
+1381.85779 712.8
+1415.27307 530.9
+1525.40942 683.3
+1593.53320 542.8
+1777.01123 655.3
+1860.11328 791.7
+1876.19385 740.4
+1876.81384 985.3
+1878.87366 1077.1
+1879.41724 7683.5
+1879.68872 16740.2
+1880.44653 1431.0
+1880.84583 936.6
+1882.18213 784.3
+1907.09290 7092.5
+1907.46582 1061.9
+1920.63110 715.3
+1930.58887 1102.7
+S	3551	3551	1907.5328246
+Z	2	3813.218
+Z	3	5719.323
+532.46429 1674.2
+549.15887 730.2
+567.92218 615.5
+598.18500 758.2
+607.43524 528.5
+630.40417 725.3
+644.51483 643.0
+676.68207 864.1
+731.12231 771.5
+781.23871 654.5
+795.89063 881.6
+820.82947 633.4
+1057.26245 609.4
+1198.03369 3454.8
+1212.94592 717.4
+1459.43677 789.6
+1532.85522 612.4
+1629.64783 627.6
+1679.70178 586.9
+1749.09863 682.2
+1877.78784 734.8
+1878.54492 1549.8
+1879.23059 1716.4
+1879.63489 19479.1
+1879.89478 1326.1
+1880.05774 2037.4
+1880.68091 779.3
+1881.14294 724.6
+1882.31079 941.3
+1907.10938 6707.1
+1930.65417 746.5
+S	3553	3553	1880.05899127
+Z	3	5636.902
+Z	2	3758.27
+532.45905 1934.4
+532.51855 741.5
+561.04602 628.3
+577.83032 582.2
+583.50104 760.8
+630.39227 810.3
+673.10071 653.3
+676.61005 594.5
+676.65442 921.0
+721.22827 751.2
+731.11005 668.0
+750.69983 767.8
+764.25903 664.8
+782.30640 617.8
+1021.13348 786.2
+1079.87659 748.6
+1198.02808 3010.5
+1288.44067 751.0
+1391.72241 732.7
+1449.54346 681.8
+1639.65002 659.3
+1879.57410 19334.3
+1879.81775 2777.6
+1883.66089 649.0
+1897.80945 642.9
+1907.08899 7310.4
+1930.54993 1126.1
+S	3554	3554	1907.57040793
+Z	3	5719.436
+Z	2	3813.293
+532.47168 1516.9
+630.43811 699.3
+633.33081 663.6
+658.28180 534.5
+676.62329 1056.7
+794.39624 640.7
+795.88721 1130.7
+917.76111 589.8
+936.38306 742.1
+1110.61304 671.6
+1197.74414 669.5
+1197.84839 575.1
+1198.04114 2253.5
+1320.87415 625.3
+1436.50098 642.9
+1626.73950 677.5
+1871.62305 636.9
+1879.24121 4081.8
+1879.49353 20420.6
+1907.12646 7349.4
+1930.72961 997.0
+S	3555	3555	1198.44340793
+Z	3	3592.055
+Z	2	2395.039
+315.05505 629.1
+328.72079 661.5
+332.83371 586.1
+351.77277 647.4
+356.87857 677.8
+407.93826 633.7
+462.77777 609.9
+494.11166 655.8
+532.46375 831.2
+532.49548 1554.9
+535.60480 670.1
+536.86792 650.1
+549.15704 764.2
+552.21777 667.7
+554.42914 583.2
+573.27734 645.8
+618.52264 727.0
+630.41656 732.8
+676.63324 1331.2
+683.70667 762.1
+751.99646 667.4
+770.05090 671.2
+787.68933 667.7
+795.88708 1065.9
+858.04431 607.2
+959.57874 600.7
+975.02112 730.7
+1057.22839 789.3
+1094.50037 605.6
+1103.34546 589.2
+1188.06018 738.0
+1198.09753 3087.2
+1291.22546 969.3
+1398.22058 576.3
+1526.12952 702.0
+1718.06494 1437.0
+1783.36609 756.0
+1873.64832 1224.1
+1879.51501 21101.9
+1879.84033 1184.1
+1907.11316 7213.4
+1919.05090 691.2
+S	3557	3557	1879.9118246
+Z	3	5636.46
+Z	2	3757.976
+532.48663 2291.4
+542.36926 543.1
+568.15997 610.3
+620.38666 607.0
+676.71442 1049.2
+727.22070 703.5
+731.79651 635.7
+795.90033 787.1
+1057.35474 836.5
+1198.08862 3118.5
+1537.33081 638.3
+1719.20056 876.8
+1874.91284 1354.0
+1877.59290 615.9
+1877.84033 728.2
+1878.26892 1080.3
+1878.59961 1103.5
+1879.45081 2908.5
+1879.73657 19503.9
+1880.89587 944.4
+1881.17505 1054.4
+1882.10535 961.5
+1907.17212 7317.8
+1930.64697 969.9
+S	3558	3558	1907.54640793
+Z	2	3813.245
+Z	3	5719.364
+529.82385 687.3
+532.49786 1595.5
+549.15051 647.8
+640.01947 547.5
+673.77466 606.8
+795.89014 1069.5
+819.43384 634.7
+858.05457 669.8
+967.08240 652.6
+971.18835 647.3
+1020.77618 718.8
+1188.22681 917.3
+1198.11682 3563.9
+1491.46057 627.5
+1525.40442 750.5
+1718.59631 1488.4
+1877.95264 808.0
+1879.17126 3138.9
+1879.44714 6053.5
+1879.72156 16845.3
+1880.35352 1638.3
+1880.62512 1827.5
+1881.18518 683.2
+1881.41309 1040.9
+1907.13684 7296.6
+1930.59619 1217.3
+S	3559	3559	1198.48540793
+Z	3	3592.181
+Z	2	2395.123
+342.27499 815.8
+344.16470 655.5
+350.29984 1037.8
+356.29785 615.2
+362.54413 705.9
+427.54138 1017.3
+494.82327 751.9
+497.76453 698.4
+505.01950 870.1
+532.50818 2507.2
+586.58075 682.2
+675.11072 808.0
+675.73096 814.4
+676.67310 1047.1
+704.96869 662.9
+731.11591 895.7
+795.89307 1766.8
+1198.13684 3914.9
+1273.32312 664.5
+1392.23303 702.4
+1413.63525 770.8
+1572.08362 759.4
+1717.79590 1763.7
+1752.79041 1045.8
+1873.40820 1640.1
+1878.78845 1038.6
+1879.22046 1982.8
+1879.64124 22978.3
+1880.10425 1277.6
+1880.45044 1746.1
+1907.15332 8805.0
+1930.56848 1149.7
+S	3561	3561	1880.1385746
+Z	2	3758.429
+Z	3	5637.141
+521.44000 548.1
+532.50555 1874.0
+532.54248 821.2
+551.22742 638.0
+631.33795 510.2
+676.68060 1041.3
+706.70972 527.3
+795.88641 726.7
+988.68964 595.5
+1020.83099 727.3
+1038.27307 609.5
+1057.31079 675.0
+1198.13831 3280.5
+1304.44092 707.2
+1357.47180 598.3
+1443.88428 660.5
+1450.75195 607.0
+1540.54993 564.4
+1716.34753 900.9
+1764.27344 899.9
+1871.55603 694.1
+1878.33496 1123.1
+1878.91296 792.0
+1879.35168 2540.6
+1879.69434 18005.9
+1879.98120 2754.3
+1880.08411 2586.7
+1880.27429 1086.9
+1880.48364 1650.2
+1880.87146 1183.9
+1907.17798 7125.3
+1930.70117 955.6
+S	3562	3562	1907.59199127
+Z	3	5719.501
+Z	2	3813.336
+532.53601 1976.6
+544.72308 573.7
+570.68170 658.7
+614.59784 605.6
+652.29596 973.4
+676.67493 911.2
+795.88898 1071.1
+830.93951 586.7
+835.77252 676.9
+927.48120 712.7
+1078.85120 562.6
+1198.19836 3573.2
+1303.59290 734.8
+1421.12048 692.2
+1525.40210 681.6
+1715.78357 1081.2
+1777.72095 868.6
+1871.15186 985.7
+1878.53406 770.1
+1879.35083 4880.8
+1879.75281 14959.2
+1880.14258 5287.2
+1880.51526 2567.4
+1880.89368 1534.2
+1906.82629 1025.1
+1907.22119 7590.9
+1930.57349 820.7
+1932.22961 746.5
+S	3563	3563	406.6878246
+Z	2	811.36
+106.89098 650.5
+121.13673 592.8
+121.77432 2391.7
+124.17513 557.7
+127.07585 549.5
+127.13287 633.6
+128.58040 686.4
+139.85767 593.7
+142.79839 560.5
+144.08995 545.8
+144.29199 575.5
+155.31422 605.5
+161.04568 1860.9
+165.74857 772.1
+177.29004 696.4
+179.42123 575.5
+183.05762 602.1
+193.85497 768.8
+198.97583 1036.9
+199.25403 1247.9
+199.27609 612.7
+199.31883 593.9
+199.33737 794.5
+199.35190 3150.1
+199.37473 605.4
+199.44945 1263.9
+205.07147 696.7
+210.02528 598.1
+213.30330 616.9
+227.08414 1041.1
+228.08263 710.0
+238.67804 729.3
+243.67194 784.7
+247.86908 612.9
+277.04190 573.4
+280.19455 832.4
+296.37167 734.8
+350.27548 569.2
+350.28293 563.5
+360.89328 472.7
+376.09915 533.6
+386.02124 608.0
+417.12421 591.3
+427.56317 662.2
+435.59576 644.5
+457.48193 544.4
+461.80194 583.4
+471.17004 812.3
+515.19635 1150.9
+527.67798 621.3
+532.51453 1985.5
+557.50684 563.7
+559.22308 2483.0
+561.21527 918.1
+603.25159 1872.3
+624.17889 640.2
+629.77136 514.4
+634.03406 820.7
+641.55444 507.0
+676.70917 943.8
+680.66687 597.1
+753.18677 629.4
+775.36462 649.8
+782.15619 724.9
+838.91364 553.5
+847.28772 602.1
+871.89813 573.7
+1001.96783 593.9
+1057.46484 598.1
+1061.36902 593.6
+1153.18689 599.9
+1188.08679 644.8
+1198.15320 3506.3
+1525.46509 717.8
+S	3565	3565	1880.24240793
+Z	2	3758.637
+Z	3	5637.452
+532.47327 1775.6
+568.18915 559.4
+573.70844 571.9
+676.66827 1266.4
+736.00580 687.3
+750.65320 584.2
+779.25079 525.3
+995.93774 679.0
+1019.64380 620.1
+1021.16827 764.4
+1198.05908 3301.0
+1277.82825 634.4
+1298.15454 611.5
+1615.22168 642.8
+1854.19263 664.7
+1877.64124 912.6
+1878.52209 866.7
+1878.91699 1318.6
+1879.26782 2881.1
+1879.60974 19936.6
+1879.99438 2382.6
+1907.09802 7537.0
+S	3566	3566	1907.61424127
+Z	3	5719.567
+Z	2	3813.381
+532.43842 2124.5
+557.27576 700.7
+630.36359 722.9
+795.89496 983.1
+903.83789 646.6
+1057.28040 893.8
+1093.62146 569.1
+1096.26013 703.5
+1197.97498 3256.2
+1302.18152 609.3
+1507.60828 568.9
+1525.31934 700.8
+1879.15466 1568.0
+1879.59875 20224.3
+1880.05615 1809.5
+1882.89697 720.7
+1907.06958 7752.0
+1910.32922 789.5
+S	3567	3567	1879.68340793
+Z	2	3757.519
+Z	3	5635.775
+532.51526 1910.4
+573.54639 678.0
+584.91992 580.9
+644.84161 624.1
+676.64087 992.9
+732.33575 611.8
+1009.17456 639.3
+1057.25195 808.2
+1137.21497 599.2
+1169.88318 585.6
+1198.15808 3812.9
+1387.25305 703.9
+1390.33618 841.8
+1398.21399 851.7
+1679.72839 605.9
+1776.87671 975.7
+1841.85352 782.1
+1879.54077 18591.1
+1879.89929 1601.1
+1880.37720 1412.2
+1880.82581 1010.1
+1881.97681 663.4
+1890.69922 641.1
+1907.06885 6810.7
+1907.35645 1394.6
+1919.00232 791.8
+1930.55505 731.4
+S	3569	3569	1880.00599127
+Z	3	5636.743
+Z	2	3758.164
+532.48511 1281.4
+580.33813 699.8
+630.44269 663.6
+642.81067 657.3
+676.67261 928.8
+779.31073 674.7
+795.86902 851.7
+810.70898 600.1
+857.51050 660.6
+1057.29724 888.8
+1089.16003 648.6
+1118.85767 658.6
+1145.32581 620.6
+1187.71558 770.7
+1198.07764 3289.8
+1259.84143 691.6
+1553.73938 585.0
+1606.45984 628.6
+1870.29114 619.6
+1872.84277 1121.2
+1878.12866 839.1
+1879.19702 2681.9
+1879.62451 19645.3
+1880.04749 2172.9
+1880.47314 811.7
+1906.66821 570.8
+1907.15662 6922.1
+1919.12073 699.9
+S	3570	3570	1907.57440793
+Z	3	5719.448
+Z	2	3813.301
+532.51611 2446.3
+549.14478 776.5
+607.02148 810.2
+630.40771 833.9
+676.65845 1144.9
+746.36450 710.1
+795.87762 812.7
+803.39209 789.4
+937.96844 617.6
+1020.77771 967.4
+1032.21497 725.9
+1057.27332 840.6
+1198.15210 3452.8
+1370.51868 665.1
+1701.92029 603.2
+1870.33582 896.1
+1878.04102 812.9
+1879.17542 1563.1
+1879.58936 19992.3
+1879.93921 1537.0
+1880.74768 871.3
+1881.17542 974.0
+1881.51318 697.7
+1907.09558 7300.6
+1930.57776 1132.2
+S	3571	3571	547.752407933
+Z	3	1639.982
+Z	2	1093.657
+146.66647 591.5
+152.40421 514.7
+165.75093 710.8
+170.03503 604.4
+183.31618 538.3
+188.25282 693.0
+188.26682 1050.1
+188.27872 1215.0
+188.28758 1200.4
+188.29579 1151.4
+188.30321 972.9
+188.31329 912.0
+188.32149 805.6
+198.97202 1060.9
+199.25040 553.6
+199.26378 677.4
+199.33627 1040.5
+199.34726 2368.3
+199.35954 1727.8
+199.36803 1064.1
+199.37798 1163.1
+199.41074 667.7
+208.80090 552.4
+214.51527 717.5
+228.06583 557.9
+271.32431 711.0
+271.79199 752.9
+275.97559 685.2
+308.90176 621.3
+334.99420 484.8
+342.27023 831.0
+350.30579 759.7
+363.15424 649.2
+370.59000 540.7
+373.86014 669.5
+394.69647 561.1
+429.39096 661.8
+448.83432 899.5
+459.27487 792.8
+467.96289 559.5
+503.30359 1374.2
+532.51886 1889.8
+549.15125 713.0
+562.22369 694.9
+579.81958 661.3
+582.29163 620.3
+582.80023 576.4
+582.84198 708.9
+676.67731 1201.2
+694.59277 660.0
+695.37384 1696.5
+695.87683 724.0
+795.87866 756.4
+899.53113 575.6
+1057.31384 574.3
+1057.41492 516.8
+1117.49072 567.4
+1156.47083 564.9
+1187.87244 654.9
+1198.15979 3379.1
+1224.23267 894.4
+1252.89600 654.9
+1266.47485 676.6
+1523.33936 551.9
+1625.14160 649.4
+1793.18042 572.0
+1876.09473 1068.2
+1878.94177 1157.9
+1879.30505 1671.7
+1879.62646 19672.2
+1879.98694 1789.3
+1880.34033 1475.3
+1881.45142 831.1
+1907.17908 7080.2
+1919.13037 617.4
+1930.62549 795.7
+S	3573	3573	1880.0538246
+Z	2	3758.26
+Z	3	5636.886
+532.54095 1900.8
+533.95898 630.6
+583.33081 675.5
+675.28821 707.7
+676.67957 896.5
+795.89221 1002.6
+1198.21497 3414.6
+1456.07642 634.1
+1480.79724 649.6
+1525.27722 895.2
+1685.00684 683.2
+1774.23669 667.1
+1878.16125 735.7
+1878.62280 657.3
+1878.78271 667.2
+1879.26965 1950.5
+1879.66211 19531.1
+1880.02563 2502.4
+1880.60229 554.8
+1907.13452 6949.6
+1907.81323 665.7
+1971.84070 676.9
+S	3575	3575	547.752407933
+Z	3	1639.982
+Z	2	1093.657
+157.59920 772.7
+157.62053 535.7
+161.64757 559.6
+169.48816 839.2
+171.36810 574.9
+177.11226 1121.2
+188.25644 645.2
+188.27364 1081.9
+188.28951 1312.6
+188.31142 1400.4
+198.97501 599.4
+199.26645 645.4
+199.30443 863.6
+199.34424 1600.1
+199.36459 2398.8
+199.37598 1443.8
+199.41206 604.4
+199.46144 765.5
+199.51288 505.2
+204.55840 568.2
+206.15483 590.2
+216.84584 544.1
+237.94243 520.6
+260.84579 552.9
+269.31784 549.1
+271.79453 753.0
+280.17563 674.0
+282.58270 586.9
+283.17618 589.8
+297.85611 562.7
+308.89447 700.6
+312.19943 617.8
+325.19113 662.2
+328.63947 590.2
+328.85321 601.0
+335.38525 600.2
+337.72092 552.1
+340.33344 551.9
+342.26288 607.3
+348.03006 551.7
+350.29459 668.7
+361.12766 710.4
+363.36203 582.3
+378.77896 675.2
+381.34933 885.5
+385.33823 469.8
+406.75476 641.6
+415.25186 1013.5
+415.70847 602.8
+419.05695 573.2
+448.83380 515.6
+459.27945 1901.4
+469.00775 514.7
+503.30585 3166.8
+504.31424 984.0
+528.34302 614.7
+531.46667 508.8
+532.49292 1536.7
+549.13934 615.5
+588.05389 566.1
+630.38898 1254.1
+635.38806 772.5
+676.59698 737.2
+676.64825 542.6
+679.40887 1394.0
+681.46509 600.9
+695.38159 1103.7
+695.87701 1197.6
+713.53174 571.8
+723.44855 632.0
+780.52997 667.4
+843.35132 572.8
+848.08801 533.4
+855.52173 945.7
+857.07977 544.8
+960.87274 593.2
+1003.96692 657.0
+1023.91156 612.8
+1057.19031 1228.5
+1198.10278 3018.6
+1258.89990 583.8
+1381.88013 651.8
+1386.67090 629.6
+1409.13672 578.9
+1489.83594 963.2
+1878.87329 1359.4
+1879.58423 18596.5
+1879.84460 4813.7
+1880.32666 1174.9
+1880.57495 944.1
+1907.13391 7481.7
+S	3577	3577	1880.07540793
+Z	2	3758.303
+Z	3	5636.951
+532.50671 1736.1
+549.12164 698.1
+618.45081 633.5
+619.05542 662.6
+630.69489 649.0
+676.65948 1326.5
+679.92010 677.2
+1198.14404 3244.4
+1647.13782 623.6
+1776.95190 755.9
+1878.35681 800.1
+1879.15271 2176.4
+1879.59509 19342.5
+1879.87231 2553.3
+1906.08496 606.5
+1907.16809 7688.3
+1955.97693 667.2
+S	3578	3578	862.8359746
+Z	5	4309.14075
+226.95631 623.1
+227.38095 634.5
+233.56218 679.3
+235.18317 634.7
+240.52505 584.9
+242.43604 568.1
+250.71919 680.6
+259.88052 604.5
+284.13977 2552.5
+289.87582 536.3
+296.50293 627.0
+324.76340 554.5
+335.17639 1078.5
+363.17422 1711.7
+373.45404 535.8
+389.00720 555.0
+397.22516 1922.0
+408.19522 4906.6
+409.20038 904.6
+415.24060 514.1
+427.52768 724.9
+427.98566 614.7
+452.16138 649.9
+454.11151 655.5
+456.23010 872.6
+482.64734 674.2
+483.75052 1378.9
+493.28387 1922.8
+494.28607 853.8
+508.25677 756.7
+509.57315 588.2
+521.27826 3059.1
+522.19897 829.8
+525.28204 7766.2
+526.28717 1981.8
+532.47809 1460.9
+539.22546 813.1
+543.29218 1295.8
+553.28375 26272.9
+554.28693 6263.5
+555.28320 1042.0
+573.54034 717.9
+582.30402 1038.5
+585.30255 1239.1
+586.06409 608.3
+586.30902 759.5
+595.96667 924.5
+613.81799 695.8
+617.15332 699.1
+626.31848 1214.4
+638.36597 1752.3
+650.32013 2779.1
+650.65338 5011.3
+650.98523 1929.2
+651.32043 1081.5
+655.30029 838.6
+656.37421 926.3
+657.34393 1070.9
+666.36810 7465.5
+667.37018 2361.1
+668.34424 2535.3
+668.66815 848.0
+669.34503 1111.8
+669.66888 1683.3
+669.99890 1193.2
+670.33484 888.4
+676.67743 1268.3
+682.34021 1470.4
+682.67395 896.7
+687.85980 793.7
+688.01300 3846.8
+688.34857 5853.5
+688.68280 4079.1
+689.35004 719.6
+696.85986 1198.0
+697.36359 794.5
+697.85309 810.1
+701.35468 983.3
+705.86755 31855.0
+706.36853 28716.6
+706.70081 1237.0
+706.87048 12212.9
+707.36230 9861.9
+707.69519 9581.5
+707.87122 1299.1
+708.02893 7771.8
+708.20093 710.1
+708.36182 4336.5
+708.69818 1576.3
+711.84888 2671.6
+712.34509 2093.5
+713.35669 954.3
+719.01746 862.6
+719.35120 1591.1
+719.68585 1548.6
+724.69751 4522.7
+725.03088 6873.0
+725.36432 5333.2
+725.69940 2628.8
+725.89807 650.0
+730.69989 2900.1
+731.03625 5047.0
+731.36816 3650.1
+744.04865 944.6
+744.37445 819.0
+745.36603 1558.9
+746.36938 1162.0
+750.04614 4092.2
+750.38171 4685.6
+750.71680 4191.2
+751.04816 1564.9
+751.37433 807.6
+754.39105 2746.9
+754.89819 1367.0
+755.37134 1156.8
+759.87958 1248.8
+760.38092 800.3
+768.39050 9444.8
+768.73016 3090.8
+768.89130 5957.4
+769.06067 2273.0
+769.39233 4354.6
+769.89380 1295.4
+770.39825 1676.7
+770.89178 1258.7
+776.06293 986.0
+779.40204 26583.1
+779.90265 24446.6
+780.40442 10907.4
+780.90625 3652.4
+781.40350 1423.5
+781.73895 1376.1
+782.07251 1849.0
+782.39819 3070.8
+782.88745 757.1
+787.74103 17701.9
+787.87463 971.0
+788.07544 21337.8
+788.40973 20625.3
+788.74323 9658.1
+789.07819 5352.7
+789.32562 965.5
+789.41455 1617.5
+795.88184 962.1
+796.88513 902.9
+797.38470 1061.2
+797.88721 853.1
+798.84216 641.1
+800.40088 1371.1
+800.90845 1061.1
+803.89813 914.6
+804.69000 831.9
+805.89868 743.5
+810.60663 2298.2
+810.80688 2247.7
+811.00116 797.6
+811.90698 1583.5
+812.40558 847.5
+813.81500 783.8
+814.00085 881.0
+814.21387 2402.3
+814.41931 981.7
+814.61591 1452.8
+819.40222 1181.0
+822.66162 697.8
+826.43335 1202.4
+827.91010 2927.1
+828.41125 2055.4
+829.43115 8057.0
+830.43182 2881.6
+834.55365 726.5
+835.90735 765.7
+836.42230 31290.1
+836.76788 870.1
+836.92456 30365.8
+837.42572 14855.8
+837.69299 735.4
+837.92688 4923.2
+838.42822 1844.5
+838.92273 1036.8
+839.43933 727.9
+879.62622 787.2
+882.93811 1291.4
+884.93488 4148.1
+885.43475 2999.1
+885.93103 2286.5
+886.42969 970.5
+888.94354 877.3
+889.94305 950.5
+893.44507 30161.9
+893.94592 28921.8
+894.44733 18008.3
+894.94830 6355.6
+895.45288 1919.8
+896.43842 827.4
+896.78333 1543.3
+897.12885 971.4
+897.45673 1718.1
+899.42596 1032.7
+901.94623 987.7
+902.40997 1055.6
+902.52960 803.0
+902.96185 1040.7
+903.46655 1097.2
+906.46362 902.7
+907.21075 953.4
+907.45215 1557.7
+907.70142 1431.6
+909.94751 928.3
+910.45923 811.2
+910.95886 1710.2
+911.45844 2576.8
+911.70685 3000.5
+911.95972 4049.4
+912.21021 1818.3
+912.45319 3531.4
+912.96326 1004.8
+913.46167 1122.6
+915.47131 847.2
+918.12360 2841.5
+918.45789 2010.5
+918.79169 2661.7
+919.13232 1479.6
+919.78564 802.2
+920.12317 971.6
+920.97192 5223.9
+921.47382 5990.3
+921.97668 3668.9
+922.48108 1449.5
+924.46222 959.9
+925.80121 1899.4
+926.13397 1680.8
+926.47339 1212.3
+926.80249 1164.1
+929.48596 1259.8
+929.99200 1416.9
+930.47314 1541.5
+935.96057 811.4
+938.48035 2684.2
+938.98395 2496.9
+939.47778 2974.6
+939.71118 1082.8
+939.97540 2426.7
+940.22479 1313.2
+940.47845 2192.0
+940.72076 1778.1
+940.97235 1415.0
+941.24268 665.8
+943.71735 3338.7
+943.96918 4848.9
+944.21967 3952.2
+944.47186 3695.8
+944.71777 1205.1
+944.96655 1032.4
+945.21210 775.8
+945.47040 1713.6
+945.96936 1817.4
+946.47034 1348.7
+947.97705 2322.4
+948.22394 7138.7
+948.47711 11523.9
+948.72693 5975.8
+948.98065 4473.3
+949.22260 1708.0
+949.49420 1004.2
+957.45966 1922.7
+957.97101 1438.2
+958.44452 736.0
+960.00775 1209.7
+965.96851 1504.7
+966.46094 17702.8
+966.96393 22557.9
+967.14868 2870.6
+967.46814 14088.4
+967.81580 3570.1
+967.96368 4755.6
+968.15149 2551.0
+968.47363 2302.0
+968.80371 797.3
+969.50513 1020.9
+971.98792 1579.5
+972.24097 2993.1
+972.49347 3983.8
+972.74384 2244.3
+973.23444 961.1
+973.38940 883.2
+973.51001 707.2
+974.97614 111278.3
+975.47742 127509.6
+975.97858 79605.0
+976.24664 1471.0
+976.48181 31648.1
+976.74902 6660.7
+976.98438 10920.0
+977.25031 1447.6
+977.47601 2732.7
+978.02991 1409.1
+978.52283 1736.6
+978.69012 785.6
+980.45197 2026.6
+980.95441 1344.8
+981.45007 1119.2
+985.12708 868.8
+985.98395 4816.9
+986.48431 6283.4
+986.98682 5078.9
+987.49719 2988.3
+989.99432 2334.1
+990.49652 2120.6
+990.99713 1162.9
+993.49860 1016.5
+993.99182 1268.7
+994.50653 974.7
+994.99078 5650.2
+995.48981 8364.0
+995.99225 5562.8
+996.49213 4255.0
+996.99634 1061.6
+997.50525 1116.7
+1001.53973 952.3
+1002.50220 2101.7
+1003.00385 4399.0
+1003.50519 2972.8
+1003.78595 669.1
+1003.99445 13441.3
+1004.49597 14172.5
+1004.99780 10587.8
+1005.49823 4805.5
+1006.00195 2275.6
+1006.51025 954.2
+1008.75745 1665.1
+1009.00208 1890.4
+1012.75647 4338.2
+1013.00604 8637.1
+1013.25543 11639.9
+1013.50574 6911.5
+1013.75861 5262.0
+1014.00629 4456.8
+1014.50574 1013.5
+1015.49908 2817.2
+1016.50287 1851.9
+1017.01111 8615.8
+1017.26184 23495.8
+1017.51202 32350.1
+1017.76166 23393.6
+1018.01398 15591.7
+1018.26367 7716.5
+1018.51581 3308.9
+1018.75885 2074.9
+1020.76300 801.8
+1022.50763 894.5
+1023.00439 8922.1
+1023.50677 10449.7
+1024.00818 6814.0
+1024.50793 1969.0
+1029.51672 1074.4
+1030.53259 713.0
+1031.51733 36203.5
+1032.01843 45547.9
+1032.52026 25406.5
+1033.02197 11813.8
+1033.52429 4210.9
+1034.01343 1405.0
+1041.03271 1011.4
+1041.53894 1778.7
+1042.03772 1150.4
+1042.54077 1420.0
+1043.03101 2017.7
+1043.52747 2191.3
+1044.03735 1065.4
+1047.22693 751.8
+1050.04272 1694.2
+1050.27808 1303.1
+1050.53455 3421.0
+1051.04102 2212.2
+1051.53052 3555.3
+1052.03394 3511.1
+1052.53601 2012.0
+1053.02417 1155.0
+1057.29236 765.2
+1059.04822 5146.4
+1059.54688 7371.7
+1060.04956 5459.6
+1060.53894 5994.6
+1061.04175 4728.0
+1061.53784 3290.8
+1062.04114 1865.1
+1062.55029 844.8
+1078.03333 1074.6
+1078.52344 3741.3
+1079.02356 5122.5
+1079.51416 2538.0
+1080.02283 1946.5
+1080.60022 1044.1
+1084.51050 902.0
+1086.54236 944.1
+1087.03577 12870.0
+1087.53540 14730.9
+1088.03528 8110.7
+1088.53687 4339.4
+1089.03577 937.6
+1095.54761 15902.8
+1096.04895 20024.8
+1096.54993 13991.3
+1097.04822 5019.9
+1097.55530 1947.7
+1098.53381 1225.7
+1106.40540 673.3
+1106.54822 3448.3
+1107.05481 4067.6
+1107.55823 1861.4
+1108.05371 1698.1
+1108.54419 1139.3
+1115.56409 2857.9
+1116.06348 4036.7
+1116.56165 5798.0
+1117.05420 2818.0
+1117.55603 1356.3
+1119.57043 1026.8
+1124.56555 11296.7
+1125.06775 15852.5
+1125.56873 11617.0
+1126.06982 6476.7
+1126.57092 2960.8
+1128.58118 1691.2
+1129.59131 1368.4
+1140.58252 879.8
+1141.08313 1176.8
+1144.09204 1493.0
+1144.57764 1369.9
+1145.09265 816.1
+1152.08545 2101.4
+1152.59277 3524.3
+1153.09290 3114.6
+1153.59314 1178.4
+1161.27576 667.5
+1163.59937 1569.4
+1164.09534 1375.0
+1164.59705 1288.3
+1166.25000 1179.9
+1166.59424 1144.4
+1172.10522 1529.0
+1173.10303 2915.9
+1173.60535 1234.3
+1176.58044 796.2
+1178.55554 953.8
+1181.10925 5787.8
+1181.61096 7475.0
+1182.11426 5544.6
+1182.62036 2211.4
+1183.12085 1581.4
+1191.06689 896.1
+1197.61963 915.6
+1198.06897 2669.2
+1203.58801 1121.4
+1206.57947 959.3
+1215.96069 826.0
+1216.59497 692.1
+1233.60522 1077.4
+1234.61206 874.6
+1236.60938 1341.6
+1246.12683 1144.3
+1246.61194 987.3
+1247.13086 1031.4
+1258.29236 1441.8
+1258.62085 1779.0
+1263.62964 939.5
+1263.95789 1982.3
+1264.29883 872.3
+1264.63000 2926.3
+1265.29700 782.0
+1280.63086 876.6
+1283.58777 982.3
+1291.65015 3741.4
+1292.64832 2794.1
+1293.65283 3193.8
+1294.15442 1769.3
+1294.65063 1743.7
+1295.64502 954.9
+1298.63538 1009.6
+1299.63367 816.8
+1316.66589 1090.8
+1317.66296 1165.2
+1319.65747 777.2
+1320.15771 752.7
+1359.60889 747.3
+1365.65210 713.2
+1378.15820 960.8
+1379.68433 1171.5
+1396.67249 3577.6
+1397.67578 2388.1
+1398.67053 1586.9
+1407.80237 640.0
+1410.73242 4274.5
+1411.73157 2660.9
+1412.75061 1344.4
+1422.68469 1217.7
+1423.70093 936.0
+1443.72620 751.9
+1444.71985 837.5
+1461.71826 1633.0
+1462.72131 2132.7
+1463.72888 844.7
+1479.73230 2267.8
+1480.73389 1424.5
+1481.74805 1185.5
+1510.73120 1081.6
+1535.77258 5646.4
+1536.77588 5451.4
+1537.77490 2095.1
+1622.80676 2173.0
+1623.78918 1130.7
+1624.82922 940.3
+1687.84143 987.3
+1688.82483 1294.6
+1705.83911 2372.3
+1706.84131 3272.5
+1707.85608 1135.9
+1708.84619 1108.6
+1723.85010 6910.5
+1724.84985 6703.7
+1725.85291 3693.3
+1726.84985 1729.0
+1727.86572 915.5
+1776.97986 1198.3
+1879.63757 19298.5
+1880.14697 978.2
+1880.40308 930.6
+1880.75842 928.8
+1881.00122 943.9
+1881.83154 980.5
+1907.11499 6858.9
+1930.52271 796.6
+1951.14844 712.4
+S	3579	3579	1907.5708246
+Z	3	5719.437
+Z	2	3813.294
+532.52814 1913.5
+676.67773 936.7
+790.08405 697.7
+874.70911 648.0
+899.12390 593.2
+908.21918 642.4
+923.81580 590.7
+934.04810 626.2
+1057.29370 1054.4
+1157.79736 532.9
+1188.32886 937.8
+1198.18311 3200.2
+1467.39832 670.6
+1531.58813 657.2
+1714.09277 678.8
+1878.13049 1337.3
+1878.50037 769.4
+1878.85657 1174.3
+1879.28247 2254.5
+1879.63892 19519.1
+1879.98071 1924.2
+1880.38818 696.0
+1881.23511 760.3
+1900.57422 634.6
+1907.08154 7418.8
+S	3581	3581	1880.01324127
+Z	3	5636.764
+Z	2	3758.179
+532.52985 1760.7
+532.57013 696.6
+570.91949 587.9
+630.41907 1061.8
+662.86169 535.3
+731.13641 702.8
+740.16113 662.1
+795.88324 1004.3
+825.40820 783.2
+876.84137 556.1
+1198.19421 3409.0
+1229.00330 624.5
+1279.24695 617.1
+1284.37817 664.9
+1578.23877 601.5
+1743.58276 651.9
+1877.07813 852.6
+1878.97534 2072.9
+1879.27075 2646.9
+1879.66345 19122.6
+1880.00049 1938.9
+1880.25854 1749.7
+1880.82190 1852.3
+1882.21692 794.7
+1907.12500 7165.8
+1907.54602 953.5
+S	3582	3582	1907.5288246
+Z	2	3813.21
+Z	3	5719.311
+532.54083 1881.7
+549.17346 625.4
+630.44067 535.5
+671.50854 566.4
+676.68335 765.4
+733.33820 633.1
+795.87018 1163.3
+917.45178 603.3
+982.55988 701.5
+1014.64594 582.3
+1057.33215 749.9
+1060.79797 645.3
+1188.31921 777.5
+1198.20886 3009.6
+1488.46570 575.0
+1590.50623 558.8
+1776.78918 696.4
+1860.09509 783.9
+1878.50842 1178.1
+1879.68811 18548.6
+1879.99792 4554.1
+1907.07617 6880.4
+1930.67944 1077.9
+1931.42871 878.6
+S	3583	3583	863.0362246
+Z	5	4310.142
+237.84268 589.6
+245.41103 568.9
+284.13928 1257.0
+287.41779 583.2
+308.91190 796.9
+334.53052 723.6
+346.22702 621.2
+363.17313 1257.0
+397.21982 1022.6
+398.78406 551.8
+408.19434 2816.7
+421.61313 628.4
+427.55338 777.7
+435.53314 567.5
+466.38882 796.4
+474.40073 634.3
+493.28262 959.5
+521.27850 2108.4
+525.28217 4154.6
+526.01660 672.2
+526.28278 1348.5
+530.06415 689.7
+532.53839 1968.9
+543.29559 653.9
+549.16943 626.9
+553.28314 14596.2
+554.28534 3796.1
+556.81458 625.8
+557.23224 691.8
+618.25348 719.3
+626.32379 736.3
+638.36224 1533.9
+650.31671 1984.1
+650.65540 1915.7
+650.98340 881.0
+652.31458 969.5
+655.43646 612.9
+657.34546 897.3
+657.84711 690.3
+664.12677 597.7
+666.36816 3747.3
+668.34106 2053.0
+669.99756 1066.1
+670.66620 940.6
+676.68610 837.8
+688.01471 2053.2
+688.35010 3554.1
+688.68402 2288.8
+691.75000 580.9
+692.67560 712.4
+696.85846 741.0
+701.35626 739.1
+705.86603 19212.6
+706.36774 18452.3
+706.86957 6415.6
+707.36133 4469.1
+707.69360 7153.6
+708.02991 4018.9
+708.35974 2001.7
+708.70056 915.3
+711.85004 919.7
+712.35162 1070.0
+713.35663 750.4
+719.35498 770.1
+719.68488 1192.0
+724.69641 2826.8
+725.02985 3856.4
+725.36383 3342.7
+725.69623 1867.2
+727.31750 560.5
+728.71191 628.5
+730.70184 1007.5
+731.03345 2343.5
+731.36670 1977.1
+744.37720 1224.8
+745.35950 867.9
+747.06299 711.1
+750.04730 1961.2
+750.37628 2235.9
+750.71570 1805.4
+751.05219 1193.2
+751.37079 592.9
+754.39056 1727.7
+756.73413 628.8
+759.87610 1058.4
+768.39026 3492.6
+768.72717 1753.5
+768.89148 3038.3
+769.06293 962.0
+769.39471 2340.8
+770.39227 777.2
+771.39453 730.4
+779.40112 13178.2
+779.90186 14913.4
+780.40344 6682.2
+780.90851 2385.7
+782.06555 1382.2
+782.39337 1385.1
+782.73364 744.6
+787.74066 7987.8
+788.07440 13051.8
+788.40967 8474.0
+788.74207 4565.8
+789.07568 2304.6
+789.41370 811.8
+795.86884 1029.4
+797.37518 909.1
+800.40118 894.1
+800.88336 778.3
+803.42358 671.8
+803.88861 841.6
+810.40295 1124.2
+810.59296 965.8
+810.80804 1843.1
+812.40955 889.5
+812.90643 875.3
+814.40863 1383.8
+825.75916 687.3
+827.91107 1189.2
+828.40143 774.2
+829.42981 4205.0
+830.42511 1316.7
+836.42163 16198.4
+836.92328 16566.7
+837.42383 7966.6
+837.92456 2726.1
+838.41565 1039.2
+838.92596 813.5
+842.09717 937.9
+858.06915 681.9
+870.58136 663.0
+873.69073 660.7
+884.92792 1669.4
+885.42889 1769.7
+886.43439 725.3
+892.94952 802.1
+893.44409 16211.8
+893.94476 17950.2
+894.44623 8887.8
+894.94629 2145.1
+895.44818 1038.2
+896.45789 1058.9
+902.95227 1428.5
+903.95825 838.8
+907.44958 1909.5
+910.96063 1087.5
+911.45929 982.8
+911.71155 1587.7
+911.96375 1938.7
+912.97296 672.8
+918.12433 1485.8
+918.46240 1128.2
+918.79449 1855.1
+920.46387 1347.9
+920.96680 3263.5
+921.47156 3277.1
+921.97778 1182.0
+922.46893 1018.5
+926.14185 1017.6
+929.97827 841.6
+930.46503 819.7
+930.94360 719.7
+938.47028 940.5
+938.97742 2173.5
+939.47430 2029.3
+939.97882 903.2
+940.47565 1043.9
+940.73407 1027.1
+943.72406 968.3
+943.96680 2916.0
+944.21594 3781.1
+944.46582 3320.6
+944.72235 1611.3
+944.96985 1160.9
+945.46747 1441.4
+947.97076 1112.8
+948.22076 2594.2
+948.47607 4722.6
+948.72504 2994.9
+948.97736 2784.8
+949.23907 799.5
+955.81696 708.5
+957.95911 805.1
+958.45105 1158.0
+966.45935 10194.8
+966.96191 11625.7
+967.46594 6689.1
+967.81543 1809.0
+967.96246 3164.4
+968.15338 985.2
+968.48181 1290.9
+971.97913 1066.8
+972.23981 2361.4
+972.48901 2700.0
+972.74237 1804.8
+972.98944 863.8
+974.97479 62948.5
+975.47589 72917.6
+975.97693 45382.3
+976.47900 20466.6
+976.74695 1197.8
+976.98639 7037.5
+977.24292 1303.0
+977.48688 1887.1
+978.00653 1066.0
+978.51697 1013.5
+980.45093 1158.0
+980.96497 1108.0
+985.98169 2827.6
+986.48645 4035.5
+986.98309 2338.9
+989.99701 1211.5
+990.49579 1368.7
+991.02722 740.4
+994.00409 859.1
+994.99451 3443.2
+995.49023 4259.0
+995.98688 2861.1
+996.49463 1707.0
+998.33905 601.3
+1002.50214 1348.5
+1003.00519 2058.3
+1003.50403 1225.1
+1003.99323 8569.6
+1004.49469 9482.6
+1004.99768 5578.6
+1005.50055 2910.4
+1008.50208 1999.2
+1012.74542 2247.0
+1013.00409 6365.5
+1013.25421 8625.1
+1013.50708 4989.3
+1013.75702 2476.8
+1014.01208 1508.9
+1014.26495 998.2
+1014.48529 746.5
+1015.50281 1678.5
+1016.49701 1284.0
+1017.01123 4776.1
+1017.25983 10727.6
+1017.51019 13501.3
+1017.76080 11098.2
+1018.01215 8013.1
+1018.26379 4090.1
+1018.51501 2243.7
+1023.00372 5189.6
+1023.50299 6425.3
+1024.00574 4120.8
+1024.50867 2426.5
+1031.51550 19798.6
+1032.01770 26877.6
+1032.51868 18137.1
+1033.02124 6235.6
+1033.52148 2276.9
+1041.54236 1013.1
+1042.53186 1253.5
+1043.02417 1481.6
+1046.84973 690.0
+1047.55286 798.7
+1050.53308 1289.2
+1051.03857 1309.1
+1051.53430 2389.4
+1052.03442 1747.2
+1052.53516 1288.4
+1057.40039 861.1
+1059.04675 3563.4
+1059.54517 4241.7
+1060.04626 2917.6
+1060.53638 2303.5
+1061.03552 3178.2
+1061.54150 2175.5
+1074.21094 787.8
+1078.51880 2144.2
+1079.02368 2470.1
+1079.51880 1403.1
+1087.03394 6246.8
+1087.53259 10245.2
+1088.03674 6394.0
+1088.53247 3207.0
+1091.97290 660.8
+1095.54285 11383.1
+1096.04578 14220.9
+1096.54712 7974.4
+1097.05359 3811.6
+1097.54272 1583.1
+1106.55042 1259.4
+1107.05371 2512.7
+1107.56116 1749.4
+1115.55176 2516.7
+1116.06238 2878.7
+1116.56299 2936.3
+1117.05493 2361.7
+1124.56519 8439.9
+1125.06616 10924.8
+1125.56616 7385.8
+1126.06702 3481.2
+1126.57129 1904.3
+1127.06580 1081.3
+1128.57617 1134.1
+1140.44263 744.4
+1140.56592 1018.9
+1144.06506 882.7
+1152.08789 1809.5
+1152.59167 1938.0
+1163.09180 879.4
+1163.59338 1106.7
+1164.58972 922.4
+1172.10046 1233.7
+1173.10425 1704.5
+1178.36597 643.2
+1181.10657 3322.4
+1181.60840 4951.1
+1182.10767 3544.3
+1185.56763 1269.6
+1188.17456 807.2
+1190.58362 1192.7
+1198.20288 3228.1
+1246.63257 933.9
+1254.62378 940.5
+1258.28662 870.9
+1263.95447 1107.0
+1264.29761 998.2
+1283.56641 937.3
+1285.13367 786.6
+1286.13123 1095.0
+1291.64014 1806.7
+1292.65674 1436.1
+1293.65149 2073.0
+1294.14929 1436.7
+1294.65942 1213.0
+1396.65845 1781.7
+1397.66943 1046.2
+1410.72144 1591.3
+1411.72900 2163.6
+1412.73535 948.0
+1422.67798 924.2
+1452.96228 694.6
+1462.72327 1116.1
+1479.72412 1052.2
+1480.71741 1277.5
+1525.44897 795.3
+1535.77185 2831.1
+1536.76331 2701.9
+1537.76563 1072.0
+1538.75720 768.4
+1622.81177 1256.1
+1623.79614 1152.4
+1650.06677 648.7
+1688.84412 775.2
+1705.83899 1909.6
+1706.84814 1146.8
+1723.84692 4068.3
+1724.84570 4466.5
+1725.85229 3117.9
+1877.28027 812.6
+1878.95044 1619.9
+1879.36353 3660.5
+1879.66541 19296.8
+1880.01343 2484.6
+1880.41309 1107.6
+1906.98657 6979.1
+1907.28638 690.6
+1933.40076 762.6
+S	3585	3585	1880.09140793
+Z	3	5636.999
+Z	2	3758.335
+532.54950 2135.3
+579.40399 650.9
+580.16199 671.0
+594.26721 617.0
+673.13110 658.6
+676.68518 1095.8
+690.85706 708.7
+700.60431 608.2
+743.97601 654.1
+750.69855 581.2
+781.16412 684.6
+795.87866 742.7
+796.34845 641.4
+1004.52527 626.4
+1096.53894 564.3
+1187.99255 720.9
+1194.76404 770.0
+1198.22803 3285.5
+1488.77051 795.7
+1614.83582 726.7
+1878.40015 919.8
+1879.26965 2735.1
+1879.65869 19445.9
+1880.05505 3606.5
+1880.94373 811.6
+1881.18494 671.1
+1907.07947 6859.9
+1918.97327 724.5
+1930.55688 865.6
+S	3586	3586	1907.4825746
+Z	3	5719.173
+Z	2	3813.117
+532.56775 1986.5
+549.14893 956.0
+637.76837 647.3
+676.68719 564.5
+676.71008 542.6
+783.50916 754.4
+795.87805 1140.6
+877.75067 595.0
+878.54816 673.0
+1019.61737 667.1
+1020.75024 724.1
+1186.40234 730.4
+1198.27356 3292.3
+1345.23108 628.3
+1375.35498 702.4
+1525.38208 959.8
+1755.31482 570.4
+1870.33618 932.1
+1875.81775 651.4
+1878.16162 863.3
+1878.79797 885.9
+1879.43201 5696.2
+1879.66821 17057.1
+1880.67407 558.6
+1881.38440 845.3
+1907.15784 7524.3
+1930.58765 865.0
+1936.52942 669.2
+S	3587	3587	1198.6738246
+Z	3	3592.746
+Z	2	2395.5
+465.52417 675.3
+508.91956 698.1
+531.34814 617.3
+532.60352 2468.3
+549.18604 839.3
+558.07104 628.8
+630.44781 851.2
+640.62231 615.9
+676.67114 1292.3
+686.98474 563.5
+731.18054 799.3
+795.87396 991.7
+810.76367 644.2
+958.78632 668.1
+1069.87585 667.7
+1198.34912 3480.6
+1468.49255 739.8
+1525.55420 997.4
+1878.41858 1027.3
+1878.82947 695.7
+1879.32495 1879.9
+1879.62219 19417.3
+1880.00964 1754.1
+1880.89099 726.4
+1907.17725 7200.0
+1907.47571 1153.1
+1930.71082 789.5
+S	3589	3589	1879.9758246
+Z	3	5636.652
+Z	2	3758.104
+532.62653 1840.2
+644.48065 632.7
+676.70502 1114.5
+795.87396 984.5
+798.23157 642.3
+924.71753 637.6
+985.34766 713.9
+994.32434 579.9
+1111.42053 701.3
+1193.68225 592.9
+1198.40198 3634.2
+1649.14343 685.2
+1872.23132 729.8
+1878.57043 1049.0
+1878.85974 2639.3
+1879.31091 2675.0
+1879.69739 17937.6
+1880.03699 2169.7
+1880.49475 2465.7
+1880.91748 1044.6
+1882.91016 679.4
+1895.34436 581.0
+1907.17456 7126.1
+1930.59021 787.8
+S	3590	3590	1907.60499127
+Z	2	3813.362
+Z	3	5719.54
+532.60913 1464.0
+535.37738 772.2
+630.42432 1067.5
+676.64575 1102.6
+792.79413 698.2
+795.87030 906.4
+939.96118 674.2
+1015.88812 640.1
+1019.62299 735.0
+1057.25403 913.5
+1164.22827 679.6
+1198.36475 3315.9
+1222.94751 749.0
+1355.30225 624.7
+1490.20105 601.7
+1525.47949 839.9
+1629.10059 630.3
+1809.58154 696.1
+1860.06079 794.9
+1870.46252 753.1
+1878.93811 1009.8
+1879.14966 1390.7
+1879.56177 19511.6
+1879.97668 1395.3
+1880.19202 1004.2
+1880.48621 978.1
+1881.45850 696.8
+1907.18237 7558.0
+S	3591	3591	1198.77640793
+Z	2	2395.705
+Z	3	3593.054
+326.92145 545.5
+343.93201 590.7
+411.93201 567.3
+482.62460 656.0
+482.66980 601.3
+488.41998 619.2
+493.53717 588.1
+532.65619 1665.0
+590.51141 571.6
+599.24609 710.6
+630.42969 660.0
+633.88580 606.2
+654.03290 556.2
+676.78302 686.2
+898.41486 595.6
+907.38800 658.6
+911.00220 631.1
+982.21906 622.0
+1019.64197 759.2
+1057.31934 1266.3
+1173.17236 641.4
+1188.13184 757.8
+1198.46924 2934.5
+1525.43372 900.1
+1629.95325 795.8
+1731.08496 843.7
+1845.05261 583.0
+1876.22180 955.9
+1877.60046 761.1
+1878.04773 954.7
+1878.77051 1137.3
+1879.06165 722.7
+1879.30945 1993.5
+1879.66992 20035.6
+1879.99500 2387.4
+1880.55884 1485.1
+1907.15698 7056.8
+1930.67542 1008.6
+S	3593	3593	1879.9758246
+Z	2	3758.104
+Z	3	5636.652
+532.53876 1675.3
+676.68768 1451.2
+699.98621 583.7
+731.10834 683.4
+771.35394 694.1
+780.37756 590.6
+781.05463 672.0
+795.86877 706.4
+822.98297 636.9
+990.83728 674.3
+1057.32947 694.8
+1059.44653 580.9
+1093.42310 651.8
+1160.25977 667.5
+1188.21790 688.4
+1198.20593 3362.8
+1257.84058 650.5
+1323.40698 867.8
+1411.76917 674.7
+1572.74438 557.4
+1633.52222 710.0
+1776.87524 785.7
+1823.48730 620.1
+1846.80273 569.2
+1872.98145 969.0
+1878.58191 1417.1
+1879.68103 18919.8
+1880.61890 1761.6
+1882.25134 819.1
+1894.64636 651.0
+1907.22229 7318.9
+1930.57678 812.4
+S	3594	3594	965.7314921
+Z	4	3858.89467
+263.23138 666.4
+271.15689 617.4
+325.84741 843.8
+366.48892 684.0
+366.82977 761.3
+438.59039 619.1
+482.65759 714.5
+532.60022 1911.6
+543.00977 726.0
+549.15381 885.1
+612.85364 621.3
+630.40356 665.1
+630.72870 706.2
+676.66553 1198.3
+690.95258 555.2
+693.29633 668.9
+730.06104 743.2
+795.88110 1099.5
+838.67194 675.7
+849.64044 653.3
+891.69244 739.6
+924.47125 929.4
+929.15326 949.2
+934.13281 1485.9
+934.45593 1193.9
+934.80750 973.7
+935.14661 932.0
+1018.51471 1289.0
+1018.84894 1643.2
+1019.18823 952.6
+1020.63123 620.2
+1041.92236 618.1
+1070.61011 719.9
+1133.56531 767.4
+1133.89551 778.8
+1188.29773 852.4
+1191.44727 649.0
+1198.34631 3288.8
+1239.14856 615.7
+1249.59863 623.4
+1386.21484 1275.8
+1386.69421 1455.8
+1387.20947 1083.9
+1401.21899 936.1
+1401.69458 936.3
+1527.79822 665.4
+1580.19714 633.5
+1655.23975 643.8
+1776.95923 703.6
+1875.61658 637.7
+1879.60596 20031.5
+1879.90588 2257.4
+1882.12549 719.8
+1907.19250 7578.9
+1930.57166 826.5
+S	3595	3595	740.9385746
+Z	5	3699.65375
+198.97096 879.8
+199.29166 794.1
+199.29755 710.6
+199.33376 746.7
+199.34526 782.1
+199.35275 572.3
+199.36255 1647.9
+199.37173 2118.2
+199.38014 1033.3
+199.38628 1073.8
+199.40471 634.2
+199.48300 553.8
+210.22993 680.7
+219.14581 553.9
+246.15572 861.2
+248.70177 620.9
+260.15833 652.6
+265.29285 650.7
+271.33539 858.0
+280.15341 772.5
+280.18021 807.6
+282.12866 681.7
+299.57605 838.1
+303.45990 612.6
+339.46725 554.8
+340.39954 646.7
+353.54395 604.2
+353.63654 655.5
+377.52066 621.8
+381.35980 769.9
+405.52280 680.1
+427.54233 658.9
+482.65625 851.0
+532.57428 1269.1
+545.65747 600.0
+549.15747 729.1
+584.79480 593.0
+586.05884 1725.7
+596.40021 692.1
+604.94757 695.7
+674.80084 916.6
+676.69470 983.8
+689.33313 1044.8
+711.10193 637.5
+720.16913 685.3
+721.26825 868.0
+723.43781 943.2
+731.12323 869.7
+741.42822 634.4
+778.70911 826.2
+779.95001 986.5
+795.87598 1148.6
+822.36353 648.7
+836.85870 659.4
+851.62994 874.4
+851.87305 773.6
+852.13019 774.0
+856.13385 1619.6
+856.38147 2341.3
+856.62299 1003.1
+859.12598 668.5
+860.38068 1447.5
+860.62921 3321.7
+860.88043 2674.6
+861.13165 2762.8
+888.89868 985.3
+899.08221 660.1
+911.33002 659.8
+918.45679 848.9
+950.16406 652.0
+1015.45929 742.1
+1019.62115 732.1
+1057.33374 679.3
+1198.29175 3058.8
+1265.87524 579.2
+1377.82520 716.2
+1378.29041 663.9
+1442.69666 584.8
+1618.95142 759.1
+1727.42859 648.7
+1826.09912 774.1
+1870.34094 1206.9
+1878.12805 730.8
+1879.12842 1512.9
+1879.69531 18485.3
+1882.53967 727.6
+1907.15820 7255.8
+1930.60852 850.9
+S	3597	3597	1880.04999127
+Z	3	5636.875
+Z	2	3758.252
+532.54242 1825.3
+548.47961 592.9
+572.30469 602.8
+616.52618 614.8
+676.61462 543.7
+676.67719 993.4
+705.21057 595.1
+731.12836 719.9
+795.85736 807.4
+963.36365 672.0
+1057.30762 1017.5
+1095.79492 636.5
+1188.34509 699.3
+1198.22034 2898.4
+1311.92603 756.1
+1483.17883 676.0
+1525.45886 997.8
+1574.26648 682.3
+1878.36938 794.4
+1878.92065 1031.2
+1879.65796 19285.1
+1881.25903 790.1
+1907.04993 7381.1
+1907.48083 789.0
+1930.61987 861.3
+S	3598	3598	761.4239971
+Z	4	3041.66469
+197.71201 670.7
+198.97041 900.8
+199.25652 1146.5
+199.26897 689.2
+199.34119 1656.4
+199.35454 2124.2
+199.36794 1520.4
+199.38028 476.1
+199.39319 641.6
+199.46523 704.7
+207.81613 646.0
+225.48773 611.9
+226.96857 589.0
+243.77379 637.7
+253.14909 595.8
+255.26837 581.7
+271.48138 662.6
+271.99832 664.2
+280.15436 632.4
+285.64679 547.0
+293.40317 618.8
+297.13086 891.7
+330.90942 680.3
+334.93100 624.0
+338.21698 614.9
+342.23074 684.3
+350.25351 668.5
+372.21292 608.5
+389.23868 980.6
+461.21399 696.9
+468.22430 768.0
+476.73386 2035.7
+477.23444 1225.4
+502.32526 1280.6
+525.26031 2008.7
+525.76282 1244.8
+532.56274 1466.2
+573.54553 739.0
+587.11383 615.2
+625.76062 679.6
+630.34576 598.3
+630.37933 792.3
+657.38287 6874.9
+657.88373 4631.0
+658.38641 1655.1
+661.02185 769.6
+661.35999 710.2
+667.53375 527.4
+667.54944 516.5
+672.89496 635.4
+676.67517 1388.8
+691.72955 1110.1
+692.06738 1600.2
+692.39893 1138.6
+692.91315 1599.6
+693.41687 1160.2
+697.40594 2128.8
+697.73871 3393.6
+698.07562 1000.1
+706.39276 787.0
+716.50372 741.7
+721.91724 788.5
+738.49719 691.2
+771.25140 667.3
+777.44910 2316.2
+778.71405 621.8
+794.84485 658.5
+795.88171 1394.7
+808.46411 786.8
+829.42474 2384.3
+829.93268 1071.8
+830.43396 842.9
+840.56097 661.5
+847.44873 728.8
+847.79236 901.4
+848.20581 646.1
+851.49060 1230.7
+851.99017 1042.2
+852.48907 695.5
+885.14758 1392.2
+885.47858 2649.6
+916.00574 1269.6
+916.52466 2249.3
+917.52673 1084.2
+928.15356 1324.7
+928.49304 848.3
+929.16736 836.1
+934.50256 1193.1
+934.99384 1952.6
+935.43921 1613.1
+952.46216 12351.8
+953.46375 6497.2
+954.46893 2060.5
+955.43671 572.8
+965.84589 730.0
+966.51929 1470.0
+967.11401 570.6
+979.20990 622.0
+989.07043 1110.3
+997.07684 4808.4
+997.57806 6426.3
+998.08185 3872.5
+998.58435 1349.0
+1004.58319 940.6
+1004.75629 621.9
+1005.57422 992.5
+1021.93750 718.0
+1037.57361 825.5
+1038.57971 728.5
+1045.60522 5163.6
+1046.10376 5964.6
+1046.60571 4216.9
+1047.11511 1765.1
+1061.59656 2334.5
+1062.59692 871.6
+1076.56311 2417.2
+1077.06824 2638.4
+1077.57092 2135.1
+1098.68311 638.0
+1146.49121 658.1
+1196.74634 631.3
+1198.26099 2985.9
+1230.04382 554.5
+1239.65735 595.6
+1271.18677 1017.8
+1299.42126 619.2
+1794.15027 731.1
+1878.68091 822.5
+1879.19055 2282.9
+1879.63391 19035.8
+1880.06311 1292.5
+1880.55786 1161.3
+1881.57190 686.4
+1904.03613 691.8
+1906.39709 1019.6
+1907.08447 6700.2
+1907.32886 994.7
+1930.41284 910.1
+S	3599	3599	761.4245746
+Z	4	3041.667
+198.97322 1125.8
+199.33144 684.7
+199.34132 903.0
+199.35342 1912.9
+199.36320 2174.1
+199.37395 1418.6
+227.02145 562.5
+233.57455 615.1
+236.00192 593.4
+237.85457 626.4
+241.00175 577.3
+246.61215 621.6
+250.68477 641.1
+260.19629 1705.4
+271.65121 643.7
+305.56863 597.2
+306.19785 620.6
+318.31241 564.6
+318.43893 663.0
+340.66992 633.4
+342.27826 779.4
+363.29547 603.4
+364.75687 678.0
+371.22791 2403.1
+389.23828 3525.0
+443.64932 588.3
+462.73633 1577.1
+463.23770 805.3
+467.72906 1266.1
+468.21753 1010.7
+468.72482 758.8
+469.21808 905.9
+476.73428 7910.6
+477.23581 3957.1
+477.73895 1246.9
+502.32230 4175.9
+503.32611 1351.3
+511.26318 1127.3
+515.31018 2077.6
+515.80945 1779.8
+516.25543 1545.1
+516.74951 920.3
+525.26001 5612.1
+525.76178 4911.6
+526.26221 1198.1
+532.52844 1527.9
+543.81921 1746.4
+572.46930 598.4
+574.28455 629.2
+580.33405 735.2
+586.31134 872.1
+587.84119 1935.8
+588.34485 1727.7
+600.84192 1132.2
+602.29578 1725.0
+602.79761 1862.3
+603.30566 715.0
+630.38287 4267.2
+631.37836 847.7
+657.38177 16269.5
+657.88452 17267.3
+658.38513 7435.7
+658.67175 547.7
+658.70837 534.9
+658.88641 2084.2
+661.02844 2149.9
+661.36029 3834.0
+661.69116 1453.3
+676.65979 960.4
+680.36469 1391.7
+680.70453 1571.8
+684.89795 1053.5
+691.40668 823.0
+691.73108 3486.2
+692.06256 6810.4
+692.39716 3942.8
+692.72974 1031.6
+692.91217 3687.1
+693.41595 2094.8
+693.91119 1503.2
+697.40485 7219.3
+697.73932 12704.1
+698.07343 10018.1
+698.40851 3514.0
+698.74384 1625.7
+706.39063 4405.8
+707.39185 2107.3
+713.92108 832.9
+714.34845 699.0
+718.04480 880.5
+724.35699 1874.0
+724.85712 2059.4
+730.91748 1139.3
+731.91840 661.4
+777.44904 9903.4
+778.45172 6089.9
+779.44928 1544.3
+792.78009 688.3
+794.94867 812.0
+795.88483 725.7
+805.09827 2468.0
+805.43329 1255.5
+805.76495 1467.3
+813.65863 883.0
+820.92065 760.3
+828.62952 740.1
+829.42554 4200.0
+829.92725 4931.8
+830.42712 2807.8
+830.92853 950.4
+839.37866 2881.7
+840.21509 658.8
+840.37805 1431.2
+847.78589 873.2
+851.48517 2573.0
+851.99048 3374.4
+852.48737 2646.0
+852.99463 630.4
+858.04974 784.8
+872.36725 637.2
+885.14417 2725.2
+885.47906 6810.6
+885.81409 8822.0
+886.14667 3034.6
+886.48804 1436.8
+890.53320 1708.4
+907.98804 871.5
+916.01404 1738.6
+916.52222 7376.3
+917.01227 2309.4
+917.53058 5183.0
+918.53113 1510.5
+920.04041 1286.3
+920.54224 2750.5
+921.04370 1743.5
+926.48816 1079.6
+928.15833 1547.4
+928.49463 6397.0
+928.82678 5030.5
+929.16132 2768.5
+929.49390 1121.4
+934.50177 5369.7
+934.99585 8301.6
+935.48181 5578.9
+936.00458 2181.4
+936.44269 3297.3
+948.55823 780.4
+952.46112 36828.6
+953.46405 21971.9
+954.46649 6561.6
+955.46521 1149.9
+956.45618 1010.5
+965.85095 1841.2
+966.18982 3593.0
+966.52399 2216.1
+966.86041 2691.5
+967.19543 1009.2
+972.55591 999.6
+973.05310 1055.1
+973.56250 913.5
+987.54309 821.7
+988.56378 1138.4
+989.06769 3091.3
+989.56958 1498.6
+991.03485 1060.8
+991.54077 2066.9
+997.07697 10606.4
+997.57886 17976.7
+998.07996 13906.7
+998.58185 5513.2
+999.07825 1468.4
+1004.57477 3726.9
+1005.58502 2364.5
+1019.55133 1447.2
+1020.05011 1235.4
+1020.55365 814.8
+1029.61755 1218.6
+1030.61682 1365.2
+1037.10229 1751.3
+1037.58655 2411.1
+1038.09558 835.5
+1038.58838 897.6
+1044.56958 2307.1
+1045.60559 11362.3
+1046.10498 19417.8
+1046.60718 15041.0
+1047.10608 6797.4
+1047.61169 1287.0
+1061.59485 7841.8
+1062.59680 4987.6
+1063.59717 1228.7
+1071.63123 666.8
+1076.56714 4154.2
+1077.07068 7792.7
+1077.57288 4805.5
+1078.06812 1973.2
+1078.57324 1392.7
+1086.63635 938.4
+1133.10364 975.1
+1133.61304 2617.0
+1134.10754 1436.0
+1174.68042 1558.2
+1175.69678 888.4
+1188.26636 920.5
+1198.18372 3001.3
+1200.67651 1304.0
+1201.67529 1143.4
+1213.65039 656.6
+1217.70850 1158.9
+1218.99280 652.0
+1271.16931 1203.5
+1271.67517 1847.3
+1272.18347 964.6
+1363.25903 650.0
+1388.54651 612.4
+1392.25232 1015.5
+1392.73499 851.1
+1521.17542 608.2
+1525.42322 695.7
+1652.66211 640.6
+1677.14453 692.4
+1715.49756 702.7
+1732.13318 689.6
+1764.96423 590.5
+1878.29834 1257.1
+1878.75000 964.3
+1879.60596 19449.4
+1879.87292 3249.8
+1880.47278 897.1
+1880.95056 1059.3
+1906.63855 696.5
+1907.03589 7127.1
+1919.05688 817.5
+1930.61389 901.3
+S	3601	3601	1880.11040793
+Z	3	5637.056
+Z	2	3758.373
+505.81461 578.6
+532.55786 1857.1
+536.69769 638.8
+537.94061 590.5
+549.14703 809.2
+550.00226 703.7
+573.31525 647.6
+599.37360 611.0
+655.21948 599.2
+656.74347 706.9
+676.67859 890.7
+695.00305 623.7
+787.05377 615.0
+795.88513 1197.3
+852.48364 605.4
+889.61133 591.2
+947.77850 732.7
+950.65210 622.2
+979.54962 587.9
+1015.45947 754.9
+1019.66156 782.6
+1121.25317 733.8
+1188.12329 633.1
+1198.25110 3271.5
+1208.56287 650.2
+1237.27075 630.9
+1310.64905 634.1
+1524.29077 699.9
+1525.36755 878.5
+1548.79065 616.8
+1581.55115 673.1
+1627.30652 776.5
+1677.65637 625.7
+1762.78491 689.4
+1854.67236 712.2
+1876.91394 728.8
+1878.62000 698.4
+1879.34607 3629.0
+1879.64868 19444.7
+1907.05945 7204.1
+1907.33325 1578.9
+1930.57996 1105.4
+S	3602	3602	1299.9575746
+Z	4	5195.799
+369.40121 585.7
+379.29788 672.5
+427.53189 750.9
+437.38562 555.3
+442.06854 662.8
+451.56122 651.0
+482.63904 850.6
+494.79214 573.3
+525.81677 859.1
+532.53882 1823.5
+538.29889 1026.2
+549.14545 696.1
+630.39270 906.6
+633.04102 686.6
+676.61768 902.4
+744.46509 701.0
+795.87823 1001.9
+850.80365 601.0
+865.59052 592.9
+1014.89380 1142.0
+1015.22400 2538.2
+1015.56635 1439.1
+1019.63068 772.2
+1046.10730 1193.9
+1076.56934 1521.6
+1077.06897 1817.9
+1077.56799 712.0
+1086.92224 719.4
+1134.87476 621.0
+1198.19800 2968.9
+1267.61182 679.9
+1274.95557 845.1
+1344.82874 601.7
+1489.25208 666.9
+1509.63916 600.8
+1517.33252 571.2
+1521.32678 3256.2
+1521.83057 11254.9
+1522.33325 9004.5
+1522.83447 3329.0
+1768.94800 655.2
+1800.00879 813.9
+1879.12024 1281.3
+1879.59082 18776.1
+1879.84863 2644.8
+1880.05139 3337.7
+1880.58813 947.8
+1906.70715 786.4
+1907.04639 7309.9
+1907.36523 819.8
+1930.58276 852.8
+S	3603	3603	761.4208246
+Z	4	3041.652
+198.95813 1339.6
+198.96979 2190.0
+199.27080 2286.6
+199.29893 1596.2
+199.33943 2860.4
+199.35139 2896.0
+199.36087 4527.6
+199.36998 3536.3
+199.38762 2011.2
+199.45895 1641.2
+199.46681 2191.6
+205.13225 1399.2
+231.28464 1390.8
+248.42899 1269.5
+260.19736 2223.1
+271.50183 1831.7
+280.16553 1300.0
+308.88779 1485.9
+329.37469 1304.8
+341.15628 1432.2
+350.27939 2129.0
+371.22754 1962.3
+389.23871 6058.3
+410.57162 1429.0
+427.52209 1359.2
+440.28830 1541.0
+467.73007 3240.5
+468.21951 4012.9
+468.72116 3645.1
+476.13791 1278.7
+476.73376 13861.9
+477.23563 7604.7
+477.81760 1684.2
+502.32169 9541.1
+502.79031 2717.4
+503.32269 1522.8
+515.31079 3527.2
+515.80951 3169.4
+516.25269 2890.2
+516.74597 4475.5
+517.24622 3047.7
+525.25970 11888.5
+525.76086 8384.0
+532.57898 4968.3
+543.03119 1483.1
+544.31812 1668.0
+571.30176 1399.1
+579.32953 1602.4
+587.84259 2853.2
+588.34357 3004.9
+600.83533 1858.2
+602.29852 3762.4
+602.79547 3025.1
+603.29626 2873.7
+615.58740 1490.6
+630.37897 6258.1
+652.20062 1300.1
+657.38190 37830.1
+657.88446 26693.4
+658.38550 12078.1
+661.02661 3877.2
+661.36096 5571.9
+661.69080 1632.0
+676.67383 2093.4
+680.36792 4068.9
+680.71448 1988.3
+684.40051 1677.0
+691.72974 10033.7
+692.06390 11751.2
+692.39777 6880.8
+692.72992 3537.0
+692.91162 6603.6
+693.41046 5533.9
+697.40356 18046.6
+697.73840 21199.2
+698.07324 12928.6
+698.40631 6416.8
+706.39044 8624.4
+707.39331 3761.2
+718.04376 1904.7
+724.35889 4682.9
+724.85962 4707.4
+731.41895 2199.2
+777.44775 18520.9
+778.44751 8519.0
+779.45697 2873.8
+795.86902 2999.9
+805.09979 5142.8
+805.43408 2468.4
+819.47577 1576.7
+829.42548 11198.4
+829.92719 9238.1
+830.42981 6723.6
+839.37646 4052.4
+840.37805 3642.0
+847.46637 1430.6
+848.12793 2101.3
+851.48755 8138.8
+851.98877 8933.1
+852.48981 3939.5
+858.01874 1566.1
+885.14563 7695.6
+885.47900 13490.5
+885.81476 7185.5
+886.15057 7338.5
+890.52850 3096.2
+916.01007 5076.7
+916.52295 14158.3
+917.01837 2797.3
+917.52997 8592.7
+920.03937 4380.7
+920.54279 5750.9
+921.04572 2652.5
+925.98578 3379.8
+926.47919 1421.2
+926.99036 1528.7
+928.15961 6228.5
+928.49231 8653.1
+928.82837 7338.5
+929.16284 3442.8
+934.50165 11064.9
+934.99469 13340.7
+935.44507 8758.7
+935.99695 3532.9
+936.43610 3957.7
+952.46057 72003.3
+953.46375 37675.0
+954.46411 12302.4
+955.47198 1536.8
+965.85541 4369.5
+966.18903 6290.9
+966.52112 7910.8
+966.85425 3191.5
+973.05560 3198.0
+988.56348 3624.4
+989.05463 2118.4
+989.57263 2032.2
+991.04211 2183.6
+991.53149 2706.0
+992.03821 3601.0
+997.07648 30268.6
+997.57794 34385.2
+998.07898 20292.3
+998.58173 7327.9
+999.08044 3068.5
+1004.57697 8435.5
+1005.58313 3858.5
+1019.54688 2470.4
+1020.04456 2547.6
+1020.56458 1912.6
+1029.60791 3417.6
+1030.61096 2524.5
+1037.08667 4736.8
+1037.59460 5071.6
+1038.09497 2929.5
+1044.56921 3707.9
+1045.60352 28564.6
+1046.10364 36670.6
+1046.60608 23045.1
+1047.10657 11209.4
+1047.61011 3039.8
+1057.29309 2605.8
+1061.59534 15308.8
+1062.59644 6636.0
+1063.60071 1688.5
+1076.56726 10469.3
+1077.06860 13463.1
+1077.56787 10495.8
+1078.07324 4611.7
+1085.57654 1402.8
+1086.63135 1588.6
+1123.29504 1970.4
+1133.11328 2712.7
+1133.60974 7222.2
+1134.11511 2161.5
+1174.67700 3225.3
+1187.97375 1628.4
+1198.29773 7066.1
+1200.68201 2735.5
+1204.69922 1475.2
+1207.14758 2088.1
+1271.17004 2781.7
+1271.67310 2741.6
+1313.76648 2077.9
+1341.69873 1573.7
+1361.81665 1292.1
+1391.72998 2322.8
+1392.71326 1879.5
+1411.09668 1516.4
+1525.33679 1878.1
+1776.15344 1412.8
+1872.17065 1847.4
+1876.58740 1564.5
+1877.31018 1690.2
+1878.92322 1909.2
+1879.63184 42303.7
+1879.90491 8369.5
+1880.68518 2291.7
+1907.04297 18040.8
+1930.52661 2508.2
+S	3605	3605	1880.0998246
+Z	2	3758.352
+Z	3	5637.024
+532.59827 1636.3
+646.30463 610.4
+676.70081 1172.0
+727.47357 708.3
+795.86725 801.5
+918.17444 839.9
+1019.69525 684.0
+1057.33728 1082.5
+1112.01550 646.0
+1172.25867 808.8
+1185.40149 596.3
+1198.34277 3107.6
+1687.80737 606.1
+1770.79785 648.3
+1878.62158 693.3
+1878.82690 723.6
+1879.21216 1385.7
+1879.69958 19650.3
+1880.02576 898.4
+1880.20068 1126.0
+1880.52612 1446.5
+1880.81128 1385.1
+1906.87512 628.5
+1907.17273 7216.8
+1930.65271 1216.9
+S	3606	3606	965.4891846
+Z	4	3857.92544
+255.28369 611.7
+256.35614 584.2
+271.35129 769.6
+328.23325 628.3
+335.31689 633.0
+342.23077 565.8
+358.99084 551.1
+368.00037 539.1
+368.54474 593.4
+430.28598 625.1
+482.64786 696.4
+532.58295 1869.1
+557.52759 608.1
+573.21301 605.4
+585.48950 589.8
+586.10779 601.7
+593.86188 644.3
+630.39838 781.6
+676.66937 1105.3
+697.73181 692.3
+705.24402 721.5
+731.08740 643.5
+775.83270 608.7
+808.03259 699.9
+858.03577 614.6
+865.44061 600.2
+924.80536 816.0
+934.13239 1805.8
+934.46368 2381.1
+934.79822 2401.1
+935.13135 1240.4
+935.84625 546.7
+935.91248 666.5
+940.37390 702.8
+942.67883 780.4
+989.49500 1025.7
+1018.51715 1154.6
+1019.18073 1046.0
+1055.58032 678.8
+1133.89807 1117.4
+1137.86084 751.6
+1165.47510 561.6
+1187.96252 806.0
+1198.16345 619.2
+1198.30249 3338.6
+1233.34143 709.6
+1261.66394 705.4
+1266.14685 639.2
+1386.21143 758.7
+1386.70837 1727.9
+1387.21423 1834.6
+1400.70447 724.1
+1401.20642 1512.3
+1401.70215 901.4
+1402.18896 955.4
+1525.37988 852.6
+1876.45032 659.1
+1879.62354 19930.4
+1879.87756 987.2
+1880.52136 1089.1
+1907.13428 6731.8
+1930.53613 918.5
+S	3607	3607	736.742241267
+Z	3	2206.951
+Z	2	1471.637
+195.89864 568.3
+198.87250 694.1
+198.97168 848.3
+199.26376 752.0
+199.34084 1199.1
+199.36188 2800.7
+199.38029 935.1
+199.45880 693.0
+199.47672 782.2
+271.02869 711.7
+280.20251 782.4
+311.13379 722.2
+311.33340 580.1
+337.38196 679.3
+343.02454 669.0
+357.75079 696.2
+359.93811 660.6
+371.55087 591.4
+373.22076 1101.1
+381.38455 953.0
+390.20828 1051.6
+415.88281 658.5
+447.23004 3101.1
+450.07205 618.1
+500.00412 579.3
+513.24591 584.0
+532.58783 2158.8
+536.23669 3152.1
+537.24188 2211.6
+546.29767 2270.4
+548.28363 986.4
+558.73157 627.6
+603.07483 730.7
+619.79419 1121.9
+620.29285 992.5
+621.08795 658.9
+625.84735 708.1
+630.44147 688.2
+633.84198 1140.8
+635.30188 1656.1
+636.30432 1713.4
+650.27875 1330.4
+650.61237 2009.7
+650.94708 1074.1
+666.99365 610.5
+676.68091 937.1
+689.33008 793.4
+698.57751 718.8
+699.66193 1291.1
+700.28571 715.9
+709.36005 3956.5
+710.36218 1631.7
+712.04407 643.9
+714.24365 873.3
+749.29919 732.4
+782.83221 702.0
+789.34265 2501.1
+795.87671 1286.0
+809.15741 673.4
+817.82098 848.0
+822.44354 1946.3
+823.44757 827.9
+824.86359 2693.1
+825.36005 1427.9
+825.86334 749.8
+882.37762 773.1
+906.17395 646.5
+910.88831 1082.4
+923.49213 3753.2
+924.49500 1394.0
+930.44702 1273.5
+931.46259 1730.6
+932.45618 958.2
+939.39294 1434.8
+939.89941 2194.6
+940.40686 948.9
+963.87354 754.4
+963.97015 724.3
+974.91711 1484.7
+975.41595 1289.7
+975.91449 1317.1
+1003.79712 749.2
+1061.53577 714.1
+1070.55652 2855.1
+1071.56274 1757.6
+1079.44714 706.7
+1084.58984 733.9
+1137.52710 939.4
+1188.02417 872.5
+1198.31506 3276.1
+1238.57617 990.3
+1239.54688 776.0
+1281.24463 632.3
+1511.26501 669.5
+1525.28186 536.5
+1525.48560 660.9
+1624.39563 639.6
+1878.00476 1085.0
+1879.33997 2045.5
+1879.63684 19878.9
+1880.58704 724.9
+1881.24988 1045.2
+1907.11975 7590.7
+1918.96790 1212.1
+1930.74744 1005.6
+S	3609	3609	1880.0798246
+Z	3	5636.964
+Z	2	3758.312
+532.60828 2518.2
+630.40424 795.9
+676.67902 985.6
+703.00555 599.9
+731.11060 637.6
+776.05206 669.0
+785.42920 629.4
+795.89258 1095.3
+808.08276 626.3
+849.59821 720.3
+870.24493 717.2
+1019.68109 734.1
+1198.36145 3845.1
+1309.29114 738.2
+1410.09326 680.8
+1525.38147 861.3
+1798.71741 646.5
+1870.83801 615.8
+1872.74890 701.6
+1878.30908 802.0
+1878.48608 646.6
+1879.24829 1788.4
+1879.65210 19750.6
+1880.12415 1365.2
+1880.99622 1079.2
+1881.35583 826.0
+1906.82751 1607.6
+1907.11560 6536.9
+1983.49780 718.1
+S	3610	3610	1907.5388246
+Z	2	3813.23
+Z	3	5719.341
+530.47803 604.2
+532.66345 1881.4
+553.27191 600.1
+577.92059 668.1
+604.21448 574.7
+645.56598 596.3
+676.69153 982.5
+761.93921 609.7
+779.48401 662.4
+795.86639 1037.8
+836.10498 611.9
+1138.06750 590.5
+1198.48425 3919.1
+1525.30774 975.3
+1678.12646 686.6
+1878.52295 895.5
+1879.35474 1979.2
+1879.68799 20121.8
+1880.03101 1601.4
+1880.92139 891.0
+1907.11108 7084.5
+1916.89868 678.4
+1918.99243 681.3
+1930.51099 1209.9
+1930.80481 684.0
+S	3611	3611	1198.77699127
+Z	2	2395.706
+Z	3	3593.056
+317.31488 607.1
+335.99249 627.2
+342.25833 761.8
+343.47031 558.4
+532.55444 596.9
+532.59015 1535.6
+538.75134 721.5
+583.74463 645.1
+795.86938 922.7
+943.47510 626.6
+951.97400 578.6
+1014.54449 871.3
+1014.88721 1357.2
+1188.22559 885.6
+1198.31445 3459.6
+1389.39734 608.6
+1471.22668 1711.4
+1471.73535 1611.4
+1525.37939 871.0
+1776.97644 814.2
+1827.58240 648.0
+1878.83630 2301.1
+1879.60144 18487.3
+1880.11792 1580.5
+1880.31128 1564.6
+1881.32141 642.1
+1882.90771 837.7
+1907.12634 7641.5
+S	3613	3613	635.809991267
+Z	2	1269.772
+Z	3	1904.155
+166.21301 642.2
+169.51039 900.7
+188.20062 952.1
+188.22038 568.2
+188.24052 648.5
+188.26575 1021.1
+188.29207 574.9
+188.31351 647.7
+188.33301 598.5
+198.97112 898.8
+199.27364 757.7
+199.32495 619.6
+199.33493 1150.2
+199.34685 1010.5
+199.36047 1729.1
+199.37259 1487.1
+199.39278 1021.8
+199.43373 688.2
+226.91396 712.4
+243.97145 543.1
+252.47795 720.5
+272.12454 671.4
+280.85034 742.7
+311.84323 668.0
+323.50021 726.1
+342.30927 646.1
+344.12488 599.8
+350.30170 809.2
+393.57596 543.2
+394.64868 663.4
+399.72302 629.7
+427.58844 735.1
+428.85010 801.7
+432.27573 632.9
+495.68744 562.2
+524.08270 662.3
+532.60999 1804.5
+549.20947 877.9
+563.72424 608.9
+591.35413 982.0
+630.47229 762.8
+676.67419 1128.1
+682.38000 1034.7
+691.10516 571.9
+725.88068 1097.2
+726.38428 840.3
+731.19324 732.9
+795.87683 1129.8
+797.72064 803.4
+839.93695 3622.5
+840.43768 836.8
+858.12701 926.5
+879.18036 634.4
+1022.71106 703.6
+1031.26526 712.4
+1112.48193 662.7
+1188.32776 983.2
+1198.36401 3487.5
+1428.75439 786.7
+1525.56836 1163.4
+1776.92432 978.8
+1825.94788 719.8
+1878.12195 780.0
+1878.62036 1104.1
+1879.35303 3171.3
+1879.64771 19103.5
+1880.75757 738.4
+1880.87378 714.1
+1881.19482 1165.1
+1907.16467 7496.6
+S	3614	3614	1880.03499127
+Z	3	5636.83
+Z	2	3758.222
+532.57190 2241.0
+549.15900 617.9
+676.67114 1298.4
+685.75574 673.6
+743.15143 591.2
+743.31219 686.4
+756.39154 533.0
+777.66595 594.1
+781.12897 745.8
+795.87665 791.3
+1002.40826 642.7
+1188.28564 862.7
+1198.28149 3299.8
+1525.39526 805.6
+1601.74609 647.9
+1667.22180 666.1
+1708.86108 728.5
+1870.28870 916.7
+1879.22375 3033.9
+1879.61536 19927.7
+1880.02515 2816.3
+1880.47815 980.5
+1880.83032 903.5
+1881.93701 648.8
+1907.14783 7055.7
+1930.63135 1347.0
+S	3615	3615	965.9908246
+Z	4	3859.932
+255.29680 652.1
+256.08878 762.6
+268.34039 613.1
+271.78494 648.0
+301.56418 580.1
+325.88004 759.3
+342.28003 860.7
+350.28546 1018.4
+350.90076 648.7
+409.06192 579.7
+427.55212 927.2
+459.31531 618.3
+482.66534 687.8
+532.60657 1683.7
+549.16357 829.0
+601.86359 635.3
+602.41589 625.0
+614.91547 707.9
+630.42590 873.3
+674.73364 710.0
+676.65259 565.3
+759.75488 702.8
+779.27435 694.2
+792.70361 601.5
+808.17584 591.2
+929.93866 596.1
+934.46033 642.7
+1019.66187 752.8
+1039.15247 611.3
+1057.27869 1068.2
+1198.36572 3131.7
+1314.69153 636.2
+1363.80005 669.9
+1643.22534 625.6
+1873.07190 804.6
+1876.84656 689.9
+1878.44031 1264.6
+1878.85364 1239.5
+1879.25317 1605.2
+1879.64954 18654.9
+1880.02527 3452.8
+1880.31750 1058.5
+1880.88635 1001.0
+1881.49585 649.7
+1884.15576 666.5
+1907.09155 7133.7
+1930.70325 614.8
+S	3617	3617	1880.07340793
+Z	3	5636.945
+Z	2	3758.299
+510.05103 593.3
+530.55176 549.9
+532.64526 2252.8
+549.17041 676.1
+596.34369 602.2
+676.69171 1219.7
+680.85406 672.5
+782.34113 641.0
+782.96533 575.8
+795.89087 1040.5
+847.34467 584.5
+975.80756 622.4
+1030.16260 601.8
+1145.90503 673.6
+1198.44812 3112.4
+1267.53345 664.9
+1277.23608 664.2
+1304.99426 672.7
+1558.39221 733.8
+1650.81714 692.9
+1877.76526 1101.5
+1878.18945 896.9
+1878.76538 1506.5
+1879.17383 834.2
+1879.43408 3162.4
+1879.68030 19594.7
+1880.15552 706.4
+1880.56726 952.5
+1880.82605 835.4
+1881.19971 974.8
+1881.51990 862.8
+1907.01001 6898.7
+1930.71741 774.9
+1990.38684 655.5
+S	3618	3618	887.940991267
+Z	3	2660.548
+Z	2	1774.034
+232.68513 3071.2
+233.55646 3689.9
+256.43323 3478.8
+259.88263 3479.5
+260.97662 3464.9
+267.69260 3182.3
+280.16260 3635.3
+308.87769 4427.8
+327.94522 3192.3
+344.64182 3340.4
+349.26157 3299.2
+399.89984 3408.6
+403.26968 3001.8
+450.98950 3722.0
+532.62573 10744.0
+575.99030 3800.4
+617.84998 3583.9
+630.35577 5139.7
+645.43610 3483.1
+668.40338 3355.9
+676.69641 4792.1
+702.94965 3461.3
+731.07013 3646.4
+795.88074 5046.1
+1019.65765 4602.0
+1181.57019 4738.8
+1182.08813 7690.2
+1198.39905 17594.7
+1459.49487 3061.0
+1592.18445 3343.3
+1761.39258 3333.3
+1776.97351 4072.9
+1778.23145 3326.7
+1874.48242 3723.1
+1878.74353 7714.6
+1879.05127 9675.8
+1879.67834 100308.5
+1879.99585 20265.8
+1880.33044 5807.9
+1880.65649 8022.3
+1880.95154 4055.2
+1881.23840 4768.0
+1906.78076 6275.9
+1907.08508 40485.5
+1930.48145 4863.1
+S	3619	3619	1907.3788246
+Z	2	3812.91
+Z	3	5718.861
+532.63904 1416.8
+630.37994 947.3
+657.56201 634.6
+676.66498 742.4
+741.37354 660.1
+814.72870 651.3
+829.04266 729.4
+920.03741 620.9
+940.78125 611.5
+953.81244 626.4
+986.39148 631.7
+991.96155 628.5
+1007.78192 546.8
+1057.28967 1084.8
+1112.43872 618.2
+1198.43469 3256.4
+1253.15991 694.6
+1296.76807 750.1
+1299.27966 632.1
+1509.11609 724.7
+1525.34546 998.7
+1876.39783 661.6
+1876.68396 698.8
+1879.61292 19475.4
+1880.34924 673.4
+1882.80200 693.8
+1907.17908 7207.2
+1930.52881 1108.0
+S	3621	3621	887.939407933
+Z	3	2660.543
+Z	2	1774.031
+246.05325 614.9
+301.31995 530.2
+325.03995 658.0
+332.02637 682.3
+336.37048 537.3
+401.44040 650.1
+406.08563 648.3
+427.53336 1020.4
+447.16101 581.8
+459.53195 556.0
+523.15857 621.2
+532.66760 1803.8
+572.34198 817.1
+619.05853 795.0
+630.38684 883.8
+755.30115 664.6
+799.46466 827.5
+843.49426 1618.6
+858.03235 601.4
+1018.59082 694.5
+1033.35632 660.9
+1057.30835 739.8
+1116.76538 670.0
+1157.35352 677.2
+1178.07092 568.9
+1181.58423 1710.7
+1198.48779 3163.1
+1382.47644 646.7
+1525.36987 871.6
+1667.49292 608.4
+1667.66675 547.4
+1872.35730 635.4
+1878.96655 987.0
+1879.62708 19481.2
+1880.32788 1548.0
+1880.89185 747.2
+1907.16394 7424.2
+1919.00781 733.5
+1930.52954 901.4
+S	3622	3622	1880.0518246
+Z	2	3758.256
+Z	3	5636.88
+532.62238 2215.6
+547.42926 604.4
+549.13226 731.9
+630.38159 1066.6
+638.92151 588.8
+676.66211 878.5
+694.15887 681.5
+704.10181 539.2
+731.11255 696.1
+748.00104 643.1
+795.90277 1115.1
+858.02271 672.8
+953.50226 637.6
+1020.80353 609.8
+1057.27393 886.7
+1088.76636 559.5
+1134.30969 599.7
+1139.69556 579.7
+1198.12427 665.2
+1198.39490 3153.1
+1301.90149 618.9
+1348.21008 658.9
+1365.48352 712.4
+1875.55493 636.4
+1877.67041 707.7
+1878.65210 831.6
+1879.24158 2441.5
+1879.59180 19690.8
+1879.91821 2508.7
+1880.45752 717.1
+1907.20728 7300.5
+1907.46338 1379.8
+1930.53711 1105.1
+S	3623	3623	888.938991267
+Z	3	2663.542
+Z	2	1776.03
+240.64134 644.6
+301.18637 1843.9
+309.19061 1038.3
+327.40991 589.6
+343.61133 661.5
+353.21576 1234.1
+356.50684 690.1
+387.23312 778.3
+397.24167 992.6
+407.72919 569.9
+423.51746 801.7
+427.53848 858.5
+429.24881 779.2
+431.26184 707.5
+431.59180 553.3
+441.26910 1226.8
+471.28983 1158.1
+473.27362 962.7
+485.29587 1816.6
+486.29831 610.7
+491.21307 656.9
+505.70349 626.6
+519.31439 636.4
+529.32031 1249.3
+532.60883 2180.6
+543.21191 786.1
+556.59039 624.7
+561.32764 1686.5
+572.33728 2769.8
+573.34741 1536.2
+579.33606 870.3
+605.35382 1432.0
+614.25525 1404.6
+617.37335 953.8
+623.36017 976.0
+623.68311 669.6
+630.39746 782.5
+632.26825 1076.3
+649.37476 1197.7
+667.39264 1019.9
+673.38452 3417.7
+674.37701 816.6
+676.66150 1325.5
+693.40576 987.4
+727.34302 876.7
+745.35504 1713.0
+755.44196 1743.4
+779.94934 612.9
+780.73419 703.7
+780.97491 663.1
+781.45044 911.1
+786.46918 2862.0
+795.88818 704.1
+799.46350 2494.9
+843.49475 4545.0
+844.49438 1003.8
+859.55157 649.5
+941.44098 704.1
+959.49896 1585.0
+959.99860 1490.7
+1012.57599 550.1
+1016.54895 1224.6
+1042.56042 728.3
+1046.00085 1208.6
+1078.53113 687.9
+1079.01416 902.6
+1087.52100 1132.3
+1088.03101 695.2
+1144.06384 1775.9
+1144.57568 1446.9
+1172.57520 2012.5
+1173.07874 2940.0
+1173.58411 1179.9
+1181.58203 4036.4
+1182.08179 3958.1
+1182.57959 1845.6
+1198.36768 3399.1
+1425.44946 920.6
+1489.62988 734.5
+1525.42969 821.6
+1709.21375 874.2
+1850.90198 678.9
+1879.59326 19017.5
+1880.05347 1255.5
+1880.65601 896.1
+1881.77856 731.3
+1907.14282 7586.6
+1930.59802 1023.8
+S	3625	3625	1880.1288246
+Z	2	3758.41
+Z	3	5637.111
+532.64789 1995.1
+636.42645 604.5
+659.07416 552.1
+682.57391 877.4
+795.86896 855.8
+889.54413 611.6
+942.42059 635.2
+1019.72577 656.7
+1022.05829 722.6
+1060.98157 576.9
+1067.49255 558.9
+1110.67761 954.9
+1198.45557 3493.6
+1267.12927 694.4
+1275.29358 621.3
+1525.47998 785.7
+1612.30457 677.1
+1870.21912 834.0
+1879.65796 19297.0
+1882.43811 1083.7
+1907.21533 7196.9
+1987.92932 684.3
+S	3626	3626	1907.53240793
+Z	2	3813.217
+Z	3	5719.322
+532.66888 1630.6
+549.13947 725.8
+608.85553 740.2
+630.38678 854.3
+702.23419 647.3
+1198.49817 3362.8
+1228.65833 662.1
+1353.57361 610.5
+1412.41760 572.4
+1437.96912 771.3
+1512.01550 637.5
+1877.44482 840.7
+1878.59277 1212.8
+1878.87781 1733.4
+1879.22461 2717.0
+1879.68481 17049.2
+1880.06409 2708.1
+1880.53564 2398.8
+1880.91077 886.9
+1907.17676 7582.5
+1930.53870 795.8
+S	3627	3627	1198.8158246
+Z	2	2395.784
+Z	3	3593.172
+324.94470 581.7
+354.28842 648.5
+375.42358 673.3
+427.51355 785.8
+526.49573 638.6
+532.62128 2155.6
+549.12073 656.5
+560.07892 710.9
+573.08856 663.4
+594.88861 572.5
+630.36646 783.6
+652.96307 800.7
+676.67566 999.5
+676.72369 754.3
+686.08936 568.3
+709.40192 571.9
+768.65509 721.0
+793.01373 580.6
+810.04730 610.8
+953.90363 665.1
+954.76624 618.0
+1010.70538 639.6
+1026.07556 596.7
+1128.09802 739.9
+1198.39893 2880.7
+1198.51282 611.4
+1403.28784 746.3
+1540.29919 655.9
+1776.99597 805.8
+1878.89490 1351.1
+1879.36597 3150.2
+1879.63965 18920.0
+1880.39038 858.5
+1907.14233 7259.7
+1919.08142 826.2
+1922.98853 777.7
+1930.46375 1093.5
+1987.76355 716.4
+S	3629	3629	761.4283321
+Z	4	3041.68203
+196.85927 693.2
+198.96909 911.4
+199.26578 1062.9
+199.33733 1050.3
+199.36221 3560.1
+199.38687 619.7
+199.46059 926.3
+209.45914 611.1
+214.52167 588.0
+223.51186 553.8
+229.93213 537.3
+238.67583 622.4
+255.03810 549.0
+307.26508 633.3
+323.74799 629.6
+337.86108 610.5
+342.85117 650.3
+345.23276 614.9
+373.68167 608.6
+389.23877 983.5
+413.86218 680.7
+467.73218 1143.2
+476.73380 3288.3
+478.08664 646.3
+502.32150 1360.1
+515.30658 990.8
+525.26074 2665.6
+525.76196 1290.9
+532.63788 1559.9
+549.16980 778.3
+630.37360 1095.4
+630.42419 976.9
+631.38159 917.6
+657.38190 7991.4
+657.88214 4091.9
+658.38403 1163.3
+661.33246 573.1
+676.67053 1150.9
+691.73346 1567.7
+692.39685 1476.2
+693.40759 680.2
+697.40619 3560.9
+697.73718 3225.6
+698.07178 1819.8
+698.40924 846.2
+706.38885 1294.8
+709.83655 682.6
+712.02588 698.6
+712.88782 569.5
+724.36224 752.8
+731.14001 752.8
+777.44934 3298.8
+778.45422 1693.5
+785.02179 599.4
+795.87115 1086.7
+804.75940 901.4
+829.42401 1189.8
+829.92810 1872.4
+830.40637 607.0
+830.94275 755.6
+839.37872 1015.8
+885.14618 1857.8
+885.47266 1637.1
+885.81274 1585.6
+891.27887 658.8
+916.00586 794.0
+916.52130 2335.7
+917.52936 1042.7
+920.04089 930.5
+928.15875 1467.7
+928.49194 1689.2
+928.82410 1360.5
+929.49261 737.6
+934.49628 2389.7
+934.99414 2291.2
+935.44958 1587.8
+936.43726 1057.4
+952.46185 13045.0
+953.46472 6489.4
+954.47217 1318.6
+965.85651 744.7
+966.18671 1985.2
+966.52661 947.4
+966.84894 878.0
+997.07788 5438.9
+997.58002 5238.8
+998.07758 3723.7
+998.57880 776.4
+1005.58539 769.7
+1011.06360 537.8
+1012.42566 693.0
+1029.61316 701.3
+1036.21594 618.3
+1037.08093 1056.5
+1044.56995 1417.6
+1045.60510 5459.4
+1046.10449 8467.4
+1046.60571 3077.5
+1047.10901 2190.5
+1058.52356 596.4
+1061.59973 2602.1
+1061.77600 678.6
+1062.60913 1212.2
+1068.06934 713.4
+1076.57007 1466.5
+1077.06824 2082.2
+1077.56873 1055.8
+1103.56506 852.2
+1120.60486 540.3
+1133.10840 927.0
+1133.59985 1498.7
+1188.27234 868.3
+1198.41833 2639.9
+1359.80029 722.5
+1773.57800 641.4
+1776.95251 794.9
+1870.29651 650.9
+1877.89954 780.1
+1878.51062 750.4
+1878.68750 720.9
+1879.15186 1034.9
+1879.61096 19996.1
+1880.04590 1151.4
+1880.44714 1018.9
+1880.70691 748.1
+1906.92407 1234.8
+1907.20105 7376.6
+1930.66235 1160.1
+S	3630	3630	887.948991267
+Z	3	2660.572
+Z	2	1774.05
+251.60777 698.2
+255.29611 605.9
+258.92303 563.4
+271.34149 638.8
+271.49762 710.0
+295.20139 529.2
+297.12445 638.4
+303.46823 716.8
+306.99045 735.0
+317.82062 577.1
+342.26526 858.6
+384.93753 716.1
+460.10068 570.2
+469.60611 588.2
+470.58481 633.3
+527.26184 550.4
+532.58911 1897.2
+582.92529 619.8
+673.39288 769.9
+676.67310 929.5
+742.76642 669.5
+790.48730 720.7
+795.86707 1104.7
+815.75610 646.9
+851.43835 583.7
+899.13770 793.0
+922.09302 607.0
+1021.12787 979.7
+1078.39233 614.5
+1172.59473 629.2
+1182.08191 1586.8
+1198.31604 3216.5
+1198.51331 848.9
+1369.47546 606.0
+1394.47424 620.7
+1398.71814 657.5
+1434.82556 738.4
+1466.98669 653.4
+1508.81982 713.7
+1658.09778 639.0
+1667.25696 737.6
+1776.94409 1137.8
+1878.01367 846.6
+1878.86426 1001.1
+1879.62817 18584.1
+1880.21033 1311.7
+1880.94116 917.9
+1907.06689 7511.6
+1930.54773 893.2
+S	3631	3631	762.1813246
+Z	4	3044.694
+199.26256 1605.7
+199.34016 762.0
+199.36057 3328.2
+199.38174 910.0
+199.45915 1568.7
+221.36372 582.6
+225.24017 566.1
+228.99557 711.7
+233.96982 623.2
+256.00363 629.7
+276.14655 656.6
+278.88055 591.7
+283.72629 721.6
+291.38907 620.1
+326.80591 726.7
+342.24228 766.7
+350.30209 683.2
+366.04568 590.9
+371.48026 608.2
+388.17987 574.5
+388.82123 628.9
+422.96490 597.7
+441.82556 601.0
+482.61328 899.5
+485.67914 532.4
+532.60236 1849.1
+543.33636 630.9
+549.10907 921.5
+572.67596 760.5
+630.35754 612.4
+657.88214 819.1
+676.65735 1010.5
+685.68677 660.4
+729.06921 601.1
+736.36261 544.3
+742.18677 866.3
+746.30298 616.4
+795.87457 758.9
+934.98120 796.3
+951.50879 657.2
+952.45428 1953.8
+981.64343 764.0
+989.08398 707.8
+997.57159 830.3
+1045.05542 646.0
+1046.10876 913.8
+1057.27466 789.7
+1103.57947 694.4
+1126.57776 603.9
+1163.10999 566.9
+1198.34412 3433.9
+1499.95532 543.0
+1522.20447 715.8
+1537.94067 616.1
+1565.55566 612.0
+1690.34631 710.4
+1776.98022 1217.9
+1872.97205 646.5
+1877.36890 927.0
+1878.25342 1076.4
+1879.59094 19963.6
+1879.87268 3174.6
+1881.84192 957.1
+1906.86047 1343.8
+1907.13379 7255.6
+1930.44238 1188.3
+S	3633	3633	761.4256471
+Z	4	3041.67129
+197.67628 606.9
+198.96819 819.1
+199.27777 1068.4
+199.31604 910.0
+199.33160 807.3
+199.34236 1274.1
+199.35136 1874.5
+199.36226 1326.2
+199.37709 928.5
+199.39839 800.0
+199.47794 673.7
+211.26088 598.8
+213.33319 633.5
+216.47328 584.3
+236.17737 586.3
+271.01273 635.0
+271.32324 647.6
+280.15131 549.1
+297.18454 638.9
+306.88959 653.8
+343.35260 722.3
+346.51410 534.6
+350.28244 873.1
+367.53821 567.9
+368.59283 606.4
+373.45142 566.1
+389.23984 1855.0
+392.32813 690.6
+397.07077 652.7
+420.19315 762.7
+439.49365 748.5
+442.60117 633.7
+467.72974 1034.8
+468.21848 1479.0
+476.73416 3683.0
+477.23685 1989.9
+477.73755 1332.5
+495.94266 570.4
+502.32245 2536.1
+518.78735 615.1
+525.25964 2970.9
+525.76025 1910.3
+526.26563 1337.6
+532.61475 1756.3
+549.09509 730.6
+550.55316 639.1
+573.67950 575.4
+587.84546 1021.0
+602.30011 1460.0
+602.79987 1260.6
+603.29303 879.2
+630.38171 2288.9
+652.60736 579.5
+657.38177 10784.6
+657.88440 9582.1
+658.38727 3367.5
+658.87842 975.8
+661.03058 1296.3
+661.35681 728.7
+661.69427 1378.2
+680.37073 840.3
+680.70349 1106.8
+690.14075 710.8
+691.73138 2865.4
+692.06287 3639.0
+692.39807 2521.2
+692.90918 1059.1
+693.41315 1450.9
+693.91034 705.5
+697.40424 5010.6
+697.73804 6541.0
+698.07300 4798.4
+698.40942 1042.6
+700.09497 699.4
+706.38831 2699.3
+707.38751 837.4
+718.38226 883.4
+718.72565 583.9
+728.65448 664.1
+730.30518 773.5
+730.91693 1092.6
+737.64569 885.1
+742.41772 668.2
+777.44989 5766.0
+778.45367 2676.8
+780.20752 734.7
+786.93774 741.2
+789.79303 729.3
+795.86639 1270.3
+797.18408 700.2
+804.77466 1339.8
+805.76160 977.6
+826.42645 569.0
+829.42847 1651.7
+829.92456 2593.2
+830.42670 1681.9
+833.63391 817.3
+839.38232 1007.5
+842.57440 740.2
+847.78662 805.2
+851.48810 2224.9
+851.98816 1629.1
+853.65735 870.2
+885.14893 2986.2
+885.48035 4040.8
+885.81647 4229.9
+886.14740 1365.8
+889.77020 767.5
+890.53534 1070.8
+898.42889 759.1
+916.00342 1896.3
+916.52606 4017.5
+917.00757 1254.3
+917.52777 2664.4
+918.53259 855.1
+920.04779 1302.5
+920.53833 1725.6
+925.98401 808.9
+926.48083 743.2
+928.15588 2923.4
+928.49396 1455.2
+928.83038 2782.5
+929.17163 1060.3
+932.25452 639.2
+934.50018 2355.0
+934.99500 4191.0
+935.45032 3035.7
+935.98645 835.2
+936.43610 1212.6
+952.34235 552.3
+952.46124 22729.6
+953.46497 12098.1
+954.46918 3684.9
+955.46991 724.9
+965.85663 2442.8
+966.18524 2076.9
+966.52234 2757.7
+966.85919 1568.6
+972.54700 771.4
+973.04785 1291.6
+973.57489 753.8
+989.06812 1643.6
+989.57117 1017.5
+992.03784 815.2
+997.07703 8610.5
+997.57935 10686.9
+998.07892 6549.4
+998.58130 2671.9
+999.08185 772.6
+1004.57263 1610.3
+1005.56940 869.6
+1019.54388 894.2
+1029.61084 1617.5
+1030.61035 827.2
+1037.58850 1580.7
+1044.57227 1511.0
+1045.60437 8414.7
+1046.10461 11193.6
+1046.60669 6254.1
+1047.11169 3517.2
+1047.61816 1044.8
+1061.59595 4568.2
+1062.59497 1889.3
+1063.59045 896.3
+1076.57458 2399.8
+1077.06738 4678.1
+1077.57043 2813.3
+1078.07007 1456.1
+1098.27905 760.6
+1133.10046 984.5
+1133.60938 2094.1
+1192.91052 758.0
+1198.36792 3584.7
+1271.67859 1030.5
+1392.23230 962.0
+1667.18665 604.5
+1860.06726 775.9
+1872.80359 898.7
+1875.80420 625.4
+1876.18689 972.0
+1879.22351 2758.3
+1879.60889 19226.4
+1880.01965 2705.8
+1881.83386 1229.5
+1882.39404 695.1
+1907.04919 7364.1
+1930.42090 1129.1
+1999.89795 748.0
+S	3634	3634	1880.0618246
+Z	2	3758.276
+Z	3	5636.91
+532.60657 1580.2
+579.92944 586.5
+617.24615 625.4
+630.37097 700.8
+664.55914 661.7
+676.66418 975.4
+695.04657 635.3
+727.98749 641.3
+751.94550 608.5
+795.88397 806.6
+819.56860 730.6
+865.71014 819.4
+984.95538 745.8
+1040.24512 607.1
+1158.72791 673.2
+1198.35803 3377.6
+1207.29700 679.2
+1257.60693 675.5
+1276.09143 597.9
+1341.46729 655.4
+1377.73267 733.8
+1525.32971 890.3
+1631.46399 640.2
+1725.14319 671.3
+1817.10242 830.7
+1878.16199 689.5
+1878.50244 909.6
+1879.22742 1894.2
+1879.61755 19795.0
+1879.99304 1657.9
+1880.13184 1268.2
+1907.07190 7004.0
+1937.62695 656.9
+S	3635	3635	762.1793246
+Z	4	3044.686
+197.68517 695.8
+197.70026 616.6
+198.97412 786.3
+199.24033 538.0
+199.26207 1493.0
+199.29976 675.4
+199.33664 979.2
+199.34689 1573.4
+199.36011 2392.7
+199.37325 1705.6
+199.42497 905.0
+199.45923 934.0
+203.09869 679.6
+208.04776 626.6
+208.48955 640.1
+226.89597 595.5
+228.78787 672.0
+236.51027 623.2
+239.33714 628.7
+250.51746 630.6
+271.26648 624.4
+310.88293 612.2
+320.56979 643.3
+356.46121 599.0
+499.41949 641.7
+532.61359 1806.6
+541.51385 555.0
+665.32825 671.5
+676.67462 1072.1
+772.20203 687.2
+795.88605 866.4
+907.97888 645.3
+978.87903 674.4
+1154.96033 615.6
+1198.37439 3405.7
+1227.63953 742.5
+1232.59033 560.7
+1313.10144 881.2
+1415.96777 648.6
+1619.21436 700.0
+1837.38586 769.7
+1861.35278 844.1
+1870.45374 836.6
+1879.61487 19156.2
+1879.89917 3544.0
+1881.00647 601.1
+1907.05591 7672.8
+1930.52161 1117.3
+S	3637	3637	1880.03840793
+Z	2	3758.229
+Z	3	5636.84
+532.58508 2067.1
+549.14093 953.6
+580.92499 617.5
+592.36932 643.6
+630.39423 740.8
+633.24701 711.9
+663.13245 620.4
+693.85663 715.1
+737.43890 591.6
+772.10516 664.6
+795.88885 1131.5
+889.34528 687.1
+904.69238 641.5
+962.90277 619.1
+1007.56653 981.1
+1198.30176 3351.4
+1525.36279 656.6
+1715.02344 609.2
+1757.06421 722.9
+1879.38428 4342.8
+1879.66333 19039.4
+1880.56238 1592.6
+1907.11816 7465.2
+1907.39624 1039.4
+1908.31750 705.8
+1930.53064 661.0
+S	3638	3638	635.8048246
+Z	3	1904.139
+Z	2	1269.762
+165.74510 709.5
+185.55832 563.8
+188.23344 797.7
+188.24556 817.1
+188.27621 601.4
+188.29759 1187.1
+188.31268 755.8
+188.34032 743.4
+189.81189 617.3
+191.71902 722.3
+199.35046 1465.4
+199.36011 1809.6
+199.37886 1072.5
+199.39351 1107.1
+199.46323 749.5
+199.47696 648.6
+212.08511 590.6
+214.50961 576.0
+215.05942 595.1
+216.53340 610.2
+226.26259 655.1
+233.25246 602.3
+248.88649 577.7
+258.11743 675.4
+260.45166 611.8
+280.17856 595.7
+284.95123 543.1
+289.96570 606.8
+308.89664 730.5
+331.50040 675.9
+352.02414 549.4
+386.19580 687.9
+428.80017 596.5
+435.86902 662.3
+457.47787 603.9
+459.28540 567.6
+466.84735 682.6
+532.54492 2027.9
+547.33209 1479.1
+591.35504 2639.2
+630.40265 868.9
+643.58246 649.6
+646.02924 710.8
+646.44281 585.4
+676.67993 1023.0
+714.72308 696.3
+725.88281 989.1
+731.11163 668.4
+736.62390 650.2
+795.88367 833.0
+820.06311 738.9
+831.56042 580.8
+839.93573 1672.7
+857.97394 639.4
+869.21967 584.5
+915.56067 649.9
+969.41437 637.2
+978.09418 725.7
+1014.08240 605.7
+1029.87268 788.1
+1187.91309 765.8
+1198.21594 3342.9
+1330.97803 640.1
+1336.24316 536.7
+1429.42114 883.1
+1441.63770 774.8
+1654.00867 671.6
+1776.88818 933.6
+1785.58862 571.5
+1876.83984 653.3
+1878.86914 1105.6
+1879.08105 1087.7
+1879.64087 19203.9
+1880.32581 1977.4
+1882.41931 750.8
+1907.14697 7630.2
+1930.59827 916.0
+S	3639	3639	1907.4808246
+Z	2	3813.114
+Z	3	5719.167
+528.77222 679.4
+532.59998 1471.4
+549.14777 955.7
+553.92822 635.4
+573.56030 758.3
+575.09625 584.8
+676.66724 891.8
+694.50732 665.8
+695.75195 634.0
+795.88544 1375.3
+894.86847 602.3
+978.36688 652.7
+1116.70825 622.9
+1198.34241 2984.8
+1221.83252 700.6
+1332.42505 665.2
+1341.20764 718.2
+1351.70667 625.0
+1364.13452 581.7
+1525.41687 708.7
+1877.06445 633.2
+1878.34570 988.0
+1878.56213 663.8
+1878.87769 1079.1
+1879.19641 995.3
+1879.62488 19299.9
+1880.33606 893.0
+1880.90564 872.0
+1881.06750 983.1
+1907.16394 5830.6
+1907.58582 919.6
+1930.61365 814.7
+S	3641	3641	1880.0828246
+Z	2	3758.318
+Z	3	5636.973
+532.59174 2029.0
+630.41913 733.8
+676.66107 1163.3
+707.02478 692.6
+796.50964 656.8
+988.04431 728.6
+1005.83862 594.1
+1057.28162 861.9
+1198.32703 3474.4
+1437.16760 647.7
+1473.00598 602.5
+1486.95105 603.6
+1500.15002 688.0
+1511.30579 605.4
+1635.17456 593.5
+1684.67261 646.2
+1739.74402 645.4
+1870.22400 893.5
+1878.88989 2349.7
+1879.20837 1907.0
+1879.59436 19481.6
+1879.96094 2357.9
+1880.28503 2099.6
+1880.65381 870.1
+1907.10864 7181.3
+1930.62769 918.1
+S	3642	3642	1907.5318246
+Z	3	5719.32
+Z	2	3813.216
+532.56842 1727.2
+676.61560 1034.5
+795.87988 899.3
+842.39075 621.1
+1012.23145 727.3
+1025.85156 620.5
+1047.56897 617.3
+1049.11755 746.7
+1057.20593 696.0
+1188.10962 811.5
+1198.27637 3560.1
+1394.40051 746.8
+1525.37256 1002.6
+1581.74036 646.1
+1716.44470 1217.0
+1879.46350 21331.5
+1890.62085 702.3
+1907.17151 7472.8
+1930.53564 867.5
+S	3643	3643	503.725407933
+Z	3	1507.901
+Z	2	1005.603
+142.02614 606.1
+145.39980 516.6
+161.59438 574.5
+165.74910 812.3
+169.49600 654.7
+174.23991 560.2
+177.11136 1145.9
+188.26318 1067.4
+188.27249 1088.3
+188.28032 830.4
+188.28969 1169.2
+188.29848 1060.8
+188.30833 887.3
+188.31732 878.7
+191.72861 485.6
+198.97112 1177.6
+199.34222 1354.6
+199.35358 1621.9
+199.37042 2378.8
+199.38416 1288.3
+199.43166 518.2
+199.48062 565.6
+221.13777 738.7
+226.84470 584.2
+235.93938 595.1
+255.07481 627.1
+268.78101 639.5
+277.84824 622.0
+278.60596 610.9
+281.05075 1238.2
+324.78036 565.4
+342.28162 894.7
+404.67944 616.0
+415.25146 999.2
+419.63687 600.6
+430.49567 597.1
+459.27844 1384.8
+482.66846 840.6
+532.60010 1782.6
+545.48395 695.1
+547.33044 988.7
+549.16687 745.1
+591.35638 1969.0
+592.36316 823.6
+616.05365 657.5
+630.41504 719.5
+635.38171 2504.6
+679.40833 2700.8
+680.41400 1225.7
+723.43317 1682.8
+738.60217 663.6
+767.46118 1287.3
+817.91669 606.9
+828.57428 585.2
+850.72888 623.9
+908.86554 836.4
+942.39874 790.4
+950.68262 652.0
+959.92224 565.7
+997.13239 548.3
+1052.46851 543.2
+1057.28394 1099.0
+1120.44641 585.0
+1198.34180 3266.7
+1412.27417 636.5
+1459.94788 596.6
+1525.43018 787.0
+1660.39734 583.7
+1718.33655 1118.0
+1767.03430 708.8
+1873.88342 882.4
+1879.34265 5653.5
+1879.61133 19181.5
+1907.19531 7411.4
+1930.65393 847.8
+S	3645	3645	957.4717896
+Z	4	3825.85586
+255.28720 767.8
+271.33911 733.2
+276.83792 698.2
+314.65515 601.5
+316.11633 597.0
+316.73404 683.0
+324.12320 522.7
+383.30823 669.6
+425.77045 574.7
+427.53616 607.1
+427.89835 631.5
+465.58044 626.9
+519.27124 1055.0
+521.84436 601.8
+532.56750 1480.4
+553.33533 784.8
+573.99689 668.4
+676.68323 1018.1
+731.10901 677.7
+795.88550 1151.3
+796.61615 743.7
+820.17145 870.8
+825.25513 651.3
+841.11212 704.7
+858.04431 780.5
+891.39856 660.1
+926.09644 736.5
+927.75543 999.4
+935.14679 680.5
+951.60211 634.0
+954.51703 702.0
+974.32483 789.8
+1000.47540 1000.9
+1032.35522 869.4
+1032.52344 992.2
+1036.12000 650.5
+1057.30859 667.9
+1059.85999 659.9
+1066.14734 674.7
+1097.52087 838.5
+1110.92651 849.6
+1192.27588 6753.9
+1192.60718 15529.8
+1192.94006 18222.1
+1193.27539 13048.9
+1193.60779 7197.4
+1193.94519 3605.2
+1194.28210 1551.2
+1194.61951 806.8
+1198.27637 3941.1
+1464.65540 887.2
+1499.02576 631.4
+1511.76221 681.7
+1512.24927 2191.4
+1512.73743 916.2
+1514.23975 909.8
+1525.39160 978.4
+1576.79614 1093.3
+1577.34900 730.6
+1718.77039 1060.8
+1874.40295 1194.9
+1877.47241 801.9
+1878.44946 1006.5
+1878.97632 1711.2
+1879.30762 2038.8
+1879.66553 20060.4
+1880.02490 2142.4
+1880.40332 1910.7
+1881.58191 959.2
+1907.12585 7183.5
+1907.48755 684.1
+1930.59692 738.5
+S	3646	3646	1227.4115471
+Z	4	4905.61489
+346.96399 497.6
+349.26208 689.0
+381.34006 765.1
+438.58282 601.1
+475.28445 653.3
+532.58282 1941.4
+571.39081 725.3
+579.43951 704.0
+590.84259 603.4
+618.84552 794.1
+630.37219 914.3
+676.71619 877.5
+726.56958 739.7
+795.88525 1089.8
+1101.83118 622.0
+1107.81458 630.4
+1129.48584 593.1
+1198.30457 3348.7
+1198.45154 541.3
+1525.30542 711.5
+1529.10120 642.3
+1682.33948 657.0
+1702.34045 680.4
+1717.92603 823.5
+1873.36365 1332.3
+1877.64648 649.2
+1878.14050 1157.1
+1878.90125 1271.8
+1879.22620 1278.8
+1879.75549 17559.6
+1880.61462 1191.5
+1881.77466 894.9
+1907.15332 7777.0
+1930.49609 1040.5
+S	3647	3647	737.4106206
+Z	5	3682.01398
+198.92050 610.2
+198.97151 1024.3
+199.31055 508.2
+199.32759 665.3
+199.35001 1315.9
+199.36031 2541.8
+199.37050 847.0
+199.38470 746.7
+199.45865 1063.9
+214.49171 733.5
+225.37257 606.4
+244.16521 1021.1
+251.83664 682.9
+252.79950 554.9
+284.89966 711.5
+294.64017 695.2
+295.20468 604.4
+327.56680 618.8
+333.11172 617.7
+346.74771 675.0
+378.85223 629.2
+379.80478 580.1
+390.20932 1375.7
+435.77426 672.7
+447.22815 1088.3
+451.09637 580.9
+532.55695 1751.7
+532.60590 706.3
+549.35376 1053.7
+566.44818 635.5
+572.35315 1090.0
+611.79419 714.9
+626.02875 646.5
+626.19330 544.0
+628.65631 543.5
+630.38660 897.2
+631.60437 667.2
+673.30200 767.4
+674.29803 778.5
+676.66595 779.9
+687.00739 675.4
+709.36188 881.5
+713.92432 8420.0
+714.42670 6539.1
+714.92517 3100.1
+715.44293 759.7
+715.93909 628.4
+731.06250 721.0
+777.44800 6479.1
+778.45178 2703.2
+787.46722 1080.0
+789.35895 679.0
+795.88013 802.2
+819.47461 2338.7
+821.92120 726.9
+826.96606 631.0
+851.49005 837.4
+852.00293 676.5
+853.46893 1447.1
+853.72357 1056.4
+857.21002 867.5
+857.46234 1569.5
+874.00830 675.4
+894.09808 757.9
+898.45239 815.6
+898.79626 759.0
+899.12701 1023.3
+908.02820 2656.5
+908.52893 3347.7
+909.02783 866.4
+909.54608 752.6
+923.49237 1193.9
+924.48279 947.7
+931.53156 671.0
+973.06372 931.3
+973.55231 1053.1
+974.06342 844.3
+974.91632 734.8
+975.40491 822.6
+988.55084 874.6
+1004.57605 1052.6
+1019.66754 752.3
+1029.60559 3364.0
+1030.61072 1379.1
+1056.24695 1434.0
+1056.57751 1345.2
+1060.56628 790.8
+1060.89673 813.8
+1061.59094 1834.6
+1062.60144 1096.0
+1070.56995 961.7
+1082.11877 708.0
+1084.03479 609.9
+1103.76599 771.5
+1198.24792 3320.3
+1275.70667 749.8
+1473.52478 718.4
+1536.74866 729.6
+1776.95300 673.0
+1878.51172 903.5
+1878.81201 2027.1
+1879.09229 1749.3
+1879.64319 18910.1
+1880.20679 1793.5
+1880.47571 1476.1
+1880.72424 1735.5
+1906.69507 831.7
+1907.14673 6511.7
+1930.39404 1157.8
+S	3649	3649	1463.65499127
+Z	2	2925.462
+Z	3	4387.69
+393.22729 11470.6
+415.83954 11464.1
+424.70441 13119.2
+427.32944 12914.6
+427.53012 16503.0
+513.43567 12810.7
+529.06268 14907.0
+532.53369 34224.4
+658.22406 13356.3
+676.70447 18770.8
+701.72424 11016.9
+757.76239 13181.5
+795.89777 18873.3
+838.42145 15076.3
+944.64447 12240.9
+981.26404 11664.9
+1019.74402 12698.0
+1036.81604 11686.5
+1198.20691 68011.8
+1421.53735 12993.7
+1476.08960 15420.8
+1477.49646 14257.5
+1678.60974 13191.2
+1716.23511 19552.7
+1878.08337 17573.5
+1878.94763 44610.8
+1879.33386 47452.6
+1879.72192 375810.4
+1880.09155 33598.7
+1880.51013 33300.0
+1881.36377 19013.6
+1906.78638 15682.8
+1907.17334 148966.6
+1919.05444 14872.8
+1930.55420 15804.7
+S	3650	3650	1469.4842996
+Z	4	5873.9059
+427.53589 818.5
+456.12463 671.7
+457.16574 722.3
+490.05127 606.9
+494.61868 682.5
+530.95270 697.8
+532.55798 2035.8
+620.49738 818.0
+674.35645 618.2
+676.80017 782.0
+700.87238 722.3
+785.08698 626.5
+793.98633 720.9
+795.88141 974.9
+880.52942 649.5
+1019.67419 737.3
+1020.79626 727.5
+1061.01343 687.8
+1079.49487 754.0
+1139.03076 638.8
+1179.42651 734.3
+1198.25085 3549.2
+1250.96448 706.1
+1464.14575 691.4
+1478.06055 820.7
+1715.68445 845.6
+1877.48523 750.5
+1878.01770 707.0
+1878.62256 963.8
+1878.93738 1157.8
+1879.51306 7746.1
+1879.81384 15710.7
+1880.10583 7005.7
+1880.41638 2121.0
+1880.67004 2069.3
+1881.28369 1052.5
+1907.10571 7130.2
+S	3651	3651	1464.15599127
+Z	2	2926.464
+Z	3	4389.193
+398.83554 593.3
+413.26300 531.0
+427.54657 666.0
+432.22443 626.5
+493.61600 736.1
+512.58136 692.7
+532.57800 2161.8
+549.16235 666.8
+589.35406 711.1
+614.55347 626.8
+676.69531 902.2
+762.73926 555.5
+795.89142 983.3
+842.84424 648.9
+852.34241 833.3
+904.71393 613.6
+937.97449 842.7
+1041.11963 1048.0
+1047.62402 3118.8
+1048.61963 1919.6
+1057.32080 813.4
+1066.53589 2104.4
+1067.52722 1147.5
+1103.54407 862.5
+1119.60901 762.3
+1137.57935 1172.9
+1161.71863 761.2
+1162.33215 681.0
+1198.28735 3649.7
+1214.21582 576.5
+1267.37537 597.4
+1284.62817 1233.8
+1285.63318 813.9
+1335.02124 686.2
+1412.90723 627.9
+1730.84424 1925.4
+1731.87476 1128.6
+1732.80530 730.4
+1802.44556 654.0
+1876.44800 721.2
+1877.75037 652.4
+1879.13391 2007.4
+1879.67883 19723.7
+1880.10901 2329.4
+1880.26733 2214.7
+1881.60889 908.3
+1882.20898 778.1
+1907.04822 7463.0
+1919.12085 739.6
+1930.60217 1087.2
+1930.96167 1673.8
+1931.97083 1310.8
+S	3653	3653	689.1410396
+Z	4	2752.53286
+182.78516 746.4
+188.24608 772.7
+188.26901 2026.5
+188.27657 1974.5
+188.29253 2009.8
+188.30685 1402.8
+188.31583 1529.0
+198.97824 728.4
+199.17728 580.1
+199.24081 612.4
+199.27284 1024.7
+199.32581 604.6
+199.34790 847.3
+199.35614 800.3
+199.36270 749.7
+199.37187 3107.5
+199.38669 964.7
+202.51378 534.2
+217.78984 679.1
+233.16386 905.9
+264.07211 686.5
+271.82687 719.4
+280.15524 569.0
+298.29584 556.5
+299.04285 609.6
+371.38199 627.0
+381.36743 755.8
+387.27005 680.4
+402.33600 604.8
+416.20456 970.1
+425.20709 3754.7
+425.70703 921.1
+428.72629 1910.1
+429.23236 870.7
+459.19473 634.1
+472.95129 616.0
+501.44031 541.2
+522.79700 675.1
+532.56140 1864.0
+537.29999 556.5
+546.36969 561.4
+549.21021 763.4
+554.96875 840.6
+555.31531 766.7
+557.28827 663.4
+580.01044 588.4
+647.33270 5609.9
+647.66772 3856.8
+648.00330 1867.6
+656.30585 1884.1
+669.39105 1148.7
+676.65955 864.3
+759.40436 914.9
+795.89447 1327.3
+822.07983 639.8
+822.41199 1089.2
+830.45844 738.1
+831.95905 2676.9
+832.45538 2530.5
+832.95264 847.7
+838.96667 789.8
+839.46765 1352.4
+840.42609 1015.0
+840.92816 841.4
+844.42651 1956.2
+845.42139 801.2
+849.41156 1777.0
+856.44873 1338.7
+857.44989 743.3
+858.07562 743.3
+866.44214 2175.9
+866.94250 1859.1
+888.46375 1378.9
+888.95587 1500.7
+894.49072 2364.6
+894.98901 2762.5
+895.48608 850.7
+903.49048 8729.9
+903.99310 8185.5
+904.49316 4352.9
+905.08636 556.9
+947.02264 993.1
+960.03302 947.3
+960.53571 843.8
+970.49567 43406.9
+970.99701 43120.4
+971.49866 20549.4
+971.99896 5272.9
+973.09399 722.6
+1019.72290 872.7
+1081.87878 676.6
+1084.54175 638.5
+1137.61133 606.3
+1198.25415 3147.7
+1210.67981 866.0
+1330.14075 746.4
+1469.57166 680.1
+1600.52283 783.0
+1876.34705 789.1
+1877.93298 785.2
+1878.62781 1033.6
+1878.82556 1347.8
+1879.26978 2812.0
+1879.59387 19283.8
+1879.92334 3448.6
+1880.22290 1059.7
+1880.87500 990.8
+1907.04675 6512.8
+1935.81909 695.6
+S	3654	3654	693.1396971
+Z	4	2768.52749
+188.25357 973.7
+188.26730 1139.0
+188.28323 2121.8
+188.29433 1718.9
+188.30867 1679.0
+188.32684 1020.2
+188.33864 637.1
+188.35449 673.0
+196.21654 626.7
+198.97549 550.7
+199.26456 752.1
+199.34576 1005.2
+199.36223 2176.1
+199.37616 1063.1
+199.47382 777.5
+212.85664 570.5
+226.18073 655.4
+226.25824 682.8
+234.14262 572.4
+239.46304 579.9
+252.67085 560.4
+278.00305 542.5
+294.26740 730.1
+385.71710 765.3
+413.79779 633.7
+469.22269 656.5
+482.62265 869.4
+491.80249 729.5
+532.60339 1523.6
+567.77423 2780.2
+568.27521 1653.2
+570.12817 578.4
+584.32465 2378.7
+584.65631 2972.3
+598.99969 5580.3
+599.33386 5097.8
+599.66608 1214.6
+630.37213 864.9
+668.38867 564.5
+675.78583 831.2
+676.67407 1373.0
+779.57440 597.3
+795.90918 958.6
+814.05725 730.9
+834.92444 951.0
+835.43842 1002.6
+842.79675 1891.5
+843.12390 1151.3
+851.24609 613.2
+876.48248 1447.6
+876.97998 919.6
+970.49139 1665.3
+970.99585 927.3
+975.57294 2033.8
+999.58276 671.7
+1017.08960 759.1
+1057.30908 788.6
+1069.61230 1036.4
+1097.74060 814.8
+1198.34802 3511.9
+1237.64368 714.3
+1252.97241 660.5
+1370.14526 683.4
+1491.07544 737.1
+1711.66443 827.2
+1718.30530 740.6
+1736.71985 720.9
+1758.08362 783.1
+1776.88879 684.9
+1870.11877 1047.5
+1878.25635 643.2
+1879.14270 1841.4
+1879.33118 1947.5
+1879.63867 19813.3
+1880.11987 1495.6
+1880.45703 1151.7
+1881.88220 1050.1
+1906.58997 780.6
+1907.00110 7337.9
+1907.34070 859.5
+S	3655	3655	689.8933246
+Z	4	2755.542
+175.11717 589.3
+179.57780 555.3
+182.78662 902.3
+188.26448 669.4
+188.28214 1125.6
+188.29124 1307.9
+188.29991 766.8
+188.31055 994.9
+188.97853 576.4
+198.97487 1109.6
+198.98198 766.9
+199.25543 711.1
+199.27425 673.3
+199.35390 2469.8
+199.37589 1271.7
+199.39267 1342.6
+203.99101 649.3
+209.18184 633.1
+214.89778 507.8
+234.15227 554.5
+234.24849 559.6
+237.97792 548.4
+240.68156 655.4
+255.05984 593.2
+263.45801 633.8
+264.79056 700.3
+280.15860 563.9
+317.47314 569.2
+329.50964 602.9
+350.28418 735.5
+351.32220 528.3
+365.38348 583.7
+367.66400 600.3
+369.24579 564.5
+398.28604 640.6
+445.09927 637.2
+457.40851 598.8
+532.60114 1622.3
+549.16925 965.9
+558.76251 733.1
+567.77429 9888.9
+568.27515 6055.3
+568.77673 2289.2
+583.02679 1656.7
+592.00653 1967.9
+592.34381 1491.0
+592.67419 660.8
+605.27289 596.8
+645.00482 872.3
+645.34247 764.5
+676.60522 750.1
+721.75433 689.7
+780.62305 628.9
+795.89496 1015.8
+824.93378 927.5
+887.50830 3134.4
+888.01013 6114.7
+888.50977 3133.7
+919.31494 649.2
+925.60352 1002.0
+967.00464 4649.2
+967.50482 8976.8
+968.00702 5982.3
+968.50787 2424.5
+1003.67078 640.9
+1020.80688 733.4
+1097.76831 871.9
+1187.77026 739.5
+1198.35974 3255.5
+1253.19934 599.5
+1340.35645 829.2
+1628.16882 649.4
+1695.02039 573.8
+1695.18958 613.8
+1776.95056 1003.9
+1812.60181 677.5
+1870.02893 906.7
+1872.48218 590.5
+1878.69653 1659.1
+1878.97058 2108.8
+1879.32983 5108.9
+1879.65149 18237.5
+1879.97534 3935.1
+1880.33472 2286.0
+1880.63696 1874.9
+1881.01135 1272.5
+1881.78271 887.6
+1907.06250 7225.1
+1910.10815 642.8
+S	3657	3657	1187.1257796
+Z	4	4744.47182
+353.18991 645.8
+387.13083 630.0
+436.45926 822.5
+532.65350 1742.1
+556.74310 581.7
+575.77820 705.4
+605.04669 596.3
+630.45142 736.3
+676.67651 977.6
+744.37286 658.8
+757.63214 619.2
+873.43427 717.6
+877.41766 788.6
+907.43219 902.4
+1035.52380 592.5
+1057.29724 1026.5
+1084.90784 816.5
+1113.81616 733.1
+1117.43787 780.0
+1156.63098 707.1
+1158.70325 589.8
+1160.93860 1628.4
+1161.28271 1235.4
+1198.46741 3438.0
+1250.99426 2215.6
+1251.32178 5097.7
+1251.65479 6101.9
+1251.99280 3430.5
+1252.32092 3231.9
+1252.66895 1111.5
+1284.00708 1087.3
+1284.34070 3098.4
+1284.67615 2874.5
+1285.01038 2340.5
+1285.35095 1681.8
+1317.69287 4396.2
+1318.02649 12573.6
+1318.36084 12194.8
+1318.69312 8055.3
+1319.03125 5281.5
+1319.36487 1734.6
+1319.69128 1071.6
+1356.38953 839.7
+1356.74304 715.4
+1374.38892 1562.8
+1374.73340 2951.8
+1375.06836 3552.3
+1375.39331 3158.5
+1375.72900 3117.8
+1378.05664 1049.7
+1378.38086 1429.5
+1378.72314 856.9
+1412.72681 1438.7
+1413.06982 2951.2
+1413.40796 3075.0
+1413.73962 2319.2
+1414.07861 1650.4
+1443.74585 1113.2
+1444.26672 1060.8
+1456.74939 1145.0
+1457.08704 2095.7
+1457.40979 2319.8
+1480.21460 705.5
+1490.10974 2068.6
+1490.43311 3748.8
+1490.76379 4421.6
+1491.10596 2474.9
+1491.45020 1218.4
+1491.78308 1206.6
+1492.10803 909.0
+1525.50195 813.5
+1620.78918 588.3
+1623.30603 674.7
+1860.10754 653.4
+1876.24707 733.0
+1878.49988 805.7
+1878.88220 836.6
+1879.26990 3568.9
+1879.62769 19358.4
+1879.98523 3200.2
+1880.64063 1156.6
+1881.83411 708.2
+1907.10803 7115.8
+S	3658	3658	1187.3795746
+Z	4	4745.487
+327.74539 594.5
+342.24786 681.8
+381.99579 548.6
+396.63803 749.3
+425.55829 635.7
+434.44489 686.3
+436.46768 560.1
+482.61597 1143.9
+532.59515 2285.7
+561.71826 596.5
+588.56256 689.5
+600.16083 616.1
+630.34821 717.5
+631.58990 555.8
+676.66321 843.2
+685.41736 604.5
+689.62103 663.0
+731.06757 684.3
+738.57831 566.5
+835.52478 694.2
+1198.33472 3278.2
+1198.77295 732.7
+1243.01929 723.1
+1317.68372 1002.7
+1318.01672 922.9
+1318.36218 972.6
+1318.69421 983.6
+1348.76514 634.9
+1396.40417 563.9
+1473.70569 623.6
+1500.46692 591.9
+1633.85999 559.0
+1864.78406 710.6
+1877.44739 649.0
+1877.72937 682.6
+1878.85291 794.2
+1879.21143 1352.4
+1879.59705 19851.5
+1879.98218 2218.8
+1880.57910 980.9
+1881.73291 928.1
+1907.11951 7400.9
+S	3659	3659	1188.3805746
+Z	4	4749.491
+350.28607 867.8
+367.08423 778.9
+385.30563 676.7
+432.76328 616.7
+432.87274 609.9
+532.62512 1788.9
+538.02509 628.1
+620.14240 683.2
+630.42859 907.7
+635.40778 607.6
+676.66113 866.5
+892.11548 639.4
+974.58209 690.4
+1198.40393 3195.7
+1201.31592 710.4
+1281.78870 706.5
+1525.44263 739.7
+1551.99390 791.6
+1776.96240 873.1
+1877.82336 866.4
+1879.24329 2778.4
+1879.58472 19599.7
+1879.88477 3216.5
+1881.34082 832.4
+1907.07361 7160.1
+1919.19214 662.6
+1930.62646 939.1
+1990.48450 635.9
+S	3661	3661	1880.01740793
+Z	3	5636.777
+Z	2	3758.187
+526.41199 633.1
+532.58838 1916.7
+549.18115 553.4
+630.42542 830.6
+676.66608 1126.4
+731.13171 762.8
+749.63428 703.4
+780.60425 596.4
+795.81671 592.2
+795.90588 970.4
+933.24597 669.3
+959.59418 577.9
+976.02069 788.3
+1034.58936 614.0
+1198.31433 3342.2
+1309.10498 702.4
+1375.19470 667.9
+1525.43738 709.9
+1588.12402 583.3
+1777.00061 795.6
+1878.21179 891.3
+1878.94775 719.7
+1879.60913 20271.1
+1879.89539 2193.7
+1880.16528 915.5
+1880.83252 1225.7
+1907.13501 7508.0
+1907.62817 717.6
+1978.70728 682.6
+S	3662	3662	1907.55799127
+Z	3	5719.399
+Z	2	3813.268
+532.60004 1936.2
+552.77759 784.2
+676.69293 1289.8
+711.48102 669.5
+745.39148 705.2
+1020.82495 803.8
+1198.34509 2945.0
+1324.51917 801.8
+1333.45544 687.9
+1447.38171 610.3
+1489.75183 920.2
+1525.42163 827.1
+1535.49805 575.8
+1742.67432 628.9
+1877.15649 680.3
+1878.56580 1387.6
+1879.12390 1769.0
+1879.66760 19915.5
+1880.23523 1827.3
+1880.78772 902.0
+1881.00549 880.2
+1881.44763 898.3
+1906.80103 829.8
+1907.10681 7143.5
+1907.41614 1184.5
+1919.12891 730.5
+1960.60974 576.9
+S	3663	3663	636.3908246
+Z	1	635.383
+164.59410 870.1
+165.74947 696.9
+169.49344 623.9
+171.59949 634.0
+172.27266 699.9
+173.88104 533.2
+187.21880 807.3
+188.26105 726.6
+188.27686 731.8
+188.28796 1053.9
+188.30344 983.4
+188.31496 779.4
+189.79439 548.6
+190.20590 670.0
+198.97026 1032.7
+199.27063 975.7
+199.29172 761.9
+199.32968 710.4
+199.35109 746.3
+199.35751 680.4
+199.36934 2685.8
+199.38979 966.2
+199.46648 1273.5
+210.77493 511.9
+228.49541 695.3
+244.08408 626.3
+270.40366 601.8
+272.22540 719.8
+279.55502 567.2
+286.91006 527.5
+288.23181 697.5
+297.91858 622.3
+308.90387 658.6
+309.19299 721.4
+311.66995 582.1
+333.37024 629.8
+341.43655 532.8
+342.27579 800.3
+344.22263 525.2
+365.84000 628.3
+371.22284 774.7
+394.89120 598.6
+397.24359 1052.3
+440.31793 672.2
+441.26822 1004.5
+459.27707 849.4
+482.64798 795.6
+484.15753 612.8
+499.15228 725.0
+499.51639 625.6
+503.30594 977.3
+527.25970 910.6
+527.75928 975.7
+532.58447 2367.6
+547.33228 1500.9
+549.15979 823.7
+556.15344 1232.4
+572.18781 678.7
+574.15979 3828.1
+584.85425 8817.6
+585.35614 4198.7
+589.18420 1904.7
+590.16058 3053.2
+591.16425 2924.7
+591.35645 3067.0
+592.16937 997.1
+615.16614 2730.9
+615.30359 654.1
+615.40631 939.6
+615.66748 1901.8
+616.16595 1442.5
+617.36993 759.2
+624.17285 7185.1
+624.67352 4509.7
+625.17474 1133.0
+631.67230 714.9
+654.95526 616.2
+658.18384 974.2
+670.55206 586.0
+675.18433 1063.3
+725.88837 812.7
+757.77490 763.1
+795.87561 916.7
+839.93469 711.4
+924.21362 606.6
+931.43781 692.6
+1057.30518 774.2
+1061.39941 571.7
+1198.30725 3442.7
+1210.01306 828.3
+1218.36060 620.3
+1450.91687 797.6
+1489.58289 805.7
+1495.54297 545.2
+1503.57043 677.4
+1533.95337 665.9
+1718.00537 787.5
+1854.30029 722.1
+1857.88416 665.3
+1876.21143 993.0
+1878.27258 1160.5
+1878.60535 863.8
+1879.37354 2971.5
+1879.64404 19647.9
+1881.02600 921.2
+1907.14502 6781.2
+1910.00159 575.2
+1919.17322 1072.1
+1930.56445 785.5
+S	3665	3665	615.839991267
+Z	2	1229.832
+Z	3	1844.245
+165.58678 1960.8
+169.48872 2469.8
+178.86771 1919.3
+199.25896 2609.9
+199.31940 3076.8
+199.35779 11018.0
+199.36920 3850.0
+199.45598 2993.6
+221.13840 2774.7
+224.59755 1831.3
+239.44252 1982.4
+254.81189 2164.3
+260.39026 2140.8
+263.61359 2530.5
+271.94086 2224.5
+320.26428 2351.5
+340.41885 1882.4
+342.26340 2328.5
+348.93600 2008.9
+350.29831 2997.0
+394.30975 51655.8
+395.31268 3949.4
+412.32001 63982.1
+413.32312 4568.0
+421.69571 2370.6
+427.53677 3734.8
+429.24786 2064.2
+429.47891 2049.9
+430.33057 84587.6
+431.33371 4231.3
+448.34085 78455.5
+449.34470 2487.3
+482.64755 3981.5
+493.35898 1892.8
+505.79178 2118.6
+532.56427 6827.9
+561.37048 169109.7
+562.37347 12973.7
+562.83966 3119.2
+563.31091 1835.8
+577.90515 2423.9
+579.38086 221485.5
+580.38495 16478.8
+586.33472 2043.7
+597.39148 268113.4
+598.39386 15009.4
+600.74207 2635.4
+630.39032 2366.5
+652.29010 3047.5
+663.71967 2253.9
+728.44318 2217.5
+740.46484 3065.0
+784.48724 4951.5
+795.90582 3735.8
+816.49084 2774.4
+828.50946 6833.7
+829.65796 2232.2
+833.69189 2444.3
+860.52185 6913.1
+872.53845 3729.9
+888.06647 2692.1
+904.54553 5246.4
+916.56604 4453.9
+948.57037 7736.6
+960.59692 2694.9
+977.18097 2761.9
+992.59540 8546.6
+1024.80908 2102.8
+1036.62231 3221.7
+1142.98767 2125.2
+1198.26746 11432.8
+1280.38574 2142.2
+1326.22144 2544.6
+1721.21313 2315.3
+1739.34937 2491.3
+1835.64673 2405.6
+1858.53564 2168.2
+1878.25452 2531.8
+1878.91968 4822.1
+1879.13611 3360.1
+1879.41882 13089.9
+1879.70300 68966.2
+1880.64148 2082.5
+1881.39661 3124.7
+1881.99622 2720.2
+1896.02295 2453.7
+1907.13586 27302.4
+1919.14600 3113.0
+1930.54272 3333.6
+S	3666	3666	401.6405746
+Z	3	1201.647
+Z	2	801.433
+102.03418 563.4
+104.91737 596.9
+105.92924 538.2
+106.11818 525.9
+106.88715 737.4
+109.21934 563.0
+112.34181 568.3
+113.43432 542.6
+115.19408 555.9
+115.47114 541.5
+115.83553 503.6
+121.06413 3460.1
+121.77439 2416.9
+123.92509 603.3
+127.41614 522.6
+127.60774 652.2
+128.15651 571.2
+133.08534 4604.9
+146.09297 2182.3
+148.55814 605.0
+155.09846 3824.2
+157.19334 667.9
+157.99614 545.4
+160.93141 658.7
+165.09033 2663.8
+171.13824 1023.3
+172.30154 577.5
+177.11159 6727.5
+187.34096 571.4
+198.97566 877.5
+199.12468 2094.1
+199.24904 658.1
+199.25531 757.9
+199.29478 709.7
+199.34071 1484.4
+199.35445 2730.6
+199.36459 1464.5
+199.45204 1368.6
+199.48883 554.1
+200.20012 1105.5
+209.11594 1747.7
+213.05409 1076.1
+213.11159 8918.8
+221.13797 1579.7
+222.78539 597.7
+224.85008 563.0
+227.12723 11424.8
+241.14119 631.6
+245.13843 1071.9
+265.10544 638.9
+275.23483 717.4
+286.54297 589.6
+295.15363 1729.2
+296.21692 597.3
+299.16241 640.6
+315.22440 546.9
+318.28775 641.5
+325.28256 1206.3
+327.19977 1277.7
+333.18954 687.4
+341.19601 1488.4
+359.23950 1949.5
+361.91663 503.0
+371.22696 1970.4
+382.16068 632.9
+382.29477 835.5
+383.14935 876.3
+383.20538 22230.8
+383.25488 724.8
+384.20840 1216.3
+415.25232 2338.1
+428.26120 2761.8
+441.19736 658.4
+450.27347 7724.0
+450.77521 2528.1
+459.27823 3950.4
+460.28137 932.4
+469.91031 620.0
+470.66824 632.4
+472.28668 9760.1
+472.78812 4577.1
+476.78427 859.9
+482.67715 699.2
+488.28293 2606.3
+491.28500 695.3
+494.29996 6568.8
+494.80136 2609.4
+503.30493 4643.1
+516.30927 1854.9
+516.81512 1400.1
+532.59161 2190.2
+535.30908 1818.9
+547.33130 5544.2
+548.33569 1296.2
+549.16821 799.6
+579.33447 1958.7
+580.28613 1890.8
+591.35651 3191.0
+603.13849 658.9
+603.61078 549.9
+608.98090 666.3
+623.36145 1385.1
+624.36481 1054.7
+635.38141 1798.4
+667.38855 915.1
+676.68207 1447.8
+698.84180 702.6
+723.43591 864.0
+731.14343 862.6
+779.32318 636.6
+795.89923 1096.7
+800.84723 598.6
+847.35114 534.0
+864.51624 524.7
+1019.70905 658.1
+1163.24512 521.6
+1198.32312 3588.2
+1306.74341 611.7
+1333.45764 638.9
+1338.01648 596.8
+1471.04919 589.6
+1500.03308 615.1
+1525.48584 718.1
+1608.28625 545.9
+S	3667	3667	616.9133246
+Z	2	1231.811
+157.93488 847.1
+161.91286 828.8
+171.76839 1234.5
+177.11238 1513.4
+182.77019 1265.9
+183.77774 798.9
+186.74225 961.0
+188.25864 911.9
+188.27094 1796.9
+188.28001 1945.7
+188.28680 1951.4
+188.31203 1627.6
+188.31937 931.8
+198.97356 1239.8
+199.26315 1508.2
+199.33228 1174.9
+199.34053 1616.5
+199.36130 5218.2
+199.37843 1436.5
+199.41057 866.0
+199.42917 1229.8
+199.45981 1561.6
+214.26031 944.2
+218.17300 953.4
+226.13881 977.8
+242.82646 950.1
+243.05576 1031.4
+251.77887 977.2
+255.27444 1152.1
+263.26660 1145.8
+265.70236 1038.2
+306.38773 987.7
+367.14365 841.6
+394.30957 48595.8
+395.31277 19569.8
+412.32001 62920.0
+413.32321 26601.7
+427.51944 1594.3
+430.33051 88302.6
+431.33365 29394.0
+436.87332 1210.1
+444.84903 1371.9
+448.34085 89301.6
+449.34436 24414.6
+480.97363 964.6
+532.59283 2776.3
+549.12317 1421.2
+559.14233 2971.3
+561.37042 167280.3
+561.84808 850.6
+562.37354 69203.3
+579.38098 232349.2
+580.11206 1209.3
+580.38403 85781.3
+593.32690 1631.2
+596.12433 1284.0
+596.63019 1488.5
+597.39142 295641.1
+598.15149 1952.5
+598.39447 89407.7
+598.65668 1070.3
+599.39777 1444.7
+630.37067 1682.7
+676.67297 1931.4
+729.36670 1908.6
+731.08167 1418.1
+780.16071 1125.8
+789.39520 1703.1
+877.45691 1628.5
+930.70453 913.1
+966.50348 996.3
+1009.53363 1477.2
+1053.54834 1098.3
+1090.76831 1035.2
+1188.33899 1206.9
+1198.33447 5094.6
+1218.04700 1227.5
+1219.09863 925.9
+1414.45386 996.9
+1491.10828 1075.8
+1625.07556 990.6
+1772.94324 894.7
+1785.28015 1080.8
+1870.28638 1415.5
+1875.57568 993.7
+1878.51270 1372.2
+1879.26050 6954.9
+1879.63464 32258.6
+1880.00635 6062.5
+1881.38965 1387.5
+1906.87195 1446.3
+1907.14819 12216.4
+1912.49194 1222.9
+1930.48938 1907.9
+1954.61096 1060.7
+S	3669	3669	615.823241267
+Z	2	1229.799
+Z	3	1844.194
+159.02516 1093.9
+168.36050 1182.6
+182.83916 1178.7
+188.21698 880.4
+188.22876 2005.6
+188.23889 1449.8
+188.25131 957.9
+188.27142 1404.2
+188.28096 1285.2
+188.29532 1467.0
+188.31146 1727.7
+188.31979 1399.6
+188.33902 927.5
+188.34955 1327.8
+188.36115 1354.7
+197.69446 1214.6
+198.83577 1108.7
+198.97304 1534.6
+199.28241 1507.9
+199.29916 1391.1
+199.32755 1433.7
+199.34067 2035.8
+199.35423 2969.9
+199.37032 1668.9
+199.37923 3440.6
+199.39569 1783.5
+199.45216 1724.9
+199.47632 1288.2
+199.49812 1212.7
+217.33354 990.5
+217.70250 1051.3
+227.55959 1116.3
+235.85536 1079.5
+238.30162 1107.8
+254.84271 958.9
+271.29617 1080.5
+295.20663 986.9
+334.26428 1043.5
+354.31210 1060.7
+356.77219 1008.4
+370.85974 1026.1
+371.22955 1358.6
+394.30923 54727.0
+395.31274 14345.7
+400.39487 1134.5
+404.32156 1221.7
+412.31979 67793.4
+413.32300 15536.0
+417.72330 1061.2
+430.33026 82041.6
+431.33368 15590.7
+446.32288 1118.7
+448.34061 73534.7
+449.34467 13171.3
+473.96625 1047.7
+498.35812 1022.4
+532.58386 3092.7
+547.32428 1446.4
+557.16138 1250.6
+561.37012 168736.2
+562.37347 37365.9
+568.81689 1128.4
+577.92053 926.2
+579.38068 210735.2
+580.38367 42817.1
+580.87561 1365.1
+597.39111 236212.6
+598.39410 50196.6
+598.94275 1172.4
+630.39148 1272.9
+676.63892 2055.6
+729.36310 1278.9
+795.89026 1636.1
+926.50183 1138.4
+966.53149 1224.4
+1042.38379 995.0
+1057.24756 1821.2
+1097.61475 1054.0
+1167.84070 1176.3
+1194.62854 1036.7
+1198.30322 6323.6
+1459.34460 1086.3
+1488.24304 1076.6
+1525.36792 1816.0
+1667.38538 1364.9
+1710.31116 1141.6
+1876.11780 1241.8
+1878.56030 1530.8
+1879.17468 3344.1
+1879.52710 36169.3
+1879.88904 3996.8
+1880.48206 1759.3
+1882.43604 1000.9
+1907.16626 13277.5
+1930.53076 1451.7
+1971.01465 941.1
+1971.86987 1068.6
+S	3670	3670	1880.10440793
+Z	2	3758.361
+Z	3	5637.038
+532.52631 2165.2
+549.14917 672.2
+630.39557 777.5
+676.67444 1016.6
+731.12292 702.6
+789.79767 583.3
+795.87665 860.2
+1019.69873 768.5
+1057.30054 960.4
+1198.17664 3445.4
+1525.41199 751.0
+1830.32263 672.6
+1860.16577 597.1
+1876.65747 728.4
+1878.62622 1041.8
+1879.33447 3289.2
+1879.63904 19238.1
+1880.15369 2591.2
+1880.63098 1318.2
+1881.43713 721.6
+1907.10046 7110.6
+1930.53711 1013.0
+S	3671	3671	1907.56240793
+Z	2	3813.277
+Z	3	5719.412
+516.03253 574.2
+532.53998 2165.4
+549.13885 803.2
+574.08673 671.5
+584.81982 664.3
+589.67694 708.1
+598.51251 592.9
+630.37415 505.3
+630.40369 548.2
+676.65796 1198.3
+747.70685 530.7
+780.30817 748.8
+795.89069 1164.3
+1198.20752 3650.6
+1335.22363 618.9
+1424.99976 525.1
+1498.91174 710.5
+1624.50903 596.0
+1878.29333 1015.2
+1878.72534 971.5
+1879.58997 18598.3
+1906.75940 942.7
+1907.08948 7153.6
+1907.48645 664.4
+1919.07422 955.7
+1930.53137 1007.9
+S	3673	3673	1880.05999127
+Z	2	3758.272
+Z	3	5636.905
+532.54541 2141.5
+547.33441 661.7
+581.56061 562.5
+584.31317 615.2
+731.10876 792.4
+795.90497 837.7
+1188.13379 874.3
+1198.22510 3240.4
+1226.65601 574.4
+1471.08655 662.6
+1585.21887 572.5
+1860.11804 651.9
+1878.66565 1275.5
+1879.58337 18405.2
+1880.53101 847.1
+1881.50867 673.5
+1907.11426 7011.9
+1930.57227 1192.6
+S	3674	3674	1907.58599127
+Z	2	3813.324
+Z	3	5719.483
+532.59381 1998.5
+628.42535 680.2
+676.66846 1060.7
+715.64722 629.1
+731.12262 724.5
+780.14813 644.0
+795.91333 1123.8
+823.27423 706.1
+1019.68817 888.2
+1021.92517 659.9
+1198.33154 3228.4
+1525.40015 863.2
+1701.55859 654.3
+1715.34265 689.3
+1878.44373 930.0
+1879.28162 603.8
+1879.60864 20087.2
+1880.76147 1060.0
+1881.89624 1013.0
+1906.83875 1600.4
+1907.11548 6895.4
+1930.63721 1235.1
+S	3675	3675	420.2348246
+Z	1	419.227
+109.54166 544.8
+120.66835 773.4
+121.77357 2248.6
+124.08006 753.6
+125.58775 550.7
+137.29466 556.9
+148.30600 642.6
+157.60760 716.9
+165.74821 685.8
+169.49840 694.1
+171.63716 717.2
+186.56915 632.6
+194.54453 775.6
+197.70877 642.0
+198.97681 1169.9
+199.33810 1038.7
+199.35457 2076.9
+199.36487 2134.2
+199.37164 2136.1
+199.46089 852.2
+211.89578 554.9
+235.88148 585.4
+240.20964 555.2
+245.67062 641.1
+246.67976 595.9
+258.49341 714.3
+265.16388 689.3
+280.19003 689.0
+308.91089 656.1
+313.02493 696.4
+321.17252 642.6
+324.11450 961.1
+327.70920 544.2
+336.28082 627.4
+342.28244 663.7
+344.32910 525.7
+358.86813 632.4
+383.20569 1611.9
+383.24203 884.9
+399.21426 787.2
+399.25131 1746.3
+399.28824 1000.7
+399.32529 824.3
+401.15860 3876.8
+401.21619 7957.5
+401.26514 916.0
+402.76740 703.9
+416.51300 522.8
+420.12283 652.1
+427.55560 673.1
+448.81653 641.9
+476.76730 779.2
+490.29581 1129.4
+532.61169 1856.4
+549.16852 769.9
+556.41302 577.8
+596.36029 587.2
+603.38220 1620.4
+630.42413 807.0
+676.68506 1060.7
+693.17877 640.9
+717.97748 699.5
+779.69214 613.3
+780.02045 763.5
+795.90314 892.9
+807.88910 601.2
+809.99512 564.1
+858.07770 639.4
+1019.78430 591.1
+1031.27649 579.9
+1033.68591 524.1
+1169.08032 551.5
+1198.36963 3368.0
+1317.96692 554.8
+1352.87988 689.4
+1404.90295 740.2
+1525.45154 935.6
+1649.28784 662.3
+S	3677	3677	1880.0158246
+Z	3	5636.772
+Z	2	3758.184
+532.57440 1622.9
+630.42944 777.9
+676.67529 779.5
+805.96100 735.7
+848.92957 599.0
+868.81757 655.8
+872.40381 544.4
+1084.04114 586.5
+1140.17285 837.3
+1187.91211 685.1
+1198.28638 3328.6
+1407.56750 750.9
+1542.20935 622.7
+1728.02380 683.8
+1876.42249 923.5
+1878.46960 1219.3
+1879.63147 19607.4
+1880.79504 937.7
+1907.11548 6871.3
+1907.33191 598.5
+S	3678	3678	1907.42940793
+Z	3	5719.013
+Z	2	3813.011
+516.41333 575.6
+532.61731 1735.8
+596.71240 673.9
+676.68250 1037.2
+713.82562 614.8
+715.29749 722.8
+731.12140 924.4
+784.24298 580.0
+795.92078 1026.4
+859.64679 682.6
+889.40704 739.2
+1127.61475 623.2
+1198.38965 3110.3
+1242.68884 727.3
+1391.13013 651.3
+1459.01636 575.5
+1525.46570 1005.0
+1875.92358 654.5
+1879.23547 1371.0
+1879.65833 19253.7
+1880.13013 1660.8
+1880.33289 895.3
+1881.03345 644.4
+1907.19153 7418.8
+1919.11450 731.6
+1932.31763 810.1
+S	3679	3679	421.479241267
+Z	3	1261.162
+Z	2	841.111
+105.23502 593.9
+113.46141 590.6
+120.66319 857.6
+120.90378 618.0
+121.10692 511.3
+121.77306 2069.5
+124.14703 563.9
+128.57344 711.9
+133.14905 1017.8
+133.91846 580.4
+151.89615 565.8
+155.09848 1146.4
+164.23466 517.6
+171.64571 695.5
+177.11159 2032.7
+177.79237 569.0
+178.05254 762.3
+179.89076 637.3
+187.02972 552.1
+199.11078 609.7
+199.12436 1100.1
+199.26067 1225.9
+199.34148 1381.4
+199.35904 2574.5
+199.37096 1598.9
+199.38921 1019.1
+199.43855 537.5
+199.45561 1056.1
+201.11057 945.3
+203.89906 575.8
+210.02480 22432.2
+215.80162 592.0
+221.13803 1370.5
+229.40009 569.9
+231.54173 658.6
+234.98959 582.3
+239.14842 1323.3
+240.13942 556.8
+243.15164 737.4
+243.38234 643.9
+263.50137 549.7
+265.10632 1979.8
+270.20584 3703.3
+270.69495 571.3
+271.30347 585.2
+273.16855 680.9
+273.88522 639.9
+283.11691 988.4
+283.17599 782.1
+299.00433 533.5
+316.26129 752.8
+356.20905 972.6
+371.22522 916.6
+381.35202 610.9
+385.22220 1775.7
+386.02243 2374.2
+401.15778 2866.9
+401.21579 33798.8
+401.26456 1694.3
+402.21939 6530.8
+403.04657 2590.7
+403.24335 699.6
+403.28445 678.1
+404.03134 8818.0
+410.24210 1057.7
+448.74609 587.3
+459.27765 985.3
+476.17471 622.7
+490.29999 742.3
+503.30219 809.2
+528.45282 520.1
+532.59033 2089.1
+544.09839 598.6
+547.98950 614.9
+549.14105 1031.1
+603.37823 1508.1
+650.68488 621.6
+731.12225 639.5
+743.51917 708.2
+744.52356 617.7
+757.14154 582.7
+795.90155 840.4
+1021.17932 886.5
+1027.69226 581.5
+1198.32178 3309.5
+1287.58276 550.2
+1331.84021 551.5
+1393.10010 617.7
+1456.99316 669.4
+1525.35999 788.4
+1590.18738 626.7
+1683.37256 589.6
+S	3681	3681	1880.13024127
+Z	3	5637.115
+Z	2	3758.413
+507.90848 641.4
+532.55945 1810.4
+630.37976 715.5
+676.67529 1081.5
+676.75598 700.6
+694.37476 677.1
+731.08624 762.4
+776.86023 594.4
+795.91321 1017.8
+808.82306 594.5
+962.65784 669.4
+1019.75732 682.8
+1057.32251 681.4
+1198.25610 3233.1
+1243.34729 647.9
+1851.89001 716.6
+1878.74829 715.3
+1879.64563 18844.8
+1907.13843 6617.9
+1930.49414 705.6
+S	3682	3682	1907.60240793
+Z	3	5719.532
+Z	2	3813.357
+532.49921 2010.5
+537.60260 549.9
+607.00507 613.4
+676.66345 1065.3
+732.93896 552.0
+795.91473 953.0
+888.13324 588.2
+1188.22253 732.8
+1198.11023 3172.3
+1287.63318 668.4
+1320.84521 677.2
+1384.53259 615.1
+1525.22302 800.5
+1830.28735 767.7
+1877.19055 705.0
+1878.40186 930.1
+1879.21960 1508.5
+1879.59985 19646.9
+1879.97766 1216.6
+1882.98743 649.5
+1907.14453 7654.8
+1919.07263 873.1
+1930.34167 1193.0
+1932.33887 739.8
+S	3683	3683	455.2268246
+Z	1	454.219
+120.64326 616.3
+120.69621 533.2
+121.77266 1315.5
+121.77646 1674.0
+128.97090 522.2
+136.67955 596.7
+139.15163 590.8
+143.72456 670.7
+150.80835 579.6
+152.16913 532.1
+157.58405 612.7
+157.93887 606.2
+169.59718 596.0
+177.11159 1070.1
+195.95508 560.4
+198.30482 593.7
+198.98193 647.5
+199.25682 1030.6
+199.33815 1121.1
+199.35315 2725.9
+199.37152 1828.4
+199.38472 793.0
+199.40198 535.3
+199.45313 1037.8
+199.47006 776.5
+208.29672 664.8
+213.27911 629.9
+221.01733 690.6
+224.51512 596.0
+240.99590 589.4
+250.35797 614.7
+252.82385 552.5
+258.52814 504.2
+271.29803 606.3
+273.31503 552.9
+275.75876 614.8
+280.16696 767.6
+285.12534 754.0
+291.19376 583.7
+299.20020 636.3
+313.31332 569.1
+321.12650 1233.3
+335.11996 599.3
+350.91333 584.4
+372.97415 584.6
+403.71799 1574.5
+404.21979 1327.6
+406.16922 762.8
+417.24152 1077.3
+432.05774 484.4
+435.19464 654.9
+435.24603 1147.1
+437.19254 6638.6
+469.90695 723.9
+502.21832 546.2
+503.30618 690.6
+504.21976 577.5
+532.53766 1999.8
+547.33002 957.9
+549.09924 877.2
+608.38812 605.0
+630.34357 712.1
+640.38965 824.9
+728.43896 716.4
+777.66083 559.3
+795.91620 966.8
+799.18494 566.7
+872.60455 615.8
+913.65546 534.1
+948.31500 677.5
+993.48065 579.1
+1057.27356 800.3
+1079.49390 768.8
+1178.90161 541.8
+1198.19641 3565.0
+1261.87415 695.8
+1339.23853 573.1
+1389.98450 647.1
+1394.82544 565.8
+1452.54333 646.1
+1508.84265 588.3
+1524.59363 575.5
+1528.46143 569.7
+1766.13770 667.2
+1776.94690 635.2
+S	3685	3685	1907.5518246
+Z	2	3813.256
+Z	3	5719.38
+532.61304 1285.1
+549.11786 706.2
+596.94305 583.0
+676.68042 995.3
+727.24500 824.1
+731.06677 768.8
+761.24310 720.9
+1057.30798 832.3
+1123.10950 711.0
+1159.98425 655.3
+1165.79944 553.3
+1198.37500 3206.9
+1265.36023 694.8
+1287.19800 700.2
+1615.10547 609.9
+1872.72070 707.0
+1879.18762 1240.2
+1879.65698 19238.4
+1880.13660 914.7
+1907.15161 7225.8
+1913.05505 698.8
+1930.46875 824.3
+1984.97009 629.9
+S	3686	3686	1198.66840793
+Z	2	2395.489
+Z	3	3592.73
+334.02283 654.6
+349.35117 560.1
+372.95645 564.5
+381.33951 830.6
+383.04846 554.7
+482.62473 881.8
+518.59094 549.4
+532.57629 1453.4
+570.95319 576.9
+582.55377 589.6
+584.27112 682.3
+623.81830 620.8
+639.73151 623.9
+642.50354 576.1
+676.66510 976.3
+695.03430 591.2
+727.87646 568.1
+732.52637 644.9
+779.75061 619.9
+788.11060 627.4
+920.37189 644.9
+1008.79333 592.3
+1058.13904 640.9
+1104.99011 712.2
+1120.72974 594.7
+1198.29456 3215.7
+1247.11865 742.4
+1260.21667 686.1
+1487.02917 625.3
+1611.82007 614.4
+1788.74805 658.1
+1870.22180 823.2
+1876.07910 641.4
+1878.33130 1089.8
+1879.26001 843.7
+1879.60071 20095.0
+1880.76233 1054.2
+1882.92102 572.1
+1907.07959 7125.9
+1907.36365 1436.1
+1919.12341 801.6
+1930.51721 1073.2
+S	3687	3687	635.802991267
+Z	2	1269.758
+Z	3	1904.134
+165.74957 844.7
+166.77667 782.4
+177.11137 2074.6
+188.26147 1044.9
+188.27277 1483.9
+188.28419 1649.2
+188.29826 1542.2
+188.30505 1369.2
+188.31671 1078.1
+188.43256 903.8
+198.58202 707.8
+198.98116 1075.4
+199.05153 1525.0
+199.27806 1532.6
+199.32605 1080.4
+199.34135 1307.9
+199.35707 1489.7
+199.37511 2992.8
+199.47218 1449.0
+201.04886 1096.9
+202.46758 836.9
+216.80530 913.7
+220.11798 846.7
+221.13768 1956.7
+226.59195 770.1
+243.07758 1834.8
+245.07431 1469.0
+252.23100 731.6
+252.87408 848.4
+265.16479 1234.0
+271.33258 871.4
+271.48553 1410.5
+279.25320 781.9
+283.17529 1207.9
+291.23029 1618.3
+292.07736 763.9
+309.18982 3177.2
+318.94696 759.7
+327.20010 1401.7
+335.25479 958.8
+342.24805 960.0
+353.21542 3454.4
+371.22781 1614.3
+397.24030 2636.2
+415.25113 1435.9
+441.26804 2032.3
+459.27762 1339.7
+465.82483 749.9
+529.32623 972.8
+532.55847 2457.2
+540.32593 890.7
+547.33020 4855.0
+557.15570 887.3
+573.16266 969.8
+575.33990 1555.2
+580.32623 1247.8
+584.66687 1797.5
+590.15918 3878.2
+591.16547 5234.8
+591.35638 8729.3
+592.35529 734.6
+602.40936 1014.7
+602.82965 1154.3
+606.16064 1151.7
+606.66138 900.6
+615.16400 3319.7
+615.29327 3441.4
+615.66901 3466.0
+615.91254 3878.5
+616.17096 2528.5
+616.29730 18740.0
+616.41199 1436.2
+616.65753 906.8
+617.30029 2265.9
+617.42267 18248.8
+618.42871 4321.9
+624.17108 7744.8
+624.67267 3964.9
+625.17719 2222.5
+658.18146 1111.8
+740.46606 1093.5
+784.48346 1364.9
+785.48572 1162.4
+795.91656 907.1
+828.51324 2566.7
+829.52130 1645.2
+850.45807 943.4
+851.45502 1217.5
+852.44843 1136.2
+855.01038 828.7
+872.53888 1949.2
+873.54510 1613.4
+896.48218 1010.8
+939.51074 1307.9
+940.50427 1991.6
+983.53381 1472.7
+984.53680 1175.0
+1022.23853 867.1
+1027.56836 1345.5
+1028.56018 1779.2
+1058.17859 891.2
+1073.61841 982.3
+1188.34583 1022.6
+1198.25049 4825.7
+1257.19849 813.6
+1466.14465 892.5
+1494.19995 857.6
+1695.96313 956.6
+1776.88232 1276.2
+1876.02173 795.8
+1878.53748 939.7
+1878.72009 1007.7
+1879.00073 1949.6
+1879.36804 2835.9
+1879.61511 26853.2
+1880.21680 1711.1
+1882.99414 813.4
+1906.81921 1581.7
+1907.13684 9683.6
+1930.46338 1546.9
+1954.14136 848.8
+S	3689	3689	615.822407933
+Z	2	1229.797
+Z	3	1844.192
+155.02533 19017.1
+157.02246 2553.1
+169.48427 1418.1
+175.15739 1252.6
+176.46352 1244.0
+177.11174 1849.3
+188.20979 1192.9
+188.25540 1596.5
+188.26663 989.3
+188.28175 2168.7
+188.29295 1149.6
+188.30214 1566.1
+188.31252 1449.7
+188.31851 1594.7
+188.35495 1548.8
+198.98148 2405.8
+199.05167 27522.5
+199.28101 1370.0
+199.28839 1097.2
+199.30205 1642.9
+199.34608 2917.0
+199.35611 2147.1
+199.36855 5331.5
+199.37895 2274.8
+199.45277 1349.2
+199.46753 1678.6
+200.05490 2116.1
+201.04861 3798.3
+223.15225 1634.1
+225.12033 1087.3
+227.33559 1198.5
+230.89830 1138.4
+243.07767 20022.5
+244.08237 1527.0
+245.07503 2503.4
+255.27675 1617.7
+265.16409 2400.9
+270.08490 1308.7
+287.10458 2168.8
+308.88351 1266.4
+309.18915 3662.7
+327.10779 1458.9
+342.25378 1407.1
+349.14169 1286.0
+353.21579 2383.6
+375.15457 1309.6
+379.87369 1105.6
+393.16803 1538.0
+394.30945 82039.3
+395.31274 4590.8
+397.81140 1287.4
+412.31992 98559.3
+413.32217 4883.9
+419.18256 1643.1
+429.45734 1345.4
+430.33038 114148.0
+431.33420 4935.4
+437.19159 3749.3
+446.32535 3530.4
+448.34067 106899.4
+449.34451 3342.2
+457.69806 1168.3
+463.20715 1701.7
+466.12704 1114.9
+481.21884 4432.5
+507.23312 2110.6
+525.24481 13222.7
+526.24963 2259.7
+527.24286 2106.3
+532.59711 2747.5
+556.17871 8432.2
+557.15869 9105.8
+558.16425 2540.5
+561.37024 246606.8
+562.37366 12872.9
+569.27057 20380.2
+571.26630 3319.2
+578.15344 1273.4
+579.38080 296832.6
+580.38416 15032.2
+586.34412 1114.6
+592.71216 1289.5
+597.39117 323118.4
+598.16437 4052.3
+598.39465 18537.3
+613.65051 1415.0
+630.37500 1795.3
+676.71643 1618.5
+731.09253 1324.3
+779.09003 1246.4
+795.91266 1891.1
+817.27307 1210.5
+1057.57092 1266.4
+1198.33313 6129.6
+1235.46301 1128.9
+1489.72693 1551.6
+1525.33313 1788.8
+1667.43555 1416.8
+1726.77222 1269.0
+1878.99060 2250.5
+1879.35278 10487.1
+1879.73645 38035.6
+1880.12476 7487.0
+1880.52942 4727.8
+1880.89063 2261.5
+1881.25732 2507.4
+1882.78101 1493.7
+1883.12524 1559.6
+1907.08606 15589.2
+1919.05542 1348.7
+1924.13928 1126.6
+1930.51392 2135.9
+1994.21204 1181.3
+S	3690	3690	1880.0565746
+Z	3	5636.895
+Z	2	3758.265
+510.51730 625.3
+532.44147 878.4
+532.60938 1411.4
+610.91235 626.6
+630.40674 745.5
+676.66345 752.4
+703.45294 616.4
+712.79993 621.9
+729.64893 569.4
+795.91254 879.7
+837.44147 683.6
+840.73962 560.5
+1198.06958 962.5
+1198.34326 2237.2
+1220.37756 647.1
+1501.30139 649.1
+1504.24915 645.9
+1553.69897 630.7
+1643.25610 666.9
+1732.29370 715.9
+1776.93127 842.9
+1877.95044 690.2
+1878.63916 953.5
+1878.84448 921.5
+1879.16492 2046.0
+1879.60754 19330.8
+1880.08545 1927.1
+1880.59265 1404.1
+1907.04675 7284.8
+1919.07971 1011.4
+1998.53784 611.4
+S	3691	3691	616.825407933
+Z	3	1847.201
+Z	2	1231.803
+155.02556 1299.1
+157.02263 2618.1
+158.89900 620.5
+165.74725 1226.9
+166.39613 519.6
+166.67519 564.1
+171.63728 829.3
+188.26036 800.4
+188.27287 1192.2
+188.28256 1360.8
+188.28993 1263.8
+188.30603 968.8
+188.31812 909.3
+191.91270 516.1
+198.98148 886.2
+199.05171 2114.2
+199.27306 682.1
+199.29083 678.9
+199.34966 1546.2
+199.36174 1490.5
+199.37013 2505.6
+199.37946 1367.4
+199.39816 775.4
+199.40169 777.0
+199.41264 859.7
+200.05357 896.5
+201.04875 3070.2
+212.59540 557.8
+229.75742 531.9
+243.07811 1285.1
+245.07513 2620.1
+260.65253 555.8
+274.71310 536.6
+304.52469 579.4
+309.19116 673.3
+311.55789 548.5
+319.72479 589.6
+331.98138 504.5
+337.25363 659.3
+381.35611 661.6
+387.37671 670.3
+393.16602 557.1
+394.30978 67217.0
+394.63171 570.2
+395.31317 21082.7
+412.32019 84816.8
+413.32343 25247.3
+415.25299 1459.1
+418.23148 618.6
+424.28113 708.5
+427.54022 792.3
+430.33075 107252.1
+431.33398 24817.1
+431.80096 638.9
+447.32935 1571.9
+448.34097 100024.6
+449.34448 19327.1
+482.64288 919.7
+503.06436 654.0
+503.09958 747.0
+512.97906 623.7
+527.24231 793.9
+532.57996 1789.8
+556.17810 5107.4
+557.16028 7363.0
+558.16357 2772.2
+560.67871 890.2
+561.37067 204253.3
+562.06561 1143.5
+562.37366 65740.4
+570.27374 978.4
+571.26855 1268.4
+577.89923 1112.1
+579.38110 261947.9
+580.11194 1487.2
+580.38416 71357.3
+580.86786 1226.3
+581.08411 714.2
+584.50800 735.6
+591.35870 988.0
+595.80145 676.6
+595.84009 1043.6
+596.38428 707.2
+596.62598 934.8
+597.39148 295823.5
+597.45813 1501.0
+598.16046 3597.3
+598.39447 48405.4
+598.94830 1325.0
+599.16571 1487.6
+600.00293 571.1
+676.65558 929.5
+739.23004 668.4
+795.91595 1165.6
+950.48560 604.4
+1120.89160 677.2
+1198.30591 3107.0
+1525.41382 924.3
+1548.40979 559.2
+1628.21338 656.0
+1644.34497 710.0
+1694.95129 605.6
+1767.30261 623.9
+1870.37085 801.5
+1875.37280 802.0
+1878.62476 755.0
+1878.85376 602.5
+1879.57703 19013.8
+1879.86548 3601.8
+1880.27234 974.9
+1882.26599 833.8
+1907.05334 7329.4
+1910.18860 627.7
+1930.59155 880.6
+1978.92993 658.6
+1993.39868 633.6
+S	3693	3693	615.821991267
+Z	2	1229.796
+Z	3	1844.191
+155.02551 9523.5
+156.44574 2583.7
+159.56400 2698.5
+164.51776 2484.2
+164.81371 3207.5
+165.74608 4846.9
+169.18677 3024.5
+177.11157 4332.8
+188.20757 4032.3
+188.21617 2919.9
+188.23364 3360.6
+188.24124 2538.6
+188.24864 2669.2
+188.25893 3246.0
+188.26735 4669.8
+188.28177 2917.8
+188.29198 3564.8
+188.30788 5529.0
+188.32843 3730.5
+188.34756 4275.2
+188.35985 3540.9
+188.38327 2814.7
+191.26428 3445.0
+192.29022 3352.1
+198.04756 3010.5
+198.98067 5293.9
+199.05151 14697.8
+199.23019 3179.3
+199.27266 3191.3
+199.33759 3890.7
+199.34859 6033.8
+199.35881 5212.5
+199.36665 9836.4
+199.37833 6390.8
+199.40225 6296.7
+199.49785 2810.0
+221.13725 3252.8
+242.20406 2917.2
+243.07762 11190.4
+248.47673 2804.4
+251.87025 2776.2
+260.22879 2661.4
+275.37897 3771.7
+296.21805 3561.0
+305.78152 3035.8
+317.48822 3039.9
+330.71912 2699.8
+349.14017 3876.3
+350.28342 5178.1
+382.32428 2736.3
+388.17447 2775.8
+392.49188 2694.6
+394.30936 117720.2
+395.31308 27237.4
+398.09607 3476.8
+407.10681 3247.7
+412.31979 155948.3
+413.32312 35585.7
+424.75629 3192.1
+427.54257 3199.2
+430.16495 3373.5
+430.33023 190412.6
+431.33374 34846.9
+447.32095 3071.6
+447.68149 2705.8
+448.34076 188274.9
+449.34396 30043.8
+457.86896 3196.3
+467.13263 3775.1
+481.21695 3968.0
+482.63312 4752.4
+493.90421 2910.2
+532.56781 9861.8
+556.18152 4734.7
+557.16052 4814.9
+561.37012 353060.4
+562.37354 99368.7
+563.28986 2769.4
+564.90247 2920.5
+569.27197 4941.2
+579.38074 469887.9
+580.38403 112148.7
+591.35773 5493.6
+597.39117 525339.5
+598.15399 4260.8
+598.39410 121127.4
+630.40216 4587.0
+676.66364 2919.6
+676.70313 3425.4
+679.40918 7471.8
+683.96857 3050.6
+690.89893 3636.1
+704.63928 2889.9
+723.43579 14276.7
+767.46252 19929.3
+768.46179 6795.7
+780.07806 3203.0
+795.92511 5862.0
+811.48694 17056.0
+812.49567 6528.5
+832.40826 3782.0
+840.06195 3391.1
+855.51440 13835.6
+856.51788 7432.0
+899.53766 7847.3
+900.54510 4579.7
+943.56335 7161.7
+947.93414 2732.7
+963.68274 2779.9
+987.57733 5237.3
+1014.01624 2863.8
+1057.36230 4043.6
+1065.45544 2748.6
+1177.70740 2917.9
+1195.11487 2689.3
+1198.26904 16664.3
+1248.79089 3288.5
+1252.31750 3572.1
+1314.74524 2841.1
+1432.96838 3051.9
+1481.64343 2805.4
+1646.05383 3608.9
+1667.41870 4008.8
+1713.72986 3096.4
+1763.62805 2936.7
+1794.79053 3261.9
+1846.36719 2582.0
+1864.05945 2911.1
+1867.33167 3480.2
+1872.67651 3287.4
+1878.80261 7315.7
+1879.03015 6362.2
+1879.47961 36199.1
+1879.73022 86886.7
+1880.71729 4624.5
+1881.09424 6390.8
+1881.76013 4267.8
+1907.06201 37787.9
+1930.60559 4946.5
+S	3694	3694	1880.0548246
+Z	3	5636.889
+Z	2	3758.262
+532.54889 2026.9
+549.15845 995.2
+602.15594 590.5
+611.12048 596.5
+731.13690 806.2
+742.87079 576.4
+765.49152 697.4
+795.90698 1030.9
+906.42511 636.6
+907.05084 618.0
+1020.74036 582.6
+1057.30505 706.3
+1198.22864 3194.0
+1236.70447 761.8
+1268.45544 614.6
+1404.59290 693.2
+1746.77942 761.3
+1762.82288 569.0
+1763.62073 747.8
+1845.17236 616.1
+1876.21912 654.7
+1877.85339 853.9
+1879.13989 2033.7
+1879.37073 1473.9
+1879.61023 19554.1
+1880.08521 1585.5
+1881.41260 827.0
+1885.17798 681.0
+1907.05078 7465.1
+1930.62964 1557.6
+S	3695	3695	616.825407933
+Z	3	1847.201
+Z	2	1231.803
+155.02521 4752.0
+173.10925 2279.3
+181.67831 2542.2
+182.76723 2545.0
+187.69209 2374.7
+188.23244 2162.3
+188.23752 2401.2
+188.26508 4919.6
+188.27194 4082.0
+188.28685 5086.4
+188.29889 6010.3
+188.30853 3338.0
+188.31792 2957.4
+197.68602 2676.3
+198.97745 2925.7
+199.05173 3687.2
+199.28128 3697.7
+199.33696 3312.3
+199.36447 10024.7
+199.37933 10586.4
+199.46432 3528.7
+199.47624 4736.4
+221.13748 2990.3
+228.04190 2606.0
+233.56267 2942.0
+243.07814 3602.7
+256.07742 2178.8
+262.29993 2395.8
+264.06451 2390.3
+271.48260 3404.4
+279.55185 2467.0
+286.85294 2456.0
+308.88223 2264.9
+320.69052 2374.0
+333.33844 2396.3
+339.40024 2569.9
+342.25333 2784.6
+350.29013 2462.2
+351.20499 2708.6
+381.34039 3777.8
+394.30942 90650.1
+395.31259 43078.2
+412.31976 150121.3
+413.32315 51387.9
+430.33026 188556.7
+431.33356 58954.5
+448.34055 189222.7
+449.34384 54954.7
+532.57147 8872.0
+556.18298 2608.7
+557.15833 4224.1
+561.37006 369581.1
+562.06635 2742.4
+562.37317 142359.0
+572.30164 2996.7
+579.38055 497539.7
+579.43164 3518.5
+580.38361 174697.2
+581.38501 4333.5
+596.62506 3091.9
+597.39099 665643.4
+598.39380 200604.1
+598.93665 4475.7
+599.39343 5011.9
+676.65198 3481.6
+679.40997 5196.2
+723.43634 5344.5
+729.36505 2863.1
+767.46112 9495.8
+795.90289 3267.2
+811.48218 8406.3
+855.51276 8342.9
+899.53528 3284.2
+941.96820 2531.6
+943.56384 3349.9
+1041.42981 2696.8
+1057.25769 3137.1
+1081.95398 2667.1
+1184.21228 2684.0
+1187.94592 3173.4
+1198.27722 14260.9
+1224.13062 2658.8
+1259.93909 2457.1
+1390.35205 3061.9
+1423.47107 3008.4
+1535.49548 2699.4
+1684.89722 2617.3
+1694.93738 2761.2
+1805.82324 2480.0
+1838.96167 2684.5
+1870.34302 2935.8
+1877.67957 3464.8
+1878.52039 5648.1
+1878.92554 4884.5
+1879.57397 87529.6
+1879.86743 5680.3
+1880.34839 5119.0
+1880.64758 4101.7
+1881.20190 6598.3
+1906.77148 3956.6
+1907.11646 33244.4
+1907.45007 4766.4
+1926.49084 2598.2
+1930.48108 3924.9
+S	3697	3697	1880.08440793
+Z	3	5636.978
+Z	2	3758.321
+524.80249 610.2
+532.51855 1552.4
+549.56891 644.9
+630.37018 786.5
+657.70685 612.6
+746.46844 598.8
+757.00287 627.3
+795.91162 866.6
+944.14172 737.8
+1057.30493 805.3
+1077.85840 644.4
+1198.15515 3417.6
+1243.44385 617.9
+1372.73999 725.9
+1444.52722 605.9
+1542.34521 694.9
+1786.72705 615.0
+1800.12732 601.5
+1825.21191 645.7
+1870.22217 659.9
+1877.14221 748.5
+1877.37598 607.9
+1878.36267 823.2
+1878.52881 532.4
+1878.93628 1635.2
+1879.37927 5818.7
+1879.64026 18026.1
+1879.89124 4612.3
+1880.20166 1861.0
+1880.69604 916.6
+1880.90845 944.8
+1881.16089 738.9
+1907.20044 7785.8
+S	3698	3698	1907.5618246
+Z	3	5719.41
+Z	2	3813.276
+532.53400 1747.0
+630.35486 817.2
+644.03748 622.4
+658.40204 580.5
+676.67102 1039.2
+1054.62305 626.2
+1057.27466 807.1
+1198.19336 3500.0
+1233.53931 744.1
+1289.66541 669.2
+1860.17322 671.8
+1870.31689 895.0
+1878.89343 1143.3
+1879.31714 1280.0
+1879.61072 20146.3
+1879.89990 1441.9
+1880.32568 1457.8
+1907.18579 7240.0
+S	3699	3699	593.7418246
+Z	2	1185.636
+Z	3	1777.95
+151.77568 994.6
+165.75156 972.1
+169.31685 1034.1
+177.11063 1126.9
+179.60663 819.6
+182.11133 930.4
+188.26363 1238.1
+188.27646 1665.0
+188.28864 1526.5
+188.29370 1660.6
+188.30057 1428.2
+188.31288 1500.8
+195.21896 942.4
+196.12560 869.1
+198.98058 1261.9
+199.27745 1187.0
+199.35571 2140.8
+199.36899 2181.7
+199.37802 3895.0
+199.39561 1558.7
+199.44708 968.8
+199.45351 888.4
+199.47507 1149.8
+199.49896 1211.3
+203.50395 836.1
+221.13768 1387.2
+232.42601 841.9
+235.61647 895.1
+242.29282 987.2
+246.15320 1083.3
+255.29871 840.8
+271.35217 1156.2
+271.66284 1278.7
+276.38550 800.5
+279.35254 1040.6
+283.17349 2044.7
+288.65009 957.4
+309.18945 1401.5
+327.20026 1757.3
+342.26215 815.2
+353.21643 1390.4
+371.22586 2303.9
+371.54547 1225.5
+381.34982 1123.5
+390.73969 900.9
+396.00989 912.8
+397.24216 1703.0
+399.04068 923.3
+413.09344 904.1
+415.25189 2672.5
+427.53238 1759.4
+454.92902 872.7
+459.27869 4358.8
+469.76944 871.5
+482.62604 1045.6
+485.29343 1697.0
+503.30365 4505.0
+504.81409 1034.0
+509.30359 2832.5
+532.56818 3268.7
+547.33081 6521.9
+549.37299 3588.2
+552.30280 886.8
+561.74310 1070.0
+571.38367 2545.4
+574.40149 6847.1
+635.38434 2834.2
+640.51855 981.5
+676.70618 1406.9
+679.40436 3179.6
+723.43652 1355.3
+745.52655 2147.3
+764.37585 1113.5
+767.46332 1147.0
+789.55634 2507.0
+795.91461 1490.8
+797.47754 1267.1
+831.33551 977.0
+833.58118 3764.2
+860.47162 1810.6
+877.60443 4563.9
+900.74524 977.7
+921.63220 4540.8
+965.66406 3949.2
+1009.68213 1945.9
+1057.33008 1306.0
+1089.09814 1060.3
+1198.27039 5339.5
+1480.26343 997.9
+1767.61292 885.0
+1771.24402 957.9
+1876.14929 1355.2
+1878.40430 1291.6
+1878.91577 2267.6
+1879.35303 4226.8
+1879.69031 30976.3
+1880.02808 3195.5
+1880.42786 1626.8
+1880.90320 1471.4
+1881.36755 1104.0
+1882.35547 1028.8
+1883.90173 1201.2
+1899.83826 925.7
+1906.54260 1126.5
+1907.21460 12103.1
+1930.55945 1874.4
+1932.00562 1237.6
+S	3701	3701	1880.04599127
+Z	3	5636.863
+Z	2	3758.244
+532.58350 2035.4
+549.16034 694.6
+630.40613 946.8
+632.23828 664.1
+676.69171 736.2
+756.46722 606.2
+795.91193 1134.3
+818.34851 635.2
+842.79175 590.8
+858.05719 669.8
+1057.31653 851.8
+1198.30652 2865.5
+1235.14844 561.0
+1235.57825 591.4
+1289.92859 697.1
+1344.30396 605.6
+1377.97095 594.7
+1399.87378 696.1
+1467.84985 624.0
+1680.04822 581.9
+1877.94250 719.4
+1879.68713 18553.5
+1879.97400 3569.8
+1880.27576 1641.9
+1880.81580 935.8
+1881.53638 727.3
+1881.73511 765.6
+1907.18164 7617.6
+1910.07593 617.8
+1919.13013 1037.6
+1930.63440 1071.5
+1976.85645 618.8
+S	3702	3702	505.694991267
+Z	2	1009.542
+Z	3	1513.81
+133.14680 1172.9
+138.30748 685.8
+154.04477 695.9
+157.58855 745.1
+165.74712 1173.1
+167.46529 712.9
+169.49181 859.2
+177.11050 748.1
+178.05278 2659.3
+182.77257 829.9
+185.03465 675.2
+187.14746 1007.2
+188.22163 1213.0
+188.23586 601.8
+188.24052 578.5
+188.26666 991.1
+188.27414 890.9
+188.28160 652.5
+188.31198 688.9
+188.32378 814.8
+188.35312 805.4
+188.37178 687.2
+188.37990 710.3
+188.40155 788.3
+198.98158 860.7
+199.27910 1230.9
+199.35490 1287.6
+199.37665 3418.3
+199.39529 1832.5
+199.45438 986.1
+199.47452 1297.5
+203.53828 697.7
+211.07942 743.3
+227.47075 681.9
+236.16702 1798.6
+238.69228 735.3
+241.19469 875.2
+243.00131 909.4
+259.20505 2160.6
+268.26303 3996.5
+273.16907 749.6
+276.23132 8447.1
+277.21545 7386.9
+294.24200 32717.9
+310.21921 1076.7
+343.81845 648.8
+376.88327 611.3
+377.72400 902.5
+398.27390 769.7
+418.59454 706.9
+423.46597 798.8
+459.27179 871.8
+466.65213 664.3
+470.23770 11141.1
+482.62524 1882.6
+484.99399 653.6
+486.11923 1020.6
+486.35306 1075.2
+486.70728 898.3
+487.21619 1448.7
+487.26395 315768.4
+487.82553 1367.1
+488.24774 12447.5
+488.41132 2076.1
+511.40527 720.3
+532.58118 2440.5
+547.33081 1460.0
+591.35272 2035.7
+617.29333 900.8
+626.29865 1132.9
+630.36847 1189.9
+635.38281 1605.9
+676.63885 1124.9
+676.65674 1070.8
+677.33484 715.5
+679.40924 1511.8
+683.34515 802.2
+690.89862 673.6
+692.88788 679.4
+723.43420 859.2
+794.29407 793.5
+795.90771 1134.0
+838.98315 666.0
+944.94666 737.1
+994.61029 794.5
+1001.34222 645.3
+1057.31885 926.5
+1198.29883 4036.6
+1290.52966 780.4
+1454.47583 973.3
+1674.95850 694.8
+1729.46790 897.8
+1878.12427 1085.8
+1878.87634 1223.6
+1879.65308 23137.6
+1880.24500 1671.3
+1880.63037 1091.5
+1881.27673 1363.1
+1882.17749 1309.6
+1907.14832 9109.3
+S	3703	3703	1907.58340793
+Z	2	3813.319
+Z	3	5719.475
+532.59021 1880.1
+549.13165 789.8
+676.67523 885.4
+781.99707 653.5
+795.90277 1085.8
+858.02142 694.2
+949.78552 640.3
+975.11761 710.6
+1198.31519 3150.2
+1525.32776 995.5
+1876.15491 871.1
+1879.63245 19511.5
+1879.91272 2838.4
+1907.12561 7377.5
+S	3705	3705	1880.0665746
+Z	2	3758.285
+Z	3	5636.925
+505.35309 759.8
+532.53601 1758.7
+539.09344 568.1
+646.91962 756.2
+655.23615 757.3
+676.69720 1081.5
+795.91870 1136.8
+822.30670 592.0
+858.00989 774.3
+961.74390 587.8
+1023.34741 761.7
+1198.20288 3342.2
+1411.44128 605.3
+1525.35510 748.0
+1698.85962 897.6
+1855.45300 613.4
+1878.69067 787.9
+1879.40088 3190.2
+1879.68628 19062.1
+1879.99158 2867.2
+1881.99011 802.3
+1882.42395 726.3
+1906.85889 705.6
+1907.18591 6959.0
+1907.55908 1224.1
+1983.38086 645.7
+S	3706	3706	505.697991267
+Z	2	1009.548
+Z	3	1513.819
+128.58348 1036.6
+132.11685 1004.6
+138.44164 1076.3
+155.09917 1398.2
+165.74921 1874.5
+169.50308 1068.6
+177.11154 2363.8
+182.17938 1019.8
+188.24936 1630.7
+188.27553 4495.5
+188.29713 4144.8
+188.31819 2545.4
+199.34911 2507.9
+199.35719 2985.4
+199.36615 2849.8
+199.37532 3447.7
+199.39270 1098.3
+199.41942 1107.6
+199.47298 1304.7
+199.50789 1152.7
+201.52812 962.3
+202.26668 930.9
+216.30156 986.1
+236.16698 18080.5
+237.17207 1604.3
+251.46869 1021.0
+268.26257 46311.2
+269.26633 6630.3
+271.33658 1355.6
+273.54828 1001.8
+280.19727 1468.1
+292.22641 2883.0
+294.24130 2746.9
+295.92258 1146.9
+297.06717 1047.4
+298.82428 1137.5
+308.91586 1279.7
+309.18802 1285.9
+329.88678 916.8
+362.04849 1208.0
+371.22693 1695.2
+372.81552 992.9
+376.23068 1293.0
+398.27048 1270.4
+415.25241 3149.7
+442.59802 1351.2
+443.27350 1677.2
+443.61343 951.3
+447.27054 1944.4
+457.28668 2371.6
+459.27841 7377.7
+467.91934 1046.3
+485.24835 22841.7
+485.29221 1316.7
+486.25256 5275.5
+486.34872 30858.6
+487.26340 8458.9
+487.35175 6486.5
+488.24902 2370.0
+514.98199 1115.4
+522.09619 1096.0
+532.58008 2909.2
+547.32935 4683.3
+549.18243 1359.5
+591.35712 4887.9
+592.35809 1664.9
+626.79938 1289.1
+630.43976 1124.1
+635.38531 4224.2
+636.38501 1825.9
+676.70343 2351.7
+679.40894 3895.4
+723.43805 1709.2
+724.43298 1342.0
+767.47040 1345.2
+768.45593 1083.6
+776.93213 1133.7
+816.42133 1254.1
+836.55768 1339.8
+955.61322 1067.2
+993.88171 1063.6
+1057.34326 1592.7
+1178.00391 1151.4
+1198.30261 5651.8
+1280.70264 1312.9
+1511.72449 934.8
+1776.91040 2090.5
+1860.96240 1121.6
+1878.40210 1785.6
+1878.86548 2289.0
+1879.26428 1454.9
+1879.70313 35034.0
+1880.15857 1787.8
+1880.51245 2130.4
+1880.85608 1222.6
+1881.19385 995.1
+1881.40271 1286.7
+1907.23938 12963.2
+1977.06677 1143.7
+S	3707	3707	487.687991267
+Z	3	1459.789
+Z	2	973.528
+120.66331 900.2
+121.77209 2244.0
+121.77734 908.3
+126.90627 709.1
+128.57715 825.6
+133.16000 858.1
+146.36072 661.7
+149.63760 682.6
+150.54482 613.6
+159.11638 877.2
+164.10124 613.2
+165.74612 781.1
+174.20737 637.4
+178.05292 4179.3
+187.14754 2459.8
+188.27382 1375.2
+188.28638 1336.4
+188.30482 1091.9
+188.32840 740.4
+195.69203 605.5
+197.69791 715.5
+198.72435 642.6
+198.97997 891.8
+199.05084 880.3
+199.18800 749.8
+199.31422 564.1
+199.32889 885.4
+199.34862 1457.2
+199.36258 1421.5
+199.36981 2158.2
+199.37964 2057.6
+199.39320 785.5
+199.47591 763.9
+201.16402 896.1
+205.15976 1266.1
+207.17416 908.3
+209.18204 717.1
+214.51706 573.4
+217.61615 567.9
+221.18953 894.5
+221.57416 701.2
+222.18468 638.7
+238.21616 1955.5
+240.75902 557.4
+241.19466 5481.5
+246.13174 670.1
+255.29681 613.1
+259.20514 7801.1
+260.68283 586.8
+265.95422 613.2
+276.23166 14919.9
+277.21564 20979.1
+278.21832 1112.2
+292.11948 845.2
+293.19287 6469.5
+294.24207 50371.4
+294.78500 594.1
+295.24619 2655.8
+299.60818 970.2
+300.50253 667.1
+302.84286 639.0
+305.19171 847.0
+308.90451 631.4
+310.21933 15266.4
+311.22070 887.0
+324.17169 592.0
+324.23206 586.4
+325.02332 639.3
+328.22995 1031.2
+333.97794 748.0
+358.03653 605.8
+359.20557 3416.1
+360.23563 758.6
+361.21942 1211.7
+378.24640 1615.9
+381.36542 603.8
+383.57272 715.5
+426.40823 2674.2
+455.73654 854.1
+467.31332 967.9
+468.82581 2734.9
+469.25543 5061.2
+469.33301 1287.1
+470.23752 10959.4
+470.27411 535.6
+471.15048 1020.4
+503.29828 673.0
+506.09479 781.3
+532.63599 2125.5
+535.90912 615.0
+544.08533 603.5
+547.32648 745.2
+547.79926 559.7
+549.16046 1015.5
+578.33716 1149.8
+594.54962 702.8
+602.03210 584.8
+630.41254 806.8
+676.66589 1073.9
+718.37689 988.8
+731.13202 702.9
+731.17316 724.0
+780.01630 644.0
+795.91138 1258.8
+858.09436 680.8
+912.67236 691.6
+959.77161 620.7
+966.97345 570.5
+1019.68866 775.7
+1188.33740 821.2
+1198.42505 3123.7
+1264.33765 554.6
+1494.07129 617.6
+1684.64392 723.2
+1695.09644 742.8
+1769.22925 655.1
+1776.95300 689.5
+1836.69775 632.1
+1877.86768 841.5
+1878.88257 1238.7
+1879.24512 2470.6
+1879.60388 21205.4
+1879.96863 2011.5
+1880.92212 631.9
+1906.66541 697.6
+1907.13013 7630.5
+1930.61475 771.2
+S	3709	3709	616.596241267
+Z	2	1231.345
+Z	3	1846.513
+165.74776 4974.4
+169.71725 4461.2
+179.01109 5039.8
+188.18562 6036.3
+188.23695 6051.9
+188.25104 8145.7
+188.26196 8341.7
+188.27438 6047.1
+188.28508 7638.4
+188.29594 5877.6
+188.32443 5767.3
+188.34087 5917.5
+188.35286 4802.5
+188.37292 4014.5
+188.37704 4006.1
+190.79529 4692.5
+193.76288 5629.3
+196.90891 4457.4
+197.70665 5083.2
+198.71806 5427.8
+198.97681 7679.8
+199.25853 6521.6
+199.26979 5963.9
+199.33833 5765.4
+199.36215 15329.3
+199.36722 17562.8
+199.37825 8182.0
+199.38646 8200.5
+199.39769 8260.0
+199.45720 4493.7
+199.46579 7196.9
+225.13094 4009.1
+240.19569 4999.1
+240.20477 5285.1
+241.07100 4909.2
+243.09831 4127.1
+248.48260 4630.0
+268.61548 4796.6
+271.34586 5766.7
+275.30444 4252.2
+280.19177 5980.9
+342.28659 5867.6
+348.60172 5857.0
+350.29498 5688.1
+354.95737 4890.3
+381.37625 5643.8
+394.30966 192130.5
+395.31299 86723.8
+412.32007 272347.2
+413.32339 96985.5
+415.24881 6340.3
+427.56412 7066.7
+430.33072 327436.7
+431.33411 108788.1
+445.23709 5496.3
+448.34088 338326.7
+449.34439 96801.2
+451.35059 5067.2
+482.67398 6687.5
+498.14520 7822.2
+532.65234 15026.2
+543.14600 91792.2
+544.15045 39213.6
+545.14514 5622.4
+555.16687 102288.0
+555.77057 11548.7
+556.17059 39145.0
+556.47510 8581.8
+557.16180 2076591.8
+557.84912 9294.6
+558.16461 744840.9
+558.55768 10427.2
+559.07214 4576.1
+559.16949 13009.8
+561.37042 648922.1
+562.37366 260525.9
+562.78259 5949.8
+579.38086 846643.3
+580.11957 5694.0
+580.38409 342771.3
+597.39142 1096216.3
+598.16376 64069.1
+598.39435 337672.9
+598.94257 5343.7
+599.16541 18103.5
+599.43542 7426.5
+601.15179 35815.9
+602.15344 8471.3
+624.01001 4527.5
+624.98083 5497.6
+630.43774 8499.4
+676.71216 8098.6
+717.47717 5086.2
+739.14069 5372.9
+780.26099 4437.9
+786.52289 4923.8
+795.90155 7288.5
+834.05090 4398.2
+986.82788 4454.2
+1049.42749 4559.7
+1057.36365 5681.0
+1188.31250 6266.0
+1198.28308 5473.3
+1198.45288 27958.5
+1257.74170 5004.1
+1383.04114 4886.3
+1487.29468 5230.3
+1525.32129 5716.5
+1525.47205 7056.6
+1555.02954 5000.2
+1575.63330 5172.1
+1742.55652 5161.8
+1776.96423 6622.7
+1778.53442 5953.5
+1798.51611 4664.3
+1815.29346 5397.1
+1876.09741 6114.6
+1877.87256 5881.0
+1878.60999 5106.4
+1879.03931 17005.1
+1879.27563 24668.3
+1879.73535 160009.5
+1880.14563 17480.4
+1880.42908 18988.1
+1880.94702 8747.9
+1881.37915 5473.9
+1906.79919 9325.5
+1907.12292 59575.7
+1930.68372 8570.6
+S	3710	3710	1880.01924127
+Z	3	5636.782
+Z	2	3758.191
+532.67615 1604.0
+540.69104 670.6
+587.28894 631.2
+676.66882 1507.4
+731.15869 729.6
+905.91522 633.0
+926.47766 623.9
+1083.16870 627.8
+1198.52234 3328.9
+1198.87402 692.3
+1860.25977 626.5
+1863.81226 640.1
+1877.47095 864.4
+1878.13782 1099.5
+1878.84961 1131.3
+1879.08850 856.8
+1879.62073 19371.7
+1880.17236 842.2
+1880.36548 755.4
+1880.96375 835.5
+1907.04919 7308.2
+1932.34229 720.4
+1957.91846 715.5
+1991.10742 718.9
+S	3711	3711	445.6055746
+Z	3	1333.542
+Z	2	889.363
+117.25730 549.0
+118.89566 512.8
+121.77230 1319.1
+121.77622 2515.2
+133.16264 982.1
+140.70978 596.3
+149.02275 14402.7
+153.87637 526.8
+159.55460 571.1
+171.63776 673.9
+173.39151 560.1
+182.79472 625.9
+198.97928 1080.2
+199.25887 984.8
+199.31725 642.8
+199.33257 796.7
+199.33795 672.3
+199.35687 3127.8
+199.37444 1161.7
+199.44638 660.3
+199.45232 500.6
+205.08528 1363.4
+206.80568 500.1
+214.52991 618.7
+220.38705 649.5
+223.09592 1768.2
+228.76237 581.0
+263.97064 541.8
+266.70517 527.3
+277.88193 776.9
+280.20148 669.6
+286.55002 552.1
+331.33765 584.2
+341.01688 2402.6
+350.28281 621.3
+355.05154 661.6
+381.38312 649.1
+383.89880 1708.3
+387.23596 778.3
+409.25717 837.0
+425.26654 758.0
+425.37646 1473.9
+426.37604 754.5
+427.25162 1061.8
+427.28333 911.0
+429.08765 11088.5
+469.14343 599.4
+476.76712 633.5
+488.26300 606.3
+496.70963 527.4
+500.63138 658.2
+503.30246 867.1
+532.64661 2159.8
+541.50867 648.9
+547.33069 1049.0
+549.19440 702.3
+569.38977 565.8
+595.14459 676.1
+630.44958 870.3
+676.67438 926.1
+744.47406 550.7
+773.45996 662.1
+795.91113 1241.1
+820.97736 542.4
+849.57074 741.3
+1048.17456 706.2
+1095.10620 595.4
+1107.57495 683.0
+1198.45215 2988.6
+1265.54358 602.1
+1517.34778 664.6
+1525.50024 940.7
+1543.88269 618.8
+S	3713	3713	1879.8900621
+Z	4	7515.52895
+532.64752 2137.5
+549.13293 769.8
+585.20355 680.2
+603.37830 668.8
+630.94745 569.3
+665.60236 661.1
+676.69672 980.4
+686.54370 730.8
+766.07489 612.4
+780.18134 621.2
+783.97467 626.5
+825.61389 661.5
+932.82880 649.0
+968.51477 616.4
+1040.88013 655.1
+1057.33423 741.7
+1198.22180 849.4
+1198.45264 2858.6
+1498.49390 545.8
+1532.03882 607.1
+1684.50806 703.2
+1714.17944 778.7
+1879.26721 1947.9
+1879.40576 2051.1
+1879.67554 20027.8
+1880.43481 1719.8
+1907.04346 7428.8
+1919.19983 628.8
+1930.49866 1119.7
+S	3714	3714	1907.43440793
+Z	2	3813.021
+Z	3	5719.028
+532.66595 1634.6
+570.21936 539.2
+606.48712 610.6
+612.64917 590.6
+630.47339 753.1
+676.75507 585.6
+803.97473 556.5
+963.87231 617.9
+1057.23816 789.2
+1198.48608 2821.7
+1305.41541 680.4
+1476.51343 619.6
+1525.48132 631.6
+1586.24182 721.9
+1644.92871 719.4
+1689.22485 728.7
+1732.05566 649.8
+1776.94055 867.9
+1800.73242 692.3
+1877.69958 768.2
+1878.89734 1275.0
+1879.40955 7821.9
+1879.70166 16293.4
+1880.88452 867.7
+1881.27979 783.8
+1883.22534 667.8
+1907.13159 7523.0
+1930.76880 853.1
+S	3715	3715	1198.86240793
+Z	3	3593.312
+Z	2	2395.877
+320.72964 629.0
+322.75180 598.9
+341.06094 594.6
+344.43134 514.7
+401.61682 611.0
+412.84219 622.8
+427.55380 794.9
+526.27014 610.3
+532.67413 1799.7
+549.16882 733.5
+604.80444 658.2
+616.17462 1987.3
+617.17419 722.0
+649.19556 582.4
+676.67719 1027.9
+731.12958 650.0
+747.51611 577.5
+759.25031 764.4
+768.24939 726.5
+795.91028 800.3
+894.72455 631.5
+1181.01221 596.4
+1198.50720 3089.5
+1351.68311 717.3
+1353.99756 691.7
+1442.65283 667.9
+1782.26807 713.8
+1801.75574 734.7
+1878.99500 2031.3
+1879.20959 1200.3
+1879.63794 19266.1
+1880.28357 2130.1
+1880.64429 729.2
+1880.97388 798.7
+1907.17834 6943.6
+1930.67419 957.5
+S	3717	3717	1880.05040793
+Z	3	5636.876
+Z	2	3758.253
+532.58929 1494.6
+549.17847 654.8
+609.36926 617.0
+625.30396 601.9
+630.41815 873.0
+676.66748 1186.4
+731.14044 726.8
+780.14252 622.5
+795.91583 1129.9
+1141.48792 618.6
+1198.32007 2839.1
+1240.96204 745.8
+1572.27039 766.7
+1740.08557 638.4
+1755.83813 572.8
+1873.05432 849.6
+1877.01636 868.9
+1878.57739 892.6
+1878.91284 992.6
+1879.35754 3613.2
+1879.59558 19113.4
+1880.31323 1522.8
+1882.73242 687.7
+1907.18591 7493.0
+1930.66272 782.8
+S	3718	3718	1907.65140793
+Z	2	3813.455
+Z	3	5719.679
+532.53815 1796.5
+676.67163 992.7
+709.78772 564.0
+726.75189 582.0
+737.15021 662.4
+795.91321 956.9
+812.04358 714.7
+840.08386 653.1
+858.06421 696.8
+898.31226 665.9
+1052.72925 629.0
+1198.20276 2954.4
+1204.89966 587.7
+1540.45435 580.8
+1764.10583 714.7
+1777.00269 817.1
+1862.47375 595.1
+1878.93408 711.9
+1879.62634 19851.3
+1907.17175 7372.5
+1907.46924 807.0
+1919.10571 866.8
+1930.61536 1310.3
+S	3719	3719	1198.92940793
+Z	3	3593.513
+Z	2	2396.011
+335.95837 670.4
+350.40793 580.6
+356.78122 525.9
+415.92264 627.7
+502.06213 611.3
+532.55774 1831.9
+593.90094 634.2
+603.63086 675.5
+627.72040 609.9
+676.71759 737.2
+779.36823 653.0
+795.92133 1156.1
+1035.26172 661.7
+1125.40894 604.9
+1191.48145 558.5
+1198.24255 3233.1
+1348.99426 596.7
+1388.97559 629.1
+1525.46411 854.8
+1870.35583 819.9
+1878.51428 1252.6
+1879.05737 1378.7
+1879.56750 17808.4
+1879.82861 5486.6
+1880.59692 934.1
+1907.21265 7060.5
+1919.05627 809.3
+1930.61926 1275.4
+1958.11426 629.5
+S	3721	3721	616.5948246
+Z	2	1231.342
+Z	3	1846.509
+161.36757 2268.3
+166.52496 2293.4
+168.16771 2380.4
+177.30147 2503.8
+188.22203 2557.5
+188.24550 2262.7
+188.25548 3556.3
+188.26460 2397.6
+188.29126 2977.6
+188.30768 4115.4
+188.32666 3130.9
+188.34172 2687.0
+188.35020 2360.2
+198.97697 3535.9
+199.30028 3030.5
+199.34251 7854.1
+199.35901 8507.9
+199.37105 4203.4
+199.37831 5683.7
+199.39284 4220.4
+199.40799 4281.5
+199.47438 3204.4
+205.99368 2872.8
+213.36890 2410.6
+214.94467 2292.7
+217.13042 2741.9
+233.59454 2743.3
+250.99034 2804.6
+271.47806 4014.1
+342.29962 3245.4
+344.57996 2554.8
+394.30972 156386.7
+395.31293 68105.4
+403.48364 2263.9
+412.32010 204507.1
+413.32355 76038.0
+429.32095 3319.4
+430.33069 273683.2
+431.33411 83530.2
+438.97040 2573.8
+446.25986 3441.8
+448.34091 263289.8
+449.34460 67977.1
+457.88306 2905.3
+458.88528 2682.4
+474.25964 2426.7
+532.51758 9521.0
+539.79816 2497.0
+543.14624 25999.9
+544.14874 9110.5
+555.16730 32388.9
+556.17297 12659.7
+557.16180 636824.4
+557.85168 3365.5
+558.16473 233481.0
+559.16980 3377.8
+560.67621 2946.2
+561.37061 534881.9
+562.06726 3346.4
+562.37366 223967.2
+572.14856 16184.0
+573.15167 6163.6
+577.91260 3482.9
+579.38098 695479.3
+580.38403 245057.8
+591.78302 2533.5
+596.62775 4516.7
+597.39142 812985.9
+598.16638 16858.0
+598.39417 218377.9
+598.94012 4888.0
+599.16571 7448.3
+601.15137 6149.3
+602.15240 2940.9
+621.78851 2678.4
+622.47498 2695.3
+630.46619 5391.4
+676.70923 4458.3
+713.72766 2641.3
+1188.14954 3368.4
+1198.15857 14204.0
+1446.52563 2832.9
+1525.50818 3673.9
+1667.37146 2370.3
+1876.23047 4575.7
+1877.22510 3275.7
+1877.47473 3451.8
+1878.73096 5765.5
+1879.44678 20329.0
+1879.71875 79337.2
+1880.36243 4112.2
+1880.85083 5345.4
+1882.29236 3478.5
+1907.18896 32529.3
+1907.51782 2306.9
+1930.75818 4212.9
+S	3722	3722	1880.09640793
+Z	2	3758.345
+Z	3	5637.014
+532.54419 1609.6
+549.15021 711.5
+676.67493 1108.2
+679.27765 646.7
+731.11566 855.9
+738.45331 599.3
+795.89825 1061.5
+848.00818 616.5
+1090.81018 667.5
+1198.22229 3358.1
+1419.53162 659.1
+1550.76526 623.6
+1878.55835 1166.9
+1879.00757 1283.7
+1879.33484 4189.5
+1879.61963 19535.7
+1880.21924 1492.7
+1880.75525 1073.5
+1907.16724 7358.6
+1919.15198 911.9
+1930.58911 853.4
+1984.25977 861.8
+S	3723	3723	617.598407933
+Z	3	1849.52
+Z	2	1233.349
+157.60706 3099.2
+169.73920 2726.8
+171.59506 2565.3
+173.49023 2330.8
+188.26393 4544.5
+188.27025 3416.2
+188.28113 4854.1
+188.29498 4497.2
+188.30479 4505.9
+198.98051 3468.1
+199.26762 5461.1
+199.34644 9794.5
+199.35753 3408.1
+199.36551 9654.3
+199.38771 3430.6
+199.40613 3135.0
+199.42192 3562.3
+199.46330 4619.3
+247.91966 2410.7
+257.38925 2786.2
+259.53799 2610.6
+271.48123 2868.1
+283.42007 2442.6
+285.45816 2433.5
+308.90628 3722.6
+309.45676 2456.8
+315.44296 2553.7
+350.30078 3170.6
+354.93512 2553.9
+381.36496 2661.2
+383.82547 2437.7
+394.30951 87102.5
+395.31287 36859.0
+396.31662 5843.5
+412.31992 131191.1
+413.32330 47242.9
+414.32675 5753.3
+415.92401 2666.9
+427.55707 2625.9
+430.33032 187306.2
+431.33356 65823.6
+432.33618 8312.1
+448.14902 2371.5
+448.34070 215059.5
+449.34451 58704.9
+450.35010 6977.7
+532.53564 7619.1
+543.14545 16009.7
+544.14758 8109.0
+549.16632 2782.1
+556.17340 7479.5
+557.16144 355595.3
+558.16455 140744.6
+558.57104 2486.6
+559.16681 24056.9
+561.37030 333038.9
+562.37360 148122.5
+563.37390 24559.6
+573.14996 8736.9
+579.38074 531511.0
+580.10913 2803.5
+580.38385 187983.0
+580.86755 3384.2
+581.38599 29276.3
+597.39117 790893.2
+598.16968 3634.2
+598.39417 222909.8
+598.95038 4005.0
+599.18079 3224.7
+599.39667 35636.2
+601.15277 6313.8
+605.81158 2558.0
+629.98737 2619.9
+630.42444 4345.1
+676.67957 4017.5
+749.41705 3263.7
+795.91589 4225.6
+942.69696 2819.1
+955.28827 2785.9
+1121.08728 2689.7
+1156.64417 2718.5
+1198.20300 13925.9
+1244.25403 2598.5
+1444.05981 2594.2
+1621.09351 2743.8
+1777.03406 3661.3
+1860.12378 3195.1
+1870.26672 3057.7
+1876.11755 3573.6
+1876.36365 5470.8
+1877.75415 2821.7
+1878.17957 4276.3
+1879.36963 16429.4
+1879.65576 84560.5
+1880.65979 2856.5
+1881.07727 3711.3
+1881.47644 3900.8
+1907.16125 34317.6
+1907.75391 2437.8
+1927.89661 2855.3
+1930.62732 4360.4
+S	3725	3725	616.594241267
+Z	3	1846.507
+Z	2	1231.341
+158.12822 4257.1
+164.97607 4833.3
+165.74904 6856.3
+171.64732 4961.3
+183.62189 4076.2
+187.22226 4889.0
+188.25374 6823.5
+188.27228 12679.2
+188.29507 17608.0
+188.30936 12170.6
+188.47211 4217.9
+198.97676 9228.0
+199.27628 6700.9
+199.31862 7001.0
+199.35370 8859.1
+199.37431 26160.0
+199.39726 6489.3
+199.41986 4511.1
+199.47333 6139.6
+213.76945 4778.7
+220.05035 3999.6
+235.00751 4132.7
+247.04230 5217.3
+316.38568 3720.3
+333.87329 4745.3
+336.01910 5584.1
+336.30002 3917.0
+342.83737 4254.9
+343.27917 4039.9
+381.36719 5354.4
+394.30960 214979.1
+395.31332 88463.1
+400.64862 5375.6
+412.32001 308753.4
+413.32336 106678.5
+430.33066 406935.9
+431.33383 131601.0
+442.75427 4796.9
+447.33234 6553.5
+448.34082 390523.3
+449.34448 110423.5
+478.16299 4378.1
+532.51312 12678.2
+543.14618 18107.8
+544.14996 5964.4
+549.82813 4743.4
+555.16766 23180.6
+556.17072 7124.0
+557.16156 434304.2
+558.16486 156938.6
+559.16833 5551.1
+561.37036 736833.5
+562.37341 296410.2
+567.05664 5080.5
+572.14856 16968.6
+578.65527 5577.0
+579.38092 1037522.4
+580.38397 373945.8
+580.54230 5273.5
+596.62079 5197.5
+597.39130 1283114.4
+598.15887 18820.4
+598.39410 390988.2
+599.16199 6882.0
+630.42334 6362.1
+676.89661 5542.0
+731.12793 6804.6
+769.69476 4775.9
+894.68536 4841.9
+897.62677 4871.3
+972.02454 4693.2
+998.28827 5767.0
+1040.63733 4236.9
+1198.14929 21172.9
+1328.04724 4477.2
+1359.23853 4728.7
+1488.72510 4814.6
+1525.47302 7111.2
+1718.08350 4664.1
+1878.90417 10744.5
+1879.41443 56988.1
+1879.69922 133340.1
+1880.04248 34690.9
+1880.52881 18195.3
+1906.26880 4773.8
+1907.15259 56393.8
+1919.11279 5086.7
+1930.63989 7486.3
+S	3726	3726	505.695407933
+Z	2	1009.543
+Z	3	1513.811
+148.23557 564.0
+164.45145 516.3
+169.50348 758.7
+177.11163 1426.6
+177.28015 593.7
+182.47310 541.9
+188.19203 583.2
+188.20644 729.4
+188.21974 571.9
+188.22908 766.1
+188.24261 796.7
+188.26292 954.9
+188.27753 913.8
+188.29958 850.3
+188.31030 800.3
+188.33647 961.1
+189.40956 612.4
+191.80730 561.9
+194.84579 564.9
+198.97952 1012.7
+199.26619 773.7
+199.33722 938.7
+199.34946 842.8
+199.36282 2024.9
+199.37309 681.0
+199.38020 1618.4
+199.39870 1454.4
+199.41263 830.3
+199.43178 624.1
+199.46162 995.4
+199.94008 593.6
+207.47520 575.7
+218.30029 561.1
+221.13794 890.0
+230.84587 578.3
+233.16037 619.9
+238.05113 609.3
+243.05223 661.2
+265.16446 845.5
+277.21741 891.9
+279.14804 564.6
+281.05176 1243.2
+288.51437 594.3
+290.13696 601.6
+292.22552 1555.0
+294.24207 5784.7
+296.47461 615.9
+306.56573 604.1
+309.19055 647.1
+353.21710 855.9
+371.22556 952.7
+380.27969 527.8
+381.36942 916.3
+395.06610 1035.5
+397.24057 933.2
+398.80362 560.7
+404.98157 553.9
+409.10654 1562.9
+415.25214 2419.3
+416.25836 666.8
+427.55362 589.6
+443.40652 997.1
+447.27072 1018.2
+459.27826 3992.3
+460.28400 732.4
+469.27496 619.6
+485.24860 4528.3
+485.29007 964.0
+485.31857 677.8
+486.10837 1484.7
+486.23239 2223.2
+486.29117 824.3
+486.34900 12933.5
+487.26419 16349.2
+487.35257 2557.2
+488.24609 1251.8
+532.53705 1867.2
+547.33179 1523.5
+548.33716 746.8
+576.58124 719.3
+591.35748 1462.0
+592.36310 862.1
+617.29462 722.3
+626.29889 3012.0
+635.38177 1008.1
+676.68640 844.6
+677.46002 617.9
+679.41479 623.1
+723.43420 789.5
+804.62683 633.6
+842.49359 618.2
+849.26221 605.5
+871.55170 646.6
+995.89435 621.5
+1057.33911 1015.8
+1077.96399 594.7
+1198.19556 3108.7
+1294.68652 607.0
+1484.87537 623.8
+1525.45251 745.6
+1667.29016 563.0
+1667.56958 624.3
+1667.77502 572.2
+1870.39990 956.8
+1877.57520 740.9
+1878.12732 595.9
+1878.62842 1640.2
+1879.66992 18796.2
+1879.98389 3783.2
+1880.68359 1685.3
+1881.76367 901.9
+1907.12244 7744.7
+1914.43762 628.1
+1919.11780 936.0
+S	3727	3727	1907.63599127
+Z	2	3813.424
+Z	3	5719.633
+522.52917 669.3
+532.50439 1975.4
+572.55090 624.7
+608.45715 596.6
+620.25647 512.7
+676.66785 1225.7
+706.45282 596.6
+708.82477 526.7
+731.11206 791.9
+764.03955 668.7
+795.91034 910.3
+849.67493 561.3
+857.37354 626.2
+949.20056 629.8
+1057.28870 867.9
+1140.56555 649.0
+1143.91052 669.1
+1198.12573 3020.4
+1241.03308 580.4
+1800.09277 674.9
+1848.79834 564.3
+1865.15442 578.0
+1871.30811 608.9
+1874.50342 725.4
+1875.53662 680.5
+1876.65283 653.8
+1877.81628 782.7
+1878.74829 912.4
+1879.17407 1152.7
+1879.60950 19936.3
+1879.89282 1590.4
+1880.03979 1712.3
+1907.13733 7767.6
+1930.59131 822.9
+S	3729	3729	1880.01940793
+Z	2	3758.191
+Z	3	5636.783
+532.46167 603.3
+532.50085 1709.8
+532.53406 838.7
+676.66779 671.5
+852.89893 626.6
+878.76349 605.5
+887.63232 598.9
+917.82739 566.6
+1034.28467 608.0
+1060.95361 572.3
+1108.26929 866.5
+1198.11633 3692.2
+1198.24060 653.8
+1207.06506 791.6
+1265.42932 809.6
+1525.41113 934.2
+1805.76013 611.0
+1873.95435 634.3
+1877.67969 834.8
+1878.41467 914.1
+1878.71899 763.9
+1878.99011 1219.6
+1879.30774 2862.8
+1879.66443 16020.0
+1880.53271 2109.5
+1907.06555 7130.7
+S	3730	3730	616.594991267
+Z	2	1231.342
+Z	3	1846.51
+169.49199 9094.3
+173.49429 5175.5
+182.77904 11455.8
+188.16554 7276.0
+188.18959 8955.4
+188.24106 5699.8
+188.25156 9255.4
+188.25887 7332.6
+188.27133 6905.8
+188.28748 11152.7
+188.30537 7018.3
+188.31725 10739.0
+188.35260 8169.7
+188.36629 5781.2
+188.38834 6613.4
+198.98410 8791.4
+199.26735 9502.7
+199.31133 6421.5
+199.34889 13713.2
+199.36572 30311.2
+199.38910 16488.5
+199.46606 7652.3
+199.48750 6603.1
+210.34029 5946.2
+211.52142 7772.8
+216.83353 6299.2
+227.88307 5887.7
+231.40376 6832.7
+264.53436 6577.9
+271.46112 8247.2
+278.69400 5450.1
+339.68140 6198.4
+342.26984 8385.6
+350.30667 9547.9
+370.54272 7591.6
+394.30927 272642.3
+395.31284 115393.2
+412.31992 403523.3
+413.32303 156755.0
+421.37473 6476.6
+424.61679 6153.8
+427.54086 9161.6
+430.33035 536227.6
+431.33353 167459.2
+446.32291 7695.0
+447.32425 7406.1
+448.34070 524299.9
+449.34396 123552.8
+466.44504 5516.2
+532.53424 20682.3
+543.14417 14909.0
+555.16730 21305.2
+556.17035 13263.4
+557.16144 396323.7
+558.16467 142102.0
+561.37012 966525.8
+562.37323 400759.3
+572.14972 28699.7
+573.15149 12205.4
+579.38062 1286645.3
+580.38391 491104.2
+597.39105 1711344.9
+597.45923 9312.2
+598.15723 14260.2
+598.39386 502421.4
+598.66559 7210.3
+599.16327 8122.6
+616.48468 7102.0
+630.40436 10363.5
+676.67505 8964.7
+731.11261 7413.1
+779.99664 7822.8
+1188.31506 8127.5
+1198.18811 33885.5
+1198.30847 7126.2
+1208.56482 6303.5
+1257.68530 5496.4
+1556.57800 6606.8
+1581.10486 6238.1
+1640.59412 6522.1
+1709.60913 7114.1
+1723.62634 6723.6
+1834.13733 8196.9
+1870.31506 9422.0
+1878.55432 12886.1
+1879.18213 9617.2
+1879.61621 203396.5
+1880.43567 15384.2
+1882.25745 5712.1
+1882.34338 5578.5
+1907.20239 81073.4
+1930.56116 9845.6
+1988.12280 7423.6
+S	3733	3733	1879.99540793
+Z	2	3758.143
+Z	3	5636.711
+532.54083 2225.4
+538.03149 678.2
+541.78204 697.8
+549.17719 746.8
+550.19257 573.4
+560.73389 573.8
+659.51221 822.0
+676.68030 1104.1
+795.90656 838.3
+911.25543 605.9
+1033.61121 698.5
+1198.21326 3589.6
+1256.80115 633.6
+1487.71667 703.2
+1806.32800 663.4
+1878.32385 698.0
+1879.14893 1638.0
+1879.35986 3190.6
+1879.62244 19296.5
+1880.19641 1313.7
+1882.44739 820.9
+1902.57703 716.9
+1905.65564 666.8
+1907.05774 7097.9
+1930.70056 911.0
+S	3734	3734	505.695407933
+Z	2	1009.543
+Z	3	1513.811
+128.99049 667.7
+129.52562 672.3
+130.25531 479.0
+140.80211 600.6
+144.85382 718.5
+148.19160 550.4
+172.77623 524.7
+177.11198 844.1
+180.19023 590.2
+188.20952 647.0
+188.26889 1841.8
+188.28221 2096.1
+188.29266 2129.7
+188.30392 1971.5
+188.34743 560.6
+188.35860 506.5
+193.84186 517.7
+197.57950 568.3
+199.27383 627.9
+199.33073 621.8
+199.36162 1570.6
+199.37120 2554.4
+199.47012 1044.9
+199.63472 667.7
+238.04924 979.8
+266.04486 2354.0
+271.33258 583.9
+281.05078 980.0
+296.42899 508.4
+302.48514 692.5
+317.10904 827.0
+327.20071 735.0
+340.53757 664.9
+353.21631 746.5
+370.20154 747.1
+371.22684 1204.8
+393.13358 577.5
+395.06506 2628.4
+409.10706 859.7
+415.25281 2077.7
+435.87451 672.5
+448.36514 609.5
+459.27902 2927.1
+469.31305 813.4
+482.64883 652.5
+482.69272 744.7
+485.32452 1221.2
+486.10742 6281.5
+486.34930 10225.2
+486.79428 1468.8
+487.10870 1946.1
+487.28729 2189.5
+487.35233 1952.6
+532.55701 2036.1
+547.33228 995.1
+597.07092 626.1
+617.29114 768.6
+626.30121 963.2
+626.79962 732.4
+630.45691 861.2
+676.64960 1189.2
+721.76593 656.5
+730.17181 587.3
+1020.70013 596.1
+1050.18042 782.7
+1057.25952 674.1
+1184.51221 629.7
+1187.62268 647.3
+1198.24658 3408.9
+1235.76416 626.5
+1319.02588 607.6
+1452.25879 666.5
+1489.29297 784.3
+1640.88745 692.7
+1730.72705 593.5
+1771.25305 564.0
+1786.21216 567.5
+1816.36755 694.1
+1877.90210 900.8
+1878.71802 936.7
+1879.01245 1337.1
+1879.56555 19638.0
+1879.83228 2905.1
+1880.11951 1385.0
+1880.41113 967.2
+1880.95471 741.2
+1907.06348 7307.5
+S	3735	3735	486.849407933
+Z	2	971.851
+Z	3	1457.273
+120.59205 689.2
+121.77216 2006.1
+121.77611 1455.2
+131.05078 729.1
+132.42258 746.3
+147.11386 720.1
+159.11600 1549.6
+161.13268 2188.4
+163.14771 2351.6
+163.84775 750.3
+172.36539 690.7
+173.13220 1691.8
+173.27066 745.1
+175.14767 2802.3
+177.16341 2626.5
+187.14737 1597.9
+188.14934 758.6
+188.26863 1074.5
+188.27669 1522.6
+188.29025 1471.7
+188.30061 1102.2
+188.31026 1023.4
+188.33865 776.3
+188.98615 983.7
+189.16354 1996.6
+191.17920 3499.4
+193.28790 689.9
+199.00250 759.9
+199.25873 868.7
+199.27734 1423.6
+199.35800 1742.6
+199.36504 1249.9
+199.37460 3585.4
+199.40002 646.9
+199.41116 913.2
+199.46291 992.9
+199.47260 1269.2
+201.16350 1874.8
+201.47472 653.2
+203.17891 5109.9
+215.17871 2924.2
+217.19450 4874.1
+224.11539 765.7
+229.19440 3734.8
+231.21017 4594.4
+233.01164 865.9
+243.20987 1150.7
+255.21213 813.8
+256.64185 711.6
+257.22589 3009.5
+258.05374 631.4
+259.24115 5373.3
+271.24084 2654.6
+271.34207 805.3
+271.50034 957.1
+273.25568 1058.4
+276.26764 2109.9
+277.21555 1195.1
+277.59235 759.9
+283.24081 959.3
+285.25711 3367.8
+290.28403 1263.2
+291.23160 1808.6
+294.24185 3129.4
+299.27142 1169.2
+302.28387 1726.4
+303.29541 731.1
+305.78809 634.6
+308.92218 1311.8
+313.28873 973.3
+313.93109 635.0
+315.17960 1040.6
+325.28885 806.1
+327.30392 3940.0
+336.28876 1596.6
+339.30365 1614.3
+344.32910 1380.9
+350.27969 1485.7
+350.30405 941.4
+353.31909 2662.7
+355.33496 1683.1
+358.34476 1038.6
+359.20547 4025.5
+362.30261 1120.1
+409.38162 18637.3
+410.24951 925.0
+410.38663 1288.6
+410.54144 749.5
+425.47382 1024.5
+425.56915 742.9
+425.94965 1243.6
+426.36929 1326.2
+426.40811 277445.4
+426.72800 845.8
+426.86826 1412.9
+427.34622 1692.7
+427.41110 30028.8
+439.79282 667.0
+469.40268 6899.0
+472.98050 677.5
+482.68970 843.7
+493.97595 742.7
+503.41116 677.5
+504.64215 755.2
+514.51776 910.3
+524.01923 943.6
+532.54120 2539.9
+595.22919 726.7
+630.44952 1112.9
+676.67999 2063.8
+680.73737 795.9
+719.58844 806.8
+785.82056 698.7
+795.90186 893.4
+803.15167 765.6
+803.27368 725.3
+1029.39807 817.3
+1104.30310 826.3
+1183.37378 725.5
+1198.21375 3886.4
+1218.90540 745.9
+1247.35461 784.2
+1454.01514 758.9
+1480.61047 794.8
+1511.63062 769.8
+1525.50525 903.2
+1681.73059 874.6
+1728.39526 747.6
+1777.36426 1027.8
+1799.27319 736.4
+1828.81348 787.2
+1836.76709 779.1
+1872.01489 1091.8
+1878.02722 1021.1
+1879.26367 3640.6
+1879.64282 25002.6
+1880.03137 3593.5
+1881.32483 972.0
+1889.73572 712.5
+1907.04822 9124.4
+1907.27087 1285.3
+1930.70325 1242.9
+S	3737	3737	1880.0688246
+Z	3	5636.931
+Z	2	3758.29
+532.54187 1874.0
+549.16730 941.5
+676.67987 1096.0
+683.40216 614.2
+709.82544 579.5
+731.14716 891.6
+795.91577 1091.5
+832.12268 535.7
+950.74310 587.7
+1198.20630 2965.3
+1425.50879 648.7
+1797.61316 696.7
+1877.87598 757.7
+1879.25513 2363.8
+1879.65503 19398.8
+1880.05786 1912.3
+1880.56274 629.8
+1881.45190 725.4
+1907.11389 7625.4
+1930.66943 810.9
+S	3738	3738	507.710991267
+Z	2	1013.574
+Z	3	1519.858
+125.75795 602.5
+125.78488 612.8
+139.35039 552.7
+157.60837 578.8
+164.02434 550.6
+165.74739 724.7
+166.30505 535.5
+172.94614 611.7
+182.83698 540.2
+188.21071 896.1
+188.25113 630.2
+188.26326 846.8
+188.27914 764.6
+188.28557 785.3
+188.30338 603.0
+188.31551 995.5
+188.34317 602.8
+188.35947 510.3
+190.83699 640.8
+198.97566 862.7
+199.27492 558.7
+199.28134 815.6
+199.29243 698.2
+199.31439 719.5
+199.35013 1191.7
+199.36307 1896.8
+199.37326 869.5
+199.37889 1688.2
+199.39200 1218.9
+199.41197 708.8
+199.44528 820.8
+199.45923 835.8
+199.47702 729.9
+199.49519 681.6
+199.50816 554.2
+217.23093 634.1
+255.20061 707.8
+255.30014 849.4
+257.52945 520.5
+259.20459 517.8
+266.04465 719.0
+271.64532 622.3
+294.24197 6705.2
+295.24564 1455.3
+296.25818 1113.4
+313.11755 4154.9
+323.32617 575.1
+327.20050 898.8
+350.28455 629.9
+371.22580 1681.2
+378.33450 574.4
+378.74582 527.7
+396.06940 888.7
+421.25333 1246.3
+439.74957 555.4
+448.88843 549.7
+459.27872 1329.5
+470.23828 777.4
+477.10815 761.8
+482.66650 731.1
+487.11014 1973.9
+487.26434 24245.2
+488.27057 11777.3
+488.32465 1197.5
+489.25314 1563.1
+489.33411 2184.6
+503.46817 573.5
+506.70660 564.1
+532.54944 2359.4
+547.33307 1178.1
+571.77826 531.2
+597.93817 627.0
+613.01288 586.6
+626.79987 1320.6
+627.30402 827.1
+630.42920 770.1
+636.68951 705.9
+664.76520 549.2
+676.64893 935.7
+745.52997 1060.5
+762.23474 536.5
+789.03644 615.4
+789.55450 1435.7
+795.89685 1381.6
+858.06897 742.8
+955.90070 533.9
+1048.38525 654.8
+1057.27478 650.9
+1073.49548 602.5
+1198.23218 3382.8
+1525.45044 644.4
+1576.64441 674.1
+1670.25903 626.2
+1685.74731 639.1
+1777.31689 953.3
+1846.23096 629.5
+1856.67151 749.5
+1872.36255 918.3
+1878.01709 657.7
+1878.16760 593.3
+1878.47449 1014.4
+1879.01660 1212.6
+1879.18994 1098.1
+1879.58887 19654.2
+1880.95032 805.6
+1881.24280 863.3
+1882.37280 701.8
+1882.83826 651.2
+1907.07568 7390.8
+1919.11365 712.1
+1954.07898 620.4
+S	3739	3739	1907.53340793
+Z	2	3813.219
+Z	3	5719.325
+527.82733 656.7
+528.06006 744.5
+532.54578 1725.5
+573.55664 602.0
+575.58661 611.8
+609.68243 581.3
+672.80737 648.5
+676.66449 1093.9
+690.87836 670.3
+700.33936 618.8
+735.62500 615.4
+795.90308 1123.1
+901.40979 649.8
+1198.21448 3630.2
+1198.40198 606.2
+1423.54956 585.1
+1529.72620 676.8
+1654.57642 598.2
+1825.76331 654.5
+1869.98938 924.3
+1876.29321 669.9
+1879.06824 986.7
+1879.61499 20173.2
+1880.10559 1548.9
+1907.16370 6602.8
+1907.58691 777.2
+1919.12219 998.6
+1931.35339 734.7
+1983.04688 604.5
+S	3741	3741	1880.10840793
+Z	2	3758.369
+Z	3	5637.05
+513.57507 617.0
+528.84021 572.1
+532.55542 1820.6
+539.50958 587.6
+546.84338 683.3
+608.55750 560.5
+662.34961 566.2
+676.62183 1177.2
+724.31177 582.0
+785.10718 630.2
+796.57800 628.9
+796.75146 579.2
+922.88995 587.0
+1057.20728 955.9
+1163.45178 707.1
+1188.49194 725.0
+1198.23804 3253.4
+1302.30579 695.4
+1316.38037 581.5
+1463.91931 656.9
+1525.25525 812.2
+1717.75842 821.6
+1729.71094 582.3
+1739.37927 576.4
+1757.69055 670.5
+1855.79968 629.0
+1879.47351 20844.4
+1907.12134 7396.1
+1919.24768 768.8
+1930.38660 975.6
+S	3742	3742	507.711407933
+Z	3	1519.859
+Z	2	1013.575
+157.36266 1082.7
+157.60028 1171.3
+158.74635 929.2
+159.94049 1070.8
+163.06270 972.0
+175.22678 926.1
+177.11218 972.7
+188.24234 1109.1
+188.25758 2003.9
+188.27950 3737.3
+188.29068 3613.3
+188.29944 3503.2
+188.31288 1872.6
+188.32089 1584.0
+188.35039 866.5
+198.97830 1270.2
+199.27737 1351.8
+199.32314 1556.5
+199.33504 1126.7
+199.35724 1457.9
+199.37460 4350.0
+199.39760 1151.0
+199.45161 1059.0
+199.47298 2185.4
+200.57082 924.5
+208.79063 961.3
+219.53621 932.6
+220.62326 876.0
+230.88069 973.6
+238.04834 1512.3
+255.28384 922.4
+263.38766 1098.1
+266.04367 2389.8
+279.23041 2479.6
+280.17389 892.8
+291.45996 974.7
+294.24210 12597.2
+295.24521 2698.7
+296.25760 19274.8
+308.89197 1484.3
+321.92816 917.4
+327.20276 1062.2
+331.68961 901.0
+333.38873 875.6
+353.67166 1055.9
+369.22229 879.2
+371.22607 2382.3
+383.13330 984.8
+385.97073 1016.4
+396.06845 2150.9
+403.59598 1033.7
+406.79910 989.4
+408.28293 856.4
+414.76105 1038.3
+415.25162 2502.6
+421.25189 2781.5
+427.53378 1369.7
+459.27890 3175.7
+461.32104 1306.9
+465.24796 945.1
+472.25284 1897.1
+477.10953 1248.1
+483.33649 1551.8
+487.11014 5245.1
+487.26382 31162.0
+487.34332 1773.9
+488.26843 13657.3
+489.27939 55634.1
+489.33325 3485.1
+489.83572 2321.2
+490.26370 5002.6
+532.57739 3475.7
+547.33258 1606.0
+550.58691 1002.0
+568.34302 983.3
+570.06580 884.5
+570.10297 820.5
+591.35010 1121.5
+595.94159 1007.1
+601.78827 960.1
+602.76453 980.5
+614.63525 948.9
+623.50189 881.6
+630.38281 1339.9
+652.41626 997.2
+676.62299 2127.2
+680.36786 1060.8
+701.49969 2110.4
+702.50562 1848.6
+745.52612 2025.3
+746.52917 1319.6
+750.51874 1125.9
+789.55383 3637.8
+833.57892 1698.2
+877.60016 1104.9
+1024.23596 889.5
+1075.56909 1064.7
+1119.65088 1141.5
+1176.22974 1192.7
+1188.14514 1375.2
+1198.28906 5623.0
+1199.11340 1135.9
+1342.28125 1091.1
+1392.46411 1192.2
+1525.35730 1076.4
+1608.92651 1018.5
+1718.74072 1843.2
+1733.28333 903.6
+1746.35889 1049.7
+1867.96985 970.5
+1874.11194 1478.7
+1879.49451 33845.0
+1879.78967 2545.4
+1880.03809 2342.4
+1905.88196 1500.1
+1907.11438 12336.3
+1930.50806 1863.0
+S	3743	3743	506.2828246
+Z	1	505.275
+144.34377 722.9
+146.92450 959.6
+176.28886 765.7
+177.11180 1324.4
+181.97267 647.1
+188.26173 1222.9
+188.27242 1173.3
+188.28212 1408.0
+188.28955 1236.0
+188.29510 971.7
+188.30408 1153.3
+188.32021 1181.9
+198.97549 928.5
+199.27220 1779.8
+199.29579 847.5
+199.32536 692.9
+199.34747 1467.9
+199.36893 3600.5
+199.38304 1029.9
+199.46736 1280.4
+208.06618 770.6
+210.46959 710.3
+219.10429 795.0
+238.04927 5020.9
+239.05305 769.8
+255.39481 818.4
+265.05963 1499.4
+266.04385 5279.5
+271.46289 714.1
+278.72757 725.2
+281.05066 926.2
+282.99191 701.3
+293.19424 768.9
+294.24176 6112.4
+320.65082 799.7
+327.20013 1088.7
+350.31760 803.7
+367.51544 647.7
+370.19589 801.9
+371.22687 1568.8
+395.06503 6198.3
+396.06799 1318.4
+409.10721 952.5
+415.25259 4011.9
+421.25183 1056.4
+459.27844 4782.2
+477.10519 1039.3
+485.29480 1087.7
+485.31781 1211.0
+486.10690 15132.0
+486.23312 859.0
+486.34857 4884.5
+487.11008 5116.6
+487.26428 17448.0
+487.31409 1130.7
+488.09128 701.9
+488.24933 2812.8
+518.03894 656.0
+521.37872 626.4
+532.55719 2501.0
+546.91425 778.0
+548.09375 752.1
+591.35657 1047.3
+617.29614 2199.6
+617.79425 883.5
+626.29639 1683.8
+626.80475 1195.9
+630.40540 737.1
+676.66449 1376.0
+731.10657 1131.2
+789.54712 1182.2
+795.90228 1241.4
+833.57813 1036.4
+867.87012 696.9
+1099.04675 726.3
+1156.46619 748.2
+1198.24268 4167.8
+1267.53625 904.6
+1290.04126 789.6
+1331.17944 1030.5
+1525.42004 987.3
+1557.12048 736.5
+1604.79773 760.5
+1686.93896 808.9
+1699.12244 748.7
+1727.13843 800.6
+1770.88171 857.0
+1877.26526 818.8
+1878.44385 1020.5
+1879.22290 3226.7
+1879.59985 24408.5
+1880.00647 2840.3
+1880.64246 1244.5
+1881.92358 886.8
+1906.75562 899.8
+1906.97278 954.6
+1907.23853 9142.7
+1919.13379 893.0
+1930.61621 1032.8
+1943.32043 999.9
+S	3745	3745	1880.0728246
+Z	2	3758.298
+Z	3	5636.943
+532.49774 673.3
+532.53845 1614.1
+549.91699 644.1
+577.90802 667.9
+795.12531 641.9
+795.18567 514.1
+795.90643 994.8
+941.94269 674.5
+1016.48340 580.4
+1198.20947 3422.0
+1228.87170 675.0
+1229.77234 630.1
+1299.35779 748.1
+1489.55530 644.9
+1553.98157 583.9
+1667.34314 681.4
+1874.20618 1146.0
+1878.67627 1875.3
+1879.16614 2006.4
+1879.41736 3805.0
+1879.69727 18659.9
+1880.19421 1873.9
+1880.77759 1478.4
+1906.10156 582.1
+1907.14075 7633.0
+1919.14648 797.9
+1930.59692 1299.5
+S	3746	3746	508.2988246
+Z	1	507.291
+125.75687 601.3
+133.08501 1350.1
+141.80978 606.5
+142.04976 543.8
+142.90503 686.9
+148.44955 560.3
+155.58656 613.1
+157.04184 569.1
+157.16898 691.9
+159.91902 592.3
+165.74797 630.7
+167.05397 600.1
+177.11136 2515.6
+180.64552 625.8
+181.89725 606.4
+188.23425 643.7
+188.23653 645.4
+188.25002 561.0
+188.26102 664.1
+188.27151 1032.0
+188.28654 831.5
+188.31575 814.5
+188.34749 598.1
+193.25169 622.7
+199.27849 815.4
+199.36082 1941.7
+199.36702 659.3
+199.37717 1681.9
+199.39453 1516.8
+199.45737 628.2
+199.46489 519.7
+199.47862 554.4
+199.49374 645.2
+221.13715 1771.3
+238.04924 3660.6
+239.05247 941.6
+239.14934 883.0
+245.59111 632.7
+265.16449 712.9
+266.04407 5013.8
+267.04886 609.2
+271.45761 687.3
+271.47427 584.5
+277.21548 1814.2
+283.17465 2094.6
+294.24200 10337.6
+295.17517 774.2
+295.24600 2377.8
+309.19080 1198.4
+327.20078 2425.8
+339.19849 766.4
+353.21497 777.7
+371.22693 4686.1
+372.22803 802.2
+383.22614 1084.4
+396.06644 1507.0
+405.23972 1543.0
+405.73907 948.3
+406.24747 773.4
+413.75314 1547.4
+415.25217 6759.0
+416.25491 1006.8
+421.25296 7058.9
+421.75433 2650.5
+427.25333 1762.0
+429.23987 545.9
+433.11786 829.6
+449.06519 584.6
+459.27835 7713.7
+460.28311 1534.4
+461.31952 2682.7
+461.82083 1568.1
+471.27335 1190.9
+477.10580 3490.9
+478.11163 842.5
+483.33264 3998.0
+483.83469 2732.3
+486.34586 536.1
+487.09149 4428.3
+487.26413 23469.5
+487.34195 898.7
+488.09641 876.4
+488.26770 10079.5
+488.32336 3196.1
+488.82690 1763.9
+489.24832 1050.4
+489.29004 795.0
+489.33273 2210.9
+523.28741 605.2
+532.50470 2377.2
+533.31573 710.4
+547.32959 1967.9
+556.87219 647.9
+559.33075 945.1
+577.34229 1028.7
+591.35583 879.5
+613.45410 814.6
+621.36658 719.8
+626.80072 1810.4
+635.38153 1034.3
+652.40930 1398.4
+657.47552 2401.3
+676.69421 1097.9
+679.73804 722.6
+701.50281 4919.0
+702.50665 1728.8
+731.18829 702.4
+745.52930 6312.1
+746.53143 3021.1
+774.79028 563.8
+789.55493 6002.4
+790.55658 2670.4
+795.92206 652.6
+826.51025 732.6
+827.51563 894.5
+833.57996 4299.5
+834.58221 1661.3
+858.04156 927.7
+858.73492 630.8
+869.01636 750.4
+877.60291 2234.6
+878.60791 1121.4
+1019.75177 592.5
+1188.30750 1168.1
+1198.13403 3321.9
+1261.20801 593.7
+1525.41040 886.6
+1717.78870 2002.5
+1870.09204 790.5
+1876.34338 876.7
+1877.95496 672.6
+1878.34692 768.0
+1878.61023 1131.5
+1879.01440 857.5
+1879.41577 4749.9
+1879.69409 18686.0
+1880.37537 1171.5
+1880.85388 594.4
+1881.02075 825.4
+1881.37256 1734.5
+1906.76318 793.4
+1907.16406 7844.3
+1907.52820 594.5
+1930.56104 1008.1
+S	3747	3747	1907.60640793
+Z	3	5719.544
+Z	2	3813.365
+531.18042 579.0
+532.53113 1860.4
+540.04272 678.9
+630.38794 843.8
+642.12744 632.9
+676.70850 870.5
+676.76398 533.5
+708.33813 596.5
+776.89923 702.7
+795.90558 864.4
+820.95374 684.5
+884.47699 747.4
+909.64606 688.2
+947.05243 633.1
+1145.00208 614.7
+1198.19214 2907.3
+1301.38062 630.8
+1332.78943 789.0
+1437.97717 643.2
+1525.36951 842.4
+1716.83606 998.5
+1751.60938 1230.6
+1878.19019 743.2
+1879.10461 3065.5
+1879.43652 4877.8
+1879.71851 17839.4
+1880.36536 2138.7
+1880.68384 2144.4
+1907.14514 7456.6
+1930.54028 1229.5
+S	3749	3749	1880.07540793
+Z	2	3758.303
+Z	3	5636.951
+529.44312 635.4
+532.53082 1978.9
+546.16229 655.4
+596.64545 659.5
+630.40656 865.8
+676.66205 937.1
+731.12274 688.1
+788.18646 658.4
+795.89856 901.5
+808.16815 691.9
+901.72937 768.1
+944.56219 700.9
+1057.27490 844.9
+1198.18457 3436.3
+1525.43616 1054.2
+1564.11365 680.4
+1878.26709 760.6
+1879.67664 15679.6
+1880.02393 5150.4
+1880.34644 1795.3
+1907.16394 7208.3
+S	3750	3750	1907.6088246
+Z	3	5719.551
+Z	2	3813.37
+532.57092 2144.7
+549.14252 763.3
+630.38141 936.1
+667.46381 814.0
+741.38531 803.5
+795.90192 1099.6
+986.79181 604.6
+1057.36206 647.5
+1118.20630 633.6
+1158.44055 685.7
+1184.17297 594.9
+1188.30566 867.0
+1198.28003 3620.7
+1222.16931 635.4
+1354.55640 623.6
+1387.08691 890.1
+1580.50012 684.0
+1607.98145 667.9
+1878.60413 1663.1
+1879.11511 2572.6
+1879.28333 1639.0
+1879.73181 15194.7
+1880.46106 1950.3
+1880.73425 1161.4
+1906.92883 1081.4
+1907.19019 6820.6
+1930.52808 915.2
+S	3751	3751	710.891407933
+Z	3	2129.399
+Z	2	1419.935
+188.24907 537.5
+188.26361 831.0
+188.27892 1041.9
+188.28793 1305.0
+188.29993 947.7
+188.30838 1210.3
+198.87668 498.8
+198.97523 819.7
+199.29749 710.1
+199.34818 653.4
+199.35788 1365.5
+199.37318 2317.6
+199.38966 1192.6
+199.47182 777.3
+244.92662 585.3
+245.15628 533.5
+246.11282 604.1
+248.64468 606.5
+271.29974 899.2
+278.86160 742.8
+280.18942 754.9
+280.69849 559.6
+342.27399 860.2
+371.22647 609.8
+397.23865 770.9
+428.23264 716.3
+436.46097 589.8
+482.66287 733.1
+486.55945 569.2
+532.52728 1871.6
+535.46863 724.5
+566.88159 625.6
+595.53528 715.8
+600.02167 664.3
+635.37958 1038.5
+672.90918 805.9
+673.41595 2654.3
+674.42285 1207.9
+675.35376 889.0
+675.42529 1958.1
+679.41260 1214.3
+684.43311 690.4
+691.28418 4394.9
+691.46063 2853.4
+692.34979 1459.6
+693.28357 1275.8
+767.46796 676.4
+795.89972 774.4
+812.55609 860.5
+824.45258 631.0
+830.12921 615.9
+832.03833 617.9
+840.03455 741.8
+989.03851 699.0
+1057.26050 824.6
+1079.51941 671.6
+1150.60791 810.7
+1188.22546 883.4
+1198.17822 3096.4
+1240.67188 656.6
+1285.10913 584.2
+1489.81445 658.4
+1518.42480 625.7
+1569.22583 715.9
+1647.75708 816.9
+1769.01306 784.3
+1870.25916 948.0
+1878.22607 855.9
+1878.51001 914.5
+1878.95837 1589.9
+1879.59277 16499.6
+1880.16296 2112.1
+1880.57605 1472.6
+1881.98486 724.7
+1905.79187 593.2
+1907.08752 7040.1
+1930.62622 770.9
+S	3753	3753	1880.08840793
+Z	3	5636.99
+Z	2	3758.329
+532.52557 1903.7
+549.14063 903.0
+584.53455 601.8
+607.55560 593.4
+614.32751 601.3
+615.81177 600.8
+630.38342 656.2
+638.11401 588.4
+686.52954 741.6
+701.98071 651.7
+708.61365 551.1
+766.17426 709.0
+795.91382 824.2
+822.74457 761.9
+893.58221 906.8
+990.15063 576.1
+1073.51978 578.4
+1104.06982 578.6
+1112.35205 634.5
+1198.17883 3281.5
+1369.76868 624.6
+1510.07324 683.4
+1525.37793 816.6
+1539.66821 746.9
+1776.83252 667.6
+1870.12781 861.2
+1879.19885 1308.1
+1879.60693 19801.5
+1880.00854 1449.0
+1880.28442 985.6
+1881.00769 839.1
+1907.05444 7303.8
+S	3754	3754	507.712407933
+Z	2	1013.577
+Z	3	1519.862
+133.08533 3014.2
+133.58798 593.8
+141.75954 694.7
+142.70444 580.4
+146.11893 574.6
+146.88304 776.9
+152.22702 552.6
+161.53735 782.4
+162.48993 581.1
+165.26639 592.8
+165.68086 694.0
+167.12483 626.8
+170.74533 759.7
+171.61850 660.0
+172.33775 601.0
+177.11172 6725.3
+181.42047 591.2
+188.18996 561.4
+188.26347 1723.1
+188.27512 1864.2
+188.28366 2122.9
+188.29581 2144.4
+188.31519 2095.7
+188.33076 1047.0
+188.39133 784.9
+188.50719 681.5
+196.09224 663.8
+196.82770 667.1
+198.97556 1273.3
+199.12619 1159.8
+199.27007 1247.7
+199.34401 1182.9
+199.35527 1026.3
+199.36719 3637.4
+199.38913 767.5
+199.46416 1087.4
+204.90009 654.7
+212.85425 699.9
+221.13780 3099.2
+238.04942 3416.4
+239.14857 2543.8
+248.74777 632.6
+251.15044 996.6
+255.28784 538.8
+257.67249 700.0
+265.16388 1679.5
+266.04373 4934.0
+266.42996 601.2
+271.78183 570.6
+276.21182 702.7
+280.16873 1577.1
+283.17435 4816.3
+284.17999 992.3
+294.24094 1538.3
+295.17465 1125.0
+298.22330 949.9
+302.04895 647.6
+302.18207 765.4
+308.46277 573.1
+309.19040 2176.2
+320.23563 929.4
+327.20032 6721.6
+328.20514 1147.4
+333.65091 720.4
+339.20068 4130.8
+341.21481 799.6
+342.25333 712.3
+350.27899 695.6
+352.63593 795.1
+353.21548 2099.9
+355.72635 852.2
+357.75195 647.6
+370.61795 735.1
+371.22635 10629.3
+372.23111 1699.9
+383.22595 4087.5
+384.22894 941.0
+385.24316 854.9
+395.06354 704.8
+397.07892 623.6
+397.24255 1402.0
+399.23911 818.2
+407.58511 635.5
+415.25232 14654.5
+416.25687 3207.0
+417.25891 735.3
+421.25275 17246.7
+421.75400 10195.3
+422.25528 930.8
+427.25323 3450.2
+427.52621 849.3
+428.25385 1044.6
+441.26712 1307.0
+457.99658 641.9
+459.27850 20102.5
+460.10718 657.9
+460.28204 4724.3
+461.28217 867.2
+461.32025 4720.2
+461.82254 4184.8
+462.31857 818.6
+463.39355 677.7
+471.27866 4361.7
+472.27908 713.9
+477.10611 3012.2
+483.33273 7307.4
+483.83536 5276.2
+484.33588 1731.3
+487.09225 3675.7
+487.26550 1747.5
+488.09045 1558.6
+488.26279 1364.7
+488.32602 857.4
+489.52539 578.3
+503.36697 699.9
+515.30322 1436.5
+532.59137 2023.3
+547.33051 8269.3
+548.33441 2473.1
+559.33063 2343.2
+577.33789 1327.9
+578.34222 939.9
+591.35669 3539.7
+592.35730 1162.9
+602.01080 572.3
+602.38861 621.8
+603.35339 943.2
+613.45325 1565.9
+621.36713 2724.9
+626.80365 1021.8
+627.88007 567.7
+630.37085 873.5
+635.38208 1141.0
+653.72699 591.4
+657.47717 5540.3
+658.48022 2367.3
+665.39557 1121.5
+676.66840 994.2
+701.50208 11924.9
+702.50427 5111.9
+711.65863 675.7
+745.52820 16133.2
+746.53186 8204.4
+747.53363 790.9
+789.55469 16228.6
+790.55829 9942.1
+791.55780 1487.8
+795.89691 1089.0
+833.58002 9775.8
+834.58429 7760.3
+835.58368 953.6
+870.19556 674.4
+877.60687 3777.2
+878.61169 3106.5
+1018.69269 635.1
+1057.28735 794.5
+1198.31750 3415.0
+1254.08118 730.3
+1507.55811 596.8
+1800.14392 739.0
+1876.66382 883.2
+1877.93774 899.5
+1878.51514 1039.6
+1878.79663 1231.5
+1879.37634 4847.0
+1879.61853 20437.1
+1880.07434 1850.7
+1880.65637 1006.0
+1881.45068 922.9
+1907.03955 7981.8
+1907.67065 654.3
+1908.07373 685.3
+1930.51672 1082.2
+S	3755	3755	722.4798246
+Z	1	721.472
+188.27057 1527.1
+188.28383 1402.3
+188.30017 1371.0
+188.31287 1312.9
+198.97897 791.3
+199.27811 787.8
+199.30933 566.7
+199.32744 637.6
+199.35123 959.5
+199.36232 1584.6
+199.37686 2234.0
+199.42215 597.2
+199.47491 824.4
+202.95212 565.0
+203.99008 650.0
+226.23170 629.8
+255.28880 587.4
+289.21591 862.1
+300.95453 638.8
+307.22498 792.4
+316.66339 584.5
+323.55911 571.2
+338.40265 620.6
+427.54694 691.7
+439.20645 699.0
+477.30350 582.3
+525.38239 662.7
+530.17407 583.5
+532.55054 1755.7
+537.13025 695.6
+549.15765 944.1
+619.36188 772.9
+630.41089 764.0
+633.38904 1177.5
+640.38849 1696.0
+656.25812 627.9
+676.67554 805.7
+689.46460 762.2
+689.96747 889.1
+698.10205 698.9
+702.49921 1623.0
+703.46082 31712.3
+704.45911 937.1
+705.47729 2169.2
+784.64093 683.6
+795.91473 1097.8
+1016.85754 697.6
+1018.53967 695.9
+1052.60486 626.0
+1052.66504 598.9
+1192.85693 694.3
+1198.23193 3598.1
+1318.77319 718.0
+1344.66309 559.1
+1475.51453 663.3
+1525.43042 960.6
+1579.38965 778.0
+1644.49182 548.9
+1870.03564 1019.4
+1876.94629 871.7
+1877.61584 640.6
+1878.18579 971.9
+1879.10120 2125.4
+1879.63513 18297.0
+1880.37524 1532.9
+1882.36353 817.0
+1907.13000 7750.2
+1930.61072 1252.1
+S	3757	3757	1880.03199127
+Z	2	3758.216
+Z	3	5636.821
+532.60455 2395.9
+535.25684 543.7
+540.95972 663.8
+571.21594 590.9
+580.19202 555.0
+586.69714 532.4
+616.90118 703.7
+630.39435 832.2
+676.67438 1009.4
+684.98572 599.7
+689.23962 763.1
+694.07697 673.7
+748.93018 652.5
+784.87872 600.0
+795.91394 696.5
+969.59631 646.7
+1057.30164 779.9
+1079.70581 599.7
+1112.58447 711.9
+1189.98535 555.1
+1198.35522 3402.0
+1245.07129 589.6
+1373.33948 765.7
+1454.85889 790.3
+1489.62598 670.7
+1689.29004 716.4
+1772.79529 636.0
+1870.14624 988.2
+1876.02124 854.6
+1878.91138 1485.6
+1879.63123 19814.8
+1880.30164 881.1
+1880.57532 763.4
+1907.23352 7156.8
+1907.72278 884.6
+1913.08447 739.6
+1930.54297 1181.3
+S	3758	3758	1907.54899127
+Z	2	3813.25
+Z	3	5719.372
+532.54901 1877.1
+532.59650 864.8
+549.12811 961.6
+606.21692 586.0
+616.05774 602.3
+630.36792 694.6
+652.84363 632.0
+664.79883 578.2
+676.65509 1074.8
+725.81976 767.7
+728.04425 639.2
+742.12811 626.2
+742.80396 641.0
+795.91107 1047.7
+817.73096 595.5
+891.65161 551.5
+901.88391 732.4
+909.45227 647.5
+1019.64935 761.4
+1021.42517 611.0
+1071.71252 665.3
+1188.12671 590.8
+1198.22534 2884.8
+1198.36853 775.1
+1224.78784 606.4
+1569.56226 662.8
+1878.48486 866.7
+1879.16528 1409.1
+1879.56311 19655.2
+1879.96106 1208.3
+1880.49475 723.2
+1881.03625 821.3
+1897.23596 695.6
+1907.13330 6752.4
+1930.48083 776.6
+S	3759	3759	638.7198246
+Z	3	1912.884
+Z	2	1275.592
+181.54430 703.8
+188.26825 1505.6
+188.28307 1391.5
+188.29327 1125.5
+188.30392 1120.4
+188.31544 775.0
+188.32059 833.7
+190.35033 515.6
+198.97510 1081.3
+199.25906 742.1
+199.29230 841.0
+199.34128 557.0
+199.35724 1695.9
+199.37206 1210.4
+199.38829 1841.4
+201.12300 1785.7
+222.57088 669.3
+232.39560 566.7
+255.29991 612.4
+260.24509 670.0
+271.30249 617.0
+271.40640 613.0
+271.77155 742.0
+289.44983 614.8
+293.17303 686.4
+308.95703 661.5
+310.62421 651.1
+311.53317 570.4
+336.29056 614.1
+340.59033 590.4
+344.14459 2372.9
+359.54205 545.0
+369.22467 2888.5
+371.24390 528.7
+382.20053 636.1
+388.90784 596.4
+420.04907 749.1
+457.22665 1561.7
+476.55951 841.2
+482.67343 778.2
+525.16821 650.2
+532.58478 1634.9
+535.23773 610.0
+544.25989 2075.8
+549.16669 1009.5
+552.07733 709.9
+577.62524 590.5
+581.24109 2302.6
+591.71130 693.6
+601.39465 836.4
+619.42932 4922.0
+622.42456 759.0
+676.66211 1278.6
+682.36694 6808.6
+682.86890 4761.8
+683.36865 1850.2
+713.33844 694.4
+724.45728 750.1
+724.88153 819.6
+725.88263 12473.5
+726.38452 10423.7
+726.88623 3816.1
+727.39014 831.2
+769.88910 2471.7
+770.38586 2128.0
+770.88849 1123.9
+782.42426 3020.4
+782.92303 2880.8
+783.43274 1334.8
+783.93658 942.7
+795.88904 775.3
+831.43292 811.1
+839.93829 20878.0
+840.43860 19681.9
+840.94110 8624.4
+841.44165 4112.6
+915.72729 721.4
+943.87231 631.5
+1001.13611 643.5
+1004.53973 1075.6
+1198.31177 3335.7
+1218.33057 570.0
+1489.60193 782.7
+1525.49561 720.6
+1866.01917 652.1
+1878.31067 706.9
+1879.59863 20270.6
+1879.89392 2311.8
+1907.16956 6954.0
+1919.11743 965.8
+1930.65759 1148.5
+S	3761	3761	507.710991267
+Z	3	1519.858
+Z	2	1013.574
+125.20867 1706.6
+128.81584 1894.9
+129.27379 1616.6
+132.62428 1834.6
+133.08530 3318.0
+157.60924 2276.7
+165.75156 2471.3
+166.57137 1761.6
+171.64854 1782.8
+177.11095 5347.4
+183.45117 1534.2
+188.22916 1741.1
+188.25139 2677.1
+188.26340 3586.7
+188.27174 2425.6
+188.28125 1886.5
+188.28836 1776.2
+188.30342 2449.3
+188.31473 2238.5
+188.33824 2464.9
+194.64165 1849.3
+198.97600 3460.2
+199.33070 2477.6
+199.34700 1827.5
+199.35985 4667.3
+199.37086 4642.4
+199.39415 4872.0
+199.47098 2436.1
+199.49376 2432.2
+210.00394 1767.5
+221.13914 2711.9
+238.68335 1932.1
+239.14807 2771.9
+243.21181 2969.1
+252.91554 1458.9
+255.30283 2123.0
+261.22162 3739.2
+271.46371 1804.4
+279.23102 24964.0
+280.65662 1924.8
+283.17484 3547.8
+296.25775 170837.4
+308.91098 1826.1
+309.18842 2054.6
+312.23474 3593.8
+320.23599 2191.2
+327.20102 3865.9
+339.19989 2911.3
+371.22696 6848.2
+377.22485 2035.7
+381.37329 1986.4
+383.22476 2183.6
+415.25223 9142.7
+416.25623 1856.5
+418.25406 1555.5
+421.25351 12217.6
+421.75443 10844.5
+427.25400 2340.4
+427.56573 2209.5
+459.27869 15697.6
+460.28198 5205.5
+461.31995 4855.8
+461.81744 3481.2
+472.25372 14620.0
+477.10416 2026.6
+477.73367 1808.2
+479.52582 1587.7
+482.60165 1620.4
+482.67413 2084.3
+483.33353 5783.5
+483.83386 8935.5
+488.12625 2143.7
+489.27979 410505.8
+490.26398 42189.3
+492.37357 1627.0
+502.98096 1922.5
+532.62012 4904.3
+547.33112 7932.3
+548.33685 5052.5
+549.18597 2743.1
+559.33630 1833.4
+591.35773 6914.8
+592.35889 3632.5
+617.56635 1763.0
+630.44073 1995.9
+635.38177 2742.0
+657.47607 4104.7
+665.40814 1804.3
+676.67993 2388.1
+701.50006 6896.3
+702.50702 2567.3
+714.83893 1686.9
+723.04004 1536.2
+745.52942 12439.3
+746.53143 6642.4
+779.12372 1675.8
+789.55530 13838.4
+790.00275 1668.2
+790.55725 7630.3
+791.56226 1943.4
+810.08844 1736.2
+833.58075 7443.8
+834.57922 4690.6
+842.82623 1734.8
+858.08783 1784.2
+877.60303 3857.5
+878.61157 2720.1
+934.04492 1888.4
+1019.76105 1467.1
+1078.75378 1788.0
+1198.38599 9414.0
+1208.61987 1701.7
+1285.20850 1922.5
+1543.46021 2061.5
+1590.11865 1879.9
+1878.64807 2446.5
+1879.06787 2217.2
+1879.38220 7978.0
+1879.63379 56115.4
+1880.13586 4917.0
+1880.37305 1996.7
+1880.69507 2148.6
+1881.74829 1677.6
+1882.12903 1892.0
+1882.63147 2253.3
+1906.90771 2645.1
+1907.17322 21782.1
+1919.20642 2377.4
+1930.67615 3365.7
+1959.37219 1784.3
+S	3762	3762	1879.96899127
+Z	2	3758.09
+Z	3	5636.632
+532.61053 1511.7
+589.41699 796.2
+606.58063 659.9
+630.35516 557.0
+742.02002 630.4
+795.91498 904.3
+1005.45508 603.4
+1057.27881 906.3
+1198.37036 3431.2
+1868.29138 669.8
+1878.06677 739.0
+1879.22388 2035.8
+1879.59119 19792.8
+1879.97363 1622.0
+1881.05652 1125.8
+1907.14648 7490.2
+1930.43933 889.8
+S	3763	3763	1907.59040793
+Z	2	3813.333
+Z	3	5719.496
+520.82343 652.6
+532.59253 1966.1
+600.83984 600.8
+676.67627 1137.8
+757.87769 762.8
+795.90820 1326.2
+858.04321 798.2
+915.45868 644.4
+940.67322 753.1
+1057.30481 995.1
+1198.32361 3246.7
+1271.14038 619.9
+1284.75574 793.2
+1327.79797 648.9
+1525.39795 749.7
+1860.08423 924.5
+1870.07678 834.2
+1879.13611 581.7
+1879.62415 20256.2
+1880.68933 821.3
+1881.42468 622.9
+1882.02832 1063.5
+1907.15735 7859.0
+1919.24390 771.5
+S	3765	3765	1879.96540793
+Z	3	5636.621
+Z	2	3758.083
+532.58514 1997.9
+553.31787 601.5
+562.89539 548.9
+630.39362 857.7
+676.67987 1292.0
+779.22345 639.6
+795.91711 981.9
+882.32562 642.6
+887.60834 591.3
+1057.31787 813.7
+1086.82275 575.9
+1095.36755 618.1
+1108.49341 564.8
+1151.36255 635.9
+1198.30811 3416.3
+1236.68311 620.1
+1238.56482 579.7
+1525.37390 1065.2
+1650.88660 614.7
+1748.37732 624.2
+1776.95313 698.5
+1878.91296 1592.8
+1879.26465 2577.1
+1879.63916 19307.9
+1879.98071 2069.1
+1880.41699 1307.7
+1880.75916 694.3
+1881.24854 803.9
+1882.06128 865.8
+1907.21509 7843.6
+1930.55811 973.8
+S	3766	3766	507.7108246
+Z	3	1519.857
+Z	2	1013.574
+128.24586 529.6
+128.56757 687.0
+133.08534 1493.4
+133.14894 1349.5
+146.91368 526.9
+148.49495 543.0
+149.22989 508.9
+149.47618 565.3
+158.15494 516.2
+159.59396 546.6
+161.98561 557.7
+171.26286 599.4
+171.64738 611.2
+173.78745 624.1
+177.11165 3540.2
+179.48402 578.8
+187.38443 606.0
+187.56561 636.1
+188.20776 1180.0
+188.23053 556.7
+188.25017 961.7
+188.25812 677.5
+188.27635 928.7
+188.29248 692.7
+188.30544 1005.7
+188.33305 726.9
+188.34439 577.3
+198.97665 914.2
+199.14803 698.1
+199.24745 705.6
+199.27937 607.1
+199.31561 491.2
+199.32094 576.4
+199.34543 1342.8
+199.35553 1032.0
+199.36386 1638.7
+199.37856 1918.6
+199.39183 1343.3
+199.47382 820.3
+199.49156 697.5
+214.12938 638.2
+214.47025 662.4
+221.13737 2298.4
+238.04930 1381.4
+238.36896 633.8
+239.14865 1704.7
+248.64101 562.6
+265.16501 1084.2
+266.04446 2567.4
+267.04715 871.3
+271.47815 896.7
+272.68051 713.3
+276.21149 879.9
+283.17416 2363.2
+294.24271 1117.3
+295.17523 695.4
+298.22491 936.7
+303.27328 488.9
+309.19019 1556.8
+327.20010 3890.3
+339.20065 2461.0
+341.21579 1033.4
+346.42880 581.4
+353.21637 1836.1
+361.16818 618.5
+371.22681 4965.1
+381.33563 1069.5
+383.22635 2501.5
+385.24493 762.0
+397.24295 1279.5
+399.23706 705.7
+415.25259 6914.4
+416.25500 1114.8
+421.25278 12148.9
+421.75406 3845.8
+427.25168 2213.7
+441.27014 941.7
+459.27856 9398.3
+460.28271 1694.2
+461.32080 4235.2
+461.82162 2494.3
+471.27768 1287.7
+477.10696 1849.0
+482.25540 647.3
+483.33328 5738.0
+483.83524 3378.3
+487.09296 1631.8
+487.26398 1083.0
+487.34390 1121.3
+489.30609 1725.1
+532.54224 582.3
+532.58966 2181.3
+533.31360 796.4
+547.33069 7971.7
+548.33368 1561.2
+549.12848 848.2
+559.33264 1201.5
+577.34247 1000.8
+580.31464 612.7
+591.35669 8004.1
+592.36200 2130.9
+613.44733 933.5
+621.36713 1017.2
+630.36945 704.1
+635.38293 4781.8
+636.38672 1307.0
+657.47705 2462.7
+658.47894 1197.2
+665.39178 919.0
+672.99408 514.7
+676.67474 1130.3
+679.40778 1401.3
+680.41504 743.1
+701.50244 5795.0
+702.50922 2073.6
+731.08240 731.1
+745.52844 9649.7
+746.53510 3794.2
+789.55463 11057.9
+790.55823 4484.2
+803.31622 554.7
+833.58051 8158.7
+834.58179 2997.2
+841.49274 613.0
+877.60706 3561.2
+878.61688 1353.1
+881.44537 590.2
+959.54626 611.5
+1019.82361 591.7
+1140.51147 753.1
+1198.32080 3661.6
+1286.18616 753.0
+1367.77710 701.6
+1525.33545 1019.9
+1527.74060 561.6
+1710.52710 604.8
+1776.88794 846.1
+1823.85229 653.0
+1870.04443 764.9
+1877.77380 648.6
+1878.87122 805.2
+1879.28796 2526.6
+1879.62610 20134.4
+1879.97644 2550.5
+1880.56421 1104.2
+1882.35657 609.7
+1907.16187 7932.9
+1919.19275 872.6
+1930.50012 1072.5
+S	3767	3767	1907.59524127
+Z	3	5719.51
+Z	2	3813.343
+532.59351 1703.7
+630.40540 839.6
+676.67438 789.6
+694.79694 640.7
+716.24274 656.5
+795.90137 940.3
+901.80261 539.2
+1014.11658 638.5
+1198.32935 3433.6
+1198.52087 760.1
+1250.93713 626.0
+1406.24182 657.8
+1508.54041 659.9
+1588.59778 696.5
+1878.24048 946.1
+1878.60242 1302.8
+1878.92407 1876.7
+1879.62390 19827.6
+1880.07813 1161.2
+1880.34021 1620.9
+1880.64551 1148.7
+1880.97742 878.8
+1907.16309 7539.2
+1930.60632 1121.3
+S	3769	3769	1880.14324127
+Z	2	3758.439
+Z	3	5637.154
+532.62927 2209.8
+549.13885 706.9
+630.38873 853.1
+676.66565 646.3
+690.86981 638.8
+748.41522 692.6
+795.89404 1165.3
+1142.91711 734.2
+1167.52344 641.3
+1186.38977 609.4
+1198.41016 2919.2
+1267.50122 640.6
+1554.81726 674.7
+1825.56702 678.1
+1839.74109 651.4
+1878.99597 1056.2
+1879.61633 18634.3
+1879.85620 4330.4
+1880.26917 1115.2
+1882.19653 834.4
+1906.86914 862.3
+1907.13574 7180.9
+S	3770	3770	667.9578246
+Z	2	1334.068
+Z	3	2000.598
+177.11143 2546.2
+177.24799 698.1
+188.19006 856.6
+188.23578 786.0
+188.25645 651.8
+188.28099 812.2
+188.28931 742.0
+188.30011 815.3
+188.31660 792.3
+188.32741 697.5
+188.34056 866.4
+188.35596 987.3
+197.31052 660.1
+199.30917 802.1
+199.32959 590.7
+199.34299 1165.1
+199.35690 1132.2
+199.36459 1385.6
+199.37245 1035.3
+199.38452 1890.5
+199.40524 904.3
+201.53284 721.8
+201.99776 606.9
+206.06769 593.4
+219.37862 608.6
+221.13753 1971.3
+228.76166 595.5
+231.05658 651.4
+260.13409 651.2
+265.16440 1401.8
+283.17557 1614.3
+309.19043 2634.5
+327.20132 2525.8
+342.56018 591.4
+353.21603 3862.8
+370.64346 611.2
+371.22684 5788.4
+385.88416 685.0
+397.24298 2982.9
+398.24835 812.5
+401.72104 583.4
+411.25970 889.9
+415.25232 6715.1
+416.25476 756.8
+441.26837 3247.4
+459.27841 7396.8
+460.28320 1565.2
+485.29330 1447.5
+499.30936 1017.2
+503.30475 7406.4
+504.30634 2163.2
+529.32074 1515.3
+532.61334 1980.5
+547.33112 9186.1
+548.33417 2358.5
+582.35229 2334.3
+582.85260 1364.9
+591.35681 10454.7
+592.35901 3288.9
+604.21210 609.4
+609.34888 558.0
+609.44641 695.0
+622.41949 1433.3
+622.92108 2051.4
+630.40057 1315.8
+635.38281 12385.3
+636.38745 4953.8
+644.43250 1737.3
+644.93524 2637.9
+647.43701 1447.0
+648.44000 1159.3
+649.40448 1402.4
+679.40729 1703.6
+723.43524 4005.2
+724.43933 1930.5
+737.45251 787.3
+745.52826 1646.7
+759.54108 685.9
+767.46112 1590.1
+780.73901 586.7
+785.56390 696.0
+789.55756 1582.3
+790.55713 1285.6
+829.58490 1076.6
+833.58191 3326.8
+834.58514 1350.3
+847.59399 1358.1
+848.60516 786.9
+877.60858 3708.5
+878.61035 2163.6
+879.61603 1063.5
+891.62335 2012.6
+892.62488 1211.1
+919.25177 590.0
+921.63483 3685.5
+922.63885 2145.1
+935.65204 2947.5
+936.65118 2361.8
+965.66010 2030.1
+966.65533 1342.1
+979.67645 3222.0
+980.68127 2010.9
+981.67706 840.8
+1010.69690 1049.0
+1019.62512 747.2
+1023.70319 2852.3
+1024.70667 2721.4
+1025.70447 901.4
+1027.95959 647.9
+1057.28345 788.2
+1067.72620 3348.2
+1068.72803 1600.8
+1111.75427 2254.5
+1112.75610 2003.7
+1122.05823 673.7
+1155.78540 1260.9
+1156.77649 957.6
+1198.20898 592.1
+1198.37073 3222.0
+1199.80896 745.7
+1473.17627 637.4
+1667.45825 659.2
+1776.99451 877.2
+1878.11707 766.7
+1878.59949 1602.7
+1878.90234 1351.9
+1879.18127 1183.1
+1879.61255 19860.1
+1880.05566 1147.6
+1880.32214 1191.1
+1880.65540 1611.2
+1881.08899 1206.5
+1881.83142 776.9
+1902.48779 622.6
+1907.14307 7291.6
+1919.17126 735.1
+1930.63782 886.4
+1981.85144 643.4
+S	3771	3771	1907.6088246
+Z	3	5719.551
+Z	2	3813.37
+532.62683 2126.4
+549.57996 615.7
+609.24017 589.0
+653.43634 602.0
+676.67548 894.9
+679.47314 652.2
+723.12195 615.1
+795.91241 891.5
+799.82904 713.0
+947.80933 607.1
+1019.62427 838.2
+1023.49640 691.7
+1052.40833 616.1
+1198.40540 3176.3
+1336.10596 727.0
+1488.78772 614.9
+1650.01782 650.0
+1685.03003 673.2
+1876.25928 870.0
+1877.52307 790.5
+1877.88904 826.9
+1878.75171 1249.7
+1879.01855 1250.3
+1879.64404 19477.7
+1879.92041 2690.7
+1880.26465 1008.0
+1880.58594 1065.4
+1907.10535 6575.1
+1907.71790 644.8
+1930.52917 1157.7
+S	3773	3773	1880.02140793
+Z	2	3758.195
+Z	3	5636.789
+510.94110 678.1
+522.83527 638.0
+532.55444 1824.2
+544.30359 635.0
+604.59192 696.3
+625.86395 601.0
+630.41748 681.7
+669.85474 674.4
+676.70245 912.6
+687.34216 715.6
+795.91675 1208.9
+840.56805 625.2
+1198.24194 3337.4
+1525.44275 747.0
+1754.10046 570.2
+1774.92773 660.3
+1777.00745 1062.2
+1876.96948 812.6
+1877.93188 817.0
+1879.03345 782.7
+1879.37329 2189.7
+1879.71130 18880.4
+1880.06824 2154.8
+1880.39026 1211.2
+1880.77405 571.5
+1880.97656 545.2
+1881.51782 779.1
+1907.05847 7334.3
+1930.66150 940.5
+1938.96204 599.0
+S	3774	3774	1907.47924127
+Z	3	5719.162
+Z	2	3813.111
+523.95801 648.4
+532.54926 1711.7
+576.11084 613.4
+621.69324 602.4
+676.67560 1045.6
+775.21594 693.0
+775.50470 647.7
+788.53467 739.3
+794.42535 717.1
+795.93304 1202.7
+961.20044 699.2
+1198.23145 3064.4
+1274.63318 699.0
+1289.32996 569.6
+1518.66589 843.1
+1876.41870 777.4
+1877.57849 747.6
+1877.96948 579.5
+1878.10059 603.5
+1878.54871 1183.0
+1878.90527 1172.9
+1879.26184 2165.6
+1879.64905 19850.4
+1880.03015 2217.3
+1880.35535 855.0
+1882.23047 834.4
+1907.09131 7103.2
+1907.35303 1179.3
+S	3775	3775	677.865991267
+Z	3	2030.323
+Z	2	1353.884
+177.11264 787.0
+184.02914 527.1
+184.59203 584.3
+188.24901 596.7
+188.25902 746.4
+188.26880 822.0
+188.27698 896.6
+188.28546 1221.3
+188.29654 1369.3
+188.31096 1012.6
+188.33008 604.5
+189.10231 582.9
+198.03569 662.1
+198.98143 991.6
+199.28719 490.0
+199.32388 710.2
+199.34125 1139.8
+199.35400 1971.5
+199.36873 2222.3
+199.43478 662.0
+199.46730 835.1
+199.49031 638.8
+220.41054 872.0
+233.58185 661.5
+257.10791 584.3
+258.21753 524.8
+264.26468 517.0
+271.31888 692.7
+280.16916 591.7
+280.18683 782.8
+289.21634 1231.1
+298.96548 594.2
+303.41376 690.8
+303.81598 618.7
+304.12631 741.8
+307.22504 1410.7
+309.18924 756.2
+327.20206 984.0
+342.27719 590.9
+344.22473 688.7
+351.24924 781.6
+362.12250 578.0
+366.67358 722.6
+371.22696 1515.6
+397.23962 736.4
+415.25171 1114.9
+427.51251 605.6
+427.53943 584.1
+446.20282 625.8
+455.79639 703.6
+459.09979 658.8
+459.27957 1153.6
+482.66339 716.6
+503.30518 1311.9
+520.32715 827.1
+532.54706 1897.6
+535.31146 1480.3
+547.32880 878.3
+564.35315 952.9
+575.34027 1114.5
+587.67291 643.2
+589.35889 1042.5
+590.85889 1076.5
+608.38452 2245.1
+616.17670 1007.7
+617.30072 599.3
+622.31921 745.3
+630.63489 641.1
+633.43103 864.5
+635.38092 983.6
+644.43396 638.5
+645.44086 1423.3
+652.41132 2496.9
+652.94922 1747.5
+653.42694 1162.4
+659.43433 19522.7
+696.43402 940.2
+700.98108 608.3
+738.76349 674.4
+740.46136 2986.7
+741.46368 781.5
+777.42218 557.9
+784.48987 1617.0
+788.68561 624.1
+789.55127 659.3
+795.91534 1232.8
+850.60931 1300.7
+864.61316 649.8
+868.17114 769.0
+877.60394 871.8
+894.63116 1789.6
+903.08105 616.8
+908.65363 1092.6
+909.65399 876.9
+933.58636 694.2
+938.65961 2257.2
+952.67206 1648.0
+953.67163 1337.8
+983.68994 942.4
+996.69940 3124.4
+997.69495 1425.1
+1040.72473 2918.5
+1041.73303 1580.4
+1058.54382 686.4
+1084.75244 2757.8
+1085.74158 1073.2
+1128.77734 2873.7
+1129.78577 1212.9
+1172.81104 1546.3
+1198.22021 2907.1
+1217.81665 662.0
+1258.14587 621.7
+1307.11292 721.3
+1489.86206 928.8
+1699.93481 628.4
+1703.90076 586.8
+1769.99951 576.3
+1873.14966 743.8
+1879.34753 4610.8
+1879.64697 18952.9
+1879.95190 4105.7
+1880.68335 756.7
+1882.30945 638.0
+1907.08240 6867.0
+1919.13611 777.3
+1993.49390 675.6
+S	3777	3777	1880.07699127
+Z	2	3758.306
+Z	3	5636.956
+529.07794 607.1
+532.54919 1903.3
+549.17993 977.3
+551.76434 581.5
+604.18640 687.6
+621.14050 900.7
+630.43268 789.0
+676.65143 812.2
+795.92529 877.9
+1198.21875 3107.0
+1315.54883 594.4
+1448.55542 577.0
+1527.35156 716.3
+1870.33838 801.3
+1876.09802 595.7
+1878.24866 890.1
+1878.48169 926.9
+1878.87720 2390.9
+1879.61194 17797.4
+1880.36621 1678.4
+1880.71228 610.9
+1906.60962 696.5
+1907.18445 7612.6
+1930.70007 1109.9
+S	3778	3778	507.711407933
+Z	3	1519.859
+Z	2	1013.575
+133.08543 987.4
+133.83334 600.2
+136.17262 483.7
+136.28784 552.7
+148.05939 645.9
+157.60316 701.4
+163.31602 778.3
+169.49411 816.6
+177.11165 1173.5
+188.20465 675.5
+188.23647 779.8
+188.24948 749.0
+188.26782 658.4
+188.27679 581.7
+188.30807 499.2
+188.31551 634.3
+188.32916 802.7
+188.37953 610.2
+188.42441 632.6
+198.98177 682.2
+199.29449 960.4
+199.31927 593.4
+199.34363 786.8
+199.36134 1205.2
+199.37517 931.9
+199.38087 1131.5
+199.39215 2585.4
+199.40569 784.8
+199.42172 699.2
+199.44589 738.2
+199.45927 660.2
+199.48994 505.3
+206.37326 716.4
+222.16666 545.6
+233.57323 702.3
+260.66104 594.6
+263.40527 550.5
+271.47333 612.8
+274.64731 634.2
+279.23260 1027.4
+280.17233 906.2
+283.17276 812.4
+294.24075 957.3
+296.25772 15143.9
+305.71255 640.0
+327.19955 754.7
+330.87427 743.2
+339.20163 635.3
+350.28848 612.1
+353.62097 538.4
+363.98087 580.4
+371.22653 1527.6
+415.25198 2299.3
+416.25369 743.5
+421.25317 3453.6
+421.75552 1552.8
+422.65860 663.0
+442.90121 700.6
+459.27893 2931.0
+461.31894 1315.7
+461.82333 1461.5
+472.25189 757.4
+477.37927 548.5
+483.33212 2710.1
+483.83386 791.2
+487.26480 2832.9
+487.34036 755.1
+488.24707 1157.4
+489.27988 33583.9
+489.33392 966.4
+490.26492 4780.5
+532.56958 2359.2
+547.27795 597.7
+547.33167 2708.8
+548.33521 824.3
+591.35773 2525.8
+619.45135 686.3
+626.80212 606.0
+630.40924 931.4
+631.86603 576.2
+635.38617 2268.6
+636.38452 927.7
+653.19775 576.3
+657.47400 955.2
+676.65277 1026.2
+679.40942 876.8
+683.49390 721.3
+691.21625 642.2
+696.77527 542.2
+701.50061 2033.8
+702.50989 717.1
+727.71655 516.9
+745.52887 3468.5
+789.55518 3431.4
+790.55682 1520.4
+793.98248 609.9
+833.58057 2129.6
+877.60474 940.4
+1057.27295 1196.3
+1081.53357 631.4
+1146.84875 686.3
+1187.90588 785.8
+1198.27075 3122.2
+1369.46021 561.0
+1400.26489 651.1
+1489.66553 722.8
+1877.38147 624.2
+1879.06750 1390.0
+1879.58411 19292.5
+1879.84204 2839.1
+1880.09399 1715.5
+1880.64331 774.9
+1881.11768 764.7
+1907.19055 7465.5
+1907.46973 1458.8
+1930.59326 1194.5
+S	3779	3779	1907.49999127
+Z	3	5719.225
+Z	2	3813.152
+532.56982 1946.7
+574.34821 660.8
+592.70612 542.2
+625.33209 595.4
+676.66333 1085.7
+708.92749 522.2
+901.82202 747.8
+1004.89844 725.6
+1020.83960 781.3
+1156.17981 710.6
+1198.27356 2819.2
+1389.71948 708.1
+1406.13867 790.4
+1513.76575 612.3
+1876.64551 665.8
+1877.29333 743.0
+1878.70825 1443.7
+1879.59595 19952.2
+1880.18408 893.0
+1881.99341 760.5
+1904.53735 659.8
+1907.20654 7569.9
+1930.59631 782.6
+S	3781	3781	1880.07424127
+Z	2	3758.301
+Z	3	5636.947
+532.52948 2093.8
+587.71851 587.8
+630.38007 868.0
+666.11194 627.8
+676.66144 938.2
+795.92035 1256.3
+885.23883 638.2
+1063.79016 756.4
+1093.20447 625.0
+1115.21729 630.6
+1176.71497 640.2
+1198.18872 3683.3
+1208.16663 687.2
+1216.08630 643.4
+1327.61084 746.9
+1667.40601 727.8
+1872.88525 808.2
+1879.24475 789.1
+1879.59253 19945.1
+1879.91553 848.7
+1907.14868 7391.9
+1919.13892 1003.3
+1930.52722 838.7
+S	3782	3782	1907.59840793
+Z	3	5719.52
+Z	2	3813.349
+532.54980 1555.3
+606.50067 628.6
+630.38269 878.6
+676.70465 666.7
+687.90509 611.8
+731.10449 1087.8
+795.91925 770.3
+980.21497 656.2
+991.60461 728.1
+1011.97986 621.3
+1104.01965 600.5
+1198.22815 3314.0
+1409.38843 610.1
+1516.70020 689.7
+1696.07556 590.7
+1777.01062 836.9
+1872.23633 627.4
+1878.32581 842.1
+1878.84680 1285.9
+1879.17053 721.0
+1879.70703 17370.2
+1880.89648 1295.9
+1907.17371 7323.6
+1919.20776 789.0
+1930.56750 1072.3
+S	3783	3783	489.700407933
+Z	3	1465.826
+Z	2	977.553
+120.59895 629.4
+121.77173 1950.9
+121.77561 808.0
+121.77931 643.7
+127.53139 589.4
+128.58134 676.3
+133.38522 594.9
+144.96248 495.0
+158.04848 719.9
+158.34773 582.8
+158.36261 593.4
+165.74228 475.3
+176.98019 591.9
+177.16304 1218.4
+183.27811 605.5
+187.14549 651.6
+188.25201 745.5
+188.26128 640.4
+188.26880 1097.3
+188.28020 1179.9
+188.28549 1281.3
+188.29324 1201.5
+188.30183 1165.3
+188.31094 922.2
+188.34074 525.6
+188.37546 574.6
+198.97902 891.5
+199.27182 1004.7
+199.36694 2744.6
+199.37975 1050.3
+199.39615 696.1
+199.46404 962.9
+199.49176 578.5
+203.17902 902.6
+212.24295 524.6
+218.19814 904.7
+230.73811 579.7
+232.21390 610.0
+241.50290 502.7
+243.21031 1900.0
+259.24225 705.0
+260.24490 690.2
+261.22025 3173.1
+271.44977 577.2
+275.28040 638.4
+278.24652 3564.6
+279.23120 4550.9
+286.25995 887.7
+294.24139 1452.1
+294.75049 522.9
+296.25766 18889.0
+311.20474 638.1
+312.23450 4581.8
+319.35727 566.5
+345.24603 592.7
+356.33817 623.2
+356.48276 687.1
+381.36050 583.3
+406.64877 586.1
+410.38513 5579.8
+426.40881 4679.7
+427.41150 68446.5
+427.54620 780.5
+428.41492 7440.1
+430.76523 775.0
+431.26645 943.9
+439.78638 594.4
+452.39685 844.5
+469.33173 1387.7
+470.40573 3773.7
+471.27057 1132.8
+472.25336 1805.4
+479.91116 504.5
+482.65839 698.5
+483.87622 588.2
+499.45871 531.4
+511.80576 566.1
+532.58148 2045.2
+549.15460 845.3
+585.28217 636.7
+630.40955 855.1
+651.54926 624.6
+665.39874 598.7
+676.66730 1096.4
+720.00977 599.8
+795.91705 819.8
+860.91528 613.3
+887.44556 573.7
+894.55859 553.9
+897.89252 626.5
+934.34027 636.8
+935.18823 574.8
+1057.30237 680.3
+1079.54907 829.9
+1091.29797 584.3
+1130.98718 837.1
+1188.21875 744.6
+1198.30640 3059.6
+1322.08008 600.4
+1328.06262 595.7
+1456.82031 629.6
+1525.44067 909.7
+1878.33191 1484.7
+1878.59741 626.6
+1878.87354 1199.4
+1879.23193 1020.9
+1879.35828 966.8
+1879.62537 20167.5
+1880.17175 1193.4
+1880.90918 709.5
+1882.04602 712.4
+1907.12891 7443.5
+1907.76013 795.2
+1919.18481 771.4
+1967.81396 771.3
+S	3785	3785	1880.10224127
+Z	3	5637.031
+Z	2	3758.357
+532.54022 2177.9
+552.90625 704.2
+572.26276 668.9
+612.83710 752.9
+662.52448 775.1
+676.67725 1257.1
+687.08710 691.1
+795.92084 893.8
+1019.64990 694.8
+1100.58655 568.4
+1188.37024 548.0
+1198.20386 2968.4
+1525.45752 841.0
+1563.80933 586.8
+1776.95215 742.9
+1804.54333 731.9
+1878.90369 975.8
+1879.28381 1736.2
+1879.64539 20175.2
+1880.03955 1775.5
+1907.21545 7314.1
+1930.66003 1120.0
+S	3786	3786	508.2988246
+Z	1	507.291
+127.29558 565.5
+131.65858 602.5
+132.35359 529.4
+133.08469 604.3
+133.14404 1040.7
+144.61531 576.5
+146.92285 685.4
+164.17723 548.0
+165.74664 728.7
+169.20096 597.7
+177.11169 2009.3
+182.78297 746.7
+188.14769 573.4
+188.23477 596.3
+188.24576 685.0
+188.27177 753.1
+188.29546 855.7
+188.30290 787.5
+188.32135 643.5
+188.34464 699.1
+188.36058 540.1
+188.37456 559.6
+197.69881 703.8
+197.74275 484.0
+198.98216 930.7
+199.28442 828.4
+199.30450 657.9
+199.32719 900.4
+199.35588 1114.9
+199.37193 1363.0
+199.38342 1868.9
+199.49939 775.9
+205.44495 655.0
+207.28378 584.3
+208.06779 601.9
+210.40506 560.8
+221.13693 1505.8
+236.96696 621.4
+252.98152 527.5
+265.16278 645.1
+271.45081 561.8
+271.76071 628.8
+277.21414 650.0
+289.17041 491.1
+289.17520 493.6
+294.15680 580.8
+294.24283 1018.9
+311.18353 674.2
+327.20013 1662.2
+336.00769 573.3
+343.79764 623.1
+350.30957 645.2
+361.26138 562.5
+371.22601 2719.8
+383.22858 1012.2
+392.22015 569.0
+406.24643 1163.2
+414.76120 2750.3
+415.25122 2287.1
+416.25732 674.4
+421.25262 5801.1
+421.75299 1960.7
+427.25183 902.7
+427.54773 987.3
+434.66989 689.0
+456.46487 519.3
+459.27954 4408.5
+461.31937 1748.4
+461.82001 779.6
+470.39923 652.7
+483.33234 2410.2
+483.83636 810.6
+487.08792 913.6
+487.26318 1037.9
+487.33780 962.4
+487.42349 1350.7
+503.25522 570.6
+522.89764 538.2
+532.57245 2256.4
+547.33191 3425.1
+548.33246 841.1
+549.15729 767.4
+568.72217 658.2
+591.35559 2785.2
+592.35748 1339.2
+626.80054 2037.1
+627.30035 1039.5
+630.40723 806.3
+635.38324 2564.0
+636.38501 887.6
+638.95941 599.4
+657.47589 1388.3
+676.66663 1277.1
+679.41016 1340.6
+701.50476 2879.0
+702.50458 889.8
+745.52740 3732.2
+746.53107 1238.8
+763.95404 595.7
+769.40155 710.2
+789.55444 4752.1
+790.55750 2018.0
+793.26166 565.9
+795.92053 721.4
+823.03363 712.2
+828.51477 1013.2
+833.57965 3627.9
+834.57770 976.4
+877.60645 955.2
+952.79083 673.7
+1031.02563 694.0
+1198.27722 3389.4
+1280.64441 632.4
+1319.04663 736.4
+1381.33569 574.6
+1398.21033 549.6
+1461.20728 542.9
+1488.90198 628.5
+1525.40039 758.5
+1796.93762 617.8
+1870.28052 613.6
+1870.57007 811.7
+1878.97925 733.2
+1879.61816 20140.3
+1880.07141 974.0
+1880.32471 1076.7
+1880.79517 1038.0
+1907.19885 7479.1
+1930.60303 1356.7
+S	3787	3787	1907.58424127
+Z	3	5719.477
+Z	2	3813.321
+532.58429 1930.1
+549.15533 837.7
+580.45825 636.5
+670.50995 666.2
+676.69171 1380.2
+704.29077 563.5
+730.43744 581.2
+795.91638 1149.2
+890.70648 650.2
+913.96320 638.5
+1198.30066 3113.0
+1440.32629 621.6
+1531.05505 694.0
+1677.64954 581.1
+1776.97217 811.5
+1875.80481 862.9
+1877.42114 699.1
+1877.89954 596.0
+1877.98853 590.2
+1878.63684 1129.6
+1879.06323 921.7
+1879.30664 2892.3
+1879.66943 19760.1
+1879.99927 3610.0
+1880.69287 864.0
+1881.52649 841.7
+1882.48755 659.6
+1907.22180 7818.6
+S	3789	3789	1879.99124127
+Z	2	3758.135
+Z	3	5636.698
+525.76648 637.9
+532.50293 1829.0
+549.14301 941.0
+591.27631 572.3
+630.40460 762.4
+672.05823 685.0
+709.53174 575.6
+723.16602 744.2
+795.90118 1087.9
+805.48657 623.7
+841.92572 624.9
+958.53638 662.5
+1031.82520 727.7
+1093.20667 571.9
+1115.28345 653.2
+1188.26550 781.8
+1198.12195 3371.2
+1776.97864 1042.2
+1840.70337 629.8
+1849.05090 809.1
+1872.90259 849.8
+1876.32690 734.8
+1878.89111 785.6
+1879.59656 18637.3
+1879.85742 5841.8
+1880.21960 1726.7
+1880.71228 898.3
+1880.89685 1005.7
+1906.80371 1038.9
+1907.19568 7236.8
+1907.54285 646.3
+1907.66052 649.6
+1907.95386 721.1
+1930.56165 1165.7
+S	3790	3790	1907.60899127
+Z	2	3813.37
+Z	3	5719.552
+532.52545 1695.4
+580.13043 591.1
+676.66785 838.0
+731.16516 939.0
+755.04034 617.9
+778.43188 699.1
+858.29895 703.0
+909.01666 679.1
+1103.90759 573.1
+1198.17627 3168.3
+1305.82043 596.6
+1448.42102 576.8
+1513.36987 610.1
+1870.26538 820.4
+1878.95984 1710.4
+1879.27686 1840.3
+1879.60925 19615.0
+1879.98059 1920.1
+1880.32654 1608.5
+1880.68054 907.9
+1907.17163 7255.7
+1907.48157 834.6
+S	3791	3791	1198.61299127
+Z	2	2395.378
+Z	3	3592.564
+324.61789 633.0
+325.44080 675.6
+328.50980 502.2
+328.51556 492.1
+343.00970 544.0
+373.36737 654.7
+395.39771 684.6
+470.33670 711.8
+490.86630 699.3
+493.80499 583.3
+517.07025 676.2
+532.53943 1778.6
+598.63007 625.6
+655.85394 634.3
+660.11133 625.4
+676.68005 1185.4
+678.49017 734.1
+795.92474 989.3
+803.57404 531.3
+837.54797 635.6
+912.20624 668.0
+995.22595 734.3
+1011.98718 665.1
+1198.21606 3481.1
+1329.29602 626.1
+1338.04358 668.4
+1432.40283 662.1
+1694.89624 624.9
+1876.13538 946.4
+1877.71472 877.3
+1878.61206 1096.3
+1879.19897 1623.6
+1879.65466 19764.8
+1880.07300 1417.2
+1881.12854 700.5
+1881.65942 950.8
+1907.12830 7220.0
+1930.53442 1067.0
+S	3793	3793	1880.0478246
+Z	2	3758.248
+Z	3	5636.868
+532.54480 1759.7
+549.19604 884.4
+573.67316 652.5
+609.45605 656.7
+676.66235 969.7
+731.18567 669.3
+795.93390 1054.0
+1184.44531 861.1
+1198.22144 3597.9
+1237.25732 680.1
+1556.05969 650.7
+1721.65161 820.9
+1755.92004 685.1
+1790.15564 598.7
+1873.13318 867.3
+1878.05774 827.3
+1879.15601 2603.0
+1879.58972 18940.7
+1880.03711 2826.2
+1907.06299 7649.9
+1919.23767 840.1
+S	3794	3794	1907.58324127
+Z	3	5719.474
+Z	2	3813.319
+517.67212 587.9
+520.74969 736.4
+532.54510 1444.6
+533.94739 607.2
+563.81403 686.0
+676.68152 650.4
+795.92139 981.1
+797.81903 617.6
+872.38153 604.4
+1008.93787 671.3
+1058.93347 670.5
+1187.93420 781.3
+1198.22778 3212.1
+1221.06201 543.4
+1305.37842 621.6
+1353.03723 676.1
+1480.85449 637.0
+1549.34766 644.3
+1674.40552 604.8
+1776.90442 808.3
+1875.58789 653.4
+1878.75476 652.1
+1879.02209 1436.8
+1879.63733 17909.1
+1879.96460 4197.3
+1880.25439 935.1
+1880.58484 972.2
+1880.99060 629.6
+1907.15234 7501.5
+1930.53857 1066.2
+S	3795	3795	421.4788246
+Z	2	841.11
+Z	3	1261.161
+107.59074 620.7
+118.76511 656.2
+121.39845 589.9
+121.77422 2403.3
+124.89882 948.7
+140.61542 491.1
+165.74788 638.2
+169.10732 631.6
+173.09579 2028.1
+178.05232 1214.3
+182.64830 561.3
+184.30627 535.9
+192.99817 1097.4
+198.98776 967.2
+199.35385 936.3
+199.36684 3322.1
+199.37860 734.2
+199.46405 1269.5
+210.02480 44280.2
+212.62607 537.6
+214.51761 685.6
+227.08273 4070.4
+234.11191 54690.0
+235.11511 4253.9
+239.14870 1286.0
+249.39862 554.7
+249.85213 661.9
+251.04623 1743.7
+292.18893 1148.5
+295.19067 751.6
+326.72614 585.4
+342.27969 756.1
+345.18686 1032.8
+359.21970 1883.9
+364.18451 585.6
+364.72604 1947.8
+380.23526 628.1
+383.25314 1107.0
+383.33167 879.0
+384.24518 828.1
+385.22464 603.8
+385.25781 1089.0
+386.02087 3906.1
+401.23129 1818.0
+401.26602 1281.6
+401.30499 1639.1
+401.34146 1131.4
+403.04709 6610.0
+403.21478 639.7
+403.24448 1364.2
+403.28442 1568.7
+403.32141 808.5
+404.03125 20754.8
+431.25925 662.7
+459.27722 1395.1
+469.90634 711.0
+503.30484 1155.6
+507.72723 587.8
+532.52185 1881.6
+541.85712 556.0
+547.33368 776.9
+549.05023 562.5
+597.64252 572.8
+603.38037 1634.2
+630.39551 573.4
+666.76306 552.4
+676.66479 881.2
+686.01611 529.7
+701.76599 605.4
+728.44067 3020.8
+731.12915 692.2
+795.94739 1130.6
+875.28705 588.1
+911.05359 877.3
+1038.34851 556.6
+1057.27502 835.4
+1198.15710 3142.7
+1202.52356 613.2
+1222.06262 543.0
+1327.65344 556.0
+1674.33459 602.1
+S	3797	3797	1907.64640793
+Z	3	5719.664
+Z	2	3813.445
+532.55469 1900.1
+562.73328 550.7
+624.59796 651.2
+642.37640 678.9
+676.65076 821.2
+779.24847 644.3
+795.91547 903.3
+951.74353 639.6
+1072.56348 735.5
+1078.54944 652.6
+1188.02710 854.4
+1198.24329 3022.5
+1403.55225 659.4
+1426.20447 617.3
+1870.30249 954.4
+1878.21497 969.5
+1878.89429 1298.6
+1879.58984 18106.1
+1880.22144 1863.5
+1882.03015 599.6
+1907.23804 7258.6
+1930.60889 1313.4
+S	3798	3798	421.478407933
+Z	2	841.109
+Z	3	1261.16
+106.54893 576.2
+115.23039 488.9
+118.64495 572.7
+120.67725 641.7
+121.72878 648.8
+121.77533 2338.0
+137.03850 569.3
+138.85481 499.7
+139.80602 614.8
+141.28017 602.4
+159.06392 599.2
+171.65268 691.8
+178.05292 1758.2
+191.55247 554.3
+192.99916 813.5
+194.59837 681.8
+198.98393 1065.8
+199.15811 615.9
+199.26540 1300.3
+199.33441 809.8
+199.36392 2827.5
+199.37250 1304.0
+210.02481 47153.3
+233.77232 586.6
+234.11212 3488.5
+238.56700 543.3
+239.14839 1486.2
+242.55803 620.9
+251.04523 1830.8
+254.28339 569.0
+266.34116 612.3
+280.20920 618.2
+285.33307 622.9
+292.18945 1244.4
+318.26553 550.6
+345.19150 806.9
+346.37115 651.5
+350.30872 800.4
+359.21906 1112.2
+364.72369 1807.2
+371.22559 1307.1
+372.49323 615.0
+383.29575 696.2
+383.32770 671.0
+385.25479 566.4
+386.02048 3796.0
+396.96686 551.8
+401.19470 657.9
+401.23071 2351.8
+401.26636 1911.5
+401.30450 2176.3
+401.33914 1418.7
+402.17029 543.3
+403.04739 6164.0
+403.21301 914.7
+403.24588 1625.9
+403.28806 836.1
+404.03131 22033.8
+451.58334 519.3
+459.27884 1582.8
+469.90668 582.6
+490.29819 1263.1
+526.42773 594.9
+532.47705 770.1
+532.51807 1674.8
+555.42102 675.5
+596.94019 829.1
+603.37872 1603.5
+624.81000 518.3
+630.42047 784.7
+676.66125 1046.3
+710.44580 546.0
+711.40253 684.2
+728.44214 2708.2
+729.43842 765.2
+781.18793 651.4
+795.92999 1018.9
+932.43481 561.1
+971.68555 654.6
+1025.24768 678.7
+1084.60754 596.7
+1188.12354 696.0
+1198.15076 2806.7
+1243.71045 646.5
+1341.68188 789.6
+1416.47363 607.6
+S	3799	3799	1198.60940793
+Z	3	3592.553
+Z	2	2395.371
+339.35739 600.7
+342.26837 823.0
+356.59949 663.9
+427.53403 682.1
+434.82907 585.8
+482.64499 862.9
+490.33405 665.2
+532.53473 2044.5
+549.14960 620.5
+606.23267 656.2
+611.68707 607.4
+630.39691 779.9
+676.65039 855.5
+740.10779 577.5
+777.79584 624.0
+795.92566 1027.5
+899.04120 594.7
+1057.25146 1052.7
+1092.85510 668.1
+1198.18787 3369.4
+1381.14990 625.9
+1445.49341 831.8
+1486.98584 629.0
+1525.38452 821.0
+1712.54895 628.6
+1777.01892 680.6
+1835.24304 749.7
+1878.39746 1131.3
+1879.09119 1609.1
+1879.54590 19591.8
+1879.96558 1702.5
+1880.65747 847.2
+1907.26526 7491.3
+1919.15356 1097.7
+S	3801	3801	1907.60140793
+Z	2	3813.355
+Z	3	5719.529
+524.44928 608.4
+532.52802 624.0
+532.57056 2052.4
+549.14691 797.6
+630.40784 770.7
+676.65790 1367.0
+731.13843 546.9
+778.34052 625.2
+800.88123 912.7
+1057.26965 900.0
+1103.94006 762.3
+1198.28235 3224.4
+1249.33276 660.2
+1718.08044 688.8
+1877.89307 939.8
+1878.79822 883.7
+1879.24854 1334.9
+1879.58777 19997.5
+1879.91516 1387.5
+1881.16504 623.4
+1907.18909 7611.2
+1930.58740 915.2
+S	3802	3802	618.4378246
+Z	2	1234.86
+162.37491 957.3
+184.56863 880.6
+188.24858 1422.3
+188.27037 2745.2
+188.28905 3343.1
+188.30507 3255.7
+188.32414 1826.0
+188.40671 986.9
+198.98174 1228.6
+199.27731 1275.9
+199.29243 846.2
+199.30884 995.4
+199.35077 3148.7
+199.35945 1464.3
+199.36586 1116.5
+199.37766 3107.3
+199.38907 1529.1
+199.40108 1096.7
+199.42149 949.1
+199.47903 1137.4
+206.44284 1013.9
+214.51341 1039.8
+225.54558 917.7
+270.72839 1027.6
+271.78583 964.9
+271.93445 1137.1
+272.39481 966.3
+307.62332 875.0
+317.05093 1039.3
+359.13855 987.1
+394.30975 74304.9
+395.31308 51597.7
+396.31799 2812.7
+401.32434 944.4
+407.53723 1034.5
+408.82535 898.4
+412.32022 109584.4
+413.32355 65006.6
+414.32620 3666.4
+415.25275 3415.1
+430.33081 156899.4
+431.33395 74408.6
+432.33691 4384.7
+433.88647 1048.5
+437.55264 983.9
+448.34106 169448.3
+448.83643 1203.3
+449.34451 65532.3
+450.34628 3046.5
+452.50504 1172.6
+463.18600 1029.9
+472.75928 995.3
+532.52509 2375.5
+557.16193 16706.8
+558.16486 7456.8
+559.16449 1502.7
+561.14661 1262.6
+561.16571 1225.0
+561.37085 267657.3
+562.37378 180654.1
+562.79340 1810.1
+563.37610 15133.0
+563.80231 1403.9
+577.90228 2471.6
+578.64923 1607.5
+579.38116 418423.2
+580.10651 2718.6
+580.38416 227097.7
+580.86499 2619.0
+581.38605 18820.6
+581.87299 1802.6
+595.84259 3230.4
+596.12677 1672.5
+596.63385 2167.5
+596.84644 1375.4
+597.30768 1784.5
+597.39148 597847.5
+597.46051 2165.7
+597.63409 1123.4
+598.15186 4244.0
+598.39435 233652.4
+598.94611 4264.8
+599.16302 1854.8
+599.39520 15596.3
+630.39392 961.3
+667.60901 941.7
+676.66809 1874.7
+695.99933 1039.4
+700.21930 1178.9
+743.40930 1062.5
+778.85419 976.9
+838.63098 1216.6
+1057.29297 1675.9
+1188.27747 1217.3
+1198.17175 4940.2
+1229.52930 1232.7
+1489.76062 1337.4
+1580.64673 1067.5
+1712.32458 1039.4
+1769.24329 1209.7
+1776.95166 1991.1
+1870.52039 1024.3
+1876.21973 1144.6
+1879.61829 32308.6
+1906.87573 1416.9
+1907.18335 11696.5
+1930.55908 1260.8
+1957.79175 1141.7
+S	3803	3803	636.780407933
+Z	3	1907.066
+Z	2	1271.713
+167.38409 532.4
+170.24257 683.8
+173.45764 569.3
+179.56628 596.1
+182.78778 685.1
+182.90457 636.4
+183.05040 585.6
+183.43477 713.9
+188.25737 728.1
+188.26347 679.6
+188.26680 751.2
+188.27769 1286.6
+188.29344 1273.6
+188.30368 1070.3
+188.31520 530.1
+189.52719 635.8
+197.29532 624.5
+198.98341 644.3
+199.34793 1158.0
+199.36171 2014.6
+199.37683 1547.1
+199.39581 782.7
+199.46182 603.3
+244.28149 635.5
+256.39578 689.8
+291.23190 1247.8
+304.35590 642.0
+307.08658 636.5
+335.25616 1019.3
+339.73572 611.1
+437.75348 600.6
+482.20035 619.9
+482.59186 853.8
+491.28149 1602.2
+517.74292 643.6
+532.56580 1417.8
+596.53400 560.3
+599.37744 2423.5
+601.31982 4892.1
+601.39276 1809.8
+616.41315 4612.1
+617.42413 32991.4
+618.42792 5956.9
+630.42914 711.9
+676.70514 833.1
+697.28186 669.6
+777.60425 585.7
+777.67255 560.1
+795.92432 1119.9
+840.43896 763.7
+941.61328 880.1
+948.35132 670.7
+1018.77856 640.7
+1058.58167 600.0
+1084.82703 636.8
+1198.26428 2674.4
+1239.90710 664.3
+1466.95349 743.1
+1777.00159 794.8
+1812.23523 725.6
+1878.50122 1146.2
+1879.39941 5309.4
+1879.71790 18582.3
+1880.03381 4285.7
+1880.30627 1762.9
+1880.74207 1281.7
+1907.15771 7411.0
+1930.66260 1087.1
+S	3805	3805	1880.03340793
+Z	2	3758.219
+Z	3	5636.825
+532.52814 559.6
+532.56952 2261.7
+549.09979 604.9
+578.70685 593.7
+676.65259 1002.4
+1188.35571 776.4
+1198.27307 3140.7
+1584.53833 593.4
+1748.15234 675.2
+1873.15332 841.0
+1879.23499 2132.2
+1879.56653 19451.0
+1879.93213 1830.6
+1880.87219 792.6
+1882.75635 782.0
+1906.88635 2115.4
+1907.12354 6581.2
+1930.61279 1073.9
+S	3806	3806	603.829407933
+Z	2	1205.811
+Z	3	1808.213
+165.74802 1382.5
+168.96347 976.7
+169.50775 1251.0
+174.04839 1201.7
+174.32047 1061.7
+185.50546 1035.1
+188.17337 1064.7
+188.24734 1279.7
+188.26064 1486.4
+188.27518 898.9
+188.28268 1322.2
+188.29106 1089.3
+188.30748 1166.0
+188.32547 1208.2
+188.34708 1310.5
+188.36192 999.2
+188.39355 979.9
+188.43546 984.0
+199.18134 1018.8
+199.26416 991.0
+199.29814 1255.6
+199.33760 1289.0
+199.36226 2438.0
+199.37727 4081.1
+199.39273 2470.5
+199.48911 1405.4
+214.53439 1086.5
+217.87932 949.9
+233.18945 2079.7
+238.42476 1026.2
+254.68625 1126.8
+255.31195 1188.5
+277.21512 4941.0
+278.07306 1144.9
+280.20557 1234.6
+283.17609 962.9
+303.23254 972.6
+309.19110 1002.9
+320.21243 1001.0
+321.24301 2530.6
+358.50793 881.9
+371.22592 1804.8
+398.05927 1014.5
+401.21637 2155.5
+402.86911 1049.4
+415.25629 1952.3
+433.43787 1063.8
+459.27859 2693.9
+460.28525 1320.1
+482.68982 1211.2
+486.89850 951.4
+491.28351 7174.8
+492.21713 946.7
+503.30731 1806.7
+504.30573 2255.7
+515.35376 1775.2
+532.56293 3461.1
+547.33203 1668.4
+548.33405 1264.5
+549.33740 1366.8
+559.38232 1814.0
+561.54144 932.8
+575.45105 866.0
+577.22711 872.5
+630.46436 1378.4
+637.14111 1107.1
+676.66302 1770.2
+679.03668 1066.2
+746.53638 1248.4
+759.53766 1028.7
+795.90192 1118.5
+898.95990 958.5
+980.67847 1412.3
+1094.54626 966.4
+1198.25989 6392.7
+1207.78186 894.7
+1249.93530 1016.4
+1278.55896 1112.7
+1461.64270 1032.7
+1525.53870 1799.7
+1713.31384 989.2
+1716.11438 1015.5
+1877.07922 1138.4
+1877.95020 1528.1
+1878.75098 2103.1
+1879.15088 1168.0
+1879.60156 33163.8
+1880.03638 1211.7
+1880.42273 2168.4
+1907.06628 12036.3
+1908.05493 1065.6
+1919.21741 1313.6
+1930.76038 2021.1
+S	3807	3807	1907.56999127
+Z	2	3813.292
+Z	3	5719.435
+532.56006 1461.2
+600.10809 607.1
+676.63843 665.7
+676.70868 712.8
+795.92310 1148.0
+841.53290 747.9
+1178.59851 721.8
+1198.25513 3537.5
+1235.63660 749.2
+1334.50024 641.5
+1408.49561 587.2
+1501.90186 718.4
+1768.00000 699.4
+1860.12036 709.3
+1879.06433 1783.2
+1879.40588 5390.2
+1879.69995 17936.4
+1880.70068 949.9
+1881.58716 698.2
+1907.07581 7209.1
+1907.42395 880.3
+S	3809	3809	1880.07499127
+Z	3	5636.95
+Z	2	3758.302
+532.59802 2026.9
+549.13928 776.7
+609.02100 710.3
+650.74353 583.9
+676.65991 1380.5
+701.71130 595.6
+716.60211 639.6
+765.20441 693.9
+803.53955 602.3
+858.03839 1089.8
+1017.73395 650.6
+1187.72253 832.6
+1198.34131 3228.1
+1223.43152 735.3
+1769.32385 652.0
+1878.05920 742.1
+1878.76355 655.6
+1878.96411 938.9
+1879.59583 19391.7
+1880.21912 1183.1
+1903.89209 732.2
+1907.09644 7504.9
+1930.54272 893.4
+S	3810	3810	1907.56699127
+Z	3	5719.426
+Z	2	3813.286
+532.61084 1960.7
+549.18573 1099.6
+630.44025 793.2
+676.66412 984.2
+734.33667 692.8
+794.42651 629.1
+795.92828 1084.2
+862.80554 738.8
+899.35675 703.6
+904.25952 654.9
+1019.64789 839.8
+1185.18176 817.8
+1198.36755 3420.9
+1876.40356 799.4
+1877.01978 764.9
+1879.59607 19327.6
+1879.90344 2388.2
+1880.14673 1796.9
+1881.89392 945.5
+1907.18030 6769.8
+1907.62378 863.8
+S	3811	3811	587.3268246
+Z	2	1172.806
+Z	3	1758.705
+156.07141 552.1
+157.40001 555.6
+157.60469 863.8
+160.02135 576.0
+163.79732 601.1
+165.74973 795.6
+169.49603 712.7
+172.30670 517.9
+180.08621 719.4
+188.25746 747.1
+188.26607 1163.4
+188.27873 1186.1
+188.28561 1274.7
+188.29410 1004.6
+188.29945 1104.1
+188.31404 1064.8
+197.17184 687.3
+199.27438 793.0
+199.35143 1248.7
+199.37344 2846.6
+199.44647 536.1
+199.47131 850.3
+204.61861 583.3
+219.39363 530.8
+220.25574 485.7
+246.24712 620.4
+246.55276 507.5
+256.39316 507.5
+280.18674 702.4
+281.15997 524.1
+305.24670 733.3
+315.18597 644.4
+327.20053 1540.9
+330.70258 610.7
+350.30338 651.8
+371.22659 4411.6
+381.36566 777.7
+391.20016 531.1
+391.35870 598.3
+392.48520 568.3
+393.26166 965.5
+397.23489 750.3
+402.91949 601.0
+405.54456 552.5
+415.25159 2896.5
+432.27887 884.5
+433.66324 580.6
+447.87378 554.1
+459.27832 2644.4
+476.30658 861.4
+482.66287 801.5
+495.79883 679.5
+496.81726 631.4
+503.30307 1706.2
+520.33301 1402.0
+523.79309 581.5
+532.57642 2093.1
+534.36743 799.1
+534.86957 920.9
+542.89227 576.7
+547.32397 1214.8
+549.16980 1088.3
+549.39807 2099.2
+550.40015 2393.2
+551.41479 749.9
+552.66718 560.8
+564.35938 649.3
+567.40802 3617.8
+568.41266 4614.3
+569.36658 823.6
+569.42255 1357.0
+574.49127 521.6
+630.41406 740.2
+676.69012 830.4
+701.49780 1018.5
+718.53394 671.8
+745.52625 1567.6
+762.55609 994.6
+789.55908 1369.5
+795.91321 1124.2
+806.58032 1216.7
+820.59851 1257.9
+847.58960 1303.1
+864.62207 1787.4
+874.35785 596.6
+891.63043 839.4
+908.64752 1884.2
+909.64905 720.4
+935.65881 631.1
+952.67841 1888.2
+953.67157 1192.8
+954.67389 538.0
+996.70422 1444.1
+1040.72632 669.0
+1057.33374 810.0
+1198.28589 3595.3
+1237.77429 578.4
+1285.16553 663.2
+1366.34094 521.4
+1473.24500 644.3
+1483.03564 645.6
+1525.47583 822.7
+1574.76831 586.9
+1697.39929 612.6
+1726.18518 713.0
+1777.28040 1052.9
+1860.45630 621.5
+1869.98340 546.5
+1876.16223 626.6
+1877.98767 935.9
+1878.91296 1468.3
+1879.29956 2457.8
+1879.67542 19865.9
+1880.04553 2533.2
+1880.42444 1302.5
+1907.18457 7222.9
+1907.46191 796.3
+1930.62695 1142.5
+1999.21240 677.8
+S	3813	3813	1880.06199127
+Z	3	5636.911
+Z	2	3758.276
+508.58456 567.4
+532.55017 1710.7
+549.17590 898.4
+630.42828 681.6
+676.67932 1061.2
+690.62408 624.3
+711.31281 726.8
+795.91742 770.5
+835.24731 596.9
+903.85962 648.8
+918.01129 683.5
+1019.67822 716.1
+1057.31213 1019.2
+1198.22998 3260.5
+1313.19165 571.8
+1361.19727 613.3
+1451.96655 636.2
+1516.30115 619.6
+1517.12451 647.9
+1878.86047 765.9
+1879.23657 1789.2
+1879.63794 19586.9
+1880.01453 1712.7
+1880.44897 1118.8
+1881.12732 993.2
+1883.84229 759.2
+1907.18701 7406.8
+1915.95471 663.6
+1930.66357 676.8
+S	3814	3814	603.9128246
+Z	2	1205.81
+157.61201 637.8
+162.00192 637.1
+162.00919 622.2
+165.74745 767.4
+182.80544 568.6
+188.24396 738.6
+188.26759 725.4
+188.28271 689.3
+188.29741 762.0
+188.30475 685.7
+188.32375 818.0
+188.33287 823.2
+188.35968 684.0
+188.38170 518.0
+193.07770 585.8
+197.51338 521.3
+197.70346 784.6
+198.98431 749.1
+199.20097 651.2
+199.25620 758.6
+199.26659 546.8
+199.27301 753.6
+199.34360 694.7
+199.35635 1056.6
+199.36446 1736.1
+199.37215 1700.0
+199.38338 755.5
+199.39108 1030.6
+199.44568 740.0
+199.46413 663.2
+212.64575 518.5
+221.13721 800.3
+231.03580 541.1
+243.27646 579.8
+255.29893 645.9
+271.30185 877.8
+277.21603 1457.6
+311.98209 589.9
+322.77826 510.0
+330.66028 584.7
+330.93756 534.8
+350.31412 653.6
+397.88135 675.2
+415.25174 711.4
+416.25595 929.4
+436.96994 677.8
+453.61975 545.0
+454.53430 848.6
+456.92258 608.9
+459.27661 992.6
+468.34863 571.9
+491.28314 1415.3
+503.30597 1276.9
+504.30963 865.3
+517.31458 1110.5
+532.50995 1224.5
+532.54016 1719.4
+541.16388 666.5
+547.32928 1409.4
+548.33221 1013.6
+549.18018 700.6
+549.33661 687.0
+579.39423 1403.0
+584.37817 1540.7
+630.42822 990.2
+651.67065 626.6
+656.12097 575.2
+676.63782 558.0
+676.66736 612.4
+679.48914 576.7
+687.60754 603.4
+746.53882 583.6
+747.53259 772.9
+778.03552 601.9
+786.59753 711.0
+795.93292 1063.4
+801.59235 712.5
+804.60388 698.7
+848.59082 791.6
+849.60480 901.8
+883.47052 584.1
+936.65808 685.2
+980.68335 743.8
+981.67786 876.0
+1057.27063 670.2
+1098.41785 571.5
+1198.20605 3161.9
+1288.40149 696.9
+1398.95435 616.5
+1552.72363 618.6
+1675.93823 630.1
+1677.97253 616.0
+1750.32227 618.4
+1854.60474 625.9
+1877.57764 578.8
+1878.29944 609.8
+1878.59668 907.9
+1879.06445 2411.6
+1879.61438 18374.6
+1880.13013 2497.5
+1880.50122 1187.0
+1880.77124 674.8
+1888.19678 588.1
+1903.13794 700.5
+1907.23987 7215.4
+1919.23132 716.6
+S	3815	3815	1907.62740793
+Z	3	5719.607
+Z	2	3813.407
+516.59796 707.2
+532.52356 1762.1
+591.32092 542.1
+603.91711 596.7
+610.49011 531.6
+722.59656 591.1
+795.91992 825.0
+829.36847 623.2
+867.94849 688.8
+936.70099 670.7
+1013.79633 772.0
+1033.04346 885.4
+1057.28687 691.2
+1187.99731 844.7
+1198.17395 3461.7
+1714.96655 646.7
+1879.62000 19149.0
+1880.49817 887.8
+1907.17310 6522.6
+1930.74622 857.7
+1991.81116 629.2
+S	3817	3817	1880.0548246
+Z	2	3758.262
+Z	3	5636.889
+532.51031 2204.1
+605.60565 579.5
+642.60553 792.7
+676.67841 810.4
+696.70923 553.5
+763.79797 552.0
+836.17517 545.7
+871.08179 594.7
+1145.07275 701.9
+1198.12915 3263.7
+1278.34314 730.5
+1360.15454 765.4
+1667.41199 737.7
+1716.96655 663.5
+1777.12170 649.3
+1861.20459 686.0
+1872.87878 781.7
+1877.46460 741.1
+1878.47595 749.4
+1879.27795 3617.3
+1879.65051 19505.2
+1880.00415 3273.2
+1880.63867 909.4
+1907.17395 7298.5
+1930.60559 765.1
+S	3818	3818	1907.6218246
+Z	2	3813.396
+Z	3	5719.59
+532.47998 1885.9
+609.35394 689.6
+619.79089 628.9
+624.32861 639.1
+652.81128 682.0
+676.67773 1293.1
+694.11957 630.6
+795.91553 957.6
+820.74908 745.6
+913.11816 582.6
+923.79315 659.3
+960.58447 579.1
+962.58997 610.9
+1018.49786 687.3
+1084.06665 662.0
+1088.25354 603.0
+1126.97681 737.8
+1198.07544 3112.1
+1505.88623 657.3
+1651.99219 647.6
+1874.84998 734.1
+1877.50806 619.1
+1879.25708 831.0
+1879.64429 20051.0
+1881.06775 735.7
+1907.18848 7426.1
+1919.24036 879.9
+1930.74670 1067.1
+1961.11597 669.8
+S	3819	3819	603.8288246
+Z	3	1808.211
+Z	2	1205.81
+155.56308 536.9
+165.74940 620.7
+169.06029 644.2
+171.64861 676.9
+177.01151 578.7
+178.09764 648.2
+178.61555 561.9
+183.20552 548.0
+188.25545 867.9
+188.26820 888.7
+188.27509 858.1
+188.28145 1358.9
+188.29137 1604.3
+188.30559 751.6
+188.31081 797.5
+188.33504 625.3
+190.39407 697.6
+197.71034 828.6
+198.98483 1143.2
+199.34416 1293.4
+199.35725 1345.6
+199.36844 2076.3
+199.37900 910.7
+199.39162 1526.1
+199.44035 528.0
+199.46617 759.7
+210.67737 729.3
+212.16762 551.0
+230.00575 541.9
+252.59988 580.5
+271.47659 617.5
+271.62653 607.6
+273.19690 542.3
+279.01266 598.7
+280.19928 723.3
+287.97006 583.1
+289.74149 519.9
+308.92148 768.5
+319.40939 566.2
+332.42212 696.2
+352.55539 709.6
+366.47919 593.2
+367.12027 525.5
+371.22787 725.8
+381.22696 598.6
+382.79892 621.6
+416.44205 587.2
+427.57217 869.6
+475.57306 575.1
+521.95148 682.4
+532.52100 1957.1
+533.78540 652.2
+540.45740 606.1
+549.18854 637.6
+551.42181 670.5
+584.37610 902.3
+596.54773 611.0
+621.88458 624.5
+625.16284 649.9
+676.64813 873.3
+699.10901 696.7
+785.65881 615.5
+795.92950 1021.1
+1001.51801 573.0
+1198.16370 3217.7
+1500.99207 574.2
+1695.24158 598.7
+1842.90039 611.8
+1877.34546 1024.4
+1878.69629 687.6
+1879.00293 1546.2
+1879.55566 19262.4
+1879.83179 3848.7
+1880.15161 1097.1
+1880.47156 941.6
+1880.77271 737.0
+1906.87915 635.0
+1907.16907 7306.8
+1919.18445 832.1
+1974.25916 612.8
+S	3821	3821	1880.0308246
+Z	2	3758.214
+Z	3	5636.817
+532.56799 1810.0
+630.46069 773.6
+676.69348 1061.9
+684.92505 800.5
+731.18121 814.6
+759.55981 671.0
+795.92157 801.5
+832.51996 670.3
+935.23413 543.6
+1057.31689 815.2
+1077.78674 658.1
+1140.49084 824.7
+1198.26917 3372.3
+1361.93042 696.5
+1401.68237 580.7
+1838.54675 619.5
+1876.29211 790.2
+1878.41724 729.4
+1879.13147 1974.2
+1879.39990 4044.6
+1879.68750 19030.9
+1880.38477 1205.6
+1881.00500 754.1
+1881.54932 717.6
+1882.67737 708.8
+1906.85754 941.6
+1907.19922 7430.5
+1919.18652 828.5
+1930.75598 1492.9
+S	3822	3822	1907.6238246
+Z	2	3813.4
+Z	3	5719.596
+532.56409 2016.8
+630.39838 790.1
+696.55902 594.6
+740.02557 616.5
+795.91150 1237.0
+856.79919 653.2
+874.35449 695.0
+898.95013 748.1
+939.52252 697.7
+1198.25427 3212.3
+1477.06396 776.4
+1785.75317 674.3
+1796.21899 640.8
+1879.31494 1128.8
+1879.67188 20211.4
+1880.02222 1562.6
+1880.85388 614.8
+1882.35913 693.8
+1907.17700 7329.1
+1930.58057 1066.0
+S	3823	3823	603.9128246
+Z	2	1205.81
+157.55795 659.5
+164.99292 612.4
+165.74841 853.4
+175.31171 584.6
+182.77663 637.6
+188.25381 646.2
+188.26604 892.2
+188.27936 1203.8
+188.28844 1080.2
+188.29405 1102.1
+188.30161 1057.4
+188.30981 998.5
+188.32239 812.5
+189.51735 587.0
+198.88264 613.2
+198.98322 892.4
+199.27022 1023.3
+199.32353 874.7
+199.33781 862.1
+199.35762 1142.4
+199.36798 3305.1
+199.38919 902.7
+199.39915 890.1
+199.43430 749.1
+199.46582 649.4
+271.47256 713.4
+274.15479 644.0
+329.12567 537.0
+332.52176 618.9
+333.08099 532.3
+333.45782 705.5
+381.34998 700.0
+413.01636 618.0
+416.67606 583.3
+427.52878 702.7
+441.13177 616.0
+464.61267 589.3
+482.63446 625.3
+500.03033 592.5
+532.58044 1875.1
+540.11481 541.3
+549.13812 761.0
+575.69952 546.9
+615.74377 635.9
+633.64948 547.2
+655.22290 581.8
+664.73535 554.2
+676.65656 933.8
+686.29559 599.0
+731.09692 809.7
+813.23010 593.7
+910.76642 639.9
+959.77441 569.1
+1001.99817 810.2
+1198.29199 3389.7
+1312.97949 530.7
+1511.23987 632.5
+1525.35632 920.6
+1525.58325 644.3
+1576.03369 675.9
+1709.01855 619.8
+1776.94934 747.2
+1878.46191 745.9
+1879.12915 1918.1
+1879.57898 19627.8
+1880.00916 2720.9
+1880.74451 875.3
+1907.11646 7083.4
+1930.53113 1072.6
+1937.10950 665.6
+S	3825	3825	1880.06124127
+Z	3	5636.908
+Z	2	3758.275
+532.56049 1525.0
+591.44092 584.3
+627.52698 618.4
+631.78479 632.3
+676.67719 1187.8
+737.80005 682.1
+795.91760 951.9
+1001.58722 622.8
+1019.67426 894.6
+1057.28772 825.0
+1073.46448 591.6
+1198.25452 3024.8
+1877.51257 818.5
+1878.94055 1090.8
+1879.31921 1714.8
+1879.62732 19915.2
+1879.95227 1962.5
+1880.57446 756.9
+1881.82141 683.5
+1905.99438 732.1
+1907.15613 7587.8
+1930.74573 1329.9
+S	3826	3826	1907.62240793
+Z	2	3813.397
+Z	3	5719.592
+521.64740 663.6
+532.55286 2080.9
+539.84045 669.2
+582.81024 608.3
+595.46124 724.9
+656.60010 654.3
+711.60181 595.4
+731.09747 692.2
+786.58453 610.1
+795.92340 720.2
+809.63190 612.8
+810.42865 599.7
+868.10028 596.4
+1000.84943 635.5
+1019.64630 687.3
+1198.23633 3198.4
+1326.64404 672.8
+1525.33289 932.5
+1676.51306 718.2
+1696.56201 623.7
+1776.88000 935.8
+1878.21106 1179.5
+1878.65808 1464.5
+1879.31812 5200.3
+1879.56885 18902.0
+1880.18530 664.3
+1880.45715 895.5
+1880.88477 706.2
+1881.19128 1155.9
+1905.72229 572.5
+1907.09436 7148.4
+1919.17993 715.5
+1930.50488 805.9
+1932.39771 1064.8
+S	3827	3827	421.478407933
+Z	3	1261.16
+Z	2	841.109
+113.46618 573.4
+120.85027 534.0
+121.77197 2239.7
+123.60962 544.9
+123.79815 639.1
+126.67942 609.9
+137.08794 739.2
+139.19725 589.7
+165.74457 797.0
+171.90382 597.2
+172.55634 631.6
+178.05319 883.5
+186.94440 533.0
+191.48625 578.7
+193.23930 731.0
+194.05922 684.8
+198.97990 1152.0
+199.26103 796.5
+199.31886 751.7
+199.34373 1126.6
+199.35728 3221.5
+199.37166 1501.0
+199.45534 1035.3
+210.02481 32866.3
+234.11223 1063.2
+239.14938 1409.8
+247.22585 585.1
+251.04625 4413.7
+252.04901 637.2
+255.30208 553.9
+288.57199 609.0
+292.19067 1828.2
+295.31281 583.4
+310.33737 625.6
+318.19519 979.2
+330.33414 597.4
+337.65109 531.9
+342.28696 598.0
+345.18896 666.8
+347.08652 556.2
+357.30618 500.8
+364.72418 7818.4
+365.22507 1412.8
+374.99808 597.3
+383.32910 1534.5
+384.24576 2528.1
+385.27451 780.3
+386.02069 3376.3
+401.23178 1468.7
+401.26727 2080.1
+401.30344 1441.1
+401.34140 1912.5
+403.04730 5457.4
+403.28387 1913.5
+403.31653 626.6
+404.03149 15900.2
+459.27588 973.3
+469.92514 843.1
+476.78757 869.4
+503.30902 942.6
+532.53827 2015.7
+540.87531 575.6
+549.18005 819.8
+588.90387 508.1
+603.38202 1124.2
+630.43048 828.6
+632.37231 590.1
+668.11395 553.7
+676.68610 868.7
+711.41553 705.3
+728.44012 4287.3
+729.44153 1659.6
+731.15143 849.3
+782.12494 591.9
+795.91583 822.5
+872.01654 585.4
+914.37109 572.2
+933.91797 585.6
+1057.31604 648.0
+1188.11926 622.1
+1198.21704 3198.2
+1297.10657 934.6
+S	3829	3829	1880.03640793
+Z	3	5636.834
+Z	2	3758.225
+519.91693 694.9
+532.55383 1854.1
+629.68347 732.4
+676.68152 1429.6
+746.72302 579.8
+795.92151 1284.4
+1140.14392 691.3
+1179.29871 577.6
+1198.23865 3154.4
+1221.84924 862.4
+1525.43359 1075.2
+1589.69482 610.4
+1751.33765 678.7
+1871.69946 657.6
+1877.74744 985.9
+1878.51660 807.2
+1878.86963 792.9
+1879.66614 19868.2
+1880.43066 761.1
+1907.06006 7234.2
+1930.65466 1091.0
+S	3830	3830	559.803407933
+Z	2	1117.759
+Z	3	1676.135
+145.38838 882.3
+151.96706 847.0
+157.60553 962.5
+164.40825 711.6
+178.37836 846.7
+182.78482 943.7
+183.11571 735.5
+187.12289 836.1
+188.20694 952.1
+188.22002 667.3
+188.25320 774.0
+188.27757 1108.8
+188.29361 864.9
+188.31267 1226.3
+188.32645 1392.8
+188.33788 1120.1
+188.35504 800.0
+192.10878 743.3
+198.38087 761.7
+198.98265 1164.0
+199.26906 893.9
+199.27591 719.6
+199.29582 1110.5
+199.36734 2188.1
+199.37509 2039.9
+199.39291 2230.0
+199.40685 1274.7
+199.44655 1479.5
+199.46590 832.0
+199.49031 863.2
+213.30093 729.9
+236.48796 875.7
+241.99673 779.4
+256.54568 676.1
+259.16980 931.9
+277.21533 1092.1
+278.02902 1068.0
+280.18820 946.6
+291.18469 749.3
+308.90665 879.0
+366.20697 787.5
+381.36124 981.4
+386.78568 895.9
+427.55112 941.6
+443.94501 741.1
+532.55347 2745.4
+540.41888 1319.6
+549.15869 836.1
+591.57910 788.5
+630.41559 1081.8
+676.66736 1420.0
+686.08588 852.9
+713.14697 924.0
+723.14313 700.2
+731.13831 988.0
+746.58331 722.7
+795.92175 1001.3
+832.12402 757.8
+840.27002 725.2
+999.72662 702.2
+1057.28528 1426.8
+1138.54932 832.7
+1198.24048 4604.7
+1233.17822 790.1
+1241.46326 756.7
+1280.19153 934.4
+1447.09961 830.6
+1481.35059 869.2
+1777.51440 862.5
+1809.07532 746.4
+1860.11389 985.1
+1870.20569 878.3
+1876.10181 729.2
+1878.83557 1535.1
+1879.60815 26467.6
+1879.91479 1662.2
+1880.38367 1852.7
+1883.23120 851.9
+1907.13391 10362.9
+1919.18811 961.8
+1930.63464 1835.4
+S	3831	3831	1907.5028246
+Z	3	5719.233
+Z	2	3813.158
+532.54767 2251.4
+538.65570 603.1
+568.30548 639.6
+596.99579 622.1
+630.42725 1353.7
+653.96307 532.1
+692.52881 655.2
+730.14441 765.1
+731.15631 778.8
+816.83984 652.1
+1125.50256 645.9
+1188.00098 1126.4
+1198.22510 3370.9
+1863.81250 594.6
+1870.27087 939.4
+1877.80310 794.5
+1878.42578 1000.6
+1878.79919 739.3
+1879.34753 2336.0
+1879.64954 20005.4
+1880.82788 870.1
+1883.31860 693.8
+1907.15662 7095.6
+1907.42505 1297.1
+1930.67444 1033.1
+1968.63208 764.4
+S	3833	3833	1880.07524127
+Z	3	5636.95
+Z	2	3758.303
+513.51233 604.7
+518.43433 645.3
+532.53107 1947.5
+566.06775 618.5
+630.39447 923.9
+670.81000 659.6
+676.66119 635.0
+795.93884 1071.2
+1092.62500 723.7
+1152.40430 752.4
+1171.62207 558.2
+1198.19019 3156.1
+1555.79724 708.7
+1677.84741 641.2
+1810.37915 658.1
+1878.22302 820.0
+1879.61853 18928.4
+1880.09607 3109.6
+1900.78870 654.7
+1907.13440 7218.6
+1930.57605 902.8
+S	3834	3834	515.8608246
+Z	2	1029.706
+130.94949 479.6
+132.68593 711.6
+138.38269 511.0
+142.35455 573.0
+158.60248 676.2
+162.16357 580.9
+165.09061 2843.9
+169.49339 703.6
+173.09579 810.9
+177.11147 1990.2
+183.28389 518.9
+188.22353 514.7
+188.23000 480.1
+188.25291 857.8
+188.25948 738.6
+188.27100 711.5
+188.28734 652.8
+188.30394 548.2
+188.32359 533.7
+188.32930 534.4
+188.34534 855.3
+191.10652 1731.7
+198.09627 551.9
+198.61957 506.7
+198.98323 1145.2
+199.29898 598.9
+199.33389 698.5
+199.34909 1180.8
+199.35796 2637.2
+199.37553 1546.1
+199.39398 1380.9
+199.47197 942.6
+206.39653 565.0
+209.11700 5107.5
+233.18956 11717.6
+233.57384 652.0
+235.13268 1305.4
+253.14374 756.6
+259.20419 1160.1
+263.91595 559.4
+271.15234 1002.8
+275.23639 1775.0
+277.21561 23647.9
+279.15851 1248.3
+281.86234 538.7
+297.16949 794.6
+297.68469 621.7
+299.18610 1265.3
+302.27640 521.8
+303.23126 1938.5
+315.17932 9557.4
+321.24173 16539.4
+328.37592 616.9
+359.20590 7087.7
+376.62329 579.3
+403.23160 85099.9
+427.30408 1956.1
+440.76370 626.8
+445.26553 535.5
+452.77560 1748.8
+471.32980 5062.3
+482.65341 710.4
+496.39072 610.3
+499.77109 610.8
+501.23672 959.6
+501.74063 1204.9
+532.52032 1617.8
+549.15240 758.9
+552.41504 544.2
+558.74884 2098.7
+559.24933 1979.1
+605.25983 616.7
+676.68512 1191.3
+690.90979 688.3
+731.10760 788.4
+791.79462 623.9
+795.92456 844.8
+889.83154 538.4
+947.98077 548.1
+1003.84100 661.8
+1198.15601 3239.3
+1261.16199 608.6
+1279.53198 792.3
+1283.19653 597.9
+1446.04834 658.4
+1495.51111 582.4
+1620.38269 640.3
+1785.33337 899.0
+1816.66248 608.8
+1849.18799 642.7
+1876.85474 682.3
+1878.12183 620.1
+1878.74097 1079.1
+1879.09583 2194.8
+1879.66089 19783.1
+1880.26440 2257.0
+1880.80090 848.9
+1881.22437 923.8
+1882.23926 828.6
+1907.15479 7519.9
+1919.18018 624.1
+1930.63208 827.1
+S	3835	3835	1907.5538246
+Z	2	3813.26
+Z	3	5719.386
+532.48975 1795.3
+549.18646 856.2
+590.29114 591.2
+668.96332 614.0
+676.67963 784.5
+709.53992 685.8
+767.62048 645.9
+795.92816 871.7
+1057.87500 597.9
+1197.92163 887.5
+1198.09534 2869.0
+1441.16370 681.7
+1547.84155 849.9
+1878.46448 772.3
+1879.27930 2864.8
+1879.62378 19022.4
+1879.97644 1936.7
+1883.00781 608.3
+1906.77832 960.5
+1907.16113 7383.7
+1907.47778 815.3
+S	3837	3837	1879.8675746
+Z	2	3757.887
+Z	3	5636.328
+532.54236 1989.8
+546.07098 582.2
+549.18085 996.6
+630.44037 674.6
+652.60474 609.7
+676.64758 984.7
+695.39697 644.0
+738.86377 712.8
+795.94464 989.8
+1057.25513 1082.6
+1188.24561 785.2
+1198.20874 3319.4
+1445.19397 605.7
+1469.37988 686.4
+1525.44470 704.8
+1576.70764 602.4
+1718.51318 901.2
+1838.19189 610.6
+1874.20154 615.0
+1879.56494 20572.9
+1906.36646 805.0
+1907.16077 7584.2
+1930.69299 930.6
+S	3838	3838	1907.5728246
+Z	2	3813.298
+Z	3	5719.443
+532.39160 637.2
+532.51453 1403.0
+533.03827 707.5
+549.21930 800.8
+571.58813 644.5
+573.07489 777.7
+676.69513 677.1
+731.19843 681.2
+768.43390 639.6
+785.97339 693.3
+795.93750 1223.0
+827.46063 665.4
+831.34369 671.7
+1041.36047 607.9
+1057.32373 1044.3
+1100.24500 601.4
+1148.45178 739.9
+1188.27527 842.1
+1197.86499 823.8
+1197.99353 665.4
+1198.13599 2248.0
+1252.11438 812.4
+1326.42114 633.8
+1380.06799 629.0
+1398.62708 798.8
+1719.24182 1172.6
+1877.20569 748.7
+1878.25427 1172.5
+1879.21802 1222.6
+1879.67432 19040.9
+1881.16431 1698.6
+1907.19910 7246.2
+1930.79028 1125.5
+S	3839	3839	415.631991267
+Z	2	829.416
+Z	3	1243.621
+119.08508 3114.8
+121.77251 2859.4
+124.24658 542.2
+127.33954 757.2
+128.14758 628.7
+131.03354 563.9
+133.06433 4800.5
+139.43599 596.8
+143.14409 631.4
+143.63527 647.8
+149.35965 609.3
+149.47903 502.0
+153.74344 603.3
+153.91893 640.8
+158.48950 680.4
+159.89365 701.4
+162.13718 652.6
+165.74533 689.4
+167.97005 587.1
+179.57399 612.6
+181.42433 531.1
+185.99765 562.7
+189.14822 667.5
+198.98534 819.4
+199.25952 940.3
+199.26588 633.2
+199.35730 2353.1
+199.36606 1803.4
+199.37386 1797.0
+199.39551 1040.1
+199.45570 1045.3
+200.12964 607.2
+208.42274 590.3
+213.05460 1879.9
+214.50137 759.9
+229.04970 1211.7
+237.32224 624.2
+247.09668 1287.9
+247.13127 1068.3
+250.02980 592.9
+251.14310 981.1
+259.09607 1448.4
+261.14828 1985.3
+271.37897 703.9
+277.10666 2146.0
+279.12231 2476.4
+280.16714 835.6
+285.18420 1022.9
+295.08377 658.0
+295.11707 6684.1
+303.19571 1180.9
+306.87839 773.6
+311.29404 969.9
+313.27615 622.6
+327.20184 1042.1
+350.31067 954.2
+371.22723 1572.6
+379.29736 1198.8
+395.29489 1580.7
+396.41846 837.8
+397.20218 2991.0
+397.30896 10487.9
+398.29565 1017.5
+427.51678 1132.9
+469.94531 677.8
+470.02255 744.3
+488.54633 750.3
+499.60837 638.8
+532.51746 1906.4
+549.12543 1033.6
+676.70392 1212.4
+737.46613 687.0
+757.51843 603.6
+788.89563 656.1
+833.34277 779.2
+891.65314 739.5
+962.36829 575.9
+1139.75745 604.3
+1198.15613 3562.6
+1202.48535 631.9
+1275.58862 588.8
+1323.90625 638.9
+1420.19482 576.8
+S	3841	3841	1880.16799127
+Z	3	5637.229
+Z	2	3758.488
+530.56891 673.3
+532.53632 1664.3
+598.78503 584.5
+630.45209 655.5
+669.71027 659.0
+773.68329 558.1
+782.69019 658.4
+795.92981 1170.4
+796.17432 739.2
+847.49768 627.3
+858.11047 754.7
+947.54773 527.7
+956.00800 595.1
+1000.47278 837.1
+1001.65228 687.4
+1012.21027 565.8
+1021.20618 614.5
+1106.56885 770.8
+1140.54553 1056.0
+1188.30383 728.7
+1198.05664 804.8
+1198.19189 3253.6
+1243.28198 691.9
+1270.12195 566.8
+1459.80798 669.0
+1529.90503 621.1
+1700.42468 581.8
+1717.48218 1491.7
+1821.70557 589.7
+1873.06348 1154.9
+1878.00293 716.9
+1878.73975 1183.4
+1879.08752 2135.0
+1879.71692 19124.6
+1880.02600 2057.0
+1880.37708 1725.8
+1881.72974 747.6
+1907.13367 6979.5
+1907.42554 951.5
+1930.72961 1284.0
+1997.72083 683.7
+S	3842	3842	515.777241267
+Z	2	1029.707
+Z	3	1544.056
+130.84891 596.7
+141.45326 582.8
+144.18869 525.7
+148.08290 548.5
+160.56274 575.3
+163.75890 570.6
+165.09085 2147.3
+165.74403 664.4
+170.20213 582.8
+177.11223 1914.4
+179.39778 648.9
+188.20003 541.6
+188.22525 783.7
+188.23672 765.2
+188.25710 710.6
+188.27313 777.8
+188.28894 614.5
+188.29980 575.9
+188.31010 820.7
+188.33136 853.6
+188.34317 604.7
+191.10638 948.0
+198.98517 911.3
+199.27319 943.6
+199.31155 752.2
+199.34511 1252.2
+199.35944 1046.5
+199.37186 2073.8
+199.39142 891.9
+199.39798 898.8
+199.42126 910.3
+199.45633 792.7
+209.05814 684.0
+209.11696 3452.2
+218.27544 596.1
+221.13898 983.3
+233.18987 8988.0
+255.29924 569.1
+259.20496 1334.3
+265.16656 615.6
+265.63324 575.9
+271.15378 943.2
+275.23599 817.0
+277.21588 19404.0
+279.15771 1416.1
+280.19281 618.1
+287.23300 555.0
+292.55307 567.2
+303.23245 1491.9
+315.17953 7411.3
+321.24185 14252.4
+327.20496 699.7
+339.21249 582.2
+342.28235 754.5
+350.29913 1083.0
+359.20624 6285.8
+382.30856 549.1
+402.36520 587.1
+403.23190 67021.7
+421.25168 989.3
+427.30536 1814.8
+452.77753 2792.1
+471.33002 4720.6
+485.25241 650.5
+495.35004 881.9
+497.34390 868.2
+501.23965 968.6
+503.80548 636.3
+532.58704 1685.6
+549.16528 686.7
+558.75049 1551.4
+559.25208 1599.9
+579.75317 719.8
+615.28638 644.9
+652.41620 631.0
+687.30530 547.3
+731.13940 662.1
+740.45538 684.8
+828.19849 573.8
+900.37073 539.5
+904.54895 767.5
+923.57263 750.3
+1063.46289 755.8
+1188.29651 854.7
+1198.31787 3658.5
+1474.55103 595.8
+1476.77917 634.9
+1525.47070 852.6
+1716.74731 1313.4
+1747.65381 595.2
+1751.42188 977.2
+1860.18103 623.1
+1872.11035 960.8
+1878.29163 1058.7
+1878.69092 842.4
+1879.17102 1740.1
+1879.65991 19194.3
+1880.08655 1681.4
+1880.59619 1537.0
+1880.94922 574.0
+1907.17261 7563.7
+1930.66882 850.1
+S	3843	3843	1907.5808246
+Z	3	5719.467
+Z	2	3813.314
+532.58118 2136.2
+549.17395 822.4
+609.76538 736.2
+630.42609 792.1
+655.72552 630.3
+672.41669 575.7
+676.67590 1013.9
+795.91766 1078.0
+876.52539 596.6
+1034.07019 746.5
+1122.74121 706.4
+1188.24792 735.9
+1198.30334 3028.4
+1608.82581 614.6
+1612.72986 692.2
+1875.29419 627.2
+1877.76428 1063.7
+1878.27490 1241.8
+1878.72974 1686.0
+1879.18188 1995.9
+1879.65320 19224.0
+1880.16724 2810.4
+1880.52795 1533.4
+1882.07153 703.1
+1907.10034 7192.1
+1930.67188 1225.6
+S	3845	3845	1880.07240793
+Z	3	5636.942
+Z	2	3758.297
+532.57959 1566.3
+557.96240 545.9
+682.20148 576.3
+797.43427 661.9
+931.72437 662.6
+1019.67706 862.3
+1191.13574 583.3
+1191.50378 619.5
+1198.29968 3715.7
+1232.83911 662.0
+1382.02710 630.5
+1473.39563 723.2
+1615.11108 572.2
+1667.60144 687.6
+1707.58398 624.7
+1870.54736 1016.2
+1873.32288 757.2
+1877.95886 1061.5
+1878.86426 1279.6
+1879.39026 5337.3
+1879.71082 18053.9
+1880.05920 3427.9
+1880.21558 2971.4
+1880.54407 3292.6
+1880.88904 1169.3
+1907.09900 7500.6
+1917.28650 688.9
+1919.11951 704.8
+1930.46436 1025.6
+S	3846	3846	1907.47399127
+Z	2	3813.1
+Z	3	5719.147
+532.61041 1852.9
+656.55341 619.8
+676.66718 1019.5
+795.94733 1220.6
+815.26782 597.6
+1063.80371 651.9
+1198.24841 880.2
+1198.36914 3081.3
+1476.96179 600.8
+1525.45618 796.2
+1676.35999 717.0
+1870.36340 736.8
+1879.62207 17892.4
+1880.13708 2383.5
+1881.83838 772.0
+1906.85376 1094.4
+1907.15491 7062.7
+1907.74524 604.7
+1919.11755 740.1
+1930.64124 1047.3
+S	3847	3847	515.776407933
+Z	2	1029.705
+Z	3	1544.054
+130.98439 598.8
+140.79436 551.0
+141.17584 594.4
+146.89456 601.0
+148.00960 637.0
+157.60341 829.1
+158.24876 550.4
+165.09064 1097.3
+165.56743 556.1
+169.49394 1018.0
+177.11166 1491.5
+188.25449 663.4
+188.25981 538.2
+188.26750 724.7
+188.27451 911.4
+188.28252 964.6
+188.28825 1019.6
+188.29353 1072.6
+188.29898 1106.1
+188.31029 991.6
+198.98351 796.4
+199.27071 854.7
+199.27869 702.4
+199.35359 1560.2
+199.36827 2408.9
+199.37633 1864.8
+199.39177 599.3
+199.46579 1241.8
+209.11662 2041.5
+210.85548 512.9
+230.74570 611.2
+233.18965 4273.5
+233.57324 765.2
+245.09753 580.3
+277.21552 8553.5
+279.15912 928.5
+283.17688 829.1
+294.81329 613.0
+303.23148 1183.6
+315.17899 3223.1
+321.24164 6482.8
+342.27432 815.9
+359.20605 2411.5
+381.36096 725.6
+383.20407 509.3
+383.21970 659.3
+395.29727 642.8
+403.23151 30724.6
+415.25067 1326.6
+426.74817 596.8
+427.30365 824.1
+431.70068 714.5
+443.26633 1546.5
+456.13593 693.4
+459.27899 1514.3
+471.32941 1890.4
+491.32751 696.8
+496.39090 2402.7
+501.23544 738.9
+502.87238 577.0
+508.25623 581.8
+532.60657 1910.8
+541.28693 568.8
+548.34064 689.2
+558.75000 1527.6
+559.25293 2302.8
+591.35614 827.3
+630.41077 1117.7
+676.66766 967.8
+745.53186 958.3
+749.21021 566.4
+805.54663 1194.1
+846.20050 725.0
+935.83655 623.2
+981.20709 575.8
+1036.30396 586.8
+1057.28333 785.8
+1133.66748 607.4
+1161.39697 590.3
+1172.10547 683.2
+1174.89331 598.8
+1198.36890 3066.8
+1207.02454 521.8
+1342.94604 610.8
+1453.43738 570.0
+1525.42578 944.5
+1593.16028 701.1
+1616.50806 588.4
+1876.05322 949.3
+1877.77893 936.5
+1878.39563 931.6
+1879.61865 19569.5
+1880.87854 871.5
+1881.06152 725.1
+1881.60522 922.5
+1907.13062 7458.4
+1930.61841 902.4
+S	3849	3849	1880.07640793
+Z	2	3758.305
+Z	3	5636.954
+519.93335 600.9
+532.57281 1662.0
+603.43945 582.6
+676.68390 799.5
+795.92297 1099.3
+796.50024 642.0
+900.33087 629.0
+915.81250 629.3
+933.32690 589.3
+1057.30273 653.8
+1198.28296 3680.5
+1223.61865 710.5
+1666.29309 631.0
+1775.53931 665.2
+1827.81824 617.4
+1862.27588 631.4
+1878.61609 869.4
+1878.92529 1321.3
+1879.25183 746.9
+1879.70471 15693.9
+1880.41089 2355.0
+1880.69226 1340.6
+1907.17590 7443.5
+1919.08728 747.6
+1930.57434 1153.7
+1985.02686 691.9
+S	3850	3850	1907.5298246
+Z	2	3813.212
+Z	3	5719.314
+517.71838 618.8
+532.58978 1828.5
+573.17261 654.9
+574.02667 596.0
+591.64008 623.7
+620.92279 597.7
+630.37604 716.5
+676.66144 1265.1
+741.66144 688.3
+767.41650 575.3
+795.92133 1241.8
+898.18488 578.3
+942.02539 552.0
+1021.13519 757.0
+1057.26306 638.8
+1140.24829 630.3
+1145.42432 571.5
+1198.31873 2887.3
+1216.29883 687.2
+1231.78357 625.4
+1272.88220 642.6
+1444.99780 874.1
+1525.30969 744.9
+1697.31287 705.9
+1878.39453 862.2
+1878.61121 815.1
+1879.14624 1555.2
+1879.58301 19363.2
+1879.85437 2331.4
+1880.03027 1442.5
+1881.18762 667.3
+1881.66101 1011.3
+1881.97534 667.3
+1907.16235 7829.2
+1930.46802 716.0
+1983.35278 814.7
+S	3851	3851	515.777407933
+Z	2	1029.707
+Z	3	1544.057
+133.14899 1111.3
+138.09174 597.2
+142.88599 528.0
+145.85535 581.6
+167.24287 555.4
+180.48073 601.7
+180.66371 587.9
+182.79373 686.8
+188.26424 1018.8
+188.27428 1485.1
+188.29149 1217.2
+188.29819 884.5
+188.30432 969.7
+188.30939 899.0
+188.32065 514.4
+198.98639 911.0
+199.27040 788.6
+199.34875 833.2
+199.36826 2165.9
+199.37807 1438.4
+199.39821 1186.9
+199.40544 905.9
+199.42578 593.1
+199.46581 955.4
+199.47624 640.6
+201.14902 615.9
+209.11769 803.0
+209.26018 606.0
+209.80588 668.4
+215.16164 605.8
+215.41589 543.2
+221.13890 976.1
+233.18987 2369.3
+240.34505 587.0
+258.11102 541.4
+274.30130 559.9
+275.19849 672.8
+277.21567 5703.1
+279.16055 765.0
+294.55591 586.4
+295.22498 761.4
+298.02377 594.4
+303.23035 622.0
+315.17953 1606.6
+321.24179 4386.5
+325.74219 624.0
+327.20166 915.4
+342.28595 757.2
+359.20596 1774.3
+371.22107 687.0
+383.59467 723.4
+389.88403 522.3
+396.20468 761.6
+403.23154 18320.4
+415.21109 2152.1
+421.25143 1367.6
+459.27832 1413.9
+471.33356 709.7
+482.66528 581.0
+496.39072 2243.2
+532.58899 2182.7
+547.33270 940.3
+549.17676 807.0
+558.75006 1526.1
+565.70343 601.5
+591.35327 1034.4
+606.71338 525.2
+635.38293 1208.4
+676.66650 1146.8
+733.38080 587.9
+795.93518 996.6
+882.27527 648.8
+897.45343 633.7
+928.32886 616.3
+1079.52136 698.4
+1159.09351 569.0
+1198.32373 3313.4
+1214.70923 661.2
+1302.43494 696.8
+1525.47913 657.5
+1861.11707 733.1
+1870.12268 651.3
+1878.76184 1259.8
+1879.60999 19781.2
+1880.58630 1004.7
+1881.31934 778.5
+1907.21741 7519.8
+1919.17358 627.8
+1925.71887 648.2
+1930.66675 1292.3
+S	3853	3853	1879.99540793
+Z	3	5636.711
+Z	2	3758.143
+511.88370 627.9
+512.54645 567.4
+532.56653 1719.4
+573.56073 738.3
+628.65088 544.0
+630.37714 760.6
+635.31140 589.3
+667.02808 631.6
+676.68732 847.5
+691.24200 653.7
+694.91254 618.8
+760.75269 626.0
+795.93451 769.4
+1018.11670 609.0
+1019.67529 568.1
+1020.79657 725.7
+1023.64984 598.6
+1198.27087 3080.0
+1310.56445 715.5
+1657.18372 928.6
+1701.46936 677.6
+1719.64917 651.2
+1785.26331 742.7
+1878.63208 636.6
+1879.09192 2709.2
+1879.65417 19373.1
+1880.19617 2888.3
+1880.86682 938.9
+1881.52979 600.1
+1907.16846 7630.7
+1930.60254 663.4
+1967.32922 731.8
+S	3854	3854	1907.5828246
+Z	2	3813.318
+Z	3	5719.473
+532.58691 1976.3
+630.41943 812.1
+652.28149 1013.4
+658.57477 608.9
+676.65393 900.9
+731.12469 785.6
+782.93365 550.2
+795.93457 1245.6
+803.84955 648.2
+815.96216 597.1
+1049.02588 529.6
+1057.27795 724.3
+1198.30579 3392.3
+1204.21521 654.5
+1329.29846 743.0
+1373.85132 619.4
+1444.93762 594.9
+1672.32410 591.6
+1776.84216 674.7
+1870.40417 640.9
+1877.81726 961.8
+1879.10486 2191.4
+1879.28784 1803.1
+1879.58655 19132.0
+1880.07251 2220.7
+1907.17651 6969.4
+1932.38293 929.9
+S	3855	3855	412.741241267
+Z	3	1234.948
+Z	2	823.635
+105.10706 544.8
+109.32289 560.6
+111.72340 533.3
+113.46511 578.7
+121.77145 2384.5
+122.56377 633.3
+123.55822 618.2
+128.57661 764.2
+133.06413 3688.7
+139.23657 578.1
+141.59727 604.0
+158.05811 581.2
+163.52289 661.9
+165.54077 567.7
+181.99858 595.6
+190.48344 573.0
+197.09561 1059.0
+199.34459 1755.9
+199.36191 2756.0
+199.37634 1428.1
+199.38304 972.7
+199.45918 1046.7
+200.87137 606.6
+207.71071 580.7
+234.11778 541.9
+243.10085 1631.5
+255.29428 839.5
+272.94394 783.9
+277.10727 770.1
+307.53720 571.2
+326.57468 604.9
+360.76007 513.6
+361.71466 611.0
+389.27765 630.7
+397.37439 604.2
+406.73688 600.3
+408.93033 631.2
+409.26270 575.6
+422.73746 622.7
+443.45932 562.9
+482.66165 662.0
+517.82416 551.1
+532.57300 1996.8
+549.16693 815.0
+630.40253 801.3
+676.66656 1257.4
+686.29846 548.1
+731.13135 730.1
+795.94501 1002.8
+850.61261 566.1
+947.03455 605.7
+988.01306 590.3
+1159.79529 686.2
+1184.81824 640.0
+1188.24561 730.7
+1198.28613 3070.6
+1219.32349 552.8
+1421.49023 557.9
+1525.44324 858.3
+1595.75269 616.9
+1653.93457 665.0
+S	3857	3857	1880.02640793
+Z	3	5636.804
+Z	2	3758.205
+532.54718 1606.7
+551.07416 626.7
+593.26666 558.3
+630.43665 815.5
+676.65521 1008.1
+699.35913 561.0
+738.24579 766.7
+795.93634 719.4
+839.72321 611.0
+849.82440 612.0
+858.11066 637.7
+1017.49878 630.0
+1057.27234 812.9
+1188.34119 822.3
+1198.21680 3432.4
+1378.71960 745.4
+1525.48779 730.3
+1872.91296 734.2
+1878.79431 1540.4
+1879.57739 20140.6
+1880.34888 1849.3
+1907.09607 7401.5
+1930.69312 999.0
+S	3858	3858	513.6078246
+Z	3	1537.548
+Z	2	1025.368
+133.13687 1247.6
+138.85593 576.1
+140.01244 622.6
+147.16908 600.9
+167.74971 607.4
+177.11153 2133.2
+188.20985 514.2
+188.22296 816.4
+188.24908 721.8
+188.26146 709.9
+188.27693 570.1
+188.28984 584.1
+188.30035 824.1
+188.31158 699.2
+188.32446 939.5
+188.33472 802.5
+188.34792 904.0
+188.38660 746.3
+197.70493 604.3
+198.98656 816.0
+199.28767 790.4
+199.31046 1005.5
+199.32903 889.4
+199.35834 651.8
+199.38190 2517.3
+199.40550 1875.1
+199.48135 713.2
+199.49982 741.7
+221.13913 1070.6
+249.30379 683.6
+265.16284 662.7
+268.63431 658.3
+283.17517 1616.2
+303.18875 565.9
+327.20013 4425.6
+336.17542 639.9
+353.21548 1032.3
+371.22708 5320.5
+415.25266 6038.3
+428.26068 4038.8
+441.26608 979.5
+459.27893 4499.4
+468.32703 1068.9
+473.29495 961.1
+485.29526 1433.8
+489.15106 636.3
+490.33978 2178.4
+495.38696 5039.9
+532.54437 2093.6
+565.43152 661.9
+599.55853 634.4
+613.45276 1059.1
+630.43695 696.7
+654.84021 514.5
+656.20270 597.5
+657.47534 4221.7
+671.49133 1010.2
+676.67297 890.0
+700.03235 645.0
+701.50110 3599.3
+715.51703 2216.7
+745.52393 1302.3
+753.03375 581.5
+759.54492 3101.8
+795.94092 1149.4
+803.57013 3019.7
+810.10266 636.1
+826.30939 654.0
+839.94257 622.6
+847.59723 1586.9
+862.01642 592.6
+891.61780 667.4
+943.22955 568.3
+947.21436 539.2
+1155.84753 630.5
+1188.31299 691.5
+1198.21875 3637.1
+1489.71960 764.9
+1606.75513 634.2
+1611.64648 730.5
+1667.35461 674.0
+1763.13708 626.9
+1876.22070 651.8
+1879.62317 19692.8
+1879.91357 2975.4
+1880.26074 1053.4
+1907.17615 7779.9
+1930.71533 922.3
+S	3859	3859	1907.60824127
+Z	3	5719.549
+Z	2	3813.369
+519.38123 657.5
+532.59808 1321.5
+536.84100 622.5
+560.68469 656.8
+597.70563 579.3
+739.69012 633.5
+795.94611 1116.3
+968.38629 551.3
+1020.78778 719.8
+1043.60547 654.9
+1047.00073 562.3
+1057.27637 777.9
+1080.35999 606.7
+1198.33423 2531.6
+1525.48853 680.6
+1541.82703 651.9
+1560.38696 691.0
+1673.87952 744.1
+1703.51184 577.8
+1706.43750 928.5
+1776.95227 731.1
+1793.41943 725.5
+1878.52087 708.6
+1879.31982 4523.4
+1879.60083 18635.2
+1880.27356 858.8
+1906.71667 744.6
+1907.18481 6864.4
+1907.59595 707.9
+1919.17688 826.2
+1930.66833 1059.5
+1963.88135 590.6
+S	3861	3861	1880.1018246
+Z	2	3758.356
+Z	3	5637.03
+514.32587 649.0
+532.55798 1096.6
+618.45972 751.2
+676.67596 1023.6
+682.53357 700.8
+795.94037 824.4
+815.84723 735.9
+822.87531 731.3
+853.34528 760.2
+872.55994 590.2
+907.83795 772.5
+909.64899 569.6
+1021.27899 679.2
+1104.89270 622.1
+1197.30994 637.6
+1198.26306 2675.1
+1198.46582 967.7
+1205.00720 715.5
+1249.32446 570.4
+1525.44299 551.6
+1694.17725 665.3
+1876.20374 849.5
+1878.23950 811.8
+1879.01074 2230.9
+1879.62366 19454.9
+1879.91418 1697.2
+1880.21375 1836.8
+1907.02429 7324.4
+S	3862	3862	535.876241267
+Z	2	1069.905
+Z	3	1604.353
+157.60681 2134.3
+160.39290 2518.4
+165.74353 2705.7
+167.50520 2554.4
+169.49863 1940.2
+177.11171 12131.3
+182.78500 1902.9
+182.78932 1849.7
+187.71419 2280.0
+188.21693 2678.0
+188.24045 3811.6
+188.25653 1941.2
+188.27240 3379.6
+188.29079 2614.2
+188.30138 2037.5
+188.31227 2959.2
+188.32584 2753.8
+188.32825 2738.9
+188.34602 2324.7
+188.37648 2238.6
+198.98584 4035.2
+199.29613 3777.4
+199.33502 4093.4
+199.35539 2923.9
+199.37918 6711.6
+199.39540 6650.6
+221.13777 7893.3
+231.40343 2447.1
+239.14839 5130.8
+265.16364 6417.9
+271.45462 2333.2
+279.18091 2722.0
+283.17450 12359.2
+293.73386 1839.8
+308.91293 2385.0
+309.18985 8959.5
+323.20651 2231.6
+327.20135 11714.5
+342.29257 2659.4
+345.24716 2728.2
+353.21634 7256.2
+371.22638 19889.7
+372.22961 2838.2
+397.24359 7739.1
+415.25302 20628.2
+416.25687 4525.6
+419.33517 2352.9
+427.56107 2414.9
+428.26746 2313.7
+433.35413 2899.0
+441.26678 6510.1
+450.27371 17082.1
+455.33289 2209.1
+459.27878 37164.5
+460.28238 5622.8
+485.29953 3989.6
+487.85342 2114.4
+490.34177 11360.0
+490.84268 4149.4
+503.30478 38952.1
+504.30740 6480.6
+512.35419 14624.7
+512.85815 4131.6
+516.35950 27430.9
+517.31573 3155.6
+517.35706 3926.3
+532.58136 7687.2
+533.98895 2270.9
+547.33014 5766.4
+552.61169 2195.3
+573.34735 3629.7
+580.51941 2327.0
+589.29663 2352.8
+591.35669 35793.0
+592.36090 6991.1
+635.38300 19296.7
+636.38507 6531.9
+657.47656 7625.2
+658.47675 3809.0
+659.08765 2480.2
+671.83704 2429.3
+676.68372 4127.9
+679.41058 8028.9
+701.50232 19499.0
+702.50208 4706.8
+715.51959 5940.9
+716.52502 3080.8
+741.54468 3172.2
+743.48163 2023.4
+745.53076 18715.0
+746.52722 5581.9
+754.55133 2371.2
+759.54565 11482.8
+760.54102 3368.1
+789.55695 11410.1
+790.55878 5713.2
+795.93811 3554.1
+803.57019 14032.5
+804.57410 3830.1
+829.57520 2252.3
+833.57849 10111.8
+847.59808 14007.4
+848.60669 4488.3
+858.10229 2329.2
+860.11169 2388.3
+877.61823 2684.9
+891.62012 10291.3
+892.62659 3537.9
+897.39404 2748.3
+1057.31958 3760.6
+1111.70251 2430.4
+1130.51379 2490.1
+1187.94470 2631.4
+1198.29834 12852.0
+1301.70251 2487.1
+1422.46765 2117.1
+1525.50610 2861.3
+1530.26392 2359.5
+1662.49744 2377.9
+1776.96729 2762.2
+1875.48193 2150.7
+1877.19019 2735.2
+1877.92981 3196.6
+1878.38391 4297.0
+1878.92346 5202.2
+1879.20032 4268.1
+1879.65613 75482.4
+1880.12048 5425.4
+1880.39734 3108.9
+1880.93518 3197.3
+1882.11414 2139.0
+1882.98889 3311.7
+1907.01245 26713.0
+1919.18127 2340.0
+1930.65503 3584.6
+S	3863	3863	1907.43340793
+Z	2	3813.019
+Z	3	5719.025
+532.55145 1793.9
+549.12726 796.8
+643.22424 655.9
+676.66602 837.9
+781.83185 656.7
+795.93170 1115.6
+876.90106 633.6
+1002.18970 615.8
+1110.40076 735.4
+1198.23706 3148.5
+1804.55505 683.6
+1870.31946 702.0
+1876.20496 876.8
+1878.40515 874.1
+1878.82288 1692.9
+1879.23572 3046.6
+1879.60449 19462.3
+1879.98010 2343.2
+1880.36438 1550.9
+1880.80310 1236.0
+1881.12463 1459.7
+1907.09509 7448.1
+1907.37793 888.1
+1907.56250 840.8
+1930.48364 979.6
+S	3865	3865	1880.10240793
+Z	2	3758.357
+Z	3	5637.032
+532.56976 1797.5
+549.12762 766.6
+562.02002 579.0
+597.45721 551.4
+630.38190 725.4
+731.09509 771.3
+794.22418 592.6
+795.93323 1089.6
+830.43542 533.4
+893.21136 629.3
+1057.31592 685.8
+1198.27417 3783.7
+1366.15369 558.2
+1530.16211 562.8
+1629.45361 660.1
+1650.08264 657.5
+1870.16418 916.1
+1878.64282 652.9
+1879.36768 6228.9
+1879.62134 17461.7
+1880.08069 2907.1
+1880.44250 2091.8
+1880.98169 678.7
+1884.17444 700.3
+1907.16309 7264.7
+1919.17029 833.9
+1930.54004 806.4
+1963.68726 674.0
+S	3866	3866	427.7245746
+Z	3	1279.899
+Z	2	853.601
+105.76884 541.0
+118.54177 601.4
+121.06426 4843.4
+121.77290 2807.0
+146.41440 594.7
+148.69576 615.9
+155.53635 564.3
+157.59415 813.6
+161.96414 651.3
+162.47456 631.0
+165.09041 7928.2
+169.50891 675.4
+173.27045 592.1
+177.11221 1647.1
+187.57886 649.3
+199.26143 829.7
+199.34268 897.0
+199.35814 3274.7
+199.36810 947.9
+199.45648 1114.1
+209.11671 6830.6
+210.18089 540.5
+213.51933 599.5
+219.20461 657.3
+221.92972 563.3
+225.99295 665.0
+227.12672 1818.8
+233.18907 1107.4
+271.15225 1788.9
+277.21585 5977.3
+299.51941 574.8
+314.89032 941.0
+315.17944 196463.1
+315.47147 1010.7
+315.66437 651.1
+315.67709 526.7
+315.76126 957.5
+315.77899 872.3
+321.24054 2177.6
+333.07343 1146.6
+348.64267 548.1
+374.91162 521.8
+375.39551 542.2
+397.58966 747.8
+409.10577 13381.5
+409.24133 1401.0
+409.31085 770.0
+410.10867 3525.8
+411.45978 596.7
+469.91064 684.0
+496.95990 578.9
+532.59003 2166.0
+555.11816 654.8
+583.45953 620.1
+626.64972 609.1
+630.37122 714.0
+658.59503 647.0
+668.87201 526.2
+676.67157 1179.7
+731.08899 713.7
+742.40759 605.3
+757.09088 728.5
+795.94000 823.9
+938.11023 523.5
+1001.98724 662.4
+1069.44897 603.6
+1122.75171 590.7
+1198.31946 3219.4
+1334.70752 728.6
+1413.93933 641.8
+1434.03857 573.7
+1552.70752 641.8
+S	3867	3867	1907.51899127
+Z	2	3813.19
+Z	3	5719.282
+528.04248 780.6
+532.57202 1761.6
+568.04370 684.4
+578.51532 536.8
+676.58887 759.2
+676.66217 896.7
+778.01160 733.8
+795.93396 793.4
+1049.79407 651.4
+1113.55225 720.0
+1198.27881 3381.4
+1525.36243 660.1
+1878.85205 1476.4
+1879.58118 17421.5
+1879.86243 5972.5
+1880.22827 1113.6
+1880.57178 1665.7
+1881.00586 831.0
+1907.19507 7123.9
+1930.55408 928.4
+S	3869	3869	1879.9818246
+Z	2	3758.116
+Z	3	5636.67
+532.52679 1680.6
+533.08606 664.9
+540.91071 599.9
+563.06171 562.1
+619.08844 603.8
+676.65106 582.1
+676.68909 865.8
+680.24695 671.8
+682.39465 531.2
+795.93640 701.6
+823.10114 628.4
+839.61926 663.9
+844.97864 650.8
+964.43408 647.1
+1053.28149 711.1
+1198.18713 3452.8
+1220.72083 649.0
+1448.62598 769.8
+1525.45044 1031.8
+1544.84863 599.3
+1792.54114 650.7
+1870.32886 864.6
+1878.96069 1159.4
+1879.66174 19097.7
+1880.44458 919.4
+1883.21594 648.1
+1907.20117 7318.3
+1930.63306 1122.4
+1932.49255 737.6
+S	3870	3870	444.751407933
+Z	2	887.655
+Z	3	1330.979
+110.26287 644.9
+120.09931 600.2
+121.77140 2301.2
+124.08032 913.0
+125.19140 535.2
+126.34735 540.4
+126.72594 630.0
+138.40320 622.5
+144.21770 556.8
+146.09282 703.5
+147.16223 607.5
+155.09911 1055.1
+165.09065 2548.4
+165.74446 725.8
+172.77161 670.0
+177.11169 2294.8
+199.12463 1121.2
+199.27878 743.6
+199.31064 665.6
+199.31926 682.9
+199.32982 661.1
+199.35870 1430.1
+199.36777 2665.9
+199.37395 1721.4
+199.38414 834.8
+199.45476 816.3
+199.48430 563.0
+209.11737 1550.5
+211.11421 596.7
+221.13809 1021.0
+223.02728 685.2
+233.56418 592.6
+233.57103 607.9
+243.05455 682.8
+247.70964 666.0
+255.27600 633.1
+271.15417 2001.1
+277.21338 712.6
+301.05371 656.4
+308.64038 574.3
+308.88968 683.2
+315.17947 46473.2
+316.18265 1403.3
+339.30170 559.3
+341.01666 932.7
+342.25873 635.7
+357.39917 580.8
+409.25266 658.1
+415.25500 949.4
+423.48465 708.4
+425.10342 754.5
+425.28574 1196.4
+425.30368 766.7
+425.34018 767.8
+425.37643 3851.4
+426.02921 607.9
+426.37637 1554.6
+426.84305 1464.8
+427.26202 764.0
+427.30429 336334.1
+427.53223 703.0
+427.76486 2400.8
+427.97214 681.2
+428.24756 1428.9
+428.30969 1642.9
+429.08908 2300.0
+444.75174 595.3
+459.28055 852.3
+503.30533 3783.6
+532.52045 2065.9
+547.33026 7962.2
+548.33588 966.0
+583.62750 627.2
+591.35699 7979.9
+618.48425 596.6
+635.38428 5183.4
+636.38477 838.0
+679.40839 2674.8
+723.43451 818.2
+795.95935 1302.7
+846.88531 520.4
+862.25531 572.5
+1019.91870 611.4
+1039.45972 742.6
+1198.16589 3250.5
+1198.70569 637.5
+1354.51306 608.8
+1512.55225 601.7
+1525.34143 885.4
+1761.43201 593.7
+S	3871	3871	1907.57940793
+Z	3	5719.463
+Z	2	3813.311
+532.53571 1716.2
+630.36548 1038.1
+676.66260 865.2
+731.07043 802.0
+795.94879 994.6
+816.39063 622.6
+996.94562 651.6
+1000.19122 611.4
+1055.90381 662.4
+1057.27148 1031.9
+1060.19861 619.6
+1120.34692 713.5
+1132.94629 673.5
+1170.73669 798.5
+1198.18848 2819.8
+1525.30286 734.2
+1595.97888 711.0
+1622.51355 563.7
+1776.90918 891.3
+1876.34680 765.0
+1878.01038 735.5
+1879.05042 736.1
+1879.59387 19676.6
+1880.28149 849.0
+1881.14771 953.3
+1881.89001 763.1
+1882.42773 810.3
+1906.81274 607.8
+1907.10474 7280.0
+1930.47754 1034.7
+S	3873	3873	1880.06624127
+Z	2	3758.285
+Z	3	5636.923
+508.53885 563.1
+532.47437 1348.3
+566.01666 602.0
+604.29230 757.5
+676.68848 995.5
+749.35071 591.7
+783.54669 571.9
+795.93500 999.7
+798.89691 640.9
+801.64685 581.9
+809.79126 649.1
+1072.79712 628.9
+1075.89038 591.5
+1188.20276 757.8
+1198.06873 2759.8
+1289.24390 717.0
+1677.17407 786.8
+1870.26489 601.1
+1877.73840 829.0
+1878.71973 1881.7
+1879.03430 1876.9
+1879.39417 3488.0
+1879.65393 19149.9
+1880.27075 2555.9
+1881.11243 1034.5
+1894.45337 663.2
+1906.80493 868.0
+1907.14954 7107.1
+1907.51917 1132.4
+S	3874	3874	444.683991267
+Z	2	887.52
+Z	3	1330.777
+121.77231 2699.8
+133.08556 1353.0
+137.28392 577.1
+152.45625 614.1
+155.09911 611.4
+157.91663 513.1
+165.09056 2331.8
+167.00058 557.8
+169.48715 583.8
+177.11165 3005.9
+198.98615 1223.8
+199.27126 1087.9
+199.28268 565.4
+199.34435 722.8
+199.35692 993.2
+199.36897 3333.7
+199.38220 660.6
+199.46642 901.3
+209.11684 1071.8
+221.13753 1265.2
+233.56337 628.0
+248.54689 677.1
+249.93456 772.2
+256.69287 711.7
+261.99530 675.0
+271.15314 2863.5
+271.29297 564.5
+280.16815 691.6
+315.17960 24682.5
+316.18198 1129.7
+320.00278 663.5
+350.27191 801.6
+369.08777 545.2
+370.09985 2032.6
+371.22989 764.1
+377.70370 578.3
+406.26523 639.4
+415.25174 828.1
+425.10138 1534.8
+425.23337 554.3
+425.27536 1290.5
+425.30493 6951.3
+425.34174 2591.6
+425.37732 3185.3
+426.30768 2346.9
+426.34387 1104.1
+426.38428 1215.5
+427.23108 583.2
+427.24966 1060.3
+427.30447 198659.3
+427.52789 824.1
+427.76758 1034.6
+428.24744 720.1
+437.83011 571.9
+459.28217 895.4
+469.90161 801.9
+471.93701 564.9
+476.75949 699.4
+482.63672 851.2
+491.05551 590.0
+503.30591 3753.4
+504.30658 822.3
+505.39404 727.7
+532.49432 1722.9
+547.33118 6440.2
+548.33539 1388.0
+570.64307 567.2
+591.35699 5690.6
+592.36310 1187.1
+630.37732 776.3
+635.38226 4542.5
+636.38776 1019.6
+649.24091 575.5
+676.66522 953.6
+679.40985 2277.2
+731.09076 690.4
+795.93805 1142.3
+818.72162 546.7
+1057.27795 1089.1
+1061.55688 581.3
+1198.09875 3431.8
+1249.42505 572.7
+1263.48877 565.4
+1278.03174 593.1
+1422.17676 637.5
+1458.91687 771.4
+1737.33435 657.4
+S	3875	3875	1907.57040793
+Z	3	5719.436
+Z	2	3813.293
+522.83716 531.8
+526.12177 648.8
+526.82770 598.8
+532.46484 1829.4
+538.07001 627.5
+555.57208 581.0
+624.78223 666.7
+662.16962 581.0
+676.66730 1284.2
+684.91638 567.9
+719.71906 595.2
+760.75934 556.3
+788.99408 573.1
+795.93109 718.5
+1044.07361 545.3
+1057.28308 625.7
+1198.03687 3121.4
+1213.18896 648.8
+1240.11230 625.2
+1322.87878 611.1
+1877.17358 933.8
+1879.12219 2128.8
+1879.61365 19880.0
+1880.03748 2164.9
+1880.58813 867.0
+1907.13123 7010.1
+S	3877	3877	400.7258246
+Z	2	799.604
+Z	3	1198.902
+100.19009 631.0
+101.97083 525.3
+108.58504 664.4
+109.60954 798.9
+112.41070 499.6
+114.43861 549.5
+117.13178 502.1
+120.65292 633.0
+120.66776 523.1
+121.77179 2272.6
+121.78253 547.7
+133.08548 1390.3
+135.64342 630.7
+137.97086 597.5
+143.00995 1435.1
+144.96584 605.5
+145.55376 554.8
+148.02452 772.0
+151.25227 666.4
+151.30022 559.9
+165.09045 964.9
+167.66881 674.1
+182.76881 929.2
+186.78004 548.3
+189.62894 596.9
+197.38707 590.6
+198.98793 783.7
+199.07251 30070.1
+199.26767 819.4
+199.33809 750.6
+199.36494 3646.7
+199.37700 650.0
+199.46330 1263.5
+200.02657 581.4
+200.07578 1507.5
+206.27768 549.9
+213.03999 478.6
+213.05412 27941.0
+214.05769 3462.0
+225.08852 1368.1
+227.12724 5936.2
+230.51291 710.5
+235.47943 554.7
+243.09827 1418.8
+247.25740 631.2
+271.15344 19774.6
+272.15668 1877.2
+292.19266 764.3
+296.29428 4437.0
+298.60938 867.1
+299.16122 172862.1
+299.42828 1370.3
+299.71375 1154.9
+300.16452 17470.2
+304.63214 604.4
+339.26895 766.2
+342.24448 718.2
+343.18854 912.0
+353.31915 935.8
+371.22702 610.0
+380.30124 821.6
+381.20407 642.7
+381.24265 1482.9
+381.27676 1715.0
+381.31424 3553.2
+381.37094 515.8
+383.27823 92595.0
+384.08136 779.2
+427.51025 726.6
+459.27667 1439.7
+469.91565 866.7
+476.78705 653.8
+503.30597 2023.0
+527.81049 592.8
+532.47626 2127.4
+547.33405 1213.7
+549.11993 750.0
+585.34753 551.7
+591.35760 757.0
+605.18579 607.0
+615.16797 680.1
+630.36090 921.4
+676.67706 1364.1
+684.46765 628.1
+795.93787 1118.4
+838.94678 589.8
+857.99860 714.7
+929.32928 587.6
+951.29401 671.7
+1010.80725 616.0
+1057.31226 1115.2
+1064.16833 568.3
+1176.15710 647.1
+1188.33044 985.9
+1198.06384 3782.8
+1202.17297 613.8
+1353.80164 743.3
+1496.43750 523.1
+1508.25049 666.2
+1578.60632 658.3
+S	3878	3878	515.7768246
+Z	3	1544.055
+Z	2	1029.706
+130.18956 757.4
+139.65683 1097.2
+144.04134 852.5
+145.67871 1118.7
+146.91005 1102.1
+153.60434 851.5
+173.19864 1036.2
+188.19435 1239.2
+188.21077 973.3
+188.21524 960.2
+188.23097 1223.7
+188.25612 1337.5
+188.27116 1070.3
+188.28610 1243.4
+188.29330 1012.1
+188.30254 1472.4
+188.33499 915.5
+188.34401 949.9
+188.36305 1327.4
+188.48779 910.3
+194.06639 871.0
+197.68303 939.2
+198.88861 945.6
+198.98749 1876.8
+199.26590 1022.8
+199.27884 1341.0
+199.29782 912.8
+199.32268 1081.7
+199.33781 880.8
+199.36296 2847.6
+199.37181 1798.1
+199.37930 2249.9
+199.39767 2801.0
+199.41240 1152.0
+199.44124 1377.0
+199.47664 1033.6
+199.49669 1316.0
+225.85641 979.3
+235.43626 957.8
+255.27536 1103.0
+266.61072 875.1
+276.80444 1017.1
+277.21570 2634.2
+280.16205 1044.1
+297.50031 1102.7
+321.24249 1609.4
+323.50320 1177.1
+328.48743 891.7
+350.28955 1314.5
+362.25909 1028.1
+371.22858 1303.7
+382.78860 939.3
+384.10266 1090.9
+401.67087 953.6
+403.23203 5084.0
+416.25513 949.7
+428.60129 1082.1
+429.26370 1823.2
+452.77686 7722.0
+460.28214 5348.4
+481.31439 1811.2
+482.63440 1324.5
+491.34259 1145.6
+532.45380 2686.3
+546.90808 1066.9
+548.33417 1160.1
+564.35236 1225.3
+590.04968 1078.0
+591.35565 1270.3
+592.36298 1305.1
+630.37341 1562.7
+676.68030 1964.0
+703.93665 1030.8
+784.52002 941.9
+795.94409 1534.2
+840.31799 1102.9
+849.58643 899.5
+904.54199 3709.4
+1020.75873 1052.1
+1057.30420 1263.9
+1072.74976 1047.0
+1140.27649 1006.2
+1198.01733 4857.7
+1316.74768 1135.5
+1488.32678 1470.2
+1612.53735 901.8
+1624.04395 974.7
+1681.65710 933.3
+1789.06714 966.6
+1872.96716 1293.5
+1876.12000 1103.8
+1879.09827 1952.6
+1879.63367 33343.0
+1880.20935 1621.9
+1880.64697 1135.6
+1906.66101 1049.6
+1907.09375 12603.5
+1930.50122 1843.0
+1993.18384 1419.6
+S	3879	3879	1907.5565746
+Z	3	5719.395
+Z	2	3813.265
+532.46576 2005.0
+542.83588 588.4
+544.48297 603.1
+630.44452 747.1
+733.14020 638.4
+774.95636 646.4
+778.05994 639.6
+830.69275 684.0
+1108.44922 695.4
+1130.88000 620.9
+1198.03748 3469.5
+1264.81262 599.9
+1362.71912 687.3
+1454.11035 612.2
+1777.04846 988.0
+1878.93066 1290.7
+1879.28833 2262.2
+1879.66272 19279.3
+1880.07361 1424.8
+1880.37256 1379.1
+1881.14380 633.4
+1904.15698 717.7
+1907.05774 7660.8
+1924.40735 643.7
+S	3881	3881	1880.00724127
+Z	2	3758.167
+Z	3	5636.746
+532.51617 2325.6
+550.94141 585.9
+630.39789 926.8
+642.40210 643.4
+676.69489 1265.0
+692.49298 700.2
+930.50867 575.9
+960.17853 627.6
+1019.68195 718.7
+1044.95239 725.9
+1105.07178 631.5
+1184.37231 665.7
+1198.15845 3408.2
+1274.88660 687.3
+1436.46643 662.2
+1525.39612 824.1
+1527.62598 594.4
+1870.34570 909.8
+1878.58765 694.5
+1878.97839 902.7
+1879.30823 2241.6
+1879.68591 19504.1
+1880.03174 1926.3
+1880.38696 931.6
+1880.68787 1065.7
+1906.09656 722.2
+1907.08923 7170.4
+1907.63452 915.5
+1930.59717 1193.3
+1946.60229 555.4
+S	3882	3882	515.8603246
+Z	2	1029.705
+131.19469 666.8
+133.14166 922.6
+137.28593 570.9
+150.65614 575.4
+160.75584 588.7
+165.74023 519.5
+167.30746 552.8
+171.64243 665.7
+174.89548 688.9
+177.11206 889.0
+180.89143 615.2
+188.20688 732.0
+188.26184 1503.6
+188.28687 2153.6
+188.29657 2426.3
+188.34506 752.0
+192.30563 526.8
+194.75282 684.6
+195.72499 566.4
+198.98962 819.4
+199.27496 719.0
+199.28459 856.6
+199.30229 889.3
+199.36192 720.9
+199.37199 2329.3
+199.38023 1343.7
+199.40001 967.3
+199.44693 623.4
+199.46266 476.3
+199.46942 819.0
+199.48076 557.9
+205.01874 553.1
+206.90224 639.7
+211.40613 594.7
+218.29605 567.9
+233.18945 2290.6
+268.88116 544.0
+271.45880 792.3
+277.21600 3597.2
+308.89499 930.8
+310.42197 570.1
+315.18085 1488.8
+321.23993 1375.3
+322.59500 538.2
+323.77579 594.6
+331.07266 590.4
+347.05829 547.6
+348.27194 498.5
+350.28842 686.0
+359.20572 835.9
+401.55136 752.7
+403.23169 6664.8
+404.23422 1244.1
+407.96576 644.3
+421.05750 594.4
+427.53305 720.4
+428.76178 929.5
+452.77634 6274.3
+460.28217 1873.2
+482.65005 1099.1
+516.73083 607.3
+532.56201 1953.3
+547.32806 1249.2
+548.33459 1159.1
+549.14319 746.9
+591.35596 907.5
+592.36029 970.4
+593.36554 808.2
+630.38934 767.4
+635.38666 1145.0
+652.40491 735.8
+676.67480 1259.2
+697.45081 625.8
+701.50421 895.1
+729.94000 683.0
+747.54431 738.2
+753.71057 612.6
+760.54260 789.3
+790.55450 713.2
+795.96143 833.9
+804.57440 1202.9
+827.36652 542.9
+879.08234 597.2
+892.62299 635.8
+904.54645 3743.0
+940.52435 661.5
+1027.84229 680.0
+1128.86792 573.6
+1177.55969 676.5
+1178.89502 603.3
+1198.25635 3384.4
+1273.63684 688.7
+1489.71960 700.5
+1800.43689 574.3
+1850.73962 598.0
+1870.28418 767.4
+1876.21814 947.0
+1879.26538 1655.8
+1879.63293 19923.6
+1879.98743 1967.8
+1907.10889 7398.9
+1907.43079 1209.7
+1919.12610 720.4
+1930.56189 1134.6
+1937.35754 714.4
+S	3883	3883	507.7835746
+Z	2	1013.719
+Z	3	1520.076
+145.58481 837.5
+154.56813 611.1
+169.49432 1012.3
+169.90723 660.8
+174.39313 690.3
+177.11206 885.9
+183.42702 735.6
+187.19283 673.8
+188.24867 819.4
+188.26285 1072.4
+188.27309 2201.7
+188.28310 1567.0
+188.29665 1558.8
+188.30469 1484.9
+188.31490 959.4
+188.85799 778.4
+193.33899 653.0
+196.49002 814.8
+199.28731 1364.3
+199.35393 667.9
+199.36267 2448.0
+199.37450 2551.4
+199.38577 1295.0
+199.39641 1044.5
+199.44116 948.3
+199.45964 880.5
+199.49518 722.3
+199.52261 668.5
+205.59692 706.2
+215.70847 726.3
+216.00395 725.8
+233.57468 748.1
+243.00993 776.6
+248.80963 632.9
+264.25079 770.7
+267.72781 798.5
+271.28110 963.6
+299.56357 1176.9
+308.90668 877.4
+314.99680 656.1
+315.66525 741.9
+333.97311 758.8
+350.16885 686.5
+376.76581 607.5
+385.85229 781.5
+406.24667 1151.5
+414.75940 1240.8
+421.25235 879.1
+427.54645 697.8
+444.26358 4269.6
+444.76437 2067.5
+446.30014 736.7
+459.27649 1362.8
+490.34088 40868.2
+490.84235 34713.1
+491.34396 1641.3
+532.55859 2269.2
+547.33215 2409.2
+572.15717 707.8
+591.35272 2434.1
+630.40668 785.5
+635.38110 1164.6
+676.65826 1269.6
+776.56946 2193.2
+777.56671 1000.8
+795.95203 1051.3
+887.51868 2217.0
+893.42310 860.8
+894.72278 831.6
+1111.56702 753.1
+1187.91772 1049.6
+1194.62048 753.7
+1198.24438 4235.2
+1385.61780 768.0
+1525.44910 935.7
+1601.77881 733.3
+1794.33691 737.3
+1801.63513 796.4
+1876.22510 1235.7
+1879.10254 1712.8
+1879.58142 25267.1
+1879.85950 3213.3
+1907.15442 9311.9
+1913.07495 870.2
+1930.62280 1423.3
+S	3885	3885	515.777241267
+Z	2	1029.707
+Z	3	1544.056
+134.06085 2620.9
+148.01064 2543.4
+150.44437 2225.2
+161.89902 2592.0
+165.09055 4045.6
+169.49533 3262.3
+169.86588 2607.2
+173.09583 2973.1
+177.11165 7376.7
+182.23654 2969.8
+188.16368 2934.8
+188.25113 5250.1
+188.26077 6055.2
+188.27089 8770.0
+188.27893 10084.2
+188.29257 8299.6
+188.30132 8372.5
+188.34505 2935.9
+198.98515 4355.8
+199.26640 3616.7
+199.30206 2726.0
+199.34241 3176.7
+199.35072 4165.4
+199.36397 9197.9
+199.37645 8000.6
+199.38911 4328.7
+199.39662 3200.3
+199.42732 3372.4
+209.11699 4609.8
+211.41196 2597.8
+214.11696 2740.4
+219.48955 2589.3
+221.13817 4705.4
+233.18959 30066.3
+235.13292 4080.0
+255.29288 2821.1
+265.16394 3702.5
+274.69556 2949.3
+277.21564 55910.0
+283.17599 4874.1
+303.23029 8553.3
+315.17932 17789.8
+321.24176 32291.9
+327.19971 5118.1
+328.20401 3315.1
+338.24014 3099.7
+341.63596 2690.0
+348.18314 3002.5
+350.29642 3293.8
+359.20547 7830.5
+371.22702 5187.8
+381.36743 3273.1
+403.23178 96432.8
+405.25626 2728.3
+415.25012 5813.9
+427.30411 7689.0
+428.76102 10045.4
+429.26300 4857.7
+446.73828 2760.2
+459.27737 8808.6
+460.28333 4991.4
+466.12289 2687.9
+468.83099 4252.4
+471.32993 13197.4
+482.66394 3127.0
+490.84134 2924.3
+491.34409 4138.5
+511.49911 2969.6
+532.57837 8117.5
+534.01630 3424.5
+547.32959 7520.2
+547.94476 2480.3
+548.33405 8695.4
+549.15961 2858.4
+582.25879 2543.3
+591.35626 6989.6
+592.36322 5782.4
+632.03113 2968.7
+635.38293 3804.5
+636.38611 4936.8
+657.53320 3177.8
+658.47852 4003.0
+672.80145 2707.9
+676.68365 4220.0
+702.50287 4676.2
+746.52765 7314.8
+760.54895 6515.7
+795.93774 4020.8
+804.57343 4285.6
+848.60254 3428.9
+902.08374 3255.3
+903.52185 2546.7
+930.25928 2445.2
+954.27051 2706.6
+970.74249 2813.9
+989.77808 2983.0
+1057.33301 3323.0
+1192.58118 2870.0
+1198.29968 15382.1
+1308.53796 3123.7
+1333.41663 2873.6
+1489.85046 2568.0
+1777.02246 4659.5
+1870.33557 3607.2
+1878.96716 11312.1
+1879.43250 18740.1
+1879.67761 86999.2
+1880.09546 7158.2
+1880.45471 8615.8
+1907.13391 35003.5
+1930.63086 5319.1
+S	3886	3886	576.8298246
+Z	3	1727.214
+Z	2	1151.812
+153.74519 847.6
+162.46394 877.3
+163.10992 970.7
+165.74174 1100.3
+171.67154 985.3
+177.11136 2217.6
+182.71025 807.8
+182.78870 1005.1
+185.16963 859.2
+188.21414 1158.9
+188.23076 972.1
+188.23471 925.6
+188.24631 1075.6
+188.26178 1152.1
+188.26994 1416.4
+188.29066 1492.5
+188.29677 1428.6
+188.31412 1070.4
+188.35298 1046.3
+193.04915 29230.8
+199.19504 758.1
+199.29553 1136.5
+199.34822 1439.5
+199.37135 3039.8
+199.38158 1414.4
+199.38901 2132.3
+199.39754 1714.4
+199.40735 1647.6
+199.41760 1241.8
+221.13791 1366.7
+233.18939 2590.4
+235.13237 3520.5
+237.86758 894.4
+238.67021 963.0
+241.98227 1003.9
+255.15808 2218.3
+255.29733 1101.2
+259.20374 1436.4
+271.44025 1071.1
+277.21564 35204.8
+278.21866 2580.1
+279.15637 1554.0
+286.49200 871.8
+287.82925 847.7
+292.18854 2988.2
+303.23151 2881.4
+309.18860 1564.1
+313.07077 1554.5
+315.17896 1160.2
+321.24179 7962.0
+323.18497 2700.0
+325.07010 7859.3
+341.06512 7184.8
+342.55957 949.5
+347.25491 1633.9
+348.28751 2652.9
+350.30331 1265.9
+352.77560 1002.5
+359.20715 3588.8
+365.26923 1047.4
+385.09012 8499.3
+403.23038 2774.8
+411.10703 3281.6
+427.30392 1463.3
+427.54916 963.2
+447.25754 25946.6
+448.26309 2216.5
+453.31906 1314.1
+471.33063 11243.5
+474.98676 822.5
+485.48874 950.9
+509.39600 927.4
+515.35614 9109.0
+529.37201 2923.8
+530.37616 1031.3
+532.54419 3319.7
+533.10626 31393.9
+541.37097 1848.6
+557.98944 1940.5
+559.32544 1616.8
+559.38214 354196.1
+560.07220 1631.5
+560.38544 22207.6
+560.53931 1213.3
+560.79431 2248.6
+563.26923 1189.8
+649.97864 962.0
+676.66724 1618.7
+690.90198 923.7
+731.15247 1183.6
+735.37073 891.0
+747.86243 2706.6
+748.36011 2323.0
+748.86389 1646.9
+748.92865 833.0
+775.33185 956.1
+795.92957 1272.9
+858.78009 956.4
+877.68390 851.8
+1057.29773 1474.9
+1198.22253 5494.0
+1711.57861 991.2
+1870.38708 1286.8
+1876.22205 1267.2
+1877.76794 970.9
+1879.09351 2718.4
+1879.60901 30879.3
+1880.15515 3483.4
+1882.86951 1157.7
+1896.26477 1136.1
+1907.16541 11017.2
+1930.67163 1700.8
+S	3887	3887	1880.0188246
+Z	3	5636.781
+Z	2	3758.19
+515.98877 667.8
+532.57336 1634.8
+560.07458 676.0
+656.60278 629.7
+676.65045 955.9
+842.16718 591.8
+905.90906 689.6
+1019.62585 694.5
+1049.35437 579.8
+1198.28296 3235.3
+1251.59509 620.0
+1351.57471 604.5
+1870.62891 760.4
+1879.57288 19449.2
+1879.84802 3233.3
+1907.15784 7569.1
+S	3889	3889	515.776991267
+Z	3	1544.056
+Z	2	1029.706
+133.08499 955.3
+135.30280 575.9
+140.91531 643.0
+145.31520 570.7
+147.46565 587.2
+148.70383 574.0
+162.77585 732.2
+166.62962 505.6
+170.76904 752.6
+177.11111 936.8
+184.59958 579.5
+186.34230 549.2
+186.75697 664.7
+188.19968 623.7
+188.22359 824.1
+188.23917 835.9
+188.25089 855.5
+188.26445 698.4
+188.29361 632.9
+188.31081 1092.5
+188.32573 807.4
+188.33519 677.3
+188.34248 527.6
+188.35390 711.4
+188.36217 750.1
+198.98628 973.9
+199.28664 956.9
+199.30225 621.5
+199.32574 931.4
+199.34753 835.4
+199.35759 1078.6
+199.37100 1721.7
+199.38568 1407.3
+199.39867 1928.3
+199.41286 957.2
+199.43393 585.2
+199.46877 687.2
+199.48550 1019.5
+209.85669 569.5
+231.90741 593.5
+233.18971 2996.9
+257.82053 609.2
+265.16248 708.6
+268.21204 511.5
+271.27344 898.4
+271.42648 669.6
+275.23526 671.9
+277.21545 6648.6
+284.64038 600.6
+305.08636 620.8
+315.17899 1703.3
+321.24130 2298.7
+323.39682 544.5
+342.24197 804.1
+350.30392 634.0
+359.20605 1093.2
+364.62360 535.4
+364.66049 602.6
+371.22742 1099.0
+403.23151 9839.5
+409.72287 707.7
+423.14932 596.7
+424.11526 581.1
+429.26257 1075.5
+430.76498 615.5
+452.77533 3744.8
+459.27908 1044.7
+460.27899 801.7
+471.33115 1011.6
+532.61621 2435.6
+541.96442 683.9
+547.32941 1234.7
+548.33057 776.7
+549.10101 801.7
+550.53992 618.0
+591.36035 1140.9
+636.38135 884.0
+652.40625 1020.0
+674.24786 598.9
+676.69690 971.1
+702.50610 742.2
+731.05914 689.4
+746.54608 777.6
+760.55115 738.8
+830.90759 648.4
+857.96979 914.9
+904.54150 1452.0
+925.12531 558.8
+1023.51202 616.4
+1125.70129 531.2
+1163.62561 586.4
+1198.38550 3329.4
+1225.60022 715.0
+1277.51160 762.3
+1455.87061 590.9
+1769.17371 605.9
+1876.15894 697.9
+1877.62366 630.9
+1878.37402 738.2
+1878.76648 964.7
+1879.38452 6254.7
+1879.69104 18157.2
+1880.00403 4162.5
+1880.26294 1817.8
+1880.64001 1460.5
+1907.16357 7433.8
+1919.14563 782.4
+1930.43140 1058.8
+1941.00708 674.5
+S	3890	3890	1880.10599127
+Z	3	5637.043
+Z	2	3758.364
+532.55457 2010.6
+614.81873 682.7
+630.37335 1028.4
+665.73975 642.3
+676.67047 889.2
+775.83392 524.7
+795.94995 808.5
+1013.76892 582.8
+1083.37634 722.1
+1106.93335 637.5
+1198.24695 3347.4
+1252.80542 585.1
+1635.23499 608.1
+1652.90662 644.3
+1696.27441 654.2
+1878.37805 1133.2
+1879.61377 18782.4
+1880.83313 1130.6
+1881.19006 686.6
+1907.14490 7219.2
+S	3891	3891	577.552407933
+Z	3	1729.382
+Z	2	1153.257
+146.92427 1001.7
+148.08301 1398.8
+156.03618 1095.0
+163.98071 1083.9
+165.74307 1278.4
+181.85442 1128.8
+188.26601 1774.0
+188.27747 2264.4
+188.28682 2625.3
+188.29762 2282.0
+188.30850 1750.6
+188.31941 1367.5
+188.32875 1309.4
+188.41940 1245.9
+193.04915 49448.4
+194.05266 4268.7
+194.41397 1018.4
+198.95337 1219.7
+198.98572 1459.3
+199.27744 1650.1
+199.30779 1352.1
+199.34343 1656.7
+199.36592 1732.9
+199.37595 4116.7
+199.38345 4432.3
+199.48090 1632.9
+215.44914 1523.5
+231.63188 1254.5
+233.18892 2668.3
+235.13170 2600.3
+260.74438 1399.3
+277.21570 24039.0
+278.21951 6530.8
+283.96088 1079.3
+288.33463 1408.4
+292.18991 1230.4
+293.19479 2506.4
+307.54980 1024.3
+313.07089 1256.2
+321.24149 4678.0
+323.18594 1904.9
+325.06995 13681.5
+326.07361 2134.8
+330.91501 1107.7
+337.78387 1055.7
+341.06467 11745.9
+350.29587 2038.7
+359.20428 2536.7
+367.08081 2272.2
+385.09055 12064.3
+386.09232 1534.4
+404.55142 1028.9
+411.10678 4285.8
+412.10623 1530.9
+427.30179 1151.5
+443.33383 1082.6
+447.25766 16640.1
+448.26038 4899.7
+471.33026 7671.7
+472.33264 3359.2
+482.65930 1409.0
+506.28836 1076.6
+515.35718 5181.8
+516.35944 2306.5
+528.17645 1094.0
+532.55176 3585.2
+533.10638 45354.6
+534.10931 11484.5
+544.18311 1113.8
+547.36072 2306.9
+549.15436 1558.5
+552.47839 1296.1
+557.97437 1375.7
+558.68481 1392.8
+559.38232 292497.6
+560.38556 87357.0
+560.80267 1341.9
+630.41193 1327.4
+675.38757 1087.5
+676.66516 2554.9
+731.11389 1750.8
+736.80420 1218.7
+747.86395 1902.0
+748.36017 2653.9
+795.93805 1788.6
+808.49957 1407.5
+957.36719 1233.4
+1079.50452 1207.2
+1175.63867 1387.1
+1198.23889 6277.8
+1267.72998 1331.8
+1411.81616 1071.9
+1601.56189 1337.6
+1784.78259 1149.2
+1878.50732 1647.0
+1879.32056 5221.3
+1879.60730 39534.8
+1907.15198 15197.7
+1930.62085 2064.4
+S	3893	3893	1880.02924127
+Z	2	3758.211
+Z	3	5636.812
+510.02029 657.0
+521.85065 594.1
+532.58044 1601.7
+644.97595 617.2
+648.98431 719.5
+662.69476 616.7
+677.86884 652.1
+695.03607 635.3
+795.93750 894.3
+810.45282 666.7
+874.43524 762.1
+901.61438 734.0
+928.27502 650.5
+1198.29797 2844.1
+1245.27319 762.6
+1246.23267 638.8
+1411.06494 674.5
+1631.94775 747.8
+1879.38757 6720.9
+1879.64282 17179.1
+1880.14343 4098.4
+1883.36328 634.8
+1907.13818 7818.5
+1919.18567 1304.9
+1919.93237 739.1
+1930.57849 1187.4
+S	3894	3894	577.552407933
+Z	2	1153.257
+Z	3	1729.382
+146.95520 1111.8
+160.97856 1209.1
+161.00308 994.3
+164.65642 1136.3
+165.74426 1398.8
+166.08882 1202.1
+171.64209 1251.4
+172.42171 1030.2
+176.03479 1172.8
+177.11206 2218.8
+182.26593 1160.8
+187.18269 1176.3
+188.20457 1097.1
+188.26329 3573.0
+188.28212 4181.7
+188.29202 3591.2
+188.30341 3080.6
+188.31267 3120.0
+188.32596 1857.0
+188.35066 1218.5
+193.04913 38667.0
+194.05263 2307.1
+198.98682 1903.1
+199.08557 1001.5
+199.29137 1504.7
+199.34322 1497.2
+199.35704 2376.5
+199.37289 6199.1
+199.38324 2149.5
+199.38846 2286.0
+199.47127 1947.7
+211.63458 1015.4
+215.66098 1357.1
+221.13847 1739.8
+221.62717 1163.2
+233.18950 2123.2
+235.13225 1473.0
+239.18851 1011.1
+252.07474 1201.3
+258.09174 1182.2
+258.59738 1179.3
+261.06570 1132.1
+271.44293 1575.6
+277.21573 22447.9
+277.99252 1069.8
+278.21893 4703.0
+292.19107 1756.8
+293.19250 2073.0
+303.23120 2328.6
+315.17249 1470.6
+315.52585 1008.5
+321.24176 4792.0
+323.18362 1878.4
+324.13751 1294.3
+325.06952 8646.9
+338.98859 1278.7
+341.06473 8587.3
+343.08206 1127.1
+348.29077 2340.9
+359.20557 2577.5
+363.46524 1159.6
+367.07852 1712.2
+370.86328 1221.3
+385.09048 8504.8
+386.09448 1143.4
+403.23026 1312.2
+411.10626 3246.1
+428.36185 1106.3
+447.25748 13679.8
+448.25964 5620.0
+471.33093 6824.6
+472.33350 1842.5
+472.94446 1025.6
+501.98322 1171.5
+515.35657 5713.1
+516.35883 1739.6
+532.60870 3705.0
+533.10645 37455.6
+534.10950 8741.7
+541.37201 1777.4
+559.38226 264431.6
+560.38556 91878.4
+563.27319 1603.3
+567.69788 1072.9
+576.42755 1320.9
+676.65070 2055.0
+712.72308 1219.5
+747.85748 2242.8
+748.36438 2957.4
+790.11499 1099.7
+795.93042 1968.5
+829.93701 1259.2
+993.67212 1260.0
+1087.54126 1273.7
+1088.25317 1165.5
+1198.36938 6333.9
+1411.92542 1260.6
+1489.20337 1468.6
+1525.35608 1200.3
+1605.35193 1224.2
+1709.48804 1426.5
+1768.82605 1238.4
+1825.26831 1364.8
+1860.83301 1240.0
+1877.97107 1426.2
+1878.70715 1693.8
+1879.59473 38005.6
+1879.86719 4258.0
+1880.29321 2608.3
+1903.02417 1090.0
+1907.12378 14215.4
+1919.21619 1542.7
+1930.47485 1708.4
+S	3895	3895	515.776407933
+Z	2	1029.705
+Z	3	1544.054
+133.15677 918.6
+134.77348 560.8
+138.75705 562.7
+145.28329 602.9
+159.10042 632.2
+159.91751 539.7
+165.74500 741.8
+172.59401 478.2
+173.21686 469.5
+173.77155 531.2
+174.31406 678.3
+177.11169 1706.3
+185.12755 556.1
+188.24753 687.6
+188.26666 930.5
+188.27179 886.0
+188.28812 1149.1
+188.29739 1214.4
+188.30536 915.4
+188.32034 848.2
+198.98524 1023.4
+199.27565 1363.2
+199.35397 1464.0
+199.37421 2773.3
+199.39468 1066.9
+199.47238 791.5
+221.13739 807.4
+227.17801 547.8
+229.74477 538.3
+233.19005 2823.0
+259.07315 594.5
+271.28513 710.9
+271.44333 640.7
+277.21606 5402.6
+307.69318 600.5
+308.88028 952.2
+312.20233 522.1
+315.18002 1258.0
+321.24283 3419.7
+327.20215 1113.3
+339.93497 517.5
+359.20700 1610.0
+368.12894 594.6
+371.22446 761.1
+403.23166 8959.9
+415.25064 1175.7
+416.25595 827.6
+427.30273 755.4
+427.51385 702.1
+428.76224 1374.1
+429.26508 1173.7
+449.41519 527.6
+452.77744 1628.3
+459.27948 1625.1
+460.28156 763.2
+471.33255 1138.2
+490.84341 730.5
+491.49307 625.6
+496.39163 1418.4
+500.63919 568.5
+503.30692 701.3
+523.79382 558.2
+532.62256 1723.2
+547.33142 1820.3
+548.33728 781.9
+549.33496 724.2
+578.63586 559.8
+591.35767 907.9
+592.36072 1138.4
+604.38403 540.3
+618.12598 604.7
+635.38507 734.6
+636.38361 988.4
+663.96271 679.3
+676.66156 1424.5
+679.41162 667.1
+680.41742 740.6
+702.50427 952.8
+716.52289 808.5
+750.68304 597.2
+760.54413 900.5
+795.93774 714.2
+801.36224 600.2
+804.57733 856.6
+814.90173 556.8
+848.75562 786.6
+849.07629 580.6
+1029.24072 670.5
+1139.83179 580.0
+1165.98340 634.9
+1198.39160 3382.0
+1277.05005 631.5
+1588.72388 760.1
+1685.73315 655.9
+1770.79675 618.2
+1879.21667 2618.3
+1879.57947 19958.5
+1879.93176 2294.6
+1880.54248 660.1
+1880.93945 833.0
+1881.36072 603.9
+1883.34912 720.8
+1907.09167 7113.4
+1907.65747 700.3
+1930.47803 826.1
+1952.53430 566.6
+S	3897	3897	1880.05824127
+Z	3	5636.899
+Z	2	3758.269
+517.49701 653.7
+520.98505 627.6
+532.59692 2270.6
+676.63354 820.1
+731.05817 982.0
+741.96765 651.4
+743.44983 579.9
+795.94379 1059.2
+927.78900 677.5
+978.92688 678.9
+1029.94592 616.2
+1050.56799 697.7
+1188.20508 950.0
+1198.33228 2793.0
+1481.76331 700.6
+1501.35425 702.9
+1526.89050 687.1
+1555.46106 670.3
+1878.67883 1044.3
+1879.65088 19213.8
+1880.04785 2641.8
+1880.59448 1650.2
+1880.88123 713.5
+1886.98804 687.5
+1907.11804 7050.2
+S	3898	3898	576.8298246
+Z	2	1151.812
+Z	3	1727.214
+149.74098 861.5
+157.59845 1094.8
+164.99907 809.6
+169.48997 896.3
+177.11137 1664.9
+182.77669 1107.2
+188.21414 1093.4
+188.26823 2651.3
+188.29050 3153.8
+188.31531 2176.4
+188.33260 1396.3
+193.04890 17281.5
+198.98917 1137.7
+199.34581 1136.8
+199.35719 2150.0
+199.37402 3670.9
+199.38441 1406.2
+199.39171 1175.3
+199.47250 1132.8
+221.13753 1033.3
+223.04723 836.9
+224.77374 840.8
+233.18974 3425.3
+233.56982 915.9
+235.13225 2227.3
+255.15814 2182.8
+259.20337 1178.7
+265.25598 887.3
+271.28452 1181.0
+277.21552 23161.6
+278.21967 1497.7
+279.15833 1000.3
+283.08121 877.0
+292.18994 8177.5
+292.88687 880.3
+303.23087 2615.0
+307.39951 787.0
+321.24112 6500.3
+323.18488 1531.3
+325.07025 3485.3
+336.21777 1468.3
+341.06464 3754.3
+342.26318 1049.0
+348.28751 1462.9
+358.29492 775.7
+359.20462 2473.4
+380.24139 1282.9
+385.09091 4714.6
+385.41449 801.3
+403.23267 1967.3
+407.56631 883.8
+411.10733 1317.7
+417.86548 925.4
+427.29977 989.5
+427.53360 1123.1
+447.25751 18613.4
+464.00623 838.0
+471.33057 7446.3
+489.57828 932.8
+515.35596 6297.9
+529.37213 2257.4
+530.37537 1269.5
+532.57617 2776.7
+533.10632 14785.3
+539.35278 1474.1
+541.37073 2389.2
+549.13947 954.0
+556.78326 736.0
+557.39557 1148.2
+558.10144 821.9
+558.69061 1028.1
+559.32324 1195.6
+559.38208 266282.4
+560.38574 13456.2
+560.78870 1191.7
+597.54956 956.0
+675.26709 951.0
+731.09900 1173.0
+747.85992 3647.2
+748.36261 3385.9
+748.85504 894.2
+795.94476 1904.0
+955.66351 875.0
+986.22894 843.3
+1021.09430 1189.9
+1057.30884 1049.2
+1140.29651 903.0
+1198.29224 4811.6
+1304.32947 975.9
+1501.33813 942.6
+1592.45581 1100.6
+1627.01257 906.1
+1655.66821 906.6
+1878.00220 1586.4
+1878.44312 1088.4
+1879.23315 4234.8
+1879.37683 4367.3
+1879.66040 28274.0
+1880.07764 3492.4
+1880.31836 2538.9
+1880.88318 1029.5
+1881.72571 1385.6
+1907.11169 11014.3
+1930.51050 1475.2
+1957.31775 751.2
+S	3899	3899	515.777407933
+Z	3	1544.057
+Z	2	1029.707
+133.08542 881.1
+157.56339 623.7
+166.83447 522.0
+167.13663 553.1
+167.38986 536.4
+169.49237 560.9
+177.11174 1603.7
+188.26131 623.9
+188.26917 1298.6
+188.28044 1093.8
+188.28711 1037.4
+188.29625 1301.5
+188.30597 1046.2
+188.31259 828.5
+188.33719 616.8
+196.40698 582.1
+198.98547 717.6
+199.29755 852.3
+199.31407 540.8
+199.35428 803.6
+199.37442 1739.3
+199.38350 1108.8
+199.39525 1929.6
+199.41464 1037.0
+199.42332 498.3
+199.45073 677.2
+199.46948 518.5
+221.13786 723.9
+233.18916 2426.3
+257.10239 514.3
+257.11124 545.9
+258.92276 623.6
+277.21558 4908.8
+294.56644 602.1
+315.18094 1102.2
+321.24225 2808.9
+327.20007 766.3
+335.02863 664.0
+341.06204 690.7
+353.20993 675.2
+359.20572 952.9
+368.20407 679.4
+371.22708 933.8
+372.22974 827.6
+396.41269 559.4
+398.24493 587.9
+399.47879 592.6
+403.23172 10182.5
+415.25266 1506.2
+427.30603 765.6
+428.76389 1019.7
+429.26157 832.0
+458.71655 686.5
+459.27811 1633.4
+460.28363 857.6
+471.33026 1318.6
+478.38000 1011.6
+490.19162 645.2
+490.84305 774.3
+491.34430 870.5
+496.39117 3235.2
+523.50629 549.6
+532.58307 1682.6
+546.20599 499.6
+547.33270 1722.5
+548.32788 883.5
+559.25171 558.9
+591.35895 1284.0
+592.36230 1374.8
+626.45386 560.8
+631.36481 591.7
+636.38538 1262.4
+637.39417 661.2
+658.48090 898.6
+676.59650 566.7
+676.67444 918.9
+679.40900 1089.5
+680.41516 1020.8
+689.99493 615.0
+702.50452 1180.5
+710.28705 644.8
+724.43677 930.3
+795.94110 737.6
+848.59283 790.2
+863.65405 530.0
+1023.14447 529.5
+1181.42932 541.9
+1198.29956 3485.0
+1877.86682 763.1
+1878.62561 960.0
+1879.63757 19944.3
+1879.92212 3095.4
+1880.31604 1023.8
+1880.68677 959.1
+1907.05896 7218.7
+1930.57642 1015.3
+1974.33337 587.8
+S	3901	3901	1880.01340793
+Z	3	5636.765
+Z	2	3758.179
+532.60144 2107.4
+630.39484 828.4
+673.24323 638.0
+676.64050 798.5
+731.11322 716.0
+768.15027 653.0
+795.94360 972.3
+799.67419 613.2
+848.83807 753.8
+858.06195 875.5
+905.45728 576.7
+1094.85132 652.5
+1187.96411 672.5
+1198.34546 3347.3
+1686.82349 606.5
+1777.01575 1000.9
+1865.33374 679.2
+1878.34961 900.6
+1878.61487 909.2
+1878.86414 1228.7
+1879.11572 1578.4
+1879.53430 19346.7
+1879.93054 1802.2
+1880.19128 1533.3
+1880.52173 808.5
+1907.17126 7282.8
+1930.60681 707.1
+S	3902	3902	576.829407933
+Z	2	1151.811
+Z	3	1727.213
+147.32657 841.4
+157.59933 988.1
+169.21683 754.6
+169.34160 830.0
+171.39871 684.3
+171.80084 696.2
+175.72112 722.5
+177.11142 1553.3
+188.71854 710.7
+193.04913 7928.5
+193.12206 1414.1
+198.99280 1546.1
+199.26413 920.3
+199.27255 893.2
+199.32484 885.2
+199.34117 900.4
+199.36234 2514.9
+199.37167 2393.1
+199.38843 1929.0
+209.11632 1073.8
+213.59534 726.3
+233.18915 3801.5
+233.52336 793.6
+233.56638 1093.8
+235.13219 3135.5
+235.94794 843.5
+237.32527 703.6
+255.15862 2436.8
+255.28378 788.6
+259.12964 747.4
+259.20670 1472.8
+277.21570 31735.7
+278.21796 2113.5
+279.15717 1394.4
+280.47296 719.5
+292.19052 5989.8
+298.18372 964.5
+303.23148 2279.2
+303.85294 769.5
+309.19046 943.6
+313.55481 959.1
+321.24170 8836.8
+322.44632 690.2
+323.18433 2179.8
+325.06976 1669.3
+325.40543 782.5
+335.90765 970.6
+336.09372 620.1
+336.21539 1077.6
+339.85211 952.4
+341.06342 1564.6
+343.21042 1061.5
+348.28876 1904.3
+353.21375 1082.7
+354.84039 859.9
+359.20593 3347.7
+365.26886 1121.5
+366.33685 713.8
+368.67209 703.8
+385.08963 2121.1
+403.23151 2320.8
+420.84851 626.9
+420.86575 634.2
+421.17764 928.3
+427.30399 1263.8
+427.53632 822.4
+447.25769 24745.6
+448.26175 2005.6
+453.32016 1389.2
+461.39609 713.8
+471.33026 10115.3
+484.79590 779.6
+485.01868 789.5
+499.20325 692.3
+515.35571 9392.0
+516.35577 979.9
+529.37762 1187.7
+532.60431 2016.9
+533.10663 8291.2
+535.85706 881.9
+541.37183 2664.8
+549.14038 1004.9
+557.98077 1894.9
+558.35565 698.3
+558.69513 1373.3
+559.33282 2101.0
+559.38220 342712.4
+560.07166 1539.7
+560.38556 21663.5
+560.54724 721.6
+560.79254 1746.6
+562.94678 776.2
+595.31769 734.7
+618.94818 910.5
+630.39264 927.5
+676.66742 1584.7
+747.86090 4954.3
+748.36157 2910.4
+748.86731 1594.2
+795.97137 1133.1
+881.86835 1015.0
+950.91486 845.3
+1129.90674 781.1
+1198.36060 4003.1
+1235.56494 1001.8
+1471.41687 750.5
+1525.37512 1003.0
+1531.69324 736.0
+1551.57166 786.4
+1761.15515 745.3
+1776.99036 993.7
+1869.97070 1021.8
+1876.67859 774.2
+1878.70068 1160.7
+1879.14429 2190.1
+1879.61755 26077.7
+1880.07629 1833.6
+1880.48621 1057.2
+1881.00781 1630.0
+1907.15564 9961.8
+1930.55981 1477.2
+S	3903	3903	471.750991267
+Z	3	1411.978
+Z	2	941.654
+121.76466 3233.1
+121.77001 9487.1
+122.16274 2381.5
+125.96346 2636.0
+131.11610 2531.0
+133.08498 3347.6
+146.09050 2549.6
+154.20680 3251.7
+157.60391 4245.8
+160.84093 2551.1
+165.09065 9868.8
+169.49709 3946.7
+171.65442 3361.0
+172.49651 3224.1
+177.11153 7575.2
+178.08789 2844.3
+178.44247 2706.2
+182.78488 3479.2
+189.75626 2823.0
+197.70042 3341.0
+198.99036 2634.8
+199.31926 3178.4
+199.34009 7221.7
+199.35626 7304.0
+199.36589 10839.1
+199.37802 7387.4
+199.40088 3193.4
+199.46391 3583.9
+199.96252 2550.4
+200.44623 2574.0
+209.11710 4083.5
+211.84393 3029.4
+212.18069 3005.0
+233.18948 6806.1
+233.57552 3128.8
+236.75117 2480.4
+254.55426 2577.2
+258.18512 2630.5
+271.15445 6545.2
+274.71878 2921.1
+277.21558 48464.5
+280.01697 2609.2
+280.18320 2546.9
+291.23172 4135.3
+293.75607 2412.5
+293.76526 2181.3
+296.08603 2679.3
+312.71423 2805.2
+315.17877 6998.6
+315.85510 2787.0
+320.39090 3003.7
+321.24127 7447.4
+342.27661 4174.6
+356.03296 3551.3
+359.20563 164907.4
+360.21078 2919.0
+371.22562 3307.9
+372.23035 3428.2
+381.36017 3042.6
+385.23734 3840.5
+385.73865 3393.1
+386.17078 2902.2
+408.75015 89627.2
+415.25302 5260.7
+417.25961 2531.9
+427.30399 5189.8
+436.43478 3477.9
+482.48029 3116.7
+484.64191 2711.9
+503.30713 4030.7
+505.30725 3345.2
+520.32831 3725.5
+532.58386 10003.9
+547.32831 3896.8
+564.35547 6700.8
+567.43292 2450.4
+608.38293 5740.2
+652.41272 3251.1
+673.50879 3504.3
+676.65900 5647.7
+778.73859 2642.2
+795.95483 4483.9
+816.49292 74294.0
+817.49786 4444.8
+858.06860 3080.6
+919.94635 2856.6
+957.66644 2813.5
+978.00342 2600.6
+979.20117 2831.2
+1026.91858 3007.0
+1057.28516 4870.2
+1189.89661 2249.8
+1198.30750 15191.2
+1268.07471 2910.6
+1311.88867 3668.5
+1505.46460 3275.3
+1525.42969 3541.5
+1560.51257 2646.0
+1730.46326 2434.6
+1731.48950 2455.2
+1860.07971 3804.0
+1872.70178 3217.3
+1879.06262 4778.7
+1879.28137 5055.5
+1879.59363 92823.4
+1879.94312 6297.0
+1880.15344 4046.3
+1880.43469 3738.9
+1880.68530 3567.6
+1881.05188 3024.3
+S	3905	3905	1880.09699127
+Z	2	3758.346
+Z	3	5637.016
+519.79108 774.3
+522.53870 672.5
+532.50262 1757.6
+536.09613 662.4
+537.07825 681.2
+555.91113 699.4
+602.29077 612.5
+653.36145 659.0
+656.22308 650.9
+676.67578 807.1
+713.94800 621.1
+731.15649 1023.2
+778.60095 627.9
+794.60876 702.9
+795.96222 1032.9
+968.97656 661.3
+1198.11987 3178.8
+1341.83826 542.9
+1525.46094 1066.7
+1649.93140 684.6
+1878.33350 852.5
+1879.24548 1896.6
+1879.64490 18499.9
+1880.02759 2471.3
+1880.42175 968.2
+1881.94312 1249.1
+1907.17908 7432.2
+S	3906	3906	485.775241267
+Z	2	969.703
+Z	3	1454.05
+120.74616 996.7
+121.76513 1484.3
+121.77122 4330.9
+121.77696 2183.8
+128.20355 1057.0
+142.36717 1094.8
+144.60202 974.5
+159.72243 1115.7
+160.76930 1155.2
+165.74420 1336.0
+167.25710 1091.7
+171.65070 1286.0
+188.25238 1318.4
+188.27179 1914.5
+188.28853 1835.9
+188.30984 1376.3
+188.32092 1713.4
+188.34207 1361.2
+188.35069 1529.3
+199.34955 2009.8
+199.36813 5140.8
+199.38008 2204.5
+199.38931 2310.4
+199.39958 2332.6
+199.41069 1773.4
+199.46748 1583.1
+199.48891 1447.7
+199.49727 1242.8
+234.94867 1044.5
+238.56281 1085.8
+240.83293 1096.6
+255.28175 1171.6
+262.57959 1136.7
+271.31183 1142.3
+271.46643 1527.3
+288.52673 1256.2
+289.21613 2838.0
+290.21774 1039.1
+336.90228 1208.9
+359.20575 26287.0
+360.20908 2938.3
+384.23474 2286.2
+409.15921 1178.4
+415.25656 2216.8
+421.82355 1176.1
+422.24982 1924.8
+463.52298 1138.9
+466.38138 4329.6
+467.31882 2589.4
+468.32794 52664.9
+468.83414 1667.8
+503.29852 1349.3
+532.48761 4188.0
+547.32562 1599.0
+549.14307 1458.0
+591.35522 1696.8
+616.52686 1134.1
+676.65765 2418.7
+701.50555 1599.7
+795.28058 1128.3
+795.94763 1848.9
+877.72607 1149.7
+1057.26917 2104.0
+1198.09155 6309.2
+1489.60571 1319.3
+1618.42993 1189.1
+1667.37537 1507.3
+1860.13440 1322.8
+1870.66479 1220.5
+1878.63098 1522.2
+1878.96960 1906.6
+1879.58252 38493.2
+1879.89136 3395.6
+1880.22986 1810.7
+1883.70691 1115.2
+1907.18884 13905.1
+1907.54321 1330.2
+1930.61584 1619.7
+S	3907	3907	1907.64140793
+Z	3	5719.649
+Z	2	3813.435
+532.52039 2234.2
+549.18671 984.9
+594.12433 565.1
+630.44250 1042.2
+676.67151 820.0
+773.43701 639.4
+793.68945 646.7
+795.95612 1097.2
+893.38855 723.0
+994.37567 577.0
+1057.30408 948.0
+1114.54053 554.3
+1162.46436 660.2
+1198.16431 3427.8
+1399.37915 608.6
+1400.87158 721.0
+1525.48889 821.2
+1727.28198 649.1
+1776.99243 913.2
+1796.34998 614.9
+1870.38525 761.7
+1878.71802 994.4
+1879.05334 1733.4
+1879.27600 3033.7
+1879.63562 18942.4
+1879.99817 3130.6
+1880.27393 688.7
+1907.18176 7084.5
+1919.17725 869.5
+1930.73083 670.1
+1934.60535 625.2
+S	3909	3909	1879.99999127
+Z	2	3758.152
+Z	3	5636.725
+532.47839 752.4
+532.50769 1378.6
+630.41278 987.9
+676.66284 775.0
+795.95184 1023.2
+841.91943 664.2
+867.57697 795.8
+1057.29321 999.7
+1153.00757 606.7
+1198.13489 3026.4
+1235.35645 697.4
+1389.10352 640.5
+1870.22217 840.7
+1878.34668 1469.7
+1878.65967 621.9
+1879.06421 1562.0
+1879.60022 19441.5
+1879.84961 2996.1
+1880.15125 1822.1
+1880.47461 1175.6
+1880.82678 825.0
+1881.12439 1242.7
+1907.20642 7354.4
+S	3910	3910	1907.6388246
+Z	2	3813.43
+Z	3	5719.641
+532.52673 1891.8
+537.13129 672.5
+565.88623 600.0
+583.39966 696.3
+607.03149 562.7
+639.03888 705.0
+676.69141 890.2
+692.02997 718.7
+1019.60437 750.6
+1057.31335 855.6
+1093.89404 617.7
+1094.66296 656.6
+1198.18042 3448.7
+1643.31409 695.4
+1776.91016 1024.5
+1778.48157 619.6
+1870.58203 621.0
+1877.30542 638.6
+1878.39502 730.9
+1879.39124 3687.1
+1879.67859 18949.7
+1880.62134 738.5
+1880.94995 756.2
+1881.86816 839.0
+1907.14624 7101.2
+1919.14771 655.5
+1926.44104 623.7
+1930.50549 793.4
+S	3911	3911	471.7505746
+Z	2	941.653
+Z	3	1411.977
+117.96740 2572.4
+120.56410 2624.6
+121.76969 10449.5
+124.60419 2208.7
+128.94760 2249.4
+133.08534 3183.9
+133.13579 3678.2
+135.16498 2295.7
+135.16794 2204.4
+137.28703 2375.6
+143.84180 2099.7
+146.97841 2291.7
+165.09053 8161.6
+165.74184 3262.9
+169.49223 2675.6
+175.48694 1951.6
+177.11198 6282.2
+198.98801 3700.2
+199.25877 2184.8
+199.26714 2368.3
+199.34155 3482.6
+199.35468 10530.8
+199.36491 7440.4
+199.37350 3239.1
+199.38239 3831.4
+199.39561 3112.2
+199.45511 2103.1
+199.46388 3254.1
+203.91013 2291.2
+209.11752 2430.4
+213.02272 2228.4
+219.15897 2365.5
+220.66206 2267.2
+220.95084 2622.2
+233.18930 4273.6
+235.13416 2644.3
+256.22983 3149.1
+266.89078 2483.6
+268.36984 2507.8
+271.15363 9205.2
+271.21060 2351.9
+274.51620 2162.4
+277.21558 47340.3
+285.15039 2612.9
+296.55533 2500.8
+308.89105 2953.7
+315.17868 7245.5
+318.51093 2944.9
+321.24185 7413.5
+322.64227 2549.3
+359.20557 130264.9
+360.94556 3158.9
+376.79651 2481.9
+381.35022 1993.5
+385.23621 4751.1
+408.75015 51902.8
+416.25586 2965.8
+427.30286 2689.8
+445.19299 3170.2
+451.31830 2201.7
+459.27863 3059.8
+468.40936 2391.9
+503.30624 8486.6
+505.30716 2592.7
+518.54468 2057.1
+520.33392 2909.7
+525.44897 2127.6
+527.84741 2393.3
+532.54272 7825.5
+549.13678 3063.4
+564.35681 4861.5
+608.38525 3427.6
+676.67010 3553.8
+680.54675 2496.7
+689.55005 2327.1
+694.75745 2346.2
+728.05768 2632.9
+741.89233 2509.5
+760.36780 2664.2
+766.52039 2652.6
+795.94342 4489.6
+816.49341 49067.0
+817.49780 4606.4
+883.28973 2950.6
+883.38916 2117.1
+987.92096 2215.6
+1073.86121 2355.0
+1142.07983 2331.6
+1197.58301 2373.1
+1198.21118 12815.8
+1303.99084 2720.7
+1429.69153 2020.8
+1479.21362 2191.3
+1652.52527 2727.2
+1876.49890 3461.7
+1878.60632 4003.5
+1878.97864 4945.7
+1879.33411 12292.0
+1879.61841 79784.2
+1879.91943 15144.8
+1880.29810 5386.8
+1898.26697 2435.6
+S	3913	3913	1880.04124127
+Z	2	3758.235
+Z	3	5636.848
+532.54065 1943.0
+584.70593 683.7
+619.29871 571.9
+620.53552 617.6
+630.44263 688.8
+754.17969 654.5
+779.10760 640.0
+795.93726 877.2
+858.08484 831.2
+951.99957 673.9
+982.03363 633.5
+1019.69946 747.8
+1021.96130 709.1
+1081.63660 648.4
+1188.28564 745.1
+1198.21277 3429.3
+1202.90991 692.7
+1525.50708 867.5
+1877.25256 623.2
+1878.19299 657.9
+1878.91016 713.0
+1879.21387 2250.2
+1879.56152 19656.6
+1879.92615 2179.4
+1881.79309 843.5
+1906.70874 888.3
+1907.15149 7159.8
+1907.58838 1141.6
+1930.74768 902.7
+S	3914	3914	1907.58024127
+Z	2	3813.313
+Z	3	5719.465
+532.52338 2210.0
+624.37262 776.5
+630.44531 912.0
+660.04285 554.6
+676.68909 1038.8
+695.72278 641.6
+779.19781 845.6
+795.93677 1072.6
+941.57373 626.1
+1006.85266 680.1
+1019.69330 781.5
+1057.29785 845.7
+1170.55981 704.0
+1198.16077 2774.8
+1459.65918 690.7
+1674.54236 690.8
+1823.45508 726.4
+1857.39929 612.6
+1876.22473 1046.2
+1876.51697 762.9
+1878.42126 1061.1
+1879.00867 1157.7
+1879.26050 1274.2
+1879.65027 19408.4
+1880.38123 908.1
+1881.63306 909.6
+1907.15930 7688.0
+1930.71912 1199.6
+S	3915	3915	485.7758246
+Z	3	1454.052
+Z	2	969.704
+121.31348 696.9
+121.77069 2899.8
+126.67732 957.7
+130.41064 768.7
+131.87964 695.4
+132.80675 782.8
+133.08534 1347.2
+141.42097 743.6
+143.63066 655.7
+144.00481 624.8
+144.28883 766.3
+151.39340 671.4
+154.26855 645.1
+157.79514 748.7
+165.09067 1013.8
+165.74283 960.0
+171.63765 1077.5
+177.11176 2243.1
+183.77638 817.3
+184.29851 780.4
+186.83083 654.2
+188.26343 1214.1
+188.27029 1155.4
+188.27826 1267.3
+188.28658 2002.0
+188.29448 1513.8
+188.31514 1010.1
+198.98952 1605.4
+199.12381 1078.2
+199.28107 1673.5
+199.35310 1397.9
+199.36357 1017.0
+199.37842 4004.0
+199.39636 1635.4
+199.49564 745.6
+214.77696 665.7
+216.95970 784.1
+221.13739 1504.1
+227.12820 632.4
+246.98421 711.2
+260.68399 844.8
+264.13226 811.4
+280.19394 1086.7
+283.17575 1164.3
+284.83740 833.4
+285.97263 653.3
+289.21548 1624.1
+291.23148 2463.9
+345.72794 880.7
+350.28275 907.6
+359.20544 9778.6
+360.20993 1273.9
+371.22482 1636.9
+384.23389 2377.1
+385.43015 743.9
+406.25046 1037.8
+415.25159 1761.1
+422.24942 7265.2
+427.56152 1016.7
+459.27927 4196.7
+459.70132 843.2
+466.38202 1004.9
+466.40933 863.0
+467.31854 1312.6
+468.32736 65388.0
+468.82922 7645.7
+482.67780 1136.7
+503.30347 3090.2
+532.49719 2988.2
+547.32983 4262.0
+549.17548 1196.6
+564.35809 1399.2
+566.38348 694.1
+578.37109 891.9
+591.35614 3826.3
+612.07629 847.7
+635.38489 1566.8
+676.66522 937.3
+679.40485 1296.5
+701.51013 1286.5
+731.15204 1122.4
+795.93848 1032.6
+828.04156 781.3
+836.54254 750.7
+843.49371 2772.7
+902.75891 861.6
+981.46741 856.2
+1031.21680 875.4
+1057.27979 1059.1
+1130.09863 814.0
+1156.31750 831.5
+1164.85425 809.6
+1184.08044 700.0
+1198.10669 4364.7
+1450.80347 770.1
+1491.84387 1016.1
+1689.76575 719.0
+1776.95288 1077.0
+1778.61743 820.3
+1876.04407 991.6
+1878.85107 1864.1
+1879.32227 3069.3
+1879.59985 25424.2
+1880.32336 1440.0
+1880.70386 909.0
+1882.39685 910.7
+1907.05884 9254.3
+1919.08069 974.7
+1930.22363 870.5
+1930.66443 1244.7
+S	3917	3917	1907.63399127
+Z	3	5719.627
+Z	2	3813.42
+532.49396 2138.3
+676.68073 992.3
+690.17792 733.1
+813.52405 625.3
+959.95514 611.4
+1013.90112 634.0
+1057.30676 915.8
+1198.10791 3032.5
+1327.44971 689.8
+1569.44861 588.4
+1579.29138 698.7
+1597.81946 729.8
+1599.56226 727.6
+1660.44714 541.5
+1776.89648 790.7
+1789.35681 567.1
+1868.14697 610.1
+1878.77356 2046.1
+1879.20007 2571.8
+1879.63037 19094.9
+1880.02917 3014.2
+1880.46472 1423.0
+1880.88074 974.7
+1907.05469 7585.3
+1930.58508 827.6
+S	3918	3918	1879.82940793
+Z	3	5636.213
+Z	2	3757.811
+532.46417 1810.6
+536.10559 579.2
+549.12341 663.9
+630.36493 727.8
+634.58002 665.5
+676.67383 1048.6
+707.82129 630.6
+779.57153 646.0
+795.95355 1092.5
+911.37817 532.4
+1019.69055 666.6
+1134.10474 603.0
+1198.03479 3307.1
+1317.87378 727.3
+1525.31909 690.1
+1878.77490 921.7
+1879.19714 645.2
+1879.36658 1580.7
+1879.62415 20299.7
+1880.62524 858.3
+1881.41516 712.2
+1907.02698 6915.5
+1930.50781 1198.8
+S	3919	3919	1198.45540793
+Z	2	2395.063
+Z	3	3592.091
+328.46448 617.3
+370.82037 640.8
+381.35876 699.4
+402.89551 612.8
+407.09641 592.2
+427.53970 883.7
+465.49570 598.5
+470.35519 642.0
+473.26367 671.8
+532.54059 1888.4
+549.15161 776.6
+630.40662 666.2
+676.65222 953.0
+690.93298 562.7
+691.14398 620.7
+711.16119 608.0
+748.28302 647.2
+795.95081 874.6
+810.67352 616.1
+1015.05811 627.9
+1057.60156 550.5
+1110.42566 632.6
+1198.21362 3333.6
+1297.40356 682.3
+1348.21362 761.7
+1878.43726 1112.7
+1878.88574 1775.3
+1879.13147 882.1
+1879.56787 19831.7
+1880.03064 845.5
+1880.27710 1016.5
+1907.08630 6867.5
+1930.60852 1018.7
+S	3921	3921	1880.06340793
+Z	2	3758.279
+Z	3	5636.915
+532.56244 1747.8
+563.09991 711.8
+630.41266 818.5
+635.51532 606.9
+664.79236 618.4
+676.68060 1245.6
+678.47845 563.4
+769.85638 707.8
+802.43878 599.5
+834.80505 718.5
+1078.28467 584.1
+1140.14294 697.8
+1198.25903 3343.8
+1525.44470 680.4
+1694.07312 679.8
+1739.22913 673.7
+1860.11365 738.3
+1877.77771 629.8
+1878.03821 577.1
+1879.02820 1207.4
+1879.31958 3180.8
+1879.64441 19445.8
+1879.97571 2805.2
+1880.29199 824.0
+1880.40796 912.6
+1881.58777 1065.6
+1882.50513 773.8
+1891.58887 820.7
+1907.16357 7538.4
+S	3922	3922	1907.53240793
+Z	3	5719.322
+Z	2	3813.217
+532.52020 1547.1
+653.52521 687.9
+676.69037 991.2
+795.95068 1013.6
+848.62921 533.6
+879.33783 565.6
+956.73145 566.3
+1018.51379 676.1
+1057.33875 671.4
+1121.34900 618.9
+1177.97632 654.3
+1198.16919 2870.9
+1198.29236 596.9
+1206.66150 711.2
+1509.06396 613.0
+1589.24512 711.5
+1738.59912 750.1
+1771.14124 561.9
+1777.00269 822.1
+1870.28101 835.6
+1878.95557 1046.7
+1879.40076 3370.2
+1879.67505 19572.2
+1880.36633 1180.5
+1881.14282 694.7
+1907.18823 7747.9
+1930.78833 820.7
+1932.50989 645.1
+S	3923	3923	427.724991267
+Z	2	853.602
+Z	3	1279.9
+107.32914 546.2
+120.50518 530.0
+121.06419 5472.0
+121.76755 2229.3
+121.77343 674.8
+126.55602 632.9
+131.07767 633.3
+165.09048 7648.1
+166.99313 602.1
+177.11127 1464.5
+181.05962 582.3
+198.99094 762.2
+199.27010 1082.7
+199.35875 1260.4
+199.36803 3473.9
+199.38705 988.0
+199.41739 1027.8
+199.46593 1586.4
+200.28815 529.4
+202.87373 706.0
+209.11661 7794.2
+211.78387 528.5
+215.98836 608.6
+221.13757 752.2
+227.12689 1965.1
+228.55757 607.1
+230.90887 539.9
+230.91731 492.8
+233.18968 3133.1
+241.83128 588.5
+243.15042 650.6
+268.19934 567.7
+271.15259 1975.5
+271.95264 502.1
+277.21567 9369.7
+280.65155 552.6
+299.49390 562.0
+301.81760 636.7
+314.58420 891.3
+315.17941 181040.1
+315.77512 960.9
+316.18246 2579.0
+321.24136 3894.6
+324.32520 2634.0
+331.10757 508.3
+333.07388 964.2
+335.09027 495.3
+335.10165 495.5
+336.29913 576.0
+338.96240 580.0
+339.29150 722.6
+353.46683 512.2
+356.21124 1654.5
+358.92484 593.7
+364.72385 17120.8
+383.27982 753.7
+391.29938 751.3
+394.61136 620.3
+408.25793 641.2
+409.10553 6486.9
+409.23779 692.0
+409.26907 1053.9
+409.31744 1394.1
+410.10913 1237.7
+427.55490 715.3
+431.20645 561.1
+459.27859 1629.0
+476.80170 883.5
+482.67972 722.2
+503.30667 1032.4
+520.33618 789.8
+527.61200 603.5
+532.53174 2010.8
+548.19928 704.5
+564.35663 810.3
+596.36194 893.6
+645.18140 654.6
+664.47882 545.5
+676.67578 673.7
+711.41382 2469.3
+728.44055 62906.0
+729.44214 3617.8
+731.13879 625.4
+782.17377 575.1
+782.43463 551.2
+795.95178 858.6
+885.16400 708.6
+935.47961 725.2
+991.10510 552.6
+1075.10852 609.0
+1087.92957 647.1
+1198.18811 2977.4
+1235.63464 523.3
+1325.97131 684.7
+1367.61255 599.4
+1525.41724 760.8
+1530.06299 653.5
+S	3925	3925	1880.00840793
+Z	3	5636.75
+Z	2	3758.169
+532.53827 1869.8
+563.59546 609.1
+590.00208 624.6
+654.00659 624.2
+657.10474 586.2
+795.95380 1030.9
+1057.30664 855.2
+1128.49731 607.1
+1198.21167 3447.5
+1624.49927 742.9
+1776.97205 1011.2
+1878.81921 993.9
+1879.04651 1189.5
+1879.34009 3358.7
+1879.62708 19299.6
+1907.22546 7511.7
+S	3926	3926	1907.59124127
+Z	3	5719.498
+Z	2	3813.335
+532.56219 1887.1
+646.92755 733.5
+663.13818 653.1
+676.68646 857.2
+739.25391 661.4
+795.95032 1105.7
+806.31488 573.9
+1019.66656 630.5
+1057.33191 691.7
+1193.14380 736.8
+1198.26294 3371.8
+1268.03931 726.8
+1303.61572 596.9
+1384.76794 659.7
+1876.49695 880.5
+1878.99292 1022.3
+1879.31104 3378.4
+1879.66260 19753.2
+1880.00867 3762.5
+1880.96826 741.0
+1882.36877 703.4
+1906.95715 1184.6
+1907.24072 7447.5
+1930.56726 906.6
+1932.52771 900.2
+S	3927	3927	427.725407933
+Z	2	853.603
+Z	3	1279.901
+116.08089 1239.8
+118.93053 1354.2
+119.07687 1237.4
+121.06426 4446.8
+121.77208 4901.0
+126.31342 1718.9
+133.08545 1581.7
+146.91751 1478.2
+164.58882 1173.4
+165.09059 5871.7
+165.74437 1660.8
+166.68893 1382.9
+168.10468 1198.6
+172.46133 1174.5
+185.01312 1202.6
+186.19472 1151.2
+198.98955 2002.9
+199.26067 1215.5
+199.27055 1993.7
+199.32617 1733.2
+199.34691 1766.3
+199.35765 3374.1
+199.36955 7349.4
+199.37990 3216.9
+199.42506 1833.4
+199.46831 1675.3
+208.68341 1263.0
+209.11627 6250.9
+227.12759 2812.1
+233.18861 2189.4
+271.15286 2036.3
+273.80331 1364.5
+277.21539 8163.3
+281.23779 1256.2
+283.06149 1253.0
+303.29254 1571.7
+311.26068 1585.1
+314.58051 1606.1
+315.17920 161190.8
+316.18240 2943.1
+318.01331 1382.2
+321.24207 3334.0
+322.30884 1943.7
+323.53741 1335.4
+324.32553 7166.1
+337.48480 1497.0
+339.28714 3923.0
+364.72549 1653.7
+371.18399 3519.8
+407.36566 3042.7
+408.36374 1523.7
+409.10602 7643.8
+409.32913 5672.7
+427.53430 2284.6
+448.23560 1699.8
+469.90396 1560.3
+476.80777 2219.6
+482.43512 1324.4
+482.64240 1900.8
+490.47540 1476.5
+527.96411 1359.0
+532.53290 4309.9
+549.13751 1913.2
+630.40741 1589.6
+671.41534 1194.1
+676.66968 2051.2
+728.44037 8364.1
+729.44244 3150.8
+731.09729 1468.3
+795.95709 1694.5
+796.01666 1268.9
+813.92615 1489.1
+837.56067 1231.8
+858.03076 1483.9
+1057.28284 1738.7
+1089.45081 1276.4
+1097.87952 1464.6
+1099.72192 1580.7
+1195.75232 1420.4
+1198.19043 6377.5
+1416.68860 1343.5
+1459.61462 1353.0
+1489.76636 1455.5
+1525.36890 1792.1
+S	3929	3929	1880.0388246
+Z	2	3758.23
+Z	3	5636.841
+532.49860 1745.8
+545.00989 769.7
+545.31244 546.2
+549.13129 969.5
+591.02551 656.4
+630.38208 896.1
+644.38342 656.1
+677.99451 728.3
+731.09747 741.5
+870.01923 784.9
+1001.22552 559.1
+1198.11707 3434.6
+1456.10229 646.3
+1667.74561 582.0
+1776.93848 1162.5
+1878.37634 861.1
+1879.04077 1260.1
+1879.58130 19983.9
+1880.12756 1249.7
+1907.20288 7586.6
+S	3930	3930	1907.6068246
+Z	3	5719.545
+Z	2	3813.366
+532.54553 1739.0
+583.52527 621.3
+630.44061 852.8
+633.52478 633.8
+650.20184 546.8
+670.64124 606.1
+676.67639 858.3
+725.67566 624.3
+795.94220 835.2
+832.21552 590.4
+978.87659 578.6
+1057.30542 1011.8
+1076.08008 650.9
+1198.21826 3324.9
+1532.62573 655.3
+1716.51917 640.0
+1756.63611 584.7
+1831.97632 713.2
+1873.09985 611.4
+1877.05664 588.0
+1878.39624 690.8
+1878.77600 723.4
+1879.00635 1152.9
+1879.36914 2372.1
+1879.64404 19425.6
+1880.28540 1393.8
+1880.55811 834.5
+1882.10571 856.9
+1907.22351 6829.4
+1930.63367 791.3
+S	3931	3931	444.7518246
+Z	2	887.656
+Z	3	1330.98
+121.76873 2495.9
+125.11735 505.8
+134.09129 580.8
+144.21167 584.8
+150.47087 559.3
+157.28409 635.1
+159.98415 657.1
+161.99483 653.5
+166.41553 523.9
+172.65559 577.2
+174.50821 526.4
+199.27759 945.6
+199.35939 1085.6
+199.37527 2870.5
+199.46242 698.8
+199.47380 1161.1
+203.00978 650.4
+215.85719 628.3
+224.20201 537.0
+254.48373 555.3
+271.15192 940.5
+275.95282 569.1
+280.17609 542.8
+283.22763 676.9
+285.18427 2183.6
+289.17905 9701.8
+290.18307 1299.0
+290.76273 506.3
+292.18982 4447.1
+293.19266 1065.7
+315.17923 5407.3
+316.18277 958.3
+320.20471 563.4
+327.23245 703.5
+336.83527 538.8
+358.90338 529.7
+380.23779 677.9
+407.29446 2397.6
+425.10138 2117.3
+425.30374 11220.2
+425.37698 1804.6
+426.30734 2646.2
+427.30386 64660.9
+427.53094 796.2
+428.30859 1097.6
+429.08755 703.9
+469.91223 642.6
+475.33444 604.4
+482.64270 672.3
+521.94421 593.0
+532.49518 1964.3
+535.11499 525.6
+549.13916 661.3
+657.73712 581.0
+676.66876 1370.0
+725.00861 631.0
+795.94983 966.8
+858.01898 610.4
+1053.66479 732.5
+1057.28882 804.7
+1180.51135 658.4
+1198.10657 3586.4
+1341.22314 618.8
+1469.37866 589.8
+1483.26624 523.0
+1494.67798 586.5
+1542.19165 542.1
+1669.59473 578.8
+1680.62769 607.1
+S	3933	3933	1879.99340793
+Z	2	3758.139
+Z	3	5636.705
+532.44183 695.7
+532.48871 2164.9
+549.18878 898.0
+573.11359 738.4
+630.44037 719.8
+673.17987 585.3
+676.62018 1248.9
+731.16473 899.6
+797.24506 641.1
+807.27380 677.4
+1034.21716 578.0
+1198.09448 3487.5
+1248.56653 623.9
+1315.25232 645.9
+1453.76904 617.0
+1488.84351 668.0
+1717.03125 1092.3
+1755.76038 639.5
+1765.79260 662.0
+1872.63354 1038.7
+1879.48572 21189.0
+1904.66467 733.7
+1906.74219 870.5
+1907.05042 7379.7
+1907.45715 955.0
+1930.71448 769.0
+S	3934	3934	1907.5498246
+Z	3	5719.374
+Z	2	3813.252
+527.26422 629.3
+532.52374 1987.8
+549.19000 936.4
+567.40314 595.8
+591.91803 573.0
+604.65363 610.0
+630.45313 765.3
+676.65833 975.0
+789.36304 559.5
+795.95709 1072.7
+891.49371 704.1
+962.09888 677.9
+1154.59998 618.1
+1162.93506 665.4
+1198.17212 3050.2
+1223.11865 579.8
+1525.50391 1200.2
+1544.84705 606.1
+1718.74866 912.9
+1758.49829 688.8
+1764.27063 632.9
+1768.67542 713.1
+1777.86572 579.6
+1877.86035 764.3
+1878.73657 756.1
+1879.14368 1558.2
+1879.58569 19974.6
+1880.05164 1390.2
+1881.29065 727.7
+1905.73633 730.3
+1907.01685 7129.8
+1909.81116 593.1
+1930.72034 1158.6
+S	3935	3935	400.657991267
+Z	3	1198.699
+Z	2	799.468
+100.09772 594.2
+106.91974 494.6
+110.76589 567.1
+112.40582 492.8
+116.58302 556.6
+120.70686 634.5
+121.06420 1474.2
+121.77116 2571.0
+122.13534 583.6
+124.72372 526.4
+126.05194 536.6
+130.47926 501.4
+133.08505 1917.3
+147.15463 545.6
+152.10873 542.6
+153.92946 554.1
+155.09821 1470.8
+165.09039 1722.5
+165.74365 932.9
+172.99081 615.0
+174.16029 664.3
+177.11172 1794.7
+193.40007 584.6
+199.07233 1639.6
+199.12605 665.0
+199.27682 1109.2
+199.35823 939.1
+199.37466 2344.1
+199.38802 1264.6
+199.47276 1136.6
+209.11707 798.9
+211.43398 619.0
+213.05402 13333.6
+214.05721 1670.5
+227.12720 3242.3
+251.41568 573.9
+255.31206 705.4
+271.15335 11415.0
+271.66461 554.3
+292.18948 2443.5
+296.29422 7732.6
+297.26266 548.0
+297.29797 1094.2
+299.16113 12985.3
+300.16434 1515.8
+305.33685 533.3
+338.34174 774.7
+339.34500 642.8
+342.29938 904.6
+342.86176 572.5
+371.22650 1716.4
+380.23984 910.5
+380.27603 857.6
+380.29987 569.0
+381.20743 773.1
+381.26358 1422.3
+381.31375 1969.7
+383.27814 67489.1
+427.58694 685.1
+433.95740 559.0
+438.99847 656.0
+459.27798 3873.9
+469.91156 828.9
+482.38370 557.4
+482.69299 795.6
+488.28165 1154.4
+503.30511 5715.8
+504.51984 561.2
+505.54010 551.4
+506.15051 687.9
+532.55017 1969.3
+546.51678 655.8
+547.33026 5437.1
+549.19702 927.9
+580.28448 1139.3
+591.35626 1965.9
+595.21466 602.4
+635.38330 958.8
+658.60535 553.4
+676.67145 1119.1
+795.96326 1070.0
+844.35309 598.6
+891.45593 560.3
+909.18896 584.9
+925.90021 527.3
+996.89319 618.9
+1140.16357 673.5
+1160.69263 570.8
+1198.22913 3266.0
+1210.94421 541.2
+1251.41125 611.0
+1289.04614 635.8
+1443.76819 679.5
+1525.53113 660.9
+S	3937	3937	1880.17240793
+Z	2	3758.497
+Z	3	5637.242
+532.53784 2222.6
+543.70532 632.4
+556.84424 659.8
+565.33502 673.0
+615.76782 578.0
+649.31439 771.7
+747.21216 612.8
+795.94647 978.0
+805.32813 695.8
+840.40765 571.8
+873.91992 729.6
+1053.79248 727.5
+1135.85986 640.1
+1198.20789 3171.5
+1580.15222 725.5
+1586.65222 647.8
+1684.54578 711.9
+1877.49963 851.7
+1878.81543 1215.0
+1879.60535 18934.1
+1879.90601 1714.7
+1880.22595 677.4
+1880.41821 1300.6
+1881.27332 805.1
+1907.16406 6818.6
+1919.06445 767.3
+1997.20789 1000.1
+S	3938	3938	1907.4588246
+Z	2	3813.07
+Z	3	5719.101
+532.41449 1667.0
+676.73425 1020.4
+688.89978 682.1
+731.12866 837.0
+748.58209 635.7
+748.65326 639.8
+795.97961 881.1
+804.69244 642.4
+805.30060 625.6
+807.97803 615.6
+1021.91772 683.0
+1054.66663 612.0
+1197.92737 3617.2
+1535.57166 553.4
+1551.87366 693.5
+1676.39099 689.5
+1717.32947 1319.8
+1872.67883 1045.6
+1878.30103 649.9
+1878.56567 736.2
+1879.16650 2810.4
+1879.37598 3496.0
+1879.79053 18455.9
+1880.20996 2804.1
+1880.44434 2585.2
+1880.97668 1467.8
+1881.44604 635.0
+1907.15015 7132.5
+1986.75464 741.3
+S	3939	3939	588.828991267
+Z	2	1175.81
+Z	3	1763.212
+157.16835 812.1
+163.19212 809.2
+165.09103 1174.3
+165.74118 1212.3
+169.50305 1122.3
+171.48036 923.4
+177.11121 1619.8
+182.79237 981.2
+188.24730 1006.7
+188.27045 1504.3
+188.28314 2076.0
+188.29713 1454.2
+188.30325 1282.0
+188.31680 1024.7
+188.36237 960.4
+188.84370 845.8
+198.99303 1960.7
+199.26689 880.4
+199.33412 941.4
+199.34825 1016.5
+199.36554 3224.3
+199.38348 3020.1
+199.40425 1976.3
+199.46709 1322.4
+221.13724 1640.5
+231.64781 900.9
+235.13226 3589.3
+243.36684 883.8
+245.18922 2878.2
+251.05937 962.0
+255.15913 2428.8
+263.30685 901.6
+265.16513 1347.9
+269.51050 1054.1
+271.20441 1139.2
+273.14020 814.9
+283.17459 1704.3
+289.21539 31207.9
+309.19138 1184.3
+315.17908 1368.0
+315.23041 3278.3
+323.15131 936.1
+323.18607 1847.5
+327.20068 4434.1
+329.88358 1168.6
+333.24149 7770.6
+350.29837 1456.9
+353.21838 1796.3
+359.20557 4131.1
+371.22571 1484.2
+377.26578 1923.9
+381.37796 1233.5
+403.23221 2683.1
+410.49295 859.0
+419.47772 928.0
+447.25763 41766.1
+459.27689 1396.0
+465.32144 1278.5
+483.33041 8632.5
+503.30426 1593.1
+520.04028 1071.8
+524.85681 1112.8
+527.35577 7898.7
+532.40460 2920.9
+546.04706 942.1
+547.32941 1588.2
+553.37250 3601.1
+564.37781 1838.9
+569.26929 1025.6
+569.42401 168114.6
+570.42731 58630.6
+570.67047 1317.7
+571.38220 310226.3
+571.43146 12233.4
+572.83862 1526.3
+676.67395 1373.3
+727.84650 976.9
+745.53540 1172.8
+833.04993 918.4
+958.42822 993.3
+996.35510 1074.6
+1063.93359 996.0
+1079.57117 1016.6
+1110.39490 1257.9
+1197.90479 4163.9
+1221.51123 830.9
+1428.22913 981.3
+1647.29370 1033.8
+1695.11499 1033.6
+1716.74902 2491.6
+1858.16992 988.8
+1872.05139 1772.7
+1877.39075 1537.4
+1878.73047 1795.8
+1879.25146 5279.8
+1879.63489 30509.0
+1880.02136 3946.2
+1880.60413 1651.2
+1881.00635 1199.4
+1881.71301 1006.3
+1901.07788 921.2
+1906.81653 871.5
+1907.14526 11770.5
+1907.43494 1462.0
+1930.70947 1923.5
+1958.60071 1166.7
+S	3941	3941	1880.0518246
+Z	3	5636.88
+Z	2	3758.256
+514.29187 652.9
+532.39478 2097.6
+549.20148 1011.0
+630.46002 776.0
+670.99445 538.6
+676.70569 979.6
+818.60199 673.1
+1197.87488 3117.1
+1480.56323 661.5
+1525.52612 816.0
+1589.61682 665.5
+1870.90808 1192.4
+1877.69019 1040.2
+1878.52478 1094.7
+1879.72437 17768.3
+1879.99573 3952.3
+1880.18799 3035.5
+1880.64331 727.8
+1881.19727 904.7
+1907.14258 7198.1
+1916.12512 652.4
+1930.77344 867.1
+S	3942	3942	1907.57340793
+Z	2	3813.299
+Z	3	5719.445
+532.41724 1855.2
+549.18915 627.6
+559.11115 599.2
+676.67560 876.5
+784.42297 633.2
+795.96045 901.2
+831.39526 661.2
+1187.94385 662.9
+1197.92566 3427.4
+1390.64868 813.0
+1455.45886 607.4
+1531.54980 658.6
+1591.20337 830.1
+1649.31885 573.9
+1878.64014 1403.3
+1879.23975 2239.8
+1879.65149 19153.1
+1880.01501 1910.5
+1880.69043 1503.9
+1881.03918 791.9
+1906.75024 610.7
+1907.11353 7608.8
+1908.49280 590.1
+1930.74097 1383.9
+1974.96106 619.8
+1998.94214 655.7
+S	3943	3943	667.809241267
+Z	3	2000.152
+Z	2	1333.771
+179.93594 524.6
+182.24161 582.8
+183.07448 536.4
+188.26813 1090.1
+188.28462 1403.8
+188.29187 1181.1
+188.29935 910.9
+188.31062 887.0
+198.98987 992.0
+199.27658 1075.3
+199.35890 913.0
+199.36534 963.8
+199.37633 2669.6
+199.39977 806.2
+199.40793 820.1
+199.46321 720.1
+222.80037 632.9
+253.43272 619.6
+293.06622 617.7
+347.79819 552.5
+350.27875 552.7
+373.37616 582.6
+375.91287 581.1
+377.02374 602.3
+391.21582 561.6
+432.11206 666.3
+448.21390 770.5
+458.77615 731.7
+532.40308 2520.7
+536.31219 985.2
+566.25488 749.0
+645.96851 593.5
+648.43750 15868.3
+649.43549 1107.4
+676.69232 682.9
+686.86688 623.1
+731.13074 754.1
+775.37457 662.7
+795.95221 933.1
+836.67877 779.5
+991.43677 529.8
+1057.30359 897.6
+1197.89905 3262.3
+1365.32373 825.2
+1430.70654 656.9
+1450.28625 622.1
+1856.77539 789.3
+1878.87964 874.0
+1879.23242 4907.3
+1879.66370 18917.5
+1880.10815 3959.8
+1880.53748 1278.2
+1881.03528 727.6
+1907.08057 7375.2
+1930.60193 952.9
+S	3945	3945	1880.05724127
+Z	3	5636.896
+Z	2	3758.267
+532.34790 1893.8
+534.91846 572.8
+549.12469 715.2
+559.08044 541.5
+560.76337 608.3
+562.57043 600.8
+676.70630 992.5
+732.02948 726.8
+795.96588 804.0
+1015.88947 797.2
+1127.24292 645.9
+1197.77368 3267.9
+1270.17944 767.6
+1374.31067 676.6
+1387.23267 612.1
+1526.88477 631.7
+1731.67261 679.0
+1797.78992 647.0
+1840.51904 747.2
+1874.58484 745.8
+1876.12598 1151.2
+1877.12769 673.6
+1879.13855 2090.0
+1879.42688 5685.8
+1879.66821 18067.7
+1880.24780 2254.6
+1880.50220 1132.0
+1881.74866 654.6
+1906.80493 751.8
+1907.11707 7095.2
+1907.77637 839.1
+1968.89160 655.9
+S	3946	3946	1907.59840793
+Z	2	3813.349
+Z	3	5719.52
+532.38049 2139.2
+549.18164 801.0
+576.51324 560.1
+577.31775 602.8
+601.20026 537.5
+674.30682 584.3
+676.65411 918.2
+731.17798 743.6
+749.23163 614.0
+1087.73706 621.9
+1123.86877 584.4
+1197.85168 3222.0
+1229.35779 658.4
+1229.69653 764.8
+1489.66980 995.9
+1523.11353 740.4
+1525.49353 1194.7
+1605.21655 667.9
+1763.72241 681.1
+1877.31873 635.4
+1878.51563 768.2
+1878.80872 1133.4
+1879.59094 18664.5
+1879.85840 4088.1
+1880.08740 2151.1
+1881.39429 715.8
+1881.81897 594.5
+1907.17310 7504.0
+S	3947	3947	515.777407933
+Z	2	1029.707
+Z	3	1544.057
+133.08528 1671.2
+133.09764 1107.4
+138.98174 606.7
+144.32501 632.3
+147.70494 605.1
+149.92651 663.4
+155.09862 1443.0
+162.99239 661.4
+168.64839 618.2
+177.11176 3601.4
+179.21773 613.3
+180.72562 787.5
+182.77797 723.7
+188.26401 1525.5
+188.27705 1048.4
+188.28658 1426.4
+188.29677 1417.3
+188.30266 1079.4
+188.31154 1057.4
+188.34479 705.2
+189.53763 598.6
+190.47499 635.7
+198.99149 882.8
+199.28061 968.8
+199.30106 1019.0
+199.34119 737.6
+199.35944 1110.0
+199.37833 2489.0
+199.39706 1486.5
+199.47604 1048.6
+203.92719 681.3
+207.72186 616.1
+209.11642 1350.9
+219.28383 608.8
+221.13814 1938.1
+223.55116 708.1
+233.18948 5098.9
+261.95294 717.3
+265.16388 1145.9
+275.23624 701.7
+277.21548 10704.5
+279.15988 953.5
+303.23196 915.8
+303.59576 592.1
+315.17926 3157.8
+316.17755 661.5
+321.24124 5153.6
+327.20010 1199.9
+340.20883 906.0
+342.26645 641.2
+359.20538 2503.9
+363.65921 590.9
+371.22656 1260.3
+381.34470 809.3
+394.08594 649.4
+398.03598 644.3
+403.23135 22371.7
+415.25323 2163.0
+416.25690 1026.0
+421.25375 946.6
+427.30597 1025.5
+427.52698 759.6
+428.77066 605.5
+457.27490 8486.7
+457.60907 6789.9
+457.94281 3179.7
+459.27829 4078.5
+460.27994 1305.6
+463.16061 631.7
+465.32190 589.9
+471.33020 3032.6
+496.39206 2447.4
+497.09653 1953.4
+497.36832 3227.8
+498.33759 3450.8
+501.23477 1991.9
+503.30298 918.7
+532.38690 2179.0
+547.33014 8034.0
+548.33307 2897.4
+558.75037 2820.2
+591.35620 8139.2
+592.36108 2330.4
+630.38538 1010.3
+633.70361 660.9
+635.38293 7796.7
+636.38800 4112.6
+637.39197 916.9
+637.92029 653.9
+676.66241 1038.7
+679.40857 5994.0
+680.41266 1929.1
+681.41766 974.2
+685.18115 657.0
+701.49792 671.6
+703.96606 821.0
+723.43506 4574.1
+724.43860 2000.2
+726.14606 631.6
+745.52582 1940.7
+746.52844 1215.0
+767.46210 2696.9
+768.46417 1553.3
+789.55280 1549.3
+790.56494 884.0
+795.96716 949.8
+811.48383 986.4
+812.49799 1018.4
+819.86945 703.6
+833.57898 1558.0
+834.58771 777.7
+835.44037 603.7
+842.73749 611.4
+858.03223 762.5
+860.27814 684.2
+872.04279 650.9
+931.59576 692.6
+1015.92120 714.5
+1019.34204 715.5
+1019.62610 726.6
+1021.13733 793.4
+1059.45471 692.3
+1079.14648 677.2
+1123.69873 658.9
+1172.90417 720.1
+1194.84314 559.8
+1197.86584 3750.8
+1392.24365 642.0
+1563.79443 671.3
+1776.84766 912.0
+1781.42834 617.5
+1799.65125 750.3
+1877.98047 1076.0
+1878.31018 1085.7
+1878.62793 1251.7
+1878.96741 923.7
+1879.24194 1643.6
+1879.59070 22037.6
+1879.96069 2572.1
+1881.19055 1143.0
+1881.53113 828.0
+1907.12878 8121.9
+1930.54272 1205.7
+S	3949	3949	1879.9878246
+Z	3	5636.688
+Z	2	3758.128
+532.36475 1954.9
+575.66895 610.9
+630.40436 930.3
+676.62964 1119.4
+688.03833 549.9
+756.16632 568.8
+795.95166 1012.5
+1188.31067 605.4
+1197.81128 3319.8
+1260.38342 746.6
+1362.80066 697.0
+1448.71326 699.7
+1525.43115 908.0
+1606.59192 621.9
+1776.89258 631.8
+1879.12109 1672.4
+1879.51685 19988.7
+1879.85803 1362.9
+1907.14160 7728.7
+1930.60059 653.0
+S	3950	3950	1907.5908246
+Z	2	3813.334
+Z	3	5719.497
+526.61029 640.0
+532.35291 1676.9
+590.41089 665.7
+603.76318 734.0
+614.68225 591.5
+676.66052 1466.3
+795.97095 790.5
+1130.72278 696.5
+1182.20801 611.1
+1188.31323 969.6
+1197.79077 3176.1
+1219.71521 577.8
+1525.41260 802.7
+1752.61279 654.1
+1776.88904 775.2
+1823.23657 890.0
+1879.16589 1541.0
+1879.58801 19811.3
+1880.02307 1412.4
+1907.14844 7118.6
+1907.39490 759.4
+1930.62073 1054.3
+S	3951	3951	515.777241267
+Z	2	1029.707
+Z	3	1544.056
+131.87837 567.6
+133.08572 944.3
+145.46890 490.2
+149.26100 743.1
+155.09875 1044.8
+157.64827 747.1
+168.42166 550.5
+177.11197 2442.8
+188.25050 833.2
+188.26392 826.3
+188.27484 1113.5
+188.28256 1296.7
+188.28922 1139.7
+188.29892 1296.7
+188.32930 693.6
+199.16667 717.7
+199.26584 663.5
+199.36247 2444.3
+199.37120 1877.4
+199.38380 1202.1
+199.39410 1139.1
+199.40508 918.6
+199.45992 934.9
+209.11771 658.2
+210.85837 563.5
+233.18982 2003.0
+277.21585 5371.0
+297.65851 628.7
+314.41440 723.7
+315.18124 1477.5
+321.24277 1865.9
+327.20111 994.9
+328.20248 1015.2
+371.22617 1106.2
+383.02921 609.1
+401.79926 629.1
+403.23166 11119.7
+415.25201 1275.1
+416.25528 767.2
+427.30606 858.5
+427.53821 662.1
+457.27533 3840.5
+457.60953 3163.2
+459.27914 2576.5
+485.29675 717.1
+492.32373 579.5
+496.39063 2488.4
+497.36893 1679.6
+498.34155 724.3
+503.30356 987.8
+514.44330 610.7
+532.38757 1720.7
+536.35956 711.2
+547.33038 4454.1
+548.33527 1616.6
+558.75043 1099.4
+591.35669 4345.0
+592.36212 1422.5
+635.38367 5097.0
+636.38647 1505.0
+654.67200 620.8
+676.66913 826.9
+679.40967 4133.4
+680.41614 1856.0
+723.24622 675.6
+723.43585 2695.8
+724.43433 875.2
+745.52734 1330.4
+765.86047 595.9
+767.46075 2124.2
+768.46771 798.9
+789.55273 1320.3
+790.55377 749.9
+795.93903 829.8
+833.58051 1072.4
+878.61328 932.3
+1197.87280 2773.0
+1208.76196 719.4
+1268.89954 624.1
+1288.97620 661.4
+1424.92542 644.6
+1508.70276 584.1
+1525.38245 731.9
+1733.39429 636.2
+1876.19556 870.6
+1878.92712 2372.7
+1879.27979 1672.1
+1879.59998 19804.9
+1880.01477 1971.6
+1880.25293 2107.3
+1907.12439 7095.0
+1930.56995 958.6
+S	3953	3953	1880.14899127
+Z	2	3758.45
+Z	3	5637.172
+521.66394 632.1
+532.41516 1579.9
+535.12042 508.1
+549.12177 648.8
+572.30804 653.9
+576.11597 715.6
+618.17377 612.5
+630.37122 652.0
+655.87885 610.3
+676.66351 1051.7
+760.16772 497.6
+795.97516 1083.1
+804.50128 647.0
+830.17438 627.5
+931.65881 687.0
+1155.02380 728.4
+1197.91455 2940.5
+1265.09180 585.7
+1300.18848 604.8
+1352.52075 627.0
+1575.63062 692.0
+1747.98706 806.1
+1790.87952 728.9
+1876.10828 845.7
+1878.51501 874.5
+1879.60510 18821.3
+1880.19580 1229.1
+1907.08521 6933.8
+1907.35730 1169.4
+1930.46753 1072.7
+1969.56641 645.5
+1987.37561 620.5
+S	3954	3954	684.836241267
+Z	2	1367.825
+Z	3	2051.233
+185.76347 610.1
+188.20392 613.5
+188.28192 2251.2
+188.29895 1903.8
+188.32616 618.8
+188.34111 552.0
+188.35971 607.9
+198.99083 944.6
+199.27885 1128.9
+199.29164 844.8
+199.35173 915.1
+199.36615 1573.0
+199.37685 2692.9
+199.39145 825.5
+199.40169 577.4
+199.45204 796.3
+199.47333 895.7
+204.82243 727.8
+216.67163 811.7
+222.80891 553.2
+233.55948 554.8
+239.38092 632.8
+261.98984 705.1
+271.31506 812.1
+271.46750 625.0
+282.80881 601.4
+302.55154 615.8
+303.18872 559.1
+309.19070 893.2
+323.22546 607.3
+334.57486 577.8
+353.21579 1624.9
+355.50684 581.6
+371.88141 684.3
+372.10306 649.4
+385.22470 823.0
+397.24377 1202.9
+403.23248 739.3
+429.24527 1425.1
+436.09521 619.1
+441.26691 864.1
+472.10620 730.3
+473.27631 1110.8
+487.79926 629.5
+514.89636 621.3
+518.01117 578.7
+532.36023 1882.9
+535.31122 1459.2
+549.12988 679.1
+551.41266 728.8
+561.32727 1163.4
+579.33667 3078.3
+613.00378 616.2
+620.25067 651.7
+623.36200 2514.8
+630.37158 807.3
+647.60065 641.5
+667.38763 52355.6
+668.39105 9778.1
+795.95636 990.7
+823.12653 626.9
+823.62518 693.7
+861.37622 630.2
+981.78021 630.7
+1197.80420 3067.1
+1294.00391 707.9
+1554.90820 613.0
+1870.36609 877.6
+1877.09216 761.7
+1879.26245 999.0
+1879.66162 19101.7
+1880.06543 1501.7
+1883.08020 951.1
+1907.05908 7652.0
+1930.47925 1155.6
+1933.78455 626.9
+S	3955	3955	488.7778246
+Z	3	1463.058
+Z	2	975.708
+121.76981 2494.3
+127.55344 573.9
+131.83762 572.5
+133.08830 903.5
+141.46817 574.2
+146.91512 592.8
+152.20738 571.1
+165.02910 568.5
+169.48485 667.1
+188.25186 642.5
+188.26265 644.9
+188.27000 754.3
+188.27658 799.3
+188.28268 980.4
+188.29027 729.0
+188.29976 858.8
+188.30959 649.6
+199.30728 732.5
+199.31712 567.8
+199.34427 873.1
+199.35677 1463.2
+199.36449 656.6
+199.37773 3007.7
+199.39983 837.4
+199.41034 742.4
+199.47401 1140.8
+199.48723 861.5
+271.79449 728.4
+279.10599 598.4
+286.23825 1223.3
+292.19009 11109.8
+292.23584 912.0
+293.19394 957.9
+295.06631 609.5
+336.21603 2450.9
+340.18143 565.5
+350.27267 884.6
+355.30353 488.6
+359.20569 2345.0
+360.20905 2720.7
+380.24332 1861.6
+398.25214 844.5
+408.12079 590.8
+409.38489 814.6
+424.26730 881.5
+426.40836 13863.5
+427.41162 2149.9
+451.04199 607.4
+458.52325 667.5
+469.33264 1212.0
+469.40460 790.0
+471.33035 13177.8
+472.33374 9291.9
+519.00250 554.2
+532.34894 1935.1
+579.63416 576.7
+601.20612 677.8
+630.38239 904.1
+676.62659 556.2
+689.83466 666.1
+777.26099 631.5
+783.74432 597.4
+795.95374 707.2
+900.51514 605.3
+1032.52991 576.2
+1041.29309 547.7
+1157.24658 669.1
+1187.99536 715.5
+1197.78064 3254.6
+1208.65259 564.9
+1382.00439 691.2
+1454.43689 561.9
+1489.71289 658.7
+1514.53394 672.2
+1776.81519 637.0
+1834.67139 665.8
+1870.22009 708.1
+1878.19983 1007.7
+1878.96753 1235.2
+1879.66528 16689.3
+1880.32251 3011.4
+1880.74756 1465.8
+1881.24805 844.4
+1881.83337 798.9
+1907.03113 7252.4
+1919.20715 734.3
+1924.61597 590.3
+1925.29431 605.9
+S	3957	3957	1880.07440793
+Z	2	3758.301
+Z	3	5636.948
+524.66425 707.7
+532.41296 2089.2
+630.40674 689.5
+642.41003 607.9
+676.66687 909.0
+725.20245 692.6
+795.97534 883.6
+807.47369 718.7
+866.79150 671.2
+931.84473 591.9
+1019.68707 710.6
+1197.92041 3124.7
+1369.28516 675.8
+1543.88330 666.8
+1876.17480 927.3
+1877.66565 610.0
+1878.50732 817.0
+1878.82751 993.7
+1879.18298 2223.7
+1879.60840 19598.7
+1880.03284 2039.3
+1907.12732 7221.8
+1930.62671 790.6
+S	3958	3958	1907.51740793
+Z	3	5719.277
+Z	2	3813.187
+532.41553 1897.5
+604.32605 623.8
+630.36206 695.1
+651.18280 589.9
+676.66492 1040.2
+719.93481 609.8
+723.44391 660.6
+731.08606 636.0
+764.90112 639.3
+856.12506 618.1
+857.97192 743.1
+908.27960 612.4
+1021.83838 564.7
+1133.38867 583.0
+1140.23242 602.4
+1184.34778 614.6
+1197.93298 3140.8
+1207.54016 727.8
+1242.98425 606.1
+1288.77063 631.3
+1354.21545 739.0
+1506.65381 751.8
+1692.97388 663.8
+1870.67126 613.4
+1877.35034 1044.3
+1878.48364 678.5
+1878.99109 1364.9
+1879.29883 890.2
+1879.59778 20172.4
+1880.20898 667.1
+1880.56763 941.3
+1881.03357 747.2
+1907.13245 6965.2
+1930.46094 947.7
+S	3959	3959	1198.2208246
+Z	2	2394.594
+Z	3	3591.387
+350.29016 660.0
+381.33054 781.2
+425.79102 611.7
+427.53470 624.6
+463.70267 612.1
+472.02979 574.1
+476.01660 563.7
+482.60550 651.2
+494.83539 578.3
+527.59143 624.3
+532.38562 1757.3
+676.69244 928.4
+731.05322 795.8
+779.13965 629.9
+819.93896 622.9
+872.81604 701.2
+966.98224 591.5
+1197.86523 4056.9
+1281.01147 689.8
+1505.58081 664.7
+1525.30334 753.9
+1635.27405 733.5
+1652.38660 666.0
+1777.05090 874.2
+1808.72534 670.7
+1878.94861 1760.3
+1879.25891 1535.8
+1879.66089 19257.5
+1880.37866 1901.9
+1880.77100 1288.3
+1881.67297 691.4
+1907.10962 6699.0
+1919.12329 653.8
+1930.47632 856.0
+S	3961	3961	1880.0238246
+Z	3	5636.796
+Z	2	3758.2
+532.36548 1772.8
+534.56604 776.8
+625.88757 734.6
+676.68323 899.8
+767.50879 607.2
+779.13843 601.4
+795.93921 812.7
+857.97076 803.3
+1111.88196 747.9
+1188.11853 819.5
+1197.82471 3091.4
+1213.58313 593.5
+1214.70874 626.3
+1313.30420 653.9
+1406.90576 607.4
+1525.25610 847.2
+1860.09119 764.2
+1870.20276 673.8
+1878.45825 877.9
+1879.00183 1904.8
+1879.33594 1653.1
+1879.64551 19728.8
+1880.17444 1816.5
+1880.44434 1586.9
+1880.88855 687.8
+1906.73499 757.5
+1907.09265 6962.1
+1930.38416 965.9
+S	3962	3962	1907.60940793
+Z	3	5719.553
+Z	2	3813.371
+532.41907 2111.8
+549.14111 669.5
+551.55695 632.5
+690.04816 630.9
+795.94958 1073.7
+802.72522 641.2
+992.66888 658.7
+1057.29163 815.8
+1080.03284 654.6
+1188.19446 777.3
+1189.42737 616.2
+1197.93481 3169.2
+1284.51904 674.0
+1432.88928 683.9
+1525.47705 564.2
+1553.06360 665.5
+1804.19250 568.1
+1877.79956 779.2
+1878.65552 889.3
+1879.07910 1998.8
+1879.61621 18817.4
+1879.89124 2773.1
+1880.02246 1919.0
+1880.62122 666.9
+1883.22620 600.0
+1884.21570 647.7
+1907.18042 7493.3
+1941.59521 654.3
+S	3963	3963	725.897407933
+Z	3	2174.417
+Z	2	1449.947
+188.26105 882.8
+188.27852 1309.8
+188.28680 1194.3
+188.29501 1109.3
+188.30574 846.7
+188.31842 1315.2
+196.33409 680.5
+198.99530 838.7
+199.00189 557.3
+199.27217 855.3
+199.35355 657.7
+199.36966 2182.2
+199.37920 2712.5
+199.38916 1066.0
+199.39722 1196.1
+199.42787 820.1
+199.46895 596.2
+199.47635 826.1
+199.66187 557.7
+200.53616 747.5
+201.32631 582.6
+201.42528 596.3
+203.94737 678.1
+235.13379 951.9
+236.13647 732.1
+247.20517 3325.2
+248.20889 2104.0
+265.16440 1642.6
+273.21927 879.4
+278.30484 628.4
+279.15881 1024.7
+280.15906 1104.0
+291.23117 10414.8
+292.23450 11451.8
+299.18524 2331.8
+300.18738 762.8
+301.94742 644.8
+304.54596 768.5
+309.18982 2782.5
+310.19315 1488.7
+317.24765 1802.0
+318.25015 1517.7
+322.77304 727.0
+335.25742 5379.8
+336.26059 6105.0
+340.27686 679.2
+343.21066 1222.1
+344.59756 739.1
+345.23828 671.1
+346.80267 654.8
+350.31015 867.2
+353.21692 1302.2
+354.21954 1046.8
+360.65082 780.9
+377.13272 760.4
+382.40686 769.4
+387.22183 580.0
+397.24130 1567.2
+398.24472 1676.8
+399.51645 736.6
+404.66187 706.2
+426.32962 1003.9
+428.98816 617.3
+442.27554 783.8
+459.58423 772.7
+470.35513 770.9
+474.82202 732.1
+485.34021 900.4
+486.34970 1608.1
+530.37134 1629.2
+532.44098 2019.2
+536.31097 991.1
+556.39227 738.8
+574.40204 2479.2
+579.33661 3268.7
+580.33960 10369.0
+581.34125 2260.4
+600.41559 976.2
+606.90643 695.5
+617.42438 1464.5
+618.42804 7136.6
+619.43164 1607.9
+661.45184 1453.6
+662.45331 10150.1
+663.45648 3069.2
+676.66699 1128.4
+688.47333 1518.3
+689.47351 690.3
+704.50360 1181.9
+705.47620 27860.3
+706.48016 211277.5
+707.48303 41254.6
+708.47766 1975.7
+712.96381 708.5
+737.84888 858.8
+740.88306 663.1
+761.45618 698.7
+795.96869 1021.5
+846.20129 677.2
+881.92700 685.7
+961.18579 691.3
+996.79578 742.2
+1028.13428 728.6
+1057.29724 915.3
+1155.11523 679.0
+1188.22070 772.0
+1197.98071 3773.8
+1525.29761 1004.9
+1583.72827 713.9
+1833.18176 951.5
+1878.59241 1115.4
+1879.61401 21625.3
+1881.02112 726.1
+1907.21216 8490.8
+1930.41138 1304.2
+S	3965	3965	1879.9918246
+Z	2	3758.136
+Z	3	5636.7
+510.92859 740.2
+532.34772 1915.0
+532.38275 772.0
+549.10144 578.5
+582.24066 699.5
+634.64960 679.9
+660.69080 628.0
+676.67358 736.6
+784.55560 545.1
+795.50934 638.9
+888.66589 594.9
+1019.68176 811.6
+1117.29578 652.9
+1134.21692 673.2
+1137.38037 729.3
+1197.76941 3048.5
+1229.87573 666.0
+1785.34180 651.4
+1817.43384 709.5
+1870.30078 1011.7
+1878.98816 973.4
+1879.07861 951.2
+1879.61755 18726.1
+1880.14832 1305.7
+1881.11194 893.3
+1882.22876 804.3
+1901.54163 617.8
+1907.15503 6830.5
+1907.41895 1426.8
+1930.48267 1140.9
+S	3966	3966	711.835991267
+Z	3	2132.233
+Z	2	1421.824
+187.05026 644.5
+188.18417 620.4
+188.20195 693.6
+188.21919 731.8
+188.23004 690.4
+188.24242 870.8
+188.25990 732.7
+188.27393 762.2
+188.28101 949.4
+188.29257 655.8
+188.30602 849.3
+188.32428 986.9
+188.33727 648.9
+199.28271 768.9
+199.29652 571.5
+199.29947 573.0
+199.31911 917.1
+199.33205 784.4
+199.35953 1241.4
+199.37221 1448.3
+199.38049 972.7
+199.38756 601.6
+199.39513 1039.7
+199.40312 605.2
+199.44032 690.1
+199.45590 571.0
+199.52917 742.0
+200.08942 582.9
+217.94913 651.0
+221.97382 575.4
+254.14500 602.4
+255.11989 603.3
+280.58524 678.0
+324.01871 637.7
+360.91220 694.9
+381.34531 681.3
+386.76904 582.5
+389.56250 620.0
+398.44345 578.2
+405.32693 656.5
+408.54202 616.1
+427.53073 799.6
+435.69907 610.5
+440.75433 596.4
+468.91483 659.1
+478.11029 724.5
+482.64786 603.2
+500.64740 773.8
+532.38184 2086.2
+533.87494 626.4
+549.13959 661.5
+630.38464 840.6
+676.67767 923.8
+692.46594 2320.3
+693.46014 739.7
+706.83270 720.0
+712.79572 700.5
+746.82001 716.7
+757.27515 717.8
+795.97638 1276.5
+1057.30432 828.4
+1188.31079 968.7
+1197.85950 3290.5
+1394.60010 836.4
+1463.66394 603.9
+1509.36450 594.9
+1559.20618 654.0
+1870.23022 885.1
+1872.87207 762.6
+1876.13562 941.5
+1879.09949 1790.7
+1879.34521 2227.4
+1879.62134 19800.1
+1880.21973 1437.8
+1907.16345 7398.9
+1919.21021 840.8
+1930.52234 1030.8
+S	3967	3967	1907.6085746
+Z	2	3813.369
+Z	3	5719.551
+525.71222 569.8
+532.42517 1969.5
+563.81342 615.8
+630.39496 858.5
+676.69177 840.8
+941.47339 604.4
+1053.11438 658.0
+1057.30481 933.2
+1197.95471 3340.3
+1525.38672 847.9
+1560.13684 552.2
+1653.46655 718.4
+1870.24475 1042.5
+1879.05493 1039.6
+1879.64539 20018.0
+1881.08423 879.6
+1907.17737 8030.3
+1907.73718 707.6
+1930.55420 1008.3
+S	3969	3969	711.836407933
+Z	2	1421.825
+Z	3	2132.234
+188.17801 601.4
+188.21832 629.6
+188.25696 566.5
+188.26634 797.5
+188.28722 576.7
+188.29869 1043.7
+188.31287 811.8
+188.32484 703.8
+188.33597 754.9
+197.69279 742.4
+198.99232 729.3
+199.29134 897.7
+199.36882 836.9
+199.38821 2182.8
+199.40927 1203.1
+199.41600 894.3
+199.48523 548.4
+199.50394 669.1
+199.57695 574.7
+233.40042 534.6
+245.59410 580.3
+261.27490 667.4
+271.79178 644.8
+296.02646 726.2
+297.61511 605.3
+330.43646 711.3
+357.74252 667.9
+372.02139 650.5
+387.12268 589.6
+389.01981 627.1
+408.35886 664.4
+447.80673 648.1
+482.64502 724.8
+532.39343 1547.8
+554.05206 610.6
+564.05774 609.8
+599.82721 692.4
+630.40582 764.1
+676.68384 1046.2
+692.46423 3623.3
+742.63690 831.8
+782.30536 700.1
+795.96362 1453.9
+975.43555 692.9
+1018.62708 597.8
+1023.09125 809.5
+1147.51196 689.6
+1188.28320 922.8
+1197.87903 3371.2
+1264.01917 609.9
+1270.56042 685.8
+1298.07678 639.0
+1426.72229 630.7
+1456.53540 613.7
+1483.15564 583.7
+1525.41248 914.2
+1617.15234 655.0
+1705.57507 637.6
+1743.66687 824.2
+1879.22571 1784.9
+1879.65466 19333.3
+1879.89722 2828.1
+1880.10132 1203.0
+1880.26880 878.0
+1883.12659 619.2
+1906.56946 885.6
+1907.11462 7412.5
+1919.18274 852.8
+1930.58032 991.0
+S	3970	3970	1907.61299127
+Z	3	5719.564
+Z	2	3813.378
+532.41443 1560.4
+592.92908 716.5
+602.47827 600.1
+676.67859 938.3
+702.03320 625.9
+719.39832 805.3
+795.94684 1098.5
+798.81543 715.4
+827.44202 621.3
+1010.70160 573.3
+1019.62549 970.9
+1057.30347 790.4
+1197.92725 2675.5
+1202.68640 687.0
+1210.39990 724.8
+1525.42932 915.1
+1878.88367 789.6
+1879.03088 1028.0
+1879.64233 19690.4
+1880.10291 1059.8
+1880.57092 1077.9
+1881.26990 817.1
+1906.56213 847.1
+1907.06995 7263.1
+1930.57507 1179.0
+S	3971	3971	725.898407933
+Z	3	2174.42
+Z	2	1449.949
+188.26326 528.2
+188.26956 754.1
+188.27818 1155.6
+188.28842 1030.1
+188.29532 769.5
+188.30437 821.3
+188.32007 766.1
+198.79478 697.8
+198.99188 943.9
+199.27908 824.7
+199.28868 580.2
+199.32137 651.7
+199.35548 1057.6
+199.36659 1169.5
+199.37621 2824.0
+199.38834 1281.4
+199.40315 932.1
+199.47389 913.0
+210.93512 606.6
+220.26733 617.5
+221.13766 660.9
+235.13312 1016.7
+243.47974 560.4
+247.20511 2749.1
+248.20761 1603.1
+252.54799 657.3
+261.15353 630.4
+271.12964 562.3
+280.16171 751.4
+280.18332 671.0
+291.23117 8838.0
+292.23459 10166.6
+293.23691 1787.1
+299.18417 1317.7
+300.18747 923.2
+306.32755 556.2
+309.19098 1731.7
+310.35974 579.6
+317.24713 1223.8
+318.24918 978.6
+335.25787 3641.0
+336.26114 3897.2
+337.26129 861.6
+343.21289 790.9
+353.21646 1828.8
+354.22061 1225.7
+366.82401 640.0
+368.37888 609.1
+388.23898 698.0
+389.86029 610.4
+391.24222 571.6
+392.69437 701.4
+398.24643 1421.2
+406.30353 679.5
+425.17429 618.9
+427.54688 880.4
+442.27078 830.1
+442.32571 703.7
+456.47885 695.9
+486.34705 1029.5
+501.64188 592.2
+519.22540 591.2
+530.37677 1320.9
+532.38623 1916.9
+574.40076 2269.9
+575.40668 984.9
+579.33496 2088.4
+580.33929 8309.2
+581.34149 2411.3
+586.78302 677.6
+589.35236 613.1
+600.41864 1233.8
+618.42773 5303.6
+619.42859 2018.1
+662.45313 7336.3
+663.45630 2574.3
+676.67346 1017.3
+705.47595 2542.4
+706.48010 168272.7
+707.48248 53830.4
+708.48383 3773.0
+795.95215 986.9
+882.03455 654.3
+892.95154 650.4
+990.64526 699.2
+1153.50769 753.6
+1188.13110 910.9
+1197.85718 3386.3
+1282.01880 689.0
+1468.68262 667.9
+1525.44592 716.6
+1878.55884 1077.2
+1879.16663 1965.9
+1879.62036 19630.0
+1879.92761 1377.5
+1880.16809 1313.5
+1880.67371 1265.5
+1884.86890 735.0
+1904.05786 847.6
+1907.06372 7535.1
+1930.60303 1115.9
+1940.20593 662.6
+S	3973	3973	1880.0588246
+Z	2	3758.27
+Z	3	5636.901
+505.21378 598.8
+532.36847 577.8
+532.40741 2114.0
+628.02997 551.5
+676.64734 924.8
+676.71252 731.4
+746.49951 783.2
+795.96173 1119.6
+832.78070 663.0
+858.03870 854.7
+873.85468 597.5
+1018.02911 664.5
+1057.33752 709.2
+1143.27515 610.4
+1191.94177 742.3
+1197.90649 3539.4
+1285.34717 745.7
+1296.85547 645.8
+1357.15564 632.1
+1535.90063 631.0
+1696.78015 711.3
+1733.11609 594.7
+1766.20166 620.2
+1875.83130 652.0
+1876.30396 724.8
+1877.40759 806.6
+1877.97864 792.1
+1878.93982 803.0
+1879.66650 18069.3
+1880.44177 959.7
+1880.98767 1199.5
+1881.80383 713.1
+1907.20935 6997.9
+1930.60315 1168.4
+S	3974	3974	1907.4848246
+Z	2	3813.122
+Z	3	5719.179
+532.39563 1976.3
+549.32458 585.6
+567.77954 615.7
+593.30200 742.1
+630.41229 799.0
+777.26184 681.8
+779.78949 781.0
+795.96234 991.2
+809.77277 644.6
+825.85120 583.1
+937.46405 538.9
+938.14178 659.8
+948.15643 614.5
+1004.54767 624.0
+1019.62421 689.1
+1057.30334 906.7
+1094.21777 573.2
+1197.88171 2863.3
+1198.05896 1036.1
+1525.48962 791.4
+1667.33350 843.3
+1766.30627 592.0
+1777.26855 1068.3
+1861.26135 651.4
+1877.01526 692.0
+1879.09961 1957.4
+1879.30811 1530.5
+1879.64063 19938.1
+1880.22266 1561.4
+1881.33521 660.4
+1907.13538 6999.3
+1909.13586 740.4
+1930.61572 961.6
+1959.81372 649.4
+S	3975	3975	713.801407933
+Z	2	1425.755
+Z	3	2138.129
+188.25468 745.6
+188.26344 952.4
+188.28369 1245.3
+188.29373 1056.3
+188.30470 719.9
+188.31161 1036.5
+190.60661 556.0
+198.99170 1004.0
+199.28032 846.8
+199.29024 793.4
+199.31677 643.8
+199.33702 669.7
+199.35385 1141.9
+199.37914 2170.7
+199.38795 1858.0
+199.41078 593.9
+199.47662 916.1
+214.52344 666.2
+233.58101 638.4
+242.07130 553.7
+271.77612 654.5
+294.38672 588.4
+300.65686 600.3
+301.11337 582.2
+321.79276 659.3
+324.24960 656.1
+328.63824 666.2
+336.34357 689.9
+347.42871 589.6
+370.90262 634.3
+394.19574 671.7
+437.66611 735.7
+459.27652 787.9
+482.62546 905.7
+482.66614 804.0
+532.37213 1683.5
+538.03839 617.9
+667.57233 790.9
+676.68079 1072.3
+741.47418 704.3
+795.96759 1064.2
+806.26123 545.2
+806.30469 560.6
+986.14124 803.6
+1019.64526 618.9
+1103.85352 607.6
+1197.84351 2969.4
+1395.91296 599.8
+1525.44800 731.2
+1594.61389 753.2
+1659.95227 709.2
+1876.44287 801.9
+1878.44543 788.9
+1878.98706 1445.9
+1879.61426 19620.4
+1880.26416 1625.3
+1907.18884 7095.6
+1930.66174 1075.5
+1954.47217 644.7
+1974.87585 774.5
+S	3977	3977	1880.06040793
+Z	3	5636.906
+Z	2	3758.273
+532.36829 1847.6
+583.54333 639.8
+625.41260 606.7
+676.66107 874.6
+731.18457 639.0
+972.21899 716.2
+1057.27563 1130.8
+1079.52161 744.5
+1124.91650 647.6
+1197.81726 3465.1
+1323.95300 825.5
+1525.48743 697.0
+1607.20276 662.0
+1655.62305 793.4
+1661.21692 627.1
+1879.18738 2587.7
+1879.59265 19765.7
+1880.06921 2357.1
+1880.46765 854.5
+1881.24146 826.7
+1907.20276 7382.3
+1919.11450 729.9
+1930.71021 979.4
+1955.23376 640.0
+1964.57581 751.5
+S	3978	3978	1907.5538246
+Z	3	5719.386
+Z	2	3813.26
+523.20618 572.7
+532.36127 1608.7
+543.05908 643.4
+545.24261 662.4
+620.02716 608.2
+676.66724 792.9
+676.74677 683.6
+730.09863 578.8
+731.14001 689.0
+745.78967 697.1
+894.87067 656.8
+1006.40393 639.3
+1020.74329 638.8
+1057.29797 876.9
+1140.30957 775.2
+1197.80591 3749.4
+1327.61255 679.0
+1375.89661 612.6
+1451.36975 702.8
+1496.11877 562.5
+1525.46570 833.9
+1672.27087 643.2
+1725.37207 687.7
+1777.00928 951.2
+1778.63379 743.0
+1801.41296 680.5
+1879.24634 1734.7
+1879.61182 19588.7
+1880.29114 1303.4
+1881.33850 607.9
+1907.18054 7605.0
+1919.13367 900.7
+S	3979	3979	713.8008246
+Z	2	1425.754
+Z	3	2138.127
+185.01314 578.8
+188.25966 776.5
+188.27205 1087.4
+188.29701 1143.2
+188.30797 895.6
+188.32193 853.2
+190.74435 672.5
+199.28418 889.7
+199.35974 1586.4
+199.37961 2238.5
+199.38963 2079.3
+199.47870 778.9
+199.48633 653.0
+199.53989 527.7
+208.10762 693.3
+208.23204 573.1
+214.64296 593.4
+219.74298 602.1
+256.95279 567.5
+274.40106 653.5
+280.18008 661.4
+281.83841 601.2
+303.50745 570.8
+305.80182 601.9
+308.80051 574.4
+325.59055 667.5
+327.19568 911.1
+331.71884 672.6
+351.70313 664.1
+371.22437 793.9
+372.55750 783.7
+427.53809 860.9
+431.09491 716.0
+459.27670 1092.3
+518.23950 661.4
+532.37634 1800.5
+579.34137 736.1
+591.36151 724.3
+591.90674 597.9
+612.47894 595.6
+627.87280 1237.7
+630.39069 843.3
+652.40778 847.3
+667.38855 850.6
+676.69727 878.3
+681.45624 686.5
+689.96570 1198.9
+695.38763 1398.8
+696.42780 930.7
+731.12561 703.8
+740.45410 859.9
+767.43469 663.3
+784.48743 1720.9
+828.51190 1497.8
+908.96289 636.3
+939.66510 954.7
+982.68201 1411.6
+1009.67792 782.4
+1020.83472 635.3
+1026.71411 2734.8
+1027.71204 1011.8
+1034.44543 805.1
+1070.73682 2805.3
+1072.75476 665.2
+1097.72913 824.6
+1114.76416 2166.5
+1115.77148 1715.3
+1158.79041 2038.4
+1159.78455 1275.5
+1185.79871 853.9
+1188.14612 860.9
+1197.83887 3301.0
+1202.81396 2344.6
+1203.83582 928.6
+1246.83655 1136.2
+1273.54456 598.8
+1312.88464 743.4
+1371.86365 664.2
+1552.11890 738.9
+1726.54541 705.8
+1876.37415 598.2
+1877.20447 709.8
+1878.69507 1229.4
+1879.31140 2901.1
+1879.67249 19286.7
+1880.08057 2812.9
+1882.19775 736.0
+1907.14063 7140.7
+1930.56262 1087.9
+S	3981	3981	1880.1128246
+Z	3	5637.063
+Z	2	3758.378
+532.42218 1669.9
+635.61432 764.7
+676.67389 935.5
+721.75183 582.9
+795.96320 1047.4
+1097.33081 576.7
+1122.06091 599.2
+1129.90808 621.4
+1197.94434 2852.3
+1208.61548 624.0
+1536.16992 654.0
+1766.48047 895.2
+1815.50293 694.3
+1859.21985 731.0
+1876.15503 846.3
+1878.66162 991.4
+1879.34485 3133.5
+1879.61279 19154.0
+1880.42761 891.2
+1907.12354 7659.9
+1944.70703 659.4
+1975.31433 691.6
+S	3982	3982	623.782407933
+Z	3	1868.072
+Z	2	1245.717
+168.73940 784.4
+171.46024 571.8
+188.18111 629.0
+188.19518 779.7
+188.21173 525.5
+188.21854 486.4
+188.22766 683.0
+188.24429 844.0
+188.26942 724.3
+188.28667 520.9
+188.29378 620.0
+188.30981 786.2
+188.32837 576.4
+189.00278 630.5
+198.99257 933.4
+199.27911 645.3
+199.29608 803.8
+199.34743 746.4
+199.36794 842.3
+199.37883 1117.5
+199.38664 1580.1
+199.39665 1667.9
+199.40851 676.3
+211.98926 636.4
+236.85268 740.1
+245.90785 577.6
+255.74483 632.8
+256.10223 651.6
+270.49127 576.9
+270.54523 635.4
+272.50296 766.6
+293.18802 674.6
+298.54300 543.8
+340.86038 622.1
+355.59464 597.0
+366.59106 613.7
+390.01697 632.0
+396.75403 631.2
+407.75333 719.7
+427.56693 691.8
+429.96179 678.3
+432.29822 650.7
+490.16559 675.0
+491.29361 562.5
+532.60083 1902.0
+532.66785 790.3
+535.30939 1792.7
+547.73413 591.1
+579.33569 2059.1
+604.41101 11301.7
+605.41370 1942.7
+676.66516 860.0
+860.34955 651.8
+1010.58142 707.4
+1019.66400 863.8
+1182.33276 723.6
+1198.33594 3154.7
+1267.95300 624.2
+1275.11426 597.8
+1441.36548 718.5
+1489.59094 613.9
+1875.91370 588.9
+1876.22461 740.8
+1878.34631 745.0
+1878.60962 902.9
+1878.95349 1522.8
+1879.29504 2474.4
+1879.62219 19182.7
+1880.92395 1411.5
+1881.32385 632.2
+1907.19629 7450.8
+1930.69458 1234.7
+S	3985	3985	1880.04940793
+Z	2	3758.251
+Z	3	5636.873
+521.74652 642.8
+526.29639 594.3
+532.41400 1651.8
+566.71906 524.0
+600.11163 629.3
+611.98865 669.9
+615.27069 702.9
+630.38306 906.2
+676.65820 1313.4
+701.03168 645.6
+704.54474 642.2
+731.09564 705.0
+761.22491 677.3
+780.06488 631.6
+781.53162 653.4
+790.75403 605.0
+1046.91748 589.3
+1057.27441 1162.7
+1096.31921 605.1
+1197.91846 2822.2
+1222.07251 676.6
+1292.05811 626.6
+1342.32312 687.1
+1371.70178 735.2
+1544.84631 837.4
+1763.65674 705.9
+1870.34290 1094.1
+1878.55127 536.9
+1878.75012 789.0
+1879.10364 1858.1
+1879.60156 19985.3
+1879.91016 1220.5
+1880.09753 1524.4
+1907.17261 6801.9
+1919.24854 658.9
+1930.55725 936.4
+S	3986	3986	667.809407933
+Z	2	1333.771
+Z	3	2000.153
+174.81078 623.9
+179.21307 646.8
+184.07396 523.7
+188.23892 771.6
+188.25945 1333.7
+188.27557 2113.0
+188.29375 2216.7
+193.54843 569.3
+197.37155 525.4
+198.99275 876.3
+199.30579 855.7
+199.35382 578.9
+199.35881 651.4
+199.37013 1412.3
+199.38025 2374.4
+199.39293 948.0
+199.47725 761.2
+199.50253 635.2
+205.66467 619.6
+208.53239 648.6
+229.60835 700.7
+249.24637 674.3
+259.94992 702.3
+268.77289 738.4
+271.47678 657.3
+272.74496 580.6
+276.39154 698.9
+303.74359 629.9
+308.51038 532.2
+308.75183 641.3
+312.25522 616.4
+346.50601 662.3
+372.25763 607.4
+397.24332 931.5
+413.14713 710.8
+423.32254 758.9
+427.08994 668.6
+427.54276 842.2
+444.52802 629.6
+482.64444 793.9
+532.41968 2105.3
+596.87964 596.5
+623.36035 1231.1
+647.43683 1338.0
+648.43823 3541.1
+676.67468 1153.8
+699.42578 601.6
+732.56860 764.4
+813.46008 665.7
+924.94745 677.0
+1019.67554 826.8
+1070.72559 822.6
+1197.93542 3481.0
+1209.43298 707.2
+1243.12122 626.6
+1325.61389 688.2
+1381.17566 639.2
+1489.55750 567.1
+1569.19922 746.3
+1776.98169 863.0
+1876.56799 723.0
+1878.21997 1046.4
+1878.85840 1584.9
+1879.26611 1350.2
+1879.63953 19054.2
+1879.98315 1749.1
+1880.42456 1164.6
+1906.92871 1880.2
+1907.21155 6483.7
+1930.41541 724.2
+1930.58972 695.9
+S	3987	3987	623.7828246
+Z	3	1868.073
+Z	2	1245.718
+170.96158 563.0
+177.11211 677.3
+188.26820 878.9
+188.27893 750.2
+188.28619 1057.3
+188.30110 1156.2
+188.31276 661.7
+188.32578 625.2
+198.99533 772.1
+199.27971 791.9
+199.34232 747.7
+199.36702 1740.2
+199.37781 1396.2
+199.38736 1117.5
+199.39812 1203.6
+199.46400 671.1
+199.51007 572.0
+202.53604 558.6
+215.23949 570.5
+231.08772 509.4
+246.76059 520.1
+252.50269 657.5
+255.30530 1319.3
+271.47409 687.6
+272.68597 663.9
+292.76816 528.8
+297.99969 677.8
+338.60175 664.1
+339.69305 582.9
+425.59030 580.3
+427.56912 671.8
+434.30685 590.7
+453.84824 650.9
+482.68872 1053.6
+500.29987 567.1
+532.35608 1940.1
+535.30945 1275.6
+543.30603 749.8
+547.32721 679.2
+579.33618 1322.6
+604.41223 9725.2
+605.41089 1245.0
+676.68414 1189.3
+694.11768 531.0
+795.96985 688.5
+873.26550 696.5
+925.31171 561.1
+939.87354 590.1
+954.62451 577.1
+963.46442 771.9
+975.87402 533.5
+975.93622 554.6
+1041.74500 603.8
+1131.70508 582.0
+1188.28174 977.5
+1197.79773 3538.6
+1683.44019 664.3
+1775.58545 634.4
+1800.32092 704.2
+1878.42468 1617.9
+1878.94495 1675.5
+1879.32849 3447.4
+1879.64929 19270.0
+1880.00183 2566.9
+1880.39575 1197.6
+1907.11401 7063.1
+1930.71362 867.1
+1944.91882 628.9
+S	3989	3989	1880.01699127
+Z	2	3758.186
+Z	3	5636.776
+532.34576 773.8
+532.39679 2091.5
+540.55487 661.4
+557.73920 696.3
+676.62482 941.2
+676.66498 1090.1
+771.42322 627.2
+795.98340 964.0
+825.55804 647.6
+860.27173 677.4
+1004.65900 605.3
+1103.79541 756.0
+1187.95190 972.1
+1197.88928 3141.3
+1289.51917 635.2
+1367.10901 563.1
+1379.81299 686.6
+1411.20532 645.7
+1515.81714 645.8
+1858.48267 645.6
+1872.82581 887.0
+1877.16382 751.7
+1878.64026 766.7
+1878.87708 1051.7
+1879.63171 18840.5
+1879.90991 3212.8
+1880.38977 1854.3
+1880.67957 1190.2
+1881.11511 1074.9
+1881.80884 724.2
+1907.07898 7085.6
+1907.36536 1651.0
+1930.72351 1023.3
+1981.38550 681.0
+S	3990	3990	667.809407933
+Z	3	2000.153
+Z	2	1333.771
+187.10762 544.0
+188.23389 632.7
+188.24080 567.3
+188.26277 881.9
+188.27924 757.3
+188.29042 828.2
+188.31352 679.9
+188.34918 595.9
+198.99416 643.7
+199.28316 737.0
+199.29070 799.6
+199.34395 668.4
+199.36006 1378.1
+199.37971 1781.7
+199.39096 1198.2
+199.40338 1505.9
+199.50127 1011.0
+215.30911 630.2
+220.99593 578.1
+230.26602 624.6
+241.01619 786.3
+254.33038 526.6
+256.77151 687.7
+262.35355 702.0
+290.68668 555.5
+322.52026 606.0
+342.29715 823.4
+427.56989 683.2
+433.08649 711.3
+471.67297 650.8
+482.65604 884.6
+493.55234 760.2
+494.94162 718.6
+502.94373 704.0
+516.88531 657.9
+532.40521 1723.7
+539.09430 561.1
+549.19226 823.6
+589.44690 660.2
+648.43744 5338.0
+676.65399 748.3
+676.68512 720.6
+767.18591 701.6
+823.05621 555.7
+866.79181 687.9
+877.13434 616.6
+1060.65125 724.8
+1197.89844 3365.2
+1373.58850 733.0
+1411.93274 644.9
+1444.39282 653.3
+1602.38318 696.2
+1776.93396 811.9
+1870.21667 619.9
+1878.73083 885.8
+1879.00928 1281.5
+1879.65295 17397.8
+1880.35181 1452.7
+1880.91785 967.6
+1882.05835 942.5
+1907.09888 7050.3
+1907.56311 717.2
+1930.73938 838.1
+1961.91931 659.5
+S	3991	3991	1907.5568246
+Z	3	5719.395
+Z	2	3813.266
+532.38721 2004.0
+676.66522 1044.8
+708.96930 659.7
+781.14471 662.2
+865.01367 575.3
+1051.38562 697.7
+1057.28809 927.6
+1127.13135 554.9
+1197.86084 3442.4
+1511.06323 728.8
+1695.02222 660.0
+1776.96326 940.9
+1870.16003 930.8
+1877.96069 1178.1
+1878.93286 841.6
+1879.60791 19873.2
+1880.18958 1171.9
+1881.25024 1238.0
+1907.19568 7037.7
+S	3993	3993	661.871241267
+Z	3	1982.338
+Z	2	1321.895
+171.60477 884.6
+177.11148 3368.5
+187.17087 871.9
+188.19069 992.0
+188.23264 1049.0
+188.24516 1227.9
+188.25218 1311.8
+188.27112 845.9
+188.28754 1469.9
+188.30135 972.6
+188.31377 1041.6
+188.32401 1210.1
+188.34239 1281.0
+199.28238 1302.6
+199.32768 1087.6
+199.35974 2844.5
+199.37146 1653.8
+199.38211 2597.6
+199.41574 984.3
+199.45724 852.9
+199.49734 883.5
+202.41348 798.8
+217.89688 945.6
+221.13782 1663.3
+226.09767 921.5
+235.13321 1829.2
+247.20502 7875.8
+255.32002 1025.7
+260.62973 849.0
+265.16376 2778.5
+265.58102 929.8
+271.48776 991.4
+273.22067 1769.0
+279.15994 1236.3
+281.91998 925.1
+283.17285 1185.2
+291.23102 25771.5
+299.18414 2696.7
+308.93738 1337.5
+309.19025 2139.9
+317.24719 1694.2
+319.58725 932.2
+327.20227 1609.0
+335.25690 6801.6
+339.19971 1095.9
+342.31274 1613.7
+343.21027 2040.9
+350.31375 902.7
+353.21503 3218.6
+371.22482 2163.0
+381.54227 978.8
+397.24228 1901.2
+398.23593 1002.1
+403.23132 1196.3
+415.25238 4103.6
+415.52881 1047.7
+433.94635 925.4
+438.60974 1065.6
+439.52322 905.9
+447.25778 2008.8
+459.27716 3301.0
+461.83743 1163.1
+481.37112 1101.5
+482.71432 1396.4
+485.30176 1137.4
+485.34467 1747.6
+491.28384 1837.1
+503.30478 3787.8
+504.30505 1180.4
+529.37280 1514.5
+532.34589 3177.0
+535.30939 11724.8
+547.32837 3783.1
+549.87152 1124.7
+573.39685 5964.9
+575.34247 3215.5
+575.84705 2331.9
+591.35522 6272.4
+592.35931 1532.2
+615.41437 2703.7
+615.91278 3257.6
+617.42340 9143.0
+628.08112 915.0
+635.38232 6096.8
+636.38538 1383.5
+637.42584 4163.7
+637.92505 3977.4
+638.42450 1211.8
+676.66626 1579.0
+691.75269 890.3
+718.97363 887.8
+723.79877 977.9
+731.21155 1131.4
+815.55804 1114.3
+833.57904 2870.7
+834.58691 1263.5
+877.60596 3385.8
+878.60394 3215.5
+917.48505 903.5
+921.63605 4837.4
+922.63354 3129.3
+949.30359 954.3
+965.65814 4601.3
+966.66266 3765.4
+1002.50006 934.0
+1009.68372 4935.5
+1010.68909 3947.3
+1053.71582 3580.2
+1054.72107 2899.7
+1097.74695 3967.4
+1098.74158 2466.8
+1116.42932 1018.9
+1141.76782 3235.1
+1142.77698 1519.0
+1195.90479 1004.4
+1197.77490 4996.2
+1213.87402 1149.1
+1242.39624 1115.2
+1323.45056 1019.9
+1667.41162 1170.2
+1763.67188 1243.9
+1876.20239 1399.9
+1878.61401 1280.7
+1879.27710 1601.6
+1879.61560 30695.7
+1879.95374 1489.0
+1880.65527 1471.1
+1906.92957 1818.5
+1907.21777 10738.5
+1908.05212 909.8
+1930.83630 1447.6
+S	3994	3994	1880.0618246
+Z	3	5636.91
+Z	2	3758.276
+520.28436 633.6
+532.33838 2491.9
+630.41882 969.7
+676.67212 904.4
+720.47394 612.7
+731.13867 696.8
+758.01105 710.7
+795.96649 1085.2
+1057.29834 790.8
+1140.13037 685.2
+1197.75635 3358.9
+1253.49109 621.8
+1397.47437 680.3
+1460.57129 625.1
+1583.40442 726.8
+1597.14783 642.9
+1877.57483 749.9
+1878.95227 871.7
+1879.64673 18884.1
+1879.96948 3960.1
+1907.23694 6977.1
+1927.49414 796.4
+1930.62085 880.6
+1946.02576 615.4
+S	3995	3995	1907.5548246
+Z	2	3813.262
+Z	3	5719.389
+532.36444 1760.9
+550.46313 628.4
+571.69739 600.6
+630.40656 771.3
+644.45496 699.7
+654.14838 587.9
+676.69165 1096.3
+791.78802 731.6
+795.96039 1023.7
+858.06750 667.1
+860.67395 594.0
+938.74231 638.0
+1057.33325 706.1
+1104.23987 633.4
+1197.81067 2840.5
+1335.73401 655.6
+1659.19482 596.9
+1867.45398 677.2
+1876.21997 853.3
+1878.63159 1049.4
+1879.07031 960.2
+1879.37268 2007.3
+1879.67273 19854.8
+1880.19470 734.3
+1880.87793 1080.9
+1907.18115 7192.2
+1930.62598 1139.6
+S	3997	3997	661.870991267
+Z	2	1321.894
+Z	3	1982.338
+177.11171 2914.9
+188.20366 1035.7
+188.21889 1084.1
+188.25314 929.1
+188.27286 1448.1
+188.28474 937.8
+188.30145 1678.4
+188.32504 1071.4
+188.33533 1093.4
+188.34367 1463.8
+188.36105 1202.6
+198.99356 1507.5
+199.28036 1190.7
+199.37939 5808.7
+199.40121 1879.5
+199.40857 1600.6
+199.47928 1561.6
+221.13794 2348.9
+231.12384 1211.5
+235.13148 2011.2
+237.53584 1027.0
+243.13850 963.0
+247.20488 10111.6
+265.16513 1334.8
+289.25165 2649.5
+291.23114 29085.9
+299.18445 2477.9
+309.18906 2913.8
+315.58740 1038.8
+317.24670 2503.3
+327.19934 2104.4
+335.25681 7567.9
+343.21164 1301.0
+353.21490 2689.0
+371.22543 3445.5
+373.00024 1018.1
+397.24451 1471.5
+415.25229 3523.7
+432.34732 1268.5
+439.68799 992.8
+441.26877 1286.3
+447.25763 1919.4
+459.27997 3916.8
+485.34174 1639.6
+491.28668 2322.7
+503.30432 2939.9
+524.95551 1202.7
+529.37201 3200.3
+532.32654 3525.9
+535.30939 13221.1
+536.31201 1161.6
+547.33020 3072.2
+573.39795 6425.5
+575.34344 2643.2
+575.84467 2186.9
+591.35559 3927.9
+592.36469 2049.2
+615.41339 2140.4
+615.90997 2225.2
+617.42450 11063.3
+635.38428 4354.7
+637.42462 3984.2
+637.92493 3632.4
+639.84418 1097.6
+643.46222 1345.3
+664.09308 1308.1
+676.68457 1711.9
+679.41101 1605.2
+701.43927 1081.7
+709.37354 1038.0
+795.97247 1547.1
+833.58044 2269.9
+834.58459 2164.7
+850.91046 978.4
+862.48462 1008.2
+877.61047 2666.9
+878.60870 2672.1
+900.51202 1182.2
+921.63049 3218.0
+922.63892 2941.8
+926.33118 1035.0
+943.09814 1546.3
+965.65857 4207.4
+966.66168 4057.1
+981.37640 1073.2
+1009.67963 3620.3
+1010.68878 4234.5
+1053.70801 2979.3
+1054.70569 3717.5
+1057.30847 1549.4
+1097.74634 3078.8
+1098.74402 3689.5
+1141.78528 1711.8
+1197.73132 5412.4
+1204.67859 1353.2
+1268.90369 1262.2
+1467.11499 1042.3
+1525.54297 1456.9
+1547.95227 1122.6
+1582.54761 1098.0
+1644.90649 1216.8
+1653.16992 1051.3
+1776.88306 1084.3
+1876.00452 1347.0
+1876.96338 1037.1
+1879.00354 1928.3
+1879.17151 2882.5
+1879.65430 32554.2
+1880.28711 2685.5
+1907.20117 11424.4
+1930.76111 1197.6
+1974.78931 1103.6
+S	3998	3998	1880.0628246
+Z	3	5636.913
+Z	2	3758.278
+532.41620 2058.0
+577.97754 745.2
+607.13879 598.3
+652.59125 609.9
+731.12830 695.8
+775.45636 639.8
+795.95123 879.4
+1019.65527 836.6
+1049.42505 747.1
+1057.29163 765.1
+1140.31531 699.4
+1197.93335 3413.1
+1411.98914 858.7
+1438.24475 547.3
+1512.68359 606.8
+1877.89502 748.6
+1879.60339 18395.0
+1880.41882 1169.7
+1880.67993 719.7
+1907.18433 7671.0
+1930.50244 660.3
+S	3999	3999	855.0018246
+Z	2	1708.156
+Z	3	2561.73
+227.42310 631.8
+227.51714 564.9
+231.79887 573.2
+239.79877 581.2
+247.38940 540.8
+249.04602 690.4
+254.77068 615.9
+291.23077 2495.2
+344.73026 711.8
+349.07733 665.6
+350.33017 709.3
+368.24652 617.6
+445.54114 554.7
+448.07278 625.7
+532.39630 1819.1
+595.85541 673.8
+610.45575 675.8
+676.67059 1017.1
+703.63556 640.2
+772.71594 695.7
+793.53046 2841.6
+794.52710 1152.0
+837.55353 4478.7
+858.10608 809.6
+1053.98865 1065.7
+1054.49316 1638.2
+1055.01038 1014.4
+1104.03564 755.5
+1128.13330 739.1
+1129.02173 746.7
+1197.88599 3474.5
+1201.52783 721.2
+1216.00415 607.6
+1221.03210 699.7
+1244.91577 547.1
+1301.35840 593.6
+1303.08691 688.9
+1525.47852 1079.3
+1628.55505 659.9
+1776.10303 658.5
+1776.92676 787.4
+1821.58777 682.2
+1870.15161 967.5
+1879.22888 2357.7
+1879.60242 19819.6
+1879.96851 1908.2
+1880.18945 1219.7
+1907.17102 7671.2
+1907.45642 1013.4
+1907.67322 787.5
+1930.62927 843.3
+S	4001	4001	661.871241267
+Z	2	1321.895
+Z	3	1982.338
+170.45271 567.5
+177.11172 1418.6
+188.20747 609.2
+188.23331 1133.1
+188.24516 564.8
+188.26613 754.3
+188.29169 947.6
+188.30983 653.3
+188.32388 894.2
+188.33601 669.9
+188.34467 546.9
+188.36009 649.5
+188.37311 558.9
+188.38292 732.8
+194.51463 558.4
+198.99344 1064.1
+199.29259 583.0
+199.34013 723.6
+199.35895 1456.6
+199.37054 1000.0
+199.37953 1456.4
+199.39676 1804.5
+199.41246 1072.6
+199.49385 772.5
+199.51053 645.7
+214.12744 578.2
+221.13783 1315.2
+233.43230 611.2
+235.13101 900.3
+238.66515 889.5
+247.08463 608.4
+247.20512 2903.8
+247.47433 674.1
+265.16565 1154.5
+267.17709 761.5
+268.89621 623.0
+279.15842 687.5
+280.16107 899.9
+283.36295 585.9
+289.25217 944.0
+291.23117 15074.0
+299.18637 1389.6
+309.19006 1922.5
+315.18045 902.3
+317.24655 1296.8
+327.20154 2466.2
+335.25647 3649.5
+339.19992 1138.7
+343.21054 1126.6
+350.30978 801.4
+353.21548 1599.0
+354.79041 672.9
+355.22879 616.9
+371.22745 2392.7
+381.33148 704.4
+383.22745 1005.5
+391.67267 702.0
+397.24124 1540.7
+403.23044 844.4
+403.99689 728.6
+406.35425 582.4
+415.25275 2644.8
+427.50836 1003.7
+441.26575 1173.3
+447.25912 847.7
+459.27731 2844.0
+460.27905 1064.2
+479.14548 639.5
+491.28424 1306.1
+503.30508 2739.7
+529.36938 1469.2
+532.44830 2013.9
+535.30951 6673.9
+547.32849 2818.2
+548.33557 1065.7
+549.11029 720.9
+553.07806 652.4
+573.39807 3225.2
+575.34344 2518.1
+575.84558 1096.0
+591.35620 3455.3
+592.35980 1318.5
+593.39771 766.6
+615.41156 1925.9
+615.91400 2532.4
+617.42297 5215.9
+630.35834 1061.3
+635.38147 3520.4
+636.38446 1354.8
+636.49969 720.0
+637.42297 2751.8
+637.92584 3777.6
+638.42859 971.5
+661.21960 686.1
+676.66437 689.7
+679.41003 1547.1
+723.43555 1984.7
+724.43646 1382.3
+731.06775 1212.6
+739.63965 714.7
+767.45776 886.8
+789.55164 932.4
+795.96484 1084.3
+833.58563 1781.6
+834.58173 1108.5
+836.19519 665.9
+877.60785 2853.7
+878.60760 1664.2
+921.63049 3566.5
+922.63660 2663.9
+965.65936 3911.8
+966.66205 3620.9
+1009.68695 4129.6
+1010.68506 2011.0
+1011.68506 934.9
+1019.71918 688.2
+1053.71106 4004.8
+1054.71252 2985.4
+1097.73438 3267.5
+1098.74170 3160.4
+1141.75879 1574.7
+1142.75745 1909.6
+1185.79895 935.2
+1198.00452 3808.2
+1224.51990 616.5
+1442.82056 678.3
+1566.39990 646.3
+1650.98010 713.8
+1663.71814 737.2
+1680.54333 636.1
+1775.61670 730.8
+1816.51587 667.7
+1877.56909 876.9
+1878.91663 1560.0
+1879.63171 20462.6
+1880.09839 2316.3
+1880.43823 1191.4
+1907.21155 8016.0
+1977.17944 646.6
+S	4002	4002	1907.54599127
+Z	3	5719.363
+Z	2	3813.244
+532.44531 2120.8
+547.31775 588.4
+549.15051 719.7
+550.08679 578.2
+610.91321 552.0
+644.37067 545.3
+662.68292 550.4
+665.12311 550.3
+676.68005 1009.6
+693.28003 569.1
+741.06732 705.1
+766.85107 689.0
+795.96008 1257.5
+803.01697 586.7
+885.25714 591.9
+1011.92206 583.6
+1057.30847 803.1
+1197.99963 3334.3
+1238.65820 612.8
+1430.64587 618.4
+1870.29419 1024.1
+1873.26929 658.6
+1878.11267 665.8
+1878.39331 705.3
+1878.57495 924.9
+1879.28906 3583.3
+1879.64575 19443.7
+1879.98645 3080.8
+1880.72253 843.1
+1881.00757 966.7
+1881.19629 860.1
+1907.14978 7279.8
+1907.41211 828.1
+1930.55981 798.3
+1947.93945 651.3
+S	4003	4003	667.8098246
+Z	3	2000.154
+Z	2	1333.772
+175.95862 873.3
+188.24901 644.4
+188.27390 955.2
+188.29102 1052.1
+188.30487 1261.2
+198.99423 946.9
+199.28511 704.0
+199.30423 728.3
+199.35001 653.3
+199.36710 1323.0
+199.38411 2269.1
+199.40236 1121.9
+199.48282 887.8
+206.66539 567.5
+207.16473 600.8
+215.48639 621.8
+239.77968 602.9
+252.55421 563.1
+258.66348 683.2
+280.54498 612.4
+306.83514 613.4
+342.27667 874.7
+366.87762 590.7
+371.22815 717.9
+396.17490 689.3
+398.14056 607.8
+408.48898 641.7
+415.25528 768.2
+427.85068 525.8
+431.63715 644.1
+449.84802 621.2
+459.27667 967.5
+493.47568 629.2
+532.47113 1695.1
+547.32703 831.8
+554.08221 535.4
+586.45093 598.4
+595.85358 726.1
+608.37927 774.1
+611.05438 650.6
+623.91974 828.6
+635.38312 1212.2
+637.43256 671.1
+645.93854 1049.1
+648.43683 1056.2
+652.39996 889.0
+661.23883 676.9
+696.43658 744.7
+740.46350 1390.8
+779.17889 687.6
+795.96893 732.0
+802.05334 542.9
+858.06000 684.1
+877.59418 939.1
+899.90332 610.3
+921.63916 835.4
+938.66071 2146.7
+965.65729 1422.0
+982.68512 2612.2
+1009.68884 928.4
+1010.76178 698.3
+1026.71289 2656.4
+1027.71582 747.2
+1053.71021 686.1
+1070.73975 2712.3
+1071.74255 810.1
+1114.76794 1222.9
+1158.78040 1217.7
+1159.82117 641.3
+1188.32935 777.6
+1197.88013 548.2
+1198.04321 3288.0
+1241.78674 613.5
+1337.71619 660.7
+1525.41382 960.0
+1776.82556 815.3
+1794.34180 753.0
+1860.12610 749.4
+1873.19995 748.7
+1878.18115 624.8
+1879.61035 18647.6
+1880.22119 1271.6
+1881.02478 955.2
+1907.17712 7456.2
+1915.59363 629.2
+1930.66064 767.4
+S	4005	4005	661.871241267
+Z	3	1982.338
+Z	2	1321.895
+184.73256 12192.7
+188.20241 11618.5
+188.20874 12396.1
+188.24670 15890.7
+188.25879 15704.8
+188.27094 15590.9
+188.27773 10707.8
+188.28639 12819.4
+188.29492 12474.6
+188.30762 17815.7
+188.32285 21032.7
+188.33499 12837.2
+188.34431 19693.8
+198.99756 18685.8
+199.26068 15403.8
+199.28258 18909.5
+199.30324 15906.8
+199.33269 21839.9
+199.35313 20124.5
+199.37523 30833.3
+199.38046 50365.3
+199.40266 21910.3
+199.41167 22566.8
+199.42177 23881.8
+199.47855 17812.2
+213.35313 16324.6
+254.22400 15368.7
+259.80698 13840.1
+291.23022 23563.9
+295.61667 17654.7
+299.50467 22171.3
+301.67593 11838.9
+307.75323 11662.0
+355.89276 12592.9
+373.80841 19191.7
+381.34854 14427.1
+387.28516 12664.6
+400.50470 14044.4
+410.01511 13968.0
+471.07526 13720.8
+494.84369 14162.5
+498.60507 13921.6
+501.37338 12620.4
+532.44696 40124.1
+549.15082 19945.6
+560.15283 15282.2
+610.91168 11914.2
+630.41339 20662.3
+638.49304 13380.5
+646.10266 14014.2
+655.44763 13391.3
+676.66919 21497.1
+706.30011 11943.5
+749.05725 15273.9
+779.87933 13700.7
+782.77264 12735.5
+830.29230 14789.7
+833.26959 13595.1
+844.34119 16456.7
+853.00769 17547.6
+965.73828 12736.4
+979.28992 14013.4
+1027.48413 14888.0
+1188.32239 17043.3
+1197.99902 73024.5
+1260.94934 14837.8
+1282.73767 13342.5
+1394.43054 13502.6
+1469.41919 15269.7
+1478.82813 15123.3
+1667.47681 22085.5
+1670.85168 16127.8
+1772.19495 16932.2
+1875.89392 17530.1
+1877.75098 23403.4
+1878.73169 21414.5
+1879.07666 20095.3
+1879.61853 444350.3
+1880.49768 20047.9
+1889.28894 13937.8
+1906.50464 16772.2
+1907.19006 156600.6
+1919.17249 16004.5
+1930.59082 21658.6
+1991.99536 16008.1
+S	4006	4006	1880.07399127
+Z	3	5636.947
+Z	2	3758.3
+511.85294 626.4
+532.42865 1934.1
+630.42426 723.2
+649.42157 592.1
+654.18201 614.3
+663.49786 613.3
+676.69513 951.9
+794.14832 617.0
+795.97009 914.3
+812.64948 592.6
+820.51483 613.5
+829.52643 575.9
+1197.94788 3375.3
+1325.61707 748.0
+1525.41724 667.7
+1775.02734 660.0
+1870.24915 652.8
+1878.07690 671.0
+1878.45422 801.0
+1878.75623 1393.2
+1879.68250 18610.1
+1879.96899 3339.5
+1880.75000 1105.8
+1881.55823 971.6
+1907.15991 6936.1
+1930.65601 919.5
+1986.65271 618.9
+S	4007	4007	1907.5085746
+Z	3	5719.251
+Z	2	3813.169
+532.41656 1578.8
+557.89636 717.8
+581.45905 681.5
+591.81244 576.8
+620.41058 791.6
+636.38770 660.7
+646.93945 630.9
+676.62543 607.3
+676.66327 619.6
+731.12817 894.4
+764.38916 601.7
+787.70691 562.5
+795.96765 1085.5
+856.86786 755.7
+910.99207 535.5
+1019.66559 754.8
+1192.37512 663.0
+1197.93445 3355.6
+1373.16077 647.0
+1644.86499 692.5
+1776.88696 763.1
+1878.84302 1012.4
+1879.60291 18424.0
+1879.89233 3942.8
+1880.38342 1301.0
+1880.63843 1138.8
+1907.18018 6707.5
+1930.62500 958.8
+S	4009	4009	661.8715746
+Z	2	1321.895
+Z	3	1982.34
+175.89644 593.5
+176.59483 694.6
+177.11090 1152.2
+188.18312 703.5
+188.22701 625.2
+188.24091 538.0
+188.24957 624.3
+188.28625 917.5
+188.30266 739.7
+188.31091 848.3
+188.32321 1033.6
+188.33667 898.9
+188.36534 953.1
+198.99564 727.4
+199.25839 533.3
+199.27817 790.9
+199.35518 855.7
+199.36235 925.2
+199.37630 2229.9
+199.38670 1008.5
+199.41454 667.7
+199.47440 948.1
+199.56767 605.4
+199.58380 693.0
+207.10172 613.7
+214.51947 566.6
+221.13751 995.8
+224.22310 617.9
+224.90390 618.0
+235.13184 1208.8
+247.20502 5966.3
+255.29681 591.6
+263.91196 605.4
+265.16315 840.3
+266.75952 681.6
+271.47037 758.9
+273.22058 1009.5
+279.15976 804.5
+280.18320 750.3
+283.17343 1020.5
+289.25116 1229.4
+291.23111 21283.9
+292.23419 1239.3
+299.18335 1522.5
+309.18979 1604.1
+315.18008 963.4
+317.24701 1119.8
+335.25726 4701.8
+342.27148 727.8
+343.21078 903.9
+350.27963 779.7
+353.21588 1401.5
+371.22644 1057.0
+381.36115 637.7
+397.24200 1012.3
+403.22839 1215.0
+415.25229 1215.2
+427.54926 778.6
+441.27051 1226.8
+441.32245 1288.7
+447.25714 1026.1
+452.43860 656.6
+459.27533 1194.3
+480.35757 672.6
+485.34488 1128.4
+491.28375 1929.2
+503.30469 1401.5
+529.37427 1583.8
+532.36322 2100.7
+535.30994 8252.8
+547.32843 1572.8
+549.16229 713.9
+557.98523 640.4
+573.39819 5003.5
+575.84259 1387.2
+583.02826 861.5
+591.35803 1862.8
+612.28583 586.7
+615.91498 1205.9
+617.42395 7185.4
+618.42200 887.9
+630.41565 665.6
+632.16650 654.3
+635.38446 1362.1
+636.38379 1060.5
+637.42633 1712.0
+637.92078 674.7
+643.46582 906.1
+676.69501 612.6
+679.40979 838.1
+704.99316 668.3
+723.43567 1018.1
+724.44257 794.7
+768.46417 988.9
+795.97205 918.6
+849.42578 796.7
+858.39606 593.5
+877.60229 890.9
+921.63220 2043.3
+922.62982 1215.6
+965.66095 1969.5
+966.66504 1812.3
+1009.68066 1942.7
+1010.69293 1857.4
+1053.70166 984.7
+1054.71301 1307.4
+1057.32947 637.0
+1082.15186 634.9
+1083.38708 642.0
+1097.74316 1353.5
+1098.73877 1665.0
+1141.79211 686.1
+1185.95325 688.3
+1187.72888 785.2
+1188.08118 793.0
+1197.81104 3016.1
+1341.30566 683.5
+1431.87903 811.9
+1504.05981 629.7
+1641.19421 683.2
+1663.90662 600.6
+1878.07922 1045.1
+1879.05359 1229.7
+1879.64600 16803.5
+1880.08875 2792.4
+1881.34058 583.8
+1881.50720 634.1
+1882.01514 1032.2
+1907.06055 7334.8
+1919.15674 813.6
+1930.61707 982.4
+S	4010	4010	1907.58340793
+Z	2	3813.319
+Z	3	5719.475
+532.35419 1887.8
+549.15112 720.7
+560.27039 674.2
+564.99249 637.4
+759.63568 605.6
+786.80371 547.0
+795.95740 1140.5
+826.04901 644.8
+1041.08618 599.1
+1042.14014 619.1
+1045.15918 757.5
+1064.38269 638.1
+1098.14539 660.3
+1197.78479 3407.2
+1244.37341 677.8
+1415.86230 649.7
+1525.90308 627.5
+1776.96277 937.0
+1849.14185 655.4
+1863.38940 706.6
+1879.01794 1358.0
+1879.65381 19540.1
+1880.58130 723.5
+1880.97278 1087.9
+1887.75989 613.6
+1907.05054 7349.9
+1930.58643 832.3
+S	4011	4011	573.819241267
+Z	2	1145.791
+Z	3	1718.182
+156.87712 625.4
+165.09120 1206.3
+169.54837 560.0
+172.09589 533.9
+177.11160 1237.9
+188.25128 738.9
+188.26207 962.8
+188.26888 966.1
+188.27722 1286.3
+188.28827 1449.8
+188.30176 1549.9
+188.31551 1098.0
+188.32994 557.0
+199.27330 926.6
+199.28665 768.4
+199.31331 763.4
+199.35410 1905.0
+199.37030 1935.1
+199.38361 1970.8
+199.40588 664.4
+199.45396 589.9
+199.46919 1088.1
+199.48065 694.6
+212.02634 580.1
+219.89301 626.8
+221.13794 960.3
+226.71346 520.8
+233.56978 835.7
+235.13275 1955.5
+238.61493 565.6
+239.14746 609.2
+240.86597 555.4
+242.67006 637.5
+247.20529 4255.9
+252.62085 608.5
+255.64207 547.7
+263.10355 563.0
+266.10760 660.2
+266.82419 581.9
+271.33435 897.5
+289.25156 992.8
+291.23111 27210.8
+306.29465 506.4
+308.89551 849.3
+309.18893 914.6
+315.17920 979.2
+317.24652 1567.0
+324.08975 677.7
+327.19989 908.2
+335.25732 4594.5
+342.26758 601.1
+343.21194 558.6
+353.21423 606.1
+359.20599 3763.3
+371.22672 711.4
+403.23203 2582.5
+434.92609 573.3
+447.25778 17607.3
+459.28055 759.1
+471.74521 561.8
+485.34659 4563.9
+487.29239 1262.9
+503.30511 865.6
+526.00562 610.1
+529.37170 4698.4
+532.33936 2067.0
+547.33240 1290.9
+555.40845 977.3
+635.38623 776.2
+676.66534 1195.7
+689.02148 599.8
+701.50049 669.6
+745.52478 901.4
+789.54639 885.4
+793.76978 534.6
+795.96942 880.2
+833.58472 1129.2
+856.21851 690.8
+877.60834 1326.8
+890.77368 587.0
+894.56238 570.9
+921.63843 668.0
+965.65839 1077.7
+1021.88867 631.0
+1035.05054 565.7
+1081.28711 603.6
+1197.75488 3043.0
+1353.31018 620.6
+1525.39026 785.6
+1541.96521 591.2
+1677.62000 748.1
+1696.44739 554.6
+1757.53687 602.2
+1877.61975 779.1
+1878.98279 1248.1
+1879.24854 1106.9
+1879.60449 20240.5
+1879.96289 1370.2
+1880.20911 1063.6
+1882.16907 872.3
+1907.14294 7339.8
+1930.59351 788.7
+1953.41223 592.5
+S	4013	4013	1880.0618246
+Z	3	5636.91
+Z	2	3758.276
+532.36115 1630.6
+553.67755 572.4
+561.10303 613.7
+630.37128 636.2
+736.85803 578.1
+758.49963 587.1
+760.47864 639.1
+795.97260 872.2
+820.10071 559.2
+846.77557 594.8
+918.05579 616.0
+1067.78235 693.9
+1140.15967 669.2
+1179.69055 645.5
+1197.80737 3468.6
+1236.89844 604.8
+1239.94055 630.8
+1417.68604 620.3
+1525.42554 796.8
+1667.26318 682.6
+1815.70825 653.3
+1835.74048 742.5
+1878.64233 1333.4
+1878.84656 1588.6
+1879.39465 5301.4
+1879.64185 17675.1
+1880.36780 1381.4
+1880.71106 1487.8
+1880.99048 1098.5
+1906.87732 848.0
+1907.14966 6868.6
+1930.60876 955.7
+1971.74988 574.4
+S	4014	4014	661.870991267
+Z	3	1982.338
+Z	2	1321.894
+174.91206 650.0
+177.11153 1021.1
+177.37679 548.1
+186.36092 591.7
+186.91995 581.0
+188.24860 595.4
+188.26276 991.5
+188.27827 659.4
+188.29411 594.7
+188.32495 632.5
+188.33859 613.4
+188.34558 717.7
+188.35168 618.8
+189.23439 505.6
+195.38895 638.5
+198.99397 1009.0
+199.31174 744.9
+199.34740 786.3
+199.36566 1525.4
+199.37625 986.1
+199.38622 1355.3
+199.39415 638.5
+199.41289 1438.2
+199.43170 909.6
+199.47040 591.7
+212.22009 632.0
+214.20062 713.6
+224.24789 541.0
+235.13266 802.9
+247.20503 5465.5
+253.45772 610.7
+265.16333 784.5
+273.20291 750.2
+273.39386 811.9
+276.54520 594.3
+278.80261 560.9
+289.25229 1311.8
+291.23114 16271.1
+305.17325 587.5
+308.90454 833.2
+317.24759 974.9
+325.15680 658.2
+330.61551 678.5
+335.25745 3420.1
+343.21115 1286.5
+353.21497 923.0
+355.60788 683.2
+365.00851 655.5
+371.22739 1052.3
+412.44678 589.4
+427.55017 719.6
+429.99222 725.0
+446.71588 551.5
+447.25726 796.2
+459.55676 703.0
+459.71841 595.9
+471.27838 669.6
+482.65967 815.0
+485.34555 1269.4
+529.37292 1011.0
+531.82605 702.1
+532.38062 1710.2
+535.31000 7879.1
+547.33093 745.0
+549.16577 1006.8
+573.39728 3452.8
+575.34253 975.0
+583.02881 2429.3
+591.35211 905.2
+592.35260 594.9
+615.91248 1131.7
+617.42395 5503.0
+635.38098 2044.0
+637.41986 1258.1
+637.92938 1163.9
+676.66571 868.3
+680.40057 573.9
+695.38324 675.4
+723.43134 933.9
+724.43713 686.5
+733.62213 744.6
+750.72485 812.3
+767.46033 990.5
+864.80585 558.3
+917.52014 579.5
+921.62360 788.6
+922.63654 1038.8
+965.66077 1473.5
+966.66327 908.2
+1009.68866 1728.6
+1019.65839 787.3
+1020.78253 661.2
+1053.70728 1514.1
+1057.28198 697.2
+1097.73547 1495.3
+1098.74512 911.3
+1141.78906 800.7
+1142.78064 647.6
+1146.79858 645.8
+1188.31531 652.9
+1197.84717 3092.8
+1446.83740 743.1
+1679.89124 681.2
+1727.31287 633.1
+1877.22827 642.9
+1877.30713 632.6
+1878.08289 673.1
+1878.91406 1682.7
+1879.16992 1418.5
+1879.62646 19669.3
+1880.31250 1720.1
+1881.15479 894.0
+1895.77661 762.0
+1907.15747 7168.5
+1907.57678 1083.6
+1997.75598 698.0
+S	4015	4015	1907.3014246
+Z	5	9531.468
+532.45752 1839.8
+659.93378 564.4
+676.67468 891.7
+720.15442 563.1
+731.08179 597.6
+779.61005 796.6
+881.56879 569.2
+976.24384 569.9
+977.53363 831.0
+1125.08691 688.1
+1198.02466 3273.7
+1240.67285 592.4
+1491.28467 690.3
+1590.79382 665.7
+1604.87024 602.7
+1776.89844 664.5
+1863.63733 653.4
+1878.85669 1005.9
+1879.09973 859.8
+1879.63586 20278.9
+1880.15723 1142.6
+1882.86853 635.3
+1906.94934 1250.1
+1907.22961 7210.0
+1930.55798 765.1
+S	4017	4017	1880.05124127
+Z	2	3758.255
+Z	3	5636.878
+532.41937 1561.1
+599.09430 650.5
+660.68866 620.2
+700.18427 562.5
+780.17444 742.4
+892.92932 622.0
+1027.96228 630.2
+1051.53284 552.6
+1057.30359 725.5
+1197.93213 3366.3
+1215.23865 730.0
+1384.58008 729.6
+1466.28540 584.6
+1860.11487 843.3
+1870.34241 737.1
+1877.42419 800.4
+1878.87817 1215.7
+1879.08936 1148.8
+1879.26697 1007.6
+1879.64380 19583.0
+1879.98840 1303.8
+1880.16077 1414.7
+1880.71790 773.1
+1880.93982 580.7
+1881.94922 679.5
+1882.24719 769.1
+1907.14868 7186.5
+1930.55151 784.0
+1988.91333 681.8
+S	4018	4018	661.871991267
+Z	3	1982.341
+Z	2	1321.896
+177.11174 825.1
+187.90067 569.8
+188.16321 557.4
+188.19632 510.9
+188.23004 747.7
+188.28210 738.2
+188.29759 919.0
+188.31033 772.6
+188.32176 553.1
+188.36307 608.2
+198.99092 815.8
+199.31209 826.2
+199.35507 1151.4
+199.36282 1249.3
+199.37375 1086.9
+199.39256 2339.6
+199.42461 625.8
+199.49008 954.6
+199.53038 796.9
+203.12772 573.2
+236.93240 513.0
+247.20544 3047.9
+251.81946 597.1
+256.75177 630.5
+273.21915 691.7
+275.64600 719.3
+277.62143 694.4
+282.99258 582.9
+284.56219 544.0
+291.23117 12876.2
+299.18381 1486.0
+301.96875 601.4
+307.74277 571.1
+309.18839 1102.5
+317.73801 598.0
+335.25674 3202.4
+344.65179 590.9
+366.00131 706.4
+381.36496 839.7
+387.11920 667.8
+400.71182 525.2
+463.31412 617.1
+473.34180 676.6
+482.66547 668.3
+491.27832 880.1
+532.39471 1794.8
+535.31000 4697.1
+540.25946 682.2
+547.32996 717.9
+549.17108 764.7
+573.39722 3135.6
+575.84729 940.7
+583.02869 2947.4
+602.59271 654.8
+617.42365 3742.8
+637.42480 997.5
+727.55188 764.1
+731.13092 671.5
+767.46906 817.0
+795.95349 1130.2
+831.82581 613.5
+833.58179 810.9
+878.61029 645.5
+887.68823 567.2
+910.09296 741.7
+921.63287 1208.3
+952.43207 622.5
+997.23682 731.7
+1009.69055 1071.2
+1057.30859 620.9
+1066.41968 728.0
+1097.72168 751.7
+1141.76453 762.3
+1185.56396 649.2
+1197.87683 3139.6
+1389.45813 671.8
+1702.19336 661.0
+1799.91541 720.2
+1875.65417 932.3
+1878.60608 1317.9
+1878.76257 1261.9
+1879.19604 1055.3
+1879.63257 19360.0
+1879.91528 1750.2
+1880.06665 1564.0
+1880.36707 1474.6
+1907.18567 7156.4
+1930.61584 806.2
+S	4019	4019	1907.62940793
+Z	3	5719.613
+Z	2	3813.411
+532.31042 827.7
+532.37738 2028.5
+549.16156 824.5
+623.52930 546.4
+751.02075 700.1
+795.96924 1337.4
+824.15863 732.8
+843.05469 645.2
+876.86304 594.1
+987.43744 695.8
+1020.80493 647.1
+1057.33911 861.3
+1188.23987 821.2
+1197.84558 2964.0
+1282.53992 554.9
+1369.36499 655.9
+1489.67444 763.8
+1574.97144 646.0
+1860.07288 739.3
+1877.39038 657.7
+1878.92712 1110.3
+1879.24756 1797.5
+1879.72412 18202.9
+1880.19116 2326.3
+1880.50317 1619.5
+1880.77161 856.3
+1882.35754 1025.8
+1907.16357 7366.7
+1930.64294 1062.2
+S	4021	4021	1880.0948246
+Z	3	5637.009
+Z	2	3758.342
+532.37567 1856.6
+634.76483 610.7
+676.65503 1124.9
+795.96814 896.7
+1019.54602 871.0
+1057.28210 750.7
+1080.95691 676.5
+1197.84106 3063.9
+1805.93005 674.0
+1860.05664 961.4
+1876.92078 918.0
+1878.73059 1268.9
+1879.58716 19167.8
+1879.89526 2383.0
+1880.43359 1079.2
+1880.76550 695.6
+1881.32434 898.8
+1882.29492 742.8
+1907.16602 7576.0
+1930.68457 591.9
+S	4022	4022	1907.61199127
+Z	3	5719.561
+Z	2	3813.376
+532.35657 2116.9
+676.67950 1160.3
+687.48407 637.8
+795.95245 816.2
+881.51233 666.4
+890.15607 693.2
+931.26892 522.0
+1011.45251 640.7
+1057.29895 1038.1
+1184.85828 643.9
+1188.31152 786.5
+1197.79456 3217.8
+1438.85120 648.6
+1448.38074 688.5
+1525.53674 641.8
+1712.01331 630.1
+1878.27954 890.2
+1879.18701 2214.8
+1879.35571 1285.9
+1879.63269 19613.3
+1880.10193 1705.9
+1881.06360 765.8
+1881.39197 994.0
+1887.39563 664.9
+1906.98645 2161.0
+1907.24719 7034.7
+1930.79883 840.0
+S	4023	4023	491.311407933
+Z	3	1470.659
+Z	2	980.775
+136.89188 595.2
+152.53625 597.2
+172.31097 625.8
+188.24693 750.5
+188.25743 704.6
+188.26523 791.4
+188.27849 1201.1
+188.29581 1762.8
+188.30768 772.2
+188.31483 723.2
+193.73293 585.0
+196.96049 2260.3
+198.99423 768.7
+199.08958 678.9
+199.28532 927.0
+199.30521 481.9
+199.30917 476.7
+199.35980 1279.7
+199.38126 2340.4
+199.39146 691.3
+199.40184 1167.8
+199.41866 951.3
+199.47800 852.1
+204.65326 580.3
+213.39186 573.8
+221.03580 622.9
+235.43288 559.0
+251.81085 599.5
+260.17627 589.9
+271.47754 546.0
+294.93784 761.7
+298.57968 653.7
+317.13452 614.5
+318.33902 540.9
+352.48993 594.1
+364.43280 569.4
+400.98407 1272.9
+402.88040 589.7
+406.37039 545.7
+410.65524 543.4
+414.95914 608.5
+415.38660 611.3
+427.55960 865.4
+471.34323 770.3
+472.33224 731.5
+474.30902 636.2
+482.27350 781.9
+482.66794 787.9
+489.51260 601.3
+525.13824 544.2
+532.35083 2038.4
+550.47467 579.6
+676.66077 750.2
+701.51636 589.4
+731.14325 881.1
+740.15466 635.3
+778.82690 750.3
+795.97479 733.6
+803.48303 822.1
+810.06476 570.1
+817.79144 623.1
+851.98090 592.3
+904.66388 658.5
+944.48871 747.5
+994.78345 576.9
+1142.77710 573.1
+1179.68640 620.5
+1188.31250 610.2
+1197.77966 3285.8
+1440.06177 687.2
+1511.45056 588.0
+1525.44336 830.4
+1594.90247 555.3
+1878.57837 681.3
+1878.77832 826.7
+1879.58521 20098.2
+1879.87891 2292.8
+1880.32190 821.4
+1880.70923 707.3
+1906.84363 1358.0
+1907.11597 7395.7
+1930.65540 1093.7
+S	4025	4025	1880.03240793
+Z	2	3758.217
+Z	3	5636.822
+508.30142 669.8
+532.38629 2050.2
+561.16431 722.5
+573.75110 610.9
+598.22791 595.0
+612.96405 613.6
+621.28583 703.9
+630.38593 619.2
+640.41064 571.1
+653.08264 563.6
+731.11261 853.1
+793.54663 736.5
+795.96301 1190.3
+1057.31897 764.3
+1111.68860 635.2
+1197.86316 3477.4
+1308.25891 707.6
+1319.57629 638.5
+1328.85046 636.5
+1516.35034 606.9
+1525.38086 741.3
+1777.01282 628.0
+1797.22168 663.4
+1878.74414 652.7
+1879.35840 4598.5
+1879.64990 18734.5
+1880.45227 1409.5
+1880.79749 760.8
+1900.18591 846.9
+1906.30530 849.4
+1906.66528 599.5
+1907.05823 7533.6
+1930.55688 824.1
+1952.00415 646.2
+S	4026	4026	1907.50740793
+Z	2	3813.167
+Z	3	5719.247
+519.46735 627.0
+519.81348 717.0
+525.87201 628.8
+532.37872 1851.9
+538.64923 602.4
+549.11066 586.6
+558.01050 562.3
+592.08777 586.1
+610.61322 851.9
+622.86615 696.8
+630.35791 720.1
+671.84863 605.4
+676.69318 858.3
+795.94769 822.1
+910.42102 775.0
+978.78998 796.5
+984.44952 607.0
+1191.00830 619.7
+1197.85425 3242.1
+1722.36316 700.5
+1725.21582 585.0
+1727.86230 722.7
+1771.90552 710.2
+1844.04590 648.5
+1879.39392 5425.8
+1879.68994 18459.9
+1880.01697 4766.4
+1907.06433 7567.0
+1930.42114 883.4
+1967.66577 682.8
+S	4027	4027	1198.25240793
+Z	2	2394.657
+Z	3	3591.482
+350.28195 712.0
+354.36612 652.5
+359.69656 573.0
+381.44360 639.6
+384.95419 622.2
+387.78586 611.0
+427.49625 645.7
+452.71841 581.8
+500.27585 614.8
+532.37360 2316.3
+552.39386 637.2
+628.67249 660.3
+672.72913 668.0
+675.97937 673.0
+676.67670 655.5
+694.48175 631.4
+731.05200 700.2
+749.30408 630.1
+795.96582 788.6
+1035.97571 628.2
+1036.50708 603.0
+1104.90857 607.7
+1123.84656 592.1
+1197.83496 3506.9
+1367.21960 575.9
+1776.86707 756.5
+1878.52173 1224.4
+1879.05579 1910.2
+1879.27686 2107.2
+1879.65198 19479.1
+1880.03137 1401.7
+1880.25110 1507.2
+1880.84180 762.6
+1907.06079 7529.0
+1907.67249 640.0
+1919.11499 745.5
+1930.43103 935.8
+S	4029	4029	1879.85940793
+Z	2	3757.871
+Z	3	5636.303
+532.42859 1835.0
+549.17035 664.4
+629.65265 664.2
+676.64618 1069.2
+680.29401 694.7
+766.93323 635.5
+775.31274 626.1
+792.16797 601.4
+795.95288 1044.7
+800.37677 631.3
+809.78314 743.1
+935.08118 652.1
+945.29126 659.1
+977.35229 885.7
+1006.44879 680.1
+1057.25549 889.9
+1071.84692 575.0
+1197.95264 3378.3
+1423.88013 783.5
+1530.27356 604.5
+1718.21936 1581.9
+1844.40332 790.0
+1873.44629 643.8
+1879.55164 20511.5
+1879.96558 745.6
+1907.08936 7406.1
+1907.33313 744.2
+S	4030	4030	589.289991267
+Z	2	1176.732
+Z	3	1764.595
+157.59932 707.5
+165.73918 697.6
+169.48351 640.2
+169.49268 550.5
+171.64771 572.7
+172.75671 596.3
+173.62102 642.2
+174.14624 532.8
+188.21991 555.0
+188.22992 531.7
+188.24672 632.3
+188.26396 1429.3
+188.27817 2307.6
+188.29254 2304.5
+188.30904 1642.7
+188.31961 1549.1
+188.36612 582.4
+193.55052 501.7
+196.96008 783.8
+198.99399 1042.5
+199.34299 493.9
+199.35817 797.1
+199.37035 952.5
+199.37727 2332.2
+199.39420 1790.5
+199.41772 1061.1
+199.44244 706.5
+199.47539 1104.1
+212.40218 587.8
+260.14758 552.0
+262.60797 605.9
+271.48111 632.4
+290.84885 566.3
+330.45740 530.3
+335.92661 634.9
+350.29718 1008.2
+356.89886 584.9
+364.18414 566.3
+373.23129 563.3
+411.97546 578.5
+437.03329 681.7
+455.08319 550.9
+470.03970 779.4
+482.64020 1145.5
+486.80103 529.8
+514.91168 706.4
+520.20886 614.3
+528.04498 664.4
+528.78925 714.5
+532.44598 2196.7
+549.14020 866.8
+560.02826 696.0
+569.99268 664.9
+571.38214 1171.4
+616.69678 741.0
+628.45819 598.2
+630.39301 690.5
+668.81384 713.5
+676.66461 923.4
+731.10132 1051.6
+734.52069 631.6
+795.96759 1053.4
+819.89417 579.7
+1057.28308 929.6
+1197.99304 3472.0
+1269.95776 650.7
+1368.21399 570.5
+1375.03882 577.1
+1453.42542 571.0
+1525.36768 769.4
+1615.13696 575.9
+1682.38586 539.4
+1818.41882 638.4
+1874.75610 922.1
+1875.32532 675.0
+1879.00244 1238.5
+1879.60767 20543.2
+1881.50439 680.9
+1901.57275 617.7
+1907.14709 7672.5
+1930.53015 1092.0
+S	4031	4031	491.312991267
+Z	3	1470.664
+Z	2	980.778
+128.57695 579.6
+133.06720 553.5
+133.58444 548.1
+137.19873 597.5
+141.98225 562.8
+152.98778 496.5
+155.75755 627.5
+167.54059 566.0
+171.63892 692.8
+188.25266 565.1
+188.26915 1089.5
+188.28151 1453.9
+188.29295 1228.5
+188.31146 1140.8
+188.32257 854.6
+189.73712 568.6
+196.96086 2822.3
+199.25642 574.1
+199.30487 835.8
+199.35265 1461.6
+199.37021 1250.5
+199.37990 2011.2
+199.38974 1439.3
+199.40042 1389.4
+199.42516 649.7
+199.45114 635.7
+199.45654 588.1
+199.47926 813.2
+199.48666 654.3
+199.49802 936.2
+199.59618 563.6
+211.74631 524.4
+213.23051 558.8
+223.96959 552.3
+258.39078 606.4
+268.38190 583.5
+279.51974 561.4
+280.18533 746.8
+294.93777 875.5
+308.90549 557.7
+341.32108 541.4
+385.31860 722.7
+390.01605 585.0
+400.98410 1754.1
+422.74838 634.8
+447.23096 698.3
+471.30548 669.9
+482.66592 859.5
+489.01978 616.8
+502.68506 593.4
+517.28204 640.9
+532.40021 2178.8
+549.15759 720.4
+630.41632 653.5
+636.00549 673.4
+775.27850 711.4
+795.95367 958.2
+837.69501 565.8
+1019.63330 825.6
+1057.49255 540.3
+1076.62390 600.4
+1124.72803 649.4
+1140.03223 734.4
+1166.28650 607.2
+1197.89099 2997.7
+1244.28528 548.3
+1279.38599 582.3
+1505.01721 734.5
+1797.52295 676.3
+1872.18481 627.0
+1878.26550 662.6
+1878.95740 1269.5
+1879.73572 18006.3
+1881.44812 711.4
+1881.78967 755.9
+1907.10779 7076.5
+S	4033	4033	1880.08199127
+Z	2	3758.316
+Z	3	5636.971
+532.38745 1518.3
+597.36761 602.3
+627.79523 566.1
+630.39801 824.8
+676.70020 1005.5
+795.96521 849.9
+924.64429 692.4
+1146.56421 656.5
+1187.94275 709.7
+1197.86584 2712.1
+1327.28516 604.4
+1547.06653 678.6
+1571.47717 731.9
+1797.00891 880.5
+1875.48828 718.6
+1877.91711 1106.2
+1879.08533 1153.4
+1879.70886 18110.8
+1879.98340 3732.0
+1880.17615 1630.5
+1880.61902 999.4
+1881.39673 944.1
+1907.15295 7370.1
+1919.06995 857.9
+1930.58557 1014.1
+1932.97534 723.2
+S	4034	4034	1907.54724127
+Z	2	3813.247
+Z	3	5719.366
+532.42847 1543.2
+553.85583 605.8
+635.91748 587.6
+676.70636 782.0
+731.12238 661.4
+763.10638 604.8
+1042.02722 587.9
+1057.33264 921.2
+1141.86328 614.6
+1197.94556 3568.5
+1203.52710 641.4
+1443.99133 623.6
+1452.09949 715.4
+1527.38062 562.2
+1861.75208 571.6
+1877.47095 728.6
+1879.42725 6636.3
+1879.68555 17592.0
+1880.14270 3608.0
+1880.56677 1080.5
+1880.92078 881.2
+1881.39673 671.8
+1881.57959 622.9
+1881.96570 874.5
+1907.14319 7392.9
+1930.58435 903.7
+S	4035	4035	491.310991267
+Z	2	980.774
+Z	3	1470.658
+134.31056 598.3
+134.81685 598.6
+135.24387 481.7
+135.24603 493.6
+135.63118 587.0
+137.26225 541.4
+149.51964 459.5
+154.26677 467.5
+156.48331 558.2
+157.59598 701.1
+158.76279 495.5
+165.73779 693.3
+169.29372 514.9
+169.48619 867.2
+170.36366 524.9
+170.90392 561.5
+172.78624 532.0
+188.26128 977.7
+188.27098 995.1
+188.28140 1433.8
+188.29369 1171.7
+188.30463 977.0
+188.31406 760.4
+188.32227 686.9
+190.00198 633.5
+196.96066 3335.4
+198.99240 884.3
+199.27538 720.8
+199.27992 707.4
+199.30893 800.0
+199.37326 2664.2
+199.38620 818.9
+199.39339 916.4
+199.40546 690.0
+199.47009 842.2
+202.71843 587.9
+243.37599 558.2
+251.83334 551.3
+255.89444 529.5
+285.91312 603.8
+294.93823 1419.9
+299.17728 550.7
+301.89252 521.7
+310.75085 542.5
+311.06635 568.0
+320.79709 680.6
+381.34659 948.4
+400.98468 1849.2
+427.52118 907.5
+446.52890 743.5
+447.23016 1071.7
+459.28271 622.0
+471.34653 927.4
+480.29517 636.4
+482.63831 1038.8
+491.49652 585.5
+504.99063 602.1
+514.33289 562.4
+532.36993 994.6
+532.41010 1453.1
+532.44794 941.9
+613.66986 574.2
+630.38269 624.8
+655.38470 539.4
+676.69727 979.4
+732.38812 651.1
+1049.79529 527.1
+1197.35449 620.4
+1197.77747 813.2
+1197.91333 3322.4
+1221.99890 591.3
+1525.32556 669.8
+1777.52905 619.6
+1877.57068 634.1
+1878.12903 1477.3
+1878.83936 1153.4
+1879.10352 828.1
+1879.44019 3784.1
+1879.70056 19346.0
+1880.90137 1030.8
+1881.24084 998.2
+1881.86707 708.1
+1882.30017 793.3
+1907.16809 7524.1
+1908.25562 576.6
+1925.48389 588.9
+S	4037	4037	617.8478246
+Z	2	1233.848
+Z	3	1850.268
+157.60651 1043.6
+171.64478 1023.5
+177.11102 1239.2
+188.19203 887.6
+188.21466 1284.2
+188.25049 1219.6
+188.27277 962.8
+188.28517 1125.1
+188.29608 1138.1
+188.32593 1513.6
+188.34251 1253.8
+196.08311 904.0
+198.98969 1050.7
+199.28925 1281.8
+199.32944 1269.7
+199.36987 2232.3
+199.37401 1950.4
+199.38589 2676.6
+199.39749 2347.6
+199.41174 2538.1
+199.43456 1374.1
+199.46677 891.5
+199.47189 797.0
+199.48300 1224.6
+199.49568 904.8
+199.51047 930.0
+202.64879 816.7
+206.88564 818.6
+207.11028 789.6
+208.77744 863.1
+211.23489 929.9
+217.11951 836.8
+221.13750 1045.9
+223.15376 1112.6
+229.24519 993.4
+233.57758 1161.8
+245.08733 871.2
+247.20476 3680.9
+265.16367 1166.1
+273.40158 960.2
+291.23117 8058.0
+291.93219 1057.1
+308.90839 1241.5
+327.20044 1575.9
+335.25809 2210.8
+339.19879 1110.2
+353.21439 1325.2
+369.94968 815.5
+371.22635 2282.7
+392.52362 907.5
+394.30951 38092.2
+395.31311 16740.3
+396.31552 2213.1
+397.24240 1229.4
+412.31985 55682.0
+413.32309 20540.8
+414.32635 2208.9
+415.25226 2740.3
+430.33038 82057.4
+431.33374 27562.4
+432.33704 3558.6
+448.34073 86822.8
+449.34442 25951.4
+450.34744 2826.6
+459.27881 3177.1
+486.57336 1545.2
+491.28430 5526.5
+503.30453 3375.9
+529.36908 1963.0
+531.31622 2285.7
+531.81866 1972.8
+532.43207 3394.2
+547.33173 3509.2
+549.16821 1147.2
+557.15778 1187.9
+559.95819 1184.4
+561.37018 137492.0
+562.37323 68583.9
+563.37634 10682.0
+571.38489 3313.3
+573.39813 2867.1
+577.90320 1221.6
+579.38074 206897.0
+580.11060 1620.2
+580.38391 86915.9
+580.86560 1080.7
+581.38507 12850.1
+591.35425 3812.1
+591.67657 965.9
+592.35468 860.4
+593.39752 3781.9
+593.90332 1639.4
+595.84210 1696.5
+596.13086 1154.5
+597.39117 318676.4
+598.39404 106171.0
+598.94244 1826.8
+599.39532 14627.3
+641.65021 978.6
+649.73108 915.8
+676.75250 1292.9
+726.32379 1008.4
+729.36481 1335.3
+731.14020 938.6
+746.51788 1012.4
+753.48859 969.9
+789.55762 2245.5
+790.39825 919.7
+795.95667 1855.3
+833.57910 3048.4
+834.57568 1498.4
+864.64441 1123.7
+877.60815 4691.8
+878.61176 3015.9
+921.63306 4214.2
+922.63214 1346.1
+965.65582 2949.4
+966.66345 2411.6
+1009.68665 3010.0
+1010.68884 1791.0
+1053.71204 1726.9
+1057.39893 1271.3
+1188.14880 1077.1
+1197.96008 5182.0
+1213.07886 1113.3
+1267.92200 863.7
+1379.02673 979.8
+1441.64453 991.1
+1518.19458 1134.0
+1525.42871 1989.5
+1703.34399 1275.7
+1715.97046 1202.3
+1795.08167 1028.5
+1877.19592 1022.8
+1878.31799 1771.4
+1878.80469 1730.4
+1878.99402 1621.3
+1879.53491 9292.0
+1879.81189 27508.7
+1881.23853 2022.4
+1882.25317 1255.4
+1884.53357 977.3
+1907.12659 11765.4
+1919.09045 1252.4
+1930.62720 1487.0
+1982.68567 890.5
+S	4038	4038	1880.02940793
+Z	2	3758.211
+Z	3	5636.813
+532.47498 1998.0
+549.15582 797.6
+674.51428 740.4
+676.67371 871.8
+731.11462 870.9
+738.84723 641.9
+818.34387 645.0
+1017.33563 617.7
+1057.30627 878.7
+1198.06519 3503.6
+1232.65857 637.5
+1808.07825 629.7
+1811.50891 760.3
+1879.64038 20072.8
+1880.01257 1066.1
+1880.42542 979.2
+1881.09949 828.9
+1882.98779 876.7
+1886.62793 790.3
+1907.16284 7476.6
+S	4039	4039	529.794407933
+Z	2	1057.741
+Z	3	1586.108
+141.85942 608.9
+143.88484 631.8
+146.91237 507.4
+147.09018 553.7
+151.93271 507.1
+156.14467 564.5
+159.30952 547.8
+165.09178 628.6
+167.19528 552.5
+177.11119 743.7
+188.13989 495.1
+188.25890 847.3
+188.27306 1126.4
+188.28461 1076.9
+188.29436 1415.9
+188.29948 1135.3
+188.30894 731.9
+188.31544 1053.8
+198.99001 1088.6
+199.28726 669.0
+199.30434 738.8
+199.33859 826.9
+199.34726 822.3
+199.35922 1163.3
+199.37076 1523.3
+199.38493 1766.6
+199.39760 1252.3
+199.48468 1263.1
+203.51021 553.0
+210.87979 575.8
+214.66515 609.5
+222.46976 540.1
+239.14751 631.4
+247.20532 3411.7
+252.48483 598.3
+260.50473 600.5
+271.31717 606.5
+280.16785 739.7
+283.17102 913.8
+291.23114 6091.5
+307.80359 629.2
+315.17932 1578.9
+327.20206 887.9
+335.25705 4323.6
+350.29840 650.4
+359.20435 1384.3
+371.22775 1070.7
+403.23196 13516.0
+404.23648 1013.9
+427.51462 933.9
+428.35782 519.7
+430.86151 967.9
+431.05594 1011.3
+443.26578 1756.4
+443.77103 770.3
+459.27957 1017.4
+476.17258 593.9
+483.32825 696.2
+485.34616 1358.4
+513.39465 503.6
+532.52716 2142.5
+549.11298 747.8
+630.36871 742.5
+663.32770 679.3
+665.82220 672.7
+673.21027 679.6
+700.96442 615.7
+701.50580 1006.7
+729.36365 824.0
+731.06360 787.9
+745.52869 1451.9
+789.55969 1046.9
+795.95288 717.5
+833.57880 1407.3
+857.99011 740.4
+895.91528 548.2
+1057.21362 603.3
+1057.30518 657.9
+1155.92957 581.7
+1198.17493 3324.4
+1215.59558 586.0
+1253.18811 560.7
+1496.52063 675.0
+1525.32214 918.6
+1537.75122 730.3
+1596.67456 653.6
+1617.68701 598.6
+1704.56116 585.3
+1729.93628 672.0
+1777.27795 787.5
+1877.27527 644.8
+1878.63367 1261.6
+1879.65332 18743.4
+1879.91101 3832.6
+1880.70679 979.9
+1880.95251 1216.7
+1882.51489 614.5
+1882.82263 577.6
+1907.15991 7804.7
+1930.48157 1159.7
+1955.13721 709.5
+S	4041	4041	1880.03424127
+Z	2	3758.221
+Z	3	5636.827
+532.45673 1725.6
+572.14099 626.9
+604.21100 745.1
+626.91876 582.9
+630.46301 804.1
+658.20911 579.5
+676.67639 980.3
+795.98181 834.5
+892.31873 585.9
+992.95477 656.4
+1057.31885 788.3
+1198.02490 3707.1
+1264.71252 630.2
+1342.40967 553.9
+1591.45935 579.5
+1777.17041 761.8
+1877.19543 670.0
+1878.43604 921.0
+1879.03687 1122.8
+1879.34351 2922.7
+1879.63855 19684.5
+1880.85938 962.8
+1907.16821 7145.3
+1930.67517 783.0
+S	4042	4042	1907.5678246
+Z	2	3813.288
+Z	3	5719.428
+532.47229 2175.7
+560.43616 636.9
+584.77948 610.5
+630.44116 710.3
+676.66864 1092.6
+686.77289 670.7
+731.15875 736.0
+768.96606 710.7
+795.96375 870.9
+1027.21216 611.2
+1048.73645 580.7
+1079.47461 649.0
+1198.05762 3211.9
+1313.47974 594.1
+1450.82581 586.3
+1650.90015 644.5
+1876.40417 751.3
+1879.14917 1600.8
+1879.61560 19969.1
+1880.09619 1659.2
+1907.10803 7232.9
+1933.16699 692.1
+S	4043	4043	574.4068246
+Z	1	573.399
+158.44554 618.1
+165.09026 797.2
+165.73969 662.7
+174.52707 574.1
+180.08107 605.6
+188.26505 1033.9
+188.27652 1087.1
+188.28751 1294.5
+188.29445 1235.6
+188.30408 1439.0
+188.31387 740.6
+188.32195 891.1
+197.88608 562.6
+198.99168 961.7
+199.28914 670.6
+199.33884 844.2
+199.35530 817.9
+199.36537 499.6
+199.37648 2645.1
+199.38570 1338.5
+199.39452 1518.3
+199.47412 747.9
+202.63722 559.2
+205.88170 575.0
+219.24359 688.6
+221.13759 975.3
+235.13133 1320.0
+247.20505 5633.6
+255.15906 1129.2
+271.34274 711.2
+273.21982 893.2
+279.67853 770.9
+289.21448 1033.6
+289.25137 1010.9
+291.23114 23092.8
+309.18768 713.0
+314.15887 593.6
+315.17709 785.6
+317.24768 1305.5
+335.25690 4191.8
+347.35883 664.0
+357.09064 596.0
+359.20612 3288.8
+372.22617 658.3
+392.58536 635.6
+403.23193 2862.0
+415.25211 820.6
+447.25781 19877.9
+459.28189 856.0
+482.64215 949.5
+485.34567 3468.2
+503.30743 1316.9
+529.37256 5217.8
+532.44202 2020.2
+547.33087 885.9
+549.12634 926.0
+580.91815 801.7
+676.69714 1356.3
+745.53278 666.8
+780.28387 675.5
+789.56165 849.0
+795.95825 1262.6
+833.57581 774.9
+877.60944 860.8
+921.63818 855.0
+965.65802 839.9
+1021.08160 796.0
+1057.34619 737.4
+1188.28210 745.7
+1191.62878 697.8
+1197.98022 3287.5
+1224.02759 619.6
+1277.34570 624.6
+1281.54077 681.3
+1459.38428 619.2
+1525.32458 720.6
+1543.81702 576.8
+1589.46606 643.9
+1715.13196 595.6
+1750.12292 668.0
+1774.57434 728.8
+1777.12830 616.2
+1869.89954 755.7
+1876.57910 539.1
+1878.66443 703.4
+1879.39526 4442.1
+1879.68420 18933.7
+1880.35034 1891.9
+1880.73523 735.5
+1881.08667 745.5
+1881.36377 591.6
+1882.32690 713.8
+1907.15674 7755.5
+1930.51868 825.3
+S	4045	4045	617.848407933
+Z	2	1233.849
+Z	3	1850.27
+156.82091 921.3
+161.64752 1170.4
+165.09076 1669.2
+165.73743 1100.3
+166.40094 932.0
+171.82771 1154.4
+172.19757 884.2
+177.11177 6687.4
+180.42830 1082.5
+182.47760 1319.8
+188.14528 986.6
+188.21085 1669.5
+188.23740 937.5
+188.25420 1022.6
+188.27557 1030.3
+188.29285 1387.7
+188.30873 1301.3
+188.31950 1063.0
+188.34612 1321.0
+188.35654 1442.6
+188.37305 1199.6
+188.39188 886.2
+188.41512 1035.9
+191.10550 1983.3
+193.12225 2764.3
+194.93796 854.4
+198.98830 1099.4
+199.27818 1394.5
+199.29346 993.5
+199.35861 1754.7
+199.36806 1857.5
+199.37642 3154.1
+199.38234 3232.2
+199.39551 1594.1
+199.47496 1321.6
+199.51503 1137.6
+200.89760 988.4
+202.99347 898.4
+209.11719 2321.0
+211.13287 1176.9
+214.51407 1043.7
+217.12260 2117.1
+221.13782 4771.5
+235.13205 4577.3
+238.77365 913.2
+239.15070 988.2
+247.20518 36168.1
+248.20860 3813.9
+255.15868 2516.9
+255.29219 927.0
+259.15698 974.4
+261.14774 2187.9
+265.16342 3893.5
+271.05536 1011.2
+271.15353 2364.9
+273.22064 4350.5
+279.15833 4690.5
+283.17407 2431.2
+289.25189 6983.4
+290.25000 971.1
+291.23126 86575.6
+292.23456 11737.3
+299.18463 11706.9
+304.00583 1111.8
+305.17453 3196.5
+308.89590 931.1
+309.19119 3248.3
+315.17969 4432.6
+317.24689 8608.0
+319.26376 2196.2
+320.73615 1188.0
+323.18616 1367.0
+327.20013 2773.4
+335.25757 27411.8
+336.26123 3617.0
+339.20227 1511.7
+342.26852 1156.4
+343.21017 1407.4
+353.21619 3007.7
+359.20605 6646.9
+360.33206 1062.2
+367.21014 1683.6
+371.22702 5223.5
+372.22818 1167.8
+381.35965 1031.9
+394.30981 10369.7
+394.75406 948.5
+395.31277 13810.9
+396.31638 2541.1
+397.24222 2058.3
+403.23199 13300.8
+409.62589 862.1
+412.32013 15849.6
+413.32364 18513.7
+414.32645 4509.6
+415.25269 4473.4
+416.25491 1579.2
+419.85632 1200.8
+419.97760 1034.1
+423.30936 969.2
+430.33087 21629.2
+431.33408 21944.8
+432.33640 3871.9
+441.26364 1297.9
+447.25775 6420.0
+448.34097 21853.5
+449.34421 20646.6
+450.35126 3282.4
+459.27972 5983.3
+460.28238 1917.7
+474.08942 939.5
+485.34726 3646.7
+491.28375 44467.9
+492.28705 8247.8
+503.30502 7065.0
+504.30701 2644.8
+529.37231 18399.4
+530.37561 4464.9
+531.31537 2321.2
+531.82196 3010.5
+532.32013 1472.6
+532.45477 2913.3
+547.33197 7597.4
+548.33563 4011.5
+549.15167 1283.8
+549.87946 1474.9
+557.16046 2804.8
+561.37048 27611.9
+562.37354 47732.0
+563.37543 11728.7
+564.37299 2184.2
+565.35400 979.5
+568.01630 1173.4
+571.38672 2237.8
+571.88757 4025.0
+572.38977 1633.2
+573.39813 22471.2
+574.40039 4137.9
+579.38092 45130.1
+580.38416 67487.0
+581.38452 15149.9
+582.37958 2134.1
+591.35608 7287.0
+592.36115 3481.3
+593.39514 3368.2
+593.89984 5222.3
+597.39160 76165.1
+598.08826 1434.5
+598.39447 82838.0
+599.39514 17733.2
+600.39319 3103.7
+635.38507 2413.3
+676.69312 1905.8
+679.40411 2292.0
+687.89825 1019.9
+707.37061 1461.6
+707.86047 1190.2
+729.36774 1823.3
+746.53754 2075.9
+753.56848 960.5
+787.88306 991.5
+789.55878 3838.3
+790.55487 2881.8
+820.44598 1355.4
+833.58301 4718.0
+834.58740 4852.9
+835.59412 2128.1
+877.60535 5130.0
+878.60956 5012.1
+879.60791 2661.1
+921.63123 5999.2
+922.63922 6750.5
+923.63904 1806.3
+965.65881 6287.5
+966.66248 5894.7
+1009.68610 4502.2
+1010.69092 5695.2
+1011.68420 1772.3
+1012.68091 1190.0
+1053.70654 1599.8
+1054.70984 4405.0
+1055.72705 1596.6
+1057.32861 1176.2
+1160.32568 1094.4
+1187.77600 1193.8
+1197.49341 1040.9
+1198.01709 6097.0
+1338.94702 1051.0
+1449.95154 1124.2
+1480.25354 1024.8
+1543.97034 1105.8
+1549.79187 959.9
+1877.34448 1609.7
+1877.54272 1187.6
+1878.49792 1271.9
+1878.95386 3220.6
+1879.40918 5856.6
+1879.68066 32136.5
+1880.38708 2716.6
+1880.87000 2059.5
+1893.76233 1120.2
+1907.16309 12540.8
+1922.23499 941.5
+1930.58997 1613.1
+1993.16199 1174.2
+S	4046	4046	1880.0418246
+Z	3	5636.85
+Z	2	3758.236
+532.48907 2204.3
+676.69092 1230.0
+688.84149 545.2
+758.09064 623.1
+795.96008 914.1
+799.65851 601.2
+804.47986 892.2
+809.58374 706.9
+818.84485 654.2
+909.23199 601.6
+1175.67493 638.1
+1196.91333 597.5
+1198.09338 3351.2
+1215.44006 556.4
+1402.16626 613.0
+1429.20166 710.4
+1542.37903 645.7
+1870.05286 864.4
+1877.82520 824.4
+1878.16052 806.1
+1879.07959 701.7
+1879.30811 767.5
+1879.67322 19766.6
+1880.61133 1023.5
+1899.26953 580.6
+1907.04626 7211.4
+1930.65955 867.5
+S	4047	4047	529.795407933
+Z	2	1057.743
+Z	3	1586.111
+148.71548 608.8
+180.21387 598.2
+188.25168 971.2
+188.26135 1023.0
+188.27022 1069.3
+188.27640 1030.2
+188.28252 858.5
+188.29108 1066.6
+188.30022 693.8
+188.30919 928.4
+188.31567 760.7
+188.32568 823.8
+198.28429 809.7
+198.98744 898.7
+199.27240 628.7
+199.28700 690.7
+199.31239 615.8
+199.32802 653.8
+199.33565 912.1
+199.37074 2123.5
+199.38417 1299.4
+199.39929 1018.4
+199.41086 858.1
+199.44286 740.0
+199.49130 856.2
+199.50336 606.4
+247.20474 2188.1
+267.34558 780.5
+271.31906 681.0
+271.47952 788.0
+280.18787 891.1
+289.25156 650.3
+291.23120 6339.2
+315.17932 1912.7
+317.24847 903.4
+327.19946 895.6
+330.77808 652.6
+335.25671 3208.7
+335.71579 682.6
+341.24591 588.1
+342.27856 857.4
+359.20639 1080.5
+363.05280 657.7
+403.23163 12069.3
+420.74579 592.2
+430.86057 1387.2
+431.05692 906.3
+441.31760 1052.2
+443.26492 1307.4
+464.21552 758.6
+485.34680 2058.6
+486.57544 1786.2
+489.01321 597.8
+505.67664 539.1
+532.44995 1772.2
+549.16101 1142.8
+584.49249 669.9
+630.42004 1002.4
+631.54718 643.2
+657.47864 718.5
+676.68683 952.7
+682.73163 741.0
+729.35822 660.8
+731.14038 946.5
+780.19208 702.9
+789.55493 1023.3
+795.93610 885.6
+829.72925 595.1
+833.58600 1502.4
+877.59723 886.5
+902.35443 687.5
+1038.85400 661.7
+1187.94275 730.9
+1198.00598 3564.2
+1381.42566 707.9
+1402.13745 702.0
+1470.87769 927.8
+1514.19836 938.7
+1525.44824 1144.7
+1526.06799 874.6
+1532.04016 659.1
+1541.93030 1055.5
+1549.49231 677.3
+1578.94800 691.7
+1588.40137 627.6
+1621.03894 741.5
+1624.15723 749.3
+1672.03125 663.1
+1673.86841 777.3
+1700.59363 791.9
+1736.14343 753.6
+1756.38782 759.7
+1788.04309 719.8
+1810.17126 602.1
+1878.14050 1319.3
+1878.55115 793.1
+1878.79822 1519.7
+1879.68542 18642.0
+1879.96790 3695.2
+1880.22791 968.4
+1880.41809 1480.0
+1906.16589 627.6
+1906.43872 740.7
+1907.02026 7278.3
+1919.18469 945.2
+1930.58252 887.5
+1932.80811 772.1
+1947.95386 720.3
+S	4049	4049	1880.0648246
+Z	2	3758.282
+Z	3	5636.919
+532.44232 2026.8
+581.66522 619.2
+585.11206 591.9
+610.60510 676.8
+612.64014 653.9
+630.38147 688.6
+676.66345 953.7
+731.09515 822.9
+737.13367 642.5
+745.19873 548.9
+745.23987 547.3
+780.36932 564.6
+787.20630 590.5
+795.94983 1112.5
+889.95099 643.1
+917.13208 669.0
+970.00769 661.7
+1019.69446 642.0
+1197.98523 3147.6
+1525.35205 712.3
+1875.79126 667.6
+1878.83484 1090.6
+1879.59546 19991.0
+1879.97205 586.3
+1907.18433 7492.0
+1998.46338 623.7
+S	4050	4050	618.4328246
+Z	1	617.425
+155.97771 690.0
+165.09044 1318.2
+175.09503 682.2
+177.11185 5752.9
+178.03267 767.0
+179.91469 756.0
+181.56798 775.5
+188.21333 658.1
+188.24919 1063.7
+188.26236 856.4
+188.27495 1246.8
+188.30919 779.7
+188.32437 847.9
+188.33299 857.5
+188.35687 903.9
+188.38931 792.1
+191.10616 2462.2
+192.35973 763.5
+193.12210 2370.4
+198.99365 956.9
+199.11203 1071.7
+199.27779 995.5
+199.32642 1093.3
+199.35234 2038.1
+199.36322 1766.0
+199.37894 2326.6
+199.39815 1524.1
+199.47615 1422.1
+209.11705 1839.8
+212.47227 654.8
+217.12193 2076.3
+221.13792 4805.2
+223.15385 1632.1
+235.13252 4137.4
+236.13846 1011.4
+239.14882 1040.7
+247.20518 30254.5
+248.20865 4465.6
+249.21605 825.8
+253.14845 726.4
+255.15825 1787.9
+261.14789 1776.9
+265.16348 3410.2
+267.18008 848.4
+271.15414 2267.2
+271.32376 948.5
+271.61899 742.1
+273.22092 4330.9
+279.15866 5110.6
+283.17493 2924.9
+289.21609 1125.4
+289.25208 5361.1
+291.23132 78728.0
+292.23477 13218.5
+295.17606 1011.5
+298.22592 862.7
+299.18500 9247.4
+305.17529 2182.3
+309.19046 4278.9
+315.18005 3262.7
+317.24692 6461.1
+318.25192 1051.2
+323.18594 1021.9
+324.19406 767.4
+327.20166 4136.9
+328.20535 1079.6
+335.25757 26118.5
+336.26141 3620.0
+339.20010 2023.3
+340.36063 690.6
+343.21021 1226.4
+348.48303 824.8
+353.21667 4581.7
+354.21957 799.4
+359.20532 5178.1
+361.27600 770.9
+367.21109 1588.1
+371.22681 7039.3
+383.22690 2579.1
+386.21518 826.1
+387.23782 1361.9
+394.30951 9849.2
+395.31274 10530.3
+396.31610 3376.4
+397.24246 3304.1
+403.23169 9567.7
+412.32010 13871.1
+413.32373 12130.1
+414.32730 2253.5
+415.25250 7834.7
+416.25739 1747.8
+427.25629 1700.5
+427.51993 921.0
+428.28397 730.1
+430.33029 17253.6
+431.33389 15470.0
+432.33759 3425.5
+441.26929 1304.1
+441.32172 1756.7
+447.25772 8682.9
+448.26004 1371.5
+448.34088 16622.1
+449.34464 13513.7
+450.34766 2649.6
+459.27859 7492.9
+460.28265 2441.2
+471.27933 1351.3
+472.43314 761.8
+482.63177 1005.3
+485.29404 937.2
+485.34616 4697.6
+486.34671 1269.3
+486.91602 905.3
+491.28375 41760.0
+492.28729 8480.7
+494.37445 757.4
+496.69171 673.1
+503.30496 8261.0
+504.30728 2714.2
+515.30670 1074.2
+529.32166 1015.8
+529.37219 15933.5
+530.37494 4839.9
+531.31818 4568.8
+531.81909 2976.1
+532.32294 1911.5
+532.45911 2499.4
+541.31427 807.6
+547.33136 9244.1
+548.33466 3875.1
+549.13135 833.2
+549.36060 967.2
+549.87317 1254.7
+557.16577 1269.1
+559.32928 1467.4
+561.37030 23227.5
+562.37335 32735.4
+563.37488 9495.2
+564.37164 2264.5
+571.38605 3586.8
+571.88806 3814.0
+573.39838 21160.5
+574.40228 5536.9
+579.38086 35296.5
+580.38403 45053.9
+581.38489 11373.1
+582.38263 2281.6
+591.35712 9863.9
+592.36176 4087.0
+593.39764 4784.5
+593.89984 3538.9
+594.40161 1435.0
+597.39148 51261.4
+598.39453 51772.8
+599.39624 11010.6
+600.39429 1304.3
+635.38214 4521.2
+636.38232 1804.4
+649.69379 861.8
+653.04608 707.1
+676.68750 1694.3
+679.40955 2992.3
+680.41522 1069.0
+701.50140 1657.1
+702.49988 1019.4
+707.35992 1405.9
+707.85760 1305.4
+723.43939 1239.3
+724.43524 827.8
+745.52728 1782.0
+746.53577 1431.1
+752.48907 795.9
+753.44580 1045.8
+763.90686 1142.8
+779.81708 680.7
+780.31030 750.9
+789.55341 4227.8
+790.55743 3568.3
+791.56018 1171.9
+795.96967 882.5
+833.58252 7331.1
+834.58588 4540.3
+835.58777 1985.6
+839.12866 708.9
+851.88464 757.9
+859.59613 999.4
+873.37384 804.0
+877.60724 10245.5
+878.61139 7050.4
+879.61127 1628.1
+908.77637 833.6
+921.63416 8795.7
+922.63739 7257.1
+923.64130 2688.0
+965.65979 9617.2
+966.66254 7438.5
+967.66095 3424.2
+1009.68561 8152.8
+1010.68970 5672.4
+1011.69708 2114.4
+1045.20544 731.5
+1053.71155 4013.1
+1054.71265 3932.2
+1055.72034 1270.0
+1057.33655 876.7
+1097.73572 2309.6
+1098.74548 2082.3
+1099.73608 773.2
+1105.90491 720.5
+1198.02344 4259.1
+1291.53479 752.2
+1294.45996 839.3
+1433.75439 749.8
+1479.86060 700.9
+1589.97034 724.1
+1658.04321 728.6
+1667.31689 832.5
+1777.02466 890.7
+1779.78699 790.9
+1832.31982 743.8
+1877.75928 1288.8
+1878.10522 1592.6
+1879.10046 2318.3
+1879.35889 2185.1
+1879.67297 23928.3
+1880.04688 2457.4
+1880.24646 2344.2
+1880.90271 1176.3
+1881.59973 1162.3
+1907.16675 9281.2
+1919.09888 1129.3
+1930.48914 988.3
+1941.73376 701.9
+S	4051	4051	1907.51840793
+Z	2	3813.189
+Z	3	5719.28
+532.41156 1862.9
+549.13214 796.1
+647.50659 660.0
+662.61340 657.4
+676.72784 1081.0
+706.59491 617.5
+795.96747 1242.8
+946.80334 625.3
+997.97821 732.7
+1039.33228 610.6
+1057.39209 767.8
+1163.03589 634.2
+1197.92151 3523.0
+1427.50281 655.2
+1675.21033 633.0
+1803.32996 676.4
+1878.96191 1745.5
+1879.78564 18874.2
+1880.31836 1220.6
+1880.65479 1811.6
+1881.33142 1062.0
+1907.18140 7201.3
+S	4053	4053	1880.01899127
+Z	2	3758.19
+Z	3	5636.782
+525.92297 645.1
+532.49274 1972.2
+676.69037 1050.9
+701.91846 735.4
+795.96179 757.3
+856.60278 627.5
+918.85040 710.8
+1057.32251 737.2
+1119.83740 627.4
+1188.15198 1006.0
+1198.10352 2951.0
+1273.04895 596.8
+1415.66577 676.3
+1469.59595 697.4
+1860.08484 687.9
+1876.20325 806.2
+1877.02112 650.1
+1879.27808 2989.4
+1879.65466 19236.1
+1880.05579 1838.6
+1880.33020 847.9
+1880.80408 870.4
+1881.15125 842.9
+1881.45422 676.1
+1884.31458 688.3
+1889.04333 645.3
+1907.16357 7915.0
+1930.60242 903.3
+S	4054	4054	491.310991267
+Z	3	1470.658
+Z	2	980.774
+139.08150 622.0
+148.67351 665.7
+157.59764 665.1
+171.65121 643.9
+173.60222 521.8
+174.28526 627.9
+175.61043 525.6
+188.24109 578.3
+188.25687 934.4
+188.27095 751.0
+188.28598 660.5
+188.30846 854.9
+188.31834 729.2
+188.33365 852.3
+188.35539 774.8
+188.37308 793.4
+188.41554 643.4
+188.43408 611.5
+189.45309 549.2
+196.96027 2076.5
+198.99034 1089.3
+199.28416 909.1
+199.32364 683.6
+199.34250 625.1
+199.35368 827.3
+199.37129 2174.1
+199.38254 2390.7
+199.46994 692.7
+209.84215 748.6
+214.50829 657.2
+233.56577 889.6
+260.35529 561.7
+260.89563 592.9
+271.73511 601.8
+271.79956 549.9
+274.07324 749.1
+294.08313 563.1
+294.93787 697.5
+327.30688 577.6
+357.69006 594.3
+380.02634 728.8
+381.34323 655.3
+397.22604 618.3
+400.98407 2170.4
+427.52966 819.9
+447.23007 928.6
+472.77505 594.4
+532.48755 1840.7
+549.13318 689.6
+593.65955 664.3
+630.38409 675.6
+636.17017 554.6
+661.47461 548.7
+666.68298 554.8
+668.42212 637.9
+676.67847 795.5
+731.09265 749.1
+762.42493 811.7
+793.40179 610.7
+1057.30151 705.6
+1198.08240 2906.8
+1250.72083 548.3
+1525.36877 692.4
+1860.16138 750.8
+1870.33069 666.6
+1879.64624 20249.9
+1880.64771 801.8
+1906.92859 980.6
+1907.19312 7104.7
+1930.51172 871.6
+S	4055	4055	1907.57124127
+Z	3	5719.438
+Z	2	3813.295
+515.81781 552.2
+532.45703 1929.2
+549.14709 795.3
+630.39264 674.8
+676.67902 1319.8
+722.38971 674.2
+753.10089 695.0
+780.29144 616.2
+795.95612 868.7
+908.45599 815.6
+968.57642 730.7
+1030.19275 547.4
+1057.31042 1066.7
+1198.02417 3001.5
+1612.30518 602.8
+1774.91675 632.6
+1776.91760 614.9
+1878.52478 822.5
+1878.87146 1163.4
+1879.17676 1876.2
+1879.64258 19974.1
+1880.13220 1010.5
+1881.56836 726.9
+1907.16895 7955.4
+1907.58801 791.3
+S	4057	4057	573.8208246
+Z	2	1145.794
+Z	3	1718.187
+147.41408 541.3
+147.68472 563.4
+165.73631 630.7
+169.50761 634.6
+170.82582 690.7
+171.64624 729.5
+177.11200 660.5
+188.22612 625.6
+188.27583 1935.7
+188.29619 2237.2
+188.31010 1638.3
+188.32106 1077.9
+197.71709 608.6
+198.98961 949.9
+199.20682 569.1
+199.27034 602.2
+199.28583 674.8
+199.29137 761.0
+199.35728 776.4
+199.36922 1862.5
+199.38239 1809.2
+199.39334 1294.2
+199.40143 1116.9
+199.46616 720.4
+199.47920 720.6
+199.49535 538.1
+201.63010 735.4
+217.54045 685.6
+233.03743 543.4
+233.58989 798.6
+235.13283 1161.4
+247.20488 3456.2
+253.93457 622.4
+273.22009 890.3
+280.20187 727.2
+289.21689 747.9
+289.25247 1071.7
+291.23117 21418.0
+309.19037 744.5
+315.18005 1175.4
+317.24686 1467.0
+332.50232 573.5
+335.25717 4043.4
+340.33792 589.4
+342.30002 890.6
+359.20657 3156.4
+361.27393 662.3
+367.89294 602.3
+403.23254 1734.0
+427.57568 897.6
+435.84253 558.6
+447.25778 14269.3
+482.66055 581.1
+482.68924 704.7
+485.34604 3106.8
+487.28922 1152.8
+494.25497 590.0
+503.30417 783.2
+529.37146 3725.6
+532.50781 2014.2
+547.33087 956.3
+549.37286 656.5
+559.38275 642.9
+615.75354 562.4
+618.08081 635.4
+645.89807 665.8
+676.68695 1134.3
+731.18304 1060.3
+795.95209 936.8
+796.58160 657.2
+833.59119 759.7
+877.59918 900.7
+878.62024 949.4
+921.63171 1009.4
+1005.02960 613.3
+1198.13025 3493.0
+1432.39844 765.8
+1475.81506 627.5
+1525.54614 841.0
+1585.96045 703.5
+1595.59631 645.9
+1762.06189 660.1
+1790.10645 634.1
+1811.69971 602.7
+1868.75049 697.1
+1877.76965 820.8
+1878.53491 1136.4
+1878.86804 985.1
+1879.66858 20172.7
+1880.32800 859.3
+1880.87610 1247.2
+1907.14453 7602.0
+1930.74890 989.1
+S	4058	4058	529.794241267
+Z	3	1586.107
+Z	2	1057.741
+139.76797 610.3
+140.60529 485.5
+161.45462 559.8
+165.73900 654.5
+169.50568 1010.9
+178.47575 664.3
+181.70421 599.8
+188.19835 676.2
+188.22282 780.1
+188.23344 562.6
+188.25439 766.8
+188.27373 583.2
+188.28947 811.4
+188.29860 905.1
+188.31053 649.0
+188.32372 864.9
+188.33748 653.1
+188.35954 628.5
+190.45976 599.9
+198.98888 1096.8
+199.29257 528.7
+199.29875 731.6
+199.34023 1036.3
+199.34860 1346.9
+199.36134 1588.6
+199.38100 1271.0
+199.38976 1075.9
+199.45738 593.9
+199.48775 738.5
+214.52602 745.3
+238.66786 713.7
+247.20543 2759.7
+262.57242 578.9
+269.83173 860.5
+278.14679 705.6
+291.23132 5998.1
+315.17960 2068.6
+317.24771 822.4
+327.20331 845.9
+335.25772 2993.9
+349.96240 603.3
+350.28427 703.0
+353.20352 621.2
+359.20404 847.6
+381.37921 686.0
+398.14624 630.5
+403.23145 12699.0
+404.23401 1298.3
+410.09653 556.2
+415.25244 888.6
+427.57468 678.0
+430.86038 2323.5
+441.31854 892.4
+478.47977 607.2
+485.34619 1335.5
+486.57513 1044.2
+503.30170 895.9
+523.67462 604.4
+532.47522 1836.4
+549.19006 734.2
+561.86829 553.0
+583.29388 796.7
+630.43988 819.0
+643.38385 550.2
+647.53625 603.8
+663.82611 968.5
+676.69238 1035.0
+678.51080 607.0
+729.36182 975.2
+731.92780 608.5
+789.55438 1453.8
+795.94843 970.5
+830.80261 584.6
+833.59204 685.1
+877.60400 855.1
+923.74365 601.2
+1038.92310 569.9
+1039.07861 636.8
+1079.51599 828.4
+1134.00879 694.9
+1137.94128 626.0
+1198.05518 2917.9
+1513.27197 587.9
+1878.27087 859.3
+1878.59338 799.1
+1878.98621 1178.1
+1879.66797 18760.3
+1880.03162 901.4
+1880.26538 1645.4
+1880.99707 841.0
+1907.08997 7497.4
+1919.08142 786.3
+S	4059	4059	1907.5228246
+Z	3	5719.293
+Z	2	3813.198
+532.41986 1894.3
+545.80109 597.5
+549.15332 1063.2
+560.44250 755.7
+619.34467 663.9
+630.40778 755.1
+663.55957 646.2
+676.65350 998.6
+705.43799 695.7
+738.36169 603.1
+771.53967 610.7
+780.41418 662.5
+795.94250 934.9
+923.64777 582.3
+1197.93127 3404.2
+1200.12463 682.8
+1771.69702 747.1
+1776.86609 950.5
+1878.70251 736.4
+1879.17371 782.9
+1879.57690 19440.0
+1881.88416 752.6
+1907.10535 7127.5
+1919.11267 766.9
+1930.61035 1002.5
+S	4061	4061	1907.46399127
+Z	2	3813.08
+Z	3	5719.117
+532.40643 1575.6
+630.48248 987.0
+673.16595 628.7
+721.66107 655.7
+731.19220 763.8
+795.96198 1112.9
+845.59320 906.1
+853.55511 632.3
+864.50024 742.6
+896.46594 673.5
+919.63611 609.1
+1063.26819 579.1
+1197.91162 2642.4
+1329.62183 704.6
+1554.24939 612.3
+1773.21899 553.5
+1870.45435 602.7
+1878.09204 582.0
+1879.04346 1143.5
+1879.36646 3066.2
+1879.65906 19623.1
+1880.31140 1338.2
+1881.27356 883.8
+1881.56641 629.3
+1907.12390 7038.6
+1930.80371 1332.3
+S	4062	4062	727.8785746
+Z	3	2180.361
+Z	2	1453.909
+196.08804 661.9
+198.99031 963.7
+199.28828 724.4
+199.35527 922.2
+199.37521 2684.0
+199.38496 1099.4
+199.39932 1192.0
+199.47418 900.9
+209.05576 629.7
+209.68303 616.3
+235.20279 834.0
+271.31180 538.9
+293.78687 716.6
+300.27582 736.8
+304.56659 665.1
+308.92859 822.1
+319.22861 537.0
+350.28229 849.2
+388.01993 707.2
+427.58356 722.4
+463.25018 871.1
+481.41028 616.1
+507.51056 689.1
+511.37634 663.6
+531.03290 1312.1
+532.44836 2094.3
+538.67035 582.4
+559.00598 686.2
+586.73077 679.2
+623.91205 655.2
+630.46600 825.0
+641.34796 7652.3
+642.35358 2117.2
+706.14648 715.4
+708.48615 4422.6
+709.49396 871.7
+725.36023 629.7
+771.00494 789.5
+779.63043 826.0
+795.95642 807.5
+805.49921 722.2
+825.75458 585.4
+858.12073 653.1
+870.29016 611.6
+1019.63934 948.3
+1057.29956 886.6
+1188.04370 676.3
+1197.99622 3528.7
+1454.83240 888.4
+1577.37158 621.1
+1777.01770 1126.1
+1833.90527 616.8
+1865.95789 690.0
+1870.15063 970.2
+1878.26868 829.9
+1878.71130 1264.5
+1879.61804 19659.4
+1879.91370 2415.1
+1880.48230 1361.4
+1880.78052 619.9
+1881.36548 1025.4
+1882.79333 889.0
+1907.05933 7334.8
+1930.74780 915.3
+S	4063	4063	491.3118246
+Z	2	980.776
+Z	3	1470.66
+146.92612 612.4
+159.78453 675.3
+188.25108 723.4
+188.25908 972.3
+188.27364 1440.4
+188.28928 1673.1
+188.30405 1342.3
+188.31691 638.4
+196.32191 599.2
+196.96065 1386.3
+198.99266 733.3
+199.27731 560.7
+199.28098 597.0
+199.34828 1104.6
+199.36436 1321.1
+199.38098 2220.0
+199.39316 1341.0
+199.42703 898.6
+199.47838 609.9
+214.45558 576.9
+231.31610 519.4
+231.76730 589.5
+253.26250 620.8
+256.17438 574.4
+280.18845 718.5
+291.00467 656.2
+291.87872 523.9
+295.54440 502.5
+350.29779 763.5
+357.11371 622.8
+368.32846 561.7
+373.18240 547.9
+396.60632 632.8
+398.86252 1289.3
+400.98288 1316.8
+433.45920 540.3
+444.01898 562.5
+447.22495 978.8
+450.94241 657.4
+481.43610 626.3
+482.67123 691.9
+502.69153 552.5
+532.44806 2156.2
+549.17200 1047.5
+597.59308 580.1
+630.42987 640.4
+676.66791 1248.6
+707.29816 718.7
+769.81549 577.4
+795.95959 1029.1
+847.16302 604.5
+877.60388 651.9
+937.10596 526.3
+1021.14648 561.2
+1036.53979 625.3
+1057.28369 697.5
+1198.00745 2756.0
+1208.58972 605.3
+1268.47058 588.2
+1350.87097 578.5
+1361.99585 672.4
+1526.52734 677.4
+1619.62854 756.1
+1878.82446 1238.0
+1879.21167 1709.7
+1879.60815 18524.8
+1880.05139 1623.0
+1880.25061 679.1
+1880.64417 1060.2
+1882.62793 647.1
+1907.16406 7782.2
+1930.67346 961.3
+S	4065	4065	1907.5408246
+Z	3	5719.347
+Z	2	3813.234
+532.49731 2405.2
+549.18701 682.9
+587.99139 672.7
+595.53552 547.0
+630.27197 672.6
+654.36224 649.6
+676.66229 1460.6
+730.46930 628.7
+795.96082 1238.6
+831.30371 644.1
+848.57520 752.5
+1057.28967 1138.5
+1195.51013 725.3
+1198.11475 3605.2
+1525.50610 828.4
+1529.58447 715.6
+1535.09363 810.9
+1875.79102 804.8
+1879.16333 1901.0
+1879.60925 20130.4
+1880.06213 1119.1
+1881.32312 684.6
+1907.17346 7250.9
+1930.71741 948.5
+S	4066	4066	491.311407933
+Z	2	980.775
+Z	3	1470.659
+145.31262 554.8
+147.81624 499.4
+157.08904 600.7
+158.42740 679.2
+159.88028 616.0
+165.09360 555.2
+169.69049 651.0
+171.69910 654.1
+175.39439 539.4
+190.21931 577.1
+193.34473 551.0
+195.97710 1290.5
+196.96048 5659.0
+199.26440 662.7
+199.32709 725.0
+199.33896 1033.0
+199.35927 2147.0
+199.37482 1898.3
+199.46089 972.1
+199.47449 981.2
+208.79538 547.7
+214.75717 621.4
+233.59593 713.0
+256.21005 650.2
+257.84787 634.0
+267.06586 574.1
+268.64487 572.2
+294.93665 2246.9
+298.02463 852.1
+338.58908 643.8
+398.86066 2900.2
+399.81186 558.6
+400.98297 2170.7
+426.75543 533.6
+447.22971 922.2
+500.41440 516.4
+532.46704 1657.8
+549.21313 852.4
+568.92621 564.8
+597.08710 565.7
+618.23193 571.9
+652.18408 1379.7
+731.18951 711.5
+759.92047 587.5
+780.08783 638.3
+795.96704 735.6
+859.91046 584.7
+902.60321 667.2
+919.78265 620.3
+1140.14355 790.3
+1198.04395 3356.0
+1218.59216 585.2
+1257.22168 683.0
+1257.86316 563.2
+1457.15649 600.3
+1489.76245 687.3
+1525.56335 1132.8
+1704.32886 512.1
+1852.01917 672.7
+1877.77478 872.7
+1878.41455 1052.9
+1878.83813 979.8
+1879.43689 5328.7
+1879.70251 18452.4
+1880.85913 817.8
+1881.65625 1205.1
+1907.09338 6881.5
+1907.39038 736.2
+1930.78040 983.5
+S	4067	4067	410.3618246
+Z	3	1227.81
+Z	2	818.876
+103.19669 524.0
+107.24431 555.3
+112.11963 525.6
+121.76501 2028.6
+127.86592 612.5
+133.08527 534.6
+138.47853 580.7
+139.18416 771.3
+144.06744 634.9
+153.79858 568.1
+157.61195 670.7
+158.23216 560.5
+168.71602 573.8
+169.50127 758.6
+187.24437 527.1
+198.99338 916.9
+199.27328 1361.2
+199.28528 586.9
+199.33337 1046.2
+199.35840 1376.3
+199.37181 2667.5
+199.38390 903.2
+199.39272 888.2
+199.40120 875.8
+199.46989 908.8
+204.21629 500.5
+221.12755 1791.9
+234.17693 571.2
+237.70813 615.8
+238.09488 679.3
+239.14903 835.8
+240.15181 1396.0
+255.04971 564.6
+258.15280 804.7
+258.22223 797.6
+259.19312 636.2
+263.28662 648.6
+280.19330 713.0
+298.96243 606.8
+310.20822 2003.6
+310.97723 1152.5
+318.15424 1372.1
+352.69470 712.3
+369.12393 1186.9
+371.22656 978.8
+381.37006 618.7
+386.22260 552.6
+424.51950 593.8
+429.20261 557.3
+459.27914 1226.9
+463.91910 1483.2
+464.25198 944.9
+469.90784 636.6
+503.30664 1137.7
+532.41302 594.0
+532.48138 2215.7
+539.40289 584.3
+547.32941 970.6
+549.15906 546.3
+582.29150 5050.0
+582.79358 2606.7
+583.29285 780.5
+630.44238 921.8
+690.88770 691.8
+695.67578 689.1
+751.74561 637.8
+795.95789 1193.6
+849.72522 545.6
+950.32117 592.8
+1057.28589 942.1
+1109.74304 639.9
+1133.23267 623.5
+1158.23828 618.5
+1197.18701 617.4
+1198.07642 3260.7
+1253.06079 533.9
+1275.21289 618.0
+1463.43298 594.3
+1492.35266 667.8
+1532.87207 713.7
+1575.95239 634.8
+S	4069	4069	617.853241267
+Z	2	1233.859
+Z	3	1850.284
+165.73862 787.8
+168.05203 548.8
+184.68517 731.4
+188.26683 1869.2
+188.27757 2270.2
+188.28351 2207.3
+188.30061 2105.6
+188.34305 550.4
+198.99399 851.1
+199.28810 1140.3
+199.29973 678.7
+199.33426 815.7
+199.35902 1618.9
+199.36955 1594.6
+199.38605 2343.5
+199.39767 1056.0
+199.45607 668.7
+199.48413 1054.2
+216.26793 698.7
+233.56830 808.5
+268.41321 582.3
+271.45508 608.9
+281.86975 647.2
+298.79041 593.8
+303.20932 560.8
+308.89471 726.3
+322.44757 542.2
+350.30386 658.8
+371.22653 711.1
+394.30948 18904.3
+395.31305 8023.9
+396.31683 1156.0
+402.19012 650.8
+404.49048 646.4
+412.32001 29915.9
+413.32306 11878.9
+414.32632 1437.8
+425.66153 738.5
+427.53033 698.7
+430.33057 44134.3
+431.33383 14197.9
+432.33533 1688.3
+434.04071 621.1
+435.71475 584.0
+448.34082 49362.8
+449.34421 12091.3
+450.34592 1367.4
+461.03979 583.5
+463.81552 536.0
+478.18234 573.6
+478.36478 694.7
+486.58084 774.5
+503.30472 752.8
+518.77802 733.1
+531.31714 998.0
+532.50360 2111.9
+547.32727 710.7
+557.16089 647.8
+561.37048 73181.3
+562.37360 34319.5
+563.37457 6166.0
+571.38391 637.3
+579.38098 123960.9
+579.42963 1079.9
+580.38403 44553.0
+580.86359 655.5
+581.38501 7411.9
+593.90240 774.6
+595.84326 849.8
+597.39142 187081.3
+598.15332 903.4
+598.39447 55331.4
+598.94342 829.3
+599.39661 8620.9
+601.59009 661.7
+603.81262 628.1
+630.40765 757.6
+676.66461 813.4
+679.39264 621.0
+696.13116 647.2
+729.36584 1422.5
+833.58148 725.7
+841.31714 551.2
+878.60577 646.9
+911.90900 667.7
+921.62488 998.5
+922.62756 753.3
+965.66388 973.9
+997.80634 739.5
+1009.68915 814.2
+1016.03278 650.2
+1017.73010 658.9
+1021.10590 763.6
+1030.28284 582.2
+1038.45801 717.8
+1043.92566 695.4
+1053.31079 1014.1
+1054.45178 644.8
+1057.28552 688.8
+1070.77124 691.8
+1099.14392 618.9
+1113.31323 696.4
+1198.12549 3256.7
+1254.72327 583.4
+1471.77051 580.4
+1525.37000 646.1
+1617.04419 702.5
+1750.48047 695.9
+1776.88342 645.6
+1876.07434 1134.0
+1876.63538 725.8
+1877.53748 893.4
+1878.35364 719.0
+1878.87769 1033.2
+1879.13770 1000.6
+1879.26929 992.2
+1879.59875 20134.3
+1880.04395 1089.3
+1880.32959 1020.0
+1883.60303 684.0
+1907.17737 7177.2
+1930.58911 1213.0
+S	4070	4070	529.800407933
+Z	3	1586.126
+Z	2	1057.753
+146.93864 617.0
+154.30859 520.6
+154.77823 651.2
+155.99478 608.8
+165.09084 1437.6
+166.25278 637.4
+170.28647 561.6
+171.47058 561.7
+175.15063 529.0
+177.11188 1114.3
+182.80571 667.0
+188.22653 642.0
+188.25191 960.3
+188.26242 882.6
+188.27695 646.7
+188.29779 614.1
+188.30891 617.6
+188.32678 589.6
+188.33231 548.4
+188.34381 603.2
+188.35585 623.6
+189.00937 486.2
+199.31204 709.0
+199.33511 559.7
+199.34898 1343.1
+199.36229 988.9
+199.37128 1575.0
+199.37743 1803.4
+199.39296 1216.1
+199.46596 809.0
+199.47583 847.0
+199.49074 671.7
+209.11734 1933.6
+221.13762 1037.9
+230.12143 672.5
+235.13205 1270.9
+239.14966 900.6
+247.20529 9901.2
+258.25589 521.1
+271.15530 1003.6
+271.31244 645.7
+271.69989 517.0
+273.22220 990.5
+275.81024 511.8
+279.15802 1166.7
+280.22778 625.3
+282.57306 543.3
+288.65463 567.5
+289.25238 1399.2
+291.23126 18548.0
+307.46042 630.7
+314.71265 572.7
+315.17929 5594.1
+317.24731 1542.3
+335.25775 9807.9
+342.31479 728.5
+359.20590 3504.8
+367.24481 570.5
+371.22763 793.7
+381.40872 680.4
+401.26913 636.9
+403.23169 35549.7
+415.25192 1310.3
+427.60291 778.1
+430.82288 1038.6
+430.86053 2245.9
+431.05420 2815.5
+441.32007 2628.2
+443.26364 1199.6
+443.77054 719.4
+446.27521 620.6
+459.27859 1070.9
+471.45892 571.3
+475.17728 583.4
+482.72141 582.8
+483.33813 851.4
+485.34619 5084.0
+503.30606 1673.7
+505.34589 856.7
+523.42474 595.8
+532.51208 1949.2
+591.35376 1005.9
+624.66888 651.8
+630.49518 988.5
+652.22571 616.3
+669.03485 539.8
+681.19775 550.3
+714.30481 621.0
+727.52869 726.2
+745.53107 1440.2
+746.52899 1293.5
+750.48456 604.3
+773.78027 628.8
+789.55457 1534.4
+790.55975 1054.4
+795.95471 973.4
+818.74078 589.7
+833.57764 1655.5
+834.57623 651.6
+836.43304 590.4
+877.60321 1008.8
+878.62207 664.3
+900.10944 617.5
+1019.64996 701.7
+1057.26001 564.3
+1057.30811 556.3
+1181.87048 569.1
+1198.14685 3631.2
+1258.85327 597.7
+1312.59802 645.7
+1322.61646 677.8
+1325.47058 593.3
+1362.44299 718.1
+1570.04773 639.7
+1792.47449 662.6
+1870.25842 1024.0
+1878.11536 1158.3
+1878.99207 1918.5
+1879.66821 19403.2
+1880.32227 1773.4
+1880.66223 1340.1
+1881.19495 1191.1
+1890.81238 605.5
+1906.71912 995.2
+1907.17029 7007.9
+1919.12061 864.7
+1930.85510 1497.2
+S	4071	4071	1880.06899127
+Z	3	5636.932
+Z	2	3758.29
+511.73575 540.1
+532.57135 1751.7
+543.44775 588.1
+549.16876 941.6
+712.58484 598.9
+733.27997 605.3
+790.84338 574.2
+795.20740 622.1
+795.96045 995.0
+823.23444 653.2
+945.49860 769.6
+1003.44232 683.3
+1195.80737 666.8
+1198.28235 3335.7
+1489.68982 781.8
+1525.49658 933.9
+1776.99915 966.0
+1809.14636 591.2
+1870.21924 850.5
+1876.24219 810.4
+1878.40320 900.2
+1878.68811 771.2
+1879.61511 18731.4
+1880.80994 685.9
+1881.09399 1115.4
+1907.16833 6755.0
+1921.35022 653.0
+S	4073	4073	615.823407933
+Z	2	1229.799
+Z	3	1844.195
+165.73830 860.5
+167.21480 690.5
+169.50656 749.4
+171.64787 605.2
+181.86700 545.6
+188.23083 907.6
+188.24889 603.6
+188.25879 950.8
+188.26750 932.1
+188.27748 621.8
+188.29707 901.2
+188.30615 927.6
+188.33916 978.4
+188.36255 525.6
+198.98924 895.2
+199.27943 914.8
+199.33435 791.6
+199.35846 897.4
+199.36249 1053.6
+199.37625 2051.4
+199.38467 1346.7
+199.41153 1487.3
+199.42249 998.4
+199.47362 688.7
+208.01643 513.9
+245.53932 630.3
+249.40622 592.3
+255.31152 592.5
+270.63550 540.5
+271.61676 670.1
+279.32449 622.5
+289.91248 702.0
+297.27420 502.2
+305.64059 595.4
+308.92239 728.2
+313.37985 633.9
+341.79572 584.2
+351.20752 566.9
+356.83252 602.1
+394.30957 26744.3
+395.31290 6743.1
+412.32010 35595.5
+413.32361 7259.6
+427.57855 846.9
+427.68152 751.2
+430.33063 40867.6
+431.33414 6938.7
+446.32648 2534.8
+447.33032 703.0
+448.34082 38809.0
+449.34525 6601.0
+532.46057 2317.3
+547.32629 759.4
+559.99988 601.7
+561.37042 83706.5
+562.37390 20762.6
+579.38098 107345.8
+580.38428 22229.1
+597.39148 118894.0
+598.39471 27398.5
+651.07184 612.5
+676.64764 714.9
+729.36316 1527.0
+795.95581 1068.4
+869.02405 697.5
+877.60217 697.4
+921.63080 862.8
+1029.30408 663.1
+1130.09778 613.7
+1144.39380 567.2
+1198.02747 3625.6
+1227.93628 740.3
+1401.48865 545.8
+1549.26917 549.4
+1565.64368 577.9
+1817.80371 621.0
+1870.26331 737.7
+1877.93005 835.3
+1878.85681 1011.9
+1879.54822 18491.6
+1879.81152 4309.1
+1880.24121 1511.0
+1907.14771 7500.2
+1912.21594 548.2
+S	4074	4074	1880.09699127
+Z	3	5637.016
+Z	2	3758.346
+517.51038 680.8
+532.47186 1671.7
+549.17181 624.7
+569.59753 620.3
+676.67480 745.3
+689.73425 744.4
+713.33990 562.5
+729.02533 770.9
+731.08447 598.6
+731.15631 654.1
+759.54663 595.8
+775.24402 609.6
+795.96021 810.2
+889.63208 531.9
+889.68927 578.8
+1198.05652 3142.4
+1249.92346 625.6
+1265.85889 587.7
+1525.48999 1021.5
+1599.02197 688.9
+1629.04163 574.6
+1857.62256 610.9
+1870.20642 941.3
+1877.94299 632.9
+1878.83447 846.5
+1879.18018 1124.0
+1879.61694 20263.7
+1879.91553 1957.0
+1880.09424 1610.7
+1881.30920 708.9
+1907.09021 7197.1
+S	4075	4075	616.825991267
+Z	2	1231.804
+Z	3	1847.203
+155.48103 551.1
+163.57498 567.7
+165.73715 915.8
+169.50325 723.3
+182.79326 830.9
+187.28696 564.1
+188.22237 673.8
+188.24379 811.1
+188.25636 883.7
+188.27634 1372.6
+188.28719 1376.0
+188.29471 1190.3
+188.30495 1409.1
+188.32080 969.9
+192.63284 656.6
+198.99236 1115.7
+199.27808 819.2
+199.35442 1108.8
+199.36649 1350.4
+199.37608 2167.3
+199.38969 1788.8
+199.41931 661.5
+205.91977 556.0
+207.95528 543.2
+214.52675 557.2
+217.67307 671.9
+233.58516 866.0
+241.55716 700.1
+267.45392 536.0
+271.31546 610.6
+280.19708 650.1
+308.91687 618.1
+340.58032 508.2
+374.69748 609.8
+394.30936 17643.2
+395.31305 7885.3
+412.31995 25348.2
+413.32346 8402.4
+418.90607 2768.6
+419.90955 917.6
+430.33041 34992.0
+431.33353 10995.9
+447.32785 861.1
+448.34067 37169.4
+448.83377 678.0
+449.34427 9899.3
+452.87708 595.1
+459.27905 650.4
+516.88330 1167.8
+518.78326 777.7
+532.45172 1870.0
+548.33142 610.7
+561.37036 63820.3
+562.37354 29069.3
+563.37604 1008.9
+579.38086 95512.9
+580.38403 32698.4
+581.38251 1122.2
+591.36041 1062.5
+593.40039 912.9
+597.39136 123844.3
+598.39429 38948.9
+599.39447 1426.8
+623.25226 644.1
+640.96179 656.5
+668.40179 630.7
+676.70685 1194.9
+680.39270 575.5
+788.66156 651.8
+835.35938 639.8
+863.87878 670.9
+877.59912 1471.6
+921.63092 1617.1
+965.65765 769.4
+1009.68164 872.6
+1079.52051 701.9
+1188.33350 802.6
+1198.00916 3214.5
+1248.76001 603.9
+1445.66992 652.0
+1649.96912 571.1
+1694.97095 672.9
+1866.07446 717.5
+1869.40247 670.8
+1870.10474 798.7
+1878.35632 1040.2
+1878.94922 919.6
+1879.17029 1516.1
+1879.72400 19019.9
+1880.11096 1943.6
+1880.57410 1057.1
+1881.09473 743.6
+1881.91321 724.2
+1907.04614 7571.6
+1907.34167 596.3
+1908.55627 624.6
+1923.66138 663.7
+1930.71460 899.7
+1970.53687 648.5
+S	4077	4077	1880.1128246
+Z	3	5637.063
+Z	2	3758.378
+532.47968 1971.4
+536.84882 622.4
+540.54187 864.9
+630.45093 972.2
+633.44324 801.7
+676.67596 1159.1
+676.74951 590.9
+795.96637 1062.7
+1198.06543 3482.1
+1253.91321 561.7
+1399.61267 675.6
+1557.82129 611.2
+1875.78125 671.3
+1877.20618 697.4
+1878.45850 740.4
+1878.85364 1327.0
+1879.65186 19208.7
+1880.52588 905.4
+1880.77441 800.2
+1907.06421 7171.8
+1930.72461 1412.4
+1977.86377 590.6
+S	4078	4078	1907.4948246
+Z	2	3813.142
+Z	3	5719.209
+531.36481 681.0
+532.46997 1733.9
+590.86243 605.5
+630.46295 874.2
+676.68481 1086.3
+682.79590 604.6
+709.74194 692.3
+731.18860 967.7
+808.80957 753.7
+839.51282 581.4
+903.51434 671.7
+1092.44287 563.3
+1187.84058 773.8
+1198.05493 3989.4
+1877.69727 722.1
+1878.12976 906.5
+1879.05762 1299.7
+1879.64636 19096.3
+1879.91785 3796.9
+1880.24780 832.3
+1881.03027 1222.1
+1906.63525 931.6
+1907.05176 6881.2
+1930.77808 996.4
+S	4079	4079	1198.3928246
+Z	2	2394.938
+Z	3	3591.903
+317.15417 577.2
+323.31302 593.5
+341.81433 551.2
+342.29953 835.3
+389.12881 620.5
+435.13672 638.4
+532.45001 1933.1
+547.28265 702.0
+549.19830 814.0
+630.46228 776.7
+717.34534 607.2
+779.67487 719.2
+795.95581 1081.3
+940.76208 717.8
+950.90851 738.3
+1007.96313 713.5
+1012.31805 668.4
+1057.31641 826.3
+1198.00281 3097.9
+1215.88672 581.0
+1229.81189 628.7
+1360.32874 786.4
+1525.53210 1462.1
+1641.03516 684.7
+1870.16406 842.9
+1878.64563 1255.2
+1879.02856 1372.5
+1879.65332 19495.5
+1880.66711 1181.0
+1881.04993 1228.9
+1907.07324 7565.8
+1930.74292 781.6
+1941.33630 643.8
+S	4081	4081	615.9068246
+Z	2	1229.798
+157.61885 610.5
+166.85464 539.2
+171.64891 634.5
+172.71887 680.3
+187.39761 497.4
+188.15141 480.2
+188.22768 707.2
+188.24014 702.1
+188.24945 698.6
+188.27260 808.6
+188.28554 729.9
+188.29660 585.6
+188.30487 794.8
+188.31255 857.4
+188.32146 669.1
+188.34174 725.6
+188.35867 636.7
+188.41721 589.0
+197.82666 554.7
+199.25539 571.8
+199.27684 549.4
+199.34219 660.2
+199.35335 1427.4
+199.36681 1329.5
+199.37399 1301.9
+199.38158 1409.8
+199.38434 1378.7
+199.39514 805.1
+199.41159 1192.7
+199.46619 570.9
+202.30690 603.1
+218.35483 759.2
+220.92097 574.9
+253.99146 509.6
+266.26129 589.9
+271.76797 800.7
+285.64288 541.4
+293.38391 627.5
+337.90353 519.9
+339.24091 561.9
+346.95773 836.3
+350.29810 820.8
+394.30960 21064.6
+395.31326 4477.9
+397.58249 548.2
+412.31992 26499.7
+413.32321 5606.9
+418.90756 2717.5
+430.33044 29877.5
+431.33374 6429.5
+440.77631 584.8
+446.32571 1840.9
+448.34061 29926.3
+449.34387 5032.1
+453.74979 666.3
+454.04346 648.0
+482.21530 689.1
+486.57565 768.0
+513.40955 654.2
+516.88116 872.6
+532.46765 1588.5
+548.74054 647.9
+561.37018 63773.2
+562.37347 15928.2
+579.38086 80474.1
+580.38391 19439.0
+597.39124 94905.8
+598.39429 21903.7
+599.19391 654.9
+630.46704 698.0
+675.07690 649.2
+676.67926 936.5
+687.97870 690.4
+713.97858 798.5
+742.20819 596.9
+745.85248 514.3
+788.32422 594.7
+795.97144 819.5
+974.19458 617.5
+993.18878 600.4
+1039.30603 692.9
+1057.31909 800.8
+1135.80127 551.7
+1155.79578 662.5
+1167.99304 685.1
+1187.75415 635.3
+1198.04688 2660.9
+1202.45935 625.7
+1251.86804 613.3
+1525.54468 881.2
+1612.25012 609.3
+1776.94421 819.5
+1870.21680 626.7
+1876.84387 878.9
+1878.75415 770.4
+1879.09412 1086.4
+1879.65723 18632.8
+1879.88135 5793.3
+1880.18665 1559.4
+1880.46216 1186.5
+1882.54004 758.0
+1907.15112 7920.7
+1930.77295 801.1
+S	4082	4082	1880.0288246
+Z	2	3758.21
+Z	3	5636.811
+532.47327 2053.2
+549.18170 916.1
+569.36761 654.9
+585.24371 689.7
+630.43585 808.8
+676.67426 880.3
+689.30902 610.4
+708.23022 578.4
+732.48730 566.2
+743.44226 567.8
+795.96863 875.1
+885.53748 594.4
+1057.82263 603.0
+1198.05591 3138.9
+1425.33875 621.5
+1484.26733 637.4
+1525.46362 1113.5
+1658.27515 610.8
+1722.87292 629.1
+1876.16577 644.2
+1878.91589 623.7
+1879.62744 19124.7
+1880.37244 1694.0
+1882.36487 634.7
+1907.14661 7372.5
+1922.72412 656.8
+1923.69861 583.1
+1930.67419 710.9
+1956.03052 631.1
+S	4083	4083	1907.4858246
+Z	3	5719.182
+Z	2	3813.124
+532.45496 1774.7
+630.43060 774.9
+676.67303 976.8
+690.87683 694.4
+795.97076 808.4
+834.40833 633.9
+885.97607 643.1
+1019.67517 876.1
+1057.30200 955.4
+1079.51111 767.2
+1152.29224 698.1
+1198.01660 3407.2
+1269.18262 601.7
+1489.70093 790.7
+1570.96289 867.9
+1631.43787 601.7
+1709.29871 548.4
+1865.15454 635.8
+1877.49780 768.8
+1878.60156 1307.6
+1878.90369 2129.2
+1879.15613 1837.2
+1879.34338 2429.9
+1879.63501 19209.2
+1880.02246 1870.5
+1880.38733 1937.5
+1881.01978 659.5
+1881.24438 654.0
+1881.43054 642.4
+1907.19775 7493.5
+1930.69507 1086.7
+S	4085	4085	615.823407933
+Z	3	1844.195
+Z	2	1229.799
+157.62300 664.2
+158.47308 546.4
+165.73700 826.7
+182.80731 692.3
+186.61725 594.4
+187.15065 567.2
+188.21800 561.8
+188.25061 694.6
+188.27061 877.4
+188.28329 923.1
+188.29326 857.7
+188.30515 695.9
+188.32190 654.3
+188.36450 796.5
+188.38893 732.3
+189.52122 543.2
+198.98979 1183.8
+199.30429 588.7
+199.32718 543.8
+199.35268 1415.1
+199.37331 826.5
+199.37990 952.6
+199.38933 1533.8
+199.40263 1606.5
+199.41429 1318.7
+199.49918 903.8
+204.54977 558.3
+209.98524 664.1
+218.68251 510.5
+218.90649 459.2
+235.03090 569.0
+240.41389 563.7
+250.15208 480.3
+250.15956 483.5
+250.71802 531.2
+269.18640 646.9
+269.61432 608.9
+271.30191 778.7
+296.46262 636.7
+342.31863 735.4
+348.41895 581.2
+350.28278 645.3
+394.30927 18629.4
+395.31287 3863.4
+412.31970 23228.4
+413.32266 4650.6
+418.90634 3030.4
+420.66742 603.6
+430.33041 28258.2
+431.33368 4428.6
+446.32455 1682.3
+448.34058 26105.3
+449.34448 4410.6
+458.42392 508.2
+486.57950 852.4
+486.91406 682.7
+487.12424 602.4
+495.10971 598.5
+511.76682 558.5
+516.87933 1227.2
+532.43750 1938.0
+561.37000 57013.7
+562.37329 14357.7
+575.34045 736.9
+577.90027 676.7
+578.65747 812.4
+579.38055 77859.3
+580.38367 15360.7
+596.30078 715.4
+597.39105 85709.3
+598.39435 18464.6
+625.71600 647.7
+641.31592 637.9
+650.80994 620.7
+676.68945 851.3
+731.22943 816.5
+795.66107 618.4
+795.95575 737.7
+818.67773 602.0
+920.13892 792.3
+921.63678 894.7
+965.65424 825.0
+1003.02905 590.9
+1009.68732 789.3
+1020.35663 580.5
+1057.31030 999.4
+1197.97778 3316.2
+1235.68896 619.7
+1314.95691 598.2
+1525.59338 905.8
+1560.24707 646.9
+1667.41138 669.1
+1728.62183 622.4
+1748.09436 679.9
+1860.12305 637.8
+1870.28320 1186.4
+1879.06775 1055.6
+1879.21753 1123.1
+1879.65784 19032.2
+1880.25879 1297.1
+1880.65112 580.9
+1880.89087 613.5
+1882.95215 697.4
+1899.43005 576.8
+1907.16394 7177.9
+1930.84790 680.0
+S	4086	4086	1880.0038246
+Z	3	5636.736
+Z	2	3758.16
+512.25244 559.9
+512.79901 602.9
+528.15063 655.6
+532.45319 2101.5
+561.58521 611.0
+573.35632 746.3
+606.10358 731.0
+626.92090 719.6
+630.42139 747.1
+665.84949 584.2
+667.56824 606.6
+676.63104 599.0
+676.67993 620.2
+695.24133 602.8
+785.05627 554.6
+795.97162 910.0
+848.29712 621.1
+901.43927 664.9
+939.69623 652.4
+957.30658 693.0
+1019.67444 929.9
+1022.30975 744.0
+1042.60315 686.1
+1140.29956 636.0
+1198.00769 3244.6
+1222.02136 647.9
+1265.66589 640.8
+1679.35461 610.8
+1876.36267 813.6
+1878.35022 897.7
+1879.64380 17822.7
+1879.92163 6653.3
+1880.19385 1181.0
+1880.66003 1124.2
+1907.13086 7427.7
+1930.65686 1176.4
+1933.67114 762.7
+S	4087	4087	616.8265746
+Z	3	1847.205
+Z	2	1231.805
+158.06673 544.9
+163.31136 597.6
+163.36372 548.1
+167.72357 511.2
+171.64882 625.9
+173.89314 666.1
+188.26033 750.8
+188.27209 998.6
+188.28242 1088.6
+188.29187 1433.9
+188.30174 1290.4
+188.31197 913.8
+188.32629 877.0
+190.17607 618.6
+199.05753 533.9
+199.28801 1014.6
+199.32373 745.5
+199.36314 1526.8
+199.37486 2083.4
+199.38512 2615.3
+199.40712 901.5
+199.42860 717.4
+199.47203 833.8
+199.48323 1088.2
+212.27005 564.5
+223.30354 513.5
+224.24002 609.1
+264.91254 559.6
+271.30569 680.8
+285.84006 533.1
+300.59341 529.7
+307.57098 671.0
+317.91104 619.6
+320.93243 1044.8
+328.59464 528.6
+330.68674 806.5
+350.85818 1495.7
+353.10104 697.5
+360.64127 542.5
+363.70956 526.7
+376.79703 556.5
+377.59695 588.0
+394.30960 15648.3
+395.31281 5489.4
+399.76190 643.6
+412.14948 584.8
+412.31982 20377.0
+413.32336 7639.5
+415.25146 841.9
+418.90662 5896.3
+419.91040 1228.3
+427.57190 815.2
+430.33032 29988.3
+431.33383 8220.5
+443.40259 704.1
+444.17029 544.0
+448.34073 30391.0
+448.83618 1160.1
+449.34445 8450.0
+486.57419 637.3
+503.30707 569.6
+516.48340 655.7
+516.88403 1951.6
+518.78503 796.5
+532.42426 2135.0
+547.33008 830.4
+549.19904 708.0
+561.37018 54952.0
+562.37354 23620.3
+562.98181 632.1
+563.37671 815.5
+572.02826 599.8
+579.38080 79341.9
+580.38385 28611.6
+581.38971 627.2
+591.35254 816.3
+596.63263 720.2
+597.39124 101478.3
+598.39435 30085.7
+599.39319 1491.3
+630.44135 672.9
+652.29071 653.6
+676.68719 1062.7
+690.68018 574.6
+702.96777 654.9
+729.36523 1160.5
+729.86737 1223.7
+789.55017 696.6
+824.98975 644.0
+900.86890 656.0
+921.62860 922.5
+1053.70642 891.7
+1197.94971 3625.2
+1547.24670 628.7
+1553.04443 729.0
+1877.89563 806.5
+1878.31824 808.2
+1878.71521 715.3
+1879.03882 786.7
+1879.65930 19882.3
+1879.95056 2876.0
+1880.24414 1134.1
+1880.60852 842.9
+1880.96582 814.6
+1883.20056 614.6
+1907.17468 7189.4
+1930.70068 899.8
+S	4089	4089	1880.0668246
+Z	2	3758.286
+Z	3	5636.925
+532.43005 2066.7
+532.66553 581.6
+534.84882 651.1
+556.30420 608.3
+621.22626 586.3
+676.69250 786.6
+709.84210 651.1
+714.38080 599.1
+747.49500 606.6
+750.00897 666.8
+795.96790 1014.2
+967.46179 680.7
+1019.70020 638.3
+1188.22510 776.1
+1197.96277 2859.8
+1207.85120 587.1
+1266.35474 717.9
+1389.17395 672.9
+1538.51416 717.9
+1667.41943 842.7
+1876.25928 971.3
+1878.09253 744.7
+1878.34167 878.0
+1879.27380 3137.2
+1879.69189 18999.5
+1880.12964 2696.1
+1881.19897 970.5
+1882.68530 781.5
+1906.86194 1379.7
+1907.13013 7323.5
+1919.12427 796.9
+1930.65332 808.7
+1944.31494 608.1
+S	4090	4090	1907.5668246
+Z	3	5719.425
+Z	2	3813.286
+532.39380 2180.2
+541.51202 578.6
+568.73468 619.8
+569.97681 548.1
+594.96277 667.0
+609.92328 640.8
+661.22577 561.0
+676.67590 613.4
+690.88806 708.3
+711.97540 598.9
+754.93103 611.9
+759.21326 674.7
+795.95508 1036.0
+851.47498 581.1
+920.43671 604.0
+951.09174 584.5
+1019.63751 765.5
+1188.28174 822.2
+1197.87988 3484.5
+1299.13672 591.7
+1411.43359 761.8
+1659.08215 772.7
+1862.96814 603.5
+1868.76160 662.6
+1876.21204 801.7
+1877.90466 1185.1
+1878.76355 1938.0
+1879.31165 4836.0
+1879.66357 18600.4
+1879.99243 5271.1
+1880.42175 964.5
+1880.57056 1115.3
+1880.87219 1706.2
+1881.19531 675.6
+1907.16028 7199.6
+1919.05078 687.4
+1930.68884 1139.6
+1932.56445 966.1
+S	4091	4091	443.3248246
+Z	3	1326.699
+Z	2	884.802
+110.93379 551.8
+118.76781 657.0
+120.67191 641.5
+121.76945 2220.8
+121.77522 839.8
+123.68577 604.7
+125.28223 509.8
+128.58232 671.8
+136.17915 516.1
+141.89246 605.0
+165.74219 1024.4
+167.13104 636.3
+168.52083 505.9
+177.88881 561.6
+178.84900 662.8
+179.84877 683.6
+198.99356 933.0
+199.27052 936.1
+199.36813 2938.4
+199.37691 1166.0
+199.46635 921.9
+199.56244 547.3
+199.68961 528.2
+214.14557 770.3
+240.17729 518.0
+244.94968 1586.9
+246.95049 34352.2
+254.67731 569.9
+310.77899 514.1
+333.01645 545.6
+334.74246 491.8
+336.53302 577.2
+342.92654 5112.8
+343.85547 834.5
+344.92740 59414.3
+347.20471 577.1
+427.56778 1056.4
+447.17282 612.5
+449.32892 563.8
+476.79132 666.4
+484.89868 589.5
+501.40195 530.0
+516.53412 572.2
+524.91150 645.2
+532.41309 1838.0
+545.84979 632.9
+630.44971 693.1
+689.93890 531.1
+761.43811 798.2
+795.95392 1156.8
+856.50763 573.8
+906.62463 615.3
+935.70770 516.4
+962.57086 586.1
+995.96417 649.7
+1045.03052 602.1
+1057.32898 1102.7
+1096.46472 569.0
+1139.94019 692.4
+1147.91479 583.8
+1157.00549 557.4
+1197.91150 2946.5
+1244.92346 689.1
+1390.06958 663.2
+S	4093	4093	1880.17440793
+Z	3	5637.248
+Z	2	3758.501
+506.93509 585.7
+532.36835 1859.8
+547.88574 659.3
+630.45343 876.3
+676.66602 803.6
+706.41827 667.2
+795.95410 898.8
+1012.00952 696.2
+1057.27917 628.9
+1187.84326 548.0
+1197.82092 3164.7
+1476.31140 643.8
+1506.89246 819.9
+1776.93933 965.4
+1878.80078 1520.4
+1879.21875 3135.1
+1879.60828 18698.0
+1880.00354 3380.2
+1880.45813 1091.4
+1907.10559 7355.0
+1930.74524 1226.6
+S	4094	4094	1907.54840793
+Z	2	3813.249
+Z	3	5719.37
+532.36926 2310.4
+630.47693 696.5
+671.96667 626.2
+676.68622 1002.2
+701.02380 556.7
+741.35364 560.7
+847.54242 588.8
+863.42389 692.0
+885.45789 616.8
+944.07019 626.1
+1002.77234 583.9
+1106.93738 620.0
+1140.51050 713.2
+1170.88025 633.3
+1197.82544 3527.0
+1247.19885 718.8
+1386.72351 691.5
+1518.30481 587.2
+1525.56372 893.6
+1570.38977 618.5
+1715.02893 620.2
+1776.93958 881.9
+1778.68408 768.3
+1870.22241 625.7
+1877.82202 786.4
+1879.13196 1030.8
+1879.35815 4176.9
+1879.67395 18793.8
+1880.00830 3872.7
+1880.19141 901.4
+1880.64880 833.0
+1907.15747 7401.2
+1908.55542 621.8
+1929.30957 643.3
+1930.77332 889.6
+1932.58032 754.7
+1938.93494 815.9
+S	4095	4095	445.539407933
+Z	3	1333.343
+Z	2	889.231
+114.05143 576.7
+115.80999 583.5
+121.76344 687.8
+121.76757 1628.6
+124.58015 594.7
+133.10287 914.9
+148.79613 623.0
+169.49654 635.7
+177.43481 608.9
+198.99200 973.1
+199.26353 780.4
+199.36131 3100.5
+199.45993 791.9
+209.75137 500.9
+215.17390 551.6
+219.12131 730.2
+229.08656 693.9
+246.95061 4767.1
+247.95410 849.3
+248.94595 9505.2
+280.18353 707.1
+302.72629 619.4
+306.10150 600.4
+341.01703 25171.2
+342.28101 751.1
+344.92743 7064.0
+345.93088 1652.8
+346.86008 2479.7
+346.92230 14978.7
+347.85986 2371.7
+349.81805 592.6
+350.27908 808.7
+355.07089 875.5
+359.02780 3248.1
+401.05075 1105.2
+402.77524 967.9
+404.77588 2444.1
+404.88428 694.4
+412.68320 574.5
+427.55521 674.9
+429.08752 88599.1
+430.03110 658.8
+430.08817 2730.8
+482.66776 734.2
+532.40332 1827.5
+540.54681 633.4
+573.62250 561.3
+582.51343 566.0
+641.52844 658.1
+646.84875 528.6
+676.67059 949.9
+697.74243 591.5
+722.22418 564.9
+761.45386 671.6
+795.96649 1212.8
+803.86078 642.1
+830.23407 625.6
+858.84094 601.8
+1019.63049 776.0
+1057.30530 675.4
+1155.07837 595.0
+1193.40625 557.1
+1197.89880 3168.8
+1243.24365 732.7
+1459.05981 577.7
+1564.00146 552.7
+1578.47363 725.0
+S	4097	4097	1907.55640793
+Z	3	5719.394
+Z	2	3813.265
+532.38861 1460.0
+549.14178 783.5
+630.39905 809.5
+676.69019 900.0
+795.96716 932.5
+837.20386 642.4
+889.58997 598.5
+1001.80090 564.5
+1018.61676 622.2
+1057.32800 814.3
+1188.05029 894.6
+1197.87280 3418.2
+1249.62854 662.9
+1269.48950 605.9
+1312.85657 639.8
+1429.40845 634.5
+1581.66589 617.9
+1793.41284 632.5
+1878.30737 888.9
+1878.69165 1357.0
+1879.11414 1380.6
+1879.37134 3833.9
+1879.67920 18461.8
+1879.97791 4210.7
+1880.28052 1002.6
+1880.65295 1596.5
+1881.05933 787.5
+1907.08081 7251.3
+1930.56665 887.8
+S	4098	4098	1879.78840793
+Z	3	5636.09
+Z	2	3757.729
+532.40796 1900.5
+557.62750 620.4
+583.90894 591.4
+611.33441 612.9
+632.08319 583.2
+676.67786 1434.3
+778.99219 576.9
+786.26019 667.3
+795.94812 968.5
+1057.31091 755.0
+1197.91565 3176.8
+1347.50183 625.4
+1489.76587 775.9
+1525.49292 772.6
+1877.87830 867.3
+1878.59583 670.0
+1879.16797 1902.3
+1879.34424 1602.0
+1879.64380 19512.7
+1880.10413 2292.6
+1880.66724 735.0
+1880.80969 748.5
+1881.33899 1477.0
+1907.08020 7601.9
+1930.72400 789.5
+S	4099	4099	547.2308246
+Z	3	1638.417
+Z	2	1092.614
+148.92227 569.7
+151.80928 586.5
+158.67810 553.4
+169.49022 528.7
+176.77040 670.1
+182.77890 539.5
+188.24837 657.6
+188.26498 945.7
+188.26939 1021.4
+188.27487 989.1
+188.28510 1001.3
+188.29286 1090.6
+188.29779 1104.8
+188.30705 1154.6
+188.31520 772.5
+188.44449 546.9
+198.99139 758.8
+199.28271 819.9
+199.30092 711.3
+199.32564 728.9
+199.34688 1035.8
+199.36433 2241.7
+199.37944 2132.5
+199.40157 761.5
+199.46857 764.7
+202.31380 591.7
+203.80501 606.0
+205.12698 748.0
+218.15988 640.4
+221.12915 762.5
+223.74602 529.8
+225.33052 757.7
+230.74153 647.9
+252.88060 921.9
+255.28464 687.1
+256.53622 713.5
+258.70462 589.6
+271.37680 655.6
+290.95630 609.2
+291.94562 573.4
+300.79562 627.4
+302.96985 629.4
+306.05673 676.2
+321.31357 721.0
+342.62549 625.2
+348.85809 1100.8
+350.85693 22045.3
+362.20731 633.3
+368.86642 906.3
+373.25510 571.6
+380.85202 881.6
+414.01389 627.7
+427.53351 581.2
+446.84311 682.0
+448.83356 27327.0
+449.72720 568.1
+485.97348 560.4
+504.75122 2080.4
+518.82489 732.6
+526.91321 546.0
+528.16925 589.7
+529.37219 4746.2
+530.37360 1250.4
+532.42633 1644.4
+545.76514 637.1
+549.14746 716.1
+582.28918 1577.3
+582.79529 1169.7
+602.23535 564.1
+630.40558 962.8
+638.83167 1835.8
+639.33514 1641.2
+660.65887 549.4
+676.67395 812.0
+695.37537 4848.2
+695.87646 3856.2
+696.38159 1855.4
+702.59741 613.1
+711.07715 645.7
+909.10382 658.0
+912.40015 683.4
+967.82562 579.8
+1019.78741 590.6
+1057.28772 1004.5
+1158.95923 655.8
+1197.94604 3174.6
+1355.56055 691.4
+1681.26526 607.4
+1692.75586 561.1
+1777.06470 731.3
+1780.09570 704.7
+1870.10693 740.2
+1876.11646 724.0
+1878.78210 680.8
+1879.25562 2055.9
+1879.62524 20083.8
+1879.93396 2176.1
+1880.41589 641.3
+1880.84888 752.7
+1907.21814 6978.5
+1930.59265 931.9
+S	4101	4101	1880.10340793
+Z	3	5637.035
+Z	2	3758.359
+532.38196 1562.9
+676.67743 999.7
+791.73370 581.6
+795.94684 959.0
+846.03021 653.3
+1020.87537 600.2
+1057.27966 864.2
+1197.84631 3160.6
+1247.62415 615.1
+1351.59045 636.9
+1494.20569 688.6
+1503.58374 652.7
+1776.97388 830.6
+1877.65808 837.3
+1878.35437 814.5
+1879.01306 1348.0
+1879.26416 1623.5
+1879.63989 19762.0
+1880.03674 1240.5
+1880.28052 1311.8
+1907.05090 7143.9
+1907.30676 828.9
+1930.65417 971.4
+S	4102	4102	1907.5908246
+Z	2	3813.334
+Z	3	5719.497
+532.34753 2176.3
+537.55017 687.3
+676.66302 1214.7
+686.66541 610.4
+718.32874 620.2
+795.96301 953.8
+864.70636 644.0
+1039.77234 721.7
+1175.45203 602.3
+1197.76917 3233.2
+1259.29944 606.1
+1303.96558 589.8
+1307.13586 691.7
+1879.18469 2444.3
+1879.61194 19447.3
+1880.03784 2756.8
+1880.66516 774.8
+1880.81091 663.6
+1907.10229 7264.0
+1930.66284 919.0
+1932.63354 973.4
+S	4103	4103	443.324991267
+Z	3	1326.7
+Z	2	884.802
+112.13954 669.7
+121.76822 2371.9
+129.91145 636.1
+131.71660 766.1
+133.09654 999.3
+137.28825 553.2
+140.48561 565.4
+150.38838 627.7
+160.77081 579.7
+164.20955 639.7
+171.64687 634.8
+199.27556 1361.2
+199.37347 3064.3
+199.46129 649.6
+199.47118 1103.6
+220.55673 715.8
+231.43840 672.6
+231.49892 644.3
+238.66345 723.7
+244.95081 2075.6
+246.95058 23140.6
+250.89735 612.4
+279.58649 676.6
+342.92737 3388.4
+344.92734 42769.1
+345.42188 705.8
+356.47198 509.2
+362.19775 583.9
+372.91824 623.2
+407.20786 635.6
+446.44040 522.8
+453.00778 509.4
+532.37708 2085.3
+572.24286 548.0
+607.70856 593.2
+630.41144 949.2
+676.67908 1026.1
+709.14655 713.0
+775.26172 758.4
+780.62665 644.6
+795.53357 559.2
+795.96973 767.0
+874.59344 614.5
+893.67645 614.9
+938.84467 624.8
+985.03564 528.8
+1038.87512 688.2
+1057.30981 681.0
+1188.07544 928.1
+1197.84167 3068.5
+1426.22583 657.0
+1597.42627 699.5
+1762.83032 576.3
+1775.73584 687.9
+S	4105	4105	1880.0178246
+Z	3	5636.778
+Z	2	3758.188
+524.83765 579.4
+532.39746 1873.7
+607.62677 704.4
+619.35199 601.8
+630.43024 735.4
+650.82007 566.7
+676.69366 782.8
+676.72626 702.1
+686.57544 603.9
+690.10114 593.2
+780.68671 687.3
+795.96283 808.5
+861.39734 739.8
+924.09766 810.4
+970.09967 578.7
+999.13818 561.4
+1076.25708 609.5
+1162.14648 652.5
+1197.88916 3573.6
+1217.80115 934.1
+1300.23999 694.0
+1358.13733 596.5
+1398.38440 752.3
+1489.28796 666.2
+1496.67114 856.6
+1667.35547 613.7
+1734.97913 607.4
+1777.33960 742.4
+1878.84668 1550.1
+1879.40479 5577.0
+1879.67273 17454.1
+1880.35059 2405.6
+1880.73865 1383.8
+1907.13306 6975.8
+1930.66357 864.5
+S	4106	4106	1907.52340793
+Z	2	3813.199
+Z	3	5719.295
+532.41193 1947.2
+676.57892 745.6
+676.80164 740.5
+732.37341 691.5
+952.07007 637.6
+988.85266 700.6
+1051.58887 556.0
+1197.92249 3200.6
+1523.84082 568.2
+1525.36914 873.6
+1584.02893 589.6
+1768.11072 623.3
+1860.11877 658.0
+1879.15747 3007.1
+1879.47461 10137.2
+1879.76624 13916.9
+1880.07959 8765.1
+1880.84229 828.3
+1907.14575 6745.2
+S	4107	4107	1198.1788246
+Z	2	2394.51
+Z	3	3591.261
+350.29733 737.5
+359.63943 621.7
+388.85706 621.0
+482.67310 884.2
+507.22253 623.0
+532.40436 1903.9
+532.46515 686.4
+548.72180 622.4
+549.18036 674.4
+592.07855 609.0
+670.95703 606.3
+676.67938 1010.6
+686.24530 654.7
+714.22546 596.5
+731.15479 926.8
+795.97302 862.8
+864.39258 784.4
+876.70630 734.8
+1057.32153 639.4
+1076.28308 690.8
+1079.46790 644.2
+1139.46667 665.5
+1188.26807 949.5
+1197.67383 709.6
+1197.88928 2607.0
+1300.32288 748.6
+1485.16296 700.6
+1525.49988 801.8
+1683.95898 613.7
+1777.24084 680.4
+1806.06030 661.7
+1875.79016 669.6
+1878.22595 1317.2
+1879.34338 2253.2
+1879.65881 19273.6
+1880.33508 1283.0
+1880.74890 1063.5
+1881.18005 788.5
+1881.61108 744.6
+1907.12170 7236.8
+1930.71619 875.2
+S	4109	4109	1880.1385746
+Z	3	5637.141
+Z	2	3758.429
+529.04346 582.8
+532.36755 1662.3
+553.38239 600.7
+616.13654 594.3
+676.69385 878.7
+700.10034 703.2
+810.50171 589.7
+849.80457 592.6
+999.51056 613.7
+1057.31042 1044.2
+1197.82739 3304.4
+1334.40552 631.1
+1525.49402 1002.7
+1597.23938 616.6
+1754.50635 682.9
+1878.61121 1602.6
+1879.10730 1461.0
+1879.42920 4248.1
+1879.67395 18828.5
+1880.72400 1437.1
+1881.05347 900.6
+1906.94543 1240.9
+1907.21423 6940.4
+1930.71875 1155.1
+1989.30591 715.6
+S	4110	4110	1907.58924127
+Z	2	3813.331
+Z	3	5719.492
+532.40936 1902.3
+532.45721 750.3
+534.01648 560.4
+549.17792 710.4
+591.50317 667.8
+610.90308 559.0
+635.45776 605.5
+674.15894 553.2
+676.67389 811.6
+722.83331 600.5
+793.11084 612.8
+795.98822 702.6
+800.14801 720.4
+802.74872 592.7
+1011.53363 582.5
+1017.55957 553.8
+1057.31738 1134.1
+1104.68445 656.2
+1197.91516 3161.5
+1220.09387 854.0
+1246.66504 655.5
+1356.81580 599.6
+1446.74011 706.0
+1525.49658 941.9
+1566.82642 605.4
+1839.18408 733.5
+1878.85999 1335.0
+1879.29602 2566.0
+1879.64514 17981.1
+1880.06824 1268.1
+1880.57593 1158.8
+1881.10498 928.2
+1907.16174 6980.6
+1930.71387 1207.3
+S	4111	4111	443.324407933
+Z	2	884.801
+Z	3	1326.698
+114.58468 558.6
+117.56989 579.6
+121.76743 2439.7
+124.04464 541.6
+124.68509 473.2
+129.63086 631.2
+134.76242 543.7
+136.99603 576.1
+160.49506 587.7
+167.62885 478.4
+174.44290 572.6
+178.53207 488.7
+182.78267 678.3
+186.50456 599.4
+198.99721 806.9
+199.27225 698.0
+199.32179 515.7
+199.32938 673.7
+199.34949 839.2
+199.36778 2457.4
+199.37933 1576.1
+199.40530 605.1
+199.47662 902.1
+200.35651 689.3
+229.50891 530.7
+244.63503 564.0
+244.95010 917.8
+246.95062 17611.0
+255.29074 953.4
+264.05664 648.3
+303.66333 678.8
+315.18146 763.9
+342.27664 889.4
+342.92609 2118.2
+344.92737 32266.0
+348.45285 557.3
+415.24496 634.6
+476.78076 641.7
+478.57440 509.4
+507.51166 532.5
+511.27341 589.9
+532.36292 1805.8
+549.15961 907.2
+552.40198 547.8
+600.29694 653.0
+662.01160 576.2
+676.67505 1091.6
+690.44275 576.8
+753.86499 563.7
+793.85126 731.3
+795.97815 979.7
+858.04669 775.9
+865.15436 609.4
+1014.44843 645.6
+1021.07343 610.4
+1057.33069 668.3
+1197.81299 3264.5
+1228.06543 861.9
+1435.92542 705.0
+1466.50208 751.2
+1489.59814 690.5
+1514.40857 602.9
+1525.42444 1036.7
+1729.03088 587.8
+1734.38831 657.6
+1777.03027 904.2
+S	4113	4113	1907.57440793
+Z	2	3813.301
+Z	3	5719.448
+520.07709 610.5
+532.41577 1868.4
+540.00275 561.0
+637.83594 576.8
+649.04907 593.7
+676.67908 990.1
+731.17291 722.5
+795.97040 744.9
+820.37653 660.6
+840.45203 555.9
+873.78400 730.5
+937.90448 628.2
+969.08258 605.8
+994.14246 696.8
+1188.24829 919.5
+1191.55627 714.7
+1197.92749 3091.0
+1332.92139 669.6
+1586.12158 633.5
+1747.79272 744.2
+1785.37476 737.3
+1876.27515 730.7
+1877.68054 888.0
+1878.19495 586.1
+1878.40295 706.7
+1878.95044 1929.1
+1879.31006 2222.2
+1879.66174 19294.1
+1880.01953 1937.2
+1880.39429 1808.0
+1880.64844 981.5
+1880.96521 792.2
+1907.18848 7317.1
+1930.72913 857.2
+1960.10999 723.4
+1966.86487 610.2
+S	4114	4114	1198.25599127
+Z	2	2394.664
+Z	3	3591.493
+342.23911 623.9
+350.28641 801.6
+363.20569 646.1
+373.80692 575.7
+394.91632 656.9
+396.98157 585.6
+409.83420 588.7
+427.57364 706.4
+430.18469 617.1
+492.99207 801.9
+532.39880 1769.8
+534.30859 666.9
+630.43817 846.9
+676.14844 682.2
+676.69153 765.7
+724.65973 661.6
+790.15094 580.4
+795.96423 884.5
+805.18719 598.4
+828.76733 703.8
+863.37048 584.2
+959.36255 619.4
+965.27863 582.7
+1018.52026 651.9
+1197.89221 3266.1
+1848.48193 689.5
+1878.61975 964.0
+1879.27283 1358.4
+1879.65955 20027.8
+1879.94177 1641.2
+1880.69263 1008.3
+1880.95190 889.7
+1907.10046 7243.3
+1918.70117 625.6
+1930.70190 1049.6
+S	4115	4115	965.7328371
+Z	4	3858.90005
+255.28407 578.9
+271.30688 791.3
+280.19635 691.9
+296.46033 526.8
+298.48236 557.4
+300.34735 538.1
+308.52292 654.1
+314.85754 690.4
+322.70316 599.8
+339.74005 609.9
+342.28760 638.7
+388.14423 647.0
+403.64331 623.3
+460.69415 589.4
+469.49319 615.0
+482.60376 761.2
+482.67801 908.4
+515.86908 565.3
+532.42059 1912.7
+544.24921 773.5
+552.44397 751.9
+577.19232 664.8
+739.29132 716.5
+777.59326 681.1
+795.96356 872.6
+820.83258 548.7
+842.33179 578.9
+857.15411 640.7
+858.08441 659.5
+1183.80811 620.6
+1197.93835 3462.0
+1345.36255 555.0
+1683.74438 735.8
+1777.12683 708.4
+1870.12134 975.3
+1879.14758 1881.2
+1879.61487 16946.2
+1880.08252 2313.0
+1880.50293 1381.7
+1881.15564 699.7
+1907.05176 7327.0
+1919.11975 736.6
+1930.68958 1151.6
+S	4117	4117	1880.0648246
+Z	2	3758.282
+Z	3	5636.919
+532.43109 1739.6
+542.38879 588.0
+676.66547 1135.0
+731.13916 710.3
+795.96631 933.7
+916.23804 638.5
+1067.54077 603.5
+1187.91296 794.0
+1197.95715 3489.8
+1403.36560 586.2
+1776.92798 736.6
+1870.20569 957.6
+1878.54993 1213.1
+1878.99524 1467.7
+1879.60254 19916.3
+1880.25061 1114.6
+1880.61829 1529.2
+1880.99438 656.3
+1883.14490 703.4
+1907.16846 7169.7
+1919.08044 908.2
+1930.65625 736.4
+1980.33875 691.8
+S	4118	4118	1907.52740793
+Z	3	5719.307
+Z	2	3813.207
+532.47284 1871.6
+536.32208 600.9
+545.72308 759.4
+614.37042 605.1
+630.45477 626.7
+655.87921 624.6
+676.67578 1189.6
+702.11871 595.5
+721.98151 642.0
+729.64819 597.9
+730.23303 576.5
+823.15576 680.4
+1004.85645 613.7
+1057.23999 695.8
+1089.13562 669.7
+1115.46680 576.1
+1198.06104 3477.2
+1369.68909 734.4
+1877.79822 955.9
+1878.85388 1439.8
+1879.08899 826.2
+1879.64258 18392.5
+1880.15381 1414.5
+1880.45288 1545.8
+1880.78333 770.3
+1907.18433 7187.5
+1930.79492 757.2
+S	4119	4119	1198.37240793
+Z	3	3591.842
+Z	2	2394.897
+381.61823 613.6
+385.58551 661.4
+532.40625 2311.1
+550.39911 668.3
+626.04230 640.2
+650.49103 607.7
+676.67383 959.5
+728.14795 621.5
+767.98328 713.7
+795.96362 1063.8
+910.43610 614.3
+1026.67139 682.4
+1057.30762 689.0
+1139.95129 563.1
+1197.91052 3413.0
+1293.27600 686.5
+1375.31177 735.9
+1394.74548 673.8
+1404.39783 681.5
+1525.35535 891.1
+1705.82617 744.1
+1714.01050 611.4
+1805.96460 625.0
+1876.16125 793.7
+1878.90063 1098.7
+1879.11072 1160.6
+1879.34509 2124.4
+1879.63782 19667.7
+1880.15210 1420.5
+1881.34143 928.4
+1881.80322 794.5
+1901.59778 721.4
+1907.17944 7213.7
+1907.49768 1136.3
+1930.49146 833.0
+1993.39709 607.1
+S	4121	4121	1880.05999127
+Z	2	3758.272
+Z	3	5636.905
+525.16711 623.0
+530.28198 620.6
+532.38556 1902.5
+598.34161 568.7
+676.62323 1180.3
+726.84601 641.4
+795.96716 842.0
+956.13635 632.3
+1012.84070 582.6
+1057.23120 1179.2
+1096.21765 600.0
+1197.86438 3131.3
+1263.79871 573.2
+1433.47046 649.8
+1525.39539 928.0
+1716.78918 1556.0
+1872.16296 802.6
+1879.48999 20505.8
+1883.75916 661.4
+1907.18738 7737.1
+1919.05396 694.5
+1930.54126 853.8
+1954.72766 784.2
+S	4122	4122	1907.66024127
+Z	3	5719.705
+Z	2	3813.473
+532.36829 1974.2
+656.97870 603.7
+676.65033 1066.5
+681.67322 695.1
+757.39502 519.2
+795.95001 906.1
+902.53864 570.5
+929.92230 627.1
+1057.26660 874.1
+1197.81519 3417.5
+1207.27148 723.5
+1252.13550 697.7
+1300.84229 562.1
+1399.89783 585.9
+1499.05176 703.4
+1525.49219 697.2
+1718.56726 1176.4
+1874.12866 882.3
+1878.98010 1148.3
+1879.57300 20450.4
+1880.43970 951.0
+1881.39087 907.5
+1907.18237 7749.2
+1930.70093 1181.8
+1932.57996 874.0
+S	4123	4123	443.323991267
+Z	3	1326.697
+Z	2	884.8
+110.47158 558.8
+117.56906 615.2
+121.76196 572.0
+121.76628 2141.0
+133.43733 588.1
+135.54700 573.1
+135.76738 579.3
+159.62926 630.9
+165.73691 728.3
+167.75014 625.6
+179.37740 636.1
+182.79112 778.9
+185.60237 565.7
+187.37090 598.7
+192.88907 486.2
+197.43759 546.0
+197.71788 620.2
+198.99644 790.2
+199.27936 1143.7
+199.31705 522.5
+199.37781 2794.9
+199.39311 1298.7
+199.47446 996.0
+204.48827 583.8
+219.09889 593.3
+221.08501 749.1
+224.84042 671.2
+233.58925 589.4
+240.82921 558.8
+246.95061 16272.9
+258.57657 717.6
+263.44907 611.9
+280.19125 569.0
+287.11804 518.7
+311.41696 531.8
+325.66946 639.5
+342.92612 1400.7
+344.92731 26944.7
+345.32996 561.7
+348.32831 484.7
+348.34229 503.8
+350.31693 722.9
+377.65933 519.0
+381.37994 763.1
+383.67065 636.5
+400.83490 696.7
+427.56223 823.2
+488.79434 683.8
+497.78967 669.0
+504.58868 688.1
+509.09485 632.9
+532.38226 2261.5
+630.43689 847.3
+656.56146 559.5
+676.69025 906.6
+676.92004 556.2
+795.98871 681.7
+813.36285 507.2
+986.56470 713.7
+1026.32031 531.4
+1057.35474 667.3
+1174.93103 608.1
+1197.85522 3231.1
+1199.18164 557.7
+1278.31714 716.8
+1291.60388 600.9
+1607.87366 681.5
+1620.70764 636.5
+1629.43884 728.9
+1719.22852 1394.8
+1746.16089 635.8
+S	4125	4125	1880.09840793
+Z	3	5637.02
+Z	2	3758.349
+520.94421 831.6
+532.38391 1275.7
+559.66040 649.8
+630.45526 930.9
+705.62463 767.8
+795.97131 1040.8
+894.99268 755.4
+905.63690 593.7
+1057.32275 988.3
+1084.93848 742.6
+1197.85815 3336.1
+1207.44495 673.8
+1237.70142 626.8
+1482.10022 579.4
+1525.53979 759.4
+1613.67590 618.6
+1656.59216 686.9
+1718.30225 1224.3
+1741.72083 621.6
+1873.66199 724.2
+1878.24121 1258.1
+1879.64478 17039.2
+1879.90771 5689.5
+1880.10217 2019.3
+1880.96179 848.6
+1906.65723 606.8
+1907.20020 7509.3
+1930.79089 1213.4
+S	4126	4126	1907.6618246
+Z	2	3813.476
+Z	3	5719.71
+532.42529 1873.5
+618.72076 696.6
+630.46564 653.8
+637.34558 680.8
+754.23969 535.7
+769.21350 654.6
+795.97076 1458.5
+926.97546 595.9
+976.42969 660.6
+1000.17841 672.4
+1107.94812 744.2
+1197.94897 3130.6
+1336.32397 632.4
+1372.63147 598.3
+1681.31128 581.5
+1691.53381 737.8
+1717.44836 1698.6
+1752.07715 890.2
+1779.48083 843.5
+1872.84985 872.4
+1876.65295 764.1
+1878.18689 1126.5
+1879.56714 12504.1
+1879.73413 11319.9
+1882.60254 834.8
+1907.21301 7370.3
+1930.79382 1265.9
+S	4127	4127	722.924407933
+Z	2	1444.001
+Z	3	2165.498
+188.25183 996.5
+188.26785 1239.5
+188.27960 1554.8
+188.29141 1066.9
+188.30197 865.9
+188.30666 812.8
+188.31526 861.1
+188.33533 539.4
+189.96989 628.1
+190.28477 540.4
+198.99196 871.5
+199.34328 771.9
+199.35471 1285.1
+199.36873 1394.2
+199.37766 1598.1
+199.39088 1018.7
+199.40329 928.4
+199.42386 792.4
+199.46585 600.1
+233.59782 832.4
+238.66739 674.4
+258.01526 611.1
+274.06689 599.6
+281.55209 671.2
+286.98682 660.6
+291.23050 1184.8
+299.18594 759.3
+308.92902 985.8
+315.26013 602.5
+319.04926 743.7
+328.13998 595.5
+335.25897 643.8
+343.34488 628.3
+343.54810 624.7
+358.01120 623.7
+363.79398 633.7
+368.81708 574.7
+384.74106 601.1
+384.95465 603.0
+407.06390 634.4
+426.37427 650.4
+427.58344 764.2
+484.22141 675.0
+532.40100 1801.8
+573.53027 650.9
+576.31256 684.1
+577.57910 624.1
+661.44897 867.3
+676.69159 896.3
+705.47638 13605.1
+706.47913 4283.4
+729.33911 672.0
+795.95569 919.2
+828.09296 721.6
+1057.30762 819.3
+1197.89636 3755.4
+1300.47559 672.1
+1396.28442 689.2
+1442.28394 731.0
+1656.09656 662.0
+1716.60510 1254.8
+1737.11780 646.5
+1755.41943 627.1
+1857.23120 685.4
+1878.25354 805.2
+1878.58789 807.7
+1879.02551 1131.3
+1879.68530 18662.3
+1880.32068 1713.8
+1880.85083 778.9
+1881.61975 1461.7
+1907.20667 7270.7
+1930.77002 1142.6
+1977.49207 591.2
+S	4129	4129	1880.7028246
+Z	1	1879.695
+532.42267 1919.6
+580.13745 714.1
+675.97241 612.3
+731.12213 793.5
+780.92438 569.8
+1197.93726 3085.0
+1450.10254 744.2
+1471.20557 617.7
+1619.50171 721.5
+1777.43701 804.4
+1870.95105 859.8
+1878.25195 660.6
+1879.45068 4230.9
+1879.76025 18733.3
+1880.08948 3486.6
+1881.54553 933.0
+1907.17456 7231.1
+1907.43530 1587.3
+1930.58838 1296.0
+1983.29199 654.3
+S	4130	4130	1907.68740793
+Z	3	5719.787
+Z	2	3813.527
+532.40210 1737.9
+585.80701 595.1
+624.82220 705.9
+676.68457 710.6
+749.12506 703.8
+795.97687 770.6
+1019.64191 944.1
+1071.31323 650.3
+1139.03833 610.7
+1197.89966 3238.0
+1235.01160 600.9
+1292.79492 641.2
+1390.85156 625.2
+1528.46765 614.3
+1603.18433 613.8
+1878.29297 793.7
+1878.68225 1313.5
+1879.64917 17330.4
+1880.00000 3268.8
+1880.72070 878.5
+1881.02527 933.4
+1881.89917 934.7
+1906.83972 1193.2
+1907.13855 6835.8
+1930.65405 1077.4
+S	4131	4131	443.3248246
+Z	3	1326.699
+Z	2	884.802
+111.77626 555.3
+113.45523 538.3
+119.87591 548.2
+121.76686 2218.0
+121.77845 610.2
+126.16085 506.8
+129.18381 593.0
+133.61635 549.9
+152.37018 550.4
+153.14871 681.3
+157.60425 526.2
+161.05919 644.2
+171.09135 591.0
+177.57117 524.9
+182.78479 658.9
+192.38014 510.2
+198.99251 974.5
+199.27914 800.8
+199.35577 581.6
+199.36729 1647.5
+199.37724 3040.6
+199.39113 727.8
+199.47461 637.3
+200.99040 575.5
+210.50171 558.4
+225.79512 573.5
+229.78951 626.1
+246.95059 15210.4
+253.20111 550.6
+280.19031 601.3
+284.49094 585.0
+308.90750 714.9
+330.00693 620.8
+342.28168 709.3
+342.92624 1169.7
+344.92740 24774.0
+350.07782 612.1
+358.30814 588.0
+361.98477 638.5
+368.93762 676.8
+385.95956 633.3
+400.95557 552.8
+422.81989 659.7
+482.65799 575.2
+485.53711 633.7
+492.20114 530.5
+508.87320 640.2
+532.39874 1939.8
+553.70947 612.6
+636.49524 522.0
+639.26306 567.3
+676.68903 981.7
+690.87482 703.6
+744.70599 540.5
+795.96515 874.1
+807.17633 581.1
+816.19092 596.4
+882.35980 599.1
+917.09674 587.8
+1005.33905 540.3
+1014.55884 590.7
+1061.39600 673.9
+1140.31335 709.7
+1197.88708 3648.7
+1216.76001 739.0
+1347.78577 641.5
+1511.40894 651.7
+1663.98645 623.8
+S	4133	4133	1907.47899127
+Z	2	3813.11
+Z	3	5719.162
+532.39740 1726.7
+544.76978 675.9
+557.61530 555.3
+630.46906 991.5
+630.98883 627.7
+676.67450 762.9
+731.18738 802.8
+764.01953 570.4
+780.98853 753.0
+795.97113 707.0
+814.89136 642.3
+903.91370 582.3
+1019.70447 734.4
+1057.28748 732.7
+1069.48987 618.3
+1094.55603 593.2
+1197.89038 3196.9
+1300.18567 628.8
+1302.15295 631.1
+1486.70386 643.7
+1525.58911 935.0
+1878.44849 1121.5
+1879.35840 3675.3
+1879.61084 19655.2
+1880.12134 1335.5
+1880.50330 954.4
+1880.93530 864.3
+1881.30713 741.3
+1883.35645 555.9
+1887.91150 657.0
+1907.13220 6896.8
+1930.76538 888.2
+1932.70215 1137.3
+S	4134	4134	443.325241267
+Z	2	884.803
+Z	3	1326.7
+121.76811 2721.3
+125.69389 589.8
+143.24789 569.6
+159.00793 648.9
+169.51675 774.1
+173.46931 752.3
+177.97610 569.8
+183.75189 605.6
+188.19273 553.7
+188.20964 518.7
+188.22945 611.3
+188.25888 1345.3
+188.27525 2050.4
+188.28760 2067.1
+188.29515 2183.3
+188.30359 2074.5
+188.31444 1409.3
+188.33208 477.4
+188.38127 489.7
+188.38669 480.4
+190.66885 582.3
+192.07475 536.9
+198.99045 805.3
+199.26642 519.5
+199.31923 689.9
+199.34024 1068.5
+199.35136 709.2
+199.36237 1954.7
+199.37581 1835.7
+199.38580 1846.9
+199.46173 656.0
+214.54605 705.8
+220.40425 637.8
+222.88443 537.3
+229.79616 541.8
+244.95024 738.4
+246.95074 15961.0
+261.03363 593.5
+271.04404 777.2
+298.25305 505.3
+318.76691 627.0
+320.98911 605.1
+342.92664 1609.0
+344.92749 27390.0
+346.69934 562.2
+427.60675 950.3
+440.83130 569.9
+442.02554 621.9
+446.58176 543.3
+469.92331 694.6
+476.78229 888.0
+481.85580 701.5
+519.93970 598.8
+532.42816 2466.5
+543.55603 681.8
+630.49054 678.9
+652.13269 674.6
+676.69824 806.3
+676.87482 858.4
+795.95258 1307.8
+888.09991 683.2
+1078.85376 546.6
+1187.67603 720.7
+1197.96130 3477.1
+1216.81702 560.9
+1297.28235 704.1
+1388.19885 562.2
+1522.94360 627.7
+1648.34741 548.6
+1760.66577 650.8
+S	4135	4135	449.254241267
+Z	2	896.661
+Z	3	1344.487
+113.45041 574.7
+113.81451 577.7
+115.89643 528.9
+117.37260 553.3
+120.39016 518.3
+120.61157 736.4
+121.76623 2502.6
+131.73827 536.3
+140.85054 502.5
+158.82686 513.3
+169.34549 613.8
+169.51775 612.2
+178.36626 637.6
+198.99159 1285.3
+199.27066 999.6
+199.30290 629.1
+199.35632 1355.1
+199.37006 3419.7
+199.38387 798.1
+199.42790 693.5
+199.46790 1457.6
+200.77734 546.4
+207.79678 636.9
+212.55632 626.7
+233.60486 662.1
+233.63168 532.2
+237.96518 524.7
+250.87915 565.3
+252.87978 1613.8
+272.82349 569.1
+283.47787 526.6
+300.88416 1451.7
+306.92831 595.9
+333.56378 660.1
+343.01349 2790.2
+348.85666 12434.2
+348.92139 880.9
+349.13092 745.1
+350.30038 1008.2
+350.85709 22119.3
+368.86212 647.6
+372.90988 582.6
+394.58377 560.4
+399.33298 557.9
+406.77713 2591.6
+414.50574 572.8
+424.78909 752.4
+429.08743 1759.5
+430.08936 1588.4
+431.08499 25596.8
+432.08508 7663.3
+433.08371 1793.1
+440.39081 651.2
+444.20920 622.1
+468.75433 609.3
+469.89124 586.2
+476.79553 911.4
+499.81955 557.7
+507.10492 639.5
+532.46619 1969.5
+574.71808 678.7
+604.62811 600.3
+652.06262 609.2
+676.66101 957.2
+695.33392 759.7
+776.64685 632.7
+795.96271 773.4
+1057.26636 884.0
+1060.58545 614.6
+1154.10181 534.3
+1198.03723 3476.9
+1198.68933 601.3
+1525.61853 1019.6
+1727.77979 775.1
+1776.75769 879.8
+S	4137	4137	1879.96899127
+Z	2	3758.09
+Z	3	5636.632
+518.84302 598.6
+520.48431 578.1
+532.38928 1514.5
+542.18176 745.2
+549.20923 917.6
+650.16406 696.7
+676.70374 698.9
+708.83875 840.1
+726.34058 596.6
+753.09802 534.8
+795.95386 716.3
+845.70227 643.6
+990.96771 777.9
+1019.59796 727.6
+1019.66296 648.8
+1197.86938 2994.5
+1305.55554 723.1
+1354.07410 669.4
+1525.59900 905.7
+1798.31848 701.3
+1870.14563 706.4
+1877.41187 660.1
+1879.18152 2613.9
+1879.71265 18356.8
+1880.26892 2781.2
+1880.59766 906.8
+1907.16125 7458.8
+1930.82410 871.5
+1956.34619 725.3
+S	4138	4138	1907.57640793
+Z	3	5719.454
+Z	2	3813.305
+525.53363 681.9
+532.34412 1800.9
+616.71960 550.8
+655.53821 534.4
+674.15338 596.5
+710.45953 657.4
+716.09857 587.3
+929.77313 678.3
+1159.74475 663.7
+1182.07678 627.3
+1197.77246 3155.2
+1222.47070 641.3
+1525.54102 702.6
+1562.44849 734.7
+1571.25537 619.6
+1619.80078 709.8
+1655.80566 569.5
+1765.74585 776.8
+1878.53491 1313.9
+1878.84937 993.9
+1879.31445 1316.5
+1879.61011 19807.8
+1879.93933 1653.3
+1880.37598 1327.7
+1907.18225 7230.0
+1932.65283 1393.5
+S	4139	4139	443.324407933
+Z	2	884.801
+Z	3	1326.698
+116.41093 641.8
+116.95985 555.0
+119.41607 572.7
+120.91566 535.8
+121.76662 2306.4
+122.00775 595.5
+124.53473 509.9
+125.31529 595.8
+133.09615 955.7
+133.97394 547.0
+134.82240 480.3
+140.37955 556.5
+147.38806 549.1
+152.61989 613.3
+167.65410 735.0
+169.49321 652.4
+173.08359 536.6
+174.52513 545.5
+194.35635 562.0
+196.22256 701.4
+198.99640 878.7
+199.27765 899.8
+199.34389 841.4
+199.36000 1122.0
+199.37598 3242.3
+199.39035 1251.7
+199.47398 1526.3
+225.83258 565.2
+233.57967 893.1
+235.35097 662.5
+245.78535 551.7
+246.95059 18123.7
+305.18494 580.8
+305.28098 596.2
+306.30716 646.0
+308.90936 800.6
+317.96417 516.2
+342.92697 2201.1
+344.92734 30337.7
+345.92435 564.3
+346.27109 675.6
+356.08499 607.2
+357.78757 521.2
+400.82932 952.0
+400.91956 635.5
+403.52029 571.8
+427.55328 592.3
+448.21844 596.4
+476.79980 1063.6
+516.49945 821.8
+518.55109 566.1
+532.38025 1999.5
+536.56818 530.7
+549.15924 873.2
+603.74182 627.4
+630.45056 609.5
+676.66406 872.7
+724.20752 533.6
+732.85736 588.8
+745.61163 518.1
+788.01459 525.3
+789.54865 571.5
+795.97345 980.6
+835.11621 727.1
+1057.18494 620.7
+1057.27747 873.6
+1065.70117 574.2
+1077.46326 656.5
+1187.98547 618.2
+1197.84705 3426.1
+1234.26331 639.9
+1235.62451 646.0
+1318.25439 743.5
+1322.44324 547.8
+1630.58301 588.6
+S	4141	4141	1880.08140793
+Z	3	5636.969
+Z	2	3758.315
+518.11823 588.3
+532.35956 1594.9
+676.62476 751.2
+676.68353 968.2
+677.30536 695.6
+795.95618 986.9
+801.88733 656.8
+914.02258 674.9
+981.45056 612.4
+1011.26733 688.6
+1021.22821 738.9
+1057.18591 667.2
+1173.25684 537.5
+1197.80200 3350.6
+1274.47876 700.5
+1525.49304 885.3
+1531.19238 671.2
+1870.15735 673.3
+1878.59045 1160.2
+1879.38623 4785.1
+1879.66199 19055.9
+1880.40588 987.2
+1880.71240 957.9
+1881.61353 640.8
+1907.21704 7414.3
+S	4142	4142	1907.55524127
+Z	2	3813.263
+Z	3	5719.39
+532.40375 2186.7
+549.19324 792.3
+565.21112 614.0
+630.45178 887.0
+651.30957 699.3
+676.66498 904.5
+719.40942 580.4
+759.97650 709.7
+826.38562 670.5
+922.73016 720.8
+1019.64301 697.4
+1140.35474 973.3
+1188.15259 732.1
+1197.89648 3132.1
+1210.07837 648.5
+1525.50049 1153.3
+1878.34814 1082.2
+1878.68567 795.1
+1879.02283 1074.5
+1879.60059 19314.1
+1880.17932 1414.8
+1880.58557 921.5
+1880.83374 901.9
+1907.14905 7183.9
+1919.15906 803.0
+1927.21118 586.9
+1930.71375 1124.2
+S	4143	4143	723.5108246
+Z	1	722.503
+188.24940 700.2
+188.25540 893.6
+188.26193 860.1
+188.27286 1277.8
+188.28186 1239.1
+188.29132 1393.4
+188.30318 1432.1
+188.31261 816.2
+190.75552 643.4
+198.99229 859.8
+199.26790 823.9
+199.27931 925.0
+199.36624 1900.8
+199.37683 2487.0
+199.38629 792.1
+199.39528 927.2
+199.47467 953.8
+212.09702 708.8
+224.01619 590.4
+265.14017 608.6
+291.23248 952.1
+293.54202 621.9
+296.22455 541.3
+322.82217 757.7
+381.03625 599.6
+532.37531 1782.7
+549.18945 913.8
+562.15521 710.2
+583.26648 745.7
+628.01166 619.7
+630.44379 850.7
+676.67993 885.7
+678.94800 600.9
+686.68604 631.6
+688.97296 645.2
+705.47644 7794.8
+706.48273 2245.7
+795.96216 1072.5
+901.83929 733.6
+933.83154 681.2
+1181.53845 600.4
+1197.84497 3647.2
+1463.36816 683.7
+1525.49963 859.1
+1624.43213 654.7
+1850.70837 669.0
+1878.11133 890.3
+1879.25964 994.0
+1879.63501 19657.6
+1880.00037 1268.3
+1881.08752 973.2
+1881.60986 596.2
+1907.20300 6887.3
+1907.49829 1285.9
+1930.73950 1278.5
+1974.95410 670.5
+S	4145	4145	1879.9758246
+Z	3	5636.652
+Z	2	3758.104
+532.17706 615.3
+532.34778 1914.0
+549.21039 949.5
+676.65430 1168.3
+795.96051 936.1
+825.07507 648.7
+877.64594 614.5
+939.49237 573.7
+1079.52454 636.2
+1099.90930 652.5
+1179.63770 656.9
+1197.77783 3594.6
+1307.37061 774.9
+1447.57703 627.8
+1463.96570 622.6
+1489.79358 587.6
+1525.55615 828.4
+1667.42261 642.3
+1715.06177 644.7
+1775.47705 759.3
+1776.99463 1032.3
+1876.53967 712.9
+1878.99438 777.3
+1879.57312 20195.5
+1880.01514 880.7
+1880.46643 1065.6
+1907.19519 7404.5
+1930.78430 1062.7
+1950.91943 735.0
+S	4146	4146	1907.57299127
+Z	3	5719.444
+Z	2	3813.298
+532.33722 2334.7
+574.02399 614.9
+576.47552 526.5
+630.45062 707.7
+665.77100 621.1
+676.66553 1109.8
+685.60895 694.4
+864.61694 670.6
+989.18268 573.9
+1057.28345 1070.0
+1069.51318 630.5
+1197.74915 3406.0
+1326.61670 722.6
+1446.68115 689.5
+1451.81152 707.3
+1451.92175 780.4
+1586.67651 575.2
+1777.00549 729.4
+1878.49780 1123.8
+1879.17444 2166.4
+1879.61511 19406.1
+1879.93799 1326.6
+1880.06311 2043.2
+1880.60486 673.9
+1881.71387 840.3
+1906.68164 788.1
+1907.16675 7354.1
+1907.67163 820.0
+1916.26855 594.2
+1930.69690 778.3
+1932.61670 789.2
+S	4147	4147	443.324407933
+Z	2	884.801
+Z	3	1326.698
+121.76776 2299.6
+121.77270 532.3
+125.65396 625.2
+129.08055 580.3
+141.38283 624.8
+151.77853 603.3
+169.51318 734.3
+182.68414 635.8
+182.80353 485.3
+188.31888 516.0
+199.27956 705.9
+199.28850 805.0
+199.35788 1375.3
+199.37703 2406.3
+199.38199 2177.3
+199.41344 651.1
+199.47520 731.1
+199.56967 616.5
+210.77460 591.6
+244.94975 688.6
+246.95068 16482.0
+255.31987 635.3
+256.39606 608.0
+277.56360 590.1
+342.92606 1516.4
+344.92743 27613.3
+368.07892 563.0
+387.34256 544.5
+400.82910 963.1
+411.25342 504.4
+428.50574 565.1
+444.70224 508.0
+479.23218 581.3
+486.28104 568.6
+494.13019 528.7
+518.56439 506.5
+532.35913 2153.9
+549.22314 891.0
+585.01398 600.3
+594.79095 638.2
+629.67273 637.1
+662.99945 652.6
+676.67780 943.3
+690.11694 564.1
+713.81482 510.8
+752.40411 656.3
+795.96887 1186.9
+1057.30798 849.0
+1197.80347 3249.5
+1208.65613 643.3
+1340.28015 551.4
+1687.36292 624.0
+1776.98792 765.5
+S	4149	4149	1880.05224127
+Z	2	3758.257
+Z	3	5636.881
+532.40948 1771.4
+622.85052 574.7
+676.67010 1140.6
+795.97327 1015.6
+871.21838 654.1
+974.93652 640.1
+1019.66589 663.0
+1057.30273 723.7
+1197.92053 3333.6
+1321.67407 618.6
+1363.05029 628.9
+1530.36243 626.0
+1628.21509 684.2
+1634.02979 692.7
+1750.64368 653.3
+1878.23352 704.7
+1879.16833 1060.0
+1879.62903 19996.6
+1880.55859 1043.2
+1907.06006 6936.8
+S	4150	4150	1907.62440793
+Z	3	5719.598
+Z	2	3813.401
+515.37543 514.1
+522.74182 611.0
+532.39777 1984.9
+543.10461 547.5
+543.77496 637.8
+565.80688 681.1
+598.85382 564.7
+601.78845 553.3
+676.66736 808.8
+795.97467 1036.5
+806.47717 599.3
+819.51544 646.2
+868.16083 691.3
+1013.43024 603.4
+1104.38782 702.0
+1160.35181 762.1
+1197.89038 3250.6
+1251.37207 602.3
+1582.66101 715.9
+1628.28442 686.8
+1879.33533 5684.0
+1879.61096 18400.8
+1880.46045 800.7
+1906.84607 1776.5
+1907.15369 6959.4
+1992.11682 754.0
+S	4151	4151	443.3248246
+Z	3	1326.699
+Z	2	884.802
+119.22224 540.1
+121.76863 2528.4
+124.01441 588.2
+131.22096 628.0
+132.01350 604.5
+133.09947 975.6
+141.66193 601.3
+148.96162 630.8
+157.61040 835.3
+167.19009 527.8
+169.50011 624.9
+188.34619 549.4
+198.99934 748.1
+199.28148 873.2
+199.33229 767.9
+199.36600 736.8
+199.37901 3706.3
+199.39041 792.8
+199.40237 926.9
+199.47702 875.6
+207.68576 542.0
+222.93379 544.9
+223.98592 618.4
+224.91104 665.1
+230.28040 553.6
+236.28311 611.0
+237.69298 598.3
+242.03343 607.1
+242.95261 520.0
+246.95050 16452.1
+308.91565 635.4
+330.84961 654.7
+342.92572 1425.3
+344.92722 24827.1
+347.64883 638.8
+363.17633 573.5
+372.27606 668.0
+383.35349 582.7
+385.53976 633.8
+400.83530 718.2
+422.81726 773.5
+431.81189 607.3
+476.79169 630.1
+482.67514 682.9
+483.56830 636.7
+532.39508 1738.4
+549.17694 919.3
+672.30835 684.6
+676.68152 1023.0
+734.54431 698.3
+795.98895 1330.0
+820.50720 636.9
+852.18384 618.6
+853.93677 557.7
+971.56750 662.1
+999.27710 960.3
+1057.31946 784.4
+1078.64453 638.2
+1089.99524 649.4
+1197.87988 2977.7
+1437.99268 642.7
+1525.48767 703.7
+1765.58118 681.7
+1766.06934 632.5
+1774.92627 547.3
+S	4153	4153	1880.05340793
+Z	2	3758.259
+Z	3	5636.885
+532.35767 1308.5
+549.19244 836.7
+597.57129 637.0
+630.43982 788.8
+676.67456 1148.5
+731.16925 682.1
+757.12799 666.2
+770.41907 517.9
+795.95782 883.0
+833.77441 554.0
+884.39569 642.3
+889.01080 636.8
+951.49615 568.8
+1057.28333 899.7
+1123.47998 605.6
+1197.79504 2918.3
+1393.10046 595.6
+1464.37708 538.1
+1525.50830 816.9
+1667.31274 712.1
+1876.22534 806.8
+1879.05359 1824.3
+1879.28845 1678.3
+1879.61487 19655.5
+1879.95654 1144.1
+1880.22485 1924.6
+1906.86194 1493.6
+1907.16980 7487.0
+S	4154	4154	1907.5278246
+Z	2	3813.208
+Z	3	5719.308
+532.36078 2028.2
+713.28296 624.1
+731.14996 895.3
+780.77325 567.1
+795.98889 816.5
+858.07849 696.6
+915.74097 635.0
+1056.74451 821.0
+1110.55896 593.8
+1143.77283 654.0
+1157.85962 566.0
+1197.81006 3232.0
+1525.46716 1084.2
+1752.78503 655.1
+1846.73438 614.4
+1860.13940 712.8
+1870.32141 942.4
+1877.37512 581.6
+1878.06152 1034.1
+1878.69836 905.6
+1879.16943 1052.7
+1879.62720 18109.8
+1880.06726 2260.3
+1880.55579 931.9
+1882.14099 703.2
+1907.16882 7721.9
+1930.68359 785.8
+S	4155	4155	642.487407933
+Z	2	1283.127
+Z	3	1924.187
+165.73666 634.1
+174.93999 684.7
+181.62456 570.5
+183.88011 579.7
+188.26512 722.5
+188.27213 889.9
+188.28062 1252.3
+188.29060 1186.1
+188.31151 1057.7
+195.00664 654.8
+199.29080 771.9
+199.33858 860.2
+199.35135 955.9
+199.35902 1041.2
+199.37154 1497.2
+199.38907 2295.3
+199.39873 672.0
+199.48755 954.7
+207.13019 601.4
+213.75508 595.2
+233.88312 615.3
+238.66220 686.7
+315.04190 743.1
+335.80261 572.5
+340.31555 585.7
+349.71957 647.3
+349.98312 561.9
+372.90567 783.4
+412.83267 641.9
+427.57309 741.7
+431.06915 572.9
+434.45001 604.4
+505.86526 617.4
+532.35382 1923.3
+542.00775 970.2
+583.02887 2854.5
+625.04102 1574.7
+630.46606 776.9
+661.57623 596.4
+766.52997 725.9
+787.12476 631.4
+795.37903 709.4
+795.97491 1527.0
+1060.25183 611.4
+1147.55359 630.9
+1197.79028 3116.6
+1628.80798 600.6
+1719.99329 635.4
+1776.99622 894.8
+1870.35803 887.9
+1879.12427 2322.7
+1879.64355 19213.3
+1880.48206 923.3
+1881.42517 1084.3
+1882.32849 676.0
+1907.16797 7231.2
+1960.53833 621.8
+1961.80457 570.8
+S	4157	4157	1880.03440793
+Z	2	3758.221
+Z	3	5636.828
+511.89563 588.8
+518.24609 610.4
+532.39166 2108.4
+562.33948 585.5
+608.15979 673.3
+660.61780 741.4
+676.67792 1094.7
+726.64526 642.7
+795.97778 1150.3
+838.45258 678.4
+1019.67511 693.4
+1021.10120 540.9
+1022.05994 758.2
+1057.30945 770.7
+1144.58423 618.0
+1177.92371 652.8
+1181.81226 677.9
+1197.87280 3466.5
+1480.15259 826.3
+1525.41528 996.4
+1545.63440 637.9
+1601.87231 680.9
+1667.57739 666.5
+1715.07068 600.8
+1765.97925 576.2
+1870.33826 720.7
+1879.08154 1551.7
+1879.63989 19397.4
+1879.92798 1668.7
+1880.04785 1980.5
+1880.26404 1393.2
+1906.98218 1988.5
+1907.22620 6393.5
+1927.34839 690.7
+1930.60681 1314.9
+S	4158	4158	1907.59799127
+Z	2	3813.348
+Z	3	5719.519
+532.34869 1933.0
+630.45325 836.5
+676.66931 1012.3
+734.82098 660.7
+749.74475 532.3
+760.55359 617.7
+762.93884 569.9
+795.98517 832.2
+822.27466 612.6
+852.78876 581.5
+981.49597 613.1
+1057.28296 772.9
+1093.69568 663.5
+1197.78076 3058.5
+1231.74243 661.8
+1233.82300 550.5
+1606.06030 687.8
+1874.35657 684.8
+1878.32837 1045.2
+1878.80823 1952.7
+1879.21301 2159.5
+1879.60901 19004.5
+1879.99524 2445.2
+1880.43335 1784.0
+1880.77747 663.1
+1880.95398 684.1
+1907.19482 7372.8
+1930.74866 1247.7
+S	4159	4159	642.4858246
+Z	3	1924.182
+Z	2	1283.124
+165.73521 647.4
+168.87988 554.1
+169.49370 597.5
+185.11401 578.7
+188.25851 695.9
+188.27336 1281.0
+188.28592 1025.9
+188.29703 1271.5
+188.30809 787.4
+188.31853 614.2
+193.90329 615.7
+198.99614 992.3
+199.28264 1104.7
+199.36009 874.5
+199.38116 2442.9
+199.40324 707.2
+199.47757 1030.6
+199.50291 583.7
+235.85510 585.7
+238.66580 652.8
+244.66066 622.8
+249.45340 554.4
+259.40656 557.0
+315.03949 1086.2
+342.27591 609.3
+354.36145 554.2
+383.06433 660.4
+482.66391 853.1
+490.38968 608.2
+502.34531 643.0
+532.37854 1814.6
+538.99756 764.5
+542.00330 1439.5
+542.24481 639.9
+549.15381 955.4
+554.95709 607.0
+566.00024 993.0
+574.31537 694.3
+583.02881 3299.6
+625.03778 1946.1
+634.82745 601.0
+744.08331 617.8
+795.97772 898.2
+861.85529 669.1
+920.60651 611.8
+1006.66772 621.9
+1028.69531 780.5
+1075.19739 595.5
+1113.95642 623.2
+1197.84851 3273.7
+1391.68445 603.1
+1612.93958 665.9
+1718.21008 783.5
+1825.11023 699.1
+1876.09570 852.6
+1877.00500 567.0
+1878.60071 757.8
+1879.36877 4366.3
+1879.62463 19055.0
+1879.91443 3970.5
+1880.12634 915.4
+1880.47632 1179.2
+1907.19373 7555.4
+1982.15308 730.2
+1983.72351 695.8
+S	4161	4161	1880.00340793
+Z	3	5636.735
+Z	2	3758.159
+532.43555 2046.2
+542.29352 650.8
+545.21948 798.0
+549.16370 819.3
+570.09192 637.6
+630.41644 852.9
+655.35907 610.9
+676.67358 850.1
+722.46344 607.0
+743.79309 513.6
+795.99426 762.9
+841.73871 571.9
+939.13190 711.5
+1057.29968 944.1
+1188.31140 711.3
+1197.97180 3305.0
+1525.47534 889.1
+1876.26831 628.3
+1879.15881 2274.8
+1879.64001 18761.4
+1879.91992 2978.7
+1880.09668 2065.0
+1880.33264 1747.2
+1880.58569 749.3
+1881.72803 678.1
+1907.20740 7422.8
+1930.63696 950.3
+1955.88770 700.8
+S	4162	4162	1907.57640793
+Z	2	3813.305
+Z	3	5719.454
+532.38782 1848.9
+549.13647 788.3
+612.50909 657.1
+630.38495 924.5
+676.67334 989.0
+795.97656 934.1
+1031.21033 651.9
+1057.28137 894.4
+1116.52417 619.6
+1197.86621 2860.6
+1254.98462 688.4
+1604.76294 642.7
+1673.71606 689.5
+1723.53491 649.9
+1878.55432 1057.6
+1879.02942 1266.0
+1879.64856 18482.2
+1880.26343 1892.1
+1880.81604 1074.6
+1907.19019 7092.1
+1930.53125 766.1
+S	4163	4163	643.0748246
+Z	1	642.067
+178.94621 532.2
+188.22752 613.8
+188.23978 697.4
+188.25459 881.5
+188.26688 902.3
+188.27571 1391.0
+188.28514 1767.2
+188.29604 1574.1
+188.30902 1019.1
+188.32076 715.4
+188.32814 719.5
+199.28215 830.5
+199.33134 773.2
+199.34769 876.3
+199.35686 1223.3
+199.36790 1705.1
+199.37910 1740.8
+199.39026 1279.6
+199.42563 510.0
+199.45399 781.3
+199.46373 717.5
+199.48729 608.7
+212.30061 529.3
+216.28012 508.3
+231.60536 576.5
+255.27460 724.8
+256.95212 561.7
+262.77255 599.0
+265.32767 555.3
+280.16870 759.6
+285.96021 620.8
+288.39468 609.4
+308.89056 601.9
+311.66061 627.5
+342.25595 795.6
+352.45419 697.5
+362.35849 612.5
+427.52225 716.6
+464.36264 749.3
+482.63275 841.8
+485.52020 771.8
+528.45294 599.4
+528.80359 751.4
+532.37744 1941.0
+542.00287 1726.3
+549.12823 912.9
+566.00018 852.9
+583.02899 3836.5
+594.93390 665.0
+598.85522 611.4
+625.03973 2471.9
+652.23602 869.5
+795.98615 934.0
+805.35083 670.3
+1057.31018 943.8
+1197.83984 2993.6
+1276.03784 607.8
+1717.18896 781.1
+1877.05396 809.6
+1877.51978 854.2
+1878.60315 955.8
+1879.28601 4378.2
+1879.64722 18329.0
+1879.99426 3082.7
+1880.33899 1653.5
+1881.02808 1206.6
+1881.76697 694.0
+1906.88232 1570.3
+1907.14380 6983.3
+1930.44678 1124.3
+S	4165	4165	1880.01740793
+Z	3	5636.777
+Z	2	3758.187
+519.21393 748.5
+532.35461 1482.7
+676.67157 1258.5
+720.98553 588.9
+794.53259 609.7
+795.97418 1260.8
+854.25494 641.6
+1061.23193 609.2
+1197.79126 3075.7
+1422.24902 679.6
+1509.11450 662.1
+1657.85168 760.0
+1673.30969 548.3
+1673.46130 563.2
+1692.76636 611.2
+1860.16858 798.9
+1876.76733 650.0
+1878.25977 719.7
+1879.08582 889.5
+1879.62927 20183.4
+1880.18848 1256.5
+1880.54712 776.2
+1881.79993 700.9
+1907.14771 7011.0
+1954.10229 680.7
+S	4166	4166	1907.58999127
+Z	2	3813.332
+Z	3	5719.495
+532.35242 1786.1
+557.58636 589.3
+570.93481 693.2
+573.05872 626.3
+676.66614 904.7
+731.20825 765.4
+795.96930 917.6
+858.15057 798.3
+950.86359 618.0
+1057.27881 936.6
+1122.58105 599.3
+1188.10059 1006.1
+1197.78503 3484.4
+1200.94421 627.2
+1240.94373 643.5
+1875.74622 713.3
+1876.17651 672.2
+1879.02673 1034.9
+1879.59534 20173.5
+1880.11328 1248.8
+1907.06592 7472.0
+1919.17761 669.7
+1930.84131 1053.4
+S	4167	4167	642.4868246
+Z	2	1283.126
+Z	3	1924.185
+169.51138 694.7
+170.05017 532.8
+177.43726 568.8
+188.25253 642.4
+188.26060 772.7
+188.27086 1321.9
+188.27980 1092.4
+188.28697 1220.4
+188.29674 1205.8
+188.30649 1037.7
+188.31335 884.4
+188.32042 622.5
+188.34950 473.3
+188.35411 468.0
+199.28922 1011.7
+199.29930 779.3
+199.36644 1286.4
+199.37807 998.4
+199.38687 2767.2
+199.39542 1092.0
+199.48453 1170.8
+199.49944 584.4
+208.33658 552.7
+208.76854 543.4
+209.15262 731.1
+216.72569 572.6
+218.06734 631.1
+254.77251 734.0
+255.82648 578.6
+265.26071 529.3
+280.21179 676.0
+283.48553 713.1
+312.82928 612.3
+315.03772 1126.8
+341.06696 611.8
+360.15405 584.6
+362.43774 557.1
+385.70288 586.8
+405.87604 616.3
+427.04611 712.5
+427.58832 661.9
+458.28522 694.6
+459.42853 638.6
+481.98846 778.0
+532.31671 1766.6
+533.43402 573.8
+542.00543 1624.5
+566.00415 1079.9
+583.02985 3561.7
+611.44263 656.7
+614.26453 575.1
+625.04181 1897.2
+676.68604 960.6
+731.20374 854.2
+773.61627 537.7
+791.09454 572.7
+795.95978 934.4
+812.30304 693.1
+815.03638 619.3
+1102.54199 625.5
+1137.26294 692.6
+1151.19226 621.1
+1197.70593 3344.7
+1398.85437 718.6
+1414.48547 765.5
+1425.85718 636.4
+1777.01807 1102.1
+1857.33203 656.0
+1878.72791 934.8
+1879.03845 1247.2
+1879.66394 19009.2
+1880.33948 1323.1
+1880.62939 999.0
+1880.82727 651.8
+1907.10254 6598.8
+S	4169	4169	1880.11840793
+Z	2	3758.389
+Z	3	5637.08
+515.27863 651.2
+529.36469 582.0
+532.37384 1922.4
+549.18439 737.7
+676.70319 1167.0
+697.18317 613.6
+731.15942 894.1
+748.05145 570.6
+795.97211 1147.9
+819.76678 712.1
+834.74481 656.0
+868.22870 665.9
+974.73706 871.8
+1057.34351 936.5
+1197.82971 2939.1
+1317.59619 639.3
+1373.89087 555.1
+1443.81165 864.8
+1698.73901 737.5
+1769.43262 759.7
+1870.26660 729.0
+1878.55432 673.2
+1879.39539 3009.9
+1879.70166 18915.4
+1880.50867 674.6
+1881.22644 762.5
+1882.06836 678.0
+1906.85657 1585.2
+1907.12305 7351.2
+1930.74329 743.5
+1947.45667 661.8
+S	4170	4170	1907.5188246
+Z	3	5719.281
+Z	2	3813.19
+532.34888 1797.8
+577.94043 542.9
+582.16309 667.0
+630.44849 834.7
+637.51575 626.3
+676.67633 1128.4
+731.15668 757.1
+795.95605 706.1
+802.14575 570.6
+858.08765 654.6
+878.78741 714.8
+885.97260 575.1
+1048.66174 543.9
+1120.15857 637.6
+1197.77698 3349.9
+1525.48853 862.4
+1667.25488 900.2
+1820.23889 789.4
+1873.00623 804.2
+1879.22961 1971.8
+1879.63049 19500.7
+1880.04236 1830.7
+1880.76428 678.3
+1881.07727 885.3
+1882.76355 763.2
+1906.58704 598.6
+1907.16699 7133.4
+1930.68604 880.5
+S	4171	4171	643.0748246
+Z	1	642.067
+167.10002 601.4
+169.49362 724.1
+170.89706 587.4
+176.03601 599.6
+188.25572 746.8
+188.26430 831.4
+188.27304 950.5
+188.28395 1218.7
+188.29720 1397.6
+188.30849 1090.5
+188.33481 619.2
+198.50862 723.4
+198.99600 1097.6
+199.28996 1008.8
+199.33760 577.0
+199.35199 932.5
+199.36299 1734.7
+199.36952 1040.8
+199.37845 1072.4
+199.38768 2313.2
+199.48538 653.2
+217.57394 595.1
+223.26787 566.3
+225.61324 745.7
+228.29109 659.4
+231.43839 600.3
+236.15877 551.9
+240.11560 630.1
+265.15152 566.0
+299.75256 545.2
+305.95471 612.5
+315.03958 1068.3
+350.30792 741.8
+368.80542 635.7
+380.46323 651.9
+482.56067 643.2
+532.39215 2207.4
+539.00531 809.9
+542.00421 1528.8
+559.49225 625.7
+561.28491 589.9
+579.11578 689.2
+583.03052 3119.9
+625.04102 1746.9
+630.39636 735.5
+676.67664 996.1
+731.09106 736.0
+734.19226 595.6
+781.20105 640.9
+795.97412 1111.3
+826.06476 581.9
+895.53778 710.2
+899.70374 683.5
+957.80249 654.4
+1057.29834 895.8
+1188.00586 875.4
+1197.87659 3711.6
+1522.89355 666.0
+1525.36169 883.8
+1870.66956 683.4
+1878.75916 1144.7
+1878.93726 1053.1
+1879.24109 2361.5
+1879.62158 19232.9
+1880.00659 2032.6
+1880.28125 1114.8
+1881.56860 690.1
+1907.19983 7361.3
+1919.10803 796.8
+1930.54919 827.2
+S	4173	4173	1907.5818246
+Z	3	5719.47
+Z	2	3813.316
+532.39667 1928.7
+550.31891 577.9
+574.30652 621.1
+676.67419 1268.8
+764.30267 632.4
+795.98431 811.6
+801.84180 575.6
+1110.69873 707.6
+1146.98999 643.1
+1188.06982 748.6
+1197.88806 3166.4
+1496.40625 760.6
+1525.50537 922.7
+1580.17188 620.1
+1681.19019 621.5
+1774.37146 726.8
+1878.70862 994.5
+1879.22363 2887.1
+1879.61597 19096.4
+1880.00305 2914.4
+1881.19153 778.0
+1882.61060 569.9
+1907.21008 7358.4
+1957.22522 607.2
+S	4174	4174	1198.22699127
+Z	3	3591.406
+Z	2	2394.606
+321.32925 649.4
+341.52338 696.3
+364.55194 618.7
+408.70236 577.3
+423.63440 660.8
+526.40405 579.8
+532.37573 1773.6
+547.23737 821.7
+619.65259 571.0
+632.31793 645.6
+709.45569 580.2
+735.08716 729.0
+782.73254 585.0
+787.05273 567.4
+795.97205 908.7
+901.63623 643.0
+1021.14612 648.1
+1140.56152 653.2
+1166.58081 650.1
+1197.84412 3278.6
+1257.84363 656.3
+1476.13660 597.8
+1878.65173 1146.0
+1879.24597 5672.7
+1879.64124 17294.5
+1879.93604 5509.8
+1880.41980 2313.8
+1880.93738 883.7
+1907.21851 7171.1
+1907.60461 853.1
+1930.57971 898.4
+S	4175	4175	642.487407933
+Z	2	1283.127
+Z	3	1924.187
+165.73616 832.4
+175.93295 690.2
+179.47755 528.6
+188.24173 559.5
+188.25594 824.4
+188.27126 1111.7
+188.28079 1250.4
+188.29004 1398.4
+188.30002 1156.1
+188.31151 736.8
+198.99635 1065.2
+199.29204 722.5
+199.30794 712.2
+199.32433 595.4
+199.33080 649.7
+199.34258 681.1
+199.36310 1269.1
+199.38718 2181.9
+199.39728 1297.7
+199.41003 1049.7
+199.61674 600.3
+226.52252 576.4
+271.46570 621.8
+279.36145 680.1
+293.64227 606.6
+312.98343 681.7
+314.77127 651.2
+315.03839 1120.7
+322.27991 625.0
+324.29086 800.3
+341.54120 529.6
+353.39774 678.2
+523.91882 622.9
+523.97888 590.2
+532.38495 1846.4
+539.00433 809.6
+542.00232 933.5
+549.19586 919.8
+583.03131 2225.6
+625.03809 1549.6
+625.53833 705.5
+676.67505 1056.2
+731.09143 684.3
+795.97253 950.1
+822.59167 603.8
+850.25525 636.5
+858.12488 748.8
+889.19824 716.9
+939.82715 536.3
+974.29541 593.0
+1057.29883 915.8
+1197.85962 3481.8
+1206.02246 545.9
+1223.12292 790.6
+1224.84119 651.2
+1521.40649 584.9
+1525.53247 1088.5
+1542.83606 661.7
+1878.31055 691.4
+1879.27698 1589.7
+1879.63989 20181.0
+1880.05029 1717.8
+1881.05322 1132.0
+1907.23157 7198.9
+1994.97583 623.2
+S	4177	4177	1907.61224127
+Z	2	3813.377
+Z	3	5719.561
+532.34564 2092.8
+544.27527 616.7
+545.71497 669.5
+617.54761 607.5
+636.85211 599.4
+646.71259 679.1
+676.67792 957.9
+731.19849 603.5
+787.41638 714.2
+897.68298 689.6
+959.41315 672.2
+1029.76343 653.4
+1072.72351 558.6
+1167.40149 840.9
+1182.75989 625.6
+1197.77087 3423.5
+1233.63660 645.7
+1298.36646 623.7
+1305.72278 631.8
+1605.17456 775.2
+1878.25256 846.1
+1878.80090 1099.8
+1879.27722 1409.9
+1879.64905 20041.4
+1880.04602 1501.9
+1880.50964 1315.8
+1881.08533 1172.4
+1882.21069 643.4
+1882.34717 601.7
+1907.19836 6676.8
+1907.46997 982.4
+S	4178	4178	1198.2758246
+Z	2	2394.704
+Z	3	3591.552
+316.10233 591.8
+353.93646 642.1
+440.72168 634.3
+459.47842 691.4
+531.52893 772.1
+532.31592 2112.0
+548.38928 674.7
+549.12805 776.7
+552.28058 720.7
+597.05316 576.4
+658.97614 621.3
+676.65540 1320.9
+795.98737 929.6
+828.44934 645.1
+833.68378 597.0
+844.41406 591.2
+859.24335 680.2
+892.19672 674.7
+968.66473 647.4
+1012.03857 674.9
+1021.12616 707.8
+1188.27515 742.0
+1197.70569 3182.6
+1222.73291 749.4
+1347.93225 634.4
+1777.36914 814.3
+1791.18970 658.9
+1878.79968 1535.1
+1879.10291 903.4
+1879.57385 19786.1
+1880.41711 1254.1
+1907.19385 7479.8
+1930.41235 776.5
+1992.76245 646.5
+S	4179	4179	616.4098246
+Z	1	615.402
+157.59866 627.5
+167.33391 504.3
+169.48628 545.2
+171.99677 578.8
+173.62567 667.0
+179.04990 543.3
+179.54787 737.4
+179.68373 551.6
+188.24878 652.7
+188.26556 1113.3
+188.27603 1074.1
+188.28651 1261.0
+188.29779 1297.0
+188.30490 1214.2
+188.31612 570.8
+188.32649 707.5
+197.04543 634.3
+198.99583 1269.2
+199.29735 1099.9
+199.36319 1538.3
+199.38451 1335.9
+199.39467 2817.2
+199.42088 837.5
+199.49300 836.9
+199.51537 582.6
+214.50679 690.1
+232.44426 642.3
+232.67236 555.2
+293.77948 537.9
+310.40082 736.7
+347.35965 616.5
+348.46820 531.8
+349.92258 664.0
+352.70724 589.4
+394.19061 634.5
+394.31046 1308.0
+411.45700 626.2
+412.31973 1300.2
+430.32996 1390.0
+436.01843 646.0
+448.34100 1402.6
+452.04855 632.4
+482.63516 679.2
+532.33569 1440.5
+561.37048 3290.5
+562.37225 1212.6
+569.31573 535.4
+579.38202 5004.9
+597.39148 6619.1
+598.39319 924.7
+630.37445 1083.0
+676.67670 879.7
+780.32776 613.0
+795.97766 1039.1
+903.41742 563.8
+1019.96606 585.3
+1030.48438 619.7
+1031.77771 697.2
+1057.31042 916.3
+1188.29456 830.6
+1197.74817 3419.2
+1325.82178 667.7
+1361.11902 628.2
+1663.69287 561.3
+1695.31531 714.3
+1829.99255 729.8
+1878.59900 1109.1
+1878.99353 2341.3
+1879.63745 18775.2
+1880.27246 1668.4
+1880.67004 1124.4
+1880.91162 856.6
+1907.21973 7776.4
+1982.62109 633.5
+S	4181	4181	1907.5748246
+Z	2	3813.302
+Z	3	5719.449
+529.28705 578.4
+532.35809 1977.8
+563.37970 757.2
+592.83929 606.0
+600.63831 558.3
+630.40143 806.4
+656.94971 830.0
+676.69165 1142.5
+717.71674 600.9
+731.12622 659.2
+733.91290 628.5
+781.62811 708.5
+795.97345 925.9
+813.73767 623.0
+823.43042 712.9
+843.58643 656.2
+926.72705 630.7
+968.37415 660.3
+1018.53027 680.2
+1057.33008 873.1
+1197.78979 3726.9
+1279.66467 664.9
+1438.35144 595.6
+1495.03345 635.8
+1641.63074 713.8
+1877.20459 965.5
+1879.03271 1035.6
+1879.40503 2197.8
+1879.67114 19754.8
+1880.09790 1327.3
+1880.34106 597.5
+1886.82617 664.9
+1906.67749 749.0
+1907.13574 7037.1
+1918.99219 744.8
+1930.55554 891.1
+S	4182	4182	642.487407933
+Z	3	1924.187
+Z	2	1283.127
+165.73766 612.6
+168.88042 654.2
+169.63026 624.7
+193.26810 595.3
+199.28038 1084.0
+199.37892 2749.6
+199.39587 926.5
+199.47647 1114.9
+219.58910 563.4
+237.27632 546.1
+254.71791 582.8
+289.89877 569.5
+315.03949 966.2
+334.63928 600.7
+427.55420 680.1
+499.87109 574.1
+528.46741 554.0
+532.29089 1735.5
+539.00311 913.8
+542.00043 1017.9
+583.03027 2636.7
+625.03925 1802.1
+653.14160 680.3
+661.13959 578.3
+716.87695 711.2
+795.98547 836.9
+796.11243 790.4
+866.49915 688.6
+894.29700 561.8
+912.11591 583.0
+1019.66486 820.2
+1021.15057 592.3
+1154.98743 653.5
+1197.64136 3279.4
+1432.32837 690.1
+1489.71509 680.8
+1523.37744 629.0
+1858.20398 754.4
+1876.34937 888.8
+1877.71960 861.0
+1878.74609 763.1
+1879.63306 19691.3
+1880.55298 1434.5
+1881.60608 691.4
+1907.09424 7190.7
+1932.56848 1172.5
+S	4183	4183	443.3248246
+Z	3	1326.699
+Z	2	884.802
+113.82217 547.3
+115.30824 556.9
+115.94294 524.0
+116.25126 562.4
+120.56998 526.5
+120.65992 954.7
+121.76689 2481.2
+126.14130 546.9
+127.31606 518.6
+132.99156 638.0
+136.39807 572.4
+137.09935 661.2
+142.36330 523.6
+145.69136 690.5
+146.96590 606.7
+154.82108 560.5
+157.59763 644.3
+167.99124 557.3
+182.46924 547.3
+182.77545 594.7
+199.00111 875.3
+199.35982 597.6
+199.36586 846.3
+199.37898 3326.9
+199.39821 844.8
+199.47713 1285.1
+207.21809 580.9
+213.80029 523.1
+214.48203 545.6
+216.64339 584.3
+233.56395 754.3
+241.53310 542.8
+246.95053 6606.4
+249.96687 741.7
+252.15584 659.7
+272.87756 597.1
+302.44345 561.0
+321.71188 665.0
+322.65097 693.2
+342.26611 702.8
+344.79706 610.9
+344.92743 12545.5
+365.46786 596.2
+381.34485 752.2
+397.14929 593.8
+400.82925 791.3
+400.89633 751.0
+422.81662 786.9
+427.52554 899.7
+438.25717 559.2
+450.23431 553.3
+469.91260 678.4
+476.78534 647.2
+495.47034 571.9
+509.86584 560.7
+531.92712 508.8
+532.31360 2133.5
+534.20068 567.0
+538.63727 532.3
+549.13849 720.4
+610.13898 572.8
+630.38745 1183.2
+676.67590 988.0
+687.06030 591.6
+690.94427 724.8
+697.20959 622.5
+795.99390 857.7
+902.60114 551.1
+907.64752 605.5
+1057.29236 737.1
+1067.46729 735.3
+1069.15747 598.4
+1123.90588 624.2
+1197.69641 3718.3
+1383.81189 617.5
+1483.13989 579.1
+1525.36267 903.5
+1526.00464 685.4
+1580.94824 741.9
+1613.08911 627.3
+1643.45911 571.7
+1673.04150 555.1
+S	4185	4185	1880.07999127
+Z	2	3758.312
+Z	3	5636.965
+529.38495 611.9
+532.41577 2129.9
+549.14154 906.9
+566.59650 840.1
+577.61603 544.8
+630.38983 828.6
+676.67688 804.5
+680.77051 564.1
+689.46417 632.3
+755.79047 557.3
+795.99323 809.5
+797.44000 610.5
+858.05341 874.5
+994.60315 625.5
+1031.57544 653.8
+1087.01294 760.5
+1140.10718 710.9
+1185.35498 546.2
+1197.92603 3205.0
+1219.03967 578.7
+1345.34607 850.9
+1562.87976 669.2
+1579.95984 754.7
+1735.74951 643.7
+1833.24060 624.0
+1878.33960 758.1
+1879.65161 19044.3
+1881.34314 631.5
+1892.22070 661.1
+1907.11731 7060.6
+1981.28613 816.8
+S	4186	4186	1907.60999127
+Z	3	5719.555
+Z	2	3813.372
+532.41913 1595.2
+557.04993 576.4
+630.49207 672.0
+731.15631 764.9
+780.72894 645.3
+784.27942 605.0
+795.97144 1050.9
+826.51337 606.2
+1019.63013 883.5
+1057.31970 764.6
+1144.80383 648.5
+1197.93774 3447.2
+1481.71045 648.3
+1525.63269 684.6
+1554.44629 554.4
+1766.57764 704.9
+1870.25879 732.4
+1872.94202 886.7
+1877.57983 654.3
+1879.36914 4224.8
+1879.64990 18528.0
+1880.25085 1006.2
+1906.99988 612.5
+1907.24304 7627.2
+1930.71436 1088.6
+1992.10168 706.1
+S	4187	4187	1198.06640793
+Z	2	2394.285
+Z	3	3590.924
+381.37659 545.1
+427.55933 536.4
+483.47272 497.9
+506.83951 546.7
+532.40460 1583.5
+676.69293 1113.9
+704.18811 810.3
+880.16089 643.6
+986.06641 596.8
+1057.33716 801.9
+1079.49866 666.1
+1197.90576 3408.0
+1217.71765 751.0
+1319.25293 584.5
+1513.36792 586.5
+1573.74438 684.1
+1715.12134 829.0
+1878.31909 1030.2
+1879.34497 2755.9
+1879.68774 19248.0
+1880.02893 2402.7
+1880.56567 1045.5
+1881.94592 1157.9
+1907.21057 7064.8
+1907.63745 742.7
+1919.16248 811.4
+1930.69751 977.4
+S	4189	4189	1880.0538246
+Z	2	3758.26
+Z	3	5636.886
+532.36554 2061.6
+543.45795 630.0
+633.16638 585.6
+645.26611 600.5
+672.29633 571.9
+676.67584 968.1
+697.92871 606.3
+761.42188 647.0
+830.49438 651.1
+837.68127 671.3
+858.11304 803.9
+921.13928 712.1
+998.85370 622.6
+1057.30542 792.0
+1064.83337 731.2
+1083.45398 692.0
+1187.92908 796.2
+1197.81018 3654.8
+1244.10242 672.5
+1550.59021 688.2
+1776.98083 906.1
+1813.09668 746.9
+1876.50330 742.9
+1879.01086 1204.9
+1879.62976 19971.2
+1880.28027 1114.9
+1907.16943 7370.6
+1930.71118 886.8
+1939.21301 611.5
+S	4190	4190	1907.71740793
+Z	2	3813.587
+Z	3	5719.877
+532.40106 1862.3
+535.07629 599.3
+576.13782 720.0
+629.30670 677.4
+630.42731 800.0
+652.33307 797.7
+795.97784 821.7
+804.24139 847.3
+940.81042 637.8
+1060.85901 611.5
+1085.31311 689.0
+1197.89783 3536.1
+1328.72668 629.1
+1420.70642 684.0
+1436.90784 630.1
+1595.89038 744.6
+1876.16125 887.7
+1878.56128 716.4
+1879.20276 2567.4
+1879.61072 19161.5
+1880.00281 2701.3
+1906.94336 669.7
+1907.22778 7470.0
+1930.62109 1129.1
+1988.44861 665.6
+S	4191	4191	425.3138246
+Z	3	1272.666
+Z	2	848.78
+113.17738 571.1
+113.96650 632.1
+116.46046 593.8
+120.49832 596.0
+121.76580 2898.1
+123.83815 588.2
+127.61607 584.1
+153.63234 691.5
+165.73676 847.7
+198.99725 739.6
+199.26398 703.8
+199.27856 1150.0
+199.29761 667.5
+199.36522 1843.6
+199.37715 3123.0
+199.39020 1401.1
+199.47539 984.3
+199.48734 635.6
+205.77312 640.3
+212.75665 591.4
+213.84308 596.2
+230.56282 692.3
+235.08858 582.4
+243.52357 567.5
+263.60690 623.4
+287.91266 645.3
+308.93356 640.7
+324.91684 4014.6
+326.91681 25084.8
+326.95392 1826.7
+350.31464 1041.4
+362.32889 560.2
+372.90405 688.4
+383.11279 913.4
+388.76636 781.1
+404.86554 677.4
+404.87415 662.3
+406.78571 622.7
+423.24707 602.6
+427.59061 682.6
+458.35748 656.2
+476.81476 808.3
+482.70810 812.2
+502.10297 576.8
+508.47418 613.8
+516.69397 658.1
+517.41907 614.0
+532.39325 1016.9
+532.54950 857.3
+549.21521 921.4
+676.67767 969.3
+733.26459 610.1
+795.97968 1028.5
+1197.93091 1471.8
+1198.23206 1457.4
+1274.92419 599.0
+1525.59033 886.0
+S	4193	4193	1879.9985746
+Z	3	5636.721
+Z	2	3758.149
+532.36029 1963.4
+540.44366 663.7
+617.90802 758.1
+630.45544 1065.6
+676.00659 713.1
+676.66309 960.8
+741.49231 720.0
+766.46790 598.5
+803.38965 610.0
+890.47418 582.3
+945.63354 827.9
+959.72760 588.0
+1026.66956 604.3
+1057.29407 889.2
+1073.89148 594.6
+1115.15088 689.2
+1188.13062 1108.1
+1197.65637 635.4
+1197.80884 3461.9
+1330.50806 556.8
+1507.46570 687.2
+1525.53992 815.4
+1581.35522 822.1
+1870.15686 1001.5
+1870.43701 721.1
+1876.14343 827.6
+1879.21643 1406.2
+1879.60718 19704.2
+1880.01367 846.2
+1880.44238 802.4
+1907.17261 7536.9
+1907.48975 989.6
+1918.98352 674.6
+S	4194	4194	1907.6268246
+Z	2	3813.406
+Z	3	5719.605
+532.37738 2082.2
+549.19812 695.0
+581.78845 672.0
+621.17957 651.5
+631.69897 699.4
+676.66864 964.6
+680.49402 632.3
+720.03577 656.0
+731.18359 673.1
+755.54041 640.2
+1004.28864 587.0
+1031.53137 572.9
+1163.24951 607.2
+1197.84595 3459.0
+1275.86328 613.4
+1715.57813 630.2
+1870.44434 870.2
+1875.43518 818.9
+1879.60400 19980.9
+1879.88135 2573.4
+1881.92273 690.6
+1906.66772 874.8
+1907.26941 7342.0
+1919.01172 877.6
+1930.76929 1090.2
+1993.41125 679.7
+S	4195	4195	1198.2448246
+Z	2	2394.642
+Z	3	3591.459
+344.06299 586.8
+381.39447 704.5
+416.20630 624.4
+423.73325 686.9
+473.10602 743.5
+476.50937 750.2
+532.40033 1877.1
+615.53650 586.4
+630.45807 1024.2
+676.68628 953.4
+781.39081 619.9
+781.51538 519.2
+923.21497 664.2
+990.40558 681.9
+1013.74176 594.5
+1019.62531 720.2
+1057.32471 1022.0
+1188.24353 803.9
+1197.88660 3286.5
+1272.60193 548.3
+1426.84753 642.6
+1427.50562 633.1
+1876.03528 753.2
+1877.92810 897.1
+1879.34668 3144.7
+1879.66711 19639.3
+1880.03528 2692.5
+1907.25757 7226.3
+1907.58447 900.1
+S	4197	4197	1880.03499127
+Z	2	3758.222
+Z	3	5636.83
+514.62518 613.3
+532.32874 1925.8
+549.20740 967.5
+608.19440 642.4
+608.70056 621.9
+660.27826 645.6
+676.10443 616.0
+676.67169 1009.6
+795.97687 908.2
+912.10938 615.9
+997.70764 763.0
+1057.23792 719.8
+1124.30115 644.7
+1197.73706 3273.7
+1206.31519 610.9
+1378.24231 637.7
+1683.15515 668.0
+1851.99182 746.5
+1868.12683 708.5
+1877.54858 624.5
+1878.32056 771.5
+1878.71985 721.3
+1878.97522 677.7
+1879.62634 19105.6
+1879.88782 3140.2
+1880.20801 834.6
+1881.77783 726.9
+1907.21558 7368.4
+1930.77075 1394.1
+1980.37561 758.5
+1999.90857 733.1
+S	4198	4198	1907.6218246
+Z	3	5719.59
+Z	2	3813.396
+518.57184 577.7
+530.31134 565.0
+532.34320 1952.0
+549.17468 896.9
+630.42749 741.2
+637.54266 555.0
+652.50049 619.1
+676.70703 1189.6
+746.60870 655.6
+791.63135 595.6
+976.42358 619.4
+1019.63464 609.8
+1032.64404 526.6
+1057.34875 1108.4
+1197.76843 3296.5
+1295.18152 780.8
+1397.66467 661.7
+1489.25000 633.1
+1713.02527 674.7
+1776.93811 1056.8
+1878.89319 1499.0
+1879.35449 2980.3
+1879.70520 18891.3
+1880.06848 2318.1
+1880.51941 1628.1
+1880.89319 923.9
+1907.21277 7275.1
+1930.67725 1160.1
+1932.59766 666.4
+1991.87366 626.4
+S	4199	4199	431.2438246
+Z	3	1290.456
+Z	2	860.64
+107.08628 691.2
+119.93240 517.3
+120.67087 657.7
+121.76729 2485.5
+133.08640 988.8
+137.29483 657.2
+138.70168 609.1
+157.60992 935.4
+162.36368 521.1
+165.73926 650.3
+173.73537 547.9
+176.69769 593.7
+181.74191 562.2
+183.61902 478.5
+183.62398 604.4
+198.99208 870.8
+199.25279 566.2
+199.37065 1727.3
+199.38162 2423.2
+199.41891 657.9
+199.47841 717.9
+199.48682 862.1
+204.58443 555.0
+209.34569 624.1
+233.58195 801.9
+246.31894 590.6
+258.86462 529.8
+268.20715 591.1
+280.19357 686.9
+318.92221 1230.1
+330.84579 1775.9
+330.91095 590.5
+332.84644 10260.7
+332.88425 1130.4
+341.01712 65559.0
+342.01712 17379.4
+343.01331 8706.5
+347.93335 1052.5
+350.85843 1864.9
+354.38120 561.9
+359.02777 10110.8
+360.02768 1786.8
+361.02478 1552.6
+388.76511 1379.8
+388.95993 1236.8
+390.75998 1235.7
+405.68420 525.0
+411.11847 586.2
+413.07758 783.9
+415.03918 623.8
+427.56293 711.5
+449.63745 576.8
+467.44037 612.1
+476.80527 883.8
+482.68127 631.1
+483.57794 592.3
+510.52982 609.8
+511.57742 621.4
+532.34082 2008.9
+537.76990 2148.0
+538.26947 773.0
+547.50952 597.8
+676.65680 1205.3
+795.95837 1006.3
+915.56165 622.9
+918.97058 589.0
+1093.25500 591.8
+1128.06494 654.0
+1188.25305 657.8
+1197.76086 3387.2
+1235.66516 709.7
+1320.67676 569.6
+1525.49658 802.6
+1668.09070 619.6
+S	4201	4201	1880.04624127
+Z	3	5636.863
+Z	2	3758.245
+532.37024 1879.4
+540.24634 551.3
+548.92853 654.2
+573.27679 657.2
+772.98187 724.2
+795.97388 975.4
+839.95844 801.0
+1019.77216 570.9
+1118.14746 664.5
+1131.17981 555.3
+1147.93384 646.0
+1197.82483 3391.8
+1258.89636 564.2
+1474.66455 610.3
+1478.79358 594.4
+1525.42078 701.6
+1765.44421 714.3
+1776.91064 669.8
+1869.93298 682.6
+1870.22437 686.0
+1877.87708 770.0
+1878.70752 1421.1
+1879.67273 17539.0
+1880.48035 1137.4
+1900.89124 566.5
+1907.10632 7396.2
+1907.42053 886.3
+S	4203	4203	1198.16224127
+Z	3	3591.211
+Z	2	2394.477
+325.78162 626.4
+373.86346 643.3
+388.78406 773.9
+392.74432 725.7
+407.00107 793.2
+532.39917 2125.1
+550.43616 625.9
+555.60327 620.2
+560.76208 554.6
+676.69861 809.6
+716.58618 563.1
+783.83649 839.4
+793.80060 569.8
+795.99243 837.7
+879.49646 683.2
+886.90063 743.8
+1057.33679 733.2
+1081.05688 584.1
+1117.53235 561.6
+1197.74402 614.6
+1197.89575 3507.3
+1525.58362 913.6
+1544.74304 580.9
+1775.82324 577.1
+1776.90698 1016.0
+1832.27808 576.5
+1860.05774 647.1
+1878.47961 818.4
+1879.69934 17830.9
+1880.11768 3382.4
+1880.98523 929.7
+1881.45886 806.8
+1907.13843 7246.2
+1907.41138 903.7
+1930.77722 1101.8
+1993.48242 674.9
+S	4205	4205	1880.03524127
+Z	2	3758.223
+Z	3	5636.83
+510.34052 608.3
+532.48431 1901.7
+603.80280 622.3
+627.96313 665.6
+630.41736 973.1
+676.66498 969.1
+681.54321 646.1
+777.30042 647.1
+795.98419 1336.9
+865.68500 710.3
+938.18359 714.3
+943.47290 621.7
+971.08020 570.6
+1017.24408 595.5
+1057.27393 883.9
+1198.08264 3310.7
+1873.04773 1138.2
+1878.06787 648.7
+1878.64404 801.6
+1879.07605 839.8
+1879.60803 19603.2
+1879.89917 2450.2
+1906.77136 634.0
+1907.16138 7596.1
+1919.11646 704.9
+1930.65759 974.6
+1932.59070 710.2
+S	4206	4206	431.245407933
+Z	2	860.643
+Z	3	1290.461
+107.20977 541.7
+121.76766 2439.6
+123.52024 530.9
+135.83209 571.1
+144.68340 535.3
+159.40314 475.7
+159.40521 476.6
+165.73994 819.8
+169.52361 565.0
+183.12892 503.8
+185.36411 557.6
+195.65804 557.9
+198.88216 572.2
+198.99940 1033.9
+199.34143 729.4
+199.36232 755.5
+199.37291 1311.5
+199.38062 2941.1
+199.38919 761.3
+199.39943 936.2
+199.47032 751.2
+199.47888 787.8
+200.43623 600.6
+201.73254 599.3
+220.53687 546.9
+221.20128 763.1
+225.06146 610.8
+236.00212 556.3
+251.49789 722.5
+258.74921 561.0
+282.85355 561.6
+291.98651 558.5
+305.50961 544.1
+318.92142 814.8
+320.91757 813.4
+328.82376 698.5
+330.08926 594.2
+330.84506 1336.9
+332.84659 8360.5
+332.88470 1119.1
+341.01718 59512.5
+341.86179 607.8
+342.01758 13309.9
+343.01373 7782.9
+350.85681 1868.1
+359.02759 8926.6
+360.02664 2253.7
+386.42941 502.9
+388.76498 1404.0
+395.01041 519.6
+409.14771 543.1
+413.07587 856.6
+469.90503 637.9
+476.79053 691.8
+532.48114 1851.5
+537.76807 1396.5
+538.26465 769.6
+549.22766 555.8
+566.44464 578.3
+676.66779 1182.0
+739.35840 650.9
+772.29077 521.7
+795.99127 718.5
+913.74182 622.3
+989.56622 621.2
+1031.47974 684.9
+1047.41235 665.1
+1057.28650 991.9
+1198.07458 3175.1
+1489.73438 645.6
+S	4207	4207	642.488991267
+Z	3	1924.192
+Z	2	1283.13
+169.49818 639.8
+177.35445 634.5
+188.21257 643.3
+188.26064 701.2
+188.26744 1038.6
+188.27797 1359.3
+188.29234 1052.5
+188.30177 1144.2
+188.31169 679.1
+188.31949 694.4
+188.45810 730.5
+198.99696 1067.1
+199.34810 671.4
+199.36139 739.2
+199.37619 2430.3
+199.39134 2020.8
+199.51608 539.6
+214.86865 495.4
+215.87004 546.6
+221.86800 669.9
+241.24107 540.2
+255.29373 729.0
+266.27563 614.2
+271.50189 659.0
+273.56500 655.9
+276.21219 555.2
+297.96960 638.8
+327.69958 560.0
+352.39813 585.2
+355.85168 555.5
+371.71603 662.4
+374.76532 643.5
+380.75940 540.8
+411.57520 670.3
+427.00885 733.2
+482.66910 941.7
+496.37875 545.3
+496.39798 513.1
+523.21429 653.5
+532.44110 1774.1
+542.00598 899.1
+583.03186 1487.4
+625.03882 1197.3
+664.43121 605.7
+676.61511 1036.9
+731.14740 967.1
+750.53760 812.6
+780.88666 804.1
+795.97058 852.8
+833.33600 603.9
+858.08142 684.5
+912.36798 747.1
+1057.12952 585.3
+1057.21423 1126.8
+1140.22180 708.0
+1197.99609 2723.3
+1216.84021 607.2
+1290.76501 634.6
+1542.41919 566.4
+1709.13379 595.4
+1773.89783 718.2
+1807.18164 603.2
+1870.50562 684.5
+1879.10620 1035.7
+1879.46326 20509.8
+1879.80444 880.3
+1906.97229 1184.8
+1907.25781 6953.2
+1930.66248 1333.2
+1984.93140 738.8
+S	4209	4209	1879.9208246
+Z	3	5636.487
+Z	2	3757.994
+532.48126 1884.3
+646.94257 629.2
+795.98798 1087.5
+872.97571 732.5
+1034.87146 630.9
+1082.12451 725.4
+1112.24207 675.4
+1129.65027 602.4
+1140.33777 654.5
+1198.07690 3205.0
+1254.32007 625.2
+1874.51038 871.8
+1878.69653 925.6
+1879.60437 20523.2
+1907.18970 7352.7
+S	4210	4210	1907.6168246
+Z	3	5719.575
+Z	2	3813.386
+532.51331 2051.9
+535.74286 636.5
+549.22772 591.2
+573.55438 706.2
+573.76843 629.3
+635.00977 591.6
+676.66534 768.2
+731.21625 833.1
+793.79932 756.6
+795.97076 1226.0
+812.32043 630.4
+892.22308 600.3
+942.07086 652.8
+1114.47571 734.4
+1188.20129 939.1
+1198.14099 3293.3
+1222.43311 690.2
+1525.63550 751.4
+1638.82886 754.2
+1667.43396 723.9
+1719.39453 1116.3
+1768.08325 703.6
+1875.03845 975.9
+1878.43494 1111.8
+1878.84534 1440.1
+1879.60913 19376.5
+1879.89246 2595.4
+1880.11853 1323.4
+1880.36157 1316.9
+1881.04321 656.5
+1882.68115 707.2
+1907.23792 7284.3
+1930.85132 895.7
+S	4211	4211	1198.4138246
+Z	2	2394.98
+Z	3	3591.966
+350.30344 716.5
+355.44092 594.2
+368.24344 712.3
+375.98633 560.6
+409.01785 690.3
+447.37930 671.0
+462.99411 544.0
+504.49567 637.2
+521.86395 686.7
+532.52185 1911.9
+535.58600 683.0
+573.56445 637.9
+600.00806 642.7
+616.14813 690.0
+695.31714 511.5
+725.91119 614.4
+795.96381 1212.0
+801.22437 715.9
+839.54968 659.3
+847.95697 580.6
+898.98291 582.6
+1018.05084 618.4
+1057.35718 647.8
+1109.36536 671.3
+1198.16431 3224.8
+1352.44226 648.4
+1525.48572 706.0
+1718.92969 863.2
+1874.57019 761.8
+1878.06934 895.0
+1879.10779 1482.0
+1879.36584 2871.7
+1879.72461 19364.3
+1880.03882 2399.0
+1880.36890 1028.0
+1881.14746 859.8
+1881.68640 936.3
+1907.18359 7640.2
+1998.04602 730.7
+S	4213	4213	1880.14140793
+Z	2	3758.435
+Z	3	5637.149
+532.52521 2133.4
+573.61292 978.3
+676.75684 708.7
+795.98541 866.4
+1140.51221 814.0
+1160.93933 780.2
+1170.13306 663.2
+1188.31628 701.1
+1198.16455 2910.5
+1429.89880 664.8
+1467.59509 753.1
+1539.88782 811.9
+1695.51685 874.5
+1717.18713 1544.3
+1751.70398 904.7
+1779.22803 716.3
+1872.41028 705.6
+1878.52478 812.7
+1878.93762 2105.2
+1879.23450 1810.5
+1879.51575 7567.3
+1879.81750 15984.0
+1880.12964 6701.4
+1880.61438 1644.3
+1881.01038 710.6
+1907.23279 7469.5
+1919.07434 976.2
+1930.76953 1099.8
+S	4214	4214	1907.68940793
+Z	3	5719.793
+Z	2	3813.531
+532.55341 1685.6
+620.63904 658.2
+633.45892 784.4
+676.69574 1243.2
+731.21344 810.5
+780.59204 715.8
+795.98547 1070.9
+1062.10730 720.6
+1142.61584 784.5
+1178.74597 680.9
+1188.33057 782.4
+1198.23572 3275.5
+1864.06177 585.3
+1871.76404 1106.4
+1878.65332 1274.0
+1879.08630 1117.6
+1879.69360 19294.9
+1880.51855 877.0
+1880.89636 1054.1
+1906.78430 682.0
+1907.20325 7266.9
+1930.84082 784.9
+1985.64807 633.8
+1986.18896 799.9
+S	4215	4215	1198.49840793
+Z	3	3592.22
+Z	2	2395.149
+395.77618 575.2
+427.56165 860.4
+469.77191 600.0
+532.56079 1867.7
+589.93347 568.3
+630.36896 586.2
+676.69684 1061.4
+704.86780 635.4
+795.20532 687.1
+795.98413 902.7
+877.31848 541.0
+1088.45105 587.7
+1179.50916 609.5
+1198.25354 3054.1
+1320.81189 746.3
+1443.93933 631.9
+1525.48535 820.1
+1557.51831 755.5
+1577.53174 590.7
+1716.57629 720.1
+1723.74646 599.2
+1750.48462 735.8
+1800.95056 670.9
+1801.19385 619.4
+1877.45520 846.0
+1877.81079 803.8
+1878.65979 1234.2
+1879.25293 2178.5
+1879.70325 19216.4
+1880.17395 2344.7
+1880.57275 1647.2
+1907.13696 6938.1
+1907.41553 1842.8
+1930.65625 1168.0
+S	4217	4217	1880.16099127
+Z	2	3758.474
+Z	3	5637.208
+505.15570 608.8
+513.27051 598.1
+532.53656 1612.6
+605.79132 736.8
+630.44147 703.4
+676.76300 859.4
+754.85132 637.3
+795.98572 1000.2
+959.68695 846.5
+1049.94519 609.6
+1050.74365 588.3
+1092.25623 668.4
+1188.16638 690.2
+1198.20630 3332.0
+1290.93982 688.9
+1342.87317 562.5
+1397.99084 720.2
+1442.59558 586.6
+1860.13892 704.8
+1870.51709 681.9
+1876.11353 830.2
+1876.29639 832.8
+1877.32190 616.7
+1878.25073 691.5
+1879.15247 2548.4
+1879.40527 3300.3
+1879.85913 17732.5
+1880.19885 3569.7
+1880.59351 2160.1
+1880.89392 1285.0
+1882.63867 701.4
+1899.68298 689.0
+1906.81433 1077.3
+1907.11353 7369.4
+1930.69409 875.6
+S	4218	4218	1198.57624127
+Z	3	3592.453
+Z	2	2395.305
+353.57230 614.7
+427.54745 898.2
+482.26758 649.2
+482.65256 994.1
+525.70990 646.7
+532.50598 1709.0
+581.39069 626.6
+625.40497 673.8
+676.67786 641.7
+707.43365 620.0
+731.12598 674.9
+762.36877 790.7
+795.97522 842.4
+874.18658 694.7
+943.73938 650.1
+960.89801 568.8
+1030.83630 680.4
+1057.30884 901.1
+1110.52979 881.6
+1198.13391 3578.2
+1296.93701 535.1
+1386.92896 681.1
+1828.44397 740.2
+1877.58936 743.5
+1879.03772 1479.3
+1879.23010 926.1
+1879.64612 19546.5
+1880.03674 1640.1
+1880.47351 983.7
+1880.96240 679.9
+1907.09607 7288.0
+1919.10791 823.9
+1930.60413 913.7
+S	4219	4219	425.315407933
+Z	3	1272.671
+Z	2	848.783
+105.94214 621.6
+108.95104 636.2
+109.66048 577.3
+112.44711 745.5
+114.58440 601.8
+116.63328 582.1
+121.76627 2443.1
+133.01889 587.4
+145.27560 563.5
+148.37445 664.7
+157.61456 539.8
+163.35135 542.4
+165.73753 913.6
+171.64252 775.9
+182.79376 689.2
+185.32379 632.6
+191.60829 559.4
+191.72285 664.1
+198.99600 778.3
+199.27911 1322.1
+199.37663 2821.7
+199.39128 615.9
+199.47311 1179.4
+262.80106 695.9
+272.42221 628.2
+310.21445 518.9
+313.56729 507.1
+324.91663 666.3
+324.98416 678.7
+325.20508 688.6
+326.91681 9552.2
+326.95410 736.4
+350.28818 893.2
+386.66708 671.9
+396.06213 589.5
+424.57721 650.2
+476.77518 662.0
+508.31610 605.2
+521.60986 552.7
+532.50726 2025.5
+549.18994 1017.0
+565.89441 543.2
+598.62085 774.4
+630.45264 839.8
+631.65009 550.7
+676.66730 1061.4
+688.79150 558.7
+780.39209 571.5
+786.16669 676.7
+791.62598 579.0
+830.37640 637.7
+879.86908 583.2
+915.03900 559.3
+990.80914 562.7
+993.89056 636.0
+1057.28894 891.4
+1198.13391 3069.5
+1315.10278 646.7
+1357.98730 600.4
+S	4221	4221	1880.13324127
+Z	3	5637.124
+Z	2	3758.419
+532.53955 1649.4
+544.84271 639.6
+574.86627 627.6
+604.00171 612.2
+648.04053 700.7
+676.67017 1089.3
+795.98907 771.0
+858.17896 766.7
+991.14410 586.8
+1039.55579 648.7
+1198.20532 3368.9
+1429.52734 694.7
+1710.60608 660.0
+1869.96643 649.0
+1879.24194 1561.9
+1879.69934 13985.5
+1880.01355 6206.9
+1907.19409 7278.8
+S	4222	4222	1907.56824127
+Z	2	3813.289
+Z	3	5719.429
+515.42023 564.5
+532.50311 1936.9
+573.08038 841.4
+624.84424 544.5
+630.47180 690.5
+669.65009 764.5
+676.66541 1149.5
+720.53607 583.4
+731.20551 875.5
+770.63062 706.0
+795.99036 1478.3
+887.48956 654.6
+947.95715 642.4
+983.55389 649.1
+1005.43829 627.3
+1019.63629 905.2
+1057.28601 847.9
+1187.84753 625.3
+1198.12732 3264.0
+1514.66528 626.2
+1575.47937 610.3
+1655.33716 618.7
+1667.26172 670.9
+1806.67261 799.0
+1870.04468 791.7
+1878.57947 851.3
+1879.00671 733.1
+1879.15100 865.3
+1879.60999 19140.0
+1880.10181 1328.1
+1880.56567 1028.1
+1907.23767 7092.6
+1930.85364 735.2
+S	4223	4223	642.487407933
+Z	3	1924.187
+Z	2	1283.127
+165.65001 601.7
+167.21819 592.1
+169.50148 663.5
+184.26207 505.4
+188.26508 849.4
+188.27545 1098.7
+188.28413 1276.7
+188.29419 1411.2
+188.30231 1282.3
+188.31129 549.5
+188.32005 605.5
+188.32645 751.0
+197.94888 563.8
+199.28085 697.7
+199.29121 760.5
+199.37196 1498.5
+199.38092 2220.7
+199.38931 986.7
+199.39851 1089.9
+199.44824 908.8
+199.47014 745.2
+199.48013 880.6
+217.56155 607.9
+242.52222 528.9
+313.43530 562.8
+315.99097 607.9
+400.38394 613.1
+401.30630 593.9
+418.32547 565.8
+427.55496 599.5
+431.93961 631.7
+451.90134 662.4
+478.63974 614.3
+532.46625 586.6
+532.52332 1963.1
+532.57849 683.3
+549.19965 770.9
+555.30493 701.7
+570.53876 705.2
+578.24597 623.5
+612.28619 834.8
+626.88116 596.9
+630.41626 645.8
+630.66162 598.7
+676.69232 941.5
+731.51440 573.5
+795.97949 1083.1
+1025.62671 556.5
+1046.58020 675.8
+1057.32251 1250.2
+1198.17444 3205.3
+1361.64392 702.5
+1465.51575 652.5
+1511.72559 670.1
+1736.15015 703.1
+1757.48022 687.9
+1774.42773 629.0
+1870.30566 777.2
+1875.85242 786.2
+1878.72803 1160.2
+1879.02722 699.8
+1879.66553 19008.3
+1880.57288 1189.0
+1880.87280 1009.4
+1907.21436 6748.6
+1907.50073 1204.8
+1930.65063 818.5
+S	4225	4225	1880.02399127
+Z	3	5636.797
+Z	2	3758.2
+532.53473 1753.3
+533.23114 579.9
+576.47375 664.4
+576.51923 781.1
+630.51202 1196.7
+667.75317 596.4
+763.30701 777.1
+795.97552 932.7
+1057.25867 648.4
+1174.83752 640.4
+1188.04749 831.9
+1198.18848 3228.5
+1667.22034 655.1
+1667.35059 557.3
+1808.48096 652.6
+1877.33691 688.0
+1878.26648 989.2
+1879.03992 1949.8
+1879.63208 18559.7
+1880.24207 2220.2
+1907.20691 7212.2
+1919.04370 1101.8
+1930.94299 812.8
+1980.56140 608.2
+S	4227	4227	1198.6075746
+Z	2	2395.367
+Z	3	3592.548
+329.20486 637.0
+330.49768 623.0
+354.65747 774.9
+386.38922 558.1
+427.57962 644.2
+482.69504 729.9
+532.52972 1897.4
+542.77222 710.0
+630.46295 1021.9
+640.55859 609.2
+676.68896 884.9
+679.34637 649.1
+684.39868 596.2
+795.98309 736.4
+1012.93207 606.6
+1019.64117 826.6
+1057.32471 1036.6
+1066.67236 610.1
+1081.98206 572.9
+1153.09241 676.3
+1158.35168 596.5
+1198.18311 3341.7
+1349.88684 624.5
+1525.54041 795.0
+1684.82129 631.7
+1738.98376 648.8
+1870.37769 772.7
+1879.68018 20141.1
+1881.76379 713.7
+1896.45044 640.1
+1907.22583 7524.1
+1930.77124 948.9
+1969.81152 617.9
+S	4229	4229	1880.02599127
+Z	2	3758.204
+Z	3	5636.803
+532.54266 2048.8
+624.29175 523.5
+630.45880 1035.7
+676.69287 1020.1
+781.52338 725.7
+795.98029 830.5
+966.14008 620.9
+1021.21008 711.9
+1057.31848 747.2
+1198.21240 3299.8
+1237.11230 624.5
+1521.40710 596.0
+1525.51709 732.3
+1560.75427 661.6
+1787.15662 662.0
+1871.86890 729.5
+1875.97827 648.5
+1877.95728 623.6
+1878.80505 1293.9
+1879.20056 1289.4
+1879.69031 19144.9
+1879.99524 1888.7
+1880.23083 1353.5
+1880.46375 1411.9
+1881.39685 1149.8
+1881.71008 815.2
+1882.65845 580.0
+1906.78137 1157.9
+1907.18127 7382.5
+1907.60278 805.8
+1930.72766 1230.5
+S	4230	4230	1907.54724127
+Z	3	5719.366
+Z	2	3813.247
+532.55615 2053.4
+547.03741 657.0
+567.52222 672.3
+612.55786 583.5
+676.70905 937.8
+713.30933 749.4
+713.36884 600.6
+800.41644 518.6
+1057.33569 739.6
+1110.74561 664.8
+1198.24097 3477.6
+1200.32495 721.0
+1220.11572 659.8
+1262.91284 641.3
+1725.25757 552.0
+1766.56030 602.4
+1826.87024 665.3
+1877.58301 865.0
+1878.19434 1254.3
+1878.46350 972.4
+1879.35718 2149.0
+1879.71606 19219.0
+1880.04297 3071.2
+1880.28748 979.0
+1880.77612 1145.9
+1881.04797 939.0
+1881.33179 723.7
+1881.81885 618.0
+1907.20959 7421.4
+1919.08447 813.9
+1930.64587 1164.7
+S	4232	4232	1880.0628246
+Z	2	3758.278
+Z	3	5636.913
+532.51605 1878.6
+546.36017 566.5
+594.15234 580.2
+630.42542 1099.0
+676.68585 809.3
+795.99115 811.8
+1020.42169 666.7
+1198.15393 2992.5
+1200.79260 593.0
+1317.27649 721.2
+1431.62769 631.1
+1874.33838 609.3
+1878.37354 993.9
+1878.71826 647.1
+1879.66077 17671.4
+1880.28931 1539.9
+1880.53772 1085.5
+1907.15845 7027.8
+1919.10876 758.9
+1930.67883 805.0
+S	4233	4233	1907.5868246
+Z	3	5719.485
+Z	2	3813.326
+532.55225 2063.9
+594.94714 657.3
+676.68793 1182.8
+731.18085 967.8
+837.80273 569.0
+1019.61926 771.1
+1198.23254 3334.6
+1228.90942 622.6
+1551.57495 620.7
+1555.21301 701.3
+1647.99036 650.4
+1878.61792 878.1
+1879.30688 4473.4
+1879.68970 18682.4
+1880.10376 3572.1
+1880.56531 1234.6
+1882.30969 689.2
+1907.14246 7263.9
+1919.09766 700.9
+1930.72485 1041.5
+S	4235	4235	1880.0448246
+Z	3	5636.859
+Z	2	3758.242
+532.54089 1896.4
+565.44775 605.2
+657.69055 626.3
+676.66876 1103.3
+769.06970 614.5
+795.98547 1336.0
+882.59192 669.1
+955.16113 598.3
+1053.09473 628.7
+1093.80957 658.3
+1118.04187 619.6
+1165.31335 564.9
+1198.20935 2812.4
+1398.87231 738.7
+1416.71130 704.5
+1609.17493 601.5
+1613.86072 648.0
+1876.14978 924.0
+1878.22009 580.5
+1879.33252 3435.8
+1879.61719 19827.9
+1906.92285 2121.6
+1907.19763 6401.2
+1930.78772 1215.6
+S	4236	4236	1907.49040793
+Z	2	3813.133
+Z	3	5719.196
+532.55347 2119.4
+537.33820 596.4
+549.22394 1170.1
+648.16760 639.9
+676.68903 1155.9
+689.44238 623.0
+699.74072 636.8
+827.87640 610.7
+1057.31104 778.0
+1198.24731 3059.0
+1235.63135 652.4
+1357.68701 603.9
+1414.53577 820.9
+1519.86633 762.7
+1525.61389 748.6
+1568.95178 598.0
+1600.10278 724.7
+1692.49792 609.1
+1845.49939 771.8
+1859.99365 695.1
+1878.51941 795.5
+1878.96436 2746.7
+1879.36035 1573.8
+1879.66956 19467.2
+1880.02429 1537.4
+1880.39331 2298.9
+1880.91931 900.4
+1906.88147 561.2
+1907.14514 7239.2
+1930.85889 752.0
+S	4238	4238	1880.10140793
+Z	2	3758.355
+Z	3	5637.029
+512.39008 583.8
+532.50275 1882.7
+573.15295 613.5
+593.54260 580.6
+630.46948 876.8
+640.46875 720.4
+643.31219 593.2
+676.69037 930.6
+710.02734 566.6
+721.97888 647.2
+731.19287 974.3
+795.98254 854.2
+814.34863 638.3
+1060.12769 621.3
+1198.12292 3322.6
+1463.68591 641.5
+1696.96436 773.0
+1722.04236 774.2
+1876.47583 690.5
+1878.79651 1014.6
+1879.26892 2872.3
+1879.67627 18656.2
+1880.11011 3249.0
+1880.51807 1302.1
+1906.73804 767.2
+1907.23938 7038.2
+1919.11133 859.1
+1930.77991 704.6
+S	4239	4239	1907.6708246
+Z	2	3813.494
+Z	3	5719.737
+532.50677 1685.7
+588.66589 638.5
+618.10748 650.9
+726.77209 631.1
+795.99341 1120.8
+865.07178 612.4
+1056.44568 691.3
+1110.61584 581.4
+1140.24170 743.9
+1198.12952 3662.4
+1422.70264 712.4
+1449.50244 605.7
+1640.74121 623.8
+1672.47925 676.7
+1712.73413 599.0
+1876.62561 737.9
+1878.53894 637.6
+1879.22900 2755.2
+1879.67383 19578.8
+1880.12659 2451.1
+1880.90088 601.4
+1882.84521 663.7
+1906.73218 782.3
+1907.26807 7511.9
+1930.85876 1093.4
+1980.04944 669.1
+S	4241	4241	1880.13924127
+Z	3	5637.142
+Z	2	3758.431
+532.44775 652.2
+532.50006 2111.5
+573.06091 838.5
+605.56317 600.6
+614.75238 629.5
+615.90454 674.5
+666.92914 548.6
+676.69659 1153.1
+795.98340 919.3
+847.75793 755.2
+888.16949 632.5
+949.83368 583.1
+1018.54999 724.6
+1057.33887 687.7
+1146.79041 566.1
+1198.11707 3288.1
+1318.46045 697.3
+1378.63623 596.1
+1525.56494 1026.8
+1667.16479 625.2
+1766.12561 672.4
+1777.42419 695.7
+1812.37476 672.6
+1878.21838 1003.8
+1879.19531 999.1
+1879.43884 3419.3
+1879.70117 19466.8
+1880.19055 1399.5
+1883.09009 892.4
+1886.46045 718.1
+1907.25049 7645.5
+1930.79370 1006.3
+S	4242	4242	1907.64340793
+Z	2	3813.439
+Z	3	5719.655
+532.51630 1610.6
+535.00403 620.9
+549.20746 793.7
+630.46570 737.4
+671.67969 732.5
+676.67383 1115.7
+695.92133 748.7
+731.19629 844.0
+795.99036 703.5
+1057.30847 937.0
+1157.60730 652.3
+1198.15088 3319.6
+1302.24658 793.1
+1525.55200 751.3
+1605.38049 620.5
+1715.59521 893.9
+1870.23743 645.5
+1877.88513 957.8
+1879.01160 1219.5
+1879.38257 868.5
+1879.64111 19817.9
+1880.14868 1420.6
+1881.31067 846.6
+1907.24829 7311.3
+S	4244	4244	1880.02024127
+Z	3	5636.785
+Z	2	3758.193
+532.48029 1724.0
+556.45258 629.4
+587.45221 594.9
+621.34473 544.5
+630.43903 682.3
+671.88867 617.7
+676.70203 1192.1
+731.98792 763.4
+793.56830 573.9
+808.25281 708.7
+1057.33215 858.5
+1171.53174 589.4
+1198.07593 3224.0
+1431.59290 678.6
+1454.35217 618.7
+1525.50293 792.4
+1701.15247 665.4
+1870.26489 636.8
+1878.47937 794.4
+1878.93396 2072.4
+1879.44421 766.7
+1879.69275 19612.4
+1880.24573 1151.2
+1880.44263 1701.8
+1880.83240 684.4
+1907.22095 7186.8
+1930.64246 602.3
+S	4246	4246	1880.13324127
+Z	2	3758.419
+Z	3	5637.124
+508.41266 575.8
+532.46411 1881.0
+549.20520 744.7
+581.14197 602.7
+612.88702 697.3
+630.46313 769.1
+676.67590 987.0
+767.90240 706.8
+796.00140 924.4
+817.45172 569.3
+817.50726 572.7
+1084.35828 584.8
+1198.03857 3552.8
+1525.57471 908.8
+1560.60925 660.8
+1643.10083 742.8
+1663.15747 609.5
+1666.72424 647.9
+1715.17261 745.6
+1740.68713 603.9
+1783.94202 574.6
+1877.52234 736.2
+1878.36560 989.6
+1878.61865 1125.6
+1878.99268 1057.4
+1879.63635 19317.9
+1879.89868 2600.1
+1880.90161 1125.3
+1907.19226 7177.5
+1930.78699 969.9
+1993.27576 711.3
+S	4247	4247	1907.67599127
+Z	2	3813.504
+Z	3	5719.753
+532.47571 1979.3
+549.25739 824.2
+676.71362 803.3
+718.80383 567.7
+795.99219 1013.1
+866.99188 664.6
+894.59570 642.6
+1177.93042 586.3
+1194.68579 631.3
+1198.06628 3374.0
+1431.22339 580.0
+1525.70532 747.3
+1637.99414 640.6
+1771.06055 615.3
+1777.10999 774.4
+1878.55017 639.2
+1878.86450 1511.0
+1879.28772 2778.3
+1879.74060 19365.8
+1880.24548 1988.5
+1880.94702 997.9
+1881.90674 890.5
+1883.07678 779.6
+1907.19543 6488.7
+1911.02563 695.6
+1930.97693 928.0
+S	4249	4249	1880.05140793
+Z	2	3758.255
+Z	3	5636.879
+532.58185 1870.2
+546.35583 734.6
+609.02350 556.2
+630.44849 880.3
+676.67633 871.9
+795.99359 870.1
+820.57935 595.8
+837.80042 649.5
+955.04858 663.7
+972.43207 666.5
+1014.65454 721.1
+1079.49402 676.5
+1124.28357 618.3
+1198.29944 3359.1
+1241.75232 593.5
+1623.37244 633.1
+1722.64612 613.3
+1772.13953 649.3
+1777.01172 1106.2
+1876.25891 775.4
+1877.15845 806.0
+1878.32153 1103.1
+1879.03931 1078.3
+1879.65930 19934.9
+1880.24207 1438.5
+1880.66187 1036.8
+1881.09863 744.2
+1907.04541 6738.3
+1930.70898 1150.2
+S	4250	4250	1907.55099127
+Z	2	3813.254
+Z	3	5719.378
+532.60492 1898.5
+581.93927 586.8
+590.10248 778.3
+591.48077 699.0
+630.45416 750.7
+632.23138 511.8
+632.26227 582.8
+795.98950 1074.1
+855.84650 633.7
+932.29675 570.2
+1007.22278 628.4
+1057.31335 708.1
+1067.36121 629.9
+1198.34717 3308.5
+1264.44946 563.3
+1525.52234 1000.1
+1602.40076 644.8
+1666.09460 673.0
+1667.27246 657.5
+1879.65381 18986.3
+1879.94629 4283.2
+1880.43933 633.7
+1907.15417 7869.0
+1930.74475 1021.8
+S	4252	4252	1880.08640793
+Z	3	5636.984
+Z	2	3758.325
+532.55219 1671.2
+581.08270 764.1
+618.08411 597.2
+665.17560 632.0
+676.67249 1196.2
+688.58459 597.7
+731.21753 969.2
+795.99011 1052.8
+830.17450 722.7
+843.60706 814.7
+1057.31128 846.9
+1079.53040 722.8
+1133.04565 763.4
+1138.90430 727.4
+1198.23828 3472.5
+1386.26257 642.0
+1490.12756 638.7
+1667.26477 701.2
+1733.15173 582.8
+1876.16443 693.2
+1876.46606 716.8
+1878.64832 1120.6
+1878.95081 1188.4
+1879.29321 1085.9
+1879.65234 19824.9
+1880.02844 1832.1
+1880.36365 1098.9
+1881.39331 711.1
+1907.25549 6874.1
+1930.84155 1098.2
+1983.21558 687.1
+S	4253	4253	1907.59724127
+Z	3	5719.516
+Z	2	3813.347
+532.51910 2025.9
+558.67426 616.3
+590.95911 713.0
+676.68164 830.7
+692.31439 574.9
+970.43628 755.3
+1019.59491 709.4
+1119.10925 661.0
+1140.22241 643.6
+1198.15198 3137.5
+1525.67883 886.5
+1538.82324 601.4
+1576.61755 637.4
+1654.77869 659.2
+1773.93799 703.6
+1869.72900 591.4
+1877.34802 616.5
+1879.02527 1631.1
+1879.66455 20172.2
+1880.05090 1133.8
+1880.34558 1244.2
+1880.63416 1400.9
+1881.01099 611.8
+1881.91589 727.5
+1907.20032 7173.2
+1930.92737 978.1
+1937.22095 624.7
+S	4255	4255	1880.05024127
+Z	3	5636.875
+Z	2	3758.253
+532.47699 1611.7
+532.51483 662.7
+579.19702 744.9
+590.83539 638.2
+670.49072 639.6
+676.69647 1284.9
+705.85974 584.1
+795.98309 816.7
+1198.06152 2827.9
+1198.18762 644.6
+1366.17432 609.2
+1383.16211 625.0
+1574.10168 638.2
+1776.96655 872.2
+1877.73792 693.2
+1878.87866 1580.3
+1879.28040 2802.5
+1879.69165 19603.0
+1880.13379 2346.3
+1880.49280 1247.9
+1880.90430 1056.6
+1881.43701 742.1
+1907.23486 7196.6
+1953.73511 917.9
+S	4257	4257	1880.1025746
+Z	3	5637.033
+Z	2	3758.357
+532.49481 2126.0
+676.67065 1151.0
+699.95776 662.7
+1011.98724 763.8
+1099.47058 719.6
+1179.50208 677.8
+1198.10535 3171.2
+1481.06824 644.9
+1570.11035 596.0
+1654.01648 675.4
+1753.75598 667.8
+1873.14612 711.4
+1879.25708 2689.7
+1879.61047 19540.8
+1879.97400 2433.4
+1907.23291 7213.2
+1919.08533 768.6
+1930.62146 1300.0
+1969.76599 654.5
+S	4258	4258	1907.65840793
+Z	2	3813.469
+Z	3	5719.7
+532.46985 2120.7
+576.15063 581.3
+601.44189 599.9
+795.98486 1074.5
+1019.64594 681.8
+1057.37427 1028.3
+1132.75061 619.1
+1155.67249 613.0
+1174.44934 667.9
+1188.28723 928.8
+1198.05225 3120.3
+1264.47644 577.3
+1366.18787 620.8
+1385.19946 607.1
+1755.75037 619.5
+1776.91980 635.6
+1860.10510 725.2
+1873.71021 742.1
+1877.70020 733.1
+1878.37585 680.6
+1879.05273 1633.9
+1879.31042 4149.5
+1879.39624 4196.9
+1879.79199 14056.9
+1880.20483 6581.0
+1880.53369 3113.6
+1881.38525 1041.9
+1882.04285 791.3
+1907.22327 6884.3
+1922.68274 613.7
+1930.67102 617.2
+1947.81348 835.8
+S	4262	4262	1880.1658246
+Z	2	3758.484
+Z	3	5637.222
+518.83978 610.9
+532.48126 1839.1
+543.52405 584.3
+549.16162 695.7
+573.57764 753.5
+594.74542 681.0
+676.68066 1008.2
+738.43347 662.8
+795.98962 970.2
+971.44171 611.0
+1198.07800 3058.7
+1267.35925 679.1
+1404.00903 706.8
+1519.98718 737.4
+1821.98572 592.2
+1829.89441 651.9
+1879.06409 2769.8
+1879.64478 20185.8
+1880.23450 3143.1
+1880.94458 957.6
+1882.03711 899.2
+1907.05042 7342.0
+1930.65784 1243.9
+S	4263	4263	1907.6488246
+Z	3	5719.671
+Z	2	3813.45
+532.49377 1913.6
+573.06885 604.4
+616.15601 707.9
+676.67682 1002.2
+731.12842 775.4
+795.99359 1059.4
+858.08093 709.1
+1013.47632 817.5
+1019.64008 800.6
+1064.07251 641.0
+1187.96606 741.6
+1198.10571 2864.2
+1228.01550 725.4
+1458.84253 749.8
+1525.43713 754.6
+1545.75854 620.7
+1776.88171 755.7
+1870.27222 606.6
+1873.17700 874.2
+1878.07739 721.0
+1878.48914 770.2
+1879.34717 3335.4
+1879.63855 19174.4
+1880.14575 2162.3
+1880.50671 927.1
+1907.11890 7286.2
+1930.61047 1042.6
+S	4265	4265	1880.11424127
+Z	2	3758.381
+Z	3	5637.067
+532.47546 1812.3
+549.47247 625.5
+630.39667 802.5
+666.98120 644.5
+696.62744 702.7
+795.97266 758.0
+823.10504 536.7
+840.71021 574.4
+877.85748 646.1
+997.29077 790.5
+1057.29626 999.2
+1110.11047 595.0
+1129.50818 675.4
+1187.74976 820.7
+1198.06226 3017.8
+1198.21521 654.9
+1358.65698 559.2
+1525.36548 890.6
+1615.24524 678.0
+1667.40271 612.0
+1877.98547 664.0
+1878.11255 554.5
+1878.68494 789.8
+1878.92786 1262.1
+1879.16345 2004.0
+1879.64929 18494.5
+1880.40112 1869.8
+1883.12463 590.1
+1907.27490 7084.9
+1907.53052 748.6
+1930.53235 1217.7
+S	4266	4266	1907.53924127
+Z	3	5719.342
+Z	2	3813.231
+532.48547 1976.5
+549.15259 808.4
+593.58478 593.8
+612.69537 675.5
+630.40845 893.2
+676.66479 1102.1
+751.59094 681.3
+795.97913 929.2
+908.67194 689.4
+1198.08691 3530.7
+1248.29761 566.4
+1289.27185 644.9
+1444.80579 607.2
+1697.97925 607.5
+1870.20862 729.2
+1879.60095 19041.4
+1883.81726 711.2
+1907.22363 7428.8
+1930.59839 882.3
+S	4268	4268	1907.67640793
+Z	3	5719.754
+Z	2	3813.505
+532.46497 1730.4
+671.41614 639.4
+676.66559 1075.8
+677.49487 695.8
+795.98700 994.5
+916.88519 615.2
+1057.29224 803.4
+1069.14661 839.6
+1121.96851 666.6
+1198.03821 3422.7
+1288.27307 663.5
+1427.00916 694.9
+1477.68030 699.3
+1525.46875 847.6
+1603.07458 710.6
+1765.32861 631.3
+1870.19397 718.9
+1878.21887 902.6
+1878.96863 895.1
+1879.17163 787.1
+1879.60596 19693.0
+1880.22900 999.8
+1881.10474 727.3
+1907.19104 7284.7
+1930.68506 1064.2
+S	4270	4270	1880.0328246
+Z	2	3758.218
+Z	3	5636.823
+532.49756 1645.0
+617.38879 684.9
+630.43890 918.4
+636.21674 670.3
+658.25958 571.2
+676.68243 1096.6
+731.33502 619.2
+860.23309 611.3
+880.10645 570.9
+1004.27228 570.5
+1062.96338 701.5
+1117.07495 586.3
+1198.11694 3239.6
+1547.53259 677.4
+1868.50671 640.1
+1877.74365 979.7
+1878.61841 772.4
+1878.92102 1330.4
+1879.64453 20150.0
+1879.91638 1658.6
+1880.33069 1128.7
+1907.24060 7584.5
+1919.16565 676.9
+1930.71021 815.1
+S	4271	4271	1907.6588246
+Z	2	3813.47
+Z	3	5719.701
+532.53052 1289.8
+625.49475 592.9
+630.38416 846.1
+650.69580 695.4
+676.66901 1280.3
+731.08478 808.7
+795.97382 774.6
+858.00317 662.7
+951.98041 757.5
+1019.30347 563.8
+1079.04468 562.8
+1198.19312 3441.4
+1248.42310 632.6
+1379.90356 769.8
+1562.29749 620.8
+1873.02087 946.8
+1876.52478 631.4
+1878.01343 765.7
+1879.06982 1056.7
+1879.62073 19966.8
+1880.40430 782.8
+1907.25220 7155.5
+1930.56116 839.1
+S	4273	4273	1880.01540793
+Z	3	5636.771
+Z	2	3758.183
+522.58466 703.9
+532.50549 1725.4
+569.63733 638.5
+574.79694 651.7
+676.65454 1036.5
+732.93628 701.8
+779.86584 944.4
+795.99811 1184.8
+858.08734 602.1
+882.08276 687.7
+966.50189 601.0
+1012.57288 668.4
+1198.12781 3090.5
+1468.52148 795.3
+1589.79919 618.5
+1770.24963 737.2
+1847.01892 659.7
+1863.55164 574.2
+1876.17639 895.6
+1878.68811 1121.1
+1879.07434 2340.8
+1879.22852 2266.7
+1879.58643 19442.1
+1879.96826 2003.4
+1880.46033 1138.3
+1882.10132 686.9
+1907.24939 7277.5
+1919.12549 732.0
+1930.68201 1171.0
+S	4274	4274	1907.68699127
+Z	2	3813.526
+Z	3	5719.786
+532.51544 1886.4
+544.29132 583.6
+569.63599 607.6
+795.97290 1072.6
+887.26355 658.3
+1198.15161 3252.5
+1525.49927 922.2
+1693.23157 641.3
+1711.62634 684.8
+1782.41016 607.1
+1878.60217 986.5
+1879.57129 19818.6
+1879.86707 2198.0
+1907.18091 7410.8
+1913.11609 648.1
+1919.11523 719.7
+1930.72424 1030.7
+S	4276	4276	1880.1238246
+Z	3	5637.096
+Z	2	3758.4
+515.57513 660.4
+532.52234 1825.6
+537.14746 693.4
+576.76678 636.2
+595.21082 577.7
+676.64801 987.2
+685.42090 680.7
+731.11432 662.7
+795.99133 707.6
+1057.28076 648.3
+1097.45325 662.1
+1188.33044 710.8
+1198.16626 3479.6
+1203.75452 564.6
+1241.26648 623.5
+1261.66833 597.9
+1366.07153 677.7
+1870.18457 891.9
+1878.03955 715.4
+1878.51538 1146.4
+1879.07666 1340.9
+1879.57751 19617.4
+1879.85645 2308.0
+1880.32642 966.5
+1907.22778 7439.1
+1930.56555 1005.7
+S	4277	4277	1907.60740793
+Z	3	5719.547
+Z	2	3813.367
+532.51367 2242.0
+550.35602 561.6
+570.81647 647.3
+613.65259 711.3
+670.11285 563.2
+676.67834 823.0
+701.82562 696.3
+702.62738 656.0
+732.59692 524.5
+749.61456 588.0
+779.66901 720.2
+795.98145 990.9
+804.88904 611.2
+982.38007 591.7
+1004.25165 701.6
+1020.79059 835.0
+1107.88892 673.0
+1198.15259 3598.5
+1339.80322 812.3
+1525.38318 854.2
+1606.44897 583.9
+1608.05042 675.2
+1878.86768 922.6
+1879.65796 18430.8
+1880.10950 2271.7
+1880.49561 1302.8
+1880.86841 794.2
+1907.13708 7093.9
+1930.54858 860.4
+S	4279	4279	1880.0958246
+Z	3	5637.012
+Z	2	3758.344
+524.66608 619.9
+532.50165 2163.4
+549.13141 532.2
+630.39233 635.5
+633.45294 603.9
+676.67273 1150.1
+693.12292 636.3
+731.10693 916.7
+784.32141 630.1
+795.99634 1091.0
+827.60297 690.1
+1021.11560 950.9
+1094.45776 793.5
+1198.11975 3127.0
+1525.38391 853.8
+1785.66528 684.1
+1795.57104 706.6
+1836.47021 635.6
+1879.63391 18711.7
+1881.53882 634.9
+1907.08447 7100.7
+1930.50671 1005.1
+S	4280	4280	1907.59040793
+Z	3	5719.496
+Z	2	3813.333
+532.51440 1660.5
+630.41437 793.3
+649.28046 716.7
+676.70062 1024.8
+739.05511 612.2
+749.00482 817.5
+795.98724 866.5
+802.14636 601.0
+997.42072 664.3
+1019.65186 751.4
+1198.14746 3399.7
+1408.72705 737.3
+1511.81750 732.6
+1525.42419 1041.0
+1677.19531 611.8
+1873.95605 568.7
+1877.19519 691.1
+1878.43030 676.2
+1878.74902 1040.2
+1879.00806 1675.0
+1879.67651 19956.0
+1880.09595 988.8
+1880.37903 1532.2
+1880.58252 1026.2
+1880.93408 741.7
+1900.85864 693.2
+1907.08118 6757.3
+1930.63245 845.9
+S	4282	4282	1880.13540793
+Z	2	3758.423
+Z	3	5637.131
+532.48126 611.0
+532.51483 1412.2
+647.17755 792.9
+731.08099 795.9
+737.51794 619.6
+944.60889 748.0
+1015.35730 551.0
+1198.14734 3179.5
+1506.94373 609.7
+1515.47778 783.1
+1605.49951 731.8
+1879.58057 17224.9
+1879.87317 6416.6
+1880.19824 1125.6
+1907.17810 7105.0
+S	4284	4284	1880.04440793
+Z	2	3758.241
+Z	3	5636.858
+516.46613 613.1
+532.51221 1726.7
+549.12787 877.9
+554.64221 607.9
+676.62463 1104.1
+745.66254 588.9
+795.97534 904.1
+997.77625 685.6
+1048.17786 593.5
+1057.21851 1290.5
+1187.98389 666.0
+1197.38574 708.1
+1198.14624 3424.7
+1303.16382 689.3
+1444.45691 691.5
+1525.27832 645.0
+1668.74780 586.7
+1879.49414 20881.5
+1906.87744 669.0
+1907.18494 7526.2
+1907.49902 939.5
+1930.48889 848.7
+S	4285	4285	1907.67640793
+Z	2	3813.505
+Z	3	5719.754
+532.56372 1759.0
+537.66400 728.4
+630.38293 844.9
+638.27338 597.8
+650.12000 662.2
+780.25708 702.2
+834.32080 617.5
+915.37933 602.5
+1057.26489 901.5
+1120.35486 595.6
+1140.24573 703.8
+1144.06018 636.7
+1198.26611 2665.8
+1198.39624 756.2
+1222.19824 722.5
+1399.12292 522.8
+1473.93701 697.8
+1489.29419 1069.5
+1525.34656 687.0
+1715.82336 550.3
+1718.07837 1690.7
+1797.65186 674.8
+1873.77417 1306.7
+1879.55371 20960.7
+1907.20447 7235.1
+S	4287	4287	1880.06340793
+Z	3	5636.915
+Z	2	3758.279
+518.03052 642.2
+532.53198 1990.0
+539.16986 681.6
+549.17914 1059.3
+629.27972 630.5
+658.56732 638.5
+676.73462 1053.0
+731.14423 717.0
+795.99280 990.9
+1057.39075 742.7
+1198.18567 3447.1
+1203.43750 657.5
+1232.28992 611.8
+1292.94214 694.4
+1352.78894 651.3
+1428.28882 728.1
+1562.05750 652.3
+1571.54553 593.5
+1719.52319 1144.6
+1872.07312 724.9
+1878.95959 1318.9
+1879.26086 1830.1
+1879.50598 2842.4
+1879.79199 19094.5
+1880.09778 2484.5
+1880.33997 2076.1
+1880.59998 1394.6
+1882.57739 915.5
+1907.15662 7839.9
+1930.68628 864.6
+S	4288	4288	1907.70840793
+Z	2	3813.569
+Z	3	5719.85
+532.49957 2047.7
+549.17749 634.9
+676.70728 819.4
+709.19598 631.1
+731.15857 716.6
+795.98615 1257.6
+1008.42816 602.0
+1197.96362 705.7
+1198.11926 3514.8
+1377.05640 587.3
+1525.49719 695.1
+1665.27258 699.1
+1718.70740 1159.3
+1749.31458 610.1
+1859.87585 659.8
+1877.75659 592.9
+1878.42078 717.2
+1878.66052 1544.2
+1878.97595 805.5
+1879.32410 1435.1
+1879.72632 19221.8
+1880.15076 1450.2
+1880.45447 1462.6
+1880.83130 862.6
+1906.75647 723.4
+1907.17151 7363.3
+1919.15686 814.3
+1946.86841 577.2
+S	4290	4290	1880.2468246
+Z	2	3758.646
+Z	3	5637.465
+512.11072 563.9
+532.47760 2329.4
+542.60284 676.9
+549.16791 862.3
+565.53918 606.9
+584.94019 554.5
+597.47852 747.1
+630.41083 785.3
+658.14380 582.0
+678.03644 613.0
+709.44763 621.4
+715.87024 655.5
+731.13666 884.4
+747.78583 648.6
+795.97961 973.3
+844.40643 651.2
+972.15283 659.9
+1114.27942 592.1
+1130.16187 570.4
+1188.31396 755.0
+1198.06042 3209.1
+1490.92688 603.0
+1525.45117 836.2
+1716.72998 1275.8
+1790.61829 670.1
+1837.55066 863.1
+1878.29565 784.6
+1878.85706 1646.3
+1879.43811 5286.8
+1879.71594 17804.5
+1880.82764 1117.1
+1881.13110 918.2
+1881.31543 902.5
+1881.96130 632.2
+1907.15564 7538.4
+1908.01489 765.7
+1930.60364 799.3
+S	4291	4291	1907.5988246
+Z	2	3813.35
+Z	3	5719.521
+532.49725 1517.1
+551.53723 556.8
+568.27325 636.8
+630.42206 999.5
+652.35297 549.8
+655.39813 561.3
+676.71344 1069.8
+694.72626 639.9
+795.98785 779.3
+802.73181 622.8
+1037.21130 640.1
+1109.80859 610.0
+1140.59924 565.5
+1150.63708 645.5
+1198.11475 3018.1
+1303.97253 651.8
+1525.44714 761.7
+1530.00464 786.1
+1878.18359 619.0
+1878.39758 878.9
+1878.52759 848.6
+1879.04346 1887.5
+1879.41345 2715.4
+1879.74463 19623.2
+1880.10510 2981.6
+1880.46484 897.7
+1880.69312 624.5
+1881.17383 894.3
+1882.38379 780.2
+1888.12195 702.0
+1906.86841 1113.7
+1907.14368 7128.8
+1919.24805 603.8
+1930.62610 1116.6
+1935.75159 714.2
+1951.44019 728.3
+S	4293	4293	1880.1288246
+Z	3	5637.111
+Z	2	3758.41
+532.49066 1555.0
+549.18146 662.7
+610.72931 699.2
+626.89099 727.7
+655.67889 570.6
+666.79553 595.1
+676.67944 820.2
+784.50098 538.0
+822.22858 586.4
+887.07660 721.2
+924.24695 728.0
+978.42267 589.8
+1057.30603 789.7
+1198.10193 2782.7
+1460.78345 577.7
+1563.51221 657.7
+1877.84021 599.8
+1878.36975 770.7
+1878.66809 1173.6
+1879.08289 1397.2
+1879.37708 856.3
+1879.65063 19279.2
+1880.23035 716.0
+1880.42444 928.8
+1880.68823 849.3
+1907.05237 7398.4
+S	4294	4294	1907.3546246
+Z	5	9531.734
+522.73724 678.9
+532.51245 2339.7
+564.21783 623.7
+573.07983 703.2
+591.77515 609.8
+623.36816 595.9
+636.88794 678.6
+676.68341 1006.6
+795.97339 1127.0
+1019.64832 886.8
+1188.10107 699.5
+1198.14673 3184.9
+1391.08887 633.0
+1603.45215 856.0
+1748.81934 826.4
+1777.25232 785.5
+1878.31750 1053.3
+1878.66162 1212.3
+1879.65942 19233.1
+1879.94482 2338.6
+1880.45886 1081.4
+1880.68628 935.7
+1880.96484 722.0
+1881.20068 1253.1
+1881.35730 1087.6
+1882.42883 801.5
+1907.05359 7330.6
+1930.71313 1030.7
+S	4296	4296	1880.0698246
+Z	3	5636.934
+Z	2	3758.292
+514.81360 583.2
+517.75055 661.7
+532.50098 1547.7
+630.40656 1107.9
+731.12854 705.0
+731.20142 650.0
+734.36438 718.6
+856.06750 629.2
+1012.47736 672.5
+1198.12256 3058.6
+1331.98047 610.7
+1442.92432 648.4
+1487.59155 598.4
+1572.60278 646.1
+1715.55347 772.0
+1777.48120 856.6
+1879.57422 18441.4
+1881.73169 747.4
+1907.22888 7396.2
+1930.60132 1161.4
+S	4297	4297	1907.50199127
+Z	2	3813.156
+Z	3	5719.231
+528.94757 525.4
+532.53528 1878.4
+630.42462 1119.9
+647.60956 542.6
+676.68689 1336.3
+795.98792 879.9
+891.38507 655.5
+923.12219 671.4
+1010.80023 631.8
+1165.41394 618.3
+1174.50781 862.4
+1198.19434 3071.2
+1294.78406 689.1
+1465.62317 607.6
+1513.14417 653.7
+1525.42578 796.8
+1661.01794 582.6
+1699.62219 628.3
+1716.42603 704.0
+1742.11304 800.6
+1777.58228 657.0
+1877.45007 908.4
+1878.03125 655.8
+1879.35901 3821.1
+1879.66748 19586.3
+1882.21277 706.2
+1906.73792 815.8
+1907.17566 7356.0
+S	4299	4299	1880.1208246
+Z	3	5637.087
+Z	2	3758.394
+507.48007 545.2
+532.52148 1879.2
+584.22589 543.5
+630.42926 1016.6
+641.42474 706.0
+666.55139 626.8
+676.68799 1027.7
+795.98096 1121.6
+1021.17755 732.1
+1057.33142 729.6
+1188.03076 717.2
+1198.16870 3550.7
+1237.04211 637.5
+1877.99414 692.9
+1878.46338 796.6
+1878.91846 1382.8
+1879.24036 2500.1
+1879.40442 2165.3
+1879.67407 19369.3
+1880.13135 2025.4
+1880.96326 1156.5
+1881.81519 631.1
+1906.60730 824.6
+1906.90491 845.6
+1907.23206 7406.0
+1919.21191 1073.4
+1930.67725 1103.5
+S	4300	4300	1907.6358246
+Z	3	5719.632
+Z	2	3813.424
+532.50385 1945.8
+630.41864 768.9
+676.68146 996.2
+774.98529 655.0
+775.78790 692.4
+793.44696 646.5
+795.99628 879.2
+872.37054 619.5
+938.93750 657.9
+939.14850 748.4
+974.81616 667.6
+1057.30371 820.3
+1198.12866 3228.1
+1382.88708 727.2
+1465.57263 641.6
+1777.41150 782.6
+1800.23938 703.0
+1816.29419 653.1
+1860.10632 655.3
+1878.50208 1027.4
+1878.88538 781.3
+1879.13892 1245.6
+1879.64417 19120.2
+1880.04700 1372.9
+1880.40088 1048.9
+1880.87427 1200.6
+1907.23364 6862.7
+1930.58643 842.4
+S	4302	4302	1880.0968246
+Z	3	5637.015
+Z	2	3758.346
+521.23999 698.2
+532.53210 2150.9
+594.09229 636.2
+594.25665 862.6
+629.55444 577.0
+676.71100 789.3
+731.08405 676.2
+795.97125 772.8
+797.78912 621.1
+858.18677 525.3
+892.20898 732.0
+1188.22559 886.9
+1190.03088 720.8
+1198.18433 3751.7
+1525.35876 701.2
+1878.40527 860.3
+1878.67114 1196.1
+1879.14893 647.3
+1879.42847 4981.5
+1879.71973 18328.0
+1880.48108 1256.9
+1881.30481 1240.9
+1882.64917 699.8
+1907.15686 7205.9
+1930.54199 1127.4
+S	4303	4303	1907.58840793
+Z	2	3813.329
+Z	3	5719.49
+521.48615 669.1
+532.51257 1774.1
+593.98230 619.2
+599.94977 659.7
+618.09222 610.9
+676.67737 1405.8
+1019.62427 698.1
+1057.32275 798.3
+1135.81470 640.8
+1147.84949 660.3
+1188.23450 736.6
+1198.14807 2701.7
+1525.42603 834.4
+1627.27380 659.5
+1754.08252 556.9
+1806.15259 776.1
+1879.18896 1805.3
+1879.63733 18988.1
+1880.07507 1727.2
+1907.23743 7138.5
+1919.23694 774.8
+1930.63306 1021.5
+1982.81189 840.6
+S	4305	4305	1880.0578246
+Z	3	5636.898
+Z	2	3758.268
+532.53381 2236.9
+538.73547 588.4
+572.04205 692.8
+616.82819 625.0
+676.68433 945.9
+755.42957 593.0
+795.99603 959.2
+992.69916 742.5
+1019.69012 641.3
+1057.31396 818.0
+1158.96338 713.6
+1198.19495 3621.8
+1318.05017 751.2
+1652.98523 586.2
+1875.79614 644.0
+1876.41077 629.3
+1878.61975 897.2
+1879.18921 1586.4
+1879.66101 19781.5
+1880.15613 1198.1
+1880.31836 1336.5
+1880.74097 969.3
+1907.22998 7952.1
+S	4306	4306	1907.68040793
+Z	2	3813.513
+Z	3	5719.766
+529.59058 593.2
+530.34802 596.4
+532.55225 2091.1
+549.18756 678.2
+554.46924 713.1
+630.44360 664.6
+676.69861 1119.2
+681.03711 535.9
+681.08258 637.8
+694.18781 633.9
+709.66663 608.7
+723.81360 596.7
+731.16858 642.7
+756.96887 596.4
+795.99854 1131.4
+815.98877 671.4
+817.10785 729.9
+959.23114 719.2
+994.33008 728.5
+1024.11584 607.5
+1043.80432 606.7
+1067.59094 590.0
+1072.67664 640.3
+1079.71753 648.0
+1198.24182 3184.7
+1312.46912 652.4
+1785.05945 822.8
+1876.63782 667.6
+1878.03870 875.6
+1878.38489 698.9
+1878.71619 914.3
+1879.28845 2555.1
+1879.69250 19119.9
+1880.60791 937.4
+1881.07275 722.9
+1882.40857 803.0
+1893.06726 642.1
+1907.23877 6865.8
+1930.72498 869.8
+S	4308	4308	1907.57999127
+Z	2	3813.312
+Z	3	5719.465
+529.41699 579.0
+532.53748 2059.4
+549.13635 885.2
+609.89801 589.5
+676.67542 1175.1
+680.53461 594.7
+687.45789 672.5
+795.98828 893.6
+811.28607 704.6
+1040.01721 619.2
+1057.28906 764.8
+1188.11560 867.4
+1198.20337 3491.9
+1326.03687 639.2
+1787.70679 570.8
+1809.10876 721.7
+1823.57275 593.3
+1878.13098 576.4
+1878.69775 1017.9
+1879.11682 1667.4
+1879.62561 19418.3
+1880.13672 2064.7
+1880.51953 1435.4
+1907.13794 7537.2
+1930.53687 767.1
+S	4310	4310	1880.13299127
+Z	2	3758.418
+Z	3	5637.124
+532.52881 2097.0
+549.13757 822.5
+560.33179 611.4
+630.37830 728.0
+676.68719 1112.5
+795.99707 988.4
+876.12415 713.1
+1057.32642 816.8
+1099.87158 741.5
+1104.12610 589.3
+1176.31311 782.3
+1198.17847 3433.6
+1257.20679 678.9
+1388.54407 655.7
+1877.57117 671.7
+1879.29993 855.0
+1879.66968 19822.7
+1880.07092 1077.6
+1907.11462 6644.2
+1907.39783 1136.0
+1913.79321 672.6
+1919.14197 866.3
+1930.50806 991.3
+S	4311	4311	1907.5458246
+Z	2	3813.244
+Z	3	5719.362
+532.50549 1763.7
+538.50818 618.7
+594.84253 531.8
+676.70038 1247.1
+690.85101 609.4
+690.90100 660.0
+780.93292 581.6
+908.66986 712.0
+978.77478 611.3
+1019.65527 748.8
+1120.43994 653.5
+1139.95776 652.5
+1150.53967 657.6
+1198.12158 3219.6
+1328.53027 621.3
+1489.44922 763.6
+1525.42004 964.6
+1549.90637 602.2
+1715.19922 626.4
+1878.12988 834.8
+1878.87976 1514.6
+1879.26758 2000.7
+1879.71252 19792.1
+1880.16479 1064.3
+1880.58093 1336.3
+1881.38293 989.5
+1881.74231 734.6
+1907.20984 7369.7
+1930.58765 1120.9
+S	4313	4313	1880.03499127
+Z	2	3758.222
+Z	3	5636.83
+532.49481 1890.9
+533.54016 687.1
+593.50104 569.5
+652.39349 828.1
+676.68579 771.4
+685.94696 616.3
+784.37622 579.6
+795.99255 981.7
+986.86609 680.7
+1035.71375 620.3
+1198.10229 3425.4
+1396.52905 664.5
+1525.39941 915.7
+1868.08411 662.2
+1877.98633 671.5
+1879.04321 2127.1
+1879.32471 984.9
+1879.64880 19842.6
+1880.12329 1690.9
+1880.29004 1680.4
+1880.77258 861.8
+1880.96497 845.5
+1881.31677 785.3
+1907.19263 7980.8
+1997.07056 630.3
+S	4314	4314	1907.5715746
+Z	2	3813.295
+Z	3	5719.44
+532.54150 2019.7
+560.98395 590.5
+565.59833 572.9
+585.12616 639.5
+676.69550 989.5
+795.99152 1013.2
+906.23755 607.1
+1161.13965 611.6
+1187.94141 735.5
+1198.21155 3265.6
+1288.18884 651.3
+1651.31409 641.1
+1860.15222 622.8
+1870.22583 965.4
+1878.88464 1437.8
+1879.14600 1136.5
+1879.67395 19182.7
+1880.16748 1642.9
+1880.51135 1656.4
+1881.28333 786.5
+1907.22815 7558.5
+1930.46008 799.3
+S	4316	4316	1880.1228246
+Z	3	5637.093
+Z	2	3758.398
+532.47656 1095.6
+532.52454 992.1
+630.40295 740.9
+676.65881 919.4
+779.48273 806.6
+1057.27356 881.0
+1081.13330 605.6
+1083.63782 678.7
+1198.09229 2889.2
+1247.59790 634.5
+1518.05273 665.6
+1667.36646 678.2
+1846.67957 692.1
+1870.45361 877.7
+1876.08777 656.3
+1878.82239 783.3
+1878.98120 958.1
+1879.59937 19728.2
+1879.85071 3013.5
+1880.73108 793.4
+1881.42273 753.3
+1881.76660 665.9
+1882.26208 788.0
+1907.21741 7437.6
+1919.12610 716.8
+1930.59521 910.8
+S	4317	4317	1907.58940793
+Z	2	3813.331
+Z	3	5719.493
+532.50323 1642.3
+618.06525 775.5
+661.83612 638.9
+676.69159 1127.9
+697.77039 596.9
+703.19214 709.0
+785.62384 605.0
+861.35785 648.5
+872.38007 593.4
+1038.83313 633.3
+1198.12158 3167.6
+1383.51245 622.6
+1511.71960 624.1
+1525.54370 774.8
+1843.44934 806.2
+1870.27283 948.8
+1877.22021 621.6
+1879.06042 793.3
+1879.34204 3064.5
+1879.69287 19607.8
+1880.01721 2463.9
+1880.48181 1256.2
+1881.18713 884.2
+1881.81812 846.4
+1906.84314 686.2
+1907.25110 7066.6
+1907.70056 700.3
+S	4319	4319	1907.56540793
+Z	3	5719.421
+Z	2	3813.283
+532.50439 1625.6
+547.59338 667.6
+549.23364 722.5
+676.67767 727.2
+731.18793 696.1
+731.23083 652.2
+795.99762 762.2
+810.45551 723.5
+889.36792 638.2
+1181.54016 659.4
+1188.28479 779.1
+1198.13171 3247.7
+1220.09277 628.9
+1877.25073 1079.1
+1877.83936 774.2
+1878.91687 1722.9
+1879.65051 19705.6
+1879.90466 1990.1
+1880.06458 1135.8
+1880.35938 1011.1
+1880.67310 932.8
+1881.83911 651.8
+1892.88025 749.8
+1906.75134 750.9
+1907.16162 7473.9
+1919.19568 744.6
+1930.85828 830.1
+S	4321	4321	1880.08640793
+Z	3	5636.984
+Z	2	3758.325
+530.84320 770.1
+532.49072 1936.9
+544.27173 595.8
+630.48517 933.7
+677.97003 635.8
+776.18896 595.2
+779.55029 649.2
+795.97534 1039.8
+837.59479 619.3
+871.59863 669.7
+1085.79407 573.4
+1126.00134 639.0
+1198.09778 3066.2
+1215.95032 702.5
+1354.65857 865.9
+1363.44434 553.8
+1497.10352 696.8
+1509.97607 639.2
+1525.62158 982.2
+1716.04041 614.1
+1732.21472 618.0
+1860.10352 822.7
+1878.37512 1457.8
+1878.63306 1774.5
+1879.19861 873.3
+1879.43542 3302.0
+1879.68347 18930.6
+1880.42029 1428.7
+1880.71606 1210.9
+1881.09302 1246.1
+1907.16455 7286.9
+1919.22253 907.2
+1930.83862 943.2
+S	4322	4322	1907.66324127
+Z	3	5719.714
+Z	2	3813.479
+520.28955 622.5
+529.68329 688.7
+532.51746 1963.7
+546.04224 555.0
+549.18738 746.6
+576.63873 638.2
+630.43805 858.8
+664.95734 539.8
+676.69928 1187.1
+689.54492 635.1
+827.91510 676.5
+932.21069 596.3
+937.05292 682.8
+975.62238 646.0
+1018.28912 653.4
+1101.05737 602.7
+1198.15808 3526.2
+1222.79736 667.1
+1264.31287 692.0
+1344.46570 804.1
+1520.38525 668.7
+1525.52039 828.0
+1777.05310 897.1
+1869.83435 973.7
+1876.18359 708.2
+1878.44238 1513.8
+1878.75342 765.3
+1878.95044 668.6
+1879.68201 19749.3
+1879.99146 2698.2
+1880.45850 1024.0
+1880.91492 1237.9
+1907.17700 7799.7
+1907.48499 1089.1
+1919.12781 718.5
+1930.72705 861.5
+S	4324	4324	1880.0865746
+Z	3	5636.985
+Z	2	3758.325
+532.48419 1898.9
+549.23199 804.1
+576.72662 608.7
+584.85211 669.1
+624.22803 781.3
+630.48932 733.0
+652.69470 598.4
+664.07080 517.3
+676.70880 1093.8
+719.58105 594.2
+753.08563 575.0
+795.97754 783.0
+890.17426 596.2
+988.61426 697.2
+1019.67963 728.1
+1057.35132 805.6
+1111.19971 625.5
+1188.13574 701.4
+1198.08411 2918.1
+1236.10364 565.1
+1240.61084 750.8
+1263.19165 601.0
+1849.50439 695.5
+1871.78040 618.2
+1877.27136 683.4
+1878.37231 772.2
+1879.30676 947.0
+1879.73132 19675.1
+1881.10437 754.6
+1907.10522 7266.3
+S	4325	4325	1907.57240793
+Z	2	3813.297
+Z	3	5719.442
+522.82947 632.7
+532.53595 1781.6
+549.19141 586.0
+549.21362 618.9
+571.14056 649.9
+609.73828 657.6
+630.44092 706.9
+639.19769 646.8
+676.69244 1186.8
+792.79663 644.2
+795.97021 649.3
+839.18445 611.9
+1057.32227 965.1
+1198.21045 3346.5
+1244.29468 854.7
+1262.03955 589.6
+1290.01965 679.0
+1408.74353 688.6
+1438.20630 698.2
+1511.80859 618.5
+1630.59656 575.8
+1658.60266 615.7
+1754.05164 627.9
+1860.11401 723.6
+1876.30090 730.9
+1878.91724 1506.2
+1879.14282 1059.4
+1879.66870 20417.0
+1880.12976 722.8
+1880.43481 1043.8
+1907.16113 7574.9
+S	4327	4327	1880.21340793
+Z	3	5637.365
+Z	2	3758.579
+532.58813 2015.9
+675.05762 594.2
+676.77332 592.8
+731.15741 842.8
+763.02777 558.1
+772.30188 554.4
+913.89630 686.1
+1057.33435 742.6
+1057.46985 574.2
+1101.99866 668.1
+1187.99609 794.9
+1198.31592 3521.4
+1222.82678 696.8
+1259.42847 638.3
+1293.45911 657.4
+1367.21460 688.4
+1421.36829 709.2
+1525.49158 1023.9
+1656.78430 755.0
+1869.97925 625.0
+1877.80762 698.9
+1878.68066 1030.8
+1878.94006 575.9
+1879.09167 968.5
+1879.65881 19623.8
+1880.37085 858.5
+1907.25964 7621.5
+1930.68127 890.1
+S	4328	4328	1907.64140793
+Z	2	3813.435
+Z	3	5719.649
+532.54138 1374.0
+549.18640 629.6
+630.46893 771.3
+786.92487 531.7
+828.46198 652.4
+940.53247 684.4
+1140.25586 859.3
+1168.18494 687.1
+1188.02356 775.1
+1198.20569 3088.5
+1234.07959 708.5
+1525.46362 604.0
+1878.59119 588.4
+1879.18713 1854.6
+1879.61987 19424.5
+1880.05579 1829.8
+1880.73547 886.4
+1907.18384 7307.7
+1980.30969 776.6
+S	4330	4330	1880.14999127
+Z	2	3758.452
+Z	3	5637.175
+519.29565 730.8
+532.53412 1929.4
+549.21252 980.5
+563.22943 531.3
+676.67029 1272.7
+720.49219 555.6
+778.95764 638.6
+795.97601 968.6
+894.05292 675.9
+955.31073 699.0
+1057.28772 1036.3
+1140.85876 621.5
+1198.19165 3264.9
+1275.37952 605.5
+1410.02979 648.5
+1552.57129 645.5
+1878.22961 1026.3
+1878.84375 883.8
+1879.61731 19462.4
+1879.89880 2971.4
+1880.09033 826.2
+1880.65723 995.5
+1907.23975 7527.2
+1930.83838 796.2
+S	4331	4331	1907.6358246
+Z	3	5719.632
+Z	2	3813.424
+530.45776 612.1
+532.51300 1757.5
+533.51453 681.9
+534.28400 600.1
+549.21851 680.2
+630.46356 966.9
+676.68829 1077.2
+700.56042 579.1
+830.21313 609.8
+858.12494 669.4
+905.87115 687.3
+929.06885 681.0
+1058.39709 611.8
+1103.68848 699.7
+1198.14709 2939.0
+1489.66187 919.0
+1520.48560 736.7
+1713.89490 700.9
+1802.81555 704.8
+1878.96143 1923.9
+1879.35339 4140.8
+1879.68457 18869.5
+1880.01965 2988.8
+1880.42554 2097.4
+1880.65747 878.4
+1907.23511 7291.2
+1930.79041 978.2
+1987.17407 783.0
+S	4333	4333	1880.06740793
+Z	2	3758.287
+Z	3	5636.927
+528.18854 609.9
+532.49994 1640.3
+549.21545 707.2
+574.54486 584.6
+624.13159 796.1
+630.47504 707.9
+676.67419 1168.1
+707.91711 857.2
+731.20868 1081.9
+735.58075 565.8
+795.98846 903.9
+1019.66693 620.2
+1066.26782 734.3
+1140.41785 634.1
+1198.11621 3126.9
+1525.59387 951.7
+1878.75305 813.1
+1879.19128 2785.6
+1879.63428 19711.7
+1880.04187 2450.3
+1880.48254 985.5
+1907.20801 7206.3
+S	4334	4334	1907.5418246
+Z	2	3813.236
+Z	3	5719.35
+516.69482 629.8
+532.53107 1407.4
+566.04596 650.4
+580.06403 643.8
+658.09296 628.8
+676.68140 902.9
+779.61951 879.9
+795.98535 1101.3
+1005.24561 661.8
+1019.64136 692.0
+1057.30884 799.0
+1198.18213 3108.7
+1206.88110 629.4
+1524.26990 689.2
+1525.49243 932.6
+1526.74756 681.4
+1603.73157 621.4
+1617.53003 577.8
+1618.97034 697.6
+1649.27832 619.5
+1653.67395 622.1
+1876.99426 623.3
+1879.20630 2366.0
+1879.65308 19648.1
+1880.11218 2288.5
+1880.51172 831.6
+1880.88635 1281.6
+1907.24817 7422.5
+1997.28650 705.8
+S	4336	4336	1880.1218246
+Z	2	3758.396
+Z	3	5637.09
+532.53430 1761.0
+549.22656 879.1
+555.94690 540.5
+603.30737 617.5
+657.18884 655.5
+676.68927 758.1
+714.84521 710.8
+749.95270 633.0
+755.73969 634.3
+795.98822 865.1
+796.75531 571.1
+798.13428 627.4
+898.41144 623.8
+1138.46936 623.9
+1198.19543 3304.6
+1216.88477 621.0
+1383.46497 784.2
+1570.62854 658.7
+1776.95618 837.4
+1824.69824 838.2
+1877.00525 721.8
+1878.44250 911.0
+1878.75085 896.3
+1879.00330 793.5
+1879.23315 933.4
+1879.65527 19761.0
+1880.08691 1124.5
+1880.60181 897.4
+1881.30579 1019.5
+1906.55212 835.1
+1907.17529 7366.3
+1930.80481 764.7
+S	4337	4337	1907.5728246
+Z	2	3813.298
+Z	3	5719.443
+532.56262 1655.8
+630.43933 793.7
+676.59357 1019.6
+676.68616 792.1
+729.60742 792.9
+731.15552 730.4
+785.93030 627.1
+795.98462 1091.6
+877.25903 605.2
+1012.01831 691.5
+1057.38843 676.7
+1198.25854 2862.6
+1411.95605 641.8
+1646.71606 697.4
+1664.36414 672.0
+1776.97424 832.9
+1876.96985 707.1
+1878.72998 793.6
+1879.64465 17204.3
+1881.05310 904.0
+1882.15955 952.0
+1906.73145 998.5
+1906.98157 1334.2
+1907.24963 7282.1
+1907.74182 795.8
+1983.30530 773.5
+S	4339	4339	1880.04699127
+Z	3	5636.866
+Z	2	3758.246
+516.41248 670.9
+532.55133 2063.4
+537.31909 594.8
+590.86023 635.8
+607.92035 607.9
+610.64728 674.1
+630.43402 957.0
+676.66827 1437.1
+704.82391 662.8
+735.50476 574.7
+795.98383 1106.2
+862.75574 621.1
+987.28302 594.1
+1023.10168 590.1
+1057.30017 818.8
+1198.23291 3220.5
+1371.58752 624.3
+1383.48779 723.0
+1509.00476 651.3
+1713.46033 672.1
+1878.76721 1553.5
+1879.30396 2213.5
+1879.62817 18584.5
+1880.01624 2466.8
+1880.27979 1144.5
+1880.55066 1139.8
+1880.96594 1567.4
+1881.91479 858.4
+1907.17407 7009.3
+1930.72131 698.5
+S	4340	4340	1907.52424127
+Z	2	3813.201
+Z	3	5719.297
+522.10071 696.3
+532.58875 1656.6
+539.74945 736.6
+546.50885 672.9
+586.41919 655.7
+611.95172 606.9
+630.47498 660.9
+676.68323 930.6
+695.99988 802.8
+779.12970 732.1
+825.46533 557.7
+1098.70935 760.5
+1198.32251 3005.8
+1345.82886 675.8
+1402.10071 723.5
+1474.20435 581.0
+1776.99243 1036.7
+1852.38025 705.0
+1869.87061 542.4
+1870.07178 719.0
+1877.74097 645.5
+1878.10645 897.0
+1878.46008 1055.7
+1878.84814 929.7
+1879.67871 17251.9
+1880.17139 1510.3
+1881.53296 918.8
+1882.32349 623.7
+1907.17285 7171.4
+1919.21277 759.7
+S	4342	4342	1880.06740793
+Z	2	3758.287
+Z	3	5636.927
+530.85205 618.0
+532.58429 1909.9
+592.85004 750.5
+676.66791 1160.4
+690.15662 716.0
+750.22632 642.5
+795.98602 887.3
+838.99298 638.5
+977.42590 588.9
+1062.85669 676.3
+1145.59558 628.2
+1162.04712 623.3
+1169.45044 630.1
+1181.20374 705.4
+1182.11609 601.8
+1198.31836 3073.6
+1645.30823 627.6
+1654.02283 655.4
+1749.59094 633.4
+1776.99585 951.6
+1791.83997 698.8
+1824.63672 561.4
+1876.21069 1004.3
+1879.09509 1506.8
+1879.62048 18848.7
+1879.90198 3320.5
+1880.10413 1203.1
+1880.85376 867.8
+1881.06641 708.0
+1881.67590 742.9
+1906.72461 771.3
+1907.18054 7036.1
+1930.57385 1096.0
+S	4343	4343	1907.57440793
+Z	2	3813.301
+Z	3	5719.448
+532.62402 1554.6
+549.14807 776.8
+568.39331 582.0
+625.01086 638.1
+630.40179 698.3
+633.12543 606.0
+676.70990 684.5
+1198.39380 3042.2
+1477.03931 731.4
+1776.93188 829.6
+1874.58948 557.5
+1878.56140 864.3
+1879.08813 2287.9
+1879.73083 17732.1
+1880.36682 1435.2
+1880.56311 693.1
+1881.72986 792.8
+1907.22485 7303.2
+1930.55725 1000.0
+S	4345	4345	1880.07599127
+Z	2	3758.304
+Z	3	5636.953
+532.58618 2357.4
+608.90833 611.1
+621.19202 555.0
+640.52917 643.7
+676.68115 1068.1
+680.22388 627.2
+763.25867 716.9
+778.09277 610.2
+795.99078 1004.1
+826.44153 702.6
+890.76910 689.0
+953.76331 658.7
+980.78217 768.2
+1057.30591 784.9
+1098.06433 618.1
+1198.31421 3687.9
+1235.64331 718.5
+1312.54626 629.7
+1397.46094 702.4
+1488.30139 685.0
+1774.13879 615.7
+1851.93481 650.9
+1870.50684 867.3
+1875.11255 649.3
+1879.15405 1379.0
+1879.66284 19863.8
+1880.15295 1021.7
+1880.84766 849.4
+1907.20410 7633.5
+S	4346	4346	1907.60040793
+Z	3	5719.526
+Z	2	3813.353
+532.61053 2020.5
+589.99750 563.7
+676.69128 781.3
+795.99591 976.3
+988.64221 647.4
+993.54559 558.8
+1020.78204 688.7
+1198.37195 3172.0
+1789.57153 673.2
+1878.17004 687.3
+1878.57690 1090.3
+1879.19019 1232.1
+1879.67224 19887.2
+1879.96948 1609.4
+1880.15283 1029.7
+1880.82751 709.7
+1881.65125 927.0
+1907.20154 7272.3
+1919.23438 668.0
+1975.33411 696.6
+S	4348	4348	1880.11999127
+Z	3	5637.085
+Z	2	3758.392
+532.56366 1909.9
+552.15570 710.4
+598.76746 726.3
+624.79932 660.9
+630.44110 665.3
+676.64478 814.2
+795.99738 1337.9
+811.21216 669.6
+855.50415 601.6
+1193.03101 660.8
+1198.25781 3320.0
+1261.96033 627.2
+1559.82190 632.4
+1623.70044 660.8
+1817.53467 599.2
+1870.32251 645.3
+1879.70154 16640.7
+1880.32996 2255.9
+1880.73779 1248.7
+1907.23120 7488.1
+1907.97253 743.1
+S	4349	4349	1907.60624127
+Z	3	5719.543
+Z	2	3813.365
+532.56622 2036.4
+532.62305 813.0
+549.63580 545.0
+676.70929 806.4
+764.34955 630.4
+795.99347 985.3
+858.12085 660.0
+861.01880 701.7
+902.18903 616.7
+1029.70850 703.8
+1057.35864 975.1
+1069.23657 645.7
+1198.27686 3338.4
+1655.60632 594.8
+1658.00183 696.6
+1870.13770 962.5
+1878.20874 1044.9
+1878.52124 929.2
+1879.04260 2170.2
+1879.48315 2822.0
+1879.73413 19300.8
+1880.47876 1195.4
+1880.97815 563.3
+1881.25049 1200.0
+1907.20068 7299.0
+1930.74475 1282.7
+S	4351	4351	1880.09299127
+Z	3	5637.004
+Z	2	3758.338
+532.57910 2052.4
+630.42432 1153.4
+636.79102 623.1
+676.69379 873.1
+731.13538 795.7
+740.64270 636.3
+755.37915 742.7
+788.42365 594.5
+796.00275 1241.1
+858.08063 745.9
+941.37897 608.1
+1111.06848 622.7
+1198.29590 3094.9
+1258.83289 631.3
+1667.35815 728.5
+1877.44897 756.5
+1879.04492 1354.4
+1879.33362 4471.6
+1879.68823 18751.8
+1880.04578 3841.6
+1880.33643 1232.6
+1880.65649 1178.3
+1881.08997 745.2
+1906.86731 833.6
+1907.15430 7199.7
+1907.75330 891.9
+1930.66602 744.7
+S	4352	4352	1907.57524127
+Z	2	3813.303
+Z	3	5719.45
+532.60596 1830.4
+535.32202 568.9
+549.21991 801.5
+605.98358 670.2
+615.02435 647.7
+630.46448 1105.5
+658.75598 607.7
+676.69336 920.2
+731.20215 900.0
+795.99261 874.8
+1086.31616 716.1
+1198.36011 3054.8
+1525.58044 768.0
+1549.21533 684.4
+1605.05859 731.8
+1656.72339 695.8
+1876.60510 811.1
+1878.49536 1152.3
+1878.80298 1624.1
+1879.28333 2817.9
+1879.68726 19217.6
+1880.09656 2526.1
+1880.54663 1725.1
+1880.92822 1591.0
+1906.55688 701.2
+1907.17554 6792.6
+1930.81750 868.2
+S	4354	4354	1880.0698246
+Z	3	5636.934
+Z	2	3758.292
+517.08618 539.5
+530.51727 610.8
+532.62677 2245.2
+549.17438 928.4
+622.06445 698.5
+648.30731 602.4
+654.71503 604.3
+667.41315 693.3
+676.68365 806.4
+679.18439 626.6
+795.14270 707.1
+796.00763 1125.3
+806.93878 643.8
+974.87952 661.5
+1103.28235 808.0
+1198.39893 3240.7
+1286.38940 619.3
+1493.96045 747.1
+1525.47327 937.2
+1528.65649 657.9
+1619.64807 723.6
+1761.50305 693.7
+1877.50415 695.0
+1878.75195 1041.9
+1879.33264 3669.1
+1879.67688 19066.8
+1880.02893 3020.8
+1880.36853 1101.2
+1880.90076 908.3
+1881.68616 717.0
+1907.20361 7182.7
+1930.67224 897.7
+S	4355	4355	1907.6168246
+Z	2	3813.386
+Z	3	5719.575
+532.60645 1503.6
+549.19568 759.9
+592.62848 646.0
+630.45465 692.4
+731.18713 820.6
+795.99054 722.5
+873.60498 693.4
+908.83252 691.8
+1057.31763 1104.6
+1198.36279 3310.8
+1252.50867 764.2
+1525.54431 1002.3
+1548.56458 622.4
+1578.78406 619.2
+1632.28857 630.9
+1748.66589 623.4
+1876.63013 841.4
+1878.96289 1363.7
+1879.64221 18635.4
+1880.07300 866.5
+1880.36853 1161.3
+1907.23511 7011.5
+1907.55457 704.7
+1930.76660 1452.2
+1933.21484 588.6
+1974.07324 673.5
+S	4357	4357	1880.6198246
+Z	1	1879.612
+515.88763 633.0
+532.60364 1745.2
+593.39240 759.0
+630.49054 915.6
+676.71069 940.1
+749.43268 635.8
+796.00061 1411.9
+879.73450 749.7
+1057.34375 939.4
+1135.58862 631.6
+1198.35352 3216.2
+1210.19458 721.9
+1266.86792 707.5
+1438.50708 585.3
+1466.02942 620.4
+1525.62610 727.2
+1878.10706 755.9
+1878.61792 1078.9
+1878.84680 1093.2
+1879.06152 1387.9
+1879.30212 2263.8
+1879.73315 19710.6
+1880.15186 1861.9
+1880.38660 1602.1
+1880.64526 1154.6
+1881.44214 633.9
+1907.18896 7026.6
+1930.83765 860.3
+1982.76611 714.8
+S	4358	4358	1907.59699127
+Z	3	5719.516
+Z	2	3813.346
+532.58179 1767.3
+547.21191 622.2
+620.77136 615.9
+630.45898 866.5
+676.68713 921.2
+707.87677 648.9
+711.30023 646.0
+725.26263 633.7
+750.50610 636.5
+768.01038 571.1
+776.48572 641.2
+778.86682 581.0
+796.00104 942.5
+1057.31812 845.0
+1198.30225 3367.3
+1596.21619 615.7
+1624.38257 689.4
+1717.47070 794.0
+1777.47827 842.7
+1878.34961 1375.9
+1878.74341 643.1
+1879.35522 2308.7
+1879.68848 19802.0
+1879.99695 2885.3
+1881.02698 1505.1
+1907.19397 6942.1
+1954.24780 744.0
+S	4360	4360	1880.04140793
+Z	2	3758.235
+Z	3	5636.849
+532.67352 1853.6
+541.20068 628.9
+583.15045 539.6
+630.47925 714.7
+636.71869 716.4
+676.55585 625.9
+676.70679 880.1
+680.32336 541.7
+777.39270 644.2
+791.61206 765.8
+795.99286 966.3
+837.13068 655.7
+996.05505 700.7
+1046.33862 677.8
+1057.20996 577.5
+1057.36768 829.7
+1080.48608 680.1
+1146.61450 615.9
+1198.36816 882.7
+1198.52014 3048.5
+1551.46021 634.2
+1879.01074 1990.4
+1879.33276 3825.8
+1879.71948 18835.4
+1880.11938 2860.4
+1880.42200 2355.8
+1880.83630 870.5
+1881.68347 863.2
+1907.24670 7293.2
+1930.78577 1021.5
+1938.27649 653.9
+S	4361	4361	1907.6398246
+Z	3	5719.644
+Z	2	3813.432
+532.72955 1967.9
+533.05847 628.3
+556.99481 552.0
+562.91357 658.8
+626.81219 603.5
+633.91479 711.0
+676.66388 1221.6
+679.54132 727.1
+796.00159 924.8
+813.87225 661.3
+847.44092 620.9
+1057.75793 672.8
+1172.37170 592.0
+1177.98511 621.2
+1198.63989 3531.7
+1221.45288 581.0
+1876.83875 620.4
+1878.53967 902.4
+1878.81543 1666.3
+1879.02124 1519.8
+1879.59839 18001.9
+1879.85742 4395.9
+1880.12134 1878.4
+1880.66711 1270.2
+1907.17407 7594.9
+1919.28186 737.5
+1931.83081 667.7
+S	4363	4363	1880.0238246
+Z	3	5636.796
+Z	2	3758.2
+513.19061 605.7
+529.68561 644.1
+532.55188 1523.2
+538.11084 581.8
+549.16833 523.1
+676.62250 1202.9
+731.14954 769.4
+733.58185 722.1
+795.99176 850.6
+957.88336 630.5
+1057.22400 1293.8
+1198.24072 3149.5
+1679.83044 714.1
+1716.45410 1392.2
+1734.10437 686.5
+1879.48474 20994.9
+1907.16382 7534.6
+1930.71265 983.6
+1932.51587 1066.0
+S	4364	4364	445.539407933
+Z	2	889.231
+Z	3	1333.343
+111.87442 519.6
+120.66234 648.3
+121.76109 1014.6
+121.76588 1842.2
+121.90469 545.9
+137.40550 576.8
+143.08379 565.5
+152.03596 537.1
+157.60892 643.6
+159.17917 545.9
+165.73640 854.2
+173.54384 619.1
+183.32518 552.0
+186.07964 604.9
+197.68335 574.1
+198.26434 554.8
+198.74701 575.5
+198.83328 576.6
+199.00171 1030.4
+199.28915 842.9
+199.30370 579.2
+199.35315 621.5
+199.36754 2529.9
+199.37708 721.6
+199.38640 2195.5
+199.40681 1074.8
+199.48669 606.6
+213.07289 576.5
+243.50591 559.4
+255.30539 665.5
+258.33853 662.9
+271.04233 643.3
+271.20087 650.2
+290.01340 528.7
+295.61984 585.0
+299.38339 606.3
+323.51813 682.3
+337.57101 592.2
+343.25018 580.7
+350.30057 857.7
+378.61362 656.8
+394.46844 584.3
+405.39401 581.4
+417.66550 598.3
+427.56937 616.4
+432.48550 583.5
+454.96695 552.2
+532.74396 1944.4
+549.19080 590.9
+649.76025 488.4
+659.39368 543.6
+676.65045 1409.1
+711.87115 702.8
+719.76239 580.2
+732.13940 599.2
+769.42615 532.0
+778.72449 603.1
+858.10144 572.0
+870.83649 658.6
+1019.72186 672.3
+1020.85681 585.4
+1042.91638 608.1
+1057.25586 785.6
+1064.79773 631.2
+1109.27808 550.7
+1146.17419 539.4
+1188.27686 715.9
+1198.65833 3284.5
+1222.14600 719.2
+1334.81946 574.5
+1525.53430 750.0
+1543.89441 816.5
+1661.32007 551.8
+1698.60999 570.2
+1718.39795 1356.6
+S	4365	4365	1907.63040793
+Z	2	3813.413
+Z	3	5719.616
+532.71722 1868.7
+549.18378 807.3
+647.81097 612.3
+658.92725 640.3
+676.67926 910.0
+795.98846 912.8
+822.47565 650.6
+822.56952 549.3
+1033.92542 688.9
+1140.32739 699.4
+1198.60718 3240.3
+1268.04895 686.6
+1544.65515 628.7
+1873.85901 935.9
+1877.38342 718.7
+1879.35217 2857.6
+1879.65088 20177.9
+1880.19019 1513.4
+1907.08350 7385.3
+1930.73230 867.8
+S	4367	4367	1880.15840793
+Z	2	3758.469
+Z	3	5637.2
+525.44189 614.6
+532.67322 560.1
+532.71783 1500.7
+533.24139 643.4
+676.69629 881.5
+706.82330 645.8
+731.17041 697.6
+767.10571 711.9
+796.00446 1028.8
+800.37213 677.5
+870.43896 634.4
+919.95898 686.4
+942.85358 552.1
+1053.08411 618.8
+1057.34204 814.9
+1102.38770 609.8
+1198.59717 3462.4
+1361.71997 795.5
+1477.46191 562.7
+1578.92017 684.5
+1615.35645 571.0
+1718.75562 886.7
+1841.04846 702.1
+1877.88135 877.0
+1878.54944 931.3
+1878.91345 1333.5
+1879.27148 2906.6
+1879.70569 18126.1
+1880.10413 3680.4
+1880.82654 882.8
+1881.54871 899.9
+1882.32886 702.7
+1907.04370 7250.5
+1930.68872 1388.0
+S	4368	4368	1907.4968246
+Z	3	5719.215
+Z	2	3813.146
+532.66846 1856.4
+556.28693 663.6
+630.39990 928.0
+796.00464 866.2
+930.98450 664.7
+1175.73059 559.1
+1198.49951 3424.1
+1313.26697 912.6
+1479.56213 584.2
+1717.73132 1150.7
+1871.94470 762.7
+1878.69604 1535.7
+1879.11658 1647.3
+1879.78162 17743.5
+1880.45520 1114.5
+1880.73157 2220.0
+1881.51172 807.8
+1906.91357 1208.4
+1907.20593 7053.9
+1930.58008 851.1
+S	4370	4370	1880.28440793
+Z	2	3758.721
+Z	3	5637.578
+532.58270 1749.9
+549.17957 730.1
+619.63129 544.3
+630.30853 638.1
+642.79132 609.2
+651.02124 666.2
+667.74225 645.3
+676.70392 1113.9
+731.15924 763.8
+777.68042 609.2
+796.01184 1180.2
+985.20605 714.2
+1018.52209 1002.2
+1057.38977 676.2
+1104.62769 628.5
+1198.30103 3043.8
+1536.84912 606.8
+1587.57520 843.8
+1702.43176 654.6
+1716.13660 891.1
+1778.08325 700.1
+1855.74670 696.3
+1877.92444 604.1
+1878.13550 828.1
+1878.83521 805.3
+1879.76709 17498.9
+1880.06873 5437.9
+1880.31104 1475.4
+1881.50183 939.8
+1881.97839 719.2
+1907.18091 7452.6
+S	4371	4371	1907.64124127
+Z	2	3813.435
+Z	3	5719.648
+524.01056 652.2
+532.59326 2006.5
+561.87982 681.8
+599.71454 613.3
+636.82422 601.0
+676.71033 961.6
+761.67572 578.6
+804.72272 637.2
+962.90106 623.9
+1087.89636 634.3
+1193.07922 612.8
+1198.33362 3135.7
+1409.43237 619.9
+1525.49414 863.4
+1622.87671 765.5
+1877.21106 821.8
+1877.72595 857.3
+1878.85815 1581.8
+1879.20386 2923.1
+1879.73572 18640.1
+1880.02209 1941.2
+1880.25500 2984.3
+1880.57166 2350.8
+1880.82764 872.3
+1881.77722 737.8
+1907.23059 7312.3
+1907.51135 966.7
+1930.70947 913.1
+1950.70593 795.8
+1965.88550 602.4
+S	4373	4373	1907.56299127
+Z	3	5719.414
+Z	2	3813.278
+532.52673 2273.6
+537.86719 646.6
+561.20190 555.7
+567.82092 626.7
+602.73291 726.0
+620.46777 655.3
+676.64191 1084.1
+858.08105 1011.1
+991.86749 642.9
+1045.69360 585.4
+1123.49487 616.0
+1198.18311 3376.8
+1360.94421 582.3
+1652.72131 661.0
+1760.05530 704.1
+1836.92224 884.5
+1879.56750 18719.0
+1880.08167 2228.9
+1880.40723 835.7
+1880.77344 810.1
+1907.17737 7478.1
+1930.64624 1086.3
+S	4375	4375	1880.13940793
+Z	2	3758.431
+Z	3	5637.143
+532.55438 1937.3
+549.18927 851.0
+630.44379 743.6
+633.55994 761.4
+676.69226 1184.6
+769.08716 556.5
+796.01038 914.7
+811.71051 677.4
+1057.33398 756.7
+1188.21411 665.4
+1194.62402 665.8
+1198.23999 3110.8
+1876.56213 888.7
+1878.63525 1086.5
+1878.92932 755.8
+1879.39124 4650.5
+1879.68298 18798.0
+1880.45508 1115.9
+1881.03809 916.4
+1903.58899 630.4
+1907.16052 7241.8
+1930.69910 748.3
+1948.75842 622.1
+S	4376	4376	1907.61640793
+Z	2	3813.385
+Z	3	5719.574
+532.54376 1611.2
+676.67566 1039.2
+699.60297 621.2
+731.15930 838.9
+779.23706 656.6
+796.71643 604.0
+884.89398 671.9
+982.63110 724.7
+1057.28638 889.4
+1184.48376 636.4
+1198.21545 3436.7
+1203.08472 600.9
+1379.79578 671.4
+1879.28857 866.3
+1879.62012 20086.1
+1879.98645 770.0
+1881.03076 793.7
+1907.16541 7437.0
+1930.70532 912.8
+S	4377	4377	1198.61999127
+Z	2	2395.392
+Z	3	3592.585
+382.88962 674.9
+401.11197 594.7
+402.89383 756.5
+424.78546 664.8
+427.52191 734.2
+438.16473 662.9
+532.53577 1360.6
+532.58008 1019.4
+535.10748 686.0
+549.12665 1033.2
+552.52539 675.2
+592.58533 719.3
+592.81500 761.8
+630.37286 1085.3
+676.74719 552.7
+681.19135 601.0
+744.47467 636.2
+779.61023 657.6
+796.00946 822.3
+941.97443 579.4
+943.90869 593.0
+1019.66876 693.9
+1067.99268 869.0
+1198.20459 3121.6
+1198.35437 854.8
+1235.50916 647.7
+1525.36804 679.0
+1615.87598 602.9
+1777.30310 728.6
+1878.64136 848.0
+1878.91431 743.4
+1879.52344 7419.5
+1879.80151 16407.5
+1880.30859 4060.5
+1880.84595 1310.2
+1882.95178 711.8
+1907.24048 7293.0
+1907.52161 996.0
+1907.75183 683.8
+1919.19128 766.4
+S	4379	4379	1880.05740793
+Z	3	5636.897
+Z	2	3758.267
+532.55774 2042.7
+549.21667 866.1
+561.31189 677.4
+676.63177 757.8
+758.16327 665.2
+796.02002 966.3
+981.81848 635.4
+1198.24585 3103.4
+1254.08228 660.5
+1876.73816 766.5
+1878.52014 1207.5
+1878.84167 1183.8
+1879.23718 1893.6
+1879.58289 18818.7
+1880.60291 1268.1
+1892.34399 602.7
+1907.17505 6791.2
+1919.07556 836.1
+1930.76416 1009.7
+1950.43188 672.6
+S	4380	4380	445.5398246
+Z	2	889.232
+Z	3	1333.344
+114.30482 564.2
+120.50613 584.5
+121.76754 2487.2
+124.68638 572.4
+124.93503 611.7
+125.88799 651.8
+132.99106 520.4
+134.01602 644.0
+135.97118 647.5
+145.63741 628.8
+165.73904 829.0
+165.92593 664.7
+171.10464 536.8
+174.73822 562.6
+182.78874 650.4
+192.99399 621.7
+199.00757 786.5
+199.28868 1454.8
+199.37421 1439.6
+199.38589 2306.5
+199.39919 1756.5
+199.48392 820.0
+218.24261 559.5
+218.67883 527.4
+226.48015 478.4
+249.87207 568.4
+268.19241 567.6
+290.89218 581.4
+311.74515 560.3
+320.99301 627.3
+334.33624 598.5
+341.01746 1090.7
+350.29947 668.9
+387.39032 588.2
+424.03912 645.0
+429.08768 6513.6
+430.08862 1464.5
+505.77142 655.1
+524.10260 667.1
+532.57196 1666.5
+549.17749 725.8
+608.55029 520.8
+630.42737 647.6
+656.31427 607.9
+676.67896 1059.7
+676.74066 613.2
+679.75031 575.6
+719.15149 601.1
+743.28754 734.8
+751.49347 598.6
+796.01471 1050.8
+933.05481 578.2
+952.03101 696.9
+995.65570 591.1
+1198.28125 3183.4
+1251.16125 622.9
+1257.34485 535.3
+1284.48450 613.3
+1525.47107 671.7
+1704.25232 650.5
+1777.31714 894.5
+S	4381	4381	1907.6228246
+Z	3	5719.593
+Z	2	3813.398
+526.96259 630.5
+532.60345 2181.0
+551.77496 648.7
+626.68976 613.4
+630.52448 610.5
+676.67615 1054.2
+796.03918 712.0
+931.47974 622.4
+1115.88269 684.3
+1198.34387 3413.2
+1460.61902 659.8
+1566.31165 762.8
+1869.49463 620.8
+1873.90674 609.6
+1877.98840 809.9
+1878.78064 1051.3
+1879.21143 1783.9
+1879.62720 19417.1
+1879.98071 1409.1
+1880.21082 1156.6
+1880.87183 779.3
+1881.27588 979.7
+1881.64380 792.4
+1906.62378 771.8
+1907.15308 6990.7
+1919.13477 651.5
+1930.68042 841.9
+S	4383	4383	1880.13524127
+Z	3	5637.13
+Z	2	3758.423
+532.59119 2111.7
+549.19165 798.0
+586.59052 586.6
+611.09497 584.5
+630.44598 954.2
+630.50073 580.1
+676.68512 1312.9
+735.22144 671.0
+794.39691 713.0
+796.01550 949.6
+840.72101 616.6
+980.52686 620.2
+1019.72485 613.9
+1049.63904 570.3
+1140.21948 757.8
+1170.80334 667.5
+1198.32385 3626.1
+1365.52051 693.1
+1418.62561 632.7
+1875.29944 626.3
+1878.94653 1043.7
+1879.17603 1073.0
+1879.65393 20110.7
+1906.88574 776.2
+1907.25220 6998.0
+1919.14587 888.1
+1930.72681 685.3
+S	4384	4384	445.540241267
+Z	3	1333.345
+Z	2	889.233
+112.26147 562.2
+112.26902 588.5
+112.29653 533.3
+115.40760 471.2
+115.77097 652.1
+121.76489 1974.9
+125.20496 557.5
+129.57629 603.9
+132.12129 514.7
+133.54504 515.4
+138.41072 528.0
+139.62144 582.8
+142.52057 582.6
+143.66454 570.2
+147.31381 553.4
+160.89038 577.6
+165.73672 535.4
+169.45009 589.9
+172.10231 556.8
+172.87132 518.1
+175.23660 487.0
+195.29889 602.7
+195.95078 505.7
+199.00728 609.9
+199.27618 977.5
+199.28592 949.1
+199.37457 3167.4
+199.38358 1305.7
+199.47176 1148.8
+205.87914 615.8
+214.51935 1005.9
+215.95123 483.2
+231.06973 600.1
+238.32317 602.0
+238.66154 550.7
+244.94156 614.1
+265.13019 592.4
+265.68497 615.4
+298.31021 610.1
+313.85165 605.9
+341.01730 2188.3
+342.01852 565.6
+342.27646 690.9
+359.00775 584.8
+425.63870 553.4
+426.85251 534.3
+429.08768 9461.8
+430.08911 2916.1
+469.90891 1018.4
+476.78864 747.8
+482.65909 667.8
+532.57007 1950.7
+621.76563 538.5
+625.61328 505.9
+647.06256 771.3
+651.48279 563.5
+676.67242 1051.6
+702.64142 671.6
+743.22247 594.0
+743.72827 561.1
+779.83264 535.1
+796.02899 855.1
+815.23541 626.0
+953.80255 582.7
+1041.37378 602.7
+1057.30078 933.6
+1136.64246 553.7
+1198.12073 556.2
+1198.27686 3155.2
+1525.44324 1193.1
+1738.01965 741.3
+S	4385	4385	1907.51540793
+Z	3	5719.271
+Z	2	3813.183
+520.53778 738.2
+532.56506 2052.4
+564.37512 646.1
+584.21460 590.6
+586.42957 684.1
+676.69415 778.6
+729.34680 656.2
+731.20087 816.8
+742.65454 660.5
+796.00671 1019.5
+834.84216 780.6
+887.74854 827.8
+972.61694 561.2
+1074.13159 616.7
+1184.60132 660.3
+1187.94421 670.5
+1198.26880 3422.8
+1300.85901 584.4
+1869.78186 571.4
+1870.30774 650.5
+1876.33618 636.3
+1879.67310 18963.2
+1880.16699 2481.1
+1881.84277 672.4
+1907.18018 7578.1
+1919.23291 722.7
+S	4387	4387	1880.02540793
+Z	2	3758.203
+Z	3	5636.801
+532.52130 2137.5
+563.34839 667.6
+676.71460 1269.7
+796.01764 1403.4
+819.77417 673.4
+837.09839 596.0
+851.14825 540.6
+925.01965 753.1
+1067.51917 675.4
+1198.16919 3282.0
+1309.53296 670.7
+1525.49487 756.5
+1860.16602 631.6
+1877.06445 717.8
+1879.75232 18429.7
+1880.33716 919.6
+1882.09399 878.2
+1906.80933 1153.2
+1907.17322 7351.0
+1930.68738 989.6
+1980.64771 664.2
+S	4388	4388	1907.6338246
+Z	2	3813.42
+Z	3	5719.626
+532.54938 2219.9
+567.24286 621.4
+573.09790 787.8
+676.68927 1300.0
+698.52063 631.9
+727.15912 906.6
+780.57172 708.7
+796.01398 863.1
+826.81653 602.7
+835.74768 652.9
+915.58325 615.5
+1057.29919 927.8
+1168.38892 624.7
+1198.23584 3168.4
+1271.05444 743.3
+1277.92798 687.6
+1374.06787 751.4
+1410.46729 635.8
+1777.57983 862.9
+1860.11792 939.1
+1876.57727 831.4
+1879.28992 2391.7
+1879.66138 20073.0
+1880.04675 2948.6
+1895.72729 666.8
+1907.20825 7796.4
+1930.70215 1213.3
+S	4389	4389	499.156991267
+Z	2	996.466
+Z	3	1494.196
+135.08910 576.7
+143.07951 633.4
+146.41597 545.5
+146.92244 723.7
+174.94188 711.4
+177.93987 529.9
+188.25345 900.3
+188.26984 889.7
+188.28455 1255.8
+188.29861 1098.1
+188.30898 1037.7
+188.32950 482.0
+189.13426 535.8
+195.94473 531.4
+198.99028 510.6
+199.00648 824.2
+199.29541 822.6
+199.30502 730.1
+199.38185 1425.1
+199.39349 2582.2
+199.40317 1635.1
+199.41989 630.2
+199.50493 806.9
+203.49655 598.8
+214.51801 726.4
+229.76570 598.3
+249.38530 682.6
+274.35580 551.6
+319.99261 661.5
+332.80066 596.0
+349.95712 540.9
+368.02130 584.8
+371.53387 661.3
+381.36002 754.5
+393.13266 527.2
+394.13699 610.4
+427.54987 913.4
+476.21756 634.2
+482.66437 802.0
+499.92838 582.8
+532.55975 2077.4
+543.96381 625.8
+630.41431 702.7
+637.87134 559.4
+653.09552 538.9
+676.67316 1243.0
+697.78009 554.9
+731.12579 903.1
+779.53925 732.4
+796.02094 1172.5
+814.81415 582.1
+1019.72522 629.8
+1057.30176 820.4
+1198.25134 3156.9
+1228.47156 623.3
+1267.60449 695.9
+1315.40332 606.8
+1584.03320 686.4
+1748.59290 523.2
+1777.71143 829.8
+1878.33826 752.0
+1878.80493 714.3
+1879.63684 19487.3
+1879.91577 2865.7
+1880.87646 835.9
+1898.41248 649.2
+1907.24512 7222.4
+1919.19983 822.7
+1930.59778 913.3
+S	4391	4391	1880.12040793
+Z	2	3758.393
+Z	3	5637.086
+532.50476 1792.5
+565.24640 653.0
+676.66742 997.0
+709.34265 578.4
+796.01190 1223.2
+844.92548 686.6
+948.81903 751.3
+960.49628 600.2
+1188.25415 726.4
+1198.12598 2987.3
+1350.26501 555.3
+1430.18884 666.9
+1508.69897 732.1
+1539.19714 657.5
+1876.79773 644.8
+1878.40198 996.8
+1879.60498 18972.2
+1879.89307 5008.0
+1880.27527 729.0
+1881.12549 1005.5
+1907.16675 7243.0
+1910.47473 694.0
+1930.70313 987.8
+S	4392	4392	1907.59024127
+Z	3	5719.495
+Z	2	3813.333
+532.56873 1850.9
+533.25024 709.2
+547.76862 569.2
+548.28967 633.5
+549.19080 792.4
+556.67700 684.4
+662.24036 601.3
+663.63672 593.5
+713.42902 601.2
+734.80664 609.4
+796.01923 788.3
+884.84686 719.5
+944.04346 652.0
+1198.27612 3600.1
+1504.94531 813.2
+1525.52527 867.1
+1859.48108 812.0
+1878.31433 653.8
+1878.72083 1095.0
+1879.47253 7246.6
+1879.75513 16436.3
+1880.83069 1136.7
+1881.32629 942.0
+1907.11914 7474.9
+1930.69580 1174.7
+1932.55774 937.0
+S	4393	4393	419.1908246
+Z	2	836.534
+Z	3	1254.297
+106.45790 561.0
+116.60684 515.2
+120.66515 596.1
+121.75266 767.9
+121.76448 2649.1
+121.82177 581.4
+122.04872 591.4
+133.14217 1181.8
+137.28957 844.1
+146.77626 576.1
+146.92444 615.4
+159.95384 504.0
+161.07423 660.9
+165.73428 815.4
+173.61490 539.1
+182.29852 603.4
+199.00464 894.8
+199.37770 2162.8
+199.38867 1788.4
+199.42119 610.6
+199.47691 1003.2
+199.49234 604.7
+208.09157 549.0
+214.51077 652.1
+217.25172 559.6
+291.39771 549.7
+318.06128 547.8
+342.27795 691.8
+384.54391 555.6
+391.40231 541.5
+400.75906 1622.4
+418.76901 1104.2
+437.85992 595.6
+476.80780 748.6
+532.56641 1698.0
+549.16913 637.7
+658.15466 526.9
+676.67596 1050.6
+731.13971 1266.8
+767.24823 640.2
+796.00946 978.5
+858.04382 642.2
+965.70599 664.9
+976.05365 602.2
+1057.30542 765.5
+1140.48254 627.0
+1154.05664 659.2
+1198.26501 3126.3
+1473.56470 550.7
+1525.43237 743.4
+1531.70715 639.1
+1620.09045 718.1
+1677.03528 550.2
+S	4395	4395	1907.68424127
+Z	2	3813.521
+Z	3	5719.777
+529.89142 610.3
+532.54504 1743.7
+549.17560 773.6
+564.66864 628.5
+569.86420 602.9
+573.62091 593.8
+660.57623 807.4
+676.72400 787.1
+936.54456 665.9
+977.39075 655.9
+990.92181 592.5
+1039.98840 631.0
+1198.22192 2757.1
+1525.49695 766.9
+1565.87000 735.8
+1605.22949 632.9
+1667.86768 659.6
+1727.56531 734.6
+1801.37048 682.6
+1837.77832 607.0
+1870.87585 598.1
+1878.58276 888.1
+1878.84167 791.4
+1879.31824 2944.4
+1879.77087 18660.0
+1880.19080 3000.2
+1880.45398 1356.5
+1880.65454 947.5
+1880.93408 1020.4
+1881.33472 811.4
+1907.16614 7173.2
+1919.29163 930.4
+1930.69299 1141.0
+S	4396	4396	499.1568246
+Z	2	996.466
+Z	3	1494.195
+129.33003 582.9
+130.19688 602.1
+130.79651 519.9
+131.07802 587.9
+134.09662 576.2
+134.23920 590.5
+136.89438 638.8
+137.30116 670.4
+147.71960 646.5
+166.32631 495.5
+170.81215 518.7
+174.98045 619.9
+188.21231 685.1
+188.26071 805.2
+188.26729 799.4
+188.27406 1171.5
+188.28279 1299.4
+188.29419 1419.5
+188.30916 1286.6
+188.31894 905.9
+193.50090 642.8
+199.00383 984.1
+199.30135 1349.7
+199.36801 1165.5
+199.37648 1168.8
+199.38815 1420.5
+199.39919 2372.5
+199.42459 800.1
+199.49803 802.4
+205.73764 524.5
+219.66872 511.0
+231.93816 531.0
+250.28838 602.8
+271.45129 623.8
+280.20715 663.6
+299.39615 683.3
+308.92404 620.0
+377.06485 596.5
+381.38852 839.6
+394.47186 581.3
+415.81430 567.6
+423.32364 683.6
+427.58112 738.7
+482.57709 588.8
+482.69785 578.5
+493.63611 625.6
+524.74725 706.3
+532.49713 2314.6
+573.61194 681.1
+630.46173 956.2
+639.59320 573.3
+657.66162 656.5
+676.68140 1030.5
+714.14575 693.2
+800.48859 589.2
+809.82684 628.0
+862.32849 563.2
+889.30591 645.2
+921.77197 568.8
+924.73633 556.9
+943.10309 590.9
+1019.62531 764.4
+1075.77942 638.0
+1187.82434 566.1
+1198.11060 3447.8
+1326.57886 709.5
+1338.13501 584.8
+1428.09302 667.6
+1689.08447 590.2
+1877.29797 732.0
+1878.68909 1088.4
+1879.03699 1603.1
+1879.65869 20195.5
+1880.18994 1451.1
+1880.64453 1259.3
+1882.01440 804.4
+1907.14587 7753.2
+1907.69592 547.4
+1930.75208 844.8
+1965.17041 621.3
+S	4398	4398	1880.13340793
+Z	2	3758.419
+Z	3	5637.125
+511.42838 605.8
+532.49829 1816.1
+549.13947 627.9
+594.86743 600.9
+676.56287 845.2
+676.67731 1074.5
+731.12006 769.6
+732.14941 789.9
+772.35425 603.3
+779.83411 586.3
+858.03467 696.2
+928.09088 702.6
+967.76416 634.6
+1091.29736 607.7
+1198.11914 3273.6
+1239.78760 571.2
+1264.25293 698.2
+1384.30139 692.5
+1525.40564 764.0
+1776.39148 645.0
+1802.58972 617.8
+1860.11401 748.5
+1878.77197 1123.9
+1879.14697 2784.7
+1879.64343 18883.5
+1880.17542 2271.0
+1880.58350 1747.0
+1880.90405 748.2
+1881.14746 888.2
+1902.83765 629.4
+1906.96301 749.6
+1907.24390 7403.9
+1945.36792 615.1
+S	4399	4399	1907.5698246
+Z	2	3813.292
+Z	3	5719.434
+532.52606 1502.2
+532.57245 737.2
+549.13171 952.3
+567.42242 616.1
+664.04047 538.9
+676.69586 1278.5
+691.68579 601.1
+792.53882 579.7
+796.01526 943.7
+1057.30884 787.5
+1074.28711 637.2
+1198.17847 2873.6
+1385.54761 706.8
+1399.87207 674.0
+1406.63086 654.2
+1505.03979 689.3
+1879.05139 1782.3
+1879.43799 3350.6
+1879.68286 18970.4
+1880.06409 1489.8
+1880.33337 1324.8
+1880.91882 865.3
+1882.47229 885.6
+1906.84436 810.9
+1907.22791 7634.6
+1912.26208 685.5
+1918.05786 665.8
+1919.13733 758.4
+S	4401	4401	1880.05140793
+Z	2	3758.255
+Z	3	5636.879
+507.65991 608.6
+512.24420 640.2
+532.50568 1908.1
+549.15259 1003.5
+557.46503 675.0
+676.68829 1100.4
+678.29956 634.5
+796.01953 692.7
+799.84430 763.9
+836.89569 676.4
+1080.02417 668.1
+1101.60632 661.3
+1198.12939 3463.4
+1349.33398 825.8
+1585.58289 596.4
+1667.88757 572.8
+1699.99817 728.1
+1773.75598 637.0
+1777.24268 812.8
+1780.58887 733.9
+1877.45740 820.0
+1879.20679 1944.4
+1879.64990 19548.5
+1880.08911 1692.6
+1880.53137 988.7
+1881.85266 911.4
+1907.20654 7254.4
+1930.65369 766.7
+S	4402	4402	1907.62799127
+Z	2	3813.408
+Z	3	5719.609
+532.50610 2268.2
+563.91559 625.6
+630.35962 787.7
+676.69269 861.2
+713.49438 594.6
+715.27368 571.0
+796.02399 817.7
+872.59094 572.5
+1019.69482 690.8
+1087.54407 727.4
+1109.68445 686.6
+1182.79089 640.3
+1188.03821 784.4
+1198.13293 2747.1
+1252.60730 634.7
+1783.76245 698.0
+1876.50708 859.6
+1877.73767 788.6
+1879.05530 1295.1
+1879.67603 18874.0
+1880.32800 1023.4
+1883.79785 641.1
+1907.22229 7413.7
+1919.16870 747.3
+1930.47510 1136.7
+S	4403	4403	642.487241267
+Z	2	1283.127
+Z	3	1924.186
+165.73581 606.8
+185.60968 576.0
+187.49640 723.2
+188.26817 1157.8
+188.28340 1022.5
+188.29503 1389.0
+188.30508 1084.9
+188.30884 1079.6
+188.31982 963.0
+197.69061 654.3
+199.30576 788.1
+199.34793 754.6
+199.36598 546.5
+199.38274 1701.2
+199.39493 2223.2
+199.40526 1687.3
+199.41550 1269.3
+199.43893 907.3
+199.47044 588.0
+199.47806 565.0
+199.49297 890.4
+205.60905 898.1
+224.36928 586.4
+230.78253 587.4
+239.70706 577.0
+249.51477 575.9
+251.45097 623.4
+271.44958 648.3
+274.81778 591.0
+297.29263 628.7
+316.63007 613.3
+316.66885 536.7
+323.48279 652.2
+330.22476 539.3
+342.26465 822.0
+350.30890 672.4
+369.06363 582.9
+435.59644 577.5
+464.83820 615.1
+482.20648 552.3
+495.96152 732.7
+506.34470 558.7
+512.40881 566.7
+532.57373 2173.5
+539.24261 615.8
+541.99878 719.7
+564.32196 556.3
+583.03174 1371.1
+603.92963 728.8
+630.38287 1048.5
+674.63141 595.3
+676.65100 904.9
+676.74792 795.0
+721.38141 783.0
+731.09460 655.2
+744.79309 787.5
+746.83978 639.5
+779.32257 574.4
+796.01782 1115.0
+865.76593 557.2
+936.74823 587.2
+1038.83630 612.1
+1057.48694 592.1
+1077.34937 629.7
+1079.50488 534.2
+1079.59253 590.3
+1179.11499 706.8
+1198.28381 3798.6
+1260.77307 613.3
+1267.94421 677.3
+1344.79626 757.6
+1350.61768 656.4
+1458.44849 729.9
+1462.55286 789.9
+1489.51111 673.2
+1525.36023 912.0
+1547.27771 606.2
+1575.87683 696.6
+1678.16907 843.3
+1879.67798 15139.3
+1879.90186 7557.5
+1880.35168 2131.8
+1880.83521 753.7
+1906.86047 765.6
+1907.19568 6904.7
+1907.50867 952.6
+1930.52979 1337.3
+1965.81433 856.4
+S	4405	4405	1880.16399127
+Z	2	3758.48
+Z	3	5637.217
+505.33682 643.2
+532.51801 1696.9
+606.00818 604.5
+676.55524 681.6
+679.11517 754.8
+690.92511 544.2
+695.31427 697.9
+731.06049 826.7
+737.87579 638.8
+740.29156 581.2
+797.79706 644.2
+1072.77661 649.7
+1160.56262 649.6
+1198.15466 2775.3
+1261.60754 861.9
+1418.46326 686.5
+1596.84790 627.2
+1658.40393 711.4
+1879.11963 1536.3
+1879.66284 16726.8
+1879.96423 5308.1
+1880.21973 2743.9
+1880.70813 1287.8
+1880.90173 1372.7
+1907.14771 7639.8
+S	4406	4406	445.539407933
+Z	2	889.231
+Z	3	1333.343
+112.47411 607.5
+113.04662 578.8
+113.45177 551.0
+118.19441 511.5
+119.71844 638.0
+120.65305 910.2
+120.86859 559.3
+121.76335 2190.6
+122.04649 659.9
+122.62743 582.5
+122.86250 616.2
+127.71919 548.8
+129.65244 609.2
+130.14967 653.9
+133.13245 1139.7
+141.86166 580.1
+156.43097 547.6
+157.45229 659.7
+157.58754 840.8
+165.73270 927.3
+169.47630 694.8
+175.95181 573.4
+182.76610 604.5
+195.29324 540.0
+199.34076 839.9
+199.36067 729.1
+199.37926 1595.5
+199.39070 2295.6
+199.40233 1893.3
+199.42242 649.6
+199.48927 705.0
+199.74336 585.5
+201.33429 564.4
+244.77284 518.2
+249.92415 665.5
+250.58821 686.5
+255.26472 604.0
+280.15482 614.3
+293.04568 833.9
+296.52625 772.3
+308.87109 604.2
+327.91516 660.5
+331.94052 566.2
+341.01764 2064.9
+342.02020 655.3
+342.29791 648.7
+350.31372 628.7
+408.11514 583.6
+409.75150 687.4
+427.50241 823.9
+429.08731 9416.4
+430.08780 2157.5
+440.37177 561.5
+449.31610 560.8
+449.34903 608.0
+472.98996 594.2
+476.81403 842.3
+482.61191 835.0
+502.70108 676.9
+508.26538 599.6
+532.52673 2047.3
+562.84637 624.0
+594.90509 675.0
+630.34528 795.8
+642.75269 532.3
+648.02917 698.2
+676.66888 1052.4
+684.23663 503.6
+684.67303 552.0
+720.73627 625.5
+739.69318 644.3
+773.40326 562.3
+878.77899 622.7
+954.45557 668.3
+1012.53412 697.0
+1012.92285 569.8
+1047.93323 668.8
+1049.19678 679.5
+1198.17676 3395.2
+1525.27747 580.9
+S	4407	4407	1907.5608246
+Z	3	5719.407
+Z	2	3813.274
+532.52399 1969.6
+588.90576 910.0
+589.46997 591.3
+625.26697 590.5
+630.39630 685.2
+676.68103 861.5
+828.25574 652.9
+837.62787 648.6
+880.94366 629.5
+891.01617 616.4
+1188.26343 548.9
+1188.35840 617.2
+1198.17456 3198.4
+1319.62073 681.2
+1606.09155 719.4
+1873.07593 652.7
+1876.24866 866.2
+1878.92358 1838.7
+1879.31970 3750.7
+1879.64160 18996.6
+1879.95496 3308.0
+1880.37695 2102.8
+1907.25500 7165.9
+1930.56897 1120.4
+S	4409	4409	1880.0528246
+Z	2	3758.258
+Z	3	5636.883
+526.01239 579.9
+532.52802 1563.5
+535.46710 721.5
+547.70679 726.1
+573.57849 586.0
+592.44049 545.8
+630.29120 853.0
+657.73584 608.9
+665.07532 590.1
+679.91498 621.6
+705.30627 566.8
+835.36426 692.4
+882.37445 657.3
+943.48987 670.5
+1080.87390 637.4
+1169.67114 597.3
+1180.21155 611.6
+1188.22229 748.2
+1198.17773 3128.2
+1525.17712 631.9
+1657.56299 680.9
+1731.49854 654.1
+1876.14966 874.5
+1878.88123 1235.9
+1879.16345 1846.1
+1879.69873 19486.9
+1879.96399 932.5
+1880.22815 1777.6
+1880.51074 1213.5
+1880.76868 764.2
+1881.40076 1171.8
+1906.88074 2254.9
+1907.17419 6784.7
+1930.23279 1249.2
+S	4410	4410	1907.59799127
+Z	2	3813.348
+Z	3	5719.519
+525.53046 652.0
+532.52106 2030.1
+630.34424 891.0
+676.69916 921.3
+720.17841 684.2
+726.68317 634.8
+744.13824 646.3
+796.02289 984.3
+807.29865 642.0
+970.69122 571.5
+978.76465 566.4
+986.69159 600.1
+989.29010 680.1
+1057.32300 927.0
+1156.10925 725.4
+1198.16284 2784.7
+1347.79321 657.0
+1432.82507 707.0
+1876.19299 907.5
+1878.71973 894.5
+1879.08679 1969.4
+1879.68811 19638.9
+1880.30237 1813.6
+1880.68542 765.6
+1906.79895 880.4
+1907.18298 7440.1
+1930.41907 788.0
+S	4412	4412	1907.54724127
+Z	2	3813.247
+Z	3	5719.366
+532.49237 1848.0
+549.11401 937.2
+630.35724 785.0
+654.72748 755.0
+669.52631 612.6
+676.70575 846.3
+744.53735 630.2
+796.01617 1088.4
+907.13007 572.7
+1040.12622 676.8
+1057.38489 566.2
+1167.53699 782.3
+1187.99609 757.0
+1198.10486 3156.1
+1198.25220 707.9
+1332.36011 697.2
+1336.39172 635.6
+1477.60107 651.9
+1557.02869 585.0
+1629.45813 607.6
+1699.62732 729.0
+1876.30762 757.5
+1878.77295 708.2
+1879.42395 7053.9
+1879.71594 17998.2
+1880.00293 5326.4
+1880.85425 685.8
+1881.44214 635.5
+1882.98743 645.2
+1906.87158 1310.6
+1907.23743 6891.0
+1907.59985 1526.3
+1919.19153 694.8
+1930.45313 806.4
+S	4413	4413	1880.41424127
+Z	3	5637.967
+Z	2	3758.981
+532.47662 1994.5
+534.54163 806.9
+687.86359 549.3
+796.01794 1223.2
+826.92340 708.5
+1057.30615 762.5
+1198.06042 3381.4
+1211.16101 706.6
+1412.39709 613.4
+1523.47107 630.0
+1702.91089 589.5
+1711.90991 597.5
+1878.99341 1846.6
+1879.65552 17561.6
+1880.35608 708.2
+1880.56165 739.5
+1881.99963 851.5
+1882.57312 789.3
+1906.89233 993.4
+1907.18335 7210.0
+1919.11548 604.0
+1930.42456 865.9
+S	4414	4414	642.4875746
+Z	3	1924.188
+Z	2	1283.127
+182.76654 670.0
+188.23026 1024.1
+188.26257 990.8
+188.28065 1350.2
+188.28786 1493.0
+188.31073 970.5
+188.32623 728.4
+189.53372 658.6
+196.96756 523.8
+198.20894 572.3
+199.00795 992.0
+199.31143 904.6
+199.35278 506.3
+199.35956 616.9
+199.38657 1692.6
+199.39967 1913.4
+199.40887 1560.4
+199.42154 739.3
+199.45790 514.7
+199.49780 635.0
+207.32124 538.3
+219.54869 587.9
+220.72055 643.8
+223.20883 607.0
+233.55386 640.7
+240.92854 496.7
+255.01505 748.6
+256.62845 631.4
+277.32477 674.8
+280.15857 696.5
+289.61203 614.6
+301.84534 560.0
+308.87762 843.4
+339.69589 634.1
+362.84412 609.5
+367.33008 784.2
+381.32550 815.6
+400.58456 578.3
+427.50220 751.1
+430.69888 566.9
+451.04507 514.1
+496.14560 604.2
+513.63013 663.5
+514.82690 683.2
+532.47162 1855.6
+625.04535 737.8
+648.34473 615.0
+676.53235 711.1
+676.67303 886.3
+747.92072 691.6
+788.32153 689.2
+796.03339 1017.6
+1198.05322 3492.9
+1489.68726 587.3
+1558.83606 691.5
+1866.93835 708.8
+1870.21875 655.9
+1873.63403 669.4
+1877.37866 741.6
+1877.98706 885.3
+1878.98718 2163.6
+1879.35107 3426.5
+1879.61316 18971.9
+1880.29321 1450.8
+1881.82227 658.2
+1882.20068 687.8
+1907.17834 7092.9
+1940.83496 628.5
+S	4416	4416	1880.12540793
+Z	3	5637.101
+Z	2	3758.403
+532.47021 1903.8
+549.06445 692.7
+559.60309 600.5
+630.30756 997.7
+652.94952 677.9
+676.64221 825.1
+676.67053 873.3
+731.00323 850.9
+761.17877 605.4
+793.24854 687.5
+853.18304 640.0
+1104.86914 690.7
+1198.05823 3610.6
+1878.39539 623.7
+1878.60181 1089.9
+1879.65527 18263.6
+1879.93311 4954.5
+1880.22571 1385.6
+1880.47827 1368.9
+1880.71826 1575.6
+1898.77441 652.5
+1907.21594 7034.9
+1930.27063 844.2
+S	4417	4417	499.156241267
+Z	3	1494.193
+Z	2	996.465
+134.91341 549.4
+137.28087 704.9
+143.38710 552.9
+157.59456 567.4
+165.73814 736.0
+167.99687 648.2
+187.94098 549.0
+188.22029 678.8
+188.26532 1123.6
+188.27824 1207.9
+188.28763 1286.0
+188.29662 1314.9
+188.30956 973.2
+188.32008 736.3
+188.34276 486.3
+189.09222 593.3
+192.43839 558.1
+196.23402 630.5
+197.38161 647.8
+199.00954 831.0
+199.20451 607.7
+199.29657 848.9
+199.33449 746.5
+199.37386 875.0
+199.39340 2080.7
+199.39876 1987.1
+199.41988 859.3
+218.88474 599.7
+252.17567 520.1
+266.82910 537.4
+272.04266 563.3
+275.32602 578.5
+292.48145 602.8
+312.42749 621.1
+334.09570 666.0
+445.00983 560.7
+478.74051 605.0
+479.73218 614.5
+480.72565 14332.6
+498.73566 7609.2
+532.42957 1427.2
+532.48840 623.7
+579.45544 633.4
+630.36572 750.0
+643.53265 682.6
+659.70380 547.6
+660.64771 620.4
+676.68109 769.0
+689.27051 558.8
+731.07874 688.1
+775.27759 540.4
+796.03729 858.3
+796.92169 571.3
+1012.58282 565.9
+1180.67419 543.1
+1197.96741 2961.9
+1462.09778 740.7
+1525.32556 783.1
+1653.58850 789.8
+1776.89709 828.9
+1816.64404 708.7
+1870.42346 827.2
+1878.21289 743.3
+1878.56104 672.5
+1879.13879 2983.6
+1879.68457 18808.6
+1880.27771 1989.0
+1880.92432 1068.9
+1881.52124 829.8
+1907.22937 7262.3
+1919.15186 697.3
+1930.49609 1169.0
+S	4419	4419	1880.11124127
+Z	2	3758.375
+Z	3	5637.058
+532.38458 521.6
+532.48279 1942.7
+533.55817 585.5
+549.10919 1021.3
+630.35303 1090.9
+674.55206 509.3
+676.68811 1218.5
+686.60022 622.6
+731.04633 711.5
+761.23535 622.5
+796.01978 1088.0
+915.31555 597.3
+922.36285 572.0
+928.29877 547.2
+942.72992 645.9
+1057.31653 965.7
+1129.42664 759.7
+1135.86230 687.5
+1198.07935 3272.0
+1335.54651 667.7
+1398.91223 642.0
+1444.55701 666.8
+1525.27295 824.5
+1609.07959 607.5
+1649.66187 733.5
+1762.72595 643.1
+1828.51367 642.0
+1878.43909 647.7
+1878.87573 1143.0
+1879.12170 1952.1
+1879.35681 1970.3
+1879.65515 19477.5
+1880.19238 1362.6
+1880.39954 894.2
+1881.03845 982.2
+1907.28235 7782.6
+1930.43152 1260.0
+S	4420	4420	1907.73624127
+Z	3	5719.933
+Z	2	3813.625
+532.47449 2163.8
+555.64038 760.6
+600.80804 603.9
+630.35712 630.9
+676.68982 843.6
+678.46924 687.2
+754.75415 557.9
+796.02124 1170.0
+895.45642 579.7
+1020.81104 705.7
+1036.25757 696.4
+1057.32922 761.7
+1188.21484 682.4
+1198.06165 2836.2
+1285.66418 698.2
+1335.31726 622.4
+1503.67346 680.3
+1588.34338 722.3
+1875.54150 671.2
+1879.02588 860.1
+1879.68066 19879.9
+1880.36133 1278.3
+1881.26257 600.4
+1907.23804 7342.8
+1911.32568 635.8
+1930.41028 1019.2
+S	4422	4422	1880.16440793
+Z	2	3758.481
+Z	3	5637.218
+513.33594 530.8
+522.12653 677.8
+525.59918 569.3
+532.45178 1939.5
+610.49988 596.8
+630.38062 809.0
+676.67487 832.7
+677.89050 631.1
+771.99548 566.6
+796.03210 1298.5
+1057.29773 841.0
+1140.47913 726.6
+1183.84155 634.7
+1198.01257 3220.8
+1217.45300 586.2
+1335.77136 705.3
+1416.69092 651.4
+1459.09155 668.8
+1525.36633 857.3
+1564.15332 705.6
+1638.73340 583.3
+1876.88635 734.4
+1878.76392 893.1
+1879.25623 2728.2
+1879.63599 19563.7
+1880.02747 2315.9
+1880.45862 1004.9
+1882.77783 697.0
+1906.94360 854.1
+1907.21960 7414.0
+1930.52356 1057.6
+S	4423	4423	1907.6878246
+Z	2	3813.528
+Z	3	5719.788
+532.50262 2074.7
+532.54224 707.2
+543.17847 643.9
+549.12701 1174.9
+631.93787 569.3
+647.04077 681.9
+661.52734 758.9
+661.57910 594.2
+676.67920 1424.9
+699.80798 570.2
+713.02502 637.0
+731.09161 977.1
+796.01581 847.7
+970.00824 598.5
+1028.99194 655.3
+1111.60645 614.8
+1188.27344 739.5
+1198.11841 2971.2
+1198.23657 778.1
+1221.00378 631.2
+1520.73413 621.7
+1525.34412 771.7
+1853.46924 688.8
+1876.77246 1025.4
+1877.62354 774.8
+1878.94141 1045.4
+1879.64966 19989.8
+1880.39624 1153.2
+1880.99585 1150.0
+1907.23853 7686.8
+1913.79248 582.9
+1917.52063 783.9
+1930.48071 1085.9
+S	4425	4425	1880.21840793
+Z	2	3758.589
+Z	3	5637.38
+532.45367 1550.1
+573.07001 643.3
+676.67462 996.3
+796.02747 827.1
+943.41327 661.1
+1144.55042 708.6
+1168.06201 630.1
+1198.01929 3257.6
+1260.21997 759.4
+1715.60974 693.6
+1777.52637 1062.8
+1878.30811 623.6
+1878.62231 1099.4
+1878.90222 1437.0
+1879.61511 19054.9
+1880.31604 1705.9
+1907.17505 6873.8
+1930.35535 1077.0
+1932.53955 858.2
+S	4426	4426	445.5398246
+Z	3	1333.344
+Z	2	889.232
+113.15311 523.9
+118.63670 619.4
+120.65730 785.9
+121.76707 2097.8
+122.15048 493.0
+127.99650 711.6
+138.58200 532.5
+140.75325 680.3
+147.63077 538.5
+160.72168 638.5
+161.23534 542.2
+176.89790 547.2
+178.09917 530.4
+199.00493 1121.0
+199.29379 863.0
+199.30453 904.9
+199.36082 804.0
+199.37041 822.6
+199.38208 877.4
+199.39226 2815.0
+199.48987 790.7
+208.16164 566.3
+208.98763 734.0
+210.92137 650.9
+219.83101 560.5
+226.15424 595.3
+236.94624 581.5
+240.58614 687.2
+341.01715 7105.0
+342.01584 1254.6
+359.02713 888.1
+370.26263 666.4
+401.76550 1114.8
+426.76996 984.9
+427.71045 605.8
+429.08740 29115.4
+430.08841 6572.4
+479.48129 696.4
+482.63312 694.5
+532.48682 2305.2
+533.43079 662.1
+549.12646 754.1
+630.36926 536.6
+665.10742 618.6
+672.56158 572.1
+676.68567 791.3
+693.97174 701.0
+707.48236 555.5
+796.01086 1233.8
+909.32037 575.6
+955.10114 612.3
+1020.73871 611.8
+1057.30798 798.8
+1117.10242 567.9
+1188.04468 720.7
+1191.26648 550.2
+1198.09302 3503.8
+1215.37659 566.1
+1291.95154 583.5
+1525.34546 826.6
+S	4427	4427	1907.61299127
+Z	2	3813.378
+Z	3	5719.564
+532.49438 2093.2
+550.99774 641.3
+700.71564 555.3
+776.99493 646.6
+779.16046 634.6
+796.03284 962.9
+974.13751 607.7
+975.92548 572.8
+1012.13812 679.8
+1140.21716 605.3
+1188.01660 978.3
+1198.10852 3209.7
+1225.65405 583.3
+1525.37402 925.9
+1647.93262 662.6
+1716.37048 630.3
+1878.30322 876.2
+1878.71301 699.3
+1879.37744 4310.5
+1879.69543 18264.3
+1880.43372 1665.2
+1880.70288 1226.9
+1907.18042 7345.5
+S	4429	4429	1880.0858246
+Z	3	5636.982
+Z	2	3758.324
+532.49347 2043.5
+549.11066 687.3
+617.15387 576.5
+676.67999 1337.4
+689.91107 554.7
+813.11053 679.1
+873.82715 694.9
+879.96637 675.7
+904.77893 663.6
+1057.29883 1183.9
+1198.10010 3377.7
+1257.76965 620.3
+1525.26660 910.5
+1576.09753 643.0
+1715.75085 744.5
+1878.17468 696.0
+1879.64368 19477.2
+1879.90295 1975.2
+1880.55933 940.3
+1881.19250 735.1
+1907.25879 7699.0
+1930.42542 1136.6
+S	4430	4430	1907.5528246
+Z	2	3813.258
+Z	3	5719.383
+532.37659 1514.9
+568.78308 636.2
+582.59869 636.3
+601.31012 778.9
+637.60425 611.3
+676.73047 954.2
+706.42615 597.1
+796.03589 906.5
+857.95587 950.9
+913.81744 739.2
+987.65216 547.3
+1013.98022 621.6
+1019.66174 1039.7
+1188.07983 838.8
+1189.61633 604.5
+1197.83984 3031.5
+1198.04224 574.9
+1206.94531 572.8
+1301.66052 780.3
+1352.35999 605.9
+1878.35669 1020.0
+1879.07617 1923.5
+1879.44043 3505.2
+1879.77783 18765.8
+1880.10400 3783.8
+1880.67383 966.8
+1881.17212 962.7
+1881.61011 769.9
+1883.71851 773.6
+1899.22778 882.8
+1907.19788 7532.9
+1907.53503 1017.0
+1930.39355 862.5
+S	4432	4432	1880.10540793
+Z	3	5637.041
+Z	2	3758.363
+532.49640 1951.9
+533.15680 703.8
+539.46155 620.6
+549.13940 766.5
+593.50482 600.5
+596.19427 612.5
+603.63116 721.5
+609.42889 688.6
+630.40198 794.8
+676.68188 1013.3
+796.03467 971.6
+920.24274 706.9
+1009.54675 570.3
+1181.92688 614.1
+1198.10950 3129.1
+1265.84314 599.0
+1310.25842 697.8
+1525.40637 721.4
+1541.50232 668.7
+1575.61865 602.4
+1681.75830 741.5
+1862.96179 689.8
+1877.28943 662.7
+1878.31287 790.3
+1879.66052 19931.6
+1881.57458 742.0
+1907.28503 7207.0
+1930.56494 1450.0
+1992.87439 681.2
+S	4433	4433	1907.6798246
+Z	2	3813.512
+Z	3	5719.764
+527.73950 613.3
+532.51129 1518.6
+573.72455 666.6
+676.66473 826.5
+676.69891 587.2
+693.02972 581.3
+733.32880 689.8
+748.51532 618.9
+750.46948 620.7
+1188.20605 741.3
+1198.14990 3091.9
+1220.58899 614.5
+1439.16748 687.4
+1525.26123 645.9
+1608.73450 655.7
+1777.28027 835.6
+1871.13318 628.1
+1878.45337 1046.5
+1878.76758 824.2
+1879.01172 1350.2
+1879.24731 1570.7
+1879.72229 17482.2
+1880.26501 936.8
+1905.68433 654.8
+1905.84497 643.1
+1907.23206 7801.9
+1919.11145 724.6
+S	4434	4434	499.156991267
+Z	3	1494.196
+Z	2	996.466
+136.61769 651.5
+140.33388 559.7
+149.55582 606.2
+160.61493 564.6
+165.73729 1014.7
+188.25369 655.3
+188.25983 676.6
+188.27042 885.3
+188.28291 1387.7
+188.28986 1216.3
+188.30351 1175.8
+188.31390 795.0
+188.32712 643.8
+188.45586 603.6
+199.00742 961.8
+199.28148 917.0
+199.35216 556.2
+199.37091 1064.7
+199.37939 2382.5
+199.39220 1022.6
+199.40143 1040.8
+199.41089 1445.4
+199.42480 764.7
+199.47754 720.9
+237.44400 505.2
+240.78467 550.8
+243.41316 648.9
+262.28076 621.0
+271.28098 608.5
+271.43979 722.6
+271.59338 545.9
+296.69965 582.4
+299.74658 712.8
+302.22781 729.7
+318.58676 632.7
+348.07071 559.8
+401.88950 583.6
+409.61685 594.9
+427.55087 621.9
+462.09250 592.5
+480.72543 11856.1
+482.66199 642.5
+498.73694 6936.4
+505.25327 605.1
+513.20013 614.5
+517.07605 595.0
+532.52228 2059.6
+630.41394 717.9
+657.34137 509.7
+676.67572 815.0
+781.92383 566.4
+910.39722 684.2
+978.46021 602.7
+1079.47144 684.2
+1198.16284 3266.1
+1244.56006 543.9
+1750.07507 578.3
+1797.86536 822.7
+1837.17786 514.9
+1863.14197 671.9
+1877.87976 750.2
+1879.26697 3012.1
+1879.63879 19763.3
+1880.02563 3020.0
+1907.16980 7421.5
+1907.49683 951.0
+1919.05286 917.2
+1930.60693 1271.1
+1960.35693 645.7
+S	4436	4436	1880.10899127
+Z	3	5637.052
+Z	2	3758.37
+532.50366 1686.4
+549.07318 792.0
+561.80542 639.2
+573.58466 745.8
+585.46362 653.5
+616.85669 602.5
+622.91473 629.3
+630.31744 822.2
+676.67365 846.0
+678.04865 601.4
+698.20178 680.0
+796.03394 891.5
+829.64240 614.2
+844.31488 631.4
+869.00690 629.6
+900.71814 706.7
+905.97943 638.7
+1019.71606 662.7
+1103.16406 632.8
+1198.12769 3488.0
+1198.26514 811.7
+1392.89453 648.5
+1879.18115 1042.6
+1879.63049 18848.9
+1879.88977 3743.6
+1880.16943 1264.1
+1907.24402 7053.0
+1907.80884 837.7
+1930.30200 1107.1
+1979.99695 651.0
+1992.73975 579.6
+S	4437	4437	1907.65599127
+Z	2	3813.464
+Z	3	5719.693
+532.49200 2008.6
+534.76093 625.6
+549.10260 794.7
+592.39679 580.9
+630.35272 794.4
+845.98633 686.8
+849.07080 581.5
+857.99640 708.7
+937.90015 735.7
+1021.04810 628.3
+1047.55762 584.7
+1091.86072 774.4
+1198.09851 3230.2
+1310.72498 744.9
+1353.18628 755.4
+1489.38916 743.5
+1525.26416 787.5
+1673.97339 559.5
+1878.26892 947.0
+1878.92029 836.6
+1879.64746 19237.1
+1880.33081 1461.4
+1881.05945 1066.3
+1907.23584 7100.7
+1907.81958 894.8
+S	4438	4438	419.190407933
+Z	3	1254.296
+Z	2	836.533
+106.91949 825.0
+108.10014 607.9
+108.53053 508.7
+108.53316 534.4
+113.62427 475.7
+114.91166 688.2
+121.76897 2059.2
+153.65465 512.9
+154.04793 611.1
+162.77859 574.9
+165.74094 875.5
+169.47888 767.4
+199.01042 932.9
+199.21748 653.5
+199.28398 698.5
+199.29890 948.3
+199.32535 679.3
+199.38280 2697.8
+199.41258 1147.2
+209.86034 760.8
+225.04066 630.9
+261.91852 690.1
+267.69626 596.2
+289.81271 583.3
+291.21219 627.3
+327.93362 513.0
+337.91522 626.3
+342.24298 698.6
+350.29916 489.5
+350.31470 624.2
+373.88535 636.0
+381.32712 574.3
+395.43124 553.9
+427.50626 858.1
+463.61407 519.8
+467.09583 531.0
+469.92709 698.7
+476.81396 771.5
+482.60916 1098.9
+485.69879 506.5
+532.52448 1849.1
+565.72968 534.8
+613.55438 679.9
+675.78888 548.6
+676.69330 1150.7
+690.90015 596.7
+731.06512 607.9
+796.03180 1264.7
+853.07642 554.9
+966.71033 646.0
+1027.34875 586.6
+1072.85413 564.4
+1155.88000 552.5
+1198.02661 1108.3
+1198.17041 3271.7
+1324.06372 639.7
+1331.52576 640.5
+1391.56433 569.3
+1480.20862 550.1
+1489.42725 596.4
+1492.58154 547.6
+1499.53796 561.5
+1508.05566 576.5
+1545.80981 631.6
+S	4440	4440	1880.11340793
+Z	3	5637.065
+Z	2	3758.379
+532.47314 1752.1
+538.53436 547.1
+538.86249 582.1
+549.13165 1161.4
+565.38544 743.3
+656.00983 731.9
+676.66516 1081.8
+687.44238 596.7
+692.87781 590.9
+731.09857 887.0
+748.83917 583.6
+939.80963 629.5
+941.93921 652.0
+983.04285 706.3
+1057.26587 1017.7
+1140.26306 765.1
+1141.63757 651.4
+1147.54004 652.1
+1198.06091 3131.4
+1667.48022 573.6
+1792.49719 645.2
+1852.63159 630.2
+1869.69897 948.7
+1878.79944 1269.0
+1879.65930 16339.9
+1880.50562 1991.3
+1907.12024 6685.8
+1930.55798 893.8
+S	4441	4441	1907.65140793
+Z	2	3813.455
+Z	3	5719.679
+524.62573 567.5
+532.49475 1656.4
+549.13000 846.6
+608.63745 583.8
+630.37665 760.7
+676.67474 630.7
+779.92407 735.9
+796.01794 992.9
+1124.10779 640.7
+1192.31543 671.9
+1198.09863 3588.0
+1221.94287 668.2
+1334.19458 620.1
+1479.10132 702.5
+1570.13159 659.3
+1675.17737 610.1
+1876.45593 867.7
+1877.31018 877.2
+1878.97253 1030.9
+1879.72693 17187.8
+1880.00183 5830.3
+1880.26709 1383.0
+1880.76489 873.2
+1907.14490 6915.7
+1907.43347 1267.9
+1930.48633 1061.6
+1984.24207 874.9
+S	4443	4443	1880.6458246
+Z	1	1879.638
+532.54065 1895.0
+537.25879 792.9
+552.60004 644.4
+552.80243 859.0
+661.25159 616.0
+676.68713 973.3
+695.48907 645.6
+707.15680 524.3
+746.15405 617.9
+750.22748 640.4
+759.02631 691.0
+796.00360 889.9
+907.39557 681.2
+936.85907 567.1
+976.26709 558.3
+1049.40222 659.8
+1198.20850 3303.4
+1254.43506 747.4
+1498.71338 697.4
+1777.13196 882.9
+1869.84534 758.3
+1876.39587 691.7
+1878.70007 734.7
+1878.90271 781.5
+1879.22839 2353.8
+1879.68530 19263.4
+1880.17932 2170.6
+1880.65405 1055.5
+1880.96655 1263.9
+1906.97449 860.3
+1907.24060 7011.9
+1919.20776 752.9
+1930.47217 1113.2
+S	4444	4444	1907.60040793
+Z	2	3813.353
+Z	3	5719.526
+532.49341 2094.1
+630.35541 708.7
+646.91345 550.1
+676.68787 939.2
+699.87732 564.3
+762.49359 665.0
+768.20386 636.0
+779.87469 572.5
+796.02283 1015.9
+841.54889 760.0
+937.83899 563.5
+947.65979 808.2
+1173.50439 579.4
+1198.10400 3453.3
+1276.29846 673.4
+1492.84753 672.2
+1536.27014 704.1
+1607.17786 607.5
+1741.83240 624.2
+1789.13757 662.7
+1878.16577 1135.1
+1878.87952 821.5
+1879.14685 1217.4
+1879.67151 18833.1
+1879.94128 3507.4
+1880.22266 1793.9
+1881.05029 663.5
+1882.69202 698.8
+1907.04639 1419.2
+1907.31421 7178.2
+1930.41577 684.2
+S	4445	4445	643.0748246
+Z	1	642.067
+165.27789 601.1
+172.89966 530.3
+174.51221 624.8
+186.16853 541.7
+188.25395 790.6
+188.26378 847.9
+188.26802 819.2
+188.27965 1063.0
+188.29268 1370.8
+188.30357 1095.9
+188.31334 972.4
+195.92749 577.6
+197.68414 651.5
+199.29210 787.8
+199.36119 676.9
+199.38049 2892.7
+199.38963 1319.7
+199.39885 728.1
+199.47868 1096.5
+202.35480 789.5
+206.32181 619.7
+208.77069 570.3
+217.90598 591.1
+240.26056 534.4
+242.88667 601.2
+251.76314 770.5
+260.45395 562.8
+278.77240 590.8
+279.57571 698.2
+292.62109 556.5
+295.44763 624.6
+407.42972 565.8
+417.62653 577.0
+532.53412 1923.3
+547.80597 671.1
+549.11981 793.1
+573.56781 564.9
+577.06030 551.8
+584.69397 687.9
+599.04260 593.6
+655.68213 639.1
+676.70209 858.6
+741.18915 588.0
+780.14160 744.3
+796.02032 1192.0
+1019.67548 688.1
+1068.57373 611.6
+1106.88062 624.2
+1170.83691 579.0
+1181.64966 762.1
+1183.58862 706.6
+1188.12097 590.1
+1198.19983 3396.1
+1201.00378 728.7
+1215.46741 676.3
+1222.54871 574.5
+1362.24890 624.6
+1377.17651 661.2
+1525.30554 956.1
+1715.17651 626.1
+1876.15491 847.5
+1877.86523 830.1
+1878.16345 812.6
+1878.68628 1069.4
+1878.92798 702.3
+1879.33398 2649.2
+1879.69946 19667.9
+1879.99194 3106.1
+1880.44556 983.1
+1881.21021 1078.8
+1907.23145 7566.6
+1930.47205 1090.2
+1971.61218 567.6
+S	4447	4447	1880.0788246
+Z	2	3758.31
+Z	3	5636.961
+512.02765 605.1
+515.71667 625.2
+532.53448 1628.3
+532.95660 619.2
+549.17566 798.6
+676.69073 951.5
+796.01984 747.2
+915.43677 593.0
+987.44977 638.6
+1119.85156 655.6
+1144.07141 679.4
+1198.19092 3283.8
+1244.99060 681.3
+1258.25891 582.7
+1283.93542 740.9
+1434.41016 595.2
+1525.53381 990.7
+1744.78625 624.5
+1776.99243 1315.6
+1860.13013 896.9
+1878.52185 1108.7
+1878.86621 1305.4
+1879.66956 18004.2
+1880.21033 1125.8
+1880.74463 1340.7
+1882.16138 923.9
+1893.80286 710.6
+1907.29822 7151.1
+1930.75073 784.5
+S	4448	4448	1907.66140793
+Z	2	3813.475
+Z	3	5719.709
+532.54681 1769.5
+535.61084 624.9
+549.10547 853.3
+556.24744 625.8
+586.47046 653.3
+592.75671 660.2
+630.35938 769.3
+660.49915 670.5
+676.68213 988.2
+732.49811 595.3
+742.18213 635.9
+796.01404 1096.5
+1140.37134 773.9
+1198.22388 3285.4
+1525.34009 744.8
+1616.26819 614.5
+1874.37170 818.8
+1876.13428 882.0
+1877.45117 749.3
+1878.52014 1118.5
+1879.25354 2962.4
+1879.65137 19660.6
+1880.00452 3506.0
+1880.69775 1028.4
+1881.95959 1084.7
+1882.62146 717.5
+1907.23706 7743.6
+1930.44531 1151.7
+1982.55847 756.2
+S	4449	4449	1198.6228246
+Z	3	3592.593
+Z	2	2395.398
+323.80029 516.7
+405.80685 601.0
+423.04883 585.2
+427.54526 726.5
+474.60269 628.8
+506.70398 704.2
+524.13818 560.3
+532.53961 2346.1
+537.14252 681.9
+550.10706 673.3
+582.96619 587.6
+676.70789 958.2
+736.92291 585.1
+796.02271 693.3
+840.55719 685.9
+910.72028 583.1
+914.45642 789.1
+1070.99548 831.9
+1181.34155 679.5
+1188.27405 928.9
+1198.20715 2653.0
+1200.55688 653.0
+1269.02295 752.6
+1285.73865 729.3
+1444.43616 604.5
+1525.42407 844.7
+1553.96545 685.8
+1588.84277 574.0
+1685.92957 696.4
+1809.88574 589.2
+1870.22974 666.5
+1870.44739 739.2
+1878.71790 1044.7
+1879.40015 2948.0
+1879.71094 19525.0
+1880.02783 3393.0
+1880.70972 721.6
+1881.01587 991.5
+1907.21033 7433.3
+1930.59448 846.4
+1980.24622 618.3
+S	4451	4451	1879.89140793
+Z	2	3757.935
+Z	3	5636.399
+512.14801 615.6
+532.50610 1471.3
+548.46259 636.4
+630.37665 888.7
+676.64673 1288.7
+679.26794 689.1
+826.62323 650.9
+968.54321 635.6
+1001.33209 625.3
+1198.13074 3333.7
+1330.33179 595.5
+1505.67969 631.6
+1525.33594 1044.1
+1667.35962 644.1
+1718.54736 1601.5
+1759.05151 683.7
+1762.71448 725.6
+1841.39612 575.8
+1860.17029 678.4
+1877.38818 635.0
+1878.98657 932.9
+1879.57312 20661.2
+1881.01892 639.1
+1907.16467 7602.5
+1930.50220 904.1
+1985.54102 680.8
+S	4452	4452	1907.6248246
+Z	3	5719.599
+Z	2	3813.402
+532.51831 1399.4
+630.33337 842.1
+731.03766 637.8
+759.74823 648.5
+796.02808 730.5
+826.43115 649.5
+878.52930 556.7
+907.59735 594.9
+1188.21802 637.1
+1198.15979 3484.4
+1265.51086 563.8
+1406.63049 672.3
+1487.17041 802.5
+1524.27625 644.6
+1525.26379 755.3
+1719.22815 1165.5
+1876.16333 625.2
+1878.10767 750.3
+1878.76477 1188.5
+1879.72729 15991.5
+1880.73682 1252.0
+1881.25903 905.6
+1906.77271 1011.6
+1907.11890 7351.1
+1930.35583 1055.4
+S	4454	4454	1880.1478246
+Z	2	3758.448
+Z	3	5637.168
+508.46420 722.7
+532.49835 1051.6
+532.53003 1042.6
+591.08441 692.6
+613.04364 641.7
+747.80341 661.6
+757.72046 774.3
+857.98657 713.6
+878.13916 621.3
+886.40247 633.1
+977.50769 561.9
+1054.30737 602.1
+1198.17761 2736.4
+1253.67883 672.2
+1265.63562 707.0
+1712.89783 587.6
+1836.04065 584.6
+1860.17627 586.0
+1879.02441 2462.6
+1879.37109 1114.3
+1879.81287 19563.6
+1880.29150 1013.5
+1880.59644 2535.5
+1882.43323 596.5
+1903.49475 712.4
+1907.18628 7333.8
+1930.47131 636.5
+1997.49902 806.3
+S	4455	4455	1907.56199127
+Z	3	5719.411
+Z	2	3813.276
+532.52643 2021.0
+549.10815 726.0
+603.77747 575.0
+630.35468 937.8
+676.68420 696.0
+706.38062 590.0
+730.60474 612.2
+753.20642 547.9
+755.96045 724.3
+796.01428 954.8
+806.67920 593.3
+925.49091 601.3
+1057.32214 657.8
+1198.17749 3398.3
+1204.46545 587.4
+1291.53088 639.5
+1332.61279 647.4
+1397.00476 753.8
+1489.98328 801.6
+1567.42871 693.7
+1655.05872 728.6
+1717.39795 1628.3
+1742.42371 685.6
+1752.19666 1071.3
+1873.07214 773.4
+1878.12659 650.6
+1878.50403 1410.0
+1879.17981 1516.3
+1879.68103 19717.3
+1879.97278 2223.1
+1880.23584 1770.2
+1880.85059 1503.7
+1881.22693 1071.3
+1881.76099 803.1
+1907.14014 6508.9
+1930.43201 1033.0
+S	4456	4456	1198.6185746
+Z	2	2395.389
+Z	3	3592.581
+381.60001 640.3
+415.64090 673.9
+427.52280 698.8
+435.66257 683.5
+482.64020 1030.3
+500.92120 646.6
+532.53851 2329.3
+608.81232 673.3
+630.37762 1077.0
+676.69183 993.1
+678.98962 542.0
+712.09216 645.8
+768.92517 569.5
+796.01929 1049.2
+801.88220 694.3
+840.23737 631.4
+958.87250 599.7
+961.42987 583.7
+1198.20837 3633.7
+1377.13135 623.5
+1525.34216 800.6
+1620.50500 629.0
+1716.59497 1439.4
+1751.38367 1353.7
+1877.06165 742.4
+1877.97766 1092.7
+1878.41785 1336.0
+1878.87561 1419.0
+1879.21289 2040.8
+1879.68298 18477.8
+1880.19080 2455.4
+1880.50586 1659.6
+1880.89087 1506.9
+1881.32080 793.9
+1881.89697 696.4
+1907.22205 7318.1
+S	4458	4458	1880.2188246
+Z	3	5637.381
+Z	2	3758.59
+532.52209 2016.8
+676.68890 821.1
+701.82861 618.8
+723.77032 681.3
+793.19269 653.7
+796.01416 825.3
+805.69769 586.4
+838.35419 757.8
+978.24976 634.0
+1122.88208 618.6
+1193.28198 661.2
+1198.17224 3441.5
+1291.43188 709.6
+1291.76648 717.8
+1309.71411 694.7
+1695.02246 622.8
+1870.35645 614.8
+1872.91858 725.2
+1879.67383 16958.3
+1880.02234 4021.0
+1880.29688 1473.2
+1882.86096 852.9
+1907.18750 6532.4
+1965.75488 744.8
+S	4459	4459	445.5398246
+Z	3	1333.344
+Z	2	889.232
+113.81839 565.3
+121.76737 1776.7
+127.76506 582.3
+128.20531 595.9
+131.78810 590.6
+133.15906 639.8
+146.91380 623.5
+152.05846 642.1
+165.73784 710.9
+178.42674 596.0
+182.88777 612.9
+196.34131 626.0
+199.00565 1026.9
+199.27921 967.6
+199.35066 778.1
+199.37674 3212.8
+199.39435 614.3
+199.39714 582.3
+199.47420 872.8
+202.19682 649.0
+229.50275 620.2
+263.41769 701.5
+267.20667 556.5
+319.75787 588.0
+341.01630 2221.3
+342.27008 653.7
+350.32339 545.9
+365.48358 678.7
+427.50952 684.2
+429.08694 6089.2
+430.08789 1314.0
+435.51736 548.8
+469.91858 809.9
+476.82376 679.8
+497.06781 548.6
+532.54150 1705.0
+536.29663 575.8
+630.38129 592.2
+644.59186 541.5
+676.68005 1393.9
+697.24384 626.4
+780.21063 528.1
+796.01276 1139.5
+954.31787 732.5
+966.80969 704.6
+1047.22717 685.3
+1051.48450 658.6
+1057.30713 708.8
+1061.56592 631.6
+1130.91003 668.6
+1183.40320 647.3
+1198.21460 3180.6
+1427.79004 598.2
+1525.39233 784.1
+1640.79468 616.0
+1652.65442 581.1
+1760.66663 616.5
+1777.01904 592.2
+S	4460	4460	1907.65840793
+Z	2	3813.469
+Z	3	5719.7
+516.30615 631.9
+532.47552 1928.1
+549.07990 798.3
+598.03741 650.0
+666.44165 641.3
+676.68347 794.0
+708.85425 590.4
+717.05090 632.6
+731.02795 1001.4
+793.24780 675.3
+796.00061 926.0
+982.21924 626.1
+1020.11908 711.4
+1074.68115 644.8
+1120.56775 629.3
+1133.24646 653.3
+1198.06543 3419.8
+1648.64282 663.4
+1809.47534 850.9
+1868.60437 694.3
+1878.75208 1240.3
+1879.09045 1800.0
+1879.65906 17227.7
+1880.21667 1298.6
+1880.45679 1208.4
+1880.80701 1244.4
+1881.04834 714.7
+1907.25647 7172.8
+1930.32971 873.5
+1963.77405 604.5
+S	4462	4462	1880.0608246
+Z	3	5636.907
+Z	2	3758.274
+519.16931 531.5
+532.52435 1980.4
+636.67139 742.9
+796.01953 1021.0
+800.43286 682.2
+868.32312 708.0
+978.01031 735.3
+1057.18152 666.5
+1083.78992 670.1
+1188.14685 853.0
+1198.17102 3315.7
+1243.83557 780.0
+1776.96375 787.1
+1878.53174 854.9
+1879.03735 1641.6
+1879.64600 19257.2
+1879.90198 3734.0
+1880.57861 893.2
+1880.86462 787.8
+1881.22046 924.0
+1900.00391 758.0
+1907.24731 6726.9
+1919.13818 840.6
+1930.66907 714.2
+S	4463	4463	1907.63199127
+Z	3	5719.621
+Z	2	3813.416
+532.50452 874.1
+532.54523 1820.2
+549.14557 730.4
+580.12927 736.7
+585.37897 668.3
+676.68665 863.8
+796.01776 1005.5
+1010.97278 901.4
+1018.95483 660.0
+1019.69336 663.2
+1195.59302 568.4
+1198.21631 2991.2
+1203.61865 646.9
+1309.24329 570.8
+1495.02075 705.5
+1525.39490 767.9
+1683.09949 691.7
+1738.47168 844.5
+1779.55811 691.5
+1877.98901 820.7
+1878.73303 1129.6
+1879.66589 18291.9
+1879.93066 5524.9
+1880.57788 1618.1
+1881.69873 1009.2
+1907.25195 7486.6
+1930.54419 835.6
+1932.58691 633.3
+S	4464	4464	419.190991267
+Z	3	1254.298
+Z	2	836.534
+120.63186 605.8
+121.76849 2089.6
+129.00244 556.8
+132.14943 691.9
+155.77562 503.1
+165.73883 754.5
+197.52483 554.2
+197.68956 563.2
+199.00548 687.5
+199.28871 901.4
+199.33429 696.3
+199.35689 701.5
+199.38637 3510.1
+231.24637 528.7
+263.33722 599.6
+289.22076 647.9
+306.98911 543.8
+312.63416 606.8
+400.75989 1987.3
+416.77820 640.8
+418.77094 1475.8
+469.92258 731.1
+476.82336 712.9
+481.93570 575.3
+532.49744 2309.2
+532.85724 529.9
+538.30048 556.4
+549.14978 690.6
+550.97821 617.3
+573.58649 1081.8
+607.51276 680.2
+651.49127 566.7
+676.68494 1025.6
+796.00989 1075.3
+867.75024 681.1
+937.17468 678.4
+970.49872 577.1
+1019.65411 658.2
+1057.30701 1036.2
+1188.21509 633.6
+1198.11243 3199.3
+1207.19958 661.3
+1313.61658 719.3
+1327.29065 635.7
+1528.06140 670.3
+1563.08569 572.9
+1603.99133 814.7
+S	4466	4466	1880.0878246
+Z	3	5636.988
+Z	2	3758.328
+510.58456 645.8
+532.41779 2080.1
+562.15869 620.6
+625.36633 587.6
+630.37982 830.4
+670.66498 627.7
+676.68811 712.4
+680.30823 522.8
+731.08441 872.2
+796.00385 954.6
+926.43005 613.1
+941.06274 633.9
+1010.63568 583.8
+1012.34406 756.7
+1019.73749 965.1
+1038.34656 654.4
+1057.31372 912.6
+1188.24512 644.1
+1197.93188 3664.2
+1245.59558 600.5
+1521.85278 574.5
+1565.65332 629.8
+1876.44653 902.6
+1879.14343 1713.6
+1879.66235 19601.9
+1880.15271 2043.7
+1880.38855 647.5
+1881.69531 806.7
+1906.82605 703.2
+1907.23633 7345.0
+1930.47375 1091.9
+S	4467	4467	1907.6828246
+Z	3	5719.773
+Z	2	3813.518
+532.35004 744.1
+532.45605 1284.9
+542.01337 758.8
+549.09015 1147.1
+574.56366 586.3
+630.34393 981.2
+646.29639 749.8
+676.69012 1463.5
+717.80060 593.2
+796.01434 926.9
+821.45557 816.1
+919.59143 623.0
+1036.14331 653.1
+1040.12817 634.4
+1056.95190 558.2
+1197.84119 772.9
+1198.01575 2523.8
+1525.25659 1239.1
+1776.89575 697.0
+1878.04968 679.9
+1878.86682 762.1
+1879.67627 19202.0
+1880.47546 768.0
+1881.74158 1248.2
+1882.05481 943.2
+1882.31091 565.8
+1885.20935 582.7
+1906.93323 896.4
+1907.24170 7261.2
+1930.33740 1115.8
+S	4468	4468	499.156407933
+Z	2	996.465
+Z	3	1494.194
+128.56090 707.1
+128.75926 587.0
+133.52484 605.8
+135.45549 588.9
+147.13206 562.0
+165.73903 905.6
+168.88515 626.4
+169.41002 592.9
+170.82794 641.9
+171.65149 681.9
+188.25183 572.9
+188.25925 973.3
+188.26480 981.9
+188.27562 808.7
+188.28497 1332.6
+188.30035 1360.8
+199.00703 807.3
+199.30536 885.1
+199.36542 1025.3
+199.38805 1739.1
+199.40465 2417.8
+199.41389 1160.1
+199.46135 697.7
+199.48349 908.0
+199.50256 641.3
+214.69623 753.0
+219.87350 672.2
+266.93097 603.6
+273.95941 565.1
+323.01385 553.4
+334.38528 633.9
+350.31076 821.6
+353.75955 536.7
+393.12042 561.8
+422.87875 527.3
+447.87146 539.5
+453.80103 595.4
+455.48959 765.2
+480.72534 9469.2
+482.15900 864.4
+498.73566 4267.8
+532.45996 2195.3
+630.34412 889.8
+662.80847 618.2
+676.69836 795.4
+713.78400 621.4
+731.05310 821.7
+732.46857 692.3
+796.01678 990.5
+1013.21246 571.9
+1057.33960 755.7
+1171.89026 739.6
+1198.02917 3181.1
+1228.02026 631.9
+1362.83264 587.1
+1469.71082 638.1
+1525.24512 756.8
+1588.19409 577.8
+1640.76526 576.8
+1661.88745 682.3
+1717.86487 665.3
+1718.97144 617.2
+1770.69971 625.9
+1877.62073 834.2
+1878.87390 835.8
+1879.11304 1022.8
+1879.38757 1420.3
+1879.68811 20296.1
+1880.02026 574.8
+1880.29053 1084.6
+1880.54578 1412.1
+1881.01660 864.4
+1881.78613 770.2
+1907.22327 7239.0
+1930.39160 1061.2
+S	4470	4470	1907.5818246
+Z	2	3813.316
+Z	3	5719.47
+532.40912 1483.9
+549.10272 928.3
+618.02808 660.0
+630.34290 650.6
+666.27777 664.7
+676.68146 959.4
+676.84613 710.4
+796.02185 1550.8
+1105.60339 676.8
+1188.02869 947.2
+1197.91528 3186.4
+1525.25830 804.9
+1873.01953 680.7
+1877.75146 774.1
+1878.92761 906.2
+1879.69495 16455.7
+1880.06812 3179.7
+1880.39160 2226.5
+1906.78870 587.9
+1907.21118 7254.4
+1910.00427 641.3
+1919.19153 723.5
+1930.43079 785.7
+1972.21313 661.8
+S	4472	4472	1880.09999127
+Z	3	5637.025
+Z	2	3758.352
+532.46912 2029.5
+549.10931 707.2
+676.69586 1056.1
+684.44452 606.4
+687.91949 575.4
+699.85968 632.1
+726.01117 675.2
+768.11914 559.6
+776.47150 609.5
+780.16284 702.0
+796.02490 909.0
+835.55273 568.4
+841.24414 615.1
+1019.67944 723.1
+1057.33362 873.9
+1198.04919 3383.5
+1198.39563 754.2
+1285.65955 762.9
+1345.35840 716.9
+1454.14307 681.4
+1525.26868 774.6
+1654.77820 639.2
+1693.27063 609.5
+1877.91187 1016.7
+1878.41077 1138.7
+1879.12134 1218.7
+1879.33789 2398.8
+1879.68445 18981.3
+1880.02466 1863.8
+1880.32300 1161.0
+1880.63159 1126.7
+1880.94702 884.4
+1881.64832 822.6
+1907.27087 7758.9
+1930.40771 763.2
+1952.49219 630.5
+S	4473	4473	1907.6198246
+Z	2	3813.392
+Z	3	5719.584
+532.42993 1866.4
+704.44702 699.4
+707.40924 710.8
+796.00598 979.0
+953.89996 802.1
+964.67957 553.8
+984.59283 591.0
+1157.62549 806.8
+1197.95728 3030.5
+1776.93237 723.8
+1877.19336 850.6
+1878.79858 1909.7
+1879.12085 752.5
+1879.64209 20174.9
+1880.18494 1302.9
+1880.46008 1047.0
+1907.27661 7584.6
+1913.93274 668.6
+1930.52637 1137.9
+S	4475	4475	1880.08940793
+Z	2	3758.331
+Z	3	5636.993
+532.45227 1817.7
+549.14850 681.2
+556.19635 591.0
+634.42920 651.1
+666.28918 597.3
+676.68921 904.0
+787.60931 704.9
+796.01794 731.3
+933.18262 610.6
+1057.33472 755.6
+1198.01599 3297.7
+1488.13672 668.7
+1864.20837 754.2
+1877.41650 737.1
+1877.55750 840.4
+1878.85144 1109.2
+1879.35876 3270.4
+1879.67297 19883.4
+1879.98291 3263.2
+1880.30188 1195.7
+1907.19470 7346.9
+1947.15051 746.4
+S	4476	4476	1907.65040793
+Z	2	3813.453
+Z	3	5719.676
+532.39886 628.4
+532.43274 1735.3
+532.46606 723.3
+552.78394 696.0
+649.10583 601.3
+649.93213 700.1
+676.67731 924.8
+875.03925 567.8
+1026.82312 627.4
+1058.10815 677.4
+1137.48999 586.5
+1150.12158 748.6
+1188.21289 889.2
+1197.97449 2999.3
+1327.12549 656.1
+1667.35327 699.9
+1798.36707 603.5
+1809.26123 681.5
+1870.18066 650.0
+1879.63367 20037.5
+1879.90454 2585.5
+1880.82190 806.0
+1907.25928 7158.9
+1930.47302 970.4
+S	4477	4477	1198.39040793
+Z	2	2394.933
+Z	3	3591.896
+336.36908 712.4
+342.25864 661.3
+361.14334 577.8
+362.76074 622.2
+422.89807 691.3
+450.12375 638.2
+477.50635 599.1
+511.89523 528.7
+532.42902 1750.7
+665.37183 675.6
+675.79980 700.9
+676.67249 1341.1
+730.38934 726.6
+785.63409 566.8
+792.88007 530.7
+796.02081 967.5
+991.81683 634.0
+1014.24225 720.4
+1020.80652 708.2
+1048.53137 588.0
+1057.29858 885.9
+1150.93652 670.2
+1197.95667 2805.4
+1525.35852 806.5
+1771.25989 636.5
+1877.86816 1186.7
+1878.56531 708.0
+1879.62231 19891.7
+1879.91309 1685.4
+1880.82336 756.8
+1907.04907 1684.1
+1907.32263 6632.7
+1930.53503 1048.0
+1966.60303 602.8
+S	4479	4479	1880.07599127
+Z	3	5636.953
+Z	2	3758.304
+507.32443 529.7
+532.43286 1860.9
+533.49774 687.6
+586.10071 734.0
+623.74628 693.1
+676.66602 881.3
+796.01538 979.7
+919.63690 596.1
+1019.66949 873.4
+1057.29224 780.9
+1183.37488 572.5
+1197.96765 3282.6
+1221.44958 606.0
+1311.50964 696.9
+1513.59766 787.7
+1656.81860 629.0
+1870.22559 712.8
+1878.73157 879.7
+1879.62109 19865.2
+1879.91492 2646.5
+1880.44666 1124.0
+1881.07947 810.9
+1907.26563 7603.5
+1919.18384 852.9
+1930.67871 787.0
+S	4480	4480	1907.65399127
+Z	3	5719.687
+Z	2	3813.46
+516.28223 650.1
+532.45392 2007.4
+544.14221 700.7
+549.18372 675.8
+608.35663 640.0
+622.11469 625.7
+652.92169 583.1
+676.69849 951.6
+759.56305 637.9
+1055.52673 683.8
+1057.33386 904.4
+1112.43079 683.3
+1198.01355 3298.1
+1223.41296 642.3
+1252.27771 682.6
+1304.18176 605.8
+1350.60876 672.3
+1363.51855 601.5
+1389.17773 767.1
+1398.48779 621.0
+1649.13123 780.1
+1692.87048 592.8
+1879.11316 2206.5
+1879.67932 19290.1
+1879.97217 1275.7
+1880.25159 2101.1
+1880.59155 948.2
+1880.93054 662.4
+1907.23193 7055.5
+1907.46143 1070.7
+1907.69482 640.3
+1930.69275 1221.8
+S	4481	4481	499.156991267
+Z	2	996.466
+Z	3	1494.196
+148.59639 523.1
+151.13663 620.8
+154.26340 618.2
+155.85001 541.4
+158.59557 617.0
+165.73796 541.9
+165.74263 557.1
+188.23149 679.4
+188.24702 778.1
+188.26138 1038.4
+188.27261 1076.4
+188.27646 1095.2
+188.28685 1788.2
+188.29958 1658.4
+188.30959 1054.0
+188.31993 915.2
+188.33162 657.1
+197.68570 646.5
+199.29179 692.6
+199.30440 612.7
+199.34753 689.9
+199.37807 1052.4
+199.39026 1456.3
+199.40045 2871.9
+199.49940 1089.2
+199.52641 597.5
+200.47044 568.6
+202.11790 611.4
+209.85512 737.1
+209.88959 503.6
+213.45955 671.4
+222.79820 658.1
+240.33141 531.0
+244.73976 534.9
+271.25565 688.8
+271.41016 634.1
+280.96271 606.0
+297.70093 493.0
+310.04742 672.1
+311.39120 553.0
+313.07867 602.2
+314.84918 674.5
+334.65427 562.2
+353.35995 651.2
+381.33212 620.9
+391.78226 586.8
+395.88824 626.6
+400.81097 705.9
+427.20227 508.8
+427.51651 755.1
+459.17422 536.0
+459.31717 591.4
+482.62228 680.5
+532.49408 2003.9
+544.09088 517.8
+572.97821 518.6
+573.13995 605.8
+579.00085 577.6
+663.36646 575.7
+676.69763 803.9
+730.08087 534.9
+731.08392 868.5
+796.02258 993.1
+823.00269 622.2
+857.98932 669.8
+1031.63220 596.4
+1145.25879 656.3
+1188.28210 688.6
+1198.10950 3475.2
+1256.32214 667.9
+1539.88696 593.6
+1777.23950 641.6
+1878.70789 739.6
+1879.41980 1816.9
+1879.69995 20185.0
+1880.63550 1114.3
+1880.96301 661.7
+1881.50195 742.4
+1882.42981 679.6
+1902.17065 742.9
+1907.20752 7626.1
+1907.86279 684.4
+1919.22705 739.2
+1930.46240 1128.8
+1965.63464 552.5
+S	4483	4483	1880.1318246
+Z	2	3758.416
+Z	3	5637.12
+532.51422 1628.0
+549.16193 766.4
+630.40918 760.8
+676.70721 1158.5
+725.08789 621.5
+731.12671 680.9
+783.34863 565.5
+796.01306 1160.8
+800.50226 645.8
+974.38818 650.6
+1057.35815 710.9
+1166.96704 593.6
+1168.36877 660.7
+1198.14587 2980.4
+1265.73694 563.6
+1525.39941 879.1
+1609.47607 754.6
+1664.45264 743.6
+1692.37231 713.9
+1717.58972 594.2
+1758.85962 632.9
+1780.21033 792.1
+1878.78674 1162.3
+1879.16504 1428.4
+1879.43262 4716.7
+1879.74133 18142.7
+1880.41138 1335.6
+1880.85571 901.6
+1881.25525 843.3
+1881.67102 1016.8
+1906.70215 787.4
+1907.13037 7133.6
+1930.61243 1111.6
+S	4484	4484	1907.59424127
+Z	3	5719.507
+Z	2	3813.341
+532.50494 2131.9
+558.92194 573.7
+676.69464 1173.2
+763.87689 614.1
+778.25452 620.1
+796.02173 744.7
+797.20355 618.1
+1021.47949 609.3
+1127.02856 650.2
+1167.10364 623.1
+1198.12927 3503.0
+1249.33875 682.3
+1665.14832 681.8
+1877.94971 751.6
+1878.40649 1276.5
+1879.28967 1788.6
+1879.69800 19183.3
+1880.14282 1509.2
+1880.80249 728.7
+1907.21680 7158.8
+1930.58582 804.6
+S	4485	4485	1198.46324127
+Z	3	3592.114
+Z	2	2395.079
+342.28149 724.1
+353.15613 656.1
+532.55090 1724.2
+556.20575 713.9
+556.43237 573.7
+578.60144 573.7
+588.87286 738.8
+614.20660 689.9
+618.54767 520.2
+630.40063 836.5
+676.65417 984.2
+688.02759 679.4
+694.27893 578.5
+722.73065 538.6
+767.90137 648.1
+796.02216 908.4
+887.26996 621.7
+1021.12286 641.9
+1057.29883 696.5
+1187.96729 825.5
+1198.22913 3162.5
+1200.55701 765.6
+1212.42798 595.2
+1300.13281 596.4
+1355.80017 830.7
+1617.02783 563.6
+1617.20178 595.3
+1666.00208 726.6
+1877.80334 748.2
+1879.24084 2622.5
+1879.65979 15022.9
+1880.12183 4042.9
+1880.48193 2095.3
+1882.95239 617.4
+1907.20923 7086.0
+S	4487	4487	1880.13740793
+Z	2	3758.427
+Z	3	5637.137
+532.54535 1978.8
+549.13586 727.4
+581.30212 616.0
+630.37903 1069.0
+676.70380 966.3
+710.55365 679.7
+796.01929 907.9
+858.01501 774.2
+970.58600 698.5
+1077.77515 737.1
+1110.72205 625.1
+1198.22034 3646.2
+1305.47644 564.4
+1525.35730 929.3
+1559.84351 687.6
+1604.93591 685.5
+1678.95642 612.7
+1715.54456 815.4
+1777.48096 909.6
+1789.64001 634.1
+1878.07166 726.3
+1878.82776 1159.6
+1879.36621 5272.2
+1879.71619 18122.4
+1880.03638 5468.7
+1880.57715 1318.7
+1880.92419 909.9
+1881.34570 1024.4
+1907.17261 7958.9
+1907.56787 869.2
+1930.53296 1156.8
+1993.86560 589.5
+S	4488	4488	1907.6338246
+Z	3	5719.626
+Z	2	3813.42
+526.46582 670.2
+532.55853 1955.3
+549.17432 1034.6
+565.77197 640.5
+623.15106 589.1
+630.44592 1075.9
+731.15167 739.4
+796.01648 1014.1
+808.08801 617.4
+815.47729 554.6
+892.80768 702.1
+897.19397 659.2
+1020.80267 769.4
+1198.24133 3012.9
+1258.46411 713.7
+1300.90820 680.8
+1353.11255 606.5
+1448.77307 688.4
+1621.53723 655.3
+1667.36865 636.1
+1730.57117 598.1
+1777.42188 1075.7
+1879.02576 2942.3
+1879.43445 3792.9
+1879.72095 18296.1
+1880.01123 4134.8
+1880.55566 2461.8
+1880.86523 1058.7
+1907.20325 7442.9
+1907.71875 716.6
+1919.24133 762.4
+1930.66479 1143.4
+S	4489	4489	499.1578246
+Z	2	996.468
+Z	3	1494.198
+128.90918 519.2
+130.89197 621.7
+135.22812 606.0
+138.48196 565.8
+141.61397 543.5
+143.75395 545.6
+146.41284 651.4
+148.34941 608.9
+149.37746 560.8
+157.59808 567.4
+163.08015 598.9
+165.32990 637.4
+168.66162 676.6
+182.78185 677.2
+188.24628 667.9
+188.25252 626.2
+188.27068 1433.1
+188.28235 1183.1
+188.29056 1107.6
+188.30000 1159.1
+188.30783 1122.0
+188.32097 748.5
+192.21170 810.6
+198.07396 530.1
+199.00618 823.9
+199.28290 811.6
+199.32033 916.9
+199.35724 1135.0
+199.36511 795.0
+199.38055 1931.0
+199.38739 834.7
+199.39516 1264.0
+199.40257 1025.0
+199.41794 1615.6
+199.43626 663.5
+199.48186 671.9
+199.51665 680.2
+209.52536 631.5
+308.89844 1220.1
+342.26993 887.3
+344.81201 556.3
+345.71063 586.8
+350.31870 717.7
+366.62845 530.5
+372.02209 527.0
+392.99670 780.6
+427.54034 692.6
+428.96732 645.8
+458.72937 781.0
+480.72586 2903.6
+482.50668 664.8
+498.73633 1381.4
+512.71655 543.8
+515.99646 622.6
+532.60669 1726.4
+597.75775 682.8
+605.86041 645.5
+630.40021 1055.1
+676.67999 761.1
+783.81592 622.3
+796.01642 960.3
+849.63550 515.9
+867.92853 643.2
+968.20929 613.0
+972.83752 605.1
+1057.30383 835.8
+1058.26831 508.8
+1069.59424 526.2
+1198.35913 3174.6
+1509.32666 652.3
+1525.39880 751.1
+1681.32666 672.5
+1745.19617 734.5
+1766.53357 603.3
+1786.17847 641.1
+1876.62903 702.8
+1878.56165 578.1
+1878.77576 898.9
+1878.97986 781.9
+1879.19617 1003.6
+1879.63660 19970.5
+1880.07971 1291.8
+1880.73755 776.6
+1907.26978 7106.8
+1919.18640 818.3
+1930.55200 1061.3
+S	4491	4491	1907.6798246
+Z	3	5719.764
+Z	2	3813.512
+532.56226 1907.6
+542.18250 770.1
+596.96014 834.3
+630.41656 614.5
+676.54889 619.2
+676.67578 1046.5
+796.00934 924.1
+834.94781 728.2
+865.37439 726.2
+868.94891 653.4
+903.44580 582.8
+1028.90918 658.7
+1057.29492 989.0
+1057.95825 623.6
+1067.31360 686.6
+1127.90100 593.8
+1147.60266 699.2
+1169.22656 789.3
+1198.25635 2878.5
+1219.22058 698.9
+1522.08801 565.2
+1525.44360 1197.2
+1878.30408 964.6
+1878.73975 1170.9
+1879.62427 19243.4
+1879.91064 2396.0
+1880.47314 1299.9
+1906.72180 914.7
+1907.13354 7168.0
+1907.54578 1170.7
+1930.61047 973.7
+1948.33545 695.8
+1990.85999 683.1
+S	4493	4493	1907.68799127
+Z	3	5719.789
+Z	2	3813.528
+532.52911 2056.9
+595.58862 670.5
+625.25848 610.1
+676.69562 812.9
+847.80676 652.6
+1006.94904 742.0
+1057.33801 968.9
+1077.06482 636.2
+1146.64343 650.8
+1198.18506 3280.6
+1427.22021 639.5
+1429.52954 687.0
+1517.71045 677.3
+1525.50525 1068.9
+1555.18811 730.9
+1876.89111 606.3
+1878.12646 810.4
+1878.85522 983.2
+1879.68665 20363.3
+1880.13611 934.0
+1880.54346 909.4
+1907.26624 7217.9
+1919.21045 782.4
+1930.66968 870.2
+1952.61499 745.4
+S	4494	4494	1879.90924127
+Z	3	5636.452
+Z	2	3757.971
+532.55292 1570.1
+544.71051 564.7
+545.66473 585.6
+549.14734 790.9
+569.80908 617.4
+574.80530 638.6
+576.40356 641.8
+796.01886 1091.5
+822.89679 624.0
+911.02734 586.0
+968.77258 664.8
+1018.83490 594.3
+1023.17371 717.5
+1131.31970 673.4
+1188.30920 896.8
+1193.46680 690.5
+1198.23059 3628.8
+1525.38818 860.3
+1833.30542 784.1
+1878.56665 1064.3
+1878.91321 2017.7
+1879.43030 6247.9
+1879.69446 16698.1
+1880.11316 3864.1
+1880.65186 726.4
+1881.09985 1180.7
+1907.25525 7134.8
+1930.57788 1033.4
+S	4496	4496	1880.0765746
+Z	2	3758.305
+Z	3	5636.955
+532.54486 1906.5
+549.10858 1105.6
+603.50128 773.2
+652.59161 629.8
+676.68207 1618.4
+831.68378 731.3
+848.32141 619.9
+856.94189 544.1
+1042.63257 563.3
+1198.22107 3041.3
+1295.54272 716.8
+1356.55042 592.7
+1413.09705 675.7
+1525.29626 899.7
+1526.29370 694.9
+1777.58032 709.1
+1874.09534 786.8
+1877.77991 1214.7
+1879.18030 2697.0
+1879.64917 19861.1
+1880.09729 2437.5
+1881.53394 1305.3
+1897.82227 644.8
+1906.55249 655.7
+1907.09033 6989.6
+1930.42676 952.1
+S	4497	4497	419.190991267
+Z	2	836.534
+Z	3	1254.298
+121.76646 2223.7
+122.46969 546.0
+133.30133 563.1
+133.73375 615.4
+154.49413 592.2
+165.73750 749.1
+186.64317 753.4
+199.00327 860.3
+199.29813 779.2
+199.37578 984.8
+199.38672 1589.9
+199.39711 3039.6
+199.41750 674.2
+199.49696 1083.6
+209.44670 609.4
+245.06645 614.3
+256.95517 555.9
+292.98166 581.1
+325.50119 532.6
+350.29736 673.3
+361.82889 529.2
+384.71484 708.6
+412.31277 591.5
+448.38461 703.0
+448.62009 563.3
+475.58020 626.6
+476.79663 900.8
+497.18655 623.8
+527.25226 594.9
+532.49554 685.8
+532.54950 1625.1
+579.68402 605.3
+668.75305 507.3
+676.67560 822.3
+676.74127 672.3
+681.63483 564.2
+720.66925 685.3
+796.00806 898.2
+796.62158 592.8
+1043.49292 564.1
+1187.77588 698.3
+1198.22278 2861.0
+1525.38721 847.3
+1525.52490 796.2
+1666.49475 600.3
+S	4498	4498	1907.5588246
+Z	2	3813.27
+Z	3	5719.401
+532.51385 1892.4
+536.58618 559.8
+545.55945 572.1
+630.36475 821.4
+642.09082 739.6
+676.59668 552.6
+676.66614 1150.0
+676.76624 594.2
+777.45837 657.6
+777.92255 597.5
+921.91833 642.3
+947.73468 624.2
+1053.18799 617.5
+1057.30823 609.4
+1057.97583 624.0
+1081.47607 633.5
+1104.79187 577.5
+1116.49048 542.9
+1116.53442 535.9
+1147.32227 556.2
+1198.14868 3209.0
+1336.38147 629.7
+1525.32056 784.0
+1533.53638 617.6
+1607.37097 623.9
+1621.14587 582.3
+1670.40564 688.7
+1715.65723 912.7
+1877.62622 761.0
+1878.43823 1230.8
+1878.87195 894.3
+1879.30640 3665.7
+1879.61572 19318.5
+1879.92346 4087.3
+1880.42529 957.6
+1880.68542 1713.3
+1882.12292 760.5
+1904.61353 802.3
+1906.95898 1139.3
+1907.23669 6914.9
+1930.48792 1056.9
+1941.76892 569.4
+1966.86096 586.8
+1991.60608 702.8
+S	4500	4500	1880.0778246
+Z	2	3758.308
+Z	3	5636.958
+515.31384 557.6
+516.93341 670.2
+532.52264 1871.0
+542.23584 617.0
+574.42499 592.4
+676.70654 844.5
+777.28546 659.7
+796.01563 841.5
+803.73096 716.1
+819.07294 692.5
+858.02026 767.2
+883.96576 665.3
+1057.34375 953.1
+1198.17383 3260.9
+1281.84363 622.4
+1307.73889 538.1
+1354.51709 646.2
+1381.00525 956.0
+1506.54626 691.4
+1525.33948 916.0
+1633.11365 602.4
+1755.64014 741.2
+1764.86548 622.6
+1800.43359 752.1
+1878.70239 1313.3
+1879.12915 650.8
+1879.46863 2948.1
+1879.72107 19110.4
+1880.33508 1019.9
+1880.71484 1476.8
+1906.92493 1124.9
+1907.18933 7236.0
+1996.00586 759.8
+S	4501	4501	1907.6428246
+Z	3	5719.653
+Z	2	3813.438
+532.54364 2261.4
+539.79480 605.7
+630.35883 928.5
+676.68872 939.4
+695.98529 630.7
+703.62439 600.0
+705.56610 591.1
+732.49957 615.8
+796.01019 964.8
+808.81628 705.6
+829.13544 588.0
+889.15930 615.9
+963.13177 650.0
+1198.21765 3465.6
+1271.22827 609.4
+1762.32776 632.3
+1876.77039 720.8
+1877.54553 669.5
+1878.27991 873.9
+1878.56006 1167.9
+1879.04248 1008.8
+1879.72766 18033.9
+1880.15210 2984.2
+1880.60645 766.6
+1880.89612 923.3
+1907.23657 7465.6
+1930.41553 995.7
+S	4502	4502	419.191407933
+Z	2	836.535
+Z	3	1254.299
+106.87794 524.5
+107.48702 684.5
+117.60059 546.9
+120.53398 578.2
+121.76992 2812.8
+125.17057 484.6
+132.21065 546.2
+137.27975 559.3
+138.09547 496.4
+146.90953 869.2
+146.96152 509.4
+146.96422 496.3
+149.07750 616.5
+156.21693 548.7
+168.80101 598.4
+169.92398 683.7
+172.37498 617.1
+178.14088 510.2
+178.54266 524.2
+199.00299 939.9
+199.29131 1044.2
+199.34227 791.5
+199.36482 814.8
+199.38829 2694.4
+199.39546 1613.3
+199.41301 842.1
+199.48607 955.5
+199.96988 598.6
+215.41315 545.7
+261.48615 552.2
+268.18256 606.6
+287.35754 537.0
+307.43079 682.1
+337.60840 567.8
+342.24490 707.9
+350.30469 625.9
+364.74246 492.8
+381.32632 744.9
+402.00406 581.0
+427.50757 840.5
+434.63669 569.1
+438.17435 692.5
+442.73874 559.8
+463.61426 620.4
+476.80240 792.7
+519.56567 501.1
+532.58923 1889.2
+538.95911 525.2
+623.69208 748.2
+640.45270 576.0
+641.69354 628.1
+676.70038 1296.3
+685.88177 551.3
+689.21722 665.0
+721.83844 645.8
+731.06238 708.3
+781.74506 601.7
+796.01001 1089.9
+1196.18494 622.6
+1198.31946 3660.3
+1605.84521 609.7
+S	4504	4504	1880.0108246
+Z	2	3758.174
+Z	3	5636.757
+532.53979 1560.4
+533.66528 671.5
+618.67853 580.0
+630.33350 1149.3
+676.70850 909.9
+731.02295 981.3
+796.00391 841.7
+893.86414 622.4
+970.38831 744.9
+998.54913 718.4
+1019.79327 643.8
+1035.08362 761.5
+1198.20813 2803.5
+1715.63965 782.4
+1873.29663 704.2
+1879.72046 19425.1
+1879.95801 4257.7
+1880.45703 751.2
+1882.01038 617.4
+1882.98511 627.9
+1907.24268 7484.7
+1916.22144 604.7
+1930.39014 1110.9
+S	4505	4505	1907.6088246
+Z	2	3813.37
+Z	3	5719.551
+517.24658 626.1
+532.58789 2033.4
+534.81049 544.2
+567.97089 626.9
+630.43848 687.6
+796.01392 1027.5
+867.43909 674.7
+945.23096 560.2
+1018.56830 617.4
+1198.31250 2956.7
+1412.10278 673.7
+1525.31055 900.5
+1583.50342 613.9
+1712.82935 640.0
+1768.54382 663.8
+1777.52881 726.0
+1874.24512 587.5
+1877.87024 713.8
+1878.65051 1283.2
+1879.27490 3634.0
+1879.66199 19295.0
+1880.04285 3095.4
+1880.62939 1186.8
+1881.50574 690.8
+1907.22900 7131.0
+1933.36292 758.5
+1955.96814 633.4
+S	4507	4507	1880.1158246
+Z	3	5637.072
+Z	2	3758.384
+532.58075 1806.2
+576.42090 600.8
+676.68701 944.0
+782.12714 536.0
+796.02014 893.3
+999.10718 680.2
+1056.16162 651.1
+1198.29333 2817.4
+1525.24988 1162.2
+1665.82397 650.6
+1693.19519 711.6
+1879.27698 3045.9
+1879.66101 18829.7
+1880.06494 3437.1
+1880.82690 1409.8
+1881.13721 819.5
+1907.22095 7312.6
+S	4508	4508	1907.67840793
+Z	3	5719.76
+Z	2	3813.509
+526.69489 659.3
+532.57660 1260.0
+549.10205 839.5
+676.68207 1208.3
+796.02979 999.6
+878.66339 556.0
+1019.66895 733.5
+1030.34985 626.2
+1046.58606 770.5
+1198.29370 2879.9
+1213.40515 724.8
+1225.39868 623.9
+1321.50623 680.6
+1426.88098 613.9
+1481.20276 705.2
+1626.14832 772.6
+1723.80957 719.8
+1770.83777 631.0
+1878.29016 773.4
+1878.69995 570.9
+1878.98364 1019.5
+1879.65649 19672.8
+1880.24536 623.9
+1880.43005 1074.1
+1907.24207 7081.3
+1959.23926 610.3
+S	4509	4509	499.156407933
+Z	3	1494.194
+Z	2	996.465
+128.43529 539.1
+140.41028 587.5
+146.91034 737.7
+156.53897 586.7
+161.45164 497.5
+174.62141 528.7
+188.25670 719.8
+188.26938 1050.9
+188.28348 1213.9
+188.29140 1219.9
+188.30885 951.2
+188.32143 640.9
+188.34248 661.8
+199.00558 831.5
+199.29616 718.8
+199.30855 714.2
+199.37363 1086.8
+199.38364 1742.4
+199.39421 2929.4
+211.51279 563.6
+231.42061 749.8
+287.29263 619.4
+296.43234 587.0
+308.87518 665.9
+342.24615 906.7
+350.32504 659.8
+392.99002 565.7
+422.20709 606.7
+460.01205 665.5
+480.72601 1839.1
+482.62302 714.8
+491.76581 583.4
+498.73132 835.2
+532.57281 2065.0
+549.10986 662.8
+570.19183 580.3
+583.18958 614.6
+667.24042 615.9
+676.68140 888.4
+723.73419 624.1
+873.06781 587.8
+950.16766 836.1
+1021.07098 638.2
+1057.33215 677.6
+1188.27869 801.1
+1198.28577 3364.4
+1199.42517 609.1
+1475.58252 668.1
+1525.30713 1067.2
+1540.95447 640.5
+1618.02966 547.1
+1855.39734 557.1
+1860.17676 677.6
+1878.01611 543.7
+1878.10718 568.0
+1878.88098 1057.1
+1879.19250 1783.3
+1879.66541 19241.0
+1880.18384 1751.1
+1880.54993 1454.7
+1880.82410 1283.0
+1881.06433 727.8
+1885.55298 793.1
+1907.28491 7189.6
+1907.68201 874.3
+S	4511	4511	1880.18140793
+Z	3	5637.269
+Z	2	3758.515
+532.55103 1830.6
+549.12024 593.1
+558.19250 676.6
+630.37317 777.7
+676.70496 536.8
+898.42242 734.1
+949.41510 600.4
+1057.26392 852.6
+1136.42407 720.8
+1177.28149 752.1
+1198.23877 3629.1
+1231.07080 619.4
+1235.52771 646.1
+1306.30505 702.7
+1525.36047 729.5
+1715.53992 754.7
+1777.46729 640.6
+1876.76416 760.3
+1878.66479 1125.5
+1878.89856 575.1
+1879.64453 17966.3
+1879.95239 3182.7
+1880.24036 1951.4
+1880.57898 1053.0
+1907.20593 7095.7
+1930.46973 1139.7
+1973.38464 623.5
+S	4512	4512	1907.66699127
+Z	3	5719.726
+Z	2	3813.486
+532.59766 1799.8
+597.21521 599.6
+676.65094 1038.7
+693.09753 706.9
+765.88824 645.0
+777.19092 548.3
+793.09485 647.5
+796.01807 1073.9
+1057.27966 846.5
+1094.05981 636.3
+1198.33618 3338.6
+1389.60815 593.7
+1490.45215 666.7
+1525.31445 761.8
+1727.89282 726.1
+1876.67859 743.4
+1878.75806 791.8
+1879.06421 1236.2
+1879.57983 19592.7
+1879.85437 2284.9
+1880.07471 1660.0
+1907.11865 6948.6
+1930.46326 1200.1
+S	4514	4514	1880.0648246
+Z	3	5636.919
+Z	2	3758.282
+514.16736 625.6
+516.25952 639.2
+532.32843 604.2
+532.59076 1308.1
+545.33789 563.2
+549.09363 791.1
+595.26801 606.9
+676.69141 1170.2
+694.38763 707.3
+796.01953 727.2
+857.95471 879.5
+1179.11597 583.4
+1198.19409 907.6
+1198.32227 3037.5
+1317.85120 729.6
+1689.42810 613.8
+1777.46643 717.6
+1786.78101 640.9
+1877.91785 713.5
+1878.70105 896.5
+1879.38208 2245.2
+1879.66040 19562.7
+1880.54578 730.4
+1880.74622 935.8
+1881.59900 771.2
+1906.85315 934.1
+1907.26709 7045.8
+S	4515	4515	1907.57940793
+Z	2	3813.311
+Z	3	5719.463
+532.53491 1609.7
+590.12158 759.0
+630.35052 923.7
+676.69116 798.4
+686.62982 744.4
+704.68433 644.0
+796.02258 1051.7
+817.20129 617.6
+826.99890 604.7
+881.58295 628.6
+1057.33167 885.1
+1117.25134 672.5
+1166.21448 655.1
+1198.19116 2808.0
+1260.41223 547.0
+1460.91565 683.5
+1525.24939 912.4
+1715.54248 779.2
+1773.84607 743.8
+1777.46082 812.5
+1878.36633 1184.8
+1879.17261 3048.9
+1879.67676 19026.1
+1879.96594 3081.1
+1880.18872 2515.0
+1880.47717 972.4
+1907.27429 7342.6
+1919.18250 674.1
+1930.46179 819.1
+1930.65955 593.2
+S	4517	4517	1880.1025746
+Z	3	5637.033
+Z	2	3758.357
+532.57922 1993.4
+574.02576 601.6
+630.38849 621.6
+653.14612 595.6
+676.66400 893.8
+731.09509 650.0
+746.30859 599.2
+763.08081 592.0
+796.01221 1047.9
+1000.36670 595.0
+1011.30060 669.3
+1175.20764 663.0
+1198.29529 3143.7
+1207.03223 625.9
+1525.35071 1031.9
+1661.41907 654.7
+1693.76416 644.4
+1877.09558 769.2
+1877.80615 710.9
+1878.44763 1417.7
+1878.73279 886.4
+1879.60669 18965.0
+1880.08459 1330.1
+1880.69409 1634.6
+1907.18835 7378.6
+1907.48950 1026.5
+1930.52576 834.1
+1946.38757 648.3
+S	4518	4518	445.539241267
+Z	3	1333.342
+Z	2	889.231
+121.76090 591.4
+121.76672 2412.4
+122.08501 674.1
+133.14410 909.1
+140.89192 547.6
+150.21315 544.5
+151.38551 569.6
+153.77045 497.4
+153.77391 478.4
+171.65094 623.5
+182.77971 810.4
+199.00793 1092.1
+199.30231 914.4
+199.31429 809.5
+199.36748 899.6
+199.37801 839.1
+199.38788 2378.7
+199.40060 1925.9
+199.41182 890.2
+199.45374 581.0
+199.48666 784.8
+209.34904 575.2
+214.51149 612.7
+271.14587 581.1
+333.02618 587.2
+341.01660 2026.5
+353.29294 702.5
+381.34875 775.5
+391.87787 630.4
+429.08719 7592.6
+430.08609 1742.9
+469.91736 575.1
+532.57208 2428.7
+534.52069 625.7
+573.64880 578.9
+590.45221 633.1
+676.68420 1065.6
+716.32770 524.5
+721.82446 580.1
+746.24316 559.2
+793.83356 705.0
+853.53149 591.7
+903.92535 563.1
+1057.33691 807.3
+1198.28186 3361.8
+S	4519	4519	1907.59740793
+Z	3	5719.517
+Z	2	3813.347
+528.25916 582.1
+532.55420 1665.9
+573.10364 610.6
+579.56793 665.4
+618.02740 699.7
+630.44434 748.1
+648.34863 602.1
+676.67737 704.5
+712.89325 660.3
+777.84790 634.5
+1057.30017 879.9
+1109.41577 591.5
+1198.23413 2773.5
+1198.36572 989.1
+1355.77515 575.9
+1380.79810 642.4
+1525.48767 746.2
+1834.97803 690.1
+1878.24829 817.6
+1879.00500 1946.3
+1879.64246 19460.9
+1880.28076 1594.3
+1881.03491 1004.4
+1881.36853 753.2
+1881.89746 600.1
+1907.19446 7444.4
+1907.56580 867.5
+1999.28455 657.6
+S	4523	4523	1880.1138246
+Z	2	3758.38
+Z	3	5637.066
+532.55176 2020.6
+535.42316 619.1
+555.37122 633.1
+589.21692 626.3
+631.25543 592.4
+675.72705 680.7
+777.53131 597.1
+796.00183 1116.5
+796.77094 713.5
+875.07672 567.4
+933.08325 517.6
+935.08502 692.8
+1057.33411 699.1
+1186.25671 692.9
+1198.23474 2989.5
+1715.49219 693.5
+1777.40771 1081.5
+1878.12549 921.0
+1878.86047 1377.6
+1879.38770 2860.3
+1879.67993 19328.8
+1880.19592 1008.6
+1881.49695 709.3
+1907.12219 7013.4
+1919.24719 681.3
+S	4524	4524	1907.59340793
+Z	3	5719.505
+Z	2	3813.339
+529.16998 608.5
+532.60095 1421.1
+593.24841 543.5
+609.87561 610.3
+676.70209 959.2
+768.98608 553.8
+795.99707 934.6
+899.28064 674.7
+1034.34338 599.8
+1042.12854 670.9
+1057.33667 836.9
+1079.54236 692.7
+1149.08594 735.9
+1198.34595 3194.9
+1234.24451 733.1
+1365.91663 585.1
+1692.71643 620.5
+1722.22485 637.2
+1851.45337 690.0
+1878.17712 1096.7
+1878.79675 2079.7
+1879.03589 1012.2
+1879.42749 4215.8
+1879.70447 19078.6
+1880.57019 1864.9
+1880.92004 1401.8
+1881.38867 783.3
+1907.11169 6891.0
+1930.66455 753.2
+1948.93274 637.5
+1961.06982 542.5
+S	4526	4526	1880.02724127
+Z	2	3758.207
+Z	3	5636.806
+505.91095 588.0
+532.60504 1668.3
+544.03491 564.8
+630.46844 788.2
+676.68091 1071.4
+717.10638 648.8
+787.67133 651.9
+796.01556 911.7
+907.84534 583.3
+1002.28162 688.2
+1019.71362 778.6
+1069.68237 611.5
+1083.73547 624.4
+1198.35388 3011.3
+1488.85693 647.9
+1525.55383 922.4
+1564.02051 649.9
+1777.51196 669.2
+1877.19971 1077.6
+1878.73828 961.8
+1879.18115 1924.7
+1879.64441 18975.5
+1880.20129 1292.3
+1907.12402 6862.1
+1907.41528 1776.5
+S	4528	4528	499.157407933
+Z	3	1494.197
+Z	2	996.467
+127.30023 540.9
+128.54230 603.6
+128.59221 797.7
+133.95854 524.1
+134.33163 566.3
+134.99072 551.7
+135.16380 534.0
+137.30922 767.8
+140.65318 568.4
+157.62434 694.8
+171.64992 611.2
+175.91835 608.3
+176.84932 594.2
+181.54826 641.2
+188.22240 655.7
+188.25826 731.9
+188.27626 1052.8
+188.28461 1162.2
+188.29643 1115.0
+188.30484 1040.2
+188.31363 1051.2
+190.94492 499.2
+199.00798 767.5
+199.29468 537.4
+199.29691 526.0
+199.33601 582.8
+199.37013 1166.9
+199.39015 1097.6
+199.39746 1995.4
+199.40643 2237.4
+199.43407 816.8
+199.49530 693.3
+199.50337 703.1
+210.16200 606.0
+244.74481 657.3
+260.26709 601.2
+271.41049 757.3
+294.09003 576.6
+295.80765 673.6
+346.41315 583.2
+369.19983 530.5
+371.82697 520.2
+395.22479 652.0
+421.45349 602.2
+427.60089 876.7
+437.04620 544.5
+471.71039 607.1
+480.72580 1910.1
+482.50369 662.4
+482.71887 726.1
+498.73657 1132.9
+517.21948 616.3
+532.56775 1603.1
+549.22803 857.0
+562.65741 687.5
+595.94147 616.7
+630.48438 847.7
+676.67950 1152.4
+731.22028 797.7
+796.02289 1039.6
+808.81281 547.5
+928.97357 547.4
+985.62701 583.8
+1074.19995 609.2
+1187.96704 885.3
+1198.26770 3241.9
+1306.76965 659.9
+1357.88696 763.0
+1360.33899 621.8
+1363.06018 717.7
+1442.64673 627.4
+1521.05261 716.4
+1525.63330 944.0
+1595.71655 614.4
+1598.30737 608.2
+1600.71741 723.5
+1715.75098 805.2
+1877.12610 934.8
+1878.94250 1219.2
+1879.25171 2000.4
+1879.63184 18722.0
+1881.68921 699.6
+1907.17957 7502.6
+1930.85864 1068.8
+1958.05603 629.4
+1988.86426 592.1
+S	4530	4530	1880.05740793
+Z	3	5636.897
+Z	2	3758.267
+532.59332 1894.2
+609.18268 744.7
+657.78510 657.5
+676.70892 742.9
+731.19781 724.8
+796.02661 767.4
+864.92358 672.8
+1082.48022 586.8
+1198.32703 3897.0
+1218.72180 703.0
+1221.92676 741.0
+1271.05664 598.0
+1648.58569 651.5
+1771.25830 604.0
+1777.61829 724.1
+1878.41187 732.9
+1878.81458 1699.0
+1879.33618 2849.6
+1879.69446 18927.1
+1880.05017 1800.5
+1880.35498 700.1
+1880.60986 1375.7
+1880.92578 1769.5
+1907.23511 7559.2
+1930.77942 1014.8
+S	4531	4531	499.1578246
+Z	2	996.468
+Z	3	1494.198
+129.67982 625.5
+144.13026 562.8
+144.45235 541.1
+146.34303 623.4
+146.73038 572.2
+149.87292 580.4
+157.61168 645.5
+159.09709 550.6
+165.68481 509.2
+169.30788 737.6
+170.67891 656.7
+171.52202 566.9
+180.44943 590.4
+188.14261 709.5
+188.18509 683.5
+188.24615 947.9
+188.26024 1577.5
+188.27539 2103.9
+188.29379 2131.7
+188.30466 1855.9
+188.32433 1107.5
+199.28587 683.5
+199.29468 720.7
+199.35471 672.9
+199.37825 1891.0
+199.40347 1315.2
+199.41997 1605.2
+199.48570 988.2
+199.51834 783.0
+255.30403 838.9
+271.40698 701.6
+298.09030 500.4
+298.09940 474.2
+299.56375 900.0
+308.91608 1119.5
+324.46640 582.1
+334.25012 574.0
+337.82458 670.5
+367.14258 618.3
+392.91333 552.4
+482.68359 985.2
+483.37677 590.8
+486.73248 578.4
+514.46698 581.4
+527.33453 594.4
+529.57764 627.4
+532.55432 1971.4
+561.24866 668.3
+577.25323 576.5
+630.44153 892.1
+670.38092 586.7
+676.67645 1175.5
+764.67377 585.7
+796.01794 980.8
+922.29547 582.6
+1005.48627 532.6
+1005.76788 591.7
+1170.95532 540.4
+1198.24158 2886.2
+1429.67126 587.7
+1525.45337 785.9
+1758.55957 794.0
+1777.68555 813.1
+1846.18970 606.5
+1860.09351 585.2
+1874.40381 715.2
+1877.79956 832.3
+1878.34241 693.6
+1878.87354 1116.3
+1879.16675 1514.2
+1879.64282 20229.3
+1880.11694 1359.1
+1880.37341 805.7
+1881.38647 763.9
+1907.15662 7213.5
+1907.44104 1849.2
+1930.70874 1353.9
+S	4532	4532	643.0758246
+Z	1	642.068
+165.73819 687.9
+165.81531 588.0
+169.15422 749.9
+173.67404 563.2
+177.06598 541.0
+188.26015 698.3
+188.27100 837.7
+188.28310 1002.9
+188.29498 1118.2
+188.30556 1311.4
+188.31673 591.9
+192.44170 590.5
+199.00446 780.0
+199.29886 720.0
+199.32396 764.8
+199.37723 801.8
+199.38319 964.6
+199.39754 2392.8
+199.41296 874.7
+199.49461 881.2
+200.98181 645.4
+205.51987 609.2
+215.17950 611.7
+219.88054 554.8
+274.93979 560.2
+279.06000 605.2
+313.07578 625.8
+346.16522 648.1
+366.07755 528.1
+381.40030 1050.3
+393.10928 653.3
+394.03702 688.6
+445.08545 668.7
+454.51169 538.6
+462.16577 664.0
+479.64993 666.7
+479.80905 762.8
+484.58813 716.1
+500.44730 534.7
+517.15033 630.3
+531.97961 681.9
+532.53241 2100.8
+559.85406 615.2
+596.26331 671.9
+606.71088 608.2
+607.92157 571.4
+627.03070 673.9
+630.47748 740.9
+651.04407 584.8
+662.80579 590.9
+662.99207 548.7
+676.68628 884.3
+752.93695 672.5
+758.31372 722.5
+771.28107 654.6
+778.23730 599.0
+779.01050 577.0
+796.00977 787.0
+867.01770 677.0
+1021.24408 654.3
+1079.59949 628.2
+1093.53772 585.7
+1198.17896 3615.0
+1224.39844 668.1
+1324.08667 663.0
+1715.64673 855.5
+1715.88147 678.9
+1734.94055 603.0
+1878.62500 903.6
+1878.88770 1497.2
+1879.28931 1631.7
+1879.66907 19313.7
+1880.42090 1490.3
+1880.55542 1313.0
+1881.25500 741.0
+1907.22375 7283.4
+1930.79810 1058.2
+S	4534	4534	1880.08040793
+Z	2	3758.313
+Z	3	5636.966
+522.33057 636.7
+532.54004 1982.6
+598.56519 681.4
+676.67273 929.8
+698.50647 530.5
+724.14703 853.0
+731.13916 706.9
+738.40607 739.0
+750.56567 540.8
+913.95435 682.1
+1021.17346 720.7
+1198.20715 3317.4
+1271.33691 635.3
+1276.68286 660.1
+1312.97864 666.2
+1402.17456 734.2
+1446.69519 631.1
+1452.42126 724.6
+1469.63611 637.0
+1614.59668 699.7
+1807.86841 581.3
+1830.81055 781.0
+1879.18420 1009.5
+1879.62085 19638.8
+1879.97290 1338.9
+1907.10095 7072.7
+1907.82788 691.9
+1930.64417 1176.4
+1994.54626 653.6
+S	4535	4535	1907.63340793
+Z	3	5719.625
+Z	2	3813.419
+518.29651 652.2
+532.53314 1604.1
+549.14026 796.7
+604.43872 608.8
+630.38861 993.1
+676.68744 983.2
+731.10809 757.0
+796.02209 666.8
+810.37885 562.4
+836.56305 591.0
+840.76086 620.6
+866.21777 661.5
+866.74048 678.5
+1004.42548 587.8
+1057.35413 799.6
+1188.23608 969.9
+1198.19641 3163.2
+1388.87524 745.2
+1497.63062 745.0
+1572.09546 702.6
+1714.96033 613.1
+1876.85486 672.6
+1878.17456 785.9
+1879.02490 2339.2
+1879.69653 18720.5
+1879.96667 2048.3
+1880.23206 1990.2
+1907.19446 7362.0
+1930.55847 1141.5
+S	4536	4536	419.191241267
+Z	2	836.535
+Z	3	1254.298
+105.62395 587.1
+121.76468 2397.0
+121.77043 1308.2
+142.59950 540.5
+157.61162 503.0
+176.22054 557.4
+196.05707 556.1
+199.00487 1156.1
+199.13948 610.0
+199.33362 572.3
+199.37502 1602.9
+199.38614 1238.7
+199.39383 2674.6
+199.40852 1218.5
+199.49187 973.0
+213.29639 588.4
+214.22098 629.6
+232.99474 614.2
+252.00169 617.1
+271.79630 584.2
+274.76981 618.6
+305.76077 510.8
+331.66623 551.0
+342.30264 867.9
+350.30942 625.0
+354.12827 570.5
+400.76044 1297.2
+418.76923 944.5
+463.01163 667.9
+476.81277 911.1
+499.94974 601.3
+513.14087 535.0
+515.93005 802.2
+532.53815 2371.9
+562.09076 539.7
+578.80237 603.3
+578.83148 626.7
+592.30988 576.1
+630.46942 735.7
+667.44116 550.9
+714.15894 594.6
+777.27161 603.4
+789.69678 563.3
+796.00726 743.9
+1017.56024 507.9
+1033.28491 642.1
+1188.26123 1165.2
+1198.20825 3177.1
+1207.82068 594.0
+1401.74731 650.2
+1425.17139 619.1
+1460.19873 645.3
+1525.54431 745.5
+1535.27307 637.2
+S	4538	4538	1880.1148246
+Z	3	5637.069
+Z	2	3758.382
+532.50610 769.2
+532.54773 1563.3
+572.48193 564.0
+576.80066 619.4
+579.48352 616.9
+607.75262 582.6
+613.17786 532.2
+615.56104 583.9
+615.70001 621.2
+626.54999 563.7
+630.42981 691.3
+676.67725 1455.8
+769.31042 649.3
+813.79022 713.7
+815.28119 574.3
+1000.39758 558.8
+1020.86169 642.6
+1025.38586 637.7
+1026.92993 1020.9
+1029.15857 577.6
+1042.91309 630.5
+1057.29541 922.2
+1198.18774 2586.5
+1305.24890 609.7
+1457.71118 549.8
+1492.69617 608.3
+1556.84277 567.2
+1608.10278 693.8
+1667.54089 691.3
+1715.35413 938.4
+1719.02979 706.9
+1777.32410 755.5
+1853.77698 611.4
+1875.99390 823.2
+1879.34290 1228.7
+1879.63330 19681.1
+1880.40210 692.2
+1881.29431 884.6
+1906.84570 1809.0
+1907.14709 6497.4
+1909.58240 630.0
+1919.17590 640.2
+1930.70874 992.1
+S	4539	4539	1907.59940793
+Z	2	3813.351
+Z	3	5719.523
+532.53821 1967.5
+543.56439 668.9
+605.19421 665.3
+630.43262 828.0
+708.68304 695.9
+796.00586 877.9
+826.32983 571.4
+855.73651 666.4
+1039.12207 671.0
+1123.87891 687.9
+1198.20642 2969.8
+1412.36255 695.1
+1525.50256 791.5
+1863.34888 747.0
+1875.07019 772.4
+1878.30762 967.2
+1878.47241 929.0
+1879.04724 1833.0
+1879.46655 3719.6
+1879.72949 19338.5
+1880.06445 2281.8
+1880.52527 1660.0
+1880.95630 927.6
+1881.23071 750.9
+1882.05762 832.9
+1906.87903 1022.7
+1907.11707 7433.7
+1919.20935 861.7
+S	4541	4541	1907.5938246
+Z	3	5719.506
+Z	2	3813.34
+532.54114 1404.8
+533.72314 693.5
+578.60962 599.7
+676.62518 1357.8
+731.18317 756.7
+748.21228 696.2
+1057.22437 984.2
+1155.99744 643.8
+1198.21753 3114.4
+1200.78735 556.2
+1299.23462 661.8
+1310.82825 654.3
+1385.69373 647.3
+1401.52893 664.6
+1413.93201 743.9
+1415.31104 559.5
+1717.07922 1281.6
+1871.48279 639.0
+1872.75476 671.5
+1879.49219 21099.2
+1907.23621 7428.8
+1907.75635 679.5
+1919.22681 1070.8
+1930.78113 1127.2
+1990.23218 712.2
+1991.38477 675.8
+S	4543	4543	1879.99024127
+Z	2	3758.133
+Z	3	5636.695
+522.81036 604.0
+532.54913 1687.9
+598.43359 551.3
+624.67480 593.4
+676.67487 720.0
+676.71765 909.4
+768.97003 669.1
+778.18213 585.6
+796.00977 976.7
+813.82916 816.9
+867.73572 662.5
+882.99524 596.3
+1014.11432 609.3
+1028.32227 599.3
+1032.03137 659.3
+1198.22156 3167.9
+1331.80615 757.6
+1340.70557 701.1
+1385.80652 661.8
+1417.07349 681.2
+1493.76941 587.9
+1562.35168 641.2
+1823.46436 674.8
+1878.92578 1114.3
+1879.19751 1243.3
+1879.73877 18583.2
+1880.27356 1363.6
+1881.45886 679.5
+1907.21106 7216.9
+1919.29321 841.4
+1930.82556 855.8
+1997.29602 737.7
+S	4544	4544	1907.63640793
+Z	2	3813.425
+Z	3	5719.634
+532.54370 1824.4
+630.75952 691.5
+676.73474 776.6
+727.49902 654.1
+757.47809 748.7
+776.41553 679.0
+796.00818 878.8
+947.07281 636.1
+1057.38489 763.8
+1198.21631 3505.1
+1239.11743 680.4
+1406.81177 772.6
+1719.38635 1208.0
+1752.41858 781.3
+1878.14282 980.7
+1878.49011 664.5
+1879.07361 2842.7
+1879.47583 4486.0
+1879.77185 18679.5
+1880.46875 1598.1
+1881.25244 784.1
+1881.78870 874.9
+1906.97314 1943.1
+1907.26245 6861.3
+1919.24707 874.0
+1930.66138 965.9
+S	4546	4546	1880.18199127
+Z	3	5637.271
+Z	2	3758.516
+532.52148 1673.5
+549.19556 1158.7
+622.18744 611.3
+676.68481 778.8
+775.07721 588.7
+796.02191 1032.0
+882.75183 609.9
+886.84698 695.1
+966.29956 581.9
+1137.65991 574.9
+1188.05420 802.9
+1198.16284 3170.5
+1331.90332 561.1
+1344.45032 722.5
+1363.66150 659.9
+1455.56799 607.8
+1488.37915 696.3
+1490.29480 974.6
+1525.53943 838.9
+1532.90979 614.0
+1601.58972 578.0
+1878.13000 654.3
+1878.49316 657.5
+1879.64758 19128.4
+1879.92261 3876.8
+1881.13586 654.4
+1881.46082 719.6
+1907.18420 7763.7
+1930.74426 831.4
+S	4547	4547	1907.6048246
+Z	3	5719.539
+Z	2	3813.362
+532.51831 2108.0
+543.91650 626.6
+560.86682 622.2
+676.70856 982.3
+841.54218 558.4
+846.42938 577.8
+852.24585 639.4
+909.51514 783.3
+1019.65601 880.7
+1057.35901 1089.1
+1188.10059 751.5
+1198.15381 3372.1
+1269.79529 653.4
+1435.08472 784.5
+1447.08533 637.3
+1628.20239 656.3
+1716.60876 1623.4
+1872.35278 618.5
+1878.00464 672.9
+1878.35364 1047.5
+1879.72034 19360.5
+1879.98425 3384.9
+1880.50134 716.9
+1881.22119 1262.9
+1907.17126 7229.7
+1919.30127 1064.0
+1930.61548 1129.8
+S	4549	4549	1880.18540793
+Z	2	3758.523
+Z	3	5637.281
+532.47931 1955.1
+676.66803 891.1
+796.01892 1086.7
+1038.95435 631.6
+1057.28210 842.4
+1057.48486 686.1
+1091.83179 769.3
+1131.80469 556.8
+1144.15308 682.8
+1197.21509 594.4
+1198.06482 3366.8
+1292.15308 650.5
+1353.53223 666.5
+1448.00989 671.9
+1860.27563 755.2
+1878.65784 696.7
+1879.20593 898.6
+1879.60950 19806.2
+1880.12183 980.6
+1880.33850 725.0
+1880.71655 794.2
+1882.81885 882.9
+1907.14392 7819.3
+1930.68115 992.0
+1932.55688 839.8
+S	4550	4550	445.5395746
+Z	2	889.231
+Z	3	1333.344
+113.46326 639.9
+114.37849 546.1
+115.06226 526.3
+117.87691 566.4
+120.66548 767.5
+121.76558 2690.5
+123.80310 511.6
+126.69013 584.2
+128.36263 569.6
+128.57637 675.7
+135.30737 558.9
+137.64040 515.1
+137.64380 482.3
+141.26524 559.0
+144.14476 490.8
+146.92262 635.9
+147.20294 740.0
+147.67278 577.8
+157.60414 741.3
+167.37547 558.1
+173.58095 538.9
+189.92674 533.9
+194.83290 643.6
+198.91791 548.0
+198.99942 499.8
+199.00719 942.8
+199.28537 694.1
+199.30356 925.4
+199.31483 732.3
+199.37453 1059.6
+199.38376 2368.9
+199.39938 2174.3
+199.48120 1058.6
+199.49808 724.6
+220.33968 553.0
+224.11292 592.2
+233.20903 583.3
+240.36194 568.6
+256.99069 680.7
+265.55380 799.0
+269.22131 510.5
+280.18658 579.1
+315.17123 591.8
+324.19913 550.8
+332.69968 598.8
+341.01724 1868.2
+381.36288 939.3
+398.11133 496.7
+429.08771 5573.5
+430.08911 1662.9
+456.12698 545.5
+476.80014 920.3
+490.35529 608.9
+532.50250 1687.7
+542.64111 625.3
+549.16010 942.3
+630.40503 804.7
+658.73517 614.4
+676.72144 1049.5
+796.01361 975.8
+987.85046 579.0
+1003.01105 733.9
+1041.47620 600.8
+1113.05005 541.0
+1172.44519 622.4
+1198.12170 3209.8
+1225.71472 612.4
+1290.79053 722.0
+1306.24451 568.2
+1385.94141 689.9
+1525.41870 811.5
+1641.03259 572.9
+1665.51892 556.6
+1715.52075 696.0
+1742.54370 600.7
+1777.47119 857.2
+S	4551	4551	1907.61640793
+Z	3	5719.574
+Z	2	3813.385
+532.51483 2130.3
+572.94360 681.7
+578.26056 788.4
+589.71478 623.1
+630.40210 894.2
+668.22473 604.3
+731.16125 751.0
+743.83087 583.0
+759.10706 668.7
+796.01874 652.9
+862.20422 637.7
+978.64819 628.2
+979.42126 699.1
+1047.30676 561.0
+1153.95874 727.0
+1198.15515 3166.4
+1325.67419 645.0
+1332.47729 790.0
+1352.33740 723.0
+1547.42688 709.7
+1789.24792 734.6
+1795.54639 633.8
+1875.65881 621.3
+1876.59766 729.0
+1878.46631 796.7
+1878.75708 1160.5
+1879.16321 1161.7
+1879.60876 19628.5
+1880.12549 1008.0
+1880.79883 745.3
+1907.17957 7415.0
+1930.54077 1130.4
+S	4553	4553	1880.09599127
+Z	2	3758.344
+Z	3	5637.013
+524.24072 595.0
+532.54871 1996.6
+549.13165 617.1
+609.37701 604.9
+666.18933 590.9
+676.66479 1081.8
+731.08197 629.5
+749.95581 654.3
+844.42664 638.9
+949.28009 753.4
+959.37799 671.3
+1057.29346 967.8
+1061.28296 605.9
+1188.33691 852.4
+1198.22681 3297.6
+1254.82617 633.4
+1300.30566 691.4
+1495.98621 684.6
+1525.37708 1062.2
+1625.96838 596.8
+1702.63367 718.0
+1777.61841 656.7
+1812.78809 684.7
+1877.54150 803.3
+1878.68921 863.1
+1879.04529 1060.7
+1879.60779 19939.7
+1880.15112 1183.4
+1881.05237 901.3
+1881.80005 613.1
+1882.15002 771.4
+1906.48596 563.8
+1907.13000 7355.3
+S	4554	4554	1907.5778246
+Z	2	3813.308
+Z	3	5719.458
+521.39886 671.4
+532.52020 1917.8
+549.18512 790.7
+587.86462 615.2
+619.01306 634.3
+630.44537 783.4
+650.40131 627.2
+676.65448 1283.4
+796.00000 774.1
+890.13086 636.2
+916.36938 647.7
+999.31226 807.8
+1019.65582 830.2
+1057.26685 869.6
+1086.68579 610.8
+1100.54077 743.3
+1165.55078 695.9
+1188.27185 771.3
+1198.16382 3772.2
+1232.09668 589.7
+1426.38220 662.8
+1438.43408 590.4
+1692.08533 558.0
+1715.70374 645.3
+1751.52979 560.3
+1879.56750 20028.0
+1907.09521 7216.4
+S	4556	4556	1880.08840793
+Z	2	3758.329
+Z	3	5636.99
+532.53271 1921.4
+577.68030 614.9
+630.38745 678.2
+676.70428 792.2
+683.98224 673.4
+696.69495 751.9
+797.14233 556.5
+798.47229 600.3
+900.65564 606.9
+1049.86975 611.9
+1054.40918 666.2
+1057.34729 668.5
+1171.60742 735.9
+1198.19128 3235.0
+1340.83838 634.3
+1715.66553 810.9
+1849.31799 722.4
+1878.00439 903.4
+1879.13794 870.1
+1879.70862 17775.0
+1880.82690 867.3
+1907.05725 7537.7
+1984.72510 752.8
+S	4557	4557	1907.52540793
+Z	2	3813.203
+Z	3	5719.301
+532.53400 2170.6
+549.15039 845.6
+584.13434 738.5
+630.40515 702.7
+651.98920 677.3
+676.70001 817.6
+677.15259 608.1
+681.00366 684.7
+704.96497 604.0
+731.11835 585.1
+796.02002 943.9
+821.37134 514.6
+821.40747 514.1
+1057.29321 623.0
+1198.18982 3301.7
+1286.15247 627.0
+1391.56177 625.6
+1711.84937 680.2
+1755.95459 696.8
+1826.71497 660.9
+1878.98669 814.8
+1879.69067 18256.1
+1880.25391 1165.0
+1880.68872 975.6
+1881.26807 751.8
+1881.63196 698.5
+1907.14270 7480.9
+1919.22607 763.3
+1930.57422 1073.3
+1969.70496 642.1
+1972.59314 644.1
+1995.01672 692.4
+S	4559	4559	1880.0715746
+Z	2	3758.295
+Z	3	5636.94
+532.48175 2071.8
+549.19257 973.7
+553.25562 562.4
+592.88995 574.0
+606.48492 728.0
+623.25769 605.9
+630.45081 595.4
+676.68506 896.4
+718.31683 560.9
+723.35974 599.7
+731.18231 783.4
+842.95453 565.2
+1011.36121 611.7
+1140.21289 699.4
+1162.97278 657.6
+1198.06860 3850.2
+1407.88794 785.8
+1519.28638 520.9
+1525.53735 926.4
+1549.25488 563.9
+1817.66101 715.1
+1877.81799 858.3
+1877.98047 745.9
+1878.87341 937.2
+1879.02686 1002.7
+1879.42200 4787.1
+1879.65552 18706.4
+1880.22461 2143.2
+1881.01477 1356.0
+1881.46326 786.2
+1907.20715 7628.9
+1908.37476 657.4
+1930.72009 1094.3
+S	4560	4560	1907.54299127
+Z	3	5719.354
+Z	2	3813.238
+532.48328 1948.1
+549.18207 851.1
+572.13971 621.5
+676.67413 761.3
+695.15674 589.1
+778.12689 581.3
+796.01434 1028.4
+816.86542 660.4
+1020.75421 584.3
+1198.08240 3214.0
+1269.04700 618.7
+1368.70557 722.8
+1380.31543 703.9
+1877.33691 644.2
+1878.56433 994.7
+1879.03918 787.3
+1879.63550 19872.0
+1879.93982 2286.0
+1880.24756 1308.2
+1880.57581 1052.0
+1881.01062 755.4
+1907.19604 7748.3
+1930.66418 1008.5
+S	4562	4562	1880.7278246
+Z	1	1879.72
+527.06427 672.0
+532.48035 1985.4
+630.37317 1168.3
+676.67627 993.0
+708.23273 583.0
+1057.08057 652.7
+1085.41101 875.0
+1198.07361 3310.9
+1417.29504 668.6
+1450.56311 680.3
+1525.33374 852.8
+1878.38306 771.1
+1879.12488 1119.1
+1879.32324 1126.0
+1879.65161 20043.5
+1879.96838 1264.6
+1880.93823 710.5
+1906.84912 803.1
+1907.17249 6960.6
+1930.47693 744.7
+S	4563	4563	1907.62799127
+Z	2	3813.408
+Z	3	5719.609
+532.50708 1535.0
+540.78900 624.6
+601.07788 652.7
+625.63873 641.0
+628.55011 624.5
+631.49945 616.9
+656.20929 597.7
+676.65570 834.8
+762.93585 632.1
+796.01617 791.2
+800.95422 614.3
+992.78735 584.5
+1068.62146 598.7
+1122.09741 769.3
+1132.37561 614.4
+1196.43225 649.4
+1198.13306 3138.7
+1268.11084 571.0
+1277.72815 613.1
+1566.78308 595.0
+1697.43909 675.1
+1715.48425 653.2
+1752.88074 624.9
+1777.33643 877.0
+1878.44958 816.1
+1878.78137 803.5
+1879.20251 1840.5
+1879.58643 19684.6
+1879.97339 1574.1
+1880.40454 1046.4
+1880.74316 699.9
+1906.89807 914.2
+1907.19751 7318.7
+1907.70129 1083.3
+1930.52686 1128.0
+1976.18958 696.5
+S	4565	4565	1880.1258246
+Z	3	5637.102
+Z	2	3758.404
+532.42273 1349.8
+617.34473 677.8
+619.47827 583.6
+676.69116 759.3
+796.03278 726.2
+1124.88135 663.2
+1197.94287 2837.5
+1436.39819 866.1
+1500.27686 723.0
+1525.23975 1178.9
+1667.33228 735.4
+1878.07739 645.1
+1878.84497 766.5
+1879.17712 950.1
+1879.66870 20081.8
+1880.15967 869.2
+1906.79211 982.9
+1907.11536 7227.6
+1907.48242 1035.3
+1930.37244 958.8
+1951.14160 612.8
+S	4566	4566	1907.6738246
+Z	3	5719.746
+Z	2	3813.5
+525.61072 647.4
+532.38257 1698.5
+532.41077 1200.6
+574.08667 779.1
+632.98364 749.9
+646.24438 664.7
+676.67334 1044.2
+679.10065 584.8
+715.03699 607.3
+750.88660 602.7
+757.31287 654.9
+796.02008 820.5
+805.74420 649.0
+933.82281 564.9
+950.73163 592.8
+1020.81458 709.3
+1021.19293 700.1
+1053.59680 720.2
+1101.54211 789.5
+1197.84692 3311.6
+1472.04810 829.1
+1525.49133 1090.9
+1707.57751 614.5
+1777.63586 728.2
+1819.25891 732.8
+1877.33154 748.7
+1879.62415 19626.7
+1879.91870 1421.0
+1880.00476 820.1
+1880.54565 1014.5
+1907.04688 7841.0
+S	4568	4568	1880.03199127
+Z	3	5636.821
+Z	2	3758.216
+530.55475 745.1
+532.53229 1625.9
+549.15485 753.2
+572.52026 609.4
+578.73315 673.1
+655.28534 713.7
+676.14447 534.1
+676.67444 1174.0
+774.11725 705.9
+808.38544 703.7
+837.38684 622.5
+950.71863 602.4
+1015.33575 652.2
+1063.41809 667.7
+1117.22815 700.5
+1198.18811 3132.5
+1250.23279 657.6
+1304.22498 543.7
+1532.24011 727.9
+1642.61780 560.4
+1715.60596 1015.0
+1751.52075 762.6
+1777.57056 695.8
+1804.71814 677.7
+1878.05933 701.7
+1878.40466 881.8
+1879.32654 2540.3
+1879.63721 19673.8
+1880.00781 2427.9
+1880.91296 893.4
+1907.04980 7828.3
+1930.60205 806.0
+S	4569	4569	1907.49299127
+Z	3	5719.204
+Z	2	3813.138
+522.65021 680.9
+532.52539 2002.0
+598.31445 693.2
+731.12323 800.1
+744.39087 515.9
+746.41785 627.5
+796.02454 845.1
+797.66968 691.4
+820.05164 584.8
+878.77802 668.1
+907.28973 683.9
+914.76294 686.2
+977.40613 558.7
+989.06488 513.8
+1019.67639 768.1
+1143.64417 702.6
+1198.17786 2984.9
+1438.91345 732.9
+1757.64404 755.3
+1764.35425 641.2
+1765.89600 628.1
+1844.12354 610.4
+1878.92151 1525.6
+1879.33496 4172.5
+1879.65735 19301.6
+1879.96338 2939.2
+1880.38269 2135.7
+1880.93298 1065.4
+1881.26099 685.9
+1904.60681 767.0
+1907.09290 7419.0
+1930.61182 869.4
+S	4571	4571	1880.12640793
+Z	2	3758.405
+Z	3	5637.104
+532.53937 1684.3
+536.10999 693.1
+609.34552 605.0
+676.68243 1264.4
+742.10455 624.9
+835.81927 634.6
+858.05322 785.8
+947.47504 624.7
+1057.29651 992.2
+1140.23572 834.3
+1198.20105 3180.1
+1216.27356 726.8
+1406.35498 698.9
+1876.77637 627.0
+1877.86780 677.4
+1878.72632 2267.4
+1879.04065 1341.5
+1879.64722 18891.8
+1879.90955 2650.0
+1880.28845 1477.0
+1880.57458 2079.2
+1881.43408 800.4
+1907.05090 7244.3
+1930.60693 728.7
+S	4572	4572	1907.50624127
+Z	2	3813.165
+Z	3	5719.243
+532.52637 1936.8
+533.38287 625.8
+542.13019 680.2
+573.83636 612.8
+638.36963 658.1
+676.68903 845.5
+780.14526 612.2
+1057.31116 835.6
+1198.17664 3413.2
+1540.09607 769.4
+1667.31067 590.6
+1715.69470 994.3
+1777.63538 819.6
+1878.74377 1445.5
+1879.22986 3168.0
+1879.66846 19846.5
+1880.09631 2081.8
+1880.54871 1028.2
+1880.95947 870.7
+1907.15576 6527.6
+S	4573	4573	1198.6198246
+Z	2	2395.392
+Z	3	3592.584
+345.04007 554.7
+350.30585 760.3
+436.40073 556.2
+532.48737 1694.6
+538.43951 702.3
+592.23706 659.7
+610.37695 627.0
+676.67975 821.3
+879.13892 583.2
+951.16333 597.6
+1070.46948 637.0
+1198.08557 2951.6
+1265.31006 749.1
+1370.24280 566.6
+1449.69556 677.9
+1525.39221 737.1
+1733.75391 704.4
+1858.80408 721.7
+1878.25842 813.5
+1878.60864 723.3
+1878.95605 647.8
+1879.41272 3434.7
+1879.64990 18897.2
+1880.45044 920.7
+1881.00635 1028.9
+1882.10437 728.1
+1907.21021 7381.1
+1907.45691 869.8
+1930.59216 1049.2
+1939.59778 630.9
+S	4575	4575	1880.13524127
+Z	3	5637.13
+Z	2	3758.423
+508.42120 640.6
+511.65057 574.9
+515.46545 572.5
+517.72998 759.3
+532.50635 1474.2
+610.79779 685.7
+618.90063 558.8
+632.56104 523.1
+676.72253 1031.3
+779.28070 531.1
+796.02173 1174.9
+865.11377 734.3
+867.87067 604.0
+1019.70691 653.2
+1198.13733 3213.3
+1198.27454 853.2
+1222.08936 606.6
+1428.39490 647.9
+1450.79785 672.3
+1458.83093 634.5
+1777.56104 892.0
+1878.47900 1184.1
+1878.89063 2025.7
+1879.37134 2976.6
+1879.45422 2946.0
+1879.76904 18588.2
+1880.20972 2568.0
+1880.68701 2013.3
+1881.09619 1185.6
+1882.31677 710.7
+1906.86975 775.7
+1907.22327 7312.0
+1930.56604 899.5
+S	4576	4576	1907.63124127
+Z	2	3813.415
+Z	3	5719.618
+532.49023 1508.2
+598.70447 736.6
+676.66248 718.7
+685.12830 659.0
+849.31860 605.8
+1006.44965 614.2
+1057.28711 696.5
+1198.10034 3294.6
+1343.50964 696.7
+1348.84412 748.7
+1497.21741 658.9
+1701.90979 542.6
+1777.59497 743.2
+1814.39612 596.1
+1822.52185 609.0
+1855.10718 672.6
+1879.03967 1671.0
+1879.61194 19222.2
+1879.90430 2156.8
+1880.19482 2063.0
+1906.77710 1033.2
+1906.98560 1392.9
+1907.27930 7407.9
+1907.89441 831.3
+1930.54883 812.5
+1948.72827 635.5
+S	4578	4578	1880.13424127
+Z	3	5637.127
+Z	2	3758.421
+532.51599 1829.0
+630.44342 892.0
+708.20477 796.7
+714.25171 652.6
+731.17487 819.2
+796.03656 1294.8
+807.37573 660.2
+873.39697 633.2
+893.78589 588.2
+902.08630 600.0
+929.11359 569.0
+942.50287 559.6
+1188.16064 670.3
+1198.15613 3361.4
+1575.43726 682.5
+1849.66504 680.7
+1873.87268 684.0
+1877.84705 1037.4
+1878.70227 1127.5
+1879.34338 3898.8
+1879.68994 19462.8
+1880.03113 3596.1
+1880.36523 1232.7
+1881.49915 821.9
+1906.99829 1677.7
+1907.24146 6682.7
+1930.73438 922.8
+S	4579	4579	1907.63040793
+Z	2	3813.413
+Z	3	5719.616
+532.56818 1936.4
+630.39856 792.1
+676.70233 967.4
+796.03278 954.4
+867.92316 660.7
+976.22253 613.5
+1037.29126 597.2
+1072.60803 620.6
+1110.81299 656.7
+1122.49988 723.5
+1188.21179 774.3
+1198.27466 3255.0
+1386.56665 601.6
+1506.58801 705.8
+1525.37805 823.2
+1548.00928 671.7
+1685.40979 680.2
+1793.34827 719.0
+1794.44800 691.2
+1871.02344 650.4
+1878.49707 664.4
+1879.23267 1610.9
+1879.71021 20134.3
+1880.18518 1106.0
+1880.45142 863.5
+1882.01208 759.1
+1907.21545 7124.4
+1930.53125 1165.8
+S	4581	4581	1880.08899127
+Z	2	3758.33
+Z	3	5636.992
+532.51685 1941.4
+551.68909 580.3
+573.54669 607.1
+654.46930 601.1
+676.68494 867.8
+731.09021 894.8
+796.02441 1111.8
+823.27313 673.8
+831.92279 634.6
+899.33173 636.0
+930.62311 672.6
+1011.75629 574.0
+1019.69568 650.8
+1037.86877 724.1
+1057.31726 728.0
+1198.15088 3495.5
+1692.74121 904.2
+1800.49634 687.5
+1804.95203 700.9
+1877.44470 592.3
+1878.88452 1034.8
+1879.25110 2802.4
+1879.67456 19406.6
+1880.05310 2929.6
+1880.87000 901.8
+1881.84265 928.4
+1892.03918 649.3
+1907.15845 6994.7
+S	4582	4582	445.539407933
+Z	3	1333.343
+Z	2	889.231
+121.76488 2158.2
+125.38706 598.0
+133.11945 780.7
+161.34625 548.9
+161.87531 562.0
+165.73557 1026.5
+170.81448 534.6
+172.33191 673.9
+186.91154 664.8
+199.00974 831.9
+199.29433 979.1
+199.39186 3785.8
+199.48994 1136.5
+205.82164 814.1
+206.30684 533.4
+209.38951 517.2
+219.86076 558.8
+227.59998 535.1
+341.01767 2213.9
+342.01926 636.1
+342.28671 583.2
+346.45560 674.9
+405.32712 524.7
+427.55759 1111.8
+429.08780 12111.8
+430.08713 2488.8
+439.88513 546.7
+469.94467 749.1
+478.79907 568.1
+532.47424 1820.2
+550.07611 546.8
+557.43219 591.5
+667.65387 636.6
+676.71265 826.3
+843.63019 570.9
+866.68616 563.1
+873.96350 520.3
+1057.35803 915.9
+1084.78882 547.9
+1188.33813 805.7
+1198.05493 2814.3
+1275.15417 654.9
+1296.91895 582.3
+1777.29016 791.0
+S	4585	4585	1880.0588246
+Z	2	3758.27
+Z	3	5636.901
+513.13824 754.1
+532.53162 2166.2
+544.19263 717.4
+659.13843 650.7
+676.65857 845.9
+690.04016 589.5
+731.17627 770.4
+796.01428 911.8
+946.45624 648.9
+994.50848 680.5
+1133.32019 832.2
+1155.05005 571.0
+1163.81409 651.4
+1198.18848 3056.7
+1389.99268 635.7
+1509.13586 625.9
+1660.29419 676.5
+1755.80811 807.9
+1876.17725 721.9
+1877.70544 875.6
+1878.88452 1129.8
+1879.62317 17648.6
+1880.07263 2386.5
+1880.40454 944.5
+1906.78552 701.5
+1907.15308 7320.4
+1919.10107 729.0
+1930.75830 1605.7
+1969.11011 580.6
+S	4586	4586	1907.5318246
+Z	3	5719.32
+Z	2	3813.216
+532.41479 757.5
+532.53925 958.2
+549.19678 769.4
+583.88391 658.8
+603.28748 593.8
+630.45209 736.8
+642.38818 629.9
+651.47375 621.7
+676.70453 782.2
+793.73425 745.3
+796.03564 1091.9
+1012.36292 628.8
+1050.74316 589.5
+1057.33618 816.0
+1113.84143 625.8
+1165.84570 601.4
+1197.97803 1397.6
+1198.21338 2413.0
+1525.54419 781.3
+1777.30359 768.2
+1876.35681 796.1
+1877.80371 852.4
+1878.58716 1231.6
+1879.09338 1699.2
+1879.41138 1313.5
+1879.71997 19599.8
+1880.04358 1278.8
+1880.36487 2248.7
+1881.64709 909.5
+1907.06848 7416.4
+1919.23108 885.8
+S	4588	4588	1880.0738246
+Z	3	5636.946
+Z	2	3758.3
+532.52020 1566.5
+610.97296 672.9
+676.70654 1388.4
+796.03473 1300.8
+848.09210 736.0
+906.28741 787.3
+1011.69147 768.5
+1076.28516 590.0
+1105.80615 610.0
+1188.92737 660.6
+1198.15833 3567.4
+1204.97668 638.9
+1515.54456 687.5
+1573.63550 719.6
+1684.62708 648.7
+1777.33423 1023.4
+1876.87903 644.2
+1878.20447 876.6
+1878.81750 1426.6
+1879.33618 1160.3
+1879.71130 20145.3
+1880.05298 1346.0
+1880.64038 1110.1
+1882.93872 663.9
+1907.17383 6466.4
+1930.80151 1050.2
+S	4589	4589	1907.44540793
+Z	3	5719.061
+Z	2	3813.043
+532.48584 1650.3
+608.17059 725.5
+676.66504 665.1
+732.50409 704.7
+796.04645 1186.2
+1050.69507 552.7
+1057.30908 642.0
+1117.95911 595.8
+1198.08423 3266.5
+1293.16248 582.9
+1648.35461 661.0
+1715.35352 652.9
+1752.25488 689.4
+1878.50879 1199.4
+1879.63867 18271.4
+1879.89612 3319.0
+1880.39038 1284.5
+1880.69421 1101.7
+1907.19751 7180.9
+S	4591	4591	1880.15499127
+Z	3	5637.19
+Z	2	3758.462
+532.52429 2150.5
+546.33832 709.3
+580.28497 602.9
+581.87781 649.2
+614.47845 658.0
+630.45276 657.9
+676.68018 916.5
+800.66602 562.9
+1097.20190 655.8
+1198.16785 3016.7
+1213.12134 659.7
+1407.93005 639.3
+1525.54724 1061.4
+1594.85010 657.0
+1660.40381 618.6
+1701.51526 727.1
+1804.17688 638.8
+1825.44250 683.9
+1871.96118 641.8
+1879.64600 19840.6
+1880.72852 635.8
+1881.62183 831.5
+1881.85229 698.3
+1906.85303 1066.1
+1907.20471 7208.5
+1919.17102 737.8
+1939.09680 749.8
+S	4594	4594	1880.13824127
+Z	2	3758.429
+Z	3	5637.139
+532.53577 2038.3
+596.81360 564.7
+614.43042 529.0
+671.51898 569.7
+678.80383 616.4
+686.58826 664.6
+731.18024 744.9
+737.22986 678.4
+934.82593 734.0
+954.40778 699.6
+991.81067 594.7
+1019.71948 676.6
+1057.30737 1083.7
+1136.00549 662.8
+1198.19275 3195.1
+1206.94739 622.9
+1377.17456 576.2
+1377.98706 705.3
+1426.76306 618.7
+1548.62805 633.7
+1667.47437 793.0
+1683.63477 635.3
+1715.67334 733.8
+1878.86621 1810.1
+1879.21875 1645.1
+1879.64014 18781.5
+1880.41113 1567.0
+1907.19275 7640.3
+1919.17590 772.5
+1930.78198 806.7
+S	4595	4595	1907.67640793
+Z	3	5719.754
+Z	2	3813.505
+517.83563 644.9
+532.50702 2028.8
+549.18640 642.1
+565.47308 647.4
+612.12433 559.4
+676.68353 1041.3
+679.19763 602.8
+796.02118 699.1
+816.53247 582.6
+928.39594 579.5
+1019.64709 890.7
+1073.75720 686.3
+1198.13403 3413.8
+1272.38599 635.7
+1309.50146 641.6
+1313.02307 611.2
+1525.55994 863.5
+1703.65344 698.4
+1825.32800 577.4
+1877.92761 609.9
+1878.88977 1078.3
+1879.12366 1904.9
+1879.33447 1488.1
+1879.66406 19824.3
+1880.21802 1517.5
+1907.21008 7477.3
+1907.54053 966.9
+1919.15662 715.8
+1930.71716 1214.1
+S	4597	4597	1880.1048246
+Z	3	5637.039
+Z	2	3758.362
+532.51233 1739.2
+630.48944 846.7
+651.77612 669.5
+676.68213 1197.9
+796.03754 912.2
+1140.42676 767.6
+1198.14587 3177.3
+1465.25427 605.5
+1525.60852 887.1
+1777.58069 889.6
+1879.35583 3187.8
+1879.65332 19337.6
+1907.17188 7199.2
+S	4598	4598	1907.6968246
+Z	2	3813.546
+Z	3	5719.815
+532.54468 2042.3
+549.20465 768.7
+685.99622 660.6
+771.90204 670.6
+777.30493 580.0
+795.47406 662.8
+803.56909 574.6
+845.11200 557.1
+967.61444 609.9
+988.47406 710.8
+1019.66888 707.8
+1057.33484 760.1
+1198.21643 3168.1
+1261.05249 642.9
+1263.39648 626.1
+1508.24658 694.7
+1520.69080 689.5
+1878.30530 803.9
+1878.83911 658.0
+1879.13696 1556.7
+1879.36902 3136.4
+1879.68884 19052.9
+1879.98755 2326.7
+1880.22607 1492.9
+1880.58374 1542.0
+1881.00830 1046.6
+1881.47131 797.8
+1906.86975 1137.3
+1907.17566 7469.2
+1915.69788 684.1
+1930.81885 855.2
+S	4600	4600	1880.08999127
+Z	3	5636.995
+Z	2	3758.332
+532.56055 1902.6
+574.27191 568.0
+630.47620 885.7
+676.69476 1038.6
+723.68555 639.7
+772.24091 686.9
+796.02673 1056.4
+962.76379 616.4
+1056.53601 620.2
+1125.04529 573.0
+1179.14429 646.1
+1198.25110 3604.3
+1715.63098 737.0
+1872.77625 687.9
+1877.53296 636.5
+1878.54932 1015.4
+1879.39905 5470.4
+1879.68457 18357.2
+1881.55920 899.7
+1907.10315 7075.8
+1930.78577 892.7
+1955.43188 659.8
+1959.64880 669.0
+1987.07910 599.5
+S	4601	4601	1907.65140793
+Z	2	3813.455
+Z	3	5719.679
+532.54730 2033.7
+536.02863 695.0
+549.15228 751.3
+618.81464 579.0
+711.94012 628.4
+796.03925 860.1
+819.92657 649.5
+997.15228 636.0
+1057.23120 682.8
+1194.56287 706.1
+1198.21997 3818.3
+1426.41724 695.6
+1879.47705 7131.3
+1879.75000 16526.0
+1880.05627 5799.5
+1880.42627 2249.8
+1880.70374 1816.4
+1883.43713 661.0
+1906.79065 749.6
+1907.13098 7364.5
+1907.46362 1582.5
+1930.64612 969.6
+S	4603	4603	1880.1568246
+Z	2	3758.466
+Z	3	5637.195
+526.47699 606.0
+532.48920 1771.5
+580.84674 589.0
+613.42792 626.1
+630.46796 771.0
+676.68433 1163.3
+695.55951 591.6
+707.34302 575.7
+725.95544 652.2
+731.18561 909.0
+903.81659 730.3
+946.94489 609.7
+1198.09705 3275.4
+1198.36548 581.8
+1207.79724 603.1
+1238.64758 669.6
+1376.45007 679.7
+1879.20630 1890.3
+1879.66394 19344.7
+1880.06934 2073.5
+1880.75623 822.3
+1881.53735 877.7
+1907.21802 7274.1
+1930.78455 1156.6
+S	4604	4604	1907.5828246
+Z	3	5719.473
+Z	2	3813.318
+532.49976 1962.8
+575.22101 657.6
+581.35675 561.9
+630.46375 765.1
+632.10486 672.2
+656.50983 652.3
+676.68256 1000.7
+778.30627 563.2
+796.02039 1239.0
+1198.11658 3002.0
+1304.03943 655.9
+1525.53894 863.2
+1797.39795 818.2
+1878.10449 583.0
+1878.46484 709.1
+1878.67273 863.6
+1879.07922 1044.3
+1879.66772 19763.0
+1880.22156 919.6
+1880.91992 970.6
+1881.43811 679.7
+1906.83997 885.6
+1907.19800 7307.1
+1990.94910 560.2
+S	4606	4606	1880.14140793
+Z	2	3758.435
+Z	3	5637.149
+532.50232 1755.3
+587.95673 593.7
+600.23822 687.8
+676.69574 1044.3
+697.72382 653.0
+714.82440 640.7
+724.88867 613.8
+771.92700 590.3
+781.13586 739.1
+796.05353 1166.3
+874.50623 708.5
+1057.20850 826.3
+1057.32397 939.8
+1079.61316 671.0
+1091.70935 645.0
+1104.71106 796.8
+1113.64001 662.1
+1188.01758 1015.1
+1196.60718 578.2
+1198.12158 3341.8
+1272.48242 733.5
+1525.50244 805.4
+1787.45117 741.5
+1878.73718 618.0
+1879.35254 1899.7
+1879.68372 20279.6
+1880.01392 1724.1
+1883.06226 828.1
+1907.25537 7531.4
+1919.22083 785.0
+1930.72522 1005.8
+S	4607	4607	1907.59540793
+Z	3	5719.511
+Z	2	3813.343
+532.52655 2042.8
+594.32312 589.5
+630.44934 803.7
+676.69971 1048.8
+752.68335 698.7
+796.03851 933.5
+804.31396 881.2
+1174.20398 683.7
+1188.08679 770.9
+1198.17224 3029.0
+1428.54395 613.7
+1493.72546 650.3
+1525.48364 871.2
+1686.35461 647.0
+1777.33191 1019.4
+1878.30945 1073.3
+1878.88306 769.3
+1879.20593 2297.4
+1879.68896 19172.1
+1880.42529 1293.6
+1907.25989 7266.5
+S	4609	4609	1880.2958246
+Z	3	5637.612
+Z	2	3758.744
+532.50006 1985.0
+547.76538 607.7
+549.20435 879.8
+561.13916 680.8
+723.82898 675.5
+731.18073 898.7
+766.52972 569.1
+796.04700 998.7
+1198.11609 3753.6
+1489.20227 697.6
+1489.65247 661.6
+1517.93787 634.5
+1525.55945 881.5
+1777.34583 931.8
+1877.42603 601.5
+1878.83301 1695.3
+1879.19336 1565.1
+1879.58374 19607.0
+1879.98279 2560.8
+1880.35730 1403.5
+1880.77783 779.7
+1881.54590 754.7
+1907.22656 7344.6
+1930.80090 852.6
+S	4610	4610	1907.61740793
+Z	2	3813.387
+Z	3	5719.577
+532.53394 1711.0
+534.69562 628.2
+549.20538 733.7
+676.71527 768.2
+752.36249 691.4
+779.39258 661.5
+791.14093 609.0
+796.02948 824.3
+797.62347 647.3
+944.81738 713.5
+1020.53723 563.5
+1057.38574 934.9
+1198.19287 3092.7
+1278.66199 626.9
+1489.11865 709.4
+1534.26379 722.5
+1711.37305 649.6
+1879.24292 3660.3
+1879.49561 2577.3
+1879.76465 18010.5
+1880.39917 3161.3
+1880.88501 1484.7
+1907.27490 7461.3
+1930.81055 987.0
+S	4612	4612	1907.62299127
+Z	2	3813.398
+Z	3	5719.594
+532.49231 1541.5
+549.21954 775.6
+550.95679 604.4
+562.85742 665.9
+567.43817 707.4
+608.24420 588.6
+630.48138 892.9
+676.68909 837.7
+736.32147 561.7
+796.04700 796.6
+926.52716 802.4
+962.80969 634.7
+1198.09827 3277.5
+1251.29590 649.6
+1329.85535 690.0
+1380.71802 674.7
+1482.63916 740.9
+1547.42603 582.1
+1878.78235 938.7
+1879.27600 4011.5
+1879.66931 19171.3
+1880.07715 3395.9
+1880.57556 1522.5
+1881.39124 1126.7
+1907.19971 7683.2
+1960.03442 770.9
+S	4614	4614	1880.11840793
+Z	2	3758.389
+Z	3	5637.08
+532.52405 1594.2
+549.23767 1042.3
+573.09686 668.5
+630.49786 790.6
+644.14954 636.7
+655.61572 729.6
+676.67230 720.2
+702.70587 719.6
+731.22876 694.6
+1013.59631 602.5
+1152.82031 607.0
+1198.17139 3251.7
+1256.90881 590.9
+1524.63831 696.7
+1718.49915 625.5
+1876.65820 788.9
+1878.62219 1419.4
+1879.33276 2065.0
+1879.74756 17360.1
+1880.34546 2195.5
+1880.67639 1953.1
+1881.42810 842.5
+1907.13977 6952.6
+1930.90625 1056.6
+S	4615	4615	1907.62940793
+Z	3	5719.613
+Z	2	3813.411
+532.53564 1845.6
+557.30066 633.6
+676.66986 1004.1
+778.55579 844.4
+796.03583 898.8
+841.16418 741.4
+885.03467 619.4
+921.68469 836.7
+1019.70233 812.4
+1057.30945 674.3
+1140.32483 730.6
+1198.19653 3158.1
+1414.11511 700.0
+1455.04053 922.5
+1471.42346 617.3
+1525.66174 721.5
+1777.40259 726.3
+1878.97961 1000.8
+1879.66418 17830.9
+1880.09570 2014.9
+1880.40637 1324.8
+1880.68286 939.0
+1906.82861 1142.0
+1907.20764 7476.2
+1907.57227 1025.8
+1919.17285 785.9
+S	4617	4617	1880.11040793
+Z	3	5637.056
+Z	2	3758.373
+532.54114 1646.4
+556.20514 683.1
+597.70483 631.1
+676.67523 1113.0
+697.75574 601.6
+721.79010 704.0
+731.20093 826.7
+779.36749 764.7
+794.27441 563.7
+796.03223 983.1
+858.16046 670.3
+865.40179 632.0
+1047.20166 571.2
+1140.14819 920.6
+1198.21912 2854.0
+1481.15051 643.5
+1525.57764 684.1
+1777.41711 735.4
+1878.83289 948.1
+1879.27234 2311.4
+1879.63049 19307.3
+1880.00232 2118.3
+1880.36792 1115.4
+1907.24243 7238.4
+1930.81433 1002.8
+S	4618	4618	1907.65040793
+Z	3	5719.676
+Z	2	3813.453
+532.52185 1897.1
+622.83417 812.6
+638.00256 501.8
+643.76611 532.3
+672.27063 545.5
+676.69513 768.1
+716.76862 597.4
+756.23395 643.0
+796.02570 833.3
+801.70496 617.3
+1019.67371 798.2
+1104.75635 766.1
+1198.16760 3655.4
+1533.04126 653.3
+1877.82361 610.2
+1878.70081 771.4
+1878.97253 1295.6
+1879.67126 17791.7
+1880.33875 1521.6
+1880.62793 1040.1
+1881.36914 969.7
+1907.25195 6953.6
+1930.85718 950.5
+S	4620	4620	1880.08840793
+Z	2	3758.329
+Z	3	5636.99
+532.50928 1385.4
+549.20642 721.1
+627.23932 613.9
+676.68201 1152.5
+834.97485 588.6
+914.84729 719.4
+1188.01270 796.1
+1198.13879 3378.5
+1255.28503 600.3
+1330.14221 584.8
+1429.55090 658.1
+1667.18164 655.6
+1849.75061 704.4
+1859.44983 791.5
+1878.56433 1032.7
+1878.69067 1064.4
+1879.06799 1367.7
+1879.26416 1314.7
+1879.66882 19122.9
+1880.04639 2149.4
+1880.25354 1292.4
+1880.58704 1355.0
+1907.25879 7712.5
+1930.76685 1151.9
+S	4621	4621	1907.70624127
+Z	3	5719.843
+Z	2	3813.565
+527.68060 618.8
+532.53925 2006.6
+676.72223 992.1
+880.05212 628.9
+965.14624 602.0
+1036.13171 574.7
+1036.71021 668.7
+1083.26892 719.7
+1086.59961 632.7
+1198.20081 3638.9
+1234.16150 748.3
+1273.32349 561.6
+1338.16504 677.6
+1583.63391 687.0
+1784.49951 745.9
+1876.94836 807.9
+1878.62402 1844.9
+1879.20422 1337.0
+1879.45496 3116.3
+1879.72888 19358.5
+1880.39124 1030.7
+1880.84875 1195.8
+1907.28052 7282.8
+1930.74072 831.7
+S	4623	4623	1880.1278246
+Z	2	3758.408
+Z	3	5637.108
+532.50366 1982.0
+549.20117 809.3
+589.45654 564.8
+676.67987 837.7
+791.00397 725.6
+796.03174 1107.9
+1198.12720 3405.1
+1377.19812 718.9
+1488.61902 618.2
+1512.88086 685.2
+1525.54224 751.0
+1785.01843 713.3
+1878.85156 932.3
+1879.20374 2553.4
+1879.63525 19277.8
+1880.05212 3218.6
+1881.72070 968.8
+1907.21204 7322.1
+1930.75073 1011.6
+1942.15210 758.7
+S	4624	4624	1907.66524127
+Z	3	5719.72
+Z	2	3813.483
+524.84589 661.5
+532.50574 2100.9
+549.24146 525.8
+549.25403 525.3
+587.73834 546.4
+608.47388 760.6
+630.50299 993.5
+676.68408 1074.3
+689.47394 561.0
+733.07806 644.8
+930.53888 599.8
+1013.89142 661.1
+1057.29224 844.5
+1174.14917 656.2
+1176.39612 643.3
+1198.13940 2966.1
+1258.32190 573.8
+1494.37781 614.9
+1623.01123 570.0
+1878.97351 1747.3
+1879.26123 2195.3
+1879.64844 19587.3
+1880.01758 1905.7
+1880.30505 1481.8
+1880.61804 1277.7
+1907.22229 7731.7
+1908.18555 656.2
+1930.90247 932.3
diff --git a/src/app/xlink/xhhc_predict_peptide_ions.cpp b/src/app/xlink/xhhc_predict_peptide_ions.cpp
new file mode 100644
index 0000000..07334a2
--- /dev/null
+++ b/src/app/xlink/xhhc_predict_peptide_ions.cpp
@@ -0,0 +1,121 @@
+#include "LinkedIonSeries.h"
+#include "xhhc_scorer.h"
+#include "LinkedPeptide.h"
+#include "XHHC_Peptide.h"
+#include "util/Params.h"
+
+#include <iostream>
+#include <fstream>
+
+#define NUM_ARGUMENTS 6
+#define NUM_OPTIONS 4
+using namespace std;
+
+int main(int argc, char** argv) {
+
+  char* peptideA = NULL;
+  char* peptideB = NULL;
+  int posA = 0;
+  int posB = 0;
+  FLOAT_T linker_mass = 0;
+  int charge = 1; 
+  bool print_spectrum = false;
+
+
+  /* Verbosity level for set-up/command line reading */
+  set_verbosity_level(CARP_ERROR);
+  
+  /* Define optional command line arguments */
+  int num_options = NUM_OPTIONS;
+  const char* option_list[NUM_OPTIONS] = {
+    "verbosity",
+    "version",
+    "use-flanking-peaks",
+    "print-theoretical-spectrum"
+  };
+
+  /* Define required command line arguments */
+  int num_arguments = NUM_ARGUMENTS;
+  const char* argument_list[NUM_ARGUMENTS] = {"peptide A",
+                                              "peptide B",
+                                              "pos A",
+                                              "pos B",
+                                              "charge state",
+                                              "link mass"};
+
+
+
+  /* for debugging of parameter processing */
+  //set_verbosity_level( CARP_DETAILED_DEBUG );
+  set_verbosity_level( CARP_ERROR );
+  
+  /* Set default values for parameters in parameter.c */
+  initialize_parameters();
+
+  /* Define optional and required command line arguments */
+  select_cmd_line_options( option_list, num_options );
+  select_cmd_line_arguments( argument_list, num_arguments);
+
+  /* Parse the command line, including the optional params file */
+  /* does sytnax, type, bounds checking and dies if neccessessary */
+  parse_cmd_line_into_params_hash(argc, argv, "xlink-predict-peptide-ions");
+
+  /* Set verbosity */
+  set_verbosity_level(Params::GetInt("verbosity"));
+
+  /* Get Arguments */
+  linker_mass = Params::GetDouble("link mass");
+  charge = Params::GetInt("charge state");
+
+  peptideA = Params::GetString("peptide A");
+  peptideB = Params::GetString("peptide B");
+  
+  posA = Params::GetInt("pos A");
+  posB = Params::GetInt("pos B");
+
+  print_spectrum = Params::GetBool("print-theoretical-spectrum");
+
+  LinkedPeptide::setLinkerMass(linker_mass); 
+  LinkedPeptide linked_peptide;
+
+  if (string(peptideB) == "NULL") {
+    linked_peptide = LinkedPeptide(peptideA, NULL, posA-1, posB-1, charge);
+  } else {
+    linked_peptide = LinkedPeptide( peptideA, peptideB, posA-1, posB-1, charge);  
+  }
+ 
+  ostringstream oss;
+  oss << linked_peptide;
+  string precursor_sequence = oss.str();
+  carp(CARP_INFO, "XLink Product:%s", precursor_sequence.c_str());
+  carp(CARP_INFO, "Charge:%i", charge);
+  carp(CARP_INFO, "Linker Mass:%g", linker_mass);
+  carp(CARP_INFO, "Product Mass: %g (MONO) %g (AVERAGE)", linked_peptide.getMass(MONO), linked_peptide.getMass(AVERAGE));
+  carp(CARP_INFO, "====================");
+
+  LinkedIonSeries ion_series(charge);
+  ion_series.addLinkedIons(linked_peptide);
+  ion_series.print(); 
+
+  if (print_spectrum) {
+    carp(CARP_INFO, "Writing XCORR theoretical spectrum to theoretical.out");
+    map<int, FLOAT_T> theoretical;
+    XHHC_Scorer::xlinkCreateMapTheoretical(ion_series,
+                                         theoretical);
+
+    ofstream fout("theoretical.out");
+    fout << "> " << linked_peptide << "\t" << linked_peptide.getMZ(MONO) << endl;
+    
+    map<int, FLOAT_T>::iterator iter;
+
+    for (iter = theoretical.begin();
+         iter != theoretical.end();
+         ++iter) {
+      fout << iter -> first << "\t";
+      fout << iter -> second << "\t" << endl;
+    }
+
+    fout.close();
+  }
+  return 0;
+}
diff --git a/src/app/xlink/xhhc_score_peptide_spectrum.cpp b/src/app/xlink/xhhc_score_peptide_spectrum.cpp
new file mode 100644
index 0000000..5cce052
--- /dev/null
+++ b/src/app/xlink/xhhc_score_peptide_spectrum.cpp
@@ -0,0 +1,417 @@
+#include "xhhc_score_peptide_spectrum.h"
+#include "xhhc.h"
+#include "LinkedIonSeries.h"
+#include "xhhc_scorer.h"
+#include "LinkedPeptide.h"
+#include "XHHC_Peptide.h"
+
+#include "XLinkPeptide.h"
+#include "SelfLoopPeptide.h"
+#include "XLinkScorer.h"
+
+#include "model/IonConstraint.h"
+#include "model/Scorer.h"
+#include "io/SpectrumCollectionFactory.h"
+#include "util/Params.h"
+
+#include <math.h>
+#include <assert.h>
+#include <ctype.h>
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+#include <iostream>
+#include <fstream>
+
+using namespace Crux;
+
+XLinkScoreSpectrum::XLinkScoreSpectrum() {
+}
+
+XLinkScoreSpectrum::~XLinkScoreSpectrum() {
+}
+
+int XLinkScoreSpectrum::main(int argc, char** argv) {
+  /* Get Arguments */
+  string peptideAStr = Params::GetString("peptide A");
+  string peptideBStr = Params::GetString("peptide B");
+  char* peptideA = my_copy_string(peptideAStr.c_str());
+  char* peptideB = my_copy_string(peptideBStr.c_str());
+
+  int posA     = Params::GetInt("pos A");
+  int posB     = Params::GetInt("pos B");
+  int charge   = Params::GetInt("charge state"); 
+  int scan_num = Params::GetInt("scan number"); 
+
+  string ms2_file = Params::GetString("ms2 file");
+
+  FLOAT_T link_mass = Params::GetDouble("link mass");
+  XLinkPeptide::setLinkerMass(link_mass);
+  string scoremethod(Params::GetString("xlink-score-method"));
+
+
+  XLinkMatch* candidate = NULL;
+  
+  // a single peptide linked to itself
+  if (strcmp(peptideB, "NULL") == 0) {
+    cout << "B is null" << endl;
+    if (scoremethod != "composite") {
+      carp(CARP_FATAL, "For composite scoring, provide a linked peptide, "
+           "not a self loop");
+    }
+    candidate = new SelfLoopPeptide(peptideA, posA, posB);
+  } else {
+    candidate = new XLinkPeptide(peptideA, peptideB, posA, posB);
+  }
+
+  // read ms2 file
+  Crux::SpectrumCollection* collection = SpectrumCollectionFactory::create(ms2_file);
+  
+  // search for spectrum with correct scan number
+  Spectrum* spectrum = collection->getSpectrum(scan_num);
+  if( spectrum == NULL ) {
+    carp(CARP_ERROR, "Failed to find spectrum with scan_num: %d", scan_num);
+    delete collection;
+    exit(1);
+  }
+  
+  XLinkScorer xlink_scorer(spectrum, charge);
+  
+  IonConstraint* ion_constraint = xlink_scorer.getIonConstraintXCorr();
+  ion_constraint->setUseIonType(BY_ION, false);
+  ion_constraint->setUseIonType(BYA_ION, false);
+  ion_constraint->setUseIonType(ALL_ION, false);
+  ion_constraint->setUseIonType(A_ION, Params::GetBool("use-a-ions"));
+  ion_constraint->setUseIonType(B_ION, Params::GetBool("use-b-ions"));
+  ion_constraint->setUseIonType(C_ION, Params::GetBool("use-c-ions"));
+  ion_constraint->setUseIonType(X_ION, Params::GetBool("use-x-ions"));
+  ion_constraint->setUseIonType(Y_ION, Params::GetBool("use-y-ions"));
+  ion_constraint->setUseIonType(Z_ION, Params::GetBool("use-z-ions"));
+
+  if (scoremethod == "composite") {
+    FLOAT_T score = xlink_scorer.scoreCandidate(candidate);   
+
+    cout << score << endl;
+
+  } else if (scoremethod == "modification") {
+    
+    XLinkPeptide* xlp = (XLinkPeptide*)candidate;
+    FLOAT_T deltaB = xlp->getXLinkablePeptide(1).getMass(MONO) + link_mass;
+    FLOAT_T scoreA = xlink_scorer.scoreXLinkablePeptide(xlp->getXLinkablePeptide(0), 0, deltaB);
+    
+    FLOAT_T deltaA = xlp->getXLinkablePeptide(0).getMass(MONO) + link_mass;
+    FLOAT_T scoreB = xlink_scorer.scoreXLinkablePeptide(xlp->getXLinkablePeptide(1), 0, deltaA);
+
+    if (scoreA > scoreB)
+      cout << scoreA << "\t" << scoreB << endl;
+    else
+      cout << scoreB << "\t" << scoreA << endl;
+
+  } else if (scoremethod == "concatenation") {
+
+    vector<double> scores;
+    double score1 = get_concat_score(peptideA, peptideB, posA, charge, spectrum);
+    scores.push_back(score1);
+
+    double score2 = get_concat_score(peptideB, peptideA, posB, charge, spectrum);
+    scores.push_back(score2);
+
+    int lengthA = string(peptideA).length();
+    int lengthB = string(peptideB).length();
+
+    double score3 = get_concat_score(peptideA, peptideB, lengthA + posB, charge, spectrum);
+    scores.push_back(score3);
+
+    double score4 = get_concat_score(peptideB, peptideA, lengthB + posA, charge, spectrum);
+    scores.push_back(score4);
+
+    sort(scores.begin(), scores.end(), less<double>());
+    cout <<scores[0];
+    for (int i=1; i < 4; i++) {
+      cout << "\t" << scores[i];
+    }
+
+    cout << endl;
+  } else {
+    carp(CARP_ERROR, "Unknown score method (%s).", scoremethod.c_str());
+  }
+  // free heap
+  delete collection;
+  delete spectrum;
+
+  return 0;
+}
+
+
+double XLinkScoreSpectrum::get_concat_score(char* peptideA, char* peptideB, int link_site, int charge, Spectrum* spectrum) {
+  string lpeptide = string(peptideA) + string(peptideB); 
+  
+  IonConstraint* ion_constraint = IonConstraint::newIonConstraintSmart(XCORR, charge);
+  
+  IonSeries* ion_series = new IonSeries(lpeptide.c_str(), charge, ion_constraint);
+  
+  ion_series->predictIons();
+  
+  //modify ions.
+  
+  //int pepA_begin = 0;
+  int pepB_begin = string(peptideA).length();
+  int llength = lpeptide.length();
+  
+  for (IonIterator ion_iterator = ion_series->begin();
+    ion_iterator != ion_series->end();
+    ++ion_iterator) {
+
+    Ion* ion = *ion_iterator;
+    //check to see if if is the cterm of 1st peptide.
+    int ion_charge = ion->getCharge();
+    int cleavage_idx = ion->getCleavageIdx();
+    ION_TYPE_T ion_type = ion->getType();
+
+    //if contains cterm of 1st peptide, modify by -OH 
+    carp(CARP_DEBUG, "====================");
+    if (ion_type == B_ION) {
+      carp(CARP_DEBUG, "B-ion");
+      carp(CARP_DEBUG, "%s", lpeptide.substr(0, cleavage_idx).c_str());
+    } else if (ion_type == Y_ION) {
+      carp(CARP_DEBUG, "Y-ion");
+      carp(CARP_DEBUG, "%s", lpeptide.substr(llength-cleavage_idx, llength).c_str());
+    } else {
+      continue;
+    }
+
+    carp(CARP_DEBUG, "cleavage idx:%d", cleavage_idx);
+
+    bool cterm_1st = false;
+    if (ion_type == B_ION) {
+      carp(CARP_DEBUG, "B-Ion");
+      if (cleavage_idx >= pepB_begin) {
+        cterm_1st = true;
+      }
+    } else if (ion_type == Y_ION) {
+      carp(CARP_DEBUG, "Y-ion");
+      if (cleavage_idx > (llength - pepB_begin)) {
+        cterm_1st = true;
+      }
+    }
+
+    bool nterm_2nd = false;
+    if (ion_type == B_ION) {
+      if (cleavage_idx > pepB_begin) {
+        nterm_2nd = true;
+      }
+    } else if (ion_type == Y_ION) {
+      if (cleavage_idx >= (llength-pepB_begin)) {
+        nterm_2nd = true;
+      }
+    }
+
+    bool has_link_site = false;
+    if (ion_type == B_ION) {
+      if (cleavage_idx > link_site) {
+        has_link_site = true;
+      }
+    } else if (ion_type == Y_ION) {
+      if (cleavage_idx >= (llength- link_site)) {
+        has_link_site = true;
+      }
+    }
+      
+    carp(CARP_DEBUG, "cterm:%d", cterm_1st);
+    carp(CARP_DEBUG, "nterm:%d", nterm_2nd);
+    carp(CARP_DEBUG, "has site:%d", has_link_site);
+      
+
+    //if it contains the cterm of the 1st peptide, modify by -OH
+    if (cterm_1st) {
+      FLOAT_T old_mass = (ion->getMassZ() - MASS_H_MONO) * (FLOAT_T)ion_charge;
+      FLOAT_T new_mass = old_mass + MASS_H2O_MONO - MASS_H_MONO;
+      FLOAT_T new_mz = (new_mass + (FLOAT_T)ion_charge) / (FLOAT_T)ion_charge;
+      ion->setMassZ(new_mz);
+    }
+    //if contains the nterm of 2nd peptide, modify by -H
+    if (nterm_2nd) {
+      FLOAT_T old_mass = (ion->getMassZ() - MASS_H_MONO) * (FLOAT_T)ion_charge;
+      FLOAT_T new_mass = old_mass + MASS_H_MONO;
+      FLOAT_T new_mz = (new_mass + (FLOAT_T)ion_charge) / (FLOAT_T)ion_charge;
+      ion->setMassZ(new_mz);
+    }
+    //if contains the link site, modify by link mass.
+    if (has_link_site) {
+      FLOAT_T old_mass = (ion->getMassZ() - MASS_H_MONO) * (FLOAT_T)ion_charge;
+      FLOAT_T new_mass = old_mass + LinkedPeptide::getLinkerMass();
+      FLOAT_T new_mz = (new_mass + (FLOAT_T)ion_charge) / (FLOAT_T)ion_charge;
+      ion->setMassZ(new_mz);
+    }
+  }
+
+  Scorer* scorer = new Scorer(XCORR); 
+
+  // calculate the score
+  FLOAT_T score = scorer->scoreSpectrumVIonSeries(spectrum, ion_series);
+  return score;
+}
+
+FLOAT_T* XLinkScoreSpectrum::get_observed_raw(Spectrum* spectrum, int charge) {
+  FLOAT_T peak_location = 0;
+  int mz = 0;
+  FLOAT_T intensity = 0;
+  FLOAT_T bin_width = BIN_WIDTH_MONO;
+  FLOAT_T precursor_mz = spectrum->getPrecursorMz();
+  FLOAT_T experimental_mass_cut_off = precursor_mz*charge + 50;
+
+  // set max_mz and malloc space for the observed intensity array
+  FLOAT_T sp_max_mz = 512;
+
+  if(experimental_mass_cut_off > 512) {
+    int x = (int)experimental_mass_cut_off / 1024;
+    FLOAT_T y = experimental_mass_cut_off - (1024 * x);
+    sp_max_mz = x * 1024;
+
+    if(y > 0) {
+      sp_max_mz += 1024;
+    }
+  }
+
+  // DEBUG
+  // carp(CARP_INFO, "experimental_mass_cut_off: %.2f sp_max_mz: %.3f", experimental_mass_cut_off, scorer->sp_max_mz);
+  FLOAT_T* observed = (FLOAT_T*)mycalloc((int)sp_max_mz, sizeof(FLOAT_T));
+  
+  // DEBUG
+  // carp(CARP_INFO, "max_peak_mz: %.2f, region size: %d",get_spectrum_max_peak_mz(spectrum), region_selector);
+  
+  for (PeakIterator peak_iterator = spectrum->begin();
+    peak_iterator != spectrum->end();
+    ++peak_iterator) {
+
+    Peak *peak = *peak_iterator;
+    peak_location = peak->getLocation();
+    
+    // skip all peaks larger than experimental mass
+    if(peak_location > experimental_mass_cut_off) {
+      continue;
+    }
+    
+    // skip all peaks within precursor ion mz +/- 15
+    if(peak_location < precursor_mz + 15 &&  peak_location > precursor_mz - 15) {
+      continue;
+    }
+    
+    // map peak location to bin
+    mz = (int)(peak_location / bin_width + 0.5);
+
+    // get intensity
+    // sqrt the original intensity
+    intensity = peak->getIntensity();
+
+    // set intensity in array with correct mz, only if max peak in the bin
+    if(observed[mz] < intensity) {
+      observed[mz] = intensity;
+      }
+    }    
+  
+
+  return observed;
+
+}
+
+
+
+void XLinkScoreSpectrum::print_spectrum(Spectrum* spectrum, LinkedIonSeries& ion_series) {
+
+
+      Scorer* scorer = new Scorer(XCORR);
+      scorer->createIntensityArrayObserved(spectrum, ion_series.getCharge());
+
+      FLOAT_T* observed_raw = get_observed_raw(spectrum, ion_series.getCharge());
+      FLOAT_T* observed_processed = scorer->getIntensityArrayObserved();
+
+
+      FLOAT_T max_mz = scorer->getSpMaxMz();
+
+        
+
+
+      XHHC_Scorer xhhc_scorer(max_mz);
+
+      FLOAT_T* theoretical = (FLOAT_T*)mycalloc((size_t)max_mz, sizeof(FLOAT_T));
+      xhhc_scorer.hhcCreateIntensityArrayTheoretical(ion_series, theoretical);
+
+
+      
+      ofstream fout("ion_match.out");
+      for (int i = 0; i < max_mz; i++) {
+        fout << i << "\t" 
+             << observed_raw[i] << "\t"
+             << observed_processed[i] << "\t" 
+             << theoretical[i] << "\t" 
+             << (theoretical[i] != 0) << "\t" 
+             << (theoretical[i] > 25) << endl;
+      }
+
+      fout.close();
+}
+
+void XLinkScoreSpectrum::processParams() {
+  for (char c = 'A'; c <= 'Z'; c++) {
+    double deltaMass = Params::GetDouble(string(1, c));
+    increase_amino_acid_mass(c, deltaMass);
+  }
+}
+
+string XLinkScoreSpectrum::getName() const {
+  return "xlink-score-spectrum";
+}
+
+string XLinkScoreSpectrum::getDescription() const {
+  return
+    "[[nohtml:Given a cross-linked peptide and a spectrum "
+    "calculate the corresponding XCorr score a number of different ways.]]"
+    "[[html:Given a cross-linked peptide and a spectrum "
+    "calculate the corresponding XCorr score a number of different ways, "
+    "depending upon the xlink-score-method parameter:"
+    "<ul><li>composite – compute a combined XCorr score</li>"
+    "<li>modification - score the two peptides "
+    "separately, treating the second peptide as a variable modification "
+    "on the first peptide</li><li>concatenated - score as the concatenation "
+    "of the two peptides.  Note that this mode gives four scores, "
+    "corresponding to the two relative orders of the peptides (AB and BA) "
+    "and the modification appearing on the first or second peptide.</li></ul>]]";
+}
+
+vector<string> XLinkScoreSpectrum::getArgs() const {
+  string arr[] = {
+    "peptide A",
+    "peptide B",
+    "pos A",
+    "pos B",
+    "link mass",
+    "charge state",
+    "scan number",
+    "ms2 file"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector<string> XLinkScoreSpectrum::getOptions() const {
+  string arr[] = {
+    "verbosity",
+    "use-flanking-peaks",
+    "xlink-score-method",
+    "use-a-ions",
+    "use-b-ions",
+    "use-c-ions",
+    "use-x-ions",
+    "use-y-ions",
+    "use-z-ions"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector< pair<string, string> > XLinkScoreSpectrum::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("stdout",
+    "XCorr score(s) in descending order"));
+  return outputs;
+}
+
diff --git a/src/app/xlink/xhhc_score_peptide_spectrum.h b/src/app/xlink/xhhc_score_peptide_spectrum.h
new file mode 100644
index 0000000..ca4b15f
--- /dev/null
+++ b/src/app/xlink/xhhc_score_peptide_spectrum.h
@@ -0,0 +1,29 @@
+#ifndef XHHC_SCORE_PEPTIDE_SPECTRUM_H
+#define XHHC_SCORE_PEPTIDE_SPECTRUM_H
+
+#include "app/CruxApplication.h"
+#include "model/Spectrum.h"
+#include "LinkedIonSeries.h"
+
+class XLinkScoreSpectrum : public CruxApplication {
+ public:
+  XLinkScoreSpectrum();
+  ~XLinkScoreSpectrum();
+
+  virtual int main(int argc, char** argv);
+  virtual void processParams();
+  virtual std::string getName() const;
+  virtual std::string getDescription() const;
+  virtual std::vector<std::string> getArgs() const;
+  virtual std::vector<std::string> getOptions() const;
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+ private:
+  double get_concat_score(char* peptideA, char* peptideB, int link_site,
+                          int charge, Crux::Spectrum* spectrum);
+  FLOAT_T* get_observed_raw(Crux::Spectrum* spectrum, int charge);
+  void print_spectrum(Crux::Spectrum* spectrum, LinkedIonSeries& ion_series);
+};
+
+#endif
+
diff --git a/src/app/xlink/xhhc_scorer.cpp b/src/app/xlink/xhhc_scorer.cpp
new file mode 100644
index 0000000..e41fec9
--- /dev/null
+++ b/src/app/xlink/xhhc_scorer.cpp
@@ -0,0 +1,441 @@
+#include "xhhc_scorer.h"
+#include "xhhc.h"
+#include "LinkedPeptide.h"
+
+#include "model/Spectrum.h"
+#include "model/Scorer.h"
+#include "util/Params.h"
+
+#include <fstream>
+
+// constants for print_spectrums
+#define NORMALIZE 0
+#define MAX_MZ 1200;
+#define MIN_MZ 400;
+#define NO_FLANKS 1
+
+using namespace Crux;
+
+/**
+ * Initializes an empty XHHC_Scorer object
+ */
+void XHHC_Scorer::init() {
+  print_spectrums_ = false;
+  scorer_ = NULL;
+  max_mz_ = 0.0;
+  max_bin_ = 0;
+  current_spectrum_ = NULL;
+
+  bin_width_ = Params::GetDouble("mz-bin-width");
+  bin_offset_ = Params::GetDouble("mz-bin-offset");
+
+}
+
+/**
+ * \returns an empty XHHC_Scorer object
+ */
+XHHC_Scorer::XHHC_Scorer() {
+  init();
+}
+
+/**
+ * Destructor
+ */
+XHHC_Scorer::~XHHC_Scorer() {
+
+  if (scorer_ != NULL) {
+    delete scorer_;
+  }
+
+}
+  
+/**
+ * \returns an XHHC_Scorer object with the max_mz initialized
+ */
+XHHC_Scorer::XHHC_Scorer(
+  FLOAT_T max_mz ///< max_mz for the scorer.
+  ) {
+
+  init();
+  max_mz_ = max_mz;
+}
+
+/**
+ * \returns the max_mz
+ */
+FLOAT_T XHHC_Scorer::getMaxMz() {
+  
+  return max_mz_;
+}
+
+/*
+ * Sets the print_spectrums_ variable
+ */
+void XHHC_Scorer::setPrint(
+  bool print_spectrums ///< indicator of whether we are printing spectrums
+  ) { 
+
+  print_spectrums_ = print_spectrums;
+}
+
+/**
+ * \returns the number of BY ions in the Ionseries that are
+ * matched to peaks in the spectrum
+ */
+int XHHC_Scorer::getMatchedBYIons(
+  Spectrum* spectrum,
+  LinkedIonSeries& ion_series) {
+
+  FLOAT_T bin_width = BIN_WIDTH_MONO;
+  vector<LinkedPeptide>& ions = ion_series.getIons();
+
+  int ans = 0;
+
+  for (vector<LinkedPeptide>::iterator ion = ions.begin(); ion != ions.end(); ++ion) {
+    if (ion -> getMZ(MONO) >= 400 && ion -> getMZ(MONO) <= 1200) {
+    if (ion -> getIonType() == B_ION || ion -> getIonType() == Y_ION) {
+      Peak * peak = spectrum->getNearestPeak(ion->getMZ(AVERAGE), 
+                                              bin_width);
+      if (peak != NULL) {
+        ans++;
+      }
+    }
+  }
+  }
+  return ans;
+}
+
+/**
+ * \returns the xcorr score for the spectrum and the ion_series
+ */
+FLOAT_T XHHC_Scorer::scoreSpectrumVsSeries(
+  Spectrum* spectrum, ///< Spectrum to score
+  LinkedIonSeries& ion_series ///< LinkedIonSeries to score
+  ) {
+
+  FLOAT_T score = 0.0;
+  score =  hhcGenScoreXcorr(spectrum, ion_series);
+  return score; 
+} 
+ 
+/**
+ * Generates the theoretical/observed arrays and scores the spectrum for xcorr
+ */
+FLOAT_T XHHC_Scorer::hhcGenScoreXcorr(
+  Spectrum* spectrum,    ///< the spectrum to score -in
+  LinkedIonSeries& ion_series ///< the ion series to score against the spectrum -in
+  ) {
+
+  FLOAT_T final_score = 0;
+  FLOAT_T* theoretical = NULL;
+
+  if (current_spectrum_ != spectrum) {
+    current_spectrum_ = spectrum;
+    if (scorer_ != NULL) { 
+      delete scorer_; 
+      scorer_ = NULL;
+    }
+    scorer_ = new Scorer(XCORR);
+    if (!scorer_->createIntensityArrayXcorr(spectrum, ion_series.getCharge())) {
+      carp(CARP_FATAL, "failed to produce XCORR");
+    }
+  }
+
+  max_mz_ = scorer_->getSpMaxMz();
+  max_bin_ = scorer_->getMaxBin();
+  // create theoretical array
+  theoretical = (FLOAT_T*)mycalloc((size_t)max_bin_, sizeof(FLOAT_T));
+  
+  if (!hhcCreateIntensityArrayTheoretical(ion_series, theoretical)) {
+    carp(CARP_ERROR, "failed to create theoretical spectrum for Xcorr");
+    return false;
+  }
+   
+  // do cross correlation between observed spectrum(in scorer) and theoretical spectrum.
+  // use the two intensity arrays that were created
+  final_score = scorer_->crossCorrelation(theoretical);
+  if (print_spectrums_) {
+    printSpectrums(theoretical, spectrum);
+  }
+  // free theoretical spectrum
+  free(theoretical);
+  return final_score;
+}
+
+/**
+ * adds an intensity in the theoretical map at peak idx
+ */
+void XHHC_Scorer::addIntensityMap(
+  map<int, FLOAT_T>& theoretical, ///< the theoretical map 
+  int idx, ///< the idx to add   
+  FLOAT_T intensity ///< the corresponding intensity
+  ) {
+  
+  map<int, FLOAT_T>::iterator iter = theoretical.find(idx);
+  if (iter == theoretical.end())
+    theoretical[idx] = intensity;
+  else
+    iter -> second = max(intensity, iter -> second);
+}
+
+
+/**
+ * \returns whether create a theoretical map of peak_idx,intensity pairs
+ * is sucessful
+ */
+bool XHHC_Scorer::xlinkCreateMapTheoretical(
+  LinkedIonSeries& ion_series, ///< LinkedIonSeries to create the map from -in
+  map<int, FLOAT_T>& theoretical ///< The theoretical map -out
+  ) {
+
+  theoretical.clear();
+  int intensity_array_idx = 0;
+  FLOAT_T bin_width = BIN_WIDTH_MONO;
+  vector<LinkedPeptide>& ions = ion_series.getIons();
+  // while there are ion's in ion iterator, add matched observed peak intensity
+  for (vector<LinkedPeptide>::iterator ion = ions.begin(); ion != ions.end(); ++ion) {
+    intensity_array_idx = (int)(ion->getMZ(MONO) / bin_width + 0.5);
+    //ion_type = ion->getIonType();
+    //ion_charge = ion->getCharge();
+
+    // is it B, Y ion?
+    
+    // neutral loss peak?
+    // Add peaks of intensity 50.0 for B, Y type ions. 
+    // In addition, add peaks of intensity of 25.0 to +/- 1 m/z flanking each B, Y ion.
+    // Skip ions that are located beyond max mz limit
+    addIntensityMap(theoretical, intensity_array_idx, 50);
+    if (Params::GetBool("use-flanking-peaks")) {
+      if (intensity_array_idx > 0) {
+        addIntensityMap(theoretical, intensity_array_idx - 1, 25);
+      }
+      addIntensityMap(theoretical, intensity_array_idx + 1, 25);
+     
+    }
+
+    // add neutral loss of water and NH3
+    //  mass_z + (modification_masses[(int)ion_modification]/(FLOAT_T)charge) * modification_count;  
+    
+    //TODO put this back in
+    //if(ion_type == B_ION) {
+      int h2o_array_idx = (int)((ion->getMZ(MONO) - (MASS_H2O_MONO/ion->getCharge()) ) / bin_width + 0.5);
+      addIntensityMap(theoretical, h2o_array_idx, 10);
+    //}
+    
+    int co_array_idx = (int)((ion -> getMZ(MONO) - (MASS_CO_MONO/ion->getCharge())) / bin_width + 0.5);
+    addIntensityMap(theoretical, co_array_idx, 10);
+
+    int nh3_array_idx = (int)((ion->getMZ(MONO) -  (MASS_NH3_MONO/ion->getCharge())) / bin_width + 0.5);
+    addIntensityMap(theoretical, nh3_array_idx, 10);        
+  }
+  return true;
+}
+
+/**
+ * Fills in the theoretical array using the LinkedIonSeries
+ */
+bool XHHC_Scorer::hhcCreateIntensityArrayTheoretical(
+  LinkedIonSeries& ion_series, ///< The linked ion series to use -in
+  FLOAT_T* theoretical       ///< the empty theoretical spectrum -out
+  ) {
+
+  ION_TYPE_T ion_type;
+  int intensity_array_idx = 0;
+  vector<LinkedPeptide>& ions = ion_series.getIons();
+  // while there are ion's in ion iterator, add matched observed peak intensity
+  for (vector<LinkedPeptide>::iterator ion = ions.begin(); ion != ions.end(); ++ion) {
+    intensity_array_idx = INTEGERIZE(ion->getMZ(MONO), bin_width_, bin_offset_);
+    ion_type = ion->getIonType();
+    //ion_charge = ion->getCharge();
+    // skip ions that are located beyond max mz limit
+    // is it B, Y ion?
+    // neutral loss peak?
+    // Add peaks of intensity 50.0 for B, Y type ions. 
+    // In addition, add peaks of intensity of 25.0 to +/- 1 m/z flanking each B, Y ion.
+    // Skip ions that are located beyond max mz limit
+    if((intensity_array_idx)< max_bin_) {
+      //if (ion->type() == Y_ION)
+      //add_intensity(theoretical, intensity_array_idx, 51);
+      Scorer::addIntensity(theoretical, intensity_array_idx, 50);
+      if (Params::GetBool("use-flanking-peaks") &&
+        intensity_array_idx > 0) {
+        Scorer::addIntensity(theoretical, intensity_array_idx - 1, 25);
+      }
+      if(Params::GetBool("use-flanking-peaks") &&
+         ((intensity_array_idx + 1)< max_bin_)) {
+        Scorer::addIntensity(theoretical, intensity_array_idx + 1, 25);
+      }
+    }
+
+    // add neutral loss of water and NH3
+    //  mass_z + (modification_masses[(int)ion_modification]/(FLOAT_T)charge) * modification_count;  
+
+
+    if(ion_type == B_ION) {
+      int h2o_array_idx = 
+        INTEGERIZE((ion->getMZ(MONO) - (MASS_H2O_MONO/ion->getCharge())), bin_width_, bin_offset_);
+
+      if (h2o_array_idx < max_bin_)
+        Scorer::addIntensity(theoretical, h2o_array_idx, 10);
+      }
+
+      int nh3_array_idx = 
+        INTEGERIZE((ion->getMZ(MONO) -  (MASS_NH3_MONO/ion->getCharge())),
+                   bin_width_, bin_offset_);
+      if (nh3_array_idx < max_bin_) {
+        Scorer::addIntensity(theoretical, nh3_array_idx, 10);
+      }
+  }
+  return true;
+}
+
+/**
+ * \returns the sum of the spectrum peak intensities of the by-ions that are matched
+ * to the LinkedIonSeries
+ */ 
+FLOAT_T XHHC_Scorer::getIonCurrentExplained(
+  LinkedIonSeries& ion_series, ///<The LinkedIonSeries to match 
+  Spectrum* spectrum, ///<The spectrum to match
+  FLOAT_T& explained, ///<The ion current explained -out
+  int& by_observed ///<The number of by ions matched
+  ) {
+
+  max_mz_ = spectrum->getMaxPeakMz();
+  FLOAT_T* theoretical = (FLOAT_T*)mycalloc((size_t)max_mz_+1, sizeof(FLOAT_T));
+  hhcCreateIntensityArrayTheoretical(ion_series, theoretical);
+
+  explained = 0.0;
+  by_observed = 0;
+
+  FLOAT_T bin_width = BIN_WIDTH_MONO;
+
+  FLOAT_T ans = 0.0;
+
+  map<int, bool> by_found;
+
+  for (PeakIterator peak_iter = spectrum->begin();
+    peak_iter != spectrum->end();
+    ++peak_iter) {
+
+    Peak * peak = *peak_iter;
+    FLOAT_T spec_mz = peak->getLocation();
+    FLOAT_T spec_intensity = peak->getIntensity();
+    //for each peak in the spectrum, find the array index for the theoretical.
+    int intensity_array_idx = (int)(spec_mz / bin_width + 0.5);
+
+    if (theoretical[intensity_array_idx] >= 45) {
+      //it is a b-y ion that is observed.
+      if (by_found.find(intensity_array_idx) == by_found.end()) {
+        by_found[intensity_array_idx] = true;
+        by_observed++;
+      }
+      ans += spec_intensity;
+    }
+  }
+  free(theoretical);
+
+
+  explained = ans;
+  return ans;
+}
+
+/**
+ * Prints out an annotated spectrum
+ * creates three files for spectacle.pl: spectrums.out, 
+ * theoretical.out, observed.out
+ */
+void XHHC_Scorer::printSpectrums(
+  FLOAT_T* theoretical, ///< The theoretical spectrum array
+  Spectrum* spectrum ///< The spectrum to print
+  ) {
+   
+  ofstream theoretical_file;
+  ofstream observed_file;
+  ofstream spectrums_file;
+
+  theoretical_file.open("theoretical.out");
+  observed_file.open("observed.out");
+  spectrums_file.open("spectrums.out");
+
+  theoretical_file << "> theoretical" << endl;
+  observed_file << "> observed" << endl;
+  spectrums_file << "> spectrums" << endl;
+  bool noflanks = Params::GetBool("use-flanking-peaks");
+  int normalize = NORMALIZE;
+  int max_mz = MAX_MZ;
+  int min_mz = MIN_MZ;
+  // keep track of colors
+  map<Peak *, string> peak_colors;
+  carp(CARP_DEBUG, "min mz: %d, max mz: %d\n", max_mz);
+  FLOAT_T average = 0;
+
+  for (PeakIterator peak_iter = spectrum->begin();
+    peak_iter != spectrum->end();
+    ++peak_iter) {
+    
+    average += (*peak_iter)->getIntensity();
+  }
+
+  average = average / spectrum->getNumPeaks();
+  // make spectacle file for observed peaks
+ 
+  for (PeakIterator peak_iter = spectrum->begin();
+    peak_iter != spectrum->end();
+    ++peak_iter) {
+
+    Peak * peak = *peak_iter;
+    FLOAT_T location = peak->getLocation();
+    FLOAT_T intensity = peak->getIntensity(); 
+    if (location > min_mz && location < max_mz) {
+      if (normalize) {
+        peak_colors[peak] = "blue";
+      } else {
+        observed_file << location<< "\t" << intensity << "\tnolabel\tred" << endl;
+        spectrums_file << location<< "\t" << intensity  << "\tnolabel\tblue" << endl;
+      }
+    }
+  }
+  
+
+  observed_file.close();
+  // make spectacle file for theoretical peaks
+  FLOAT_T* index = theoretical;
+  int i = 0;
+  int match_count = 0;
+  int mismatch_count = 0;
+  while (i <= max_mz)  {
+    if (((*index > 1 && !noflanks) || *index > 26) && i >= min_mz) {
+        theoretical_file << i << "\t" << *index << "\tnolabel\tred" << endl;
+      Peak * peak = spectrum->getNearestPeak(i, 1);
+      if (peak != NULL) {
+        ++match_count;
+        peak_colors[peak] = "green";
+        spectrums_file << i << "\t" << -10000 << "\tnolabel\tgreen" << endl;
+        //spectrums_file << get_peak_location(peak) << "\t" << pow (get_peak_intensity(peak) * average * normalize, 0.2) << "\tnolabel\tgreen" << endl;
+      } else {
+        ++mismatch_count;
+        spectrums_file << i << "\t" << -10000 << "\tnolabel\tred" << endl;
+      }
+    }
+    ++i;
+    ++index;
+  }
+  FLOAT_T location;
+  FLOAT_T intensity;
+  for (map<Peak *, string>::iterator it = peak_colors.begin(); it != peak_colors.end(); ++it) {
+    location = it->first->getLocation();
+    intensity = it->first->getIntensity();;
+    //spectrums_file << location << "\t" << pow(intensity * average * normalize, 0.2) << "\tnolabel\t" << it->second << endl;
+    spectrums_file << location << "\t" << intensity << "\tnolabel\t" << it->second << endl;
+  }
+
+  theoretical_file.close();
+  spectrums_file.close();
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/xlink/xhhc_scorer.h b/src/app/xlink/xhhc_scorer.h
new file mode 100644
index 0000000..cd57eb1
--- /dev/null
+++ b/src/app/xlink/xhhc_scorer.h
@@ -0,0 +1,146 @@
+/**
+ * \file xhhc_scorer.h 
+ * \brief object to score spectrum vs. xlink peptides
+ */
+/*
+ * AUTHOR: Sean McIlwain
+ * $Revision: 1.0 $
+ *****************************************************************************/
+#ifndef XHHC_SCORER_H
+#define XHHC_SCORER_H
+
+#include "model/Scorer.h"
+#include "XHHC_Peptide.h"
+
+#include "LinkedIonSeries.h"
+
+#include <map>
+
+class XHHC_Scorer {
+ private:
+  bool print_spectrums_; ///< Indicator of whether to print the spectrums
+  Scorer* scorer_; ///< The crux scorer
+  Crux::Spectrum* current_spectrum_; ///< Spectrum that this scorer works on
+  FLOAT_T max_mz_; ///< Maximum mz allocated for scorer
+  int max_bin_; ///< Maximum bin idx for scorer.
+  FLOAT_T bin_width_; ///< bin width for scorer
+  FLOAT_T bin_offset_; ///<bin offset for scorer
+
+  static int ion_counter_; ///< Ion counter
+
+  /**
+   * Prints out an annotated spectrum
+   * creates three files for spectacle.pl: spectrums.out, 
+   * theoretical.out, observed.out
+   */
+  void printSpectrums(
+    FLOAT_T* theoretical, ///< The theoretical spectrum array
+    Crux::Spectrum* spectrum ///< The spectrum to print
+    );
+  
+  /**
+   * Initializes an empty XHHC_Scorer object
+   */
+  void init();
+
+ public:
+
+  /**
+   * \returns an empty XHHC_Scorer object
+   */
+  XHHC_Scorer();
+
+  /**
+   * \returns an XHHC_Scorer object with the max_mz initialized
+   */
+  XHHC_Scorer(
+    FLOAT_T max_mz ///< max_mz for the scorer.
+    );
+
+  /**
+   * Destructor
+   */
+  virtual ~XHHC_Scorer();
+
+  /**
+   * \returns the max_mz
+   */
+  FLOAT_T getMaxMz();
+
+  /**
+   * \returns the xcorr score for the spectrum and the ion_series
+   */
+  FLOAT_T scoreSpectrumVsSeries(
+    Crux::Spectrum* spectrum, ///< Spectrum to score
+    LinkedIonSeries& ion_series ///< LinkedIonSeries to score
+    );
+
+  /**
+   * \returns the number of BY ions in the Ionseries that are
+   * matched to peaks in the spectrum
+   */
+  static int getMatchedBYIons(
+    Crux::Spectrum* spectrum, ///< Spectrum to match peaks with
+    LinkedIonSeries& ion_series ///< IonSeries to use
+    );
+
+  /**
+   * adds an intensity in the theoretical map at peak idx
+   */
+  static void addIntensityMap(
+    std::map<int, FLOAT_T>& theoretical, ///< the theoretical map 
+    int idx, ///< the idx to add
+    FLOAT_T intensity ///< the corresponding intensity
+    );
+
+  /**
+   * \returns whether create a theoretical map of peak_idx,intensity pairs
+   * is sucessful
+   */
+  static bool xlinkCreateMapTheoretical(
+    LinkedIonSeries& ion_series, ///< LinkedIonSeries to create the map from -in
+    std::map<int, FLOAT_T>& theoretical ///< The theoretical map -out
+  );
+
+  /**
+   * Fills in the theoretical array using the LinkedIonSeries
+   */
+  bool hhcCreateIntensityArrayTheoretical(
+    LinkedIonSeries& ion_series, /// The linked ion series to use -in
+    FLOAT_T* theoretical       ///< the empty theoretical spectrum -out
+    );
+  
+  /*
+   * Sets the print_spectrums_ variable
+   */
+  void setPrint(
+    bool print_spectrums ///< indicator of whether we are printing spectrums
+    ); 
+
+  /**
+   * Generates the theoretical/observed arrays and scores the spectrum for xcorr
+   */
+  FLOAT_T hhcGenScoreXcorr(
+    Crux::Spectrum* spectrum,    ///< the spectrum to score -in
+    LinkedIonSeries& ion_series ///< the ion series to score against the spectrum -in
+    );
+
+  /**
+   * \returns the sum of the spectrum peak intensities of the by-ions that are matched
+   * to the LinkedIonSeries
+   */ 
+  FLOAT_T getIonCurrentExplained(
+    LinkedIonSeries& ion_series, ///<The LinkedIonSeries to match 
+    Crux::Spectrum* spectrum, ///<The spectrum to match
+    FLOAT_T& explained, ///<The ion current explained -out
+    int& by_observed ///<The number of by ions matched
+    );
+};
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif
diff --git a/src/app/xlink/xhhc_search.cpp b/src/app/xlink/xhhc_search.cpp
new file mode 100644
index 0000000..1769ba3
--- /dev/null
+++ b/src/app/xlink/xhhc_search.cpp
@@ -0,0 +1,580 @@
+/**
+ * \file xhhc_search.cpp
+ * AUTHOR: Sean McIlwain
+ * \brief Main file for crux-search-for-xlinks.
+ *
+ * Given an ms2 file and a fasta file or index, compare all spectra to
+ * peptides and cross-linked products in the fasta file/index and 
+ * return high scoring matches.
+ * Products are determined by parameters for length, mass, mass
+ * tolerance, cleavages. Score each spectrum with
+ * respect to all candidates, and rank by score. 
+ * tab-delimited file format.
+ */
+
+//XLINK INCLUDES
+#include "xhhc_scorer.h"
+#include "LinkedIonSeries.h"
+#include "xlink_compute_qvalues.h"
+#include "SearchForXLinks.h"
+#include "LinkedPeptide.h"
+#include "XHHC_Peptide.h"
+
+//CRUX INCLUDES
+#include "model/objects.h"
+#include "model/Spectrum.h"
+#include "io/SpectrumCollectionFactory.h"
+#include "model/FilteredSpectrumChargeIterator.h"
+#include "util/GlobalParams.h"
+#include "util/Params.h"
+#include "io/MatchColumns.h"
+//C++ includes
+#include <cmath>
+#include <ctime>
+#include <fstream>
+#include <iomanip>
+#include <iostream>
+
+using namespace std;
+using namespace Crux;
+
+//PRIVATE FUNCTIONS
+
+/**
+ * populate the filtered_ions vector with the products that
+ * fit within the precursor mass window
+ */
+void get_ions_from_window(
+  vector<LinkedPeptide>& filtered_ions, ///< filtered ions -out
+  vector<LinkedPeptide>& all_ions, ///< all ions in the database -in
+  FLOAT_T precursor_mass, ///<precursor mass -in
+  FLOAT_T window, ///< window value -in
+  WINDOW_TYPE_T window_type ///< window type -in
+);
+
+/**
+ * populated the filtered_ions vector with the products that
+ * have mass that is within the (min_mass,max_mass).
+ */
+void get_ions_from_mass_range(
+  vector<LinkedPeptide>& filtered_ions, ///< filtered ions -out
+  vector<LinkedPeptide>& all_ions, ///< all ions in the database -in
+  double min_mass, ///< min mass of ions to select -in
+  double max_mass ///< max mass of ions to select -in
+);
+
+/**
+ * \returns a comma delimited string of protein_id(peptide_start)
+ * locations for the peptides
+ */ 
+string get_protein_ids_locations(
+  vector<Peptide*>& peptides ///< vector of peptides
+  );
+
+/**
+ * main method for search-for-xlinks using the original code for the paper.
+ */
+int SearchForXLinks::xhhcSearchMain() {
+
+  carp(CARP_INFO, "Beginning crux xlink-search (original)");
+
+  //Get parameters
+  string ms2_file = Params::GetString("ms2 file");
+
+  FLOAT_T precursor_window = Params::GetDouble("precursor-window");
+  FLOAT_T precursor_window_weibull = Params::GetDouble("precursor-window-weibull");
+  WINDOW_TYPE_T precursor_window_type = 
+    string_to_window_type(Params::GetString("precursor-window-type"));
+  WINDOW_TYPE_T window_type_weibull = 
+    string_to_window_type(Params::GetString("precursor-window-type-weibull"));
+
+  string output_directory = Params::GetString("output-dir");
+
+  unsigned int min_weibull_points = 
+    (unsigned int)Params::GetInt("min-weibull-points");
+  int max_ion_charge = get_max_ion_charge_parameter("max-ion-charge");
+  int top_match = Params::GetInt("top-match");
+  FLOAT_T linker_mass = Params::GetDouble("link mass");
+  int scan_num = 0;
+  SpectrumZState zstate;
+ 
+  //Set the static variable for the linker mass
+  LinkedPeptide::setLinkerMass(linker_mass);
+
+  vector<LinkedPeptide> all_ions;
+  carp(CARP_DETAILED_DEBUG, "Calling find all precursor ions");
+  find_all_precursor_ions(all_ions);
+  carp(CARP_DETAILED_DEBUG, "Sort");
+  // sort filtered ions and decoy ions by mass
+  //sort(all_ions.begin(), all_ions.end());
+  if (Params::GetBool("xlink-print-db")) {
+    ostringstream oss;
+    oss << output_directory << "/" << "xlink_peptides.txt";
+    string temp = oss.str();
+    ofstream peptides_file(temp.c_str());
+    peptides_file << "mass\tsequence" << endl;
+    for (unsigned int idx = 0; idx < all_ions.size(); idx++) {
+      peptides_file << all_ions.at(idx).getMass(MONO) << "\t";
+      peptides_file << all_ions.at(idx) << endl;
+    }
+    peptides_file.flush();
+    carp(CARP_INFO, "outputted database to xlink_peptides.txt");
+    return 0;
+  }
+
+  carp(CARP_INFO, "Loading Spectra");
+  Spectrum* spectrum = NULL;
+  Crux::SpectrumCollection* spectra = SpectrumCollectionFactory::create(ms2_file);
+  spectra->parse();
+
+  FilteredSpectrumChargeIterator* spectrum_iterator =
+    new FilteredSpectrumChargeIterator(spectra);
+ 
+  FLOAT_T score;
+  // best pvalues
+
+  string target_path = output_directory + "/search-for-xlinks.target.txt";
+  ofstream search_target_file(target_path.c_str());
+  //set precision
+  search_target_file << setprecision(Params::GetInt("precision"));
+  //print header
+  search_target_file << "scan\t";
+  search_target_file << "charge\t";
+  search_target_file << "spectrum precursor m/z\t";
+  search_target_file << "spectrum neutral mass\t";
+  search_target_file << "peptide mass mono\t";
+  search_target_file << "peptide mass average\t";
+  search_target_file << "mass error(ppm)\t";
+  search_target_file << "xcorr score\t";
+  search_target_file << "xcorr rank\t";
+  search_target_file << "p-value\t";
+  search_target_file << get_column_header(DISTINCT_MATCHES_SPECTRUM_COL) << "\t";
+  search_target_file << "sequence\t";
+  search_target_file << "protein id(loc) 1\t";
+  search_target_file << "protein id(loc) 2\t";
+  search_target_file << "by total\t";
+  search_target_file << "by observable (0-1200)\t";
+  search_target_file << "by observable bin (0-1200)\t";
+  search_target_file << "by observable (0-max)\t";
+  search_target_file << "by observable bin (0-max)\t";
+  search_target_file << "by observed bin\t";
+  search_target_file << "ion current total\t";
+  search_target_file << "ion current observed" << "\t";
+  search_target_file << "ions observable bin (0-1200)" << endl;
+
+  string decoy_path = output_directory + "/search-for-xlinks.decoy.txt";
+
+  ofstream search_decoy_file (decoy_path.c_str());
+  //set precision
+  search_decoy_file << setprecision(Params::GetInt("precision"));
+  //print header
+  search_decoy_file << "scan\t";
+  search_decoy_file << "charge\t";
+  search_decoy_file << "spectrum precursor m/z\t";
+  search_decoy_file << "spectrum neutral mass\t";
+  search_decoy_file << "peptide mass mono\t";
+  search_decoy_file << "peptide mass average\t";
+  search_decoy_file << "mass error(ppm)\t";
+  search_decoy_file << "xcorr score\t";
+  search_decoy_file << "xcorr rank\t";
+  search_decoy_file << "p-value\t";
+  search_decoy_file << get_column_header(DISTINCT_MATCHES_SPECTRUM_COL) << "\t";
+  search_decoy_file << "sequence" << endl;
+
+  XHHC_Scorer hhc_scorer;
+  // main loop over spectra in ms2 file
+ 
+  int search_count = 0;
+
+  // for every observed spectrum 
+  while (spectrum_iterator->hasNext()) {
+    int charge;
+    spectrum = spectrum_iterator->next(zstate);
+
+    charge = zstate.getCharge();
+
+    //SCORER_T* scorer = new_scorer(XCORR);
+    scan_num = spectrum->getFirstScan();
+
+    if (search_count % 100 == 0)
+      carp(CARP_INFO, "count %d scan %d charge %d", search_count, scan_num, charge);
+    search_count++;
+
+    //vector<pair<FLOAT_T, LinkedPeptide> > linked_scores;
+    //vector<pair<FLOAT_T, LinkedPeptide> > single_scores;
+    vector<pair<FLOAT_T, LinkedPeptide> > scores;
+
+    vector<LinkedPeptide> target_xpeptides;
+    vector<LinkedPeptide> target_decoy_xpeptides;
+    vector<LinkedPeptide> decoy_train_xpeptides;
+    vector<LinkedPeptide> decoy_xpeptides;
+
+    FLOAT_T precursor_mz = spectrum->getPrecursorMz();
+    FLOAT_T precursor_mass = zstate.getNeutralMass(); 
+ 
+
+
+    clock_t start_clock = clock();
+
+    
+    carp(CARP_DEBUG, "finding target xpeptides in mass window...%g", precursor_window);
+    get_ions_from_window(
+      target_xpeptides,
+      all_ions,
+      precursor_mass,
+      precursor_window,
+      precursor_window_type
+      );
+
+    if (target_xpeptides.size() < 1) {
+      carp(CARP_INFO, "not enough precursors found in range, skipping scan %d charge %d", scan_num, charge);
+      continue;
+    }
+    
+
+    carp(CARP_DEBUG, "finding training xpeptides in decoy precursor window..%g", precursor_window_weibull);
+    get_ions_from_window(
+  target_decoy_xpeptides,
+  all_ions,
+  precursor_mass,
+  precursor_window_weibull,
+  window_type_weibull);
+    
+    carp(CARP_DETAILED_DEBUG, "Creating decoys for target window");
+    //create the decoys from the target found in the target_mass_window.
+    for (vector<LinkedPeptide>::iterator ion = target_xpeptides.begin();
+    ion != target_xpeptides.end(); ++ion) {
+        add_decoy(decoy_xpeptides, *ion);
+    }
+    
+    
+    carp(CARP_DETAILED_DEBUG, "Creating decoys for decoy mass window");
+    //create the decoys from the target found in the decoy_mass_window.
+    while ((decoy_train_xpeptides.size() + target_xpeptides.size()) < min_weibull_points) {
+      for (vector<LinkedPeptide>::iterator ion = target_decoy_xpeptides.begin();
+     ion != target_decoy_xpeptides.end(); ++ion) {
+  add_decoy(decoy_train_xpeptides, *ion);
+      }
+    }    
+
+    size_t num_training_points = decoy_train_xpeptides.size() + target_xpeptides.size();
+
+    carp(CARP_DEBUG, "num targets:%d", target_xpeptides.size());
+    carp(CARP_DEBUG, "num decoys:%d", decoy_xpeptides.size());
+    carp(CARP_DEBUG, "num training points:%d", num_training_points);
+
+    clock_t candidate_clock = clock();
+
+    int max_charge = min(max_ion_charge, charge);
+
+    LinkedIonSeries ion_series = LinkedIonSeries(max_charge);
+
+    // for every ion in the mass window
+    carp(CARP_DEBUG, "Scoring targets");
+    for (unsigned int idx = 0; idx < target_xpeptides.size(); idx++) {
+      //LinkedIonSeries ion_series = LinkedIonSeries(links, charge);
+      ion_series.clear();
+      ion_series.addLinkedIons(target_xpeptides[idx]);
+      score = hhc_scorer.scoreSpectrumVsSeries(spectrum, ion_series);
+      scores.push_back(make_pair(score, target_xpeptides[idx]));
+    }
+
+    carp(CARP_DEBUG, "Scoring decoys.");
+    for (unsigned int idx = 0; idx < decoy_xpeptides.size(); idx++) {
+      //LinkedIonSeries ion_series = LinkedIonSeries(links, charge);
+      ion_series.clear();
+      ion_series.addLinkedIons(decoy_xpeptides[idx]);
+      score = hhc_scorer.scoreSpectrumVsSeries(spectrum, ion_series);
+      scores.push_back(make_pair(score, decoy_xpeptides[idx]));
+    }
+
+
+    //use the decoy scores to build the estimator.
+    // create arrays to pass to crux's weibull methods
+    FLOAT_T* linked_decoy_scores_array = new FLOAT_T[num_training_points];
+
+    clock_t decoy_clock = clock();
+    carp(CARP_DEBUG, "scoring training decoys...");
+    // score all training decoys
+    for (unsigned int idx = 0; idx < decoy_train_xpeptides.size(); idx++) {
+      //LinkedIonSeries ion_series = LinkedIonSeries(links, charge);
+      ion_series.clear();
+      ion_series.addLinkedIons(decoy_train_xpeptides[idx]);
+      score = hhc_scorer.scoreSpectrumVsSeries(spectrum, ion_series);
+      linked_decoy_scores_array[idx] = score;
+    }
+  
+    clock_t train_decoy_clock = clock();
+  
+    for (unsigned int idx = 0; idx < scores.size(); idx++) {
+      if (!scores[idx].second.isDecoy())
+        linked_decoy_scores_array[idx+decoy_train_xpeptides.size()] = scores[idx].first;
+    }
+
+
+    // weibull parameters for candidates
+    FLOAT_T eta_linked = 0.0;
+    FLOAT_T beta_linked  = 0.0;
+    FLOAT_T shift_linked  = 0.0;
+    FLOAT_T correlation_linked  = 0.0;
+
+    // fit weibull to decoys
+
+    carp(CARP_DEBUG, "Fitting weibull to %d scores", num_training_points);
+    hhc_estimate_weibull_parameters_from_xcorrs(linked_decoy_scores_array, 
+            num_training_points, 
+            &eta_linked, &beta_linked, 
+            &shift_linked, &correlation_linked, 
+            spectrum, charge);
+
+    //okay we don't need the training peptides/scores anymore
+    delete []linked_decoy_scores_array;
+    vector<LinkedPeptide>().swap(decoy_train_xpeptides);
+        
+    // sort scores
+    
+    carp(CARP_DEBUG, "sorting %u scores", scores.size());
+    sort(scores.begin(), scores.end(), greater<pair<FLOAT_T, LinkedPeptide> >());
+    carp(CARP_DEBUG, "done sorting");
+    int ndecoys = 0;
+    int ntargets = 0;
+    unsigned int score_index = 0;
+
+    while (score_index < scores.size() && (ndecoys < top_match || ntargets < top_match)) {
+ 
+      
+      double ppm_error = fabs(scores[score_index].second.getMass(MONO) - precursor_mass) / 
+          scores[score_index].second.getMass(MONO) * 1e6;
+
+      double pvalue = compute_weibull_pvalue(scores[score_index].first, eta_linked, beta_linked, shift_linked);
+  
+      if (pvalue != pvalue) {
+        pvalue = 1;
+      }
+
+      if (scores[score_index].second.isDecoy() && ndecoys < top_match) {
+        ndecoys++;
+        search_decoy_file << scan_num << "\t"; 
+        search_decoy_file << charge << "\t"; 
+        search_decoy_file << precursor_mz << "\t";
+        search_decoy_file << precursor_mass << "\t";
+        search_decoy_file << scores[score_index].second.getMass(MONO) << "\t";
+        search_decoy_file << scores[score_index].second.getMass(AVERAGE) << "\t";
+        search_decoy_file << ppm_error << "\t";
+        search_decoy_file << scores[score_index].first <<"\t";
+        search_decoy_file << ndecoys << "\t";
+        search_decoy_file << pvalue << "\t";
+        search_decoy_file << decoy_xpeptides.size() << "\t";
+        search_decoy_file << scores[score_index].second << endl;
+
+      } else if (!scores[score_index].second.isDecoy() && ntargets < top_match) {
+        ntargets++;
+        search_target_file << scan_num << "\t"; 
+        search_target_file << charge << "\t"; 
+        search_target_file << precursor_mz << "\t";
+        search_target_file << precursor_mass << "\t";
+        search_target_file << scores[score_index].second.getMass(MONO) << "\t";
+        search_target_file << scores[score_index].second.getMass(AVERAGE) << "\t";
+        search_target_file << ppm_error << "\t";
+        search_target_file << scores[score_index].first <<"\t";
+        search_target_file << ntargets << "\t";
+        search_target_file << pvalue << "\t";
+        search_target_file << target_xpeptides.size() << "\t";
+        search_target_file << scores[score_index].second << "\t";
+
+        //output protein ids/peptide locations.  If it is a linear, dead or self loop, only
+        //use the 1st field.
+        string sequence1  = scores[score_index].second.getPeptides()[0].getSequence();
+        vector<Peptide*>& peptides1 = get_peptides_from_sequence(sequence1);
+        string result_string = get_protein_ids_locations(peptides1);
+        search_target_file << result_string << "\t";
+        //if it is cross-linked peptide, use the second field
+        if (scores[score_index].second.isCrossLinked()) {
+          string sequence2  = scores[score_index].second.getPeptides()[1].getSequence();
+          vector<Peptide*>& peptides2 = get_peptides_from_sequence(sequence2);
+          string result_string = get_protein_ids_locations(peptides2);
+          search_target_file << result_string;
+        }
+        search_target_file <<"\t";
+                //get theoretical ions count for (0-1200, with 1Da bins).
+        XHHC_Scorer scorer;
+        LinkedIonSeries ion_series(charge);
+        ion_series.addLinkedIons(scores[score_index].second);
+
+        FLOAT_T ion_current_observed;
+        FLOAT_T ion_current_total = spectrum->getTotalEnergy();
+        int by_total = ion_series.getTotalBYIons();
+        int by_observable;
+        int by_observable2;
+        int by_observable_bin;
+        int by_observable_bin2;
+        int by_observed_bin;
+        int ions_observable;
+        int ions_observable_bin;
+        ion_series.getObservableIons(0, 1200, BIN_WIDTH_MONO, ions_observable, ions_observable_bin);
+        ion_series.getObservableBYIons(0, 1200, BIN_WIDTH_MONO, by_observable, by_observable_bin);
+        ion_series.getObservableBYIons(0, spectrum->getMaxPeakMz(), BIN_WIDTH_MONO, by_observable2, by_observable_bin2);
+        scorer.getIonCurrentExplained(ion_series, spectrum, ion_current_observed, by_observed_bin);
+        
+  
+
+        search_target_file << by_total << "\t";
+        search_target_file << by_observable << "\t";
+        search_target_file << by_observable_bin << "\t";
+        search_target_file << by_observable2 << "\t";
+        search_target_file << by_observable_bin2 << "\t";
+        search_target_file << by_observed_bin << "\t";
+        search_target_file << ion_current_total << "\t";
+        search_target_file << ion_current_observed << "\t";
+        search_target_file << ions_observable_bin;
+        
+        search_target_file << endl;
+
+
+        } 
+      score_index++;
+    }
+
+    //free_spectrum(spectrum);
+
+    carp(CARP_DETAILED_DEBUG, "Done with spectrum %d", scan_num);
+  } // get next spectrum
+  search_target_file.close();
+  search_decoy_file.close();
+
+  //Calculate q-values.
+  carp(CARP_INFO, "Computing Q-Values");
+
+  //free memory.
+  xlink_compute_qvalues();
+  delete spectrum_iterator;
+  delete spectra;
+  free_peptides();
+
+  // get list of mods
+  PEPTIDE_MOD_T** peptide_mods = NULL;
+  int num_peptide_mods = generate_peptide_mod_list( &peptide_mods );
+  for(int mod_idx = 0; mod_idx < num_peptide_mods; mod_idx++) {
+    free_peptide_mod(peptide_mods[mod_idx]);
+  }
+  free(peptide_mods);
+
+  carp(CARP_INFO, "Elapsed time: %.3g s", wall_clock() / 1e6);
+  carp(CARP_INFO, "Finished crux search-for-xlinks.");
+
+  return(0);
+}
+
+/**
+ * populate the filtered_ions vector with the ions that
+ * fit within the precursor mass window
+ */
+void get_ions_from_window(
+  vector<LinkedPeptide>& filtered_ions, ///< filtered ions -out
+  vector<LinkedPeptide>& all_ions, ///< all ions in the database -in
+  FLOAT_T precursor_mass, ///<precursor mass -in
+  FLOAT_T window, ///< window value -in
+  WINDOW_TYPE_T window_type ///< window type -in
+  ) {
+
+  double min_mass = 0;
+  double max_mass = 0;
+  
+  if (window_type == WINDOW_MASS) {
+    min_mass = precursor_mass - window;
+    max_mass = precursor_mass + window;
+  } else if (window_type == WINDOW_PPM) {
+    min_mass = precursor_mass * (1.0 - window * 1e-6);
+    max_mass = precursor_mass * (1.0 + window * 1e-6);
+  } else {
+    carp(CARP_FATAL, "Precursor m/z window type not supported!");
+  }
+
+  get_ions_from_mass_range(filtered_ions, all_ions, min_mass, max_mass);
+
+}
+
+/**
+ * populated the filtered_ions vector with the products that
+ * have mass that is within the (min_mass,max_mass).
+ */
+void get_ions_from_mass_range(
+  vector<LinkedPeptide>& filtered_ions, ///< filtered ions -out
+  vector<LinkedPeptide>& all_ions, ///< all ions in the database -in
+  double min_mass, ///< min mass of ions to select -in
+  double max_mass ///< max mass of ions to select -in
+  ) {
+
+  MASS_TYPE_T mass_type = GlobalParams::getIsotopicMass();
+
+  filtered_ions.clear();
+  for (vector <LinkedPeptide>::iterator ion = all_ions.begin();
+    ion != all_ions.end();
+    ++ion) {
+    double mass = ion -> getMass(mass_type);
+    if (mass >= min_mass && mass <= max_mass) {
+      filtered_ions.push_back(*ion);
+    }
+  }
+}
+
+/**
+ * given a peptide, populate the protein_ids_locations
+ * with a set of strings that are protein_id(peptide start index).
+ */
+void get_protein_ids_locations(
+  Peptide *peptide, ///< peptide to generate locations from -in
+  set<string>& protein_ids_locations ///< set of protein_id(peptide start index). -out
+  ) {
+
+  std::ostringstream protein_field_stream;
+
+  for (PeptideSrcIterator iter = peptide->getPeptideSrcBegin();
+       iter != peptide->getPeptideSrcEnd();
+       ++iter) {
+
+    PeptideSrc* peptide_src = *iter;
+    Protein* protein = peptide_src->getParentProtein();
+    string& protein_id = protein->getIdPointer();
+    int peptide_loc = peptide_src->getStartIdx();
+    std::ostringstream protein_loc_stream;
+    protein_loc_stream << protein_id << "(" << peptide_loc << ")";
+    protein_ids_locations.insert(protein_loc_stream.str());
+    
+  }
+
+}
+
+/**
+ * \returns a comma delimited string of protein_id(peptide_start)
+ * locations for the peptides
+ */ 
+string get_protein_ids_locations(
+  vector<Peptide*>& peptides ///< vector of peptides
+  ) {
+  
+  set<string> protein_ids_locations;
+
+  for (unsigned int idx = 0; idx < peptides.size(); idx++) {
+    get_protein_ids_locations(peptides[idx], protein_ids_locations);
+  }
+
+  set<string>::iterator result_iter = protein_ids_locations.begin();
+
+  string protein_field_string = *result_iter;
+
+  while(++result_iter != protein_ids_locations.end()) {
+    protein_field_string += "," + *result_iter;
+  }
+
+  return protein_field_string;
+
+}
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/app/xlink/xlink_assign_ions.cpp b/src/app/xlink/xlink_assign_ions.cpp
new file mode 100644
index 0000000..59fe226
--- /dev/null
+++ b/src/app/xlink/xlink_assign_ions.cpp
@@ -0,0 +1,286 @@
+//TODO - change cerr/couts to carp.
+
+#include "xlink_assign_ions.h"
+
+#include "XLinkMatch.h"
+#include "SelfLoopPeptide.h"
+#include "XLinkPeptide.h"
+
+#include "model/objects.h"
+#include "model/Scorer.h"
+#include "model/IonSeries.h"
+#include "model/Ion.h"
+#include "io/SpectrumCollectionFactory.h"
+#include "io/DelimitedFile.h"
+#include "util/Params.h"
+
+#include <math.h>
+#include <assert.h>
+#include <ctype.h>
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+#include <iostream>
+#include <fstream>
+
+
+using namespace Crux;
+
+XLinkAssignIons::XLinkAssignIons() {
+}
+
+XLinkAssignIons::~XLinkAssignIons() {
+}
+
+int XLinkAssignIons::main(int argc, char** argv) {
+  /* Get Arguments */
+  string peptideAStr = Params::GetString("peptide A");
+  string peptideBStr = Params::GetString("peptide B");
+  char* peptideA = my_copy_string(peptideAStr.c_str());
+  char* peptideB = my_copy_string(peptideBStr.c_str());
+  
+  int posA     = Params::GetInt("pos A");
+  int posB     = Params::GetInt("pos B");
+  int charge   = Params::GetInt("charge state"); 
+  int scan_num = Params::GetInt("scan number"); 
+
+  string ms2_file = Params::GetString("ms2 file");
+
+  XLinkPeptide::setLinkerMass(Params::GetDouble("link mass"));
+ 
+  // create new ion series
+  
+  // a single peptide linked to itself
+  if (strcmp(peptideB, "NULL") == 0) {
+    cout << "B is null" << endl; 
+    peptideB = NULL;
+  }
+
+  // read ms2 file
+  Crux::SpectrumCollection* collection = SpectrumCollectionFactory::create(ms2_file);
+  collection->parse();
+
+  
+  //cout << "lp " << lp << endl; 
+  Spectrum* spectrum = NULL;
+  Spectrum* current_spectrum = NULL;
+
+  //TODO allow a binary search on both mgf and ms2 files.
+
+  for (SpectrumIterator spectrum_iterator = collection->begin();
+    spectrum_iterator != collection->end();
+    ++spectrum_iterator) {
+
+    current_spectrum = *spectrum_iterator;
+    if (current_spectrum->getFirstScan() == scan_num) {
+      spectrum = current_spectrum;
+      break;
+    }
+  }
+
+  // search for spectrum with correct scan number
+  if (spectrum == NULL) {
+    carp(CARP_ERROR, "Failed to find spectrum with scan number %d.", scan_num);
+    delete collection;
+    exit(1);
+  }
+
+  //created linked peptide.
+  XLinkMatch* xlp = NULL;
+  if (peptideB != NULL) {
+    xlp = new XLinkPeptide(peptideA, peptideB, posA-1, posB-1);
+  } else {
+    xlp = new SelfLoopPeptide(peptideA, posA-1, posB-1); 
+  }
+  
+  IonConstraint* ion_constraint = IonConstraint::newIonConstraintSequestXcorr(charge);
+  ion_constraint->setUseIonType(BY_ION, false);
+  ion_constraint->setUseIonType(BYA_ION, false);
+  ion_constraint->setUseIonType(ALL_ION, false);
+  ion_constraint->setUseIonType(A_ION, Params::GetBool("use-a-ions"));
+  ion_constraint->setUseIonType(B_ION, Params::GetBool("use-b-ions"));
+  ion_constraint->setUseIonType(C_ION, Params::GetBool("use-c-ions"));
+  ion_constraint->setUseIonType(X_ION, Params::GetBool("use-x-ions"));
+  ion_constraint->setUseIonType(Y_ION, Params::GetBool("use-y-ions"));
+  ion_constraint->setUseIonType(Z_ION, Params::GetBool("use-z-ions"));
+  
+  IonSeries* ion_series = new IonSeries(ion_constraint, charge);
+  xlp->predictIons(ion_series, charge);
+
+  print_spectrum(spectrum, xlp, ion_series);
+
+  // free heap
+  delete collection;
+  delete ion_series;
+  delete ion_constraint;
+  delete xlp;
+  //free_spectrum(spectrum);
+  return 0;
+}
+
+void XLinkAssignIons::print_spectrum(
+  Spectrum* spectrum,
+  XLinkMatch* xlp,
+  IonSeries* ion_series
+  ) {
+ 
+  carp(CARP_INFO, "Number of peaks = %d", spectrum->getNumPeaks());
+
+  FLOAT_T bin_width = Params::GetDouble("mz-bin-width");
+      
+  map<Peak*, Ion*> matched;
+  double matched_intensity = 0;
+      
+  for (IonIterator ion_iterator = ion_series->begin();
+       ion_iterator != ion_series->end();
+        ++ion_iterator) {
+    
+    Ion* ion = *ion_iterator;
+    Peak* peak = spectrum->getMaxIntensityPeak(ion->getMassZ(), bin_width);  
+    if (peak != NULL) {
+      if (matched.find(peak) == matched.end()) {
+        matched_intensity += peak->getIntensity();
+        matched[peak] = ion;
+      } else {
+        carp(CARP_WARNING, "Peak at %g matches more than one theoretical peak.", peak->getLocation());
+      }
+    }
+  }
+
+  double total_intensity = spectrum->getTotalEnergy();
+  double frac_intensity = matched_intensity / total_intensity;
+  carp(CARP_INFO, "Fraction matched intensity = %lf / %lf = %lf",
+       matched_intensity, total_intensity, frac_intensity);
+      
+
+  //now print out the spectrum
+
+  DelimitedFile result_file;
+
+  unsigned int mz_obs_col = result_file.addColumn("m/z obs");
+  unsigned int int_col = result_file.addColumn("intensity");
+  unsigned int int_matched_col = result_file.addColumn("matched intensity");
+  unsigned int mz_calc_col = result_file.addColumn("m/z calc");
+  unsigned int mass_obs_col = result_file.addColumn("mass obs");
+  unsigned int mass_calc_col = result_file.addColumn("mass calc");
+  unsigned int ppm_col = result_file.addColumn("ppm(Mass)");
+  unsigned int ion_col = result_file.addColumn("ion");
+  unsigned int seq_col = result_file.addColumn("sequence");
+      
+  for (PeakIterator peak_iter = spectrum->begin();
+    peak_iter != spectrum->end();
+    ++peak_iter) {
+
+    Peak * peak = *peak_iter;
+    if (peak->getIntensity() > 0) { 
+      unsigned int row_idx = result_file.addRow();
+      result_file.setValue(mz_obs_col, row_idx, peak->getLocation());
+      result_file.setValue(int_col, row_idx, peak->getIntensity());
+      if (matched.find(peak) != matched.end()) {
+        Ion* ion = matched[peak];
+        double mz_calc = ion->getMassZ();
+        double mz_obs = peak->getLocation();
+        int charge = ion->getCharge();
+        double mass_calc = ion->getMassFromMassZ();
+        double mass_obs = (mz_obs - MASS_PROTON) * (double)charge;
+        double ppm =  fabs(mass_calc - mass_obs) / mass_calc * 1e6;
+         
+        result_file.setValue(int_matched_col, row_idx, peak->getIntensity()); 
+        result_file.setValue(mz_calc_col, row_idx, mz_calc);
+        result_file.setValue(mass_obs_col, row_idx, mass_obs);
+        result_file.setValue(mass_calc_col, row_idx, mass_calc);
+        result_file.setValue(ppm_col, row_idx, ppm);
+              
+        ostringstream ion_string_oss;
+        switch(ion->getType()) {
+          case A_ION:
+            ion_string_oss << "a";
+            break;
+          case B_ION:
+            ion_string_oss << "b";
+            break;
+          case C_ION:
+            ion_string_oss << "c";
+            break;
+          case X_ION:
+            ion_string_oss << "x";
+            break;
+          case Y_ION:
+            ion_string_oss << "y";
+            break;
+          case Z_ION:
+            ion_string_oss << "z";
+            break;
+          default:
+            ion_string_oss << "u";
+        }
+        ion_string_oss << "(+" << charge << ")";
+
+        result_file.setValue(ion_col, row_idx, ion_string_oss.str());
+        result_file.setValue(seq_col, row_idx, xlp->getIonSequence(ion));
+      }
+    }
+  }
+  cout << result_file;
+
+}
+
+void XLinkAssignIons::processParams() {
+  for (char c = 'A'; c <= 'Z'; c++) {
+    double deltaMass = Params::GetDouble(string(1, c));
+    increase_amino_acid_mass(c, deltaMass);
+  }
+}
+
+string XLinkAssignIons::getName() const {
+  return "xlink-assign-ions";
+}
+
+string XLinkAssignIons::getDescription() const {
+  return
+    "Given a spectrum and a pair of cross-linked peptides, assign theoretical "
+    "ion type labels to peaks in the observed spectrum.";
+}
+
+vector<string> XLinkAssignIons::getArgs() const {
+  string arr[] = {
+    "peptide A",
+    "peptide B",
+    "pos A",
+    "pos B",
+    "link mass",
+    "charge state",
+    "scan number",
+    "ms2 file"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector<string> XLinkAssignIons::getOptions() const {
+  string arr[] = {
+    "verbosity",
+    "spectrum-parser",
+    "fragment-mass",
+    "max-ion-charge",
+    "mz-bin-width",
+    "precision"
+  };
+  return vector<string>(arr, arr + sizeof(arr) / sizeof(string));
+}
+
+vector< pair<string, string> > XLinkAssignIons::getOutputs() const {
+  vector< pair<string, string> > outputs;
+  outputs.push_back(make_pair("stdout",
+    "tab-delimited text in which each row is a peak in the observed spectrum, "
+    "and the columns are <ol>"
+    "<li>The m/z value.</li>"
+    "<li>The observed intensity.</li>"
+    "<li>The matched intensity.</li>"
+    "<li>The calculated m/z value of the theoretical peak.</li>"
+    "<li>The mass associated with the observed peak.</li>"
+    "<li>The mass difference (in ppm) between the observed and theoretical peaks.</li>"
+    "<li>The ion type, specified as b or y, followed by the charge state in parentheses.</li>"
+    "<li>The amino acid sequence of the fragment.</li>"));
+  return outputs;
+}
+
diff --git a/src/app/xlink/xlink_assign_ions.h b/src/app/xlink/xlink_assign_ions.h
new file mode 100644
index 0000000..e2ccbe1
--- /dev/null
+++ b/src/app/xlink/xlink_assign_ions.h
@@ -0,0 +1,31 @@
+#ifndef XLINK_ASSIGN_IONS_H
+#define XLINK_ASSIGN_IONS_H
+
+#include "app/CruxApplication.h"
+#include "model/Spectrum.h"
+#include "LinkedIonSeries.h"
+#include "model/objects.h"
+
+class XLinkAssignIons : public CruxApplication {
+ public:
+  XLinkAssignIons();
+  ~XLinkAssignIons();
+
+  virtual int main(int argc, char** argv);
+  virtual void processParams();
+  virtual std::string getName() const;
+  virtual std::string getDescription() const;
+  virtual std::vector<std::string> getArgs() const;
+  virtual std::vector<std::string> getOptions() const;
+  virtual std::vector< std::pair<std::string, std::string> > getOutputs() const;
+
+ private:
+  void print_spectrum(
+    Crux::Spectrum* spectrum,
+    XLinkMatch* xlp,
+    IonSeries* ion_series
+  );
+};
+
+#endif
+
diff --git a/src/app/xlink/xlink_compute_qvalues.cpp b/src/app/xlink/xlink_compute_qvalues.cpp
new file mode 100644
index 0000000..3cf253d
--- /dev/null
+++ b/src/app/xlink/xlink_compute_qvalues.cpp
@@ -0,0 +1,282 @@
+//TODO - change cout/cerrs to carp.
+
+#include "xhhc.h"
+#include "LinkedIonSeries.h"
+#include "xhhc_scorer.h"
+#include "LinkedPeptide.h"
+
+#include "util/crux-utils.h"
+#include "util/Params.h"
+#include "model/objects.h"
+#include "model/Scorer.h"
+#include "io/DelimitedFile.h"
+#include "io/MatchColumns.h"
+
+#include "xlink_compute_qvalues.h"
+
+#include <math.h>
+#include <assert.h>
+#include <ctype.h>
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+#include <iostream>
+#include <fstream>
+
+void getBestBonf(DelimitedFile& matches, int start, int stop, 
+  int& best_index, double& best_bonf) {
+
+  int numScans = stop - start + 1;
+  //if there is only 1 scan, then return it.
+  if (numScans == 1) {
+    best_index = start;
+    double pvalue = matches.getDouble("p-value", best_index);
+    int ntests = matches.getInteger(get_column_header(DISTINCT_MATCHES_SPECTRUM_COL), best_index);
+    best_bonf = bonferroni_correction(pvalue, ntests);
+  } else {
+    map<int, pair<int, double> > charge_best_score; 
+    map<int, int> charge_ntests;
+
+    for (int match_idx = start;match_idx <= stop;match_idx++) {
+      int charge = matches.getInteger("charge", match_idx);
+      double pvalue = matches.getDouble("p-value", match_idx);
+
+      if (charge_best_score.find(charge) == charge_best_score.end()) {
+        charge_best_score[charge] = make_pair(match_idx, pvalue);
+      } else if (pvalue < charge_best_score[charge].second) {
+        charge_best_score[charge] = make_pair(match_idx, pvalue);
+      }
+      if (charge_ntests.find(charge) == charge_ntests.end()) {
+        int ntests = matches.getInteger(get_column_header(DISTINCT_MATCHES_SPECTRUM_COL), match_idx);
+        charge_ntests[charge] = ntests;
+      }
+    }
+  
+  
+    int best_charge = charge_best_score.begin() -> first;
+    double best_charge_pvalue = charge_best_score[best_charge].second;
+    double best_charge_pvalue_bonf = 
+      bonferroni_correction(best_charge_pvalue, charge_ntests[best_charge]);
+
+    int best_charge_idx = charge_best_score[best_charge].first;
+
+    for (map<int, pair<int, double> >::iterator iter = 
+      charge_best_score.begin();
+      iter != charge_best_score.end();
+      ++iter) {
+
+      double current_charge_pvalue_bonf =
+        bonferroni_correction(iter -> second.second, charge_ntests[iter -> first]);
+      if (current_charge_pvalue_bonf < best_charge_pvalue_bonf) {
+        best_charge = iter -> first;
+        best_charge_pvalue = iter -> second.second;
+        best_charge_pvalue_bonf = current_charge_pvalue_bonf;
+        best_charge_idx = charge_best_score[best_charge].first;  
+      }
+    
+    }
+
+    int ntests_total = 0;
+    for (map<int, int>::iterator iter =
+      charge_ntests.begin();
+      iter != charge_ntests.end();
+      ++iter) {
+
+      ntests_total += iter -> second;
+    }
+
+    best_bonf = bonferroni_correction(best_charge_pvalue, ntests_total);
+    best_index = best_charge_idx;
+  }
+}
+
+void collapseScans(DelimitedFile& matches_in, DelimitedFile& matches_out) {
+
+  matches_out.clear();
+  //matches_out.addColumns(matches_in.getColumnNames());
+  vector<string>& column_names = matches_in.getColumnNames();
+  for (unsigned int idx = 0; idx < column_names.size(); idx++) {
+    matches_out.addColumn(column_names[idx]);
+  }
+  
+  //make sure scans are together.
+  carp(CARP_DETAILED_DEBUG, "Sorting matches by scan");
+  matches_in.sortByIntegerColumn("scan");
+
+  matches_out.addColumn("p-value bonf.");
+
+  if (matches_in.numRows() == 0) {
+    return;
+  }
+
+  int last_scan = matches_in.getInteger("scan", 0);
+  int first_row = 0;
+  int best_row = 0;
+  double best_bonf = 0;
+  
+
+  for (unsigned int match_idx = 0;
+    match_idx < matches_in.numRows(); 
+    match_idx++) {
+
+    int current_scan = matches_in.getInteger("scan", match_idx);
+    if (last_scan != current_scan) {
+      //process the scans between the first and match_idx-1.
+      //find the best row and calculate the bonferroni corrected p-value.
+      carp(CARP_DEBUG, "Collaping %d %d %d", last_scan, first_row, match_idx-1);
+      getBestBonf(matches_in, first_row, match_idx-1, best_row, best_bonf);  
+      carp(CARP_DEBUG, "Copying row best: %d %lf", best_row, best_bonf);
+      //update matches out
+      int new_row = matches_out.addRow();
+      matches_in.copyToRow(matches_out, best_row, new_row);
+      carp(CARP_DEBUG, "Adding bonferroni");
+      matches_out.setValue<double>("p-value bonf.", new_row, best_bonf);
+
+
+      //update first_row and last scan.
+      first_row = match_idx;
+      last_scan = current_scan;
+    }
+  }
+
+  carp(CARP_DEBUG, "Doing last entry");
+  //finish the last entry
+  getBestBonf(matches_in, first_row, matches_in.numRows() - 1, best_row, best_bonf);
+  carp(CARP_DEBUG, "best: %d %lf", best_row, best_bonf);
+  int new_row = matches_out.addRow();
+  matches_in.copyToRow(matches_out, best_row, new_row);
+  matches_out.setValue("p-value bonf.", new_row, best_bonf);
+
+
+
+
+}
+
+
+int xlink_compute_qvalues() {
+
+  /* Get Arguments */
+
+  carp(CARP_INFO, "reading targets");
+  string output_dir = Params::GetString("output-dir");
+  string target_filename = "search-for-xlinks.target.txt";
+
+  //Read in targets.
+  string target_path = output_dir + "/" + target_filename;
+  DelimitedFile target_matches(target_path);
+
+  //cout << target_matches << endl;
+
+  //Read in decoys.
+
+  carp(CARP_INFO, "reading decoys");
+
+  string decoy_filename = "search-for-xlinks.decoy.txt";
+  string decoy_path = output_dir + "/" + decoy_filename;
+  DelimitedFile decoy_matches(decoy_path);
+
+  //cout << decoy_matches << endl;
+
+  //Collapse to the best target/decoy and calculate bonferonni corrected p-value.
+
+  carp(CARP_INFO, "collapsing targets");
+  DelimitedFile target_matches_bonf;
+  collapseScans(target_matches, target_matches_bonf);
+
+  carp(CARP_INFO, "collapsing decoys");
+  DelimitedFile decoy_matches_bonf;
+  collapseScans(decoy_matches, decoy_matches_bonf);
+
+  //Sort by increasing p-value.
+  carp(CARP_INFO, "Sorting by p-value bonf.");
+  target_matches_bonf.sortByFloatColumn("p-value bonf.");
+  decoy_matches_bonf.sortByFloatColumn("p-value bonf."); 
+
+  //test the decoy p-values for accuracy.
+  for (unsigned int idx = 0; idx < decoy_matches_bonf.numRows(); idx++) {
+    double calc_pvalue = decoy_matches_bonf.getDouble("p-value bonf.", idx);
+    double rank_pvalue = (double)(idx + 1) / (double) decoy_matches_bonf.numRows();
+
+    if ((calc_pvalue > 2 * rank_pvalue) || (calc_pvalue < 0.5 * rank_pvalue)) {
+      carp(CARP_WARNING, "inaccurate p-values!");
+      carp(CARP_WARNING, "scan:%d charge:%d mass: %g rank:%g calc:%g", 
+        decoy_matches_bonf.getInteger("scan", idx),
+        decoy_matches_bonf.getInteger("charge", idx),
+        decoy_matches_bonf.getDouble("spectrum neutral mass"),
+        rank_pvalue,
+        calc_pvalue);
+    } 
+  }
+  
+  carp(CARP_INFO, "Adding q-value column");
+  target_matches_bonf.addColumn("fdr b-h");
+  target_matches_bonf.addColumn("fdr decoy");
+  target_matches_bonf.addColumn("q-value b-h");
+  target_matches_bonf.addColumn("q-value decoy");
+
+  //carp(CARP_INFO,"Calculating q-values");
+  unsigned int decoy_idx = 0;
+  //cout <<"Number of target rows:"<<target_matches_bonf.numRows()<<endl;
+  for (unsigned int target_idx = 0; 
+    target_idx < target_matches_bonf.numRows(); 
+    target_idx++) {
+
+    //calculate q-value by b-h
+    double current_pvalue = target_matches_bonf.getDouble("p-value bonf.", target_idx);
+    //cout <<"Current pvalue:"<<current_pvalue<<endl;
+    
+    double fdr_bh = (double) target_matches_bonf.numRows() /
+      (double)(target_idx + 1) *
+      current_pvalue;
+
+    //cout <<"q_value_bh:"<<q_value_bh<<endl;
+
+    while ((decoy_idx < decoy_matches_bonf.numRows()) && 
+           (decoy_matches_bonf.getDouble("p-value bonf.", decoy_idx) <= 
+            current_pvalue)) {
+      decoy_idx++;
+    }
+
+    double fdr_decoy = 0;
+    if (decoy_idx != 0) {
+      fdr_decoy = (double)decoy_idx / (double)(target_idx + 1);
+    }
+
+    
+
+    //cout <<"Setting row "<<target_idx<<":"<<q_value_bh<<":"<<q_value_decoy<<endl;
+    target_matches_bonf.setValue("fdr b-h", target_idx, fdr_bh);
+    target_matches_bonf.setValue("fdr decoy", target_idx, fdr_decoy);
+  }
+
+  double min_fdr = 1.0;
+  for (int idx = target_matches_bonf.numRows()-1; idx >= 0; idx--) {
+    double cur_fdr = target_matches_bonf.getDouble("fdr b-h", idx);
+    if (cur_fdr < min_fdr) {
+      min_fdr = cur_fdr;
+    }
+    target_matches_bonf.setValue("q-value b-h", idx, min_fdr); 
+  }
+
+  min_fdr = 1.0;
+  for (int idx = target_matches_bonf.numRows()-1; idx >= 0; idx--) {
+    double cur_fdr = target_matches_bonf.getDouble("fdr decoy", idx);
+    if (cur_fdr < min_fdr) {
+      min_fdr = cur_fdr;
+    }
+    target_matches_bonf.setValue("q-value decoy", idx, min_fdr); 
+  }
+
+  
+
+  //sort back by scans? or q-value?
+  //target_matches_bonf.sortByFloatColumn("q-value decoy");
+
+  string result_file = output_dir + "/search-for-xlinks.qvalues..txt";
+  target_matches_bonf.saveData(result_file);
+
+  result_file = output_dir + "/search-for-xlinks.pvalues.decoy.txt";
+  decoy_matches_bonf.saveData(result_file);
+
+  return 0;
+}
diff --git a/src/app/xlink/xlink_compute_qvalues.h b/src/app/xlink/xlink_compute_qvalues.h
new file mode 100644
index 0000000..a8b0d67
--- /dev/null
+++ b/src/app/xlink/xlink_compute_qvalues.h
@@ -0,0 +1,8 @@
+#ifndef XLINK_COMPUTE_QVALUES_H
+#define XLINK_COMPUTE_QVALUES_H
+
+
+int xlink_compute_qvalues();
+
+
+#endif
diff --git a/src/app/xlink/xlink_predict_peptide_ions.cpp b/src/app/xlink/xlink_predict_peptide_ions.cpp
new file mode 100644
index 0000000..9cda46b
--- /dev/null
+++ b/src/app/xlink/xlink_predict_peptide_ions.cpp
@@ -0,0 +1,381 @@
+#include "IonSeries.h"
+#include "XLinkMatch.h"
+#include "XLinkPeptide.h"
+#include "LinearPeptide.h"
+#include "SelfLoopPeptide.h"
+#include "util/Params.h"
+
+#include <iostream>
+#include <fstream>
+
+using namespace std;
+
+int modified_aa_string_length(
+  MODIFIED_AA_T* aa_string) {
+
+  if (aa_string == NULL) {
+    return 0;
+  }
+
+  int ans = 0;
+
+  while (aa_string[ans] != MOD_SEQ_NULL) {
+    ans++;
+  }
+
+  return ans;
+}
+
+
+int main(int argc, char** argv) {
+
+  char* peptideA = NULL;
+  char* peptideB = NULL;
+  int posA = 0;
+  int posB = 0;
+  FLOAT_T linker_mass = 0;
+  int charge = 1; 
+  bool print_spectrum = false;
+
+
+  /* Verbosity level for set-up/command line reading */
+  set_verbosity_level(CARP_ERROR);
+  
+  /* Define optional command line arguments */
+  const char* option_list[] = {
+    "verbosity",
+    "version",
+    "use-flanking-peaks",
+    "print-theoretical-spectrum",
+    "parameter-file"
+  };
+  int num_options = sizeof(option_list) / sizeof(char*);
+
+  /* Define required command line arguments */
+  const char* argument_list[] = {"peptide A",
+                                 "peptide B",
+                                 "pos A",
+                                 "pos B",
+                                 "charge state",
+                                 "link mass"};
+
+  int num_arguments = sizeof(argument_list) / sizeof(char*);
+
+  /* for debugging of parameter processing */
+  //set_verbosity_level( CARP_DETAILED_DEBUG );
+  set_verbosity_level( CARP_ERROR );
+  
+  /* Set default values for parameters in parameter.c */
+  initialize_parameters();
+
+  /* Define optional and required command line arguments */
+  select_cmd_line_options( option_list, num_options );
+  select_cmd_line_arguments( argument_list, num_arguments);
+
+  /* Parse the command line, including the optional params file */
+  /* does sytnax, type, bounds checking and dies if neccessessary */
+  parse_cmd_line_into_params_hash(argc, argv, "xlink-predict-peptide-ions");
+
+  /* Set verbosity */
+  set_verbosity_level(Params::GetInt("verbosity"));
+
+  /* Get Arguments */
+  linker_mass = Params::GetDouble("link mass");
+  charge = Params::GetInt("charge state");
+
+  peptideA = Params::GetString("peptide A");
+  peptideB = Params::GetString("peptide B");
+  
+  posA = Params::GetInt("pos A");
+  posB = Params::GetInt("pos B");
+
+  print_spectrum = Params::GetBool("print-theoretical-spectrum");
+
+  XLinkPeptide::setLinkerMass(linker_mass);
+
+  XLinkMatch* linked_peptide = NULL;
+
+  cerr << "creating peptide" << endl;
+
+  cerr << "Converting peptideA to MOD_AA" << endl;
+
+  MODIFIED_AA_T* mod_seqA = NULL;
+
+  int len = strlen(peptideA);
+
+  convert_to_mod_aa_seq(peptideA, &mod_seqA);
+
+  cerr << "Length of modified string:" << modified_aa_string_length(mod_seqA) << endl;
+
+  //convert back.
+  
+  char* temp = 
+    modified_aa_string_to_string_with_masses(mod_seqA, modified_aa_string_length(mod_seqA), MOD_MASS_ONLY);
+
+  cerr << "orig:" << peptideA << ":" << len << " convert:" << temp << ":" << strlen(temp) << endl;
+
+
+  if (string(peptideB) == string("NULL")) {
+    if (posA == -1 || posB == -1) {
+      cout << "Creating linear peptide" << endl;
+      linked_peptide = new LinearPeptide(peptideA);
+    } else {
+      cout << "Creating selfloop peptide" << endl;
+      linked_peptide = new SelfLoopPeptide(peptideA, posA-1, posB-1);
+    }
+  } else {
+    cout << "Creating XLinkPeptide" << endl;
+    linked_peptide = new XLinkPeptide(peptideA, peptideB, posA-1, posB-1);
+  }
+
+  cerr << "Printing stuff" << endl;
+  cerr << "precursor: " << linked_peptide -> getSequenceString() << endl;
+  cerr << "mass:" << linked_peptide -> getMass(MONO) << " " << linked_peptide -> getMass(AVERAGE) <<endl;;
+  cerr << "charge:" << charge << endl;
+  cerr << "link mass:" << linker_mass << endl;
+  cerr << "print_spectrum:" << print_spectrum << endl;
+
+  int max_charge = min(get_max_ion_charge_parameter("max-ion-charge"), charge);
+
+  IonConstraint* ion_constraint = new IonConstraint(MONO, max_charge, BY_ION,  false);
+
+  IonSeries* ion_series = new IonSeries(ion_constraint, charge);
+
+  linked_peptide->predictIons(ion_series, charge);
+
+  cout << "mz\t" 
+       << "mass\t"
+       << "charge\t"
+       << "cleavage idx\t"
+       << "sequence\t"
+       << "ion type" << endl;
+
+  for (IonIterator ion_iter = ion_series->begin();
+    ion_iter != ion_series->end();
+    ++ion_iter) {
+
+    Ion* ion = *ion_iter;
+    FLOAT_T mz = ion->getMassZ();
+    FLOAT_T mass = ion->getMassFromMassZ();
+    int charge = ion->getCharge();
+    string sequence = linked_peptide->getIonSequence(ion);
+    int cleavage_idx = ion->getCleavageIdx();
+    ION_TYPE_T ion_type = ion->getType();
+
+    string ion_type_string = "";
+    switch (ion_type) {
+      case B_ION:
+        ion_type_string = "b";
+        break;
+      case Y_ION:
+        ion_type_string = "y";
+        break;
+      default:
+        ion_type_string = "u";
+    }
+  
+
+    cout << mz << "\t"
+         << mass << "\t"
+         << charge << "\t"
+         << cleavage_idx << "\t"
+         << sequence << "\t" 
+         << ion_type_string << endl;
+  }
+
+
+  delete ion_series;
+  delete linked_peptide;
+
+  return 0;
+}
+#include "IonSeries.h"
+#include "XLinkMatch.h"
+#include "XLinkPeptide.h"
+#include "LinearPeptide.h"
+#include "SelfLoopPeptide.h"
+
+#include <iostream>
+#include <fstream>
+
+using namespace std;
+
+int modified_aa_string_length(
+  MODIFIED_AA_T* aa_string) {
+
+  if (aa_string == NULL) {
+    return 0;
+  }
+
+  int ans = 0;
+
+  while (aa_string[ans] != MOD_SEQ_NULL) {
+    ans++;
+  }
+
+  return ans;
+}
+
+
+int main(int argc, char** argv) {
+
+  char* peptideA = NULL;
+  char* peptideB = NULL;
+  int posA = 0;
+  int posB = 0;
+  FLOAT_T linker_mass = 0;
+  int charge = 1; 
+  bool print_spectrum = false;
+
+
+  /* Verbosity level for set-up/command line reading */
+  set_verbosity_level(CARP_ERROR);
+  
+  /* Define optional command line arguments */
+  const char* option_list[] = {
+    "verbosity",
+    "version",
+    "use-flanking-peaks",
+    "print-theoretical-spectrum",
+    "parameter-file"
+  };
+  int num_options = sizeof(option_list) / sizeof(char*);
+
+  /* Define required command line arguments */
+  const char* argument_list[] = {"peptide A",
+                                 "peptide B",
+                                 "pos A",
+                                 "pos B",
+                                 "charge state",
+                                 "link mass"};
+
+  int num_arguments = sizeof(argument_list) / sizeof(char*);
+
+  /* for debugging of parameter processing */
+  //set_verbosity_level( CARP_DETAILED_DEBUG );
+  set_verbosity_level( CARP_ERROR );
+  
+  /* Set default values for parameters in parameter.c */
+  initialize_parameters();
+
+  /* Define optional and required command line arguments */
+  select_cmd_line_options( option_list, num_options );
+  select_cmd_line_arguments( argument_list, num_arguments);
+
+  /* Parse the command line, including the optional params file */
+  /* does sytnax, type, bounds checking and dies if neccessessary */
+  parse_cmd_line_into_params_hash(argc, argv, "xlink-predict-peptide-ions");
+
+  /* Set verbosity */
+  set_verbosity_level(Params::GetInt("verbosity"));
+
+  /* Get Arguments */
+  linker_mass = Params::GetDouble("link mass");
+  charge = Params::GetInt("charge state");
+
+  peptideA = Params::GetString("peptide A");
+  peptideB = Params::GetString("peptide B");
+  
+  posA = Params::GetInt("pos A");
+  posB = Params::GetInt("pos B");
+
+  print_spectrum = Params::GetBool("print-theoretical-spectrum");
+
+  XLinkPeptide::setLinkerMass(linker_mass);
+
+  XLinkMatch* linked_peptide = NULL;
+
+  cerr << "creating peptide" <<endl;
+
+  cerr << "Converting peptideA to MOD_AA" << endl;
+
+  MODIFIED_AA_T* mod_seqA = NULL;
+
+  int len = strlen(peptideA);
+
+  convert_to_mod_aa_seq(peptideA, &mod_seqA);
+
+  cerr << "Length of modified string:" << modified_aa_string_length(mod_seqA) << endl;
+
+  //convert back.
+  
+  char* temp = 
+    modified_aa_string_to_string_with_masses(mod_seqA, modified_aa_string_length(mod_seqA), MOD_MASS_ONLY);
+
+  cerr << "orig:" << peptideA << ":" << len << " convert:" << temp << ":" << strlen(temp) << endl;
+
+
+  if (string(peptideB) == string("NULL")) {
+    if (posA == -1 || posB == -1) {
+      cout << "Creating linear peptide" << endl;
+      linked_peptide = new LinearPeptide(peptideA);
+    } else {
+      cout << "Creating selfloop peptide" << endl;
+      linked_peptide = new SelfLoopPeptide(peptideA, posA-1, posB-1);
+    }
+  } else {
+    cout << "Creating XLinkPeptide" << endl;
+    linked_peptide = new XLinkPeptide(peptideA, peptideB, posA-1, posB-1);
+  }
+
+  cerr << "Printing stuff" << endl;
+  cerr << "precursor: " << linked_peptide -> getSequenceString() << endl;
+  cerr << "mass:" << linked_peptide -> getMass(MONO) << " " << linked_peptide -> getMass(AVERAGE) << endl;
+  cerr << "charge:" << charge << endl;
+  cerr << "link mass:"<< linker_mass << endl;
+  cerr << "print_spectrum:"<< print_spectrum << endl;
+
+  int max_charge = min(get_max_ion_charge_parameter("max-ion-charge"), charge);
+
+  IonConstraint* ion_constraint = new IonConstraint(MONO, max_charge, BY_ION,  false);
+
+  IonSeries* ion_series = new IonSeries(ion_constraint, charge);
+
+  linked_peptide->predictIons(ion_series, charge);
+
+  cout << "mz\t" 
+       << "mass\t"
+       << "charge\t"
+       << "cleavage idx\t"
+       << "sequence\t"
+       << "ion type" << endl;
+
+  for (IonIterator ion_iter = ion_series->begin();
+    ion_iter != ion_series->end();
+    ++ion_iter) {
+
+    Ion* ion = *ion_iter;
+    FLOAT_T mz = ion->getMassZ();
+    FLOAT_T mass = ion->getMassFromMassZ();
+    int charge = ion->getCharge();
+    string sequence = linked_peptide->getIonSequence(ion);
+    int cleavage_idx = ion->getCleavageIdx();
+    ION_TYPE_T ion_type = ion->getType();
+
+    string ion_type_string = "";
+    switch (ion_type) {
+      case B_ION:
+        ion_type_string = "b";
+        break;
+      case Y_ION:
+        ion_type_string = "y";
+        break;
+      default:
+        ion_type_string = "u";
+    }
+  
+
+    cout << mz << "\t"
+         << mass << "\t"
+         << charge << "\t"
+         << cleavage_idx << "\t"
+         << sequence << "\t" 
+         << ion_type_string << endl;
+  }
+
+
+  delete ion_series;
+  delete linked_peptide;
+
+  return 0;
+}
diff --git a/src/app/xlink/xlink_search.cpp b/src/app/xlink/xlink_search.cpp
new file mode 100644
index 0000000..6a2f2d4
--- /dev/null
+++ b/src/app/xlink/xlink_search.cpp
@@ -0,0 +1,403 @@
+
+/**
+ * \file xlink_search.cpp
+ * \brief Object for running search-for-xlinks (new code)
+ *****************************************************************************/
+#include "SearchForXLinks.h"
+#include "XLinkMatch.h"
+#include "XLinkMatchCollection.h"
+#include "XLinkBondMap.h"
+#include "XLinkPeptide.h"
+#include "XLinkIonSeriesCache.h"
+#include "xlink_compute_qvalues.h"
+
+#include "Weibull.h"
+
+//CRUX INCLUDES
+#include "model/objects.h"
+#include "model/FilteredSpectrumChargeIterator.h"
+#include "io/OutputFiles.h"
+#include "io/SpectrumCollectionFactory.h"
+#include "util/Params.h"
+#include "XLinkDatabase.h"
+
+
+//C++ Includes
+#include <algorithm>
+#include <cmath>
+#include <ctime>
+#include <fstream>
+#include <iomanip>
+#include <iostream>
+
+#include <ctime>
+
+
+
+using namespace std;
+
+void buildArguments(
+  vector<string>& args_vec, 
+  int &argc, 
+  char** &argv) {
+
+  argc = args_vec.size();
+  argv = new char*[argc];
+
+  argv[0] = (char*)args_vec[0].c_str();
+  carp(CARP_INFO, "argv[0]=%s", argv[0]);
+  for (int idx = 1; idx < argc; idx++) {
+    argv[idx] = (char*)args_vec[idx].c_str();
+    carp(CARP_INFO, "argv[%i]=%s", idx, argv[idx]);
+  }
+
+}
+
+void writeTrainingCandidates(XLinkMatchCollection* training_candidates, int scan_num, Weibull& weibull) {
+  training_candidates->populateMatchRank(XCORR);
+  training_candidates->sort(XCORR);
+  string output_dir = Params::GetString("output-dir");
+
+  string output_file = output_dir + "/" +
+    "scan." + StringUtils::ToString(scan_num) + 
+    ".charge." + StringUtils::ToString(training_candidates->getCharge()) +
+    ".training.candidates.txt";
+  //cerr<<"writing "<<output_file<<endl;
+  DelimitedFileWriter writer(output_file.c_str());
+
+  
+  
+  writer.setColumnName("scan", 0);
+  writer.setColumnName("charge", 1);
+  writer.setColumnName("decoy", 2);
+  writer.setColumnName("sequence", 3);
+  writer.setColumnName("eta", 4);
+  writer.setColumnName("beta", 5);
+  writer.setColumnName("shift", 6);
+  writer.setColumnName("correlation", 7);
+  writer.setColumnName("xcorr score", 8);
+  writer.setColumnName("p-value", 9);
+  writer.setColumnName("p-value ecdf", 10);
+  writer.writeHeader();
+
+  for (size_t idx = 0 ;idx < training_candidates->getMatchTotal();idx++) {
+    writer.setColumnCurrentRow(0, scan_num);
+    writer.setColumnCurrentRow(2, (*training_candidates)[idx]->isDecoy());
+    writer.setColumnCurrentRow(1, (*training_candidates)[idx]->getCharge());
+    writer.setColumnCurrentRow(3, (*training_candidates)[idx]->getSequenceString());
+    writer.setColumnCurrentRow(4, weibull.getEta());
+    writer.setColumnCurrentRow(5, weibull.getBeta());
+    writer.setColumnCurrentRow(6, weibull.getShift());
+    writer.setColumnCurrentRow(7, weibull.getCorrelation());
+    writer.setColumnCurrentRow(8, (*training_candidates)[idx]->getScore(XCORR));
+    FLOAT_T score = (*training_candidates)[idx]->getScore(XCORR);
+    writer.setColumnCurrentRow(9, weibull.getWeibullPValue(score));
+    writer.setColumnCurrentRow(10, weibull.getECDFPValue(score));
+    writer.writeRow();
+  }
+
+}
+
+
+/**
+ * main method for SearchForXLinks that implements to refactored code
+ */
+int SearchForXLinks::xlinkSearchMain() {
+  
+  carp(CARP_INFO, "Beginning crux search-for-xlinks (new code)");
+
+  /* Get parameters */
+  carp(CARP_INFO, "Getting parameters");
+  string ms2_file = Params::GetString("ms2 file");
+  string input_file = Params::GetString("protein fasta file");
+  string output_directory = Params::GetString("output-dir");
+  int top_match = Params::GetInt("top-match");
+  XLinkPeptide::setLinkerMass(Params::GetDouble("link mass"));
+  int min_weibull_points = Params::GetInt("min-weibull-points");
+  bool compute_pvalues = Params::GetBool("compute-p-values");
+
+  XLinkBondMap bondmap;
+
+  /* Prepare input fasta  */
+  carp(CARP_DEBUG, "Preparing database");
+  XLinkDatabase::initialize();
+  Database* database = NULL;
+  int num_proteins = 0;//prepare_protein_input(input_file, &database);
+  //carp(CARP_DEBUG, "Number of proteins:%d",num_proteins);
+  PEPTIDE_MOD_T** peptide_mods = NULL;
+  int num_peptide_mods = 0;
+
+  /* Usually for debugging purposes, print out the database of canddiates */
+  if (Params::GetBool("xlink-print-db")) {
+    carp(CARP_INFO, "generating and printing xlink database");
+    XLinkDatabase::print();
+    //return 0;
+  }
+
+  int scan_num = 0;
+  int skipped_no_candidates = 0;
+
+  SpectrumZState zstate;
+
+  carp(CARP_DEBUG, "Loading Spectra");
+  Crux::Spectrum* spectrum = NULL;
+  Crux::SpectrumCollection* spectra = SpectrumCollectionFactory::create(ms2_file);
+  spectra->parse();
+
+  FilteredSpectrumChargeIterator* spectrum_iterator =
+    new FilteredSpectrumChargeIterator(spectra);
+
+  /* Prepare output files */
+  carp(CARP_DEBUG, "Preparing output files");
+  OutputFiles output_files(this);
+  output_files.writeHeaders(num_proteins);
+
+  // main loop over spectra in ms2 file
+
+
+  int search_count = 0;
+  FLOAT_T num_spectra = (FLOAT_T)spectra->getNumSpectra();
+  FLOAT_T min_pvalue = 1.0 / num_spectra;
+  //class for estimating pvalues.
+  Weibull weibull;
+  
+  // for every observed spectrum 
+  carp(CARP_DEBUG, "Searching Spectra");
+
+
+  while (spectrum_iterator->hasNext()) {
+
+    spectrum = spectrum_iterator->next(zstate);
+    scan_num = spectrum->getFirstScan();
+
+    carp(CARP_DEBUG,"count %d scan %d charge %d", search_count, scan_num, zstate.getCharge());
+    if (search_count > 0 && search_count % 1000 == 0) {
+      carp(CARP_INFO, 
+	   "%d spectrum-charge combinations searched, %.0f%% complete",
+	   search_count + spectrum_iterator->numSkipped(),
+	   (search_count + spectrum_iterator->numSkipped()) / num_spectra * 100);
+    }
+    search_count++;
+
+    FLOAT_T precursor_mz = spectrum->getPrecursorMz();
+
+    XLinkMatchCollection* target_candidates = new XLinkMatchCollection(
+		       spectrum,
+                       zstate,
+                       false,
+                       false
+    );
+
+    carp(CARP_DEBUG, "Scan=%d charge=%d mass=%lg candidates=%d", 
+      scan_num, 
+      zstate.getCharge(), 
+      zstate.getNeutralMass(), 
+      target_candidates->getMatchTotal());   
+
+    if (target_candidates->getMatchTotal() < 0) {
+      carp(CARP_ERROR, "Scan %d has %d candidates.", scan_num, 
+	   target_candidates->getMatchTotal());
+    } else if (target_candidates->getMatchTotal() == 0) {
+      skipped_no_candidates++;
+      carp(CARP_DEBUG, "Skipping scan %d charge %d mass %lg", 
+        scan_num, 
+	zstate.getCharge(),
+	zstate.getNeutralMass()
+      );
+      delete target_candidates;
+      //XLink::deleteAllocatedPeptides();
+      continue;
+    }
+
+    //score targets
+    target_candidates->scoreSpectrum(spectrum);
+    
+    carp(CARP_DEBUG, "Getting decoy candidates");
+
+    XLinkMatchCollection* decoy_candidates = new XLinkMatchCollection();
+    target_candidates->shuffle(*decoy_candidates);
+
+    
+    /*
+    XLinkMatchCollection* decoy_candidates = new XLinkMatchCollection(
+								      spectrum,
+								      zstate,
+								      true,
+								      false);
+
+    */
+    carp(CARP_DEBUG, "scoring decoys");
+    decoy_candidates->scoreSpectrum(spectrum);
+
+    if (compute_pvalues) {
+      weibull.reset();
+      XLinkMatchCollection *target_train_candidates = new XLinkMatchCollection(
+        spectrum,
+        zstate,
+        false,
+        true);
+      XLinkMatchCollection *train_candidates = new XLinkMatchCollection(
+        spectrum,
+        zstate,
+        true,
+        true
+      );
+      
+      for (size_t idx=0;idx < target_train_candidates->getMatchTotal();idx++) {
+        train_candidates->add(target_train_candidates->at(idx), true);
+      }
+      while(train_candidates->getMatchTotal() < min_weibull_points) {
+        target_train_candidates->shuffle(*train_candidates);
+      }
+      train_candidates->scoreSpectrum(spectrum);
+      for (int idx = 0;idx < train_candidates->getMatchTotal();idx++) {
+        const string& sequence = (*train_candidates)[idx]->getSequenceStringConst();
+        FLOAT_T score = (*train_candidates)[idx]->getScore(XCORR);
+        weibull.addPoint(sequence, score);
+      }
+      bool write_weibull_points = !weibull.fit();
+      //train_candidates->fitWeibull();
+      //MatchCollection::transferWeibull(train_candidates, target_candidates);
+      //MatchCollection::transferWeibull(train_candidates, decoy_candidates);
+	
+
+      target_candidates->sort(XCORR);
+
+
+      int nprint = min(top_match,target_candidates->getMatchTotal());
+
+      carp(CARP_DEBUG, "Calculating %d target p-values", nprint);
+ 
+      //calculate pvalues.
+      for (int idx=0;idx < nprint;idx++) {
+        FLOAT_T score = (*target_candidates)[idx]->getScore(XCORR);
+        (*target_candidates)[idx]->setPValue(weibull.getPValue(score));
+        //target_candidates->computeWeibullPValue(idx);
+      }
+
+      nprint = min(top_match, (int)decoy_candidates->getMatchTotal());
+
+      carp(CARP_DEBUG, "Calculating %d decoy p-values", nprint);
+
+      decoy_candidates->sort(XCORR);
+
+      for (int idx=0;idx < nprint;idx++) {
+        FLOAT_T score = (*decoy_candidates)[idx]->getScore(XCORR);
+        (*decoy_candidates)[idx]->setPValue(weibull.getPValue(score));
+        FLOAT_T wpvalue = weibull.getWeibullPValue(score);
+        FLOAT_T bpvalue = bonferroni_correction(wpvalue, decoy_candidates->getMatchTotal()) * 2.0;
+        if ((wpvalue == 0) || (wpvalue != wpvalue) || (bpvalue  < min_pvalue)) {
+          //If we have a bad fit, 0 or too low pvalue, print out the points.
+          write_weibull_points = true;
+        }
+        
+      }
+      
+      
+      if (write_weibull_points || Params::GetBool("write-weibull-points")) {
+        writeTrainingCandidates(train_candidates, scan_num, weibull);
+      }
+      carp(CARP_DEBUG, "delete train candidates");
+      delete train_candidates;
+      carp(CARP_DEBUG, "delete target train candidates");
+      delete target_train_candidates;
+
+    } // if (compute_p_values)
+
+    //print out
+    target_candidates->setFilePath(ms2_file);
+    decoy_candidates->setFilePath(ms2_file);
+    vector<MatchCollection*> decoy_vec;
+    
+    if (Params::GetBool("concat")) {
+      for (size_t idx=0;idx < decoy_candidates->getMatchTotal();idx++) {
+        target_candidates->add(decoy_candidates->at(idx), true);
+      }
+    } else {
+    
+      decoy_vec.push_back(decoy_candidates);
+
+      if (decoy_candidates->getScoredType(SP) == true) {
+        decoy_candidates->populateMatchRank(SP);
+      }
+      decoy_candidates->populateMatchRank(XCORR);
+      decoy_candidates->sort(XCORR);
+    }
+
+    carp(CARP_DEBUG, "Ranking");
+
+    if (target_candidates->getScoredType(SP) == true) {
+      target_candidates->populateMatchRank(SP);
+    }
+    target_candidates->populateMatchRank(XCORR);
+    target_candidates->sort(XCORR);
+
+    
+    carp(CARP_DEBUG, "Writing results");
+    output_files.writeMatches(
+      (MatchCollection*)target_candidates, 
+      decoy_vec,
+      XCORR,
+      spectrum);
+
+    /* Clean up */
+    carp(CARP_DEBUG, "Delete decoy candidates");
+    delete decoy_candidates;
+    carp(CARP_DEBUG, "Delete target candidates");
+    delete target_candidates;
+    XLink::deleteAllocatedPeptides();
+    
+    //free_spectrum(spectrum);
+
+    carp(CARP_DEBUG, "Done with spectrum %d", scan_num);
+    carp(CARP_DEBUG, "=====================================");
+  } // get next spectrum
+
+  carp(CARP_INFO, "Skipped %d (%g%%) spectra with 0 candidates.", 
+       skipped_no_candidates, skipped_no_candidates / num_spectra * 100);
+
+  carp(CARP_INFO, "Skipped %d (%g%%) spectra with too few peaks.", 
+       spectrum_iterator->numSkipped(), 
+       spectrum_iterator->numSkipped() / num_spectra * 100);
+
+  output_files.writeFooters();
+
+  // clean up
+
+
+  delete spectrum_iterator;
+  delete spectra;
+  XLink::deleteAllocatedPeptides();
+  for(int mod_idx = 0; mod_idx < num_peptide_mods; mod_idx++) {
+    free_peptide_mod(peptide_mods[mod_idx]);
+  }
+  free(peptide_mods);
+
+  //finalize_weibull();
+  //Scorer::finalize();
+  XLinkIonSeriesCache::finalize();
+  IonSeries::finalize();
+  XLinkDatabase::finalize();
+  //modifications_finalize(); TODO - Figure where to free the modification cache.
+  //Calculate q-values via p-values from weibull fit.
+  if (compute_pvalues) {
+    carp(CARP_DEBUG, "Computing Q-Values using P-values");
+    if (Params::GetBool("concat")) {
+      carp(CARP_WARNING, "Computing Q-Values with concatenated target-decoy files not implemented yet!");
+    } else {
+      xlink_compute_qvalues();
+    }
+  }
+
+  carp(CARP_INFO, "Elapsed time: %.3g s", wall_clock() / 1e6);
+  carp(CARP_INFO, "Finished crux search-for-xlinks (new).");
+
+  return(0);
+}
+
+/*                                                                                                                                                                                                                          
+ * Local Variables:                                                                                                                                                                                                         
+ * mode: c                                                                                                                                                                                                                  
+ * c-basic-offset: 2                                                                                                                                                                                                        
+ * End:                                                                                                                                                                                                                     
+ */
diff --git a/src/app/xlink/xlink_search.h b/src/app/xlink/xlink_search.h
new file mode 100644
index 0000000..298c451
--- /dev/null
+++ b/src/app/xlink/xlink_search.h
@@ -0,0 +1,15 @@
+#ifndef XLINK_SEARCH_CMD_H
+#define XLINK_SEARCH_CMD_H
+
+/**
+ * \file xlink_search.h
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: November 19, 2009
+ * \brief Header file for crux search-for-xlinks command. 
+ */
+
+int xlink_search_main(int argc, char** argv);
+int xhhc_search_main(int argc, char** argv);
+
+#endif //PERCOLATOR_CMD_H
+
diff --git a/src/cmake_install.cmake b/src/cmake_install.cmake
new file mode 100644
index 0000000..80e7824
--- /dev/null
+++ b/src/cmake_install.cmake
@@ -0,0 +1,62 @@
+# Install script for directory: /data/TeamCity/buildAgent/work/779d99b0241b2175/src
+
+# Set the install prefix
+IF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+  SET(CMAKE_INSTALL_PREFIX "/usr/local")
+ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX)
+STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+  IF(BUILD_TYPE)
+    STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+  ELSE(BUILD_TYPE)
+    SET(CMAKE_INSTALL_CONFIG_NAME "Release")
+  ENDIF(BUILD_TYPE)
+  MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+
+# Set the component getting installed.
+IF(NOT CMAKE_INSTALL_COMPONENT)
+  IF(COMPONENT)
+    MESSAGE(STATUS "Install component: \"${COMPONENT}\"")
+    SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+  ELSE(COMPONENT)
+    SET(CMAKE_INSTALL_COMPONENT)
+  ENDIF(COMPONENT)
+ENDIF(NOT CMAKE_INSTALL_COMPONENT)
+
+# Install shared libraries without execute permission?
+IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+  SET(CMAKE_INSTALL_SO_NO_EXE "0")
+ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
+
+IF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified")
+  IF(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/crux" AND
+     NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/crux")
+    FILE(RPATH_CHECK
+         FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/crux"
+         RPATH "")
+  ENDIF()
+  FILE(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/data/TeamCity/buildAgent/work/779d99b0241b2175/src/crux")
+  IF(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/crux" AND
+     NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/crux")
+    FILE(RPATH_REMOVE
+         FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/crux")
+    IF(CMAKE_INSTALL_DO_STRIP)
+      EXECUTE_PROCESS(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/crux")
+    ENDIF(CMAKE_INSTALL_DO_STRIP)
+  ENDIF()
+ENDIF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified")
+
+IF(NOT CMAKE_INSTALL_LOCAL_ONLY)
+  # Include the install script for each subdirectory.
+  INCLUDE("/data/TeamCity/buildAgent/work/779d99b0241b2175/src/app/bullseye/cmake_install.cmake")
+  INCLUDE("/data/TeamCity/buildAgent/work/779d99b0241b2175/src/app/hardklor/cmake_install.cmake")
+  INCLUDE("/data/TeamCity/buildAgent/work/779d99b0241b2175/src/app/qranker-barista/cmake_install.cmake")
+  INCLUDE("/data/TeamCity/buildAgent/work/779d99b0241b2175/src/app/xlink/cmake_install.cmake")
+  INCLUDE("/data/TeamCity/buildAgent/work/779d99b0241b2175/src/app/tide/cmake_install.cmake")
+
+ENDIF(NOT CMAKE_INSTALL_LOCAL_ONLY)
+
diff --git a/src/crux b/src/crux
new file mode 100755
index 0000000..636aee2
Binary files /dev/null and b/src/crux differ
diff --git a/src/crux-main.cpp b/src/crux-main.cpp
new file mode 100644
index 0000000..7267bad
--- /dev/null
+++ b/src/crux-main.cpp
@@ -0,0 +1,114 @@
+/**
+ * \file crux-main.cpp
+ * AUTHOR: Barbara Frewen
+ * CREATE DATE: November 24, 2008
+ * \brief The starting point for the main crux program.
+ *
+ * Usage is "crux [command] [options] [arguments]" where command
+ * is one of the primary crux commands.
+ **/
+
+#include "crux-main.h"
+#include "util/crux-utils.h" // Need to get definition of NUM_FEATURES.
+
+#include "app/xlink/xlink_assign_ions.h"
+#include "app/xlink/xhhc_score_peptide_spectrum.h"
+#include "app/xlink/xlink_search.h"
+#include "app/CruxApplicationList.h"
+#include "app/ComputeQValues.h"
+#include "app/ComputeQValuesLegacy.h"
+#include "app/CreateDocs.h"
+#include "app/qranker-barista/QRanker.h"
+#include "app/qranker-barista/Barista.h"
+#include "app/PrintProcessedSpectra.h"
+#include "app/GeneratePeptides.h"
+#include "app/GetMs2Spectrum.h"
+#include "app/ParamMedicApplication.h"
+#include "app/Pipeline.h"
+#include "app/PredictPeptideIons.h"
+#include "app/xlink/SearchForXLinks.h"
+#include "app/ExtractColumns.h"
+#include "app/SpectralCounts.h"
+#include "app/ExtractRows.h"
+#include "app/PrintVersion.h"
+#include "app/StatColumn.h"
+#include "app/SortColumn.h"
+#include "app/hardklor/CruxHardklorApplication.h"
+#include "app/bullseye/CruxBullseyeApplication.h"
+#include "app/PercolatorApplication.h"
+#include "app/MakePinApplication.h"
+#include "app/TideIndexApplication.h"
+#include "app/ReadSpectrumRecordsApplication.h"
+#include "app/ReadTideIndex.h"
+#include "app/TideSearchApplication.h"
+#include "app/CometApplication.h"
+#include "app/PSMConvertApplication.h"
+#include "app/CascadeSearchApplication.h"
+#include "app/AssignConfidenceApplication.h"
+#include "app/SubtractIndexApplication.h"
+/**
+ * The starting point for crux.  Prints a general usage statement when
+ * given no arguments.  Runs one of the crux commands, including
+ * printing the current version number.
+ */
+int main(int argc, char** argv) {
+  try {
+#ifdef _MSC_VER
+    // Turn off auto-tranlation of line-feed to 
+    // carriage-return/line-feed
+    _set_fmode(_O_BINARY);
+#endif 
+
+    CruxApplicationList applications("crux");
+
+    // Primary commands
+    applications.addMessage(applications.getListName() +
+      " supports the following primary commands:");
+    applications.add(new CruxBullseyeApplication());
+    applications.add(new TideIndexApplication());
+    applications.add(new TideSearchApplication());
+    applications.add(new ReadSpectrumRecordsApplication());
+    applications.add(new ReadTideIndex());
+    applications.add(new CometApplication());
+    applications.add(new PercolatorApplication());
+    applications.add(new QRanker());
+    applications.add(new Barista());
+    applications.add(new SearchForXLinks());
+    applications.add(new SpectralCounts());
+    applications.add(new PipelineApplication());
+    applications.add(new CascadeSearchApplication());
+    applications.add(new AssignConfidenceApplication());
+
+    // Utilities
+    applications.addMessage(applications.getListName() +
+      " supports the following utility commands:");
+    applications.add(new MakePinApplication());
+    applications.add(new PredictPeptideIons());
+    applications.add(new CruxHardklorApplication());
+    applications.add(new ParamMedicApplication());
+    applications.add(new PrintProcessedSpectra());
+    applications.add(new GeneratePeptides());
+    applications.add(new GetMs2Spectrum());
+    applications.add(new CreateDocs());
+    applications.add(new PrintVersion());
+    applications.add(new PSMConvertApplication());
+    applications.add(new SubtractIndexApplication());
+    applications.add(new XLinkAssignIons());
+    applications.add(new XLinkScoreSpectrum());
+
+    // Utilities for processing tab-delimited text files
+    applications.add(new ExtractColumns());
+    applications.add(new ExtractRows());
+    applications.add(new StatColumn());
+    applications.add(new SortColumn());
+
+    int ret = applications.main(argc, argv);
+    google::protobuf::ShutdownProtobufLibrary();
+    return ret;
+  } catch (const std::exception& e) {
+    carp(CARP_FATAL, "An exception occurred: %s", e.what());
+  } catch (...) {
+    carp(CARP_FATAL, "An unknown exception occurred.");
+  }
+}// end main
+
diff --git a/src/crux-main.h b/src/crux-main.h
new file mode 100644
index 0000000..6a3bdfa
--- /dev/null
+++ b/src/crux-main.h
@@ -0,0 +1,17 @@
+/**
+ * \file crux-main.h
+ */
+/*
+ AUTHOR: Barbara Frewen
+ CREATE DATE: November 24, 2008
+ DESCRIPTION: The starting point for what were previously three
+ separate programs: create-index, search-for-matches, analyze-matches.
+ REVISION: $Revision: 1.2 $
+*/
+
+#include "io/carp.h"
+#include "util/utils.h"
+#include "util/crux-utils.h"
+#include "search.h"
+//#include "PercolatorCInterface.h"
+
diff --git a/src/io/DelimitedFile.cpp b/src/io/DelimitedFile.cpp
new file mode 100644
index 0000000..5c7f193
--- /dev/null
+++ b/src/io/DelimitedFile.cpp
@@ -0,0 +1,825 @@
+/**
+ * \file DelimitedFile.cpp
+ * DATE: Jan 7, 2010
+ * AUTHOR: Sean McIlwain
+ * \brief Object for reading tab-delimited files.
+ * 
+ * This class generates a table of values. The default delimiter is tab.
+ * This class is capable of reading string, integers, and floating point
+ * Types from each cell of the table.  This class also provides function
+ * for reading a list of integers or string from a cell using a delimiter
+ * that is different from the column delimiter (default is comma ',').
+ ****************************************************************************/
+#include "DelimitedFile.h"
+
+#include <fstream>
+
+#include "carp.h"
+#include "util/StringUtils.h"
+
+using namespace std;
+
+/**
+ * \returns a DelimitedFile object
+ */  
+DelimitedFile::DelimitedFile(
+  char delimiter ///< the delimiter to use (default tab)
+  ): delimiter_(delimiter) {
+  clear();
+}
+
+/**
+ * \returns a DelimitedFile object and loads the tab-delimited
+ * data specified by file_name.
+ */  
+DelimitedFile::DelimitedFile(
+  const char *file_name, ///< the path of the file to read 
+  bool hasHeader, ///< indicate whether header exists
+  char delimiter ///< the delimiter to use (default tab)
+  ) {
+  loadData(file_name, hasHeader, delimiter);
+}
+
+/** 
+ * \returns a DelimitedFile object and loads the tab-delimited
+ * data specified by file_name.
+ */
+DelimitedFile::DelimitedFile(
+  const string& file_name, ///< the path of the file  to read
+  bool hasHeader, ///< indicates whether header exists
+  char delimiter ///< the delimiter to use (default tab)
+  ) {
+  loadData(file_name, hasHeader, delimiter);
+}
+
+/**
+ * empties the delimited file
+ */
+void DelimitedFile::clear() {
+  for (unsigned int idx=0;idx < data_.size(); idx++) {
+    data_[idx].clear();
+  }
+  data_.clear();
+  column_names_.clear();
+  reset();
+}
+
+/**
+ * Destructor
+ */
+DelimitedFile::~DelimitedFile() {
+  clear();
+}
+
+/**
+ * sets the delimiter
+ */
+void DelimitedFile::setDelimiter(
+  char delimiter ///< the delimiter
+  ) {
+  delimiter_ = delimiter;
+}
+
+/**
+ * /returns the delimiter
+ */
+char DelimitedFile::getDelimiter() const {
+  return delimiter_;
+}
+
+/**
+ *\returns the number of rows, assuming a square matrix
+ */
+unsigned int DelimitedFile::numRows() {
+  if (data_.empty()) {
+    carp(CARP_DEBUG, "DelimitedFile::numRows(): 0x0 matrix");
+    return 0;
+  }
+  return data_[0].size();
+}
+
+/**
+ *\returns the number of rows for a column
+ */
+unsigned int DelimitedFile::numRows(
+  unsigned int col_idx ///<the column index
+  ) {
+  return col_idx < numCols() ? data_[col_idx].size() : 0;
+}
+
+/**
+ *\returns the number of columns
+ */
+unsigned int DelimitedFile::numCols() {
+  return data_.size();
+}
+
+/**
+ * clears the current data and column names,
+ * parses the header if it exists,
+ * reads the file one line at a time while
+ * populating the data matrix with the 
+ * strings separated by tabs.
+ */
+void DelimitedFile::loadData(
+  const char *file_name, ///< the file path
+  bool hasHeader, ///< header indicator
+  char delimiter ///< delimiter to use
+  ) {
+  setDelimiter(delimiter);
+  clear();
+
+  fstream file(file_name, ios::in);
+  if (!file.is_open()) {
+    carp(CARP_ERROR, "Opening %s or reading failed", file_name);
+    return;
+  }
+
+  string line;
+
+  if (hasHeader) {
+    if (getline(file, line)) {
+      vector<string> tokens = StringUtils::Split(line, getDelimiter());
+      for (vector<string>::iterator iter = tokens.begin(); iter != tokens.end(); ++iter) {
+        addColumn(*iter);
+      }
+    } else {
+      carp(CARP_WARNING, "No data/headers found!");
+      return;
+    }
+  }
+  
+  while (getline(file, line)) {
+    vector<string> tokens = StringUtils::Split(line, getDelimiter());
+    if (!hasHeader && numCols() == 0) {
+      //initialize the number of columns so that addRow won't fail.
+      while (numCols() < tokens.size()) {
+        addColumn();
+      }
+    }
+
+    int row_idx = addRow();
+
+    for (unsigned int col_idx = 0; col_idx < tokens.size(); col_idx++) {
+      if (numCols() <= col_idx) {
+        addColumn();
+      }
+      setString(col_idx, row_idx, tokens[col_idx]);
+    }
+  }
+
+  file.close();
+
+  //reset the iterator.
+  reset();
+}
+
+/**
+ * loads a tab delimited file
+ */
+void DelimitedFile::loadData(
+  const string& file, ///< the file path
+  bool hasHeader, ///< header indicator
+  char delimiter ///< the delimiter to use
+  ) {
+  loadData(file.c_str(), hasHeader, delimiter);
+}
+
+/**
+ * saves a tab delimited file
+ */ 
+void DelimitedFile::saveData(
+  const string& file ///< the file path
+  ) {
+  saveData(file.c_str());
+}
+
+/**
+ * saves a tab delimited file
+ */ 
+void DelimitedFile::saveData(
+  const char* file ///< the file path
+  ) {
+  ofstream fout(file);
+
+  //find the maximum number of rows.
+  unsigned int maxRow = 0;
+  for (unsigned int col_idx=0; col_idx < numCols(); col_idx++) {
+    maxRow = max(maxRow, numRows(col_idx));
+  }
+
+  //print out the header if it exists.
+  if (!column_names_.empty()) {
+    fout << column_names_[0];
+    for (unsigned int col_idx=1; col_idx < column_names_.size(); col_idx++) {
+      fout << getDelimiter() << column_names_[col_idx];
+    }
+    fout << endl;
+  }
+
+  //print out all rows, using delimiter_ when
+  //the row goes past the current column
+  //size.
+  for (unsigned int row_idx=0; row_idx < maxRow; row_idx++) {
+    if (row_idx < numRows(0)) {
+      fout << getString((unsigned int)0, row_idx);
+    } else {
+      fout << delimiter_;
+    }
+    for (unsigned int col_idx=1;col_idx < numCols();col_idx++) {
+      fout << getDelimiter();
+      if (row_idx < numRows(col_idx)) {
+        fout << getString(col_idx, row_idx);
+      }
+    }
+    fout << endl;
+  }
+
+  fout.close();
+}
+
+/**
+ * adds a column to the delimited file
+ *\returns the column index.
+ */
+unsigned int DelimitedFile::addColumn(
+  const string& column_name ///< the column name
+  ) {
+  vector<string> new_col;
+  data_.push_back(new_col);
+  column_names_.push_back(column_name);
+  return data_.size()-1;
+}
+
+/**
+ * adds a column to the delimited file
+ *\returns the new column index.
+ */
+unsigned int DelimitedFile::addColumn(
+  const char* column_name ///< the column name
+  ) {
+  string string_name(column_name);
+  return addColumn(string_name);
+}
+
+/**
+ * adds a column to the delimited file
+ *\returns the new column index.
+ */
+unsigned int DelimitedFile::addColumn() {
+  vector<string> new_col;
+  data_.push_back(new_col);
+  return numCols() - 1;
+}
+
+/**
+ * adds a vector of columns to the delimited file
+ */
+void DelimitedFile::addColumns(
+  vector<string>& column_names
+  ) {
+  cout << "Number of columns:" << column_names.size() << endl;
+  for (unsigned int col_idx = 0;col_idx < column_names.size(); col_idx++) {
+    cout << "Adding :" << column_names[col_idx] << endl;
+    //addColumn(column_names[col_idx]);
+  }
+}
+
+
+
+/**
+ * finds the index of a column
+ *\returns the column index, -1 if not found.
+ */ 
+int DelimitedFile::findColumn(
+  const string& column_name ///< the column name
+  ) {
+  for (unsigned int col_idx=0;col_idx < column_names_.size();col_idx++) {
+    if (column_names_[col_idx] == column_name) {
+      return col_idx;
+    }
+  }
+  return -1;
+}
+
+/**
+ * finds the index of a column
+ *\returns the column index, -1 if not found.
+ */ 
+int DelimitedFile::findColumn(
+  const char* column_name ///< the column name
+) {
+  string sname = string(column_name);
+  return findColumn(sname);
+}
+
+/**
+ *\returns the string vector corresponding to the column
+ */
+vector<string>& DelimitedFile::getColumn(
+  string column ///< the column name 
+  ) {
+  int col_idx = findColumn(column);
+  if (col_idx != -1) {
+    return data_[col_idx];
+  }
+  carp(CARP_ERROR, "column %s not found, returning column 0", column.c_str());
+  return data_[0];
+}
+
+/**
+ *\returns the string vector corresponding to the column
+ */
+vector<string>& DelimitedFile::getColumn(
+  unsigned int col_idx ///< the column index
+  ) {
+  return data_.at(col_idx);
+}
+
+/**
+ *\returns the name of the column
+ */
+string& DelimitedFile::getColumnName(
+  unsigned int col_idx ///< the column index
+  ) {
+  return column_names_.at(col_idx);
+}
+
+/**
+ *\returns the column_names
+ */
+vector<string>& DelimitedFile::getColumnNames() {
+  return column_names_;
+}
+
+
+/**
+ * adds a row to the delimited file
+ *\returns the new row index
+ */
+unsigned int DelimitedFile::addRow() {
+  if (numCols() == 0) {
+    carp(CARP_FATAL, "Must have at least one column before calling add row!");
+  }
+  
+  unsigned int row_idx = numRows();
+  for (unsigned int col_idx = 0;col_idx < numCols(); col_idx++) {
+    setString(col_idx, row_idx, "");
+  }
+  return row_idx;
+}
+
+/**
+ *\returns the string value of the cell
+ */
+string& DelimitedFile::getString(
+  unsigned int col_idx, ///< the column index
+  unsigned int row_idx  ///< the row index
+  ) {
+  vector<string>& column = getColumn(col_idx);
+  if (row_idx >= column.size()) {
+    carp(CARP_FATAL, "Row is out of range for column %i:%s row %i:%i", 
+      col_idx, 
+      getColumnName(col_idx).c_str(), 
+      row_idx, 
+      column.size());
+  }
+  return getColumn(col_idx).at(row_idx);
+}
+
+/** 
+ * gets a string value of the cell.
+ */
+string& DelimitedFile::getString(
+  const char* column_name, ///<the column name
+  unsigned int row_idx ///< the row index
+  ) {
+  int col_idx = findColumn(column_name);
+  if (col_idx == -1) {
+    carp(CARP_ERROR, "Cannot find column %s", column_name);
+    carp(CARP_ERROR, "Available columns");
+    for (unsigned int idx = 0;idx < numCols();idx++) {
+      carp(CARP_ERROR, "%s", getColumnName(idx).c_str());
+    }
+    carp(CARP_FATAL, "Calling FATAL");
+  }
+  return getColumn(col_idx)[row_idx];
+}
+
+/**
+ * gets a string value of the cell
+ * uses the current_row_ as the row index
+ */
+string& DelimitedFile::getString(
+  const char* column_name ///<the column name
+  ) {
+  if (current_row_ >= numRows()) {
+    carp(CARP_FATAL, "Iterated past maximum number of rows!");
+  }
+  return getString(column_name, current_row_);
+}
+
+/**
+ * sets the string value of the cell
+ */
+void DelimitedFile::setString(
+  unsigned int col_idx, ///< the column index
+  unsigned int row_idx, ///< the row index
+  const string& value ///< the new value
+  ) {
+  //ensure there are enough columns
+  while (col_idx >= numCols()) {
+    addColumn();
+  }
+  vector<string>& col = getColumn(col_idx);
+
+  //ensure there are enough rows
+  while (row_idx >= col.size()) {
+    col.push_back("");
+  }
+
+  col[row_idx] = value;
+}
+
+/**
+ * sets the string value of the cell
+ */
+void DelimitedFile::setString(
+  unsigned int col_idx, ///< the column index
+  unsigned int row_idx, ///< the row index
+  const char* value ///< the new value
+) {
+  string svalue(value);
+  setString(col_idx, row_idx, svalue);
+}
+
+/**
+ *\returns the data type of the cell
+ */
+template<typename TValue>
+TValue DelimitedFile::getValue(
+  unsigned int col_idx, ///< the column index 
+  unsigned int row_idx  ///< the row index
+  ) {
+  return StringUtils::FromString<TValue>(getString(col_idx, row_idx));
+}
+
+/**
+ * gets a double type from cell, checks for infinity. 
+ */
+FLOAT_T DelimitedFile::getFloat(
+  unsigned int col_idx, ///< the column index
+  unsigned int row_idx ///< the row index
+) {
+  string& string_ans = getString(col_idx, row_idx);
+  if (string_ans == "Inf") {
+    return numeric_limits<FLOAT_T>::infinity();
+  } else if (string_ans == "-Inf") {
+    return -numeric_limits<FLOAT_T>::infinity();
+  }
+  return getValue<FLOAT_T>(col_idx, row_idx);
+}
+
+/** 
+ * gets a double type from cell, checks for infinity.
+ */
+FLOAT_T DelimitedFile::getFloat(
+  const char* column_name, ///<the column name
+  unsigned int row_idx ///< the row index
+) {
+  int col_idx = findColumn(column_name);
+  if (col_idx == -1) {
+    carp(CARP_ERROR, "Cannot find column %s", column_name);
+    carp(CARP_ERROR, "Available columns");
+    for (unsigned int idx = 0;idx < numCols();idx++) {
+      carp(CARP_ERROR, "%s", getColumnName(idx).c_str());
+    }
+    carp(CARP_FATAL, "Calling FATAL");
+  }
+  return getFloat(col_idx, row_idx);
+}
+
+/**
+ * gets a double value from cell, checks for infinity
+ * uses the current_row_ as the row index
+ */
+FLOAT_T DelimitedFile::getFloat(
+  const char* column_name ///<the column name
+) {
+  if (current_row_ >= numRows()) {
+    carp(CARP_FATAL, "Iterated past maximum number of rows!");
+  }
+  return getFloat(column_name, current_row_);
+}
+
+/**
+ * gets a double type from cell, checks for infinity. 
+ */
+double DelimitedFile::getDouble(
+  unsigned int col_idx, ///< the column index 
+  unsigned int row_idx ///< the row index
+  ) {
+  string& string_ans = getString(col_idx, row_idx);
+  if (string_ans == "Inf") {
+    return numeric_limits<double>::infinity();
+  } else if (string_ans == "-Inf") {
+    return -numeric_limits<double>::infinity();
+  }
+  return getValue<double>(col_idx, row_idx);
+}
+
+/** 
+ * gets a double type from cell, checks for infinity.
+ */
+double DelimitedFile::getDouble(
+  const char* column_name, ///<the column name
+  unsigned int row_idx ///<the row index
+) {
+  int col_idx = findColumn(column_name);
+  if (col_idx == -1) {
+    carp(CARP_ERROR, "Cannot find column %s", column_name);
+    carp(CARP_ERROR, "Available columns");
+    for (unsigned int idx = 0;idx < numCols();idx++) {
+      carp(CARP_ERROR, "%s", getColumnName(idx).c_str());
+    }
+    carp(CARP_FATAL, "Calling FATAL");
+  }
+  return getDouble(col_idx, row_idx);
+}
+
+/**
+ * gets a double value from cell, checks for infinity
+ * uses the current_row_ as the row index
+ */
+double DelimitedFile::getDouble(
+  const char* column_name ///<the column name
+) {
+  if (current_row_ >= numRows()) {
+    carp(CARP_FATAL, "Iterated past maximum number of rows!");
+  }
+  return getDouble(column_name, current_row_);
+}
+
+/**
+ * gets an integer type from cell. 
+ */
+int DelimitedFile::getInteger(
+  unsigned int col_idx, ///< the column index 
+  unsigned int row_idx ///< the row index
+  ) {
+  //TODO : check the string for a valid integer.
+  return getValue<int>(col_idx, row_idx);
+}
+
+/**
+ * get an integer type from cell, checks for infintiy.
+ */
+int DelimitedFile::getInteger(
+  const char* column_name, ///< the column name
+  unsigned int row_idx ///<the row index
+) {
+  int col_idx = findColumn(column_name);
+  if (col_idx == -1) {
+    carp(CARP_FATAL, "Cannot find column %s", column_name);
+  }
+  return getInteger(col_idx, row_idx);
+}
+
+
+/**
+ * get an integer type from cell, checks for infinity.
+ * uses the current_row_ as the row index.
+ */
+int DelimitedFile::getInteger(
+  const char* column_name ///< the column name
+  ) {
+  if (current_row_ >= numRows()) {
+    carp(CARP_FATAL, "Iterated past maximum number of rows!");
+  }
+  return getInteger(column_name, current_row_);
+}
+
+/**
+ * gets an vector of integers from cell where the
+ * string in the cell are integers which are separated
+ * by a delimiter which is differnt than the column
+ * delimiter.  The default delimiter is a comma
+ * uses the current_row_ as the row index.
+ * clears the integer vector before 
+ * populating it.
+ */
+void DelimitedFile::getIntegerVectorFromCell(
+    const char* column_name, ///< the column name
+    vector<int>& int_vector, ///<the vector of integers
+    char delimiter ///<the delimiter to use
+  ) {
+  //get the list of strings separated by delimiter
+  vector<string> string_vector_ans = StringUtils::Split(getString(column_name), delimiter);
+
+  //convert each string into an integer.
+  int_vector.clear();
+
+  for (vector<string>::iterator string_iter = string_vector_ans.begin();
+    string_iter != string_vector_ans.end();
+    ++string_iter) {
+    int_vector.push_back(StringUtils::FromString<int>(*string_iter));
+  }
+}
+
+/**
+ * reorders the rows of a delimited file using a built map 
+ * of sorted indices.  
+ */
+template <typename T>
+void DelimitedFile::reorderRows(
+  multimap<T, unsigned int>& sort_indices, ///<map of indices sorted by type T 
+  bool ascending ///<sort in ascending order?
+  ) {
+  vector<vector<string> > newData;
+
+  for (unsigned int col_idx = 0;col_idx < numCols();col_idx++) {
+    vector<string> current_col;
+    unsigned int row_idx;
+    if (ascending) {
+      typename multimap<T, unsigned int>::iterator sort_iter;
+      for (sort_iter = sort_indices.begin();
+           sort_iter != sort_indices.end();
+           ++sort_iter) {
+        row_idx = sort_iter -> second;
+        string current_cell = getString(col_idx, row_idx);
+        current_col.push_back(current_cell);
+      }
+    } else {
+      typename multimap<T, unsigned int>::reverse_iterator sort_iter;
+      for (sort_iter = sort_indices.rbegin();
+           sort_iter != sort_indices.rend();
+           ++sort_iter) {
+        row_idx = sort_iter -> second;
+        string current_cell = getString(col_idx, row_idx);
+        current_col.push_back(current_cell);
+      }
+    }
+    newData.push_back(current_col);
+  }
+  data_.swap(newData);
+}
+
+/**
+ * sorts the delimited file treating the key column as float values
+ */
+void DelimitedFile::sortByFloatColumn(
+  const string& column_name, ///<The name of the key column
+  bool ascending ///<sort in ascending order?
+  ) {
+
+  multimap<FLOAT_T, unsigned int> sort_indices;
+  int sort_col_idx = findColumn(column_name); 
+  
+  if (sort_col_idx == -1) {
+    carp(CARP_FATAL, "column %s doesn't exist", column_name.c_str());
+  }
+
+  for (unsigned int row_idx=0;row_idx < numRows();row_idx++) {
+    sort_indices.insert(pair<FLOAT_T, unsigned int>(getFloat(sort_col_idx, row_idx), row_idx));
+  }
+
+  reorderRows(sort_indices, ascending);
+}
+
+/**
+ * sorts the delimited file treating the key column as integers
+ */
+void DelimitedFile::sortByIntegerColumn(
+  unsigned int col_idx, ///< the index of the key column 
+  bool ascending ///< sort in ascending order?
+  ) {
+  multimap<int, unsigned int> sort_indices;
+  for (unsigned int row_idx=0;row_idx < numRows();row_idx++) {
+    sort_indices.insert(pair<int, unsigned int>(getInteger(col_idx, row_idx), row_idx));
+  }
+  reorderRows(sort_indices, ascending);
+}
+
+
+/**
+ * sorts the delimited file treating the key column as integers
+ */
+void DelimitedFile::sortByIntegerColumn(
+  const string& column_name, ///< the name of the key column
+  bool ascending ///< sort in ascending order?
+  ) {
+  int sort_col_idx = findColumn(column_name); 
+  if (sort_col_idx == -1) {
+    carp(CARP_FATAL, "column %s doesn't exist", column_name.c_str());
+  }
+  sortByIntegerColumn(sort_col_idx, ascending);
+}
+
+/**
+ * sorts the delimited file treating the key column as a string
+ */
+void DelimitedFile::sortByStringColumn(
+  const string& column_name, ///< the name of the key column
+  bool ascending ///< sort in ascending order?
+  ) {
+  multimap<string, unsigned int> sort_indices;
+
+  int sort_col_idx = findColumn(column_name); 
+  
+  if (sort_col_idx == -1) {
+    carp(CARP_FATAL, "column %s doesn't exist", column_name.c_str());
+  }
+
+  for (unsigned int row_idx=0;row_idx < numRows();row_idx++) {
+    sort_indices.insert(pair<string, unsigned int>(getString(sort_col_idx, row_idx), row_idx));
+  }
+
+  reorderRows(sort_indices, ascending);
+}
+
+/**
+ * copies a row to a another DelimitedFile
+ */ 
+void DelimitedFile::copyToRow(
+  DelimitedFile& dest, ///<The DelimitedFile to copy the row to
+  int src_row_idx, ///<The row index of the source (this)
+  int dest_row_idx ///<The row index of the destination.
+  ) {
+  for (unsigned int src_col_idx=0;src_col_idx < numCols();src_col_idx++) {
+    int dest_col_idx = dest.findColumn(getColumnName(src_col_idx));
+    if (dest_col_idx != -1) {
+      dest.setString(dest_col_idx, dest_row_idx, getString(src_col_idx, src_row_idx));
+    } else {
+      carp(CARP_WARNING, "Column %s not found in destination",
+           getColumnName(src_col_idx).c_str());
+    }
+  }
+}
+
+/*Iterator functions.*/
+/**
+ * resets the current_row_ index to 0.
+ */
+void DelimitedFile::reset() {
+  current_row_ = 0;
+}
+
+/**
+ * increments the current_row_, 
+ */
+void DelimitedFile::next() {
+  if (current_row_ < numRows()) {
+    current_row_++;
+  }
+}
+
+/**
+ * \returns whether there are more rows to 
+ * iterate through
+ */
+bool DelimitedFile::hasNext() {
+  return current_row_ < numRows();
+}
+
+/**
+ *Allows object to be printed to a stream
+ */
+std::ostream &operator<< (
+  std::ostream& os, ///< The stream to output to
+  DelimitedFile& delimited_file ///< The delimited file to output
+  ) {
+  //find the maximum number of rows.
+  unsigned int maxRow = 0;
+  for (unsigned int col_idx=0; col_idx < delimited_file.numCols(); col_idx++) {
+    maxRow = max(maxRow, delimited_file.numRows(col_idx));
+  }
+
+  //print out the header if it exists.
+  if (delimited_file.column_names_.size() != 0) {
+    os << delimited_file.column_names_[0];
+    for (unsigned int col_idx=1; col_idx < delimited_file.column_names_.size(); col_idx++) {
+      os << delimited_file.getDelimiter() << delimited_file.column_names_[col_idx];
+    }
+    os << endl;
+  }
+
+  //print out all rows, using delimiter_ when
+  //the row goes past the current column
+  //size.
+  for (unsigned int row_idx=0; row_idx < maxRow; row_idx++) {
+    if (row_idx < delimited_file.numRows(0)) {
+      os << delimited_file.getString((unsigned int)0, row_idx);
+    } else {
+      os << delimited_file.getDelimiter();
+    }
+    for (unsigned int col_idx=1;col_idx < delimited_file.numCols();col_idx++) {
+      os <<delimited_file.getDelimiter();
+      if (row_idx < delimited_file.numRows(col_idx))
+        os << delimited_file.getString(col_idx, row_idx);
+    }
+    os << endl;
+  }
+
+  return os;
+}
+
diff --git a/src/io/DelimitedFile.h b/src/io/DelimitedFile.h
new file mode 100644
index 0000000..80ddf94
--- /dev/null
+++ b/src/io/DelimitedFile.h
@@ -0,0 +1,474 @@
+/**
+ * \file DelimitedFile.h
+ * DATE: Jan 7, 2010
+ * AUTHOR: Sean McIlwain
+ * \brief Object for reading tab-delimited files.
+ * 
+ * This class generates a table of values. The default delimiter is tab.
+ * This class is capable of reading string, integers, and floating point
+ * Types from each cell of the table.  This class also provides function
+ * for reading a list of integers or string from a cell using a delimiter
+ * that is different from the column delimiter (default is comma ',').
+ ****************************************************************************/
+#ifndef DELIMITEDFILE_H
+#define DELIMITEDFILE_H
+
+#include <limits>
+#include <ios>
+#include <iomanip>
+#include <iostream>
+#include <map>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include "parameter.h"
+#include "util/Params.h"
+
+class DelimitedFile {
+
+ protected:
+  /** The data vector is indexed by column, then by row
+   *  Ex. data_[0][4] means 0th column, 4th row
+   *  data_[0] is a string vector of all data in a column.
+   */
+  std::vector<std::vector<std::string> > data_;
+  std::vector<std::string> column_names_;
+  unsigned int current_row_; //used for iterating through the table.
+  char delimiter_;
+
+  /**
+   * reorders the rows of a delimited file using a built map 
+   * of sorted indices.  
+   */
+  template <typename T>
+  void reorderRows(
+    std::multimap<T, unsigned int>& sort_indices, ///<map of indices sorted by type T 
+    bool ascending ///<sort in ascending order?
+    );
+
+ public:
+  /**
+   * \returns a DelimitedFile object 
+   */
+  DelimitedFile(
+    char delimiter = '\t' ///< the delimiter to use (default tab)
+  );
+  
+  /**
+   * \returns a DelimitedFile object and loads the tab-delimited
+   * data specified by file_name.
+   */  
+  DelimitedFile(
+    const char *file_name, ///< the path of the file to read 
+    bool hasHeader = true, ///< indicate whether header exists
+    char delimiter = '\t' ///< the delimiter to use (default tab)
+  );
+
+  /** 
+   * \returns a DelimitedFile object and loads the tab-delimited
+   * data specified by file_name.
+   */
+  DelimitedFile(
+    const std::string& file_name, ///< the path of the file  to read
+    bool hasHeader = true, ///< indicates whether header exists
+    char delimiter = '\t' ///< the delimiter to use (default tab)
+  );
+
+  /**
+   * empties the delimited file
+   */
+  void clear();
+
+  /**
+   * Destructor
+   */
+  virtual ~DelimitedFile();
+  
+
+  /**
+   * sets the delimiter
+   */
+  void setDelimiter(
+    char delimiter ///< the delimiter
+  );
+
+  /**
+   * /returns the delimtier
+   */
+  char getDelimiter() const;
+
+  /**
+   *\returns the number of rows, assuming a square matrix
+   */
+  unsigned int numRows();
+
+  /**
+   *\returns the number of columns
+   */
+  unsigned int numCols();
+
+  /**
+   *\returns the number of rows for a column
+   */
+  unsigned int numRows(
+    unsigned int col_idx ///<the column index
+  );
+
+  /**
+   * clears the current data and column names,
+   * parses the header if it exists,
+   * reads the file one line at a time while
+   * populating the data matrix with the 
+   * strings separated by tabs.
+   */
+  void loadData(
+    const char *file_name, ///< the file path
+    bool hasHeader = true, ///< header indicator
+    char delimiter = '\t' ///< the delimiter to use (default tab).
+  );
+
+  /**
+   * loads a tab delimited file
+   */
+  void loadData(
+    const std::string& file_name, ///< the file path
+    bool hasHeader = true, ///< header indicator
+    char delimiter = '\t' ///< the delimiter to use (default tab).
+  );
+
+  /**
+   * saves a tab delimited file
+   */ 
+  void saveData(
+    const char* file_name ///< the file path
+  );
+
+  /**
+   * saves a tab delimited file
+   */ 
+  void saveData(
+    const std::string& file_name ///< the file path
+  );
+
+  /**
+   * adds a column to the delimited file
+   *\returns the column index.
+   */
+  unsigned int addColumn(
+    const std::string& column_name ///< the column name
+  );
+
+  /**
+   * adds a column to the delimited file
+   *\returns the column index.
+   */
+  unsigned int addColumn(
+    const char* column_name ///< the column name
+  );
+
+  /**
+   * adds a vector of columns to the delimited file
+   */
+  void addColumns(
+    std::vector<std::string>& column_names);
+
+  /**
+   * adds a column to the delimited file
+   */
+  unsigned int addColumn();
+
+  /**
+   * finds the index of a column
+   *\returns the column index, -1 if not found.
+   */ 
+  int findColumn(
+    const std::string& column_name ///< the column name
+  );
+
+ /**
+   * finds the index of a column
+   *\returns the column index, -1 if not found.
+   */ 
+  int findColumn(
+    const char* column_name ///< the column name
+  );
+
+  /**
+    * adds a row to the delimited file
+    *\returns the new row index
+    */
+  unsigned int addRow();
+ 
+  /**
+   *\returns the string vector corresponding to the column
+   */
+  std::vector<std::string>& getColumn(
+    std::string column ///< the column name
+  );
+
+  /**
+   *\returns the string vector corresponding to the column
+   */
+  std::vector<std::string>& getColumn(
+    unsigned int col_idx ///< the column index
+  );
+
+  /**
+   *\returns the name of the column
+   */
+  std::string& getColumnName(
+    unsigned int col_idx ///< the column index
+  );
+  
+  /**
+   *\returns the column_names
+   */
+  std::vector<std::string>& getColumnNames();
+
+  /**
+   *\returns the string value of the cell
+   */
+  std::string& getString(
+    unsigned int col_idx, ///< the column index
+    unsigned int row_idx  ///< the row index
+  );
+
+  /** 
+   * gets a string value of the cell.
+   */
+  std::string& getString(
+    const char* column_name, ///<the column name
+    unsigned int row_idx ///< the row index
+  );
+
+  /**
+   * gets a string value of the cell
+   * uses the current_row_ as the row index
+   */
+  std::string& getString(
+    const char* column_name ///<the column name
+  );
+
+
+  /**
+   * sets the string value of the cell
+   */
+  void setString(
+    unsigned int col_idx, ///< the column index
+    unsigned int row_idx, ///< the row index
+    const std::string& value ///< the new value
+  );
+
+  /**
+   * sets the string value of the cell
+   */
+  void setString(
+    unsigned int col_idx, ///< the column index
+    unsigned int row_idx, ///< the row index
+    const char* value ///< the new value
+  );
+
+  /**
+   *\returns the data of the cell in the specified type
+   */
+  template<typename TValue>
+  TValue getValue(
+    unsigned int col_idx, ///< the column index 
+    unsigned int row_idx  ///< the row index
+  );
+
+  /**
+   * sets the cell value with the specified type
+   */
+  template<typename TValue>
+  void setValue(
+    unsigned int col_idx, ///< the column index 
+    unsigned int row_idx, ///< the row index
+    TValue value ///< the new value
+  ) {
+      int precision = Params::GetInt("precision");
+      std::ostringstream ss;
+      ss << std::setprecision(precision) << value;
+      std::string svalue = ss.str();
+      setString(col_idx, row_idx, svalue);
+  }  
+
+  template<typename TValue>
+  void setValue(
+    const std::string& column_name, ///< the column index
+    unsigned int row_idx, ///< the row index
+    TValue value ///< the new value
+  ) {
+
+    int col_idx = findColumn(column_name);
+    if (col_idx == -1) {
+      carp(CARP_FATAL, "Column not found %s", column_name.c_str());
+    }
+    setValue(col_idx, row_idx, value);
+  }
+
+  /**
+   * gets a double type from cell, checks for infinity. 
+   */
+  FLOAT_T getFloat(
+    unsigned int col_idx, ///< the column index
+    unsigned int row_idx ///< the row index
+  );
+
+  /** 
+   * gets a double type from cell, checks for infinity.
+   */
+  FLOAT_T getFloat(
+    const char* column_name, ///<the column name
+    unsigned int row_idx ///< the row index
+  );
+
+  /**
+   * gets a double value from cell, checks for infinity
+   * uses the current_row_ as the row index
+   */
+  FLOAT_T getFloat(
+    const char* column_name ///<the column name
+  );
+
+  /**
+   * gets a double type from cell, checks for infinity. 
+   */
+  double getDouble(
+    unsigned int col_idx, ///< the column index 
+    unsigned int row_idx ///< the row index
+  );
+
+  /** 
+   * gets a double type from cell, checks for infinity.
+   */
+  double getDouble(
+    const char* column_name, ///<the column name
+    unsigned int row_idx ///<the row index
+  );
+
+  /**
+   * gets a double value from cell, checks for infinity
+   * uses the current_row_ as the row index
+   */
+  double getDouble(
+    const char* column_name ///<the column name
+  );
+
+
+ /**
+   * gets an integer type from cell, checks for infinity. 
+   */
+  int getInteger(
+    unsigned int col_idx, ///< the column index 
+    unsigned int row_idx ///< the row index
+  );
+
+  /**
+   * get an integer type from cell, checks for infintiy.
+   */
+  int getInteger(
+    const char* column_name, ///< the column name
+    unsigned int row_idx ///<the row index
+  );
+
+  /**
+   * get an integer type from cell, checks for infinity.
+   * uses the current_row_ as the row index.
+   */
+  int getInteger(
+    const char* column_name ///< the column name
+  );
+
+  /**
+   * gets an vector of integers from cell where the
+   * string in the cell are integers which are separated
+   * by a delimiter which is differnt than the column
+   * delimiter.  The default delimiter is a comma
+   * uses the current_row_ as the row index.
+   * clears the integer vector before 
+   * populating it.
+   */
+  void getIntegerVectorFromCell(
+    const char* column_name, ///< the column name
+    std::vector<int>& int_vector, ///<the vector of integers
+    char delimiter = ',' ///<the delimiter to use
+  );
+
+  /**
+   * sorts the delimited file treating the key column as float values
+   */
+  void sortByFloatColumn(
+    const std::string& column_name, ///<The name of the key column
+    bool ascending = true ///<sort in ascending order?
+  );
+  
+  /**
+   * sorts the delimited file treating the key column as integers
+   */
+  void sortByIntegerColumn(
+    unsigned int col_idx, ///< the index of the key column 
+    bool ascending = true ///< sort in ascending order?
+  );
+
+  /**
+   * sorts the delimited file treating the key column as integers
+   */
+  void sortByIntegerColumn(
+    const std::string& column_name, ///< the name of the key column
+    bool ascending = true ///< sort in ascending order?
+  );
+
+  /**
+   * sorts the delimited file treating the key column as a string
+   */
+  void sortByStringColumn(
+    const std::string& column_name, ///< the name of the key column
+    bool ascending = true ///< sort in ascending order?
+  );
+
+  /**
+   * copies a row to a another DelimitedFile
+   */ 
+  void copyToRow(
+    DelimitedFile& dest, ///<The DelimitedFile to copy the row to
+    int src_row_idx, ///<The row index of the source (this)
+    int dest_row_idx ///<The row index of the destination.
+  );
+
+  /*Iterator functions.*/
+  /**
+   * resets the current_row_ index to 0.
+   */
+  void reset();
+
+  /**
+   * increments the current_row_, 
+   */
+  void next();
+
+
+  /**
+   * \returns whether there are more rows to 
+   * iterate through
+   */
+  bool hasNext();
+
+  /**
+   * Allows object to be printed to a stream
+   */
+  friend std::ostream &operator<< (
+    std::ostream& os, ///< The stream to output to
+    DelimitedFile& delimited_file ///< The delimited file to output to
+  ); 
+};
+
+#endif //DELIMITEDFILE_H
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/DelimitedFileReader.cpp b/src/io/DelimitedFileReader.cpp
new file mode 100644
index 0000000..0d54784
--- /dev/null
+++ b/src/io/DelimitedFileReader.cpp
@@ -0,0 +1,504 @@
+/*************************************************************************
+ * \file DelimitedFileReader.cpp
+ * \brief Object for parsing the tab-delimited files
+ *************************************************************************/
+
+#include "DelimitedFileReader.h"
+
+#include <fstream>
+
+#include <iostream>
+#include <string>
+
+#include "carp.h"
+#include "DelimitedFile.h"
+#include "util/StringUtils.h"
+
+using namespace std;
+
+/**
+ * \returns a DelimitedFileReader object
+ */  
+DelimitedFileReader::DelimitedFileReader():
+  num_rows_valid_(false), istream_ptr_(NULL), delimiter_('\t'), owns_stream_(false) {
+}
+
+/**
+ * \returns a DelimitedFileReader object and loads the tab-delimited
+ * data specified by file_name.
+ */ 
+DelimitedFileReader::DelimitedFileReader(
+  const char *file_name, ///< the path of the file to read
+  bool has_header, ///< indicates whether the header exists (default true).
+  char delimiter ///< the delimiter to use (default tab).
+): istream_ptr_(NULL), num_rows_valid_(false), delimiter_(delimiter) {
+  loadData(file_name, has_header);
+}
+
+/** 
+ * \returns a DelimitedFileReader object and loads the tab-delimited
+ * data specified by file_name.
+ */
+DelimitedFileReader::DelimitedFileReader(
+  const std::string& file_name, ///< the path of the file  to read
+  bool has_header, ///< indicates whether the header exists (default true).
+  char delimiter ///< the delimiter to use (default tab)
+): istream_ptr_(NULL), delimiter_(delimiter) {
+  loadData(file_name, has_header);
+}
+
+/**
+ * \returns a DelimitedFileReader object and loads the tab-delimted
+ * data specified by istream.
+ */
+DelimitedFileReader::DelimitedFileReader(
+  std::istream* istream_ptr, ///< the stream to be read
+  bool has_header, ///<indicates whether header exists
+  char delimiter ///< the delimiter to use (default tab)
+): istream_ptr_(istream_ptr), istream_begin_(istream_ptr->tellg()), delimiter_(delimiter),
+has_header_(has_header), owns_stream_(false) {
+  loadData();
+}
+
+
+/**
+ * Destructor
+ */
+DelimitedFileReader::~DelimitedFileReader() {
+  if (istream_ptr_ != NULL && owns_stream_) {
+    delete istream_ptr_;
+  }
+}
+
+/**
+ * \returns the number of rows, assuming a square matrix
+ */
+unsigned int DelimitedFileReader::numRows() {
+  if (!num_rows_valid_) {
+    num_rows_ = 0;
+
+    streampos last_pos = istream_ptr_->tellg();
+
+    istream_ptr_->clear();
+    istream_ptr_->seekg(istream_begin_, ios::beg);
+    
+    string temp_str;
+
+    while (getline(*istream_ptr_, temp_str)) {
+      num_rows_++;
+    }
+    
+    if (has_header_) {
+      num_rows_--;
+    }
+    num_rows_valid_ = true;
+    istream_ptr_->clear();
+    istream_ptr_->seekg(last_pos);
+  }
+  return num_rows_;
+}
+ 
+/**
+ *\returns the number of columns
+ */
+unsigned int DelimitedFileReader::numCols() {
+  return column_names_.size();
+}
+
+/*
+ *\returns a printable string of the columns available in this file
+ */
+string DelimitedFileReader::getAvailableColumnsString() {
+
+  ostringstream oss;
+  oss << "Available columns:" << endl;
+  for (unsigned int col_idx=0;col_idx < numCols();col_idx++) {
+    oss << col_idx << "  " << getColumnName(col_idx) << endl;
+  }
+
+  string ans = oss.str();
+  return ans;
+}
+
+/*
+ *\returns the column name header string
+ */
+string DelimitedFileReader::getHeaderString() {
+  if (numCols() == 0) {
+    return string("");
+  }
+  
+  ostringstream oss;
+  oss << getColumnName(0);
+  for (unsigned int col_idx=1;col_idx < numCols();col_idx++) {
+    oss << delimiter_ << getColumnName(col_idx);
+  }
+  
+  string ans = oss.str();
+  return ans;
+}
+
+
+void DelimitedFileReader::loadData() {
+  if (!istream_ptr_->good()) {
+    carp(CARP_ERROR, "Stream is not good!");
+    carp(CARP_ERROR, "Filename:%s", file_name_.c_str());
+    carp(CARP_ERROR, "EOF:%i", istream_ptr_ -> eof());
+    carp(CARP_ERROR, "Fail:%i", istream_ptr_ -> fail());
+    carp(CARP_ERROR, "Bad:%i", istream_ptr_ -> bad());
+    carp(CARP_FATAL, "Exiting....");
+  }
+  current_row_ = 0;
+  num_rows_valid_ = false;
+  has_current_ = false;
+  column_mismatch_warned_ = false;
+  istream_begin_ = istream_ptr_->tellg(); 
+
+  has_next_ = !getline(*istream_ptr_, next_data_string_).fail();
+  next_data_string_ = StringUtils::Trim(next_data_string_);
+  if (has_header_) {
+    if (has_next_) {
+      column_names_ = StringUtils::Split(next_data_string_, delimiter_);
+      has_next_ = !getline(*istream_ptr_, next_data_string_).fail();
+    } else {
+      carp(CARP_WARNING, "No data/headers found!");
+      return;
+    }
+  }
+
+  if (has_next_) {
+    next();
+  } 
+}
+
+/**
+ * clears the current data and column names,
+ * parses the header if it exists,
+ * reads the file one line at a time while
+ * populating the data matrix with the 
+ * strings separated by tabs.
+ */
+void DelimitedFileReader::loadData(
+  const char *file_name, ///< the file path
+  bool has_header ///< header indicator
+  ) {
+
+  file_name_ = string(file_name);
+  has_header_ = has_header;
+
+  //special case, if filename is '-', then use standard input.
+  if (file_name_ == "-") {
+    istream_ptr_ = &cin;
+    owns_stream_ = false;
+  } else {
+    istream_ptr_ = new ifstream(file_name, ios::in);
+    owns_stream_ = true;
+  }
+  loadData();
+
+}
+
+/**
+ * loads a tab delimited file
+ */
+void DelimitedFileReader::loadData(
+  const string& file, ///< the file path
+  bool has_header ///< header indicator
+  ) {
+  loadData(file.c_str(), has_header);
+}
+
+/**
+ * finds the index of a column
+ *\returns the column index, -1 if not found.
+ */ 
+int DelimitedFileReader::findColumn(
+  const string& column_name ///< the column name
+  ) {
+  for (unsigned int col_idx=0;col_idx < column_names_.size();col_idx++) {
+    if (column_names_[col_idx] == column_name) {
+      return col_idx;
+    }
+  }
+  return -1;
+}
+
+/**
+ * finds the index of a column
+ *\returns the column index, -1 if not found.
+ */ 
+int DelimitedFileReader::findColumn(
+  const char* column_name ///< the column name
+) {
+  return findColumn(string(column_name));
+}
+
+/**
+ *\returns the name of the column
+ */
+const string& DelimitedFileReader::getColumnName(
+  unsigned int col_idx ///< the column index
+  ) {
+  return column_names_.at(col_idx);
+}
+
+/**
+ *\returns the column_names
+ */
+const vector<string>& DelimitedFileReader::getColumnNames() {
+  return column_names_;
+}
+
+/**
+ *\returns the current row index
+ */
+int DelimitedFileReader::getCurrentRowIndex() const {
+  return current_row_;
+}
+
+
+/**
+ * \returns the current row string
+ */
+const string& DelimitedFileReader::getString() {
+  if (!has_current_) {
+    carp(CARP_FATAL, "End of file!");
+  }
+  return current_data_string_;
+}
+
+/**
+ *\returns the string value of the cell
+ */
+const string& DelimitedFileReader::getString(
+  unsigned int col_idx ///< the column index
+  ) {
+  if (col_idx >= data_.size()) {
+    carp(CARP_FATAL, "col idx:%i is out of bounds! (0,%i,%i)",
+         col_idx, (column_names_.size()-1), (data_.size()-1));
+  }
+  return data_.at(col_idx);
+}
+
+/** 
+ * \returns the string value of the cell.
+ */
+const string& DelimitedFileReader::getString(
+  const char* column_name ///<the column name
+  ) {
+  int col_idx = findColumn(column_name);
+  if (col_idx == -1) {
+    carp(CARP_FATAL, "Cannot find column %s\n" "Available Columns:%s\n",
+         column_name, getAvailableColumnsString().c_str());
+  }
+  return getString(col_idx);
+}
+
+/**
+ * \returns the value of the cell
+ * using the current row
+ */ 
+template<typename TValue>
+TValue DelimitedFileReader::getValue(
+  unsigned int col_idx ///< the column index 
+  ) {
+  return StringUtils::FromString<TValue>(getString(col_idx));
+}
+
+/**
+ * \returns the FLOAT_T value of a cell, checks for infinity
+ */
+FLOAT_T DelimitedFileReader::getFloat(
+  unsigned int col_idx ///< the column index
+  ) {
+  const string& string_ans = getString(col_idx);
+  if (string_ans == "Inf") {
+    return numeric_limits<FLOAT_T>::infinity();
+  } else if (string_ans == "-Inf") {
+    return -numeric_limits<FLOAT_T>::infinity();
+  } else {
+    return getValue<FLOAT_T>(col_idx);
+  }
+}
+
+/** 
+ * \returns the FLOAT_T value of a cell, checks for infinity.
+ */
+FLOAT_T DelimitedFileReader::getFloat(
+    const char* column_name ///<the column name
+) {
+
+  carp(CARP_DETAILED_DEBUG, "getFloat for %s", column_name);
+  int col_idx = findColumn(column_name);
+  if (col_idx == -1) {
+    carp(CARP_FATAL, "Cannot find column %s\n" 
+                     "Available Columns:%s\n",
+                     column_name, getAvailableColumnsString().c_str());
+  }
+  return getFloat(col_idx);
+}
+
+/**
+ * \returns the double value of a cell, checks for infinity. 
+ */
+double DelimitedFileReader::getDouble(
+  unsigned int col_idx ///< the column index 
+  ) {
+  const string& string_ans = getString(col_idx);
+  if (string_ans == "") {
+    return 0.0;
+  } else if (string_ans == "Inf") {
+    return numeric_limits<double>::infinity();
+  } else if (string_ans == "-Inf") {
+    return -numeric_limits<double>::infinity();
+  } else {
+    return getValue<double>(col_idx);
+  }
+}
+
+/** 
+ * \returns the double value of a cell, checks for infinity.
+ */
+double DelimitedFileReader::getDouble(
+  const char* column_name ///<the column name
+  ) {
+
+  int col_idx = findColumn(column_name);
+  if (col_idx == -1) {
+    carp(CARP_FATAL, "Cannot find column %s\n" 
+                     "Available Columns:%s\n",
+                     column_name, getAvailableColumnsString().c_str());
+  }
+  return getDouble(col_idx);
+}
+
+/**
+ * \returns the integer value of a cell. 
+ */
+int DelimitedFileReader::getInteger(
+  unsigned int col_idx ///< the column index 
+  ) {
+  //TODO : check the string for a valid integer.
+  return getValue<int>(col_idx);
+}
+
+/**
+ * \returns the integer value of a cell, checks for infintiy.
+ */
+int DelimitedFileReader::getInteger(
+  const char* column_name ///< the column name
+) {
+
+  int col_idx = findColumn(column_name);
+  if (col_idx == -1) {
+    carp(CARP_FATAL, "Cannot find column %s", column_name);
+  }
+
+  return getInteger(col_idx);
+}
+
+/**
+ * gets an vector of integers from cell where the
+ * string in the cell are integers which are separated
+ * by a delimiter which is differnt than the column
+ * delimiter.  The default delimiter is a comma
+ * uses the current_row_ as the row index.
+ * clears the integer vector before 
+ * populating it.
+ */
+void DelimitedFileReader::getIntegerVectorFromCell(
+    const char* column_name, ///< the column name
+    vector<int>& int_vector, ///<the vector of integers
+    char delimiter ///<the delimiter to use
+  ) {
+  
+  //get the list of strings separated by delimiter
+  vector<string> string_vector_ans = StringUtils::Split(getString(column_name), delimiter);
+
+  //convert each string into an integer.
+  int_vector.clear();
+
+  for (vector<string>::iterator string_iter = string_vector_ans.begin();
+    string_iter != string_vector_ans.end();
+    ++string_iter) {
+    int_vector.push_back(StringUtils::FromString<int>(*string_iter));
+  }
+}
+
+/**
+ * gets an vector of doubles from cell where the
+ * string in the cell are integers which are separated
+ * by a delimiter which is differnt than the column
+ * delimiter.  The default delimiter is a comma
+ * uses the current_row_ as the row index.
+ * clears the double vector before 
+ * populating it.
+ */
+void DelimitedFileReader::getDoubleVectorFromCell(
+  const char* column_name, ///< the column name
+  std::vector<double>& double_vector, ///<the vector of integers
+  char delimiter ///<the delimiter to use
+) {
+  
+  //get the list of strings separated by delimiter
+  vector<string> string_vector_ans = StringUtils::Split(getString(column_name), delimiter);
+
+  //convert each string into an integer.
+  double_vector.clear();
+
+  for (vector<string>::iterator string_iter = string_vector_ans.begin();
+       string_iter != string_vector_ans.end();
+       ++string_iter) {
+    double_vector.push_back(StringUtils::FromString<double>(*string_iter));
+  }
+}
+
+/*Iterator functions.*/
+/**
+ * resets the file pointer to the beginning of the file.
+ */
+void DelimitedFileReader::reset() {
+  istream_ptr_->clear();
+  istream_ptr_->seekg(istream_begin_, ios::beg);
+  loadData();
+}
+
+/**
+ * parses the next line in the file. 
+ */
+void DelimitedFileReader::next() {
+  if (has_next_) {
+    current_row_++;
+    current_data_string_ = next_data_string_;
+    //parse next_data_string_ into data_
+    data_ = StringUtils::Split(current_data_string_, delimiter_);
+    //make sure data has the right number of columns for the header.
+    if (data_.size() < column_names_.size()) {
+      if (!column_mismatch_warned_) {
+        carp(CARP_WARNING, "Column count %d for line %d is less than header %d",
+             data_.size(), current_row_, column_names_.size());
+        carp(CARP_WARNING, "%s", current_data_string_.c_str());
+        carp(CARP_WARNING, "Suppressing warnings, other mismatches may exist!");
+        column_mismatch_warned_ = true;
+      }
+      while (data_.size() < column_names_.size()) {
+        data_.push_back("");
+      }
+    }
+
+    //read next line
+    has_next_ = !getline(*istream_ptr_, next_data_string_).fail();
+    has_current_ = true;
+  } else {
+    has_current_ = false;
+  }
+}
+
+/**
+ * \returns whether there are more rows to 
+ * iterate through
+ */
+bool DelimitedFileReader::hasNext() {
+  return has_next_ || has_current_;
+}
+
diff --git a/src/io/DelimitedFileReader.h b/src/io/DelimitedFileReader.h
new file mode 100644
index 0000000..6a1d524
--- /dev/null
+++ b/src/io/DelimitedFileReader.h
@@ -0,0 +1,293 @@
+/**
+ * \file DelimitedFileReader.h
+ * $Revision: 1.00 $ 
+ * DATE: Jan 7, 2010
+ * AUTHOR: Sean McIlwain
+ * \brief Object for reading tab-delimited files.
+ * This class generates a table of values. The default delimiter is tab.
+ * This class is capable of reading string, integers, and floating point
+ * Types from each cell of the table.  This class also provides function
+ * for reading a list of integers or string from a cell using a delimiter
+ * that is different from the column delimiter (default is comma ',').
+ * This class reads the data in line by line
+ ****************************************************************************/
+#ifndef DELIMITEDFILEREADER_H
+#define DELIMITEDFILEREADER_H
+
+#include <limits>
+#include <ios>
+#include <iomanip>
+#include <iostream>
+#include <map>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include "parameter.h"
+#include "util/Params.h"
+
+class DelimitedFileReader {
+
+ protected:
+  /** The data vector is indexed by column, then by row
+   *  Ex. data_[0][4] means 0th column, 4th row
+   *  data_[0] is a string vector of all data in a column.
+   */
+
+  std::string next_data_string_; ///<the next data string.
+  std::string current_data_string_; ///<the current data string.
+  std::vector<std::string> data_; ///<the current vectorized data.
+  std::vector<std::string> column_names_; ///<the column names.
+
+  char delimiter_; ///<the delimiter to use.
+
+  unsigned int current_row_; ///<current row count
+  bool has_next_; ///<indicator of whether there is another row to parse
+  bool has_current_; ///<indicator of whether the current row is parsed
+  bool has_header_; ///<indicator of whether there is a header in the file
+
+  bool owns_stream_; ///<indicator of whether the object owns the stream
+
+  std::istream* istream_ptr_; ///<pointer to the stream itself
+
+  std::streampos istream_begin_; ///<position pointer for the beginning of the stream
+
+  std::string file_name_; ///<file name that the stream is open on.
+
+  bool num_rows_valid_; ///<indicator whether the number of rows is valid
+  unsigned int num_rows_; ///<number of rows in the file.
+
+  bool column_mismatch_warned_; ///<indicator of whether the column mismatch warning has been issued
+
+  /**
+   * clears the current data and column names,
+   * parses the header if it exists,
+   * reads the file one line at a time while
+   * populating the data matrix with the 
+   * strings separated by delimiter.
+   */
+  void loadData();
+
+  virtual void loadData(
+    const char *file_name, ///< the file path
+    bool has_header = true ///< header indicator
+  );
+
+  virtual void loadData(
+    const std::string& file_name, ///< the file path
+    bool has_header = true ///< header indicator
+  );
+
+ public:
+  /**
+   * \returns a blank DelimitedFileReader object 
+   */
+  DelimitedFileReader();
+  
+  /**
+   * \returns a DelimitedFileReader object and loads the tab-delimited
+   * data specified by file_name.
+   */  
+  DelimitedFileReader(
+    const char *file_name, ///< the path of the file to read
+    bool has_header = true, ///< indicates whether the header exists (default true).
+    char delimiter = '\t' ///< the delimiter to use (default tab).
+  );
+
+  /** 
+   * \returns a DelimitedFileReader object and loads the tab-delimited
+   * data specified by file_name.
+   */
+  DelimitedFileReader(
+    const std::string& file_name, ///< the path of the file  to read
+    bool has_header = true, ///< indicates whether the header exists (default true).
+    char delimiter = '\t' ///< the delimiter to use (default tab)
+  );
+
+  DelimitedFileReader(
+    std::istream* istream_ptr, ///< the stream to be read
+    bool has_header = true, ///<indicates whether header exists
+    char delimiter = '\t' ///< the delimiter to use (default tab)
+  );
+
+  /**
+   * Destructor
+   */
+  virtual ~DelimitedFileReader();
+
+  /**
+   *\returns the number of rows, assuming a square matrix
+   */
+  unsigned int numRows();
+
+  /**
+   *\returns the number of columns
+   */
+  unsigned int numCols();
+
+  /*
+   *\returns a printable string of the columns available in this file
+   */
+  std::string getAvailableColumnsString();
+
+  /*
+   *\returns the column name header string
+   */
+  std::string getHeaderString();
+
+
+  /**
+   * finds the index of a column
+   *\returns the column index, -1 if not found.
+   */ 
+  int findColumn(
+    const std::string& column_name ///< the column name
+  );
+
+ /**
+   * finds the index of a column
+   *\returns the column index, -1 if not found.
+   */
+  int findColumn(
+    const char* column_name ///< the column name
+  );
+
+  /**
+   *\returns the name of the column
+   */
+  const std::string& getColumnName(
+    unsigned int col_idx ///< the column index
+  );
+  
+  /**
+   *\returns the column_names
+   */
+  const std::vector<std::string>& getColumnNames();
+
+  /**
+   *\returns the current row index
+   */
+  int getCurrentRowIndex() const;
+
+  /**
+   * \returns the current row string
+   */
+  const std::string& getString();
+
+  /**
+   * \returns the string value of the cell
+   * using the current row
+   */
+  const std::string& getString(
+    const char* column_name ///<the column name
+  );
+
+  /**
+   * \returns the string value of the cell
+   * using the current row
+   */
+  const std::string& getString(
+    unsigned int col_idx ///< the column index
+  );
+
+  /**
+   * \returns the value of the cell
+   * using the current row
+   */ 
+  template<typename TValue>
+  TValue getValue(
+    unsigned int col_idx ///< the column index
+  );
+
+  /**
+   * \returns the double value of the cell, checks for infinity
+   * uses the current row
+   */
+  FLOAT_T getFloat(
+    const char* column_name ///<the column name
+  );
+
+  FLOAT_T getFloat(
+    unsigned int col_idx ///<the col index
+  );
+
+  /**
+   * \returns the double value from cell, checks for infinity
+   * uses the current_row_ as the row index
+   */
+  double getDouble(
+    const char* column_name ///<the column name
+  );
+
+  double getDouble(
+    unsigned int col_idx ///<the col index
+  );
+
+  /**
+   * get an integer type from cell, checks for infinity.
+   * uses the current_row_ as the row index.
+   */
+  int getInteger(
+    const char* column_name ///< the column name
+  );
+
+  int getInteger(
+    unsigned int col_idx ///<the col index
+  );
+
+  /**
+   * gets an vector of integers from cell where the
+   * string in the cell are integers which are separated
+   * by a delimiter which is differnt than the column
+   * delimiter.  The default delimiter is a comma
+   * uses the current_row_ as the row index.
+   * clears the integer vector before 
+   * populating it.
+   */
+  void getIntegerVectorFromCell(
+    const char* column_name, ///< the column name
+    std::vector<int>& int_vector, ///<the vector of integers
+    char delimiter = ',' ///<the delimiter to use
+  );
+
+  /**
+   * gets an vector of doubles from cell where the
+   * string in the cell are integers which are separated
+   * by a delimiter which is differnt than the column
+   * delimiter.  The default delimiter is a comma
+   * uses the current_row_ as the row index.
+   * clears the double vector before 
+   * populating it.
+   */
+  void getDoubleVectorFromCell(
+    const char* column_name, ///< the column name
+    std::vector<double>& double_vector, ///<the vector of integers
+    char delimiter = ',' ///<the delimiter to use
+  );
+
+  /*Iterator functions.*/
+  /**
+   * resets the file pointer to the beginning of the file.
+   */
+  void reset();
+
+  /**
+   * parses the next line in the file. 
+   */
+  void next();
+
+  /**
+   * \returns whether there are more rows to 
+   * iterate through
+   */
+  bool hasNext();
+};
+
+#endif //DELIMITEDFILEREADER_H
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/DelimitedFileWriter.cpp b/src/io/DelimitedFileWriter.cpp
new file mode 100644
index 0000000..463773f
--- /dev/null
+++ b/src/io/DelimitedFileWriter.cpp
@@ -0,0 +1,168 @@
+/**
+ * \file DelimitedFileWriter.cpp
+ * $Revision: 1.0 $
+ * DATE: October 19, 2010
+ * AUTHOR: Barbara Frewen
+ * \brief Object for writing tab-delimited files.
+ * This class writes to files one line at a time, creating a table of
+ * data.  The values for the current row are set one column at a time
+ * and then the row is written to file, separating columns of data
+ * with the delimiter.  The default delimiter is tab, but can be set
+ * to any character.  A header row may be defined and printed to the
+ * file at any row in the flile.  Once a header has been written,
+ * every row after that will have the same number of fields.
+ */
+
+#include "DelimitedFileWriter.h"
+#include "util/FileUtils.h"
+#include "util/Params.h"
+
+#include <fstream>
+
+using namespace std;
+
+/**
+ * \returns An empty DelimitedFileWriter object.
+ */
+DelimitedFileWriter::DelimitedFileWriter()
+: file_ptr_(NULL),
+  delimiter_('\t') { // default is tab
+}
+
+/**
+ * \returns A DelimitedFileWriter object with the given file to
+ * write to.
+ */
+DelimitedFileWriter::DelimitedFileWriter
+(const char* filename) // full path of file
+: file_ptr_(NULL),
+  delimiter_('\t') { // default is tab
+  this->openFile(filename);
+}
+
+/**
+ * Destructor
+ */
+DelimitedFileWriter::~DelimitedFileWriter() {
+  if( file_ptr_ ) {
+    file_ptr_->close();
+    delete file_ptr_;
+  }
+}
+
+/**
+ * Writes any existing data, closes any open file and opens the
+ * given file.
+ */
+void DelimitedFileWriter::openFile(const char* filename) {
+  // write any existing data and close file
+  if( file_ptr_ ) {
+    writeRow();
+    file_ptr_->close();
+    delete file_ptr_;
+  }
+
+  // open the file if either it doesn't exist or if we are allowed to overwrite
+  file_ptr_ = FileUtils::GetWriteStream(filename, Params::GetBool("overwrite"));
+  if( file_ptr_ == NULL ) {
+    carp(CARP_FATAL, "Error creating file '%s'.", filename);
+  }
+}
+
+/**
+ * Sets the delimeter to separate columns.
+ */
+void DelimitedFileWriter::setDelimiter(char delimiter) {
+  delimiter_ = delimiter;
+}
+
+/**
+ * Sets the name of the column at the given index, beginning with
+ * zero.  Replaces any existing name.
+ */
+void DelimitedFileWriter::setColumnName(const string& name, ///< new name to set
+                                        unsigned int col_idx) {///< col to name
+  while( column_names_.size() <= col_idx ) {
+    column_names_.push_back("");
+  }
+  column_names_[col_idx] = name;
+}
+
+/**
+ * Sets the names of all columns, clearing any existing names.  Pass an
+ * empty vector as the 'names' argument to clear any existing column
+ * names.
+ */
+void DelimitedFileWriter::setColumnNames(const vector<string>& names) {
+  column_names_.clear();
+  column_names_ = names;
+}
+
+/**
+ * Writes the data of the current line to file, clears current data.
+ * If there are column headers set, the line printed will have at
+ * least as many fields as there are column headers.
+ */
+void DelimitedFileWriter::writeRow() {
+  if( current_row_.empty() ) {
+    return;
+  }
+
+  // make the row as long as the header
+  while( current_row_.size() < column_names_.size()) {
+    current_row_.push_back("");
+  }
+  // TODO? warning if row is longer than non-empty header?
+
+  // print each value separated by delimiter
+  *file_ptr_ << current_row_[0];
+  for(size_t idx = 1; idx < current_row_.size(); idx++) {
+    *file_ptr_ << delimiter_ << current_row_[idx];
+  }
+  // end with newline
+  *file_ptr_ << endl;
+
+  // clear the current_row and refill with blanks
+  // if there is a header, that is the min length
+  // if not, each row can be a different length
+  current_row_.assign(column_names_.size(), "");
+
+}
+
+/**
+ * Writes any given column headers to file.  For missing column
+ * headers (e.g. if columns 0 and 2 are set, but not 1) print
+ * "column_#".
+ */
+void DelimitedFileWriter::writeHeader() {
+  
+  if( column_names_.empty() ) {
+    return;
+  }
+  
+  if( file_ptr_ == NULL || !file_ptr_->is_open() ) {
+    carp(CARP_FATAL, "Cannot write to NULL delimited file.");
+  }
+  
+  *file_ptr_ << column_names_[0];
+  for(size_t idx = 1; idx < column_names_.size(); idx++) {
+    if( column_names_[idx].empty() ) {
+      *file_ptr_ << delimiter_ << "column_" << (idx+1); 
+    } else {
+      *file_ptr_ << delimiter_ << column_names_[idx]; 
+    }
+  }
+  
+  *file_ptr_ << endl;
+
+  // with a header, each line must be that length
+  current_row_.assign(column_names_.size(), "");
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/io/DelimitedFileWriter.h b/src/io/DelimitedFileWriter.h
new file mode 100644
index 0000000..f3ab26a
--- /dev/null
+++ b/src/io/DelimitedFileWriter.h
@@ -0,0 +1,128 @@
+/**
+ * \file DelimitedFileWriter.h
+ * $Revision: 1.0 $
+ * DATE: October 19, 2010
+ * AUTHOR: Barbara Frewen
+ * \brief Object for writing tab-delimited files.
+ * This class writes to files one line at a time, creating a table of
+ * data.  The values for the current row are set one column at a time
+ * and then the row is written to file, separating columns of data
+ * with the delimiter.  The default delimiter is tab, but can be set
+ * to any character.  A header row may be defined and printed to the
+ * file at any row in the flile.  Once a header has been written,
+ * every row after that will have the same number of fields.
+ */
+
+#ifndef DELIMITED_FILE_WRITER_H
+#define DELIMITED_FILE_WRITER_H
+
+#include <vector>
+#include <string>
+#include <algorithm>
+#include <sstream>
+#include <iomanip>
+#include <ios>
+#include "parameter.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+
+class DelimitedFileWriter {
+
+ protected:
+  std::ofstream* file_ptr_; ///< the file to write to
+  char delimiter_; ///< separate columns with this character
+  std::vector<std::string> column_names_; ///< one entry per column
+  std::vector<std::string> current_row_; ///< values for next row to write
+
+ public:
+  /**
+   * \returns An empty DelimitedFileWriter object.
+   */
+  DelimitedFileWriter();
+
+  /**
+   * \returns A DelimitedFileWriter object with the given file to
+   * write to.
+   */
+  explicit DelimitedFileWriter(const char* filename); // full path of file
+
+  /**
+   * Destructor
+   */
+  virtual ~DelimitedFileWriter();
+
+  /**
+   * Writes any existing data, closes any open file and opens the
+   * given file.
+   */
+  virtual void openFile(const char* filename);
+
+  /**
+   * Sets the delimeter to separate columns.
+   */
+  void setDelimiter(char delimiter);
+
+  /**
+   * Sets the name of the column at the given index, beginning with
+   * zero.  Replaces any existing name.
+   */
+  void setColumnName(const std::string& name, ///< new name to set
+                     unsigned int col_idx);   ///< column to name
+
+  /**
+   * Sets the names of all columns, clearing any existing names.
+   */
+  void setColumnNames(const std::vector<std::string>& names);
+
+  /**
+   * Writes any given column headers to file.
+   */
+  void writeHeader();
+
+  /**
+   * Writes the data of the current line to file, clears current data.
+   */
+  void writeRow();
+
+  // template functions only compile correctly when in the header file
+
+  /**
+   * Sets the value for the current row of the given column.
+   */
+  template<typename ValueType>
+  void setColumnCurrentRow
+    (unsigned int col_idx, ///< set value for this column
+     const ValueType& value, ///< the value to set
+     unsigned int precision, ///<written at this precision
+     bool fixed_float = true) { ///<use fixed float notation?
+
+    // make sure the current_row_ is long enough
+    size_t max_size = std::max((size_t)col_idx + 1, column_names_.size());
+    
+    while( current_row_.size() < max_size ) {
+      current_row_.push_back("");
+    }
+    
+    current_row_[col_idx] = StringUtils::ToString(value, precision, fixed_float);
+  }
+
+  /**
+   * Sets the value for the current row of the given column.
+   */
+  template<typename ValueType>
+  void setColumnCurrentRow
+    (unsigned int col_idx, ///< set value for this column
+     const ValueType& value) { ///< the value to set
+    // make sure the current_row_ is long enough
+    size_t max_size = std::max((size_t)col_idx + 1, column_names_.size());
+    
+    while( current_row_.size() < max_size ) {
+      current_row_.push_back("");
+    }
+    
+    current_row_[col_idx] = StringUtils::ToString(value);
+  }
+
+};
+
+#endif //DELIMITED_FILE_WRITER_H
diff --git a/src/io/HTMLWriter.cpp b/src/io/HTMLWriter.cpp
new file mode 100644
index 0000000..0690f12
--- /dev/null
+++ b/src/io/HTMLWriter.cpp
@@ -0,0 +1,14 @@
+#include "HTMLWriter.h"
+
+using namespace Crux;
+using namespace boost;
+using namespace std;
+
+
+HTMLWriter::HTMLWriter() : PMCDelimitedFileWriter() {
+  setWriteHTML(true);
+}
+
+HTMLWriter::~HTMLWriter() {
+  closeFile();
+}
diff --git a/src/io/HTMLWriter.h b/src/io/HTMLWriter.h
new file mode 100644
index 0000000..5abbb06
--- /dev/null
+++ b/src/io/HTMLWriter.h
@@ -0,0 +1,18 @@
+#ifndef HTMLWRITER_H
+#define HTMLWRITER_H
+
+#include <vector>
+
+#include "PMCDelimitedFileWriter.h"
+
+class HTMLWriter : public PMCDelimitedFileWriter {
+
+ public:
+
+  HTMLWriter();
+
+  ~HTMLWriter();
+
+};
+
+#endif
diff --git a/src/io/LineFileReader.cpp b/src/io/LineFileReader.cpp
new file mode 100644
index 0000000..9dac069
--- /dev/null
+++ b/src/io/LineFileReader.cpp
@@ -0,0 +1,156 @@
+/*************************************************************************
+ * \file LineFileReader.cpp
+ * \brief Object for parsing the tab-delimited files
+ *************************************************************************/
+
+#include "LineFileReader.h"
+
+#include <fstream>
+
+#include "carp.h"
+
+using namespace std;
+
+/**
+ * \returns a LineFileReader object
+ */  
+LineFileReader::LineFileReader() {
+
+  file_ptr_ = NULL;
+}
+
+/**
+ * \returns a LineFileReader object and loads the tab-delimited
+ * data specified by file_name.
+ */  
+LineFileReader::LineFileReader(
+  const char *file_name ///< the path of the file to read 
+  ) {
+
+  file_ptr_ = NULL;
+  loadData(file_name);
+}
+
+/** 
+ * \returns a LineFileReader object and loads the tab-delimited
+ * data specified by file_name.
+ */
+LineFileReader::LineFileReader(
+    const string& file_name ///< the path of the file  to read
+  ) {
+
+  file_ptr_ = NULL;
+  loadData(file_name);
+}
+
+/**
+ * Destructor
+ */
+LineFileReader::~LineFileReader() {
+
+  if (file_ptr_ != NULL) {
+
+    file_ptr_ -> close();
+    delete file_ptr_;
+  }
+}
+
+/**
+ * clears the current data and column names,
+ * parses the header if it exists,
+ * reads the file one line at a time while
+ * populating the data matrix with the 
+ * strings separated by tabs.
+ */
+void LineFileReader::loadData(
+  const char *file_name ///< the file path
+  ) {
+
+  file_name_ = string(file_name);
+
+  file_ptr_ = new fstream(file_name, ios::in);
+  current_row_ = 0;
+
+
+  if (!file_ptr_ -> is_open()) {
+    carp(CARP_FATAL, "Opening %s or reading failed", file_name);
+    return;
+  } else {
+    has_next_ = !getline(*file_ptr_, next_data_string_).fail();
+    carp(CARP_DEBUG, "first line:%s", next_data_string_.c_str());
+    if (!has_next_) {
+      carp(CARP_WARNING, "No data found!");
+    } 
+  }
+}
+
+/**
+ * loads a tab delimited file
+ */
+void LineFileReader::loadData(
+  const string& file ///< the file path
+  ) {
+
+  loadData(file.c_str());
+}
+
+/**
+ * \returns the current row string
+ */
+const string& LineFileReader::current() {
+  if (!has_current_) {
+    //carp(CARP_FATAL, "End of file!");
+  }
+  
+  return current_data_string_;
+}
+
+/*Iterator functions.*/
+
+/**
+ * resets the file pointer to the beginning of the file.
+ */
+void LineFileReader::reset() {
+
+  if (file_ptr_ != NULL) {
+    file_ptr_ -> close();
+    delete file_ptr_;
+  }
+  loadData(file_name_);
+  
+}
+
+/**
+ * parses the next line in the file. 
+ */
+const string& LineFileReader::next() {
+  //Do we already have a next line ready?
+  if (has_next_) {
+    current_row_++;
+    current_data_string_ = next_data_string_;
+    //read next line
+    has_next_ = !getline(*file_ptr_, next_data_string_).fail();
+    has_current_ = true;
+  } else {
+    has_current_ = false;
+  }
+
+  return current_data_string_;
+}
+
+
+int LineFileReader::getCurrentRow() {
+
+  return current_row_;
+
+}
+
+/**
+ * \returns whether there are more rows to 
+ * iterate through
+ */
+bool LineFileReader::hasNext() {
+  return has_next_;
+}
+
+
diff --git a/src/io/LineFileReader.h b/src/io/LineFileReader.h
new file mode 100644
index 0000000..dffc4cd
--- /dev/null
+++ b/src/io/LineFileReader.h
@@ -0,0 +1,97 @@
+/**
+ * \file LineFileReader.h
+ * $Revision: 1.00 $ 
+ * DATE: Jan 7, 2010
+ * AUTHOR: Sean McIlwain
+ * \brief Object for reading text files line by line.
+ ****************************************************************************/
+#ifndef LINEFILEREADER_H
+#define LINEFILEREADER_H
+
+#include <limits>
+#include <ios>
+#include <iomanip>
+#include <iostream>
+#include <map>
+#include <sstream>
+#include <string>
+#include <vector>
+
+//#include "parameter.h"
+
+
+class LineFileReader {
+
+ protected:
+  /** The data vector is indexed by column, then by row
+   *  Ex. data_[0][4] means 0th column, 4th row
+   *  data_[0] is a string vector of all data in a column.
+   */
+
+  std::string next_data_string_; //the next data string.
+  std::string current_data_string_; //the current data string.
+  unsigned int current_row_; //current row count
+  bool has_next_;
+  bool has_current_;
+  std::fstream* file_ptr_;
+
+  std::string file_name_;
+
+  bool num_rows_valid_;
+  unsigned int num_rows_;
+
+
+ public:
+  /**
+   * \returns a blank LineFileReader object 
+   */
+  LineFileReader();
+  
+  /**
+   * \returns a LineFileReader object and loads the tab-delimited
+   * data specified by file_name.
+   */  
+  LineFileReader(
+    const char *file_name ///< the path of the file to read 
+  );
+
+  /** 
+   * \returns a LineFileReader object and loads the tab-delimited
+   * data specified by file_name.
+   */
+  LineFileReader(
+    const std::string& file_name ///< the path of the file  to read
+  );
+
+  /**
+   * Destructor
+   */
+  virtual ~LineFileReader();
+
+  virtual void loadData(
+    const char *file_name ///< the file path
+  );
+
+  virtual void loadData(
+    const std::string& file_name ///< the file path
+  );
+
+
+  const std::string& current();
+  const std::string& next();
+
+  int getCurrentRow();
+
+  bool hasNext();
+
+  void reset();
+};
+
+#endif //LINEFILEREADER_H
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/MSToolkitSpectrumCollection.cpp b/src/io/MSToolkitSpectrumCollection.cpp
new file mode 100644
index 0000000..0abe0af
--- /dev/null
+++ b/src/io/MSToolkitSpectrumCollection.cpp
@@ -0,0 +1,150 @@
+/**
+ * \file MSToolkitSpectrumCollection.cpp
+ * AUTHOR: Chris Park
+ * CREATE DATE: 28 June 2006
+ * \brief Class to read spectra files using the MSToolkit library.
+ */
+#include "MSReader.h"
+#include "MSToolkitSpectrumCollection.h" 
+#include "util/crux-utils.h"
+#include "util/Params.h"
+#include "parameter.h"
+#include "model/Spectrum.h"
+
+/**
+ * Instantiates a new spectrum_collection object from a filename. 
+ * Does not parse file. 
+ */
+MSToolkitSpectrumCollection::MSToolkitSpectrumCollection(
+  const string& filename   ///< The spectrum collection filename.
+) : SpectrumCollection(filename) {
+
+}
+
+/**
+ * Parses all the spectra from file designated by the filename member
+ * variable.
+ * \returns True if the spectra are parsed successfully. False if otherwise.
+ */
+bool MSToolkitSpectrumCollection::parse() {
+
+  // spectrum_collection has already been parsed
+  if(is_parsed_) {
+    return false;
+  }
+
+  // get a list of scans to include if requested
+  string range_string = Params::GetString("scan-number");
+  int first_scan;
+  int last_scan;
+  
+  bool success = get_range_from_string(range_string, first_scan, last_scan);
+  
+  if( !success ) {
+    carp(CARP_FATAL, "The scan number range '%s' is invalid. "
+         "Must be of the form <first>-<last>.", range_string.c_str());
+  }
+  
+  carp(CARP_DEBUG, "Using mstoolkit to parse spectra.");
+
+  MSToolkit::MSReader* mst_reader = new MSToolkit::MSReader();
+  MSToolkit::Spectrum* mst_spectrum = new MSToolkit::Spectrum();
+  
+  // only read ms2 scans
+  mst_reader->setFilter(MSToolkit::MS2);
+  // read first spectrum
+  bool ret = mst_reader->readFile(filename_.c_str(), *mst_spectrum);
+  
+  if (!ret) {
+    carp(CARP_FATAL, "MSToolkit: Error reading spectra file: %s", filename_.c_str());
+  }
+
+  while(mst_spectrum->getScanNumber() != 0) {
+    // is this a scan to include? if not skip it
+    if( mst_spectrum->getScanNumber() < first_scan ) {
+      mst_reader->readFile(NULL, *mst_spectrum);
+      continue;
+    } 
+    // are we past the last scan?
+    if( mst_spectrum->getScanNumber() > last_scan ) {
+      break;
+    }
+    Crux::Spectrum* parsed_spectrum = new Crux::Spectrum();
+    if (parsed_spectrum->parseMstoolkitSpectrum(mst_spectrum, filename_.c_str())) {
+      addSpectrumToEnd(parsed_spectrum);
+    } else {
+      delete parsed_spectrum;
+    }
+
+    mst_reader->readFile(NULL, *mst_spectrum);
+  }
+  delete mst_spectrum;
+  delete mst_reader;
+  
+  return true;
+}
+
+/**
+ * Parses a single spectrum from a spectrum_collection with first scan
+ * number equal to first_scan.  Removes any existing information in
+ * the given spectrum. 
+ * \returns True if the spectrum was allocated, false on error.
+ */
+bool MSToolkitSpectrumCollection::getSpectrum(
+  int first_scan,      ///< The first scan of the spectrum to retrieve -in
+  Crux::Spectrum* spectrum   ///< Put the spectrum info here
+  ) {
+  carp(CARP_DEBUG, "Using mstoolkit to parse spectrum");
+  MSToolkit::MSReader* mst_reader = new MSToolkit::MSReader();
+  MSToolkit::Spectrum* mst_spectrum = new MSToolkit::Spectrum();
+  bool parsed = false;
+
+  mst_reader->readFile(filename_.c_str(), *mst_spectrum, first_scan);
+
+  if(mst_spectrum->getScanNumber() != 0) {
+    spectrum->parseMstoolkitSpectrum(mst_spectrum,
+                                     filename_.c_str());
+    parsed = true;
+  } else {
+    carp(CARP_ERROR, "Spectrum %d does not exist in file", first_scan);
+    parsed = false;
+  }
+  delete mst_spectrum;
+  delete mst_reader;
+  return parsed;
+}
+
+/**
+ * Parses a single spectrum from a spectrum_collection with first scan
+ * number equal to first_scan.
+ * \returns The spectrum data from file or NULL.
+ */
+Crux::Spectrum* MSToolkitSpectrumCollection::getSpectrum(
+  int first_scan      ///< The first scan of the spectrum to retrieve -in
+  ) {
+  carp(CARP_DEBUG, "Using mstoolkit to parse spectrum");
+  MSToolkit::MSReader* mst_reader = new MSToolkit::MSReader();
+  MSToolkit::Spectrum* mst_spectrum = new MSToolkit::Spectrum();
+  Crux::Spectrum* return_spec = NULL;  
+
+  mst_reader->readFile(filename_.c_str(), *mst_spectrum, first_scan);
+
+  if(mst_spectrum->getScanNumber() != 0) {
+    return_spec = new Crux::Spectrum();
+    return_spec->parseMstoolkitSpectrum(mst_spectrum,
+                                        filename_.c_str()); 
+  } else {
+    carp(CARP_ERROR, "Spectrum %d does not exist in file", first_scan);
+    return_spec = NULL;
+  }
+  delete mst_spectrum;
+  delete mst_reader;
+  return return_spec;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/MSToolkitSpectrumCollection.h b/src/io/MSToolkitSpectrumCollection.h
new file mode 100644
index 0000000..c22934a
--- /dev/null
+++ b/src/io/MSToolkitSpectrumCollection.h
@@ -0,0 +1,63 @@
+/**
+ * \file MSToolkitSpectrumCollection.h 
+ * AUTHOR: Barbara Frewen
+ * CREATE DATE: 20 April 2011
+ * \brief Class for accessing spectra using the MSToolkit library.
+ */
+#ifndef MSTOOLKIT_SPECTRUM_COLLECTION_H
+#define MSTOOLKIT_SPECTRUM_COLLECTION_H
+
+#include "SpectrumCollection.h"
+
+/**
+ * \class SpectrumCollection
+ * \brief An abstract class for accessing spectra from a file.
+ */
+class MSToolkitSpectrumCollection : public Crux::SpectrumCollection {
+
+ protected:
+
+ public:
+  /**
+   * Constructor sets filename and initializes member variables.
+   */
+  MSToolkitSpectrumCollection(
+    const std::string& filename ///< The spectrum collection filename. -in
+  );
+
+  /**
+   * Parses all the spectra from file designated by the filename member
+   * variable.
+   * \returns TRUE if the spectra are parsed successfully. FALSE if otherwise.
+   */
+  virtual bool parse();
+
+  /**
+   * Parses a single spectrum from a spectrum_collection with first scan
+   * number equal to first_scan.
+   * \returns The newly allocated Spectrum or NULL if scan number not found.
+   */
+  virtual Crux::Spectrum* getSpectrum(
+    int first_scan      ///< The first scan of the spectrum to retrieve -in
+  );
+
+  /**
+   * Parses a single spectrum from a spectrum_collection with first scan
+   * number equal to first_scan.  Removes any existing information in the
+   * given spectrum.
+   * \returns True if the spectrum was allocated, false on error.
+   */
+  virtual bool getSpectrum(
+    int first_scan,      ///< The first scan of the spectrum to retrieve -in
+    Crux::Spectrum* spectrum   ///< Put the spectrum info here
+  );
+
+};
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/MatchCollectionParser.cpp b/src/io/MatchCollectionParser.cpp
new file mode 100644
index 0000000..a3df2b6
--- /dev/null
+++ b/src/io/MatchCollectionParser.cpp
@@ -0,0 +1,211 @@
+/**
+ * \file MatchCollectionParser.cpp 
+ * AUTHOR Sean McIlwain
+ * CREATE DATE: 14 June 2011
+ * \brief Return a MatchCollection object of the appropriate
+ * derived class.
+ */
+#include "parameter.h"
+#include "MatchCollectionParser.h"
+#include "MatchFileReader.h"
+#include "PepXMLReader.h"
+#include "SQTReader.h"
+#include "MzIdentMLReader.h"
+#include "model/Protein.h"
+#include "model/PostProcessProtein.h"
+#include "util/FileUtils.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+
+using namespace Crux;
+
+MatchCollectionParser::MatchCollectionParser() {
+    database_ = NULL;
+    decoy_database_ = NULL;
+}
+
+MatchCollectionParser::~MatchCollectionParser() {
+    Database::freeDatabase(database_);
+    Database::freeDatabase(decoy_database_);
+}
+
+
+/**
+   * Creates database object(s) from fasta or index file
+   */
+void MatchCollectionParser::loadDatabase(
+  const string& fasta_file, ///< fasta or index path -in  
+  Database*& database, ///< resulting database -out
+  Database*& decoy_database ///< resulting decoy database -out
+  ) {
+
+  if (fasta_file.empty()) {
+    carp(CARP_DEBUG, "no database provided");
+    database = new Database();
+    database -> setIsParsed(true);
+    decoy_database = new Database();
+    database -> setIsParsed(true);
+  } else {
+    bool use_index = FileUtils::IsDir(fasta_file);
+    // get binary fasta file name with path to crux directory 
+    if (use_index == true) {
+      //We aren't supporting search-for-matches anymore, so we won't be
+      //building any indices.  We could use tide-indices for this, but
+      //comet doesn't use an index.  In the future we can support tide
+      //indices in the post-processing tools if users want that.
+      carp(CARP_FATAL, "Parsing binary index from tide-index is not"
+        " supported.\nPlease use the original fasta file instead.");
+    } else {
+      database = new Database(fasta_file, false);// not memmapped
+      database->transformTextToMemmap(".", true);// is temp
+      decoy_database = new Database();
+    }
+    database->parse();
+  }
+}
+
+
+/**
+ * \returns a Protein object.  This function first tries to
+ * find the protein by id in the target or decoy database.
+ * if unsucessful, we then determine whether the protein
+ * is a decoy or not by looking for the "decoy-prefix" in
+ * id.  When then create a PostProcessProtein and add it
+ * to the corresponding target or decoy database.
+ */
+Protein* MatchCollectionParser::getProtein(
+  Database* database, ///< target database -in
+  Database* decoy_database, ///< decoy database -in
+  string& protein_id, ///< id of protein to find -in
+  bool& is_decoy ///< is protein a decoy? -out
+  ) {
+
+  //is it in the target database?
+  Protein* protein = database->getProteinByIdString(protein_id.c_str());
+  if (protein != NULL) { 
+    is_decoy = false;
+    return protein; 
+  }
+
+  //is it in the decoy database?
+  if (decoy_database != NULL) {
+    protein = decoy_database->getProteinByIdString(protein_id.c_str());
+    if (protein != NULL) {
+      is_decoy = true;
+      return protein;
+    }
+  }
+
+  //try creating it and adding it to the database as a postprocess protein
+  carp(CARP_DEBUG, "Creating new protein for %s", protein_id.c_str());
+  protein = new PostProcessProtein();
+  protein->setId(protein_id.c_str());
+  string decoy_prefix = Params::GetString("decoy-prefix");
+  if (protein_id.find(decoy_prefix) != string::npos) {
+    carp(CARP_DEBUG, "adding to decoy database");
+    is_decoy = true;
+    // Fixes segfault in case of NULL decoy database
+    if (decoy_database != NULL) {
+      decoy_database->addProtein(protein);
+    }
+  } else {
+    carp(CARP_DEBUG, "adding to target database");
+    is_decoy = false;
+    database->addProtein(protein);
+  }
+  return protein;
+}
+
+Protein* MatchCollectionParser::getProtein(
+  Database* database, ///< target database -in
+  Database* decoy_database, ///< decoy database -in
+  string& protein_id, ///< id of protein to find -in
+  string& sequence, ///< sequence of the protein -in
+  bool& is_decoy ///< is protein a decoy? -out
+  ) {
+
+  //is it in the target database?
+  Protein* protein = database->getProteinByIdString(protein_id.c_str());
+  if (protein != NULL) { 
+    is_decoy = false;
+    return protein; 
+  }
+
+  //is it in the decoy database?
+  if (decoy_database != NULL) {
+    protein = decoy_database->getProteinByIdString(protein_id.c_str());
+    if (protein != NULL) {
+      is_decoy = true;
+      return protein;
+    }
+  }
+
+  //try creating it and adding it to the database as a postprocess protein
+  carp(CARP_DEBUG, "Creating new protein for %s", protein_id.c_str());
+  carp(CARP_DEBUG, "Sequence :%s", sequence.c_str());
+
+  protein = new PostProcessProtein();
+
+  protein->setId(protein_id.c_str());
+  protein->setSequence(sequence.c_str());
+  protein->setLength(sequence.length());
+  
+
+  string decoy_prefix = Params::GetString("decoy-prefix");
+  if (protein_id.find(decoy_prefix) != string::npos) {
+    is_decoy = true;
+    // Fixes segfault in case of NULL database
+    if (decoy_database != NULL) {
+      decoy_database->addProtein(protein);
+    }
+  } else {
+    is_decoy = false;
+    database->addProtein(protein);
+  }
+  return protein;
+}
+
+/**
+ * \returns a MatchCollection object using the file and protein database
+ */
+MatchCollection* MatchCollectionParser::create(
+  const string& match_path, ///< path to the file of matches 
+  const string& fasta_path ///< path to the protein database
+  ) {
+  carp(CARP_DEBUG, "match path:%s", match_path.c_str());
+  if (!fasta_path.empty()) {
+    carp(CARP_DEBUG, "fasta path:%s", fasta_path.c_str());
+  }
+  if (!FileUtils::Exists(match_path)) {
+    carp(CARP_FATAL, "The file %s does not exist. \n", match_path.c_str());
+  }
+  
+  if (database_ == NULL || decoy_database_ == NULL) {
+    loadDatabase(fasta_path, database_, decoy_database_);
+  }
+  MatchCollection* collection = NULL;
+  
+  if (FileUtils::IsDir(match_path)) {
+    carp(CARP_FATAL, "Internal error");
+  } else if (StringUtils::IEndsWith(match_path, ".xml")) {
+    collection = PepXMLReader::parse(match_path, database_, decoy_database_);
+  } else if (StringUtils::IEndsWith(match_path, ".sqt")) {
+    collection = SQTReader::parse(match_path, database_, decoy_database_);
+  } else if (StringUtils::IEndsWith(match_path, ".mzid")) {
+    collection = MzIdentMLReader::parse(match_path, database_, decoy_database_);
+  } else {
+    collection = MatchFileReader::parse(match_path, database_, decoy_database_);
+  }
+  
+  //  Test if collection already has file path set, otherwise set it.
+  collection->setFilePath(match_path, false);
+ 
+  return collection;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/MatchCollectionParser.h b/src/io/MatchCollectionParser.h
new file mode 100644
index 0000000..9c56413
--- /dev/null
+++ b/src/io/MatchCollectionParser.h
@@ -0,0 +1,70 @@
+/**
+ * \file MatchCollectionParser.h 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 14 June 2011
+ * \brief Return a MatchCollection object from the appropriate
+ * file format.
+ */
+#ifndef MATCHCOLLECTIONPARSER_H
+#define MATCHCOLLECTIONPARSER_H
+
+#include "model/MatchCollection.h"
+#include "model/Protein.h"
+
+/**
+ * Instantiates a MatchCollection based on the extension of the
+ * given file.
+ */
+class MatchCollectionParser {
+
+ protected:
+  Database* database_;
+  Database* decoy_database_;
+  
+ public:
+
+  MatchCollectionParser();
+  ~MatchCollectionParser();
+ 
+  /**
+   * \returns a MatchCollection object using the file and protein database
+   */
+  MatchCollection* create(
+    const std::string& match_path, ///< path to the file of matches
+    const std::string& fasta_path  ///< path to the protein database
+  );
+
+
+  /**
+   * Creates database object(s) from fasta or index file
+   */
+  static void loadDatabase(
+    const std::string& fasta_file, ///< fasta or index path -in
+    Database*& database,  ///< resulting database -out
+    Database*& decoy_database ///< resulting decoy database -out
+  );
+
+  static Crux::Protein* getProtein(
+    Database* database,
+    Database* decoy_database,
+    std::string& protein_id,
+    bool& is_decoy
+  );
+
+  static Crux::Protein* getProtein(
+    Database* database,
+    Database* decoy_database,
+    std::string& protein_id,
+    std::string& sequence,
+    bool& is_decoy
+  );
+
+};
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif 
diff --git a/src/io/MatchColumns.cpp b/src/io/MatchColumns.cpp
new file mode 100644
index 0000000..7598908
--- /dev/null
+++ b/src/io/MatchColumns.cpp
@@ -0,0 +1,138 @@
+/*************************************************************************
+ * \file MatchColumns.cpp
+ * \brief Just keeps track of column names for match files.
+ *************************************************************************/
+
+#include "MatchColumns.h"
+#include "io/carp.h"
+#include <string.h>
+
+static const char* match_column_strings[NUMBER_MATCH_COLUMNS] = {
+  "file",
+  "file_idx",
+  "scan",
+  "charge",
+  "spectrum precursor m/z",
+  "spectrum neutral mass",
+  "peptide mass",
+  "delta_cn",
+  "delta_lcn",
+  "sp score",
+  "sp rank",
+  "xcorr score",
+  "xcorr rank",
+  "exact p-value",
+  "refactored xcorr",
+  "Sidak adjusted p-value",  
+  "e-value",
+  "p-value",
+  "smoothed p-value",
+  "distinct matches/peptide",
+#ifdef NEW_COLUMNS
+  "Weibull PSM q-value",
+  "Weibull peptide q-value",    // NEW
+  "decoy PSM q-value",
+  "decoy peptide q-value",      // NEW
+  "percolator score",
+  "percolator rank",
+  "percolator PSM q-value",
+  "percolator peptide q-value", // NEW
+  "q-ranker score",
+  "q-ranker PSM q-value",
+  "q-ranker peptide q-value",   // NEW
+#else
+  "Weibull est. q-value",
+  "Weibull est. PEP",
+  "decoy q-value (xcorr)",
+  "decoy PEP (xcorr)",
+  "decoy q-value (e-value)",
+  "decoy PEP (e-value)",
+  "percolator score",
+  "percolator rank",
+  "percolator q-value",
+  "percolator PEP",
+  "q-ranker score",
+  "q-ranker q-value",
+  "q-ranker PEP",
+  "barista score",
+  "barista q-value",
+#endif
+  "tdc q-value",
+  "mix-max q-value",
+  "b/y ions matched",
+  "b/y ions total",
+  "total matches/spectrum",
+  "distinct matches/spectrum",
+  "sequence",
+  "modifications",
+  "cleavage type",
+  "protein id",
+  "peptides",
+  "flanking aa",
+  "original target sequence",
+  "eta",
+  "beta",
+  "shift",
+  "corr",
+  "RAW",
+  "SIN",
+  "NSAF",
+  "dNSAF",
+  "EMPAI",
+  "parsimony rank",
+  "decoy matches/spectrum",
+  "SpecId",  // for PinWriter, many of these are repeats with slightly different names, is there better way to do this?
+  "Label",
+  "ScanNr",
+  "ExpMass",
+  "CalcMass",
+  "lnrSp",
+  "deltLCn",
+  "deltCn",
+  "Xcorr",
+  "Sp",
+  "IonFrac",
+  "Mass",
+  "PepLen",
+  "enzN",
+  "enzC",
+  "enzInt",
+  "lnNumSP",
+  "dm",
+  "absdM",
+  "Peptide",
+  "Proteins", // end for PinWriter.
+  "product type",
+  "ppm",
+  "xcorr 1",
+  "xcorr 2",
+  "protein id x",
+  "index name",
+  "xlink type"
+};
+
+/**
+ * Get the name of a given column, by index.
+ */
+const char* get_column_header(
+  int columnIndex
+) {
+  if (columnIndex < 0 || columnIndex >= NUMBER_MATCH_COLUMNS) {
+    carp(CARP_FATAL, "Cannot access output column %d.\n", columnIndex);
+  }
+  carp(CARP_DETAILED_DEBUG, "get_column_header: %d/%d %s",
+       columnIndex, NUMBER_MATCH_COLUMNS - 1, match_column_strings[columnIndex]);
+  return(match_column_strings[columnIndex]);
+}
+
+int get_column_idx(
+  const char* column_name
+) {
+  for (int i = FILE_COL; i < NUMBER_MATCH_COLUMNS; ++i) {
+    if (strcmp(column_name, match_column_strings[i]) == 0) {
+      return i;
+    }
+  }
+  return INVALID_COL;
+}
+
diff --git a/src/io/MatchColumns.h b/src/io/MatchColumns.h
new file mode 100644
index 0000000..7c64c70
--- /dev/null
+++ b/src/io/MatchColumns.h
@@ -0,0 +1,129 @@
+/*************************************************************************
+ * \file MatchColumns.h
+ * \brief Just keeps track of column names for match files.
+ *************************************************************************/
+
+#ifndef MATCHCOLUMNS_H
+#define MATCHCOLUMNS_H
+
+//#define NEW_COLUMNS 1
+
+enum MATCH_COLUMNS_T {
+  FILE_COL,
+  FILE_IDX_COL,
+  SCAN_COL,
+  CHARGE_COL,
+  SPECTRUM_PRECURSOR_MZ_COL,
+  SPECTRUM_NEUTRAL_MASS_COL,
+  PEPTIDE_MASS_COL,
+  DELTA_CN_COL,
+  DELTA_LCN_COL,
+  SP_SCORE_COL,
+  SP_RANK_COL,
+  XCORR_SCORE_COL,
+  XCORR_RANK_COL,
+  EXACT_PVALUE_COL,
+  REFACTORED_SCORE_COL,
+  SIDAK_ADJUSTED_COL,  
+  EVALUE_COL,
+  PVALUE_COL,
+  ELUTION_WINDOW_COL,
+  DISTINCT_MATCHES_PEPTIDE_COL,
+#ifdef NEW_COLUMNS
+  WEIBULL_QVALUE_COL,
+  WEIBULL_PEPTIDE_QVALUE_COL,      // NEW
+  DECOY_XCORR_QVALUE_COL,
+  DECOY_XCORR_PEPTIDE_QVALUE_COL,  // NEW
+  PERCOLATOR_SCORE_COL,
+  PERCOLATOR_RANK_COL,
+  PERCOLATOR_QVALUE_COL,
+  PERCOLATOR_PEPTIDE_QVALUE_COL,   // NEW
+  QRANKER_SCORE_COL,
+  QRANKER_QVALUE_COL,
+  QRANKER_PEPTIDE_QVALUE_COL,      // NEW
+#else
+  WEIBULL_QVALUE_COL,
+  WEIBULL_PEP_COL,
+  DECOY_XCORR_QVALUE_COL,
+  DECOY_XCORR_PEP_COL,
+  DECOY_EVALUE_QVALUE_COL,
+  DECOY_EVALUE_PEP_COL,
+  PERCOLATOR_SCORE_COL,
+  PERCOLATOR_RANK_COL,
+  PERCOLATOR_QVALUE_COL,
+  PERCOLATOR_PEP_COL,
+  QRANKER_SCORE_COL,
+  QRANKER_QVALUE_COL,
+  QRANKER_PEP_COL,
+  BARISTA_SCORE_COL,
+  BARISTA_QVALUE_COL,
+#endif
+  QVALUE_TDC_COL,
+  QVALUE_MIXMAX_COL,
+  BY_IONS_MATCHED_COL,
+  BY_IONS_TOTAL_COL,
+  MATCHES_SPECTRUM_COL,
+  DISTINCT_MATCHES_SPECTRUM_COL,
+  SEQUENCE_COL,
+  MODIFICATIONS_COL,
+  CLEAVAGE_TYPE_COL,
+  PROTEIN_ID_COL,
+  PEPTIDES_COL,
+  FLANKING_AA_COL,
+  ORIGINAL_TARGET_SEQUENCE_COL,
+  ETA_COL,
+  BETA_COL,
+  SHIFT_COL,
+  CORR_COL,
+  RAW_SCORE_COL,
+  SIN_SCORE_COL,
+  NSAF_SCORE_COL,
+  DNSAF_SCORE_COL,
+  EMPAI_SCORE_COL,
+  PARSIMONY_RANK_COL,
+  DECOY_MATCHES_SPECTRUM_COL,
+  SPEC_ID_COL, // for PinWriter
+  LABEL_COL,
+  SCAN_NR_COL,
+  EXP_MASS_COL,
+  CALC_MASS_COL,
+  LNR_SP_COL,
+  DELT_L_CN_COL,
+  DELT_CN_COL,
+  XCORR_COL,
+  SP_COL,
+  ION_FRAC_COL,
+  MASS_COL,
+  PEP_LEN_COL,
+  ENZ_N_COL,
+  ENZ_C_COL,
+  ENZ_INT_COL,
+  LN_NUM_SP_COL,
+  DM_COL,
+  ABS_DM_COL,
+  PEPTIDE_COL,
+  PROTEINS_COL,
+  XLINK_PRODUCT_TYPE_COL,
+  PPM_ERROR_COL,
+  XCORR_FIRST_COL,
+  XCORR_SECOND_COL,
+  PROTEIN_ID_X_COL,
+  INDEX_NAME_COL,
+  XLINK_TYPE_COL,
+
+  NUMBER_MATCH_COLUMNS,
+  INVALID_COL
+};
+
+/**
+ * Get the name of a given column, by index.
+ */
+const char* get_column_header(
+  int columnIndex
+);
+
+int get_column_idx(
+  const char* column_name
+);
+
+#endif // MATCHCOLUMNS_H
diff --git a/src/io/MatchFileReader.cpp b/src/io/MatchFileReader.cpp
new file mode 100644
index 0000000..e7a4cef
--- /dev/null
+++ b/src/io/MatchFileReader.cpp
@@ -0,0 +1,403 @@
+/*************************************************************************
+ * \file MatchFileReader.cpp
+ * \brief Object for parsing the tab-delimited files
+ *************************************************************************/
+
+#include "MatchColumns.h"
+#include "MatchFileReader.h"
+#include "DelimitedFile.h"
+
+#include "model/MatchCollection.h"
+
+using namespace std;
+
+/**
+ * \returns a blank MatchFileReader object 
+ */
+MatchFileReader::MatchFileReader() : DelimitedFileReader(), PSMReader() {
+}
+
+/**
+ * \returns a MatchFileReader object and loads the tab-delimited
+ * data specified by file_name.
+ */  
+MatchFileReader::MatchFileReader(const char* file_name) : DelimitedFileReader(file_name, true) {
+  parseHeader();
+}
+
+/** 
+ * \returns a MatchFileReader object and loads the tab-delimited
+ * data specified by file_name.
+ */
+MatchFileReader::MatchFileReader(const string& file_name)
+  : DelimitedFileReader(file_name, true), PSMReader(file_name) {
+  parseHeader();
+}
+
+MatchFileReader::MatchFileReader(const string& file_name, Database* database, Database* decoy_database)
+  : DelimitedFileReader(file_name, true), PSMReader(file_name, database, decoy_database) {
+  parseHeader();
+}
+
+MatchFileReader::MatchFileReader(istream* iptr) : DelimitedFileReader(iptr, true, '\t') {
+  parseHeader();
+}
+
+/**
+ * Destructor
+ */
+MatchFileReader::~MatchFileReader() {
+}
+
+/**
+ * Open a new file from an existing MatchFileReader.
+ */
+void MatchFileReader::loadData(
+  const char* file_name, ///< new file to open
+  bool hasHeader
+) {
+  DelimitedFileReader::loadData(file_name, hasHeader);
+  if( hasHeader ) {
+    parseHeader();
+  }
+}
+
+/**
+ * Open a new file from an existing MatchFileReader.
+ */
+void MatchFileReader::loadData(
+  const string& file_name, ///< new file to open
+  bool hasHeader) {
+  DelimitedFileReader::loadData(file_name, hasHeader);
+  if( hasHeader ) {
+    parseHeader();
+  }
+}
+
+/**
+ * parses the header and builds the internal hash table
+ */
+void MatchFileReader::parseHeader() {
+  for (int idx = 0; idx < NUMBER_MATCH_COLUMNS; idx++) {
+    match_indices_[idx] = findColumn(get_column_header(idx));
+  }
+}
+
+/**
+ * \returns the FLOAT_T value of a cell, checks for infinity
+ */
+FLOAT_T MatchFileReader::getFloat(
+  MATCH_COLUMNS_T col_type ///<the column type
+) {
+  int idx = match_indices_[col_type];
+  if (idx == -1) {
+    carp(CARP_DEBUG, "column \"%s\" not found for getFloat", get_column_header(col_type));
+    return -1;
+  }
+  return DelimitedFileReader::getFloat(idx);
+}
+
+/**
+ * \returns the double value of a cell, checks for infinity
+ */
+double MatchFileReader::getDouble(
+  MATCH_COLUMNS_T col_type ///<the column type
+) {
+  carp(CARP_DETAILED_DEBUG, "reading double from column %s", get_column_header(col_type));
+  int idx = match_indices_[col_type];
+  if (idx == -1) {
+    carp(CARP_DEBUG, "column \"%s\" not found for getDouble", get_column_header(col_type));
+    return -1;
+  }
+  return DelimitedFileReader::getDouble(idx);
+}
+
+
+/**
+ * \returns the integer value of a cell, checks for infinity.
+ */
+int MatchFileReader::getInteger(
+  MATCH_COLUMNS_T col_type ///< the column name
+) {
+  carp(CARP_DETAILED_DEBUG, "Reading integer from column %s", get_column_header(col_type));
+  int idx = match_indices_[col_type];
+  if (idx == -1) {
+    carp(CARP_DEBUG, "column \"%s\" not found for getInteger", get_column_header(col_type));
+    return -1;
+  }
+  return DelimitedFileReader::getInteger(idx);
+}
+
+/**
+ * \returns the string value of a cell
+ */
+string MatchFileReader::getString(
+  MATCH_COLUMNS_T col_type ///<the column type
+) {
+  carp(CARP_DETAILED_DEBUG, "Getting string from column %s", get_column_header(col_type));
+  int idx = match_indices_[col_type];
+  if (idx == -1) {
+    carp(CARP_DEBUG, "column \"%s\" not found for getString", get_column_header(col_type));
+    return "";
+  }
+  return DelimitedFileReader::getString(idx);
+}
+
+bool MatchFileReader::empty(
+  MATCH_COLUMNS_T col_type ///<the column type
+) {
+  int idx = match_indices_[col_type];
+  if (idx == -1) {
+    return true;
+  }
+  return DelimitedFileReader::getString(idx).empty();
+}
+
+/**
+ * Fills in the given vector with a bool value indicating if each
+ * MATCH_COLUMN_T type is present in the file being read.
+ * \returns Argument vector has NUM_MATCH_COLUMN_T values if a
+ * valid file is open and header has been parsed, else vector is empty.
+ */
+void MatchFileReader::getMatchColumnsPresent(
+  std::vector<bool>& col_is_present) {
+  col_is_present.clear();
+
+  // has a header been parsed? 
+  if( column_names_.empty() ) {
+    return;
+  }
+  col_is_present.assign(NUMBER_MATCH_COLUMNS, false);
+
+  for(int col_idx = 0; col_idx < NUMBER_MATCH_COLUMNS; col_idx++) {
+    col_is_present[col_idx] = (match_indices_[col_idx] > -1);
+  }
+}
+
+MatchCollection* MatchFileReader::parse(
+  const string& file_path,
+  Database* database,
+  Database* decoy_database) {
+  return MatchFileReader(file_path, database, decoy_database).parse();
+}
+
+MatchCollection* MatchFileReader::parse() {
+  MatchCollection* match_collection = new MatchCollection();
+  match_collection->preparePostProcess();
+
+  while (hasNext()) {
+    FLOAT_T ln_experiment_size = 0;
+    if (!empty(DISTINCT_MATCHES_SPECTRUM_COL)) {
+      match_collection->setHasDistinctMatches(true);
+      ln_experiment_size = log(getFloat(DISTINCT_MATCHES_SPECTRUM_COL));
+    } else if (!empty(MATCHES_SPECTRUM_COL)) {
+      ln_experiment_size = log(getFloat(MATCHES_SPECTRUM_COL));
+    }
+
+    match_collection->setScoredType(DELTA_CN, !empty(DELTA_CN_COL));
+    match_collection->setScoredType(DELTA_LCN, !empty(DELTA_LCN_COL));
+    match_collection->setScoredType(SP, !empty(SP_SCORE_COL));
+    match_collection->setScoredType(XCORR, !empty(XCORR_SCORE_COL));
+    match_collection->setScoredType(TIDE_SEARCH_EXACT_PVAL, !empty(EXACT_PVALUE_COL));
+    match_collection->setScoredType(TIDE_SEARCH_REFACTORED_XCORR, !empty(REFACTORED_SCORE_COL));
+    match_collection->setScoredType(EVALUE, !empty(EVALUE_COL));
+    match_collection->setScoredType(DECOY_XCORR_QVALUE, !empty(DECOY_XCORR_QVALUE_COL));
+    match_collection->setScoredType(LOGP_BONF_WEIBULL_XCORR, !empty(PVALUE_COL));
+    match_collection->setScoredType(PERCOLATOR_QVALUE, !empty(PERCOLATOR_QVALUE_COL));
+    match_collection->setScoredType(PERCOLATOR_SCORE, !empty(PERCOLATOR_SCORE_COL));
+    match_collection->setScoredType(LOGP_QVALUE_WEIBULL_XCORR, !empty(WEIBULL_QVALUE_COL));
+    match_collection->setScoredType(QRANKER_SCORE, !empty(QRANKER_SCORE_COL));
+    match_collection->setScoredType(QRANKER_QVALUE, !empty(QRANKER_QVALUE_COL));
+    match_collection->setScoredType(BARISTA_SCORE, !empty(BARISTA_SCORE_COL));
+    match_collection->setScoredType(BARISTA_QVALUE, !empty(BARISTA_QVALUE_COL));
+    match_collection->setScoredType(BY_IONS_MATCHED, !empty(BY_IONS_MATCHED_COL));
+    match_collection->setScoredType(BY_IONS_TOTAL, !empty(BY_IONS_TOTAL_COL));
+
+    // parse match object
+    Crux::Match* match = parseMatch();
+    if (match == NULL) {
+      carp(CARP_ERROR, "Failed to parse tab-delimited PSM match");
+      return NULL;
+    }
+
+    //set all spectrum specific features to parsed match
+    SpectrumZState zState(getFloat(SPECTRUM_NEUTRAL_MASS_COL),
+                          getInteger(CHARGE_COL));
+    match->setZState(zState);
+    match->setLnExperimentSize(ln_experiment_size);    
+    //add match to match collection.
+    match_collection->addMatchToPostMatchCollection(match);
+    //increment pointer.
+    next();
+  }
+
+  return match_collection;
+}
+
+/**
+ *\returns a match object that is parsed from the tab-delimited result file
+ */
+Crux::Match* MatchFileReader::parseMatch() {
+  // parse spectrum
+  Crux::Spectrum* spectrum = parseSpectrum();
+  if (spectrum == NULL) {
+    carp(CARP_ERROR, "Failed to parse spectrum (tab delimited).");
+  }
+
+  // parse peptide
+  Crux::Peptide* peptide = parsePeptide();
+  if (peptide == NULL) {
+    carp(CARP_ERROR, "Failed to parse peptide (tab delimited)");
+    // FIXME should this exit or return null. I think sometimes we can get
+    // no peptides, which is valid, in which case NULL makes sense.
+    // maybe this should be fixed at the output match level however.
+    return NULL;
+  }
+
+  Crux::Match* match = new Crux::Match(peptide, spectrum, spectrum->getZState(0), false);
+  match->setPostProcess(true);
+  match->setDatabaseIndexName(getString(INDEX_NAME_COL));
+  string path = spectrum->getFullFilename();
+  if (!path.empty()) {
+    match->setFilePath(path);
+  }
+
+  if (!empty(FILE_COL)) {
+    match->setFilePath(getString(FILE_COL));
+  }
+  
+  if (empty(SP_SCORE_COL) || empty(SP_RANK_COL)) {
+    match->setScore(SP, NOT_SCORED);
+    match->setRank(SP, 0);
+  } else {
+    match->setScore(SP, getFloat(SP_SCORE_COL));
+    match->setRank(SP, getInteger(SP_RANK_COL));
+  }
+
+  match->setScore(XCORR, getFloat(XCORR_SCORE_COL));
+  match->setRank(XCORR, getInteger(XCORR_RANK_COL));
+
+  if (!empty(DELTA_CN_COL)) {
+    match -> setScore(DELTA_CN, getFloat(DELTA_CN_COL));
+  }
+  if (!empty(DELTA_LCN_COL)) {
+    match -> setScore(DELTA_LCN, getFloat(DELTA_LCN_COL));
+  }
+
+  if (!empty(EXACT_PVALUE_COL)) {
+    match->setScore(TIDE_SEARCH_EXACT_PVAL, getFloat(EXACT_PVALUE_COL));
+    match->setScore(TIDE_SEARCH_REFACTORED_XCORR, getFloat(REFACTORED_SCORE_COL));
+  }
+  if (!empty(DECOY_XCORR_QVALUE_COL)) {
+    match->setScore(DECOY_XCORR_QVALUE, getFloat(DECOY_XCORR_QVALUE_COL));
+  }
+  /* TODO I personally would like access to the raw p-value as well as the bonferonni corrected one (SJM).
+  match -> match_scores[LOGP_WEIBULL_XCORR] = getFloat("logp weibull xcorr");
+  */
+  if (!empty(PVALUE_COL)) {
+    FLOAT_T pval = getFloat(PVALUE_COL);
+    match->setScore(LOGP_BONF_WEIBULL_XCORR,
+                    pval > 0 ? -log(pval) : numeric_limits<FLOAT_T>::infinity());
+  }
+  if (!empty(EVALUE_COL)) {
+    match->setScore(EVALUE, getFloat(EVALUE_COL));
+  }
+  if (!empty(PERCOLATOR_QVALUE_COL)) {
+    match->setScore(PERCOLATOR_QVALUE, getFloat(PERCOLATOR_QVALUE_COL));
+  }
+  if (!empty(PERCOLATOR_SCORE_COL)) {
+    match->setScore(PERCOLATOR_SCORE, getFloat(PERCOLATOR_SCORE_COL));
+    match->setRank(PERCOLATOR_SCORE, getInteger(PERCOLATOR_RANK_COL));
+  }
+  if (!empty(WEIBULL_QVALUE_COL)) {
+    match->setScore(LOGP_QVALUE_WEIBULL_XCORR, getFloat(WEIBULL_QVALUE_COL));
+  }
+  if (!empty(QRANKER_SCORE_COL)) {
+    match->setScore(QRANKER_SCORE, getFloat(QRANKER_SCORE_COL));
+    match->setScore(QRANKER_QVALUE, getFloat(QRANKER_QVALUE_COL));
+  }
+  if (!empty(BARISTA_SCORE_COL)) {
+    match->setScore(BARISTA_SCORE, getFloat(BARISTA_SCORE_COL));
+    match->setScore(BARISTA_QVALUE, getFloat(BARISTA_QVALUE_COL));
+  }
+
+  if (!empty(BY_IONS_MATCHED_COL)) {
+    match->setScore(BY_IONS_MATCHED, getInteger(BY_IONS_MATCHED_COL));
+  }
+  if (!empty(BY_IONS_TOTAL_COL)) {
+    match->setScore(BY_IONS_TOTAL, getInteger(BY_IONS_TOTAL_COL));
+  }
+
+  // get experiment size
+  int experimentSize = 0;
+  if (!empty(DISTINCT_MATCHES_SPECTRUM_COL)) {
+    experimentSize = getInteger(DISTINCT_MATCHES_SPECTRUM_COL);
+  } else if (!empty(MATCHES_SPECTRUM_COL)) {
+    experimentSize = getInteger(MATCHES_SPECTRUM_COL);
+  }
+  match->setTargetExperimentSize(experimentSize);
+  if (experimentSize == 0) {
+    carp_once(CARP_WARNING, "num target matches=0, suppressing warning");
+    match->setLnExperimentSize(0);
+  } else {
+    match->setLnExperimentSize(log((FLOAT_T) experimentSize));
+  }
+
+  if (!empty(PROTEIN_ID_COL) &&
+      StringUtils::StartsWith(getString(PROTEIN_ID_COL), Params::GetString("decoy-prefix"))) {
+    match->setNullPeptide(true);
+  }
+
+  return match;
+}
+
+Crux::Peptide* MatchFileReader::parsePeptide() {
+  Crux::Peptide* peptide = new Crux::Peptide();
+  string seq = getString(SEQUENCE_COL);
+  if (!seq.empty()) {
+    //In cases where the sequence is in X.seq.X format, parse out the seq part
+    if (seq.length() > 4 && seq[1] == '.' && seq[seq.length() - 2] == '.') {
+      seq = seq.substr(2, seq.length() - 4);
+    }
+
+    // string length may include mod symbols and be longer than the peptide seq
+    MODIFIED_AA_T* modified_seq;
+    peptide->setLength(convert_to_mod_aa_seq(seq.c_str(), &modified_seq));
+    peptide->setModifiedAASequence(modified_seq, false);
+
+    string modsString = getString(MODIFICATIONS_COL);
+    if (!modsString.empty()) {
+      vector<string> modStrings = StringUtils::Split(getString(MODIFICATIONS_COL), ',');
+      vector<Crux::Modification> mods;
+      for (vector<string>::const_iterator i = modStrings.begin(); i != modStrings.end(); i++) {
+        try {
+          Crux::Modification mod = Crux::Modification::Parse(StringUtils::Trim(*i), peptide);
+          if (!mod.Static()) {
+            mods.push_back(mod);
+          }
+        } catch (runtime_error& e) {
+          carp(CARP_ERROR, "Error parsing modification string: %s", e.what());
+        }
+      }
+      peptide->setMods(mods);
+    }
+
+    if (!PeptideSrc::parseTabDelimited(peptide, *this, database_, decoy_database_)) {
+      carp(CARP_ERROR, "Failed to parse peptide src.");
+      delete peptide;
+      return NULL;
+    }
+  } else {
+    carp(CARP_FATAL, "No peptide sequence (%s).", seq.c_str());
+  }
+  return peptide;
+}
+
+Crux::Spectrum* MatchFileReader::parseSpectrum() {
+  return new Crux::Spectrum(getInteger(SCAN_COL),
+                            getInteger(SCAN_COL),
+                            getFloat(SPECTRUM_PRECURSOR_MZ_COL),
+                            vector<int>(1, getInteger(CHARGE_COL)),
+                            getString(FILE_COL));
+}
+
diff --git a/src/io/MatchFileReader.h b/src/io/MatchFileReader.h
new file mode 100644
index 0000000..63f2873
--- /dev/null
+++ b/src/io/MatchFileReader.h
@@ -0,0 +1,146 @@
+/**
+ * \file MatchFileReader.h
+ * $Revision: 1.00 $ 
+ * DATE: June 10, 2010
+ * AUTHOR: Sean McIlwain
+ * \brief Object for reading tab-delimited files.
+ * This class generates a table of values. The default delimiter is tab.
+ * This class is capable of reading string, integers, and floating point
+ * Types from each cell of the table.  This class also provides function
+ * for reading a list of integers or string from a cell using a delimiter
+ * that is different from the column delimiter (default is comma ',').
+ * MatchFileReader hashes the column_id for quick access.
+ **************************************************************************/
+
+#ifndef MATCHFILEREADER_H
+#define MATCHFILEREADER_H
+
+#include "DelimitedFileReader.h"
+#include "MatchColumns.h"
+#include "PSMReader.h"
+
+class MatchFileReader: public DelimitedFileReader, public PSMReader {
+ protected:
+    void parseHeader();
+    Crux::Match* parseMatch();
+    Crux::Peptide* parsePeptide();
+    Crux::Spectrum* parseSpectrum();
+
+    int match_indices_[NUMBER_MATCH_COLUMNS];
+
+ public:
+   /**
+    * \returns a blank MatchFileReader object 
+    */
+    MatchFileReader();
+
+   /**
+    * \returns a MatchFileReader object and loads the tab-delimited
+    * data specified by file_name.
+    */  
+    MatchFileReader(
+      const char* file_name
+    );
+
+    /** 
+     * \returns a MatchFileReader object and loads the tab-delimited
+     * data specified by file_name.
+     */
+    MatchFileReader(
+      const std::string& file_name
+    );
+
+    MatchFileReader(
+      const std::string& file_name,
+      Database* database,
+      Database* decoy_database = NULL);
+
+    /**
+     * \returns a MatchFileReader object and load the tab-delimited
+     * data specified by an input stream
+     */
+    MatchFileReader(
+      std::istream* iptr
+    );
+
+    /**
+     * Destructor
+     */
+    virtual ~MatchFileReader();
+
+    /**
+     * Open a new file from an existing MatchFileReader.
+     */
+    virtual void loadData(
+      const char* file_name, ///< new file to open
+      bool hasHeader = true  ///< parse first line as header
+    );
+
+    /**
+     * Open a new file from an existing MatchFileReader.
+     */
+    virtual void loadData(
+      const std::string& file_name, ///< new file to open
+      bool hasHeader = true         ///< parse first line has header
+    );
+
+    /**
+     * \returns the FLOAT_T value of a cell, checks for infinity
+     */
+    FLOAT_T getFloat(
+      MATCH_COLUMNS_T col_type ///<the column type
+    );
+   
+    /**
+     * \returns the double value of a cell, checks for infinity
+     */
+    double getDouble(
+      MATCH_COLUMNS_T col_type ///< the column type
+    );
+
+    /**
+     * \returns the integer value of a cell, checks for infinity.
+     */
+    int getInteger(
+      MATCH_COLUMNS_T col_type ///< the column type
+    );
+
+    /**
+     * gets a string value of the cell
+     */
+    std::string getString(
+      MATCH_COLUMNS_T col_type ///<the column type
+    );
+
+    /**
+     * returns whether the column is empty or not.
+     */
+    bool empty(
+      MATCH_COLUMNS_T col_type ///<the column type
+    );
+
+    /**
+     * Fills in the given vector with a bool value indicating if each
+     * MATCH_COLUMN_T type is present in the file being read.
+     * \returns Argument vector has NUM_MATCH_COLUMN_T values if a
+     * valid file is open and header has been parsed, else vector is empty.
+     */
+    void getMatchColumnsPresent (std::vector<bool>& col_is_present);
+
+    static MatchCollection* parse(
+      const std::string& file_path,
+      Database* database,
+      Database* decoy_database
+    );
+
+    MatchCollection* parse();
+};
+
+#endif //MATCHFILEREADER_H
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/MatchFileWriter.cpp b/src/io/MatchFileWriter.cpp
new file mode 100644
index 0000000..d8af1b0
--- /dev/null
+++ b/src/io/MatchFileWriter.cpp
@@ -0,0 +1,432 @@
+/**
+ * \file MatchFileWriter.cpp
+ * DATE: October 26, 2010
+ * AUTHOR: Barbara Frewen
+ * \brief Object for writing tab-deliminted text files of PSMs (matches).
+ * This class is the extension of DelimitedFileWriter where the
+ * columns are those in MatchColumns.  Which columns are written to
+ * file depend on the COMMAND_TYPE_T.  For some commands, they also
+ * depend on the columns found in the input file as given by a
+ * MatchFileReader. 
+ */
+
+#include "MatchFileWriter.h"
+#include "parameter.h"
+#include "util/Params.h"
+#include "app/TideSearchApplication.h"
+#include <iostream>
+
+using namespace std;
+
+/**
+ * \returns A blank MatchFileWriter object.
+ */
+MatchFileWriter::MatchFileWriter() 
+  : DelimitedFileWriter(),
+    num_columns_(0) {
+  for(int col_type = 0; col_type < NUMBER_MATCH_COLUMNS; col_type++) {
+    match_to_print_[col_type] = false;
+    match_precision_[col_type] = 0;
+    match_fixed_float_[col_type] = true;
+  }
+  setPrecision();
+} 
+
+/**
+ * \returns A blank MatchFileWriter object and opens a file for
+ * writing.
+ */
+MatchFileWriter::MatchFileWriter(const char* filename) 
+  : DelimitedFileWriter(filename),
+    num_columns_(0) {
+  for(int col_type = 0; col_type < NUMBER_MATCH_COLUMNS; col_type++) {
+    match_to_print_[col_type] = false;
+    match_precision_[col_type] = 0;
+    match_fixed_float_[col_type] = true;
+  }
+  setPrecision();
+}
+
+/**
+ * Destructor
+ */
+MatchFileWriter::~MatchFileWriter() {
+}
+
+/**
+ * Set the correct level of precision for each MATCH_COLUMNS_T type.
+ * Also set whether the field should be fixed float or not.
+ */
+void MatchFileWriter::setPrecision() {
+  for(int col_idx = 0; col_idx < NUMBER_MATCH_COLUMNS; col_idx++) {
+    switch(col_idx) {
+      // integer and string fields
+    case FILE_COL:
+    case SCAN_COL:
+    case CHARGE_COL:
+    case SP_RANK_COL:
+    case XCORR_RANK_COL:
+    case PERCOLATOR_RANK_COL:
+    case BY_IONS_MATCHED_COL:
+    case BY_IONS_TOTAL_COL:
+    case DISTINCT_MATCHES_SPECTRUM_COL:
+    case MATCHES_SPECTRUM_COL:
+    case SEQUENCE_COL:
+    case CLEAVAGE_TYPE_COL:
+    case PROTEIN_ID_COL:
+    case FLANKING_AA_COL:
+    case ORIGINAL_TARGET_SEQUENCE_COL:
+    case PARSIMONY_RANK_COL:
+    case RAW_SCORE_COL:  //Raw counts should be integral
+      match_precision_[col_idx] = 0;
+      match_fixed_float_[col_idx] = true;
+      break;
+
+      // mass fields
+    case SPECTRUM_PRECURSOR_MZ_COL:
+    case SPECTRUM_NEUTRAL_MASS_COL:
+    case MASS_COL:
+    case DM_COL:
+    case ABS_DM_COL:
+    case PEPTIDE_MASS_COL:
+      match_precision_[col_idx] = Params::GetInt("mass-precision");
+      match_fixed_float_[col_idx] = true;
+      break;
+
+      // score fields
+    case DELTA_CN_COL:
+    case SP_SCORE_COL:
+    case XCORR_SCORE_COL:
+    case XCORR_FIRST_COL:
+    case XCORR_SECOND_COL:
+    case EVALUE_COL:
+    case PVALUE_COL:
+    case WEIBULL_QVALUE_COL:
+    case WEIBULL_PEP_COL:
+    case DECOY_XCORR_QVALUE_COL:
+    case DECOY_XCORR_PEP_COL:
+    case DECOY_EVALUE_QVALUE_COL:
+    case DECOY_EVALUE_PEP_COL:
+    case PERCOLATOR_SCORE_COL:
+    case PERCOLATOR_QVALUE_COL:
+    case PERCOLATOR_PEP_COL:
+    case QRANKER_SCORE_COL:
+    case QRANKER_QVALUE_COL:
+    case QRANKER_PEP_COL:
+    case SIN_SCORE_COL:
+    case NSAF_SCORE_COL:
+    case DNSAF_SCORE_COL:
+    case EMPAI_SCORE_COL:
+    case LNR_SP_COL:
+    case DELT_L_CN_COL:
+    case DELT_CN_COL:
+    case XCORR_COL:
+    case SP_COL:
+    case ION_FRAC_COL:
+    case LN_NUM_SP_COL:
+    case EXACT_PVALUE_COL:
+    case REFACTORED_SCORE_COL:
+    case SIDAK_ADJUSTED_COL:
+    case QVALUE_MIXMAX_COL:
+    case QVALUE_TDC_COL:
+#ifdef NEW_COLUMNS
+    case WEIBULL_PEPTIDE_QVALUE_COL:      // NEW
+    case DECOY_XCORR_PEPTIDE_QVALUE_COL:  // NEW
+    case PERCOLATOR_PEPTIDE_QVALUE_COL:   // NEW
+    case QRANKER_PEPTIDE_QVALUE_COL:      // NEW
+#endif
+      match_precision_[col_idx] = Params::GetInt("precision");
+      match_fixed_float_[col_idx] = false;
+      break;
+
+      // special cases
+    case ETA_COL:
+    case BETA_COL:
+    case SHIFT_COL:
+    case CORR_COL:
+      match_precision_[col_idx] = 6;
+      match_fixed_float_[col_idx] = false;
+      break;
+
+    case NUMBER_MATCH_COLUMNS:
+    case INVALID_COL:
+      carp(CARP_FATAL, "Invalid match column type for setting precision.");
+      break;
+    }
+  }
+}
+
+/**
+ * Defines the columns to print based on the vector of flags
+ * indiciating if the MATCH_COLUMN_T should be printed.
+ */
+void MatchFileWriter::addColumnNames(const std::vector<bool>& col_is_printed) {
+  // for each column, if we should print it, mark as true
+  for(size_t col_idx = 0; col_idx < col_is_printed.size(); col_idx++) {
+    bool print_it = col_is_printed[col_idx];
+    if( print_it ) {
+      match_to_print_[col_idx] = true;
+    } 
+  }
+}
+
+/**
+ * Adds another columns to print.  Printed in order the names are set.
+ */
+void MatchFileWriter::addColumnName(MATCH_COLUMNS_T column_type) {
+  match_to_print_[column_type] = true;
+}
+
+/**
+ * Adds which columns to print based on the COMMAND_TYPE_T. Only for
+ * search-for-matches, sequest-search and spectral-counts.
+ */
+void MatchFileWriter::addColumnNames(CruxApplication* application, 
+                                     bool has_decoys) {
+
+  COMMAND_T command = application->getCommand();
+
+  switch (command) {
+  // commands with no tab files
+  case MISC_COMMAND:
+  case PROCESS_SPEC_COMMAND: ///< print-processed-spectra
+  case GENERATE_PEPTIDES_COMMAND: ///< generate-peptides
+  case GET_MS2_SPECTRUM_COMMAND: ///< get-ms2-spectrum 
+  case PREDICT_PEPTIDE_IONS_COMMAND: ///< predict-peptide-ions
+  case VERSION_COMMAND:      ///< just print the version number
+  // invalid
+  case NUMBER_COMMAND_TYPES:
+  case INVALID_COMMAND:
+    carp(CARP_FATAL, "Invalid command (%s) for creating a MatchFileWriter.",
+         application->getName().c_str());
+    return;
+
+  // commands that also require list of cols to print
+  case QVALUE_COMMAND:       ///< compute-q-values
+  case PERCOLATOR_COMMAND:
+  case QRANKER_COMMAND:
+  case BARISTA_COMMAND:
+    carp(CARP_FATAL, 
+         "Post-search command %s requires a list of columns to print.",
+         application->getName().c_str());
+    return;
+
+  // valid commands
+  case TIDE_SEARCH_COMMAND: ///< tide-search
+    if (Params::GetBool("file-column")) {
+      addColumnName(FILE_COL);
+    }
+    if (Params::GetBool("compute-sp") || Params::GetBool("sqt-output")) {
+      if (Params::GetBool("exact-p-value")) {
+        addColumnName(EXACT_PVALUE_COL);
+        addColumnName(REFACTORED_SCORE_COL);
+      } else {
+        addColumnName(SP_SCORE_COL);
+      }
+      addColumnName(SP_RANK_COL);
+      addColumnName(BY_IONS_MATCHED_COL);
+      addColumnName(BY_IONS_TOTAL_COL);
+    }
+    break;
+
+  case XLINK_SEARCH_COMMAND:
+    if (Params::GetBool("compute-p-values")) {
+      addColumnName(PVALUE_COL);
+      addColumnName(ETA_COL);
+      addColumnName(BETA_COL);
+      addColumnName(SHIFT_COL);
+      addColumnName(CORR_COL);
+    }
+    if ((!Params::GetBool("use-old-xlink")) && 
+        (Params::GetInt("xlink-top-n") != 0)) {
+      addColumnName(XCORR_FIRST_COL);
+      addColumnName(XCORR_SECOND_COL);
+    }
+    if (!Params::GetBool("use-old-xlink")) {
+      addColumnName(ENZ_INT_COL);  
+    }
+    
+    addColumnName(XLINK_TYPE_COL);
+    break;
+
+  case SPECTRAL_COUNTS_COMMAND:
+    // protein or peptide
+    if( string_to_quant_level_type(Params::GetString("quant-level")) == PEPTIDE_QUANT_LEVEL ) {
+      addColumnName(SEQUENCE_COL);
+    } else {
+      addColumnName(PROTEIN_ID_COL);
+      // parsimony?
+      if( string_to_parsimony_type(Params::GetString("parsimony")) != PARSIMONY_NONE ) {
+        addColumnName(PARSIMONY_RANK_COL);
+      }
+    }
+
+    // SIN or NSAF score
+    switch (string_to_measure_type(Params::GetString("measure"))) {
+      case MEASURE_RAW:
+        addColumnName(RAW_SCORE_COL);
+        break;
+      case MEASURE_SIN:
+        addColumnName(SIN_SCORE_COL);
+        break;
+      case MEASURE_NSAF:
+        addColumnName(NSAF_SCORE_COL);
+        break;
+      case MEASURE_DNSAF:
+        addColumnName(DNSAF_SCORE_COL);
+        break;
+      case MEASURE_EMPAI:
+        addColumnName(EMPAI_SCORE_COL);
+        break;
+      default:
+        ;//do nothing  
+    }
+
+    return; // do not add additional columns
+  }
+
+  // All search commands have these columns
+  addColumnName(SCAN_COL);
+  addColumnName(CHARGE_COL);
+  addColumnName(SPECTRUM_PRECURSOR_MZ_COL);
+  addColumnName(SPECTRUM_NEUTRAL_MASS_COL);
+  addColumnName(PEPTIDE_MASS_COL);
+  addColumnName(DELTA_CN_COL);
+  if (Params::GetBool("exact-p-value")) {
+    addColumnName(EXACT_PVALUE_COL);
+    addColumnName(REFACTORED_SCORE_COL);
+  } else {
+    addColumnName(XCORR_SCORE_COL);
+  }
+  addColumnName(XCORR_RANK_COL);
+  addColumnName(DISTINCT_MATCHES_SPECTRUM_COL);
+  addColumnName(SEQUENCE_COL);
+  addColumnName(MODIFICATIONS_COL);
+  addColumnName(CLEAVAGE_TYPE_COL);
+  addColumnName(PROTEIN_ID_COL);
+  addColumnName(FLANKING_AA_COL);
+  if ((has_decoys || Params::GetBool("concat")) &&
+      !TideSearchApplication::proteinLevelDecoys()) {
+    addColumnName(ORIGINAL_TARGET_SEQUENCE_COL);
+  }
+
+}
+
+/**
+ * Adds which columns to print based on the COMMAND_TYPE_T and a list
+ * of columns to print. For all post-search commands.
+ */
+void MatchFileWriter::addColumnNames
+  (CruxApplication* application, 
+  bool has_decoys,
+  const vector<bool>& cols_to_print) {
+
+  COMMAND_T command = application->getCommand();
+
+  switch (command) {
+  // commands with no tab files
+  case MISC_COMMAND:
+  case PROCESS_SPEC_COMMAND: ///< print-processed-spectra
+  case GENERATE_PEPTIDES_COMMAND: ///< generate-peptides
+  case GET_MS2_SPECTRUM_COMMAND: ///< get-ms2-spectrum 
+  case PREDICT_PEPTIDE_IONS_COMMAND: /// predict-peptide-ions
+  case VERSION_COMMAND:      ///< just print the version number
+  // invalid
+  case SPECTRAL_COUNTS_COMMAND:
+  case NUMBER_COMMAND_TYPES:
+  case INVALID_COMMAND:
+    carp(CARP_FATAL, "Invalid command (%s) for creating a MatchFileWriter.",
+         application->getName().c_str());
+    return;
+
+  // search commands handled elsewhere
+  case XLINK_SEARCH_COMMAND:
+    addColumnNames(application, has_decoys);
+    return;
+
+  // valid commands
+  case QVALUE_COMMAND:       ///< compute-q-values
+    if( cols_to_print[PVALUE_COL] ) {
+      addColumnName(WEIBULL_QVALUE_COL);
+//      addColumnName(WEIBULL_PEP_COL);
+      //addColumnName(WEIBULL_PEPTIDE_QVALUE_COL);
+    } else {
+      if ( cols_to_print[EVALUE_COL]) {
+//        addColumnName(DECOY_EVALUE_QVALUE_COL);
+//        addColumnName(DECOY_EVALUE_PEP_COL);
+      }
+//     addColumnName(DECOY_XCORR_QVALUE_COL);
+//     addColumnName(DECOY_XCORR_PEP_COL);
+      //addColumnName(DECOY_XCORR_PEPTIDE_QVALUE_COL);
+    }
+    break;
+
+  case PERCOLATOR_COMMAND:
+    addColumnName(PERCOLATOR_SCORE_COL);
+    addColumnName(PERCOLATOR_RANK_COL);
+    addColumnName(PERCOLATOR_QVALUE_COL);
+    addColumnName(PERCOLATOR_PEP_COL);
+    break;
+
+  case QRANKER_COMMAND:
+    addColumnName(QRANKER_SCORE_COL);
+    addColumnName(QRANKER_QVALUE_COL);
+    addColumnName(QRANKER_PEP_COL);
+    break;
+
+  case BARISTA_COMMAND:
+    // place holder
+    break;
+  }
+
+  if( has_decoys ) {
+    addColumnName(ORIGINAL_TARGET_SEQUENCE_COL);
+  }
+
+  // now add remaining columns from the input file
+  addColumnNames(cols_to_print);
+
+  // FIXME (BF 10-27-10): where do these go?
+  //  PERCOLATOR_PEPTIDE_QVALUE_COL,   
+  //  QRANKER_PEPTIDE_QVALUE_COL,      
+
+}
+
+/**
+ * Write header to file using column names that have been set.
+ */
+void MatchFileWriter::writeHeader() {
+  num_columns_ = 0;
+  // set file position index for all columns being printed
+  for(unsigned int col_type = 0; col_type < NUMBER_MATCH_COLUMNS; col_type++) {
+    if( match_to_print_[col_type] == true ) {
+      match_indices_[col_type] = num_columns_++;
+    } else {
+      match_indices_[col_type] = -1;
+    }
+  }
+
+  // set all the names for which we have match_indices_
+  column_names_.assign(num_columns_, "");
+  for(unsigned int col_type = 0; col_type < NUMBER_MATCH_COLUMNS; col_type++) {
+    if( match_indices_[col_type] > -1 ) {
+      if (get_column_header(col_type) == NULL) {
+        carp(CARP_FATAL, "Error col type: %d doesn't exist!", col_type);
+      }
+      DelimitedFileWriter::setColumnName(get_column_header(col_type), 
+                                         match_indices_[col_type]);
+    }
+  }
+
+  DelimitedFileWriter::writeHeader();
+
+  // every line will be this length, reserve space in current row for speed
+  current_row_.assign(num_columns_, "");
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/MatchFileWriter.h b/src/io/MatchFileWriter.h
new file mode 100644
index 0000000..3bed2e7
--- /dev/null
+++ b/src/io/MatchFileWriter.h
@@ -0,0 +1,110 @@
+/**
+ * \file MatchFileWriter.h
+ * DATE: October 26, 2010
+ * AUTHOR: Barbara Frewen
+ * \brief Object for writing tab-deliminted text files of PSMs (matches).
+ * This class is the extension of DelimitedFileWriter where the
+ * columns are those in MatchColumns.  Which columns are written to
+ * file depend on the COMMAND_TYPE_T.  For some commands, they also
+ * depend on the columns found in the input file as given by a
+ * MatchFileReader. 
+ */
+
+#ifndef MATCH_FILE_WRITER_H
+#define MATCH_FILE_WRITER_H
+
+#include "app/CruxApplication.h"
+#include "DelimitedFileWriter.h"
+#include "MatchColumns.h"
+#include "model/objects.h"
+#include "util/StringUtils.h"
+#include <iostream>
+
+class MatchFileWriter : public DelimitedFileWriter {
+ protected:
+  bool match_to_print_[NUMBER_MATCH_COLUMNS];///< set before writing header
+  int match_indices_[NUMBER_MATCH_COLUMNS];///<idx of each MATCH_COLUMN in file
+  int match_precision_[NUMBER_MATCH_COLUMNS];///< precision for each column
+  bool match_fixed_float_[NUMBER_MATCH_COLUMNS]; ///< do we use fixed format for the float field?
+  unsigned int num_columns_; ///< number of columns being printed
+
+  void setPrecision();
+
+ public:
+
+  /**
+   * \returns A blank MatchFileWriter object.
+   */
+  MatchFileWriter();
+
+  /**
+   * \returns A MatchFileWriter object and opens a file for writing.
+   */
+  explicit MatchFileWriter(const char* filename);
+
+  /**
+   * Destructor
+   */
+  ~MatchFileWriter();
+
+  // private?
+  /**
+   * Defines the columns to print based on the vector of flags
+   * indiciating if the MATCH_COLUMN_T should be printed.
+   */
+  void addColumnNames(const std::vector<bool>& col_is_printed);
+
+  // private?
+  /**
+   * Adds one column to print.
+   */
+  void addColumnName(MATCH_COLUMNS_T col_type);
+
+  /**
+   * Adds which columns to print based on the COMMAND_TYPE_T. Only for
+   * search-for-matches and sequest-search.
+   */
+  void addColumnNames(CruxApplication* application, bool has_decoys);
+
+  /**
+   * Adds which columns to print based on the COMMAND_TYPE_T and a list
+   * of columns to print. For all post-search commands.
+   */
+  void addColumnNames
+    (CruxApplication* application, 
+     bool has_decoys,
+     const std::vector<bool>& cols_to_print);
+
+  /**
+   * Write header to file based on 
+   */
+  virtual void writeHeader();
+
+  /**
+   * Set the value in the current row for the given MATCH_COLUMN_T.
+   */
+  template<typename ValueType>
+    void setColumnCurrentRow
+    (MATCH_COLUMNS_T col_type,
+     const ValueType& value) {
+
+    int file_column = match_indices_[col_type];
+    // ignore if this column isn't being printed
+    if( file_column == -1 ) {
+      return;
+    }
+    current_row_.at(file_column) =
+      StringUtils::ToString(value, match_precision_[col_type], match_fixed_float_[col_type]);
+  }
+
+};
+
+#endif // MATCH_FILE_WRITER_H
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/io/MzIdentMLReader.cpp b/src/io/MzIdentMLReader.cpp
new file mode 100644
index 0000000..2da82d1
--- /dev/null
+++ b/src/io/MzIdentMLReader.cpp
@@ -0,0 +1,361 @@
+/*************************************************************************
+ * \file MzIdentMLReader.cpp
+ * \brief Object for parsing pepxml files
+ *************************************************************************/
+
+#include "MzIdentMLReader.h"
+#include "util/mass.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+#include "expat.h"
+#include "model/Protein.h"
+#include "model/Peptide.h"
+
+#include <cstdio>
+#include <cstring>
+#include <iostream>
+
+#include "DelimitedFile.h"
+#include "parameter.h"
+#include "MatchCollectionParser.h"
+
+using namespace std;
+using namespace Crux;
+using namespace pwiz;
+using namespace identdata;
+
+/**
+ * Initializes the object
+ */
+void MzIdentMLReader::init() {
+  match_collection_ = NULL;
+  use_pass_threshold_ = Params::GetBool("mzid-use-pass-threshold");
+}
+
+/**
+ * \returns an initialized object
+ */
+MzIdentMLReader::MzIdentMLReader() : PSMReader() {
+  init();
+}
+
+/**
+ * \returns an object initialized with the file_path
+ */
+MzIdentMLReader::MzIdentMLReader(
+  const string& file_path ///< the path of the pep.xml file
+  ) : PSMReader(file_path) {
+  init();
+}
+
+/**
+ * \returns an object initialized with the xml path, and the target,decoy databases
+ */
+MzIdentMLReader::MzIdentMLReader(
+  const string& file_path, ///< the path of the pep.xml
+  Database* database, ///< the protein database
+  Database* decoy_database ///< the decoy protein database (can be null)
+  ) : PSMReader(file_path, database, decoy_database) {
+  init();
+}
+
+/**
+ * default destructor
+ */
+MzIdentMLReader::~MzIdentMLReader() {
+}
+
+/**
+ * \returns the MatchCollection resulting from the parsed xml file
+ */
+
+void MzIdentMLReader::addScores(
+  const SpectrumIdentificationItem& item, ///<proteowizard psm
+  Match* match ///<our psm
+) {
+  FLOAT_T fvalue;
+  int ivalue;
+
+  for (vector<CVParam>::const_iterator i = item.cvParams.begin();
+       i != item.cvParams.end();
+       ++i) {
+    switch (i->cvid) {
+      case MS_SEQUEST_xcorr:
+        fvalue = StringUtils::FromString<FLOAT_T>(i->value);
+        match->setScore(XCORR, fvalue);
+        match_collection_->setScoredType(XCORR, true);
+        break;
+      case MS_SEQUEST_PeptideSp:
+        fvalue = StringUtils::FromString<FLOAT_T>(i->value);
+        match->setScore(SP, fvalue);
+        match_collection_->setScoredType(SP, true);
+        break;
+      case MS_SEQUEST_PeptideRankSp:
+        ivalue = StringUtils::FromString<int>(i->value);
+        match->setRank(SP, ivalue);
+        break;
+      case MS_SEQUEST_deltacn:
+        fvalue = StringUtils::FromString<FLOAT_T>(i->value);
+        match->setScore(DELTA_CN, fvalue);
+        break;
+      case MS_SEQUEST_matched_ions:
+        ivalue = StringUtils::FromString<int>(i->value);
+        match->setScore(BY_IONS_MATCHED, ivalue);
+        break;
+      case MS_SEQUEST_total_ions:
+        ivalue = StringUtils::FromString<int>(i->value);
+        match->setScore(BY_IONS_TOTAL, ivalue);
+        break;
+      case MS_p_value: // exact p-value
+        fvalue = StringUtils::FromString<FLOAT_T>(i->value);
+        match->setScore(TIDE_SEARCH_EXACT_PVAL, fvalue);
+        match_collection_->setScoredType(TIDE_SEARCH_EXACT_PVAL, true);
+        break;
+      default:
+        carp(CARP_DEBUG, "Unknown score type, will be set in custom scores");
+    }
+    //go ahead and set all custom scores to the cvParam names.
+    string name = cvTermInfo(i->cvid).name;
+    fvalue = StringUtils::FromString<FLOAT_T>(i->value);
+    match->setCustomScore(name, fvalue);
+  }
+
+  for (vector<UserParam>::const_iterator i = item.userParams.begin();
+       i != item.userParams.end();
+       ++i) {
+    if (StringUtils::TryFromString(i->value, &fvalue)) {
+      match->setCustomScore(i->name, fvalue);
+    }
+  }
+}
+
+/**
+ * \returns the MatchCollection resulting from the parsed xml file
+ */
+MatchCollection* MzIdentMLReader::parse(
+  const string& path, ///< path of the xml file
+  Database* database, ///< target protein database
+  Database* decoy_database ///< decoy protein database (can be null)
+  ) {
+  MzIdentMLReader reader(path);
+  reader.setDatabase(database);
+  reader.setDecoyDatabase(decoy_database);
+  MatchCollection* collection = reader.parse();
+  return collection;
+}
+ 
+/**
+ * \returns the MatchCollection resulting from the parsed xml file
+ */
+MatchCollection* MzIdentMLReader::parse() {
+  match_collection_ = new MatchCollection();
+  match_collection_ -> preparePostProcess();
+  carp(CARP_DEBUG, "MzIdentMLReader::opening file:%s", file_path_.c_str());
+  pwiz_reader_ = new IdentDataFile(file_path_);
+  parseMods();
+  parseDatabaseSequences();
+  parsePSMs();
+  return match_collection_;
+}
+
+void MzIdentMLReader::parseMods() {
+  AnalysisProtocolCollection& apc = pwiz_reader_->analysisProtocolCollection;
+  for (vector<SpectrumIdentificationProtocolPtr>::const_iterator i = apc.spectrumIdentificationProtocol.begin();
+       i != apc.spectrumIdentificationProtocol.end();
+       i++) {
+    for (vector<SearchModificationPtr>::const_iterator j = (*i)->modificationParams.begin();
+         j != (*i)->modificationParams.end();
+         j++) {
+      const SearchModification& sm = **j;
+      ModPosition position;
+      switch (sm.specificityRules.cvid) {
+        case MS_modification_specificity_peptide_N_term: position = PEPTIDE_N; break;
+        case MS_modification_specificity_peptide_C_term: position = PEPTIDE_C; break;
+        case MS_modification_specificity_protein_N_term: position = PROTEIN_N; break;
+        case MS_modification_specificity_protein_C_term: position = PROTEIN_C; break;
+        default:                                         position = ANY; break;
+      }
+      ModificationDefinition::New(
+        StringUtils::Join(sm.residues), sm.massDelta, position, sm.fixedMod);
+    }
+  }
+}
+
+/**
+ * parses the database sequences from the mzid file
+ */
+void MzIdentMLReader::parseDatabaseSequences() {
+  for (vector<DBSequencePtr>::const_iterator i = pwiz_reader_->sequenceCollection.dbSequences.begin();
+       i != pwiz_reader_->sequenceCollection.dbSequences.end();
+       i++) {
+    DBSequence& db_sequence = (**i);
+    int length = db_sequence.length;
+    string accession = db_sequence.accession;
+    string seq = db_sequence.seq;
+
+    Protein* protein = NULL;
+    bool is_decoy;
+
+    if (seq.empty()) {
+      protein = MatchCollectionParser::getProtein(
+        database_, decoy_database_, accession, is_decoy);
+    } else {
+      protein = MatchCollectionParser::getProtein(
+        database_, decoy_database_, accession, seq, is_decoy);
+    }
+  }
+}
+
+/**
+ * parses the psms from the mzid file
+ */
+void MzIdentMLReader::parsePSMs() {
+  for (vector<SpectrumIdentificationListPtr>::const_iterator i =
+         pwiz_reader_->dataCollection.analysisData.spectrumIdentificationList.begin();
+       i != pwiz_reader_->dataCollection.analysisData.spectrumIdentificationList.end();
+       i++) {
+    for (vector<SpectrumIdentificationResultPtr>::const_iterator j =
+           (*i)->spectrumIdentificationResult.begin();
+         j != (*i)->spectrumIdentificationResult.end();
+         ++j) {
+      SpectrumIdentificationResult& result = **j;
+      string idStr = result.spectrumID;
+      carp(CARP_DEBUG, "idStr:%s", idStr.c_str());
+      //TODO crux requires scan numbers to be integer, where mzid can have
+      //them be strings. I don't know what the appropiate thing to do here.
+      //For now, lets parse as a first_scan-last_scan string, since our
+      //writer outputs it in that format.  SJM. 
+      int first_scan, last_scan;
+      if (!get_first_last_scan_from_string(idStr, first_scan, last_scan)) {
+        carp(CARP_ERROR, "Cannot find first,last scan from spectrumID:%s",
+             idStr.c_str());    
+      }
+
+      //We are not using this yet, but we might.
+      string filename;
+      if (result.spectraDataPtr != NULL) {
+        string filename = result.spectraDataPtr->location;
+        carp(CARP_DEBUG, "filename:%s", filename.c_str());
+      }
+      for (vector<SpectrumIdentificationItemPtr>::const_iterator k =
+             result.spectrumIdentificationItem.begin();
+           k != result.spectrumIdentificationItem.end();
+           k++) {
+        SpectrumIdentificationItem& item = **k;
+        if (use_pass_threshold_ && !item.passThreshold) {
+          continue;
+        }
+        int charge = item.chargeState;
+        FLOAT_T obs_mz = item.experimentalMassToCharge;
+        
+        SpectrumZState zstate;
+        zstate.setMZ(obs_mz, charge);
+        vector<int> charge_vec;
+        charge_vec.push_back(charge);
+
+        Spectrum* spectrum = new Spectrum(first_scan, last_scan, obs_mz, charge_vec, "");
+        FLOAT_T calc_mass = (item.calculatedMassToCharge - MASS_PROTON) * (FLOAT_T)charge;
+        string sequence = item.peptidePtr->peptideSequence;
+      
+        vector<PeptideEvidencePtr>& peptide_evidences = item.peptideEvidencePtr;
+        PeptideEvidencePtr peptide_evidence_ptr = peptide_evidences.front();
+
+        string protein_id = peptide_evidence_ptr->dbSequencePtr->accession;
+        int start_idx = peptide_evidence_ptr->start;
+
+        carp(CARP_DEBUG, "getting protein %s", protein_id.c_str());
+        bool is_decoy_test;
+        Protein* protein = MatchCollectionParser::getProtein(
+          database_, decoy_database_, protein_id, is_decoy_test);
+     
+        if (peptide_evidence_ptr->isDecoy != is_decoy_test) {
+          carp_once(CARP_WARNING, "Protein 0) %s : mzid says isdecoy: %d, "
+            "but database says isdecoy: %d, did you set decoy-prefix?", 
+            protein_id.c_str(), 
+            peptide_evidence_ptr->isDecoy, is_decoy_test);
+        }
+        //If there is one PeptideEvidence object that is a decoy
+        //then mark the match as a decoy.
+        bool is_decoy = is_decoy || peptide_evidence_ptr->isDecoy || is_decoy_test;
+
+        start_idx = protein->findStart(sequence, "", "");
+
+        if (start_idx == -1) {
+          carp(CARP_FATAL, "can't find sequence %s in first protein %s", sequence.c_str(), protein->getIdPointer().c_str());
+        }
+
+        int length = sequence.length();
+        carp(CARP_DEBUG, "creating peptide %s %f %i", sequence.c_str(), calc_mass, start_idx);
+
+        Crux::Peptide* peptide = new Crux::Peptide(length, protein, start_idx);
+
+        // Add mods to the peptide
+        PeptidePtr pep_ptr = item.peptidePtr;
+        for (vector<ModificationPtr>::const_iterator l = pep_ptr->modification.begin();
+             l != pep_ptr->modification.end();
+             l++) {
+          const ModificationDefinition* mod = ModificationDefinition::Find(
+            (*l)->monoisotopicMassDelta, false);
+          if (mod != NULL) {
+            unsigned char index = (*l)->location;
+            switch (mod->Position()) {
+              case PEPTIDE_N:
+              case PROTEIN_N:
+                index = 0;
+                break;
+              case PEPTIDE_C:
+              case PROTEIN_C:
+                index = length - 1;
+                break;
+              default:
+                index = (*l)->location - 1;
+            }
+            peptide->addMod(mod, index);
+          } else {
+            carp(CARP_ERROR, "Unknown modification: %f", (*l)->monoisotopicMassDelta);
+          }
+        }
+
+        for (int pe_idx = 1; pe_idx < peptide_evidences.size(); pe_idx++) {
+          PeptideEvidencePtr peptide_evidence_ptr = peptide_evidences[pe_idx];
+          int start = peptide_evidence_ptr->start;
+          int end = peptide_evidence_ptr->end;
+          protein_id = peptide_evidence_ptr->dbSequencePtr->accession; 
+          carp(CARP_DEBUG, "id: %s start:%i end: %i decoy: %i",
+               protein_id.c_str(), start, end, is_decoy);
+
+          protein = MatchCollectionParser::getProtein(
+            database_, decoy_database_, protein_id, is_decoy_test);
+          
+          if (peptide_evidence_ptr->isDecoy != is_decoy_test) {
+            carp_once(CARP_WARNING, "Protein %i) %s: mzid says isdecoy: %i, "
+              "but database says isdecoy: %i, did you set \"decoy-prefix\"?", 
+              pe_idx, protein_id.c_str(), peptide_evidence_ptr->isDecoy, is_decoy_test);
+          }
+          is_decoy = is_decoy || peptide_evidence_ptr->isDecoy || is_decoy_test;
+          start_idx = protein->findStart(sequence, "", "");
+          if (start_idx != -1) {
+            PeptideSrc* src = new PeptideSrc((DIGEST_T)0, protein, start_idx);
+            peptide->addPeptideSrc(src);
+          }
+        }
+
+        Match* match = new Match(peptide, spectrum, zstate, is_decoy);
+        // trying to set lnExperimentSize to -1 -> representing unavailable information on distinct matches/spectrum
+        match->setLnExperimentSize(-1);
+        match_collection_->addMatchToPostMatchCollection(match);
+        match->setRank(XCORR, item.rank); // Is it safe to assume this?
+        carp(CARP_DEBUG, "charge: %i obs mz: %f calc mass: %f sequence: %s",
+             charge, obs_mz, calc_mass, sequence.c_str());
+        addScores(item, match);
+      }
+    }
+  }
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/MzIdentMLReader.h b/src/io/MzIdentMLReader.h
new file mode 100644
index 0000000..9fd872b
--- /dev/null
+++ b/src/io/MzIdentMLReader.h
@@ -0,0 +1,107 @@
+/**
+ * \file MzIdentMLReader.h
+ * $Revision: 1.00 $ 
+ * DATE: July 11th, 2012
+ * AUTHOR: Sean McIlwain
+ * \brief Object for reading mzidentml.xml.  This object will read a mzidentml file,
+ * creating a matchcollection object.  Use proteowizard.
+ * 
+ **************************************************************************/
+
+#ifndef MZIDENTMLREADER_H
+#define MZIDENTMLREADER_H
+#include <string>
+#include <vector>
+
+#include "PSMReader.h"
+#include "pwiz/data/identdata/IdentDataFile.hpp"
+#include "model/objects.h"
+
+class MzIdentMLReader : public PSMReader {
+
+ protected:
+
+  pwiz::identdata::IdentDataFile* pwiz_reader_; ///< proteowizard's reader for mzid.
+  MatchCollection* match_collection_; ///<resulting match collection
+  bool use_pass_threshold_; ///<indicator of whether to use the passThreshold attribute
+
+  /**
+   * Initializes the object
+   */
+  void init();
+
+  /**
+   * parses the modifications from the mzid file
+   */
+  void parseMods();
+
+  /**
+   * parses the psms from the mzid file
+   */
+  void parsePSMs();
+
+  /**
+   * parses the database sequences from the mzid file
+   */
+  void parseDatabaseSequences();
+
+  /**
+   * adds the scores for a particular psm from the mzid file to a match object
+   */
+  void addScores(
+    const pwiz::identdata::SpectrumIdentificationItem& item, ///<proteowizard psm
+    Crux::Match* match ///<our psm
+  );
+
+ public:  
+
+  /**
+   * \returns an initialized object
+   */
+  MzIdentMLReader();
+
+
+  /**
+   * \returns an object initialized with the file_path
+   */
+  MzIdentMLReader(
+    const std::string& file_path_ ///< the path of the pep.xml file
+  );
+
+  /**
+   * \returns an object initialized with the xml path, and the target,decoy databases
+   */
+  MzIdentMLReader(
+    const std::string& file_path_, ///< the path of the pep.xml
+    Database* database, ///< the protein database
+    Database* decoy_database = NULL ///< the decoy protein database (can be null)
+    );
+
+  /**
+   * \returns the MatchCollection resulting from the parsed xml file
+   */
+  MatchCollection* parse();
+
+  /**
+   * \returns the MatchCollection resulting from the parsed xml file
+   */
+  static MatchCollection* parse(
+    const std::string& path, ///< path of the xml file
+    Database* database, ///< target protein database
+    Database* decoy_database ///< decoy protein database (can be null)
+  );
+
+  /**
+   * default destructor
+   */
+  virtual ~MzIdentMLReader();
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/MzIdentMLWriter.cpp b/src/io/MzIdentMLWriter.cpp
new file mode 100644
index 0000000..0a63757
--- /dev/null
+++ b/src/io/MzIdentMLWriter.cpp
@@ -0,0 +1,829 @@
+/**
+ * \file MzIdentMLWriter.cpp
+ * \brief Writes search results in the MzIdentML (mzid) format.
+ */
+#include <iostream>
+#include <fstream>
+#include <string>
+#include "MzIdentMLWriter.h"
+#include "util/crux-utils.h"
+#include "util/MathUtil.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+#include "model/MatchCollection.h"
+#include "model/Modification.h"
+#include "pwiz/data/identdata/Serializer_mzid.hpp"
+#include "model/ProteinMatch.h"
+#include "model/ProteinMatchCollection.h"
+#include "model/PeptideMatch.h"
+#include "model/SpectrumMatch.h"
+
+using namespace std;
+using namespace Crux;
+using namespace pwiz;
+using namespace identdata;
+
+#define calculateMassToCharge(peptide_mass, charge) (FLOAT_T) ((peptide_mass + (charge*MASS_PROTON))/charge)
+
+MzIdentMLWriter::MzIdentMLWriter() : PSMWriter() {
+  //data_ = NULL;
+  fout_ = NULL;
+  sir_idx_ = 0;
+  sil_idx_ = 0;
+  sii_idx_ = 0;
+  peptide_idx_ = 0;
+  peptide_evidence_idx_ = 0;
+  dbs_idx_ = 0;
+  pag_idx_ = 0;
+  pdh_idx_ = 0;
+}
+
+MzIdentMLWriter::~MzIdentMLWriter() {
+  closeFile();
+}
+
+void MzIdentMLWriter::openFile(
+  const char* filename,
+  bool overwrite) {
+  fout_ = create_stream_in_path(filename, NULL, overwrite);  
+  mzid_ = IdentDataPtr(new IdentData());
+}
+
+void MzIdentMLWriter::openFile(
+  const string& filename,
+  bool overwrite) {
+  openFile(filename.c_str(), overwrite);
+}
+
+void MzIdentMLWriter::openFile(
+  CruxApplication* application,
+  string filename,
+  MATCH_FILE_TYPE type) {
+  openFile(filename.c_str(), Params::GetBool("overwrite"));
+}
+
+/**
+ * Close the file, if open.
+ */
+void MzIdentMLWriter::closeFile() {
+  if (mzid_ != NULL && fout_ != NULL) {
+    // Add modification information to AnalysisProtocolCollection -> ModificationParams
+    AnalysisProtocolCollection& apc = mzid_->analysisProtocolCollection;
+    SpectrumIdentificationProtocolPtr sipp(new SpectrumIdentificationProtocol());
+    apc.spectrumIdentificationProtocol.push_back(sipp);
+
+    vector<const ModificationDefinition*> mods = ModificationDefinition::AllMods();
+    for (vector<const ModificationDefinition*>::const_iterator i = mods.begin();
+         i != mods.end();
+         i++) {
+      SearchModificationPtr smp(new SearchModification());
+      smp->fixedMod = (*i)->Static();
+      smp->massDelta = MathUtil::Round((*i)->DeltaMass(), Params::GetInt("mod-precision"));
+      smp->residues = vector<char>((*i)->AminoAcids().begin(), (*i)->AminoAcids().end());
+      switch ((*i)->Position()) {
+        case PEPTIDE_N:
+          smp->specificityRules = CVParam(MS_modification_specificity_peptide_N_term);
+          break;
+        case PEPTIDE_C:
+          smp->specificityRules = CVParam(MS_modification_specificity_peptide_C_term);
+          break;
+        case PROTEIN_N:
+          smp->specificityRules = CVParam(MS_modification_specificity_protein_N_term);
+          break;
+        case PROTEIN_C:
+          smp->specificityRules = CVParam(MS_modification_specificity_protein_C_term);
+          break;
+      }
+      sipp->modificationParams.push_back(smp);
+    }
+
+    Serializer_mzIdentML serializer;
+    serializer.write(*fout_, *mzid_);
+    fout_->close();
+  }
+  delete fout_;
+  fout_ = NULL;
+}
+
+/**
+ * \returns the MzIdentML Peptide object, creating it if
+ * it doesn't exist already
+ */
+PeptidePtr MzIdentMLWriter::getPeptide(
+  Crux::Peptide* peptide ///< Peptide -in
+  ) {
+  char* seqTmp = peptide->getSequence();
+  string sequence(seqTmp);
+  free(seqTmp);
+
+  int modPrecision = Params::GetInt("mod-precision");
+
+  vector<Crux::Modification> mods = peptide->getVarMods();
+  for (vector<PeptidePtr>::const_iterator i = mzid_->sequenceCollection.peptides.begin();
+       i != mzid_->sequenceCollection.peptides.end();
+       ++i) {
+    if ((*i)->peptideSequence == sequence && (*i)->modification.size() == mods.size()) {
+      if (mods.empty()) {
+        return *i;
+      }
+      bool match = true;
+      for (vector<ModificationPtr>::const_iterator j = (*i)->modification.begin();
+           j != (*i)->modification.end();
+           ++j) {
+        bool matchCur = false;
+        for (vector<Crux::Modification>::const_iterator k = mods.begin();
+             k != mods.end();
+             k++) {
+          if ((*j)->location == k->Index() &&
+              MathUtil::AlmostEqual((*j)->monoisotopicMassDelta, k->DeltaMass(), modPrecision)) {
+            matchCur = true;
+            break;
+          }
+        }
+        if (!matchCur) {
+          match = false;
+          break;
+        }
+      }
+      //all modifications match, return peptide.
+      if (match) {
+        return *i;
+      }
+    }
+  }
+
+  //Okay, we didn't find a match, so create a new peptide object.
+  PeptidePtr peptide_p(new pwiz::identdata::Peptide(
+    "PEP_" + StringUtils::ToString(peptide_idx_++)));
+  //peptide_p->id = sequence_str;
+  peptide_p->peptideSequence = sequence;
+
+  //add the modifications.
+  for (vector<Crux::Modification>::const_iterator i = mods.begin(); i != mods.end(); i++) {
+    ModificationPtr mod_p(new pwiz::identdata::Modification());
+    switch (i->Position()) {
+      case PEPTIDE_N:
+      case PROTEIN_N:
+        mod_p->location = 0;
+        break;
+      case PEPTIDE_C:
+      case PROTEIN_C:
+        mod_p->location = i->Index() + 2;
+        break;
+      default:
+        mod_p->location = i->Index() + 1;
+        break;
+    }
+    mod_p->monoisotopicMassDelta = MathUtil::Round(i->DeltaMass(), modPrecision);
+    mod_p->residues.push_back(sequence[i->Index()]);
+    mod_p->set(MS_unknown_modification);
+    peptide_p->modification.push_back(mod_p);
+  }
+
+  mzid_->sequenceCollection.peptides.push_back(peptide_p);
+  return peptide_p;
+}
+
+DBSequencePtr MzIdentMLWriter::getDBSequence(std::string& protein_id) {
+  vector<DBSequencePtr>::iterator dbs_iter;
+  for (dbs_iter = mzid_->sequenceCollection.dbSequences.begin();
+       dbs_iter != mzid_->sequenceCollection.dbSequences.end();
+       ++dbs_iter) {
+    DBSequencePtr dbs_ptr = *dbs_iter;
+    if (protein_id == dbs_ptr->accession) {
+      return dbs_ptr;
+    }
+  }
+
+  //I don't know what to do here, there is a problem if we don't have the
+  //protein database, we can't really assign the sequence.
+  //we can fake it as below, but then we have multiple DBSequences for
+  //the same protein.  Here we might not have the full sequence.
+  DBSequencePtr dbs_ptr(new DBSequence("DBS_"+boost::lexical_cast<string>(dbs_idx_++)));
+  dbs_ptr->accession = protein_id;
+  
+  return (dbs_ptr);
+}
+
+/**
+ * \returns DBSequence for the protein source.  If it doesn't exist, 
+ * then first create the object in the mzid object
+ */
+DBSequencePtr MzIdentMLWriter::getDBSequence(
+  Crux::Peptide* peptide,  ///< peptide -in
+  PeptideSrc* src ///< Source of the peptide -in
+  ) {
+  string protein_id = src->getParentProtein()->getIdPointer();
+  bool is_post_process = src->getParentProtein()->isPostProcess();
+  vector<DBSequencePtr>::iterator dbs_iter;
+ 
+  string sequence_str;
+  if (is_post_process) {
+    char* seq = peptide->getSequence();
+    sequence_str = seq;
+    free(seq);
+  }
+
+  for (dbs_iter = mzid_->sequenceCollection.dbSequences.begin();
+       dbs_iter != mzid_->sequenceCollection.dbSequences.end();
+       ++dbs_iter) {
+    DBSequencePtr dbs_ptr = *dbs_iter;
+    if (protein_id == dbs_ptr->accession) {
+      if (is_post_process) {
+        //sequence str should be the peptide
+        if (sequence_str == dbs_ptr->seq) {
+          return dbs_ptr;
+        }
+      } else {
+        //we have the full sequence.
+        return dbs_ptr;
+      }
+    }
+  }
+
+  DBSequencePtr dbs_ptr(new DBSequence("DBS_"+boost::lexical_cast<string>(dbs_idx_++)));
+  dbs_ptr->accession = protein_id;
+  if (is_post_process) {
+    dbs_ptr->length = sequence_str.length();
+    dbs_ptr->seq = sequence_str;
+  } else {
+    dbs_ptr->length = src->getParentProtein()->getLength();
+    dbs_ptr->seq = src->getParentProtein()->getSequencePointer();
+    //TODO add description
+  }
+  
+  mzid_->sequenceCollection.dbSequences.push_back(dbs_ptr);
+
+  return dbs_ptr;
+}
+
+PeptideEvidencePtr MzIdentMLWriter::getPeptideEvidence(
+  Crux::Peptide* peptide,
+  bool is_decoy,
+  string& protein_id) {
+
+  char* seq = peptide->getSequence();
+  string sequence_str = seq;
+  free(seq);
+
+  //Is there already a peptide evidence ptr?
+  for (vector<PeptideEvidencePtr>::iterator i = mzid_->sequenceCollection.peptideEvidence.begin();
+       i != mzid_->sequenceCollection.peptideEvidence.end();
+       ++i) {
+    PeptideEvidencePtr pe_ptr = *i;
+    if (pe_ptr->peptidePtr->peptideSequence == sequence_str &&
+        pe_ptr->dbSequencePtr->accession == protein_id) {
+      return pe_ptr;
+    }
+  }
+
+  carp(CARP_FATAL, "Couldn't find %s in %s", sequence_str.c_str(), protein_id.c_str());
+  return PeptideEvidencePtr(); // Avoid compiler warning.
+}
+
+/**
+ * \returns PeptideEvidence for the peptide and src.
+ * creates it if it doesn't exist
+ */
+PeptideEvidencePtr MzIdentMLWriter::getPeptideEvidence(
+  Crux::Peptide* peptide, ///< peptide -in
+  bool is_decoy,  ///< is this peptide a decoy? -in
+  PeptideSrc* src ///< where to peptide comes from -in
+  ) {
+
+  char* seq = peptide->getSequence();
+  string sequence_str = seq;
+  free(seq);
+
+  string protein_id = src->getParentProtein()->getId();
+
+  //Is there already a peptide evidence ptr?
+  vector<PeptideEvidencePtr>::iterator pe_iter;
+
+  for (vector<PeptideEvidencePtr>::iterator i = mzid_->sequenceCollection.peptideEvidence.begin();
+       i != mzid_->sequenceCollection.peptideEvidence.end();
+       ++i) {
+    PeptideEvidencePtr pe_ptr = *i;
+    if (pe_ptr->peptidePtr->peptideSequence == sequence_str &&
+        pe_ptr->dbSequencePtr->accession == protein_id) {
+      return pe_ptr;
+    }
+  }
+
+  DBSequencePtr dbs_ptr = getDBSequence(peptide, src);
+  PeptideEvidencePtr pe_ptr(new PeptideEvidence(
+    "PE_" + StringUtils::ToString(peptide_evidence_idx_++)));
+
+  if (src->getParentProtein()->isPostProcess()) {
+    pe_ptr->start = 0;
+    pe_ptr->end = peptide->getLength();
+  } else {
+    pe_ptr->start = src->getStartIdx();
+    pe_ptr->end = src->getStartIdx()+peptide->getLength();
+  }
+  pe_ptr->dbSequencePtr = dbs_ptr;
+  pe_ptr->peptidePtr = getPeptide(peptide);
+  pe_ptr->isDecoy = is_decoy; 
+
+  mzid_->sequenceCollection.peptideEvidence.push_back(pe_ptr);
+  return pe_ptr;  
+}
+
+/**
+ * \returns the SpectrumIdentificationList, creating it if 
+ * it doesn't exist yet.
+ */
+SpectrumIdentificationListPtr MzIdentMLWriter::getSpectrumIdentificationList() {
+  SpectrumIdentificationListPtr silp;
+
+  if (mzid_->dataCollection.analysisData.spectrumIdentificationList.size() > 0) {
+    silp = mzid_->dataCollection.analysisData.spectrumIdentificationList.back();
+  } else {
+    silp = SpectrumIdentificationListPtr(new SpectrumIdentificationList(
+      "SIL_" + StringUtils::ToString(sil_idx_++)));
+    mzid_->dataCollection.analysisData.spectrumIdentificationList.push_back(silp);   
+  }
+  return silp;
+}
+
+ProteinDetectionListPtr MzIdentMLWriter::getProteinIdentificationList() {
+  ProteinDetectionListPtr pdlp;
+  if (mzid_ -> dataCollection.analysisData.proteinDetectionListPtr != NULL) {
+    pdlp = mzid_->dataCollection.analysisData.proteinDetectionListPtr;
+  } else {
+    pdlp = ProteinDetectionListPtr(
+      new ProteinDetectionList("PDL_1"));
+    mzid_->dataCollection.analysisData.proteinDetectionListPtr = pdlp;
+  }
+  return pdlp;
+}
+
+ProteinAmbiguityGroupPtr MzIdentMLWriter::getProteinAmbiguityGroup(
+  std::string& protein_id
+) {
+  ProteinDetectionListPtr pdlp = getProteinIdentificationList();
+  vector<ProteinAmbiguityGroupPtr>& pag_vec = pdlp->proteinAmbiguityGroup;
+
+  for (size_t pa_idx = 0; pa_idx < pag_vec.size() ;pa_idx++) {
+    std::vector<ProteinDetectionHypothesisPtr>& pdh_vec = pag_vec[pa_idx]->proteinDetectionHypothesis;  
+    for (size_t pdh_idx = 0 ; pdh_idx < pdh_vec.size() ; pdh_idx++) {
+      if (pdh_vec[pdh_idx]->dbSequencePtr->accession == protein_id) {
+
+        return pag_vec[pa_idx]; 
+      }
+    }
+  }
+
+  //not found, create it
+  ProteinAmbiguityGroupPtr pagp = ProteinAmbiguityGroupPtr(
+    new ProteinAmbiguityGroup("PAG_"+boost::lexical_cast<string>(pag_idx_++)));
+
+  ProteinDetectionHypothesisPtr pdhp = getProteinDetectionHypothesis(pagp, protein_id);
+  pag_vec.push_back(pagp);
+  return pagp;
+}
+  
+ProteinDetectionHypothesisPtr MzIdentMLWriter::getProteinDetectionHypothesis(
+  ProteinAmbiguityGroupPtr pagp,
+  std::string& protein_id
+  ) {
+  std::vector<ProteinDetectionHypothesisPtr>& pdh_vec = pagp->proteinDetectionHypothesis;
+  
+  for (size_t pdh_idx = 0; pdh_idx < pdh_vec.size() ; pdh_idx++) {
+    if (pdh_vec[pdh_idx]->dbSequencePtr->accession == protein_id) {
+      return pdh_vec[pdh_idx];
+    }
+  }
+ 
+  ProteinDetectionHypothesisPtr pdhp = ProteinDetectionHypothesisPtr(
+    new ProteinDetectionHypothesis("PDH_"+boost::lexical_cast<string>(pdh_idx_++)));
+
+  pdhp->dbSequencePtr = getDBSequence(protein_id);
+  pdh_vec.push_back(pdhp);
+  return pdhp;
+}
+
+ProteinDetectionHypothesisPtr MzIdentMLWriter::getProteinDetectionHypothesis(
+  string& protein_id 
+  ) {
+  ProteinAmbiguityGroupPtr pagp = getProteinAmbiguityGroup(protein_id);
+  return getProteinDetectionHypothesis(pagp, protein_id);
+}
+
+PeptideHypothesis& MzIdentMLWriter::getPeptideHypothesis(
+  ProteinMatch* protein_match,
+  PeptideMatch* peptide_match) {
+
+  string protein_id = protein_match->getId();
+  PeptideSrc* src = peptide_match->getSrc(protein_match);
+  ProteinDetectionHypothesisPtr pdhp = getProteinDetectionHypothesis(protein_id);
+  PeptideEvidencePtr pe_ptr = getPeptideEvidence(peptide_match->getPeptide(), true, src);
+
+  for (size_t ph_idx = 0;ph_idx < pdhp->peptideHypothesis.size();ph_idx++) {
+    if (pdhp->peptideHypothesis[ph_idx].peptideEvidencePtr == pe_ptr) {
+      return pdhp->peptideHypothesis[ph_idx];
+    }
+  }
+
+  PeptideHypothesis pep_hyp;
+  pdhp->peptideHypothesis.push_back(pep_hyp);
+  pdhp->peptideHypothesis.back().peptideEvidencePtr = pe_ptr;
+
+  return pdhp->peptideHypothesis.back();  
+}
+
+/**
+ * \returns the SpectrumIdentificationResult for the spectrum.
+ * creating it first if it doesn't exist
+ */
+SpectrumIdentificationResultPtr MzIdentMLWriter::getSpectrumIdentificationResult(
+  Crux::Spectrum* spectrum ///< Crux spectrum object -in
+  ) {
+
+  string spectrum_idStr = 
+    StringUtils::ToString(spectrum->getFirstScan()) + 
+    "-" +
+    StringUtils::ToString(spectrum->getLastScan());
+
+  SpectrumIdentificationListPtr silp = getSpectrumIdentificationList();
+
+  vector<SpectrumIdentificationResultPtr>::iterator sirp_iter;
+
+  for (sirp_iter = silp->spectrumIdentificationResult.begin();
+       sirp_iter != silp->spectrumIdentificationResult.end();
+       ++sirp_iter) {
+  
+    SpectrumIdentificationResultPtr sirp = *sirp_iter;
+    if (sirp->spectrumID == spectrum_idStr) {
+      return sirp;
+    }
+  }
+
+  SpectrumIdentificationResultPtr sirp(new SpectrumIdentificationResult());
+  
+  sirp->id = "SIR_"+boost::lexical_cast<string>(sir_idx_++);
+  sirp->spectrumID = spectrum_idStr;
+  silp->spectrumIdentificationResult.push_back(sirp);
+  return sirp;
+}
+
+SpectrumIdentificationItemPtr MzIdentMLWriter::getSpectrumIdentificationItem(
+  SpectrumMatch* spectrum_match
+  ) {
+  Crux::Spectrum* spectrum = spectrum_match->getSpectrum();
+  Crux::Peptide* crux_peptide = spectrum_match->getPeptideMatch()->getPeptide();
+  SpectrumZState& zstate = spectrum_match->getZState();
+  int charge_state = zstate.getCharge();
+  double exp_mz = zstate.getMZ();
+   
+  PeptidePtr peptide_ptr = getPeptide(crux_peptide);
+  SpectrumIdentificationResultPtr sirp = getSpectrumIdentificationResult(spectrum_match->getSpectrum());
+  vector<SpectrumIdentificationItemPtr>::iterator siip_iter;
+
+  for (siip_iter = sirp->spectrumIdentificationItem.begin(); siip_iter != sirp->spectrumIdentificationItem.end(); ++siip_iter) {
+    SpectrumIdentificationItemPtr siip = *siip_iter;
+    if (siip->peptidePtr == peptide_ptr && siip->chargeState == charge_state && fabs(siip->experimentalMassToCharge - exp_mz) < 0.0001) {
+      return siip;
+    }
+  }
+
+  //wasn't found, create it.
+  SpectrumIdentificationItemPtr siip(new SpectrumIdentificationItem(
+    "SII_"+boost::lexical_cast<string>(sii_idx_++)));
+  siip->chargeState = zstate.getCharge();
+  siip->experimentalMassToCharge = zstate.getMZ();
+
+  siip->calculatedMassToCharge = calculateMassToCharge(crux_peptide->calcModifiedMass(), (FLOAT_T) zstate.getCharge());
+
+  addSpectrumScores(spectrum_match, siip);
+  siip->passThreshold = true;
+  siip->peptidePtr = peptide_ptr;
+  addPeptideEvidences(crux_peptide, false, siip);
+  sirp->spectrumIdentificationItem.push_back(siip);
+  return siip;
+}
+
+void MzIdentMLWriter::addSpectrumScores(
+  SpectrumMatch* spectrum_match,
+  SpectrumIdentificationItemPtr siip) {
+
+  for (ScoreMapIterator iter = spectrum_match->scoresBegin();
+       iter != spectrum_match->scoresEnd();
+       ++iter) {
+    SCORER_TYPE_T score_type = iter->first;
+    FLOAT_T score = iter->second;
+    CVID cvparam_type = getScoreCVID(score_type);
+    if (cvparam_type != CVID_Unknown) {
+      CVParam cvparam(cvparam_type, score);
+      siip->cvParams.push_back(cvparam);
+    } else {
+      carp_once(CARP_WARNING, "Unknown CVPARAM %d", (int)score_type);
+    }
+
+  }
+}
+
+/**
+ * Adds all the peptide evidences to the SpectrumIdentificationItem
+ * using the peptide's protein sources
+ */
+void MzIdentMLWriter::addPeptideEvidences(
+  Crux::Peptide* peptide, ///< peptide to add evidence for
+  bool is_decoy, ///< is peptide a decoy?
+  SpectrumIdentificationItemPtr siip ///< item to add evidences to
+  ) {
+
+  for (PeptideSrcIterator src_iter = peptide->getPeptideSrcBegin();
+    src_iter != peptide->getPeptideSrcEnd();
+    ++src_iter) {
+
+    PeptideEvidencePtr peptide_evidence = getPeptideEvidence(peptide, is_decoy, *src_iter);
+    siip->peptideEvidencePtr.push_back(peptide_evidence);
+  }
+}
+
+/**
+ * \returns the mapping of SCORER_TYPE_T to the cvParam id
+ */
+CVID MzIdentMLWriter::getScoreCVID(
+  SCORER_TYPE_T type ///< type to convert
+  ) {
+  switch(type) {
+    case XCORR:
+      return MS_SEQUEST_xcorr;
+    case SP:
+      return MS_SEQUEST_PeptideSp;
+    case TIDE_SEARCH_EXACT_PVAL:
+      return MS_p_value;
+    case PERCOLATOR_SCORE:
+      return MS_percolator_score;
+    case PERCOLATOR_QVALUE:
+      return MS_percolator_Q_value;
+    case PERCOLATOR_PEP:
+      return MS_percolator_PEP;
+    default:
+      return CVID_Unknown;  
+  }
+}
+
+/**
+ * \returns the mapping of SCORER_TYPE_T to cvParam id for ranks
+ */
+CVID MzIdentMLWriter::getRankCVID(
+  SCORER_TYPE_T type ///< type to convert
+  ) {
+  switch(type) {
+    case SP:
+      return MS_SEQUEST_PeptideRankSp;
+    default:
+      return CVID_Unknown;
+  }
+}
+
+/**
+ * Adds the Match scores to the SpectrumIdentificationItem
+ */
+void MzIdentMLWriter::addScores(
+  MatchCollection* match_collection, ///< Parent collection of match
+  Match* match, ///< Match to add
+  SpectrumIdentificationItemPtr item ///< item to add the scores to
+  ) {
+
+  for(int score_idx = (int)SP; 
+      score_idx < (int)NUMBER_SCORER_TYPES; 
+      score_idx++) {
+    SCORER_TYPE_T score_type = (SCORER_TYPE_T)score_idx;
+    if (match_collection->getScoredType(score_type)) {
+      if (score_type == XCORR && match_collection->exact_pval_search_) {
+        CVParam exactPval(MS_p_value,
+                          match->getScore(TIDE_SEARCH_EXACT_PVAL));
+        item->cvParams.push_back(exactPval);
+        CVParam refactXCORR(MS_SEQUEST_xcorr,
+                            match->getScore(TIDE_SEARCH_REFACTORED_XCORR));
+        item->cvParams.push_back(refactXCORR);
+      } else {
+        CVID cvparam_type = getScoreCVID(score_type);
+        if (cvparam_type != CVID_Unknown) {
+          CVParam cvparam(cvparam_type, match->getScore(score_type));
+          item->cvParams.push_back(cvparam);   
+        }
+      }
+    }
+  }
+
+  if (match_collection->getScoredType(XCORR)) {
+    CVParam delta_cn(MS_SEQUEST_deltacn, match->getScore(DELTA_CN));
+    item->cvParams.push_back(delta_cn);
+  }
+
+  if (match_collection->getScoredType(BY_IONS_MATCHED)) {
+    CVParam matched_ions(MS_SEQUEST_matched_ions, match->getScore(BY_IONS_MATCHED));
+    item->cvParams.push_back(matched_ions);
+  }
+  if (match_collection->getScoredType(BY_IONS_TOTAL)) {
+    CVParam total_ions(MS_SEQUEST_total_ions, match->getScore(BY_IONS_TOTAL)); 
+    item->cvParams.push_back(total_ions);
+  }
+}
+
+/**
+ * Adds the match ranks to the SpectrumIdentificationItem
+ */
+void MzIdentMLWriter::addRanks(
+  MatchCollection* match_collection, ///< Parent collection of the match
+  Match* match, ///< Match to add
+  SpectrumIdentificationItemPtr item ///< item to add the ranks to
+  ) {
+
+  if (match_collection->getScoredType(SP)) {
+    CVParam sp_rank(getRankCVID(SP), match->getRank(SP));
+    item->cvParams.push_back(sp_rank);
+  }
+}
+  
+void MzIdentMLWriter::write(
+  MatchCollection* collection,
+  string database) {
+  addMatches(collection);
+}
+
+/**
+ * Adds the matches in the match collection to
+ * the mzid objects
+ */
+void MzIdentMLWriter::addMatches(
+  MatchCollection* collection  ///< matches to add
+  ) {
+  MatchIterator match_iter(collection);
+  while (match_iter.hasNext()) {
+    addMatch(collection, match_iter.next());
+  }
+}
+
+/**
+ * Adds the match to the mzIdentML object
+ */
+void MzIdentMLWriter::addMatch(
+  MatchCollection* collection, ///< parent collection
+  Match* match ///< match to add
+  ) {
+  Crux::Spectrum* spectrum = match->getSpectrum();
+  Crux::Peptide* peptide = match->getPeptide();
+  SpectrumZState zstate = match->getZState();
+   
+  SpectrumIdentificationItemPtr siip(new SpectrumIdentificationItem(
+    "SII_"+boost::lexical_cast<string>(sii_idx_++)));
+
+  siip->chargeState = zstate.getCharge();
+  siip->experimentalMassToCharge = zstate.getMZ();
+
+  siip->calculatedMassToCharge = calculateMassToCharge(peptide->calcModifiedMass(), (FLOAT_T) zstate.getCharge());
+
+  if (collection->getScoredType(PERCOLATOR_SCORE)) {
+    siip->rank = match->getRank(PERCOLATOR_SCORE);
+  } else if (collection->getScoredType(XCORR)) { 
+    siip->rank = match->getRank(XCORR);
+  }
+  addScores(collection, match, siip);
+  addRanks(collection, match, siip);
+  siip->passThreshold = true;
+  siip->peptidePtr = getPeptide(peptide);
+  addPeptideEvidences(peptide, match->isDecoy(), siip);
+
+  SpectrumIdentificationResultPtr sirp =
+    getSpectrumIdentificationResult(spectrum);
+  sirp->spectrumIdentificationItem.push_back(siip);
+}
+
+void MzIdentMLWriter::addProteinScores(
+  ProteinDetectionHypothesisPtr pdhp,
+  ProteinMatch* protein_match) {
+
+  //TODO should we use these instead?
+    /// q-value for peptides: Peptide identification confidence metric q-value.
+  //    MS_q_value_for_peptides = 1001868,
+
+    /// q-value for proteins: Protein identification confidence metric q-value.
+  //   MS_q_value_for_proteins = 1001869,
+
+  for (ScoreMapIterator iter = protein_match->scoresBegin();
+    iter != protein_match->scoresEnd();
+    ++iter) {
+
+    SCORER_TYPE_T score_type = iter->first;
+    if (score_type == DELTA_CN || score_type == DELTA_LCN ||
+        score_type == BY_IONS_MATCHED || score_type == BY_IONS_TOTAL) {
+      continue;
+    }
+    FLOAT_T score = iter->second;
+    CVID cvparam_type = getScoreCVID(score_type);
+    if (cvparam_type != CVID_Unknown) {
+      CVParam cvparam(cvparam_type, score);
+      pdhp->cvParams.push_back(cvparam);
+    } else {
+      carp(CARP_WARNING, "Unknown parameter type for score type:%d", score_type);
+      //TODO create a user param.
+    }
+  }
+}
+
+void MzIdentMLWriter::addPeptideScores(
+  PeptideMatch* peptide_match
+  ) {
+  //So PeptideHypothesis doesn't let you add cvparams and they
+  //are not unique,  the Peptide tag requires uniqueness, so
+  //I'll add the q-values and scores to those elements (SJM).
+  PeptidePtr peptidep = getPeptide(peptide_match->getPeptide());
+
+  //we already added the scores for this peptide.
+  if (peptidep->cvParams.size() != 0) {
+    return;
+  }
+
+  for (ScoreMapIterator iter = peptide_match->scoresBegin();
+    iter != peptide_match->scoresEnd();
+    ++iter) {
+
+    SCORER_TYPE_T score_type = iter->first;
+    if (score_type == DELTA_CN || score_type == DELTA_LCN ||
+        score_type == BY_IONS_MATCHED || score_type == BY_IONS_TOTAL) {
+      continue;
+    }
+    FLOAT_T score = iter->second;
+    CVID cvparam_type = getScoreCVID(score_type);
+    if (cvparam_type != CVID_Unknown) {
+      CVParam cvparam(cvparam_type, score);
+      peptidep->cvParams.push_back(cvparam);
+    } else {
+      carp(CARP_WARNING, "Unknown parameter type for score type:%d", score_type);
+      //TODO create a user param.
+    }
+  }
+}
+
+void MzIdentMLWriter::addSpectrumMatches(
+  ProteinMatch* protein_match,
+  PeptideMatch* peptide_match
+  ) {
+  PeptideHypothesis& peptide_hypothesis = getPeptideHypothesis(protein_match, peptide_match);
+  for (SpectrumMatchIterator spectrum_iter = peptide_match->spectrumMatchBegin();
+       spectrum_iter != peptide_match->spectrumMatchEnd();
+       ++spectrum_iter) {
+    SpectrumMatch* spectrum_match = *spectrum_iter;
+    SpectrumIdentificationItemPtr sip = getSpectrumIdentificationItem(spectrum_match);
+    peptide_hypothesis.spectrumIdentificationItemPtr.push_back(sip);
+  }
+}
+
+void MzIdentMLWriter::addPeptideMatches(
+  ProteinMatch* protein_match
+  ) {
+  for (PeptideMatchIterator peptide_iter = protein_match->peptideMatchBegin();
+       peptide_iter != protein_match->peptideMatchEnd();
+       ++peptide_iter) {
+    PeptideMatch* peptide_match = *peptide_iter;
+    addPeptideScores(peptide_match);
+    addSpectrumMatches(protein_match, peptide_match);
+  }
+}
+
+/**
+ * Adds the protein matches to the mzid object
+ */
+void MzIdentMLWriter::addProteinMatches(
+  ProteinMatchCollection* protein_match_collection
+) {
+  if (protein_match_collection == NULL) {
+    carp(CARP_FATAL, "ProteinMatchCollection was null");
+  }
+  //now add the protein matches.
+  for (ProteinMatchIterator match_iter = protein_match_collection->proteinMatchBegin();
+       match_iter != protein_match_collection->proteinMatchEnd();
+       match_iter++) {
+    addProteinMatch(*match_iter);
+  }
+}
+
+/**
+ * Adds a protein match to the mzIdentML object
+ */
+void MzIdentMLWriter::addProteinMatch(
+  ProteinMatch* protein_match
+  ) {
+  string protein_id = protein_match->getId();
+
+  //For now, each protein should get its own protein ambiguity group
+  ProteinDetectionHypothesisPtr pdhp = getProteinDetectionHypothesis(protein_id);
+  addProteinScores(pdhp, protein_match);
+  addPeptideMatches(protein_match);
+}
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
+
diff --git a/src/io/MzIdentMLWriter.h b/src/io/MzIdentMLWriter.h
new file mode 100644
index 0000000..0a6241d
--- /dev/null
+++ b/src/io/MzIdentMLWriter.h
@@ -0,0 +1,267 @@
+/**
+ * \file MzIdentMLWriter.h
+ * \brief Writes search results in the MzIdentML (mzid) format.
+ */
+#ifndef MZIDENTMLWRITER_H
+#define MZIDENTMLWRITER_H
+
+#include <string>
+#include <vector>
+
+#include "PSMWriter.h"
+#include "model/objects.h"
+#include "model/match_objects.h"
+#include "pwiz/data/identdata/IdentData.hpp"
+
+class MzIdentMLWriter : public PSMWriter {
+
+ protected:
+  std::ofstream* fout_; ///< stream to write the mzid to
+  pwiz::identdata::IdentDataPtr mzid_; ///< structure of mzidentml 
+  size_t sir_idx_; ///< counter for SpectrumIdentification results
+  size_t sil_idx_; ///<counter for SpectrumIdentificationList
+  size_t sii_idx_; ///<counter for SpectrumIdentificationItem
+  size_t peptide_idx_; ///<counter for pwiz Peptide
+  size_t peptide_evidence_idx_; ///<counter for PeptideEvidence
+  size_t dbs_idx_; ///< counter for DBSequence
+
+  size_t pag_idx_; ///< counter for ProteinAmbiguityGroups
+  size_t pdh_idx_; ///< counter for ProteinDetectionHypothesis
+
+  /**
+   * \returns DBSequence for the protein source.  If it doesn't exist, 
+   * then first create the object in the mzid object
+   */
+  pwiz::identdata::DBSequencePtr getDBSequence(
+    Crux::Peptide* peptide, ///< peptide -in 
+    PeptideSrc* src ///< Source of the peptide -in
+  );
+
+  /**
+   * \returns PeptideEvidence for the peptide and src.
+   * creates it if it doesn't exist
+   */
+  pwiz::identdata::PeptideEvidencePtr getPeptideEvidence(
+    Crux::Peptide* peptide, ///< peptide -in
+    bool is_decoy, ///< is this peptide a decoy? -in
+    PeptideSrc* src ///< where the peptide is coming from -in
+  );
+
+  pwiz::identdata::PeptideEvidencePtr getPeptideEvidence(
+    Crux::Peptide* peptide,
+    bool is_decoy,
+    std::string& protein_id
+  );
+
+  /**
+   * \returns the MzIdentML Peptide object, creating it if
+   * it doesn't exist already
+   */
+  pwiz::identdata::PeptidePtr getPeptide(
+    Crux::Peptide* peptide ///< peptide -in
+  );
+
+  /**
+   * \returns the SpectrumIdentificationList, creating it if 
+   * it doesn't exist yet.
+   */
+  pwiz::identdata::SpectrumIdentificationListPtr getSpectrumIdentificationList();
+
+  /**
+   * \returns the SpectrumIdentificationResult for the spectrum.
+   * creating it first if it doesn't exist
+   */
+  pwiz::identdata::SpectrumIdentificationResultPtr getSpectrumIdentificationResult(
+    Crux::Spectrum* spectrum ///< Crux spectrum object -in
+  );
+
+  /**
+   * \returns the SpectrumIdentificationItem for the SpectrumMatch.
+   * creating it first it it doesn't exist
+   */
+  pwiz::identdata::SpectrumIdentificationItemPtr getSpectrumIdentificationItem(
+    SpectrumMatch* spectrum_match
+  );
+
+  /**
+   * Adds all the peptide evidences to the SpectrumIdentificationItem
+   * using the peptide's protein sources
+   */
+  void addPeptideEvidences(
+    Crux::Peptide* peptide, ///< peptide to add evidence for
+    bool is_decoy, ///< is peptide a decoy?
+    pwiz::identdata::SpectrumIdentificationItemPtr siip ///<item to add evidences to.
+  );
+
+  /**
+   * \returns the mapping of SCORER_TYPE_T to the cvParam id
+   */
+  pwiz::cv::CVID getScoreCVID(
+    SCORER_TYPE_T type ///< type to convert
+  );
+
+  /**
+   * \returns the mapping of SCORER_TYPE_T to the cvPARAM id for ranks
+   */
+  pwiz::cv::CVID getRankCVID(
+    SCORER_TYPE_T type ///< type to convert
+  );
+
+  /**
+   * Adds the Match scores to the SpectrumIdentificationItem
+   */
+  void addScores(
+    MatchCollection* match_collection, ///< Parent collection of match
+    Crux::Match* match, ///< Match to add
+    pwiz::identdata::SpectrumIdentificationItemPtr item ///< item to add the scores to
+  );
+
+  /**
+   * Adds the match ranks to the SpectrumIdentificationItem
+   */
+  void addRanks(
+    MatchCollection* match_collection, ///< Parent collection of the match
+    Crux::Match* match, ///< Match to add
+    pwiz::identdata::SpectrumIdentificationItemPtr item ///< item to add the ranks to
+  );
+
+  pwiz::identdata::ProteinDetectionListPtr getProteinIdentificationList();
+
+  /**
+   * \returns the ProteinAmbiguityGroup for the protein, creating one if
+   * it doesn't exist.
+   */
+  pwiz::identdata::ProteinAmbiguityGroupPtr getProteinAmbiguityGroup(
+    std::string& protein_id
+  );
+
+  pwiz::identdata::ProteinDetectionHypothesisPtr getProteinDetectionHypothesis(
+    pwiz::identdata::ProteinAmbiguityGroupPtr pagp,   
+    std::string& protein_id
+  );
+
+  pwiz::identdata::ProteinDetectionHypothesisPtr getProteinDetectionHypothesis(
+    std::string& protein_id
+  );
+
+  pwiz::identdata::PeptideHypothesis& getPeptideHypothesis(
+    ProteinMatch* protein_match,
+    PeptideMatch* peptide_match
+  );
+
+  pwiz::identdata::DBSequencePtr getDBSequence(
+    std::string& protein_id
+  );
+
+  void addProteinScores(
+    pwiz::identdata::ProteinDetectionHypothesisPtr pdhp,
+    ProteinMatch* protein_match
+    );
+
+  void addPeptideMatches(
+    ProteinMatch* protein_match
+  );
+
+  void addSpectrumMatches(
+    ProteinMatch* protein_match,
+    PeptideMatch* peptide_match
+  );
+
+  void addPeptideScores(
+    PeptideMatch* peptide_match
+  );
+
+  void addSpectrumScores(
+    SpectrumMatch* spectrum_match,
+    pwiz::identdata::SpectrumIdentificationItemPtr siip
+  );
+
+
+ public:
+
+  /**
+   * Basic constructor
+   */
+  MzIdentMLWriter();
+
+  /**
+   * Basic destructor
+   */
+  virtual ~MzIdentMLWriter();
+
+  /**
+   * Open a file of the given name.  Replace an existing file if
+   * overwrite is true, else exit if an existing file is found.
+   */
+  void openFile(
+    const std::string& filename,
+    bool overwrite
+    );
+
+  void openFile(
+    CruxApplication* application,
+    std::string filename,
+    MATCH_FILE_TYPE type
+  );
+
+  void openFile(
+    const char* filename, 
+    bool overwrite
+  );
+
+  /**
+   * Writes out the mzid and frees the memory
+   */
+  void closeFile();
+
+  /**
+  * Adds matches in the match collection to mzid objects [does same thing as "addMatches"]
+  */
+  void write(
+    MatchCollection* collection,
+    std::string database
+  );
+
+  /**
+   * Adds the matches in the match collection to
+   * the mzid objects
+   */
+  void addMatches(
+    MatchCollection* collection ///< matches to add
+  );
+
+  /**
+   * Adds the match to the mzIdentML object
+   */
+  void addMatch(
+    MatchCollection* collection, ///< parent collection
+    Crux::Match* match ///< match to add
+  );
+
+  /**
+   * Adds the protein matches to the mzid object
+   */
+  void addProteinMatches(
+    ProteinMatchCollection* protein_match_collection
+    );
+
+  /**
+   * Adds a protein match to the mzIdentML object
+   */
+  void addProteinMatch(
+    ProteinMatch* protein_match
+  );
+
+
+};
+
+
+#endif // MZIDENTMLWRITER_H
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/io/OutputFiles.cpp b/src/io/OutputFiles.cpp
new file mode 100644
index 0000000..ddd4143
--- /dev/null
+++ b/src/io/OutputFiles.cpp
@@ -0,0 +1,767 @@
+/**
+ * \file OutputFiles.cpp
+ * AUTHOR: Barbara Frewen
+ * CREATE DATE: Aug 24, 2009
+ * PROJECT: crux
+ * \brief A class description for handling all the various
+ * output files, excluding parameter and log files.
+ *
+ * The filenames, locations and overwrite status are taken from
+ * parameter.c.
+ */
+
+#include "OutputFiles.h"
+#include "util/FileUtils.h"
+#include "util/Params.h"
+
+using namespace std;
+using namespace Crux;
+
+/**
+ * Default constructor for OutputFiles.  Opens all of the needed
+ * files, naming them based on the values of the parameters output-dir
+ * and fileroot and on the name given (search, percolator, etc.).
+ * Requires that the output directory already exist. 
+ */
+OutputFiles::OutputFiles(CruxApplication* program_name)
+: matches_per_spec_(Params::GetInt("top-match")),
+  application_(program_name) {
+
+  delim_file_array_ = NULL;
+  xml_file_array_ = NULL;
+  sqt_file_array_ = NULL;
+  mzid_file_ = NULL;
+  feature_file_ = NULL;
+  pin_file_ = NULL;
+
+  // parameters for all three file types
+  bool overwrite = Params::GetBool("overwrite");
+  const string output_directory = Params::GetString("output-dir");
+  const string fileroot = Params::GetString("fileroot");
+
+  int num_decoy_files = Params::GetInt("num-decoy-files");
+  num_files_ = num_decoy_files + 1; // plus target file
+
+  // TODO (BF oct-21-09): consider moving this logic to parameter.c
+  COMMAND_T command = application_->getCommand();
+  if (Params::GetBool("concat") || command != TIDE_SEARCH_COMMAND) {
+    num_files_ = 1;
+  }
+  
+  if (command == XLINK_SEARCH_COMMAND) {
+    if (Params::GetBool("concat")) {
+      num_decoy_files = 0;
+      num_files_ = 1;
+    } else {
+      num_decoy_files = 1;
+      num_files_ = 2;
+    }
+  }
+
+  makeTargetDecoyList();
+
+  carp(CARP_DEBUG, 
+       "OutputFiles is opening %d files (%d decoys) in '%s' with root '%s'."
+       " Overwrite: %d.", 
+       num_files_, num_decoy_files, output_directory.c_str(), fileroot.c_str(), overwrite);
+
+  // all operations create tab files
+  if( Params::GetBool("txt-output") ) {
+    createFiles(&delim_file_array_, 
+                output_directory, 
+                fileroot, 
+                application_, 
+                "txt");
+  }
+
+  // almost all operations create xml files
+  if( command != SPECTRAL_COUNTS_COMMAND &&
+      Params::GetBool("pepxml-output") ) {
+    createFiles(&xml_file_array_,
+                output_directory,
+                fileroot,
+                application_,
+                "pep.xml",
+                overwrite);
+  }
+  
+  // sequest and search creates sqt files
+  if( command == TIDE_SEARCH_COMMAND && Params::GetBool("sqt-output") ) {
+    createFiles(&sqt_file_array_, 
+                 output_directory, 
+                 fileroot, 
+                 application_, 
+                 "sqt", 
+                 overwrite);
+  }
+
+  //pin
+  if ( command == TIDE_SEARCH_COMMAND && Params::GetBool("pin-output") ) {
+    string filename = makeFileName(
+    fileroot, 
+    application_,
+    NULL,// not trget and decoy file 
+    "pin"
+    );
+    createFile(
+      &pin_file_,
+      output_directory, 
+      filename.c_str(), 
+      overwrite
+    );
+  }
+
+  if( Params::GetBool("mzid-output") ) {
+    createFile(&mzid_file_,
+               output_directory,
+               fileroot,
+               application_,
+               "mzid");
+  }
+
+  // only percolator and q-ranker create feature files
+  if( (command == PERCOLATOR_COMMAND 
+       || command == QRANKER_COMMAND)
+      && Params::GetBool("feature-file") ) {
+    string filename = makeFileName(fileroot, application_, 
+                                   NULL, // not target or decoy
+                                   "features.txt");
+    createFile(&feature_file_, 
+               output_directory, 
+               filename.c_str(), 
+               overwrite);
+  }
+  exact_pval_search_ = false;
+}
+
+OutputFiles::~OutputFiles() {
+  for(int file_idx = 0; file_idx < num_files_; file_idx ++) {
+    if( delim_file_array_ ) { delete delim_file_array_[file_idx]; }
+    if( sqt_file_array_ ) { fclose(sqt_file_array_[file_idx]); }
+    if( xml_file_array_ ) { xml_file_array_[file_idx]->closeFile(); }
+    if(pin_file_) {pin_file_->closeFile();}
+  }
+
+  if (mzid_file_) { 
+    mzid_file_->closeFile();
+    delete mzid_file_;
+  }
+
+  if( feature_file_ ) { fclose(feature_file_); }
+
+  delete [] delim_file_array_;
+  delete [] sqt_file_array_;
+  delete [] xml_file_array_;
+  delete [] target_decoy_list_;
+  delete  pin_file_;
+}
+
+/**
+ * Creates an array of num_files_ strings with the target or decoy
+ * tag that the file in that position should have.  The first string
+ * will always be "target", the second will be "decoy" (iff num_files_
+ * = 2) or "decoy-1", the third "decoy-2" and so on.
+ */
+void OutputFiles::makeTargetDecoyList() {
+  target_decoy_list_ = new string[num_files_];
+  target_decoy_list_[0] = "target";
+  if( num_files_ == 2 ) {
+    target_decoy_list_[1] = "decoy";
+  } else {
+    for(int file_idx = 1; file_idx < num_files_; file_idx++) {
+      ostringstream name_builder;
+      name_builder << "decoy-" << file_idx;
+      target_decoy_list_[file_idx] = name_builder.str();
+    }
+  }
+}
+
+/**
+ * \returns A string with all of the parts of the filename
+ * concatenated together as
+ * directory/fileroot.command-name.[target|decoy]extension.  Assumes
+ * that extension includes a ".".  Either fileroot and/or target_decoy
+ * may be NULL. Directory argument is optional.
+ */
+string OutputFiles::makeFileName(const string& fileroot,
+                                 CruxApplication* application,
+                                 const char* target_decoy,
+                                 const char* extension,
+                                 const string& directory ) {
+
+  // get command name
+  string basename_str = application->getFileStem();
+  const char* basename = basename_str.c_str();
+
+  ostringstream name_builder;
+  if (!directory.empty()) {
+    name_builder << directory;
+    if (directory[directory.length() - 1] != '/') {
+      name_builder << "/";
+    }
+  }
+  if (!fileroot.empty()) {
+    name_builder << fileroot << ".";
+  }
+  name_builder << basename << "." ;
+  if( target_decoy != NULL && target_decoy[0] != '\0' ) {
+    name_builder << target_decoy << ".";
+  }
+  name_builder << extension;
+  string filename = name_builder.str();
+
+  return filename;
+}
+
+/**
+ * A private function for generating target and decoy files named
+ * according to the given arguments.
+ *
+ * New files are returned via the file_array_ptr argument.  When
+ * num_files > 1, exactly one target file is created and the remaining
+ * are decoys.  Files are named 
+ * "output-dir/fileroot.command_name.target|decoy[-n].extension".
+ * Requires that the output-dir already exist and have write
+ * permissions. 
+ * \returns true if num_files new files are created, else false.
+ */
+bool OutputFiles::createFiles(FILE*** file_array_ptr,
+                              const string& output_dir,
+                              const string& fileroot,
+                              CruxApplication* application,
+                              const char* extension,
+                              bool overwrite) {
+  if( num_files_ == 0 ) {
+    return false;
+  }
+  
+  // allocate array
+  *file_array_ptr = new FILE*[num_files_];
+
+  // create each file
+  for(int file_idx = 0; file_idx < num_files_; file_idx++ ) {
+    string filename = makeFileName(fileroot, application,
+                                   Params::GetBool("concat") ? NULL : target_decoy_list_[file_idx].c_str(),
+                                   extension);
+    createFile(&(*file_array_ptr)[file_idx], 
+               output_dir, 
+               filename.c_str(), 
+               overwrite);
+
+  }// next file
+  
+  return true;
+}
+
+/**
+ * A private function for generating target and decoy pepxml files named
+ * according to the given arguments.
+ *
+ * New files are returned via the file_array_ptr argument.  When
+ * num_files > 1, exactly one target file is created and the remaining
+ * are decoys.  Files are named 
+ * "output-dir/fileroot.command_name.target|decoy[-n].extension".
+ * Requires that the output-dir already exist and have write
+ * permissions. 
+ * \returns true if num_files new files are created, else false.
+ */
+bool OutputFiles::createFiles(PepXMLWriter*** xml_writer_array_ptr,
+                              const string& output_dir,
+                              const string& fileroot,
+                              CruxApplication* application,
+                              const char* extension,
+                              bool overwrite) {
+  if( num_files_ == 0 ) {
+    return false;
+  }
+  
+  // allocate array
+  *xml_writer_array_ptr = new PepXMLWriter*[num_files_];
+
+  // create each file
+  for(int file_idx = 0; file_idx < num_files_; file_idx++ ) {
+    string filename = makeFileName(fileroot, application,
+                                   Params::GetBool("concat") ? NULL : target_decoy_list_[file_idx].c_str(),
+                                   extension, output_dir);
+    (*xml_writer_array_ptr)[file_idx] = new PepXMLWriter();
+    (*xml_writer_array_ptr)[file_idx]->openFile(filename.c_str(), overwrite);
+
+  }// next file
+  
+  return true;
+}
+
+
+/**
+ * A private function for generating target and decoy MatchFileWriters named
+ * according to the given arguments.
+ *
+ * MatchFileWriters are returned via the file_array_ptr argument.  When
+ * num_files > 1, exactly one target file is created and the remaining
+ * are decoys.  Files are named 
+ * "output-dir/fileroot.command_name.target|decoy[-n].extension".
+ * Requires that the output-dir already exist and have write
+ * permissions. 
+ * \returns true if num_files new MatchFileWriters are created, else false.
+ */
+bool OutputFiles::createFiles(MatchFileWriter*** file_array_ptr,
+                              const string& output_dir,
+                              const string& fileroot,
+                              CruxApplication* application,
+                              const char* extension ) {
+  if( num_files_ == 0 ) {
+    return false;
+  }
+  
+  // allocate array
+  *file_array_ptr = new MatchFileWriter*[num_files_];
+
+  // create each file writer
+  for(int file_idx = 0; file_idx < num_files_; file_idx++ ) {
+    string filename = makeFileName(fileroot, application,
+                                   Params::GetBool("concat") ? NULL : target_decoy_list_[file_idx].c_str(),
+                                   extension, output_dir);
+    (*file_array_ptr)[file_idx] = new MatchFileWriter(filename.c_str());
+  }
+  
+  return true;
+}
+
+
+/**
+ * \brief A private function for opening a file according to the given
+ * arguments.
+ *
+ * New file is returned via the file_ptr argument.  File is named
+ * output-dir/fileroot.comand_name[target_decoy].extension.  Requires that the
+ * output-dir already exist and have write permissions.
+ * \returns true if the file is created, else false.
+ */
+bool OutputFiles::createFile(FILE** file_ptr,
+                             const string& output_dir,
+                             const string& filename,
+                             bool overwrite) {
+  *file_ptr = create_file_in_path(filename, output_dir, overwrite);
+  return *file_ptr != NULL;
+}
+
+bool OutputFiles::createFile(MzIdentMLWriter** file_ptr,
+                             const string& output_dir,
+                             const string& fileroot,
+                             CruxApplication* application,
+                             const char* extension) {
+
+  string filename = makeFileName(fileroot, application, "", extension, output_dir);
+  *file_ptr = new MzIdentMLWriter();
+  (*file_ptr)->openFile(filename, true);
+  return true;
+
+}
+
+/**
+ * \brief A private function for opening a file according to the given
+ * arguments.
+ *
+ * New file is returned via the file_ptr argument.  File is named
+ * output-dir/fileroot.pin.  Requires that the
+ * output-dir already exist and have write permissions.
+ * \returns true if the file is created, else false.
+ */
+bool OutputFiles::createFile(
+  PinWriter** pin_file_ptr,
+  const string& output_dir,
+  const string& filename,
+  bool overwrite
+) {
+  *pin_file_ptr = new PinWriter();
+  (*pin_file_ptr)->openFile(filename, output_dir, overwrite);  
+  return pin_file_ptr != NULL;
+}
+
+
+/**
+ * \brief Write header lines to the .txt, .sqt files, .pep.xml, and .pin
+ * files.  Optional num_proteins argument for .sqt files.  Use this
+ * for search commands, not post-search.
+ */
+void OutputFiles::writeHeaders(int num_proteins, bool isMixedTargetDecoy) {
+
+  const char* tag = "target";
+
+  // write headers one file at a time for tab and sqt
+  for(int file_idx = 0; file_idx < num_files_; file_idx++) {
+    if( delim_file_array_ ) {
+      bool has_decoy = (bool)file_idx; // only first file (idx 0) is target
+      if( isMixedTargetDecoy ) { // unless it is both
+        has_decoy = true;
+      }
+        delim_file_array_[file_idx]->addColumnNames(application_, has_decoy);
+        delim_file_array_[file_idx]->writeHeader();
+    }
+
+    if( sqt_file_array_ ) {
+      string database = Params::GetString("protein-database");
+      if (!FileUtils::Exists(database.c_str())) {
+        database = Params::GetString("tide database");
+      }
+      MatchCollection::printSqtHeader(sqt_file_array_[file_idx],
+                       tag, database, num_proteins, exact_pval_search_); 
+    }
+    
+    if ( xml_file_array_) {
+      xml_file_array_[file_idx]->writeHeader();
+    }
+
+    tag = "decoy";
+  }
+  //write header at a time for pin file
+  if(pin_file_) {
+    pin_file_->printHeader();
+  }
+}
+
+/**
+ * \brief Write header lines to the .txt and .pep.xml
+ * files.  Use this for post-search commands, not search.
+ */
+void OutputFiles::writeHeaders(const vector<bool>& add_this_col) {
+
+
+  // write headers one file at a time for tab and sqt
+  for(int file_idx = 0; file_idx < num_files_; file_idx++) {
+    if( delim_file_array_ ) {
+        delim_file_array_[file_idx]->addColumnNames(application_, 
+                                                    (bool)file_idx, 
+                                                    add_this_col);
+        delim_file_array_[file_idx]->writeHeader();
+    }
+
+    if ( xml_file_array_) {
+      xml_file_array_[file_idx]->writeHeader();
+    }
+  }
+}
+
+/**
+ * \brief Write header lines to the optional feature file.
+ */
+void OutputFiles::writeFeatureHeader(char** feature_names,
+                                     int num_names) {
+  // write feature file header
+  if( feature_names && feature_file_ && num_names ) {
+    fprintf(feature_file_, "scan\tlabel");
+    for(int name_idx = 0; name_idx < num_names; name_idx++) {
+      fprintf(feature_file_, "\t%s", feature_names[name_idx]);
+    }
+    fprintf(feature_file_, "\n");
+  }
+}
+
+/**
+ * \brief Write footer lines to .pep.xml files
+ */
+void OutputFiles::writeFooters() {
+  if (xml_file_array_) {
+    for (int file_idx = 0; file_idx < num_files_; file_idx++) {
+      xml_file_array_[file_idx]->writeFooter();
+    }
+  }
+}
+
+/**
+ * \brief Write the given matches to appropriate output files.  Limit
+ * the number of matches per spectrum based on top-match parameter
+ * using the ranks from rank_type.  
+ */
+void OutputFiles::writeMatches(
+  MatchCollection*  target_matches, ///< from real peptides
+  vector<MatchCollection*>& decoy_matches_array,  
+                                ///< array of collections from shuffled peptides
+  SCORER_TYPE_T rank_type,      ///< use ranks for this type
+  Spectrum* spectrum            ///< given when all matches are to one spec
+  ) {
+
+  if (!target_matches) {
+    return;  // warn?
+  }
+
+  // confirm that there are the expected number of decoy collections
+  if ((int)decoy_matches_array.size() != num_files_ - 1) {
+    carp(CARP_FATAL, "WriteMatches was given %d decoy collections but was expecting %d.",
+         (int)decoy_matches_array.size(), num_files_ - 1);
+  }
+
+  // print to each file type
+  printMatchesTab(target_matches, decoy_matches_array, rank_type, spectrum);
+  printMatchesSqt(target_matches, decoy_matches_array, spectrum);
+  printMatchesXml(target_matches, decoy_matches_array, spectrum, rank_type);
+  printMatchesPin(target_matches, decoy_matches_array);
+  printMatchesMzid(target_matches, decoy_matches_array, rank_type);
+}
+
+// already confirmed that num_files_ = num decoy collections + 1
+void OutputFiles::printMatchesTab(
+  MatchCollection*  target_matches, ///< from real peptides
+  vector<MatchCollection*>& decoy_matches_array,  
+  SCORER_TYPE_T rank_type,
+  Spectrum* spectrum
+) {
+
+  carp(CARP_DETAILED_DEBUG, "Writing tab delimited results.");
+
+  if (!delim_file_array_) {
+    return;
+  }
+
+  // if a spectrum is given, use one print function
+  if( spectrum ) {
+    MatchCollection* cur_matches = target_matches;
+
+    for(int file_idx = 0; file_idx < num_files_; file_idx++) {
+      cur_matches->calculateDeltaCn();
+      cur_matches->printTabDelimited(delim_file_array_[file_idx],
+                                     matches_per_spec_, spectrum, rank_type);
+      carp(CARP_DETAILED_DEBUG, "done writing file index %d", file_idx);
+      if( decoy_matches_array.size() > (size_t)file_idx ) {
+        cur_matches = decoy_matches_array[file_idx];
+      }// else if it is NULL, num_files_ == 1 and loop will exit here
+    }
+
+  } else { // use the multi-spectra print function which assumes
+           // targets and decoys are merged
+    target_matches->printMultiSpectra(delim_file_array_[0],
+                                (num_files_ > 1) ? delim_file_array_[1] : NULL);
+  }
+
+}
+
+void OutputFiles::printMatchesPin(
+  MatchCollection* target_matches,
+  vector<MatchCollection*>& decoy_matches_array
+  ) {
+  if (pin_file_) {
+    pin_file_->write(target_matches, decoy_matches_array, matches_per_spec_);
+  }
+}
+
+
+void OutputFiles::printMatchesSqt(
+  MatchCollection*  target_matches, ///< from real peptides
+  vector<MatchCollection*>& decoy_matches_array,  
+                                ///< array of collections from shuffled peptides
+  Spectrum* spectrum
+) {
+
+  if( sqt_file_array_ == NULL ) {
+    return;
+  }
+
+  MatchCollection* cur_matches = target_matches;
+
+  for(int file_idx = 0; file_idx < num_files_; file_idx++) {
+
+    cur_matches->printSqt(sqt_file_array_[file_idx],
+                               matches_per_spec_,
+                               spectrum);
+
+    if( decoy_matches_array.size() > (size_t)file_idx ) {
+      cur_matches = decoy_matches_array[file_idx];
+    } // else if NULL, num_files_==1 and this is last loop
+  }
+
+}
+
+
+void OutputFiles::printMatchesXml(
+  MatchCollection*  target_matches, ///< from real peptides
+  vector<MatchCollection*>& decoy_matches_array,  
+                                ///< array of collections from shuffled peptides
+  Spectrum* spectrum,
+  SCORER_TYPE_T rank_type
+  
+) {
+  static int index = 1;
+  if (!xml_file_array_) {
+    return;
+  }
+
+  MatchCollection* cur_matches = target_matches;
+
+  for (int file_idx = 0; file_idx < num_files_; file_idx++) {
+    cur_matches->printXml(xml_file_array_[file_idx], matches_per_spec_, spectrum, rank_type);
+    if( decoy_matches_array.size() > (size_t)file_idx ) {
+      cur_matches = decoy_matches_array[file_idx];
+    } // else if NULL, num_files_==1 and this is last loop
+  }
+  index++;
+}
+
+void OutputFiles::printMatchesMzid(
+  MatchCollection* target_matches,
+  vector<MatchCollection*>& decoy_matches_array,
+  SCORER_TYPE_T rank_type
+  ) {
+  if (!mzid_file_ || !target_matches) {
+    return;
+  }
+
+  printMatchesMzid(target_matches, rank_type);
+
+  for (size_t idx = 0; idx < decoy_matches_array.size();idx++) {
+    printMatchesMzid(decoy_matches_array[idx], rank_type);
+  }
+}
+
+void OutputFiles::printMatchesMzid(
+  MatchCollection* collection,
+  SCORER_TYPE_T rank_type
+  ) {
+  MatchIterator match_iter(collection, rank_type);
+
+  while(match_iter.hasNext()) {
+    Match* current_match = match_iter.next();
+    if (current_match->getRank(rank_type) <= matches_per_spec_) {
+      mzid_file_->addMatch(collection, current_match);
+    } else {
+      break;
+    }
+  }
+}
+
+void OutputFiles::writeMatches(
+  MatchCollection*  matches ///< from multiple spectra
+) {
+  matches->printMultiSpectra(delim_file_array_[0], NULL /* no decoy file */);
+  if (xml_file_array_) {
+    matches->printMultiSpectraXml(xml_file_array_[0]);
+  }
+}
+
+/**
+ * \brief Print features from one match to file.
+ */
+void OutputFiles::writeMatchFeatures(
+  Match* match, ///< match to provide scan num, decoy
+  double* features,///< features for this match
+  int num_features) {///< size of features array
+  
+  if( feature_file_ == NULL ) { return; }
+
+  // write scan number
+  fprintf(feature_file_, "%i\t",
+          match->getSpectrum()->getFirstScan());
+
+  // decoy or target peptide
+  if (match->getNullPeptide() == false) {
+    fprintf(feature_file_, "1\t");
+  } else { 
+    fprintf(feature_file_, "-1\t");
+  }
+  
+  // print each feature, end in new-line
+  for(int feature_idx = 0; feature_idx < num_features; feature_idx++) {
+    if (feature_idx < num_features - 1) {
+      fprintf(feature_file_, "%.4f\t", features[feature_idx]);
+    } else {
+      fprintf(feature_file_, "%.4f\n", features[feature_idx]);
+    }
+  }
+
+}
+
+/**
+ * Print the given peptides and their scores in sorted order by score.
+ */
+void OutputFiles::writeRankedPeptides(const vector<pair<FLOAT_T, Peptide*> >& scoreToPeptide) {
+  MatchFileWriter* file = delim_file_array_[0];
+  MATCH_COLUMNS_T score_col = SIN_SCORE_COL;
+
+  MEASURE_TYPE_T measure_type = string_to_measure_type(Params::GetString("measure"));
+  switch (measure_type) {
+    case MEASURE_RAW:
+      score_col = RAW_SCORE_COL;
+      break;
+    case MEASURE_SIN:
+      score_col = SIN_SCORE_COL;
+      break;
+    case MEASURE_NSAF:
+      score_col = NSAF_SCORE_COL;
+      break;
+    case MEASURE_DNSAF:
+      score_col = DNSAF_SCORE_COL;
+      break;
+    case MEASURE_EMPAI:
+      score_col = EMPAI_SCORE_COL;
+       break;
+    default:
+      carp(CARP_FATAL, "Invalid measure type!");
+  }
+
+  // print each pair
+  for(vector<pair<FLOAT_T, Peptide*> >::const_iterator it = scoreToPeptide.begin();
+      it != scoreToPeptide.end(); ++it) {
+    Peptide* peptide = it->second;
+    FLOAT_T score = it->first;
+    const char* seq = peptide->getSequence();
+
+    file->setColumnCurrentRow(SEQUENCE_COL, seq);
+    file->setColumnCurrentRow(score_col, score);
+    file->writeRow();
+  }
+
+}
+
+void OutputFiles::pinSetEnabledStatus(const string& name, bool enabled) {
+  if (pin_file_) {
+    pin_file_->setEnabledStatus(name, enabled);
+  }
+}
+
+/**
+ * Print all of the proteins and their associated scores in sorted
+ * order by score. If there is parsimony information, also print the
+ * parsimony rank.
+ */
+void OutputFiles::writeRankedProteins(const vector<boost::tuple<FLOAT_T, Protein*, int> >& proteins,
+                                      bool isParsimony) {
+  MatchFileWriter* file = delim_file_array_[0];
+  MATCH_COLUMNS_T score_col = SIN_SCORE_COL;
+
+  switch (string_to_measure_type(Params::GetString("measure"))) {
+    case MEASURE_RAW:
+      score_col = RAW_SCORE_COL;
+      break;
+    case MEASURE_SIN:
+      score_col = SIN_SCORE_COL;
+      break;
+    case MEASURE_NSAF:
+      score_col = NSAF_SCORE_COL;
+      break;
+    case MEASURE_DNSAF:
+      score_col = DNSAF_SCORE_COL;
+      break;
+    case MEASURE_EMPAI:
+      score_col = EMPAI_SCORE_COL;
+       break;
+    default:
+      carp(CARP_FATAL, "Invalid measure type!");
+  }
+
+  // print each protein
+  for(vector<boost::tuple<FLOAT_T, Protein*, int> >::const_iterator it = proteins.begin();
+      it != proteins.end(); ++it) {
+    file->setColumnCurrentRow(score_col, it->get<0>());
+    file->setColumnCurrentRow(PROTEIN_ID_COL, it->get<1>()->getIdPointer());
+    if (isParsimony) {
+      file->setColumnCurrentRow(PARSIMONY_RANK_COL, it->get<2>());
+    }
+    file->writeRow();
+  }
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/OutputFiles.h b/src/io/OutputFiles.h
new file mode 100644
index 0000000..7b032c4
--- /dev/null
+++ b/src/io/OutputFiles.h
@@ -0,0 +1,158 @@
+/**
+ * \file OutputFiles.h
+ */
+/*
+ * FILE: OutputFiles.h
+ * AUTHOR: Barbara Frewen
+ * CREATE DATE: Aug 24, 2009
+ * PROJECT: crux
+ * DESCRIPTION: A class description for handling all the various
+ * output files, excluding parameter and log files.  The filenames,
+ * locations and overwrite status would be taken from parameter.c.
+ */
+#ifndef OUTPUT_FILES_H
+#define OUTPUT_FILES_H
+
+#include <stdio.h>
+#include <string>
+#include <iostream>
+#include <sstream>
+#include "carp.h"
+#include "parameter.h"
+#include "model/objects.h"
+#include "model/MatchCollection.h"
+#include "MatchFileWriter.h"
+#include "PepXMLWriter.h"
+#include "PinWriter.h"
+#include "MzIdentMLWriter.h"
+#include "boost/tuple/tuple.hpp"
+
+class OutputFiles{
+
+ public:
+  explicit OutputFiles(CruxApplication* application);///< command printing files
+
+  ~OutputFiles();
+  void writeHeaders(int num_proteins = 0, bool isMixedTargetDecoy = false);
+  void writeHeaders(const std::vector<bool>& add_this_col);
+  void writeFeatureHeader(char** feature_names = NULL,
+                          int num_names = 0);
+  void writeFooters();
+  void writeMatches(MatchCollection* matches,
+                    std::vector<MatchCollection*>& decoy_matches_array,
+                    SCORER_TYPE_T rank_type = XCORR,
+                    Crux::Spectrum* spectrum = NULL);
+  void writeMatches(MatchCollection* matches);
+  void writeMatchFeatures(Crux::Match* match, 
+                          double* features,
+                          int num_features);
+  void writeRankedProteins(const std::vector<boost::tuple<FLOAT_T, Crux::Protein*, int> >& proteins,
+                           bool isParsimony);
+  void writeRankedPeptides(const vector<pair<FLOAT_T, Crux::Peptide*> >& scoreToPeptide);
+  void pinSetEnabledStatus(const std::string& name, bool enabled);
+
+  bool exact_pval_search_;
+
+ private:
+  bool createFiles(FILE*** file_array_ptr,
+                   const std::string& output_dir,
+                   const std::string& fileroot,
+                   CruxApplication* application,
+                   const char* extension,
+                   bool overwrite);
+  bool createFiles(PepXMLWriter*** file_array_ptr,
+                   const std::string& output_dir,
+                   const std::string& fileroot,
+                   CruxApplication* application,
+                   const char* extension,
+                   bool overwrite);
+  bool createFiles(MatchFileWriter*** file_array_ptr,
+                   const std::string& output_dir,
+                   const std::string& fileroot,
+                   CruxApplication* application,
+                   const char* extension);
+
+  bool createFile(MzIdentMLWriter** file_ptr,
+                  const std::string& output_dir,
+                  const std::string& fileroot,
+                  CruxApplication* application,
+                  const char* extension);
+
+  bool createFile(FILE** file_ptr,
+                  const std::string& output_dir,
+                  const std::string& filename,
+                  bool overwrite);
+
+  bool createFile(
+    PinWriter** pin_file_ptr,
+    const std::string& output_dir, 
+    const std::string& filename, 
+    bool overwrite
+  );
+  string makeFileName(const std::string& fileroot,
+                      CruxApplication* application,
+                      const char* target_decoy,
+                      const char* extension,
+                      const std::string& directory = "");
+  void makeTargetDecoyList();
+
+  void printMatchesXml(
+                       MatchCollection* target_matches,
+                       vector<MatchCollection*>& decoy_matches_array,
+                       Crux::Spectrum* spectrum,
+                       SCORER_TYPE_T rank_type);
+ 
+
+  void printMatchesTab(
+    MatchCollection*  target_matches, ///< from real peptides
+    std::vector<MatchCollection*>& decoy_matches_array,  
+                           ///< array of collections from shuffled peptides
+    SCORER_TYPE_T rank_type,
+    Crux::Spectrum* spectrum = NULL);
+
+  void printMatchesSqt(
+    MatchCollection*  target_matches, ///< from real peptides
+    std::vector<MatchCollection*>& decoy_matches_array,  
+                           ///< array of collections from shuffled peptides
+    Crux::Spectrum* spectrum = NULL);
+
+  void printMatchesPin(
+    MatchCollection* target_matches, ///< form real peptides 
+    std::vector<MatchCollection*>& decoy_maches_array
+                          ///< array of collection from shuffled peptides  
+  );
+
+  void printMatchesMzid(
+    MatchCollection* target_matches,
+    std::vector<MatchCollection*>& decoy_matches_array,
+    SCORER_TYPE_T rank_type
+  );
+
+  void printMatchesMzid(
+    MatchCollection* collection,
+    SCORER_TYPE_T rank_type
+  );
+
+  int num_files_;         ///< num files in each array
+  std::string* target_decoy_list_; ///< target or decoy[-n] string of each file
+  MatchFileWriter** delim_file_array_; ///< array of .txt files
+  FILE** sqt_file_array_; ///< array of .sqt files
+  MzIdentMLWriter* mzid_file_;
+ 
+  PepXMLWriter** xml_file_array_; ///< array of .pep.xml files
+  FILE*  feature_file_;   ///< file for percolator/q-ranker to write features to 
+  int matches_per_spec_;  ///< print this many matches per spec
+  CruxApplication* application_;///< crux application writing these files
+  PinWriter* pin_file_;///< file for inpupt of percolator
+ 
+};
+
+#endif //OUTPUT_FILES_H
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/io/PMCDelimitedFileWriter.cpp b/src/io/PMCDelimitedFileWriter.cpp
new file mode 100644
index 0000000..1f3cbc4
--- /dev/null
+++ b/src/io/PMCDelimitedFileWriter.cpp
@@ -0,0 +1,709 @@
+#include "PMCDelimitedFileWriter.h"
+#include "util/FileUtils.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+
+using namespace Crux;
+using namespace boost;
+
+/** 
+ * Returns an empty PMCDelimitedFileWriter object
+ */
+PMCDelimitedFileWriter::PMCDelimitedFileWriter() : PSMWriter() {
+  write_html_ = false;
+  application_ = NULL;
+}
+
+/**
+ * Destructor
+ */
+PMCDelimitedFileWriter::~PMCDelimitedFileWriter() {
+  closeFile();
+}
+
+/**
+ * Opens a file, writes it, and closes the file
+ */
+void PMCDelimitedFileWriter::writeFile(
+  CruxApplication* application, ///< application writing the file
+  string filename, ///< name of the file to open
+  MATCH_FILE_TYPE type, ///< type of file to be written
+  ProteinMatchCollection* collection ///< collection to be written
+) {
+  openFile(application, filename, type);
+  write(collection);
+  closeFile();
+}
+
+/**
+ * Closes any open file, then opens a file for the specified type of writing
+ */
+void PMCDelimitedFileWriter::openFile(
+  CruxApplication* application, ///< application writing the file
+  string filename, ///< name of the file to open
+  MATCH_FILE_TYPE type ///< type of file to be written
+  ) {
+  closeFile();
+
+  file_ptr_ = FileUtils::GetWriteStream(filename, Params::GetBool("overwrite"));
+  application_ = application;
+  if (!file_ptr_->is_open()) {
+    carp(CARP_FATAL, "Error creating file '%s'.", filename.c_str());
+  }
+
+  // reset columns
+  num_columns_ = 0;
+  for (int i = 0; i < NUMBER_MATCH_COLUMNS; ++i) {
+    match_to_print_[i] = false;
+    match_precision_[i] = false;
+    match_fixed_float_[i] = true;
+  }
+
+  switch (type) {
+  case PROTEINS:
+    setUpProteinsColumns(application);
+    setPrecision();
+    write_function_ = &PMCDelimitedFileWriter::writeProteins;
+    break;
+  case PEPTIDES:
+    setUpPeptidesColumns(application);
+    setPrecision();
+    write_function_ = &PMCDelimitedFileWriter::writePeptides;
+    break;
+  case PSMS:
+    setUpPSMsColumns(application);
+    setPrecision();
+    write_function_ = &PMCDelimitedFileWriter::writePSMs;
+    break;
+  default:
+    carp(CARP_FATAL, "Invalid match file type specified for "
+                     "PMCDelimitedFileWriter.");
+    break;
+  }
+}
+
+/**
+ * Closes any open file, if any
+ */
+void PMCDelimitedFileWriter::closeFile() {
+  if (file_ptr_) {
+    file_ptr_->close();
+    delete file_ptr_;
+    file_ptr_ = NULL;
+  }
+}
+
+/**
+ * Write all three file types using the file stem as a base filename
+ */
+void PMCDelimitedFileWriter::writeAll(
+  CruxApplication* application, ///< application writing the files
+  ProteinMatchCollection* collection, ///< collection to be written
+  string stem ///< filestem to be prepended to the filenames
+  ) {
+
+  // write proteins
+  openFile(application, stem + ".proteins.txt", PROTEINS);
+  write(collection);
+  closeFile();
+
+  // write peptides
+  openFile(application, stem + ".peptides.txt", PEPTIDES);
+  write(collection);
+  closeFile();
+
+  // write psms
+  openFile(application, stem + ".psms.txt", PSMS);
+  write(collection);
+  closeFile();
+
+}
+
+void PMCDelimitedFileWriter::write(
+  MatchCollection* collection,
+  string database
+  ) {
+  ProteinMatchCollection protein_collection(collection);
+  write(&protein_collection);
+}
+
+/**
+ * Writes the data in a ProteinMatchCollection to the currently open file
+ */
+void PMCDelimitedFileWriter::write(
+  ProteinMatchCollection* collection ///< collection to be written
+  ) {
+  if (file_ptr_ == NULL) {
+    carp(CARP_FATAL, "No file open to write to.");
+  } else if (collection == NULL) {
+    carp(CARP_FATAL, "ProteinMatchCollection was null");
+  }
+
+  // psm-convert: trying to detect whether additional columns are needed....
+  // Is there a better way to do this or move to setUpPSMSColumns? Seems messy...
+  SpectrumMatchIterator first_spec = collection->spectrumMatchBegin();
+  SpectrumMatch* match = *first_spec;
+  
+  if (!match->getFilePath().empty()) {
+    addColumnName(FILE_COL);
+  }
+  addScoreColumnIfExists(match, DELTA_CN, DELTA_CN_COL);
+  addScoreColumnIfExists(match, SP, SP_SCORE_COL);
+  addRankColumnIfExists(match, SP, SP_RANK_COL);
+  addScoreColumnIfExists(match, XCORR, XCORR_SCORE_COL);
+  addRankColumnIfExists(match, XCORR, XCORR_RANK_COL);
+  addScoreColumnIfExists(match, TIDE_SEARCH_EXACT_PVAL, EXACT_PVALUE_COL);
+  addScoreColumnIfExists(match, TIDE_SEARCH_REFACTORED_XCORR, REFACTORED_SCORE_COL);
+  addScoreColumnIfExists(match, BY_IONS_MATCHED, BY_IONS_MATCHED_COL);
+  addScoreColumnIfExists(match, BY_IONS_TOTAL, BY_IONS_TOTAL_COL);
+  if (collection->hasDistinctMatches()) {
+    addColumnName(DISTINCT_MATCHES_SPECTRUM_COL);
+  } else {
+    addColumnName(MATCHES_SPECTRUM_COL);
+  }
+
+  if (!write_html_) {
+    writeHeader();
+  } else {
+    writeHTMLHeader();
+  }
+  (this->*this->PMCDelimitedFileWriter::write_function_)(collection);
+}
+
+// adds score to header and columns if exists
+void PMCDelimitedFileWriter::addScoreColumnIfExists(
+  AbstractMatch* match, ///< match to get score from
+  SCORER_TYPE_T scoreType, ///< score type to get
+  MATCH_COLUMNS_T column ///< column to add the score to
+  ) {
+  if (match->hasScore(scoreType)) {
+    addColumnName(column);
+  }
+}
+
+// adds rank to header and columns if exists
+void PMCDelimitedFileWriter::addRankColumnIfExists(
+  AbstractMatch* match, ///< match to get rank from
+  SCORER_TYPE_T scoreType, ///< rank type to get
+  MATCH_COLUMNS_T column ///< column to add the rank to
+  ) {
+  if (match->hasRank(scoreType)) {
+    addColumnName(column);
+  }
+}
+
+/**
+ * Set up the columns for a protein match file
+ */
+void PMCDelimitedFileWriter::setUpProteinsColumns(
+  CruxApplication* application ///< application writing the file
+) {
+
+  COMMAND_T command = application->getCommand();
+
+  switch(command) {
+  default:
+    carp(CARP_FATAL, "Command (%s) not yet implemented for writing tab "
+                     "delimited files.", application->getName().c_str());
+    return;
+  case MISC_COMMAND:
+  case PROCESS_SPEC_COMMAND:
+  case GENERATE_PEPTIDES_COMMAND:
+  case GET_MS2_SPECTRUM_COMMAND:
+  case PREDICT_PEPTIDE_IONS_COMMAND:
+  case VERSION_COMMAND:
+  case NUMBER_COMMAND_TYPES:
+  case INVALID_COMMAND:
+    carp(CARP_FATAL, "Invalid command (%s) for writing tab delimited file.",
+                     application->getName().c_str());
+    return;
+  case PERCOLATOR_COMMAND:
+    addColumnName(PERCOLATOR_SCORE_COL);
+    addColumnName(PERCOLATOR_RANK_COL);
+    addColumnName(PERCOLATOR_QVALUE_COL);
+    break;
+  }
+
+  addColumnName(PROTEIN_ID_COL);
+  addColumnName(PEPTIDES_COL);
+}
+
+/**
+ * Write protein match file
+ */
+void PMCDelimitedFileWriter::writeProteins(
+  ProteinMatchCollection* collection ///< collection to be written
+  ) {
+
+  carp(CARP_DEBUG, "Writing proteins");
+
+  MASS_FORMAT_T mass_format_type =
+    get_mass_format_type_parameter("mod-mass-format");
+
+  for (ProteinMatchIterator iter = collection->proteinMatchBegin();
+       iter != collection->proteinMatchEnd();
+       ++iter) {
+    ProteinMatch* match = *iter;
+    Protein* protein = match->getProtein();
+
+    addScoreIfExists(match, PERCOLATOR_SCORE, PERCOLATOR_SCORE_COL);
+    addRankIfExists(match, PERCOLATOR_SCORE, PERCOLATOR_RANK_COL);
+    addScoreIfExists(match, PERCOLATOR_QVALUE, PERCOLATOR_QVALUE_COL);
+    setColumnCurrentRow(PROTEIN_ID_COL, protein->getIdPointer());
+
+    // build peptide list
+    vector<string> peptide_strings;
+    for (PeptideMatchIterator pep_iter = match->peptideMatchBegin();
+         pep_iter != match->peptideMatchEnd();
+         ++pep_iter) {
+      PeptideMatch* pep_match = *pep_iter;
+      Peptide* peptide = pep_match->getPeptide();
+
+      MODIFIED_AA_T* mod_seq = peptide->getModifiedAASequence();
+      char* seq_with_masses = modified_aa_string_to_string_with_masses(
+        mod_seq, peptide->getLength(), mass_format_type);
+      string sequence_str(seq_with_masses);
+      free(seq_with_masses);
+      free(mod_seq);
+
+      for (SpectrumMatchIterator spec_iter = pep_match->spectrumMatchBegin();
+           spec_iter != pep_match->spectrumMatchEnd();
+           ++spec_iter) {
+        SpectrumMatch* spec_match = *spec_iter;
+        Spectrum* spectrum = spec_match->getSpectrum();
+        SpectrumZState& zstate = spec_match->getZState();
+
+        stringstream ss;
+        ss << sequence_str << '-' << spectrum->getFirstScan() << '.'
+           << zstate.getCharge();
+
+        peptide_strings.push_back(ss.str());
+      }
+    }
+    setColumnCurrentRow(PEPTIDES_COL, StringUtils::Join(peptide_strings, ','));
+
+    writeRow();
+  }
+}
+
+/**
+ * Set up the columns for a peptide match file
+ */
+void PMCDelimitedFileWriter::setUpPeptidesColumns(
+  CruxApplication* application ///< application writing the file
+) {
+
+  COMMAND_T command = application->getCommand();
+
+  switch(command) {
+  default:
+    carp(CARP_FATAL, "Command (%s) not yet implemented for writing tab "
+                     "delimited files.", application->getName().c_str());
+    return;
+  case MISC_COMMAND:
+  case PROCESS_SPEC_COMMAND:
+  case GENERATE_PEPTIDES_COMMAND:
+  case GET_MS2_SPECTRUM_COMMAND:
+  case PREDICT_PEPTIDE_IONS_COMMAND:
+  case VERSION_COMMAND:
+  case NUMBER_COMMAND_TYPES:
+  case INVALID_COMMAND:
+    carp(CARP_FATAL, "Invalid command (%s) for writing tab delimited file.",
+                     application->getName().c_str());
+    return;
+  case PERCOLATOR_COMMAND:
+    addColumnName(PERCOLATOR_SCORE_COL);
+    addColumnName(PERCOLATOR_RANK_COL);
+    addColumnName(PERCOLATOR_QVALUE_COL);
+    addColumnName(PERCOLATOR_PEP_COL);
+    break;
+  }
+
+  addColumnName(SCAN_COL);
+  addColumnName(CHARGE_COL);
+  addColumnName(SPECTRUM_PRECURSOR_MZ_COL);
+  addColumnName(SPECTRUM_NEUTRAL_MASS_COL);
+  addColumnName(PEPTIDE_MASS_COL);
+  //addColumnName(DELTA_CN_COL);
+  //addColumnName(SP_SCORE_COL);
+  //addColumnName(SP_RANK_COL);
+  //addColumnName(XCORR_SCORE_COL);
+  //addColumnName(XCORR_RANK_COL);
+  //addColumnName(BY_IONS_MATCHED_COL);
+  //addColumnName(BY_IONS_TOTAL_COL);
+  //addColumnName(MATCHES_SPECTRUM_COL);
+  addColumnName(SEQUENCE_COL);
+  addColumnName(CLEAVAGE_TYPE_COL);
+  addColumnName(PROTEIN_ID_COL);
+  addColumnName(FLANKING_AA_COL);
+}
+
+/**
+ * Write peptide match file
+ */
+void PMCDelimitedFileWriter::writePeptides(
+  ProteinMatchCollection* collection ///< collection to be written
+  ) {
+
+  carp(CARP_DEBUG, "Writing peptides");
+
+  string cleavage = getCleavageType();
+  MASS_FORMAT_T mass_format_type =
+    get_mass_format_type_parameter("mod-mass-format");
+
+  for (PeptideMatchIterator iter = collection->peptideMatchBegin();
+       iter != collection->peptideMatchEnd();
+       ++iter) {
+    PeptideMatch* match = *iter;
+    Peptide* peptide = match->getPeptide();
+
+    // collect spectra info
+    vector<string> spec_scans;
+    vector<string> spec_charges;
+    vector<string> spec_precursors;
+    vector<string> spec_neutral_masses;
+    for (SpectrumMatchIterator spec_iter = match->spectrumMatchBegin();
+         spec_iter != match->spectrumMatchEnd();
+         ++spec_iter) {
+      SpectrumMatch* spec_match = *spec_iter;
+      Spectrum* spec = spec_match->getSpectrum();
+      SpectrumZState& zstate = spec_match->getZState();
+
+      spec_scans.push_back(lexical_cast<string>(spec->getFirstScan()));
+      spec_charges.push_back(lexical_cast<string>(zstate.getCharge()));
+      spec_precursors.push_back(lexical_cast<string>(spec->getPrecursorMz()));
+      spec_neutral_masses.push_back(lexical_cast<string>(zstate.getNeutralMass()));
+    }
+
+    // collect proteins info
+    vector<string> protein_ids;
+    vector<string> flanking_aas;
+    for (ProteinMatchIterator prot_iter = match->proteinMatchBegin();
+         prot_iter != match->proteinMatchEnd();
+         ++prot_iter) {
+      ProteinMatch* prot_match = *prot_iter;
+      Protein* protein = prot_match->getProtein();
+      protein_ids.push_back(protein->getIdPointer());
+      /** TODO figure out why this works and getFlankingAAs() doesn't **/
+      if (protein->isPostProcess()) {
+        PostProcessProtein* post_process_protein = (PostProcessProtein*)protein;
+        string flanking_str = "";
+        flanking_str += post_process_protein->getNTermFlankingAA();
+        flanking_str += post_process_protein->getCTermFlankingAA();
+        flanking_aas.push_back(flanking_str);
+      }
+      /*****************************************************************/
+    }
+
+    setColumnCurrentRow(SCAN_COL, StringUtils::Join(spec_scans, ','));
+    setColumnCurrentRow(CHARGE_COL, StringUtils::Join(spec_charges, ','));
+    setColumnCurrentRow(SPECTRUM_PRECURSOR_MZ_COL, StringUtils::Join(spec_precursors, ','));
+    setColumnCurrentRow(SPECTRUM_NEUTRAL_MASS_COL, StringUtils::Join(spec_neutral_masses, ','));
+    setColumnCurrentRow(PEPTIDE_MASS_COL, peptide->calcModifiedMass());
+    addScoreIfExists(match, DELTA_CN, DELTA_CN_COL);
+    addScoreIfExists(match, SP, SP_SCORE_COL);
+    addRankIfExists(match, SP, SP_RANK_COL);
+    addScoreIfExists(match, XCORR, XCORR_SCORE_COL);
+    addRankIfExists(match, XCORR, XCORR_RANK_COL);
+    addScoreIfExists(match, PERCOLATOR_SCORE, PERCOLATOR_SCORE_COL);
+    addRankIfExists(match, PERCOLATOR_SCORE, PERCOLATOR_RANK_COL);
+    addScoreIfExists(match, PERCOLATOR_QVALUE, PERCOLATOR_QVALUE_COL);
+    addScoreIfExists(match, PERCOLATOR_PEP, PERCOLATOR_PEP_COL);
+    addScoreIfExists(match, BY_IONS_MATCHED, BY_IONS_MATCHED_COL);
+    addScoreIfExists(match, BY_IONS_TOTAL, BY_IONS_TOTAL_COL);
+    //addScoreIfExists(match, MATCHES_SPECTRUM, MATCHES_SPECTRUM_COL);
+
+    MODIFIED_AA_T* mod_seq = peptide->getModifiedAASequence();
+    char* seq_with_masses = modified_aa_string_to_string_with_masses(
+      mod_seq, peptide->getLength(), mass_format_type);
+    free(mod_seq);
+    setAndFree(SEQUENCE_COL, seq_with_masses);
+
+    setColumnCurrentRow(CLEAVAGE_TYPE_COL, cleavage);
+    setColumnCurrentRow(PROTEIN_ID_COL, StringUtils::Join(protein_ids, ','));
+    //setAndFree(FLANKING_AA_COL, peptide->getFlankingAAs());
+    setColumnCurrentRow(FLANKING_AA_COL, StringUtils::Join(flanking_aas, ','));
+
+    writeRow();
+  }
+}
+
+/**
+ * Set up the columns for a spectrum match file
+ */
+void PMCDelimitedFileWriter::setUpPSMsColumns(
+  CruxApplication* application ///< application writing the file
+) {
+  switch (application->getCommand()) {
+  default:
+    carp(CARP_FATAL, "Command (%s) not yet implemented for writing tab "
+                     "delimited files.", application->getName().c_str());
+    return;
+  case MISC_COMMAND:
+  case PROCESS_SPEC_COMMAND:
+  case GENERATE_PEPTIDES_COMMAND:
+  case GET_MS2_SPECTRUM_COMMAND:
+  case PREDICT_PEPTIDE_IONS_COMMAND:
+  case VERSION_COMMAND:
+  case NUMBER_COMMAND_TYPES:
+  case INVALID_COMMAND:
+    carp(CARP_FATAL, "Invalid command (%s) for writing tab delimited file.",
+                     application->getName().c_str());
+    return;
+  case PSM_CONVERT_COMMAND:
+    break;
+  case PERCOLATOR_COMMAND:
+    addColumnName(FILE_IDX_COL);
+    addColumnName(FILE_COL);
+    addColumnName(PERCOLATOR_SCORE_COL);
+    addColumnName(PERCOLATOR_RANK_COL);
+    addColumnName(PERCOLATOR_PEP_COL);
+    addColumnName(PERCOLATOR_QVALUE_COL);
+    break;
+  }
+  addColumnName(SCAN_COL);
+  addColumnName(CHARGE_COL);
+  addColumnName(SPECTRUM_PRECURSOR_MZ_COL);
+  addColumnName(SPECTRUM_NEUTRAL_MASS_COL);
+  addColumnName(PEPTIDE_MASS_COL);
+  addColumnName(SEQUENCE_COL);
+  addColumnName(MODIFICATIONS_COL);
+  addColumnName(CLEAVAGE_TYPE_COL);
+  addColumnName(PROTEIN_ID_COL);
+  addColumnName(FLANKING_AA_COL);
+}
+
+/**
+ * Write spectrum match file
+ */
+void PMCDelimitedFileWriter::writePSMs(
+  ProteinMatchCollection* collection ///< collection to be written
+  ) {
+
+  carp(CARP_DEBUG, "Writing PSMs");
+
+  string cleavage = getCleavageType();
+  MASS_FORMAT_T mass_format_type =
+    get_mass_format_type_parameter("mod-mass-format");
+
+  const map<pair<int, int>, int>& spectrum_counts = collection->getMatchesSpectrum();
+
+  bool distinct_matches = collection->hasDistinctMatches();
+  COMMAND_T command = application_->getCommand();
+
+  for (SpectrumMatchIterator iter = collection->spectrumMatchBegin();
+       iter != collection->spectrumMatchEnd();
+       ++iter) {
+    SpectrumMatch* match = *iter;
+    setColumnCurrentRow(FILE_IDX_COL, match->getFileIndex());
+    setColumnCurrentRow(FILE_COL, match->getFilePath());
+
+    Spectrum* spectrum = match->getSpectrum();
+    SpectrumZState& zstate = match->getZState();
+    PeptideMatch* pep_match = match->getPeptideMatch();
+    Peptide* peptide = pep_match->getPeptide();
+
+    if (command == PSM_CONVERT_COMMAND) {
+      addScoreIfExists(match, DELTA_CN, DELTA_CN_COL);                          // TODO: Figure out difference between match and pep_match,
+      addScoreIfExists(match, BY_IONS_MATCHED, BY_IONS_MATCHED_COL);            // since Percolator uses pep_match... While tide-search
+      addScoreIfExists(match, BY_IONS_TOTAL, BY_IONS_TOTAL_COL);                // uses match. These are different values, are they supposed to be?
+                    // When using pep_match, a lot of things are unknown (-1)
+      setColumnCurrentRow(PROTEIN_ID_COL, peptide->getProteinIdsLocations());   // This was used by an older PMCDelimitedFileWriter and retains the protein id location
+    } else {
+      addScoreIfExists(pep_match, DELTA_CN, DELTA_CN_COL);
+      addScoreIfExists(pep_match, BY_IONS_MATCHED, BY_IONS_MATCHED_COL);
+      addScoreIfExists(pep_match, BY_IONS_TOTAL, BY_IONS_TOTAL_COL);
+      setColumnCurrentRow(PROTEIN_ID_COL, StringUtils::Join(peptide->getProteinIds(), ','));
+    }
+
+    setColumnCurrentRow(SCAN_COL, spectrum->getFirstScan());
+    setColumnCurrentRow(CHARGE_COL, zstate.getCharge());
+    setColumnCurrentRow(SPECTRUM_PRECURSOR_MZ_COL, zstate.getMZ());
+    setColumnCurrentRow(SPECTRUM_NEUTRAL_MASS_COL, zstate.getNeutralMass());
+    setColumnCurrentRow(PEPTIDE_MASS_COL, peptide->calcModifiedMass());
+    addScoreIfExists(match, SP, SP_SCORE_COL);
+    addRankIfExists(match, SP, SP_RANK_COL);
+    addScoreIfExists(match, XCORR, XCORR_SCORE_COL);
+    addRankIfExists(match, XCORR, XCORR_RANK_COL);
+    addScoreIfExists(match, TIDE_SEARCH_EXACT_PVAL, EXACT_PVALUE_COL);
+    addScoreIfExists(match, TIDE_SEARCH_REFACTORED_XCORR, REFACTORED_SCORE_COL);
+    addScoreIfExists(match, PERCOLATOR_SCORE, PERCOLATOR_SCORE_COL);
+    addRankIfExists(match, PERCOLATOR_SCORE, PERCOLATOR_RANK_COL);
+    addScoreIfExists(match, PERCOLATOR_PEP, PERCOLATOR_PEP_COL);
+    addScoreIfExists(match, PERCOLATOR_QVALUE, PERCOLATOR_QVALUE_COL);
+    pair<int, int> scan_charge = make_pair(spectrum->getFirstScan(), zstate.getCharge());
+    map<pair<int, int>, int>::const_iterator lookup = spectrum_counts.find(scan_charge);
+    if (distinct_matches) {
+      setColumnCurrentRow(DISTINCT_MATCHES_SPECTRUM_COL,
+        (lookup != spectrum_counts.end()) ? lookup->second : 0);
+      } else {
+      setColumnCurrentRow(MATCHES_SPECTRUM_COL,
+        (lookup != spectrum_counts.end()) ? lookup->second : 0);
+    }
+    MODIFIED_AA_T* mod_seq = peptide->getModifiedAASequence();
+    char* seq_with_masses = modified_aa_string_to_string_with_masses(
+      mod_seq, peptide->getLength(), mass_format_type);
+    free(mod_seq);
+    setAndFree(SEQUENCE_COL, seq_with_masses);
+    setColumnCurrentRow(MODIFICATIONS_COL, peptide->getModsString());
+
+    setColumnCurrentRow(CLEAVAGE_TYPE_COL, cleavage);
+    setAndFree(FLANKING_AA_COL, peptide->getFlankingAAs());
+
+    if (!write_html_) {
+      writeRow();
+    } else {
+      writeHTMLRow();
+    }
+
+  }
+  if (write_html_) {
+    *file_ptr_ << "</table>" << endl;
+  }
+}
+
+/**
+ * Gets the cleavage type as a string
+ */
+string PMCDelimitedFileWriter::getCleavageType() {
+  ENZYME_T enzyme = get_enzyme_type_parameter("enzyme");
+  const char* enzyme_string = enzyme_type_to_string(enzyme);
+  DIGEST_T digestion = get_digest_type_parameter("digestion");
+  const char* digestion_string = digest_type_to_string(digestion);
+  string cleavage_str = enzyme_string;
+  cleavage_str += "-";
+  cleavage_str += digestion_string;
+  return cleavage_str;
+}
+
+/**
+ * Adds the value of a score to the specified column, if it exists in the match
+ */
+void PMCDelimitedFileWriter::addScoreIfExists(
+  AbstractMatch* match, ///< match to get score from
+  SCORER_TYPE_T scoreType, ///< score type to get
+  MATCH_COLUMNS_T column ///< column to add the score to
+  ) {
+  if (match->hasScore(scoreType)) {
+    setColumnCurrentRow(column, match->getScore(scoreType));
+  } else {
+    setColumnCurrentRow(column, -1);
+  }
+}
+
+/**
+ * Adds the value of a rank to the specified column, if it exists in the match
+ */
+void PMCDelimitedFileWriter::addRankIfExists(
+  AbstractMatch* match, ///< match to get rank from
+  SCORER_TYPE_T scoreType, ///< rank type to get
+  MATCH_COLUMNS_T column ///< column to add the rank to
+  ) {
+  if (match->hasRank(scoreType)) {
+    setColumnCurrentRow(column, match->getRank(scoreType));
+  } else {
+    setColumnCurrentRow(column, -1);
+  }
+}
+
+/**
+ * Sets the value of a char* to the specified column, then frees the pointer
+ */
+void PMCDelimitedFileWriter::setAndFree(
+  MATCH_COLUMNS_T column, ///< column to add the char* to
+  char* value ///< char* to set the column value to
+  ) {
+  if (value != NULL) {
+    setColumnCurrentRow(column, value);
+    free(value);
+  } else {
+    carp(CARP_WARNING, "Cannot set value for column %d", column);
+  }
+}
+
+/**
+  * Sets whether we should write our output in tab delimited or HTML format. Default = false (tab delimited)
+  */
+void PMCDelimitedFileWriter::setWriteHTML(bool write_html) {
+  write_html_ = write_html;
+}
+
+/**
+ * Writes the header in HTML format, this is used for HTMLWriter instead of
+ * DelimitedFileWriter's writeHeader()
+ */
+void PMCDelimitedFileWriter::writeHTMLHeader() {
+
+  num_columns_ = 0;
+  // set file position index for all columns being printed
+  for(unsigned int col_type = 0; col_type < NUMBER_MATCH_COLUMNS; col_type++) {
+    if( match_to_print_[col_type] == true ) {
+      match_indices_[col_type] = num_columns_++;
+    } else {
+      match_indices_[col_type] = -1;
+    }
+  }
+
+  // set all the names for which we have match_indices_
+  column_names_.assign(num_columns_, "");
+  for(unsigned int col_type = 0; col_type < NUMBER_MATCH_COLUMNS; col_type++) {
+    if( match_indices_[col_type] > -1 ) {
+      if (get_column_header(col_type) == NULL) {
+        carp(CARP_FATAL, "Error col type: %d doesn't exist!", col_type);
+      }
+      DelimitedFileWriter::setColumnName(get_column_header(col_type), 
+                                         match_indices_[col_type]);
+    }
+  }
+
+  if( column_names_.empty() ) {
+    return;
+  }
+  
+  if( file_ptr_ == NULL || !file_ptr_->is_open() ) {
+    carp(CARP_FATAL, "Cannot write to NULL delimited file.");
+  }
+  *file_ptr_ << "<table border=\"1\">" << "\t<tr>" << endl
+      << "\t\t<td><b>" << column_names_[0] << "</b></td>" << endl;
+  for(size_t idx = 1; idx < column_names_.size(); idx++) {
+    if( !column_names_[idx].empty() ) {
+      *file_ptr_ << "\t\t<td><b>" << column_names_[idx] << "</b></td>" << endl;
+    }
+  }
+  
+  *file_ptr_ << "\t</tr>" << endl;
+
+  // with a header, each line must be that length
+  current_row_.assign(column_names_.size(), "");
+}
+
+/**
+ * Writes a row in HTML format, this is used for HTMLWriter instead of
+ * DelimitedFileWriter's writeRow() 
+ */
+void PMCDelimitedFileWriter::writeHTMLRow() {
+  if( current_row_.empty() ) {
+    return;
+  }
+
+  // make the row as long as the header
+  while( current_row_.size() < column_names_.size()) {
+    current_row_.push_back("");
+  }
+  // TODO? warning if row is longer than non-empty header?
+
+  // print each value separated by delimiter
+  *file_ptr_ << "\t<tr>" << endl
+             << "\t\t<td>" << current_row_[0] << "</td>" << endl;
+  for(size_t idx = 1; idx < current_row_.size(); idx++) {
+    *file_ptr_ << "\t\t<td>" << current_row_[idx] << "</td>" << endl;
+  }
+  // end with newline
+  *file_ptr_ << "\t</tr>" << endl;
+
+  // clear the current_row and refill with blanks
+  // if there is a header, that is the min length
+  // if not, each row can be a different length
+  current_row_.assign(column_names_.size(), "");
+
+}
diff --git a/src/io/PMCDelimitedFileWriter.h b/src/io/PMCDelimitedFileWriter.h
new file mode 100644
index 0000000..7234d17
--- /dev/null
+++ b/src/io/PMCDelimitedFileWriter.h
@@ -0,0 +1,213 @@
+/**
+ * \file PMCDelimitedFileWriter.h
+ * $Revision$
+ * \brief Writes out delimited files from ProteinMatchCollection objects.
+ */
+
+#ifndef PROTEINMATCHCOLLECTION_DELIMITED_FILE_WRITER_H_
+#define PROTEINMATCHCOLLECTION_DELIMITED_FILE_WRITER_H_
+
+#include <vector>
+
+#include "model/match_objects.h"
+#include "DelimitedFile.h"
+#include "MatchFileWriter.h"
+#include "model/Peptide.h"
+#include "model/PeptideMatch.h"
+#include "model/PostProcessProtein.h"
+#include "model/ProteinMatch.h"
+#include "model/ProteinMatchCollection.h"
+#include "PSMWriter.h"
+#include "model/Spectrum.h"
+#include "model/SpectrumMatch.h"
+
+using namespace std;
+
+class PMCDelimitedFileWriter : public MatchFileWriter, public PSMWriter {
+
+ public:
+  /**
+   * Defines the type of match file being written
+   */
+
+  /**
+   * Returns an empty PMCDelimitedFileWriter object
+   */
+  PMCDelimitedFileWriter();
+
+  /**
+   * Destructor
+   */
+  ~PMCDelimitedFileWriter();
+
+  /**
+   * Opens a file, writes it, and closes the file
+   */
+  void writeFile(
+    CruxApplication* application, ///< application writing the file
+    string filename, ///< name of the file to open
+    MATCH_FILE_TYPE type, ///< type of file to be written
+    ProteinMatchCollection* collection ///< collection to be written
+  );
+
+  /**
+   * Closes any open file, then opens a file for the specified type of writing
+   */
+  void openFile(
+    CruxApplication* application, ///< application writing the file
+    string filename, ///< name of the file to open
+    MATCH_FILE_TYPE type ///< type of file to be written
+  );
+
+  /**
+   * Closes any open file, if any
+   */
+  void closeFile();
+
+  /**
+   * Writes all three file types using the file stem as a base filename
+   */
+  void writeAll(
+    CruxApplication* application, ///< application writing the files
+    ProteinMatchCollection* collection, ///< collection to be written
+    string stem ///< filestem to be prepended to the filenames
+  );
+
+  void write(
+    MatchCollection* collection,
+    string database
+  );
+
+  /**
+   * Writes the data in a ProteinMatchCollection to the currently open file
+   */
+  void write(
+    ProteinMatchCollection* collection ///< collection to be written
+  );
+
+  /**
+    * Sets whether we should write our output in tab delimited or HTML format. Default = false (tab delimited)
+    */
+  void setWriteHTML(bool write_html);
+
+ private:
+
+  bool write_html_; // this determines whether we want to write in html format. Default value = false;
+  CruxApplication* application_; // pointer to the application using this program
+
+  // function pointer to the appropriate writing function for the current file type
+  void (PMCDelimitedFileWriter::*write_function_)(ProteinMatchCollection*);
+
+  /**
+   * Set up the columns for a protein match file
+   */
+  void setUpProteinsColumns(
+    CruxApplication* application ///< application writing the file
+  );
+
+  /**
+   * Write protein match file
+   */
+  void writeProteins(
+    ProteinMatchCollection* collection ///< collection to be written
+  );
+
+  /**
+   * Set up the columns for a peptide match file
+   */
+  void setUpPeptidesColumns(
+    CruxApplication* application ///< application writing the file
+  );
+
+  /**
+   * Write peptide match file
+   */
+  void writePeptides(
+    ProteinMatchCollection* collection ///< collection to be written
+  );
+
+  /**
+   * Set up the columns for a spectrum match file
+   */
+  void setUpPSMsColumns(
+    CruxApplication* application ///< application writing the file
+  );
+
+  /**
+   * Write spectrum match file
+   */
+  void writePSMs(
+    ProteinMatchCollection* collection ///< collection to be written
+  );
+
+  /**
+   * Gets the cleavage type as a string
+   */
+  string getCleavageType();
+
+  /**
+   * Adds a column to the header if match has score
+   */
+  void addScoreColumnIfExists(
+    AbstractMatch* match, ///< match to get score from
+    SCORER_TYPE_T scoreType, ///< score type to get
+    MATCH_COLUMNS_T column ///< column to add the score to
+  );
+
+  /**
+   * Adds a column to the header if match has rank
+   */
+  void addRankColumnIfExists(
+    AbstractMatch* match, ///< match to get rank from
+    SCORER_TYPE_T scoreType, ///< rank type to get
+    MATCH_COLUMNS_T column ///< column to add the rank to
+  );
+
+  /**
+   * Adds the value of a score to the specified column, if it exists in the match
+   */
+  void addScoreIfExists(
+    AbstractMatch* match, ///< match to get score from
+    SCORER_TYPE_T scoreType, ///< score type to get
+    MATCH_COLUMNS_T column ///< column to add the score to
+  );
+
+  /**
+   * Adds the value of a rank to the specified column, if it exists in the match
+   */
+  void addRankIfExists(
+    AbstractMatch* match, ///< match to get rank from
+    SCORER_TYPE_T scoreType, ///< rank type to get
+    MATCH_COLUMNS_T column ///< column to add the rank to
+  );
+
+  /**
+   * Adds the value of a char* to the specified column, then frees the pointer
+   */
+  void setAndFree(
+    MATCH_COLUMNS_T column, ///< column to add the char* to
+    char* value ///< char* to set the column value to
+  );
+
+  /**
+   * Writes the header in HTML format, this is used for HTMLWriter instead of
+   * DelimitedFileWriter's writeHeader()
+   */
+  void writeHTMLHeader();
+
+  /**
+   * Writes a row in HTML format, this is used for HTMLWriter instead of
+   * DelimitedFileWriter's writeRow() 
+   */
+  void writeHTMLRow();
+
+};
+
+#endif // PROTEINMATCHCOLLECTION_DELIMITED_FILE_WRITER_H_
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/PMCPepXMLWriter.cpp b/src/io/PMCPepXMLWriter.cpp
new file mode 100644
index 0000000..7233e9a
--- /dev/null
+++ b/src/io/PMCPepXMLWriter.cpp
@@ -0,0 +1,142 @@
+#include "PMCPepXMLWriter.h"
+#include "util/Params.h"
+
+using namespace Crux;
+
+void PMCPepXMLWriter::openFile(
+  string filename,
+  bool overwrite
+) {
+  PepXMLWriter::openFile(filename.c_str(), overwrite);
+}
+
+void PMCPepXMLWriter::openFile(
+  CruxApplication* application,
+  string filename,
+  MATCH_FILE_TYPE type
+) {
+  PepXMLWriter::openFile(filename.c_str(), Params::GetBool("overwrite"));
+}
+
+void PMCPepXMLWriter::write(
+  MatchCollection* collection,
+  string database
+) {
+  ProteinMatchCollection protein_collection(collection);
+  write(&protein_collection);
+}
+
+void PMCPepXMLWriter::closeFile() {
+  PepXMLWriter::closeFile();
+}
+
+/**
+ * Writes the data in a ProteinMatchCollection to the currently open file
+ */
+void PMCPepXMLWriter::write(
+  ProteinMatchCollection* collection ///< collection to be written
+) {
+  if (!file_) {
+    carp(CARP_FATAL, "No file open to write to.");
+  } else if (collection == NULL) {
+    carp(CARP_FATAL, "ProteinMatchCollection was null");
+  }
+
+  writeHeader();
+  writePSMs(collection);
+  writeFooter();
+}
+
+/**
+ * Writes the PSMs in a ProteinMatchCollection to the currently open file
+ */
+void PMCPepXMLWriter::writePSMs(
+  ProteinMatchCollection* collection ///< collection to be written
+) {
+
+  const map<pair<int, int>, int>& spectrum_counts = collection->getMatchesSpectrum();
+
+  // iterate over matches
+  for (SpectrumMatchIterator spec_iter = collection->spectrumMatchBegin();
+       spec_iter != collection->spectrumMatchEnd();
+       ++spec_iter) {
+    SpectrumMatch* spec_match = *spec_iter;
+    PeptideMatch* pep_match = spec_match->getPeptideMatch();
+
+    vector<string> protein_names;
+    vector<string> protein_descriptions;
+    for (ProteinMatchIterator prot_iter = pep_match->proteinMatchBegin();
+         prot_iter != pep_match->proteinMatchEnd();
+         ++prot_iter) {
+      ProteinMatch* prot_match = *prot_iter;
+      Protein* protein = prot_match->getProtein();
+      protein_names.push_back(protein->getIdPointer());
+      protein_descriptions.push_back(protein->getAnnotationPointer());
+    }
+
+    // populate scores
+    double scores[NUMBER_SCORER_TYPES] = { 0 };
+    bool scores_computed[NUMBER_SCORER_TYPES] = { false };
+    for (ScoreMapIterator score_iter = spec_match->scoresBegin();
+         score_iter != spec_match->scoresEnd();
+         ++score_iter) {
+      scores[score_iter->first] = score_iter->second;
+      scores_computed[score_iter->first] = true;
+    }
+
+    // populate ranks
+    int ranks[NUMBER_SCORER_TYPES] = { 0 };
+    for (RankMapIterator rank_iter = spec_match->ranksBegin();
+         rank_iter != spec_match->ranksEnd();
+         ++rank_iter) {
+      ranks[rank_iter->first] = rank_iter->second;
+    }
+
+    Spectrum* spectrum = spec_match->getSpectrum();
+    SpectrumZState zstate = spec_match->getZState();
+    Peptide* peptide = pep_match->getPeptide();
+    int spec_scan = spectrum->getFirstScan();
+    string spec_filename = spectrum->getFilename();
+    FLOAT_T spec_neutral_mass = zstate.getNeutralMass();
+    int spec_charge = zstate.getCharge();
+
+    // get sequence and modified sequence
+    char* seq;
+    seq = peptide->getSequence();
+    string seq_str(seq);
+    free(seq);
+    MODIFIED_AA_T* mod_seq = peptide->getModifiedAASequence();
+    seq =
+      modified_aa_string_to_string_with_masses(mod_seq, peptide->getLength(),
+      get_mass_format_type_parameter("mod-mass-format"));
+    string mod_seq_str(seq);
+    free(seq);
+    free(mod_seq);
+    // get flanking aas
+    char* flanking = peptide->getFlankingAAs();
+    string flanking_str(flanking);
+    free(flanking);
+                                                             
+    FLOAT_T peptide_mass = peptide->calcModifiedMass();
+
+    // write psm
+    map<pair<int, int>, int>::const_iterator lookup =
+      spectrum_counts.find(make_pair(spec_scan, spec_charge));
+    writePSM(spec_scan, spec_filename.c_str(),
+             spec_neutral_mass, spec_charge,
+             ranks, seq_str.c_str(), mod_seq_str.c_str(), peptide_mass,
+             protein_names.size(), flanking_str.c_str(),
+             protein_names, protein_descriptions,
+             scores_computed, scores,
+             (lookup != spectrum_counts.end()) ? lookup->second : 0);
+  }
+
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/io/PMCPepXMLWriter.h b/src/io/PMCPepXMLWriter.h
new file mode 100644
index 0000000..bcbc239
--- /dev/null
+++ b/src/io/PMCPepXMLWriter.h
@@ -0,0 +1,65 @@
+#ifndef PMCPEPXMLWRITER_H
+#define PMCPEPXMLWRITER_H
+
+#include "carp.h"
+#include "model/Peptide.h"
+#include "model/PeptideMatch.h"
+#include "PepXMLWriter.h"
+#include "model/Protein.h"
+#include "model/ProteinMatch.h"
+#include "model/ProteinMatchCollection.h"
+#include "PSMWriter.h"
+#include "model/Spectrum.h"
+#include "model/SpectrumMatch.h"
+
+using namespace std;
+
+class PMCPepXMLWriter : public PepXMLWriter, public PSMWriter {
+
+ public:
+
+  void openFile(
+    string filename,
+    bool overwrite
+  );
+
+  void openFile(
+    CruxApplication* application,
+    string filename,
+    MATCH_FILE_TYPE type
+  );
+
+  void write(
+    MatchCollection* collection,
+    string database
+  );
+
+  void closeFile();
+
+  /**
+   * Writes the data in a ProteinMatchCollection to the currently open file
+   */
+  void write(
+    ProteinMatchCollection* collection ///< collection to be written
+  );
+
+ protected:
+
+  /**
+   * Writes the PSMs in a ProteinMatchCollection to the currently open file
+   */
+  void writePSMs(
+    ProteinMatchCollection* collection ///< collection to be written
+  );
+
+};
+
+#endif // PMCPEPXMLWRITER_H
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/io/PMCSQTWriter.cpp b/src/io/PMCSQTWriter.cpp
new file mode 100644
index 0000000..3468434
--- /dev/null
+++ b/src/io/PMCSQTWriter.cpp
@@ -0,0 +1,160 @@
+#include "PMCSQTWriter.h"
+
+void PMCSQTWriter::openFile(
+  CruxApplication* application,
+  string filename,
+  MATCH_FILE_TYPE type
+) {
+  SQTWriter::openFile(filename);
+}
+
+void PMCSQTWriter::write(
+  MatchCollection* collection,
+  string database
+) {
+  ProteinMatchCollection protein_collection(collection);
+  write(&protein_collection, database);
+}
+
+void PMCSQTWriter::closeFile() {
+  SQTWriter::closeFile();
+}
+
+/**
+ * Writes the data in a ProteinMatchCollection to the currently open file
+ */
+void PMCSQTWriter::write(
+  ProteinMatchCollection* collection, ///< collection to be written
+  string database ///< the database name
+) {
+  if (!file_) {
+    carp(CARP_FATAL, "No file open to write to.");
+  }
+
+  // count proteins
+  int num_proteins = 0;
+  for (ProteinMatchIterator iter = collection->proteinMatchBegin();
+       iter != collection->proteinMatchEnd();
+       ++iter) {
+    ++num_proteins;
+  }
+
+  writeHeader(database, num_proteins);
+  writePSMs(collection);
+}
+
+/**
+ * Writes the PSMs in a ProteinMatchCollection to the currently open file
+ */
+void PMCSQTWriter::writePSMs(
+  ProteinMatchCollection* collection ///< collection to be written
+) {
+
+  const map<pair<int, int>, int>& spectrum_counts = collection->getMatchesSpectrum();
+
+  string lastPrintedSpectrum = "";
+
+  // iterate over matches
+  for (SpectrumMatchIterator spec_iter = collection->spectrumMatchBegin();
+       spec_iter != collection->spectrumMatchEnd();
+       ++spec_iter) {
+    SpectrumMatch* spec_match = *spec_iter;
+    PeptideMatch* pep_match = spec_match->getPeptideMatch();
+
+    // write spectrum
+    Crux::Spectrum* spectrum = spec_match->getSpectrum();
+    SpectrumZState z_state = spec_match->getZState();
+    map<pair<int, int>, int>::const_iterator lookup =
+      spectrum_counts.find(make_pair(spectrum->getFirstScan(), z_state.getCharge()));
+
+    string spectrum_title = getSpectrumTitle(spectrum->getFirstScan(), z_state.getCharge());
+    if (spectrum_title.compare(lastPrintedSpectrum) != 0) {
+      writeSpectrum(spectrum, z_state, (lookup != spectrum_counts.end()) ?
+                    lookup->second : 0);
+      lastPrintedSpectrum = spectrum_title;
+    }
+
+    FLOAT_T xcorr_score = -1.0;
+    int xcorr_rank = -1;
+    FLOAT_T sp_score = -1.0;
+    int sp_rank = -1;
+    FLOAT_T delta_cn = -1.0;
+    FLOAT_T by_ions_matched = -1;
+    FLOAT_T by_ions_total = -1;
+
+    // xcorr
+    if (spec_match->hasScore(XCORR)) {
+      xcorr_score = spec_match->getScore(XCORR);
+    } else {
+      carp_once(CARP_WARNING, "Missing XCorr value writing SQT.");
+    }
+    if (spec_match->hasRank(XCORR)) {
+      xcorr_rank = spec_match->getRank(XCORR);
+    } else {
+      carp_once(CARP_WARNING, "Missing XCorr rank writing SQT.");
+    }
+
+    // sp
+    if (spec_match->hasScore(SP)) {
+      sp_score = spec_match->getScore(SP);
+    } else {
+      carp_once(CARP_WARNING, "Missing SP value writing SQT.");
+    }
+    if (spec_match->hasRank(SP)) {
+      sp_rank = spec_match->getRank(SP);
+    } else {
+      carp_once(CARP_WARNING, "Missing SP rank writing SQT.");
+    }
+
+    // deltacn
+    if (spec_match->hasScore(DELTA_CN)) {
+      delta_cn = spec_match->getScore(DELTA_CN);
+    } else {
+      carp_once(CARP_WARNING, "Missing DeltaCN value writing SQT.");
+    }
+
+    // b/y ions
+    if (spec_match->hasScore(BY_IONS_MATCHED)) {
+      by_ions_matched = spec_match->getScore(BY_IONS_MATCHED);
+    } else {
+      carp_once(CARP_WARNING, "Missing B/Y ions matched value writing SQT.");
+    }
+    if (spec_match->hasScore(BY_IONS_TOTAL)) {
+      by_ions_total = spec_match->getScore(BY_IONS_TOTAL);
+    } else {
+      carp_once(CARP_WARNING, "Missing B/Y ions total value writing SQT.");
+    }
+
+    // checking whether lowest sp and total ion intensity need carp warning
+    if (spectrum->getTotalEnergy() == -1) {
+      carp_once(CARP_WARNING, "Missing Total Energy value writing SQT.");
+    }
+    if (spectrum->getLowestSp() == -1) {
+      carp_once(CARP_WARNING, "Missing Lowest Sp value writing SQT.");
+    }
+
+    bool is_decoy = false; // TODO not sure how to determine
+
+    // write psm
+    writePSM(pep_match->getPeptide(),
+             xcorr_score, xcorr_rank,
+             sp_score, sp_rank,
+             delta_cn,
+             by_ions_matched, by_ions_total,
+             is_decoy);
+  }
+}
+
+string PMCSQTWriter::getSpectrumTitle(int spectrum_scan_number, int charge) {
+  std::ostringstream spectrum_id;
+  spectrum_id << spectrum_scan_number << "." << spectrum_scan_number << "." << charge;
+  return spectrum_id.str();
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/io/PMCSQTWriter.h b/src/io/PMCSQTWriter.h
new file mode 100644
index 0000000..683da73
--- /dev/null
+++ b/src/io/PMCSQTWriter.h
@@ -0,0 +1,63 @@
+#ifndef PMCSQTWRITER_H
+#define PMCSQTWRITER_H
+
+#include "model/PeptideMatch.h"
+#include "model/ProteinMatchCollection.h"
+#include "PSMWriter.h"
+#include "model/SpectrumMatch.h"
+#include "SQTWriter.h"
+
+using namespace std;
+
+class PMCSQTWriter : public SQTWriter, public PSMWriter {
+
+ public:
+
+  void openFile(
+    CruxApplication* application,
+    string filename,
+    MATCH_FILE_TYPE type
+  );
+
+  void write(
+    MatchCollection* collection,
+    string database
+  );
+
+  void closeFile();
+
+  /**
+   * Writes the data in a ProteinMatchCollection to the currently open file
+   */
+  void write(
+    ProteinMatchCollection* collection, ///< collection to be written
+    string database ///< the database name
+//    int top_match ///< the top matches to output
+  );
+
+  string getSpectrumTitle(
+    int spectrum_scan_number,
+    int charge
+  );
+
+ protected:
+
+  /**
+   * Writes the PSMs in a ProteinMatchCollection to the currently open file
+   */
+  void writePSMs(
+    ProteinMatchCollection* collection ///< collection to be written
+//    int top_match //< the top matches to output
+  );
+
+};
+
+#endif // PMCSQTWRITER_H
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/io/PSMReader.cpp b/src/io/PSMReader.cpp
new file mode 100644
index 0000000..e7273ee
--- /dev/null
+++ b/src/io/PSMReader.cpp
@@ -0,0 +1,29 @@
+/*
+Abstract class for a peptide-spectrum match readers
+*/
+
+#include <cstdio>
+#include "PSMReader.h"
+#include "parameter.h"
+
+using namespace std;
+
+PSMReader::PSMReader()
+  : database_(NULL), decoy_database_(NULL) {
+}
+
+PSMReader::PSMReader(const string& file_path, Database* database, Database* decoy_database)
+  : file_path_(file_path), database_(database), decoy_database_(decoy_database) {
+}
+
+PSMReader::~PSMReader() {
+}
+
+void PSMReader::setDatabase(Database* database) {
+  database_ = database;
+}
+
+void PSMReader::setDecoyDatabase(Database* decoy_database) {
+  decoy_database_ = decoy_database;
+}
+
diff --git a/src/io/PSMReader.h b/src/io/PSMReader.h
new file mode 100644
index 0000000..518eddb
--- /dev/null
+++ b/src/io/PSMReader.h
@@ -0,0 +1,40 @@
+/*
+Abstract class for a peptide-spectrum match readers
+*/
+
+#ifndef PSMREADER_H
+#define PSMREADER_H
+
+#include "model/MatchCollection.h"
+
+#include <iostream>
+#include <fstream>
+#include <iomanip>
+#include <string>
+
+class PSMReader {
+
+ public:
+  // Constructors
+  PSMReader();
+  PSMReader(const std::string& file_path,
+            Database* database = NULL,
+            Database* decoy_database = NULL);
+
+  // Destructor
+  virtual ~PSMReader();
+
+  // Pure Virtual Parse Functions
+  virtual MatchCollection* parse() = 0;
+
+  // Methods usable by all Readers
+  void setDatabase(Database* database);
+  void setDecoyDatabase(Database* decoy_database);
+
+ protected:
+  Database* database_;
+  Database* decoy_database_;
+  std::string file_path_;
+};
+
+#endif
diff --git a/src/io/PSMWriter.cpp b/src/io/PSMWriter.cpp
new file mode 100644
index 0000000..313cfd1
--- /dev/null
+++ b/src/io/PSMWriter.cpp
@@ -0,0 +1,11 @@
+/*
+Abstract class for a peptide-spectrum match writers
+*/
+
+#include "PSMWriter.h"
+
+PSMWriter::PSMWriter() {
+}
+
+PSMWriter::~PSMWriter() {
+}
diff --git a/src/io/PSMWriter.h b/src/io/PSMWriter.h
new file mode 100644
index 0000000..548a2b4
--- /dev/null
+++ b/src/io/PSMWriter.h
@@ -0,0 +1,36 @@
+/*
+Abstract class for a peptide-spectrum match writers
+*/
+
+#ifndef PSMWRITER_H
+#define PSMWRITER_H
+
+#include "model/MatchCollection.h"
+#include "parameter.h"
+
+#include <iostream>
+#include <fstream>
+#include <iomanip>
+#include <string>
+
+class PSMWriter {
+
+ public:
+  // Constructor
+  PSMWriter();
+
+  // Destructor
+  virtual ~PSMWriter();
+
+  enum MATCH_FILE_TYPE { NONE, PROTEINS, PEPTIDES, PSMS };
+
+  // Pure virtual write, open file, and close file
+
+  virtual void openFile(CruxApplication* application, std::string filename, MATCH_FILE_TYPE type) = 0;
+
+  virtual void write(MatchCollection* collection, std::string database) = 0;
+
+  virtual void closeFile() = 0;
+};
+
+#endif
diff --git a/src/io/PWIZSpectrumCollection.cpp b/src/io/PWIZSpectrumCollection.cpp
new file mode 100644
index 0000000..39b3cd3
--- /dev/null
+++ b/src/io/PWIZSpectrumCollection.cpp
@@ -0,0 +1,274 @@
+/**
+ * \file PWIZSpectrumCollection.cpp
+ * AUTHOR: Barbara Frewen
+ * CREATE DATE: 21 April 2011
+ * \brief Class to read spectra files using the proteowizard library.
+ */
+#include "PWIZSpectrumCollection.h" 
+#include "util/crux-utils.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+#include "parameter.h"
+#include <iostream>
+#include "pwiz/data/msdata/SpectrumInfo.hpp"
+#if defined (_MSC_VER) &&  defined(INCLUDE_VENDOR_LIBRARIES)
+#include "pwiz/data/msdata/DefaultReaderList.hpp"
+//#include "pwiz/data/vendor_readers/ABI/Reader_ABI.hpp"
+//#include "pwiz/data/vendor_readers/ABI/T2D/Reader_ABI_T2D.hpp"
+#include "pwiz/data/vendor_readers/Agilent/Reader_Agilent.hpp"
+#include "pwiz/data/vendor_readers/Bruker/Reader_Bruker.hpp"
+#include "pwiz/data/vendor_readers/Shimadzu/Reader_Shimadzu.hpp"
+#include "pwiz/data/vendor_readers/Thermo/Reader_Thermo.hpp"
+#include "pwiz/data/vendor_readers/Waters/Reader_Waters.hpp"
+#endif
+
+
+using namespace std;
+/**
+ * Instantiates a new spectrum_collection object from a filename. 
+ * Does not parse file. 
+ */
+PWIZSpectrumCollection::PWIZSpectrumCollection(
+  const string& filename   ///< The spectrum collection filename.
+) : SpectrumCollection(filename) {
+#if defined(_MSC_VER) && defined(INCLUDE_VENDOR_LIBRARIES)
+  pwiz::msdata::DefaultReaderList readerList;
+  //readerList.push_back(pwiz::msdata::ReaderPtr(new pwiz::msdata::Reader_ABI));
+  //readerList.push_back(pwiz::msdata::ReaderPtr(new pwiz::msdata::Reader_ABI_T2D));
+  readerList.push_back(pwiz::msdata::ReaderPtr(new pwiz::msdata::Reader_Agilent));
+  //readerList.push_back(pwiz::msdata::ReaderPtr(new pwiz::msdata::Reader_Bruker));
+  readerList.push_back(pwiz::msdata::ReaderPtr(new pwiz::msdata::Reader_Shimadzu));
+  readerList.push_back(pwiz::msdata::ReaderPtr(new pwiz::msdata::Reader_Thermo));
+  readerList.push_back(pwiz::msdata::ReaderPtr(new pwiz::msdata::Reader_Waters));
+  carp(CARP_DETAILED_INFO, "Support for vendor specific formats enabled.");  
+  try {
+     reader_ = new pwiz::msdata::MSDataFile(filename_, &readerList);
+  } catch (const runtime_error& error) {
+    carp(CARP_FATAL, "Unable to parse spectrum file %s. Error: %s.", filename_.c_str(), error.what());
+  }
+#else
+  carp(CARP_DETAILED_INFO, "Support for vendor specific formats not enabled.");  
+  try {
+    reader_ = new pwiz::msdata::MSDataFile(filename_);
+  }
+  catch (const runtime_error& error) {
+    carp(CARP_FATAL, "Unable to parse spectrum file %s. Error: %s.", filename_.c_str(), error.what());  
+  }
+#endif
+  if( reader_ == NULL ) {
+    carp(CARP_FATAL, "PWIZSpectrumCollection unable to open '%s'.", 
+         filename_.c_str());
+  }
+}
+
+PWIZSpectrumCollection::~PWIZSpectrumCollection() {
+  delete reader_;
+}
+
+/**
+ * Parses the first/last scan from the title
+ * \returns whether this was successful.
+ * For MGF files that place their scan numbers in the title string
+ */
+bool PWIZSpectrumCollection::parseFirstLastScanFromTitle(
+  string& scan_title_str,
+  int& first_scan,
+  int& last_scan
+  ) {
+
+  first_scan = -1;
+  last_scan = -1;
+  vector<string> scan_title_tokens = StringUtils::Split(scan_title_str, '.');
+  bool success = false;
+  //make sure we have enough tokens and that the last token is dta.
+  if ((scan_title_tokens.size() >= 4) && (scan_title_tokens.back().find("dta") == 0)) {
+    carp(CARP_DETAILED_DEBUG, "Attempting to parse title:%s", scan_title_str.c_str());
+    size_t n = scan_title_tokens.size();
+
+    int title_charge;
+    int title_first_scan;
+    int title_last_scan;
+    //try to parse the first scan, last scan, and charge from the title, keeping track
+    //of whether we were successful.
+
+    success = StringUtils::TryFromString(scan_title_tokens[n-2], &title_charge);
+    success &= StringUtils::TryFromString(scan_title_tokens[n-3], &title_last_scan);
+    success &= StringUtils::TryFromString(scan_title_tokens[n-4], &title_first_scan);
+
+    if (success) {
+      //okay we parsed the three numbers, fill in the results.
+      carp(CARP_DETAILED_DEBUG, "Title first scan:%i", title_first_scan);
+      carp(CARP_DETAILED_DEBUG, "Title last scan:%i" , title_last_scan);
+      carp(CARP_DETAILED_DEBUG, "Title charge:%i", title_charge);
+      first_scan = title_first_scan;
+      last_scan = title_last_scan;
+    }
+  }
+  return success;
+}
+
+/**
+ * Parses all the spectra from file designated by the filename member
+ * variable.
+ * \returns True if the spectra are parsed successfully. False if otherwise.
+ */
+bool PWIZSpectrumCollection::parse() {
+
+  // spectrum_collection has already been parsed
+  if(is_parsed_) {
+    return false;
+  }
+
+  carp(CARP_DEBUG, "Using proteowizard to parse spectra.");
+
+  // todo see getFilters() below
+  //  pwiz::analysis::SpectrumListFactory::wrap(*reader, spectrum_filters);
+
+  // TODO add first/last scan to base class
+  // get a list of scans to include if requested
+  string range_string = Params::GetString("scan-number");
+  int first_scan = -1;
+  int last_scan = -1;
+
+  get_range_from_string(range_string, first_scan, last_scan);
+
+  if (first_scan == -1 || last_scan == -1) {
+    carp(CARP_FATAL, "The scan number range '%s' is invalid. "
+         "Must be of the form <first>-<last>.", range_string.c_str());
+  }
+
+  // get info for translating identifiers into scan numbers
+  pwiz::msdata::CVID native_id_format =
+    pwiz::msdata::id::getDefaultNativeIDFormat(*reader_);
+
+  // look at all spectra in file
+  pwiz::msdata::SpectrumListPtr all_spectra = reader_->run.spectrumListPtr;
+  
+  int num_spec = all_spectra->size();
+  carp(CARP_DEBUG, "PWIZ:Number of spectra:%i", num_spec);
+  bool assign_new_scans = false;
+  int scan_counter = 0;
+  for (int spec_idx = 0; spec_idx < num_spec; spec_idx++) {
+    carp(CARP_DETAILED_DEBUG, "Parsing spectrum index %d.", spec_idx);
+    pwiz::msdata::SpectrumPtr spectrum;
+    try {
+      spectrum = all_spectra->spectrum(spec_idx, true);
+    } catch (boost::bad_lexical_cast) {
+      carp(CARP_FATAL, "boost::bad_lexical_cast occured while parsing spectrum.\n"
+                       "Do your spectra contain z-lines?");
+    }
+    // skip if no peaks or not ms2
+    if (spectrum->defaultArrayLength < 1 ||
+        spectrum->cvParam(pwiz::msdata::MS_ms_level).valueAs<int>() != 2) {
+      continue;
+    }
+
+    // check that scan number is in range
+    int scan_number_begin, scan_number_end;
+    if (!assign_new_scans) {
+      string ms_peak_list_scans = spectrum->cvParam(pwiz::msdata::MS_peak_list_scans).value;
+      string ms_spectrum_title = spectrum->cvParam(pwiz::msdata::MS_spectrum_title).value;
+      carp(CARP_DETAILED_DEBUG, "ms_peak_list_scans:%s", ms_peak_list_scans.c_str());
+      carp(CARP_DETAILED_DEBUG, "ms_spectrum_title:%s", ms_spectrum_title.c_str());
+      if (ms_peak_list_scans.empty() || !get_first_last_scan_from_string(ms_peak_list_scans, scan_number_begin, scan_number_end)) {
+        if (ms_spectrum_title.empty() || !parseFirstLastScanFromTitle(ms_spectrum_title, scan_number_begin, scan_number_end)) {
+          string scan_value = pwiz::msdata::id::translateNativeIDToScanNumber(
+          native_id_format, spectrum->id);
+          carp(CARP_DETAILED_DEBUG, "scan_value:%s", scan_value.c_str());
+          if (scan_value.empty() || !get_range_from_string<int>(
+            scan_value.c_str(), scan_number_begin, scan_number_end)) {
+              assign_new_scans = true;
+              carp(CARP_ERROR, "Proteowizard parser could not determine scan numbers "
+                         "for this file, assigning new scan numbers.");
+          } else {
+            carp(CARP_DETAILED_DEBUG, "found scan:%i-%i from native id", scan_number_begin, scan_number_end);
+          }
+        } else {
+          carp(CARP_DETAILED_DEBUG, "found scan:%i-%i from ms_spectrum_title", scan_number_begin, scan_number_end);
+        }
+      } else {
+        carp(CARP_DETAILED_DEBUG, "found scan:%i-%i from ms_peak_list_scans", scan_number_begin, scan_number_end);
+      }
+      if (scan_number_begin == 0) {
+        // PWiz assigns scan numbers starting from 0 if they are missing. In this case, we re-assign starting from 1 below.
+        carp_once(CARP_INFO, "Parser could not determine scan numbers for this "
+                             "file, using ordinal numbers as scan numbers.");
+        assign_new_scans = true;
+      }
+    }
+    if (assign_new_scans) {
+      carp_once(CARP_WARNING,
+           "Proteowizard parser could not determine scan numbers "
+           "for this file. Assigning new scan numbers.");
+      scan_number_begin = ++scan_counter;
+      scan_number_end = scan_number_begin;
+    }
+    carp(CARP_DETAILED_DEBUG, "found scan:%i %i-%i", scan_number_begin, first_scan, last_scan);
+    if( scan_number_end < first_scan ) {
+      continue;
+    } else if( scan_number_begin > last_scan ) {
+      break;
+    }
+
+    Crux::Spectrum* crux_spectrum = new Crux::Spectrum();
+    if (crux_spectrum->parsePwizSpecInfo(spectrum, scan_number_begin, scan_number_end)) {
+      addSpectrumToEnd(crux_spectrum);
+    } else {
+      delete crux_spectrum;
+    }
+  }
+
+  is_parsed_ = true;
+
+  return true;
+}
+
+/**
+ * Parses a single spectrum from a spectrum_collection with first scan
+ * number equal to first_scan.  Removes any existing information in
+ * the given spectrum. 
+ * \returns True if the spectrum was allocated, false on error.
+ */
+bool PWIZSpectrumCollection::getSpectrum(
+  int first_scan,      ///< The first scan of the spectrum to retrieve -in
+  Crux::Spectrum* spectrum   ///< Put the spectrum info here
+  ) {
+  parse();
+  return SpectrumCollection::getSpectrum(first_scan, spectrum);
+}
+
+/**
+ * Parses a single spectrum from a spectrum_collection with first scan
+ * number equal to first_scan.
+ * \returns The spectrum data from file or NULL.
+ */
+Crux::Spectrum* PWIZSpectrumCollection::getSpectrum(
+  int first_scan      ///< The first scan of the spectrum to retrieve -in
+  ) {
+
+  parse();
+  return SpectrumCollection::getSpectrum(first_scan);
+}
+
+/*
+void getFilters() {  
+  // select only the MS2 level spectra and only those in the given scan range
+  ostringstream string_builder;
+  vector<string> spectrum_filters;
+  spectrum_filters.push_back("msLevel 2");
+
+  string_builder << "scanNumber [";
+  string_builder << first_scan_;
+  string_builder << ",";
+  string_builder << last_scan_;
+  string_buildter << "]";
+  spectrum_filters.push_back(string_builder.c_str());
+  // where filters include scan range, ms2 only
+}
+*/
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/PWIZSpectrumCollection.h b/src/io/PWIZSpectrumCollection.h
new file mode 100644
index 0000000..0c7d86b
--- /dev/null
+++ b/src/io/PWIZSpectrumCollection.h
@@ -0,0 +1,82 @@
+/**
+ * \file PWIZSpectrumCollection.h 
+ * AUTHOR: Barbara Frewen
+ * CREATE DATE: 21 April 2011
+ * \brief Class for accessing spectra using the proteoewizard library.
+ */
+#ifndef PWIZ_SPECTRUM_COLLECTION_H
+#define PWIZ_SPECTRUM_COLLECTION_H
+
+#include "SpectrumCollection.h"
+
+#include "pwiz/data/msdata/MSDataFile.hpp"
+
+/**
+ * \class SpectrumCollection
+ * \brief An abstract class for accessing spectra from a file.
+ */
+class PWIZSpectrumCollection : public Crux::SpectrumCollection {
+
+ protected:
+  pwiz::msdata::MSDataFile* reader_;
+  
+  /**
+   * Parses the first/last scan from the title
+   * \returns whether parse was successful.
+   * For MGF files that place their scan numbers in the title string
+   */
+  bool parseFirstLastScanFromTitle(
+    std::string& scan_title_str, ///< title string to parse -in
+    int& first_scan, ///< first scan -out
+    int& last_scan ///< last scan -out
+  );
+  
+ public:
+  /**
+   * Constructor sets filename and initializes member variables.
+   */
+  PWIZSpectrumCollection(
+    const std::string& filename ///< The spectrum collection filename. -in
+  );
+
+  /**
+   * Default Constructor
+   */
+  virtual ~PWIZSpectrumCollection();
+
+  /**
+   * Parses all the spectra from file designated by the filename member
+   * variable.
+   * \returns TRUE if the spectra are parsed successfully. FALSE if otherwise.
+   */
+  virtual bool parse();
+
+  /**
+   * Parses a single spectrum from a spectrum_collection with first scan
+   * number equal to first_scan.
+   * \returns The newly allocated Spectrum or NULL if scan number not found.
+   */
+  virtual Crux::Spectrum* getSpectrum(
+    int first_scan      ///< The first scan of the spectrum to retrieve -in
+  );
+
+  /**
+   * Parses a single spectrum from a spectrum_collection with first scan
+   * number equal to first_scan.  Removes any existing information in the
+   * given spectrum.
+   * \returns True if the spectrum was allocated, false on error.
+   */
+  virtual bool getSpectrum(
+    int first_scan,      ///< The first scan of the spectrum to retrieve -in
+    Crux::Spectrum* spectrum   ///< Put the spectrum info here
+  );
+
+};
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/PepXMLReader.cpp b/src/io/PepXMLReader.cpp
new file mode 100644
index 0000000..3cb0b9f
--- /dev/null
+++ b/src/io/PepXMLReader.cpp
@@ -0,0 +1,606 @@
+/*************************************************************************
+ * \file PepXMLReader.cpp
+ * \brief Object for parsing pepxml files
+ *************************************************************************/
+
+#include "expat.h"
+#include "PepXMLReader.h"
+#include "util/mass.h"
+#include "util/AminoAcidUtil.h"
+#include "util/MathUtil.h"
+#include "model/Protein.h"
+#include "model/PostProcessProtein.h"
+#include "model/Peptide.h"
+#include "DelimitedFile.h"
+#include "parameter.h"
+#include "MatchCollectionParser.h"
+
+#include <cstdio>
+#include <cstring>
+#include <iostream>
+
+using namespace std;
+using namespace Crux;
+
+void open_handler(void *data, const char *el, const char **attr) {
+  PepXMLReader* reader = (PepXMLReader*)data;
+  if (strcmp(el, "aminoacid_modification") == 0) {
+    reader->aminoacidModificationOpen(attr);
+  } else if (strcmp(el, "spectrum_query") == 0) {
+    reader->spectrumQueryOpen(attr);
+  } else if (strcmp(el, "search_result") == 0) {
+    reader->searchResultOpen();
+  } else if (strcmp(el, "search_hit") == 0) {
+    reader->searchHitOpen(attr);
+  } else if (strcmp(el, "mod_aminoacid_mass") == 0) {
+    reader->modAminoAcidMassOpen(attr);
+  } else if (strcmp(el, "alternative_protein") == 0) {
+    reader->alternativeProteinOpen(attr);
+  } else if (strcmp(el, "search_score") == 0) {
+    reader->searchScoreOpen(attr);
+  } else if (strcmp(el, "peptideprophet_result") == 0) {
+    reader->peptideProphetResultOpen(attr);
+  } else {
+    carp(CARP_DEBUG, "Unsupported open tag:%s", el);
+  }
+}
+
+void close_handler(void *data, const char *el) {
+  PepXMLReader* reader = (PepXMLReader*)data;
+  if (strcmp(el, "aminoacid_modification") == 0) {
+    reader->aminoacidModificationClose();
+  } else if (strcmp(el, "spectrum_query") == 0) {
+    reader->spectrumQueryClose();
+  } else if (strcmp(el, "search_result") == 0) {
+    reader->searchResultClose();
+  } else if (strcmp(el, "search_hit") == 0) {
+    reader->searchHitClose();
+  } else if (strcmp(el, "mod_aminoacid_mass") == 0) {
+    reader->modAminoAcidMassClose();
+  } else if (strcmp(el, "alternative_protein") == 0) {
+    reader->alternativeProteinClose();
+  } else if (strcmp(el, "search_score") == 0) {
+    reader->searchScoreClose();
+  } else if (strcmp(el, "peptideprophet_result") == 0) {
+    reader->peptideProphetResultClose();
+  } else {
+    carp(CARP_DEBUG, "Unsupported close tag:%s", el);
+  }
+}  /* End of end handler */
+
+/**
+ * Initializes the object
+ */
+void PepXMLReader::init() {
+  aminoacid_modification_open_ = false;
+  spectrum_query_open_ = false;
+  search_result_open_ = false;
+  search_hit_open_ = false;
+  alternative_protein_open_ = false;
+  search_score_open_ = false;
+  peptideprophet_result_open_ = false;
+
+  current_spectrum_ = NULL;
+}
+
+/**
+ * \returns an initialized object
+ */
+PepXMLReader::PepXMLReader() : PSMReader() {
+  init();
+}
+
+/**
+ * \returns an object initialized with the file_path
+ */
+PepXMLReader::PepXMLReader(
+  const string& file_path ///< the path of the pep.xml file
+  ) : PSMReader(file_path) {
+  init();
+}
+
+/**
+ * \returns an object initialized with the xml path, and the target,decoy databases
+ */
+PepXMLReader::PepXMLReader(
+  const string& file_path, ///< the path of the pep.xml
+  Database* database, ///< the protein database
+  Database* decoy_database ///< the decoy protein database (can be null)
+  ) : PSMReader(file_path, database, decoy_database) {
+  init();
+}
+
+/**
+ * default destructor
+ */
+PepXMLReader::~PepXMLReader() {
+}
+
+/**
+ * \returns the MatchCollection resulting from the parsed xml file
+ */
+MatchCollection* PepXMLReader::parse() {
+  FILE* file_ptr = fopen(file_path_.c_str(), "r");
+  if (file_ptr == NULL) {
+    carp(CARP_FATAL, "Opening %s or reading failed", file_path_.c_str());
+  }
+
+  XML_Parser xml_parser = XML_ParserCreate(NULL);
+
+  if (!xml_parser) {
+    carp(CARP_FATAL, "Couldn't allocate memory for parser");
+  }
+
+  current_match_collection_ = new MatchCollection();
+  current_match_collection_->preparePostProcess();
+  XML_SetUserData(xml_parser, this);
+  XML_SetElementHandler(xml_parser, open_handler, close_handler);
+
+  int done = 0;
+  while (!done) {
+    char buf[8192];
+    int len = fread(buf, 1, sizeof(buf), file_ptr);
+    if (ferror(stdin)) {
+      carp(CARP_FATAL, "Read error");
+    }
+    done = feof(file_ptr);
+    if (!XML_Parse(xml_parser, buf, len, done)) {
+      carp(CARP_FATAL, "Parse error at line %d:\n%s\n",
+           (int)XML_GetCurrentLineNumber(xml_parser),
+           XML_ErrorString(XML_GetErrorCode(xml_parser)));
+    }
+  }
+  fclose(file_ptr);
+  return current_match_collection_;
+}
+
+void PepXMLReader::aminoacidModificationOpen(const char** attr) {
+  if (aminoacid_modification_open_) {
+    carp(CARP_FATAL, "aminoacid_modification not closed before another was opened!");
+  }
+  aminoacid_modification_open_ = true;
+
+  ModPosition pos = ANY;
+  char aa = '\0';
+  double mass = 0, dMass = 0;
+  bool variable = false;
+  char symbol = '\0';
+
+  for (int i = 0; attr[i]; i += 2) {
+    if (strcmp(attr[i], "aminoacid") == 0) {
+      aa = attr[i + 1][0];
+    } else if (strcmp(attr[i], "mass") == 0) {
+      mass = atof(attr[i + 1]);
+    } else if (strcmp(attr[i], "massdiff") == 0) {
+      dMass = atof(attr[i + 1]);
+    } else if (strcmp(attr[i], "variable") == 0) {
+      variable = strcmp(attr[i + 1], "Y") == 0;
+    } else if (strcmp(attr[i], "peptide_terminus") == 0) {
+      // TODO: is this protein terminus?
+      if (strcmp(attr[i + 1], "n") == 0) {
+        pos = PEPTIDE_N;
+      } else if (strcmp(attr[i + 1], "c") == 0) {
+        pos = PEPTIDE_C;
+      } else if (strcmp(attr[i + 1], "nc") == 0) {
+        //pos = PEPTIDE_NC; TODO
+      }
+    } else if (strcmp(attr[i], "symbol") == 0) {
+      symbol = attr[i + 1][0];
+    }
+  }
+
+  ModificationDefinition::New(string(1, aa), dMass, pos, !variable);
+}
+
+void PepXMLReader::aminoacidModificationClose() {
+  aminoacid_modification_open_ = false;
+}
+
+/**
+ * Handles the spectrum_query open tag event 
+ */
+void PepXMLReader::spectrumQueryOpen(
+  const char** attr ///< attribute array for element
+  ) {
+  if (spectrum_query_open_) {
+    carp(CARP_FATAL, "spectrum_query not closed before another was opened!");
+  }
+  spectrum_query_open_ = true;
+
+  int first_scan = -1;
+  int last_scan = -1;
+  double precursor_mass = -1;
+  int  charge = -1;
+
+  for (int i = 0; attr[i]; i += 2) {
+    if (strcmp(attr[i], "start_scan") == 0) {
+      first_scan = atoi(attr[i+1]);
+    } else if (strcmp(attr[i], "end_scan") == 0) {
+      last_scan = atoi(attr[i+1]);
+    } else if (strcmp(attr[i], "precursor_neutral_mass") == 0) {
+      precursor_mass = atof(attr[i+1]);
+    } else if (strcmp(attr[i], "assumed_charge") == 0) {
+      charge = atoi(attr[i+1]);
+    }
+  }
+
+  double precursor_mz = (precursor_mass + (MASS_PROTON * (double) charge)) / (double)charge;
+  vector<int> charge_vec;
+  charge_vec.push_back(charge);
+  current_spectrum_ = new Crux::Spectrum(first_scan, last_scan, precursor_mz, charge_vec, "");
+  current_zstate_.setNeutralMass(precursor_mass, charge);
+}
+
+/**
+ * Handles the spectrum_query close tag event
+ */
+void PepXMLReader::spectrumQueryClose() {
+  spectrum_query_open_ = false;
+}
+
+/**
+ * Handles the search_result open tag event
+ */
+void PepXMLReader::searchResultOpen() {
+  if (search_result_open_) {
+    carp(CARP_FATAL, "search_result not closed before another opened!");
+  }
+  search_result_open_ = true;
+}
+
+/**
+ * Handles the search_result close tag event
+ */
+void PepXMLReader::searchResultClose() {
+  search_result_open_ = false;
+}
+
+/**
+ * /returns the start position of the peptide sequence within the protein
+ */
+int PepXMLReader::findStart(
+  Protein* protein,  ///< the protein to find the sequence 
+  string peptide_sequence, ///< the peptide sequence to find
+  string prev_aa, ///< the amino acid before the sequence in the protein
+  string next_aa ///< the next amino acid after the sequence in the protein
+  ) {
+  if (protein->getSequencePointer() == NULL) {
+    return -1;
+  }
+  int case_ = -1;
+  int ans = -1;
+
+  if (prev_aa == "-") {
+    case_ = 0;
+    ans = 1;
+  } else if (next_aa == "-") {
+    case_ = 1;
+    ans = protein->getLength() - peptide_sequence.length() + 1;
+  } else { 
+    //use the flanking amino acids to further constrain our search in the sequence
+    size_t pos = string::npos; 
+    string seq = prev_aa + peptide_sequence + next_aa;
+    string protein_seq = protein->getSequencePointer();
+    pos = protein_seq.find(seq);
+    if (pos == string::npos) {
+      carp(CARP_DEBUG, "could not find %s in protein %s\n%s", seq.c_str(), protein->getIdPointer().c_str(), protein_seq.c_str());
+      //finding the sequence with the flanks failed, try finding without the flanks.
+      seq = peptide_sequence;
+      pos = protein_seq.find(seq);
+      if (pos == string::npos) {
+        carp(CARP_FATAL, "could not find %s in protein %s\n%s",
+             seq.c_str(), protein->getIdPointer().c_str(), protein_seq.c_str());
+      }
+      case_ = 2;
+      ans = (pos+1);
+    } else {
+      case_ = 3;
+      ans = pos+2;
+    }
+  }
+
+  return ans;
+}
+
+/**
+ * Handles the search_hit open tag event
+ */
+void PepXMLReader::searchHitOpen(
+  const char** attr ///< atttribute array for element
+  ) {
+  if (search_hit_open_) {
+    carp(CARP_FATAL, "Search Hit not closed before another open!");
+  }
+  search_hit_open_ = true;
+  int hit_rank = -1;
+  string protein_string, prev_aa, next_aa;
+  unsigned by_ions_matched = 0;
+  unsigned by_ions_total = 0;
+  unsigned current_num_matches = 0;
+
+  for (int i = 0; attr[i]; i += 2) {
+    if (strcmp(attr[i], "hit_rank") == 0) {
+      hit_rank = atoi(attr[i+1]);
+    } else if (strcmp(attr[i], "peptide") == 0) {
+      current_peptide_sequence_ = attr[i+1];
+    } else if (strcmp(attr[i], "protein") == 0) {
+      protein_string = attr[i+1];
+    } else if (strcmp(attr[i], "num_tot_proteins") == 0) {
+      ; // do nothing.
+    } else if (strcmp(attr[i], "num_matched_ions") == 0) {
+      current_match_collection_->setScoredType(BY_IONS_MATCHED, true);
+      by_ions_matched = atoi(attr[i+1]);  
+    } else if (strcmp(attr[i], "tot_num_ions") == 0) {
+      current_match_collection_->setScoredType(BY_IONS_TOTAL, true);
+      by_ions_total = atoi(attr[i+1]); 
+    } else if (strcmp(attr[i], "peptide_prev_aa") == 0) {
+      prev_aa = attr[i+1];
+    } else if (strcmp(attr[i], "peptide_next_aa") == 0) {
+      next_aa = attr[i+1];
+    } else if (strcmp(attr[i], "num_matched_peptides") == 0) {
+      current_num_matches = atoi(attr[i+1]);
+    }
+  }
+
+  unsigned char length = current_peptide_sequence_.length();
+  bool is_decoy;
+
+  Protein* protein =
+    MatchCollectionParser::getProtein(database_, decoy_database_, protein_string, is_decoy);
+  int start_idx = protein->findStart(current_peptide_sequence_, prev_aa, next_aa);
+  Peptide* peptide = new Crux::Peptide(length, protein, start_idx);
+
+  current_match_ = new Match(peptide, current_spectrum_, current_zstate_, is_decoy);
+  if (is_decoy) {
+    current_match_->setNullPeptide(true);
+  }
+
+  if ((hit_rank > 0) && (current_match_->getRank(XCORR) == 0)) {
+    current_match_->setRank(XCORR, hit_rank);
+  }
+  if (by_ions_total > 0) {
+    current_match_->setScore(BY_IONS_MATCHED, by_ions_matched);
+    current_match_->setScore(BY_IONS_TOTAL, by_ions_total);
+  }
+
+  if (current_num_matches > 0) {
+    current_match_->setLnExperimentSize(logf(current_num_matches));
+    current_match_collection_->setHasDistinctMatches(true);
+  } else { 
+    current_match_->setLnExperimentSize(0);
+  }
+}
+
+/**
+ * Handles the search_hit close tag event
+ */
+void PepXMLReader::searchHitClose() {
+  search_hit_open_ = false;
+  //We should have all the information needed to add the match object.
+  current_match_collection_->addMatch(current_match_);
+}
+
+/**
+ * Handles the mod_aminoacid_mass open tag event
+ */
+void PepXMLReader::modAminoAcidMassOpen(
+  const char** attr ///< attribute array for element
+  ) {
+  mod_aminoacid_mass_open_ = true;
+  int position = -1;
+  FLOAT_T mod_mass = 0;
+  bool have_mod_mass = false;
+  
+  for (int idx = 0; attr[idx]; idx += 2) {
+    if (strcmp(attr[idx], "position") == 0) {
+      position = atoi(attr[idx+1]);
+    } else if (strcmp(attr[idx], "mass") == 0) {
+      mod_mass = atof(attr[idx+1]);
+      have_mod_mass = true;
+    }
+  }
+
+  if (position > 0 && have_mod_mass) {
+    char* seq = current_match_->getPeptide()->getSequence();
+    ModPosition mod_position = ANY;
+    if (position <= 1) {
+      mod_position = PEPTIDE_N;
+    } else if (position >= strlen(seq)) {
+      mod_position = PEPTIDE_C;
+    }
+    char aa = seq[position - 1];
+    free(seq);
+    double staticDeltaMass = ModificationDefinition::DeltaMass(aa, mod_position);
+    mod_mass -= staticDeltaMass;
+    // mass includes amino acid mass, subtract it
+    mod_mass -= AminoAcidUtil::GetMass(aa, Params::GetString("isotopic-mass") == "mono");
+    if (MathUtil::Round(mod_mass, Params::GetInt("mod-precision")) != 0.0) {
+      // look for a variable mod with this mass
+      const ModificationDefinition* mod = ModificationDefinition::Find(mod_mass, false);
+      if (mod == NULL) {
+        // no variable mod with this mass, try finding a static one
+        mod = ModificationDefinition::Find(staticDeltaMass, true);
+      }
+      if (mod != NULL) {
+        if (!mod->Static()) {
+          current_match_->getPeptide()->addMod(mod, position - 1);
+        }
+      } else {
+        // mod was not defined at top of file, add it as a variable modification
+        mod_mass = MathUtil::Round(mod_mass, Params::GetInt("mod-precision"));
+        mod = ModificationDefinition::NewVarMod(string(1, aa), mod_mass, UNKNOWN);
+        current_match_->getPeptide()->addMod(mod, position - 1);
+      }
+    }
+  } else {
+    carp(CARP_WARNING, "mod_aminoacid_mass error");
+  }
+}
+
+/**
+ * Handles the mod_aminoacid_mass close tag event
+ */
+void PepXMLReader::modAminoAcidMassClose() {
+  mod_aminoacid_mass_open_ = false;
+}
+
+/**
+ * Handles the alternative_protein open tag event
+ */
+void PepXMLReader::alternativeProteinOpen(
+  const char** attr ///< atttribute array for element
+  ) {
+  alternative_protein_open_ = true;
+
+  string protein_string;
+  string prev_aa;
+  string next_aa;
+
+  for (int i = 0; attr[i]; i += 2) {
+    if (strcmp(attr[i], "protein") == 0) {
+      protein_string = attr[i+1];
+    } else if (strcmp(attr[i], "peptide_prev_aa") == 0) {
+      prev_aa = attr[i+1];
+    } else if (strcmp(attr[i], "peptide_next_aa") == 0) {
+      next_aa = attr[i+1];
+    }
+  }
+  
+  bool is_decoy;
+
+  Protein* protein = 
+    MatchCollectionParser::getProtein(database_, decoy_database_, protein_string, is_decoy);
+  if (is_decoy) {
+    current_match_->setNullPeptide(true);
+  }
+  int start_idx = protein->findStart(current_peptide_sequence_, prev_aa, next_aa);
+
+  PeptideSrc* src = new PeptideSrc(INVALID_DIGEST, protein, start_idx);
+  current_match_->getPeptide()->addPeptideSrc(src);
+}
+
+/**
+ * Handles the alternative_protein close tag event
+ */
+void PepXMLReader::alternativeProteinClose() {
+  alternative_protein_open_ = false;
+}
+
+/**
+ * Handles the search_score open tag event
+ */
+void PepXMLReader::searchScoreOpen(
+  const char** attr ///< attribute array for element
+  ) {
+  search_score_open_ = true;
+  string name;
+  double value = 0.0;
+
+  for (int i = 0; attr[i]; i += 2) {
+    if (strcmp(attr[i], "name") == 0) {
+      name = attr[i+1];
+    } else if (strcmp(attr[i], "value") == 0) {
+      value = atof(attr[i+1]);
+    }
+  }
+
+  if (name == "xcorr_score" || name == "xcorr") {
+    current_match_collection_->setScoredType(XCORR, true);
+    current_match_->setScore(XCORR, value);
+  } else if (name == "xcorr_rank") {
+    current_match_->setRank(XCORR, value);
+  } else if (name == "expect") {
+    current_match_->setScore(EVALUE, value);
+  } else if (name == "delta_cn" || name == "deltacn") {
+    current_match_->setScore(DELTA_CN, value);
+  } else if (name == "sp" || name == "spscore") {
+    current_match_collection_->setScoredType(SP, true);
+    current_match_->setScore(SP, value);
+  } else if (name == "sp_rank" || name == "sprank") {
+    current_match_->setRank(SP, value);
+  } else if (name == "percolator_score") {
+    current_match_collection_->setScoredType(PERCOLATOR_SCORE, true);
+    current_match_->setScore(PERCOLATOR_SCORE, value);
+  } else if (name == "percolator_qvalue") {
+    current_match_collection_->setScoredType(PERCOLATOR_QVALUE, true);
+    current_match_->setScore(PERCOLATOR_QVALUE, value);
+  } else if (name == "percolator_PEP") {
+    current_match_collection_->setScoredType(PERCOLATOR_PEP, true);
+    current_match_->setScore(PERCOLATOR_PEP, value);
+  } else if (name == "qranker_score") {
+    current_match_collection_->setScoredType(QRANKER_SCORE, true);
+    current_match_->setScore(QRANKER_SCORE, value);
+  } else if (name == "qranker_qvalue") {
+    current_match_collection_->setScoredType(QRANKER_QVALUE, true);
+    current_match_->setScore(QRANKER_QVALUE, value);
+  } else if (name == "qranker_PEP") {
+    current_match_collection_->setScoredType(QRANKER_PEP, true);
+    current_match_->setScore(QRANKER_PEP, value);
+  } 
+  //set the custom score
+  current_match_->setCustomScore(name, value);
+}
+
+/**
+ * Handles the search_score close tag event
+ */
+void PepXMLReader::searchScoreClose() {
+  search_score_open_ = false;
+}
+
+/**
+ * Handles the peptideprophet_result open tag event
+ */
+void PepXMLReader::peptideProphetResultOpen(
+  const char** attr ///< attribute array for element
+  ) {
+  if (peptideprophet_result_open_) {
+    carp(CARP_FATAL, "peptideprophet_result_open_ before close!");
+  }  
+
+  peptideprophet_result_open_ = true;
+
+  FLOAT_T probability = 0;
+  bool probability_parsed = false;
+  for (int idx = 0; attr[idx]; idx += 2) {
+    if (strcmp(attr[idx], "probability") == 0) {
+      probability = atof(attr[idx+1]);
+      probability_parsed = true;
+    }
+  }
+  
+  //Place the peptideprophet probability score as a custom score.
+  if (probability_parsed) {
+    current_match_->setCustomScore("peptideprophet", probability);
+  } else {
+    carp_once(CARP_WARNING, "Couldn't parse probability from peptideprophet_result");
+  }
+}
+
+/**
+ * Handles the peptideprophet_result close tag event
+ */
+void PepXMLReader::peptideProphetResultClose() {
+  peptideprophet_result_open_ = false;
+}
+
+/**
+ * \returns the MatchCollection resulting from the parsed xml file
+ */
+MatchCollection* PepXMLReader::parse(
+  const string& file_path, ///< path of the xml file
+  Database* database, ///< target protein database
+  Database* decoy_database ///< decoy protein database (can be null)
+  ) {
+  PepXMLReader reader(file_path);
+  reader.setDatabase(database);
+  reader.setDecoyDatabase(decoy_database);
+  return reader.parse();
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/PepXMLReader.h b/src/io/PepXMLReader.h
new file mode 100644
index 0000000..b43bc65
--- /dev/null
+++ b/src/io/PepXMLReader.h
@@ -0,0 +1,198 @@
+/**
+ * \file PepXMLReader.h
+ * $Revision: 1.00 $ 
+ * DATE: July 11th, 2012
+ * AUTHOR: Sean McIlwain
+ * \brief Object for reading pep.xml.  This object will read a pepxml file,
+ * creating a matchcollection object.  Use the expat library in MSToolkit.
+ * 
+ **************************************************************************/
+
+#ifndef PEPXMLREADER_H
+#define PEPXMLREADER_H
+#include <string>
+#include <vector>
+
+#include "PSMReader.h"
+#include "model/Spectrum.h"
+#include "model/Match.h"
+#include "model/MatchCollection.h"
+
+class PepXMLReader : public PSMReader {
+
+ protected:
+
+  SpectrumZState current_zstate_; ///< keeps track of the current zstate
+  Crux::Spectrum* current_spectrum_; ///< Keeps track of the current spectrum object
+  Crux::Match* current_match_; ///< keeps track of the current match object
+  std::string current_peptide_sequence_; ///< keeps track of the current peptide sequence
+  MatchCollection* current_match_collection_; ///< keeps track of the current match collection object
+
+  /*State variable for element tags */
+  bool aminoacid_modification_open_;
+  bool spectrum_query_open_; ///< are we within a spectrum_query?
+  bool search_result_open_; ///< are we within a search_result element
+  bool search_hit_open_;  ///< are we within a search 
+  bool mod_aminoacid_mass_open_; ///< are we within a mod_aminoacid_mass element?
+  bool alternative_protein_open_; ///< are we within a alternative_protein element
+  bool search_score_open_; ///< are we within a search_score element
+  bool peptideprophet_result_open_; ///< are we within a peptideprophet_result element?
+  
+  /**
+   * /returns the start position of the peptide sequence within the protein
+   */
+  int findStart(
+    Crux::Protein* protein, ///< the protein to find the sequence 
+    std::string peptide_sequence, ///< the peptide sequence to find
+    std::string prev_aa, ///< the amino acid before the sequence in the protein
+    std::string next_aa ///< the next amino acid after the sequence in the protein
+  );
+
+  /* Specific element tag handler functions */
+
+  void aminoacidModificationOpen(const char** attr);
+  void aminoacidModificationClose();
+
+  /**
+   * Handles the spectrum_query open tag event 
+   */
+  void spectrumQueryOpen(
+    const char** attr ///< attribute array for element
+  );
+
+  /**
+   * Handles the spectrum_query close tag event
+   */
+  void spectrumQueryClose();
+
+  /**
+   * Handles the search_result open tag event
+   */
+  void searchResultOpen();
+  
+  /**
+   * Handles the search_result close tag event
+   */
+  void searchResultClose();
+
+  /**
+   * Handles the search_hit open tag event
+   */
+  void searchHitOpen(
+    const char** attr ///< atttribute array for element
+  );
+
+  /**
+   * Handles the search_hit close tag event
+   */
+  void searchHitClose();
+
+  /**
+   * Handles the mod_aminoacid_mass open tag event
+   */
+  void modAminoAcidMassOpen(
+    const char** attr ///< attribute array for element
+  );
+  
+  /**
+   * Handles the mod_aminoacid_mass close tag event
+   */
+  void modAminoAcidMassClose();
+  
+  /**
+   * Handles the alternative_protein open tag event
+   */
+  void alternativeProteinOpen(
+    const char** attr ///< attribute array for element
+  );
+
+  /**
+   * Handles the alternative_protein close tag event
+   */
+  void alternativeProteinClose();
+
+  /**
+   * Handles the search_score open tag event
+   */
+  void searchScoreOpen(const char** attr);
+
+  /**
+   * Handles the search_score close tag event
+   */
+  void searchScoreClose();
+
+  /**
+   * Handles the peptideprophet_result open tag event
+   */
+  void peptideProphetResultOpen(
+    const char** attr ///< attribute array for element
+    );  
+
+  /**
+   * Handles the peptideprophet_result close tag event
+   */
+  void peptideProphetResultClose();  
+
+  /**
+   * Initializes the object
+   */
+  void init();
+
+
+ public:  
+
+  /**
+   * \returns an initialized object
+   */
+  PepXMLReader();
+
+
+  /**
+   * \returns an object initialized with the file_path
+   */
+  PepXMLReader(
+    const std::string& file_path_ ///< the path of the pep.xml file
+  );
+
+  /**
+   * \returns an object initialized with the xml path, and the target,decoy databases
+   */
+  PepXMLReader(
+    const std::string& file_path_, ///< the path of the pep.xml
+    Database* database, ///< the protein database
+    Database* decoy_database = NULL ///< the decoy protein database (can be null)
+    );
+
+  /**
+   * \returns the MatchCollection resulting from the parsed xml file
+   */
+  MatchCollection* parse();
+
+  /**
+   * \returns the MatchCollection resulting from the parsed xml file
+   */
+  static MatchCollection* parse(
+    const std::string& path, ///< path of the xml file
+    Database* database, ///< target protein database
+    Database* decoy_database ///< decoy protein database (can be null)
+  );
+
+
+  /*open/close handlers*/
+  friend void open_handler(void* data, const char* element, const char** attr);
+  friend void close_handler(void* data, const char* el);
+
+  /**
+   * default destructor
+   */
+  virtual ~PepXMLReader();
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/PepXMLWriter.cpp b/src/io/PepXMLWriter.cpp
new file mode 100644
index 0000000..3e47a74
--- /dev/null
+++ b/src/io/PepXMLWriter.cpp
@@ -0,0 +1,463 @@
+/**
+ * \file PepXMLWriter.cpp
+ * \brief Writes search results in the TPP-compliant .pep.xml format.
+ */
+#include <iostream>
+#include "PepXMLWriter.h"
+#include "util/AminoAcidUtil.h"
+#include "util/crux-utils.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+#include "model/MatchCollection.h"
+
+using namespace std;
+
+PepXMLWriter::PepXMLWriter():
+  file_(NULL), current_index_(1), mass_precision_(Params::GetInt("mass-precision")),
+  enzyme_(get_enzyme_type_parameter("enzyme")),
+  precision_(Params::GetInt("precision")) {
+}
+
+PepXMLWriter::~PepXMLWriter() {
+  closeFile();
+}
+
+/**
+ * Open a file of the given name.  Replace an existing file if
+ * overwrite is true, else exit if an existing file is found.
+ */
+void PepXMLWriter::openFile(const char* filename, bool overwrite) {
+  file_ = create_file_in_path(filename, "", overwrite);
+}
+
+/**
+ * Close the file, if open.
+ */
+void PepXMLWriter::closeFile() {
+  if (file_) {
+    fclose(file_);
+    file_ = NULL;
+  }
+}
+
+/**
+ * Write all of the elements that preceed the spectrum_query
+ * elements.
+ * Requires OpenFile has been called without CloseFile.
+ */
+void PepXMLWriter::writeHeader() {
+  MatchCollection::printXmlHeader(file_, "");
+}
+
+/**
+ * Close the msms_run_summaryand msms_pipeline_analysis tags.
+ * Requires OpenFile has been called without CloseFile.
+ */
+void PepXMLWriter::writeFooter() {
+  closeSpectrumElement();
+  MatchCollection::printXmlFooter(file_);
+}
+
+/**
+ * Write the details for a PSM to be contained in a spectrum_query
+ * element.  
+ * Begins with the <spectrum_query> element if spectrum_scan_number is
+ * different than in the last writePSM() call.  Writes one
+ * <search_hit> in the list of <search_elements>.  To add more
+ * <search_hits>, call writePSM() again with the same spectrum_scan_number
+ *
+ * Requires that the arrays pre_aas, post_aas,
+ * protein_names, protein_descriptions are all num_proteins long.
+ * Assumes scores is NUMBER_SCORER_TYPES long. 
+ * Requires OpenFile has been called without CloseFile.
+ */
+void PepXMLWriter::writePSM(
+  int spectrum_scan_number, ///< identifier for the spectrum
+  const char* filename, ///< file the spectrum came from
+  double spectrum_neutral_mass, ///< computed mass of the spectrum at this charge state
+  int charge, ///< assumed charge state for the match
+  int* PSM_ranks, ///< rank of this peptide for the spectrum
+  const char* unmodified_peptide_sequence, ///< sequence with no mods
+  const char* modified_peptide_sequence, ///< either with symbols or masses
+  double peptide_mass, ///< mass of the peptide sequence
+  int num_proteins, ///< proteins matched to this peptide
+  const char* flanking_aas, ///< "XY, AB, " X and Y are the preceeding and
+                            /// following aas in the first protein 
+  vector<string>& protein_names, ///<
+  vector<string>& protein_descriptions, ///<
+  bool* scores_computed,
+  double* scores, ///< indexed by score type
+  unsigned cur_num_matches
+) {
+  string spectrum_title = getSpectrumTitle(spectrum_scan_number, filename, charge);
+  //cerr<<"by_ion_fraction_matched: "<<by_ion_fraction_matched<<endl;
+  // close the last spec element if this is a new spectrum and not the first
+  if (!last_spectrum_printed_.empty() && last_spectrum_printed_ != spectrum_title) {
+    closeSpectrumElement();
+  }
+
+  // print the spec info if this is a new spectrum
+  if (last_spectrum_printed_ != spectrum_title) {
+    printSpectrumElement(spectrum_scan_number, spectrum_title.c_str(), 
+                         spectrum_neutral_mass, charge);
+    last_spectrum_printed_ = spectrum_title;
+  }
+  // else, just add to the search_result list
+  //cerr<<"3.LnExperimentSize: "<<current_ln_experiment_size<<endl;
+  printPeptideElement(PSM_ranks, 
+    unmodified_peptide_sequence,
+    modified_peptide_sequence, 
+    peptide_mass,
+    spectrum_neutral_mass,
+    num_proteins,
+    flanking_aas,
+    protein_names,
+    protein_descriptions,
+    scores_computed,
+    scores,
+    cur_num_matches);
+}
+
+/**
+ * Write the <spectrum_query> element and the <search_result> tag.
+ */
+void PepXMLWriter::printSpectrumElement(int spectrum_scan_number, 
+                                        const char* spectrum_title,
+                                        double spectrum_neutral_mass, 
+                                        int charge) {
+  fprintf(file_, "    <spectrum_query spectrum=\"%s\" start_scan=\"%i\""
+          " end_scan=\"%i\" precursor_neutral_mass=\"%.*f\""
+          " assumed_charge=\"%i\" index=\"%i\">\n"
+          "    <search_result>\n",
+          spectrum_title,
+          spectrum_scan_number,
+          spectrum_scan_number,
+          Params::GetInt("mass-precision"),
+          spectrum_neutral_mass,
+          charge,
+          current_index_++);
+}
+
+string PepXMLWriter::getSpectrumTitle(int spectrum_scan_number, 
+                                      const char* filename,
+                                      int charge) {
+  string formatted(filename);
+  if (StringUtils::IEndsWith(formatted, ".pid")) {
+    // Remove bullseye extension if it exists
+    formatted.erase(formatted.length() - 4);
+  }
+  std::ostringstream spectrum_id;
+  spectrum_id << formatted << "." << std::setw(5)  << std::setfill('0')
+              << spectrum_scan_number << "." << std::setw(5) 
+              << std::setfill('0') << spectrum_scan_number << "." << charge;
+  return spectrum_id.str();
+}
+
+void PepXMLWriter::closeSpectrumElement() {
+  fprintf(file_, "    </search_result>\n    </spectrum_query>\n");
+}
+
+/**
+ * Print everything between the <search_hit> tags for this match
+ */
+void PepXMLWriter::printPeptideElement(int *ranks,
+  const char* peptide_sequence,
+  const char* modified_peptide_sequence,
+  double peptide_mass,
+  double spectrum_mass,
+  int num_proteins,
+  const char* flanking_aas,
+  vector<string>& protein_names,
+  vector<string>& protein_descriptions,
+  bool* scores_computed,
+  double* scores,
+  unsigned current_num_matches  
+) {
+  // get values
+  char flanking_aas_prev = flanking_aas[0];
+  char flanking_aas_next = flanking_aas[1];
+  string protein_id = (!protein_names.empty()) ? protein_names.front() : "";
+  string protein_annotation = (!protein_descriptions.empty()) ?
+    protein_descriptions.front() : "";
+  int num_tol_term = get_num_terminal_cleavage(peptide_sequence,
+                                               flanking_aas_prev,
+                                               flanking_aas_next,
+                                               enzyme_);
+  int num_missed_cleavages = get_num_internal_cleavage(peptide_sequence,
+                                                       enzyme_);
+
+  // print <search_hit> tag
+  fprintf(file_, "    <search_hit hit_rank=\"%i\" peptide=\"%s\" "
+          "peptide_prev_aa=\"%c\" peptide_next_aa=\"%c\" protein=\"%s\" "
+          "num_tot_proteins=\"%i\" ",
+          ranks[XCORR], // -1 if unavailable, uses xcorr rank otherwise
+          peptide_sequence,
+          flanking_aas_prev,
+          flanking_aas_next,
+          protein_id.c_str(),
+          num_proteins);
+  if (scores_computed[BY_IONS_MATCHED]) {
+    fprintf(file_, "num_matched_ions=\"%i\" ", (unsigned)scores[BY_IONS_MATCHED]);
+  }
+  if (scores_computed[BY_IONS_TOTAL]) {
+    fprintf(file_, "tot_num_ions=\"%i\" ", (unsigned)scores[BY_IONS_TOTAL]);
+  }
+
+  if (flanking_aas_prev != 'X' && flanking_aas_next != 'X') {
+    fprintf(file_, "calc_neutral_pep_mass=\"%.*f\" "
+          "massdiff=\"%+.*f\" "
+          "num_tol_term=\"%i\" num_missed_cleavages=\"%i\" "
+          "num_matched_peptides=\"%i\""
+          " is_rejected=\"%i\" ",
+          mass_precision_,
+          peptide_mass,
+          mass_precision_,
+          spectrum_mass - peptide_mass,
+          num_tol_term, 
+          num_missed_cleavages, 
+          current_num_matches,
+          0);
+  } else {
+    fprintf(file_, "calc_neutral_pep_mass=\"%.*f\" "
+          "massdiff=\"%+.*f\" "
+          "num_tol_term=\"\" num_missed_cleavages=\"%i\" "
+          "num_matched_peptides=\"%i\""
+          " is_rejected=\"%i\" ",
+          mass_precision_,
+          peptide_mass,
+          mass_precision_,
+          spectrum_mass - peptide_mass, 
+          num_missed_cleavages, 
+          current_num_matches,
+          0);
+  }
+
+  fprintf(file_, "protein_descr=\"%s\">\n", protein_annotation.c_str());
+
+  // print additonal proteins
+  for(int prot_idx = 1; prot_idx < num_proteins; prot_idx++) {
+    int flank_idx = strlen("XX,") * prot_idx;
+    flanking_aas_prev = flanking_aas[flank_idx];
+    flanking_aas_next = flanking_aas[flank_idx + 1];
+    num_tol_term = get_num_terminal_cleavage(peptide_sequence,
+                                             flanking_aas_prev,
+                                             flanking_aas_next,
+                                             enzyme_);
+    protein_id = protein_names[prot_idx];
+    protein_annotation = protein_descriptions[prot_idx];
+    fprintf(file_, 
+            "        <alternative_protein protein=\"%s\" "
+            "protein_descr=\"%s\" "
+            "num_tol_term=\"%i\"  peptide_prev_aa=\"%c\" "
+            "peptide_next_aa=\"%c\"/> \n",
+            protein_id.c_str(),
+            protein_annotation.c_str(),
+            num_tol_term, 
+            flanking_aas_prev,
+            flanking_aas_next);
+  }
+
+  // print modifications
+  print_modifications_xml(modified_peptide_sequence, peptide_sequence, file_);
+
+  // print scores
+  printScores(scores, scores_computed, ranks);
+
+  // print post-search (analysis) fields
+  printAnalysis(scores, scores_computed);
+
+  // close the search_hit tag
+  fprintf(file_, "    </search_hit>\n");
+}
+
+void PepXMLWriter::printScores(
+  double* scores, 
+  bool* scores_computed,
+  int* ranks
+) {
+  string ranks_to_string[2] = {"sprank", "xcorr_rank"};
+  for (int i = 0; i < NUMBER_SCORER_TYPES; i++) {
+    if (i == BY_IONS_MATCHED || i == BY_IONS_TOTAL) {
+      continue;
+    }
+    if (scores_computed[i]) {
+      fprintf(file_, "        <search_score name=\"%s\" value=\"%.*f\" />\n",
+        scorer_type_to_string((SCORER_TYPE_T)i), precision_, scores[i]);
+      if (i < 2) {
+        fprintf(file_, "        <search_score name=\"%s\" value=\"%i\" />\n",
+          ranks_to_string[i].c_str(), ranks[i]);
+      }
+    }
+  }
+}
+
+
+void PepXMLWriter::printAnalysis(double* scores,
+                                 bool* scores_computed) {
+  // only write the analysis_result section for post-search psms
+  bool post_search = false;
+  if( scores_computed[PERCOLATOR_SCORE] 
+      || scores_computed[QRANKER_SCORE]
+      || scores_computed[DECOY_XCORR_QVALUE] 
+      || scores_computed[LOGP_QVALUE_WEIBULL_XCORR] ) {
+    post_search = true;
+  }
+
+  if( !post_search ) {
+    return;
+  }
+
+  SCORER_TYPE_T score = INVALID_SCORER_TYPE;
+  SCORER_TYPE_T qval = INVALID_SCORER_TYPE;
+  SCORER_TYPE_T pep = INVALID_SCORER_TYPE;
+  string score_name;
+  
+  if (scores_computed[PERCOLATOR_SCORE]) {
+    score = PERCOLATOR_SCORE;
+    qval = PERCOLATOR_QVALUE;
+    pep = PERCOLATOR_PEP;
+    score_name = "percolator_score";
+  } else if (scores_computed[QRANKER_SCORE]) {
+    score =  QRANKER_SCORE; 
+    qval = QRANKER_QVALUE;
+    pep = QRANKER_PEP;
+    score_name = "q-ranker_score";
+  } else if (scores_computed[LOGP_QVALUE_WEIBULL_XCORR]) {
+    qval = LOGP_QVALUE_WEIBULL_XCORR;
+    pep = LOGP_WEIBULL_PEP;
+  }
+
+  fprintf(file_, "<analysis_result analysis=\"peptideprophet\">\n");
+  fprintf(file_, "<peptideprophet_result probability=\"%.*f\">\n", 
+          precision_, (1 - scores[pep]));
+  fprintf(file_, "<search_score_summary>\n");
+  if (!score_name.empty()) {
+    fprintf(file_, "<parameter name=\"%s\" value=\"%.*f\"/>\n",
+            score_name.c_str(), precision_, scores[score]);
+  }
+  fprintf(file_, "<parameter name=\"%s\" value=\"%.*f\"/>\n", 
+          "qvalue", precision_, scores[qval]);
+  fprintf(file_, "<parameter name=\"%s\" value=\"%.*f\"/>\n", 
+          "pep", precision_, scores[pep]);
+  fprintf(file_, "</search_score_summary>\n");
+  fprintf(file_, "</peptideprophet_result>\n");
+  fprintf(file_, "</analysis_result>\n");
+}
+
+/**
+ * \brief prints both variable and static modifications for 
+ *  peptide sequence in xml format to the specificed output file
+ */
+void PepXMLWriter::print_modifications_xml(
+  const char* mod_seq,
+  const char* pep_seq,
+  FILE* output_file
+) {
+  carp(CARP_DEBUG, "print_modifications_xml:%s %s", mod_seq, pep_seq);
+  // variable modifications
+  int mod_precision = Params::GetInt("mod-precision");
+  map<int, double> var_mods = find_variable_modifications(mod_seq);
+  if (!var_mods.empty()) {
+    fprintf(output_file, "<modification_info modified_peptide=\"%s\">\n", mod_seq);
+    for (map<int, double>::iterator it = var_mods.begin(); it != var_mods.end(); ++it) {
+      fprintf(output_file, "<mod_aminoacid_mass position=\"%i\" mass=\"%.*f\"/>\n",
+              it->first,   //index
+              mod_precision, it->second); //mass
+    }
+    fprintf(output_file, "</modification_info>\n");
+  }
+
+  // static modifications
+  map<int, double> static_mods = find_static_modifications(pep_seq);
+  if (!static_mods.empty()) {
+    carp(CARP_DEBUG, "<modification_info modified_peptide=\"%s\">", pep_seq);
+    fprintf(output_file, "<modification_info modified_peptide=\"%s\">\n", pep_seq);
+    for (map<int, double>::iterator it = static_mods.begin(); it != static_mods.end(); ++it) {
+      fprintf(output_file, "<mod_aminoacid_mass position=\"%i\" mass=\"%.*f\"/>\n",
+              it->first,   //index
+              mod_precision, it->second); //mass
+    }
+    fprintf(output_file, "</modification_info>\n");
+  }
+}
+
+/**
+ * \brief takes an empty mapping of index to mass
+ * and extract information from mod sequence fill
+ * up map
+ */
+map<int, double> PepXMLWriter::find_variable_modifications(const char* mod_seq) {
+  bool monoisotopic = get_mass_type_parameter("isotopic-mass") != AVERAGE;
+  map<int, double> mods;
+  int seq_index = 1;
+  const char* amino = mod_seq;
+  const char* end = NULL;
+  const char* start = NULL;
+  // Parse returned string to find modifications within brackets
+  while (*(amino) != '\0' && *(amino+1) != '\0') {
+    if (*(amino+1) =='[') {
+      start = amino+2;
+      end = amino+2;
+      while (*end != ']') {
+        end++;
+      }
+      char* mass  = (char*)mymalloc(sizeof(char)*(end-start+1));
+      strncpy(mass, start, end-start);
+      mass[end-start] = '\0';
+      mods[seq_index] = atof(mass) + AminoAcidUtil::GetMass(*amino, monoisotopic);
+      amino = end;
+      free(mass);
+    } else if (*(amino+1) < 'A' || *(amino+1) > 'Z') { // a mod symbol
+      double mass = 0; // sum up all adjacent symbols
+      end = amino + 1;
+      while( *end < 'A' || *end > 'Z' ) {
+        mass += get_mod_mass_from_symbol(*end);
+        end++;
+      }
+      mods[seq_index] = mass + AminoAcidUtil::GetMass(*amino, monoisotopic);
+    }
+    seq_index++;
+    amino++;
+  }
+  return mods;
+}
+
+/**
+ * \brief takes an empty mapping of index to mass
+ * of static mods and a full mapping of var mods
+ * to fill up the mapping of static mods
+ */
+map<int, double> PepXMLWriter::find_static_modifications(
+  const char* peptide_sequence
+) {
+  map<int, double> static_mods;
+  const char* seq_iter = peptide_sequence;
+  MASS_TYPE_T isotopic_type = get_mass_type_parameter("isotopic-mass");
+  for (size_t i = 0; peptide_sequence[i] != '\0'; i++) {
+    char aa = peptide_sequence[i];
+    double sum = AminoAcidUtil::GetMass(aa, isotopic_type == MONO);
+    int modCount = 0;
+    vector<const ModificationDefinition*> staticMods = ModificationDefinition::StaticMods(aa);
+    for (vector<const ModificationDefinition*>::const_iterator j = staticMods.begin();
+         j != staticMods.end();
+         j++) {
+      if ((*j)->Position() == ANY ||
+          ((*j)->Position() == PEPTIDE_N && i == 0) ||
+          ((*j)->Position() == PEPTIDE_C && peptide_sequence[i + 1] == '\0')) {
+        ++modCount;
+        sum += (*j)->DeltaMass();
+      }
+    }
+    if (modCount > 0) {
+      static_mods[i + 1] = sum;
+    }
+  }
+  return static_mods;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/PepXMLWriter.h b/src/io/PepXMLWriter.h
new file mode 100644
index 0000000..9220a0c
--- /dev/null
+++ b/src/io/PepXMLWriter.h
@@ -0,0 +1,139 @@
+/**
+ * \file PepXMLWriter.h
+ * \brief Writes search results in the TPP-compliant .pep.xml format.
+ */
+#ifndef PEPXMLWRITER_H
+#define PEPXMLWRITER_H
+
+#include <string>
+#include <vector>
+#include "model/objects.h"
+
+class PepXMLWriter {
+
+ public:
+  PepXMLWriter();
+  ~PepXMLWriter();
+
+  /**
+   * Open a file of the given name.  Replace an existing file if
+   * overwrite is true, else exit if an existing file is found.
+   */
+  void openFile(const char* filename, bool overwrite);
+
+  /**
+   * Close the file, if open.
+   */
+  void closeFile();
+
+  /**
+   * Write all of the elements that preceed the spectrum_query
+   * elements.
+   * Requires OpenFile has been called without CloseFile.
+   */
+  void writeHeader();
+
+  /**
+   * Close the msms_run_summaryand msms_pipeline_analysis tags.
+   * Requires OpenFile has been called without CloseFile.
+   */
+  void writeFooter();
+
+  /**
+   * Write the details for a PSM to be contained in a spectrum_query
+   * element.  Requires that the arrays pre_aas, post_aas,
+   * protein_names, protein_descriptions are all num_proteins long.
+   * Assumes scores is NUMBER_SCORER_TYPES long. 
+   * Requires OpenFile has been called without CloseFile.
+   */
+  void writePSM(
+    int spectrum_scan_number, ///< identifier for the spectrum
+    const char* filename, ///< file that spectrum came from
+    double spectrum_neutral_mass, ///< computed mass of the spectrum
+                                  ///at this charge state
+    int charge, ///< assumed charge state for the match
+    int* PSM_rank, ///< rank of this peptide for the spectrum
+    const char* unmodified_peptide_sequence, ///< sequence with no mods
+    const char* modified_peptide_sequence, ///< either with symbols or masses
+    double peptide_mass, ///< mass of the peptide sequence
+    int num_proteins, ///< proteins matched to this peptide
+    const char* flanking,  ///< "XY, AB, " X and Y are the preceeding and
+                        /// following aas in the first protein 
+    std::vector<std::string>& protein_names, ///<
+    std::vector<std::string>& protein_descriptions, ///<
+    bool* scores_computed,
+    double* scores, ///< indexed by score type
+    unsigned current_num_matches
+  );
+
+ protected:
+  void initScoreNames();
+  void printSpectrumElement(int spectrum_scan_number, 
+                            const char* filename,
+                            double spectrum_neutral_mass, 
+                            int charge);
+  void closeSpectrumElement();
+  std::string getSpectrumTitle(int spectrum_scan_number, 
+                               const char* filename,
+                               int charge);
+  void printPeptideElement(int* rank,
+                           const char* peptide_sequence,
+                           const char* mod_peptide_sequence,
+                           double peptide_mass,
+                           double spectrum_mass,
+                           int num_proteins,
+                           const char* flanking_aas,
+                           std::vector<std::string>& protein_names, 
+                           std::vector<std::string>& protein_descriptions,
+                           bool* scores_computed,
+                           double* scores,
+                           unsigned current_num_matches);
+
+  void printScores(
+    double* scores, 
+    bool* scores_computed,
+    int* ranks
+  );
+
+  void printAnalysis(double* scores, bool* scores_computed);
+
+  /**
+   * \brief prints both variable and static modifications for 
+   *  peptide sequence
+   */
+  void print_modifications_xml(const char* mod_seq, const char* sequence, FILE* output_file);
+
+  /**
+   * \brief takes an empty mapping of index to mass
+   * of static mods and a full mapping of var mods
+   * to fill up the mapping of static mods
+   */
+  std::map<int, double> find_static_modifications(
+    const char* sequence
+  );
+
+  /**
+   * \brief takes an empty mapping of index to mass
+   * and extract information from mod sequence fill
+   * up map
+   */
+  std::map<int, double> find_variable_modifications(const char* mod_seq);
+
+  std::string filename_;
+  FILE* file_;
+  std::string last_spectrum_printed_;
+  int current_index_;
+  int mass_precision_;
+  ENZYME_T enzyme_;
+  int precision_;
+};
+
+#endif // PEPXMLWRITER_H
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/io/PinWriter.cpp b/src/io/PinWriter.cpp
new file mode 100644
index 0000000..1a4bec7
--- /dev/null
+++ b/src/io/PinWriter.cpp
@@ -0,0 +1,295 @@
+/**
+ * \file PinWriter.cpp
+ * \brief Writes search results in the .pin format.
+ */
+#include <iostream>
+#include "PinWriter.h"
+#include "model/MatchCollection.h"
+#include "util/crux-utils.h"
+#include "parameter.h"
+#include "MatchCollectionParser.h"
+#include <cctype>
+#include <cstdio>
+#include <cstring>
+#include <sstream>
+#include <vector>
+#include "model/Spectrum.h"
+#include "SQTReader.h"
+#include "model/SpectrumZState.h"
+#include <fstream>
+#include <limits>
+#include <boost/filesystem.hpp>
+#include "util/Params.h"
+#include "util/FileUtils.h"
+#include "util/StringUtils.h"
+#include "MassHandler.h"
+#include <boost/foreach.hpp>
+
+using namespace std;
+using namespace Crux; 
+
+#define MAX_LOG_P 100.0 // Needed for handling p-value = 0, which should not happen, but alas does.
+
+PinWriter::PinWriter():
+  out_(NULL),
+  enzyme_(get_enzyme_type_parameter("enzyme")),
+  precision_(Params::GetInt("precision")),
+  mass_precision_(Params::GetInt("mass-precision")) {
+    
+  features_.push_back(make_pair("SpecId", true));
+  features_.push_back(make_pair("Label", true));
+  features_.push_back(make_pair("ScanNr", true));
+  features_.push_back(make_pair("ExpMass", true));
+  features_.push_back(make_pair("CalcMass", true));
+  features_.push_back(make_pair("lnrSp", false));
+  features_.push_back(make_pair("deltLCn", true));
+  features_.push_back(make_pair("deltCn", true));
+  features_.push_back(make_pair("XCorr", true));
+  features_.push_back(make_pair("Sp", false));
+  features_.push_back(make_pair("IonFrac", false));
+  features_.push_back(make_pair("RefactoredXCorr", false));
+  features_.push_back(make_pair("NegLog10PValue", false));
+  features_.push_back(make_pair("PepLen", true));
+  for (int i = '1'; i <= '9'; i++) {
+    features_.push_back(make_pair("Charge" + string(1, i), false));
+  }
+  features_.push_back(make_pair("enzN", true));
+  features_.push_back(make_pair("enzC", true));
+  features_.push_back(make_pair("enzInt", true));
+  features_.push_back(make_pair("lnNumSP", true));
+  features_.push_back(make_pair("lnNumDSP", false));
+  features_.push_back(make_pair("dM", true));
+  features_.push_back(make_pair("absdM", true));
+  features_.push_back(make_pair("Peptide", true));
+  features_.push_back(make_pair("Proteins", true));
+}
+
+PinWriter::~PinWriter() { 
+  closeFile(); 
+}
+
+/**
+ * Open a file of the given name.  Replace an existing file if
+ * overwrite is true, else exit if an existing file is found.
+ */
+void PinWriter::openFile(const string& filename, const string& output_dir, bool overwrite) {
+  if (!(out_ = create_stream_in_path(filename.c_str(), output_dir.c_str(), overwrite))) {
+    carp(CARP_FATAL, "Can't open file '%s'", filename.c_str());
+  }
+}
+
+void PinWriter::openFile(CruxApplication* application, string filename, MATCH_FILE_TYPE type) {
+  openFile(filename, "", Params::GetBool("overwrite"));
+}
+
+bool PinWriter::getEnabledStatus(const string& name) const {
+  for (vector< pair<string, bool> >::const_iterator i = features_.begin(); i != features_.end(); i++) {
+    if (i->first == name) {
+      return i->second;
+    }
+  }
+  return false;
+}
+
+void PinWriter::setEnabledStatus(const string& name, bool enabled) {
+  IsFeature finder(name);
+  vector< pair<string, bool> >::iterator i =
+    find_if(features_.begin(), features_.end(), finder);
+  if (i != features_.end()) {
+    i->second = enabled;
+  } else {
+    carp(CARP_WARNING, "setEnabledStatus: feature '%s' not found", name.c_str());
+  }
+}
+
+/**
+ * Close the file, if open.
+ */
+void PinWriter::closeFile() {
+  if (out_) {
+    delete out_;
+    out_ = NULL;
+  }
+}
+
+void PinWriter::write( 
+  MatchCollection* target_collection,
+  const vector<MatchCollection*>& decoys,
+  int top_rank
+) {
+  vector<MatchCollection*> collections(1, target_collection);
+  collections.insert(collections.end(), decoys.begin(), decoys.end());
+  for (vector<MatchCollection*>::iterator i = collections.begin();
+       i != collections.end();
+       i++) {
+    MatchIterator match_iterator(*i);  
+    while (match_iterator.hasNext()) {
+      Match* match = match_iterator.next();
+      if (match->getRank(XCORR) <= top_rank) {
+        printPSM(match);
+      }
+    }
+  }
+}
+
+void PinWriter::write(MatchCollection* collection, string database) {
+  bool sp = collection->getScoredType(SP);
+  bool xcorr = collection->getScoredType(XCORR);
+  bool exact_p = collection->getScoredType(TIDE_SEARCH_REFACTORED_XCORR);
+  setEnabledStatus("lnrSp", sp);
+  setEnabledStatus("deltLCn", collection->getScoredType(DELTA_LCN));
+  setEnabledStatus("deltCn", collection->getScoredType(DELTA_CN));
+  setEnabledStatus("XCorr", xcorr);
+  setEnabledStatus("Sp", sp);
+  setEnabledStatus("IonFrac", sp);
+  setEnabledStatus("RefactoredXCorr", exact_p);
+  setEnabledStatus("NegLog10PValue", exact_p);
+
+  int max_charge = 0;
+  for (MatchIterator i = MatchIterator(collection); i.hasNext();) {
+    max_charge = max(i.next()->getCharge(), max_charge);
+  }
+  for (int i = 1; i <= max_charge; i++) {
+    setEnabledStatus("Charge" + StringUtils::ToString(i), true);
+  }
+
+  vector<MatchCollection*> decoyvec;
+  int top_match = Params::GetInt("top-match");
+  printHeader();
+  write(collection, decoyvec, top_match); // TODO: When top match is greater than default (5) in a given PSM File?
+}
+
+bool PinWriter::isInfinite(FLOAT_T x) {
+  return x == numeric_limits<FLOAT_T>::infinity() || -x == numeric_limits<FLOAT_T>::infinity();
+}
+
+void PinWriter::printHeader() {
+  enabledFeatures_.clear();
+  FeatureCopy copier(&enabledFeatures_);
+  for_each(features_.begin(), features_.end(), copier);
+
+  for (vector< pair<string, bool> >::const_iterator i = features_.begin();
+       i != features_.end();
+       i++) {
+    carp(CARP_DEBUG, "PIN feature: '%s'%s",
+         i->first.c_str(), !i->second ? " (disabled)" : "");
+  }
+  *out_ << StringUtils::Join(enabledFeatures_, '\t') << endl;
+}
+
+void PinWriter::printPSM(
+  Match* match
+) { 
+  Peptide* peptide = match->getPeptide();
+  Spectrum* spectrum = match->getSpectrum();
+  int charge = match->getCharge();
+  bool enzC = false;
+  bool enzN = false;
+  double obsMass = match->getZState().getSinglyChargedMass();
+  FLOAT_T calcMass = peptide->calcModifiedMass() + MASS_PROTON;
+  FLOAT_T dM = MassHandler::massDiff(obsMass, calcMass, charge);
+
+  const char* sequence = peptide->getSequence();
+  int missedCleavages = get_num_internal_cleavage(sequence, enzyme_);
+  get_terminal_cleavages(sequence, peptide->getNTermFlankingAA(),
+                         peptide->getCTermFlankingAA(), enzyme_, enzN, enzC);
+
+  vector<string> fields;
+  BOOST_FOREACH(const std::string& feature, enabledFeatures_) {
+    if (feature == "SpecId") {
+      fields.push_back(getId(match, spectrum->getFirstScan()));
+    } else if (feature == "Label") {
+      fields.push_back(match->getNullPeptide() ? "-1" : "1");
+    } else if (feature == "ScanNr") {
+      fields.push_back(StringUtils::ToString(spectrum->getFirstScan()));
+    } else if (feature == "ExpMass") {
+      fields.push_back(StringUtils::ToString(obsMass, mass_precision_));
+    } else if (feature == "CalcMass") {
+      fields.push_back(StringUtils::ToString(calcMass, mass_precision_));
+    } else if (feature == "lnrSp") {
+      double sp = match->getRank(SP);
+      fields.push_back(StringUtils::ToString(sp > 0 ? log(sp) : 0, precision_));
+    } else if (feature == "deltLCn") {
+      FLOAT_T delta_lcn = match->getScore(DELTA_LCN);
+      if (isInfinite(delta_lcn) || isnan(delta_lcn)) {
+        delta_lcn = 0;
+      }
+      fields.push_back(StringUtils::ToString(delta_lcn, precision_));
+    } else if (feature == "deltCn") {
+      FLOAT_T delta_cn = match->getScore(DELTA_CN);
+      if (isInfinite(delta_cn) || isnan(delta_cn)) {
+        delta_cn = 0;
+      }
+      fields.push_back(StringUtils::ToString(delta_cn, precision_));
+    } else if (feature == "XCorr") {
+      fields.push_back(StringUtils::ToString(match->getScore(XCORR), precision_));
+    } else if (feature == "Sp") {
+      fields.push_back(StringUtils::ToString(match->getScore(SP), precision_));
+    } else if (feature == "IonFrac") {
+      FLOAT_T ionMatch = match->getScore(BY_IONS_MATCHED);
+      FLOAT_T ionTotal = match->getScore(BY_IONS_TOTAL);
+      FLOAT_T ionFrac = (ionMatch != NOT_SCORED && ionTotal != NOT_SCORED && ionTotal > 0)
+        ? ionMatch / ionTotal
+        : 0;
+      fields.push_back(StringUtils::ToString(ionFrac, precision_));
+    } else if (feature == "RefactoredXCorr") {
+      fields.push_back(
+        StringUtils::ToString(match->getScore(TIDE_SEARCH_REFACTORED_XCORR), precision_));
+    } else if (feature == "NegLog10PValue") {
+      FLOAT_T logP = -log10(match->getScore(TIDE_SEARCH_EXACT_PVAL));
+      fields.push_back(StringUtils::ToString(isInfinite(logP) ? MAX_LOG_P : logP, precision_));
+    } else if (feature == "PepLen") {
+      fields.push_back(StringUtils::ToString((unsigned) peptide->getLength()));
+    } else if (StringUtils::StartsWith(feature, "Charge")) {
+      int chargeFeature = StringUtils::FromString<int>(feature.substr(6));
+      fields.push_back(charge == chargeFeature ? "1" : "0"); 
+    } else if (feature == "enzN") {
+      fields.push_back(enzN ? "1" : "0");
+    } else if (feature == "enzC") {
+      fields.push_back(enzC ? "1" : "0");
+    } else if (feature == "enzInt") {
+      fields.push_back(StringUtils::ToString(missedCleavages));
+    } else if (feature == "lnNumSP" || feature == "lnNumDSP") {
+      fields.push_back(StringUtils::ToString(match->getLnExperimentSize(), precision_));
+    } else if (feature == "dM") {
+      fields.push_back(StringUtils::ToString(dM, precision_));
+    } else if (feature == "absdM") {
+      fields.push_back(StringUtils::ToString(fabs(dM), precision_));
+    } else if (feature == "Peptide") {
+      fields.push_back(getPeptide(peptide));
+    } else if (feature == "Proteins") {
+      fields.push_back(StringUtils::Join(peptide->getProteinIds(), '\t'));
+    } else {
+      carp(CARP_FATAL, "Unknown feature: '%s'", feature.c_str());
+    }
+  }
+  *out_ << StringUtils::Join(fields, '\t') << endl;
+}
+
+string PinWriter::getPeptide(Peptide* pep) {
+  stringstream sequence;
+  sequence << pep->getNTermFlankingAA() << '.'
+           << (Params::GetBool("mod-symbols")
+                ? pep->getModifiedSequenceWithSymbols()
+                : pep->getModifiedSequenceWithMasses())
+           << '.' << pep->getCTermFlankingAA();
+  return sequence.str();
+}
+
+string PinWriter::getId(Match* match, int scan_number) {
+  string prefix = Params::GetBool("filestem-prefixes")
+    ? FileUtils::Stem(match->getFilePath())
+    : "";
+
+  stringstream psm_id; 
+  if (prefix.empty()) {
+    psm_id << (match->getNullPeptide() ? "decoy" : "target")
+           << '_' << match->getFileIndex();
+  } else {
+    psm_id << prefix;
+  }
+  psm_id << '_' << scan_number << '_' << match->getCharge() << '_'
+         << match->getRank(XCORR);
+  return psm_id.str();   
+}
+
diff --git a/src/io/PinWriter.h b/src/io/PinWriter.h
new file mode 100644
index 0000000..4d36dcd
--- /dev/null
+++ b/src/io/PinWriter.h
@@ -0,0 +1,90 @@
+/**
+ * \file PinWriter.h
+ * \brief Writes search results in the .pin format.
+ */
+#ifndef PINWRITER_H
+#define PINWRITER_H
+
+#include <set>
+#include <string>
+#include <vector>
+#include "model/objects.h"
+#include "model/Spectrum.h"
+#include "util/mass.h"
+#include "model/Match.h"
+#include "model/MatchCollection.h"
+#include "PSMWriter.h"
+#include "model/SpectrumZState.h"
+#include "model/Spectrum.h"
+#include "model/Peptide.h"
+#include <limits>
+
+class PinWriter : public PSMWriter {
+ public:
+  PinWriter();
+  ~PinWriter();
+  explicit PinWriter(const char* output_file);
+ 
+  void write(
+    MatchCollection* target_collection,
+    const std::vector<MatchCollection*>& decoys,
+    int top_rank
+  );
+  // PSMWriter write
+  void write(
+    MatchCollection* collection,
+    std::string database
+  );
+
+  void printHeader();
+
+  void closeFile();
+  void openFile(
+    const std::string& filename, 
+    const std::string& output_directory,
+    bool overwrite
+  );
+
+  // PSMWriter openfile version
+  void openFile(
+    CruxApplication* application, ///< application writing the file
+    std::string filename, ///< name of the file to open
+    MATCH_FILE_TYPE type ///< type of file to be written
+  );
+
+  bool getEnabledStatus(const std::string& name) const;
+  void setEnabledStatus(const std::string& name, bool enabled);
+
+ protected:
+  std::vector< std::pair<std::string, bool> > features_;
+  std::vector<std::string> enabledFeatures_;
+  std::ofstream* out_;
+  ENZYME_T enzyme_; 
+  int precision_;
+  int mass_precision_;
+
+  void printPSM(Crux::Match* match);
+
+  std::string getPeptide(Crux::Peptide* pep);
+  bool isInfinite(FLOAT_T x);
+  std::string getId(Crux::Match* match, int scan_number); 
+
+  struct IsFeature : public std::unary_function<const std::pair<std::string, bool>&, bool> {
+    explicit IsFeature(const std::string& name): search_(name) {}
+    bool operator() (const std::pair<std::string, bool>& check) {
+      return search_ == check.first;
+    }
+    std::string search_;
+  };
+
+  struct FeatureCopy {
+    explicit FeatureCopy(std::vector<std::string>* target): target_(target) {}
+    void operator() (const std::pair<std::string, bool>& feature) {
+      if (feature.second) target_->push_back(feature.first);
+    }
+    std::vector<std::string>* target_;
+  };
+};
+
+#endif // PINWRITER_H
+
diff --git a/src/io/SQTReader.cpp b/src/io/SQTReader.cpp
new file mode 100644
index 0000000..e579326
--- /dev/null
+++ b/src/io/SQTReader.cpp
@@ -0,0 +1,407 @@
+/*************************************************************************
+ * \file SQTReader.cpp
+ * \brief Object for parsing sqt files
+ *************************************************************************/
+
+#include <cstdio>
+#include <cstring>
+#include <iostream>
+#include <fstream>
+
+#include "parameter.h"
+#include "LineFileReader.h"
+#include "MatchCollectionParser.h"
+#include "SQTReader.h"
+#include "util/StringUtils.h"
+
+using namespace std;
+using namespace Crux;
+
+/**
+ * Initializes the object
+ */
+void SQTReader::init() {
+  last_parsed_ = SQT_LINE_NONE;
+  current_spectrum_ = NULL;
+  current_match_ = NULL;
+}
+
+/**
+ * \returns an initialized object
+ */
+SQTReader::SQTReader() : PSMReader() {
+  init();
+}
+
+/**
+ * \returns an object initialized with the file_path
+ */
+SQTReader::SQTReader(
+  const string& file_path ///< the path of the pep.xml file
+  ) : PSMReader(file_path) {
+  init();
+}
+
+/**
+ * \returns an object initialized with the xml path, and the target,decoy databases
+ */
+SQTReader::SQTReader(
+  const string& file_path, ///< the path of the sqt
+  Database* database, ///< the protein database
+  Database* decoy_database ///< the decoy protein database (can be null)
+  ) : PSMReader(file_path, database, decoy_database) {
+  init();
+}
+
+/**
+ * default destructor
+ */
+SQTReader::~SQTReader() {
+}
+
+/**
+ * \returns the MatchCollection resulting from the parsed xml file
+ */
+MatchCollection* SQTReader::parse() {
+  current_match_collection_ = new MatchCollection();
+  current_match_collection_->preparePostProcess();
+  current_match_collection_->setScoredType(XCORR, true);
+  current_match_collection_->setScoredType(SP, true);
+  last_parsed_ = SQT_LINE_NONE;
+
+  LineFileReader line_reader(file_path_);
+  while (line_reader.hasNext()) {
+    string line = line_reader.next();
+    if (!line.empty()) {
+      switch (line[0]) {
+        case 'H':
+          parseHeader(line);
+          break;
+        case 'S':
+          parseSpectrum(line);
+          break;
+        case 'M':
+          parseMatch(line);
+          break;
+        case 'L':
+          parseLocus(line);
+          break;
+        default:
+          carp(CARP_ERROR, "Unknown line %d\n%s", line_reader.getCurrentRow(), line.c_str());
+      }
+    }
+  }
+
+  //add the last match
+  if (current_match_ != NULL) {
+    current_match_collection_->addMatchToPostMatchCollection(current_match_);
+  }
+  return current_match_collection_;
+}
+
+
+void SQTReader::parseHeader(const string& line) {
+  last_parsed_ = SQT_LINE_HEADER;
+  string content = StringUtils::Trim(line.substr(2));
+  if (StringUtils::StartsWith(content, "StaticMod")) {
+    content = StringUtils::Trim(content.substr(10));
+    vector<string> tokens = StringUtils::Split(content, '=');
+    if (tokens.size() == 2) {
+      ModificationDefinition::NewStaticMod(
+        tokens[0], StringUtils::FromString<double>(tokens[1]), UNKNOWN /*TODO*/);
+    }
+  } else if (StringUtils::StartsWith(content, "DiffMod")) {
+    content = StringUtils::Trim(content.substr(8));
+    vector<string> tokens = StringUtils::Split(content, '=');
+    if (tokens.size() == 2) {
+      string t0 = StringUtils::Trim(tokens[0]);
+      string aminoAcids = t0.substr(0, t0.length() - 1);
+      char symbol = t0[t0.length() - 1];
+      double deltaMass = StringUtils::FromString<double>(tokens[1]);
+      ModificationDefinition::NewVarMod(
+        aminoAcids, deltaMass, UNKNOWN /*TODO*/, false, false, symbol);
+    }
+  }
+}
+
+void SQTReader::parseSpectrum(const string& line) {
+  const int spectrum_low_scan_idx = 1;
+  const int spectrum_high_scan_idx = 2;
+  const int spectrum_charge_idx = 3;
+  const int spectrum_observed_mass_idx = 6;
+  const int spectrum_total_ion_intensity_idx = 7;
+  const int spectrum_lowest_sp_idx = 8;
+  const int spectrum_num_matches_idx = 9;
+
+  vector<string> tokens = StringUtils::Split(line, '\t');
+
+  int low_scan = -1;
+  int high_scan = -1;
+  int charge = -1;
+  current_ln_experiment_size_ = 0.0;
+  for (int i = 0; i < tokens.size(); i++) {
+    switch (i) {
+      case spectrum_low_scan_idx:
+        low_scan = StringUtils::FromString<int>(tokens[i]);
+        break;
+      case spectrum_high_scan_idx:
+        high_scan = StringUtils::FromString<int>(tokens[i]);
+        break;
+      case spectrum_charge_idx:
+        charge = StringUtils::FromString<int>(tokens[i]);
+        break;
+      case spectrum_observed_mass_idx: {
+        double observed_mass = StringUtils::FromString<double>(tokens[i]);
+        current_zstate_.setSinglyChargedMass(observed_mass, charge);
+        vector<int> chargeVec(1, charge);
+        current_spectrum_ = new Spectrum(low_scan, high_scan,
+                                         current_zstate_.getMZ(), chargeVec, "");
+        break;
+      }
+      case spectrum_num_matches_idx: {
+        int current_num_matches = StringUtils::FromString<int>(tokens[i]);
+        if (current_num_matches > 0) {
+          current_match_collection_->setHasDistinctMatches(true);
+          current_ln_experiment_size_ = logf((FLOAT_T)current_num_matches);
+        }
+        break;
+      }
+      case spectrum_total_ion_intensity_idx:
+        if (!tokens[i].empty()) {
+          current_spectrum_->setHasTotalEnergy(true);
+          current_spectrum_->setTotalEnergy(StringUtils::FromString<double>(tokens[i]));
+        }
+        break;
+      case spectrum_lowest_sp_idx:
+        if (!tokens[i].empty()) {
+          current_spectrum_->setHasLowestSp(true);
+          current_spectrum_->setLowestSp(StringUtils::FromString<double>(tokens[i]));
+        }
+        break;
+    }
+  }
+  last_parsed_ = SQT_LINE_SPECTRUM;
+}
+
+void SQTReader::parseMatch(const string& line) {
+  const int match_xcorr_rank_idx = 1;
+  const int match_sp_rank_idx = 2;
+  const int match_calculated_mass_idx = 3;
+  const int match_delta_cn_idx = 4;
+  const int match_xcorr_idx = 5;
+  const int match_sp_idx = 6;
+  const int match_matched_ions_idx = 7;
+  const int match_expected_ions_idx = 8;
+  const int match_sequence_idx = 9;
+  const int match_validation_idx = 10;
+
+  vector<string> tokens = StringUtils::Split(line, '\t');
+
+  int xcorr_rank = StringUtils::FromString<int>(tokens[match_xcorr_rank_idx]);
+  int sp_rank = StringUtils::FromString<int>(tokens[match_sp_rank_idx]);
+  double calculated_mass = StringUtils::FromString<double>(tokens[match_calculated_mass_idx]);
+  double delta_cn = StringUtils::FromString<double>(tokens[match_delta_cn_idx]);
+  double xcorr = StringUtils::FromString<double>(tokens[match_xcorr_idx]);
+  double sp = StringUtils::FromString<double>(tokens[match_sp_idx]);
+  int matched_ions = StringUtils::FromString<int>(tokens[match_matched_ions_idx]);
+  int expected_ions = StringUtils::FromString<int>(tokens[match_expected_ions_idx]);
+
+  string sqt_sequence = tokens[match_sequence_idx];
+  vector<string> sequence_tokens = StringUtils::Split(sqt_sequence, '.');
+
+  current_prev_aa_ = sequence_tokens.front();
+  current_next_aa_ = sequence_tokens.back();
+  sequence_tokens.erase(sequence_tokens.begin());
+  sequence_tokens.pop_back();
+  current_peptide_sequence_ = StringUtils::Join(sequence_tokens, '.');
+  if (current_match_ != NULL) {
+    current_match_collection_->addMatchToPostMatchCollection(current_match_);
+  }
+
+  string unmodifiedSequence;
+  vector<Modification> mods;
+  for (size_t i = 0; i < current_peptide_sequence_.size(); i++) {
+    char c = current_peptide_sequence_[i];
+    if ('A' <= c && c <= 'Z') {
+      unmodifiedSequence.push_back(c);
+    } else {
+      const ModificationDefinition* modDef = ModificationDefinition::Find(c);
+      if (modDef != NULL) {
+        mods.push_back(Modification(modDef, (i > 0) ? i - 1 : 0));
+      } else {
+        carp(CARP_ERROR, "Unknown modification in %s: %c",
+             current_peptide_sequence_.c_str(), c);
+      }
+
+    }
+  }
+  Peptide* peptide = new Peptide(unmodifiedSequence, mods);
+  current_peptide_sequence_ = unmodifiedSequence;
+
+  current_match_ = new Match(peptide, current_spectrum_, current_zstate_, false);
+  current_match_->setScore(XCORR, xcorr);
+  current_match_->setScore(SP, sp);
+  current_match_->setScore(DELTA_CN, delta_cn);
+  current_match_->setRank(XCORR, xcorr_rank);
+  current_match_->setRank(SP, sp_rank);
+
+  current_match_->setScore(BY_IONS_MATCHED, matched_ions);
+  current_match_->setScore(BY_IONS_TOTAL, expected_ions);
+  current_match_->setLnExperimentSize(current_ln_experiment_size_);
+
+  last_parsed_ = SQT_LINE_MATCH;
+}
+
+void SQTReader::parseLocus(const string& line) {
+  const int locus_protein_id_idx = 1;
+  const int locus_protein_desc_idx = 2;
+
+  vector<string> tokens = StringUtils::Split(line, '\t');
+
+  string protein_id = tokens[locus_protein_id_idx];
+  string protein_desc = "";
+  if (tokens.size() > 2) {
+    protein_desc = tokens[locus_protein_desc_idx];
+  }
+  bool is_decoy;
+  Protein* protein =
+    MatchCollectionParser::getProtein(database_, decoy_database_, protein_id, is_decoy);
+
+  int start_idx = protein->findStart(current_peptide_sequence_, current_prev_aa_, current_next_aa_);
+  PeptideSrc* peptide_src = new PeptideSrc((DIGEST_T)0, protein, start_idx);
+  current_match_->getPeptide()->addPeptideSrc(peptide_src);
+  if (is_decoy) {
+    current_match_->setNullPeptide(true);
+  }
+
+  last_parsed_ = SQT_LINE_LOCUS;
+}
+
+/**
+ * /returns the start position of the peptide sequence within the protein
+ */
+int SQTReader::findStart(
+  Protein* protein,  ///< the protein to find the sequence 
+  string peptide_sequence, ///< the peptide sequence to find
+  string prev_aa, ///< the amino acid before the sequence in the protein
+  string next_aa ///< the next amino acid after the sequence in the protein
+  ) {
+  if (prev_aa == "-") {
+    return 1;
+  } else if (next_aa == "-") {
+    return protein->getLength() - peptide_sequence.length() + 1;
+  } else {
+    //use the flanking amino acids to further constrain our search in the sequence
+    size_t pos = string::npos; 
+    string seq = prev_aa + peptide_sequence + next_aa;
+    string protein_seq = protein->getSequencePointer();
+    pos = protein_seq.find(seq);
+    if (pos == string::npos) {
+      carp(CARP_DEBUG, "could not find %s in protein %s\n%s", seq.c_str(), protein->getIdPointer().c_str(), protein_seq.c_str());
+      //finding the sequence with the flanks failed, try finding without the flanks.
+      seq = peptide_sequence;
+      pos = protein_seq.find(seq);
+      if (pos == string::npos) {
+        carp(CARP_FATAL, "could not %s in protein %s\n%s", seq.c_str(), protein->getIdPointer().c_str(), protein_seq.c_str());
+      }
+      return pos+1;
+    }
+    return pos+2;
+  }
+}
+
+/**
+ * \returns the MatchCollection resulting from the parsed xml file
+ */
+MatchCollection* SQTReader::parse(
+  const string& file_path, ///< path of the xml file
+  Database* database, ///< target protein database
+  Database* decoy_database ///< decoy protein database (can be null)
+  ) {
+  SQTReader* reader = new SQTReader(file_path);
+  reader->setDatabase(database);
+  reader->setDecoyDatabase(decoy_database);
+  return reader->parse();
+}
+
+/**
+ * \use the modification symbols in this SQT file
+ * looks for DiffMod <residues><symbol>=<delta mass.
+ */
+void SQTReader::readSymbols(const string& file, bool append) {
+  ifstream sqt(file.c_str());
+  if (!sqt) {
+    carp(CARP_FATAL, "Could not open '%s' for reading.", file.c_str());
+  }
+
+  bool doneReset = false;
+
+  AA_MOD_T** list_of_mods;
+  int num_mods = get_all_aa_mod_list(&list_of_mods);
+
+  string line;
+  carp(CARP_DEBUG, "Reading modifications from %s", file.c_str());
+  while (std::getline(sqt, line)) {
+    size_t idx;
+    if ((idx = line.find_first_not_of(" \t")) != string::npos &&
+        line[idx] == 'H' &&
+        (idx = line.find("DiffMod", idx + 1)) != string::npos &&
+        (idx = line.find_first_of(" \t", idx + 1)) != string::npos) {
+      if (num_mods == MAX_AA_MODS) {
+        carp(CARP_FATAL, "Too many modifications in file '%s'", file.c_str());
+      }
+      if ((idx = line.find_first_not_of(" \t", idx + 1)) == string::npos) {
+        continue;
+      }
+      char residue = toupper(line[idx]);
+      if (++idx >= line.length()) {
+        continue;
+      }
+      char symbol = line[idx];
+      if ((idx = line.find('=', idx + 1)) == string::npos ||
+          idx >= line.length() - 1) {
+        continue;
+      }
+      FLOAT_T mass = StringUtils::FromString<FLOAT_T>(line.substr(idx + 1));
+
+      if (residue < 'A' || residue > 'Z') {
+        carp(CARP_FATAL, "The DiffMod residue '%c' in file '%s' is invalid",
+                         residue, file.c_str());
+      }
+
+      if (!doneReset && !append) {
+        resetMods();
+        doneReset = true;
+      }
+
+      AA_MOD_T* mod = NULL;
+      for (int i = 0; i < num_mods; ++i) {
+        if (aa_mod_get_mass_change(list_of_mods[i]) == mass) {
+          mod = list_of_mods[i];
+          aa_mod_get_aa_list(mod)[residue - 'A'] = true;
+          break;
+        }
+      }
+      if (!mod) {
+        mod = new_aa_mod(num_mods);
+        aa_mod_set_mass_change(mod, mass);
+        aa_mod_set_symbol(mod, symbol);
+        aa_mod_get_aa_list(mod)[residue - 'A'] = true;
+        list_of_mods[num_mods] = mod;
+        incrementNumMods();
+        ++num_mods;
+      }
+
+      carp(CARP_DETAILED_DEBUG, "Read mod %c (symbol %c) with mass %f",
+           residue, symbol, mass);
+    }
+  }
+  carp(CARP_DEBUG, "Read %d modifications from %s", num_mods, file.c_str());
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/SQTReader.h b/src/io/SQTReader.h
new file mode 100644
index 0000000..8688609
--- /dev/null
+++ b/src/io/SQTReader.h
@@ -0,0 +1,126 @@
+/**
+ * \file SQTReader.h
+ * $Revision: 1.00 $ 
+ * DATE: July 11th, 2012
+ * AUTHOR: Sean McIlwain
+ * \brief Object for reading sqt.  This object will read a sqt file,
+ * creating a matchcollection object.
+ * 
+ **************************************************************************/
+
+#ifndef SQTREADER_H
+#define SQTREADER_H
+#include <string>
+#include <vector>
+
+#include "PSMReader.h"
+#include "model/Spectrum.h"
+#include "model/Match.h"
+#include "model/MatchCollection.h"
+
+enum SQT_LINE_T {
+  SQT_LINE_NONE,
+  SQT_LINE_HEADER,
+  SQT_LINE_SPECTRUM,
+  SQT_LINE_MATCH,
+  SQT_LINE_LOCUS
+};
+
+
+class SQTReader : public PSMReader {
+
+ protected:
+  SpectrumZState current_zstate_; ///< keeps track of the current zstate
+  Crux::Spectrum* current_spectrum_; ///< Keeps track of the current spectrum object
+  FLOAT_T current_ln_experiment_size_;
+  FLOAT_T ln_experiment_size_; 
+  Crux::Match* current_match_; ///< keeps track of the current match object
+  std::string current_peptide_sequence_; ///< keeps track of the current peptide sequence
+  std::string current_prev_aa_; ///< keeps track of the current previous amino acid
+  std::string current_next_aa_; ///< keeps track of the current next amino acid
+
+  MatchCollection* current_match_collection_; ///< keeps track of the current match collection object
+
+  SQT_LINE_T last_parsed_;
+
+  /**
+   * /returns the start position of the peptide sequence within the protein
+   */
+  int findStart(
+    Crux::Protein* protein, ///< the protein to find the sequence 
+    std::string peptide_sequence, ///< the peptide sequence to find
+    std::string prev_aa, ///< the amino acid before the sequence in the protein
+    std::string next_aa ///< the next amino acid after the sequence in the protein
+  );
+
+  /**
+   * Initializes the object
+   */
+  void init();
+
+  void parseHeader(const std::string& line);
+  void parseSpectrum(const std::string& line);
+  void parseMatch(const std::string& line);
+  void parseLocus(const std::string& line);
+
+ public:  
+
+  /**
+   * \returns an initialized object
+   */
+  SQTReader();
+
+  /**
+   * \returns an object initialized with the file_path
+   */
+  SQTReader(
+    const std::string& file_path_ ///< the path of the pep.xml file
+  );
+
+  /**
+   * \returns an object initialized with the xml path, and the target,decoy databases
+   */
+  SQTReader(
+    const std::string& file_path_, ///< the path of the pep.xml
+    Database* database, ///< the protein database
+    Database* decoy_database = NULL ///< the decoy protein database (can be null)
+    );
+
+  /**
+   * \returns the MatchCollection resulting from the parsed xml file
+   */
+  MatchCollection* parse();
+
+  /**
+   * \returns the MatchCollection resulting from the parsed xml file
+   */
+  static MatchCollection* parse(
+    const std::string& path, ///< path of the xml file
+    Database* database, ///< target protein database
+    Database* decoy_database ///< decoy protein database (can be null)
+  );
+
+  /**
+   * \use the modification symbols in this SQT file
+   * looks for DiffMod <residues><symbol>=<delta mass.
+   */
+  static void readSymbols(const std::string& file, bool append = true);
+
+  /*open/close handlers*/
+  friend void open_handler(void* data, const char* element, const char** attr);
+  friend void close_handler(void* data, const char* el);
+
+  /**
+   * default destructor
+   */
+  virtual ~SQTReader();
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/SQTWriter.cpp b/src/io/SQTWriter.cpp
new file mode 100644
index 0000000..b20c3a4
--- /dev/null
+++ b/src/io/SQTWriter.cpp
@@ -0,0 +1,239 @@
+#include "SQTWriter.h"
+#include "util/FileUtils.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+#include "util/GlobalParams.h"
+
+using namespace Crux;
+
+SQTWriter::SQTWriter() {
+}
+
+SQTWriter::~SQTWriter() {
+  closeFile();
+}
+
+void SQTWriter::openFile(string filename) {
+  file_ = FileUtils::GetWriteStream(filename, Params::GetBool("overwrite"));
+  if (!file_) {
+    carp(CARP_FATAL, "Error creating file '%s'.", filename.c_str());
+  }
+}
+
+void SQTWriter::closeFile() {
+  if (file_ && file_->is_open()) {
+    file_->close();
+    delete file_;
+    file_ = NULL;
+  }
+}
+
+void SQTWriter::writeHeader(
+  string database,
+  int num_proteins,
+  bool is_decoy
+) {
+  if (!file_->is_open()) {
+    return;
+  }
+
+  streamsize old_precision = file_->precision();
+
+  time_t hold_time = time(0);
+
+  MASS_TYPE_T mass_type = GlobalParams::getIsotopicMass();
+  char precursor_masses[64];
+  mass_type_to_string(mass_type, precursor_masses);
+
+  mass_type = get_mass_type_parameter("fragment-mass");
+  char fragment_masses[64];
+  mass_type_to_string(mass_type, fragment_masses);
+
+  double tol = Params::GetDouble("precursor-window");
+  double frag_mass_tol = Params::GetDouble("mz-bin-width") / 2.0;
+
+  string prelim_score_type = Params::GetString("prelim-score-type");
+  string score_type = Params::GetString("score-type");
+
+  *file_ << "H\tSQTGenerator Crux" << endl
+         << "H\tSQTGeneratorVersion 1.0" << endl
+         << "H\tComment Crux was written by..." << endl
+         << "H\tComment ref..." << endl
+         << "H\tStartTime\t" << string(ctime(&hold_time))
+         << "H\tEndTime                               " << endl
+         << "H\tDatabase\t" << database << endl;
+
+  if (is_decoy) {
+    *file_ << "H\tComment\tDatabase shuffled; these are decoy matches" << endl;
+  }
+
+  *file_ << "H\tDBSeqLength\t?" << endl
+         << "H\tDBLocusCount\t" << num_proteins << endl
+         << "H\tPrecursorMasses\t" << precursor_masses << endl
+         << "H\tFragmentMasses\t" << fragment_masses << endl //?????????
+         << fixed
+         << "H\tAlg-PreMasTol\t" << setprecision(1) << tol << endl
+         << "H\tAlg-FragMassTol\t" << setprecision(2) << frag_mass_tol << endl
+         << "H\tAlg-XCorrMode\t0" << endl;
+  file_->unsetf(ios_base::fixed);
+  file_->precision(old_precision);
+
+  *file_ << "H\tComment\tpreliminary algorithm " << prelim_score_type << endl
+         << "H\tComment\tfinal algorithm " << score_type << endl;
+
+  for (char aa = 'A'; aa <= 'Z'; aa++) {
+    vector<const ModificationDefinition*> staticMods = ModificationDefinition::StaticMods(aa);
+    for (vector<const ModificationDefinition*>::const_iterator i = staticMods.begin();
+         i != staticMods.end();
+         i++) {
+      *file_ << "H\tStaticMod\t" << aa << '='
+             << StringUtils::ToString((*i)->DeltaMass(), Params::GetInt("mod-precision"))
+             << endl;
+    }
+  }
+
+  // print dynamic mods, if any
+  // format DiffMod <AAs><symbol>=<mass change>
+  vector<const ModificationDefinition*> varMods = ModificationDefinition::VarMods();
+  for (vector<const ModificationDefinition*>::const_iterator i = varMods.begin();
+       i != varMods.end();
+       i++) {
+    char symbol = (*i)->Symbol();
+    *file_ << "H\tDiffMod\t" << StringUtils::Join((*i)->AminoAcids()) << symbol << "=";
+    if ((*i)->DeltaMass() >= 0) {
+      *file_ << '+';
+    }
+    *file_ << StringUtils::ToString((*i)->DeltaMass(), Params::GetInt("mod-precision"))
+           << endl;
+    switch ((*i)->Position()) {
+    case PEPTIDE_N:
+    case PROTEIN_N:
+      *file_ << "H\tComment\tMod " << symbol << " is an N-terminal modification" << endl;
+      break;
+    case PEPTIDE_C:
+    case PROTEIN_C:
+      *file_ << "H\tComment\tMod " << symbol << " is an C-terminal modification" << endl;
+      break;
+    }
+  }
+
+  *file_ << "H\tAlg-DisplayTop\t" << Params::GetInt("top-match") << endl;
+  // this is not correct for an sqt from analzyed matches
+
+  ENZYME_T enzyme = get_enzyme_type_parameter("enzyme");
+  DIGEST_T digestion = get_digest_type_parameter("digestion");
+  const char* enz_str = enzyme_type_to_string(enzyme);
+  const char* dig_str = digest_type_to_string(digestion);
+  string custom_str;
+  if (enzyme == CUSTOM_ENZYME) {
+    string rule = Params::GetString("custom-enzyme");
+    custom_str = ", custom pattern: " + rule;
+  }
+  *file_ << "H\tEnzymeSpec\t" << enz_str << "-" << dig_str << custom_str << endl;
+
+
+  *file_ << "H\tLine fields: S, scan number, scan number, "
+         << "charge, 0, server, experimental mass, total ion intensity, "
+         << "lowest Sp, number of matches" << endl
+         << "H\tLine fields: M, rank by xcorr score, rank by sp score, "
+         << "peptide mass, deltaCn, xcorr score, sp score, number ions matched, "
+         << "total ions compared, sequence, validation status" << endl;
+}
+
+void SQTWriter::writeSpectrum(
+  Spectrum* spectrum,
+  SpectrumZState& z_state,
+  int num_matches
+) {
+  if (!file_->is_open()) {
+    return;
+  }
+
+  *file_ << "S"
+         << "\t" << spectrum->getFirstScan()
+         << "\t" << spectrum->getLastScan()
+         << "\t" << z_state.getCharge()
+         << "\t0.0" // process time
+         << "\tserver"
+         << "\t"
+         << StringUtils::ToString(
+            z_state.getSinglyChargedMass(), Params::GetInt("mass-precision"))
+         << "\t";
+
+  // print total ion intensity if exists...
+  if (spectrum->hasTotalEnergy()) {
+    *file_ << StringUtils::ToString(spectrum->getTotalEnergy(), 2);
+  }
+  *file_ << "\t";
+
+  // print lowest sp if exists
+  if (spectrum->hasLowestSp()) {
+    *file_ << StringUtils::ToString(spectrum->getLowestSp(), Params::GetInt("precision"));
+  }
+  *file_ << "\t";
+
+  if (num_matches != 0) {
+    *file_ << num_matches;
+  }
+  *file_ << endl;
+
+}
+
+void SQTWriter::writePSM(
+  Peptide* peptide,
+  FLOAT_T xcorr_score,
+  int xcorr_rank,
+  FLOAT_T sp_score,
+  int sp_rank,
+  FLOAT_T delta_cn,
+  int b_y_matched,
+  int b_y_total,
+  bool is_decoy
+) {
+  if (!file_->is_open()) {
+    return;
+  }
+
+  int length = peptide->getLength();
+  MODIFIED_AA_T* mod_seq = copy_mod_aa_seq(peptide->getModifiedAASequence(), length);
+  if (!mod_seq) {
+    return;
+  }
+
+  Protein* protein = peptide->getPeptideSrc()->getParentProtein();
+  string seq_str = peptide->getSequenceSqt();
+
+  *file_ << "M"
+         << "\t" << xcorr_rank
+         << "\t" << sp_rank
+         << "\t" << StringUtils::ToString(
+                    peptide->calcModifiedMass() + MASS_PROTON, Params::GetInt("mass-precision"))
+         << "\t" << StringUtils::ToString(delta_cn, 2)
+         << "\t" << StringUtils::ToString(xcorr_score, Params::GetInt("precision"))
+         << "\t" << StringUtils::ToString(sp_score, Params::GetInt("precision"))
+         << "\t" << b_y_matched
+         << "\t" << b_y_total
+         << "\t" << seq_str
+         << "\tU"
+         << endl;
+
+  for (PeptideSrcIterator iter = peptide->getPeptideSrcBegin();
+       iter != peptide->getPeptideSrcEnd();
+       ++iter) {
+    PeptideSrc* peptide_src = *iter;
+    Protein* protein = peptide_src->getParentProtein();
+    string protein_id_str = protein->getId();
+    if (is_decoy && protein->getDatabase()->getDecoyType() == NO_DECOYS) {
+      protein_id_str = Params::GetString("decoy-prefix") + protein_id_str;
+    }
+    *file_ << "L" << "\t" << protein_id_str << endl;
+  }
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/io/SQTWriter.h b/src/io/SQTWriter.h
new file mode 100644
index 0000000..adfdad5
--- /dev/null
+++ b/src/io/SQTWriter.h
@@ -0,0 +1,59 @@
+#ifndef SQTWRITER_H
+#define SQTWRITER_H
+
+#include "carp.h"
+#include "parameter.h"
+#include "model/PostProcessProtein.h"
+#include "model/Spectrum.h"
+
+#include <iomanip>
+#include <string>
+
+using namespace std;
+
+class SQTWriter {
+
+ public:
+  SQTWriter();
+  ~SQTWriter();
+  void openFile(string filename);
+  void closeFile();
+
+  void writeHeader(
+    string database,
+    int num_proteins,
+    bool is_decoy = false
+  );
+
+  void writeSpectrum(
+    Crux::Spectrum* spectrum,
+    SpectrumZState& z_state,
+    int num_matches
+  );
+
+  void writePSM(
+    Crux::Peptide* peptide,
+    FLOAT_T xcorr_score,
+    int xcorr_rank,
+    FLOAT_T sp_score,
+    int sp_rank,
+    FLOAT_T delta_cn,
+    int b_y_matched,
+    int b_y_total,
+    bool is_decoy
+  );
+
+ protected:
+  ofstream* file_;
+
+};
+
+#endif // SQTWRITER_H
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/io/SpectrumCollection.cpp b/src/io/SpectrumCollection.cpp
new file mode 100644
index 0000000..655150d
--- /dev/null
+++ b/src/io/SpectrumCollection.cpp
@@ -0,0 +1,260 @@
+/**
+ * \file SpectrumCollection.cpp
+ * AUTHOR: Barbara Frewen
+ * CREATE DATE: 11 April 2011
+ * \brief Abstract class for accessing spectra from a file.
+ */
+#include "SpectrumCollection.h" 
+#include "model/ProteinIndex.h" 
+#include "model/Peak.h"
+#include "util/utils.h"
+#ifndef _MSC_VER
+#include "unistd.h"
+#endif
+#include "parameter.h"
+#include <cerrno>
+#include <cstring>
+#include "io/carp.h"
+#include "util/WinCrux.h"
+#include <iostream>
+
+using namespace std;
+using namespace Crux;
+
+namespace Crux {
+
+/**
+ * Instantiates a new spectrum_collection object from a filename. 
+ * Resolves any relative paths.  Confirms that file exists.
+ */
+SpectrumCollection::SpectrumCollection (
+  const string& filename ///< The spectrum collection filename. 
+  ) 
+: filename_(filename), is_parsed_(false), num_charged_spectra_(0) {
+#if DARWIN
+  char path_buffer[PATH_MAX];
+  char* absolute_path_file =  realpath(filename.c_str(), path_buffer);
+#else
+  char* absolute_path_file =  realpath(filename.c_str(), NULL);
+#endif
+  if (absolute_path_file == NULL) {
+    carp(CARP_FATAL, "Error from spectrum file '%s'. (%s)",
+         filename.c_str(), strerror(errno)); 
+  }
+  
+  if(access(absolute_path_file, F_OK)) {
+    carp(CARP_FATAL, "File %s could not be opened\n", absolute_path_file);
+  }
+  filename_ = absolute_path_file;
+
+#ifndef DARWIN
+  free(absolute_path_file);
+#endif
+}
+
+/**
+ * Copy constructor.  Creates copies of each spectrum for the new
+ * collection.
+ */
+SpectrumCollection::SpectrumCollection(
+  SpectrumCollection& old_collection
+  ) : filename_(old_collection.filename_),
+      is_parsed_(old_collection.is_parsed_),
+      num_charged_spectra_(old_collection.num_charged_spectra_) {
+  // copy spectra
+  for (SpectrumIterator spectrum_iterator = old_collection.begin();
+    spectrum_iterator != old_collection.end();
+    ++spectrum_iterator) {
+
+    Spectrum* old_spectrum = *spectrum_iterator;
+    Spectrum* new_spectrum = new Spectrum(*old_spectrum);
+    this->addSpectrumToEnd(new_spectrum);
+  }
+} 
+
+/**
+ * Default destructor
+ */
+SpectrumCollection::~SpectrumCollection() {
+
+  for (SpectrumIterator spectrum_iterator = this->begin();
+    spectrum_iterator != this->end();
+    ++spectrum_iterator) {
+    delete *spectrum_iterator;    
+  }
+  spectra_.clear();
+}  
+
+/**
+ * \returns the begining of the spectra deque
+ */
+SpectrumIterator SpectrumCollection::begin() {
+  return spectra_.begin();
+}
+
+/**
+ * \returns the end of the spectra deque
+ */
+SpectrumIterator SpectrumCollection::end() {
+  return spectra_.end();
+}
+
+/*
+ * Parses a single spectrum from a spectrum_collection with first scan
+ * number equal to first_scan.
+ * \returns The newly allocated Spectrum or NULL if scan number not found.
+ */
+Spectrum* SpectrumCollection::getSpectrum(
+  int first_scan      ///< The first scan of the spectrum to retrieve -in
+  ) {
+
+
+  Spectrum* spectrum = new Spectrum();
+  bool success = getSpectrum(first_scan, spectrum);
+  if (success) {
+    return spectrum;
+  } else {
+    delete spectrum;
+    return NULL;
+  }
+}
+
+/**
+ * Parses a single spectrum from a spectrum_collection with first scan
+ * number equal to first_scan.  Removes any existing information in the
+ * given spectrum.
+ * \returns True if the spectrum was allocated, false on error.
+ */
+bool SpectrumCollection::getSpectrum(
+  int first_scan,      ///< The first scan of the spectrum to retrieve -in
+  Spectrum* spectrum   ///< Put the spectrum info here
+  ) {
+
+  for (SpectrumIterator spectrum_iterator = this->begin();
+    spectrum_iterator != this->end();
+    ++spectrum_iterator) {
+
+    if ((*spectrum_iterator)->getFirstScan() == first_scan) {
+      
+      spectrum->copyFrom(*spectrum_iterator);
+      return true;
+    }
+  }
+  return false;
+
+}
+
+
+/**
+ * Adds a spectrum to the spectrum_collection.
+ * adds the spectrum to the end of the spectra array
+ * should only be used when the adding in increasing scan num order
+ * when adding in random order should use add_spectrum
+ * spectrum must be heap allocated
+ */
+void SpectrumCollection::addSpectrumToEnd(
+  Spectrum* spectrum ///< spectrum to add to spectrum_collection -in
+  ) {
+  // set spectrum
+  spectra_.push_back(spectrum);
+  num_charged_spectra_ += spectrum->getNumZStates();
+}
+
+/**
+ * Adds a spectrum to the spectrum_collection.
+ * adds the spectrum in correct order into the spectra array
+ * spectrum must be heap allocated
+ */
+void SpectrumCollection::addSpectrum(
+  Spectrum* spectrum ///< spectrum to add to spectrum_collection -in
+  ) {
+    
+  unsigned int add_index = 0;
+
+  // find correct location
+  // TODO -- replace with binary search if necessary.
+  for(; add_index < spectra_.size(); ++add_index) {
+    if(spectra_[add_index]->getFirstScan() >
+       spectrum->getFirstScan()) {
+      break;
+    }
+  }
+
+  spectra_.insert(spectra_.begin()+add_index, spectrum);
+
+  num_charged_spectra_ += spectrum->getNumZStates();
+}
+
+
+// FIXME maybe a faster way? can't perform binary search since we must know the array index
+/**
+ * Removes a spectrum from the spectrum_collection.
+ */
+void SpectrumCollection::removeSpectrum(
+  Spectrum* spectrum ///< spectrum to be removed from spectrum_collection -in
+  ) {
+    
+  int scan_num = spectrum->getFirstScan();
+  unsigned int spectrum_index = 0;
+  
+  // find where the spectrum is located in the spectrum array
+  for(; spectrum_index < spectra_.size(); ++spectrum_index) {
+    if(scan_num == spectra_[spectrum_index]->getFirstScan() ) {
+      break;
+    }
+  }
+  
+  num_charged_spectra_ -= spectrum->getNumZStates();
+
+  delete spectra_[spectrum_index];
+  spectra_[spectrum_index] = NULL;
+  spectra_.erase(spectra_.begin() + spectrum_index);
+
+} 
+
+
+
+
+
+/**
+ * \returns A pointer to the name of the file from which the spectra
+ * were parsed.
+ */
+const char* SpectrumCollection::getFilename() {
+  return filename_.c_str();
+}
+
+/**
+ * \returns The current number of spectrum in the
+ * spectrum_collection.  Zero if the file has not yet been parsed.
+ */
+int SpectrumCollection::getNumSpectra() {
+  return spectra_.size();
+}
+
+/**
+ * \returns The current number of spectra assuming differnt
+ * charge(i.e. one spectrum with two charge states are counted as two
+ * spectra) in the spectrum_collection.  Zero if the file has not been
+ * parsed.
+ */
+int SpectrumCollection::getNumChargedSpectra() {
+  return num_charged_spectra_;
+}
+
+
+/**
+ * \returns True if the spectrum_collection file has been parsed.
+ */
+bool SpectrumCollection::getIsParsed() {
+  return is_parsed_;
+}
+
+} // namespace Crux
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/SpectrumCollection.h b/src/io/SpectrumCollection.h
new file mode 100644
index 0000000..7c97cac
--- /dev/null
+++ b/src/io/SpectrumCollection.h
@@ -0,0 +1,143 @@
+/**
+ * \file SpectrumCollection.h 
+ * AUTHOR: Barbara Frewen
+ * CREATE DATE: 14 April 2011
+ * \brief An abstract class for accessing spectra from a file.
+ */
+#ifndef CRUX_SPECTRUM_COLLECTION_H
+#define CRUX_SPECTRUM_COLLECTION_H
+
+#include <stdio.h>
+#include "model/objects.h"
+#include "model/Spectrum.h"
+
+#include <deque>
+
+/**
+ * \class SpectrumCollection
+ * \brief An abstract class for accessing spectra from a file.
+ */
+namespace Crux {
+
+class SpectrumCollection {
+
+  friend class ::FilteredSpectrumChargeIterator;
+
+ protected:
+  std::deque<Crux::Spectrum*> spectra_;  ///< spectra from the file
+  std::string filename_;                  ///< filename
+  bool is_parsed_;      ///< file has been read and spectra_ populated 
+  int num_charged_spectra_;  ///< sum of all charge states from all spectra
+  
+  /**
+   * Base class constructor is protected.  Sets filename and
+   * initializes member variables.
+   */
+  SpectrumCollection(
+    const std::string& filename///< The spectrum collection filename. -in
+  );
+
+   /**
+   * Adds a spectrum to the spectrum_collection.
+   * adds the spectrum in correct order into the spectra array
+   * spectrum must be heap allocated
+   *\returns TRUE if succeed to add, else FALSE 
+   */
+  void addSpectrum(
+    Crux::Spectrum* spectrum ///< spectrum to add to spectrum_collection -in
+  ); 
+
+  /**
+   * Adds a spectrum to the spectrum_collection.
+   * adds the spectrum to the end of the spectra array
+   * should only be used when the adding in increasing scan num order
+   * when adding in random order should use add_spectrum
+   * spectrum must be heap allocated
+   *\returns TRUE if succeed to add, else FALSE 
+   */
+  void addSpectrumToEnd(
+    Crux::Spectrum* spectrum ///< spectrum to add to spectrum_collection -in
+  );
+
+  /**
+   * Removes a spectrum from the spectrum_collection.
+   */
+  void removeSpectrum(
+    Crux::Spectrum* spectrum ///< spectrum to be removed from spectrum_collection -in
+  ); 
+
+ public:
+
+  /**
+   * Copy constructor.  Deep copy.
+   */
+  SpectrumCollection(SpectrumCollection& old_collection);
+  /**
+   * Default destructor.
+   */
+  virtual ~SpectrumCollection();
+
+  SpectrumIterator begin();
+  SpectrumIterator end();
+  
+  /**
+   * Parses all the spectra from file designated by the filename member
+   * variable.
+   * \returns TRUE if the spectra are parsed successfully. FALSE if otherwise.
+   */
+  virtual bool parse() = 0;
+
+  /**
+   * Parses a single spectrum from a spectrum_collection with first scan
+   * number equal to first_scan.
+   * \returns The newly allocated Spectrum or NULL if scan number not found.
+   */
+  virtual Crux::Spectrum* getSpectrum(
+    int first_scan      ///< The first scan of the spectrum to retrieve -in
+  ) = 0;
+
+  /**
+   * Parses a single spectrum from a spectrum_collection with first scan
+   * number equal to first_scan.  Removes any existing information in the
+   * given spectrum.
+   * \returns True if the spectrum was allocated, false on error.
+   */
+  virtual bool getSpectrum(
+    int first_scan,      ///< The first scan of the spectrum to retrieve -in
+    Crux::Spectrum* spectrum   ///< Put the spectrum info here
+  ) = 0;
+
+  /**
+   * \returns A pointer to the name of the file containing these spectra.
+   */
+  const char* getFilename();
+
+  /**
+   * \returns The current number of spectrum in the
+   * spectrum_collection.  Assumes it has been parsed.
+   */
+  int getNumSpectra();
+
+  /**
+   * \returns The current number of spectra assuming differnt
+   * charge(i.e. one spectrum with two charge states are counted as
+   * two spectra) in the spectrum_collection.  Assumes file has been
+   * parsed.  
+   */
+  int getNumChargedSpectra();
+
+  /**
+   * \returns TRUE if the spectrum_collection file has been parsed
+   */
+  bool getIsParsed();
+};
+
+}  // namespace Crux
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif
diff --git a/src/io/SpectrumCollectionFactory.cpp b/src/io/SpectrumCollectionFactory.cpp
new file mode 100644
index 0000000..5b53095
--- /dev/null
+++ b/src/io/SpectrumCollectionFactory.cpp
@@ -0,0 +1,46 @@
+/**
+ * \file SpectrumCollectionFactory.cpp 
+ * AUTHOR: Barbara Frewen
+ * CREATE DATE: 14 June 2011
+ * \brief Return a SpectrumCollection object of the appropriate
+ * derived class.
+ */
+#include "parameter.h"
+#include "SpectrumCollectionFactory.h"
+#include "MSToolkitSpectrumCollection.h"
+#include "PWIZSpectrumCollection.h"
+#include "util/FileUtils.h"
+#include "util/Params.h"
+
+/**
+ * Instantiates a SpectrumCollection based on the extension of the
+ * given file and the use-mstoolkit and msgf options.
+ */
+Crux::SpectrumCollection* SpectrumCollectionFactory::create(const string& filename) {
+  if (!FileUtils::Exists(filename)) {
+    carp(CARP_FATAL, "The file %s does not exist. \n", filename.c_str());
+  }
+  if (FileUtils::IsDir(filename)) {
+    carp(CARP_FATAL, "Path %s is a directory. \n Please enter a spectrum filename\
+(.ms2, .mgf, or .mzXML)", filename.c_str());
+  }
+
+  string parser = Params::GetString("spectrum-parser");
+  if (parser == "pwiz") {
+    carp(CARP_DEBUG, "Using protewizard to parse spectra");
+    return new PWIZSpectrumCollection(filename);
+  } else if (parser == "mstoolkit") {
+    carp(CARP_DEBUG, "Using mstoolkit to parse spectra");
+    return new MSToolkitSpectrumCollection(filename);
+  }
+
+  carp(CARP_FATAL, "Unknown spectrum parser type");
+  return(NULL); // Avoid compiler warning.
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/SpectrumCollectionFactory.h b/src/io/SpectrumCollectionFactory.h
new file mode 100644
index 0000000..61ab5de
--- /dev/null
+++ b/src/io/SpectrumCollectionFactory.h
@@ -0,0 +1,30 @@
+/**
+ * \file SpectrumCollectionFactory.h 
+ * AUTHOR: Barbara Frewen
+ * CREATE DATE: 14 June 2011
+ * \brief Return a SpectrumCollection object of the appropriate
+ * derived class.
+ */
+#ifndef SPECTRUM_COLLECTION_FACTORY_H
+#define SPECTRUM_COLLECTION_FACTORY_H
+
+#include "SpectrumCollection.h"
+
+/**
+ * Instantiates a SpectrumCollection based on the extension of the
+ * given file and the use-mstoolkit option.
+ */
+class SpectrumCollectionFactory {
+
+ public:
+  static Crux::SpectrumCollection* create(const std::string& filename);
+
+};
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif 
diff --git a/src/io/SpectrumRecordWriter.cpp b/src/io/SpectrumRecordWriter.cpp
new file mode 100644
index 0000000..cbd8716
--- /dev/null
+++ b/src/io/SpectrumRecordWriter.cpp
@@ -0,0 +1,195 @@
+#include <cmath>
+#include <memory>
+#include "app/tide/records.h"
+#include "app/tide/mass_constants.h"
+
+#include "model/Peak.h"
+#include "SpectrumCollectionFactory.h"
+#include "SpectrumRecordWriter.h"
+#include "io/carp.h"
+#include "util/crux-utils.h"
+
+// For printing uint64_t values
+#define __STDC_FORMAT_MACROS
+#ifndef _MSC_VER
+#include <inttypes.h>
+#endif
+
+int SpectrumRecordWriter::scanCounter_ = 0;
+
+/**
+ * Converts a spectra file to spectrumrecords format for use with tide-search.
+ * Spectra file is read by pwiz. Returns true on successful conversion.
+ */
+bool SpectrumRecordWriter::convert(
+  const string& infile, ///< spectra file to convert
+  string outfile  ///< spectrumrecords file to output
+) {
+  auto_ptr<Crux::SpectrumCollection> spectra(SpectrumCollectionFactory::create(infile.c_str()));
+
+  // Open infile
+  try {
+    if (!spectra->parse()) {
+      return false;
+    }
+  } catch (const std::exception& e) {
+    carp(CARP_ERROR, "%s", e.what());
+    return false;
+  } catch (...) {
+    return false;
+  }
+
+  // Write outfile
+  pb::Header header;
+  header.set_file_type(pb::Header::SPECTRA);
+
+  pb::Header_Source* source = header.add_source();
+  source->set_filename(infile);
+  size_t pos = infile.rfind('.');
+  string extension = (pos == string::npos) ? "UNKNOWN" : infile.substr(pos + 1);
+  source->set_filetype(extension);
+
+  header.mutable_spectra_header()->set_sorted(false);
+
+  HeadedRecordWriter writer(outfile, header);
+  if (!writer.OK()) {
+    return false;
+  }
+
+  scanCounter_ = 0;
+
+  // Go through the spectrum list and write each spectrum
+  for (SpectrumIterator i = spectra->begin(); i != spectra->end(); ++i) {
+    (*i)->sortPeaks(_PEAK_LOCATION); // Sort by m/z
+    vector<pb::Spectrum> pb_spectra = getPbSpectra(*i);
+    for (vector<pb::Spectrum>::const_iterator j = pb_spectra.begin();
+         j != pb_spectra.end();
+         ++j) { 
+      writer.Write(&*j);
+    }
+  }
+
+  return true;
+}
+
+/**
+ * Return a pb::Spectrum from a pwiz SpectrumPtr
+ * If spectrum is ms1, or has no precursors/peaks then return empty pb::Spectrum
+ */
+vector<pb::Spectrum> SpectrumRecordWriter::getPbSpectra(
+  const Crux::Spectrum* s
+) {
+  vector<pb::Spectrum> spectra;
+
+  if (s->getNumZStates() == 0 || s->getNumPeaks() == 0) {
+    return spectra;
+  }
+
+  // Get scan number
+  int scan_num = s->getFirstScan();
+  if (scanCounter_ > 0 || scan_num <= 0) {
+    carp_once(CARP_INFO, "Parser could not determine scan numbers for this "
+                         "file, using ordinal numbers as scan numbers.");
+    scan_num = ++scanCounter_;
+  }
+
+  const vector<SpectrumZState>& zStates = s->getZStates();
+  for (vector<SpectrumZState>::const_iterator i = zStates.begin(); i != zStates.end(); ++i) {
+    spectra.push_back(pb::Spectrum());
+    pb::Spectrum& newSpectrum = spectra.back();
+    newSpectrum.set_spectrum_number(scan_num);
+    newSpectrum.set_precursor_m_z(i->getMZ());
+    newSpectrum.mutable_charge_state()->Add(i->getCharge());
+    addPeaks(&newSpectrum, s);
+    if (newSpectrum.peak_m_z_size() == 0) {
+      spectra.pop_back();
+    }
+  }
+
+  return spectra;
+}
+
+/**
+ * Add peaks to a pb::Spectrum
+ */
+void SpectrumRecordWriter::addPeaks(
+  pb::Spectrum* spectrum,
+  const Crux::Spectrum* s
+) {
+  int mz_denom, intensity_denom;
+  getDenoms(s, &mz_denom, &intensity_denom);
+  spectrum->set_peak_m_z_denominator(mz_denom);
+  spectrum->set_peak_intensity_denominator(intensity_denom);
+  uint64_t last = 0;
+  int last_index = -1;
+  uint64_t intensity_sum = 0;
+
+  for (PeakIterator i = s->begin(); i != s->end(); ++i) {
+    FLOAT_T peakMz = (*i)->getLocation();
+    uint64_t mz = peakMz * mz_denom + 0.5;
+    uint64_t intensity = (*i)->getIntensity() * intensity_denom + 0.5;
+    if (mz < last) {
+      // Unsorted peaks, this should never happen since peaks get sorted earlier
+      carp(CARP_FATAL, "Peaks are not sorted");
+    } else if (mz == last) {
+      intensity_sum += intensity;
+      spectrum->set_peak_intensity(last_index, intensity_sum);
+    } else {
+      spectrum->add_peak_m_z(mz - last);
+      spectrum->add_peak_intensity(intensity);
+      last = mz;
+      intensity_sum = intensity;
+      ++last_index;
+    }
+  }
+}
+
+/**
+ * See how much precision is given in the peak data
+ */
+void SpectrumRecordWriter::getDenoms(
+  const Crux::Spectrum* s,  ///< spectra with peaks to check
+  int* mzDenom, ///< out parameter for m/z denom
+  int* intensityDenom ///< out parameter for intensity denom
+) {
+  const int kMaxPrecision = 10000; // store at most 4 digits of precision
+  *mzDenom = kMaxPrecision;
+  *intensityDenom = kMaxPrecision;
+  for (int precision = 1; precision < kMaxPrecision; precision *= 10) {
+    bool mzDenomOk = (*mzDenom == kMaxPrecision);
+    bool intensityDenomOk = (*intensityDenom == kMaxPrecision);
+    if (!mzDenomOk && !intensityDenomOk) {
+      return;
+    }
+    for (PeakIterator i = s->begin(); i != s->end(); ++i) {
+      if (mzDenomOk) {
+        double mzX = (*i)->getLocation() * precision;
+        if (fabs(mzX - google::protobuf::uint64(mzX + 0.5)) >= 0.001) {
+          mzDenomOk = false;
+        }
+      }
+      if (intensityDenomOk) {
+        double intensityX = (*i)->getIntensity() * precision;
+        if (fabs(intensityX - google::protobuf::uint64(intensityX + 0.5)) >= 0.001) {
+          intensityDenomOk = false;
+        }
+      }
+      if (!mzDenomOk && !intensityDenomOk) {
+        break;
+      }
+    }
+    if (mzDenomOk) {
+      *mzDenom = precision;
+    }
+    if (intensityDenomOk) {
+      *intensityDenom = precision;
+    }
+  }
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/SpectrumRecordWriter.h b/src/io/SpectrumRecordWriter.h
new file mode 100644
index 0000000..f647d62
--- /dev/null
+++ b/src/io/SpectrumRecordWriter.h
@@ -0,0 +1,64 @@
+#ifndef SPECTRUM_RECORD_WRITER_H
+#define SPECTRUM_RECORD_WRITER_H
+
+#include "Spectrum.h"
+#include "spectrum.pb.h"
+
+using namespace std;
+
+/**
+ * A class for converting spectra file to the spectrumrecords format for use
+ * with tide-search.
+ */
+class SpectrumRecordWriter {
+
+ public:
+
+  /**
+   * Converts a spectra file to spectrumrecords format for use with tide-search.
+   * Spectra file is read by pwiz. Returns true on successful conversion.
+   */
+  static bool convert(
+    const string& infile, ///< spectra file to convert
+    string outfile  ///< spectrumrecords file to output
+  );
+
+ protected:
+
+  static int scanCounter_;
+
+  /**
+   * Return a pb::Spectrum from a Crux::Spectrum
+   * Returns a default instance if there is a problem
+   */
+  static std::vector<pb::Spectrum> getPbSpectra(
+    const Crux::Spectrum* s
+  );
+
+  /**
+   * Add peaks to a pb::Spectrum
+   */
+  static void addPeaks(
+    pb::Spectrum* spectrum,
+    const Crux::Spectrum* s
+  );
+
+  /**
+   * See how much precision is given in the vals array.
+   */
+  static void getDenoms(
+    const Crux::Spectrum* s,  ///< values to check
+    int* mzDenom, ///< out parameter for m/z denom
+    int* intensityDenom ///< out parameter for intensity denom
+  );
+
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/io/carp.cpp b/src/io/carp.cpp
new file mode 100644
index 0000000..90e9672
--- /dev/null
+++ b/src/io/carp.cpp
@@ -0,0 +1,138 @@
+/*************************************************************************
+ * \file carp.cpp
+ * \brief Object for representing a single protein.
+ *************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include "carp.h"
+#include "util/crux-utils.h"
+#include "parameter.h"
+#include "util/Params.h"
+#include "util/utils.h"
+
+using namespace std;
+
+/**
+ * Constants
+ */
+static int G_verbosity; 
+static FILE* log_file = NULL;
+
+unsigned int hash_size_ = 1000;
+
+void set_verbosity_level(int verbosity) {
+  G_verbosity = verbosity;
+}
+
+int get_verbosity_level(void) {
+  return G_verbosity;
+}
+
+/**
+ * Open log file for carp messages.
+ *
+ * Parameters must have been processed before calling this function.
+ */
+void open_log_file(string log_file_name) {
+  string output_dir = Params::GetString("output-dir");
+  bool overwrite = Params::GetBool("overwrite");
+  log_file_name = prefix_fileroot_to_name(log_file_name);
+  log_file = create_file_in_path(log_file_name, output_dir.c_str(), overwrite);
+}
+
+/**
+ * Print command line to log file.
+ *
+ * Parameters must have been processed before calling this function.
+ */
+void log_command_line(int argc, char *argv[]) {
+  // Command line arguments were shifted, shift back.
+  ++argc;
+  --argv;
+  if (log_file != NULL) {
+    fprintf(log_file, "COMMAND LINE: ");
+    int i = 0;
+    for (i = 0; i < argc; ++i) {
+      fprintf(log_file, "%s%c", argv[i], i < (argc - 1) ? ' ' : '\n');
+    }
+  }
+}
+
+static void carp_print(const char *string) {
+  fprintf(stderr, "%s", string);
+  if (log_file != NULL) {
+    fprintf(log_file, "%s", string);
+  }
+}
+
+/**
+ * Print message to log file.
+ *
+ * Print severity level and message to log file.
+ * The term 'carp' is used because 'log' is already used 
+ * by the math library. 
+ *
+ * Verbosity of CARP_FATAL will cause the 
+ * program to exit with status code 1.
+ *
+ */
+void carp( int verbosity, const char* format, ...) {
+  if (verbosity <= G_verbosity) {
+    va_list  argp;
+
+    if (verbosity == CARP_WARNING) {
+      carp_print("WARNING: ");
+    } else if (verbosity == CARP_ERROR) {
+      carp_print("ERROR: ");
+    } else if (verbosity == CARP_FATAL) {
+      carp_print("FATAL: ");
+    } else if (verbosity == CARP_INFO) {
+      carp_print("INFO: ");
+    } else if (verbosity == CARP_DETAILED_INFO) {
+      carp_print("DETAILED INFO: ");
+    } else if (verbosity == CARP_DEBUG) {
+      carp_print("DEBUG: ");
+    } else if (verbosity == CARP_DETAILED_DEBUG) {
+      carp_print("DETAILED DEBUG: ");
+    } else {
+      carp_print("UNKNOWN: ");
+    }
+
+    va_start(argp, format);
+    vfprintf(stderr, format, argp);
+    va_end(argp);
+    if (log_file != NULL) { 
+      va_start(argp, format); //BF: added to fix segfault
+      vfprintf(log_file, format, argp);
+      va_end(argp);
+    }
+    carp_print("\n");
+    fflush(stderr);
+    if (log_file != NULL) {
+      fflush(log_file);
+    }
+  } 
+  if (verbosity == CARP_FATAL) {
+    // Fatal carps cause the program to exit
+#ifdef DEBUG
+    abort(); // Dump core in DEBUG mode.  Use 'make CXXFLAGS=-DDEBUG"'
+#else
+    exit(1);
+#endif
+  }
+}
+
+void carp ( int verbosity, string& msg) {
+
+  string carp_msg = msg;
+  carp(verbosity, "%s", carp_msg.c_str());
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/io/carp.h b/src/io/carp.h
new file mode 100644
index 0000000..6aa97c0
--- /dev/null
+++ b/src/io/carp.h
@@ -0,0 +1,153 @@
+/**
+ * \file carp.h 
+ * $Revision: 1.6 $
+ * \brief Provides methods for logging error messages, and setting verbosity level.
+ *****************************************************************************/
+#ifndef CARP_H 
+#define CARP_H
+
+#include "util/utils.h"
+
+
+/** 
+ * Verbosity level for a fatal error (e.g., could not open an input file)
+ */
+static const int CARP_FATAL = 0;    
+
+/** 
+ * Verbosity level for a serious, not fatal, error
+ * (e.g., could not close a file handle)
+ */
+static const int CARP_ERROR = 10;   
+
+/**
+ * Verbosity level for a warning (e.g., a spectrum has no peaks)
+ */
+static const int CARP_WARNING = 20; 
+
+/**
+ * Verbosity level for informational message (e.g., processed X lines of file)
+ */
+static const int CARP_INFO = 30;    
+
+/**
+ * Verbosity level for detailed informational message (e.g, on spectrum 1000 )
+ */
+static const int CARP_DETAILED_INFO = 40;    
+
+/** 
+ * Verbosity level for a debugging message
+ */
+static const int CARP_DEBUG = 50;   
+
+/** 
+ * Verbosity level for very detailed debugging message
+ */
+static const int CARP_DETAILED_DEBUG = 60;  
+
+/** 
+ * The maximum verbosity level
+ */
+static const int CARP_MAX = 100; 
+
+/**
+ * Allow for compilation to remove carp commands in the preprocessor.
+ */
+#define IF_CARP(x, y) if (get_verbosity_level() >= x) {y;}
+#define CRUX_DEBUG 
+
+#ifdef CRUX_DEBUG
+/**
+ * Allow for compilation to remove carp commands in the preprocessor.
+ */
+#define IF_CARP_DEBUG(y) IF_CARP(CARP_DEBUG, y)
+/**
+ * Allow for compilation to remove carp commands in the preprocessor.
+ */
+#define IF_CARP_DETAILED_DEBUG(y) IF_CARP(CARP_DETAILED_DEBUG, y)
+#else
+/**
+ * Allow for compilation to remove carp commands in the preprocessor.
+ */
+#define IF_CARP_DEBUG(y) y;
+/**
+ * Allow for compilation to remove carp commands in the preprocessor.
+ */
+#define IF_CARP_DETAILED_DEBUG(y) y;
+#endif
+
+
+#include <stdio.h>
+#include <string>
+#include "util/utils.h"
+
+/**
+ * Sets the global verbosity level. Expects an integer greater than or equal
+ * to CARP_FATAL and less than CARP_MAX
+ */
+void set_verbosity_level(int verbosity);
+
+/**
+ * \returns the current verbosity level.
+ */
+int get_verbosity_level(void);
+
+/**
+ * Open log file for carp messages.
+ *
+ * Parameters must have been processed before calling this function.
+ */
+void open_log_file(std::string log_file_name);
+
+/**
+ * Print command line to log file.
+ *
+ * Parameters must have been processed before calling this function.
+ */
+void log_command_line(int argc, char *argv[]);
+
+/**
+ * Print message to log file.
+ *
+ * Print severity level and message to log file.
+ * The term 'carp' is used because 'log' is already used 
+ * by the math library. 
+ *
+ * Verbosity of CARP_FATAL will cause the 
+ * program to exit with status code 1.
+ *
+ */
+void carp(
+  int verbosity, 
+  const char* format,
+  ...
+);
+
+void carp(
+  int verbosity,
+  std::string& msg
+);
+
+/**
+ * \def carp_once( verbosity, msg, ...)
+ *
+ * \brief Print message to log file, just once.
+ *
+ * Similar to the carp function, below, but will only print the message once.
+ */
+#define carp_once( verbosity, msg, ... ) \
+{ \
+  static bool _carp_; \
+  if (!_carp_) carp(verbosity, msg, ## __VA_ARGS__); \
+  _carp_ = 1;\
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
+
+#endif
diff --git a/src/libcrux-support.a b/src/libcrux-support.a
new file mode 100644
index 0000000..f6d4f9c
Binary files /dev/null and b/src/libcrux-support.a differ
diff --git a/src/model/AbstractMatch.cpp b/src/model/AbstractMatch.cpp
new file mode 100644
index 0000000..55d76a4
--- /dev/null
+++ b/src/model/AbstractMatch.cpp
@@ -0,0 +1,142 @@
+/*************************************************************************//**
+ * \file AbstractMatch.cpp
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 1/26 2013
+ * \brief Object for holding match scores.
+ ****************************************************************************/
+#include "AbstractMatch.h"
+#include "io/carp.h"
+  
+/**
+ * \returns a new memory allocated abstract match
+ */
+AbstractMatch::AbstractMatch() {
+}
+
+/**
+ * default destructor
+ */
+AbstractMatch::~AbstractMatch() {
+}
+
+
+/**
+ * \returns the match score for a particular score type
+ */
+FLOAT_T AbstractMatch::getScore(
+  SCORER_TYPE_T type ///< score type desired
+  ) const {
+
+  ScoreMap::const_iterator findScore = scores_.find(type);
+  if (findScore == scores_.end()) {
+    carp(CARP_WARNING, "Score not set!");
+    return 0.0;
+  }
+
+  return findScore->second;
+
+}
+
+/**
+ * \returns the match rank for a particular score type
+ */
+int AbstractMatch::getRank(
+  SCORER_TYPE_T type ///< score type desired
+  ) const {
+
+  RankMap::const_iterator findRank = ranks_.find(type);
+  if (findRank == ranks_.end()) {
+    carp(CARP_WARNING, "Rank not set!");
+    return 0;
+  }
+
+  return findRank->second;
+
+}
+
+/**
+ * sets the match score for particular score type
+ */
+void AbstractMatch::setScore(
+  SCORER_TYPE_T type, ///< score to set
+  FLOAT_T score ///< score value
+  ) {
+
+  scores_[type] = score;  
+
+}
+
+/**
+ * sets the match rank for particular score type
+ */
+void AbstractMatch::setRank(
+  SCORER_TYPE_T type, ///< rank to set
+  int rank ///< rank value
+  ) {
+
+  ranks_[type] = rank;
+
+}
+
+/**
+ * \returns whether the match has a particular score type assigned
+ */
+bool AbstractMatch::hasScore(
+  SCORER_TYPE_T type ///< score to test
+  ) const {
+
+  return (scores_.find(type) != scores_.end());
+}
+
+/**
+ * \returns whether the match has a particular rank type assigned
+ */
+bool AbstractMatch::hasRank(
+  SCORER_TYPE_T type ///< rank to test
+  ) const {
+
+  return (ranks_.find(type) != ranks_.end());
+}
+
+/**
+ * \returns whether the match is a decoy or not (default false)
+ */
+bool AbstractMatch::isDecoy() {
+
+  return false;
+}
+  
+/**
+ * \returns the beginning iterator for all set scores in the match
+ */
+ScoreMapIterator AbstractMatch::scoresBegin() {
+  return scores_.begin();
+}
+
+/**
+ * \returns the end iterator for all set scores in the match
+ */
+ScoreMapIterator AbstractMatch::scoresEnd() {
+  return scores_.end();
+}
+
+/**
+ * \returns the beginning iterator for all set ranks in the match
+ */
+RankMapIterator AbstractMatch::ranksBegin() {
+  return ranks_.begin();
+}
+
+/**
+ * \returns the end iterator for all set ranks in the match
+ */
+RankMapIterator AbstractMatch::ranksEnd() {
+  return ranks_.end();
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/AbstractMatch.h b/src/model/AbstractMatch.h
new file mode 100644
index 0000000..f0fe7ed
--- /dev/null
+++ b/src/model/AbstractMatch.h
@@ -0,0 +1,104 @@
+/**
+ * \file AbstractMatch.h
+ * $Revision: 1.00 $ 
+ * \brief Object for holding match scores
+ ****************************************************************************/
+#ifndef ABSTRACTMATCH_H_
+#define ABSTRACTMATCH_H_
+
+#include "match_objects.h"
+
+class AbstractMatch {
+
+ protected:
+  ScoreMap scores_;  ///< map of scores
+  RankMap ranks_; ///< map of ranks for scores
+
+ public:
+
+  /**
+   * \returns a new memory allocated abstract match
+   */
+  AbstractMatch();
+
+  /**
+   * default destructor
+   */
+  virtual ~AbstractMatch();
+
+  /**
+   * \returns the match score for a particular score type
+   */
+  virtual FLOAT_T getScore(
+    SCORER_TYPE_T type ///<score type desired
+    ) const;
+
+  /**
+   * \returns the match rank for a particular score type
+   */
+  virtual int getRank(
+    SCORER_TYPE_T type ///<score type desired
+    ) const;
+
+  /**
+   * sets the match score for particular score type
+   */
+  virtual void setScore(
+    SCORER_TYPE_T type, ///< score to set
+    FLOAT_T score ///< score value
+  );
+
+  /**
+   * sets the match rank for particular score type
+   */
+  virtual void setRank(
+    SCORER_TYPE_T type, ///< rank to set
+    int rank ///< rank value
+  );
+  
+  /**
+   * \returns whether the match has a particular score type assigned
+   */
+  virtual bool hasScore(
+    SCORER_TYPE_T type ///< score to test
+  ) const;
+
+  virtual bool hasRank(
+    SCORER_TYPE_T type ///< rank to test
+  ) const;
+
+  /**
+   * \returns whether the match is a decoy or not (default false).
+   */
+  virtual bool isDecoy();  
+
+  /**
+   * \returns the beginning iterator for all set scores in the match
+   */
+  ScoreMapIterator scoresBegin();
+
+  /**
+   * \returns the end iterator for all set scores in the match
+   */
+  ScoreMapIterator scoresEnd();
+
+  /**
+   * \returns the beginning iterator for all set ranks in the match
+   */
+  RankMapIterator ranksBegin();
+
+  /**
+   * \returns the end iterator for all set ranks in the match
+   */
+  RankMapIterator ranksEnd();
+
+};
+
+#endif //ABSTRACTMATCH_H
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/Database.cpp b/src/model/Database.cpp
new file mode 100644
index 0000000..fc184a0
--- /dev/null
+++ b/src/model/Database.cpp
@@ -0,0 +1,836 @@
+/*************************************************************************//**
+ * \file Database.cpp
+ * \brief Object for representing a database of protein sequences.
+ ****************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#ifndef _MSC_VER
+#include <sys/mman.h>
+#include <unistd.h>
+#endif
+#include "util/utils.h"
+#include "util/crux-utils.h"
+#include "Peptide.h"
+#include "Protein.h"
+#include "ProteinPeptideIterator.h"
+#include "Database.h"
+#include "io/carp.h"
+#include "PeptideConstraint.h"
+#include "ProteinIndex.h"
+#include "ProteinIndexIterator.h"
+
+#include "DatabaseProteinIterator.h"
+#include "DatabasePeptideIterator.h"
+
+#include <map>
+#include <vector>
+#include <iostream>
+
+using namespace std;
+using namespace Crux; 
+const string Database::binary_suffix = "-binary-fasta";
+const string Database::decoy_binary_suffix = "-binary-fasta-decoy";
+const string Database::decoy_fasta_suffix = "-random.fasta";
+
+/**
+ * intializes a database object
+ */
+void Database::init(){
+  file_ = NULL;
+  is_parsed_ = false;
+  size_ = 0; 
+  use_light_protein_ = false; 
+  is_memmap_ = false;
+  data_address_ = NULL;
+  pointer_count_ = 1;
+  file_size_ = 0;
+  is_hashed_ = false;
+  proteins_ = new vector<Protein*>();
+  protein_map_ = new map<const char*, Protein*, cmp_str>();
+  decoys_ = NO_DECOYS;
+  binary_is_temp_ = false;
+}
+
+/**
+ * \returns An (empty) database object.
+ */
+Database::Database() {
+  init();
+}
+
+
+/**
+ * \returns A new database object.
+ */
+Database::Database(
+  const string& filename, ///< The file from which to parse the database. 
+  ///< either text fasta file or binary fasta file -in
+  bool is_memmap, ///< are we using a memory mapped binary fasta file? 
+  ///< If so, all proteins are memory mapped -in
+  DECOY_TYPE_T decoys ///< is this a decoy database
+  )         
+{
+  carp(CARP_DEBUG, "Creating new database from '%s'", filename.c_str());
+  init();
+  is_memmap_ = is_memmap;
+  if( is_memmap_ ){
+    binary_filename_ = filename;
+  } else {
+    fasta_filename_ = filename;
+  }
+  decoys_ = decoys;
+}  
+
+/**
+ * Frees an allocated protein object.
+ */
+void Database::freeDatabase(
+  Database* database ///< An allocated database -in
+  )
+{
+  if(database == NULL){
+    return;
+  }
+
+  // decrement database pointer counter
+  --database->pointer_count_;
+  carp(CARP_DETAILED_DEBUG, "Database pointer count %i",  
+      database->pointer_count_);
+
+  // DEBUG show the databse pointer count
+  // printf("Free: After free: %s: %d\n", database->pointer_count);
+
+  // only free up memory when remaining pointers are from the proteins
+  if((size_t)database->pointer_count_ > database->proteins_->size() ){ 
+    return;
+  }
+
+  delete database;
+}
+
+Database::~Database() {
+
+  // only free proteins if been parsed and file has been opened
+  if(is_parsed_){
+    carp(CARP_DEBUG, "Freeing database.");
+    
+    // free each protein in the array
+    unsigned int protein_idx;
+    for(protein_idx=0; protein_idx < proteins_->size(); ++protein_idx){
+      delete ((*proteins_)[protein_idx]);
+    }
+    delete proteins_;
+    delete protein_map_; // contents already deleted
+    
+    // free memory mapped binary file from memory
+    if(is_memmap_){
+      // un map the memory!!
+#ifdef _MSC_VER
+      stub_unmmap(&unmap_info_); 
+#else
+      if(munmap(data_address_, file_size_) != 0){
+        carp(CARP_ERROR, "failed to unmap the memory of binary fasta file");
+      }
+#endif
+    }
+    // not memory mapped
+    else if (file_ != NULL) {
+      // close file handle
+      carp(CARP_DEBUG, "Closing database filehandle");
+      fclose(file_);
+    }
+  }
+
+  if( binary_is_temp_ && !binary_filename_.empty() ){
+    carp(CARP_DEBUG, "Deleting temp binary fasta %s.", 
+         binary_filename_.c_str());
+    remove(binary_filename_.c_str());
+  }
+}
+
+/**
+ * Prints a database object to file.
+ */
+void Database::print(
+  FILE* file    ///< output file stream -out             
+  )
+{
+  Protein* protein = NULL;
+
+  if( is_memmap_ ){
+    fprintf(file, "filename:%s\n", binary_filename_.c_str());
+  } else {
+    fprintf(file, "filename:%s\n", fasta_filename_.c_str());
+  }
+  fprintf(file, "is_parsed:");
+  
+  // has the database been parsed?
+  if(is_parsed_){
+    fprintf(file, "true\n");
+    DatabaseProteinIterator* iterator
+      = new DatabaseProteinIterator(this);
+ 
+    while(iterator->hasNext()){
+      protein = iterator->next();
+      // if the database uses light/heavy functionality
+      if(use_light_protein_){
+        protein->toHeavy();
+      }
+      protein->print(stdout);
+  
+      // if the database uses light/heavy functionality
+      /** 
+       * uncomment this code if you want to restore a protein to 
+       * light after converted to heavy
+      if(database->use_light_protein){
+        protein_to_light(protein);
+      }
+      */
+    }
+    delete iterator;
+  }
+  else{
+    fprintf(file, "false\n");
+  }
+}
+
+void Database::addProtein(
+  Protein* protein
+  ) {
+
+  protein->setDatabase(this);
+      
+  // add protein to database
+  proteins_->push_back(protein);
+  
+  protein->setProteinIdx(proteins_->size()-1);
+
+  if (is_hashed_) {
+    string& id = protein->getIdPointer();
+    protein_map_->insert(make_pair(id.c_str(), protein));
+  }
+}
+
+/**
+ * Parses a database from the text based fasta file in the filename
+ * member variable
+ * reads in all proteins in the fasta file and creates a protein object
+ * and adds them to the database protein array
+ * total proteins in fasta file must not exceed MAX_PROTEIN constant
+ * IF using light_protein functionality will not read in the sequence or id.
+ * \returns true if success. false if failure.
+ */
+bool Database::parseTextFasta()
+{
+  unsigned long working_index;
+  FILE* file = NULL;
+  char* new_line = NULL;
+  int line_length;
+  size_t buf_length = 0;
+  Protein* new_protein;
+  unsigned int protein_idx;
+
+  carp(CARP_DEBUG, "Parsing text fasta file '%s'", fasta_filename_.c_str());
+  // check if already parsed
+  if(is_parsed_){
+    return true;
+  }
+  
+  // open file and 
+  file = fopen(fasta_filename_.c_str(), "rb");
+  
+  // check if succesfully opened file
+  if(file == NULL){
+    carp(CARP_ERROR, "Failed to open fasta file %s", fasta_filename_.c_str());
+    return false;
+  }
+  
+  // check if use light protein and parse those proteins from protein index
+  if(use_light_protein_ && ProteinIndex::onDisk(fasta_filename_.c_str(), false)){
+    // let the user know that protein index file is being used
+    carp(CARP_INFO, "using protein index file");
+
+    // create a protein index iterator
+    ProteinIndexIterator* protein_index_iterator =
+      new ProteinIndexIterator(fasta_filename_.c_str());
+
+    // iterate over all proteins in protein index
+    while(protein_index_iterator->hasNext()){
+      // check if there's space for more proteins
+      new_protein = protein_index_iterator->next();
+      new_protein->setDatabase(this);
+      
+      // add protein to database
+      proteins_->push_back(new_protein);
+    }
+    // job well done..free iterator
+    delete protein_index_iterator;
+  }
+  else{  
+    working_index = ftell(file);
+    // check each line until reach '>' line
+    while((line_length =  getline(&new_line, &buf_length, file)) != -1){
+      if(new_line[0] == '>'){
+        // the new protein to be added
+        new_protein = new Protein();
+        
+        // do not parse the protein sequence if using light/heavy functionality
+        if(use_light_protein_){
+          // set light and offset
+          new_protein->setOffset(working_index);
+          new_protein->setIsLight(true);
+        }
+        else{
+          // rewind to the beginning of the protein to include ">" line
+          fseek(file, working_index, SEEK_SET);
+          
+          // failed to parse the protein from fasta file
+          // protein offset is set in the parse_protein_fasta_file method
+          if(!new_protein->parseProteinFastaFile(file)){
+            fclose(file);
+            delete new_protein;
+            for(protein_idx=0;protein_idx<proteins_->size();protein_idx++){
+              delete (proteins_->at(protein_idx));
+            }
+            proteins_->clear();
+            carp(CARP_ERROR, "Failed to parse fasta file");
+            return false;
+          }
+          new_protein->setIsLight(false);
+        }
+        // add protein to database
+        proteins_->push_back(new_protein);
+        // set protein index, database
+        new_protein->setProteinIdx(proteins_->size()-1);
+        new_protein->setDatabase(this);
+      }
+      working_index = ftell(file);
+    }
+    free(new_line);
+  }
+  
+  // yes the database is paresed now..!!
+  is_parsed_ = true;
+  file_ = file;
+  return true;
+}
+
+/**
+ * memory maps the binary fasta file for the database
+ *\return true if successfully memory map binary fasta file, else false
+ */
+bool Database::memoryMap(
+  int file_d  ///<  file descriptor -in
+  )
+{
+  struct stat file_info;
+  
+  // get information of the binary fasta file
+  if (stat(binary_filename_.c_str(), &file_info) == -1) {
+    carp(CARP_ERROR,
+         "Failed to retrieve information of binary fasta file: %s",
+         binary_filename_.c_str());
+    return false;
+  }
+  
+  // set size of the binary fasta file in database
+  // this is used later to know how much to unmap
+  file_size_ = file_info.st_size;
+  
+  // memory map the entire binary fasta file!
+#ifdef _MSC_VER
+  data_address_ = stub_mmap(binary_filename_.c_str(), &unmap_info_);
+
+#else
+  data_address_ = mmap((caddr_t)0, file_info.st_size, 
+                       PROT_READ, MAP_PRIVATE /*MAP_SHARED*/, file_d, 0);
+
+  // check if memory mapping has succeeded
+  if ((caddr_t)(data_address_) == (caddr_t)(-1)){
+    carp(CARP_ERROR, "Failed to use mmap function for binary fasta file: %s", 
+         binary_filename_.c_str());
+    return false;
+  }
+#endif
+  
+  return true;
+}
+
+/**
+ * Assumes that there is a 1 at the very end after all the proteins in
+ * binary file.
+ * \returns True successfully populates the proteins from memory mapped
+ * binary fasta file, else false .
+ */
+bool Database::populateProteinsFromMemmap()
+{
+  Protein* new_protein;
+  unsigned int protein_idx = 0;
+  char* data = (char*)data_address_;
+  
+  // parse proteins until the end of list
+  while((int)data[0] != 1){
+    
+    // the new protein to be added
+    new_protein = new Protein();
+    
+    // parse protein from memory map
+    if(!new_protein->parseProteinBinaryMemmap(&data)){
+      // failed to parse the protein from memmap
+      // free all proteins, and return false
+      delete new_protein;
+      for(; protein_idx < proteins_->size(); ++protein_idx){
+        delete proteins_->at(protein_idx);
+      }
+      proteins_->clear();
+      carp(CARP_ERROR, "Failed to parse fasta file");
+      return false;
+    }
+    new_protein->setIsLight(false);
+    
+    // add protein to database
+    proteins_->push_back(new_protein);
+    // set protein index, database
+    new_protein->setProteinIdx(proteins_->size()-1);
+    new_protein->setDatabase(this);
+  }
+
+  return true;
+}
+
+/**
+ * \brief Parses a database from the binary fasta file in the filename
+ * member variable.
+ *
+ * Memory maps the binary fasta file into memory. The protein
+ * sequences are not copied, but just pointed to the memory mapped
+ * location. 
+ * \returns true if success. false if failure.
+ */
+bool Database::parseMemmapBinary()
+{
+  int file_d = -1;
+  carp(CARP_DEBUG, "Parsing binary fasta file '%s'", binary_filename_.c_str());
+ 
+  // check if already parsed
+  if(is_parsed_){
+    return true;
+  }
+  
+  // open file and 
+  file_d = open(binary_filename_.c_str(), O_RDONLY);
+  
+  // check if succesfully opened file
+  if(file_d == -1){
+    carp(CARP_FATAL, "Failed to open file to parse database");
+    return false;
+  }
+
+  // FIXME, if what to use some light protein for binary file change here...
+  // check if user request light protein
+  // When using a binary file in memory map, cannot use light protein
+  // change to false on light protein useage
+  if(use_light_protein_){
+    carp(CARP_WARNING, 
+         "memory mapping does not support light protein,changing settings to use heavy protein");
+    use_light_protein_ = false;;
+  }
+
+  // memory map the binary fasta file into memory
+  if(!memoryMap(file_d)){
+    carp(CARP_ERROR, "Failed to memory map binary fasta file into memory");
+    return false;
+  }
+
+  // populate the proteins from the memory mapped fasta file
+  if(!populateProteinsFromMemmap()){
+    carp(CARP_ERROR, "Failed to populate the proteins from memory mapped fasta file");
+    return false;
+  }
+   
+  // yes the database is paresed now..!!
+  is_parsed_ = true;
+  return true;
+}
+
+
+/**
+ * Parses a database from the file in the filename member variable
+ * The is_memmap field in the database struct determines whether the
+ * input file is a binary fasta file or normal text fasta file.
+ *
+ * IF is_memmap is true, memory maps the entire binary fasta file into memory
+ * and then creates protein objects that point to the memory mapped binary file
+ *
+ * IF is_memmap is false, uses the traditional text fasta file which
+ * it parses out the various peptides for each protein. Only when
+ * using text fasta file can you use light/heavy protein, in which 
+ * if using light_protein functionality will not read in the sequence
+ * or id. Will parse sequence if protein  
+ * is needed, lazy parsing.
+ *
+ * For Both cases, reads in all proteins in file and creates a protein object
+ * and adds them to the database protein array
+ * total proteins in fasta file must not exceed MAX_PROTEIN constant
+ *
+ * \returns true if success. false if failure.
+ */
+bool Database::parse()
+{
+  // should we parse the database using memory mapped binary fasta file?
+  if(is_memmap_){
+    return parseMemmapBinary();   
+  }
+  else{ // parse database from normal text fasta file, no memory mapping!
+    return parseTextFasta();
+  }
+  
+  // succeeded in parsing database
+  return true;
+}
+
+
+/**
+ * \brief Changes a database from one that reads from a fasta file to
+ * one that reads from a binary/memmory mapped protein file.
+ *
+ * If database already has binary source (i.e. is_memmap == true), 
+ * returns true.  
+ * Opens the fasta file pointed to by filename for reading.  Creates an
+ * output file with the name given.  Reads in each protein from the
+ * text file and serializes it to the output file.  Closes both files.
+ * Changes filename to point to new output file and sets is_memmap to
+ * true. Parses the database.
+ * \returns true if all processes succeed, else false.
+ */
+bool Database::transformTextToMemmap(
+  const char* output_dir,
+  bool binary_is_temp
+  ){
+
+  createBinaryFasta(output_dir, binary_is_temp);
+
+  // set is_memmap to true
+  setMemmap(true);
+
+  // parse the binary fasta
+  bool success = parse();
+
+  return success;
+}
+
+/**
+ * Using the fasta file the Database was instantiated with, write a
+ * binary protein file in the given directory to use for memory
+ * mapping.  If is_temp, delete the file on destruction.  Warns if
+ * Database was not opened with a text file.  If the database is to
+ * contain decoy proteins, randomizes each protein before
+ * serializing.  Also prints a new fasta file of the decoy proteins in
+ * the same directory as the binary file.
+ */
+void Database::createBinaryFasta(const char* directory, bool is_temp){
+  binary_is_temp_ = is_temp;
+
+  if( fasta_filename_.empty() ){
+    carp(CARP_WARNING, "No fasta file to transform to binary.");
+    return;
+  }
+
+  // get the name of the new binary file
+  const char* binary_suffix = Database::binary_suffix.c_str();
+  if( decoys_ != NO_DECOYS ){
+    binary_suffix = Database::decoy_binary_suffix.c_str();
+  }
+  char* tmp_name = generate_name_path( fasta_filename_.c_str(), ".fasta",
+                                       binary_suffix, directory);
+  binary_filename_ = tmp_name;
+  free(tmp_name);
+  carp(CARP_DEBUG, "Transforming text file '%s' to binary file '%s'",
+       fasta_filename_.c_str(), binary_filename_.c_str());
+
+  // open output file
+  FILE* output_file = fopen(binary_filename_.c_str(), "wb");
+  if( output_file == NULL ){
+    carp(CARP_FATAL, "Could not open binary protein file %s", 
+         binary_filename_.c_str());
+  }
+  // also open a fasta file if this is a decoy database
+  FILE* output_fasta = NULL;
+  if( decoys_ != NO_DECOYS){
+    vector<const char*> suffixes;
+    suffixes.push_back(".fasta");
+    suffixes.push_back(".fa");
+    suffixes.push_back(".fsa");
+    char* fasta_output_name = generate_name_path( fasta_filename_.c_str(),
+                                                  suffixes, 
+                                                  decoy_fasta_suffix.c_str(),
+                                                  directory);
+    output_fasta = fopen(fasta_output_name, "wb");
+    if( output_fasta == NULL ){
+      carp(CARP_FATAL, "Could not open new fasta file %s for decoy proteins.",
+           output_fasta);
+    }
+    free(fasta_output_name);
+  }
+
+
+  // open input file
+  FILE* input_file = fopen(fasta_filename_.c_str(), "rb");
+  if( input_file == NULL ){
+    carp(CARP_FATAL, "Could not open fasta file %s", fasta_filename_.c_str());
+  }
+
+  // for file reading
+  char* new_line = NULL;
+  int line_length = 0;
+  size_t buf_length = 0;
+  unsigned int mod_me = 1000;
+  unsigned int protein_idx = 0;
+
+  // read through the fasta and at each line beginning with >, parse a protein
+  unsigned long working_index = ftell(input_file);
+  while((line_length =  getline(&new_line, &buf_length, input_file)) != -1){
+    if(new_line[0] == '>'){
+      // the new protein to be serialize
+      Protein* new_protein = new Protein();
+      
+      // rewind to the begining of the protein to include ">" line
+      fseek(input_file, working_index, SEEK_SET);
+      // protein offset is set in the parse_protein_fasta_file method
+      if(!new_protein->parseProteinFastaFile(input_file)){
+        fclose(input_file);
+        delete new_protein;
+        carp(CARP_FATAL, "Failed to parse fasta file");
+      }
+      new_protein->setIsLight(false);
+
+      if( decoys_ != NO_DECOYS ){
+        new_protein->shuffle(decoys_);
+        new_protein->print(output_fasta);
+      }
+      
+      // serialize protein as binary to output file
+      new_protein->serialize(output_file);
+
+      // update protein count
+      ++protein_idx;
+
+      // free this protein
+      delete new_protein;
+    } 
+
+    // print status
+    if(protein_idx % mod_me == 0){
+      if((protein_idx / 10) == mod_me){
+        mod_me *= 10;
+      }
+      carp(CARP_INFO, "Reached protein %d", protein_idx);
+    }
+
+    working_index = ftell(input_file);
+  } // next line
+
+  // write the end character to binary fasta file
+  char term_char = 1;  // use 1 and not '*' as the terminal
+                       // character for the file b/c id length is 
+                       // stored in same field and id len == 42
+                       // is the smae as '*'
+  fwrite(&term_char, sizeof(char), 1, output_file);
+
+  // print final status
+  carp(CARP_INFO, "Total proteins found: %d", protein_idx);
+  
+  free(new_line);
+  fclose(input_file);
+  fclose(output_file);
+}
+
+/** 
+ * Access routines of the form get_<object>_<field> and set_<object>_<field>. 
+ */
+
+/**
+ *sets true,false whether the database uses memory mapped
+ */
+void Database::setMemmap(
+  bool is_memmap  ///< is the database memory mapped?
+  )
+{
+  is_memmap_ = is_memmap;
+}
+
+/**
+ *\returns the filename of the database
+ * returns a heap allocated new copy of the filename
+ * user must free the return filename
+ */
+char* Database::getFilename()
+{
+  if( is_memmap_ ){
+    return my_copy_string(binary_filename_.c_str());
+  }
+  return my_copy_string(fasta_filename_.c_str());
+}
+
+
+/**
+ *\returns the pointer to the filename of the database
+ * user must not free or change the filename
+ */
+const char* Database::getFilenamePointer()
+{
+  if( is_memmap_ ){
+    return binary_filename_.c_str();
+  }
+  return fasta_filename_.c_str();
+}
+
+/**
+ *\returns true|false whether the database has been parsed?
+ */
+bool Database::getIsParsed()
+{
+  return is_parsed_;
+}
+
+void Database::setIsParsed(
+  bool is_parsed
+  ) {
+  is_parsed_ = is_parsed;
+}
+
+/**
+ * \returns The type of shuffling used on the proteins in this database
+ */
+DECOY_TYPE_T Database::getDecoyType(){
+  return decoys_;
+}
+
+
+/**
+ * sets the use_light_protein of the database
+ */
+void Database::setUseLightProtein(
+  bool use ///< should I use the light/heavy functionality?
+  )
+{
+  use_light_protein_ = use;
+}
+
+/**
+ *\returns true|false whether the database uses light/heavy
+ */
+bool Database::getUseLightProtein()
+{
+  return use_light_protein_;
+}
+
+/**
+ *\returns the total number of proteins of the database
+ */
+unsigned int Database::getNumProteins()
+{
+  return proteins_->size();
+}
+
+/**
+ *\returns the src FILE* of the database
+ */
+FILE* Database::getFile()
+{
+  return file_;
+}
+
+/**
+ * sets the src FILE* of the database
+ */
+void Database::setFile(
+  FILE* file ///< the src file to add -in
+  )
+{
+  file_ = file;
+}
+
+/**
+ * \returns the nth protein of the database
+ * 
+ */
+Protein* Database::getProteinAtIdx(
+  unsigned int protein_idx ///< The index of the protein to retrieve -in
+  )
+{
+  //carp(CARP_DETAILED_DEBUG, "Getting db protein idx = %i, num proteins %i", 
+  //     protein_idx, database->proteins.size());
+  if( protein_idx >= proteins_->size()){
+    carp(CARP_FATAL, 
+         "Protein index %i out of bounds.  %i proteins in the database",
+         protein_idx, proteins_->size());
+  }
+
+  return proteins_->at(protein_idx);
+}
+
+/**
+ *\returns the protein designated by protein id of the database
+ */
+Protein* Database::getProteinByIdString(
+  const char* protein_id ///< The id string for this protein -in
+  ) {
+
+  //TODO - Implement as a hashtable rather than a map to make 
+  //this even faster if needed.
+  Protein* protein = NULL;
+  if (is_hashed_) {
+    map<const char*, Protein*, cmp_str>::iterator find_iter;
+    find_iter = protein_map_->find(protein_id);
+
+    if (find_iter != protein_map_->end()) {
+      protein = find_iter->second;
+    }
+  } else {
+    //create the hashtable of protein ids
+    for (unsigned int protein_idx = 0;
+      protein_idx < proteins_->size();
+      protein_idx++) {
+
+      Protein* current_protein = proteins_->at(protein_idx);
+      string& current_id = current_protein->getIdPointer();
+      protein_map_->insert(make_pair(current_id.c_str(), current_protein));
+
+      if (current_id == protein_id) {
+        protein = current_protein;
+      }
+        
+    }
+    is_hashed_ = true;
+  }
+  return protein;
+}
+
+/**
+ * increase the pointer_count produced by this database.
+ * \returns database pointer
+ */
+Database* Database::copyPtr(
+  Database* database ///< the query database -in/out
+  )
+{
+  if( database == NULL ){
+    return NULL;
+  }
+  ++database->pointer_count_;
+  return database;
+}
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/model/Database.h b/src/model/Database.h
new file mode 100644
index 0000000..fe8bc44
--- /dev/null
+++ b/src/model/Database.h
@@ -0,0 +1,347 @@
+/**
+ * \file Database.h 
+ * $Revision: 1.27 $
+ * \brief Object for representing a database of protein sequences.
+ *****************************************************************************/
+#ifndef DATABASE_H
+#define DATABASE_H
+
+#include <stdio.h>
+#include "util/utils.h"
+#include "model/objects.h"
+#include "Peptide.h"
+#include "Protein.h"
+#include "io/carp.h"
+#include "PeptideConstraint.h"
+#include <string>
+#include <map>
+
+#ifdef _MSC_VER
+#include "util/WinCrux.h"
+#endif
+
+//Comparator function for c type strings.
+struct cmp_str {
+
+  bool operator()(char const *a, char const *b) const {
+    return strcmp(a, b) < 0;
+  }
+};
+
+
+class Database {
+ protected:
+  std::string fasta_filename_; ///< Name of the text file.
+  std::string binary_filename_;///< Full path to the binary protein sequence file.
+  FILE*        file_;     ///< Open filehandle for this database.
+                         ///  A database has only one associated file.
+  bool is_parsed_;  ///< Has this database been parsed yet.
+  std::vector<Crux::Protein*>* proteins_; ///< Proteins in this database.
+  std::map<const char*, Crux::Protein*, cmp_str>* protein_map_; //map for proteins 
+  bool is_hashed_; //Indicator of whether the database has been hashed/mapped.
+  unsigned long int size_; ///< The size of the database in bytes (convenience)
+  bool use_light_protein_; ///< should I use the light/heavy protein option
+  bool is_memmap_; ///< Are we using a memory mapped fasta file? 
+#ifdef _MSC_VER
+  SIMPLE_UNMMAP unmap_info_;
+#endif
+  void* data_address_; ///< pointer to the beginning of the memory mapped data, 
+  unsigned int pointer_count_; ///< number of pointers referencing this database. 
+  long file_size_; ///< the size of the binary fasta file, when memory mapping
+  DECOY_TYPE_T decoys_; ///< the type of decoys, none if target db
+  bool binary_is_temp_; ///< should we delete the binary fasta in destructor
+
+  /**
+   * Parses a database from the text based fasta file in the filename
+   * member variable
+   * reads in all proteins in the fasta file and creates a protein object
+   * and adds them to the database protein array
+   * total proteins in fasta file must not exceed MAX_PROTEIN constant
+   * IF using light_protein functionality will not read in the sequence or id.
+   * \returns true if success. false if failure.
+   */
+  bool parseTextFasta();
+
+  /**
+   * memory maps the binary fasta file for the database
+   *\return true if successfully memory map binary fasta file, else false
+   */
+  bool memoryMap(
+    int file_d  ///<  file descriptor -in
+    );
+
+  /**
+   * Assumes that there is a 1 at the very end after all the proteins in binary file
+   *\return true successfully populates the proteins from memory mapped binary fasta file, else false
+   */
+  bool populateProteinsFromMemmap();
+
+  /**
+   * \brief Parses a database from the binary fasta file in the filename
+   * member variable.
+   *
+   * Memory maps the binary fasta file into memory. The protein
+   * sequences are not copied, but just pointed to the memory mapped
+   * location. 
+   * \returns true if success. false if failure.
+   */
+  bool parseMemmapBinary();
+
+  /**
+   * intializes a database object
+   */
+  void init();
+
+ public:
+  /**
+   * The suffix on binary and text fasta files.
+   */
+  static const std::string binary_suffix;
+  static const std::string decoy_binary_suffix;
+  static const std::string decoy_fasta_suffix;
+
+  /**
+   * \returns An (empty) database object.
+   */
+
+  Database();
+
+  /**
+   * \returns A new database object.
+   */
+  Database(
+    const std::string& filename, ///< The file from which to parse the database. either text fasta file or binary fasta file -in
+    bool is_memmap, ///< are we using a memory mapped binary fasta file, thus proteins are all memory mapped -in
+    DECOY_TYPE_T decoys = NO_DECOYS ///< is this to be a decoy database
+    );         
+
+  void addProtein(
+    Crux::Protein* protein
+  );
+
+  /**
+   * Frees an allocated protein object.
+   */
+  static void freeDatabase(
+    Database* database ///< An allocated database -in
+    );
+
+  virtual ~Database();
+
+  /**
+   * Prints a database object to file.
+   */
+  void print(
+    FILE* file    ///< output file stream -out             
+    );
+
+  /**
+   * Parses a database from the file in the filename member variable
+   * reads in all proteins in the fasta file and creates a protein object
+   * and adds them to the database protein array
+   * total proteins in fasta file must not exceed MAX_PROTEIN constant
+   * \returns TRUE if success. FALSE if failure.
+   */
+  bool parse();
+
+  /**
+   * \brief Changes a database from one that reads from a fasta file to
+   * one that reads from a binary/memmory mapped protein file.
+   *
+   * If database already has binary source (i.e. is_memmap == TRUE), 
+   * returns TRUE.  
+   * Opens the fasta file pointed to by filename for reading.  Creates a
+   * file with the name given.  Reads in each protein from the text file
+   * and serializes it to the output file.  Closes both files.  Changes
+   * filename to point to new output file and sets is_memmap to true.
+   * Parses the database.
+   * \returns TRUE if all processes succeed, else FALSE.
+   */
+  bool transformTextToMemmap(
+    const char* binary_protein_filename,
+    bool binary_is_temp
+    );
+
+  /**
+   * \returns FALSE if nth protein cannot be parsed or does not exist 
+   */
+  /**
+  bool get_database_protein_at_idx(
+      DATABASE_T* database, ///< A parsed database object -in
+      unsigned int protein_idx, ///< The index of the protein to retrieve -in
+      Protein** protein   ///< A pointer to a pointer to a PROTEIN object -out
+      );
+  **/
+
+  /**
+   * Using the fasta file the Database was instantiated with, write a
+   * binary protein file in the given directory to use for memory
+   * mapping.  If is_temp, delete the file on destruction.  Warns if
+   * Database was not opened with a text file.
+   */
+  void createBinaryFasta(const char* directory, bool is_temp = false);
+
+  /** 
+   * Access routines of the form get_<object>_<field> and set_<object>_<field>. 
+   */
+
+  /**
+   * Additional get and set methods
+   */
+
+  /**
+   *\returns the filename of the database
+   * returns a heap allocated new copy of the filename
+   * user must free the return filename
+   */
+  char* getFilename();
+
+  /**
+   *\returns the pointer to the filename of the database
+   * user must not free or change the filename
+   */
+  const char* getFilenamePointer();
+
+  /**
+   * sets the filename of the database
+   * protein->sequence must been initiailized
+   */
+  void setFilename(
+    const char* filename ///< the filename to add -in
+    );
+
+  /**
+   *\returns TRUE|FALSE whether the database has been parsed?
+   */
+  bool getIsParsed();
+
+  void setIsParsed(
+    bool is_parsed
+  );
+  
+  /**
+   * \returns The type of shuffling used on the proteins in this database
+   */
+  DECOY_TYPE_T getDecoyType();
+
+  /**
+   *\returns the total number of proteins of the database
+   */
+  unsigned int getNumProteins();
+
+  /**
+   *\returns the src FILE* of the database
+   */
+  FILE* getFile();
+
+  /**
+   * sets the src FILE* of the database
+   */
+  void setFile(
+    FILE* file ///< the src file to add -in
+    );
+
+  /**
+   *\returns the nth protein of the database
+   */
+  Crux::Protein* getProteinAtIdx(
+    unsigned int protein_idx ///< The index of the protein to retrieve -in
+    );
+
+  /**
+   *\returns the protein designated by protein id of the database
+   */
+  Crux::Protein* getProteinByIdString(
+    const char* protein_id ///< The id string for this protein -in
+    );
+
+  /**
+   * sets the use_light_protein of the database
+   */
+  void setUseLightProtein(
+    bool use ///< should I use the light/heavy functionality?
+    );
+  
+  /**
+   *\returns TRUE|FALSE whether the database uses light/heavy
+   */
+  bool getUseLightProtein();
+
+  /**
+   *sets TRUE,FALSE whether the database uses memory mapped
+   */
+  void setMemmap(
+    bool is_memmap  ///< is the database memory mapped?
+    );
+
+  /**
+   * increase the pointer_count produced by this database.
+   * \returns database pointer
+   */
+  static Database* copyPtr(
+    Database* database ///< the query database -in/out
+  );
+
+};
+
+/**
+ * Frees an allocated database_peptide_iterator object.
+ */
+void void_free_database_peptide_iterator(
+  void* database_peptide_iterator ///< the iterator to free -in
+  );
+
+/**
+ * The basic iterator functions.
+ * \returns TRUE if there are additional peptides to iterate over, FALSE if not.
+ */
+bool void_database_peptide_iterator_has_next(
+  void* database_peptide_iterator ///< the iterator of interest -in
+  );
+
+/**
+ * \returns The next peptide in the database.
+ */
+Crux::Peptide* void_database_peptide_iterator_next(
+  void* database_peptide_iterator ///< the iterator of interest -in
+  );
+
+/***********************************
+ * database sorted peptide iterator
+ ***********************************/
+
+/**********************************************************************
+ * wrapper, for generate_peptides_iterator, cast back to original type
+ ***********************************************************************/
+
+/**
+ * Frees an allocated database_sorted_peptide_iterator object.
+ */
+void void_free_database_sorted_peptide_iterator(
+  void* database_peptide_iterator ///< the iterator to free -in
+  );
+
+/**
+ * The basic iterator functions.
+ * \returns TRUE if there are additional peptides to iterate over, FALSE if not.
+ */
+bool void_database_sorted_peptide_iterator_has_next(
+  void* database_peptide_iterator ///< the iterator of interest -in
+  );
+
+/**
+ * returns each peptide in sorted order
+ * \returns The next peptide in the database.
+ */
+Crux::Peptide* void_database_sorted_peptide_iterator_next(
+  void* database_peptide_iterator ///< the iterator of interest -in
+  );
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif
diff --git a/src/model/DatabasePeptideIterator.cpp b/src/model/DatabasePeptideIterator.cpp
new file mode 100644
index 0000000..bdf18a8
--- /dev/null
+++ b/src/model/DatabasePeptideIterator.cpp
@@ -0,0 +1,342 @@
+/**
+ * \file DatabasePeptideIterator.cpp
+ * \brief Object to iterator over the peptides within a database
+ *****************************************************************************/
+
+#include "DatabasePeptideIterator.h"
+
+using namespace std;
+using namespace Crux;
+
+/***********************************************
+ * database_peptide_Iterators - can use the light protein functionality 
+ * to save space
+ ***********************************************/
+
+/**
+ * Instantiates a new database_peptide_iterator from a database.
+ * \returns a DATABASE_PEPTIDE_ITERATOR_T object.
+ */
+
+DatabasePeptideIterator::DatabasePeptideIterator(
+  Database* database, 
+    ///< the database of interest -in
+  PeptideConstraint* peptide_constraint,
+    ///< the peptide_constraint with which to filter peptides -in
+  bool store_all_peptides, ///< for removing duplicates
+  bool is_decoy ///< return decoy instead of target peptides
+  )
+{
+  Protein* next_protein = NULL;
+
+  // Initialize
+  database_protein_iterator_ = NULL;
+  cur_protein_peptide_iterator_ = NULL;
+  peptide_constraint_ = NULL;
+  prior_protein_ = NULL;
+  first_passed_ = false;
+  store_all_peptides_ = false;
+  is_decoy_ = is_decoy;
+  
+  
+  // set up peptide storage
+  store_all_peptides_ = store_all_peptides;
+  peptide_map_ = map<const char*, Peptide*, cmp_str>();
+  cur_map_position_ = peptide_map_.begin();
+
+  // set a new protein iterator
+  database_protein_iterator_ = new DatabaseProteinIterator(database);
+  if( database_protein_iterator_ == NULL){
+    carp(CARP_ERROR, 
+         "Could not create protein iterator for database peptide iterator.");
+  }
+
+  // set peptide constraint
+  peptide_constraint_ = PeptideConstraint::copyPtr(peptide_constraint);
+  
+  // check if there are any proteins to create peptides from
+  if(database_protein_iterator_->hasNext()){
+
+    next_protein = database_protein_iterator_->next();
+
+    // if using light/heavy functionality parse the light protein
+    if(database->getUseLightProtein() && next_protein->getIsLight()){
+      if(!next_protein->toHeavy()){
+        carp(CARP_FATAL, "failed to create a database_peptide_iterator,"
+                         "no proteins in database");
+      }
+    }
+
+    // set new protein peptide iterator
+    cur_protein_peptide_iterator_ =
+      new ProteinPeptideIterator(next_protein, peptide_constraint);
+ 
+    // if first protein does not contain a match peptide, reinitailize
+    while(!cur_protein_peptide_iterator_->hasNext()) {
+      // covert the heavy back to light
+      /** 
+       * uncomment this code if you want to restore a protein to 
+       * light after converted to heavy
+      if(database->use_light_protein && !get_protein_is_light(next_protein)){
+        protein_to_light(next_protein);
+      }
+      */
+
+      // end of list of peptides for database_peptide_iterator
+      if(!database_protein_iterator_->hasNext()){
+        break;
+      }
+      else{ // create new protein_peptide_iterator for next protein
+        // free old iterator
+            delete (cur_protein_peptide_iterator_);
+        
+        // get next protein
+        next_protein = database_protein_iterator_->next();
+
+         // if using light/heavy functionality parse the light protein
+        if(database->getUseLightProtein() && next_protein->getIsLight()){
+          if(!next_protein->toHeavy()){
+            carp(CARP_FATAL, "failed to create a database_peptide_iterator"
+                              " no proteins in database");
+          }
+        }
+        // create new protein_peptide_iterator
+        cur_protein_peptide_iterator_ =
+          new ProteinPeptideIterator(next_protein, peptide_constraint);
+      }
+    }
+  }
+  else{ // no proteins to create peptides from
+    carp(CARP_FATAL, "failed to create a database_peptide_iterator,"
+                     "no proteins in database");
+  }
+  // set the current working protein
+  prior_protein_ = next_protein;
+  
+  // queue up first peptide
+  if( store_all_peptides ){
+    generateAllPeptides(); // fill the map
+    queueFirstPeptideFromMap();
+
+  } else {  
+    next_peptide_ = nextFromFile();
+  }
+  // parent class requires a call to queueNextPeptide via initialize(),
+  // but the first peptide is already queued.  This is a lazy way to
+  // get around it.
+  already_initialized_ = false;
+  initialize();
+}
+
+/**
+ * Private function to generate peptides for this iterator, sort them
+ * and remove duplicates before returning them to the caller.
+ * Peptides are stored in the iterator's member variable peptide_map.
+ */
+void DatabasePeptideIterator::generateAllPeptides(){
+
+  Peptide* cur_peptide = NULL;
+  map<const char*, Peptide*, cmp_str>& peptide_map = peptide_map_;
+  map<const char*, Peptide*, cmp_str>::iterator peptide_map_ptr;
+
+  // populate map with all peptides, combining when duplicates found
+  while(hasNextFromFile()){
+    cur_peptide = nextFromFile();
+    char* sequence = cur_peptide->getSequence();
+
+    // does it already exist in the map?
+    peptide_map_ptr = peptide_map.find(sequence);
+    if( peptide_map_ptr == peptide_map.end() ){ // not found, add it
+      peptide_map[(const char*)sequence] = cur_peptide;
+    } else {  // already exists, combine new peptide with existing
+      Peptide::mergePeptidesCopySrc(peptide_map_ptr->second, cur_peptide);
+      delete cur_peptide;
+      std::free(sequence);
+    }
+  } // next peptide
+
+}
+
+/**
+ * Once the peptide_map has been populated with peptides, point the
+ * cur_peptide to first in map, point map pointer to second in map.
+ */
+void DatabasePeptideIterator::queueFirstPeptideFromMap(){
+
+  if( peptide_map_.empty() ){  // no peptides to return
+    next_peptide_ = NULL;
+    cur_map_position_ = peptide_map_.end();
+    return;
+  }
+
+  // set cur_peptide to first peptide in map
+  next_peptide_ = peptide_map_.begin()->second;
+  // set map pointer to one past first (i.e. next to return)
+  cur_map_position_ = peptide_map_.begin();  
+  ++(cur_map_position_);
+}
+
+/**
+ * Frees an allocated database_peptide_iterator object.
+ */
+DatabasePeptideIterator::~DatabasePeptideIterator() {
+
+  delete cur_protein_peptide_iterator_;
+  delete database_protein_iterator_;
+  PeptideConstraint::free(peptide_constraint_);
+
+  // free seqs in map
+  
+  map<const char*, Peptide*, cmp_str>::iterator peptide_iter = 
+    peptide_map_.begin();
+  for(; peptide_iter != peptide_map_.end(); 
+      ++peptide_iter){
+
+    std::free((char*)peptide_iter->first);  // free sequence
+    // peptide freed elsewhere?  segfault if here
+  }
+  peptide_map_.clear();
+}
+
+/**
+ * The basic iterator functions.
+ * \returns true if there are additional peptides to iterate over,
+ * false if not. 
+ */
+bool DatabasePeptideIterator::hasNextFromFile() {
+
+  return (cur_protein_peptide_iterator_->hasNext());
+}
+
+/**
+ * Implementation of PeptideIterator's method to prepare the iterator
+ * to return the next peptide.
+ * \returns True if there is another peptide to return, else false.
+ */
+bool DatabasePeptideIterator::queueNextPeptide() {
+
+  // parent class will make the first call without returning any peptides
+  // but we already queued up the first one in the constructor
+  if( already_initialized_ == false ){
+    already_initialized_ = true;
+    if(is_decoy_ && next_peptide_){
+      next_peptide_->transformToDecoy();
+    }
+    return (next_peptide_ != NULL); // are we starting out with a peptide
+  }
+  bool has_next = false;
+
+  // fetch next peptide either from file or from map
+  if( store_all_peptides_ ){
+    if( cur_map_position_ == peptide_map_.end() ){
+      next_peptide_ = NULL;
+      has_next = false;
+    } else {
+      next_peptide_ = cur_map_position_->second;
+      ++(cur_map_position_);
+      has_next = true;
+    }
+  } else {
+    if( hasNextFromFile() ){
+      next_peptide_ = nextFromFile();
+      has_next = (next_peptide_ != NULL);
+    } else {
+      next_peptide_ = NULL;
+      has_next = false;
+    }
+  }
+
+  // take care of decoys
+  if(is_decoy_ && next_peptide_){
+    next_peptide_->transformToDecoy();
+  }
+
+  return has_next;
+}
+
+/**
+ * \returns The next peptide in the database.
+ */
+Peptide* DatabasePeptideIterator::nextFromFile()
+{
+  /*BF: Could this be simplified?  if next peptide, return it
+    if not, look for next protein, if not return NULL
+  */
+
+   // did you reset working protein?
+  bool reset = false;
+  
+  // the peptide to return
+  Peptide* next_peptide =
+    cur_protein_peptide_iterator_->next();
+  
+  Database* database = 
+    database_protein_iterator_->getDatabase();
+  
+  // reset database_peptide_iterator if needed
+  while(!cur_protein_peptide_iterator_->hasNext()){
+    reset = true;
+    Protein* next_protein = NULL; 
+    
+    /** 
+     * uncomment this code if you want to restore a protein to 
+     * light after converted to heavy
+    // covert the heavy back to light
+    if(database->use_light_protein && next_protein != NULL && !get_protein_is_light(next_protein)){
+      protein_to_light(next_protein);
+    }
+    */
+
+    // end of list of peptides for database_peptide_iterator
+    if(!database_protein_iterator_->hasNext()){
+      break;
+    }
+    else{ // create new protein_peptide_iterator for next protein
+      // free old iterator
+      delete cur_protein_peptide_iterator_;
+      
+      // get next protein
+      next_protein = 
+        database_protein_iterator_->next();
+      
+      // if using light/heavy functionality parse the light protein
+      if(database->getUseLightProtein() && next_protein->getIsLight()){
+        if(!next_protein->toHeavy()){
+          carp(CARP_FATAL, "Failed to create a database_peptide_iterator, " 
+                            "no proteins in database");
+        }
+      }
+      // create new protein_peptide_iterator
+      cur_protein_peptide_iterator_ =
+        new ProteinPeptideIterator(next_protein, peptide_constraint_);
+    }        
+  }
+
+  // are we using the light functionality?
+  if(database->getUseLightProtein()){
+    // get the current working protein
+    Protein* protein_bye = cur_protein_peptide_iterator_->getProtein();
+    // set first passed, shows that we extraced at least one protein since we moved on to the next protein
+    if(!reset && !first_passed_){
+      first_passed_ = true;
+    }
+    // convert prior_protein to light
+    else if(!reset && first_passed_ && (protein_bye != prior_protein_)){
+      /** 
+       * uncomment this code if you want to restore a protein to 
+       * light after converted to heavy
+      protein_to_light(database_peptide_iterator->prior_protein);
+      */
+      prior_protein_ = protein_bye;
+    }
+  }
+  
+  return next_peptide;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/DatabasePeptideIterator.h b/src/model/DatabasePeptideIterator.h
new file mode 100644
index 0000000..98924c0
--- /dev/null
+++ b/src/model/DatabasePeptideIterator.h
@@ -0,0 +1,68 @@
+/**
+ * \file DatabasePeptideIterator.h 
+ * $Revision: 1.27 $
+ * \brief Object to iterator over the peptides within a database
+ *****************************************************************************/
+
+#ifndef DATABASEPEPTIDEITERATOR_H
+#define DATABASEPEPTIDEITERATOR_H
+
+#include "model/objects.h"
+#include "DatabaseProteinIterator.h"
+#include "ProteinPeptideIterator.h"
+#include "PeptideConstraint.h"
+#include "PeptideIterator.h"
+
+class DatabasePeptideIterator : public PeptideIterator {
+ protected:
+  DatabaseProteinIterator* database_protein_iterator_; 
+    ///< The protein iterator. 
+  ProteinPeptideIterator* cur_protein_peptide_iterator_; 
+    ///< The peptide iterator for the current protein.
+  PeptideConstraint* peptide_constraint_; 
+    ///< The constraint for the kind of peptide to iterate over.
+  Crux::Protein* prior_protein_; 
+    ///< the protein that was used before the current working protein
+  bool first_passed_; 
+    ///< is it ok to convert prior_protein to light?
+  bool store_all_peptides_; ///< true for search so duplicates are combined
+  std::map<const char*, Crux::Peptide*, cmp_str> peptide_map_; ///< store peptides by sequence
+  std::map<const char*, Crux::Peptide*, cmp_str>::iterator cur_map_position_; ///< next in map to return
+  bool already_initialized_; ///< flag for first call to queueNextPeptide
+  bool is_decoy_; ///< transform all peptides to decoys before returning
+
+  /* Private Functions */
+  Crux::Peptide* nextFromFile();
+  bool hasNextFromFile();
+  void generateAllPeptides();
+  void queueFirstPeptideFromMap();
+
+ public:
+
+  /**
+   * Instantiates a new database_peptide_iterator from a database.
+   * \returns a DATABASE_PEPTIDE_ITERATOR_T object.
+   */
+  DatabasePeptideIterator(
+    Database* database, ///< the database of interest -in
+    PeptideConstraint* peptide_constraint, ///< the peptide_constraint to filter peptides -in
+    bool store_all_peptides, ///< true: parse all (unique) peptides into map
+    bool is_decoy = false ///< return decoy or target peptides
+    );
+
+  /**
+   * Frees an allocated database_peptide_iterator object.
+   */
+  ~DatabasePeptideIterator();
+
+  virtual bool queueNextPeptide();
+
+};
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif
diff --git a/src/model/DatabaseProteinIterator.cpp b/src/model/DatabaseProteinIterator.cpp
new file mode 100644
index 0000000..75aa8d6
--- /dev/null
+++ b/src/model/DatabaseProteinIterator.cpp
@@ -0,0 +1,81 @@
+/**
+ * \file DatabaseProteinIterator.cpp
+ * $Revision: 1.27 $
+ * \brief Object to iterator over the proteins within a database
+ *****************************************************************************/
+
+#include "DatabaseProteinIterator.h"
+using namespace Crux;
+
+/**
+ * Instantiates a new database_protein_iterator from a database.
+ * 
+ * \returns a DATABASE_PROTEIN_ITERATOR_T object.
+ */
+DatabaseProteinIterator::DatabaseProteinIterator(
+  Database* database ///< the database to create a protein iterator -in
+  )
+{
+  // if database is parsed, if not do so..
+  if(!database->getIsParsed()){
+    // failed to parse database
+    if(!database->parse()){
+      carp(CARP_FATAL, "Failed to parse database, cannot create iterator");
+    }
+  }
+
+  database_ = Database::copyPtr(database);
+  cur_protein_ = 0;
+}        
+
+
+/**
+ * Frees an allocated database_protein_iterator object.
+ */
+DatabaseProteinIterator::~DatabaseProteinIterator() {
+
+  // subtract pointer count
+  Database::freeDatabase(database_);
+}
+
+/**
+ * The basic iterator functions.
+ * \returns true if there are additional proteins to iterate over, false if not.
+ */
+bool DatabaseProteinIterator::hasNext()
+{
+  return (cur_protein_ < database_->getNumProteins());
+}
+
+
+/**
+ * \returns The next protein in the database.
+ */
+Protein* DatabaseProteinIterator::next()
+{
+  ++cur_protein_;
+
+  // print number of protein generated to STDERR for every 500 protein reached
+  if(cur_protein_ % 500 == 0){
+    carp(CARP_DETAILED_DEBUG, "Reached protein %d out of %d", 
+         cur_protein_,
+         database_->getNumProteins());
+  }
+  
+  return database_->getProteinAtIdx(cur_protein_-1);
+}
+
+/**
+ * \returns the protein database for this iterator
+ */
+Database* DatabaseProteinIterator::getDatabase() {
+
+  return database_;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/DatabaseProteinIterator.h b/src/model/DatabaseProteinIterator.h
new file mode 100644
index 0000000..663078c
--- /dev/null
+++ b/src/model/DatabaseProteinIterator.h
@@ -0,0 +1,64 @@
+/**
+ * \file DatabaseProteinIterator.h 
+ * $Revision: 1.27 $
+ * \brief Object to iterator over the proteins within a database
+ *****************************************************************************/
+
+#ifndef DATABASEPROTEINITERATOR_H
+#define DATABASEPROTEINITERATOR_H
+
+#include "Database.h"
+
+class DatabaseProteinIterator {
+  
+ protected:
+  Database* database_;  ///< The database whose proteins to iterate over 
+  unsigned int cur_protein_;      ///< The index of the current protein
+
+ public:
+  
+  /**
+   * Instantiates a new database_protein_iterator from a database.
+   * \returns a DATABASE_PROTEIN_ITERATOR_T object.
+   */
+  DatabaseProteinIterator(
+    Database* database ///< the database to create a protein iterator -in
+    );        
+
+  /**
+   * Frees an allocated database_protein_iterator object.
+   */
+  virtual ~DatabaseProteinIterator();
+  
+  /**
+   * The basic iterator functions.
+   * \returns TRUE if there are additional proteins to iterate over, FALSE if not.
+   */
+  bool hasNext();
+  
+  /**
+   * \returns The next protein in the database.
+   */
+  Crux::Protein* next();
+  
+  /**
+   * \returns the protein to the corresponding protein_idx in the database.
+   */
+  Crux::Protein* getProtein(
+    unsigned int protein_idx ///< protein_idx to which protein to return -in
+    );
+
+  /**
+   * \returns the protein database for this iterator
+   */
+  Database* getDatabase();
+
+};
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif
diff --git a/src/model/FilteredSpectrumChargeIterator.cpp b/src/model/FilteredSpectrumChargeIterator.cpp
new file mode 100644
index 0000000..9d32133
--- /dev/null
+++ b/src/model/FilteredSpectrumChargeIterator.cpp
@@ -0,0 +1,145 @@
+/*************************************************************************//**
+ * \file FilteredSpectrumChargeIterator.cpp
+ * AUTHOR: Chris Park
+ * CREATE DATE: 28 June 2006
+ * \brief code to support working with collection of multiple spectra
+ ****************************************************************************/
+#include "FilteredSpectrumChargeIterator.h"
+
+#include "parameter.h"
+#include "util/Params.h"
+
+using namespace std;
+using namespace Crux;
+
+/**
+ * \brief Sets up an iterator with the next spectrum that complies
+ * with the constraints.  Sets has_next to FALSE when there are no
+ * more spectra in the collection that pass.  Increments
+ * spectrum_index and charge_index.
+ */
+void FilteredSpectrumChargeIterator::queueNextSpectrum() {
+
+  Spectrum* spec = NULL;
+
+  // Are there any more charge states for this spectrum?
+  if( zstate_index_ < (int)zstates_.size()-1 ){
+    zstate_index_++;
+  }
+  // Are there any more spectra?
+  else if( spectrum_index_ < spectrum_collection_->getNumSpectra()-1){
+
+    spectrum_index_++;
+    spec = spectrum_collection_->spectra_[spectrum_index_];
+    // first free any existing zstates in the iterator
+    zstates_.clear();
+    zstates_ = spec->getZStatesToSearch();
+    zstate_index_ = 0;
+  }else{ // none left
+    has_next_ = false;
+    return;
+  }
+
+  // Does the current pass?
+  spec = spectrum_collection_->spectra_[spectrum_index_];
+  int this_charge = -1;
+  if (zstate_index_ < (int)zstates_.size()) {
+    this_charge = zstates_[zstate_index_].getCharge();
+  }
+  double mz = spec->getPrecursorMz();
+  int num_peaks = spec->getNumPeaks();
+
+  // Warn if we skip due to too few peaks.
+  if ( num_peaks < min_peaks_ ) {
+    num_skipped_++;
+    carp(CARP_DEBUG, "Skipping scan %d with %d (< %d) peaks.",
+         spectrum_index_, num_peaks, min_peaks_);
+  }
+
+  if( search_charge_ == 0 || search_charge_ == this_charge ){
+    if( mz >= min_mz_ && mz <= max_mz_
+        && num_peaks >= min_peaks_ ){
+      // passes all tests
+      has_next_ = true;
+      return;
+    }
+  }
+  
+  // try the next spectrum
+  queueNextSpectrum();
+
+}
+
+
+ /**
+ * Instantiates a new spectrum_iterator object from
+ * spectrum_collection.  This iterator returns unique spectrum-charge
+ * pairs (e.g.a spectrum to be searched as +2 and +3 is returned once
+ * as +2 and once as +3).  The charge is returned by setting the int
+ * pointer in the argument list.  The iterator also filters spectra by
+ * m/z so that none outside the spectrum-min-mz--spectrum-max-mz
+ * range (as defined in parameter.c).  The iterator also filters by
+ * minimum number of peaks.
+ * \returns a SPECTRUM_ITERATOR_T object.
+ */
+FilteredSpectrumChargeIterator::FilteredSpectrumChargeIterator(
+  Crux::SpectrumCollection* spectrum_collection
+) {
+
+  spectrum_collection_ = spectrum_collection;  
+  has_next_ = false;
+  spectrum_index_ = -1;
+  num_skipped_ = 0;
+  zstate_index_ = -1;
+  min_mz_ = Params::GetDouble("spectrum-min-mz");
+  max_mz_ = Params::GetDouble("spectrum-max-mz");
+  min_peaks_ = Params::GetInt("min-peaks");
+
+  string charge_str = Params::GetString("spectrum-charge");
+  if (charge_str == "all") {
+    search_charge_ = 0;
+  } else {
+    search_charge_ = atoi(charge_str.c_str());
+  }
+
+  // queue next spectrum
+  carp(CARP_DEBUG,"Queueing next spectrum");
+  queueNextSpectrum();
+  carp(CARP_DEBUG,"Done Queueing next spectrum");
+
+}
+  
+FilteredSpectrumChargeIterator::~FilteredSpectrumChargeIterator() {
+
+}
+
+bool FilteredSpectrumChargeIterator::hasNext() {
+  return has_next_;
+}
+
+int FilteredSpectrumChargeIterator::numSkipped() {
+  return num_skipped_;
+}
+
+Spectrum* FilteredSpectrumChargeIterator::next(SpectrumZState& zstate) {
+
+  carp(CARP_DEBUG,"FilteredSpectrumChargeIterator::next()");
+  Spectrum* next_spectrum = NULL;
+  if (has_next_) {
+    next_spectrum = 
+      spectrum_collection_->spectra_[spectrum_index_];
+
+    zstate = zstates_[zstate_index_];
+    carp(CARP_DEBUG,"Queueing next spectrum");
+    queueNextSpectrum();
+    carp(CARP_DEBUG,"Done queueing next spectrum");
+  }
+  return next_spectrum;
+
+}
+
+  
+
+
+
+
diff --git a/src/model/FilteredSpectrumChargeIterator.h b/src/model/FilteredSpectrumChargeIterator.h
new file mode 100644
index 0000000..98becf5
--- /dev/null
+++ b/src/model/FilteredSpectrumChargeIterator.h
@@ -0,0 +1,81 @@
+/**
+ * \file FilteredSpectrumChargeIterator.h 
+ * \brief Object for representing many spectra.
+ *****************************************************************************/
+#ifndef FILTEREDSPECTRUMCHARGEITERATOR_H
+#define FILTEREDSPECTRUMCHARGEITERATOR_H
+
+#include <vector>
+
+#include "Spectrum.h"
+#include "io/SpectrumCollection.h"
+
+class FilteredSpectrumChargeIterator {
+ protected:
+  Crux::SpectrumCollection* spectrum_collection_;///< spectra to iterate over
+  bool has_next_;  ///< is there a spec that passes criteria
+  int spectrum_index_; ///< The index of the current spectrum
+  int num_skipped_; ///< Number of scans skipped due to too few peaks.
+  std::vector<SpectrumZState> zstates_;        ///< Array of possible zstates to search
+  int zstate_index_;    ///< The index of the z-state for the current spectrum
+  double min_mz_;       ///< return only spec above this mz
+  double max_mz_;      ///< return only spec below this mz
+  int search_charge_;   ///< which z to search, 0 for all
+  int min_peaks_;       ///< minimum number of peaks a spec must have
+
+  /**
+   * \brief Sets up an iterator with the next spectrum that complies
+   * with the constraints.  Sets has_next to FALSE when there are no
+   * more spectra in the collection that pass.  Increments
+   * spectrum_index and charge_index.
+   */
+  void queueNextSpectrum();
+
+ public:
+ /**
+ * Instantiates a new spectrum_iterator object from
+ * spectrum_collection.  This iterator returns unique spectrum-charge
+ * pairs (e.g.a spectrum to be searched as +2 and +3 is returned once
+ * as +2 and once as +3).  The charge is returned by setting the int
+ * pointer in the argument list.  The iterator also filters spectra by
+ * mass so that none outside the spectrum-min-mz--spectrum-max-mz
+ * range (as defined in parameter.c).  The iterator also filters by
+ * minimum number of peaks.
+ * \returns a SPECTRUM_ITERATOR_T object.
+ */
+  FilteredSpectrumChargeIterator(
+    Crux::SpectrumCollection* spectrum_collection
+  );
+  
+  /**
+   * Frees an filtered_spectrum_charge_iterator object.
+   */
+  ~FilteredSpectrumChargeIterator();
+
+  /**
+   * The basic iterator function has_next.
+   */
+  bool hasNext();
+
+  /**
+   * Report number of skipped scans.
+   */
+  int numSkipped();
+
+  /**
+   * The basic iterator function next.
+   */
+  Crux::Spectrum* next(SpectrumZState& zstate);
+
+};
+
+
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif
diff --git a/src/model/GeneratePeptidesIterator.cpp b/src/model/GeneratePeptidesIterator.cpp
new file mode 100644
index 0000000..e65b04b
--- /dev/null
+++ b/src/model/GeneratePeptidesIterator.cpp
@@ -0,0 +1,63 @@
+/**
+ * \file GeneratePeptidesIterator.h
+ * \brief An object to return candidate peptides from a database.
+ */
+#include <iostream>
+#include "GeneratePeptidesIterator.h"
+#include "DatabasePeptideIterator.h"
+
+using namespace std;
+
+GeneratePeptidesIterator::GeneratePeptidesIterator()
+{}
+
+GeneratePeptidesIterator::GeneratePeptidesIterator(
+  pair<FLOAT_T,FLOAT_T> min_max_mass, ///< precursor m/z of spectrum
+  bool is_decoy,  ///< generate target or decoy peptides
+  Database* database, ///< database to provide peptides
+  int additional_missed_cleavages
+  )
+{
+  PeptideConstraint* constraint = PeptideConstraint::newFromParameters();
+  constraint->setMinMass(min_max_mass.first);
+  constraint->setMaxMass(min_max_mass.second);
+  constraint->setNumMisCleavage(constraint->getNumMisCleavage()+additional_missed_cleavages);
+
+
+
+  // Check that database exists
+  if (database == NULL){
+    carp(CARP_FATAL, "Cannot generate peptides when database is NULL.");
+  }
+
+	iterator_ = new DatabasePeptideIterator(database,
+																					constraint,
+																					true, // store all peptides
+																					is_decoy);
+
+  initialize();
+  PeptideConstraint::free(constraint);
+}
+
+GeneratePeptidesIterator::~GeneratePeptidesIterator()
+{
+  delete iterator_;
+}
+
+bool GeneratePeptidesIterator::queueNextPeptide(){
+  if( iterator_ == NULL ){
+    carp(CARP_FATAL, 
+         "GeneratePeptidesIterator is missing its database iterator.");
+  }
+
+  if( iterator_->hasNext() ){
+    carp(CARP_DETAILED_DEBUG, 
+         "GeneratePeptidesIterator has a peptide, returning true");
+    next_peptide_ = iterator_->next();
+    return true;
+  }
+  // else
+
+  next_peptide_ = NULL;
+  return false;
+}
diff --git a/src/model/GeneratePeptidesIterator.h b/src/model/GeneratePeptidesIterator.h
new file mode 100644
index 0000000..00fabee
--- /dev/null
+++ b/src/model/GeneratePeptidesIterator.h
@@ -0,0 +1,41 @@
+/**
+ * \file GeneratePeptidesIterator.h
+ * \brief An object to return candidate peptides from a database.
+ */
+#ifndef GENERATEPEPTIDESITERATOR_H 
+#define GENERATEPEPTIDESITERATOR_H 
+
+#include <utility>
+#include "PeptideIterator.h"
+#include "Database.h"
+#include "PeptideConstraint.h"
+
+class GeneratePeptidesIterator : public PeptideIterator
+{
+ protected:
+  PeptideIterator* iterator_;
+
+  virtual bool queueNextPeptide();
+
+ public:
+  GeneratePeptidesIterator();
+
+  GeneratePeptidesIterator(
+    std::pair<FLOAT_T,FLOAT_T> min_max_mass, ///< max target mass of peptides
+    bool is_decoy,  ///< generate target or decoy peptides
+    Database* database,  ///< database to provide peptides
+    int additional_missed_cleavages = 0
+  );
+
+  ~GeneratePeptidesIterator();
+
+};
+
+#endif
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/model/Ion.cpp b/src/model/Ion.cpp
new file mode 100644
index 0000000..1b4edbd
--- /dev/null
+++ b/src/model/Ion.cpp
@@ -0,0 +1,1132 @@
+/*************************************************************************//**
+ * \file ion.cpp
+ * \brief Object for representing a single ion.
+ ****************************************************************************/
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "Ion.h"
+#include "util/Alphabet.h"
+#include "Peptide.h"
+#include "Peak.h"
+#include "util/mass.h"
+#include "util/utils.h"
+#include <sys/types.h>
+#ifndef _MSC_VER
+#include <netinet/in.h>
+#include <inttypes.h>
+#else
+#include <Winsock2.h>
+#include "util/WinCrux.h"
+#endif
+
+#include <stack>
+
+using namespace Crux;
+using namespace std;
+
+
+class IonCache {
+ protected:
+  stack<Ion*> cache_;
+  #ifdef DEBUG
+  int ncheckin;
+  int ncheckout;
+  #endif
+ public:
+  IonCache() {
+    #ifdef DEBUG
+    ncheckin = 0;
+    ncheckout = 0;
+    #endif
+  }
+
+  ~IonCache() {
+    while(!cache_.empty()) {
+      Ion* ion = cache_.top();
+      cache_.pop();
+      delete ion;
+    }
+    #ifdef DEBUG
+    carp(CARP_INFO, "Ion cache check in: %d check out:%d", ncheckin, ncheckout);
+    #endif
+  }
+
+  Ion* checkout() {
+    #ifdef DEBUG
+    ncheckout++;
+    #endif
+    if (cache_.empty()) {
+      return (new Ion());
+    } else {
+      Ion* ion = cache_.top();
+      cache_.pop();
+      return(ion);
+    }
+  }
+  void checkin(Ion* ion) {
+    #ifdef DEBUG
+    ncheckin++;
+    #endif
+    cache_.push(ion);
+  }
+};
+
+
+IonCache ion_cache_;
+
+
+// At one point I need to reverse the endianness for pfile_create to work
+  // Apparently that is no longer true. Hence 0 below.
+  static const bool REVERSE_ENDIAN = 0;
+
+  /**
+   * Array to store the modification masses
+   */
+  static FLOAT_T modification_masses[MAX_MODIFICATIONS];
+
+  /**
+   * Have we initialized the modification_masses?
+   */
+  static bool initialized_modification_masses = false;
+
+  static const int DETECTABLE_MZ_MIN = 200;
+  static const int DETECTABLE_MZ_MAX = 2400;
+
+
+/**
+ * initializes the mass array
+ */
+void Ion::initializeModificationMasses(
+   MASS_TYPE_T mass_type ///< mass type (average, mono) -in
+)
+{
+  // set modification mass
+  if(mass_type == MONO){
+    modification_masses[NH3] = -MASS_NH3_MONO;
+    modification_masses[H2O] = -MASS_H2O_MONO ;
+    modification_masses[ISOTOPE] = 1; // FIXME check this!!!
+    modification_masses[FLANK] = 1; // FIXME check this!!!
+  }
+  else if(mass_type == AVERAGE){
+    modification_masses[NH3] = -MASS_NH3_AVERAGE;
+    modification_masses[H2O] = -MASS_H2O_AVERAGE;
+    modification_masses[ISOTOPE] = 1; // FIXME check this!!!
+    modification_masses[FLANK] = 1; // FIXME check this!!!
+  }
+
+  initialized_modification_masses = true;
+}
+
+/**
+ * initializes an Ion object.
+ */
+void Ion::init() {
+  type_ = (ION_TYPE_T)0;
+  cleavage_idx_ = 0;
+  charge_ = 0;
+  peptide_sequence_.clear();
+  memset(modification_counts_,0,sizeof(int)*MAX_MODIFICATIONS);
+  ion_mass_z_ = 0;
+  peak_ = NULL;
+  pointer_count_ = 0;
+  CacheableMass::init();
+}
+
+/**
+ * \returns An (empty) ion object.
+ */
+Ion::Ion() {
+  init();
+}
+
+/**
+ * helper function
+ * only copies the pointer to the peptide sequence
+ * creates an heap allocated ion, ion mass is not calculated.
+ * \returns an ION_T object
+ */
+void Ion::initBasicIon(
+  ION_TYPE_T type,   ///< intensity for the new ion -in 
+  int cleavage_idx, ///< index into the peptide amide bonds of this ion
+  int charge, ///< charge of the ion
+  const string& peptide ///< location for the new ion -in
+  ) 
+{
+  // init ion
+  init();
+  type_ = type;
+  cleavage_idx_ = cleavage_idx;
+  charge_ = charge;
+  peptide_sequence_ = peptide;
+  peak_ = NULL;
+}
+
+/**
+ * only copies the pointer to the peptide sequence
+ * ion mass/z with out any modification
+ * \returns an ION_T object
+ */
+Ion::Ion(
+  ION_TYPE_T type,   ///< intensity for the new ion -in 
+  int cleavage_idx, ///< index into the peptide amide bonds of this ion
+  int charge, ///< charge of the ion
+  const string& peptide, ///< location for the new ion -in
+  MASS_TYPE_T mass_type ///< mass type (average, mono) -in
+  )
+{
+  // get new basic ion
+  initBasicIon(type, cleavage_idx, charge, peptide);
+  
+  // calculate and set ion mass/z
+  if(!calcMassZ(mass_type, false)){
+    carp(CARP_ERROR, "failed to calculate ion mass/z");
+  }
+}
+
+/**
+ * only copies the pointer to the peptide sequence
+ * inputs a array of all the modification counts
+ * \returns an ION_T object
+ */
+Ion::Ion(
+  ION_TYPE_T type,   ///< intensity for the new ion -in 
+  int cleavage_idx, ///< index into the peptide amide bonds of this ion
+  int charge, ///< charge of the ion
+  const string& peptide, ///< location for the new ion -in
+  MASS_TYPE_T mass_type, ///< mass type (average, mono) -in
+  int* modification_counts ///< an array of modification counts for each modification -in
+  )
+{
+  // get new basic ion
+  initBasicIon(type, cleavage_idx, charge, peptide);
+  
+  // set all modification counts in the ion
+  int modification_idx = 0;
+  for(; modification_idx < MAX_MODIFICATIONS; ++modification_idx){
+    modification_counts_[modification_idx] = modification_counts[modification_idx];
+  }
+  
+  // calculate and set ion mass/z
+  if(!calcMassZ(mass_type, true)){
+    carp(CARP_ERROR, "failed to calculate ion mass/z");
+  }
+}
+
+/**
+ * only copies the pointer to the peptide sequence
+ * inputs a array of all the modification counts
+ * inputs the pre modified mass, of just all AA mass summed up.
+ * \returns an ION_T object
+ */
+Ion::Ion(
+  ION_TYPE_T type,   ///< intensity for the new ion -in 
+  int cleavage_idx, ///< index into the peptide amide bonds of this ion
+  int charge, ///< charge of the ion
+  const string& peptide, ///< location for the new ion -in
+  MASS_TYPE_T mass_type, ///< mass type (average, mono) -in
+  FLOAT_T base_mass, ///< the base mass of the ion -in
+  int* modification_counts ///< an array of modification counts for each modification -in
+  )
+{
+  // get new basic ion
+  initBasicIon(type, cleavage_idx, charge, peptide);
+  
+  // set all modification counts in the ion
+  int modification_idx = 0;
+  for(; modification_idx < MAX_MODIFICATIONS; ++modification_idx){
+    modification_counts_[modification_idx] = modification_counts[modification_idx];
+  }
+  
+  // calculate and set ion mass/z
+  if(!calcMassZWithMass(mass_type, base_mass, true)){
+    carp(CARP_ERROR, "failed to calculate ion mass/z");
+  } 
+}
+
+/**
+ * only copies the pointer to the peptide sequence
+ * inputs the pre modified mass, of just all AA mass summed up.
+ * \returns an ION_T object
+ */
+Ion::Ion(
+  ION_TYPE_T type,   ///< intensity for the new ion -in 
+  int cleavage_idx, ///< index into the peptide amide bonds of this ion
+  int charge, ///< charge of the ion
+  const string& peptide, ///< location for the new ion -in
+  MASS_TYPE_T mass_type, ///< mass type (average, mono) -in
+  FLOAT_T base_mass ///< the base mass of the ion -in
+  ) {
+  init(type, cleavage_idx, charge, peptide, mass_type, base_mass);
+}
+
+void Ion::init(
+  ION_TYPE_T type,   ///< intensity for the new ion -in 
+  int cleavage_idx, ///< index into the peptide amide bonds of this ion
+  int charge, ///< charge of the ion
+  const string& peptide, ///< location for the new ion -in
+  MASS_TYPE_T mass_type, ///< mass type (average, mono) -in
+  FLOAT_T base_mass ///< the base mass of the ion -in
+  )
+{
+  // get new basic ion
+  initBasicIon(type, cleavage_idx, charge, peptide);
+
+  // set all modification counts in the ion
+  int modification_idx = 0;
+  for(; modification_idx < MAX_MODIFICATIONS; ++modification_idx){
+    modification_counts_[modification_idx] = 0;
+  }
+  
+  // calculate and set ion mass/z
+  if(!calcMassZWithMass(mass_type, base_mass, true)){
+    carp(CARP_ERROR, "failed to calculate ion mass/z");
+  } 
+}
+
+
+/**
+ * frees A ION_T object
+ */
+Ion::~Ion() {
+}
+
+/**
+ * decrements the pointer and frees ion 
+ */
+void Ion::freeIon(
+  Ion* ion ///< the ion to free
+  ) {
+
+  ion->pointer_count_--;
+
+  if (ion->pointer_count_ <= 0) {
+    ion_cache_.checkin(ion);//delete ion;
+  }
+}
+
+Ion* Ion::newIon() {
+  Ion* ion = ion_cache_.checkout();
+  ion->init();
+  return(ion);
+}
+
+/**
+ * increments the pointer count for the ion
+ */
+void Ion::incrementPointerCount() {
+  pointer_count_++;
+}
+
+
+/**
+ * prints the location and fields of ION_T object to the file, in the
+ * following format:
+ *
+ * m/z \\t mass \\t charge \\t ion-series \\t  ...
+ *  peptide-bond-index \\t modifications \n
+ *
+ * Where:
+ *
+ * m/z - is the ion's mass-to-charge
+ * mass - is the ion's (charged) mass
+ * charge - is the ion's charge e.g. 1,2,3
+ * ion-series - is one of (b,y,p)
+ * bond-index - is in [1...n), where n is peptide length
+ * modifications - is one of (none|nh3|h2o)
+ *
+ * if the ion has more than one modification, each will be printed on a
+ * separate line, with the necessary number of tabs to right justify
+ */
+void Ion::print(
+  FILE* file ///< to this file -in
+  )
+{
+  // print all fields of ion
+
+
+  char* type_str = ion_type_to_string(type_);
+
+  fprintf(file, "%.2f\t%.2f\t%d\t%s\t%d", 
+      ion_mass_z_, (ion_mass_z_)*charge_, charge_, 
+      type_str, cleavage_idx_);
+
+  free(type_str);
+
+  // iterate over all modification counts
+  int mod_idx;
+  for(mod_idx=0; mod_idx < MAX_MODIFICATIONS; ++mod_idx){
+    fprintf(file,"\t%d", modification_counts_[mod_idx]);
+  }
+  
+  fprintf(file,"\n");
+}
+
+/**
+ * prints the ION_T object to the file, in the
+ * following format for GMTK single-ion models:
+ *
+ * 1. m/z ratio - ratio of the ion's mass-to-charge to the peptide's m/z
+ * 2. raw - raw intensity
+ * 3. rank - the ion rank
+ * 4. proton mobility - always set to 1 (for now) FIXME
+ * 5. m/z ratio int
+ * 6. index of the amide bond cleavage from N-term
+ * 7. index of the amide bond cleavage from C-term
+ * 8. Left amino acid ID
+ * 9. Right amino acid ID
+ * 10. Is this ion possible?
+ * 11. Is this ion detectable?
+ * 12. Is this ion detected?
+ */
+void Ion::printGmtkSingle(
+  FILE* file  ///< to this file -in
+  ){
+
+  int has_mobile_proton = 1;
+  int is_detectable = 0;
+  int is_detected = 0;
+  int is_possible = 0;
+
+  FLOAT_T intensity = 0.0;
+  FLOAT_T intensity_rank = 0.0;
+  if (peak_ != NULL){
+    intensity = peak_->getIntensity();
+    intensity_rank = peak_->getIntensityRank();
+    is_detected = 1;
+  }
+
+  if ((ion_mass_z_ >= DETECTABLE_MZ_MIN) &&
+      (ion_mass_z_ <= DETECTABLE_MZ_MAX)){
+    is_detectable = 1;
+  }
+
+  FLOAT_T mz_ratio = (ion_mass_z_)/(getMass(MONO));
+  int mz_int = (int)(mz_ratio * (MZ_INT_MAX - MZ_INT_MIN) + MZ_INT_MIN);
+
+  const char* format = "%.6f\t%.6f\t%.6f\t%i\t%i\t%i\t%i\t%i\t%i\t%i\t%i\t%i\n";
+  fprintf(file, format,
+      mz_ratio,                                                 // 1 
+      intensity,                                                // 2 
+      intensity_rank,                                           // 3 
+      has_mobile_proton,                                        // 4 
+      mz_int,                                                   // 5 
+      cleavage_idx_,                                            // 6
+      peptide_sequence_.length() - cleavage_idx_ + 1,            // 7
+      Alphabet::aminoToInt(peptide_sequence_[cleavage_idx_-1]),// 8 
+      Alphabet::aminoToInt(peptide_sequence_[cleavage_idx_]), // 9 
+      is_possible,                                              // 10 
+      is_detectable,                                            // 11
+      is_detected                                               // 12
+  );
+}
+
+/*
+ * Same output as above, but in binary
+ *
+ * ints 
+ *
+ * 0. m/z ratio - ratio of the ion's mass-to-charge to the peptide's m/z
+ * 1. raw - raw intensity
+ * 2. rank - the ion rank
+ *
+ * floats 
+ *
+ * 0. proton mobility - always set to 1 (for now) FIXME
+ * 1. m/z ratio int
+ * 2. index of the amide bond cleavage from N-term
+ * 3. index of the amide bond cleavage from C-term
+ * 4. Left amino acid ID 
+ * 5. Right amino acid ID
+ * 6. Is this ion possible?
+ * 7. Is this ion detectable?
+ * 8. Is this ion detected?
+
+ */
+void Ion::printGmtkSingleBinary(
+  FILE* file,  ///< to this file -in
+  int sentence_idx,
+  int frame_idx
+  ){
+
+  FLOAT_T* float_array = (FLOAT_T*)mycalloc(sizeof(FLOAT_T), SINGLE_ION_FLOATS);
+  int* int_array = (int*)mycalloc(sizeof(int), SINGLE_ION_INTS);
+
+  FLOAT_T mz_ratio = (ion_mass_z_)/getMass(MONO);
+  float_array[0] = mz_ratio;                              // 0
+  float_array[1] = 0.0;                                   // 1
+  float_array[2] = 0.0;                                   // 2
+  int is_detected = 0;
+  if (peak_ != NULL){
+    float_array[1] = peak_->getIntensity();      //1
+    float_array[2] = peak_->getIntensityRank();  //2
+    is_detected = 1; 
+
+#ifdef LOG_INTENSITY
+    // START
+    // replace the rank intensity with the negative log of the 
+    // TIC normalized intensity. A hack, I know
+    float_array[2] = 10.0 + log(float_array[1]);
+#endif
+
+  }
+
+  int mz_int = (int)(mz_ratio * (MZ_INT_MAX - MZ_INT_MIN) + MZ_INT_MIN);
+  int cterm_idx = peptide_sequence_.length() - cleavage_idx_; 
+  int left_amino = Alphabet::aminoToInt(peptide_sequence_[cleavage_idx_-1]);
+  int right_amino = Alphabet::aminoToInt(peptide_sequence_[cleavage_idx_]);
+  int is_detectable = 0;
+  if ( 
+       ((ion_mass_z_ >= DETECTABLE_MZ_MIN) 
+              &&
+        (ion_mass_z_ <= DETECTABLE_MZ_MAX)) 
+
+         || 
+         
+       is_detected
+
+     ){
+    is_detectable = 1;                                    
+  }
+
+
+  int_array[0] = 1;                 // 0
+  int_array[1] = mz_int;            // 1
+  int_array[2] = cleavage_idx_;     // 2
+  int_array[3] = cterm_idx;         // 3
+  int_array[4] = left_amino;        // 4
+  int_array[5] = right_amino;       // 5
+  int_array[6] = 1;                 // 6
+  int_array[7] = is_detectable;     // 7
+  int_array[8] = is_detected;       // 8
+
+  if (REVERSE_ENDIAN){
+
+    int idx;
+    for (idx=0; idx < 9; idx++){
+      int_array[idx] = htonl(int_array[idx]);
+    }
+    for (idx=0; idx < 3; idx++){
+      // htonl does not seem to work on the floats (!!)
+      // so I will reverse the bytes by hand
+      FLOAT_T old_float;
+      FLOAT_T new_float;
+
+      old_float = float_array[idx];
+
+      char *forward_endian = (char*) &old_float;
+      char *reversed_endian = (char*) &new_float;
+
+      reversed_endian[0] = forward_endian[3];
+      reversed_endian[1] = forward_endian[2];
+      reversed_endian[2] = forward_endian[1];
+      reversed_endian[3] = forward_endian[0];
+      float_array[idx] = new_float;
+    }
+    
+    int big_end_sentence_idx = htonl(sentence_idx);
+    int big_end_frame_idx = htonl(frame_idx);
+
+    fwrite(&big_end_sentence_idx, sizeof(int), 1, file);
+    fwrite(&big_end_frame_idx, sizeof(int), 1, file);
+
+  } else {
+
+    fwrite(&sentence_idx, sizeof(int), 1, file);
+    fwrite(&frame_idx, sizeof(int), 1, file);
+
+  }
+
+  fwrite(float_array, sizeof(FLOAT_T), 3, file);
+  fwrite(int_array, sizeof(int), 9, file);
+  free(float_array);
+  free(int_array);
+}
+
+/**
+ * A hack routine to print out a null ion if there are none in the series.
+ * For using neutral losses with GMTK.
+ * Come in both binary and ascii versions.
+ */
+void Ion::printNullGmtkSingleBinary(
+  FILE* file,
+  int sentence_idx,
+  int frame_idx
+  ){
+
+  FLOAT_T float_array[3] = {0.0, 0.0, 0.0};
+  int int_array[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
+  fwrite(&sentence_idx, sizeof(int), 1, file);
+  fwrite(&frame_idx, sizeof(int), 1, file);
+  fwrite(float_array, sizeof(FLOAT_T), 3, file);
+  fwrite(int_array, sizeof(int), 9, file);
+}
+
+/**
+ * A hack routine to print out a null ion if there are none in the series.
+ * For using neutral losses with GMTK.
+ */
+void Ion::printNullGmtkPairedBinary(
+  FILE* file,
+  int sentence_idx,
+  int frame_idx
+  ){
+
+  // FIX get rid of magic numbers
+  FLOAT_T float_array[6] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
+  int int_array[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+  fwrite(&sentence_idx, sizeof(int), 1, file);
+  fwrite(&frame_idx, sizeof(int), 1, file);
+  fwrite(float_array, sizeof(FLOAT_T), 6, file);
+  fwrite(int_array, sizeof(int), 12, file);
+}
+
+
+/**
+ * A hack routine to print out a null ion if there are none in the series.
+ * For using neutral losses with GMTK.
+ * Come in both binary and ascii versions.
+ */
+void Ion::printNullGmtkSingle(
+  FILE* file
+  ){
+
+  const char* string = "0.0\t0.0\t0.0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
+  fprintf(file, "%s", string);
+}
+
+
+/**
+ * prints the location and fields of the two ION_T objects to the file
+ * following format for GMTK paired-ion models:
+ *
+ * ints 
+ *
+ * 1.  m/z ratio int (from N-term)
+ * 2.  m/z ratio int (from C-term)
+ * 3.  peptide idx (from N-term)
+ * 4.  peptide idx (from C-term)
+ * 5.  aa Id (N-term)
+ * 6.  aa Id (C-term)
+ * 7.  first possible
+ * 8.  first detectable
+ * 9.  first detected
+ * 10. second possible
+ * 11. second observable
+ * 12. second detected
+ *
+ * floats
+ *
+ * 1. m/z ratio FLOAT_T (from N-term)
+ * 2. m/z ratio FLOAT_T (from C-term)
+ * 3. first raw
+ * 4. second raw
+ * 5. first rank
+ * 6. second rank
+ *
+ */
+void Ion::printGmtkPairedBinary(
+  Ion* first_ion,   ///< print this ion -in
+  Ion* second_ion,  ///< print this ion -in
+  FILE* file,         ///< to this file -in
+  int sentence_idx, 
+  int frame_idx
+  ){
+  
+  FLOAT_T* float_array = (FLOAT_T*)mycalloc(sizeof(FLOAT_T), PAIRED_ION_FLOATS);
+  int* int_array = (int*)mycalloc(sizeof(int), PAIRED_ION_INTS);
+
+  // start with the floats
+  FLOAT_T n_mz_ratio = (first_ion->ion_mass_z_)/(first_ion->getMass(MONO));
+  float_array[0] = n_mz_ratio;                                    // 0
+  // TODO 
+  // subtract from 1.0?
+  FLOAT_T c_mz_ratio =  1.0 - n_mz_ratio;                           // 1
+  float_array[1] = c_mz_ratio;
+
+  int first_is_detected = 0;
+  if (first_ion->peak_ != NULL){
+    // put in LOG_INTENSITY ?
+    float_array[2] = first_ion->peak_->getIntensity();    //2
+    float_array[4] = first_ion->peak_->getIntensityRank();//4
+    first_is_detected = 1; 
+  }
+
+  int second_is_detected = 0;
+  if (second_ion->peak_ != NULL){
+    // put in LOG_INTENSITY ?
+    float_array[3] = second_ion->peak_->getIntensity();    //3
+    float_array[5] = second_ion->peak_->getIntensityRank();//5
+    second_is_detected = 1; 
+  }
+
+  // next do the ints
+  int n_mz_int = (int)(n_mz_ratio * (MZ_INT_MAX - MZ_INT_MIN) + MZ_INT_MIN);
+  int c_mz_int = (int)(c_mz_ratio * (MZ_INT_MAX - MZ_INT_MIN) + MZ_INT_MIN);
+  int cterm_idx = first_ion->peptide_sequence_.length() 
+    - first_ion->cleavage_idx_; 
+  int left_amino = Alphabet::aminoToInt(
+      first_ion->peptide_sequence_[first_ion->cleavage_idx_-1]);
+  int right_amino = Alphabet::aminoToInt(
+      first_ion->peptide_sequence_[first_ion->cleavage_idx_]);
+  int first_is_detectable = 0;
+  if ( 
+       ((first_ion->ion_mass_z_ >= DETECTABLE_MZ_MIN) 
+              &&
+        (first_ion->ion_mass_z_ <= DETECTABLE_MZ_MAX)) 
+
+         || 
+         
+       first_is_detected
+
+     ){
+    first_is_detectable = 1;                                    
+  }
+
+  int second_is_detectable = 0;
+  if ( 
+       ((second_ion->ion_mass_z_ >= DETECTABLE_MZ_MIN) 
+              &&
+        (second_ion->ion_mass_z_ <= DETECTABLE_MZ_MAX)) 
+
+         || 
+         
+       second_is_detected
+
+     ){
+    second_is_detectable = 1;                                    
+  }
+
+  int_array[0] = n_mz_int; 
+  int_array[1] = c_mz_int; 
+  int_array[2] = first_ion->cleavage_idx_;
+  int_array[3] = cterm_idx;
+  int_array[4] = left_amino;
+  int_array[5] = right_amino;
+  int_array[6] = 1;  // TODO is possible always true?
+  int_array[7] = first_is_detectable; 
+  int_array[8] = first_is_detected; 
+  int_array[9] = 1;  // TODO is possible always true?
+  int_array[10] = second_is_detectable; 
+  int_array[11] = second_is_detected; 
+
+  // account for endian differences
+  if (REVERSE_ENDIAN){
+
+    int idx;
+    for (idx=0; idx < PAIRED_ION_INTS; idx++){
+      int_array[idx] = htonl(int_array[idx]);
+    }
+    for (idx=0; idx < PAIRED_ION_FLOATS; idx++){
+      // htonl does not seem to work on the floats (!!)
+      // so I will reverse the bytes by hand
+      FLOAT_T old_float;
+      FLOAT_T new_float;
+
+      old_float = float_array[idx];
+
+      char *forward_endian = (char*) &old_float;
+      char *reversed_endian = (char*) &new_float;
+
+      reversed_endian[0] = forward_endian[3];
+      reversed_endian[1] = forward_endian[2];
+      reversed_endian[2] = forward_endian[1];
+      reversed_endian[3] = forward_endian[0];
+      float_array[idx] = new_float;
+    }
+    
+    sentence_idx = htonl(sentence_idx);
+    frame_idx = htonl(frame_idx);
+  } 
+
+  // output to the file
+  fwrite(&sentence_idx, sizeof(int), 1, file);
+  fwrite(&frame_idx, sizeof(int), 1, file);
+  fwrite(float_array, sizeof(FLOAT_T), PAIRED_ION_FLOATS, file);
+  fwrite(int_array, sizeof(int), PAIRED_ION_INTS, file);
+  free(float_array);
+  free(int_array);
+};
+
+/**
+ *\return the modified mass_z accodring to the modification type
+ */
+FLOAT_T Ion::modifyMassZ(
+  FLOAT_T mass_z, ///< the pre-modified ion mass_z -in
+  int modification_count, ///< number of times more the modification occurs -in
+  ION_MODIFICATION_T ion_modification, ///< the type of modification -in
+  int charge, ///< charge of the ion
+  MASS_TYPE_T mass_type ///< mass type (average, mono) -in
+  )
+{
+  // initalize the modified masses(average|mono);
+  if(!initialized_modification_masses){
+    initializeModificationMasses(mass_type);
+  }
+  
+  return  mass_z + (modification_masses[(int)ion_modification]/(float)charge) * modification_count;  
+}
+
+
+/**
+ * Adds the given ION_MODIFICATION to this ion
+ */
+void Ion::addModification(
+  ION_MODIFICATION_T modification, ///< add this modification to the ion -in
+  int modification_count, ///< the number of modifications -in
+  MASS_TYPE_T mass_type ///< mass type (average, mono) -in
+  )
+{
+  // update modification count
+  modification_counts_[(int)modification] += modification_count;  
+  // reset ion mass_z
+  ion_mass_z_ =  modifyMassZ(ion_mass_z_, 
+                                   modification_count, 
+                                   modification, 
+                                   charge_, 
+                                   mass_type);
+}
+
+/**
+ * Adds the given ION_MODIFICATION to this ion
+ */
+void Ion::setPeak(
+  Peak * peak ///< peak to add to this ion -in
+  ){
+  peak_ = peak;
+};
+
+/**
+ *\returns the ion's AA mass added all up
+ */
+FLOAT_T Ion::getMass(
+  MASS_TYPE_T mass_type ///< mass type (average, mono) -in
+  )                   
+{
+  FLOAT_T mass = 0;
+  bool reverse = false;
+
+  size_t start_idx = 0;
+  size_t end_idx = 0;
+
+  // get sequence for x,y,z ion
+  if(type_ == X_ION || type_ == Y_ION || type_ == Z_ION){
+    // convert the cleavage index into the actually index that start from the left.
+    end_idx = peptide_sequence_.length();
+    start_idx = end_idx - cleavage_idx_;
+    reverse = true;
+  }
+  // get sequence for a,b,c ion
+  else{
+    end_idx = cleavage_idx_;
+  }
+
+  // add up all AA mass
+  for(int ion_idx = start_idx; ion_idx < end_idx; ++ion_idx){
+    mass += get_mass_amino_acid(peptide_sequence_[ion_idx], mass_type);
+  }
+
+  // if X,Y,Z ion add H2O
+  if(reverse){
+    if(mass_type == AVERAGE){
+      mass += MASS_H2O_AVERAGE;
+    }else{
+      mass += MASS_H2O_MONO;
+    }
+  }
+  
+  return mass;
+}
+
+/**
+ *\return the modified mass accodring to the modification type
+ */
+FLOAT_T Ion::modifyMass(
+  FLOAT_T mass, ///< the pre-modified ion mass -in
+  int modification_count, ///< number of times more the modification occurs -in
+  ION_MODIFICATION_T ion_modification, ///< the type of modification -in
+  MASS_TYPE_T mass_type ///< mass type (average, mono) -in
+  )
+{
+  // initalize the modified masses(average|mono);
+  if(!initialized_modification_masses){
+    initializeModificationMasses(mass_type);
+  }
+  
+  return  mass + modification_masses[(int)ion_modification] * modification_count;
+}
+
+/**
+ * is_modified, indiciates if there are any modification to the ion
+ * speeds up the proccess if FALSE.
+ *\returns true if successfully computes the mass/z of the ion, else FALSE
+ */
+bool Ion::calcMassZWithMass(
+  MASS_TYPE_T mass_type, ///< mass type (average, mono) -in
+  FLOAT_T mass, ///< the basic mass of the ion -in
+  bool is_modified ///< are there any modifications for this ion? -in
+  )
+{
+  FLOAT_T h_mass = MASS_H_MONO;
+
+  // alter mass according to the modification
+  if(is_modified){
+    // iterate over all type of modifications for ion
+    int modification_idx = 0;
+    for(; modification_idx < MAX_MODIFICATIONS; ++modification_idx){
+      // update ion mass if modification is needed
+      if(modification_counts_[modification_idx] != 0){
+        mass = modifyMass(mass, modification_counts_[modification_idx], 
+                               (ION_MODIFICATION_T)modification_idx, mass_type);
+      }
+    }
+  }
+  
+  // reset h mass if needed
+  if(mass_type == AVERAGE){
+    h_mass = MASS_H_AVERAGE;
+  }
+
+  // convert mass to m/z and assigned to ion
+  ion_mass_z_ = (mass + (h_mass*(FLOAT_T)charge_))/(FLOAT_T)charge_;
+
+  return true;
+}
+
+/**
+ * is_modified, indiciates if there are any modification to the ion
+ * speeds up the proccess if FLASE.
+ *\returns true if successfully computes the mass/z of the ion, else FALSE
+ */
+bool Ion::calcMassZ(
+  MASS_TYPE_T mass_type, ///< mass type (average, mono) -in
+  bool is_modified ///< are there any modifications for this ion? -in
+  )
+{
+  FLOAT_T mass = this->getMass(mass_type);
+  return this->calcMassZWithMass(mass_type, mass, is_modified);
+}
+
+/**
+ * Copies ion object from src to dest.
+ * must pass in a seperate pointer peptide sequence from its own ion_series object
+ * must pass in a memory allocated ION_T* dest
+ */
+void Ion::copy(
+  Ion* src,///< ion to copy from -in
+  Ion* dest,///< ion to copy to -out
+  const string& peptide_sequence ///< the peptide sequence that the dest should refer to -in
+  )
+{
+  dest->type_ = src->type_;
+  dest->cleavage_idx_ = src->cleavage_idx_;
+  dest->charge_ = src->charge_;
+  
+  // set all modification counts in the ion
+  int modification_idx = 0;
+  for(; modification_idx < MAX_MODIFICATIONS; ++modification_idx){
+    dest->modification_counts_[modification_idx] = src->modification_counts_[modification_idx];
+  }
+  
+  dest->ion_mass_z_ = src->ion_mass_z_;
+  dest->peptide_sequence_ = peptide_sequence;
+  CacheableMass::copy(src, dest);
+
+
+}
+
+/*
+ * Overriden function in CacheableMass
+ */
+FLOAT_T Ion::calcMass(MASS_TYPE_T mass_type) {
+  return Peptide::calcSequenceMass(peptide_sequence_, MONO); 
+}
+
+
+/**
+ * \returns true if forward ion_type(A,B,C), 
+ * else reverse ion_type(X,Y,Z) FALSE
+ */
+bool Ion::isForwardType()
+{
+  // is ion forward type?
+  if(type_ == B_ION ||
+     type_ == A_ION ||
+     type_ == C_ION)
+    {
+      return true;
+    }
+
+  // reverse type ion
+  return false;
+}
+
+/**
+ *\returns true if the ion has modifications, else FALSE
+ */
+bool Ion::isModified()
+{
+  int by_modification = 0;
+
+  // only add ions with no modifications
+  for(; by_modification < MAX_MODIFICATIONS; ++by_modification){
+    if(modification_counts_[by_modification] != 0){
+      return true;
+    }
+  }
+  
+  return false;
+}
+
+/*********************************
+ * get, set methods for ion fields
+ *********************************/
+
+/**
+ * \returns the location of ION_T object
+ */
+FLOAT_T Ion::getMassZ()
+{
+  return ion_mass_z_;
+}
+
+/**
+ * sets the mass/z of the ION_T object
+ * while this can be calculated from the char*, cleavage_idx and
+ * modifications, it allows some optimizations if we allow it to be set
+ * instead
+ */
+void Ion::setMassZ(
+  FLOAT_T mass_z ///< the m/z location -in
+  )
+{
+  ion_mass_z_ = mass_z;
+}
+
+FLOAT_T Ion::getMassFromMassZ() {
+  FLOAT_T ans = (ion_mass_z_ - MASS_PROTON) * (FLOAT_T)charge_;
+  return ans;
+  
+}
+
+void Ion::setMassZFromMass(
+  FLOAT_T mass
+  ) {
+
+  FLOAT_T charge = charge_;
+  ion_mass_z_ = (mass + MASS_PROTON * charge) / charge;
+
+}
+
+
+/**
+ * return the cleavage_idx of the ion object
+ */
+int Ion::getCleavageIdx()
+{
+  return cleavage_idx_;
+}
+
+/**
+ * set the cleavage_idx of the ion object
+ */
+void Ion::setCleavageIdx(
+  int cleavage_idx ///< the cleavage index in the peptide -in
+  )
+{
+  cleavage_idx_ = cleavage_idx;
+}
+
+/**
+ * return the charge of the ion object
+ */
+int Ion::getCharge()
+{
+  return charge_;
+}
+
+/**
+ * set the charge of the ion object
+ */
+void Ion::setCharge(
+  int charge ///< the charge of this ion -in
+  )
+{
+  charge_ = charge;
+}
+
+/**
+ * return the ION_TYPE_T of the ion object
+ */
+ION_TYPE_T Ion::getType()
+{
+  return type_;
+}
+
+/**
+ * set the ION_TYPE_T of the ion object
+ */
+void Ion::setType(
+  ION_TYPE_T ion_type ///< the ion type of this ion -in 
+  )
+{
+  type_ = ion_type;
+}
+
+/**
+ * return the parent peptide sequence of the ion object
+ * returns a pointer to the sequence, should not free
+ */
+const string& Ion::getPeptideSequence()
+{
+  return peptide_sequence_;
+}
+
+/**
+ * return a pointer to the modification_count array of the ion object
+ */
+int* Ion::getModificationCounts()
+{
+  return modification_counts_;
+}
+
+/**
+ * return the count of in the modification_count array of the ion object
+ */
+int Ion::getSingleModificationCount(
+  ION_MODIFICATION_T mod_type ///< the modification count wanted -in
+  )
+{
+  return modification_counts_[mod_type];
+}
+
+int Ion::getTotalModificationCount() {
+  int total = 0;
+
+  for (int idx=NH3;idx < ALL_MODIFICATION;idx++) {
+    total += modification_counts_[idx];
+  }
+
+  return total;
+
+}
+
+
+/**
+ * set the parent peptide_sequence of the ion object
+ */
+void Ion::setPeptideSequence(
+  char* peptide_sequence ///< the parent peptide's sequence of this ion -in 
+  )
+{
+  peptide_sequence_ = peptide_sequence;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/model/Ion.h b/src/model/Ion.h
new file mode 100644
index 0000000..672c5c6
--- /dev/null
+++ b/src/model/Ion.h
@@ -0,0 +1,473 @@
+/**
+ * \file Ion.h
+ * $Revision: 1.15 $
+ * \brief Object for representing one ion in an ion_series.
+ *
+ */
+#ifndef ION_H
+#define ION_H
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#include "model/objects.h"
+#include "util/utils.h"
+#include "util/mass.h"
+#include "Peak.h"
+#include "util/CacheableMass.h"
+
+static const int MAX_MODIFICATIONS = 4; ///< maximum modifications allowed per ion
+
+class Ion : public CacheableMass {
+
+ protected:
+  ION_TYPE_T type_;  ///< type of the ion 
+  int cleavage_idx_; ///< index of peptide amide that fragments to form this ion, starting from the N-term end 
+  // N.b. this is different than the b1,y1 index, in that it always starts
+  // from the N-term
+  int charge_; ///< the ion charge
+  std::string peptide_sequence_;
+  int modification_counts_[MAX_MODIFICATIONS]; ///< an array of the number of different ion modifications
+  FLOAT_T ion_mass_z_;   ///< The mass/z of the ion. 
+  Peak * peak_;  ///< The assigned peak. NULL if no peak // TODO add ptr count
+  int pointer_count_; ///< count of number of references to this ion.
+
+  static const int MZ_INT_MAX = 10;
+  static const int MZ_INT_MIN = 0;
+  static const int PAIRED_ION_INTS = 12;
+  static const int PAIRED_ION_FLOATS = 6;
+  static const int SINGLE_ION_FLOATS = 3;
+  static const int SINGLE_ION_INTS = 9;
+
+  /**
+   * helper function
+   * only copies the pointer to the peptide sequence
+   * creates an heap allocated ion, ion mass is not calculated.
+   * \returns an ION_T object
+   */
+  void initBasicIon(
+    ION_TYPE_T type,   ///< intensity for the new ion -in 
+    int cleavage_idx, ///< index into the peptide amide bonds of this ion
+    int charge, ///< charge of the ion
+    const std::string& peptide ///< location for the new ion -in
+    ); 
+
+  
+  // Override calcMass
+  virtual FLOAT_T calcMass(MASS_TYPE_T mass_type);
+
+
+  /**
+   * initializes the mass array
+   */
+  static void initializeModificationMasses(
+    MASS_TYPE_T mass_type ///< mass type (average, mono) -in
+  );
+
+ /**
+  *\return the modified mass_z accodring to the modification type
+  */
+  FLOAT_T modifyMassZ(
+    FLOAT_T mass_z, ///< the pre-modified ion mass_z -in
+    int modification_count, ///< number of times more the modification occurs -in
+    ION_MODIFICATION_T ion_modification, ///< the type of modification -in
+    int charge, ///< charge of the ion
+    MASS_TYPE_T mass_type ///< mass type (average, mono) -in
+    );
+
+  /**
+   *\return the modified mass accodring to the modification type
+   */
+  FLOAT_T modifyMass(
+    FLOAT_T mass, ///< the pre-modified ion mass -in
+    int modification_count, ///< number of times more the modification occurs -in
+    ION_MODIFICATION_T ion_modification, ///< the type of modification -in
+    MASS_TYPE_T mass_type ///< mass type (average, mono) -in
+    );
+
+  /**
+   *\returns the ion's AA mass added all up
+   */
+  FLOAT_T getMass(
+    MASS_TYPE_T mass_type ///< mass type (average, mono) -in
+    );    
+
+ public:
+
+  /**
+   * initializes an Ion object.
+   */
+  void init();
+  void init(
+    ION_TYPE_T type,   ///< intensity for the new ion -in 
+    int cleavage_idx, ///< index into the peptide amide bonds of this ion
+    int charge, ///< charge of the ion
+    const std::string& peptide, ///< location for the new ion -in
+    MASS_TYPE_T mass_type, ///< mass type (average, mono) -in
+    FLOAT_T base_mass ///< the base mass of the ion -in
+  );
+
+  /**
+   * \returns An (empty) ion object.
+   */
+  Ion();
+  
+ /**
+  * The peptide sequence is copied as a pointer.
+  * only copies the pointer to the peptide sequence
+  * cleavage index starts from 0...n (ex 0:A:1:K:2:V:3:..n:L)
+  * \returns an ION_T object
+  */
+  Ion(
+    ION_TYPE_T type,   ///< intensity for the new ion -in 
+    int cleavage_idx, ///< index into the peptide amide bonds of this ion
+    int charge, ///< charge of the ion
+    const std::string& peptide, ///< location for the new ion -in
+    MASS_TYPE_T mass_type ///< mass type (average, mono) -in
+    ); 
+
+ /**
+  * only copies the pointer to the peptide sequence
+  * inputs a array of all the modification counts
+  * \returns an ION_T object
+  */
+  Ion(
+    ION_TYPE_T type,   ///< intensity for the new ion -in 
+    int cleavage_idx, ///< index into the peptide amide bonds of this ion
+    int charge, ///< charge of the ion
+    const std::string& peptide, ///< location for the new ion -in
+    MASS_TYPE_T mass_type, ///< mass type (average, mono) -in
+    int* modification_counts ///< an array of modification counts for each modification -in
+    );
+
+  /**
+   * only copies the pointer to the peptide sequence
+   * inputs a array of all the modification counts
+   * inputs the pre modified mass, of just all AA mass summed up.
+   * \returns an ION_T object
+   */
+  Ion(
+    ION_TYPE_T type,   ///< intensity for the new ion -in 
+    int cleavage_idx, ///< index into the peptide amide bonds of this ion
+    int charge, ///< charge of the ion
+    const std::string& peptide, ///< location for the new ion -in
+    MASS_TYPE_T mass_type, ///< mass type (average, mono) -in
+    FLOAT_T base_mass, ///< the base mass of the ion -in
+    int* modification_counts ///< an array of modification counts for each modification -in
+    );
+
+  /**
+   * only copies the pointer to the peptide sequence
+   * inputs the pre modified mass, of just all AA mass summed up.
+   * \returns an ION_T object
+   */
+  Ion(
+    ION_TYPE_T type,   ///< intensity for the new ion -in 
+    int cleavage_idx, ///< index into the peptide amide bonds of this ion
+    int charge, ///< charge of the ion
+    const std::string& peptide, ///< location for the new ion -in
+    MASS_TYPE_T mass_type, ///< mass type (average, mono) -in
+    FLOAT_T base_mass ///< the base mass of the ion -in
+    );
+
+  /**
+   * frees A ION_T object
+   */
+  ~Ion();
+
+  static Ion* newIon();
+
+  /**
+   * decrements the pointer and free the ion
+   */
+  static void freeIon(
+    Ion* ion ///< ion to free
+  );
+
+  /**
+   * Increments the pointer count
+   */
+  void incrementPointerCount();
+
+  /**
+   * prints the location and fields of ION_T object to the file, in the
+   * following format:
+   *
+   * m/z \\t mass \\t charge \\t ion-series \\t  ...
+   *  peptide-bond-index \\t modifications \n
+   *
+   * Where:
+   *
+   * m/z - is the ion's mass-to-charge
+   * mass - is the ion's (charged) mass
+   * charge - is the ion's charge e.g. 1,2,3
+   * ion-series - is one of (b,y,p)
+   * bond-index - is in [1...n), where n is peptide length
+   * modifications - is one of (none|nh3|h2o)
+   *
+   * if the ion has more than one modification, each will be printed on a
+   * separate line, with the necessary number of tabs to right justify
+   */
+  void print(
+    FILE* file ///< to this file -in
+  );
+
+  /**
+   * prints the location and fields of ION_T object to the file, in the
+   * following format for GMTK single-ion models:
+   *
+   * m/z \\t mass \\t charge \\t ion-series \\t  ...
+   *  peptide-bond-index \\t modifications \n
+   *
+   * Where:
+   *
+   * m/z - is the ion's mass-to-charge
+   * mass - is the ion's (charged) mass
+   * charge - is the ion's charge e.g. 1,2,3
+   * ion-series - is one of (b,y,p)
+   * bond-index - is in [1...n), where n is peptide length
+   * modifications - is one of (none|nh3|h2o)
+   *
+   * if the ion has more than one modification, each will be printed on a
+   * separate line, with the necessary number of tabs to right justify
+   */
+  void printGmtkSingle(
+    FILE* file ///< to this file -in
+  );
+
+  /**
+   * As print_ion_gmtk_single above, but in binary.
+   */
+  void printGmtkSingleBinary(
+    FILE* file, ///< to this file -in
+    int sentence_idx,
+    int frame_idx
+  );
+
+  /**
+   * Some hack routines to print out a null ion if there are none in the series.
+   * For using neutral losses with GMTK.
+   * Come in both binary and ascii versions.
+   */
+  void printNullGmtkSingleBinary(
+    FILE* file,
+    int sentence_idx,
+    int frame_idx
+    );
+
+  void printNullGmtkPairedBinary(
+    FILE* file,
+    int sentence_idx,
+    int frame_idx
+    );
+
+  /**
+   * A hack routine to print out a null ion if there are none in the series.
+   * For using neutral losses with GMTK.
+   * Come in both binary and ascii versions.
+   */
+  void printNullGmtkSingle(
+    FILE* file
+    );
+
+  /**
+   * prints the location and fields of the two ION_T objects to the file
+   * following format for GMTK paired-ion models:
+   *
+   * ints 
+   *
+   * 1.  m/z ratio int (from N-term)
+   * 2.  m/z ratio int (from C-term)
+   * 3.  peptide idx (from N-term)
+   * 4.  peptide idx (from C-term)
+   * 5.  aa Id (N-term)
+   * 6.  aa Id (C-term)
+   * 7.  first possible
+   * 8.  first detectable
+   * 9.  first detected
+   * 10. second possible
+   * 11. second observable
+   * 12. second detected
+   *
+   * floats
+   *
+   * 1. m/z ratio FLOAT_T (from N-term)
+   * 2. m/z ratio FLOAT_T (from C-term)
+   * 3. first raw
+   * 4. second raw
+   * 5. first rank
+   * 6. second rank
+   *
+   */
+  static void printGmtkPairedBinary(
+    Ion* first_ion, ///< print this ion -in
+    Ion* second_ion, ///< print this ion -in
+    FILE* file, ///< to this file -in
+    int sentence_idx,
+    int frame_idx
+    );
+
+  /**
+   * Adds the given ION_MODIFICATION to this ion
+   */
+  void addModification(
+    ION_MODIFICATION_T modification, ///< add this modification to the ion -in
+    int modification_count,  ///< the number of modifications
+    MASS_TYPE_T mass_type ///< mass type (average, mono) -in
+    );
+
+  /**
+   * Adds the given ION_MODIFICATION to this ion
+   */
+  void setPeak(
+    Peak * peak ///< peak to add to this ion -in
+    );
+
+  /**
+   * Copies ion object from src to dest.
+   * must pass in a seperate pointer peptide sequence from its own ion_series object
+   * must pass in a memory allocated ION_T* dest
+   */
+  static void copy(
+    Ion* src,///< ion to copy from -in
+    Ion* dest,///< ion to copy to -out
+    const std::string& peptide_sequence ///< the peptide sequence that the dest should refer to -in
+    );
+
+  /**
+   *\returns TRUE if forward ion_type(A,B,C), else reverse ion_type(X,Y,Z) FALSE
+   */
+  bool isForwardType();
+
+  /**
+   *\returns TRUE if the ion has modifications, else FALSE
+   */
+  bool isModified();
+
+  /*********************************
+   * get, set methods for ion fields
+   *********************************/
+
+  /**
+   * \returns the location of ION_T object
+   */
+  FLOAT_T getMassZ();
+
+  /**
+   * sets the mass/z of the ION_T object
+   * while this can be calculated from the char*, cleavage_idx and
+   * modifications, it allows some optimizations if we allow it to be set
+   * instead
+   */
+  void setMassZ(
+    FLOAT_T mass_z ///< the m/z location -in
+  );
+
+  FLOAT_T getMassFromMassZ();
+
+  void setMassZFromMass(
+    FLOAT_T mass
+  );
+
+
+  /**
+   * return the cleavage_idx of the ion object
+   */
+  int getCleavageIdx();
+
+  /**
+   * set the cleavage_idx of the ion object
+   */
+  void setCleavageIdx(
+    int cleavage_idx ///< the cleavage index in the peptide -in
+  );
+
+  /**
+   * return the charge of the ion object
+   */
+  int getCharge();
+
+  /**
+   * set the charge of the ion object
+   */
+  void setCharge(
+    int charge ///< the charge of this ion -in
+  );
+
+  /**
+   * return the ION_TYPE_T of the ion object
+   */
+  ION_TYPE_T getType();
+
+  /**
+   * set the ION_TYPE_T of the ion object
+   */
+  void setType(
+    ION_TYPE_T ion_type ///< the ion type of this ion -in 
+    );
+
+  /**
+   * return the parent peptide sequence of the ion object
+   * returns a pointer to the sequence, should not free
+   */
+  const std::string& getPeptideSequence();
+
+  /**
+   * return a pointer to the modification_count array of the ion object
+   */
+  int* getModificationCounts();
+
+  /**
+   * return the count of in the modification_count array of the ion object
+   */
+  int getSingleModificationCount(
+    ION_MODIFICATION_T mod_type ///< the modification count wanted -in
+    );
+
+  /**
+   * return the total number of modifications this ion has.
+   */
+  int getTotalModificationCount();
+
+  /**
+   * set the parent peptide_sequence of the ion object
+   */
+  void setPeptideSequence(
+    char* peptide_sequence ///< the parent peptide's sequence of this ion -in 
+    );
+
+  /**
+   * is_modified, indiciates if there are any modification to the ion
+   * speeds up the proccess if FLASE.
+   *\returns TRUE if successfully computes the mass/z of the ion, else FALSE
+   */
+  bool calcMassZ(
+    MASS_TYPE_T mass_type, ///< mass type (average, mono) -in
+    bool is_modified ///< are there any modifications for this ion? -in
+    );
+
+  /**
+   * is_modified, indiciates if there are any modification to the ion
+   * speeds up the proccess if FLASE.
+   *\returns TRUE if successfully computes the mass/z of the ion, else FALSE
+   */
+  bool calcMassZWithMass(
+    MASS_TYPE_T mass_type, ///< mass type (average, mono) -in
+    FLOAT_T mass, ///< the basic mass of the ion -in
+    bool is_modified ///< are there any modifications for this ion? -in
+    );
+
+};
+
+/**
+ *
+ */
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif
diff --git a/src/model/IonConstraint.cpp b/src/model/IonConstraint.cpp
new file mode 100644
index 0000000..7fa891c
--- /dev/null
+++ b/src/model/IonConstraint.cpp
@@ -0,0 +1,473 @@
+#include "IonConstraint.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+#include <string>
+#include "util/GlobalParams.h"
+
+using namespace std;
+/*************************
+ * ION_CONSTRAINT methods
+ *************************/
+
+/**
+ *Initializes an IonConstraint object, called from constructor 
+ */
+void IonConstraint::init(){
+
+  use_neutral_losses_ = false;
+  
+  
+  int modification_idx = 0;
+
+  // initialize all modifications count to 0
+  for(; modification_idx < MAX_MODIFICATIONS; ++modification_idx){
+    modifications_[modification_idx] = 0;
+  }
+
+  for (int idx = 0;idx < NUMBER_ION_TYPES; idx++) {
+    ion_types_[idx] = false;
+  }
+  
+  mass_type_ = MONO;
+  max_charge_ = 0;
+  ion_type_ = (ION_TYPE_T)0;
+  precursor_ion_ = false;
+  min_charge_ = 0;
+  exact_modifications_ = false;
+  pointer_count_ = 0;
+
+}
+
+/**
+ *\returns an empty heap allocated ion_constraint
+ */
+IonConstraint::IonConstraint() {
+
+  init();
+}
+
+/**
+ * modification, all modifications 0
+ * add more modifications as needed using the set_ion_constraint_modification
+ *\returns a new heap allocated ion_constraint
+ */
+IonConstraint::IonConstraint(
+  MASS_TYPE_T mass_type, ///< the mass_type to use MONO|AVERAGE
+  int max_charge, ///< max charge of the ions <= the parent peptide's charge
+  ION_TYPE_T ion_type, ///< the ion types the peptide series should include
+  bool precursor_ion  ///< should include precursor ion?
+  )
+{
+
+  init();
+  use_neutral_losses_ = false;
+ 
+  // set all fields of constraint
+  mass_type_ = mass_type;
+
+  const string& charge_str = GlobalParams::getMaxIonCharge();
+  //string charge_str = get_string_parameter("max-ion-charge");
+  
+  max_charge_ = max(1, max_charge - 1);
+
+  if (charge_str != "peptide") {
+    int charge_val;
+    if (StringUtils::TryFromString(charge_str, &charge_val)) {
+      max_charge_ = min(charge_val, max_charge_);
+    } else {
+      carp_once(CARP_WARNING, "Charge is not valid:%s", charge_str.c_str());
+    }
+  }
+
+  min_charge_ = 0;
+  exact_modifications_ = false;
+  ion_type_ = ion_type;
+  setUseIonType(ion_type, true);
+  precursor_ion_ = precursor_ion;
+  pointer_count_ = 1;
+
+}
+
+/**
+ * \brief Create a new ion constraint based on the score type and the
+ * charge of the peptide to be modeled.  Uses other
+ * new_ion_constraint_ methods for some types.
+ *
+ * \returns A newly allocated ion constraint.
+ */
+IonConstraint* IonConstraint::newIonConstraintSmart(
+  SCORER_TYPE_T score_type,
+  int charge
+){
+
+  IonConstraint* new_constraint = NULL;
+
+  switch(score_type){
+  case SP:
+    new_constraint = newIonConstraintSequestSp(charge);
+    break;
+  case XCORR:
+    new_constraint = newIonConstraintSequestXcorr(charge);
+    break;
+  default:
+    // use default type for others
+    ION_TYPE_T ion_type = GlobalParams::getPrimaryIons();
+    //string_to_ion_type(get_string_parameter("primary-ions"), &ion_type);
+    new_constraint = new IonConstraint(
+      GlobalParams::getFragmentMass(),
+      //get_mass_type_parameter("fragment-mass"),
+      charge, ion_type, 
+      GlobalParams::getPrecursorIons());
+      //get_boolean_parameter("precursor-ions")); 
+    break;
+  }
+  return new_constraint;
+}
+
+
+
+/**
+ * modification, sets all fields for gmtk settings
+ *\returns a new heap allocated ion_constraint
+ */
+IonConstraint* IonConstraint::newIonConstraintGmtk(
+  int charge 
+  )
+{
+  IonConstraint* constraint = NULL;
+
+  int max_charge = 1;
+  if(charge > 1){
+    max_charge = charge;
+  }  
+  constraint = new IonConstraint(MONO, max_charge, ALL_ION, false);
+
+  // set all modifications count for gmtk
+  constraint->use_neutral_losses_ = true;
+  constraint->min_charge_ = 1;
+  constraint->modifications_[NH3] = -1;
+  constraint->modifications_[H2O] = -1;
+  constraint->modifications_[ISOTOPE] = 0;
+  constraint->modifications_[FLANK] = 0;
+
+  return constraint;
+}
+
+
+/**
+ * modification, sets all fields for sequest settings
+ *\returns a new heap allocated ion_constraint
+ */
+IonConstraint* IonConstraint::newIonConstraintSequest(
+  MASS_TYPE_T mass_type, ///< the mass_type to use MONO|AVERAGE
+  int max_charge, ///< the maximum charge of the ions. 
+                  ///< cannot exceed the parent peptide's charge
+  ION_TYPE_T ion_type, ///< the ion types the peptide series should include
+  bool precursor_ion ///< should include precursor ion?
+  )
+{
+  IonConstraint* constraint = new IonConstraint(mass_type, max_charge, ion_type, precursor_ion);
+
+  // set                                                     
+  constraint->use_neutral_losses_ = true;
+  
+  // set all modifications count for sequest
+  constraint->modifications_[NH3] = 1;
+  constraint->modifications_[H2O] = 1;
+  constraint->modifications_[ISOTOPE] = 1;
+  constraint->modifications_[FLANK] = 1;
+  
+  return constraint;
+}
+
+/**
+ * modification, sets all fields for sequest Sp scoring settings
+ * make B, Y type ions
+ *\returns a new heap allocated ion_constraint
+ */
+IonConstraint* IonConstraint::newIonConstraintSequestSp(
+  int charge ///< the maximum charge of the ions, cannot exceed the parent peptide's charge
+  )
+{
+  IonConstraint* constraint = NULL;
+  constraint = new IonConstraint(MONO, charge, BY_ION, false);
+
+  // set                                                     
+  constraint->use_neutral_losses_ = true;
+  
+  // set all modifications count for sequest
+  constraint->modifications_[NH3] = 0;
+  constraint->modifications_[H2O] = 0;
+  constraint->modifications_[ISOTOPE] = 0;
+  constraint->modifications_[FLANK] = 0;
+  
+  return constraint;
+}
+
+
+/**
+ * modification, sets all fields for Sequest Xcorr scoring settings
+ * make B, Y, A type ions
+ *\returns a new heap allocated ion_constraint
+ */
+IonConstraint* IonConstraint::newIonConstraintSequestXcorr(
+  int charge ///< the maximum charge of the ions, cannot exceed the parent peptide's charge
+  )
+{
+  IonConstraint* constraint = NULL;
+  constraint = new IonConstraint(MONO, charge, BYA_ION, false);
+
+  // set                                                     
+  constraint->use_neutral_losses_ = true;
+  
+  // set all modifications count for sequest
+  constraint->modifications_[NH3] = 0;// -1;
+  constraint->modifications_[H2O] = 0;// -1;
+  constraint->modifications_[ISOTOPE] = 0;// not sure
+  constraint->modifications_[FLANK] = 0;
+  
+  return constraint;
+}
+
+/**
+ * Frees an allocated ion_constraint object.
+ */
+void IonConstraint::free(IonConstraint* ion_constraint)
+{
+  ion_constraint->pointer_count_--;
+  if (ion_constraint->pointer_count_ == 0) {
+    delete ion_constraint;
+  }
+}
+
+
+IonConstraint::~IonConstraint()
+{
+}
+
+
+/**
+ * copies ion_constraint pointer
+ */
+IonConstraint* IonConstraint::copy(
+    IonConstraint* ion_constraint
+    ){
+  
+  ion_constraint->pointer_count_++;
+  return ion_constraint;
+}
+
+
+/**
+ * copies ion_constraint object from src to dest
+ * must pass in a memory allocated ION_CONSTRAINT_T dest
+ */
+void IonConstraint::copy(
+  IonConstraint* src,///< ion_constraint to copy from -in
+  IonConstraint* dest///< ion_constraint to copy to -out
+  )
+{
+  int modification_idx = 0;
+  dest->use_neutral_losses_ = src->use_neutral_losses_;
+
+  // if use natural loss, copy
+  if(src->use_neutral_losses_){
+    // iterate over all modifications a update new constraint
+    for(; modification_idx < MAX_MODIFICATIONS; ++modification_idx){
+      dest->modifications_[modification_idx] = src->modifications_[modification_idx];
+    }
+  }
+  
+  dest->mass_type_ = src->mass_type_;
+  dest->max_charge_ = src->max_charge_;
+  dest->ion_type_ = src->ion_type_;
+  dest->precursor_ion_ = src->precursor_ion_;
+}
+
+/** FIXME!!!! double check
+ * Determines if a ion satisfies a ion_constraint.
+ * \returns true if the constraint is satisified. false if not.
+ */
+bool IonConstraint::isSatisfied(
+   Ion* ion ///< query ion -in
+   )
+{
+  int* counts = NULL;
+
+  // TODO Fix
+  bool return_val = true;
+  // print_ion(ion, stderr);
+  // fprintf(stderr, "%i->%i\n", ion_constraint->min_charge, ion_constraint->max_charge);
+  // check ion type
+  ION_TYPE_T ion_type = ion->getType();
+  if(
+     !(ion_type == ion_type_)
+      
+     &&
+     
+     !((ion_type_ == BY_ION) && (ion_type == B_ION || ion_type == Y_ION)) 
+     
+     &&
+
+     !((ion_type_ == BYA_ION) 
+          && 
+       (ion_type == B_ION || ion_type == Y_ION || ion_type == A_ION)) 
+     
+     &&
+     
+     !(ion_type_ == ALL_ION)
+
+     ){
+     
+    // precursor ion?
+    if(!(precursor_ion_ && ion_type == P_ION)){
+      return_val = false;
+    }
+  }
+  
+  // check charge
+  if(ion->getCharge() > max_charge_){
+    return_val = false;
+  }
+  
+  if(ion->getCharge() < min_charge_){
+    return_val = false;
+  }
+
+  // check modifications
+  counts = ion->getModificationCounts();
+  int mod_idx;
+  for(mod_idx=0; mod_idx < MAX_MODIFICATIONS; ++mod_idx){
+    if(modifications_[mod_idx] >= 0){
+      if(counts[mod_idx] > modifications_[mod_idx]){
+        return_val = false;
+        break;
+      }
+    }
+    else{
+      if(counts[mod_idx] < modifications_[mod_idx]){
+        return_val = false;
+        break;
+      }
+    }
+    if (exact_modifications_){
+      if(counts[mod_idx] != modifications_[mod_idx]){
+        return_val = false; 
+        break;
+      }
+    }
+  }
+  
+  // Add more checks here as more contraints are added
+
+  // fprintf(stderr, "r = %i\n", return_val);
+  return return_val;
+}
+
+/**
+ * \returns ION_TYPE for this constraint
+ */
+/*
+ION_TYPE_T IonConstraint::getIonType() {
+  return ion_type_;
+}
+*/
+
+void IonConstraint::setUseIonType(
+  ION_TYPE_T ion_type,
+  bool val
+  ) {
+  ion_types_[ion_type] = val;
+}
+
+bool IonConstraint::getUseIonType(ION_TYPE_T ion_type) {
+  return(ion_types_[ion_type]);
+}
+
+
+
+
+/**
+ * sets the modification count
+ * can only add isotopes
+ */
+void IonConstraint::setModification(
+  ION_MODIFICATION_T mod_type, ///< ion modification type -in
+  int count  ///< the count of the modification -in  
+  )
+{
+  // set modification count, can only add for isotope
+  if(mod_type != ISOTOPE){
+    modifications_[mod_type] = count;
+  }
+  else{
+    modifications_[mod_type] = abs(count);
+  }
+
+  // set neutral loss to true if needed
+  if(!use_neutral_losses_){
+    use_neutral_losses_ = true;
+  }
+}
+
+/**
+ * sets the exact modification boolean 
+ */
+void IonConstraint::setExactness(
+  bool exactness ///< whether to use exact mods or not -in
+  ){
+  exact_modifications_ = exactness;
+  if (exactness){
+    min_charge_ = max_charge_;
+  }
+}
+ 
+/**
+ * gets the modification count for specific mod_type
+ */
+int IonConstraint::getModification(
+  ION_MODIFICATION_T mod_type ///< ion modification type -in
+  )
+{
+  return modifications_[mod_type];
+}
+
+/**
+ * \returns the modifications array
+ */
+int* IonConstraint::getModifications() {
+  return modifications_;
+}
+
+
+/**
+ * gets the mass type of the ion_constraint
+ */
+MASS_TYPE_T IonConstraint::getMassType()
+{
+  return mass_type_;
+}
+
+/**
+ * get the maximum charge of the IonConstraint
+ */
+int IonConstraint::getMaxCharge() 
+{
+  return max_charge_;
+}
+
+/**
+ *\returns precuror_ion_
+ */
+bool IonConstraint::getPrecursorIon() {
+  return precursor_ion_;
+}
+
+/**
+ * get the neutral loss field of the ion constraint.
+ */
+bool IonConstraint::getUseNeutralLosses()
+{
+  return use_neutral_losses_;
+}
+
diff --git a/src/model/IonConstraint.h b/src/model/IonConstraint.h
new file mode 100644
index 0000000..60b92b0
--- /dev/null
+++ b/src/model/IonConstraint.h
@@ -0,0 +1,214 @@
+/**
+ * \file IonConstraint.h 
+ * AUTHOR: Chris Park
+ * CREATE DATE: 28 June 2006
+ * \brief Object for defining constraints on an ion series.
+ *****************************************************************************/
+#ifndef IONCONSTRAINT_H
+#define IONCONSTRAINT_H
+
+#include "model/objects.h"
+
+#include "IonSeries.h"
+#include "Ion.h"
+
+/**
+ * \class ion_constraint
+ * \brief An object to represent the contraints which the ions in this
+ * series obey.
+ */
+class IonConstraint {
+ protected:
+  bool use_neutral_losses_; ///< Should ions include neutral losses
+  int modifications_[MAX_MODIFICATIONS]; 
+    ///< an array to indicate which modifications to perform
+  MASS_TYPE_T mass_type_; 
+    ///< the mass_type to use MONO|AVERAGE
+  int max_charge_; 
+    ///< maximum charge of the ions, cannot exceed the parent peptide's charge
+  ION_TYPE_T ion_type_; 
+    ///< the ion types the peptide series should include
+    
+  bool ion_types_[NUMBER_ION_TYPES];  
+  bool precursor_ion_; 
+    ///< does a precursor-ion satisfy this constraint
+  int min_charge_; 
+  bool exact_modifications_; 
+    ///< TRUE  = ints in modfications array indicate exact number of mods
+    ///< FALSE = ints in modfications array indicate maximum number of mods
+  unsigned int pointer_count_; ///< Number of pointers referencing me 
+
+  /**
+   *Initializes an IonConstraint object, called from constructor 
+   */
+  void init();
+
+ public:
+
+  /**
+   *\returns an empty heap allocated ion_constraint
+   */
+
+  IonConstraint();
+
+  /**
+   * modification, all modifications 0
+   * add more modifications as needed using the set_ion_constraint_modification
+   *\returns a new heap allocated ion_constraint
+   */
+  IonConstraint(
+    MASS_TYPE_T mass_type, ///< the mass_type to use MONO|AVERAGE
+    int max_charge, ///< the maximum charge of the ions, cannot exceed the parent peptide's charge
+    ION_TYPE_T ion_type, ///< the ion types the peptide series should include
+    bool precursor_ion  ///< should include precursor ion?
+  );
+
+  /**
+   * \brief Create a new ion constraint based on the score type and the
+   * charge of the peptide to be modeled.  Uses other
+     * new_ion_constraint_ methods for some types.
+   *
+   * \returns A newly allocated ion constraint.
+   */
+  static IonConstraint* newIonConstraintSmart(
+    SCORER_TYPE_T score_type,
+    int charge
+    );
+
+  /**
+   * modification, sets all fields for sequest settings
+   *\returns a new heap allocated ion_constraint
+   */
+  static IonConstraint* newIonConstraintSequest(
+    MASS_TYPE_T mass_type, ///< the mass_type to use MONO|AVERAGE
+    int max_charge, ///< the maximum charge of the ions, cannot exceed the parent peptide's charge
+    ION_TYPE_T ion_type, ///< the ion types the peptide series should include
+    bool precursor_ion ///< should include precursor ion?
+    );
+
+  /**
+   * modification, sets all fields for GMTK settings
+   *\returns a new heap allocated ion_constraint
+   */
+  static IonConstraint* newIonConstraintGmtk(
+    int charge ///< the charge of the peptide for which to predict ions
+  );
+
+  /**
+   * modification, sets all fields for sequest Sp scoring settings
+   *\returns a new heap allocated ion_constraint
+   */
+  static IonConstraint* newIonConstraintSequestSp(
+    int max_charge ///< the maximum charge of the ions, cannot exceed the parent peptide's charge
+    );
+
+  /**
+   * modification, sets all fields for Sequest Xcorr scoring settings
+   * make B, Y, A type ions
+   *\returns a new heap allocated ion_constraint
+   */
+  static IonConstraint* newIonConstraintSequestXcorr(
+    int charge ///< the maximum charge of the ions, cannot exceed the parent peptide's charge
+    );
+
+  /**
+   * Frees an allocated ion_constraint object.
+   */
+  static void free(IonConstraint* ion_constraint);
+
+  virtual ~IonConstraint();
+
+  /**
+   * copies the ion_constraint pointer
+   */
+  static IonConstraint* copy(
+    IonConstraint* ion_constraint
+  );
+
+  /**
+   * copies ion_constraint object from src to dest
+   * must pass in a memory allocated ION_CONSTRAINT_T dest
+   */
+  static void copy(
+    IonConstraint* src,///< ion_constraint to copy from -in
+    IonConstraint* dest///< ion_constraint to copy to -out
+    );
+
+  /** 
+   * Determines if a ion satisfies a ion_constraint.
+   * \returns TRUE if the constraint is satisified. FALSE if not.
+   */
+  bool isSatisfied(
+    Ion* ion ///< query ion -in
+    );
+
+  /**
+   * \returns ION_TYPE for this constraint
+   */
+  //ION_TYPE_T getIonType();
+
+  void setUseIonType(
+    ION_TYPE_T ion_type,
+    bool val
+  );
+  
+  bool getUseIonType(
+    ION_TYPE_T ion_type
+  );
+
+  /**
+   * Sets the modification count
+   * can only add isotopes
+   */
+  void setModification(
+    ION_MODIFICATION_T mod_type, ///< ion modification type -in
+    int count  ///< the count of the modification -in  
+    );
+
+  /**
+   * Sets the exact modification boolean to exactness criteria
+   * and if exactness is true sets min_charge = max_charge.
+   * In other words, the constraint is now exact, in that it refers to a
+   * particular ion series, charge states, and modification state, as opposed
+   * to e.g. b-ions of charge state +1 or +2, or with or without NH3 loss
+   */
+  void setExactness(
+    bool exactness ///< whether to be exact or not -in
+    );
+
+  /**
+   * gets the modification count for specific mod_type
+   */
+  int getModification(
+    ION_MODIFICATION_T mod_type ///< ion modification type -in
+    );
+
+  int* getModifications();
+
+  /**
+   * gets the mass type of the ion_constraint
+   */
+  MASS_TYPE_T getMassType();
+
+  /**
+   * get the maximum charge of the IonConstraint
+   */
+  int getMaxCharge();
+
+
+  bool getPrecursorIon();
+
+  /**
+   * get the neutral loss field of the ion constraint.
+   */
+  bool getUseNeutralLosses();
+
+};
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif
diff --git a/src/model/IonFilteredIterator.cpp b/src/model/IonFilteredIterator.cpp
new file mode 100644
index 0000000..16a7bfc
--- /dev/null
+++ b/src/model/IonFilteredIterator.cpp
@@ -0,0 +1,108 @@
+/**
+ * \file IonFilteredIterator.cpp 
+ * \brief An object to iterate over ion objects that meet constraints
+ * in the IonSeries.
+ *****************************************************************************/
+#include "IonFilteredIterator.h"
+
+/**
+ * sets up the iterator for next iteration.
+ * 
+ *\returns true if successfully sets up the ion_filtered_iterator for next iteration
+ */
+bool IonFilteredIterator::setup()
+{
+  bool found = false;
+  Ion* current_ion = NULL;
+
+  // iterate over ions until discovers the first ion that meets the ion constraint
+  while((!found) && (ion_iterator_ != ion_iterator_end_)){
+    // get next ion
+    current_ion = *ion_iterator_;
+    
+    // check if the current ion satisfies the ion_constraint for the iterator
+    if(constraint_->isSatisfied(current_ion)){
+      found = true;
+      ion_ = current_ion;
+    }
+    ++ion_iterator_;
+  }
+  
+  has_next_ = found;
+
+  return true;
+}
+
+/**
+ * Only copies in the constraint as pointer
+ * Instantiates a new ion_filtered_iterator object from ion_series.
+ * \returns a IonFilteredIterator object.
+ */
+IonFilteredIterator::IonFilteredIterator(
+  IonSeries* ion_series, ///< ion_series to iterate -in
+  IonConstraint* constraint  ///< ion_constraint which returned ions satisfy
+  )
+{
+
+  
+  // set constraint, ion_series
+  constraint_ = constraint;
+  ion_series_ = ion_series;
+  has_next_ = false;
+
+  // set the working array of ions
+  if(constraint_->getUseIonType(ALL_ION) ||
+     constraint_->getUseIonType(BY_ION) ||
+     constraint_->getUseIonType(BYA_ION)) {
+
+    ion_iterator_ = ion_series->begin();
+    ion_iterator_end_ = ion_series->end();
+  }
+  else{
+    carp(CARP_FATAL, "DEPRECATED/FIX!");
+    //ion_iterator_ = ion_series->getSpecificIons(constraint->getIonType()).begin();
+    //ion_iterator_end_ = ion_series->getSpecificIons(constraint->getIonType()).end();
+  }
+  
+  // initialize iterator
+  setup();
+
+}        
+
+/**
+ * The constraint is NOT freed from the iterator.
+ * Frees an allocated ion_filtered_iterator object.
+ */
+IonFilteredIterator::~IonFilteredIterator() 
+{
+
+}
+
+/**
+ * The basic iterator function has_next.
+ */
+bool IonFilteredIterator::hasNext()
+{
+  return has_next_;
+}
+
+/**
+ * The basic iterator function next.
+ */
+Ion* IonFilteredIterator::next()
+{
+
+  Ion* next_ion = NULL;
+  
+  // check if a ion is present to return
+  if(!has_next_){
+    carp(CARP_FATAL, "index out of bounds for ion_filtered_iterator");
+  }
+  
+  next_ion = ion_;
+  
+  // re-initialize iterator
+  setup();
+
+  return next_ion;
+}
diff --git a/src/model/IonFilteredIterator.h b/src/model/IonFilteredIterator.h
new file mode 100644
index 0000000..078a625
--- /dev/null
+++ b/src/model/IonFilteredIterator.h
@@ -0,0 +1,70 @@
+/**
+ * \file IonFilteredIterator.h
+ ****************************************************************************/
+#ifndef IONFILTEREDITERATOR_H
+#define IONFILTEREDITERATOR_H
+
+#include "IonSeries.h"
+#include "IonConstraint.h"
+
+
+/**
+ * \class ion_filtered_iterator
+ * \brief An object to iterate over ion objects that meet constraint in
+ * the ion_series 
+ */
+class IonFilteredIterator{
+ protected:
+  IonSeries* ion_series_; ///< the ion series that the ion we are iterating
+  IonConstraint* constraint_; ///< constraints which the ions obey
+  bool has_next_; ///< the boolean which the iterator has a next ion
+  int ion_idx_; ///< the current ion that is being returned 
+  Ion* ion_; ///< the next ion to return when called upon
+
+  IonIterator ion_iterator_;
+  IonIterator ion_iterator_end_;
+  /**
+   * sets up the iterator for next iteration.
+   * 
+   *\returns true if successfully sets up the ion_filtered_iterator for next iteration
+   */
+  bool setup();
+
+ public:
+
+  /**
+   * Only copies in the constraint as pointer
+   * Instantiates a new ion_filtered_iterator object from ion_series.
+   * \returns an IonFilteredIterator object.
+   */
+  IonFilteredIterator(
+    IonSeries* ion_series, ///< ion_series to iterate -in
+    IonConstraint* constraint  ///< ion_constraint which returned ions satisfy
+    );
+    
+  /**
+   * The constraint is NOT freed from the iterator.
+   * Frees an allocated ion_filtered_iterator object.
+   */
+  virtual ~IonFilteredIterator();
+
+  /**
+   * The basic iterator function has_next.
+   */
+  bool hasNext();
+  
+  /**
+   * The basic iterator function next.
+   */
+  Ion* next();
+
+};
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif
diff --git a/src/model/IonSeries.cpp b/src/model/IonSeries.cpp
new file mode 100644
index 0000000..6a621b6
--- /dev/null
+++ b/src/model/IonSeries.cpp
@@ -0,0 +1,1231 @@
+/*************************************************************************//**
+ * \file ion_series.cpp
+ * AUTHOR: Chris Park
+ * CREATE DATE: 21 Sep 2006
+ * \brief code to support working with a series of ions
+ ****************************************************************************/
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#include "Ion.h"
+#include "IonSeries.h"
+#include "util/Params.h"
+#include "util/utils.h"
+#include "util/crux-utils.h"
+#include "parameter.h"
+#include "Peptide.h"
+#include "util/mass.h"
+#include "util/GlobalParams.h"
+#include "IonFilteredIterator.h"
+#include "Spectrum.h"
+
+#include <stack>
+
+using namespace Crux;
+
+static const int BINARY_GMTK = 1;
+static const int PRINT_NULL_IONS = 1;
+static const int MIN_FRAMES = 3;
+
+FLOAT_T* IonSeries::mass_matrix_ = NULL;
+
+
+/**
+ * \struct loss_limit
+ * \brief An object that specifies the max amount of neutral loss
+ * possible at a given cleavage index. 
+ * All numbers are for forward ions(A,B,C) subtract from total to get
+ * reverse limit.
+ */
+struct loss_limit{
+  int nh3; ///< the limit to how many NH3 may be lost
+  int h2o; ///< the limit to how many H2O may be lost
+  // add more if needed for other neutral loss
+  // If change this struct, must also modify update_ion_series method
+};
+
+
+//Test cache for speeding up loss limit allocations
+class LossLimitCache {
+ protected:
+  stack<LOSS_LIMIT_T*> cache_;
+ public:
+  LossLimitCache() {
+  }
+
+  ~LossLimitCache() {
+    while(!cache_.empty()) {
+      LOSS_LIMIT_T *element = cache_.top();
+      cache_.pop();
+      delete []element;
+    }
+  }
+
+  LOSS_LIMIT_T* checkout() {
+    LOSS_LIMIT_T* new_element;
+    if (cache_.empty()) {
+      new_element = new LOSS_LIMIT_T[GlobalParams::getMaxLength()];
+    } else {
+      new_element = cache_.top();
+      cache_.pop();
+    }
+    return (new_element);
+  }
+  void checkin(LOSS_LIMIT_T* array) {
+    cache_.push(array);
+  }
+
+};
+
+static LossLimitCache loss_limit_cache;
+
+
+
+
+/**
+ * Initializes an (empty) ion_series object, only called by constructors.
+ */
+void IonSeries::init() {
+
+  peptide_.clear();
+  modified_aa_seq_ = NULL;
+  modified_aa_seq_owner_ = false;
+  charge_ = 0;
+  constraint_ = NULL;
+  is_predicted_ = false;
+  pointer_count_ = 1;
+  loss_limit_ = NULL;
+  peptide_length_ = 0;
+}
+
+/**
+ * \returns An (empty) ion_series object.
+ */
+IonSeries::IonSeries() {
+  init();
+}
+
+/**
+ * \brief Creates an ion series for a specific peptide, charge state,
+ * and constraint without acutally predicting the ions.
+ *
+ * Creates a copy of the peptide sequence and calcualtes the peptide
+ * mass.
+ * Use this method to create ion_series only when few are needed
+ * because the memory allocation process is expensive.  Alternatively,
+ * use "new_ion_series_generic" and "update_ion_series" in combination
+ * to reuse an ion_seires object.
+ * \returns A newly allocated ion_series object from the given
+ * peptide, charge, and constraint.
+ */
+IonSeries::IonSeries(
+  const string& peptide, ///< The peptide for this ion series. -in
+  int charge, ///< The charge for this ion series -in
+  IonConstraint* constraint ///< constraints which these ions obey.
+  )
+{
+
+  init();
+  // copy the peptide sequence
+  peptide_ = peptide;
+  convert_to_mod_aa_seq(peptide_, &(modified_aa_seq_));
+  modified_aa_seq_owner_ = true;
+  charge_ = charge;
+  constraint_ = constraint;
+  peptide_length_ = peptide_.length();
+  
+  // create the loss limit array
+  loss_limit_ = loss_limit_cache.checkout();
+  //loss_limit_ = new LOSS_LIMIT_T[GlobalParams::getMaxLength()];
+  memset(loss_limit_, 0, sizeof(LOSS_LIMIT_T) * peptide_length_);
+}
+
+/**
+ * \brief Creates an ion_series object without a specific peptide.
+ * Peptide details are added with the "update_ion_series" method.
+ * \returns A newly allocated ion_series object that must be updated
+ * for each peptide instance.
+ */
+IonSeries::IonSeries(
+  IonConstraint* constraint, ///< constraints which these ions obey.
+  int charge ///< The charge for this ion series -in
+  ) {
+
+  init();
+  constraint_ = constraint;
+  charge_ = charge;
+  loss_limit_ = loss_limit_cache.checkout();
+  //loss_limit_ = new LOSS_LIMIT_T[GlobalParams::getMaxLength()];
+}
+
+/**
+ * \brief Updates an ion_series to a specific instance of a peptide
+ * sequence. If the ion_series has already generated ions, they will
+ * be free-ed. A copy of the peptide sequence is made and all other
+ * variables (except ion_constraint) are also updated for the new
+ * peptide sequence. 
+ */
+void IonSeries::update(
+  const char* peptide, ///< The peptide sequence with no mod characters. -in
+  const MODIFIED_AA_T* mod_seq ///< modified version of char* sequence -in
+  ) 
+{
+  int ion_type_idx = 0;
+
+  // Initialize the ion_series object for the new peptide sequence
+  
+  // free old peptide sequence
+  
+  if(modified_aa_seq_owner_ && modified_aa_seq_){
+    freeModSeq(modified_aa_seq_);
+    modified_aa_seq_owner_ = false;
+  }
+  
+  // iterate over all ions, and free them
+  for (unsigned int idx=0;idx<ions_.size();idx++) {
+    Ion::freeIon(ions_[idx]);
+  }
+  ions_.clear();
+  
+  // initialize all specific_ions back to 0
+  int ion_idx;
+
+  for(ion_idx=0; ion_type_idx < MAX_NUM_ION_TYPE; ++ion_type_idx){
+    specific_ions_[ion_type_idx].clear();
+  }
+
+  is_predicted_ = false;
+  
+  // set ion_series for new instance of peptide
+  
+  // copy the peptide sequence
+  peptide_ = peptide;
+  peptide_length_ = peptide_.length();
+
+  modified_aa_seq_ = (MODIFIED_AA_T*)mod_seq;
+
+  // Initialize the loss limit array for the new peptide
+  //carp(CARP_INFO, "loss_limit_:%d peptide_length:%d", loss_limit_, peptide_length_);
+  memset(loss_limit_, 0, sizeof(LOSS_LIMIT_T) * peptide_length_);
+}
+
+int IonSeries::incrementPointerCount() {
+  pointer_count_++;
+  return (pointer_count_);
+}
+
+void IonSeries::freeIonSeries(IonSeries* ions) {
+
+  ions->pointer_count_--;
+  if (ions->pointer_count_ <= 0) {
+    delete ions;
+  }
+}
+
+void IonSeries::clear() {
+  for (unsigned int idx=0;idx<ions_.size();idx++) {
+    Ion::freeIon(ions_[idx]);
+  }
+  ions_.clear();
+
+  // initialize all specific_ions back to 0
+  for(size_t ion_type_idx=0; ion_type_idx < MAX_NUM_ION_TYPE; ++ion_type_idx){
+    specific_ions_[ion_type_idx].clear();
+  }
+}
+/**
+ * Frees an allocated ion_series object.
+ */
+IonSeries::~IonSeries()
+{
+  if(modified_aa_seq_owner_ && modified_aa_seq_){
+    freeModSeq(modified_aa_seq_);
+  }
+  if(loss_limit_){
+    loss_limit_cache.checkin(loss_limit_);
+  }
+  // free constraint?
+
+  // iterate over all ions, and free them
+
+  for (unsigned int idx=0;idx<ions_.size();idx++) {
+    Ion::freeIon(ions_[idx]);
+  }
+  ions_.clear();
+
+}
+
+void IonSeries::finalize() {
+  delete []mass_matrix_;
+
+}
+
+
+/**
+ * Iterator access
+ */
+IonIterator IonSeries::begin() {
+  return ions_.begin();
+}
+
+IonIterator IonSeries::end() {
+  return ions_.end();
+}
+
+/**
+ * Prints a ion_series object to file.
+ */
+void IonSeries::print(
+  FILE* file ///< file for output -out
+  )
+{
+  // check if the ions has been already predicted
+  if(!is_predicted_){
+    carp(CARP_ERROR, "ion series has not predicted ions");
+    return;
+  }
+  
+  // print header
+  fprintf(file, "m/z\tmass\tcharge\tion-series\tpeptide-bond-index\tnh3\th2o\tisotope\tflank\n");
+  
+  
+  // print each ion in the ion series
+  unsigned int ion_idx;
+  for(ion_idx=0; ion_idx < ions_.size(); ++ion_idx){
+    ions_[ion_idx]->print(file);
+  }
+}
+
+/**
+ * Prints a ion_series object to file, in GMTK single-ion format.
+ */
+void IonSeries::printSingleGmtk(
+  IonConstraint* ion_constraint, ///< ion_constraint to obey -in 
+  FILE* file,                       ///< file output
+  int sentence_idx){
+
+  // create the filtered iterator that will select among the ions
+  IonFilteredIterator ion_iterator(this, ion_constraint);
+  
+  // foreach ion in ion iterator, add matched observed peak intensity
+  Ion* ion;
+  int frame_idx = 0;
+  while(ion_iterator.hasNext()) {
+    ion = ion_iterator.next();
+    
+#ifdef BINARY_GMTK
+    ion->printGmtkSingleBinary(file, sentence_idx, frame_idx);
+#else
+    ion->printGmtkSingle(file);
+    sentence_idx++; // hack to avoid error for not using sentence_idx
+#endif
+    frame_idx++;
+  }
+  
+  // print a null ion if there are none in this ion series
+#ifdef PRINT_NULL_IONS
+  for (; frame_idx < MIN_FRAMES; frame_idx++){
+#ifdef BINARY_GMTK
+    print_null_ion_gmtk_single_binary(file, sentence_idx, frame_idx);
+#else
+    print_null_ion_gmtk_single(file);
+    sentence_idx++; // hack to avoid error for not using sentence_idx
+#endif
+  }
+#endif
+
+}
+
+/**
+ * Prints a ion_series object to file, in GMTK paired-ion format.
+ */
+void IonSeries::printPairedGmtk(
+  IonConstraint* first_ion_constraint, ///< ion_constraint to obey -in 
+  IonConstraint* second_ion_constraint, ///< ion_constraint to obey -in 
+  FILE* file, ///< file output
+  int sentence_idx
+  )
+{
+  
+  // create the filtered iterator that will select among the ions
+  IonFilteredIterator ion_iterator(this, first_ion_constraint);
+  
+  // foreach ion in ion iterator, add matched observed peak intensity
+  int frame_idx = 0;
+  while(ion_iterator.hasNext()){
+    Ion* first_ion = ion_iterator.next();
+    int cleavage_idx = first_ion->getCleavageIdx();
+    Ion* second_ion = this->getIon(second_ion_constraint, cleavage_idx);
+    if ( (first_ion == NULL) || (second_ion == NULL) ){
+      continue;
+      }
+    Ion::printGmtkPairedBinary(
+                                 first_ion, 
+                                 second_ion, 
+                                 file,
+                                 sentence_idx,
+                                 frame_idx++);
+  }
+  
+#ifdef PRINT_NULL_IONS
+  for (; frame_idx < MIN_FRAMES; frame_idx++){
+    print_null_ion_gmtk_paired_binary(file, sentence_idx, frame_idx);
+  }
+#endif
+
+}
+
+
+/**
+ * \brief Find instances of amino acid which can incur neutral
+ * losses: H2O (S|T|E|D), NH3(R|K|Q|N).  
+ * Set the count of those observed so far for each cleavage index.
+ * If no instance of amino acid, the count is assigned to 0
+ * The information is used to determine if how many nh3 or h2o neutral
+ * losses are possible. 
+ */
+void IonSeries::scanForAAForNeutralLoss()
+{
+  int peptide_length = peptide_length_;
+  string sequence = peptide_;
+
+  // make sure loss_limit array is the right size
+  if (peptide_length_ != sequence.length()){
+    memset(loss_limit_, 0, sizeof(LOSS_LIMIT_T) * peptide_length_);
+  }
+
+  int h2o_aa = 0;
+  int nh3_aa = 0;
+
+  // search for the first instance of the amino acids
+  int cleavage_idx;
+  for(cleavage_idx=0; cleavage_idx < peptide_length; ++cleavage_idx){
+    LOSS_LIMIT_T* loss_limit_count = &loss_limit_[cleavage_idx];
+    // is the AA  (S|T|E|D) ?
+    if(sequence[cleavage_idx] == 'S' ||
+       sequence[cleavage_idx] == 'T' ||
+       sequence[cleavage_idx] == 'E' ||
+       sequence[cleavage_idx] == 'D' )
+      {
+        loss_limit_count->h2o = ++h2o_aa;
+        loss_limit_count->nh3 = nh3_aa;
+      }
+    // is the AA  (R|K|Q|N) ?
+    else if(sequence[cleavage_idx] == 'R' ||
+            sequence[cleavage_idx] == 'K' ||
+            sequence[cleavage_idx] == 'Q' ||
+            sequence[cleavage_idx] == 'N' )
+      {
+        loss_limit_count->nh3 = ++nh3_aa;
+        loss_limit_count->h2o = h2o_aa;
+      }
+    else{
+      loss_limit_count->h2o = h2o_aa;
+      loss_limit_count->nh3 = nh3_aa;
+    }
+  }
+
+}
+
+/**
+ * \brief Creates an array in which element i is the sum of the masses
+ * of amino acids 0 to (i-1).  At i=0 is stored the length of the
+ * peptide.  
+ * \returns an array of ion masses for all sub sequences
+ */
+FLOAT_T* IonSeries::createIonMassMatrix(
+  //char* peptide, ///< The peptide for this ion series. -in
+  MODIFIED_AA_T* modified_seq, ///< the sequence
+  MASS_TYPE_T mass_type, ///< the mass_type to use MONO|AVERAGE
+  int peptide_length ///< the length of the peptide
+  )
+{
+  if( modified_seq == NULL ){
+  //if( peptide == NULL ){
+    carp(CARP_ERROR, "Cannot create mass matrix from NULL seqence");
+    return NULL;
+  }
+
+  if (mass_matrix_ == NULL) {
+    //Allocate the static mass_matrix_
+    mass_matrix_ = new FLOAT_T[sizeof(FLOAT_T)*(GlobalParams::getMaxLength()+1)];
+  }
+
+  FLOAT_T* mass_matrix = mass_matrix_;
+  
+  // at index 0, the length of the peptide is stored
+  mass_matrix[0] = peptide_length;
+
+  // add up AA masses
+  int ion_idx = 1;
+  // initialize first to be mass of c-term amino acid
+  // mass_matrix[ion_idx] = get_mass_amino_acid(peptide[ion_idx-1], mass_type);
+  mass_matrix[ion_idx] = get_mass_mod_amino_acid(modified_seq[ion_idx-1], mass_type);
+  //++ion_idx;
+  //for(; ion_idx <= peptide_length; ++ion_idx){
+  for(ion_idx = 2; ion_idx <= peptide_length; ++ion_idx){
+    mass_matrix[ion_idx] = mass_matrix[ion_idx-1] + 
+      get_mass_mod_amino_acid(modified_seq[ion_idx-1], mass_type);
+      //get_mass_amino_acid(peptide[ion_idx-1], mass_type);
+  }
+  // DEBUGGING
+  /*
+  fprintf(stderr, "seq:");
+  for(ion_idx = 0; ion_idx < peptide_length; ++ion_idx){
+    fprintf(stderr, "\t%s", modified_aa_to_string(modified_seq[ion_idx]));
+  }
+  fprintf(stderr, "\nmas:");
+  for(ion_idx = 0; ion_idx < peptide_length; ++ion_idx){
+    fprintf(stderr, "\t%.2f", get_mass_mod_amino_acid(modified_seq[ion_idx], MONO));
+  }
+  fprintf(stderr, "\nsum:");
+  for(ion_idx = 0; ion_idx < peptide_length; ++ion_idx){
+    fprintf(stderr, "\t%.2f", mass_matrix[ion_idx+1]);
+  }
+  fprintf(stderr, "\n");
+  */
+  return mass_matrix;
+}
+
+/**
+ * user must ensure that there is enough space for this ion
+ * adds ion to ion_series' master ion_array and if B|Y ion to the specific ion_array
+ */
+void IonSeries::addIon(
+  Ion* ion ///< ion to add -in
+  )
+{
+  // add ion to ion series
+  ions_.push_back(ion);
+  
+  // increment the pointer
+  ion->incrementPointerCount();
+
+  // add a pointer of ion to the specific ion_type array
+  specific_ions_[ion->getType()].push_back(ion);
+}
+
+/**
+ * helper function: add_ions
+ * add all the ions to ion_series up to the max charge
+ *\returns true if successfully adds all ions, else false
+ */
+bool IonSeries::addIonsByCharge(
+  FLOAT_T mass, ///< the base mass of the ion to add
+  int cleavage_idx, ///< the absolute cleavage index (A,B,C from left X,Y,Z from right)
+  ION_TYPE_T ion_type ///< the ion type of the ions to be added
+  )
+{
+  IonConstraint* constraint = constraint_;
+  int charge_idx = 1;
+  Ion* ion = NULL;
+  int max_charge;
+  
+  // set the max charge, the maximum cannot exceed the precursor ion's charge
+  if(constraint->getMaxCharge() > charge_){
+    max_charge = charge_;
+  }
+  else{
+    max_charge = constraint->getMaxCharge();
+  }
+
+  // iterate over all different charge
+  for(; charge_idx <= max_charge; ++charge_idx){
+    // create ion
+    ion = Ion::newIon();
+    ion->init(ion_type, 
+              cleavage_idx, 
+              charge_idx, 
+              peptide_, 
+              constraint->getMassType(), 
+              mass); 
+    // add ion to ion series
+    this->addIon(ion);
+  }
+  
+  return true;
+}
+
+/**
+ * Creates all the ions with no modifications up to the max charge
+ * Adds each ion to ion_series
+ *\returns true if successfully generates all the ions, else false
+ */
+bool IonSeries::generateIonsNoModification(
+  FLOAT_T* mass_matrix ///< the mass matrix that stores the mass
+  )
+{
+  if( mass_matrix == NULL ){
+    carp(CARP_ERROR,
+         "Cannot generate ions from NULL mass matrix");
+    return false;
+  }
+  int cleavage_idx = 1;
+  IonConstraint* constraint = constraint_;
+  FLOAT_T mass = 0;
+
+  // get peptide length
+  int peptide_length = (int)mass_matrix[0];
+
+  // iterate over all cleavage index
+  for(; cleavage_idx < peptide_length; ++cleavage_idx){
+    
+    // add A ion
+    if(constraint->getUseIonType(A_ION) 
+       || constraint->getUseIonType(BYA_ION) 
+       || constraint->getUseIonType(ALL_ION)){
+
+      // set mass
+      mass = mass_matrix[cleavage_idx];
+      
+      if(constraint->getMassType() == MONO){
+        mass -= MASS_CO_MONO; 
+      }
+      else{ // average
+        mass -= MASS_CO_AVERAGE; 
+      }
+
+      // add ions up to max charge
+      if(!this->addIonsByCharge(mass, cleavage_idx, A_ION)){
+        carp(CARP_ERROR, "failed to add ions by different charge for A ion");
+      return false;
+      }
+    }
+    
+    // add B ion
+    if(constraint->getUseIonType(ALL_ION) 
+       || constraint->getUseIonType(BY_ION)
+       || constraint->getUseIonType(BYA_ION)
+       || constraint->getUseIonType(B_ION)){
+      
+      // set mass
+      mass = mass_matrix[cleavage_idx];
+
+      // add ions up to max charge
+      if(!this->addIonsByCharge(mass, cleavage_idx, B_ION)){
+        carp(CARP_ERROR, "failed to add ions by different charge for B ion");
+        return false;
+      }
+
+    }
+    
+    // add C ion
+    if(constraint->getUseIonType(C_ION)
+       || constraint->getUseIonType(ALL_ION)){
+      // set mass
+      mass = mass_matrix[cleavage_idx];
+      
+      if(constraint->getMassType() == MONO){
+        mass += MASS_NH3_MONO; 
+      }
+      else{ // average
+        mass += MASS_NH3_AVERAGE; 
+      }
+      
+      // add ions up to max charge
+      if(!this->addIonsByCharge(mass, cleavage_idx, C_ION)){
+        carp(CARP_ERROR, "failed to add ions by different charge for C ion");
+        return false;
+      }
+    }
+    
+    // add X ion
+    if(constraint->getUseIonType(X_ION)
+       || constraint->getUseIonType(ALL_ION)){
+      // set mass 
+      mass = mass_matrix[(int)mass_matrix[0]] - mass_matrix[(int)mass_matrix[0] - cleavage_idx];
+
+      if(constraint->getMassType() == MONO){
+        mass += MASS_CO_MONO + MASS_H2O_MONO;     
+      }
+      else{ // average
+        mass += MASS_CO_AVERAGE + MASS_H2O_AVERAGE; 
+      }
+      
+      // add ions up to max charge
+      if(!this->addIonsByCharge(mass, cleavage_idx, X_ION)){
+        carp(CARP_ERROR, "failed to add ions by different charge for X ion");
+        return false;
+      }
+    }
+    
+    // add Y ion
+    if(constraint->getUseIonType(ALL_ION) || 
+       constraint->getUseIonType(BY_ION) ||
+       constraint->getUseIonType(BYA_ION) ||
+       constraint->getUseIonType(Y_ION)){
+
+      // set mass 
+      mass = mass_matrix[(int)mass_matrix[0]] - mass_matrix[(int)mass_matrix[0] - cleavage_idx];
+      
+      if(constraint->getMassType() == MONO){
+        mass += MASS_H2O_MONO; 
+      }
+      else{ // average
+        mass += MASS_H2O_AVERAGE;
+      }
+
+      // add ions up to max charge
+      if(!this->addIonsByCharge(mass, cleavage_idx, Y_ION)){
+        carp(CARP_ERROR, "failed to add ions by different charge Y ion");
+        return false;
+      }
+      
+    }
+    
+    // add Z ion
+    if(constraint->getUseIonType(Z_ION) ||
+       constraint->getUseIonType(ALL_ION) ){
+
+      // set mass 
+      mass = mass_matrix[(int)mass_matrix[0]] - mass_matrix[(int)mass_matrix[0] - cleavage_idx];
+      
+      if(constraint->getMassType() == MONO){
+        mass = mass - MASS_NH3_MONO + MASS_H2O_MONO; 
+      }
+      else{ // average
+        mass = mass - MASS_NH3_AVERAGE + MASS_H2O_AVERAGE;
+      }
+      
+      // add ions up to max charge
+      if(!this->addIonsByCharge(mass, cleavage_idx, Z_ION)){
+        carp(CARP_ERROR, "failed to add ions by different charge Z ion");
+        return false;
+      }
+    }
+  }
+
+  // add P ion(precursor ion)?
+  if(constraint_->getPrecursorIon()){
+    
+    // set mass 
+    mass = mass_matrix[(int)mass_matrix[0]];
+    
+    // mass type
+    if(constraint->getMassType() == MONO){
+      mass += MASS_H2O_MONO; 
+    }
+    else{ // average
+      mass += MASS_H2O_AVERAGE;
+    }
+    
+    // add ions up to max charge
+    if(!addIonsByCharge(mass, (int)mass_matrix[0], P_ION)){
+      carp(CARP_ERROR, "failed to add ions by different charge P ion");
+      return false;
+    }
+  }
+
+  return true;
+}
+
+/**
+ * The modification depends on the loss/add && if the ion contains RKQN or STED
+ * The number of losses possible cannot exceed the number of RKQN or STED in the ion
+ * The loss_limit array in the ion_series must be populated prior to this method call
+ *\returns true if the ion can lose the mod_type modification, else false
+ */
+bool IonSeries::canIonGenerateModification(
+  Ion* ion, ///< the ion to check if can lose nh3 -in
+  ION_MODIFICATION_T mod_type, ///< generate ions of this modification_type -in/out
+  int increment  ///< the add/loss of the modification
+  )
+{
+
+  //Make sure that an ion can have 0 or 1 modifications.
+  if (ion->getTotalModificationCount() == 1) {
+    return false;
+  }
+  
+
+  int cleavage_idx = ion->getCleavageIdx();
+
+  // check for NH3 modification
+  if(mod_type == NH3){
+    // adding is ok
+    if(increment >= 0){
+      return true;
+    }
+    
+    // is forward ion_type(ABC)?
+    if(ion->isForwardType()){
+      // does this ion contain enough counts of the RKQN
+      if(-increment >  (&loss_limit_[cleavage_idx-1])->nh3){
+        return false;
+      }
+      return true;
+    }
+    else{// backward ions XYZ
+      // does this ion contain enough counts of the RKQN
+      if(cleavage_idx == peptide_length_){
+        if(-increment > (&loss_limit_[peptide_length_-1])->nh3){
+          return false;
+        }
+      }
+      else if(-increment >  
+              ((&loss_limit_[peptide_length_-1])->nh3 - 
+               (&loss_limit_[peptide_length_ - cleavage_idx - 1])->nh3)){
+        return false;
+      }
+      return true;
+    }
+  }
+
+  // check for H2O modification
+  if(mod_type == H2O){
+    // adding is ok
+    if(increment >= 0){
+      return true;
+    }
+    
+    // is forward ion_type(ABC)?
+    if(ion->isForwardType()){
+      // does this ion contain enough counts of the STED
+      if(-increment >  (&loss_limit_[cleavage_idx-1])->h2o){
+        return false;
+      }
+      return true;
+    }
+    else{// backward ions XYZ
+      // does this ion contain enough counts of the STED
+      if(cleavage_idx == peptide_length_){
+        if(-increment > (&loss_limit_[peptide_length_-1])->h2o){
+          return false;
+        }
+      }
+      else if(-increment >  
+              ((&loss_limit_[peptide_length_-1])->h2o - 
+               (&loss_limit_[peptide_length_ - cleavage_idx - 1])->h2o)){
+        return false;
+      }
+      return true;
+    }
+  }
+  
+  // check for ISOTOPE modification
+  else if(mod_type == ISOTOPE){
+    // adding is ok
+    if(increment >= 0 && ion->getType() != P_ION){
+      return true;
+    }
+    // add more constraint if needed
+  }
+  // check for FLANK modification
+  else if(mod_type == FLANK){
+    // only add flanking ions to type B,Y ions
+    if(ion->getType() == B_ION || ion->getType() == Y_ION){
+      // only add ions with no modifications
+      if(!ion->isModified()){
+        return true;
+      }
+    }
+  }
+  
+  return false;
+}
+
+/**
+ * creates all the ions with specific modifications up to the max charge
+ * copies all the existing ions that can be modified,
+ * then applies the different modifications then adds the new modified ions to ion_series
+ *\returns true if successfully generates all the ions with modifications, else false
+ */
+bool IonSeries::generateIons(
+  ION_MODIFICATION_T mod_type ///< generate ions of this modification_type -in/out
+  )
+{
+  int ion_idx = 0;
+  int total_ion = ions_.size();
+  Ion* working_ion = NULL;
+  Ion* new_ion = NULL;
+  int* modifications = constraint_->getModifications();
+
+  // modification index
+  int type_idx = 0;
+  int type_increment = 1;
+
+  // reset modification increment, if mod_type loss
+  if(modifications[mod_type] < 0){
+    type_increment = -1;
+  }
+  
+  // iterate over all the ions to determine which ones should be copies and modified
+  for(; ion_idx < total_ion; ++ion_idx){
+    working_ion = ions_[ion_idx];
+    
+    // can this ion generate a mod_type modification?, if not skip to next ion
+    if(!(canIonGenerateModification(working_ion, mod_type, type_increment))){      
+      continue;
+    }
+     
+    // add/sub thorugh all mod_type modifications!!!
+    for(type_idx = type_increment; abs(type_idx) <= abs(modifications[mod_type]); ){
+      // copy the src ion, into new ion
+      new_ion = Ion::newIon();
+      Ion::copy(working_ion, new_ion, working_ion->getPeptideSequence());
+      
+      // add the modification to the new ion
+      new_ion->addModification(mod_type, type_idx, constraint_->getMassType());
+      
+      // add ion to ion_series
+      addIon(new_ion);
+     
+      // can this ion generate a mod_type modification for the next count of modification?, 
+      if(!(this->canIonGenerateModification(working_ion, mod_type, 
+              (type_idx += type_increment)))){
+        break;
+      }
+    }
+  }
+  return true;
+}
+
+/**
+ * creates all the flanking ions up to the max charge
+ * can only create flanking ions that are B|Y ions and don't have modification
+ * assumes the ions with no modification all are at the begining of the ion[] in ion_series
+ * copies all the existing ions that can be modified,
+ * then applies the different modifications then adds the new modified ions to ion_series
+ *\returns true if successfully generates all the ions with modifications, else false
+ */
+bool IonSeries::generateIonsFlank()
+{
+  int ion_idx = 0;
+  int total_ion = ions_.size();
+  Ion* working_ion = NULL;
+  Ion* new_ion = NULL;
+  Ion* new_ion2 = NULL;
+  int* modifications = constraint_->getModifications();
+
+  // modification index
+  int type_idx = 0;
+  int type_increment = 1;
+
+  // iterate over all the ions to determine which ones should be copies and modified
+  for(; ion_idx < total_ion; ++ion_idx){
+    working_ion = ions_[ion_idx];
+    
+    // no more ions that are not modified, thus done
+    if(working_ion->getSingleModificationCount(NH3) != 0){
+      break;
+    }
+
+    // can this ion generate a mod_type modification?, if not skip to next ion
+    if(!canIonGenerateModification(working_ion, FLANK, type_increment)){      
+      continue;
+    }
+     
+    // add/sub thorugh all mod_type modifications!!!
+    for(type_idx = type_increment; type_idx <= modifications[FLANK]; type_idx += type_increment){
+      // copy the src ion, into new ion
+      new_ion = Ion::newIon();
+      new_ion2 = Ion::newIon();
+      Ion::copy(working_ion, new_ion, working_ion->getPeptideSequence());
+      Ion::copy(working_ion, new_ion2, working_ion->getPeptideSequence());
+      
+      // add the modification to the new ion
+      new_ion->addModification(FLANK, type_idx, constraint_->getMassType());
+      new_ion2->addModification(FLANK, -type_idx, constraint_->getMassType());
+
+      // add ion to ion_series
+      addIon(new_ion);
+      addIon(new_ion2);
+    }
+  }
+  return true;
+}
+
+/**
+ * \brief The engine of ion series. Predicts all the ions from the
+ * peptide that meet the ion constraint. All predicted ions are stored
+ * in the ion_series as ion objects. 
+ */
+void IonSeries::predictIons()
+{
+  if(is_predicted_){
+    carp(CARP_WARNING, "The ion series has already been predicted and added");
+    return;
+  }
+
+  IonConstraint* constraint = constraint_;
+  
+  // create a mass matrix
+  FLOAT_T* mass_matrix = 
+    createIonMassMatrix(modified_aa_seq_, constraint->getMassType(), peptide_length_);  
+  /*
+  printf("cumulative mass sum is:\n");
+  int idx = 0;
+  for(idx = 0; idx < mass_matrix[0]; idx++){
+    printf("%i\t%f\n", idx, mass_matrix[idx]);
+  }
+  */
+  // scan for the first and last  (S, T, E, D) and (R, K, Q, N), 
+  // initialize to determine modification is ok.
+  // the first, last of STED, RKQN are stored in ion_series.
+
+  scanForAAForNeutralLoss();
+
+  // generate ions without any modifications
+  if(!generateIonsNoModification(mass_matrix)){
+    carp(CARP_FATAL, "failed to generate ions, no modifications");
+  }
+
+  // create modification ions?
+  if(constraint_->getUseNeutralLosses()){
+    
+    // generate ions with nh3 modification
+    if(abs(constraint->getModifications()[NH3]) > 0){
+      if(!generateIons(NH3)){
+        carp(CARP_FATAL, "failed to generate ions, NH3 modifications");
+      }
+    }
+    
+    // generate ions with h2o modification
+    if(abs(constraint->getModifications()[H2O]) > 0){
+      if(!generateIons(H2O)){
+        carp(CARP_FATAL, "failed to generate ions, H2O modifications");
+      }
+    }
+
+    // generate ions with isotope modification
+    if(constraint->getModifications()[ISOTOPE] > 0){
+      if(!generateIons(ISOTOPE)){
+        carp(CARP_FATAL, "failed to generate ions, ISOTOPE modifications");
+      }
+    }
+
+    // generate ions with flank modification
+    if(constraint->getModifications()[FLANK] > 0){
+      if(!generateIonsFlank()){
+        carp(CARP_FATAL, "failed to generate ions, FLANK modifications");
+      }
+    }
+    
+    // add more modifications here
+
+  }
+  
+  // ion series now been predicted
+  is_predicted_ = true;
+
+}
+
+/**
+ * Copies ion_series object from src to dest.
+ *  must pass in a memory allocated ION_SERIES_T* dest
+ * does not copy the loss_limit.
+ */
+void IonSeries::copy(
+  IonSeries* src,///< ion to copy from -in
+  IonSeries* dest,///< ion to copy to -out
+  bool create_ions ///< should we create new ions or copy the pointers?
+  )
+{
+  Ion* src_ion = NULL;
+  Ion* dest_ion = NULL;
+  
+  dest->peptide_ = src->peptide_;
+  dest->charge_ = src->charge_;
+  dest->peptide_length_ = src->peptide_length_;
+  //mod seq???
+
+  // add copy of pointer ion constraint
+  dest->constraint_ = src->constraint_;
+
+  // add copy ion, add ion_filtered_iterator
+
+  for (IonIterator iterator = src->begin();
+    iterator != src->end();
+    ++iterator) {
+
+    src_ion = *iterator;
+    // add ion
+    if (create_ions) {
+      dest_ion = Ion::newIon();
+      Ion::copy(src_ion, dest_ion, dest->peptide_);
+    }  else {
+      dest_ion = src_ion;
+      
+    }
+    dest->addIon(dest_ion);
+  }
+
+  dest->is_predicted_ = true;
+}
+
+/**
+ * remove an ion from IonSeries, does not free ion.
+ */
+void IonSeries::removeIon(
+  Ion* ion ///<ion to remove
+  ) {
+
+
+  IonIterator ion_iter;
+
+  for (ion_iter = begin();
+    ion_iter != end();
+    ++ion_iter) {
+
+    if (*ion_iter == ion) {
+      ions_.erase(ion_iter);
+      return;
+    }
+
+    
+
+  }
+
+  carp(CARP_ERROR, "Cannot find ion to delete:%i", ion);
+
+}
+
+
+/*************************************
+ * ION_SERIES_T: get and set methods
+ ************************************/
+
+/**
+ * \returns the ion that meets the criteria or NULL
+ * TODO possibly reimplement if linear scan is too slow
+ */
+Ion* IonSeries::getIon(
+  IonConstraint* ion_constraint,
+  int cleavage_idx
+  ){
+
+  IonFilteredIterator ion_iterator(this, ion_constraint);
+  Ion* ion = NULL;
+
+  while(ion_iterator.hasNext()){
+    ion = ion_iterator.next();
+    if(ion->getCleavageIdx() == cleavage_idx){
+      return ion;
+    }
+  }
+  return NULL;
+}
+
+/**
+ *\returns the peptide length of which the ions are made
+ */
+int IonSeries::getPeptideLength()
+{
+  return peptide_length_;
+}
+
+/**
+ * User should not free the peptide sequence seperate from the ion_series
+ *\returns a pointer to the original parent peptide sequence of the ion_series object
+ */
+string& IonSeries::getPeptide()
+{
+  return peptide_;
+}
+
+/**
+ * copies in the peptide sequence to heap allocated sequence.
+ * set the parent peptide sequence of the ion_series object
+ */
+void IonSeries::setPeptide(
+  char* peptide///< the peptide sequence to set -in
+  )
+{
+  peptide_ = peptide;
+}
+
+/**
+ *\returns the charge of the ion_series object
+ */
+int IonSeries::getCharge()
+{
+  return charge_;
+}
+
+/**
+ * set the charge of the ion_series object
+ */
+void IonSeries::setCharge(
+  int charge///< the charge of the ion -in
+  )
+{
+  charge_ = charge;
+}
+
+/**
+ * get the is_predicted field of the ion_series object
+ */
+bool IonSeries::getIsPredicted() {
+  return is_predicted_;
+}
+
+/**
+ * set the is_predicted field of the ion_series object
+ */
+void IonSeries::setIsPredicted(
+  bool is_predicted///< the is_predicted field -in
+  ) {
+  is_predicted_ = is_predicted;
+}
+
+/**
+ * get the modified_aa_seq of the ion_series object
+ */
+MODIFIED_AA_T* IonSeries::getModifiedAASeq()
+{
+  return modified_aa_seq_;
+}
+
+/**
+ *\returns the constraint of the ion_series object
+ */
+IonConstraint* IonSeries::getIonConstraint()
+{
+  return constraint_;
+}
+
+/**
+ * set the of the ion_series object
+ */
+void IonSeries::setIonConstraint(
+  IonConstraint* constraint///<  -in
+  )
+{
+  constraint_ = constraint;
+}
+
+/**
+ *\returns the total number of ions in the ion_series object
+ */
+int IonSeries::getNumIons()
+{
+  return ions_.size();
+}
+
+/**
+ *\returns the total number of ion_type in the ion_series object
+ */
+int IonSeries::getNumIonsOneType(
+  ION_TYPE_T ion_type ///< the type of ions -in
+  )
+{
+  return specific_ions_[ion_type].size();
+}
+
+vector<Ion*>& IonSeries::getSpecificIons(
+  ION_TYPE_T ion_type ///< the type of ions -in
+  )
+{
+  return specific_ions_[ion_type];
+}
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/IonSeries.h b/src/model/IonSeries.h
new file mode 100644
index 0000000..2f629dc
--- /dev/null
+++ b/src/model/IonSeries.h
@@ -0,0 +1,354 @@
+/**
+ * \file IonSeries.h 
+ * AUTHOR: Chris Park
+ * CREATE DATE: 28 June 2006
+ * \brief Object for a series of ions.
+ *****************************************************************************/
+#ifndef IONSERIES_H
+#define IONSERIES_H
+
+#include <stdio.h>
+#include <vector>
+#include "model/objects.h"
+#include "Peptide.h"
+#include "Ion.h"
+#include "IonConstraint.h"
+
+static const int MAX_NUM_ION_TYPE = 8; // number of different ion_types
+
+/**
+ * \class IonSeries
+ * \brief An object to represent a series of ions, and organize them.
+ * For which additional data structures will be created as needed 
+ * loss_limit can be equal to NULL, thus if need to use should always
+ * check that it is not NULL.
+ */
+class IonSeries {
+  friend class XLinkPeptide;
+  friend class XLinkablePeptide;
+  friend class XLinkIonSeriesCache;
+ protected:
+
+  static FLOAT_T* mass_matrix_; /// < Pre-allocated mass matrix
+  // TODO change name to unmodified_char_seq
+  std::string peptide_; ///< The peptide sequence for this ion series
+  MODIFIED_AA_T* modified_aa_seq_; ///< sequence of the peptide
+  bool modified_aa_seq_owner_;
+  int charge_; ///< /<The charge state of the peptide for this ion series
+  IonConstraint* constraint_; ///< The constraints which these ions obey
+  std::vector<Ion*> ions_; ///< The ions in this series
+  int num_ions_; ///< number of ions
+  bool is_predicted_; ///< has this ion_series been predicted already?
+  std::vector<Ion*> specific_ions_[MAX_NUM_ION_TYPE]; 
+    ///< specific ions in the series, reference to master array of ions
+  LOSS_LIMIT_T* loss_limit_; 
+    ///< nh3, h2o loss limit for a given cleavage index, 
+    ///< before using this array should always sheck if not NULL
+  int peptide_length_;   ///< the length of the peptide
+
+  // ??? what is the difference between peptide_length and num_ions
+
+  int pointer_count_;
+
+  /**
+   * \brief Creates an array in which element i is the sum of the masses
+   * of amino acids 0 to (i-1).  At i=0 is stored the length of the
+   * peptide.  
+   * \returns an array of ion masses for all sub sequences
+   */
+  FLOAT_T* createIonMassMatrix(
+    //char* peptide, ///< The peptide for this ion series. -in
+    MODIFIED_AA_T* modified_seq, ///< the sequence
+    MASS_TYPE_T mass_type, ///< the mass_type to use MONO|AVERAGE
+    int peptide_length ///< the length of the peptide
+    );
+
+  /**
+   * user must ensure that there is enough space for this ion
+   * adds ion to ion_series' master ion_array and if B|Y ion to the specific ion_array
+   */
+  void addIon(
+    Ion* ion ///< ion to add -in
+  );
+
+  int incrementPointerCount();
+
+  /**
+   * helper function: add_ions
+   * add all the ions to ion_series up to the max charge
+   *\returns TRUE if successfully adds all ions, else FALSE
+   */
+  bool addIonsByCharge(
+    FLOAT_T mass, ///< the base mass of the ion to add
+    int cleavage_idx, ///< the absolute cleavage index (A,B,C from left X,Y,Z from right)
+    ION_TYPE_T ion_type ///< the ion type of the ions to be added
+    );
+
+  /**
+   * The modification depends on the loss/add && if the ion contains RKQN or STED
+   * The number of losses possible cannot exceed the number of RKQN or STED in the ion
+   * The loss_limit array in the ion_series must be populated prior to this method call
+   *\returns TRUE if the ion can lose the mod_type modification, else FALSE
+   */
+  bool canIonGenerateModification(
+    Ion* ion, ///< the ion to check if can lose nh3 -in
+    ION_MODIFICATION_T mod_type, ///< generate ions of this modification_type -in/out
+    int increment  ///< the add/loss of the modification
+    );
+
+  /**
+   * Initializes an (empty) ion_series object, only called by constructors.
+   */
+  void init();
+
+ public:
+
+
+
+  /**
+   * \returns An (empty) ion_series object.
+   */
+  IonSeries();
+
+  /**
+   * copies in the peptide sequence
+   * Use this method to create ion_series only when few are needed,
+   * because the memory allocation process is expensive.
+   * If need a repeated new ion-series for different peptides, 
+   * use "new_ion_series_generic" & "update_ion_series" combination, thus only allocate one 
+   * ion_seires object.
+   *\returns Instantiates a new ion_series object from the given peptide sequence and charge
+   */
+  IonSeries(
+    const std::string& peptide, ///< The peptide for this ion series. -in
+    int charge, ///< The charge for this ion series -in
+    IonConstraint* constraint ///< The constraints which the ions in this series obey.
+    );
+
+  /**
+   * Creates a heap allocated generic ion_series object that must be updated by "update_ion_series" method
+   * to transform the object into a ion-series for a specific instance of a peptide sequence and charge.
+   *\returns Instantiates a new generic ion_series object that must be updated for each peptide instance
+   */
+  IonSeries(
+    IonConstraint* constraint, ///< The constraints which the ions in this series obey.
+    int charge ///< The charge for this ion series -in
+    );
+
+  
+/**
+ * Updates an ion_series to a specific instance of a peptide sequence.
+ * If the ion_series has been already generated its ions, will free ions up.
+ * Copies in the peptide sequence.
+ * and re-initialize for the new peptide sequence.
+ */
+ void update(
+  const char* peptide, ///< The peptide sequence for this ion series. -in
+  const MODIFIED_AA_T* mod_seq ///< modified version of seq -in
+  );
+
+
+  /**
+   * Frees an allocated ion_series object.
+   */
+  virtual ~IonSeries();
+
+  static void freeIonSeries(IonSeries* ions);
+
+  static void finalize();
+
+  /**
+   *Iterator access
+   */
+  IonIterator begin();
+  IonIterator end();
+
+
+  /**
+   * Prints a ion_series object to file.
+   */
+  void print(
+    FILE* file ///< file for output -out
+    );
+
+  /**
+   * Prints a ion_series object to file, in GMTK single-ion format.
+   */
+  void printSingleGmtk(
+    IonConstraint* ion_constraint, ///< ion_constraint to obey -in 
+    FILE* file, ///< file -out
+    int sentence_idx
+    );
+
+  /**
+   * Prints a ion_series object to file, in GMTK paired-ion format.
+   */
+  void printPairedGmtk(
+    IonConstraint* first_ion_constraint, ///< ion_constraint to obey -in 
+    IonConstraint* second_ion_constraint, ///< ion_constraint to obey -in 
+    FILE* file, ///< file output
+    int sentence_idx
+    );
+
+  /**
+   * \brief Find instances of amino acid which can incur neutral
+   * losses: H2O (S|T|E|D), NH3(R|K|Q|N).  
+   * Set the count of those observed so far for each cleavage index.
+   * If no instance of amino acid, the count is assigned to 0
+   * The information is used to determine if how many nh3 or h2o neutral
+   * losses are possible. 
+   */
+  void scanForAAForNeutralLoss();
+
+  /**
+   * Creates all the ions with no modifications up to the max charge
+   * Adds each ion to ion_series
+   *\returns TRUE if successfully generates all the ions, else FALSE
+   */
+  bool generateIonsNoModification(
+    FLOAT_T* mass_matrix ///< the mass matrix that stores the mass
+    );
+
+  /**
+   * creates all the ions with specific modifications up to the max charge
+   * copies all the existing ions that can be modified,
+   * then applies the different modifications then adds the new modified ions to ion_series
+   *\returns TRUE if successfully generates all the ions with modifications, else FALSE
+   */
+  bool generateIons(
+    ION_MODIFICATION_T mod_type ///< generate ions of this modification_type -in/out
+    );
+
+  /**
+   * creates all the flanking ions up to the max charge
+   * can only create flanking ions that are B|Y ions and don't have modification
+   * assumes the ions with no modification all are at the begining of the ion[] in ion_series
+   * copies all the existing ions that can be modified,
+   * then applies the different modifications then adds the new modified ions to ion_series
+   *\returns TRUE if successfully generates all the ions with modifications, else FALSE
+   */
+  bool generateIonsFlank();
+
+  /**
+   * Predict ion series
+   */
+  void predictIons();
+
+  /**
+   * Copies ion_series object from src to dest.
+   *  must pass in a memory allocated ION_SERIES_T dest
+   */
+  static void copy(
+    IonSeries* src,///< ion to copy from -in
+    IonSeries* dest,///< ion to copy to -out
+    bool create_ions ///< Create a copy of the ions?
+    );
+
+  /**
+   * remove an ion from IonSeries, does not free ion.
+   */
+  void removeIon(
+    Ion* ion ///<ion to remove
+  );
+
+
+  /*************************************
+   * ION_SERIES_T: get and set methods
+   ************************************/
+
+  /**
+   * \returns the ion that meets the constraint or NULL
+   */
+  Ion* getIon(
+    IonConstraint* ion_constraint,
+    int cleavage_idx
+    );
+
+  /**
+   * User should not free the peptide sequence seperate from the ion_series
+   *\returns a pointer to the original parent peptide sequence of the ion_series object
+   */
+  std::string& getPeptide();
+
+  /**
+   *\returns the peptide length of which the ions are made
+   */
+  int getPeptideLength();
+
+  /**
+   * copies in the peptide sequence to heap allocated sequence.
+   * set the parent peptide sequence of the ion_series object
+   */
+  void setPeptide(
+    char* peptide///< the peptide sequence to set -in
+  );
+
+  /**
+   *\returns the charge of the ion_series object
+   */
+  int getCharge();
+
+  /**
+   * set the charge of the ion_series object
+   */
+  void setCharge(
+    int charge///< the charge of the ion -in
+    );
+
+  /**
+   * get the is_predicted field of the ion_series object
+   */
+  bool getIsPredicted();
+
+  /**
+   * set the is_predicted field of the ion_series object
+   */
+  void setIsPredicted(
+    bool is_predicted///< the is_predicted field -in
+    );
+
+  /**
+   * get the modified_aa_seq of the ion_series object
+   */
+  MODIFIED_AA_T* getModifiedAASeq();
+
+  /**
+   *\returns the constraint of the ion_series object
+   */
+  IonConstraint* getIonConstraint();
+
+  /**
+   * set the of the ion_series object
+   */
+  void setIonConstraint(
+    IonConstraint* constraint///<  -in
+  );
+
+  /**
+   *\returns the total number of ions in the ion_series object
+   */
+  int getNumIons();
+
+  /**
+   *\returns the total number of ion_type in the ion_series object
+   */
+  int getNumIonsOneType(
+    ION_TYPE_T ion_type ///< the type of ions -in
+  );
+
+  /**
+   *\returns the ions corresponding to a specific ion type.
+   */
+  std::vector<Ion*>& getSpecificIons(
+    ION_TYPE_T ion_type /// < the type of ions -in
+  );
+  void clear();
+};
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif
diff --git a/src/model/Match.cpp b/src/model/Match.cpp
new file mode 100644
index 0000000..fdccecf
--- /dev/null
+++ b/src/model/Match.cpp
@@ -0,0 +1,1110 @@
+/*************************************************************************//**
+ * \file Match.cpp
+ * AUTHOR: Chris Park
+ * CREATE DATE: 11/27 2006
+ * \brief Object for matching a peptide and a spectrum, generate
+ * a preliminary score(e.g., Sp) 
+ ****************************************************************************/
+#include <math.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+#include <set>
+#include <map>
+#include "io/carp.h"
+#include "ProteinPeptideIterator.h"
+#include "Spectrum.h"
+#include "Ion.h"
+#include "IonSeries.h"
+#include "util/crux-utils.h"
+#include "parameter.h"
+#include "util/GlobalParams.h"
+#include "Scorer.h" 
+#include "Match.h" 
+#include "MatchCollection.h" 
+#include "Peptide.h"
+#include "util/Params.h"
+#include "util/FileUtils.h"
+
+#include <string>
+
+#include "io/MatchFileReader.h"
+
+using namespace std;
+using namespace Crux;
+
+vector<string> Match::file_paths_;
+
+void Match::init() {
+
+  spectrum_=NULL;
+  peptide_=NULL;
+  // initialize score, rank !!!! DEBUG
+  for (unsigned int idx=0;idx<NUMBER_SCORER_TYPES;idx++) {
+    match_scores_[idx] = NOT_SCORED;
+    match_rank_[idx] = 0;
+  }
+  pointer_count_ = 0;
+  // default is not a null peptide match
+  null_peptide_ = false;
+  peptide_sequence_ = NULL;
+  mod_sequence_ = NULL;
+  post_process_match_ = 0;
+  ln_experiment_size_ = 0;
+  num_target_matches_ = 0;
+  best_per_peptide_ = false;
+  file_idx_ = -1;
+}
+
+
+/**
+ * \returns a new memory allocated match
+ */
+Match::Match(){
+  init();
+  ++pointer_count_;
+  exact_pval_search_ = false;
+}
+
+/**
+ * Create a new match with the given members.
+ */
+Match::Match(Peptide* peptide, ///< the peptide for this match
+             Spectrum* spectrum, ///< the spectrum for this match
+             const SpectrumZState& zstate, ///< the charge/mass of the spectrum
+             bool is_decoy)///< is the peptide a decoy or not
+{
+  init();
+  peptide_ = peptide;
+  spectrum_ = spectrum;
+  zstate_ = zstate;
+  null_peptide_ = is_decoy;
+
+  ++pointer_count_;
+  exact_pval_search_ = false;
+}
+
+/**
+ * free the memory allocated match
+ * spectrum is not freed by match
+ */
+void Match::freeMatch(
+  Match* match ///< the match to free -in
+  )
+{
+  --match->pointer_count_;
+  
+  // only free match when pointer count reaches
+  if(match->pointer_count_ == 0){
+    delete match;
+  }
+}
+
+Match::~Match() {
+  // but aren't there multiple matches pointing to the same peptide?
+  // if so, create a new free_shallow_match which doesn't touch the members
+  if (peptide_ != NULL){
+    delete peptide_;
+  }
+  if(post_process_match_ && spectrum_ !=NULL){
+    delete spectrum_;
+  }
+  /*
+  if (peptide_sequence_ != NULL){
+    free(peptide_sequence_);
+  }
+  */
+  if (mod_sequence_ != NULL){
+    free(mod_sequence_);
+  }
+}
+
+bool Match::ScoreComparer::operator() (const Match* x, const Match* y) {
+  FLOAT_T scoreX = x->getScore(type_);
+  FLOAT_T scoreY = y->getScore(type_);
+  return less_ ? Match::ScoreLess(scoreX, scoreY) : Match::ScoreGreater(scoreX, scoreY);
+}
+
+bool Match::ScoreLess(FLOAT_T x, FLOAT_T y) {
+  if (isnan(x) || isinf(x)) {
+    x = std::numeric_limits<FLOAT_T>::max();
+  }
+  if (isnan(y) || isinf(y)) {
+    y = std::numeric_limits<FLOAT_T>::max();
+  }
+  return x < y;
+}
+
+bool Match::ScoreGreater(FLOAT_T x, FLOAT_T y) {
+  if (isnan(x) || isinf(x)) {
+    x = -std::numeric_limits<FLOAT_T>::max();
+  }
+  if (isnan(y) || isinf(y)) {
+    y = -std::numeric_limits<FLOAT_T>::max();
+  }
+  return x > y;
+}
+
+/**
+ * \brief Print the match information in sqt format to the given file
+ *
+ * Only crux sequest-search produces sqt files so the two scores
+ * printed are always Sp and xcorr.
+ */
+void Match::printSqt(
+  FILE* file                  ///< output stream -out
+  ){
+  if (!file) {
+    carp(CARP_ERROR, "Cannot print match to sqt file from null input");
+    return;
+  }
+
+  Peptide* peptide = getPeptide();
+  // this should get the sequence from the match, not the peptide
+  char* sequence = getSequenceSqt();
+
+  int b_y_total = getScore(BY_IONS_TOTAL);
+  if (b_y_total == NOT_SCORED) {
+    b_y_total = 0;
+  }
+  int b_y_matched = getScore(BY_IONS_MATCHED);
+  if (b_y_matched == NOT_SCORED) {
+    b_y_matched = 0;
+  }
+  
+  FLOAT_T delta_cn = getScore(DELTA_CN);
+  FLOAT_T score_main = getScore(XCORR);
+
+  // write format string with variable precision
+  int precision = Params::GetInt("precision");
+
+  // print match info
+  if (exact_pval_search_) {
+    fprintf(file, "M\t%i\t%i\t%.*f\t%.2f\t%.*g\t%.*g\t%.*g\t%i\t%i\t%s\tU\n",
+            getRank(XCORR),
+            getRank(SP),
+            Params::GetInt("mass-precision"),
+            peptide->calcModifiedMass() + MASS_PROTON,
+            delta_cn,
+            precision,
+            getScore(TIDE_SEARCH_EXACT_PVAL),
+            precision,
+            getScore(TIDE_SEARCH_REFACTORED_XCORR),
+            precision,
+            getScore(SP),
+            b_y_matched,
+            b_y_total,
+            sequence
+            );
+  } else {
+    fprintf(file, "M\t%i\t%i\t%.*f\t%.2f\t%.*g\t%.*g\t%i\t%i\t%s\tU\n",
+            getRank(XCORR),
+            getRank(SP),
+            Params::GetInt("mass-precision"),
+            peptide->calcModifiedMass() + MASS_PROTON,
+            delta_cn,
+            precision,
+            score_main,
+            precision,
+            getScore(SP),
+            b_y_matched,
+            b_y_total,
+            sequence
+            );
+  }
+  free(sequence);
+  
+  PeptideSrc* peptide_src = NULL;
+  string protein_id;
+  Protein* protein = NULL;
+  
+  for(PeptideSrcIterator iter = peptide->getPeptideSrcBegin();
+      iter != peptide->getPeptideSrcEnd();
+      ++iter){
+    string rand;
+    peptide_src = *iter;
+    protein = peptide_src->getParentProtein();
+    protein_id = protein->getId();
+
+    // only prepend "decoy-prefix" if we are doing a fasta search
+    Database* database = protein->getDatabase();
+    if( null_peptide_ 
+        && (database != NULL && database->getDecoyType() == NO_DECOYS) ){
+      rand = Params::GetString("decoy-prefix"); 
+    }
+
+    // print match info (locus line), add "decoy-prefix" to locus name for decoys
+    fprintf(file, "L\t%s%s\n", rand.c_str(), protein_id.c_str());      
+  }
+  
+  return;
+}
+
+
+/**
+ * Print one field in the tab-delimited output file, based on column index.
+ */
+void Match::printOneMatchField(
+  int      column_idx,             ///< Index of the column to print. -in
+  MatchCollection* collection,  ///< collection holding this match -in 
+  MatchFileWriter*    output_file,            ///< output stream -out
+  Spectrum* spectrum,
+  int      num_target_matches,            ///< num matches per spectrum -in
+  int      num_decoy_matches,     ///< target matches for same spectrum -in
+  int      b_y_total,              ///< total b/y ions -in
+  int      b_y_matched             ///< Number of b/y ions matched. -in
+) {
+  switch ((MATCH_COLUMNS_T)column_idx) {
+  case FILE_COL:
+    if (strlen(spectrum->getFullFilename()) == 0) {
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, getFilePath());
+    }
+    else {
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, spectrum->getFullFilename());
+    }
+    break;
+  case SCAN_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx,
+                                     spectrum->getFirstScan());
+    break;
+  case CHARGE_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                      getCharge());
+    break;
+  case SPECTRUM_PRECURSOR_MZ_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     spectrum->getPrecursorMz());
+    break;
+  case SPECTRUM_NEUTRAL_MASS_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     getNeutralMass());
+    break;
+  case PEPTIDE_MASS_COL:
+    {
+      Peptide* peptide = getPeptide();
+      double peptide_mass = peptide->calcModifiedMass();
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                       peptide_mass);
+    }
+    break;
+  case DELTA_CN_COL:
+    {
+      FLOAT_T delta_cn = getScore(DELTA_CN);
+      if( delta_cn == 0 ){// I hate -0, this prevents it
+        delta_cn = 0.0;
+      }
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, delta_cn);
+    }
+    break;
+  case SP_SCORE_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     getScore(SP));
+    break;
+  case SP_RANK_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     getRank(SP));
+    break;
+  case XCORR_SCORE_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     getScore(XCORR));
+    break;
+  case EXACT_PVALUE_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     getScore(TIDE_SEARCH_EXACT_PVAL));
+    break;
+  case REFACTORED_SCORE_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     getScore(TIDE_SEARCH_REFACTORED_XCORR));
+    break;
+  case SIDAK_ADJUSTED_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     getScore(SIDAK_ADJUSTED));
+    break;
+  case XCORR_RANK_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+      getRank(!Params::GetBool("exact-p-value") ? XCORR : TIDE_SEARCH_EXACT_PVAL));
+    break;
+  case EVALUE_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx,
+                                     getScore(EVALUE));
+    break;
+  case PVALUE_COL:
+    {
+      double log_pvalue = getScore(LOGP_BONF_WEIBULL_XCORR);
+      if (P_VALUE_NA == log_pvalue) {
+        output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, "NaN");
+      } else {
+        double p_value = log_pvalue != numeric_limits<FLOAT_T>::infinity() ?
+          exp(-1 * log_pvalue) : 0;
+        output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx,
+                                         p_value);
+      }
+    }
+    break;
+  case WEIBULL_QVALUE_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                             getScore(LOGP_QVALUE_WEIBULL_XCORR));
+    break;
+  case WEIBULL_PEP_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx,
+                                     getScore(LOGP_WEIBULL_PEP));
+    break;
+#ifdef NEW_COLUMNS
+  case WEIBULL_PEPTIDE_QVALUE_COL:
+    if ((scores_computed[LOGP_QVALUE_WEIBULL_XCORR] == true) &&
+        (match->best_per_peptide == true)) {
+      double qvalue = getScore(LOGP_PEPTIDE_QVALUE_WEIBULL);
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, qvalue);
+    }
+    break;
+#endif
+  case QVALUE_TDC_COL:
+//    if (null_peptide_ == false) {
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+              getScore(QVALUE_TDC));
+//    }
+    break;
+  case QVALUE_MIXMAX_COL:
+//    if (null_peptide_ == false) {
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+              getScore(QVALUE_MIXMAX));
+//    }
+    break;
+  case DECOY_XCORR_QVALUE_COL:
+    if (null_peptide_ == false) {
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+              getScore(DECOY_XCORR_QVALUE));
+    }
+    break;
+  case DECOY_XCORR_PEP_COL:
+    if (null_peptide_ == false) {
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx,
+                                       getScore(DECOY_XCORR_PEP));
+    }
+    break;
+  case DECOY_EVALUE_QVALUE_COL:
+    if (null_peptide_ == false) {
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+              getScore(DECOY_EVALUE_QVALUE));
+    }
+    break;
+  case DECOY_EVALUE_PEP_COL:
+    if (null_peptide_ == false) {
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx,
+                                       getScore(DECOY_EVALUE_PEP));
+    }
+    break;
+  
+#ifdef NEW_COLUMNS
+  case DECOY_XCORR_PEPTIDE_QVALUE_COL:
+    if ( (null_peptide_ == false) && (best_per_peptide_ == true)) {
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx,
+              getScore(DECOY_XCORR_PEPTIDE_QVALUE));
+    }
+    break;
+#endif
+  case PERCOLATOR_SCORE_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+              getScore(PERCOLATOR_SCORE));
+    break;
+  case PERCOLATOR_RANK_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     getRank(PERCOLATOR_SCORE));
+    break;
+  case PERCOLATOR_QVALUE_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     getScore(PERCOLATOR_QVALUE));
+    break;
+  case PERCOLATOR_PEP_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     getScore(PERCOLATOR_PEP));
+    break;
+#ifdef NEW_COLUMNS
+  case PERCOLATOR_PEPTIDE_QVALUE_COL:
+    if ( match->best_per_peptide == true) {
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+              getScore(PERCOLATOR_PEPTIDE_QVALUE));
+    }
+    break;
+#endif
+  case QRANKER_SCORE_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     getScore(QRANKER_SCORE));
+    break;
+  case QRANKER_QVALUE_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     getScore(QRANKER_QVALUE));
+    break;
+  case QRANKER_PEP_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     getScore(QRANKER_PEP));
+    break;
+#ifdef NEW_COLUMNS
+  case QRANKER_PEPTIDE_QVALUE_COL:
+    if (match->best_per_peptide == true) {
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+              getScore(QRANKER_PEPTIDE_QVALUE));
+    }
+    break;
+#endif
+  case BY_IONS_MATCHED_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, b_y_matched);
+    break;
+  case BY_IONS_TOTAL_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, b_y_total);
+    break;
+  case DISTINCT_MATCHES_SPECTRUM_COL:
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                       num_target_matches);
+    break;
+  case MATCHES_SPECTRUM_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx,
+      num_target_matches);
+    break;
+  case DECOY_MATCHES_SPECTRUM_COL:
+    if( null_peptide_ ){
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx,
+                                       num_decoy_matches);
+    }
+    break;
+  case SEQUENCE_COL:
+    {
+      // this should get the sequence from the match, not the peptide
+      char* sequence = getModSequenceStrWithMasses(
+                get_mass_format_type_parameter("mod-mass-format"));
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, sequence);
+      free(sequence);
+    }
+    break;
+  case MODIFICATIONS_COL:
+    {
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx,
+                                       getPeptide()->getModsString());
+    }
+    break;
+  case CLEAVAGE_TYPE_COL:
+    {
+      ENZYME_T enzyme = GlobalParams::getEnzyme();
+      const char* enzyme_string = enzyme_type_to_string(enzyme);
+      DIGEST_T digestion = GlobalParams::getDigestion();
+      const char* digestion_string = digest_type_to_string(digestion);
+      string cleavage_str = enzyme_string;
+      cleavage_str += "-";
+      cleavage_str += digestion_string;
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                       cleavage_str.c_str() );
+    }
+    break;
+  case PROTEIN_ID_COL:
+    {
+      Peptide* peptide = getPeptide();
+      string protein_ids_string = peptide->getProteinIdsLocations();
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                       protein_ids_string.c_str());
+    }
+    break;
+  case FLANKING_AA_COL:
+    {
+      Peptide* peptide = getPeptide();
+      char* flanking_aas = peptide->getFlankingAAs();
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                       flanking_aas);
+      free(flanking_aas);
+    }
+    break;
+  case ORIGINAL_TARGET_SEQUENCE_COL:
+    if (null_peptide_ || Params::GetBool("concat")) {
+      output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx,
+                                       peptide_->getUnshuffledSequence());
+    }
+    break;
+  case ETA_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     collection->getCalibrationEta());
+    break;
+  case BETA_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     collection->getCalibrationBeta());
+    break;
+  case SHIFT_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     collection->getCalibrationShift());
+    break;
+  case CORR_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx, 
+                                     collection->getCalibrationCorr());
+    break;
+  case INDEX_NAME_COL:
+    output_file->setColumnCurrentRow((MATCH_COLUMNS_T)column_idx,
+      database_index_name_);
+    break;
+    // values only for spectral-counts
+  case RAW_SCORE_COL:
+  case SIN_SCORE_COL:
+  case NSAF_SCORE_COL:
+  case DNSAF_SCORE_COL:
+  case EMPAI_SCORE_COL:
+  case PARSIMONY_RANK_COL:
+    return;
+  case NUMBER_MATCH_COLUMNS:
+  case INVALID_COL:
+    carp(CARP_FATAL, "Error in printing code (match.cpp).");
+    break;
+  }
+}
+
+/**
+ * \brief Print the match information in tab delimited format to the given file
+ *
+ */
+void Match::printTab(
+  MatchCollection* collection,  ///< collection holding this match -in 
+  MatchFileWriter* output_file,            ///< output stream -out
+  Spectrum* spectrum,
+  int num_target_matches,     ///< num matches in spectrum -in
+  int num_decoy_matches ///< target matches for same spectrum -in
+  ){
+
+  carp(CARP_DETAILED_DEBUG, "Match::printTab: begin.");
+
+  // Usually because no decoy file to print to.
+  if( output_file == NULL ){ 
+    return;
+  }
+
+  int b_y_total = getScore(BY_IONS_TOTAL);
+  if (b_y_total == NOT_SCORED) {
+    b_y_total = 0;
+  }
+  int b_y_matched = getScore(BY_IONS_MATCHED);
+  if (b_y_matched == NOT_SCORED) {
+    b_y_matched = 0;
+  }
+  
+  // Print tab delimited fields
+  int column_idx;
+  for (column_idx = 0; column_idx < NUMBER_MATCH_COLUMNS; column_idx++) {
+    carp(CARP_DETAILED_DEBUG,"print col:%i",column_idx);
+    carp(CARP_DETAILED_DEBUG, "%s", get_column_header(column_idx));
+    printOneMatchField(column_idx, 
+                       collection,
+                       output_file,
+                       spectrum,
+                       num_target_matches,
+                       num_decoy_matches,
+                       b_y_total,
+                       b_y_matched);
+  }
+  output_file->writeRow();
+  carp(CARP_DETAILED_DEBUG, "Match::printTab done.");
+}
+
+/****************************
+ * match get, set methods
+ ***************************/
+
+/**
+ * Returns a heap allocated peptide sequence of the PSM
+ * User must free the sequence.
+ *
+ * Go to top README for N,C terminus tryptic feature info.
+ *
+ *\returns the match peptide sequence, returns NULL if no sequence avaliable
+ */
+char* Match::getSequence() {
+  // if post_process_match and has a null peptide you can't get sequence
+  if(post_process_match_ && null_peptide_){
+    carp(CARP_ERROR, 
+         "Cannot retrieve null peptide sequence for post_process_match");
+    return NULL;
+  }
+  
+  if(peptide_sequence_ == NULL){
+    peptide_sequence_ = peptide_->getSequence();
+  }
+  return my_copy_string(peptide_sequence_); 
+}
+
+/**
+ * Returns a heap allocated peptide sequence of the PSM formatted with
+ * the flanking amino acids and modifiation symbols.
+ *
+ * Sequence is in the form of X.SEQ.X where X is the flanking amino
+ * acid or - if peptide is at the end of the protein.
+ * Sequence may not be the same as for the peptide if this is for a
+ * decoy database.
+ *\returns The sqt-formatted peptide sequence for this match.
+ */
+char* Match::getSequenceSqt(){
+
+  // get_match_mod_sequence (use method in case match->mod_seq == NULL) 
+  MODIFIED_AA_T* mod_seq = getModSequence();
+  if( mod_seq == NULL ){
+    return NULL;
+  }
+  int length = getPeptide()->getLength();
+
+  // turn it into string
+  char* seq = modified_aa_string_to_string_with_masses(mod_seq, length,
+                get_mass_format_type_parameter("mod-mass-format"));
+
+  // get peptide flanking residues 
+  char c_term = peptide_->getCTermFlankingAA();
+  char n_term = peptide_->getNTermFlankingAA();
+
+  // allocate seq + 4 length array
+  char* final_string = (char*)mycalloc((strlen(seq)+5), sizeof(char));
+
+  // copy pieces in
+  final_string[0] = n_term;
+  final_string[1] = '.';
+  strcpy(&final_string[2], seq);
+  final_string[strlen(seq) + 2] = '.';
+  final_string[strlen(seq) + 3] = c_term;
+  final_string[strlen(seq) + 4] = '\0';
+
+  carp(CARP_DETAILED_DEBUG, "start string %s, final %s", seq, final_string);
+
+  // delete mod seq and string version
+  free(seq);
+  free(mod_seq);
+  return final_string;
+}
+
+/**
+ * \brief Returns a newly allocated modified_aa sequence of the PSM.
+ * Sequence is the same as the peptide, if target match or is a
+ * shuffled sequence if a null (decoy) match.  If match field
+ * 'mod_sequence' is non NULL, returns a copy of that value, otherwise
+ * fills that field and returns a copy of the value.
+ *
+ * \returns the match peptide sequence, returns NULL if no sequence avaliable
+ */
+MODIFIED_AA_T* Match::getModSequence()
+{
+
+  // if post_process_match and has a null peptide you can't get sequence
+  if(post_process_match_ && null_peptide_){
+    return NULL;
+  }
+
+  if(mod_sequence_ == NULL){
+    mod_sequence_ = peptide_->getModifiedAASequence();
+  }
+
+  return copy_mod_aa_seq(mod_sequence_, peptide_->getLength());
+}
+
+/**
+ * \brief Returns a newly allocated string of sequence including any
+ * modifications represented as symbols (*,@,#, etc) following the
+ * modified residue. 
+ * \returns The peptide sequence of the match including modification
+ * characters. 
+ */
+char* Match::getModSequenceStrWithSymbols(){
+
+  // if post_process_match and has a null peptide you can't get sequence
+  if(post_process_match_ && null_peptide_){
+    return NULL;
+  }
+
+  if(mod_sequence_ == NULL){
+    mod_sequence_ = peptide_->getModifiedAASequence();
+  }
+
+  return modified_aa_string_to_string_with_symbols(mod_sequence_, 
+                                      peptide_->getLength());
+}
+
+/**
+ * \brief Returns a newly allocated string of sequence including any
+ * modifications represented as mass values in brackets following the
+ * modified residue. If merge_masses is true, the sum of multiple
+ * modifications on one residue are printed.  If false, each mass is
+ * printed in a comma-separated list.
+ * \returns The peptide sequence of the match including modification
+ * masses. 
+ */
+char* Match::getModSequenceStrWithMasses(
+ MASS_FORMAT_T mass_format)
+{
+  // if post_process_match and has a null peptide you can't get sequence
+  if(post_process_match_ && null_peptide_){
+    return NULL;
+  }
+
+  if(mod_sequence_ == NULL){
+    mod_sequence_ = peptide_->getModifiedAASequence();
+  }
+
+  return modified_aa_string_to_string_with_masses(mod_sequence_, 
+                                                  peptide_->getLength(),
+                                                  mass_format);
+}
+/**
+ * Must ask for score that has been computed
+ *\returns the match_mode score in the match object
+ */
+FLOAT_T Match::getScore (
+  SCORER_TYPE_T match_mode ///< the working mode (SP, XCORR) -in
+  ) const
+{
+  return match_scores_[match_mode];
+}
+
+/**
+ * sets the match score
+ */
+void Match::setScore(
+  SCORER_TYPE_T match_mode, ///< the working mode (SP, XCORR) -in
+  FLOAT_T match_score ///< the score of the match -in
+  )
+{
+  match_scores_[match_mode] = match_score;
+}
+
+
+/**
+ * set the custom match score
+ */
+void Match::setCustomScore(
+  const std::string& match_score_name, ///< the name of the score -in
+  FLOAT_T match_score ///< the score of the match -in
+  ) {
+
+  match_custom_scores_[match_score_name] = match_score;
+
+}
+
+/**
+ * get the custom score
+ */
+bool Match::getCustomScore(
+  const std::string& match_score_name, ///< the name of the score -in
+  FLOAT_T& score ///< the value of the score -out
+  ) {
+
+  if (match_custom_scores_.find(match_score_name) == match_custom_scores_.end()) {
+    carp(CARP_ERROR, "custom match score:%s doesn't exist!", match_score_name.c_str());
+    return false;
+  }
+
+  score = match_custom_scores_[match_score_name];
+  return true;
+
+}
+
+void Match::getCustomScoreNames(
+  vector<string>& custom_score_names
+  ) {
+
+  custom_score_names.clear();
+
+  for (map<string,FLOAT_T>::iterator iter = match_custom_scores_.begin();
+    iter != match_custom_scores_.end();
+      ++iter) {
+    custom_score_names.push_back(iter->first);
+  }
+
+}
+
+/**
+ * sets the file index for this match
+ */
+void Match::setFileIndex(
+  int file_idx ///< file index to set
+  ) {
+
+  file_idx_ = file_idx;
+}
+
+/**
+ * \returns the file index for this match
+ */
+int Match::getFileIndex() {
+  return(file_idx_);
+}
+
+int Match::findFileIndex(const string& file_path, bool match_stem) {
+  for (size_t idx = 0; idx < file_paths_.size(); idx++) {
+    if (file_path == file_paths_[idx]) {
+      return idx;
+    }
+  }
+  if (match_stem) {
+    for (size_t idx = 0; idx < file_paths_.size(); idx++) {
+      if (file_path == FileUtils::Stem(file_paths_[idx])) {
+        return idx;
+      }
+    }
+  }
+  return -1;
+}
+
+/**
+ * sets the file path for this match
+ * \returns the associated file index
+ */
+int Match::setFilePath(
+  const string& file_path ///< file path to set
+  ) {
+  file_idx_ = findFileIndex(file_path);
+  if (file_idx_ == -1) {
+    file_idx_ = file_paths_.size();
+    file_paths_.push_back(file_path);
+  }
+  return file_idx_;
+}
+
+/**
+ * \returns the file path for this match
+ */ 
+string Match::getFilePath() {
+  return(getFilePath(file_idx_));
+}
+
+string Match::getFilePath(int file_idx) {
+  if (file_idx == -1 || file_paths_.empty()) {
+    return "";
+  } else {
+    return(file_paths_[file_idx]);
+  }
+}
+
+
+
+bool Match::isDecoy() {
+
+  return null_peptide_;
+
+}
+
+/**
+ * sets whether the match is post process or not
+ */
+void Match::setPostProcess(
+  bool post_process ///< whether the match is post process or not
+) {
+  post_process_match_ = post_process;
+}
+
+/**
+ * Must ask for score that has been computed
+ *\returns the match_mode rank in the match object
+ */
+int Match::getRank(
+  SCORER_TYPE_T match_mode ///< the working mode (SP, XCORR) -in
+  )
+{
+  return match_rank_[match_mode];
+}
+
+/**
+ * sets the rank of the match
+ */
+void Match::setRank(
+  SCORER_TYPE_T match_mode, ///< the working mode -in
+  int match_rank ///< the rank of the match -in
+  )
+{
+  match_rank_[match_mode] = match_rank;
+}
+
+/**
+ *\returns the spectrum in the match object
+ */
+Spectrum* Match::getSpectrum()
+{
+  return spectrum_;
+}
+
+/**
+ *\returns the peptide in the match object
+ */
+Peptide* Match::getPeptide()
+{
+  return peptide_;
+}
+
+/**
+ * sets whether the match is a null peptide match or not
+ */
+void Match::setNullPeptide(
+  bool null_peptide ///< whether the match is a null peptide match or not
+) {
+  null_peptide_ = null_peptide;
+}
+
+/**
+ * gets the match if it is a null_peptide match
+ *\returns true if match is null peptide, else false
+ */
+bool Match::getNullPeptide()
+{
+  return null_peptide_;
+}
+
+void Match::setZState(
+  SpectrumZState& zstate) {
+
+  zstate_ = zstate;
+
+}
+
+SpectrumZState& Match::getZState() {
+
+  return zstate_;
+
+}
+
+/**
+ * gets the match charge
+ */
+int Match::getCharge() {
+  return getZState().getCharge();
+}
+
+/**
+ * /returns the match neutral mass
+ */
+FLOAT_T Match::getNeutralMass() {
+  return getZState().getNeutralMass();
+}
+
+/**
+ * sets the match ln_experiment_size
+ */
+void Match::setLnExperimentSize(
+  FLOAT_T ln_experiment_size ///< the ln_experiment_size value of PSM -in
+  )
+{
+  ln_experiment_size_ = ln_experiment_size;
+}
+
+/**
+ * gets the match ln_experiment_size
+ */
+FLOAT_T Match::getLnExperimentSize() {
+  return ln_experiment_size_;
+}
+
+/**
+ * Sets the total number of target matches searched for this spectrum.
+ */
+void Match::setTargetExperimentSize(int num_matches){
+  num_target_matches_ = num_matches;
+}
+
+/**
+ * \returns The total number of target matches searched for this spectrum.
+ */
+int Match::getTargetExperimentSize(){
+  return num_target_matches_;
+}
+
+/**
+ *Increments the pointer count to the match object
+ */
+void Match::incrementPointerCount() {
+  ++pointer_count_;
+}
+
+/**
+ * Set the best-per-peptide Boolean to true.
+ */
+void Match::setBestPerPeptide() {
+  best_per_peptide_ = true;
+}
+
+
+/************************************************
+ * TODO: Why are these here?
+ ************************************************/
+
+/**
+ * \brief Counts the number of internal cleavages
+ *
+ */
+int get_num_internal_cleavage(const char* peptide_sequence, ENZYME_T enzyme){
+  // get number of internal cleavages
+  int num_missed_cleavages = 0;
+  const char* seq_iter = peptide_sequence;
+  
+  while (*(seq_iter+1) != '\0'){
+    if (ProteinPeptideIterator::validCleavagePosition(seq_iter, enzyme)){
+      num_missed_cleavages++;
+    }
+    seq_iter++;
+  }
+  return num_missed_cleavages;
+}
+
+/**
+ * \brief Returns whether the nterm and cterm of a peptide are proper cleavages
+ */
+void get_terminal_cleavages(
+  const char* peptide_sequence, ///< peptide sequenc
+  const char flanking_aas_prev, ///< amino acid before cleavage (n-term)
+  const char flanking_aas_next, ///< amino acid after cleavage (c-term)
+  ENZYME_T enzyme, ///< Enzyme used in cleavage
+  bool& nterm, ///< -out is nterminus from a proper cleavage
+  bool& cterm ///< -out is cterminus from a proper cleavage?
+  ) {
+  int num_tol_term = 0;
+  char cleavage[3];
+  cleavage[2] = '\0';
+  cleavage[0] = flanking_aas_prev;
+  cleavage[1] = peptide_sequence[0];
+  nterm = flanking_aas_prev == '-' || ProteinPeptideIterator::validCleavagePosition(cleavage, enzyme);
+
+  cleavage[0] = peptide_sequence[strlen(peptide_sequence)-1];
+  cleavage[1] = flanking_aas_next;
+  cterm = flanking_aas_next == '-' || ProteinPeptideIterator::validCleavagePosition(cleavage, enzyme);
+}
+
+/**
+ * \brief Counts the number of terminal cleavage. Either 0, 1, or 2
+ *
+ */
+int get_num_terminal_cleavage(
+  const char* peptide_sequence, 
+  const char flanking_aas_prev,
+  const char flanking_aas_next,
+  ENZYME_T enzyme
+  ){
+
+  bool cterm, nterm;
+
+  get_terminal_cleavages(peptide_sequence, 
+    flanking_aas_prev, 
+    flanking_aas_next, 
+    enzyme,
+    nterm, cterm);
+
+  int num_tol_term = 0;
+  if (nterm) { 
+    num_tol_term++;
+  }
+  if (cterm) { 
+    num_tol_term++;
+  }
+  return num_tol_term;
+}
+
+void Match::setDatabaseIndexName(string index_name){
+  database_index_name_ = index_name;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/model/Match.h b/src/model/Match.h
new file mode 100644
index 0000000..30287f7
--- /dev/null
+++ b/src/model/Match.h
@@ -0,0 +1,459 @@
+/**
+ * \file Match.h
+ * $Revision: 1.24 $ 
+ * \brief Object for given a peptide and a spectrum, generate 
+ * a preliminary score(ex, Sp)
+ ****************************************************************************/
+#ifndef MATCH_H
+#define MATCH_H
+
+#include "io/MatchFileWriter.h"
+#include <math.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <set>
+#include <map>
+#include <ctype.h>
+#include <float.h>
+#include <string>
+
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+#include "io/carp.h"
+#include "Spectrum.h"
+#include "io/SpectrumCollection.h"
+#include "Ion.h"
+#include "IonSeries.h"
+#include "util/crux-utils.h"
+#include "model/objects.h"
+#include "parameter.h"
+#include "Scorer.h"
+
+
+/* Global variables */
+static const FLOAT_T NOT_SCORED = FLT_MIN;
+static const FLOAT_T P_VALUE_NA = -1.0;
+
+namespace Crux{
+
+class Match {
+ protected:
+  /**
+   * README!
+   * Issues on the overall_type field in match struct
+   * 
+   * Outstanding question: How do you determine the
+   * peptide trypticity for multiple protein sources?
+   * 
+   * For example, if one protein src is tryptic while the other is 
+   * not tryptic, what is the peptide trypticity used for feature and 
+   * shuffling peptide sequence?
+   *
+   * Currently, we use the "Tryptic wins all" approach, where
+   * if N-terminus is tryptic in any of the src proteins we claim it
+   * tryptic on the N terminus. Same applies for C-terminus.
+   * Thus, even if no peptide is tryptic in any of its src protein,
+   * if there are one src protein where it is N tryptic and another where
+   * it is C tryptic, overall we will call the peptide in the match tryptic.
+   * 
+   * There are for sure other methods, for example to randomly sample the src 
+   * protein and consider that protein as its src or to shuffle the flanking 
+   * sequence of the peptide in each of peptide and randomly sample from the 
+   * shuffled flanking sequence to determine the shuffled peptide's trypticity.
+   *
+   */
+  Crux::Spectrum* spectrum_; ///< the spectrum we are scoring with
+  Crux::Peptide* peptide_;  ///< the peptide we are scoring
+  FLOAT_T match_scores_[NUMBER_SCORER_TYPES];
+  std::map<string,FLOAT_T> match_custom_scores_;
+    ///< array of scores, one for each type (index with SCORER_TYPE_T) 
+  int match_rank_[NUMBER_SCORER_TYPES];  
+    ///< rank of this match for each type scored (index with SCORER_TYPE_T)
+  int pointer_count_; 
+    ///< number of pointers to this match object (when reach 0, free memory)
+  bool null_peptide_; ///< Is the match a null (decoy) peptide match?
+  const char* peptide_sequence_; ///< peptide sequence is that of peptide or shuffled
+  MODIFIED_AA_T* mod_sequence_; ///< seq of peptide or shuffled if null peptide
+  SpectrumZState zstate_;
+  // post_process match object features
+  // only valid when post_process_match is true
+  bool post_process_match_; ///< Is this a post process match object?
+  FLOAT_T ln_experiment_size_; 
+     ///< natural log of total number of candidate peptides evaluated
+  int num_target_matches_; ///< total target candidates for this spectrum
+  bool best_per_peptide_; ///< Is this the best scoring PSM for this peptide?
+  int file_idx_; ///< index of where this match came from 
+  string database_index_name_;
+  static std::vector<std::string> file_paths_;
+  /**
+   * Print one field in the tab-delimited output file, based on column index.
+   */
+  virtual void printOneMatchField(
+    int      column_idx,             ///< Index of the column to print. -in
+    MatchCollection* collection,  ///< collection holding this match -in 
+    MatchFileWriter*    output_file,            ///< output stream -out
+    Crux::Spectrum* spectrum,
+    int     num_target_matches,     ///< target matches for this spectrum -in
+    int     num_decoy_matches, ///< decoy matches (if any) for this spectrum -in
+    int     b_y_total,              ///< total b/y ions -in
+    int     b_y_matched             ///< Number of b/y ions matched. -in
+    );
+
+  void init();
+
+ public:
+  bool exact_pval_search_;
+  /**
+   * \returns a new memory allocated match
+   */
+  Match();
+
+  /**
+   *
+   */
+  Match(Crux::Peptide* peptide, ///< the peptide for this match
+        Crux::Spectrum* spectrum, ///< the spectrum for this match
+        const SpectrumZState& zstate, ///< the charge/mass of the spectrum
+        bool is_decoy);///< is the peptide a decoy or not
+
+  /**
+   * free the memory allocated match
+   */
+  static void freeMatch(
+    Match* match ///< the match to free -in
+  );
+
+  virtual ~Match();
+
+  struct ScoreComparer {
+   public:
+    // If less, sort is from least to greatest
+    ScoreComparer(SCORER_TYPE_T type, bool less): type_(type), less_(less) {}
+    bool operator() (const Match* x, const Match* y);
+
+    private:
+     SCORER_TYPE_T type_;
+     bool less_;
+  };
+  static bool ScoreLess(FLOAT_T x, FLOAT_T y);
+  static bool ScoreGreater(FLOAT_T x, FLOAT_T y);
+
+  /**
+   * print the information of the match
+   */
+  void print(
+    FILE* file, ///< output stream -out
+    bool output_sequence, ///< should I output peptide sequence -in
+    SCORER_TYPE_T output_mode  ///< the output mode -in
+    );
+
+  /**
+   * \brief Print the match information in sqt format to the given file
+   *
+   * The main score goes in the position usually holding the xcorr.  The other
+   * score goes in the position usually holding the preliminary Sp
+   * score.  For searches analyzed by percolator, main and other should
+   * be discriminant score and qvalue.
+   */
+  void printSqt(
+    FILE* file      ///< output stream -out
+    );
+
+  /**
+   * \brief Print the match information in tab delimited format to the
+   * given file.
+   *
+   */
+  void printTab(
+    MatchCollection* collection,  ///< collection holding this match -in 
+    MatchFileWriter*    file,                   ///< output stream -out
+    Spectrum* spectrum,
+    int num_target_matches,  ///< target matches for this spectrum -in
+    int num_decoy_matches ///< decoy matches (if any) for this spectrum -in
+    );
+
+  /****************************
+   * match get, set methods
+   ***************************/
+
+  /**
+   * Returns a heap allocated peptide sequence of the PSM
+   * Sequence may not be the same as for the peptide if this is for a
+   * decoy database.
+   * User must free the sequence.
+   *\returns the match peptide sequence
+   */
+  char* getSequence();
+
+  /**
+   * Returns a heap allocated peptide sequence of the PSM formatted with
+   * the flanking amino acids and modifiation symbols.
+   *
+   * Sequence is in the form of X.SEQ.X where X is the flanking amino
+   * acid or - if peptide is at the end of the protein.
+   * Sequence may not be the same as for the peptide if this is for a
+   * decoy database.
+   *\returns The sqt-formatted peptide sequence for this match.
+   */
+  char* getSequenceSqt();
+
+  /**
+   * \brief Returns a newly allocated modified_aa sequence of the PSM
+   * User must free the sequence.
+   *\returns the match peptide sequence
+   */
+  MODIFIED_AA_T* getModSequence();
+
+  /**
+   * \brief Returns a newly allocated string of sequence including any
+     * modifications represented as symbols (*,@,#, etc) following the
+   * modified residue. 
+   * \returns The peptide sequence of the match including modification
+   * characters. 
+   */
+  char* getModSequenceStrWithSymbols();
+
+  /**
+   * \brief Returns a newly allocated string of sequence including any
+   * modifications represented as mass values in brackets following the
+   * modified residue. If mass_format is MOD_MASS_ONLY, the sum of multiple
+   * modifications on one residue are printed.  If MOD_MASSES_SEPARATE,
+   * each mass is printed in a comma-separated list.  If AA_PLUS_MOD, then
+   * the mass printed is that of the amino acid plus the modification.
+   * \returns The peptide sequence of the match including modification
+   * masses. 
+   */
+  char* getModSequenceStrWithMasses( 
+   MASS_FORMAT_T mass_format
+    );
+
+  /**
+   * Must ask for score that has been computed
+   *\returns the match_mode score in the match object
+   */
+  FLOAT_T getScore(
+    SCORER_TYPE_T match_mode ///< the working mode (SP, XCORR) -in
+    ) const;
+
+  /**
+   * sets the match score
+   */
+  void setScore(
+    SCORER_TYPE_T match_mode, ///< the working mode (SP, XCORR) -in
+    FLOAT_T match_score ///< the score of the match -in
+    );
+
+  /**
+   * get the custom score
+   * \retuns the custom score if it exists
+   */
+  FLOAT_T getScore(
+    std::string& match_score_name ///< the name of the score -in
+    );
+
+  /**
+   * set the custom match score
+   */
+  void setCustomScore(
+    const std::string& match_score_name, ///< the name of the score -in
+    FLOAT_T match_score ///< the score of the match -in
+    );
+
+  /**
+   * get the custom score
+   */
+  bool getCustomScore(
+    const std::string& match_score_name, ///< the name of the score -in
+    FLOAT_T& score ///< the value of the score -out
+    );
+
+  void getCustomScoreNames(
+    std::vector<std::string>& custom_score_names
+  );
+
+
+  /**                                                                                                      
+   * sets the file index for this match                                                                    
+   */
+  void setFileIndex(
+    int file_idx ///< file index to set
+  );
+  
+  /**
+   *\returns the file index for this match
+   */
+  int getFileIndex();
+
+  static int findFileIndex(const std::string& file_path, bool match_stem = false);
+
+  /**                                                                                                      
+   * sets the file path for this match                                                                     
+   * \returns the associated file index                                                                    
+   */
+  int setFilePath(
+    const std::string& file_path ///< file path to set
+  );
+
+  /**                                                                                                      
+   * \returns the file path for this match                                                                 
+   */
+  std::string getFilePath();
+  
+  static std::string getFilePath(int file_idx);
+
+  virtual bool isDecoy();
+
+  /**
+   * Must ask for score that has been computed
+   *\returns the match_mode rank in the match object
+   */
+  int getRank(
+    SCORER_TYPE_T match_mode ///< the working mode (SP, XCORR) -in
+    );
+
+  /**
+   * sets the rank of the match
+   */
+  void setRank(
+    SCORER_TYPE_T match_mode, ///< the working mode (SP, XCORR) -in
+    int match_rank ///< the rank of the match -in
+    );
+
+  /**
+   *\returns the spectrum in the match object
+   */
+  Crux::Spectrum* getSpectrum();
+
+  /**
+   *\returns the peptide in the match object
+   */
+  Crux::Peptide* getPeptide();
+
+  /**
+   * sets the match charge and mass
+   */
+
+  void setZState(
+    SpectrumZState& zstate
+    );
+
+  SpectrumZState& getZState();
+
+  /**
+   * gets the match charge
+   */
+
+  int getCharge();
+
+  /**
+   * gets the spectrum neutral mass
+   */
+  FLOAT_T getNeutralMass();
+
+  /**
+   * sets the match ln_experiment_size
+   */
+  void setLnExperimentSize(
+    FLOAT_T ln_experiment_size ///< the ln_experiment_size value of PSM -in
+    );
+
+  /**
+   * gets the match ln_experiment_size
+   */
+  FLOAT_T getLnExperimentSize();
+
+  /**
+   * \returns The total number of target matches searched for this spectrum.
+   */
+  int getTargetExperimentSize();
+
+  /**
+   * sets the total number of target matches searched for this spectrum.
+   */
+  void setTargetExperimentSize(int num_matches);
+
+  /**
+   *Increments the pointer count to the match object
+   */
+  void incrementPointerCount();
+
+  /**
+   * sets whether the match is a null peptide match or not
+   */
+  void setNullPeptide(
+    bool null_peptide ///< whether the match is a null peptide match or not
+  );
+
+  /**
+   * gets the match if it is a null_peptide match
+   *\returns true if match is null peptide, else false
+   */
+  bool getNullPeptide();
+
+  /**
+   * sets whether the match is post process or not
+   */
+  void setPostProcess(
+    bool post_process ///< whether the match is post process or not
+  );
+
+  /**
+   * Set the best-per-peptide Boolean to true.
+   */
+  void setBestPerPeptide();
+
+  /**
+  *Set the database index name where the peptide comes from
+  */
+  void setDatabaseIndexName(string index_name);
+
+};
+
+} /* Namespace for Match */
+
+/************************************************
+ * TODO: Why are these here?
+ ************************************************/
+/**
+ * \brief Returns whether the nterm and cterm of a peptide are proper cleavages
+ */
+void get_terminal_cleavages(
+  const char* peptide_sequence, ///< peptide sequence
+  const char flanking_aas_prev, ///< amino acid before cleavage (n-term)
+  const char flanking_aas_next, ///< amino acid after cleavage (c-term)
+  ENZYME_T enzyme, ///< Enzyme used in cleavage
+  bool& nterm, ///< -out is nterminus from a proper cleavage?
+  bool& cterm ///< -out is cterminus from a proper cleavage?
+);
+
+/**
+ * \brief Counts the number of internal cleavages
+ * why is this here?
+ */
+int get_num_internal_cleavage(
+  const char* peptide_sequence, 
+  ENZYME_T enzyme
+);
+
+/**
+ * \brief Counts the number of terminal cleavage. Either 0, 1, or 2
+ *
+ */
+int get_num_terminal_cleavage(
+  const char* peptide_sequence, 
+  const char flanking_aas_prev,
+  const char flanking_aas_next,
+  ENZYME_T enzyme
+);
+
+#endif //MATCH_H
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/MatchCollection.cpp b/src/model/MatchCollection.cpp
new file mode 100644
index 0000000..480b4ca
--- /dev/null
+++ b/src/model/MatchCollection.cpp
@@ -0,0 +1,1407 @@
+/*********************************************************************//**
+ * \file MatchCollection.cpp
+ * AUTHOR: Chris Park
+ * CREATE DATE: 11/27 2006
+ * \brief A set of peptide spectrum matches for one spectrum.
+ *
+ * Methods for creating and manipulating match_collections.   
+ * Creating a match collection generates all matches (searches a
+ * spectrum against a database.
+ ****************************************************************************/
+#include "MatchCollection.h"
+#include "MatchIterator.h"
+#include <string>
+#include "io/MatchFileReader.h"
+#include "io/SQTReader.h"
+#include "util/AminoAcidUtil.h"
+#include "util/Params.h"
+#include "util/GlobalParams.h"
+#include "util/StringUtils.h"
+#include "util/WinCrux.h"
+
+using namespace std;
+using namespace Crux;
+
+/**
+ * \returns An (empty) match_collection object.
+ */
+void MatchCollection::init() {
+  try {
+    match_.reserve(10 * MILLION);
+  } catch (std::bad_alloc& ba) {
+    carp(CARP_DEBUG, "Bad alloc in reserve: %s", ba.what());
+  }
+  experiment_size_ = 0;
+  target_experiment_size_ = 0;
+  zstate_ = SpectrumZState();
+  null_peptide_collection_ = false;
+
+  // loop over to set all score type to false
+  for(int score_type_idx = 0 ; 
+    score_type_idx < NUMBER_SCORER_TYPES ; 
+    ++score_type_idx){
+
+    scored_type_[score_type_idx] = false;
+  }
+
+  // set last score to -1, thus nothing has been done yet
+  last_sorted_ = (SCORER_TYPE_T)-1;
+  iterator_lock_ = false;
+  eta_ = 0;
+  beta_ = 0;
+  shift_ = 0;
+  correlation_ = 0;
+  xcorrs_.reserve(10 * MILLION);
+
+  post_process_collection_ = false;
+  top_scoring_sp_ = NULL;
+  exact_pval_search_ = false;
+  has_distinct_matches_ = false;
+}
+
+/**
+ * /brief Free the memory allocated for a match collection
+ * Deep free; each match is freed which, in turn, frees each spectrum
+ * and peptide. 
+ */
+MatchCollection::~MatchCollection() {
+  // decrement the pointer count in each match object
+  for (vector<Crux::Match*>::iterator i = match_.begin(); i != match_.end(); i++) {
+    Match::freeMatch(*i);
+  }
+
+  if(top_scoring_sp_){
+    Match::freeMatch(top_scoring_sp_);
+  }
+}
+
+/**
+ * \brief Creates a new match collection with no matches in it.  Sets
+ * the member variable indicating if the matches are to real peptides
+ * or to decoy (shuffled) peptides. Other member variables are set to
+ * default values.  The method add_matches() can be used to search a
+ * spectrum and store the matches in this collection.  
+ *
+ * \returns A newly allocated match collection
+ */
+MatchCollection::MatchCollection(
+  bool is_decoy
+  ){
+  init();
+  null_peptide_collection_ = is_decoy;
+}
+
+void MatchCollection::preparePostProcess() {
+  // prepare the match_collection
+  init();
+  // set this as a post_process match collection
+  post_process_collection_ = true;
+}
+
+/**
+ * Sort the match collection by score type.
+ */
+void MatchCollection::sort(
+  SCORER_TYPE_T score_type ///< the score type to sort by -in
+  )
+{
+  carp(CARP_DETAILED_DEBUG, "Sorting match collection.");
+
+  // check if we are allowed to alter match_collection
+  if (iterator_lock_) {
+    carp(CARP_FATAL,
+         "Cannot sort a match collection when a match iterator is already instantiated");
+  }
+
+  // The order here follows that of the definition in ../objects.h.
+  SCORER_TYPE_T sort_by = score_type;
+  bool smaller_is_better = false;
+  switch (score_type) {
+  case SP:
+  case XCORR:
+    smaller_is_better = false;
+    break;
+  case EVALUE:
+    smaller_is_better = true;
+    break;
+
+  case DECOY_XCORR_QVALUE:
+  case DECOY_XCORR_PEPTIDE_QVALUE:
+  case DECOY_XCORR_PEP:
+    smaller_is_better = false;
+    sort_by = XCORR;
+    break;
+
+  case DECOY_EVALUE_QVALUE:
+  case DECOY_EVALUE_PEPTIDE_QVALUE:
+  case DECOY_EVALUE_PEP:
+    smaller_is_better = true;
+    sort_by = EVALUE;
+    break;
+
+  // N.B. These are actually NEGATIVE log p-values.
+  case LOGP_WEIBULL_XCORR:
+  case LOGP_BONF_WEIBULL_XCORR:
+  case LOGP_QVALUE_WEIBULL_XCORR:
+  case LOGP_WEIBULL_PEP:
+  case LOGP_PEPTIDE_QVALUE_WEIBULL:
+    smaller_is_better = false;
+    sort_by = LOGP_BONF_WEIBULL_XCORR;
+    break;
+
+  case PERCOLATOR_SCORE:
+  case PERCOLATOR_QVALUE:
+  case PERCOLATOR_PEPTIDE_QVALUE:
+  case PERCOLATOR_PEP:
+    smaller_is_better = false;
+    sort_by = PERCOLATOR_SCORE;
+    break;
+
+  case QRANKER_SCORE:
+  case QRANKER_QVALUE:
+  case QRANKER_PEPTIDE_QVALUE:
+  case QRANKER_PEP:
+    smaller_is_better = false;
+    sort_by = QRANKER_SCORE;
+    break;
+
+  case BARISTA_SCORE:
+  case BARISTA_QVALUE:
+  case BARISTA_PEPTIDE_QVALUE:
+  case BARISTA_PEP:
+    smaller_is_better = false;
+    sort_by = BARISTA_SCORE;
+    break;
+
+  case DELTA_CN:
+  case DELTA_LCN:
+  case BY_IONS_MATCHED:
+  case BY_IONS_TOTAL:
+    carp(CARP_FATAL, "Cannot sort by score type %s.",
+	 scorer_type_to_string(score_type));
+    break;
+
+  case TIDE_SEARCH_EXACT_PVAL:
+    smaller_is_better = true;
+    break;
+  case TIDE_SEARCH_REFACTORED_XCORR:
+    smaller_is_better = false;
+    break;
+  case SIDAK_ADJUSTED:
+  case TIDE_SEARCH_EXACT_SMOOTHED:
+    smaller_is_better = true;
+    break;
+
+  case XCORR_FIRST:
+  case XCORR_SECOND:
+    carp(CARP_FATAL, "Cannot sort by score type %s.",
+	 scorer_type_to_string(score_type));
+    
+  case QVALUE_TDC:
+  case QVALUE_MIXMAX:
+    smaller_is_better = true;
+    break;
+
+  case NUMBER_SCORER_TYPES:
+  case INVALID_SCORER_TYPE:
+    carp(CARP_FATAL, "Cannot sort by score type %s.",
+	 scorer_type_to_string(score_type));
+  }
+
+  // Don't sort if it's already sorted.
+  if (last_sorted_ == sort_by) {
+    return;
+  }
+
+  if (!scored_type_[sort_by]) {
+    carp(CARP_WARNING, "Cannot sort MatchCollection (does not have %s scores)",
+	 scorer_type_to_string(sort_by));
+    return;
+  }
+
+  if (smaller_is_better) {
+    carp(CARP_DEBUG, "Sorting in ascending order by %s.",
+	 scorer_type_to_string(score_type));
+  } else {
+    carp(CARP_DEBUG, "Sorting in descending order by %s.",
+	 scorer_type_to_string(score_type));
+  }	 
+
+  // Do the sort.
+  Match::ScoreComparer comparer(sort_by, smaller_is_better);
+  std::sort(match_.begin(), match_.end(), comparer);
+  last_sorted_ = sort_by;
+}
+
+/**
+ * Assigns a rank for the given score type to each match.  First sorts
+ * by the score type (if not already sorted).  Overwrites any existing
+ * rank values, so it can be performed on a collection with matches
+ * newly added to previously ranked matches.  Rank 1 is highest
+ * score.  Matches with the same score will be given the same rank.
+ *
+ * \returns true, if populates the match rank in the match collection
+ */
+bool MatchCollection::populateMatchRank(
+ SCORER_TYPE_T score_type ///< score type (SP, XCORR) by which to rank -in
+ )
+{
+  carp(CARP_DETAILED_DEBUG, "Ranking matches by %i.", score_type);
+  carp(CARP_DETAILED_DEBUG, "Collection currently ranked by %d", last_sorted_);
+  // check if the match collection is in the correct sorted order
+  if (last_sorted_ != score_type) {
+    sort(score_type);
+  }
+
+  // set match rank for all match objects that have been scored for
+  // this type
+  int cur_rank = 0;
+  FLOAT_T cur_score = NOT_SCORED;
+  for (vector<Crux::Match*>::iterator i = match_.begin(); i != match_.end(); i++) {
+    FLOAT_T this_score = (*i)->getScore(score_type);
+    
+    if( NOT_SCORED == (*i)->getScore(score_type) ){
+      char* seq = (*i)->getModSequenceStrWithMasses(MOD_MASS_ONLY);
+      carp(CARP_WARNING, 
+           "PSM spectrum %i charge %i sequence %s was NOT scored for type %i",
+           (*i)->getSpectrum()->getFirstScan(),
+           (*i)->getCharge(), seq,
+           (int)score_type);
+      free(seq);
+    }
+
+    // does this match have a higher score?
+    if( this_score != cur_score ){
+      cur_score = this_score;
+      cur_rank++;
+    }
+
+    //    set_match_rank( cur_match, score_type, match_index+1);
+    (*i)->setRank(score_type, cur_rank);
+
+    carp(CARP_DETAILED_DEBUG, "Match rank %i, score %f", cur_rank, cur_score);
+  }
+  
+  return true;
+}
+
+/**
+ * For the #top_count ranked peptides, calculate the Weibull parameters
+ *\returns true, if successfully calculates the Weibull parameters
+ */
+static const FLOAT_T MIN_XCORR_SHIFT = -5.0;
+static const FLOAT_T MAX_XCORR_SHIFT  = 5.0;
+//#define CORR_THRESHOLD 0.995   // Must achieve this correlation, else punt.
+static const FLOAT_T CORR_THRESHOLD = 0.0;       // For now, turn off the threshold.
+static const FLOAT_T XCORR_SHIFT = 0.05;
+static const FLOAT_T MIN_SP_SHIFT = -100.0;
+static const FLOAT_T MAX_SP_SHIFT = 300.0;
+static const FLOAT_T SP_SHIFT = 5.0;
+
+/**
+ * match_collection get, set method
+ */
+
+/**
+ *\returns true, if the match collection has been scored by score_type
+ */
+bool MatchCollection::getScoredType(
+  SCORER_TYPE_T score_type ///< the score_type (MATCH_SP, MATCH_XCORR) -in
+  )
+{
+  return scored_type_[score_type];
+}
+
+/**
+ * sets the score_type to value
+ */
+void MatchCollection::setScoredType(
+  SCORER_TYPE_T score_type, ///< the score_type (MATCH_SP, MATCH_XCORR) -in
+  bool value
+  )
+{
+  scored_type_[score_type] = value;
+}
+
+/**
+ *
+ */
+void MatchCollection::getCustomScoreNames(
+  vector<string>& custom_score_names
+  ) {
+  custom_score_names.clear();
+
+  if (!match_.empty()) {
+    match_.front()->getCustomScoreNames(custom_score_names);
+  }
+}
+
+/**
+ * Set the filepath for all matches in the collection
+ *\returns the associated file idx
+ */
+int MatchCollection::setFilePath(
+  const string& file_path,  ///< File path to set
+  bool overwrite ///< Overwrite existing files?
+  ) {
+  int file_idx = -1;
+  for (vector<Crux::Match*>::iterator i = match_.begin(); i != match_.end(); i++) {
+    if (overwrite || (*i)->getFileIndex() == -1) {
+      file_idx = (*i)->setFilePath(file_path);
+    }
+  }
+  return file_idx;
+}
+
+/**
+ *\returns true, if there is a  match_iterators instantiated by match collection 
+ */
+bool MatchCollection::getIteratorLock() {
+  return iterator_lock_;
+}
+
+/**
+ *\returns the total match objects avaliable in current match_collection
+ */
+int MatchCollection::getMatchTotal() {
+  return match_.size();
+}
+
+bool MatchCollection::getHasDistinctMatches() {
+  return has_distinct_matches_;
+}
+
+void MatchCollection::setHasDistinctMatches(bool distinct) {
+  has_distinct_matches_ = distinct;
+}
+
+
+void MatchCollection::setExperimentSize(int size) {
+  experiment_size_ = size;
+}
+
+/**
+ * \returns The total number of peptides searched for this spectrum,
+ * target peptides for a target collection or decoy peptides for a
+ * decoy collection.
+ */
+int MatchCollection::getExperimentSize() {
+  return experiment_size_;
+}
+
+/**
+ * Sets the total number of target peptides searched for this
+ * spectrum.  Only needs to be used by decoy match collections.
+ */
+void MatchCollection::setTargetExperimentSize(int numMatches) {
+  target_experiment_size_ = numMatches;
+}
+
+/**
+ * \returns The number of target matches that this spectrum had.
+ * Different than getExperimentSize() for decoy match collections.
+ */
+int MatchCollection::getTargetExperimentSize() {
+  if( null_peptide_collection_ ){
+    return target_experiment_size_;
+  }
+  return experiment_size_;
+}
+
+/**
+ *\returns the charge of the spectrum that the match collection was created
+ */
+int MatchCollection::getCharge()
+{
+  return zstate_.getCharge();
+}
+
+/**
+ * \brief Transfer the Weibull distribution parameters, including the
+ * correlation from one match_collection to another.  No check to see
+ * that the parameters have been estimated.
+ */
+void MatchCollection::transferWeibull(
+  MatchCollection* from_collection,
+  MatchCollection* to_collection
+  ){
+  to_collection->eta_ = from_collection->eta_;
+  to_collection->beta_ = from_collection->beta_;
+  to_collection->shift_ = from_collection->shift_;
+  to_collection->correlation_ = from_collection->correlation_;
+}
+
+/**
+ * \brief Prints out the pepxml header to the output stream
+ * passed in as a parameter.
+ */
+
+void MatchCollection::printXmlHeader(
+  FILE* output,
+  const string& ms2file
+  ){
+  if (output == NULL) {
+    return;
+  }
+  time_t hold_time;
+  ENZYME_T enzyme = GlobalParams::getEnzyme();
+  const char* enz_str = enzyme_type_to_string(enzyme);
+  string database = Params::GetString("protein-database");
+
+  MASS_TYPE_T isotopic_mass_type = GlobalParams::getIsotopicMass();
+  MASS_TYPE_T fragment_mass_type = GlobalParams::getFragmentMass();
+
+  const char* isotopic_mass;
+  const char* fragment_mass;
+  DIGEST_T digest = GlobalParams::getDigestion();
+  int max_num_internal_cleavages;
+  int min_number_termini;
+  int missed_cleavage = GlobalParams::getMissedCleavages();
+  if (missed_cleavage){
+    max_num_internal_cleavages = GlobalParams::getMaxLength();
+  } else {
+    max_num_internal_cleavages = 0;
+  }
+
+  if (digest == FULL_DIGEST){
+    min_number_termini = 2;
+  } else if (digest == PARTIAL_DIGEST){
+    min_number_termini = 1;
+  } else {
+    min_number_termini = 0;
+  }
+  
+  if (isotopic_mass_type == AVERAGE){
+    isotopic_mass = "average";
+  } else {
+    isotopic_mass = "monoisotopic";
+  }
+
+  if (fragment_mass_type == AVERAGE){
+    fragment_mass =  "average";
+  } else {
+    fragment_mass =  "monoisotopic";
+  }
+
+  char* absolute_database_path = NULL;
+  if (!database.empty()) {
+#if DARWIN
+    char path_buffer[PATH_MAX];
+    absolute_database_path =  realpath(database.c_str(), path_buffer);
+#else
+    absolute_database_path =  realpath(database.c_str(), NULL);
+#endif
+  }
+  
+  hold_time = time(0);
+  const char* xsi = "http://www.w3.org/2001/XMLSchema-instance";
+  const char* xmlns = "http://regis-web.systemsbiology.net/pepXML";
+  const char* schema_location = "/usr/local/tpp/schema/pepXML_v110.xsd";
+  fprintf(output, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+  fprintf(output, "<?xml-stylesheet type=\"text/xsl\" href=\"\"?>\n");
+  fprintf(output, "<msms_pipeline_analysis date=\"%s\" xmlns=\"%s\""
+          " xmlns:xsi=\"%s\" xsi:schemaLocation=\"%s %s\""
+          " summary_xml=\"\">\n",
+          StringUtils::RTrim(string(ctime(&hold_time))).c_str(),
+          xmlns, xsi, xmlns, schema_location);
+  fprintf(output, "<msms_run_summary base_name=\"%s\" msManufacturer=\"%s\" "
+          "msModel=\"%s\" msIonization=\"%s\" msAnalyzer=\"%s\" "
+          "msDectector=\"%s\" raw_data_type=\"%s\" raw_data=\"%s\" >\n",
+          "NA", // TODO, dummy value
+          "NA", // TODO, dummy value
+          "NA", // TODO, dummy value
+          "NA", // TODO, dummy value
+          "NA", // TODO, dummy value
+          "NA", // TODO, dummy value
+          "NA", // TODO, dummy value
+          "NA" // TODO, dummy value
+          );
+  fprintf(output, "<sample_enzyme name=\"%s\">\n</sample_enzyme>\n", enz_str);
+  fprintf(output, "<search_summary base_name=\"%s\" search_engine=\"%s\" "
+          "precursor_mass_type=\"%s\" fragment_mass_type=\"%s\" "
+          "out_data_type=\"%s\" out_data=\"%s\" search_id=\"%i\" >\n",
+          "NA", // TODO, dummy value
+          "Crux",
+          isotopic_mass, // isotopic mass type is precursor mass type?
+          fragment_mass,
+          "NA", // TODO, dummy value
+          "NA",
+          1 // TODO, dummy value
+          );
+  fprintf(output, "<search_database local_path=\"%s\" type=\"%s\" />\n", 
+          absolute_database_path, 
+          "AA");
+  fprintf(output, "<enzymatic_search_constraint enzyme=\"%s\" "
+          "max_num_internal_cleavages=\"%i\" min_number_termini=\"%i\"/>\n",
+          enz_str,
+          max_num_internal_cleavages,
+          min_number_termini);
+#ifndef DARWIN
+  free(absolute_database_path);
+#endif
+
+
+  char aa_str[2];
+  aa_str[1] = '\0';
+  int alphabet_size = (int)'A'+ ((int)'Z'-(int)'A');
+  MASS_TYPE_T isotopic_type = GlobalParams::getIsotopicMass();
+  int aa = 0;
+
+  // static amino acid modifications
+  for (char aa = 'A'; aa <= 'Z'; aa++) {
+    vector<const ModificationDefinition*> staticMods = ModificationDefinition::StaticMods(aa);
+    double aaMass = AminoAcidUtil::GetMass(aa, isotopic_type == MONO);
+    for (vector<const ModificationDefinition*>::const_iterator i = staticMods.begin();
+         i != staticMods.end();
+         i++) {
+      double modMass = (*i)->DeltaMass();
+      double totalMass = aaMass + modMass;
+      string termString;
+      switch ((*i)->Position()) {
+        case PEPTIDE_N: termString = "peptide_terminus=\"n\" "; break;
+        case PEPTIDE_C: termString = "peptide_terminus=\"c\" "; break;
+      }
+      fprintf(output, "<aminoacid_modification aminoacid=\"%c\" mass=\"%s\" "
+                      "massdiff=\"%s\" variable=\"N\" %s/>\n",
+              aa,
+              StringUtils::ToString(totalMass, Params::GetInt("mass-precision")).c_str(),
+              StringUtils::ToString(modMass, Params::GetInt("mod-precision")).c_str(),
+              termString.c_str());
+    }
+  }
+
+  // variable amino acid modifications
+  vector<const ModificationDefinition*> varMods = ModificationDefinition::VarMods();
+  for (vector<const ModificationDefinition*>::const_iterator i = varMods.begin();
+       i != varMods.end();
+       i++) {
+    for (set<char>::const_iterator j = (*i)->AminoAcids().begin();
+         j != (*i)->AminoAcids().end();
+         j++) {
+      double modMass = (*i)->DeltaMass();
+      double aaMass = AminoAcidUtil::GetMass(*j, isotopic_type == MONO);
+      double totalMass = aaMass + modMass;
+      string termString;
+      switch ((*i)->Position()) {
+        case PEPTIDE_N: termString = "peptide_terminus=\"n\" "; break;
+        case PEPTIDE_C: termString = "peptide_terminus=\"c\" "; break;
+      }
+      fprintf(output, "<aminoacid_modification aminoacid=\"%c\" mass=\"%s\" "
+                      "massdiff=\"%s\" variable=\"Y\" %s/>\n",
+              *j,
+              StringUtils::ToString(totalMass, Params::GetInt("mass-precision")).c_str(),
+              StringUtils::ToString(modMass, Params::GetInt("mod-precision")).c_str(),
+              termString.c_str());
+    }
+  }
+
+  for (vector<const Param*>::const_iterator i = Params::Begin(); i != Params::End(); i++) {
+    string name = (*i)->GetName();
+    if ((*i)->IsVisible() &&
+        name != "mod" && name != "cmod" && name != "nmod") {
+      fprintf(output, "<parameter name=\"%s\" value=\"%s\"/>\n",
+              name.c_str(), (*i)->GetString().c_str());
+    }
+  }
+  fprintf(output, "</search_summary>\n");
+}
+
+/**
+ * Write header for .sqt file.  Assumes only sequest-search is writing
+ * this file type.
+ */
+void MatchCollection::printSqtHeader(
+ FILE* output, 
+ const char* type, 
+ string database,
+ int num_proteins,
+ bool exact_pval_search){  
+  if( output == NULL ){
+    return;
+  }
+
+  time_t hold_time;
+  hold_time = time(0);
+
+  bool decoy = false;
+  if( strcmp(type, "decoy") == 0 ){
+    decoy = true;
+  }
+
+  fprintf(output, "H\tSQTGenerator Crux\n");
+  fprintf(output, "H\tSQTGeneratorVersion 1.0\n");
+  fprintf(output, "H\tComment Crux was written by...\n");
+  fprintf(output, "H\tComment ref...\n");
+  fprintf(output, "H\tStartTime\t%s", ctime(&hold_time));
+  fprintf(output, "H\tEndTime                               \n");
+
+  fprintf(output, "H\tDatabase\t%s\n", database.c_str());
+
+  if(decoy){
+  fprintf(output, "H\tComment\tDatabase shuffled; these are decoy matches\n");
+  }
+  fprintf(output, "H\tDBSeqLength\t?\n");
+  fprintf(output, "H\tDBLocusCount\t%d\n", num_proteins);
+
+  MASS_TYPE_T mass_type = GlobalParams::getIsotopicMass();
+  char temp_str[64];
+  mass_type_to_string(mass_type, temp_str);
+  fprintf(output, "H\tPrecursorMasses\t%s\n", temp_str);
+  
+  mass_type = get_mass_type_parameter("fragment-mass");
+  mass_type_to_string(mass_type, temp_str);
+  fprintf(output, "H\tFragmentMasses\t%s\n", temp_str); //?????????
+
+  double tol = Params::GetDouble("precursor-window");
+  fprintf(output, "H\tAlg-PreMasTol\t%.1f\n",tol);
+  fprintf(output, "H\tAlg-FragMassTol\t%.2f\n", 
+          Params::GetDouble("mz-bin-width") / 2.0);
+  fprintf(output, "H\tAlg-XCorrMode\t0\n");
+
+  fprintf(output, "H\tComment\tpreliminary algorithm %s\n", 
+          Params::GetString("prelim-score-type").c_str());
+
+  fprintf(output, "H\tComment\tfinal algorithm %s\n",
+          Params::GetString("score-type").c_str());
+
+  int aa = 0;
+  char aa_str[2];
+  aa_str[1] = '\0';
+  int alphabet_size = (int)'A' + ((int)'Z'-(int)'A');
+  MASS_TYPE_T isotopic_type = GlobalParams::getIsotopicMass();
+
+  for(aa = (int)'A'; aa < alphabet_size -1; aa++){
+    aa_str[0] = (char)aa;
+    double mod = Params::GetDouble(aa_str);
+    if( mod != 0 ){
+      //      double mass = mod + get_mass_amino_acid(aa, isotopic_type);
+      double mass = get_mass_amino_acid(aa, isotopic_type);
+      fprintf(output, "H\tStaticMod\t%s=%.3f\n", aa_str, mass);
+    }
+  }
+  // print dynamic mods, if any
+  // format DiffMod <AAs><symbol>=<mass change>
+  AA_MOD_T** aa_mod_list = NULL;
+  int num_mods = get_all_aa_mod_list(&aa_mod_list);
+  int mod_idx = 0;
+  for(mod_idx = 0; mod_idx < num_mods; mod_idx++){
+    
+    AA_MOD_T* aamod = aa_mod_list[mod_idx];
+    string aa_list_str = aa_mod_get_aa_list_string(aamod);
+    char aa_symbol = aa_mod_get_symbol(aamod);
+    double mass_dif = aa_mod_get_mass_change(aamod);
+
+    fprintf(output, "H\tDiffMod\t%s%c=%+.2f\n", aa_list_str.c_str(), 
+            aa_symbol, mass_dif);
+  }
+  num_mods = get_c_mod_list(&aa_mod_list);
+  for(mod_idx = 0; mod_idx < num_mods; mod_idx++){
+    AA_MOD_T* aamod = aa_mod_list[mod_idx];
+    char aa_symbol = aa_mod_get_symbol(aamod);
+
+    fprintf(output, "H\tComment\tMod %c is a C-terminal modification\n",
+            aa_symbol);
+  }
+
+  num_mods = get_n_mod_list(&aa_mod_list);
+  for(mod_idx = 0; mod_idx < num_mods; mod_idx++){
+    AA_MOD_T* aamod = aa_mod_list[mod_idx];
+    char aa_symbol = aa_mod_get_symbol(aamod);
+
+    fprintf(output, "H\tComment\tMod %c is a N-terminal modification\n",
+            aa_symbol);
+  }
+
+
+
+  //for letters in alphabet
+  //  double mod = Params::GetDouble(letter);
+  //  if mod != 0
+  //     double mass = mod + getmass(letter);
+  //     fprintf(output, "H\tStaticMod\t%s=%.3f\n", letter, mass);
+  //  fprintf(output, "H\tStaticMod\tC=160.139\n");
+  fprintf(output, "H\tAlg-DisplayTop\t%d\n", 
+          //          Params::GetInt("max-sqt-result")); 
+          Params::GetInt("top-match")); 
+  // this is not correct for an sqt from analzyed matches
+
+  ENZYME_T enzyme = get_enzyme_type_parameter("enzyme");
+  DIGEST_T digestion = get_digest_type_parameter("digestion");
+  const char* enz_str = enzyme_type_to_string(enzyme);
+  const char* dig_str = digest_type_to_string(digestion);
+  char custom_str[SMALL_BUFFER];
+  if( enzyme == CUSTOM_ENZYME){
+    string rule = Params::GetString("custom-enzyme");
+    sprintf(custom_str, ", custom pattern: %s", rule.c_str());
+  }else{
+    custom_str[0] = 0;
+  }
+  fprintf(output, "H\tEnzymeSpec\t%s-%s%s\n", enz_str, dig_str, custom_str);
+  // write a comment that says what the scores are
+  fprintf(output, "H\tLine fields: S, scan number, scan number, "
+          "charge, 0, server, experimental mass, total ion intensity, "
+          "lowest Sp, number of matches\n");
+  if (exact_pval_search) {
+    fprintf(output, "H\tLine fields: M, rank by xcorr score, rank by sp score, "
+            "peptide mass, deltaCn, exact P-value, recalibrated xcorr, sp score, number ions matched, "
+            "total ions compared, sequence, validation status\n");
+  } else {
+    fprintf(output, "H\tLine fields: M, rank by xcorr score, rank by sp score, "
+            "peptide mass, deltaCn, xcorr score, sp score, number ions matched, "
+            "total ions compared, sequence, validation status\n");
+  }
+}
+
+/**
+ * Print the header line for a tab-delimited file.
+ */
+void MatchCollection::printTabHeader(FILE* output){
+
+  if( output == NULL ){
+    return;
+  }
+
+  int column_idx;
+  for (column_idx = 0; column_idx < NUMBER_MATCH_COLUMNS; column_idx++) {
+    fprintf(output, "%s", get_column_header(column_idx));
+    if (column_idx < NUMBER_MATCH_COLUMNS - 1) {
+      fprintf(output, "\t");
+    } else {
+      fprintf(output, "\n");
+    }
+  }
+}
+
+
+/**
+ * Print Footer lines for xml files
+ */
+void MatchCollection::printXmlFooter(FILE* output){
+  if (output == NULL ){
+    return;
+  }
+  
+  fprintf(output, "</msms_run_summary>\n");
+  fprintf(output, "</msms_pipeline_analysis>\n");
+}
+
+
+/**
+ * \brief Print the given match collection for several spectra to
+ * xml files only. Takes the spectrum information from the
+ * matches in the collection. At least for now, prints all matches in
+ * the collection rather than limiting by top-match parameter. 
+ */
+void MatchCollection::printMultiSpectraXml(PepXMLWriter* output) {
+  carp(CARP_DETAILED_DEBUG, "Writing matches to xml file");
+  // reuse these for each match
+  vector<string> protein_ids;
+  vector<string> protein_descriptions;
+  double* scores = new double[NUMBER_SCORER_TYPES];
+
+  for (vector<Crux::Match*>::iterator i = match_.begin(); i != match_.end(); i++) {
+    Match* cur_match = *i;
+    bool is_decoy = cur_match->getNullPeptide();
+    Spectrum* spectrum = cur_match->getSpectrum();
+    double cur_ln_experiment_size=0;
+    if (!is_decoy) {
+      int* ranks = new int[NUMBER_SCORER_TYPES];
+      ranks[XCORR] = -1;
+      char* peptide_sequence = cur_match->getSequence();
+      char* mod_peptide_sequence = cur_match->getModSequenceStrWithMasses(
+                             get_mass_format_type_parameter("mod-mass-format"));
+      Peptide* peptide = cur_match->getPeptide();
+      char* flanking_aas = peptide->getFlankingAAs();
+      int num_proteins = peptide->getProteinInfo(protein_ids, protein_descriptions);
+      for (int score_idx = 0; score_idx < NUMBER_SCORER_TYPES; score_idx++) {
+        if (scored_type_[score_idx]) {
+          scores[score_idx] = cur_match->getScore((SCORER_TYPE_T)score_idx);
+          ranks[score_idx] = cur_match->getRank((SCORER_TYPE_T)score_idx);
+        }
+      }
+      unsigned num_matches = (!isDecoy()) ? getTargetExperimentSize() : getExperimentSize();
+      output->writePSM(spectrum->getFirstScan(),
+        spectrum->getFilename(),
+        cur_match->getNeutralMass(),
+        cur_match->getCharge(),
+        ranks,
+        peptide_sequence,
+        mod_peptide_sequence,
+        peptide->calcModifiedMass(),
+        num_proteins,
+        flanking_aas,
+        protein_ids,
+        protein_descriptions,
+        scored_type_,
+        scores,
+        num_matches);
+    }
+  }
+  
+}
+
+/**
+ * \brief Print the psm features to file in xml format
+ *
+ * Prints a spectrum_query tag which encompasses the search_hit tag
+ * which represents peptide to spectra match.
+ *
+ * returns true, if succesfully printed xml format of PSMs, else false
+ *
+ */
+
+bool MatchCollection::printXml(
+  PepXMLWriter* output,
+  int top_match,
+  Spectrum* spectrum,
+  SCORER_TYPE_T main_score
+  )
+{
+  if ( output == NULL || spectrum == NULL || match_.empty()){
+    return false;
+  }
+
+  // calculate delta_cn and populate fields in the matches
+  calculateDeltaCn();
+
+  // for deciding when to quit
+  int count = 0;
+  int last_rank = 0;
+
+  // reuse these for each match
+  vector<string> protein_ids;
+  vector<string> protein_descriptions;
+  bool* scores_computed = new bool[NUMBER_SCORER_TYPES];
+  
+  for(int score_idx = 0; score_idx < NUMBER_SCORER_TYPES; score_idx++){
+    scores_computed[score_idx] = false;
+  }
+  scores_computed[main_score] = true;
+  if (scored_type_[SP]) {
+    scores_computed[SP] = true;
+  }
+  if (scored_type_[DELTA_CN]) {
+    scores_computed[DELTA_CN] = true;
+  }
+  if (scored_type_[BY_IONS_MATCHED]) {
+    scores_computed[BY_IONS_MATCHED] = true;
+  }
+  if (scored_type_[BY_IONS_TOTAL]) {
+    scores_computed[BY_IONS_TOTAL] = true;
+  }
+  scores_computed[TIDE_SEARCH_EXACT_PVAL] = exact_pval_search_;
+  scores_computed[TIDE_SEARCH_REFACTORED_XCORR] = exact_pval_search_;
+  scores_computed[main_score] = !exact_pval_search_;
+
+  double* scores = new double[NUMBER_SCORER_TYPES];
+  int* ranks = new int[NUMBER_SCORER_TYPES];
+
+  Match* match = NULL;
+  // create match iterator
+  // true: return match in sorted order of main_score type
+  MatchIterator* match_iterator = new MatchIterator(this, main_score, true);
+  // iterate over matches
+  while (match_iterator->hasNext()) {
+    match = match_iterator->next();
+    int cur_rank = match->getRank(main_score);   
+    if (scored_type_[XCORR]) {
+      ranks[XCORR] = match->getRank(XCORR);
+    }
+    if (scored_type_[SP]) {
+      ranks[SP] = match->getRank(SP);
+      scores[SP] = match->getScore(SP);
+    }
+    if (scored_type_[DELTA_CN]) {
+      scores[DELTA_CN] = match->getScore(DELTA_CN);
+    }
+    if (scored_type_[BY_IONS_MATCHED]) {
+      scores[BY_IONS_MATCHED] = match->getScore(BY_IONS_MATCHED);
+    }
+    if (scored_type_[BY_IONS_TOTAL]) {
+      scores[BY_IONS_TOTAL] = match->getScore(BY_IONS_TOTAL);
+    }
+    // print if we haven't reached the limit
+    // or if we are at the limit but this match is a tie with the last
+    if (count < top_match || last_rank == cur_rank) {
+      char* peptide_sequence = match->getSequence();
+      char* mod_peptide_sequence = match->getModSequenceStrWithMasses(
+                            get_mass_format_type_parameter("mod-mass-format"));
+      Peptide* peptide = match->getPeptide();
+      char* flanking_aas = peptide->getFlankingAAs();
+      int num_proteins = peptide->getProteinInfo(protein_ids, 
+                                                 protein_descriptions);
+      for(int score_idx=0; score_idx < NUMBER_SCORER_TYPES; score_idx++){
+        if(scored_type_[score_idx]) {
+          scores[score_idx] = match->getScore((SCORER_TYPE_T)score_idx);
+        }
+      }   
+      unsigned num_matches = (!isDecoy()) ? getTargetExperimentSize() : getExperimentSize();
+      output->writePSM(spectrum->getFirstScan(),
+        spectrum->getFilename(),
+        zstate_.getNeutralMass(),
+        zstate_.getCharge(),
+        ranks,
+        peptide_sequence,
+        mod_peptide_sequence,
+        peptide->calcModifiedMass(),
+        num_proteins,
+        flanking_aas,
+        protein_ids,
+        protein_descriptions,
+        scores_computed,
+        scores,
+        num_matches);
+      count++;
+      last_rank = cur_rank;
+      free(peptide_sequence);
+      free(mod_peptide_sequence);
+      free(flanking_aas);
+    } else if( count >= top_match && last_rank != cur_rank ) {
+      break;
+    } // else see if there is one more tie to print
+
+  }// next match
+  
+  carp(CARP_DETAILED_DEBUG, "printed %d out of %d xml matches", 
+       count, match_.size());
+
+  delete match_iterator;
+  delete [] scores_computed;
+  delete [] scores;
+  delete [] ranks;
+
+  return true;
+}
+
+
+/**
+ * \brief Print the psm features to file in sqt format.
+ *
+ * Prints one S line, 'top_match' M lines, and one locus line for each
+ * peptide source of each M line.
+ * Assumes one spectrum per match collection.  Only crux
+ * sequset-search produces sqt files so the two scores are always Sp
+ * and xcorr.
+ * Possible side effects: Calculates delta_cn and stores in each match
+ *\returns true, if sucessfully print sqt format of the PSMs, else false 
+ */
+bool MatchCollection::printSqt(
+  FILE* output,                  ///< the output file -out
+  int top_match,                 ///< the top matches to output -in
+  Spectrum* spectrum           ///< the spectrum to print sqt -in
+  )
+{
+
+  if( output == NULL || spectrum == NULL || match_.empty() ){
+    return false;
+  }
+
+  SpectrumZState& zstate = zstate_; 
+  int num_matches = experiment_size_;
+
+  // calculate delta_cn and populate fields in the matches
+  calculateDeltaCn();
+
+  // First, print spectrum info
+  spectrum->printSqt(output, num_matches, zstate);
+  
+  Match* match = NULL;
+  
+  // create match iterator
+  // true: return match in sorted order of main_score type
+  MatchIterator* match_iterator =
+    new MatchIterator(this, XCORR, true);
+  
+  // Second, iterate over matches, prints M and L lines
+  while(match_iterator->hasNext()){
+    match = match_iterator->next();    
+
+    // print only up to max_rank_result of the matches
+    if( match->getRank(XCORR) > top_match ){
+      break;
+    }// else
+
+    match->printSqt(output);
+
+  }// next match
+  
+  // make sure top_scoring_sp_ has been set
+  if( top_scoring_sp_ == NULL){
+    carp(CARP_DEBUG, "Top scoring SP was not set.");
+  } else if( top_scoring_sp_->getRank(XCORR) > top_match ){
+    // print the match with Sp rank==1 if its xcorr rank > top_match rank.  
+    top_scoring_sp_->printSqt(output);
+  }
+  
+  delete match_iterator;
+  
+  return true;
+}
+
+/**
+ * \brief Print the psm features to file in tab delimited format.
+ *
+ * Matches will be sorted by main_score and the ranks of those scores
+ * will be used to determine how many matches are printed for each
+ * spectrum.
+ * \returns true, if sucessfully print tab-delimited format of the
+ * PSMs, else false  
+ */
+bool MatchCollection::printTabDelimited(
+  MatchFileWriter* output,                  ///< the output file -out
+  int top_match,                 ///< the top matches to output -in
+  Spectrum* spectrum,          ///< the spectrum to print sqt -in
+  SCORER_TYPE_T main_score       ///< the main score to report -in
+  )
+{
+
+  if( output == NULL || spectrum == NULL || match_.empty() ){
+    return false;
+  }
+  int num_target_matches = getTargetExperimentSize();
+  int num_decoy_matches = getExperimentSize();
+
+  Match* match = NULL;
+  
+  // create match iterator
+  // true: return match in sorted order of main_score type
+  MatchIterator* match_iterator = 
+    new MatchIterator(this, main_score, true);
+  int count = 0;
+  int last_rank = 0;
+
+  // iterate over matches
+  while(match_iterator->hasNext()){
+    match = match_iterator->next();
+    int cur_rank = match->getRank(main_score);
+
+    // print if we haven't reached the limit
+    // or if we are at the limit but this match is a tie with the last
+    if( count < top_match || last_rank == cur_rank ){
+
+      match->printTab(this, output, spectrum, num_target_matches, num_decoy_matches);
+      count++;
+      last_rank = cur_rank;
+    } else if( count >= top_match && last_rank != cur_rank ) {
+      break;
+    } // else see if there is one more tie to print
+
+  }// next match
+  
+  carp(CARP_DETAILED_DEBUG, "printed %d out of %d tab matches", 
+       count, num_target_matches);
+
+  delete match_iterator;
+  
+  return true;
+}
+
+/**
+ * Retrieve the calibration parameter eta.
+ */
+FLOAT_T MatchCollection::getCalibrationEta()
+{
+  return eta_;
+}
+
+/**
+ * Retrieve the calibration parameter beta.
+ */
+FLOAT_T MatchCollection::getCalibrationBeta()
+{
+  return beta_;
+}
+
+/**
+ * Retrieve the calibration parameter shift.
+ */
+FLOAT_T MatchCollection::getCalibrationShift()
+{
+  return shift_;
+}
+
+/**
+ * Retrieve the calibration correlation.
+ */
+FLOAT_T MatchCollection::getCalibrationCorr()
+{
+  return correlation_;
+}
+
+/**
+ * \brief Print the given match collection for several spectra to
+ * tab-delimited files only.  Takes the spectrum information from the
+ * matches in the collection.  At least for now, prints all matches in
+ * the collection rather than limiting by top-match parameter.  Uses
+ * SP as preliminary score and XCORR as main score.
+ */
+void MatchCollection::printMultiSpectra(
+ MatchFileWriter* tab_file, 
+ MatchFileWriter* decoy_tab_file
+) {
+  carp(CARP_DETAILED_DEBUG, "Writing matches to file");
+
+  // if file location is target (i.e. tdc=T), print all to target
+  MatchFileWriter* decoy_file = decoy_tab_file;
+  if (Params::GetString("estimation-method") == "tdc") {
+    decoy_file = tab_file;
+  }
+
+  // for each match, get spectrum info, determine if decoy, print
+  for (vector<Crux::Match*>::iterator i = match_.begin(); i != match_.end(); i++) {
+    Match* cur_match = *i;
+    bool is_decoy = cur_match->getNullPeptide();
+    FLOAT_T num_psm_per_spec = cur_match->getLnExperimentSize();
+    num_psm_per_spec = expf(num_psm_per_spec) + 0.5; // round to nearest int
+    int num_target_psm_per_spec = cur_match->getTargetExperimentSize();
+
+    cur_match->printTab(this, (is_decoy ? decoy_file : tab_file),
+                        cur_match->getSpectrum(),
+                        (int)num_psm_per_spec, num_target_psm_per_spec);
+  }
+}
+
+/**
+ * \brief Adds the match to match_collection by copying the pointer.
+ * 
+ * \returns true if successfully adds the match to the
+ * match_collection, else false 
+ */
+bool MatchCollection::addMatch(
+  Match* match ///< the match to add -in
+  )
+{
+  if( match == NULL ){
+    carp(CARP_FATAL, "Cannot add NULL match.");
+  }
+
+  // add a new match to array
+  match_.push_back(match);
+  match->incrementPointerCount();
+  
+  return true;
+}
+
+/**
+ * Adds the match object to match_collection
+ * Only for post_process (i.e. post search) match_collections.  Keeps
+ * track of all peptides in a hash table.
+ * \returns true if successfully adds the match to the
+ * match_collection, else false 
+ */
+// this method renamed so that a more general add_match_to_match_collection could be implemented
+bool MatchCollection::addMatchToPostMatchCollection(
+  Match* match ///< the match to add -in
+  )
+{
+  if( match == NULL ){
+    carp(CARP_FATAL, "Cannot add NULL match to NULL collection.");
+  }
+
+  // only for post_process_collections
+  if(!post_process_collection_){
+    carp(CARP_ERROR, "Must be a post process match collection to add a match.");
+    return false;
+  }
+
+  // add a new match to array
+  match_.push_back(match);
+  match->incrementPointerCount();
+  
+  // DEBUG, print total peptided scored so far
+  if(match_.size() % 1000 == 0){
+    carp(CARP_DEBUG, "parsed PSM: %d", match_.size());
+  }
+  
+  return true;
+}
+
+/**
+ * \brief Calculate the delta_cn of each match and populate the field.
+ * 
+ * Delta_cn is the normalized difference between xcorrs of different ranks.
+ * match[i] = (match[i] - match[i+1]) / match[i].
+ * Sorts match_collection by xcorr, if necessary.
+ * 
+ */
+bool MatchCollection::calculateDeltaCn() {
+  if (scored_type_[DELTA_CN] && scored_type_[DELTA_LCN]) {
+    return false;
+  }
+
+  SCORER_TYPE_T type = XCORR;
+  if (!scored_type_[type]) {
+    type = TIDE_SEARCH_EXACT_PVAL;
+    if (!scored_type_[type]) {
+      carp(CARP_WARNING,
+           "Delta_cn not calculated because match collection not scored for xcorr");
+      return false;
+    }
+  }
+
+  vector<FLOAT_T> scores;
+  for (vector<Match*>::iterator i = match_.begin(); i != match_.end(); i++) {
+    scores.push_back((*i)->getScore(type));
+  }
+  vector< pair<FLOAT_T, FLOAT_T> > deltaCns = calculateDeltaCns(scores, type);
+
+  for (size_t i = 0; i < deltaCns.size(); i++) {
+    match_[i]->setScore(DELTA_CN, deltaCns[i].first);
+    match_[i]->setScore(DELTA_LCN, deltaCns[i].second);
+  }
+
+  scored_type_[DELTA_CN] = scored_type_[DELTA_LCN] = true;
+  return true;
+}
+
+vector< pair<FLOAT_T, FLOAT_T> > MatchCollection::calculateDeltaCns(
+  vector<FLOAT_T> scores,
+  SCORER_TYPE_T type
+) {
+  vector< pair<FLOAT_T, FLOAT_T> > deltaCns(scores.size(), make_pair(0, 0));
+  if (scores.empty()) {
+    return deltaCns;
+  }
+
+  map< const FLOAT_T*, pair<FLOAT_T, FLOAT_T>* > scorePtrs;
+  for (size_t i = 0; i < scores.size(); i++) {
+    scorePtrs[&scores[i]] = &deltaCns[i];
+  }
+
+  if (type != TIDE_SEARCH_EXACT_PVAL) {
+    // Higher is better - sort descending
+    std::sort(scores.begin(), scores.end(), std::greater<FLOAT_T>());
+  } else {
+    // Lower is better - sort ascending
+    std::sort(scores.begin(), scores.end(), std::less<FLOAT_T>());
+  }
+  
+  int top_match = Params::GetInt("top-match");
+
+//  FLOAT_T last = scores.back();
+  FLOAT_T last = scores[min(top_match, (int) scores.size()) - 1];
+  for (vector<FLOAT_T>::const_iterator i = scores.begin(); i != scores.end(); i++) {
+    vector<FLOAT_T>::const_iterator next = (i != scores.end() - 1) ? i + 1 : i;
+    FLOAT_T deltaCn, deltaLCn;
+    switch (type) {
+      default:
+        deltaCn = (*i - *next) / max(*i, (FLOAT_T)1.0);
+        deltaLCn = (*i - last) / max(*i, (FLOAT_T)1.0);
+        break;
+      case TIDE_SEARCH_EXACT_PVAL:
+        deltaCn = -log10(*i) + log10(*next);
+        deltaLCn = -log10(*i) + log10(last);
+        break;
+    }
+    scorePtrs[&*i]->first = deltaCn;
+    scorePtrs[&*i]->second = deltaLCn;
+  }
+  return deltaCns;
+}
+
+/**********************************
+ * match_collection get, set methods
+ **********************************/
+
+/**
+ * \returns true if the match_collection only contains decoy matches,
+ * else (all target or mixed) returns false.
+ */
+bool MatchCollection::isDecoy() {
+  return null_peptide_collection_;
+}
+
+/**
+ * Try setting the match collection's charge.  Successful if the
+ * current charge is 0 (i.e. hasn't yet been set) or if the current
+ * charge is the same as the given value.  Otherwise, returns false
+ *
+ * \returns true if the match_collection's charge state was changed.
+ */
+
+bool MatchCollection::setZState(
+  SpectrumZState& zstate ///< new zstate
+  ) {
+  if (getCharge() == 0) {
+    zstate_ = zstate;
+    return true;
+  } else {
+    //error
+    carp(CARP_WARNING, "Cannot change the zstate of a match collection "
+        "once it has been set.");
+    return false;
+  }
+}
+
+/**
+ * Extract a given type of score into an array.  The array is
+ * allocated here and must be freed by the caller.
+ */
+FLOAT_T* MatchCollection::extractScores(
+  SCORER_TYPE_T       score_type ///< Type of score to extract.
+)
+{
+  FLOAT_T* return_value = (FLOAT_T*)mycalloc(match_.size(),
+                                             sizeof(FLOAT_T));
+
+  MatchIterator* match_iterator =
+    new MatchIterator(this, score_type, false);
+  int idx = 0;
+  while(match_iterator->hasNext()){
+    Match* match = match_iterator->next();
+    return_value[idx] = match->getScore(score_type);
+    idx++;
+  }
+  delete match_iterator;
+
+  return(return_value);
+}
+
+/**
+ * Given a hash table that maps from a score to its q-value, assign
+ * q-values to all of the matches in a given collection.
+ */
+void MatchCollection::assignQValues(
+  const map<FLOAT_T, FLOAT_T>* score_to_qvalue_hash,
+  SCORER_TYPE_T score_type,
+  SCORER_TYPE_T derived_score_type
+){
+
+  // Iterate over the matches filling in the q-values
+  MatchIterator* match_iterator = 
+    new MatchIterator(this, score_type, false);
+
+  while(match_iterator->hasNext()){
+    Match* match = match_iterator->next();
+    FLOAT_T score = match->getScore(score_type);
+
+    FLOAT_T qvalue;
+    // If the score is not a number, punt.
+    if ( isinf(score) || isnan(score) ) {
+      carp(CARP_DEBUG, "Found inf or nan score.");
+      qvalue = numeric_limits<double>::quiet_NaN();
+    } else {
+      // Retrieve the corresponding q-value.
+      map<FLOAT_T, FLOAT_T>::const_iterator map_position 
+	= score_to_qvalue_hash->find(score);
+      if (map_position == score_to_qvalue_hash->end()) {
+	carp(CARP_FATAL,
+	     "Cannot find q-value corresponding to score of %g.",
+	     score);
+      }
+      qvalue = map_position->second;
+    }
+    match->setScore(derived_score_type, qvalue);
+  }
+  scored_type_[derived_score_type] = true;
+  delete match_iterator;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
+
diff --git a/src/model/MatchCollection.h b/src/model/MatchCollection.h
new file mode 100644
index 0000000..6b13e25
--- /dev/null
+++ b/src/model/MatchCollection.h
@@ -0,0 +1,387 @@
+/**
+ * \file MatchCollection.h 
+ * $Revision: 1.38 $
+ * \brief A set of peptide spectrum matches for one spectrum.
+ *
+ * Object for given a database and a spectrum, generate all match objects
+ * Creating a match collection generates all matches (searches a
+ * spectrum against a database.
+ */
+#ifndef MATCH_COLLECTION_H
+#define MATCH_COLLECTION_H
+
+
+#include <algorithm>
+#include <math.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+#include <map>
+#include <time.h>
+#include "io/carp.h"
+#include "Spectrum.h"
+#include "io/SpectrumCollection.h"
+#include "Ion.h"
+#include "IonSeries.h"
+#include "util/crux-utils.h"
+#include "model/objects.h"
+#include "parameter.h"
+#include "Scorer.h" 
+#include "Match.h"
+#include "PeptideSrc.h"
+#include "ProteinIndex.h"
+#include "util/modifications.h"
+#include "ModifiedPeptidesIterator.h"
+#include "io/MatchFileWriter.h"
+#include "MatchIterator.h"
+#include "io/PepXMLWriter.h"
+
+using namespace std;
+
+static const int _PSM_SAMPLE_SIZE = 500;
+///< max number of peptides a single match collection can hold
+
+class MatchCollection {
+ friend class MatchIterator;
+ protected:
+  std::vector<Crux::Match*> match_; ///< array of match object
+  int experiment_size_;  ///< total matches before any truncation
+  int target_experiment_size_; ///< total target matches for same spectrum
+  SpectrumZState zstate_; ///< zstate of the associated spectrum
+  bool null_peptide_collection_; ///< are the peptides shuffled
+  bool scored_type_[NUMBER_SCORER_TYPES]; 
+                        ///< TRUE if matches have been scored by the type
+  SCORER_TYPE_T last_sorted_; 
+    ///< the last type by which it's been sorted ( -1 if unsorted)
+  bool iterator_lock_; 
+    ///< has an itterator been created? if TRUE can't manipulate matches
+
+  bool has_distinct_matches_; ///< does the match collection have distinct matches?
+
+  // Values for fitting the Weibull distribution
+  FLOAT_T eta_;  ///< The eta parameter for the Weibull distribution.
+  FLOAT_T beta_; ///< The beta parameter for the Weibull distribution.
+  FLOAT_T shift_; ///< The location parameter for the Weibull distribution.
+  FLOAT_T correlation_; ///< The correlation parameter for the Weibull distribution.
+  vector<FLOAT_T> xcorrs_; ///< xcorrs to be used for weibull
+
+  // The following features (post_*) are only valid when
+  // post_process_collection boolean is true 
+  bool post_process_collection_; 
+  ///< Is this a post process match_collection?
+  Crux::Match* top_scoring_sp_; ///< the match with Sp rank == 1
+
+  /**
+   * initializes a MatchCollection object
+   */
+  void init();
+
+
+ public:
+  bool exact_pval_search_;
+
+  /**
+   * \brief Creates a new match collection with no matches in it.  Sets
+   * member variables from parameter.c.  The charge and null_collection
+   * variables are set with the method add_matches().  Search is
+   * conducted in add_matches().
+   *
+   * \returns A newly allocated match collection with member variables set.
+   */
+  MatchCollection(bool is_decoy = false);
+
+  /**
+   * free the memory allocated match collection
+   */
+  virtual ~MatchCollection();
+
+  /**
+   * sort the match collection by score_type(SP, XCORR, ... )
+   *\returns true, if successfully sorts the match_collection
+   */
+  void sort(
+    SCORER_TYPE_T score_type ///< the score type (SP, XCORR) -in
+    );
+
+  /**
+   * Rank matches in a collection based on the given score type.  
+   * Requires that match_collection was already scored for that score type.
+   * Rank 1, means highest score
+   * \returns true, if populates the match rank in the match collection
+   */
+  bool populateMatchRank(
+    SCORER_TYPE_T score_type ///< the score type (SP, XCORR) -in
+    );
+
+  /**
+   * match_collection get, set method
+   */
+  
+  /**
+   *\returns true, if the match collection has been scored by score_type
+   */
+  bool getScoredType(
+    SCORER_TYPE_T score_type ///< the score_type (MATCH_SP, MATCH_XCORR) -in
+  );
+
+  /**
+   * sets the score_type to value
+   */
+  void setScoredType(
+    SCORER_TYPE_T score_type, ///< the score_type (MATCH_SP, MATCH_XCORR) -in
+    bool value
+  );
+
+  void getCustomScoreNames(
+    std::vector<std::string>& custom_score_names
+  );
+
+  void preparePostProcess();
+
+  /**
+   *\returns true, if there is a  match_iterators instantiated by match collection 
+   */
+  bool getIteratorLock();
+
+  /**
+   *\returns the total match objects avaliable in current match_collection
+   */
+  int getMatchTotal();
+
+  /**
+   * Sets the total peptides searched in the experiment in match_collection
+   */
+  void setExperimentSize(int size);
+
+  /**
+   *\returns the total peptides searched in the experiment in match_collection
+   */
+  int getExperimentSize();
+
+  /**
+   * Sets the total number of target peptides searched for this
+   * spectrum.  Only to be used by decoy match collections.
+   */
+  void setTargetExperimentSize(int numMatches);
+
+  /**
+   * \returns the number of target matches that this spectrum had.
+   * Different than getExperimentSize() for decoy match collections.
+   */
+  int getTargetExperimentSize();
+
+  /**
+   * Set the filepath for all matches in the collection
+   * \returns the associated file idx
+   */
+  int setFilePath(
+    const std::string& file_path,  ///< File path to set
+    bool overwrite = false ///< Overwrite existing files?
+  );
+
+  /**
+   * \returns true if the match_collection only contains decoy matches,
+   * else (all target or mixed) returns false.
+   */
+  bool isDecoy();
+
+  /**
+   *\returns the charge of the spectrum that the match collection was created
+   */
+  int getCharge();
+
+  bool calculateDeltaCn();
+
+  // Take a vector of scores and return a vector of <deltaCn, deltaLCn>
+  static std::vector< std::pair<FLOAT_T, FLOAT_T> > calculateDeltaCns(
+    std::vector<FLOAT_T>, SCORER_TYPE_T type);
+
+  /**
+   * \brief Transfer the Weibull distribution parameters, including the
+   * correlation from one match_collection to another.  No check to see
+   * that the parameters have been estimated.
+   */
+  static void transferWeibull(
+    MatchCollection* from_collection,
+    MatchCollection* to_collection
+    );
+
+  /**
+   * \brief Add a single match to a collection.
+   * Only puts a copy of the pointer to the match in the
+   * match_collection, does not allocate a new match.
+   */
+  bool addMatch(
+    Crux::Match* match                        ///< add this match
+  );
+
+  /**
+   * \brief Print the given match collection for one spectrum to all
+   * appropriate files. 
+   */
+  void print(
+    Crux::Spectrum* spectrum, 
+    bool is_decoy,
+    FILE* psm_file,
+    FILE* sqt_file, 
+    FILE* decoy_file,
+    FILE* tab_file, 
+    FILE* decoy_tab_file
+  );
+
+  /**
+   * \brief Print the given match collection for several spectra to all
+   * appropriate files.  Takes the spectrum information from the matches
+   * in the collection.
+   */
+  void printMultiSpectra(
+    MatchFileWriter* tab_file, 
+    MatchFileWriter* decoy_tab_file
+    );
+
+  /**
+   * \brief Print the given match collection for several spectra to
+   * xml files only. Takes the spectrum information from the
+   * matches in the collection. At least for now, prints all matches in
+   * the collection rather than limiting by top-match parameter. 
+   */
+  void printMultiSpectraXml(
+    PepXMLWriter* output
+    );
+
+  /*
+   * Print the XML file header
+   */ 
+  static void printXmlHeader(FILE* outfile, const string& ms2file);
+
+  /*
+   * Print the SQT file header 
+   */
+  static void printSqtHeader(
+    FILE* outfile, 
+    const char* type, 
+    string database,
+    int num_proteins,
+    bool exact_pval_search_ = false
+    );
+
+  /*
+   * Print the tab delimited file header 
+   */
+  static void printTabHeader(
+    FILE* outfile
+    );
+
+  /*
+   * Print the XML file footer
+   */
+  static void printXmlFooter(
+    FILE* outfile
+    );
+
+  /**
+   * Print the psm features to output file up to 'top_match' number of
+   * top peptides among the match_collection in xml file format
+   * returns true, if sucessfully print xml format of the PSMs, else false
+   */
+  bool printXml(
+    PepXMLWriter* output,
+    int top_match,
+    Crux::Spectrum* spectrum,
+    SCORER_TYPE_T main_score
+    );
+
+  /**
+   * Print the psm features to output file upto 'top_match' number of 
+   * top peptides among the match_collection in sqt file format
+   *\returns true, if sucessfully print sqt format of the PSMs, else false 
+   */
+  bool printSqt(
+    FILE* output, ///< the output file -out
+    int top_match, ///< the top matches to output -in
+    Crux::Spectrum* spectrum ///< the spectrum to print sqt -in
+    );
+
+  /**
+   * Print the psm features to output file upto 'top_match' number of 
+   * top peptides among the match_collection in tab delimited file format
+   *\returns true, if sucessfully print sqt format of the PSMs, else false 
+   */
+  bool printTabDelimited(
+    MatchFileWriter* output, ///< the output file -out
+    int top_match, ///< the top matches to output -in
+    Crux::Spectrum* spectrum, ///< the spectrum to print sqt -in
+    SCORER_TYPE_T main_score  ///< the main score to report -in
+    );
+
+  /**
+   * Retrieve the calibration parameter eta.
+   */
+  FLOAT_T getCalibrationEta();
+
+  /**
+   * Retrieve the calibration parameter beta.
+   */
+  FLOAT_T getCalibrationBeta();
+
+  /**
+   * Retrieve the calibration parameter shift.
+   */
+  FLOAT_T getCalibrationShift();
+
+  /**
+   * Retrieve the calibration parameter correlation.
+   */
+  FLOAT_T getCalibrationCorr();
+
+  bool getHasDistinctMatches();
+  void setHasDistinctMatches(bool distinct_matches);
+
+  /**
+   * Try setting the match collection's zstate.  Successful if the
+   * current charge is 0 (i.e. hasn't yet been set) or if the current
+   * charge is the same as the given value.  Otherwise, returns false
+   *
+   * \returns true if the match_collection's zstate was changed.
+   */
+  bool setZState(
+    SpectrumZState& zstate ///< new zstate
+  );
+
+  /**
+   * Extract a given type of score into an array.  The array is
+   * allocated here and must be freed by the caller.
+   */
+  FLOAT_T* extractScores(
+    SCORER_TYPE_T       score_type ///< Type of score to extract.
+  );
+
+  /**
+   * Given a hash table that maps from a score to its q-value, assign
+   * q-values to all of the matches in a given collection.
+   */
+  void assignQValues(
+    const map<FLOAT_T, FLOAT_T>* score_to_qvalue_hash,
+    SCORER_TYPE_T score_type,
+    SCORER_TYPE_T derived_score_type
+    );
+
+  /*******************************************
+   * match_collection post_process extension
+   ******************************************/
+  bool addMatchToPostMatchCollection(Crux::Match* match);
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/MatchCollectionIterator.cpp b/src/model/MatchCollectionIterator.cpp
new file mode 100644
index 0000000..e69de29
diff --git a/src/model/MatchCollectionIterator.h b/src/model/MatchCollectionIterator.h
new file mode 100644
index 0000000..e69de29
diff --git a/src/model/MatchIterator.cpp b/src/model/MatchIterator.cpp
new file mode 100644
index 0000000..45fd5f3
--- /dev/null
+++ b/src/model/MatchIterator.cpp
@@ -0,0 +1,133 @@
+/**
+ * \file MatchIterator.cpp 
+ * $Revision: 1.38 $
+ * \brief An object that iterates over the match objects in the
+ * specified match_collection for the specified score type (SP, XCORR)
+ */
+#include "MatchIterator.h"
+
+/**
+ * Initializes a match iterator object.
+ */
+void MatchIterator::init() {
+
+  match_collection_ = NULL;
+  match_mode_ = (SCORER_TYPE_T)0;
+  match_idx_ = 0;
+  match_total_ = 0;
+}
+
+MatchIterator::MatchIterator(
+  MatchCollection* match_collection
+  ) {
+    // TODO (BF 06-Feb-08): Could we pass back an iterator with has_next==False
+  if (match_collection == NULL){
+    carp(CARP_FATAL, "Null match collection passed to match iterator");
+  }
+  // is there an existing iterator?
+  if(match_collection->iterator_lock_){
+    carp(CARP_FATAL, 
+         "Can only have one match iterator instantiated at a time");
+  }
+  
+  init();
+  // set items
+  match_collection_ = match_collection;
+  match_idx_ = 0;
+  match_total_ = match_collection->match_.size();
+
+
+
+  // ok lock up match collection
+  match_collection->iterator_lock_ = true;
+}
+
+
+/**
+ * create a new memory allocated match iterator, which iterates over
+ * match iterator only one iterator is allowed to be instantiated per
+ * match collection at a time 
+ *\returns a new memory allocated match iterator
+ */
+MatchIterator::MatchIterator(
+  MatchCollection* match_collection,
+  ///< the match collection to iterate -out
+  SCORER_TYPE_T score_type,
+  ///< the score type to iterate (LOGP_EXP_SP, XCORR) -in
+  bool sort_match  ///< should I return the match in sorted order?
+  )
+{
+  // TODO (BF 06-Feb-08): Could we pass back an iterator with has_next==False
+  if (match_collection == NULL){
+    carp(CARP_FATAL, "Null match collection passed to match iterator");
+  }
+  // is there an existing iterator?
+  if(match_collection->iterator_lock_){
+    carp(CARP_FATAL, 
+         "Can only have one match iterator instantiated at a time");
+  }
+  
+  // has the score type been populated in match collection?
+  if(!match_collection->scored_type_[score_type]){
+    const char* score_str = scorer_type_to_string(score_type);
+    carp(CARP_ERROR, "New match iterator for score type %s.", score_str);
+    carp(CARP_FATAL, 
+         "The match collection has not been scored for request score type.");
+  }
+  
+  init();
+  // set items
+  match_collection_ = match_collection;
+  match_mode_ = score_type;
+  match_idx_ = 0;
+  match_total_ = match_collection->match_.size();
+
+  // only sort if requested and match collection is not already sorted
+  if(sort_match){
+    match_collection->sort(score_type);
+  }
+
+
+  // ok lock up match collection
+  match_collection->iterator_lock_ = true;
+}
+
+/**
+ * free the memory allocated iterator
+ */
+MatchIterator::~MatchIterator()
+{
+  if (match_collection_ != NULL){
+    match_collection_->iterator_lock_ = false;
+  }
+}
+
+/**
+ * Does the match_iterator have another match struct to return?
+ *\returns true, if match iter has a next match, else False
+ */
+bool MatchIterator::hasNext()
+{
+  return match_idx_ < match_total_;
+}
+
+/**
+ * return the next match struct!
+ *\returns the match in decreasing score order for the match_mode(SCORER_TYPE_T)
+ */
+Crux::Match* MatchIterator::next()
+{
+  return match_collection_->match_[match_idx_++];
+}
+
+
+Crux::Match* MatchIterator::getMatch(int match_idx){
+  return (match_idx_ < match_total_) ? match_collection_->match_[match_idx] : NULL;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/MatchIterator.h b/src/model/MatchIterator.h
new file mode 100644
index 0000000..dbb8b73
--- /dev/null
+++ b/src/model/MatchIterator.h
@@ -0,0 +1,83 @@
+/**
+ * \file MatchIterator.h 
+ * $Revision: 1.38 $
+ * \brief An object that iterates over the match objects in the
+ * specified match_collection for the specified score type (SP, XCORR)
+ */
+#ifndef MATCHITERATOR_H
+#define MATCHITERATOR_H
+
+#include "MatchCollection.h"
+
+class MatchIterator {
+ protected:
+  MatchCollection* match_collection_; ///< the match collection to iterate -out
+  SCORER_TYPE_T match_mode_; ///< the current working score (SP, XCORR)
+  int match_idx_;            ///< current match to return
+  int match_total_;          ///< total_match_count
+
+  /**
+   * Initializes a match iterator object.
+   */
+  void init();
+
+ public:
+
+  MatchIterator(
+    MatchCollection* match_collection ///< the match collection to iterate -in
+    );
+
+  /**
+   * create a new memory allocated match iterator
+   * creates a new the generate_peptides_iterator inside the match_iterator
+   *\returns a new memory allocated match iterator
+   */
+  MatchIterator(
+    MatchCollection* match_collection, ///< the match collection to iterate -in
+    SCORER_TYPE_T match_mode, ///< the mode to set (MATCH_SP, MATCH_XCORR) -in
+    bool sort_match = false  ///< should I return the match in sorted order? (default false)
+    );
+
+  /**
+   * \brief Create a match iterator to return matches from a collection
+   * grouped by spectrum and sorted by given score type.
+   *
+   * \returns A heap-allocated match iterator.
+   */
+  /*
+  MatchIterator(
+    MatchCollection* match_collection, ///< match collection to iterate -in
+    SCORER_TYPE_T scorer ///< the score to sort by (MATCH_SP, MATCH_XCORR) -in
+  );
+  */
+  /**
+   * free the memory allocated iterator
+   */
+  ~MatchIterator();
+
+  /**
+   * Does the match_iterator have another match struct to return?
+   * MUST set the iterator to correct mode before calling this method
+   *\returns true, if match iter has a next match, else False
+   */
+  bool hasNext();
+
+  /**
+   * return the next match struct!
+   * MUST set the iterator to correct mode before initialially calling this method
+   *\returns the match in decreasing score order for the match_mode(SCORER_TYPE_T)
+   */
+  Crux::Match* next();
+
+  Crux::Match* getMatch(int match_idx);
+
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/Modification.cpp b/src/model/Modification.cpp
new file mode 100644
index 0000000..566108a
--- /dev/null
+++ b/src/model/Modification.cpp
@@ -0,0 +1,572 @@
+#include "Modification.h"
+#include "io/carp.h"
+#include "util/AminoAcidUtil.h"
+#include "util/MathUtil.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+
+#include <algorithm>
+#include <cmath>
+#include <cstdio>
+#include <sstream>
+#include <stdexcept>
+
+using namespace std;
+using namespace Crux;
+
+ModificationDefinition::ModificationDefinition(
+  const string& aminoAcids, double deltaMass, ModPosition position,
+  bool preventsCleavage, bool preventsXLink, char symbol)
+  : deltaMass_(deltaMass), position_(position),
+    symbol_(symbol), preventsCleavage_(preventsCleavage), preventsXLink_(preventsXLink) {
+  AddAminoAcids(aminoAcids);
+}
+
+ModificationDefinition::~ModificationDefinition() {
+}
+
+const ModificationDefinition* ModificationDefinition::New(
+  const string& aminoAcids, double deltaMass, ModPosition position,
+  bool isStatic, bool preventsCleavage, bool preventsXLink) {
+  return isStatic
+    ? NewStaticMod(aminoAcids, deltaMass, position, preventsCleavage, preventsXLink)
+    : NewVarMod(aminoAcids, deltaMass, position, preventsCleavage, preventsXLink, '\0');
+}
+
+const ModificationDefinition* ModificationDefinition::NewStaticMod(
+  const string& aminoAcids, double deltaMass, ModPosition position,
+  bool preventsCleavage, bool preventsXLink) {
+  // Look for existing
+  vector<ModificationDefinition*> staticMods = modContainer_.StaticMods();
+  for (vector<ModificationDefinition*>::const_iterator i = staticMods.begin();
+       i != staticMods.end();
+       i++) {
+    if (MathUtil::AlmostEqual((*i)->deltaMass_, deltaMass, Params::GetInt("mod-precision")) &&
+        (position == UNKNOWN || (*i)->position_ == UNKNOWN || (*i)->position_ == position) &&
+        (*i)->preventsCleavage_ == preventsCleavage &&
+        (*i)->preventsXLink_ == preventsXLink) {
+      string added = (*i)->AddAminoAcids(aminoAcids);
+      for (string::const_iterator j = added.begin(); j != added.end(); j++) {
+        modContainer_.staticMods_[*j].push_back(*i);
+      }
+      if (position != UNKNOWN && (*i)->position_ == UNKNOWN) {
+        (*i)->position_ = position;
+      }
+      return *i;
+    }
+  }
+  // Does not exist yet
+  ModificationDefinition* mod = new ModificationDefinition(
+    aminoAcids, deltaMass, position, '\0', preventsCleavage, preventsXLink);
+  modContainer_.Add(mod);
+  return mod;
+}
+
+const ModificationDefinition* ModificationDefinition::NewVarMod(
+  const string& aminoAcids, double deltaMass, ModPosition position,
+  bool preventsCleavage, bool preventsXLink, char symbol) {
+  // Look for existing
+  for (vector<ModificationDefinition*>::const_iterator i = modContainer_.varMods_.begin();
+       i != modContainer_.varMods_.end();
+       i++) {
+    if (MathUtil::AlmostEqual((*i)->deltaMass_, deltaMass, Params::GetInt("mod-precision")) &&
+        (position == UNKNOWN || (*i)->position_ == UNKNOWN || (*i)->position_ == position) &&
+        (*i)->preventsCleavage_ == preventsCleavage &&
+        (*i)->preventsXLink_ == preventsXLink &&
+        (symbol == '\0' || (*i)->symbol_ == symbol)) {
+      (*i)->AddAminoAcids(aminoAcids);
+      if (position != UNKNOWN && (*i)->position_ == UNKNOWN) {
+        (*i)->position_ = position;
+      }
+      return *i;
+    }
+  }
+  // Does not exist yet
+  if (symbol == '\0') {
+    symbol = modContainer_.NextSymbol();
+  } else {
+    modContainer_.ConsumeSymbol(symbol);
+  }
+  ModificationDefinition* mod = new ModificationDefinition(
+    aminoAcids, deltaMass, position, preventsCleavage, preventsXLink, symbol);
+  modContainer_.Add(mod);
+  return mod;
+}
+
+string ModificationDefinition::String() const {
+  // For debugging
+  stringstream ss;
+  ss << '[' << this << ']';
+  if (!aminoAcids_.empty()) {
+    ss << '[' << StringUtils::Join(aminoAcids_) << ']';
+  } else {
+    ss << "[?]";
+  }
+  ss << '[' << DeltaMass() << ']';
+  if (Static()) {
+    ss << "[static]";
+  } else {
+    ss << "[variable " << Symbol() << ']';
+  }
+  ss << '[';
+  switch (Position()) {
+    default:        ss << "unknown"; break;
+    case ANY:       ss << "any"; break;
+    case PEPTIDE_N: ss << "peptide N"; break;
+    case PEPTIDE_C: ss << "peptide C"; break;
+    case PROTEIN_N: ss << "protein N"; break;
+    case PROTEIN_C: ss << "protein C"; break;
+  }
+  ss << ']';
+  return ss.str();
+}
+
+void ModificationDefinition::ListAll() {
+  // For debugging
+  ListStaticMods();
+  ListVarMods();
+}
+
+void ModificationDefinition::ListStaticMods() {
+  // For debugging
+  carp(CARP_INFO, "Listing static modifications");
+  vector<ModificationDefinition*> staticMods = modContainer_.StaticMods();
+  for (vector<ModificationDefinition*>::const_iterator i = staticMods.begin();
+       i != staticMods.end();
+       i++) {
+    carp(CARP_INFO, "%s", (*i)->String().c_str());
+  }
+}
+
+void ModificationDefinition::ListVarMods() {
+  // For debugging
+  carp(CARP_INFO, "Listing variable modifications");
+  for (vector<ModificationDefinition*>::const_iterator i = modContainer_.varMods_.begin();
+       i != modContainer_.varMods_.end();
+       i++) {
+    carp(CARP_INFO, "%s", (*i)->String().c_str());
+  }
+}
+
+void ModificationDefinition::ClearAll() {
+  modContainer_ = ModificationDefinitionContainer();
+}
+
+void ModificationDefinition::ClearStaticMods() {
+  vector<ModificationDefinition*> staticMods = modContainer_.StaticMods();
+  for (vector<ModificationDefinition*>::const_iterator i = staticMods.begin();
+       i != staticMods.end();
+       i++) {
+    delete *i;
+  }
+  modContainer_.staticMods_.clear();
+}
+
+void ModificationDefinition::ClearVarMods() {
+  for (vector<ModificationDefinition*>::const_iterator i = modContainer_.varMods_.begin();
+       i != modContainer_.varMods_.end();
+       i++) {
+    delete *i;
+  }
+  modContainer_.varMods_.clear();
+  modContainer_.InitSymbolPool();
+}
+
+vector<const ModificationDefinition*> ModificationDefinition::AllMods() {
+  vector<const ModificationDefinition*> mods = StaticMods();
+  vector<const ModificationDefinition*> varMods = VarMods();
+  mods.insert(mods.end(), varMods.begin(), varMods.end());
+  return mods;
+}
+
+vector<const ModificationDefinition*> ModificationDefinition::StaticMods(char c) {
+  vector<ModificationDefinition*> mods = modContainer_.StaticMods(c);
+  vector<const ModificationDefinition*> modsConst;
+  for (vector<ModificationDefinition*>::const_iterator i = mods.begin();
+       i != mods.end();
+       i++) {
+    modsConst.push_back(*i);
+  }
+  return modsConst;
+}
+
+vector<const ModificationDefinition*> ModificationDefinition::VarMods() {
+  vector<const ModificationDefinition*> mods;
+  for (vector<ModificationDefinition*>::const_iterator i = modContainer_.varMods_.begin();
+       i != modContainer_.varMods_.end();
+       i++) {
+    mods.push_back(*i);
+  }
+  return mods;
+}
+
+double ModificationDefinition::DeltaMass(char c, ModPosition position) {
+  double mass = 0.0;
+  vector<const ModificationDefinition*> staticMods = StaticMods(c);
+  for (vector<const ModificationDefinition*>::const_iterator i = staticMods.begin();
+       i != staticMods.end();
+       i++) {
+    if ((*i)->position_ == UNKNOWN || (*i)->position_ == ANY || position == (*i)->position_) {
+      mass += (*i)->DeltaMass();
+    }
+  }
+  return mass;
+}
+
+const set<char>& ModificationDefinition::AminoAcids() const {
+  return aminoAcids_;
+}
+
+double ModificationDefinition::DeltaMass() const {
+  return deltaMass_;
+}
+
+bool ModificationDefinition::Static() const {
+  return symbol_ == '\0';
+}
+
+ModPosition ModificationDefinition::Position() const {
+  return position_;
+}
+
+char ModificationDefinition::Symbol() const {
+  return symbol_;
+}
+
+bool ModificationDefinition::PreventsCleavage() const {
+  return preventsCleavage_;
+}
+
+bool ModificationDefinition::PreventsXLink() const {
+  return preventsXLink_;
+}
+
+const ModificationDefinition* ModificationDefinition::Find(char symbol) {
+  for (vector<ModificationDefinition*>::const_iterator i = modContainer_.varMods_.begin();
+       i != modContainer_.varMods_.end();
+       i++) {
+    if ((*i)->symbol_ == symbol) {
+      return *i;
+    }
+  }
+  return NULL;
+}
+
+const ModificationDefinition* ModificationDefinition::Find(
+  double deltaMass, bool isStatic, ModPosition position) {
+  vector<ModificationDefinition*> staticMods = modContainer_.StaticMods();
+  vector<ModificationDefinition*>* mods = isStatic ? &staticMods : &modContainer_.varMods_;
+  for (vector<ModificationDefinition*>::const_iterator i = mods->begin();
+       i != mods->end();
+       i++) {
+    if ((position == UNKNOWN || position == (*i)->Position()) &&
+        MathUtil::AlmostEqual((*i)->deltaMass_, deltaMass, Params::GetInt("mod-precision"))) {
+      return *i;
+    }
+  }
+  return NULL;
+}
+
+string ModificationDefinition::AddAminoAcids(const string& aminoAcids) {
+  string added;
+  for (string::const_iterator i = aminoAcids.begin(); i != aminoAcids.end(); i++) {
+    if (*i == 'X') {
+      for (char j = 'A'; j <= 'Z'; j++) {
+        if (aminoAcids_.insert(j).second) {
+          added.push_back(j);
+        }
+      }
+      break;
+    }
+    if (aminoAcids_.insert(*i).second) {
+      added.push_back(*i);
+    }
+  }
+  return added;
+}
+
+void swap(Modification& x, Modification& y) {
+  using std::swap;
+  swap(x.index_, y.index_);
+  swap(x.mod_, y.mod_);
+}
+
+ostream& operator<<(ostream& stream, const Modification& mod) {
+  stream << mod.String();
+  return stream;
+}
+
+Modification::Modification(const ModificationDefinition* mod, unsigned char index)
+  : index_(index), mod_(mod) {
+}
+
+Modification::Modification(const Modification& other)
+  : index_(other.index_), mod_(other.mod_) {
+}
+
+Modification::~Modification() {
+}
+
+Modification& Modification::operator=(Modification other) {
+  swap(*this, other);
+  return *this;
+}
+
+bool Modification::operator==(const Modification& other) const {
+  return index_ == other.index_ && mod_ == other.mod_;
+}
+
+bool Modification::operator!=(const Modification& other) const {
+  return !(*this == other);
+}
+
+string Modification::String() const {
+  char buffer[32];
+  string positionStr;
+  switch (mod_->Position()) {
+    case PEPTIDE_N: positionStr = "_n"; break;
+    case PEPTIDE_C: positionStr = "_c"; break;
+    case PROTEIN_N: positionStr = "_N"; break;
+    case PROTEIN_C: positionStr = "_C"; break;
+  }
+  sprintf(buffer, "%d_%c_%.*f%s",
+          index_ + 1,
+          mod_->Static() ? 'S' : 'V',
+          Params::GetInt("mod-precision"), mod_->DeltaMass(),
+          positionStr.c_str());
+  return string(buffer);
+}
+
+Modification Modification::Parse(const string& modString, Peptide* peptide) {
+  vector<string> pieces = StringUtils::Split(modString, '_');
+  if (3 > pieces.size() || pieces.size() > 4) {
+    throw runtime_error("Could not parse modification string '" + modString + "'");
+  }
+  unsigned char index = (unsigned char)StringUtils::FromString<unsigned int>(pieces[0]) - 1;
+  bool isStatic = false;
+  if (StringUtils::IEquals(pieces[1], "S")) {
+    isStatic = true;
+  } else if (!StringUtils::IEquals(pieces[1], "V")) {
+    throw runtime_error("Could not parse modification string '" + modString + "'");
+  }
+  double deltaMass = StringUtils::FromString<double>(pieces[2]);
+  ModPosition position = ANY;
+  if (pieces.size() == 4) {
+    if (pieces[3] == "n") {
+      position = PEPTIDE_N;
+    } else if (pieces[3] == "c") {
+      position = PEPTIDE_C;
+    } else if (pieces[3] == "N") {
+      position = PROTEIN_N;
+    } else if (pieces[3] == "C") {
+      position = PROTEIN_C;
+    } else {
+      throw runtime_error("Could not parse modification string '" + modString + "'");
+    }
+  }
+  const ModificationDefinition* definition =
+    ModificationDefinition::Find(deltaMass, isStatic, position);
+  string aa;
+  if (peptide) {
+    char* seq = peptide->getSequence();
+    aa.push_back(seq[index]);
+    free(seq);
+  }
+  if (definition == NULL) {
+    // Create new modification
+    definition = ModificationDefinition::New(
+      !aa.empty() ? aa : "X", deltaMass, position, isStatic);
+  } else if (!aa.empty() &&
+             definition->AminoAcids().find(aa[0]) == definition->AminoAcids().end()) {
+    definition = ModificationDefinition::New(
+      aa, definition->DeltaMass(), definition->Position(), definition->Static(),
+      definition->PreventsCleavage(), definition->PreventsXLink());
+  }
+
+  return Modification(definition, index);
+}
+
+unsigned char Modification::Index() const {
+  return index_;
+}
+
+const ModificationDefinition* Modification::Definition() const {
+  return mod_;
+}
+
+double Modification::DeltaMass() const {
+  return mod_->DeltaMass();
+}
+
+bool Modification::Static() const {
+  return mod_->Static();
+}
+
+ModPosition Modification::Position() const {
+  return mod_->Position();
+}
+
+char Modification::Symbol() const {
+  return mod_->Symbol();
+}
+
+bool Modification::PreventsCleavage() const {
+  return mod_->PreventsCleavage();
+}
+
+bool Modification::PreventsXLink() const {
+  return mod_->PreventsXLink();
+}
+
+// Turns a MODIFIED_AA_T* and its length into a sequence and vector of Modification
+// TODO Remove this
+void Modification::FromSeq(MODIFIED_AA_T* seq, int length,
+                           string* outSeq, vector<Modification>* outMods) {
+  *outSeq = string(length, 'X');
+  if (outMods != NULL) {
+    *outMods = vector<Modification>();
+  }
+  if (seq != NULL && length != 0) {
+    AA_MOD_T** allMods = NULL;
+    int modCount = get_all_aa_mod_list(&allMods);
+    for (int i = 0; i < length; i++) {
+      (*outSeq)[i] = modified_aa_to_char(seq[i]);
+      if (outMods == NULL) {
+        continue;
+      }
+      for (int j = 0; j < modCount; j++) {
+        if (is_aa_modified(seq[i], allMods[j])) {
+          ModPosition position = UNKNOWN;
+          switch (aa_mod_get_position(allMods[j])) {
+          case N_TERM: position = PEPTIDE_N; break;
+          case C_TERM: position = PEPTIDE_C; break;
+          }
+          string aaList = aa_mod_get_aa_list_string(allMods[j]);
+          bool preventsCleavage = aa_mod_get_prevents_cleavage(allMods[j]);
+          bool preventsXLink = aa_mod_get_prevents_xlink(allMods[j]);
+          double massChange = aa_mod_get_mass_change(allMods[j]);
+          const ModificationDefinition* def =
+            ModificationDefinition::Find(massChange, false, position);
+          if (!def) {
+            char symbol = aa_mod_get_symbol(allMods[j]);
+            def = ModificationDefinition::NewVarMod(
+              aaList, massChange, position, preventsCleavage, preventsXLink, symbol);
+          }
+          outMods->push_back(Modification(def, (unsigned char)i));
+        }
+      }
+    }
+  }
+}
+
+// Turns an unmodified sequence and vector of mods into a MODIFIED_AA_T*
+// TODO Remove this
+MODIFIED_AA_T* Modification::ToSeq(const string& seq, const vector<Modification>& mods) {
+  
+  MODIFIED_AA_T* modSeq = newModSeq();
+  
+  for (unsigned i = 0; i < seq.length(); i++) {
+    modSeq[i] = char_aa_to_modified(seq[i]);
+  }
+  modSeq[seq.length()] = MOD_SEQ_NULL;
+
+  for (vector<Modification>::const_iterator i = mods.begin(); i != mods.end(); i++) {
+    if (!i->Static()) {
+      modify_aa(&modSeq[i->Index()], get_aa_mod_from_mass((FLOAT_T)i->DeltaMass()));
+    }
+  }
+
+  return modSeq;
+}
+
+ModificationDefinitionContainer::ModificationDefinitionContainer() {
+  InitSymbolPool();
+}
+
+ModificationDefinitionContainer::~ModificationDefinitionContainer() {
+  for (vector<ModificationDefinition*>::const_iterator i = varMods_.begin();
+       i != varMods_.end();
+       i++) {
+    delete *i;
+  }
+  vector<ModificationDefinition*> staticMods = StaticMods();
+  for (vector<ModificationDefinition*>::const_iterator i = staticMods.begin();
+       i != staticMods.end();
+       i++) {
+    delete *i;
+  }
+}
+
+void ModificationDefinitionContainer::InitSymbolPool() {
+  symbolPool_.clear();
+  symbolPool_.push_back('*');
+  symbolPool_.push_back('#');
+  symbolPool_.push_back('@');
+  symbolPool_.push_back('^');
+  symbolPool_.push_back('~');
+  symbolPool_.push_back('%');
+  symbolPool_.push_back('$');
+  symbolPool_.push_back('&');
+  symbolPool_.push_back('!');
+  symbolPool_.push_back('?');
+  symbolPool_.push_back('+');
+}
+
+vector<ModificationDefinition*> ModificationDefinitionContainer::StaticMods(char c) {
+  vector<ModificationDefinition*> mods;
+  for (map< char, vector<ModificationDefinition*> >::const_iterator i = staticMods_.begin();
+       i != staticMods_.end();
+       i++) {
+    if (c != '\0' && c != i->first) {
+      continue;
+    }
+    for (vector<ModificationDefinition*>::const_iterator j = i->second.begin();
+         j != i->second.end();
+         j++) {
+      if (find(mods.begin(), mods.end(), *j) == mods.end()) {
+        mods.push_back(*j);
+      }
+    }
+  }
+  return mods;
+}
+
+void ModificationDefinitionContainer::Add(ModificationDefinition* def) {
+  if (def->Static()) {
+    for (set<char>::const_iterator i = def->AminoAcids().begin();
+         i != def->AminoAcids().end();
+         i++) {
+      map< char, vector<ModificationDefinition*> >::const_iterator j = staticMods_.find(*i);
+      if (j == staticMods_.end()) {
+        staticMods_[*i] = vector<ModificationDefinition*>(1, def);
+      } else {
+        staticMods_[*i].push_back(def);
+      }
+    }
+  } else {
+    varMods_.push_back(def);
+  }
+  carp(CARP_DEBUG, "Added new modification [%x]: aa[%s] dM[%f] static[%d] symbol[%c]",
+       def, StringUtils::Join(def->AminoAcids()).c_str(), def->DeltaMass(),
+       def->Static(), def->Symbol());
+}
+
+char ModificationDefinitionContainer::NextSymbol() {
+  if (!symbolPool_.empty()) {
+    char symbol = symbolPool_.front();
+    symbolPool_.pop_front();
+    return symbol;
+  }
+  carp(CARP_WARNING, "No more symbols for variable modifications available");
+  return '+';
+}
+
+void ModificationDefinitionContainer::ConsumeSymbol(char c) {
+  for (deque<char>::iterator i = symbolPool_.begin(); i != symbolPool_.end(); i++) {
+    if (*i == c) {
+      symbolPool_.erase(i);
+      return;
+    }
+  }
+}
+
diff --git a/src/model/Modification.h b/src/model/Modification.h
new file mode 100644
index 0000000..4299515
--- /dev/null
+++ b/src/model/Modification.h
@@ -0,0 +1,131 @@
+#ifndef CRUX_MODIFICATION_H
+#define CRUX_MODIFICATION_H
+
+#include "model/Peptide.h"
+#include "util/modifications.h"
+
+#include <deque>
+#include <ostream>
+#include <set>
+#include <string>
+#include <vector>
+
+enum ModPosition {
+  UNKNOWN, ANY,
+  PEPTIDE_N, PEPTIDE_C,
+  PROTEIN_N, PROTEIN_C
+};
+
+class ModificationDefinition {
+public:
+  ModificationDefinition(
+    const std::string& aminoAcids, double deltaMass, ModPosition position,
+    bool preventsCleavage, bool preventsXLink, char symbol);
+  virtual ~ModificationDefinition();
+
+  static const ModificationDefinition* New(
+    const std::string& aminoAcids, double deltaMass, ModPosition position,
+    bool isStatic, bool preventsCleavage = false, bool preventsXLink = false);
+  static const ModificationDefinition* NewStaticMod(
+    const std::string& aminoAcids, double deltaMass, ModPosition position,
+    bool preventsCleavage = false, bool preventsXLink = false);
+  static const ModificationDefinition* NewVarMod(
+    const std::string& aminoAcids, double deltaMass, ModPosition position,
+    bool preventsCleavage = false, bool preventsXLink = false, char symbol = '\0');
+
+  std::string String() const;
+  static void ListAll();
+  static void ListStaticMods();
+  static void ListVarMods();
+
+  static void ClearAll();
+  static void ClearStaticMods();
+  static void ClearVarMods();
+
+  static std::vector<const ModificationDefinition*> AllMods();
+  static std::vector<const ModificationDefinition*> StaticMods(char c = '\0');
+  static std::vector<const ModificationDefinition*> VarMods();
+  static double DeltaMass(char c, ModPosition position);
+
+  const std::set<char>& AminoAcids() const;
+  double DeltaMass() const;
+  bool Static() const;
+  ModPosition Position() const;
+  char Symbol() const;
+  bool PreventsCleavage() const;
+  bool PreventsXLink() const;
+
+  static const ModificationDefinition* Find(char symbol);
+  static const ModificationDefinition* Find(double deltaMass,
+    bool isStatic, ModPosition position = UNKNOWN);
+protected:
+  std::string AddAminoAcids(const std::string& aminoAcids);
+
+  std::set<char> aminoAcids_;
+  double deltaMass_;
+  ModPosition position_;
+  char symbol_;
+  bool preventsCleavage_;
+  bool preventsXLink_;
+};
+
+namespace Crux { class Modification; }
+void swap(Crux::Modification& x, Crux::Modification& y);
+
+namespace Crux {
+class Modification {
+public:
+  friend void ::swap(Modification& x, Modification& y);
+  friend std::ostream& operator<<(std::ostream& stream, const Modification& mod);
+
+  Modification(const ModificationDefinition* mod, unsigned char index);
+  Modification(const Modification& other);
+  virtual ~Modification();
+
+  Modification& operator=(Modification other);
+  bool operator==(const Modification& other) const;
+  bool operator!=(const Modification& other) const;
+
+  std::string String() const;
+  static Modification Parse(const std::string& modString, Peptide* peptide);
+
+  unsigned char Index() const;
+  const ModificationDefinition* Definition() const;
+  double DeltaMass() const;
+  bool Static() const;
+  ModPosition Position() const;
+  char Symbol() const;
+  bool PreventsCleavage() const;
+  bool PreventsXLink() const;
+
+  static void FromSeq(MODIFIED_AA_T* seq, int length,
+                      std::string* outSeq, std::vector<Modification>* outMods);
+  static MODIFIED_AA_T* ToSeq(const std::string& seq, const std::vector<Modification>& mods);
+protected:
+  unsigned char index_; // 0 based position
+  const ModificationDefinition* mod_;
+};
+}
+
+class ModificationDefinitionContainer {
+public:
+  friend class ModificationDefinition;
+
+  ModificationDefinitionContainer();
+  virtual ~ModificationDefinitionContainer();
+protected:
+  void InitSymbolPool();
+  std::vector<ModificationDefinition*> StaticMods(char c = '\0');
+  void Add(ModificationDefinition* def);
+  char NextSymbol();
+  void ConsumeSymbol(char c);
+
+  std::vector<ModificationDefinition*> varMods_;
+  std::map< char, std::vector<ModificationDefinition*> > staticMods_;
+  std::deque<char> symbolPool_;
+};
+
+static ModificationDefinitionContainer modContainer_;
+
+#endif
+
diff --git a/src/model/ModifiedPeptidesIterator.cpp b/src/model/ModifiedPeptidesIterator.cpp
new file mode 100644
index 0000000..84a6fc4
--- /dev/null
+++ b/src/model/ModifiedPeptidesIterator.cpp
@@ -0,0 +1,238 @@
+/**
+ * \file GenerateModifiedPeptidesIterator.h
+ * \brief An object to return candidate peptides from a database.
+ */
+#include "ModifiedPeptidesIterator.h"
+#include "SpectrumZState.h"
+#include "util/GlobalParams.h"
+
+using namespace std;
+using namespace Crux;
+
+/**
+ * Constructor that sets all fields with the given values.  Will
+ * return peptides in a window around the given m/z or mass with the
+ * given modifications applied.
+ */
+ModifiedPeptidesIterator::ModifiedPeptidesIterator(
+  double mz,               ///< Spectrum precrusor mz
+  SpectrumZState& zstate,  ///< Target mz of peptides
+  PEPTIDE_MOD_T* pmod, ///< Peptide mod to apply
+  bool is_decoy,  ///< generate decoy peptides
+  Database* dbase    ///< Database from which to draw peptides
+)
+{
+  peptide_source_ = new GeneratePeptidesIterator(getMinMaxMass(mz, zstate, 
+                                                               pmod),
+                                                 is_decoy, dbase);
+  peptide_modification_ = pmod;
+  temp_peptide_list_ = new_empty_list();
+  max_aas_modified_ = GlobalParams::getMaxAasModified();
+
+  initialize();
+  carp(CARP_DETAILED_DEBUG, 
+       "After initialize, has next is %d and next peptide is null? %d",
+       hasNext(), (next_peptide_ == NULL));
+}
+
+/**
+ * Constructor for returning all peptides in the database
+ * that fall within the constraints defined in parameter.cpp.
+ */
+ModifiedPeptidesIterator::ModifiedPeptidesIterator(
+  PEPTIDE_MOD_T* pmod, ///< Peptide mod to apply
+  Database* dbase    ///< Database from which to draw peptides
+){
+  peptide_source_ = new GeneratePeptidesIterator(getMinMaxMass(), 
+                                                 false, // not decoy
+                                                 dbase);
+
+  peptide_modification_ = pmod;
+  temp_peptide_list_ = new_empty_list();
+  max_aas_modified_ = GlobalParams::getMaxAasModified();
+  initialize();
+}
+
+/**
+ * Constructor for returnign all peptides in the database
+ * that fall within the mass range
+ */
+ModifiedPeptidesIterator::ModifiedPeptidesIterator(
+  double min_mass,    ///< min-mass of peptides
+  double max_mass,    ///< max-mass of peptides
+  PEPTIDE_MOD_T* pmod, ///< Peptide mod to apply
+  bool is_decoy, ///< generate decoy peptides
+  Database* dbase,   ///< Database from which to draw peptides
+  int additional_missed_cleavages
+) {
+
+  peptide_source_ = new GeneratePeptidesIterator(
+    pair<FLOAT_T,FLOAT_T>(min_mass, max_mass),
+    is_decoy,
+    dbase,
+    additional_missed_cleavages);
+
+  peptide_modification_ = pmod;
+  temp_peptide_list_ = new_empty_list();
+  max_aas_modified_ = GlobalParams::getMaxAasModified();
+  initialize();
+}
+
+
+/**
+ * Destructor that frees any peptides not yet returned via next().
+ */
+ModifiedPeptidesIterator::~ModifiedPeptidesIterator(){
+  delete_linked_list(temp_peptide_list_);
+  delete next_peptide_;
+  delete peptide_source_;
+}
+
+/**
+ * Use parameter.cpp values to determine the range of masses to
+ * consider.
+ * \returns A pair with the minimum and maximum mass for generating
+ * peptides.  
+ */
+pair<FLOAT_T,FLOAT_T>ModifiedPeptidesIterator::getMinMaxMass()
+{
+  return pair<FLOAT_T,FLOAT_T>(GlobalParams::getMinMass(),
+                               GlobalParams::getMaxMass());
+}
+
+/**
+ * Use parameter.cpp for window type and window size to find the mass
+ * window around the given m/z or mass.
+ * \returns A pair with the minimum and maximum masses to search.
+ */
+pair<FLOAT_T,FLOAT_T> ModifiedPeptidesIterator::getMinMaxMass(
+  double mz, ///< precursor mz for peptide window
+  SpectrumZState& zstate, ///< charge/mass pair for peptide window
+  PEPTIDE_MOD_T* pmod) ///< peptide mod with the delta mass for peptides
+{
+  WINDOW_TYPE_T precursor_window_type = GlobalParams::getPrecursorWindowType();
+
+  double window = GlobalParams::getPrecursorWindow();
+  double min_mass = 0;
+  double max_mass = 0;
+
+  // get the mass difference
+  double delta_mass = peptide_mod_get_mass_change(pmod);
+
+  if (precursor_window_type == WINDOW_MASS) {
+    double mass = zstate.getNeutralMass() - delta_mass;
+    min_mass = mass - window;
+    max_mass = mass + window;
+  } else if (precursor_window_type == WINDOW_MZ) {
+    double min_mz = mz - window;
+    double max_mz = mz + window;
+    min_mass = (min_mz - MASS_PROTON) * (double)zstate.getCharge() - delta_mass;
+    max_mass = (max_mz - MASS_PROTON) * (double)zstate.getCharge() - delta_mass;
+  } else if (precursor_window_type == WINDOW_PPM) {
+    double mass = zstate.getNeutralMass() - delta_mass;
+    min_mass = mass * (1.0 - window * 1e-6);
+    max_mass = mass * (1.0 + window * 1e-6);
+    carp(CARP_DEBUG,"mass:%f charge:%i min_mass:%f max_mass:%f",
+         mass, zstate.getCharge(), min_mass, max_mass);
+  } else {
+    carp(CARP_FATAL,"Invalid window type");
+  }
+  pair<FLOAT_T,FLOAT_T> min_max(min_mass, max_mass);
+  return min_max;
+}
+
+/**
+ * \brief Queue next_peptide to be returned.
+ *
+ * Takes unmodified peptides from a base class and applies the
+ * modification to each.
+ * 
+ * Filters out peptides that can't be modified. Stores multiple
+ * versions of same peptide that can have the mod applied in more than
+ * one way (ie on different residues) in temp_peptide_list_.  Deletes
+ * elements from list as used. Sets next_peptide to NULL when there are
+ * no more to be returned.
+ * \returns True if there is a peptide to return or false if there are
+ * none.
+ */
+bool ModifiedPeptidesIterator::queueNextPeptide(){
+
+  carp(CARP_DETAILED_DEBUG, "ModifiedPeptidesIterator queueNextPeptide");
+
+  // first, try getting next from the temp list
+  if( ! is_empty_linked_list( temp_peptide_list_)){
+    carp(CARP_DETAILED_DEBUG,"Queue is getting next peptide from temp list");
+    next_peptide_ = (Peptide*)pop_front_linked_list(temp_peptide_list_);
+
+    return true;
+  }
+
+  // second, try getting next from iterator
+  if( ! peptide_source_->hasNext() ){
+    carp(CARP_DETAILED_DEBUG, 
+        "ModifiedPeptidesIterator queue has no more peptides in the generator");
+    next_peptide_ = NULL;
+    return false;   // no more peptides for this iterator
+  }
+
+  // else, get the next unmodified peptide
+  Peptide* unmod_peptide = peptide_source_->next();
+  
+  IF_CARP_DETAILED_DEBUG(
+    const char* debugseq = unmod_peptide->getSequence();
+    carp(CARP_DETAILED_DEBUG, "Next peptide in pep_gen is %s", debugseq);
+  )
+
+  // apply modifications, discard peptides that can't be modified
+
+  // keep looking until a peptide can be modified or we run out of peptides
+  carp(CARP_DETAILED_DEBUG, "Queue is looking for modifyable peptide");
+  while( unmod_peptide != NULL &&
+         ! is_peptide_modifiable(unmod_peptide, peptide_modification_) ){ 
+    delete unmod_peptide;
+    unmod_peptide = peptide_source_->next();
+  }
+
+  if( unmod_peptide == NULL ){ 
+    // none of the remaining peptides were modifiable
+    carp(CARP_DETAILED_DEBUG, "Skipped all remaining peptides in generator");
+    next_peptide_ = NULL;
+    return false;
+  }
+
+  IF_CARP_DETAILED_DEBUG(
+    const char* umodseq = unmod_peptide->getSequence();
+    carp(CARP_DETAILED_DEBUG, "Iterator is modifying peptide %s",
+         umodseq);
+  )
+  modify_peptide(unmod_peptide, 
+                 peptide_modification_, 
+                 temp_peptide_list_,
+                 max_aas_modified_ );
+  // this put a copy in the list, get rid of the original
+  delete unmod_peptide;
+
+  if( is_empty_linked_list(temp_peptide_list_) ){
+    carp(CARP_DETAILED_DEBUG, "Modifier didn't return any peptides");
+    next_peptide_ = NULL;
+    return false;
+  }
+
+  // now set next_peptide to the first in the list and move list forward
+  next_peptide_ = (Peptide*)pop_front_linked_list(temp_peptide_list_);
+  
+  IF_CARP_DETAILED_DEBUG(
+    string seq = next_peptide_->getModifiedSequenceWithMasses();
+    carp(CARP_DETAILED_DEBUG, "Queue set next peptide as %s", seq.c_str());
+  )
+
+  return true;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/model/ModifiedPeptidesIterator.h b/src/model/ModifiedPeptidesIterator.h
new file mode 100644
index 0000000..a36136c
--- /dev/null
+++ b/src/model/ModifiedPeptidesIterator.h
@@ -0,0 +1,75 @@
+/**
+ * \file GenerateModifiedPeptidesIterator.h
+ * \brief An object to return candidate peptides from a database.
+ */
+#ifndef MODIFIEDPEPTIDESITERATOR_H 
+#define MODIFIEDPEPTIDESITERATOR_H 
+
+#include <vector>
+#include "GeneratePeptidesIterator.h"
+#include "util/peptide_modifications.h"
+#include "SpectrumZState.h"
+
+class ModifiedPeptidesIterator : public PeptideIterator
+{
+ protected:
+  GeneratePeptidesIterator* peptide_source_;///< gets unmod peptides from index
+  PEPTIDE_MOD_T* peptide_modification_; ///< the modification to apply
+  LINKED_LIST_T* temp_peptide_list_;///< modified peptides ready to return
+  int max_aas_modified_;///< modify no more than this many aas per peptides
+
+  std::pair<FLOAT_T,FLOAT_T> getMinMaxMass();
+  std::pair<FLOAT_T,FLOAT_T> getMinMaxMass(
+    double mz, 
+    SpectrumZState& zstate, 
+    PEPTIDE_MOD_T* pmod);
+
+  virtual bool queueNextPeptide();
+
+ public:
+  /**
+   * Constructor for returning peptides in a window around the given
+   * m/z.
+   */
+  ModifiedPeptidesIterator(
+    double mz,               ///< Spectrum precrusor mz
+    SpectrumZState& zstate,  ///< Target mz of peptides
+    PEPTIDE_MOD_T* pmod, ///< Peptide mod to apply
+    bool is_decoy,  ///< generate decoy peptides
+    Database* dbase    ///< Database from which to draw peptides
+  );
+
+  /**
+   * Constructor for returning all peptides in the database
+   * that fall within the constraints defined in parameter.cpp.
+   */
+  ModifiedPeptidesIterator(
+    PEPTIDE_MOD_T* pmod, ///< Peptide mod to apply
+    Database* dbase    ///< Database from which to draw peptides
+   );
+
+  /**
+   * Constructor for returnign all peptides in the database
+   * that fall within the mass range
+   */
+  ModifiedPeptidesIterator(
+    double min_mass,    ///< min-mass of peptides
+    double max_mass,    ///< max-mass of peptides
+    PEPTIDE_MOD_T* pmod, ///< Peptide mod to apply
+    bool is_decoy, ///< generate decoy peptides
+    Database* dbase,   ///< Database from which to draw peptides
+    int additional_missed_cleavages = 0
+  );
+
+
+  ~ModifiedPeptidesIterator();
+};
+
+#endif
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/model/Peak.cpp b/src/model/Peak.cpp
new file mode 100644
index 0000000..92ce087
--- /dev/null
+++ b/src/model/Peak.cpp
@@ -0,0 +1,136 @@
+/**
+ * AUTHOR: Kha Nguyen
+ * CREATE DATE: 4/21/2011
+ * 
+ * \file Peak.cpp
+ */
+
+#include "Peak.h"
+#include "util/utils.h"
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "io/carp.h"
+#include <algorithm>
+
+/**
+ * Construct a Peak object
+ * @param intensity: intensity for the new peak
+ * @param location: location for the new peak
+ */
+Peak::Peak(FLOAT_T intensity, FLOAT_T location) {
+    this->intensity_ = intensity;
+    this->intensity_rank_ = 0.0;
+    this->location_ = location;
+}
+
+/**
+ * Return the intensity of this Peak
+ */
+FLOAT_T Peak::getIntensity() const {
+    return this->intensity_;
+}
+
+ /**
+  * Return the intensity rank of this Peak
+  */
+FLOAT_T Peak::getIntensityRank() const {
+    return this->intensity_rank_;
+}
+
+/**
+ * Return the location of this Peak
+ */
+FLOAT_T Peak::getLocation() const {
+    return this->location_;
+}
+
+/**
+ * Set the intensity of this Peak
+ */
+void Peak::setIntensity(FLOAT_T intensity) {
+    this->intensity_ = intensity;
+}
+
+/**
+ * Set the intensity rank of this peak
+ */
+void Peak::setIntensityRank(FLOAT_T intensity_rank) {
+    this->intensity_rank_ = intensity_rank;
+}
+
+/**
+ * Set the location of this Peak
+ */
+void Peak::setLocation(FLOAT_T location) {
+    this->location_ = location;
+}
+
+/**
+ * Print the intensity and location of this peak to stdout
+ */
+void Peak::print() {
+    printf("%.1f %.1f\n",
+            this->location_,
+            this->intensity_);
+}
+
+/**
+ * Compare the intensity of this Peak and another Peak
+ * Return true if this Peak is greater, false otherwise
+ */
+bool Peak::compareByIntensity(Peak other) {
+    return getIntensity() > other.getIntensity();
+}
+
+/**
+ * Compare the mz(location) of this Peak and another Peak
+ * Return true if the other Peak is greater, false otherwise
+ */
+bool Peak::compareByMZ(Peak other) {
+    return getLocation() < other.getLocation();
+}
+
+
+std::vector<Peak*> allocate_peak_vector(unsigned int num_peaks) {
+  std::vector<Peak*> ans;
+
+  for (unsigned int idx = 0; idx < num_peaks; idx++) {
+    ans.push_back(new Peak(0,0));
+  }
+
+  return ans;
+}
+
+void free_peak_vector(std::vector<Peak*> &peaks) {
+  for (unsigned int idx = 0; idx < peaks.size(); idx++) {
+    delete peaks[idx];
+  }
+  peaks.clear();
+}
+
+bool compare_peaks_by_intensity(Peak* peak_one, Peak* peak_two) {
+  return (peak_one->getIntensity() > peak_two->getIntensity());
+}
+
+bool compare_peaks_by_mz(Peak* peak_one, Peak* peak_two) {
+  return (peak_one->getLocation() < peak_two->getLocation());
+}
+
+void sort_peaks(std::vector<Peak*> &peak_array, PEAK_SORT_TYPE_T sort_type) {
+  if (sort_type == _PEAK_INTENSITY) {
+    sort(peak_array.begin(), peak_array.end(), compare_peaks_by_intensity);
+  } else if (sort_type == _PEAK_LOCATION) {
+    sort(peak_array.begin(), peak_array.end(), compare_peaks_by_mz);
+  } else {
+    carp(CARP_ERROR, "no matching peak sort type");
+  }
+}
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/Peak.h b/src/model/Peak.h
new file mode 100644
index 0000000..a71faca
--- /dev/null
+++ b/src/model/Peak.h
@@ -0,0 +1,109 @@
+#ifndef PEAK_H
+#define PEAK_H
+
+/**
+ * AUTHOR: Kha Nguyen
+ * CREATE DATE: 04/21/2011
+ *
+ * Object for representing one peak in a spectrum
+ *
+ * A peak is primarily identified via its intensity (height) and location \
+ * (position on the m/z axis)
+ *
+ * \file Peak.h
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "util/utils.h"
+#include <vector>
+#include "model/objects.h"
+
+class Peak {
+public:
+    /**
+     * Construct a Peak object
+     * @param intensity: intensity for the new peak
+     * @param location: location for the new peak
+     */
+    Peak(FLOAT_T intensity, FLOAT_T location);
+
+    /**
+     * Return the intensity of this Peak
+     */
+    FLOAT_T getIntensity() const;
+
+    /**
+     * Return the intensity rank of this Peak
+     */
+    FLOAT_T getIntensityRank() const;
+
+    /**
+     * Return the location of this Peak
+     */
+    FLOAT_T getLocation() const;
+
+    /**
+     * Set the intensity of this Peak
+     */
+    void setIntensity(FLOAT_T intensity);
+
+    /**
+     * Set the intensity rank of this Peak
+     */
+    void setIntensityRank(FLOAT_T intensity_rank);
+
+    /**
+     * Set the location of this Peak
+     */
+    void setLocation(FLOAT_T location);
+
+    /**
+     * Print the intensity and location of this peak to stdout
+     */
+    void print();
+
+    /**
+     * Compare the intensity of this Peak and another Peak
+     * Return true if this Peak is greater, false otherwise
+     */
+    bool compareByIntensity(Peak other);
+
+    /**
+     * Compare the mz(location) of this Peak and another Peak
+     * Return true if the other Peak is greater, false otherwise
+     */
+    bool compareByMZ(Peak other);
+
+private:
+    FLOAT_T intensity_;          // The intensity of this peak
+    FLOAT_T intensity_rank_;     // The rank intensity of this peak
+    FLOAT_T location_;           // The location of this peak
+    
+};
+
+/**
+ * Return a vector of allocated Peak pointers
+ */
+std::vector<Peak*> allocate_peak_vector(unsigned int num_peaks);
+
+/**
+ * Free a Peak pointer array
+ */
+void free_peak_vector(std::vector<Peak*> &peaks);
+
+/**
+ * Sort peaks by their intensity or location
+ * Use the lib function sort()
+ */
+void sort_peaks(std::vector<Peak*> &peak_array, PEAK_SORT_TYPE_T sort_type);
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
+#endif
diff --git a/src/model/Peptide.cpp b/src/model/Peptide.cpp
new file mode 100644
index 0000000..bb6f832
--- /dev/null
+++ b/src/model/Peptide.cpp
@@ -0,0 +1,1275 @@
+/*************************************************************************//**
+ * \file Peptide.cpp
+ * \brief Object for representing a single peptide.
+ ****************************************************************************/
+#include "Peptide.h"
+#include "PeptideSrc.h"
+#include "PostProcessProtein.h"
+#include <string.h>
+
+#include <numeric>
+#include <set>
+#include <vector>
+#include "io/MatchFileReader.h"
+#include "util/AminoAcidUtil.h"
+#include "util/GlobalParams.h"
+#include "util/StringUtils.h"
+
+using namespace std;
+using namespace Crux;
+
+/**
+ * \struct residue_iterator
+ * \brief Object to iterate over the residues in a peptide, starting at the
+ * first residue of the peptide, and proceeding in order.
+ */
+struct residue_iterator {
+  Peptide*  peptide; ///< The peptide whose residues to iterate over.
+  char*   sequence;    ///< The peptide sequence
+  int     residue_idx; ///< The index of the current peak
+};
+
+/* Private functions */
+
+/* Public functions--Allocators/Deallocators */
+
+/**
+ * \returns An (empty) peptide object.
+ */
+Peptide::Peptide() : length_(0), decoy_modified_seq_(NULL) {
+}
+
+Peptide::Peptide(string sequence)
+  : sequence_(sequence), length_(sequence.length()), decoy_modified_seq_(NULL) {
+}
+
+Peptide::Peptide(string sequence, vector<Modification> mods)
+  : sequence_(sequence), varMods_(mods), length_(sequence.length()),
+    decoy_modified_seq_(NULL) {
+}
+
+Peptide* Peptide::copyPtr() {
+  pointer_count_++;
+  return this;
+}
+
+// FIXME association part might be need to change
+/**
+ * \returns A new peptide object, populated with the user specified parameters.
+ */
+Peptide::Peptide(
+  unsigned char length,     ///< The length of the peptide -in
+  Protein* parent_protein, ///< the parent_protein of this peptide -in
+  int start_idx ///< the start index of this peptide in the protein sequence -in
+  )
+  : length_(length), decoy_modified_seq_(NULL) {
+  // FIXME: find the level of digest for this specific protein
+  peptide_srcs_.push_back(new PeptideSrc(NON_SPECIFIC_DIGEST, parent_protein, start_idx));
+}
+
+/**
+ * \brief Allocates a new peptide giving it the values of the source
+ * peptide.
+ * \returns A newly allocated peptide identical to the source.
+ */
+Peptide::Peptide(
+  Peptide* src ///< source peptide -in
+) {
+  if (!src) {
+    carp(CARP_ERROR, "Cannot copy null peptide!");
+  } else {
+    length_ = src->length_;
+    PeptideSrc::copy(src->peptide_srcs_,peptide_srcs_);
+    varMods_ = src->varMods_;
+    if( src->decoy_modified_seq_ == NULL ){
+      decoy_modified_seq_ = NULL;
+    } else {
+      decoy_modified_seq_ = copy_mod_aa_seq(src->decoy_modified_seq_, src->length_);
+    }
+  }
+}
+
+/**
+ * Merges two identical peptides by adding the peptide_src of the
+ * second to the first.  The second peptide remains unchanged.
+ * Does not comfirm identity of peptides.
+ * \returns true if merge is successfull.
+ */
+bool Peptide::mergePeptidesCopySrc(
+  Peptide* peptide_dest,
+  Peptide* peptide_giver
+  ){
+
+  vector<PeptideSrc*>& dest_srcs = peptide_dest->peptide_srcs_;
+  vector<PeptideSrc*>& giver_srcs = peptide_giver->peptide_srcs_;
+
+  // do both peptides have at least one peptide_src?
+  if(dest_srcs.empty() || giver_srcs.empty()){
+    carp(CARP_ERROR, "failed to merge two peptides");
+    return false;
+  }
+ 
+  for(vector<PeptideSrc*>::iterator iter=giver_srcs.begin();
+    iter != giver_srcs.end();
+    iter++
+  ){
+    PeptideSrc* new_src = new PeptideSrc(*(*iter));
+    dest_srcs.push_back(new_src);
+  }
+
+  return true;
+}
+
+/**
+ * Frees an allocated peptide object.
+ * Depending on peptide_src implementation determines how to free srcs
+ */
+Peptide::~Peptide() {
+  for (vector<PeptideSrc*>::iterator i = peptide_srcs_.begin();
+       i != peptide_srcs_.end();
+       i++) {
+    delete *i;
+  }
+  if(decoy_modified_seq_){
+    freeModSeq(decoy_modified_seq_);
+  }
+}
+
+// Public functions--Getters and Setters 
+
+/* source-related getters and setters */
+
+/**
+ * sets the peptide_src field in the peptide
+ * this method should be ONLY used when the peptide has no existing list of peptide_src
+ * must pass on a heap allocated peptide_srcs_ object
+ * does not copy in the object, just the pointer to the object.
+ */
+void Peptide::setPeptideSrc(
+  PeptideSrc*  new_association ///< new peptide_src -in
+  ) {
+  assert(peptide_srcs_.empty());
+  peptide_srcs_.push_back(new_association);
+}
+
+/**
+ * this method adds the new_association to the end of the existing peptide's 
+ * if no prior existing list, adds it at the front
+ * must pass on a heap allocated peptide_srcs_ object
+ * does not copy in the object, just the pointer to the object.
+ */
+void Peptide::addPeptideSrc(
+  PeptideSrc* new_association ///< new peptide_src -in
+  ) {
+  peptide_srcs_.push_back(new_association);
+}
+
+// TODO: why do we need both of these?
+/**
+ * returns a pointer to the peptide_protein_association field of the peptide
+ */
+PeptideSrc* Peptide::getPeptideSrc() const {
+  return !peptide_srcs_.empty() ? peptide_srcs_[0] : NULL;
+}
+
+/**
+ *returns the pepide_srcs_
+ */
+vector<PeptideSrc*>& Peptide::getPeptideSrcVector() {
+  return peptide_srcs_;
+}
+
+/**
+ *Return the begining of the peptide_srcs_
+ */
+PeptideSrcIterator Peptide::getPeptideSrcBegin() {
+  return peptide_srcs_.begin();
+}
+
+/**
+ *Return the end of the peptide_srcs_
+ */
+PeptideSrcIterator Peptide::getPeptideSrcEnd() {
+  return peptide_srcs_.end();
+}
+
+/**
+ * \returns The number of peptide sources (i.e. proteins) the peptide has.
+ */
+int Peptide::getNumPeptideSrc(){
+  return peptide_srcs_.size();
+}
+
+/**
+ * get the peptide->first peptide_src->parent protein->database
+ */
+Database* Peptide::getFirstSrcDatabase() {
+  return peptide_srcs_.at(0)->getParentProtein()->getDatabase();
+}
+
+// set by peptide_src?
+/**
+ * returns a pointer to the peptide's first parent protein field of the peptide
+ */
+Protein* Peptide::getParentProtein() {
+  return peptide_srcs_.at(0)->getParentProtein();
+}
+
+/**
+ * sets the sequence length of the peptide
+ * length maximum of 255
+ */
+void Peptide::setLength(
+  unsigned char length  ///< the length of sequence -in
+  ) {
+  length_ = length;
+}
+
+/* sequence-related getters and setters */
+/**
+ *\returns the sequence length of the peptide
+ */
+unsigned char Peptide::getLength() {
+  return length_;
+}
+
+/**
+ * \brief Check whether a given sequence is equal to a given peptide.
+ * \returns A Boolean indicating equality or not.
+ */
+static bool equal_peptides(
+ char* peptide_sequence, ///< peptide sequence -in
+ Peptide* peptide_object ///< peptide object -in
+ )
+{
+  char* parent_sequence = 
+    peptide_object->getPeptideSrc()->getParentProtein()->getSequencePointer();
+  int start_idx = peptide_object->getPeptideSrc()->getStartIdx();
+
+  int result = strncmp(peptide_sequence, 
+                       &(parent_sequence[start_idx-1]), 
+                       peptide_object->getLength());
+
+  // Return true if strncmp returns 0.
+  return((bool)(!result));
+}
+
+/**
+ * \brief Get a string representation of the peptide sequence with no
+ * added modification symbols.
+ * Returns decoy sequence for decoy peptides.
+ * \returns The newly-allocated sequence of peptide
+ */
+char* Peptide::getSequence() const {
+  //Check that the peptide has parent(s)
+  if (!sequence_.empty()) {
+    return copy_string_part(sequence_.c_str(), sequence_.length());
+  }
+
+  if (decoy_modified_seq_ != NULL) {
+    return modified_aa_to_unmodified_string(decoy_modified_seq_, length_);
+  }
+  string unshuffled = getUnshuffledSequence();
+  if (unshuffled.empty()) {
+    return NULL;
+  }
+  return copy_string_part(unshuffled.c_str(), unshuffled.length());
+}
+
+/**
+ * \brief Get a string representation of the target (unshuffled)
+ * peptide sequence with no added modification symbols.
+ * For target peptides, returns the same as get_peptide_sequence.
+ * \returns The newly-allocated sequence of peptide
+ */
+string Peptide::getUnshuffledSequence() const {
+  if (!sequence_.empty()) {
+    return sequence_;
+  }
+  //check parent(s) protein of the peptide not be empty 
+  PeptideSrc* src = getPeptideSrc();
+  if (src == NULL) {
+    carp(CARP_ERROR, "Cannot get sequence from peptide with no peptide src.");
+    return "";
+  }
+  char* parent_sequence = src->getParentProtein()->getSequencePointer(src->getStartIdx()-1);
+  return string(parent_sequence, length_);
+}
+
+/**
+ * \brief Get a pointer to the peptide sequence that is NOT null
+ * terminated.
+ * USE WITH CAUTION.  Pointer is to the parent protein sequence and
+ * thus is not null-terminated until the end of the protein.  Parent
+ * protein is taken from the first protein source.
+ * 
+ * \returns A pointer to an existing peptide sequence.
+ */
+char* Peptide::getSequencePointer() {
+  if (peptide_srcs_.empty()) {
+    carp(CARP_FATAL, "ERROR: no peptide_src to retrieve peptide sequence pointer\n");
+  }
+  PeptideSrc* src = getPeptideSrc();
+  return src->getParentProtein()->getSequencePointer(src->getStartIdx()-1);
+}
+
+/**
+ * \returns The sequence of peptide as used in sqt files, namely with
+ * each flanking AA and any modifications 
+ * 
+ * Format is [AA|-].[peptide_sequence].[AA|-] where AA is a flanking
+ * amino acid and - indicates this is the end of the protein sequence
+ * Gets flanking AAs from the first peptide_src, thus must have at
+ * least one peptide src 
+ *
+ * \returns A newly allocated char* with formated peptide sequence
+ */
+string Peptide::getSequenceSqt() {
+  return string(1, getNTermFlankingAA()) + "." +
+         getModifiedSequenceWithSymbols() +
+         "." + string(1, getCTermFlankingAA());
+}
+
+/**
+ * \brief Return a char for the amino acid n-terminal to the peptide
+ * in the peptide src at the given index.
+ *
+ * \returns A char (A-Z) or - if peptide is the first in the protein.
+ */
+char Peptide::getNTermFlankingAA() {
+  PeptideSrc* src = getPeptideSrc();
+  if (src == NULL) {
+    return '-';
+  }
+
+  // get protein seq
+  Protein* protein = src->getParentProtein();
+
+  // get peptide start idx, protein index starts at 1
+  int start_index = src->getStartIdx();
+
+  if (protein->isPostProcess()) {
+    return ((PostProcessProtein*)protein)->getNTermFlankingAA(start_index - 1);
+  }
+  char* protein_seq = protein->getSequencePointer();
+
+  char aa = '-';
+  // if not at beginning, return char
+  if( start_index > 1 ){
+    aa = protein_seq[start_index - 2]; // -1 for 1-based shift
+                                       // -1 for aa before start
+  }
+  return aa;
+}
+
+/**
+ * \brief Return a char for the amino acid c-terminal to the peptide
+ * in the peptide src at the given index.
+ *
+ * \returns A char (A-Z) or - if peptide is the last in the protein.
+ */
+char Peptide::getCTermFlankingAA() {
+  PeptideSrc* src = getPeptideSrc();
+  if (src == NULL) {
+    return '-';
+  }
+
+  // get protein seq and length
+  Protein* protein = src->getParentProtein();
+
+  // get peptide start idx, protein index starts at 1
+  int start_index = src->getStartIdx();
+
+  if (protein->isPostProcess()) {
+    return ((PostProcessProtein*)protein)->getCTermFlankingAA(start_index - 1);
+  }
+  char* protein_seq = protein->getSequencePointer();
+  int protein_length = protein->getLength();
+
+  // get peptide end idx
+  int end_index = start_index + length_ - 1;
+
+  char aa = '-';
+  // if not at end, return char
+  if( end_index < protein_length ){
+    aa = protein_seq[end_index]; // -1 for 1-based shift, +1 for aa after end
+  } 
+  return aa;
+}
+
+void Peptide::addMod(const ModificationDefinition* mod, unsigned char index) {
+  varMods_.push_back(Modification(mod, index));
+}
+
+void Peptide::setMods(const vector<Modification>& mods) {
+  varMods_ = mods;
+}
+
+vector<Modification> Peptide::getMods() const {
+  vector<Modification> mods = varMods_;
+  vector<Modification> staticMods = getStaticMods();
+  mods.insert(mods.end(), staticMods.begin(), staticMods.end());
+  return mods;
+}
+
+vector<Modification> Peptide::getVarMods() const {
+  return varMods_;
+}
+
+vector<Modification> Peptide::getStaticMods() const {
+  char* seq = getSequence();
+  vector<Modification> mods;
+  for (unsigned char i = 0; seq[i] != '\0'; i++) {
+    const vector<const ModificationDefinition*>& staticMods =
+      ModificationDefinition::StaticMods(seq[i]);
+    for (vector<const ModificationDefinition*>::const_iterator j = staticMods.begin();
+         j != staticMods.end();
+         j++) {
+      if ((*j)->Position() == ANY ||
+          ((*j)->Position() == PEPTIDE_N && i == 0) ||
+          ((*j)->Position() == PEPTIDE_C && seq[i + 1] == '\0')) {
+        mods.push_back(Modification(*j, (unsigned char)i));
+      }
+    }
+  }
+  free(seq);
+  return mods;
+}
+
+/**
+ * \brief Add a modification to a peptide.
+ *
+ * Adds the modified sequence to the peptide and changes the peptide
+ * mass based on the mass change in the peptide_mod.
+ * \returns void
+ */
+void Peptide::setMod(
+  MODIFIED_AA_T* mod_seq, ///< modified seq to add
+  PEPTIDE_MOD_T* pep_mod  ///< mod that made the seq
+) {
+  if (!mod_seq || !pep_mod) {
+    carp(CARP_ERROR, "Cannot modify peptide. mod, or seq is NULL.");
+    return;
+  }
+  vector<Modification> newMods;
+  Modification::FromSeq(mod_seq, length_, &sequence_, &newMods);
+  for (vector<Modification>::const_iterator i = newMods.begin(); i != newMods.end(); i++) {
+    varMods_.push_back(*i);
+  }
+}
+
+string Peptide::getModsString() const {
+  vector<string> allMods;
+  vector<Modification> staticMods = getStaticMods();
+  for (vector<Modification>::const_iterator i = staticMods.begin(); i != staticMods.end(); i++) {
+    allMods.push_back(i->String());
+  }
+  for (vector<Modification>::const_iterator i = varMods_.begin(); i != varMods_.end(); i++) {
+    allMods.push_back(i->String());
+  }
+  return StringUtils::Join(allMods, ',');
+}
+
+bool Peptide::isModified() {
+  return !varMods_.empty();
+}
+
+bool Peptide::isDecoy() {
+  return decoy_modified_seq_ != NULL;
+}
+
+/**
+ * \brief Get the modified peptide sequence
+ *
+ * If the peptide has no modifications, create a sequence of
+ * MODIFIED_AA_T's in which none of them are actually modified.
+ * \returns A newly allocated copy of the sequence of MODIFIED_AA_Ts.
+ */
+MODIFIED_AA_T* Peptide::getModifiedAASequence() {
+  MODIFIED_AA_T* seq_copy = NULL;
+  char* seq = getSequence();
+  if (!varMods_.empty()) {
+    string seqString(seq);
+    seq_copy = Modification::ToSeq(seqString, varMods_);
+  } else {
+    convert_to_mod_aa_seq(seq, &seq_copy);
+  }
+  std::free(seq);
+  return seq_copy;
+}
+
+/**
+ * sets the modified sequence for the peptide
+ */
+void Peptide::setModifiedAASequence(
+  MODIFIED_AA_T* mod_seq, ///< modified sequence to set
+  bool decoy ///< is the peptide a decoy?
+) {
+  Modification::FromSeq(mod_seq, length_, &sequence_, &varMods_);
+  if (decoy) {
+    if (decoy_modified_seq_) {
+      std::free(decoy_modified_seq_);
+    }
+    decoy_modified_seq_ = copy_mod_aa_seq(mod_seq);
+  }
+}
+
+void Peptide::setDecoyModifiedSeq(MODIFIED_AA_T* decoy_modified_seq) {
+  decoy_modified_seq_ = decoy_modified_seq;
+}
+
+/**
+ * \brief Get the modified aa sequence in string form.
+ *
+ * If the peptide has no modifications, returns same string as
+ * get_peptide_sequence.  If modified, adds the mod symbols to the string.
+ * \returns The peptide sequence including any modifications.
+ */
+string Peptide::getModifiedSequenceWithSymbols() {
+  if (decoy_modified_seq_) {
+    char* seqTmp = 
+      modified_aa_string_to_string_with_symbols(decoy_modified_seq_, length_);
+    string seqString(seqTmp);
+    free(seqTmp);
+    return seqString;
+  }
+
+  char* seqC = getSequence();
+  string seq(seqC);
+  free(seqC);
+  map<unsigned char, string> symbols;
+  for (vector<Modification>::const_iterator i = varMods_.begin(); i != varMods_.end(); i++) {
+    map<unsigned char, string>::const_iterator j = symbols.find(i->Index());
+    if (j == symbols.end()) {
+      symbols[i->Index()] = i->Symbol();
+    } else {
+      symbols[i->Index()] += i->Symbol();
+    }
+  }
+
+  for (map<unsigned char, string>::const_reverse_iterator i = symbols.rbegin();
+       i != symbols.rend();
+       i++) {
+    seq.insert(i->first + 1, i->second);
+  }
+
+  return seq;
+}
+
+/**
+ * \brief Get the modified aa sequence in string form.
+ *
+ * If the peptide has no modifications, returns same string as
+ * get_peptide_sequence.  If modified, adds in brackets the masses of
+ * all modifications.  If merge_masses is true, prints the sum of all
+ * modifications for a residue.  If false, prints all masses in a
+ * comma separated list.
+ * \returns The peptide sequence including any modifications.
+ */
+string Peptide::getModifiedSequenceWithMasses() {
+  if (decoy_modified_seq_) {
+    char* seqTmp = modified_aa_string_to_string_with_masses(
+      decoy_modified_seq_, length_, GlobalParams::getModMassFormat());
+    string seqString(seqTmp);
+    free(seqTmp);
+    return seqString;
+  }
+
+  char* seqC = getSequence();
+  string seq(seqC);
+  free(seqC);
+  map< int, vector<double> > masses;
+  for (vector<Modification>::const_iterator i = varMods_.begin(); i != varMods_.end(); i++) {
+    map< int, vector<double> >::const_iterator j = masses.find(i->Index());
+    if (j == masses.end()) {
+      masses[i->Index()] = vector<double>(1, i->DeltaMass());
+    } else {
+      masses[i->Index()].push_back(i->DeltaMass());
+    }
+  }
+  int precision = GlobalParams::getModPrecision();
+  MASS_TYPE_T massType = GlobalParams::getIsotopicMass();
+  for (map< int, vector<double> >::const_reverse_iterator i = masses.rbegin();
+       i != masses.rend();
+       i++) {
+    char buffer[64];
+    switch (GlobalParams::getModMassFormat()) {
+      case MOD_MASS_ONLY: {
+        double sum = accumulate(i->second.begin(), i->second.end(), 0.0);
+        sprintf(buffer, "[%.*f]", precision, sum);
+        break;
+      }
+      case AA_PLUS_MOD: {
+        double sum = accumulate(i->second.begin(), i->second.end(),
+                                get_mass_amino_acid(seq[i->first], massType));
+        sprintf(buffer, "[%.*f]", precision, sum);
+        break;
+      }
+      case MOD_MASSES_SEPARATE: {
+        vector<string> massStrings;
+        for (vector<double>::const_iterator j = i->second.begin(); j != i->second.end(); j++) {
+          massStrings.push_back(StringUtils::ToString(*j, precision));
+        }
+        sprintf(buffer, "[%s]", StringUtils::Join(massStrings, ',').c_str());
+        break;
+      }
+    }
+    seq.insert(i->first + 1, buffer);
+  }
+
+  return seq;
+}
+
+/* getters requiring calculation */
+
+/**
+ * \brief Count the number of modified amino acids in the
+ * peptide. This number is distnct from the number of aamods in the
+ * peptide mod since one amino acid can have more than one
+ * modification on it.
+ * \returns The number of amino acids in the peptide that have at
+ * least one modification.
+ */
+int Peptide::countModifiedAAs(){
+  set<unsigned char> indices;
+  for (vector<Modification>::const_iterator i = varMods_.begin(); i != varMods_.end(); i++) {
+    indices.insert(i->Index());
+  }
+  return indices.size();
+}
+
+/**
+ * \returns The mass of the given peptide as determined by the aa sequence.
+ */
+FLOAT_T Peptide::calcSequenceMass(
+  const string& peptide, ///< the query peptide -in
+  MASS_TYPE_T mass_type ///< isotopic mass type (AVERAGE, MONO) -in
+  ) {
+  FLOAT_T peptide_mass = 0;
+  for (string::const_iterator i = peptide.begin(); i != peptide.end(); i++) {
+    peptide_mass += get_mass_amino_acid(*i, mass_type);
+  }
+  if(mass_type == AVERAGE){
+    return peptide_mass + MASS_H2O_AVERAGE;
+  }
+  return peptide_mass + MASS_H2O_MONO;
+}
+
+/**
+ * This appears to be the same as calc_sequence_mass??
+ * \returns The mass of the given peptide.
+ */
+FLOAT_T Peptide::calcMass(MASS_TYPE_T mass_type) const {
+  FLOAT_T mass = 0;
+  char* seq = getSequence();
+  for (char* i = seq; *i != '\0'; i++) {
+    mass += AminoAcidUtil::GetMass(*i, mass_type != AVERAGE);
+  }
+  free(seq);
+
+  return mass_type != AVERAGE ? mass + MASS_H2O_MONO : mass + MASS_H2O_AVERAGE;
+}
+
+FLOAT_T Peptide::calcModifiedMass(MASS_TYPE_T mass_type) const {
+  FLOAT_T mass = calcMass(mass_type);
+  for (vector<Modification>::const_iterator i = varMods_.begin(); i != varMods_.end(); i++) {
+    mass += i->DeltaMass();
+  }
+  vector<Modification> staticMods = getStaticMods();
+  for (vector<Modification>::const_iterator i = staticMods.begin(); i != staticMods.end(); i++) {
+    mass += i->DeltaMass();
+  }
+  return mass;
+}
+
+FLOAT_T Peptide::calcModifiedMass() const {
+  return calcModifiedMass(GlobalParams::getIsotopicMass());
+}
+
+/**
+ * Examines the peptide sequence and counts how many tryptic missed
+ * cleavage sites exist. 
+ *\returns the number of missed cleavage sites in the peptide
+ */
+int Peptide::getMissedCleavageSites() {
+
+  int missed_count = 0;
+  int aa_idx = 0;
+  char* sequence = getSequencePointer();
+
+  // count the missed cleavage sites
+  for(; aa_idx < length_-1; ++aa_idx){
+    if(sequence[aa_idx] == 'K' ||
+       sequence[aa_idx] == 'R'){
+      
+      // skip one that are followed by a P
+      if(sequence[aa_idx+1] == 'P'){
+        continue;
+      }
+      else{
+        ++missed_count;
+      }      
+    } 
+  }
+  
+  return missed_count;
+}
+
+int Peptide::getMissedCleavageSites(
+  set<int> skip ///< skip these amino acid indices.
+) {
+  int missed_count = 0;
+  char* sequence = getSequencePointer();
+
+  // count the missed cleavage sites
+  for (int aa_idx = 0; aa_idx < length_ - 1; ++aa_idx) {
+    if (skip.find(aa_idx) != skip.end()) {
+      continue;
+    }
+
+    bool cleavage_prevented = true;
+    if (sequence[aa_idx] == 'K' || sequence[aa_idx] == 'R') {
+      cleavage_prevented = false;
+      // skip one that are followed by a P
+      if (sequence[aa_idx + 1] == 'P') {
+        cleavage_prevented = true;
+        continue;
+      }
+
+      for (vector<Modification>::const_iterator modIter = varMods_.begin();
+           modIter != varMods_.end();
+           modIter++) {
+        if (modIter->Index() == aa_idx && modIter->PreventsCleavage()) {
+          cleavage_prevented = true;
+          break;
+        }
+      }
+    }
+
+    if (!cleavage_prevented) {
+      ++missed_count;
+    }
+  }
+
+  return missed_count;
+}
+
+
+/**
+ * \brief Find the distance from the c-terminus of the source protein
+ * to the c-terminus of the peptide (seq[0]).  
+ * In the case of multiple source proteins, return the smallest
+ * distance.
+ * \returns The distance from the protein c-terminus.
+ */
+int Peptide::getCDistance(){
+
+  int min_index = MAX_PROTEIN_SEQ_LENGTH;
+  for(vector<PeptideSrc*>::iterator iter= peptide_srcs_.begin();
+       iter!= peptide_srcs_.end();
+       ++iter
+      ){
+    PeptideSrc* cur_src = *iter;
+    int index = cur_src->getStartIdx();
+    if( index < min_index ){
+      min_index = index;
+    }
+  }
+  return min_index - 1;
+}
+
+/**
+ * \brief Find the distance from the n-terminus of the source protein
+ * to the n-terminus of the peptide.
+ * In the case of multiple source proteins, return the smallest
+ * distance.
+ * \returns The distance from the protein c-terminus.
+ */
+int Peptide::getNDistance(){
+
+  int min_index = MAX_PROTEIN_SEQ_LENGTH;
+  int peptide_length = getLength();
+
+  for(vector<PeptideSrc*>::iterator iter= peptide_srcs_.begin();
+       iter!= peptide_srcs_.end();
+       ++iter
+      ){
+    PeptideSrc* cur_src = *iter;
+    int protein_length = cur_src->getParentProtein()->getLength();
+    // get index of end
+    int start_index = cur_src->getStartIdx();
+
+    int cidx = protein_length - (start_index + peptide_length - 1);
+    if( cidx < min_index){
+      min_index = cidx;
+  }
+  }  
+  return min_index;
+
+}
+
+/**
+ * Change the given target peptide into a decoy by randomizing its sequence.
+ * Uses settings in parameter.c to decide between shuffling and
+ * reversing the sequence.  Any modifications that exist will be
+ * maintained on the same amino acids whose position will move.  If
+ * the peptide is already a decoy, replaces the existing decoy
+ * sequence. 
+ */
+void Peptide::transformToDecoy() {
+  bool reverse_seq = (get_decoy_type_parameter("decoys") == PROTEIN_REVERSE_DECOYS);
+
+  // delete any existing decoy sequence
+  if (decoy_modified_seq_){  
+    freeModSeq(decoy_modified_seq_); 
+  }
+  // if the peptide is already modified, shuffle the modified sequence
+  if (!varMods_.empty()) {
+    MODIFIED_AA_T* new_seq = NULL;
+    if (reverse_seq) {
+      new_seq = generateReversedModSequence();
+    } else {
+      new_seq = generateShuffledModSequence();
+    }
+    decoy_modified_seq_ = new_seq;
+  } else {// shuffle the unmodified sequence
+    char* new_seq = NULL;
+    if (reverse_seq) {
+      new_seq = generateReversedSequence();
+    } else {
+      new_seq = generateShuffledSequence();
+    }
+    convert_to_mod_aa_seq(new_seq, &(decoy_modified_seq_));
+    std::free(new_seq);
+  }
+}
+
+/**
+ * \brief Return a randomly shuffled version of the given peptide's
+ * sequence, leaving the terminal amino acids in place.  Ensures that
+ * the shuffled version is not the same as the given peptide.
+ * 
+ * \returns A newly-allocated char array with the shuffled sequence.
+ */
+static const int MAX_SHUFFLES = 5; // Don't bother trying to shuffle more than this.
+char* Peptide::generateShuffledSequence() {
+  // Allocate a copy of the peptide.
+  char* sequence = getSequence();
+  int length = length_;
+
+  // Shuffle from left to right, using the Knuth algorithm for shuffling.
+  int num_shuffles = 0;
+  do {
+
+    // Don't move the n-term and c-term amino acids
+    int start_idx = 1;
+    int end_idx = length - 2;
+
+    while(start_idx < end_idx){
+      int switch_idx = get_random_number_interval(start_idx, end_idx);
+      char temp_char = sequence[start_idx];
+      sequence[start_idx] = sequence[switch_idx];
+      sequence[switch_idx] = temp_char;
+      ++start_idx;
+    }
+    num_shuffles++;
+  } while (equal_peptides(sequence, this) && (num_shuffles < MAX_SHUFFLES));
+
+  return sequence;
+}
+
+/**
+ * \brief Return a reversed version of the given peptide's sequence as
+ * an array of char (A-Z).  Leave the first and last residue
+ * unchanged.  If the reversed sequence is identical to the target,
+ * shuffle the sequence instead.
+ *
+ * \returns A newly-allocated char array of the reversed sequence.
+ */
+char* Peptide::generateReversedSequence() {
+  char* sequence = getSequence();
+  int length = length_;
+  int start_idx = 1;       // leave first ...
+  int end_idx = length -2; // ...and last residue in place
+  char temp_char = 0;
+
+  while(start_idx < end_idx){
+    temp_char = sequence[end_idx];
+    sequence[end_idx] = sequence[start_idx];
+    sequence[start_idx] = temp_char;
+    start_idx++;
+    end_idx--;
+  }
+
+  // check to see if the reversed sequence is the same as original
+  if( strncmp(sequence, getSequencePointer(), length_) == 0 ){
+    carp(CARP_DETAILED_INFO, 
+         "Peptide %s is a palindrome and will be shuffled instead of reversed.",
+         sequence);
+    std::free(sequence);
+    sequence = generateShuffledSequence();
+  }
+
+  return sequence;
+}
+
+/**
+ * \brief Return a randomly shuffled version of the given peptide's 
+ * sequence as an array of MODIIFIED_AA_T.  Based on the peptide type,
+ * will leave the end(s) unchanged to preserve the tryptic property.
+ * 
+ *\returns A newly-allcoated MODIFIED_AA_T array of the shuffled sequence.
+ */
+MODIFIED_AA_T* Peptide::generateShuffledModSequence() {
+  //TODO (BF 6-Apr-09): should we warn if seq is len 3 and won't change?
+  MODIFIED_AA_T* sequence = getModifiedAASequence();
+  int length = length_;
+  int start_idx = 1;
+  int end_idx = length - 2;
+  int switch_idx = 0;
+  MODIFIED_AA_T temp_aa = 0;
+
+  // shuffle from left to right, using the Knuth algorithm for shuffling.
+  while (start_idx < end_idx) {
+    switch_idx = get_random_number_interval(start_idx, end_idx);
+    temp_aa = sequence[start_idx];
+    sequence[start_idx] = sequence[switch_idx];
+    sequence[switch_idx] = temp_aa;
+    ++start_idx;
+  }
+
+  return sequence;
+}
+
+/**
+ * \brief Return a reversed version of the given peptide's sequence as
+ * an array of MODIFIED_AA_T.  Leave the first and last residue
+ * unchanged.  If the reversed sequence is identical to the target,
+ * shuffle the sequence instead.
+ *
+ * \returns A newly-allocated MODIFIED_AA_T array of the reversed sequence.
+ */
+MODIFIED_AA_T* Peptide::generateReversedModSequence() {
+
+  MODIFIED_AA_T* sequence = getModifiedAASequence();
+  int length = length_;
+  int start_idx = 0;
+  int end_idx = length - 1;
+  MODIFIED_AA_T temp_aa = 0;
+
+  // first check to see if it will yield a different seq when reversed
+  if( modified_aa_seq_is_palindrome(sequence, length) == true){
+    return generateShuffledModSequence();
+  }
+
+  // Do not move the first and last residue, regardless of enzyme
+  ++start_idx;
+  --end_idx;
+
+  // reverse  
+  while(start_idx < end_idx){
+    temp_aa = sequence[start_idx];
+    sequence[start_idx] = sequence[end_idx];
+    sequence[end_idx] = temp_aa;
+    ++start_idx;
+    end_idx--;
+  }
+
+  return sequence;
+}
+
+
+/* Comparisons for sorting */
+
+/**
+ * Compare two peptide sequences.
+ * \returns Zero (0) if the sequences are identical, -1 if the first
+ * sequence is less than the first and 1 if the first sequence is
+ * greater than teh first.
+ */
+int Peptide::triCompareSequence(
+  Peptide* peptide_one,  ///< the peptide sequence to compare  -out
+  Peptide* peptide_two  ///< the peptide sequence to compare  -out
+  )
+{
+  // find the shorter peptide
+  int short_len = 0;
+  if( peptide_one->length_ < peptide_two->length_ ){
+    short_len = peptide_one->length_;
+  } else {
+    short_len = peptide_two->length_;
+  }
+
+  char* seq_one = peptide_one->getPeptideSrc()->getSequencePointer();
+  char* seq_two = peptide_two->getPeptideSrc()->getSequencePointer();
+    
+  // stop comparing as soon as they differ
+  int pep_idx = 0;
+  for(pep_idx = 0; pep_idx < short_len; pep_idx++ ){
+      if(seq_one[pep_idx] != seq_two[pep_idx]){
+        pep_idx++; // stop pointing one after the difference
+        break;
+      }
+  }
+
+  // move index back one to the last letter compared
+  pep_idx--;
+
+  // if the seqs are the same up to this point, then compare the lengths
+  if( seq_one[pep_idx] == seq_two[pep_idx] ){
+    if( peptide_one->length_ == peptide_two->length_ ){ // same seq
+      return 0;
+    } else if ( peptide_one->length_ < peptide_two->length_ ){ 
+      return -1;
+    } else {
+      return 1;
+    }
+  }
+
+  // else, the seqs are different
+  if(seq_one[pep_idx] < seq_two[pep_idx]){
+    return -1;
+  } else {
+    return 1;
+  }
+
+}
+/**
+ * Compare the sequence of two peptides and return true if the first
+ * petpide sequence is less than (in a lexical sort) the second
+ * peptide.  Return false if they are idential peptides.
+ */
+bool Peptide::lessThan(
+  Peptide* peptide_one,
+  Peptide* peptide_two
+  ){
+  // find the shorter peptide
+  int short_len = 0;
+  if( peptide_one->length_ < peptide_two->length_ ){
+    short_len = peptide_one->length_;
+  } else {
+    short_len = peptide_two->length_;
+  }
+
+  char* seq_one = peptide_one->getPeptideSrc()->getSequencePointer();
+  char* seq_two = peptide_two->getPeptideSrc()->getSequencePointer();
+    
+  // stop comparing as soon as they differ
+  int pep_idx = 0;
+  for(pep_idx = 0; pep_idx < short_len; pep_idx++ ){
+      if(seq_one[pep_idx] != seq_two[pep_idx]){
+        break;
+      }
+  }
+  if( seq_one[pep_idx] == seq_two[pep_idx] ){
+    return (peptide_one->length_ < peptide_two->length_);
+  } 
+
+  return (seq_one[pep_idx] < seq_two[pep_idx]);
+}
+
+/* Public functions--Printing / parsing */
+
+/**
+ * Fills the given vectors with the names and descriptions of all
+ * proteins containing this peptide.  Makes the descriptions
+ * xml-friendly by swapping double for single quotes and angled braces
+ * for square. Returned in the same order as getFlankingAAs().  Clears
+ * any existing values in the vectors.
+ * Adapted from Match::get_information_of_proteins()
+ * \returns The number of proteins.
+ */
+int Peptide::getProteinInfo(vector<string>& protein_ids,
+                            vector<string>& protein_descriptions){
+
+  protein_ids.clear();
+  protein_descriptions.clear();
+
+  for(PeptideSrcIterator iter = getPeptideSrcBegin(); 
+      iter!=getPeptideSrcEnd();
+      ++iter
+   ){
+    PeptideSrc* peptide_src = *iter; 
+    Protein* protein = peptide_src->getParentProtein();
+    protein_ids.push_back(protein->getIdPointer());
+
+    string description = "";
+    const string& annotation_pointer = protein->getAnnotationPointer();
+    if (!annotation_pointer.empty()) {
+      description = protein->getAnnotationPointer();
+      // replace double quotes with single quotes
+      replace(description.begin(), description.end(), '"', '\'');
+      // remove any xml tags in the description by replacing <> with []
+      replace(description.begin(), description.end(), '<', '[');
+      replace(description.begin(), description.end(), '>', ']');
+    }
+    protein_descriptions.push_back(description);
+
+  } 
+
+  return protein_ids.size();
+}
+
+/* Public functions--Iterators */
+
+/**
+ * Instantiates a new residue_iterator from a peptide.
+ * \returns a RESIDUE_ITERATOR_T object.
+ */
+RESIDUE_ITERATOR_T* new_residue_iterator(
+  Peptide* peptide ///< peptide sequence to iterate -in
+  )
+{
+  RESIDUE_ITERATOR_T* residue_iterator =
+    (RESIDUE_ITERATOR_T*)mycalloc(1, sizeof(RESIDUE_ITERATOR_T));
+  
+  residue_iterator->peptide =  peptide;
+  residue_iterator->residue_idx = 0;
+  residue_iterator->sequence = peptide->getSequence();
+  return residue_iterator;
+}        
+
+/**
+ * Frees an allocated residue_iterator object.
+ */
+void free_residue_iterator(
+  RESIDUE_ITERATOR_T* residue_iterator ///< free this object -in
+  )
+{
+  free(residue_iterator->sequence);
+  free(residue_iterator);
+}
+
+/**
+ * The basic iterator functions.
+ * \returns true if there are additional residues to iterate over, false if not.
+ */
+bool residue_iterator_has_next(
+  RESIDUE_ITERATOR_T* residue_iterator ///< the query iterator -in
+  )
+{
+  return (residue_iterator->residue_idx < residue_iterator->peptide->getLength());
+}
+
+/**
+ * \returns The next residue (a character) in the peptide.
+ */
+char residue_iterator_next(
+  RESIDUE_ITERATOR_T* residue_iterator  ///< the query iterator -in
+  )
+{
+  ++residue_iterator->residue_idx;
+  return residue_iterator->sequence[residue_iterator->residue_idx - 1];
+}
+
+/**
+ * \brief Builds a comma delimited string listing the 
+ * protein id(peptide start index) for the sources of 
+ * a peptide
+ *
+ * \returns a string of the protein sources for this peptide
+ */
+string Peptide::getProteinIdsLocations() {
+
+  set<string> protein_ids_locations;
+  string protein_field_string;  
+
+  std::ostringstream protein_field_stream;
+  if (!peptide_srcs_.empty()) {
+    for( PeptideSrcIterator iter = getPeptideSrcBegin();
+      iter!=getPeptideSrcEnd();++iter){
+      
+      PeptideSrc* peptide_src =*iter;
+      Protein* protein = peptide_src->getParentProtein();
+      string& protein_id = protein->getIdPointer();
+      std::ostringstream protein_loc_stream;
+      protein_loc_stream << protein_id;
+
+      if (!protein->isPostProcess()) {
+       int peptide_loc = peptide_src->getStartIdx();      
+        protein_loc_stream << "(" << peptide_loc << ")";
+      } else if (peptide_src->getStartIdxOriginal() > 0) {
+        protein_loc_stream << "(" << peptide_src->getStartIdxOriginal() << ")";
+      }
+
+      protein_ids_locations.insert(protein_loc_stream.str());
+    }
+  }
+
+  set<string>::iterator result_iter = protein_ids_locations.begin();
+  protein_field_string = *result_iter;
+
+  while(++result_iter != protein_ids_locations.end()) {
+    protein_field_string += "," + *result_iter;
+  }
+
+  return protein_field_string;
+}
+
+ 
+/**
+ * \brief Builds a comma delimited string listing the protein ids
+ * for the sources of a peptide.
+ */
+vector<string> Peptide::getProteinIds() {
+  vector<string> ids;
+  for (PeptideSrcIterator iter = getPeptideSrcBegin(); iter != getPeptideSrcEnd(); ++iter) {
+    ids.push_back((*iter)->getParentProtein()->getIdPointer());
+  }
+  return ids;
+}
+
+/**
+ * \brief Builds a comma delimited string listing the flanking amino acids
+ * for the sources of a peptide.
+ *
+ * \returns a pointer to the string. Caller is responsible for freeing memeory.
+ * If peptide has no sources returns NULL.
+ */
+char* Peptide::getFlankingAAs() {
+
+  string flanking_string = "";
+
+  // iterate over all PeptideSrc
+  for (PeptideSrcIterator iter = getPeptideSrcBegin();
+       iter != getPeptideSrcEnd();
+       ++iter) {
+    // add comma if there is already flanking AA(s) in the string
+    if (!flanking_string.empty()) {
+      flanking_string += ',';
+    }
+    PeptideSrc* src = *iter;
+    Protein* protein = src->getParentProtein();
+    int start_idx = src->getStartIdx();
+    if (!protein->isPostProcess()) {
+      // not post process, get flanking AAs from protein sequence
+      int end_idx = start_idx + getLength() - 1;
+      int protein_length = protein->getLength();
+      char* protein_seq = protein->getSequencePointer();
+      flanking_string += (start_idx > 1) ? protein_seq[start_idx - 2] : '-';
+      flanking_string += (end_idx < protein_length) ? protein_seq[end_idx] : '-';
+    } else {
+
+      // post process, get flanking AAs from the protein object
+      PostProcessProtein* post_process_protein = (PostProcessProtein*)protein;
+      flanking_string += post_process_protein->getNTermFlankingAA(start_idx - 1);
+      flanking_string += post_process_protein->getCTermFlankingAA(start_idx - 1);
+    }
+  }
+
+  // convert to c string
+  int length = flanking_string.length();
+  char* flanking_field = (char*)malloc(sizeof(char)*(length + 1));
+  memcpy(flanking_field, flanking_string.c_str(), length);
+  flanking_field[length] = '\0';
+
+  return flanking_field;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/model/Peptide.h b/src/model/Peptide.h
new file mode 100644
index 0000000..66c27cb
--- /dev/null
+++ b/src/model/Peptide.h
@@ -0,0 +1,490 @@
+/**
+ * \file peptide.h 
+ * $Revision: 1.52 $
+ * \brief Object for representing one peptide.
+ */
+#ifndef CRUX_PEPTIDE_H_
+#define CRUX_PEPTIDE_H_
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "util/utils.h"
+#include "util/crux-utils.h"
+#include "util/mass.h"
+#include "Modification.h"
+#include "Protein.h"
+#include "model/objects.h"
+#include "io/carp.h"
+#include "PeptideConstraint.h"
+#include "Database.h"
+#include "util/modifications.h"
+#include "util/peptide_modifications.h"
+
+//these may be elsewhere
+static const int MAX_PEPTIDE_LENGTH = 255;
+
+#include <string>
+
+/**
+ * \class peptide
+ * \brief A subsequence of a protein.
+ */
+
+class ModificationDefinition;
+
+namespace Crux {
+
+class Modification;
+
+class Peptide {
+
+ protected:
+  int pointer_count_;
+  unsigned char length_; ///< The length of the peptide
+  std::vector<PeptideSrc*> peptide_srcs_; ///< a vector of peptide_srcs_
+
+  MODIFIED_AA_T* decoy_modified_seq_; ///< randomized peptide sequence
+  std::string sequence_;
+  std::vector<Modification> varMods_;
+
+ public:
+  /*  Allocators/deallocators  */
+  
+  /**
+   * \returns An (empty) peptide object.
+   */
+  Peptide();
+  Peptide(std::string sequence);
+  Peptide(std::string sequence, std::vector<Modification> mods);
+
+  /**
+   * \returns A new peptide object, populated with the user specified
+   * parameters.
+   */
+  Peptide(
+    unsigned char length,     ///< The length of the peptide -in
+    Crux::Protein* parent_protein, ///< The parent_protein of this peptide -in
+    int start_idx ///< Start index of peptide in the protein sequence -in
+    );
+
+  /**
+   * \brief Allocates a new peptide giving it the values of the source
+   * peptide.
+   * \returns A newly allocated peptide identical to the source.
+   */
+  Peptide(
+    Peptide* src ///< source peptide -in
+  );
+                             
+  /**
+   * Merges two identical peptides by adding the peptide_src of the
+   * second to the first.  The second peptide remains unchanged.
+   * Does not comfirm identity of peptides.
+   * \returns true if merge is successfull.
+   */
+  static bool mergePeptidesCopySrc(
+    Peptide* peptide_dest,
+    Peptide* peptide_giver
+    );
+
+  /**
+   * Frees an allocated peptide object.
+   * Depending on peptide_src implementation determines how to free srcs
+   * This decision is made by global variable PEPTIDE_SRC_USE_LINK_LIST
+   */
+  ~Peptide();
+
+  Crux::Peptide* copyPtr();
+
+  /*  Getters and Setters  */
+
+  /*  Get-set:  source */
+  
+  /**
+   * sets the peptide_src field in the peptide
+   * must pass on a heap allocated peptide_src object
+   * does not copy in the object, just the pointer to the object.
+   */
+  void setPeptideSrc(
+    PeptideSrc* new_association ///< new peptide_src -in
+    );
+
+  /**
+   * this method adds the new_association to the end of the existing peptide's 
+   * linklist of peptide_srcs
+   * must pass on a heap allocated peptide_src object
+   * does not copy in the object, just the pointer to the object.
+   */
+  void addPeptideSrc(
+    PeptideSrc* new_association ///< new peptide_src -in
+    );
+
+  /**
+   * this method adds the peptide src array to an EMPTY peptide
+   * only used in index.c, when the peptide src count for  peptide is known
+   * Any existing peptide_src will lose it's reference
+   */
+  void addPeptideSrcArray(
+    PeptideSrc* peptide_src_array ///< new peptide_src -in
+    );
+
+  /**
+   * returns a pointer to the first PeptideSrc object of the peptide
+   */
+  PeptideSrc* getPeptideSrc() const;
+
+  /**
+   * returns a point to the peptide_protein_association field of the peptide
+   */
+  std::vector<PeptideSrc*>& getPeptideSrcVector();
+
+  PeptideSrcIterator getPeptideSrcBegin();
+  PeptideSrcIterator getPeptideSrcEnd();
+
+  /**
+   * get the peptide->first peptide_src->parent protein->database
+   */
+  Database* getFirstSrcDatabase();
+
+  /**
+   * \returns The number of peptide sources (i.e. proteins) the peptide has.
+   */
+  int getNumPeptideSrc();
+
+  /**
+   * returns a pointer to the peptide's first parent protein field of the peptide
+   */
+  Crux::Protein* getParentProtein();
+
+  /**
+   * sets the sequence length of the peptide
+   */
+  void setLength(
+    unsigned char length  ///< the length of sequence -in
+    );
+
+  /**
+   *\returns the sequence length of the peptide
+   */
+  unsigned char getLength();
+
+  /**
+   * \brief Get the sequence of a peptide.
+   * Goes to the first peptide_src to gain sequence, thus must have at
+   * least one peptide src 
+   * \returns A newly allocated copy of the sequence.
+   */
+  char* getSequence() const;
+
+  /**
+   * \brief Get a string representation of the target (unshuffled)
+   * peptide sequence with no added modification symbols.
+   * For target peptides, returns the same as get_peptide_sequence.
+   * \returns The newly-allocated sequence of peptide
+   */
+  std::string getUnshuffledSequence() const;
+
+  /**
+   * \returns a pointer to the start of peptide sequence with in it's protein parent sequence, 
+   * thus does not have terminating signe until end of parent protein
+   * goes to the first peptide_src to find the location of start, thus must have at least one peptide src
+   * should not print, will result in printing the entire protein sequence
+   */
+  char* getSequencePointer();
+
+  /**
+   * \brief Formats the sequence of the peptide with each flanking AA.
+   * 
+   * Format is "X.peptide_sequence.X", where "X" is a flanking amino acid.
+   * "X", is printed as "-" if there is no flanking sequence.
+   * Goes to the first peptide_src to gain sequence, thus must have at
+   * least one peptide src 
+   * \returns A newly allocated string with the sqt-formated peptide sequence.
+   */
+  std::string getSequenceSqt();
+
+  /**
+   * \brief Return a char for the amino acid c-terminal to the peptide
+   * in the peptide src at the given index.
+   *
+   * \returns A char (A-Z) or - if peptide is the first in the protein.
+   */
+  char getCTermFlankingAA();
+
+  /**
+   * \brief Return a char for the amino acid n-terminal to the peptide
+   * in the peptide src at the given index.
+   *
+   * \returns A char (A-Z) or - if peptide is the last in the protein.
+   */
+  char getNTermFlankingAA();
+
+  void addMod(const ModificationDefinition* mod, unsigned char index);
+  void setMods(const std::vector<Modification>& mods);
+  std::vector<Modification> getMods() const;
+  std::vector<Modification> getVarMods() const;
+  std::vector<Modification> getStaticMods() const;
+
+  /**
+   * \brief Add a modification to a peptide.
+   *
+   * Adds the modified sequence to the peptide and changes the peptide
+   * mass based on the mass change in the peptide_mod.
+   * \returns void
+   */
+  void setMod(
+    MODIFIED_AA_T* mod_seq, ///< modified seq to add
+    PEPTIDE_MOD_T* pep_mod  ///< mod that made the seq
+  );
+
+  std::string getModsString() const;
+
+  bool isModified();
+
+  bool isDecoy();
+
+  /**
+   * \brief Get the modified aa sequence
+   *
+   * If the peptide has no modifications, create a sequence of
+   * MODIFIED_AA_T's in which none of them are actually modified.
+   * \returns A newly allocated copy of the sequence of MODIFIED_AA_Ts.
+   */
+  //MODIFIED_AA_T* get_peptide_modified_sequence( // why is this not working??!!
+  unsigned short* getModifiedAASequence();
+  
+  /**
+   * sets the modified sequence for the peptide
+   */
+  void setModifiedAASequence(
+    MODIFIED_AA_T* mod_seq,  ///< modified sequence to set
+    bool decoy ///< is the peptide a decoy?
+  );
+
+  /**
+   * \brief Get the modified aa sequence in string form.
+   *
+   * If the peptide has no modifications, returns same string as
+   * get_peptide_sequence.  If modified, adds the mod symbols to the string.
+   * \returns The peptide sequence including any modifications.
+   */
+  std::string getModifiedSequenceWithSymbols();
+
+  /**
+   * \brief Get the modified aa sequence in string form.
+   *
+   * If the peptide has no modifications, returns same string as
+   * get_peptide_sequence.  If modified, adds in brackets the masses of
+   * all modifications.  If merge_masses is true, prints the sum of all
+   * modifications for a residue.  If false, prints all masses in a
+   * comma separated list.
+   * \returns The peptide sequence including any modifications.
+   */
+  std::string getModifiedSequenceWithMasses();
+
+  void setDecoyModifiedSeq(MODIFIED_AA_T* decoy_modified_seq);
+
+  /*  Getters requiring calculation */
+  int countModifiedAAs();
+
+  /**
+   * \returns The mass of the given peptide.
+   */
+  static FLOAT_T calcSequenceMass(
+    const std::string& peptide, ///< the query peptide -in
+    MASS_TYPE_T mass_type ///< isotopic mass type (AVERAGE, MONO) -in
+    );
+
+  /**
+   * \returns The mass of the given peptide.
+   */
+  FLOAT_T calcMass(
+    MASS_TYPE_T mass_type ///< isotopic mass type (AVERAGE, MONO) -in
+    ) const;
+
+  /**
+   * \returns the mass of the given peptide, with modifications
+   */
+  FLOAT_T calcModifiedMass(
+    MASS_TYPE_T mass_type ///< isotopic mass type (AVERAGE, MONO) -in
+  ) const;
+
+  FLOAT_T calcModifiedMass() const;
+
+  /**
+   * Examines the peptide sequence and counts how many tryptic missed
+   * cleavage sites exist. 
+   *\returns the number of missed cleavage sites in the peptide
+   */
+  int getMissedCleavageSites();
+
+  int getMissedCleavageSites(
+    std::set<int> skip //skip these amino acid indices.
+  );
+
+  /**
+   * \brief Find the distance from the n-terminus of the source protein
+   * to the n-terminus of the peptide.  
+   * In the case of multiple source proteins, return the smallest
+   * distance.
+   * \returns The distance from the protein n-terminus.
+   */
+  int getNDistance();
+
+  /**
+   * \brief Find the distance from the c-terminus of the source protein
+   * to the c-terminus of the peptide.
+   * In the case of multiple source proteins, return the smallest
+   * distance.
+   * \returns The distance from the protein c-terminus.
+   */
+  int getCDistance();
+
+  /**
+   * Change the given target peptide into a decoy by randomizing its sequence.
+   * Uses settings in parameter.c to decide between shuffling and
+   * reversing the sequence.  Any modifications that exist will be
+   * maintained on the same amino acids whose position will move.
+   */
+  void transformToDecoy();
+
+  /**
+   * \brief Return a randomly shuffled version of the given peptide's 
+   * sequence as an array of char (A-Z).  Based on the peptide type,
+   * will leave the end(s) unchanged to preserve the tryptic property. 
+   * 
+   *\returns A newly-allcoated char array of the shuffled sequence.
+   */
+  char* generateShuffledSequence();
+
+  /**
+   * \brief Return a reversed version of the given peptide's sequence as
+   * an array of char (A-Z).  Leave the first and last residue
+   * unchanged.  If the reversed sequence is identical to the target,
+   * shuffle the sequence instead.
+   *
+   * \returns A newly-allocated char array of the reversed sequence.
+   */
+  char* generateReversedSequence();
+
+  /**
+   * \brief Return a randomly shuffled version of the given peptide's 
+   * sequence as an array of MODIIFIED_AA_T.  Based on the peptide type,
+   * will leave the end(s) unchanged to preserve the tryptic property.
+   * 
+   *\returns A newly-allcoated MODIFIED_AA_T array of the shuffled sequence.
+   */
+  MODIFIED_AA_T* generateShuffledModSequence();
+
+  /**
+   * \brief Return a reversed version of the given peptide's sequence as
+   * an array of MODIFIED_AA_T.  Leave the first and last residue
+   * unchanged.  If the reversed sequence is identical to the target,
+   * shuffle the sequence instead.
+   *
+   * \returns A newly-allocated MODIFIED_AA_T array of the reversed sequence.
+   */
+  MODIFIED_AA_T* generateReversedModSequence();
+
+  /*  Comparisons for sorting  */
+
+  /**
+   * Compare two peptide sequences.
+   * \returns Zero (0) if the sequences are identical, -1 if the first
+   * sequence is less than the first and 1 if the first sequence is
+   * greater than the first.
+   */
+  static int triCompareSequence(
+    Peptide* peptide_one,  ///< the peptide sequence to compare  -out
+    Peptide* peptide_two  ///< the peptide sequence to compare  -out
+    );
+
+  /**
+   * Compare the sequence of two peptides and return true if the first
+   * peptide sequence is less than (in a lexical sort) the second peptide.
+   */
+  static bool lessThan(
+    Peptide* peptide_one,
+    Peptide* peptide_two
+    );
+
+  /**
+   * \brief Builds a comma delimited string listing the 
+   * protein id(peptide start index) for the sources of 
+   * a peptide
+   *
+   * \returns a string of the protein sources for this peptide
+   */
+  std::string getProteinIdsLocations();
+
+  /**
+   * \brief Builds a comma delimited string listing the protein ids
+   * for the sources of a peptide.
+   */
+  std::vector<std::string> getProteinIds();
+
+  /**
+   * \brief Builds a comma delimited string listing the flanking amino acids
+   * for the sources of a peptide.
+   *
+   * \returns a pointer to the string. Caller is responsible for freeing memeory.
+   * If peptide has no sources returns NULL.
+   */
+  char* getFlankingAAs();
+
+  /**
+   * Fills the given vectors with the names and descriptions of all
+   * proteins containing this peptide.  Returned in the same order as
+   * getFlankingAAs().  Clears any existing data in the vectors.
+   * \returns The number of proteins.
+   */
+  int getProteinInfo(std::vector<std::string>& protein_ids,
+                     std::vector<std::string>& protein_descriptions);
+
+};  // class Peptide
+
+};  // namespace Crux
+
+/*  Iterators */
+
+/**
+ * Instantiates a new residue_iterator from a peptide.
+ * \returns a RESIDUE_ITERATOR_T object.
+ */
+RESIDUE_ITERATOR_T* new_residue_iterator(
+  Crux::Peptide* peptide ///< peptide sequence to iterate -in
+  );
+
+/**
+ * Frees an allocated residue_iterator object.
+ */
+void free_residue_iterator(
+  RESIDUE_ITERATOR_T* residue_iterator ///< free this object -in
+  );
+
+/**
+ * The basic iterator functions.
+ * \returns true if there are additional residues to iterate over, false if not.
+ */
+bool residue_iterator_has_next(
+  RESIDUE_ITERATOR_T* residue_iterator ///< the query iterator -in
+  );
+
+/**
+ * \returns The next residue (a character) in the peptide.
+ */
+char residue_iterator_next(
+  RESIDUE_ITERATOR_T* residue_iterator  ///< the query iterator -in
+  );
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/PeptideConstraint.cpp b/src/model/PeptideConstraint.cpp
new file mode 100644
index 0000000..2039418
--- /dev/null
+++ b/src/model/PeptideConstraint.cpp
@@ -0,0 +1,317 @@
+/*************************************************************************//**
+ * \file PeptideConstraint.cpp
+ * \brief Object for holding the peptide constraint information.
+ ****************************************************************************/
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "util/utils.h"
+#include "util/crux-utils.h"
+#include "util/mass.h"
+#include "util/GlobalParams.h"
+#include "util/Params.h"
+#include "Peptide.h"
+#include "Protein.h"
+#include "io/carp.h"
+#include "PeptideConstraint.h"
+
+using namespace Crux;
+
+/**
+ * Allocates a new (empty) peptide_constraint object.
+ * \returns An allocated PEPTIDE_CONSTRAINT_T object.
+ */
+void PeptideConstraint::init() {
+  carp(CARP_DETAILED_DEBUG, "Initializing peptide constraint");
+  enzyme_ = (ENZYME_T)0;
+  digestion_ = (DIGEST_T)0;
+  min_mass_ = 0;
+  min_length_ = 0;
+  max_length_ = 0;
+  num_mis_cleavage_ = 0;
+  mass_type_ = (MASS_TYPE_T)0;
+  num_pointers_ = 1;
+}
+
+PeptideConstraint::PeptideConstraint() {
+  init();
+}
+
+/**
+ * Instantiates a new peptide_constraint object.
+ * \returns An allocated PEPTIDE_CONSTRAINT_T object.
+ */
+PeptideConstraint::PeptideConstraint(
+  ENZYME_T enzyme, 
+  DIGEST_T digest,
+  FLOAT_T min_mass, ///< the minimum mass -in
+  FLOAT_T max_mass, ///< the maximum mass -in
+  int min_length, ///< the minimum length of peptide -in
+  int max_length,  ///< the maximum lenth of peptide(max limit = 255) -in
+  int num_mis_cleavage, ///< The maximum mis cleavage of the peptide -in
+  MASS_TYPE_T mass_type ///< isotopic mass type (AVERAGE, MONO) -in
+  )
+{
+  // max length must be less or equal than 255 becuase of the unsigned char limit of 255
+  if(max_length > 255){
+    carp(CARP_FATAL, "ERROR: cannot set max length higer than 255");
+  }
+  
+  init();
+
+  setEnzyme(enzyme);
+  setDigest(digest);
+  setMinMass(min_mass);
+  setMaxMass(max_mass);
+  setMinLength(min_length);
+  setMaxLength(max_length);
+  setNumMisCleavage(num_mis_cleavage);
+  setMassType(mass_type);
+}
+
+PeptideConstraint::PeptideConstraint(
+  ENZYME_T enzyme, 
+  DIGEST_T digest,
+  int min_length, ///< the minimum length of peptide -in
+  int max_length,  ///< the maximum lenth of peptide(max limit = 255) -in
+  int num_mis_cleavage ///< The maximum mis cleavage of the peptide -in
+) {
+  // max length must be less or equal than 255 becuase of the unsigned char limit of 255
+  if (max_length > 255) {
+    carp(CARP_FATAL, "ERROR: cannot set max length higer than 255");
+  }
+  
+  init();
+
+  setEnzyme(enzyme);
+  setDigest(digest);
+  setMinLength(min_length);
+  setMaxLength(max_length);
+  setNumMisCleavage(num_mis_cleavage);
+}
+
+/**
+ * \brief Create a new peptide constraint and populate its values
+ * based on those in parameter.c 
+ * \returns A newly allocated peptide constraint.
+ */
+PeptideConstraint* PeptideConstraint::newFromParameters() {
+
+  PeptideConstraint* new_constraint = new PeptideConstraint();
+
+  new_constraint->setEnzyme(GlobalParams::getEnzyme());
+  new_constraint->setDigest(GlobalParams::getDigestion());
+  new_constraint->setMinMass(GlobalParams::getMinMass());
+  new_constraint->setMaxMass(GlobalParams::getMaxMass());
+  new_constraint->setMinLength(GlobalParams::getMinLength());
+  new_constraint->setMaxLength(GlobalParams::getMaxLength());
+  // TODO : change this after missed cleavage is an integer parameter
+  // rather than boolean.
+  new_constraint->setNumMisCleavage(GlobalParams::getMissedCleavages());
+  new_constraint->setMassType(GlobalParams::getIsotopicMass());
+
+  return new_constraint;
+}
+
+
+/**
+ * Copy peptide pointer and increment pointer count
+ */
+PeptideConstraint* PeptideConstraint::copyPtr(
+  PeptideConstraint* constraint
+  ) {
+
+  constraint->num_pointers_++;
+  return constraint;
+}
+
+// FIXME check the association..as long as there is one tryptic parent then true
+// num_miss_cleavage is not implemented..add if needed
+/** 
+ * Determines if a peptide satisfies a peptide_constraint.
+ * \returns TRUE if the constraint is satisified. FALSE if not.
+ */
+bool PeptideConstraint::isSatisfied(
+  Peptide* peptide ///< the query peptide -in
+  ) {
+
+  return (peptide->getLength() <= getMaxLength() &&
+     peptide->getLength() >= getMinLength() &&
+     peptide->calcModifiedMass() <= getMaxMass() &&
+     peptide->calcModifiedMass() >= getMinMass()
+     );
+}
+
+/**
+ * Frees an allocated peptide_constraint object.
+ */
+void PeptideConstraint::free(
+  PeptideConstraint* peptide_constraint ///< object to free -in 
+  ) {
+
+  peptide_constraint->num_pointers_--;
+  if (peptide_constraint->num_pointers_ <= 0) {
+    carp(CARP_DETAILED_DEBUG, "Final free of peptide constraint");
+    delete peptide_constraint;
+  }
+
+}
+
+PeptideConstraint::~PeptideConstraint() {
+
+}
+
+/**
+ * Sets the enzyme used for the in silicos digestion
+ * of the protein sequence into peptides.
+ */
+void PeptideConstraint::setEnzyme(
+  ENZYME_T enzyme
+){
+
+  enzyme_ = enzyme;
+}
+
+/**
+ * \returns The enzyme for this peptide constraint.
+ */
+ENZYME_T PeptideConstraint::getEnzyme()
+{
+  return enzyme_;
+}
+
+/**
+ * Sets the level of digestion for the peptide constraint.
+ */
+void PeptideConstraint::setDigest(
+  DIGEST_T digest
+  ){
+
+  digestion_ = digest;
+}
+
+/**
+ * \returns The level of digestion for the peptide constraint.
+ */
+DIGEST_T PeptideConstraint::getDigest() {
+
+  return digestion_;
+}
+
+
+/**
+ * sets the min mass of the peptide_constraint
+ */
+void PeptideConstraint::setMinMass(
+  FLOAT_T min_mass  ///< the min mass of the peptide constraint - in
+  )
+{
+  min_mass_ = min_mass;
+}
+
+/**
+ * \returns the min mass of the peptide_constraint
+ */
+FLOAT_T PeptideConstraint::getMinMass() {
+
+  return min_mass_;
+}
+
+/**
+ * sets the max mass of the peptide_constraint
+ */
+void PeptideConstraint::setMaxMass(
+  FLOAT_T max_mass  ///< the max mass of the peptide constraint - in
+  ) {
+
+  max_mass_ = max_mass;
+}
+
+/**
+ * \returns the max mass of the peptide_constraint
+ */
+FLOAT_T PeptideConstraint::getMaxMass() {
+
+  return max_mass_;
+}
+
+/**
+ * sets the min length of the peptide_constraint
+ */
+void PeptideConstraint::setMinLength(
+  int min_length  ///< the min length of the peptide constraint - in
+  ) {
+
+  min_length_ = min_length;
+}
+
+/**
+ * \returns the min length of the peptide_constraint
+ */
+int PeptideConstraint::getMinLength() {
+
+  return min_length_;
+}
+
+/**
+ * sets the max length of the peptide_constraint
+ * maximum limit 255
+ */
+void PeptideConstraint::setMaxLength(
+  int max_length  ///< the max length of the peptide constraint - in
+  ) {
+
+  // check if maximum length is with in range <= 255
+  if(max_length > 255){
+    carp(CARP_FATAL, "maximum length:%d over limit 255.", max_length);
+  }
+  
+  max_length_ = max_length;
+}
+
+/**
+ * \returns the max length of the peptide_constraint
+ */
+int PeptideConstraint::getMaxLength(
+  ) {
+
+  return max_length_;
+}
+
+
+/**
+ * sets the num_mis_cleavage of the peptide_constraint
+ */
+void PeptideConstraint::setNumMisCleavage(
+  int num_mis_cleavage ///< The maximum mis cleavage of the peptide -in
+  ) {
+
+  num_mis_cleavage_ = num_mis_cleavage;
+}
+
+/**
+ * \returns the num_mis_cleavage of the peptide_constraint
+ */
+int PeptideConstraint::getNumMisCleavage() {
+
+  return num_mis_cleavage_;
+}
+
+/**
+ * sets the mass type of the peptide_constraint
+ */
+void PeptideConstraint::setMassType(
+  MASS_TYPE_T mass_type ///< the mass_type for the constraint -in
+  ) {
+
+  mass_type_ = mass_type;
+}
+
+/**
+ * \returns the mass type of the mass_constraint
+ */
+MASS_TYPE_T PeptideConstraint::getMassType() {
+
+  return mass_type_;
+}
diff --git a/src/model/PeptideConstraint.h b/src/model/PeptideConstraint.h
new file mode 100644
index 0000000..02820ad
--- /dev/null
+++ b/src/model/PeptideConstraint.h
@@ -0,0 +1,200 @@
+/**
+ * \file peptide_constraint.h 
+ * $Revision: 1.5 $
+ * \brief Object for holding the peptide constraint information.
+ */
+#ifndef PEPTIDE_CONSTRAINT_H 
+#define PEPTIDE_CONSTRAINT_H
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "util/utils.h"
+#include "util/crux-utils.h"
+#include "model/objects.h"
+#include "util/mass.h"
+#include "Peptide.h"
+#include "Protein.h"
+#include "io/carp.h"
+
+/**
+ * \class PeptideConstraint
+ * \brief Object to represent constraints which a peptide may or may not
+ *  satisfy.
+ *
+ * def TRYPTIC: a protein that ends with either K or R and 
+ *              any other K and R in the sequence must be followed by a P
+ */
+class PeptideConstraint {
+ protected:
+  ENZYME_T enzyme_;
+  DIGEST_T digestion_;
+  FLOAT_T min_mass_; ///< The minimum mass of the peptide
+  FLOAT_T max_mass_; ///< The maximum mass of the peptide
+  int min_length_; ///< The minimum length of the peptide
+  int max_length_; ///< The maximum length of the peptide
+  int num_mis_cleavage_; ///< The maximum mis cleavage of the peptide
+  MASS_TYPE_T mass_type_; ///< isotopic mass type (AVERAGE, MONO)
+  int num_pointers_; ///< Number of pointers to this constraint
+
+ public:
+  
+  void init();
+
+  /**
+   * Allocates a new (empty) peptide_constraint object.
+   * \returns An allocated PeptideConstraint object.
+   */
+  PeptideConstraint();
+
+  /**
+   * Instantiates a new peptide_constraint object.
+   * \returns An allocated PEPTIDE_CONSTRAINT_T object.
+   */
+  PeptideConstraint(
+    ENZYME_T enzyme, ///< the enzyme to use for digestion
+    DIGEST_T digest, ///< the degree of digestion
+    FLOAT_T min_mass, ///< the minimum mass -in
+    FLOAT_T max_mass, ///< the maximum mass -in
+    int min_length, ///< the minimum length of peptide -in
+    int max_length, ///< the maximum lenth of peptide -in
+    int num_mis_cleavage, ///< The maximum mis cleavage of the peptide -in
+    MASS_TYPE_T mass_type  ///< isotopic mass type (AVERAGE, MONO) -in
+    );
+
+  PeptideConstraint(
+    ENZYME_T enzyme, ///< the enzyme to use for digestion
+    DIGEST_T digest, ///< the degree of digestion
+    int min_length, ///< the minimum length of peptide -in
+    int max_length, ///< the maximum lenth of peptide -in
+    int num_mis_cleavage ///< The maximum mis cleavage of the peptide -in
+    );
+
+  /**
+   * \brief Create a new peptide constraint and populate its values
+   * based on those in parameter.c 
+   * \returns A newly allocated peptide constraint.
+   */
+  static PeptideConstraint* newFromParameters();
+
+  /** 
+   * Determines if a peptide satisfies a peptide_constraint.
+   * \returns TRUE if the constraint is satisified. FALSE if not.
+   */
+  bool isSatisfied(
+   Crux::Peptide* peptide ///< the query peptide -in   
+   );
+
+  /**
+   * Copies an allocated peptide_constraint object.
+   */
+  static PeptideConstraint* copyPtr(
+    PeptideConstraint* peptide_constraint ///< object to copy -in 
+  );
+
+  /**
+   * Frees an allocated peptide_constraint object.
+   */
+  static void free(PeptideConstraint*);
+  virtual ~PeptideConstraint();
+
+  /**
+   * Setters/Getters
+   */
+  
+  void setEnzyme(
+    ENZYME_T enzyme
+  );
+
+  ENZYME_T getEnzyme();
+
+
+  void setDigest(
+    DIGEST_T digest
+  );
+
+  DIGEST_T getDigest();
+
+  /**
+   * sets the min mass of the peptide_constraint
+   */
+  void setMinMass(
+    FLOAT_T min_mass  ///< the min mass of the peptide constraint - in
+    );
+
+  /**
+   * \returns the min mass of the peptide_constraint
+   */
+  FLOAT_T getMinMass();
+
+  /**
+   * sets the max mass of the peptide_constraint
+   */
+  void setMaxMass(
+    FLOAT_T max_mass  ///< the max mass of the peptide constraint - in
+    );
+
+  /**
+   * \returns the max mass of the peptide_constraint
+   */
+  FLOAT_T getMaxMass();
+
+  /**
+   * sets the min length of the peptide_constraint
+   */
+  void setMinLength(
+    int min_length  ///< the min length of the peptide constraint - in
+    );
+
+  /**
+   * \returns the min length of the peptide_constraint
+   */
+  int getMinLength();
+
+  /**
+   * sets the max length of the peptide_constraint
+   */
+  void setMaxLength(
+    int max_length  ///< the max length of the peptide constraint - in
+    );
+
+  /**
+   * \returns the max length of the peptide_constraint
+   */
+  int getMaxLength();
+
+  /**
+   * sets the num_mis_cleavage of the peptide_constraint
+   */
+  void setNumMisCleavage(
+    int num_mis_cleavage ///< The maximum mis cleavage of the peptide -in
+  );
+
+  /**
+   * \returns the num_mis_cleavage of the peptide_constraint
+   */
+  int getNumMisCleavage();
+
+  /**
+   * sets the mass type of the peptide_constraint
+   */
+  void setMassType(
+    MASS_TYPE_T mass_type ///< the peptide_type for the constraint -in
+    );
+
+  /**
+   * \returns the mass type of the mass_constraint
+   */
+  MASS_TYPE_T getMassType();
+
+};
+
+#endif
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/PeptideIterator.h b/src/model/PeptideIterator.h
new file mode 100644
index 0000000..4cfdb65
--- /dev/null
+++ b/src/model/PeptideIterator.h
@@ -0,0 +1,64 @@
+/**
+ * \file PeptideIterator.h
+ * Abstract class for returning peptides from a peptide source.
+ */
+#ifndef PETPIDE_ITERATOR_H
+#define PETPIDE_ITERATOR_H
+
+#include "Peptide.h"
+
+class PeptideIterator{
+
+ private:
+  bool has_next_;
+  
+ protected:
+  Crux::Peptide* next_peptide_;
+  
+  /**
+   * \brief Prepare the iterator to return the next peptide.  
+   * Derived classes must implement this method, pointing
+   * next_peptide_ to the peptide that will be returned next and
+   * returning true.  When there are no more peptides, it must set
+   * has_next_ to false, set next_peptide_ to NULL and return false.
+   * \returns true if there are more peptides to fetch or false if we are done
+   */
+  virtual bool queueNextPeptide() = 0;
+  
+  /**
+   * Call this method in the constructor to set the first peptide.
+   */
+  void initialize(){
+    has_next_ = queueNextPeptide();
+  }
+
+ public:
+  virtual ~PeptideIterator(){};
+
+  /**
+   * Return the next peptide in the iterator or NULL if none are left.
+   */
+  Crux::Peptide* next(){
+    Crux::Peptide* return_me = next_peptide_;
+    has_next_ = queueNextPeptide();
+    return return_me;
+  }
+  
+  /**
+   * Return true if there are more peptides to return or false if not.
+   */
+  bool hasNext(){
+    return has_next_;
+  }
+  
+};
+
+#endif //PETPIDE_ITERATOR_H
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
+
diff --git a/src/model/PeptideMatch.cpp b/src/model/PeptideMatch.cpp
new file mode 100644
index 0000000..f9d7413
--- /dev/null
+++ b/src/model/PeptideMatch.cpp
@@ -0,0 +1,135 @@
+/**
+ * \file PeptideMatch.cpp
+ * \brief Object for holding peptide scores
+ ********************************/
+#include "PeptideMatch.h"
+#include "SpectrumMatch.h"
+
+using namespace Crux;
+using namespace std;
+
+/**
+ * \returns an empty PeptideMatch
+ */
+PeptideMatch::PeptideMatch() {
+
+}
+
+/**
+ * \returns a PeptideMatch with the peptide set
+ */
+PeptideMatch::PeptideMatch(
+  Peptide* peptide  ///< Peptide to set
+  ) {
+
+  setPeptide(peptide);
+
+}
+
+/**
+ * Default destructor
+ */
+PeptideMatch::~PeptideMatch() {
+
+}
+
+/**
+ * sets the peptide for this match
+ */
+void PeptideMatch::setPeptide(
+  Peptide* peptide ///< peptide to set
+  ) {
+
+  peptide_ = peptide;
+
+}
+
+/**
+ * \returns the peptide for the match
+ */
+Peptide* PeptideMatch::getPeptide() {
+
+  return(peptide_);
+}
+
+/**
+ * adds a ProteinMatch to this PeptideMatch
+ */
+void PeptideMatch::addProteinMatch(
+  ProteinMatch* protein_match, ///< ProteinMatch to set
+  PeptideSrc* src ///< PeptideSrc 
+  ) {
+  for (deque<ProteinMatch*>::iterator iter = protein_matches_.begin();
+       iter != protein_matches_.end();
+       ++iter) {
+    if (*iter == protein_match) {
+      return;
+    }
+  }
+  protein_matches_.push_back(protein_match);
+  protein_match_to_peptide_src_[protein_match] = src;
+}
+
+/**
+ * \returns the associated PeptideSrc for the ProteinMatch
+ */
+PeptideSrc* PeptideMatch::getSrc(
+  ProteinMatch* protein_match ///< gets the associated PeptideSrc
+  ) {
+
+  return protein_match_to_peptide_src_[protein_match];
+
+}
+
+/**
+ * Sets the spectrum match
+ */
+void PeptideMatch::addSpectrumMatch(
+  SpectrumMatch* spectrum_match ///< SpectrumMatch to add
+  ) {
+  for (deque<SpectrumMatch*>::iterator iter = spectrum_matches_.begin();
+       iter != spectrum_matches_.end();
+       ++iter) {
+    if (*iter == spectrum_match) {
+      return;
+    }
+  }
+  spectrum_matches_.push_back(spectrum_match);
+  spectrum_match->setPeptideMatch(this);  
+}
+
+  
+/**
+ * \returns the begin iterator of the spectrummatches
+ */
+SpectrumMatchIterator PeptideMatch::spectrumMatchBegin() {
+  return spectrum_matches_.begin();
+}
+
+/**
+ * \returns the begin iterator of the spectrum matches
+ */
+SpectrumMatchIterator PeptideMatch::spectrumMatchEnd() {
+  return spectrum_matches_.end();
+}
+
+/**
+ * \returns the begin iterator of the spectrum matches
+ */
+ProteinMatchIterator PeptideMatch::proteinMatchBegin() {
+  return protein_matches_.begin();
+}
+
+/**
+ * \returns the end iterator of the spectrum matches
+ */
+ProteinMatchIterator PeptideMatch::proteinMatchEnd() {
+  return protein_matches_.end();
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/PeptideMatch.h b/src/model/PeptideMatch.h
new file mode 100644
index 0000000..681ff43
--- /dev/null
+++ b/src/model/PeptideMatch.h
@@ -0,0 +1,102 @@
+/**
+ * \file PeptideMatch.h
+ * $Revision: 1.00 $
+ * \brief Object for holding peptide scores
+ ******************************************************/
+#ifndef PEPTIDEMATCH_H_
+#define PEPTIDEMATCH_H_
+
+#include "AbstractMatch.h"
+#include "match_objects.h"
+#include "Peptide.h"
+
+class PeptideMatch : public AbstractMatch {
+
+ protected:  
+  std::deque<ProteinMatch*> protein_matches_; ///< protein matches associated with this peptide match
+  std::map<ProteinMatch*, PeptideSrc*> protein_match_to_peptide_src_; ///< peptide srcs for the protein match
+  std::deque<SpectrumMatch*> spectrum_matches_; ///< spectrum matches for this peptide
+  Crux::Peptide* peptide_; ///< peptide itself
+
+ public:
+  /**
+   * \returns an empty PeptideMatch
+   */
+  PeptideMatch();
+
+  /**
+   * \returns a PeptideMatch with the peptide set
+   */
+  PeptideMatch(
+    Crux::Peptide* peptide ///< Peptide to set
+  );
+
+  /**
+   * Default destructor
+   */
+  virtual ~PeptideMatch();
+
+  /**
+   * Sets the peptide for this match
+   */
+  void setPeptide(
+    Crux::Peptide* peptide ///< peptide to set
+  );
+
+  /**
+   * \returns the peptide for the match
+   */
+  Crux::Peptide* getPeptide();
+   
+  /**
+   * adds a ProteinMatch to this PeptideMatch
+   */
+  void addProteinMatch(
+    ProteinMatch* protein_match, ///< ProteinMatch to set
+    PeptideSrc* src ///< Location in protein
+  );
+
+  /**
+   * \returns the associated PeptideSrc from the ProteinMatch
+   */
+  PeptideSrc* getSrc(
+    ProteinMatch* protein_match ///< gets the associated src 
+  );
+
+  /**
+   * Adds a spectrumMatch to this PeptideMatch
+   */
+  void addSpectrumMatch(
+    SpectrumMatch* spectrum_match ///<SpectrumMatch to add
+  );
+  
+  /**
+   * \returns the begin iterator of the spectrummatches
+   */
+  SpectrumMatchIterator spectrumMatchBegin();
+
+  /**
+   * \returns the end iterator of the spectrum matches
+   */
+  SpectrumMatchIterator spectrumMatchEnd();
+
+  /**
+   * \returns the begin iterator of the spectrum matches
+   */
+  ProteinMatchIterator proteinMatchBegin();
+
+  /**
+   * \returns the end iterator of the spectrum matches
+   */
+  ProteinMatchIterator proteinMatchEnd();
+ 
+};
+
+#endif //PEPTIDEMATCH_H_
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/PeptideSrc.cpp b/src/model/PeptideSrc.cpp
new file mode 100644
index 0000000..f262418
--- /dev/null
+++ b/src/model/PeptideSrc.cpp
@@ -0,0 +1,514 @@
+/*************************************************************************//**
+ * \file PeptideSrc.cpp
+ * \brief Object for mapping a peptide to its parent protein.
+ ****************************************************************************/
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "io/carp.h"
+#include "util/utils.h"
+#include "util/mass.h"
+#include "util/StringUtils.h"
+#include "DatabasePeptideIterator.h"
+#include "Peptide.h"
+#include "Protein.h"
+#include "PeptideSrc.h"
+#include "PeptideConstraint.h"
+#include "PeptideIterator.h"
+
+#include <vector>
+#include <string>
+
+#include "io/DelimitedFile.h"
+#include "io/MatchFileReader.h"
+#include "io/MatchCollectionParser.h"
+
+
+using namespace std;
+using namespace Crux;
+
+/**
+ * Static variable definitions
+ */
+map<string, Peptide* > PeptideSrc::sequence_to_peptide_; ///< Maps a sequence to a peptide object
+map<string, Peptide* > PeptideSrc::decoy_sequence_to_peptide_; ///< Maps a decoy sequence to a peptide object
+
+
+/**
+ * \returns An (empty) peptide_src object.
+ */
+PeptideSrc::PeptideSrc() {
+  digestion_ = (DIGEST_T)0;
+  parent_protein_ = NULL;
+  start_idx_ = 0;
+  start_idx_original_ = 0;
+}
+
+/**
+ *\returns a PeptideSrc object, populated with user specified parameters
+ */
+PeptideSrc::PeptideSrc(
+  DIGEST_T digest,
+  Protein* parent_protein, ///< the parent of this peptide -in
+  int start_idx ///< start index of the peptide in the protein sequence -in
+  ) {
+  start_idx_original_ = 0;
+  setDigest(digest);
+  setParentProtein(parent_protein);
+  setStartIdx(start_idx);
+}
+
+/**
+ * Frees the an individual allocated peptide_src object
+ * assumes that new_association pointer is NULL or some other pointer exist for the rest of the linklist 
+ */
+PeptideSrc::~PeptideSrc() {
+}
+
+/**
+ * Copies the entire linklist of peptide_src object src to dest.
+ * dest must be a heap allocated peptide_src
+ */
+void PeptideSrc::copy(
+  vector<PeptideSrc*>& src, ///< source peptide_src -in
+  vector<PeptideSrc*>& dest ///< destination peptide_src -out
+  )
+{
+
+  for (vector<PeptideSrc*>::iterator iter = src.begin();
+       iter != src.end();
+       ++iter) {
+    PeptideSrc* dest_src = new PeptideSrc(*(*iter));
+    dest.push_back(dest_src);
+
+  }
+}
+
+/**
+ * sets the level of digestion
+ */
+void PeptideSrc::setDigest(
+  DIGEST_T digest ///< the type of the peptide -in
+  ){
+
+  digestion_ = digest;
+}
+
+/**
+ * \returns the level of digestion
+ */
+DIGEST_T PeptideSrc::getDigest() {
+
+  return digestion_;
+}
+
+/**
+ * sets the parent protein
+ */
+void PeptideSrc::setParentProtein(
+  Protein* parent_protein ///< the parent of this preptide -in  
+  ) {
+  parent_protein_ = parent_protein;
+}
+
+/**
+ * \returns a pointer to the parent protein
+ */
+Protein* PeptideSrc::getParentProtein() {
+  return parent_protein_;
+}
+
+/**
+ * sets the start index of the peptide in the protein sequence
+ */
+void PeptideSrc::setStartIdx(
+  int start_idx ///< start index of the peptide in the protein sequence -in
+  ) {
+  start_idx_ = start_idx;
+}
+
+/**
+ * \returns the start index of the peptide in the protein sequence
+ */
+int PeptideSrc::getStartIdx() {
+  return start_idx_;
+}
+
+/**
+ * \sets the original start index of the peptide in the protein sequence
+ */
+void PeptideSrc::setStartIdxOriginal(
+  int start_idx ///< start index of the peptide in the original protein sequence -in
+) {
+  start_idx_original_ = start_idx;
+}
+
+/**
+ * \returns the original start index of the peptide in the protein sequence
+ */
+int PeptideSrc::getStartIdxOriginal() {
+  return start_idx_original_;
+}
+
+/**
+ * \returns a pointer to the start of the peptide with in it's parent protein sequence
+ */
+char* PeptideSrc::getSequencePointer() {
+
+  return parent_protein_->getSequencePointer(start_idx_ - 1);
+
+}
+
+/**
+ *\returns the peptide_src strct size, value of sizeof function
+ */
+int PeptideSrc::getSizeOf(){
+  return sizeof(PeptideSrc);
+}
+
+/**
+ * serialize peptide src in binary
+ * The peptide serialization format looks like this:
+ *
+ *<int: protein index><PEPTIDE_TYPE_T: peptide_type><int: peptide start index>
+ * the protein index is the index of the parent protein in the
+ *database Database 
+ *
+ */
+void PeptideSrc::serialize(
+  FILE* file  ///< output file -in   
+  ) {
+
+  // write protein index in database
+  unsigned int protein_idx = parent_protein_->getProteinIdx();
+  carp(CARP_DETAILED_DEBUG, "protein idx to write is %i", protein_idx);
+
+  fwrite(&protein_idx, sizeof(int), 1, file);
+  carp(CARP_DETAILED_DEBUG, "Serializing protein src of index %d", 
+       protein_idx); 
+   
+  // write peptide src type(tryptic, all, ...)
+  fwrite(&(digestion_), sizeof(DIGEST_T), 1, file);
+  // write start index in protein of peptide in this peptide src
+  fwrite(&(start_idx_), sizeof(int), 1, file);
+  
+}
+
+/**
+ * Return the number of bytes taken up by one peptide_src when
+ * serialized to file.  Used for skipping past peptide_src in an index
+ * file. 
+ */
+int PeptideSrc::sizeOfSerialized(){
+
+  return (sizeof(int)*2 + sizeof(DIGEST_T));
+}
+
+/**
+ * \brief Read in the peptide_src objects from the given file and
+ * assosiated them with the given peptide.  
+ * Proteins for the pepitde_src are found in the given database.  If
+ * database is NULL, does not set proteins.  (This option is used for
+ * sorting index files while creating index.) 
+ *
+ * \returns true if peptide_src's were successfully parsed, else
+ * returns false.
+ */
+bool PeptideSrc::parseTabDelimited(
+  Peptide* peptide,   ///< assign peptide_src(s) to this peptide
+  MatchFileReader& file,           ///< file to read from
+  Database* database, ///< database containing proteins
+  Database* decoy_database ///< database containing decoy proteins
+) {
+
+  if( peptide == NULL ){
+    carp(CARP_ERROR, "Cannot parse peptide src with NULL peptide.");
+    return false;
+  }
+
+  carp(CARP_DETAILED_DEBUG,"Parsing id line:%s", 
+       file.getString(PROTEIN_ID_COL).c_str());
+
+  //if the protein id field is empty, then we have to search the database...
+  if (file.empty(PROTEIN_ID_COL)) {
+    carp_once(CARP_WARNING, "empty protein id string in tab delimited file. "
+                            "searching database to find proteins to match peptide "
+                            "sequence");
+
+    //if we haven't done this already, build a map of sequence strings to peptide
+    //objects.
+    if (sequence_to_peptide_.empty()) {
+      fillPeptides(database, decoy_database);
+    }
+
+    string seq_string(peptide->getModifiedSequenceWithSymbols());
+
+    if (sequence_to_peptide_.find(seq_string) == sequence_to_peptide_.end()) {
+      carp(CARP_WARNING, "Cannot find peptide in database!");
+      return false;
+    }
+    Peptide* src_peptide = sequence_to_peptide_[seq_string];
+    vector<PeptideSrc*>& src_peptide_srcs = src_peptide->getPeptideSrcVector();
+
+    for (vector<PeptideSrc*>::iterator iter = src_peptide_srcs.begin();
+      iter != src_peptide_srcs.end();
+      ++iter) {
+      PeptideSrc* new_src = *iter;
+      peptide->addPeptideSrc(new_src);
+    }
+    return true;
+  } else {
+    vector<string> protein_ids = StringUtils::Split(file.getString(PROTEIN_ID_COL), ',');
+  
+    if (protein_ids.size() == 0) {
+      carp(CARP_ERROR, "No protein ids found!");
+      return false;
+    }
+
+    vector<string> flanking_aas = StringUtils::Split(file.getString(FLANKING_AA_COL), ',');
+
+    if (protein_ids.size() != flanking_aas.size()) {
+      carp_once(CARP_DEBUG, 
+                "Flanking amino acid count (%d) did not match protein count (%d) for protein %s.", 
+                flanking_aas.size(), 
+                protein_ids.size(),
+                file.getString(PROTEIN_ID_COL).c_str());
+      carp_once(CARP_DEBUG, "Only reporting error once; others may exist")
+      while(flanking_aas.size() < protein_ids.size()) {
+        flanking_aas.push_back("");
+      }
+    }
+
+    //For every protein id source, create the object and add it to the list.
+    for (size_t idx = 0; idx < protein_ids.size(); idx++) {
+      PeptideSrc* peptide_src = new PeptideSrc();
+      DIGEST_T digestion = 
+        string_to_digest_type((char*)file.getString(CLEAVAGE_TYPE_COL).c_str()); 
+  
+      Protein* parent_protein = NULL;
+      int start_index = 1;
+
+      string protein_id = protein_ids.at(idx);
+      string flanking_aa = flanking_aas.at(idx);
+      string prev_aa = "", next_aa = "";
+      if (flanking_aa.length() == 2) {
+        prev_aa = flanking_aa[0];
+        next_aa = flanking_aa[1];
+      }
+
+      carp(CARP_DETAILED_DEBUG,"Parsing %s", protein_id.c_str());
+      // get the protein and peptide index e.g. X(10)
+      size_t left_paren_index = protein_id.find('(');
+
+      if (left_paren_index == string::npos) {
+        //protein id is the string.
+        bool is_decoy;
+
+        parent_protein=MatchCollectionParser::getProtein(
+          database, decoy_database, protein_id, is_decoy);
+        if (parent_protein == NULL) {
+          carp(CARP_WARNING, "Can't find protein %s",protein_id.c_str());
+          continue;
+        }
+
+        //find the start index
+        MODIFIED_AA_T* mod_seq;
+        int seq_length = convert_to_mod_aa_seq(file.getString(SEQUENCE_COL).c_str(), &mod_seq);
+        char* unmodified_sequence = modified_aa_to_unmodified_string(mod_seq, seq_length);
+        string sequence = unmodified_sequence;
+        std::free(unmodified_sequence);
+        std::free(mod_seq);
+
+        start_index = parent_protein->findStart(sequence, prev_aa, next_aa);
+        if (start_index == -1) {
+          carp(CARP_FATAL, "Can't find sequence %s in %s:%s",
+            sequence.c_str(),
+            protein_id.c_str());
+        }
+      } else {
+        string protein_id_string = protein_id.substr(0, left_paren_index);
+        string peptide_start_index_string = protein_id.substr(left_paren_index+1, 
+          protein_id.length() - left_paren_index - 2);
+        bool is_decoy;    
+        //  set fields in new peptide src
+        parent_protein = MatchCollectionParser::getProtein(
+          database, decoy_database, protein_id_string, is_decoy);
+
+        MODIFIED_AA_T* mod_seq;
+        int seq_length = convert_to_mod_aa_seq(file.getString(SEQUENCE_COL).c_str(), &mod_seq);
+        char* unmodified_sequence = modified_aa_to_unmodified_string(mod_seq, seq_length);
+        string sequence = unmodified_sequence;
+        std::free(unmodified_sequence);
+        std::free(mod_seq);
+
+
+        if (parent_protein -> isPostProcess()) {
+          // Attempting to store protein_id location in start_idx_original of peptide src [Please check
+          // if this is valid usage, since PMCDelimitedFileWriter uses startidxoriginal to print protein
+          // id location] so I am making an assumption that this is the purpose of start_idx_original.
+          // Also, I'm not sure if I need this for all proteins or just post process ones.
+          int peptide_start_index_int = StringUtils::FromString<int>(peptide_start_index_string);
+          peptide_src->setStartIdxOriginal(peptide_start_index_int);
+        }
+
+        //string sequence = file.getString(SEQUENCE_COL);
+        start_index = parent_protein->findStart(sequence, prev_aa, next_aa);
+      }
+
+      // set parent protein of the peptide src
+      peptide_src->setParentProtein(parent_protein);
+
+      // set digest type of peptide src
+      peptide_src->setDigest(digestion);
+
+      // set start index of peptide src
+      peptide_src->setStartIdx(start_index);
+
+      // add it to the list of protein sources for this peptide
+      peptide->addPeptideSrc(peptide_src);
+
+    }
+  } // next peptide_src in file
+
+  carp(CARP_DETAILED_DEBUG, "Done parsing id line:%s", file.getString(PROTEIN_ID_COL).c_str());
+
+  return true;
+}
+
+
+/**
+ * fills the sequence_to_peptide_ member variable for use in parseTabDelimited
+ * used when the tab delimited file doesn't provide a protein id, but we have
+ * sequences and access to the database.
+ */
+void PeptideSrc::fillPeptides(
+  Database* database, ///< the protein database 
+  Database* decoy_database ///< the decoy database
+  ) {
+  
+  PeptideConstraint* constraint = PeptideConstraint::newFromParameters();
+  PeptideIterator* iterator = new DatabasePeptideIterator(database, constraint, true, false);
+
+  while (iterator->hasNext()) {
+
+    Peptide* peptide = iterator->next();
+    const char* sequence = peptide->getSequence();
+    string sequence_string = string(sequence);
+
+    if (sequence_to_peptide_.find(sequence_string) == sequence_to_peptide_.end()) {
+      sequence_to_peptide_[sequence_string] = peptide;
+    }
+  }
+  delete iterator;
+  delete constraint;
+
+  //TODO - map the decoy sequences to Peptides if we need them in the future.
+  if (decoy_database == NULL) {
+    carp(CARP_INFO, "decoy database is null");
+  }
+}
+
+
+/**
+ * \brief Read in the peptide_src objects from the given file and
+ * assosiated them with the given peptide.  
+ * Proteins for the pepitde_src are found in the given database.  If
+ * database is NULL, does not set proteins.  (This option is used for
+ * sorting index files while creating index.)  
+ * \returns true if peptide_src's were successfully parsed, else
+ * returns false.
+ */
+bool PeptideSrc::parse(
+  Peptide* peptide,   ///< assign peptide_src(s) to this peptide
+  FILE* file,           ///< file to read from
+  Database* database) ///< database containing proteins
+{
+  if( peptide == NULL || file == NULL ){
+    carp(CARP_ERROR, "Cannot parse peptide src with NULL peptide or file.");
+    return false;
+  }
+
+  // first field in file should be number of src's
+  int num_peptide_src = -1;
+  size_t num_read = fread(&num_peptide_src, sizeof(int), 1, file);
+  if( num_peptide_src < 1 || num_read != 1 ){
+    carp(CARP_ERROR, 
+         "Index file corrupted, peptide must have at least one peptide src");
+    return false;
+  }
+
+  // read in each peptide_src (prot index, peptide type, start index)
+  int src_idx = 0;
+  int protein_index = -1;
+  Protein* parent_protein = NULL;
+  DIGEST_T digestion;
+  int start_index = -1;
+  for(src_idx = 0; src_idx < num_peptide_src; src_idx++){
+
+    PeptideSrc* peptide_src = new PeptideSrc();
+
+    // get protein index
+    size_t num_read = fread(&protein_index, (sizeof(int)), 1, file);
+    if( protein_index < 0 || num_read != 1){
+      carp(CARP_ERROR, "Index file corrupted could not read protein index");
+      delete peptide_src;
+      return false;
+    }
+    carp(CARP_DETAILED_DEBUG, "Peptide src %d has protein idx %i", 
+         src_idx, protein_index);
+
+    // read peptide type of peptide src
+    /*
+    if(fread(&peptide_type, sizeof(PEPTIDE_TYPE_T), 1, file) != 1){
+      carp(CARP_ERROR, "Index file corrupted, failed to read peptide type.");
+      free(peptide_src);
+      return false;
+    }
+    */
+
+    // read digestion level of peptide src
+    if(fread(&digestion, sizeof(DIGEST_T), 1, file) != 1){
+      carp(CARP_ERROR, "Index file corrupted, failed to read digestion type.");
+      delete peptide_src;
+      return false;
+    }
+
+    // read start index of peptide in parent protein of thsi peptide src
+    if(fread(&start_index, sizeof(int), 1, file) != 1){
+      carp(CARP_ERROR, "Index file corrupted, failed to read start index.");
+      delete peptide_src;
+      return false;
+    }
+
+    // set fields in new peptide src
+    parent_protein = 
+      database->getProteinAtIdx(protein_index);
+    
+    // set parent protein of the peptide src
+    peptide_src->setParentProtein(parent_protein);
+
+    // set peptide type of peptide src
+    //    set_peptide_src_peptide_type(peptide_src, peptide_type);
+    peptide_src->setDigest(digestion);
+
+    // set start index of peptide src
+    peptide_src->setStartIdx(start_index);
+
+    peptide->addPeptideSrc(peptide_src);
+
+  }// next peptide_src in file
+
+  carp(CARP_DETAILED_DEBUG, "Finished parsing peptide src.");
+  return true;
+}
+
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/PeptideSrc.h b/src/model/PeptideSrc.h
new file mode 100644
index 0000000..e2dedee
--- /dev/null
+++ b/src/model/PeptideSrc.h
@@ -0,0 +1,189 @@
+/**
+ * \file PeptideSrch
+ * $Revision: 1.12 $
+ * \brief Object for mapping a peptide to it's parent protein.
+ */
+#ifndef PEPTIDE_SRC_H
+#define PEPTIDE_SRC_H
+#include <map>
+#include <stdio.h>
+#include <string>
+
+#include "util/utils.h"
+#include "util/mass.h"
+#include "model/objects.h"
+#include "io/carp.h"
+#include "PeptideConstraint.h"
+
+
+class PeptideSrc {
+
+ protected:
+  DIGEST_T digestion_; ///< how specific the ends are relative to the enzyme
+  Crux::Protein* parent_protein_; ///< the parent of this preptide
+
+  /*
+   * start_idx_ tracks the index of the peptide within the corresponding protein
+   * start_idx_original_ is for keeping track of the index of the peptide within
+   * the original protein, which we may not have the full sequence of
+   */
+  int start_idx_; ///< start index of the peptide in the protein sequence, first residue is 1 
+  int start_idx_original_;  ///< start index of the peptide in the original protein sequence
+  static std::map<std::string, Crux::Peptide* > sequence_to_peptide_; ///< Maps a sequence to a peptide object
+  static std::map<std::string, Crux::Peptide* > decoy_sequence_to_peptide_; ///< Maps a decoy sequence to a peptide object
+
+  /**
+   * \brief fills the sequence_to_peptide_ member variable for use in parseTabDelimited
+   * used when the tab delimited file doesn't provide a protein id, but we have
+   * sequences and access to the database.
+   */
+  static void fillPeptides(
+    Database* database, ///< the protein database 
+    Database* decoy_database ///< the decoy database
+    );
+
+ public:
+
+  /**
+   * \returns An (empty) peptide_src object.
+   */
+  PeptideSrc();
+
+  /**
+   * \returns a PeptideSrc object, populated with user
+   * specified parameters 
+   */
+  PeptideSrc(
+    DIGEST_T digest,
+    Crux::Protein* parent_protein, ///< the parent of this preptide -in
+    int start_idx ///< peptide start index in protein sequence, first is 1 -in
+    );
+
+  /**
+   * Frees the an individual allocated peptide_src object
+   */
+  virtual ~PeptideSrc();
+
+  /**
+   * Copies the entire vector of peptide_src object src to dest.
+   * dest must be a heap allocated peptide_src
+   */
+  static void copy(
+    std::vector<PeptideSrc*>& src, ///< source peptide_src -in
+    std::vector<PeptideSrc*>& dest ///< destination peptide_src -out
+    );
+
+  /**
+   * sets the level of digestion
+   */
+  void setDigest(
+    DIGEST_T digest ///< the type of the peptide -in
+    );
+
+  /**
+   * \returns the level of digestion
+   */
+  DIGEST_T getDigest();
+
+  /**
+   * sets the parent protein
+   */
+  void setParentProtein(
+    Crux::Protein* parent_protein ///< the parent of this preptide -in  
+    );
+
+  /**
+   * \returns a pointer to the parent protein
+   */
+  Crux::Protein* getParentProtein();
+
+  /**
+   * sets the start index of the peptide in the protein sequence
+   */
+  void setStartIdx(
+    int start_idx ///< start index of the peptide in the protein sequence -in
+    );
+
+  /**
+   * \returns the start index of the peptide in the protein sequence
+   */
+  int getStartIdx();
+
+  /**
+   * sets the original start index of the peptide in the protein sequence
+   */
+  void setStartIdxOriginal(
+    int start_idx ///< start index of the peptide in the original protein sequence -in
+  );
+
+  /**
+   * \returns the original start index of the peptide in the protein sequence
+   */
+  int getStartIdxOriginal();
+
+  /**
+   * \returns a pointer to the start of the peptide with in it's parent protein sequence
+   */
+  char* getSequencePointer();
+
+  /**
+   *\returns the peptide_src strct size, value of sizeof function
+   */
+  static int getSizeOf(void);
+
+  /**
+   * serialize peptide src in binary
+   */
+  void serialize(
+  FILE* file  ///< output file -in   
+  );
+
+  /**
+   * Return the number of bytes taken up by one peptide_src when
+   * serialized to file.  Used for skipping past peptide_src in an index
+   * file. 
+   */
+  static int sizeOfSerialized();
+
+  /**
+   * \brief Read in the peptide_src objects from the given file and
+   * assosiated them with the given peptide.  
+   * Proteins for the pepitde_src are found in the given database.  If
+   * database is NULL, does not set proteins.  (This option is used for
+   * sorting index files while creating index.)
+   *
+   * \returns true if peptide_src's were successfully parsed, else
+   * returns false.
+   */
+  static bool parseTabDelimited(
+    Crux::Peptide* peptide,   ///< assign peptide_src(s) to this peptide
+    MatchFileReader& file,           ///< file to read from
+    Database* database, ///< database containing proteins
+    Database* decoy_database = NULL ///< optional database with decoy proteins
+    );
+
+  /**
+   * \brief Read in the peptide_src objects from the given file and
+   * assosiated them with the given peptide.  
+   *
+   * Proteins for the pepitde_src are found in the given database.  If
+   * database is NULL, does not set proteins.  (This option used for
+   * sorting index files while creating index.)
+   *
+   * \returns true if peptide_src's were successfully parsed, else
+   * returns false and sets peptide's peptide_src member variable to
+   * NULL. 
+   */
+  static bool parse(
+    Crux::Peptide* peptide,   ///< assign peptide_src(s) to this peptide
+    FILE* file,           ///< file to read from
+    Database* database); ///< database containing proteins
+
+};
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif
diff --git a/src/model/PostProcessProtein.cpp b/src/model/PostProcessProtein.cpp
new file mode 100644
index 0000000..a0986ba
--- /dev/null
+++ b/src/model/PostProcessProtein.cpp
@@ -0,0 +1,142 @@
+/**
+ * \file PostProcessProtein.cpp
+ * AUTHOR : Sean McIlwain
+ * $Revision: 1.00 $
+ * \brief Object for representing a protein that doesn't exist within the database
+ */
+
+#include "PostProcessProtein.h"
+#include <iostream>
+
+using namespace std;
+
+  
+/**
+ * Default constructor
+ */
+PostProcessProtein::PostProcessProtein() : Protein() {
+}
+
+/**
+ * Default destructor
+ */
+PostProcessProtein::~PostProcessProtein() {
+}
+
+
+/**
+  * \returns the index of the sequence in the sequences_ vector and
+  * returns the index.  If sequence is not found, then add to the
+  * list of sequences and return the last index
+  */
+int PostProcessProtein::findStart(
+  string sequence, ///< the sequence to find
+  string prev_aa,  ///< the previous aa of the sequence
+  string next_aa   ///< the next aa of the sequence
+  ) {
+
+  int ans = -1;
+
+  for (int idx = 0; idx < sequences_.size();idx++) {
+
+    if (sequences_[idx] == sequence) {
+      ans = idx+1;
+      break;
+    }
+  }
+
+  if (ans == -1) {
+    sequences_.push_back(sequence);
+    prev_aas_.push_back(prev_aa);
+    next_aas_.push_back(next_aa);
+    ans = sequences_.size();
+  }
+
+  return ans;
+
+}
+
+/**
+ * \returns the ith sequence
+ */
+char* PostProcessProtein::getSequence(
+  int offset ///< The offset (or sequence index) for the sequence
+  ) {
+
+  char* ans = my_copy_string(sequences_[offset].c_str());
+
+  return ans;
+}
+
+/**
+ * \returns the ith sequence pointer
+ */
+char* PostProcessProtein::getSequencePointer(
+  int offset ///< The offset (or sequence index) for the sequence
+  ) {
+  return (char*)(sequences_[offset].c_str());
+
+}
+
+char PostProcessProtein::getNTermFlankingAA(
+  int offset ///< The offset (or sequence index) for the flanking AA
+  ) {
+  
+  char ans = '-';
+  
+  if ((offset >= prev_aas_.size()) || (prev_aas_.at(offset).length() == 0)) {
+    carp_once(CARP_WARNING, "Missing nterm flanking for protein:%s offset:%d",
+      getIdPointer().c_str(), offset); 
+  } else {
+    ans = prev_aas_.at(offset)[0];
+  }
+  carp(CARP_DETAILED_DEBUG, "protein:%s offset:%d pflank:%c(%d)", 
+    getIdPointer().c_str(), offset, ans,(int)ans);
+
+  return ans;
+}
+
+char PostProcessProtein::getCTermFlankingAA(
+  int offset ///< The offset (or sequence index) for the flanking AA
+  ) {
+
+  char ans = next_aas_.at(offset)[0];
+  if (ans == '\0') {
+    carp_once(CARP_WARNING, "Missing cterm flanking aa for protein:%s offset:%d",getIdPointer().c_str(), offset);
+      ans = 'X';
+  }
+  carp(CARP_DETAILED_DEBUG, "protein:%s offset:%d nflank:%c(%d)", getIdPointer().c_str(), offset, ans,(int)ans);
+
+  return ans;
+}
+
+/**
+ * \returns true indicating that this is a PostProcessProtein object
+ */
+bool PostProcessProtein::isPostProcess() {
+
+  return true;
+}
+
+/**
+ * ends the program since we can't get the protein length from this
+ * post process protein object
+ */
+unsigned int PostProcessProtein::getLength() {
+
+  if (sequence_ == NULL) {
+    carp_once(CARP_WARNING, "Need protein sequence in order to calculate protein length.\n"
+      "   Please provide protein fasta or index using the protein-database parameter\n"
+      "   Protein %s doesn't have the full sequence", getIdPointer().c_str());
+
+    return 0;
+  }
+
+  return length_;
+
+}
+
+Database* PostProcessProtein::getDatabase() {
+  return NULL;
+}
+
diff --git a/src/model/PostProcessProtein.h b/src/model/PostProcessProtein.h
new file mode 100644
index 0000000..2d921b5
--- /dev/null
+++ b/src/model/PostProcessProtein.h
@@ -0,0 +1,105 @@
+/**
+ * \file PostProcessProtein.h
+ * AUTHOR : Sean McIlwain
+ * $Revision: 1.00 $
+ * \brief Object for representing a protein that doesn't exist within the database
+ */
+#ifndef POSTPROCESSPROTEIN_H_
+#define POSTPROCESSPROTEIN_H_
+
+#include "Protein.h"
+
+/**
+ *  There are cases where the protein database will not be available for the post-process
+ *  routines. This class acts as a way to get around that problem.  The main difficulty is
+ *  that the Peptide object relies on the PeptideSrc object to print out the sequence.
+ *  This PeptideSrc object contains a Protein object and the start index of the
+ *  peptide's sequence within this protein.  Parsing the search results files post-process
+ *  without the database, only has the peptide sequence and the protein ids that the peptide
+ *  came from.  PostProcessProtein keeps track of the peptides associated with a protein by 
+ *  maintaining a vector. findStart returns the index of the peptide in the vector.  If 
+ *  the peptide doesn't exist in the vector, than findStart will add the peptide to the vector 
+ *  and return the index.
+ *  getSequence and getSequencePointer to return the correct peptide sequence
+ *  by using the offset parameter.  This way we can still use the Peptide and PeptideSrc objects
+ *  together to print out the peptide sequence and the proteins associated with that sequence
+ */
+
+/**
+ *  TODO: support the flanking amino acids so that peptide->getFlankingAAs() works correctly.
+ */
+class PostProcessProtein : public Crux::Protein {
+
+  std::vector<std::string> sequences_;  ///< sequences that we have seen so far.
+  std::vector<std::string> prev_aas_; ///< previous amino acid to the sequence
+  std::vector<std::string> next_aas_; ///< next amino acid to the sequence
+
+ public:
+
+  
+  /**
+   * Default constructor
+   */
+  PostProcessProtein();
+
+  /**
+   * Default destructor
+   */
+  virtual ~PostProcessProtein();
+
+  /**
+   * \returns the index of the sequence in the sequences_ vector and
+   * returns the index.  If sequence is not found, then add to the
+   * list of sequences and return the last index
+   */
+  virtual int findStart(
+    std::string sequence,  ///< the sequence to find
+    std::string prev_aa,   ///< the previous aa of the sequence
+    std::string next_aa    ///< the next aa of the sequence
+  );
+
+  /**
+   * \returns the ith sequence
+   */
+  virtual char* getSequence(
+    int offset=0 ///< The offset (or sequence index) for the sequence
+  );
+
+  /**
+   * \returns the ith sequence pointer
+   */
+  virtual char* getSequencePointer(
+    int offset=0 ///< The offset (or sequence index) for the sequence
+  );
+
+  char getNTermFlankingAA(
+    int offset=0 ///< The offset (or sequence index) for the AA
+  );
+
+  char getCTermFlankingAA(
+    int offset=0 ///< The offset (or sequence index) for the AA
+  );
+
+  /**
+   * \returns true indicating that this is a PostProcessProtein object
+   */
+  virtual bool isPostProcess();
+
+  /**
+   * ends the program since we can't get the protein length from this
+   * post process protein object
+   */
+  virtual unsigned int getLength();
+
+  virtual Database* getDatabase();
+ 
+};
+
+
+#endif
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/Protein.cpp b/src/model/Protein.cpp
new file mode 100644
index 0000000..3c89b87
--- /dev/null
+++ b/src/model/Protein.cpp
@@ -0,0 +1,940 @@
+/*************************************************************************//**
+ * \file protein.cpp
+ * \brief Object for representing a single protein.
+ ****************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <vector>
+#include "util/Params.h"
+#include "util/utils.h"
+#include "util/crux-utils.h"
+#include "parameter.h"
+#include "util/GlobalParams.h"
+#include "Peptide.h"
+#include "Protein.h"
+#include "PeptideSrc.h"
+#include "Database.h"
+#include "io/carp.h"
+#include "PeptideConstraint.h"
+#include "ProteinPeptideIterator.h"
+
+using namespace std;
+using namespace Crux;
+/**
+ * Constants
+ */
+static const int PROTEIN_ID_LENGTH = 100;
+static const int PROTEIN_SEQUENCE_LENGTH = 40000;
+static const int PROTEIN_ANNOTATION_LENGTH = 100;
+static const int LONGEST_LINE  = PROTEIN_ID_LENGTH + PROTEIN_ID_LENGTH;
+static const int FASTA_LINE = 50;
+static const int SMALLEST_MASS = 57;
+static const int LARGEST_MASS = 190;
+
+/**
+ * Set member variables to default values.
+ */
+void Protein::init() {
+  database_ = NULL;
+  offset_ = 0;
+  protein_idx_ = 0;
+  is_light_ = false;
+  is_memmap_ = false;
+  id_.clear();
+  sequence_ = NULL;
+  length_ = 0;
+  annotation_.clear();
+}
+
+/**
+ * \returns An (empty) protein object.
+ */
+Protein::Protein() {
+  init();
+}
+
+/**
+ * \returns A new protein object(heavy).
+ * The protein is does not constain a database, users must provide one.
+ */
+Protein::Protein(
+  const char*         id, ///< The protein sequence id. -in
+  const char*   sequence, ///< The protein sequence. -in
+  unsigned int length, ///< The length of the protein sequence. -in
+  const char* annotation,  ///< Optional protein annotation.  -in
+  unsigned long int offset, 
+  ///< The file location in the source file in the database -in
+  unsigned int protein_idx, ///< The index of the protein in it's database.-in  
+  Database* database ///< the database of its origin
+  )
+{
+  init();
+  setId(id);
+  setSequence(sequence);
+  setLength(length);
+  setAnnotation(annotation);
+  setOffset(offset);
+  setProteinIdx(protein_idx);
+  setIsLight(false);
+  database_ = Database::copyPtr(database); 
+  is_memmap_ = false;
+}         
+
+
+
+
+/**
+ * \returns A new light protein object.
+ */
+Protein* Protein::newLightProtein(
+  unsigned long int offset, 
+  ///< The file location in the source file in the database -in
+  unsigned int protein_idx ///< The index of the protein in it's database. -in
+  )
+{
+  Protein* protein = new Protein();
+  protein->setIsLight(true);
+  protein->setOffset(offset);
+  protein->setProteinIdx(protein_idx);
+  return protein;
+}
+
+
+/**
+ * convert light protein to heavy, by parsing all the sequence from fasta file
+ * \returns TRUE if successfully converts the protein to heavy 
+ */
+bool Protein::toHeavy()
+{
+  // protein already heavy
+  if(!is_light_){
+    return true;
+  }
+  
+  FILE* file = database_->getFile();
+  
+  // rewind to the begining of the protein to include ">" line
+  fseek(file, offset_, SEEK_SET);
+
+  // failed to parse the protein from fasta file
+  // protein offset is set in the parse_protein_fasta_file method
+  if(!parseProteinFastaFile(file)){
+    carp(CARP_ERROR, 
+         "failed convert protein to heavy, cannot parse fasta file");
+    return false;
+  }
+      
+  is_light_ = false;
+  
+  return true;
+}                            
+
+/**
+ * covert heavy protein back to light
+ * \returns TRUE if successfully converts the protein to light
+ */
+bool Protein::toLight()
+{
+  // protein already light
+  if(is_light_){
+    return true;
+  }
+  // free all char* in protein object
+  free(sequence_);
+  sequence_ = NULL;
+  annotation_.clear(); 
+  id_.clear();
+  return (is_light_ = true);
+}                            
+
+/**
+ * Frees an allocated protein object.
+ */
+Protein::~Protein() 
+{
+  // FIXME what is the point of checking this?
+  if(!is_memmap_ && !is_light_){ 
+    if (sequence_ != NULL){
+      free(sequence_);
+    }
+  }
+}
+
+/**
+ * Prints a protein object to file.
+ * if light protein coverts it to heavy protein
+ */
+void Protein::print(
+  FILE* file ///< output stream -out
+  )
+{
+  // covnert to heavy protein
+  if(is_light_){
+    toHeavy();
+  }
+  int   sequence_index;
+  int   sequence_length = getLength();
+  char* sequence = getSequence();
+  string& id = getIdPointer();
+  string annotation = getAnnotation();
+  
+  fprintf(file, ">%s %s\n", id.c_str(), annotation.c_str());
+
+  sequence_index = 0;
+  while (sequence_length - sequence_index > FASTA_LINE) {
+    fprintf(file, "%.*s\n", FASTA_LINE, &(sequence[sequence_index]));
+    sequence_index += FASTA_LINE;
+  }
+  fprintf(file, "%s\n\n", &(sequence[sequence_index]));
+
+  free(sequence);
+}
+
+/**
+ * \returns the starting location of the sequence in a protein.  If not found, returns -1
+ */
+int Protein::findStart(
+  string peptide_sequence, ///< the sequence to find
+  string prev_aa, ///< the previous amino acid for the sequence
+  string next_aa ///< the next amino acid for the sequence
+  ) {
+
+  if (getSequencePointer() == NULL) {
+    return -1;
+  }
+
+  if (prev_aa == "-") {
+    return 1;
+  } else if (next_aa == "-") {
+    return getLength() - peptide_sequence.length();
+  } else {
+    //use the flanking amino acids to further constrain our search in the sequence
+    size_t pos = string::npos; 
+    string seq = prev_aa + peptide_sequence + next_aa;
+    string protein_seq = getSequencePointer();
+    pos = protein_seq.find(seq);
+    if (pos == string::npos) {
+      carp(CARP_DEBUG, "could not find %s in protein %s\n%s", seq.c_str(), getIdPointer().c_str(), protein_seq.c_str());
+      //finding the sequence with the flanks failed, try finding without the flanks.
+      seq = peptide_sequence;
+      pos = protein_seq.find(seq);
+      if (pos == string::npos) {
+        carp(CARP_ERROR, "could not %s in protein %s\n%s", seq.c_str(), getIdPointer().c_str(), protein_seq.c_str());
+        return -1;
+      }
+      return (pos+1);
+    }
+    return (pos+2);
+  }
+
+}
+
+bool Protein::isPostProcess() {
+
+  return false;
+
+}
+
+/**
+ * prints a binary representation of the protein
+ * 
+ * FORMAT (no line break)
+ * <int: id length><char: id><int: annotation length>
+    <char: annotation><int: sequence length><char: sequence>
+ *
+ * Make sure when reading the binary data, add one to the length so
+ * that it will read in the terminating char as well.
+ */
+void Protein::serialize(
+  FILE* file ///< output stream -out
+  )
+{
+  // covnert to heavy protein
+  if(is_light_){
+    toHeavy();
+  }
+  
+  int id_length = id_.length();
+  int annotation_length = annotation_.length();
+
+  // write the protein id length
+  fwrite(&id_length, sizeof(int), 1, file);
+  
+  // write the protein id 
+ // include "/0"
+  fwrite(id_.c_str(), sizeof(char), id_length+1, file);
+
+  // write the protein annotation length
+  fwrite(&annotation_length, sizeof(int), 1, file);
+
+  // write the protein annotation
+  // include "/0"
+  fwrite(annotation_.c_str(), sizeof(char), annotation_length+1, file);
+  
+  // write the protein sequence length
+  fwrite(&length_, sizeof(unsigned int), 1, file);
+  
+  // write the protein sequence
+  // include "/0"
+  fwrite(sequence_, sizeof(char), length_+1, file);
+}
+
+
+/**
+ * Copies protein object src to dest.
+ * assumes that the protein is heavy
+ * dest must be a heap allocated object 
+ */
+void Protein::copy(
+  Protein* src,///< protein to copy -in
+  Protein* dest ///< protein to copy to -out
+  )
+{
+  char* sequence = src->getSequence();
+  
+  dest->setId(src->getIdPointer());
+  dest->setSequence(sequence);
+  dest->setLength(src->getLength());
+  dest->setAnnotation(src->getAnnotationPointer());
+  dest->setOffset(src->offset_);
+  dest->setProteinIdx(src->protein_idx_);
+  dest->setIsLight(src->is_light_);
+  dest->database_ = src->database_;
+  
+  free(sequence);
+}
+
+
+/**
+ * Parses a protein from an memory mapped binary fasta file
+ * the protein_idx field of the protein must be added before or after
+ * you parse the protein 
+ * protein must be a heap allocated
+ * 
+ * Assume memmap pointer is set at beginning of protein
+ * Assume protein binary format (no line break)
+ * <int: id length><char: id><int: annotation length>
+     <char: annotation><int: sequence length><char: sequence>
+ *
+ * modifies the *memmap pointer!
+ * \returns TRUE if success. FALSE is failure.
+ */
+bool Protein::parseProteinBinaryMemmap(
+  char** memmap 
+  ///< a pointer to a pointer to the memory mapped binary fasta file -in
+  )
+{
+  int id_length = 0;
+  int annotation_length = 0;
+  int sequence_length = 0;
+
+  /* FIXME, maybe use this to check if still within file
+  if(*memmap_as_char[0] == EOF){
+    carp(CARP_ERROR, "end of file");
+  }
+  */
+
+  /***set protein ID***/
+
+  // read id length
+  id_length = *((int *) *memmap);
+
+  // reset pointer to start of id
+  *memmap += sizeof(int);
+
+  // set protein id to mem mapped id
+  id_ = *memmap;
+
+  // reset pointer to move to annotation_length
+  *memmap += (id_length + 1);
+
+
+  /***set protein annotation***/
+
+  // read annotation length
+  annotation_length = *((int *) *memmap);
+
+  // reset pointer to start of annotation
+  *memmap += sizeof(int);
+
+  // set protein annotation to mem mapped annotation
+  annotation_ = *memmap;
+
+  // reset pointer to move to sequence_length
+  *memmap += (annotation_length + 1);
+
+
+  /***set protein sequence***/
+  
+  // read sequence length
+  sequence_length = *((int *) *memmap);
+  length_ = sequence_length;
+
+  // reset pointer to start of sequence
+  *memmap += sizeof(int);
+
+  // set protein annotation to mem mapped sequence
+  sequence_ = *memmap;
+
+  // reset pointer to move to start of next protein
+  *memmap += (sequence_length + 1);
+  
+  // now this protein has been created from memory mapped!
+  is_memmap_ = true;
+
+  return true;
+}
+
+// FIXME ID line and annotation might need to be fixed
+VERBOSE_T verbosity = NORMAL_VERBOSE;
+/**
+ * Parses a protein from an open (FASTA) file.
+ * the protein_idx field of the protein must be added before or after
+ * you parse the protein  
+ * \returns TRUE if success. FALSE is failure.
+ * protein must be a heap allocated
+ */
+bool Protein::parseProteinFastaFile(
+  FILE* file ///< fasta file -in
+  )
+{
+  static char name[LONGEST_LINE];    ///< Just the sequence ID.
+  static char desc[LONGEST_LINE];    ///< Just the comment field.
+  static char buffer[PROTEIN_SEQUENCE_LENGTH];///> The sequence to read in.
+  static unsigned int sequence_length; // the sequence length
+
+  // Read the title line.
+  if (!readTitleLine(file, name, desc)) {
+    return(false);
+  }
+  
+  buffer[0] = '\0';
+
+  // Read the sequence.
+  if (!readRawSequence(file, name, PROTEIN_SEQUENCE_LENGTH, buffer, &sequence_length)) {
+    carp(CARP_FATAL, "Sequence %s is too long.\n", name);
+    exit(1);
+  }
+
+  // update the protein object.
+  setLength(sequence_length);
+  setId(name);
+  setSequence(buffer);
+  setAnnotation(desc);
+
+  return(true);
+
+}
+
+/**************************************************/
+
+/**
+ * FASTA file parsing code
+ * AUTHOR: William Stafford Noble
+ * modified by Chris Park
+ */
+
+/**
+ * Find the beginning of the next sequence, and read the sequence ID
+ * and the comment.
+ */
+bool Protein::readTitleLine
+(FILE* fasta_file, ///< file to read -in
+ char* name, ///< write protein name here -out
+ char* description) ///< write description here -out
+{
+  static char id_line[LONGEST_LINE];  // Line containing the ID and comment.
+  int a_char;                         // The most recently read character.
+
+  // Read until the first occurrence of ">".
+  while ((a_char = getc(fasta_file)) != '>') {
+    // If we hit the end of the file, return FALSE.
+    if (a_char == EOF) {
+      return(false);
+    }  
+  }
+  // set protein offset                   FIXME: might not need to "-1" -CHRIS
+  offset_ = ftell(fasta_file) - 1;
+
+  /**
+   * chris edited, added this block to make sure all of comment line
+   * is read although might not be stored, to ensure the file* is at
+   * start of the sequence
+   */
+
+  {
+    char* new_line = NULL;
+    int line_length;
+    size_t buf_length = 0;
+
+    if((line_length =  getline(&new_line, &buf_length, fasta_file)) == -1){
+      carp(CARP_FATAL, "Error reading Fasta file.\n");
+    }
+    strncpy(id_line, new_line, LONGEST_LINE-1);
+    free(new_line);
+  }
+
+  // Remove EOL.
+  id_line[strlen(id_line) - 1] = '\0';
+
+  // Extract the ID from the beginning of the line.
+  if (sscanf(id_line, "%s", name) != 1) {
+    carp(CARP_FATAL, "Error reading sequence ID.\n%s\n", id_line);
+  }
+
+  // Store the rest of the line as the comment.
+  strcpy(description, &(id_line[strlen(name)+1]));
+
+  return(true);
+}
+
+
+/****************************************************************************
+ * Read raw sequence until a '>' is encountered or too many letters
+ * are read.  The new sequence is appended to the end of the given
+ * sequence.
+ *
+ * Return: Was the sequence read completely?
+ ****************************************************************************/
+bool Protein::readRawSequence
+  (FILE* fasta_file,   // Input Fasta file.
+   char* name,         // Sequence ID (used in error messages).
+   unsigned int   max_chars,    // Maximum number of allowed characters.
+   char* raw_sequence, // Pre-allocated sequence.
+   unsigned int* sequence_length // the sequence length -chris added
+   )
+{
+  int a_char;
+  unsigned int i_seq;
+  bool return_value = true;
+
+  // Start at the end of the given sequence.
+  i_seq = strlen(raw_sequence);
+  assert((unsigned int)strlen(raw_sequence) < max_chars);
+
+  // Read character by character.
+  while ((a_char = getc(fasta_file)) != EOF) {
+
+    // Check for the beginning of the next sequence.
+    if (a_char == '>') {
+      // Put the ">" back onto the stream for the next call to find.
+      ungetc(a_char, fasta_file);
+      break;
+    }
+
+    // Skip non-alphabetic characters.
+    if (!isalpha((int)a_char)) {
+      if ((a_char != ' ') && (a_char != '\t') && (a_char != '\n') && (a_char != '\r')) {
+        carp(CARP_WARNING,"Skipping character %c in sequence %s.",
+             a_char, name);
+      }
+
+    } else {
+
+      // Convert invalid characters to X.
+      a_char = toupper((int)a_char);
+
+      /**
+       * Check the ASCII code.  If the char is above or below the
+       * A(65)~Z(90)range, convert the character to an 'X'.
+       */
+      if ( (int)a_char < 65 || (int)a_char  > 90 ) {
+        carp(CARP_WARNING, "Converting illegal character %c to X ",
+             a_char);
+        carp(CARP_WARNING, "in sequence %s.", name);
+        a_char = 'X';
+      }
+      
+      raw_sequence[i_seq] = a_char;
+      i_seq++;
+    }
+    if (i_seq >= max_chars) {
+      return_value = false;
+      break;
+    }
+  }
+  raw_sequence[i_seq] = '\0';
+  *sequence_length = i_seq; // chris added
+
+  return(return_value);
+}
+
+
+/**
+ * end of FASTA parsing
+ * Thanks Bill!
+ */
+
+/**
+ * Change the sequence of a protein to be a randomized version of
+ * itself.  The method of randomization is dependent on the
+ * decoy_type (shuffle or reverse).  The name of the protein is also
+ * changed by prefixing with "decoy-prefix"
+ */
+void Protein::shuffle(
+  DECOY_TYPE_T decoy_type){ ///< method for shuffling
+  char* decoy_str = decoy_type_to_string(decoy_type);
+  carp(CARP_DEBUG, "Shuffling protein %s as %s", 
+       id_.c_str(), decoy_str);
+  free(decoy_str);
+
+  switch(decoy_type){
+  case NO_DECOYS:
+    return;
+
+  case PROTEIN_REVERSE_DECOYS:
+    reverse(sequence_, sequence_ + strlen(sequence_));
+    break;
+
+  case PROTEIN_SHUFFLE_DECOYS:
+    carp(CARP_DEBUG, "shuffling");
+    shuffle_array(sequence_, strlen(sequence_));
+    break;
+
+  case PEPTIDE_SHUFFLE_DECOYS:
+    peptideShuffleSequence();
+    break;
+    
+  case INVALID_DECOY_TYPE:
+  case NUMBER_DECOY_TYPES:
+    carp(CARP_FATAL, "Illegal decoy type for shuffling protein.");
+    break;
+  }
+
+  // change the protein name
+  string prefix = Params::GetString("decoy-prefix");
+  id_ = prefix + id_;
+}
+
+/** 
+ * Access routines of the form get_<object>_<field> and set_<object>_<field>. 
+ */
+
+/**
+ * Additional get and set methods
+ */
+
+/**
+ *\returns the id of the protein
+ * returns a heap allocated new copy of the id
+ * user must free the return id
+ * assumes that the protein is heavy
+ */
+string Protein::getId()
+{
+
+  if(is_light_){
+    carp(CARP_FATAL, "Cannot get ID from light protein.");
+  }
+  
+  return id_;
+
+}
+
+/**
+ *\returns a pointer to the id of the protein
+ * assumes that the protein is heavy
+ */
+string& Protein::getIdPointer()
+{
+  if(is_light_){
+    carp(CARP_FATAL, "Cannot get ID pointer from light protein.");
+  }
+  return id_; 
+}
+
+/**
+ * sets the id of the protein
+ */
+void Protein::setId(
+  const string& id ///< the sequence to add -in
+  )
+{
+  id_ = id;
+}
+
+/**
+ *\returns the sequence of the protein
+ * returns a heap allocated new copy of the sequence
+ * user must free the return sequence 
+ * assumes that the protein is heavy
+ */
+char* Protein::getSequence(
+  int offset
+) {
+  if(is_light_){
+    carp(CARP_FATAL, "Cannot get sequence from light protein.");
+  }
+  unsigned int sequence_length = strlen(sequence_) +1-offset; // +\0
+  char * copy_sequence = 
+    (char *)mymalloc(sizeof(char)*sequence_length);
+  return strncpy(copy_sequence, sequence_+offset, sequence_length);  
+}
+
+/**
+ *\returns a pointer to the sequence of the protein
+ * assumes that the protein is heavy
+ */
+char* Protein::getSequencePointer(
+  int offset
+)
+{
+  if(is_light_){
+    carp(CARP_FATAL, "Cannot get sequence pointer from light protein.");
+  }
+  return sequence_+offset;
+}
+
+/**
+ * sets the sequence of the protein
+ */
+void Protein::setSequence(
+  const char* sequence ///< the sequence to add -in
+  )
+{
+
+  free(sequence_);
+  unsigned int sequence_length = strlen(sequence) +1; // +\0
+  char * copy_sequence = 
+    (char *)mymalloc(sizeof(char)*sequence_length);
+  sequence_ =
+    strncpy(copy_sequence, sequence, sequence_length);  
+}
+
+/**
+ *\returns the length of the protein
+ * assumes that the protein is heavy
+ */
+unsigned int Protein::getLength()
+{
+  return length_;
+}
+
+/**
+ * sets the id of the protein
+ */
+void Protein::setLength(
+  unsigned int length ///< the length to add -in
+  )
+{
+  length_ = length;
+}
+
+/**
+ *\returns the annotation of the protein
+ * returns a heap allocated new copy of the annotation
+ * user must free the return annotation
+ * assumes that the protein is heavy
+ */
+string Protein::getAnnotation()
+{
+  if(is_light_){
+    carp(CARP_FATAL, "Cannot get annotation from light protein.");
+  }
+
+  return annotation_;
+}
+
+/**
+ *\returns A const pointer to the annotation of the protein.
+ */
+const string& Protein::getAnnotationPointer(){
+  return annotation_;
+}
+ 
+/**
+ * sets the annotation of the protein
+ */
+void Protein::setAnnotation(
+  const string& annotation ///< the sequence to add -in
+  )
+{
+  annotation_ = annotation;
+}
+
+/**
+ * sets the offset of the protein in the fasta file
+ */
+void Protein::setOffset(
+  unsigned long int offset 
+  ///< The file location in the source file in the database -in
+  )
+{
+  offset_ = offset;
+}
+
+/**
+ *\returns the offset the protein
+ */
+unsigned long int Protein::getOffset()
+{
+  return offset_;
+}
+
+/**
+ * sets the protein_idx (if, idx=n, nth protein in the fasta file)
+ */
+void Protein::setProteinIdx(
+  unsigned int protein_idx ///< The index of the protein in it's database. -in
+  )
+{
+  // carp(CARP_DETAILED_DEBUG, "set protein idx = %i", protein_idx);
+  protein_idx_ = protein_idx;
+}
+
+/**
+ *\returns the protein_idx field
+ */
+unsigned int Protein::getProteinIdx()
+{
+  return protein_idx_;
+}
+
+/**
+ * sets the is_light field (is the protein a light protein?)
+ */
+void Protein::setIsLight(
+  bool is_light ///< is the protein a light protein? -in
+  )
+{
+  is_light_ = is_light;
+}
+
+/**
+ *\returns TRUE if the protein is light protein
+ */
+bool Protein::getIsLight()
+{
+  return is_light_;
+}
+
+/**
+ * sets the database for protein
+ */
+void Protein::setDatabase(
+  Database*  database ///< Which database is this protein part of -in
+  )
+{
+  database_ = Database::copyPtr(database);
+}
+
+/**
+ *\returns Which database is this protein part of
+ */
+Database* Protein::getDatabase()
+{
+  return database_;
+}
+
+/** 
+ * Comparison function for sorting proteins by protein id.
+ */
+bool Crux::protein_id_less_than(Protein* protein_one, Protein* protein_two){
+  int compare = protein_one->getIdPointer().compare(protein_two->getIdPointer());
+  return (compare > 0);
+}
+
+/**
+ * Rearrange the sequence_ between cleavage sites, keeping residues
+ * on either side of a cleavage in place.  Get enzyme from
+ * parameters.  Cases of NO_ENZYME or NON_SPECIFIC_DIGEST are the same
+ * as shuffling the whole protein.  Same behavior for full and partial
+ * digest, min/max length/mass and missed cleavages, i.e. shuffle
+ * between every cleavage site.
+ */
+void Protein::peptideShuffleSequence(){
+  if( sequence_ == NULL ){
+    carp(CARP_WARNING, "Cannot shuffle a NULL sequence");
+    return;
+  }
+  if( length_ < 2 ){
+    return;
+  }
+ 
+  // get the digest rule
+  ENZYME_T enzyme = GlobalParams::getEnzyme();
+  // cases where peptide-shuffle is really protein shuffle
+  if( enzyme == NO_ENZYME 
+      || GlobalParams::getDigestion() == NON_SPECIFIC_DIGEST){
+    this->shuffle(PROTEIN_SHUFFLE_DECOYS);
+    return;
+  }
+
+  // store valid cleavage locations
+  vector<int> cleave_after_here;
+
+  // traverse the sequence to penultimate residue
+  for(size_t seq_offset = 0; seq_offset < length_ - 1; seq_offset++){
+    // mark each valid location (mark x for cleavage between x and y)
+    if( ProteinPeptideIterator::validCleavagePosition(sequence_ + seq_offset, 
+                                                      enzyme) ){
+      cleave_after_here.push_back(seq_offset);
+    }
+  }
+
+  // shuffle between each cleavage site (leave a and b in place)
+  int start = 0; // shuffle between prot first residue and first site
+  int end = -1;
+  vector<int>::iterator next_position = cleave_after_here.begin();
+  for(; next_position != cleave_after_here.end(); ++next_position){
+    end = *next_position;
+    shuffleRegion(start, end);
+    start = end + 1; // hold in place both sides of the cleavage site
+  }
+
+  // shuffle end of sequence
+  end = length_ - 1;
+  if( start < end ){
+    shuffleRegion(start, end);
+  }
+}
+
+/**
+ * Shuffle the region of the sequence between start and end, leaving
+ * start and end residues in place.  Repeat up to three times if the
+ * shuffled sequence doesn't change.
+ */
+void Protein::shuffleRegion(
+  int start, ///< index of peptide start
+  int end){///< index of last residue in peptide
+
+  int sub_seq_length = end - start - 1;
+  char* buf = new char[sub_seq_length + 1];
+  if( sub_seq_length > 1 ){
+    carp(CARP_DETAILED_DEBUG, "Shuffle from %d to %d.", start+1, end);
+
+    // store the sequence before shuffling not including the unmoved residues
+    strncpy(buf, sequence_ + start + 1, sub_seq_length);
+    buf[sub_seq_length] = '\0';
+
+    shuffle_array(sequence_ + start + 1, sub_seq_length);
+
+    // check to see if it changed
+    bool has_changed = strncmp(buf, sequence_ + start, sub_seq_length + 2);
+    // try reshuffling up to three more times
+    int count = 0;
+    while( (count < 3) && (has_changed == false)){
+      shuffle_array(sequence_ + start + 1, sub_seq_length);
+      has_changed = strncmp(buf, sequence_ + start, sub_seq_length + 2);
+      count++;
+    }
+    if( !has_changed ){
+        carp(CARP_WARNING, "Unable to generate a shuffled sequence "
+             "different than the original for sequence %s of protein %s "
+             "at position %d.", buf, id_.c_str(), start);
+    }
+  }
+  delete [] buf;
+}
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/model/Protein.h b/src/model/Protein.h
new file mode 100644
index 0000000..6f3becc
--- /dev/null
+++ b/src/model/Protein.h
@@ -0,0 +1,347 @@
+/**
+ * \file Protein.h 
+ * $Revision: 1.25 $
+ * \brief Object for representing one protein sequence.
+ *****************************************************************************/
+#ifndef CRUX_PROTEIN_H 
+#define CRUX_PROTEIN_H
+
+#include <stdio.h>
+#include "util/utils.h"
+#include "model/objects.h"
+#include "Peptide.h"
+#include "PeptideSrc.h"
+#include "io/carp.h"
+#include "PeptideConstraint.h"
+
+namespace Crux {
+
+class Protein {
+ protected:
+  Database*  database_; ///< Which database is this protein part of
+  unsigned long int offset_; ///< The file location in the database source file
+  unsigned int protein_idx_; ///< The index of the protein in it's database.
+  bool    is_light_; ///< is the protein a light protein?
+  bool    is_memmap_; ///< is the protein produced from memory mapped file
+  std::string id_; ///< The protein sequence id.
+  char*        sequence_; ///< The protein sequence.
+  unsigned int   length_; ///< The length of the protein sequence.
+  std::string      annotation_; ///< Optional protein annotation.
+
+  /**
+   * Find the beginning of the next sequence, and read the sequence ID
+   * and the comment.
+   */
+  bool readTitleLine
+    (FILE* fasta_file,///< file to read
+     char* name,      ///< put protein name here
+     char* description);///< put protein description here
+
+  
+  /**
+   * Read raw sequence until a '>' is encountered or too many letters
+   * are read.  The new sequence is appended to the end of the given
+   * sequence.
+   *
+   * Return: Was the sequence read completely?
+   **/
+  static bool readRawSequence
+    (FILE* fasta_file,   // Input Fasta file.
+     char* name,         // Sequence ID (used in error messages).
+     unsigned int   max_chars,    // Maximum number of allowed characters.
+     char* raw_sequence, // Pre-allocated sequence.
+     unsigned int* sequence_length // the sequence length -chris added
+   );
+ 
+  /**
+   * Rearrange the sequence_ between cleavage sites, keeping residues
+   * on either side of a cleavage in place.  Get enzyme from
+   * parameters.  Same behavior for full and partial digest, min/max
+   * length/mass and missed cleavages, i.e. shuffle between every
+   * cleavage site.
+   */
+  void peptideShuffleSequence();
+
+  /**
+   * Shuffle the region of the sequence between start and end, leaving
+   * start and end residues in place.  Repeat up to three times if the
+   * shuffled sequence doesn't change.
+   */
+  void shuffleRegion(
+    int start, ///< index of peptide start
+    int end);  ///< index of last residue in peptide
+
+ public:
+
+  /**
+   * Initialize member variables to default values.
+   */
+  void init();
+
+  /**
+   * \returns An (empty) protein object.
+   */
+  Protein();
+
+  /**
+   * \returns A new protein object(heavy).
+   */
+  Protein(
+    const char*         id, ///< The protein sequence id.
+    const char*   sequence, ///< The protein sequence.
+    unsigned int length, ///< The length of the protein sequence.
+    const char* annotation,  ///< Optional protein annotation.  -in
+    unsigned long int offset, 
+    ///< The file location in the source file in the database -in
+    unsigned int protein_idx,///< The index of the protein in its database. -in
+    Database* database ///< the database of its origin
+  );         
+
+  /**
+   * \returns A new light protein object.
+   */
+  static Protein* newLightProtein(
+    unsigned long int offset, 
+    ///< The file location in the source file in the database -in
+    unsigned int protein_idx ///< The index of the protein in its database. -in
+  );
+
+  /**
+   * convert light protein to heavy, by parsing all the sequence from fasta file
+   * \returns TRUE if successfully converts the protein to heavy 
+   */
+  bool toHeavy();
+
+  /**
+   * covert heavy protein back to light
+   * \returns TRUE if successfully converts the protein to light
+   */
+  bool toLight();
+
+  /**
+   * Frees an allocated protein object.
+   */
+  
+  virtual ~Protein();
+
+  /**
+   * Prints a protein object to file.
+   */
+  void print(
+    FILE* file ///< output stream -out
+  );
+
+  /**
+   * Copies protein object src to dest.
+   * dest must be a heap allocated object 
+   */
+  static void copy(
+    Protein* src,///< protein to copy -in
+    Protein* dest ///< protein to copy to -out
+  );
+
+  /**
+   * Parses a protein from an open (FASTA) file.
+   * \returns TRUE if success. FALSE is failure.
+   */
+  bool parseProteinFastaFile(
+    FILE* file ///< fasta file -in
+  );
+
+  /**
+   * Parses a protein from an memory mapped binary fasta file
+   * the protein_idx field of the protein must be added before or
+   * after you parse the protein.
+   * \returns TRUE if success. FALSE is failure.
+   * protein must be a heap allocated
+   * 
+   * Assume memmap pointer is set at beginning of protein
+   * Assume protein binary format (no line break)
+   * <int: id length><char: id><int: annotation length>
+     <char: annotation><int: sequence length><char: sequence>
+   *
+   * modifies the *memmap pointer!
+   */
+  bool parseProteinBinaryMemmap(
+    char** memmap 
+    ///< a pointer to a pointer to the memory mapped binary fasta file -in
+  );
+
+  /**
+   * Change the sequence of a protein to be a randomized version of
+   * itself.  The method of randomization is dependent on the
+   * decoy_type (shuffle or reverse).  The name of the protein is also
+   * changed by prefixing with "decoy-prefix"
+   */
+  void shuffle(DECOY_TYPE_T decoy_type);
+
+  /**
+   * Additional get and set methods
+   */
+
+  /**
+   *\returns the id of the protein
+   * returns a heap allocated new copy of the id
+   * user must free the return id
+   */
+  std::string getId();
+
+  /**
+   *\returns a pointer to the id of the protein
+   */
+  std::string& getIdPointer();
+
+  /**
+   * sets the id of the protein
+   */
+  void setId(
+    const std::string& id ///< the sequence to add -in
+    );
+
+  /**
+   *\returns the sequence of the protein
+   * returns a heap allocated new copy of the sequence
+   * user must free the return sequence 
+   */
+  virtual char* getSequence(
+    int offset=0
+  );
+
+  /**
+   *\returns a pointer to the sequence of the protein
+   */
+  virtual char* getSequencePointer(
+    int offset=0
+  );
+
+  /**
+   * sets the sequence of the protein
+   */
+  void setSequence(
+    const char* sequence ///< the sequence to add -in
+  );
+
+  /**
+   *\returns the length of the protein
+   */
+  virtual unsigned int getLength();
+
+  /**
+   * sets the id of the protein
+   */
+  void setLength(
+    unsigned int length ///< the length to add -in
+  );
+
+  /**
+   *\returns the annotation of the protein
+   * returns a heap allocated new copy of the annotation
+   * user must free the return annotation
+   */
+  std::string getAnnotation();
+
+  /**
+   *\returns A const pointer to the annotation of the protein.
+   */
+  const std::string& getAnnotationPointer();
+
+   /**
+   * sets the annotation of the protein
+   */
+  void setAnnotation(
+    const std::string& annotation ///< the sequence to add -in
+  );
+
+
+  /**
+   * sets the offset of the protein in the fasta file
+   */
+  void setOffset(
+    unsigned long int offset 
+    ///< The file location in the source file in the database -in
+    );
+
+  /**
+   *\returns the offset the protein
+   */
+  unsigned long int getOffset();
+
+  /**
+   * sets the protein_idx (if, idx=n, nth protein in the fasta file)
+   */
+  void setProteinIdx(
+    unsigned int protein_idx ///< The index of the protein in its database. -in
+  );
+
+  /**
+   *\returns the protein_idx field
+   */
+  unsigned int getProteinIdx();
+
+  /**
+   * sets the is_light field (is the protein a light protein?)
+   */
+  void setIsLight(
+    bool is_light ///< is the protein a light protein? -in
+    );
+
+  /**
+   *\returns TRUE if the protein is light protein
+   */
+  bool getIsLight();
+
+  /**
+   * sets the database for protein
+   */
+  void setDatabase(
+    Database*  database ///< Which database is this protein part of -in
+    );
+
+  /**
+   *\returns Which database is this protein part of
+   */
+  virtual Database* getDatabase();
+
+  /**
+   * prints a binary representation of the protein
+   * 
+   * FORMAT (no line break)
+   * <int: id length><char: id><int: annotation length>
+     <char: annotation><int: sequence length><char: sequence>
+   *
+   * make sure when rading the binary data, add one to the length so
+   * that it will read in the terminating char as well.
+   */
+  void serialize(
+    FILE* file ///< output stream -out
+    );
+
+  /**
+   * \returns the start index of the sequence in the protein
+   * tries to use the previous aa and next aa to refine where
+   * this sequence exits
+   */
+  virtual int findStart(
+    std::string sequence,
+    std::string prev_aa,
+    std::string next_aa
+  );
+
+  virtual bool isPostProcess();
+
+};
+
+/** 
+ * Comparison function for sorting proteins by protein id.
+ */
+bool protein_id_less_than(Protein* protein_one, Protein* protein_two);
+
+};
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif
diff --git a/src/model/ProteinIndex.cpp b/src/model/ProteinIndex.cpp
new file mode 100644
index 0000000..475f87b
--- /dev/null
+++ b/src/model/ProteinIndex.cpp
@@ -0,0 +1,174 @@
+/*************************************************************************//**
+ * \file ProteinIndex.cpp
+ * \brief Object for creating a protein index or binary fasta file
+ ****************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <ctype.h>
+#include "util/utils.h"
+#include "util/crux-utils.h"
+#include "Peptide.h"
+#include "Protein.h"
+#include "Database.h"
+#include "io/carp.h"
+#include "PeptideConstraint.h"
+#include "ProteinIndex.h"
+#include "util/WinCrux.h"
+
+
+/***************/
+
+/**
+ *
+ *\returns the file handler for the output file
+ */
+FILE* get_output_file(
+  char* fasta_file,  ///< input fasta file -in
+  bool is_binary_file  ///< Are we creating a binary fasta file?
+  )
+{
+  char* name = NULL;
+  
+  // create a binary fasta file?
+  if(is_binary_file){
+    name = generate_name(fasta_file, "_binary_fasta", ".fasta", NULL);
+  }
+  else{// create a normal protein index file
+    name = generate_name(fasta_file, "_protein_index", ".fasta", NULL);
+  }
+  
+  FILE* file = fopen(name, "wb");
+  free(name);
+  return file;
+}
+
+
+/**
+ * creates a protein index on to the output_file
+ * \returns true if successfully creates a protein index, else false
+ */
+bool ProteinIndex::create(
+  char* fasta_file  ///< input fasta file -in
+  )
+{
+  unsigned long working_index;
+  FILE* file = NULL;
+  char* new_line = NULL;
+  int line_length;
+  size_t buf_length = 0;
+  unsigned int protein_idx = 0;
+  FILE* output_file = NULL;
+
+  // open file and 
+  file = fopen(fasta_file, "rb");
+
+  // check if succesfully opened file
+  if(file == NULL){
+    carp(CARP_FATAL, "Failed to open fasta file '%s'", fasta_file);
+    return false;
+  }
+
+  // get output file
+  output_file = get_output_file(fasta_file, false);
+
+  // check if succesfully created file
+  if(output_file == NULL){
+    carp(CARP_ERROR, "Failed to create protein index file");
+    fclose(file);
+    return false;
+  }
+
+  working_index = ftell(file);
+  // check each line until reach '>' line
+  while((line_length =  getline(&new_line, &buf_length, file)) != -1){
+    if(new_line[0] == '>'){ 
+      ++protein_idx;
+      fprintf(output_file, "* %d ",protein_idx);
+      fprintf(output_file, "%ld\n", working_index);
+    }    
+    working_index = ftell(file);
+  }
+  
+  free(new_line);
+  fclose(file);
+  fclose(output_file);
+
+  return true;
+}
+
+/***************************************************************
+ * FIXME, implement this if needed
+ *
+
+**
+ * \returns An (empty) protein_index object.
+ *
+PROTEIN_INDEX_T* allocate_protein_index(void);
+
+**
+ * creates a protein_index that contains the offset and protein index of the protein
+ * in the fasta file.
+ *\returns a new protein_index object
+ *
+PROTEIN_INDEX_T* new_protein_index(
+  unsigned long int offset, ///< The file location in the source file in the database
+  unsigned int protein_idx ///< The index of the protein in it's database.
+  );
+
+**
+ *
+ * free a protein index object
+ *
+void free_protein_index(
+  PROTEIN_INDEX_T* protein_index  ///< the protein index to free
+  );                        
+
+*****************************************************************/
+
+/**
+ * input is the fasta file name which the protein index
+ * should have been created.
+ * or if creating binary fasta file, is that already on disk?
+ *
+ *\returns TRUE if protein index or binary fasta file is on disk, else false
+ */
+bool ProteinIndex::onDisk(
+  const char* fasta_file, ///< input fasta file -in
+  bool is_binary ///< are we looking for the binary fasta file? or preotein index
+  )
+{
+  char* name = NULL;
+  
+  // create a binary fasa file?
+  if(is_binary){
+    name = generate_name(fasta_file, "_binary_fasta", ".fasta", NULL);
+  }
+  else{// create a normal protein index file
+    name = generate_name(fasta_file, "_protein_index", ".fasta", NULL);
+  }
+  
+  // check if can open file
+  if(access(name, F_OK)){
+    free(name);
+    return false;
+  }
+  
+  free(name);
+  return true;
+}
+
+/**
+ * protein index iterator
+ * the protein index iterator parses the protein index file
+ * for each protein index one by one and returns a new light protein.
+ */
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/model/ProteinIndex.h b/src/model/ProteinIndex.h
new file mode 100644
index 0000000..3df012b
--- /dev/null
+++ b/src/model/ProteinIndex.h
@@ -0,0 +1,75 @@
+/**
+ * \file ProteinIndex.h
+ * $Revision: 1.3 $
+ * \brief Object for creating a protein index
+ *****************************************************************************/
+#ifndef PROTEIN_INDEX_H
+#define PROTEIN_INDEX_H
+
+#include <stdio.h>
+#include "util/utils.h"
+#include "model/objects.h"
+#include "Peptide.h"
+#include "Protein.h"
+#include "io/carp.h"
+#include "PeptideConstraint.h"
+
+
+class ProteinIndex {
+ protected:
+  unsigned long int offset_;  ///< The offset of the protein in the fasta file
+  unsigned int protein_idx_;  ///< The idx of the protein in the fasta file
+ public:
+
+
+  /**
+   * \returns An (empty) protein_index object.
+   */
+  void init();
+  ProteinIndex();
+
+  /**
+   * Creates a protein_index that contains the offset and protein
+   * index of the protein in the fasta file.
+   */
+  ProteinIndex(
+    unsigned long int offset, ///< The file location in the database source file
+    unsigned int protein_idx ///< The index of the protein in its database.
+    );
+  
+  /**
+   * Free a protein index object.
+   */
+  virtual ~ProteinIndex();
+
+  /**
+   * Creates a protein index for the output_file.
+   * \returns True if successfully creates a protein index, else
+   * false.
+   */
+  static bool create(
+    char* fasta_file ///< input fasta file stream -in
+    );
+
+  /**
+   * input is the fasta file name which the protein index
+   * should have been created.
+   * or if creating binary fasta file, is that already on disk?
+   *
+   *\returns TRUE if protein index or binary fasta file is on disk, else FALSE
+   */
+  static bool onDisk(
+    const char* fasta_file, ///< input fasta file -in
+    bool is_binary ///< looking for the binary fasta file or protein index?
+    );
+
+};
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif
diff --git a/src/model/ProteinIndexIterator.cpp b/src/model/ProteinIndexIterator.cpp
new file mode 100644
index 0000000..644b4d6
--- /dev/null
+++ b/src/model/ProteinIndexIterator.cpp
@@ -0,0 +1,128 @@
+/*************************************************************************//**
+ * \file ProteinIndexIterator.cpp
+ * \brief Object for iterating a protein index file
+ ****************************************************************************/
+#include "ProteinIndexIterator.h"
+
+using namespace Crux;
+
+/**
+ *
+ *\returns TRUE if successfully sets the protein_index_iterator, else FALSE
+ */
+bool ProteinIndexIterator::setup() {
+
+  // used to parse each line from file
+  char* new_line = NULL;
+  int line_length;
+  size_t buf_length = 0;
+  FILE* file = file_;
+
+  // protein fields
+  char star[2] = "";
+  unsigned long int offset;
+  unsigned int protein_idx;
+  
+  Protein* protein = NULL;
+  bool found = false;
+
+  while((line_length =  getline(&new_line, &buf_length, file)) != -1){
+    // begining of the protein feilds
+    if(new_line[0] == '*'){
+      // read the crux_index_file information
+      if(sscanf(new_line,"%s %d %ld", 
+                star, &protein_idx, &offset) < 2){
+        free(new_line);
+        carp(CARP_WARNING, "incorrect file format");
+        fclose(file);
+        return false;
+      }
+      found = true;
+      break;
+    }
+    // skip header lines
+    else if(new_line[0] == '#'){
+      continue;
+    }
+  }
+  
+  // there is a next protein to return
+  if(found){
+    protein = Protein::newLightProtein(offset, protein_idx);
+    next_protein_ = protein;
+    has_next_ = true;
+  }
+  // no more proteins..
+  else{
+    has_next_ = false;
+  }
+  
+  free(new_line);
+  return true;
+}
+
+/**
+ * There must be the correct protein index file present
+ *\returns a new heap allocated protein index iterator
+ */
+ProteinIndexIterator::ProteinIndexIterator(
+  const char* fasta_file ///< input fasta file -in
+  )
+{
+  char* name = generate_name(fasta_file, "_protein_index", ".fasta", NULL);
+  FILE* file = fopen(name, "rb");
+
+  if(file == NULL){
+    carp(CARP_FATAL, "failed to open protein index file: %s", name);
+  }
+
+  free(name);
+  
+  next_protein_ = NULL;
+  has_next_ = false;
+  file_ = file;
+  
+  // set up the protein_index_iterator
+  if(!setup()){
+    carp(CARP_FATAL, "failed to setup ProteinIndexIterator");
+  }
+}
+
+/**
+ * Frees the allocated protein index iterator
+ */
+ProteinIndexIterator::~ProteinIndexIterator() {
+
+  // free the file handler
+  fclose(file_);
+
+  // free unused protein
+  if(next_protein_ != NULL){
+    delete (next_protein_);
+  }
+}
+
+/**
+ *
+ *\returns TRUE if there is another protein to return, else FALSE
+ */
+bool ProteinIndexIterator::hasNext() {
+
+  return has_next_;
+}
+
+/**
+ *\return the next protein in the protein index file
+ */
+Protein* ProteinIndexIterator::next() {
+
+  Protein* protein = next_protein_;
+  next_protein_ = NULL;
+
+  // set up the protein_index_iterator
+  if(!setup()){
+    carp(CARP_FATAL, "failed to setup protein_index_iterator");
+  }
+  
+  return protein;
+}
diff --git a/src/model/ProteinIndexIterator.h b/src/model/ProteinIndexIterator.h
new file mode 100644
index 0000000..e760b75
--- /dev/null
+++ b/src/model/ProteinIndexIterator.h
@@ -0,0 +1,65 @@
+#ifndef PROTEIN_INDEX_ITERATOR_H
+#define PROTEIN_INDEX_ITERATOR_H
+/**
+ * \file ProteinIndexIterator.h
+ * $Revision: 1.3 $
+ * \brief Object for iterating a protein index file
+ *****************************************************************************/
+
+#include "Protein.h"
+
+/**
+ * protein index iterator
+ * the protein index iterator parses the protein index file
+ * for each protein index one by one and returns a new protein_index object
+ */
+
+class ProteinIndexIterator {
+ protected:
+  FILE* file_;  ///< The file handler of the fasta file
+  Crux::Protein* next_protein_; ///< the next protein index to return
+  bool has_next_; ///< is there a new protein to return?
+
+  /**
+   *
+   *\returns true if successfully sets the ProteinIndexIterator, else false
+   */
+  bool setup();
+
+ public:
+    
+  /**
+   * 
+   *\returns a new heap allocated protein index iterator
+   */
+  ProteinIndexIterator(
+    const char* fasta_file ///< input fasta file -in
+  );
+
+  /**
+   * Frees the allocated protein index iterator
+   */
+  virtual ~ProteinIndexIterator();
+
+  /**
+   *
+   *\returns true if there is another protein index to return, else false
+   */
+  bool hasNext();
+
+  /**
+   *
+   *\return the next protein index in the protein index file
+   */
+  Crux::Protein* next();
+
+};
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif
diff --git a/src/model/ProteinMatch.cpp b/src/model/ProteinMatch.cpp
new file mode 100644
index 0000000..693e760
--- /dev/null
+++ b/src/model/ProteinMatch.cpp
@@ -0,0 +1,93 @@
+/**
+ * \file ProteinMatch.cpp
+ * \brief Object for holding protein scores
+ ********************************/
+#include "ProteinMatch.h"
+
+#include "Protein.h"
+
+using namespace Crux;
+using namespace std;
+
+/**
+ * \returns an empty ProteinMatch object
+ */
+ProteinMatch::ProteinMatch() {
+  ;
+}
+  
+/**
+ * \returns a ProteinMatch object with the protein set
+ */
+ProteinMatch::ProteinMatch(
+  Protein* protein ///< Protein to set
+  ) {
+  protein_ = protein;
+}
+    
+/**
+ * Destructor
+ */
+ProteinMatch::~ProteinMatch() {
+
+}
+
+/** 
+ * \returns the protein for the match
+ */
+Crux::Protein* ProteinMatch::getProtein() {
+  return protein_;
+}
+
+/**
+ * sets the protein for the match
+ */
+void ProteinMatch::setProtein(
+  Crux::Protein* protein ///< Protein to set
+) {
+  protein_ = protein;
+}
+
+/**
+ * \returns the begining of the peptidematches vector
+ */
+PeptideMatchIterator ProteinMatch::peptideMatchBegin() {
+  return peptide_matches_.begin();
+}
+
+/**
+ * \returns the end of the peptide matches vector
+ */
+PeptideMatchIterator ProteinMatch::peptideMatchEnd() {
+  return peptide_matches_.end();
+}
+
+/**
+ * adds a peptide match to the protein match
+ */
+void ProteinMatch::addPeptideMatch(
+  PeptideMatch* peptide_match ///<PeptideMatch to add
+  ) {
+  for (deque<PeptideMatch*>::iterator iter = peptide_matches_.begin();
+       iter != peptide_matches_.end();
+       ++iter) {
+    if (*iter == peptide_match) {
+      return;
+    }
+  }
+  peptide_matches_.push_back(peptide_match);
+}
+
+/**
+ * \returns the id for this protein
+ */
+string ProteinMatch::getId() const {
+  return string(protein_->getIdPointer());
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/ProteinMatch.h b/src/model/ProteinMatch.h
new file mode 100644
index 0000000..a668fe9
--- /dev/null
+++ b/src/model/ProteinMatch.h
@@ -0,0 +1,84 @@
+/**
+ * \file ProteinMatch.h
+ * $Revision: 1.00 $
+ * \brief Object for holding protein scores
+ ******************************************************/
+#ifndef PROTEINMATCH_H_
+#define PROTEINMATCH_H_
+
+#include "match_objects.h"
+#include "AbstractMatch.h"
+
+#include <map>
+#include <string>
+#include <vector>
+
+class ProteinMatch : public AbstractMatch {
+
+ protected:
+  std::deque<PeptideMatch*> peptide_matches_; ///< PeptideMatches associated with this ProteinMatch
+  Crux::Protein* protein_; ///< Protein 
+  
+ public:
+
+  /**
+   * \returns an empty ProteinMatch object
+   */
+  ProteinMatch();
+  
+  /**
+   * \returns a ProteinMatch object with the protein set
+   */
+  ProteinMatch(
+    Crux::Protein* protein ///< Protein to set
+  );
+  
+  /**
+   * Destructor
+   */
+  virtual ~ProteinMatch();
+
+  /** 
+   * \returns the protein for the match
+   */
+  Crux::Protein* getProtein();
+
+  /**
+   * sets the protein for the match
+   */
+  void setProtein(
+    Crux::Protein* protein ///< Protein to set
+  );
+
+  /**
+   * \returns the begining of the peptidematches vector
+   */
+  PeptideMatchIterator peptideMatchBegin();
+
+  /**
+   * \returns the end of the peptide matches vector
+   */
+  PeptideMatchIterator peptideMatchEnd();
+
+  /**
+   * adds a peptide match to the protein match
+   */
+  void addPeptideMatch(
+    PeptideMatch* peptide_match ///< peptide_match to add
+  );
+
+  /**
+   * \returns the id for this protein
+   */
+  std::string getId() const;
+
+};
+
+#endif //PROTEINMATCH_H
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/ProteinMatchCollection.cpp b/src/model/ProteinMatchCollection.cpp
new file mode 100644
index 0000000..7ed700e
--- /dev/null
+++ b/src/model/ProteinMatchCollection.cpp
@@ -0,0 +1,279 @@
+/**
+ * \file ProteinMatchCollection.cpp
+ * \brief Object for holding a collection of ProtinMatches, PeptideMatches, and SpectrumMatches
+ ********************************/
+#include "ProteinMatchCollection.h"
+#include "ProteinMatch.h"
+#include "PeptideMatch.h"
+#include "SpectrumMatch.h"
+
+#include "Match.h"
+#include "MatchCollection.h"
+
+using namespace std;
+using namespace Crux;
+
+/**
+ * \returns a blank ProteinMatchCollection
+ */
+ProteinMatchCollection::ProteinMatchCollection() {
+  distinct_matches_ = true;
+}
+
+/**
+ * \returns a ProteinMatchCollection using a MatchCollection
+ * TODO - remove this later
+ */
+ProteinMatchCollection::ProteinMatchCollection(
+  MatchCollection* match_collection ///< matches to add
+  ) {
+  distinct_matches_ = true;
+  addMatches(match_collection);
+
+}
+
+  
+/**
+ * Default destructor
+ */
+ProteinMatchCollection::~ProteinMatchCollection() {
+
+  // delete protein matches
+  for (ProteinMatchIterator iter = proteinMatchBegin();
+       iter != proteinMatchEnd();
+       ++iter) {
+    delete *iter;
+  }
+
+  // delete modified aa strings + peptide matches
+  for (map<MODIFIED_AA_T*, PeptideMatch*, cmpSeq>::iterator iter = peptide_match_map_.begin();
+       iter != peptide_match_map_.end();
+       ++iter) {
+      free(iter->first);
+      delete iter->second;
+  }
+
+  // delete spectrum matches
+  for (SpectrumMatchIterator iter = spectrumMatchBegin();
+       iter != spectrumMatchEnd();
+       ++iter) {
+    delete *iter;
+  }
+
+}
+
+/**
+ * \returns the begin iterator for the ProteinMatch objects
+ */
+ProteinMatchIterator ProteinMatchCollection::proteinMatchBegin() {
+
+  return protein_matches_.begin();
+}
+
+/**
+ * \returns the end iterator for the ProteinMatch objects
+ */
+ProteinMatchIterator ProteinMatchCollection::proteinMatchEnd() {
+
+  return protein_matches_.end();
+}
+
+/**
+ * \returns the begin iterator for the PeptideMatch objects
+ */
+PeptideMatchIterator ProteinMatchCollection::peptideMatchBegin() {
+  return peptide_matches_.begin();
+}
+  
+/**
+ * \returns the end iterator for the PeptideMatch objects
+ */
+PeptideMatchIterator ProteinMatchCollection::peptideMatchEnd() {
+  return peptide_matches_.end();
+}
+
+/**
+ * \returns the begin iterator for all of the SpectrumMatch objects
+ */
+SpectrumMatchIterator ProteinMatchCollection::spectrumMatchBegin() {
+  return spectrum_matches_.begin();
+}
+
+/**
+ * \returns the end iterator for all of the SpectrumMatch objects
+ */
+SpectrumMatchIterator ProteinMatchCollection::spectrumMatchEnd() {
+  return spectrum_matches_.end();
+}
+
+/**
+ * \returns the ProteinMatch for a Protein, creates a new
+ * one if it is not found and create is true
+ */  
+ProteinMatch* ProteinMatchCollection::getProteinMatch(
+  Protein* protein,  ///< Protein for which to find the protein match
+  bool create ///< Create the ProteinMatch if it doesn't exist
+  ) {
+
+  string id = protein->getIdPointer();
+
+  ProteinMatch* ans = getProteinMatch(id);
+  if (ans == NULL) {
+    if (create) {
+      ans = new ProteinMatch(protein);
+      protein_matches_.push_back(ans);
+      protein_match_map_.insert(pair<string, ProteinMatch*>(id, ans));
+    } else {
+      carp(CARP_WARNING, "ProteinMatch for %s not found!", protein->getIdPointer().c_str());
+    }
+  }
+  return ans;
+}
+
+/**
+ * \returns the PeptideMatch for a peptide object, creating
+ * if it doesn't exist and create is true
+ */
+PeptideMatch* ProteinMatchCollection::getPeptideMatch(
+  Peptide* peptide, ///< peptide to find
+  bool create ///< create if it doesn't exist?
+  ) {
+
+
+  MODIFIED_AA_T* mod_seq = peptide->getModifiedAASequence();
+
+  PeptideMatch* ans = getPeptideMatch(mod_seq);
+
+  if (ans == NULL) {
+    if (create) {
+      ans = new PeptideMatch(peptide);
+      peptide_matches_.push_back(ans);
+      peptide_match_map_.insert(pair<MODIFIED_AA_T*, PeptideMatch*>(mod_seq, ans));
+    } else {
+      free(mod_seq);
+      carp(CARP_FATAL, "Could not find peptidematch for sequence %s",
+        peptide->getSequence());
+    }
+  } else {
+    free(mod_seq);
+  }
+
+  return ans;
+}
+
+/**
+ * \returns the ProteinMatch for a Protein, null if it doesn't exist
+ */
+ProteinMatch* ProteinMatchCollection::getProteinMatch(
+  const string& id ///< id of the protein
+  ) {
+  map<string, ProteinMatch*>::iterator iter = protein_match_map_.find(id);
+  return (iter != protein_match_map_.end()) ? iter->second : NULL;
+}
+
+/**
+ * \returns the PeptideMatch for the sequence, null if it doesn't exist.
+ */
+PeptideMatch* ProteinMatchCollection::getPeptideMatch(
+  MODIFIED_AA_T* mod_seq ///< Modified Sequence to find
+  ) {
+  map<MODIFIED_AA_T*, PeptideMatch*, cmpSeq>::iterator iter = peptide_match_map_.find(mod_seq);
+  return (iter != peptide_match_map_.end()) ? iter->second : NULL;
+}
+
+
+
+/**
+ * Helper method that adds a Crux match to the ProteinCollection,
+ * creating the SpectrumMatch, PeptideMatch, and ProteinMatch objects.
+ */
+void ProteinMatchCollection::addMatch(
+  MatchCollection* match_collection, ///< Collection from where the match came from
+  Match* match ///< Match to add
+  ){
+
+  //create a spectrum match.
+  Spectrum* spectrum = match->getSpectrum();
+  SpectrumZState z_state = match->getZState();
+  SpectrumMatch* spectrum_match = new SpectrumMatch(spectrum);
+  spectrum_match->setFileIndex(match->getFileIndex());
+  spectrum_match->setZState(z_state);
+  spectrum_matches_.push_back(spectrum_match);
+  
+  pair<int, int> scan_charge = make_pair(spectrum->getFirstScan(), z_state.getCharge());
+
+  if (match->getLnExperimentSize() >= 0 &&
+      spectrum_counts_.find(scan_charge) == spectrum_counts_.end()) {
+    spectrum_counts_[scan_charge] = floor(exp(match->getLnExperimentSize()) + 0.5);
+  }
+
+  Peptide* peptide = match->getPeptide();
+  PeptideMatch* peptide_match = getPeptideMatch(peptide);
+  
+  //add the spectrum match.
+  peptide_match->addSpectrumMatch(spectrum_match);
+
+  for (int score_idx = (int)SP;
+       score_idx < (int)NUMBER_SCORER_TYPES;
+       score_idx++) {
+
+    SCORER_TYPE_T score_type = (SCORER_TYPE_T)score_idx;
+    if (match_collection->getScoredType(score_type)) {
+      peptide_match->setScore(score_type, match->getScore(score_type));
+      peptide_match->setRank(score_type, match->getRank(score_type));
+      spectrum_match->setScore(score_type, match->getScore(score_type));
+      spectrum_match->setRank(score_type, match->getRank(score_type));
+    }
+  }
+
+  for (PeptideSrcIterator src_iter = peptide->getPeptideSrcBegin();
+       src_iter != peptide->getPeptideSrcEnd();
+       ++src_iter) {
+    PeptideSrc* src = *src_iter;
+    Protein* protein = src->getParentProtein();
+    ProteinMatch* protein_match = getProteinMatch(protein);
+    protein_match->addPeptideMatch(peptide_match);
+    peptide_match->addProteinMatch(protein_match, src);
+  }
+}
+
+/**
+ * Helper method that adds a Crux match to the ProteinMatchCollection,
+ * Adding all SpectrumMatch, PeptideMatch, and ProteinMatches
+ */
+void ProteinMatchCollection::addMatches(
+  MatchCollection* match_collection ///< collection to add
+  ) {
+
+  carp(CARP_DEBUG, "Adding %d matches to ProteinMatchCollection",
+       match_collection->getMatchTotal());
+  distinct_matches_ = match_collection->getHasDistinctMatches();
+
+  MatchIterator match_iter(match_collection);
+  while(match_iter.hasNext()) {
+    addMatch(match_collection, match_iter.next());
+  }
+
+}
+
+/**
+ * Get the matches/spectrum as a map, where the key is <scan, chage>
+ */
+const map<pair<int, int>, int>& ProteinMatchCollection::getMatchesSpectrum() {
+  return spectrum_counts_;
+}
+
+
+/**                                                                                                                                                                                                      
+ * \returns whether matches are distinct are not                                                                                                                                                         
+ */
+bool ProteinMatchCollection::hasDistinctMatches() {
+  return distinct_matches_;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/ProteinMatchCollection.h b/src/model/ProteinMatchCollection.h
new file mode 100644
index 0000000..af5a0c9
--- /dev/null
+++ b/src/model/ProteinMatchCollection.h
@@ -0,0 +1,161 @@
+/**
+ * \file ProteinMatchCollection.h
+ * $Revision: 1.00 $
+ * \brief Object for holding a collection of ProteinMatches, PeptideMatches, and SpectrumMatches.
+ ************************************************************************************************/
+#ifndef PROTEINMATCHCOLLECTION_H_
+#define PROTEINMATCHCOLLECTION_H_
+#include "PeptideMatch.h"
+#include "ProteinMatch.h"
+#include "match_objects.h"
+
+#include <deque>
+#include <set>
+#include <string>
+
+class ProteinMatchCollection {
+
+ protected:
+
+  struct cmpSeq {
+    bool operator() (const MODIFIED_AA_T* lhs, const MODIFIED_AA_T* rhs) const {
+      size_t idx = -1;
+      MODIFIED_AA_T lhs_aa, rhs_aa;
+      do {
+        ++idx;
+        lhs_aa = lhs[idx];
+        rhs_aa = rhs[idx];
+        if (lhs_aa != rhs_aa) {
+          return lhs_aa < rhs_aa;
+        }
+      } while (lhs_aa != MOD_SEQ_NULL && rhs_aa != MOD_SEQ_NULL);
+      return rhs_aa != MOD_SEQ_NULL;
+    }
+  };
+
+  std::map<std::string, ProteinMatch*> protein_match_map_;
+  std::map<MODIFIED_AA_T*, PeptideMatch*, cmpSeq> peptide_match_map_;
+  std::deque<ProteinMatch*> protein_matches_; ///< All protein matches
+  std::deque<PeptideMatch*> peptide_matches_; ///< All peptide matches
+  std::deque<SpectrumMatch*> spectrum_matches_; ///< All spectrum matches
+
+  std::map<std::pair<int, int>, int> spectrum_counts_; ///< matches/spectrum
+  bool distinct_matches_; ///< are matches distinct?
+ public:
+
+  /**
+   * \returns a blank ProteinMatchCollection
+   */
+  ProteinMatchCollection();
+
+  /**
+   * \returns a ProteinMatchCollection using a MatchCollection
+   * TODO - remove this later
+   */
+  ProteinMatchCollection(
+    MatchCollection* match_collection ///< matches to add
+  );
+  
+  /**
+   * Default destructor
+   */
+  virtual~ ProteinMatchCollection();
+
+  /**
+   * \returns the begin iterator for the ProteinMatch objects
+   */
+  ProteinMatchIterator proteinMatchBegin();
+
+  /**
+   * \returns the end iterator for the ProteinMatch objects
+   */
+  ProteinMatchIterator proteinMatchEnd();
+
+  /**
+   * \returns the begin iterator for the PeptideMatch objects
+   */
+  PeptideMatchIterator peptideMatchBegin();
+  
+  /**
+   * \returns the end iterator for all of the PeptideMatch objects
+   */
+  PeptideMatchIterator peptideMatchEnd();
+
+  /**
+   * \returns the begin iterator for all of the SpectrumMatch objects
+   */
+  SpectrumMatchIterator spectrumMatchBegin();
+
+  /**
+   * \returns the end iterator for all of the SpectrumMatch objects
+   */
+  SpectrumMatchIterator spectrumMatchEnd();
+
+  /**
+   * \returns the ProteinMatch for a Protein, creates a new
+   * one if it is not found and create is true
+   */  
+  ProteinMatch* getProteinMatch(
+    Crux::Protein* protein,  ///< Protein for which to find the protein match
+    bool create = true ///< Create the ProteinMatch if it doesn't exist
+  );
+
+  /**
+   * \returns the ProteinMatch for a Protein, null if it doesn't exist
+   */
+  ProteinMatch* getProteinMatch(
+    const std::string& id ///< id of the protein
+  );
+
+  /**
+   * \returns a PeptideMatch for a Peptide object, creating it
+   * if it doesn't exist and create is true
+   */
+  PeptideMatch* getPeptideMatch(
+    Crux::Peptide* peptide,  ///< peptide to find  
+    bool create=true ///< create if it doesn't exist?
+  );
+
+  /**
+   * \returns the PeptideMatch for the sequence, null if it doesn't exist
+   */
+  PeptideMatch* getPeptideMatch(
+    MODIFIED_AA_T* mod_seq ///< modified sequence to find
+    );
+
+  /**
+   * Helper method that adds a Crux match to the ProteinCollection,
+   * creating the SpectrumMatch, PeptideMatch, and ProteinMatch objects.
+   */
+  void addMatch(
+    MatchCollection* match_collection, ///<Collection from where the match came from
+    Crux::Match* match ///< Match to add
+  );
+
+  /**
+   * Helper method that adds a Crux match to the ProteinMatchCollection,
+   * Adding all SpectrumMatch, PeptideMatch, and ProteinMatch objects.
+   */
+  void addMatches(MatchCollection* match_collection);
+
+  /**
+   * Get the matches/spectrum as a map, where the key is <scan, charge>
+   */
+  const std::map<std::pair<int, int>, int>& getMatchesSpectrum();
+  
+  /**
+   * \returns whether matches are distinct are not
+   */
+  bool hasDistinctMatches();
+
+};
+
+#endif // PROTEINMATCHCOLLECTION_H
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/model/ProteinPeptideIterator.cpp b/src/model/ProteinPeptideIterator.cpp
new file mode 100644
index 0000000..5a83229
--- /dev/null
+++ b/src/model/ProteinPeptideIterator.cpp
@@ -0,0 +1,525 @@
+/**
+ * \file ProteinPeptideIterator.cpp
+ * $Revision: 0.0 $
+ */
+
+#include "ProteinPeptideIterator.h"
+#include "util/GlobalParams.h"
+#include "util/Params.h"
+
+using namespace std;
+using namespace Crux;
+
+/*
+ * Takes a cumulative distribution of peptide masses (the mass_array) and
+ * the start index and end index and returns a peptide mass
+ */
+FLOAT_T ProteinPeptideIterator::calculateSubsequenceMass (
+    double* mass_array,
+    int start_idx,
+    int cur_length
+  ){
+
+  FLOAT_T mass_h2o = MASS_H2O_AVERAGE;
+  if (GlobalParams::getIsotopicMass() == MONO) {
+    mass_h2o = MASS_H2O_MONO;
+  }
+
+  // carp(CARP_DETAILED_DEBUG, "mass start = %i", start_idx);
+  int end_idx = start_idx + cur_length;
+  // carp(CARP_DETAILED_DEBUG, "mass end = %i", end_idx);
+  FLOAT_T peptide_mass = mass_array[end_idx] - mass_array[start_idx] + mass_h2o;
+
+  return peptide_mass;
+}
+
+/**
+ * \brief Decide if a residue is in an inclusion list or is not in an
+ * exclusion list. 
+ *
+ * For use with the user-specified enzyme digestion.  Takes an amino
+ * acid, a list of amino acids, and a flag for if it is an inclusion
+ * list or an exclusion list.  A cleavage can happen before/after the
+ * given residue if it is either in the inclusion list or is not in
+ * the exculsion list.
+ * \returns true if the residue is in the inclusion list or not in the
+ * exclusion list.
+ */
+bool ProteinPeptideIterator::isResidueLegal(char aa, 
+                           char* aa_list, 
+                           int list_size, 
+                           bool for_inclusion){
+
+  // The logic for returning for_inclusion:
+  // For an inclusion list (true), once we find the aa it passes (true)
+  // For an exclusion list (false), once we find the aa, it fails (false)
+  int idx=0;
+  for(idx=0; idx < list_size; idx++){
+    if( aa == aa_list[idx] ){ return for_inclusion; }
+  }
+  // or if we got to the end of the list and didn't find a match
+  // for inclusion, it fails (!true)
+  // for exclusion, it passes (!false)
+  return ! for_inclusion;
+}
+
+/**
+ * Compares the first and second amino acids in the given sequence to
+ * see if they conform to the cleavage rules of the given enzyme.  For
+ * NO_ENZYME, always returns true.
+ *
+ * \returns true if this is a valid cleavage position for the given enzyme.
+ */
+bool ProteinPeptideIterator::validCleavagePosition(
+   const char* sequence,
+   ENZYME_T enzyme
+){
+
+  switch(enzyme){
+
+  case TRYPSIN:
+    return (sequence[0] == 'K' || sequence[0] == 'R') && sequence[1] != 'P';
+  //trypsin/p k or r 
+  case TRYPSINP:
+    return sequence[0] == 'K' || sequence[0] == 'R';
+  case ELASTASE:
+    return (sequence[0] == 'A' || sequence[0] == 'L' ||
+            sequence[0] == 'I' || sequence[0] == 'V') && sequence[1] != 'P';
+  case CLOSTRIPAIN:
+    return sequence[0] == 'R';
+  case CYANOGEN_BROMIDE:
+    return sequence[0] == 'M';
+  case IODOSOBENZOATE:
+    return sequence[0] == 'W';
+  case PROLINE_ENDOPEPTIDASE:
+    return sequence[0] == 'P';
+  case STAPH_PROTEASE:
+    return sequence[0] == 'E';
+  case ASPN:
+    return sequence[1] == 'D';
+  case LYSC:
+    return sequence[0] == 'K' && sequence[1] != 'P';
+  case LYSN:
+    return sequence[1] == 'K';
+  case ARGC:
+    return sequence[0] == 'R' && sequence [1] != 'P';
+  case GLUC:
+    return (sequence[0] == 'D' || sequence[0] == 'E') && sequence[1] != 'P';
+  case PEPSINA:
+    return (sequence[0] == 'F' || sequence[0] == 'L') && sequence[1] != 'P';
+  case CHYMOTRYPSIN:
+    return (sequence[0] == 'F' || sequence[0] == 'L' ||
+            sequence[0] == 'W' || sequence[0] == 'Y') && sequence[1] != 'P';
+  case ELASTASE_TRYPSIN_CHYMOTRYPSIN:
+    return (sequence[0] == 'A' || sequence[0] == 'L' ||
+            sequence[0] == 'I' || sequence[0] == 'V' ||
+            sequence[0] == 'K' || sequence[0] == 'R' ||
+            sequence[0] == 'W' || sequence[0] == 'F' ||
+            sequence[0] == 'Y' ) && sequence[1] != 'P';
+  case CUSTOM_ENZYME:
+    //carp(CARP_FATAL, "The custom enzyme is not yet implmented.");
+
+    return ( isResidueLegal(sequence[0], 
+                              pre_cleavage_list,
+                              pre_list_size, 
+                              pre_for_inclusion)
+             && 
+             isResidueLegal(sequence[1], 
+                              post_cleavage_list,
+                              post_list_size, 
+                              post_for_inclusion) );
+    break;
+
+  case NO_ENZYME:
+    return true;
+    break;
+
+  case INVALID_ENZYME:
+  case NUMBER_ENZYME_TYPES:
+    carp(CARP_FATAL, "Cannot generate peptides with invalid enzyme: %d", enzyme);
+    break;
+
+  }// end switch
+
+  return false;
+}
+
+/**
+ * \brief Adds peptides to the iterator based on our constraint and
+ * the given possible cleavage positions.
+ * 
+ * The allowed cleavages on either end of the peptide are specified
+ * separately so that the ends can obey different cleavage rules
+ * (e.g. tryptic and non).  Use the member variable
+ * cumulative_cleavages_ to keep track of skipped enzyme cleavage
+ * sites since the cterm allowed cleavages may be non-tryptic for a partially
+ * tryptic search.  Add a peptide to the iterator for each
+ * pair of n- and c-term cleavages that obey all of the peptide
+ * constraints: correct length, mass, and number of internal cleavage
+ * positions.
+ * A small inconsistency: 
+ *  Allowed cleavages start at 0, while the output cleavages start at 1.
+ */
+void ProteinPeptideIterator::selectPeptides(
+    int* nterm_allowed_cleavages, 
+    int  nterm_num_cleavages, 
+    int* cterm_allowed_cleavages, 
+    int  cterm_num_cleavages, 
+    int  int_num_skip_cleavages){
+
+  // to avoid checking a lot of C-term before our current N-term cleavage
+  int previous_cterm_cleavage_start= 0;
+
+  PeptideConstraint* constraint = peptide_constraint_;
+  int nterm_idx, cterm_idx;
+
+  // for each possible n-term (start) position...
+  for (nterm_idx=0; nterm_idx < nterm_num_cleavages; nterm_idx++){
+
+    // check all possible c-term (end) positions
+
+    int next_cterm_cleavage_start = previous_cterm_cleavage_start;
+    bool no_new_cterm_cleavage_start = true;
+    for (cterm_idx = previous_cterm_cleavage_start; 
+         cterm_idx < cterm_num_cleavages; cterm_idx++){
+
+      if ((*cumulative_cleavages_)[cterm_allowed_cleavages[cterm_idx]-1] - \
+          (*cumulative_cleavages_)[nterm_allowed_cleavages[nterm_idx]]  \
+          > int_num_skip_cleavages) {
+        break;
+      }
+      if (cterm_allowed_cleavages[cterm_idx] 
+          <= nterm_allowed_cleavages[nterm_idx]){
+        continue;
+      }
+      
+      // check our length constraint
+      int length = 
+        cterm_allowed_cleavages[cterm_idx] - nterm_allowed_cleavages[nterm_idx];
+      
+      // if too short, try next cterm position
+      if (length < constraint->getMinLength()){
+        continue;
+        // if too long, go to next nterm (start) position
+      } else if (length > constraint->getMaxLength()){
+        break;
+      } else if (no_new_cterm_cleavage_start){
+        next_cterm_cleavage_start = cterm_idx;
+        no_new_cterm_cleavage_start = false;
+      }
+     
+      // check our mass constraint
+      FLOAT_T peptide_mass = calculateSubsequenceMass(mass_array_, 
+          nterm_allowed_cleavages[nterm_idx], length);
+
+      // TODO: if too small, try next cterm (end), if too large, try
+      // next nterm (start), else in range so add peptide
+      if ((constraint->getMinMass() <= peptide_mass) && 
+          (peptide_mass <= constraint->getMaxMass())){ 
+
+        // we have found a peptide
+        nterm_cleavage_positions_->push_back(nterm_allowed_cleavages[nterm_idx] + 1);
+
+        peptide_lengths_->push_back(length);
+        peptide_masses_->push_back(peptide_mass);
+        carp(CARP_DETAILED_DEBUG, 
+            "New pep: %i (%i)", nterm_allowed_cleavages[nterm_idx], length);
+
+        num_cleavages_++;
+      }
+    }
+    previous_cterm_cleavage_start = next_cterm_cleavage_start;
+
+  }
+}
+
+/**
+ * Creates the data structures in the protein_peptide_iterator object necessary
+ * for creating peptide objects.
+ * - mass_array - cumulative distribution of masses. used to determine 
+ *     the mass of any peptide subsequence.
+ * - nterm_cleavage_positions - the nterm cleavage positions of the 
+ *     peptides that satisfy the protein_peptide_iterator contraints
+ * - peptide_lengths - the lengths of the peptides that satisfy the constraints
+ * - cumulative_cleavages - cumulative distribution of cleavage positions
+ *    used to determine if a cleavage location has been skipped
+ */
+void ProteinPeptideIterator::prepare()
+{
+  prepareMc(num_mis_cleavage_);
+}
+
+void ProteinPeptideIterator::prepareMc(
+    int missed_cleavages)
+{
+  Protein* protein = protein_;
+  MASS_TYPE_T mass_type = peptide_constraint_->getMassType();
+  double* mass_array = (double*)mycalloc(protein->getLength()+1, sizeof(double));
+
+  ENZYME_T enzyme = peptide_constraint_->getEnzyme();
+
+  // initialize mass matrix and enzyme cleavage positions
+  int* cleavage_positions = (int*) mycalloc(protein->getLength()+1, sizeof(int));
+  int* non_cleavage_positions = (int*)mycalloc(protein->getLength()+1, sizeof(int));
+  int* all_positions = (int*) mycalloc(protein->getLength()+1, sizeof(int));
+
+  // initialize first value in all array except non_cleavage_positions
+  unsigned int start_idx = 0;
+  mass_array[start_idx] = 0.0;
+  int cleavage_position_idx = 0;
+  int non_cleavage_position_idx = 0;
+  cleavage_positions[cleavage_position_idx++] = 0;
+
+  // calculate our cleavage positions and masses
+  for(start_idx = 1; start_idx < protein->getLength()+1; start_idx++){
+    int sequence_idx = start_idx - 1;
+    char amino_acid = protein->getSequencePointer()[sequence_idx];
+    mass_array[start_idx] = mass_array[start_idx-1] + 
+      get_mass_amino_acid(amino_acid, mass_type);
+
+    if( amino_acid == 'B' || amino_acid == 'X' || amino_acid == 'Z' ){
+      carp_once(CARP_WARNING, 
+                "Ignoring peptides with ambiguous amino acids (B, X, Z).");
+    } 
+
+    // increment cumulative cleavages before we check if current position
+    // is a cleavage site because cleavages come *after* the current amino acid
+    cumulative_cleavages_->push_back(cleavage_position_idx);
+
+    //if (valid_cleavage_position(protein->sequence + sequence_idx)){ 
+    if (validCleavagePosition(protein->getSequencePointer() + sequence_idx, enzyme)){ 
+      cleavage_positions[cleavage_position_idx++] = sequence_idx + 1;
+    } else {
+      non_cleavage_positions[non_cleavage_position_idx++] = sequence_idx + 1;
+    }
+
+    all_positions[sequence_idx] = sequence_idx;
+  }
+
+  // put in the implicit cleavage at end of protein
+  if (cleavage_positions[cleavage_position_idx-1] != (int)protein->getLength()){
+    cleavage_positions[cleavage_position_idx++] = protein->getLength(); 
+  }
+
+  all_positions[protein->getLength()] = (int)protein->getLength();
+
+  int num_cleavage_positions = cleavage_position_idx;
+  int num_non_cleavage_positions = non_cleavage_position_idx;
+  if (mass_array_ != NULL) {
+    free(mass_array_);
+  }
+  mass_array_ = mass_array;
+
+  carp(CARP_DETAILED_DEBUG, "num_cleavage_positions = %i", num_cleavage_positions);
+
+  // now determine the cleavage positions that actually match our constraints
+
+  DIGEST_T digestion = 
+    peptide_constraint_->getDigest();
+
+  switch (digestion){
+
+  case FULL_DIGEST:
+      this->selectPeptides(
+        cleavage_positions, num_cleavage_positions-1,
+        cleavage_positions+1, num_cleavage_positions-1, 
+        missed_cleavages);
+
+      break;
+
+  case PARTIAL_DIGEST:
+      // add the C-term tryptic cleavage positions.
+      this->selectPeptides(
+        all_positions, protein->getLength(),
+        cleavage_positions+1, num_cleavage_positions-1, 
+        missed_cleavages);
+
+      // add the N-term tryptic cleavage positions.
+      // no +1 below for non_cleavage_positions below 
+      // because it does not include sequence beginning. it is *special*
+      this->selectPeptides(
+        cleavage_positions, num_cleavage_positions-1,
+        non_cleavage_positions, num_non_cleavage_positions-1,
+        missed_cleavages);
+
+      break;
+
+  case NON_SPECIFIC_DIGEST:
+      this->selectPeptides(
+        all_positions, protein->getLength(),
+        all_positions+1, protein->getLength(), // len-1?
+        500); // for unspecific ends, allow internal cleavage sites
+      break;
+
+  case INVALID_DIGEST:
+  case NUMBER_DIGEST_TYPES:
+    carp(CARP_FATAL, "Invalid digestion type in protein peptide iterator.");
+  }
+
+/*
+  int idx;
+  for (idx=0; idx < iterator->num_cleavages; idx++){
+    carp(CARP_DETAILED_DEBUG, "%i->%i", 
+         iterator->nterm_cleavage_positions[idx], 
+         //iterator->peptide_lengths[idx], 
+         //iterator->peptide_lengths[idx], 
+       iterator->protein->sequence[iterator->nterm_cleavage_positions[idx]-1]);
+  }
+*/
+  if (num_cleavages_ > 0){
+    has_next_ = true;
+  } else { 
+    has_next_ = false;
+  }
+
+  free(cleavage_positions);
+  free(non_cleavage_positions);
+  free(all_positions);
+}
+
+/**
+ * \brief Estimate the maximum number of peptides a protein can
+ * produce.  Counts the number of subsequences of length
+ * min_seq_length, min_seq_length + 1, ..., max_seq_length that can be
+ * formed from a protein of the given length.  No enzyme specificity
+ * assumed.  
+ */
+unsigned int ProteinPeptideIterator::countMaxPeptides(
+ unsigned int protein_length,   ///< length of protein
+ unsigned int min_seq_length,   ///< min peptide length
+ unsigned int max_seq_length)  ///< max peptide length
+{
+  if( max_seq_length > protein_length ){
+    max_seq_length = protein_length;
+  }
+
+  unsigned int total_peptides = 0;
+  for(unsigned int len = min_seq_length; len <= max_seq_length; len++){
+    total_peptides += protein_length + 1 - len;
+  }
+  return total_peptides;
+}
+
+/**
+ * Instantiates a new peptide_iterator from a protein.
+ * \returns a PROTEIN_PEPTIDE_ITERATOR_T object.
+ * assumes that the protein is heavy
+ */
+ProteinPeptideIterator::ProteinPeptideIterator(
+  Protein* protein, ///< the protein's peptide to iterate -in
+  PeptideConstraint* peptide_constraint ///< the peptide constraints -in
+  )
+{
+
+  // initialize iterator
+  protein_ = NULL;
+  cur_start_ = 0;
+  cur_length_ = 1;
+  peptide_idx_ = 0;
+  peptide_constraint_ = NULL;
+  mass_array_ = NULL;
+  current_cleavage_idx_ = 0;
+  has_next_ = false;
+
+  peptide_idx_ = 0;
+  peptide_constraint_ 
+    = PeptideConstraint::copyPtr(peptide_constraint);
+  cur_start_ = 0; 
+  cur_length_ = 1;  
+  num_mis_cleavage_ 
+    = peptide_constraint_->getNumMisCleavage();
+  protein_ = protein;
+
+  nterm_cleavage_positions_ = new vector<int>();
+  peptide_lengths_ = new vector<int>();
+  peptide_masses_ = new vector<FLOAT_T>();
+  cumulative_cleavages_ = new vector<int>();
+
+  // estimate array size and reserve space to avoid resizing vector
+  int max_peptides = countMaxPeptides(protein->getLength(), 
+                                      GlobalParams::getMinLength(),
+                                      GlobalParams::getMaxLength());
+  nterm_cleavage_positions_->reserve(max_peptides); 
+  peptide_lengths_->reserve(max_peptides);
+  peptide_masses_->reserve(max_peptides);
+  cumulative_cleavages_->reserve(max_peptides);
+  num_cleavages_ = 0;
+
+  // prepare the iterator data structures
+  prepare();
+}
+
+
+/**
+ * Frees an allocated peptide_iterator object.
+ */
+ProteinPeptideIterator::~ProteinPeptideIterator() 
+{
+  PeptideConstraint::free(peptide_constraint_);
+  free(mass_array_); 
+  delete nterm_cleavage_positions_; 
+  delete peptide_lengths_; 
+  delete peptide_masses_; 
+  delete cumulative_cleavages_; 
+}
+
+/**
+ * The basic iterator functions.
+ * \returns true if there are additional peptides, false if not.
+ */
+bool ProteinPeptideIterator::hasNext()
+{
+  return has_next_;
+}
+
+/**
+ * \returns The next peptide in the protein, in an unspecified order
+ * the Peptide is new heap allocated object, user must free it
+ */
+Crux::Peptide* ProteinPeptideIterator::next()
+{
+  if( !has_next_){
+    carp(CARP_DEBUG, "Returning null");
+    return NULL;
+  }
+
+  int cleavage_idx = current_cleavage_idx_;
+  int current_start = (*nterm_cleavage_positions_)[cleavage_idx];
+  int current_length = (*peptide_lengths_)[cleavage_idx];
+
+  // create new peptide
+  Peptide* peptide = new Peptide(current_length, protein_, current_start);
+  // update position of iterator
+  ++current_cleavage_idx_;
+
+  // update has_next field
+  if (current_cleavage_idx_ == num_cleavages_){
+    has_next_ = false;
+  } else {
+    has_next_ = true;
+  }
+  return peptide;
+}
+
+/**
+ *\returns the protein that the iterator was created on
+ */
+Protein* ProteinPeptideIterator::getProtein()
+{
+  return protein_;
+}
+
+/**
+ * \returns The total number of peptides in this protein.
+ */
+int ProteinPeptideIterator::getTotalPeptides(){
+  return num_cleavages_;
+}
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/ProteinPeptideIterator.h b/src/model/ProteinPeptideIterator.h
new file mode 100644
index 0000000..594ad44
--- /dev/null
+++ b/src/model/ProteinPeptideIterator.h
@@ -0,0 +1,180 @@
+/**
+ * \file ProteinPeptideIterator.h 
+ * $Revision: 1.25 $
+ * \brief Object to iterate over the peptides within a protein in an
+ * unspecified order. The peptides should satisfy the constraints specified
+ * in the peptide_constraint object.
+ *****************************************************************************/
+#ifndef PROTEINPEPTIDEITERATOR_H
+#define PROTEINPEPTIDEITERATOR_H
+
+#include "Protein.h"
+#include "Peptide.h"
+
+#include <iterator>
+#include <vector>
+
+class ProteinPeptideIterator {
+
+ protected:
+  Crux::Protein* protein_; ///< The protein whose peptides to iterate over. 
+  unsigned short int cur_start_; ///< Start in protein of the current peptide.
+  unsigned short int cur_length_; ///< The length of the current peptide.
+  unsigned int peptide_idx_; ///< The index of the current peptide.
+  PeptideConstraint* peptide_constraint_; ///< peptide type to iterate over.
+  double* mass_array_; ///< stores all the peptides' masses
+  std::vector<int>* nterm_cleavage_positions_; ///< nterm cleavages that satisfy 
+                                        ///< constraint. 1st aa is 1.
+  std::vector<int>* peptide_lengths_; ///< all the lengths of valid peptides
+  std::vector<FLOAT_T>* peptide_masses_; ///< all the masses of valid peptides
+  std::vector<int>* cumulative_cleavages_; ///< cumulative number of cleavages so far
+  int current_cleavage_idx_; /// where are we in the cleavage positions?
+  int num_cleavages_; /// how many cleavage positions?
+
+  bool has_next_; ///< is there a next? 
+  int num_mis_cleavage_; ///< The maximum mis cleavage of the peptide
+
+  /*
+   * Takes a cumulative distribution of peptide masses (the mass_array) and
+   * the start index and end index and returns a peptide mass
+   */
+  FLOAT_T calculateSubsequenceMass(
+    double* mass_array,
+    int start_idx,
+    int cur_length
+  );
+
+  /**
+   * \brief Decide if a residue is in an inclusion list or is not in an
+   * exclusion list. 
+   *
+   * For use with the user-specified enzyme digestion.  Takes an amino
+   * acid, a list of amino acids, and a flag for if it is an inclusion
+   * list or an exclusion list.  A cleavage can happen before/after the
+   * given residue if it is either in the inclusion list or is not in
+   * the exculsion list.
+   * \returns TRUE if the residue is in the inclusion list or not in the
+   * exclusion list.
+   */
+  static bool isResidueLegal(
+    char aa, 
+    char* aa_list, 
+    int list_size, 
+    bool for_inclusion
+  );
+
+  /**
+   * \brief Adds cleavages to the protein peptide iterator that obey iterator
+   * constraint.
+   *
+   * Uses the allowed cleavages arrays, and whether skipped cleavages
+   * are allowed. 
+   * A small inconsistency: 
+   *  Allowed cleavages start at 0, while the output cleavages start at 1.
+   */
+  void selectPeptides(
+    int* nterm_allowed_cleavages, 
+    int  nterm_num_cleavages, 
+    int* cterm_allowed_cleavages, 
+    int  cterm_num_cleavages, 
+    int  num_skip_cleavages);
+
+  /**
+   * Creates the data structures in the protein_peptide_iterator object necessary
+   * for creating peptide objects.
+   * - mass_array - cumulative distribution of masses. used to determine 
+   *     the mass of any peptide subsequence.
+   * - nterm_cleavage_positions - the nterm cleavage positions of the 
+   *     peptides that satisfy the protein_peptide_iterator contraints
+   * - peptide_lengths - the lengths of the peptides that satisfy the constraints
+   * - cumulative_cleavages - cumulative distribution of cleavage positions
+   *    used to determine if a cleavage location has been skipped
+   */
+  void prepare();
+
+  /**
+   * \brief Estimate the maximum number of peptides a protein can
+   * produce.  Counts the number of subsequences of length
+   * min_seq_length, min_seq_length + 1, ..., max_seq_length that can be
+   * formed from a protein of the given length.  No enzyme specificity
+   * assumed.  
+   */
+  unsigned int countMaxPeptides(
+    unsigned int protein_length,   ///< length of protein
+    unsigned int min_seq_length,   ///< min peptide length
+    unsigned int max_seq_length);  ///< max peptide length
+
+ public:
+  /**
+   * Instantiates a new peptide_iterator from a peptide.
+   * \returns a PROTEIN_PEPTIDE_ITERATOR_T object.
+   */
+  ProteinPeptideIterator(
+    Crux::Protein* protein,
+    PeptideConstraint* peptide_constraint
+  );
+
+  /**
+   * Frees an allocated peptide_iterator object.
+   */
+  ~ProteinPeptideIterator();
+
+  /**
+   * The basic iterator functions.
+   * \returns TRUE if there are additional peptides to iterate over, FALSE if not.
+   */
+  bool hasNext();
+
+  /**
+   * \returns The next peptide in the protein, in an unspecified order
+   */
+  Crux::Peptide* next();
+
+  /**
+   *\returns the protein that the iterator was created on
+   */
+  Crux::Protein* getProtein();
+
+  /**
+   * \returns The total number of peptides in this protein.
+   */
+  int getTotalPeptides();
+
+  /**
+   * Creates the data structures in the protein_peptide_iterator object necessary
+   * for creating peptide objects.
+   * - mass_array - cumulative distribution of masses. used to determine 
+   *     the mass of any peptide subsequence.
+   * - nterm_cleavage_positions - the nterm cleavage positions of the 
+   *     peptides that satisfy the protein_peptide_iterator contraints
+   * - peptide_lengths - the lengths of the peptides that satisfy the constraints
+   * - cumulative_cleavages - cumulative distribution of cleavage positions
+   *    used to determine if a cleavage location has been skipped
+   */
+  void prepareMc(
+    int missed_cleavages
+  );
+
+  /**
+   * Compares the first and second amino acids in the given sequence to
+   * see if they conform to the cleavage rules of the given enzyme.  For
+   * NO_ENZYME, always returns TRUE.
+   *
+   * \returns TRUE if this is a valid cleavage position for the given enzyme.
+   */
+  static bool validCleavagePosition(
+    const char* sequence,
+    ENZYME_T enzyme
+  );
+
+};
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
+
+#endif
diff --git a/src/model/Scorer.cpp b/src/model/Scorer.cpp
new file mode 100644
index 0000000..d4f625b
--- /dev/null
+++ b/src/model/Scorer.cpp
@@ -0,0 +1,1682 @@
+/*************************************************************************//**
+ * \file Scorer.cpp
+ * AUTHOR: Chris Park
+ * CREATE DATE: 9 Oct 2006
+ * \brief object to score spectrum versus spectrum or spectrum
+ * versus ion_series 
+ ****************************************************************************/
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#ifndef _MSC_VER
+#include <dirent.h>
+#include <unistd.h>
+#endif
+#include <ctype.h>
+#include <sys/stat.h>
+#ifdef _MSC_VER
+#include "util/windirent.h"
+#endif
+#include "model/IonConstraint.h"
+#include "model/IonFilteredIterator.h"
+#include "model/IonSeries.h"
+#include "util/crux-utils.h"
+#include "util/GlobalParams.h"
+#include "util/Params.h"
+#include "model/Spectrum.h"
+#include "Scorer.h"
+#include "parameter.h"
+
+using namespace Crux;
+
+/**
+ * Maximum range for cross correlation offset.
+ */
+static const int MAX_XCORR_OFFSET = 75;
+
+// The following two constants are hardware dependent.
+// These values should be good for double precision floating point
+// numbers compatible with the IEEE 754 standard.
+
+/**
+* Constant for EVD p_value calculation
+*/
+static const FLOAT_T DBL_EPSILON_ = 2.2204460492503131e-16;
+/**
+* Constant for EVD p_value calculation
+*/
+static const int DBL_MAX_10_EXP_ = 308;
+
+/**
+ * Cut-off below which the simple Bonferroni calculation can be used.
+ */
+static const FLOAT_T BONFERRONI_CUT_OFF_P = 0.0001;
+/**
+ * Cut-off below which the simple Bonferroni calculation can be used.
+ */
+static const FLOAT_T BONFERRONI_CUT_OFF_NP = 0.01;
+
+static const int GMTK_MAX_ION_FILES = 50;
+static const int GMTK_NUM_CHARGES = 2;
+static const int GMTK_NUM_BASE_IONS = 3;
+static const int GMTK_NUM_NEUTRAL_LOSS = 2;
+static const int GMTK_NUM_ION_SERIES =
+  GMTK_NUM_BASE_IONS * GMTK_NUM_CHARGES * (GMTK_NUM_NEUTRAL_LOSS + 1);
+static const int GMTK_NUM_PAIRED_ION_SERIES = 15;
+
+/**
+ * Relative peak height of b- and y-ions.
+ */
+static const int B_Y_HEIGHT = 50;
+/**
+ * Relative height of flanking peaks.
+ */
+static int FLANK_HEIGHT = 25;
+/**
+ * Relative height of neutral loss peaks.
+ */
+static const int LOSS_HEIGHT = 10;
+
+/**
+ * Number of regions into which the spectrum is divided for normalization.
+ */
+static const int NUM_REGIONS = 10;
+
+/**
+ * Maximum peak height within each region of the spectrum after normalizing.
+ */ 
+static const int MAX_PER_REGION = 50;
+
+
+int ion_counter=0;
+
+/**
+ * Initializes an empty scorer object
+ */
+void Scorer::init() {
+  type_ = (SCORER_TYPE_T)0;
+  sp_beta_ = 0.0;
+  sp_max_mz_ = 0.0;
+  sp_b_y_ion_matched_ = 0;
+  sp_b_y_ion_possible_ = 0;
+  sp_b_y_ion_fraction_matched_ = 0;
+  intensity_array_ = NULL;
+  initialized_ = false;
+  last_idx_ = 0;
+  bin_width_ = 0;
+  bin_offset_ = 0;
+  observed_ = NULL;
+  theoretical_ = NULL;
+}
+
+/**
+ *\returns An (empty) scorer object.
+ */
+Scorer::Scorer() {
+  init();
+}
+
+
+/**
+ * If not planning to use the default values, must parse the parameter file before.
+ * Instantiates a new scorer object from a filename. 
+ * \returns a new scorer object
+ */
+Scorer::Scorer(
+  SCORER_TYPE_T type ///< the type of scorer -in
+  )
+{
+  // initialize
+  init();
+  
+  // set score type
+  type_ = type;
+  
+  // set bin_width and bin_offset.
+  bin_width_ = Params::GetDouble("mz-bin-width");
+  bin_offset_ = Params::GetDouble("mz-bin-offset");
+
+  // set fields needed for each score type
+  if(type == SP){
+    //sp_beta_ = Params::GetDouble("beta");  TODO what happened to beta? SJM
+    sp_max_mz_ = Params::GetDouble("max-mz");
+    // allocate the intensity array
+    intensity_array_ = (FLOAT_T*)mycalloc(getMaxBin(), sizeof(FLOAT_T));
+    max_intensity_ = 0;
+    last_idx_ = 0;
+    // the scorer as not been initialized yet.
+    initialized_ = false;
+  }
+  else if(type == XCORR){
+    // scorer->sp_max_mz = Params::GetDouble("max-mz");
+    // scorer->observed = (FLOAT_T*)mycalloc((int)scorer->sp_max_mz, sizeof(FLOAT_T));
+    last_idx_ = 0;
+    // the scorer as not been initialized yet.
+    initialized_ = false;
+  }
+  else{
+    // the scorer as not been initialized yet.
+    initialized_ = false;
+  }
+
+  use_flanks_ = Params::GetBool("use-flanking-peaks");
+}
+
+/**
+ * Frees an allocated scorer object.
+ */
+Scorer::~Scorer() {
+  // score type SP?
+  if (intensity_array_ != NULL) {
+    free(intensity_array_);
+  }
+  if (observed_ != NULL) {
+    free(observed_);
+  }
+}
+
+
+/**
+ * normalize array so that maximum peak equals threshold
+ */
+void nomalize_intensity_array(
+  FLOAT_T* intensity_array, ///< the array to normalize -in/out
+  int array_size, ///< size of array -in
+  FLOAT_T max_intensity, ///< the maximum intensity in array -in
+  FLOAT_T threshold   ///< the threshold to which the peaks should be normalized -in
+  )
+{
+  int mz_idx = 0;
+
+  // return if max_intensity is 0
+  if(max_intensity < 0.00001){
+    return;
+  }
+
+  // normalize all peaks
+  for(; mz_idx < array_size; ++mz_idx){
+    intensity_array[mz_idx] 
+      = intensity_array[mz_idx] * threshold / max_intensity;
+  }
+}
+
+/**
+ * smooth all peaks in intensity array
+ * Replaces the original array with the newly smooothed array
+ */
+void Scorer::smoothPeaks() {
+
+  int idx = 2;
+  FLOAT_T* array = intensity_array_;
+
+  // create a new array, which will replace the original intensity array
+  FLOAT_T* new_array = (FLOAT_T*)mycalloc(getMaxBin(), sizeof(FLOAT_T));
+
+  if (type_ == SP){
+    // iterate over all peaks
+    for(; idx < getMaxBin()-2; ++idx){
+      // smooooth
+      new_array[idx] = (array[idx-2] + 
+                        (4 * array[idx-1]) + 
+                        (6 * array[idx]) + 
+                        (4 * array[idx+1]) + array[idx+2] ) / 16;
+
+      // set last idx in the array
+      if(last_idx_ < idx && new_array[idx] == 0){
+        last_idx_ = idx -1;
+        break;
+      }
+    }
+  }
+  free(intensity_array_);
+  intensity_array_ = new_array;
+}
+
+/**
+ * get the mean of intensity in array within +/- 50 mz of the working peak
+ * \returns the mean +/- 50mz region
+ */
+FLOAT_T get_mean_from_array(
+  FLOAT_T* original_array, ///< the array to normalize -in
+  int array_size, ///< the size of array -in
+  int peak_idx,  ///< the peak indx in array -in
+  int* peak_count ///< pointer to peak count, store peak count here -out
+  )
+{
+  FLOAT_T total_intensity = 0;
+  int start_idx = peak_idx - 50;
+  int end_idx = peak_idx + 50;
+
+  // set upper bound
+  if(peak_idx + 50 >= array_size){
+    end_idx = array_size-1;
+  }
+  // set start index
+  if(peak_idx - 50 <= 0){
+    start_idx = 0;
+  }
+  
+  // sum up the intensities
+  for(; start_idx <= end_idx; ++start_idx){
+    // printf("%.2f\n", original_array[start_idx]);
+
+    ++*peak_count;
+    total_intensity += original_array[start_idx];
+  }
+  
+  // BUG! it should divide by 101 but Sequest uses 100
+  return (total_intensity / (*peak_count-1));
+}
+
+/**
+ * get the stdev of intensity in array within +/- 50 mz of the working peak
+ * \returns the stdev +/- 50mz region
+ */
+FLOAT_T get_stdev_from_array(
+  FLOAT_T* original_array, ///< the array to normalize -in
+  int array_size, ///< the size of array -in
+  int peak_idx,  ///< the peak indx in array -ina
+  FLOAT_T mean,     ///< the mean in the +/- 50 interval -in
+  int peak_count ///<  peak count -in
+  )
+{
+  FLOAT_T variance = 0;
+  int start_idx = peak_idx - 50;
+  int end_idx = peak_idx + 50;
+  FLOAT_T dev = 0;
+
+  // set upper bound
+  if(peak_idx + 50 >= array_size){
+    end_idx = array_size-1;
+  }
+  // set start index
+  if(peak_idx - 50 <= 0){
+    start_idx = 0;
+  }
+  
+  // sum up the intensities
+  for(; start_idx <= end_idx; ++start_idx){
+    // sum up all deviations squared
+    dev = original_array[start_idx] - mean;
+    variance += (dev*dev);
+  }
+  
+  // return the stdev
+  return sqrt(variance/peak_count);
+}
+
+/***
+ * zero and extract peaks
+ * extract peaks that are larger than mean + #step*stdev into new array
+ * zero out the peaks that have been extracted
+ * yes, the facter that a peak has removed will effect the fallowing peaks
+ */
+void Scorer::zeroPeakMeanStdev(
+  FLOAT_T* original_array, ///< the array to normalize -in/out
+  FLOAT_T* new_array, ///< the array to normalize -in/out                          
+  int step                ///< is this 1 or 2 step -in
+  )
+{
+  int peak_count = 0;
+  int idx = 0;
+  int array_size = getMaxBin();
+  FLOAT_T mean = 0;
+  FLOAT_T stdev = 0;
+
+  // iterate over all peaks
+  for(; idx < array_size; ++idx){
+    peak_count = 0;
+    // get mean
+    mean = get_mean_from_array(original_array, array_size, idx, &peak_count);
+    // get stdev
+    stdev = get_stdev_from_array(original_array, array_size, idx, mean, peak_count);
+    
+    // DEBUG
+    // carp(CARP_INFO, "zero idx: %d mean: %.8f, stdev: %.8f", idx, mean, stdev);
+    
+    // iterate over all positions and extract peaks
+    if(original_array[idx] > (mean + step*stdev)){
+      new_array[idx] = original_array[idx] - (mean - stdev);
+               
+      // DEBUG
+      // carp(CARP_INFO, "extract peak: %.2f at idx: %d", original_array[idx], idx);
+      
+      // reset the last idx
+      if(last_idx_ < idx){
+        last_idx_ = idx;
+      }
+      
+      // for only step 1,
+      if(step == 1){
+        // zero out original peak
+        original_array[idx] = 0;
+      }
+    }
+  }
+}
+
+/**
+ * \brief Zero and extract peaks
+ *
+ * Extract peaks that are larger than mean + #step*stdev into new
+ * array.  Zero out the peaks that have been extracted.  Repeat twice,
+ * than replace old array with extracted peak array.
+ */
+void Scorer::zeroPeaks()
+{
+  // create a new array, which will replace the original intensity array
+  FLOAT_T* new_array = (FLOAT_T*)mycalloc(getMaxBin(), sizeof(FLOAT_T));
+  
+  // step 1,
+  zeroPeakMeanStdev(intensity_array_, new_array, 1);
+  // step 2,
+  zeroPeakMeanStdev(intensity_array_, new_array, 2);
+  
+  // replace intensity_array with new intensity array
+  free(intensity_array_);
+  intensity_array_ = new_array;
+
+  // DEBUG
+  /*
+  int idx = 0;
+  for(; idx < scorer->sp_max_mz; ++idx){
+    carp(CARP_INFO, "extracted peaks: %.2f, at idx %d", new_array[idx], idx);
+  }
+  */
+}
+
+/**
+ * keep only the peaks up to top rank peaks remove other peaks.
+ * do second normalization on the top peaks back to max 100 intensity
+ * replace old array with normalized top peak array
+ */
+void Scorer::extractPeaks(
+  int top_rank  ///< keep the top ranking peaks -in
+  ) {
+
+  // create a new array, which will replace the original intensity array
+  FLOAT_T* temp_array = (FLOAT_T*)mycalloc(getMaxBin(), sizeof(FLOAT_T));
+  FLOAT_T* original_array = intensity_array_;
+  int idx = 0;
+  int temp_idx = 0;
+  FLOAT_T cut_off = 0;
+  FLOAT_T max_intensity;
+
+  // copy all peaks to temp_array
+  for(; idx < getMaxBin(); ++idx){
+    if(intensity_array_[idx] > 0){
+      temp_array[temp_idx] = original_array[idx];
+
+      // DEBUG print all temp array values
+      // carp(CARP_INFO, "before sort data[%d]=%.3f",temp_idx, temp_array[temp_idx]);
+      
+      ++temp_idx;
+    }
+  }
+  
+  // if there's over top_rank peaks, keep only top_rank peaks
+  // quick sort
+  quicksort(temp_array, temp_idx);
+  
+  // set max and cut_off
+  max_intensity = temp_array[0];
+  cut_off = temp_array[top_rank-1];
+  
+  // remove peaks bellow cut_off 
+  // also, normalize peaks to max_intensity to 100
+  for(idx = 0; idx < getMaxBin(); ++idx){
+    // DEBUG print all temp array values
+    // carp(CARP_INFO, "sorted data[%d]=%.3f",idx, temp_array[idx]);
+
+    if(original_array[idx] > 0){
+      // is it bellow cut off?
+      if(original_array[idx] < cut_off){
+        // remove peak
+        original_array[idx] = 0;
+      }
+      else{
+        // nomalize peak to max 100
+        original_array[idx] = original_array[idx] / max_intensity * 100;
+      }
+    }
+  }
+  
+  free(temp_array);
+  return;
+}
+ 
+/**
+ * equalize all peaks in a continous region to the largest peak within the continous bins
+ * start from left to right
+ */
+void Scorer::equalizePeaks() {
+
+  int idx;
+  // int array_size = (int)scorer->sp_max_mz-2;
+  
+  FLOAT_T max_intensity = 0;
+  int end_idx = 0;
+  int last_idx = last_idx_;
+
+  // equalize peaks to it's greatest intensity
+  // should use array size, but sequest seems to have a bug
+  // last idx is thus, modification to fit sequest
+  // consequences are we will not equalize the very last peak.
+  for(idx = 0; idx < last_idx/*array_size*/; ++idx){
+    // are we inside a continous block?
+    if(intensity_array_[idx] > 0){
+      max_intensity = intensity_array_[idx];
+      end_idx = idx + 1;
+      
+      // loop to find the largest peak in the continous block
+      while(end_idx < last_idx && intensity_array_[end_idx] > 0){
+        // reset max intensity
+        if(intensity_array_[end_idx] > max_intensity){
+           max_intensity = intensity_array_[end_idx];
+        }
+        
+        ++end_idx;
+      }
+      
+      // set all peaks in block to max_intesity
+      for(; idx < end_idx; ++idx){
+        intensity_array_[idx] = max_intensity;
+      }
+    }
+  }
+}
+    
+/**
+ * create the intensity array
+ * SCORER must have been created for SP type
+ * \returns true if successful, else FLASE
+ */
+bool Scorer::createIntensityArraySp(
+  Spectrum* spectrum,    ///< the spectrum to score -in
+  int charge               ///< the peptide charge -in 
+  )
+{
+  Peak * peak = NULL;
+  FLOAT_T peak_location = 0;
+  FLOAT_T max_intensity = 0;
+  int mz = 0;
+  FLOAT_T intensity = 0;
+  FLOAT_T bin_width = bin_width_;
+  FLOAT_T bin_offset = bin_offset_;
+  FLOAT_T precursor_mz = spectrum->getPrecursorMz();
+  FLOAT_T experimental_mass_cut_off = precursor_mz*charge + 50;
+  int top_bins = 200;
+
+  // if score type equals SP
+  if(type_ != SP){
+    carp(CARP_ERROR, "incorrect scorer type, only use this method for SP scorers");
+    return false;
+  }
+  
+  // while there are more peaks to iterate over..
+  for (PeakIterator peak_iterator = spectrum->begin();
+    peak_iterator != spectrum->end();
+    ++peak_iterator) {
+
+    peak = *peak_iterator;
+    peak_location = peak->getLocation();
+
+    // skip all peaks larger than experimental mass
+    if(peak_location > experimental_mass_cut_off){
+      continue;
+    }
+    
+    // skip all peaks within precursor ion mz +/- 15
+    if(peak_location < precursor_mz + 15 &&  peak_location > precursor_mz - 15){
+      continue;
+    }
+    
+    // map peak location to bin
+    mz = INTEGERIZE(peak_location, bin_width, bin_offset);
+
+    if (mz >= getMaxBin()) {
+      carp_once(CARP_WARNING,
+                "SP Scoring: bin:%i is greater than max:%i\n"
+                "   mz:%g bin width:%g bin offset:%g\n"
+                "   max mz:%g\n"
+                "   This warning will not be repeated", 
+                mz, getMaxBin(),
+                peak_location, bin_width, bin_offset,
+                sp_max_mz_);
+      continue;
+    }
+
+    // get intensity
+    intensity = sqrt(peak->getIntensity());
+    
+    // set intensity in array with correct mz, only if max peak in the bin
+    if(intensity_array_[mz] < intensity){
+      intensity_array_[mz] = intensity;
+      
+      // check if max_intensity
+      if(intensity > max_intensity){
+        max_intensity = intensity;
+      }
+    }
+    
+    // set last idx to the largest added peak mz value
+    if(last_idx_ < mz){
+      last_idx_ = mz;
+    }
+  }
+
+  // set max_intensity
+  max_intensity_ = max_intensity;
+  
+  // normalize intensity
+  nomalize_intensity_array(intensity_array_, last_idx_+1, max_intensity_, 100);
+  
+  // smooth peaks
+  smoothPeaks();
+
+  // zero peaks
+  zeroPeaks();
+  
+  /* Sequest28 modifications.  Determine number of top peaks to select
+   * based on the experimental mass.  In Sequest27, the top peaks were
+   * always selected as 200.  Keep top ions of sqrt(16*experimental
+   * mass) ranking, but not exceeding 200 ions. */
+  if(experimental_mass_cut_off-50 < 3200){
+    // top bins are sqrt of 16* experimental mass
+    top_bins = (int)(sqrt((experimental_mass_cut_off-50)*16) + 0.5);    
+    // however cannot exceed 200
+    if(top_bins > 200){
+      top_bins = 200;
+    }
+  }
+  else{
+    top_bins = (int)((experimental_mass_cut_off-50)/14.00);
+  }
+
+  // extrace the top ions
+  extractPeaks(top_bins);
+
+  // equalize peaks
+  equalizePeaks();
+
+  // Debug
+  /*
+  int idx; int count = 0;
+  for(idx = 0; idx < scorer->last_idx; ++idx){
+    if(scorer->intensity_array[idx] > 0){
+      // DEBUG
+      carp(CARP_INFO, "scoring array[%d], %d = %.4f", idx, count, scorer->intensity_array[idx]);
+      ++count;
+    }
+  }
+  */
+  
+  // scorer now been initialized!, ready to score peptides..
+  initialized_ = true;
+
+  return true;
+}
+
+/**
+ * calculates all the necessay values for Sp score, related to the specfic ion_type
+ * adds to intensity_sum and repeat_count
+ *\returns the number of matches found from the predicted ions
+ */
+int Scorer::calculateIonTypeSp(
+  IonSeries* ion_series, ///< the ion series to score against the spectrum -in
+  FLOAT_T* intensity_sum,     ///< the total intensity sum of all matches so far -out
+  ION_TYPE_T ion_type,      ///< the ion type to check -in
+  int* repeat_count         ///< the repeated count of ions (ex. consecutive b ions) -out
+  )
+{
+  int cleavage_idx = 0;
+  Ion* ion = NULL;
+  FLOAT_T one_intensity = 0;
+  int ion_match = 0;
+  int ion_charge = 0;
+  int intensity_array_idx = 0;
+  int* before_cleavage 
+    = (int*)mymalloc(ion_series->getCharge()*sizeof(int));
+  int cleavage_array_idx = 0;
+  FLOAT_T bin_width = bin_width_;
+  FLOAT_T bin_offset = bin_offset_;
+
+  // initialize before cleavage indecies
+  for(; cleavage_array_idx < ion_series->getCharge(); ++cleavage_array_idx){
+    before_cleavage[cleavage_array_idx] = -1;
+  }
+  
+  // create ion constraint
+  IonConstraint* ion_constraint =
+    new IonConstraint(ion_series->getIonConstraint()->getMassType(), ion_series->getCharge(), ion_type, false);
+  
+  // create the filtered iterator that will select among the ions
+  IonFilteredIterator* ion_iterator = new IonFilteredIterator(ion_series, ion_constraint);
+  
+  // while there are ion's in ion iterator, add matched observed peak intensity
+  while(ion_iterator->hasNext()){
+    ion = ion_iterator->next();
+    intensity_array_idx 
+      = INTEGERIZE(ion->getMassZ(), bin_width, bin_offset);
+    // get the intensity matching to ion's m/z
+    if(intensity_array_idx < getMaxBin()){
+      one_intensity = intensity_array_[intensity_array_idx];
+    }
+    else{
+      // printf("index out of bounds: %d scorer->sp_max_mz: %.2f ion_mass_z: %.2f\n", intensity_array_idx, scorer->sp_max_mz, get_ion_mass_z(ion));
+      one_intensity = 0;
+    }
+
+    // if there is a match in the observed spectrum
+    if(one_intensity > 0){
+  
+      // DEBUG
+      // carp(CARP_INFO, "matched ion: %.2f ion intensity: %.2f", get_ion_mass_z(ion), one_intensity);
+
+      ++ion_match;
+      *intensity_sum = *intensity_sum + one_intensity;
+      
+      // get ion charge
+      ion_charge = ion->getCharge() - 1;
+      
+      // check if repeated ion b1, b2, ...
+      if((cleavage_idx = ion->getCleavageIdx()) == before_cleavage[ion_charge] + 1){
+        ++*repeat_count;
+      }
+      
+      // reset the previous cleavage index 
+      before_cleavage[ion_charge] = cleavage_idx;
+    }
+  }
+  
+  
+  // free ion iterator, ion_constraint
+  free(before_cleavage);
+  IonConstraint::free(ion_constraint);
+  delete ion_iterator;
+
+  return ion_match;
+}
+
+
+/**
+ * given a spectrum and ion series calculates the Sp score
+ *\returns the sp score 
+ */
+FLOAT_T Scorer::genScoreSp(
+  Spectrum* spectrum,    ///< the spectrum to score -in
+  IonSeries* ion_series ///< the ion series to score against the spectrum -in
+  ) {
+
+  FLOAT_T final_score = 0;
+  FLOAT_T intensity_sum = 0;
+  int ion_match = 0;
+  int repeat_count = 0;
+  
+  // initialize the scorer before scoring if necessary
+  if(!initialized_){
+    // create intensity array
+    if(!createIntensityArraySp(spectrum, ion_series->getCharge())){
+      carp(CARP_FATAL, "failed to produce Sp");
+    }
+  }
+
+  // calculate the B_ION and Y_ION portions of the Sp score
+  ion_match = 
+    calculateIonTypeSp(ion_series, &intensity_sum, B_ION, &repeat_count) +
+    calculateIonTypeSp(ion_series, &intensity_sum, Y_ION, &repeat_count);
+  
+  // set the fraction of  b,y ions matched for this ion_series
+  sp_b_y_ion_matched_  = ion_match;
+  sp_b_y_ion_possible_ = ion_series->getNumIons();
+  sp_b_y_ion_fraction_matched_ = (FLOAT_T)ion_match / ion_series->getNumIons();
+
+  //// DEBUG!!!!
+  /*
+  carp(CARP_INFO, "# repeat count: %d ion_match count: %d, total_ion count: %d sum: %.2f", 
+       repeat_count, ion_match, get_ion_series_num_ions(ion_series),
+       intensity_sum);
+  */
+  // calculate Sp score.
+  if(ion_match != 0){
+    final_score = 
+      (intensity_sum * ion_match) * (1+ (repeat_count * sp_beta_)) / ion_series->getNumIons();
+  }
+  
+  // return score
+  return final_score;
+}
+
+
+
+
+
+/*****************************************************
+ * Xcorr related functions
+ * 
+ *****************************************************/
+
+/**
+ * Normalize each peak intensity of the observed spectrum to max 50
+ * based on the max intenstiy in each of 10 regions.
+ * .
+ */
+void Scorer::normalizeEachRegion(
+  vector<FLOAT_T>& observed,  ///< intensities to normalize
+  const vector<FLOAT_T>& max_intensity_per_region, ///< the max intensity in each 10 regions -in
+  int region_selector ///< the size of each regions -in
+  )
+{
+  int region_idx = 0;
+  int next_region = region_selector;
+  FLOAT_T max_intensity = max_intensity_per_region[region_idx];
+
+  // normalize each region
+  for (int i = 0; i < observed.size(); ++i) {
+    // increment the region index and update max_intensity if this
+    // peak is in the next region
+    if (i >= next_region && region_idx < (NUM_REGIONS - 1)) {
+      max_intensity = max_intensity_per_region[++region_idx];
+      next_region += region_selector;
+    }
+    // normalize intensity to max 50
+    observed[i] = (max_intensity != 0)
+      ? (observed[i] / max_intensity) * MAX_PER_REGION
+      : 0.0;
+  }
+}
+
+FLOAT_T* Scorer::getIntensityArrayObserved() {
+  return observed_;
+}
+
+/**
+ * Create the intensity arrays for observed spectrum.
+ * SCORER must have been created for XCORR type.
+ * \returns true if successful, else false.
+ */
+bool Scorer::createIntensityArrayObserved(
+  Spectrum* spectrum,    ///< the spectrum to score(observed) -in
+  int charge,              ///< the peptide charge -in 
+  OBSERVED_PREPROCESS_STEP_T stop_after
+  ) {
+  FLOAT_T precursor_mz = spectrum->getPrecursorMz();
+  FLOAT_T experimental_mass_cut_off = precursor_mz*charge + 50;
+
+  // set max_mz and malloc space for the observed intensity array
+  FLOAT_T sp_max_mz = 512;
+
+  if(experimental_mass_cut_off > 512){
+    int x = (int)experimental_mass_cut_off / 1024;
+    FLOAT_T y = experimental_mass_cut_off - (1024 * x);
+    sp_max_mz = x * 1024;
+
+    if(y > 0){
+      sp_max_mz += 1024;
+    }
+  }
+
+  sp_max_mz_ = sp_max_mz;
+
+  vector<FLOAT_T> observed(getMaxBin(), 0);
+
+  // Store the max intensity in entire spectrum
+  FLOAT_T max_intensity_overall = 0.0;
+  // store the max intensity in each 10 regions to later normalize
+  vector<FLOAT_T> max_intensity_per_region(NUM_REGIONS, 0);
+
+  // while there are more peaks to iterate over..
+  // find the maximum peak m/z (location)
+  double max_peak = 0.0;
+
+  for (PeakIterator peak_iterator = spectrum->begin();
+    peak_iterator != spectrum->end();
+    ++peak_iterator) {
+    Peak* peak = *peak_iterator;
+    FLOAT_T peak_location = peak->getLocation();
+    if (peak_location < experimental_mass_cut_off && peak_location > max_peak
+        && peak->getIntensity() > 0) {
+      max_peak = peak_location;
+    }
+  }
+  int region_selector = INTEGERIZE(max_peak, bin_width_, bin_offset_) / NUM_REGIONS + 1;
+
+  FLOAT_T tolerance = GlobalParams::getRemovePrecursorTolerance();
+
+  // while there are more peaks to iterate over..
+  // bin peaks, adjust intensties, find max for each region
+  for (PeakIterator peak_iterator = spectrum->begin();
+       peak_iterator != spectrum->end();
+       ++peak_iterator) {
+    Peak* peak = *peak_iterator;
+    FLOAT_T peak_location = peak->getLocation();
+
+    // skip all peaks larger than experimental mass
+    // skip all peaks within precursor ion mz +/- 15
+    if (peak_location > experimental_mass_cut_off ||
+        (stop_after >= REMOVE_PRECURSOR_STEP &&
+         peak_location < precursor_mz + tolerance &&
+         peak_location > precursor_mz - tolerance)) {
+      continue;
+    }
+    
+    // map peak location to bin
+    int mz = INTEGERIZE(peak_location, bin_width_, bin_offset_);
+    int region = mz / region_selector;
+
+    // don't let index beyond array
+    if (region == NUM_REGIONS && mz < experimental_mass_cut_off) {
+      // Force peak into lower bin
+      region = NUM_REGIONS - 1;
+    } else if (region >= NUM_REGIONS) {
+      // Skip peak altogether
+      continue;
+    }
+
+    // get intensity
+    // sqrt the original intensity
+    FLOAT_T intensity = (stop_after >= SQUARE_ROOT_STEP)
+      ? sqrt(peak->getIntensity()) : peak->getIntensity();
+
+    // Record the max intensity in the full spectrum
+    if (intensity > max_intensity_overall) {
+      max_intensity_overall = intensity;
+    }
+
+    // set intensity in array with correct mz, only if max peak in the bin
+    if (observed[mz] < intensity) {
+      observed[mz] = intensity;
+      // check if this peak is max intensity in the region(one out of 10)
+      if (max_intensity_per_region[region] < intensity) {
+        max_intensity_per_region[region] = intensity;
+      }
+    }
+  }
+
+  // For compatibility with SEQUEST drop peaks with intensity less than 1/20 of
+  // the overall max intensity.
+  if (stop_after >= REMOVE_GRASS_STEP) {
+    for (vector<FLOAT_T>::iterator i = observed.begin(); i != observed.end(); i++) {
+      if (*i <= 0.05 * max_intensity_overall) {
+        *i = 0.0;
+      }
+    }
+  }
+
+  // normalize each 10 regions to max intensity of 50
+  if (stop_after >= TEN_BIN_STEP) {
+    normalizeEachRegion(observed, max_intensity_per_region, region_selector);
+  }
+
+  observed_ = (FLOAT_T*)mycalloc(observed.size(), sizeof(FLOAT_T));
+  copy(observed.begin(), observed.end(), observed_);
+
+  if (stop_after == XCORR_STEP) {
+    // TODO maybe replace with a faster implementation that uses cum distribution
+    for (int i = 0; i < observed.size(); i++) {
+      for (int j = i - MAX_XCORR_OFFSET; j <= i + MAX_XCORR_OFFSET; j++) {
+        if (j > 0 && j < observed.size()) {
+          observed_[i] -= (observed[j] / (MAX_XCORR_OFFSET * 2.0 + 1));
+        }
+      }
+    }
+  }
+
+  return true;
+}
+
+/**
+ * Generate the processed peaks for the spectrum and return via the
+ * intensities array.  It's implemented here so that
+ * create_intensity_array_observed() can remain private and so that
+ * the scorer->observed array can be accessed directly.
+ */
+void Scorer::getProcessedPeaks(
+  Spectrum* spectrum, 
+  int charge,
+  SCORER_TYPE_T score_type,  // SP, XCORR
+  FLOAT_T** intensities, ///< pointer to array of intensities
+  int* max_mz_bin,
+  OBSERVED_PREPROCESS_STEP_T stop_after){
+  //  const string& stop_after){
+
+  // create a scorer
+  Scorer scorer(score_type);
+
+  // call create_intensity_array_observed
+  scorer.createIntensityArrayObserved(spectrum, charge, stop_after);
+
+  // return the observed array and the sp_max_mz
+  *intensities = scorer.observed_;
+  *max_mz_bin = scorer.getMaxBin();
+}
+
+
+
+/**
+ * Score the ion series directly.
+ * \returns the calculated XCORR score.
+ */
+FLOAT_T Scorer::scoreIntensityIonSeries(
+  IonSeries* ion_series ///< the ion series to score against the spectrum (theoretical) -in
+  ) {
+
+  
+  FLOAT_T ans = 0.0;
+  
+  Ion* ion = NULL;
+  int intensity_array_idx = 0;
+  int ion_charge = 0;
+  ION_TYPE_T ion_type;
+  FLOAT_T ion_mass_z = 0;
+  FLOAT_T bin_width = bin_width_;
+  FLOAT_T bin_offset = bin_offset_;
+  int max_bin = getMaxBin();
+  FLOAT_T B_Y_sum = 0.0;
+  FLOAT_T FLANK_sum = 0.0;
+  FLOAT_T LOSS_sum = 0.0;
+  
+  // create the ion iterator that will iterate through the ions
+
+  // while there are ion's in ion iterator, add matched observed peak intensity
+  IonIterator eiter = ion_series->end();
+  for (IonIterator ion_iterator = ion_series->begin();
+    ion_iterator != eiter;
+    ++ion_iterator) {
+    
+    ion = *ion_iterator;
+    
+    ion_mass_z = ion->getMassZ();
+    intensity_array_idx 
+      = INTEGERIZE(ion_mass_z, bin_width, bin_offset);
+
+    // skip ions that are located beyond max mz limit
+    if(intensity_array_idx >= max_bin){
+      continue;
+    }
+    ion_type = ion->getType();
+
+    // is it B, Y ion?
+    if(ion_type == B_ION || 
+       ion_type == Y_ION){
+
+      //      if (!ion->isModified()){
+      // Add peaks of intensity 50.0 for B, Y type ions. 
+      // In addition, add peaks of intensity of 25.0 to +/- 1 m/z flanking each B, Y ion if requested.
+      // Skip ions that are located beyond max mz limit
+      B_Y_sum += observed_[intensity_array_idx];
+      if (use_flanks_) {
+        FLANK_sum += observed_[intensity_array_idx-1];
+        if ((intensity_array_idx + 1) < max_bin) {
+          FLANK_sum += observed_[intensity_array_idx+1];
+	      }
+      }
+        
+      // add neutral loss of water and NH3
+      ion_charge = ion->getCharge();
+      if(ion_type == B_ION){
+        int h2o_array_idx = 
+          INTEGERIZE((ion_mass_z - (MASS_H2O_MONO/ion_charge)),
+                       bin_width, bin_offset);  
+        LOSS_sum += observed_[h2o_array_idx];
+      }
+
+      int nh3_array_idx 
+        = INTEGERIZE((ion_mass_z -  (MASS_NH3_MONO/ion_charge)),
+                       bin_width, bin_offset);
+      LOSS_sum += observed_[nh3_array_idx];
+
+    }// is it A ion?
+    else if(ion_type == A_ION){
+      // Add peaks of intensity 10.0 for A type ions.
+      LOSS_sum += observed_[intensity_array_idx];
+    }
+    else{// ERROR!, only should create B, Y, A type ions for xcorr theoreical 
+      carp(CARP_ERROR, "only should create B, Y, A type ions for xcorr theoretical spectrum");
+      return 0;
+    }
+  }
+
+  ans = B_Y_sum * B_Y_HEIGHT + FLANK_sum * FLANK_HEIGHT + LOSS_sum * LOSS_HEIGHT;
+  return ans / 10000.0;
+}
+
+/**
+ * create the intensity arrays for both observed and theoretical spectrum
+ * SCORER must have been created for XCORR type
+ * \returns true if successful, else FLASE
+ */
+bool Scorer::createIntensityArrayXcorr(
+  Spectrum* spectrum,    ///< the spectrum to score(observed) -in
+  int charge               ///< the peptide charge -in 
+  )
+{
+
+  // DEBUG
+  // carp(CARP_INFO, "precursor_mz: %.1f", precursor_mz);
+  
+  if(type_ != XCORR){
+    carp(CARP_ERROR, "Incorrect scorer type, only use this method for XCORR scorers");
+    return false;
+  }
+    
+  // create intensity array for observed spectrum 
+  if(!createIntensityArrayObserved(spectrum, charge)){
+    carp(CARP_ERROR, "Failed to preprocess observed spectrum for Xcorr");
+    return false;
+  }
+  
+  // scorer now been initialized!, ready to score peptides..
+  initialized_ = true;
+
+  return true;
+}
+
+/**
+ * Uses an iterative cross correlation
+ *
+ *\return the final cross correlation score between the observed and the
+ *theoretical spectra
+ */
+FLOAT_T Scorer::crossCorrelation(
+  FLOAT_T* theoretical ///< the theoretical spectrum to score against the observed spectrum -in
+  )
+{
+
+  int size = getMaxBin();
+  FLOAT_T score_at_zero = 0;
+  
+  // compare each location in theoretical spectrum
+  int idx;
+  for(idx = 0; idx < size; ++idx){
+    score_at_zero += observed_[idx] * theoretical[idx];
+  }
+
+  return score_at_zero / 10000.0;
+}
+
+/**
+ * given a spectrum and ion series calculates the xcorr score
+ *\returns the xcorr score 
+ */
+FLOAT_T Scorer::genScoreXcorr(
+  Spectrum* spectrum,    ///< the spectrum to score -in
+  IonSeries* ion_series ///< the ion series to score against the spectrum -in
+  )
+{
+  FLOAT_T final_score = 0;
+  // initialize the scorer before scoring if necessary
+  // preprocess the observed spectrum in scorer
+  if(!initialized_){
+    // create intensity array for observed spectrum, if already not been done
+    if(!createIntensityArrayXcorr(spectrum, ion_series->getCharge())){
+      carp(CARP_FATAL, "failed to produce XCORR");
+    }
+  }
+    final_score = scoreIntensityIonSeries(ion_series);
+  // debug
+  // carp(CARP_INFO, "xcorr: %.2f", final_score);
+  
+  // return score
+  return final_score;
+}
+
+/*****************************************************
+ * General purpose functions
+ * 
+ *****************************************************/
+
+/**
+ * Score a spectrum vs. an ion series
+ */
+FLOAT_T Scorer::scoreSpectrumVIonSeries(
+  Spectrum* spectrum,      ///< the spectrum to score -in
+  IonSeries* ion_series ///< the ion series to score against the spectrum -in
+  ) {
+
+  FLOAT_T final_score = 0;
+
+  if(type_ == SP){
+    final_score = genScoreSp(spectrum, ion_series);
+  }
+  else if(type_ == XCORR){
+    final_score = genScoreXcorr(spectrum, ion_series);
+  }
+  else{
+    carp(CARP_ERROR, "no scoring method availiable for the scorers' score type");
+  }
+  
+  return final_score;
+}
+
+/**
+ * Score a spectrum vs. another spectrum
+ */
+
+FLOAT_T Scorer::scoreSpectrumVSpectrum(
+  Spectrum* first_spectrum, ///< the first spectrum to score 
+  Spectrum* second_spectrum ///<  the second spectrum to score
+) {
+
+  (void)first_spectrum;
+  (void)second_spectrum;
+  return 0.0;
+}
+
+/**
+ * Creates an array of ion constraints for GMTK models.
+ * 0  - b
+ * 1  - b-nh3
+ * 2  - b-h2o
+ * 3  - b+2
+ * 4  - b-nh3+2
+ * 5  - b-h2o+2
+ * 6  - y
+ * 7  - y-nh3
+ * 8  - y-h2o
+ * 9  - y+2
+ * 10 - y-nh3+2
+ * 11 - y-h2o+2
+ * 12 - a
+ * 13 - a-nh3
+ * 14 - a-h2o
+ * 15 - a+2
+ * 16 - a-nh3+2
+ * 17 - a-h2o+2
+ */
+IonConstraint** Scorer::singleIonConstraints() {
+
+  carp(CARP_INFO, "Num ion series %i", GMTK_NUM_ION_SERIES);
+  IonConstraint** ion_constraints = new IonConstraint*[GMTK_NUM_ION_SERIES];
+
+  ION_TYPE_T ion_types[GMTK_NUM_BASE_IONS] = { B_ION, Y_ION, A_ION }; 
+  int charges[GMTK_NUM_CHARGES] = { 1, 2 }; 
+
+  MASS_TYPE_T mass_type = GlobalParams::getFragmentMass();
+
+  int ion_constraint_idx = 0;
+
+  int ion_type_idx;
+  // b and y. NOTE keep in synch with GMTKmodel.py writeIonFilesC
+  for (ion_type_idx=0; ion_type_idx < GMTK_NUM_BASE_IONS; ion_type_idx++){
+
+    int charge_idx;
+    for (charge_idx=0; charge_idx < GMTK_NUM_CHARGES; charge_idx++){
+
+      int neutral_idx;
+      for(neutral_idx=0; neutral_idx< GMTK_NUM_NEUTRAL_LOSS+1; neutral_idx++){
+        IonConstraint* ion_constraint =
+          new IonConstraint( mass_type, charges[charge_idx],
+                              ion_types[ion_type_idx], false);
+        ion_constraint->setExactness(true);
+        if (neutral_idx == 0){
+          ;
+        }
+        else if (neutral_idx == 1){
+          ion_constraint->setModification(NH3, -1);
+        } else if (neutral_idx == 2){
+          ion_constraint->setModification(H2O, -1);
+        }
+        ion_constraints[ion_constraint_idx] = ion_constraint;
+        ion_constraint_idx++;
+      }
+    }
+  }
+  return ion_constraints;
+}
+
+/**
+ * Frees the single_ion_constraints array
+ */
+void Scorer::freeSingleIonConstraints(
+  IonConstraint** ion_constraints
+  ){
+
+  int constraint_idx;
+  for (constraint_idx=0; constraint_idx<GMTK_NUM_ION_SERIES; constraint_idx++){
+    IonConstraint::free(ion_constraints[constraint_idx]);
+  }
+  delete ion_constraints;
+}
+
+/**
+ * Creates the an array of ion constraints for GMTK models.
+
+ * TODO do we need one for paired and single? Do we want an iterator?
+ */
+IonConstraint** Scorer::pairedIonConstraints(){
+
+  carp(CARP_INFO, "Num ion series %i", GMTK_NUM_PAIRED_ION_SERIES);
+  IonConstraint** base_ion_constraints = singleIonConstraints(); 
+  IonConstraint** ion_constraints = 
+    new IonConstraint*[2 * GMTK_NUM_PAIRED_ION_SERIES];
+
+  // FIX magic numbers
+  /* 0  - b
+   * 1  - b-nh3
+   * 2  - b-h2o
+   * 3  - b+2
+   * 4  - b-nh3+2
+   * 5  - b-h2o+2
+   * 6  - y
+   * 7  - y-nh3
+   * 8  - y-h2o
+   * 9  - y+2
+   * 10 - y-nh3+2
+   * 11 - y-h2o+2
+   * 12 - a
+   * 13 - a-nh3
+   * 14 - a-h2o
+   * 15 - a+2
+   * 16 - a-nh3+2
+   * 17 - a-h2o+2*/
+ 
+  int indices[GMTK_NUM_PAIRED_ION_SERIES * 2] = { 
+    0, 6, // b,y
+    0, 12,// b,a
+    6, 12,// y,a
+    0, 2, // b,b-h2o
+    0, 1, // b,b-nh3
+    0, 3, // b,b+2
+    2, 5, // b-h2o,b-h2o+2
+    1, 4, // b-nh3,b-nh3+2
+    6, 8, // y,y-h2o
+    6, 7, // y,y-nh3
+    6, 9, // y,y+2
+    8, 11,// y-h2o,y-h2o+2
+    7, 10,// y-nh3,y-nh3+2
+    12,15,// a,a+2
+    3,9   // b+2,y+2
+  };
+
+  int idx;
+  for (idx = 0; idx < GMTK_NUM_PAIRED_ION_SERIES * 2; idx++){
+    ion_constraints[idx] = IonConstraint::copy(
+        base_ion_constraints[indices[idx]]);
+  }
+  return ion_constraints;
+}
+
+/**
+ * Frees the paired ion_constraints array
+ */
+void Scorer::freePairedIonConstraints(
+    IonConstraint** ion_constraints
+    ){
+
+  int constraint_idx;
+  for (constraint_idx=0; constraint_idx<GMTK_NUM_PAIRED_ION_SERIES; 
+       constraint_idx++){
+    IonConstraint::free(ion_constraints[constraint_idx]);
+  }
+  delete ion_constraints;
+}
+
+/*******************************
+ * get, set methods for scorer
+ *******************************/
+
+/**
+ *\returns the score type of the scorer
+ */
+SCORER_TYPE_T Scorer::getType() {
+
+  return type_;
+}
+
+/**
+ *sets the scorer type
+ */
+void Scorer::setType(
+  SCORER_TYPE_T type ///< The type of scorer -in
+) {
+  type_ = type;
+}
+
+/**
+ *\returns the beta value of the scorer
+ */
+FLOAT_T Scorer::getSpBeta() {
+
+  return sp_beta_;
+}
+
+/**
+ *sets the scorer beta value
+ */
+void Scorer::setSpBeta(
+  FLOAT_T sp_beta ///< used for Sp: the beta variable -in
+  ) {
+
+  sp_beta_ = sp_beta;
+}
+
+/**
+ *\returns the max_mz value of the scorer
+ */
+FLOAT_T Scorer::getSpMaxMz() {
+
+  return sp_max_mz_;
+}
+
+/**
+ *set the scorer max_mz value
+ */
+void Scorer::setSpMaxMz(
+  FLOAT_T sp_max_mz ///< used for Sp: the max_mz variable -in
+  ) {
+
+  sp_max_mz_ = sp_max_mz;
+}
+
+/**
+ *\returns the max bin index of the scorer array(s).
+ */
+int Scorer::getMaxBin() {
+    return INTEGERIZE(sp_max_mz_, bin_width_, bin_offset_);
+}
+
+/**
+ * adds the intensity at add_idx
+ * if, there already exist a peak at the index, only overwrite if
+ * intensity is larger than the existing peak.
+ */
+void Scorer::addIntensity(
+  FLOAT_T* intensity_array, ///< the intensity array to add intensity at index add_idx -out
+  int add_idx,            ///< the idex to add the intensity -in
+  FLOAT_T intensity         ///< the intensity to add -in
+  ) {
+
+  assert(add_idx >= 0);
+  ion_counter++;
+  if(intensity_array[add_idx] < intensity){
+    intensity_array[add_idx] = intensity;
+  }
+}
+
+ 
+FLOAT_T Scorer::scoreIntensity(
+  int add_idx,
+  FLOAT_T intensity
+  ) {
+  if (add_idx >= 0) {
+    return (observed_[add_idx] * intensity);
+  } else {
+    return 0.0;
+  }
+}
+
+
+
+/**
+ *\returns the fraction of b,y ions matched for scoring SP, 
+ * the values is valid for the last ion series scored with this scorer object
+ */
+FLOAT_T Scorer::getSpBYIonFractionMatched() {
+
+  return sp_b_y_ion_fraction_matched_;
+}
+
+/**
+ *\returns the number of b,y ions matched for scoring SP
+ */
+int Scorer::getSpBYIonMatched() {
+
+  return sp_b_y_ion_matched_;
+}
+
+/**
+ *\returns the number of b,y ions possible to match for scoring SP
+ */
+int Scorer::getSpBYIonPossible() {
+
+  return sp_b_y_ion_possible_;
+}
+
+/*************************************
+ * Score for LOGP_EXP_SP && LOGP_BONF_EXP_SP
+ *
+ *
+ *
+ ************************************/
+
+/**
+ * Compute a p-value for a given score w.r.t. an exponential with the
+ * given parameters.
+ * \returns the -log(p_value) of the exponential distribution
+ */
+FLOAT_T score_logp_exp_sp(
+  FLOAT_T sp_score, ///< The sp score for the scoring peptide -in
+  FLOAT_T mean      ///< The overall mean of the sp scored peptides -in
+  )
+{
+  return -log( exp(-(1/mean) * sp_score) );
+}
+
+/**
+ * Compute a p-value for a given score w.r.t. an exponential with the
+ * given parameters.
+ * \returns the -log(p_value) of the exponential distribution with
+ * Bonferroni correction
+ */
+FLOAT_T score_logp_bonf_exp_sp(
+  FLOAT_T sp_score, ///< The sp score for the scoring peptide -in
+  FLOAT_T mean,      ///< The overall mean of the sp scored peptides -in
+  int num_peptide  ///< The number of peptides scored for sp
+  )
+{
+  double p_value = exp(-(1/mean) * sp_score);
+  
+  // The Bonferroni correction 
+  // use original equation 1-(1-p_value)^n when p is not too small
+  if(p_value > BONFERRONI_CUT_OFF_P || 
+     p_value*num_peptide > BONFERRONI_CUT_OFF_NP){
+    return -log(1-pow((1-p_value), num_peptide));
+  }
+  // else, use the approximation
+  else{
+    return -log(p_value*num_peptide);
+  }
+}
+
+/**
+ * Apply a Bonferroni correction to a given p-value.
+ * \returns the corrected p_value.
+ */
+FLOAT_T bonferroni_correction(
+  FLOAT_T p_value, ///< The uncorrected p-value.
+  int num_tests ///< The number of tests performed.
+  )
+{
+  FLOAT_T return_value;
+
+  // use original equation 1-(1-p_value)^n when p is not too small
+  if(p_value > BONFERRONI_CUT_OFF_P ||
+     p_value * num_tests > BONFERRONI_CUT_OFF_NP){
+
+    return_value = 1-pow((1-p_value), num_tests);
+  }
+  // else, use the approximation
+  else {
+    return_value = p_value * num_tests;
+  }
+
+  carp(CARP_DETAILED_DEBUG, "Stat: pvalue after = %.6f", return_value);
+  return return_value;
+}
+
+/**
+ * Compute a p-value for a given score w.r.t. a Weibull with given parameters.
+ *\returns the p_value
+ */
+FLOAT_T compute_weibull_pvalue(
+  FLOAT_T score, ///< The score for the scoring peptide -in
+  FLOAT_T eta,   ///< The eta parameter of the Weibull -in
+  FLOAT_T beta,  ///< The beta parameter of the Weibull -in
+  FLOAT_T shift  ///< The shift parameter of the Weibull -in
+  ){
+  carp(CARP_DETAILED_DEBUG, "Stat: score = %.6f", score);
+
+  FLOAT_T return_value;
+
+  // No Weibull parameter, return NaN.
+  if (eta == 0.0) {
+    carp(CARP_DETAILED_DEBUG, "Failed fit, returning p-value=NaN");
+    return_value = NaN();
+  }
+  // undefined past shift, give lowest possible score.
+  else if (score + shift <= 0) {
+    carp(CARP_DETAILED_DEBUG, "Bad shift, returning p-value=1");
+    return_value = 1.0;
+  }
+  else {
+    return_value = exp(-pow((score + shift) / eta, beta));
+    carp(CARP_DETAILED_DEBUG, "Stat: pvalue before = %g", return_value);
+  }
+  return(return_value);
+}
+
+/**
+ * Compute a p-value for a given score w.r.t. a Weibull with given parameters.
+ *\returns the -log(p_value)
+ */
+double score_logp_bonf_weibull(
+  FLOAT_T score, ///< The score for the scoring peptide -in
+  FLOAT_T eta,  ///< The eta parameter of the Weibull
+  FLOAT_T beta, ///< The beta parameter of the Weibull
+  FLOAT_T shift, ///< The shift parameter of the Weibull
+  int num_peptide ///< The number of peptides
+  ){
+  carp(CARP_DETAILED_DEBUG, "Stat: score = %.6f", score);
+  
+  double temp = score + shift;
+  if (temp <=0) {
+    //undefined past shift, give lowest possible score (-log(1.0)).
+    carp(CARP_DETAILED_DEBUG,"undefined returning 0");
+    return 0.0;
+  }
+  else {
+    double p_value = exp(-pow((double) temp/eta, (double) beta));
+    carp(CARP_DETAILED_DEBUG, "Stat: pvalue before = %.15f", p_value);
+
+    // The Bonferroni correction 
+    // use original equation 1-(1-p_value)^n when p is not too small
+    if(p_value > BONFERRONI_CUT_OFF_P 
+       || p_value*num_peptide > BONFERRONI_CUT_OFF_NP){
+
+      double corrected_pvalue = -log(1-pow((1-p_value), num_peptide));
+      carp(CARP_DETAILED_DEBUG, "Stat: pvalue after = %.6f", corrected_pvalue);
+      return corrected_pvalue;
+    }
+    // else, use the approximation
+    else{
+      double corrected_pvalue = -log(p_value*num_peptide);
+      carp(CARP_DETAILED_DEBUG, "Stat: pvalue after = %.6f", corrected_pvalue);
+      return corrected_pvalue;
+    }
+  }
+}
+
+/**
+ * Compute a p-value for a given score w.r.t. an EVD with the given parameters.
+ * Function: ExtremeValueP()
+ * 
+ * Purpose:  Calculate P(S>x) according to an extreme
+ *           value distribution, given x and the parameters
+ *           of the distribution (characteristic
+ *           value mu, decay constant lambda).
+ *           
+ *           This function is exquisitely prone to
+ *           floating point exceptions if it isn't coded
+ *           carefully.
+ *           
+ * Args:     x      = score
+ *           mu     = characteristic value of extreme value distribution
+ *           lambda = decay constant of extreme value distribution
+ *           
+ *\returns P(S>x)
+ */
+double compute_evd_pvalue(
+  FLOAT_T score, ///< The xcorr score for the scoring peptide -in
+  FLOAT_T evd_mu, ///<  EVD parameter Xcorr(characteristic value of extreme value distribution) -in
+  FLOAT_T evd_lambda ///< EVD parameter Xcorr(decay constant of extreme value distribution) -in
+  )
+{
+  // These constants are hardware dependent.
+  // These values should be good for double precision floating point
+  // numbers compatible with the IEEE 754 standard.
+  // DBL_EPSILON = 2.2204460492503131e-16
+  // DBL_MAX_10_EXP = 308
+  
+  double p_value = 0;
+  
+  // avoid exceptions near P=1.0
+  if((evd_lambda * (score - evd_mu)) <= -1.0 * log(-1.0 * log(DBL_EPSILON_))){
+    return 1.0;
+  }
+  
+  // avoid underflow fp exceptions near P=0.0
+  if((evd_lambda * (score - evd_mu)) >= 2.3 * DBL_MAX_10_EXP_){
+    return 0.0;
+  }
+  
+  // a roundoff issue arises; use 1 - e^-x --> x for small x
+  p_value = exp(-1.0 * evd_lambda * (score - evd_mu));
+  if (p_value < 1e-7){
+    return p_value;
+  }
+  else{
+    return (1.0 - exp(-1.0 * p_value));
+  }
+}
+
+/**
+ * Compute a p-value for a given score w.r.t. an EVD with the given parameters.
+ *\returns the -log(p_value) of the EVD distribution 
+ */
+FLOAT_T score_logp_evd_xcorr(
+  FLOAT_T xcorr_score, ///< The xcorr score for the scoring peptide -in
+  FLOAT_T mu, ///<  EVD parameter Xcorr(characteristic value of extreme value distribution) -in
+  FLOAT_T l_value ///< EVD parameter Xcorr(decay constant of extreme value distribution) -in
+  )
+{
+  return -log(compute_evd_pvalue(xcorr_score, mu, l_value));
+}
+
+/**
+ * Compute a p-value for a given score w.r.t. an EVD with the given parameters.
+ *\returns the -log(p_value) of the EVD distribution with Bonferroni correction
+ */
+FLOAT_T score_logp_bonf_evd_xcorr(
+  FLOAT_T xcorr_score, ///< The xcorr score for the scoring peptide -in
+  FLOAT_T mu, ///<  EVD parameter Xcorr(characteristic value of extreme value distribution) -in
+  FLOAT_T l_value, ///< EVD parameter Xcorr(decay constant of extreme value distribution) -in
+  int num_peptide  ///< The number of peptides scored for sp -in
+  )
+{
+  double p_value = compute_evd_pvalue(xcorr_score, mu, l_value);
+
+  // DEBUG
+  carp(CARP_DEBUG, "p_value: %E, experiment_size: %d", p_value, num_peptide);
+
+  // The Bonferroni correction 
+  // use original equation 1-(1-p_value)^n when p is not too small
+  if(p_value > BONFERRONI_CUT_OFF_P || p_value*num_peptide > BONFERRONI_CUT_OFF_NP){
+    return -log(1-pow((1-p_value), num_peptide));
+  }
+  // else, use the approximation
+  else{
+    return -log(p_value*num_peptide);
+  }
+}
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/Scorer.h b/src/model/Scorer.h
new file mode 100644
index 0000000..de44f32
--- /dev/null
+++ b/src/model/Scorer.h
@@ -0,0 +1,504 @@
+/**
+ * \file Scorer.h 
+ * \brief object to score spectrum vs. spectrum or spectrum vs. scorer
+ */
+
+/*
+ * AUTHOR: Chris Park
+ * CREATE DATE: 9 Oct 2006
+ * $Revision: 1.22 $
+ *****************************************************************************/
+#ifndef SCORER_H 
+#define SCORER_H
+
+#include <stdio.h>
+#ifndef _MSC_VER
+#include <dirent.h>
+#endif
+#include <string>
+#ifdef _MSC_VER
+#include "util/windirent.h"
+#endif
+#include "model/objects.h"
+#include "model/Spectrum.h"
+#include "model/Peptide.h"
+#include "model/Ion.h"
+
+
+/**
+ * Macro for converting floating point to integers.
+ */
+
+#define INTEGERIZE(VALUE,BIN_SIZE,BIN_OFFSET) \
+  ((int)( ( ( VALUE / BIN_SIZE ) + 1.0 ) - BIN_OFFSET ) )
+
+class Scorer {
+
+ protected:
+  SCORER_TYPE_T type_; ///< The type of scorer
+  FLOAT_T sp_beta_; ///< used for Sp: the beta variable 
+  FLOAT_T sp_max_mz_; ///< used for Sp: the max mz for the intensity array
+  int sp_b_y_ion_matched_; ///< The most recent ion_collection number of the b, y ion matched while scoring for SP
+  int sp_b_y_ion_possible_; ///< The most recent ion_collection number of the b, y ion possible while scoring for SP
+  FLOAT_T sp_b_y_ion_fraction_matched_; ///< The ratio of matched and possible.
+
+  FLOAT_T* intensity_array_; ///< used for Sp: the intensity array, which can be indexed using the m/z
+  FLOAT_T max_intensity_; ///< the max intensity in the intensity array
+  bool initialized_; ///< has the scorer been initialized?
+  int last_idx_; ///< the last index in the array, the data size of the array
+
+  FLOAT_T bin_width_; ///< width of the bins to use for arrays
+  FLOAT_T bin_offset_; ///< m/z offset for the bins.
+  bool use_flanks_; ///< use flanking peaks in calculation of XCorr theoretical
+
+  /// used for xcorr
+  FLOAT_T* observed_; ///< used for Xcorr: observed spectrum intensity array
+  FLOAT_T* theoretical_; ///< used for Xcorr: theoretical spectrum intensity array
+
+  /**
+   * Initializes an empty scorer object
+   */
+  void init();
+
+  /**
+   * smooth all peaks in intensity array
+   * Replaces the original array with the newly smooothed array
+   */
+  void smoothPeaks();
+
+  /***
+   * zero and extract peaks
+   * extract peaks that are larger than mean + #step*stdev into new array
+   * zero out the peaks that have been extracted
+   * yes, the facter that a peak has removed will effect the fallowing peaks
+   */
+  void zeroPeakMeanStdev(
+    FLOAT_T* original_array, ///< the array to normalize -in/out
+    FLOAT_T* new_array, ///< the array to normalize -in/out                          
+    int step                ///< is this 1 or 2 step -in
+    );
+
+  /**
+   * \brief Zero and extract peaks
+   *
+   * Extract peaks that are larger than mean + #step*stdev into new
+   * array.  Zero out the peaks that have been extracted.  Repeat twice,
+   * than replace old array with extracted peak array.
+   */
+  void zeroPeaks();
+
+  /**
+   * keep only the peaks up to top rank peaks remove other peaks.
+   * do second normalization on the top peaks back to max 100 intensity
+   * replace old array with normalized top peak array
+   */
+  void extractPeaks(
+    int top_rank  ///< keep the top ranking peaks -in
+    );
+
+  /**
+   * equalize all peaks in a continous region to the largest peak within the continous bins
+   * start from left to right
+   */
+  void equalizePeaks();
+
+  /**
+   * calculates all the necessay values for Sp score, related to the specfic ion_type
+   * adds to intensity_sum and repeat_count
+   *\returns the number of matches found from the predicted ions
+   */
+  int calculateIonTypeSp(
+    IonSeries* ion_series, ///< the ion series to score against the spectrum -in
+    FLOAT_T* intensity_sum,     ///< the total intensity sum of all matches so far -out
+    ION_TYPE_T ion_type,      ///< the ion type to check -in
+    int* repeat_count         ///< the repeated count of ions (ex. consecutive b ions) -out
+    );
+
+  /**
+   * create the intensity array
+   * SCORER must have been created for SP type
+   * \returns true if successful, else FLASE
+   */
+  bool createIntensityArraySp(
+    Crux::Spectrum* spectrum,    ///< the spectrum to score -in
+    int charge               ///< the peptide charge -in 
+    );
+
+  /**
+   * given a spectrum and ion series calculates the Sp score
+   *\returns the sp score 
+   */
+  FLOAT_T genScoreSp(
+    Crux::Spectrum* spectrum,    ///< the spectrum to score -in
+    IonSeries* ion_series ///< the ion series to score against the spectrum -in
+    );
+
+  /*****************************************************
+   * Xcorr related functions
+   * 
+   *****************************************************/
+
+  /**
+   * normalize each 10 regions of the observed spectrum to max 50
+   */
+  void normalizeEachRegion(
+    vector<FLOAT_T>& observed,  ///< intensities to normalize
+    const vector<FLOAT_T>& max_intensity_per_region, ///< the max intensity in each 10 regions -in
+    int region_selector ///< the size of each regions -in
+    );
+
+  /**
+   * given a spectrum and ion series calculates the xcorr score
+   *\returns the xcorr score 
+   */
+  FLOAT_T genScoreXcorr(
+    Crux::Spectrum* spectrum,    ///< the spectrum to score -in
+    IonSeries* ion_series ///< the ion series to score against the spectrum -in
+    );
+
+  /**
+   * Scores the ion series directly against the observed array.
+   */
+  FLOAT_T scoreIntensityIonSeries(
+    IonSeries* ion_series
+  );
+
+  /*****************************************************
+   * General purpose functions
+   * 
+   *****************************************************/
+  /**
+   * Creates the an array of ion constraints for GMTK models.
+  
+   * TODO do we need one for paired and single? Do we want an iterator?
+   */
+  IonConstraint** pairedIonConstraints();
+
+  /**
+   * Frees the paired ion_constraints array
+   */
+  void freePairedIonConstraints(
+    IonConstraint** ion_constraints
+    );
+
+ public:
+
+  /**
+   * \returns An (empty) scorer object.
+   */
+  Scorer();
+
+  /**
+   * Instantiates a new scorer object from a SCORER_TYPE_T. 
+   * \returns a new scorer object
+   */
+  Scorer(
+    SCORER_TYPE_T type ///< the type of scorer -in
+    );
+
+  /**
+   * Frees an allocated scorer object.
+   */
+  ~Scorer();
+
+  /**
+   * Score a spectrum vs. an ion series
+   */
+  FLOAT_T scoreSpectrumVIonSeries(
+    Crux::Spectrum* spectrum,      ///< the spectrum to score -in
+    IonSeries* ion_series ///< the ion series to score against the spectrum -in
+  );
+
+  /**
+   * Frees the single_ion_constraints array
+   */
+  void freeSingleIonConstraints(
+    IonConstraint** ion_constraints
+    );
+
+  /**
+   * Creates the an array of ion constraints for GMTK models.
+   * TODO do we need one for paired and single? Do we want an iterator?
+   */
+  IonConstraint** singleIonConstraints();
+
+  /**
+   * Score a spectrum vs. another spectrum
+   */
+  FLOAT_T scoreSpectrumVSpectrum(
+    Crux::Spectrum* first_spectrum,   ///< the first spectrum to score -in
+    Crux::Spectrum* second_spectrum   ///<  the second spectrum to score -in
+  );
+
+  /*******************************
+   * get, set methods for scorer
+   *******************************/
+
+  /**
+   *\returns the score type of the scorer
+   */
+  SCORER_TYPE_T getType();
+
+  /**
+   *sets the scorer type
+   */
+  void setType(
+    SCORER_TYPE_T type ///< The type of scorer -in
+    );
+
+  /**
+   *\returns the beta value of the scorer
+   */
+  FLOAT_T getSpBeta();
+
+  /**
+   *sets the scorer beta value
+   */
+  void setSpBeta(
+    FLOAT_T sp_beta ///< used for Sp: the beta variable -in
+    );
+
+  /**
+   *\returns the gamma value of the scorer
+   */
+  FLOAT_T getSpGamma();
+
+  /**
+   *sets the scorer gamma value
+   */
+  void setSpGamma(
+    FLOAT_T sp_gamma ///< used for Sp: the gamma variable -in
+    );
+
+
+  /**
+   *\returns the min_mz value of the scorer
+   */
+  FLOAT_T getSpMinMz();
+
+  /**
+   *sets the scorer min_mz value
+   */
+  void setSpMinMz(
+    FLOAT_T sp_min_mz ///< used for Sp: the min_mz variable -in
+    );
+
+
+  /**
+   *\returns the max_mz value of the scorer
+   */
+  FLOAT_T getSpMaxMz();
+
+  /**
+   *sets the scorer max_mz value
+   */
+  void setSpMaxMz(
+    FLOAT_T sp_max_mz ///< used for Sp: the max_mz variable -in
+    );
+
+  /**
+   *\returns the max bin index of the scorer array(s).
+   */
+  int getMaxBin();
+
+  /**
+   *\returns the sp_array_resolution value of the scorer
+   */
+  FLOAT_T getSpArrayResolution();
+
+  /**
+   *sets the scorer sp_array_resolution value
+   */
+  void setSpArrayResolution(
+    FLOAT_T sp_array_resolution ///< used for Sp: the sp_array_resolution variable -in
+    );
+
+  /**
+   *\returns the sp_sum_resolution value of the scorer
+   */
+  FLOAT_T getSpSumResolution();
+
+  /**
+   *sets the scorer sp_sum_resolution value
+   */
+  void setSpSumResolution(
+    FLOAT_T sp_sum_resolution ///< used for Sp: the sp_sum_resolution variable -in
+    );
+
+  /**
+   *\returns the equalize_resolution value of the scorer
+   */
+  FLOAT_T getSpEqualizeResolution();
+
+  /**
+   *sets the scorer equalize_resolution value
+   */
+  void setSpEqualizeResolution(
+    FLOAT_T sp_equalize_resolution ///< used for Sp: the equalize_resolution variable -in
+    );
+
+  /**
+   *\returns the fraction of b,y ions matched for scoring SP, the values is valid for the last ion series scored with this scorer object
+   */
+  FLOAT_T getSpBYIonFractionMatched();
+
+  /**
+   *\returns the number of possible matched b,y ions for scoring SP
+   */
+  int getSpBYIonMatched();
+
+  /**
+   *\returns the number of matched b,y ions for scoring SP
+   */
+  int getSpBYIonPossible();
+
+  /**
+   * Generate the processed peaks for the spectrum and return via the
+   * intensities array.  It's implemented here so that
+   * create_intensity_array_observed() can remain private and so that
+   * the scorer->observed array can be accessed directly.
+   * .
+   */
+  static void getProcessedPeaks(
+    Crux::Spectrum* spectrum, 
+    int charge,
+    SCORER_TYPE_T score_type,
+    FLOAT_T** intensities, ///< pointer to array of intensities
+    int* mz_bins,
+    OBSERVED_PREPROCESS_STEP_T stop_after);
+
+  /**
+   * create the intensity arrays for both observed and theoretical spectrum
+   * SCORER must have been created for XCORR type
+   * \returns true if successful, else false
+   */
+  bool createIntensityArrayXcorr(
+    Crux::Spectrum* spectrum,    ///< the spectrum to score(observed) -in
+    int charge               ///< the peptide charge -in 
+    );
+
+  /**
+   * Uses an iterative cross correlation
+   *
+   *\return the final cross correlation score between the observed and the
+   *theoretical spectra
+   */
+  FLOAT_T crossCorrelation(
+    FLOAT_T* theoretical ///< the theoretical spectrum to score against the observed spectrum -in
+    );
+
+  FLOAT_T* getIntensityArrayObserved();
+
+  bool createIntensityArrayObserved(
+    Crux::Spectrum* spectrum,    ///< the spectrum to score(observed) -in
+    int charge,              ///< the peptide charge -in 
+    OBSERVED_PREPROCESS_STEP_T stop_after = XCORR_STEP ///< the preprocessing step to stop after -in
+    );
+
+  /**
+   * adds the intensity at add_idx
+   * if, there already exist a peak at the index, only overwrite if
+   * intensity is larger than the existing peak.
+   */
+  static void addIntensity(
+    FLOAT_T* intensity_array, ///< the intensity array to add intensity at index add_idx -out
+    int add_idx,            ///< the idex to add the intensity -in
+    FLOAT_T intensity         ///< the intensity to add -in
+    );
+  
+  /**
+   * \return the score using the observed[idx] * intensity
+   */
+  FLOAT_T scoreIntensity(
+    int add_idx,
+    FLOAT_T intensity
+  );
+
+};
+
+
+/*************************************
+ * Score for LOGP_*
+ ************************************/
+
+/**
+ * Compute a p-value for a given score w.r.t. an exponential with the given parameters.
+ *\returns the -log(p_value) of the exponential distribution
+ */
+FLOAT_T score_logp_exp_sp(
+  FLOAT_T sp_score, ///< The sp score for the scoring peptide -in
+  FLOAT_T mean      ///< The overall mean of the sp scored peptides -in
+  );
+
+/**
+ * Compute a p-value for a given score w.r.t. an exponential with the given parameters.
+ *\returns the -log(p_value) of the exponential distribution with Bonferroni correction
+ */
+FLOAT_T score_logp_bonf_exp_sp(
+  FLOAT_T sp_score, ///< The sp score for the scoring peptide -in
+  FLOAT_T mean,      ///< The overall mean of the sp scored peptides -in
+  int num_peptide  ///< The number of peptides scored for sp
+  );
+
+/**
+ * Apply a Bonferroni correction to a given p-value.
+ * \returns the corrected -log(p_value)
+ */
+FLOAT_T bonferroni_correction(
+  FLOAT_T p_value, ///< The uncorrected p-value.
+  int num_tests ///< The number of tests performed.
+  );
+
+/**
+ * Compute a p-value for a given score w.r.t. a Weibull with given parameters.
+ *\returns the p_value
+ */
+FLOAT_T compute_weibull_pvalue(
+  FLOAT_T score, ///< The score for the scoring peptide -in
+  FLOAT_T eta,   ///< The eta parameter of the Weibull -in
+  FLOAT_T beta,  ///< The beta parameter of the Weibull -in
+  FLOAT_T shift  ///< The shift parameter of the Weibull -in
+  );
+
+/**
+ * Compute a p-value for a given score w.r.t. a Weibull with given parameters.
+ *\returns the -log(p_value)
+ */
+double score_logp_bonf_weibull(
+  FLOAT_T score, ///< The score for the scoring peptide -in
+  FLOAT_T eta,  ///< The eta parameter of the Weibull
+  FLOAT_T beta, ///< The beta parameter of the Weibull
+  FLOAT_T shift, ///< The shift parameter of the Weibull
+  int num_peptides ///< The number of peptides
+  );
+
+
+/**
+ * Compute a p-value for a given score w.r.t. an EVD with the given parameters.
+ *\returns the -log(p_value) of the EVD distribution 
+ */
+FLOAT_T score_logp_evd_xcorr(
+  FLOAT_T xcorr_score, ///< The xcorr score for the scoring peptide -in
+  FLOAT_T mu, ///<  EVD parameter Xcorr(characteristic value of extreme value distribution) -in
+  FLOAT_T l_value ///< EVD parameter Xcorr(decay constant of extreme value distribution) -in
+  );
+
+/**
+ * Compute a p-value for a given score w.r.t. an EVD with the given parameters.
+ *\returns the -log(p_value) of the EVD distribution with Bonferroni correction
+ */
+FLOAT_T score_logp_bonf_evd_xcorr(
+  FLOAT_T xcorr_score, ///< The xcorr score for the scoring peptide -in
+  FLOAT_T mu, ///<  EVD parameter Xcorr(characteristic value of extreme value distribution) -in
+  FLOAT_T l_value, ///< EVD parameter Xcorr(decay constant of extreme value distribution) -in
+  int num_peptide  ///< The number of peptides scored for sp -in
+  );
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif
diff --git a/src/model/Spectrum.cpp b/src/model/Spectrum.cpp
new file mode 100644
index 0000000..e3764d9
--- /dev/null
+++ b/src/model/Spectrum.cpp
@@ -0,0 +1,971 @@
+/*************************************************************************//**
+ * \file Spectrum.cpp
+ * AUTHOR: Chris Park, cpp-ified by Barbara Frewen
+ * CREATE DATE:  June 22 2006, turned into a class Sept 21, 2010
+ * \brief code to support working with spectra
+ ****************************************************************************/
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#include "Spectrum.h"
+#include "util/utils.h"
+#include "util/mass.h"
+#include "util/Params.h"
+#include "parameter.h"
+#include "Scorer.h"
+#include "io/carp.h"
+#include <vector>
+#include <string>
+#include "io/DelimitedFile.h"
+#include "io/MatchFileReader.h"
+#include "MSToolkit/Spectrum.h"
+#include "util/FileUtils.h"
+#include "util/StringUtils.h"
+
+using namespace std;
+using namespace Crux;
+namespace pzd = pwiz::msdata;
+
+/**
+ * Default constructor.
+ */
+Spectrum::Spectrum() :
+   first_scan_(0),
+   last_scan_(0),
+   precursor_mz_(0),
+   min_peak_mz_(0),
+   max_peak_mz_(0),
+   total_energy_(0),
+   lowest_sp_(0),
+   has_total_energy_(false),
+   has_lowest_sp_(false),
+   has_peaks_(false),
+   sorted_by_mz_(false),
+   sorted_by_intensity_(false),
+   has_mz_peak_array_(false)
+{
+  mz_peak_array_ = NULL;
+}
+
+/**
+ * Constructor initializes spectrum with given values.
+ */ 
+Spectrum::Spectrum (
+ int               first_scan,   ///< The number of the first scan -in
+ int               last_scan,    ///< The number of the last scan -in
+ FLOAT_T           precursor_mz, ///< The m/z of the precursor 
+ const vector<int>& possible_z,  ///< The possible charge states 
+ const string&     filename      ///< Optional filename
+ ) : 
+   first_scan_(first_scan),
+   last_scan_(last_scan),
+   precursor_mz_(precursor_mz), 
+   min_peak_mz_(0),
+   max_peak_mz_(0),
+   total_energy_(0),
+   lowest_sp_(0),
+   has_total_energy_(false),
+   has_lowest_sp_(false),
+   filename_(filename),
+   has_peaks_(false),
+   sorted_by_mz_(false),
+   sorted_by_intensity_(false),
+   has_mz_peak_array_(false)
+ {
+  mz_peak_array_ = NULL;
+
+  for (unsigned int idx=0;idx<possible_z.size();idx++) {
+    SpectrumZState zstate;
+    zstate.setMZ(precursor_mz, possible_z.at(idx));
+    zstates_.push_back(zstate);
+  }
+}
+
+/**
+ * Default destructor.
+ */
+Spectrum::~Spectrum()
+{
+  free_peak_vector(peaks_);
+  
+  if(has_mz_peak_array_){
+    delete [] mz_peak_array_;
+  }
+}
+
+/**
+ * \returns the peak iterator that signifies the start of the peaks 
+ * in the spectrum
+ */
+PeakIterator Spectrum::begin() const {
+  return peaks_.begin();
+}
+
+/**
+ * \returns the peak iterator that signifies the end of the peaks 
+ * in the spectrum
+ */
+PeakIterator Spectrum::end() const {
+  return peaks_.end();
+}
+
+/**
+ * Prints a spectrum object to file in ms2 format.
+ */
+void Spectrum::print(FILE* file) ///< output file to print at -out
+{
+  int mass_precision = Params::GetInt("mass-precision");
+  fprintf(file, "S\t%06d\t%06d\t%.*f\n", 
+         first_scan_,
+         last_scan_,
+         mass_precision,
+         precursor_mz_);
+
+  // print 'I' line
+  for(size_t line_idx = 0; line_idx < i_lines_v_.size(); line_idx++){
+    fprintf(file, "%s\n", (i_lines_v_[line_idx]).c_str());
+  }
+  
+  // print 'Z', 'D' line
+  for(size_t z_idx = 0; z_idx < zstates_.size(); z_idx++){
+    fprintf(file, "Z\t%d\t%.*f\n", zstates_[z_idx].getCharge(), mass_precision,
+            zstates_[z_idx].getSinglyChargedMass());
+    // are there any 'D' lines to print?
+    if(z_idx < d_lines_v_.size() ){
+      fprintf(file, "%s", d_lines_v_[z_idx].c_str());
+    }
+  }
+  
+  // print 'EZ' line
+  for (size_t ez_idx = 0; ez_idx < ezstates_.size(); ez_idx++) {
+    fprintf(file, "I\tEZ\t%d\t%.4f\t%.4f\t%.4f\n", ezstates_[ez_idx].getCharge(),
+      ezstates_[ez_idx].getSinglyChargedMass(),
+      ezstates_[ez_idx].getRTime(),
+      ezstates_[ez_idx].getArea());
+  }
+
+  if (zstates_.size() == 0 && ezstates_.size() != 0) {
+    for (size_t ez_idx = 0; ez_idx < ezstates_.size(); ez_idx++) {
+      fprintf(file, "Z\t%d\t%.*f\n", ezstates_[ez_idx].getCharge(), mass_precision,
+      ezstates_[ez_idx].getSinglyChargedMass());
+    }
+  }
+
+  // print peaks
+  for(int peak_idx = 0; peak_idx < (int)peaks_.size(); ++peak_idx){
+    fprintf(file, "%.*f %.4f\n",
+            mass_precision,
+            peaks_[peak_idx]->getLocation(),
+            peaks_[peak_idx]->getIntensity());
+  }
+}
+
+/**
+ * Prints a spectrum in ms2 format with the given intensities instead of the
+ * observed peaks.  Assumes intensities are in m/z bins from 0 to
+ * max_mz_bin.  Only prints non-zero intensities.
+ */
+void Spectrum::printProcessedPeaks(
+  SpectrumZState& zstate,           ///< print at this charge state
+  FLOAT_T* intensities, ///< intensities of new peaks
+  int max_mz_bin,       ///< num_bins in intensities
+  FILE* file){          ///< print to this file
+
+  int mass_precision = Params::GetInt("mass-precision");
+
+  // print S line
+  fprintf(file, "S\t%06d\t%06d\t%.*f\n", 
+          first_scan_,
+          last_scan_,
+          mass_precision,
+          precursor_mz_);
+
+  // print I line(s)
+  for(size_t line_idx = 0; line_idx < i_lines_v_.size(); line_idx++){
+    fprintf(file, "%s\n", (i_lines_v_[line_idx]).c_str());
+  }
+
+  // print 'Z', 'D' line
+  if( zstate.getCharge() != 0 ){  // print only one charge state
+    fprintf(file, "Z\t%d\t%.*f\n", zstate.getCharge(), mass_precision,
+            zstate.getSinglyChargedMass());
+    // TODO find associated Z line and print
+  } else {  // print all charge states
+
+    for(size_t z_idx = 0; z_idx < zstates_.size(); z_idx++){
+      fprintf(file, "Z\t%d\t%.*f\n", zstates_[z_idx].getCharge(), mass_precision,
+              zstates_[z_idx].getSinglyChargedMass());
+      // are there any 'D' lines to print?
+      if(z_idx < d_lines_v_.size()){
+        fprintf(file, "%s", d_lines_v_[z_idx].c_str());
+      }
+    }
+  }
+
+  // print peaks
+  for(int bin_idx = 0; bin_idx < max_mz_bin; bin_idx++){
+    string intensity = StringUtils::ToString(intensities[bin_idx], mass_precision);
+    // Make sure the value has at least one non-zero digit, once it has been
+    // converted to a string with the specified precision
+    if (intensity.find_first_of("123456789") == string::npos) {
+      continue;
+    }
+    if (Params::GetString("output-units") == "mz") {
+      double mz = (bin_idx - 0.5 + Params::GetDouble("mz-bin-offset")) *
+        Params::GetDouble("mz-bin-width");
+      fprintf(file, "%f %s\n", mz, intensity.c_str());
+    } else {
+      fprintf(file, "%d %s\n", bin_idx, intensity.c_str());
+    }
+  }
+  return;
+}
+
+
+/**
+ * Prints a spectrum object to file in sqt format.
+ */
+void Spectrum::printSqt(
+  FILE* file,           ///< output file to print to -out
+  int num_matches,      ///< number of peptides compared to this spec -in
+  SpectrumZState& zstate            ///< charge used for the search -in
+  ){
+
+  fprintf(file,
+          "S\t%d\t%d\t%d\t%.1f\t%s\t%.*f\t%.2f\t%.*f\t%d\n", 
+          first_scan_, 
+          last_scan_,
+          zstate.getCharge(), 
+          0.0, // FIXME dummy <process time>
+          "server", // FIXME dummy <server>
+          Params::GetInt("mass-precision"),
+          zstate.getSinglyChargedMass(), //this is used in search
+          total_energy_,
+          Params::GetInt("precision"),
+          lowest_sp_,
+          num_matches);
+}
+
+/**
+ * Copy constructor.  Deep copy--allocates new peaks for peak vector.
+ */
+ Spectrum::Spectrum(
+  const Spectrum& old_spectrum ///< the spectrum to take values from
+  ) :
+ first_scan_(old_spectrum.first_scan_),
+ last_scan_(old_spectrum.last_scan_),
+ precursor_mz_(old_spectrum.precursor_mz_),
+ zstates_(old_spectrum.zstates_),
+ min_peak_mz_(old_spectrum.min_peak_mz_),
+ max_peak_mz_(old_spectrum.max_peak_mz_),
+ total_energy_(old_spectrum.total_energy_),
+ filename_(old_spectrum.filename_),
+ i_lines_v_(old_spectrum.i_lines_v_),
+ d_lines_v_(old_spectrum.d_lines_v_),
+ has_peaks_(old_spectrum.has_peaks_),
+ sorted_by_mz_(old_spectrum.sorted_by_mz_),
+ sorted_by_intensity_(old_spectrum.sorted_by_intensity_),
+ has_mz_peak_array_(old_spectrum.has_mz_peak_array_)
+{
+
+  // copy each peak
+  for(int peak_idx=0; peak_idx < (int)old_spectrum.peaks_.size(); ++peak_idx){
+    this->addPeak(old_spectrum.peaks_[peak_idx]->getIntensity(),
+                  old_spectrum.peaks_[peak_idx]->getLocation());
+  }
+
+  /*  Should we do this??
+  if( old_spectrum.mz_peak_array ){
+    populateMzPeakArray();
+  }
+  */
+}
+
+void Spectrum::copyFrom(Spectrum *src) {
+
+ first_scan_ = src->first_scan_;
+ last_scan_ = src->last_scan_;
+ precursor_mz_ = src->precursor_mz_;
+ zstates_ = src->zstates_;
+ min_peak_mz_ = src->min_peak_mz_;
+ max_peak_mz_ = src->max_peak_mz_;
+ filename_ = src->filename_;
+ i_lines_v_  = src->i_lines_v_;
+ d_lines_v_ = src-> d_lines_v_;
+ has_peaks_ = src-> has_peaks_;
+ sorted_by_mz_ = src->sorted_by_mz_;
+ sorted_by_intensity_ = src->sorted_by_intensity_;
+ has_mz_peak_array_ = src->has_mz_peak_array_;
+ // copy each peak
+ for(int peak_idx=0; peak_idx < (int)src->peaks_.size(); ++peak_idx){
+   this->addPeak(src->peaks_[peak_idx]->getIntensity(),
+                  src->peaks_[peak_idx]->getLocation());
+  }
+
+  /*  Should we do this??
+  if( old_spectrum.mz_peak_array ){
+    populateMzPeakArray();
+  }
+  */
+
+}
+
+/**
+ * Transfer values from an MSToolkit spectrum to the crux Spectrum.
+ * \returns TRUE if success. FALSE is failure.
+ */
+bool Spectrum::parseMstoolkitSpectrum
+  (MSToolkit::Spectrum* mst_spectrum, ///< the input MSToolkit spectrum -in
+  const char* filename ///< filename of the spectrum
+  ) {
+
+  // clear any existing values
+  zstates_.clear();
+
+  free_peak_vector(peaks_);
+  i_lines_v_.clear();
+  d_lines_v_.clear();
+  if( mz_peak_array_ ){ delete [] mz_peak_array_; }
+
+  MSToolkit::Spectrum* mst_real_spectrum = (MSToolkit::Spectrum*)mst_spectrum;
+
+  //set first_scan, last_scan, and precursor_mz.
+  first_scan_ = mst_real_spectrum->getScanNumber();
+  last_scan_ = mst_real_spectrum->getScanNumber();
+  precursor_mz_ = mst_real_spectrum->getMZ();
+
+  // setfilename of empty spectrum
+  filename_ = filename;
+
+  //add all peaks.
+  for(int peak_idx = 0; peak_idx < (int)mst_real_spectrum->size(); peak_idx++){
+    this->addPeak(mst_real_spectrum->at(peak_idx).intensity,
+                   mst_real_spectrum->at(peak_idx).mz);
+  }
+  
+  //add possible charge states.
+  if(  mst_real_spectrum->sizeZ() > 0 ){
+    for (int z_idx = 0; z_idx < mst_real_spectrum -> sizeZ(); z_idx++) {
+      SpectrumZState zstate;
+      zstate.setSinglyChargedMass(
+        mst_real_spectrum->atZ(z_idx).mh,
+        mst_real_spectrum->atZ(z_idx).z);
+      zstates_.push_back(zstate);
+    }
+  } else if (!Params::GetBool("pm-ignore-no-charge")) { // if no charge states detected, decide based on spectrum
+    assignZState(); 
+  } else {
+    return false;
+  }
+
+  return true;
+}
+
+/**
+ * Transfer values from a proteowizard SpectrumInfo object to the
+ * crux spectrum.
+ */
+bool Spectrum::parsePwizSpecInfo(
+  const pzd::SpectrumPtr& pwiz_spectrum,
+  int firstScan,
+  int lastScan
+){
+  // clear any existing values
+  zstates_.clear();
+  ezstates_.clear();
+  free_peak_vector(peaks_);
+  i_lines_v_.clear();
+  d_lines_v_.clear();
+  if( mz_peak_array_ ){ free(mz_peak_array_); }
+
+  // assign new values
+  first_scan_ = firstScan;
+  last_scan_ = lastScan;
+
+  // get peaks
+  int num_peaks = pwiz_spectrum->defaultArrayLength;
+  vector<double>& mzs = pwiz_spectrum->getMZArray()->data;
+  vector<double>& intensities = pwiz_spectrum->getIntensityArray()->data;
+  for(int peak_idx = 0; peak_idx < num_peaks; peak_idx++){
+    addPeak(intensities[peak_idx], mzs[peak_idx]);
+  }
+  has_peaks_ = true;
+
+  // get precursor m/z and charge
+  // is there exactly one precursor?
+  if( pwiz_spectrum->precursors.size() != 1 ){  
+    carp(CARP_FATAL, "Spectrum %d has more than one precursor.", first_scan_);
+  }
+  // get the isolation window as the precursor m/z
+  pzd::IsolationWindow iso_window = 
+                       pwiz_spectrum->precursors[0].isolationWindow;
+  bool have_precursor_mz = iso_window.hasCVParam(pzd::MS_isolation_window_target_m_z);
+  if (have_precursor_mz) {
+    precursor_mz_ =
+      iso_window.cvParam(pzd::MS_isolation_window_target_m_z).valueAs<double>();
+  }
+
+  // each charge state(s) stored in selectedIon(s)
+  // is there at least one selected ion?
+  vector<pzd::SelectedIon> ions = pwiz_spectrum->precursors[0].selectedIons;
+  if (ions.empty()) {
+    carp(CARP_FATAL, "No selected ions in spectrum %d.", first_scan_);
+  }
+
+  // determined charge states will be stored
+  // one per selected ion
+  if (ions[0].hasCVParam(pzd::MS_charge_state)) {
+    carp(CARP_DEBUG, "MS_charge_state");
+    // get each charge state and possibly the associated mass
+    for(size_t ion_idx = 0; ion_idx < ions.size(); ion_idx++){
+      int charge = ions[ion_idx].cvParam(pzd::MS_charge_state).valueAs<int>();
+      carp(CARP_DEBUG, "Charge:%d", charge);
+      if (ions[ion_idx].hasCVParam(pzd::MS_accurate_mass_OBSOLETE)) {
+        //bullseye-determined charge states
+        FLOAT_T accurate_mass = 
+          ions[ion_idx].cvParam(pzd::MS_accurate_mass_OBSOLETE).valueAs<FLOAT_T>();
+        carp(CARP_DEBUG, "accurate mass:%f charge:%i",accurate_mass, charge);
+        SpectrumZState zstate;
+        zstate.setSinglyChargedMass(accurate_mass, charge);
+        ezstates_.push_back(zstate);
+      } else if (ions[ion_idx].hasCVParam(pzd::MS_selected_ion_m_z)) {
+        FLOAT_T mz =
+          ions[ion_idx].cvParam(pzd::MS_selected_ion_m_z).valueAs<FLOAT_T>();
+        carp(CARP_DEBUG, "mz:%g", mz);
+        //if we don't have a precursor set yet, set it now.
+        if (!have_precursor_mz) {
+          precursor_mz_ = mz;
+        }
+        SpectrumZState zstate;
+        zstate.setMZ(mz, charge);
+        zstates_.push_back(zstate);
+      } else {
+        ostringstream oss;
+        oss << "Cannot find precursor mass! CVParams:"<<endl;
+
+        for (vector<pwiz::data::CVParam>::iterator iter = ions[0].cvParams.begin();
+             iter != ions[0].cvParams.end();
+             ++iter) {
+          oss<<"id:"<<(int)iter->cvid<<" value:"<<iter->value;
+        }
+        string err_string = oss.str();
+        carp(CARP_FATAL, err_string);
+      }
+    }
+  } else {
+    if (Params::GetBool("use-z-line")) {
+      const vector<pwiz::data::UserParam>& specUserParams = pwiz_spectrum->userParams;
+      for (vector<pwiz::data::UserParam>::const_iterator i = specUserParams.begin();
+           i != specUserParams.end();
+           ++i) {
+        if (i->name == "ms2 file charge state") {
+          const string& zLine = i->value; // "<charge> <m/z>"
+          size_t separator = zLine.find(" ");
+          SpectrumZState zstate;
+          zstate.setMZ(boost::lexical_cast<double>(zLine.substr(separator + 1)),
+                       boost::lexical_cast<int>(zLine.substr(0, separator)));
+          zstates_.push_back(zstate);
+        }
+      }
+    }
+
+    if (zstates_.empty()) {
+      if (ions[0].hasCVParam(pzd::MS_possible_charge_state)) {
+        // possible charge states will all be stored in the first selected ion
+        carp(CARP_DEBUG, "charges stored ion");
+        vector<pzd::CVParam> charges = 
+          ions[0].cvParamChildren(pzd::MS_possible_charge_state);
+        for (size_t charge_idx = 0; charge_idx < charges.size(); charge_idx++) {
+          SpectrumZState zstate;
+          zstate.setMZ(precursor_mz_, charges[charge_idx].valueAs<int>());
+          zstates_.push_back(zstate);
+        }
+      } else if (!Params::GetBool("pm-ignore-no-charge")) { // we have no charge information
+        assignZState(); //do choose charge and add +1 or +2,+3
+      } else {
+        return false;
+      }
+    }
+  }
+
+  return true;
+}
+
+/**
+ * Adds a peak to the spectrum given a intensity and location
+ * calls update_spectrum_fields to update num_peaks, min_peak ...
+ */
+void Spectrum::addPeak
+( FLOAT_T intensity, ///< the intensity of peak to add -in
+  FLOAT_T location_mz ///< the location of peak to add -in
+  )
+{
+  Peak *peak = new Peak(intensity, location_mz);
+  peaks_.push_back(peak);
+  updateFields(intensity, location_mz);
+  has_peaks_ = true;
+}
+
+void Spectrum::truncatePeaks(int count) {
+  if (count < 0) {
+    count = 0;
+  }
+  if (peaks_.size() <= count) {
+    return;
+  }
+  min_peak_mz_ = count > 0 ? numeric_limits<FLOAT_T>::max() : 0;
+  max_peak_mz_ = 0;
+  vector<Peak*>::const_iterator removePoint = peaks_.begin() + count;
+  for (vector<Peak*>::const_iterator i = peaks_.begin(); i != peaks_.end(); i++) {
+    if (i < removePoint) {
+      FLOAT_T mz = (*i)->getLocation();
+      if (mz < min_peak_mz_) {
+        min_peak_mz_ = mz;
+      }
+      if (mz > max_peak_mz_) {
+        max_peak_mz_ = mz;
+      }
+    } else {
+      total_energy_ -= (*i)->getIntensity();
+      delete *i;
+    }
+  }
+  peaks_.resize(count);
+}
+
+/**
+ * Creates and fills mz_peak_array_, the array of pointers to peaks
+ * in the Spectrum's vector of peaks.  Peaks in the array are
+ * indexed by ???
+ */
+void Spectrum::populateMzPeakArray()
+{
+  if (has_mz_peak_array_ == true){
+    return;
+  }
+  
+  int array_length = MZ_TO_PEAK_ARRAY_RESOLUTION * MAX_PEAK_MZ;
+  mz_peak_array_ = new Peak * [array_length];
+  for (int peak_idx = 0; peak_idx < array_length; peak_idx++){
+    mz_peak_array_[peak_idx] = NULL;
+  }
+  for(int peak_idx = 0; peak_idx < (int)peaks_.size(); peak_idx++){
+    Peak * peak = peaks_[peak_idx];
+    FLOAT_T peak_mz = peak->getLocation();
+    int mz_idx = (int) (peak_mz * MZ_TO_PEAK_ARRAY_RESOLUTION);
+    if (mz_peak_array_[mz_idx] != NULL){
+      carp(CARP_INFO, "Peak collision at mz %.3f = %i", peak_mz, mz_idx);
+      if (mz_peak_array_[mz_idx]->getIntensity() < peak->getIntensity()) {
+        mz_peak_array_[mz_idx] = peak;
+      }
+    } else {
+      mz_peak_array_[mz_idx] = peak; 
+    }
+  }
+  has_mz_peak_array_ = true;
+}
+
+/**
+ * \returns The closest intensity within 'max' of 'mz' in 'spectrum'
+ * NULL if no peak.
+ * This should lazily create the data structures within the
+ * spectrum object that it needs.
+ * TODO: reimplement with faster peak lookup
+ */
+Peak * Spectrum::getNearestPeak(
+  FLOAT_T mz, ///< the mz of the peak around which to sum intensities -in
+  FLOAT_T max ///< the maximum distance to get intensity -in
+  )
+{
+  this->populateMzPeakArray(); // for rapid peak lookup by mz
+
+  FLOAT_T min_distance = BILLION;
+  int min_mz_idx = (int)((mz - max) * MZ_TO_PEAK_ARRAY_RESOLUTION + 0.5);
+  min_mz_idx = min_mz_idx < 0 ? 0 : min_mz_idx;
+  int max_mz_idx = (int)((mz + max) * MZ_TO_PEAK_ARRAY_RESOLUTION + 0.5);
+  int absolute_max_mz_idx = MAX_PEAK_MZ * MZ_TO_PEAK_ARRAY_RESOLUTION - 1;
+  max_mz_idx = max_mz_idx > absolute_max_mz_idx 
+    ? absolute_max_mz_idx : max_mz_idx;
+  Peak * peak = NULL;
+  Peak * nearest_peak = NULL;
+  int peak_idx;
+  for (peak_idx=min_mz_idx; peak_idx < max_mz_idx + 1; peak_idx++){
+    if ((peak = mz_peak_array_[peak_idx]) == NULL){
+      continue;
+    }
+    FLOAT_T peak_mz = peak->getLocation();
+    FLOAT_T distance = fabs(mz - peak_mz);
+    if (distance > max){
+      continue;
+    }
+    if (distance < min_distance){
+      nearest_peak = peak;
+      min_distance = distance;
+    }
+  }
+  return nearest_peak;
+}
+
+/**
+ * \returns The PEAK_T within 'max' of 'mz' in 'spectrum'
+ * that is the maximum intensity.
+ * NULL if no peak within 'max'
+ * This should lazily create the data structures within the
+ * spectrum object that it needs.
+ */
+Peak* Spectrum::getMaxIntensityPeak(
+  FLOAT_T mz, ///< the mz of the peak to find
+  FLOAT_T max ///< the maximum distance to get intensity -in
+  ) {
+
+  FLOAT_T max_intensity = -BILLION;
+  Peak* max_intensity_peak = NULL;
+
+  for (PeakIterator peak_iter = begin();
+    peak_iter != end();
+    ++peak_iter) {
+
+    Peak* peak = *peak_iter;
+    FLOAT_T peak_mz = peak->getLocation();
+    FLOAT_T distance = fabs(mz - peak_mz);
+    FLOAT_T intensity = peak->getIntensity();
+    if ((distance <= max) && (intensity > max_intensity)){
+      max_intensity_peak = peak;
+      max_intensity = intensity;
+    }
+  }
+  return max_intensity_peak;
+}
+
+/**
+ * Updates num_peaks, min_peak_mz, max_peak_mz, total_energy.
+ */
+void Spectrum::updateFields(
+  FLOAT_T intensity, ///< the intensity of the peak that has been added -in
+  FLOAT_T location ///< the location of the peak that has been added -in
+) {
+  // is new peak the smallest peak
+  if(peaks_.size() == 1 || min_peak_mz_ > location){
+    min_peak_mz_ = location;
+  }
+  // is new peak the largest peak
+  if(peaks_.size() == 1 || max_peak_mz_ < location){
+    max_peak_mz_ = location;
+  }
+  // update total_energy
+  total_energy_ += intensity;
+}
+
+/**
+ * \returns The number of the first scan.
+ */
+int Spectrum::getFirstScan() const
+{
+  return first_scan_;
+}
+
+/**
+ * \returns The number of the last scan.
+ */
+int Spectrum::getLastScan() const
+{
+  return last_scan_;
+}
+
+/**
+ * \returns The m/z of the precursor.
+ */
+FLOAT_T Spectrum::getPrecursorMz() const
+{
+  return precursor_mz_;
+}
+
+/**
+ * \returns The minimum m/z of all peaks.
+ */
+FLOAT_T Spectrum::getMinPeakMz()
+{
+  return min_peak_mz_;
+}
+
+/**
+ * \returns The maximum m/z of all peaks.
+ */
+FLOAT_T Spectrum::getMaxPeakMz()
+{
+  return max_peak_mz_;
+}
+
+/**
+ * \returns The number of peaks.
+ */
+int Spectrum::getNumPeaks() const
+{
+  return (int)peaks_.size();
+}
+
+
+/**
+ * \returns The sum of intensities in all peaks.
+ */
+double Spectrum::getTotalEnergy()
+{
+  return total_energy_;
+}
+
+/**
+ * Sets the total ion current.
+ */
+void Spectrum::setTotalEnergy(FLOAT_T tic)
+{
+  total_energy_ = tic;
+}
+
+/**
+ * returns whether there is a total energy
+ */
+bool Spectrum::hasTotalEnergy()
+{
+  return has_total_energy_;
+}
+
+/**
+ * sets whether there is a total energy
+ */
+void Spectrum::setHasTotalEnergy(bool has_total_energy)
+{
+  has_total_energy_ = has_total_energy;
+}
+
+/**
+ * Sets the lowest Sp score.
+ */
+void Spectrum::setLowestSp(FLOAT_T sp)
+{
+  lowest_sp_ = sp;
+}
+
+/**
+ * Returns the lowest Sp score
+ */
+FLOAT_T Spectrum::getLowestSp()
+{
+  return lowest_sp_;
+}
+
+/**
+ * returns whether there is a lowest sp score
+ */
+bool Spectrum::hasLowestSp()
+{
+  return has_lowest_sp_;
+}
+
+/**
+ * sets whether there is a lowest sp score
+ */
+void Spectrum::setHasLowestSp(bool has_lowest_sp)
+{
+  has_lowest_sp_ = has_lowest_sp;
+}
+
+/**
+ * \returns A read-only reference to the vector of possible chare
+ * states for this spectrum.  If EZ states are available, return those.
+ */
+const vector<SpectrumZState>& Spectrum::getZStates() const {
+  if (ezstates_.size() != 0) {
+    return ezstates_;
+  } else {
+    return zstates_;
+  }
+}
+
+
+/**
+ *  Considers the spectrum-charge parameter and returns the
+ *  appropriate charge states that should be searched for this
+ *  spectrum: all of them or the one selected by the parameter.
+ * /returns A vector of charge states to consider for this spectrum.
+ */ 
+vector<SpectrumZState> Spectrum::getZStatesToSearch() {
+  vector<SpectrumZState> select_zstates;
+  string charge_str = Params::GetString("spectrum-charge");
+
+  if (charge_str == "all") { // return full array of charges
+    select_zstates = getZStates();
+  } else { // return a single charge state.
+    int param_charge = atoi(charge_str.c_str());
+    
+    if( (param_charge < 1) || (param_charge > MAX_CHARGE) ){
+      carp(CARP_FATAL, "spectrum-charge option must be 1,2,3,.. %d or 'all'.  "
+           "'%s' is not valid", MAX_CHARGE, charge_str.c_str());
+    }
+
+    for (unsigned int zstate_idx=0;zstate_idx < getNumZStates();zstate_idx++) {
+      if (getZState(zstate_idx).getCharge() == param_charge) {
+        select_zstates.push_back(getZState(zstate_idx));
+      }
+    }
+  }
+
+  return select_zstates;
+}
+
+/**
+ * \returns the ZState at the requested index
+ */
+const SpectrumZState& Spectrum::getZState(
+  int idx ///< the zstate index
+) {
+  return getZStates().at(idx);
+}
+
+
+/**
+ * \returns The number of possible charge states of this spectrum.
+ */
+unsigned int Spectrum::getNumZStates() const {
+  return getZStates().size();
+}
+
+/**
+ * \returns The intensity of the peak with the maximum intensity.
+ */
+FLOAT_T Spectrum::getMaxPeakIntensity()
+{
+  FLOAT_T max_intensity = -1;
+
+  for(int peak_idx = 0; peak_idx < (int)peaks_.size(); ++peak_idx){
+    if (max_intensity <= peaks_[peak_idx]->getIntensity()) {
+      max_intensity = peaks_[peak_idx]->getIntensity();
+    }
+  }
+  return max_intensity; 
+}
+
+/**
+ * Normalize peak intensities so that they sum to unity.
+ */
+void Spectrum::sumNormalize()
+{
+  for(int peak_idx = 0; peak_idx < (int)peaks_.size(); peak_idx++){
+    Peak * peak = peaks_[peak_idx];
+    FLOAT_T new_intensity = peak->getIntensity() / total_energy_;
+    peak->setIntensity(new_intensity);
+  }
+}
+
+/**
+ * Sort peaks
+ */
+void Spectrum::sortPeaks(PEAK_SORT_TYPE_T type)
+{
+  if ((type == _PEAK_LOCATION && sorted_by_mz_) ||
+      (type == _PEAK_INTENSITY && sorted_by_intensity_)) {
+    return;
+  }
+  sort_peaks(peaks_, type);
+  sorted_by_mz_ = (type == _PEAK_LOCATION);
+  sorted_by_intensity_ = (type == _PEAK_INTENSITY);
+}
+
+/**
+ * Populate peaks with rank information.
+ */
+void Spectrum::rankPeaks()
+{
+  sort_peaks(peaks_, _PEAK_INTENSITY);
+  sorted_by_intensity_ = true;
+  sorted_by_mz_ = false;
+  int rank = (int)peaks_.size();
+  for(int peak_idx = 0; peak_idx < (int) peaks_.size(); peak_idx++){
+    Peak * peak = peaks_[peak_idx];
+    FLOAT_T new_rank = rank/(float)peaks_.size();
+    rank--;
+    peak->setIntensityRank(new_rank);
+  }
+
+}
+
+/**
+ * \returns The name of the file (no path or extension) this spectrum
+ * came from or an empty string, if filename is unavailable.
+ */
+const char* Spectrum::getFilename() {
+  return FileUtils::Stem(filename_).c_str();
+}
+
+/**
+ * \Determine charge state for a spectrum without Z line 
+ * /return true if it can determine charge state and return false if it can't create z line 
+ */
+bool Spectrum::assignZState() {
+  carp_once(CARP_WARNING, "Spectrum %i has no charge state. Calculating charge",
+            first_scan_);
+  
+  if (peaks_.empty()) {
+    carp(CARP_INFO, "Cannot determine charge state of spectrum %d with no peaks.",
+         first_scan_);
+    return false;
+  }
+
+  // sum peaks below and above the precursor m/z window separately
+  FLOAT_T left_sum = 0.00001;
+  FLOAT_T right_sum = 0.00001;
+  for (vector<Peak*>::const_iterator i = peaks_.begin(); i != peaks_.end(); i++) {
+    FLOAT_T location = (*i)->getLocation();
+    if (location < precursor_mz_ - 20) {
+      left_sum += (*i)->getIntensity();
+    } else if (location > precursor_mz_ + 20) {
+      right_sum += (*i)->getIntensity();
+    } // else, skip peaks around precursor
+  }
+
+  // What is the justification for this? Ask Mike MacCoss
+  FLOAT_T FractionWindow = 0;
+  FLOAT_T CorrectionFactor = 1;
+  FLOAT_T max_peak_mz = peaks_.back()->getLocation();
+  if ((precursor_mz_ * 2) >= max_peak_mz) {
+    FractionWindow = (precursor_mz_ * 2) - max_peak_mz;
+    CorrectionFactor = fabs((precursor_mz_ - FractionWindow)) / precursor_mz_;
+  }
+
+  // if the ratio of intensities above/below the precursor is small
+  assert(left_sum != 0);
+
+  SpectrumZState zstate;
+  if ((right_sum / left_sum) < (0.2 * CorrectionFactor)) {
+    // +1 spectrum
+    zstate.setMZ(precursor_mz_, 1);
+    zstates_.push_back(zstate);
+    return true; 
+  }
+
+  // multiply charged spectrum
+  zstate.setMZ(precursor_mz_, 2);
+  zstates_.push_back(zstate);
+  zstate.setMZ(precursor_mz_, 3);
+  zstates_.push_back(zstate);
+  return true;    
+}
+
+const char* Spectrum::getFullFilename(){
+
+  if (filename_.empty()){
+    return "";
+  }
+  return filename_.c_str();
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/model/Spectrum.h b/src/model/Spectrum.h
new file mode 100644
index 0000000..38b2f13
--- /dev/null
+++ b/src/model/Spectrum.h
@@ -0,0 +1,375 @@
+/**
+ * \file spectrum.h 
+ * $Revision: 1.43 $
+ * \brief Object for representing one spectrum.
+ *****************************************************************************/
+#ifndef SPECTRUM_H
+#define SPECTRUM_H
+
+#include <stdio.h>
+#include <vector>
+#include <string>
+#include "util/utils.h"
+#include "model/objects.h"
+#include "Peak.h"
+
+#include "Spectrum.h"
+#include "MSToolkit/Spectrum.h"
+#include "pwiz/data/msdata/SpectrumInfo.hpp"
+#include "SpectrumZState.h"
+
+/**
+ * \class Spectrum 
+ * \brief A mass spectrum
+
+ * A mass spectrum consists mainly of a list of peak objects along with
+ * some identifying information. A single spectrum is generated from one 
+ * or more "scans" of the mass spectrometer; each scan is identified by 
+ * a unique increasing positive integer. The range of scans that
+ * generated a particular spectrum are indicated by the member variables 
+ * "first_scan" and "last_scan". In addition to scan information, 
+ * a tandem fragmentation mass spectrum has information 
+ * about the m/z of the intact ion that generated the spectrum, which is
+ * indicated by "precursor_mz" member variable.
+ * Also, while the m/z of particular spectrum is known, the charge state of
+ * the originating ion is unknown; the possible charge states of the 
+ * precursor ion is stored "possible_z" and "num_possible_z". 
+ * Finally, some summary information that can be derived from the spectrum
+ * peaks but is convenient to have is stored as "min_peak_mz",
+ * "max_peak_mz", and "total_energy".
+ */
+
+namespace Crux {
+
+class Spectrum{
+ protected:
+  // member variables
+  int              first_scan_;    ///< The number of the first scan
+  int              last_scan_;     ///< The number of the last scan
+  FLOAT_T          precursor_mz_;  ///< The m/z of precursor (MS-MS spectra)
+  std::vector<SpectrumZState> zstates_;
+  std::vector<SpectrumZState> ezstates_;
+  std::vector<Peak*>  peaks_;         ///< The spectrum peaks
+  FLOAT_T          min_peak_mz_;   ///< The minimum m/z of all peaks
+  FLOAT_T          max_peak_mz_;   ///< The maximum m/z of all peaks
+  double           total_energy_;  ///< The sum of intensities in all peaks
+  FLOAT_T          lowest_sp_;  ///< The lowest Sp score (for writing SQT)
+  bool             has_total_energy_;
+  bool             has_lowest_sp_;
+  std::string      filename_;      ///< Optional filename
+  std::vector<std::string> i_lines_v_;  ///< store i lines
+  std::vector<std::string> d_lines_v_;  ///< store d lines
+  bool             has_peaks_;  ///< Does the spectrum contain peak information
+  bool             sorted_by_mz_; ///< Are the spectrum peaks sorted by m/z...
+  bool             sorted_by_intensity_; ///< ... or by intensity?
+  bool             has_mz_peak_array_; ///< Is the mz_peak_array populated.
+  Peak         **mz_peak_array_;  ///< Allows rapid peak retrieval by mz.
+
+  // constants
+  /**
+   * m/z resolution.  I.e., 5 == 0.2 m/z units
+   */
+  static const int MZ_TO_PEAK_ARRAY_RESOLUTION = 5;
+  static const int MAX_PEAK_MZ = 5000; ///< Maximum possible m/z value.
+  static const int MAX_CHARGE = 6;     ///< Maximum allowed charge.
+  
+  // private methods
+  /**
+   * Updates num_peaks, min_peak_mz, max_peak_mz, total_energy fields.
+   */
+  void updateFields
+    (FLOAT_T intensity,///< the intensity of the peak that has been added -in
+     FLOAT_T location  ///< the location of the peak that has been added -in
+     );
+
+ public:
+  /**
+   * Default constructor.
+   */
+  Spectrum();
+
+  /**
+   * Constructor initializes spectrum with given values.
+   */
+  Spectrum
+    (int               first_scan,         ///< number of the first scan -in
+     int               last_scan,          ///< number of the last scan -in
+     FLOAT_T           precursor_mz,       ///< m/z of the precursor
+     const std::vector<int>& possible_z,   ///< possible charge states
+     const std::string& filename
+     );
+  
+  /**
+   * Copy constructor.  Deep copy--allocates new peaks peak array. 
+   */
+  Spectrum(const Spectrum& old_spec);
+
+  void copyFrom(Spectrum* src);
+
+
+  /**
+   * Default destructor.
+   */
+  ~Spectrum();
+
+  /**
+   * \returns the peak iterator that signifies the start of the peaks 
+   * in the spectrum
+   */
+  PeakIterator begin() const;
+
+  /**
+   * \returns the peak iterator that signifies the end of the peaks 
+   * in the spectrum
+   */
+  PeakIterator end() const;
+
+  /**
+   * Prints a spectrum object to file.
+   */
+  void print(FILE* file); ///< output file to print at -out
+
+  /**
+   * Prints a spectrum with the given intensities instead of the
+   * observed peaks.  Assumes intensities are in m/z bins from 0 to
+   * max_mz_bin.  Only prints non-zero intensities.
+   */
+  void printProcessedPeaks
+    (SpectrumZState& zstate,       ///< print at this charge state
+     FLOAT_T* intensities, ///< intensities of new peaks
+     int max_mz_bin,       ///< num_bins in intensities
+     FILE* file);          ///< print to this file
+
+  /**
+   * Prints a spectrum object to file in sqt format.
+   */
+  void printSqt
+    (FILE* file,           ///< output file to print at -out
+     int num_matches,      ///< number of peptides compared to this spec -in
+     SpectrumZState& zstate            ///< charge used for the search -in
+     );
+
+  /**
+   * Transfer values from an MSToolkit spectrum to the crux Spectrum.
+   */
+  bool parseMstoolkitSpectrum(MSToolkit::Spectrum* mst_spectrum, 
+                                const char* filename = NULL);
+
+  /**
+   * Transfer values from a proteowizard Spectrum object to the
+   * crux spectrum.
+   */
+  bool parsePwizSpecInfo(
+    const pwiz::msdata::SpectrumPtr& pwiz_spectrum,
+    int firstScan,
+    int lastScan
+  );
+  
+  /**
+   * Normalize peak intensities so that they sum to unity.
+   */
+  void sumNormalize();
+
+  /**
+   * Sort peaks
+   */
+  void sortPeaks(PEAK_SORT_TYPE_T type);
+
+  /**
+   * Populate peaks with rank information.
+   */
+  void rankPeaks();
+
+  /**
+   * \returns The number of the first scan.
+   */
+  int getFirstScan() const;
+
+  /**
+   * \returns The number of the last scan.
+   */
+  int getLastScan() const;
+
+  /**
+   * \returns The m/z of the precursor.
+   */
+  FLOAT_T getPrecursorMz() const;
+
+  /**
+   * \returns The a const reference to a vector of the possible charge
+   * states of this spectrum. If EZ states are available, return those.
+   */
+  const std::vector<SpectrumZState>& getZStates() const;
+
+  /**
+   * \returns the ZState at the requested index
+   */
+  const SpectrumZState& getZState(int idx);
+
+  /**
+   * Considers the spectrum-charge parameter and returns the
+   * appropriate charge states that should be searched for this
+   * spectrum: all of them or the one selected by the parameter.
+   * /returns A vector of charge states to consider for this spectrum.
+   */ 
+  //std::vector<int> getChargesToSearch();
+ 
+  std::vector<SpectrumZState> getZStatesToSearch();
+
+  
+  /**
+   * \returns The number of possible charge states of this spectrum.
+   */
+  unsigned int getNumZStates() const;
+
+  /**
+   * \returns The minimum m/z of all peaks.
+   */
+  FLOAT_T getMinPeakMz();
+  
+  /**
+   * \returns The maximum m/z of all peaks.
+   */
+  FLOAT_T getMaxPeakMz();
+  
+  /**
+   * \returns The number of peaks.
+   */
+  int getNumPeaks() const;
+
+  /**
+   * \returns The closest PEAK_T within 'max' of 'mz' in 'spectrum'
+   * NULL if no peak within 'max'
+   * This should lazily create the data structures within the
+   * spectrum object that it needs.
+   */
+  Peak * getNearestPeak
+    (FLOAT_T mz, ///< the mz of the peak around which to sum intensities -in
+     FLOAT_T max ///< the maximum distance to get intensity -in
+     );
+  
+  /**
+   * \returns The PEAK_T within 'max' of 'mz' in 'spectrum'
+   * that is the maximum intensity.
+   * NULL if no peak within 'max'
+   * This should lazily create the data structures within the
+   * spectrum object that it needs.
+   */
+  Peak* getMaxIntensityPeak(
+    FLOAT_T mz, ///< the mz of the peak to find
+    FLOAT_T max ///< the maximum distance to get intensity -in
+  );
+
+
+  /**
+   * \returns The sum of intensities in all peaks.
+   */
+  double getTotalEnergy();
+
+  /**
+   * Sets the total ion current.
+   */
+  void setTotalEnergy(
+    FLOAT_T tic ///< the total ion current
+  );
+
+  /**
+   * returns whether there is a total energy
+   */
+  bool hasTotalEnergy();
+
+  /**
+   * sets whether there is a total energy
+   */
+  void setHasTotalEnergy(
+    bool has_total_energy
+  );
+
+  /**
+   * Sets the lowest Sp score.
+   */
+  void setLowestSp(
+    FLOAT_T sp ///< the lowest Sp score for this spectrum
+  );
+
+  /**
+   * Returns the lowest Sp score
+   */
+  FLOAT_T getLowestSp();
+
+  /**
+   * returns whether there is a lowest sp score
+   */
+  bool hasLowestSp();
+
+  /**
+   * sets whether there is a lowest sp score
+   */
+  void setHasLowestSp(
+    bool has_lowest_sp
+  );
+
+  /**
+   * \returns The intensity of the peak with the maximum intensity.
+   */
+  FLOAT_T getMaxPeakIntensity();
+
+  /**
+   * \returns The mass of the singly charged precursor ion, according
+   * to the formula mass = m/z * charge - (mass_H * (charge - 1))
+   */
+  //FLOAT_T getSinglyChargedMass(int charge); ///< the charge of the precursor ion -in
+
+  /**
+   * Adds a possible charge(z) to the spectrum.
+   */
+  //bool addPossibleZ(int charge);  ///< charge to add
+
+  /**
+   * Adds a peak to the spectrum given a intensity and location.
+   * Calls update_fields.
+   */
+  void addPeak
+    (FLOAT_T intensity,  ///< the intensity of peak to add -in
+     FLOAT_T location_mz ///< the location of peak to add -in
+     );
+
+  void truncatePeaks(int count);
+
+  /**
+   * Creates and fills mz_peak_array_, the array of pointers to peaks
+   * in the Spectrum's vector of peaks.  Peaks in the array are
+   * indexed by ???
+   */
+  void populateMzPeakArray();
+
+  /**
+   *if ms2 file dose not have any Z line then assignZState will create it  
+   */
+  bool assignZState();
+
+  /**
+   * \returns The name of the file this spectrum came from or an empty
+   * string, if unavailable.
+   */
+  const char* getFilename();
+  const char* getFullFilename();
+};    
+
+}
+
+/**
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
+#endif
+
+/** \mainpage The crux API documentation page.
+ * \section Introduction
+ * Welcome to crux, a C software package for analysis of tandem mass
+ * spectrometry data. Click on the links above to see documentation for
+ * crux objects and their user interfaces.
+ */
diff --git a/src/model/SpectrumMatch.cpp b/src/model/SpectrumMatch.cpp
new file mode 100644
index 0000000..aa73b00
--- /dev/null
+++ b/src/model/SpectrumMatch.cpp
@@ -0,0 +1,103 @@
+/**
+ * \file SpectrumMatch.cpp
+ * \brief Object for holding spectrum scores
+ *******************************************/
+#include "SpectrumMatch.h"
+#include "SpectrumZState.h"
+
+#include "Match.h"
+using namespace Crux;
+
+/**
+ * \returns an empty SpectrumMatch
+ */
+SpectrumMatch::SpectrumMatch():
+  file_idx_(-1) {
+}
+
+/**
+ * \returns a SpectrumMatch, setting the spectrum
+ */
+SpectrumMatch::SpectrumMatch(
+  Spectrum* spectrum /// < Spectrum object for this match
+): file_idx_(-1) {
+
+  setSpectrum(spectrum);
+
+}
+
+/**
+ * Destructor
+ */  
+SpectrumMatch::~SpectrumMatch() {
+}
+  
+/**
+ * sets the peptide match for this spectrummatch
+ */
+void SpectrumMatch::setPeptideMatch(
+  PeptideMatch* peptide_match ///< peptide match to set
+  ) {
+  peptide_match_ = peptide_match;
+}
+
+/**
+ * \returns the associated PeptideMatch
+ */
+PeptideMatch* SpectrumMatch::getPeptideMatch() {
+  return peptide_match_;
+}
+
+/**
+ * sets the spectrum object
+ */
+void SpectrumMatch::setSpectrum(
+  Spectrum* spectrum ///< spectrum to set
+  ) {
+
+  spectrum_ = spectrum;
+}
+
+/** 
+ * \returns the Spectrum
+ */
+Spectrum* SpectrumMatch::getSpectrum() {
+  return spectrum_;
+}
+
+/**
+ * sets the zstate
+ */
+void SpectrumMatch::setZState(
+  SpectrumZState& zstate ///< zstate to set
+  ) {
+
+  zstate_ = zstate;
+}
+
+/**
+ * \returns the zstate
+ */
+SpectrumZState& SpectrumMatch::getZState() {
+
+  return zstate_;
+}
+
+void SpectrumMatch::setFileIndex(int file_idx) {
+  file_idx_ = file_idx;
+}
+
+int SpectrumMatch::getFileIndex() {
+  return(file_idx_);
+}
+
+std::string SpectrumMatch::getFilePath() {
+  return(Match::getFilePath(file_idx_));
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/SpectrumMatch.h b/src/model/SpectrumMatch.h
new file mode 100644
index 0000000..88109a1
--- /dev/null
+++ b/src/model/SpectrumMatch.h
@@ -0,0 +1,101 @@
+/**
+ * \file SpectrumMatch.h
+ * $Revision: 1.00 $
+ * \brief Object for holding spectrum scores
+ ******************************************************/
+#ifndef SPECTRUMMATCH_H_
+#define SPECTRUMMATCH_H_
+
+#include "match_objects.h"
+#include "SpectrumZState.h"
+#include "AbstractMatch.h"
+
+class SpectrumMatch : public AbstractMatch {
+
+ protected:
+  PeptideMatch* peptide_match_; ///< PeptideMatch which this SpectrumMatch matches to
+  Crux::Spectrum* spectrum_; ///< Spectrum object
+  SpectrumZState zstate_; ///< Current zstate
+  int file_idx_; /// file index
+ public:
+
+  /**
+   * \returns an empty SpectrumMatch
+   */
+  SpectrumMatch();
+
+  /**
+   * \returns a SpectrumMatch, setting the spectrum
+   */
+  SpectrumMatch(
+    Crux::Spectrum* spectrum_ ///< Spectrum object for this match
+  );
+
+  /**
+   * Destructor
+   */
+  virtual ~SpectrumMatch();
+
+  /**
+   * sets the peptide match for this spectrummatch
+   */
+  void setPeptideMatch(
+    PeptideMatch* peptide_match ///< peptide match to set
+  );
+
+  /**
+   * \returns the associated PeptideMatch
+   */
+  PeptideMatch* getPeptideMatch();
+
+  /**
+   * sets the spectrum object
+   */
+  void setSpectrum(
+    Crux::Spectrum* spectrum ///< spectrum to set
+  );
+
+  /**
+   * \returns the spectrum
+   */
+  Crux::Spectrum* getSpectrum();
+
+  /**
+   * sets the zstate
+   */
+  void setZState(
+    SpectrumZState& zstate ///< zstate to set
+  );
+
+  /**
+   * \returns the zstate
+   */
+  SpectrumZState& getZState();
+
+  /**
+   * sets the file index for this spectrum match
+   */
+  void setFileIndex(int file_idx);
+  
+  /**
+   * \returns the file index for this spectrum match
+   */
+  int getFileIndex();
+
+  /**
+   *\returns the file path for this spectrum match
+   */
+  std::string getFilePath();
+  
+  
+  
+};
+
+#endif //SPECTRUMMATCH_H
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/SpectrumZState.cpp b/src/model/SpectrumZState.cpp
new file mode 100644
index 0000000..0811a87
--- /dev/null
+++ b/src/model/SpectrumZState.cpp
@@ -0,0 +1,167 @@
+
+/*************************************************************************//**
+ * \file SpectrumZState.cpp
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE:  January 28, 2011
+ * \brief code to support spectrum precursor z-states.
+ ****************************************************************************/
+#include "SpectrumZState.h"
+
+#include "io/carp.h"
+#include "util/mass.h"
+
+
+/**
+ * Default constructor
+ */
+SpectrumZState::SpectrumZState() {
+  charge_ = 0;
+  neutral_mass_ = 0;
+  rtime_ = 0;
+  area_ = 0;
+}
+
+SpectrumZState::SpectrumZState(
+  double neutral_mass,
+  int charge
+  ) {
+
+  neutral_mass_ = neutral_mass;
+  charge_ = charge;
+  rtime_ = 0;
+  area_ = 0;
+}
+
+/**
+ * copy constructor
+ */
+SpectrumZState::SpectrumZState(
+  const SpectrumZState& other
+) {
+  charge_ = other.charge_;
+  neutral_mass_ = other.neutral_mass_;
+  rtime_ = other.rtime_;
+  area_ = other.area_;
+}
+
+/** 
+ * Default destructor
+ */
+SpectrumZState::~SpectrumZState() {
+
+}
+
+/**
+ * \returns The charge for this z-state
+ */
+int SpectrumZState::getCharge() const {
+  return charge_;
+}
+
+/**
+ * Sets the neutral mass and charge for this z-state
+ * using the m/z and charge.
+ */
+
+void SpectrumZState::setMZ(
+  FLOAT_T mz,
+  int charge
+) {
+
+  neutral_mass_ = (mz - MASS_PROTON) * (double)charge;
+  charge_ = charge;
+
+}
+
+FLOAT_T SpectrumZState::getMZ() const {
+
+  return (neutral_mass_ > 0) ?
+    (neutral_mass_ + (FLOAT_T)charge_*MASS_PROTON) / (FLOAT_T)charge_ :
+    0;
+}
+
+
+/**
+ * Sets the neutral mass and charge for this z-state
+ * using the singly charged mass.
+ */
+void SpectrumZState::setSinglyChargedMass(
+  double mph,
+  int charge
+  ) {
+
+  neutral_mass_ = mph - MASS_PROTON;
+  charge_ = charge;
+}
+
+/**
+ * \returns the m+h charged mass for this z-state
+ */
+double SpectrumZState:: getSinglyChargedMass() const {
+  
+  return (neutral_mass_ > 0) ?
+    neutral_mass_ + MASS_PROTON :
+    0;
+}
+
+/**
+ * Sets the neutral mass for this z-state
+ */
+void SpectrumZState::setNeutralMass(
+  FLOAT_T neutral_mass,
+  int charge
+  ) {
+
+  neutral_mass_ = neutral_mass;
+  charge_ = charge;
+}
+
+/**
+ * \returns The neutral mass for this z-state
+ */
+FLOAT_T SpectrumZState::getNeutralMass() const {
+
+  return (neutral_mass_ > 0) ? neutral_mass_ : 0;
+}
+
+/** 
+ * Sets the retention time for this z-state
+ */
+void SpectrumZState::setRTime(
+  FLOAT_T rtime
+  ) {
+
+  rtime_ = rtime;
+}
+
+/**
+ * \returns The retention time for this z-state
+ */
+FLOAT_T SpectrumZState::getRTime() const {
+  return rtime_;
+}
+
+/**
+ * Sets the area for this z-state
+ */
+void SpectrumZState::setArea(
+    FLOAT_T area
+  ) {
+
+  area_ = area;
+}
+
+/**
+ * \returns The area for this z-state
+ */
+FLOAT_T SpectrumZState::getArea() const {
+  return area_;
+}
+
+
+/**
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/SpectrumZState.h b/src/model/SpectrumZState.h
new file mode 100644
index 0000000..8c8d53d
--- /dev/null
+++ b/src/model/SpectrumZState.h
@@ -0,0 +1,134 @@
+/**
+ * \file SpectrumZState.h
+ * $Revision: 1.00 $
+ * \brief Object for representing a MS2 spectrum's charge, and neutral mass.
+ *******************************************************************************/
+#ifndef SPECTRUMZSTATE_H
+#define SPECTRUMZSTATE_H
+
+#include "model/objects.h"
+#include "util/utils.h"
+
+
+/**
+ * \class SpectrumZState
+ * \brief Object for representing a spectrum precursor's 
+ *  charge and neutral mass.
+ */
+
+class SpectrumZState {
+ protected:
+  int charge_;
+  double neutral_mass_;
+
+  /* EZ State fields */
+  FLOAT_T rtime_;
+  FLOAT_T area_;
+ public:
+
+  /**
+   * Default constructor
+   */
+  SpectrumZState();
+
+  /**
+   * sets the neutral mass and charge
+   */
+  SpectrumZState(
+    double neutral_mass, 
+    int charge
+  );
+
+  /**
+   * copy constructor
+   */
+  SpectrumZState(
+    const SpectrumZState& other
+  );
+
+  /** 
+   * Default destructor
+   */
+  virtual ~SpectrumZState();
+
+  /**
+   * \returns The charge for this z-state
+   */
+  int getCharge() const;
+
+  
+  /**
+  * sets the m/z, charge for this z-state
+  */
+  void setMZ(
+    FLOAT_T mz,
+    int charge);
+
+  FLOAT_T getMZ() const;
+
+
+  /**
+   * Sets the m+h charged mass for this z-state
+   */
+  void setSinglyChargedMass(
+    double mph,
+    int charge
+    );
+
+  /**
+   * \returns the m+h charged mass for this z-state
+   */
+  double getSinglyChargedMass() const;
+
+  /**
+   * Sets the neutral mass for this z-state
+   */
+  void setNeutralMass(
+    FLOAT_T neutral_mass,
+    int charge
+    );
+
+  /**
+   * \returns The neutral mass for this z-state
+   */
+  FLOAT_T getNeutralMass() const;
+  
+  /** 
+   * Sets the retention time for this z-state
+   */
+  void setRTime(
+    FLOAT_T rtime
+  );
+
+  /**
+   * \returns The retention time for this z-state
+   */
+  FLOAT_T getRTime() const;
+
+  /**
+   * Sets the area for this z-state
+   */
+  void setArea(
+    FLOAT_T area
+  );
+
+  /**
+   * \returns The area for this z-state
+   */
+  FLOAT_T getArea() const;
+
+
+
+
+};
+
+/**
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
+
+#endif
+
diff --git a/src/model/match_objects.h b/src/model/match_objects.h
new file mode 100644
index 0000000..67b6c5f
--- /dev/null
+++ b/src/model/match_objects.h
@@ -0,0 +1,36 @@
+#ifndef MATCHOBJECTS_H_
+#define MATCHOBJECTS_H_
+
+#include "model/objects.h"
+#include <deque>
+#include <map>
+#include <string>
+
+class ProteinMatchCollection;
+class ProteinMatch;
+class PeptideMatch;
+class SpectrumMatch;
+class AbstractMatch;
+
+typedef std::deque<SpectrumMatch*> SpectrumMatchCollection;
+typedef SpectrumMatchCollection::iterator SpectrumMatchIterator;
+
+typedef std::deque<PeptideMatch*> PeptideMatchCollection;
+typedef PeptideMatchCollection::iterator PeptideMatchIterator;
+
+typedef std::deque<ProteinMatch*>::iterator ProteinMatchIterator;
+
+typedef std::map<SCORER_TYPE_T, FLOAT_T> ScoreMap;
+typedef std::map<SCORER_TYPE_T, int> RankMap;
+typedef ScoreMap::iterator ScoreMapIterator;
+typedef RankMap::iterator RankMapIterator;
+
+#endif //MATCHOBJECTS_H
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/model/objects.h b/src/model/objects.h
new file mode 100644
index 0000000..acffed0
--- /dev/null
+++ b/src/model/objects.h
@@ -0,0 +1,811 @@
+
+/**
+ * \file objects.h 
+ * $Revision: 1.62 $
+ * \brief The defined objects
+ *****************************************************************************/
+#ifndef CRUX_OBJECTS_H 
+#define CRUX_OBJECTS_H
+
+#include <stdio.h>
+#include <vector>
+#include <deque>
+#include <set>
+#include <map>
+#include "util/utils.h"
+
+#include <stdint.h>
+
+#define QSORT_COMPARE_METHOD int(*)(const void*, const void*)
+
+
+class DelimitedFile;
+class DelimitedFileReader;
+class MatchFileReader;
+class SpectrumZState;
+
+class MatchCandidate;
+/**
+ * Object for defining xlinkable peptides
+ */
+class XLinkablePeptide;
+
+/**
+ * Object for defining valid links
+ */
+class XLinkBondMap;
+
+/**
+ * Object for defining a cross-link product match
+ */
+class XLinkMatch;
+
+/**
+ * Object for define a cross link peptide
+ */
+class XLinkPeptide;
+
+/**
+ * Object for defining the Xlinkable iterator
+ */
+class XLinkablePeptideIterator;
+
+/**
+ * \class Peak 
+ * A peak in a spectrum
+ */
+class Peak;
+
+/**
+ * The enum for peak sort type(_PEAK_LOCATION, _PEAK_INTENSITY)
+ */
+enum _peak_sort_type {_PEAK_LOCATION, _PEAK_INTENSITY};
+
+/**
+ * \typedef  PEAK_SORT_TYPE_T 
+ * \brief The typedef for peak sort type(_PEAK_LOCATION, _PEAK_INTENSITY)
+ */
+typedef enum _peak_sort_type PEAK_SORT_TYPE_T;
+
+/**
+ * \class Spectrum 
+ * \brief A spectrum
+ */
+namespace Crux { class Spectrum; }
+
+/**
+ * \typedef PeakIterator
+ * \brief An object to iterate over the peaks in a spectrum
+ */
+typedef std::vector<Peak*>::const_iterator PeakIterator;
+
+/**
+ * \class SpectrumCollection
+ * \brief A collection of spectra
+ */
+namespace Crux { class SpectrumCollection; }
+
+/**
+ * \typedef SpectrumIterator
+ * \brief An object to iterate over the spectra in a SpectrumCollection
+ */
+typedef std::deque<Crux::Spectrum*>::iterator SpectrumIterator;
+
+/**
+ * \class FilteredSpectrumChargeIterator 
+ * \brief An object to iterate over the spectra in a spectrum_collection
+ */
+class FilteredSpectrumChargeIterator;
+
+/**
+ * \class Peptide
+ * \brief A peptide subsequence of a protein
+ */
+namespace Crux { class Peptide; };
+
+/**
+ * \class PeptideConstraint
+ * \brief An object representing constraints which a peptide may or may not
+ * satisfy.
+ */
+class PeptideConstraint;
+
+/**
+ * \typedef RESIDUE_ITERATOR_T 
+ * \brief An object to iterate over the residues in a peptide
+ */
+typedef struct residue_iterator RESIDUE_ITERATOR_T;
+
+// REPLACE PEPTIDE_TYPE_T with DIGEST_T and ENZYME_T
+/**
+ * \enum _digest_type
+ * The rule governing how a peptide was cleaved from its source
+ * protein sequence. 
+ */
+enum _digest_type {
+  INVALID_DIGEST,      ///< required invalid value for the enum
+  FULL_DIGEST,         ///< c- AND n-term specific to ENZYME_T
+  PARTIAL_DIGEST,      ///< c- OR n-term specific to ENZYME_T
+  NON_SPECIFIC_DIGEST, ///< not specific to any enzyme cleavage rules
+  NUMBER_DIGEST_TYPES  ///< keep last, number of types
+};
+
+/**
+ * \typedef DIGEST_T
+ * \brief The rule governing how a peptide was digested.  Used in
+ * conjunction with ENZYME_T to define how peptides are generated.
+ */
+typedef enum _digest_type DIGEST_T;
+
+/**
+ * \enum _enzyme_type
+ */
+enum _enzyme_type {
+  INVALID_ENZYME,        ///< required invalid value for the enum
+  NO_ENZYME,             ///< cleave anywhere
+  TRYPSIN,               ///< cleave after K or R, not before P
+  TRYPSINP,               ///< cleave after K or R
+  CHYMOTRYPSIN,          ///< cleave after FWYL, not before P
+  ELASTASE,              ///< cleave after ALIV, not before P
+  CLOSTRIPAIN,           ///< cleave after R
+  CYANOGEN_BROMIDE,      ///< cleave after M
+  IODOSOBENZOATE,        ///< cleave after W
+  PROLINE_ENDOPEPTIDASE, ///< cleave after P
+  STAPH_PROTEASE,        ///< cleave after E
+  ASPN,                  ///< cleave before D
+  LYSC,                  ///< cleave after K , not befor P 
+  LYSN,                  ///< cleave before K 
+  ARGC,                  ///< cleave after R, not before P
+  GLUC,                  ///< cleave after D or E, not before P
+  PEPSINA,               ///< cleave after FL, not before P 
+  ELASTASE_TRYPSIN_CHYMOTRYPSIN, ///< cleave after ALIVKRWFY, not before P
+  CUSTOM_ENZYME,         ///< cleave after/before user-defined residues
+  NUMBER_ENZYME_TYPES    ///< leave last, number of types
+};
+
+/**
+ * \typedef ENZYME_T
+ * \brief The enzyme with which a peptide was digested.  Used in
+ * conjunction with DIGEST_T to define how peptides are generated.
+ */
+typedef enum _enzyme_type ENZYME_T;
+
+/**
+ * The enum for isotopic mass type (average, mono)
+ */
+enum _mass_type {AVERAGE, MONO, NUMBER_MASS_TYPES };
+
+/**
+ * \typedef MASS_TYPE_T
+ * \brief The typedef for mass type (average, mono);
+ */
+typedef enum _mass_type MASS_TYPE_T;
+
+
+/**
+ * The enum for window type for selecting peptides or assigning ions.
+ */
+enum _window_type {
+  WINDOW_INVALID,
+  WINDOW_MASS, 
+  WINDOW_MZ, 
+  WINDOW_PPM,
+  NUMBER_WINDOW_TYPES  
+};
+
+
+/**
+ * The enum for measure type for spectral counts
+ */
+enum _measure_type {
+  MEASURE_INVALID,
+  MEASURE_RAW,
+  MEASURE_SIN,
+  MEASURE_NSAF,
+  MEASURE_DNSAF,
+  MEASURE_EMPAI,
+  NUMBER_MEASURE_TYPES
+};
+
+/**
+ * \typedef MEASURE_TYPE_T
+ * \brief The typedef for measure type (sin, nsaf)
+ */
+typedef enum _measure_type MEASURE_TYPE_T;
+
+/**
+ * The quantification level type for spectral counts
+ */
+enum _quant_level_type {
+  QUANT_LEVEL_INVALID,
+  PEPTIDE_QUANT_LEVEL,
+  PROTEIN_QUANT_LEVEL,
+  NUMBER_QUANT_LEVEL_TYPES
+};
+
+/**
+ * The enum of type of threshold to use for spectral counts
+ */
+enum THRESHOLD_T {
+  THRESHOLD_INVALID,
+  THRESHOLD_NONE,
+  THRESHOLD_QVALUE,
+  THRESHOLD_CUSTOM,
+  NUMBER_THRESHOLD_TYPES
+};
+
+/**
+ * \typedef QUANT_LEVEL_TYPE_T
+ * \brief The typdef for quantificaiton level (peptide, protein)
+ */
+typedef enum _quant_level_type QUANT_LEVEL_TYPE_T;
+
+
+/**
+ * The enum for parsimony type for spectral counts
+ */
+enum _parsimony_type {
+  PARSIMONY_INVALID,
+  PARSIMONY_SIMPLE,
+  PARSIMONY_GREEDY,
+  PARSIMONY_NONE,
+  NUMBER_PARSIMONY_TYPES
+};
+
+/*
+ * \typedef PARSIMONY_TYPE_T
+ * \brief The typedef for parsimony type (simple, greedy, none)
+ */
+typedef enum _parsimony_type PARSIMONY_TYPE_T;
+
+/**
+ * \enum DECOY_TYPE_T
+ */
+enum DECOY_TYPE_T {
+  INVALID_DECOY_TYPE,
+  NO_DECOYS,
+  PROTEIN_REVERSE_DECOYS,
+  PROTEIN_SHUFFLE_DECOYS,
+  PEPTIDE_SHUFFLE_DECOYS,
+  PEPTIDE_REVERSE_DECOYS,
+  NUMBER_DECOY_TYPES
+};
+
+/**
+ * \enum MASS_FORMAT_T
+ */
+enum MASS_FORMAT_T {
+  INVALID_MASS_FORMAT,
+  MOD_MASS_ONLY,
+  AA_PLUS_MOD,
+  MOD_MASSES_SEPARATE,
+  NUMBER_MASS_FORMATS
+};
+
+/**
+ * \typedef WINDOW_TYPE_T
+ * \brief The typedef for window type (mass, mz, ppm);
+ */
+typedef enum _window_type WINDOW_TYPE_T;
+
+enum OBSERVED_PREPROCESS_STEP_T {
+  INVALID_STEP,
+  DISCRETIZE_STEP,
+  REMOVE_PRECURSOR_STEP,
+  SQUARE_ROOT_STEP,
+  REMOVE_GRASS_STEP,
+  TEN_BIN_STEP,
+  XCORR_STEP,
+  NUMBER_PREPROCESS_STEPS
+};
+
+
+/**
+ * \class PeptideSrc
+ * \brief object for mapping a peptide to it's parent protein.
+ */
+class PeptideSrc;
+
+
+/**
+ * \class Protein
+ * \brief A protein sequence
+ */
+namespace Crux { class Protein; }
+
+/**
+ * \class ProteinPeptideIterator
+ * \brief An object to iterate over the peptides in a protein sequence
+ */
+class ProteinPeptideIterator;
+
+/**
+ * \class Database
+ * \brief A database of protein sequences.
+ */
+class Database;
+
+/**
+ * \class DatabaseProteinIterator
+ * \brief An object to iterate over the proteins in a database 
+ */
+class DatabaseProteinIterator;
+
+/**
+ * \class DatabasePeptideIterator
+ * \brief An object to iterate over the peptides in a database 
+ */
+class DatabasePeptideIterator;
+
+/**
+ * The enum for sort type (mass, length, lexical, none)
+ */
+enum SORT_TYPE_T {SORT_NONE, 
+                  SORT_MASS, 
+                  SORT_LENGTH, 
+                  SORT_LEXICAL, 
+                  NUMBER_SORT_TYPES };
+
+/**
+ * \typedef PEPTIDE_WRAPPER_T
+ * \brief An object to wrap a peptide, allowing a linked list of peptides.
+ */
+typedef struct peptide_wrapper PEPTIDE_WRAPPER_T;
+
+/**
+ * \class Index
+ * \brief An index of a database 
+ */
+class Index;
+
+/**
+ * \class IndexPeptideIterator
+ * \brief An object to iterate over the peptides in an index
+ */
+class IndexPeptideIterator;
+
+/**
+ * \brief An iterator to further filter peptides from an
+ * IndexPeptideIterator based on digestion.
+ */
+class IndexFilteredPeptideIterator;
+
+/**
+ * \class Ion 
+ * \brief An object to represent a (fragment) ion of a peptide
+ */
+class Ion;
+
+/**
+ * \class ION_SERIES_T 
+ * \brief An object to represent a series of ions
+ */
+class IonSeries;
+
+/**
+ * \typedef ION_CONSTRAINT_T
+ * \brief An object to represent a constraint to be applied to ions
+ */
+class IonConstraint;
+
+/**
+ * The enum for index type
+ */
+enum _index_type {DB_INDEX, BIN_INDEX};
+
+/**
+ * \typedef INDEX_TYPE_T
+ * \brief The typedef for index type (db_index, bin_index)
+ */
+typedef enum _index_type INDEX_TYPE_T;
+
+/**
+ * The enum for an ion type (P_ion is the precursor ion)
+ * BY_ION(B & Y ion), BYA_ION(B & Y & A ion)
+ */
+enum _ion_type {A_ION, B_ION, C_ION, X_ION, Y_ION, Z_ION, 
+                P_ION, BY_ION, BYA_ION, ALL_ION, NUMBER_ION_TYPES };
+
+/**
+ * \typedef ION_TYPE_T
+ * \brief The typedef for ion type (a,b,c,x,y,z ions)
+ */
+typedef enum _ion_type ION_TYPE_T;
+
+/**
+ * The enum for an ion modification
+ */
+enum _ion_modification {NH3, H2O, ISOTOPE, FLANK, ALL_MODIFICATION}; 
+
+/**
+ * \typedef ION_MODIFICATION_T
+ * \brief The typedef for ion modification type (NH3, H2O etc.)
+ */
+typedef enum _ion_modification ION_MODIFICATION_T;
+
+/**
+ * \class ProteinIndex
+ * \brief Object to store the protein relation to the fasta file
+ */
+class ProteinIndex;
+
+/**
+ * \class ProteinIndexIterator
+ * \brief Object to iterate over the protein index in the protein index file
+ */
+class ProteinIndexIterator;
+
+/**
+ * \typedef IonIterator
+  * \brief An object to iterate over all ion objects in the ion_series
+ */
+typedef std::vector<Ion*>::iterator IonIterator;
+
+/**
+ * \class IonFilteredIterator
+ * \brief An object to iterate over ion objects that meet constraint in the ion_series
+ */
+class IonFilteredIterator;
+
+/**
+ *\typedef LOSS_LIMIT_T
+ *\brief An object that specifies the max amount of neutral loss possible at a given cleavage index
+ * all numbers are for forward ions(A,B,C) subtract from total to get reverse limit
+ */
+typedef struct loss_limit LOSS_LIMIT_T;
+
+/**
+ * \class Scorer
+ * \brief An object to score a spectrum v. ion_series or spectrum v. spectrum
+ */
+class Scorer;
+
+/**
+ * The enum for scorer type.  Scores are indexed by this type in the
+ * Match.  If you update this definition, be sure to update the
+ * score() function in model/MatchCollection.cpp.
+ */
+enum _scorer_type { 
+  SP,                  ///< SEQUEST preliminary score
+  XCORR,               ///< SEQUEST primary score
+  EVALUE,              ///< Comet e-value
+
+  // Scores of individual peptides in cross-linking.
+  XCORR_FIRST,
+  XCORR_SECOND,
+  
+  DECOY_XCORR_QVALUE,  ///< q-value derived from decoys
+  DECOY_XCORR_PEPTIDE_QVALUE,
+  DECOY_XCORR_PEP,     ///< posterior error prob for xcorrs (target/decoy)
+  DECOY_EVALUE_QVALUE, ///< q-value derived from empirical null (decoy)
+  DECOY_EVALUE_PEPTIDE_QVALUE,
+  DECOY_EVALUE_PEP, ///< posterior error prob for e-value (target/decoy)
+
+  // N.B. Despite the name, these are actually NEGATIVE log p-values.
+  LOGP_WEIBULL_XCORR,    ///< p-value from Weibull fit
+  LOGP_BONF_WEIBULL_XCORR, ///< Bonferroni adjusted Weibull p-value
+  LOGP_QVALUE_WEIBULL_XCORR, ///< q-value from Weibull p-value
+  LOGP_WEIBULL_PEP,    ///< posterior error prob from weibull p-values
+  LOGP_PEPTIDE_QVALUE_WEIBULL, ///< peptide-level q-value for Weibull p-value
+
+  PERCOLATOR_SCORE,
+  PERCOLATOR_QVALUE,
+  PERCOLATOR_PEPTIDE_QVALUE,
+  PERCOLATOR_PEP,      ///< posterior error prob from percolator scores
+
+  QRANKER_SCORE,
+  QRANKER_QVALUE,
+  QRANKER_PEPTIDE_QVALUE,
+  QRANKER_PEP,        ///< posterior error prob from q-ranker scores
+
+  BARISTA_SCORE,
+  BARISTA_QVALUE,
+  BARISTA_PEPTIDE_QVALUE,
+  BARISTA_PEP,        ///< posterior error prob from barista scores
+
+  // Various auxiliary scores.
+  DELTA_CN,
+  DELTA_LCN,
+  BY_IONS_MATCHED,
+  BY_IONS_TOTAL,
+
+  TIDE_SEARCH_EXACT_PVAL,       ///< exact p-value from Tide
+  TIDE_SEARCH_REFACTORED_XCORR, ///< raw score corresponding to exact p-value
+
+  // The following are computed by assign-confidence.
+  SIDAK_ADJUSTED,             ///< Sidak adjusted p-value
+  TIDE_SEARCH_EXACT_SMOOTHED, ///< smoothed p-value
+  QVALUE_TDC,           ///< q-value from target-decoy competition
+  QVALUE_MIXMAX,        ///< q-value from mix-max method
+
+  NUMBER_SCORER_TYPES,
+  INVALID_SCORER_TYPE
+};
+
+/**
+ * \typedef SCORER_TYPE_T
+ * \brief The typedef for scorer type.
+ */
+typedef enum _scorer_type SCORER_TYPE_T;
+
+/**
+ * The enum for protein scorer type
+ */
+enum _protein_scorer_type { PROTEIN_SCORER_PVALUE, 
+                            PROTEIN_SCORER_OLIVER, 
+                            NUMBER_PROTEIN_SCORER_TYPES };
+
+/**
+ * \typedef PROTEIN_SCORER_TYPE_T
+ * \brief The typedef for protein scorer type
+ */
+typedef enum _protein_scorer_type PROTEIN_SCORER_TYPE_T;
+
+/**
+ *\class Match
+ *\brief An object that contains the information of a peptide and the scoring of multiple types
+ */
+
+namespace Crux { class Match; }
+
+/**
+ *\class MatchCollection
+ *\brief An object that contains mutiple match objects
+ */
+class MatchCollection;
+
+/**
+ *\class MatchIterator
+ *\brief An object that navigates the matches
+ */
+class MatchIterator;
+
+/**
+ *\class MatchCollectionIterator
+ *\brief An object that navigates the match_collection objects
+ */
+class MatchCollectionIterator;
+
+/**
+ *\typedef  PeptideSrcIterator 
+ *\brief An object to iterate over the PeptideSrc in a peptide  
+ */
+typedef std::vector<PeptideSrc*>::iterator  PeptideSrcIterator; 
+
+/**
+ * The enum for algorithm type (PERCOLATOR, CZAR, ALL)
+ */
+enum _algorithm {PERCOLATOR_ALGORITHM, 
+                 RCZAR_ALGORITHM, 
+                 QVALUE_ALGORITHM, 
+                 NO_ALGORITHM, 
+                 ALL_ALGORITHM, 
+                 QRANKER_ALGORITHM, 
+                 NUMBER_ALGORITHM_TYPES };
+
+/**
+ * \typedef ALGORITHM_TYPE_T
+ * \brief The typedef for _algorithm (PERCOLATOR, CZAR, ALL)
+ */
+typedef enum _algorithm ALGORITHM_TYPE_T;
+
+/**
+ * the enum for hardklor algorithm type
+ */
+enum _hardklor_algorithm {INVALID_HK_ALGORITHM,
+                          BASIC_HK_ALGORITHM,
+                          FEWEST_PEPTIDES_HK_ALGORITHM,
+                          FAST_FEWEST_PEPTIDES_HK_ALGORITHM,
+                          FEWEST_PEPTIDES_CHOICE_HK_ALGORITHM,
+                          FAST_FEWEST_PEPTIDES_CHOICE_HK_ALGORITHM,
+                          NUMBER_HK_ALGORITHM_TYPES };
+
+typedef enum _hardklor_algorithm HARDKLOR_ALGORITHM_T;
+
+/**
+ * One value for each command that can be passed to crux
+ * (e.g. search-for-matches, sequest-search, percolator).
+ */
+enum _command {
+  INVALID_COMMAND,      ///< required by coding standards
+  BULLSEYE_COMMAND,     ///< bullseye
+  QVALUE_COMMAND,       ///< compute-q-values
+  PERCOLATOR_COMMAND,   ///< percolator
+  TIDE_INDEX_COMMAND,   ///< tide-index
+  TIDE_SEARCH_COMMAND,  ///< tide-search
+  COMET_COMMAND,        ///< comet
+  PSM_CONVERT_COMMAND,  ///< psm-convert
+  READ_SPECTRUMRECORDS_COMMAND, ///< read-spectrumrecords
+  READ_TIDE_INDEX_COMMAND, ///< read-tide-index
+  SPECTRAL_COUNTS_COMMAND, ///< spectral counts
+  QRANKER_COMMAND,      ///< q-ranker
+  BARISTA_COMMAND,      ///< barista
+  PROCESS_SPEC_COMMAND, ///< print-processed-spectra
+  XLINK_SEARCH_COMMAND, ///< search-for-xlinks
+  GENERATE_PEPTIDES_COMMAND, ///< generate-peptides
+  GET_MS2_SPECTRUM_COMMAND, ///<get-ms2-spectrum 
+  PREDICT_PEPTIDE_IONS_COMMAND, ///< predict-peptide-ions
+  PIPELINE_COMMAND,     ///< pipeline
+  CASCADE_COMMAND,      ///< Cascade Search   
+  VERSION_COMMAND,      ///< just print the version number
+  MISC_COMMAND,         ///< miscellaneous command
+  NUMBER_COMMAND_TYPES  ///< always keep this last so the value
+                        /// changes as cmds are added
+};
+
+typedef enum _command COMMAND_T;
+
+/**
+ * \typedef MODIFIED_AA_T
+ * \brief The alternate type for encoding a peptide sequence (instead
+ * of char).  Allows modifications to be added to each AA.  See
+ * modifications.h for more details.
+ */
+// why doesn't this work when I put it in modifications.h????
+//typedef unsigned short MODIFIED_AA_T; ///< letters in the expanded peptide
+typedef uint16_t MODIFIED_AA_T; 
+
+/**
+ * \typedef AA_MOD_T
+ * \brief The struct _aa_mod is typdefed as AA_MOD_T
+ */
+typedef struct _aa_mod AA_MOD_T;
+
+/**
+ * \typedef PEPTIDE_MOD_T
+ * \brief The struct _peptide_mod is typdefed as PEPTIDE_MOD_T
+ */
+typedef struct _peptide_mod PEPTIDE_MOD_T;
+
+/**
+ * \enum _mod_position (typedefed as MOD_POSITION_T)
+ * \brief An indication of where an AA_MOD may occur within a peptide.
+ * Default is ANY_POSITION.
+ */
+enum _mod_position{ 
+  ANY_POSITION, ///< at any position in any peptide
+  C_TERM, ///< only c-terminus of peptide, seq[0]
+  N_TERM  ///< only n-terminus of peptide, seq[len]
+};
+
+/**
+ * \typedef MOD_POSITION_T
+ * \brief The typedef of the indicator for where an amino acid
+ * modification can occur within a peptide and/or protein.
+ */
+typedef enum _mod_position MOD_POSITION_T;
+
+/**
+ * \typedef _linked_list_head is typdefed as LINKED_LIST_T*
+ * All list actions can be performed with an object of this type.
+ */
+typedef struct _linked_list_head LINKED_LIST_T;
+
+/**
+ * \typedef _linked_list_node is typdefed as LINKED_LIST_T*
+ * This is an element of a list.  Can be used for adding to the end of
+ * list or walking through a list.  Cannot allocate a new one.
+ */
+typedef struct _linked_list_node LIST_POINTER_T;
+
+/**
+ * \enum _xlink_site_t (typedefed as XLINK_SITE_T)
+ * \brief An indication of the type of the crosslinking site that
+ * may occur in a peptide.
+ * Default is UNKNOWN.
+ */
+enum XLINK_SITE_T{
+  XLINKSITE_UNKNOWN,
+  XLINKSITE_CTERM,
+  XLINKSITE_NTERM,
+  XLINKSITE_ALL,
+  XLINKSITE_AA,
+  NUMBER_XLINKSITES
+};
+
+enum XLINKMATCH_TYPE_T {
+  INVALID_CANDIDATE,
+  LINEAR_CANDIDATE,
+  DEADLINK_CANDIDATE,
+  SELFLOOP_CANDIDATE, 
+  XLINK_INTER_CANDIDATE,
+  XLINK_INTRA_CANDIDATE,
+  XLINK_INTER_INTRA_CANDIDATE};
+
+/**
+ * \class LinkedPeptide
+ * \brief a cross-linked peptide
+ *
+ */
+class LinkedPeptide;
+
+/**
+ * \class XHHC_Peptide
+ * \brief a XHHC Peptide
+ */
+class XHHC_Peptide;
+
+/**
+ * \enum COMPARISON_T
+ */
+enum COMPARISON_T{
+  COMPARISON_INVALID,
+  COMPARISON_LT,
+  COMPARISON_LTE,
+  COMPARISON_EQ,
+  COMPARISON_GTE,
+  COMPARISON_GT,
+  COMPARISON_NEQ,
+  NUMBER_COMPARISONS,
+};
+
+/**
+ * \enum COLTYPE_T
+ */
+enum COLTYPE_T{
+  COLTYPE_INVALID,
+  COLTYPE_INT,
+  COLTYPE_REAL,
+  COLTYPE_STRING,
+  NUMBER_COLTYPES
+};
+
+/**
+ * \enum SPLITTYPE_T
+ * \brief indication of which peptide in a crosslinked peptide to
+ * generate ions for
+ */
+enum SPLITTYPE_T{
+  SPLITTYPE_INVALID,
+  SPLITTYPE_BOTH,
+  SPLITTYPE_A,
+  SPLITTYPE_B,
+  NUMBER_SPLITTYPES
+};
+
+/**
+ * \typedef peptideToScore
+ * \brief Mapping of peptide object to scores
+ */
+typedef std::map<Crux::Peptide*, FLOAT_T, bool(*)(Crux::Peptide*, Crux::Peptide*) > PeptideToScore;
+
+/**
+ * \typedef ProteinToScore
+ * \brief Mapping of protein object to scores
+ */
+typedef std::map<Crux::Protein*, FLOAT_T, bool(*)(Crux::Protein*, Crux::Protein*) > ProteinToScore;
+
+/**
+ * \typedef MetaProtein
+ * \brief Collection of protein objects which contain exactly the same
+ * set of peptides.
+ */
+typedef std::set<Crux::Protein*, bool(*)(Crux::Protein*, Crux::Protein*) > MetaProtein;
+
+/**
+ * \typedef ProteinToMetaProtein
+ * \brief Mapping of Protein to MetaProtein to which it belongs
+ */
+typedef std::map<Crux::Protein*, MetaProtein, bool(*)(Crux::Protein*, Crux::Protein*) > ProteinToMetaProtein;
+
+/**
+ * \typedef MetaToRank
+ * \brief Mapping of MetaProtein to ranks to the rank asigned to it
+ */
+typedef std::map<MetaProtein, int, bool(*)(MetaProtein, MetaProtein) > MetaToRank;
+
+
+/**
+ * \enum FILE_FORMAT_T
+ * \brief indication of which file format is read
+ * by the Barista or QRanker 
+ */
+enum FILE_FORMAT_T{
+  INVALID_FORMAT,
+  SQT_FORMAT,
+  XML_FORMAT,
+  DELIMITED_FORMAT
+};
+
+#endif
+
diff --git a/src/parameter.cpp b/src/parameter.cpp
new file mode 100644
index 0000000..f2ee192
--- /dev/null
+++ b/src/parameter.cpp
@@ -0,0 +1,947 @@
+/***********************************************************************//**
+ * \file parameter.cpp
+ * FILE: parameter.cpp
+ * AUTHOR: written by Tobias Mann, CRUXified by Chris Park
+ * Missed-cleavage conversion: Kha Nguyen
+ * \brief General parameter handling utilities. MUST declare ALL
+ * optional command parameters here inside initalialize_parameters.
+ ****************************************************************************/
+
+#include "util/crux-utils.h"
+#include "io/LineFileReader.h"
+#include "parameter.h"
+#include "util/Params.h"
+#include "util/StringUtils.h"
+#include "util/WinCrux.h"
+#include "model/Peptide.h"
+#include <iostream>
+
+using namespace std;
+
+/*
+ * Global variables
+ */
+
+static const char* parameter_type_strings[NUMBER_PARAMETER_TYPES] = { 
+  "INT_ARG", "DOUBLE_ARG", "STRING_ARG", "MASS_TYPE_T", "DIGEST_T", 
+  "ENZYME_T", 
+  "bool", "SCORER_TYPE_T", "ION_TYPE_T",
+  "ALGORITHM_T", "HARDKLOR_ALGORITHM_TYPE_T",
+  "WINDOW_TYPE_T", "MEASURE_TYPE_T", "THRESHOLD_T", 
+  "PARSIMONY_TYPE_T", "QUANT_LEVEL_TYPE_T", "DECOY_TYPE_T", "MASS_FORMAT_T"};
+
+//one hash for parameter values, one for usage statements, one for types
+// all hashes keyed on parameter/option name
+
+AA_MOD_T* list_of_mods[MAX_AA_MODS]; // list containing all aa mods
+                                    // in param file, c-,n-term mods at end
+AA_MOD_T** list_of_variable_mods = NULL; // pointer to first non-fixed mod
+AA_MOD_T** list_of_c_mods = NULL; // pointer to first c_term mod in list
+AA_MOD_T** list_of_n_mods = NULL; //pointer to first n_term mod in list
+int fixed_c_mod = -1; // position in list_of_mods or -1 if not present
+int fixed_n_mod = -1; // position in list_of_mods or -1 if not present
+int num_fixed_mods = 0;
+int num_mods = 0;     // ANY_POSITION mods
+int num_c_mods = 0; // variable c-term mods
+int num_n_mods = 0; // variable n-term mods
+//require num_mods + num_c_mods + num_n_mods + 
+//(fixed_c_mod > -1) + (fixed_n_mod > -1) <= MAX_AA_MODS
+
+char* pre_cleavage_list;
+char* post_cleavage_list;
+int pre_list_size;
+int post_list_size;
+bool pre_for_inclusion;
+bool post_for_inclusion;
+
+vector<string> comet_enzyme_info_lines_;
+
+/**
+ * \returns the comet enzyme info lines parsed from the file
+ * or generated defaults
+ */
+const std::vector<std::string>& get_comet_enzyme_info_lines() {
+  return comet_enzyme_info_lines_;
+}
+
+/************************************
+ * Private function declarations
+ ************************************ 
+ */
+
+bool string_to_param_type(const char*, PARAMETER_TYPE_T* );
+
+/************************************
+ * Function definitions
+ ************************************
+ */
+
+/**
+ * initialize parameters
+ * ONLY add optional parameters here!!!
+ * MUST declare ALL optional parameters in array to be used
+ * Every option and its default value for every executable 
+ * must be declared here
+ */
+void initialize_parameters(void){
+  /* initialize the list of mods */                           
+  for (int mod_idx = 0; mod_idx < MAX_AA_MODS; mod_idx++) {
+    //initialize_aa_mod(&list_of_mods[mod_idx], mod_idx);     
+    list_of_mods[mod_idx] = new_aa_mod(mod_idx);              
+  }                                                           
+
+  /* initialize custom enzyme variables */
+  pre_list_size = 0;
+  post_list_size = 0;
+  pre_cleavage_list = NULL;
+  post_cleavage_list = NULL;
+  pre_for_inclusion = true;
+  post_for_inclusion = false;
+
+  // Default comet enzyme lines
+  comet_enzyme_info_lines_.push_back("0.  No_enzyme\t\t\t\t0       -           -");
+  comet_enzyme_info_lines_.push_back("1.  Trypsin\t\t\t\t1      KR           P");
+  comet_enzyme_info_lines_.push_back("2.  Trypsin/P\t\t\t\t1      KR           -");
+  comet_enzyme_info_lines_.push_back("3.  Lys_C\t\t\t\t1      K            P");
+  comet_enzyme_info_lines_.push_back("4.  Lys_N\t\t\t\t0      K            -");
+  comet_enzyme_info_lines_.push_back("5.  Arg_C\t\t\t\t1      R            P");
+  comet_enzyme_info_lines_.push_back("6.  Asp_N\t\t\t\t0      D            -");
+  comet_enzyme_info_lines_.push_back("7.  CNBr\t\t\t\t1      M            -");
+  comet_enzyme_info_lines_.push_back("8.  Glu_C\t\t\t\t1      DE           P");
+  comet_enzyme_info_lines_.push_back("9.  PepsinA\t\t\t\t1      FL           P");
+  comet_enzyme_info_lines_.push_back("10. Chymotrypsin\t\t\t1      FWYL         P");
+}
+
+/**
+ * Read the value given for custom-enzyme and enter values into global
+ * params.  Correct syntax is [A-Z]|[A-Z] or {A-Z}|{A-Z}.  An X
+ * indicates that any residue is legal. Sets pre/post_list size and
+ * allocates memory for pre/post_cleavage_list.  Sets
+ * pre/post_for_inclusion as true if [] encloses list or false if {}
+ * encloses list.  For special case of [X], set p_cleavage_list as
+ * empty and inclusion as false.
+ */
+// NOTE (BF mar-11-09): for testing would be nice if this returned
+// error code instead of dying
+void parse_custom_enzyme(const string& rule_str){
+  bool success = true;
+  int len = rule_str.length();
+  int idx = 0;
+  int pipe_idx = 0;
+
+  // 1. find the |
+  for(idx = 0; idx < len; idx++){
+    if( rule_str[idx] == '|' ){
+      pipe_idx = idx;
+      break;
+    }
+  }
+  // check that there isn't a second
+  for(idx = idx+1; idx < len; idx++){
+    if( rule_str[idx] == '|' ){
+      success = false;      
+      break;
+    }
+  }
+
+  // 2. set beginning and end of strings relative to pipe, start, end
+  //    0 1    p-1 p p+1 p+2     len-1 len
+  //    [ X    ]   | [   X       ]     '0'
+  int pre_first_idx = 1;
+  int pre_end_idx = pipe_idx - 1;
+  int post_first_idx = pipe_idx + 2;
+  int post_end_idx = len -1;
+
+  // 3. check that braces match and set inclusion
+  // pre-list
+  if(pipe_idx < 1){
+    success = false;
+  }else if(rule_str[pre_first_idx-1] == '[' && 
+           rule_str[pre_end_idx] == ']'){
+    pre_for_inclusion = true;
+  }else if(rule_str[pre_first_idx-1] == '{' && 
+           rule_str[pre_end_idx] == '}'){
+    pre_for_inclusion = false;
+  }else{
+    success = false;
+  }
+
+  // post list
+  if(pipe_idx + 2 >= len ){
+    success = false;
+  }else if(rule_str[post_first_idx-1] == '[' && 
+           rule_str[post_end_idx] == ']'){
+    post_for_inclusion = true;
+  }else if(rule_str[post_first_idx-1] == '{' && 
+           rule_str[post_end_idx] == '}'){
+    post_for_inclusion = false;
+  }else{
+    success = false;
+  }
+
+  // check that braces aren't empty 
+  if(pre_first_idx >= pre_end_idx || post_first_idx >= post_end_idx ){
+    success = false;
+  }
+
+  if( success == false ){
+    carp(CARP_FATAL, "Custom enzyme syntax '%s' is incorrect.  "
+         "Must be of the form [AZ]|[AZ] or with [] replaced by {}. "
+         "AZ is a list of residues (letters A-Z) required [] or prohibited {}. "
+         "Use [X] to indicate any reside is legal.",
+         rule_str.c_str());
+  }
+
+  // 4. allocate lists and fill
+  pre_list_size = pre_end_idx - pre_first_idx;
+  pre_cleavage_list = (char*)mycalloc(pre_list_size, sizeof(char));
+  for(idx = 0; idx < pre_list_size; idx++){
+    pre_cleavage_list[idx] = rule_str[pre_first_idx+idx];
+  }
+
+  post_list_size = post_end_idx - post_first_idx;
+  post_cleavage_list = (char*)mycalloc(post_list_size, sizeof(char));
+  for(idx = 0; idx < post_list_size; idx++){
+    post_cleavage_list[idx] = rule_str[post_first_idx+idx];
+  }
+
+
+  // 5. check special case of [X]
+  if(strncmp( rule_str.c_str(), "[X]", pre_list_size+2) == 0){
+    free(pre_cleavage_list);
+    pre_cleavage_list = NULL;
+    pre_list_size = 0;
+    pre_for_inclusion = false;
+  }
+
+  if(strncmp( rule_str.c_str()+post_first_idx-1, "[X]", post_list_size+2) == 0){
+    free(post_cleavage_list);
+    post_cleavage_list = NULL;
+    post_list_size = 0;
+    post_for_inclusion = false;
+  }
+}
+
+/**
+ * Maximum size of the description of a parameter.
+ */
+static const int PARAMETER_BUFFER = 10000;
+
+/**
+ *  Print modifications to the given file in the format used in the
+ *  parameter file.  Expected names are "mod", "cmod", "nmod".  The
+ *  function to get the list of modifications should correspond to the
+ *  mod name.  (i.e. for "mod", use get_aa_mod_list(), for "cmod" use
+ *  get_c_mod_list(), for "nmod" use get_n_mod_list())
+ */
+void print_mods_parameter_file(ostream* param_file, 
+                               const char* name,
+                               int (*mod_getter)(AA_MOD_T***)){
+  // get mod description
+  char comments[PARAMETER_BUFFER] = "";
+  strcat_formatted(comments, "# ", Params::GetUsage(name).c_str());
+  strcat_formatted(comments, "# ", Params::GetFileNotes(name).c_str());
+  int precision = Params::GetInt("mod-precision");
+
+  // get list of mods to print
+  AA_MOD_T** mod_list = NULL;
+  int total_mods = (*mod_getter)(&mod_list);
+  for( int mod_idx = 0 ; mod_idx < total_mods; mod_idx++){
+    float mass = aa_mod_get_mass_change(mod_list[mod_idx]);
+
+    // standard mods have the format mass:aa_list:max
+    if( strcmp(name, "mod") == 0 ){
+      int max = aa_mod_get_max_per_peptide(mod_list[mod_idx]);
+      bool* aas_modified = aa_mod_get_aa_list(mod_list[mod_idx]);
+      char aa_str[PARAMETER_BUFFER] = "";
+      char* aa_str_ptr = aa_str;
+      for(int aa_idx = 0; aa_idx < AA_LIST_LENGTH; aa_idx++){
+        if( aas_modified[aa_idx] == true ){
+          sprintf(aa_str_ptr, "%c", (aa_idx + 'A'));
+          aa_str_ptr++;
+        }
+      }
+      char buffer[1024];
+      sprintf(buffer, "%s%s=%.*f:%s:%i", comments, name, precision, 
+              mass, aa_str, max); 
+      *param_file << buffer << endl << endl;
+    } else { // nmod, cmod have the format mass:end_distance
+      int distance = aa_mod_get_max_distance(mod_list[mod_idx]);
+      char buffer[1024];
+      sprintf(buffer, "%s%s=%.*f:%i", comments, name, precision, 
+              mass, distance);
+      *param_file << buffer << endl << endl;
+    }
+  }
+
+  // if there were no mods, print placeholder
+  if( total_mods == 0 ){
+    *param_file << Params::ProcessHtmlDocTags(comments) << name << "=NO MODS" << endl << endl;
+  }
+}
+
+/**
+ *
+ * parse the parameter file given the filename
+ */
+void parse_parameter_file(
+  const char* parameter_filename ///< the parameter file to be parsed -in
+  )
+{
+  FILE *file;
+  char *line;
+  int idx;
+
+  carp(CARP_DETAILED_DEBUG, "Parsing parameter file '%s'",parameter_filename);
+
+  /* check if parameter file exists, if not die */
+  if(access(parameter_filename, F_OK)){
+    carp(CARP_FATAL, "Could not open parameter file '%s'", parameter_filename);
+  }
+
+  LineFileReader line_reader(parameter_filename);
+  
+  bool found_comet = false;
+
+  while(line_reader.hasNext()) {
+    string line = line_reader.next();
+    bool found_equal = false;
+    if (found_comet) {
+      comet_enzyme_info_lines_.push_back(line);
+    } else {
+      if (line.find("[COMET_ENZYME_INFO]") != string::npos) {
+        comet_enzyme_info_lines_.clear();
+        found_comet = true;
+      } else {
+        size_t comment = line.find('#');
+        if (comment != string::npos) {
+          line = line.substr(0, comment);
+        }
+        size_t equals = line.find('=');
+        if (equals == string::npos) {
+          continue;
+        }
+        string option_name = StringUtils::Trim(line.substr(0, equals));
+        string option_value = StringUtils::Trim(line.substr(equals + 1));
+        if (!Params::Exists(option_name)) {
+          carp(CARP_WARNING, "Read parameter '%s' from parameter file, but no "
+                             "such parameter exists.", option_name.c_str());
+          continue;
+        } else if (Params::IsArgument(option_name)) {
+          carp(CARP_WARNING, "Read parameter '%s' from parameter file, but is "
+                             "an argument, not an option.", option_name.c_str());
+          continue;
+        }
+        Params::Set(option_name, option_value);
+      }
+    }
+  }
+  if (comet_enzyme_info_lines_.empty()) {
+    carp(CARP_WARNING, "putting in default comet enzyme lines");
+    comet_enzyme_info_lines_.push_back("0.  No_enzyme\t\t\t\t0       -           -");
+    comet_enzyme_info_lines_.push_back("1.  Trypsin\t\t\t\t1      KR           P");
+    comet_enzyme_info_lines_.push_back("2.  Trypsin/P\t\t\t\t1      KR           -");
+    comet_enzyme_info_lines_.push_back("3.  Lys_C\t\t\t\t1      K            P");
+    comet_enzyme_info_lines_.push_back("4.  Lys_N\t\t\t\t0      K            -");
+    comet_enzyme_info_lines_.push_back("5.  Arg_C\t\t\t\t1      R            P");
+    comet_enzyme_info_lines_.push_back("6.  Asp_N\t\t\t\t0      D            -");
+    comet_enzyme_info_lines_.push_back("7.  CNBr\t\t\t\t1      M            -");
+    comet_enzyme_info_lines_.push_back("8.  Glu_C\t\t\t\t1      DE           P");
+    comet_enzyme_info_lines_.push_back("9.  PepsinA\t\t\t\t1      FL           P");
+    comet_enzyme_info_lines_.push_back("10. Chymotrypsin\t\t\t1      FWYL         P");
+  }
+}
+
+/**************************************************
+ *   GETTERS (public)
+ **************************************************
+ */
+
+DIGEST_T get_digest_type_parameter( const char* name ){
+  string param = Params::GetString(name);
+  DIGEST_T digest_type = string_to_digest_type(param);
+  if( digest_type == INVALID_DIGEST ){
+    carp(CARP_FATAL, "Digest_type parameter %s has the value %s " 
+         "which is not of the correct type.", name, param.c_str());
+  }
+  return digest_type;
+}
+
+ENZYME_T get_enzyme_type_parameter( const char* name ){
+  string param = Params::GetString(name);
+  ENZYME_T enzyme_type = string_to_enzyme_type(param);
+  if( enzyme_type == INVALID_ENZYME ){
+    carp(CARP_FATAL, "Enzyme_type parameter %s has the value %s " 
+         "which is not of the correct type.", name, param.c_str());
+  }
+  return enzyme_type;
+}
+
+MASS_TYPE_T get_mass_type_parameter(
+   const char* name
+   ){
+  string param_value_str = Params::GetString(name);
+  MASS_TYPE_T param_value;
+  bool success = string_to_mass_type(param_value_str, &param_value);
+
+  if( ! success ){
+    carp(CARP_FATAL, 
+         "Mass_type parameter %s has the value %s which is not of "
+          "the correct type", name, param_value_str.c_str());
+  }
+  return param_value;
+}
+
+THRESHOLD_T get_threshold_type_parameter(
+  const char* name
+  ){
+  return string_to_threshold_type(Params::GetString(name));
+}
+
+DECOY_TYPE_T get_decoy_type_parameter(
+  const char* name
+  ){
+  return string_to_decoy_type(Params::GetString(name));
+}
+
+DECOY_TYPE_T get_tide_decoy_type_parameter(
+  const char* name
+) {
+  return string_to_tide_decoy_type(Params::GetString(name));
+}
+
+MASS_FORMAT_T get_mass_format_type_parameter(
+  const char* name
+  ){
+  return string_to_mass_format(Params::GetString(name));
+}
+
+int get_max_ion_charge_parameter(
+  const char* name
+  ){
+  string param_value_str = Params::GetString(name);
+  if (param_value_str == "peptide") {
+    return BILLION; //using this with min function on peptide charge.
+  }
+  int ans = atoi(param_value_str.c_str());
+  if (ans <= 0 || ans > 6) {
+    carp(CARP_FATAL,
+      "Max_ion_charge parameter %s has the value %s which is not a "
+      "legal value", name, param_value_str.c_str());
+  }
+  return ans;
+}
+
+char get_delimiter_parameter(
+  const char* name
+  ) {
+  string param_value_str = Params::GetString(name);
+  if (param_value_str == "tab") {
+    return '\t'; //using this with min function on peptide charge.
+  } else {
+    if (param_value_str.length() != 1) {
+      carp(CARP_FATAL,
+        "delimiter parameter %s with value %s is not a single character or "
+        "'tab'", name, param_value_str.c_str());
+    }
+    return param_value_str[0];
+  }
+}
+
+COLTYPE_T get_column_type_parameter(const char* name){
+  return string_to_column_type(Params::GetString(name));
+}
+
+COMPARISON_T get_comparison_parameter(const char* name) {
+  return string_to_comparison(Params::GetString(name));
+}
+
+
+/**************************************************
+ *   SETTERS (private)
+ **************************************************
+ */
+
+/**
+ * Routines that return crux enumerated types. 
+ */
+
+bool string_to_param_type(const char* name, PARAMETER_TYPE_T* result ){
+  bool success = true;
+  if( name == NULL ){
+    return false;
+  }
+
+  int param_type = convert_enum_type_str(
+                   name, -10, parameter_type_strings, NUMBER_PARAMETER_TYPES);
+  (*result) = (PARAMETER_TYPE_T)param_type;
+
+  if( param_type == -10 ){
+    success = false;
+  }
+  return success;
+}
+
+/**
+ * \brief Get the pointer to the list of AA_MODs requested by the
+ * user.  Does NOT include the c- and n-term mods
+ * \returns The number of items pointed to by mods
+ */
+int get_aa_mod_list
+  (AA_MOD_T*** mods) ///< the address of an array of pointers
+{
+  *mods = list_of_variable_mods;
+  return num_mods;
+}
+
+/**
+ * \brief Get the pointer to the list of AA_MODs for the peptide
+ * c-terminus.  Return 0 and set mods==NULL if there are no c-term
+ * mods.
+ *
+ * \returns The number of items pointed to by mods
+ */
+int get_c_mod_list
+  (AA_MOD_T*** mods) ///< the address of an array of pointers
+{
+  *mods = list_of_c_mods;
+  return num_c_mods;
+}
+/**
+ * \brief Get the pointer to the list of AA_MODs for the peptide
+ * n-terminus.  Return 0 and set mods==NULL if there are no n-term
+ * mods.
+ *
+ * \returns The number of items pointed to by mods
+ */
+int get_n_mod_list
+  (AA_MOD_T*** mods) ///< the address of an array of pointers
+{
+  *mods = list_of_n_mods;
+  return num_n_mods;
+}
+
+/**
+ * \brief Get the pointer to the list of AA_MODs requested by the
+ * user.  Includes aa_mods, c- and n-term mods.
+ * \returns The number of items pointed to by mods
+ */
+int get_all_aa_mod_list
+  (AA_MOD_T*** mods) ///< the address of an array of pointers
+{
+  *mods = list_of_mods;
+  return num_mods + num_c_mods + num_n_mods + num_fixed_mods;
+}
+
+/**
+ * \returns The index of the C_TERM or N_TERM fixed modification in
+ * the global list of modifications.
+ */
+int get_fixed_mod_index(MOD_POSITION_T position){
+  int index = -1;
+  switch(position){
+  case N_TERM:
+    index = fixed_n_mod;
+    break;
+  case C_TERM:
+    index = fixed_c_mod;
+    break;
+  case ANY_POSITION:
+    carp(CARP_ERROR, "Getting non-terminal fixed mods not implemented.");
+    break;
+  }
+  return index;
+}
+
+/**
+ * \returns the number of fixed terminal modifications: 0, 1, or 2.
+ */
+int get_num_fixed_mods(){
+  return num_fixed_mods;
+}
+
+/* Helper functions for read_mods_from_file */
+/* TODO: these reads could be made more general as in
+   read_double(&double, char*, char)   */
+
+/**
+ * \brief Set the mass_change field in an AA_MOD based on a line from
+ * a parameter file.
+ *
+ * Assumes that the line points to a FLOAT_T followed by separator.
+ * Converts the number and sets the appropriate field in the mod.
+ * Dies with error if line does not point to a number.  Returns a
+ * pointer to the character after the first instance of separator or
+ * to the end of the line if separator does not appear.
+ *
+ * \returns A pointer to the next token in the line.
+ */
+char* read_mass_change(AA_MOD_T* mod, char* line, char separator,
+                       int& max_precision){
+  //carp(CARP_DEBUG, "token points to %s", line);
+
+  aa_mod_set_mass_change(mod, atof(line));
+  if( aa_mod_get_mass_change(mod) == 0){
+    carp(CARP_FATAL, "The mass change is not valid for mod %s", line);
+  }
+  char* next = line;
+  char* decimal = NULL;
+  // read to end of line, colon, or whitespace
+  while(*next != '\0' && *next != separator && *next != ' ' && *next != '\t'){
+    if(*next == '.'){
+      decimal = next;
+    }
+    next++;
+  }
+  // distance from decimal to separator is number of digits
+  if( decimal != NULL ){
+    int distance = next - decimal -1;
+    if( distance > max_precision ){
+      max_precision = distance;
+    }
+  }
+
+  next++;  // point past the separator
+
+  return next;
+}
+/**
+ * \brief Read the line from the parameter file and set the bool vaues
+ * in the mod's aa_list appropriately.
+ *
+ * Assumes that line points to a list of letters, a-Z, followed by
+ * separator.  Fails if characters before separator are not a-Z.
+ * Returns a pointer to the character after separator, or to the end
+ * of the line if separator is not found.
+ *
+ * \returns A pointer to the next token in the line.
+ */
+char* set_aa_list(AA_MOD_T* mod, char* line, char separator){
+  carp(CARP_DETAILED_DEBUG, "token points to %s", line);
+
+  bool* aa_list = aa_mod_get_aa_list(mod);
+  while( *line != '\0' && *line != ':'){
+    char aa = toupper( *line );
+    carp(CARP_DETAILED_DEBUG, "aa is %c", aa);
+
+    if( aa < 'A' || aa > 'Z' ){
+      carp(CARP_FATAL, "The letter '%c' in the aa list is invalid.", aa);
+    }
+    carp(CARP_DETAILED_DEBUG, "aa index is %d", aa - 'A');
+    aa_list[aa - 'A'] = true;
+    //mod->aa_list[aa - 'A'] = true;
+    carp(CARP_DETAILED_DEBUG, "Set %c to true index %d", aa, (int)(aa-'A'));
+    line++;
+  }
+
+  if( *line == separator ){
+    line++;
+  }
+  return line;
+}
+
+/**
+ * \brief Set the max_per_peptide field in the mod with the value
+ * pointed to by line.
+ *
+ * Fails if line does not point to a valid integer.
+ * \returns void
+ */
+char* read_max_per_peptide(AA_MOD_T* mod, char* line, char separator){
+  //carp(CARP_DETAILED_DEBUG, "token points to %s", line);
+  if( *line == '\0' ){
+    carp(CARP_FATAL, "Missing maximum mods per peptide for mod %s", line);
+  }
+
+  aa_mod_set_max_per_peptide(mod, atoi(line));
+  if( aa_mod_get_max_per_peptide(mod) == 0 ){
+    carp(CARP_FATAL, "Maximum mods per peptide is invalid for mod %s", line);
+  }
+
+  char* next = line;
+  while(*next != '\0' && *next != separator){
+    next++;
+  }
+  if (*next != '\0') {
+    next++;  // point past the separator
+  }
+  return next;
+}
+
+char* read_prevents_cleavage(AA_MOD_T* mod, char* line, char separator) {
+  char* next = line;
+  switch(*line) {
+    case ':':
+      next++;
+    case '\0':
+      carp(CARP_DEBUG, "No prevents_cleavage property found %s",line);
+      break;
+    case 'T':
+    case 't':
+      carp(CARP_DEBUG, "prevents_cleavage set to true %s",line);
+      aa_mod_set_prevents_cleavage(mod, true);
+      break;
+    case 'F':
+    case 'f':
+      carp(CARP_DEBUG, "prevents_cleavage set to false %s", line);
+      aa_mod_set_prevents_cleavage(mod, false);
+      break;
+  }
+
+  while (*next != '\0' && *next != separator) {
+    next++;
+  }
+  if (*next != '\0') {
+    next++; //points past the separator
+  }
+
+  return next;
+}
+
+char* read_prevents_xlink(AA_MOD_T* mod, char* line, char separator) {
+  char* next = line;
+  switch(*line) {
+    case ':':
+      next++;
+    case '\0':
+      carp(CARP_DEBUG, "No prevents_xlink property found %s",line);
+      break;
+    case 'T':
+    case 't':
+      carp(CARP_DEBUG, "prevents_xlink set to true %s",line);
+      aa_mod_set_prevents_xlink(mod, true);
+      break;
+    case 'F':
+    case 'f':
+      carp(CARP_DEBUG, "prevents_xlink set to false %s",line);
+      aa_mod_set_prevents_xlink(mod, false);
+      break;
+  }
+
+  while (*next != '\0' && *next != separator) {
+    next++;
+  }
+  if (*next != '\0') {
+    next++; //points past the separator
+  }
+
+  return next;
+}
+
+/**
+ * \brief Set the max_distance field in the mod with the value
+ * pointed to by line.
+ *
+ * Fails if line does not point to a valid integer.
+ * \returns void
+ */
+void read_max_distance(AA_MOD_T* mod, char* line){
+  int max_distance = atoi(line);
+
+  // make sure it's 0 because the file says 0; if not, default to max
+  if( max_distance == 0 && *line != '0' ){
+    max_distance = MAX_PROTEIN_SEQ_LENGTH;
+  }
+  aa_mod_set_max_distance(mod, max_distance);
+
+  return;
+}
+
+/**
+ * \brief This is the private function, detailed reader used by
+ * read_mods_from_file().
+ *
+ * Reads through whole file looking for lines that start with
+ * line_tag.  Parses information into each of those lines putting it
+ * into the list_of_aa_mods, beginning with index cur_index and not
+ * exceeding MAX_AA_MODS.  Distinguishes between regular
+ * aa_mods and c-term or n-term mods for which struct fields it
+ * fills.
+ * \returns Returns the index of the next mod in the list.
+ */
+int read_mods(
+ FILE* param_file, ///< file from which to read mod info
+ int cur_index,    ///< index of next mod to be entered
+ const char* line_tag,///< text at beginning of mod line (eg mod=)
+ MOD_POSITION_T position,///< type of mod (any, c-, n-term)
+ int& max_precision///< most digits in mass change
+){
+
+  carp(CARP_DEBUG, "Reading mods for %d position", (int)position);
+  char* line = (char*)mycalloc(MAX_LINE_LENGTH, sizeof(char));
+
+
+  // read the whole file looking for mods
+  while(fgets(line, MAX_LINE_LENGTH, param_file)==line){
+    // read line until one starts with tag (mod=, cmod=, nmod=)
+    if( 0 != strncmp(line, line_tag, strlen(line_tag)) ){
+      continue;
+    }
+
+    // check bounds on index
+    if( cur_index == MAX_AA_MODS ){
+      carp(CARP_FATAL, "Too many modifications in parameter file, " \
+           "%d maximum", MAX_AA_MODS);
+    }
+    AA_MOD_T* cur_mod = list_of_mods[cur_index];
+
+    // prepare for reading line
+    carp(CARP_DEBUG, "mod line: %s", line);
+    char* token = line + strlen(line_tag);
+
+    // check for default value "NO MODS" written to default.parameter
+    if( strncmp(token, "NO MODS", strlen("NO MODS")) == 0 ){
+      return cur_index;
+    }
+
+    // get the FLOAT_T and check for ok-ness
+    token = read_mass_change(cur_mod, token, ':', max_precision);
+
+    // fill in values for standard mods
+    if( position == ANY_POSITION ){
+      // read the aa list and set the values in mod
+      token = set_aa_list(cur_mod, token, ':');
+
+      // get max per peptide
+      token = read_max_per_peptide(cur_mod, token, ':');
+
+      // read whether this modification prevents cleavage (OPTIONAL)
+      token = read_prevents_cleavage(cur_mod, token, ':');
+
+      // read whether this modification prevents xlink (OPTIONAL)
+      token = read_prevents_xlink(cur_mod, token, ':');
+
+
+    } else { // fill in values for c- or n-mod
+      // get the max distance
+      read_max_distance(cur_mod, token);
+
+      // set all bools to true
+      int i = 0;
+      bool* aa_list = aa_mod_get_aa_list(cur_mod);
+      for(i=0; i<AA_LIST_LENGTH; i++){
+        aa_list[i] = true;
+      }
+      // set type to c-/n-term and max to 1
+      aa_mod_set_position(cur_mod, position);
+      aa_mod_set_max_per_peptide(cur_mod, 1);
+    }
+
+    //  increment counter and get next mod
+    cur_index++;
+
+  }// repeat until end of file
+
+  free(line);
+  return cur_index;
+}
+
+/**
+ * \brief Read the paramter file and populate the static parameter
+ * list of AA_MODS, inlcuding the list of position mods.
+ *
+ * Also updates the array of amino_masses.  Dies with an error if the
+ * number of mods in the parameter file is greater than MAX_AA_MODS.
+ * \returns void
+ */
+void read_mods_from_file(const char* param_filename) {
+  carp(CARP_DEBUG, "Reading mods from parameter file '%s'", param_filename);
+
+  // open file
+  FILE* param_file = fopen(param_filename, "rb");
+  if( param_file == NULL ){
+    carp(CARP_FATAL, "Could not open parameter file '%s'", param_filename);
+  }
+
+  // get first mod
+  int total_num_mods = 0;
+  int max_precision = 0;  // gets updated with max seen in param file
+
+  // start with fixed terminal mods
+  total_num_mods = read_mods(param_file, 0, "nmod-fixed=",
+                             N_TERM, max_precision);
+  // keep track of where we stored the fixed mod
+  if( total_num_mods == 1 ){
+    fixed_n_mod = 0;  // first in list
+  } else if (total_num_mods > 1){
+    carp(CARP_FATAL, "Cannot specify more than one fixed n-terminal modification.");
+  }
+  rewind( param_file );
+
+  total_num_mods = read_mods(param_file, total_num_mods, "cmod-fixed=", 
+                             C_TERM, max_precision);
+  // keep track of where we stored the fixed mod
+  if( total_num_mods == 1 && fixed_n_mod == -1 ){
+    fixed_c_mod = 0;  // first in list
+  } else if( total_num_mods == 2 ){
+    fixed_c_mod = 1;  // second in list
+  } else if (total_num_mods > 2){
+    carp(CARP_FATAL, 
+         "Cannot specify more than one fixed n-terminal modification.");
+  }
+  rewind( param_file );
+  num_fixed_mods = total_num_mods;
+
+  // now get the variable mods
+  list_of_variable_mods = &list_of_mods[total_num_mods];
+  total_num_mods = read_mods(param_file, total_num_mods,
+                             "mod=", ANY_POSITION, max_precision);
+  num_mods = total_num_mods - num_fixed_mods;  // set global var
+
+  // Read the file again to get the cmods
+  rewind( param_file );
+
+  // set cmod pointer to next in array
+  list_of_c_mods = &list_of_mods[total_num_mods];
+
+  total_num_mods = read_mods(param_file, total_num_mods, "cmod=", 
+                             C_TERM, max_precision);
+  num_c_mods = total_num_mods - num_mods - num_fixed_mods;
+
+  // if no cmods present, don't point to the list of mods
+  if (num_c_mods == 0) {
+    list_of_c_mods = NULL;
+  }
+
+  // Read the file again to get the nmods
+  rewind( param_file );
+
+  // set nmod pointer to next in array
+  list_of_n_mods = &list_of_mods[total_num_mods];
+
+  total_num_mods = read_mods(param_file, total_num_mods, "nmod=", 
+                             N_TERM, max_precision);
+  num_n_mods = total_num_mods - num_mods - num_c_mods - num_fixed_mods;
+
+  // if no nmods present, don't point to the list of mods
+  if( num_n_mods == 0){
+    list_of_n_mods = NULL;
+  }
+
+  // set the mod-precision option
+  Params::Set("mod-precision", max_precision);
+
+  // close file
+  fclose(param_file);
+  carp(CARP_DEBUG, "Finished reading mods file");
+}
+
+void incrementNumMods() {
+  num_mods++;
+}
+
+void resetMods() {
+  for (int i = 0; i < MAX_AA_MODS; i++) {
+    free_aa_mod(list_of_mods[i]);
+    list_of_mods[i] = new_aa_mod(i);
+  }
+  num_mods = 0;
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/parameter.h b/src/parameter.h
new file mode 100644
index 0000000..617aae8
--- /dev/null
+++ b/src/parameter.h
@@ -0,0 +1,266 @@
+/**
+ * \file parameter.h
+ * $Revision: 1.37 $
+ * \brief General parameter handling utilities. All values stored here.
+
+ * \detail MUST declare ALL optional command line parameters and
+ * required command line arguments here in initalialize_parameters.
+ * Parameters can only be set via parse_cmd_line_into_params_hash()
+ * which takes values from the command line and from an optional
+ * parameter file (provided on the command line with the --parameter
+ * option). Options are checked for correct type and legal values.
+ * Exits with usage statement on error.  Parameter values can be
+ * retrieved with get_<type>_paramter functions.
+ * 
+ ****************************************************************************/
+#ifndef PARAMETER_FILE_H
+#define PARAMETER_FILE_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <limits.h>
+#include <string>
+#include "util/utils.h"
+#include "util/crux-utils.h"
+#include "io/carp.h"
+#include "model/objects.h"
+
+#include "util/modifications.h"
+
+static const int PARAMETER_LENGTH = 1024; 
+///< maximum length of parameter name and value in characters
+static const int NUM_PARAMS = 512; ///< maximum number of parameters allowed
+static const int MAX_LINE_LENGTH = 4096; ///< maximum line length in the parameter file
+static const int MILLION = 1000000;
+static const int BILLION = 1000000000;
+static const int SMALL_BUFFER = 256;
+static const int MAX_SET_PARAMS = 256;
+
+// The size of the bins for discretizing the m/z axis of the
+// observed spectrum.  For use with monoisotopic mass.
+static const FLOAT_T BIN_WIDTH_MONO = 1.0005079;
+// The size of the bins for discretizing the m/z axis of the
+// observed spectrum.  For use with average mass.
+static const FLOAT_T BIN_WIDTH_AVERAGE = 1.0011413;
+
+// Global variables
+// NOTE (BF mar-10-09): Could be like mod lists, but will require a
+// get_parameter call for each...residue? protein?
+extern char* pre_cleavage_list;
+extern char* post_cleavage_list;
+extern int pre_list_size;
+extern int post_list_size;
+extern bool pre_for_inclusion;
+extern bool post_for_inclusion;
+
+// TODO (BF 1-28-08): these should be private. move to parameter.c
+/**
+ * Data types of parameters.  Used for checking valid parameter input
+ * from user.
+ *
+ * To add a new parameter type:  
+ *  (for NEW types) 1. create enum, 
+ *                  2. create array of strings, 
+ *                  3. write string-to-type,
+ *                  4. write type-to-string
+ *  (for ALL types) 5. add to parameter-type enum and strings
+ *                  6. write get-type-parameter
+ *                  7. write set-type-parameter
+ *                  8. add to the check_type_and_bounds
+ *
+ */
+enum parameter_type {
+  INT_P,             ///< parameters of type int
+  DOUBLE_P,          ///< parameters of type double
+  STRING_P,          ///< parameters of type char*
+  MASS_TYPE_P,       ///< parameters of type MASS_TYPE_T
+  DIGEST_TYPE_P,   ///< parameters of type DIGEST_T
+  ENZYME_TYPE_P,     ///< parameters of type ENZYME_T
+  //PEPTIDE_TYPE_P,    ///< parameters of type PEPTIDE_TYPE_T
+  BOOLEAN_P,         ///< parameters of type bool
+  SCORER_TYPE_P,     ///< parameters of type SCORER_TYPE_T
+  ION_TYPE_P,        ///< parameters of type ION_TYPE_T
+  ALGORITHM_TYPE_P,  ///< parameters of type ALGORITHM_TYPE_T
+  HARDKLOR_ALGORITHM_TYPE_P, ///< parameters of type HARDKLOR_ALGORITHM_T
+  WINDOW_TYPE_P,     ///< parameters of type WINDOW_TYPE_T
+  MEASURE_TYPE_P,    ///< parameters of type MEASURE_TYPE_T
+  THRESHOLD_P,       ///< parameters of type THRESHOLD_TYPE_T
+  PARSIMONY_TYPE_P,  ///< parameters of type PARSIMONY_TYPE_T
+  QUANT_LEVEL_TYPE_P,///< parameters of type QUANT_LEVEL_TYPE_T
+  DECOY_TYPE_P,      ///< parameters of type DECOY_TYPE_T
+  MASS_FORMAT_P,     ///< parameters of type MASS_FORMAT_T
+
+  NUMBER_PARAMETER_TYPES  ///< leave this last, number of types
+};
+typedef enum parameter_type PARAMETER_TYPE_T;
+
+/**
+ * /brief Initialize parameters to default values.
+ *
+ * Every required argument for every executable and every option and
+ * its default value must be declared here.  Allocates hash tables for
+ * holding parameter values.
+ */
+void initialize_parameters(void);
+
+void parse_custom_enzyme(const std::string& rule_str);
+
+/**
+ *
+ * parse the parameter file given the filename
+ */
+void parse_parameter_file(
+  const char* parameter_filename ///< the parameter file to be parsed -in
+  );
+
+void read_mods_from_file(const char* param_file);
+
+MASS_TYPE_T get_mass_type_parameter(
+  const char* name
+  );
+
+char get_delimiter_parameter(
+  const char* name
+  );
+
+DIGEST_T get_digest_type_parameter(
+  const char* name
+  );
+
+ENZYME_T get_enzyme_type_parameter(
+  const char* name
+  );
+
+DIGEST_T get_digest_type_parameter(
+  const char* name
+  );
+
+ENZYME_T get_enzyme_type_parameter(
+  const char* name
+  );
+
+THRESHOLD_T get_threshold_type_parameter(
+  const char* name
+  );
+
+QUANT_LEVEL_TYPE_T get_quant_level_type_parameter(
+  const char* name
+  );
+
+DECOY_TYPE_T get_decoy_type_parameter(
+  const char* name
+  );
+
+DECOY_TYPE_T get_tide_decoy_type_parameter(
+  const char* name
+  );
+
+MASS_FORMAT_T get_mass_format_type_parameter(
+  const char* name
+  );
+
+int get_max_ion_charge_parameter(
+  const char* name
+  );
+
+double get_mz_bin_width();
+ 
+double get_mz_bin_offset();
+
+COLTYPE_T get_column_type_parameter(
+  const char* name
+  );
+
+COMPARISON_T get_comparison_parameter(
+  const char* name
+  );
+
+/**
+ * \returns the comet enzyme info lines parsed from the file
+ * or generated defaults
+ */
+const std::vector<std::string>& get_comet_enzyme_info_lines();
+
+/**
+ * Prints the parameters.  If lead_string is not null, preprends it to
+ * each line.
+ */
+void print_parameters(
+  char* first_line,  ///< the first line to be printed before the parameter list -in
+  char* parameter_filename,  ///< the parameter file name -in
+  char* lead_string,  ///< the lead string to be printed before each line -in
+  FILE* outstream  ///< the output stream -out
+  );
+
+
+/**
+ * \brief Get the pointer to the list of AA_MODs requested by the
+ * user.  Does not include the c- and n-term mods.  Argument is a
+ * reference to an array of pointers.  Return 0 and set mods == NULL
+ * if there are no aa_mods.
+ * \returns The number of items pointed to by mods
+ */
+int get_aa_mod_list(AA_MOD_T*** mods);
+
+/**
+ * Adds 1 to the number of variable modifications in the
+ * parameters
+ */
+void incrementNumMods();
+
+void resetMods();
+
+/**
+ * \brief Get the pointer to the list of AA_MODs for the peptide
+ * c-terminus.  Argument is a reference to an array of
+ * pointers. Return 0 and set mods==NULL if there are no c-term 
+ * mods.
+ *
+ * \returns The number of items pointed to by mods
+ */
+int get_c_mod_list(AA_MOD_T*** mods);
+
+/**
+ * \brief Get the pointer to the list of AA_MODs for the peptide
+ * n-terminus.  Argument is a reference to an array of
+ * pointers. Return 0 and set mods==NULL if there are no n-term 
+ * mods.
+ *
+ * \returns The number of items pointed to by mods
+ */
+int get_n_mod_list(AA_MOD_T*** mods);
+
+/**
+ * \brief Get the pointer to the list of AA_MODs requested by the
+ * user.  Includes aa_mods, c- and n-term mods.  Argument is a
+ * reference to an array of pointers.  Returns 0 and sets mods == NULL
+ * if there are no aa_mods.
+ * \returns The number of items pointed to by mods
+ */
+int get_all_aa_mod_list(AA_MOD_T*** mods);
+
+/**
+ * \returns The index of the C_TERM or N_TERM fixed modification in
+ * the global list of modifications.
+ */
+int get_fixed_mod_index(MOD_POSITION_T p);
+
+/**
+ * \returns the number of fixed terminal modifications: 0, 1, or 2.
+ */
+int get_num_fixed_mods();
+
+/**
+ *  Print modifications to the given file in the format used in the
+ *  parameter file.  Expected names are "mod", "cmod", "nmod".  The
+ *  function to get the list of modifications should correspond to the
+ *  mod name.  (i.e. for "mod", use get_aa_mod_list(), for "cmod" use
+ *  get_c_mod_list(), for "nmod" use get_n_mod_list())
+ */
+void print_mods_parameter_file(std::ostream* param_file, 
+                               const char* name,
+                               int (*mod_getter)(AA_MOD_T***));
+
+#endif
diff --git a/src/util/Alphabet.cpp b/src/util/Alphabet.cpp
new file mode 100644
index 0000000..a4421d7
--- /dev/null
+++ b/src/util/Alphabet.cpp
@@ -0,0 +1,56 @@
+/*********************************************************************
+  * \file alphabet.cpp
+  * AUTHOR: Unknown
+  * \brief Provide a function for converting amino acids to ints.
+  ********************************************************************/
+#include "Alphabet.h"
+
+int Alphabet::amino_array_[AMINO_ARRAY_CAPACITY] = {0};
+bool Alphabet::amino_array_populated_ = false;
+
+/**
+ * Converts a character into an amino acid
+ */
+void Alphabet::populateAminoArray(void) {
+  if ( amino_array_populated_ ) {
+    return;
+  }
+  amino_array_['A'-'A'] = 0;
+  amino_array_['C'-'A'] = 1;
+  amino_array_['D'-'A'] = 2;
+  amino_array_['E'-'A'] = 3;
+  amino_array_['F'-'A'] = 4;
+  amino_array_['G'-'A'] = 5;
+  amino_array_['H'-'A'] = 6;
+  amino_array_['I'-'A'] = 7;
+  amino_array_['K'-'A'] = 8;
+  amino_array_['L'-'A'] = 9;
+  amino_array_['M'-'A'] = 10;
+  amino_array_['N'-'A'] = 11;
+  amino_array_['P'-'A'] = 12;
+  amino_array_['Q'-'A'] = 13;
+  amino_array_['R'-'A'] = 14;
+  amino_array_['S'-'A'] = 15;
+  amino_array_['T'-'A'] = 16;
+  amino_array_['V'-'A'] = 17;
+  amino_array_['W'-'A'] = 18;
+  amino_array_['Y'-'A'] = 19;
+
+  amino_array_populated_ = true;
+  return;
+}
+
+/**
+ * Converts a character into an int using the global amino_hash 
+ */
+int Alphabet::aminoToInt(char amino) {
+  populateAminoArray();
+  int value = amino_array_[amino - 'A'];
+  return value;
+}
+
+
+const char* Alphabet::aminoAcids[]  = { "A", "C", "D", "E", "F", "G", "H", 
+                                        "I", "K", "L", "M", "N", "P", "Q", 
+                                        "R", "S", "T", "V", "W", "Y", };
+const int Alphabet::numAminoAcids = sizeof(aminoAcids) / sizeof(char*);
diff --git a/src/util/Alphabet.h b/src/util/Alphabet.h
new file mode 100644
index 0000000..b7c8a80
--- /dev/null
+++ b/src/util/Alphabet.h
@@ -0,0 +1,31 @@
+/**
+ * \file alphabet.h
+ * AUTHOR: Unknown
+ * \brief Provide a function for converting amino acids to ints.
+ ********************************************************************/
+#ifndef ALPHABET_H
+#define ALPHABET_H
+
+
+class Alphabet {
+
+ public:
+  /**
+   * Converts a character into an int using the global amino_hash 
+   */
+  static int aminoToInt(char amino);
+
+  /**
+   * Constants for iterating through all amino acids.
+   */
+  static const char* aminoAcids[];
+  static const int numAminoAcids;
+
+ protected:
+  static const int AMINO_ARRAY_CAPACITY = 100;
+  static int amino_array_[AMINO_ARRAY_CAPACITY];
+  static bool amino_array_populated_;
+  static void populateAminoArray();
+
+};
+#endif
diff --git a/src/util/AminoAcidUtil.cpp b/src/util/AminoAcidUtil.cpp
new file mode 100644
index 0000000..3bb29d5
--- /dev/null
+++ b/src/util/AminoAcidUtil.cpp
@@ -0,0 +1,107 @@
+#include "AminoAcidUtil.h"
+
+#include <limits>
+#include <stdexcept>
+
+using namespace std;
+
+string AminoAcidUtil::GetName(char c) {
+  switch (c) {
+    case 'A': return "alanine";
+    case 'B': return "";
+    case 'C': return "cysteine";
+    case 'D': return "aspartic acid";
+    case 'E': return "glutamic acid";
+    case 'F': return "phenylalanine";
+    case 'G': return "glycine";
+    case 'H': return "histidine";
+    case 'I': return "isoleucine";
+    case 'J': return "";
+    case 'K': return "lysine";
+    case 'L': return "leucine";
+    case 'M': return "methionine";
+    case 'N': return "asparagine";
+    case 'O': return "ornithine";
+    case 'P': return "proline";
+    case 'Q': return "glutamine";
+    case 'R': return "arginine";
+    case 'S': return "serine";
+    case 'T': return "threonine";
+    case 'U': return "selenocysteine";
+    case 'V': return "valine";
+    case 'W': return "tryptophan";
+    case 'X': return "";
+    case 'Y': return "tyrosine";
+    case 'Z': return "";
+  }
+  throw runtime_error("'" + string(1, c) + "' is not a valid amino acid");
+}
+
+double AminoAcidUtil::GetMass(char c, bool monoisotopic) {
+  if (monoisotopic) {
+    // Monoisotopic masses
+    switch (c) {
+      case 'A': return  71.03711;
+      case 'B': return numeric_limits<double>::quiet_NaN();
+      case 'C': return 103.00919;
+      case 'D': return 115.02694;
+      case 'E': return 129.04259;
+      case 'F': return 147.06841;
+      case 'G': return  57.02146;
+      case 'H': return 137.05891;
+      case 'I': return 113.08406;
+      case 'J': return 113.08406;
+      case 'K': return 128.09496;
+      case 'L': return 113.08406;
+      case 'M': return 131.04049;
+      case 'N': return 114.04293;
+      case 'O': return 114.07931;
+      case 'P': return  97.05276;
+      case 'Q': return 128.05858;
+      case 'R': return 156.10111;
+      case 'S': return  87.03203;
+      case 'T': return 101.04768;
+      case 'U': return 150.04344;
+      case 'V': return  99.06841;
+      case 'W': return 186.07931;
+      case 'X': return numeric_limits<double>::quiet_NaN();
+      case 'Y': return 163.06333;
+      case 'Z': return numeric_limits<double>::quiet_NaN();
+    }
+  } else {
+    // Average masses
+    switch (c) {
+      case 'A': return  71.0788;
+      case 'B': return numeric_limits<double>::quiet_NaN();
+      case 'C': return 103.1388;
+      case 'D': return 115.0886;
+      case 'E': return 129.1155;
+      case 'F': return 147.1766;
+      case 'G': return  57.0519;
+      case 'H': return 137.1411;
+      case 'I': return 113.1594;
+      case 'J': return 113.1594;
+      case 'K': return 128.1741;
+      case 'L': return 113.1594;
+      case 'M': return 131.1926;
+      case 'N': return 114.1038;
+      case 'O': return 114.1472;
+      case 'P': return  97.1167;
+      case 'Q': return 128.1307;
+      case 'R': return 156.1875;
+      case 'S': return  87.0782;
+      case 'T': return 101.1051;
+      case 'U': return 150.0388;
+      case 'V': return  99.1326;
+      case 'W': return 186.2132;
+      case 'X': return numeric_limits<double>::quiet_NaN();
+      case 'Y': return 163.1760;
+      case 'Z': return numeric_limits<double>::quiet_NaN();
+    }
+  }
+  throw runtime_error("'" + string(1, c) + "' is not a valid amino acid");
+}
+
+AminoAcidUtil::AminoAcidUtil() {}
+AminoAcidUtil::~AminoAcidUtil() {}
+
diff --git a/src/util/AminoAcidUtil.h b/src/util/AminoAcidUtil.h
new file mode 100644
index 0000000..1105d4e
--- /dev/null
+++ b/src/util/AminoAcidUtil.h
@@ -0,0 +1,18 @@
+#ifndef AMINOACIDUTIL_H
+#define AMINOACIDUTIL_H
+
+#include <string>
+
+const double CYSTEINE_DEFAULT = 57.021464;
+
+class AminoAcidUtil {
+ public:
+  static std::string GetName(char c);
+  static double GetMass(char c, bool monoisotopic = true);
+ private:
+  AminoAcidUtil();
+  ~AminoAcidUtil();
+};
+
+#endif
+
diff --git a/src/util/ArgParser.cpp b/src/util/ArgParser.cpp
new file mode 100644
index 0000000..7435b8f
--- /dev/null
+++ b/src/util/ArgParser.cpp
@@ -0,0 +1,127 @@
+#include "ArgParser.h"
+#include "StringUtils.h"
+
+using namespace std;
+
+ArgParser::ArgParser() {
+}
+
+void ArgParser::Parse(int argc, char** argv, const vector<string>& args) {
+  args_.clear();
+  options_.clear();
+
+  vector<ArgSpec> argSpecs = ArgStringsToArgSpecs(args);
+  int multi = -1; // Which argument accepts multiple values?
+  for (size_t i = 0; i < argSpecs.size(); i++) {
+    if (!argSpecs[i].IsMulti()) {
+      continue;
+    } else if (multi != -1) {
+      throw runtime_error("Cannot have multiple arguments that accept "
+                          "multiple values.");
+    }
+    multi = i;
+  }
+
+  vector<string> parsedArgs;
+  // Start at 1 to skip the application name
+  for (int i = 1; i < argc; i++) {
+    string arg(argv[i]);
+    if (StringUtils::StartsWith(arg, "--")) {
+      // This is a option name
+      string option = arg.substr(2);
+      if (++i == argc) {
+        throw ArgParserException("No value found for option '" + option + "'");
+      }
+      options_[option] = argv[i];
+    } else {
+      // This is an argument
+      parsedArgs.push_back(arg);
+    }
+  }
+
+  int excess_args = parsedArgs.size() - argSpecs.size();
+  if (multi == -1 && excess_args != 0) {
+    throw ArgParserException("Expected " + StringUtils::ToString(argSpecs.size()) +
+                             " arguments, but found " +
+                             StringUtils::ToString(parsedArgs.size()),
+                             argc == 1);
+  } else if (multi != -1 && excess_args < 0) {
+    throw ArgParserException("Expected at least " +
+                             StringUtils::ToString(argSpecs.size()) +
+                             " arguments, but found " +
+                             StringUtils::ToString(parsedArgs.size()),
+                             argc == 1);
+  }
+
+  int curParsedArg = -1;
+  for (vector<ArgSpec>::const_iterator i = argSpecs.begin(); i != argSpecs.end(); i++) {
+    string argName = i->GetName();
+    args_[argName] = vector<string>(1, parsedArgs[++curParsedArg]);
+    if (i->IsMulti()) {
+      for (int j = 0; j < excess_args; j++) {
+        args_[argName].push_back(parsedArgs[++curParsedArg]);
+      }
+    }
+  }
+}
+
+ArgParser::~ArgParser() {
+}
+
+const map< string, vector<string> >& ArgParser::GetArgs() const {
+  return args_;
+}
+
+const map<string, string>& ArgParser::GetOptions() const {
+  return options_;
+}
+
+const string ArgParser::GetArg(const string& name) const {
+  map< string, vector<string> >::const_iterator i = args_.find(name);
+  return (i != args_.end()) ? i->second.front() : "";
+}
+
+const vector<string> ArgParser::GetArgMulti(const string& name) const {
+  map< string, vector<string> >::const_iterator i = args_.find(name);
+  return (i != args_.end()) ? i->second : vector<string>();
+}
+
+const string ArgParser::GetOption(const string& name) const {
+  map<string, string>::const_iterator i = options_.find(name);
+  return (i != options_.end()) ? i->second : "";
+}
+
+ArgParser::ArgSpec::ArgSpec(const string& name, bool multi)
+  : name_(name), multi_(multi) {
+}
+
+string ArgParser::ArgSpec::GetName() const {
+  return name_;
+}
+
+bool ArgParser::ArgSpec::IsMulti() const {
+  return multi_;
+}
+
+vector<ArgParser::ArgSpec> ArgParser::ArgStringsToArgSpecs(const vector<string>& args) {
+  vector<ArgSpec> specs;
+  for (vector<string>::const_iterator i = args.begin(); i != args.end(); i++) {
+    string arg = *i;
+    size_t plus = arg.find('+');
+    if (plus == i->length() - 1) {
+      specs.push_back(ArgSpec(arg.substr(0, plus), true));
+    } else {
+      specs.push_back(ArgSpec(arg, false));
+    }
+  }
+  return specs;
+}
+
+ArgParserException::ArgParserException(const string& what, bool fullUsage)
+  : runtime_error(what), fullUsage_(fullUsage) {
+}
+
+bool ArgParserException::ShowFullUsage() const {
+  return fullUsage_;
+}
+
diff --git a/src/util/ArgParser.h b/src/util/ArgParser.h
new file mode 100644
index 0000000..81157de
--- /dev/null
+++ b/src/util/ArgParser.h
@@ -0,0 +1,47 @@
+#ifndef ARGPARSER_H
+#define ARGPARSER_H
+
+#include <map>
+#include <stdexcept>
+#include <string>
+#include <vector>
+
+class ArgParser {
+ public:
+  ArgParser();
+  ~ArgParser();
+
+  void Parse(int argc, char** argv, const std::vector<std::string>& args);
+  const std::map< std::string, std::vector<std::string> >& GetArgs() const;
+  const std::map<std::string, std::string>& GetOptions() const;
+  const std::string GetArg(const std::string& name) const;
+  const std::vector<std::string> GetArgMulti(const std::string& name) const;
+  const std::string GetOption(const std::string& name) const;
+
+ protected:
+  class ArgSpec {
+   public:
+    explicit ArgSpec(const std::string& name, bool multi = false);
+    std::string GetName() const;
+    bool IsMulti() const;
+   protected:
+    std::string name_;
+    bool multi_;
+  };
+
+  static std::vector<ArgSpec> ArgStringsToArgSpecs(const std::vector<std::string>& args);
+
+  std::map< std::string, std::vector<std::string> > args_;
+  std::map<std::string, std::string> options_;
+};
+
+class ArgParserException : public std::runtime_error {
+ public:
+  explicit ArgParserException(const std::string& what, bool fullUsage = false);
+  bool ShowFullUsage() const;
+ private:
+  bool fullUsage_;
+};
+
+#endif
+
diff --git a/src/util/CacheableMass.cpp b/src/util/CacheableMass.cpp
new file mode 100644
index 0000000..b9efa8b
--- /dev/null
+++ b/src/util/CacheableMass.cpp
@@ -0,0 +1,85 @@
+/*************************************************************************//**
+ * \file CacheableMass.cpp
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 28 Oct 2016
+ * \brief abstract object to Store the calculated mass of an instantied object
+ ****************************************************************************/
+
+#include "CacheableMass.h"
+#include "io/carp.h"
+
+/**
+ * Initialized the object
+ */
+void CacheableMass::init() {
+  for (size_t idx=0;idx < NUMBER_MASS_TYPES;idx++) {
+    mass_calculated_[idx] = false;
+  }
+}
+
+/**
+ * Constructor
+ */
+CacheableMass::CacheableMass() {
+  init();
+}
+
+/**
+ * Destructor
+ */
+CacheableMass::~CacheableMass() {
+}
+
+/*
+ * If the mass is already calculated for this mass type, return it
+ * Otherwise call calcMass to set it and return the result.
+ */
+FLOAT_T CacheableMass::getMass(
+  MASS_TYPE_T mass_type ///< Mass type
+  ) {
+ 
+  if (!mass_calculated_[mass_type]) {
+    //carp(CARP_DEBUG, "Calculating mass");
+    mass_[mass_type] = calcMass(mass_type);
+    mass_calculated_[mass_type] = true;
+  }
+
+  return mass_[mass_type];
+
+}
+
+FLOAT_T CacheableMass::getMassConst(
+  MASS_TYPE_T mass_type
+  ) const {
+
+  if (!mass_calculated_[mass_type]) {
+    carp(CARP_FATAL, "Internal Error: mass not calculated yet! %d", mass_type);
+  }
+  return (mass_[mass_type]);
+}
+
+/*
+ * Copies the calculated mass arrray
+ */
+void CacheableMass::copy(
+  CacheableMass* src,
+  CacheableMass* dest
+  ) {
+
+  for (size_t idx=0;idx < NUMBER_MASS_TYPES;idx++) {
+    if (src->mass_calculated_[idx]) {
+      dest->mass_calculated_[idx] = true;
+      dest->mass_[idx] = src->mass_[idx];
+    } else {
+      dest->mass_calculated_[idx] = false;
+    }
+  }
+
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/util/CacheableMass.h b/src/util/CacheableMass.h
new file mode 100644
index 0000000..53ebc74
--- /dev/null
+++ b/src/util/CacheableMass.h
@@ -0,0 +1,68 @@
+/**
+ * \file CacheableMass.h 
+ * \brief abstract object to Store the calculated mass of an instantied object
+ */
+
+/*
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: Oct. 28, 2016
+ * $Revision: 1.00 $
+ *****************************************************************************/
+#ifndef CACHEABLEMASS_H_
+#define CACHEABLEMASS_H_
+
+#include "model/objects.h"
+
+class CacheableMass {
+
+ protected:
+  bool mass_calculated_[NUMBER_MASS_TYPES]; ///< is mass calculated?
+  FLOAT_T mass_[NUMBER_MASS_TYPES]; ///< calculated mass
+
+ public:
+  /*
+   * Initializes the object
+   */
+  void init();
+  
+  CacheableMass();
+  
+  virtual ~CacheableMass();
+
+  /*
+   * Override this method to return the calculated mass of the object
+   */
+  virtual FLOAT_T calcMass(
+    MASS_TYPE_T mass_type
+    )=0;
+
+
+  /*
+   * If the mass is already calculated for this mass type, return it
+   * Otherwise call calcMass to set it and return the result.
+   */
+  FLOAT_T getMass(
+    MASS_TYPE_T mass_type = MONO ///< Type of mass to return
+    );
+
+  FLOAT_T getMassConst(
+    MASS_TYPE_T mass_type = MONO ///< Type of mass to return
+  ) const;
+
+  /*
+   * Copies the calculated mass arrray
+   */
+  static void copy(
+    CacheableMass* src, ///< Source 
+	CacheableMass* dest ///< Dest
+	);
+ 
+};
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+#endif
diff --git a/src/util/CarpStreamBuf.cpp b/src/util/CarpStreamBuf.cpp
new file mode 100644
index 0000000..b3edacc
--- /dev/null
+++ b/src/util/CarpStreamBuf.cpp
@@ -0,0 +1,101 @@
+/** 
+ * \file CarpStreamBuf.cpp 
+ * AUTHOR: Sean McIlwain
+ * CREATE DATE: 10/30/2012
+ * $Revision: 1.00 $ 
+ * \brief streambuffer that routes c++ stream to the carp logging system 
+ *************************************************************************/ 
+#include "CarpStreamBuf.h"
+#include "io/carp.h"
+#include <iostream>
+#include <sstream>
+
+using namespace std;
+
+/** 
+ * Handles data being put into the stream.  Fills up the buffer_ string 
+ * until an endline is encountered, then passes the buffer to carp. 
+ */  
+int CarpStreamBuf::overflow( 
+  int over_char ///< character to put into the stream 
+) {
+
+  if (over_char == EOF) {
+    return EOF;
+  } else { 
+
+    buffer_.push_back((char)over_char);
+
+    if (buffer_.find(endl_str_) != string::npos) {
+      buffer_.erase(buffer_.length()-endl_str_.length(), endl_str_.length());
+      carp(CARP_INFO, "%s", buffer_.c_str());
+      buffer_.clear();
+    }
+    return over_char; 
+  }
+}
+
+/** 
+ * Not used, just returns EOF 
+ */ 
+int CarpStreamBuf::underflow() {
+
+  return EOF;
+}
+
+/** 
+ * Not used, just returns EOF 
+ */ 
+int CarpStreamBuf::uflow() {
+
+  return EOF;
+}
+ 
+/** 
+ * Not used, just returns EOF 
+ */  
+int CarpStreamBuf::pbackfail(
+  int c
+  ) {
+
+  return EOF;
+}
+
+/** 
+ * Not used, just returns EOF 
+ */ 
+int CarpStreamBuf::sync() {
+
+  return 0;
+}
+
+/**
+ * Constructor
+ */
+CarpStreamBuf::CarpStreamBuf() : streambuf() {
+
+  //An attempt to make endline detection cross-platform.
+  ostringstream oss;
+  oss << endl;
+  endl_str_ = oss.str();
+}
+
+/**
+ * Destructor
+ */
+CarpStreamBuf::~CarpStreamBuf() { 
+
+  //If there is any buffer left, then just print it out.
+  if (buffer_.length() != 0) {
+    carp(CARP_INFO, "%s", buffer_.c_str());
+  }
+}
+
+/*  
+ * Local Variables:  
+ * mode: c  
+ * c-basic-offset: 2  
+ * End:  
+ */  
+
+
diff --git a/src/util/CarpStreamBuf.h b/src/util/CarpStreamBuf.h
new file mode 100644
index 0000000..d889e43
--- /dev/null
+++ b/src/util/CarpStreamBuf.h
@@ -0,0 +1,72 @@
+/**
+ * \file CarpStreamBuf.h
+ * $Revision: 1.00 $
+ * \brief streambuffer that routes c++ stream to the carp logging system
+ *************************************************************************/
+#ifndef CARPSTREAMBUF_H_
+#define CARPSTREAMBUF_H_
+
+#include <iostream>
+#include <cstdio>
+#include <string>
+
+class CarpStreamBuf : public std::streambuf {
+ private:
+  std::string endl_str_; ///< Definition of endline
+  std::string buffer_; ///< buffer of characters put into the stream
+
+ protected:
+  /*
+   * Overrides for std::streambuf
+   */
+
+  /**
+   * Handles data being put into the stream.  Fills up the buffer_ string
+   * until an endline is encountered, then passes the buffer to carp.
+   */ 
+  virtual int overflow(
+    int over_char = EOF ///< character to put into the stream
+  );
+
+  /**
+   * Not used, just returns EOF
+   */
+  virtual int underflow();
+
+  /**
+   * Not used, just returns EOF
+   */
+  virtual int uflow();
+
+  /**
+   * Not used, just returns EOF
+   */
+  virtual int pbackfail(
+    int pback_char = EOF ///< character to popback
+  );
+
+  /**
+   * Not used, just returns EOF
+   */
+  virtual int sync();
+  
+ public:
+  /**
+   * Constructor
+   */
+  CarpStreamBuf();
+
+
+  virtual ~CarpStreamBuf();
+};
+
+
+#endif
+
+/* 
+ * Local Variables: 
+ * mode: c 
+ * c-basic-offset: 2 
+ * End: 
+ */ 
+ 
diff --git a/src/util/FileUtils.cpp b/src/util/FileUtils.cpp
new file mode 100644
index 0000000..cc05a3d
--- /dev/null
+++ b/src/util/FileUtils.cpp
@@ -0,0 +1,86 @@
+#include "FileUtils.h"
+#include "boost/filesystem.hpp"
+#include <fstream>
+#include <stdexcept>
+
+using namespace std;
+
+bool FileUtils::Exists(const string& path) {
+  return boost::filesystem::exists(path);
+}
+
+bool FileUtils::IsRegularFile(const string& path) {
+  return boost::filesystem::is_regular_file(path);
+}
+
+bool FileUtils::IsDir(const string& path) {
+  return boost::filesystem::is_directory(path);
+}
+
+void FileUtils::Rename(const string& from, const string& to) {
+  if (Exists(from)) {
+    boost::filesystem::rename(from, to);
+  }
+}
+
+void FileUtils::Remove(const string& path) {
+  if (Exists(path)) {
+    boost::filesystem::remove_all(path);
+  }
+}
+
+string FileUtils::Join(const string& path1, const string& path2) {
+  return (boost::filesystem::path(path1) / boost::filesystem::path(path2)).string();
+}
+
+string FileUtils::Read(const string& path) {
+  try {
+    ifstream stream(path.c_str());
+    stream.seekg(0, ios::end);
+    size_t size = stream.tellg();
+    string buffer(size, '\0');
+    stream.seekg(0);
+    stream.read(&buffer[0], size);
+    return buffer;
+  } catch (...) {
+    throw runtime_error("Error reading file '" + path + "'");
+  }
+}
+
+ofstream* FileUtils::GetWriteStream(const string& path, bool overwrite) {
+  if (Exists(path) && !overwrite) {
+    return NULL;
+  }
+  ofstream* stream = new ofstream(path.c_str());
+  if (!stream->good()) {
+    delete stream;
+    return NULL;
+  }
+  return stream;
+}
+
+string FileUtils::BaseName(const string& path) {
+  boost::filesystem::path p(path);
+  return p.has_filename() ? p.filename().string() : "";
+}
+
+string FileUtils::DirName(const string& path) {
+  boost::filesystem::path p(path);
+  return p.has_parent_path() ? p.parent_path().string() : "";
+}
+
+string FileUtils::Stem(const string& path) {
+  boost::filesystem::path p(path);
+  return p.has_stem() ? p.stem().string() : "";
+}
+
+string FileUtils::Extension(const string& path) {
+  boost::filesystem::path p(path);
+  return p.has_extension() ? p.extension().string() : "";
+}
+void FileUtils::Copy(const std::string& orig, const std::string& dest) {
+  if (Exists(orig)) {
+    boost::filesystem::copy(orig, dest);
+  }
+}
+
diff --git a/src/util/FileUtils.h b/src/util/FileUtils.h
new file mode 100644
index 0000000..b4b3eef
--- /dev/null
+++ b/src/util/FileUtils.h
@@ -0,0 +1,28 @@
+#ifndef FILEUTILS_H
+#define FILEUTILS_H
+
+#include <fstream>
+#include <string>
+
+class FileUtils {
+ public:
+  static bool Exists(const std::string& path);
+  static bool IsRegularFile(const std::string& path);
+  static bool IsDir(const std::string& path);
+  static void Rename(const std::string& from, const std::string& to);
+  static void Remove(const std::string& path);
+  static std::string Join(const std::string& path1, const std::string& path2);
+  static std::string Read(const std::string& path);
+  static std::ofstream* GetWriteStream(const std::string& path, bool overwrite);
+  static std::string BaseName(const std::string& path);
+  static std::string DirName(const std::string& path);
+  static std::string Stem(const std::string& path);
+  static std::string Extension(const std::string& path);
+  static void Copy(const std::string& orig, const std::string& dest);
+ private:
+  FileUtils();
+  ~FileUtils();
+};
+
+#endif
+
diff --git a/src/util/GlobalParams.cpp b/src/util/GlobalParams.cpp
new file mode 100644
index 0000000..3ce89ca
--- /dev/null
+++ b/src/util/GlobalParams.cpp
@@ -0,0 +1,197 @@
+#include "GlobalParams.h"
+#include "util/Params.h"
+#include "parameter.h"
+#include "util/StringUtils.h"
+
+using namespace std;
+
+
+MASS_TYPE_T GlobalParams::isotopic_mass_;
+int GlobalParams::missed_cleavages_;
+int GlobalParams::max_aas_modified_;
+FLOAT_T GlobalParams::min_mass_;
+FLOAT_T GlobalParams::max_mass_;
+WINDOW_TYPE_T GlobalParams::precursor_window_type_;
+FLOAT_T GlobalParams::precursor_window_;
+int GlobalParams::min_length_;
+int GlobalParams::max_length_;
+string GlobalParams::xlink_prevents_cleavage_;
+string GlobalParams::max_ion_charge_;
+ION_TYPE_T GlobalParams::primary_ions_;
+MASS_TYPE_T GlobalParams::fragment_mass_;
+bool GlobalParams::precursor_ions_;
+ENZYME_T GlobalParams::enzyme_;
+DIGEST_T GlobalParams::digestion_;
+FLOAT_T GlobalParams::remove_precursor_tolerance_;
+OBSERVED_PREPROCESS_STEP_T GlobalParams::stop_after_;
+bool GlobalParams::xlink_include_inter_;
+bool GlobalParams::xlink_include_intra_;
+bool GlobalParams::xlink_include_inter_intra_;
+bool GlobalParams::xlink_include_deadends_;
+bool GlobalParams::xlink_include_linears_;
+bool GlobalParams::xlink_include_selfloops_;
+int GlobalParams::max_xlink_mods_;
+int GlobalParams::mod_precision_;
+int GlobalParams::xlink_top_n_;
+vector<int> GlobalParams::isotope_windows_;
+FLOAT_T GlobalParams::fraction_to_fit_;
+bool GlobalParams::xlink_use_ion_cache_;
+MASS_FORMAT_T GlobalParams::mod_mass_format_;
+
+void GlobalParams::set() {
+  isotopic_mass_ = get_mass_type_parameter("isotopic-mass");
+  missed_cleavages_ = Params::GetInt("missed-cleavages");
+  max_aas_modified_ = Params::GetInt("max-aas-modified");
+  min_mass_ = Params::GetDouble("min-mass");
+  max_mass_ = Params::GetDouble("max-mass");
+  precursor_window_type_ = string_to_window_type(Params::GetString("precursor-window-type"));
+  precursor_window_ = Params::GetDouble("precursor-window");
+  min_length_ = Params::GetInt("min-length");
+  max_length_ = Params::GetInt("max-length");
+  xlink_prevents_cleavage_ = Params::GetString("xlink-prevents-cleavage");
+  max_ion_charge_ = Params::GetString("max-ion-charge");
+  string_to_ion_type(Params::GetString("primary-ions"), &primary_ions_);
+  fragment_mass_ = get_mass_type_parameter("fragment-mass");
+  precursor_ions_ = Params::GetBool("precursor-ions");
+  enzyme_ = get_enzyme_type_parameter("enzyme");
+  digestion_ = get_digest_type_parameter("digestion");
+  remove_precursor_tolerance_ = Params::GetDouble("remove-precursor-tolerance");
+  stop_after_ = string_to_observed_preprocess_step(Params::GetString("stop-after"));
+  xlink_include_inter_ = Params::GetBool("xlink-include-inter");
+  xlink_include_intra_ = Params::GetBool("xlink-include-intra");
+  xlink_include_inter_intra_ = Params::GetBool("xlink-include-inter-intra");
+  xlink_include_deadends_ = Params::GetBool("xlink-include-deadends");
+  xlink_include_selfloops_ = Params::GetBool("xlink-include-selfloops");
+  xlink_include_linears_ = Params::GetBool("xlink-include-linears");
+  max_xlink_mods_ = Params::GetInt("max-xlink-mods");
+  mod_precision_ = Params::GetInt("mod-precision");
+  xlink_top_n_ = Params::GetInt("xlink-top-n");
+  isotope_windows_ = StringUtils::Split<int>(Params::GetString("isotope-windows"), ',');
+  fraction_to_fit_ = Params::GetDouble("fraction-top-scores-to-fit");
+  xlink_use_ion_cache_ = Params::GetBool("xlink-use-ion-cache");
+  mod_mass_format_ = get_mass_format_type_parameter("mod-mass-format");
+}
+
+const MASS_TYPE_T& GlobalParams::getIsotopicMass() {
+  return isotopic_mass_;
+}
+
+const int& GlobalParams::getMissedCleavages() {
+  return missed_cleavages_;
+}
+
+const int& GlobalParams::getMaxAasModified() {
+  return max_aas_modified_;
+}
+
+const FLOAT_T& GlobalParams::getMinMass() {
+  return min_mass_;
+}
+
+const FLOAT_T& GlobalParams::getMaxMass() {
+  return max_mass_;
+}
+
+const WINDOW_TYPE_T& GlobalParams::getPrecursorWindowType() {
+  return precursor_window_type_;
+}
+
+const FLOAT_T& GlobalParams::getPrecursorWindow() {
+  return precursor_window_;
+}
+
+const int& GlobalParams::getMinLength() {
+  return min_length_;
+}
+
+const int& GlobalParams::getMaxLength() {
+  return max_length_;
+}
+
+const string& GlobalParams::getXLinkPreventsCleavage() {
+  return xlink_prevents_cleavage_;
+}
+
+const string& GlobalParams::getMaxIonCharge() {
+  return max_ion_charge_;
+}
+
+const ION_TYPE_T& GlobalParams::getPrimaryIons() {
+  return primary_ions_;
+}
+
+const MASS_TYPE_T& GlobalParams::getFragmentMass() {
+  return fragment_mass_;
+}
+
+const bool& GlobalParams::getPrecursorIons() {
+  return precursor_ions_;
+}
+
+const ENZYME_T& GlobalParams::getEnzyme() {
+  return enzyme_;
+}
+
+const DIGEST_T& GlobalParams::getDigestion() {
+  return digestion_;
+}
+
+const FLOAT_T& GlobalParams::getRemovePrecursorTolerance() {
+  return remove_precursor_tolerance_;
+}
+
+const OBSERVED_PREPROCESS_STEP_T& GlobalParams::getStopAfter() {
+  return stop_after_;
+}
+
+const bool& GlobalParams::getXLinkIncludeInter() {
+  return xlink_include_inter_;
+}
+  
+const bool& GlobalParams::getXLinkIncludeIntra() {
+  return xlink_include_intra_;
+}
+
+const bool& GlobalParams::getXLinkIncludeInterIntra() {
+  return xlink_include_inter_intra_;
+}
+
+const bool& GlobalParams::getXLinkIncludeDeadends() {
+  return xlink_include_deadends_;
+}
+ 
+const bool& GlobalParams::getXLinkIncludeSelfloops() {
+  return xlink_include_selfloops_;
+}
+
+const bool& GlobalParams::getXLinkIncludeLinears() {
+  return xlink_include_linears_;
+}
+const int& GlobalParams::getMaxXLinkMods() {
+  return max_xlink_mods_;
+}
+
+const int& GlobalParams::getModPrecision() {
+  return mod_precision_;
+}
+
+const int& GlobalParams::getXLinkTopN() {
+  return xlink_top_n_;
+}
+
+const vector<int>& GlobalParams::getIsotopeWindows() {
+  return isotope_windows_;
+}
+
+const FLOAT_T& GlobalParams::getFractionToFit() {
+  return fraction_to_fit_;
+}
+
+const bool& GlobalParams::getXLinkUseIonCache() {
+  return xlink_use_ion_cache_;
+}
+
+const MASS_FORMAT_T& GlobalParams::getModMassFormat() {
+  return mod_mass_format_;
+}
+
diff --git a/src/util/GlobalParams.h b/src/util/GlobalParams.h
new file mode 100644
index 0000000..cd41f51
--- /dev/null
+++ b/src/util/GlobalParams.h
@@ -0,0 +1,97 @@
+/**
+ * \file GlobalParams.h
+ * $Revision: 1.00 $
+ * $Author: sjoemac $
+ * \brief Object for fast loading of parameters
+ */
+#ifndef GLOBAL_PARAMS_H
+#define GLOBAL_PARAMS_H
+
+
+
+#include "model/objects.h"
+#include <string>
+#include <vector>
+
+
+class GlobalParams {
+
+ protected:
+  static MASS_TYPE_T isotopic_mass_;
+  static int missed_cleavages_;
+  static int max_aas_modified_;
+  static FLOAT_T min_mass_;
+  static FLOAT_T max_mass_;
+  static WINDOW_TYPE_T precursor_window_type_;
+  static FLOAT_T precursor_window_;
+  static int min_length_;
+  static int max_length_;
+  static std::string xlink_prevents_cleavage_;
+  static std::string max_ion_charge_;
+  static ION_TYPE_T primary_ions_;
+  static MASS_TYPE_T fragment_mass_;
+  static bool precursor_ions_;
+  static ENZYME_T enzyme_;
+  static DIGEST_T digestion_;
+  static FLOAT_T remove_precursor_tolerance_;
+  static OBSERVED_PREPROCESS_STEP_T stop_after_;
+  static bool xlink_include_inter_;
+  static bool xlink_include_intra_;
+  static bool xlink_include_inter_intra_;
+  static bool xlink_include_deadends_;
+  static bool xlink_include_selfloops_;
+  static bool xlink_include_linears_;
+  static int max_xlink_mods_;
+  static int mod_precision_;
+  static int xlink_top_n_;
+  static std::vector<int> isotope_windows_;
+  static FLOAT_T fraction_to_fit_;
+  static bool xlink_use_ion_cache_;
+  static MASS_FORMAT_T mod_mass_format_;
+  
+ public:
+  /**
+   * Set all of the parameters using the Params::Get calls
+   */
+  static void set();
+  
+  /**
+   * The following function calls returns the value of the parameter using a saved variable
+   * These call are much faster than using the Params::Get calls
+   */
+  static const MASS_TYPE_T& getIsotopicMass();
+  static const int& getMissedCleavages();
+  static const int& getMaxAasModified();
+  static const FLOAT_T& getMinMass();
+  static const FLOAT_T& getMaxMass();
+  static const WINDOW_TYPE_T& getPrecursorWindowType();
+  static const FLOAT_T& getPrecursorWindow();
+  static const int& getMinLength();
+  static const int& getMaxLength();
+  static const std::string& getXLinkPreventsCleavage();
+  static const std::string& getMaxIonCharge();
+  static const ION_TYPE_T& getPrimaryIons();
+  static const MASS_TYPE_T& getFragmentMass();
+  static const bool& getPrecursorIons();
+  static const ENZYME_T& getEnzyme();
+  static const DIGEST_T& getDigestion();
+  static const FLOAT_T& getRemovePrecursorTolerance();
+  static const OBSERVED_PREPROCESS_STEP_T& getStopAfter();
+  static const bool& getXLinkIncludeInter();
+  static const bool& getXLinkIncludeIntra();
+  static const bool& getXLinkIncludeInterIntra();
+  static const bool& getXLinkIncludeDeadends();
+  static const bool& getXLinkIncludeSelfloops();
+  static const bool& getXLinkIncludeLinears();
+  static const int& getMaxXLinkMods();
+  static const int& getModPrecision();
+  static const int& getXLinkTopN();
+  static const std::vector<int>& getIsotopeWindows();
+  static const FLOAT_T& getFractionToFit();
+  static const bool& getXLinkUseIonCache();
+  static const MASS_FORMAT_T& getModMassFormat();
+};
+
+#endif
+
+
diff --git a/src/util/MathUtil.cpp b/src/util/MathUtil.cpp
new file mode 100644
index 0000000..def3474
--- /dev/null
+++ b/src/util/MathUtil.cpp
@@ -0,0 +1,20 @@
+#include "MathUtil.h"
+
+#include <cmath>
+
+using namespace std;
+
+double MathUtil::Round(double x, int decimals) {
+  double shift = pow(10.0, decimals);
+  return (x >= 0)
+    ? floor(x * shift + 0.5) / shift
+    : ceil(x * shift - 0.5) / shift;
+}
+
+bool MathUtil::AlmostEqual(double x, double y, int precision) {
+  return abs(x - y) < 5*pow(10.0, -(precision + 1));
+}
+
+MathUtil::MathUtil() {}
+MathUtil::~MathUtil() {}
+
diff --git a/src/util/MathUtil.h b/src/util/MathUtil.h
new file mode 100644
index 0000000..c549973
--- /dev/null
+++ b/src/util/MathUtil.h
@@ -0,0 +1,15 @@
+#ifndef MATHUTIL_H
+#define MATHUTIL_H
+
+class MathUtil {
+ public:
+  static double Round(double x, int decimals = 0);
+  static bool AlmostEqual(double x, double y, int precision);
+
+ private:
+  MathUtil();
+  ~MathUtil();
+};
+
+#endif
+
diff --git a/src/util/Params.cpp b/src/util/Params.cpp
new file mode 100644
index 0000000..b554b0c
--- /dev/null
+++ b/src/util/Params.cpp
@@ -0,0 +1,2849 @@
+#include "AminoAcidUtil.h"
+#include "crux_version.h"
+#include "mass.h"
+#include "model/Peptide.h"
+#include "model/objects.h"
+#include "parameter.h"
+#include "Params.h"
+#include "StringUtils.h"
+
+#include <algorithm>
+
+using namespace std;
+
+/**
+ * \file Params.cpp
+ *
+ * This module handles user-level parameters in Crux.  Required
+ * arguments are given on the command line; optional parameters can be
+ * specified either on the command line or in a parameter file.
+ * Textual descriptions of each parameter are stored in the source
+ * code, and these are used to automatically generate usage
+ * statements, comments in output parameter files, and HTML
+ * documentation.
+ *
+ * Following are the steps required to add a new argument or parameter
+ * to an existing command:
+ *
+ * - In Params.cpp, inside the constructor Params::Params(), add a
+ *   call to Init{Bool,Int,String,Double,Arg}Param.  This will specify
+ *   things like the parameter name, type, default value, what
+ *   commands it works with, and whether it is visible to the end
+ *   user.
+ *
+ * - If your parameter is optional, then in Params::Categorize(), add
+ *   an "items.insert()" with the name of your new parameter. This
+ *   controls what category the parameter gets printed in when the
+ *   HTML documentation is created.  Note that if the parameter
+ *   doesn't get added to a category in Params::Categorize(), it just
+ *   appears under a generic category called "<command name> options"
+ *
+ * - In the .cpp file that contains the main() for the command that
+ *   uses this parameter, find a call to either getArgs() (if your new
+ *   parameter is required) or getOptions() (if it is optional), and
+ *   add the name of your new parameter to the list of options there.
+
+ * - In the same file, add a call to
+ *   Params::get{Bool,Int,String,Double}() to retrieve the value
+ *   associated with the parameter.  In general, these methods can be
+ *   used anywhere in the source code in order to retrieve parameters.
+ *   However, it's good form, when feasible, to access parameters in
+ *   the main() and then to pass them as arguments, rather than
+ *   accessing them as globals within subroutines.
+ *
+ * - If you need to edit the textual description of the command
+ *   itself, search in the same file for a call to getDescription().
+ *   Portions of that description enclosed in "[[nohtml: XXX ]]" will
+ *   be used for the usage statement, and portions in "[[html: XXX ]]"
+ *   will be in the HTML docs.
+ *
+ */
+
+static Params paramContainer_;
+
+Params::Params() : finalized_(false) {
+  /* generate_peptide arguments */
+  InitArgParam("protein fasta file",
+    "The name of the file in FASTA format from which to retrieve proteins.");
+  InitArgParam("index name",
+    "The desired name of the binary index.");
+  InitArgParam("ms2 file",
+    "File containing spectra to be searched.");
+  /* psm-convert arguments */
+  InitArgParam("input PSM file",
+    "The name of a PSM file in tab-delimited text, SQT, pepXML or mzIdentML format");
+  InitArgParam("output format",
+    "The desired format of the output file. Legal values are tsv, html, sqt, pin, "
+    "pepxml, mzidentml.");
+  /* get-ms2-spectrum */
+  InitArgParam("scan number",
+    "Scan number identifying the spectrum.");
+  InitArgParam("output file",
+    "File where spectrum will be written.");
+  /* predict-peptide-ions */
+  InitArgParam("peptide sequence",
+    "The peptide sequence.");
+  InitArgParam("charge state",
+    "The charge state of the peptide.");
+  /* hardklor arguments */
+  InitArgParam("spectra",
+    "The name of a file from which to parse high-resolution spectra. The file "
+    "may be in MS1 (.ms1), binary MS1 (.bms1), compressed MS1 (.cms1), or mzXML "
+    "(.mzXML) format.");
+  /*Percolator arguments*/
+  InitArgParam("peptide-spectrum matches",
+    "A collection of target and decoy peptide-spectrum matches (PSMs). Input may "
+    "be in one of five formats: PIN, SQT, pepXML, [[html:<a href=\"../file-formats/txt-format.html\">]]"
+    "Crux tab-delimited text[[html:</a>]], or a list of files (when list-of-files=T). "
+    "Note that if the input is provided as SQT, pepXML, or Crux "
+    "tab-delimited text, then a PIN file will be generated in the output directory "
+    "prior to execution."
+    "Crux determines the format of the input file by examining its "
+    "filename extension.  "
+    "[[html:<br>Decoy PSMs can be provided to Percolator in two "
+    "ways: either as a separate file or embedded within the same file as the target "
+    "PSMs. Percolator will first search for target PSMs in a separate file. The "
+    "decoy file name is constructed from the target name by replacing \"target\" with "
+    "\"decoy\". For example, if search.target.txt is provided as input, then "
+    "Percolator will search for a corresponding file named search.decoy.txt. If no "
+    "decoy file is found, then Percolator will assume that the given input file "
+    "contains a mix of target and decoy PSMs. Within this file, decoys are identified "
+    "using a prefix (specified via --decoy-prefix) on the protein name.]]");
+  /*make-pin arguments*/
+  InitArgParam("psm results",
+    "A collection of target and decoy peptide-spectrum matches (PSMs). Input may be in "
+    "one of four formats: SQT, PepXML (obtained from SEQUEST), [[html:<a href=\""
+    "../file-formats/txt-format.html\">]]Crux tab-delimited text[[html:</a>]], or list of files (when "
+    "list-of-files=T)."
+    "[[html:<br>Decoy PSMs can be provided to make-pin in two ways: either as a separate "
+    "file or embedded within the same file as the target PSMs. make-pin will first search "
+    "for the target PSMs in a separate file. The decoy file name is constructed from the "
+    "target name by replacing \"target\" with \"decoy\". For example, if search.target.txt "
+    "is provided as input, then make-pin will search for a corresponding file named "
+    "search.decoy.txt. If no decoy file is found, then make-pin will assume that the "
+    "given input file contains a mix of target and decoy PSMs. Within this file, decoys "
+    "are identified using a prefix (specified via --decoy-prefix) on the protein name.]]");
+  InitStringParam("decoy input", "",
+    "make-pin can convert any file format in sqt, tab-delimited and pep.xml file "
+    "to pin file ",
+    "Argument, not option for make-pin", false);
+  InitStringParam("output-file", "",
+    "Path where pin file will be written instead of make-pin.pin.",
+    "It is optional for make-pin", true);
+  InitBoolParam("filestem-prefixes", false,
+    "Prefix PSM IDs with filestems instead of target or decoy and file index.",
+    "Available for make-pin", false);
+  InitBoolParam("mod-symbols", false,
+    "Print modification symbols instead of masses in peptide sequences.",
+    "Available for make-pin", false);
+  // q-ranker/barista arguments
+  InitArgParam("fragmentation spectra",
+    "The fragmentation spectra must be provided in [[html:<a href=\"../file-formats/ms2-format.html\">]]"
+    "MS2[[html:</a>]], mzXML, or MGF format.");
+  // pipeline arguments
+  InitArgParam("mass spectra",
+    "The name of the file(s) from which to parse the fragmentation spectra, in any of the "
+    "[[html:<a href=\"http://proteowizard.sourceforge.net/tools.shtml\">]]file formats "
+    "supported by ProteoWizard[[html:</a>]]. Alteratively, with Tide-search, these files "
+    "may be binary spectrum files produced by a previous run of [[html:<code>]]crux "
+    "tide-search[[html:</code>]] using the [[html:<code>]]store-spectra[[html:</code>]] "
+    "parameter.");
+  InitArgParam("peptide source",
+    "Either the name of a file in fasta format from which to retrieve proteins and "
+    "peptides or an index created by a previous run of [[html:<code>]]crux tide-index"
+    "[[html:</code>]] (for Tide searching).");
+  /* *** Initialize Options (command line and param file) *** */
+
+  /* options for all executables */
+  InitIntParam("verbosity", 30, 0, 100,
+    "Specify the verbosity of the current processes. Each level prints the following "
+    "messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-"
+    "fatal errors, 20-warnings, 30-information on the progress of execution, 40-more "
+    "progress information, 50-debug info, 60-detailed debug info.",
+    "Available for all crux programs.", true);
+  InitStringParam("parameter-file", "", 
+    "A file containing parameters. [[html: See the "
+    "<a href=\"../file-formats/parameter-file.html\">parameter documentation</a> page for details.]]",
+    "Available for all crux programs. Any options specified on the "
+    "command line will override values in the parameter file.", true);
+  InitBoolParam("overwrite", false, 
+    "Replace existing files if true or fail when trying to overwrite a file if false.",
+    "Available for all crux programs.  Applies to parameter file "
+    "as well as index, search, and analysis output files.", true);
+  /* generate_peptide parameters  */
+  InitIntParam("min-length", 6, 1, MAX_PEPTIDE_LENGTH,
+    "The minimum length of peptides to consider.",
+    "Used from the command line or parameter file by "
+    "crux-generate-peptides, and crux tide-index.", true);
+  InitIntParam("max-length", 50, 1, MAX_PEPTIDE_LENGTH,
+    "The maximum length of peptides to consider.",
+    "Available from command line or parameter file for "
+    "crux-generate-peptides, crux tide-index. ", true);
+  InitDoubleParam("min-mass", 200, 0, BILLION,
+    "The minimum mass (in Da) of peptides to consider.",
+    "Available from command line or parameter file for "
+    "crux-generate-peptides and crux tide-index. ", true);
+  InitDoubleParam("max-mass", 7200, 1, BILLION, 
+    "The maximum mass (in Da) of peptides to consider.",
+    "Available from command line or parameter file for "
+    "crux-generate-peptides and crux tide-index. ", true);
+  InitIntParam("min-peaks", 20, 0, BILLION,
+    "The minimum number of peaks a spectrum must have for it to be searched.",
+    "Available for tide-search.", true);
+  InitStringParam("enzyme", "trypsin", "no-enzyme|trypsin|trypsin/p|chymotrypsin|"
+    "elastase|clostripain|cyanogen-bromide|iodosobenzoate|proline-endopeptidase|"
+    "staph-protease|asp-n|lys-c|lys-n|arg-c|glu-c|pepsin-a|"
+    "elastase-trypsin-chymotrypsin|custom-enzyme",
+    "Specify the enzyme used to digest the proteins in silico. Available enzymes "
+    "(with the corresponding digestion rules indicated in parentheses) include "
+    "no-enzyme ([X]|[X]), trypsin ([RK]|{P}), trypsin/p ([RK]|[]), chymotrypsin "
+    "([FWYL]|{P}), elastase ([ALIV]|{P}), clostripain ([R]|[]), cyanogen-bromide "
+    "([M]|[]), iodosobenzoate ([W]|[]), proline-endopeptidase ([P]|[]), staph-protease "
+    "([E]|[]), asp-n ([]|[D]), lys-c ([K]|{P}), lys-n ([]|[K]), arg-c ([R]|{P}), "
+    "glu-c ([DE]|{P}), pepsin-a ([FL]|{P}), elastase-trypsin-chymotrypsin "
+    "([ALIVKRWFY]|{P}). Specifying --enzyme no-enzyme yields a non-enzymatic digest. "
+    "[[html:<strong>]]Warning:[[html:</strong>]] the resulting index may be quite large.",
+    "Available for crux-generate-peptides and crux tide-index.", true);
+  InitStringParam("custom-enzyme", "", 
+    "Specify rules for in silico digestion of protein sequences. Overrides the enzyme "
+    "option. Two lists of residues are given enclosed in square brackets or curly "
+    "braces and separated by a |. The first list contains residues required/prohibited "
+    "before the cleavage site and the second list is residues after the cleavage site. "
+    "If the residues are required for digestion, they are in square brackets, '[' and "
+    "']'. If the residues prevent digestion, then they are enclosed in curly braces, "
+    "'{' and '}'. Use X to indicate all residues. For example, trypsin cuts after R or "
+    "K but not before P which is represented as [RK]|{P}. AspN cuts after any residue "
+    "but only before D which is represented as [X]|[D].",
+    "", true);
+  InitStringParam("digestion", "full-digest",
+    "full-digest|partial-digest|non-specific-digest",
+    "Specify whether every peptide in the database must have two enzymatic termini "
+    "(full-digest) or if peptides with only one enzymatic terminus are also included "
+    "(partial-digest).",
+    "Available for crux-generate-peptides and crux tide-index.", true);
+  InitIntParam("missed-cleavages", 0, 0, 500,
+    "Maximum number of missed cleavages per peptide to allow in enzymatic digestion.",
+    "Available from command line or parameter file for crux-generate-peptides. "
+    "When used with enzyme=<trypsin|elastase|chymotrypsin> "
+    "includes peptides containing one or more potential cleavage sites.", true);
+  InitDoubleParam("precursor-window", 3.0, 0, 100, 
+    "Tolerance used for matching peptides to spectra. Peptides must be within +/- "
+    "'precursor-window' of the spectrum value. The precursor window units depend upon "
+    "precursor-window-type.",
+    "Available for tide-search and crux-generate-peptides.", true);
+  InitStringParam("precursor-window-type", "mass", "mass|mz|ppm",
+    "Specify the units for the window that is used to select peptides around the precursor "
+    "mass location (mass, mz, ppm). The magnitude of the window is defined by the precursor-"
+    "window option, and candidate peptides must fall within this window. For the mass window-"
+    "type, the spectrum precursor m+h value is converted to mass, and the window is defined "
+    "as that mass +/- precursor-window. If the m+h value is not available, then the mass is "
+    "calculated from the precursor m/z and provided charge. The peptide mass is computed as "
+    "the sum of the average amino acid masses plus 18 Da for the terminal OH group. The mz "
+    "window-type calculates the window as spectrum precursor m/z +/- precursor-window and "
+    "then converts the resulting m/z range to the peptide mass range using the precursor "
+    "charge. For the parts-per-million (ppm) window-type, the spectrum mass is calculated as "
+    "in the mass type. The lower bound of the mass window is then defined as the spectrum "
+    "mass / (1.0 + (precursor-window / 1000000)) and the upper bound is defined as spectrum "
+    "mass / (1.0 - (precursor-window / 1000000)).",
+    "Available for search-for-xlinks and tide-search.", true);
+  InitStringParam("auto-precursor-window", "false", "false|warn|fail",
+    "Automatically estimate optimal value for the precursor-window parameter "
+    "from the spectra themselves. false=no estimation, warn=try to estimate "
+    "but use the default value in case of failure, fail=try to estimate and "
+    "quit in case of failure.",
+    "Available for tide-search.", true);
+  InitStringParam("spectrum-parser", "pwiz", "pwiz|mstoolkit",
+    "Specify the parser to use for reading in MS/MS spectra.[[html: The default, "
+    "ProteoWizard parser can read the MS/MS file formats listed <a href=\""
+    "http://proteowizard.sourceforge.net/formats.shtml\">here</a>. The alternative is "
+    "<a href=\"../mstoolkit.html\">MSToolkit parser</a>. "
+    "If the ProteoWizard parser fails to read your files properly, you may want to try the "
+    "MSToolkit parser instead.]]",
+    "Available for search-for-xlinks.", true);
+  InitBoolParam("use-z-line", true,
+    "Specify whether, when parsing an MS2 spectrum file, Crux obtains the "
+    "precursor mass information from the \"S\" line or the \"Z\" line. ",
+    "Available when spectrum-parser = pwiz.", true);
+  InitStringParam("keep-terminal-aminos", "NC", "N|C|NC|none",
+    "When creating decoy peptides using decoy-format=shuffle or decoy-format="
+    "peptide-reverse, this option specifies whether the N-terminal and "
+    "C-terminal amino acids are kept in place or allowed to be shuffled or "
+    "reversed. For a target peptide \"EAMPK\" with decoy-format=peptide-reverse, setting "
+    "keep-terminal-aminos to \"NC\" will yield \"EPMAK\"; setting it to \"C\" will yield "
+    "\"PMAEK\"; setting it to \"N\" will yield \"EKPMA\"; and setting it to \"none\" will "
+    "yield \"KPMAE\".",
+    "Available for tide-index.", true);
+  InitBoolParam("peptide-list", false,
+    "Create in the output directory a text file listing of all the peptides in the "
+    "database, along with their neutral masses, one per line. If decoys are generated, "
+    "then a second file will be created containing the decoy peptides. Decoys that also "
+    "appear in the target database are marked with an asterisk in a third column.",
+    "Available for tide-index.", true);
+  // print-processed-spectra option
+  InitStringParam("stop-after", "xcorr", "remove-precursor|square-root|"
+    "remove-grass|ten-bin|xcorr",
+    "Stop after the specified pre-processing step.",
+    "Available for print-processed-spectra.", true);
+  InitStringParam("output-units", "bin", "mz|bin",
+    "Specify the output units for processed spectra.",
+    "Available for print-processed-spectra", true);
+  /* more generate_peptide parameters */
+  InitBoolParam("sqt-output", false,
+    "Outputs an SQT results file to the output directory. Note that if sqt-output is "
+    "enabled, then compute-sp is automatically enabled and cannot be overridden.",
+    "Available for tide-search.", true);
+  InitBoolParam("mzid-output", false,
+    "Output an mzIdentML results file to the output directory.",
+    "Available for tide-search, percolator.", true);
+  InitBoolParam("pin-output", false,
+    "Output a Percolator input (PIN) file to the output directory.",
+    "Available for tide-search.", true);
+  InitBoolParam("pout-output", false,
+    "Output a Percolator [[html:<a href=\""
+    "https://github.com/percolator/percolator/blob/master/src/xml/percolator_out.xsd\">]]"
+    "pout.xml[[html:</a>]] format results file to the output directory.",
+    "Available for percolator.", true);
+  InitBoolParam("pepxml-output", false,
+    "Output a pepXML results file to the output directory.",
+    "Available for tide-search, q-ranker, barista, percolator.", true);
+  InitBoolParam("txt-output", true,
+    "Output a tab-delimited results file to the output directory.",
+    "Available for tide-search, percolator, q-ranker, barista.", true);
+  InitStringParam("prelim-score-type", "sp", "sp|xcorr",
+    "Initial scoring (sp, xcorr).", 
+    "The score applied to all possible psms for a given spectrum. Typically "
+    "used to filter out the most plausible for further scoring.", false);
+  InitStringParam("score-type", "xcorr", "xcorr|sp|xcorr-pvalue|sp-pvalue",
+    "The primary scoring method to use (xcorr, sp, xcorr-pvalue, sp-pvalue).",
+    "Primary scoring is typically done on a subset (see max-rank-preliminary) of all "
+    "possible psms for each spectrum. Default is the SEQUEST-style xcorr. "
+    "Crux also offers a p-value calculation for each psm based on xcorr "
+    "or sp (xcorr-pvalue, sp-pvalue).", false);
+  InitBoolParam("compute-sp", false,
+    "Compute the preliminary score Sp for all candidate peptides. Report this score in the "
+    "output, along with the corresponding rank, the number of matched ions and the total "
+    "number of ions. This option is recommended if results are to be analyzed by Percolator "
+    "or Barista. If sqt-output is enabled, then compute-sp is automatically enabled and "
+    "cannot be overridden. Note that the Sp computation requires re-processing each "
+    "observed spectrum, so turning on this switch involves significant computational overhead.",
+    "Available for tide-search.", true);
+  InitBoolParam("compute-p-values", false, 
+    "Estimate the parameters of the score distribution for each spectrum by fitting to a "
+    "Weibull distribution, and compute a p-value for each xlink product. This option is "
+    "only available when use-old-xlink=F.",
+    "Currently only implemented for XCORR.", true);
+  InitStringParam("scan-number", "",
+    "A single scan number or a range of numbers to be searched. Range should be "
+    "specified as 'first-last' which will include scans 'first' and 'last'.",
+    "The search range x-y is inclusive of x and y.", true);
+  /* N.B. Use NaN to indicate that no user preference was specified.
+   * In this case, the default value depends on the mass type.
+   * S.M. Also prevent a width of 0.                                */
+  InitDoubleParam("mz-bin-width", 1.0005079, 1e-4, BILLION,
+    "Before calculation of the XCorr score, the m/z axes of the observed and theoretical "
+    "spectra are discretized. This parameter specifies the size of each bin. The exact "
+    "formula for computing the discretized m/z value is floor((x/mz-bin-width) + 1.0 - mz-bin-offset), where x is the observed m/z "
+    "value. For low resolution ion trap ms/ms data 1.0005079 and for high resolution ms/ms "
+    "0.02 is recommended.",
+    "Available for tide-search and xlink-assign-ions.", true);
+  InitDoubleParam("mz-bin-offset", 0.40, 0.0, 1.0,
+    "In the discretization of the m/z axes of the observed and theoretical spectra, this "
+    "parameter specifies the location of the left edge of the first bin, relative to "
+    "mass = 0 (i.e., mz-bin-offset = 0.xx means the left edge of the first bin will be "
+    "located at +0.xx Da).",
+    "Available for tide-search.", true);
+  InitStringParam("auto-mz-bin-width", "false", "false|warn|fail",
+    "Automatically estimate optimal value for the mz-bin-width parameter "
+    "from the spectra themselves. false=no estimation, warn=try to estimate "
+    "but use the default value in case of failure, fail=try to estimate and "
+    "quit in case of failure.",
+    "Available for tide-search.", true);
+  InitBoolParam("use-flanking-peaks", false,
+    "Include flanking peaks around singly charged b and y theoretical ions. Each flanking "
+    "peak occurs in the adjacent m/z bin and has half the intensity of the primary peak.",
+    "Available for the tide-search and search-for-xlinks commands.", true);
+  InitDoubleParam("spectrum-min-mz", 0.0, 0, BILLION, 
+    "The lowest spectrum m/z to search in the ms2 file.",
+    "Available for tide-search.", true);
+  InitDoubleParam("spectrum-max-mz", BILLION, 1, BILLION, 
+    "The highest spectrum m/z to search in the ms2 file.",
+    "Available for tide-search.", true);
+  InitStringParam("spectrum-charge", "all", "1|2|3|all",
+    "The spectrum charges to search. With 'all' every spectrum will be searched and "
+    "spectra with multiple charge states will be searched once at each charge state. "
+    "With 1, 2, or 3 only spectra with that charge state will be searched.",
+    "Used by tide-search.", true);
+  InitStringParam("fileroot", "", 
+    "The fileroot string will be added as a prefix to all output file names.",
+    "Available for all commands that produce an output directory.", true);
+  InitStringParam("output-dir", "crux-output",
+    "The name of the directory where output files will be created.",
+    "Available for most commands.", true);
+  InitStringParam("temp-dir", "",
+    "The name of the directory where temporary files will be created. If this "
+    "parameter is blank, then the system temporary directory will be used",
+    "Available for tide-index.", true);
+  // coder options regarding decoys
+  InitIntParam("num-decoy-files", 1, 0, 10,
+    "Replaces number-decoy-set.  Determined by decoy-location"
+    " and num-decoys-per-target",
+    "", false);
+  InitBoolParam("decoy-p-values", false,
+    "Store all decoy p-values in a file",
+    "", false);
+  InitIntParam("top-match", 5, 1, BILLION, 
+    "Specify the number of matches to report for each spectrum.",
+    "Available for tide-search and crux percolator", true);
+  InitStringParam("seed", "1",
+    "When given a unsigned integer value seeds the random number generator with that value. "
+    "When given the string \"time\" seeds the random number generator with the system time.",
+    "Available for all Crux commands.", true);
+  InitStringParam("fragment-mass", "mono", "average|mono",
+    "Specify which isotopes to use in calculating fragment ion mass.",
+    "Used by crux-predict-peptide-ions.", true);
+  InitStringParam("isotopic-mass", "mono", "average|mono",
+    "Specify the type of isotopic masses to use when calculating the peptide mass.",
+    "Used from command line or parameter file by crux-generate-peptides.", true);
+  InitStringParam("mod", "NO MODS",
+    "Consider modifications on any amino acid in aa list with at most max-per-peptide in one "
+    "peptide. The parameter takes the form "
+    "[[html:<mass change>:<aa list>:<max per peptide>:<prevents cleavage>:"
+    "<prevents cross-link>]]"
+    "[[nohtml:<mass change>:<aa list>:<max per peptide>:<prevents cleavage>:<prevents cross-link>]]"
+    ". This parameter may be included with different values multiple times so long as "
+    "the total number of mod, cmod, and nmod parameters does not exceed 11. The \"prevents "
+    "cleavage\" and \"prevents cross-link\" arguments are optional T/F arguments for describing whether the "
+    "modification prevents enzymatic cleavage of cross-linking, respectively. This option is "
+    "only available when use-old-xlink=F. "
+    "Note that this parameter only takes effect when specified in the "
+    "parameter file.",
+    "Available for search-for-xlinks.", true);
+  InitStringParam("cmod", "NO MODS",
+    "Specify a variable modification to apply to C-terminus of peptides. " 
+    "<mass change>:<max distance from protein c-term (-1 for no max)>. "
+    "Note that this parameter only takes effect when specified in the "
+    "parameter file.",
+    "Available for search-for-xlinks.", true);
+  InitStringParam("nmod", "NO MODS",
+    "Specify a variable modification to apply to N-terminus of peptides.  " 
+    "<mass change>:<max distance from protein n-term (-1 for no max)> "
+    "Note that this parameter only takes effect when specified in the "
+    "parameter file.",
+    "Available for search-for-xlinks.", true);
+  InitIntParam("min-mods", 0, 0, MAX_PEPTIDE_LENGTH,
+    "The minimum number of modifications that can be applied to a single " 
+    "peptide.",
+    "Available for tide-index.", true);
+  InitIntParam("max-mods", MAX_PEPTIDE_LENGTH, 0, MAX_PEPTIDE_LENGTH,
+    "The maximum number of modifications that can be applied to a single " 
+    "peptide.",
+    "Available for tide-index.", true);
+  InitIntParam("max-aas-modified", MAX_PEPTIDE_LENGTH, 0, MAX_PEPTIDE_LENGTH,
+    "The maximum number of modified amino acids that can appear in one "
+    "peptide.  Each aa can be modified multiple times.",
+    "", true);
+  InitStringParam("mod-mass-format", "mod-only", "mod-only|total|separate",
+    "Specify how sequence modifications are reported in various output files. Each "
+    "modification is reported as a number enclosed in square braces following the "
+    "modified residue; however, the number may correspond to one of three different "
+    "masses: (1) 'mod-only' reports the value of the mass shift induced by the "
+    "modification; (2) 'total' reports the mass of the residue with the modification "
+    "(residue mass plus modification mass); (3) 'separate' is the same as 'mod-only', "
+    "but multiple modifications to a single amino acid are reported as a "
+    "comma-separated list of values. For example, suppose amino acid D has an "
+    "unmodified mass of 115 as well as two moifications of masses +14 and +2. In this "
+    "case, the amino acid would be reported as D[16] with 'mod-only', D[131] with 'total', "
+    "and D[14,2] with 'separate'.",
+    "Available for generate-peptides.", true);
+  InitIntParam("mod-precision", 2, 0, 20,//arbitrary
+    "Set the precision for modifications as written to .txt files.",
+    "Also changes mods written to parameter file. Set internally based on "
+    "the max mod precision in the param file.",
+    false);
+
+  InitBoolParam("use-a-ions", false,
+    "Consider a-ions in the search? Note that an a-ion is equivalent to a "
+    "neutral loss of CO from the b-ion.  "
+    "Peak height is 10 (in arbitrary units).",
+    "Available for search-for-xlinks and xlink-score-spectrum.", true);
+  InitBoolParam("use-b-ions", true,
+    "Consider b-ions in the search? Peak height is 50 (in arbitrary units).",
+    "Available for search-for-xlinks and xlink-score-spectrum.", true);
+  InitBoolParam("use-c-ions", false,
+    "Consider c-ions in the search? Peak height is 50 (in arbitrary units).",
+    "Available for search-for-xlinks and xlink-score-spectrum.", true);
+  InitBoolParam("use-x-ions", false,
+    "Consider x-ions in the search? Peak height is 10 (in arbitrary units).",
+    "Available for search-for-xlinks and xlink-score-spectrum.", true);
+  InitBoolParam("use-y-ions", true,
+    "Consider y-ions in the search? Peak height is 50 (in arbitrary units).",
+    "Available for search-for-xlinks and xlink-score-spectrum.", true);
+  InitBoolParam("use-z-ions", false,
+    "Consider z-ions in the search? Peak height is 50 (in arbitrary units).",
+    "Available for search-for-xlinks and xlink-score-spectrum.", true);
+
+  InitIntParam("precision", 8, 1, 100, //max is arbitrary
+    "Set the precision for scores written to sqt and text files.",
+    "Available for all commands.", true);
+  InitIntParam("mass-precision", 4, 1, 100, // max is arbitrary
+    "Set the precision for masses and m/z written to sqt and .txt files. "
+    "Note that this parameter only takes effect when specified in the "
+    "parameter file.",
+    "Available for all commands.", true);
+  InitIntParam("print-search-progress", 1000, 0, BILLION,
+    "Show search progress by printing every n spectra searched. Set to 0 to show no "
+    "search progress.",
+    "Available for tide-search", true);
+  // Sp scoring params
+  InitDoubleParam("max-mz", 4000, 0, BILLION, 
+    "Used in scoring sp.",
+    "Hide from users", false);
+  InitDoubleParam("fraction-top-scores-to-fit", 0.55, 0, 1, 
+    "The fraction of psms per spectrum to use for estimating the "
+    "score distribution for calculating p-values. "
+    "Not compatible with 'number-top-scores-to-fig'.",
+    "For developers/research only.", false);
+  /* analyze-matches options */
+  InitStringParam("algorithm", "percolator", "percolator|curve-fit|none",
+    "The analysis algorithm to use (percolator, curve-fit, none).",
+    "Available only for crux-analyze-matches.  Using 'percolator' will "
+    "assign a q-value to the top-ranking psm for each spectrum based on "
+    "the decoy searches.  Using 'curve-fit' will assign a q-value to same "
+    "using the p-values calculated with score-type=<xcorr-pvalue|"
+    "sq-pvalue>.  Incorrect combinations of score-type and algorithm cause"
+    " undefined behavior. Using 'none' will turn the binary .csm files "
+    "into text.", false);
+  // **** percolator options. ****
+  InitStringParam("search-input", "auto", "auto|separate|concatenated",
+    "Specify the type of target-decoy search. Using 'auto', percolator attempts "
+    "to detect the search type automatically.  Using 'separate' specifies two searches: "
+    "one against target and one against decoy protein db. Using 'concatenated' "
+    "specifies a single search on concatenated target-decoy protein db.",
+    "Available for percolator", true);
+  InitStringParam("percolator-seed", "1",
+    "When given a unsigned integer value seeds the random number generator with that value. "
+    "When given the string \"time\" seeds the random number generator with the system time.",
+    "Available for all percolator", true);
+  InitBoolParam("feature-file-out", false,
+    "Output the computed features in [[html:<a href=\"../file-formats/features.html\">]]tab-delimited "
+    "text format[[html:</a>]].",
+    "Available for percolator and q-ranker.", true);
+  InitBoolParam("decoy-xml-output", false,
+    "Include decoys (PSMs, peptides, and/or proteins) in the XML output.",
+    "Available for crux percolator", true);
+  InitStringParam("decoy-prefix", "decoy_",
+    "Specifies the prefix of the protein names that indicate a decoy.",
+    "Available for percolator", true);
+  InitBoolParam("output-weights", false,
+    "Output final weights to a file named \"percolator.weights.txt\".",
+    "Available for crux percolator", true);
+  InitStringParam("init-weights", "",
+    "Read initial weights from the given file (one per line).",
+    "Available for crux percolator", true);
+  InitIntParam("subset-max-train", 0,
+    "Only train Percolator on a subset of PSMs, and use the resulting score "
+    "vector to evaluate the other PSMs. Recommended when analyzing huge numbers "
+    "(>1 million) of PSMs. When set to 0, all PSMs are used for training as "
+    "normal.",
+    "Available for crux percolator", true);
+  InitDoubleParam("c-pos", 0.00,
+    "Penalty for mistakes made on positive examples. If this value is set to 0, "
+    "then it is set via cross validation over the values {0.1, 1, 10}, selecting the "
+    "value that yields the largest number of PSMs identified at the q-value threshold "
+    "set via the --test-fdr parameter.",
+    "Available for crux percolator", true);
+  InitDoubleParam("c-neg", 0.0, 0.0, 0.90,
+    "Penalty for mistake made on negative examples. If not specified, then "
+    "this value is set by cross validation over {0.1, 1, 10}.",
+    "Available for crux percolator", true);
+  InitDoubleParam("train-fdr", 0.01, 0, BILLION,
+    "False discovery rate threshold to define positive examples in training.",
+    "Available for crux percolator", true);
+  InitDoubleParam("test-fdr", 0.01, 0.0, 1.0,
+    "False discovery rate threshold used in selecting hyperparameters during internal "
+    "cross-validation and for reporting the final results.",
+    "Available for crux percolator.", true);
+  InitDoubleParam("fido-fast-gridsearch", 0.0, 0.0, 1.0,
+    "Apply the specified threshold to PSM, peptide and protein probabilities to "
+    "obtain a faster estimate of the alpha, beta and gamma parameters.",
+    "Available for crux percolator.", true);
+  InitBoolParam("fido-no-split-large-components", false,
+    "Do not approximate the posterior distribution by allowing large graph "
+    "components to be split into subgraphs. The splitting is done by "
+    "duplicating peptides with low probabilities. Splitting continues "
+    "until the number of possible configurations of each subgraph is "
+    "below 2^18", 
+    "Available for crux percolator", true);
+  InitDoubleParam("fido-protein-truncation-threshold", 0.01, 0.0, 1.0,
+    "To speed up inference, proteins for which none of the associated "
+    "peptides has a probability exceeding the specified threshold will "
+    "be assigned probability = 0.",
+    "Available for crux percolator", true);
+  InitBoolParam("tdc", true,
+    "Use target-decoy competition to assign q-values and PEPs. When set to F, "
+    "the mix-max method, which estimates the proportion pi0 of incorrect target "
+    "PSMs, is used instead.",
+    "Available for crux percolator", true);
+  InitIntParam("maxiter", 10, 0, 100000000,
+    "Maximum number of iterations for training.",
+    "Available for crux percolator", true);
+  InitBoolParam("quick-validation", false,
+    "Quicker execution by reduced internal cross-validation.",
+    "Available for crux percolator", true);
+  InitStringParam("default-direction", "",
+    "In its initial round of training, Percolator uses one feature to induce a ranking "
+    "of PSMs. By default, Percolator will select the feature that produces the largest "
+    "set of target PSMs at a specified FDR threshold (cf. --train-fdr). This option "
+    "allows the user to specify which feature is used for the initial ranking, using the "
+    "name as a string[[html: from <a href=\"../file-formats/features.html\">this table</a>]]. The name "
+    "can be preceded by a hyphen (e.g. \"-XCorr\") to indicate that a lower value is "
+    "better.",
+    "Available for crux percolator", true);
+  InitBoolParam("unitnorm", false,
+    "Use unit normalization (i.e., linearly rescale each PSM's feature vector to have a "
+    "Euclidean length of 1), instead of standard deviation normalization.",
+    "Available for crux percolator.", true);
+  InitBoolParam("test-each-iteration", false,
+    "Measure performance on test set each iteration.",
+    "Available for crux percolator.", true);
+  InitBoolParam("feature-file-in", false,
+    "When set to T, interpret the input file as a PIN file.",
+    "Available for crux percolator.", true);
+  InitStringParam("picked-protein", "",
+    "Use the picked protein-level FDR to infer protein probabilities, provide the "
+    "fasta file as the argument to this flag.",
+    "Available for crux percolator", true);
+  InitStringParam("protein-enzyme", "trypsin", "no_enzyme|elastase|pepsin|proteinasek|"
+    "thermolysin|trypsinp|chymotrypsin|lys-n|lys-c|arg-c|asp-n|glu-c|trypsin",
+    "Type of enzyme",
+    "Available for crux percolator", true);
+  InitBoolParam("protein-report-fragments", false,
+    "By default, if the peptides associated with protein A are a proper subset "
+    "of the peptides associated with protein B, then protein A is eliminated and "
+    "all the peptides are considered as evidence for protein B. Note that this "
+    "filtering is done based on the complete set of peptides in the database, not "
+    "based on the identified peptides in the search results. Alternatively, if this "
+    "option is set and if all of the identified peptides associated with protein B "
+    "are also associated with protein A, then Percolator will report a comma-"
+    "separated list of protein IDs, where the full-length protein B is first in the "
+    "list and the fragment protein A is listed second. Not available for Fido.",
+    "Available for crux percolator", true);
+  InitBoolParam("protein-report-duplicates", false,
+    "If multiple database proteins contain exactly the same set of peptides, then "
+    "Percolator will randomly discard all but one of the proteins. If this option "
+    "is set, then the IDs of these duplicated proteins will be reported as a comma-"
+    "separated list. Not available for Fido.",
+    "Available for crux percolator", true);
+  InitBoolParam("protein", false,
+    "Use the Fido algorithm to infer protein probabilities. Must be true to use any of the Fido options.",
+    "Available for crux percolator", true);
+  InitDoubleParam("fido-alpha", 0.0, 0.0, 1.0,
+    "Specify the probability with which a present protein emits an associated peptide. "
+    "Set by grid search (see --fido-gridsearch-depth parameter) if not specified.",
+    "Available for crux percolator if --protein T is set.", true);
+  InitDoubleParam("fido-beta", 0.0, 0.0, 10.0,
+    "Specify the probability of the creation of a peptide from noise. Set by grid "
+    "search (see --fido-gridsearch-depth parameter) if not specified.",
+    "Available for crux percolator if --protein T is set.", true);
+  InitDoubleParam("fido-gamma", 0.0, 0.0, 10.0,
+    "Specify the prior probability that a protein is present in the sample. Set by grid "
+    "search (see --fido-gridsearch-depth parameter) if not specified.",
+    "Available for crux percolator if --protein T is set.", true);
+  InitBoolParam("fido-empirical-protein-q", false,
+    "Estimate empirical p-values and q-values for proteins using target-decoy analysis.",
+    "Available for crux percolator if --protein T is set.", true);
+  InitIntParam("fido-gridsearch-depth", 0, 0, 2,
+    "Set depth of the grid search for alpha, beta and gamma estimation.[[html: The values "
+    "considered, for each possible value of the --fido-gridsearch-depth parameter, are as follows:<ul>"
+    "<li>0: alpha = {0.01, 0.04, 0.09, 0.16, 0.25, 0.36, 0.5}; beta = {0.0, 0.01, 0.15, "
+    "0.025, 0.035, 0.05, 0.1}; gamma = {0.1, 0.25, 0.5, 0.75}.</li><li>1: alpha = {0.01, "
+    "0.04, 0.09, 0.16, 0.25, 0.36}; beta = {0.0, 0.01, 0.15, 0.025, 0.035, 0.05}; gamma = "
+    "{0.1, 0.25, 0.5}.</li><li>2: alpha = {0.01, 0.04, 0.16, 0.25, 0.36}; beta = {0.0, "
+    "0.01, 0.15, 0.030, 0.05}; gamma = {0.1, 0.5}.</li><li>3: alpha = {0.01, 0.04, 0.16, "
+    "0.25, 0.36}; beta = {0.0, 0.01, 0.15, 0.030, 0.05}; gamma = {0.5}.</li></ul>]]",
+    "Available for crux percolator if --protein T is set.", true);
+  InitDoubleParam("fido-gridsearch-mse-threshold", 0.05, 0, 1,
+    "Q-value threshold that will be used in the computation of the MSE and ROC AUC "
+    "score in the grid search.",
+    "Available for crux percolator if --protein T is set.", true);
+  InitBoolParam("override", false,
+    "By default, Percolator will examine the learned weights for each feature, and if "
+    "the weight appears to be problematic, then percolator will discard the learned "
+    "weights and instead employ a previously trained, static score vector. This switch "
+    "allows this error checking to be overriden.",
+    "Available for crux percolator.", true);
+  InitBoolParam("klammer", false,
+    "Use retention time features calculated as in \"Improving tandem mass spectrum "
+    "identification using peptide retention time prediction across diverse chromatography "
+    "conditions\" by Klammer AA, Yi X, MacCoss MJ and Noble WS. ([[html:<em>]]Analytical "
+    "Chemistry[[html:</em>]]. 2007 Aug 15;79(16):6111-8.).",
+    "Available for crux percolator", true);
+  InitBoolParam("only-psms", false,
+    "Do not remove redundant peptides; keep all PSMs and exclude peptide level probability.",
+    "Available for crux percolator", true);
+  // **** Tide arguments ****
+  InitArgParam("spectrum records file",
+    "A spectrum records file generated by a previous run of crux tide-search "
+    "using the store-spectra parameter.");
+  InitArgParam("tide spectra file",
+    "The name of one or more files from which to parse the fragmentation spectra, in any "
+    "of the file formats supported by ProteoWizard. Alternatively, the argument "
+    "may be one or more binary spectrum files produced by a previous run of crux "
+    "tide-search using the store-spectra parameter.");
+  InitArgParam("tide database",
+    "Either a FASTA file or a directory containing a database index created by a previous "
+    "run of crux tide-index.");
+  // **** Tide options ****
+  InitStringParam("decoy-format", "shuffle", "none|shuffle|peptide-reverse|protein-reverse",
+    "Include a decoy version of every peptide by shuffling or reversing the "
+    "target sequence or protein. In shuffle or peptide-reverse mode, each peptide is "
+    "either reversed or shuffled, leaving the N-terminal and C-terminal amino acids in "
+    "place. Note that peptides appear multiple times in the target database are only "
+    "shuffled once. In peptide-reverse mode, palindromic peptides are shuffled. Also, if a "
+    "shuffled peptide produces an overlap with the target or decoy database, then the "
+    "peptide is re-shuffled up to 5 times. Note that, despite this repeated shuffling, "
+    "homopolymers will appear in both the target and decoy database. The protein-reverse "
+    "mode reverses the entire protein sequence, irrespective of the composite peptides.",
+    "Available for tide-index", true);
+  InitStringParam("mods-spec", "C+57.02146",
+    "[[nohtml:Expression for static and variable mass modifications to include. "
+    "Specify a comma-separated list of modification sequences of the form: "
+    "C+57.02146,2M+15.9949,1STY+79.966331,...]][[html:The general form of a modification "
+    "specification has three components, as exemplified by <span style=\"color: red;\">1"
+    "</span><span style=\"color: green;\">STY</span>+<span style=\"color: blue\">79.966331"
+    "</span>.<br>The three components are: [<span style=\"color: red;\">max_per_peptide"
+    "</span>]<span style=\"color: green;\">residues</span>[+/-]<span style-\"color: blue;\">"
+    "mass_change</span><br>In the example, <span style=\"color: red;\">max_per_peptide"
+    "</span> is <span style=\"color: red;\">1</span>, <span style=\"color: green;\">"
+    "residues</span> are <span style=\"color: green;\">STY</span>, and "
+    "<span style=\"color: blue;\">mass_change</span> is <span style=\"color: blue;\">"
+    "+79.966331</span>. To specify a static modification, the number preceding the amino "
+    "acid must be omitted; i.e., <span style=\"color: green;\">C</span>+<span "
+    "style=\"color: blue;\">57.02146</span> specifies a static modification of 57.02146 "
+    "Da to cysteine. Note that Tide allows at most one modification per amino "
+    "acid.  Also, the default modification (C+57.02146) will be added to "
+    "every mods-spec string unless an explicit C+0 is included.]]",
+    "Available for tide-index", true);
+  InitStringParam("nterm-peptide-mods-spec", "",
+    "[[nohtml:Specifies N-terminal static and variable mass modifications on peptides. "
+    "Specify a comma-separated list of N-terminal modification sequences of the form: "
+    "1E-18.0106,C-17.0265]][[html:Specify peptide n-terminal modifications. Like "
+    "--mods-spec, this specification has three components, but with a slightly different "
+    "syntax. The <span style=\"color: red;\">max_per_peptide</span> can be either \"1\", "
+    "in which case it defines a variable terminal modification, or missing, in which case "
+    "the modification is static. The <span style=\"color: green;\">residues</span> field "
+    "indicates which amino acids are subject to the modification, with the reside <span "
+    "style=\"color: green;\">X</span> corresponding to any amino acid. Finally, <span "
+    "style=\"color: blue;\">added_mass</span> is defined as before.]]",
+    "Available for tide-index", true);
+  InitStringParam("cterm-peptide-mods-spec", "",
+    "[[nohtml:Specifies C-terminal static and variable mass modifications on peptides. "
+    "Specify a comma-separated list of C-terminal modification sequences of the form: "
+    "X+21.9819]][[html:Specify peptide c-terminal modifications. See "
+    "nterm-peptide-mods-spec for syntax.]]",
+    "Available for tide-index", true);
+  InitStringParam("cterm-protein-mods-spec", "",
+    "Specifies C-terminal static and variable mass modifications on proteins. "
+    "Specify a comma-separated list of C-terminal protein modification sequences of the form: "
+    ",...",
+    "Available for tide-index", false);
+  InitStringParam("nterm-protein-mods-spec", "",
+    "Specifies N-terminal static and variable mass modifications on proteins. "
+    "Specify a comma-separated list of N-terminal protein modification sequences of the form: "
+    ",...",
+    "Available for tide-index", false);
+  InitStringParam("store-spectra", "",
+    "Specify the name of the file where the binarized fragmentation spectra "
+    "will be stored. Subsequent runs of crux tide-search will execute more quickly if "
+    "provided with the spectra in binary format. The filename is specified relative to "
+    "the current working directory, not the Crux output directory (as specified by "
+    "--output-dir). This option is not valid if multiple input spectrum files are given.",
+    "Available for tide-search", true);
+  InitBoolParam("exact-p-value", false,
+    "Enable the calculation of exact p-values for the XCorr score[[html: as described in "
+    "<a href=\"http://www.ncbi.nlm.nih.gov/pubmed/24895379\">this article</a>]]. Calculation "
+    "of p-values increases the running time but increases the number of identifications at a "
+    "fixed confidence threshold. The p-values will be reported in a new column with header "
+    "\"exact p-value\", and the \"xcorr score\" column will be replaced with a \"refactored "
+    "xcorr\" column. Note that, currently, p-values can only be computed when the "
+    "mz-bin-width parameter is set to its default value. Variable and static mods are allowed "
+    "on non-terminal residues in conjunction with p-value computation, but currently only "
+    "static mods are allowed on the N-terminus, and no mods on the C-terminus.",
+    "Available for tide-search", true);
+  InitStringParam("store-index", "",
+    "When providing a FASTA file as the index, the generated binary index will be stored at "
+    "the given path. This option has no effect if a binary index is provided as the index.",
+    "Available for tide-search", true);
+  InitBoolParam("concat", false,
+    "When set to T, target and decoy search results are reported in a single file, and only "
+    "the top-scoring N matches (as specified via --top-match) are reported for each spectrum, "
+    "irrespective of whether the matches involve target or decoy peptides.",
+    "Available for tide-search", true);
+  InitBoolParam("file-column", true,
+    "Include the file column in tab-delimited output.",
+    "Available for tide-search", true);
+  // Same as remove_precursor_peak and remove_precursor tolerance in Comet
+  InitBoolParam("remove-precursor-peak", false,
+    "If true, all peaks around the precursor m/z will be removed, within a range "
+    "specified by the --remove-precursor-tolerance option.",
+    "Available for tide-search.", true);
+  InitDoubleParam("remove-precursor-tolerance", 1.5, 0, BILLION,
+    "This parameter specifies the tolerance (in Th) around each precursor m/z that is "
+    "removed when the --remove-precursor-peak option is invoked.",
+    "Available for print-processed spectra and tide-search.", true);
+  InitBoolParam("clip-nterm-methionine", false,
+    "When set to T, for each protein that begins with methionine, tide-index will "
+    "put two copies of the leading peptide into the index, with and without the N-terminal "
+    "methionine.",
+    "Available for tide-index.", true);
+  InitBoolParam("allow-dups", false,
+    "Prevent duplicate peptides between the target and decoy databases. When set to \"F\", "
+    "the program keeps all target and previously generated decoy peptides in memory. A shuffled "
+    "decoy will be re-shuffled multiple times to avoid duplication. If a non-duplicated peptide "
+    "cannot be generated, the decoy is skipped entirely. When set to \"T\", every decoy is added to "
+    "the database without checking for duplication. This option reduces the memory requirements "
+    "significantly.",
+    "Available for tide-index.", true);
+  InitBoolParam("use-neutral-loss-peaks", true,
+    "Controls whether neutral loss ions are considered in the search. "
+    "Two types of neutral losses are included and are applied only to "
+    "singly charged b- and y-ions: loss of ammonia (NH3, 17.0086343 Da) "
+    "and H2O (18.0091422). Each neutral loss peak has intensity 1/5 of "
+    "the primary peak.",
+    "Available for tide-search.", true);
+  InitIntParam("max-precursor-charge", 5, 1, BILLION,
+    "The maximum charge state of a spectra to consider in search.",
+    "Available for tide-search.", true);
+  InitBoolParam("peptide-centric-search", false,
+    "Carries out a peptide-centric search. For each peptide the top-scoring spectra "
+    "are reported, in contrast to the standard spectrum-centric search where the top-"
+    "scoring peptides are reported. Note that in this case the \"xcorr rank\" column "
+    "will contain the rank of the given spectrum with respect to the given candidate "
+    "peptide, rather than vice versa (which is the default).",
+    "Available for tide-search.", true);
+  InitIntParam("elution-window-size", 0, 0, 10,
+    "Size of the elution window used in smoothing score in DIA mode. "
+    "Used only with peptide-centric-search if greater than 0. A score of a psms "
+    "centred in the window is substituted by the geometric mean of the scores "
+    "in the window. If windows size is even, then it is increased by 1.",
+    "Available for tide-search.", false);
+  InitBoolParam("skip-decoys", true,
+    "Skips decoys when reading a Tide index.",
+    "Available for read-tide-index", false);
+  InitBoolParam("skip-preprocessing", false,
+    "Skip preprocessing steps on spectra. Default = F.",
+    "Available for tide-search", true);
+  InitStringParam("isotope-error", "",
+                  "List of positive, non-zero integers.",
+                  "Isotope errors to include. "
+                  "Specify a comma-separated list of isotope errors of the form: "
+                  "1,2,3,..."
+                  "Available for tide-search", true);
+  InitIntParam("num-threads", 0, 0, 64,
+               "0=poll CPU to set num threads; else specify num threads directly.",
+               "Available for tide-search tab-delimited files only.", true);
+  /*
+   * Comet parameters
+   */
+  InitArgParam("input spectra",
+    "The name of the file from which to parse the spectra. Valid formats include mzXML, "
+    "mzML, mz5, raw, ms2, and cms2. Files in mzML or mzXML may be compressed with gzip. "
+    "RAW files can be parsed only under windows and if the appropriate libraries were "
+    "included at compile time.");
+  /* Comet - Database */
+  InitArgParam("database_name",
+    "A full or relative path to the sequence database, "
+    "in FASTA format, to search. Example databases include "
+    "RefSeq or UniProt.  The database can contain amino acid "
+    "sequences or nucleic acid sequences. If sequences are "
+    "amino acid sequences, set the parameter \"nucleotide_reading_frame = 0\". "
+    "If the sequences are nucleic acid sequences, you must instruct Comet to "
+    "translate these to amino acid sequences. Do this by setting "
+    "nucleotide_reading_frame\" to a value between 1 and 9.");
+  InitIntParam("decoy_search", 0, 0, 2,
+    "0=no, 1=concatenated search, 2=separate search.",
+    "Available for comet.", true);
+  /* Comet - CPU threads */
+  InitIntParam("num_threads", 0, -64, 64, 
+    "0=poll CPU to set num threads; else specify num threads directly.",
+    "Available for comet.", true);
+  /* Comet - Masses */
+  InitDoubleParam("peptide_mass_tolerance", 3.0, 0, BILLION,
+    "Controls the mass tolerance value.  The mass tolerance "
+    "is set at +/- the specified number i.e. an entered value "
+    "of \"1.0\" applies a -1.0 to +1.0 tolerance. "
+    "The units of the mass tolerance is controlled by the parameter "
+    "\"peptide_mass_units\". ", 
+    "Available for comet.", true);
+  InitIntParam("peptide_mass_units", 0, 0, 2,
+    "0=amu, 1=mmu, 2=ppm.",
+    "Available for comet.", true);
+  InitStringParam("auto_peptide_mass_tolerance", "false", "false|warn|fail",
+    "Automatically estimate optimal value for the peptide_mass_tolerancel parameter "
+    "from the spectra themselves. false=no estimation, warn=try to estimate "
+    "but use the default value in case of failure, fail=try to estimate and "
+    "quit in case of failure.",
+    "Available for comet.", true);
+  InitIntParam("mass_type_parent", 1, 0, 1,
+    "0=average masses, 1=monoisotopic masses.",
+    "Available for comet.", true);
+  InitIntParam("mass_type_fragment", 1, 0, 1,
+    "0=average masses, 1=monoisotopic masses.",
+    "Available for comet.", true);
+  InitIntParam("precursor_tolerance_type", 0, 0, 1,
+    "0=singly charged peptide mass, 1=precursor m/z.",
+    "Available for comet.", true);
+  InitIntParam("isotope_error", 0, 0, 2, 
+    "0=off, 1=on -1/0/1/2/3 (standard C13 error), 2=-8/-4/0/4/8 (for +4/+8 labeling).",
+    "Available for comet.", true);
+  /* Comet - Search enzyme */
+  InitIntParam("search_enzyme_number", 1, 0, BILLION,
+    "Specify a search enzyme from the end of the parameter file.",
+    "Available for comet.", true);
+  InitIntParam("num_enzyme_termini", 2, 1, 9,
+    "valid values are 1 (semi-digested), 2 (fully digested), 8 N-term, 9 C-term.",
+    "Available for comet.", true);
+  InitIntParam("allowed_missed_cleavage", 2, 0, 5,
+    "Maximum value is 5; for enzyme search.",
+    "Available for comet.", true);
+  /* Comet - Fragment ions */
+  InitDoubleParam("fragment_bin_tol", 1.000507, 0, BILLION,
+    "Binning to use on fragment ions.",
+    "Available for comet.", true);
+  InitDoubleParam("fragment_bin_offset", 0.40, 0, 1.0,
+    "Offset position to start the binning (0.0 to 1.0).",
+    "Available for comet.", true);
+  InitStringParam("auto_fragment_bin_tol", "false", "false|warn|fail",
+    "Automatically estimate optimal value for the fragment_bin_tol parameter "
+    "from the spectra themselves. false=no estimation, warn=try to estimate "
+    "but use the default value in case of failure, fail=try to estimate and "
+    "quit in case of failure.",
+    "Available for comet.", true);
+  InitIntParam("theoretical_fragment_ions", 1, 0, 1,
+    "0=default peak shape, 1=M peak only.",
+    "Available for comet.", true);
+  InitIntParam("use_A_ions", 0, 0, 1,
+    "Controls whether or not A-ions are considered in the search (0 - no, 1 - yes).",
+    "Available for comet.", true);
+  InitIntParam("use_B_ions", 1, 0, 1,
+    "Controls whether or not B-ions are considered in the search (0 - no, 1 - yes).",
+    "Available for comet.", true);
+  InitIntParam("use_C_ions", 0, 0, 1,
+    "Controls whether or not C-ions are considered in the search (0 - no, 1 - yes).",
+    "Available for comet.", true);
+  InitIntParam("use_X_ions", 0, 0, 1,
+    "Controls whether or not X-ions are considered in the search (0 - no, 1 - yes).",
+    "Available for comet.", true);
+  InitIntParam("use_Y_ions", 1, 0, 1,
+    "Controls whether or not Y-ions are considered in the search (0 - no, 1 - yes).",
+    "Available for comet.", true);
+  InitIntParam("use_Z_ions", 0, 0, 1,
+    "Controls whether or not Z-ions are considered in the search (0 - no, 1 - yes).",
+    "Available for comet.", true);
+  InitIntParam("use_NL_ions", 1, 0, 1,
+    "0=no, 1= yes to consider NH3/H2O neutral loss peak.",
+    "Available for comet.", true);
+  /* Comet - Output */
+  InitIntParam("output_sqtfile", 0, 0, 1,
+    "0=no, 1=yes  write sqt file.",
+    "Available for comet.", true);
+  InitIntParam("output_txtfile", 1, 0, 1,
+    "0=no, 1=yes  write tab-delimited text file.",
+    "Available for comet.", true);
+  InitIntParam("output_pepxmlfile", 1, 0, 1,
+    "0=no, 1=yes  write pep.xml file.",
+    "Available for comet.", true);
+  InitIntParam("output_percolatorfile", 0, 0, 1,
+    "0=no, 1=yes write percolator file.",
+     "Available for comet.", true);
+  InitIntParam("output_outfiles", 0, 0, 1,
+    "0=no, 1=yes  write .out files.",
+    "Available for comet.", true);
+  InitIntParam("print_expect_score", 1, 0, 1,
+    "0=no, 1=yes to replace Sp with expect in out & sqt.",
+    "Available for comet.", true);
+  InitIntParam("num_output_lines", 5, 1, BILLION,
+    "num peptide results to show.",
+    "Available for comet.", true);
+  InitIntParam("show_fragment_ions", 0, 0, 1,
+    "0=no, 1=yes for out files only.",
+    "Available for comet.", true);
+  InitIntParam("sample_enzyme_number", 1, 0, 10, 
+    "Sample enzyme which is possibly different than the one applied to the search. "
+    "Used to calculate NTT & NMC in pepXML output.",
+    "Available for comet. ", true);
+  /* Comet - mzXML/mzML parameters */
+  InitStringParam("scan_range", "0 0",
+    "Start and scan scan range to search; 0 as first entry ignores parameter.",
+    "Available for comet.", true);
+  InitStringParam("precursor_charge", "0 0",
+    "Precursor charge range to analyze; does not override "
+    "mzXML charge; 0 as first entry ignores parameter.",
+    "Available for comet.", true);
+  InitIntParam("override_charge", 0, 0, 3,
+    "Specifies the whether to override existing precursor charge state information when present "
+    "in the files with the charge range specified by the \"precursor_charge\" parameter.",
+    "Available for comet.", true);  
+  InitIntParam("ms_level", 2, 2, 3, 
+    "MS level to analyze, valid are levels 2 or 3.",
+    "Available for comet. ", true);
+  InitStringParam("activation_method", "ALL", "ALL|CID|ECD|ETD|PQD|HCD|IRMPD",
+    "Specifies which scan types are searched.",
+    "Available for comet. ", true);
+  /* Comet - Misc. parameters */
+  InitStringParam("digest_mass_range", "600.0 5000.0",
+    "MH+ peptide mass range to analyze.",
+    "Available for comet.", true);
+  InitIntParam("num_results", 50, 0, BILLION,
+    "Number of search hits to store internally.",
+    "Available for comet.", true);
+  InitIntParam("skip_researching", 1, 0, 1,
+    "For '.out' file output only, 0=search everything again, 1=don't search if .out exists.",
+    "Available for comet.", true);
+  InitIntParam("max_fragment_charge", 3, 1, 5,
+    "Set maximum fragment charge state to analyze (allowed max 5).",
+    "Available for comet.", true);
+  InitIntParam("max_precursor_charge", 6, 1, 9,
+    "Set maximum precursor charge state to analyze (allowed max 9).",
+    "Available for comet.", true);
+  InitIntParam("nucleotide_reading_frame", 0, 0, 9,
+    "0=proteinDB, 1-6, 7=forward three, 8=reverse three, 9=all six.",
+    "Available for comet.", true);
+  InitIntParam("clip_nterm_methionine", 0, 0, 1,
+    "0=leave sequences as-is; 1=also consider sequence w/o N-term methionine.",
+    "Available for comet.", true);
+  InitIntParam("spectrum_batch_size", 0, 0, BILLION,
+    "Maximum number of spectra to search at a time; 0 to search the entire scan range in one loop.",
+    "Available for comet.", true);
+  InitStringParam("decoy_prefix", "decoy_",
+    "Specifies the prefix of the protein names that indicates a decoy.",
+    "Available for comet.", true);
+  InitStringParam("output_suffix", "",
+    "Specifies the suffix string that is appended to the base output name "
+    "for the pep.xml, pin.xml, txt and sqt output files.",
+    "Available for comet.", true);
+  InitStringParam("mass_offsets", "",
+    "Specifies one or more mass offsets to apply. This value(s) are effectively "
+    "subtracted from each precursor mass such that peptides that are smaller "
+    "than the precursor mass by the offset value can still be matched to the "
+    "respective spectrum.",
+    "Available for comet.", true);
+  /* Comet - Spectral processing */
+  InitIntParam("minimum_peaks", 10, 1, BILLION,
+    "Minimum number of peaks in spectrum to search.",
+    "Available for comet.", true);
+  InitDoubleParam("minimum_intensity", 0, 0, BILLION,
+    "Minimum intensity value to read in.",
+    "Available for comet. ", true);
+  InitIntParam("remove_precursor_peak", 0, 0, 2, 
+    "0=no, 1=yes, 2=all charge reduced precursor peaks (for ETD).",
+    "Available for comet. ", true);
+  InitDoubleParam("remove_precursor_tolerance", 1.5, -BILLION, BILLION, 
+    "+- Da tolerance for precursor removal.",
+    "Available for comet. ", true);
+  InitStringParam("clear_mz_range", "0.0 0.0",
+    "For iTRAQ/TMT type data; will clear out all peaks in the specified m/z range.",
+    "Available for comet.", true);
+  /* Comet - Variable modifications */
+  for (int i = 1; i <= 9; i++) {
+    InitStringParam("variable_mod0" + StringUtils::ToString(i), "0.0 null 0 4 -1 0 0",
+                    "Up to 9 variable modifications are supported; format: "
+                    "\"<mass> <residues> <0=variable/1=binary> <max mods per a peptide>\" "
+                    "e.g. 79.966331 STY 0 3.",
+                    "Available for comet.", true);
+  }
+  InitIntParam("max_variable_mods_in_peptide", 5, 0, BILLION,
+    "Specifies the total/maximum number of residues that can be modified in a peptide.",
+    "Available for comet.", true);
+  InitIntParam("require_variable_mod", 0, 0, 1,
+    "Controls whether the analyzed peptides must contain at least one variable modification.",
+    "Available for comet.", true);
+  /* Comet - Static modifications */
+  InitDoubleParam("add_Cterm_peptide", 0, 0, BILLION,
+    "Specifiy a static modification to the c-terminus of all peptides.",
+    "Available for comet.", true);
+  InitDoubleParam("add_Nterm_peptide", 0, 0, BILLION,
+    "Specify a static modification to the n-terminus of all peptides.",
+    "Available for comet.", true);
+  InitDoubleParam("add_Cterm_protein", 0, 0, BILLION,
+    "Specify a static modification to the c-terminal peptide of each protein.",
+    "Available for comet.", true);
+  InitDoubleParam("add_Nterm_protein", 0, 0, BILLION,
+    "Specify a static modification to the n-terminal peptide of each protein.",
+    "Available for comet.", true);
+  for (char c = 'A'; c <= 'Z'; c++) {
+    string aaString = string(1, c);
+    string aaName = AminoAcidUtil::GetName(c);
+    aaName = aaName.empty() ? "user_amino_acid" : StringUtils::Replace(aaName, " ", "_");
+    InitDoubleParam("add_" + aaString + "_" + aaName,
+                    c != 'C' ? 0 : CYSTEINE_DEFAULT, 0, BILLION,
+                    "Specify a static modification to the residue " + aaString + ".",
+                    "Available for comet.", true);
+  }
+  // **** q-ranker-barista arguments ****
+  InitArgParam("database",
+    "The program requires the FASTA format protein database files against "
+    "which the search was performed. The protein database input may be a "
+    "concatenated database or separate target and decoy databases; the "
+    "latter is supported with the --separate-searches option, described "
+    "below. In either case, Barista distinguishes between target and decoy "
+    "proteins based on the presence of a decoy prefix on the sequence "
+    "identifiers (see the --decoy-prefix option, below). The database can "
+    "be provided in three different ways: (1) as a a single FASTA file "
+    "with suffix \".fa\", \".fsa\" or \".fasta\", (2) as a text file "
+    "containing a list of FASTA files, one per line, or (3) as a directory "
+    "containing multiple FASTA files (identified via the filename suffixes "
+    "\".fa\", \".fsa\" or \".fasta\")."); 
+  InitArgParam("search results",
+    "Search results in the [[html:<a href=\"../file-formats/txt-format.html\">]]tab-delimited text format"
+    "[[html:</a>]] produced by Crux or in [[html:<a href=\"../file-formats/sqt-format.html\">]]SQT format[[html:</a>]]. "
+    "Like the spectra, the search results can be provided "
+    "as a single file, a list of files or a directory of files. Note, however, that the "
+    "input mode for spectra and for search results must be the same; i.e., if you provide "
+    "a list of files for the spectra, then you must also provide a list of files "
+    "containing your search results. When the MS2 files and tab-delimited text files are "
+    "provided via a file listing, it is assumed that the order of the MS2 files matches "
+    "the order of the tab-delimited files. Alternatively, when the MS2 files and "
+    "tab-delimited files are provided via directories, the program will search for pairs of "
+    "files with the same root name but different extensions (\".ms2\" and \".txt\").");
+  // **** q-ranker options. ****
+  InitBoolParam("skip-cleanup", false, 
+    "Analysis begins with a pre-processsing step that creates a "
+    "set of lookup tables which are then used during training. Normally, "
+    "these lookup tables are deleted at the end of the analysis, "
+    "but setting this option to T prevents the deletion of these tables. "
+    "Subsequently, analyses can be repeated more efficiently "
+    "by specifying the --re-run option.", 
+    "Available for q-ranker and barista.", true);
+  InitStringParam("re-run", "",
+    "Re-run a previous analysis using a previously computed set of "
+    "lookup tables. For this option to work, the --skip-cleanup option must have "
+    "been set to true when the program was run the first time.",
+    "Available for q-ranker and barista.", true);
+  InitBoolParam("use-spec-features", true, 
+    "Use an enriched feature set, including separate features for each ion type.",
+    "Available for q-ranker and barista.", true);
+  InitStringParam("separate-searches", "",
+    "If the target and decoy searches were run separately, rather than "
+    "using a concatenated database, then the program will assume that the "
+    "database search results provided as a required argument are from the "
+    "target database search. This option then allows the user to specify "
+    "the location of the decoy search results. Like the required arguments, "
+    "these search results can be provided as a single file, a list of files "
+    "or a directory. However, the choice (file, list or directory) must be "
+    "consistent for the MS2 files and the target and decoy tab-delimited files. Also, "
+    "if the MS2 and tab-delimited files are provided in directories, then Q-ranker "
+    "will use the MS2 filename (foo.ms2) to identify corresponding target "
+    "and decoy tab-delimited files with names like foo*.target.txt and "
+    "foo*.decoy.txt. This naming convention allows the target and decoy txt "
+    "files to reside in the same directory.",
+    "Available for q-ranker and barista.", true);
+  //**** Barista and QRanker options. ******
+  InitBoolParam("list-of-files", false, 
+    "Specify that the search results are provided as lists of files, rather than as "
+    "individual files.",
+    "Available for barista and percolator.", true);
+  InitStringParam("optimization", "protein", "protein|peptide|psm",
+     "Specifies whether to do optimization at the protein, peptide or psm level.",
+     "Available for barista.", true);
+  /* analyze-matches parameter options */
+  InitArgParam("target input",
+    "One or more files, each containing a collection of peptide-spectrum matches (PSMs) "
+    "in [[html:<a href=\"../file-formats/txt-format.html\">]]tab-delimited text[[html:</a>]], [[html:<a "
+    "href=\"http://tools.proteomecenter.org/wiki/index.php?title=Formats:pepXML\">]]PepXML"
+    "[[html:</a>]], or [[html:<a href=\"http://www.psidev.info/mzidentml\">]]mzIdentML"
+    "[[html:</a>]] format. In tab-delimited text format, only the specified score column "
+    "is required. However if --estimation-method is tdc, then the columns \"scan\" and "
+    "\"charge\" are required, as well as \"protein ID\" if the search was run with "
+    "concat=F. Furthermore, if the --estimation-method is specified to peptide-level " 
+    "is set to T, then the column "
+    "\"peptide\" must be included, and if --sidak is set to T, then the \"distinct "
+    "matches/spectrum\" column must be included.[[html:<br>Note that multiple files can "
+    "also be provided either on the command line or using the --list-of-files option.<br>"
+    "Decoys can be provided in two ways: either as a separate file or embedded within the "
+    "same file as the targets. Crux will first search the given file for decoys using a "
+    "prefix (specified via --decoy-prefix) on the protein name. If no decoys are found, "
+    "then Crux will search for decoys in a separate file. The decoy file name is constructed "
+    "from the target file name by replacing \"target\" with \"decoy\". For example, if "
+    "tide-search.target.txt is provided as input, then Crux will search for a corresponding "
+    "file named \"tide-search.decoy.txt.\"<br>Note that if decoys are provided in a separate "
+    "file, then assign-confidence will first carry out a target-decoy competition, "
+    "identifying corresponding pairs of targets and decoys and eliminating the one with "
+    "the worse score. In this case, the column/tag called \"delta_cn\" will be eliminated "
+    "from the output.]]");
+  InitDoubleParam("pi-zero", 1.0, 0, 1, 
+    "The estimated percent of target scores that are drawn from the "
+    "null distribution.",
+    "Used by assign-confidence, percolator and q-ranker", false);
+  InitStringParam("estimation-method", "tdc", "mix-max|tdc|peptide-level",
+    "Specify the method used to estimate q-values.  The mix-max procedure or target-decoy "
+    "competition apply to PSMs. The peptide-level option eliminates any PSM for which there "
+    "exists a better scoring PSM involving the same peptide, and then uses decoys to "
+    "assign confidence estimates.",
+    "Used by assign-confidence.", true);      
+  InitBoolParam("sidak", false, 
+    "Adjust the score using the Sidak adjustment and reports them in a new column in the "
+    "output file. Note that this adjustment only makes sense if the given scores are "
+    "p-values, and that it requires the presence of the \"distinct matches/spectrum\" "
+    "feature for each PSM.",
+    "Used by assign-confidence.", true);      
+  InitStringParam("score", "",
+    "Specify the column (for tab-delimited input) or tag (for XML input) "
+    "used as input to the q-value estimation procedure. If this parameter is unspecified, "
+    "then the program searches for \"xcorr score\", \"evalue\" (comet), "
+    "\"exact p-value\" score fields in this order in the input file. ",
+    "Used by assign-confidence.", true);
+  InitBoolParam("combine-charge-states", false,
+    "Specify this parameter to T in order to combine charge states with peptide sequences"
+    "in peptide-centric search. Works only if estimation-method = peptide-level.",
+    "Used by assign-confidence.", true);
+  InitBoolParam("combine-modified-peptides", false,
+    "Specify this parameter to T in order to treat peptides carrying different or "
+    "no modifications as being the same. Works only if estimation = peptide-level.",
+    "Used by assign-confidence.", true);
+  InitStringParam("percolator-intraset-features", "F",
+    "Set a feature for percolator that in later versions is not an option.",
+    "Shouldn't be variable; hide from user.", false);
+  /* Cascade-Search parameters */
+  InitDoubleParam("q-value-threshold", 0.01, 0, 1.0,
+    "The q-value threshold used by cascade search. Each spectrum identified in one search "
+    "with q-value less than this threshold will be excluded from all subsequent searches.",
+    "Used by Cascade-Search", true);
+  InitArgParam("database-series",
+    "A comma-separated list of databases, each generated by tide-index. "
+    "Cascade-search will search the given spectra against these databases in the given order.");
+  /*Subtract-index parameters*/
+  InitArgParam("tide index 1", "A peptide index produced using tide-index");
+  InitArgParam("tide index 2", "A second peptide index, to be subtracted from the first index.");
+  InitArgParam("output index", "A new peptide index containing all peptides that occur in the"
+    "first index but not the second.");
+//  InitArgParam("index name", "output tide index");
+  // **** predict-peptide-ions options. ****
+  InitStringParam("primary-ions", "by", "a|b|y|by|bya",
+    "Predict the specified primary ion series. 'a' indicates a-ions only, 'b' indicates "
+    "b-ions only, 'y' indicates y-ions only, 'by' indicates both b and y, 'bya' "
+    "indicates b, y, and a.",
+    "Only available for crux-predict-peptide-ions. Set automatically to "
+    "'by' for searching.", true);
+  InitBoolParam("precursor-ions", false,
+    "Predict the precursor ions, and all associated ions (neutral losses, multiple "
+    "charge states) consistent with the other specified options.",
+    "Only available for crux-predict-peptide-ions.", true);
+  InitIntParam("isotope", 0, 0, 2,
+    "Predict the given number of isotope peaks (0|1|2).",
+    "Only available for crux-predict-peptide-ion.  Automatically set to "
+    "0 for Sp scoring and 1 for xcorr scoring.", true);
+  InitBoolParam("flanking", false, 
+    "Predict flanking peaks for b- and y ions.",
+    "Only available for crux-predict-peptide-ion.", true);
+  InitStringParam("max-ion-charge", "peptide",
+    "Predict theoretical ions up to max charge state (1, 2, ... ,6) or up to the charge state "
+    "of the peptide (\"peptide\"). If the max-ion-charge is greater than the "
+    "charge state of the peptide, then the maximum is the peptide charge. ",
+    "Available for predict-peptide-ions and search-for-xlinks. "
+    "Set to 'peptide' for search.", true);
+  InitIntParam("nh3", 0, -100, BILLION, 
+    "Include among the predicted peaks b/y ions with up to n losses of nh3. For example, "
+    "for --nh3 2, predict a peak for each b- and y-ion with the loss of one nh3 group and "
+    "predict a second peak for each b- and y-ion with the loss of two nh3 groups. These "
+    "peaks will have 1 and 2, respectively, in the NH3 column of the output.",
+    "Only available for crux-predict-peptide-ions.", true);
+  InitIntParam("h2o", 0, -100, BILLION,
+    "Include in the predicted peaks, b/y ions with the loss of 1 to n water molecules. See "
+    "--nh3 for an example.",
+    "Only available for crux-predict-peptide-ions.", true);
+  // ***** spectral-counts aguments *****
+  InitArgParam("input PSMs",
+    "A PSM file in either tab delimited text format (as produced by percolator, "
+    "q-ranker, or barista) or pepXML format.");
+  // also uses "protein-database"
+  // ***** spectral-counts options *****
+  InitStringParam("protein-database", "",
+    "The name of the file in FASTA format.",
+    "Option for spectral-counts", true);
+  InitStringParam("measure", "NSAF", "RAW|NSAF|dNSAF|SIN|EMPAI",
+    "Type of analysis to make on the match results: "
+    "(RAW|NSAF|dNSAF|SIN|EMPAI). With exception of the RAW metric, the database of "
+    "sequences need to be provided using --protein-database.", 
+    "Available for spectral-counts.  RAW is raw counts, "
+    "NSAF is Normalized Spectral Abundance Factor, "
+    "dNSAF is Distributed Spectral Abundance Factor, "
+    "SIN is Spectral Index Normalized and EMPAI is "
+    "Exponentially Modified Protein Abundance Index", true);
+  InitBoolParam("unique-mapping", false,
+    "Ignore peptides that map to multiple proteins.",
+    "Available for spectral-counts.", true);
+  InitStringParam("quant-level", "protein", "protein|peptide",
+    "Quantification at protein or peptide level.",
+    "Available for spectral-counts and either NSAF and SIN.", true);
+  InitStringParam("parsimony", "none", "none|simple|greedy",
+    "Perform a parsimony analysis on the proteins, and report a \"parsimony rank\" column "
+    "in the output file. This column contains integers indicating the protein's rank in a "
+    "list sorted by spectral counts. If the parsimony analysis results in two proteins "
+    "being merged, then their parsimony rank is the same. In such a case, the rank is "
+    "assigned based on the largest spectral count of any protein in the merged meta-protein. "
+    "The \"simple\" parsimony algorithm only merges two proteins A and B if the peptides "
+    "identified in protein A are the same as or a subset of the peptides identified in "
+    "protein B. The \"greedy\" parsimony algorithm does additional merging, using the "
+    "peptide q-values to greedily assign each peptide to a single protein.",
+    "Available for spectral-counts.", true);
+  InitStringParam("threshold-type", "qvalue", "none|qvalue|custom",
+    "Determines what type of threshold to use when filtering matches. none : read all "
+    "matches, qvalue : use calculated q-value from percolator or q-ranker, custom : use "
+    "--custom-threshold-name and --custom-threshold-min parameters.",
+    "used for crux spectral-counts", true);
+  InitDoubleParam("threshold", 0.01,
+    "Only consider PSMs with a threshold value. By default, q-values "
+    "are thresholded using a specified threshold value. This behavior can be "
+    "changed using the --custom-threshold and --threshold-min "
+    "parameters.",
+    "Available for spectral-counts. All PSMs with higher (or lower) than "
+    "this will be ignored.", true);
+  InitStringParam("custom-threshold-name", "",
+    "Specify which field to apply the threshold to. The direction of the threshold "
+    "(<= or >=) is governed by --custom-threshold-min. By default, the threshold "
+    "applies to the q-value, specified by \"percolator q-value\", \"q-ranker q-value\", "
+    "\"decoy q-value (xcorr)\", or \"barista q-value\".",
+    "Available for spectral-counts.", true);
+  InitBoolParam("custom-threshold-min", true,
+    "When selecting matches with a custom threshold, custom-threshold-min determines "
+    "whether to filter matches with custom-threshold-name values that are greater-than or "
+    "equal (F) or less-than or equal (T) than the threshold.",
+    "Available for spectral-counts.", true);
+  InitStringParam("input-ms2", "",
+    "MS2 file corresponding to the psm file. Required to measure the SIN. Ignored for "
+    "NSAF, dNSAF and EMPAI.",
+    "Available for spectral-counts with measure=SIN.", true);
+  InitBoolParam("mzid-use-pass-threshold", false,
+    "Use mzid's passThreshold attribute to filter matches.",
+    "Used when parsing mzIdentML files.", true);
+  // ***** static mods *****
+  for (char c = 'A'; c <= 'Z'; c++) {
+    double deltaMass = (c != 'C') ? 0 : CYSTEINE_DEFAULT;
+    bool visible = (c != 'B' && c != 'J' && c != 'O' && c != 'U' && c != 'X' && c != 'Z');
+    InitDoubleParam(string(1, c), deltaMass,
+      "Change the mass of all amino acids '" + string(1, c) + "' by the "
+      "given amount.", "", visible);
+  }
+  /* psm-convert options */
+  InitStringParam("input-format", "auto", "auto|tsv|sqt|pepxml|mzidentml",
+    "Legal values are auto, tsv, sqt, pepxml or mzidentml format.",
+    "option, for psm-convert", true);
+  InitBoolParam("distinct-matches", true,
+    "Whether matches/ion are distinct (as opposed to total).",
+    "option, for psm-convert.", true);
+  /* get-ms2-spectrum options */
+  InitBoolParam("stats", false, 
+    "Rather than the spectrum, output summary statistics to standard output. Each statistic "
+    "is placed on a separate line, in the format <name>:<value> (e.g. \"TIC:1000.0\")."
+    "[[html:<br>The following statistics are reported for the entire spectrum:<ul><li>"
+    "Precursor m/z</li><li>Total Ion Current</li><li>Base Peak Intensity</li><li>Number of "
+    "peaks</li><li>Minimum m/z</li><li>Maximum m/z</li></ul>In addition, for each possible "
+    "spectrum charge state, the following statistics are reported:<ul><li>Charge state</li>"
+    "<li>Neutral mass</li><li>Charged mass</li><li>M+H+ mass</li></ul>]]",
+    "Available only for crux-get-ms2-spectrum.  Does not affect contents "
+    "of the output file.", true);
+
+  InitBoolParam("write-weibull-points", false, 
+    "write out the weibull training points for the" 
+    "spectrum,charge", "Available for crux search-for-xlinks", true);
+
+  // **** xlink-predict-peptide-ions options ****
+  InitArgParam("peptide A",
+    "The sequence of peptide A.");
+  InitArgParam("peptide B",
+    "The sequence of peptide B.");
+  InitArgParam("pos A",
+    "Position of cross-link on peptide A");
+  InitArgParam("pos B",
+    "Position of cross-link on peptide B");
+  InitBoolParam("print-theoretical-spectrum", false,
+    "Print the theoretical spectrum",
+    "Available for xlink-predict-peptide-ions.", true);
+  InitBoolParam("use-old-xlink", true /* Turn to false later */,
+    "Use the old version of xlink-searching algorithm. When false, a new version of the "
+    "code is run. The new version supports variable modifications and can handle more "
+    "complex databases. This new code is still in development and should be considered a "
+    "beta release.",
+    "Available for search-for-xlinks program.", true);
+  // **** xlink-score-spectrum options ****
+  InitStringParam("xlink-score-method", "composite", "composite|modification|concatenated",
+    "Score method for xlink {composite, modification, concatenated}.",
+    "Available for xlink-score-spectrum.", true);
+  // **** search-xlink options ****
+  InitStringParam("isotope-windows", "0",
+    "Provides a list of isotopic windows to search. For example, -1,0,1 will search in "
+    "three disjoint windows: (1) precursor_mass - neutron_mass +/- window, (2) precursor_mass "
+    "+/- window, and (3) precursor_mass + neutron_mass +/- window. The window size is defined "
+    "from the precursor-window and precursor-window-type parameters. This option is only "
+    "available when use-old-xlink=F.",
+    "Used for crux search-for-xlinks", true);
+
+  InitIntParam("xlink-top-n", 250, 0, BILLION,
+               "Top-n open-mod peptides to consider in the second pass, value of 0 will search all candiates.",
+               "Available for crux search-for-xlinks",
+               true);
+
+  InitBoolParam("xlink-print-db", false,
+    "Prints out the generated database of xlink products to the file xlink_peptides.txt in "
+    "the output directory.",
+    "Used for testing the candidate generatation.", false);
+  InitBoolParam("require-xlink-candidate", false,
+     "If there is no cross-link candidate found, then don't bother looking for linear, "
+     "self-loop, and dead-link candidates.",
+     "Available for crux search-for-xlinks program.", true);
+  
+  InitBoolParam("xlink-use-ion-cache", false,
+		"Use an ion cache for the xlinkable peptides",
+		"May not be scalable for large databases", false);
+
+  InitBoolParam("xlink-include-linears", true, 
+    "Include linear peptides in the search.",
+    "Available for crux search-for-xlinks program.", true);
+  InitBoolParam("xlink-include-deadends", true, 
+    "Include dead-end peptides in the search.",
+    "Available for crux search-for-xlinks program.", true);
+  InitBoolParam("xlink-include-selfloops", true, 
+    "Include self-loop peptides in the search.",
+    "Available for crux search-for-xlinks program.", true);
+  InitBoolParam("xlink-include-intra", true,
+    "Include intra-protein cross-link candiates within the search.",
+    "Available for crux search-for-xlinks program.", true);
+  InitBoolParam("xlink-include-inter", true,
+    "Include inter-protein cross-link candidates within the search.",
+    "Available for crux search-for-xlinks program.", true);
+  InitBoolParam("xlink-include-inter-intra", true,
+    "Include crosslink candidates that are both inter and intra.",
+    "Available for crux search-for-xlinks program.", true);
+  InitStringParam("xlink-prevents-cleavage", "K",
+    "List of amino acids for which the cross-linker can prevent cleavage. This option is "
+    "only available when use-old-xlink=F.",
+    "Available for search-for-xlinks program.", true);
+  InitIntParam("max-xlink-mods", 255 , 0, BILLION,
+    "Specify the maximum number of modifications allowed on a crosslinked peptide. This "
+    "option is only available when use-old-xlink=F.",
+    "Available for crux search-for-xlinks", true);
+  InitDoubleParam("precursor-window-weibull", 20.0, 0, 1e6, 
+    "Search decoy peptides within +/- precursor-window-weibull of the precursor mass. "
+    "The resulting scores are used only for fitting the Weibull distribution",
+    "Available for crux search-for-xlinks. ", true);
+  InitStringParam("precursor-window-type-weibull", "mass", "mass|mz|ppm",
+    "Window type to use in conjunction with the precursor-window-weibull parameter.",
+    "Available for crux search-for-xlinks", true);
+  InitIntParam("min-weibull-points", 4000, 1, BILLION,
+    "Keep shuffling and collecting XCorr scores until the minimum number of points for "
+    "weibull fitting (using targets and decoys) is achieved.",
+    "Available for crux search-for-xlinks", true);
+  InitArgParam("link sites",
+    "A comma delimited list of the amino acids to allow cross-links with. For example, "
+    "\"A:K,A:D\" means that the cross linker can attach A to K or A to D. Cross-links "
+    "involving the N-terminus of a protein can be specified as a link site by using "
+    "\"nterm\". For example, \"nterm:K\" means that a cross-link can attach a protein's "
+    "N-terminus to a lysine.");
+  InitArgParam("link mass",
+    "The mass modification of the linker when attached to a peptide.");
+  /* hardklor parameters */
+  InitStringParam("hardklor-algorithm", "version1", "basic|version1|version2",
+    "Determines which spectral feature detection algorithm to use. Different results are "
+    "possible with each algorithm, and there are pros and cons to each.[[html: There are "
+    "three algorithms to choose from:<ul><li>basic – Performs unoptimized "
+    "deconvolution and is provided for legacy purposes only.</li><li>version1 – "
+    "Uses the optimizations developed during the 1.0+ series. It is very accurate, but has "
+    "limited sensitivity, and moderate speed improvements.</li><li>version2 – Uses "
+    "the optimizations developed for version 2.0+. It is highly sensitive, but less "
+    "accurate for very low abundance features, and performs exceptionally fast.</li></ul>]]",
+    "Available for crux hardklor", true);
+  InitStringParam("averagine-mod", "",
+    "Defines alternative averagine models in the analysis that incorporate additional "
+    "atoms and/or isotopic enrichments. Modifications are represented as text strings. "
+    "Inclusion of additional atoms in the model is done using by entering an atomic "
+    "formula, such as: PO2 or Cl. Inclusion of isotopic enrichment to the model is done by "
+    "specifying the percent enrichment (as a decimal) followed by the atom being enriched "
+    "and an index of the isotope. For example, 0.75H1 specifies 75% enrichment of the first "
+    "heavy isotope of hydrogen. In other words, 75% deuterium enrichment. Two or more "
+    "modifications can be combined into the same model, and separated by spaces: B2 0.5B1",
+    "Available for crux hardklor", true);
+  InitIntParam("boxcar-averaging", 0, 0, BILLION,
+    "Boxcar averaging is a sliding window that averages n adjacent spectra prior to feature "
+    "detection. Averaging generally improves the signal-to-noise ratio of features in the "
+    "spectra, as well as improving the shape of isotopic envelopes. However, averaging will "
+    "also change the observed peak intensities. Averaging with too wide a window will "
+    "increase the occurrence of overlapping features and broaden the chromatographic "
+    "profiles of observed features. The number specified is the total adjacent scans to be "
+    "combined, centered on the scan being analyzed. Therefore, an odd number is recommended "
+    "to center the boxcar window. For example, a value of 3 would produce an average of the "
+    "scan of interest, plus one scan on each side. A value of 0 disables boxcar averaging.",
+    "Available for crux hardklor", true);
+  InitIntParam("boxcar-filter", 0, 0, BILLION,
+    "This parameter is only functional when boxcar-averaging is used. The filter will "
+    "remove any peaks not seen in n scans in the boxcar window. The effect is to reduce "
+    "peak accumulation due to noise and reduce chromatographic broadening of peaks. Caution "
+    "should be used as over-filtering can occur. The suggested number of scans to set for "
+    "filtering should be equal to or less than the boxcar-averaging window size. A value of "
+    "0 disables filtering.",
+    "Available for crux hardklor", true);
+  InitDoubleParam("boxcar-filter-ppm", 10.0, 0.0, BILLION,
+    "This parameter is only functional when boxcar-filter is used. The value specifies the "
+    "mass tolerance in ppm for declaring a peak the same prior to filtering across all "
+    "scans in the boxcar window.",
+    "Available for crux hardklor", true);
+  InitBoolParam("centroided", false,
+    "Indicates whether the data contain profile or centroided peaks.",
+    "Available for crux hardklor", true);
+  InitStringParam("cdm", "Q", "B|F|P|Q|S",
+    "Choose the charge state determination method.[[html: There are five methods to "
+    "choose from:<ul><li>B – Basic method, assume all charge states are possible."
+    "</li><li>F – Fast Fourier transform.</li><li>P – Patterson algorithm.</li>"
+    "<li>Q – QuickCharge method, uses inverse peak distances.</li><li>S – "
+    "Senko method, or combined Fast Fourier Transform and Patterson algorithm.</li></ul>]]",
+    "Available for crux hardklor", true);
+  InitIntParam("min-charge", 1, 1, BILLION,
+    "Specifies the minimum charge state to allow when finding spectral features. It is "
+    "best to set this value to the lowest assumed charge state to be present. If set higher "
+    "than actual charge states that are present, those features will not be identified or "
+    "incorrectly assigned a different charge state and mass.",
+    "Available for crux hardklor", true);
+  InitIntParam("max-charge", 5, 1, BILLION,
+    "Specifies the maximum charge state to allow when finding spectral features. It is "
+    "best to set this value to a practical number (i.e. do not set it to 20 when doing a "
+    "tryptic shotgun analysis). If set higher than actual charge states that are present, "
+    "the algorithm will perform significantly slower without any improvement in results.",
+    "Available for crux hardklor", true);
+  InitDoubleParam("corr", 0.85, 0, 1.0, 
+    "Sets the correlation threshold (cosine similarity) for accepting each predicted "
+    "feature.",
+    "Available for crux hardklor", true);
+  InitIntParam("depth", 3, 1, BILLION,
+    "Sets the depth of combinatorial analysis. For a given set of peaks in a spectrum, "
+    "search for up to this number of combined peptides that explain the observed peaks. "
+    "The analysis stops before depth is reached if the current number of deconvolved "
+    "features explains the observed peaks with a correlation score above the threshold "
+    "defined with the correlation parameter.",
+    "Available for crux hardklor", true);
+  InitBoolParam("distribution-area", false,
+    "When reporting each feature, report abundance as the sum of all isotope peaks. The "
+    "value reported is the estimate of the correct peak heights based on the averagine "
+    "model scaled to the observed peak heights.",
+    "Available for crux hardklor", true);
+  InitStringParam("hardklor-data-file", "",
+    "Specifies an ASCII text file that defines symbols for the periodic table.",
+    "Available for crux hardklor", true);
+  InitStringParam("instrument", "fticr", "fticr|orbitrap|tof|qit",
+    "Indicates the type of instrument used to collect data. This parameter, combined with "
+    "the resolution parameter, define how spectra will be centroided (if you provide "
+    "profile spectra) and the accuracy when aligning observed peaks to the models.",
+    "Available for crux hardklor", true);
+  InitStringParam("isotope-data-file", "",
+    "Specifies an ASCII text file that can be read to override the natural isotope "
+    "abundances for all elements.",
+    "Available for crux hardklor", true);
+  InitIntParam("max-features", 10, 1, BILLION,
+    "Specifies the maximum number of models to build for a set of peaks being analyzed. "
+    "Regardless of the setting, the number of models will never exceed the number of peaks "
+    "in the current set. However, as many of the low abundance peaks are noise or tail ends "
+    "of distributions, defining models for them is detrimental to the analysis.",
+    "Available for crux hardklor", true);
+  InitIntParam("mzxml-filter", 1, 1, 2,
+    "Filters the spectra prior to analysis for the requested MS/MS level. For example, if "
+    "the data contain MS and MS/MS spectra, setting mzxml-filter = 1 will analyze only the "
+    "MS scan events. Setting mzxml-filter = 2 will analyze only the MS/MS scan events.",
+    "Available for crux hardklor", true);
+  InitDoubleParam("mz-max", 0, 0, 10000,
+    "Constrains the search in each spectrum to signals below this value in Thomsons. "
+    "Setting to 0 disables this feature.",
+    "Available for crux hardklor", true);
+  InitDoubleParam("mz-min", 0, 0, 10000,
+    "Constrains the search in each spectrum to signals above this value in Thomsons. "
+    "Setting to 0 disables this feature.",
+    "Available for crux hardklor", true);
+  InitDoubleParam("mz-window", 4.0, 1.0, 20.0,
+    "Only used when algorithm = version1. Defines the maximum window size in Thomsons to "
+    "analyze when deconvolving peaks in a spectrum into features.",
+    "Available for crux hardklor", true);
+  InitDoubleParam("resolution", 100000, 1, BILLION,
+    "Specifies the resolution of the instrument at 400 m/z for the data being analyzed.",
+    "Available for crux hardklor", true);
+  InitIntParam("scan-range-max", 0, 0, BILLION,
+    "Used to restrict analysis to spectra with scan numbers below this parameter value. "
+    "A value of 0 disables this feature.",
+    "Available for crux hardklor", true);
+  InitIntParam("scan-range-min", 0, 0, BILLION,
+    "Used to restrict analysis to spectra with scan numbers above this parameter value. "
+    "A value of 0 disables this feature.",
+    "Available for crux hardklor", true);
+  InitIntParam("sensitivity", 2, 0, 3,
+    "Set the sensitivity level. There are four levels: 0 (low), 1 (moderate), "
+    "2 (high), and 3 (max). Increasing the sensitivity will increase computation time, "
+    "but will also yield more isotope distributions.",
+    "Available for crux hardklor", true);
+  InitDoubleParam("signal-to-noise", 1.0, 0.0, BILLION,
+    "Filters spectra to remove peaks below this signal-to-noise ratio prior to finding "
+    "features.",
+    "Available for crux hardklor", true);
+  InitIntParam("smooth", 0, 0, 21,
+    "Uses Savitzky-Golay smoothing on profile peak data prior to centroiding the spectra. "
+    "This parameter is recommended for low resolution spectra only. Smoothing data causes "
+    "peak depression and broadening. Only use odd numbers for the degree of smoothing (as "
+    "it defines a window centered on each data point). Higher values will produce smoother "
+    "peaks, but with greater depression and broadening. Setting this parameter to 0 disables "
+    "smoothing.",
+    "Available for crux hardklor", true);
+  InitDoubleParam("sn-window", 250.0, 0.0, BILLION,
+    "Set the signal-to-noise window length (in m/z). Because noise may "
+    "be non-uniform across a spectrum, this value adjusts the segment size "
+    "considered when calculating a signal-over-noise ratio.",
+    "Available for crux hardklor", true);
+  InitBoolParam("static-sn", true,
+    "Applies the lowest noise threshold of any sn_window across the entire mass range for a "
+    "spectrum. Setting this parameter to 0 turns off this feature, and different noise "
+    "thresholds will be used for each local mass window in a spectrum.",
+    "Available for crux hardklor", true);
+  InitBoolParam("hardklor-xml-output", false,
+    "Output XML instead of tab-delimited text.",
+    "Available for crux hardklor", false);
+  /* bullseye parameters */
+  InitArgParam("MS1 spectra",
+    "The name of a file from which to parse high-resolution spectra of intact peptides. "
+    "The file may be in MS1 (.ms1), binary MS1 (.bms1), compressed MS1 (.cms1), or "
+    "mzXML (.mzXML) format. Bullseye will search for PPIDs in these spectra.");
+  InitArgParam("MS2 spectra",
+    "The name of a file from which to parse peptide fragmentation spectra. The file may "
+    "be in MS2 (.ms2), binary MS2 (.bms2), compressed MS2 (.cms2) or mzXML (.mzXML) format. "
+    "Bullseye will assign high-resolution precursor masses to these spectra.");
+  InitStringParam("hardklor-file", "",
+    "Input hardklor file into bullseye",
+    "Hidden option for crux bullseye.", false);
+  InitDoubleParam("max-persist", 2.0, 0, BILLION,
+    "Ignore PPIDs that persist for longer than this length of time in the MS1 spectra. The "
+    "unit of time is whatever unit is used in your data file (usually minutes). These PPIDs "
+    "are considered contaminants.",
+    "Available for crux bullseye", true);
+  InitBoolParam("exact-match", false, 
+    "When true, require an exact match (as defined by --exact-tolerance) between the "
+    "center of the precursor isolation window in the MS2 scan and the base isotopic "
+    "peak of the PPID. If this option is set to false and no exact match is observed, "
+    "then attempt to match using a wider m/z tolerance. This wider tolerance is calculated "
+    "using the PPID's monoisotopic mass and charge (the higher the charge, the smaller "
+    "the window).",
+    "Available for crux bullseye", true);
+  InitIntParam("gap-tolerance", 1, 0, BILLION,
+    "Allowed gap size when checking for PPIDs across consecutive MS1 scans.",
+    "Available for crux bullseye", true);
+  InitDoubleParam("bullseye-min-mass", 600, 0, BILLION,
+    "Only consider PPIDs above this minimum mass in daltons.",
+    "Available for crux bullseye", true);
+  InitDoubleParam("bullseye-max-mass", 8000, 1, BILLION, 
+    "Only consider PPIDs below this maximum mass in daltons.",
+    "Available for crux bullseye", true);
+  InitDoubleParam("exact-tolerance", 10.0, 0, BILLION,
+    "Set the tolerance (+/-ppm) for --exact-match.",
+    "Available for crux bullseye", true);
+  InitDoubleParam("persist-tolerance", 10.0, 0, BILLION,
+    "Set the mass tolerance (+/-ppm) for finding PPIDs in consecutive MS1 scans.",
+    "Available for crux bullseye", true);
+  InitIntParam("scan-tolerance", 3, 0, BILLION,
+    "Total number of MS1 scans over which a PPID must be observed to be considered real. "
+    "Gaps in persistence are allowed by setting --gap-tolerance.",
+    "Available for crux bullseye", true);
+  InitDoubleParam("retention-tolerance", 0.5, 0, BILLION,
+    "Set the tolerance (+/-units) around the retention time over which a PPID can be "
+    "matches to the MS2 spectrum. The unit of time is whatever unit is used in your data "
+    "file (usually minutes).",
+    "Available for crux bullseye", true);
+  InitStringParam("spectrum-format", "", "|ms2|bms2|cms2|mgf",
+    "The format to write the output spectra to. If empty, the spectra will be "
+    "output in the same format as the MS2 input.",
+    "Available for crux bullseye", true);
+  /* crux-util parameters */
+  InitBoolParam("ascending", true,
+    "Sort in ascending (T) or descending (F) order.",
+    "Available for sort-by-column", true);
+  InitArgParam("tsv file",
+    "A tab-delimited file, with column headers in the first row. Use \"-\" to read from "
+    "standard input.");
+  InitStringParam("delimiter", "tab",
+    "Specify the input and output delimiter to use when processing the "
+    "delimited file.  The argument can be either a single character or "
+    "the keyword 'tab.'",
+    "Available for the delimited utility programs.", true);
+  InitArgParam("column names",
+    "A comma-delimited list of column names.");
+  InitArgParam("column name",
+    "A column name.");
+  InitArgParam("column value",
+    "A cell value for a column.");
+  InitBoolParam("header", true,
+    "Print the header line of the file, in addition to the columns that match.",
+    "Available for crux extract-columns and extract-rows", true);
+  InitStringParam("column-type", "string", "int|real|string",
+    "Specifies the data type of the column, either an integer (int), a floating point "
+    "number (real), or a string.",
+    "Available for crux extract-rows", true);
+  InitStringParam("comparison", "eq", "eq|gt|gte|lt|lte|neq",
+    "Specify the operator that is used to compare an entry in the specified column to the "
+    "value given on the command line.[[html: Legal values are as follows:<ul><li>eq – "
+    "The two values are equal</li><li>lt – The file value is less than the argument "
+    "value</li><li>lte – The file value is less than or equal to the argument value"
+    "</li><li>gt – The file value is greater than the argument value</li><li>gte "
+    "– The file value is greater than or equal to the argument value</li><li>neq "
+    "– The file value is not equal to the argument value</li></ul>]]",
+    "Available for crux extract-rows", true);
+  // crux pipeline options
+  InitBoolParam("bullseye", false,
+    "Run the Bullseye algorithm on the given MS data, using it to assign high-resolution "
+    "precursor values to the MS/MS data. If a spectrum file ends with .ms2 or .cms2, matching "
+    ".ms1/.cms1 files will be used as the MS1 file. Otherwise, it is assumed that the "
+    "spectrum file contains both MS1 and MS2 scans.",
+    "Available for crux pipeline", true);
+  InitStringParam("search-engine", "tide-search", "comet|tide-search",
+    "Specify which search engine to use.",
+    "Available for crux pipeline", true);
+  InitStringParam("post-processor", "percolator", "percolator|assign-confidence|none",
+    "Specify which post-processor to apply to the search results.",
+    "Available for crux pipeline", true);
+  // create-docs
+  InitArgParam("tool-name",
+    "Specifies the Crux tool to generate documentation for. If the value is "
+    "'list', then a list of available tools will be given. If the value is "
+    "'default-params', then a default parameter file will be given."
+    "If the value is 'param-table' then a table will be printed showing "
+    "which parameters are associated with which commands.");
+  InitStringParam("doc-template", "",
+    "Specifies the main template to be used for generating documentation.",
+    "Available for crux create-docs", false);
+  InitStringParam("doc-input-template", "",
+    "Specifies the template to be used for inputs when generating "
+    "documentation.",
+    "Available for crux create-docs", false);
+  InitStringParam("doc-output-template", "",
+    "Specifies the template to be used for outputs when generating "
+    "documentation.",
+    "Available for crux create-docs", false);
+  InitStringParam("doc-option-category-template", "",
+    "Specifies the template to be used for option categories when generating "
+    "documentation.",
+    "Available for crux create-docs", false);
+  InitStringParam("doc-option-template", "",
+    "Specifies the template to be used for options when generating "
+    "documentation.",
+    "Available for crux create-docs", false);
+  // param-medic
+  InitArgParam("spectrum-file",
+    "File from which to parse fragmentation spectra.");
+  InitBoolParam("pm-ignore-no-charge", false,
+    "When parsing spectra for measurement error estimation, ignore those without charge state information.",
+    "Available for param-medic and tide-search and comet", false);
+  InitDoubleParam("pm-min-precursor-mz", 400,
+    "Minimum precursor m/z value to use in measurement error estimation.",
+    "Available for param-medic and tide-search and comet", true);
+  InitDoubleParam("pm-max-precursor-mz", 1800,
+    "Minimum precursor m/z value to use in measurement error estimation.",
+    "Available for param-medic and tide-search and comet", true);
+  InitDoubleParam("pm-min-frag-mz", 150,
+    "Minimum fragment m/z value to use in measurement error estimation.",
+    "Available for param-medic and tide-search and comet", true);
+  InitDoubleParam("pm-max-frag-mz", 1800,
+    "Maximum fragment m/z value to use in measurement error estimation.",
+    "Available for param-medic and tide-search and comet", true);
+  InitIntParam("pm-min-scan-frag-peaks", 40,
+    "Minimum fragment peaks an MS/MS scan must contain to be used in measurement error estimation.",
+    "Available for param-medic and tide-search and comet", true);
+  InitDoubleParam("pm-max-precursor-delta-ppm", 50,
+    "Maximum ppm distance between precursor m/z values to consider two scans "
+    "potentially generated by the same peptide for measurement error estimation.",
+    "Available for param-medic and tide-search and comet", true);
+  InitIntParam("pm-charge", 2,
+    "Precursor charge state to consider MS/MS spectra from, in measurement error estimation. Ideally, this "
+    "should be the most frequently occurring charge state in the given data.",
+    "Available for param-medic and tide-search and comet", true);
+  InitIntParam("pm-top-n-frag-peaks", 30,
+    "Number of most-intense fragment peaks to consider for measurement error estimation, per MS/MS spectrum.",
+    "Available for param-medic and tide-search and comet", true);
+  InitIntParam("pm-pair-top-n-frag-peaks", 5,
+    "Number of fragment peaks per spectrum pair to be used in fragment error "
+    "estimation.",
+    "Available for param-medic and tide-search and comet", true);
+  InitIntParam("pm-min-common-frag-peaks", 20,
+    "Number of the most-intense peaks that two spectra must share in order to "
+    "potentially be generated by the same peptide, for measurement error estimation.",
+    "Available for param-medic and tide-search and comet", true);
+  InitIntParam("pm-max-scan-separation", 1000,
+    "Maximum number of scans two spectra can be separated by in order to be "
+    "considered potentially generated by the same peptide, for measurement error estimation.",
+    "Available for param-medic and tide-search and comet", true);
+  InitIntParam("pm-min-peak-pairs", 100,
+    "Minimum number of peak pairs (for precursor or fragment) that must be "
+    "successfully paired in order to attempt to estimate measurement error distribution.",
+    "Available for param-medic and tide-search and comet", true);
+
+  InitBoolParam("no-analytics", false, "Don't post data to Google Analytics.", "", false);
+
+  Categorize();
+}
+
+Params::~Params() {
+  for (map<string, Param*>::iterator i = params_.begin(); i != params_.end(); i++) {
+     delete i->second;
+  }
+}
+
+void Params::Categorize() {
+  set<string> items;
+
+  items.clear();
+  items.insert("max-persist");
+  items.insert("persist-tolerance");
+  items.insert("scan-tolerance");
+  items.insert("gap-tolerance");
+  items.insert("bullseye-max-mass");
+  items.insert("bullseye-min-mass");
+  AddCategory("Identifying PPIDs in MS1 spectra", items);
+
+  items.clear();
+  items.insert("exact-match");
+  items.insert("exact-tolerance");
+  items.insert("retention-tolerance");
+  AddCategory("Matching PPIDs to MS2 spectra", items);
+
+  items.clear();
+  items.insert("max-length");
+  items.insert("min-length");
+  items.insert("max-mass");
+  items.insert("min-mass");
+  items.insert("isotopic-mass");
+  items.insert("clip-nterm-methionine");
+  AddCategory("Peptide properties", items);
+
+  items.clear();
+  items.insert("mods-spec");
+  items.insert("nterm-peptide-mods-spec");
+  items.insert("cterm-peptide-mods-spec");
+  items.insert("nterm-protein-mods-spec");
+  items.insert("cterm-protein-mods-spec");
+  items.insert("min-mods");
+  items.insert("max-mods");
+  items.insert("mod");
+  for (char c = 'A'; c <= 'Z'; c++) {
+    items.insert(string(1, c));
+  }
+  AddCategory("Amino acid modifications", items);
+
+  items.clear();
+  items.insert("decoy-format");
+  items.insert("keep-terminal-aminos");
+  items.insert("seed");
+  items.insert("allow-dups");
+  AddCategory("Decoy database generation", items);
+
+  items.clear();
+  items.insert("enzyme");
+  items.insert("custom-enzyme");
+  items.insert("digestion");
+  items.insert("missed-cleavages");
+  AddCategory("Enzymatic digestion", items);
+
+  items.clear();
+  items.insert("max-precursor-charge");
+  items.insert("precursor-window");
+  items.insert("auto-precursor-window");
+  items.insert("precursor-window-type");
+  AddCategory("Precursor selection", items);
+
+  items.clear();
+  items.insert("max-ion-charge");
+  items.insert("peptide-centric-search");
+  items.insert("exact-p-value");
+  items.insert("compute-sp");
+  items.insert("spectrum-min-mz");
+  items.insert("spectrum-max-mz");
+  items.insert("min-peaks");
+  items.insert("spectrum-charge");
+  items.insert("scan-number");
+  items.insert("remove-precursor-peak");
+  items.insert("remove-precursor-tolerance");
+  items.insert("use-flanking-peaks");
+  items.insert("use-neutral-loss-peaks");
+  items.insert("mz-bin-width");
+  items.insert("auto-mz-bin-width");
+  items.insert("mz-bin-offset");
+  items.insert("precursor-window-weibull");
+  items.insert("precursor-window-type-weibull");
+  items.insert("min-weibull-points");
+  items.insert("mod-mass-format");
+  items.insert("fragment-mass");
+  items.insert("isotope-windows");
+  items.insert("isotope-error");
+  items.insert("skip-preprocessing");
+  items.insert("compute-p-values");
+  AddCategory("Search parameters", items);
+
+  items.clear();
+  items.insert("use-a-ions");
+  items.insert("use-b-ions");
+  items.insert("use-c-ions");
+  items.insert("use-x-ions");
+  items.insert("use-y-ions");
+  items.insert("use-z-ions");
+  AddCategory("Fragment ion parameters", items);
+
+  items.clear();
+  items.insert("picked-protein");
+  items.insert("protein-enzyme");
+  items.insert("protein-report-fragments");
+  items.insert("protein-report-duplicates");
+  AddCategory("Protein inference options", items);
+  
+  items.clear();
+  items.insert("protein");
+  items.insert("fido-alpha");
+  items.insert("fido-beta");
+  items.insert("fido-gamma");
+  items.insert("fido-empirical-protein-q");
+  items.insert("fido-gridsearch-depth");
+  items.insert("fido-gridsearch-mse-threshold");
+  items.insert("fido-fast-gridsearch");
+  items.insert("fido-protein-truncation-threshold");
+  items.insert("fido-no-split-large-components");
+  AddCategory("Fido options", items);
+
+  items.clear();
+  items.insert("use-old-xlink");
+  items.insert("xlink-include-inter");
+  items.insert("xlink-include-intra");
+  items.insert("xlink-include-inter-intra");
+  items.insert("xlink-include-linears");
+  items.insert("xlink-include-deadends");
+  items.insert("xlink-include-selfloops");
+  items.insert("xlink-prevents-cleavage");
+  items.insert("max-xlink-mods");
+  AddCategory("Cross-linking parameters", items);
+
+  items.clear();
+  items.insert("decoy_search");
+  AddCategory("Database", items);
+
+  items.clear();
+  items.insert("num-threads");
+  items.insert("num_threads");
+  AddCategory("CPU threads", items);
+
+  items.clear();
+  items.insert("peptide_mass_tolerance");
+  items.insert("auto_peptide_mass_tolerance");
+  items.insert("peptide_mass_units");
+  items.insert("mass_type_parent");
+  items.insert("mass_type_fragment");
+  items.insert("precursor_tolerance_type");
+  items.insert("isotope_error");
+  AddCategory("Masses", items);
+
+  items.clear();
+  items.insert("search_enzyme_number");
+  items.insert("num_enzyme_termini");
+  items.insert("allowed_missed_cleavage");
+  AddCategory("Search enzyme", items);
+
+  items.clear();
+  items.insert("fragment_bin_tol");
+  items.insert("auto_fragment_bin_tol");
+  items.insert("fragment_bin_offset");
+  items.insert("theoretical_fragment_ions");
+  items.insert("use_A_ions");
+  items.insert("use_B_ions");
+  items.insert("use_C_ions");
+  items.insert("use_X_ions");
+  items.insert("use_Y_ions");
+  items.insert("use_Z_ions");
+  items.insert("use_NL_ions");
+  AddCategory("Fragment ions", items);
+
+  items.clear();
+  items.insert("scan_range");
+  items.insert("precursor_charge");
+  items.insert("override_charge");
+  items.insert("ms_level");
+  items.insert("activation_method");
+  AddCategory("mzXML/mzML parameters", items);
+
+  items.clear();
+  items.insert("digest_mass_range");
+  items.insert("num_results");
+  items.insert("skip_researching");
+  items.insert("max_fragment_charge");
+  items.insert("max_precursor_charge");
+  items.insert("nucleotide_reading_frame");
+  items.insert("clip_nterm_methionine");
+  items.insert("spectrum_batch_size");
+  items.insert("decoy_prefix");
+  items.insert("output_suffix");
+  items.insert("mass_offsets");
+  AddCategory("Miscellaneous parameters", items);
+
+  items.clear();
+  items.insert("minimum_peaks");
+  items.insert("minimum_intensity");
+  items.insert("remove_precursor_peak");
+  items.insert("remove_precursor_tolerance");
+  items.insert("clear_mz_range");
+  AddCategory("Spectral processing", items);
+
+  items.clear();
+  for (int i = 1; i <= 9; i++) {
+    items.insert("variable_mod0" + StringUtils::ToString(i));
+  }
+  items.insert("max_variable_mods_in_peptide");
+  items.insert("require_variable_mod");
+  AddCategory("Variable modifications", items);
+
+  items.clear();
+  items.insert("add_Cterm_peptide");
+  items.insert("add_Nterm_peptide");
+  items.insert("add_Cterm_protein");
+  items.insert("add_Nterm_protein");
+  for (char c = 'A'; c <= 'Z'; c++) {
+    string aaString = string(1, c);
+    string aaName = AminoAcidUtil::GetName(c);
+    aaName = aaName.empty() ? "user_amino_acid" : StringUtils::Replace(aaName, " ", "_");
+    items.insert("add_" + aaString + "_" + aaName);
+  }
+  AddCategory("Static modifications", items);
+
+  items.clear();
+  items.insert("only-psms");
+  items.insert("tdc");
+  items.insert("search-input");
+  AddCategory("General options", items);
+
+  items.clear();
+  items.insert("subset-max-train");
+  items.insert("c-pos");
+  items.insert("c-neg");
+  items.insert("test-fdr");
+  items.insert("train-fdr");
+  items.insert("maxiter");
+  items.insert("quick-validation");
+  items.insert("test-each-iteration");
+  items.insert("percolator-seed");
+  AddCategory("SVM training options", items);
+
+  items.clear();
+  items.insert("override");
+  items.insert("output-weights");
+  items.insert("init-weights");
+  items.insert("default-direction");
+  items.insert("unitnorm");
+  items.insert("klammer");
+  AddCategory("SVM feature input options", items);
+
+  items.clear();
+  items.insert("pm-min-precursor-mz");
+  items.insert("pm-max-precursor-mz");
+  items.insert("pm-min-frag-mz");
+  items.insert("pm-max-frag-mz");
+  items.insert("pm-min-scan-frag-peaks");
+  items.insert("pm-max-precursor-delta-ppm");
+  items.insert("pm-charge");
+  items.insert("pm-top-n-frag-peaks");
+  items.insert("pm-pair-top-n-frag-peaks");
+  items.insert("pm-min-common-frag-peaks");
+  items.insert("pm-max-scan-separation");
+  items.insert("pm-min-peak-pairs");
+  AddCategory("param-medic options", items);
+
+  items.clear();
+  items.insert("spectrum-format");
+  items.insert("spectrum-parser");
+  items.insert("list-of-files");
+  items.insert("print-search-progress");
+  items.insert("use-z-line");
+  items.insert("top-match");
+  items.insert("concat");
+  items.insert("store-spectra");
+  items.insert("store-index");
+  items.insert("xlink-print-db");
+  items.insert("fileroot");
+  items.insert("temp-dir");
+  items.insert("output-dir");
+  items.insert("output-file");
+  items.insert("overwrite");
+  items.insert("txt-output");
+  items.insert("sqt-output");
+  items.insert("pepxml-output");
+  items.insert("mzid-output");
+  items.insert("pin-output");
+  items.insert("pout-output");
+  items.insert("output_sqtfile");
+  items.insert("output_txtfile");
+  items.insert("output_pepxmlfile");
+  items.insert("output_percolatorfile");
+  items.insert("output_outfiles");
+  items.insert("print_expect_score");
+  items.insert("num_output_lines");
+  items.insert("show_fragment_ions");
+  items.insert("sample_enzyme_number");
+  items.insert("feature-file-in");
+  items.insert("feature-file-out");
+  items.insert("decoy-xml-output");
+  items.insert("parameter-file");
+  items.insert("verbosity");
+  items.insert("decoy-prefix");
+  items.insert("precision");
+  items.insert("peptide-list");
+  items.insert("comparison");
+  items.insert("header");
+  items.insert("column-type");
+  items.insert("ascending");
+  items.insert("delimiter");
+  items.insert("file-column");
+  AddCategory("Input and output", items);
+
+}
+
+bool Params::GetBool(const string& name) {
+  return Require(name)->GetBool();
+}
+
+int Params::GetInt(const string& name) {
+  return Require(name)->GetInt();
+}
+
+double Params::GetDouble(const string& name) {
+  return Require(name)->GetDouble();
+}
+
+string Params::GetString(const string& name) {
+  return Require(name)->GetString();
+}
+
+bool Params::GetBoolDefault(const string& name) {
+  return Require(name)->GetBoolDefault();
+}
+
+int Params::GetIntDefault(const string& name) {
+  return Require(name)->GetIntDefault();
+}
+
+double Params::GetDoubleDefault(const string& name) {
+  return Require(name)->GetDoubleDefault();
+}
+
+string Params::GetStringDefault(const string& name) {
+  return Require(name)->GetStringDefault();
+}
+
+const vector<string>& Params::GetStrings(const string& name) {
+  Param* param = Require(name);
+  if (!param->IsArgument()) {
+    throw runtime_error("Parameter '" + name + "' is not an argument");
+  }
+  return ((ArgParam*)param)->GetStrings();
+}
+
+string Params::GetUsage(const string& name) {
+  return Require(name)->GetUsage();
+}
+
+string Params::GetFileNotes(const string& name) {
+  return Require(name)->GetFileNotes();
+}
+
+bool Params::IsVisible(const string& name) {
+  return Require(name)->IsVisible();
+}
+
+bool Params::IsArgument(const string& name) {
+  return Require(name)->IsArgument();
+}
+
+string Params::GetAcceptedValues(const string& name) {
+  return Require(name)->GetAcceptedValues();
+}
+
+bool Params::IsDefault(const string& name) {
+  return Require(name)->IsDefault();
+}
+
+bool Params::Exists(const string& name) {
+  return paramContainer_.Get(name) != NULL;
+}
+
+void Params::Set(const string& name, bool value) {
+  paramContainer_.CanModifyCheck();
+  Param* param = Require(name);
+  param->Set(value);
+  param->ThrowIfInvalid();
+}
+
+void Params::Set(const string& name, int value) {
+  paramContainer_.CanModifyCheck();
+  Param* param = Require(name);
+  param->Set(value);
+  param->ThrowIfInvalid();
+}
+
+void Params::Set(const string& name, double value) {
+  paramContainer_.CanModifyCheck();
+  Param* param = Require(name);
+  param->Set(value);
+  param->ThrowIfInvalid();
+}
+
+void Params::Set(const string& name, const char* value) {
+  Set(name, string(value));
+}
+
+void Params::Set(const string& name, const string& value) {
+  paramContainer_.CanModifyCheck();
+  Param* param = Require(name);
+  param->Set(value);
+  param->ThrowIfInvalid();
+}
+
+void Params::AddArgValue(const string& name, const string& value) {
+  paramContainer_.CanModifyCheck();
+  Param* param = Require(name);
+  if (!param->IsArgument()) {
+    throw runtime_error("Cannot add value to '" + name + "', it is not an argument");
+  }
+  ((ArgParam*)param)->AddValue(value);
+}
+
+void Params::Finalize() {
+  paramContainer_.FinalizeParams();
+}
+
+void Params::Write(ostream* out, bool defaults) {
+  if (out == NULL || !out->good()) {
+    throw runtime_error("Bad file stream for writing parameter file");
+  }
+
+  *out << "# Crux parameter file (generated by Crux version " << CRUX_VERSION << ")" << endl
+       << "# Full documentation available at http://cruxtoolkit.sourceforge.net/" << endl
+       << "# comet_version 2016.01 rev. 1" << endl
+       << "# Everything following the \'#\' symbol is treated as a comment." << endl
+       << endl;
+
+  for (vector<const Param*>::const_iterator i = Begin(); i != End(); i++) {
+    string name = (*i)->GetName();
+    // Print mods and Comet parameters later
+    if (!(*i)->IsVisible() ||
+        name == "mod" || name == "cmod" || name == "nmod" ||
+        name.find('_') != string::npos) {
+      continue;
+    }
+    *out << (*i)->GetParamFileString(defaults) << endl;
+  }
+
+  print_mods_parameter_file(out, "mod", get_aa_mod_list);
+  print_mods_parameter_file(out, "nmod", get_n_mod_list);
+  print_mods_parameter_file(out, "cmod", get_c_mod_list);
+
+  // Print Comet parameters
+  *out << "####################" << endl
+       << "# Comet Parameters #" << endl
+       << "####################" << endl;
+  for (vector<const Param*>::const_iterator i = Begin(); i != End(); i++) {
+    string name = (*i)->GetName();
+    // Print mods and Comet parameters later
+    if (!(*i)->IsVisible() ||
+        name == "mod" || name == "cmod" || name == "nmod" ||
+        name.find('_') == string::npos) {
+      continue;
+    }
+    *out << (*i)->GetParamFileString(defaults) << endl;
+  }
+
+  *out << "#" << endl
+       << "# COMET_ENZYME_INFO _must_ be at the end of this parameters file" << endl
+       << "#" << endl
+       << "[COMET_ENZYME_INFO]" << endl;
+
+  const vector<string>& cometEnzymes = get_comet_enzyme_info_lines();
+  if (cometEnzymes.empty() || defaults) {
+    *out << "0.  No_enzyme                      0  -          -" << endl
+         << "1.  Trypsin                        1  KR         P" << endl
+         << "2.  Trypsin/P                      1  KR         -" << endl
+         << "3.  Lys_C                          1  K          P" << endl
+         << "4.  Lys_N                          0  K          -" << endl
+         << "5.  Arg_C                          1  R          P" << endl
+         << "6.  Asp_N                          0  D          -" << endl
+         << "7.  CNBr                           1  M          -" << endl
+         << "8.  Glu_C                          1  DE         P" << endl
+         << "9.  PepsinA                        1  FL         P" << endl
+         << "10. Chymotrypsin                   1  FWYL       P" << endl;
+    /*TODO: Put these back in after we figure out what to do with enzyme info
+    *out << "11. Elastase                       1  ALIV       P" << endl
+         << "12. Clostripain                    1  R          -" << endl
+         << "13. Iodosobenzoate                 1  W          -" << endl
+         << "14. Proline_Endopeptidase          1  P          -" << endl
+         << "15. Staph_Protease                 1  E          -" << endl
+         << "16. Modified_Chymotrypsin          1  FWYL       P" << endl
+         << "17. Elastase_Trypsin_Chymotrypsin  1  ALIVKRWFY  P" << endl;
+    */
+  } else {
+    for (vector<string>::const_iterator i = cometEnzymes.begin();
+         i != cometEnzymes.end();
+         i++) {
+      *out << *i << endl;
+    }
+  }
+}
+
+map<string, Param*>::const_iterator Params::BeginAll() {
+  return paramContainer_.params_.begin();
+}
+
+map<string, Param*>::const_iterator Params::EndAll() {
+  return paramContainer_.params_.end();
+}
+
+vector<const Param*>::const_iterator Params::Begin() {
+  return paramContainer_.paramsOrdered_.begin();
+}
+
+vector<const Param*>::const_iterator Params::End() {
+  return paramContainer_.paramsOrdered_.end();
+}
+
+string Params::ProcessHtmlDocTags(string s, bool html) {
+  // If html is true, instances of [[html:{text}]] become {text} and
+  // instances of [[nohtml:{text}]] are removed.
+  // If html is false, instances of [[nohtml:{text}]] become {text} and
+  // instances of [[html:{text}]] are removed.
+
+  const string OPEN_TAG = "[[";
+  const string CLOSE_TAG = "]]";
+  const string HTML_PREFIX = "html:";
+  const string NO_HTML_PREFIX = "nohtml:";
+
+  size_t pos, endPos = 0;
+  while ((pos = s.find(OPEN_TAG, endPos)) != string::npos) {
+    size_t prefixStart = pos + OPEN_TAG.length();
+    if ((endPos = s.find(CLOSE_TAG, prefixStart)) == string::npos) {
+      return s;
+    }
+
+    string fullOpen = OPEN_TAG;
+    bool fullRemove;
+    if (s.length() >= prefixStart + HTML_PREFIX.length() &&
+        s.compare(prefixStart, HTML_PREFIX.length(), HTML_PREFIX) == 0) {
+      fullOpen += HTML_PREFIX;
+      fullRemove = !html;
+    } else if (s.length() >= prefixStart + NO_HTML_PREFIX.length() &&
+               s.compare(prefixStart, NO_HTML_PREFIX.length(), NO_HTML_PREFIX) == 0) {
+      fullOpen += NO_HTML_PREFIX;
+      fullRemove = html;
+    } else {
+      endPos = prefixStart;
+      continue;
+    }
+
+    if (!fullRemove) {
+      s.erase(pos, fullOpen.length());
+      endPos -= fullOpen.length();
+      s.erase(endPos, CLOSE_TAG.length());
+    } else {
+      s.erase(pos, endPos + CLOSE_TAG.length() - pos);
+      endPos = pos;
+    }
+  }
+  return s;
+}
+
+vector< pair< string, vector<string> > > Params::GroupByCategory(const vector<string>& options) {
+  vector< pair< string, vector<string> > > groups;
+
+  pair< string, vector<string> > uncategorizedPair = make_pair("", vector<string>(options));
+  vector<string>& uncategorized = uncategorizedPair.second;
+
+  // Iterate over all categories
+  for (vector<ParamCategory>::const_iterator i = paramContainer_.categories_.begin();
+       i != paramContainer_.categories_.end();
+       i++) {
+    bool any = false;
+    // Iterate over each given option and check if it is in the category
+    for (vector<string>::const_iterator j = options.begin(); j != options.end(); j++) {
+      Param* param = Require(*j);
+      // This option was in the category
+      if (i->Items.find(param) != i->Items.end()) {
+        if (!any) {
+          any = true;
+          groups.push_back(make_pair(i->Name, vector<string>()));
+        }
+        groups.back().second.push_back(*j);
+        vector<string>::iterator iter;
+        while ((iter = find(uncategorized.begin(), uncategorized.end(), *j)) !=
+               uncategorized.end()) {
+          uncategorized.erase(iter);
+        }
+      }
+    }
+  }
+
+  if (!uncategorized.empty()) {
+    groups.insert(groups.begin(), uncategorizedPair);
+  }
+  return groups;
+}
+
+void Params::InitBoolParam(
+  const string& name,
+  bool value,
+  const string& usage,
+  const string& fileNotes,
+  bool visible
+) {
+  Add(new BoolParam(name, usage, fileNotes, visible, value));
+}
+
+void Params::InitIntParam(
+  const string& name,
+  int value,
+  int min,
+  int max,
+  const string& usage,
+  const string& fileNotes,
+  bool visible
+) {
+  Add(new IntParam(name, usage, fileNotes, visible, value, min, max));
+}
+
+void Params::InitIntParam(
+  const string& name,
+  int value,
+  const string& usage,
+  const string& fileNotes,
+  bool visible
+) {
+  Add(new IntParam(name, usage, fileNotes, visible, value));
+}
+
+void Params::InitDoubleParam(
+  const string& name,
+  double value,
+  double min,
+  double max,
+  const string& usage,
+  const string& fileNotes,
+  bool visible
+) {
+  Add(new DoubleParam(name, usage, fileNotes, visible, value, min, max));
+}
+
+void Params::InitDoubleParam(
+  const string& name,
+  double value,
+  const string& usage,
+  const string& fileNotes,
+  bool visible
+) {
+  Add(new DoubleParam(name, usage, fileNotes, visible, value));
+}
+
+void Params::InitStringParam(
+  const string& name,
+  const string& value,
+  const string& validValues,
+  const string& usage,
+  const string& fileNotes,
+  bool visible
+) {
+  Add(new StringParam(name, usage, fileNotes, visible, value,
+                      StringUtils::Split(validValues, '|')));
+}
+
+void Params::InitStringParam(
+  const string& name,
+  const string& value,
+  const string& usage,
+  const string& fileNotes,
+  bool visible
+) {
+  Add(new StringParam(name, usage, fileNotes, visible, value));
+}
+
+void Params::InitArgParam(
+  const string& name,
+  const string& usage
+) {
+  Add(new ArgParam(name, usage));
+}
+
+Param* Params::Require(const string& name) {
+  Param* param = paramContainer_.Get(name);
+  if (param == NULL) {
+    throw runtime_error("Parameter '" + name + "' does not exist");
+  }
+  return param;
+}
+
+Param* Params::Get(const string& name) {
+  map<string, Param*>::iterator i = params_.find(name);
+  return (i == params_.end()) ? NULL : i->second;
+}
+
+void Params::Add(Param* param) {
+  CanModifyCheck();
+  param->ThrowIfInvalid();
+
+  string paramName = param->GetName();
+  if (!params_.insert(make_pair(paramName, param)).second) {
+    throw runtime_error("Parameter '" + paramName + "' already exists");
+  }
+  if (!param->IsArgument()) {
+    paramsOrdered_.push_back(param);
+  }
+}
+
+void Params::AddCategory(const string& name, const set<string>& params) {
+  // Validate passed in set
+  for (set<string>::const_iterator i = params.begin(); i != params.end(); i++) {
+    if (Get(*i) == NULL) {
+      throw runtime_error("Parameter '" + *i + "' does not exist");
+    }
+  }
+
+  ParamCategory* category = NULL;
+  // Check if this category already exists
+  for (vector<ParamCategory>::iterator i = categories_.begin(); i != categories_.end(); i++) {
+    if (i->Name == name) {
+      category = &*i;
+      break;
+    }
+  }
+
+  // Create new category
+  if (!category) {
+    categories_.push_back(ParamCategory(name));
+    category = &(categories_.back());
+  }
+
+  // Loop over parameters and add them to the category if they are in the passed in set
+  for (vector<const Param*>::const_iterator i = Begin(); i != End(); i++) {
+    string paramName = (*i)->GetName();
+    if (params.find(paramName) != params.end()) {
+      // Check if this parameter has already been categorized
+      for (vector<ParamCategory>::const_iterator j = categories_.begin();
+           j != categories_.end();
+           j++) {
+        if (j->Items.find(*i) != j->Items.end()) {
+          throw runtime_error("Parameter '" + paramName + "' has already been categorized");
+        }
+      }
+      // Add parameter to category
+      category->Items.insert(*i);
+    }
+  }
+}
+
+void Params::FinalizeParams() {
+  if (finalized_) {
+    return;
+  }
+
+  for (char c = 'A'; c <= 'Z'; c++) {
+    string aa = string(1, c);
+    double deltaMass = GetDouble(aa);
+    if (deltaMass != 0) {
+      ModificationDefinition::NewStaticMod(aa, deltaMass, ANY);
+    }
+  }
+
+  if (GetString("enzyme") == "no-enzyme") {
+    Set("digestion", "non-specific-digest");
+    Set("missed-cleavages", 500);
+  }
+
+  string customEnzyme = GetString("custom-enzyme");
+  if (!customEnzyme.empty()) {
+    parse_custom_enzyme(customEnzyme);
+    Set("enzyme", "custom-enzyme");
+  }
+
+  if (GetString("enzyme") == "no-enzyme") {
+    Set("digestion", "non-specific-digest");
+  } else if (GetString("digestion") == "non-specific-digest") {
+    Set("enzyme", "no-enzyme");
+  }
+
+  double new_value = GetDouble("mz-bin-width");
+// ***************************
+#ifdef _MSC_VER
+  // Peculiarities of Windows floating point handling 
+  // results in us getting 0.0 here rather than Nan
+  // FIXME: is there a more portable way of checking
+  // that a floating point value has not been set?
+  if (new_value == 0.0) {
+#else
+  if (isnan(new_value)) {
+#endif
+    // If no width specified, choose based on mass type.
+    if (get_mass_type_parameter("fragment-mass") == MONO) {
+      new_value = BIN_WIDTH_MONO;
+    } else {
+      new_value = BIN_WIDTH_AVERAGE;
+    }
+
+    Set("mz-bin-width", new_value);
+  }
+// ***************************
+
+  finalized_ = true;
+}
+
+void Params::CanModifyCheck() const {
+  if (finalized_) {
+    throw runtime_error("Parameters have been finalized and cannot be modified");
+  }
+}
+
+// ***** Parameter classes ***** //
+//
+// Param (base class)
+//
+Param::Param(const string& name,
+             const string& usage,
+             const string& fileNotes,
+             bool visible)
+  : name_(name), usage_(usage), fileNotes_(fileNotes), visible_(visible) {}
+Param::~Param() {}
+string Param::GetName() const { return name_; }
+string Param::GetUsage() const { return usage_; }
+string Param::GetFileNotes() const { return fileNotes_; }
+bool Param::IsVisible() const { return visible_; }
+bool Param::IsArgument() const { return false; }
+void Param::ThrowIfInvalid() const {}
+string Param::GetParamFileString(bool defaultValue) const {
+  vector<string> lines =
+    StringUtils::Split(Params::ProcessHtmlDocTags(usage_), '\n');
+  vector<string> noteLines =
+    StringUtils::Split(Params::ProcessHtmlDocTags(fileNotes_), '\n');
+  lines.insert(lines.end(), noteLines.begin(), noteLines.end());
+  stringstream ss;
+  for (vector<string>::const_iterator i = lines.begin(); i != lines.end(); i++) {
+    vector<string> formatted = StringUtils::Split(StringUtils::LineFormat(*i, 78), '\n');
+    for (vector<string>::const_iterator j = formatted.begin(); j != formatted.end(); j++) {
+      ss << "# " << *j << endl;
+    }
+  }
+  ss << name_ << '=' << (defaultValue ? GetStringDefault() : GetString()) << endl;
+  return ss.str();
+}
+void Param::Set(bool value) {
+  throw runtime_error("Cannot set value of '" + name_ + "' from bool");
+}
+void Param::Set(int value) {
+  throw runtime_error("Cannot set value of '" + name_ + "' from int");
+}
+void Param::Set(double value) {
+  throw runtime_error("Cannot set value of '" + name_ + "' from double");
+}
+void Param::Set(const char* value) {
+  Set(string(value));
+}
+void Param::Set(const string& value) {
+  throw runtime_error("Cannot set value of '" + name_ + "' from string");
+}
+//
+// BoolParam
+//
+BoolParam::BoolParam(const string& name,
+                     const string& usage,
+                     const string& fileNotes,
+                     bool visible,
+                     bool value)
+  : Param(name, usage, fileNotes, visible), value_(value), original_(value) {}
+string BoolParam::GetAcceptedValues() const { return "T|F"; }
+bool BoolParam::IsDefault() const { return value_ == original_; }
+bool BoolParam::GetBool() const { return value_; }
+int BoolParam::GetInt() const { return IntParam::From(value_); }
+double BoolParam::GetDouble() const { return DoubleParam::From(value_); }
+string BoolParam::GetString() const { return StringParam::From(value_); }
+bool BoolParam::GetBoolDefault() const { return original_; }
+int BoolParam::GetIntDefault() const { return IntParam::From(original_); }
+double BoolParam::GetDoubleDefault() const { return DoubleParam::From(original_); }
+string BoolParam::GetStringDefault() const { return StringParam::From(original_); }
+void BoolParam::Set(bool value) { value_ = value; }
+void BoolParam::Set(int value) { value_ = From(value); }
+void BoolParam::Set(double value) { value_ = From(value); }
+void BoolParam::Set(const string& value) {
+  try {
+    value_ = From(value);
+  } catch (...) {
+    throw runtime_error("Invalid value for '" + name_ + "': " + "'" + value + "' "
+                        "(expected boolean)");
+  }
+}
+bool BoolParam::From(int i) { return i != 0; }
+bool BoolParam::From(double d) { return d != 0; }
+bool BoolParam::From(string s) {
+  s = StringUtils::ToLower(s);
+  if (s == "t" || s == "true") {
+    return true;
+  } else if (s == "f" || s == "false") {
+    return false;
+  }
+  throw runtime_error("Cannot convert '" + s + "' to boolean");
+}
+//
+// IntParam
+//
+IntParam::IntParam(const string& name,
+                   const string& usage,
+                   const string& fileNotes,
+                   bool visible,
+                   int value,
+                   int min,
+                   int max)
+  : Param(name, usage, fileNotes, visible),
+    value_(value), original_(value), min_(min), max_(max) {}
+void IntParam::ThrowIfInvalid() const {
+  if (value_ < min_ || value_ > max_) {
+    throw runtime_error("Value of '" + name_ + "' must be between " +
+                        StringUtils::ToString(min_) + " and " +
+                        StringUtils::ToString(max_));
+  }
+}
+string IntParam::GetAcceptedValues() const { return "<integer>"; }
+bool IntParam::IsDefault() const { return value_ == original_; }
+bool IntParam::GetBool() const { return BoolParam::From(value_); }
+int IntParam::GetInt() const { return value_; }
+double IntParam::GetDouble() const { return DoubleParam::From(value_); }
+string IntParam::GetString() const { return StringParam::From(value_); }
+bool IntParam::GetBoolDefault() const { return BoolParam::From(original_); }
+int IntParam::GetIntDefault() const { return original_; }
+double IntParam::GetDoubleDefault() const { return DoubleParam::From(original_); }
+string IntParam::GetStringDefault() const { return StringParam::From(original_); }
+void IntParam::Set(bool value) { value_ = From(value); }
+void IntParam::Set(int value) { value_ = value; }
+void IntParam::Set(double value) { value_ = From(value); }
+void IntParam::Set(const string& value) {
+  try {
+    value_ = From(value);
+  } catch (...) {
+    throw runtime_error("Invalid value for '" + name_ + "': " + "'" + value + "' "
+                        "(expected int)");
+  }
+}
+int IntParam::From(bool b) { return b ? 1 : 0; }
+int IntParam::From(double d) { return (int)d; }
+int IntParam::From(const string& s) { return StringUtils::FromString<int>(s); }
+//
+// DoubleParam
+//
+DoubleParam::DoubleParam(const string& name,
+                         const string& usage,
+                         const string& fileNotes,
+                         bool visible,
+                         double value,
+                         double min,
+                         double max)
+  : Param(name, usage, fileNotes, visible),
+    value_(value), original_(value), min_(min), max_(max) {}
+void DoubleParam::ThrowIfInvalid() const {
+  if (value_ < min_ || value_ > max_) {
+    throw runtime_error("Value of '" + name_ + "' must be between " +
+                        StringUtils::ToString(min_) + " and " +
+                        StringUtils::ToString(max_));
+  }
+}
+string DoubleParam::GetAcceptedValues() const { return "<float>"; }
+bool DoubleParam::IsDefault() const { return value_ == original_; }
+bool DoubleParam::GetBool() const { return BoolParam::From(value_); }
+int DoubleParam::GetInt() const { return IntParam::From(value_); }
+double DoubleParam::GetDouble() const { return value_; }
+string DoubleParam::GetString() const { return StringParam::From(value_); }
+bool DoubleParam::GetBoolDefault() const { return BoolParam::From(original_); }
+int DoubleParam::GetIntDefault() const { return IntParam::From(original_); }
+double DoubleParam::GetDoubleDefault() const { return original_; }
+string DoubleParam::GetStringDefault() const { return StringParam::From(original_); }
+void DoubleParam::Set(bool value) { value_ = From(value); }
+void DoubleParam::Set(int value) { value_ = From(value); }
+void DoubleParam::Set(double value) { value_ = value; }
+void DoubleParam::Set(const string& value) {
+  try {
+    value_ = From(value);
+  } catch (...) {
+    throw runtime_error("Invalid value for '" + name_ + "': " + "'" + value + "' "
+                        "(expected float)");
+  }
+}
+double DoubleParam::From(bool b) { return b ? 1 : 0; }
+double DoubleParam::From(int i) { return (double)i; }
+double DoubleParam::From(const string& s) { return StringUtils::FromString<double>(s); }
+//
+// StringParam
+//
+StringParam::StringParam(const string& name,
+                         const string& usage,
+                         const string& fileNotes,
+                         bool visible,
+                         const string& value,
+                         const vector<string>& validValues)
+  : Param(name, usage, fileNotes, visible),
+    original_(value), validValues_(validValues) {
+  Set(value);
+}
+void StringParam::ThrowIfInvalid() const {
+  if (!validValues_.empty() &&
+      find(validValues_.begin(), validValues_.end(), value_) == validValues_.end()) {
+    throw runtime_error("Invalid value for '" + name_ + "'; must be one of <" +
+                        StringUtils::Join(validValues_, '|') + ">");
+  }
+}
+string StringParam::GetAcceptedValues() const {
+  return validValues_.empty() ? "<string>" : StringUtils::Join(validValues_, '|');
+}
+bool StringParam::IsDefault() const { return value_ == original_; }
+bool StringParam::GetBool() const { return BoolParam::From(value_); }
+int StringParam::GetInt() const { return IntParam::From(value_); }
+double StringParam::GetDouble() const { return DoubleParam::From(value_); }
+string StringParam::GetString() const { return value_; }
+bool StringParam::GetBoolDefault() const { return BoolParam::From(original_); }
+int StringParam::GetIntDefault() const { return IntParam::From(original_); }
+double StringParam::GetDoubleDefault() const { return DoubleParam::From(original_); }
+string StringParam::GetStringDefault() const { return original_; }
+void StringParam::Set(bool value) { value_ = From(value); }
+void StringParam::Set(int value) { value_ = From(value); }
+void StringParam::Set(double value) { value_ = From(value); }
+void StringParam::Set(const string& value) {
+  value_ = value != "__NULL_STR" ? value : "";
+}
+string StringParam::From(bool b) { return b ? "true" : "false"; }
+string StringParam::From(int i) { return StringUtils::ToString(i); }
+string StringParam::From(double d) { return StringUtils::ToString(d); }
+//
+// ArgParam
+//
+ArgParam::ArgParam(const string& name, const string& usage)
+  : Param(name, usage, "", false), values_(vector<string>()) {}
+string ArgParam::GetAcceptedValues() const { return "<string>"; }
+bool ArgParam::IsArgument() const { return true; }
+bool ArgParam::IsDefault() const { return false; }
+bool ArgParam::GetBool() const { return BoolParam::From(GetString()); }
+int ArgParam::GetInt() const { return StringUtils::FromString<int>(GetString()); }
+double ArgParam::GetDouble() const { return StringUtils::FromString<double>(GetString()); }
+string ArgParam::GetString() const {
+  if (values_.empty()) {
+    throw runtime_error("No value for argument '" + name_ + "'");
+  }
+  return values_.front();
+}
+bool ArgParam::GetBoolDefault() const { return false; }
+int ArgParam::GetIntDefault() const { return 0; }
+double ArgParam::GetDoubleDefault() const { return 0; }
+string ArgParam::GetStringDefault() const { return ""; }
+const vector<string>& ArgParam::GetStrings() const { return values_; }
+void ArgParam::Set(bool value) { values_ = vector<string>(1, StringParam::From(value)); }
+void ArgParam::Set(int value) { values_ = vector<string>(1, StringParam::From(value)); }
+void ArgParam::Set(double value) { values_ = vector<string>(1, StringParam::From(value)); }
+void ArgParam::Set(const string& value) { values_ = vector<string>(1, value); }
+void ArgParam::AddValue(const string& value) { values_.push_back(value); }
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+ 
diff --git a/src/util/Params.h b/src/util/Params.h
new file mode 100644
index 0000000..faa4fe3
--- /dev/null
+++ b/src/util/Params.h
@@ -0,0 +1,399 @@
+#ifndef PARAMS_H
+#define PARAMS_H
+
+#include <ostream>
+#include <limits>
+#include <map>
+#include <set>
+#include <vector>
+
+#ifdef _MSC_VER
+// Turn off Microsoft min and max macros
+#undef max
+#undef min
+#endif
+
+class Param;
+
+class Params {
+ public:
+  Params();
+  ~Params();
+
+  // Get the value of the parameter
+  static bool GetBool(const std::string& name);
+  static int GetInt(const std::string& name);
+  static double GetDouble(const std::string& name);
+  static std::string GetString(const std::string& name);
+
+  // Get the default value of the parameter
+  static bool GetBoolDefault(const std::string& name);
+  static int GetIntDefault(const std::string& name);
+  static double GetDoubleDefault(const std::string& name);
+  static std::string GetStringDefault(const std::string& name);
+
+  // Get the values of an argument that accepts multiple values
+  static const std::vector<std::string>& GetStrings(const std::string& name);
+
+  // Get the usage statement for the parameter
+  static std::string GetUsage(const std::string& name);
+
+  // Get whether the parameter has been modified from its original value or not
+  static std::string GetFileNotes(const std::string& name);
+
+  // Get whether the parameter is visible to the user or not
+  static bool IsVisible(const std::string& name);
+
+  // Get whether the parameter is an argument or an option
+  static bool IsArgument(const std::string& name);
+
+  // Get the accepted values for the parameter
+  static std::string GetAcceptedValues(const std::string& name);
+
+  // Get whether the parameter has been modified from its original value or not
+  static bool IsDefault(const std::string& name);
+
+  // Get whether the parameter exists or not
+  static bool Exists(const std::string& name);
+
+  // Set the value of a parameter after it has been initialized
+  // Throws exception if parameter doesn't exist or parameters have been finalized
+  static void Set(const std::string& name, bool value);
+  static void Set(const std::string& name, int value);
+  static void Set(const std::string& name, double value);
+  static void Set(const std::string& name, const char* value);
+  static void Set(const std::string& name, const std::string& value);
+
+  // Add the value of an argument
+  // Throws exception if parameter has an invalid value, already exists as a non-argument,
+  // or parameters have been finalized
+  static void AddArgValue(const std::string& name, const std::string& value);
+
+  // Lock parameters and prevent them from being modified
+  static void Finalize();
+
+  // Write all contents of the ordered parameter list to file
+  static void Write(std::ostream* out, bool defaults = false);
+
+  // Get iterators for the beginning and end of the entire parameter list
+  static std::map<std::string, Param*>::const_iterator BeginAll();
+  static std::map<std::string, Param*>::const_iterator EndAll();
+
+  // Get iterators for the beginning and end of the ordered parameter list
+  static std::vector<const Param*>::const_iterator Begin();
+  static std::vector<const Param*>::const_iterator End();
+
+  // Process tags in a string
+  static std::string ProcessHtmlDocTags(std::string s, bool html = false);
+
+  // Group the given options by category
+  static std::vector< std::pair< std::string, std::vector<std::string> > > GroupByCategory(
+    const std::vector<std::string>& options);
+
+ private:
+  struct ParamCategory {
+    explicit ParamCategory(std::string name): Name(name), Items(std::set<const Param*>()) {}
+    std::string Name;
+    std::set<const Param*> Items;
+  };
+
+  // Group parameters by category
+  void Categorize();
+
+  // Initialize optional parameters
+  void InitBoolParam(
+    const std::string& name,
+    bool value,
+    const std::string& usage,
+    const std::string& fileNotes,
+    bool visible
+  );
+  void InitIntParam(
+    const std::string& name,
+    int value,
+    int min,
+    int max,
+    const std::string& usage,
+    const std::string& fileNotes,
+    bool visible
+  );
+  void InitIntParam(
+    const std::string& name,
+    int value,
+    const std::string& usage,
+    const std::string& fileNotes,
+    bool visible
+  );
+  void InitDoubleParam(
+    const std::string& name,
+    double value,
+    double min,
+    double max,
+    const std::string& usage,
+    const std::string& fileNotes,
+    bool visible
+  );
+  void InitDoubleParam(
+    const std::string& name,
+    double value,
+    const std::string& usage,
+    const std::string& fileNotes,
+    bool visible
+  );
+  void InitStringParam(
+    const std::string& name,
+    const std::string& value,
+    const std::string& validValues,
+    const std::string& usage,
+    const std::string& fileNotes,
+    bool visible
+  );
+  void InitStringParam(
+    const std::string& name,
+    const std::string& value,
+    const std::string& usage,
+    const std::string& fileNotes,
+    bool visible
+  );
+  void InitArgParam(
+    const std::string& name,
+    const std::string& usage
+  );
+
+  // Get a parameter by name
+  // Throws exception if the parameter doesn't exist
+  static Param* Require(const std::string& name);
+
+  // Get a parameter by name; returns NULL if the parameter doesn't exist
+  Param* Get(const std::string& name);
+
+  // Add a parameter to the container
+  // Throws exception if parameter has an invalid value, already exists,
+  // or parameters have been finalized
+  void Add(Param* param);
+
+  // Add parameter category
+  void AddCategory(const std::string& name, const std::set<std::string>& params);
+
+  // Lock parameters and prevent them from being modified
+  void FinalizeParams();
+
+  // Throw exception if the parameters have been finalized
+  void CanModifyCheck() const;
+
+  std::map<std::string, Param*> params_;
+  std::vector<const Param*> paramsOrdered_;
+  std::vector<ParamCategory> categories_;
+  bool finalized_;
+};
+
+class Param {
+ public:
+  Param(const std::string& name,
+        const std::string& usage,
+        const std::string& fileNotes,
+        bool visible);
+  virtual ~Param();
+
+  // Get the name of the parameter
+  std::string GetName() const;
+
+  // Get the usage statement for the parameter
+  std::string GetUsage() const;
+
+  // Get additional notes about the parameter for the parameter file
+  std::string GetFileNotes() const;
+
+  // Get whether the parameter is visible to the user or not
+  bool IsVisible() const;
+
+  // Get whether the parameter is an argument or an option
+  virtual bool IsArgument() const;
+
+  // Get whether the parameter's value is valid or not
+  virtual void ThrowIfInvalid() const;
+
+  // Get the type of the parameter
+  virtual std::string GetAcceptedValues() const = 0;
+
+  // Get whether the parameter has been modified from its original value or not
+  virtual bool IsDefault() const = 0;
+
+  // Get the value of the parameter
+  virtual bool GetBool() const = 0;
+  virtual int GetInt() const = 0;
+  virtual double GetDouble() const = 0;
+  virtual std::string GetString() const = 0;
+
+  // Get the default value of the parameter
+  virtual bool GetBoolDefault() const = 0;
+  virtual int GetIntDefault() const = 0;
+  virtual double GetDoubleDefault() const = 0;
+  virtual std::string GetStringDefault() const = 0;
+
+  // Set the value of the parameter
+  virtual void Set(bool value);
+  virtual void Set(int value);
+  virtual void Set(double value);
+  virtual void Set(const char* value);
+  virtual void Set(const std::string& value);
+
+  // Get the parameter as a string to write to a parameter file
+  virtual std::string GetParamFileString(bool defaultValue = false) const;
+ protected:
+  std::string name_, usage_, fileNotes_;
+  bool visible_;
+};
+
+class BoolParam : public Param {
+ public:
+  BoolParam(const std::string& name,
+            const std::string& usage,
+            const std::string& fileNotes,
+            bool visible,
+            bool value);
+  std::string GetAcceptedValues() const;
+  bool IsDefault() const;
+  bool GetBool() const;
+  int GetInt() const;
+  double GetDouble() const;
+  std::string GetString() const;
+  bool GetBoolDefault() const;
+  int GetIntDefault() const;
+  double GetDoubleDefault() const;
+  std::string GetStringDefault() const;
+  void Set(bool value);
+  void Set(int value);
+  void Set(double value);
+  void Set(const std::string& value);
+
+  static bool From(int i);
+  static bool From(double d);
+  static bool From(std::string s);
+ protected:
+  bool value_, original_;
+};
+
+class IntParam : public Param {
+ public:
+  IntParam(const std::string& name,
+           const std::string& usage,
+           const std::string& fileNotes,
+           bool visible,
+           int value,
+           int min = -std::numeric_limits<int>::max(),
+           int max = std::numeric_limits<int>::max());
+  std::string GetAcceptedValues() const;
+  void ThrowIfInvalid() const;
+  bool IsDefault() const;
+  bool GetBool() const;
+  int GetInt() const;
+  double GetDouble() const;
+  std::string GetString() const;
+  bool GetBoolDefault() const;
+  int GetIntDefault() const;
+  double GetDoubleDefault() const;
+  std::string GetStringDefault() const;
+  void Set(bool value);
+  void Set(int value);
+  void Set(double value);
+  void Set(const std::string& value);
+
+  static int From(bool b);
+  static int From(double d);
+  static int From(const std::string& s);
+ protected:
+  int value_, min_, max_, original_;
+};
+
+class DoubleParam : public Param {
+ public:
+  DoubleParam(const std::string& name,
+              const std::string& usage,
+              const std::string& fileNotes,
+              bool visible,
+              double value,
+              double min = -std::numeric_limits<double>::max(),
+              double max = std::numeric_limits<double>::max());
+  std::string GetAcceptedValues() const;
+  void ThrowIfInvalid() const;
+  bool IsDefault() const;
+  bool GetBool() const;
+  int GetInt() const;
+  double GetDouble() const;
+  std::string GetString() const;
+  bool GetBoolDefault() const;
+  int GetIntDefault() const;
+  double GetDoubleDefault() const;
+  std::string GetStringDefault() const;
+  void Set(bool value);
+  void Set(int value);
+  void Set(double value);
+  void Set(const std::string& value);
+
+  static double From(bool b);
+  static double From(int i);
+  static double From(const std::string& s);
+ protected:
+  double value_, min_, max_, original_;
+};
+
+class StringParam : public Param {
+ public:
+  StringParam(const std::string& name,
+              const std::string& usage,
+              const std::string& fileNotes,
+              bool visible,
+              const std::string& value,
+              const std::vector<std::string>& validvalues = std::vector<std::string>());
+  std::string GetAcceptedValues() const;
+  void ThrowIfInvalid() const;
+  bool IsDefault() const;
+  bool GetBool() const;
+  int GetInt() const;
+  double GetDouble() const;
+  std::string GetString() const;
+  bool GetBoolDefault() const;
+  int GetIntDefault() const;
+  double GetDoubleDefault() const;
+  std::string GetStringDefault() const;
+  void Set(bool value);
+  void Set(int value);
+  void Set(double value);
+  void Set(const std::string& value);
+
+  static std::string From(bool b);
+  static std::string From(int i);
+  static std::string From(double d);
+ protected:
+  std::string value_, original_;
+  std::vector<std::string> validValues_;
+};
+
+class ArgParam : public Param {
+ public:
+  ArgParam(const std::string& name, const std::string& usage);
+  bool IsArgument() const;
+  std::string GetAcceptedValues() const;
+  bool IsDefault() const;
+  bool GetBool() const;
+  int GetInt() const;
+  double GetDouble() const;
+  std::string GetString() const;
+  bool GetBoolDefault() const;
+  int GetIntDefault() const;
+  double GetDoubleDefault() const;
+  std::string GetStringDefault() const;
+
+  const std::vector<std::string>& GetStrings() const;
+  void Set(bool value);
+  void Set(int value);
+  void Set(double value);
+  void Set(const std::string& value);
+  void AddValue(const std::string& value);
+ protected:
+  std::vector<std::string> values_;
+};
+
+#endif
+
diff --git a/src/util/StringUtils.cpp b/src/util/StringUtils.cpp
new file mode 100644
index 0000000..eb9c17d
--- /dev/null
+++ b/src/util/StringUtils.cpp
@@ -0,0 +1,139 @@
+#include "StringUtils.h"
+
+#include "boost/algorithm/string.hpp"
+
+using namespace std;
+
+const char* StringUtils::WHITESPACE_CHARS = " \t\n\v\f\r";
+
+vector<string> StringUtils::Split(const string& s, char delimiter) {
+  return Split<string>(s, delimiter);
+}
+
+vector<string> StringUtils::Split(const string& s, const string& delimiter) {
+  return Split<string>(s, delimiter);
+}
+
+vector<string> StringUtils::Fields(const string& s) {
+  return Fields<string>(s);
+}
+
+string StringUtils::ToLower(string s) {
+  boost::to_lower(s);
+  return s;
+}
+
+string StringUtils::ToUpper(string s) {
+  boost::to_upper(s);
+  return s;
+}
+
+bool StringUtils::IEquals(const string& x, const string& y) {
+  return boost::iequals(x, y);
+}
+
+string StringUtils::Replace(string s, const string& oldSubstring, const string& newSubstring) {
+  size_t find = 0;
+  while ((find = s.find(oldSubstring, find)) != string::npos) {
+    s.replace(find, oldSubstring.length(), newSubstring);
+    find += newSubstring.length();
+  }
+  return s;
+}
+
+bool StringUtils::StartsWith(const string& s, const string& substring) {
+  return substring.length() <= s.length()
+    ? s.compare(0, substring.length(), substring) == 0
+    : false;
+}
+
+bool StringUtils::IStartsWith(const string& s, const string& substring) {
+  return StartsWith(ToLower(s), ToLower(substring));
+}
+
+bool StringUtils::EndsWith(const string& s, const string& substring) {
+  return substring.length() <= s.length()
+    ? s.compare(s.length() - substring.length(), substring.length(), substring) == 0
+    : false;
+}
+
+bool StringUtils::IEndsWith(const string& s, const string& substring) {
+  return EndsWith(ToLower(s), ToLower(substring));
+}
+
+string StringUtils::Trim(string s) {
+  boost::trim(s);
+  return s;
+}
+
+string StringUtils::LTrim(string s) {
+  boost::trim_left(s);
+  return s;
+}
+
+string StringUtils::RTrim(string s) {
+  boost::trim_right(s);
+  return s;
+}
+
+bool StringUtils::IsNumeric(const string& s, bool allowNegative, bool allowDecimal) {
+  if (s.empty()) {
+    return false;
+  }
+
+  string::const_iterator i = s.begin();
+  if (allowNegative && *i == '-') {
+    ++i;
+  }
+
+  bool foundDecimal = false;
+
+  for (; i != s.end(); ++i) {
+    if (allowDecimal && *i == '.') {
+      if (foundDecimal) {
+        // Found two decimals
+        return false;
+      }
+      foundDecimal = true;
+    } else if (!isdigit(*i)) {
+      // Found non-digit character
+      return false;
+    }
+  }
+
+  // Decimal can't be last character
+  return !foundDecimal || *(--i) == '.';
+}
+
+string StringUtils::LineFormat(string s, unsigned limit, unsigned indentSize) {
+  if (indentSize >= limit) {
+    throw runtime_error("Limit must be greater than indent size");
+  }
+  stringstream lines;
+  string indent(indentSize, ' ');
+  unsigned contentLimit = limit - indentSize;
+
+  while (s.length() > contentLimit) {
+    size_t lineEnd;
+    if (isspace(s[contentLimit])) {
+      lineEnd = s.find_last_not_of(WHITESPACE_CHARS, contentLimit);
+    } else {
+      lineEnd = s.find_last_of(WHITESPACE_CHARS, contentLimit);
+      lineEnd = (lineEnd == string::npos)
+        ? lineEnd = contentLimit - 1
+        : lineEnd = s.find_last_not_of(WHITESPACE_CHARS, lineEnd);
+    }
+    if (lineEnd == string::npos) {
+      s = LTrim(s);
+      continue;
+    }
+    lines << indent << s.substr(0, lineEnd + 1) << endl;
+    s = LTrim(s.substr(lineEnd + 2));
+  }
+  lines << indent << s;
+  return lines.str();
+}
+
+StringUtils::StringUtils() {}
+StringUtils::~StringUtils() {}
+
diff --git a/src/util/StringUtils.h b/src/util/StringUtils.h
new file mode 100644
index 0000000..5e3078b
--- /dev/null
+++ b/src/util/StringUtils.h
@@ -0,0 +1,167 @@
+#ifndef STRINGUTILS_H
+#define STRINGUTILS_H
+
+#include <iomanip>
+#include <string>
+#include <sstream>
+#include <stdexcept>
+#include <vector>
+
+class StringUtils {
+ public:
+  // Convert from a string
+  template<typename T>
+  static T FromString(const std::string& s) {
+    T out;
+    if (!TryFromString(s, &out)) {
+      throw std::runtime_error("Could not convert string '" + s + "'");
+    }
+    return out;
+  }
+
+  //Convert from a string, returning false if conversion fails
+  template<typename T>
+  static bool TryFromString(const std::string& s, T* out) {
+    std::stringstream ss(s);
+    ss >> *out;
+    return ss.eof() && !ss.fail();
+  }
+  static bool TryFromString(const std::string& s, std::string* out) {
+    *out = s;
+    return true;
+  }
+
+  // Convert to a string
+  template<typename T>
+  static std::string ToString(const T& obj, int decimals = -1, bool fixedFloat = true) {
+    std::stringstream converter;
+    if (decimals >= 0) {
+      converter << std::fixed << std::setprecision(decimals);
+      if (fixedFloat) {
+        converter << std::fixed;
+      } else {
+        converter.unsetf(std::ios_base::floatfield);
+      }
+    } else {
+      converter << std::setprecision(8);
+    }
+    converter << obj;
+    return converter.str();
+  }
+
+  // Joins a vector of strings into a single string separated by a delimiter
+  template<typename T>
+  static std::string Join(const T values, const char delimiter ='\0') {
+    std::stringstream ss;
+    for (typename T::const_iterator i = values.begin(); i != values.end(); i++) {
+      if (i != values.begin() && delimiter != '\0') {
+        ss << delimiter;
+      }
+      ss << *i;
+    }
+    return ss.str();
+  }
+
+  // Split a string on a delimiter
+  static std::vector<std::string> Split(const std::string& s, char delimiter);
+  static std::vector<std::string> Split(const std::string& s, const std::string& delimiter);
+
+  template<typename T>
+  static std::vector<T> Split(const std::string& s, char delimiter) {
+    std::vector<T> tokens;
+    std::string::const_iterator from = s.begin();
+    for (std::string::const_iterator i = from; i != s.end(); ++i) {
+      if (*i == delimiter) {
+        tokens.push_back(FromString<T>(std::string(from, i)));
+        from = i + 1;
+      }
+    }
+    tokens.push_back(FromString<T>(std::string(from, s.end())));
+    return tokens;
+  }
+
+  template<typename T>
+  static std::vector<T> Split(const std::string& s, const std::string& delimiter) {
+    std::vector<T> tokens;
+    size_t from = 0;
+    size_t find;
+    while ((find = s.find(delimiter, from)) != std::string::npos) {
+      tokens.push_back(FromString<T>(s.substr(from, find - from)));
+      from = find + delimiter.length();
+    }
+    tokens.push_back(FromString<T>(s.substr(from)));
+    return tokens;
+  }
+
+  static std::vector<std::string> Fields(const std::string& s);
+
+  template<typename T>
+  static std::vector<T> Fields(const std::string& s) {
+    std::vector<T> fields;
+    std::string current;
+    for (std::string::const_iterator i = s.begin(); i != s.end(); i++) {
+      if (*i == ' ' || *i == '\t') {
+        if (!current.empty()) {
+          fields.push_back(FromString<T>(current));
+          current.clear();
+        }
+      } else {
+        current.push_back(*i);
+      }
+    }
+    if (!current.empty()) {
+      fields.push_back(FromString<T>(current));
+    }
+    return fields;
+  }
+
+  // Convert a string to lowercase
+  static std::string ToLower(std::string s);
+
+  // Convert a string to uppercase
+  static std::string ToUpper(std::string s);
+
+  // Compare two strings without case sensitivity
+  static bool IEquals(const std::string& x, const std::string& y);
+
+  // Replace all instances of a substring with a new substring
+  static std::string Replace(
+    std::string s, const std::string& oldSubstring, const std::string& newSubstring);
+
+  // Return whether a string begins with a substring
+  static bool StartsWith(const std::string& s, const std::string& substring);
+
+  // Return whether a string starts with a substring (case insensitive)
+  static bool IStartsWith(const std::string& s, const std::string& substring);
+
+  // Return whether a string ends with a substring
+  static bool EndsWith(const std::string& s, const std::string& substring);
+
+  // Return whether a string ends with a substring (case insensitive)
+  static bool IEndsWith(const std::string& s, const std::string& substring);
+
+  // Trim whitespace from the beginning and end of a string
+  static std::string Trim(std::string s);
+
+  // Trim whitespace from the beginning of a string
+  static std::string LTrim(std::string s);
+
+  // Trim whitespace from the end of a string
+  static std::string RTrim(std::string s);
+
+  // Return whether a string is numeric
+  static bool IsNumeric(
+    const std::string& s, bool allowNegative = true, bool allowDecimal = true);
+
+  // Break a string into lines limited by length
+  static std::string LineFormat(std::string s, unsigned limit, unsigned indentSize = 0);
+
+ private:
+  static const char* WHITESPACE_CHARS;
+
+  StringUtils();
+  ~StringUtils();
+};
+
+#endif
+
diff --git a/src/util/WinCrux.cpp b/src/util/WinCrux.cpp
new file mode 100644
index 0000000..4d871e8
--- /dev/null
+++ b/src/util/WinCrux.cpp
@@ -0,0 +1,193 @@
+/**
+ * \file WinCrux.cpp
+ * \brief Support functions need to compile Crux under native windows.
+ */
+
+#include <stdlib.h>
+#include <time.h>
+#include <Winsock2.h>
+#include "carp.h"
+#include "utils.h"
+#include "WinCrux.h"
+#include <iostream>
+#include <vector>
+
+
+using namespace std;
+
+// Windows GetTimeOfDay() code from http://www.suacommunity.com/dictionary/index.php
+
+#define DELTA_EPOCH_IN_MICROSECS  11644473600000000Ui64
+ 
+struct timezone {
+  int  tz_minuteswest; /* minutes W of Greenwich */
+  int  tz_dsttime;     /* type of dst correction */
+};
+ 
+// Definition of a gettimeofday function
+ 
+int gettimeofday(struct timeval *tv, struct timezone *tz) {
+// Define a structure to receive the current Windows filetime
+  FILETIME ft;
+ 
+// Initialize the present time to 0 and the timezone to UTC
+  unsigned __int64 tmpres = 0;
+  static int tzflag = 0;
+ 
+  if (NULL != tv) {
+    GetSystemTimeAsFileTime(&ft);
+ 
+// The GetSystemTimeAsFileTime returns the number of 100 nanosecond 
+// intervals since Jan 1, 1601 in a structure. Copy the high bits to 
+// the 64 bit tmpres, shift it left by 32 then or in the low 32 bits.
+    tmpres |= ft.dwHighDateTime;
+    tmpres <<= 32;
+    tmpres |= ft.dwLowDateTime;
+ 
+// Convert to microseconds by dividing by 10
+    tmpres /= 10;
+ 
+// The Unix epoch starts on Jan 1 1970.  Need to subtract the difference 
+// in seconds from Jan 1 1601.
+    tmpres -= DELTA_EPOCH_IN_MICROSECS;
+ 
+// Finally change microseconds to seconds and place in the seconds value. 
+// The modulus picks up the microseconds.
+    tv->tv_sec = (long)(tmpres / 1000000UL);
+    tv->tv_usec = (long)(tmpres % 1000000UL);
+  }
+ 
+  if (NULL != tz) {
+    if (!tzflag) {
+      _tzset();
+      tzflag++;
+    }
+  
+// Adjust for the timezone west of Greenwich
+      tz->tz_minuteswest = _timezone / 60;
+    tz->tz_dsttime = _daylight;
+  }
+ 
+  return 0;
+}
+
+char *realpath(const char * file_name, char * resolved_name) {
+
+  char * full_path_buffer = (char *) mymalloc(MAX_PATH * sizeof(char));
+  size_t needed_buff_size 
+    = GetFullPathName(file_name, MAX_PATH, full_path_buffer, NULL);
+
+  if (needed_buff_size == 0) {
+    // An error occurred.
+    LPSTR lpMsgBuf;
+    FormatMessage(
+      FORMAT_MESSAGE_ALLOCATE_BUFFER 
+      | FORMAT_MESSAGE_FROM_SYSTEM 
+      | FORMAT_MESSAGE_IGNORE_INSERTS,
+      NULL,
+      GetLastError(),
+      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+      (LPTSTR) &lpMsgBuf,
+      0,
+      NULL 
+    );
+    carp(CARP_FATAL, lpMsgBuf);
+
+  }
+
+  if (needed_buff_size > MAX_PATH) {
+    full_path_buffer = (char *) myrealloc(full_path_buffer, needed_buff_size);
+    needed_buff_size 
+    = GetFullPathName(file_name, MAX_PATH, full_path_buffer, NULL);
+  }
+
+  return full_path_buffer;
+}
+
+/* 
+This code was placed in the public domain by the author, 
+Sean Barrett, in November 2007. Do with it as you will. 
+(Seee the page for stb_vorbis or the mollyrocket source 
+page for a longer description of the public domain non-license). 
+*/ 
+
+// Public domain code from https://mollyrocket.com/forums/viewtopic.php?p=2529
+// map 'filename' and return a pointer to it. fill out *length and *un if not-NULL 
+void *stub_mmap(const char *filename, SIMPLE_UNMMAP *un) { 
+   HANDLE f = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ,  NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
+   HANDLE m; 
+   void *p; 
+   if (!f) return NULL; 
+   m = CreateFileMapping(f, NULL, PAGE_READONLY, 0, 0, NULL); 
+   if (!m) { CloseHandle(f); return NULL; } 
+   p = MapViewOfFile(m, FILE_MAP_READ, 0, 0, 0); 
+   if (!p) { CloseHandle(m); CloseHandle(f); return NULL; } 
+   if (un) { 
+      un->f = f; 
+      un->m = m; 
+      un->p = p; 
+   } 
+   return p; 
+} 
+
+void stub_unmmap(SIMPLE_UNMMAP *un) { 
+   UnmapViewOfFile(un->p); 
+   CloseHandle(un->m); 
+   CloseHandle(un->f); 
+} 
+
+int scandir(
+  const char *dirname, 
+  struct dirent ***namelist,
+  int (*select)(struct dirent *),
+  int (*compar)(const void *, const void *)
+) {
+  errno = 0;
+  
+  DIR *directory = opendir(dirname);
+  if (!directory) {
+    return -1;
+  }
+
+  struct dirent *entry;
+  vector<struct dirent *> *entries = new vector<struct dirent *>;
+  while(entry = readdir(directory)) {
+    if (!select || select(entry)) {
+      struct dirent *valid_entry = new struct dirent;
+      copy_dirent(entry, valid_entry);
+      entries->push_back(valid_entry);
+    }
+  }
+  if (errno) {
+    return -1;
+  }
+
+  *namelist = static_cast<struct dirent **>(malloc(sizeof(struct dirent *) * entries->size()));
+  copy(entries->begin(), entries->end(), *namelist);
+
+  return entries->size();
+}
+
+int alphasort(const void *d1, const void *d2) {
+
+  // FIXME this is only a stub
+  return 0;
+}
+
+char *mkdtemp(char *temp) {
+  
+  // Create temporary file name from template
+  char *dirname = _mktemp(temp);
+  
+  if (dirname) {
+    // Create the directory
+    int result = _mkdir(dirname);
+    if (result < 0) {
+      free(dirname);
+      dirname = NULL;
+    }
+  }
+
+  return dirname;
+
+}
diff --git a/src/util/WinCrux.h b/src/util/WinCrux.h
new file mode 100644
index 0000000..e8d49c5
--- /dev/null
+++ b/src/util/WinCrux.h
@@ -0,0 +1,65 @@
+#ifndef WINCRUX_H
+#define WINCRUX_H
+
+#ifdef _MSC_VER
+#define WIN32_LEAN_AND_MEAN
+#include <direct.h>
+#include <fcntl.h>
+#include <io.h>
+#include <string.h>
+#include <windows.h>
+#include "utils.h"
+#include "windirent.h"
+
+// The Windows C runtime has a hard limit on the 
+// number of simultaneously opened files
+#define WIN_MAX_OPEN_FILES 2048
+
+// Rename some functions to the windows version
+#define access _access
+#define pclose _pclose
+#define popen _popen
+#define chdir _chdir
+#define getcwd _getcwd
+#define mkdir(a, b) _mkdir(a)
+#define mkstemp _mktemp_s
+#define snprintf _snprintf
+
+#undef NO_ERROR
+// Turn off Microsoft min and max macros
+#undef max
+#undef min
+
+#define R_OK 04
+#define W_OK 02
+#define F_OK 00
+
+#define S_ISDIR(mode)  (((mode) & S_IFMT) == S_IFDIR)
+
+int gettimeofday(struct timeval *tv, struct timezone *tz);
+char *realpath(const char * file_name, char * resolved_name);
+
+typedef struct { 
+   HANDLE f; 
+   HANDLE m; 
+   void *p; 
+} SIMPLE_UNMMAP; 
+
+// map 'filename' and return a pointer to it.
+void *stub_mmap(const char *filename, SIMPLE_UNMMAP *un);
+
+// Release memory mapped file
+void stub_unmmap(SIMPLE_UNMMAP *un);
+
+int scandir(
+  const char *dirname, 
+  struct dirent ***namelist,
+  int (*select)(struct dirent *),
+  int (*compar)(const void *, const void *)
+);
+
+int alphasort(const void *d1, const void *d2);
+
+#endif
+#endif
+
diff --git a/src/util/crux-utils.cpp b/src/util/crux-utils.cpp
new file mode 100644
index 0000000..6a1178f
--- /dev/null
+++ b/src/util/crux-utils.cpp
@@ -0,0 +1,1669 @@
+/**
+ * \file crux-utils.cpp
+ * \brief General-use functions for crux
+ */
+
+#include <sys/types.h>
+#include <fstream>
+#include <errno.h>
+#include <sys/stat.h>
+#ifndef _MSC_VER
+#include <unistd.h>
+#include <sys/dir.h>
+#include <dirent.h>
+#endif
+#include <iostream>
+#include "crux-utils.h"
+#include "model/Database.h"
+#include "Params.h"
+#include "parameter.h"
+#include "Params.h"
+#include "StringUtils.h"
+#include "WinCrux.h"
+#include "io/LineFileReader.h"
+#include <boost/filesystem.hpp>
+#include <boost/asio.hpp>
+#include "FileUtils.h"
+#include "crux_version.h"
+
+using namespace std;
+
+/**
+ * PRECISION, determines the precision of the compare float, users
+ * should lower the number if need more precision
+ */
+static const FLOAT_T PRECISION = 0.000000005; 
+
+/**
+ * the maximum error in terms of Units in the Last Place. 
+ * This specifies how big an error we are willing to accept in terms of the value of the least significant 
+ * digit of the floating point numbers representation. 
+ * MAX_ULPS can also be interpreted in terms of how many representable floats 
+ * we are willing to accept between A and B. This function will allow MAX_ULPS-1 floats between A and B.
+ */
+static const int MAX_ULPS = 2;
+
+static const unsigned int TARGET_STRING_LENGTH = 6; //The length of string "target"
+static const unsigned int DECOY_STRING_LENGTH = 5; // The length of string "decoy"                                                                                                                                                                                             
+
+
+/* Functions for converting custom types to and from strings */
+
+static const int INVALID_ENUM_STRING = -10;
+/**
+ * The string version of the decoy types
+ */
+static const char* decoy_type_strings[NUMBER_DECOY_TYPES] = {
+  "invalid", "none", "reverse", "protein-shuffle",
+  "peptide-shuffle", "peptide-reverse"
+};
+
+DECOY_TYPE_T string_to_decoy_type(const string& name) {
+  int decoy_int = convert_enum_type_str(name.c_str(), INVALID_ENUM_STRING,
+                                        decoy_type_strings,
+                                        NUMBER_DECOY_TYPES);
+  if (decoy_int < 0) {
+    decoy_int = 0;
+  }
+
+  return (DECOY_TYPE_T)decoy_int;
+}
+
+DECOY_TYPE_T string_to_tide_decoy_type(const string& name) {
+  if (name == "none") {
+    return NO_DECOYS;
+  } else if (name == "shuffle") {
+    return PEPTIDE_SHUFFLE_DECOYS;
+  } else if (name == "peptide-reverse") {
+    return PEPTIDE_REVERSE_DECOYS;
+  } else if (name == "protein-reverse") {
+    return PROTEIN_REVERSE_DECOYS;
+  }
+  carp(CARP_FATAL, "Invalid decoy type %s", name.c_str());
+  return(INVALID_DECOY_TYPE); // Avoid compiler warning.
+}
+
+char* decoy_type_to_string(DECOY_TYPE_T type) {
+  return my_copy_string(decoy_type_strings[type]);
+}
+
+/**
+ * The string version of the mass format types
+ */
+static const char* mass_format_type_strings[NUMBER_MASS_FORMATS] = 
+  { "invalid", "mod-only", "total", "separate" };
+
+MASS_FORMAT_T string_to_mass_format(const string& name) {
+  int mass_format_int = convert_enum_type_str(name.c_str(), INVALID_ENUM_STRING, 
+                                              mass_format_type_strings, 
+                                              NUMBER_MASS_FORMATS);
+  if (mass_format_int < 0) {
+    mass_format_int = 0;
+  }
+
+  return (MASS_FORMAT_T)mass_format_int;
+}
+
+char* mass_format_type_to_string(MASS_FORMAT_T type) {
+  return my_copy_string(mass_format_type_strings[type]);
+}
+
+/**
+ * The string version of isotopic mass type (average, mono)
+ */
+static const char* mass_type_strings[NUMBER_MASS_TYPES] = {"average", "mono"};
+
+bool string_to_mass_type(const string& name, MASS_TYPE_T* result) {
+  bool success = true;
+  //this is copied from parameter.c::get_peptide_mass_type
+  int mass_type = convert_enum_type_str(name.c_str(), INVALID_ENUM_STRING, 
+                                        mass_type_strings, NUMBER_MASS_TYPES);
+
+  (*result) = (MASS_TYPE_T)mass_type;
+
+  if (mass_type < 0) {
+    success = false;
+  }
+  return success;
+}
+
+bool mass_type_to_string(MASS_TYPE_T type, char* type_str) {
+  bool success = true;
+  if ((int)type > NUMBER_MASS_TYPES) {
+    success = false;
+    type_str = NULL;
+  }
+
+  //  type_str = mass_type_strings[type];
+  strcpy(type_str, mass_type_strings[type]);
+
+  return success;
+}
+
+// replace peptide type
+/**
+ * The string versions of digest types
+ */
+static const char* digest_type_strings[NUMBER_DIGEST_TYPES] =
+  {"invalid", "full-digest", "partial-digest", "non-specific-digest"};
+
+DIGEST_T string_to_digest_type(const string& name) {
+  int clev_int = convert_enum_type_str(name.c_str(), INVALID_ENUM_STRING, 
+                                       digest_type_strings, 
+                                       NUMBER_DIGEST_TYPES);
+  if (clev_int < 0) {
+    clev_int = 0;
+  }
+
+  return (DIGEST_T)clev_int;
+}
+
+const char* digest_type_to_string(DIGEST_T type){
+  if( (int)type > NUMBER_DIGEST_TYPES){
+    return NULL;
+  }
+
+  const  char* type_str = digest_type_strings[type];
+  return type_str;
+}
+
+/**
+ * The string version of observed preprocessing types
+ */
+static const char* observed_preprocess_step_strings[NUMBER_PREPROCESS_STEPS] =
+  {"invalid", "discretize", "remove-precursor", "square-root", "remove-grass",
+   "ten-bin", "xcorr"};
+
+OBSERVED_PREPROCESS_STEP_T string_to_observed_preprocess_step(const string& name) {
+
+  int obs_int = convert_enum_type_str(name.c_str(), INVALID_ENUM_STRING,
+				      observed_preprocess_step_strings,
+				      NUMBER_PREPROCESS_STEPS);
+  if ( obs_int < 0 ){
+    obs_int = 0;
+  }
+  return (OBSERVED_PREPROCESS_STEP_T)obs_int;
+}
+
+char* observed_preproces_step_to_string(OBSERVED_PREPROCESS_STEP_T type) {
+  if ( (int)type > NUMBER_PREPROCESS_STEPS) {
+    return NULL;
+  }
+  char* obs_str = my_copy_string(observed_preprocess_step_strings[type]);
+  return(obs_str);
+}
+
+/**
+ * The string version of enzyme types
+ */
+static const char* enzyme_type_strings[NUMBER_ENZYME_TYPES] = {
+  "invalid", "no-enzyme", "trypsin", "trypsin/p", "chymotrypsin",
+  "elastase", "clostripain", "cyanogen-bromide", "iodosobenzoate",
+  "proline-endopeptidase", "staph-protease", "asp-n", "lys-c",
+  "lys-n" , "arg-c" , "glu-c" , "pepsin-a", "elastase-trypsin-chymotrypsin",
+  "custom-enzyme"
+};
+
+ENZYME_T string_to_enzyme_type(const string& name) {
+  int enz_int = convert_enum_type_str(name.c_str(), INVALID_ENUM_STRING, 
+                                      enzyme_type_strings, 
+                                      NUMBER_ENZYME_TYPES);
+  if (enz_int < 0) {
+    enz_int = 0;
+  }
+
+  return (ENZYME_T)enz_int;
+}
+
+const char* enzyme_type_to_string(ENZYME_T type){
+  if ((int)type > NUMBER_ENZYME_TYPES) {
+    return NULL;
+  }
+  const char* type_str = enzyme_type_strings[type];
+  return type_str;
+}
+
+/**
+ * The string version of mass types
+ */
+static const char* window_type_strings[NUMBER_WINDOW_TYPES] = 
+  {"invalid", "mass", "mz", "ppm"};
+
+WINDOW_TYPE_T string_to_window_type(const string& name) {
+  int window_int = convert_enum_type_str(name.c_str(), INVALID_ENUM_STRING, 
+                                         window_type_strings, 
+                                         NUMBER_WINDOW_TYPES);
+  if (window_int < 0) {
+    window_int = 0;
+  }
+
+  return (WINDOW_TYPE_T)window_int;
+}
+
+/**
+ * The string version of parsimony types
+ */
+static const char* parsimony_type_strings[NUMBER_PARSIMONY_TYPES] =
+  {"invalid", "simple", "greedy", "none"};
+
+PARSIMONY_TYPE_T string_to_parsimony_type(const string& name) {
+  int parsimony_int = convert_enum_type_str(name.c_str(), INVALID_ENUM_STRING,
+                                            parsimony_type_strings,
+                                            NUMBER_PARSIMONY_TYPES);
+  if (parsimony_int < 0) {
+    parsimony_int = 0;
+  }
+
+  return (PARSIMONY_TYPE_T)parsimony_int;
+}
+
+/**
+ * The string version of measure types
+ */
+static const char* measure_type_strings[NUMBER_MEASURE_TYPES] =
+  {"invalid", "RAW", "SIN", "NSAF", "dNSAF", "EMPAI"};
+
+MEASURE_TYPE_T string_to_measure_type(const string& name) {
+  int measure_int = convert_enum_type_str(name.c_str(), INVALID_ENUM_STRING,
+                                          measure_type_strings,
+                                          NUMBER_MEASURE_TYPES);
+  if (measure_int < 0) {
+    measure_int = 0;
+  }
+  
+  return (MEASURE_TYPE_T)measure_int;
+}
+
+
+char * measure_type_to_string(MEASURE_TYPE_T type) {
+  if ((int)type > NUMBER_MEASURE_TYPES) {
+    return NULL;
+  }
+
+  char * type_str = my_copy_string(measure_type_strings[type]);
+  
+  return type_str;
+}
+
+/**
+ * the string version of threshold type
+ */
+static const char* threshold_type_strings[NUMBER_THRESHOLD_TYPES] = {
+  "invalid", "none", "qvalue", "custom"
+};
+
+THRESHOLD_T string_to_threshold_type(const string& name) {
+
+  int threshold_int = convert_enum_type_str(name.c_str(), INVALID_ENUM_STRING,
+    threshold_type_strings,
+    NUMBER_THRESHOLD_TYPES);
+
+  if ( threshold_int < 0) {
+    threshold_int = 0;
+  }
+  return (THRESHOLD_T)threshold_int;
+
+}
+
+char* threshold_type_to_string(THRESHOLD_T type) {
+  if ( (int)type > NUMBER_THRESHOLD_TYPES) {
+    return NULL;
+  }
+
+  char* type_str = my_copy_string(threshold_type_strings[type]);
+
+  return type_str;
+}
+
+/**
+ * The string version of quantification level  types
+ */
+static const char* quant_level_type_strings[NUMBER_QUANT_LEVEL_TYPES] =
+  {"invalid", "peptide", "protein"};
+
+QUANT_LEVEL_TYPE_T string_to_quant_level_type(const string& name) {
+  int quant_int = convert_enum_type_str(name.c_str(), INVALID_ENUM_STRING,
+                                        quant_level_type_strings,
+                                        NUMBER_QUANT_LEVEL_TYPES);
+  if (quant_int < 0) {
+    quant_int = 0;
+  }
+  return (QUANT_LEVEL_TYPE_T)quant_int;
+}
+
+/**
+ * The string version of column types
+ */ 
+static const char* column_type_strings[NUMBER_COLTYPES] =
+  {"invalid", "int", "real", "string"};
+
+COLTYPE_T string_to_column_type(const string& name) {
+  int coltype_int = convert_enum_type_str(
+    name.c_str(),
+    INVALID_ENUM_STRING,
+    column_type_strings,
+    NUMBER_COLTYPES);
+
+  if (coltype_int < 0) {
+    coltype_int = 0;
+  }
+
+  return (COLTYPE_T)coltype_int;
+
+}
+
+/**
+ * The string version of comparison types
+ */
+static const char* comparison_type_strings[NUMBER_COMPARISONS] =
+  {"invalid", "lt", "lte", "eq", "gte", "gt", "neq"};
+
+COMPARISON_T string_to_comparison(const string& name) {
+  int comparison_int = convert_enum_type_str(
+    name.c_str(),
+    INVALID_ENUM_STRING,
+    comparison_type_strings,
+    NUMBER_COMPARISONS);
+
+  if (comparison_int < 0) {
+    comparison_int = 0;
+  }
+
+  return (COMPARISON_T)comparison_int;
+  
+}
+
+/*
+ * The string version of ion types
+ */
+static const char* ion_type_strings[NUMBER_ION_TYPES] = {
+  "a", "b", "c", "x", "y", "z", "p", "by", "bya", "all" };
+
+bool string_to_ion_type(const string& name, ION_TYPE_T* result) {
+  bool success = true;
+  int ion_type = convert_enum_type_str(name.c_str(), INVALID_ENUM_STRING, 
+                                       ion_type_strings, NUMBER_ION_TYPES);
+  (*result) = (ION_TYPE_T)ion_type;
+  if (ion_type < 0) {
+    success = false;
+  }
+  return success;
+}
+
+bool ion_type_to_string(ION_TYPE_T type,
+                        char* type_str) {
+  bool success = true;
+  if ((int)type > NUMBER_ION_TYPES) {
+    success = false;
+    type_str = NULL;
+  }
+  strcpy(type_str, ion_type_strings[type]);
+  return success;
+}
+
+/*
+ * The string version of ALGORITHM_TYPE_T
+ */
+static const char* algorithm_type_strings[NUMBER_ALGORITHM_TYPES] = {
+  "percolator", "rczar", "curve-fit",
+  "none", "all", "q-ranker"
+};
+
+bool string_to_algorithm_type(char* name, ALGORITHM_TYPE_T* result) {
+  bool success = true;
+
+  int algorithm_type = convert_enum_type_str(name, INVALID_ENUM_STRING,
+                                             algorithm_type_strings,
+                                             NUMBER_ALGORITHM_TYPES);
+  *result = (ALGORITHM_TYPE_T)algorithm_type;
+  if (algorithm_type < 0) {
+    success = false;
+  }
+  return success;
+}
+
+bool algorithm_type_to_string(ALGORITHM_TYPE_T type, char* type_str) {
+  bool success = true;
+  if ((int)type > NUMBER_ALGORITHM_TYPES) {
+    success = false;
+    type_str = NULL;
+  }
+  strcpy(type_str, algorithm_type_strings[type]);
+  return success;
+}
+
+/* 
+ * The string version of HARDKLOR_ALGORITHM_T
+ */
+static const char* hardklor_algorithm_type_strings[NUMBER_HK_ALGORITHM_TYPES] = {
+  "invalid", "basic", "fewest-peptides", "fast-fewest-peptides", 
+  "fewest-peptides-choice", "fast-fewest-peptides-choice"
+};
+
+static const char* hardklor_hardklor_algorithm_type_strings[NUMBER_HK_ALGORITHM_TYPES] = {
+  "invalid", "Basic", "FewestPeptides", "FastFewestPeptides",
+  "FewestPeptidesChoice", "FastFewestPeptidesChoice"
+};
+
+HARDKLOR_ALGORITHM_T string_to_hardklor_algorithm_type(const string& name) {
+  int hk_algorithm = convert_enum_type_str(name.c_str(), INVALID_ENUM_STRING,
+    hardklor_algorithm_type_strings, NUMBER_HK_ALGORITHM_TYPES);
+
+  if (hk_algorithm < 0) {
+    hk_algorithm = 0;
+  }
+
+  return (HARDKLOR_ALGORITHM_T)hk_algorithm;
+}
+
+string hardklor_hardklor_algorithm_type_to_string(
+  HARDKLOR_ALGORITHM_T type
+) {
+  return string(hardklor_hardklor_algorithm_type_strings[type]);
+}
+
+char* ion_type_to_string(ION_TYPE_T type) {
+
+  char* type_str = my_copy_string(ion_type_strings[type]);
+  return type_str;
+
+}
+
+
+/*
+ * The string version of SCORER_TYPE_T
+ */
+static const char* scorer_type_strings[NUMBER_SCORER_TYPES] = {
+  "spscore",
+  "xcorr_score",
+  "evalue_score",
+
+  "xcorr first",
+  "xcorr second",
+
+  "decoy_xcorr_qvalue",
+  "decoy_xcorr_peptide_qvalue",
+  "decoy_xcorr_PEP",
+
+  "decoy_evalue_qvalue",
+  "decoy_evalue_peptide_qvalue",
+  "decoy_evalue_pep",
+   
+  "logp_weibull_xcorr",
+  "logp_bonf_weibull_xcorr",
+  "logp_qvalue_weibull_xcorr",
+  "logp_weibull_PEP",
+  "logp_peptide_qvalue_weibull",
+
+  "percolator_score", 
+  "percolator_qvalue",
+  "percolator_peptide_qvalue",
+  "percolator_PEP",
+
+  "qranker_score", 
+  "qranker_qvalue",
+  "qranker_peptide_qvalue",
+  "qranker_PEP",
+
+  "barista_score", 
+  "barista_qvalue",
+  "barista_peptide_qvalue",
+  "barista_PEP",
+
+  "deltacn",
+  "deltalcn",
+  "by_ions_matched",
+  "by_ions_total",
+  "exact_pvalue",
+  "refactored_xcorr"
+};
+
+bool string_to_scorer_type(const string& name, SCORER_TYPE_T* result) {
+  bool success = true;
+  int scorer_type = convert_enum_type_str(name.c_str(), INVALID_ENUM_STRING, 
+                                          scorer_type_strings,
+                                          NUMBER_SCORER_TYPES);
+  *result = (SCORER_TYPE_T)scorer_type;
+  if (scorer_type < 0) {
+    success = false;
+  }
+  return success;
+}
+
+const char* scorer_type_to_string(SCORER_TYPE_T type) {
+  if ((int)type > NUMBER_SCORER_TYPES) {
+    return NULL;
+  }
+  return scorer_type_strings[type];
+}
+
+
+/**
+ * returns a heap allocated copy of the src string
+ */
+char* my_copy_string(const char* src) {
+  if (src == NULL) {
+    return NULL;
+  }
+  int length = strlen(src) +1; // +\0
+  char* copy = 
+    (char *)mymalloc(sizeof(char)*length);
+  return strncpy(copy, src, length);  
+}
+
+/**
+ * Returns copy of the src string upto the specified length.
+ * Includes a null terminating character.
+ * The string is heap allocated; thus, user must free.
+ */
+char* copy_string_part(const char* src, int length) {
+  char* copy = (char*)mycalloc(length+1, sizeof(char));
+  strncpy(copy, src, length);
+  copy[length] = '\0';
+  return copy;
+}
+
+/**
+ * \returns the 0 if equal, 1 if float_a is larger, -1 if float_b is larger
+ * compare the absolute value of the difference of two numbers with an 
+ * appropriate epsilon to get relations.
+ * Multiplying the epsilon by sum of the comparands adjusts the comparison 
+ * to the range of the numbers, allowing a single epsilon to be used for many, 
+ * or perhaps all compares.
+ */
+/*inline*/ int compare_float(FLOAT_T float_a, FLOAT_T float_b) {
+  FLOAT_T EPSILON = PRECISION;
+  FLOAT_T sum = float_a + float_b;
+  if (fabsf(float_a - float_b) <= fabsf(sum)* EPSILON) { // a == b
+    return 0;
+  } else if ((float_a - float_b) > fabsf(sum)* EPSILON) { // a > b
+    return 1;
+  } else { // a < b
+    return -1;
+  }
+}
+
+/**
+ * Compares two numbers and returns true if when rounded to the given
+ * precision they are equal.  Otherwise, returns false.  
+ * E.g. is_equal(0.10, 0.14, 1) -> true. is_equal(0.10, 0.15, 1) -> false
+ */
+bool is_equal(FLOAT_T a, FLOAT_T b, int precision) {
+  a = (a * pow((FLOAT_T) 10.0, (FLOAT_T) precision)) + 0.5;
+  b = (b * pow((FLOAT_T) 10.0, (FLOAT_T) precision)) + 0.5;
+  return (int)a == (int)b;
+}
+
+/**
+ * parses the filename and path  
+ * returns an array A, with A[0] the filename and A[1] the path to the filename
+ * returns A[1] NULL if only a filename was passed in
+ * ex) ../../file_name => returns filename , ../../
+ *     file_name => returns filename, NULL
+ *\returns A heap allocated array of both filename and path
+ */
+char** parse_filename_path(const string& file) {
+  int len = file.length();
+  int end_idx = len;
+  int end_path = -1;  // index of where the last "/" is located
+  char* path = NULL;
+  char* filename = NULL;
+  char** result = (char**)mycalloc(2, sizeof(char*));
+
+  for (; end_idx > 0; --end_idx) {
+    if (file[end_idx - 1] == '/') {
+      end_path = end_idx;
+      break;
+    }
+  }
+  // copy path, if there is a "/" in the file
+  if (end_path != -1) {
+    path = copy_string_part(file.c_str(), end_path);
+  }
+  // copy filename
+  filename = copy_string_part(&(file.c_str()[end_idx]), len); 
+  
+  // set result with filename and path
+  result[0] = filename;
+  result[1] = path;
+  
+  return result;
+}
+
+/**
+ * \brief Parses the filename, path, and file extension of given string.
+ *  
+ * The array returned, A, contains the filename (A[0]) striped of the
+ * given file extension and the path (A[1]).  If extension is NULL,
+ * strips all characters after the last "." from the filename.  Use
+ * parse_filename_path() to return filename with extension.  
+ * Returned path is NULL if no "/" in given name.
+ * extension. e.g. Given "../../filname.ext" and ".ext" returns
+ * A[0]="filename" A[1]="../../".  Given "filename" returns A[0] =
+ * NULL and A[1] = "filename". 
+ *
+ * \returns A heap allocated array of filename striped of extension and
+ * path.
+ */
+char** parse_filename_path_extension(
+  const char* file, ///< filename and path to parse -in
+  const char* extension ///< extension to look for (includes leading .) --in
+) {
+
+  carp(CARP_DETAILED_DEBUG, "Given path/file %s and ext %s", file, extension);
+  char** file_path_array = parse_filename_path(file);
+  char* trimmed_filename = file_path_array[0];
+
+  // look for extension
+  if (extension != NULL) {
+    carp(CARP_DETAILED_DEBUG, "File trimmed of path is %s", trimmed_filename);
+    if (!StringUtils::EndsWith(trimmed_filename, extension)) {
+      return file_path_array;  // extension not found, don't change filename
+    }
+
+    int file_len = strlen(trimmed_filename);
+    int ext_len = strlen(extension);
+    // after comparing the whole extension, it matched
+    trimmed_filename[file_len - ext_len] = '\0';
+
+  } else { // find the last "."
+    char* dot = strrchr(trimmed_filename, '.');
+    if (dot != NULL) {
+      *dot = '\0';
+    }
+  }
+
+  carp(CARP_DETAILED_DEBUG, "Final trimmed filename %s", trimmed_filename);
+
+
+  return file_path_array;
+}
+
+/**
+ * parses the filename
+ * ex) ../../file_name => returns filename
+ *\returns A heap allocated array of filename
+ */
+char* parse_filename(const char* file) {
+  int len = strlen(file);
+  int end_idx = len;
+  int end_path = -1;  // index of where the last "/" is located
+  char* filename = NULL;
+  
+  for (; end_idx > 0; --end_idx) {
+    if (strncmp(&file[end_idx - 1], "/", 1) == 0) {
+      end_path = end_idx;
+      break;
+    }
+  }
+  
+  // copy filename
+  filename = copy_string_part(&file[end_path], len); 
+  
+  return filename;
+}
+
+/**
+ * convert the integer into a string
+ * \returns a heap allocated string
+ */
+char* int_to_char(unsigned int i) {
+  unsigned int digit = i / 10;
+  char* int_string = (char*)mycalloc(digit+2, sizeof(char));
+  sprintf(int_string, "%d", i);
+  return int_string;
+}
+ 
+/**
+ * convert the integer into a string
+ * \returns a heap allocated string
+ */
+char* signed_int_to_char(int i) {
+  int digit = abs(i)/ 10;
+  char* int_string = (char*)mycalloc(digit+2, sizeof(char));
+  sprintf(int_string, "%d", i);
+  return int_string;
+}
+
+/**
+ * given two strings return a concatenated third string
+ * \returns a heap allocated string that concatenates the two inputs
+ */
+char* cat_string(const char* string_one, const char* string_two) {
+  int len_one = strlen(string_one);
+  int len_two = strlen(string_two);
+  
+  char* result = (char*)mycalloc(len_one + len_two + 1, sizeof(char));
+  strncpy(result, string_one, len_one);
+  strncpy(&result[len_one], string_two, len_two);
+  return result;
+}
+
+/**
+ * Adds the fileroot parameter to a string as a prefix.
+ */
+string prefix_fileroot_to_name(const string& name) {
+  string fileroot = Params::GetString("fileroot");
+  return (fileroot.empty()) ? name : fileroot + '.' + name;
+}
+
+/**
+ * \returns the filepath 'output_dir'/'fileroot'.'filename' 
+ */
+string make_file_path(
+  const string& filename ///< the name of the file
+  ) {
+  string output_directory = Params::GetString("output-dir");
+  string fileroot = Params::GetString("fileroot");
+
+  ostringstream name_builder;
+  name_builder << output_directory;
+
+  if (output_directory[output_directory.length() - 1] != '/' ) {
+    name_builder << "/";
+  }
+
+  if (!fileroot.empty()) {
+    name_builder << fileroot << ".";
+  }
+
+  name_builder << filename;
+
+  return name_builder.str();
+}
+
+/**
+ * Given the path and the filename return a file with path
+ * "path/filename".  Returns filename unchanged if path = NULL.
+ * \returns a heap allocated string, "path/filename"
+ */
+char* get_full_filename(const char* path, const char* filename) {
+  char* result = NULL;
+  if (path == NULL || strlen(path) == 0) {
+    result = my_copy_string(filename);
+  } else {
+    // TODO (BF 26-Feb-08) don't add second / if path already ends in /
+    char* ready_path = cat_string(path, "/");
+    result = cat_string(ready_path, filename);
+    free(ready_path);
+  }
+  return result;
+}
+
+/**
+ * returns the file size of the given filename
+ */
+long get_filesize(char *FileName) {
+    struct stat file;
+    // return file size
+    if (!stat(FileName, &file)) {
+      return file.st_size;
+    }
+    return 0;
+}
+
+/**
+ * \brief A function for creating a directory to hold output files from crux.
+ * 
+ * Tries to create a the named directory for use as the output directory for crux.
+ * If the overwrite option is true, an existing directory wtih that
+ * name will not cause an error. 
+ * 
+ * \returns 0 if successful, -1 if an error occured.
+*/
+int create_output_directory(
+  const string& output_folder, // Name of output folder.
+  bool overwrite  // Whether or not to overwrite an existing dir 
+) {
+  int result = -1;
+  bool path_is_directory = false;
+  bool path_exists = false;
+  struct stat stat_buffer;
+
+  // Does the output directory alredy exist?
+  if (stat(output_folder.c_str(), &stat_buffer)) {
+    if (errno == ENOENT) {
+      // stat failed because the path doesn't exist.
+      path_exists = false;
+      path_is_directory = false;
+    } else {
+      // stat failed for some other reason
+      carp(
+        CARP_ERROR,
+        "Unable to check for status of output directory '%s': %s.\n",
+        output_folder.c_str(),
+        strerror(errno)
+      );
+      result = -1;
+    }
+  } else {
+    path_exists = true;
+    path_is_directory = S_ISDIR(stat_buffer.st_mode);
+  }
+
+  if (path_exists) {
+    if (!path_is_directory) {
+      carp(CARP_ERROR,
+        "A non-directory file named '%s' already exists,\n"
+        "so that name can't be used for an output directory.\n",
+        output_folder.c_str());
+      result = -1;
+    } else {
+      if (!overwrite) {
+        carp(CARP_WARNING,
+          "The output directory '%s' already exists.\nExisting files will not"
+          " be overwritten.", output_folder.c_str());
+        result = 0;
+      } else {
+        carp(CARP_WARNING,
+          "The output directory '%s' already exists.\nExisting files will be overwritten.",
+          output_folder.c_str());
+        result = 0;
+      }
+    }
+  } else {
+    // The directory doesn't exist, so we can create it.
+    // Does this accomodate the case where one or more of the
+    // parent directories doesn't exit?
+    int dir_access = S_IRWXU + S_IRWXG + S_IRWXO;
+    if (!boost::filesystem::create_directories(output_folder)) {
+      // mkdir failed
+      carp(CARP_ERROR, "Unable to create output directory '%s': %s.\n",
+        output_folder.c_str(), strerror(errno));
+      result = -1;
+    } else {
+      result = 0;
+      carp(CARP_INFO, "Writing results to output directory '%s'.", output_folder.c_str());
+    }
+  }
+  return result;
+} 
+
+/**
+ * \brief Take a filename, strip its leading path information (if
+ * any) and file extension (if any).  Tries all file extensions until
+ * one is found.  Add a new path (if given) and a new suffix (exension).
+ *
+ * If given ../dir/filename.ext, [.txt, .ext, t], .new-ext, otherdir
+ * would return  otherdir/filename.new-ext 
+ * \returns A heap allocated filename
+ */
+char* generate_name_path(
+  const char* filename,
+  vector<const char*> old_suffixes,
+  const char* new_suffix,
+  const char* new_path
+) {
+  // check the filename for the extension.  Use the first that matches
+  for (size_t suffix_idx = 0; suffix_idx < old_suffixes.size(); suffix_idx++) {
+    if (StringUtils::IEndsWith(filename, old_suffixes[suffix_idx])) {
+      return generate_name_path(filename, old_suffixes[suffix_idx],
+                                new_suffix, new_path);
+    }
+  }
+  // if we got to here, none of the suffixes were found, so it
+  // doesn't matter which we use
+  return generate_name_path(filename, "", new_suffix, new_path);
+
+}
+
+/**
+ * \brief Take a filename, strip its leading path information (if
+ * any) and file extension (if any).  Add a new path (if given) and a
+ * new suffix (exension).
+ *
+ * If given ../dir/filename.ext, .new-ext, .ext, otherdir would return
+ * otherdir/filename.new-ext 
+ * \returns A heap allocated filename
+ */
+char* generate_name_path(
+  const char* filename,
+  const char* old_suffix,
+  const char* new_suffix,
+  const char* new_path
+) {
+  carp(CARP_DEBUG, "Generate name given filename '%s', old suffix '%s', " \
+       "new suffix '%s', new path '%s'", 
+       filename, old_suffix, new_suffix, new_path);
+
+  // parse path, filename, extension
+  char** name_path = parse_filename_path_extension(filename, old_suffix);
+
+  // add the extension
+  char* new_name = cat_string(name_path[0], new_suffix);
+
+  // add path to new filename
+  char* full_new_name = get_full_filename(new_path, new_name);
+
+  // cleanup
+  free(name_path[0]);
+  free(name_path[1]);
+  free(name_path);
+  free(new_name);
+
+  carp(CARP_DEBUG, "Final name is '%s'", full_new_name);
+  return full_new_name;
+}
+/**
+ * given a fasta_file name it returns a name with the name_tag add to the end
+ * Suffix may be NULL
+ * format: suffix_myfasta_nameTag
+ * \returns A heap allocated file name of the given fasta file
+ */
+char* generate_name(
+  const char* fasta_filename,
+  const char* name_tag,
+  const char* file_extension,
+  const char* suffix
+) {
+  int len = strlen(fasta_filename);
+  int end_path = len;  // index of where the "." is located in the file
+  char* name = NULL;
+  char* after_suffix = NULL;
+  int suffix_length = 0;
+  char** file_n_path = NULL;
+  int length = 0;
+
+  // cut off the file extension if needed
+  int end_idx;
+  for (end_idx = len; end_idx > 0; --end_idx) {
+    if (strcmp(&fasta_filename[end_idx - 1], file_extension) == 0) {
+      end_path = end_idx - 1;
+      break;
+    }
+  }
+  
+  // check suffix
+  if (suffix != NULL) {
+    suffix_length = strlen(suffix);
+    file_n_path = parse_filename_path(fasta_filename);
+  }
+
+  name = (char*)mycalloc(
+      suffix_length + end_path + strlen(name_tag) + 1, sizeof(char));
+  after_suffix = name;
+  
+  // if suffix exit add to top
+  if (suffix_length != 0) {
+    length = strlen(file_n_path[1]);
+    if (file_n_path[1] != NULL) {
+      strncpy(name, file_n_path[1], length);
+      after_suffix = &name[length];
+    }    
+    strncpy(after_suffix, suffix, suffix_length);
+    after_suffix = &after_suffix[suffix_length];
+    
+    length = strlen(file_n_path[0]);
+    
+    strncpy(after_suffix, file_n_path[0], (length - (len-end_path)));
+    after_suffix = &after_suffix[(length - (len-end_path))];
+    
+    free(file_n_path[0]);
+    free(file_n_path[1]);
+    free(file_n_path);
+  } else {
+    strncpy(after_suffix, fasta_filename, end_path);
+  }
+  
+  strcat(after_suffix, name_tag);
+  return name;
+}
+
+/**
+ * checks if each AA is an AA
+ *\returns true if sequence is valid else, false
+ */
+bool valid_peptide_sequence(const string& sequence) {
+  for (string::const_iterator i = sequence.begin(); i != sequence.end(); i++) {
+    if (!isupper(*i)) {
+      return false;
+    }
+  }
+  return true;
+}
+
+/**
+ * \brief Open and create a file of the given name in the given
+ * directory.
+ *
+ * Assumes the directory exists.  Fails if file can't be opened or if
+ * file exists and overwrite is false.
+ *\returns A file handle to the newly created file.
+ */
+FILE* create_file_in_path(
+  const string& filename,  ///< the filename to create & open -in
+  const string& directory,  ///< the directory to open the file in -in
+  bool overwrite  ///< replace file (T) or die if exists (F)
+) {
+  char* file_full_path = get_full_filename(directory.c_str(), filename.c_str());
+  // FIXME CEG consider using stat instead
+  FILE* file = fopen(file_full_path, "rb"); //to test if file exists
+  if (file != NULL) {
+    //The file exists, are we allowed to overwrite it?
+    fclose(file);
+    file = NULL;
+    if (!overwrite) {
+        // Not allowed to overwrite, we must die.
+        carp(CARP_FATAL, 
+          "The file '%s' already exists and cannot be overwritten. "
+          "Use --overwrite T to replace or choose a different output file name",
+          file_full_path);
+    } else {
+      // Allowed to overwrite, send warning message.
+      carp(CARP_WARNING, 
+        "The file '%s' already exists and will be overwritten.", file_full_path);
+    }
+  }
+  
+  file = fopen(file_full_path, "wb+"); //read and write, replace existing
+
+  if (file == NULL) {
+    carp(CARP_FATAL, "Failed to create and open file: %s", file_full_path);
+  }
+  
+  free(file_full_path);
+
+  return file;
+}
+
+ofstream* create_stream_in_path(
+  const char* filename,  ///< the filename to create & open -in
+  const char* directory,  ///< the directory to open the file in -in
+  bool overwrite  ///< replace file (T) or die if exists (F)
+) {
+  char* file_full_path = get_full_filename(directory, filename);
+  // FIXME CEG consider using stat instead
+  FILE* file = fopen(file_full_path, "rb"); //to test if file exists
+  if (file != NULL) {  
+    //The file exists, are we allowed to overwrite it?
+    fclose(file);
+    file = NULL;
+    if (!overwrite) {
+        // Not allowed to overwrite, we must die.
+        carp(CARP_FATAL, 
+          "The file '%s' already exists and cannot be overwritten. "
+          "Use --overwrite T to replace or choose a different output file name",
+          file_full_path);
+    } else {
+      // Allowed to overwrite, send warning message.
+      carp(CARP_WARNING, 
+        "The file '%s' already exists and will be overwritten.", file_full_path);
+    }
+  }
+  
+  ofstream* fout = new ofstream(file_full_path);
+
+  if (fout == NULL) {
+    carp(CARP_FATAL, "Failed to create and open file: %s", file_full_path);
+  }
+  free(file_full_path);
+  return fout;
+}
+
+bool get_first_last_scan_from_string(
+  const std::string& const_scans_string,
+  int& first_scan,
+  int& last_scan
+  ) {
+
+  set<int> scans;
+
+  if (get_scans_from_string(const_scans_string, scans)) {
+    first_scan = *(scans.begin()++);
+    last_scan = *(scans.rbegin()++);
+    carp(CARP_DEBUG, "scan string:%s %i %i", const_scans_string.c_str(), first_scan, last_scan);
+    return true;
+  } else {
+    return false;
+  }
+}
+
+bool get_scans_from_string(
+  const string& const_scans_string,
+  set<int>& scans) {
+  scans.clear();
+
+  //first tokenize by comma.
+  vector<string> tokens_comma = StringUtils::Split(const_scans_string, ',');
+  if (tokens_comma.size() > 1) {
+    carp_once(CARP_WARNING, "Multiple scans detected in line %s. "
+      "Crux currently only handles "
+      "first_scan - last_scan properly", const_scans_string.c_str());
+  }
+  int temp_scan;
+
+  for (size_t idx1 = 0; idx1 < tokens_comma.size(); idx1++) {
+    string current = tokens_comma[idx1];
+    if (current.find("-") == string::npos) {
+      if (StringUtils::TryFromString(current, &temp_scan)) {
+        scans.insert(temp_scan);
+      } else {
+        carp(CARP_ERROR, "Error parsing scans line:%s", const_scans_string.c_str());
+        return false;
+      }
+    } else {
+      vector<string> tokens_dash = StringUtils::Split(tokens_comma[idx1], '-');
+      if (tokens_dash.size() != 2) {
+        carp(CARP_ERROR, "Error parsing scans line:%s here:%s",
+          const_scans_string.c_str(), tokens_comma[idx1].c_str());
+        return false;
+      }
+      int temp_scan2;
+      bool success = StringUtils::TryFromString(tokens_dash[0], &temp_scan);
+      success &= StringUtils::TryFromString(tokens_dash[1], &temp_scan2);
+      if (!success || temp_scan > temp_scan2) {
+        carp(CARP_ERROR, "Error parsing scans line:%s here: %s", 
+          const_scans_string.c_str(), tokens_comma[idx1].c_str());
+      }
+      for (int idx3 = temp_scan;idx3 <= temp_scan2 ; idx3++) {
+        scans.insert(idx3);
+      }
+    }
+  }
+  return true;
+}
+
+/**
+ * User define our upper and our lower bounds.
+ * The random number will always be 
+ * between low and high, inclusive.
+ * There is no seeding in this function, user must do it for themselves
+ *\returns a random number between the interval user provides
+ */
+int get_random_number_interval(
+  int low, ///< the number for lower bound -in
+  int high ///< the number for higher bound -in
+) {  
+  return (myrandom_limit(high - low + 1) + low);
+}
+
+/**
+ *\returns the number of digits in the number
+ */
+int get_number_digits(
+  int number ///< the number to count digits
+) {
+  int idx = 0;
+  for (; number >= 10; ++idx) {
+    number = number/10;    
+  }
+  return ++idx;
+}
+
+void swap_quick(
+  FLOAT_T* a,
+  int idx,
+  int jdx
+) {
+  FLOAT_T temp = 0;
+  temp = a[idx];
+  a[idx] = a[jdx];
+  a[jdx] = temp;
+}
+ 
+long Random(int i, int j) {
+  return i + myrandom_limit(j-i+1);
+}
+
+void quick_sort(FLOAT_T a[], int left, int right) {
+  int last = left, i;
+
+  if (left >= right) return;
+  
+  swap_quick(a, left, Random(left, right));
+  for (i = left + 1; i <= right; i++) {
+    if (a[i] > a[left]) { /// CHECK THIS!!
+      swap_quick(a, ++last, i);
+    }
+  }
+  swap_quick(a, left, last);
+  quick_sort(a, left, last-1);
+  quick_sort(a, last+1, right);
+}
+
+void quicksort(FLOAT_T a[], int array_size) {
+  quick_sort(a, 0, array_size - 1);
+}
+
+/**
+ * \brief Shuffle an array of floats.  Uses the Knuth algorithm.  Uses
+ * get_random_number_interval() to generate random numbers. 
+ */
+void shuffle_floats(FLOAT_T* array, int size) {
+  if (array == NULL) {
+    carp(CARP_ERROR, "Cannot shuffle NULL array.");
+    return;
+  }
+  int idx, switch_idx;
+  int last_element_idx = size - 1;
+  FLOAT_T temp_value;
+  for (idx = 0; idx < size; idx++) {
+    switch_idx = get_random_number_interval(idx, last_element_idx);
+    temp_value = array[idx];
+    array[idx] = array[switch_idx];
+    array[switch_idx] = temp_value;
+  }
+}
+
+/**
+ * Fits a three-parameter Weibull distribution to the input data. 
+ * Implementation of Weibull distribution parameter estimation from 
+ * http:// www.chinarel.com/onlincebook/LifeDataWeb/rank_regression_on_y.htm
+ * \returns eta, beta, c (which in this case is the amount the data should
+ * be shifted by) and the best correlation coefficient
+ */
+void fit_three_parameter_weibull(
+  FLOAT_T* data, ///< the data to be fit -in
+  int fit_data_points, ///< the number of data points to fit -in
+  int total_data_points, ///< the total number of data points to fit -in
+  FLOAT_T min_shift, ///< the minimum shift to allow -in
+  FLOAT_T max_shift, ///< the maximum shift to allow -in
+  FLOAT_T step,      ///< step for shift -in
+  FLOAT_T corr_threshold, ///< minimum correlation, else no fit -in
+  FLOAT_T* eta,      ///< the eta parameter of the Weibull dist -out
+  FLOAT_T* beta,      ///< the beta parameter of the Weibull dist -out
+  FLOAT_T* shift,     ///< the best shift -out
+  FLOAT_T* correlation   ///< the best correlation -out
+) {
+  FLOAT_T correlation_tolerance = 0.1;
+  
+  FLOAT_T best_eta = 0.0;
+  FLOAT_T best_beta = 0.0;
+  FLOAT_T best_shift = 0.0;
+  FLOAT_T best_correlation = 0.0;
+
+  FLOAT_T cur_eta = 0.0;
+  FLOAT_T cur_beta = 0.0;
+  FLOAT_T cur_correlation = 0.0;
+  FLOAT_T cur_shift = 0.0;
+
+  for (cur_shift = max_shift; cur_shift > min_shift ; cur_shift -= step) {
+
+    fit_two_parameter_weibull(data, fit_data_points, total_data_points, 
+                              cur_shift, &cur_eta, &cur_beta, &cur_correlation);
+    //According to the definition of the weibull distribution,
+    //https://en.wikipedia.org/wiki/Weibull_distribution
+    //the eta and beta parameters both have to be >0.
+    //Put in a check here so that any fit needs to satisfy these constraints
+    //In order to be considered.
+    //SJM 2016_03_03
+    if (cur_beta > 0 && cur_eta > 0 && cur_correlation > best_correlation){
+      best_eta = cur_eta;
+      best_beta = cur_beta;
+      best_shift = cur_shift;
+      best_correlation = cur_correlation;
+    } else if (cur_correlation < best_correlation - correlation_tolerance) {
+      break;
+    }
+  }
+
+  // Only store the parameters if the fit was good enough.
+  *correlation = best_correlation;
+  if (best_correlation >= corr_threshold) {
+    *eta = best_eta;
+    *beta = best_beta;
+    *shift = best_shift;
+  } else {
+    *eta = 0.0;
+    *beta = 0.0;
+    *shift = 0.0;
+  }
+  carp(CARP_DEBUG, "e:%g b:%g s:%g c:%g", *eta, *beta, *shift, *correlation);
+}
+
+/**
+ * Fits a two-parameter Weibull distribution to the input data. 
+ *
+ * Called by the three parameter weibull fitting function to see if
+ * the proposed shift gives the best correlation.  If there are too
+ * few data points, sets correlation to 0 (minimum value).
+ * http:// www.chinarel.com/onlincebook/LifeDataWeb/rank_regression_on_y.htm
+ * \returns eta, beta and the correlation coefficient.
+ */
+void fit_two_parameter_weibull(
+    FLOAT_T* data, ///< the data to be fit. should be in descending order -in
+    int fit_data_points, ///< the number of data points to fit -in
+    int total_data_points, ///< the total number of data points -in
+    FLOAT_T shift, ///< the amount by which to shift our data -in
+    FLOAT_T* eta,      ///< the eta parameter of the Weibull dist -out
+    FLOAT_T* beta,      ///< the beta parameter of the Weibull dist -out
+    FLOAT_T* correlation ///< the best correlation -out
+) {
+  FLOAT_T* X = (FLOAT_T*)mymalloc(sizeof(FLOAT_T) * fit_data_points); //hold data here
+
+  // transform data into an array of values for fitting
+  // shift (including only non-neg data values) and take log
+  int idx;
+  for (idx = 0; idx < fit_data_points; idx++) {
+    FLOAT_T score = data[idx] + shift; // move right by shift
+    if (score <= 0.0) {
+      carp(CARP_DEBUG, "Reached negative score at idx %i", idx);
+      fit_data_points = idx;
+      break;
+    } 
+    X[idx] = log(score);
+    // carp(CARP_DEBUG, "X[%i]=%.6f=ln(%.6f)", idx, X[idx], score);
+  }
+
+  FLOAT_T* Y   = (FLOAT_T*)mymalloc(sizeof(FLOAT_T) * fit_data_points);
+  for (idx = 0; idx < fit_data_points; idx++) {
+    int reverse_idx = total_data_points - idx;
+    FLOAT_T F_T_idx = (reverse_idx - 0.3) / (total_data_points + 0.4);
+    Y[idx] = log( -log(1.0 - F_T_idx) );
+    //carp(CARP_DEBUG, "Y[%i]=%.6f", idx, Y[idx]);
+  }
+
+  int N = fit_data_points; // rename for formula's sake
+  FLOAT_T sum_Y  = 0.0;
+  FLOAT_T sum_X  = 0.0;
+  FLOAT_T sum_XY = 0.0;
+  FLOAT_T sum_XX = 0.0;
+  for (idx = 0; idx < fit_data_points; idx++) {
+    sum_Y  += Y[idx];
+    sum_X  += X[idx];
+    sum_XX += X[idx] * X[idx];
+    sum_XY += X[idx] * Y[idx];
+  }
+  carp(CARP_DETAILED_DEBUG, "sum_X=%.6f", sum_X);
+  carp(CARP_DETAILED_DEBUG, "sum_Y=%.6f", sum_Y);
+  carp(CARP_DETAILED_DEBUG, "sum_XX=%.6f", sum_XX);
+  carp(CARP_DETAILED_DEBUG, "sum_XY=%.6f", sum_XY);
+
+  FLOAT_T b_num    = sum_XY - (sum_X * sum_Y / N);
+  carp(CARP_DETAILED_DEBUG, "b_num=%.6f", b_num);
+  FLOAT_T b_denom  = sum_XX - sum_X * sum_X / N;
+  carp(CARP_DETAILED_DEBUG, "b_denom=%.6f", b_denom);
+  FLOAT_T b_hat    = b_num / b_denom;
+
+  FLOAT_T a_hat    = (sum_Y - b_hat * sum_X) / N;
+  *beta = b_hat;
+  *eta  = exp( - a_hat / *beta );
+
+  FLOAT_T c_num   = 0.0;
+  FLOAT_T c_denom_X = 0.0;
+  FLOAT_T c_denom_Y = 0.0;
+  FLOAT_T mean_X = sum_X / N;
+  FLOAT_T mean_Y = sum_Y / N;
+  for (idx = 0; idx < N; idx++) {
+    FLOAT_T X_delta = X[idx] - mean_X; 
+    FLOAT_T Y_delta = Y[idx] - mean_Y;
+    c_num += X_delta * Y_delta;
+    c_denom_X += X_delta * X_delta;
+    c_denom_Y += Y_delta * Y_delta;
+  }
+  FLOAT_T c_denom = sqrt(c_denom_X * c_denom_Y);
+  if (c_denom == 0.0) {
+    //carp(CARP_FATAL, "Zero denominator in correlation calculation!");
+    carp(CARP_DETAILED_DEBUG, "Zero denominator in correlation calculation!");
+    *correlation = 0.0; // min value
+    *eta = 0;
+    *beta = 0;
+  } else {
+    *correlation = c_num / c_denom;
+  }
+  carp(CARP_DETAILED_DEBUG, "shift=%.6f", shift);
+  carp(CARP_DETAILED_DEBUG, "eta=%.6f", *eta);
+  carp(CARP_DETAILED_DEBUG, "beta=%.6f", *beta);
+  carp(CARP_DETAILED_DEBUG, "correlation=%.6f", *correlation);
+
+  free(Y);
+  free(X);
+}
+
+
+/**
+ * \brief Open the fasta file and prepare it for
+ * searching.  Die if the input file cannot be found or read.
+ * \returns The number of proteins in the file
+ */
+int prepare_protein_input(
+  const string& input_file,     ///< name of the fasta file
+  Database** database ///< return new fasta database here
+) {
+  int num_proteins = 0;
+
+  carp(CARP_INFO, "Preparing protein fasta file %s", input_file.c_str());
+  *database = new Database(input_file, false);         
+  if (database == NULL) {
+    carp(CARP_FATAL, "Could not create protein database");
+  } 
+
+  if (!(*database)->parse()) {
+    carp(CARP_FATAL, "Error with protein database.");
+  } 
+  return (*database)->getNumProteins();
+}
+
+/**
+ * Maximum characters per line when printing formatted text.
+ */
+static const int MAX_CHARS_PER_LINE = 70;
+
+/**
+ *\brief Extend a given string with lines not exceeding a specified width, 
+ * breaking on spaces.
+ */
+void strcat_formatted(
+  char*       string_to_extend,
+  const char* lead_string,        // Appears at the start of each line.
+  const char* extension           // Text to add.
+) {
+  int i_string = 0;
+  int string_length = strlen(extension);
+  char buffer[MAX_CHARS_PER_LINE + 1];
+
+  while (string_length - i_string > MAX_CHARS_PER_LINE) {
+
+    // Be sure to break on a space.
+    int index_of_last_space = MAX_CHARS_PER_LINE;
+    while (extension[i_string + index_of_last_space] != ' ') {
+      index_of_last_space--;
+    }
+
+    sprintf(buffer, "%.*s", index_of_last_space, &(extension[i_string]));
+
+    strcat(string_to_extend, lead_string);
+    strcat(string_to_extend, buffer);
+    strcat(string_to_extend, "\n");
+
+    i_string += index_of_last_space + 1;
+  }
+  strcat(string_to_extend, lead_string);
+  strcat(string_to_extend, &(extension[i_string]));
+  strcat(string_to_extend, "\n");
+}
+
+/**
+ * \brief Checks if the given input file contains target, decoy PSMs or 
+ * concatenated search results.
+ *
+ *\returns corrected file names. It does not check if files are exist.
+ */
+void check_target_decoy_files(
+  string &target,   //filename of the target PSMs
+  string &decoy     //filename of the decoy PSMs
+) {
+  int target_pos = target.find("target");
+  if (target_pos < 0) {
+    int decoy_pos = decoy.find("decoy");
+    if (decoy_pos < 0) {
+      // user gave concatenated result file
+      decoy = "";
+    } else {
+      // user gave decoy results file
+      target.replace(decoy_pos, DECOY_STRING_LENGTH, "target");
+    }
+  } else {
+    // user gave target results file
+    decoy.replace(target_pos, TARGET_STRING_LENGTH, "decoy"); 
+  }
+}
+
+void get_search_result_paths(
+  const string &infile, ///< path of the first file.
+  std::vector<std::string> &outpaths ///< paths of all search results -out 
+) {
+  outpaths.clear();
+  if (Params::GetBool("list-of-files")) {
+    LineFileReader reader(infile);
+    while(reader.hasNext()) {
+      string current = StringUtils::Trim(reader.next());
+      carp(CARP_INFO, "current is:%s", current.c_str());
+      if (FileUtils::Exists(current)) {
+        outpaths.push_back(current);
+      } else {
+        carp(CARP_ERROR, "Search file '%s' doesn't exist", current.c_str());
+      }
+    }
+  } else {
+    string target = infile;
+    string decoy = infile;
+    check_target_decoy_files(target, decoy);
+    if (!target.empty()) {
+      if (FileUtils::Exists(target)) {
+        outpaths.push_back(target);
+      } else {
+        carp(CARP_ERROR, "Target file '%s' doesn't exist", target.c_str());
+      }
+    }
+    if (!decoy.empty()) {
+      if (FileUtils::Exists(decoy)) {
+        outpaths.push_back(decoy);
+      } else {
+        carp(CARP_ERROR, "Decoy file '%s' doesn't exist", decoy.c_str());
+      }
+    }
+  }
+}
+
+void get_files_from_list(
+  const string &infile, ///< path of the first file.
+  std::vector<std::string> &outpaths ///< paths of all search results -out
+  ) {
+  outpaths.clear();
+  if (Params::GetBool("list-of-files")) {
+    LineFileReader reader(infile);
+    while (reader.hasNext()) {
+      string current = reader.next();
+      carp(CARP_INFO, "current is:%s", current.c_str());
+      if (FileUtils::Exists(current)) {
+        outpaths.push_back(current);
+      } else {
+        carp(CARP_ERROR, "Search file '%s' doesn't exist", current.c_str());
+      }
+    }
+  } else if (FileUtils::Exists(infile)) {
+    outpaths.push_back(infile);
+  }
+}
+
+bool parseUrl(string url, string* host, string* path) {
+  if (!host || !path) {
+    return false;
+  }
+  // find protocol
+  size_t protocolSuffix = url.find("://");
+  if (protocolSuffix != string::npos) {
+    url = url.substr(protocolSuffix + 3);
+  }
+  size_t pathBegin = url.find('/');
+  if (pathBegin == string::npos) {
+    *host = url;
+    *path = "/";
+  } else {
+    *host = url.substr(0, pathBegin);
+    *path = url.substr(pathBegin);
+  }
+  if (host->empty()) {
+    *host = *path = "";
+    return false;
+  }
+  return true;
+}
+
+string httpRequest(const string& url, const std::string& data, bool waitForResponse) {
+  // Parse URL into host and path components
+  string host, path;
+  if (!parseUrl(url, &host, &path)) {
+    carp(CARP_ERROR, "Failed parsing URL %s", url.c_str());
+    return "";
+  }
+
+  using namespace boost::asio;
+
+  // Establish TCP connection to host on port 80
+  io_service service;
+  ip::tcp::resolver resolver(service);
+  ip::tcp::resolver::iterator endpoint = resolver.resolve(ip::tcp::resolver::query(host, "80"));
+  ip::tcp::socket sock(service);
+  connect(sock, endpoint);
+
+  // Determine method (GET if no data; otherwise POST)
+  string method = data.empty() ? "GET" : "POST";
+  string contentLengthHeader = data.empty()
+    ? ""
+    : "Content-Length: " + StringUtils::ToString(data.length()) + "\r\n";
+  // Send the HTTP request
+  string request =
+    method + " " + path + " HTTP/1.1\r\n"
+    "Host: " + host + "\r\n" +
+    contentLengthHeader +
+    "Connection: close\r\n"
+    "\r\n" + data;
+  sock.send(buffer(request));
+
+  if (!waitForResponse) {
+    return "";
+  }
+
+  // Read the response into stringstream
+  stringstream response;
+  boost::system::error_code ec;
+  do {
+    char buf[1024];
+    size_t n = sock.receive(buffer(buf), 0, ec);
+    if (!ec) {
+      response.write(buf, n);
+    }
+  } while (!ec);
+  return response.str();
+}
+
+void postToAnalytics(const string& appName) {
+  // Post data to Google Analytics
+  // For more information, see: https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide
+  try {
+    stringstream paramBuilder;
+    paramBuilder << "v=1"                // Protocol verison
+                 << "&tid=UA-26136956-1" // Tracking ID
+                 // TODO Generate UUID for cid
+                 // The Client ID (cid) anonymously identifies a particular user
+                 // or device and should be a random UUID
+                 << "&cid=35009a79-1a05-49d7-b876-2b884d0f825b"
+                 << "&t=event"           // Hit type
+                 << "&ec=crux"           // Event category
+                 << "&ea=" << appName    // Event action
+                 << "&el="               // Event label
+#ifdef _MSC_VER
+                      "win"
+#elif __APPLE__
+                      "mac"
+#else
+                      "linux"
+#endif
+                   << '-' << CRUX_VERSION;
+      httpRequest(
+        "http://www.google-analytics.com/collect",
+        paramBuilder.str(),
+        false);
+  } catch (...) {
+  }
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/util/crux-utils.h b/src/util/crux-utils.h
new file mode 100644
index 0000000..af9ef02
--- /dev/null
+++ b/src/util/crux-utils.h
@@ -0,0 +1,483 @@
+/**
+ * \file crux-utils.h
+ * $Revision: 1.41 $
+ * $Author: cegrant $
+ * \brief Utilities for the crux project
+ */
+#ifndef CRUX_UTILS_H
+#define CRUX_UTILS_H
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifndef _MSC_VER
+#include <dirent.h>
+#include <unistd.h>
+#endif
+#include <time.h>
+#include <algorithm>
+#include <limits>
+#include "io/carp.h"
+#include "utils.h"
+#include "model/objects.h"
+#include "parameter.h"
+#include "StringUtils.h"
+#include "model/Peak.h"
+#include "app/CruxApplication.h"
+
+#include <set>
+#include <sstream>
+#include <string>
+#include <vector>
+
+/**
+ * The number of features used to represent a PSM for Percolator or q-ranker.
+ */
+const unsigned int NUM_FEATURES = 16;
+
+/**
+ *\returns a heap copy of the given string
+ */
+char* my_copy_string(const char* src);
+
+/**
+ * returns copy of the src string upto the specified length
+ * includes a null terminating `\0' character
+ * the string is heap allocated thus, user must free
+ */
+char* copy_string_part(const char* src, int length);
+
+/**
+ * \returns the 0 if equal, 1 if float_a is larger, -1 if float_b is larger
+ * compare the absolute value of the difference of two numbers with an 
+ * appropriate epsilon to get relations.
+ * Multiplying the epsilon by sum of the comparands adjusts the comparison 
+ * to the range of the numbers, allowing a single epsilon to be used for many, 
+ * or perhaps all compares.
+ */
+int compare_float(FLOAT_T float_a, FLOAT_T float_b);
+
+/**
+ * Compares two numbers and returns TRUE if they are within the given
+ * precision of each other, otherwise returns FALSE.  E.g. if
+ * precision is 2, a and b must be equal when rounded to two decimal
+ * places.
+ */
+bool is_equal(FLOAT_T a, FLOAT_T b, int precision);
+
+/**
+ * \brief Parses the filename and path of given string.
+ *  
+ * The array returned, A, contains the filename (A[0]) and the path
+ * (A[1]).  Path is NULL if no / in given name.  e.g. Given
+ * "../../filname" returns A[0]="filename" and A[1]="../../".  Given
+ * "filename" returns A[0] = "filename" and A[1] = NULL.
+ *
+ *\returns A heap allocated array of both filename and path
+ */
+char** parse_filename_path(const std::string& file);
+
+/**
+ * \brief Parses the filename, path, and file extension of given string.
+ *  
+ * The array returned, A, contains the filename (A[0]) striped of the
+ * given file extension and the path (A[1]).  If extension is NULL,
+ * strips all characters after the last "." from the filename.  Use
+ * parse_filename_path() to return filename with extension.  
+ * Returned path is NULL if no "/" in given name.
+ * extension. e.g. Given "../../filname.ext" and ".ext" returns
+ * A[0]="filename" A[1]="../../".  Given "filename" returns A[0] =
+ * NULL and A[1] = "filename". 
+ *
+ * \returns A heap allocated array of filename striped of extension and
+ * path.
+ */
+char** parse_filename_path_extension(const char* file, const char* extension);
+
+/**
+ * parses the filename
+ * ex) ../../file_name => returns filename
+ *\returns A heap allocated array of filename
+ */
+char* parse_filename(const char* file);
+
+/**
+ * Examines filename to see if it ends in the given extension
+ * \returns True if filename ends in the extension, else false.
+ */
+bool has_extension(std::string filename, std::string extension);
+
+/**
+ * convert the integer into a string
+ * \returns a heap allocated string
+ */
+char* int_to_char(unsigned int i);
+
+/**
+ * convert the integer into a string
+ * \returns a heap allocated string
+ */
+char* signed_int_to_char(int i);
+
+/**
+ *prints the peptide type given it's enum value
+ */
+//void print_peptide_type(PEPTIDE_TYPE_T peptide_type, FILE* file);
+
+/**
+ * given two strings return a concatenated third string
+ * \returns a heap allocated string that concatenates the two inputs
+ */
+char* cat_string(const char* string_one, const char* string_two);
+
+/**
+ * Adds the fileroot parameter to a string as a prefix.
+ */
+std::string prefix_fileroot_to_name(const std::string& name);
+
+/**
+ * \returns the filepath 'output_dir'/'fileroot'.'filename' 
+ */
+std::string make_file_path(
+  const std::string& filename ///< the name of the file
+  );
+
+
+/**
+ * given the path and the filename return a file with path
+ * "path/filename"
+ * \returns a heap allocated string, "path/filename"
+ */
+char* get_full_filename(const char* path, const char* filename);
+
+/**
+ * returns the file size of the given filename
+ */
+long get_filesize(char *FileName);
+
+/**
+ * \brief A function for creating a directory to hold output files from crux.
+ * 
+ * Tries to create a the named directory for use as the output directory for crux.
+ * If the overwrite option is true, an existing directory wtih that
+ * name will not cause an error. 
+ * 
+ * \returns 0 if successful, -1 if an error occured.
+*/
+int create_output_directory(
+  const std::string& output_folder, // Name of output folder.
+  bool overwrite  // Whether or not to overwrite an existing dir 
+); 
+
+/**
+ * given a fasta_file name it returns a name with the name_tag add to the end
+ * format: myfasta_nameTag
+ * \returns A heap allocated file name of the given fasta file
+ */
+char* generate_name(
+  const char* fasta_filename,
+  const char* name_tag,
+  const char* file_extension,
+  const char* suffix
+  );
+/**
+ * \brief Take a filename, strip its leading path information (if
+ * any) and file extension (if any).  Tries all file extensions until
+ * one is found.  Add a new path (if given) and a new suffix (exension).
+ *
+ * If given ../dir/filename.ext, [.txt, .ext, t], .new-ext, otherdir
+ * would return  otherdir/filename.new-ext 
+ * \returns A heap allocated filename
+ */
+char* generate_name_path(
+  const char* filename,
+  std::vector<const char*> old_suffixes,
+  const char* new_suffix,
+  const char* new_path
+  );
+
+/**
+ * \brief Take a filename, strip its leading path information (if
+ * any) and file extension (if any).  Add a new path (if given) and a
+ * new suffix (exension).
+ *
+ * If given ../dir/filename.ext, .new-ext, .ext, otherdir would return
+ * otherdir/filename.new-ext 
+ * \returns A heap allocated filename
+ */
+char* generate_name_path(
+  const char* filename,
+  const char* old_suffix,
+  const char* new_suffix,
+  const char* new_path
+  );
+
+/**
+ * \brief Open and create a file of the given name in the given
+ * directory.
+ *
+ * Assumes the directory exists.  Fails if file can't be opened or if
+ * file exists and overwrite is false.
+ *\returns A file handle to the newly created file.
+ */
+FILE* create_file_in_path(
+  const std::string& filename,  ///< the filename to create & open -in
+  const std::string& directory,  ///< the directory to open the file in -in
+  bool overwrite  ///< replace the file (T) or die if exists (F)
+  );
+
+/**
+ * \brief c++ version of create_file_in_path
+ */
+std::ofstream* create_stream_in_path(
+  const char* filename,  ///< the filename to create & open -in
+  const char* directory,  ///< the directory to open the file in -in
+  bool overwrite  ///< replace file (T) or die if exists (F)
+  );
+
+/**
+ * checks if each AA is an AA
+ *\returns TRUE if sequence is valid else, FALSE
+ */
+bool valid_peptide_sequence(const std::string& sequence);
+
+/**
+ * quickSort for FLOAT_Ts
+ */
+void quicksort(FLOAT_T numbers[], int array_size);
+
+/**
+ * User define our upper and our lower bounds.
+ * The random number will always be 
+ * between low and high, inclusive.
+ * There is no seeding in this function, user must do it for themselves
+ *\returns a random number between the interval user provides
+ */
+int get_random_number_interval(
+  int low, ///< the number for lower bound -in
+  int high ///< the number for higher bound -in
+  );
+
+/**
+ * \brief Shuffle an array of FLOAT_Ts.  Uses the Knuth algorithm.  Uses
+ * get_random_number_interval() to generate random numbers. 
+ */
+void shuffle_floats(FLOAT_T* array, int size);
+
+/**
+ * \brief Shuffles an array of elements.  Uses the Knuth algorithm.  Uses
+ * get_random_number_interval() to generate random numbers. 
+ */
+template<typename T>
+void shuffle_array(T* array, int size) {
+  if (array == NULL) {
+    carp(CARP_ERROR, "Cannot shuffle NULL array.");
+    return;
+  }
+
+  int idx, switch_idx;
+  int last_element_idx = size - 1;
+  T temp_value;
+  for (idx = 0; idx < size; idx++) {
+    switch_idx = get_random_number_interval(idx, last_element_idx);
+    temp_value = array[idx];
+    array[idx] = array[switch_idx];
+    array[switch_idx] = temp_value;
+  }
+}
+
+/**
+ *\returns the number of digits in the number
+ */
+int get_number_digits(
+  int number ///< the number to count digits
+  );
+
+/**
+ * Fits a three-parameter Weibull distribution to the input data. 
+ * \returns eta, beta, c (which in this case is the amount the data should
+ * be shifted by) and the best correlation coefficient
+ */
+
+void fit_three_parameter_weibull(
+    FLOAT_T* data, ///< the data to be fit. should be in descending order -in
+    int fit_data_points, ///< the number of data points to fit -in
+    int total_data_points, ///< the total number of data points -in
+    FLOAT_T min_shift, ///< the minimum shift to allow -in
+    FLOAT_T max_shift, ///< the maximum shift to allow -in
+    FLOAT_T step, ///< the step for shift modification -in
+    FLOAT_T corr_threshold, ///< minimum correlation, else no fit -in
+    FLOAT_T* eta,      ///< the eta parameter of the Weibull dist -out
+    FLOAT_T* beta,      ///< the beta parameter of the Weibull dist -out
+    FLOAT_T* shift,     ///< the best shift -out
+    FLOAT_T* correlation   ///< the best correlation -out
+    );
+
+/**
+ * Fits a two-parameter Weibull distribution to the input data. 
+ * \returns eta, beta and the correlation coefficient
+ */
+void fit_two_parameter_weibull(
+    FLOAT_T* data, ///< the data to be fit -in
+    int fit_data_points, ///< the number of data points to fit -in
+    int total_data_points, ///< the total number of data points -in
+    FLOAT_T shift, ///< the amount by which to shift our data -in
+    FLOAT_T* eta,      ///< the eta parameter of the Weibull dist -out
+    FLOAT_T* beta,      ///< the beta parameter of the Weibull dist -out
+    FLOAT_T* correlation ///< the best correlation -out
+    );
+
+bool string_to_mass_type(const std::string& name, MASS_TYPE_T*);
+bool mass_type_to_string(MASS_TYPE_T, char*);
+bool string_to_algorithm_type(char*, ALGORITHM_TYPE_T*);
+bool algorithm_type_to_string(ALGORITHM_TYPE_T, char*);
+bool string_to_scorer_type(const std::string& name, SCORER_TYPE_T*);
+const char* scorer_type_to_string(SCORER_TYPE_T);
+bool string_to_ion_type(const std::string& name, ION_TYPE_T*);
+bool ion_type_to_string(ION_TYPE_T, char*);
+char* ion_type_to_string(ION_TYPE_T type);
+
+// new style of type_to_string and string_to_type functions
+// requires an invalid value for each enum
+DIGEST_T string_to_digest_type(const std::string& name);
+const char* digest_type_to_string(DIGEST_T);
+ENZYME_T string_to_enzyme_type(const std::string& name);
+const char* enzyme_type_to_string(ENZYME_T);
+OBSERVED_PREPROCESS_STEP_T string_to_observed_preprocess_step(const std::string& name);
+char* observed_preprocess_step_to_string(OBSERVED_PREPROCESS_STEP_T type);
+WINDOW_TYPE_T string_to_window_type(const std::string& name);
+PARSIMONY_TYPE_T string_to_parsimony_type(const std::string& name);
+MEASURE_TYPE_T string_to_measure_type(const std::string& name);
+char * measure_type_to_string(MEASURE_TYPE_T type);
+THRESHOLD_T string_to_threshold_type(const std::string& name);
+char * threshold_type_to_string(THRESHOLD_T type);
+QUANT_LEVEL_TYPE_T string_to_quant_level_type(const std::string& name);
+COLTYPE_T string_to_column_type(const std::string& name);
+COMPARISON_T string_to_comparison(const std::string& name);
+DECOY_TYPE_T string_to_decoy_type(const std::string& name);
+DECOY_TYPE_T string_to_tide_decoy_type(const std::string& name);
+char* decoy_type_to_string(DECOY_TYPE_T type);
+MASS_FORMAT_T string_to_mass_format(const std::string& name);
+char* mass_format_type_to_string(MASS_FORMAT_T type);
+
+HARDKLOR_ALGORITHM_T string_to_hardklor_algorithm_type(const std::string& name);
+std::string hardklor_hardklor_algorithm_type_to_string(HARDKLOR_ALGORITHM_T type);
+
+/**
+ * \brief Open the fasta file and prepare it for
+ * searching.  Die if the input file cannot be found or read.
+ * \returns The number of proteins in the file
+ */
+int prepare_protein_input(
+  const std::string& input_file,      ///< name of the fasta file
+  Database** database);///< return new fasta database here
+
+/**
+ * converts a string in #-# format to
+ * a first and last variable
+ * \returns whether the extraction was successful or not
+ */
+
+bool get_first_last_scan_from_string(
+  const std::string& const_scans_string,
+  int& first_scan,
+  int& last_scan
+  );
+
+bool get_scans_from_string(
+  const std::string& const_scans_string,
+  std::set<int>& scans
+);
+
+
+template<typename TValue>
+static bool get_range_from_string(
+  const std::string& const_range_string, ///< the string to extract 
+  TValue& first,  ///< the first value
+  TValue& last ///< the last value
+  ) {
+
+  if (const_range_string.empty()) {
+    first = (TValue)0;
+    last = std::numeric_limits<TValue>::max();
+    return true;
+  }
+  char* range_string = my_copy_string(const_range_string.c_str());
+
+  bool ret;
+
+  char* dash = strchr(range_string, '-');
+  if (dash == NULL) { // a single number
+    ret = StringUtils::TryFromString(range_string, &first);
+    last = first;
+  } else {
+    //invalid if more than one dash
+    const char* dash_check = strchr(dash + 1, '-');
+    if (dash_check) {
+      ret = false;
+    } else {
+      *dash = '\0';
+      ret = StringUtils::TryFromString(range_string, &first);
+      *dash = '-';
+      dash++;
+      ret &= StringUtils::TryFromString(dash, &last);
+    }
+  }
+
+  free(range_string);
+  return ret;    
+}
+
+/**
+ *\brief Extend a given string with lines not exceeding a specified width, 
+ * breaking on spaces.
+ */
+void strcat_formatted(
+  char*       string_to_extend,
+  const char* lead_string,        // Appears at the start of each line.
+  const char* extension           // Text to add.
+);
+
+/**
+ * \brief Checks if the given input file contains target, decoy PSMs or 
+ * concatenated search results.
+ *
+ *\returns corrected file names. It does not check if files are exist.
+ */
+void check_target_decoy_files(
+  std::string &target,   //filename of the target PSMs
+  std::string &decoy     //filename of the decoy PSMs
+);
+
+void get_search_result_paths(
+  const std::string& infile,
+  std::vector<std::string> &outpaths ///< paths of all search results -out
+);
+
+
+/**
+ * \brief Checks if the given input file contains target, decoy PSMs or 
+ * concatenated search results.
+ *
+ *\returns corrercted file names. It does not check if files are exist.
+ */
+void check_target_decoy_files(
+  std::string &target,   //filename of the target PSMs
+  std::string &decoy     //filename of the decoy PSMs
+);
+
+void get_files_from_list(
+  const std::string &infile, ///< path of the first file.
+  std::vector<std::string> &outpaths ///< paths of all search results -out
+);
+
+bool parseUrl(std::string url, std::string* host, std::string* path);
+std::string httpRequest(const std::string& url, const std::string& data = "", bool waitForResponse = true);
+void postToAnalytics(const std::string& appName);
+
+#endif
diff --git a/src/util/linked_list.cpp b/src/util/linked_list.cpp
new file mode 100644
index 0000000..89eb653
--- /dev/null
+++ b/src/util/linked_list.cpp
@@ -0,0 +1,370 @@
+/**
+ * \file linked_list.cpp
+ * \brief Method definitions for a linked list class.
+ */
+
+#include "linked_list.h"
+
+/**
+ * \struct _linked_list_node
+ * \brief A node of a linked list
+ */
+struct _linked_list_node {
+  void* data;
+  struct _linked_list_node *next;
+};
+//typedef struct _linked_list_node LIST_POINTER_T*;
+
+/**
+ * \struct _linked_list_head
+ * \brief The head of a linked list
+ */
+struct _linked_list_head {
+  // TODO change next to head or first
+  struct _linked_list_node *next;
+  struct _linked_list_node *last;
+};
+//typedef struct _linked_list_head LINKED_LIST_T;
+
+/**
+ * \brief Allocate the first element of a new list.
+ * \returns A pointer to the new list.
+ */
+LINKED_LIST_T* new_empty_list() {
+  LINKED_LIST_T* head = (LINKED_LIST_T*)mymalloc(sizeof(LINKED_LIST_T));
+  head->next = NULL;
+  head->last = NULL;
+  return head;
+}
+
+/**
+ * \brief Private function for adding a node to the list.  
+ * Allocates the node, sets data field to new_item, sets next to NULL.
+ * \returns A pointer to the newly created node.
+ */
+LIST_POINTER_T* new_node(void* new_item) {
+  LIST_POINTER_T* the_node = (LIST_POINTER_T*)mymalloc(sizeof(LIST_POINTER_T));
+  the_node->data = new_item;
+  the_node->next = NULL;
+  return the_node;
+}
+
+/**
+ * \brief Allocate the first element of a new list.
+ * \returns A pointer to the new list.
+ */
+LINKED_LIST_T* new_list(void* first_item) {
+  LINKED_LIST_T* head = (LINKED_LIST_T*)mymalloc(sizeof(LINKED_LIST_T));
+  head->next = new_node(first_item);
+  head->last = head->next;
+  return head;
+}
+
+/**
+ * \brief Add an item to the end of this list.  Traverses to the end
+ * of the list, creates a new list node, and adds it to the end of the list.
+ * \returns A pointer to the last (newly created) element in the list.
+ */
+LIST_POINTER_T* push_back_linked_list(LINKED_LIST_T* list_head, void* add_me) {
+
+  if( list_head == NULL ) {
+    carp(CARP_ERROR, "Cannot add to a NULL list.");
+    return NULL;
+  }
+
+  // adding to an empty list
+  if( list_head->next == NULL ) {
+    list_head->next = new_node(add_me);
+    list_head->last = list_head->next;
+    return list_head->next;
+  }
+
+  // find the end of the list
+  LIST_POINTER_T* last_node = list_head->last;
+  assert( (list_head->last)->next == NULL);
+
+  last_node->next = new_node(add_me);
+  list_head->last = last_node->next;
+  return last_node->next;
+}
+
+/**
+ * \brief Add an item to the beginning of this list.  Creates a new
+ * list node, and insersts it between the head and the first node.
+ * \returns A pointer to the first (newly created) element in the list.
+ */
+LIST_POINTER_T* push_front_linked_list(LINKED_LIST_T* list_head, void* add_me) {
+
+  if( list_head == NULL ) {
+    carp(CARP_ERROR, "Cannot add to null list\n");
+    return NULL;
+  }
+
+  LIST_POINTER_T* add_this_node = new_node(add_me);
+  add_this_node->next = list_head->next;
+  list_head->next = add_this_node;
+  if( list_head->last == NULL ) {
+    list_head->last = add_this_node;
+  }
+  return add_this_node;
+}
+
+/**
+ * \brief Remove the element from the end of the list (farthest from
+ * the head) and return a pointer to its data. 
+ * Deletes the last list node leaving the data and the rest of the
+ * list intact. 
+ * \returns A pointer to the data in the last item in the list, NULL
+ * if list is empty.
+ */
+void* pop_back_linked_list(LINKED_LIST_T* list) {
+
+  if( list == NULL || list->next == NULL ) {
+    return NULL;
+  }
+
+  // find the end of the list
+  LIST_POINTER_T* last_node = list->last;
+  void* data = last_node->data;
+
+  // special case of one item in list
+  if( last_node == list->next ) {
+    list->last = NULL;
+    list->next = NULL;
+  } else {
+    // find the node pointing to last
+    LIST_POINTER_T* second_to_last_node = list->next;
+
+    while( second_to_last_node->next != last_node ) {
+      second_to_last_node = second_to_last_node->next;
+    }
+
+    list->last = second_to_last_node;
+    second_to_last_node->next = NULL;
+  }
+  free(last_node);
+  return data;
+}
+
+/**
+ * \brief Remove the first element from the list, returning a pointer
+ * to the data.
+ * Deletes the first list node leaving the data and the
+ * head of the list intact. Head now points to what was the second
+ * element, if any.
+ * \returns A pointer to the data in the first item in the list, NULL
+ * if list is empty.
+ */
+void* pop_front_linked_list(LINKED_LIST_T* list) {
+
+  if( list == NULL || list->next == NULL ) {
+    return NULL;
+  }
+
+  LIST_POINTER_T* first_node = list->next;
+  void* data = first_node->data;
+  list->next = first_node->next;
+  // if only one node, change last to NULL
+  if( list->next == NULL ) {
+    list->last = NULL;
+  }
+
+  free(first_node);
+  return data;
+}
+
+/**
+ * \brief Get a pointer to the first element in the list.  Can be used
+ * to start a traverse of the list.
+ * \returns A pointer to the first list node.  NULL if empty list.
+ */
+LIST_POINTER_T* get_first_linked_list(LINKED_LIST_T* head) {
+  if( head == NULL ) {
+    return NULL;
+  }
+  return head->next;
+}
+
+/**
+ * \brief Get the next element in the list.  Can be used for
+ * traversing a list.
+ * \returns A pointer to the next list node.  NULL if at end of list.
+ */
+LIST_POINTER_T* get_next_linked_list(LIST_POINTER_T* node) {
+  if( node == NULL ) {
+    return NULL;
+  }
+  return node->next;
+}
+
+/**
+ * \brief Get the item pointed to by this node in the list.
+ * \returns Returns a void pointer to the item held at this node.
+ */
+void* get_data_linked_list(LIST_POINTER_T* node) {
+  if( node == NULL ) {
+    return NULL;
+  }
+  return node->data;
+}
+
+/**
+ * \brief Is this list empty?
+ * \returns true if node->next is NULL, else false
+ */
+bool is_empty_linked_list(LINKED_LIST_T* head) {
+  if( head == NULL || head->next == NULL ) {
+    return true;
+  }
+  return false;
+}
+
+/**
+ * \brief Is this list element at the end of the list?
+ * \returns false if node->next is NULL, else true
+ */
+bool has_next_linked_list(LIST_POINTER_T* node) {
+  if( node == NULL || node->next == NULL ) {
+    return false;
+  }
+  return true;
+}
+
+/**
+ * \brief Combines two lists by having the end of the first list point
+ * to the first element of the second.  If the first list is null, returns
+ * a pointer to the second list. Does not change the second list.
+ * \returns Returns a pointer to the beginning of the combined lists.
+ */
+LINKED_LIST_T* combine_lists(LINKED_LIST_T* first, LINKED_LIST_T* second) {
+  if( first == NULL ) {
+    return second;
+  }
+  if( second == NULL ) {
+    return first;
+  }
+
+  // check for empty list
+  if( first->next == NULL ) {
+    first->next = second->next;
+    first->last = second->last;
+  } else {
+    // find the end of the first list
+    LIST_POINTER_T* last_node = first->last;
+    
+    // set to the beginning of the second list
+    last_node->next = second->next;
+    
+    // set the end of the first to the end of the last  
+    first->last = second->last;
+  }
+  return first;
+}
+
+/**
+ * \brief Create a copy of each node in the original list, linked in
+ * the same order.
+ * \return A pointer to the head of the new list.
+ */
+LINKED_LIST_T* copy_list(LINKED_LIST_T* original) {
+  if( original == NULL ) {
+    return NULL;
+  }
+
+  LINKED_LIST_T* copy = new_empty_list();
+  // check for empty list
+  if( is_empty_linked_list( original ) ) {
+    return copy;
+  }
+
+  //initialize first element
+  LIST_POINTER_T* cur_original = get_first_linked_list(original);
+  copy->next = new_node( get_data_linked_list(cur_original) );
+
+  LIST_POINTER_T* cur_copy = copy->next;
+  cur_original = cur_original->next;
+  
+  while( cur_original != NULL ) {
+    cur_copy->next = new_node( cur_original->data );
+    cur_copy = cur_copy->next;
+    cur_original = cur_original->next;
+  }
+  
+  copy->last = cur_copy->next;
+  return copy;
+}
+
+// TODO? delete_only_this_list_node?
+/**
+ * \brief Deletes the given list node and all list nodes after this
+ * one WITHOUT deleting the data pointed to.
+ * \returns void
+ */
+void delete_list_node(LIST_POINTER_T* list) {
+  if( list == NULL ) {
+    return;
+  }
+
+  if( list->next != NULL ) {
+    delete_list_node(list->next);
+  }// else next is null and this is the end of the list
+  
+  free(list);
+  return;
+}
+
+/**
+ * \brief Removes all nodes from a list while leaving the data intact.
+ */
+void clear_list(LINKED_LIST_T* list) {
+  if( list == NULL ) {
+    return;
+  }
+  LIST_POINTER_T* first = list->next;
+  delete_list_node(first);
+  list->next = NULL;
+}
+
+
+
+/**
+ * \brief Deletes the given list WITHOUT deleting the data pointed to.
+ * \returns void
+ */
+void delete_linked_list(LINKED_LIST_T* list) {
+  if( list ) {
+    if( list->next != NULL ) {
+      delete_list_node(list->next);
+    }// else next is null and this is the end of the list
+    
+    free(list);
+  }
+  return;
+}
+
+/**
+ * \brief Deletes only the node AFTER this one.  The given node then
+ * points to what the next node pointed to before. The data remains
+ * untouched. 
+ * \returns A pointer to the new list element that follows the given one.
+ */
+LIST_POINTER_T* delete_next_list_node(LIST_POINTER_T* pre_node) {
+
+  if( pre_node == NULL ) {
+    return NULL;
+  }
+  // before: head ....pre-> delete-> next...NULL
+  // after : head ....pre-> next...NULL
+
+  LIST_POINTER_T* delete_node = pre_node->next;
+  if( delete_node == NULL ) {
+    return NULL;
+  }
+  LIST_POINTER_T* next_node = delete_node->next;
+
+  pre_node->next = next_node;
+  free(delete_node);
+
+  return next_node;
+}
+
diff --git a/src/util/linked_list.h b/src/util/linked_list.h
new file mode 100644
index 0000000..9a5b892
--- /dev/null
+++ b/src/util/linked_list.h
@@ -0,0 +1,145 @@
+/**
+ * \file linked_list.h
+ * Header file for a linked list class.
+ */
+#ifndef LINKED_LIST_H
+#define LINKED_LIST_H
+
+#include <assert.h>
+#include "util/utils.h"
+#include "model/objects.h"
+#include "io/carp.h"
+
+/**
+ * \brief Allocate the first element of a new list.
+ * \returns A pointer to the new list.
+ */
+LINKED_LIST_T* new_empty_list();
+
+/**
+ * \brief Allocate the first element of a new list.
+ * \returns A pointer to the new list.
+ */
+LINKED_LIST_T* new_list(void* first_item);
+
+/**
+ * \brief Add an item to the end of this list.  Traverses to the end
+ * of the list, creates a new list node, and adds it to the end of the list.
+ * \returns A pointer to the last (newly created) element in the list.
+ */
+LIST_POINTER_T* push_back_linked_list(LINKED_LIST_T* list_head, void* add_me);
+
+/**
+ * \brief Add an item to the beginning of this list.  Creates a new
+ * list node, and insersts it between the head and the first node.
+ * \returns A pointer to the first (newly created) element in the list.
+ */
+LIST_POINTER_T* push_front_linked_list(LINKED_LIST_T* list_head, void* add_me);
+
+/**
+ * \brief Remove the element from the end of the list (farthest from
+ * the head) and return a pointer to its data. 
+ * Deletes the last list node leaving the data and the rest of the
+ * list intact. 
+ * \returns A pointer to the data in the last item in the list, NULL
+ * if list is empty.
+ */
+void* pop_back_linked_list(LINKED_LIST_T* list);
+
+/**
+ * \brief Remove the first element from the list, returning a pointer
+ * to the data.
+ * Deletes the first list node leaving the data and the
+ * head of the list intact. Head now points to what was the second
+ * element, if any.
+ * \returns A pointer to the data in the first item in the list, NULL
+ * if list is empty.
+ */
+void* pop_front_linked_list(LINKED_LIST_T* list);
+
+/**
+ * \brief Get a pointer to the first element in the list.  Can be used
+ * to start a traverse of the list.
+ * \returns A pointer to the first list node.  NULL if empty list.
+ */
+LIST_POINTER_T* get_first_linked_list(LINKED_LIST_T* head);
+
+/**
+ * \brief Get the next element in the list.  Can be used for
+ * traversing a list.
+ * \returns A pointer to the next list node.  NULL if at end of list.
+ */
+LIST_POINTER_T* get_next_linked_list(LIST_POINTER_T* node);
+
+/**
+ * \brief Get the item pointed to by this node in the list.
+ * \returns Returns a void pointer to the item held at this node.
+ */
+void* get_data_linked_list(LIST_POINTER_T* list);
+
+/**
+ * \brief Is this list empty?
+ * \returns TRUE if node->next is NULL, else FALSE
+ */
+bool is_empty_linked_list(LINKED_LIST_T* head);
+
+/**
+ * \brief Is this list element at the end of the list?
+ * \returns FALSE if node->next is NULL, else TRUE
+ */
+bool has_next_linked_list(LIST_POINTER_T* node);
+
+/**
+ * \brief Combines two lists by having the end of the first list point
+ * to the beginning of the second.  If the first list is null, returns
+ * a pointer to the second list.
+ * \returns Returns a pointer to the beginning of the combined lists.
+ */
+LINKED_LIST_T* combine_lists(LINKED_LIST_T* beginning, LINKED_LIST_T* add_me);
+
+/**
+ * \brief Create a copy of each node in the original list, linked in
+ * the same order.
+ * \return A pointer to the head of the new list.
+ */
+LINKED_LIST_T* copy_list(LINKED_LIST_T* original);
+
+/**
+ * \brief Removes all nodes from a list while leaving the data intact.
+ */
+void clear_list(LINKED_LIST_T* list);
+
+/**
+ * \brief Deletes the given list node and all list nodes after this
+ * one WITHOUT deleting the data pointed to.
+ * \returns void
+ */
+void delete_linked_list(LINKED_LIST_T* list);
+
+/**
+ * \brief Deletes the given list node and all list nodes after this
+ * one WITHOUT deleting the data pointed to.
+ * \returns void
+ */
+void delete_list_node(LIST_POINTER_T* list);
+
+/**
+ * \brief Deletes only the node AFTER this one.  The given node then
+ * points to what the next node pointed to before. 
+ * \returns A pointer to the new list element that follows the given one.
+ */
+LIST_POINTER_T* delete_next_list_node(LIST_POINTER_T* pre_node);
+
+
+
+
+
+
+
+
+
+
+
+
+
+#endif // LINKED_LIST_H
diff --git a/src/util/mass.cpp b/src/util/mass.cpp
new file mode 100644
index 0000000..cecf9aa
--- /dev/null
+++ b/src/util/mass.cpp
@@ -0,0 +1,307 @@
+/**
+ * \file mass.cpp 
+ * \brief Provides constants and methods for calculating mass
+ ****************************************************************************/
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "utils.h"
+#include "model/objects.h"
+#include "mass.h"
+#include "model/Protein.h"
+#include "model/Peptide.h"
+#include "io/carp.h"
+#include "model/Ion.h"
+#include "modifications.h"
+#include "Params.h"
+
+/* Private Variables */
+
+/**
+ * Array to store the amino acid masses
+ */
+FLOAT_T amino_masses[('Z' - 'A')*2 + 2];
+enum {NUM_MOD_MASSES = 2048}; // 2 ^ MAX_AA_MODS = 2^11 = 2048
+FLOAT_T aa_mod_masses[(int)NUM_MOD_MASSES];
+
+
+/**
+ * Have we initialized the amino acid masses?
+ */
+bool initialized_amino_masses = false;
+
+// FIXME need to find the monoisotopic mass for some AA -chris
+/**
+ * initializes the mass array
+ */
+void initialize_amino_masses() {
+  // average mass
+  amino_masses['A' - 'A'] = 71.0788;
+  // set mass high to prevent peptides containing B
+  amino_masses['B' - 'A'] = 7000.0;
+  amino_masses['C' - 'A'] = 103.1388;
+  amino_masses['D' - 'A'] = 115.0886;
+  amino_masses['E' - 'A'] = 129.1155;
+  amino_masses['F' - 'A'] = 147.1766;
+  amino_masses['G' - 'A'] = 57.0519;
+  amino_masses['H' - 'A'] = 137.1411;
+  amino_masses['I' - 'A'] = 113.1594;
+  amino_masses['J' - 'A'] = 113.1594;
+  amino_masses['K' - 'A'] = 128.1741;
+  amino_masses['L' - 'A'] = 113.1594;
+  amino_masses['M' - 'A'] = 131.1926;
+  amino_masses['N' - 'A'] = 114.1038;
+  amino_masses['O' - 'A'] = 114.1472;
+  amino_masses['P' - 'A'] = 97.1167;
+  amino_masses['Q' - 'A'] = 128.1307;
+  amino_masses['R' - 'A'] = 156.1875;
+  amino_masses['S' - 'A'] = 87.0782;
+  amino_masses['T' - 'A'] = 101.1051;
+  amino_masses['U' - 'A'] = 150.0388;
+  amino_masses['V' - 'A'] = 99.1326;
+  amino_masses['W' - 'A'] = 186.2132;
+  // set mass high to prevent peptides containing X
+  amino_masses['X' - 'A'] = 7000.0;
+  amino_masses['Y' - 'A'] = 163.1760;
+  // set mass high to prevent peptides containing Z
+  amino_masses['Z' - 'A'] = 7000.0;
+  
+  // monoisotopic mass
+  amino_masses['A' - 'A' + 26] = 71.03711;
+  // set mass high to prevent peptides containing B
+  amino_masses['B' - 'A' + 26] = 7000.0;
+  amino_masses['C' - 'A' + 26] = 103.00919;
+  amino_masses['D' - 'A' + 26] = 115.02694;
+  amino_masses['E' - 'A' + 26] = 129.04259;
+  amino_masses['F' - 'A' + 26] = 147.06841;
+  amino_masses['G' - 'A' + 26] = 57.02146;
+  amino_masses['H' - 'A' + 26] = 137.05891;
+  amino_masses['I' - 'A' + 26] = 113.08406;
+  amino_masses['J' - 'A' + 26] = 113.08406;
+  amino_masses['K' - 'A' + 26] = 128.09496;
+  amino_masses['L' - 'A' + 26] = 113.08406;
+  amino_masses['M' - 'A' + 26] = 131.04049;
+  amino_masses['N' - 'A' + 26] = 114.04293;
+  amino_masses['O' - 'A' + 26] = 114.07931;
+  amino_masses['P' - 'A' + 26] = 97.05276;
+  amino_masses['Q' - 'A' + 26] = 128.05858;
+  amino_masses['R' - 'A' + 26] = 156.10111;
+  amino_masses['S' - 'A' + 26] = 87.03203;
+  amino_masses['T' - 'A' + 26] = 101.04768;
+  amino_masses['U' - 'A' + 26] = 150.04344;
+  amino_masses['V' - 'A' + 26] = 99.06841;
+  amino_masses['W' - 'A' + 26] = 186.07931;
+  // set mass high to prevent peptides containing X
+  amino_masses['X' - 'A' + 26] = 7000.0;
+  amino_masses['Y' - 'A' + 26] = 163.06333;
+  // set mass high to prevent peptides containing Z
+  amino_masses['Z' - 'A' + 26] = 7000.0;
+  
+  // modifications
+  initialize_aa_mod_combinations_array();
+
+  initialized_amino_masses = true;
+}
+
+/**
+ * \brief Populates the array aa_mod_masses with the mass change of
+ * all possible combinations of aa_mods.  Gets the list of aa_mods
+ * from parameter.c.  For example, if mod1 and a mass change of 50 and
+ * mod5 has a mass change of 10, then the entry at index 
+ * (binary 00010001 =) 17 is (50 + 10=) 60.
+ */
+void initialize_aa_mod_combinations_array() {
+  // set all to 0
+  int i = 0;
+  for (i = 0; i < NUM_MOD_MASSES; i++) {
+    aa_mod_masses[i] = 0;
+  }
+
+  // get aa mod list
+  AA_MOD_T** amod_list = NULL;
+  int num_mods = get_all_aa_mod_list(&amod_list);
+  int mod_idx = 0;
+
+  // for each aa mod
+  for (mod_idx = 0; mod_idx < num_mods; mod_idx++) {
+    //printf("\nmod#: %i\n", mod_idx);
+    int entry_idx = 0;
+
+    while (entry_idx < NUM_MOD_MASSES) {
+      //printf("skip from %i", entry_idx);
+      // skip 2^i entries for mod_i (first mod is 1)
+      entry_idx += (int)pow(2.0, mod_idx);
+      //printf(" to %i\n", entry_idx);
+
+      // write i entries for mod_i
+      //int write_num = mod_idx+1;
+      int write_num = (int)pow(2.0, mod_idx);
+      while (write_num > 0 && entry_idx < NUM_MOD_MASSES) {
+        //printf("write at %i from %.3f", entry_idx, aa_mod_masses[entry_idx]);
+
+        aa_mod_masses[entry_idx] += aa_mod_get_mass_change(amod_list[mod_idx]);
+        //printf(" to  %.3f\n", aa_mod_masses[entry_idx]);
+        entry_idx++;
+        write_num--;
+      }// next write
+    }// next skip
+  }// next mod
+
+  //printf("Initialized mod combinations are:\n");
+  //for (i = 0; i < 36; i++) {
+    //printf("index %i\tmass %.1f\n", i, aa_mod_masses[i]);
+  //}
+}
+
+/**
+ * \returns The mass of the given amino acid.
+ */
+FLOAT_T get_mass_amino_acid(
+  char amino_acid, ///< the query amino acid -in
+  MASS_TYPE_T mass_type ///< the isotopic mass type (AVERAGE, MONO) -in
+) {
+  if (mass_type == AVERAGE) {
+    return get_mass_amino_acid_average(amino_acid);
+  } else if (mass_type == MONO) {
+    return get_mass_amino_acid_monoisotopic(amino_acid);
+  }
+  carp(CARP_FATAL, "ERROR: mass type does not exist\n");
+  // avoid compiler warning
+  return 1;
+}
+
+/**
+ * \returns The mass of the given amino acid.
+ */
+FLOAT_T get_mass_mod_amino_acid(
+  MODIFIED_AA_T amino_acid, ///< the query amino acid -in
+  MASS_TYPE_T mass_type ///< the isotopic mass type (AVERAGE, MONO) -in
+) {
+  switch (mass_type) {
+  case AVERAGE:
+    return get_mass_mod_amino_acid_average(amino_acid);
+  case MONO:
+    return get_mass_mod_amino_acid_monoisotopic(amino_acid);
+  case NUMBER_MASS_TYPES:
+    carp(CARP_FATAL, "Bad mass type.");
+  }
+  return 0;
+}
+
+/**
+ * \returns The average mass of the given amino acid.
+ */
+FLOAT_T get_mass_amino_acid_average(
+  char amino_acid ///< the query amino acid -in
+) {
+  // has the amino_masses array been initialized?
+  if (!initialized_amino_masses) {
+    initialize_amino_masses();
+    initialized_amino_masses = true;
+  }
+  return(amino_masses[(short int)amino_acid - 'A']);
+}
+
+/**
+ * \returns The average mass of the given amino acid.
+ */
+FLOAT_T get_mass_mod_amino_acid_average(
+  MODIFIED_AA_T amino_acid ///< the query amino acid -in
+) {
+  if (!initialized_amino_masses) {
+    initialize_amino_masses();
+  }
+  //printf("aa is %hu, char %c\n", (unsigned short)amino_acid, modified_aa_to_char(amino_acid));
+
+  short int aa = amino_acid & GET_AA_MASK;
+  unsigned short int mod = amino_acid & GET_MOD_MASK;
+  mod = mod >> 5;
+  //printf("aa idx %hi mass %.3f + mod idx %hu mass %.3f\n", aa,  amino_masses[aa], mod, aa_mod_masses[mod]);
+  return amino_masses[aa] + aa_mod_masses[mod];
+
+}
+
+/**
+ * Finds the modification identifier associated with the given mass
+ * shift.  Can be the identifier from a single modification or from
+ * multiple modifications to the same residue.  The returned
+ * identifier can be used to modify a MODIFIED_AA_T so that it has the
+ * given mass shift. 
+ */
+MODIFIED_AA_T get_mod_identifier(FLOAT_T mass_shift) {
+  if (!initialized_amino_masses) {
+    initialize_amino_masses();
+  }
+
+  int precision = Params::GetInt("mod-precision");
+  for (int mod_idx = 0; mod_idx < (int)NUM_MOD_MASSES; mod_idx++) {
+    if (is_equal(mass_shift, aa_mod_masses[mod_idx], precision)) {
+      MODIFIED_AA_T identifier = mod_idx;
+      identifier = identifier << 5;
+      return identifier;
+    }
+  }
+
+  // if we got to here, no mod found
+  carp_once(CARP_WARNING, "No modification identifier found for mass shift %.*f."
+                          "\nWarning Suppressed, others may exist",
+       precision, mass_shift);
+
+  return 0;
+}
+
+/**
+ * \returns The monoisotopic mass of the given amino acid.
+ */
+FLOAT_T get_mass_amino_acid_monoisotopic(
+  char amino_acid ///< the query amino acid -in
+) {
+  // has the amino_masses array been initialized?
+  if (!initialized_amino_masses) {
+    initialize_amino_masses();
+    initialized_amino_masses = true;
+  }
+  return(amino_masses[(short int)amino_acid - 'A' + 26 ]);
+}
+
+/**
+ * \returns The monoisotopic mass of the given amino acid.
+ */
+FLOAT_T get_mass_mod_amino_acid_monoisotopic(
+  MODIFIED_AA_T amino_acid ///< the query amino acid -in
+) {
+  if (!initialized_amino_masses) {
+    initialize_amino_masses();
+  }
+
+  short int aa = amino_acid & GET_AA_MASK;
+  unsigned short int mod = amino_acid & GET_MOD_MASK;
+  mod = mod >> 5;
+  //printf("mod aa idx %hi mass %.3f + mod idx %hu mass %.3f\n", aa,  amino_masses[aa+26], mod, aa_mod_masses[mod]);
+  return amino_masses[aa + 26] + aa_mod_masses[mod];
+
+}
+
+
+/**
+ * increase the amino acid mass for both mono and average
+ */
+void increase_amino_acid_mass(
+  char amino_acid, ///< the query amino acid -in
+  FLOAT_T update_mass ///< the mass amount to update for the amino acid -in
+) {
+  // has the amino_masses array been initialized?
+  if (!initialized_amino_masses) {
+    initialize_amino_masses();
+    initialized_amino_masses = true;
+  }
+
+  // check if amino acid
+  if ((short int)amino_acid < 'A' || (short int)amino_acid > 'Z') {
+    carp(CARP_ERROR, "Cannot update mass, char: %c not an amino acid");
+  }
+  
+  amino_masses[(short int)amino_acid - 'A' + 26 ] += update_mass;
+  amino_masses[(short int)amino_acid - 'A'] += update_mass;
+}
diff --git a/src/util/mass.h b/src/util/mass.h
new file mode 100644
index 0000000..18b4ac3
--- /dev/null
+++ b/src/util/mass.h
@@ -0,0 +1,132 @@
+#include "model/objects.h"
+#include "io/carp.h"
+//#include "modifications.h"
+
+/**
+ * \file mass.h 
+ * $Revision: 1.18 $
+ * \brief Provides constants and methods for calculating mass
+ *****************************************************************************/
+#ifndef _MASS_H
+#define _MASS_H
+
+/**
+ * Mass of ammonia
+ */
+#define MASS_NH3_MONO  17.02655 ///< Mass of NH3 (monoisotopic)
+#define MASS_NH3_AVERAGE 17.03056 ///< Mass of NH3 (average)
+
+
+// mass of water
+#define MASS_H2O_MONO 18.010564684 ///< Mass of water (monoisotopic)
+#define MASS_H2O_AVERAGE 18.0153 ///< Mass of water (average)
+
+/**
+ * Mass of hydrogen
+ */
+#define MASS_H_MONO 1.0078246 ///< Mass of hydrogen (monoisotopic)
+#define MASS_H_AVERAGE 1.00794 ///< Mass of hydrogen (average)
+
+/* As for the constants, these are for supporting mono-isotopic and
+ * average masses.  When I was collaborating with Pragya with
+ * cross-linking code, she wanted more accurate calculations on the
+ * mass of the peptides and the mass of the spectrum neutral mass.
+ * MASS_PROTON was added in order to improve the accuracy of the
+ * calculated spectrum mass and the precision of the mono-isotopic
+ * masses of the amino acids were extended.  When we are going to
+ * support accurate masses for the precursor ions, I think that
+ * MASS_PROTON will be the correct one to use for the spectrum
+ * mass. --Sean McIlwain, 8 November 2010 */
+
+// FIXME, change in spectrum, peptide to be able to pick mono, average
+#define MASS_H       1.00782503207 ///< mass of hydrogen
+#define MASS_PROTON  1.00727646677 ///< mass of proton
+#define MASS_NEUTRON 1.00866491600 ///< mass of neutron
+
+/**
+ * Mass of oxygen
+ */
+#define MASS_O 16.0013 ///< mass of oxygen
+
+#define MASS_OH 17.00274
+
+/**
+ * Mass of carbon monoxide
+ */
+#define MASS_CO_MONO 27.9949 ///< Mass of  (monoisotopic)
+#define MASS_CO_AVERAGE 28.0101 ///< Mass of  (average)
+
+
+/**
+ * \returns The mass of the given amino acid.
+ */
+FLOAT_T get_mass_amino_acid(
+  char amino_acid, ///< the query amino acid -in
+  MASS_TYPE_T mass_type ///< the isotopic mass type (AVERAGE, MONO) -in
+  );
+
+/**
+ * \returns The mass of the given amino acid.
+ */
+FLOAT_T get_mass_mod_amino_acid(
+  MODIFIED_AA_T amino_acid, ///< the query amino acid -in
+  MASS_TYPE_T mass_type ///< the isotopic mass type (AVERAGE, MONO) -in
+  );
+
+
+/**
+ * \returns The average mass of the given amino acid.
+ */
+FLOAT_T get_mass_amino_acid_average(
+  char amino_acid ///< the query amino acid -in
+  );
+
+/**
+ * \returns The average mass of the given amino acid.
+ */
+FLOAT_T get_mass_mod_amino_acid_average(
+  MODIFIED_AA_T amino_acid ///< the query amino acid -in
+  );
+
+/**
+ * \returns The monoisotopic mass of the given amino acid.
+ */
+FLOAT_T get_mass_amino_acid_monoisotopic(
+  char amino_acid ///< the query amino acid -in
+  );
+
+/**
+ * \returns The monoisotopic mass of the given amino acid.
+ */
+FLOAT_T get_mass_mod_amino_acid_monoisotopic(
+  MODIFIED_AA_T amino_acid ///< the query amino acid -in
+  );
+
+/**
+ * Finds the modification identifier associated with the given mass
+ * shift.  Can be the identifier from a single modfification or from
+ * multiple modficiations to the same residue.  The returned
+ * identifier can be used to modify a MODIFIED_AA_T so that it has the
+ * given mass shift. 
+ */
+MODIFIED_AA_T get_mod_identifier(FLOAT_T mass_shift);
+
+/**
+ * increase the amino acid mass for both mono and average
+ */
+void increase_amino_acid_mass(
+  char amino_acid, ///< the query amino acid -in
+  FLOAT_T update_mass ///< the mass amount to update for the amino acid -in
+  );
+
+/**
+ * \brief Populates the array aa_mod_masses with the mass change of
+ * all possible combinations of aa_mods.  Gets the list of aa_mods
+ * from parameter.c.  For example, if mod1 and a mass change of 50 and
+ * mod5 has a mass change of 10, then the entry at index 
+ * (binary 00010001 =) 17 is (50 + 10=) 60.
+ */
+void initialize_aa_mod_combinations_array();
+
+
+#endif
diff --git a/src/util/modifications.cpp b/src/util/modifications.cpp
new file mode 100644
index 0000000..607f632
--- /dev/null
+++ b/src/util/modifications.cpp
@@ -0,0 +1,993 @@
+/**
+ * \file modifications.cpp
+ * \brief Datatypes and methods for amino acid modifications
+ *
+ * Two data structures define modifications.  The AA_MOD_T is the most
+ * basic type.  It is the information provided by the user: mass
+ * change caused by this mod, amino acids which may be modified in
+ * this way, and the maximum number of this type of modification which
+ * may occur on one peptide.  AA_MODs are defined here.
+ * A collection of AA_MODs that may occur
+ * on some peptide are represented as a PEPTIDE_MOD_T.  This stores
+ * a list of AA_MODS and the net mass change experienced by the
+ * peptide.  PEPTIDE_MODs are defined in peptide_modifications.h
+ * AA_MODs are instantiated once after parsing the parameter file.  All
+ * possible PEPTIDE_MODs are calcualted once and reused for each
+ * spectrum search.  One PEPTIDE_MOD corresponds to one mass window
+ * that must be searched.
+ * 
+ * $Revision: 1.8 $
+ */
+
+#include "modifications.h"
+#include "mass.h"
+#include "GlobalParams.h"
+#include "Params.h"
+#include <stack>
+#include <iostream>
+
+using namespace std;
+
+/**
+ * \brief Keeps a stack of allocated modification sequences
+ */
+class MODIFIED_AA_T_Cache {
+ protected:
+  stack<MODIFIED_AA_T*> cache_; ///< Cache itself
+ public:
+  
+  /**
+   * Constructor
+   */
+  MODIFIED_AA_T_Cache() {;}
+
+  /**
+   * Destructor, deletes all objects in cache
+   */
+  ~MODIFIED_AA_T_Cache() {
+    size_t objects_in_cache = cache_.size();
+    while(!cache_.empty()) {
+      MODIFIED_AA_T *element = cache_.top();
+      cache_.pop();
+      delete []element;
+    }
+  }
+
+  /**
+   * checks out a object out of the cache
+   */
+  MODIFIED_AA_T* checkout(bool clear=false) {
+    MODIFIED_AA_T* new_element;
+    if (cache_.empty()) {
+      new_element = new MODIFIED_AA_T[GlobalParams::getMaxLength()+1];
+    } else {
+      new_element = cache_.top();
+      cache_.pop();
+    }
+    if (clear) {
+      memset(new_element, 0, sizeof(MODIFIED_AA_T)*GlobalParams::getMaxLength()+1);
+    }
+    return (new_element);
+  }
+  
+  
+  /**
+   * checks in a object into the cache
+   */
+  void checkin(
+    MODIFIED_AA_T* array
+  ) {
+    cache_.push(array);
+  }
+  
+};
+
+MODIFIED_AA_T_Cache modified_aa_cache; ///< The cache of modified sequences
+
+/**
+ * \return a new modification sequence array. Can be off of already allocated
+ * arrays
+ */
+MODIFIED_AA_T* newModSeq() {
+  MODIFIED_AA_T* ans = modified_aa_cache.checkout();
+  return(ans);
+}
+
+/**
+ * Releases the modification sequence back into the cache
+ */
+void freeModSeq(
+  MODIFIED_AA_T* &seq  ///< sequence to release
+  ) {
+  modified_aa_cache.checkin(seq);
+  seq=NULL;
+}
+
+/* Private constants */
+//enum { MAX_PROTEIN_SEQ_LENGTH = 40000 };
+
+/* Private global variables */
+/*
+   Modified sequences need both a textual representation as well as a
+   way to be encoded.  A peptide sequence is typically an array of
+   char.  A modified sequence will now be an array of MODIFIED_AA_T,
+   which are shorts.  Each MODIFIED_AA_T is made up of two parts: the
+   5 least-significant bits are used to encode the amino acid, and the
+   remaining are used to encode the modifications made to the aa.
+
+   Values 0-26 are used to represent amino acids A-Z.  There is a
+   function that will take an MODIFIED_AA_T and return the text
+   representation of the amino acid.
+
+   The value of the most significant bit is used to represent
+   modification by the first AA_MOD_T in the parameter.c list.  The
+   second most significant bit represents the second MOD_AA_T in the
+   list and so on.  Note that each AA_MOD_T can be applied only once
+   to an amino acid.  A MODIFED_AA_T can have between 0 and 11
+   modifications applied to it.  There is a function that will take a
+   MODIFIED_AA_T* and the index of an AA_MOD_T and return true if the
+   MODIFIED_AA_T has had the AA_MOD_T applied to it.
+
+   For a textual representation of a modiciation, there are 11
+   non-alpha-numeric characters chosen.  There is a function that will
+   take an MODIFIED_AA_T* and return a pointer to an array of
+   characters that begins with the letter of the amino acid and is
+   followed by all of the symbols corresponding to all of the
+   modifications that have been applied to the amino acid.
+ */
+char mod_sqt_symbols[MAX_AA_MODS] = //{'*', '@', '#', '^', '~', '%', 
+  {'*', '#', '@', '^', '~', '%', // like sequest
+                                     '$', '&', '!', '?', '+'};
+
+uint16_t mod_id_masks[MAX_AA_MODS] = {
+  0x0020,   // 0000 0000 0010 0000 *
+  0x0040,   // 0000 0000 0100 0000 #
+  0x0080,   // 0000 0000 1000 0000 @
+  0x0100,   // 0000 0001 0000 0000 ^
+  0x0200,   // 0000 0010 0000 0000 ~
+  0x0400,   // 0000 0100 0000 0000 %
+  0x0800,   // 0000 1000 0000 0000 $
+  0x1000,   // 0001 0000 0000 0000 &
+  0x2000,   // 0010 0000 0000 0000 !
+  0x4000,   // 0100 0000 0000 0000 ?
+  0x8000    // 1000 0000 0000 0000 +
+}; 
+
+/* Definitions of public methods */
+
+/**
+ * \brief Allocate an AA_MOD, including the aa_list and initialize all
+ * fields to default values.  Symbol and unique identifier are set
+ * according to index.  
+ * \returns A heap allocated AA_MOD with default values.
+ */
+AA_MOD_T* new_aa_mod(int mod_idx) {
+
+  assert(mod_idx > -1 && mod_idx < MAX_AA_MODS );
+
+  AA_MOD_T* mod = (AA_MOD_T*)mymalloc(sizeof(AA_MOD_T));
+
+  mod->mass_change = 0;
+  mod->max_per_peptide = 0;
+  mod->position = ANY_POSITION;
+  mod->max_distance = MAX_PROTEIN_SEQ_LENGTH;
+  mod->symbol = mod_sqt_symbols[mod_idx];
+  mod->identifier = mod_id_masks[mod_idx];
+  mod->prevents_cleavage = false;
+  mod->prevents_xlink = false;
+  // allocate the aa lists for mods 
+  /*
+  mod->aa_list =                        // all 0's?
+    (bool*)mycalloc(AA_LIST_LENGTH, sizeof(bool)); 
+  */
+  // initialize to false
+  int aa_idx = 0;
+  for (aa_idx = 0; aa_idx < AA_LIST_LENGTH; aa_idx++) {
+    mod->aa_list[aa_idx] = false;
+  }
+  return mod;
+}
+
+/**
+ * \brief Free the memory for an AA_MOD including the aa_list.
+ */
+void free_aa_mod(AA_MOD_T* mod) {
+  if (mod) {
+    //if( mod->aa_list ) {free(mod->aa_list);}
+    free(mod);
+  }
+}
+
+/**
+ * \brief Converts a MODIFIED_AA into a char, effectively unmodifying it.
+ * \returns The unmodified char representation of an aa.
+ */
+char modified_aa_to_char(MODIFIED_AA_T aa) {
+  aa = aa & 0x001F;         // 0000 0000 0001 1111
+  return (char)aa + 'A';
+}
+
+/**
+ * \brief Converts a char representation of an aa to an unmodified aa
+ * of type MODIFIED_AA_T.  Requires 'A' <= char <= 'Z'. 
+ * \returns The MODIFIED_AA_T represnetation of an aa.
+ */
+MODIFIED_AA_T char_aa_to_modified(char aa) {
+  assert( aa >= 'A' && aa <= 'Z' );
+  MODIFIED_AA_T mod_aa = (MODIFIED_AA_T)aa - (MODIFIED_AA_T)'A';
+  return mod_aa;
+}
+
+/**
+ * \brief Converts a MODIFIED_AA_T to it's textual representation,
+ * i.e. a letter followed by between 0 and 11 symbols for the
+ * modifications made to the amino acid.
+ * \returns A newly allocated char* with amino acid and modifciation
+ * symbols. 
+ */
+char* modified_aa_to_string_with_symbols(MODIFIED_AA_T aa) {
+
+  int modified_by = 0;
+  AA_MOD_T** mod_list = NULL;
+  int total_mods = get_all_aa_mod_list(&mod_list);
+  for (int mod_idx = 0; mod_idx < total_mods; mod_idx++) {
+    if (is_aa_modified(aa, mod_list[mod_idx])) {
+      modified_by++;
+    }
+  }
+  char* return_string = (char*)mymalloc((modified_by+2)*sizeof(char));
+                                                  // 2 = aa + null term
+  int return_idx = 0;
+  return_string[return_idx] = modified_aa_to_char(aa);
+  return_idx++;
+  for (int mod_idx = 0; mod_idx < total_mods; mod_idx++) {
+    if (is_aa_modified(aa, mod_list[mod_idx])) {
+      return_string[return_idx] = aa_mod_get_symbol(mod_list[mod_idx]);
+      return_idx++;
+    }
+  }
+  return_string[return_idx] = '\0';
+  return return_string;
+}
+
+/**
+ * \brief Converts a MODIFIED_AA_T to it's textual representation,
+ * i.e. a letter either alone or followed by square brackets containing
+ * the mass(es) of any modifications. If mass_format is
+ * MOD_MASSES_SEPARATE, all masses are listed in a comma-separated
+ * list.  If MOD_MASS_ONLY, they are summed and returned in one
+ * number.  If AA_PLUS_MOD, the mass of the residue plus the mass of
+ * the modifciation(s) is printed. 
+ * 
+ * \returns A newly allocated char* with amino acid and modifciation
+ * masses in square brackets.
+ */
+char* modified_aa_to_string_with_masses(MODIFIED_AA_T aa, 
+                                        MASS_FORMAT_T mass_format,
+                                        int precision) {
+  int modified_by = 0;
+  AA_MOD_T** mod_list = NULL;
+  int total_mods = get_all_aa_mod_list(&mod_list);
+  for (int mod_idx = 0; mod_idx < total_mods; mod_idx++) {
+    if (is_aa_modified(aa, mod_list[mod_idx])) {
+      modified_by++;
+    }
+  }
+
+  // return the char if no mods
+  if (modified_by == 0) {
+    char* aa_str = (char*)mymalloc(2 * sizeof(char));
+    sprintf(aa_str, "%c", modified_aa_to_char(aa));
+    return aa_str;
+  }
+
+  // go through all mods and sum mass or append to string
+
+  // at most 11 mods, each at most 7 char "000.00,", total 77
+  char* mass_string = (char*)mymalloc(128 * sizeof(char));
+  char* mass_string_ptr = mass_string;
+  FLOAT_T summed_masses = 0;
+  if (mass_format == AA_PLUS_MOD) {
+    summed_masses = 
+      get_mass_mod_amino_acid(aa, GlobalParams::getIsotopicMass());
+  } else {
+
+    for (int mod_idx = 0; mod_idx < total_mods; mod_idx++) {
+      if (is_aa_modified(aa, mod_list[mod_idx])) {
+        // either add to the sum or to the string
+        if (mass_format == MOD_MASS_ONLY) {
+          summed_masses += aa_mod_get_mass_change(mod_list[mod_idx]);
+        } else {
+          sprintf(mass_string_ptr, "%.*f,", precision,
+                  aa_mod_get_mass_change(mod_list[mod_idx]));
+          mass_string_ptr += strlen(mass_string_ptr);
+        }
+      }
+    }
+  }
+
+  // combine aa and masses
+  char* return_string = NULL;
+  if (mass_format != MOD_MASSES_SEPARATE) { // X[000.00]'/0'
+    return_string = (char*)mymalloc(10 * sizeof(char));
+    sprintf(return_string, "%c[%1.*f]", modified_aa_to_char(aa), 
+            precision, summed_masses );
+  } else { // X[000.00,etc]'/0'
+    return_string = (char*)mymalloc((4 + strlen(mass_string)) * sizeof(char));
+    // take off the last comma
+    mass_string[(strlen(mass_string) - 1)] = '\0';
+    sprintf(return_string, "%c[%s]", modified_aa_to_char(aa), mass_string);
+
+  }
+  free(mass_string);
+  return return_string;
+}
+
+/**
+ * \brief Take an array of MODIFIED_AA_T's and return an array of
+ * char's that includes the letter of each aa and the mass change of
+ * any modifications in brackets following the modified residue.  
+ * If mass_format is MOD_MASSES_SEPARATE, all masses are listed in a
+ * comma-separated list.  If MOD_MASS_ONLY, they are summed and
+ * returned in one number.  If AA_PLUS_MOD, the mass of the residue
+ * plus the mass of the modifciation(s) is printed.  
+ *
+ * \returns A newly allocated array of characters, a text
+ * representation of the modified sequence.
+ */
+char* modified_aa_string_to_string_with_masses(
+  MODIFIED_AA_T* aa_string, // the modified aa's to translate
+  int length, // length of aa_string
+  MASS_FORMAT_T mass_format // which mass value to print
+) {
+  if (aa_string == NULL || length == 0) {
+    carp(CARP_ERROR, "Cannot print a NULL modified sequence");
+    return NULL;
+  }
+  // get access to the mods
+  AA_MOD_T** global_mod_list = NULL;
+  int mod_list_length = get_all_aa_mod_list(&global_mod_list);
+
+  // count up  modifications
+  int count = 0;
+  for (int mod_str_idx = 0; mod_str_idx < length; mod_str_idx++) {
+    // check each mod in list
+    for(int global_idx = 0; global_idx < mod_list_length; global_idx++) {
+      if (is_aa_modified(aa_string[mod_str_idx], global_mod_list[global_idx])) {
+        count++;  // count all mods
+      }
+    }
+  }
+
+  int precision = GlobalParams::getModPrecision();
+  // max total length = #aas + ( #mods * (strlen("[000.,]")+precision) ) + '/0'
+  int buffer_size = length + (count * (9 + precision)) + 1;
+  char* return_string = (char*)mymalloc(buffer_size * sizeof(char));
+  char* return_str_ptr = return_string;
+  for (int mod_str_idx = 0; mod_str_idx < length; mod_str_idx++) {
+    char* cur_mod = 
+      modified_aa_to_string_with_masses(aa_string[mod_str_idx], mass_format, precision);
+    strcpy( return_str_ptr, cur_mod );
+    return_str_ptr += strlen(cur_mod);
+    free(cur_mod);
+  }
+
+  return return_string;
+}
+
+/**
+ * \brief Take an array of MODIFIED_AA_T's and return an array of
+ * char's that includes the letter of each aa and the symbol for all
+ * applied modifications.
+ *
+ * \returns A newly allocated array of characters, a text
+ * representation of the modified sequence.
+ */
+char* modified_aa_string_to_string_with_symbols(
+  MODIFIED_AA_T* aa_string, 
+  int length
+) {
+  if (aa_string == NULL || length == 0) {
+    carp(CARP_ERROR, "Cannot print a NULL modified sequence");
+    return NULL;
+  }
+
+  AA_MOD_T** global_mod_list = NULL;
+  int mod_list_length = get_all_aa_mod_list(&global_mod_list);
+  int global_idx = 0;
+
+  // count up amino acids and modifications
+  int count = 0;
+  int mod_str_idx = 0;
+  //  while (aa_string[mod_str_idx] != MOD_SEQ_NULL) {
+  for (mod_str_idx = 0; mod_str_idx < length; mod_str_idx++) {
+    count++;      // count the aas
+    for (global_idx = 0; global_idx < mod_list_length; global_idx++) {
+      if (is_aa_modified(aa_string[mod_str_idx], global_mod_list[global_idx])) {
+        count++;  // count all mods
+      }
+    }
+    //    mod_str_idx++;
+  }
+  //  carp(CARP_DETAILED_DEBUG, "Found %d modified aas out of %i",
+  //     count - mod_str_idx, count);
+  //int mod_str_len = mod_str_idx;  // keep track of aa_string length
+
+  // create a buffer to hold all aas and mod symbols
+  char* return_string = (char*)mymalloc((count+1)*sizeof(char));
+  char* return_str_ptr = return_string;
+
+  // for each mod_aa, get the string representation, copy to return str
+  //  for (mod_str_idx = 0; mod_str_idx < mod_str_len; mod_str_idx++) {
+  for (mod_str_idx = 0; mod_str_idx < length; mod_str_idx++) {
+
+    char* cur_mod = modified_aa_to_string_with_symbols(aa_string[mod_str_idx]);
+    strcpy( return_str_ptr, cur_mod );
+    return_str_ptr += strlen(cur_mod);
+    free(cur_mod);
+  }
+
+  return return_string;
+}
+
+/**
+ * \brief Takes an array of MODIFIED_AA_T's and returns an array of
+ * char's, one for each amino acid in the sequence.  It DOES NOT
+ * include any modification symbols.  Use with caution.
+ * \returns A newly allocated char* with ONLY amino acids, all
+ * modifications are removed.
+ */
+char* modified_aa_to_unmodified_string(MODIFIED_AA_T* aa_string, int length) {
+  if (aa_string == NULL) {
+    carp(CARP_ERROR, "Cannot print a NULL modified sequence");
+    return NULL;
+  }
+
+  char* new_string = (char*)mycalloc(length+1, sizeof(char));
+  for (int aa_idx = 0; aa_idx < length; aa_idx++) {
+    new_string[aa_idx] = modified_aa_to_char(aa_string[aa_idx]);
+  }
+  new_string[length] = '\0';
+
+  return new_string;
+}
+
+/**
+ * \brief Allocates an array of MODIFIED_AA_T's and populates it with
+ * the MODIFIED_AA_T value that corresponds to each sequence char
+ * value and trailing modification symbols or masses.  Returns the new
+ * sequence via the mod_sequence argument.
+ *
+ * \returns The length of the mod_sequence array.
+ */
+int convert_to_mod_aa_seq(const string& sequence, 
+                          MODIFIED_AA_T** mod_sequence,
+                          MASS_FORMAT_T mass_format) {
+
+  if( sequence.empty() ){
+    carp(CARP_ERROR, "Cannot convert NULL sequence to modifiable characters"); 
+    return 0;
+  }
+
+  MASS_TYPE_T mass_type = GlobalParams::getIsotopicMass();
+  const char* csequence = sequence.c_str();
+
+  int seq_len = sequence.length();
+  MODIFIED_AA_T* new_sequence = newModSeq(); 
+  unsigned int seq_idx = 0;  // current position in given sequence
+  unsigned int mod_idx = 0;  // current position in the new_sequence
+  for(seq_idx = 0; seq_idx < seq_len; seq_idx++){
+    // is the character a residue?
+    if( csequence[seq_idx] >= 'A' && csequence[seq_idx] <= 'Z' ){ 
+      // add to the new sequence
+      new_sequence[mod_idx] = char_aa_to_modified( csequence[seq_idx] );
+      mod_idx++;
+      continue;
+    } 
+
+    // else it's a modification as symbol or mass
+    const AA_MOD_T* aa_mod = NULL;
+
+    if (sequence[seq_idx] == '[' || sequence[seq_idx] == ',') {//mod mass
+      seq_idx++;
+      FLOAT_T delta_mass = atof(csequence + seq_idx);
+      if (mass_format == AA_PLUS_MOD) {
+        assert(mod_idx > 0);
+        delta_mass -= get_mass_mod_amino_acid(new_sequence[mod_idx - 1], 
+                                              mass_type);
+      }
+      // translate mass into aa_mod
+      aa_mod = get_aa_mod_from_mass(delta_mass);
+
+      // move to next mod or residue
+      while (sequence[seq_idx] != ']' && sequence[seq_idx] != ',') {
+        seq_idx++;
+      }
+      // back up one for the comma
+      if (sequence[seq_idx] == ',') {
+        seq_idx--;
+      }
+    } else { // mod symbol
+      // translate character into aa_mod
+      aa_mod = get_aa_mod_from_symbol(sequence[seq_idx]);
+    }
+    if (mod_idx == 0) {
+      //This can happen with nterminal modifications from comet.
+      seq_idx++;
+      if (seq_idx < seq_len && sequence[seq_idx] >= 'A'  && sequence[seq_idx] <= 'Z') {
+        new_sequence[mod_idx] = char_aa_to_modified( sequence[seq_idx] );
+        mod_idx++;
+      } else {
+        carp(CARP_FATAL, "Cannot parse sequence %s", csequence);
+      }
+      
+      
+    }
+    // apply the modification
+    if (aa_mod == NULL) {
+      carp(CARP_WARNING, "There is an unidentifiable modification in sequence "
+           "<%s> at position %d.", csequence, seq_idx - 1);
+    } else {
+      // apply modification
+      modify_aa(&new_sequence[mod_idx-1], aa_mod);
+    }
+  } // next character in given sequence
+
+  // null terminate
+  new_sequence[mod_idx] = MOD_SEQ_NULL;
+
+  //  return new_sequence;
+  *mod_sequence = new_sequence;
+  return mod_idx;
+}
+
+/**
+ * \brief Allocate a new MODIFIED_AA_T array and copy values into it.
+ */
+MODIFIED_AA_T* copy_mod_aa_seq(const MODIFIED_AA_T* source, int length) {
+  if (source == NULL) {
+    carp(CARP_ERROR, "Cannot copy NULL sequence of modified_aa's.");
+    return NULL;
+  }
+
+  MODIFIED_AA_T* new_seq = newModSeq();
+  memcpy( new_seq, source, length * sizeof(MODIFIED_AA_T));
+  new_seq[length] = MOD_SEQ_NULL;
+
+  return new_seq;
+}
+
+/**
+ * \brief Allocate a new MODIFIED_AA_T array and copy values into it.
+ */
+MODIFIED_AA_T* copy_mod_aa_seq(
+  const MODIFIED_AA_T* source ///< Sequence to copy
+  ) {
+  if (source == NULL) {
+    carp(CARP_ERROR, "Cannot copy NULL sequence of modified_aa's.");
+    return NULL;
+  }
+
+  MODIFIED_AA_T* new_seq = newModSeq();
+  size_t length = 0;
+  while (source[length] != MOD_SEQ_NULL) {
+    new_seq[length] = source[length];
+    length++;
+  }
+  new_seq[length] = MOD_SEQ_NULL;
+  return(new_seq);
+
+}
+
+
+
+/**
+ * \brief Remove any characters not A-Z from a peptide sequence.
+ * \returns A newly allocated string with the given sequence less any
+ * modififcation symbols or masses.
+ */
+char* unmodify_sequence(const char* modified_sequence) {
+  if (modified_sequence == NULL) {
+    return NULL;
+  }
+  char* new_seq = my_copy_string(modified_sequence);
+  unmodify_sequence_in_place(new_seq);
+  return new_seq;
+}
+
+/**
+ * \brief Remove any characters that are not A-Z from a given peptide
+ * seqeunce.
+ */
+void unmodify_sequence_in_place(char* sequence) {
+  int seq_len = strlen(sequence);
+  int next_aa_idx = 0;
+  int move_to_here = 0;
+  while (next_aa_idx < seq_len) {
+    if (sequence[next_aa_idx] >= 'A' && sequence[next_aa_idx] <= 'Z') {
+      sequence[move_to_here] = sequence[next_aa_idx];
+      move_to_here++;
+    }
+    next_aa_idx++;
+  }
+  sequence[move_to_here] = '\0';
+}
+
+
+/**
+ * \brief Determine if an array of MODIFIED_AA_T is a palindrome.  
+ * Used by reverse_sequence to avoid returning a reversed sequence
+ * that is the same as the target.  Ignores the first and last
+ * residues. 
+ * \returns true if the reversed sequence would be the same as the
+ * forward, otherwise false.
+ */
+bool modified_aa_seq_is_palindrome(MODIFIED_AA_T* seq, int length) {
+  if (seq == NULL) {
+    return false;
+  }
+
+  int left_idx = 1;    // skip first and last residues
+  int right_idx = length - 2;
+
+  while (left_idx < right_idx) {
+    if (seq[left_idx] != seq[right_idx]) {
+      return false;
+    }// else, keep checking
+    left_idx++;
+    right_idx--;
+  }
+
+  // if we got to here, they all matched
+  return true;
+}
+
+// FIXME: implement this
+bool is_aa_modified(MODIFIED_AA_T aa, AA_MOD_T* mod) {
+  return (aa & mod->identifier) != 0;
+}
+
+/**
+ * \brief Determine if this modified amino acid can be modified by
+ * this modification.
+ *
+ * Checks the mod list of modifiable residues to see if aa is in the
+ * list.  Also checks to see if aa has already been modified by this
+ * mod.  
+ * \returns true if it can be modified, else false
+ */
+bool is_aa_modifiable(
+  MODIFIED_AA_T aa, ///< The sequence amino acid to be modified
+  AA_MOD_T* mod) {   ///< The aa_mod to modify it with
+
+  if (is_aa_modified(aa, mod)) {
+    return false;
+  }
+  if (mod->aa_list[(int)modified_aa_to_char(aa) - 'A']) {
+  //if (mod->aa_list[(int)modified_aa_to_char(aa)] && !is_aa_modified(aa, mod)) {
+    return true;
+  }
+  // else not in list or already modified by this mod
+  return false;
+}
+
+/**
+ * \brief Adds a modification to a MODIFIED_AA_T.
+ *
+ * Assumes that the aa is modifiable, no explicit check.  If the aa is
+ * already modified for the mod, no change to aa.
+ */
+void modify_aa(MODIFIED_AA_T* aa, const AA_MOD_T* mod) {
+  if (aa == NULL || mod == NULL) {
+    carp(CARP_ERROR, "Cannot modify aa.  Either aa or mod is NULL.");
+    return;
+  }
+  *aa = *aa | mod->identifier;
+}
+
+/**
+ * \brief Return the AA_MOD_T associated with the given symbol.  If
+ * the symbol does not represent a modification, returns null.
+ * Requires that parameters have been initialized.
+ */
+const AA_MOD_T* get_aa_mod_from_symbol(const char symbol) {
+  AA_MOD_T** mod_list = NULL;
+  int total_mods = get_all_aa_mod_list(&mod_list);
+  for (int mod_idx = 0; mod_idx < total_mods; mod_idx++) {
+    AA_MOD_T* cur_mod = mod_list[mod_idx];
+    if (cur_mod->symbol == symbol) {
+      return cur_mod;
+    }
+  }
+
+  // none of the mods matched the symbol
+  carp(CARP_ERROR, "The modification symbol '%c' is not valid.", symbol);
+  return NULL;
+}
+
+/**
+ * \brief Return the delta mass associated with the given modification
+ * symbol.  If the symbol does not represent a modification, returns
+ * 0. Requires that parameters have been initialized.
+ */
+FLOAT_T get_mod_mass_from_symbol(const char symbol) {
+
+  const AA_MOD_T* mod = get_aa_mod_from_symbol(symbol);
+  if (mod == NULL) {
+    return 0;
+  }
+
+  return aa_mod_get_mass_change(mod);
+}
+
+// a temporary AA_MOD_T with identifier and mass for (potentially)
+// more than one modification
+AA_MOD_T multi_mod; 
+
+/**
+ * \brief Return the modification identifier that can be used to modify a
+ * MODIFIED_AA_T so that it has the given mass shift.
+ * The mass may either be from a single AA_MOD_T as given by the user
+ * or from any combination of AA_MOD_T's.  If no combinations of
+ * AA_MOD_T's can be found for the mass, returns 0.
+ * Requires that parameters have been initialized.
+ */
+const AA_MOD_T* get_aa_mod_from_mass(FLOAT_T mass) {
+  // find the identifier for this mass shift
+  MODIFIED_AA_T id = get_mod_identifier(mass);
+
+  if (id == 0) { // get_mod_id already warned
+    //here we are creating a modification.  Hopefully
+    //this will only get used when post-processing search
+    //results, maybe we will need to check that at some point
+    //SJM 2013_10_10.
+    carp(CARP_INFO, "Creating modification for %f", mass);
+    AA_MOD_T** mods = NULL;
+    int num_mods = get_all_aa_mod_list(&mods);
+    mods[num_mods]->mass_change = mass;
+    incrementNumMods(); 
+    initialize_aa_mod_combinations_array();
+    return get_aa_mod_from_mass(mass);
+  } else {
+    // set multi_mod_identifier to that id and mass
+    multi_mod.identifier = id;
+  }
+  multi_mod.mass_change = mass;
+  carp(CARP_DETAILED_DEBUG, "Returning %i %f", multi_mod.identifier, multi_mod.mass_change);
+  return &multi_mod;
+}
+
+/**
+ * print all fields in aa mod.  For debugging
+ */
+void print_a_mod(AA_MOD_T* mod) {
+  printf("AMOD: mass %.2f, max per %d, max dist %d, symb %c, aa list ",
+         mod->mass_change, mod->max_per_peptide, mod->max_distance,
+         mod->symbol);
+
+  int i = 0;
+  for (i = 0; i < AA_LIST_LENGTH; i++) {
+    if (mod->aa_list[i]) {
+      printf("%c", (i + 'A'));
+    }
+  }
+  printf("\n");
+}
+
+/**
+ * \brief Generates a string representation of an aa_mod and returns a
+ * pointer to that newly allocated string.
+ */
+char* aa_mod_to_string(const AA_MOD_T* mod) {
+  const char* format_str = 
+    "mass change=%.2f, symbol=%c, max=%d, position=%s, apply to ";
+  char* return_str = (char*)mycalloc( strlen(format_str) + 50, sizeof(char));
+  // add 26 for letters and some more for good measure
+
+  // get position info
+  const char* pos_format = "%c-term most %d from end";
+  char* pos_buffer = (char*)mycalloc(strlen(pos_format) + 9, sizeof(char));
+  switch (mod->position) {
+  case ANY_POSITION:
+    strcpy(pos_buffer, "any");
+    break;
+  case C_TERM:
+    sprintf(pos_buffer, pos_format, 'C', mod->max_distance);
+    break;
+  case N_TERM:
+    sprintf(pos_buffer, pos_format, 'N', mod->max_distance);
+    break;
+  }
+  int length = sprintf(return_str, format_str, mod->mass_change, 
+                       mod->symbol, mod->max_per_peptide, pos_buffer);
+
+  char* str_ptr = return_str + length;
+  int i = 0;
+  for (i = 0; i < AA_LIST_LENGTH; i++) {
+    if (mod->aa_list[i]) {
+      sprintf(str_ptr, "%c", (i + 'A'));
+      str_ptr++;
+    }
+  }
+  free(pos_buffer);
+  return return_str;
+}
+
+/* Setters and Getters */
+
+/**
+ * \brief Set the symbol used by this modification.
+ * \returns void
+ */
+void aa_mod_set_symbol(AA_MOD_T* mod, char symbol) {
+  mod->symbol = symbol;
+}
+
+/**
+ * \brief Set the mass change caused by this modification.
+ * \returns void
+ */
+void aa_mod_set_mass_change(AA_MOD_T* mod, double mass_change) {
+  mod->mass_change = mass_change;
+}
+
+/**
+ * \brief Get the mass change caused by this modification.
+ * \returns The mass change caused by this modification.
+ */
+double aa_mod_get_mass_change(const AA_MOD_T* mod) {
+  return mod->mass_change;
+}
+
+/**
+ * \brief Access to the aa_list of the AA_MOD_T struct.  This pointer
+ * can be used to get or set the list of residues on which this mod
+ * can be placed.
+ * \returns A pointer to the list of amino acids on which this mod can
+ * be placed.
+ */
+bool* aa_mod_get_aa_list(AA_MOD_T* mod) {
+  return mod->aa_list;
+}
+
+/**
+ * \brief Set the maximum number of times this modification can be
+ * placed on one peptide.
+ * \returns void
+ */
+void aa_mod_set_max_per_peptide(AA_MOD_T* mod, int max) {
+  mod->max_per_peptide = max;
+}
+
+/**
+ * \brief Get the maximum number of times this modification can be
+ * placed on one peptide.  
+ * \returns The max times per peptide this mod can be placed.
+ */
+int aa_mod_get_max_per_peptide(AA_MOD_T* mod) {
+  return mod->max_per_peptide;
+}
+
+/**
+ * \brief Set the maximum distance from the protein terminus that the
+ * modification can be placed.  Which terminus (C or N) is determined
+ * by the position type.  To indicate no position restriction, set to
+ * MAX_PROTEIN_SEQ_LENGTH. 
+ * \returns void
+ */
+void aa_mod_set_max_distance(AA_MOD_T* mod, int distance) {
+  mod->max_distance = (distance == -1) ? MAX_PROTEIN_SEQ_LENGTH : 
+                                         distance;
+}
+
+/**
+ * \brief Get the maximum distance from the protein end that the
+ * modification can be placed.  Will be MAX_PROTEIN_SEQ_LENGTH if
+ * position type is ANY_POSITION.
+ * \returns Maximum distance from protein terminus at which mod can be
+ * placed. 
+ */
+int aa_mod_get_max_distance(AA_MOD_T* mod) {
+  return mod->max_distance;
+}
+
+/**
+ * \brief Set the position type of an aa_mod.
+ * \returns void
+ */
+void aa_mod_set_position(AA_MOD_T* mod, MOD_POSITION_T position) {
+  mod->position = position;
+}
+
+/**
+ * \brief Where in the peptide can the modification be placed.
+ * \returns ANY_POSITION for standard mods; C_TERM or N_TERM for those
+ * that can only be placed at the ends of the peptide.
+ */
+MOD_POSITION_T aa_mod_get_position(AA_MOD_T* mod) {
+  return mod->position;
+}
+
+/**
+ * \brief Sets whether the modification can prevent cleavage.
+ * \returns void
+ */
+void aa_mod_set_prevents_cleavage(AA_MOD_T* mod, bool prevents_cleavage) {
+  mod->prevents_cleavage = prevents_cleavage;
+}
+
+/**
+ * \brief gets whether the modification can prevent cleavage
+ * \returns true or false
+ */
+bool aa_mod_get_prevents_cleavage(AA_MOD_T* mod) {
+  return mod->prevents_cleavage;
+}
+
+/**
+ * \brief Sets whether the modifications can prevent cross-linking.
+ * \returns void
+ */
+void aa_mod_set_prevents_xlink(AA_MOD_T* mod, bool prevents_xlink) {
+  mod->prevents_xlink = prevents_xlink;
+}
+
+/**
+ * \brief gets whether the modification can prevent cross-linking.
+ * \returns true or false
+ */
+bool aa_mod_get_prevents_xlink(AA_MOD_T* mod) {
+  return mod->prevents_xlink;
+}
+
+/**
+ * \brief The character used to uniquely identify the mod in the sqt file.
+ * \returns The character identifier.
+ */
+char aa_mod_get_symbol(const AA_MOD_T* mod) {
+  return mod->symbol;
+}
+
+/**
+ * \brief Create a string containing all of the amino acids that can
+ * be modified by this aa_mod.  E.g. if S, T, and Y can be modified,
+ * returns "STY".
+ * \returns A newly allocated string.
+ */
+string aa_mod_get_aa_list_string(AA_MOD_T* mod) {
+  string s;
+  for (int i = 0; i < AA_LIST_LENGTH; i++) {
+    if (mod->aa_list[i]) {
+      s += (char)('A' + i);
+    }
+  }
+  return s;
+}
+
+/**
+ * Count the number of modified aas in the string.
+ */
+int count_modified_aas(MODIFIED_AA_T* seq) {
+  if (seq == NULL) {
+    return 0;
+  }
+
+  int count = 0;
+  int aa_idx = 0;
+  while (seq[aa_idx] != MOD_SEQ_NULL) {
+    if (GET_MOD_MASK & seq[aa_idx]) {
+      count++;
+    }
+    aa_idx++;
+  }
+
+  return count;
+
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/util/modifications.h b/src/util/modifications.h
new file mode 100644
index 0000000..ad2a54e
--- /dev/null
+++ b/src/util/modifications.h
@@ -0,0 +1,419 @@
+/**
+ * \file modifications.h
+ * \brief Datatypes and methods for amino acid modifications
+ *
+ * Two data structures define modifications.  The AA_MOD_T is the most
+ * basic type.  It is the information provided by the user: mass
+ * change caused by this mod, amino acids which may be modified in
+ * this way, and the maximum number of this type of modification which
+ * may occur on one peptide.  AA_MODs are defined here.
+ * A collection of AA_MODs that may occur
+ * on some peptide are represented as a PEPTIDE_MOD_T.  This stores
+ * a list of AA_MODS and the net mass change experienced by the
+ * peptide.  PEPTIDE_MODs are defined in peptide_modifications.h
+ * AA_MODs are instantiated once after parsing the parameter file.  All
+ * possible PEPTIDE_MODs are calcualted once and reused for each
+ * spectrum search.  One PEPTIDE_MOD corresponds to one mass window
+ * that must be searched.
+ * 
+ * $Revision: 1.7 $
+ */
+#ifndef MODIFICATION_FILE_H
+#define MODIFICATION_FILE_H
+
+#include <assert.h>
+#include "utils.h"
+#include "linked_list.h"
+#include "model/objects.h"
+#include "parameter.h"
+
+/* Public constants */
+static const int MAX_AA_MODS = 11;
+static const int MAX_PROTEIN_SEQ_LENGTH = 40000;
+static const int AA_LIST_LENGTH = 26; // A-Z
+static const int MOD_MASS_PRECISION = 2;  // printed as X[1.23]X
+#define GET_AA_MASK  0x001F   // 0000 0000 0001 1111
+#define GET_MOD_MASK 0xFFE0   // 1111 1111 1110 0000
+
+/**
+ * \struct _aa_mod
+ * 
+ *  Modification at the amino acid level.  A single mass change that can
+ *  occur on any of the residues listed.  This information is given by
+ *  the user in the parameter file.  Also stores a character symbol
+ *  assigned at runtime to be used in the sqt result file and an
+ *  integer bitmask to be used to give each aa_mod a unique identifier.
+ */
+struct _aa_mod{ 
+  double mass_change;  ///< the amount by which the mass of the residue changes
+  bool aa_list[AA_LIST_LENGTH];
+                       ///< an array indexed by AA, true if can be modified
+  int max_per_peptide; ///< the maximum number of mods per peptide
+  MOD_POSITION_T position; ///< where the mod can occur in the pep/prot
+  int max_distance;        ///< the max distance from the protein terminus
+  char symbol;         ///< the character to represent the mod in sqt files
+  bool prevents_cleavage; ///< can modification prevent cleavage?
+  bool prevents_xlink; ///< can modification prevent xlink?
+  MODIFIED_AA_T identifier; ///< the bitmask assigned for unique ID
+};
+
+// this was moved to object.h b/c methods in peptide.h weren't compiling
+//typedef unsigned short MODIFIED_AA_T; ///< letters in the expanded peptide
+                                      ///alphabet, bits for mod1 mod2...aa
+#define MOD_SEQ_NULL (MODIFIED_AA_T)('Z' - 'A' + 1) 
+//enum {MOD_SEQ_NULL = 'Z' - 'A' + 1}; 
+///< null terminating character of array
+
+/*
+   e.g. There are three aa_mods specified in this run and they are
+   given the masks mod1  1000_0000_0000_0000
+                   mod2  0100_0000_0000_0000
+                   mod3  0010_0000_0000_0000
+   The amino acid Y has the value
+                      Y  0000_0000_0001_0011
+
+   Suppose you set the variable aa to Y.  Do stuff.  To ask "is aa
+  modified by mod2", do this. answer = mod2 AND aa; answer == 0
+   To change aa to be modified by modcalle2, aa = mod2 NOR aa
+ (i.e. !(mod2 || aa) )  now aa == 0100_0000_0001_0011
+   If we ask again, answer == 0100_0000_0000_0000 
+ */
+
+/**
+ * \brief Allocate an AA_MOD, including space for the aa_list and
+ * initialize all fields to default values.  Symbol and unique
+ * identifier are set according to index.  
+ * \returns A heap allocated AA_MOD with default values.
+ */
+AA_MOD_T* new_aa_mod(int mod_idx);
+
+/**
+ * \brief Free the memory for an AA_MOD including the aa_list.
+ */
+void free_aa_mod(AA_MOD_T* mod);
+
+/**
+ * \brief Converts a MODIFIED_AA into a char, effectively unmodifying it.
+ * \returns The unmodified char representation of an aa.
+ */
+char modified_aa_to_char(MODIFIED_AA_T aa);
+
+/**
+ * \brief Converts a char representation of an aa to an unmodified aa
+ * of type MODIFIED_AA_T.  Requires 'A' <= char <= 'Z'. 
+ * \returns The MODIFIED_AA_T represnetation of an aa.
+ */
+MODIFIED_AA_T char_aa_to_modified(char aa);
+
+/**
+ * \brief Converts a MODIFIED_AA_T* to it's textual representation,
+ * i.e. a letter followed by between 0 and 11 symbols for the
+ * modifications made to the amino acid.
+ * \returns A newly allocated char* with amino acid and modifciation
+ * symbols. 
+ */
+char* modified_aa_to_string_with_symbols(MODIFIED_AA_T aa);
+
+/**
+ * \brief Converts a MODIFIED_AA_T to it's textual representation,
+ * i.e. a letter either alone or followed by square braces containing
+ * the mass(es) of any modifications.  If mass_format is
+ * MOD_MASSES_SEPARATE, all masses are listed in a comma-separated
+ * list.  If MOD_MASS_ONLY, they are summed and returned in one
+ * number.  If AA_PLUS_MOD, the mass of the residue plus the mass of
+ * the modifciation(s) is printed.
+ * 
+ * \returns A newly allocated char* with amino acid and modifciation
+ * masses in square brackets.
+ */
+char* modified_aa_to_string_with_masses(MODIFIED_AA_T aa, 
+                                        MASS_FORMAT_T mass_format,
+                                        int precision);
+/**
+ * \brief Take an array of MODIFIED_AA_T's and return an array of
+ * char's that includes the letter of each aa and the mass change of
+ * any modifications in brackets following the modified residue.  If
+ * If is mass_format MOD_MASSES_SEPARATE, all masses are listed in a
+ * comma-separated list.  If MOD_MASS_ONLY, they are summed and
+ * returned in one number.  If AA_PLUS_MOD, the mass of the residue
+ * plus the mass of the modifciation(s) is printed.
+ *
+ * \returns A newly allocated array of characters, a text
+ * representation of the modified sequence.
+ */
+char* modified_aa_string_to_string_with_masses(
+  MODIFIED_AA_T* aa_string, // the modified aa's to translate
+  int length, // length of aa_string
+  MASS_FORMAT_T mass_format); // which mass value to print
+
+/**
+ * \brief Take an array of MODIFIED_AA_T's and return an array of
+ * char's that includes the letter of each aa and the symbol for all
+ * applied modifications.
+ *
+ * \returns A newly allocated array of characters, a text
+ * representation of the modified sequence.
+ */
+char* modified_aa_string_to_string_with_symbols(
+  MODIFIED_AA_T* aa_string, // modified aa's to translate
+  int length); // length of aa_string
+
+/**
+ * \brief Takes an array of MODIFIED_AA_T's and returns an array of
+ * char's, one for each amino acid in the sequence.  It DOES NOT
+ * include any modification symbols.  Use with caution.
+ * \returns A newly allocated char* with ONLY amino acids, all
+ * modifications are removed.
+ */
+char* modified_aa_to_unmodified_string(MODIFIED_AA_T* aa_string, int length);
+
+/**
+ * \brief Allocates an array of MODIFIED_AA_T's and populates it with
+ * the MODIFIED_AA_T value that corresponds to each sequence char
+ * value and trailing modification symbols or masses.  Returns the new
+ * sequence via the mod_sequence argument.
+ *
+ * \returns The length of the mod_sequence array.
+ */
+int convert_to_mod_aa_seq(const std::string& sequence, MODIFIED_AA_T** mod_sequence,
+                          MASS_FORMAT_T mass_format = MOD_MASS_ONLY);
+
+/**
+ * \brief Allocate a new MODIFIED_AA_T array and copy values into it.
+ */
+MODIFIED_AA_T* copy_mod_aa_seq(
+  const MODIFIED_AA_T* source, 
+  int length);
+
+/**
+ * \brief Allocate a new MODIFIED_AA_T array and copy values into it.
+ */
+MODIFIED_AA_T* copy_mod_aa_seq(
+  const MODIFIED_AA_T* source ///< Sequence to copy
+  );
+
+/**
+ * \return a new modification sequence array. Can be off of already allocated
+ * arrays
+ */
+MODIFIED_AA_T* newModSeq();
+
+/**
+ * Releases the modification sequence back into the cache
+ */
+void freeModSeq(
+  MODIFIED_AA_T* &mod_seq ///< Sequence to release
+  );
+
+
+/**
+ * \brief Remove any characters not A-Z from a peptide sequence.
+ * \returns A newly allocated string with the given sequence less any
+ * modififcation symbols or masses.
+ */
+char* unmodify_sequence(const char* modified_seqeunce);
+
+/**
+ * \brief Remove any characters not A-Z from a peptide sequence.
+ */
+void unmodify_sequence_in_place(char* modified_seqeunce);
+
+/**
+ * \brief Determine if an array of MODIFIED_AA_T is a palindrome.  
+ * Used by reverse_sequence to avoid returning a reversed sequence
+ * that is the same as the target.  Ignores the first and last
+ * residues. 
+ * \returns TRUE if the reversed sequence would be the same as the
+ * forward, otherwise FALSE.
+ */
+bool modified_aa_seq_is_palindrome(MODIFIED_AA_T* seq, int length);
+
+/**
+ * \brief Frees memory for an array of MODIFIED_AA_Ts.  Assumes is
+ * terminated with the MOD_SEQ_NULL value
+ */
+void free_mod_aa_seq(MODIFIED_AA_T* seq);
+
+/**
+ * \brief checks to see if an amino acid is modified by a given mod
+ * \returns TRUE if aa is modified by mod
+ */
+bool is_aa_modified(MODIFIED_AA_T aa, AA_MOD_T* mod);
+
+/**
+ * \brief Determine if this modified amino acid can be modified by
+ * this modification.
+ *
+ * Checks the mod list of modifiable residues to see if aa is in the
+ * list.  Also checks to see if aa has already been modified by this
+ * mod.  
+ * \returns TRUE if it can be modified, else FALSE
+ */
+bool is_aa_modifiable(MODIFIED_AA_T aa, AA_MOD_T* mod);
+
+/**
+ * \brief Adds a modification to a MODIFIED_AA_T.
+ *
+ * Assumes that the aa is modifiable, no explicit check.  If the aa is
+ * already modified for the mod, no change to aa.
+ */
+void modify_aa(MODIFIED_AA_T* aa, const AA_MOD_T* mod);
+
+/**
+ * \brief Return the AA_MOD_T associated with the given symbol.  If
+ * the symbol does not represent a modification, returns null.
+ * Requires that parameters have been initialized.
+ */
+const AA_MOD_T* get_aa_mod_from_symbol(const char symbol);
+
+/**
+ * \brief Return the delta mass associated with the given modification
+ * symbol.  If the symbol does not represent a modification, returns
+ * 0. Requires that parameters have been initialized.
+ */
+FLOAT_T get_mod_mass_from_symbol(const char symbol);
+
+/**
+ * \brief Return the AA_MOD_T associated with the given mass shift.
+ * The mass may either be from a single AA_MOD_T as given by the user
+ * or from any combination of AA_MOD_T's.  If no AA_MOD_T(s) can be
+ * found for the mass, returns null.
+ * Requires that parameters have been initialized.
+ */
+const AA_MOD_T* get_aa_mod_from_mass(FLOAT_T mass);
+
+/**
+ * print all fields in mod.  For debugging
+ */
+void print_a_mod(AA_MOD_T* mod);
+
+/* Setters and Getters */
+
+/**
+ * \brief Set the symbol used by this modification.
+ * \returns void
+ */
+void aa_mod_set_symbol(AA_MOD_T* mod, char symbol);
+
+/**
+ * \brief Set the mass change caused by this modification.
+ * \returns void
+ */
+void aa_mod_set_mass_change(AA_MOD_T* mod, double mass_change);
+/**
+ * \brief Get the mass change caused by this modification.
+ * \returns The mass change caused by this modification.
+ */
+double aa_mod_get_mass_change(const AA_MOD_T* mod);
+
+/**
+ * \brief Access to the aa_list of the AA_MOD_T struct.  This pointer
+ * can be used to get or set the list of residues on which this mod
+ * can be placed.
+ * \returns A pointer to the list of amino acids on which this mod can
+ * be placed.
+ */
+bool* aa_mod_get_aa_list(AA_MOD_T* mod);
+
+/**
+ * \brief Set the maximum number of times this modification can be
+ * placed on one peptide.
+ * \returns void
+ */
+void aa_mod_set_max_per_peptide(AA_MOD_T* mod, int max);
+/**
+ * \brief Get the maximum number of times this modification can be
+ * placed on one peptide.  
+ * \returns The max times per peptide this mod can be placed.
+ */
+int aa_mod_get_max_per_peptide(AA_MOD_T* mod);
+
+/**
+ * \brief Set the maximum distance from the protein terminus that the
+ * modification can be placed.  Which terminus (C or N) is determined
+ * by the position type.  To indicate no position restriction, set to
+ * MAX_PROTEIN_SEQ_LENGTH. 
+ * \returns void
+ */
+void aa_mod_set_max_distance(AA_MOD_T* mod, int distance);
+/**
+ * \brief Get the maximum distance from the protein end that the
+ * modification can be placed.  Will be MAX_PROTEIN_SEQ_LENGTH if
+ * position type is ANY_POSITION.
+ * \returns Maximum distance from protein terminus at which mod can be
+ * placed. 
+ */
+int aa_mod_get_max_distance(AA_MOD_T* mod);
+
+/**
+ * \brief Set the position type of an aa_mod.
+ * \returns void
+ */
+void aa_mod_set_position(AA_MOD_T* mod, MOD_POSITION_T position);
+
+/**
+ * \brief Where in the peptide can the modification be placed.
+ * \returns ANY_POSITION for standard mods; C_TERM or N_TERM for those
+ * that can only be placed at the ends of the peptide.
+ */
+MOD_POSITION_T aa_mod_get_position(AA_MOD_T* mod);
+
+/**
+ * \brief Sets whether the modification can prevent cleavage.
+ * \returns void
+ */
+void aa_mod_set_prevents_cleavage(AA_MOD_T* mod, bool prevents_cleavage);
+
+/**
+ * \brief gets whether the modification can prevent cleavage
+ * \returns TRUE or FALSE
+ */
+bool aa_mod_get_prevents_cleavage(AA_MOD_T* mod);
+
+/**
+ * \brief Sets whether the modifications can prevent cross-linking.
+ * \returns void
+ */
+void aa_mod_set_prevents_xlink(AA_MOD_T* mod, bool prevents_xlink);
+
+/**
+ * \brief gets whether the modification can prevent cross-linking.
+ * \returns TRUE or FALSE
+ */
+bool aa_mod_get_prevents_xlink(AA_MOD_T* mod);
+
+/**
+ * \brief The character used to uniquely identify the mod in the sqt file.
+ * \returns The character identifier.
+ */
+char aa_mod_get_symbol(const AA_MOD_T* mod);
+
+/**
+ * \brief Generates a string representation of an aa_mod and returns a
+ * pointer to that newly allocated string.
+ */
+char* aa_mod_to_string(const AA_MOD_T* mod);
+
+/**
+ * \brief Create a string containing all of the amino acids that can
+ * be modified by this aa_mod.  E.g. if S, T, and Y can be modified,
+ * returns "STY".
+ * \returns A newly allocated string.
+ */
+std::string aa_mod_get_aa_list_string(AA_MOD_T* mod);
+
+/**
+ * Count the number of modified aas in the string.
+ */
+int count_modified_aas(MODIFIED_AA_T* seq);
+
+#endif //MODIFICATION_FILE_H
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
+
diff --git a/src/util/peptide_modifications.cpp b/src/util/peptide_modifications.cpp
new file mode 100644
index 0000000..14933f6
--- /dev/null
+++ b/src/util/peptide_modifications.cpp
@@ -0,0 +1,814 @@
+/**
+ * \file modifications.cpp
+ * \brief Datatypes and methods for peptide modifications
+ *
+ * Two data structures define modifications.  The AA_MOD_T is the most
+ * basic type.  It is the information provided by the user: mass
+ * change caused by this mod, amino acids which may be modified in
+ * this way, and the maximum number of this type of modification which
+ * may occur on one peptide.  AA_MODs are defined in modifications.h.
+ * A collection of AA_MODs that may occur
+ * on some peptide are represented as a PEPTIDE_MOD_T.  This stores
+ * a list of AA_MODS and the net mass change experienced by the
+ * peptide.  PEPTIDE_MODs are defined here.
+ * AA_MODs are instantiated once after parsing the parameter file.  All
+ * possible PEPTIDE_MODs are calcualted once and reused for each
+ * spectrum search.  One PEPTIDE_MOD corresponds to one mass window
+ * that must be searched.
+ * 
+ * $Revision: 1.6 $
+ */
+
+#include "peptide_modifications.h"
+#include "model/Peptide.h"
+#include "Params.h"
+
+using namespace Crux;
+
+/* Private data types, typedefed in objects.h */
+/**
+ * \struct _peptide_mod
+ *  A collection of aa modifications that can occur on a single
+ *  peptide.  Includes the list of aa_mods and the net mass
+ *  change of all mods.  Each aa_mod is included in the list as many
+ *  times at it appears in the collection. There is no information about
+ *  which residues in a peptide are modified.
+ */
+struct _peptide_mod{
+  double mass_change;     ///< the net mass change for the peptide
+  int num_mods;           ///< the number of items in the list_of_mods
+  int aa_mod_counts[MAX_AA_MODS]; ///< the number of each kind of aa mod
+                                  ///as listed in parameter.c
+};
+
+/* Private functions */
+int apply_mod_to_list(
+  LINKED_LIST_T* mod_seqs, ///< a pointer to a list of seqs
+  AA_MOD_T* mod_to_apply,  ///< the specific mod to apply
+  int num_copies,
+  int max_aas_modified
+);
+
+int apply_mod_to_seq(
+  MODIFIED_AA_T* seq, ///< the seq to modify
+  AA_MOD_T* mod,      ///< the mod to apply
+  int skip_n,         ///< skip over n aas modified by this mod
+  LINKED_LIST_T* return_list); ///< the newly modified versions of
+
+
+/* Definitions of public methods */
+
+/**
+ * \brief Allocate a PEPTIDE_MOD and set all fields to default values
+ * (i.e. no modifications).
+ * \returns A heap allocated PEPTIDE_MOD with default values.
+ */
+PEPTIDE_MOD_T* new_peptide_mod() {
+  PEPTIDE_MOD_T* new_mod = (PEPTIDE_MOD_T*)mymalloc(sizeof(PEPTIDE_MOD_T));
+  new_mod->mass_change = 0;
+  new_mod->num_mods = 0;
+  int i = 0;
+  for (i = 0; i < MAX_AA_MODS; i++) {
+    new_mod->aa_mod_counts[i] = 0;
+  }
+  // add any fixed terminal mods by setting their count to 1
+  int index = get_fixed_mod_index(N_TERM); 
+  AA_MOD_T** list = NULL;
+  get_all_aa_mod_list(&list);
+  if( index > -1 ) {
+    new_mod->aa_mod_counts[index] = 1;
+    new_mod->num_mods++;
+    new_mod->mass_change += aa_mod_get_mass_change(list[index]);
+  }
+  index = get_fixed_mod_index(C_TERM); 
+  if( index > -1 ) {
+    new_mod->aa_mod_counts[index] = 1;
+    new_mod->num_mods++;
+    new_mod->mass_change += aa_mod_get_mass_change(list[index]);
+  }
+
+  return new_mod;
+}
+
+/**
+ * \brief Allocate a new peptide mod and copy contents of given mod
+ * into it.
+ * \returns A pointer to a new peptide mod which is a copy of the
+ * given one.
+ */
+PEPTIDE_MOD_T* copy_peptide_mod(PEPTIDE_MOD_T* original) {
+  PEPTIDE_MOD_T* copy = new_peptide_mod();
+  copy->mass_change = original->mass_change;
+  copy->num_mods = original->num_mods;
+  int i = 0;
+  for (i = 0; i < MAX_AA_MODS; i++) {
+    copy->aa_mod_counts[i] = original->aa_mod_counts[i];
+  }
+
+  return copy;
+}
+
+/**
+ * \brief Free the memory for a PEPTIDE_MOD including the aa_list.
+ */
+void free_peptide_mod(PEPTIDE_MOD_T* mod) {
+  if(mod) {
+    free(mod);
+  }
+}
+
+/* see below */
+int generate_peptide_mod_list_TESTER(
+  PEPTIDE_MOD_T*** peptide_mod_list,
+  AA_MOD_T** aa_mod_list,
+  int num_aa_mods);
+
+/**
+ * \brief Generate a list of all PEPTIDE_MODs that can be considered
+ * given the list of AA_MODs and POSITION_MODs provided by the user
+ * via the parameter file.
+ *
+ * This only needs to be called once for a search.  The list of
+ * PEPTIDE_MODs can be reused for each spectrum.  Allows at most one
+ * n-term and one c-term mod and at most mod->max_per_peptide
+ * modifications of one type per peptide.  Sorts the list by number of
+ * aa mods and returns only the number of peptide mods that have
+ * between 0 and max-mods aa mods.
+ *
+ * The actual work is done in generate_peptide_mod_list_TESTER() so
+ * that it can be tested without going through parameter.c.
+ *
+ * \returns The number of peptide_mods listed in the
+ * peptide_mod_list argument.
+ */
+int generate_peptide_mod_list(
+  PEPTIDE_MOD_T*** peptide_mod_list ///< return here the list of peptide_mods
+) {
+  AA_MOD_T** aa_mod_list = NULL;
+  int num_aa_mods = get_all_aa_mod_list(&aa_mod_list);
+
+  // continued below
+  int count = generate_peptide_mod_list_TESTER( peptide_mod_list, 
+                                                aa_mod_list, num_aa_mods);
+  return count; 
+}
+
+int generate_peptide_mod_list_TESTER(
+  PEPTIDE_MOD_T*** peptide_mod_list,
+  AA_MOD_T** aa_mod_list,
+  int num_aa_mods) {
+
+  // initialize list of peptide mods with one unmodified peptide
+  LINKED_LIST_T* final_list = new_list( new_peptide_mod() );
+  int final_counter = 1;
+
+  // for each non-fixed aa_mod
+  int num_fixed_mods = get_num_fixed_mods();
+  for(int mod_list_idx = num_fixed_mods; mod_list_idx < num_aa_mods; 
+      mod_list_idx++) {
+
+    AA_MOD_T* cur_aa_mod = aa_mod_list[mod_list_idx];
+    int cur_mod_max = aa_mod_get_max_per_peptide(cur_aa_mod);
+    char cur_mod_id = aa_mod_get_symbol(cur_aa_mod);
+    carp(CARP_DETAILED_DEBUG, "cur max %d, id %c", cur_mod_max, cur_mod_id);
+
+    // initialize temp list 
+    LINKED_LIST_T* temp_list = new_empty_list();
+    int temp_counter = 0;
+
+    int copies = 1;
+    for(copies = 1; copies < cur_mod_max + 1; copies++) {
+
+      // for each pep_mod in final list
+      LIST_POINTER_T* final_ptr = get_first_linked_list(final_list);
+      while( final_ptr != NULL ) {
+        // get the current peptide mod
+        PEPTIDE_MOD_T* cur_pep_mod = 
+          (PEPTIDE_MOD_T*)get_data_linked_list(final_ptr);
+        carp(CARP_DETAILED_DEBUG, "cur pep_mod has %d mods", 
+             peptide_mod_get_num_aa_mods(cur_pep_mod)); 
+
+        // copy the peptide_mod and add to it i copies of cur_mod
+        PEPTIDE_MOD_T* mod_copy = copy_peptide_mod(cur_pep_mod);
+        //peptide_mod_add_aa_mod(mod_cpy, cur_aa_mod, copies);
+        peptide_mod_add_aa_mod(mod_copy, mod_list_idx, copies);
+        carp(CARP_DETAILED_DEBUG, "adding %d %c's to temp", 
+             copies, cur_mod_id);
+
+        // add to temp list
+        //temp_list_end = add_linked_list(temp_list_end, mod_cpy);
+        push_back_linked_list(temp_list, mod_copy);
+
+        // if this is the first added, set the head of temp list
+        //temp_list = (temp_list == NULL) ? temp_list_end : temp_list;
+        temp_counter++;
+        final_ptr = get_next_linked_list(final_ptr);
+      }// last in final list
+
+    }// max copies
+
+    // append temp list to final list
+    carp(CARP_DETAILED_DEBUG, "adding temp list (%d) to final (%d)",
+         temp_counter, final_counter);
+    combine_lists(final_list, temp_list);
+     free(temp_list);
+    final_counter += temp_counter;
+  }// last aa_mod
+
+  // allocate an array of PEPTIDE_MOD_T* to return
+  PEPTIDE_MOD_T** final_array = (PEPTIDE_MOD_T**)mycalloc(final_counter, 
+                                                   sizeof(PEPTIDE_MOD_T*));
+  // fill in the array and delete the list
+  LIST_POINTER_T* final_list_ptr = get_first_linked_list(final_list);
+  int pep_idx = 0;
+  while(final_list_ptr != NULL) {
+    assert(pep_idx < final_counter);
+
+    final_array[pep_idx] =(PEPTIDE_MOD_T*)get_data_linked_list(final_list_ptr);
+    final_list_ptr = get_next_linked_list(final_list_ptr);
+    pep_idx++;
+  }
+
+  delete_linked_list(final_list);
+
+  // sort list
+  qsort(final_array, final_counter, sizeof(PEPTIDE_MOD_T*),
+        (QSORT_COMPARE_METHOD)compare_peptide_mod_num_aa_mods);
+
+  // find the index of the first peptide mod with too many aa mods
+  int max = 1; //Params::GetInt("max-mods");
+  // should use binary search...
+  int mod_idx = 0;
+  for(mod_idx = 0; mod_idx < final_counter; mod_idx++) {
+    if(final_array[mod_idx]->num_mods > max) {
+      break;
+    }
+  }
+
+  carp(CARP_INFO, 
+       "Created %d peptide mods, keeping %d with %d or fewer aa mods", 
+       final_counter, mod_idx, max);
+  // set return value
+  *peptide_mod_list = final_array;
+  //  return final_counter;
+  return mod_idx;
+
+  /*
+    get the number of items in final list
+
+    init final_list to have one unmodified pep
+    init temp_list to empty
+
+    for each mod in aa_mod_list
+      for i 1 to mod_max
+        for each pep_mod in final_list
+          copy the pep_mod and add i aa_mods
+          add to the temp_list
+        end of final_list
+      end i==max
+      add the temp_list to the final_list
+    last mod
+
+    sort by num-mods, fewest to most
+   */
+}
+
+/**
+ * \brief Given the sequence, a modification, and the position for the sequence
+ * modification, determine whether this modification is valid.
+ * \returns true if the modification can be applied.
+ */
+bool is_sequence_position_modifiable(
+  char* sequence, 
+  int position, 
+  AA_MOD_T* mod) {
+
+  if(is_aa_modifiable(char_aa_to_modified(sequence[position]), mod)) {
+
+    if (aa_mod_get_prevents_cleavage(mod)) {
+      //make sure that position is not the beginning or end.
+      if (position == 0 || sequence[position+1] == '\0') {
+        return false;
+      } else {
+        return true;
+      }
+    } else {
+      //modification doesn't prevent cleavage, return true.
+      return true;
+    }
+  } else {
+    //aa is not modifiable by this modificationa
+    return false;
+  }
+}
+
+/**
+ * \brief Given the sequence, a modification, and the position for the sequence
+ * modification, determine whether this modification is valid.
+ * \returns true if the modification can be applied.
+ */
+bool is_sequence_position_modifiable(
+  MODIFIED_AA_T* sequence,
+  int position,
+  AA_MOD_T* mod) {
+  
+  if( is_aa_modifiable( sequence[position], mod )) {
+
+    if (aa_mod_get_prevents_cleavage(mod)) {
+      //make sure that position is not the beginning or end.
+      if (position == 0 || sequence[position+1] == MOD_SEQ_NULL) {
+        return false;
+      } else {
+        return true;
+      }
+    } else {
+      //modification doesn't prevent cleavage, return true.
+      return true;
+    }
+  } else {
+    return false;
+  }
+}
+
+/**
+ * \brief Check a peptide sequence to see if the aa_mods in
+ * peptide_mod can be applied. 
+ *
+ * Assumes that an amino acid can be modified by more than one aa_mod,
+ * but not more than once by a sligle aa_mod.
+ * \returns true if the sequence can be modified, else false
+ */
+bool is_peptide_modifiable(
+  Peptide* peptide,          ///< The peptide to apply mods to
+  PEPTIDE_MOD_T* peptide_mod) { ///< The mods to apply
+
+  // a NULL peptide cannot be modified
+  if( peptide == NULL ) {
+    return false;
+  }
+  // peptide mods with no aa mods can be applied to any peptide
+  if( peptide_mod == NULL || 
+      peptide_mod_get_num_aa_mods( peptide_mod ) == 0 ) {
+    return true;
+  }
+
+  char* sequence = peptide->getSequence();
+
+  // for each aa_mod (skip those not in peptide_mod)
+  
+  AA_MOD_T** all_mods = NULL;
+  int num_aa_mods = get_all_aa_mod_list(&all_mods);
+  assert( num_aa_mods < MAX_AA_MODS );
+
+  bool success = true;
+  for(int amod_idx = 0; amod_idx < num_aa_mods; amod_idx++) {
+
+    // FIRST: check to see if it is included in this pmod
+    if( peptide_mod->aa_mod_counts[amod_idx] == 0 ) {
+      continue;
+    }
+
+    // SECOND: check modifyability based on type
+    AA_MOD_T* cur_aa_mod = all_mods[amod_idx];
+    // for position-based mods, check distance from protein end
+    int max_distance = aa_mod_get_max_distance(cur_aa_mod);
+    int locations_count = 0;
+    int cur_seq_idx = 0;  
+    switch( aa_mod_get_position(cur_aa_mod) ) {
+    case C_TERM: 
+      if( max_distance < peptide->getCDistance()) { 
+        success = false;
+      }
+      break;
+
+    case N_TERM:
+      if( max_distance < peptide->getNDistance()) { 
+        success = false;
+      }
+      break;
+
+      // count leagal locations for this aa mod, compare with counts
+    case ANY_POSITION:
+      // look for an aa in the seq where this mod can be placed
+      while(sequence[cur_seq_idx] != '\0' ) {
+        if (is_sequence_position_modifiable(sequence, cur_seq_idx, cur_aa_mod)) {
+            locations_count++;
+        }// else keep looking
+        cur_seq_idx++;
+      }// end of sequence
+      
+      if( locations_count < peptide_mod->aa_mod_counts[amod_idx] ) {
+        //return false; 
+        success = false;
+      }
+      break;
+
+    }// end of switch
+
+    if( success == false ) {
+      break; // done look at any more aa_mods
+    }
+  }// next in aa_mod list
+
+  free(sequence);
+  return success;
+}
+
+// move this to peptide.c
+/*
+void add_peptide_mod_seq(Peptide* peptide, MODIFIED_AA_T* cur_mod_seq) {
+  if( peptide == NULL || cur_mod_seq == NULL ) {
+    carp(CARP_ERROR, "Cannot add NULL modified sequence to null peptide");
+  }
+
+  // test out that the mod seq is valid
+  int i = 0;
+  while( cur_mod_seq[i] != MOD_SEQ_NULL) {
+    printf("%d(%c) ", cur_mod_seq[i], (char)cur_mod_seq[i] + 'A');
+    i++;
+  }
+  printf("\n");
+}
+  */
+
+
+/**
+ * \brief Take a peptide and a peptide_mod and return via the third
+ * arguement a list of modified peptides.
+ *
+ * The peptide_mod should be guaranteed to be applicable to
+ * the peptide at least once.  However, there may not be any modified
+ * forms that pass the max_aas_modified filter. For the peptide_mod to
+ * be successfully 
+ * applied, every aa_mod in its list must be applied to the sequence
+ * as many times as its value in the aa_mods_counts array.  A single
+ * amino acid can be modified multiple times by different aa_mods, but
+ * only once for a given aa_mod (as defined by modifiable()).  The
+ * modified peptides will be added to the end of the modified_peptides
+ * list.  Any existing elements in the list will not be removed.
+ * 
+ * \returns The number of modified peptides in the list pointed to by
+ * modified_peptides. 
+ */
+int modify_peptide(
+  Peptide* peptide,             ///< the peptide to modify
+  PEPTIDE_MOD_T* peptide_mod,     ///< the set of aa_mods to apply
+  LINKED_LIST_T* modified_peptides,///< the returned modified peptides
+  int max_aas_modified            ///< filter out peptides > m_a_m
+) { 
+
+  if( peptide == NULL ) {
+    carp(CARP_ERROR, "Cannot modify NULL peptide or use NULL peptide mod");
+    return 0;
+  }
+  if( modified_peptides == NULL ) {
+    carp(CARP_ERROR, "Cannot return modified peptides to NULL list.");
+    return 0;
+  }
+  // in case of no modifications
+  if( peptide_mod == NULL || 
+      peptide_mod_get_num_aa_mods(peptide_mod) == 0 ) {
+    carp(CARP_DETAILED_DEBUG, 
+         "Modifying peptide with no aa_mods, return peptide copy");
+    Peptide* peptide_copy = new Peptide(peptide); 
+    push_back_linked_list(modified_peptides, peptide_copy);
+    return 1;
+  }
+
+  // get the peptide sequence and convert to MODIFIED_AA_T*
+  char* sequence = peptide->getSequence();
+  MODIFIED_AA_T* pre_modified_seq = NULL;
+  convert_to_mod_aa_seq(sequence, &pre_modified_seq);
+
+  carp(CARP_DETAILED_DEBUG, "Modifying peptide %s", sequence);
+
+  // get the aa_mod info
+  int* aa_mod_counts = peptide_mod->aa_mod_counts;
+  AA_MOD_T** aa_mod_list = NULL;
+  int num_aa_mods = get_all_aa_mod_list(&aa_mod_list);
+
+  // initialize a list of modified seqs with the unmod seq
+  LINKED_LIST_T* modified_seqs = new_list(pre_modified_seq);
+  int aa_mod_idx = 0;
+  int total_count = 0;
+
+  // try applying each aa_mod to the sequence
+  for(aa_mod_idx = 0; aa_mod_idx < num_aa_mods; aa_mod_idx++) {
+
+    //printf("aaidx is %d and mod count is %d\n", aa_mod_idx, aa_mod_counts[aa_mod_idx]);
+    int mod_count = aa_mod_counts[aa_mod_idx];
+    if( mod_count == 0 ) { continue; } // do not apply this aa mod
+
+    //fprintf(stderr, "applying to list, total count is %d\n", total_count);
+    total_count = apply_mod_to_list(modified_seqs, 
+                                    aa_mod_list[aa_mod_idx],
+                                    mod_count,
+                                    max_aas_modified);
+
+    //printf("after applying count is %d\n", total_count);
+    // the count should be > 0, but check for error case
+    if( total_count == 0 || is_empty_linked_list(modified_seqs) ) {
+      carp(CARP_DETAILED_DEBUG,
+           "Peptide modification could not be applied to sequence %s",
+           sequence);
+      return total_count;  // free things...
+    }
+  } // next aa_mod
+
+  carp(CARP_DETAILED_DEBUG, "Sequence %s has %i modified forms.", sequence, total_count);
+  free(sequence);
+
+  // create a peptide for each sequence and add it to the list   
+  // filter out those with more than max_aas_modified
+  total_count = 0;
+  while (!is_empty_linked_list(modified_seqs)) {
+    MODIFIED_AA_T* cur_mod_seq = 
+      (MODIFIED_AA_T*)pop_front_linked_list(modified_seqs);
+    if (count_modified_aas(cur_mod_seq) > max_aas_modified) {
+      continue;
+    }
+
+    Peptide* cur_peptide = new Peptide(peptide);
+    cur_peptide->setMod(cur_mod_seq, peptide_mod);
+    freeModSeq(cur_mod_seq);
+    push_back_linked_list(modified_peptides, cur_peptide );
+    total_count++;
+  }
+  carp(CARP_DETAILED_DEBUG, "There were %i modified seqs created", total_count);
+  free(modified_seqs);
+  return total_count;
+}
+
+
+/**
+ * \brief Beginning with a list of modified seqs, apply another
+ * modification to each in as many ways as possible.  Update the list
+ * to contain the new seqs.
+ * 
+ * To be used for adding multiple modifications to a peptide
+ * sequence.  Adding the first aa mod creates one list of seqs.  The
+ * second aa mod is then applied to the list.  Any seqs that can have
+ * both modifications applied is returned and those that cannot are
+ * removed from the list.
+ *
+ * \returns The number of modified seqs in the list.
+ */
+int apply_mod_to_list(
+  LINKED_LIST_T* apply_mod_to_these, ///< a pointer to a list of seqs
+  AA_MOD_T* mod_to_apply,  ///< the specific mod to apply
+  int num_to_apply,         ///< how many of this mod to apply
+  int max_aas_modified ///< don't return seqs with more than this many aas moded
+) {
+
+  /* Null cases */
+  if( is_empty_linked_list(apply_mod_to_these) ) { // nothing to apply mod to
+    return 0;
+  }
+
+  if( mod_to_apply == NULL ) {  // no modification to add, return as is
+  // get the current count
+    LIST_POINTER_T* cur_seq = get_first_linked_list(apply_mod_to_these);
+    int num_seqs = 0;
+    while( cur_seq != NULL ) {
+      num_seqs++;
+    }
+    return num_seqs;
+  }
+
+  //printf("iterating over seqs in list, applying %d of mod %c\n", 
+  //       num_to_apply, aa_mod_get_symbol(mod_to_apply));
+
+  // initialize a temp list of seqs to return
+  LINKED_LIST_T* completed_seqs = new_empty_list();
+
+  int return_seq_count = 0;
+  int times_idx = 0;
+
+  // apply the mod num_to_apply times
+  for(times_idx = 0; times_idx < num_to_apply; times_idx++) {
+    // reset count
+    return_seq_count = 0;
+
+    // for each seq
+    while (!is_empty_linked_list(apply_mod_to_these)) {
+      // get modified seq
+      MODIFIED_AA_T* cur_seq = 
+        (MODIFIED_AA_T*)pop_front_linked_list(apply_mod_to_these);
+      
+      /*
+      char* print_me = modified_aa_string_to_string(cur_seq);
+      printf("Original: %s\n", print_me);
+      free(print_me);
+      */
+      return_seq_count += apply_mod_to_seq(cur_seq,
+                                           mod_to_apply,
+                                           times_idx, // skip n modified aas
+                                           completed_seqs);
+
+      //printf("Now there are %d seqs to return\n", return_seq_count);
+      freeModSeq(cur_seq);
+    }// apply to next seq until list is empty
+
+    // make the collected results the input to the next application
+    combine_lists(apply_mod_to_these, completed_seqs); 
+    free(completed_seqs); // just deletes head, not full list
+    completed_seqs = new_empty_list();
+
+  }// apply next time
+
+  free( completed_seqs ); // just the head of the list
+
+  // Check all seqs in list and remove those with too many aas modified
+  // push a dummy onto the front for ease of deleting
+  // in a list nodeA->nodeB, we need nodeA to delete nodeB
+  // call A and B prev and cur
+  push_front_linked_list(apply_mod_to_these, NULL);
+  LIST_POINTER_T* prev_node = get_first_linked_list(apply_mod_to_these);
+  LIST_POINTER_T* cur_node = NULL;
+  MODIFIED_AA_T* cur_seq = NULL;
+
+  while (has_next_linked_list(prev_node)) {
+    cur_node = get_next_linked_list(prev_node);
+    cur_seq = (MODIFIED_AA_T*)get_data_linked_list(cur_node);
+
+    if (count_modified_aas(cur_seq) > max_aas_modified) {
+      // delete cur, set cur to node after prev
+      cur_node = delete_next_list_node(prev_node);
+      freeModSeq(cur_seq);  // list delete doesn't remove data
+    } else
+      prev_node = cur_node;
+      cur_node = get_next_linked_list(prev_node);
+      cur_seq = (MODIFIED_AA_T*)get_data_linked_list(cur_node);
+  }// next seq
+  // pop the dummy off the front
+  pop_front_linked_list(apply_mod_to_these);
+
+  return return_seq_count;
+}
+
+/**
+ * \brief Beginning with a peptide sequence (of modified aas) and an
+ * aa_mod, return via the 'return_list' parameter a list of modified
+ * versions of the peptide sequence.
+ *
+ * The initial seq is left untouched.  If the seq cannot be modified
+ * by the aa_mod, return_list is unchanged and 0 is returned.  If the
+ * mod is NULL the return list is given one item, an unchanged copy of
+ * the seq.
+ *
+ * \returns The number of ways in which the sequence could be
+ * modified, i.e. the number of items added to return_list.
+ */
+// TODO (BF 17-Sep-08): could add seq length to make consistent with
+// other functions with MODIFIED_AA_T array parameters
+int apply_mod_to_seq(
+  MODIFIED_AA_T* seq,          ///< the seq to modify
+  AA_MOD_T* mod,               ///< the mod to apply
+  int skip_n,                  ///< pass over n aas modified by this mod
+  LINKED_LIST_T* return_list) { ///< the newly modified versions of the seq
+
+  // Boundry cases
+  if( seq == NULL ) {
+    return 0;
+  }
+  if( return_list == NULL ) {
+    carp(CARP_ERROR, "Cannot add modified sequences to a NULL list.");
+    return 0;
+  }
+
+  // find seq length (see TODO above)
+  int seq_len = 0;
+  while( seq[seq_len] != MOD_SEQ_NULL ) {
+    seq_len++;
+  }
+
+  // no modification to add, return seq as is
+  if( mod == NULL ) {
+    push_back_linked_list( return_list, copy_mod_aa_seq(seq, seq_len) );
+    return 1;
+  }
+
+  // special case: positional mods
+  if( N_TERM == aa_mod_get_position(mod) ) {
+    //MODIFIED_AA_T* seq_copy = copy_mod_aa_seq(seq);
+    MODIFIED_AA_T* seq_copy = copy_mod_aa_seq(seq, seq_len);
+    modify_aa( &seq_copy[0], mod );
+    push_back_linked_list(return_list, seq_copy);
+    return 1;  // one added to list
+  }
+  if( C_TERM == aa_mod_get_position(mod)) {
+    //MODIFIED_AA_T* seq_copy = copy_mod_aa_seq(seq);
+    MODIFIED_AA_T* seq_copy = copy_mod_aa_seq(seq, seq_len);
+    /*
+    // find last index
+    int seq_idx = 0;
+    while( seq[seq_idx] != MOD_SEQ_NULL ) {
+      seq_idx++;
+    }
+    */
+    //modify_aa( &seq_copy[seq_idx-1], mod );
+    modify_aa( &seq_copy[seq_len-1], mod );
+    push_back_linked_list(return_list, seq_copy);
+    return 1;  // one added to list
+  }
+
+  // first loop, skip over n modified aas in the seq
+  int seq_idx = 0;
+  while( seq[seq_idx] != MOD_SEQ_NULL  && skip_n != 0) {
+    if( is_aa_modified( seq[seq_idx], mod ) ) {
+      skip_n--;
+    }
+    seq_idx++;
+  }// nex mod_aa; stop at end of seq or having skipped n
+
+  // second loop, for each aa: check for modifiability, copy and add
+
+  // check each aa
+  // copy seq when modifiable and add to list
+  int count = 0;
+  while( seq[seq_idx] != MOD_SEQ_NULL ) {
+    if (is_sequence_position_modifiable(seq, seq_idx, mod)) {
+      //      MODIFIED_AA_T* seq_copy = copy_mod_aa_seq(seq);
+      MODIFIED_AA_T* seq_copy = copy_mod_aa_seq(seq, seq_len);
+      modify_aa( &seq_copy[seq_idx], mod );
+
+      push_back_linked_list(return_list, seq_copy);
+      count++;
+    }
+    
+    seq_idx++;
+  }
+
+  return count;  
+}
+
+/**
+ * print all fields in peptide mod. For debugging
+ */
+void print_p_mod(PEPTIDE_MOD_T* mod) {
+  printf("PMOD: mass %.2f, num %d, aa mods\n  ", 
+         mod->mass_change, mod->num_mods);
+  AA_MOD_T** all_mods = NULL;
+  int num_aa_mods = get_all_aa_mod_list( &all_mods );
+  assert( num_aa_mods < MAX_AA_MODS );
+  for(int i = 0; i < num_aa_mods; i++) {
+    print_a_mod( all_mods[i] );
+    printf("  ");
+  }
+  printf("\n");
+}
+
+/* Setters and Getters */
+/**
+ * \brief Add a new aa_mod to the peptide mod.  Updates mass_change,
+ * num_mods and list_of_aa_mods.  Does not enforce the copy number of
+ * an aa_mod to be less than max_per_peptide.
+ * \returns void
+ */
+void peptide_mod_add_aa_mod(
+  PEPTIDE_MOD_T* pep_mod, ///< The peptide mod being added to
+  int aa_mod_idx,      ///< The index into the global list of aa mods
+  int copies ) {           ///< How many of the aa_mod to add
+
+  AA_MOD_T** all_mods = NULL;
+  int num_aa_mods = get_all_aa_mod_list( &all_mods );
+  assert( num_aa_mods < MAX_AA_MODS );
+
+  //printf("mass change for amod of index %d is %.2f\n", aa_mod_idx, aa_mod_get_mass_change(all_mods[aa_mod_idx]));
+  pep_mod->mass_change += aa_mod_get_mass_change(all_mods[aa_mod_idx])
+                            * copies;
+  //printf("pep mod mass change is now %.2f\n", pep_mod->mass_change );
+  pep_mod->num_mods += copies;
+
+  pep_mod->aa_mod_counts[aa_mod_idx] += copies;
+}
+
+/**
+ * \brief Get the value of the net mass change for this peptide_mod.
+ * \returns The mass change for the peptide mod.
+ */
+double peptide_mod_get_mass_change(PEPTIDE_MOD_T* mod) {
+  return mod->mass_change;
+}
+
+/**
+ * \brief Get the number of aa_mods in this peptide_mod.
+ * \returns The number of aa_mods in this peptide_mod.
+ */
+int peptide_mod_get_num_aa_mods(PEPTIDE_MOD_T* mod) {
+  return mod->num_mods;
+}
+
+/**
+ * \brief Compares the number of aa mods in two peptide mods for
+ * sorting.
+ * \returns Negative int, 0, or positive int if the number of aa_mods
+ * in pmod 1 is less than, equal to or greater than the number of
+ * aa_mods in pmod2, respectively.
+ */
+int compare_peptide_mod_num_aa_mods(const void* pmod1, 
+                                    const void* pmod2) {
+  return (*(PEPTIDE_MOD_T**)pmod1)->num_mods 
+            - (*(PEPTIDE_MOD_T**)pmod2)->num_mods;
+}
+
diff --git a/src/util/peptide_modifications.h b/src/util/peptide_modifications.h
new file mode 100644
index 0000000..6068b71
--- /dev/null
+++ b/src/util/peptide_modifications.h
@@ -0,0 +1,160 @@
+/**
+ * \file peptide_modifications.h
+ * \brief Datatypes and methods for peptide modifications
+ *
+ * Two data structures define modifications.  The AA_MOD_T is the most
+ * basic type.  It is the information provided by the user: mass
+ * change caused by this mod, amino acids which may be modified in
+ * this way, and the maximum number of this type of modification which
+ * may occur on one peptide.  AA_MODs are defined in modifications.h.
+ * A collection of AA_MODs that may occur
+ * on some peptide are represented as a PEPTIDE_MOD_T.  This stores
+ * a list of AA_MODS and the net mass change experienced by the
+ * peptide.  PEPTIDE_MODs are defined here.
+ * AA_MODs are instantiated once after parsing the parameter file.  All
+ * possible PEPTIDE_MODs are calcualted once and reused for each
+ * spectrum search.  One PEPTIDE_MOD corresponds to one mass window
+ * that must be searched.
+ * 
+ * $Revision: 1.5 $
+ */
+#ifndef PEPTIDE_MODIFICATIONS_H
+#define PEPTIDE_MODIFICATIONS_H
+
+#include <assert.h>
+#include "utils.h"
+#include "linked_list.h"
+#include "model/objects.h"
+#include "modifications.h"
+
+/**
+ * \brief Allocate a PEPTIDE_MOD and set all fields to default values
+ * (i.e. no modifications).
+ * \returns A heap allocated PEPTIDE_MOD with default values.
+ */
+PEPTIDE_MOD_T* new_peptide_mod();
+
+/**
+ * \brief Allocate a new peptide mod and copy contents of given mod
+ * into it.
+ * \returns A pointer to a new peptide mod which is a copy of the
+ * given one.
+ */
+PEPTIDE_MOD_T* copy_peptide_mod(PEPTIDE_MOD_T* original);
+
+/**
+ * \brief Free the memory for a PEPTIDE_MOD including the aa_list.
+ */
+void free_peptide_mod(PEPTIDE_MOD_T* mod);
+
+/**
+ * \brief Generate a list of all PEPTIDE_MODs that can be considered
+ * given the list of AA_MODs provided by the user and found in parameter.c.
+ *
+ * This only needs to be called once for a search.  The list of
+ * PEPTIDE_MODs can be reused for each spectrum.
+ *
+ * \returns The number of peptide_mods returned in the
+ * peptide_mod_list argument.
+ */
+int generate_peptide_mod_list(
+  PEPTIDE_MOD_T*** peptide_mod_list ///< return here the list of peptide_mods
+);
+
+/**
+ * \brief Check a peptide sequence to see if the aa_mods in
+ * peptide_mod can be applied. 
+ *
+ * Assumes that an amino acid can be modified by more than one aa_mod,
+ * but not more than once by a single aa_mod as defined in modifiable().
+ * \returns TRUE if the sequence can be modified, else FALSE
+ */
+bool is_peptide_modifiable( Crux::Peptide* peptide,
+                            PEPTIDE_MOD_T* peptide_mod);
+
+
+/**
+ * \brief Take a peptide and a peptide_mod and return via parameters a
+ * list of modified peptides.
+ *
+ * The peptide_mod should be guaranteed to be able to be applied to
+ * the peptide at least once.  A single amino acid can be modified
+ * multiple times by different aa_mods, but only once for a given
+ * aa_mod as defined in modifiable().  
+ * 
+ * \returns The number of modified peptides in the array pointed to by
+ * modified_peptides. 
+ */
+int modify_peptide(Crux::Peptide* peptide,
+                   PEPTIDE_MOD_T* peptide_mod,
+                   LINKED_LIST_T* modified_peptides,
+                   int max_aas_modified
+);
+
+/* Setters and Getters */
+/**
+ * \brief Add a new aa_mod to the peptide mod.  Updates mass_change,
+ * num_mods and list_of_aa_mods.  Does not enforce the copy number of
+ * an aa_mod to be less than max_per_peptide.
+ * \returns void
+ */
+void peptide_mod_add_aa_mod(PEPTIDE_MOD_T* pep_mod,
+                            //AA_MOD_T* aa_mod,
+                            int aa_mod_idx,
+                            int copies );
+
+/**
+ * \brief Get the value of the net mass change for this peptide_mod.
+ * \returns The mass change for the peptide mod.
+ */
+double peptide_mod_get_mass_change(PEPTIDE_MOD_T* mod);
+
+/**
+ * \brief Get the number of aa_mods in this peptide_mod.
+ * \returns The number of aa_mods in this peptide_mod.
+ */
+int peptide_mod_get_num_aa_mods(PEPTIDE_MOD_T* mod);
+
+/**
+ * \brief Get a pointer to the list of aa_mods in this peptide_mod.
+ * The number of elements in the list is given by
+ * peptide_mod_get_num_aa_mods. A unique aa_mod may be listed more
+ * than once.  There is no particular order to the aa_mods in the
+ * list.
+ * \returns A pointer to a list of AA_MOD_T pointers.
+ */
+LINKED_LIST_T* peptide_mod_get_aa_mod_list(PEPTIDE_MOD_T* mod);
+
+/**
+ * \brief Compares the number of aa mods in two peptide mods for
+ * sorting.
+ * \returns Negative int, 0, or positive int if the number of aa_mods
+ * in pmod 1 is less than, equal to or greater than the number of
+ * aa_mods in pmod2, respectively.
+ */
+int compare_peptide_mod_num_aa_mods(const void* pmod1, 
+                                    const void* pmod2);
+
+/**
+ * print all fields in peptide mod. For debugging
+ */
+void print_p_mod(PEPTIDE_MOD_T* mod);
+
+
+#endif // PEPTIDE_MODIFICATIONS_H
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/util/utils.cpp b/src/util/utils.cpp
new file mode 100644
index 0000000..2b1c7a5
--- /dev/null
+++ b/src/util/utils.cpp
@@ -0,0 +1,469 @@
+/*********************************************************************
+  * \file utils.cpp
+  * AUTHOR: William Stafford Noble
+  * CREATE DATE: 9-8-97
+  * PROJECT: shared
+  * COPYRIGHT: 1997-2001 Columbia University
+  * DESCRIPTION: Various useful generic utilities.
+  ********************************************************************/
+#include <stdarg.h>
+#include <string.h>
+#ifdef _MSC_VER
+#include <Winsock2.h>
+#else
+#include <sys/time.h>
+#include <unistd.h> 
+#endif
+#include <assert.h>
+#include <errno.h>
+#include "boost/random/mersenne_twister.hpp"
+#include "boost/random/uniform_int_distribution.hpp"
+#include "utils.h"
+#include "io/carp.h"
+#include "WinCrux.h"
+
+#ifdef INCLUDE_GETLINE
+
+/*********************************************************
+ This function replaces the GNU extension of the same name.
+ Reads a line from the given stream.
+ *********************************************************/
+int getline(char **lineptr, size_t *n, FILE *stream) {
+
+  const size_t BUFFSIZE = 100;
+
+  // Check the input values.
+  if (lineptr == NULL || stream == NULL) {
+    errno = EINVAL;
+    return -1;
+  }
+
+  // Read the first character from the stream.
+  size_t index = 0;
+  int c = fgetc(stream);
+  int e = ferror(stream);
+  if (c == EOF || e) {
+    return -1;
+  }
+
+  // Allocate an buffer if needed.
+  if (*lineptr == NULL) {
+    *lineptr = (char *) mymalloc((*n + BUFFSIZE) * sizeof(char));
+    *n += BUFFSIZE;
+  }
+
+  // Copy from the stream to the buffer until we find a line end.
+  while(c != '\n' && c != EOF && !e) {
+    (*lineptr)[index++] = c;
+    if (index > *n - 1) {
+      // Out of space, expand the buffer. 
+      *lineptr = (char *) myrealloc(*lineptr, *n + BUFFSIZE);
+      *n += BUFFSIZE;
+    }
+    c = fgetc(stream);
+    e = ferror(stream);
+  }
+
+  // Reached end of line, end of file, or read error.
+  if (!e) {
+    
+    if (c != EOF) {
+      (*lineptr)[index++] = c;
+      if (index > (*n - 1)) {
+        *lineptr = (char *) myrealloc(*lineptr, *n + 1);
+        (*n)++;
+      }
+    }
+
+    // Terminate the string.
+    (*lineptr)[index] = 0;
+    
+    // Return the length of the string
+    // without the terminating null.
+    return index;
+  } else {
+    // Some sort of read error
+    return -1;
+  }
+}
+
+#endif
+
+/***********************************************************************
+ * Return the value to replace a missing value -- NaN.
+ ***********************************************************************/
+double NaN(void) {
+  return atof("NaN");
+}
+
+/***********************************************************************
+ * Return elapsed time in microseconds since the last call.
+ ***********************************************************************/
+double wall_clock() {
+  static int first_call = 1;
+  static double first_time;
+  double t;
+  struct timeval tp;
+
+  gettimeofday(&tp, NULL);
+  if (first_call == 1) {
+    first_time = (1E6*((double)tp.tv_sec)+
+                 ((double)tp.tv_usec));
+    t = first_time;
+    first_call = 0;
+  } else {
+    t = (1E6*((double)tp.tv_sec)+
+        ((double)tp.tv_usec));
+    t = t - first_time;
+  }
+  return (double) t;
+}
+
+/************************************************************************
+ * See .h file for description.
+ ************************************************************************/
+bool open_file(
+  const char *    filename,      /* Name of the file to be opened. */
+  const char *    file_mode,     /* Mode to be passed to fopen. */
+  bool allow_stdin,         /* If true, filename "-" is stdin. */
+  const char *    file_description,   
+  const char *    content_description,
+  FILE **         afile        /* Pointer to the open file. */
+) {
+  if (filename == NULL) {
+    carp(CARP_ERROR, "No %s filename specified.\n", file_description);
+    return(false);
+  } else if ((allow_stdin) && (strcmp(filename, "-") == 0)) {
+    if (strchr(file_mode, 'r') != NULL) {
+        carp(CARP_INFO, "Reading %s from stdin.\n", content_description);
+      *afile = stdin;
+    } else if (strchr(file_mode, 'w') != NULL) {
+        carp(CARP_INFO, "Writing %s to stdout.\n", content_description);
+      *afile = stdout;
+    } else {
+      carp(CARP_INFO, "Sorry, I can't figure out whether to use stdin ");
+      carp(CARP_INFO, "or stdout for %s.\n", content_description);
+      return(false);
+    }
+  } else if ((*afile = fopen(filename, file_mode)) == NULL) {
+    carp(CARP_INFO, "Error opening file %s.\n", filename);
+    return(false);
+  }
+  return(true);
+}
+
+/********************************************************************
+ * void mymalloc, mycalloc, myrealloc
+ * 
+ * See .h file for descriptions.
+ ********************************************************************/
+void *mymalloc(size_t size) {
+  void * temp_ptr;
+
+  if (size == 0)
+    size++;
+
+  temp_ptr = malloc(size);
+
+  if (temp_ptr == NULL) {
+    carp(CARP_FATAL, "Memory exhausted.  Cannot allocate %d bytes.", (int)size);
+  }
+    
+
+  return(temp_ptr);
+}
+
+void *mycalloc(size_t nelem, size_t size) {
+  void * temp_ptr;
+
+  /* Make sure we allocate something. */
+  if (size == 0) {
+    size = 1;
+  }
+  if (nelem == 0) {
+    nelem = 1;
+  }
+
+  temp_ptr = calloc(nelem, size);
+
+  if (temp_ptr == NULL) {
+    carp(CARP_FATAL, "Memory exhausted.  Cannot allocate %d bytes.", (int)size);
+  }
+
+  return(temp_ptr);
+}
+
+void * myrealloc(void * ptr, size_t  size) {
+  void * temp_ptr;
+
+  /* Make sure we allocate something. */
+  if (size == 0)
+    size = 1;
+  assert(size > 0);
+
+  /* Some non-ANSI systems complain about reallocating NULL pointers. */
+  if (ptr == NULL) {
+    temp_ptr = malloc(size);
+  } else {
+    temp_ptr = realloc(ptr, size);
+  }
+
+  if (temp_ptr == NULL) {
+    carp(CARP_FATAL, "Memory exhausted.  Cannot allocate %d bytes.", (int)size);
+  }
+
+  return(temp_ptr);
+}
+
+/********************************************************************
+ * fwrite with a check to make sure it was successful (useful for NFS problems)
+ ********************************************************************/
+bool myfwrite(
+  const void *ptr, 
+  size_t size, 
+  size_t nitems, 
+  FILE *stream
+) {
+  size_t ret = fwrite(ptr, size, nitems, stream);
+  if (nitems != ret) {
+    carp(CARP_ERROR, "Problem writing %i items", nitems);
+    return false;
+  }
+  return true;
+}
+
+/**********************************************************************
+ * Compute a logarithm.
+ **********************************************************************/
+PROB_T my_log(PROB_T x) {
+  if (x > 0.0) {
+    return(LOG_VALUE(log(x)));
+  } else if (x < 0.0) {
+    carp(CARP_FATAL, "Tried to take the log of a negative value (%g).", x);
+  } /* else if (x == 0.0) */
+  return(LOG_ZERO);
+}
+
+/* The lookup table. */
+static const int LOG_PRECISION = 100000;
+static PROB_T log_table[(int) LOG_PRECISION + 2];
+
+/**********************************************************************
+ * Set up lookup table for log(x), 0 <= x <= 1.
+ **********************************************************************/
+void init_log_prob(void) {
+  int    i_table;
+  PROB_T table_value;
+
+  log_table[0] = LOG_ZERO;
+  for (i_table = 1; i_table <= LOG_PRECISION; i_table++) {
+    table_value = (double)(i_table / LOG_PRECISION);
+    log_table[i_table] = log(table_value);
+  }
+  log_table[i_table] = 0;  /* For use in iterpolation when x=1 */
+}
+
+/**********************************************************************
+ * Efficiently find log(x), when 0 < x <= 1.  Doesn't check bounds.
+ **********************************************************************/
+PROB_T log_prob (PROB_T value) {
+  const PROB_T scaled_value = value * LOG_PRECISION;
+  const int    log_index = (int)scaled_value;
+  const PROB_T decimal_part = scaled_value - log_index;
+  const PROB_T lower_value = log_table[log_index];
+  const PROB_T upper_value = log_table[log_index+1];
+  const PROB_T interpolation = decimal_part * (lower_value - upper_value);
+
+  if (value == 0.0) {
+    return(LOG_ZERO);
+  }
+  return(lower_value + interpolation);
+}
+
+
+/**************************************************************************
+ * See .h file for description.
+ **************************************************************************/
+bool is_zero (double value, bool log_form) {
+  if ((log_form) && (value < LOG_SMALL)) {
+    return(true);
+  } else if ((!log_form) && (value == 0.0)) {
+    return(true);
+  } else {
+    return(false);
+  }
+}
+
+/**************************************************************************
+ * See .h file for description.
+ **************************************************************************/
+bool almost_equal(double value1, double value2, double slop) {
+  if ((value1 - slop > value2) || (value1 + slop < value2)) {
+    return(false);
+  } else {
+    return(true);
+  }
+}
+
+/**************************************************************************
+ * Generic functions for converting between integer and string
+ * representations of an enumerated type.
+ *
+ * Assumes that the longest string representation of the enumerated
+ * type does not exceed 100 characters.
+ *
+ * Assumes that the zeroth enumerated type element is invalid.
+ **************************************************************************/
+const char * convert_enum_type (
+  int     enum_type, /* The enumerated type object to be converted. */
+  const char *  enum_strs[], /* String values associated with this type. */
+  int     num_enums  /* Number of values of the type. */
+) {
+  if ((enum_type <= 0) || (enum_type >= num_enums)) {
+    carp(CARP_FATAL, "Illegal enumerated type value (%d).", enum_type);
+  }
+
+  return(enum_strs[enum_type]);
+}
+    
+int convert_enum_type_str(
+  const char *  enum_type_str, /* String to be converted. */
+  int     default_value, /* Value to return if string not found. */
+  const char ** enum_strs,     /* String values associated with this type. */
+  int     num_enums      /* Number of values of the type. */
+) {
+  int i_enum;
+
+  /* If no string was given, return the default. */
+  if (enum_type_str == NULL) {
+    return(default_value);
+  }
+
+  /* Search for the value corresponding to the given string. */
+  for (i_enum = 0; i_enum < num_enums; i_enum++) {
+    if (strcmp(enum_type_str, enum_strs[i_enum]) == 0) {
+      return(i_enum);
+    }
+  }
+  //  carp(CARP_FATAL, "Illegal value (%s).", enum_type_str);
+  //  exit(1);
+  return( default_value ); 
+}
+
+/*******************************************************************************
+  * \brief Get the name of the CPU.
+  ****************************************************************************/
+static const int MAX_HOST_NAME = 100;
+const char* hostname() {
+  static char the_hostname[MAX_HOST_NAME];
+#ifdef _MSC_VER
+  WSADATA wsaData;
+  WSAStartup(MAKEWORD(2, 2), &wsaData);
+#endif
+  int result = gethostname(the_hostname, MAX_HOST_NAME);
+  if (result != 0) {
+    snprintf(the_hostname, MAX_HOST_NAME, "unknown");
+  }
+
+  return(the_hostname);
+}
+
+/*******************************************************************************
+  * \brief Get the current date and time.
+  ****************************************************************************/
+const char* date_and_time() {
+  FILE *           date_stream;
+  static char      the_date[MAX_HOST_NAME];
+  static bool first_time = true;
+
+  if (first_time) {
+    // FIXME: we should be able to get the date
+    // from a function call rather than having
+    // to call a shell command.
+#ifdef _MSC_VER
+    date_stream = (FILE *)popen("date /T", "r");
+#else
+    date_stream = (FILE *)popen("date", "r");
+#endif
+    if (fgets(the_date, MAX_HOST_NAME, date_stream) == NULL) {
+      return NULL;
+    }
+    pclose(date_stream);
+  }
+
+  /* Remove the EOL. */
+  assert(the_date[strlen(the_date)-1] == '\n');
+  the_date[strlen(the_date)-1] = '\0';
+
+  first_time = false;
+  return(the_date);
+}
+
+/**
+ * parses a file of length max_lines and returns an array of strings
+ */
+char** parse_file(
+  char* file_name,
+  int max_lines,
+  int* num_lines
+) {
+
+  FILE *infile;
+  if (open_file(file_name, "r", 1, "input", "", &infile) == 0)
+    exit(1);
+
+  size_t buf_length = 1024;
+  char** lines = (char**) mycalloc(max_lines, sizeof(char*));
+  int line_idx = 0;
+  int length = 0;
+  while ((length = getline(&lines[line_idx], &buf_length, infile)) != -1) {
+    char* line = lines[line_idx];
+    if (line[length-2] == '\n' || line[length-2] == '\r') {
+      line[length-2] = '\0';
+    } else if (line[length-1] == '\n' || line[length-1] == '\r') {
+      line[length-1]='\0';
+    }
+    line_idx++;
+    if (line_idx >= max_lines) {
+      carp(CARP_FATAL, "Number of lines in %s exceeds maximum of %i!", 
+          file_name, max_lines);
+    }
+  }
+  free(lines[line_idx]);
+  fclose(infile);
+  *num_lines = line_idx;
+
+  return lines;
+}
+
+boost::mt19937& get_mt19937() {
+  static boost::mt19937 mt19937_;
+  return mt19937_;
+}
+
+/**
+ * Returns an integer in the range between 0 and UNIFORM_INT_DISTRIBUTION_MAX
+ */
+int myrandom() {
+  static boost::random::uniform_int_distribution<>
+    uniform_int_distribution_(0, UNIFORM_INT_DISTRIBUTION_MAX);
+  return uniform_int_distribution_(get_mt19937());
+}
+
+/**
+ * Returns an integer in the range [0, max)
+ */
+int myrandom_limit(int max) {
+  return myrandom() % max;
+}
+
+void mysrandom(unsigned seed) {
+  get_mt19937().seed(seed);
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 2
+ * End:
+ */
diff --git a/src/util/utils.h b/src/util/utils.h
new file mode 100644
index 0000000..2e038fe
--- /dev/null
+++ b/src/util/utils.h
@@ -0,0 +1,247 @@
+/**
+ * \file utils.h
+ * \brief Various useful generic utilities.
+ ********************************************************************/
+// AUTHOR: William Stafford Noble
+// CREATE DATE: 9-8-97
+
+#ifndef UTILS_H
+#define UTILS_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <limits>
+
+/*#ifndef linux
+#include <ieeefp.h>
+#endif*/
+
+// Macro allowing us to build using floats or double
+#ifdef USE_DOUBLES
+typedef double FLOAT_T;
+#else
+typedef float FLOAT_T;
+#endif
+
+#define FLOAT_T_MIN numeric_limits<FLOAT_T>::min();
+
+
+typedef int VERBOSE_T;
+static const int INVALID_VERBOSE = 0;
+static const int QUIET_VERBOSE = 1;
+static const int NORMAL_VERBOSE = 2;
+static const int HIGH_VERBOSE = 3;
+static const int HIGHER_VERBOSE = 4;
+static const int DUMP_VERBOSE = 5;
+
+static const int FILENAME_LENGTH = 4096;
+static const int BAD_SCORE = -1;
+static const int IDLENGTH = 256;
+static const int PEPTIDELENGTH = 80;
+static const int LINELENGTH = 4096;
+
+extern int verbosity;
+
+#define UNIFORM_INT_DISTRIBUTION_MAX 2147483647 // Max value of int32
+
+#ifdef DARWIN
+#ifdef PRE_LION
+#define INCLUDE_GETLINE
+#endif
+#endif
+#ifdef _MSC_VER
+#define INCLUDE_GETLINE
+#endif
+
+#ifdef INCLUDE_GETLINE
+/*********************************************************
+ This function replaces the GNU extension of the same name.
+ Reads a line from the given stream.
+ *********************************************************/
+int getline(char **lineptr, size_t *n, FILE *stream);
+#endif
+
+/***********************************************************************
+ * Return a not-a-number.
+ ***********************************************************************/
+double NaN(void);
+
+/***********************************************************************
+ * Return elapsed time in microseconds since the last call.
+ ***********************************************************************/
+double wall_clock(void);
+
+/************************************************************************
+ * int open_file
+ *
+ * Open a file gracefully.
+ *
+ * RETURN: Was the open successful?
+ ************************************************************************/
+bool open_file(
+  const char*     filename,            // Name of the file to be opened.
+  const char*     file_mode,           // Mode to be passed to fopen.
+  bool allow_stdin,         // If true, filename "-" is stdin.
+  const char*     file_description,   
+  const char*     content_description,
+  FILE**    afile);              // Pointer to the open file.
+
+/********************************************************************
+ * DEBUG_CODE (macro)
+ *
+ * Allow debugging code to be included or excluded from a compiled
+ * program.
+ ********************************************************************/
+#ifdef DEBUG
+#define DEBUG_CODE( debug_value, code_fragment ) \
+  { if (debug_value) { code_fragment } }
+#else
+#define DEBUG_CODE( debug_value, code_fragment )
+#endif 
+
+/********************************************************************
+ * Allocate dynamic memory. Die gracefully if memory is exhausted.
+ ********************************************************************/
+void *mymalloc(size_t size);
+void *mycalloc(size_t nelem, size_t size);
+void *myrealloc(void * ptr, size_t size);
+
+/********************************************************************
+ * fwrite with a check to make sure it was successful (useful for NFS problems)
+ ********************************************************************/
+bool myfwrite(const void *ptr, size_t size, size_t nitems, FILE *stream);
+
+/********************************************************************
+ * Math macros.
+ ********************************************************************/
+/* Note that the following type must be the  same as the MTYPE and ATYPE
+   defined in 'matrix.h' and 'array.h'. */
+typedef double PROB_T;       // Type definition for probability/frequency.
+#define PROB_SCAN " %lf"     // Scanf string for PROB_T.
+
+#define LOG_ZERO  (-1.0E10)  // Zero on the log scale.
+#define LOG_SMALL (-0.5E10)  // Threshold below which everything is zero.
+#define BITS      (33.2)     // = LOG2(-LOG_ZERO)
+
+#ifndef MIN
+#define MIN(a, b)         (((a) < (b)) ? (a) : (b))
+#endif
+#ifndef MAX
+#define MAX(a, b)         (((a) > (b)) ? (a) : (b))
+#endif
+
+/***************************************************************************
+ * Find the nearest integer.
+ ***************************************************************************/
+#define nint(x) ((int)((x) >= 0 ? ((x) + 0.5) : ((x) - 0.5)))
+
+/**************************************************************************
+ * Compute the logarithm of x, when 0 <= x <= 1.
+ **************************************************************************/
+void init_log_prob
+  (void);
+
+PROB_T log_prob
+  (PROB_T value);
+
+#define log_prob2(x)   (log_prob(x) * 1.44269504)
+
+/**************************************************************************
+ * Compute the logarithm of x.  Returns LOG_ZERO if x==0.
+ **************************************************************************/
+PROB_T my_log
+  (PROB_T x);
+
+#define my_log2(x)   (my_log(x) * 1.44269504)
+
+#define EXP2(x)                          \
+( ( (x) < LOG_SMALL) ?                   \
+  0.0 :                                  \
+  (exp((x) * 0.69314718 ))               \
+) 
+
+/**************************************************************************
+ * Given the logs (in base 2) of two numbers, return the log of their
+ * sum.
+ *
+ * This function is optimized based upon the following formula:
+ *
+ *      log(x+y) = log(x) + log(1 + exp(log(y) - log(x)))
+ *
+ **************************************************************************/
+#define LOG_VALUE(logx) \
+( ( (logx) < LOG_SMALL ) ? \
+    LOG_ZERO : \
+    (logx) \
+)
+
+#define LOG_SUM1(logx, logy) \
+( \
+  ( ( (logx) - (logy) ) > BITS ) ? \
+    LOG_VALUE(logx) : \
+    (logx) + my_log2( 1 + EXP2((logy) - (logx) ) ) \
+)
+
+#define LOG_SUM(logx, logy) \
+( \
+  ( (logx) > (logy) ) ? \
+    LOG_SUM1( (logx), (logy) ) : \
+    LOG_SUM1( (logy), (logx) ) \
+)
+
+/**************************************************************************
+ * Test for zero on a value that may be either a log or a raw float.
+ **************************************************************************/
+bool is_zero(double value, bool log_form);
+
+/**************************************************************************
+ * Test to see if two values are approximately equal.
+ **************************************************************************/
+bool almost_equal(double value1, double value2, double slop);
+
+/**************************************************************************
+ * Generic functions for converting between integer and string
+ * representations of an enumerated type.
+ *
+ * Assumes that the longest string representation of the enumerated
+ * type does not exceed 100 characters.
+ *
+ * Assumes that the zeroth enumerated type element is invalid.
+ **************************************************************************/
+const char*  convert_enum_type(
+  int     enum_type,  /* The enumerated type object to be converted. */
+  const char*  enum_strs[],  /* String values associated with this type. */
+  int     num_enums); /* Number of values of the type. */
+
+int convert_enum_type_str(
+  const char*   enum_type_str, /* String to be converted. */
+  int     default_value, /* Value to return if first arg is null. */
+  const char**  enum_strs,     /* String values associated with this type. */
+  int     num_enums);    /* Number of values of the type. */
+
+/**************************************************************************
+ * Get the name of the CPU.
+ **************************************************************************/
+const char* hostname(void);
+
+/**************************************************************************
+ * Get the current date and time.
+ **************************************************************************/
+const char* date_and_time(void);
+
+/************************************************************************
+ * parses a file of length max_lines and returns an array of strings
+ ************************************************************************/
+char** parse_file(
+  char* file_name,
+  int max_lines, 
+  int* num_lines
+  );
+
+int myrandom();
+int myrandom_limit(int max);
+void mysrandom(unsigned seed);
+
+#endif
+
diff --git a/src/util/windirent.h b/src/util/windirent.h
new file mode 100644
index 0000000..3dbca46
--- /dev/null
+++ b/src/util/windirent.h
@@ -0,0 +1,369 @@
+/*****************************************************************************
+ * dirent.h - dirent API for Microsoft Visual Studio
+ *
+ * Copyright (C) 2006 Toni Ronkko
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * ``Software''), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL TONI RONKKO BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Aug 11, 2010, Toni Ronkko
+ * Added d_type and d_namlen fields to dirent structure.  The former is
+ * especially useful for determining whether directory entry represents a
+ * file or a directory.  For more information, see
+ * http://www.delorie.com/gnu/docs/glibc/libc_270.html
+ *
+ * Aug 11, 2010, Toni Ronkko
+ * Improved conformance to the standards.  For example, errno is now set
+ * properly on failure and assert() is never used.  Thanks to Peter Brockam
+ * for suggestions.
+ *
+ * Aug 11, 2010, Toni Ronkko
+ * Fixed a bug in rewinddir(): when using relative directory names, change
+ * of working directory no longer causes rewinddir() to fail.
+ *
+ * Dec 15, 2009, John Cunningham
+ * Added rewinddir member function
+ *
+ * Jan 18, 2008, Toni Ronkko
+ * Using FindFirstFileA and WIN32_FIND_DATAA to avoid converting string
+ * between multi-byte and unicode representations.  This makes the
+ * code simpler and also allows the code to be compiled under MingW.  Thanks
+ * to Azriel Fasten for the suggestion.
+ *
+ * Mar 4, 2007, Toni Ronkko
+ * Bug fix: due to the strncpy_s() function this file only compiled in
+ * Visual Studio 2005.  Using the new string functions only when the
+ * compiler version allows.
+ *
+ * Nov  2, 2006, Toni Ronkko
+ * Major update: removed support for Watcom C, MS-DOS and Turbo C to
+ * simplify the file, updated the code to compile cleanly on Visual
+ * Studio 2005 with both unicode and multi-byte character strings,
+ * removed rewinddir() as it had a bug.
+ *
+ * Aug 20, 2006, Toni Ronkko
+ * Removed all remarks about MSVC 1.0, which is antiqued now.  Simplified
+ * comments by removing SGML tags.
+ *
+ * May 14 2002, Toni Ronkko
+ * Embedded the function definitions directly to the header so that no
+ * source modules need to be included in the Visual Studio project.  Removed
+ * all the dependencies to other projects so that this very header can be
+ * used independently.
+ *
+ * May 28 1998, Toni Ronkko
+ * First version.
+ *****************************************************************************/
+#ifndef DIRENT_H
+#define DIRENT_H
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+/* File type and permission flags for stat() */
+#if defined(_MSC_VER)  &&  !defined(S_IREAD)
+# define S_IFMT   _S_IFMT                      /* file type mask */
+# define S_IFDIR  _S_IFDIR                     /* directory */
+# define S_IFCHR  _S_IFCHR                     /* character device */
+# define S_IFFIFO _S_IFFIFO                    /* pipe */
+# define S_IFREG  _S_IFREG                     /* regular file */
+# define S_IREAD  _S_IREAD                     /* read permission */
+# define S_IWRITE _S_IWRITE                    /* write permission */
+# define S_IEXEC  _S_IEXEC                     /* execute permission */
+#endif
+#define S_IFBLK   0                            /* block device */
+#define S_IFLNK   0                            /* link */
+#define S_IFSOCK  0                            /* socket */
+
+#if defined(_MSC_VER)
+# define S_IRUSR  S_IREAD                      /* read, user */
+# define S_IWUSR  S_IWRITE                     /* write, user */
+# define S_IXUSR  0                            /* execute, user */
+# define S_IRGRP  0                            /* read, group */
+# define S_IWGRP  0                            /* write, group */
+# define S_IXGRP  0                            /* execute, group */
+# define S_IROTH  0                            /* read, others */
+# define S_IWOTH  0                            /* write, others */
+# define S_IXOTH  0                            /* execute, others */
+# define S_IRWXU  S_IREAD | S_IWRITE | S_IEXEC /* read, write, execute user */
+# define S_IRWXG 0                             /* read, write, execute group */
+# define S_IRWXO 0                             /* read, write, execute othter */
+#endif
+
+/* Indicates that d_type field is available in dirent structure */
+#define _DIRENT_HAVE_D_TYPE
+
+/* File type flags for d_type */
+#define DT_UNKNOWN  0
+#define DT_REG      S_IFREG
+#define DT_DIR      S_IFDIR
+#define DT_FIFO     S_IFFIFO
+#define DT_SOCK     S_IFSOCK
+#define DT_CHR      S_IFCHR
+#define DT_BLK      S_IFBLK
+
+/* Macros for converting between st_mode and d_type */
+#define IFTODT(mode) ((mode) & S_IFMT)
+#define DTTOIF(type) (type)
+
+/*
+ * File type macros.  Note that block devices, sockets and links cannot be
+ * distinguished on Windows and the macros S_ISBLK, S_ISSOCK and S_ISLNK are
+ * only defined for compatibility.  These macros should always return false
+ * on Windows.
+ */
+#define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFFIFO)
+#define S_ISDIR(mode)  (((mode) & S_IFMT) == S_IFDIR)
+#define S_ISLNK(mode)  (((mode) & S_IFMT) == S_IFLNK)
+#define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
+#define S_ISCHR(mode)  (((mode) & S_IFMT) == S_IFCHR)
+#define S_ISBLK(mode)  (((mode) & S_IFMT) == S_IFBLK)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef struct dirent {
+  char d_name[MAX_PATH + 1];                  /* File name */
+  size_t d_namlen;                            /* Length of name without \0 */
+  int d_type;                                 /* File type */
+} dirent;
+
+
+typedef struct DIR {
+  dirent           curentry;                  /* Current directory entry */
+  WIN32_FIND_DATAA find_data;                 /* Private file data */
+  int              cached;                    /* True if data is valid */
+  HANDLE           search_handle;             /* Win32 search handle */
+  char             patt[MAX_PATH + 3];        /* Initial directory name */
+} DIR;
+
+
+/* Forward declarations */
+static void copy_dirent(struct dirent *src, struct dirent *dest);
+static DIR *opendir(const char *dirname);
+static struct dirent *readdir(DIR *dirp);
+static int closedir(DIR *dirp);
+static void rewinddir(DIR* dirp);
+
+
+/* Use the new safe string functions introduced in Visual Studio 2005 */
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+# define DIRENT_STRNCPY(dest, src, size) strncpy_s((dest), (size), (src), _TRUNCATE)
+#else
+# define DIRENT_STRNCPY(dest, src, size) strncpy((dest), (src), (size))
+#endif
+
+/* Set errno variable */
+#if defined(_MSC_VER)
+#define DIRENT_SET_ERRNO(x) _set_errno (x)
+#else
+#define DIRENT_SET_ERRNO(x) (errno = (x))
+#endif
+
+/*****************************************************************************
+ * Copy a dirent structure.
+ */
+static void copy_dirent(struct dirent *src, struct dirent *dest) {
+  dest->d_type = src->d_type;
+  dest->d_namlen = src->d_namlen;
+  strncpy(dest->d_name, src->d_name, src->d_namlen + 1);
+}
+
+/*****************************************************************************
+ * Open directory stream DIRNAME for read and return a pointer to the
+ * internal working area that is used to retrieve individual directory
+ * entries.
+ */
+static DIR *opendir(const char *dirname) {
+  DIR *dirp;
+
+  /* ensure that the resulting search pattern will be a valid file name */
+  if (dirname == NULL) {
+     DIRENT_SET_ERRNO (ENOENT);
+     return NULL;
+  }
+  if (strlen (dirname) + 3 >= MAX_PATH) {
+     DIRENT_SET_ERRNO (ENAMETOOLONG);
+     return NULL;
+  }
+
+  /* construct new DIR structure */
+  dirp = (DIR*) malloc (sizeof (struct DIR));
+  if (dirp != NULL) {
+     int error;
+
+     /*
+      * Convert relative directory name to an absolute directory one.  This
+      * allows rewinddir() to function correctly when the current working
+      * directory is changed between opendir() and rewinddir().
+      */
+     if (GetFullPathNameA (dirname, MAX_PATH, dirp->patt, NULL)) {
+        char *p;
+
+        /* append the search pattern "\\*\0" to the directory name */
+        p = strchr (dirp->patt, '\0');
+        if (dirp->patt < p  &&  *(p-1) != '\\'  &&  *(p-1) != ':') {
+          *p++ = '\\';
+        }
+        *p++ = '*';
+        *p = '\0';
+
+        /* open directory stream and retrieve the first entry */
+        dirp->search_handle = FindFirstFileA (dirp->patt, &dirp->find_data);
+        if (dirp->search_handle != INVALID_HANDLE_VALUE) {
+           /* a directory entry is now waiting in memory */
+           dirp->cached = 1;
+           error = 0;
+        } else {
+           /* search pattern is not a directory name? */
+           DIRENT_SET_ERRNO (ENOENT);
+           error = 1;
+        }
+     } else {
+        /* buffer too small */
+        DIRENT_SET_ERRNO (ENOMEM);
+        error = 1;
+     }
+
+     if (error) {
+        free (dirp);
+        dirp = NULL;
+     }
+  }
+
+  return dirp;
+}
+
+
+/*****************************************************************************
+ * Read a directory entry, and return a pointer to a dirent structure
+ * containing the name of the entry in d_name field.  Individual directory
+ * entries returned by this very function include regular files,
+ * sub-directories, pseudo-directories "." and "..", but also volume labels,
+ * hidden files and system files may be returned.
+ */
+static struct dirent *readdir(DIR *dirp) {
+  DWORD attr;
+  if (dirp == NULL) {
+     /* directory stream did not open */
+     DIRENT_SET_ERRNO (EBADF);
+     return NULL;
+  }
+
+  /* get next directory entry */
+  if (dirp->cached != 0) {
+     /* a valid directory entry already in memory */
+     dirp->cached = 0;
+  } else {
+     /* get the next directory entry from stream */
+     if (dirp->search_handle == INVALID_HANDLE_VALUE) {
+        return NULL;
+     }
+     if (FindNextFileA (dirp->search_handle, &dirp->find_data) == FALSE) {
+        /* the very last entry has been processed or an error occured */
+        FindClose (dirp->search_handle);
+        dirp->search_handle = INVALID_HANDLE_VALUE;
+        return NULL;
+     }
+  }
+
+  /* copy as a multibyte character string */
+  DIRENT_STRNCPY ( dirp->curentry.d_name,
+            dirp->find_data.cFileName,
+            sizeof(dirp->curentry.d_name) );
+  dirp->curentry.d_name[MAX_PATH] = '\0';
+
+  /* compute the length of name */
+  dirp->curentry.d_namlen = strlen (dirp->curentry.d_name);
+
+  /* determine file type */
+  attr = dirp->find_data.dwFileAttributes;
+  if ((attr & FILE_ATTRIBUTE_DEVICE) != 0) {
+     dirp->curentry.d_type = DT_CHR;
+  } else if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) {
+     dirp->curentry.d_type = DT_DIR;
+  } else {
+     dirp->curentry.d_type = DT_REG;
+  }
+  return &dirp->curentry;
+}
+
+
+/*****************************************************************************
+ * Close directory stream opened by opendir() function.  Close of the
+ * directory stream invalidates the DIR structure as well as any previously
+ * read directory entry.
+ */
+static int closedir(DIR *dirp) {
+  if (dirp == NULL) {
+     /* invalid directory stream */
+     DIRENT_SET_ERRNO (EBADF);
+     return -1;
+  }
+
+  /* release search handle */
+  if (dirp->search_handle != INVALID_HANDLE_VALUE) {
+     FindClose (dirp->search_handle);
+     dirp->search_handle = INVALID_HANDLE_VALUE;
+  }
+
+  /* release directory structure */
+  free (dirp);
+  return 0;
+}
+
+
+/*****************************************************************************
+ * Resets the position of the directory stream to which dirp refers to the
+ * beginning of the directory.  It also causes the directory stream to refer
+ * to the current state of the corresponding directory, as a call to opendir()
+ * would have done.  If dirp does not refer to a directory stream, the effect
+ * is undefined.
+ */
+static void rewinddir(DIR* dirp) {
+  if (dirp != NULL) {
+     /* release search handle */
+     if (dirp->search_handle != INVALID_HANDLE_VALUE) {
+        FindClose (dirp->search_handle);
+     }
+
+     /* open new search handle and retrieve the first entry */
+     dirp->search_handle = FindFirstFileA (dirp->patt, &dirp->find_data);
+     if (dirp->search_handle != INVALID_HANDLE_VALUE) {
+        /* a directory entry is now waiting in memory */
+        dirp->cached = 1;
+     } else {
+        /* failed to re-open directory: no directory entry in memory */
+        dirp->cached = 0;
+     }
+}
+}
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*DIRENT_H*/

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/crux.git



More information about the debian-med-commit mailing list